Update from product codes
authorJoonyoung Shim <jy0922.shim@samsung.com>
Mon, 16 Nov 2015 08:37:19 +0000 (17:37 +0900)
committerJoonyoung Shim <jy0922.shim@samsung.com>
Wed, 18 Nov 2015 08:43:21 +0000 (17:43 +0900)
Until commit 5cfebdc36f5b88225c4f8c032f7cf511ebba1cc5

Change-Id: I0f838df8640acefc0cdecd628e7c7cd10360d78f
Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
139 files changed:
arch/arm/boot/dts/sprd-scx35-tizen_z3-r00.dtsi
arch/arm/boot/dts/sprd-scx35-tizen_z3-r01.dtsi
arch/arm/boot/dts/sprd-scx35-tizen_z3-r02.dtsi
arch/arm/boot/dts/sprd-scx35-tizen_z3-r03.dtsi
arch/arm/configs/tizen_tm1_defconfig [changed mode: 0644->0755]
arch/arm/include/asm/io.h
arch/arm/mach-sc/sec-switch.c
drivers/battery/sec_battery.c
drivers/battery/sm5701_charger.c
drivers/battery/sprd27x3_fuelgauge4samsung.c [changed mode: 0755->0644]
drivers/bluetooth/hci_ldisc_bcm.c
drivers/cpufreq/cpufreq_sprdemand.c
drivers/gpu/drm/drm_fops.c
drivers/gpu/drm/drm_gem.c
drivers/gpu/drm/drm_irq.c
drivers/gpu/drm/sprd/sprd_drm_drv.c
drivers/gpu/drm/sprd/sprd_drm_gem.c
drivers/gpu/drm/sprd/sprd_drm_gsp.c
drivers/gpu/drm/sprd/sprd_drm_ipp.c
drivers/gpu/drm/sprd/sprd_drm_irq.c
drivers/gpu/drm/sprd/sprd_drm_irq.h
drivers/hid/usbhid/Kconfig
drivers/hwspinlock/sprd_hwspinlock.c
drivers/input/Kconfig
drivers/input/Makefile
drivers/input/keyboard/coreriver/tc350-touchkey.c
drivers/input/misc/Kconfig
drivers/input/misc/Makefile
drivers/input/misc/sec-input-bridge.c [moved from drivers/input/sec-input-bridge.c with 77% similarity]
drivers/input/touchscreen/imagis_30xxc/ist30xxc.c
drivers/input/touchscreen/imagis_30xxc/ist30xxc_misc.c
drivers/input/touchscreen/imagis_30xxc/ist30xxc_sec.c
drivers/media/radio/sc2331/fmdrv_main.c
drivers/media/radio/sc2331/fmdrv_rx.c
drivers/media/sprd_dcam/common/dcam_img.c [changed mode: 0644->0755]
drivers/media/sprd_dcam/tshark/dcam_drv.c
drivers/media/sprd_isp/isp2.0/tshark2/src/isp_k_2d_lsc.c [changed mode: 0644->0755]
drivers/media/sprd_isp/isp_drv.c
drivers/media/sprd_rotation/img_rot.c
drivers/media/sprd_scale/common/img_scale.c
drivers/media/sprd_scale/scale_drv.c
drivers/media/sprd_sensor/power/sensor_power_z3.c
drivers/media/sprd_sensor/sensor_drv_k.c [changed mode: 0644->0755]
drivers/mfd/Kconfig
drivers/mfd/sm5504.c [changed mode: 0755->0644]
drivers/misc/sdiodev/sdio_dev.c
drivers/misc/sprd_jpg/sprd_jpg.c
drivers/misc/sprd_vsp/sprd_vsp_sc8830.c
drivers/net/wireless/sc2331/wlan_cfg80211.c
drivers/net/wireless/sc2331/wlan_common.h
drivers/platform/sprd/Kconfig [changed mode: 0755->0644]
drivers/platform/sprd/headsmp.S
drivers/platform/sprd/hotplug.c
drivers/platform/sprd/pin_switch.c
drivers/platform/sprd/pm-scx35.c
drivers/platform/sprd/pm_debug_scx35.c
drivers/platform/sprd/sec_debug.c [changed mode: 0644->0755]
drivers/platform/sprd/sec_log.c [changed mode: 0755->0644]
drivers/power/load_analyzer_addr.c
drivers/power/load_analyzer_cpu.c
drivers/power/load_analyzer_current.c
drivers/power/load_analyzer_input.c
drivers/power/load_analyzer_main.c
drivers/power/load_analyzer_mini.c
drivers/power/load_analyzer_workqueue.c
drivers/sensors/cm36672p.c
drivers/sipc/seth.c
drivers/staging/android/ion/ion.c
drivers/staging/android/ion/sprd/sprd_ion.c
drivers/tty/serial/serial_sprd_dt.c [changed mode: 0644->0755]
drivers/usb/notify/usb_notifier_sprd.c
drivers/video/sprdfb/lcd/lcd_s6e8aa5x01_mipi.c
drivers/video/sprdfb/mdnie/mdnie_lite.c
drivers/video/sprdfb/sprdfb.h
drivers/video/sprdfb/sprdfb_dispc.c
drivers/video/sprdfb/sprdfb_main.c
drivers/video/sprdfb/sprdfb_panel.c
drivers/watchdog/sprd_wdt_sys.c
firmware/coreriver/tc350_z3_3g.fw.ihex
firmware/tsp_imagis/ist3038c_Z3_3G.fw.ihex
fs/eventpoll.c
fs/ext4/ext4.h
fs/ext4/extents.c
fs/ext4/extents_status.c
fs/ext4/file.c
fs/ext4/indirect.c
fs/ext4/inode.c
fs/ext4/mballoc.c
fs/ext4/namei.c
fs/ext4/super.c
fs/fs-writeback.c
fs/jbd2/checkpoint.c
fs/quota/dquot.c
fs/stat.c
include/linux/battery/sec_battery.h
include/linux/compaction.h
include/linux/fs.h
include/linux/i2c/ist30xxc.h
include/linux/input/sec-input-bridge.h
include/linux/load_analyzer.h
include/linux/mfd/muic_noti.h
include/linux/mfd/sm5504.h
include/linux/quotaops.h
include/linux/regs_debug.h
include/linux/switch.h
include/net/bluetooth/bluetooth.h
include/net/bluetooth/hci.h
include/net/bluetooth/l2cap.h
include/net/sock.h
include/net/tcp_states.h
include/soc/sprd/arch_lock.h
include/soc/sprd/sec_debug.h [changed mode: 0755->0644]
include/uapi/video/Kbuild
include/uapi/video/sprdfb.h [moved from include/video/sprd_fb.h with 67% similarity]
include/video/Kbuild
init/do_mounts_rd.c
kernel/kallsyms.c
kernel/swap/kprobe/swap_kprobes_deps.h
kernel/swap/preload/preload_module.c
kernel/swap/preload/preload_threads.c
kernel/swap/preload/preload_threads.h
kernel/swap/task_data/task_data.c
kernel/swap/us_manager/helper.c
kernel/swap/us_manager/us_manager.c
kernel/time/time_history.c
lib/vsprintf.c
mm/compaction.c
mm/memcontrol.c
mm/slub.c
mm/zsmalloc.c
net/bluetooth/hci_core.c
net/bluetooth/hci_event.c
net/bluetooth/l2cap_core.c
net/bluetooth/l2cap_sock.c
net/bluetooth/mgmt.c
net/ipv4/ping.c
net/netfilter/xt_cgroup.c
packaging/linux-3.10-sc7730.spec
sound/soc/sprd/dai/sprd-pcm.c

index d5c66d5..a4d4bdd 100644 (file)
                linux,initrd-end   = <0x855a3212>;
        };
 
-       samsung_input_bridge{
+       samsung_input_bridge {
                compatible = "samsung_input_bridge";
-               input_bridge,num_map = <2>;
+               input_bridge,num_map = <3>;
                input_bridge,map_codes ="input_bridge,logdump_map_code",
-                                       "input_bridge,safemode_map_code";
+                                       "input_bridge,safemode_map_code",
+                                       "input_bridge,hall_log_map_code";
+               input_bridge,map_types ="input_bridge,logdump_map_type",
+                                       "input_bridge,safemode_map_type",
+                                       "input_bridge,hall_log_map_type";
                input_bridge,logdump_map_code  = <115 114 115 114 116 114 115 116>;
+               input_bridge,logdump_map_type  = <1 1 1 1 1 1 1 1>;
                input_bridge,safemode_map_code  = <114>;
-               input_bridge,env_str = "APPS_LOG", "SAFE_MODE";
-               input_bridge,env_value = "ON", "ON";
+               input_bridge,safemode_map_type  = <1>;
+               input_bridge,hall_log_map_code = <116 8 8 8 8 8 8 8 8>;
+               input_bridge,hall_log_map_type = <1 2 2 2 2 2 2 2 2>;
+               input_bridge,env_str = "APPS_LOG", "SAFE_MODE", "APPS_LOG";
+               input_bridge,env_value = "ON", "ON", "ON";
                input_bridge,map_key = <1>;
                input_bridge,enable_uevent = <1>;
                input_bridge,uevent_action = <2>;
-               input_bridge,num_dev = <2>;
+               input_bridge,dev_num = <2>;
                input_bridge,dev_name_str = "sci-keypad", "sprd-eic-keys";
-               };
+       };
 
        aliases {
                i2c4 = &i2c4;
                                        compatible = "sm,sm5701-charger";
                                        chgen-gpio = <&d_gpio_gpio 215 0>;
                                        chgirq-gpio = <&d_gpio_gpio 161 0>;
-                                       chg-float-voltage = <4350>;
+                                       chg-float-voltage = <4340>;
                                };
                        };
 
                alm_soc = <5>; /* SOC alm level %*/
                alm_vbat = <3450>; /* Vbat alm level mV*/
                rint = <200>; /*battery internal impedance*/
-               cnom = <2600>; /* nominal capacity in mAh */
+               cnom = <2577>; /* nominal capacity in mAh */
                rsense_real = <203>; /* sense resistor 0.1mOhm from real environment*/
                rsense_spec = <200>; /* sense resistor 0.1mOhm from specification*/
                relax_current = <50>; /* current for relaxation in mA (< C/20) */
                 rint_temp_tab = <1025 200
                                 1010 500
                                 1000 900>;
-               ocv_table = <4320 100
-                               4248 95
-                               4191 90
-                               4138 85
-                               4086 80
-                               4042 75
-                               3987 70
-                               3956 65
-                               3917 60
-                               3866 55
-                               3832 50
-                               3810 45
-                               3794 40
-                               3781 35
-                               3775 30
-                               3767 25
-                               3743 20
-                               3699 15
-                               3688 10
-                               3590 5
+               ocv_table = <4290 100
+                               4237 95
+                               4182 90
+                               4130 85
+                               4081 80
+                               4034 75
+                               3988 70
+                               3955 65
+                               3918 60
+                               3868 55
+                               3835 50
+                               3813 45
+                               3796 40
+                               3783 35
+                               3776 30
+                               3770 25
+                               3752 20
+                               3715 15
+                               3690 10
+                               3676 5
                                3400 0>;
                sprd_fgu: sprd_fgu{
                        compatible  = "sprd,sprd_fgu";
                battery,temp_low_threshold_lpm = <(-50)>;
                battery,temp_low_recovery_lpm = <0>;
                battery,full_check_type = <7>; /* SEC_BATTERY_FULLCHARGED_CHGPSY */
-               battery,full_check_type_2nd = <3>; /* SEC_BATTERY_FULLCHARGED_TIME */
+               battery,full_check_type_2nd = <2>; /* SEC_BATTERY_FULLCHARGED_FG_CURRENT */
                battery,full_check_count = <1>;
                battery,chg_gpio_full_check = <0>;
                battery,chg_polarity_full_check = <1>;
                battery,recharge_check_count = <1>;
                battery,recharge_condition_type = <4>; /* SEC_BATTERY_RECHARGE_CONDITION_VCELL */
                battery,recharge_condition_soc = <98>;
-               battery,recharge_condition_vcell = <4300>;
+               battery,recharge_condition_vcell = <4287>;
 
                battery,charging_total_time = <21600>;
                battery,recharging_total_time = <5400>;
 
                /* Charger */
                charger,vbus_ctrl_gpio = <&d_gpio_gpio 64 0x00>;
-               charger,chg_float_voltage = <4350>;
+               charger,chg_float_voltage = <4340>;
                battery,input_current_limit = <1000 460 460 1000 460 1000 1000 460 460 1000 460 1000 1000 460 1000 300 1000 1000 300 1000 1000 460 460>;
                battery,fast_charging_current = <1550 975 975 1550 975 1550 1550 975 0 1550 975 1550 1550 (-1) 1550 300 1550 1550 300 1550 1550 0 0>;
                battery,full_check_current_1st = <200 0 200 200 200 200 200 200 0 200 200 200 200 0 200 200 200 200 200 200 200 0 0>;
-               battery,full_check_current_2nd = <2400 0 2400 2400 2400 2400 2400 2400 0 2400 2400 2400 2400 0 2400 2400 2400 2400 2400 2400 2400 0 0>;
+               battery,full_check_current_2nd = <100 0 100 100 100 100 100 100 0 100 100 100 100 0 100 100 100 100 100 100 100 0 0>;
        };
 
        panel_cabc_bl {
index 086321a..7ac0bc3 100644 (file)
                linux,initrd-end   = <0x855a3212>;
        };
 
-       samsung_input_bridge{
+       samsung_input_bridge {
                compatible = "samsung_input_bridge";
-               input_bridge,num_map = <2>;
+               input_bridge,num_map = <3>;
                input_bridge,map_codes ="input_bridge,logdump_map_code",
-                                       "input_bridge,safemode_map_code";
+                                       "input_bridge,safemode_map_code",
+                                       "input_bridge,hall_log_map_code";
+               input_bridge,map_types ="input_bridge,logdump_map_type",
+                                       "input_bridge,safemode_map_type",
+                                       "input_bridge,hall_log_map_type";
                input_bridge,logdump_map_code  = <115 114 115 114 116 114 115 116>;
+               input_bridge,logdump_map_type  = <1 1 1 1 1 1 1 1>;
                input_bridge,safemode_map_code  = <114>;
-               input_bridge,env_str = "APPS_LOG", "SAFE_MODE";
-               input_bridge,env_value = "ON", "ON";
+               input_bridge,safemode_map_type  = <1>;
+               input_bridge,hall_log_map_code = <116 8 8 8 8 8 8 8 8>;
+               input_bridge,hall_log_map_type = <1 2 2 2 2 2 2 2 2>;
+               input_bridge,env_str = "APPS_LOG", "SAFE_MODE", "APPS_LOG";
+               input_bridge,env_value = "ON", "ON", "ON";
                input_bridge,map_key = <1>;
                input_bridge,enable_uevent = <1>;
                input_bridge,uevent_action = <2>;
-               input_bridge,num_dev = <2>;
+               input_bridge,dev_num = <2>;
                input_bridge,dev_name_str = "sci-keypad", "sprd-eic-keys";
-               };
+       };
 
        aliases {
                i2c4 = &i2c4;
                                        compatible = "sm,sm5701-charger";
                                        chgen-gpio = <&d_gpio_gpio 215 0>;
                                        chgirq-gpio = <&d_gpio_gpio 161 0>;
-                                       chg-float-voltage = <4350>;
+                                       chg-float-voltage = <4340>;
                                };
                        };
 
                alm_soc = <5>; /* SOC alm level %*/
                alm_vbat = <3450>; /* Vbat alm level mV*/
                rint = <200>; /*battery internal impedance*/
-               cnom = <2600>; /* nominal capacity in mAh */
+               cnom = <2577>; /* nominal capacity in mAh */
                rsense_real = <203>; /* sense resistor 0.1mOhm from real environment*/
                rsense_spec = <200>; /* sense resistor 0.1mOhm from specification*/
                relax_current = <50>; /* current for relaxation in mA (< C/20) */
                rint_temp_tab = <1025 200
                                1010 500
                                1000 900>;
-               ocv_table = <4320 100
-                               4248 95
-                               4191 90
-                               4138 85
-                               4086 80
-                               4042 75
-                               3987 70
-                               3956 65
-                               3917 60
-                               3866 55
-                               3832 50
-                               3810 45
-                               3794 40
-                               3781 35
-                               3775 30
-                               3767 25
-                               3743 20
-                               3699 15
-                               3688 10
-                               3590 5
+               ocv_table = <4290 100
+                               4237 95
+                               4182 90
+                               4130 85
+                               4081 80
+                               4034 75
+                               3988 70
+                               3955 65
+                               3918 60
+                               3868 55
+                               3835 50
+                               3813 45
+                               3796 40
+                               3783 35
+                               3776 30
+                               3770 25
+                               3752 20
+                               3715 15
+                               3690 10
+                               3676 5
                                3400 0>;
                sprd_fgu: sprd_fgu{
                        compatible  = "sprd,sprd_fgu";
                battery,temp_low_threshold_lpm = <(-50)>;
                battery,temp_low_recovery_lpm = <0>;
                battery,full_check_type = <7>; /* SEC_BATTERY_FULLCHARGED_CHGPSY */
-               battery,full_check_type_2nd = <3>; /* SEC_BATTERY_FULLCHARGED_TIME */
+               battery,full_check_type_2nd = <2>; /* SEC_BATTERY_FULLCHARGED_FG_CURRENT */
                battery,full_check_count = <1>;
                battery,chg_gpio_full_check = <0>;
                battery,chg_polarity_full_check = <1>;
                battery,recharge_check_count = <1>;
                battery,recharge_condition_type = <4>; /* SEC_BATTERY_RECHARGE_CONDITION_VCELL */
                battery,recharge_condition_soc = <98>;
-               battery,recharge_condition_vcell = <4300>;
+               battery,recharge_condition_vcell = <4287>;
 
                battery,charging_total_time = <21600>;
                battery,recharging_total_time = <5400>;
 
                /* Charger */
                charger,vbus_ctrl_gpio = <&d_gpio_gpio 64 0x00>;
-               charger,chg_float_voltage = <4350>;
+               charger,chg_float_voltage = <4340>;
                battery,input_current_limit = <1000 460 460 1000 460 1000 1000 460 460 1000 460 1000 1000 460 1000 300 1000 1000 300 1000 1000 460 460>;
                battery,fast_charging_current = <1550 975 975 1550 975 1550 1550 975 0 1550 975 1550 1550 (-1) 1550 300 1550 1550 300 1550 1550 0 0>;
                battery,full_check_current_1st = <200 0 200 200 200 200 200 200 0 200 200 200 200 0 200 200 200 200 200 200 200 0 0>;
-               battery,full_check_current_2nd = <2400 0 2400 2400 2400 2400 2400 2400 0 2400 2400 2400 2400 0 2400 2400 2400 2400 2400 2400 2400 0 0>;
+               battery,full_check_current_2nd = <100 0 100 100 100 100 100 100 0 100 100 100 100 0 100 100 100 100 100 100 100 0 0>;
        };
 
        panel_cabc_bl {
index fed304f..f9f9e9d 100644 (file)
                linux,initrd-end   = <0x855a3212>;
        };
 
-       samsung_input_bridge{
+       samsung_input_bridge {
                compatible = "samsung_input_bridge";
-               input_bridge,num_map = <2>;
+               input_bridge,num_map = <3>;
                input_bridge,map_codes ="input_bridge,logdump_map_code",
-                                       "input_bridge,safemode_map_code";
+                                       "input_bridge,safemode_map_code",
+                                       "input_bridge,hall_log_map_code";
+               input_bridge,map_types ="input_bridge,logdump_map_type",
+                                       "input_bridge,safemode_map_type",
+                                       "input_bridge,hall_log_map_type";
                input_bridge,logdump_map_code  = <115 114 115 114 116 114 115 116>;
+               input_bridge,logdump_map_type  = <1 1 1 1 1 1 1 1>;
                input_bridge,safemode_map_code  = <114>;
-               input_bridge,env_str = "APPS_LOG", "SAFE_MODE";
-               input_bridge,env_value = "ON", "ON";
+               input_bridge,safemode_map_type  = <1>;
+               input_bridge,hall_log_map_code = <116 8 8 8 8 8 8 8 8>;
+               input_bridge,hall_log_map_type = <1 2 2 2 2 2 2 2 2>;
+               input_bridge,env_str = "APPS_LOG", "SAFE_MODE", "APPS_LOG";
+               input_bridge,env_value = "ON", "ON", "ON";
                input_bridge,map_key = <1>;
                input_bridge,enable_uevent = <1>;
                input_bridge,uevent_action = <2>;
-               input_bridge,num_dev = <2>;
+               input_bridge,dev_num = <2>;
                input_bridge,dev_name_str = "sci-keypad", "sprd-eic-keys";
-               };
+       };
 
        aliases {
                i2c4 = &i2c4;
                                        compatible = "sm,sm5701-charger";
                                        chgen-gpio = <&d_gpio_gpio 215 0>;
                                        chgirq-gpio = <&d_gpio_gpio 161 0>;
-                                       chg-float-voltage = <4350>;
+                                       chg-float-voltage = <4340>;
                                };
                        };
 
                alm_soc = <5>; /* SOC alm level %*/
                alm_vbat = <3450>; /* Vbat alm level mV*/
                rint = <200>; /*battery internal impedance*/
-               cnom = <2600>; /* nominal capacity in mAh */
+               cnom = <2577>; /* nominal capacity in mAh */
                rsense_real = <203>; /* sense resistor 0.1mOhm from real environment*/
                rsense_spec = <200>; /* sense resistor 0.1mOhm from specification*/
                relax_current = <50>; /* current for relaxation in mA (< C/20) */
                 rint_temp_tab = <1025 200
                                 1010 500
                                 1000 900>;
-               ocv_table = <4320 100
-                               4248 95
-                               4191 90
-                               4138 85
-                               4086 80
-                               4042 75
-                               3987 70
-                               3956 65
-                               3917 60
-                               3866 55
-                               3832 50
-                               3810 45
-                               3794 40
-                               3781 35
-                               3775 30
-                               3767 25
-                               3743 20
-                               3699 15
-                               3688 10
-                               3590 5
+               ocv_table = <4290 100
+                               4237 95
+                               4182 90
+                               4130 85
+                               4081 80
+                               4034 75
+                               3988 70
+                               3955 65
+                               3918 60
+                               3868 55
+                               3835 50
+                               3813 45
+                               3796 40
+                               3783 35
+                               3776 30
+                               3770 25
+                               3752 20
+                               3715 15
+                               3690 10
+                               3676 5
                                3400 0>;
                sprd_fgu: sprd_fgu{
                        compatible  = "sprd,sprd_fgu";
                battery,temp_low_threshold_lpm = <(-50)>;
                battery,temp_low_recovery_lpm = <0>;
                battery,full_check_type = <7>; /* SEC_BATTERY_FULLCHARGED_CHGPSY */
-               battery,full_check_type_2nd = <3>; /* SEC_BATTERY_FULLCHARGED_TIME */
+               battery,full_check_type_2nd = <2>; /* SEC_BATTERY_FULLCHARGED_FG_CURRENT */
                battery,full_check_count = <1>;
                battery,chg_gpio_full_check = <0>;
                battery,chg_polarity_full_check = <1>;
                battery,recharge_check_count = <1>;
                battery,recharge_condition_type = <4>; /* SEC_BATTERY_RECHARGE_CONDITION_VCELL */
                battery,recharge_condition_soc = <98>;
-               battery,recharge_condition_vcell = <4300>;
+               battery,recharge_condition_vcell = <4287>;
 
                battery,charging_total_time = <21600>;
                battery,recharging_total_time = <5400>;
 
                /* Charger */
                charger,vbus_ctrl_gpio = <&d_gpio_gpio 64 0x00>;
-               charger,chg_float_voltage = <4350>;
+               charger,chg_float_voltage = <4340>;
                battery,input_current_limit = <1000 460 460 1000 460 1000 1000 460 460 1000 460 1000 1000 460 1000 300 1000 1000 300 1000 1000 460 460>;
                battery,fast_charging_current = <1550 975 975 1550 975 1550 1550 975 0 1550 975 1550 1550 (-1) 1550 300 1550 1550 300 1550 1550 0 0>;
                battery,full_check_current_1st = <200 0 200 200 200 200 200 200 0 200 200 200 200 0 200 200 200 200 200 200 200 0 0>;
-               battery,full_check_current_2nd = <2400 0 2400 2400 2400 2400 2400 2400 0 2400 2400 2400 2400 0 2400 2400 2400 2400 2400 2400 2400 0 0>;
+               battery,full_check_current_2nd = <100 0 100 100 100 100 100 100 0 100 100 100 100 0 100 100 100 100 100 100 100 0 0>;
        };
 
        panel_cabc_bl {
index fed304f..d7a1e1e 100644 (file)
                linux,initrd-end   = <0x855a3212>;
        };
 
-       samsung_input_bridge{
+       samsung_input_bridge {
                compatible = "samsung_input_bridge";
-               input_bridge,num_map = <2>;
+               input_bridge,num_map = <3>;
                input_bridge,map_codes ="input_bridge,logdump_map_code",
-                                       "input_bridge,safemode_map_code";
+                                       "input_bridge,safemode_map_code",
+                                       "input_bridge,hall_log_map_code";
+               input_bridge,map_types ="input_bridge,logdump_map_type",
+                                       "input_bridge,safemode_map_type",
+                                       "input_bridge,hall_log_map_type";
                input_bridge,logdump_map_code  = <115 114 115 114 116 114 115 116>;
+               input_bridge,logdump_map_type  = <1 1 1 1 1 1 1 1>;
                input_bridge,safemode_map_code  = <114>;
-               input_bridge,env_str = "APPS_LOG", "SAFE_MODE";
-               input_bridge,env_value = "ON", "ON";
+               input_bridge,safemode_map_type  = <1>;
+               input_bridge,hall_log_map_code = <116 8 8 8 8 8 8 8 8>;
+               input_bridge,hall_log_map_type = <1 2 2 2 2 2 2 2 2>;
+               input_bridge,env_str = "APPS_LOG", "SAFE_MODE", "APPS_LOG";
+               input_bridge,env_value = "ON", "ON", "ON";
                input_bridge,map_key = <1>;
                input_bridge,enable_uevent = <1>;
                input_bridge,uevent_action = <2>;
-               input_bridge,num_dev = <2>;
+               input_bridge,dev_num = <2>;
                input_bridge,dev_name_str = "sci-keypad", "sprd-eic-keys";
-               };
+       };
 
        aliases {
                i2c4 = &i2c4;
                                        compatible = "sm,sm5701-charger";
                                        chgen-gpio = <&d_gpio_gpio 215 0>;
                                        chgirq-gpio = <&d_gpio_gpio 161 0>;
-                                       chg-float-voltage = <4350>;
+                                       chg-float-voltage = <4340>;
                                };
                        };
 
                alm_soc = <5>; /* SOC alm level %*/
                alm_vbat = <3450>; /* Vbat alm level mV*/
                rint = <200>; /*battery internal impedance*/
-               cnom = <2600>; /* nominal capacity in mAh */
+               cnom = <2577>; /* nominal capacity in mAh */
                rsense_real = <203>; /* sense resistor 0.1mOhm from real environment*/
                rsense_spec = <200>; /* sense resistor 0.1mOhm from specification*/
                relax_current = <50>; /* current for relaxation in mA (< C/20) */
                 rint_temp_tab = <1025 200
                                 1010 500
                                 1000 900>;
-               ocv_table = <4320 100
-                               4248 95
-                               4191 90
-                               4138 85
-                               4086 80
-                               4042 75
-                               3987 70
-                               3956 65
-                               3917 60
-                               3866 55
-                               3832 50
-                               3810 45
-                               3794 40
-                               3781 35
-                               3775 30
-                               3767 25
-                               3743 20
-                               3699 15
-                               3688 10
-                               3590 5
+               ocv_table = <4290 100
+                               4237 95
+                               4182 90
+                               4130 85
+                               4081 80
+                               4034 75
+                               3988 70
+                               3955 65
+                               3918 60
+                               3868 55
+                               3835 50
+                               3813 45
+                               3796 40
+                               3783 35
+                               3776 30
+                               3770 25
+                               3752 20
+                               3715 15
+                               3690 10
+                               3676 5
                                3400 0>;
                sprd_fgu: sprd_fgu{
                        compatible  = "sprd,sprd_fgu";
                battery,temp_low_threshold_lpm = <(-50)>;
                battery,temp_low_recovery_lpm = <0>;
                battery,full_check_type = <7>; /* SEC_BATTERY_FULLCHARGED_CHGPSY */
-               battery,full_check_type_2nd = <3>; /* SEC_BATTERY_FULLCHARGED_TIME */
+               battery,full_check_type_2nd = <2>; /* SEC_BATTERY_FULLCHARGED_FG_CURRENT */
                battery,full_check_count = <1>;
                battery,chg_gpio_full_check = <0>;
                battery,chg_polarity_full_check = <1>;
                battery,recharge_check_count = <1>;
                battery,recharge_condition_type = <4>; /* SEC_BATTERY_RECHARGE_CONDITION_VCELL */
                battery,recharge_condition_soc = <98>;
-               battery,recharge_condition_vcell = <4300>;
+               battery,recharge_condition_vcell = <4287>;
 
                battery,charging_total_time = <21600>;
                battery,recharging_total_time = <5400>;
 
                /* Charger */
                charger,vbus_ctrl_gpio = <&d_gpio_gpio 64 0x00>;
-               charger,chg_float_voltage = <4350>;
+               charger,chg_float_voltage = <4340>;
                battery,input_current_limit = <1000 460 460 1000 460 1000 1000 460 460 1000 460 1000 1000 460 1000 300 1000 1000 300 1000 1000 460 460>;
                battery,fast_charging_current = <1550 975 975 1550 975 1550 1550 975 0 1550 975 1550 1550 (-1) 1550 300 1550 1550 300 1550 1550 0 0>;
                battery,full_check_current_1st = <200 0 200 200 200 200 200 200 0 200 200 200 200 0 200 200 200 200 200 200 200 0 0>;
-               battery,full_check_current_2nd = <2400 0 2400 2400 2400 2400 2400 2400 0 2400 2400 2400 2400 0 2400 2400 2400 2400 2400 2400 2400 0 0>;
+               battery,full_check_current_2nd = <100 0 100 100 100 100 100 100 0 100 100 100 100 0 100 100 100 100 100 100 100 0 0>;
        };
 
        panel_cabc_bl {
 &i2c2 {
        #size-cells = <0>;
        status = "okay";
-       ims1911@44{
-               compatible = "ims1911";
-               reg = <0x44>;
-               interrupt-parent = <&d_gpio_gpio>;
-               interrupts = <216 0>;
-               ims1911,irq-gpio = <&d_gpio_gpio 216 0x00>;
-               ims1911,ps_setting = <0x42>;
-               ims1911,led_drive_current = <0x90>;
-               ims1911,led_drive_pulse = <49>;
-               ims1911,ps_int_low_threshold = <45>;
-               ims1911,ps_int_high_threshold = <75>;
-
-               ims1911-led-supply = <&vdd28>;
-               ims1911-vdd-supply = <&vddkpled>;
-       };
 
        cm36672p@60{
                compatible = "cm36672p";
old mode 100644 (file)
new mode 100755 (executable)
index b5a076d..0e0c79a
@@ -10,7 +10,6 @@ CONFIG_ARCH_HAS_CPUFREQ=y
 CONFIG_GENERIC_HWEIGHT=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
 CONFIG_NEED_DMA_MAP_STATE=y
-CONFIG_FIQ=y
 CONFIG_VECTORS_BASE=0xffff0000
 # CONFIG_ARM_PATCH_PHYS_VIRT is not set
 CONFIG_NEED_MACH_GPIO_H=y
@@ -123,7 +122,13 @@ CONFIG_UIDGID_CONVERTED=y
 CONFIG_MM_OWNER=y
 # CONFIG_SYSFS_DEPRECATED is not set
 # CONFIG_RELAY is not set
-# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_RD_XZ is not set
+# CONFIG_RD_LZO is not set
 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 CONFIG_SYSCTL=y
 CONFIG_ANON_INODES=y
@@ -406,7 +411,6 @@ CONFIG_MULTI_IRQ_HANDLER=y
 # CONFIG_ARM_ERRATA_764369 is not set
 # CONFIG_ARM_ERRATA_775420 is not set
 # CONFIG_ARM_ERRATA_798181 is not set
-CONFIG_FIQ_GLUE=y
 
 #
 # Bus support
@@ -1119,7 +1123,10 @@ CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
 CONFIG_BLK_DEV_CRYPTOLOOP=y
 # CONFIG_BLK_DEV_DRBD is not set
 # CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+# CONFIG_BLK_DEV_XIP is not set
 # CONFIG_CDROM_PKTCDVD is not set
 # CONFIG_ATA_OVER_ETH is not set
 # CONFIG_MG_DISK is not set
@@ -1823,23 +1830,7 @@ CONFIG_THERMAL_DDIE=y
 # CONFIG_THERMAL_SC2713 is not set
 CONFIG_SPRD_CPU_COOLING=y
 # CONFIG_THERMAL_BOARD_SENSOR is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_CORE is not set
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_DW_WATCHDOG is not set
-# CONFIG_MAX63XX_WATCHDOG is not set
-CONFIG_SPRD_WATCHDOG_SYS=y
-CONFIG_SPRD_WATCHDOG_SYS_FIQ=y
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
+# CONFIG_WATCHDOG is not set
 CONFIG_SSB_POSSIBLE=y
 
 #
@@ -1863,6 +1854,7 @@ CONFIG_MFD_SM5701=y
 # CONFIG_MFD_RT8973 is not set
 CONFIG_MUIC_SUPPORT_FACTORY=y
 CONFIG_MUIC_SUPPORT_RUSTPROOF=y
+CONFIG_MUIC_SUPPORT_PS_CABLE=y
 # CONFIG_MFD_AS3711 is not set
 # CONFIG_MFD_RT5033 is not set
 # CONFIG_PMIC_ADP5520 is not set
@@ -2402,7 +2394,6 @@ CONFIG_HID_ZEROPLUS=y
 #
 # USB HID support
 #
-# CONFIG_USB_HID is not set
 # CONFIG_HID_PID is not set
 # CONFIG_USB_HIDDEV is not set
 
@@ -2843,6 +2834,7 @@ CONFIG_STAGING=y
 # CONFIG_IIO_SYSFS_TRIGGER is not set
 # CONFIG_IIO_SIMPLE_DUMMY is not set
 CONFIG_ZSMALLOC=y
+CONFIG_PGTABLE_MAPPING=y
 CONFIG_ZRAM=y
 CONFIG_ZRAM_LZ4_COMPRESS=y
 # CONFIG_ZRAM_DEBUG=y
@@ -2958,8 +2950,9 @@ CONFIG_SEC_DEBUG_USER=y
 # CONFIG_SEC_DEBUG_TIMERQUEUE_CORRUPTION is not set
 # CONFIG_SEC_DEBUG_ONEKEY is not set
 # CONFIG_SEC_WATCHDOG_RESET is not set
+CONFIG_SEC_DEBUG_REG_ACCESS=y
 CONFIG_SEC_LOG=y
-# CONFIG_SEC_LOG_NONCACHED is not set
+CONFIG_SEC_LOG_BUF_NOCACHE=y
 CONFIG_SEC_LOG_LAST_KMSG=y
 # CONFIG_SEC_AVC_LOG is not set
 # CONFIG_SEC_DEBUG_TSP_LOG is not set
@@ -2993,27 +2986,8 @@ CONFIG_CLKSRC_MMIO=y
 #
 # Rpmsg drivers
 #
-CONFIG_PM_DEVFREQ=y
+# CONFIG_PM_DEVFREQ is not set
 
-#
-# DEVFREQ Governors
-#
-# CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND is not set
-# CONFIG_DEVFREQ_GOV_PERFORMANCE is not set
-# CONFIG_DEVFREQ_GOV_POWERSAVE is not set
-# CONFIG_DEVFREQ_GOV_USERSPACE is not set
-CONFIG_DEVFREQ_GOV_ONDEMAND=y
-
-#
-# DEVFREQ Drivers
-#
-CONFIG_SPRD_SCX35_DMC_FREQ=y
-# CONFIG_SCX35_DMC_FREQ_AP is not set
-# CONFIG_SCX35_DMC_FREQ_CP0 is not set
-# CONFIG_SCX35_DMC_FREQ_CP1 is not set
-# CONFIG_SCX35_DMC_FREQ_CP2 is not set
-# CONFIG_SCX35_DMC_FREQ_DDR3 is not set
-CONFIG_SPRD_SCX35_DMC_FREQ_DEBUG=y
 # CONFIG_EXTCON is not set
 # CONFIG_MEMORY is not set
 CONFIG_IIO=y
@@ -3315,9 +3289,15 @@ CONFIG_DEBUG_FS=y
 # CONFIG_DEBUG_SECTION_MISMATCH is not set
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_DEBUG_SHIRQ is not set
-# CONFIG_LOCKUP_DETECTOR is not set
-# CONFIG_PANIC_ON_OOPS is not set
-CONFIG_PANIC_ON_OOPS_VALUE=0
+CONFIG_LOCKUP_DETECTOR=y
+CONFIG_HARDLOCKUP_DETECTOR_OTHER_CPU=y
+CONFIG_HARDLOCKUP_DETECTOR=y
+CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
+CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=1
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1
+CONFIG_PANIC_ON_OOPS=y
+CONFIG_PANIC_ON_OOPS_VALUE=1
 # CONFIG_DETECT_HUNG_TASK is not set
 # CONFIG_SCHED_DEBUG is not set
 # CONFIG_SCHEDSTATS is not set
index 632ee4e..74940a3 100644 (file)
@@ -27,7 +27,7 @@
 #include <asm/byteorder.h>
 #include <asm/memory.h>
 #include <asm-generic/pci_iomap.h>
-#ifdef CONFIG_SPRD_DEBUG
+#if defined(CONFIG_SPRD_DEBUG) || defined(CONFIG_SEC_DEBUG_REG_ACCESS)
 #include <linux/regs_debug.h>
 #endif
 /*
@@ -49,7 +49,7 @@ extern void __raw_readsb(const void __iomem *addr, void *data, int bytelen);
 extern void __raw_readsw(const void __iomem *addr, void *data, int wordlen);
 extern void __raw_readsl(const void __iomem *addr, void *data, int longlen);
 
-#ifndef CONFIG_SPRD_DEBUG
+#if !(defined(CONFIG_SPRD_DEBUG) || defined(CONFIG_SEC_DEBUG_REG_ACCESS))
 #if __LINUX_ARM_ARCH__ < 6
 /*
  * Half-word accesses are problematic with RiscPC due to limitations of
@@ -114,12 +114,14 @@ static inline u32 __raw_readl(const volatile void __iomem *addr)
 }
 #else
 extern struct sprd_debug_regs_access *sprd_debug_last_regs_access;
+extern volatile struct sec_debug_regs_access *sec_debug_last_regs_access;
 #if __LINUX_ARM_ARCH__ < 6
 /*
  * Half-word accesses are problematic with RiscPC due to limitations of
  * the bus. Rather than special-case the machine, just let the compiler
  * generate the access for CPUs prior to ARMv6.
  */
+#if defined(CONFIG_SPRD_DEBUG)
 #define __raw_writew(v,a)  ({sprd_debug_regs_write_start(v, a); \
                __chk_io_ptr(a); \
                *(volatile unsigned short __force  *)(a) = (v); \
@@ -132,12 +134,28 @@ extern struct sprd_debug_regs_access *sprd_debug_last_regs_access;
                sprd_debug_regs_access_done(); \
                v;\
                })
+#endif
+#if defined(CONFIG_SEC_DEBUG_REG_ACCESS)
+#define __raw_writew(v,a)  ({sec_debug_regs_write_start(v, a); \
+               __chk_io_ptr(a); \
+               *(volatile unsigned short __force  *)(a) = (v); \
+               sec_debug_regs_access_done(); \
+               })
+#define __raw_readw(a)     ({sec_debug_regs_read_start(a);\
+               volatile unsigned short v;  \
+               __chk_io_ptr(a); \
+               v = *(volatile unsigned short __force  *)(a); \
+               sec_debug_regs_access_done(); \
+               v;\
+               })
+#endif
 #else
 /*
  * When running under a hypervisor, we want to avoid I/O accesses with
  * writeback addressing modes as these incur a significant performance
  * overhead (the address generation must be emulated in software).
  */
+#if defined(CONFIG_SPRD_DEBUG)
 static inline void __raw_writew(u16 val, volatile void __iomem *addr)
 {
        sprd_debug_regs_write_start(val, addr);
@@ -158,7 +176,30 @@ static inline u16 __raw_readw(const volatile void __iomem *addr)
        return val;
 }
 #endif
+#if defined(CONFIG_SEC_DEBUG_REG_ACCESS)
+static inline void __raw_writew(u16 val, volatile void __iomem *addr)
+{
+       sec_debug_regs_write_start(val, addr);
+       asm volatile("strh %1, %0"
+                    : "+Q" (*(volatile u16 __force *)addr)
+                    : "r" (val));
+       sec_debug_regs_access_done();
+}
+
+static inline u16 __raw_readw(const volatile void __iomem *addr)
+{
+       u16 val;
+       sec_debug_regs_read_start(addr);
+       asm volatile("ldrh %1, %0"
+                    : "+Q" (*(volatile u16 __force *)addr),
+                      "=r" (val));
+       sec_debug_regs_access_done();
+       return val;
+}
+#endif
+#endif
 
+#if defined(CONFIG_SPRD_DEBUG)
 static inline void __raw_writeb(u8 val, volatile void __iomem *addr)
 {
        sprd_debug_regs_write_start(val, addr);
@@ -199,6 +240,48 @@ static inline u32 __raw_readl(const volatile void __iomem *addr)
        return val;
 }
 #endif
+#if defined(CONFIG_SEC_DEBUG_REG_ACCESS)
+static inline void __raw_writeb(u8 val, volatile void __iomem *addr)
+{
+       sec_debug_regs_write_start(val, addr);
+       asm volatile("strb %1, %0"
+                    : "+Qo" (*(volatile u8 __force *)addr)
+                    : "r" (val));
+       sec_debug_regs_access_done();
+}
+
+static inline void __raw_writel(u32 val, volatile void __iomem *addr)
+{
+       sec_debug_regs_write_start(val, addr);
+       asm volatile("str %1, %0"
+                    : "+Qo" (*(volatile u32 __force *)addr)
+                    : "r" (val));
+       sec_debug_regs_access_done();
+}
+
+static inline u8 __raw_readb(const volatile void __iomem *addr)
+{
+       u8 val;
+       sec_debug_regs_read_start(addr);
+       asm volatile("ldrb %1, %0"
+                    : "+Qo" (*(volatile u8 __force *)addr),
+                      "=r" (val));
+       sec_debug_regs_access_done();
+       return val;
+}
+
+static inline u32 __raw_readl(const volatile void __iomem *addr)
+{
+       u32 val;
+       sec_debug_regs_read_start(addr);
+       asm volatile("ldr %1, %0"
+                    : "+Qo" (*(volatile u32 __force *)addr),
+                      "=r" (val));
+       sec_debug_regs_access_done();
+       return val;
+}
+#endif
+#endif
 
 /*
  * Architecture ioremap implementation.
index f2ba1e8..39d79ab 100755 (executable)
@@ -61,6 +61,12 @@ static struct switch_dev switch_otg = {
 static struct switch_dev switch_jig = {
        .name = "jig_cable",
 };
+/* Samsung's Power Sharing Cable EP-SG900 */
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+static struct switch_dev switch_ps_cable = {
+        .name = "ps_cable",
+};
+#endif
 #endif /* CONFIG_SWITCH */
 
 extern struct class *sec_class;
@@ -111,6 +117,12 @@ static void muic_init_cb(void)
        ret = switch_dev_register(&switch_jig);
        if (ret < 0)
                pr_err("%s Failed to register jig switch(%d)\n", __func__, ret);
+
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+        ret = switch_dev_register(&switch_ps_cable);
+        if (ret < 0)
+                pr_err("%s Failed to register ps_cable switch(%d)\n", __func__, ret);
+#endif
 #endif
 }
 
@@ -210,6 +222,12 @@ static void muic_charger_cb(int cable_type)
                        ist30xxc_tsp_charger_infom(1);
 #endif
                        break;
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+               case MUIC_SM5504_CABLE_TYPE_SAMSUNG_PS:
+                       current_cable_type = POWER_SUPPLY_TYPE_POWER_SHARING;
+                       is_jig_on = false;
+                       break;
+#endif
                case MUIC_SM5504_CABLE_TYPE_OTG:
 #if 0 /*def CONFIG_MACH_KIRAN*/
                        current_cable_type = POWER_SUPPLY_TYPE_USB;
@@ -294,6 +312,17 @@ static void muic_set_jig_state(u8 attached)
 #endif
 }
 
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+static void muic_ps_cable_cb(u8 attached)
+{
+        pr_info("%s: ps_cable: %d\n", __func__, attached);
+
+#ifdef CONFIG_SWITCH
+        switch_set_state(&switch_ps_cable, attached);
+#endif
+}
+#endif
+
 struct sec_switch_data switch_data = {
        .init_cb = muic_init_cb,
        .dock_cb = muic_dock_cb,
@@ -301,6 +330,9 @@ struct sec_switch_data switch_data = {
        .otg_cb  = muic_otg_cb,
        .cable_chg_cb = muic_charger_cb,
        .set_jig_state_cb = muic_set_jig_state,
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+       .ps_cable_cb = muic_ps_cable_cb,
+#endif
 };
 
 static int __init sec_switch_init(void)
index c62d988..98e0d81 100644 (file)
@@ -670,7 +670,8 @@ static bool sec_bat_check_recharge(struct sec_battery_info *battery)
 {
 #if defined(CONFIG_BATTERY_SWELLING)
        if (battery->swelling_mode == SEC_BATTERY_HIGH_SWELLING_MODE) {
-               if (battery->charging_mode == SEC_BATTERY_CHARGING_NONE) {
+               if ((battery->charging_mode == SEC_BATTERY_CHARGING_NONE) ||
+                       (battery->charging_mode == SEC_BATTERY_CHARGING_ABS)) {
                        if ((battery->pdata->recharge_condition_type &
                                                SEC_BATTERY_RECHARGE_CONDITION_VCELL) &&
                                        (battery->voltage_now <=
@@ -678,11 +679,13 @@ static bool sec_bat_check_recharge(struct sec_battery_info *battery)
                                dev_info(battery->dev,
                                                "%s: Re-charging by VCELL in high swelling mode(%d)\n",
                                                __func__, battery->voltage_now);
+                               battery->swelling_block = false;
                                goto check_recharge_check_count;
                        }
                }
        } else if (battery->swelling_mode == SEC_BATTERY_LOW_SWELLING_MODE) {
-               if (battery->charging_mode == SEC_BATTERY_CHARGING_NONE) {
+               if ((battery->charging_mode == SEC_BATTERY_CHARGING_NONE) ||
+                       (battery->charging_mode == SEC_BATTERY_CHARGING_ABS)) {
                        if ((battery->pdata->recharge_condition_type &
                                                SEC_BATTERY_RECHARGE_CONDITION_VCELL) &&
                                        (battery->voltage_now <=
@@ -690,6 +693,7 @@ static bool sec_bat_check_recharge(struct sec_battery_info *battery)
                                dev_info(battery->dev,
                                                "%s: Re-charging by VCELL in low swelling mode(%d)\n",
                                                __func__, battery->voltage_now);
+                               battery->swelling_block = false;
                                goto check_recharge_check_count;
                        }
                }
@@ -923,14 +927,23 @@ static void sec_bat_swelling_check(struct sec_battery_info *battery, int tempera
 {
        union power_supply_propval val;
 
-       pr_info("%s: status(%d), swell_mode(%d), temp(%d)\n",
-                       __func__, battery->status, battery->swelling_mode, temperature);
+       pr_info("%s: status(%d), swell_mode(%d), temp(%d), vnow(%d), block(%d)\n",
+                       __func__, battery->status, battery->swelling_mode,
+                       temperature, battery->voltage_now, battery->swelling_block);
 
        /* swelling_mode
         *              under voltage over voltage, battery missing  */
        if (battery->status == POWER_SUPPLY_STATUS_DISCHARGING) {
                pr_info("%s: DISCHARGING. stop swelling mode\n", __func__);
                battery->swelling_mode = SEC_BATTERY_NORMAL_MODE;
+               battery->swelling_block = false;
+               if (battery->swelling_max_vbat == 4200) {
+                       /* restore float voltage */
+                       val.intval = battery->pdata->chg_float_voltage;
+                       psy_do_property(battery->pdata->charger_name, set,
+                               POWER_SUPPLY_PROP_VOLTAGE_MAX, val);
+                       battery->swelling_max_vbat = val.intval;
+               }
                goto skip_swelling_chek;
        }
 
@@ -940,8 +953,13 @@ static void sec_bat_swelling_check(struct sec_battery_info *battery, int tempera
                                if (temperature >= battery->swelling_temp_dischg_threshold &&
                                        battery->voltage_now > 4235) {
                                                pr_info("%s: self discharge mode start.\n", __func__);
-                                               //battery->status = POWER_SUPPLY_STATUS_NOT_CHARGING;
-                                               //sec_bat_set_charge(battery, false);
+                                               if ((battery->voltage_now > 4235) &&
+                                                       (battery->swelling_block == false)) {
+                                                       battery->charging_mode = SEC_BATTERY_CHARGING_NONE;
+                                                       sec_bat_set_charge(battery, false);
+                                                       battery->swelling_block = true;
+                                               }
+
                                                battery->swelling_mode = SEC_BATTERY_DISCHG_MODE;
 #if defined(CONFIG_BATTERY_DISCHG_IC)
                                                /*enable discharge */
@@ -950,18 +968,38 @@ static void sec_bat_swelling_check(struct sec_battery_info *battery, int tempera
 #endif
                                } else {
                                        pr_info("%s: high swelling mode start.\n", __func__);
-                                       //battery->status = POWER_SUPPLY_STATUS_NOT_CHARGING;
-                                       //sec_bat_set_charge(battery, false);
+                                       if (battery->voltage_now < 4200) {
+                                               /* change to 4.20V float voltage */
+                                               val.intval = 4200;
+                                               psy_do_property(battery->pdata->charger_name, set,
+                                                       POWER_SUPPLY_PROP_VOLTAGE_MAX, val);
+                                               battery->swelling_max_vbat = val.intval;
+                                       } else if ((battery->voltage_now > 4235) &&
+                                               (battery->swelling_block == false)) {
+                                                       battery->charging_mode = SEC_BATTERY_CHARGING_NONE;
+                                                       sec_bat_set_charge(battery, false);
+                                                       battery->swelling_block = true;
+                                       }
+
                                        battery->swelling_mode = SEC_BATTERY_HIGH_SWELLING_MODE;
-                                       //battery->swelling_block = true;
                                        battery->swelling_full_check_cnt = 0;
                                }
                        } else if (temperature <= battery->swelling_temp_low_threshold) {
                                        pr_info("%s: low swelling mode start.\n", __func__);
-                                       //battery->status = POWER_SUPPLY_STATUS_NOT_CHARGING;
-                                       //sec_bat_set_charge(battery, false);
+                                       if (battery->voltage_now < 4200) {
+                                               /* change to 4.20V float voltage */
+                                               val.intval = 4200;
+                                               psy_do_property(battery->pdata->charger_name, set,
+                                                       POWER_SUPPLY_PROP_VOLTAGE_MAX, val);
+                                               battery->swelling_max_vbat = val.intval;
+                                       } else if ((battery->voltage_now > 4235) &&
+                                               (battery->swelling_block == false)) {
+                                                       battery->charging_mode = SEC_BATTERY_CHARGING_NONE;
+                                                       sec_bat_set_charge(battery, false);
+                                                       battery->swelling_block = true;
+                                       }
+
                                        battery->swelling_mode = SEC_BATTERY_LOW_SWELLING_MODE;
-                                       //battery->swelling_block = true;
                                        battery->swelling_full_check_cnt = 0;
                        }
                        break;
@@ -974,17 +1012,22 @@ static void sec_bat_swelling_check(struct sec_battery_info *battery, int tempera
                                psy_do_property(battery->pdata->charger_name, set,
                                        POWER_SUPPLY_PROP_VOLTAGE_MAX, val);
                                battery->swelling_max_vbat = val.intval;
+                               battery->charging_mode = SEC_BATTERY_CHARGING_1ST;
+                               sec_bat_set_charge(battery, true);
+                               battery->swelling_block = false;
 
-                               //battery->status = POWER_SUPPLY_STATUS_CHARGING;
-                               //sec_bat_set_charge(battery, true);
-                               //battery->swelling_block = false;
                                battery->swelling_mode = SEC_BATTERY_NORMAL_MODE;
                        } else if (temperature >= battery->swelling_temp_high_recovery) {
                                if (temperature >= battery->swelling_temp_dischg_threshold &&
                                        battery->voltage_now > 4235) {
                                                pr_info("%s: self discharge mode start.\n", __func__);
-                                               //battery->status = POWER_SUPPLY_STATUS_NOT_CHARGING;
-                                               //sec_bat_set_charge(battery, false);
+                                               if ((battery->voltage_now > 4235) &&
+                                                       (battery->swelling_block == false)) {
+                                                       battery->charging_mode = SEC_BATTERY_CHARGING_NONE;
+                                                       sec_bat_set_charge(battery, false);
+                                                       battery->swelling_block = true;
+                                               }
+
                                                battery->swelling_mode = SEC_BATTERY_DISCHG_MODE;
 #if defined(CONFIG_BATTERY_DISCHG_IC)
                                                /*enable discharge */
@@ -992,12 +1035,18 @@ static void sec_bat_swelling_check(struct sec_battery_info *battery, int tempera
                                                pr_info ("%s: enable discharge\n", __func__);
 #endif
                                } else {
-                                               if (battery->voltage_now < 4200) {
+                                               if ((battery->voltage_now < 4200) &&
+                                                       (battery->swelling_max_vbat != 4200)) {
                                                        /* change to 4.20V float voltage */
                                                        val.intval = 4200;
                                                        psy_do_property(battery->pdata->charger_name, set,
                                                                POWER_SUPPLY_PROP_VOLTAGE_MAX, val);
                                                        battery->swelling_max_vbat = val.intval;
+                                               } else if ((battery->voltage_now > 4235) &&
+                                                               (battery->swelling_block == false)) {
+                                                                       battery->charging_mode = SEC_BATTERY_CHARGING_NONE;
+                                                                       sec_bat_set_charge(battery, false);
+                                                                       battery->swelling_block = true;
                                                }
                                        pr_info("%s: high swelling mode. Vbatt(%d)\n",
                                                __func__, battery->voltage_now);
@@ -1013,18 +1062,24 @@ static void sec_bat_swelling_check(struct sec_battery_info *battery, int tempera
                                psy_do_property(battery->pdata->charger_name, set,
                                        POWER_SUPPLY_PROP_VOLTAGE_MAX, val);
                                battery->swelling_max_vbat = val.intval;
+                               battery->charging_mode = SEC_BATTERY_CHARGING_1ST;
+                               sec_bat_set_charge(battery, true);
+                               battery->swelling_block = false;
 
-                               //battery->status = POWER_SUPPLY_STATUS_CHARGING;
-                               //sec_bat_set_charge(battery, true);
-                               //battery->swelling_block = false;
                                battery->swelling_mode = SEC_BATTERY_NORMAL_MODE;
                        } else if (temperature <= battery->swelling_temp_low_recovery) {
-                                       if (battery->voltage_now < 4200) {
+                                       if ((battery->voltage_now < 4200) &&
+                                               (battery->swelling_max_vbat != 4200)) {
                                                /* change to 4.20V float voltage */
                                                val.intval = 4200;
                                                psy_do_property(battery->pdata->charger_name, set,
                                                        POWER_SUPPLY_PROP_VOLTAGE_MAX, val);
                                                battery->swelling_max_vbat = val.intval;
+                                       } else if ((battery->voltage_now > 4235) &&
+                                               (battery->swelling_block == false)) {
+                                                       battery->charging_mode = SEC_BATTERY_CHARGING_NONE;
+                                                       sec_bat_set_charge(battery, false);
+                                                       battery->swelling_block = true;
                                        }
                                        /* change to 0.5C charging current */
 #if 0 /* Orbis charging current is under 0.5C, thus no need to set */
@@ -1531,6 +1586,8 @@ static bool sec_bat_check_fullcharged(
        else
                full_check_type = battery->pdata->full_check_type_2nd;
 
+       pr_info("%s:full check type[%d], current_avg[%d]", __func__,
+               full_check_type, battery->current_avg);
        switch (full_check_type) {
        case SEC_BATTERY_FULLCHARGED_ADC:
                current_adc =
@@ -1573,7 +1630,7 @@ static bool sec_bat_check_fullcharged(
                        battery->pdata->charging_current[
                        battery->cable_type].full_check_current_2nd))) {
                                battery->full_check_cnt++;
-                               dev_dbg(battery->dev,
+                               dev_info(battery->dev,
                                "%s: Full Check Current (%d)\n",
                                __func__,
                                battery->full_check_cnt);
@@ -1690,6 +1747,7 @@ static void sec_bat_do_fullcharged(
                battery->charging_mode = SEC_BATTERY_CHARGING_NONE;
                battery->is_recharging = false;
                sec_bat_set_charge(battery, false);
+               battery->swelling_block = true;
                pr_info("%s: stop charging (full) in swelling mode[%d]",
                        __func__, battery->swelling_mode);
        } else
@@ -2269,6 +2327,7 @@ static void sec_bat_cable_work(struct work_struct *work)
        wake_lock(&battery->monitor_wake_lock);
        queue_delayed_work(battery->monitor_wqueue, &battery->monitor_work,
                                        msecs_to_jiffies(500));
+       power_supply_changed(&battery->psy_bat);
 end_of_cable_work:
        wake_unlock(&battery->cable_wake_lock);
        dev_dbg(battery->dev, "%s: End\n", __func__);
@@ -2943,9 +3002,12 @@ static int sec_bat_set_property(struct power_supply *psy,
                                current_cable_type = POWER_SUPPLY_TYPE_WIRELESS;
 
                        if (current_cable_type == POWER_SUPPLY_TYPE_BATTERY) {
+                               wake_lock(&battery->cable_wake_lock);
                                value.intval = current_cable_type;
                                psy_do_property(battery->pdata->charger_name,
                                        set,POWER_SUPPLY_PROP_ONLINE, value);
+                               queue_work(battery->monitor_wqueue,
+                                       &battery->cable_work);
                        }
                }
                dev_info(battery->dev,
@@ -3882,7 +3944,7 @@ static int sec_battery_probe(struct platform_device *pdev)
 
 #if defined(CONFIG_BATTERY_SWELLING)
        battery->swelling_mode = SEC_BATTERY_NORMAL_MODE;
-       battery->swelling_max_vbat = 4350;
+       battery->swelling_max_vbat = 4340;
        battery->swelling_temp_dischg_threshold = BATT_SWELLING_DISCHG_TEMP;
        battery->swelling_temp_dischg_recovery = BATT_SWELLING_DISCHG_TEMP_RECOV;
        battery->swelling_temp_high_threshold = BATT_SWELLING_HIGH_TEMP_BLOCK;
@@ -3914,6 +3976,7 @@ static int sec_battery_probe(struct platform_device *pdev)
                pdata->temp_low_recovery_normal;
        battery->temp_low_threshold =
                pdata->temp_low_threshold_normal;
+       battery->temperature = 255;
 
        battery->charging_mode = SEC_BATTERY_CHARGING_NONE;
        battery->is_recharging = false;
index 97653fc..f5a0498 100644 (file)
@@ -539,8 +539,6 @@ static int sec_chg_set_property(struct power_supply *psy,
                        charger->is_charging = false;
                        charger->nchgen = true;
                        charger->aicl_on = false;
-                       SM5701_set_bstout(SM5701_BSTOUT_4P5);
-                       SM5701_clear_operationmode(SM5701_OPERATIONMODE_OTG_ON);
                        pr_info("%s : Disable Charger, Battery Supply!\n", __func__);
                        // nCHG_EN is logic low so set 1 to disable charger
                        charger->is_fullcharged = false;
@@ -565,24 +563,10 @@ static int sec_chg_set_property(struct power_supply *psy,
                                        [charger->cable_type].fast_charging_current;
                }
 
-               pr_info("=============================================================\n");
-               SM5701_reg_read(charger->SM5701->i2c, SM5701_CHGCNTL1, &topoff_data);
-               pr_info("%s : SM5701_CHGCNTL1 (Top-off current) : 0x%02x\n",__func__, topoff_data);
-               SM5701_reg_read(charger->SM5701->i2c, SM5701_STATUS2, &stauts);
-               pr_info("%s: STATUS2 : %d\n", __func__, stauts); //SM : test
-               pr_info("=============================================================\n");
-
                SM5701_operation_mode_function_control();
                pr_info("%s : STATUS OF CHARGER ON(0)/OFF(1): %d\n", __func__, charger->nchgen);
                SM5701_toggle_charger(charger, charger->is_charging);
 
-               pr_info("=============================================================\n");
-               SM5701_reg_read(charger->SM5701->i2c, SM5701_CHGCNTL1, &topoff_data);
-               pr_info("%s : SM5701_CHGCNTL1 (Top-off current) : 0x%02x\n",__func__, topoff_data);
-               SM5701_reg_read(charger->SM5701->i2c, SM5701_STATUS2, &stauts);
-               pr_info("%s: STATUS2 : %d\n", __func__, stauts); //SM : test
-               pr_info("=============================================================\n");
-
                /* if battery full, only disable charging  */
                if ((charger->status == POWER_SUPPLY_STATUS_CHARGING) ||
                        (charger->status == POWER_SUPPLY_STATUS_DISCHARGING) ||
@@ -636,13 +620,6 @@ static int sec_chg_set_property(struct power_supply *psy,
                                charger->charging_current * charger->siop_level / 100;
                        SM5701_set_fastchg_current(
                                charger, charging_current);
-
-                       pr_info("=============================================================\n");
-                       SM5701_reg_read(charger->SM5701->i2c, SM5701_CHGCNTL1, &topoff_data);
-                       pr_info("%s : SM5701_CHGCNTL1 (Top-off current) : 0x%02x\n",__func__, topoff_data);
-                       SM5701_reg_read(charger->SM5701->i2c, SM5701_STATUS2, &stauts);
-                       pr_info("%s: STATUS2 : %d\n", __func__, stauts); //SM : test
-                       pr_info("=============================================================\n");
                }
                break;
        /* val->intval : float voltage */
old mode 100755 (executable)
new mode 100644 (file)
index deb108d..c510282
@@ -28,6 +28,7 @@
 #include <linux/battery/sec_fuelgauge.h>
 #include <linux/sprd_battery_common.h>
 
+#define SPRDFGU_TEMP_COMP_SOC
 int sprdbat_interpolate(int x, int n, struct sprdbat_table_data *tab)
 {
        int index;
@@ -92,6 +93,8 @@ static void print_pdata(struct sprd_battery_platform_data *pdata)
 }
 
 static uint32_t init_flag = 0;
+static uint32_t init_temp_flag = 0;
+
 #define SPRDBAT_ONE_PERCENT_TIME   (40)
 #define SPRDBAT_AVOID_JUMPING_TEMI  (SPRDBAT_ONE_PERCENT_TIME)
 
@@ -125,6 +128,11 @@ static uint32_t sprdbat_update_capacty(void)
        uint32_t period_time = 0;
        struct timespec cur_time;
        union power_supply_propval value;
+       int temp_degree;
+       union power_supply_propval temp_value;
+
+       psy_do_property("battery", get, POWER_SUPPLY_PROP_TEMP, temp_value);
+       temp_degree = temp_value.intval / 10;
 
        psy_do_property("battery", get, POWER_SUPPLY_PROP_STATUS, value);
 
@@ -135,10 +143,19 @@ static uint32_t sprdbat_update_capacty(void)
 
        pr_info("fgu_capacity: = %d,flush_time: = %d,period_time:=%d\n",
                      fgu_capacity, flush_time, period_time);
+       if ((!init_temp_flag) && (temp_degree < 16)) {
+         pr_info("temp init skip\n");
+         init_temp_flag = 1;
+        } else {
 
        switch (value.intval) {
        case POWER_SUPPLY_STATUS_CHARGING:
+#ifdef SPRDFGU_TEMP_COMP_SOC
+               if ((fgu_capacity < update_capacity) && ((temp_degree > 15) || \
+                       (update_capacity >= 2))) {
+#else
                if (fgu_capacity < update_capacity) {
+#endif
                        if (sprdfgu_read_batcurrent() > 0) {
                                pr_info("avoid vol jumping\n");
                        fgu_capacity = update_capacity;
@@ -217,7 +234,7 @@ static uint32_t sprdbat_update_capacty(void)
        default:
                break;
        }
-
+               }
        if (fgu_capacity != update_capacity) {
                update_capacity = fgu_capacity;
                sprdbat_update_capacity_time = cur_time.tv_sec;
@@ -337,7 +354,7 @@ bool sec_hal_fg_get_property(fuelgauge_variable_t * fg_var,
        default:
                return false;
        }
-       pr_info("sec_hal_fg_get_property-%d,val->intval = %d\n", psp,
+       pr_debug("sec_hal_fg_get_property-%d,val->intval = %d\n", psp,
                val->intval);
        return true;
 }
index 90fdd6b..292211a 100644 (file)
@@ -673,6 +673,15 @@ static int hci_uart_open(struct hci_dev *hdev)
         return -EAGAIN;
     }
 
+       /* BEGIN TIZEN_Bluetooth */
+       /* FIXME: in order to wait enough until uart init complete,
+          the below routine is added.
+       */
+
+       msleep(100);
+       /* END TIZEN_Bluetooth */
+
+
     /* Registration with ST layer is completed successfully,
     * now chip is ready to accept commands from HCI CORE.
     * Mark HCI Device flag as RUNNING
@@ -930,7 +939,7 @@ static int hci_uart_tty_open(struct tty_struct *tty)
 static void hci_uart_tty_close(struct tty_struct *tty)
 {
    struct hci_uart *hu = (void *)tty->disc_data;
-       struct hci_dev *hdev;
+   struct hci_dev *hdev = hu->hdev;
 
    int i;
    unsigned long flags;
@@ -946,9 +955,13 @@ static void hci_uart_tty_close(struct tty_struct *tty)
 
    if (hu)
    {
+     if (hdev)
+       hci_uart_close(hdev);
+
+     cancel_work_sync(&hu->write_work);
+
      if (test_and_clear_bit(HCI_UART_PROTO_SET, &hu->flags))
      {
-         hdev = hu->hdev;
          if (hdev) {
             if (test_bit(HCI_UART_REGISTERED, &hu->flags))
                hci_unregister_dev(hdev);
index 6f7f601..23f9f09 100644 (file)
@@ -297,7 +297,7 @@ static void sprd_unplug_one_cpu(struct work_struct *work)
        if (num_online_cpus() > 1) {
                if (!sd_tuners->cpu_hotplug_disable) {
                        cpuid = cpumask_next(0, cpu_online_mask);
-                       pr_info("!!  we gonna unplug cpu%d  !!\n", cpuid);
+                       pr_debug("!!  we gonna unplug cpu%d  !!\n", cpuid);
                        cpu_down(cpuid);
                }
        }
@@ -325,7 +325,7 @@ static void sprd_plugin_one_cpu(struct work_struct *work)
        if (num_online_cpus() < sd_tuners->cpu_num_limit) {
                cpuid = cpumask_next_zero(0, cpu_online_mask);
                if (!sd_tuners->cpu_hotplug_disable) {
-                       pr_info("!!  we gonna plugin cpu%d  !!\n", cpuid);
+                       pr_debug("!!  we gonna plugin cpu%d  !!\n", cpuid);
                        cpu_up(cpuid);
                }
        }
index 429e07d..f69cc33 100644 (file)
@@ -618,6 +618,7 @@ ssize_t drm_read(struct file *filp, char __user *buffer,
                }
 
                total += e->event->length;
+               DRM_DEBUG("[%s]e[0x%x]\n", __func__, (int)e);
                e->destroy(e);
        }
 
index 822d055..5817754 100644 (file)
@@ -242,6 +242,8 @@ drm_gem_handle_delete(struct drm_file *filp, u32 handle)
        }
        dev = obj->dev;
 
+       DRM_DEBUG("%s:hdl[%d]obj[0x%x]\n", __func__, handle, (int)obj);
+
        /* Release reference and decrement refcount. */
        idr_remove(&filp->object_idr, handle);
        spin_unlock(&filp->table_lock);
index a6a444c..d6d97f0 100644 (file)
@@ -849,8 +849,8 @@ static void send_vblank_event(struct drm_device *dev,
 
        list_add_tail(&e->base.link,
                      &e->base.file_priv->event_list);
-       DRM_DEBUG("[vbl_evt_%d]user[0x%x]sec[%d %d]seq[%d]\n",
-               e->pipe, (int)e->event.user_data,
+       DRM_DEBUG("[vbl_evt_%d]e[0x%x]user[0x%x]sec[%d %d]seq[%d]\n",
+               e->pipe, (int)e, (int)e->event.user_data,
                e->event.tv_sec, e->event.tv_usec,
                e->event.sequence);
        wake_up_interruptible(&e->base.file_priv->event_wait);
index e55f4d3..5c0c9bd 100644 (file)
@@ -52,8 +52,18 @@ static int sprd_drm_gem_one_info(int id, void *ptr, void *data)
        struct pid *pid = gem_info_data->filp->pid;
        struct drm_sprd_file_private *file_priv =
                        gem_info_data->filp->driver_priv;
-       struct sprd_drm_gem_obj *sprd_gem = to_sprd_gem_obj(obj);
-       struct sprd_drm_gem_buf *buf = sprd_gem->buffer;
+       struct sprd_drm_gem_obj *sprd_gem;
+       struct sprd_drm_gem_buf *buf;
+
+       if (!obj) {
+               DRM_ERROR("failed to get drm_gem_object\n");
+               return -EFAULT;
+       }
+
+       drm_gem_object_reference(obj);
+
+       sprd_gem = to_sprd_gem_obj(obj);
+       buf = sprd_gem->buffer;
 
        seq_printf(gem_info_data->m,
                        "%5d\t%5d\t%4d\t%4d\t\t%4d\t0x%08lx\t0x%x\t%4d\t%4d\t\t"
@@ -61,7 +71,7 @@ static int sprd_drm_gem_one_info(int id, void *ptr, void *data)
                                pid_nr(pid),
                                file_priv->tgid,
                                id,
-                               atomic_read(&obj->refcount.refcount),
+                               atomic_read(&obj->refcount.refcount) - 1,
                                atomic_read(&obj->handle_count),
                                sprd_gem->size,
                                sprd_gem->flags,
@@ -70,6 +80,9 @@ static int sprd_drm_gem_one_info(int id, void *ptr, void *data)
                                obj->import_attach ? 1 : 0,
                                obj,
                                obj->name);
+
+       drm_gem_object_unreference(obj);
+
        return 0;
 }
 
@@ -85,13 +98,16 @@ static int sprd_drm_gem_info(struct seq_file *m, void *data)
                        "pfnmap\texport_to_fd\timport_from_fd\tobj_addr\t"
                        "name\n");
        mutex_lock(&drm_dev->struct_mutex);
+
        list_for_each_entry(gem_info_data.filp, &drm_dev->filelist, lhead) {
                spin_lock(&gem_info_data.filp->table_lock);
                idr_for_each(&gem_info_data.filp->object_idr,
                        sprd_drm_gem_one_info, &gem_info_data);
                spin_unlock(&gem_info_data.filp->table_lock);
        }
+
        mutex_unlock(&drm_dev->struct_mutex);
+
        return 0;
 }
 
index bca6a43..e33b909 100755 (executable)
@@ -293,7 +293,7 @@ void sprd_drm_gem_destroy(struct sprd_drm_gem_obj *sprd_gem_obj)
        if (!buf->pages)
                return;
 
-       DRM_INFO("%s:o[0x%x]a[0x%x]\n", "gf",
+       DRM_DEBUG("%s:o[0x%x]a[0x%x]\n", "gf",
                (int)obj, (int)sprd_gem_obj->buffer->dma_addr);
 
        sprd_drm_free_buf(obj->dev, sprd_gem_obj->flags, buf);
@@ -445,7 +445,7 @@ int sprd_drm_gem_create_ioctl(struct drm_device *dev, void *data,
        do_gettimeofday(&val_end);
        time_end = (uint64_t)(val_end.tv_sec * 1000000 + val_end.tv_usec);
 
-       DRM_INFO("%s:h[%d]s[%d]f[0x%x]o[0x%x]a[0x%x][%lld us]\n",
+       DRM_DEBUG("%s:h[%d]s[%d]f[0x%x]o[0x%x]a[0x%x][%lld us]\n",
                "ga",args->handle, (int)args->size, args->flags,
                (int)&sprd_gem_obj->base,
                (int)sprd_gem_obj->buffer->dma_addr, time_end - time_start);
index b1982cd..7f69485 100644 (file)
@@ -847,6 +847,10 @@ static int gsp_src_set_fmt(struct device *dev, u32 fmt)
        case DRM_FORMAT_NV12:
                ctx->gsp_cfg.layer0_info.img_format = GSP_SRC_FMT_YUV420_2P;
                break;
+       case DRM_FORMAT_NV21:
+               ctx->gsp_cfg.layer0_info.img_format = GSP_SRC_FMT_YUV420_2P;
+               ctx->gsp_cfg.layer0_info.endian_mode.uv_word_endn = GSP_WORD_ENDN_2;
+               break;
        case DRM_FORMAT_YUV420:
                ctx->gsp_cfg.layer0_info.img_format = GSP_SRC_FMT_YUV420_3P;
                break;
@@ -870,7 +874,15 @@ static int gsp_src_set_fmt(struct device *dev, u32 fmt)
                        ctx->gsp_cfg.layer0_info.img_format);
 
        gsp_write(cfg, SPRD_LAYER0_CFG);
-       gsp_write(ctx->gsp_cfg.layer0_info.endian_mode.y_word_endn, SPRD_LAYER0_ENDIAN);
+
+       cfg = gsp_read(SPRD_LAYER0_ENDIAN);
+       cfg |= (ctx->gsp_cfg.layer0_info.endian_mode.y_word_endn) |
+               (ctx->gsp_cfg.layer0_info.endian_mode.uv_word_endn << 3) |
+               (ctx->gsp_cfg.layer0_info.endian_mode.va_word_endn << 6) |
+               (ctx->gsp_cfg.layer0_info.endian_mode.rgb_swap_mode << 9) |
+               (ctx->gsp_cfg.layer0_info.endian_mode.a_swap_mode << 12);
+
+       gsp_write(cfg, SPRD_LAYER0_ENDIAN);
 
        return 0;
 }
@@ -1000,6 +1012,10 @@ static int gsp_dst_set_fmt(struct device *dev, u32 fmt)
        case DRM_FORMAT_NV12:
                ctx->gsp_cfg.layer_des_info.img_format = GSP_DST_FMT_YUV420_2P;
                break;
+       case DRM_FORMAT_NV21:
+               ctx->gsp_cfg.layer_des_info.img_format = GSP_DST_FMT_YUV420_2P;
+               ctx->gsp_cfg.layer_des_info.endian_mode.uv_word_endn = GSP_WORD_ENDN_2;
+               break;
        case DRM_FORMAT_YUV420:
                ctx->gsp_cfg.layer_des_info.img_format = GSP_DST_FMT_YUV420_3P;
                break;
@@ -1022,7 +1038,15 @@ static int gsp_dst_set_fmt(struct device *dev, u32 fmt)
                        (SPRD_DEST_DATA_CFG_IMG_FORMAT_SET(ctx->gsp_cfg.layer_des_info.img_format));
 
        gsp_write(cfg, SPRD_DES_DATA_CFG);
-       gsp_write(ctx->gsp_cfg.layer_des_info.endian_mode.y_word_endn, SPRD_DES_DATA_ENDIAN);
+
+       cfg = gsp_read(SPRD_DES_DATA_ENDIAN);
+       cfg |= (ctx->gsp_cfg.layer_des_info.endian_mode.y_word_endn) |
+               (ctx->gsp_cfg.layer_des_info.endian_mode.uv_word_endn << 3) |
+               (ctx->gsp_cfg.layer_des_info.endian_mode.va_word_endn << 6) |
+               (ctx->gsp_cfg.layer_des_info.endian_mode.rgb_swap_mode << 9) |
+               (ctx->gsp_cfg.layer_des_info.endian_mode.a_swap_mode << 12);
+
+       gsp_write(cfg, SPRD_DES_DATA_ENDIAN);
 
        return 0;
 }
@@ -1869,7 +1893,7 @@ static int gsp_runtime_suspend(struct device *dev)
 {
        struct gsp_context *ctx = get_gsp_context(dev);
 
-       DRM_INFO("%s\n", __func__);
+       DRM_DEBUG("%s\n", __func__);
 
        if (pm_runtime_suspended(dev) || ctx->suspended)
                return 0;
@@ -1881,7 +1905,7 @@ static int gsp_runtime_resume(struct device *dev)
 {
        struct gsp_context *ctx = get_gsp_context(dev);
 
-       DRM_INFO("%s\n", __func__);
+       DRM_DEBUG("%s\n", __func__);
 
        if (!pm_runtime_suspended(dev))
                return gsp_clk_ctrl(ctx, true);
index 3f0162e..c1c2b18 100755 (executable)
@@ -924,7 +924,7 @@ static void ipp_put_event(struct drm_sprd_ipp_cmd_node *c_node,
 
        mutex_lock(&c_node->event_lock);
        if (list_empty(&c_node->event_list)) {
-               DRM_INFO("%s:event_list is empty.\n", __func__);
+               DRM_DEBUG("%s:event_list is empty.\n", __func__);
                goto out_unlock;
        }
 
@@ -1228,8 +1228,6 @@ int sprd_drm_ipp_cmd_ctrl(struct drm_device *drm_dev, void *data,
        struct drm_sprd_ipp_property    *property;
        int ret;
 
-       DRM_INFO("%s\n", __func__);
-
        if (!ctx) {
                DRM_ERROR("invalid context.\n");
                return -EINVAL;
index 5456c69..08e90f3 100644 (file)
@@ -19,6 +19,7 @@
 #include <soc/sprd/cpuidle.h>
 
 extern struct drm_device *sprd_drm_dev;
+extern void panel_esd_enable (bool enable);
 
 #ifdef CONFIG_OF
 extern unsigned long g_dispc_base_addr;
@@ -207,20 +208,13 @@ out:
 int sprd_prepare_vblank(struct drm_device *dev, int crtc, struct drm_file *file_priv)
 {
        struct sprd_drm_private *dev_priv = dev->dev_private;
-       int limit = VBLANK_DEF_HZ;
+       int limit = VBLANK_LIMIT;
 
        if (crtc >= DRM_CRTC_ID_MAX) {
                DRM_ERROR("crtc[%d]\n", crtc);
                return -EINVAL;
        }
 
-       if (!file_priv->is_master && !dev->vblank_enabled[crtc]) {
-               DRM_DEBUG("[pre_vbl_%d]r[%d]t[%d]VBL_OFF\n", crtc,
-                       atomic_read(&dev->vblank_refcount[crtc]),
-                       atomic_read(&dev_priv->vbl_trg_cnt[crtc]));
-               return -EACCES;
-       }
-
        if (file_priv->is_master)
                atomic_set(&dev_priv->vbl_trg_cnt[crtc], 0);
        else
@@ -268,6 +262,7 @@ int sprd_enable_vblank(struct drm_device *dev, int crtc)
                atomic_read(&dev_priv->vbl_trg_cnt[crtc]));
 
        dev_priv->dbg_cnt = 2;
+       panel_esd_enable(false);
 
        return 0;
 }
@@ -284,6 +279,9 @@ void sprd_disable_vblank(struct drm_device *dev, int crtc)
        DRM_INFO("[off_vbl_%d]r[%d]t[%d]\n", crtc,
                atomic_read(&dev->vblank_refcount[crtc]),
                atomic_read(&dev_priv->vbl_trg_cnt[crtc]));
+
+       atomic_set(&dev_priv->vbl_trg_cnt[crtc], 0);
+       panel_esd_enable(true);
 }
 
 u32 sprd_drm_get_vblank_counter(struct drm_device *dev, int crtc)
index 9f1599e..e033fb7 100644 (file)
@@ -21,6 +21,7 @@
 #define ONE_MICRO_SEC 1000000
 #define VBLANK_INTERVAL(x) (ONE_MICRO_SEC / (x))
 #define VBLANK_DEF_HZ  60
+#define VBLANK_LIMIT   20
 
 irqreturn_t sprd_drm_irq_handler(DRM_IRQ_ARGS);
 int sprd_drm_irq_init(struct drm_device *dev, unsigned long flags);
index 0108c59..c5ec506 100644 (file)
@@ -3,8 +3,8 @@ menu "USB HID support"
 
 config USB_HID
        tristate "USB HID transport layer"
-       default y
        depends on USB && INPUT
+       default y if TIZEN_KERNEL_ENG
        select HID
        ---help---
          Say Y here if you want to connect USB keyboards,
index b8b9590..c0ea1f3 100644 (file)
@@ -121,6 +121,9 @@ static void inline sprd_hwlocks_implemented(int hwlock_id)
        }
 }
 
+#ifdef CONFIG_SEC_DEBUG_REG_ACCESS
+extern unsigned char *sec_debug_local_hwlocks_status;
+#endif
 int sprd_record_hwlock_sts(unsigned int lock_id, unsigned int sts)
 {
        if(lock_id >= HWSPINLOCK_ID_TOTAL_NUMS){
@@ -129,6 +132,11 @@ int sprd_record_hwlock_sts(unsigned int lock_id, unsigned int sts)
        }
 
        local_hwlocks_status[lock_id] = sts;
+
+#ifdef CONFIG_SEC_DEBUG_REG_ACCESS
+       if (sec_debug_local_hwlocks_status)
+               sec_debug_local_hwlocks_status[lock_id] = sts;
+#endif
        return sts;
 }
 
@@ -230,7 +238,7 @@ static int sprd_check_hwspinlock_vid(struct hwspinlock *lock)
                || sprd_hwlock->hwspinlock_vid == 0x300){
                return 1;
        } else {
-               printk(KERN_ERR "Warning:hwlock version id is 0x%x!\n",sprd_hwlock->hwspinlock_vid);
+               pr_debug("Warning:hwlock version id is 0x%x!\n",sprd_hwlock->hwspinlock_vid);
                return 0;
        }
 }
@@ -308,7 +316,7 @@ static int __hwspinlock_trylock(struct hwspinlock *lock)
                }
        }
 
-       printk(KERN_ERR "Hwspinlock [%d] lock failed!\n",hwlock_to_id(lock));
+       pr_debug("Hwspinlock [%d] lock failed!\n",hwlock_to_id(lock));
        return 0;
 
 __locked:
index af09c97..e7e41c1 100644 (file)
@@ -192,16 +192,6 @@ config INPUT_KEYCOMBO
 
          To compile this driver as a module, choose M here: the
          module will be called keycombo.
-
-config INPUT_SECBRIDGE
-        default n
-        bool "Enable input bridge support"
-        help
-          Say Y here if you want to enable input bridge.
-          This is useful for enabling different operation
-          according to key combinations.
-          If unsure, say N.
-
 comment "Input Device Drivers"
 
 source "drivers/input/keyboard/Kconfig"
index e294a81..7c0c60e 100644 (file)
@@ -27,5 +27,3 @@ obj-$(CONFIG_INPUT_MISC)      += misc/
 obj-$(CONFIG_INPUT_APMPOWER)   += apm-power.o
 obj-$(CONFIG_INPUT_KEYRESET)   += keyreset.o
 obj-$(CONFIG_INPUT_KEYCOMBO)   += keycombo.o
-obj-$(CONFIG_INPUT_SECBRIDGE)   += sec-input-bridge.o
-
index abf609a..4d54fec 100644 (file)
@@ -1014,8 +1014,8 @@ static ssize_t tc300k_fw_ver_ic_show(struct device *dev,
                goto out;
        }
 
-       dev_info(&client->dev, "%s: %#x\n", __func__, (u8)ver);
-       ret = sprintf(buf, "%#x\n", (u8)ver);
+       dev_info(&client->dev, "%s: 0x%02x\n", __func__, (u8)ver);
+       ret = sprintf(buf, "0x%02x\n", (u8)ver);
 out:
        return ret;
 }
@@ -1053,8 +1053,8 @@ static ssize_t tc300k_fw_ver_src_show(struct device *dev,
        }
 
 out:
-       ret = sprintf(buf, "%#x\n", ver);
-       dev_info(&client->dev, "%s: %#x\n", __func__, ver);
+       ret = sprintf(buf, "0x%02x\n", ver);
+       dev_info(&client->dev, "%s: 0x%02x\n", __func__, ver);
        return ret;
 }
 
index 6e52c5c..48277a6 100644 (file)
@@ -743,4 +743,13 @@ config INPUT_EPL259X_I2C
          communication, else say N.
 
          To compile this driver as a module, choose M here.
+
+config INPUT_SECBRIDGE
+        default n
+        bool "Enable input bridge support"
+        help
+          Say Y here if you want to enable input bridge.
+          This is useful for enabling different operation
+          according to key combinations.
+          If unsure, say N.
 endif
index 8ea6452..2a4a456 100644 (file)
@@ -70,3 +70,4 @@ obj-$(CONFIG_INPUT_LIS3DH_I2C)          += lis3dh.o
 obj-$(CONFIG_INPUT_LIS3DH_ZT_I2C)          += lis3dh_zt.o
 obj-$(CONFIG_INPUT_SPRD_HEADSET_SHARK)  += headset_sprd.o
 obj-$(CONFIG_INPUT_HEADSET_SPRD_SC2723)  += headset_sprd_sc2723.o
+obj-$(CONFIG_INPUT_SECBRIDGE)   += sec-input-bridge.o
similarity index 77%
rename from drivers/input/sec-input-bridge.c
rename to drivers/input/misc/sec-input-bridge.c
index e85c9dc..e70642d 100644 (file)
@@ -22,6 +22,9 @@
 #include <linux/workqueue.h>
 #include <linux/mutex.h>
 #include <linux/input/sec-input-bridge.h>
+#ifdef CONFIG_SEC_DEBUG
+#include <soc/sprd/sec_debug.h>
+#endif
 #ifdef CONFIG_OF
 #include <linux/of.h>
 #endif
 enum inpup_mode {
        INPUT_LOGDUMP = 0,
        INPUT_SAFEMODE,
+       INPUT_ROTARYDUMP,
        INPUT_MAX
 };
 
-struct device *sec_input_bridge;
+static struct device *sec_input_bridge;
 
 struct sec_input_bridge {
        struct sec_input_bridge_platform_data *pdata;
@@ -110,50 +114,65 @@ static void input_bridge_set_ids(struct input_device_id *ids, unsigned int type,
        __set_bit(type, ids->evbit);
 }
 
-static void input_bridge_work(struct work_struct *work)
+#ifdef CONFIG_SEC_DEBUG
+extern union sec_debug_level_t sec_debug_level;
+#endif
+static void input_bridge_send_uevent(struct sec_input_bridge *bridge, int num)
 {
-       struct sec_input_bridge *bridge = container_of(work,
-                                                      struct sec_input_bridge,
-                                                      work);
-       int state, i;
+       struct platform_device *pdev = bridge->dev;
+       struct sec_input_bridge_platform_data *pdata = bridge->pdata;
        char env_str[16];
        char *envp[] = { env_str, NULL };
+       int state;
+
+#ifdef CONFIG_SEC_DEBUG
+       if (!sec_debug_level.en.kernel_fault) {
+               dev_info(&pdev->dev,
+                       "%s: sec_debug_level = [%d\n",
+                       __func__,sec_debug_level.en.kernel_fault);
+               return;
+       }
+#endif
+
+       sprintf(env_str, "%s=%s",
+               pdata->mmap[num].uevent_env_str,
+               pdata->mmap[num].uevent_env_value);
+
+       dev_info(&pdev->dev, "%s: event:[%s]\n", __func__, env_str);
+
+       state =  kobject_uevent_env(&sec_input_bridge->kobj,
+                       pdata->mmap[num].uevent_action, envp);
+       if (state != 0) {
+               dev_info(&pdev->dev,
+                       "%s: kobject_uevent_env fail[%d]\n",
+                       __func__, pdata->mmap[num].uevent_action);
+       } else
+               dev_info(&pdev->dev, "%s: now send uevent\n", __func__);
+}
+
+static void input_bridge_work(struct work_struct *work)
+{
+       struct sec_input_bridge *bridge =
+               container_of(work, struct sec_input_bridge, work);
+       struct sec_input_bridge_platform_data *pdata = bridge->pdata;
+       int i;
 
        mutex_lock(&bridge->lock);
 
-       for (i = 0; i < bridge->pdata->num_map; i++) {
+       for (i = 0; i < pdata->num_map; i++) {
                if (bridge->send_uevent_flag & (1 << i)) {
-                       if (bridge->pdata->mmap[i].enable_uevent) {
-                               printk(KERN_ERR
-                                    "!!!!sec-input-bridge: OK!!, KEY input matched , now send uevent!!!!\n");
-                               sprintf(env_str, "%s=%s",
-                                       bridge->pdata->mmap[i].uevent_env_str,
-                                       bridge->pdata->mmap[i]
-                                               .uevent_env_value);
-                               printk(KERN_ERR
-                                   "<kobject_uevent_env for sec-input-bridge>, event: %s\n",
-                                   env_str);
-                               state =
-                                   kobject_uevent_env(&sec_input_bridge->kobj,
-                                                      bridge->pdata->mmap[i].
-                                                      uevent_action, envp);
-                               if (state != 0)
-                                       printk(KERN_ERR
-                                              "<error, kobject_uevent_env fail> with action : %d\n",
-                                              bridge->pdata->mmap[i].
-                                              uevent_action);
-                       }
-                       if (bridge->pdata->mmap[i].pre_event_func) {
-                               bridge->pdata->mmap[i].
-                               pre_event_func(bridge->pdata->event_data);
+                       if (pdata->mmap[i].enable_uevent)
+                               input_bridge_send_uevent(bridge, i);
+                       if (pdata->mmap[i].pre_event_func) {
+                               pdata->mmap[i].pre_event_func
+                                       (pdata->event_data);
                        }
-
                        bridge->send_uevent_flag &= ~(1 << i);
                }
        }
 
-       if (bridge->pdata->lcd_warning_func)
-               bridge->pdata->lcd_warning_func();
+       if (pdata->lcd_warning_func)
+               pdata->lcd_warning_func();
 
        mutex_unlock(&bridge->lock);
 
@@ -183,29 +202,13 @@ static void input_bridge_check_safemode(struct input_handle *handle, unsigned in
        struct sec_input_bridge_platform_data *pdata = sec_bridge->pdata;
        struct sec_input_bridge_mmap *mmap = &pdata->mmap[INPUT_SAFEMODE];
        struct sec_input_bridge_mkey *mkey_map = mmap->mkey_map;
-       static int first_power_press = true;
-       static int first_power_release = true;
-
-       /* in probe time of the powerkey, powerkey press/release event is released */
-       if (code == KEY_POWER) {
-               if ((first_power_press == true) && (value == 1)) {
-                       first_power_press = false;
-                       dev_info(&sec_bridge->dev->dev,
-                               "%s: it is ignored the first powerkey press.\n", __func__);
-                       return;
-               } else if ((first_power_release == true) && (value == 0)) {
-                       first_power_press = false;
-                       dev_info(&sec_bridge->dev->dev,
-                               "%s: it is ignored the first powerkey release.\n", __func__);
-                       return;
-               }
-       }
 
        if ((code != mkey_map[0].code) || (value != mkey_map[0].type)) {
                sec_bridge->safemode_flag = false;
                dev_info(&sec_bridge->dev->dev,
                        "%s: safemode_flag is disabled.\n", __func__);
-       } else {
+       }
+       else {
                mod_timer(&sec_bridge->safemode_timer,\
                                jiffies + msecs_to_jiffies(SAFEMODE_TIMEOUT));
                dev_info(&sec_bridge->dev->dev, "%s: timer is set. (%dms)\n",
@@ -213,6 +216,47 @@ static void input_bridge_check_safemode(struct input_handle *handle, unsigned in
        }
 }
 
+static void input_bridge_check_rotarydump(struct input_handle *handle, unsigned int type,
+                              unsigned int code, int value)
+{
+       struct input_handler *sec_bridge_handler = handle->handler;
+       struct sec_input_bridge *sec_bridge = sec_bridge_handler->private;
+       struct sec_input_bridge_platform_data *pdata = sec_bridge->pdata;
+       struct sec_input_bridge_mmap *mmap = &pdata->mmap[INPUT_ROTARYDUMP];
+
+       if (mmap->mkey_map[sec_bridge->check_index[INPUT_ROTARYDUMP]].type == type) {
+               if (type == EV_KEY) {
+                       if (mmap->mkey_map[sec_bridge->check_index[INPUT_ROTARYDUMP]].code == code) {
+                               sec_bridge->check_index[INPUT_ROTARYDUMP] = value;
+                       } else
+                               goto out;
+               } else if (type == EV_REL) {
+                       if (mmap->mkey_map[sec_bridge->check_index[INPUT_ROTARYDUMP]].code == code) {
+                               sec_bridge->check_index[INPUT_ROTARYDUMP]++;
+                               if ((sec_bridge->check_index[INPUT_ROTARYDUMP]) >= mmap->num_mkey) {
+                                       sec_bridge->send_uevent_flag |= (1 << INPUT_ROTARYDUMP);
+                                       schedule_work(&sec_bridge->work);
+                                       goto out;
+                               }
+                       } else if (code == REL_X) {
+                               return;
+                       } else {
+                               goto out;
+                       }
+               } else {
+                       goto out;
+               }
+       } else {
+               goto out;
+       }
+
+       return;
+
+out:
+       sec_bridge->check_index[INPUT_ROTARYDUMP] = 0;
+       return;
+}
+
 static void input_bridge_check_logdump(struct input_handle *handle, unsigned int type,
                               unsigned int code)
 {
@@ -248,10 +292,6 @@ static void input_bridge_event(struct input_handle *handle, unsigned int type,
        struct sec_input_bridge *sec_bridge = sec_bridge_handler->private;
        int rep_check;
 
-       if ((code != KEY_VOLUMEDOWN) && (code != KEY_VOLUMEUP) &&
-           (code != KEY_POWER) && (code != KEY_MENU))
-               return;
-
        rep_check = test_bit(EV_REP, sec_bridge_handler->id_table->evbit);
        rep_check = (rep_check << 1) | 1;
 
@@ -263,8 +303,15 @@ static void input_bridge_event(struct input_handle *handle, unsigned int type,
                if (sec_bridge->safemode_flag == SAFEMODE_INIT)
                        input_bridge_check_safemode
                                    (handle, type, code, value);
+
+               if (code == KEY_POWER)
+                       input_bridge_check_rotarydump
+                                           (handle, type, code, value);
                break;
 
+       case EV_REL:
+               input_bridge_check_rotarydump
+                                   (handle, type, code, value);
        default:
                break;
        }
@@ -282,7 +329,7 @@ static int input_bridge_check_support_dev (struct input_dev *dev)
        }
 
        bridge = dev_get_drvdata(sec_input_bridge);
-       for (i = 0; i < bridge->pdata->num_dev; i++) {
+       for(i = 0; i < bridge->pdata->support_dev_num; i++) {
                if (!strncmp(dev->name, bridge->pdata->support_dev_name[i],\
                                strlen(dev->name)))
                        return 0;
@@ -298,12 +345,8 @@ static int input_bridge_connect(struct input_handler *handler,
        struct input_handle *handle;
        int error;
 
-
-       if (input_bridge_check_support_dev(dev)) {
-               printk(KERN_ERR "%s: unsupport device.[%s]",
-                       __func__, dev->name);
+       if (input_bridge_check_support_dev(dev))
                return -ENODEV;
-           }
 
        handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL);
        if (!handle)
@@ -332,6 +375,8 @@ static int input_bridge_connect(struct input_handler *handler,
                return error;
        }
 
+       printk(KERN_INFO "%s: connected %s.\n", __func__, dev->name);
+
        return 0;
 }
 
@@ -357,8 +402,9 @@ static int sec_input_bridge_parse_dt(struct device *dev,
        struct property *prop;
        enum mkey_check_option option;
        unsigned int *map;
+       unsigned int *type;
        const char *out_prop;
-       int i, j, rc, map_size;
+       int i, j, rc, map_size, type_size;
 
        rc = of_property_read_u32(np, "input_bridge,num_map",\
                        (unsigned int *)&pdata->num_map);
@@ -385,7 +431,7 @@ static int sec_input_bridge_parse_dt(struct device *dev,
        for (i = 0; i < pdata->num_map; i++) {
                rc = of_property_read_string_index(np, "input_bridge,map_codes", i, &out_prop);
                if (rc < 0) {
-                       dev_err(dev, "failed to get %d props string.\n", i);
+                       dev_err(dev, "failed to get %d map_codes string.[%s]\n", i, out_prop);
                        goto error;
 
                }
@@ -408,6 +454,33 @@ static int sec_input_bridge_parse_dt(struct device *dev,
                        dev_err(dev, "Unable to read %s\n", out_prop);
                        goto error;
                }
+
+               rc = of_property_read_string_index(np, "input_bridge,map_types", i, &out_prop);
+               if (rc < 0) {
+                       dev_err(dev, "failed to get %d map_types string.[%s]\n", i, out_prop);
+                       goto error;
+
+               }
+               prop = of_find_property(np, out_prop, NULL);
+               if (!prop) {
+                       rc = -EINVAL;
+                       goto error;
+               }
+
+               type_size = prop->length / sizeof(unsigned int);
+               type = devm_kzalloc(dev, sizeof(unsigned int)*type_size, GFP_KERNEL);
+               if (!type) {
+                       dev_err(dev, "%s: Failed to allocate key memory.\n", __func__);
+                       rc = -ENOMEM;
+                       goto error;
+               }
+
+               rc = of_property_read_u32_array(np, out_prop, type, type_size);
+               if (rc && (rc != -EINVAL)) {
+                       dev_err(dev, "Unable to read %s\n", out_prop);
+                       goto error;
+               }
+
                pdata->mmap[i].mkey_map = devm_kzalloc(dev,
                                        sizeof(struct sec_input_bridge_mkey)*\
                                        map_size, GFP_KERNEL);
@@ -418,20 +491,20 @@ static int sec_input_bridge_parse_dt(struct device *dev,
                }
 
                for (j = 0; j < map_size; j++) {
-                       pdata->mmap[i].mkey_map[j].type = option;
+                       pdata->mmap[i].mkey_map[j].type = type[j];
                        pdata->mmap[i].mkey_map[j].code = map[j];
                }
 
                rc = of_property_read_string_index(np, "input_bridge,env_str", i, &out_prop);
                if (rc < 0) {
-                       dev_err(dev, "failed to get %d props string\n", i);
+                       dev_err(dev, "failed to get %d env_str string\n", i);
                        goto error;
                }
                pdata->mmap[i].uevent_env_str = (char *)out_prop;
 
                rc = of_property_read_string_index(np, "input_bridge,env_value", i, &out_prop);
                if (rc) {
-                       dev_err(dev, "failed to get %d props string\n", i);
+                       dev_err(dev, "failed to get %d env_value string\n", i);
                        goto error;
                }
                pdata->mmap[i].uevent_env_value = (char *)out_prop;
@@ -447,15 +520,15 @@ static int sec_input_bridge_parse_dt(struct device *dev,
                }
        }
 
-       rc = of_property_read_u32(np, "input_bridge,num_dev",\
-                       (unsigned int *)&pdata->num_dev);
+       rc = of_property_read_u32(np, "input_bridge,dev_num",\
+                       (unsigned int *)&pdata->support_dev_num);
        if (rc) {
-               dev_err(dev, "failed to get num_dev.\n");
+               dev_err(dev, "failed to get support_dev_num.\n");
                goto error;
        }
 
        pdata->support_dev_name = devm_kzalloc(dev,
-                       sizeof(char *)*pdata->num_dev, GFP_KERNEL);
+                       sizeof(char*)*pdata->support_dev_num, GFP_KERNEL);
        if (!pdata->support_dev_name) {
                dev_err(dev, "%s: Failed to allocate memory."\
                        "[support_dev_name]\n", __func__);
@@ -463,7 +536,7 @@ static int sec_input_bridge_parse_dt(struct device *dev,
                goto error;
        }
 
-       for (i = 0; i < pdata->num_dev; i++) {
+       for (i = 0; i < pdata->support_dev_num; i++) {
                rc = of_property_read_string_index(np, "input_bridge,dev_name_str", i, &out_prop);
                if (rc < 0) {
                        dev_err(dev, "failed to get %d dev_name_str string\n", i);
@@ -477,7 +550,7 @@ static int sec_input_bridge_parse_dt(struct device *dev,
 
                dev_info(dev, "%s: pdata->mmap[%d].num_mkey=[%d]\n",
                                __func__, i, pdata->mmap[i].num_mkey);
-               for (j = 0; j < pdata->mmap[i].num_mkey; j++) {
+               for(j = 0; j < pdata->mmap[i].num_mkey; j++) {
                        dev_info(dev,
                                "%s: pdata->mmap[%d].mkey_map[%d].type=[%d]\n",
                                __func__, i, j, pdata->mmap[i].mkey_map[j].type);
@@ -497,10 +570,10 @@ static int sec_input_bridge_parse_dt(struct device *dev,
                dev_info(dev, "%s: pdata->mmap[%d].uevent_action=[%d]\n",
                                __func__, i, pdata->mmap[i].uevent_action);
        }
-       dev_info(dev, "%s: pdata->num_dev=[%d]\n", __func__, pdata->num_dev);
-       for (i = 0; i < pdata->num_dev; i++)
+       dev_info(dev, "%s: pdata->support_dev_num=[%d]\n", __func__, pdata->support_dev_num);
+       for (i = 0; i < pdata->support_dev_num; i++)
                dev_info(dev, "%s: pdata->support_dev_name[%d] = [%s]\n",
-                       __func__, i, pdata->support_dev_name[i]);
+                       __func__, i, pdata->support_dev_name [i]);
 #endif
        return 0;
 error:
@@ -579,7 +652,7 @@ static int sec_input_bridge_probe(struct platform_device *pdev)
                state = -ENOMEM;
                goto error_2;
        }
-       memset(input_bridge_ids, 0x00, sizeof(*input_bridge_ids));
+       memset(input_bridge_ids, 0x00, sizeof(input_bridge_ids));
 
        for (i = 0, k = 0; i < pdata->num_map; i++) {
                for (j = 0; j < pdata->mmap[i].num_mkey; j++) {
@@ -592,12 +665,6 @@ static int sec_input_bridge_probe(struct platform_device *pdev)
        input_bridge_handler.private = bridge;
        input_bridge_handler.id_table = input_bridge_ids;
 
-       state = input_register_handler(&input_bridge_handler);
-       if (state) {
-               dev_err(&pdev->dev, "Failed to register input_bridge_handler\n");
-               goto error_3;
-       }
-
        bridge->dev = pdev;
        bridge->pdata = pdata;
        platform_set_drvdata(pdev, bridge);
@@ -617,6 +684,14 @@ static int sec_input_bridge_probe(struct platform_device *pdev)
        }
        dev_set_drvdata(sec_input_bridge, bridge);
 
+       state = input_register_handler(&input_bridge_handler);
+       if (state) {
+               dev_err(&pdev->dev, "Failed to register input_bridge_handler\n");
+               goto error_3;
+       }
+
+       dev_info(&pdev->dev, "%s: done.\n", __func__);
+
        return 0;
 
 error_3:
index 88af95f..09c93fa 100644 (file)
 #define J5_100_OHM_VALUE    0xECEC0001
 
 #define MAX_ERR_CNT                    (100)
-#define EVENT_TIMER_INTERVAL           (HZ * timer_period_ms / 1000)
-u32 event_ms = 0, timer_ms = 0;
-static struct timer_list event_timer;
-static struct timespec t_current;      /* nano seconds */
-int timer_period_ms = 500;             /* 500 msec */
 
 extern int in_calibration(void);
 
@@ -89,6 +84,8 @@ void tsp_printk(int level, const char *fmt, ...)
        va_end(args);
 }
 
+static struct timespec t_current;      /* nano seconds */
+
 long get_milli_second(void)
 {
        ktime_get_ts(&t_current);
@@ -173,7 +170,6 @@ void ist30xx_start(struct ist30xx_data *data)
                data->scan_count = 0;
                data->scan_retry = 0;
                data->deep_sleep = false;
-               mod_timer(&event_timer, get_jiffies_64() + EVENT_TIMER_INTERVAL * 2);
        }
        /* TA mode */
        ist30xx_write_cmd(data->client, IST30XX_HIB_CMD,
@@ -271,6 +267,7 @@ err_get_ver:
 #define CALIB_MSG_VALID                (0x80000CAB)
 #define TRACKING_INTR_VALID    (0x127EA597)
 u32 tracking_intr_value = TRACKING_INTR_VALID;
+u32 event_ms = 0, timer_ms = 0;
 int ist30xx_get_info(struct ist30xx_data *data)
 {
        int ret;
@@ -393,13 +390,6 @@ void ist30xx_special_cmd(struct ist30xx_data *data, int cmd)
 }
 #endif
 
-#define PRESS_MSG_MASK         (0x01)
-#define MULTI_MSG_MASK         (0x02)
-#define TOUCH_DOWN_MESSAGE     ("P")
-#define TOUCH_UP_MESSAGE       ("R")
-#define TOUCH_MOVE_MESSAGE     ("M")
-bool tsp_touched[IST30XX_MAX_MT_FINGERS] = { false, };
-
 void print_tsp_event(struct ist30xx_data *data, finger_info *finger)
 {
        int idx = finger->bit_field.id - 1;
@@ -408,38 +398,46 @@ void print_tsp_event(struct ist30xx_data *data, finger_info *finger)
        press = PRESSED_FINGER(data->t_status, finger->bit_field.id);
 
        if (press) {
-               if (tsp_touched[idx] == false) {
+               if (data->tsp_touched[idx] == false) {
                        /* touch down */
                        data->touch_pressed_num++;
-                       tsp_noti("%s [%d] x=%d y=%d z=%d\n",
-                                       TOUCH_DOWN_MESSAGE, idx,
+                       data->press_finger_cnt++;
+                       tsp_noti("P [%d] x=%d y=%d z=%d\n",
+                                       idx,
                                        finger->bit_field.x,
                                        finger->bit_field.y,
-                                       data->z_values[idx]);
-                       tsp_touched[idx] = true;
+                                       finger->bit_field.area);
+                       data->tsp_touched[idx] = true;
                } else {
                        /* touch move */
-                       tsp_debug("%s [%d] x=%d y=%d z=%d\n",
-                                       TOUCH_MOVE_MESSAGE, idx,
+                       tsp_debug("M [%d] x=%d y=%d z=%d\n",
+                                       idx,
                                        finger->bit_field.x,
                                        finger->bit_field.y,
-                                       data->z_values[idx]);
+                                       finger->bit_field.area);
                }
 
                data->lx[idx] = finger->bit_field.x;
                data->ly[idx] = finger->bit_field.y;
+               data->press_cnt[idx] ++;
        } else {
-               if (tsp_touched[idx] == true) {
+               if (data->tsp_touched[idx] == true) {
                        /* touch up */
                        data->touch_pressed_num--;
 #ifdef CONFIG_SLEEP_MONITOR
                        data->release_cnt++;
 #endif
-                       tsp_noti("%s [%d] x=%d y=%d\n", TOUCH_UP_MESSAGE,
-                                       finger->bit_field.id-1,
+                       tsp_noti("R [%d] x=%d y=%d z=%d c=%d v=0x%04x\n",
+                                       idx,
                                        data->lx[idx],
-                                       data->ly[idx]);
-                       tsp_touched[idx] = false;
+                                       data->ly[idx],
+                                       finger->bit_field.area,
+                                       data->press_cnt[idx],
+                                       data->fw.cur.fw_ver);
+                       data->tsp_touched[idx] = false;
+                       data->press_cnt[idx] = 0;
+                       if(data->press_finger_cnt > 0)
+                               data->press_finger_cnt--;
                }
        }
 }
@@ -476,7 +474,9 @@ static void release_finger(struct ist30xx_data *data, int id)
        ist30xx_tracking(TRACK_POS_FINGER + id);
        tsp_info("%s() %d\n", __func__, id);
 
-       tsp_touched[id - 1] = false;
+       data->tsp_touched[id - 1] = false;
+       data->press_cnt[id - 1] = 0;
+       data->press_finger_cnt = 0;
 
        input_sync(data->input_dev);
 }
@@ -593,18 +593,22 @@ static void report_input_data(struct ist30xx_data *data, int finger_counts,
                input_mt_slot(data->input_dev, id);
                input_mt_report_slot_state(data->input_dev, MT_TOOL_FINGER, press);
 
+               if ((press) && (!data->press_finger_cnt)) {
+                       input_report_key(data->input_dev, BTN_TOUCH, 1);
+                       input_report_key(data->input_dev, BTN_TOOL_FINGER, 1);
+               }
+
                fingers[idx].bit_field.id = id + 1;
                print_tsp_event(data, &fingers[idx]);
 
-               if (!press) {
+               if ((!press) && (!data->press_finger_cnt)) {
                        input_report_key(data->input_dev, BTN_TOUCH, 0);
                        input_report_key(data->input_dev, BTN_TOOL_FINGER, 0);
-                       continue;
-               } else if (!tsp_touched[id]) {
-                       input_report_key(data->input_dev, BTN_TOUCH, 1);
-                       input_report_key(data->input_dev, BTN_TOOL_FINGER, 1);
                }
 
+               if (!press)
+                       continue;
+
                input_report_abs(data->input_dev, ABS_MT_POSITION_X,
                                fingers[idx].bit_field.x);
                input_report_abs(data->input_dev, ABS_MT_POSITION_Y,
@@ -924,10 +928,7 @@ static int ist30xx_suspend(struct device *dev)
        struct i2c_client *client = to_i2c_client(dev);
        struct ist30xx_data *data = i2c_get_clientdata(client);
 
-       del_timer(&event_timer);
-       cancel_delayed_work_sync(&data->work_noise_protect);
        cancel_delayed_work_sync(&data->work_reset_check);
-       cancel_delayed_work_sync(&data->work_debug_algorithm);
        mutex_lock(&ist30xx_mutex);
        ist30xx_disable_irq(data);
        ist30xx_internal_suspend(data);
@@ -1184,142 +1185,6 @@ static void fw_update_func(struct work_struct *work)
 #define GET_DEEP_SLEEP_STATUS(n)       ((n & DEEP_SLEEP_MASK) >> 19)
 #define GET_SCAN_CNT(n)                ((n & SCAN_CNT_MASK) >> 21)
 u32 ist30xx_algr_addr = 0, ist30xx_algr_size = 0;
-static void noise_work_func(struct work_struct *work)
-{
-       int ret;
-       u32 touch_status = 0;
-       u32 scan_count = 0;
-       struct delayed_work *delayed_work = to_delayed_work(work);
-       struct ist30xx_data *data = container_of(delayed_work,
-                       struct ist30xx_data, work_noise_protect);
-
-       ret = ist30xx_read_reg(data->client,
-                       IST30XX_HIB_TOUCH_STATUS, &touch_status);
-       if (unlikely(ret)) {
-               tsp_warn("Touch status read fail!\n");
-               goto retry_timer;
-       }
-
-       ist30xx_put_track_ms(timer_ms);
-       ist30xx_put_track(&touch_status, 1);
-
-       tsp_verb("Touch Info: 0x%08x\n", touch_status);
-
-       /* Check valid scan count */
-       if (unlikely((touch_status & TOUCH_STATUS_MASK) != TOUCH_STATUS_MAGIC)) {
-               tsp_warn("Touch status is not corrected! (0x%08x)\n", touch_status);
-               goto retry_timer;
-       }
-
-       /* Status of IC is deep sleep */
-       data->deep_sleep = GET_DEEP_SLEEP_STATUS(touch_status) ? true : false;
-
-       /* Status of IC is idle */
-       if (GET_FINGER_ENABLE(touch_status) == 0) {
-               if ((PARSE_FINGER_CNT(data->t_status) > 0) ||
-                               (PARSE_KEY_CNT(data->t_status) > 0))
-                       clear_input_data(data);
-       }
-
-       scan_count = GET_SCAN_CNT(touch_status);
-
-       /* Status of IC is lock-up */
-       if (unlikely(scan_count == data->scan_count)) {
-               tsp_warn("TSP IC is not responded! (0x%08x)\n", scan_count);
-               goto retry_timer;
-       }
-
-       data->scan_retry = 0;
-       data->scan_count = scan_count;
-       return;
-
-retry_timer:
-       data->scan_retry++;
-       tsp_warn("Retry touch status!(%d)\n", data->scan_retry);
-
-       if (unlikely(data->scan_retry == data->max_scan_retry)) {
-               ist30xx_scheduled_reset(data);
-               data->scan_retry = 0;
-       }
-}
-
-static void debug_work_func(struct work_struct *work)
-{
-#if IST30XX_ALGORITHM_MODE
-       int ret = -EPERM;
-       int i;
-       u32 *buf32;
-
-       struct delayed_work *delayed_work = to_delayed_work(work);
-       struct ist30xx_data *data = container_of(delayed_work,
-                       struct ist30xx_data, work_debug_algorithm);
-
-       buf32 = kzalloc(ist30xx_algr_size, GFP_KERNEL);
-       if (!buf32) {
-               tsp_info("%s: Couldn't Allocate memory\n", __func__);
-                               return;
-       }
-
-       for (i = 0; i < ist30xx_algr_size; i++) {
-               ret = ist30xx_read_buf(data->client,
-                               ist30xx_algr_addr + IST30XX_DATA_LEN * i, &buf32[i], 1);
-               if (ret) {
-                       tsp_warn("Algorithm mem addr read fail!\n");
-                       return;
-               }
-       }
-
-       ist30xx_put_track(buf32, ist30xx_algr_size);
-
-       tsp_debug(" 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
-                       buf32[0], buf32[1], buf32[2], buf32[3], buf32[4]);
-       kfree(buf32);
-#endif
-}
-
-void timer_handler(unsigned long timer_data)
-{
-       struct ist30xx_data *data = (struct ist30xx_data *)timer_data;
-       struct ist30xx_status *status = &data->status;
-
-       if (data->irq_working)
-               goto restart_timer;
-
-       if (status->event_mode) {
-               if (likely((status->power == 1) && (status->update != 1))) {
-                       timer_ms = (u32)get_milli_second();
-                       if (unlikely(status->calib == 1)) {
-                               /* Check calibration */
-                               if ((status->calib_msg & CALIB_MSG_MASK) == CALIB_MSG_VALID) {
-                                       tsp_info("Calibration check OK!!\n");
-                                       schedule_delayed_work(&data->work_reset_check, 0);
-                                       status->calib = 0;
-                               } else if (timer_ms - event_ms >= 3000) {
-                                       /* over 3 second */
-                                       tsp_info("calibration timeout over 3sec\n");
-                                       schedule_delayed_work(&data->work_reset_check, 0);
-                                       status->calib = 0;
-                               }
-                       } else if (likely(status->noise_mode)) {
-                               /* 100ms after last interrupt */
-                               if (timer_ms - event_ms > 100)
-                                       schedule_delayed_work(&data->work_noise_protect, 0);
-                       }
-
-#if IST30XX_ALGORITHM_MODE
-                       if ((ist30xx_algr_addr >= IST30XX_DIRECT_ACCESS) &&
-                                       (ist30xx_algr_size > 0)) {
-                               /* 100ms after last interrupt */
-                               if (timer_ms - event_ms > 100)
-                                       schedule_delayed_work(&data->work_debug_algorithm, 0);
-                       }
-#endif
-               }
-       }
-
-restart_timer:
-       mod_timer(&event_timer, get_jiffies_64() + EVENT_TIMER_INTERVAL);
-}
 
 static void ist30xx_request_gpio(struct i2c_client *client,
                struct ist30xx_data *data)
@@ -1396,7 +1261,6 @@ static int ist30xx_get_sleep_monitor_cb(void* priv, unsigned int *raw_val, int c
 {
        struct ist30xx_data *data = priv;
        int state = DEVICE_UNKNOWN;
-       int tsp_mode;
        int pretty = 0;
        *raw_val = -1;
 
@@ -1833,14 +1697,6 @@ static int ist30xx_probe(struct i2c_client *client,
        data->jig_mode = 1;
 #endif
        INIT_DELAYED_WORK(&data->work_reset_check, reset_work_func);
-       INIT_DELAYED_WORK(&data->work_noise_protect, noise_work_func);
-       INIT_DELAYED_WORK(&data->work_debug_algorithm, debug_work_func);
-
-       init_timer(&event_timer);
-       event_timer.data = (unsigned long)data;
-       event_timer.function = timer_handler;
-       event_timer.expires = jiffies_64 + (EVENT_TIMER_INTERVAL);
-       mod_timer(&event_timer, get_jiffies_64() + EVENT_TIMER_INTERVAL * 2);
 
        ret = ist30xx_get_info(data);
        tsp_info("Get info: %s\n", (ret == 0 ? "success" : "fail"));
@@ -1945,10 +1801,7 @@ static void ist30xx_shutdown(struct i2c_client *client)
        struct ist30xx_data *data = i2c_get_clientdata(client);
 
        tsp_err("%s is called\n", __func__);
-       del_timer(&event_timer);
-       cancel_delayed_work_sync(&data->work_noise_protect);
        cancel_delayed_work_sync(&data->work_reset_check);
-       cancel_delayed_work_sync(&data->work_debug_algorithm);
        mutex_lock(&ist30xx_mutex);
        ist30xx_disable_irq(data);
        ist30xx_internal_suspend(data);
index bca4d97..951ca5d 100644 (file)
@@ -612,25 +612,6 @@ ssize_t ist30xx_scancnt_store(struct device *dev, struct device_attribute *attr,
        return size;
 }
 
-extern int timer_period_ms;
-/* sysfs: /sys/class/touch/sys/timerms */
-ssize_t ist30xx_timerms_store(struct device *dev, struct device_attribute *attr,
-                               const char *buf, size_t size)
-{
-       int ms;
-
-       sscanf(buf, "%d", &ms);
-
-       if (unlikely((ms < 0) || (ms > 10000)))
-               return size;
-
-       tsp_info("Timer period ms: %dms\n", ms);
-
-       timer_period_ms = ms;
-
-       return size;
-}
-
 extern int ist30xx_dbg_level;
 /* sysfs: /sys/class/touch/sys/printk */
 ssize_t ist30xx_printk_store(struct device *dev, struct device_attribute *attr,
@@ -1233,7 +1214,7 @@ ssize_t tunes_adb_show(struct device *dev, struct device_attribute *attr,
        return size;
 }
 
-#if IST30XX_ALGORITHM_MODE
+#ifdef IST30XX_ALGORITHM_MODE
 /* sysfs: /sys/class/touch/tunes/algorithm */
 extern u32 ist30xx_algr_addr, ist30xx_algr_size;
 ssize_t ist30xx_algr_store(struct device *dev, struct device_attribute *attr,
@@ -1385,7 +1366,6 @@ static DEVICE_ATTR(tsp_power_on, S_IRUGO, ist30xx_power_on_show, NULL);
 static DEVICE_ATTR(tsp_power_off, S_IRUGO, ist30xx_power_off_show, NULL);
 static DEVICE_ATTR(errcnt, S_IWUSR | S_IWGRP, NULL, ist30xx_errcnt_store);
 static DEVICE_ATTR(scancnt, S_IWUSR | S_IWGRP, NULL, ist30xx_scancnt_store);
-static DEVICE_ATTR(timerms, S_IWUSR | S_IWGRP, NULL, ist30xx_timerms_store);
 static DEVICE_ATTR(report_rate, S_IWUSR | S_IWGRP, NULL, ist30xx_touch_rate_store);
 static DEVICE_ATTR(idle_rate, S_IWUSR | S_IWGRP, NULL, ist30xx_idle_scan_rate_store);
 static DEVICE_ATTR(mode_ta, S_IWUSR | S_IWGRP, NULL, ist30xx_ta_mode_store);
@@ -1397,7 +1377,7 @@ static DEVICE_ATTR(node_info, S_IRUGO, tunes_node_info_show, NULL);
 static DEVICE_ATTR(regcmd, S_IRUGO | S_IWUSR | S_IWGRP, tunes_regcmd_show, tunes_regcmd_store);
 static DEVICE_ATTR(reg, S_IRUGO | S_IWUSR | S_IWGRP, tunes_reg_show, tunes_reg_store);
 static DEVICE_ATTR(adb, S_IRUGO | S_IWUSR | S_IWGRP, tunes_adb_show, tunes_adb_store);
-#if IST30XX_ALGORITHM_MODE
+#ifdef IST30XX_ALGORITHM_MODE
 static DEVICE_ATTR(algorithm, S_IRUGO | S_IWUSR | S_IWGRP, ist30xx_algr_show, ist30xx_algr_store);
 #endif
 static DEVICE_ATTR(intr_debug, S_IRUGO | S_IWUSR | S_IWGRP, intr_debug_show, intr_debug_store);
@@ -1431,7 +1411,6 @@ static struct attribute *sys_attributes[] = {
        &dev_attr_tsp_power_off.attr,
        &dev_attr_errcnt.attr,
        &dev_attr_scancnt.attr,
-       &dev_attr_timerms.attr,
        &dev_attr_report_rate.attr,
        &dev_attr_idle_rate.attr,
        &dev_attr_mode_ta.attr,
@@ -1446,7 +1425,7 @@ static struct attribute *tunes_attributes[] = {
        &dev_attr_regcmd.attr,
        &dev_attr_reg.attr,
        &dev_attr_adb.attr,
-#if IST30XX_ALGORITHM_MODE
+#ifdef IST30XX_ALGORITHM_MODE
        &dev_attr_algorithm.attr,
 #endif
        &dev_attr_intr_debug.attr,
index 5086d53..9f21fd1 100644 (file)
@@ -1564,6 +1564,15 @@ static ssize_t store_cmd(struct device *dev, struct device_attribute
                }
        }
 
+       if (data->touch_stopped) {
+               set_default_result(sec);
+               sec->cmd_state = CMD_STATE_FAIL;
+               snprintf(msg, sizeof(msg), "%s", "NG");
+               set_cmd_result(sec, msg, strnlen(msg, sizeof(msg)));
+               tsp_info("%s: TSP is not enabled.\n", __func__);
+               goto err_out;
+       }
+
        /* parsing parameters */
        if (cur && cmd_found) {
                cur++;
index 00e1e41..03a0094 100755 (executable)
@@ -243,13 +243,13 @@ if(fmdev->response_completion != NULL){
                           //sub_event=0x30,p=0x0,p+1=0xae,p+2=0x0.p:after subevent
                           pr_info("sub_event=0x%x,p=0x%x,p+1=0x%x,p+2=0x%x",sub_event,p[0],p[1],p[2]);
 
-                               spin_lock_irqsave(&fmdev->resp_skb_lock, flags);
+                       if(sub_event==0x30)
+                       {
+                           spin_lock_irqsave(&fmdev->resp_skb_lock, flags);
                            fmdev->response_skb = skb;
-                spin_unlock_irqrestore(&fmdev->resp_skb_lock, flags);
+                            spin_unlock_irqrestore(&fmdev->resp_skb_lock, flags);
 
-                               if(sub_event==0x30)
-                                       {
-                    complete(&fmdev->seektask_completion);
+                            complete(&fmdev->seektask_completion);
 
                        //(&fmdev->seektask_completion)= NULL;
 
index 08531f5..5f8b49c 100755 (executable)
@@ -492,7 +492,7 @@ int fm_rx_set_frequency(struct fmdrv_ops *fmdev, unsigned int freq_to_set)
             &fmdev->maintask_completion, &resp_buf[0], &resp_len);
     FM_CHECK_SEND_CMD_STATUS(ret);
 
-       fmdev->rx.curr_freq=(resp_buf[3]<<8)+resp_buf[3]; //need to check
+       fmdev->rx.curr_freq=(resp_buf[3]<<8)+resp_buf[2]; //need to check
        global_frequency=fmdev->rx.curr_freq;
        pr_info("(fmdev) %s(): global_frequency : %d,resp_buf=%d %d %d\n", __func__, global_frequency,resp_buf[0],resp_buf[1],resp_buf[2]);
     return ret;
@@ -878,7 +878,7 @@ int fm_rx_get_volume(struct fmdrv_ops *fmdev, unsigned short *curr_vol)
 int fm_rx_set_region(struct fmdrv_ops *fmdev,
             unsigned char region_to_set)
 {
-    unsigned char payload = FM_STEREO_AUTO|FM_BAND_REG_WEST;
+    unsigned char payload = FM_REGION_EUR;
 
     int ret = -EPERM;
 
@@ -895,9 +895,11 @@ int fm_rx_set_region(struct fmdrv_ops *fmdev,
     }
     if (region_to_set == FM_REGION_JP)/* set japan region */
     {
-        payload |= FM_BAND_REG_EAST;
+        payload |= FM_REGION_JP;
     }
 
+    pr_info("(fmdrv) %s(): region_to_set : 0x%x\n",
+                       __func__,region_to_set );
     /* Send cmd to set the band  */
     ret = fmc_send_cmd(fmdev, FM_SETREGION_SUB_CMD, &payload, sizeof(payload), REG_WR,
         &fmdev->maintask_completion, NULL, NULL);
old mode 100644 (file)
new mode 100755 (executable)
index 8a08443..64a0606
@@ -669,7 +669,7 @@ LOCAL int sprd_img_check_path0_cap(uint32_t fourcc,
 
        path->frm_type = f->channel_id;
        path->is_work = 0;
-       printk("zcf sprd_img_check_path0_cap  rot_mode:%d\n",path->rot_mode);
+       DCAM_TRACE("zcf sprd_img_check_path0_cap  rot_mode:%d\n",path->rot_mode);
 
        switch (fourcc) {
        case IMG_PIX_FMT_GREY:
@@ -695,7 +695,7 @@ LOCAL int sprd_img_check_path0_cap(uint32_t fourcc,
                } else {
                        path->end_sel.uv_endian = DCAM_ENDIAN_HALFBIG;
                }
-               printk("SPRD_IMG: path->end_sel.uv_endian=%d \n", path->end_sel.uv_endian);
+               DCAM_TRACE("SPRD_IMG: path->end_sel.uv_endian=%d \n", path->end_sel.uv_endian);
                break;
 
        default:
@@ -976,7 +976,7 @@ LOCAL int sprd_img_check_path2_cap(uint32_t fourcc,
        path->end_sel.uv_endian = DCAM_ENDIAN_LITTLE;
        path->is_work = 0;
        path->pixel_depth = 0;
-       printk("zcf sprd_img_check_path2_cap rot:%d\n",path->rot_mode);
+       DCAM_TRACE("zcf sprd_img_check_path2_cap rot:%d\n",path->rot_mode);
        if (info->img_deci.x_factor) {
                tempw = path->in_rect.w >> 1;
                path->in_size.w = path->in_size.w >> 1;
@@ -1642,7 +1642,7 @@ LOCAL int sprd_img_local_clear_path_buffer(struct dcam_dev *dev, int path_id)
        path->frm_cnt_act = 0;
        sprd_img_buf_queue_init(&path->buf_queue);
 
-       printk("SPRD_IMG: clear path buffer, frm_cnt_act %d \n", path->frm_cnt_act);
+       DCAM_TRACE("SPRD_IMG: clear path buffer, frm_cnt_act %d \n", path->frm_cnt_act);
 
        return 0;
 }
@@ -1651,7 +1651,7 @@ LOCAL int sprd_img_local_deinit(struct dcam_dev *dev)
 {
        int                                     ret = 0;
        struct dcam_path_spec    *path = &dev->dcam_cxt.dcam_path[DCAM_PATH1];
-       printk("SPRD_IMG: sprd_img_local_deinit, frm_cnt_act %d \n", path->frm_cnt_act);
+       DCAM_TRACE("SPRD_IMG: sprd_img_local_deinit, frm_cnt_act %d \n", path->frm_cnt_act);
        if (unlikely(NULL == dev || NULL == path)) {
                return -EINVAL;
        }
@@ -1792,7 +1792,7 @@ LOCAL int sprd_img_buf_queue_init(struct dcam_img_buf_queue *queue)
        if (NULL == queue)
                return -EINVAL;
 
-       printk("SPRD_IMG: sprd_img_buf_queue_init \n");
+       DCAM_TRACE("SPRD_IMG: sprd_img_buf_queue_init \n");
        memset(queue, 0, sizeof(*queue));
        queue->write = &queue->buf_addr[0];
        queue->read  = &queue->buf_addr[0];
@@ -2037,7 +2037,7 @@ int sprd_img_create_zoom_thread(void* param)
                DCAM_TRACE("create_zoom_thread, dev is NULL \n");
                return -1;
        }
-       printk("SPRD_IMG: create_zoom_thread E!\n");
+       DCAM_TRACE("SPRD_IMG: create_zoom_thread E!\n");
 
        dev->is_zoom_thread_stop = 0;
        dev->zoom_level = DCAM_ZOOM_LEVEL_MAX + 1;
@@ -2487,7 +2487,7 @@ exit:
 #endif
        }
 
-       DCAM_TRACE("sprd_img_k_open %d \n", ret);
+       printk("sprd_img_k_open %d \n", ret);
        return ret;
 }
 
@@ -3333,7 +3333,7 @@ exit:
        return ret;
 }
 
-LOCAL int sprd_img_check_frame_timestamp(struct dcam_frame *frame, struct dcam_dev* param, struct timeval *tv)
+LOCAL int sprd_img_check_frame_timestamp(struct dcam_dev* param, struct timeval *tv)
 {
        int                      ret = DCAM_RTN_SUCCESS;
        struct dcam_dev          *dev = (struct dcam_dev*)param;
@@ -3466,11 +3466,13 @@ ssize_t sprd_img_read(struct file *file, char __user *u_data, size_t cnt, loff_t
                                read_op.parm.frame.real_index,
                                read_op.parm.frame.frm_base_id,
                                fmr_index);
-                       DCAM_TRACE("SPRD_IMG: read, %d %d %d \n", node.index, path->frm_id_base, node.index-path->frm_id_base);
-                       if (sprd_img_check_frame_timestamp(path->frm_ptr[node.index-path->frm_id_base], dev, &time)) {
-                               read_op.evt = IMG_CANCELED_BUF;
-                               ret = DCAM_RTN_SUCCESS;
-                               goto read_end;
+                       if (path != NULL) {
+                               DCAM_TRACE("SPRD_IMG: read, %d %d %d \n", node.index, path->frm_id_base, node.index-path->frm_id_base);
+                               if (sprd_img_check_frame_timestamp(dev, &time)) {
+                                       read_op.evt = IMG_CANCELED_BUF;
+                                       ret = DCAM_RTN_SUCCESS;
+                                       goto read_end;
+                               }
                        }
                } else {
                        if (IMG_TIMEOUT == read_op.evt ||
@@ -3745,7 +3747,7 @@ int sprd_img_probe(struct platform_device *pdev)
 {
        int ret = 0;
 
-       printk(KERN_ALERT "sprd_img_probe called\n");
+       DCAM_TRACE(KERN_ALERT "sprd_img_probe called\n");
 
        ret = misc_register(&image_dev);
        if (ret) {
index c71a051..a850c49 100755 (executable)
@@ -33,7 +33,7 @@
 #define LOCAL static
 /*#define LOCAL*/
 
-#define DCAM_DRV_DEBUG
+//#define DCAM_DRV_DEBUG
 #define DCAM_LOWEST_ADDR                               0x800
 #define DCAM_ADDR_INVALID(addr)                       ((uint32_t)(addr) < DCAM_LOWEST_ADDR)
 #define DCAM_YUV_ADDR_INVALID(y,u,v) \
@@ -650,10 +650,10 @@ int32_t dcam_module_en(struct device_node *dn)
                atomic_set(&s_rotation_flag, 0);
                memset((void*)s_user_func, 0, sizeof(s_user_func));
                memset((void*)s_user_data, 0, sizeof(s_user_data));
-               printk("DCAM: register isr, 0x%x \n", REG_RD(DCAM_INT_MASK));
+               DCAM_TRACE("DCAM: register isr, 0x%x \n", REG_RD(DCAM_INT_MASK));
 
                irq_no = parse_irq(dn);
-               printk("DCAM: irq_no = 0x%x \n", irq_no);
+               DCAM_TRACE("DCAM: irq_no = 0x%x \n", irq_no);
                ret = request_irq(irq_no,
                                _dcam_isr_root,
                                IRQF_SHARED,
@@ -694,11 +694,12 @@ int32_t dcam_module_dis(struct device_node *dn)
 
                sci_glb_clr(DCAM_EB, DCAM_EB_BIT);
                dcam_set_clk(dn,DCAM_CLK_NONE);
-               printk("DCAM: un register isr \n");
+               DCAM_TRACE("DCAM: un register isr \n");
                irq_no = parse_irq(dn);
                free_irq(irq_no, (void*)&s_dcam_irq);
                ret = clk_mm_i_eb(dn,0);
                if (ret) {
+                       printk("DCAM: un register isr err\n");
                        rtn = -DCAM_RTN_MAX;
                }
                wake_unlock(&dcam_wakelock);
@@ -817,7 +818,7 @@ int32_t dcam_set_clk(struct device_node *dn, enum dcam_clk_sel clk_sel)
                parent = "clk_76p8m";
                break;
        case DCAM_CLK_NONE:
-               printk("DCAM close CLK %d \n", (int)clk_get_rate(s_dcam_clk));
+               DCAM_TRACE("DCAM close CLK %d \n", (int)clk_get_rate(s_dcam_clk));
                if (s_dcam_clk) {
                        clk_disable(s_dcam_clk);
                        clk_put(s_dcam_clk);
@@ -882,7 +883,7 @@ int32_t dcam_update_path(enum dcam_path_index path_index, struct dcam_size *in_s
                DCAM_RTN_IF_ERR;
                rtn = dcam_path0_cfg(DCAM_PATH_OUTPUT_SIZE, out_size);
                DCAM_RTN_IF_ERR;
-               printk("DCAM: To update path0 \n");
+               DCAM_TRACE("DCAM: To update path0 \n");
                //_dcam_auto_copy(DCAM_PATH_IDX_0);
        }
 
@@ -1258,7 +1259,7 @@ int32_t dcam_stop(void)
        DCAM_CHECK_ZERO(s_p_dcam_mod);
 
        s_p_dcam_mod->state |= DCAM_STATE_QUICKQUIT;
-       printk("DCAM dcam_stop In \n");
+       DCAM_TRACE("DCAM dcam_stop In \n");
        if (atomic_read(&s_resize_flag)) {
                s_p_dcam_mod->wait_resize_done = 1;
                rtn = down_timeout(&s_p_dcam_mod->resize_done_sema, DCAM_PATH_TIMEOUT);
@@ -1269,7 +1270,7 @@ int32_t dcam_stop(void)
        }
 
        mutex_lock(&dcam_sem);
-       printk("DCAM dcam_stop get  dcam_sem\n");
+       DCAM_TRACE("DCAM dcam_stop get  dcam_sem\n");
        spin_lock_irqsave(&dcam_lock, flag);
 
        dcam_glb_reg_owr(DCAM_INT_MASK,
@@ -1943,10 +1944,11 @@ int32_t dcam_path0_cfg(enum dcam_cfg_id id, void *param)
                DCAM_CHECK_PARAM_ZERO_POINTER(param);
                if (rot_mode >= DCAM_PATH_FRAME_ROT_MAX) {
                        rtn = DCAM_RTN_PATH_FRM_DECI_ERR;
+                       printk("rot mode ret err =%d\n", rtn);
                }else{
                        path->rot_mode = rot_mode;
                        path->valid_param.rot_mode = 1;
-                       printk("zcf dcam_path0_cfg rot: = %d\n",path->rot_mode);
+                       DCAM_TRACE("zcf dcam_path0_cfg rot: = %d\n",path->rot_mode);
                }
                break;
        }
@@ -2199,10 +2201,11 @@ int32_t dcam_path1_cfg(enum dcam_cfg_id id, void *param)
                DCAM_CHECK_PARAM_ZERO_POINTER(param);
                if (rot_mode >= DCAM_PATH_FRAME_ROT_MAX) {
                        rtn = DCAM_RTN_PATH_FRM_DECI_ERR;
+                       printk("zcf dcam_path1_cfg rot: err ret =%d\n", rtn);
                }else{
                        path->rot_mode = rot_mode;
                        path->valid_param.rot_mode = 1;
-                       printk("zcf dcam_path1_cfg rot:\n",path->rot_mode);
+                       DCAM_TRACE("zcf dcam_path1_cfg rot:\n",path->rot_mode);
                }
                break;
        }
@@ -2459,10 +2462,11 @@ int32_t dcam_path2_cfg(enum dcam_cfg_id id, void *param)
                DCAM_CHECK_PARAM_ZERO_POINTER(param);
                if (rot_mode >= DCAM_PATH_FRAME_ROT_MAX) {
                        rtn = DCAM_RTN_PATH_FRM_DECI_ERR;
+                       printk("zcf dcam_path2_cfg rot err ret=%d:\n", rtn);
                }else{
                        path->rot_mode = rot_mode;
                        path->valid_param.rot_mode = 1;
-                       printk("zcf dcam_path2_cfg rot:\n",path->rot_mode);
+                       DCAM_TRACE("zcf dcam_path2_cfg rot:\n",path->rot_mode);
                }
                break;
        }
@@ -2478,7 +2482,7 @@ int32_t    dcam_get_resizer(uint32_t wait_opt)
 {
        int32_t                 rtn = 0;
 
-       printk("resizer_get:%d\n",current->pid);
+       DCAM_TRACE("resizer_get:%d\n",current->pid);
 
        
        if( 0 == wait_opt) {
@@ -2494,7 +2498,7 @@ int32_t    dcam_get_resizer(uint32_t wait_opt)
 
 int32_t    dcam_rel_resizer(void)
 {
-       printk("resizer_put:%d\n",current->pid);
+       DCAM_TRACE("resizer_put:%d\n",current->pid);
        mutex_unlock(&dcam_sem);
        return 0;
 }
@@ -2656,7 +2660,7 @@ int32_t    dcam_get_path_id(struct dcam_get_path_id *path_id, uint32_t *channel_
                return -1;
        }
 
-       printk("DCAM: fourcc 0x%x, input w %d, h %d output w %d, h %d input_trim %d %d %d %d shrink %d need_isp %d id:%d\n", path_id->fourcc,
+       DCAM_TRACE("DCAM: fourcc 0x%x, input w %d, h %d output w %d, h %d input_trim %d %d %d %d shrink %d need_isp %d id:%d\n", path_id->fourcc,
                path_id->input_size.w, path_id->input_size.h,
                path_id->output_size.w, path_id->output_size.h,
                path_id->input_trim.x, path_id->input_trim.y, path_id->input_trim.w, path_id->input_trim.h,
@@ -2833,9 +2837,9 @@ LOCAL void _dcam_path0_set(void)
 
                if(path->valid_param.rot_mode) {
                        path->valid_param.rot_mode = 0;
-                       printk("zcf dcam_path2_set  rot_mod :%d reg:%x\n",path->rot_mode,REG_RD(DCAM_PATH2_CFG));
+                       DCAM_TRACE("zcf dcam_path2_set  rot_mod :%d reg:%x\n",path->rot_mode,REG_RD(DCAM_PATH2_CFG));
                        REG_MWR(DCAM_PATH2_CFG, BIT_10 | BIT_9, path->rot_mode << 9);
-                       printk("zcf dcam_path2_set  rot_mod :%d reg:%x\n",path->rot_mode,REG_RD(DCAM_PATH2_CFG));               
+                       DCAM_TRACE("zcf dcam_path2_set  rot_mod :%d reg:%x\n",path->rot_mode,REG_RD(DCAM_PATH2_CFG));
                }
 
                dcam_glb_reg_mwr(DCAM_ENDIAN_SEL, BIT_18, BIT_18, DCAM_ENDIAN_REG); // axi write
@@ -2929,15 +2933,15 @@ LOCAL void _dcam_path1_set(struct dcam_path_desc *path)
 
        if(path->valid_param.rot_mode){
                path->valid_param.rot_mode = 0;
-               printk("zcf dcam_path1_set 1 rot_mod :%d reg:%x\n",path->rot_mode,REG_RD(DCAM_PATH1_CFG));
+               DCAM_TRACE("zcf dcam_path1_set 1 rot_mod :%d reg:%x\n",path->rot_mode,REG_RD(DCAM_PATH1_CFG));
                REG_MWR(DCAM_PATH1_CFG, BIT_10 | BIT_9, path->rot_mode << 9);
-               printk("zcf dcam_path1_set 1 rot_mod :%d reg:%x\n",path->rot_mode,REG_RD(DCAM_PATH1_CFG));
+               DCAM_TRACE("zcf dcam_path1_set 1 rot_mod :%d reg:%x\n",path->rot_mode,REG_RD(DCAM_PATH1_CFG));
        }
 
        if (path->valid_param.shrink) {
                path->valid_param.shrink = 0;
                REG_MWR(DCAM_PATH1_CFG, BIT_25 | BIT_26, path->shrink << 25);
-               printk("DCAM: path 1: shrink, %d \n", path->shrink);
+               DCAM_TRACE("DCAM: path 1: shrink, %d \n", path->shrink);
        }
 
 }
@@ -3029,15 +3033,15 @@ LOCAL void _dcam_path2_set(void)
 
        if (path->valid_param.rot_mode){
                path->valid_param.rot_mode = 0;
-               printk("zcf dcam_path2_set  rot_mod :%d reg:%x\n",path->rot_mode,REG_RD(DCAM_PATH2_CFG));
+               DCAM_TRACE("zcf dcam_path2_set  rot_mod :%d reg:%x\n",path->rot_mode,REG_RD(DCAM_PATH2_CFG));
                REG_MWR(DCAM_PATH2_CFG, BIT_10 | BIT_9, path->rot_mode << 9);
-               printk("zcf dcam_path2_set  rot_mod :%d reg:%x\n",path->rot_mode,REG_RD(DCAM_PATH2_CFG));
+               DCAM_TRACE("zcf dcam_path2_set  rot_mod :%d reg:%x\n",path->rot_mode,REG_RD(DCAM_PATH2_CFG));
        }
 
        if (path->valid_param.shrink) {
                path->valid_param.shrink = 0;
                REG_MWR(DCAM_PATH2_CFG, BIT_25 | BIT_26, path->shrink << 25);
-               printk("DCAM: path 2: shrink, %d \n", path->shrink);
+               DCAM_TRACE("DCAM: path 2: shrink, %d \n", path->shrink);
        }
 
 }
@@ -3338,19 +3342,24 @@ LOCAL int32_t _dcam_path_set_next_frm(enum dcam_path_index path_index, uint32_t
        }
 
        DCAM_TRACE("DCAM: next %d y 0x%x uv 0x%x \n", path->output_frame_count, frame.yaddr, frame.uaddr);
-       REG_WR(yuv_reg[0], frame.yaddr);
-       if (((DCAM_YUV400 > path->output_format) && (DCAM_PATH_IDX_0 != path_index)) ||
-                       ((DCAM_OUTPUT_YUV420 == path->output_format) && (DCAM_PATH_IDX_0 == path_index))) {
-               REG_WR(yuv_reg[1], frame.uaddr);
-               if (DCAM_YUV420_3FRAME == path->output_format) {
-                       REG_WR(yuv_reg[2], frame.vaddr);
-               }
-       }
-       dcam_frame_lock(&frame);
-       if (0 == _dcam_frame_enqueue(p_heap, &frame)) {
+       if (frame.yaddr == 0x0 || frame.uaddr == 0x0) {
+               printk("DCAM: error addr y 0x%x uv 0x%x\n", frame.yaddr, frame.uaddr);
+               rtn = DCAM_RTN_PATH_NO_MEM;
        } else {
-               dcam_frame_unlock(&frame);
-               rtn = DCAM_RTN_PATH_FRAME_LOCKED;
+               REG_WR(yuv_reg[0], frame.yaddr);
+               if (((DCAM_YUV400 > path->output_format) && (DCAM_PATH_IDX_0 != path_index)) ||
+                               ((DCAM_OUTPUT_YUV420 == path->output_format) && (DCAM_PATH_IDX_0 == path_index))) {
+                       REG_WR(yuv_reg[1], frame.uaddr);
+                       if (DCAM_YUV420_3FRAME == path->output_format) {
+                               REG_WR(yuv_reg[2], frame.vaddr);
+                       }
+               }
+               dcam_frame_lock(&frame);
+               if (0 == _dcam_frame_enqueue(p_heap, &frame)) {
+               } else {
+                       dcam_frame_unlock(&frame);
+                       rtn = DCAM_RTN_PATH_FRAME_LOCKED;
+               }
        }
 
        return -rtn;
@@ -4344,9 +4353,10 @@ LOCAL void    _dcam_path2_sof(void)
        DCAM_TRACE("DCAM: 2 sof done \n");
 
        if (atomic_read(&s_resize_flag)) {
-               printk("DCAM: path 2  sof, review now \n");
+               DCAM_TRACE("DCAM: path 2  sof, review now \n");
        } else {
                if (DCAM_ADDR_INVALID(s_p_dcam_mod)) {
+                       printk("DCAM: path 2  sof, invalid address\n");
                        return;
                }
 
@@ -4460,7 +4470,7 @@ LOCAL void _dcam_internal_deinit(void)
 
        spin_lock_irqsave(&dcam_mod_lock, flag);
        if (DCAM_ADDR_INVALID(s_p_dcam_mod)) {
-               printk("DCAM: Invalid addr, 0x%x", (uint32_t)s_p_dcam_mod);
+               printk("DCAM: Invalid addr, 0x%x\n", (uint32_t)s_p_dcam_mod);
        } else {
                vfree(s_p_dcam_mod);
                s_p_dcam_mod = NULL;
old mode 100644 (file)
new mode 100755 (executable)
index 94f1f2c..bf7bf01
@@ -491,7 +491,7 @@ static int32_t isp_k_2d_lsc_transaddr(struct isp_io_param *param,
 
        isp_private->lsc_buf_phys_addr = lsc_addr.phys_addr;
 
-       printk("lsc phys addr 0x%x,\n",isp_private->lsc_buf_phys_addr);
+       /* printk("lsc phys addr 0x%x,\n",isp_private->lsc_buf_phys_addr); */
        return ret;
 }
 
index 6f7c5e3..6f6c5b1 100644 (file)
@@ -373,7 +373,7 @@ static int32_t isp_set_clk(struct isp_k_file *file, enum isp_clk_sel clk_sel)
                parent = "clk_76p8m";
                break;
        case ISP_CLK_NONE:
-               printk("isp_set_clk: close clock %d\n", (int)clk_get_rate(isp_private->clock));
+               /* printk("isp_set_clk: close clock %d\n", (int)clk_get_rate(isp_private->clock)); */
                if (isp_private->clock) {
                        clk_disable(isp_private->clock);
                        clk_put(isp_private->clock);
index ac91f34..aa201df 100644 (file)
@@ -302,7 +302,7 @@ int rot_k_probe(struct platform_device *pdev)
        struct rot_k_private *rot_private;
        struct device *dev = NULL;
 
-       printk(KERN_ALERT "rot_k_probe called\n");
+       ROTATE_TRACE(KERN_ALERT "rot_k_probe called\n");
 
        rot_private = devm_kzalloc(&pdev->dev, sizeof(*rot_private), GFP_KERNEL);
        if (!rot_private) {
index 0fa976a..149d6d2 100644 (file)
@@ -46,7 +46,7 @@ static void scale_k_irq(void *fd)
                return;
        }
 
-       printk("sc done.\n");
+       SCALE_TRACE("sc done.\n");
 
        up(&scale_file->scale_done_sem);
 }
index d12082d..6d29ab9 100644 (file)
@@ -733,7 +733,7 @@ int scale_k_isr(struct dcam_frame* dcam_frm, void* u_data)
        }
        if (SCALE_MODE_NORMAL == path_info_ptr->scale_mode ||
                (SCALE_MODE_NORMAL != path_info_ptr->scale_mode && path_info_ptr->output_size.h == path_info_ptr->slice_out_height)) {
-               printk("begin to dcam_resize_end\n");
+               SCALE_TRACE("begin to dcam_resize_end\n");
                dcam_resize_end();
        }
        user_isr_func(private->scale_fd);
index 6a82b72..a171726 100644 (file)
@@ -201,8 +201,6 @@ int sensor_power_on(uint32_t *fd_handle, uint32_t sensor_id, struct sensor_power
 {
        int ret = 0;
 
-       pr_info("%s: system_rev = %d\n", __func__, system_rev);
-
        if (SENSOR_DEV_0 == sensor_id) {
                ret = sensor_s5k4h5yc_poweron(fd_handle, dev0, dev1, dev2);
        } else if (SENSOR_DEV_1 == sensor_id) {
old mode 100644 (file)
new mode 100755 (executable)
index 938beb5..58715da
@@ -278,7 +278,7 @@ int sensor_k_set_pd_level(uint32_t *fd_handle, uint8_t power_level)
 
 #ifndef        CONFIG_SC_FPGA_PIN
        get_gpio_id(p_mod->of_node, &fd->gpio_tab.pwn, &fd->gpio_tab.reset, fd->sensor_id);
-       SENSOR_PRINT_HIGH("SENSOR: pwn=%d level=%d \n", fd->gpio_tab.pwn, power_level);
+       SENSOR_PRINT("SENSOR: pwn=%d level=%d \n", fd->gpio_tab.pwn, power_level);
        if (0 == power_level) {
                gpio_direction_output(fd->gpio_tab.pwn, 0);
        } else {
@@ -321,7 +321,7 @@ LOCAL int _sensor_regulator_enable(struct sensor_file_tag *fd_handle, uint32_t *
        err = regulator_enable(ptr_cam_regulator);
        (*power_on_count)++;
 
-       SENSOR_PRINT_HIGH("sensor pwr on done: cnt=0x%x, io=%x, av=%x, dv=%x, mo=%x \n", *power_on_count,
+       SENSOR_PRINT("sensor pwr on done: cnt=0x%x, io=%x, av=%x, dv=%x, mo=%x \n", *power_on_count,
                fd_handle->iopower_on_count,
                fd_handle->avddpower_on_count,
                fd_handle->dvddpower_on_count,
@@ -462,7 +462,7 @@ LOCAL int _sensor_k_set_voltage(struct sensor_file_tag *fd_handle, uint32_t val,
                SENSOR_PRINT("SENSOR:dis regu.\n");
        }
 
-       SENSOR_PRINT_HIGH("SENSOR:set vol %d %s %d!.\n", volt_value, regu_name, type);
+       SENSOR_PRINT("SENSOR:set vol %d %s %d!.\n", volt_value, regu_name, type);
 
        return ret;
 #endif
@@ -493,7 +493,7 @@ int sensor_k_set_voltage_dvdd(uint32_t *fd_handle, uint32_t dvdd_val)
 
        get_gpio_id_ex(p_mod->of_node, GPIO_CAMDVDD, &gpio_id, fd->sensor_id);
        if ((SENSOR_DEV_0 == fd->sensor_id) && (0 != gpio_id)) {
-               SENSOR_PRINT_HIGH("sensor set DVDD gpio=%d, level=%d\n", gpio_id, dvdd_val);
+               SENSOR_PRINT("sensor set DVDD gpio=%d, level=%d\n", gpio_id, dvdd_val);
                if (SENSOR_VDD_CLOSED == dvdd_val) {
                        gpio_direction_output(gpio_id, 1);
                        gpio_set_value(gpio_id, 0);
@@ -505,7 +505,7 @@ int sensor_k_set_voltage_dvdd(uint32_t *fd_handle, uint32_t dvdd_val)
        }
 
        if ((SENSOR_DEV_1 == fd->sensor_id) && (0 != gpio_id)) {
-               SENSOR_PRINT_HIGH("sensor set DVDD gpio %d\n", gpio_id);
+               SENSOR_PRINT("sensor set DVDD gpio %d\n", gpio_id);
                if (SENSOR_VDD_CLOSED == dvdd_val) {
                        gpio_direction_output(gpio_id, 1);
                        gpio_set_value(gpio_id, 0);
@@ -535,7 +535,7 @@ int sensor_k_set_voltage_iovdd(uint32_t *fd_handle, uint32_t iodd_val)
 
        get_gpio_id_ex(p_mod->of_node, GPIO_CAMIOVDD, &gpio_id, fd->sensor_id);
        if (SENSOR_DEV_0 == fd->sensor_id && 0 != gpio_id) {
-               SENSOR_PRINT_HIGH("sensor set IOVDD gpio %d\n", gpio_id);
+               SENSOR_PRINT("sensor set IOVDD gpio %d\n", gpio_id);
                if (SENSOR_VDD_CLOSED == iodd_val) {
                        gpio_direction_output(gpio_id, 1);
                        gpio_set_value(gpio_id, 0);
@@ -547,7 +547,7 @@ int sensor_k_set_voltage_iovdd(uint32_t *fd_handle, uint32_t iodd_val)
        }
 
        if (SENSOR_DEV_1 == fd->sensor_id && 0 != gpio_id) {
-               SENSOR_PRINT_HIGH("sensor set IOVDD gpio %d\n", gpio_id);
+               SENSOR_PRINT("sensor set IOVDD gpio %d\n", gpio_id);
                if (SENSOR_VDD_CLOSED == iodd_val) {
                        gpio_direction_output(gpio_id, 1);
                        gpio_set_value(gpio_id, 0);
@@ -661,7 +661,7 @@ LOCAL int _sensor_k_set_mclk(struct sensor_file_tag *fd_handle, struct device_no
        uint8_t                   clk_div;
        SENSOR_CHECK_ZERO(fd_handle);
 
-       SENSOR_PRINT_HIGH("SENSOR: set mclk org = %d, clk = %d\n",
+       SENSOR_PRINT("SENSOR: set mclk org = %d, clk = %d\n",
                                fd_handle->sensor_mclk, mclk);
 
        if ((0 != mclk) && (fd_handle->sensor_mclk != mclk)) {
@@ -755,7 +755,7 @@ LOCAL int _sensor_k_set_mclk(struct sensor_file_tag *fd_handle, struct device_no
        } else {
                SENSOR_PRINT("SENSOR: Do nothing !! ");
        }
-       SENSOR_PRINT_HIGH("SENSOR: set mclk X\n");
+       SENSOR_PRINT("SENSOR: set mclk X\n");
        return 0;
 #endif
 }
@@ -806,7 +806,7 @@ int sensor_k_sensor_sel(uint32_t *fd_handle, uint32_t sensor_id)
        SENSOR_CHECK_ZERO(fd);
        fd->sensor_id = sensor_id;
 
-       SENSOR_PRINT_HIGH("sensor id = %d\n", sensor_id);
+       SENSOR_PRINT("sensor id = %d\n", sensor_id);
 
        return SENSOR_K_SUCCESS;
 }
@@ -831,7 +831,7 @@ int sensor_k_set_rst_level(uint32_t *fd_handle, uint32_t plus_level)
        SENSOR_CHECK_ZERO(p_mod);
 
        get_gpio_id(p_mod->of_node, &fd->gpio_tab.pwn, &fd->gpio_tab.reset, fd->sensor_id);
-       SENSOR_PRINT_HIGH("SENSOR: set rst lvl: lvl %d, rst pin %d \n", plus_level, fd->gpio_tab.reset);
+       SENSOR_PRINT("SENSOR: set rst lvl: lvl %d, rst pin %d \n", plus_level, fd->gpio_tab.reset);
 
 #ifndef CONFIG_SC_FPGA_PIN
        gpio_direction_output(fd->gpio_tab.reset, plus_level);
@@ -1034,7 +1034,7 @@ LOCAL int _sensor_k_wr_regtab(struct sensor_file_tag *fd_handle, struct sensor_r
                goto _Sensor_K_WriteRegTab_return;
        }
 
-       SENSOR_PRINT_HIGH("_sensor_k_wr_regtab start: mode=%d, cnt=%d\n", pRegTab->burst_mode, cnt);
+       SENSOR_PRINT("_sensor_k_wr_regtab start: mode=%d, cnt=%d\n", pRegTab->burst_mode, cnt);
 
        sensor_reg_ptr = (struct sensor_reg_tag *)pBuff;
 
@@ -1077,13 +1077,13 @@ LOCAL int _sensor_k_set_i2c_clk(struct sensor_file_tag *fd_handle, uint32_t cloc
        if (NULL != p_mod->sensor_dev_tab[fd_handle->sensor_id].cur_i2c_client) {
                i2c_client = p_mod->sensor_dev_tab[fd_handle->sensor_id].cur_i2c_client;
                sprd_i2c_ctl_chg_clk(i2c_client->adapter->nr, clock);
-               printk("sensor set i2c id %d clk %d  \n", i2c_client->adapter->nr, clock);
+               SENSOR_PRINT("sensor set i2c id %d clk %d  \n", i2c_client->adapter->nr, clock);
        }
        if (NULL != p_mod->sensor_dev_tab[fd_handle->sensor_id].vcm_i2c_client
                && 0 == p_mod->sensor_dev_tab[fd_handle->sensor_id].vcm_gpio_i2c_flag) {
                i2c_client = p_mod->sensor_dev_tab[fd_handle->sensor_id].vcm_i2c_client;
                sprd_i2c_ctl_chg_clk(i2c_client->adapter->nr, clock);
-               printk("sensor set i2c id %d clk %d  \n", i2c_client->adapter->nr, clock);
+               SENSOR_PRINT("sensor set i2c id %d clk %d  \n", i2c_client->adapter->nr, clock);
        }
        SENSOR_PRINT("sensor set i2c clk %d  \n", clock);
 
@@ -1281,9 +1281,9 @@ int _sensor_k_close_mipi(struct file *file)
                        csi_api_close(handle, p_file->phy_id);
                        _sensor_k_mipi_clk_dis(p_file);
                        p_file->mipi_on = 0;
-                       printk("MIPI off \n");
+                       SENSOR_PRINT("MIPI off \n");
                } else {
-                       printk("MIPI already off \n");
+                       SENSOR_PRINT("MIPI already off \n");
                }
 
        }
@@ -1847,9 +1847,9 @@ LOCAL long sensor_k_ioctl(struct file *file, unsigned int cmd,
                                                        p_file->mipi_on = 1;
                                                        p_file->phy_id = if_cfg.phy_id;
                                                        p_file->if_type = INTERFACE_MIPI;
-                                                       printk("MIPI on, lane %d, bps_per_lane %d, wait 10us \n", if_cfg.lane_num, if_cfg.bps_per_lane);
+                                                       SENSOR_PRINT("MIPI on, lane %d, bps_per_lane %d, wait 10us \n", if_cfg.lane_num, if_cfg.bps_per_lane);
                                                } else {
-                                                       printk("MIPI already on \n");
+                                                       SENSOR_PRINT("MIPI already on \n");
                                                }
                                        }
                                } else {
@@ -1858,9 +1858,9 @@ LOCAL long sensor_k_ioctl(struct file *file, unsigned int cmd,
                                                        csi_api_close(csi_handle, if_cfg.phy_id);
                                                        _sensor_k_mipi_clk_dis(p_file);
                                                        p_file->mipi_on = 0;
-                                                       printk("MIPI off \n");
+                                                       SENSOR_PRINT("MIPI off \n");
                                                } else {
-                                                       printk("MIPI already off \n");
+                                                       SENSOR_PRINT("MIPI already off \n");
                                                }
 
                                        }
@@ -1891,7 +1891,7 @@ LOCAL long sensor_k_ioctl(struct file *file, unsigned int cmd,
                        SENSOR_OTP_PARAM_T *para = (SENSOR_OTP_PARAM_T *)arg;
                        uint32_t type;
                        copy_from_user(&type, &para->type, sizeof(uint32_t));
-                       printk("SENSOR: ioctl SENSOR_IO_READ_OTPDATA %p type %d\n", arg, para->type);
+                       SENSOR_PRINT("SENSOR: ioctl SENSOR_IO_READ_OTPDATA %p type %d\n", arg, para->type);
 
                        if(type == SENSOR_OTP_PARAM_CHECKSUM) {
                                SENSOR_OTP_DATA_INFO_T *chksum = &p_mod->otp_param[p_file->sensor_id].golden;
@@ -1956,7 +1956,7 @@ LOCAL int sensor_k_register_subdevs(struct platform_device *pdev)
 
        SENSOR_CHECK_ZERO(p_mod);
 
-       printk("sensor register sub device E\n");
+       SENSOR_PRINT("sensor register sub device E\n");
        for_each_compatible_node(adapter, NULL, "sprd,i2c") {
                if (!of_find_device_by_node(adapter)) {
                        of_node_put(adapter);
@@ -2036,7 +2036,7 @@ int sensor_k_probe(struct platform_device *pdev)
 #endif
        int                          gpio_id = 0;
 
-       printk(KERN_ALERT "sensor probe called\n");
+       SENSOR_PRINT(KERN_ALERT "sensor probe called\n");
        p_mod = (struct sensor_module_tab_tag *)vzalloc(sizeof(struct sensor_module_tab_tag));
        SENSOR_CHECK_ZERO(p_mod);
 
@@ -2083,7 +2083,7 @@ int sensor_k_probe(struct platform_device *pdev)
                printk("sensor: gpio already request GPIO_CAMDVDD %d.\n", gpio_id);
        }
        gpio_direction_output(gpio_id, 0);
-       printk("sensor: GPIO_CAMDVDD: %d \n", gpio_id);
+       SENSOR_PRINT("sensor: GPIO_CAMDVDD: %d \n", gpio_id);
 
        get_gpio_id_ex(p_mod->of_node, GPIO_CAMIOVDD, &gpio_id, 0);
        ret = gpio_request(gpio_id, NULL);
@@ -2092,7 +2092,7 @@ int sensor_k_probe(struct platform_device *pdev)
                printk("sensor: gpio already request GPIO_CAMDVDD %d.\n", gpio_id);
        }
        gpio_direction_output(gpio_id, 0);
-       printk("sensor: GPIO_CAMIOVDD: %d \n", gpio_id);
+       SENSOR_PRINT("sensor: GPIO_CAMIOVDD: %d \n", gpio_id);
 
        get_gpio_id_ex(p_mod->of_node, GPIO_CAMDVDD, &gpio_id, 1);
        ret = gpio_request(gpio_id, NULL);
@@ -2101,7 +2101,7 @@ int sensor_k_probe(struct platform_device *pdev)
                printk("sensor: gpio already request GPIO_CAMDVDD %d.\n", gpio_id);
        }
        gpio_direction_output(gpio_id, 0);
-       printk("sensor: GPIO_CAMDVDD: %d \n", gpio_id);
+       SENSOR_PRINT("sensor: GPIO_CAMDVDD: %d \n", gpio_id);
 #endif
 
 #if defined(CONFIG_MACH_GRANDPRIME3G_VE) || defined(CONFIG_MACH_Z3) // || defined(CONFIG_MACH_COREPRIMEVE3G)
index c21a4ae..ce3c82f 100755 (executable)
@@ -65,6 +65,12 @@ config MUIC_SUPPORT_RUSTPROOF
        help
         Close UART path in case of no battery to prevent rust on D+/D- line on IF connector
 
+config MUIC_SUPPORT_PS_CABLE
+        bool "SUPPORT Samsung Power Sharing Cable EP-SG900"
+        default n
+        help
+         If you say "YES", power sharing feature will be supported without OTG connector
+
 config MFD_AS3711
        bool "AMS AS3711"
        select MFD_CORE
old mode 100755 (executable)
new mode 100644 (file)
index 370e9c8..e024665
@@ -233,9 +233,9 @@ static const struct id_desc id_to_cable_type_mapping[] = {
         .cable_type_without_vbus = MUIC_SM5504_CABLE_TYPE_UNKNOWN,
         },
        {                       /* 10100, 20 */
-        .name = "AT&T TA/Unknown",
-        .cable_type_with_vbus = MUIC_SM5504_CABLE_TYPE_ATT_TA,
-        .cable_type_without_vbus = MUIC_SM5504_CABLE_TYPE_UNKNOWN,
+        .name = "Samsung Power Sharing Cable EP-SG900",
+        .cable_type_with_vbus = MUIC_SM5504_CABLE_TYPE_SAMSUNG_PS,
+        .cable_type_without_vbus = MUIC_SM5504_CABLE_TYPE_SAMSUNG_PS,
         },
        {                       /* 10101, 21 */
         .name = "ADC0x15 Charger/Unknown",
@@ -313,6 +313,9 @@ enum {
        UART_SHIFT,
        JIG_SHIFT,
        L_USB_SHIFT,
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+       SAMSUNG_PS_SHIFT,
+#endif
 };
 
 struct sm5504_status {
@@ -338,6 +341,9 @@ struct sm5504_status {
                        uint32_t uart_connect:1;
                        uint32_t jig_connect:1;
                        uint32_t l_usb_connect:1;
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+                       uint32_t samsung_ps_status:1;
+#endif
                };
                uint32_t status;
        };
@@ -628,6 +634,10 @@ static void sm5504_preprocess_status(sm5504_chip_t *chip)
              MUIC_SM5504_CABLE_TYPE_JIG_UART_ON_WITH_VBUS)) ? 1 : 0;
     chip->curr_status.l_usb_connect = (chip->curr_status.cable_type ==
              MUIC_SM5504_CABLE_TYPE_L_USB) ? 1 : 0;
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+       chip->curr_status.samsung_ps_status= (chip->curr_status.cable_type ==
+             MUIC_SM5504_CABLE_TYPE_SAMSUNG_PS) ? 1 : 0;
+#endif
 }
 
 #define FLAG_HIGH           (0x01)
@@ -645,6 +655,7 @@ static inline uint32_t state_check(unsigned int old_state,
        unsigned int ret = 0;
        old_state &= bit_mask;
        new_state &= bit_mask;
+
        if (new_state)
                ret |= FLAG_HIGH;
        else
@@ -744,6 +755,9 @@ static char *sm5504_cable_names[] = {
        "MUIC_SM5504_CABLE_TYPE_INVALID",
 
        "MUIC_SM5504_CABLE_TYPE_OTG_WITH_VBUS",
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+       "MUIC_SM5504_CABLE_TYPE_SAMSUNG_PS",
+#endif
 };
 #endif /*RTDBGINFO_LEVEL<=RTDBGLEVEL */
 
@@ -831,6 +845,7 @@ static void sm5504_otg_attach_handler(struct sm5504_chip *chip,
        };
 
        RTINFO("OTG attached\n");
+
        sm5504_reg_write(chip, SM5504_REG_MANUAL_SW1, 0x24);
        /* Disable USBCHDEN and AutoConfig*/
        sm5504_clr_bits(chip, SM5504_REG_CONTROL, (1 << 2) | (1 << 6));
@@ -853,6 +868,7 @@ static void sm5504_otg_detach_handler(struct sm5504_chip *chip,
        };
 
        RTINFO("OTG detached\n");
+
        sm5504_reg_write(chip, SM5504_REG_MANUAL_SW1, 0x00);
        /* Enable USBCHDEN and AutoConfig*/
        sm5504_set_bits(chip, SM5504_REG_CONTROL, (1 << 2) | (1 << 6));
@@ -864,6 +880,55 @@ static void sm5504_otg_detach_handler(struct sm5504_chip *chip,
                                        MUIC_OTG_DETACH_NOTI, &param);
 }
 
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+static void sm5504_ps_attach_handler(struct sm5504_chip *chip,
+                                     const struct sm5504_event_handler
+                                     *handler, unsigned int old_status,
+                                     unsigned int new_status)
+{
+       struct muic_notifier_param param = {
+               .vbus_status = 1,
+               .cable_type = chip->curr_status.cable_type,
+       };
+
+       RTINFO("PS_CABLE attached\n");
+
+       sm5504_reg_write(chip, SM5504_REG_MANUAL_SW1, 0x24);
+       /* Disable USBCHDEN and AutoConfig*/
+       sm5504_clr_bits(chip, SM5504_REG_CONTROL, (1 << 2) | (1 << 6));
+
+        if (chip->pdata->ps_cable_callback)
+                chip->pdata->ps_cable_callback(1);
+
+       atomic_notifier_call_chain(&muic_notifier_list,
+                                       MUIC_PS_ATTACH_NOTI, &param);
+
+}
+
+static void sm5504_ps_detach_handler(struct sm5504_chip *chip,
+                                     const struct sm5504_event_handler
+                                     *handler, unsigned int old_status,
+                                     unsigned int new_status)
+{
+       struct muic_notifier_param param = {
+               .vbus_status = 0,
+               .cable_type = chip->curr_status.cable_type,
+       };
+
+       RTINFO("PS_CABLE detached\n");
+
+       sm5504_reg_write(chip, SM5504_REG_MANUAL_SW1, 0x00);
+       /* Enable USBCHDEN and AutoConfig*/
+       sm5504_set_bits(chip, SM5504_REG_CONTROL, (1 << 2) | (1 << 6));
+
+        if (chip->pdata->ps_cable_callback)
+                chip->pdata->ps_cable_callback(0);
+
+       atomic_notifier_call_chain(&muic_notifier_list,
+                                       MUIC_PS_DETACH_NOTI, &param);
+}
+#endif
+
 static void sm5504_usb_attach_handler(struct sm5504_chip *chip,
                                      const struct sm5504_event_handler
                                      *handler, unsigned int old_status,
@@ -1114,6 +1179,20 @@ struct sm5504_event_handler normal_event_handlers[] = {
         .type = FLAG_HIGH,
         .handler = sm5504_cable_change_handler,
         },
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+       {
+        .name = "SAMSUNG PS attached",
+        .bit_mask = (1 << SAMSUNG_PS_SHIFT),
+        .type = FLAG_RISING,
+        .handler = sm5504_ps_attach_handler,
+        },
+       {
+        .name = "SAMSUNG PS detached",
+        .bit_mask = (1 << SAMSUNG_PS_SHIFT),
+        .type = FLAG_FALLING,
+        .handler = sm5504_ps_detach_handler,
+        },
+#endif
        {
         .name = "OTG attached",
         .bit_mask = (1 << OTG_SHIFT),
@@ -1667,6 +1746,9 @@ static int sm5504_probe(struct i2c_client *client,
        pdata->otg_callback  = switch_data.otg_cb;
        pdata->uart_callback = switch_data.set_jig_state_cb;
        pdata->cable_chg_callback = switch_data.cable_chg_cb;
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+       pdata->ps_cable_callback = switch_data.ps_cable_cb;
+#endif
 #endif
        if (pdata->init_callback)
                pdata->init_callback();
index 2298dc3..29d02ea 100755 (executable)
@@ -232,7 +232,7 @@ void gpio_timer_handler(unsigned long data)
        else
        {
                sleep_para.gpio_opt_tag = 0;
-               SDIOTRAN_ERR("gpio_opt_tag=0" );
+               SDIOTRAN_DEBUG("gpio_opt_tag=0" );
        }
 }
 
@@ -1055,8 +1055,6 @@ static void marlin_workq(void)
 
 static irqreturn_t marlin_irq_handler(int irq, void * para)
 {
-       disable_irq_nosync(irq);
-
        wake_lock(&marlin_wakelock);
        irq_set_irq_type(irq,IRQF_TRIGGER_RISING);
        marlin_sdio_req_cnt++;
@@ -1075,8 +1073,6 @@ static irqreturn_t marlin_irq_handler(int irq, void * para)
                sch_sdio_req_cnt++;
                schedule_work(&marlin_wq);
        }
-       enable_irq(irq);
-
        return IRQ_HANDLED;
 }
 
@@ -1224,7 +1220,6 @@ static irqreturn_t marlinwake_irq_handler(int irq, void * para)
 {
        struct timeval cur_time;
        uint32 gpio_wake_status = 0, usec;
-       disable_irq_nosync(irq);
        //irq_set_irq_type(irq,IRQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING);
        gpio_wake_status = gpio_get_value(sdio_data->wake_ack);
 
@@ -1239,7 +1234,6 @@ static irqreturn_t marlinwake_irq_handler(int irq, void * para)
                //if(usec < 200)    //means invalid gpio value, so discard
                {
                        SDIOTRAN_ERR("discard gpio%d irq", sdio_data->wake_ack);
-                       enable_irq(irq);
                        return IRQ_HANDLED;
                }
                //SDIOTRAN_ERR("gpio%d %d-->%d\n",sdio_data->wake_ack, gpio_wake_status, 1 - gpio_wake_status );
@@ -1300,8 +1294,6 @@ static irqreturn_t marlinwake_irq_handler(int irq, void * para)
                }
        }
 
-       enable_irq(irq);
-
        return IRQ_HANDLED;
 }
 
@@ -1504,7 +1496,7 @@ static void marlin_sdio_remove(struct sdio_func *func)
 static int marlin_sdio_suspend(struct device *dev)
 {
        unsigned long timeout;
-       SDIOTRAN_ERR("[%s]enter", __func__);
+       SDIOTRAN_DEBUG("[%s]enter", __func__);
 
        atomic_set(&g_mgr_suspend.in_sdio_suspend, 1);
        mutex_lock(&g_mgr_suspend.func_lock);
@@ -1698,7 +1690,7 @@ static int _marlin_gpio_init(void)
                return ret;
        }
 
-       SDIOTRAN_ERR("req GPIO_MARLIN_SDIO_READY = %d succ!!!",\
+       SDIOTRAN_DEBUG("req GPIO_MARLIN_SDIO_READY = %d succ!!!",\
                sdio_data->io_ready);
 
        return ret;
@@ -1708,7 +1700,7 @@ int marlin_sdio_init(void)
 {
        int ret;
 
-       SDIOTRAN_ERR("entry");
+       SDIOTRAN_DEBUG("entry");
        if(have_card == 1){
                marlin_sdio_uninit();
        }
index 827eb2e..8dcb442 100644 (file)
@@ -468,15 +468,15 @@ static void jpg_parse_dt(
 
 static int jpg_nocache_mmap(struct file *filp, struct vm_area_struct *vma)
 {
-    printk(KERN_INFO "@jpg[%s]\n", __FUNCTION__);
+    /* printk(KERN_INFO "@jpg[%s]\n", __FUNCTION__); */
     vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
     vma->vm_pgoff     = (sprd_jpg_phys>>PAGE_SHIFT);
     if (remap_pfn_range(vma,vma->vm_start, vma->vm_pgoff,
                         vma->vm_end - vma->vm_start, vma->vm_page_prot))
         return -EAGAIN;
-    printk(KERN_INFO "@jpg mmap %x,%x,%x\n", (unsigned int)PAGE_SHIFT,
+    /* printk(KERN_INFO "@jpg mmap %x,%x,%x\n", (unsigned int)PAGE_SHIFT,
            (unsigned int)vma->vm_start,
-           (unsigned int)(vma->vm_end - vma->vm_start));
+           (unsigned int)(vma->vm_end - vma->vm_start)); */
     return 0;
 }
 
@@ -566,9 +566,9 @@ by clk_get()!\n", "clk_jpg", name_parent);
         goto errout2;
     }
 
-    printk("jpg parent clock name %s\n", name_parent);
-    printk("jpg_freq %d Hz",
-           (int)clk_get_rate(jpg_hw_dev.jpg_clk));
+    /* printk("jpg parent clock name %s\n", name_parent); */
+    /* printk("jpg_freq %d Hz",
+           (int)clk_get_rate(jpg_hw_dev.jpg_clk)); */
 
 #if defined(CONFIG_SPRD_IOMMU)
     {
index 30d53db..6c50a2e 100755 (executable)
@@ -228,7 +228,7 @@ static long vsp_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
             clk_put(vsp_hw_dev.vsp_parent_clk);
             vsp_hw_dev.vsp_parent_clk = clk_parent;
         }
-        printk(KERN_INFO "VSP_CONFIG_FREQ %d\n", vsp_hw_dev.freq_div);
+        pr_debug(KERN_INFO "VSP_CONFIG_FREQ %d\n", vsp_hw_dev.freq_div);
         break;
     case VSP_GET_FREQ:
         frequency = clk_get_rate(vsp_hw_dev.vsp_clk);
@@ -515,7 +515,7 @@ static int vsp_parse_dt(struct device *dev)
     printk(KERN_INFO "vsp: irq = 0x%x, version = 0x%0x\n", vsp_hw_dev.irq, vsp_hw_dev.version);
 
     vsp_clk_node_name = of_clk_get_parent_name(np, 1); //This position is based on related dts file
-    printk(KERN_INFO "vsp_node_name = %d\n", vsp_clk_node_name);
+    printk(KERN_INFO "vsp_node_name = %s\n", vsp_clk_node_name);
 
     vsp_clk_np = of_find_node_by_name(NULL, vsp_clk_node_name);
     if (!vsp_clk_np) {
index 3417b8d..e13c964 100644 (file)
@@ -825,6 +825,8 @@ static int wlan_cfg80211_scan(struct wiphy *wiphy,
        } else {
                printkd("%s request->ie_len is 0\n", __func__);
        }
+
+       vif->cfg80211.hidden_ssid_scan = false;
        n = min(request->n_ssids, 9);
        if (n) {
                data = kzalloc(512, GFP_KERNEL);
@@ -845,6 +847,8 @@ static int wlan_cfg80211_scan(struct wiphy *wiphy,
                        scan_ssids = (struct wlan_cmd_scan_ssid *)
                            (data + scan_ssids_len);
                }
+
+               vif->cfg80211.hidden_ssid_scan = true;
        }
 
        n = min(request->n_channels, 14);
@@ -1730,7 +1734,7 @@ void cfg80211_report_disconnect_done(unsigned char vif_id, unsigned char *pData,
 static void wlan_scan_timeout(unsigned long data)
 {
        wlan_vif_t *vif = (wlan_vif_t *) data;
-
+       vif->cfg80211.hidden_ssid_scan = false;
        printkd("%s()\n", __func__);
        if (vif->cfg80211.scan_request
            && (atomic_add_unless(&vif->cfg80211.scan_status, 1, 1) == 1)) {
@@ -1936,6 +1940,12 @@ void cfg80211_report_scan_frame(unsigned char vif_id, unsigned char *pData,
                   __LINE__);
                   return;
                   } */
+               if (vif->cfg80211.hidden_ssid_scan && (0 == strlen(ssid))) {
+                       printkd("SSID len is 0\n");
+                       return;
+               }
+
+
                if (1024 < event->frame_len) {
                        printkd("[%s %d][line %d err]\n", __func__, vif_id,
                                __LINE__);
@@ -2033,7 +2043,7 @@ void cfg80211_report_scan_frame(unsigned char vif_id, unsigned char *pData,
                    offsetof(struct ieee80211_mgmt, u.probe_resp.variable);
                signal = scan_buf->signal;
                signal = signal * 100;
-               wiphy_info(wiphy, "   %s, " MACSTR ", channel %2u, signal %d\n",
+               wiphy_dbg(wiphy, "   %s, " MACSTR ", channel %2u, signal %d\n",
                           ieee80211_is_probe_resp(mgmt->frame_control)
                           ? "proberesp" : "beacon   ",
                           MAC2STR(mgmt->bssid), scan_buf->channel,
@@ -2074,6 +2084,7 @@ void cfg80211_report_scan_frame(unsigned char vif_id, unsigned char *pData,
        del_timer_sync(&vif->cfg80211.scan_timeout);
        cfg80211_scan_done(vif->cfg80211.scan_request, false);
        vif->cfg80211.scan_request = NULL;
+       vif->cfg80211.hidden_ssid_scan = false;
 #ifdef CONFIG_HAS_WAKELOCK
        if (vif->cfg80211.scan_done_lock.link.next != LIST_POISON1
            && vif->cfg80211.scan_done_lock.link.prev != LIST_POISON2)
index ba3c1fa..3711310 100644 (file)
@@ -210,6 +210,7 @@ typedef struct {
        unsigned char *scan_frame_array;
        int p2p_mode;
        register_frame_param_t register_frame;
+       int hidden_ssid_scan;
 } wlan_cfg80211_t;
 
 /* Best not to use the work to send deauth cmd
old mode 100755 (executable)
new mode 100644 (file)
index 14d88f9..1dc6ce7
@@ -401,6 +401,10 @@ config SEC_WATCHDOG_PET_TIME
        int "sec watchdog kicking time interval value"
        default 5
 endif
+
+config SEC_DEBUG_REG_ACCESS
+       bool "Samsung reg access debugging"
+       default n
 endif
 
 config SEC_LOG
@@ -412,7 +416,7 @@ config SEC_LOG
          log buffer for both bootloader and kernel. It also preserves
          previous content before reboot.
 
-config SEC_LOG_NONCACHED
+config SEC_LOG_BUF_NOCACHE
        default n
        bool "Enable non cached kernel sec_log support" if EMBEDDED
        depends on SEC_LOG
index 8a11200..711ee5e 100644 (file)
@@ -70,7 +70,23 @@ ENTRY(sci_shark_enter_lowpower)
        nop
        nop
 
+2:     wfi
        wfi
+       wfi
+       wfi
+       wfi
+       wfi
+       wfi
+       wfi
+       wfi
+       wfi
+       wfi
+       wfi
+       wfi
+       wfi
+       wfi
+       wfi
+       b 2b
 
        nop
        nop
@@ -79,6 +95,6 @@ ENTRY(sci_shark_enter_lowpower)
        nop
        nop
        nop
-
+1:     b 1b
        ldmfd   sp!, {r4-r12, pc}
 ENDPROC(sci_shark_enter_lowpower)
index 2541b1c..a887a0c 100644 (file)
@@ -112,7 +112,9 @@ int sprd_cpu_kill(unsigned int cpu)
 #ifdef CONFIG_ARCH_SCX35
        int i = 0;
        pr_debug("!! %d  platform_cpu_kill %d !!\n", smp_processor_id(), cpu);
-       while (i < 20) {
+
+       while (i < 40) {
+               printk("!!zcf %d  platform_cpu_kill %d !! reg:%x i:%d\n", smp_processor_id(), cpu, sci_glb_read(REG_AP_AHB_CA7_STANDBY_STATUS, -1UL), i);
                //check wfi?
                if (sci_glb_read(REG_AP_AHB_CA7_STANDBY_STATUS, -1UL) & (1 << cpu_logical_map(cpu)))
                {
@@ -122,8 +124,12 @@ int sprd_cpu_kill(unsigned int cpu)
                udelay(100);
                i++;
        }
-       pr_debug("platform_cpu_kill finished i=%d !!\n", i);
-       return (i >= 20? 0 : 1);
+
+       if (i >= 40)
+               powerdown_cpus(cpu);
+
+       printk("zcf platform_cpu_kill finished i=%d !!\n", i);
+       return (i >= 40? 0 : 1);
 #endif
        return 1;
 }
@@ -136,6 +142,7 @@ int sprd_cpu_kill(unsigned int cpu)
 void __cpuinit sprd_cpu_die(unsigned int cpu)
 {
        int spurious = 0;
+       printk("zcf sprd_cpu_die \n");
 
 #ifdef CONFIG_ARCH_SCX35
        sci_shark_enter_lowpower();
index 1c3d0bd..8a7a1ef 100755 (executable)
@@ -112,10 +112,10 @@ static struct sci_pin_switch bt_iis_sys_sel_array[] = {
 };
 
 static struct sci_pin_switch iis_0_array[] = {
-       {"iis0_sys_sel", "ap_iis0", 0xc, 6, 2, 0},
-       {"iis0_sys_sel", "cp0_iis0", 0xc, 6, 2, 1},
-       {"iis0_sys_sel", "cp1_iis0", 0xc, 6, 2, 2},
-       {"iis0_sys_sel", "cp2_iis0", 0xc, 6, 2, 3},
+       {"iis0_sys_sel", "ap_iis0", 0xc, 6, 3, 0},
+       {"iis0_sys_sel", "cp0_iis0", 0xc, 6, 3, 1},
+       {"iis0_sys_sel", "cp1_iis0", 0xc, 6, 3, 2},
+       {"iis0_sys_sel", "cp2_iis0", 0xc, 6, 3, 3},
        {"iis0_sys_sel", "vbc_iis0", 0xc, 6, 3, 4},
 };
 
index 7be0dbb..726127c 100644 (file)
@@ -769,13 +769,13 @@ static void bak_restore_ap_intc(int bak)
 void show_pin_reg(void)
 {
        sci_glb_set(SPRD_INT_BASE + 0x8, BIT(14) | BIT(4)); //ana & eic
-       printk("REG_PIN_XTLEN   0x%08x\n", sci_glb_read(REG_PIN_XTLEN, -1UL));
-       printk("REG_PIN_XTL_BUF_EN0   0x%08x\n", sci_glb_read(REG_PIN_XTL_BUF_EN0, -1UL));
-       printk("REG_PIN_XTL_BUF_EN1   0x%08x\n", sci_glb_read(REG_PIN_XTL_BUF_EN1, -1UL));
-       printk("REG_PIN_XTL_BUF_EN2   0x%08x\n", sci_glb_read(REG_PIN_XTL_BUF_EN2, -1UL));
-       printk("REG_PIN_CHIP_SLEEP    0x%08x\n", sci_glb_read(REG_PIN_CHIP_SLEEP, -1UL));
-       printk("### uart1 ckd 0x%08x\n", sci_glb_read(SPRD_UART1_BASE + 0X24, -1UL));
-       printk("### uart1 ctl 0x%08x\n", sci_glb_read(SPRD_UART1_BASE + 0X18, -1UL));
+       pr_debug("REG_PIN_XTLEN   0x%08x\n", sci_glb_read(REG_PIN_XTLEN, -1UL));
+       pr_debug("REG_PIN_XTL_BUF_EN0   0x%08x\n", sci_glb_read(REG_PIN_XTL_BUF_EN0, -1UL));
+       pr_debug("REG_PIN_XTL_BUF_EN1   0x%08x\n", sci_glb_read(REG_PIN_XTL_BUF_EN1, -1UL));
+       pr_debug("REG_PIN_XTL_BUF_EN2   0x%08x\n", sci_glb_read(REG_PIN_XTL_BUF_EN2, -1UL));
+       pr_debug("REG_PIN_CHIP_SLEEP    0x%08x\n", sci_glb_read(REG_PIN_CHIP_SLEEP, -1UL));
+       pr_debug("### uart1 ckd 0x%08x\n", sci_glb_read(SPRD_UART1_BASE + 0X24, -1UL));
+       pr_debug("### uart1 ctl 0x%08x\n", sci_glb_read(SPRD_UART1_BASE + 0X18, -1UL));
 #if defined(CONFIG_ARCH_SCX15)
        sci_glb_set(REG_PMU_APB_XTL0_REL_CFG, 0x4);
        sci_glb_set(REG_PMU_APB_XTLBUF0_REL_CFG, 0x4);
@@ -783,15 +783,15 @@ void show_pin_reg(void)
        sci_glb_clr(REG_PMU_APB_PD_CP1_TD_CFG, BIT(24));
 #endif /* CONFIG_ARCH_SCX35L */
 #endif
-       printk("REG_PMU_APB_XTL0_REL_CFG 0x%08x\n", sci_glb_read(REG_PMU_APB_XTL0_REL_CFG, -1UL));
-       printk("REG_PMU_APB_XTL1_REL_CFG 0x%08x\n", sci_glb_read(REG_PMU_APB_XTL1_REL_CFG, -1UL));
+       pr_debug("REG_PMU_APB_XTL0_REL_CFG 0x%08x\n", sci_glb_read(REG_PMU_APB_XTL0_REL_CFG, -1UL));
+       pr_debug("REG_PMU_APB_XTL1_REL_CFG 0x%08x\n", sci_glb_read(REG_PMU_APB_XTL1_REL_CFG, -1UL));
 #if !defined(CONFIG_ARCH_SCX35L)
-       printk("REG_PMU_APB_XTL2_REL_CFG 0x%08x\n", sci_glb_read(REG_PMU_APB_XTL2_REL_CFG, -1UL));
+       pr_debug("REG_PMU_APB_XTL2_REL_CFG 0x%08x\n", sci_glb_read(REG_PMU_APB_XTL2_REL_CFG, -1UL));
 #endif
-       printk("REG_PMU_APB_XTLBUF0_REL_CFG 0x%08x\n", sci_glb_read(REG_PMU_APB_XTLBUF0_REL_CFG, -1UL));
-       printk("REG_PMU_APB_XTLBUF1_REL_CFG 0x%08x\n", sci_glb_read(REG_PMU_APB_XTLBUF1_REL_CFG, -1UL));
+       pr_debug("REG_PMU_APB_XTLBUF0_REL_CFG 0x%08x\n", sci_glb_read(REG_PMU_APB_XTLBUF0_REL_CFG, -1UL));
+       pr_debug("REG_PMU_APB_XTLBUF1_REL_CFG 0x%08x\n", sci_glb_read(REG_PMU_APB_XTLBUF1_REL_CFG, -1UL));
 #if !defined(CONFIG_ARCH_SCX35L)
-       printk("REG_PMU_APB_PD_CP1_TD_CFG 0x%08x\n", sci_glb_read(REG_PMU_APB_PD_CP1_TD_CFG, -1Ul));
+       pr_debug("REG_PMU_APB_PD_CP1_TD_CFG 0x%08x\n", sci_glb_read(REG_PMU_APB_PD_CP1_TD_CFG, -1Ul));
 #endif
 }
 void force_mcu_core_sleep(void)
@@ -950,97 +950,97 @@ void bak_last_reg(void)
 }
 void print_last_reg(void)
 {
-       printk("aon pmu status reg\n");
-       printk("REG_PMU_APB_PD_PUB_SYS_CFG ------ 0x%08x\n", pd_pub_sys);
-       printk("REG_PMU_APB_PD_MM_TOP_CFG ------ 0x%08x\n",
+       pr_debug("aon pmu status reg\n");
+       pr_debug("REG_PMU_APB_PD_PUB_SYS_CFG ------ 0x%08x\n", pd_pub_sys);
+       pr_debug("REG_PMU_APB_PD_MM_TOP_CFG ------ 0x%08x\n",
                        sci_glb_read(REG_PMU_APB_PD_MM_TOP_CFG, -1UL) );
-       printk("REG_PMU_APB_PD_AP_SYS_CFG ------ 0x%08x\n",
+       pr_debug("REG_PMU_APB_PD_AP_SYS_CFG ------ 0x%08x\n",
                        sci_glb_read(REG_PMU_APB_PD_AP_SYS_CFG, -1UL) );
 #ifdef REG_PMU_APB_PD_AP_DISP_CFG
-       printk("REG_PMU_APB_PD_AP_DISP_CFG ------ 0x%08x\n",
+       pr_debug("REG_PMU_APB_PD_AP_DISP_CFG ------ 0x%08x\n",
                        sci_glb_read(REG_PMU_APB_PD_AP_DISP_CFG, -1UL) );
 #endif
 
 #if defined(CONFIG_ARCH_SCX30G)
-       printk("REG_PMU_APB_PD_DDR_PUBL_CFG ------ 0x%08x\n",
+       pr_debug("REG_PMU_APB_PD_DDR_PUBL_CFG ------ 0x%08x\n",
                        sci_glb_read(REG_PMU_APB_PD_DDR_PUBL_CFG, -1UL) );
-       printk("REG_PMU_APB_PD_DDR_PHY_CFG ------ 0x%08x\n",
+       pr_debug("REG_PMU_APB_PD_DDR_PHY_CFG ------ 0x%08x\n",
                        sci_glb_read(REG_PMU_APB_PD_DDR_PHY_CFG, -1UL) );
 #endif
-       printk("REG_PMU_APB_CP_SLP_STATUS_DBG0 ----- 0x%08x\n", cp_slp_status_dbg0);
+       pr_debug("REG_PMU_APB_CP_SLP_STATUS_DBG0 ----- 0x%08x\n", cp_slp_status_dbg0);
 #if !defined(CONFIG_ARCH_SCX35L)
-       printk("REG_PMU_APB_CP_SLP_STATUS_DBG1 ----- 0x%08x\n", cp_slp_status_dbg1);
+       pr_debug("REG_PMU_APB_CP_SLP_STATUS_DBG1 ----- 0x%08x\n", cp_slp_status_dbg1);
 #endif
-       printk("REG_PMU_APB_PWR_STATUS0_DBG ----- 0x%08x\n", pwr_stat0);
-       printk("REG_PMU_APB_PWR_STATUS1_DBG ----- 0x%08x\n", pwr_stat1);
-       printk("REG_PMU_APB_PWR_STATUS2_DBG ----- 0x%08x\n", pwr_stat2);
+       pr_debug("REG_PMU_APB_PWR_STATUS0_DBG ----- 0x%08x\n", pwr_stat0);
+       pr_debug("REG_PMU_APB_PWR_STATUS1_DBG ----- 0x%08x\n", pwr_stat1);
+       pr_debug("REG_PMU_APB_PWR_STATUS2_DBG ----- 0x%08x\n", pwr_stat2);
 #if !defined(CONFIG_ARCH_SCX35L)
-       printk("REG_PMU_APB_PWR_STATUS3_DBG ----- 0x%08x\n", pwr_stat3);
+       pr_debug("REG_PMU_APB_PWR_STATUS3_DBG ----- 0x%08x\n", pwr_stat3);
 #endif
-       printk("REG_PMU_APB_SLEEP_CTRL ----- 0x%08x\n", sleep_ctrl);
-       printk("REG_PMU_APB_DDR_SLEEP_CTRL ----- 0x%08x\n", ddr_sleep_ctrl);
-       printk("REG_PMU_APB_SLEEP_STATUS ----- 0x%08x\n", sleep_status);
+       pr_debug("REG_PMU_APB_SLEEP_CTRL ----- 0x%08x\n", sleep_ctrl);
+       pr_debug("REG_PMU_APB_DDR_SLEEP_CTRL ----- 0x%08x\n", ddr_sleep_ctrl);
+       pr_debug("REG_PMU_APB_SLEEP_STATUS ----- 0x%08x\n", sleep_status);
 #if defined(CONFIG_ARCH_SCX15)
-       printk("REG_PMU_APB_XTL0_REL_CFG ----- 0x%08x\n", xtl0_rel_cfg);
-       printk("REG_PMU_APB_XTL1_REL_CFG ----- 0x%08x\n", xtl1_rel_cfg);
-       printk("REG_PMU_APB_XTL2_REL_CFG ----- 0x%08x\n", xtl2_rel_cfg);
-       printk("REG_PMU_APB_XTLBUF0_REL_CFG ----- 0x%08x\n", xtlbuf0_rel_cfg);
-       printk("REG_PMU_APB_XTLBUF1_REL_CFG ----- 0x%08x\n", xtlbuf1_rel_cfg);
-       printk("REG_PMU_APB_MPLL_REL_CFG ----- 0x%08x\n", mpll_rel_cfg);
-       printk("REG_PMU_APB_DPLL_REL_CFG ----- 0x%08x\n", dpll_rel_cfg);
-       printk("REG_PMU_APB_TDPLL_REL_CFG ----- 0x%08x\n", tdpll_rel_cfg);
-       printk("REG_PMU_APB_WPLL_REL_CFG ----- 0x%08x\n", wpll_rel_cfg);
-       printk("REG_PMU_APB_CPLL_REL_CFG ----- 0x%08x\n", cpll_rel_cfg);
-       printk("REG_PMU_APB_WIFIPLL1_REL_CFG ----- 0x%08x\n", wifipll1_rel_cfg);
-       printk("REG_PMU_APB_WIFIPLL2_REL_CFG ----- 0x%08x\n", wifipll2_rel_cfg);
-       printk("REG_PMU_APB_DDR_CHN_SLEEP_CTRL0 ----- 0x%08x\n", ddr_chn_sleep_ctrl0);
-       printk("REG_PMU_APB_DDR_CHN_SLEEP_CTRL1 ----- 0x%08x\n", ddr_chn_sleep_ctrl1);
-#endif
-
-       printk("aon apb reg\n");
-       printk("REG_AON_APB_APB_EB0  ----- 0x%08x\n", apb_eb0);
-       printk("REG_AON_APB_APB_EB1  ----- 0x%08x\n", apb_eb1);
-       printk("REG_AON_APB_PWR_CTRL ----- 0x%08x\n", pwr_ctrl);
-       printk("REG_AON_APB_BB_BG_CTRL ------ 0x%08x\n",
+       pr_debug("REG_PMU_APB_XTL0_REL_CFG ----- 0x%08x\n", xtl0_rel_cfg);
+       pr_debug("REG_PMU_APB_XTL1_REL_CFG ----- 0x%08x\n", xtl1_rel_cfg);
+       pr_debug("REG_PMU_APB_XTL2_REL_CFG ----- 0x%08x\n", xtl2_rel_cfg);
+       pr_debug("REG_PMU_APB_XTLBUF0_REL_CFG ----- 0x%08x\n", xtlbuf0_rel_cfg);
+       pr_debug("REG_PMU_APB_XTLBUF1_REL_CFG ----- 0x%08x\n", xtlbuf1_rel_cfg);
+       pr_debug("REG_PMU_APB_MPLL_REL_CFG ----- 0x%08x\n", mpll_rel_cfg);
+       pr_debug("REG_PMU_APB_DPLL_REL_CFG ----- 0x%08x\n", dpll_rel_cfg);
+       pr_debug("REG_PMU_APB_TDPLL_REL_CFG ----- 0x%08x\n", tdpll_rel_cfg);
+       pr_debug("REG_PMU_APB_WPLL_REL_CFG ----- 0x%08x\n", wpll_rel_cfg);
+       pr_debug("REG_PMU_APB_CPLL_REL_CFG ----- 0x%08x\n", cpll_rel_cfg);
+       pr_debug("REG_PMU_APB_WIFIPLL1_REL_CFG ----- 0x%08x\n", wifipll1_rel_cfg);
+       pr_debug("REG_PMU_APB_WIFIPLL2_REL_CFG ----- 0x%08x\n", wifipll2_rel_cfg);
+       pr_debug("REG_PMU_APB_DDR_CHN_SLEEP_CTRL0 ----- 0x%08x\n", ddr_chn_sleep_ctrl0);
+       pr_debug("REG_PMU_APB_DDR_CHN_SLEEP_CTRL1 ----- 0x%08x\n", ddr_chn_sleep_ctrl1);
+#endif
+
+       pr_debug("aon apb reg\n");
+       pr_debug("REG_AON_APB_APB_EB0  ----- 0x%08x\n", apb_eb0);
+       pr_debug("REG_AON_APB_APB_EB1  ----- 0x%08x\n", apb_eb1);
+       pr_debug("REG_AON_APB_PWR_CTRL ----- 0x%08x\n", pwr_ctrl);
+       pr_debug("REG_AON_APB_BB_BG_CTRL ------ 0x%08x\n",
                        sci_glb_read(REG_AON_APB_BB_BG_CTRL, -1UL) );
 
-       printk("ap ahb reg \n");
-       printk("REG_AP_AHB_AHB_EB ----- 0x%08x\n", ahb_eb);
-
-       printk("ap apb reg\n");
-       printk("REG_AP_APB_APB_EB ---- 0x%08x\n", apb_eb);
-       printk("REG_AP_AHB_MCU_PAUSE ---   0x%08x\n", mcu_pause);
-       printk("REG_AP_AHB_AP_SYS_FORCE_SLEEP_CFG --- 0x%08x\n", sys_force_sleep);
-       printk("REG_AP_AHB_AP_SYS_AUTO_SLEEP_CFG ---- 0x%08x\n", sys_auto_sleep_cfg);
-       printk("REG_AP_AHB_CA7_STANDBY_STATUS ---- 0x%08x\n", ca7_standby_status);
-
-       printk("ana reg \n");
-       printk("ANA_REG_GLB_LDO_SLP_CTRL0 --- 0x%08x\n", ldo_slp_ctrl0);
-       printk("ANA_REG_GLB_LDO_SLP_CTRL1 --- 0x%08x\n", ldo_slp_ctrl1);
-       printk("ANA_REG_GLB_LDO_SLP_CTRL2 --- 0x%08x\n", ldo_slp_ctrl2);
-       printk("ANA_REG_GLB_LDO_SLP_CTRL3 --- 0x%08x\n", ldo_slp_ctrl3);
-       printk("ANA_REG_GLB_AUD_SLP_CTRL4 --- 0x%08x\n", ldo_aud_ctrl4);
-       printk("ANA_REG_GLB_XTL_WAIT_CTRL --- 0x%08x\n", xtl_wait_ctrl);
-
-       printk("ANA_REG_GLB_PWR_XTL_EN0 -- 0x%08x\n", sci_adi_read(ANA_REG_GLB_PWR_XTL_EN0));
-       printk("ANA_REG_GLB_PWR_XTL_EN1 -- 0x%08x\n", sci_adi_read(ANA_REG_GLB_PWR_XTL_EN1));
-       printk("ANA_REG_GLB_PWR_XTL_EN2 -- 0x%08x\n", sci_adi_read(ANA_REG_GLB_PWR_XTL_EN2));
-       printk("ANA_REG_GLB_PWR_XTL_EN3 -- 0x%08x\n", sci_adi_read(ANA_REG_GLB_PWR_XTL_EN3));
+       pr_debug("ap ahb reg \n");
+       pr_debug("REG_AP_AHB_AHB_EB ----- 0x%08x\n", ahb_eb);
+
+       pr_debug("ap apb reg\n");
+       pr_debug("REG_AP_APB_APB_EB ---- 0x%08x\n", apb_eb);
+       pr_debug("REG_AP_AHB_MCU_PAUSE ---   0x%08x\n", mcu_pause);
+       pr_debug("REG_AP_AHB_AP_SYS_FORCE_SLEEP_CFG --- 0x%08x\n", sys_force_sleep);
+       pr_debug("REG_AP_AHB_AP_SYS_AUTO_SLEEP_CFG ---- 0x%08x\n", sys_auto_sleep_cfg);
+       pr_debug("REG_AP_AHB_CA7_STANDBY_STATUS ---- 0x%08x\n", ca7_standby_status);
+
+       pr_debug("ana reg \n");
+       pr_debug("ANA_REG_GLB_LDO_SLP_CTRL0 --- 0x%08x\n", ldo_slp_ctrl0);
+       pr_debug("ANA_REG_GLB_LDO_SLP_CTRL1 --- 0x%08x\n", ldo_slp_ctrl1);
+       pr_debug("ANA_REG_GLB_LDO_SLP_CTRL2 --- 0x%08x\n", ldo_slp_ctrl2);
+       pr_debug("ANA_REG_GLB_LDO_SLP_CTRL3 --- 0x%08x\n", ldo_slp_ctrl3);
+       pr_debug("ANA_REG_GLB_AUD_SLP_CTRL4 --- 0x%08x\n", ldo_aud_ctrl4);
+       pr_debug("ANA_REG_GLB_XTL_WAIT_CTRL --- 0x%08x\n", xtl_wait_ctrl);
+
+       pr_debug("ANA_REG_GLB_PWR_XTL_EN0 -- 0x%08x\n", sci_adi_read(ANA_REG_GLB_PWR_XTL_EN0));
+       pr_debug("ANA_REG_GLB_PWR_XTL_EN1 -- 0x%08x\n", sci_adi_read(ANA_REG_GLB_PWR_XTL_EN1));
+       pr_debug("ANA_REG_GLB_PWR_XTL_EN2 -- 0x%08x\n", sci_adi_read(ANA_REG_GLB_PWR_XTL_EN2));
+       pr_debug("ANA_REG_GLB_PWR_XTL_EN3 -- 0x%08x\n", sci_adi_read(ANA_REG_GLB_PWR_XTL_EN3));
 #if !defined(CONFIG_ADIE_SC2723) && !defined(CONFIG_ADIE_SC2723S)
-       printk("ANA_REG_GLB_PWR_XTL_EN4 -- 0x%08x\n", sci_adi_read(ANA_REG_GLB_PWR_XTL_EN4));
+       pr_debug("ANA_REG_GLB_PWR_XTL_EN4 -- 0x%08x\n", sci_adi_read(ANA_REG_GLB_PWR_XTL_EN4));
 #endif
 #if !defined(CONFIG_ARCH_SCX15) && !defined(CONFIG_ADIE_SC2723) && !defined(CONFIG_ADIE_SC2723S)
-       printk("ANA_REG_GLB_PWR_XTL_EN5 -- 0x%08x\n", sci_adi_read(ANA_REG_GLB_PWR_XTL_EN5));
+       pr_debug("ANA_REG_GLB_PWR_XTL_EN5 -- 0x%08x\n", sci_adi_read(ANA_REG_GLB_PWR_XTL_EN5));
 #endif
-       printk("mm reg\n");
-       printk("REG_MM_AHB_AHB_EB ---- 0x%08x\n", mm_apb);
+       pr_debug("mm reg\n");
+       pr_debug("REG_MM_AHB_AHB_EB ---- 0x%08x\n", mm_apb);
 
-       printk("ana reg\n");
+       pr_debug("ana reg\n");
 #if defined(CONFIG_ARCH_SCX15)
-       printk("ANA_REG_GLB_LDO_DCDC_PD --- 0x%08x\n", ldo_dcdc_pd_ctrl);
+       pr_debug("ANA_REG_GLB_LDO_DCDC_PD --- 0x%08x\n", ldo_dcdc_pd_ctrl);
 #endif
-       printk("ANA_REG_GLB_LDO_PD_CTRL --- 0x%08x\n", ldo_pd_ctrl);
-       printk("ANA_REG_GLB_ARM_MODULE_EN --- 0x%08x\n", arm_module_en);
+       pr_debug("ANA_REG_GLB_LDO_PD_CTRL --- 0x%08x\n", ldo_pd_ctrl);
+       pr_debug("ANA_REG_GLB_ARM_MODULE_EN --- 0x%08x\n", arm_module_en);
 }
 #if 0
 static void test_setup_timer(int load)
@@ -1284,11 +1284,11 @@ void int_work_round(void)
 }
 void show_deep_reg_status(void)
 {
-       printk("PWR_STATUS0_DBG 0x%08x\n", sci_glb_read(REG_PMU_APB_PWR_STATUS0_DBG, -1UL));
-       printk("PWR_STATUS1_DBG 0x%08x\n", sci_glb_read(REG_PMU_APB_PWR_STATUS1_DBG, -1UL));
-       printk("PWR_STATUS2_DBG 0x%08x\n", sci_glb_read(REG_PMU_APB_PWR_STATUS2_DBG, -1UL));
+       pr_debug("PWR_STATUS0_DBG       0x%08x\n", sci_glb_read(REG_PMU_APB_PWR_STATUS0_DBG, -1UL));
+       pr_debug("PWR_STATUS1_DBG       0x%08x\n", sci_glb_read(REG_PMU_APB_PWR_STATUS1_DBG, -1UL));
+       pr_debug("PWR_STATUS2_DBG       0x%08x\n", sci_glb_read(REG_PMU_APB_PWR_STATUS2_DBG, -1UL));
 #if !defined(CONFIG_ARCH_SCX35L)
-       printk("PWR_STATUS3_DBG 0x%08x\n", sci_glb_read(REG_PMU_APB_PWR_STATUS3_DBG, -1UL));
+       pr_debug("PWR_STATUS3_DBG       0x%08x\n", sci_glb_read(REG_PMU_APB_PWR_STATUS3_DBG, -1UL));
 #endif /* CONFIG_ARCH_SCX35L */
 }
 
@@ -1443,12 +1443,12 @@ int deep_sleep(int from_idle)
                __raw_writel(0x1, REG_PMU_APB_CA7_C0_CFG);
 #endif
 #endif
-               printk("ret %d not from idle\n", ret);
+               pr_debug("ret %d not from idle\n", ret);
                if(ret){
 #if defined(CONFIG_DDR_VALIDITY_TEST) && defined(CONFIG_ARCH_SCX30G)
-                       printk("DDR test: read times: %ld\n", *(vtest + 1));
+                       pr_debug("DDR test: read times: %ld\n", *(vtest + 1));
 #endif
-                       printk("deep sleep %u times\n", cnt);
+                       pr_debug("deep sleep %u times\n", cnt);
                        cnt++;
                }
                sci_glb_set(REG_AP_APB_APB_EB, 0xf<<19);
index 044c6a1..448da86 100644 (file)
@@ -157,16 +157,16 @@ void hard_irq_set(void)
 }
 void print_int_status(void)
 {
-       printk("APB_EB 0x%08x\n", __raw_readl(REG_AP_APB_APB_EB));
-       printk("INTC0 mask:0x%08x raw:0x%08x en:0x%08x\n", __raw_readl(INTCV0_IRQ_MSKSTS),__raw_readl(INTCV0_IRQ_RAW), __raw_readl(INTCV0_IRQ_EN));
-       printk("INTC1 mask:0x%08x raw:0x%08x en:0x%08x\n", __raw_readl(INTCV1_IRQ_MSKSTS),__raw_readl(INTCV1_IRQ_RAW), __raw_readl(INTCV1_IRQ_EN));
-       printk("INTC2 mask:0x%08x raw:0x%08x en:0x%08x\n", __raw_readl(INTCV2_IRQ_MSKSTS),__raw_readl(INTCV2_IRQ_RAW), __raw_readl(INTCV2_IRQ_EN));
-       printk("INTC3 mask:0x%08x raw:0x%08x en:0x%08x\n", __raw_readl(INTCV3_IRQ_MSKSTS),__raw_readl(INTCV3_IRQ_RAW), __raw_readl(INTCV3_IRQ_EN));
-       printk("INT mask:0x%08x raw:0x%08x en:0x%08x\n", __raw_readl(INT_IRQ_STS),__raw_readl(INT_IRQ_RAW), __raw_readl(INT_IRQ_ENB));
-       printk("ANA INT mask:0x%08x raw:0x%08x en:0x%08x\n", sci_adi_read(ANA_REG_INT_MASK_STATUS), sci_adi_read(ANA_REG_INT_RAW_STATUS), sci_adi_read(ANA_REG_INT_EN));
-       printk("ANA EIC MODULE_EN 0x%08x eic bit(3)\n", sci_adi_read(ANA_REG_GLB_ARM_MODULE_EN));
-       printk("ANA EIC int en 0x%08x\n", sci_adi_read(ANA_CTL_EIC_BASE + 0x18));
-       printk("ANA EIC int status 0x%08x, 0x%08x\n", sci_adi_read(ANA_CTL_EIC_BASE + 0x20),sci_adi_read(ANA_CTL_EIC_BASE + 0x14));
+       pr_debug("APB_EB 0x%08x\n", __raw_readl(REG_AP_APB_APB_EB));
+       pr_debug("INTC0 mask:0x%08x raw:0x%08x en:0x%08x\n", __raw_readl(INTCV0_IRQ_MSKSTS),__raw_readl(INTCV0_IRQ_RAW), __raw_readl(INTCV0_IRQ_EN));
+       pr_debug("INTC1 mask:0x%08x raw:0x%08x en:0x%08x\n", __raw_readl(INTCV1_IRQ_MSKSTS),__raw_readl(INTCV1_IRQ_RAW), __raw_readl(INTCV1_IRQ_EN));
+       pr_debug("INTC2 mask:0x%08x raw:0x%08x en:0x%08x\n", __raw_readl(INTCV2_IRQ_MSKSTS),__raw_readl(INTCV2_IRQ_RAW), __raw_readl(INTCV2_IRQ_EN));
+       pr_debug("INTC3 mask:0x%08x raw:0x%08x en:0x%08x\n", __raw_readl(INTCV3_IRQ_MSKSTS),__raw_readl(INTCV3_IRQ_RAW), __raw_readl(INTCV3_IRQ_EN));
+       pr_debug("INT mask:0x%08x raw:0x%08x en:0x%08x\n", __raw_readl(INT_IRQ_STS),__raw_readl(INT_IRQ_RAW), __raw_readl(INT_IRQ_ENB));
+       pr_debug("ANA INT mask:0x%08x raw:0x%08x en:0x%08x\n", sci_adi_read(ANA_REG_INT_MASK_STATUS), sci_adi_read(ANA_REG_INT_RAW_STATUS), sci_adi_read(ANA_REG_INT_EN));
+       pr_debug("ANA EIC MODULE_EN 0x%08x eic bit(3)\n", sci_adi_read(ANA_REG_GLB_ARM_MODULE_EN));
+       pr_debug("ANA EIC int en 0x%08x\n", sci_adi_read(ANA_CTL_EIC_BASE + 0x18));
+       pr_debug("ANA EIC int status 0x%08x, 0x%08x\n", sci_adi_read(ANA_CTL_EIC_BASE + 0x20),sci_adi_read(ANA_CTL_EIC_BASE + 0x14));
 }
 
 #define GPIO_GROUP_NUM         16
@@ -395,7 +395,7 @@ static void print_hard_irq(void)
                return;
        do{
                if(0 != sprd_hard_irq[i])
-                       printk("##: sprd_hard_irq[%d] = %d.\n",
+                       pr_debug("##: sprd_hard_irq[%d] = %d.\n",
                                 i, sprd_hard_irq[i]);
        }while(--i >= 0);
 }
old mode 100644 (file)
new mode 100755 (executable)
index a237a92..47e383f
@@ -764,7 +764,7 @@ static void dump_one_task_info(struct task_struct *tsk, bool is_main)
 }
 
 /* timeout for dog bark/bite */
-#define DELAY_TIME 20000
+#define DELAY_TIME 40000
 #define HANG_ADDRESS 0x60900000        /* VSP CTRL Register */
 
 static void simulate_apps_wdog_bark(void)
@@ -796,6 +796,7 @@ static void simulate_bus_hang(void)
 
        /* simulate */
        hang_address = ioremap(address, SZ_4K);
+       pr_emerg("Simulating bus hang. addr=0x%x time=%lu\n", hang_address, jiffies);
        dummy_value = readl_relaxed(hang_address);
        mdelay(DELAY_TIME);
        /* if we hit here, test had failed */
@@ -834,8 +835,8 @@ static int force_error(const char *val, struct kernel_param *kp)
        return 0;
 }
 
-/* Build warning fix */
-#if 0
+
+
 static void dump_all_task_info(void)
 {
        struct task_struct *frst_tsk;
@@ -996,7 +997,7 @@ static void dump_cpu_stat(void)
                                cpu_i, per_softirq_sums[cpu_i], softirq_to_name[cpu_i]);
        pr_info(" -----------------------------------------------------------------------------------\n");
 }
-#endif
+
 
 /*
  * Called from dump_stack()
@@ -1060,13 +1061,13 @@ static int sec_debug_panic_handler(struct notifier_block *nb,
 
        pr_err("(%s) checksum_sched_log: %x\n", __func__, checksum_sched_log());
 
-#if 0
+
        /*show_state();*/
        dump_all_task_info();
        dump_cpu_stat();
        /* No backtrace */
        show_state_filter(TASK_STATE_MAX);
-#endif
+
        sec_debug_dump_stack();
        sec_debug_hw_reset();
 
@@ -1195,12 +1196,6 @@ __init int sec_debug_init(void)
        map_noncached_aux_log_buf();
 #endif
 
-#ifdef CONFIG_SEC_DEBUG_REG_ACCESS
-       sec_debug_last_regs_access = (struct sec_debug_regs_access*)dma_alloc_coherent(
-               NULL, sizeof(struct sec_debug_regs_access)*NR_CPUS, &addr, GFP_KERNEL);
-       pr_info("*** %s, size:%u, sec_debug_last_regs_access:%p *** \n",
-               __func__, sizeof(struct sec_debug_regs_access)*NR_CPUS, sec_debug_last_regs_access);
-#endif
        return 0;
 }
 
old mode 100755 (executable)
new mode 100644 (file)
index 43b49f4..d372ac1
@@ -32,6 +32,9 @@
 #ifdef CONFIG_SEC_LOG_BUF_NOCACHE
 #include <linux/memblock.h>
 #endif
+#ifdef CONFIG_SEC_DEBUG_REG_ACCESS
+#include <soc/sprd/arch_lock.h>
+#endif
 
 /*
  * Example usage: sec_log=256K@0x45000000
@@ -46,6 +49,7 @@
 
 /* These variables are also protected by logbuf_lock */
 static unsigned *sec_log_ptr;
+static unsigned *sec_log_mag;
 static char *sec_log_buf;
 static unsigned sec_log_size;
 
@@ -60,7 +64,6 @@ static inline void sec_log_save_old(void)
 {
 }
 #endif
-#define LOG_LENGTH_B (1024*1024)
 
 extern void register_log_text_hook(void (*f)(char *text, size_t size),
        char *buf, unsigned *position, size_t bufsize);
@@ -109,41 +112,58 @@ static int __init sec_log_setup(char *str)
 #ifdef CONFIG_SEC_LOG_BUF_NOCACHE
        sec_log_buf_nocache_enable=1;
 #else
-       size_of_struct_sec_log_buffer = ((sizeof(struct sec_log_buffer)+4)/4)*4;
-       // sec_logbuf_size(1M) + sec_log_buffer(16B) + sec_log_ptr(4B) + sec_log_mag(4B)
-       alloc_size = sec_logbuf_size + size_of_struct_sec_log_buffer + 4 + 4;
-       if(reserve_bootmem(sec_logbuf_base_addr,alloc_size, BOOTMEM_EXCLUSIVE)) {
-               printk("%s: fail to reserve memory\n",__func__);
-               return -1;
-       }
-       else {
-                       printk("%s: success to reserve memory, base_phys=%x, size=%x\n",__func__,sec_logbuf_base_addr, alloc_size);
-       }
        sec_log_buf_nocache_enable=0;
 #endif
+        size_of_struct_sec_log_buffer = ((sizeof(struct sec_log_buffer)+4)/4)*4;
+
+       /* sec_logbuf_size(1M-512B) + sec_log_buffer(24B) + sec_log_ptr(4B) + sec_log_mag(4B) */
+        alloc_size = sec_logbuf_size + size_of_struct_sec_log_buffer + 4 + 4;
+
+#ifdef CONFIG_SEC_DEBUG_REG_ACCESS
+       alloc_size += sizeof(struct sec_debug_regs_access) * NR_CPUS + HWSPINLOCK_ID_TOTAL_NUMS;
+#endif
+        if(reserve_bootmem(sec_logbuf_base_addr,alloc_size, BOOTMEM_EXCLUSIVE)) {
+                printk("%s: fail to reserve memory\n",__func__);
+                return -1;
+        }
+        else {
+                        printk("%s: success to reserve memory, base_phys=%x, size=%x\n",__func__,sec_logbuf_base_addr, alloc_size);
+        }
+
 printk("sec_log_setup:Exit.\n");
        return 0;
 
 }
-#ifdef CONFIG_SEC_LOG_BUF_NOCACHE
-early_param("sec_log",sec_log_setup);
-#else
+
 __setup("sec_log=", sec_log_setup);
-#endif
 
 #ifdef CONFIG_SEC_DEBUG_REG_ACCESS
 void sec_debug_set_last_regs_access(void)
 {
        unsigned addr = (unsigned)sec_log_buf;
        unsigned size_struct_sec_log_buffer = sizeof(struct sec_log_buffer);
-       extern struct sec_debug_regs_access *sec_debug_last_regs_access;
+       unsigned offset = 0;
+       phys_addr_t sec_debug_last_regs_paddr;
+       extern volatile struct sec_debug_regs_access *sec_debug_last_regs_access;
        extern char *sec_debug_local_hwlocks_status;
 
+       if (!get_sec_debug_level())
+               return;
+
        size_struct_sec_log_buffer = (((size_struct_sec_log_buffer + 4) / 4)* 4);
-       addr = addr+sec_logbuf_size+size_struct_sec_log_buffer;
-       sec_debug_last_regs_access = addr;
+       offset = sec_logbuf_size + sizeof(*sec_log_ptr) + sizeof(*sec_log_mag);
+       sec_debug_last_regs_access = addr + offset;
+       sec_debug_last_regs_paddr = sec_logbuf_base_addr + size_struct_sec_log_buffer + offset;
        sec_debug_local_hwlocks_status = sec_debug_last_regs_access + NR_CPUS;
-       memset(sec_debug_local_hwlocks_status,0,64);
+       memset(sec_debug_local_hwlocks_status, 0, HWSPINLOCK_ID_TOTAL_NUMS);
+
+       pr_info("sec_debug_last_regs_access: 0x%p (A:0x%x), size: %d\n",
+                       sec_debug_last_regs_access, sec_debug_last_regs_paddr,
+                       sizeof(struct sec_debug_regs_access) * NR_CPUS);
+       pr_info("sec_debug_local_hwlocks_status: 0x%p (A:0x%x), size: %d\n",
+                       sec_debug_local_hwlocks_status,
+                       sec_debug_last_regs_paddr + sizeof(struct sec_debug_regs_access) * NR_CPUS,
+                       HWSPINLOCK_ID_TOTAL_NUMS);
 }
 #endif
 
@@ -162,10 +182,10 @@ static int __init sec_logbuf_conf_memtype(void)
 #else
        unsigned long base = 0;
 #endif
-       unsigned *sec_log_mag;
-       unsigned size_of_log_ptr = sizeof(*sec_log_mag);
-       unsigned size_of_log_mag = sizeof(*sec_log_ptr);
+       unsigned size_of_log_ptr = sizeof(*sec_log_ptr);
+       unsigned size_of_log_mag = sizeof(*sec_log_mag);
        unsigned size_struct_sec_log_buffer = sizeof(struct sec_log_buffer);
+       unsigned total_size_for_sec_log = 0;
 
        /* Round-up to 4 byte alignment */
        size_struct_sec_log_buffer = (((size_struct_sec_log_buffer + 4) / 4)* 4);
@@ -173,6 +193,12 @@ static int __init sec_logbuf_conf_memtype(void)
                "size_struct_sec_log_buffer:%d\n",
                __func__, size_of_log_ptr, size_of_log_mag,
                                        size_struct_sec_log_buffer);
+       total_size_for_sec_log = sec_logbuf_size + size_of_log_ptr +
+                               size_of_log_mag + size_struct_sec_log_buffer;
+#ifdef CONFIG_SEC_DEBUG_REG_ACCESS
+       total_size_for_sec_log += sizeof(struct sec_debug_regs_access) * NR_CPUS + HWSPINLOCK_ID_TOTAL_NUMS;
+#endif
+       pr_info("%s: total_size_for_sec_log: %d\n", __func__, total_size_for_sec_log);
 
        /**********************************************************************
         ___________________
@@ -191,7 +217,7 @@ static int __init sec_logbuf_conf_memtype(void)
 
        if(sec_log_buf_nocache_enable == 1)
        {
-               base = ioremap_nocache(sec_logbuf_base_addr, LOG_LENGTH_B);
+               base = ioremap_nocache(sec_logbuf_base_addr, total_size_for_sec_log);
                if(base == NULL){
                        printk("ioremap nocache fail\n");
                        return -1;
index 4798b78..11da9f4 100644 (file)
@@ -184,7 +184,7 @@ static const struct file_operations check_phy_addr_fops = {
 
 void debugfs_addr(struct dentry *d)
 {
-       if (!debugfs_create_file("check_phy_addr", 0644
+       if (!debugfs_create_file("check_phy_addr", 0600
                , d, NULL,&check_phy_addr_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "check_phy_addr");
 
index 71c58b0..7a4bb0c 100644 (file)
@@ -2096,11 +2096,11 @@ static const struct file_operations cpu_online_max_fops = {
 
 void debugfs_cpu_bus(struct dentry *d)
 {
-       if (!debugfs_create_file("available_cpu_freq", 0444
+       if (!debugfs_create_file("available_cpu_freq", 0400
                , d, NULL,&available_cpu_freq_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "available_cpu_freq");
 
-       if (!debugfs_create_file("cpu_load_freq", 0644, d, NULL,&cpu_load_freq_fops))
+       if (!debugfs_create_file("cpu_load_freq", 0600, d, NULL,&cpu_load_freq_fops))
                pr_err("%s : debugfs_create_file, error\n", "cpu_load_freq");
 
 #if defined(CONFIG_SLP_CHECK_BUS_LOAD)
@@ -2109,63 +2109,63 @@ void debugfs_cpu_bus(struct dentry *d)
                        pr_err("%s : debugfs_create_file, error\n", "last_cpu_load");
 #endif
 
-       if (!debugfs_create_file("check_running", 0644
+       if (!debugfs_create_file("check_running", 0600
                , d, NULL,&check_running_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "check_running");
 
-       if (!debugfs_create_file("check_running_detail", 0644
+       if (!debugfs_create_file("check_running_detail", 0600
                , d, NULL,&check_running_detail_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "check_running_detail");
 
-       if (!debugfs_create_file("check_running_raw", 0644
+       if (!debugfs_create_file("check_running_raw", 0600
                , d, NULL,&check_running_raw_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "check_running_raw");
 
 #if defined (CONFIG_CHECK_ENTER_AFTR)
-       if (!debugfs_create_file("cpuidle_w_aftr_jig_check_en", 0644
+       if (!debugfs_create_file("cpuidle_w_aftr_jig_check_en", 0600
                , d, NULL,&cpuidle_w_aftr_jig_check_en_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "cpuidle_w_aftr_jig_check_en");
 #endif
 
 #if defined(CONFIG_SLP_CHECK_BUS_LOAD)
-       if (!debugfs_create_file("cpu_bus_load_freq", 0644
+       if (!debugfs_create_file("cpu_bus_load_freq", 0600
                , d, NULL,&cpu_bus_load_freq_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "cpu_bus_load_freq");
 
-       if (!debugfs_create_file("cpu_bus_load_freq_view", 0644
+       if (!debugfs_create_file("cpu_bus_load_freq_view", 0600
                , d, NULL,&cpu_bus_load_freq_view_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "cpu_bus_load_freq_view");
 #endif
 
 
 #if defined(CONFIG_SLP_BUS_CLK_CHECK_LOAD)
-       if (!debugfs_create_file("cpu_bus_clk_freq", 0644
+       if (!debugfs_create_file("cpu_bus_clk_freq", 0600
                , d, NULL,&cpu_bus_clk_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "cpu_bus_clk_freq");
 
-       if (!debugfs_create_file("check_clk", 0644
+       if (!debugfs_create_file("check_clk", 0600
                , d, NULL,&check_clk_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "check_clk");
 #endif
 
 #if defined(CONFIG_LOAD_ANALYZER_PMQOS)
-       if (!debugfs_create_file("cpu_freq_min", 0644
+       if (!debugfs_create_file("cpu_freq_min", 0600
                , d, NULL,&cpu_freq_min_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "cpu_freq_min");
 
-       if (!debugfs_create_file("cpu_freq_max", 0644
+       if (!debugfs_create_file("cpu_freq_max", 0600
                , d, NULL,&cpu_freq_max_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "cpu_freq_max");
 
-       if (!debugfs_create_file("fixed_cpu_freq", 0644
+       if (!debugfs_create_file("fixed_cpu_freq", 0600
                , d, NULL,&fixed_cpu_freq_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "fixed_cpu_freq");
 
-       if (!debugfs_create_file("cpu_online_min", 0644
+       if (!debugfs_create_file("cpu_online_min", 0600
                , d, NULL,&cpu_online_min_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "cpu_online_min");
 
-       if (!debugfs_create_file("cpu_online_max", 0644
+       if (!debugfs_create_file("cpu_online_max", 0600
                , d, NULL,&cpu_online_max_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "cpu_online_max");
 
index b9f643d..b33897a 100644 (file)
@@ -2,9 +2,10 @@
 
 #include <linux/jiffies.h>
 
-int cpu_busy_level;
-static unsigned long current_boot_completed;
 
+static unsigned long current_boot_completed;
+#if defined(CONFIG_SLP_BUSY_LEVEL)
+int cpu_busy_level;
 int la_get_cpu_busy_level(void)
 {
        return cpu_busy_level;
@@ -104,8 +105,10 @@ int check_load_level(unsigned int current_cnt)
 
        return  busy_level;
 }
+#endif
 
 
+#if defined(CONFIG_SLP_CURRENT_MONITOR)
 #define CM_SAVE_DATA_NUM       100
 
 int save_end_index;
@@ -238,11 +241,11 @@ static const struct file_operations current_monitor_en_fops = {
 
 void debugfs_current(struct dentry *d)
 {
-       if (!debugfs_create_file("current_monitor", 0644
+       if (!debugfs_create_file("current_monitor", 0600
                , d, NULL,&current_monitor_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "current_monitor");
 
-       if (!debugfs_create_file("current_monitor_en", 0644
+       if (!debugfs_create_file("current_monitor_en", 0600
                , d, NULL,&current_monitor_en_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "current_monitor_en");
 }
@@ -252,5 +255,5 @@ void load_analyzer_current_init(void) {
         #define EXPECTED_BOOT_TIME     (60 * HZ)
        current_boot_completed = jiffies + EXPECTED_BOOT_TIME;
 }
-
+#endif
 
index 7a08842..d5af45b 100644 (file)
@@ -583,13 +583,13 @@ static const struct file_operations input_rec_reproduce_fops = {
 
 void debugfs_input_rec(struct dentry *d)
 {
-       if (!debugfs_create_file("check_input_rec", 0644
+       if (!debugfs_create_file("check_input_rec", 0600
                , d, NULL,&check_input_rec_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "check_input_rec");
-       if (!debugfs_create_file("check_input_rec_detail", 0644
+       if (!debugfs_create_file("check_input_rec_detail", 0600
                , d, NULL,&check_input_rec_detail_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "check_input_rec_detail");
-       if (!debugfs_create_file("input_rec_reproduce", 0644
+       if (!debugfs_create_file("input_rec_reproduce", 0600
                , d, NULL,&input_rec_reproduce_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "input_rec_reproduce");
 }
index 2697f75..6254234 100644 (file)
@@ -55,7 +55,7 @@
 #include "load_analyzer_sc7730.c"
 
 
-#if defined (CONFIG_SLP_CURRENT_MONITOR)
+#if defined (CONFIG_SLP_CURRENT_MONITOR) || defined(CONFIG_SLP_BUSY_LEVEL)
 #include "load_analyzer_current.c"
 #endif
 
@@ -625,12 +625,12 @@ static int __init system_load_analyzer_init(void)
 #endif
 
 #if defined(CONFIG_CHECK_NOT_CPUIDLE_CAUSE)
-               if (!debugfs_create_file("not_lpa_cause_check", 0644
+               if (!debugfs_create_file("not_lpa_cause_check", 0600
                        , d, NULL,&not_lpa_cause_check_fops))   \
                                pr_err("%s : debugfs_create_file, error\n", "not_lpa_cause_check");
 #endif
 
-               if (!debugfs_create_file("debug_value", 0644
+               if (!debugfs_create_file("debug_value", 0600
                        , d, NULL,&debug_value_fops))   \
                                pr_err("%s : debugfs_create_file, error\n", "debug_value");
 
@@ -654,25 +654,25 @@ static int __init system_load_analyzer_init(void)
                debugfs_cpu_tester(d);
 #endif
 
-       if (!debugfs_create_file("saved_sched_num", 0644
+       if (!debugfs_create_file("saved_sched_num", 0600
                , d, NULL,&saved_sched_num_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "saved_sched_num");
 
 #if defined(CONFIG_SLP_INPUT_REC)
-       if (!debugfs_create_file("saved_input_rec_num", 0644
+       if (!debugfs_create_file("saved_input_rec_num", 0600
                , d, NULL,&saved_input_rec_num_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "saved_input_rec_num");
 #endif
 
-       if (!debugfs_create_file("saved_load_analyzer_data_num", 0644
+       if (!debugfs_create_file("saved_load_analyzer_data_num", 0600
                , d, NULL,&saved_load_analyzer_data_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "saved_load_analyzer_data_num");
 
-       if (!debugfs_create_file("save_data_to_file", 0644
+       if (!debugfs_create_file("save_data_to_file", 0600
                , d, NULL,&save_data_to_file_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "save_data_to_file");
 
-       if (!debugfs_create_file("load_data_from_file", 0644
+       if (!debugfs_create_file("load_data_from_file", 0600
                , d, NULL,&load_data_from_file_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "load_data_from_file");
 
index b1d0f5e..b124ce6 100644 (file)
@@ -7,8 +7,11 @@
 /*
  * TIZEN kernel trace queue system
 */
-
-#define KENEL_TRACER_QUEUE_SIZE (128 * 1024)
+#if defined(CONFIG_SLP_KERNEL_ENG)
+#define KENEL_TRACER_QUEUE_SIZE (32 * 1024)
+#else
+#define KENEL_TRACER_QUEUE_SIZE (1 * 1024)
+#endif
 #define MINI_TRACER_MAX_SIZE_STRING 512
 atomic_t kenel_tracer_queue_cnt = ATOMIC_INIT(0);
 static bool kernel_mini_trace_enable;
index e335bca..c56f443 100644 (file)
@@ -592,10 +592,10 @@ static const struct file_operations check_work_detail_fops = {
 
 void debugfs_workqueue(struct dentry *d)
 {
-       if (!debugfs_create_file("check_work", 0644
+       if (!debugfs_create_file("check_work", 0600
                , d, NULL,&check_work_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "check_work");
-       if (!debugfs_create_file("check_work_detail", 0644
+       if (!debugfs_create_file("check_work_detail", 0600
                , d, NULL,&check_work_detail_fops))   \
                        pr_err("%s : debugfs_create_file, error\n", "check_work_detail");
 }
index 2bacfb5..6cea1cb 100644 (file)
@@ -874,7 +874,7 @@ static int setup_irq_cm36672p(struct cm36672p_data *data)
 
        data->irq = gpio_to_irq(pdata->irq);
        ret = request_threaded_irq(data->irq, NULL, proximity_irq_thread_fn,
-               IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+               IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT | IRQF_NO_SUSPEND,
                "proximity_int", data);
        if (ret < 0) {
                pr_err("%s: request_irq(%d) failed for gpio %d (%d)\n",
@@ -893,21 +893,31 @@ static int setup_irq_cm36672p(struct cm36672p_data *data)
 static int proximity_regulator_onoff(struct device *dev, bool onoff)
 {
        struct regulator *led_vdd;
-       /* struct regulator *vio;*/
+       struct regulator *vdd;
        int ret;
 
        pr_info("%s %s\n", __func__, (onoff) ? "on" : "off");
 
-       led_vdd = devm_regulator_get(dev, "cm36672p,vdd");
+       vdd = devm_regulator_get(dev, "cm36672p,vdd");
+       if (IS_ERR(vdd)) {
+               pr_err("%s, cannot get vdd\n", __func__);
+               return -ENOMEM;
+       }
+       regulator_set_voltage(vdd, 3000000, 3000000);
+
+       led_vdd = devm_regulator_get(dev, "cm36672p,led");
        if (IS_ERR(led_vdd)) {
                pr_err("%s, cannot get led_vdd\n", __func__);
                return -ENOMEM;
-       } else if (!regulator_get_voltage(led_vdd)) {
-               regulator_set_voltage(led_vdd, 3300000, 3300000);
        }
-
+       regulator_set_voltage(led_vdd, 3300000, 3300000);
 
        if (onoff) {
+               ret = regulator_enable(vdd);
+               if (ret) {
+                       pr_err("%s: Failed to enable vdd.\n", __func__);
+                       return ret;
+               }
                ret = regulator_enable(led_vdd);
                if (ret) {
                        pr_err("%s: Failed to enable led_vdd.\n", __func__);
@@ -919,8 +929,14 @@ static int proximity_regulator_onoff(struct device *dev, bool onoff)
                        pr_err("%s: Failed to disable led_vdd.\n", __func__);
                        return ret;
                }
+               ret = regulator_disable(vdd);
+               if (ret) {
+                       pr_err("%s: Failed to disable vdd.\n", __func__);
+                       return ret;
+               }
        }
 
+       devm_regulator_put(vdd);
        devm_regulator_put(led_vdd);
        msleep(20);
 
index bc6c192..66cae7a 100644 (file)
@@ -88,6 +88,7 @@
 #ifdef SETH_NAPI
 #define SETH_NAPI_WEIGHT 64
 #define SETH_TX_WEIGHT 16
+#endif /*end of SETH_NAPI*/
 
 /* struct of data transfer statistics */
 struct seth_dtrans_stats {
@@ -105,8 +106,6 @@ struct seth_dtrans_stats {
        uint32_t tx_ack_cnt;
 };
 
-#endif /* end of SETH_NAPI*/
-
 /*
  * Device instance data.
  */
@@ -119,13 +118,15 @@ typedef struct SEth {
 
 #ifdef SETH_NAPI
        atomic_t rx_busy;
+       struct napi_struct napi; /* napi instance */
        struct timer_list rx_timer;
+#endif /* SETH_NAPI */
 
+#ifdef CONFIG_SETH_OPT
        atomic_t txpending;     /* seth tx resend count*/
        struct timer_list tx_timer;
-       struct napi_struct napi; /* napi instance */
+#endif
        struct seth_dtrans_stats dt_stats; /* record data_transfer statistics*/
-#endif /* SETH_NAPI */
 } SEth;
 
 #ifdef CONFIG_DEBUG_FS
@@ -136,6 +137,7 @@ static int seth_debugfs_mknod(void *root, void * data);
 
 #ifdef SETH_NAPI
 static void seth_rx_timer_handler(unsigned long data);
+#endif
 
 static inline void seth_dt_stats_init(struct seth_dtrans_stats * stats)
 {
@@ -275,6 +277,7 @@ static inline void pkt_seq_print(void *data)
        }
 }
 
+#ifdef SETH_NAPI
 static int seth_rx_poll_handler(struct napi_struct * napi, int budget)
 {
        struct SEth *seth = container_of(napi, struct SEth, napi);
@@ -363,7 +366,8 @@ static int seth_rx_poll_handler(struct napi_struct * napi, int budget)
                seth->stats.rx_bytes += skb->len;
                seth->stats.rx_packets++;
 
-               napi_gro_receive(napi, skb);
+               netif_receive_skb(skb);
+
                /* update skb counter*/
                skb_cnt++;
        }
@@ -600,7 +604,9 @@ seth_handler (int event, void* data)
                        break;
                case SBLOCK_NOTIFY_RECV:
                        SETH_DEBUG ("SBLOCK_NOTIFY_RECV is received\n");
+#ifdef SETH_NAPI
                        del_timer(&seth->rx_timer);
+#endif
                        seth_rx_handler(seth);
                        break;
                case SBLOCK_NOTIFY_STATUS:
@@ -672,6 +678,7 @@ seth_tx_pkt(void* data, struct sk_buff* skb)
        return SETH_TX_SUCCESS;
 }
 
+#ifdef CONFIG_SETH_OPT
 static void seth_tx_flush(unsigned long data)
 {
        int ret;
@@ -688,6 +695,7 @@ static void seth_tx_flush(unsigned long data)
                atomic_set(&seth->txpending, 0);
        }
 }
+#endif
 
 /*
  * Transmit interface
@@ -723,8 +731,10 @@ seth_start_xmit (struct sk_buff* skb, struct net_device* dev)
                /* if there are no available sblks, enter flow control */
                seth->txstate = DEV_OFF;
                netif_stop_queue(dev);
+#ifdef CONFIG_SETH_OPT
                /* anyway, flush the stored sblks */
                seth_tx_flush((unsigned long)dev);
+#endif
                return NETDEV_TX_BUSY;
        } else if (SETH_TX_INVALID_BLK == ret) {
                return NETDEV_TX_OK;
@@ -949,13 +959,15 @@ static int seth_probe(struct platform_device *pdev)
 
 #ifdef SETH_NAPI
        atomic_set(&seth->rx_busy, 0);
+       init_timer(&seth->rx_timer);
+#endif
+
+#ifdef CONFIG_SETH_OPT
        atomic_set(&seth->txpending, 0);
 
-       init_timer(&seth->rx_timer);
        init_timer(&seth->tx_timer);
-       seth_dt_stats_init(&seth->dt_stats);
 #endif
-
+       seth_dt_stats_init(&seth->dt_stats);
        netdev->netdev_ops = &seth_ops;
        netdev->watchdog_timeo = 1*HZ;
        netdev->irq = 0;
@@ -1026,6 +1038,9 @@ static int seth_remove (struct platform_device *pdev)
        netif_napi_del(&seth->napi);
 
        del_timer_sync(&seth->rx_timer);
+#endif
+
+#ifdef CONFIG_SETH_OPT
        del_timer_sync(&seth->tx_timer);
 #endif
 
@@ -1087,8 +1102,11 @@ static int seth_debug_show(struct seq_file *m, void *v)
        seq_printf(m, "\nRX statistics:\n");
        seq_printf(m, "rx_pkt_max=%u, rx_pkt_min=%u, rx_sum=%u, rx_cnt=%u\n",
                        stats->rx_pkt_max, stats->rx_pkt_min, stats->rx_sum, stats->rx_cnt);
+#ifdef SETH_NAPI
        seq_printf(m, "rx_alloc_fails=%u, rx_busy=%d\n", stats->rx_alloc_fails, atomic_read(&seth->rx_busy));
-
+#else
+       seq_printf(m, "rx_alloc_fails=%u, rx_busy=%d\n", stats->rx_alloc_fails, 0);
+#endif
        seq_printf(m, "\nTX statistics:\n");
        seq_printf(m, "tx_pkt_max=%u, tx_pkt_min=%u, tx_sum=%u, tx_cnt=%u\n",
                        stats->tx_pkt_max, stats->tx_pkt_min, stats->tx_sum, stats->tx_cnt);
index 1bebcfe..c8b4e4d 100644 (file)
@@ -1435,7 +1435,7 @@ static long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
        } data;
 
        dir = ion_ioctl_dir(cmd);
-       pr_info("%s:cmd[0x%x]dir[0x%x]\n", __func__, cmd, dir);
+       pr_debug("%s:cmd[0x%x]dir[0x%x]\n", __func__, cmd, dir);
 
        if (_IOC_SIZE(cmd) > sizeof(data)) {
                ret = -EINVAL;
@@ -1540,7 +1540,8 @@ static long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
        }
 
 out:
-       pr_info("%s:cmd[0x%x]ret[%d]\n", __func__, cmd, ret);
+       if (ret)
+               pr_info("%s:cmd[0x%x]ret[%d]\n", __func__, cmd, ret);
 
        return ret;
 }
index afc3fd5..ee76e43 100755 (executable)
@@ -35,14 +35,14 @@ static unsigned long user_va2pa(struct mm_struct *mm, unsigned long addr)
 {
        pgd_t *pgd = pgd_offset(mm, addr);
        unsigned long pa = 0;
-       
+
        if (!pgd_none(*pgd)) {
                pud_t *pud = pud_offset(pgd, addr);
                if (!pud_none(*pud)) {
                        pmd_t *pmd = pmd_offset(pud, addr);
                        if (!pmd_none(*pmd)) {
                                pte_t *ptep, pte;
-                               
+
                                ptep = pte_offset_map(pmd, addr);
                                pte = *ptep;
                                if (pte_present(pte))
@@ -51,7 +51,7 @@ static unsigned long user_va2pa(struct mm_struct *mm, unsigned long addr)
                        }
                }
        }
-       
+
        return pa;
 }
 
@@ -1065,7 +1065,7 @@ static long sprd_heap_ioctl(struct ion_client *client, unsigned int cmd,
                        sprd_iova_free(IOMMU_MM, data.iova_addr, data.iova_size);
                        return -EFAULT;
                }
-               pr_info("%s:cmd[%d][0x%lx %d]\n", __func__, cmd, data.iova_addr, data.iova_size);
+               pr_debug("%s:cmd[%d][0x%lx %d]\n", __func__, cmd, data.iova_addr, data.iova_size);
                break;
        }
        case ION_SPRD_CUSTOM_MM_UNMAP:
@@ -1080,7 +1080,7 @@ static long sprd_heap_ioctl(struct ion_client *client, unsigned int cmd,
                        return -EFAULT;
                }
 
-               pr_info("%s:cmd[%d][0x%lx %d]\n", __func__, cmd, data.iova_addr, data.iova_size);
+               pr_debug("%s:cmd[%d][0x%lx %d]\n", __func__, cmd, data.iova_addr, data.iova_size);
 
                handle = ion_import_dma_buf(client, data.fd_buffer);
 
@@ -1122,24 +1122,24 @@ static long sprd_heap_ioctl(struct ion_client *client, unsigned int cmd,
        {
                int ret = -1;
                struct ion_fence_data data;
-               
+
                if (copy_from_user(&data, (void __user *)arg, sizeof(data))) {
                        pr_err("FENCE_CREATE user data is err\n");
                        return -EFAULT;
                }
-               
+
                ret = sprd_fence_build(&data);
                if (ret != 0) {
                        pr_err("sprd_fence_build failed\n");
                        return -EFAULT;
                }
-               
+
                if (copy_to_user((void __user *)arg, &data, sizeof(data))) {
                        sprd_fence_destroy(&data);
                        pr_err("copy_to_user fence failed\n");
                        return -EFAULT;
                }
-               
+
                break;
     }
        case ION_SPRD_CUSTOM_FENCE_SIGNAL:
@@ -1152,13 +1152,13 @@ static long sprd_heap_ioctl(struct ion_client *client, unsigned int cmd,
                }
 
                sprd_fence_signal(&data);
-               
+
                break;
        }
        case ION_SPRD_CUSTOM_FENCE_DUP:
        {
                break;
-               
+
        }
        default:
                pr_err("sprd_ion Do not support cmd: %d\n", cmd);
@@ -1390,7 +1390,7 @@ int sprd_ion_remove(struct platform_device *pdev)
        for (i = 0; i < num_heaps; i++)
                __ion_heap_destroy(heaps[i]);
        kfree(heaps);
-       
+
        close_sprd_sync_timeline();
 
        return 0;
old mode 100644 (file)
new mode 100755 (executable)
index d980aa5..90e44a6
@@ -37,6 +37,7 @@
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
+#include <soc/sprd/sci_glb_regs.h>
 
 #define IRQ_WAKEUP     0
 
@@ -394,35 +395,8 @@ static int serial_sprd_startup(struct uart_port *port)
 {
        int ret = 0;
        unsigned int ien, ctrl1;
-       int rx_count = 130;
-       int tx_count = 130;
-
-       /* FIXME: don't know who change u0cts pin in 88 */
-       serial_sprd_pin_config();
-
-       /* set fifo water mark,tx_int_mark=8,rx_int_mark=1 */
-#if 0                          /* ? */
-       serial_out(port, ARM_UART_CTL2, 0x801);
-#endif
 
        serial_out(port, ARM_UART_CTL2, ((SP_TX_FIFO << 8) | SP_RX_FIFO));
-       /* clear rx fifo */
-       while (serial_in(port, ARM_UART_STS1) & 0x00ff) {
-               serial_in(port, ARM_UART_RXD);
-               if(!(rx_count)){
-                       printk("serial_sprd_startup rx\n");
-                       return -EIO;
-               }
-               rx_count --;
-       }
-       /* clear tx fifo */
-       while (serial_in(port, ARM_UART_STS1) & 0xff00){
-               if(!(tx_count)){
-                       printk("serial_sprd_startup tx\n");
-                       return -EIO;
-               }
-               tx_count --;
-       }
        /* clear interrupt */
        serial_out(port, ARM_UART_IEN, 0x00);
        serial_out(port, ARM_UART_ICLR, 0xffffffff);
@@ -465,10 +439,20 @@ static int serial_sprd_startup(struct uart_port *port)
        return 0;
 }
 
+static void serial_sprd_reset(struct uart_port *port)
+{
+       unsigned long value = 0;
+
+       writel_relaxed((BIT_UART0_SOFT_RST<<(port->line)), REG_AP_APB_APB_RST);
+
+       value = readl_relaxed( REG_AP_APB_APB_RST);
+       value &= ~(BIT_UART0_SOFT_RST<<(port->line));
+       writel_relaxed(value, REG_AP_APB_APB_RST);
+}
+
 static void serial_sprd_shutdown(struct uart_port *port)
 {
-       serial_out(port, ARM_UART_IEN, 0x0);
-       serial_out(port, ARM_UART_ICLR, 0xffffffff);
+       serial_sprd_reset(port);
        free_irq(port->irq, port);
 }
 
index e89bc2c..71432a9 100644 (file)
@@ -47,6 +47,14 @@ static void sec_cable_log(u8 cmd, uint32_t vbus_status)
        case MUIC_OTG_DETACH_NOTI:
                cmd_string = "MUIC_OTG_DETACH_NOTI";
                break;
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+       case MUIC_PS_ATTACH_NOTI:
+               cmd_string = "MUIC_PS_ATTACH_NOTI";
+               break;
+       case MUIC_PS_DETACH_NOTI:
+               cmd_string = "MUIC_PS_DETACH_NOTI";
+               break;
+#endif
        case MUIC_VBUS_NOTI:
                cmd_string = "MUIC_VBUS_NOTI";
                break;
@@ -122,6 +130,14 @@ static int sec_cable_notifier(struct notifier_block *nb,
        case MUIC_OTG_DETACH_NOTI:
                send_otg_notify(o_notify, NOTIFY_EVENT_HOST, DETACH);
                break;
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+       case MUIC_PS_ATTACH_NOTI:
+               send_otg_notify(o_notify, NOTIFY_EVENT_DRIVE_VBUS, ATTACH);
+               break;
+       case MUIC_PS_DETACH_NOTI:
+               send_otg_notify(o_notify, NOTIFY_EVENT_DRIVE_VBUS, DETACH);
+               break;
+#endif
        case MUIC_VBUS_NOTI:
                send_otg_notify(o_notify, NOTIFY_EVENT_VBUSPOWER,
                                (bool)vbus_status);
index 52f2742..ee405f8 100644 (file)
@@ -413,13 +413,13 @@ static void mdnie_cmds_send(struct sprdfb_device *fb_dev, struct mdnie_command *
        int i = 0;
        struct panel_spec *panel = fb_dev->panel;
 
+       for (i = 0; i < len; i++) {
 #ifdef CONFIG_FB_VSYNC_SUPPORT
-        if (fb_dev->ctrl->wait_for_vsync)
-                fb_dev->ctrl->wait_for_vsync(fb_dev);
+               if (fb_dev->ctrl->wait_for_vsync)
+                       fb_dev->ctrl->wait_for_vsync(fb_dev);
 #endif
-
-       for (i = 0; i < len; i++)
                mipi_dcs_send(panel, seq[i].sequence, seq[i].size);
+       }
 
        return;
 }
@@ -1344,7 +1344,7 @@ static struct panel_operations lcd_s6e8aa5x01_mipi_operations = {
 };
 
 static struct timing_rgb lcd_s6e8aa5x01_mipi_timing = {
-       .hfp = 84,  /* unit: pixel */
+       .hfp = 130,  /* unit: pixel */
        .hbp = 90,
        .hsync = 40,
        .vfp = 14, /* unit: line */
index 6350c23..2be4676 100644 (file)
@@ -150,6 +150,8 @@ static int mdnie_write(struct sprdfb_device *fb_dev, struct mdnie_table *table)
 
        if (mdnie->enable)
                ret = mdnie->ops.write(fb_dev, table->tune, MDNIE_CMD_MAX);
+       else
+               dev_err(mdnie->dev, "mdnie state is set to off!!\n");
 
        return ret;
 }
@@ -541,9 +543,11 @@ static int fb_notifier_callback(struct notifier_block *self,
 {
        struct mdnie_lite_device *mdnie;
        struct fb_event *evdata = data;
+       struct sprdfb_device *fb_dev;
        int fb_blank;
 
        mdnie = container_of(self, struct mdnie_lite_device, fb_notif);
+       fb_dev = dev_get_drvdata(mdnie->dev);
 
        switch (event) {
        case FB_EVENT_BLANK:
@@ -561,7 +565,7 @@ static int fb_notifier_callback(struct notifier_block *self,
                mutex_lock(&mdnie->lock);
                mdnie->enable = 1;
                mutex_unlock(&mdnie->lock);
-               /* mdnie_update(fb_dev, mdnie); */
+               mdnie_update(fb_dev, mdnie);
 
        } else if (fb_blank == FB_BLANK_POWERDOWN) {
                mutex_lock(&mdnie->lock);
@@ -609,7 +613,7 @@ int sprdfb_mdnie_reg(struct sprdfb_device *dev, mdnie_w w, mdnie_r r, mdnie_c c)
        }
 
        mdnie->scenario = SCENARIO_UI;
-       mdnie->mode = MODE_STANDARD;
+       mdnie->mode = MODE_AUTO;
        mdnie->accessibility = ACCESSIBILITY_OFF;
        mdnie->outdoor = OUTDOOR_OFF;
 
index 59e642c..469a0eb 100644 (file)
@@ -14,6 +14,8 @@
 #ifndef _SPRDFB_H_
 #define _SPRDFB_H_
 
+#include <uapi/video/sprdfb.h>
+
 #ifdef CONFIG_HAS_EARLYSUSPEND
 #include <linux/earlysuspend.h>
 #endif
@@ -72,33 +74,7 @@ enum{
        RGB_LCD_TIMING_KIND_MAX
 };
 
-
 #ifdef CONFIG_FB_LCD_OVERLAY_SUPPORT
-#define SPRD_LAYER_IMG (0x01)  /*support YUV & RGB*/
-#define SPRD_LAYER_OSD (0x02)  /*support RGB only*/
-#define SPRD_LAYER_BOTH (0x03) /*support RGB only*/
-
-enum {
-       SPRD_DATA_TYPE_YUV422 = 0,
-       SPRD_DATA_TYPE_YUV420,
-       SPRD_DATA_TYPE_YUV400,
-       SPRD_DATA_TYPE_RGB888,
-       SPRD_DATA_TYPE_RGB666,
-       SPRD_DATA_TYPE_RGB565,
-       SPRD_DATA_TYPE_RGB555,
-       SPRD_DATA_TYPE_YUV422_3P = 8,
-       SPRD_DATA_TYPE_YUV420_3P,
-       SPRD_DATA_TYPE_LIMIT
-};
-
-enum{
-       SPRD_IMG_DATA_ENDIAN_B0B1B2B3 = 0,
-       SPRD_IMG_DATA_ENDIAN_B3B2B1B0,
-       SPRD_IMG_DATA_ENDIAN_B2B3B0B1,
-       SPRD_IMG_DATA_ENDIAN_B1B0B3B2,
-       SPRD_IMG_DATA_ENDIAN_LIMIT
-};
-
 enum{
        SPRD_OVERLAY_STATUS_OFF = 0,
        SPRD_OVERLAY_STATUS_ON,
@@ -106,12 +82,6 @@ enum{
        SPRD_OVERLAY_STATUS_MAX
 };
 
-enum{
-       SPRD_OVERLAY_DISPLAY_ASYNC = 0,
-       SPRD_OVERLAY_DISPLAY_SYNC,
-       SPRD_OVERLAY_DISPLAY_MAX
-};
-
 enum {
        SPRD_DISPLAY_UPDATE_NONE = 0,
        SPRD_DISPLAY_UPDATE_PAN,
@@ -119,55 +89,13 @@ enum {
        SPRD_DISPLAY_UPDATE_MAX
 };
 
-typedef struct overlay_rect {
-       uint16_t x;
-       uint16_t y;
-       uint16_t w;
-       uint16_t h;
-} overlay_rect;
-
-typedef struct overlay_info {
-       int layer_index;
-       int data_type;
-       int y_endian;
-       int uv_endian;
-       bool rb_switch;
-       overlay_rect rect;
-       int v_endian;
-} overlay_info;
-
-#if defined (CONFIG_DRM_SPRD) && defined (CONFIG_SPRDFB_USE_GEM_INDEX)
-typedef struct overlay_handle {
-       int handle;
-       int index;
-} overlay_handle;
-#endif
-
-typedef struct overlay_display {
-       int layer_index;
-#ifdef CONFIG_DRM_SPRD
-#ifdef CONFIG_SPRDFB_USE_GEM_INDEX
-       struct overlay_handle osd_handle;
-       struct overlay_handle img_handle;
-#else
-       int osd_handle;
-       int img_handle;
-#endif
-#else
-       unsigned char *osd_buffer;
-       unsigned char *img_buffer;
-#endif
-       int display_mode;
-} overlay_display;
-
 #ifdef SPRDFB_OVERLAY_DEBUG
 struct ov_info {
-       int y_endian;
-       int uv_endian;
        int layer_index;
        unsigned char *osd_buffer;
        unsigned char *img_buffer;
        overlay_rect rect;
+       overlay_endian endian;
 };
 #endif
 
@@ -175,10 +103,9 @@ struct ov_info {
 typedef struct overlay_info32{
        int layer_index;
        int data_type;
-       int y_endian;
-       int uv_endian;
        bool rb_switch;
        overlay_rect rect;
+       overlay_endian endian;
        compat_caddr_t buffer;
 }overlay_info32;
 #endif
index 3cf0bc1..ae45768 100644 (file)
 #define SPRDFB_SATURATION_V         (0x100<<0)//(0x12A<<0)//10-bits
 
 #elif ((defined CONFIG_FB_SCX15) || (defined CONFIG_FB_SCX30G))
-#define SPRDFB_BRIGHTNESS           (0x02<<16)//(0x03<<16)// 9-bits
-#define SPRDFB_CONTRAST             (0x12A<<0) //10-bits
-#define SPRDFB_OFFSET_U             (0x81<<16)//8-bits
-#define SPRDFB_SATURATION_U         (0x123<<0)//(0x12A<<0)//10-bits
-#define SPRDFB_OFFSET_V             (0x82<<16)//8-bits
-#define SPRDFB_SATURATION_V         (0x123<<0)//(0x12A<<0)//10-bits
+#define SPRDFB_BRIGHTNESS           (0x00<<16)//(0x03<<16)// 9-bits
+#define SPRDFB_CONTRAST             (0x100<<0) //10-bits
+#define SPRDFB_OFFSET_U             (0x80<<16)//8-bits
+#define SPRDFB_SATURATION_U         (0x100<<0)//(0x12A<<0)//10-bits
+#define SPRDFB_OFFSET_V             (0x80<<16)//8-bits
+#define SPRDFB_SATURATION_V         (0x100<<0)//(0x12A<<0)//10-bits
 #else
 #define SPRDFB_CONTRAST (74)
 #define SPRDFB_SATURATION (73)
@@ -571,6 +571,8 @@ static void dispc_layer_init(struct fb_var_screeninfo *var)
                reg_val |= (2 << 8);
        }
 
+       reg_val |= BIT(17);
+
        dispc_write(reg_val, DISPC_OSD_CTRL);
 
        /* OSD layer alpha value */
@@ -1570,7 +1572,8 @@ ERROR_REFRESH:
 
 static int32_t sprdfb_dispc_suspend(struct sprdfb_device *dev)
 {
-       pr_info("%s:enable[%d]\n",__func__, dev->enable);
+       pr_info("%s:enable[%d]enabled_layer[0x%x]\n",__func__,
+               dev->enable, dispc_ctx.enabled_layer);
 
        if (0 != dev->enable){
                down(&dev->refresh_lock);
@@ -1621,7 +1624,8 @@ static int32_t sprdfb_dispc_suspend(struct sprdfb_device *dev)
 
 static int32_t sprdfb_dispc_resume(struct sprdfb_device *dev)
 {
-       pr_info("%s:enable[%d]\n",__func__, dev->enable);
+       pr_info("%s:enable[%d]enabled_layer[0x%x]\n",__func__,
+               dev->enable, dispc_ctx.enabled_layer);
 
        if (dev->enable == 0) {
 #ifdef CONFIG_FB_DYNAMIC_CLK_SUPPORT
@@ -1645,9 +1649,14 @@ static int32_t sprdfb_dispc_resume(struct sprdfb_device *dev)
                }
 
                dev->enable = 1;
-               if(dev->panel->is_clean_lcd){
+               if(dev->panel->is_clean_lcd)
                        sprdfb_dispc_clean_lcd(dev);
+
+               if (dispc_ctx.enabled_layer & SPRD_LAYER_OSD) {
+                       dispc_clear_bits(BIT(15), DISPC_OSD_CTRL);
+                       dispc_set_osd_alpha(0xff);
                }
+
                dispc_set_bits(BIT(2), DISPC_INT_EN);
 
 #ifdef CONFIG_FB_ESD_SUPPORT
@@ -1778,42 +1787,42 @@ static int overlay_start(struct sprdfb_device *dev, uint32_t layer_index)
        return 0;
 }
 
-static int overlay_img_configure(struct sprdfb_device *dev, int type, overlay_rect *rect, int y_endian, int uv_endian, int v_endian, bool rb_switch)
+static int overlay_img_configure(struct sprdfb_device *dev, int type, overlay_size *size,
+       overlay_rect *rect, overlay_endian *endian, bool rb_switch)
 {
        uint32_t reg_value;
+       int y_endian = endian->y, u_endian = endian->u, v_endian = endian->v;
 
-       pr_debug("sprdfb: [%s] : %d, (%d, %d,%d,%d)\n", __FUNCTION__, type, rect->x, rect->y, rect->h, rect->w);
-
-
-       if (type >= SPRD_DATA_TYPE_LIMIT) {
+       if (type >= SPRD_DATA_FORMAT_LIMIT) {
                printk(KERN_ERR "sprdfb: Overlay config fail (type error)");
                return -1;
        }
 
-       if((y_endian >= SPRD_IMG_DATA_ENDIAN_LIMIT) || (uv_endian >= SPRD_IMG_DATA_ENDIAN_LIMIT)){
-               printk(KERN_ERR "sprdfb: Overlay config fail (y, uv endian error)");
+       if((y_endian >= SPRD_DATA_ENDIAN_LIMIT) || (u_endian >= SPRD_DATA_ENDIAN_LIMIT) ||
+               (v_endian >= SPRD_DATA_ENDIAN_LIMIT)){
+               printk(KERN_ERR "sprdfb: Overlay config fail (endian error)");
                return -1;
        }
 
        dispc_clear_bits(BIT(2), DISPC_OSD_CTRL);
 
        reg_value = dispc_read(DISPC_IMG_CTRL);
-       reg_value |= (y_endian << 8)|(uv_endian << 10)|(v_endian << 12)|(type << 4);
+       reg_value |= (y_endian << 8)|(u_endian << 10)|(v_endian << 12)|(type << 4);
 
-       if(rb_switch){
+       if(rb_switch)
                reg_value |= (1 << 15);
-       }
+
        dispc_write(reg_value, DISPC_IMG_CTRL);
 
        reg_value = (rect->h << 16) | (rect->w);
        dispc_write(reg_value, DISPC_IMG_SIZE_XY);
 
-       dispc_write(rect->w, DISPC_IMG_PITCH);
+       dispc_write(size->hsize, DISPC_IMG_PITCH);
 
        reg_value = (rect->y << 16) | (rect->x);
        dispc_write(reg_value, DISPC_IMG_DISP_XY);
 
-       if(type < SPRD_DATA_TYPE_RGB888) {
+       if(type < SPRD_DATA_FORMAT_RGB888) {
                dispc_write(1, DISPC_Y2R_CTRL);
 #ifndef CONFIG_FB_SCX35
                dispc_write(SPRDFB_BRIGHTNESS|SPRDFB_CONTRAST, DISPC_Y2R_Y_PARAM);
@@ -1845,18 +1854,18 @@ static int overlay_img_configure(struct sprdfb_device *dev, int type, overlay_re
        return 0;
 }
 
-static int overlay_osd_configure(struct sprdfb_device *dev, int type, overlay_rect *rect, int y_endian, int uv_endian, bool rb_switch)
+static int overlay_osd_configure(struct sprdfb_device *dev, int type, overlay_size *size,
+               overlay_rect *rect, overlay_endian *endian, bool rb_switch)
 {
        uint32_t reg_value;
+       int y_endian = endian->y;
 
-       pr_debug("sprdfb: [%s] : %d, (%d, %d,%d,%d)\n", __FUNCTION__, type, rect->x, rect->y, rect->h, rect->w);
-
-       if ((type >= SPRD_DATA_TYPE_LIMIT) || (type <= SPRD_DATA_TYPE_YUV400)) {
+       if ((type >= SPRD_DATA_FORMAT_LIMIT) || (type <= SPRD_DATA_FORMAT_YUV400)) {
                printk(KERN_ERR "sprdfb: Overlay config fail (type error)");
                return -1;
        }
 
-       if(y_endian >= SPRD_IMG_DATA_ENDIAN_LIMIT ){
+       if(y_endian >= SPRD_DATA_ENDIAN_LIMIT ){
                printk(KERN_ERR "sprdfb: Overlay config fail (rgb endian error)");
                return -1;
        }
@@ -1872,17 +1881,11 @@ static int overlay_osd_configure(struct sprdfb_device *dev, int type, overlay_re
        reg_value = (rect->h << 16) | (rect->w);
        dispc_write(reg_value, DISPC_OSD_SIZE_XY);
 
-       if ((strncmp(current->comm, "Xorg", 4) == 0))
-               dispc_write(ALIGN(rect->w, 32), DISPC_OSD_PITCH);
-       else {
-               dispc_write(rect->w, DISPC_OSD_PITCH);
-               pr_info("DISPC_OSD_PITCH:bypass:align\n");
-       }
+       dispc_write(size->hsize, DISPC_OSD_PITCH);
 
        reg_value = (rect->y << 16) | (rect->x);
        dispc_write(reg_value, DISPC_OSD_DISP_XY);
 
-
        pr_debug("sprdfb: DISPC_OSD_CTRL: 0x%x\n", dispc_read(DISPC_OSD_CTRL));
        pr_debug("sprdfb: DISPC_OSD_BASE_ADDR: 0x%x\n", dispc_read(DISPC_OSD_BASE_ADDR));
        pr_debug("sprdfb: DISPC_OSD_SIZE_XY: 0x%x\n", dispc_read(DISPC_OSD_SIZE_XY));
@@ -1933,16 +1936,16 @@ static int32_t sprdfb_dispc_enable_overlay(struct sprdfb_device *dev, struct ove
                goto ERROR_ENABLE_OVERLAY;
        }
 
-       pr_info("%s:layer[%d]type[%d]endian[%d %d]rect[%d %d %d %d]\n",
+       pr_info("%s:layer[%d]type[%d]sz[%d %d]r[%d %d %d %d]endian[%d %d %d]\n",
                "set_ovl",  info->layer_index, info->data_type,
-               info->y_endian, info->uv_endian,
-               info->rect.x, info->rect.y, info->rect.w, info->rect.h);
+               info->size.hsize, info->size.vsize,
+               info->rect.x, info->rect.y, info->rect.w, info->rect.h,
+               info->endian.y, info->endian.u, info->endian.v);
        dev->dbg_cnt = 5;
 
 #ifdef SPRDFB_OVERLAY_DEBUG
-       dev->overlay_data.y_endian = info->y_endian;
-       dev->overlay_data.uv_endian = info->uv_endian;
        dev->overlay_data.rect = info->rect;
+       dev->overlay_data.endian = info->endian;
 #endif
 
        down(&dev->refresh_lock);
@@ -1968,15 +1971,19 @@ static int32_t sprdfb_dispc_enable_overlay(struct sprdfb_device *dev, struct ove
        }
 #endif
        if (SPRD_LAYER_IMG == info->layer_index) {
-               result = overlay_img_configure(dev, info->data_type, &(info->rect), info->y_endian, info->uv_endian, info->v_endian, info->rb_switch);
+               result = overlay_img_configure(dev, info->data_type, &info->size, &info->rect,
+                       &info->endian, info->rb_switch);
        } else if (SPRD_LAYER_OSD == info->layer_index) {
-               result = overlay_osd_configure(dev, info->data_type, &(info->rect), info->y_endian, info->uv_endian, info->rb_switch);
+               result = overlay_osd_configure(dev, info->data_type, &info->size, &info->rect,
+                       &info->endian, info->rb_switch);
        } else if (SPRD_LAYER_BOTH == info->layer_index) {
-               result = overlay_img_configure(dev, info->data_type, &(info->rect), info->y_endian, info->uv_endian, info->v_endian, info->rb_switch);
-               result = overlay_osd_configure(dev, info->data_type, &(info->rect), info->y_endian, info->uv_endian, info->rb_switch);
-       } else {
+               result = overlay_img_configure(dev, info->data_type, &info->size, &info->rect,
+                       &info->endian, info->rb_switch);
+               result = overlay_osd_configure(dev, info->data_type, &info->size, &info->rect,
+                       &info->endian, info->rb_switch);
+       } else
                printk(KERN_ERR "sprdfb: sprdfb_dispc_enable_overlay fail. (invalid layer index)\n");
-       }
+
        if (0 != result) {
                result = -1;
                goto ERROR_ENABLE_OVERLAY;
@@ -2151,15 +2158,15 @@ static int32_t sprdfb_dispc_display_overlay(struct sprdfb_device *dev, struct ov
                dispc_write((uint32_t)img_buffer,
                                        DISPC_IMG_Y_BASE_ADDR);
                if (dispc_ctx.overlay_img_info.data_type <
-                                       SPRD_DATA_TYPE_RGB888) {
+                                       SPRD_DATA_FORMAT_RGB888) {
                        uint32_t size = rect->w * rect->h;
                        dispc_write((uint32_t)(img_buffer + size),
                                        DISPC_IMG_UV_BASE_ADDR);
-               } else if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_TYPE_YUV422_3P) {
+               } else if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_FORMAT_YUV422_3P) {
                        uint32_t size = rect->w * rect->h;
                        dispc_write((uint32_t)(img_buffer + size), DISPC_IMG_UV_BASE_ADDR);
                        dispc_write((uint32_t)(img_buffer + size*3/2), DISPC_IMG_V_BASE_ADDR);
-               } else if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_TYPE_YUV420_3P) {
+               } else if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_FORMAT_YUV420_3P) {
                        uint32_t size = rect->w * rect->h;
                        dispc_write((uint32_t)(img_buffer + size), DISPC_IMG_UV_BASE_ADDR);
                        dispc_write((uint32_t)(img_buffer + size*5/4), DISPC_IMG_V_BASE_ADDR);
@@ -2182,7 +2189,7 @@ static int32_t sprdfb_dispc_display_overlay(struct sprdfb_device *dev, struct ov
        dev->frame_count += 1;
        dispc_run(dev);
 
-       if((SPRD_OVERLAY_DISPLAY_SYNC == setting->display_mode) && (SPRDFB_PANEL_IF_DPI != dev->panel_if_type)){
+       if((SPRD_DISPLAY_OVERLAY_SYNC == setting->display_mode) && (SPRDFB_PANEL_IF_DPI != dev->panel_if_type)){
                dispc_ctx.vsync_waiter ++;
                if (dispc_sync(dev) != 0) {/* time out??? disable ?? */
                        printk("sprdfb: sprdfb  do sprd_lcdc_display_overlay  time out!\n");
index b0d4865..ed2e201 100644 (file)
@@ -99,7 +99,12 @@ static long sprdfb_compat_ioctl(struct fb_info *info, unsigned int cmd,
 #ifdef CONFIG_FB_MMAP_CACHED
 static int sprdfb_mmap(struct fb_info *info, struct vm_area_struct *vma);
 #endif
-
+#ifdef CONFIG_FB_ESD_SUPPORT
+struct sprdfb_device *sprd_fb_dev;
+#endif
+#ifdef CONFIG_SPRDFB_MDNIE_LITE_TUNING
+extern int sprdfb_mdnie_reg (struct sprdfb_device *dev, mdnie_w w, mdnie_r r, mdnie_c c);
+#endif
 static struct fb_ops sprdfb_ops = {
        .owner = THIS_MODULE,
        .fb_open = sprdfb_open,
@@ -118,7 +123,25 @@ static struct fb_ops sprdfb_ops = {
        .fb_mmap = sprdfb_mmap,
 #endif
 };
-
+#ifdef CONFIG_FB_ESD_SUPPORT
+void panel_esd_enable (bool enable)
+{
+       if ((enable) && (sprd_fb_dev->enable == 1)) {
+               if (!sprd_fb_dev->ESD_work_start) {
+                       printk("sprdfb: schedule ESD work queue[vblank]\n");
+                       schedule_delayed_work(&sprd_fb_dev->ESD_work,
+                               msecs_to_jiffies(sprd_fb_dev->ESD_timeout_val));
+                       sprd_fb_dev->ESD_work_start = true;
+               }
+       } else {
+               if (sprd_fb_dev->ESD_work_start == true) {
+                       printk("sprdfb: cancel ESD work queue[vblank]\n");
+                       cancel_delayed_work(&sprd_fb_dev->ESD_work);
+                       sprd_fb_dev->ESD_work_start = false;
+               }
+       }
+}
+#endif
 #ifdef CONFIG_FB_MMAP_CACHED
 static int sprdfb_mmap(struct fb_info *info,struct vm_area_struct *vma)
 {
@@ -401,7 +424,6 @@ static int sprdfb_pan_display(struct fb_var_screeninfo *var, struct fb_info *fb)
        return 0;
 }
 
-#include <video/sprd_fb.h>
 static int sprdfb_ioctl(struct fb_info *info, unsigned int cmd,
                        unsigned long arg)
 {
@@ -771,9 +793,10 @@ static ssize_t sprdfb_overlay_info_show(struct device *dev,
                        layer_type,
                        fb_dev->overlay_data.osd_buffer,
                        fb_dev->overlay_data.img_buffer);
-       pos += sprintf(buf+pos, "y_endian[%d], uv_endian[%d], ",
-                       fb_dev->overlay_data.y_endian,
-                       fb_dev->overlay_data.uv_endian);
+       pos += sprintf(buf+pos, "y_endian[%d], u_endian[%d], v_endian[%d] ",
+                       fb_dev->overlay_data.endian.y,
+                       fb_dev->overlay_data.endian.u,
+                       fb_dev->overlay_data.endian.v);
        pos += sprintf(buf+pos, "dst: x[%d], y[%d], w[%d], h[%d]\n",
                        fb_dev->overlay_data.rect.x,
                        fb_dev->overlay_data.rect.y,
@@ -1008,7 +1031,13 @@ static int sprdfb_probe(struct platform_device *pdev)
        dev->check_esd_time = 0;
        dev->reset_dsi_time = 0;
        dev->panel_reset_time = 0;
+       sprd_fb_dev = dev;
+#endif
+#ifdef CONFIG_SPRDFB_MDNIE_LITE_TUNING
+       sprdfb_mdnie_reg(dev, dev->panel->ops->panel_send_mdnie_cmds,
+               NULL, dev->panel->ops->panel_get_color_coordinates);
 #endif
+
 #ifdef CONFIG_SLEEP_MONITOR
        sleep_monitor_register_ops(dev, &sprdfb_sleep_monitor_ops,
                SLEEP_MONITOR_LCD);
index 4b92549..ef1d634 100644 (file)
@@ -50,12 +50,6 @@ extern struct panel_if_ctrl sprdfb_rgb_ctrl;
 extern struct panel_if_ctrl sprdfb_mipi_ctrl;
 #endif
 extern void sprdfb_panel_remove(struct sprdfb_device *dev);
-
-#ifdef CONFIG_SPRDFB_MDNIE_LITE_TUNING
-extern int sprdfb_mdnie_reg (struct sprdfb_device *dev, mdnie_w w, mdnie_r r, mdnie_c c);
-extern void mdnie_state_restore(struct sprdfb_device *fb_dev);
-#endif
-
 #ifdef ENABLE_CLK_HS_ON_INIT
 extern int32_t sprdfb_dsi_hs_ready(struct sprdfb_device *dev);
 #endif
@@ -706,9 +700,6 @@ bool sprdfb_panel_init(struct platform_device *pdev, struct sprdfb_device *dev)
                        return false;
                }
        }
-#ifdef CONFIG_SPRDFB_MDNIE_LITE_TUNING
-       sprdfb_mdnie_reg(dev, dev->panel->ops->panel_send_mdnie_cmds, NULL, dev->panel->ops->panel_get_color_coordinates);
-#endif
 
        if (dev->panel->ops->panel_read_offset)
                dev->panel->ops->panel_read_offset(dev->panel);
@@ -1000,9 +991,7 @@ void sprdfb_panel_resume(struct sprdfb_device *dev, bool from_deep_sleep)
                //step4 clk/data lane enter HS
                panel_ready(dev);
        }
-#ifdef CONFIG_SPRDFB_MDNIE_LITE_TUNING
-       mdnie_state_restore(dev);
-#endif
+
 }
 
 void sprdfb_panel_remove(struct sprdfb_device *dev)
index 6f3ae3a..5f05495 100644 (file)
 #define KERNEL_ONLY_CHIP_DOG 0
 #define KERNEL_WATCHDOG_FEEDER 1
 
-static int feed_period = 3; /* (secs) Default is 3 sec */
-static int ca7_irq_margin = 9; /* (secs) Default is 9 sec */
-static int ca7_margin = 10; /* (secs) Default is 10 sec */
-static int ap_margin = 12; /* (secs) Default is 12 sec */
+#define FEED_CNT 10 /* (counts) Default is 3 */
+#define FEED_PERIOD 3 /* (secs) Default is 3 sec */
+#define CA7_IRQ_MARGIN (FEED_PERIOD * FEED_CNT) /* (secs) Default is 9 sec */
+#define CA7_MARGIN (CA7_IRQ_MARGIN + 1) /* (secs) Default is 10 sec */
+#define AP_MARGIN (FEED_PERIOD * (FEED_CNT + 1)) /* (secs) Default is 12 sec */
 #if KERNEL_ONLY_CHIP_DOG
-static int chip_margin = 8; /* (secs) Default is 8 sec */
+#define CHIP_MARGIN (CA7_IRQ_MARGIN - 1) /* (secs) Default is 8 sec */
 #else
-static int chip_margin = 15; /* (secs) Default is 15 sec */
+#define CHIP_MARGIN (FEED_PERIOD * (FEED_CNT + 2)) /* (secs) Default is 15 sec */
 #endif
+
+static int feed_period = FEED_PERIOD;
+static int ca7_irq_margin = CA7_IRQ_MARGIN;
+static int ca7_margin = CA7_MARGIN;
+static int ap_margin = AP_MARGIN;
+static int chip_margin = CHIP_MARGIN;
 static unsigned long wdt_enabled;
 
 #define wdt_feed_all() FEED_ALL_WDG(chip_margin, ap_margin, ca7_margin, ca7_irq_margin)
index f66b91a..be3b62e 100644 (file)
-:100000000110010000000000A01B0000FF00000024\r
-:10001000020BBE751AFF22FFFFFFFF02155B7E0574\r
-:10002000900074E06F6007EFF0E4900077F09000CC\r
-:1000300074E07001FE900077E004F0C39E50037FEF\r
-:1000400000229000777405F07F0122021681E4FB04\r
-:10005000EB25E025E02474F8120232EB25E025E0E0\r
-:10006000247CF812024B0BBB02E622021009BB01F2\r
-:100070000689828A83E0225002E722BBFE02E32245\r
-:1000800089828A83E49322EF8DF0A4A8F0CF8CF0CC\r
-:10009000A428CE8DF0A42EFE22BC000BBE0029EFBA\r
-:1000A0008DF084FFADF022E4CCF875F008EF2FFF5F\r
-:1000B000EE33FEEC33FCEE9DEC984005FCEE9DFE2D\r
-:1000C0000FD5F0E9E4CEFD22EDF8F5F0EE8420D274\r
-:1000D0001CFEADF075F008EF2FFFED33FD400798E3\r
-:1000E0005006D5F0F222C398FD0FD5F0EA22E88F32\r
-:1000F000F0A4CC8BF0A42CFCE98EF0A42CFC8AF0AC\r
-:10010000EDA42CFCEA8EF0A4CDA8F08BF0A42DCCAD\r
-:100110003825F0FDE98FF0A42CCD35F0FCEB8EF006\r
-:10012000A4FEA9F0EB8FF0A4CFC5F02ECD39FEE4EC\r
-:100130003CFCEAA42DCE35F0FDE43CFC2275F00831\r
-:10014000758200EF2FFFEE33FECD33CDCC33CCC51F\r
-:100150008233C5829BED9AEC99E58298400CF5823A\r
-:10016000EE9BFEED9AFDEC99FC0FD5F0D6E4CEFBAC\r
-:10017000E4CDFAE4CCF9A88222B800C1B90059BA9A\r
-:10018000002DEC8BF084CFCECDFCE5F0CBF97818C8\r
-:10019000EF2FFFEE33FEED33FDEC33FCEB33FB10C2\r
-:1001A000D703994004EB99FB0FD8E5E4F9FA2278DC\r
-:1001B00018EF2FFFEE33FEED33FDEC33FCC933C9EE\r
-:1001C00010D7059BE99A4007EC9BFCE99AF90FD8F8\r
-:1001D000E0E4C9FAE4CCFB2275F010EF2FFFEE3318\r
-:1001E000FEED33FDCC33CCC833C810D7079BEC9A57\r
-:1001F000E899400AED9BFDEC9AFCE899F80FD5F0E0\r
-:10020000DAE4CDFBE4CCFAE4C8F922EB9FF5F0EA9E\r
-:100210009E42F0E99D42F0E89C45F022E8600FEC38\r
-:10022000C313FCED13FDEE13FEEF13FFD8F122E82C\r
-:10023000600FEFC333FFEE33FEED33FDEC33FCD83C\r
-:10024000F122E6FC08E6FD08E6FE08E6FF22E6FBF2\r
-:1002500008E6F908E6FA08E6CBF822ECF608EDF62F\r
-:1002600008EEF608EFF622ECF208EDF208EEF208DE\r
-:10027000EFF222D083D082E493F608740193F6085B\r
-:10028000740293F608740393F6740473D083D082D7\r
-:10029000E493F208740193F208740293F208740371\r
-:1002A00093F27404738A838982E473E4F530E53051\r
-:1002B00025E025E0247CF8C000120232C007745209\r
-:1002C0002530F8E6FFFBE4FAF9F8D0071200DED09B\r
-:1002D0000012024BE53025E025E0247CF8C0001236\r
-:1002E0000232780712020CD00012024BE53025E0F2\r
-:1002F00025E0247CF8120232EC4D4E4F6076E5305A\r
-:1003000025E025E0246CF8120232E53025E025E0F6\r
-:10031000247CF812023EC31201FB50037F0322E546\r
-:100320003025E025E0246CF812023EC000E53025BF\r
-:10033000E025E0247CF8120232D000C3EF9BF534B4\r
-:10034000EE9AF533ED99F532EC98F531E47FFF7EC6\r
-:10035000FFFDFCAB34AA33A932A831C31201FB4024\r
-:10036000037F0322E53025E02400F8E533F208E5B9\r
-:1003700034F28015E530C39402500BE53025E024BB\r
-:1003800008F8E4F208F27F03220530E530640260E9\r
-:100390000302029EE4F530E53025E02404F8E2FE95\r
-:1003A00008E2FFE53025E02400F8E2FC08E2FDD396\r
-:1003B0009FEC9E401EE53025E02404F8E2FE08E2B2\r
-:1003C000FFC3ED9FFFEC9EFEE48F388E37F536F5C8\r
-:1003D000358009E4F538F537F536F535AF38AE3701\r
-:1003E000AD36AC35780712021F8F388E378D368CBC\r
-:1003F00035900074E070447F03FEFDFCAB38AA37F3\r
-:10040000A936A8351200DEE53025E025E02414F8F1\r
-:10041000E2FB08E2F908E2FA08E2CBF8EB2FFFEA88\r
-:100420003EFEE93DFDE83CFC780212020CE5302579\r
-:10043000E025E02414F81202578033E53025E0254A\r
-:10044000E02414F8E2FC08E2FD08E2FE08E22538A8\r
-:10045000FFEE3537FEED3536FDEC3535FC78011213\r
-:10046000020CE53025E025E02414F8120257E530AF\r
-:1004700025E025E02414F8E2FC08E2FD08E2FE088D\r
-:10048000E2FF780712020CE53025E02408F8EEF2CE\r
-:1004900008EFF20530E530640260030203877F074E\r
-:1004A000228E328F33E4F535F536F537900087E04C\r
-:1004B000F536A3E0F537E4F534E5187016900077CB\r
-:1004C000E0B4050FD3900091E09400900090E09488\r
-:1004D00000401EE53425E02448F8E4F208F2E53453\r
-:1004E00025E025E0243CF812027C00000000020513\r
-:1004F000A8E53425E02449F9E3700219E3701AE510\r
-:100500003425E02400F8E2FE08E2FFE53425E0248B\r
-:1005100044F8EEF208EFF28057E53425E02444F881\r
-:10052000E2FE08E2FFE53425E02400F8E2FC08E200\r
-:10053000FD121A7ED3EF9537EE95364033E534251C\r
-:10054000E02400F8E2FE08E2FFE53425E02444F868\r
-:10055000EEF208EFF2E53425E02448F8E4F208F280\r
-:10056000E53425E025E0243CF812027C0000000080\r
-:10057000E53425E02400F8E2FE08E2FFE53425E05A\r
-:1005800025E0243CF8C000E2FB08E2F908E2FA08A2\r
-:10059000E2CBF8E4FCFDEB2FFFEA3EFEED39FDEC8B\r
-:1005A00038FCD000120257E53425E02448F808E270\r
-:1005B0002401F218E23400F20534E534C394025009\r
-:1005C000030204A9E4F534E53425E02449F9C3E342\r
-:1005D000953319E39532400205350534E534B4020C\r
-:1005E000E6E5356402600302068574FF900089F039\r
-:1005F000A3F0E4A3F0A3F0F534E53425E02448F8B3\r
-:10060000E2FE08E2FF4E7003020685E4FCFDC00432\r
-:10061000A905AA06AB07E53425E025E0243CF8E26D\r
-:10062000FC08E2FD08E2FE08E2FFD0001201698E3C\r
-:10063000388F39D390008AE09539900089E0953859\r
-:100640004007E538F0A3E539F0C390008CE0953918\r
-:1006500090008BE095385007E538F0A3E539F0E5D8\r
-:100660003425E02404F8E538F208E539F2E53425CC\r
-:10067000E02448F8E4F208F2E53425E025E0243CE3\r
-:10068000F812027C00000000C2080534E534640260\r
-:1006900060030205E922E4F534F533E53325E0256E\r
-:1006A000E0243CF812027C000000000533E533B47E\r
-:1006B00002E91217BAE4F533E53325E025E0243CDE\r
-:1006C000F8C000E2FC08E2FD08E2FE08E2FFE533C4\r
-:1006D00025E025E02474F812023EEF2BFFEE3AFEEF\r
-:1006E000ED39FDEC38FCD0001202570533E533B488\r
-:1006F00002C60534E534C3940540B7E4F533AF349E\r
-:10070000E4FCFDFEC004A905AA06AB07E53325E01D\r
-:1007100025E0243CF8E2FC08E2FD08E2FE08E2FFE6\r
-:10072000D0001201698F388E378D368C35AB38AAE0\r
-:1007300037A936A835C00074522533F8E6FFE4FC2B\r
-:10074000FDFED0001200DE8F388E378D368C357866\r
-:100750000712020C8F388E378D368C35E47FB87EC9\r
-:100760000BFDFCAB38AA37A936A835D31201FB40E4\r
-:1007700030E5382448FFE53734F4FEE53634FFFD34\r
-:10078000E53534FFFCE53325E025E0246CF8120262\r
-:100790004BE53325E02400F8740BF20874B8F280BE\r
-:1007A0001EE53325E025E0246CF81202630000000A\r
-:1007B00000E53325E02400F8E537F208E538F2E5F6\r
-:1007C0003325E025E0243CF812027C00000000E51F\r
-:1007D0003325E02448F8E4F208F2E533C3940250EC\r
-:1007E00033E53325E02400F8E2FE08E2FFE5332597\r
-:1007F000E02404F8EEF208EFF2E53325E02408F8EF\r
-:10080000E4F208F2E53325E025E02414F812027C36\r
-:10081000000000000533E533640260030206EE22A7\r
-:1008200085BA3953BA0F43BA10E4F533E53325E0FE\r
-:1008300025E02474F8120263000000000533E5335C\r
-:10084000B402E975330575ABFF121999E4F534E587\r
-:100850003425E025E02474F8C000120232C004C040\r
-:1008600005C006C00774842534F8E675F003A42497\r
-:1008700098F582E4341AF583E493FB740193FA74D7\r
-:100880000293F9120295A804A905AA06AB07D0079E\r
-:10089000D006D005D004EF2BFFEE3AFEED39FDEC8B\r
-:1008A00038FCD00012024B0534E534C39402409F5B\r
-:1008B000E4F5AB121999E4F534E53425E025E0249C\r
-:1008C00074F8C000120232C004C005C006C007742C\r
-:1008D000842534F8E675F003A42498F582E4341AEC\r
-:1008E000F583E493FB740193FA740293F912029571\r
-:1008F000A804A905AA06AB07D007D006D005D004E6\r
-:10090000C3EF9BFFEE9AFEED99FDEC98FCD0001230\r
-:10091000024B0534E534C39402409E1533E5336041\r
-:1009200003020836E4F534E4753810753727F536D8\r
-:10093000F535AF38AE37AD36AC35780712021F8FBC\r
-:10094000388E378D368C35E53425E025E02474F873\r
-:1009500012023E1201698F388E378D368C357452F3\r
-:100960002534F8A6070534E534B402BB8539BA222C\r
-:10097000E4FD300420ED25E02441F582E43418F54F\r
-:1009800083E493FE740193FFED25E02433F8A6067B\r
-:1009900008A607801EED25E02431F582E43418F521\r
-:1009A00083E493FE740193FFED25E02433F8A6065B\r
-:1009B00008A6070DBD02BBE4FDED25E0241CF8E20E\r
-:1009C000FE08E2FFED25E0240DF9D3E39F19E39E35\r
-:1009D0004016ED25E0240CF8E2FE08E2FFED25E0EC\r
-:1009E000241CF8EEF208EFF2ED25E02433F8E6FEE1\r
-:1009F00008E6FFEEC313FEEF13FFED25E0240DF92B\r
-:100A0000D3E39F19E39E5034ED25E02433F8E6FE4E\r
-:100A100008E6FFED75F008A4245CF8A60608A60712\r
-:100A2000ED25E02433F8E6FE08E625E0FFEE33F896\r
-:100A3000ED25E0241CC8F208EFF2803CED25E0240F\r
-:100A400051F582E43418F583E493FE740193FFEDCD\r
-:100A500025E0240DF9D3E39F19E39E401BED25E02B\r
-:100A6000241CF9E3C313FE09E313FFED75F008A49A\r
-:100A7000245CF8A60608A6070DED640260030209CF\r
-:100A8000A9E4FDED75F008A4245CF8E6FE08E6FF95\r
-:100A9000ED25E02420F8EEF208EFF20DBD02E4228D\r
-:100AA00074FFF537F538E4FFFE020B1CE532C39402\r
-:100AB00009501CE53225E0242AF8E2FC08E2FDE5B5\r
-:100AC0003225E02428F8ECF208EDF2053280DD78DA\r
-:100AD00004E2FD08E2783ACDF208EDF2E4F532E501\r
-:100AE0003225E02428F8E2FC08E2FDC39538EC95B5\r
-:100AF0003750048C378D38D3ED9FEC9E4004AE0404\r
-:100B0000AF050532E532B40AD6E538245AFDE4359E\r
-:100B100037FCD3EF9DEE9C4011D2097F041218D50B\r
-:100B2000900092EEF0A3EFF08002C209E4F535F5F3\r
-:100B300036F532E53225E02408F8E2F53308E2F52F\r
-:100B400034C39536FFE5339535FEE4FCFD7B64FA4E\r
-:100B5000F9F81200DEC006C007E53225E0244CF5A6\r
-:100B600082E43400F583E0FEA3E0FFFBAA06E4F98B\r
-:100B7000F8D007D006120169E53225E02410F8EE1E\r
-:100B8000F208EFF2AE33AF34E4FCFD7B64FAF9F81F\r
-:100B90001200DEC006C007E53225E0244CF582E4F1\r
-:100BA0003400F583E0FEA3E0FFFBAA06E4F9F8D0E9\r
-:100BB00007D006120169E53225E0240CF8EEF208B0\r
-:100BC000EFF20532E53264026003020B2322439FF9\r
-:100BD00004E453C6DFE5C600B5C6F375830075822D\r
-:100BE0000775FD0DE4E5FEF4FF758300758206755B\r
-:100BF000FD0DE4E5FEB50704F59E8003759E0078C3\r
-:100C0000100000D8FC53C6E043C60843C680759662\r
-:100C10000775970375830075820475FD0D85FE8F3A\r
-:100C200075830075820375FD0DE4E5FEF4FF7583A1\r
-:100C30000075820275FD0DE4E5FEB50704F59580AB\r
-:100C40000375958375BE0E5392FE9001007F007E62\r
-:100C500002E4F0A3DFFCDEFA78007F00E4F208DFB4\r
-:100C6000FC78FFE4F6D8FD75818F020C9B02000032\r
-:100C7000020CE0E493A3F8E493A34003F68001F2AE\r
-:100C800008DFF48029E493A3F85407240CC8C33385\r
-:100C9000C4540F4420C8834004F456800146F6DF54\r
-:100CA000E4800B01020408102040809015C6E47E09\r
-:100CB000019360BCA3FF543F30E509541FFEE49349\r
-:100CC000A360010ECF54C025E060A840B8E493A310\r
-:100CD000FAE493A3F8E493A3C8C582C8CAC583CA3B\r
-:100CE000F0A3C8C582C8CAC583CADFE9DEE780BEF3\r
-:100CF000121A467D01E4FF1217F67F011219E57FF3\r
-:100D000001121A29121B92121B851219BF12147B91\r
-:100D10001218A0121909D2AF753E01E53E24FD60FC\r
-:100D20001714602024FE602E146032147003020D2C\r
-:100D3000C324076003020DC612172B121259753E09\r
-:100D400004020DC6D2D8E53F70FC12003E121AB064\r
-:100D5000753E06020DC612029B8F3E8079D390002D\r
-:100D60007DE0940090007CE09400400CA3E024FF20\r
-:100D7000F090007CE034FFF0D3900091E09400907C\r
-:100D80000090E09400400CA3E024FFF0900090E07D\r
-:100D900034FFF0D3900093E09400900092E0940030\r
-:100DA0004016A3E024FFF0900092E034FFF0E070E2\r
-:100DB00002A3E070031214ED900079E004F07006D5\r
-:100DC000900078E004F0121382120F108F3E753EEF\r
-:100DD000048003753E0490008DE0B40124E4784B58\r
-:100DE000F6FF121B92E4F0F51CF51D00051DE51D34\r
-:100DF0007002051CB42CF4E51CB401EF7F01121B3A\r
-:100E0000921210E7020D0B227533077D0774017EE5\r
-:100E100000A833088005C333CE33CED8F9FFACAC7D\r
-:100E2000ECFBE4EF5B7003D533E3ED601D74017EF2\r
-:100E300000A805088005C333CE33CED8F9FFACAE89\r
-:100E4000ECFBE4EF5B70031D80E0AF337401A80797\r
-:100E5000088002C333D8FCF5AC7401A805088002F1\r
-:100E6000C333D8FCFFF5AD8FAE53AACF85BA3C5340\r
-:100E7000BA0F43BA10E4F537F536F535F5341219E3\r
-:100E800099E4F53374842533F8E675F003A42498C7\r
-:100E9000F582E4341AF583E493740193FA740293AF\r
-:100EA000F91202958F3B8E3A8D398C38AB37AA36C2\r
-:100EB000A935A834C31201FB500C853B37853A365F\r
-:100EC0008539358538340533E533C3940240B5AFF1\r
-:100ED00037AE36AD35AC34780212020CE5372FF55B\r
-:100EE00037E5363EF536E5353DF535E5343CF53448\r
-:100EF000AF37AE36AD35FC781012020C8FB3AF377A\r
-:100F0000AE36AD35AC34780812020C8FB28537B1ED\r
-:100F100043AA30853CBA75AC0375ADC075AEC0222E\r
-:100F2000E4F530753108120A901217761212F71292\r
-:100F3000196E900075EFF012000EEF605F7F0112E6\r
-:100F400018D5AD07AC06D390007DE0940090007CEE\r
-:100F5000E094004010ECC4F854F0C868FCEDC454B0\r
-:100F60000F48FD802E300811EDAE047803CEC31378\r
-:100F7000CE13D8F9FDAC06801AC37825E2941E186A\r
-:100F8000E29400500EECC4F854F0C868FCEDC45470\r
-:100F90000F48FDAF05AE041204918003AF312290DB\r
-:100FA0000074E06034E4900080F0A3F090007FE0F3\r
-:100FB00004F0700690007EE004F07F051218D5D38F\r
-:100FC00090007FE09F90007EE09E4014E4FF1216A8\r
-:100FD00025E4900076F07F0322E490007EF0A3F0F9\r
-:100FE000900074E0FF900076E06F602A1216259062\r
-:100FF0000074E0900076F0784CE654F060187F0CB6\r
-:101000001218D5900090EEF0A3EFF0900090E0C39E\r
-:1010100013F0A3E013F0AF3122C0E0C0F0C083C0F2\r
-:1010200082C0D075D008C2CF30CD030210DC30CBE7\r
-:101030004720CC447840A6CEE6FFC394804030756C\r
-:10104000F003EFA42457F582E5F03415F583E4931B\r
-:10105000FB740193FA7402938B238A24F5250525EA\r
-:10106000E5257002052414F912005EF5CE8009789A\r
-:1010700040E62522F8E6F5CE30CC297840E6C39448\r
-:10108000804015AB230525E525AA2470020524140C\r
-:10109000F912005EF5CE8050784006E62522F8E68B\r
-:1010A000F5CE804420CB41AFCE7840E6FE7028BF1D\r
-:1010B00010028034BF2002802FBF5008784FE644D2\r
-:1010C00001F68024BF6008784FE654FEF680197858\r
-:1010D00041A60F18068011EEC3940A50087840E626\r
-:1010E0002441F8A60F784006784B7601D0D0D08204\r
-:1010F000D083D0F0D0E03220CA030211A77841E6B5\r
-:1011000070030211A7E4784BF6F53074412530F8EE\r
-:10111000E6FF74262530F8A60774412530F8E4F67A\r
-:101120000530E530B40AE4784BE6700320CA12E4D7\r
-:10113000F53074262530F8E4F60530E530B40AF2CF\r
-:1011400022E52624E0600F24B0601224607017E4CA\r
-:10115000FF1219E580107F011219E58009E4FF12E2\r
-:101160001AD97851A607E52654F064807049E5271E\r
-:1011700045286043E527FE7C00E42528FFEC3EFE81\r
-:10118000C3EF940AEE9400402EE526540FFDBD0FE8\r
-:1011900019E4F530E53075F008A4245CF8A60608DB\r
-:1011A000A6070530E530B402EB22ED75F008A42463\r
-:1011B0005CF8A60608A60722E4FFFEEE75F008A478\r
-:1011C000245CF8E6FC08E6FDEE25E02411F9C3E313\r
-:1011D0009D19E39C400D7401A806088002C333D812\r
-:1011E000FC42070EBE02D4807DEEC394025077EE1F\r
-:1011F00075F008A4245CF8E6FC08E6FDEE25E02482\r
-:1012000011F9C3E39D19E39C401DEE25E02415F977\r
-:10121000C3E3940A19E39400400D7401A806088002\r
-:1012200002C333D8FC4207EE75F008A4246CF8E63C\r
-:10123000FC08E6FDEE25E02415F9C3E39D19E39CC7\r
-:101240004021EE25E02411F9C3E3940A19E3940048\r
-:101250004011EE2402FD7401A805088002C333D8B2\r
-:10126000FC42070E80838F1822E4F531F532121A02\r
-:1012700063E4900074F0900076F0A3F090007EF0AC\r
-:10128000A3F0A3F0A3F0900094F0A3F0900090F0EE\r
-:10129000A3F0F521F530E53025E0244CF582E43467\r
-:1012A00000F583E0FEA3E0FF900088E02FF09000BF\r
-:1012B00087E03EF00530E530B402DB900087E0FEC9\r
-:1012C000A3E0FF7C007D0A120089900087EEF0A366\r
-:1012D000EFF0120DF81208101206868019E530C3DF\r
-:1012E000940A5012E53025E02428F8740BF20874B3\r
-:1012F000B8F2053080E77F0A1218D590007CEEF036\r
-:10130000A3EFF0121AB022E4F532E53225E024040E\r
-:10131000F8E2FE08E2FFE53225E02400F8E2FC08EE\r
-:10132000E2FDC39FEC9E5048E53225E02405F8C35A\r
-:10133000E29DF53418E29CF533FEAF34E4FCFD7B0E\r
-:1013400064FAF9F81200DEC006C007E53225E02491\r
-:101350004CF582E43400F583E0FEA3E0FFFBAA062F\r
-:10136000E4F9F8D007D0061201698E358F3680096E\r
-:10137000E4F533F534F535F536D3E536940AE5353D\r
-:1013800094004002D2080532E53264026003021282\r
-:10139000FA22E4F530E53075F008A4245EFFE5306C\r
-:1013A00025E0240CF8E2FC08E2FD121AC5E53075D0\r
-:1013B000F008A42460FFE53025E02408F8E2FC08EA\r
-:1013C000E2FD121AC5E53075F008A42462FBC003E3\r
-:1013D000E53025E02400F8E2FE08E2FFE4FCFDE54C\r
-:1013E0003025E025E0246CF812023EEF2BFFEE3AA8\r
-:1013F000FEED39FDEC38FC780412020CAD07AC06AA\r
-:10140000D007121AC50530E530C394024087784FE3\r
-:10141000E6F520227DFF80707864E6FE08E6FFC3D3\r
-:101420007813E29F18E29E40107874E6FE08E6FF0B\r
-:101430007817E29F18E29E504F780CE2FE08E2FF18\r
-:101440007809E22FF53418E23EF533780EE2FE0813\r
-:10145000E2FF780BE22FFF18E23EAB07FAEB25E044\r
-:10146000FFEA33FEC3E5349FE5339E50035305FA8C\r
-:10147000E53425E0FFE53333FEC3EB9FEA9E5008D9\r
-:101480005305F580035305F08D1922E4F530784CAF\r
-:10149000F6FF121AD98F30E530BFFF06784D76017E\r
-:1014A0008004784D76FFE4784EF608F6785176FFA2\r
-:1014B000FFEF25E02431F582E43418F583E493FC52\r
-:1014C000740193FDEF75F008A4245CF8A60408A647\r
-:1014D00005EF75F008A4245EF8E4F608F6EF75F061\r
-:1014E00008A42460F8E4F608F6EF75F008A4246276\r
-:1014F000F8E4F608F60FBF02B875224C22E4FBEBC5\r
-:1015000025E025E0247CF8120232EF2448FFEE3477\r
-:10151000F4FEED34FFFDEC34FFFCEB25E025E02488\r
-:101520006CF812024BEB25E02400F8740BF20874FF\r
-:10153000B8F2EBC394025017EB25E02408F8E4F26C\r
-:1015400008F2EB25E02404F8740BF20874B8F20BEF\r
-:10155000BB02AC22EBC3940A5010EB25E02428F820\r
-:10156000740BF20874B8F20B80EA22C0E0C0F0C03D\r
-:1015700083C082C0D075D000C000C004C005C006C2\r
-:10158000C007C28D758CD8758AF0051FE51F7002E3\r
-:10159000051EAE1EFF7C007D64120089ED4C70219B\r
-:1015A000900078E0FEA3E0FFD3940AEE940040069A\r
-:1015B000A3EEF0A3EFF0900078E4F0A3F0F51EF5B1\r
-:1015C0001FD007D006D005D004D000D0D0D082D014\r
-:1015D00083D0F0D0E03208840102FFFFFFFFFFFF5D\r
-:1015E000048C00000000604A004C022602260064C1\r
-:1015F00000640064006400640064010204080506DD\r
-:1016000007080000000000000000000000000000CB\r
-:1016100000000000000000000000000000000000CA\r
-:1016200000000000000000000000000000000000BA\r
-:10163000000000000090008DE0705504F0E4FEFD15\r
-:10164000FC7401A804088002C333D8FCF9FB9000A5\r
-:1016500076E05BB50313EC2404FA7401A802088059\r
-:1016600002C333D8FC42068003E94206EF5BB503B0\r
-:1016700005E942058011EC2404FB7401A8030880ED\r
-:1016800002C333D8FC42050CBC02B6EE5D784CF6C2\r
-:1016900022C0E0C0F0C083C082C0D075D01053B962\r
-:1016A000FD753D007484253DF8E675F003A424988B\r
-:1016B000F582E4341AF583E493740193FA74029387\r
-:1016C000F9120295E53D25E025E02474F812024B5D\r
-:1016D000053DE53DC3940240CB753F00D0D0D0829C\r
-:1016E000D083D0F0D0E032FE0000FE0008FE0004FF\r
-:1016F000FE000CFE0008FE0010FE000CFE0014FEB2\r
-:101700000010FE001800007400007C00008400003F\r
-:101710008C000018010075010074010076FE0014B1\r
-:10172000FE001C01007801009201008D0100900173\r
-:10173000006401006CFE0020FE0048E4FFFE74849B\r
-:101740002EF8E69018619342070EBE02F1EF42D4E4\r
-:10175000EF42F4EF42E4EFF452DC75AA3B75BA0CA9\r
-:1017600043BA4043B92053B9BF8FB4E4F5B375B25F\r
-:101770004E75B12075BBFF75A950F5AB75AC0375FF\r
-:10178000ADC075AEC0227810E2FE08E2FF8E32F5E1\r
-:10179000337D01ED25E02410F8E2FA08E2FBC39561\r
-:1017A00033EA953250048A328B33D3EB9FEA9E4062\r
-:1017B00004AE02AF030DBD02DA7826E532F208E589\r
-:1017C00033F27824EEF208EFF222121999E4F53997\r
-:1017D00074842539F8E675F003A42498F582E4347E\r
-:1017E0001AF583E493740193FA740293F912029543\r
-:1017F000E53925E025E02474F812024B0539E53976\r
-:10180000C3940240CB22E4FE7C02ECC39402500E4F\r
-:1018100074842CF8E69018619342060C80ECEF601B\r
-:1018200005EE42D48004EEF452D4EEF4FF52F4EE0E\r
-:1018300042E4ED6005EE42EC8003EF52ECEF52DC47\r
-:1018400022002D002D003C003C003C003C003C00F0\r
-:101850003C003C003C003C003C003C003C003C00A8\r
-:101860003C00640064003C003C003C003C003C0048\r
-:101870003C010204081020408007E4FFFEEE75F0F2\r
-:1018800008A4245DF8E624FBFD18E634FFFCEE25F1\r
-:10189000E0240DF9C3E39D19E39C400D7401A806F3\r
-:1018A000088002C333D8FC42070EBE02D08F1B2231\r
-:1018B0007E007F64E4FDED25E02409F582E4341A1E\r
-:1018C000F583E493F4601DED25E0240AF582E43409\r
-:1018D0001AF583E493FCEF2DF582E43EF583ECF0FA\r
-:1018E0000DBD10D222753900753A647B017A00BFB4\r
-:1018F000FF057F017E0022E53A2FF582E43539F5B8\r
-:1019000083E07A00FB90007AE0FCA3E0FDAF037E69\r
-:1019100000120077AA06AB072243F80875CD4053A2\r
-:10192000CC7F43CC4043CC2043CC1043CC0453CC9D\r
-:10193000FD43CB0243CB0153CBBF43E80853E5FC47\r
-:1019400043E30243F50343900343ED0322A907E475\r
-:10195000FDFC74017E00A804088005C333CE33CE9D\r
-:10196000D8F9FFE9FBE4EF5B600D7401A80408807F\r
-:1019700002C333D8FC42050CBC02D7AF05221209C2\r
-:10198000601211A812140412000312186A90007455\r
-:10199000E0700D851832E5195232E51A5232800393\r
-:1019A000851B32AF3212193D2275BF0F00000000B7\r
-:1019B0000000000000000000000000000000D2D87D\r
-:1019C00053B9FD43B901E5B930E1FBE4F5BF22436A\r
-:1019D0008901C28DD2A953B8FDE4F51EF51F900010\r
-:1019E00078F0A3F0A3F0A37464F0758CD8758AF036\r
-:1019F000D28CD2AF22E4FE7D02EDC39402500E746D\r
-:101A0000842DF8E69018619342060D80ECEF600497\r
-:101A1000EE428022EEF45280220002010102010314\r
-:101A2000010402050606060702080A09020A020B5B\r
-:101A3000280C010D030E01FF01EF600543D5048062\r
-:101A40000353D5FB53F5FB53E5FB43E30443ED049C\r
-:101A5000E490008DF022E4F5E3439F10439F02FFE2\r
-:101A60000FBFFFFC539FEF75BE0EE4F5BFF5B975D0\r
-:101A700092762253BAFEE5B920E004E53F6005E521\r
-:101A8000B930E1FBE4F5BF53B9FE53B9FD22AB0712\r
-:101A9000AA06D3EB9DEA9C4007EB9DFFEA9CFE2241\r
-:101AA000C3ED9BFFEC9AFE22FF1AEDFF1B00FF1B0C\r
-:101AB00013FF1B26FF1B39FF1B4CFF1B5FFF1B7215\r
-:101AC00075BF0F43B92053B9FD43BA01753F0143B8\r
-:101AD000B901D2D822AB07AF04AE05C2AFA803A6A6\r
-:101AE00007E804F8A606D2AF22E4FFF582F5837476\r
-:101AF00020FEE493F42FFFA3EEB583F62253B9EF53\r
-:101B0000788DA6B708A6B608A6B5788C1202322240\r
-:101B100053B9EF788DA6EB08A6EA08A6E9788C12EF\r
-:101B200002322253B9EF788DA6F308A6F208A6F187\r
-:101B3000788C1202322253B9EF788DA6FB08A6FAF0\r
-:101B400008A6F9788C1202322243B910788DA6B714\r
-:101B500008A6B608A6B5788C1202322243B91078CE\r
-:101B60008DA6EB08A6EA08A6E9788C120232224379\r
-:101B7000B910788DA6F308A6F208A6F1788C1202A7\r
-:101B8000322243B910788DA6FB08A6FA08A6F97888\r
-:101B90008C12023222C2DA53D80F43D8D0D2D8D214\r
-:101BA000D922EF6003D29222C29222FFFFFFFFFFF1\r
-:00000001FF\r
+:100000000110040000000000C01B0000FF00000001
+:10001000020AD8FF1AE8FF1AFBFF1B0EFF1B21FF85
+:100020001B34FF1B47FF1B5AFF1B6D021BA4E4FB85
+:10003000EB25E025E02480F8120232EB25E025E0F4
+:10004000248CF812024B0BBB03E62202166EEF6003
+:100050000543D504800353D5FB53F5FB53E5FB4320
+:10006000E30443ED04E490009CF02202108CBB01F9
+:100070000689828A83E0225002E722BBFE02E32245
+:1000800089828A83E49322EF8DF0A4A8F0CF8CF0CC
+:10009000A428CE8DF0A42EFE22BC000BBE0029EFBA
+:1000A0008DF084FFADF022E4CCF875F008EF2FFF5F
+:1000B000EE33FEEC33FCEE9DEC984005FCEE9DFE2D
+:1000C0000FD5F0E9E4CEFD22EDF8F5F0EE8420D274
+:1000D0001CFEADF075F008EF2FFFED33FD400798E3
+:1000E0005006D5F0F222C398FD0FD5F0EA22E88F32
+:1000F000F0A4CC8BF0A42CFCE98EF0A42CFC8AF0AC
+:10010000EDA42CFCEA8EF0A4CDA8F08BF0A42DCCAD
+:100110003825F0FDE98FF0A42CCD35F0FCEB8EF006
+:10012000A4FEA9F0EB8FF0A4CFC5F02ECD39FEE4EC
+:100130003CFCEAA42DCE35F0FDE43CFC2275F00831
+:10014000758200EF2FFFEE33FECD33CDCC33CCC51F
+:100150008233C5829BED9AEC99E58298400CF5823A
+:10016000EE9BFEED9AFDEC99FC0FD5F0D6E4CEFBAC
+:10017000E4CDFAE4CCF9A88222B800C1B90059BA9A
+:10018000002DEC8BF084CFCECDFCE5F0CBF97818C8
+:10019000EF2FFFEE33FEED33FDEC33FCEB33FB10C2
+:1001A000D703994004EB99FB0FD8E5E4F9FA2278DC
+:1001B00018EF2FFFEE33FEED33FDEC33FCC933C9EE
+:1001C00010D7059BE99A4007EC9BFCE99AF90FD8F8
+:1001D000E0E4C9FAE4CCFB2275F010EF2FFFEE3318
+:1001E000FEED33FDCC33CCC833C810D7079BEC9A57
+:1001F000E899400AED9BFDEC9AFCE899F80FD5F0E0
+:10020000DAE4CDFBE4CCFAE4C8F922EB9FF5F0EA9E
+:100210009E42F0E99D42F0E89C45F022E8600FEC38
+:10022000C313FCED13FDEE13FEEF13FFD8F122E82C
+:10023000600FEFC333FFEE33FEED33FDEC33FCD83C
+:10024000F122E6FC08E6FD08E6FE08E6FF22E6FBF2
+:1002500008E6F908E6FA08E6CBF822ECF608EDF62F
+:1002600008EEF608EFF622ECF208EDF208EEF208DE
+:10027000EFF222D083D082E493F608740193F6085B
+:10028000740293F608740393F6740473D083D082D7
+:10029000E493F208740193F208740293F208740371
+:1002A00093F27404738A838982E4738E328F33E409
+:1002B000F535F536F537900096E0F536A3E0F537DD
+:1002C000E4F534E518701690008FE0B4060FD39073
+:1002D000009EE0940090009DE09400401EE53425CF
+:1002E000E0245EF8E4F208F2E53425E025E0244C51
+:1002F000F812027C000000000203B2E53425E0247D
+:100300005FF9E3700219E3701AE53425E02400F880
+:10031000E2FE08E2FFE53425E02458F8EEF208EFAB
+:10032000F28057E53425E02458F8E2FE08E2FFE5C4
+:100330003425E02400F8E2FC08E2FD121A91D3EF24
+:100340009537EE95364033E53425E02400F8E2FE9B
+:1003500008E2FFE53425E02458F8EEF208EFF2E574
+:100360003425E0245EF8E4F208F2E53425E025E0E7
+:10037000244CF812027C00000000E53425E0240043
+:10038000F8E2FE08E2FFE53425E025E0244CF8C061
+:1003900000E2FB08E2F908E2FA08E2CBF8E4FCFD2F
+:1003A000EB2FFFEA3EFEED39FDEC38FCD0001202E7
+:1003B00057E53425E0245EF808E22401F218E2341F
+:1003C00000F20534E534C3940250030202B3E4F5AD
+:1003D00034E53425E0245FF9C3E3953319E395321E
+:1003E000400205350534E534B402E6E535640260C3
+:1003F0000302048F74FF900098F0A3F0E4A3F0A32D
+:10040000F0F534E53425E0245EF8E2FE08E2FF4E24
+:10041000700302048FE4FCFDC004A905AA06AB0723
+:10042000E53425E025E0244CF8E2FC08E2FD08E292
+:10043000FE08E2FFD0001201698E388F39D3900098
+:1004400099E09539900098E095384007E538F0A399
+:10045000E539F0C390009BE0953990009AE095381B
+:100460005007E538F0A3E539F0E53425E02406F837
+:10047000E538F208E539F2E53425E0245EF8E4F2E7
+:1004800008F2E53425E025E0244CF812027C000057
+:100490000000C2080534E534640260030203F3225D
+:1004A000121A597D01E4FF1218977F01121A3A7F40
+:1004B0000112003E121B9B121B8E1214E01218CD6B
+:1004C000121936D2AF753E01E53E24FD601D146061
+:1004D0003D24FE700302055E14700302056614706D
+:1004E0000302060C2407600302060F1217181212EB
+:1004F000C99000907401F0A37418F07F0A121902D9
+:10050000900092EEF0A3EFF0753E0402060FD2D8F1
+:10051000E53F70FC12001E900092E07002A3E070B4
+:10052000319000A1E07002A3E07027784BE66401EF
+:10053000702090008CE0540F7018F53F53B9FD43C4
+:10054000CC02900090F0A37422F012176353CCFDFC
+:1005500080139000907401F0A37418F07F0E1219AC
+:10056000028E1C8F1D121AAB753E0602060F120674
+:10057000528F3E02060FD3900093E09400900092B9
+:10058000E09400400CA3E024FFF0900092E034FFE0
+:10059000F0D390009EE0940090009DE09400400C09
+:1005A000A3E024FFF090009DE034FFF0D39000A280
+:1005B000E094009000A1E09400400CA3E024FFF040
+:1005C0009000A1E034FFF0D39000A4E094009000EC
+:1005D000A3E094004017A3E024FFF09000A3E034D0
+:1005E000FFF0E07002A3E07004784B7601D3900036
+:1005F000A0E0940090009FE094004016A3E024FF48
+:10060000F090009FE034FFF0E07002A3E07003126E
+:1006100015521213E7120F988F3E8003753E049017
+:10062000009CE064017034784BF67F081219029048
+:1006300000A3EEF0A3EFF0E4FF121B9BE490009CFC
+:10064000F0F51EF51F00051FE51F7002051EB42CF6
+:10065000F4E51EB401EF7F01121B9B121225020468
+:10066000B822E4F530E53025E025E0248CF8C00020
+:10067000120232C00774522530F8E6FFFBE4FAF9A3
+:10068000F8D0071200DED00012024BE53025E0253D
+:10069000E0248CF8C000120232780712020CD0005D
+:1006A00012024BE53025E025E0248CF8120232ECF2
+:1006B0004D4E4F6076E53025E025E02474F81202B7
+:1006C00032E53025E025E0248CF812023EC3120109
+:1006D000FB50037F0322E53025E025E02474F81267
+:1006E000023EC000E53025E025E0248CF8120232FD
+:1006F000D000C3EF9BF534EE9AF533ED99F532EC6B
+:1007000098F531E47FFF7EFFFDFCAB34AA33A932BC
+:10071000A831C31201FB40037F0322E53025E0240A
+:1007200000F8E533F208E534F28015E530C39403B0
+:10073000500BE53025E0240CF8E4F208F27F0322A8
+:100740000530E53064036003020655E4F530E5301A
+:1007500025E02406F8E2FE08E2FFE53025E024006B
+:10076000F8E2FC08E2FDD39FEC9E401EE53025E058
+:100770002406F8E2FE08E2FFC3ED9FFFEC9EFEE4D4
+:100780008F388E37F536F5358009E4F538F537F5CD
+:1007900036F535AF38AE37AD36AC35780712021FB7
+:1007A0008F388E378D368C35E53025E025E0241ED8
+:1007B000F8E2FC08E2FD08E2FE08E22538FFEE352B
+:1007C00037FEED3536FDEC3535FC780112020CE5CF
+:1007D0003025E025E0241EF8120257E53025E025FB
+:1007E000E0241EF8E2FC08E2FD08E2FE08E2FF78E1
+:1007F0000712020CE53025E0240CF8EEF208EFF2C7
+:100800000530E5306403600302073E7F0722E4F50C
+:1008100034F533E53325E025E0244CF812027C0062
+:100820000000000533E533B403E91217ECE4F533B7
+:10083000E53325E025E0244CF8C000E2FC08E2FDA9
+:1008400008E2FE08E2FFE53325E025E02480F81207
+:10085000023EEF2BFFEE3AFEED39FDEC38FCD00006
+:100860001202570533E533B403C60534E534C394A7
+:100870000540B7E4F533AF34E4FCFDFEC004A90540
+:10088000AA06AB07E53325E025E0244CF8E2FC0896
+:10089000E2FD08E2FE08E2FFD0001201698F388E07
+:1008A000378D368C35AB38AA37A936A835C00074D9
+:1008B000522533F8E6FFE4FCFDFED0001200DE8F87
+:1008C000388E378D368C35780712020C8F388E377C
+:1008D0008D368C35E47FB87E0BFDFCAB38AA37A98A
+:1008E00036A835D31201FB4030E5382448FFE53700
+:1008F00034F4FEE53634FFFDE53534FFFCE5332501
+:10090000E025E02474F812024BE53325E02400F8DA
+:10091000740BF20874B8F2801EE53325E025E0245C
+:1009200074F812026300000000E53325E02400F8AB
+:10093000E537F208E538F2E53325E025E0244CF808
+:1009400012027C00000000E53325E0245EF8E4F2AA
+:1009500008F2E533C394035033E53325E02400F86F
+:10096000E2FE08E2FFE53325E02406F8EEF208EFA8
+:10097000F2E53325E0240CF8E4F208F2E53325E053
+:1009800025E0241EF812027C000000000533E53348
+:10099000640360030208662285BA3953BA0F43BA6A
+:1009A00010E4F533E53325E025E02480F8120263F6
+:1009B000000000000533E533B403E975330575AB7A
+:1009C000FF1219F4E4F534E53425E025E02480F83D
+:1009D000C000120232C004C005C006C007749825CA
+:1009E00034F8E675F003A42403F582E43400F583BB
+:1009F000E493FB740193FA740293F9120295A8042C
+:100A0000A905AA06AB07D007D006D005D004EF2B66
+:100A1000FFEE3AFEED39FDEC38FCD00012024B053A
+:100A200034E534C39403409FE4F5AB1219F4E4F5C4
+:100A300034E53425E025E02480F8C000120232C0FD
+:100A400004C005C006C00774982534F8E675F003A5
+:100A5000A42403F582E43400F583E493FB7401934A
+:100A6000FA740293F9120295A804A905AA06AB0725
+:100A7000D007D006D005D004C3EF9BFFEE9AFEED61
+:100A800099FDEC98FCD00012024B0534E534C39478
+:100A900003409E1533E53360030209AEE4F534E408
+:100AA000753810753727F536F535AF38AE37AD36B2
+:100AB000AC35780712021F8F388E378D368C35E5AE
+:100AC0003425E025E02480F812023E1201698F38B7
+:100AD0008E378D368C3574522534F8A6070534E5EB
+:100AE00034B403BB8539BA22439F04E453C6DFE51F
+:100AF000C600B5C6F375830075820775FD0DE4E584
+:100B0000FEF4FF75830075820675FD0DE4E5FEB504
+:100B10000704F59E8003759E0078100000D8FC53F2
+:100B2000C6E043C60843C68075960775970575836A
+:100B30000075820475FD0DE5FD04F58F7583007564
+:100B4000821175FD0DE4E5FEF4FF758300758210DA
+:100B500075FD0DE4E5FEB50705F595020B7B758384
+:100B60000075820375FD0DE4E5FEF4FF75830075E5
+:100B7000820275FD0DE4E5FEB50708242DF59540CC
+:100B800007800875959680037595FF75BE0E539284
+:100B9000FE9001007F007E02E4F0A3DFFCDEFA7825
+:100BA000007F00E4F208DFFC78FFE4F6D8FD7581F1
+:100BB000A3020BE2020000020490E493A3F8E49382
+:100BC000A34003F68001F208DFF48029E493A3F840
+:100BD0005407240CC8C333C4540F4420C8834004B2
+:100BE000F456800146F6DFE4800B01020408102071
+:100BF0004080901618E47E019360BCA3FF543F3000
+:100C0000E509541FFEE493A360010ECF54C025E014
+:100C100060A840B8E493A3FAE493A3F8E493A3C8CC
+:100C2000C582C8CAC583CAF0A3C8C582C8CAC5835D
+:100C3000CADFE9DEE780BEE4FD300420ED25E024D4
+:100C400038F582E43418F583E493FE740193FFEDE4
+:100C500025E02433F8A60608A607801EED25E0242B
+:100C600028F582E43418F583E493FE740193FFEDD4
+:100C700025E02433F8A60608A6070DBD02BBE4FD57
+:100C8000ED25E0242AF8E2FE08E2FFED25E024133A
+:100C9000F9D3E39F19E39E4016ED25E02412F8E214
+:100CA000FE08E2FFED25E0242AF8EEF208EFF2ED6F
+:100CB00025E02433F8E6FE08E6FFEEC313FEEF134B
+:100CC000FFED25E02413F9D3E39F19E39E5034EDA3
+:100CD00025E02433F8E6FE08E6FFED75F008A424CD
+:100CE0005CF8A60608A607ED25E02433F8E6FE0822
+:100CF000E625E0FFEE33F8ED25E0242AC8F208EF00
+:100D0000F2803CED25E02448F582E43418F583E4D4
+:100D100093FE740193FFED25E02413F9D3E39F19AB
+:100D2000E39E401BED25E0242AF9E3C313FE09E30B
+:100D300013FFED75F008A4245CF8A60608A6070DBD
+:100D4000ED64026003020C70E4FDED75F008A4246C
+:100D50005CF8E6FE08E6FFED25E02430F8EEF20848
+:100D6000EFF20DBD02E42274FFF537F538E4FFFE23
+:100D7000F532E53225E0243AF8E2FC08E2FDE532FE
+:100D800025E02438F8ECF208EDF20532E532B4093A
+:100D9000E17804E2FD08E2784ACDF208EDF2E4F5EC
+:100DA00032E53225E02438F8E2FC08E2FDC395384C
+:100DB000EC953750048C378D38D3ED9FEC9E400472
+:100DC000AE04AF050532E532B40AD6E538245AFD43
+:100DD000E43537FCD3EF9DEE9C4011D2097F04121D
+:100DE000190290009FEEF0A3EFF08002C209E4F533
+:100DF00035F536F532E53225E0240CF8E2F5330816
+:100E0000E2F534C39536FFE5339535FEE4FCFD7B12
+:100E100064FAF9F81200DEC006C007E53225E024C6
+:100E200064F582E43400F583E0FEA3E0FFFBAA064C
+:100E3000E4F9F8D007D006120169E53225E024185C
+:100E4000F8EEF208EFF2AE33AF34E4FCFD7B64FA67
+:100E5000F9F81200DEC006C007E53225E02464F58B
+:100E600082E43400F583E0FEA3E0FFFBAA06E4F988
+:100E7000F8D007D006120169E53225E02412F8EE19
+:100E8000F208EFF20532E53264026003020DE5225A
+:100E90007533077D0774017E00A833088005C333CE
+:100EA000CE33CED8F9FFACACECFBE4EF5B7003D5EE
+:100EB00033E3ED601D74017E00A805088005C3338F
+:100EC000CE33CED8F9FFACAEECFBE4EF5B70031D84
+:100ED00080E0AF337401A807088002C333D8FCF563
+:100EE000AC7401A805088002C333D8FCFFF5AD8FB0
+:100EF000AE53AACF85BA3C53BA0F43BA10E4F537C4
+:100F0000F536F535F5341219F4E4F53374982533D4
+:100F1000F8E675F003A42403F582E43400F583E4D5
+:100F200093740193FA740293F91202958F3B8E3AEF
+:100F30008D398C38AB37AA36A935A834C31201FBDA
+:100F4000500C853B37853A3685393585383405333D
+:100F5000E533C3940340B5AF37AE36AD35AC347826
+:100F60000212020CE5372FF537E5363EF536E5354A
+:100F70003DF535E5343CF534AF37AE36AD35FC786C
+:100F80001012020C8FB3AF37AE36AD35AC347808E3
+:100F900012020C8FB28537B143AA30853CBA75ACCA
+:100FA0000375ADC075AEC022E4F530753108120D81
+:100FB000571217A812135C1219C990008DEFF01286
+:100FC000199BEF605F7F01121902AD07AC06D39049
+:100FD0000093E09400900092E094004010ECC4F87C
+:100FE00054F0C868FCEDC4540F48FD802E30081141
+:100FF000EDAE047803CEC313CE13D8F9FDAC068052
+:101000001AC37835E2941E18E29400500EECC4F82E
+:1010100054F0C868FCEDC4540F48FDAF05AE04128F
+:10102000029B8003AF312290008CE0602F7F05127D
+:101030001902D3900095E09F900094E09E400DE44B
+:10104000FF1215BCE490008EF07F0322900095E023
+:1010500004F07006900094E004F08007E49000949F
+:10106000F0A3F090008CE0FF90008EE06F602A12F9
+:1010700015BC90008CE090008EF0784CE654F06047
+:10108000187F0C12190290009DEEF0A3EFF0900073
+:101090009DE0C313F0A3E013F0AF3122C0E0C0F035
+:1010A000C083C082C0D075D008C2CF30CD0302113A
+:1010B0006930CB4720CC447840A6CEE6FFC394806D
+:1010C000403075F003EFA42444F582E5F03415F5C3
+:1010D00083E493FB740193FA7402938B238A24F5BF
+:1010E000250525E5257002052414F912005EF5CECC
+:1010F00080097840E62522F8E6F5CE30CC29784004
+:10110000E6C394804015AB230525E525AA2470028B
+:10111000052414F912005EF5CE8050784006E625CD
+:1011200022F8E6F5CE804420CB41AFCE7840E6FEF3
+:101130007028BF10028034BF2002802FBF50087873
+:101140004FE64401F68024BF6008784FE654FEF66F
+:1011500080197841A60F18068011EEC3940A500832
+:101160007840E62441F8A60F784006784B76019047
+:1011700000A1E51CF0A3E51DF0D0D0D082D083D033
+:10118000F0D0E032E4FFFEEE75F008A4245CF8E64F
+:10119000FC08E6FDEE25E02419F9C3E39D19E39C64
+:1011A000400D7401A806088002C333D8FC42070E24
+:1011B000BE02D4807DEEC394025077EE75F008A491
+:1011C000245CF8E6FC08E6FDEE25E02419F9C3E30B
+:1011D0009D19E39C401DEE25E0241DF9C3E3940A0C
+:1011E00019E39400400D7401A806088002C333D8A7
+:1011F000FC4207EE75F008A4246CF8E6FC08E6FD56
+:10120000EE25E0241DF9C3E39D19E39C4021EE2562
+:10121000E02419F9C3E3940A19E394004011EE2481
+:1012200002FD7401A805088002C333D8FC42070EF2
+:1012300080838F182220CA030212C87841E6700307
+:101240000212C8E4F53074412530F8E6FF74262513
+:1012500030F8A60774412530F8E4F60530E530B4DF
+:101260000AE4E52624E0600F24B0601224607017C1
+:10127000E4FF121A3A80107F01121A3A8009E4FF43
+:10128000121AD47851A607E52654F064807049E517
+:101290002745286043E527FE7C00E42528FFEC3E37
+:1012A000FEC3EF940AEE9400402EE526540FFDBDD8
+:1012B0000F19E4F530E53075F008A4245CF8A606B3
+:1012C00008A6070530E530B402EB22ED75F008A45E
+:1012D000245CF8A60608A60722E4F531F532121AB6
+:1012E00076E490008CF090008EF0A3F0900094F0E3
+:1012F000A3F090009DF0A3F0F521F530E53025E056
+:101300002464F582E43400F583E0FEA3E0FF90005E
+:1013100097E02FF0900096E03EF00530E530B40203
+:10132000DB900096E0FEA3E0FF7C007D0A120089BE
+:10133000900096EEF0A3EFF0120E801209881207CB
+:10134000FEE4F530E53025E02438F8740BF208743B
+:10135000B8F20530E530B40AEBE49000A1F0A3F058
+:10136000A3F0A3F0784B7601121AAB22E4F532E534
+:101370003225E02406F8E2FE08E2FFE53225E0240B
+:1013800000F8E2FC08E2FDC39FEC9E5048E53225E0
+:10139000E02407F8C3E29DF53418E29CF533FEAF74
+:1013A00034E4FCFD7B64FAF9F81200DEC006C007E5
+:1013B000E53225E02464F582E43400F583E0FEA301
+:1013C000E0FFFBAA06E4F9F8D007D0061201698E07
+:1013D000358F368009E4F533F534F535F536D3E548
+:1013E00036940AE53594004002D2080532E53264AD
+:1013F00002600302135F22E4F530E53075F008A4C3
+:10140000245EFFE53025E02412F8E2FC08E2FD123C
+:101410001AC0E53075F008A42460FFE53025E0240B
+:101420000CF8E2FC08E2FD121AC0E53075F008A4E1
+:101430002462FBC003E53025E02400F8E2FE08E268
+:10144000FFE4FCFDE53025E025E02474F812023EBF
+:10145000EF2BFFEE3AFEED39FDEC38FC780412027A
+:101460000CAD07AC06D007121AC00530E530C394A6
+:10147000024087784FE6F520227DFF80707864E691
+:10148000FE08E6FFC3781BE29F18E29E40107874C6
+:10149000E6FE08E6FF781FE29F18E29E504F7810A4
+:1014A000E2FE08E2FF780DE22FF53418E23EF53354
+:1014B0007812E2FE08E2FF780FE22FFF18E23EAB5F
+:1014C00007FAEB25E0FFEA33FEC3E5349FE5339EE0
+:1014D00050035305FAE53425E0FFE53333FEC3EB53
+:1014E0009FEA9E50085305F580035305F08D19229D
+:1014F000E4F530784CF6FF121AD48F30E530BFFF98
+:1015000006784D76048004784D76FFE4784EF60830
+:10151000F6785176FFFFEF25E02428F582E43418B1
+:10152000F583E493FC740193FDEF75F008A4245C4B
+:10153000F8A60408A605EF75F008A4245EF8E4F602
+:1015400008F6EF75F008A42460F8E4F608F6EF75E5
+:10155000F008A42462F8E4F608F60FBF03B8752279
+:101560004C22E4FBEB25E025E0248CF8120232EF5C
+:101570002448FFEE34F4FEED34FFFDEC34FFFCEBC9
+:1015800025E025E02474F812024BEB25E02400F856
+:10159000740BF20874B8F2EBC394035017EB25E018
+:1015A000240CF8E4F208F2EB25E02406F8740BF2C0
+:1015B0000874B8F20BBB03ACE4FBEB25E02438F86D
+:1015C000740BF20874B8F20BBB0AEF2290009CE097
+:1015D000705504F0E4FEFDFC7401A804088002C309
+:1015E00033D8FCF9FB90008EE05BB50313EC2404C8
+:1015F000FA7401A802088002C333D8FC42068003B3
+:10160000E94206EF5BB50305E942058011EC2404CD
+:10161000FB7401A803088002C333D8FC42050CBC4C
+:1016200002B6EE5D784CF6220898010200FFFFFF3B
+:10163000FFFF04A0000000006041006400960096D7
+:101640000064006400640064006400640102040833
+:101650000506070800000000000000000000000070
+:10166000000000000000000000000000000000007A
+:101670000000000000000000000000000000C0E0CA
+:10168000C0F0C083C082C0D075D01053B9FD753D85
+:10169000007498253DF8E675F003A42403F582E470
+:1016A0003400F583E493740193FA740293F91202FF
+:1016B00095E53D25E025E02480F812024B053DE547
+:1016C0003DC3940340CB753F00D0D0D082D083D0AF
+:1016D000F0D0E032FE0000FE0008FE0006FE000E24
+:1016E000FE000CFE0014FE0012FE001AFE0018FEA2
+:1016F000002000008000008800009000009800009A
+:101700001801008D01008C01008EFE001EFE002AD3
+:101710000100940100900100A101009D01007C01E5
+:101720000084FE0030FE005EE4FFFE74982EF8E6B2
+:101730009018589342070EBE03F1EF42D4EF42F4E3
+:10174000EF42E4EFF452DC75AA3B75BA0C43BA10D1
+:1017500043B92053B9BF8FB4E4F5B375B24E75B138
+:101760002075BBFF75A950F5AB75AC0375ADC075A1
+:10177000AEC022C2D9439F10539FFD43876075922C
+:1017800062C28D75BD0975BC01121B8075BE0CD27D
+:101790008E4387030000000075BE0E439F10E4FFD8
+:1017A0000FBFFFFC439F0275BC0275927643E302B4
+:1017B000E4F5BFF5B9D2D9227818E2FE08E2FF8E2F
+:1017C00032F5337D01ED25E02418F8E2FA08E2FB5A
+:1017D000C39533EA953250048A328B33D3EB9FEAB8
+:1017E0009E4004AE02AF030DBD02DA7836E532F258
+:1017F00008E533F27834EEF208EFF2221219F4E43D
+:10180000F53974982539F8E675F003A42403F582B8
+:10181000E43400F583E493740193FA740293F912AB
+:101820000295E53925E025E02480F812024B0539C0
+:10183000E539C3940340CB22002D002D003C003C31
+:10184000003C003C003C003C003C003C003C003CB8
+:10185000003C003C003C003C00780078003C003C30
+:10186000003C003C003C003C010204081020408089
+:101870006EE4FFFEEE75F008A4245DF8E624FBFD9F
+:1018800018E634FFFCEE25E02413F9C3E39D19E3C9
+:101890009C400D7401A806088002C333D8FC42079F
+:1018A0000EBE02D08F1B22E4FE7C0274982CF8E658
+:1018B0009018589342060CBC03F1EF6005EE42D439
+:1018C0008004EEF452D4EEF4FF52F4EE42E4ED6004
+:1018D00005EE42EC8003EF52ECEF52DC227E007FFB
+:1018E0007CE4FDED25E0241AF582E4341AF583E466
+:1018F00093F4601DED25E0241BF582E4341AF58392
+:10190000E493FCEF2DF582E43EF583ECF00DBD1081
+:10191000D222753900753A7C7B017A00BFFF057FC2
+:10192000017E0022E53A2FF582E43539F583E07A2D
+:1019300000FB900090E0FCA3E0FDAF037E001200EE
+:1019400077AA06AB072243F80875CD4053CC7F43F6
+:10195000CC4043CC2043CC1043CC0453CCFD43CBF0
+:101960000243CB0153CBBF43E80853E5FC43E302FA
+:1019700043F50343900343ED0322A907E4FDFC7400
+:10198000017E00A804088005C333CE33CED8F9FF0A
+:10199000E9FBE4EF5B600D7401A804088002C33327
+:1019A000D8FC42050CBC02D7AF05227E0690008C05
+:1019B000E06F6007EFF0E490008FF090008CE07033
+:1019C000027E0390008FE004F0C39E50037F00224C
+:1019D00090008F7406F07F0122120C2712117412EE
+:1019E0001469121BA912186190008CE0700D851803
+:1019F00032E5195232E51A52328003851B32AF327A
+:101A000012196A2275BF0F000000000000000000DC
+:101A1000000000000000000000D2D853B9FD43B917
+:101A200001E5B930E1FBE4F5BF220002010102014A
+:101A300003010402050606060702080109020A035B
+:101A40000B280C010D030E01FF01E4FE7D027498CA
+:101A50002DF8E69018589342060DBD03F1EF60048F
+:101A6000EE428022EEF4528022E4F5E3439F1043DD
+:101A70009F02FF0FBFFFFC539FEF75BE0EE4F5BF43
+:101A8000F5B97592762253BAFEE5B920E004E53F38
+:101A90006005E5B930E1FBE4F5BF53B9FE53B9FD8C
+:101AA00022AB07AA06D3EB9DEA9C4007EB9DFFEA19
+:101AB0009CFE22C3ED9BFFEC9AFE2275BF0F43B93B
+:101AC0002053B9FD43BA01753F0143B901D2D82271
+:101AD000AB07AF04AE05C2AFA803A607E804F8A69B
+:101AE00006D2AF22E4FFF582F5837420FEE493F47E
+:101AF0002FFFA3EEB583F62253B9EF78A1A6B7085E
+:101B0000A6B608A6B578A01202322253B9EF78A182
+:101B1000A6EB08A6EA08A6E978A01202322253B979
+:101B2000EF78A1A6F308A6F208A6F178A012023277
+:101B30002253B9EF78A1A6FB08A6FA08A6F978A067
+:101B40001202322243B91078A1A6B708A6B608A699
+:101B5000B578A01202322243B91078A1A6EB08A6EC
+:101B6000EA08A6E978A01202322243B91078A1A6A9
+:101B7000F308A6F208A6F178A01202322243B910A7
+:101B800078A1A6FB08A6FA08A6F978A012023222CC
+:101B9000438E08758BF0758DF0C28FD2AB22C2DAFE
+:101BA00053D80F43D8D0D2D8D2D922EF6003D292E3
+:101BB00022C29222C28FC28E32751AFF22FFFFFF0D
+:101BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25
+:00000001FF
index d8a7db9..1661829 100644 (file)
@@ -1,19 +1,19 @@
-:10000000800000800C010080881D0080FC000080C2
-:10001000040100800C1E0080BC1D0080E41D0080D7
-:100020000C0100800C0100800C010080501E00803B
+:10000000800000800C010080C41D0080FC00008086
+:1000100004010080481E0080F81D0080201E008022
+:100020000C0100800C0100800C0100808C1E0080FF
 :100030000C0100800C0100800C0100800C0100808C
 :1000400000000000000000000000000000000000B0
 :1000500000000000000000000000000000000000A0
 :100060000000000000000000000000000000000090
 :100070000000000000000000000000000000000080
-:100080000C100027088000802C808C86AB0B0000B1
+:100080000C100027088000802C804C88AB0B0000EF
 :1000900008700040046199671000916708700F00B4
 :1000A00011170C7000150C600015C676B204B1076C
 :1000B0002474F2FC0830008004700C4000150C50D1
-:1000C00000152C3028892F640700C665B2072F233E
+:1000C00000152C30E88A2F640700C665B2072F237D
 :1000D000070030222474B126F2F70C7000150C6072
-:1000E0005815C676B204B1072474F2FCAB0F0000B9
-:1000F0004B330400B92088270422F20DB920882749
+:1000E0005C15C676B204B1072474F2FCAB0F0000B5
+:1000F0004B410400B92088270422F20DB92088273B
 :100100000423F209B92088270424F205B92088279E
 :100110000421F201B9108427B9308C27083000502F
 :10012000B9030010D9409027D980A027D9C0B027A3
 :1001E00000000B63000004204B75000030F1241464
 :1001F000E1F000003C101000042AD1C16B43000064
 :100200008B450000CB0B0000AB0C00004B0D000039
-:10021000AB3800006B9500008B0E00008B94000043
-:1002200098D04A1592FC2B93000004212B5B000010
-:100230008B8300006B900000062D2B5B00002B923F
-:100240000000AB930000AB790000F2E908600030D9
+:10021000AB3800004B9700008B0E00006B9600007F
+:1002200098D04A1592FC0B95000004212B5B00002E
+:100230006B8400004B910000062D2B5B00000B949B
+:1002400000008B950000AB790000F2E908600030F7
 :1002500038762800D47492FDE1F000000860003088
 :10026000387640012377B9764001E1F0087000301C
 :1002700038274001F72FE1F03414B1F16B1300007F
 :10034000F27999D04715F27699D04615F273A9D073
 :100350003E15F27099D04515F26D99D04315F26AA9
 :1003600099D04215F26528703C15A9D03C15767DD0
-:10037000DC701000825F0BAB0100F25CCCE032005D
+:10037000DC701000825FEBAC0100F25CCCE032007C
 :10038000D216CCE03100B23CC4E2821ACCE030009C
-:1003900092510420EBEA00000CB0400108E000306C
+:1003900092510420CBEC00000CB0400108E000308A
 :1003A00008D0300006CE26BE24D1F23FCCE080003B
-:1003B000823FCCE09000923E8BEA0000F23B4BDCA7
+:1003B000823FCCE09000923E6BEC0000F23B2BDEE3
 :1003C0000000C4D0820E0850004038755410084018
 :1003D00000806674B97008151471B9755410F22A4A
 :1003E000B8500815320A0870FF7F2C70FFFF567551
 :1003F00008500040B9755410B9000815F21B0420CC
-:10040000EBEA0000062E2B270100F214B87E400113
+:10040000CBEC0000062E0B290100F214B87E40014F
 :1004100032FE387E2800D47492FDB16B387C3C01EA
 :10042000C67D92F50474F17008600080F2F06B668E
 :10043000000058C1040030B12C101400E1F000009D
 :1007400098C7990406B206D39248087000800667DD
 :100750002C600CDC045E2656106518970CDCB16129
 :100760000CE0DE1106AC0C8080023071C6A782332B
-:10077000906E822B1461266E103606294B9800006D
+:10077000906E822B1461266E103606292B9A00008B
 :100780001462266E10660C30640026262322262270
-:10079000262870222622066257623F220600AB9B63
+:10079000262870222622066257623F2206008B9D81
 :1007A00000000C6090012662CC605802D203B16D4B
-:1007B000F2093C20C8000433AB9B00002C205802F7
+:1007B000F2093C20C80004338B9D00002C20580215
 :1007C000B12D24C124D413CC0471267A13A72CE0B4
 :1007D0001000F2CC91CBF22A28270C001C60A50156
 :1007E0002662CC60E803D2170CC08D053FE20C00F6
-:1007F000063E062E4B9800000C30E903AB9B000030
-:10080000063E4B9800000C30E903AB9B00003F22F2
+:1007F000063E062E2B9A00000C30E9038B9D00006C
+:10080000063E2B9A00000C30E9038B9D00003F222E
 :100810000C00F209CC208D05C2063C208D05772105
 :100820002C208D050461916BB12D58C114005881A5
 :10083000040004202C102400E1F0000034140C709B
 :10088000C67EB207AB42000030712471B171F2F83C
 :1008900048E10400241CE1F0F7400470C6748207AC
 :1008A0002F6707002662A1362471F2F9E1F00000FB
-:1008B00034140420B1F1EBDC000030F12414E1F039
+:1008B00034140420B1F1CBDE000030F12414E1F057
 :1008C00008600000087000002C6080002C7030026E
 :1008D0003676C4703414B1F13202247306470850DE
-:1008E0000080674104702C508C861421C674043437
+:1008E0000080674104702C504C881421C674043475
 :1008F0002636320530F52454B1F6F202B1262471C1
 :10090000CC70800082030663F2F230F12414E1F02F
 :1009100028603E15CC60FFFF921028600610D46856
 :100950003C10200008700080D18118A70CDCD9C1A0
 :10096000100006C72CC00CDC08E000802CE048DC3E
 :100970000CD038152CC037001491102ECC20FF005D
-:10098000820C18BE0500CCB0FF008207063A4B98D7
+:10098000820C18BE0500CCB0FF008207063A2B9AF5
 :100990000000262BA12DF202A19D34E1C6EC34D239
 :1009A00092ED58C1100050812C102000E1F00000A1
 :1009B00034140C20001004300C400005B1F10CF090
-:1009C0002C01F1F08B4A00008B43010030F124141C
+:1009C0002C01F1F08B4A00006B45010030F124143A
 :1009D000E1F000000C60F401B96020151461990089
-:1009E000551599605415B9001C15B90018159900D2
-:1009F0005315B9001415B900101504639900521568
-:100A00009960511599004B1599004A150471997018
+:1009E000571599605615B9001C15B90018159900CE
+:1009F0005515B9001415B900101504639900541564
+:100A00009960531599004B1599004A150471997016
 :100A100049159900481599704715990046151461B4
 :100A2000A9604015A9603E15086000802C6000DCBC
 :100A300018460A009940451518560800A9503C155B
 :100A4000A9003A15990044159900431599004215DB
-:100A50009970501599004F1508700080186785DC53
-:100A600099604E1599004D15E1F000003414B1F174
-:100A70004BBC00000C60150008700040B9670470A2
-:100A800030F12414E1F000003414B1F12BE6000041
-:100A900004310C202000CBE400000C20FF008BE28E
-:100AA0000000042404314BDF000004216BDB000054
-:100AB00030F12414E1F000003414B1F1ABDD00009A
-:100AC0000420CBE90000ABDA000008700040387762
+:100A5000997052159900511508700080186785DC4F
+:100A60009960501599004F15E1F000003414B1F170
+:100A70002BBE00000C60150008700040B9670470C0
+:100A800030F12414E1F000003414B1F10BE800005F
+:100A900004310C202000ABE600000C20FF006BE4CA
+:100AA0000000042404312BE1000004214BDD000090
+:100AB00030F12414E1F000003414B1F18BDF0000B8
+:100AC0000420ABEB00008BDC00000870004038779E
 :100AD000102030F1F770B97020002414E1F000000C
-:100AE00034140421B1F16BE700000C201000EBE698
-:100AF000000030F12414E1F03414B1F1EBE7000010
-:100B0000042504318BEB000030F12414E1F00000E7
-:100B100034140C200001B1F1ABE000000C20800087
-:100B2000ABE00000042006520C3027000C40FFFF11
-:100B30000C6001020BF4000004210C308F010C400A
-:100B4000FFFF04500C6001020BF4000030F124148C
-:100B5000E1F0000034140421B1F1EBEA000030F1BF
+:100AE00034140421B1F14BE900000C201000CBE8D4
+:100AF000000030F12414E1F03414B1F1CBE900002E
+:100B0000042504316BED000030F12414E1F0000005
+:100B100034140C200001B1F18BE200000C208000A5
+:100B20008BE20000042006520C3027000C40FFFF2F
+:100B30000C600102EBF5000004210C308F010C4029
+:100B4000FFFF04500C600102EBF5000030F12414AB
+:100B5000E1F0000034140421B1F1CBEC000030F1DD
 :100B60002414E1F0C4203414B1F182090C20006097
-:100B7000ABE0000004216BB50000F2076BB500008C
-:100B80000C2000608BE1000030F12414E1F0000043
+:100B70008BE2000004214BB70000F2074BB70000E6
+:100B80000C2000606BE3000030F12414E1F0000061
 :100B90003C101000D1C10860004038E67060067259
 :100BA00023EECCE000C906C3C2050860040066E677
-:100BB000F7E10637062E4B9800000C30A00FAB9BD8
-:100BC00000002425043AAB9B0000087000403877F1
+:100BB000F7E10637062E2B9A00000C30A00F8B9D14
+:100BC00000002425043A8B9D00000870004038770F
 :100BD000CC7106D2777C2472C627B20206D7C4C075
-:100BE0008218067ED7712F2E0E002627063DAB9B5E
+:100BE0008218067ED7712F2E0E002627063D8B9D7C
 :100BF00000003CE0B09ACCE020030471D202047003
 :100C0000D77F66720C600000B9763C00AB380000FC
 :100C1000062D50C12C101000E1F0000038702C158A
 :100C7000000008700040B9271870EB60000030F1E8
 :100C80002414E1F008700080987774DC3418C1E116
 :100C9000820428203C15F20508700080182708DC23
-:100CA000D421820A04210B2A0300186051151C70FC
-:100CB00080006676F2070B2A0300187051155C70ED
-:100CC0007F009970511540E12418E1F0341404219B
-:100CD000B1F1CBE9000098704215920608700080CF
+:100CA000D421820A04214B360300186053151C70AE
+:100CB00080006676F2074B360300187053155C709F
+:100CC0007F009970531540E12418E1F03414042199
+:100CD000B1F1ABEB000098704215920608700080ED
 :100CE000386704DCF2295C70F000CC708000820868
 :100CF000CC70C0008224CC7040009224F21B04719E
 :100D00009970441599704615990047150860008040
 :100D100098669ADC920499004315F2039970431582
-:100D200004200B2A0300186051155C607F00996055
-:100D300051150C600402B9600800F2040461996066
+:100D200004204B360300186053155C607F00996007
+:100D300053150C600602B9600800F2040461996062
 :100D4000441530F12414E1F00820000008400000B0
 :100D50002C208002083000802C406C033C101000D6
-:100D600036422C303C88D1C10CF00401F1F00C303B
+:100D600036422C30FC89D1C10CF00401F1F00C307A
 :100D700000FC04200CF01003F1F00CE0000008303F
 :100D80000080B92E18002C3000F004200CF0100365
 :100D9000F1F00870008038C7D0FBB92E140006D2DD
 :100DA000CCC0FF00821BC6C282196B120000086013
 :100DB0001CE1087000302C6001E9B9670401B9C773
-:100DC0000801B9D70C01386E1800B96710018BEA19
+:100DC0000801B9D70C01386E1800B96710016BEC37
 :100DD0000000042A6B430000F2FB50C12C101000ED
-:100DE000E1F0000098604E153C101000D1C182095E
-:100DF0003461936699604E15924799005015F244FC
+:100DE000E1F00000986050153C101000D1C182095C
+:100DF0003461936699605015924799005215F244F8
 :100E0000DC20800008E000802CE00CDC820418DE8E
-:100E10007B00F20318DE7A00EBBA0000C62DA20AAE
-:100E20003850181518604F153453C665B21A24612E
-:100E3000F21698604F158215985055158204B850D7
+:100E10007B00F20318DE7A00CBBC0000C62DA20ACC
+:100E200038501815186051153453C665B21A24612C
+:100E3000F216986051158215985057158204B850D3
 :100E40001C15920F185E7C0036D5C62DD20A1840AC
-:100E50004D15185E8100C645D204346199604F1566
-:100E60009850501518504F159209187E7D00C6579E
-:100E7000A20B047199705015F207187E7E00C657B8
-:100E8000D2039900501550C12C101000E1F0000061
-:100E90003418C1E106E20BD70000062E8BD100000A
+:100E50004F15185E8100C645D20434619960511562
+:100E600098505215185051159209187E7D00C6579A
+:100E7000A20B047199705215F207187E7E00C657B6
+:100E8000D2039900521550C12C101000E1F000005F
+:100E90003418C1E106E2EBD80000062E6BD3000047
 :100EA00040E12418E1F000003C101000D1C106E23E
-:100EB000182051155C20F0006423992051156BC156
-:100EC00000004BB90000C4E09215CBB8000004212B
-:100ED0000BB8000004210BB700000421063E064EAB
-:100EE000065ECB2D0100C42082050C2080006B041F
-:100EF00001008B2B01000870008018C772DC04D041
-:100F0000C6CD820D04210BB8000004210BB70000F0
-:100F1000C4E0820E6B130000C420820ACBB900002B
-:100F200050C10461996052152C101000E1F024D1D9
+:100EB000182053155C20F0006423992053154BC370
+:100EC00000002BBB0000C4E09215ABBA0000042167
+:100ED000EBB900000421EBB800000421063E064EE9
+:100EE000065EAB2F0100C42082050C2080004B065B
+:100EF00001006B2D01000870008018C772DC04D05F
+:100F0000C6CD820D0421EBB900000421EBB800002E
+:100F1000C4E0820E6B130000C420820AABBB000049
+:100F200050C10461996054152C101000E1F024D1D7
 :100F3000F2E80000987044153C101000D1C106D2B0
 :100F4000920A0C600010A876200082053471A97600
-:100F50002000F24F1860551518705415C676924946
+:100F50002000F24F1860571518705615C676924942
 :100F6000C470820428703E15F21F08E0008038C06B
 :100F700010152CE00CDC382E5400383E440004617F
-:100F8000266CB9601015AB9B0000C6C20C60001047
+:100F8000266CB96010158B9D0000C6C20C60001065
 :100F9000A2070451387E58009956FC04F2052870C7
 :100FA00040159906FC04C67DC224367D06270667D7
-:100FB000D762D72126263627D7210C301027AB9BA6
-:100FC0000000C42AC2164BE80000ABE8000098708D
-:100FD000451582044BDB0000F20818705715930783
-:100FE0009204AB420000F2FA990057152BE9000079
+:100FB000D762D72126263627D7210C3010278B9DC4
+:100FC0000000C42AC2162BEA00008BEA00009870C9
+:100FD000451582042BDD0000F2081870591593079F
+:100FE0009204AB420000F2FA990059150BEB000095
 :100FF00050C12C101000E1F0987043158206087063
 :1010000000802847A0DCF20538702C152847220004
-:1010100098604C158206346199604C150421F228C1
-:101020000C700010285706001C6001205665A96747
-:10103000060028676201264628670C00C64602158E
-:10104000987784029212DC50E002920F38701415E7
-:1010500004212471B970141538602C151866240009
-:10106000C676D2060625F204B90014150420E1F074
-:101070003C101000D1C11870551518505415C657A2
-:10108000823999705415C470187051151C60100085
-:101090005676821C6472997051152B450100B90077
-:1010A0001C15B900141538702C1518274100183775
-:1010B0007A001847790018575A00186724000CF076
-:1010C000A800F1F0B9201815F20664719970511555
-:1010D0004B4701009870551582050CF06801F1F03E
-:1010E000F20518205115CBD40000182051158B742F
-:1010F0000000182051152B6F0000182051156BC1EE
-:10110000000018205115CBD4000050C12C10100045
-:10111000E1F0000034140462B1F1996052154BB94A
-:10112000000004210BB8000004210BB700000428C4
-:101130000BB800000C2010000BB700002B3F010083
-:10114000CBC602008632820C187042155C70F0002B
-:10115000CC7040008207046199605515F2038B350D
-:10116000010030F12414E1F034180463C1E1996006
-:101170005215CB7F0000C42082074BB900000CF051
-:101180006801F1F0F203CBB900000CF0C001F1F0FE
-:1011900004210BB800000B52010006E204210BB73A
-:1011A000000004280BB800000C2010000BB7000052
-:1011B000C4E082030B560100987005108206B90046
-:1011C0001C15B9001015F20638701C152471B97081
-:1011D0001C152B3F01003870181538601C1524733E
-:1011E000C667A2059900551599004D1598605315CD
-:1011F000820B042099005515990053158BF60000B9
-:1012000004214B75000040E12418E1F09870551559
-:101210003414B1F182044B8B0000F2120C700010F8
-:10122000286706000C500020D656820899004C15FD
-:101230001C5001205665A9670600AB88000030F1FC
-:101240002414E1F03414B1F16B4203006B56030037
-:101250000B350000C42082038BEA000030F1241417
-:10126000E1F0000034140420B1F1CBF5000030F1BE
-:101270002414E1F034180420C1E14BF7000006E229
-:1012800004208BF60000062E40E12418E1F0000057
-:101290003414B1F1CB130000C420820538200C15A2
-:1012A0004B15000030F12414E1F000003418042143
-:1012B000C1E1CBF5000008E007002CE020A18B94F1
-:1012C000000098704B15921B04214BF7000026225A
-:1012D000067257712627C62EC2F308700080387731
-:1012E000CCFBCC70FF00820498704A158208042160
-:1012F0008BF600000421CBF50000F2E204218BF60E
-:10130000000040E12418E1F008700080C627341482
-:10131000B1F18203C63792042BA20000F20E0870CE
-:1013200000400461B9670080B9270480B93708809C
-:10133000B9070C803827108030F12414E1F0000048
-:10134000C4203414B1F1820F08700040B9371880FE
-:10135000B9471C80066738762880D47182FD38260C
-:101360002080F205062306344BA3000030F124143C
-:10137000E1F0000006723414064304210637B1F18F
-:101380000B9A000030F12414E1F000003C10100032
-:10139000D1C106D3F7DFC4D006E4F7EF82021633DB
-:1013A000C4E082021644C420820F08700040B9379E
-:1013B0001880B9471C80066738762880D47182FD72
-:1013C00038262080F205062306344BA30000C6DE33
-:1013D0008202162250C12C101000E1F0086000803B
-:1013E000C6263414B1F1067206438204C6360421BF
-:1013F0009202042006376B9C000030F12414E1F0C7
-:101400003C101000D1C106E306D46B9C0000063DE1
-:101410004B9800003F220E0050C12C101000E1F04C
-:1014200008600080C6263414B1F1067206438204B7
-:10143000C63604219202042006370BA0000030F1CA
-:101440002414E1F0C430044004500C602000520326
-:10145000A6422550B4610206A6442555A63342F99A
-:10146000F2FA06240635E1F00440A6222544C643DC
-:10147000BA9E0000A6222544C643BA9D0000A622BB
-:101480002544C643BA9C0000A6222544C643BA9B05
-:101490000000A6222544C643BA9A0000A62225448D
-:1014A000C643BA990000A6222544C643BA98000054
-:1014B000A6222544C643BA970000A6222544C64367
-:1014C000BA960000A6222544C643BA950000A6227B
-:1014D0002544C643BA940000A6222544C643BA93C5
-:1014E0000000A6222544C643BA920000A622254445
-:1014F000C643BA910000A6222544C643BA90000014
-:10150000A6222544C643BA8F0000A6222544C6431E
-:10151000BA8E0000A6222544C643BA8D0000A6223A
-:101520002544C643BA8C0000A6222544C643BA8B84
-:101530000000A6222544C643BA8A0000A6222544FC
-:10154000C643BA890000A6222544C643BA880000D3
-:10155000A6222544C643BA870000A6222544C643D6
-:10156000BA860000A6222544C643BA850000A622FA
-:101570002544C643BA840000A6222544C643BA8344
-:101580000000A6222544C643BA820000A6222544B4
-:10159000C643BA810000A6222544C643BA80000093
-:1015A000A6222544C643BA7F0000E1F03643242139
-:1015B000FA62FFFF36432421FA63FFFF36432421FA
-:1015C000FA64FFFF36432421FA65FFFF36432421E6
-:1015D000FA66FFFF36432421FA67FFFF36432421D2
-:1015E000FA68FFFF36432421FA69FFFF36432421BE
-:1015F000FA6AFFFF36432421FA6BFFFF36432421AA
-:10160000FA6CFFFF36432421FA6DFFFF3643242195
-:10161000FA6EFFFF36432421FA6FFFFF3643242181
-:10162000FA70FFFF36432421FA71FFFF364324216D
-:10163000FA72FFFF36432421FA73FFFF3643242159
-:10164000FA74FFFF36432421FA75FFFF3643242145
-:10165000FA76FFFF36432421FA77FFFF3643242131
-:10166000FA78FFFF36432421FA79FFFF364324211D
-:10167000FA7AFFFF36432421FA7BFFFF3643242109
-:10168000FA7CFFFF36432421FA7DFFFF36432421F5
-:10169000FA7EFFFF36432421FA7FFFFF36432421E1
-:1016A000FA80FFFF36432421E1F000003414B1F149
-:1016B00008700040C42038676071820908504000FB
-:1016C0006665B9676071AB420000F2080850BFFF61
-:1016D0002C50FFFF5665B967607130F12414E1F0BA
-:1016E0000860004038760870D67282FDE1F0000094
-:1016F0000870004038670870B9670870E1F00000B2
-:101700003418C1E106E28BB7000008700040B9E769
-:10171000007040E12418E1F00860004038767070F5
-:101720006472B9767070E1F00860004038767070CD
-:101730006471B9767070E1F00860004038767070BE
-:1017400014525675B9767070E1F0000008700040D0
-:101750003827E0705C20FF7FE1F000000870004057
-:1017600038275C705C207F00E1F00000C420086036
-:101770000040820808700FC02C70FFFFB9763C71E2
-:10178000F203B9063C71E1F03C101000D1C10C200D
-:10179000087008D0004008300080262D2C3008E268
-:1017A0000C40F8020CF00401F1F00C20004008E0BD
-:1017B000003008300080262E2C3000E50C40000957
-:1017C0000CF00401F1F00C20C45208300080262EE9
-:1017D0002C3000EE0C4050010CF00401F1F00870C8
-:1017E0000FC02C70FFFF0C20004008300080B97D36
-:1017F0003C71262E2C3000F00C4000090CF0040146
-:10180000F1F008700080287732DCB90D3C710C20B3
-:10181000004906375738262E66370C4000090CF071
-:101820004001F1F050C12C101000E1F0C428341434
-:1018300008400080B1F106742C70B8DC8AC1000049
-:10184000C428D21FC4228245C4238AA50000C42113
-:101850009AC9000038370C0008500040B935347080
-:1018600038374C00B935647038373400B9355470A6
-:1018700038377400B9356C7038378000FAB1000021
-:10188000CC2082008247CC208200D21BCC20810059
-:101890009AA900003837100008500040B93534705C
-:1018A00038375000B935647038373800B93554705E
-:1018B00038377800B9356C7038378400FA910000F9
-:1018C000CC2083008268CC208800827AFA8B0000CA
-:1018D0009850501508500040820838371800B93524
-:1018E000347038375800F20738371400B93534707F
-:1018F00038375400B935647038373C000850004020
-:10190000B935547038377400B9356C703837880081
-:10191000F267985050158228083000802C300CDC7B
-:1019200028501E1018F37F00C6F5D20A383724005D
-:1019300008500040B935347038376400F21D183350
-:101940008000C63508500040D20838372800B93525
-:10195000347038376800F21038372000B9353470E9
-:1019600038376000F20938371C0008500040B9359C
-:10197000347038375C00B93564703837400008502F
-:101980000040B935547038377800B9356C70383745
-:101990008C00F2263837080008500040B935347002
-:1019A00038374800B935647038373000B93554706D
-:1019B00038377000B9356C7038377C00F211383721
-:1019C0002C0008500040B935347038376C00B935F8
-:1019D000647038374400B935547038379000B935E1
-:1019E0001C71DC20800008500040820A3847040047
-:1019F000B9453070084010102C401432F2093844B8
-:101A0000B8DCB9453070084010102C40202CB94586
-:101A1000487098605015086000408204387798003C
-:101A2000F20338779400B976587030F12414E1F05D
-:101A3000542FC421920438602415F203386028150D
-:101A40003856080008700040B957B47038560C007A
-:101A50000840DFFFB957B870385610002C40FFFF20
-:101A60005654B957C07038561400B957C4709850BE
-:101A70004315820A086001002C604062B967AC70AF
-:101A800008601000F2063056B957AC703866040092
-:101A9000B967B070E1F00000542FC421920438708F
-:101AA0002415F2033870281518608412C462C20429
-:101AB00038572000F208C462920438571C00F20321
-:101AC0003857180008600040B956C87038572400CD
-:101AD000B956CC7038772800B976D470E1F00000A0
-:101AE000542FC421920438702415F203387028153D
-:101AF00038572C0008600040B9568C7038573000B9
-:101B0000B956907038573400B95694703857380029
-:101B1000B956987038573C00B9569C7038574000F9
-:101B2000B956A07038574400B956A47038774800A9
-:101B3000B976A870E1F000000C6000DE087000408B
-:101B4000B9671060E1F0000008700040B90710604C
-:101B5000E1F00000087000400C60FE00B9670C2046
-:101B6000B9071820E1F000005100E1F008700040D2
-:101B7000C4203867341082036463F203145456653A
-:101B8000B9673410E1F000000870ADDE2C708C03F2
-:101B900008600040B9760010E1F000000870ADDE8A
-:101BA000086000402C708C03B9760010B9266C10C8
-:101BB000E1F000000860ADDE087000402C608C038E
-:101BC000B96700100C501000B957201008503803A6
-:101BD000B96700102C508088B9572410B9670010DD
-:101BE000B9072810E1F000000860ADDE0870004081
-:101BF0002C608C03B9670010C43038675010820520
-:101C00006662B9675010F20515225626B9275010A2
-:101C1000E1F000000860ADDE087000402C608C032D
-:101C2000B9670010386754106662B9675410E1F064
-:101C30000860ADDE087000402C608C03B9670010AE
-:101C40003867541015225626B9275410E1F00000C9
+:1010100098604D158205346199604D15F2110C7080
+:101020000010285706001C6001405665A96706009D
+:1010300098304E1582070673347199704E1504214D
+:10104000F2241C6001605665A967060028676201EA
+:10105000264628670C00C64602159877840292122D
+:10106000DC50E002920F3870141504212471B9701D
+:10107000141538602C1518662400C676D20606258D
+:10108000F204B90014150420E1F000003C10100037
+:10109000D1C11870571518505615C6578239997016
+:1010A0005615C470187053151C6010005676821CBB
+:1010B0006472997053150B470100B9001C15B900F3
+:1010C000141538702C151827410018377A00184766
+:1010D000790018575A00186724000CF0A800F1F0A6
+:1010E000B9201815F2066471997053152B49010047
+:1010F0009870571582050CF06801F1F0F205182080
+:101100005315ABD60000182053158B74000018201F
+:1011100053152B6F0000182053154BC300001820E7
+:101120005315ABD6000050C12C101000E1F00000A8
+:1011300034140462B1F1996054152BBB00000421F2
+:10114000EBB900000421EBB800000428EBB9000063
+:101150000C201000EBB800000B4101000BD3020083
+:101160008632820C187042155C70F000CC70400022
+:101170008207046199605715F2036B37010030F163
+:101180002414E1F034180463C1E199605415CB7F55
+:101190000000C42082072BBB00000CF06801F1F0B6
+:1011A000F203ABBB00000CF0C001F1F00421EBB97D
+:1011B0000000EB53010006E20421EBB80000042814
+:1011C000EBB900000C201000EBB80000C4E0820373
+:1011D000EB570100987005108206B9001C15B90084
+:1011E0001015F20638701C152471B9701C150B41CE
+:1011F00001003870181538601C152473C667A205E5
+:101200009900571599004F1598605515820B0420C9
+:1012100099005715990055156BF8000004214B757E
+:10122000000040E12418E1F0987057153414B1F132
+:1012300082042B8C0000F2210C700010286706003D
+:101240000C500040D656820A99004D1599004C1555
+:101250001C5001405665A9670600286706000C501F
+:101260000020D656820899004E151C500120566564
+:10127000A96706008B89000030F12414E1F000001A
+:101280003414B1F1AB4E03006B6403000B35000066
+:10129000C42082036BEC000030F12414E1F0000064
+:1012A00034140420B1F1ABF7000030F12414E1F064
+:1012B00034180420C1E12BF9000006E204206BF889
+:1012C0000000062E40E12418E1F000003414B1F1D2
+:1012D000CB130000C420820538200C154B150000EC
+:1012E00030F12414E1F0000034180421C1E1ABF71F
+:1012F000000008E007002CE020A16B960000987029
+:101300004B15921B04212BF90000262206725771FF
+:101310002627C62EC2F3087000803877CCFBCC702D
+:10132000FF00820498704A15820804216BF80000BF
+:101330000421ABF70000F2E204216BF8000040E169
+:101340002418E1F008700080C6273414B1F182033C
+:10135000C63792040BA40000F20E0870004004612E
+:10136000B9670080B9270480B9370880B9070C80B5
+:101370003827108030F12414E1F00000C420341428
+:10138000B1F1820F08700040B9371880B9471C804E
+:10139000066738762880D47182FD38262080F205D1
+:1013A000062306342BA5000030F12414E1F00000E0
+:1013B00006723414064304210637B1F1EB9B00009A
+:1013C00030F12414E1F000003C101000D1C106D32C
+:1013D000F7DFC4D006E4F7EF82021633C4E08202DE
+:1013E0001644C420820F08700040B9371880B947EE
+:1013F0001C80066738762880D47182FD38262080CC
+:10140000F205062306342BA50000C6DE8202162252
+:1014100050C12C101000E1F008600080C626341482
+:10142000B1F1067206438204C636042192020420FA
+:1014300006374B9E000030F12414E1F03C10100000
+:10144000D1C106E306D44B9E0000063D2B9A000056
+:101450003F220E0050C12C101000E1F00860008007
+:10146000C6263414B1F1067206438204C63604213E
+:10147000920204200637EBA1000030F12414E1F0C1
+:10148000C430044004500C6020005203A642255092
+:10149000B4610206A6442555A63342F9F2FA0624A1
+:1014A0000635E1F00440A6222544C643BA9E00005A
+:1014B000A6222544C643BA9D0000A6222544C64361
+:1014C000BA9C0000A6222544C643BA9B0000A6226F
+:1014D0002544C643BA9A0000A6222544C643BA99B9
+:1014E0000000A6222544C643BA980000A62225443F
+:1014F000C643BA970000A6222544C643BA96000008
+:10150000A6222544C643BA950000A6222544C64318
+:10151000BA940000A6222544C643BA930000A6222E
+:101520002544C643BA920000A6222544C643BA9178
+:101530000000A6222544C643BA900000A6222544F6
+:10154000C643BA8F0000A6222544C643BA8E0000C7
+:10155000A6222544C643BA8D0000A6222544C643D0
+:10156000BA8C0000A6222544C643BA8B0000A622EE
+:101570002544C643BA8A0000A6222544C643BA8938
+:101580000000A6222544C643BA880000A6222544AE
+:10159000C643BA870000A6222544C643BA86000087
+:1015A000A6222544C643BA850000A6222544C64388
+:1015B000BA840000A6222544C643BA830000A622AE
+:1015C0002544C643BA820000A6222544C643BA81F8
+:1015D0000000A6222544C643BA800000A622254466
+:1015E000C643BA7F0000E1F036432421FA62FFFFD0
+:1015F00036432421FA63FFFF36432421FA64FFFFB8
+:1016000036432421FA65FFFF36432421FA66FFFFA3
+:1016100036432421FA67FFFF36432421FA68FFFF8F
+:1016200036432421FA69FFFF36432421FA6AFFFF7B
+:1016300036432421FA6BFFFF36432421FA6CFFFF67
+:1016400036432421FA6DFFFF36432421FA6EFFFF53
+:1016500036432421FA6FFFFF36432421FA70FFFF3F
+:1016600036432421FA71FFFF36432421FA72FFFF2B
+:1016700036432421FA73FFFF36432421FA74FFFF17
+:1016800036432421FA75FFFF36432421FA76FFFF03
+:1016900036432421FA77FFFF36432421FA78FFFFEF
+:1016A00036432421FA79FFFF36432421FA7AFFFFDB
+:1016B00036432421FA7BFFFF36432421FA7CFFFFC7
+:1016C00036432421FA7DFFFF36432421FA7EFFFFB3
+:1016D00036432421FA7FFFFF36432421FA80FFFF9F
+:1016E00036432421E1F000003414B1F108700040C9
+:1016F000C420386760718209085040006665B96788
+:101700006071AB420000F2080850BFFF2C50FFFF91
+:101710005665B967607130F12414E1F0086000404B
+:1017200038760870D67282FDE1F000000870004043
+:1017300038670870B9670870E1F000003418C1E13B
+:1017400006E26BB9000008700040B9E7007040E1A4
+:101750002418E1F008600040387670706472B97641
+:101760007070E1F008600040387670706471B9768E
+:101770007070E1F008600040387670701452567551
+:10178000B9767070E1F00000087000403827E07012
+:101790005C20FF7FE1F000000870004038275C709B
+:1017A0005C207F00E1F00000C42008600040820857
+:1017B00008700FC02C70FFFFB9763C71F203B906B8
+:1017C0003C71E1F03C101000D1C10C20087008D031
+:1017D000004008300080262D2C3008E20C40F80232
+:1017E0000CF00401F1F00C20004008E0003008305B
+:1017F0000080262E2C3000E50C4000090CF004017E
+:10180000F1F00C20C45208300080262E2C3000EE5F
+:101810000C4050010CF00401F1F008700FC02C7066
+:10182000FFFF0C20004008300080B97D3C71262E5F
+:101830002C3000F00C4000090CF00401F1F00870AD
+:101840000080287732DCB90D3C710C200049063746
+:101850005738262E66370C4000090CF04001F1F095
+:1018600050C12C101000E1F0C4283414084000804E
+:10187000B1F106742C70B8DC8AC10000C428D21FF4
+:10188000C4228245C4238AA50000C4219AC900004D
+:1018900038370C0008500040B935347038374C00E8
+:1018A000B935647038373400B9355470383774003E
+:1018B000B9356C7038378000FAB10000CC20820056
+:1018C0008247CC208200D21BCC2081009AA9000044
+:1018D0003837100008500040B935347038375000A0
+:1018E000B935647038373800B935547038377800F6
+:1018F000B9356C7038378400FA910000CC20830031
+:101900008268CC208800827AFA8B000098505215A9
+:1019100008500040820838371800B935347038371D
+:101920005800F20738371400B9353470383754008E
+:10193000B935647038373C0008500040B9355470F0
+:1019400038377400B9356C7038378800F2679850B2
+:1019500052158228083000802C300CDC28501E10D4
+:1019600018F37F00C6F5D20A38372400085000402B
+:10197000B935347038376400F21D18338000C6352D
+:1019800008500040D20838372800B935347038374D
+:101990006800F21038372000B935347038376000ED
+:1019A000F20938371C0008500040B9353470383718
+:1019B0005C00B93564703837400008500040B935D4
+:1019C000547038377800B9356C7038378C00F2268F
+:1019D0003837080008500040B935347038374800AF
+:1019E000B935647038373000B93554703837700005
+:1019F000B9356C7038377C00F21138372C0008503C
+:101A00000040B935347038376C00B93564703837F8
+:101A10004400B935547038379000B9351C71DC205A
+:101A2000800008500040820A38470400B9453070F1
+:101A3000084010102C401432F2093844B8DCB94583
+:101A40003070084010102C40202CB9454870986028
+:101A5000521508600040820438779800F203387706
+:101A60009400B976587030F12414E1F0542FC42159
+:101A7000920438602415F20338602815385608009F
+:101A800008700040B957B47038560C000840DFFFAA
+:101A9000B957B870385610002C40FFFF5654B9574C
+:101AA000C07038561400B957C47098504315820A54
+:101AB000086001002C604062B967AC7008601000DB
+:101AC000F2063056B957AC7038660400B967B0708A
+:101AD000E1F00000542FC421920438702415F20361
+:101AE0003870281518608412C462C2043857200068
+:101AF000F208C462920438571C00F20338571800E9
+:101B000008600040B956C87038572400B956CC70E8
+:101B100038772800B976D470E1F00000542FC42142
+:101B2000920438702415F2033870281538572C00A9
+:101B300008600040B9568C7038573000B956907024
+:101B400038573400B956947038573800B9569870E1
+:101B500038573C00B9569C7038574000B956A070B1
+:101B600038574400B956A47038774800B976A87041
+:101B7000E1F000000C6000DE08700040B967106002
+:101B8000E1F0000008700040B9071060E1F00000CB
+:101B9000087000400C60FE00B9670C20B9071820DF
+:101BA000E1F000005100E1F008700040C420386707
+:101BB000341082036463F20314545665B967341019
+:101BC000E1F000000870ADDE2C708C03086000406E
+:101BD000B9760010E1F000000870ADDE086000404A
+:101BE0002C708C03B9760010B9266C10E1F000005F
+:101BF0000860ADDE087000402C608C03B9670010EF
+:101C00000C501000B957201008503803B967001065
+:101C10002C508088B9572410B9670010B9072810D4
+:101C2000E1F000000860ADDE087000402C608C031D
+:101C3000B9670010C4303867501082056662B96712
+:101C40005010F20515225626B9275010E1F0000079
 :101C50000860ADDE087000402C608C03B96700108E
-:101C600038575810CC20FF001C4000015654920AEF
-:101C7000B9575810B967001038674C1014525665A0
-:101C8000F2096652B9575810B967001038674C10FE
-:101C90006461B9674C10E1F00860ADDE0870004087
-:101CA0002C608C03B9670010C43038674C10820573
-:101CB0006662B9674C10F20515225626B9274C10FA
-:101CC000E1F000000870ADDE086000402C708C036D
-:101CD000B97600100473B9764410E1F00860004052
-:101CE000387608106672B9760810E1F00860004096
-:101CF000387664106672B9766410E1F00462087098
-:101D00000040B9671410E1F0232208700040B927A1
-:101D10001010E1F008600040387614106471B97654
-:101D20001410E1F008600040387614101452567513
-:101D3000B9761410E1F00000C420047F82030C7017
-:101D40009C006C70000108600040B9767410E1F0EE
-:101D5000046108700040B9677010E1F0C420087099
-:101D6000004082040461B167F202B107E1F00000B3
-:101D7000C430572108700040267282040461B167A4
-:101D8000F202B107E1F000003C101000D1C16B126B
-:101D9000000008701CE1086000302C7004E9B9767E
-:101DA000040108E00040B97608012CE0701004D16D
-:101DB000B1DE042A6B430000F2FC00003C1010006E
-:101DC000C16101610170C9610800046108700040CF
-:101DD000B9671440486108001116110740612C10C2
-:101DE000100061003C101000C16101610170C96107
-:101DF0000800046108700040B96714504861080089
-:101E00001116110740612C10100061003C102400D5
-:101E1000D941080001610170C9611C000461B9F178
-:101E20001800C12199605715EB410000046108704A
-:101E30000040B967781048611C0038F11800402153
-:101E400011161107584108002C10240061000000F1
-:101E50003C101000C16101610170C9610800087087
-:101E6000004038670870B9670870046199605615BA
-:101E7000486108001116110740612C101000610024
-:101E800008700400247426270870FFBF57262C70A2
-:101E900000C0B14226270C4004400870004026478D
-:101EA0002642B1340C401040264726422C70084090
-:101EB000B1542627B162E1F0087000402C70084050
-:101EC0005726262730726C700001B172E1F00000D5
-:101ED000087000402C7008405726262730721C607E
-:101EE00001015676B172E1F00870004057262C705F
-:101EF0000C4026723027E1F0087000803C1014007E
-:101F0000D9C1040006C318370CDCB1B106E72CE0D8
-:101F10000CDC06B406D24B980000187E02002F6C31
-:101F20000200C6C7B16BB212187E03000422C6D7E6
-:101F3000A21E187E05000423C6D78219187E06004B
-:101F40000420C6D792140423F212187E350034718F
-:101F50000C5030152677267504203452C67582073A
-:101F60002047C664920204213472F2F958C1040079
-:101F700030B12C101400E1F03C101000D1C106C2A9
-:101F800006E4042106D36BBB0000085000802C50EF
-:101F90000CDC98752E00920274D1087000302C7001
-:101FA000004057C12F270C009845300030620C705C
-:101FB000FF0356767765922AC4E08209C4D0820472
-:101FC000267E266EF211366E367EF20EC4D0820761
-:101FD000C66702032471F2082461F206C667020391
-:101FE0003461F2023471C4700209CC70FF0304E062
-:101FF000020714E10C70FF03F20314E10471C460E2
-:102000000235CC60FF031235F23798553100821A41
-:10201000C4E08207C4D08203267EF208367EF20630
-:10202000C4D082032471F2043471C4700208CC70ED
-:10203000FF03021A14E10C70FF03F21E14E1047195
-:10204000F21BC4E08207C4D08203266EF208366E0B
-:10205000F206C4D082032461F2023461C460020635
-:10206000CC60FF03120604E0F20714E10461F204FD
-:1020700014E10C60FF0357656667B16204206BBB17
-:102080000000062E50C12C101000E1F03C10280971
-:1020900023320C4080040621D9C11809D9810809CE
-:1020A000CB4400000C20C006262104300C40400226
-:1020B0000CF02C01F1F00C208004262104310C409E
-:1020C00040020CF02C01F1F0042108A000300BB804
-:1020D00000000CB022002CA0004904210BB7000026
-:1020E00008E000802CE00CDC0471267E107704C030
-:1020F00006DCB971040938710409068EC6C7325A64
-:1021000004901068C69632540C400009062C06391B
-:102110002641CBF7000086228249C4219204285828
-:102120003600F2032858260038210009066257615C
-:10213000266A30665C60FF0F3F5506000C60C006E3
-:1021400026612662103618682800C663D205186812
-:102150002F00C656022A0C608004266126621046B3
-:10216000C4412F4202009205C45022119106F20F81
-:10217000C450120D045191562F640100A0669207BD
-:102180000C60C00626612431266291362F6401005E
-:102190002046F740A1460C60800426612662103676
-:1021A000CBFB0000C420320224D12491F2AB24C125
-:1021B000F2A3187E0400182E0300183E0200262702
-:1021C0004B980000187E35002627C6D28208B4B18D
-:1021D000820604210BB80000FA81FFFF58C11809DC
-:1021E000588108092C102809E1F000003C1040003B
-:1021F000D9C13000D9812000B9210400B9310800CB
-:10220000B9410C0004EA04210BB8000004210BB70B
-:102210000000B4E192F9085000802C500CDC04411D
-:102220002645104408A000301C608813068E067EE8
-:10223000069E06CEB94110002CA00049384110007E
-:1022400006B5C6C4324104D0104BC6D4323B062C6E
-:10225000063D0641B9511C00B9611800B97114005E
-:10226000CBF70000862238511C0038611800387105
-:1022700014008226C4219204283B3600F203283B36
-:10228000260030415741264A30445C40FF0F3F331F
-:102290000400C430064332021643C4302204183B03
-:1022A0002900F203183B2A00C643020204913F337F
-:1022B0000400C6633205066306EC068D067424D15D
-:1022C000F2C424C1F2BC38610C000420B17638712C
-:1022D000080038610400C692B187B1E68202042486
-:1022E00058C13000588120002C104000E1F000005F
-:1022F0003C101000D1C106E406C2042806D36BC10D
-:1023000000000870008038674CDD08700040B96735
-:10231000587004216BBB0000087000802C700CDC2E
-:102320009867300028672C00920906365735082038
-:1023300000302C2000406636F211985731002857A3
-:102340003200820406750636F203067606355775A6
-:10235000082000302C20004066370C4000090CF0AB
-:102360004001F1F004206BBB00000C2000026B0464
-:102370000100062C063D064E6B0F010050C12C10CB
-:102380001000E1F03C101800D9C10800C1A106C33B
-:1023900006B2CBD90000087000802C7000F00860F5
-:1023A00000802FD607002C60000C2FA6070006ED3A
-:1023B000063E0C20300077310CF09C02F1F02CE04E
-:1023C0000004C6EA92F60CF09802F1F0063D064BC6
-:1023D0000C20500177310C5040020CF0D002F1F08B
-:1023E000AB42000008300080087000802C3000FAFA
-:1023F0002637064C0C20500177310C5080000CF031
-:10240000D002F1F04BDA000058C1080040A12C10B6
-:102410001800E1F03C102000D9C1100008D0008065
-:10242000D18106C4069206B3062E0C20800B063D11
-:102430002C3000FA0C40000206A606850CF00401C0
-:10244000F1F00658087000802C70AB0C5756665798
-:102450005798067E0C70800B6659A957CC017758A7
-:10246000A957CE01385014002CD000FAA957D0013A
-:102470007758A957D201385DC801063B5738663CEA
-:102480002451CCA03200A937C401A957C80177381C
-:102490007758A937C601A957CA0104609205A967F0
-:1024A000C001A967C20108200000084000002C20DC
-:1024B0008002083000802C406C0336422C303C886F
-:1024C0000CF00401F1F008200030063E0C30800BC7
-:1024D0002C2000402B1C010058C1100050812C10F2
-:1024E0002000E1F0187051151C5010005675CC20DA
-:1024F00032003C101C006478D9C10C009970511551
-:1025000008E0008006D22CE000FA9209B87EC001F3
-:1025100092060C2078006B430000F21C0B63000055
-:1025200004212B5B000004210BB8000004210BB731
-:102530000000042804342631064126218B170100AF
-:10254000065238310800302138410400066DAB20B6
-:1025500001006B120000386ECC0108700030B967C2
-:102560000401386EC401B96708018BEA0000F2006B
-:102570000870008006672C600CDC3418C1E1183745
-:102580000CDC18E66700182601004B980000087064
-:1025900000302C7000490440C642820C3057244160
-:1025A0005C50FF0F2F6E050057686665B167247495
-:1025B000F2F440E12418E1F03C103400D981140019
-:1025C000088000802C800CDC047126781077D9C13B
-:1025D000240004A008B00030B9210C0006C3B941A2
-:1025E0000400B951080006DAB97110002CB0004996
-:1025F000387110000698C6D7325304E01059C6E56A
-:10260000324D062D063E0641CBF70000862282445D
-:10261000C421920CC4C028593600820C284960009D
-:102620002839620026452344F211C4C028592600E7
-:10263000920718392F002F4503002344F207284939
-:102640005C0028395E0026452344302138710C0097
-:102650003F330500C47106525751265B2333305572
-:10266000820267585C50FF0FC6533205C4C0043164
-:102670008212F206C6540210C4C0820D04303841E2
-:102680000400CBFB00003871080030412F5A0A00CB
-:102690002657A14524A124E1F2B224D1F2AA58C1BF
-:1026A0002400062A588114002C103400E1F00000A8
-:1026B000987049153C10A404D9C19404D9818404AC
-:1026C0000642824F062306510431CB2D010086D2EB
-:1026D000024804236BC1000004210BB80000042150
-:1026E0000BB70000087000802C700CDC1897640099
-:1026F0001887650034D1147226DD267108B00030C9
-:1027000026D1B97180042CB00049207D0CC0FF0F88
-:1027100057712FAB070030EA56CE67E85CE0FF0F39
-:10272000C6CE3F2E0C0002030639F20206384B9843
-:1027300000000C306400EB9E0000262ECC20FF0F22
-:1027400006E202030CE0FF0F3871800434D257E830
-:10275000C6D766ECB1EA92DA182051156BC10000B9
-:1027600058C19404588184042C10A404E1F00000A2
-:102770009850AD1038602C15184678001876770000
-:1027800092099850AE108206266518669400267647
-:10279000137798605015820D086000802C600CDC67
-:1027A000185684001866850026752646137713444C
-:1027B00010620450C6658214C667A212CC60130072
-:1027C000C20B24410674577157422647C6641C70D9
-:1027D00010003204F2050C701300917204510625AA
-:1027E000E1F000000C3000101850FC143063187039
-:1027F0001A1008400F002C40FFFF24615664084067
-:10280000003C6664165506471677F75F574A08205E
-:10281000F000F77F5642577AD75966646675B16300
-:102820006C707500D76A667608600030B976000172
-:10283000E1F0000034140C20800204300C408004CD
-:10284000B1F10CF02C01F1F00C20000704300C4029
-:1028500080040CF02C01F1F00C20800B04300C40B3
-:1028600080040CF02C01F1F030F12414E1F00000B0
-:102870003414B1F1AB41010008700080182708DC66
-:102880000B2A03000BAB010008700080287776DC70
-:10289000A9702010ABC601002BE8030030F124140E
-:1028A000E1F000003414B1F12B2D0300EB2C0200F9
-:1028B000CB5A01008B5B01004BC803006B60030027
-:1028C0000C2022140430044A99001B100CF02C0137
-:1028D000F1F00C20081404300C4018000CF02C010E
-:1028E000F1F030F12414E1F034140C20C41404305D
-:1028F0000C401C00B1F10CF02C01F1F030F124146B
-:10290000E1F000003414B1F16B5701000B2D02000F
-:102910008B02020030F12414E1F0000098700510E1
-:102920003C101000D1C1820A18608712CC60C70029
-:10293000D22D246199608712F229990087126B6069
-:10294000030099008E1299009512147199708B12E0
-:1029500099708A1238601C1506E7C464C2098B5B43
-:102960000100CB5A01002B2D03004BC80300387027
-:1029700018150C601400C676D203347113673870D2
-:102980001C15C676C203EB2C02009870A3108206B9
-:10299000CC70F900D20F2471F20B3870C4140667A2
-:1029A0007766F77A546F5477A6768204047199702B
-:1029B000A3109860861206D792073870C414D47199
-:1029C00092036B6003003850C414067518408812D7
-:1029D0007776547FC647320499708812F20A0675DA
-:1029E000DC7000F0920698708612920399008812AB
-:1029F000987053158214287006101C60E1005676FA
-:102A0000A97006102B4801004B8703004B8A030076
-:102A10004BC8030099001A1099002A119870FA14F3
-:102A2000820A18701B10CC70FF0082072471997005
-:102A30001B10F20399001B1050C12C101000E1F084
-:102A40003418C1E12B480100AB2D0300ABD70200C5
-:102A50002B2403002B3302000B0402006B9B0100AC
-:102A60008B6201004B3C0300C4209226EB4F030015
-:102A700086E292229870861282079900DE14EB4853
-:102A80000100062EF21A38702C159877A8009206CD
-:102A90006BC701000BBB0100F2050BBB01006BC74C
-:102AA0000100CBA203004B8A03004B830300CBB091
-:102AB00003000B8F0300042140E12418E1F0000023
-:102AC0001820FA141830DE143414B1F16BEB030043
-:102AD0002BD103008BC40300ABB503004BBE030036
-:102AE000EB48010030F12414E1F0000034180C2010
-:102AF000791204300445C1E10CF02C01F1F00C20F6
-:102B0000D41104300C4050000CF02C01F1F00CE01A
-:102B10000010990E83020C20701404300C40280021
-:102B20000CF02C01F1F0990E99040C20C41404301F
-:102B300004440CF02C01F1F00C20C81404300C40BB
-:102B400014000CF02C01F1F0990EDE04A90EDC0447
-:102B500040E12418E1F0000034140C20A4100430EB
-:102B6000044CB1F10CF02C01F1F030F12414E1F03F
-:102B7000E1F0000038602C153414B1F10C70001035
-:102B80009857910228267400820428267C00F208B7
-:102B900098779202820528767C0026272322063227
-:102BA0004B98000030F12414E1F000003C1030009C
-:102BB000D9C12000D981100006D306A30CC0001093
-:102BC000048157D2D7A126DC26ACB151268404B8A3
-:102BD0000C503201066226BD265A047413880C205C
-:102BE000D40106E3998BD601069406350647262DB7
-:102BF000B9610C00B9510400B97108008B320400AE
-:102C000038710800385104000C20D801262D0647E1
-:102C100006358B320400287A360126C9997BD70104
-:102C20003071997DE001287A3001A97BD4013861A7
-:102C30000C00266E918624E199EC7902990C7402BD
-:102C400058C12000588110002C103000E1F0000025
-:102C50003C10E800D9C1D80038702C15D981C800C3
-:102C60000C5077000C6079000C207A0026572667FC
-:102C70002627105518E7780010661072B9519C008D
-:102C800004B0B961A800B971B0000CA03012069B65
-:102C90000C8000101878840206D8C697320F147280
-:102CA000267A90778207062A8B3B0100C420820295
-:102CB00024B124912CA01000F2EEC4B09908AE000B
-:102CC0007848A4007878A8007838A6007868AA0028
-:102CD00082223F660300C46038502C15320216660B
-:102CE000283588004366C66332163F770400C470F7
-:102CF0003202167728658A004377C676320304715C
-:102D0000F20828658C00C67632030472F20204735E
-:102D1000997DAE00987DAD00920F987DAE00820C3B
-:102D200038602C1538519C0026761877940026754B
-:102D30001377B9719C0038702C15186D87021877BD
-:102D40009400C667B207987DAC0082040471997D37
-:102D5000AD00987050158219087000802C700CDC42
-:102D600038519C0018678400266513663851A80006
-:102D7000B9619C00186785001877860026E62675DD
-:102D8000137713EEB971A8000C20880026210430B7
-:102D900004450CF02C01F1F0287D0600DC70E00009
-:102DA000820A6B5701004B8703000471997D2E0145
-:102DB000FAD40200E87D08043206987D09049ACF0F
-:102DC0000200F207E87D26042ACA0200990D2E01AE
-:102DD000987D850282043471997D8502986D040086
-:102DE000B96190009205987D84028AB70200983DEF
-:102DF0008402921F0C2024120C4050000CF02C0175
-:102E0000F1F098ED85029AA9020038719000C6E7AA
-:102E1000320C0C208800063E064E26210C50140071
-:102E20006B5D010024E1F2F2997D8302FA960200C3
-:102E30000C2078000431262104460CF02C01F1F01E
-:102E4000183D84020470065DB971A0000667C66370
-:102E5000321218453002CC401300C2040421B921BB
-:102E6000A0003441CC401200D202047124612C50E5
-:102E70001000F2EEC47082040450B951A000AB5BA4
-:102E8000010038702C15B9219400049218C77600FF
-:102E90001481063CEB9E0000063CEB9E000024E201
-:102EA000067E577157E2267E0460B921AC00B971E5
-:102EB000B400B961A40014E126E9062114310C40E4
-:102EC00078000CF02C01F1F00C2080002621143148
-:102ED00004450CF02C01F1F0139E066104B038712A
-:102EE0009000C6B73268C49038E194009206B85199
-:102EF000A000920338E1AC00067BD771267DB97142
-:102F000098000C7080002671267B0CC0001004A174
-:102F1000B971B800187D84021451265AC657324739
-:102F2000987C2E0282400C203002262CB961C00011
-:102F30008B3B0100C6293861C000923538419800AA
-:102F4000782C2802787432013627C42032021622E7
-:102F500038419800785C2A02787434013F77050084
-:102F6000C470320216770632B961C000B971BC0074
-:102F70004B9800003871BC00065206370627B9513D
-:102F8000C4004B9800003851C4003861C0002625A9
-:102F9000C62E32053851B80006E291A5067A57715F
-:102FA0002676B12724A12CC01000F2B524B12C60E4
-:102FB0001800F2960450B9519800387198003861A1
-:102FC0009000C6763ADD0000C49038619400920902
-:102FD000B861A000820438619400F2033861AC004B
-:102FE000044104700C5088002651265790259217F2
-:102FF0000C5080002651265760352F570700265762
-:1030000026552653575126513055C6563208C450BE
-:103010002206C43022040665068706423821900045
-:103020002471C67222E0C4409AA4000006E857E268
-:103030003851A40026ED987EDE0124510CA0D40165
-:10304000B951A40026AE9A9500000C70800026713C
-:10305000267860C70434263C0C60001057322636B0
-:10306000062A2C30D4010C4010000CF0EC00F1F0DA
-:1030700006B80C700010D7B126B70C703201267B51
-:1030800006370444062AB971BC008B320400286B51
-:1030900036010424996EDF013871BC00262A0637F8
-:1030A00004448B320400287B300138519C00A97EF7
-:1030B000DC01187EE001C65722042471997EE001EC
-:1030C000187EE001CC701300C2093861B400C676E6
-:1030D00032052C701400997EE001187EDE01182D57
-:1030E00084020C6088002661266891763471046140
-:1030F000267D266899677902990774020C7078001A
-:103100002671267C910757C106510470C490144162
-:103110002F6C0500B146384194009206B861A000BA
-:1031200092033841AC000C608800266126679066E7
-:103130008209386190002471C6762C50180022E76D
-:10314000F2120CF0800026F126F7C66232F32461F9
-:10315000063657312635B03322F9C63432F7916F2F
-:103160000643F2F4187D84023851A400C657320891
-:10317000386198002461B9619800FA20FFFFC4907B
-:103180009A9BFEFF990D86020C80301206E906C953
-:1031900006B906AD185D8402C6C5320D0C50780024
-:1031A00024C12651265C9055827738519000265BC9
-:1031B000C454020F287D06000464D667827138511A
-:1031C000B00014655676995D8502A97D0600F26807
-:1031D0001442264810443871A80006943491B9412D
-:1031E0009400269A0C40A00026491824D401143CCF
-:1031F000C6272638B23CC4B4123A0628B931BC00FE
-:10320000B941C000B951C4008B3B0100C420383122
-:10321000BC003841C0003851C40082291824D401B0
-:1032200024B124219924D40106255722262A0C40B2
-:1032300010002C20D401B951C4000CF0EC00F1F0C6
-:103240003851C400386194000C408800264126455E
-:10325000245199597902985A1A0091640471997A03
-:10326000860224E19219997A1A00F21606288B3BFD
-:103270000100C42082110421992DAC001058CC50BB
-:103280001300C20A185A8402C4519206285A060032
-:103290006454A95A06002C801000FA7DFFFF0CB080
-:1032A000E01104C00CA0800B38719000C6C73251E9
-:1032B0000C7088002671267C9097923D0C707912D4
-:1032C000E0679235E86705009232186D84020C7051
-:1032D00026002679D771C461267D18270100105772
-:1032E00038702C15C20428872A00F208C4608204B2
-:1032F00028872800F20328872600087000801837E6
-:103300000CDCB951C4004B9800003851C40026258C
-:103310002622262A7072C678220E0C2088002621CA
-:10332000063C064904516B5D0100F2052491C495E9
-:10333000247192C7987D85028208062B8B3B010081
-:10334000C42092030471917B24C12CB01000F2AD13
-:1033500026E799ED8302F203990D860258C1D80041
-:103360005881C8002C10E800E1F000003C10380043
-:10337000D9C12800D98118000CE0001038402C1564
-:10338000287E06000C602000D66730348209986ED3
-:10339000040092061C6021005676A97E0600985E05
-:1033A00004008AD700000C706200282E0600186402
-:1033B0006100267410770CF01000D6F2B971040089
-:1033C000187463008207C667C20436671366F20288
-:1033D00004610C709401267E2077B1510482045060
-:1033E0005683B971080054340C70681106D506C5AF
-:1033F000B9810C00B9311000A8370400825738A1F8
-:103400000C0004B0C6AB820938F10400C63FC20507
-:10341000B1B16C20200004B1B88110008247C4B063
-:103420009245C636A2431834600038A10800C63A57
-:10343000B23D183706002FF3030026F326FF26FEC1
-:10344000E89F9601023306A563A3D4A1922F70874B
-:1034500018AF9701B98114000C800010D7A126A8DD
-:1034600038811400A98A320178870200A98A3401C0
-:1034700004A153A3063A663523530432263B133383
-:10348000263F18A3960124B1063AD731263EA90358
-:103490003201A9033401A9033601C69B0431533A12
-:1034A000663D23D392EB26C923CC24780CF09011EF
-:1034B000C67F92A33031A92E0600C4C0993E0400F5
-:1034C00082430CA000102CA030010468266A04B0CE
-:1034D000B9610400187E0400C6B7322B067D637BF9
-:1034E000D4718225067BD771068BB1710490185E6A
-:1034F0000400C685B21AC48492090C20501104300D
-:1035000004480CF02C01F1F0F20D302138310400A8
-:103510003061262A26362629263904480CF0EC008C
-:10352000F1F024812498F2E4F7D034B124B1F2D33D
-:103530003FCC0700287E060099CE04006C70100076
-:10354000A97E0600F2061C7011005627A92E06005F
-:1035500058C12800588118002C103800E1F00000F4
-:103560003C103400D9C1240008C000802CC00CDC01
-:10357000D9811400189C020018DC0300288C0A0072
-:1035800028BC0C00C4908AD10000C4D08ACE0000B0
-:103590002688067857712687238806282F39090040
-:1035A000EB9E000006A22342042004610C7022104E
-:1035B00006E22669C66E2F580200221A0639B94162
-:1035C0000400B9510C00B9611000B9710800EB9EFC
-:1035D000000038410400387108002624A127385122
-:1035E0000C003861100024E124720625F2E40CE09E
-:1035F00000100C701E00249FA97E220026991C70CA
-:103600001E002678269EA979020028703C155C7061
-:103610001000A377B1718205A90E2200A9890200CA
-:1036200026BB067B577126B723BB062B2F3D0D000B
-:10363000EB9E000006922342042004610C7062108D
-:103640000682266DC6682F5B0200221A063DB9412C
-:103650000400B9510C00B9611000B9710800EB9E6B
-:10366000000038410400387108002624A127385191
-:103670000C0038611000248124720625F2E40C70DD
-:1036800014002CD02F00A97E620026DD1C701400CF
-:10369000267B26DEA97D0200B0718205A90E62009C
-:1036A000A9BD0200987C34008240186C35000CD013
-:1036B0003C1406BC3F7C0B00C6763237187B3D00BD
-:1036C000043A2C7010002677267E28570200B96134
-:1036D000100024B13F2A0500B9510C00EB9E0000F8
-:1036E000187B3700A92D0400043A2C70300026778F
-:1036F000267E288702003F290800EB9E0000A12DAE
-:1037000038510C00043A2F2A0500EB9E0000A92D29
-:103710000600043A2F290800EB9E0000A92D0200A4
-:103720003861100024D8F2C758C124005881140011
-:103730002C103400E1F0000038602C15C42018660D
-:10374000A700065232021652C6560208C6260204C6
-:103750003F660300F202266323460624E1F00000E0
-:1037600038702C153C102400D9C11400D9810400F4
-:103770003077DC70100082410CC00010989C8302EE
-:10378000823C988C840282390CE0D41104D0C6D9D2
-:103790003234066A0C602E120470C678322A2C600D
-:1037A00010001C5010002656184E0A001055C64531
-:1037B000921E24755772267C7847D40178B7D601BB
-:1037C000703E787E02003F240300367B233323447F
-:1037D000B171CBB90100A12E3071283E020006273D
-:1037E000234BCBB90100A92E0200F2032471F2D6BB
-:1037F00024D12CE01000F2CC58C1140058810400F0
-:103800002C102400E1F00000C6343C102000D9C187
-:103810001000D18106E278A1200078C1240078D17F
-:1038200028003205A1C2A9D20200F220C635220525
-:10383000A162A9A20200F21A3F94030006293F3CAC
-:1038400006003FB405004B980000063BEB9E0000CD
-:10385000262CA12E3F3D0A0006294B980000063B6E
-:10386000EB9E0000262DA92E020058C110005081A9
-:103870002C102000E1F000002F7202002672066773
-:103880005762267626270C7000102C2098022627D7
-:10389000067204693461C460A9072400A9072600E0
-:1038A000347492F904719972280038702C15A902A9
-:1038B0002A0018779A0099022D00A9023200997205
-:1038C0002C001471A9023000A9022E00A172A97265
-:1038D0000200E1F03418C1E104E0062ECBC3010080
-:1038E00024E1C4E592FB40E12418E1F038702C1586
-:1038F0003C108C000C60A500D9C17C00D9816C0003
-:1039000026671066B9613C003067D4688A9A030064
-:1039100018B7980006D704E0182D9B0004CC26C1E8
-:10392000063B4B98000026CE24E4CCE02800B12CC6
-:1039300024D192F30CD00010987D83029205ABC67F
-:103940000100FA7F0300047006EDB9713800387188
-:103950003800267DE8A7790282150C602C15307698
-:1039600034A19877A60057A226AD0CB0D40126BA90
-:103970009AD10000042C262B8B3B0100C4209ACA4C
-:10398000000038213800CBC30100387138002CE02A
-:1039900034002471C475B971380092DA186DDE01F3
-:1039A000990D930234612F760600267606575752FA
-:1039B000267526762C709802267D78570A0078673F
-:1039C00006003665C46032021666CC602C01020621
-:1039D000C45082040461996D9302186D8302C4611E
-:1039E0009A8C0000986D84028A280300F86708000A
-:1039F0008A240300F8570A008A200300F8470400CD
-:103A00008A1C0300F85706008A18030028503C154A
-:103A1000DC50100038502C1528357E0082035731B9
-:103A2000F20226333F660400C46023333202166676
-:103A3000C663021E184D900204615C40FC00994D63
-:103A40009002996D8E0278F7040078270800C6F27C
-:103A500002076441994D900204610450F20FC6F2CE
-:103A600004610450320B6442994D9002F207C46A1B
-:103A70000451120204501355046078270600784759
-:103A80000A003F440200C44032021644C643021AF0
-:103A9000184D900204315C40F300994D9002993D1D
-:103AA0008E027837060078770A00C637020364442E
-:103AB000F204C63732046448994D900224611366BB
-:103AC000F205C44A020324511355987D91029211C4
-:103AD000C452920C187D8F02CC70FF008AAE020097
-:103AE0002471997D8F02FAA90200C4608AA602009F
-:103AF000990D8F02FAA20200C4629AA30200387DD7
-:103B0000D401B97DA400387DE401B97DA800FA99FB
-:103B10000200087000802C700CDC28570A00786ABC
-:103B2000D401C6560A33FFFF28670C00787AD60105
-:103B3000C6670A2CFFFF0CC0980226CE067C0468DC
-:103B4000285720003461A957240028572200C46058
-:103B5000A9572600347492F50C209C02063B262EB1
-:103B600004448B3204000471997D2C01187EC0023C
-:103B7000782E9C02783EA002C471C2123F730200EC
-:103B8000C470320216774367785E9E02787EA20286
-:103B90003F770500C470320216774387F2040C8029
-:103BA00064000668B96168000CF0D400F1F0B92136
-:103BB0003400783EA202782E9E020CF0D400F1F080
-:103BC0000692783EA402382134000CF0D400F1F0C3
-:103BD000783EA602B921400006290CF0D400F1F08D
-:103BE000B9214400783EA802784EAC02382140004A
-:103BF0000CF0D800F1F04322B9214800783EAA0227
-:103C0000784EAE02382144000CF0D800F1F0432287
-:103C1000B9214C00783EB002784EB40238214800F9
-:103C20000CF0D800F1F04322B9215000783EB202E6
-:103C3000784EB60238214C000CF0D800F1F0432247
-:103C4000B9215400783EB802784EBC0238215000A9
-:103C50000CF0D800F1F04322B9215800783EBA02A6
-:103C6000784EBE02382154000CF0D800F1F03861D3
-:103C700068004322B9215C00063806260CF080005B
-:103C8000F1F099204D15287EC8020431A97ECA02A0
-:103C9000287EC602A92EC602A97EC802187EC502C9
-:103CA000263726772F63030026C70470166606277B
-:103CB0002F570C00347278552E00C676262592F9BF
-:103CC000EB9E00003871100006C2B97160003861C7
-:103CD00060000471C6260211386118000472C626FD
-:103CE000020C386120000473C626020738612800E0
-:103CF0000475C62612020474186EC4023F3607000B
-:103D00000C702C153047787EC20218249900C430FC
-:103D100016520204C672920FF205C4308206C675AE
-:103D20009206A90EC202F20AC47002033471F204B0
-:103D3000C47082042471A97EC202787EC202184433
-:103D40009900C6749205C464D2032461F20E284D12
-:103D50000600D4488205C675920AC461F204C6758D
-:103D60009206C463C2043461996EC402185EC00234
-:103D7000382158000635B9516400EB9E00003851D7
-:103D80006400438238215C000635EB9E0000184E2B
-:103D9000C40238516400C44143729235C458C20E03
-:103DA000382158000439EB9E0000438238215C0022
-:103DB0000439EB9E00004372F203C456C215382149
-:103DC0005000B97164000437EB9E00004392382123
-:103DD00054000437EB9E0000387164000648065713
-:103DE00006894372F20306480657B9410400B951E7
-:103DF0000800B171062B063C38410C0038516000B8
-:103E0000FA9C0000C4429234C456C20E38215000BD
-:103E10000437EB9E00004382382154000437EB9EA8
-:103E200000004372F203C454C21538214800B9712E
-:103E300064000435EB9E0000439238214C000435A9
-:103E4000EB9E0000387164000648065706894372ED
-:103E5000F20306480657B9410400B9510800B17190
-:103E6000062B063C3841140038511800F266C44352
-:103E70009234C454C20E382148000435EB9E000031
-:103E8000438238214C000435EB9E00004372F2035C
-:103E9000C452C21538214000B97164000433EB9E4E
-:103EA00000004392382144000433EB9E0000387137
-:103EB00064000648065706894372F203064806570F
-:103EC000B9410400B9510800B171062B063C3841D4
-:103ED0001C0038512000F231C4449231C452C20E49
-:103EE000382140000433EB9E000043823821440017
-:103EF0000433EB9E00004372F203C4529211385116
-:103F00003400386134000649F74FF75F269426568F
-:103F1000E750E7900638064743854379F2030638B1
-:103F20000647B94108003851280038412400B9310A
-:103F30000400B171062B063C0668F220C451C20E83
-:103F40003861340038713400F76F26670679F77FDF
-:103F50002697E760E79043864379785E9E0278FE75
-:103F60009C0238412C00B15138513000B981040015
-:103F7000B9710800062B063C066F4BC00100187E85
-:103F8000C002C478D2042471997EC002187EC50292
-:103F9000C471D2042471997EC502187ADE0134718D
-:103FA0002F670700266706965792266926762C709B
-:103FB00098022F970D00F0292239F8790200223655
-:103FC00038613C00B97164000CC06400068C368610
-:103FD00006384B980000063CEB9E00000662383124
-:103FE0003C00782AD401B96168004B980000063C77
-:103FF000EB9E0000386168003871640026260638A0
-:10400000A92AD40106274B980000063CEB9E00002D
-:10401000068238313C00782AD6014B980000063CD5
-:10402000EB9E00002628A92AD6010629063B044457
-:104030008B320400FAABFCFF387DD401B97DA400BB
-:1040400058C17C0058816C002C108C00E1F00000FD
-:1040500034140C20681104300C402800B1F10CF02D
-:104060002C01F1F00C20961114310C403C000CF0A6
-:104070002C01F1F030F1A9001E102414E1F0000031
-:104080003C104803D9C138030CC00010286C06004E
-:10409000D981280338702C15DC60100018E75C000B
-:1040A00082081877640036E7C4E0120204E113EED8
-:1040B0000C20E00226210430044A0CF02C01F1F01F
-:1040C000062104300C4040020CF02C01F1F00C20D1
-:1040D0004002262104300C4078000CF02C01F1F055
-:1040E0000C20B8020C402800262104300CF02C01D2
-:1040F000F1F0282C0800A90C9001063E4B98000016
-:104100000C306400AB9B0000287C0E0004E02627E6
-:104110000C706210A92C9201B971040304A1068EDF
-:1041200008F000802CF00CDC187F0100C6873A21D3
-:104130000100105F04D0B951EC023451B9511003A1
-:104140003851EC02C6D53A0D01003821EC02063890
-:104150004B980000262D232206620C4092010C7021
-:1041600080022662264C266770447066B921F002F0
-:10417000B941F402C6640AF200002F7D0D0004B0BC
-:10418000267CB9711403B9B1F802B9B1FC02B9B116
-:104190000003066BB9B10803069B3851F0023821C1
-:1041A000F402237B265723552F4505000CF080028F
-:1041B000264F7044C6420A950000133EB9310C03E5
-:1041C00038F10C033642382114032F35010091F3E6
-:1041D0002F3B0B00263228332200B9511C03062442
-:1041E000B9611803B9712403B94120034B98000049
-:1041F0003831F80238F10403384120032632B9314E
-:10420000F802203F06244B9800003831FC0238F1B8
-:104210000003384120033871240338511C033861EE
-:104220001803C480263226F42471B931FC02B9F196
-:1042300000032377824F3821EC02C49036522F4579
-:104240000100921890449208C4D08208144126417B
-:1042500026459044820306E4F20B38311003C6D39E
-:1042600082390441264126549055823406E5049152
-:10427000F23190448204C64E9A8B0100C4D0820968
-:1042800014412641264590448204C64E9A8101007D
-:1042900038F11003C6DF82090421262126529045F9
-:1042A0008204C64E9A750100B84108030491821237
-:1042B000C4640491D20FC4E4D20DC6E60C50E002EF
-:1042C0002651C204265E9165F20538410C0326563C
-:1042D00091453851EC0224D1C6D524B12A5FFFFFA5
-:1042E0001461266AC468D23AC490920306EA24A1F3
-:1042F0003821F002B971240306472621333E0CF021
-:104300002C01F1F01451265E2F65050026655761DA
-:1043100026613846400238F1F8023821FC02383173
-:10432000000338712403264FB94640023846440240
-:1043300057512642B9464402384648022643B946F8
-:1043400048022F6501002856B8029986BB022675DF
-:10435000A976B80204719976BA0224D1FAF2FEFF66
-:104360003861040324812462B9610403FADAFEFF90
-:104370001491269AC499C20D0870008018BC0400DC
-:1043800018A70CDC28DC1E0006EC0490FAF10000F3
-:1043900014B226BA2FEB0B0006DA26EB0C604002B3
-:1043A00057D157E1266126D10C70AC02068926E66A
-:1043B0002CD0B0022671C48082450C60E0022661D8
-:1043C0002668106634611356C459D2382F56060039
-:1043D000265657512651303E3845400257612643F4
-:1043E000B9454002383E0400384544022661264360
-:1043F000B9454402383E080038454802062E264397
-:10440000B9454802204D2856B802043C2654A95606
-:10441000B8023F4E0700263EB97124030CF0EC00B1
-:10442000F1F00C40DC0204342641062D263D364DC9
-:104430000CF0EC00F1F038712403348134EC34D406
-:10444000F2BB0C70E0022671267B066AC461821CF6
-:10445000985701008216905782140656C659D20EFC
-:104460000C40E00226412645182701001034C623DF
-:104470009203103791342451F2F2105799570100EA
-:1044800034613471F2E40676C67A8A77FFFF0C5005
-:10449000E0022651265790459203916524612471CC
-:1044A000F2F4183E3101062A4B980000187E3001C4
-:1044B0000CF0E002262723722671107726F1267F62
-:1044C000105714712675B37722510667576126611C
-:1044D0002846B802995E6E012F3505002F6503004E
-:1044E00026662FF60C00A94E6C0104612F260F00E2
-:1044F000E8229601324026532655265C2665999679
-:104500009601186596012461996596011364C6D6D3
-:10451000A96E3601065DB202065623D52F57070055
-:104520002F67050057612661B88648029202048110
-:1045300026755771267138274002B9874802063818
-:10454000B9712403AB9B0000043AAB9B0000A92E79
-:10455000680138712403063838274402AB9B0000F9
-:10456000043AAB9B0000A92E6A01249124E8C69B63
-:104570002299F2052461C46692BAF2C9A9DC1E0030
-:1045800058C13803588128032C104803E1F0066411
-:104590000441B9410803FA8DFEFF0000E1F000007C
-:1045A00034140C20301104300C402800B1F10CF010
-:1045B0002C01F1F030F1990004102414E1F0000016
-:1045C0003C10240008700080D9C1140018E70CDCEE
-:1045D000D981040006672C600CDC06B30692063E07
-:1045E000062506C406D5188601004B980000262C27
-:1045F000262234D12F4E0E002FA20B00063E062D90
-:10460000B1414B980000262C26223041342226B29C
-:10461000043034C1067C065B0460C4D0220BC6D8CB
-:104620003209C4702207C67E320570F5702AC6F2C0
-:10463000121124614366C4632452247192EF243121
-:104640004333C43324D126B492E6707A0421B1797D
-:10465000F202042058C11400588104002C102400D8
-:10466000E1F000003C10840108700080D9C17401A1
-:10467000044106E72CE00CDC264E1044107ED98164
-:1046800064010C209E00B941CC0026210430044472
-:10469000B971AC000CF02C01F1F0062104300C4093
-:1046A00049000CF02C01F1F00C7000100C60FF0FB1
-:1046B000A9670800046E26672066A9070A00A907F3
-:1046C0000C00B961F40098604315A90794010687AE
-:1046D000820A08E000802CE00CDC0C709600267E3C
-:1046E0002077F20738702C150CD0260026D7207DB5
-:1046F000B971EC003891EC002878620138E02C1593
-:10470000267923770C402C00A9785801264E2044A6
-:1047100098605015B9414801820E28680600D46897
-:10472000820A085000802C500CDC28658200267616
-:10473000A9785801087000403827E4703831AC007F
-:104740005C20FF010BA100008622820A0860008025
-:104750002C600CDC187602003471C6279208286E93
-:104760002E00287858012676A97858016BBA0000E7
-:1047700038E02C15283EC6004B9800000C30640031
-:10478000AB9B0000307EB9214C010C600040D66725
-:1047900082040C60800BF2030C608002DC700080ED
-:1047A000B961E00082040C70800BF2030C7080028F
-:1047B0003891AC00B971F0000C704C0006D9269904
-:1047C000B99150013891CC00B9D1C800267104D0FC
-:1047D000B991C40034720492B9D1D000B9D1B800F3
-:1047E000B991BC00B9D1A800B971440138D1A80071
-:1047F0003871CC00C6D73AFE040006C70CC00010C2
-:10480000067D2C702E0026770490267CB991D4006A
-:10481000B97154013871D4003891AC004377C6792E
-:10482000B971B0003AD9040038D1D0003891D40021
-:1048300026D923DD43AD2F6A0A000C70800226764C
-:10484000705738702C1528775E00C65702062878F6
-:1048500094012471A978940106EAE7E126E1107E2B
-:1048600054D7637DD4719AB10400082000802C20B5
-:104870000CDC98723400822C047326721077389105
-:10488000A800B971C400C697320C04722672107762
-:104890003891B000B971C800C697320F0472F21691
-:1048A0003891AC003871CC00B991C8000491B9714D
-:1048B000C400B991BC00F20C3871AC003891CC0046
-:1048C000B971C800B991C4000471B971BC00067314
-:1048D0000C70800B266738914C0170764369C67660
-:1048E0002A7404003891BC00C491920838914801A0
-:1048F0004369C6762A6A0400F20678685801C667DA
-:104900001A6404003841B0003851A800B901A4006D
-:104910000C20A40026210C30800B0B2E0200C4209A
-:104920008A5404003871A40028680C00C67622035B
-:10493000A9780C00047106673841AC00105E536D15
-:1049400038D1B0003441C6D46665916E820B0657EB
-:10495000265A0665E76126615457537510566675E9
-:1049600091763871CC003891A8003471C697822CAA
-:104970003871AC00B891B000267A0637E73126319D
-:10498000045704615657102306D653D5065D665268
-:104990009153820B143126370653E7512651543771
-:1049A000536310356663916538D1B000C6D4820C6C
-:1049B00024710667E76104575657266104715375E1
-:1049C0001056667591763841A8003861D4001344BA
-:1049D00013660C504C00B941D8000CB0780004D0DC
-:1049E00026513441B961DC00346126B10CE0FFFF8F
-:1049F000B951C000B9D1B400B941E400B961E800CF
-:104A00003891E4003821AC00269E339906394B9842
-:104A100000003861C0002322065B0C70FFFF38F1F4
-:104A2000E800C49026F733FF220B3841C400C69437
-:104A30003207C4F022053841C800C6F42203A1069B
-:104A4000F22326F23841E00023FF26FF264F2034D0
-:104A50003841F40036340643C33332020440C4E222
-:104A6000A1464334D211C472D20F3841F00026D38C
-:104A700026F4204F38F1F400364FA1453841B400F8
-:104A80002441B941B40024712377C47424622452B0
-:104A900092C73851C00024E123EEC4E4245AB9512E
-:104AA000C00024B692AE98704215921D3831B40001
-:104AB0003431C430120204313871BC00C471921315
-:104AC00078E1640038B02C15062DAB9B0000287BE4
-:104AD00038003F220E00C627B206287B3A00C6E700
-:104AE0002A74030038702C15782188002837360086
-:104AF0004B9800000C306400EB9E00003871BC0045
-:104B000043E2C471923C06750C70301504982697E8
-:104B10002827020028F7040028D7060020793861EA
-:104B2000500128303015B971B4003871AC000C4018
-:104B30004C00266A264104A5246224481CB0320099
-:104B400036A706760450C673820FC672820DC67FE2
-:104B5000820BC67D82093891B400C67982052F95F3
-:104B60000400A9092800345AC65B347192ED3871EB
-:104B700044013442C6473465266A92E478D1640021
-:104B800028780800B9D1A400C67D0203A9D808007E
-:104B900028780A00C67D3203A9D80A00CCD0630069
-:104BA0001AC2000038700415C47FDABD00003870E6
-:104BB0000015C47FDAB8000078215A00063D2F6244
-:104BC000020026620656D75226652626EB9E000076
-:104BD000CC20320002073871B80024712377B971F4
-:104BE000B80078216E00063D2F620200266206564C
-:104BF000D75226652626EB9E0000CC203200020705
-:104C00003871B80024712377B971B8007821620037
-:104C1000063D2F62020026620656D75226652626DA
-:104C2000EB9E0000CC20320002073871B8002471DE
-:104C30002377B971B80078216600063D2F62020023
-:104C400026620656D75226652626EB9E0000CC200B
-:104C5000320002073871B80024712377B971B800A7
-:104C60003891B800C492C25F78214C00063D2F6293
-:104C7000020026620656D75226652626EB9E0000C5
-:104C8000CC2019000207F8714E00924DF8715600C1
-:104C9000F23F78215400063D2F620200266206563C
-:104CA000D75226652626EB9E0000CC20190002076D
-:104CB000F87152009238F8715E00F22A782174007F
-:104CC000063D2F62020026620656D752266526262A
-:104CD000EB9E0000CC2019000207F87176009223A9
-:104CE000F8716A00F21578217C00063D2F620200FF
-:104CF00026620656D75226652626EB9E0000CC205B
-:104D000019000211F8717A00920EF8717200920B7C
-:104D10000C60280099604C15287C06006C700020FF
-:104D2000A97C0600187804007861860038D1DC0080
-:104D30003841D800D771C66E267899D73001994787
-:104D400031010472120A78618000C66E1206786121
-:104D50008C00C66E1202047078618A00C66E120959
-:104D600078618400C66E120578619000C66E0202FA
-:104D7000647478618200C66E120978618000C66E24
-:104D8000120578618400C66E0202647878618E0034
-:104D9000C66E120978618C00C66E120578619000AB
-:104DA000C66E02036C7010000C604C0004420434A8
-:104DB000042856475637562726610C5074005C70FD
-:104DC0001000246826511344133313221377C44070
-:104DD0009202A105C4309203A9050800C4209202E2
-:104DE000A106C4709203A9062800389144013462D8
-:104DF000C669345A92ED0C704C0026717077B97107
-:104E0000B4000C704E00267170773821B400B9716F
-:104E1000C0000C705000267170773831C000B97135
-:104E2000D8000C705200267170773841D800B971E3
-:104E3000DC000C705400267170773851DC00066776
-:104E4000B971E4000CF0E000F1F00C707400267110
-:104E500070770692B971E8000C7076002671707751
-:104E60003821E800B971F8000C707800267170776D
-:104E70003831F800B971FC000C707A002671707737
-:104E80003841FC00B97100010C707C00267170770C
-:104E9000385100010667B97104010CF0E000F1F02F
-:104EA0000C70560026717077B9210801B9710C0198
-:104EB0000C7058002671707738210C01B9711001FF
-:104EC0000C705A002671707738311001B9711401D5
-:104ED0000C705C002671707738411401B9711801AB
-:104EE0000C705E0026717077385118010667B97131
-:104EF0001C010CF0E000F1F00C706000267170777E
-:104F000078416400B97120010C70620026717077DD
-:104F100006A2B97124010C706600267170773831D1
-:104F2000240138212001B97128010C706800267114
-:104F30007077385128010667B9712C010CF0E00038
-:104F4000F1F00C706A002671707706E2B9713001D9
-:104F50000C706C002671707738213001B971340102
-:104F60000C706E002671707738313401B9713801D8
-:104F70000C7070002671707738413801B9713C01AE
-:104F80000C7072002671707738513C010667B97158
-:104F900040010CF0E000F1F03861080106B2063A79
-:104FA0000629064E065B0CF0E000F1F086D2920670
-:104FB000047A04DAA971640006ED062938915401D7
-:104FC000283902004B9800003871A80006922C7016
-:104FD0002F002677267C28370200062A4B980000EF
-:104FE0003871A80006A22C7030002677267C28375E
-:104FF0000200062E4B9800003871A80006422C7063
+:101C6000386754106662B9675410E1F00860ADDE61
+:101C7000087000402C608C03B9670010386754105E
+:101C800015225626B9275410E1F000000860ADDE99
+:101C9000087000402C608C03B9670010385758104A
+:101CA000CC20FF001C4000015654920AB95758102E
+:101CB000B967001038674C1014525665F209665225
+:101CC000B9575810B967001038674C106461B9678C
+:101CD0004C10E1F00860ADDE087000402C608C0311
+:101CE000B9670010C43038674C1082056662B96766
+:101CF0004C10F20515225626B9274C10E1F00000D1
+:101D00000870ADDE086000402C708C03B9760010BE
+:101D10000473B9764410E1F008600040387608108A
+:101D20006672B9760810E1F00860004038766410F9
+:101D30006672B9766410E1F0046208700040B96719
+:101D40001410E1F0232208700040B9271010E1F0D0
+:101D500008600040387614106471B9761410E1F010
+:101D6000086000403876141014525675B976141075
+:101D7000E1F00000C420047F82030C709C006C70B2
+:101D8000000108600040B9767410E1F00461087049
+:101D90000040B9677010E1F0C42008700040820470
+:101DA0000461B167F202B107E1F00000C4305721CD
+:101DB00008700040267282040461B167F202B10724
+:101DC000E1F000003C101000D1C16B12000008705F
+:101DD0001CE1086000302C7004E9B976040108E0C9
+:101DE0000040B97608012CE0701004D1B1DE042A5D
+:101DF0006B430000F2FC00003C101000C161016167
+:101E00000170C9610800046108700040B96714409E
+:101E1000486108001116110740612C101000610084
+:101E20003C101000C16101610170C96108000461CA
+:101E300008700040B9671450486108001116110776
+:101E400040612C10100061003C102400D9410800B2
+:101E500001610170C9611C000461B9F11800C12160
+:101E600099605915EB410000046108700040B967A2
+:101E7000781048611C0038F1180040211116110734
+:101E8000584108002C102400610000003C10100094
+:101E9000C16101610170C9610800087000403867C4
+:101EA0000870B967087004619960581548610800A6
+:101EB0001116110740612C10100061000870040019
+:101EC000247426270870FFBF57262C7000C0B1422B
+:101ED00026270C4004400870004026472642B134B3
+:101EE0000C401040264726422C700840B15426274B
+:101EF000B162E1F0087000402C7008405726262798
+:101F000030726C700001B172E1F0000008700040A6
+:101F10002C7008405726262730721C600101567627
+:101F2000B172E1F00870004057262C700C40267208
+:101F30003027E1F0087000803C101400D9C1040083
+:101F400006C318370CDCB1B106E72CE00CDC06B494
+:101F500006D22B9A0000187E02002F6C0200C6C722
+:101F6000B16BB212187E03000422C6D7A21E187EDF
+:101F700005000423C6D78219187E06000420C6D7A0
+:101F800092140423F212187E350034710C5030156F
+:101F90002677267504203452C67582072047C6640A
+:101FA000920204213472F2F958C1040030B12C10AD
+:101FB0001400E1F03C101000D1C106C206E4042177
+:101FC00006D34BBD0000085000802C500CDC9875E7
+:101FD0002E00920274D1087000302C70004057C15E
+:101FE0002F270C009845300030620C70FF035676A6
+:101FF0007765922AC4E08209C4D08204267E266EC8
+:10200000F211366E367EF20EC4D08207C667020326
+:102010002471F2082461F206C66702033461F202F9
+:102020003471C4700209CC70FF0304E0020714E1AC
+:102030000C70FF03F20314E10471C4600235CC603C
+:10204000FF031235F23798553100821AC4E0820737
+:10205000C4D08203267EF208367EF206C4D0820304
+:102060002471F2043471C4700208CC70FF03021AA8
+:1020700014E10C70FF03F21E14E10471F21BC4E0C2
+:102080008207C4D08203266EF208366EF206C4D0F0
+:1020900082032461F2023461C4600206CC60FF0353
+:1020A000120604E0F20714E10461F20414E10C608A
+:1020B000FF0357656667B16204204BBD0000062E22
+:1020C00050C12C101000E1F03C10280923320C40C4
+:1020D00080040621D9C11809D9810809CB44000020
+:1020E0000C20C006262104300C4040020CF02C01CC
+:1020F000F1F00C208004262104310C4040020CF049
+:102100002C01F1F0042108A00030EBB900000CB064
+:1021100022002CA000490421EBB8000008E0008058
+:102120002CE00CDC0471267E107704C006DCB9714B
+:10213000040938710409068EC6C7325A0490106823
+:10214000C69632540C400009062C06392641ABF9DC
+:10215000000086228249C421920428583600F203E6
+:10216000285826003821000906625761266A306621
+:102170005C60FF0F3F5506000C60C00626612662BA
+:10218000103618682800C663D20518682F00C65696
+:10219000022A0C608004266126621046C4412F4248
+:1021A00002009205C45022119106F20FC450120D84
+:1021B000045191562F640100A06692070C60C0067E
+:1021C00026612431266291362F6401002046F740B3
+:1021D000A1460C608004266126621036ABFD00002B
+:1021E000C420320224D12491F2AB24C1F2A3187E80
+:1021F0000400182E0300183E020026272B9A000028
+:10220000187E35002627C6D28208B4B18206042182
+:10221000EBB90000FA81FFFF58C11809588108097D
+:102220002C102809E1F000003C104000D9C130001A
+:10223000D9812000B9210400B9310800B9410C004E
+:1022400004EA0421EBB900000421EBB80000B4E17A
+:1022500092F9085000802C500CDC044126451044B3
+:1022600008A000301C608813068E067E069E06CEEF
+:10227000B94110002CA000493841100006B5C6C471
+:10228000324104D0104BC6D4323B062C063D0641E9
+:10229000B9511C00B9611800B9711400ABF9000004
+:1022A000862238511C0038611800387114008226CB
+:1022B000C4219204283B3600F203283B260030411B
+:1022C0005741264A30445C40FF0F3F330400C4307E
+:1022D000064332021643C4302204183B2900F2039D
+:1022E000183B2A00C643020204913F330400C66330
+:1022F0003205066306EC068D067424D1F2C424C1AF
+:10230000F2BC38610C000420B176387108003861E5
+:102310000400C692B187B1E68202042458C130009D
+:10232000588120002C104000E1F000003C1010000B
+:10233000D1C106E406C2042806D34BC300000870CE
+:10234000008038674CDD08700040B9675870042180
+:102350004BBD0000087000802C700CDC98673000CA
+:1023600028672C00920906365735082000302C20AB
+:1023700000406636F2119857310028573200820427
+:1023800006750636F20306760635577508200030C6
+:102390002C20004066370C4000090CF04001F1F0A1
+:1023A00004204BBD00000C2000024B060100062C4F
+:1023B000063D064E4B11010050C12C101000E1F0FB
+:1023C0003C101800D9C10800C1A106C306B2ABDB9E
+:1023D0000000087000802C7000F0086000802FD68C
+:1023E00007002C60000C2FA6070006ED063E0C200F
+:1023F000300077310CF09C02F1F02CE00004C6EACA
+:1024000092F60CF09802F1F0063D064B0C205001BC
+:1024100077310C5040020CF0D002F1F0AB420000DA
+:1024200008300080087000802C3000FA2637064CF7
+:102430000C20500177310C5080000CF0D002F1F0EC
+:102440002BDC000058C1080040A12C101800E1F05E
+:102450003C102000D9C1100008D00080D18106C4F2
+:10246000069206B3062E0C20800B063D2C3000FA97
+:102470000C40000206A606850CF00401F1F0065897
+:10248000087000802C70AB0C575666575798067E24
+:102490000C70800B6659A957CC017758A957CE010B
+:1024A000385014002CD000FAA957D0017758A957FA
+:1024B000D201385DC801063B5738663C2451CCA098
+:1024C0003200A937C401A957C80177387758A9370E
+:1024D000C601A957CA0104609205A967C001A9678E
+:1024E000C20108200000084000002C2080020830B3
+:1024F00000802C406C0336422C30FC890CF0040127
+:10250000F1F008200030063E0C30800B2C200040FB
+:102510000B1E010058C1100050812C102000E1F06A
+:10252000187053151C5010005675CC2032003C100A
+:102530001C006478D9C10C009970531508E0008024
+:1025400006D22CE000FA9209B87EC00192060C2057
+:1025500078006B430000F21C0B63000004212B5B2E
+:1025600000000421EBB900000421EBB800000428AE
+:1025700004342631064126216B19010006523831F8
+:102580000800302138410400066D8B2201006B12D7
+:102590000000386ECC0108700030B9670401386E55
+:1025A000C401B96708016BEC0000F20008700080FC
+:1025B00006672C600CDC3418C1E118370CDC18E617
+:1025C0006700182601002B9A0000087000302C705C
+:1025D00000490440C642820C305724415C50FF0F32
+:1025E0002F6E050057686665B1672474F2F440E108
+:1025F0002418E1F03C103400D981140008800080D8
+:102600002C800CDC047126781077D9C1240004A03A
+:1026100008B00030B9210C0006C3B9410400B9511B
+:10262000080006DAB97110002CB0004938711000AA
+:102630000698C6D7325304E01059C6E5324D062D30
+:10264000063E0641ABF9000086228244C421920C6A
+:10265000C4C028593600820C28496000283962001D
+:1026600026452344F211C4C0285926009207183980
+:102670002F002F4503002344F20728495C00283926
+:102680005E0026452344302138710C003F3305009D
+:10269000C47106525751265B233330558202675866
+:1026A0005C50FF0FC6533205C4C004318212F206DB
+:1026B000C6540210C4C0820D043038410400ABFD82
+:1026C00000003871080030412F5A0A002657A145F2
+:1026D00024A124E1F2B224D1F2AA58C12400062A8E
+:1026E000588114002C103400E1F000009870491556
+:1026F0003C10A404D9C19404D98184040642824FB9
+:10270000062306510431AB2F010086D20248042370
+:102710004BC300000421EBB900000421EBB800001A
+:10272000087000802C700CDC189764001887650016
+:1027300034D1147226DD267108B0003026D1B9716B
+:1027400080042CB00049207D0CC0FF0F57712FABC7
+:10275000070030EA56CE67E85CE0FF0FC6CE3F2E9A
+:102760000C0002030639F20206382B9A00000C30E6
+:102770006400CBA00000262ECC20FF0F06E202034F
+:102780000CE0FF0F3871800434D257E8C6D766ECEE
+:10279000B1EA92DA182053154BC3000058C19404D3
+:1027A000588184042C10A404E1F000009850AD106E
+:1027B00038602C15184678001876770092099850E2
+:1027C000AE10820626651866940026761377986008
+:1027D0005215820D086000802C600CDC18568400B5
+:1027E0001866850026752646137713441062045038
+:1027F000C6658214C667A212CC601300C20B2441C6
+:102800000674577157422647C6641C701000320484
+:10281000F2050C701300917204510625E1F00000DE
+:102820000C3000101850FC14306318701A10084057
+:102830000F002C40FFFF246156640840003C666492
+:10284000165506471677F75F574A0820F000F77FBE
+:102850005642577AD75966646675B1636C707500D5
+:10286000D76A667608600030B9760001E1F00000B2
+:1028700034140C20800204300C408004B1F10CF0C0
+:102880002C01F1F00C20000704300C4080040CF007
+:102890002C01F1F00C20800B04300C4080040CF073
+:1028A0002C01F1F030F12414E1F000003414B1F106
+:1028B0008B43010008700080182708DC4B360300AA
+:1028C000EBAC010008700080287776DCA97020103E
+:1028D0008BC801002BF6030030F12414E1F0000056
+:1028E0003414B1F16B390300CB2E0200AB5C010054
+:1028F0006B5D01004BD603006B6E03000C202214AD
+:102900000430044A99001B100CF02C01F1F00C204B
+:10291000081404300C4018000CF02C01F1F030F1D8
+:102920002414E1F034140C20C41404300C401C00B6
+:10293000B1F10CF02C01F1F030F12414E1F00000C1
+:102940003414B1F14B590100EB2E02006B0402006C
+:1029500030F12414E1F00000987005103C101000D4
+:10296000D1C1820A18608712CC60C700D22D2461C1
+:1029700099608712F229990087126B6E0300990003
+:102980008E1299009512147199708B1299708A1297
+:1029900038601C1506E7C464C2096B5D0100AB5CBE
+:1029A00001006B3903004BD60300387018150C601A
+:1029B0001400C676D2033471136738701C15C676BE
+:1029C000C203CB2E02009870A3108206CC70F900CF
+:1029D000D20F2471F20B3870C41406677766F77A49
+:1029E000546F5477A676820404719970A31098608E
+:1029F000861206D792073870C414D47192036B6E96
+:102A000003003850C4140675184088127776547F36
+:102A1000C647320499708812F20A0675DC7000F01D
+:102A20009206987086129203990088129870551534
+:102A30008214287006101C60E1005676A9700610FA
+:102A40000B4A01004B9503004B9803004BD6030043
+:102A500099001A1099002A119870FA14820A1870B5
+:102A60001B10CC70FF008207247199701B10F203B9
+:102A700099001B1050C12C101000E1F03418C1E176
+:102A80000B4A0100EB390300EBE302006B3003005B
+:102A90000B350200EB0502004B9D01006B64010049
+:102AA0008B480300C4209226EB5D030086E292224D
+:102AB0009870861282079900DE14CB4A0100062E18
+:102AC000F21A38702C159877A80092064BC90100AD
+:102AD000EBBC0100F205EBBC01004BC90100CBB01F
+:102AE00003004B9803004B910300CBBE03000B9DEA
+:102AF0000300042140E12418E1F000001820FA143A
+:102B00001830DE143414B1F16BF903002BDF03002D
+:102B10008BD20300ABC303004BCC0300CB4A0100B4
+:102B200030F12414E1F0000034180C207912043044
+:102B30000445C1E10CF02C01F1F00C20D41104305B
+:102B40000C4050000CF02C01F1F00CE00010990E3C
+:102B500083020C20701404300C4028000CF02C016F
+:102B6000F1F0990E99040C20C414043004440CF0C4
+:102B70002C01F1F00C20C81404300C4014000CF0AF
+:102B80002C01F1F0990EDE04A90EDC0440E12418BA
+:102B9000E1F0000034140C20A4100430044CB1F116
+:102BA0000CF02C01F1F030F12414E1F0E1F0000020
+:102BB00038602C153414B1F10C7000109857910244
+:102BC00028267400820428267C00F2089877920256
+:102BD000820528767C002627232206322B9A0000C5
+:102BE00030F12414E1F000003C103000D9C1200085
+:102BF000D981100006D306A30CC00010048157D25F
+:102C0000D7A126DC26ACB151268404B80C50320181
+:102C1000066226BD265A047413880C20D40106E3EC
+:102C2000998BD601069406350647262DB9610C000E
+:102C3000B9510400B97108008B40040038710800D4
+:102C4000385104000C20D801262D064706358B404C
+:102C50000400287A360126C9997BD7013071997D05
+:102C6000E001287A3001A97BD40138610C00266E7E
+:102C7000918624E199EC7902990C740258C12000E4
+:102C8000588110002C103000E1F000003C10E800EA
+:102C9000D9C1D80038702C15D981C8000C507700E4
+:102CA0000C6079000C207A002657266726271055DD
+:102CB00018E7780010661072B9519C0004B0B96131
+:102CC000A800B971B0000CA03012069B0C80001057
+:102CD0001878840206D8C697320F1472267A907735
+:102CE0008207062A6B3D0100C420820224B1249190
+:102CF0002CA01000F2EEC4B09908AE007848A400F1
+:102D00007878A8007838A6007868AA0082223F6602
+:102D10000300C46038502C1532021666283588002E
+:102D20004366C66332163F770400C47032021677DA
+:102D300028658A004377C67632030471F208286555
+:102D40008C00C67632030472F2020473997DAE00E1
+:102D5000987DAD00920F987DAE00820C38602C15E6
+:102D600038519C0026761877940026751377B97130
+:102D70009C0038702C15186D870218779400C66770
+:102D8000B207987DAC0082040471997DAD00987003
+:102D900052158219087000802C700CDC38519C0090
+:102DA00018678400266513663851A800B9619C0035
+:102DB000186785001877860026E62675137713EEC8
+:102DC000B971A8000C2088002621043004450CF0BD
+:102DD0002C01F1F0287D0600DC70E000820A4B59DE
+:102DE00001004B9503000471997D2E01FAD4020075
+:102DF000E87D08043206987D09049ACF0200F207A4
+:102E0000E87D26042ACA0200990D2E01987D8502CC
+:102E100082043471997D8502986D0400B961900037
+:102E20009205987D84028AB70200983D8402921F21
+:102E30000C2024120C4050000CF02C01F1F098ED05
+:102E400085029AA9020038719000C6E7320C0C2066
+:102E50008800063E064E26210C5014004B5F0100F0
+:102E600024E1F2F2997D8302FA9602000C207800A8
+:102E70000431262104460CF02C01F1F0183D8402A7
+:102E80000470065DB971A0000667C663321218456A
+:102E90003002CC401300C2040421B921A000344107
+:102EA000CC401200D202047124612C501000F2EECA
+:102EB000C47082040450B951A0008B5D01003870C9
+:102EC0002C15B9219400049218C776001481063C91
+:102ED000CBA00000063CCBA0000024E2067E577188
+:102EE00057E2267E0460B921AC00B971B400B96123
+:102EF000A40014E126E9062114310C4078000CF0FE
+:102F00002C01F1F00C2080002621143104450CF036
+:102F10002C01F1F0139E066104B038719000C6B721
+:102F20003268C49038E194009206B851A000920330
+:102F300038E1AC00067BD771267DB97198000C7022
+:102F400080002671267B0CC0001004A1B971B80066
+:102F5000187D84021451265AC6573247987C2E0297
+:102F600082400C203002262CB961C0006B3D01006C
+:102F7000C6293861C000923538419800782C280263
+:102F8000787432013627C420320216223841980064
+:102F9000785C2A02787434013F770500C4703202ED
+:102FA00016770632B961C000B971BC002B9A0000D7
+:102FB0003871BC00065206370627B951C4002B9A57
+:102FC00000003851C4003861C0002625C62E3205E5
+:102FD0003851B80006E291A5067A57712676B127D6
+:102FE00024A12CC01000F2B524B12C601800F29678
+:102FF0000450B95198003871980038619000C67635
+:103000003ADD0000C490386194009209B861A000D4
+:10301000820438619400F2033861AC00044104700A
+:103020000C50880026512657902592170C5080008E
+:103030002651265760352F57070026572655265309
+:10304000575126513055C6563208C4502206C43056
+:103050002204066506870642382190002471C67254
+:1030600022E0C4409AA4000006E857E23851A400C8
+:1030700026ED987EDE0124510CA0D401B951A400A4
+:1030800026AE9A9500000C7080002671267860C7E5
+:103090000434263C0C60001057322636062A2C30A9
+:1030A000D4010C4010000CF0EC00F1F006B80C70EC
+:1030B0000010D7B126B70C703201267B06370444C6
+:1030C000062AB971BC008B400400286B3601042429
+:1030D000996EDF013871BC00262A063704448B4004
+:1030E0000400287B300138519C00A97EDC01187E49
+:1030F000E001C65722042471997EE001187EE001A8
+:10310000CC701300C2093861B400C67632052C7049
+:103110001400997EE001187EDE01182D84020C60F7
+:10312000880026612668917634710461267D2668C0
+:1031300099677902990774020C7078002671267CD1
+:10314000910757C106510470C49014412F6C0500BB
+:10315000B146384194009206B861A000920338410C
+:10316000AC000C6088002661266790668209386191
+:1031700090002471C6762C50180022E7F2120CF051
+:10318000800026F126F7C66232F3246106365731F5
+:103190002635B03322F9C63432F7916F0643F2F484
+:1031A000187D84023851A400C6573208386198004F
+:1031B0002461B9619800FA20FFFFC4909A9BFEFF3A
+:1031C000990D86020C80301206E906C906B906ADD3
+:1031D000185D8402C6C5320D0C50780024C12651FA
+:1031E000265C9055827738519000265BC454020FBC
+:1031F000287D06000464D66782713851B0001465DA
+:103200005676995D8502A97D0600F268144226482B
+:1032100010443871A80006943491B9419400269A5C
+:103220000C40A00026491824D401143CC627263897
+:10323000B23CC4B4123A0628B931BC00B941C0004E
+:10324000B951C4006B3D0100C4203831BC00384185
+:10325000C0003851C40082291824D40124B124218B
+:103260009924D40106255722262A0C4010002C2030
+:10327000D401B951C4000CF0EC00F1F03851C40095
+:10328000386194000C408800264126452451995904
+:103290007902985A1A0091640471997A860224E19D
+:1032A0009219997A1A00F21606286B3D0100C42083
+:1032B00082110421992DAC001058CC501300C20A81
+:1032C000185A8402C4519206285A06006454A95A16
+:1032D00006002C801000FA7DFFFF0CB0E01104C046
+:1032E0000CA0800B38719000C6C732510C7088005A
+:1032F0002671267C9097923D0C707912E06792358A
+:10330000E86705009232186D84020C702600267959
+:10331000D771C461267D18270100105738702C150D
+:10332000C20428872A00F208C46082042887280083
+:10333000F203288726000870008018370CDCB9518A
+:10334000C4002B9A00003851C40026252622262AC4
+:103350007072C678220E0C2088002621063C064991
+:1033600004514B5F0100F2052491C495247192C76A
+:10337000987D85028208062B6B3D0100C4209203D4
+:103380000471917B24C12CB01000F2AD26E799EDB9
+:103390008302F203990D860258C1D8005881C800F3
+:1033A0002C10E800E1F000003C103800D9C12800E2
+:1033B000D98118000CE0001038402C15287E06003A
+:1033C0000C602000D66730348209986E04009206A3
+:1033D0001C6021005676A97E0600985E04008AD7FC
+:1033E00000000C706200282E06001864610026742C
+:1033F00010770CF01000D6F2B97104001874630055
+:103400008207C667C20436671366F20204610C7055
+:103410009401267E2077B151048204505683B971FD
+:10342000080054340C70681106D506C5B9810C002B
+:10343000B9311000A8370400825738A10C0004B03D
+:10344000C6AB820938F10400C63FC205B1B16C2099
+:10345000200004B1B88110008247C4B09245C6363E
+:10346000A2431834600038A10800C63AB23D1837AC
+:1034700006002FF3030026F326FF26FEE89F9601A1
+:10348000023306A563A3D4A1922F708718AF9701CA
+:10349000B98114000C800010D7A126A8388114002F
+:1034A000A98A320178870200A98A340104A153A3B2
+:1034B000063A663523530432263B1333263F18A3BE
+:1034C000960124B1063AD731263EA9033201A90359
+:1034D0003401A9033601C69B0431533A663D23D318
+:1034E00092EB26C923CC24780CF09011C67F92A3CE
+:1034F0003031A92E0600C4C0993E040082430CA0BE
+:1035000000102CA030010468266A04B0B9610400E0
+:10351000187E0400C6B7322B067D637BD4718225EA
+:10352000067BD771068BB1710490185E0400C685C6
+:10353000B21AC48492090C205011043004480CF0D3
+:103540002C01F1F0F20D3021383104003061262ACF
+:1035500026362629263904480CF0EC00F1F02481A7
+:103560002498F2E4F7D034B124B1F2D33FCC070071
+:10357000287E060099CE04006C701000A97E06001B
+:10358000F2061C7011005627A92E060058C128000B
+:10359000588118002C103800E1F000003C10340075
+:1035A000D9C1240008C000802CC00CDCD9811400D3
+:1035B000189C020018DC0300288C0A0028BC0C00B0
+:1035C000C4908AD10000C4D08ACE00002688067834
+:1035D00057712687238806282F390900CBA00000C1
+:1035E00006A22342042004610C70221006E2266920
+:1035F000C66E2F580200221A0639B9410400B9518B
+:103600000C00B9611000B9710800CBA0000038416E
+:103610000400387108002624A12738510C003861B5
+:10362000100024E124720625F2E40CE000100C7076
+:103630001E00249FA97E220026991C701E00267859
+:10364000269EA979020028703C155C701000A377B3
+:10365000B1718205A90E2200A989020026BB067B52
+:10366000577126B723BB062B2F3D0D00CBA00000C2
+:1036700006922342042004610C7062100682266DBB
+:10368000C6682F5B0200221A063DB9410400B951F9
+:103690000C00B9611000B9710800CBA000003841DE
+:1036A0000400387108002624A12738510C00386125
+:1036B0001000248124720625F2E40C7014002CD032
+:1036C0002F00A97E620026DD1C701400267B26DEFA
+:1036D000A97D0200B0718205A90E6200A9BD020099
+:1036E000987C34008240186C35000CD03C1406BC29
+:1036F0003F7C0B00C6763237187B3D00043A2C70B5
+:1037000010002677267E28570200B961100024B1E8
+:103710003F2A0500B9510C00CBA00000187B3700F0
+:10372000A92D0400043A2C7030002677267E2887C5
+:1037300002003F290800CBA00000A12D38510C0049
+:10374000043A2F2A0500CBA00000A92D0600043A58
+:103750002F290800CBA00000A92D0200386110001D
+:1037600024D8F2C758C12400588114002C1034000A
+:10377000E1F0000038602C15C4201866A70006523E
+:1037800032021652C6560208C62602043F660300DD
+:10379000F202266323460624E1F0000038702C155F
+:1037A0003C102400D9C11400D98104003077DC70AA
+:1037B000100082410CC00010989C8302823C988CBF
+:1037C000840282390CE0D41104D0C6D93234066A9E
+:1037D0000C602E120470C678322A2C6010001C5027
+:1037E00010002656184E0A001055C645921E247524
+:1037F0005772267C7847D40178B7D601703E787E20
+:1038000002003F240300367B23332344B171ABBB5A
+:103810000100A12E3071283E02000627234BABBBCE
+:103820000100A92E0200F2032471F2D624D12CE06B
+:103830001000F2CC58C11400588104002C10240050
+:10384000E1F00000C6343C102000D9C11000D18145
+:1038500006E278A1200078C1240078D12800320542
+:10386000A1C2A9D20200F220C6352205A162A9A2F6
+:103870000200F21A3F94030006293F3C06003FB4C1
+:1038800005002B9A0000063BCBA00000262CA12EA1
+:103890003F3D0A0006292B9A0000063BCBA0000002
+:1038A000262DA92E020058C1100050812C10200096
+:1038B000E1F000002F72020026720667576226763A
+:1038C00026270C7000102C20980226270672046907
+:1038D0003461C460A9072400A9072600347492F952
+:1038E00004719972280038702C15A9022A001877E3
+:1038F0009A0099022D00A902320099722C001471CD
+:10390000A9023000A9022E00A172A9720200E1F002
+:103910003418C1E104E0062EABC5010024E1C4E582
+:1039200092FB40E12418E1F038702C153C108C001B
+:103930000C60A500D9C17C00D9816C002667106697
+:10394000B9613C003067D4688A9A030018B79800C0
+:1039500006D704E0182D9B0004CC26C1063B2B9A09
+:10396000000026CE24E4CCE02800B12C24D192F330
+:103970000CD00010987D830292058BC80100FA7F5D
+:103980000300047006EDB971380038713800267DE7
+:10399000E8A7790282150C602C15307634A198774F
+:1039A000A60057A226AD0CB0D40126BA9AD10000C9
+:1039B000042C262B6B3D0100C4209ACA000038213C
+:1039C0003800ABC50100387138002CE03400247198
+:1039D000C475B971380092DA186DDE01990D930241
+:1039E00034612F76060026760657575226752676BE
+:1039F0002C709802267D78570A0078670600366595
+:103A0000C46032021666CC602C010206C4508204E7
+:103A10000461996D9302186D8302C4619A8C000051
+:103A2000986D84028A280300F86708008A2403003E
+:103A3000F8570A008A200300F84704008A1C030094
+:103A4000F85706008A18030028503C15DC50100077
+:103A500038502C1528357E0082035731F202263368
+:103A60003F660400C460233332021666C663021E3A
+:103A7000184D900204615C40FC00994D9002996DD4
+:103A80008E0278F7040078270800C6F20207644126
+:103A9000994D900204610450F20FC6F20461045083
+:103AA000320B6442994D9002F207C46A045112022B
+:103AB0000450135504607827060078470A003F44F5
+:103AC0000200C44032021644C643021A184D900246
+:103AD00004315C40F300994D9002993D8E02783795
+:103AE000060078770A00C63702036444F204C6373A
+:103AF00032046448994D900224611366F205C44A69
+:103B0000020324511355987D91029211C452920CD4
+:103B1000187D8F02CC70FF008AAE02002471997D5F
+:103B20008F02FAA90200C4608AA60200990D8F02D2
+:103B3000FAA20200C4629AA30200387DD401B97DC2
+:103B4000A400387DE401B97DA800FA99020008704C
+:103B500000802C700CDC28570A00786AD401C65605
+:103B60000A33FFFF28670C00787AD601C6670A2C53
+:103B7000FFFF0CC0980226CE067C04682857200060
+:103B80003461A957240028572200C460A957260091
+:103B9000347492F50C209C02063B262E04448B4084
+:103BA00004000471997D2C01187EC002782E9C02BD
+:103BB000783EA002C471C2123F730200C470320288
+:103BC00016774367785E9E02787EA2023F770500F3
+:103BD000C470320216774387F2040C8064000668D2
+:103BE000B96168000CF0D400F1F0B9213400783EDE
+:103BF000A202782E9E020CF0D400F1F00692783EDC
+:103C0000A402382134000CF0D400F1F0783EA60272
+:103C1000B921400006290CF0D400F1F0B92144008C
+:103C2000783EA802784EAC02382140000CF0D80053
+:103C3000F1F04322B9214800783EAA02784EAE0244
+:103C4000382144000CF0D800F1F04322B9214C0097
+:103C5000783EB002784EB402382148000CF0D8000B
+:103C6000F1F04322B9215000783EB202784EB602FC
+:103C700038214C000CF0D800F1F04322B921540057
+:103C8000783EB802784EBC02382150000CF0D800C3
+:103C9000F1F04322B9215800783EBA02784EBE02B4
+:103CA000382154000CF0D800F1F03861680043224C
+:103CB000B9215C00063806260CF08000F1F099204E
+:103CC0004F15287EC8020431A97ECA02287EC6028A
+:103CD000A92EC602A97EC802187EC50226372677FD
+:103CE0002F63030026C70470166606272F570C00A3
+:103CF000347278552E00C676262592F9CBA00000A6
+:103D00003871100006C2B97160003861600004713A
+:103D1000C6260211386118000472C626020C3861EA
+:103D200020000473C6260207386128000475C626E1
+:103D300012020474186EC4023F3607000C702C1572
+:103D40003047787EC20218249900C430165202040B
+:103D5000C672920FF205C4308206C6759206A90E8D
+:103D6000C202F20AC47002033471F204C470820405
+:103D70002471A97EC202787EC20218449900C674DA
+:103D80009205C464D2032461F20E284D0600D44883
+:103D90008205C675920AC461F204C6759206C463B0
+:103DA000C2043461996EC402185EC0023821580002
+:103DB0000635B9516400CBA000003851640043823D
+:103DC00038215C000635CBA00000184EC4023851E3
+:103DD0006400C44143729235C458C20E3821580061
+:103DE0000439CBA00000438238215C000439CBA009
+:103DF00000004372F203C456C21538215000B97155
+:103E000064000437CBA000004392382154000437EB
+:103E1000CBA000003871640006480657068943723B
+:103E2000F20306480657B9410400B9510800B171C0
+:103E3000062B063C38410C0038516000FA9C00000B
+:103E4000C4429234C456C20E382150000437CBA06D
+:103E500000004382382154000437CBA00000437295
+:103E6000F203C454C21538214800B9716400043506
+:103E7000CBA00000439238214C000435CBA00000B9
+:103E8000387164000648065706894372F2030648F3
+:103E90000657B9410400B9510800B171062B063C20
+:103EA0003841140038511800F266C4439234C454A7
+:103EB000C20E382148000435CBA0000043823821CF
+:103EC0004C000435CBA000004372F203C452C2156B
+:103ED00038214000B97164000433CBA00000439244
+:103EE000382144000433CBA0000038716400064838
+:103EF000065706894372F20306480657B941040083
+:103F0000B9510800B171062B063C38411C003851EC
+:103F10002000F231C4449231C452C20E3821400014
+:103F20000433CBA000004382382144000433CBA0EB
+:103F300000004372F203C4529211385134003861C8
+:103F400034000649F74FF75F26942656E750E7906E
+:103F50000638064743854379F20306380647B941D8
+:103F600008003851280038412400B9310400B171EB
+:103F7000062B063C0668F220C451C20E386134009C
+:103F800038713400F76F26670679F77F2697E76068
+:103F9000E79043864379785E9E0278FE9C02384122
+:103FA0002C00B15138513000B9810400B9710800BA
+:103FB000062B063C066F2BC20100187EC002C47897
+:103FC000D2042471997EC002187EC502C471D20445
+:103FD0002471997EC502187ADE0134712F670700BB
+:103FE000266706965792266926762C7098022F9798
+:103FF0000D00F0292239F8790200223638613C00A0
+:10400000B97164000CC06400068C368606382B9AA1
+:104010000000063CCBA00000066238313C00782A44
+:10402000D401B96168002B9A0000063CCBA00000C7
+:10403000386168003871640026260638A92AD40140
+:1040400006272B9A0000063CCBA0000006823831E0
+:104050003C00782AD6012B9A0000063CCBA0000039
+:104060002628A92AD6010629063B04448B400400D1
+:10407000FAABFCFF387DD401B97DA40058C17C00A7
+:1040800058816C002C108C00E1F0000034140C20DE
+:10409000681104300C402800B1F10CF02C01F1F053
+:1040A0000C20961114310C403C000CF02C01F1F066
+:1040B00030F1A9001E102414E1F000003C10480368
+:1040C000D9C138030CC00010286C0600D981280320
+:1040D00038702C15DC60100018E75C008208187737
+:1040E000640036E7C4E0120204E113EE0C20E002A3
+:1040F00026210430044A0CF02C01F1F00621043092
+:104100000C4040020CF02C01F1F00C204002262162
+:1041100004300C4078000CF02C01F1F00C20B802B7
+:104120000C402800262104300CF02C01F1F0282C42
+:104130000800A90C9001063E2B9A00000C30640088
+:104140008B9D0000287C0E0004E026270C70621076
+:10415000A92C9201B971040304A1068E08F0008015
+:104160002CF00CDC187F0100C6873A210100105F9B
+:1041700004D0B951EC023451B95110033851EC025A
+:10418000C6D53A0D01003821EC0206382B9A000002
+:10419000262D232206620C4092010C7080022662BA
+:1041A000264C266770447066B921F002B941F402CA
+:1041B000C6640AF200002F7D0D0004B0267CB971A0
+:1041C0001403B9B1F802B9B1FC02B9B10003066B2E
+:1041D000B9B10803069B3851F0023821F402237B61
+:1041E000265723552F4505000CF08002264F7044BA
+:1041F000C6420A950000133EB9310C0338F10C0396
+:104200003642382114032F35010091F32F3B0B0068
+:10421000263228332200B9511C030624B961180341
+:10422000B9712403B94120032B9A00003831F802F8
+:1042300038F10403384120032632B931F802203F17
+:1042400006242B9A00003831FC0238F10003384173
+:1042500020033871240338511C0338611803C480CB
+:10426000263226F42471B931FC02B9F10003237718
+:10427000824F3821EC02C49036522F45010092182B
+:1042800090449208C4D082081441264126459044A7
+:10429000820306E4F20B38311003C6D3823904419D
+:1042A000264126549055823406E50491F23190441B
+:1042B0008204C64E9A8B0100C4D082091441264163
+:1042C000264590448204C64E9A81010038F11003BD
+:1042D000C6DF820904212621265290458204C64E5B
+:1042E0009A750100B841080304918212C4640491D4
+:1042F000D20FC4E4D20DC6E60C50E0022651C2042F
+:10430000265E9165F20538410C03265691453851D9
+:10431000EC0224D1C6D524B12A5FFFFF1461266ABE
+:10432000C468D23AC490920306EA24A13821F0026C
+:10433000B971240306472621333E0CF02C01F1F01D
+:104340001451265E2F6505002665576126613846A3
+:10435000400238F1F8023821FC023831000338718C
+:104360002403264FB946400238464402575126429C
+:10437000B9464402384648022643B94648022F65EA
+:1043800001002856B8029986BB022675A976B802A4
+:1043900004719976BA0224D1FAF2FEFF386104035F
+:1043A00024812462B9610403FADAFEFF1491269A8B
+:1043B000C499C20D0870008018BC040018A70CDC5A
+:1043C00028DC1E0006EC0490FAF1000014B226BAB4
+:1043D0002FEB0B0006DA26EB0C60400257D157E1B9
+:1043E000266126D10C70AC02068926E62CD0B002DC
+:1043F0002671C48082450C60E00226612668106642
+:1044000034611356C459D2382F56060026565751D8
+:104410002651303E3845400257612643B945400297
+:10442000383E04003845440226612643B94544021B
+:10443000383E080038454802062E2643B945480252
+:10444000204D2856B802043C2654A956B8023F4EC7
+:104450000700263EB97124030CF0EC00F1F00C408B
+:10446000DC0204342641062D263D364D0CF0EC00CE
+:10447000F1F038712403348134EC34D4F2BB0C7085
+:10448000E0022671267B066AC461821C98570100EF
+:104490008216905782140656C659D20E0C40E0027E
+:1044A00026412645182701001034C62392031037F1
+:1044B00091342451F2F2105799570100346134714C
+:1044C000F2E40676C67A8A77FFFF0C50E0022651A6
+:1044D000265790459203916524612471F2F4183EA9
+:1044E0003101062A2B9A0000187E30010CF0E00200
+:1044F000262723722671107726F1267F1057147114
+:104500002675B37722510667576126612846B8029F
+:10451000995E6E012F3505002F65030026662FF684
+:104520000C00A94E6C0104612F260F00E8229601B1
+:10453000324026532655265C2665999696011865C5
+:1045400096012461996596011364C6D6A96E360159
+:10455000065DB202065623D52F5707002F670500C8
+:1045600057612661B8864802920204812675577108
+:10457000267138274002B98748020638B9712403EA
+:104580008B9D0000043A8B9D0000A92E68013871B4
+:1045900024030638382744028B9D0000043A8B9D83
+:1045A0000000A92E6A01249124E8C69B2299F205F5
+:1045B0002461C46692BAF2C9A9DC1E0058C138034E
+:1045C000588128032C104803E1F006640441B941E6
+:1045D0000803FA8DFEFF0000E1F0000034140C2007
+:1045E000301104300C402800B1F10CF02C01F1F036
+:1045F00030F1990004102414E1F000003C10240074
+:1046000008700080D9C1140018E70CDCD9810400BF
+:1046100006672C600CDC06B30692063E062506C42F
+:1046200006D5188601002B9A0000262C262234D1AC
+:104630002F4E0E002FA20B00063E062DB1412B9AE5
+:104640000000262C26223041342226B2043034C108
+:10465000067C065B0460C4D0220BC6D83209C47045
+:104660002207C67E320570F5702AC6F21211246147
+:104670004366C4632452247192EF24314333C4331C
+:1046800024D126B492E6707A0421B179F202042092
+:1046900058C11400588104002C102400E1F00000DF
+:1046A0003C108C0108700080D9C17C01044106E7F0
+:1046B0002CE00CDC264E1044107ED9816C010C20BD
+:1046C0009E00B941D800262104300444B971AC00E1
+:1046D0000CF02C01F1F0062104300C4049000CF0E4
+:1046E0002C01F1F00C7000100C60FF0FA96708009E
+:1046F000046E26672066A9070A00A9070C00B961A5
+:10470000FC0098604315A907940106A7820A08E0F7
+:1047100000802CE00CDC0C709600267E2077F207DF
+:1047200038702C150CD0260026D7207DB971F400E6
+:104730003891F400287A620138E02C152679237725
+:104740000C402C00A97A5801264E2044986052153E
+:10475000B9415001820E286A0600D468820A0850C6
+:1047600000802C500CDC286582002676A97A58013E
+:10477000087000403827E4703831AC005C20FF013D
+:10478000EBA200008622820A086000802C600CDC0C
+:10479000187602003471C6279208286E2E00287AF7
+:1047A00058012676A97A58014BBC000038E02C1538
+:1047B000283EC6002B9A00000C3064008B9D000040
+:1047C000307EB92154010C600040D66782040C6031
+:1047D000800BF2030C608002DC700080B961E8009D
+:1047E00082040C70800BF2030C7080023891AC00D4
+:1047F000B971F80006D92699B99158013891D800B5
+:10480000B9D1D40004D0B991D0000C904C002691BD
+:10481000067DB9D1C400B9D1C000B9D1BC00349271
+:1048200004D2B9D1C8000687B971A800B9914C016A
+:1048300038D1A8003871D800C6D73AE1040006C7BD
+:104840000CC00010067D2C702E0026770490267C6C
+:10485000B991DC00B9715C013871DC003891AC00B1
+:104860004377C679B971B0003ABC04003871DC00F6
+:1048700038D1C40026D723DD439D2F6909000C7071
+:1048800080022676705738702C1528775E00C65740
+:104890000206287A94012471A97A940106E9E7E1D5
+:1048A00026E1107E54D7637DD4719A9404000820C9
+:1048B00000802C200CDC9872340082200473267255
+:1048C000107738F1A800B971D000C6F7320C047225
+:1048D0002672107738F1B000B971D400C6F73203F0
+:1048E0000472F20A3871AC00B971D4003871D80082
+:1048F000B971D0000471B971C80006730C70800BD7
+:10490000266738F154017076436FC6762A63040037
+:104910003821C800C4219208384150014364C6764A
+:104920002A590400F206786A5801C6671A5304002F
+:104930003841B0003851A800B901A4000C20A400EF
+:1049400026210C30800BEB2F0200C4208A43040088
+:104950003871A400286A0C00C6762203A97A0C00DC
+:10496000047106673841AC00105E536D38D1B00059
+:104970003441C6D46665916E820B0657265906658A
+:10498000E7612661545753751056667591763871F4
+:10499000D80038D1A8003471C6D7822C3871AC0049
+:1049A000B8D1B00026790637E731263104570461C3
+:1049B0005657102306F653F5065F66529153820B45
+:1049C000143126370653E7512651543753631035B7
+:1049D0006663916538D1B000C6D4820C2471066735
+:1049E000E761045756572661047153751056667572
+:1049F00091763841A8003861DC00134413660C50EE
+:104A00004C00B941E0000CB0780004D0265134418C
+:104A1000B961E400346126B10CE0FFFFB951CC006C
+:104A2000B9D1B400B941EC00B961F0003871EC00C3
+:104A30003821AC00267E33770637B971B8002B9A3F
+:104A400000003861CC002322065B0C70FFFF38F1B8
+:104A5000F000B841B80026F733FF220B3831D00000
+:104A6000C6433207C4F022053841D400C6F42203FD
+:104A7000A106F22326F23841E80023FF26FF264F45
+:104A800020343841FC0036340643C333320204403C
+:104A9000C4E2A1464334D211C472D20F3841F800A7
+:104AA00026D326F4204F38F1FC00364FA14538417B
+:104AB000B4002441B941B40024712377C474246242
+:104AC000245292C63851CC0024E123EEC4E4245A87
+:104AD000B951CC0024B692AB98704215921D383172
+:104AE000B4003431C430120204313871C800C471CA
+:104AF000921378E1640038B02C15062D8B9D0000D0
+:104B0000287B38003F220E00C627B206287B3A00D9
+:104B1000C6E72A60030038702C15782188002837F2
+:104B200036002B9A00000C306400CBA000003871D6
+:104B3000C80043E2C47192403861580106750C7098
+:104B400030152669049826972827020028F70400C4
+:104B500028D7060020793891AC0028303015B9717B
+:104B6000B4000C404C000475264136792462244878
+:104B70001CB03200B971B80006760450C673820FBB
+:104B8000C672820DC67F820BC67D82093891B40041
+:104B9000C67982052F950400A9092800345AC65BFE
+:104BA000347192ED38714C013851B8003442C64727
+:104BB0003465266592E278D16400287A0800B9D17C
+:104BC000A400C67D0203A9DA0800287A0A00C67D7F
+:104BD0003203A9DA0A00CCD063001AA000003870B2
+:104BE0000415C47FDA9B000038700015C47FDA8D8D
+:104BF0000000187A0500C471DA880000F8714C00D2
+:104C000002073871C00024711377B971C000F871C0
+:104C1000540002073871C00024711377B971C000C5
+:104C2000F871740002073871C00024711377B971EC
+:104C3000C000F8717C0002073871C000247113773E
+:104C4000B971C000F8714E00920404712678138780
+:104C5000F87150009204047126781387F87152009D
+:104C60009204047126781387F87156009204047137
+:104C700026781387F87160009204047126781387F0
+:104C8000F8716A009204047126781387F87176002F
+:104C90009204047126781387F871780092040471E5
+:104CA00026781387F8717A009204047126781387A6
+:104CB000F8715E009204047126781387F871680019
+:104CC0009204047126781387F871720092040471BB
+:104CD000267813873891C000C492C215C486C213C7
+:104CE00018504C1524511355C45599504C15C20DEC
+:104CF0000C40280099404D15285C06006C5000407F
+:104D0000A95C060099004C1538700015C47FD206C6
+:104D1000187C0500C471CADF0500187A04007861A8
+:104D200086003891E40038D1E000D771C66E267A4B
+:104D30009997300199D731010472120A7861800085
+:104D4000C66E120678618C00C66E1202047078611D
+:104D50008A00C66E120978618400C66E12057861F9
+:104D60009000C66E0202647478618200C66E1209F9
+:104D700078618000C66E120578618400C66E0202FA
+:104D8000647878618E00C66E120978618C00C66EF8
+:104D9000120578619000C66E02036C7010000C6002
+:104DA0004C000442043404285647563756272661DF
+:104DB0000C5074005C7010002468265113441333A7
+:104DC00013221377C4409202A105C4309203A905AF
+:104DD0000800C4209202A106C4709203A90628000C
+:104DE00038914C013462C669345A92ED0C704C0013
+:104DF00026717077B971B4000C704E00267170770F
+:104E00003821B400B971B8000C7050002671707769
+:104E10003831B800B971CC000C705200267170772F
+:104E20003841CC00B971E0000C70540026717077E5
+:104E30003851E0000667B971E4000CF0E000F1F0D1
+:104E40000C707400267170770692B971EC000C70CA
+:104E50007600267170773821EC00B971F0000C7083
+:104E60007800267170773831F000B97100010C704C
+:104E70007A002671707738410001B97104010C7015
+:104E80007C0026717077385104010667B9710801FA
+:104E90000CF0E000F1F00C70560026717077B9212B
+:104EA0000C01B97110010C7058002671707738210F
+:104EB0001001B97114010C705A00267170773831E5
+:104EC0001401B97118010C705C00267170773841BB
+:104ED0001801B9711C010C705E0026717077385191
+:104EE0001C010667B97120010CF0E000F1F00C70B4
+:104EF000600026717077B921240178416400B9718E
+:104F000028010C7062002671707738212801B97170
+:104F10002C010C7066002671707738312C01B97144
+:104F200030010C70680026717077385130010667C7
+:104F3000B97134010CF0E000F1F00C706A002671D8
+:104F4000707706E2B97138010C706C0026717077C9
+:104F500038213801B9713C010C706E0026717077F0
+:104F600038313C01B97140010C70700026717077C6
+:104F700038414001B97144010C707200267170779C
+:104F8000385144010667B97148010CF0E000F1F0B6
+:104F90003831240138610C0106B2064E0629065B41
+:104FA0000CF0E000F1F086D29206047A04DAA971DE
+:104FB000640006ED062938915C01283902002B9A1D
+:104FC00000003871A80006922C702F002677267CEE
+:104FD00028370200382124012B9A00003871A800DC
+:104FE00006522C7030002677267C28370200B951F3
+:104FF0006801062E2B9A00003871A80006422C701A
 :1050000031002677267C28370200B9416001062B43
-:105010004B9800003871A80006E22C703200267709
-:10502000267C28370200382108014B9800003841BF
-:1050300060010662063A065E06290CF0E000F1F017
-:10504000063DEB9E0000187C04008622D771267C6A
-:1050500032020420A927340138310C0138412001E3
-:10506000385130013861E8003821B4000CF0E0001C
-:10507000F1F006E238311C0138412C013851400171
-:10508000386104013821E4000CF0E000F1F006D2B0
-:105090003831100138412401385134013861F800A9
-:1050A0003821C0000CF0E000F1F0B921B400383133
-:1050B000140178416400385138013861FC0038210E
-:1050C000D8000CF0E000F1F006B238311801384198
-:1050D000280138513C01386100013821DC000CF016
-:1050E000E000F1F03831B40006A2064B062E065A55
-:1050F000066D0CF0E000F1F086929206047A049AB4
-:10510000A971640006B93871B000062E247E267796
-:10511000267C283702004B9800003871B000064208
-:10512000247F2677267C283702003821B400B94135
-:1051300060014B9800003871B00006522C701000CE
-:105140002677267C28370200B9515801062B4B9848
-:1051500000003871B00006B22C7011002677267C52
-:1051600028370200062A4B9800003871B00006E28A
-:105170002C7012002677267C28370200062D4B98CB
-:105180000000384160013851580106620635062496
-:10519000065E064B0CF0E000F1F00639EB9E0000D5
-:1051A000187C040086220667D761266C3202042030
-:1051B00024711377C474A9263201997C0400C205B6
-:1051C0000475997C0400F21638D1D40024D1B9D1E9
-:1051D000D400FA21FBFF3871A80024714377B9711C
-:1051E000A8003871D00026792377B971D000FAFF72
-:1051F000FAFF38E02C15307EDC70800082689878E9
-:1052000004009217A8786201820B18786001186E6A
-:105210004100C667C205247199786001F258B90847
-:105220005C019908610199086001A9086201F24FC7
-:1052300018D86101187E3E00C6D7B21124D113DD03
-:1052400099D86101187E3F00C67DB23F38785C0175
-:1052500028680C002676B9785C01F237C6D79235FB
-:1052600038785C0128280C002627B9285C01183EF4
-:105270003F003F330D002431AB9B0000A9086201C1
-:10528000287E4200B9285C0106C2C627C2153871C3
-:10529000EC00183E400036274B9800000C306400AC
-:1052A000AB9B00002322A9286201287E4400C62768
-:1052B000C203A9786201183E3F00062C3F330D005F
-:1052C0004B980000B9285C019908600108400080F3
-:1052D0002C400CDC2C40350018D80400104404B0DD
-:1052E00099D82004B941A80014E106CBC6CD3252AA
-:1052F000066CD7612F96080078293201043AEB9E9C
-:105300000000A929320178293401043AEB9E0000FB
-:105310004372A979340104A006693891A800C6A98E
-:105320003236065AD751265804342635784632018B
-:1053300078233C04C624122778333E04C634222343
-:1053400078453C04C647121F78553E04C657221BB9
-:10535000182631013831AC00B9615801B9715C01CE
-:105360004B9800003861580138715C0118563001C3
-:1053700026250C508002262226257052C6B53203FF
-:1053800006B506EC0451265A43A5F2C824C143CC05
-:10539000F2AE28580600B9B1A4000471D67582187F
-:1053A000C4D1C235C4E02233C6ED320E065E24E11C
-:1053B000067ED771267848673001D7512658C965CF
-:1053C000300143EEF2F234D199D80400F220047295
-:1053D000D675821DC4D1C21BC4E02219C6ED320E9F
-:1053E000064E24E1067ED771267848673001D74102
-:1053F0002648C964300143EEF2F206751443567430
-:1054000034D1647199D80400A97806001878040092
-:10541000C471CA5D01009878D201820E08500080E4
-:105420002C500CDC28758C0028E5880028258A0083
-:1054300026E72627F209086000802C600CDC28E6AD
-:10544000880028268A0006324B980000063E069205
-:10545000062E4B98000026920C2094002621043042
-:10546000044A0CF02C01F1F018C8040004B006EB5B
-:10547000C6EC324606AED7A126A82F7E0E002CA081
-:10548000300106DE2671C6DC3238065DD75126585B
-:10549000786A0200784532013664C46032021666CA
-:1054A000782A0400785534013625C42032021622A9
-:1054B0000632B9715C01B96158014B98000038613E
-:1054C0005801065206360626B95158014B9800007D
-:1054D0003851580138715C012625C692C20B284705
-:1054E00094000451535DC6ED6654A957940082029E
-:1054F00004B124D143DDF2C824E143EEF2BAC4B1D1
-:10550000920499B8D201F2039908D2011471267C51
-:1055100043771421C67282232F5707002651A865AE
-:105520009400821A0461266743660645C66C3214ED
-:105530002834940006536356D451820B2F5606002C
-:10554000265128F59400663FA9349400A9059400DB
-:1055500024614366F2EC34714377F2DD04C006DC6B
-:1055600018E80400C6DE3A8B00002F6D0D002F9660
-:105570000100A87994000451265DB951A800827AEF
-:105580000C600010D7D126D6183D31013821AC006F
-:105590004B980000187D3001783D32012627387184
-:1055A000E00023222622262770E2062E4B980000D8
-:1055B000783D340106A2062E4B9800003851A80011
-:1055C000B991B00006B2437518680400C67632413E
-:1055D0003891B000286994006367D4618237066708
-:1055E000D7610C9000102696183931013821AC0093
-:1055F000B9715C010C4030012649B94160014B98FA
-:1056000000001859300138F1E000783932012625C0
-:1056100023222622262F705226E50625B95158014D
-:105620004B980000385158017839340126A20625DC
-:105630004B9800003841600126B20430062404482B
-:105640000CF02C01F1F038715C0124714377F2BD4C
-:10565000C4E0920204E1063E062AAB9B0000A92D9D
-:105660003201063E062B24C1AB9B000023CCA92DA2
-:1056700034013851A80043D5FA74FFFF34E143EEFA
-:1056800014D106B8C6ED821C067ED7712678F8675D
-:1056900032010C20300126279210F8773401920D48
-:1056A000C4E3120B0431263ED731263B2C303001A7
-:1056B00004480CF0EC00F1F034E143EEF2E4187829
-:1056C0000400C67CA20699C80400F2039908D2011E
-:1056D00018680400C46199686501996805009968B3
-:1056E0001A00D208C4608AE40000987809048AE0AD
-:1056F0000000B8F818049205B87810048AD90000A0
-:1057000038E81004047006570647C646321B0624C4
-:10571000D7212F32080018333101069F73930639C1
-:10572000D43182032451135526281832300106DE65
-:1057300073D3063DD431820324711377244143444B
-:10574000F2E598680904820EC4509203B90818045F
-:10575000C4708205C4609211FA9A0000B90810045E
-:10576000F20CC451D203B9081804C472DA900000D4
-:10577000B9081004FA8C0000C461923FE8680A047A
-:1057800018781604320618581704C657C208F24093
-:10579000C460821418581704C657A24618781C040F
-:1057A000CC701000C207186808046C60400099684B
-:1057B0000804247199781C04F27B18581D043F6773
-:1057C0000500C460064632021646C44102712463D5
-:1057D000C466D26EC657C208147199780A04187844
-:1057E00008046473F251C657B263047199780A04CD
-:1057F000187808046474F248C462925AE8680A048B
-:1058000018780B04320B18580C04C657C2141C70BD
-:105810007700C667224D3461F20BC460821B1858B2
-:105820000C04C657B208CC60770012422461996814
-:105830000A04F23E18781404CC701000C2071868ED
-:1058400008046C6040009968080424719978140475
-:10585000F22F185815043F670500C460320216661F
-:10586000C4610226C657C208147199780A041878D0
-:1058700008046471F209C657B21B047199780A04CE
-:1058800018780804647299780804F21218780804E9
-:10589000DC704000920DB878180482040471997885
-:1058A0000904B8781004820404729978090498787D
-:1058B000A2008206CC70F900D2092471F205987812
-:1058C0000400820404719978A20058C174015881BF
-:1058D00064012C108401E1F0286062119870431576
-:1058E0003C101000D1C108700080820706572C5070
-:1058F0000CDC28E59400F20538502C1528E5220030
-:1059000026E6086000403826E47018D70CDC5C20DE
-:10591000FF01063D0BA1000086228205063D3431C1
-:10592000C62392033CE032006BBA0000C62E04711D
-:10593000B202047050C106272C101000E1F00000E4
-:105940003C102C00D9C11C0038E02C15B121D981A4
-:105950000C000C20B01004300C407A00088000804D
-:105960000CF02C01F1F02C800CDC30C118B80200D6
-:1059700006DC0490C69B24D63258284DDE01283D13
-:10598000DC01282DDA010CF0D800F1F0306C3F2258
-:105990000600B12C183E0B004B9800000C30640040
-:1059A000AB9B0000383CF00006A2182E0C004B9870
-:1059B00000000C306400AB9B000018580300143347
-:1059C00006422635062AB9410800B9510400EB9E6B
-:1059D0000000283E14003841080038510400C62356
-:1059E0000662020206632F3909000CA0001026A3EC
-:1059F00006240635B9610400EB9E0000285E1600FF
-:105A000038610400C62502020625183E0E003F221A
-:105A100006004B9800000C306400EB9E0000A92AA1
-:105A2000B000249124C4F2A730D106AD04C00C907C
-:105A30000010087000802C700CDC1867030024A68E
-:105A4000C6C624D43251284A9202283A9002282A03
-:105A50008E020CF0D800F1F0386D74003F22060081
-:105A6000B92D7400183E09004B9800000C306400FA
-:105A7000AB9B0000383D64010682182E0A004B984B
-:105A800000000C306400AB9B000014330642263B40
-:105A90000628B9410800EB9E0000285E100038413E
-:105AA0000800C6250662020206650624063BB961A7
-:105AB0000400EB9E0000285E120038610400C62539
-:105AC0002F8C0C00268902020625183E0D003F226D
-:105AD00006004B9800000C306400EB9E0000A928E3
-:105AE000EC0024C1F2A758C11C0058810C002C10F6
-:105AF0002C00E1F038302C153C1060050C205003D0
-:105B0000B9319004262104300C402C01D9C1500534
-:105B1000D9814005B9018804B9018404B901800420
-:105B2000B9017C040CF02C01F1F0987043150CE0E5
-:105B30000010B90E1804B90E1004A90E2204A90E03
-:105B40002404A90E2C04A90E2E04A90E3004A90EBB
-:105B50003204A90E3404A90E3604A90E3804A90E85
-:105B60003A04820E084000802C400CDC0C6090004F
-:105B70002664206678249200B961C004F20B387163
-:105B800090040C4032002647204478273400B94165
-:105B9000C0043831C0044B9800000C306400EB9E08
-:105BA00000004322B92108050C30500306210CF0F7
-:105BB0005401F1F0087000802C700CDC2472107716
-:105BC00008600080B971FC04287E06002C600CDCA3
-:105BD0002C603500106608400080547823772C40F4
-:105BE0000CDCB971CC042443B9610C051044B861D4
-:105BF000CC04B94100050C701E0082030C703C00FF
-:105C00001377B97110053881FC0438710005B8911B
-:105C1000CC04F770F780B9710405B981AC04047A3B
-:105C200082030C7014000C602C040C402204266EBD
-:105C300020663881800438A18404B961F804264EB6
-:105C4000204438B18804B981E8041377B971140588
-:105C50000C6032040C703004B9419404267E0C4070
-:105C60002E04266E2077206638814C03B971F40427
-:105C7000264E204438717C04B961EC040C60340475
-:105C8000B941F004266E0C4024042066B971B404B6
-:105C9000264E2044B961E4040C703804267E207737
-:105CA000B94198040C603A040C403604266E206614
-:105CB000B971E004264E387148032044B961D80414
-:105CC0000C90780008600080B9A1B004B9B1C80494
-:105CD000B971D404269106762C700CDCB941DC0431
-:105CE000B981D004B9913C0506B62CB00CDC18770C
-:105CF0000100106B577126970676267626760C30B3
-:105D0000E0010CA05E042677263104C00C509402FA
-:105D100026A126370CD0C8032651B9A1A004B991F9
-:105D20002005B961B804B931180526D1B9C1BC0440
-:105D3000B9C1A804B9C1A40438B13C053831200563
-:105D4000C6B38ABF01003871A80406470C60800200
-:105D5000267726670C8040040C900007B9618C04FC
-:105D600026810C60E0010CF0500326972661B98172
-:105D70009C0426F1B9911C050621B941C4040430E4
-:105D800038911805C6698A76010038418C0438813B
-:105D90001C0520A40C70FF0F567AB97138052F73BB
-:105DA000030026782097387138055C90FF0F36790C
-:105DB00004B038410C0513ABC6A4B20D2F4B0B0039
-:105DC0000CA0301526A4204A3881C40424B1C6484A
-:105DD00092F1F21D3881FC04C638220A04B0C67B59
-:105DE000020243B738918C04A1B9FA2F010038A1FF
-:105DF000A40438B10005C6AB220A04B0C67B020277
-:105E000043B738418C04A1B4FA20010006A9B8B107
-:105E1000CC0438918C0438813805A17936A88215D4
-:105E200030BFCC70640026B7B1BF30BD26B7B1BD5E
-:105E3000022D38419C043881A00410B424B191B4DF
-:105E400010B824B191B8F225C470021530BFCC70DF
-:105E50003C0026B7B1BF30BD26B7B1BD02143891A2
-:105E60009C043841A00410B924B191B910B424B1F4
-:105E700091B4F20CC4A0020730BF26BAB1BF30BD46
-:105E800026BAB1BDCCA03C0012EBC4702A89000038
-:105E900030B226B7B1B220B6C6B732092896020092
-:105EA000A176A9B60200A9960400F21028B6020055
-:105EB000C6B73206A9B60400A9760200F20728B6D2
-:105EC0000400C6B73203A976040038813C05389136
-:105ED000BC0430B8269726B7B1B820B5B991BC0438
-:105EE000C6B7320928950200A175A9B50200A99587
-:105EF0000400F21028B50200C6B73206A9B50400A6
-:105F0000A9750200F20728B50400C6B73203A975C7
-:105F100004003881900428B8AE00C67B020E26BB70
-:105F20003891B004C67B2491020638B1C80424B16C
-:105F3000B9B1C804B991B00438411005C674023033
-:105F40003881A4043891040538719404C6892471F9
-:105F50002377321338B1AC04C63B320838B1F804A9
-:105F600024B123BBB9B1F804F21938B1F40424B157
-:105F700023BBB9B1F404F2123841AC04C634320880
-:105F800038B1F00424B123BBB9B1F004F20738B141
-:105F9000EC0424B123BBB9B1EC04B9719404C4A0DE
-:105FA00002543872F00038813C0538919004267A0A
-:105FB000B972F0003878F00026CA267AB978F00075
-:105FC0002879AE00C6A7020E267738B1B404C6A75A
-:105FD00024B102063841E8042441B941E804B9B1CA
-:105FE000B40438711405C6A702303881A40438916E
-:105FF000040538719804C68924712377321338A1B7
-:10600000AC04C63A320838B1E40424B123BBB9B1B8
-:10601000E404F21938B1E00424B123BBB9B1E004BF
-:10602000F21238B1AC04C63B320838B1DC0424B1FA
-:1060300023BBB9B1DC04F20738B1D80424B123BBC7
-:10604000B9B1D804B97198043841C40438718C04CA
-:1060500038819C042441247224812431B941C40430
-:10606000B9718C0424242466B9819C0424F4FA892F
-:10607000FEFF38A1A80438B1B80438313C053841D6
-:10608000A4043881A0043873F00030633891D4043C
-:1060900026ABB9A1A80438A1D0042441243424811A
-:1060A000269626A7B941A404B9313C052456B981E6
-:1060B000A00424D4B991D404B9A1D004FA3EFEFFBF
-:1060C0003831C80438B1B00438A1B404B9318804F7
-:1060D00038319804B9B18404384194043861F80423
-:1060E0003871F4043881F004B9A17C0438B1E804B3
-:1060F00038A1D0043891EC04A93E24040830008073
-:106100002C300CDCA94E2204A96E2C043841E40486
-:106110003861E004A97E3004A98E2E043871DC04B5
-:10612000B9B18004B9A14C0318B303003881D80475
-:1061300018A30200A99E32043891D404A94E340455
-:10614000A96E3804A97E3604063AA98E3A04062BB5
-:10615000B99148034B98000006D23821BC04063D93
-:10616000AB9B0000B9200415063D062CAB9B00003C
-:10617000B9200015987E17048206987E16049205B1
-:106180000471F203187E1604997E1704987E0C049D
-:106190008206987E0B0492050471F203187E0B04AC
-:1061A000289E0600997E0C040C80C8035498A3997D
-:1061B00038CE1804187E160426819207145106D989
-:1061C0000461265BFAA100000490145106D9046111
-:1061D000265BC6DB32363028B9513005063AB96144
-:1061E0002C05B9712805AB9B0000CC209600B12886
-:1061F0000431263D3851300538612C0538712805A9
-:10620000C21D0C4050032641264D18440E01C444C3
-:10621000C215C694B213C4D00626532D137D82072F
-:1062200014F126FD06C653CF66C2F20206C2C6D5D9
-:1062300082040626532366C2069406D32484F2CA37
-:10624000B9CE1804997E16040C90500338CE100471
-:10625000187E0B0426910480144106D80659046167
-:10626000264BC6DA32663029B9412405063BB951BE
-:106270003005B9612C05B9712805AB9B0000CC2015
-:106280009600B1290421262D3841240538513005C6
-:1062900038612C0538712805C21C2F3D05001833C4
-:1062A000F000C434C216C683B214C4D006F653FD3F
-:1062B000137D820814C126CD0686538C06C866CF8E
-:1062C000F20206CFC6D4820406F653F266CF0683E6
-:1062D00006D22494F2C73028B9513005063AB96184
-:1062E0002C05B9712805AB9B0000CC203200B128E9
-:1062F0000431263D3851300538612C0538712805A8
-:10630000D22606D32484C6DB22E7B9CE1804997EB0
-:1063100016040C90500338CE1004187E0B042691FE
-:106320000480144106D806590461264BC6DA222C93
-:10633000997E0B04987E1704B9CE1004925D187EE6
-:106340001604997E1704997E1D04F2560C405003E2
-:106350002641264D18440E01C442C2D4C694B2D27E
-:10636000C4D00626532D137D820714F126FD06C6E0
-:1063700053CF66C2F20206C2C6D582040626532354
-:1063800066C20694F2BF3029B9412405063BB951D3
-:106390003005B9612C05B9712805AB9B0000CC20F4
-:1063A0003200B1290421262D384124053851300509
-:1063B00038612C0538712805C21C2F3D05001833A3
-:1063C000F000C432C216C683B214C4D006F653FD20
-:1063D000137D820814C126CD0686538C06C866CF6D
-:1063E000F20206CFC6D4820406F653F266CF0683C5
-:1063F00006D22494F29C987E0C049207187E0B041B
-:10640000997E0C04997E150438919004307928D92E
-:106410003000D471A9DE0E008226383148033821BD
-:10642000C00408A000804B980000087000802CA0D9
-:106430000CDC18370CDC06C2182A01004B9800004F
-:106440002F62020026620656D75206322665062CB7
-:106450002636AB9B000038B10805262BC62DB203AB
-:10646000A92E0E0006210BCA02000C307C04062166
-:1064700026314B2F030058C15005588140052C1080
-:106480006005E1F03C10280008700080D9C11800B8
-:1064900006C72CC00CDC18E70CDC18DC0100D98125
-:1064A0000800063E062D4B9800000472267C1077EB
-:1064B0001461B1710473267C1077266DB9710400E4
-:1064C0002CD075000CB0570026DD0C70001014F1B4
-:1064D00026BE14512F370D0006DF26BB265226DEBE
-:1064E0000CC0800226B7C66F82242F750500064DAA
-:1064F000267C062BC64F821930A1C64A320C38A121
-:106500000400C66A32087082709370A726983F997B
-:106510000A00F2027097C4901203A107F202A19739
-:10652000344134723422F2E7365E34613432F2DCC4
-:1065300058C11800588108002C102800E1F0000014
-:10654000C4200C7000102837060082156438A93763
-:106550000600087000802C7050DFB9702C15087090
-:1065600000802C70ECDDB9702815087000802C704C
-:1065700054DDF21514295632A93706000870008040
-:106580002C7084DEB9702C15087000802C7038DEF9
-:10659000B9702815087000802C70A0DDB970241522
-:1065A000E1F000000C70001099072D0199072C01F3
-:1065B000E1F0000038602C150C7000101866B00077
-:1065C00018572A01C65628670600A2096C60000108
-:1065D000A9670600046199605315F2061C50010179
-:1065E0005665A9670600E1F03C101000D1C138C023
-:1065F0002C15087000802C700CDC06E306D21837CE
-:106600000200182703004B9800000632382D4C0377
-:10661000AB9B00000C70001028670600B92D4C03DE
-:1066200004585656A3D538FE0800305E383E0400A4
-:10663000384E0C000CE0800056E6821926FFC65F3B
-:1066400004611206CC20C800D20204601366CC306C
-:1066500023000205CC40220012020461C63402026B
-:106660000461C4E08220CC501400F21CCC209600BF
-:106670000461D202066DC65F13660206C4540204AA
-:10668000C4F102020461C43F020714222624CC2074
-:106690001100D2020461C63402020461C4E0820324
-:1066A000C45A1203C460821018672A01CC60FF002C
-:1066B0008204246199672A0198672B01821734614B
-:1066C00099672B01F21318672B01246113669967F0
-:1066D0002B01185CB100C656920998672A019907E8
-:1066E0002B018204346199672A0150C12C101000DB
-:1066F000E1F000000C70001028670600045FD46809
-:1067000082030C50140020420461C645D20204608A
-:10671000284202001366C645C2032461136628425C
-:106720000400C645C2032461136628420600C6451C
-:10673000C2032461136628520800CC501900D210FD
-:1067400028520A00CC501900D20B28520C00CC5011
-:106750001900D20628520E00CC501900C204C4629F
-:10676000C20AF203C464920718672A04C464D209F7
-:106770002461F20598672A048204346199672A0427
-:1067800018272A04E1F000003418C1E10C70001051
-:106790001867260406E7B356222B0C50400004204D
-:1067A0005656C652925018578702CC503C00D2041D
-:1067B0009857200492066C60400099672604F243C3
-:1067C0000C202C14AB370300C424C234186E2604EA
-:1067D0000471997E29041C7080006676997E2604D7
-:1067E000187E08046C704000997E0804F223987E9D
-:1067F000200492066C602000996E2604F20D0C2095
-:106800002C14AB370300C4209207187E26046C704A
-:106810004000997E2604287E0600DC700001820A72
-:10682000187E26046C702000997E26040474997EDC
-:106830002904687E26040421C4702205182E2A0427
-:106840001622F72F40E12418E1F000003414B1F1D2
-:106850000C500010187529046B330400010005006A
-:10686000A400100010002A003C006E00047399750B
-:10687000290404719975DE04087070419905B60405
-:106880002C70A0CFF22018752604DC7060008239CD
-:10689000047499752904F2350475997529040471F5
-:1068A0009975DE040C6020CF087070412667B965C9
-:1068B000C404186526049905B604DC602000822112
-:1068C0002C7021CFB975C404F21C990529040C2041
-:1068D00022140430044A0CF02C01F1F00C202C148A
-:1068E00004300C4010000CF02C01F1F00C200814C6
-:1068F00004300C4018000CF02C01F1F04B87030021
-:1069000030F104202414E1F03414B1F10C700010C3
-:1069100028570600046AD4588202046F28F734040A
-:1069200018421700CCF01E00D21028573604CC5065
-:106930001E00D20B28573804CC501E00D206285710
-:106940003A04CC501E00C23128372C040450C636FD
-:10695000C206C6F60431D2020635135328372E0478
-:10696000C636C20728373604C636C203245113552B
-:1069700028373004C636C20728373804C636C20363
-:106980002451135528373204C636C20728773A04F3
-:10699000C676C20324511355C451C226387004155B
-:1069A000CC704F00D221F21C28372C040451C6367B
-:1069B000D202045028372E041355C636C203245180
-:1069C000135528373004C636C2032451135528778F
-:1069D0003204C676C20324511355C451C205C449BA
-:1069E000D2082441F204C440820434419942170081
-:1069F00030F1182217002414E1F000003418C1E12E
-:106A00000C7000101867080406E7B356223E0C20ED
-:106A100040005626932282030420F255185787021D
-:106A2000CC503C00D20518572904D45382066C6020
-:106A3000400099670804F24728470600DC4000013F
-:106A400082096C60400099670804046499671E0419
-:106A5000F2E40C2008144B480300C429C22B987E92
-:106A6000090482DB987E080482D81C608000667668
-:106A7000997E08040471997E1E04187E26046C70A9
-:106A80004000997E2604F216987E050092056C60FF
-:106A90002000996E0804287E0600DC700001820A3E
-:106AA000187E08046C704000997E08040474997E76
-:106AB0001E04687E08040421C4702205182E1F04D9
-:106AC0001622F72F40E12418E1F000003414B1F150
-:106AD0000C50001018450804B374325A18751E047F
-:106AE0006B33040001000500AA0010001C003600F2
-:106AF00044007400047299751E0499052704F24835
-:106B0000047399751E0404719975DE040870704150
-:106B10009905B6042C7090CFF218DC4060008238E2
-:106B2000047499751E04F234047599751E04047179
-:106B30009975DE040C702000D6749905B6040870AF
-:106B400070412C7010CF9204B975C404F221544FD7
-:106B50006647B945C404F21C99051E040C200814AC
-:106B600004300C4018000CF02C01F1F00C20221421
-:106B70000430044A0CF02C01F1F00C202C140430E9
-:106B80000C4010000CF02C01F1F04B87030030F1A9
-:106B900004202414E1F0000028403C150830008057
-:106BA0002C300CDC3418C1E128E30A0028F30C0077
-:106BB0005C4010000470C64734E134F123EE23FF3B
-:106BC000435E436F920E18404715C441920A184322
-:106BD00011003F540E003F640F0043744355436659
-:106BE0007042C6473203A172F204C6450202A152A6
-:106BF00078520200C6573204A9720200F205C65646
-:106C00000203A962020040E12418E1F00C700010B8
-:106C10001461A9679C03A9679E03E1F028703C15E5
-:106C20003C105000DC701000D9813000D9C1400008
-:106C30000870008006E206A306B72CB00CDC8215B3
-:106C40000C401000264B104404600C806700B941D2
-:106C50000C000656B9611800B9610800B96114004A
-:106C6000B9611000B181F25798604315822B0C6016
-:106C700098000C709A000C40A600266B267B264BD1
-:106C8000206620777044B9610C00B171B9411000E1
-:106C90000C60A8000C70A2000C40A400266B267BA0
-:106CA000264B706670777044B9611400288B9C0085
-:106CB000B9710800B9411800785B9E00786BA0009C
-:106CC000F22A0C601000266B1066288B1400785B8B
-:106CD0001600B9610C000C7012000C401E00267BDF
-:106CE000264B207770440C602000266B7066B171D3
-:106CF000B94110000C701A000C401C00267B264B7A
-:106D000070777044B9611400786B1800B97108008D
-:106D1000B9411800204E062E2654A15E285E0200BE
-:106D20002665A96E0200CB5C0300C4A128DB0A0023
-:106D300028CB0C009A9100000C60001038469C0390
-:106D40001451C64506769A830100709E78AB2200E6
-:106D5000C69A321A183B0200B9612C00062DEB9E30
-:106D600000000652F75F2625E7203F220900069D16
-:106D7000F7903F3A09004B980000063AEB9E00005E
-:106D80003F220900F21D3F5A0D00C695021E183B16
-:106D90000200B9612C00062DEB9E00000652F75F41
-:106DA0002625E7203F220D003629069DF7903F3A21
-:106DB00009004B980000063AEB9E00002629387126
-:106DC0002C00A9279C03F203A9969C03789E02003D
-:106DD00078AB2400C69A321A183B0300B9712C0014
-:106DE000062CEB9E00000652F75F2625E7203F2287
-:106DF0000900069CF7903F3A09004B980000063ABC
-:106E0000EB9E00003F220900F21D3F5A0C00C69580
-:106E1000021F183B0300B9712C00062CEB9E0000EA
-:106E20000652F75F2625E7203F220C003629069CF4
-:106E3000F7903F3A09004B980000063AEB9E00009D
-:106E4000262938712C00A9279E03FA010100A99771
-:106E50009E03FAFD0000069D06ACF790F7A0306196
-:106E6000CC606400020506563C506400F2053071A7
-:106E70000C5064003657CC80640002043C806400EF
-:106E8000F2050C6064003F8806000463266B106600
-:106E9000387108000442264B1044B9611C00866713
-:106EA000B941040002033F660900384118008674A6
-:106EB00002033F770A00704EC649B141364932029B
-:106EC00024418644320216442FB4040026B4063B03
-:106ED000C646D73226B326B4023D364606350624CA
-:106EE000B9712C00B9612800B9512400B9412000C2
-:106EF0004B98000038412000262B0634B9210800A9
-:106F000006244B9800003851240006354B980000A9
-:106F10003831040006521441062D264DF720B941A0
-:106F20002000B9512400EB9E000038412000385168
-:106F30002400386128003F2204003F390200363621
-:106F40000625EB9E0000262B38712C0038B1080076
-:106F5000F202062BB86110008207C461820426BBCE
-:106F600036B2F20206B238610C00D4618214062BEC
-:106F70000C306400B9712C00EB9E00003041387178
-:106F80002C00C64922042692A19EF20534913F228C
-:106F90000900A12E78BE0200C6BA3F9A0B00320249
-:106FA00024918699320216992FD9090026D9066DA7
-:106FB000C697D76226D626D9022B369706380629D9
-:106FC000B9712C004B9800002F620D00063906297C
-:106FD000B96128004B98000006384B980000383102
-:106FE0001C000692062CF720EB9E000014813871DD
-:106FF0002C00268C3F2208003F3A02003637062933
-:10700000EB9E000038612800262D06D6F202062DE0
-:10701000B86114008207C461820426DD36D2F20210
-:1070200006D238710C00D4728218062D0C30640020
-:10703000EB9E0000C6BA220526A2A9AE0200F20D00
-:1070400034A13F220A00A92E0200F20728979C03D0
-:1070500028A79E03FA05FFFF58C140005881300061
-:107060002C105000E1F000003C101400D9C10400C5
-:1070700008C000FF0CE0C81404D02CC0FF0F28701B
-:10708000DC14637DD4718227303E067377765C70A2
-:10709000FF0FA1710C70FF0F5673A97102001870D9
-:1070A0004715C47192050621773EEB600300062167
-:1070B000CB5C03002061307E5C60FF0F5766567C1E
-:1070C0006676286102001C5000105C60FF0F567548
-:1070D0006676B17E24D1C4D524E492D258C104008E
-:1070E0002C101400E1F0000034180C20BD141431F1
-:1070F0000445C1E10CF02C01F1F00C20B81414315E
-:1071000004450CF02C01F1F00CE00010387E9C04DA
-:10711000186E9A047776547FA676820E0471997E53
-:10712000DE04B90EC4040C20C81404300C40140052
-:107130000CF02C01F1F0990E9A04ABC601002BE87B
-:10714000030040E12418E1F03C101400D9C1040010
-:10715000B1B10CE0001098DE83028219062C0C20DD
-:1071600024120C30D4110C4050000CF0EC00F1F063
-:10717000062B0C207E120C30791204450CF0EC002A
-:10718000F1F0187E8302997E8402F224062B0C20F3
-:107190007E12063D04450CF02C01F1F0062C0C206B
-:1071A0002412063D0C4050000CF02C01F1F00C2094
-:1071B0007412063D04450CF02C01F1F0287E060007
-:1071C000990E84021C6014005676A97E0600990E62
-:1071D0009B0458C1040030B12C101400E1F00000F1
-:1071E0003C101000D1C10CE00010187EDE0406D265
-:1071F0002672C4700C209C14820E0C30C4140C40F7
-:107200001C000CF0EC00F1F0187EDE0426D799DEAD
-:10721000B604F214983EB604820C0C30C4140C4030
-:107220001C000CF0EC00F1F00471997EDE04F20613
-:107230000C401C000CF02C01F1F050C12C1010007F
-:10724000E1F000003C101400D9C1040006C206E3BE
-:107250000623063CB1B18B23040086229A8B0000E2
-:1072600008700080187740DCD47192040472997E13
-:107270000D00D4C39205187E0D00C476925B186E83
-:107280000A0014512656047153750C5000102845FD
-:10729000DC0443776647A945DC043845C4041C3048
-:1072A000000466745C70FF03564366470674777685
-:1072B0002471547F1C3001F057765643664757615E
-:1072C000B945C4042665187E0A003856C40408402F
-:1072D000FF0F2C40FFFF577E56546657B956C40423
-:1072E000204E087000FF5C40FF0F2C70FF0F5746C8
-:1072F00056756674B976C404285E02001C400010FE
-:107300005C50FF0F56746675B976C404185E0B00A6
-:107310001375C47FC202045F3876C4040840FFF0CE
-:10732000545F2C40FFFF575C56746675B976C404F1
-:10733000F203C47A82030420F21D0CD02412067BCF
-:107340000C70001018778402C6C732F6186E0A0057
-:10735000187D0A00C667920A062E063D04448B3249
-:107360000400187D0B00997E0B0024C12CD0100066
-:10737000F2E758C1040030B12C101400E1F0000015
-:1073800018720600D47482250C4000103854C404CE
-:1073900008601FFF0675F77A247154772C60FFFF91
-:1073A000D77A56656667B964C4041852050004713B
-:1073B000345153750656775866750850E0FF5C7077
-:1073C0001F002C50FFFF577856566657B954C40417
-:1073D000E1F000003418C1E1087000800C6000107A
-:1073E00018F71ADC3876C4047776547FC67F0226F5
-:1073F0002846DC0404700C30C814065704E1062447
-:107400006325D421820AC67FA207062E53251522A2
-:10741000B1035642F20224712451C455243492F02F
-:10742000045F56573876C404A946DC041C4001F0BA
-:10743000575656746675B976C4043876C4040C5031
-:1074400000F0D65782067776547F24719976DE0451
-:1074500040E12418E1F000003C102000D9C11000E8
-:10746000D1810CE00010E8CEBD049231987E8302F9
-:10747000822E0C9024020CD0D411269E06BC0880CB
-:107480000080042C262D8B3B0100C4208218067836
-:107490002C700CDC18770E00C6C7BAA00000187D4F
-:1074A0000A0004A126AB26BE997BBD040421063D3B
-:1074B0002B920300C420920424C1F20206AB2CD00C
-:1074C0001000C6D98A8B000006BAF2DC987E8402CE
-:1074D0009205987E83028A82000004D006CD06AE13
-:1074E00014912F7C0E006877BD043471C47032068D
-:1074F00004C006BE08A00080F247267A68B7790269
-:1075000034B1C4B0321D68377E02042424345732AB
-:10751000263A2C30D4012B920300C420920224D1AD
-:10752000067CC473120924712F670E001856BD041F
-:107530009956BC04F2F7999EC10434C1F21257B2B5
-:1075400026BA2CB0D401042C262B8B3B0100C4207E
-:1075500082080422063B2B920300C420920224D10D
-:1075600024C1C4C402BFF2C557722F8B07000C9010
-:10757000D4012698042C26298B3B0100C420920CB0
-:1075800024C1C4C5822B2F7C0E0068777902347128
-:10759000C47032EBF2F6067A2C700CDC18770E0011
-:1075A000C6D7B21C04702F670E006856BD04144184
-:1075B0002645C64C82E6C450120D1878DE0104211F
-:1075C0009976BD0406392B920300C42092DA24D1A7
-:1075D000F2D82471C47592E8F2D40470064E247176
-:1075E00006672F3407002F560E00E825BD0402075A
-:1075F00068F3BC04C6F292039905BD042461C46417
-:1076000002F3C47492EDAB9E030058C11000508188
-:107610002C102000E1F0000038702C153C101000F8
-:10762000D1C1307704205C700001C672824098504E
-:107630004615923D0C6000103846C4040C7000F0F2
-:10764000D6740625823438769C047674DC70FFF399
-:10765000922E28D6DC047746544F0657063D6335F4
-:10766000D431821A043126355731263638E3C40422
-:1076700038F39C04062E063F772677365C20FF0FF2
-:107680005C30FF0FC623247192115CE0FF0F5CF0A9
-:10769000FF0FC6EF920BC674B2042451C45592DF9B
-:1076A0001826DE049906DE04F202042050C12C10D4
-:1076B0001000E1F03C102C00062104300C401400B6
-:1076C000D9C11C00C9A114000CF02C01F1F00CE090
-:1076D0000010987EDE04920A983EB60492070C20B1
-:1076E000B81404450CF02C01F1F0987EDE0482669B
-:1076F000987EB604826328DEDC04047108F0FF0F74
-:1077000006320C30C814044006B72CF0FFFF146199
-:107710002667065D63560665D461822613570460AA
-:107720002FC60E0068CCB8042461C6C7820CC4659D
-:1077300092F804602FC60E00E8ACB80424619205EC
-:10774000997CB8041356F203C46592F514C126C59A
-:10775000066B536C66642346306357C1575E566FA1
-:1077600026C16665B16C2471C476243492D104704C
-:10777000066D6367D4612471920D2F560E00683533
-:10778000B804C63792049905B804F2042461C465AC
-:1077900092F5C47592EE387EC4041C6000045C400F
-:1077A000FF0356766674B97EC4040C20C8140631F3
-:1077B0000C4014000CF0EC00F1F058C11C0048A182
-:1077C00014002C102C00E1F008700080187740DCC9
-:1077D0003C101000D471D1C10CE000108224987EBE
-:1077E000990482180CC0701404D0187E9904C6D76E
-:1077F0003207062C0B9C030024D124C8F2F7387EF4
-:10780000C4040860E000D676820E987EDE04920BF7
-:10781000F207987EDE049207987E9A04820404712F
-:10782000997EDE04187E9904997E9A0450C12C102A
-:107830001000E1F0086000802C600CDC98760F00EE
-:1078400082270452D657820728560A002042345114
-:107850003654A1520454D657820928660C00285287
-:10786000020034613665A9620200D4718207707229
-:1078700028620200A9720200A16220725C70FF0FF0
-:10788000A172287202005C70FF0FA9720200E1F081
-:107890000870008098771BDC3C101400D9C10400EC
-:1078A000822E08C000FF0CE0C81404D02CC0FF0FCB
-:1078B0002870DC14637DD471821E306E062106763A
-:1078C00077765C70FF0F5C60FF0FA171A961020009
-:1078D000ABC103002061307E5C60FF0F5766567CB1
-:1078E0006676286102001C5000105C60FF0F567520
-:1078F0006676B17E24D1C4D524E492DB58C104005D
-:107900002C101400E1F0000034140C208A12043012
-:10791000044DB1F10CF02C01F1F030F10C700010BD
-:10792000146199678B0299678A0299678D0299673A
-:107930008C022414E1F00000C4413C102000D181ED
-:10794000D9C1100006B206A304E0020414E226E442
-:1079500013EE0870008006672C600CDC18C603006C
-:107960002442C64C220434C113CCF20213C418972B
-:107970000CDC08D000302CD000A0C6ECD216062EAD
-:1079800006394B980000262A57212F7D02003077B8
-:107990005C70FF7FC6B7B206046199609212042141
-:1079A000F20524E123EEF2EA042058C110005081D0
-:1079B0002C102000E1F00000C4413C101000D1C1A7
-:1079C00006C204E0020414E226E413EE087000800C
-:1079D00018770CDC2442C647220514D126D713DDC4
-:1079E000F20213D4062306374B98000008700030CB
-:1079F0002C7000A0C6EDD2122F6E020057612667D0
-:107A000030665C60FF7FC6C6B20604619960921260
-:107A10000421F20524E123EEF2EE042050C12C10E3
-:107A20001000E1F03C103000D9811000D9C12000D5
-:107A30006BBA00000C70001028671E00B92104000A
-:107A40000697C46AC21298605015820F3867C40442
-:107A50005C6000F0CC6000109208046199679402A9
-:107A6000990791029967920218698F02C462C2084D
-:107A7000046199099102996992029909940298699D
-:107A80009402821298699302820F98699202820C82
-:107A900004619909940299699102990992026B57BC
-:107AA00001004B870300986992029ADA000098E976
-:107AB00091029AD6000018698E02C4619AD1000022
-:107AC00018690500C4619ACC00001829DD0118D995
-:107AD000DC01C420820414E126E213EE0850008089
-:107AE00006652C600CDC047326761077064734415B
-:107AF000C624B9710800920313B2F20404B126B28D
-:107B000013BB0470C6D7B17182051441264D1344CE
-:107B1000B1411886020014612668C6D6920313ADDF
-:107B2000F20404A126AD13AA06752C700CDC1057C4
-:107B300004C00635B9510C004B980000262D086092
-:107B4000003057212C6000A02FD6020030DD5CD021
-:107B5000FF7FC6EBD26B38310C00062E4B9800002D
-:107B60003831040028F9580130612333C66AD25BEA
-:107B70002F4602000870003057412C7000A02647A5
-:107B800030445C40FF7FC64FA24BC6439249184920
-:107B9000DD01C64E92051859DC01C656823C1869B3
-:107BA00090020451D65682131839DC012432133363
-:107BB000C638A207186990020454D6569210F21DD6
-:107BC000062DCBC90300C42082F6F228D46282F3CA
-:107BD0001839DC01062D34321333F2F41839DD0183
-:107BE0003871080024321333C637A205986992020F
-:107BF0008212F214062DF208D46882F91839DD01D8
-:107C0000062D343213331849DC01CBCD0300C420D8
-:107C10009205F2ED04619969910204C1F2042461B4
-:107C20001366F2A524E113EEF29598699102820998
-:107C300018699602C46192056B5701004B870300D7
-:107C400098699102920DC4C0920B387104002869A2
-:107C5000580123C7C66CD20404619969920238594D
-:107C6000C40406655C5000F07766CC500010546F79
-:107C700099699602921118598D022869DC01CC503D
-:107C8000FF00A9698A02920818598C02CC50FF00A3
-:107C90009203A9698C0258C12000588110002C1051
-:107CA0003000E1F03C101000D1C10C6000102C201D
-:107CB0003A00A8D6DC0457222FE602001471A97EF0
-:107CC0000400A97E0600A97E0800A97E0A00A10E74
-:107CD000A90E0200920F0C20F613063D04480CF08A
-:107CE0002C01F1F00C20FE13063D044A0CF02C018F
-:107CF000F1F0A90E0C00A90E0E0050C12C101000BE
-:107D0000E1F000003418C1E104E0062E2BE5030089
-:107D100024E1C4E592FB40E12418E1F03C10180096
-:107D2000B9310400D9C1080018D10400B12123C21F
-:107D3000C64D2831020018E105003203432EF2112E
-:107D4000C64C22034323F20D3F2D0400363E4B98D0
-:107D5000000043223F3D0C00EB9E0000262E4322F4
-:107D600058C108002C101800E1F0000038702C15E4
-:107D70003C107800D9C16800D98158003077DC7098
-:107D800000088A070300C430920CC4209A02030042
-:107D9000A870DC149AFE02002BE80300FAFA020035
-:107DA000987050150CE00010825D287E0600086077
-:107DB0000080D4782C600CDC287E1E0018567F00D2
-:107DC0008227C657D20D0C701400997EF4030C70F4
-:107DD0006400A97EF0030477997EF503F2561866D5
-:107DE0008000C667D20D0C701400997EF403046AFB
-:107DF0000C706400A97EF003996EF503F258047AC2
-:107E00000C606400997EF403A96EF003F24CC6572F
-:107E1000D20F0C701400997EF4030C706400A97EDC
-:107E2000F0030475997EF5030C705A00F240186651
-:107E30008000C667D20D047F0C606400997EF40355
-:107E4000997EF503A96EF0030C70B400F230047A49
-:107E5000997EF4030C706400A97EF0030C7014008A
-:107E6000F267987ED2019207287E06000C6010000F
-:107E7000D667820E0C701E00997EF4030C706400AD
-:107E8000A97EF003990EF5030C705000F210D4781F
-:107E9000823B047A997EF4030C706400A97EF0039F
-:107EA0000C701E00997EF5030C709600A97EF203FB
-:107EB0000C70A413B97120000C70A613B9711C00CA
-:107EC0000C70FE13B97134000C70F013B9710C0012
-:107ED0000C70A813B97130000C70AA13B9712C0082
-:107EE000087000FF04502C70FF0F06DEB951080027
-:107EF000B9511800B9514000B9513C00B9510400C2
-:107F0000B9713800F21A08700080286E1E001877C8
-:107F10008BDCC667A2040C701400F202047A997E0E
-:107F2000F4030C706400A97EF0030C701E00997EAF
-:107F3000F5030C70C800F2BB287EDC043851040045
-:107F40006375D471920606252BE50300FAE401005F
-:107F50003871040024715771267E3867C404067690
-:107F600077765C70FF0F43575C60FF0FB9512400B8
-:107F70004356B9512800F85DA4033220385124003B
-:107F800038412000A1543851280038411C00A15428
-:107F90003851240038413000A1543851280038416C
-:107FA0002C00A15438410C00A90DA003A90DA20377
-:107FB000045199540E0099540F00785DA80336754A
-:107FC000B9711000787DAA03B89110003667B961C5
-:107FD000140032021699B8A11400320216AA4329DD
-:107FE000433A0CF08000F1F0987050150682B97198
-:107FF0004400821B382EF003383EF4030648EBE8B9
-:108000000300287E1E0006C2C477C2430678F77FAD
-:108010002F480700382EF003383EF403E74043446E
-:10802000EBE8030006B2F236987ED2019206287E73
-:108030000600DC701000820C868832022483064819
-:108040006741382EF003383EF4034344F21F287E84
-:108050001E00C477C21604332622EB9E0000434262
-:10806000383EF403382EF003EBE8030006B2383E46
-:10807000F403382EF0030648EBE8030006C2F20AC8
-:10808000382EF003383EF4030648EBE8030006C23E
-:1080900006BC187E8702C472D20F38602C151856A1
-:1080A000AC00A95EF803A95EF6031866AD00A96EE0
-:1080B000FC03A96EFA0338602C15782EF6031856C7
-:1080C000A9001876AB001866AA00B9514C00063515
-:1080D0002F8605002687B9715400B96150004B986E
-:1080E0000000386150000642782EFA03B94148007A
-:1080F00006364B9800003871540038414800063B62
-:1081000026420627B94148004B98000038414800F4
-:10811000432226240638EB9E000038514C0043B21F
-:10812000782EF80306354B9800003861500006524F
-:10813000782EFC03B9514C0006364B98000038717C
-:10814000540038514C00063C26520627B9514C00C9
-:108150004B98000038514C00432226250638EB9EF0
-:1081600000004372063B0629B97154004B98000089
-:108170000C306400EB9E0000387154000662063734
-:108180000682062AB96150004B9800000C3064004A
-:10819000EB9E0000B8514400386150003871540023
-:1081A00006C2920EC4609205C49404811202068530
-:1081B000C4C09206C4A404611202066C06C63851FB
-:1081C0000800066BC6B532020665385118004366D2
-:1081D000C675B96108000667320206654366B96173
-:1081E000180038410C0038611000387114006854D0
-:1081F0000E0015A6F7AF336AC6561597F79F337969
-:1082000092040451B9513C0038410C0068540F00ED
-:10821000C65792040451B9514000385134000CB093
-:10822000A80391653861040026BD2666266E9976FE
-:10823000FF03063B044406218B3204006BBA0000A6
-:10824000187E8802C4712071D219286E5801232229
-:10825000C662C214986E91029211786DA003C6682E
-:108260000205B8513C0082020686786DA203C66CF6
-:108270000205B8514000820206C6C4A092021688C8
-:108280002388C4902687A18128710200920216CC0F
-:1082900023CC26C70621A9C10200CB5C0300787D50
-:1082A000A80370A13F770A00C47032021677A97D37
-:1082B000A00378C10200787DAA033F770C00C47048
-:1082C00032021677A97DA20338612400387120009C
-:1082D00038512800A16738611C000444A156062BC0
-:1082E00006318B3204003871040038513800247193
-:1082F00057712F670E003876C4045CA0FF0F57A695
-:108300005675667A1C4000105CC0FF0F5674667C80
-:10831000B976C404386120003851040038711C005B
-:108320002C6010002451B961200038610C00B95153
-:1083300004003851340024622C7010002452B961BA
-:108340000C0038610400B9711C00B9513400387157
-:10835000300038512C00C4652C7010002C501000D7
-:10836000B9713000B9512C002CD010009AE6FDFFF5
-:108370000C20FA03262E1434044426328B320400D7
-:108380003871080038411800A97EF603A94EF80399
-:1083900058C16800588158002C107800E1F00000A6
-:1083A000087000802C700CDC184735000652042041
-:1083B000C642821E98773400821B0C703C14066201
-:1083C000782704002461C652220E78270600C65280
-:1083D000120A7027C632220778270200C63212031B
-:1083E0001326F2061366C664247892EB0420E1F0AB
-:1083F0003C101400D9C10400B1B10CE00010287E7B
-:10840000060018CE9904D47106D206B3922C1872C5
-:108410000A00D7C12CC0340026CE0C203C04997C25
-:108420004004262C063D04448B32040099BC4104D0
-:10843000187D0D000462997C4204187E9904247111
-:10844000997E9904187D0D00D667820D0464D66765
-:1084500082050471997E9B04F206DC701800820389
-:10846000990E9B0458C1040030B12C101400E1F0A7
-:10847000085000802C500CDC187534003C101000A3
-:10848000D471D1C1066306E29206046199620D00BF
-:10849000FADB00007022783E020018F53500047007
-:1084A0000C503C140647C64F821578D50400C6D23E
-:1084B000120D78D50600C62D120970D5C6D3120646
-:1084C00078D50200C63D1202047124411344245899
-:1084D000F2EBC4700CD000108273C4618209C461D5
-:1084E000A26BC462821EC4648240FAA20000186DAE
-:1084F0009B041471C4609A9D00000B1D040086C289
-:1085000082090476997E0D00062E063C8B1F04001E
-:10851000F2040472997E0D0099CE0E00FA890000D3
-:10852000187E0D000461D6678208D4768203047A2F
-:10853000F2670C701200F2410462D66714718279FE
-:108540000B1D04008632820A987E0E009207047684
-:10855000997E0D00993E0E00F2040472997E0D0082
-:10856000062E8B1F0400F264187E0D000461D6678E
-:1085700092DD0462D6671471825C0B1D04008622B2
-:10858000183E0E008211C4308211C623047A820381
-:108590000C701200997E0D00062E8B1F04000471D2
-:1085A000997E0C00F206C43092F40472997E0D009C
-:1085B000990E0E00F23D0472997E0D00F239C461ED
-:1085C0008234C461A231C4628204C4648214F23170
-:1085D000187E0D00D4728213983E0E0082080C7033
-:1085E0001200997E0D00062E8B1F04000471997EE7
-:1085F0000D00F217187E0D00D47292060471997E58
-:108600000D000470F216983E0E000472997E0D0063
-:108610008207047A997E0D00062E8B1F04000471D8
-:10862000997E0C00F2EF0462996E0D00F202147153
-:10863000285D06000463D6659207186E0D0054632A
-:108640006665A96D060050C106272C101000E1F0E8
-:108650000470C67482092F67030060562F670200FA
-:1086600091562471F2F7E1F07100F2FF706F3676E7
-:10867000786F0200C676B2072677267F78770600E5
-:10868000267FE170787F0400267FE170C6230672A2
-:10869000320206734327E1F0C6232207C62406727E
-:1086A000320206744327F206C63406233202062439
-:1086B0004322E1F03C101000D1C106E506D66B0460
-:1086C0000000063E064D6B04000050C12C10100047
-:1086D000E1F02400C6230672020206734327E1F08C
-:1086E0002623E1F026232624E1F024002632264327
-:1086F00026542F260500E1F00470C67482092F6706
-:10870000030060562F67020091562471F2F7E1F0E2
-:108710003414B1F17741047014613441C6468209C2
-:108720002F57030030F52F570200B1F52474F2F6ED
-:1087300030F12414E1F024000470C67482062F671F
-:10874000020091362471F2FAE1F0240077411471AD
-:108750003441C6478204B1322424F2FBE1F0240004
-:10876000773114713431C6378204B1022424F2FB0C
-:10877000E1F024000870008006672C600CDC1837DC
-:108780000CDC182601003414B1F108F000802CF044
-:108790000813F1F006720C60000726220850003022
-:1087A00026265771046014342C5000493474C67363
-:1087B000346282092F45070030442FF602007748C3
-:1087C000A14FF2F530F12414E1F02400087000808C
-:1087D00006672C600CDC18370CDC182601003C10F6
-:1087E0001000D1C108F000802CF00813F1F00672DF
-:1087F0000C6080022622085000300C30800B0CF0F8
-:1088000000A0263226F526265771046014442C5009
-:1088100000493474C6743462820E2FEF070030DED4
-:108820002FE60300A1DE2FE5070030DE2FE6020071
-:10883000A1DEF2F050C12C101000E1F034140C70E5
-:108840001E00B17130711461C4702667B16192FB72
-:108850002414E1F0E1F024003414B1F10870004078
-:10886000B9079060B9270060B9370460B90708609C
-:1088700038679060D46182FD0C600081B967006048
-:108880000B14000030F12414E1F024003414B1F191
-:1088900008700040B92700600460C6652F230600F9
-:1088A000820DB92704603024B9270860382790600A
-:1088B000D42282FD24612444F2F10C600081B96766
-:1088C00000600B14000030F12414E1F03418C1E111
-:1088D000087000400C6000DEB967106077310C60F2
-:1088E0009001B96700607721343108600013B9271F
-:1088F00004606636B9371460085000103867146099
-:108900000C401460D665264792FA38E71860B10427
-:108910000C600081B9670060B90710600B1400009B
-:10892000062E40E12418E1F00000000000000000E5
-:108930000000000000000000000000000000000037
-:108940000000000000000000000000000000000027
-:108950000000000000000000000000000000000017
-:108960000000000000000000000000000000000007
-:1089700000000000000000000000000000000000F7
-:1089800000000000000000000000000000000000E7
-:1089900000000000000000000000000000000000D7
-:1089A00000000000000000000000000000000000C7
-:1089B00000000000000000000000000000000000B7
-:1089C00000000000000000000000000000000000A7
-:1089D0000000000000000000000000000000000097
-:1089E0000000000000000000000000000000000087
-:1089F0000000000000000000000000000000000077
-:108A00000000000000000000000000000000000066
-:108A10000000000000000000000000000000000056
-:108A20000000000000000000000000000000000046
-:108A30000000000000000000000000000000000036
-:108A40000000000000000000000000000000000026
-:108A50000000000000000000000000000000000016
-:108A60000000000000000000000000000000000006
-:108A700000000000000000000000000000000000F6
-:108A800000000000000000000000000000000000E6
-:108A900000000000000000000000000000000000D6
-:108AA00000000000000000000000000000000000C6
-:108AB00000000000000000000000000000000000B6
-:108AC00000000000000000000000000000000000A6
-:108AD0000000000000000000000000000000000096
-:108AE0000000000000000000000000000000000086
+:105010002B9A00003871A80006E22C703200267727
+:10502000267C2837020038210C012B9A00003851C9
+:10503000680138416001066206350629065E0CF0FB
+:10504000E000F1F0063DCBA00000187C04008622B1
+:10505000D771267C32020420A9273401383110018F
+:1050600038412801385138013861EC003821B4004A
+:105070000CF0E000F1F006E2383120013841340153
+:1050800038514801386108013821E4000CF0E00093
+:10509000F1F006D23831140138412C0138513C016D
+:1050A0003861F0003821B8000CF0E000F1F0B921CF
+:1050B000B40038311801784164003851400138613A
+:1050C00000013821CC000CF0E000F1F006B23831DC
+:1050D0001C01384130013851440138610401382144
+:1050E000E0000CF0E000F1F0B921B8003831B40074
+:1050F0003851B800062E064B066D0CF0E000F1F0BA
+:1051000086929206047A049AA971640006B93871ED
+:10511000B000062E247E2677267C283702002B9AA4
+:1051200000003871B0000642247F2677267C28379D
+:1051300002003821B400B94160012B9A0000387197
+:10514000B00006522C7010002677267C283702000B
+:10515000B9516801062B2B9A00003871B00006B2D5
+:105160002C7011002677267C283702003821B800E1
+:105170002B9A00003871B00006E22C7012002677DE
+:10518000267C28370200062D2B9A0000384160014A
+:1051900038516801066206350624065E064B0CF09F
+:1051A000E000F1F00639CBA00000187C0400862254
+:1051B0000667D761266C3202042024711377C47409
+:1051C000A9263201997C0400C2050475997C04006B
+:1051D000F21638D1DC0024D1B9D1DC00FA3EFBFF55
+:1051E0003871A80024714377B971A8003871C400E0
+:1051F00026792377B971C400FA1CFBFF38E02C151F
+:10520000307EDC7080008268987A04009217A87A59
+:105210006201820B187A6001186E4100C667C205F0
+:105220002471997A6001F258B90A5C01990A610106
+:10523000990A6001A90A6201F24F18DA6101187E29
+:105240003E00C6D7B21124D113DD99DA6101187E70
+:105250003F00C67DB23F387A5C01286A0C00267692
+:10526000B97A5C01F237C6D79235387A5C01282AC0
+:105270000C002627B92A5C01183E3F003F330D0081
+:1052800024318B9D0000A90A6201287E4200B92AC0
+:105290005C0106C2C627C2153871F400183E4000F2
+:1052A00036272B9A00000C3064008B9D00002322CF
+:1052B000A92A6201287E4400C627C203A97A620196
+:1052C000183E3F00062C3F330D002B9A0000B92AF0
+:1052D0005C01990A6001084000802C400CDC2C40E5
+:1052E000350018DA0400104404B099DA2004B941FA
+:1052F000A80014E106CBC6CD3251066CD7612F96BB
+:105300000A0078293201043ACBA00000A929320111
+:1053100078293401043ACBA000004372A979340102
+:10532000048006693891A800C68932350658D751DD
+:10533000265A043426357846320178233C04C624A4
+:10534000122778333E04C634222378453C04C647EE
+:10535000121F78553E04C657221B182631013831DA
+:10536000AC00B9616001B97164012B9A0000386129
+:105370006001387164011856300126250C508002F6
+:10538000262226257052C6B5320306B506EC2481C6
+:105390004388F2C924C143CCF2AF285A0600B9B100
+:1053A000A4000471D6758218C4D1C235C4E022337A
+:1053B000C6ED320E065E24E1067ED771267A486776
+:1053C0003001D751265AC965300143EEF2F234D18B
+:1053D00099DA0400F2200472D675821DC4D1C21B72
+:1053E000C4E02219C6ED320E064E24E1067ED771C6
+:1053F000267A48673001D741264AC964300143EE16
+:10540000F2F206751433567334D1647199DA0400DC
+:10541000A97A0600187A0400C471CA5E0100987A5D
+:10542000D201820E084000802C400CDC28748C00D5
+:1054300028E4880028248A0026E72627F209085055
+:1054400000802C500CDC28E5880028258A000632D4
+:105450002B9A0000063E0692062E2B9A00002692FA
+:105460000C20940026210430044A0CF02C01F1F0A9
+:1054700018CA040004B006EBC6EC3247067ED771AA
+:105480002F670A002F7E0E002C60300106DE267189
+:10549000C6DC3238065DD751265A78860200784538
+:1054A00032013684C480320216887826040078558A
+:1054B00034013625C420320216220632B961600159
+:1054C000B97164012B9A0000065206380628B951BA
+:1054D00068012B9A00003851680138616001387109
+:1054E00064012625C692C20B284794000451535DDF
+:1054F000C6ED6654A9579400820204B124D143DD5D
+:10550000F2C824E143EEF2B9C4B1920499BAD201CF
+:10551000F203990AD2011471267C43771421C672D2
+:1055200082232F5707002651A8659400821A046130
+:10553000266743660645C66C321428349400065329
+:105540006356D451820B2F560600265128F594003D
+:10555000663FA9349400A905940024614366F2ECE7
+:1055600034714377F2DD04C006DC18EA0400C6DEBD
+:105570003A8B00002F6D0D002F860100A878940053
+:105580000471267DB971A800827A0C900010D7D1E1
+:1055900026D9183D31013821AC002B9A0000187D26
+:1055A0003001783D320126273871E8002322262277
+:1055B000262770E2062E2B9A0000783D34010692D1
+:1055C000062E2B9A00003851A800B981B00006B20F
+:1055D0004375186A0400C67632413851B000286518
+:1055E00094006367D46182370667D7610C8000102E
+:1055F0002686183831013821AC00B97164010C409D
+:1056000030012648B94160012B9A0000185830013A
+:105610003861E80078383201262523222622262602
+:10562000705226E50625B95168012B9A00003851C1
+:10563000680178383401269206252B9A00003841FB
+:10564000600126B20430062404480CF02C01F1F06D
+:105650003871640124714377F2BDC4E0920204E121
+:10566000063E06298B9D0000A92D3201063E062B21
+:1056700024C18B9D000023CCA92D34013871A800D2
+:1056800043D7FA74FFFF34E143EE14D106BAC6EDF6
+:10569000821C067ED771267AF86732010C20300111
+:1056A00026279210F8773401920DC4E3120B0431CF
+:1056B000263ED731263B2C30300104480CF0EC005C
+:1056C000F1F034E143EEF2E4187A0400C67CA2065D
+:1056D00099CA0400F203990AD201186A0400C4614D
+:1056E000996A6501996A0500996A1A00D208C4602E
+:1056F0008AE00000987A09048ADC0000B8FA1804ED
+:105700009205B87A10048AD5000038EA10040470B3
+:1057100006570647C646321B0624D7212F320A00F9
+:1057200018333101069F73930639D4318203245113
+:105730001355262A1832300106DE73D3063DD431C4
+:1057400082032471137724414344F2E5986A0904E3
+:10575000820EC4509203B90A1804C4708205C46052
+:105760009211FA960000B90A1004F20CC451D20347
+:10577000B90A1804C472DA8C0000B90A1004FA8855
+:105780000000C461923BE86A0A04187A16043206E3
+:10579000185A1704C657C208F23CC4608214185A3B
+:1057A0001704C657A242187A1C04CC701000C20716
+:1057B000186A08046C604000996A08042471997A98
+:1057C0001C04F277185A1D043F670500C4603202BA
+:1057D0001666C461026EC657C2081471997A0A042B
+:1057E000187A08046473F251C657B2630471997A47
+:1057F0000A04187A08046474F248C462925AE86A87
+:105800000A04187A0B04320B185A0C04C657C21437
+:105810001C707700C667224D3461F20BC460821B96
+:10582000185A0C04C657B208CC60770012422461A3
+:10583000996A0A04F23E187A1404CC701000C20768
+:10584000186A08046C604000996A08042471997A07
+:105850001404F22F185A15043F670500C460320281
+:105860001666C4610226C657C2081471997A0A04E2
+:10587000187A08046471F209C657B21B0471997A48
+:105880000A04187A08046472997A0804F212187AE1
+:105890000804DC704000920DB87A18048204047188
+:1058A000997A0904B87A100482040472997A090476
+:1058B000987AA2008207CC70F900DACC000024713B
+:1058C000F206987A04008AC600000471997AA20050
+:1058D000FAC1000078215A00063D2F6202002662BC
+:1058E0000656D75226652626CBA00000CC203200D3
+:1058F00002073871BC0024712377B971BC0078218C
+:105900006E00063D2F62020026620656D7522665BB
+:105910002626CBA00000CC20320002073871BC0044
+:1059200024712377B971BC0078216200063D2F6293
+:10593000020026620656D75226652626CBA0000016
+:10594000CC20320002073871BC0024712377B97172
+:10595000BC0078216600063D2F62020026620656D2
+:10596000D75226652626CBA00000CC2032000207A5
+:105970003871BC0024712377B971BC003871BC0048
+:10598000C472CACCF9FF78214C00063D2F62020098
+:1059900026620656D75226652626CBA00000CC20CC
+:1059A00019000208F8714E009AB9F9FFF871560013
+:1059B000F24378215400063D2F620200266206560B
+:1059C000D75226652626CBA00000CC20190002085D
+:1059D000F87152009AA3F9FFF8715E00F22D782158
+:1059E0007400063D2F62020026620656D7522665D5
+:1059F0002626CBA00000CC2019000208F871760002
+:105A00009A8DF9FFF8716A00F21778217C00063D43
+:105A10002F62020026620656D75226652626CBA0A4
+:105A20000000CC2019000A7AF9FFF8717A009A7602
+:105A3000F9FFF87172009A72F9FF0C602800996002
+:105A40004E15287C06006C700020A97C0600FA66C2
+:105A5000F9FF58C17C0158816C012C108C01E1F0D8
+:105A600028606211987043153C101000D1C1087075
+:105A70000080820706572C500CDC28E59400F205C4
+:105A800038502C1528E5220026E60860004038260C
+:105A9000E47018D70CDC5C20FF01063DEBA200008F
+:105AA00086228205063D3431C62392033CE0320053
+:105AB0004BBC0000C62E0471B202047050C1062710
+:105AC0002C101000E1F000003C102C00D9C11C008B
+:105AD00038E02C15B121D9810C000C20B010043015
+:105AE0000C407A00088000800CF02C01F1F02C8032
+:105AF0000CDC30C118B8020006DC0490C69B24D62A
+:105B00003258284DDE01283DDC01282DDA010CF049
+:105B1000D800F1F0306C3F220600B12C183E0B008B
+:105B20002B9A00000C3064008B9D0000383CF00084
+:105B300006A2182E0C002B9A00000C3064008B9DDE
+:105B4000000018580300143306422635062AB941CE
+:105B50000800B9510400CBA00000283E14003841D1
+:105B6000080038510400C6230662020206632F397A
+:105B700009000CA0001026A306240635B961040014
+:105B8000CBA00000285E160038610400C625020282
+:105B90000625183E0E003F2206002B9A00000C300E
+:105BA0006400CBA00000A92AB000249124C4F2A76D
+:105BB00030D106AD04C00C900010087000802C702D
+:105BC0000CDC1867030024A6C6C624D43251284A28
+:105BD0009202283A9002282A8E020CF0D800F1F0A6
+:105BE000386D74003F220600B92D7400183E09007C
+:105BF0002B9A00000C3064008B9D0000383D64013E
+:105C00000682182E0A002B9A00000C3064008B9D2F
+:105C1000000014330642263B0628B9410800CBA0F9
+:105C20000000285E100038410800C6250662020206
+:105C300006650624063BB9610400CBA00000285E7F
+:105C4000120038610400C6252F8C0C002689020240
+:105C50000625183E0D003F2206002B9A00000C304E
+:105C60006400CBA00000A928EC0024C1F2A758C111
+:105C70001C0058810C002C102C00E1F038302C1541
+:105C80003C1060050C205003B931900426210430EB
+:105C90000C402C01D9C15005D9814005B9018804B7
+:105CA000B9018404B9018004B9017C040CF02C0111
+:105CB000F1F0987043150CE00010B90E1804B90EFD
+:105CC0001004A90E2204A90E2404A90E2C04A90E66
+:105CD0002E04A90E3004A90E3204A90E3404A90E14
+:105CE0003604A90E3804A90E3A04820E084000803A
+:105CF0002C400CDC0C609000266420667824920016
+:105D0000B961C004F20B387190040C403200264790
+:105D1000204478273400B941C0043831C0042B9A9C
+:105D200000000C306400CBA000004322B92108051C
+:105D30000C30500306210CF05401F1F00870008083
+:105D40002C700CDC2472107708600080B971FC04A0
+:105D5000287E06002C600CDC2C60350010660840A4
+:105D60000080547823772C400CDCB971CC04244398
+:105D7000B9610C051044B861CC04B94100050C7040
+:105D80001E0082030C703C001377B9711005388136
+:105D9000FC0438710005B891CC04F770F780B97134
+:105DA0000405B981AC04047A82030C7014000C6001
+:105DB0002C040C402204266E20663881800438A111
+:105DC0008404B961F804264E204438B18804B981AE
+:105DD000E8041377B97114050C6032040C703004B8
+:105DE000B9419404267E0C402E04266E207720664E
+:105DF00038814C03B971F404264E204438717C0478
+:105E0000B961EC040C603404B941F004266E0C4016
+:105E100024042066B971B404264E2044B961E40418
+:105E20000C703804267E2077B94198040C603A043F
+:105E30000C403604266E2066B971E004264E387197
+:105E400048032044B961D8040C90780008600080B1
+:105E5000B9A1B004B9B1C804B971D40426910676C9
+:105E60002C700CDCB941DC04B981D004B9913C053B
+:105E700006B62CB00CDC18770100106B5771269712
+:105E80000676267626760C30E0010CA05E04267796
+:105E9000263104C00C50940226A126370CD0C8032A
+:105EA0002651B9A1A004B9912005B961B804B9314E
+:105EB000180526D1B9C1BC04B9C1A804B9C1A4044C
+:105EC00038B13C0538312005C6B38ABF01003871AE
+:105ED000A80406470C608002267726670C804004E1
+:105EE0000C900007B9618C0426810C60E0010CF075
+:105EF000500326972661B9819C0426F1B9911C05AF
+:105F00000621B941C404043038911805C6698A765F
+:105F1000010038418C0438811C0520A40C70FF0F4F
+:105F2000567AB97138052F73030026782097387197
+:105F300038055C90FF0F367904B038410C0513AB7F
+:105F4000C6A4B20D2F4B0B000CA0301526A4204A7E
+:105F50003881C40424B1C64892F1F21D3881FC0492
+:105F6000C638220A04B0C67B020243B738918C04BB
+:105F7000A1B9FA2F010038A1A40438B10005C6ABBD
+:105F8000220A04B0C67B020243B738418C04A1B494
+:105F9000FA20010006A9B8B1CC0438918C043881EC
+:105FA0003805A17936A8821530BFCC70640026B7B9
+:105FB000B1BF30BD26B7B1BD022D38419C04388138
+:105FC000A00410B424B191B410B824B191B8F22552
+:105FD000C470021530BFCC703C0026B7B1BF30BDD5
+:105FE00026B7B1BD021438919C043841A00410B901
+:105FF00024B191B910B424B191B4F20CC4A0020739
+:1060000030BF26BAB1BF30BD26BAB1BDCCA03C006E
+:1060100012EBC4702A89000030B226B7B1B220B6A4
+:10602000C6B7320928960200A176A9B60200A99641
+:106030000400F21028B60200C6B73206A9B6040062
+:10604000A9760200F20728B60400C6B73203A97683
+:10605000040038813C053891BC0430B8269726B737
+:10606000B1B820B5B991BC04C6B732092895020071
+:10607000A175A9B50200A9950400F21028B5020087
+:10608000C6B73206A9B50400A9750200F20728B503
+:106090000400C6B73203A97504003881900428B8FB
+:1060A000AE00C67B020E26BB3891B004C67B24919D
+:1060B000020638B1C80424B1B9B1C804B991B0041A
+:1060C00038411005C67402303881A40438910405A3
+:1060D00038719404C68924712377321338B1AC0423
+:1060E000C63B320838B1F80424B123BBB9B1F80477
+:1060F000F21938B1F40424B123BBB9B1F404F2129B
+:106100003841AC04C634320838B1F00424B123BBA2
+:10611000B9B1F004F20738B1EC0424B123BBB9B132
+:10612000EC04B9719404C4A002543872F0003881B0
+:106130003C0538919004267AB972F0003878F00066
+:1061400026CA267AB978F0002879AE00C6A7020ED2
+:10615000267738B1B404C6A724B102063841E80452
+:106160002441B941E804B9B1B40438711405C6A793
+:1061700002303881A4043891040538719804C68926
+:1061800024712377321338A1AC04C63A320838B1EF
+:10619000E40424B123BBB9B1E404F21938B1E0043A
+:1061A00024B123BBB9B1E004F21238B1AC04C63B50
+:1061B000320838B1DC0424B123BBB9B1DC04F207E6
+:1061C00038B1D80424B123BBB9B1D804B97198044B
+:1061D0003841C40438718C0438819C0424412472F1
+:1061E00024812431B941C404B9718C042424246667
+:1061F000B9819C0424F4FA89FEFF38A1A80438B1BF
+:10620000B80438313C053841A4043881A0043873FF
+:10621000F00030633891D40426ABB9A1A80438A1AA
+:10622000D004244124342481269626A7B941A4040D
+:10623000B9313C052456B981A00424D4B991D404C1
+:10624000B9A1D004FA3EFEFF3831C80438B1B00419
+:1062500038A1B404B931880438319804B9B1840440
+:10626000384194043861F8043871F4043881F0043A
+:10627000B9A17C0438B1E80438A1D0043891EC0409
+:10628000A93E2404083000802C300CDCA94E2204E6
+:10629000A96E2C043841E4043861E004A97E30047E
+:1062A000A98E2E043871DC04B9B18004B9A14C0365
+:1062B00018B303003881D80418A30200A99E320441
+:1062C0003891D404A94E3404A96E3804A97E36044A
+:1062D000063AA98E3A04062BB99148032B9A00007E
+:1062E00006D23821BC04063D8B9D0000B920041560
+:1062F000063D062C8B9D0000B9200015987E1704E2
+:106300008206987E160492050471F203187E160424
+:10631000997E1704987E0C048206987E0B049205E1
+:106320000471F203187E0B04289E0600997E0C046B
+:106330000C80C8035498A39938CE1804187E16040C
+:1063400026819207145106D90461265BFAA1000048
+:106350000490145106D90461265BC6DB323630281E
+:10636000B9513005063AB9612C05B97128058B9DE4
+:106370000000CC209600B1280431263D385130056C
+:1063800038612C0538712805C21D0C405003264188
+:10639000264D18440E01C444C215C694B213C4D08D
+:1063A0000626532D137D820714F126FD06C653CF12
+:1063B00066C2F20206C2C6D582040626532366C20E
+:1063C000069406D32484F2CAB9CE1804997E160422
+:1063D0000C90500338CE1004187E0B0426910480D4
+:1063E000144106D806590461264BC6DA32663029B4
+:1063F000B9412405063BB9513005B9612C05B97185
+:1064000028058B9D0000CC209600B1290421262D63
+:10641000384124053851300538612C05387128057C
+:10642000C21C2F3D05001833F000C434C216C683C9
+:10643000B214C4D006F653FD137D820814C126CDD4
+:106440000686538C06C866CFF20206CFC6D48204F5
+:1064500006F653F266CF068306D22494F2C730289C
+:10646000B9513005063AB9612C05B97128058B9DE3
+:106470000000CC203200B1280431263D38513005CF
+:1064800038612C0538712805D22606D32484C6DB52
+:1064900022E7B9CE1804997E16040C90500338CE2A
+:1064A0001004187E0B0426910480144106D8065966
+:1064B0000461264BC6DA222C997E0B04987E1704C1
+:1064C000B9CE1004925D187E1604997E1704997E49
+:1064D0001D04F2560C4050032641264D18440E016F
+:1064E000C442C2D4C694B2D2C4D00626532D137D62
+:1064F000820714F126FD06C653CF66C2F20206C219
+:10650000C6D582040626532366C20694F2BF3029FC
+:10651000B9412405063BB9513005B9612C05B97163
+:1065200028058B9D0000CC203200B1290421262DA6
+:10653000384124053851300538612C05387128055B
+:10654000C21C2F3D05001833F000C432C216C683AA
+:10655000B214C4D006F653FD137D820814C126CDB3
+:106560000686538C06C866CFF20206CFC6D48204D4
+:1065700006F653F266CF068306D22494F29C987EE8
+:106580000C049207187E0B04997E0C04997E150466
+:1065900038919004307928D93000D471A9DE0E00EA
+:1065A0008226383148033821C00408A000802B9A85
+:1065B0000000087000802CA00CDC18370CDC06C230
+:1065C000182A01002B9A00002F620200266206564C
+:1065D000D75206322665062C26368B9D000038B130
+:1065E0000805262BC62DB203A92E0E0006214BD678
+:1065F00002000C307C04062126318B3B030058C17D
+:106600005005588140052C106005E1F03C10280031
+:1066100008700080D9C1180006C72CC00CDC18E730
+:106620000CDC18DC0100D9810800063E062D2B9AEF
+:1066300000000472267C10771461B1710473267C0B
+:106640001077266DB97104002CD075000CB057007E
+:1066500026DD0C70001014F126BE14512F370D00EA
+:1066600006DF26BB265226DE0CC0800226B7C66F88
+:1066700082242F750500064D267C062BC64F8219F5
+:1066800030A1C64A320C38A10400C66A32087082B2
+:10669000709370A726983F990A00F2027097C490F1
+:1066A0001203A107F202A197344134723422F2E7B7
+:1066B000365E34613432F2DC58C11800588108006B
+:1066C0002C102800E1F00000C4200C7000102837C6
+:1066D000060082156438A9370600087000802C7007
+:1066E00050DFB9702C15087000802C70ECDDB9708B
+:1066F0002815087000802C7054DDF21514295632CC
+:10670000A9370600087000802C7084DEB9702C1543
+:10671000087000802C7038DEB97028150870008071
+:106720002C70A0DDB9702415E1F000000C70001091
+:1067300099072D0199072C01E1F0000038602C1514
+:106740000C7000101866B00018572A01C65628674A
+:106750000600A2096C600001A96706000461996047
+:106760005515F2061C5001015665A9670600E1F0B7
+:106770003C101000D1C138C02C15087000802C705E
+:106780000CDC06E306D218370200182703002B9A08
+:1067900000000632382D4C038B9D00000C70001059
+:1067A00028670600B92D4C0304585656A3D538FE69
+:1067B0000800305E383E0400384E0C000CE08000CB
+:1067C00056E6821926FFC65F04611206CC20C80077
+:1067D000D20204601366CC3023000205CC402200B4
+:1067E00012020461C63402020461C4E08220CC506B
+:1067F0001400F21CCC2096000461D202066DC65F24
+:1068000013660206C4540204C4F102020461C43FC8
+:10681000020714222624CC201100D2020461C634BF
+:1068200002020461C4E08203C45A1203C4608210ED
+:1068300018672A01CC60FF008204246199672A014D
+:1068400098672B018217346199672B01F21318673F
+:106850002B012461136699672B01185CB100C656A1
+:10686000920998672A0199072B018204346199677C
+:106870002A0150C12C101000E1F000000C70001033
+:1068800028670600045FD46882030C50140020427D
+:106890000461C645D2020460284202001366C64560
+:1068A000C2032461136628420400C645C203246162
+:1068B000136628420600C645C203246113662852A7
+:1068C0000800CC501900D21028520A00CC501900F0
+:1068D000D20B28520C00CC501900D20628520E00C0
+:1068E000CC501900C204C462C20AF203C464920705
+:1068F00018672A04C464D2092461F20598672A043F
+:106900008204346199672A0418272A04E1F0000000
+:106910003418C1E10C7000101867260406E7B3565E
+:10692000222B0C50400004205656C6529250185745
+:106930008702CC503C00D2049857200492066C6029
+:10694000400099672604F2430C202C14EB4303000B
+:10695000C424C234186E26040471997E29041C7064
+:1069600080006676997E2604187E08046C704000CC
+:10697000997E0804F223987E200492066C60200021
+:10698000996E2604F20D0C202C14EB430300C42056
+:106990009207187E26046C704000997E2604287E9B
+:1069A0000600DC700001820A187E26046C7020004C
+:1069B000997E26040474997E2904687E26040421A5
+:1069C000C4702205182E2A041622F72F40E124183D
+:1069D000E1F000003414B1F10C50001018752904D6
+:1069E0006B41040001000500A400100010002A0003
+:1069F0003C006E0004739975290404719975DE04D6
+:106A0000087070419905B6042C70A0CFF22018755B
+:106A10002604DC7060008239047499752904F2350B
+:106A200004759975290404719975DE040C6020CFF2
+:106A3000087070412667B965C40418652604990575
+:106A4000B604DC60200082212C7021CFB975C4040B
+:106A5000F21C990529040C2022140430044A0CF07D
+:106A60002C01F1F00C202C1404300C4010000CF020
+:106A70002C01F1F00C20081404300C4018000CF02C
+:106A80002C01F1F04B95030030F104202414E1F0C7
+:106A90003414B1F10C700010285706000C60190076
+:106AA000D458921928573404046ACC501400D213D5
+:106AB00028573604CC501400D20E28573804CC5036
+:106AC0001400D20928573A040C601E00CC50140060
+:106AD000C202046A28F7340418421700CCF01400EC
+:106AE000D21028573604CC501400D20B2857380443
+:106AF000CC501400D20628573A04CC501400C230AF
+:106B000028372C040450C636C206C6F60431D20219
+:106B10000635135328372E04C636C20728373604E5
+:106B2000C636C2032451135528373004C636C2076F
+:106B300028373804C636C203245113552837320487
+:106B4000C636C20728773A04C676C20324511355C5
+:106B5000C451C22A38700415CC704F00F220283777
+:106B60002C040451C636D202045028372E04135583
+:106B7000C636C2032451135528373004C636C20323
+:106B80002451135528773204C676C2032451135575
+:106B9000C451C20A38700415CC707F00D205C449B4
+:106BA000D2082441F204C4408204344199421700BF
+:106BB00030F1182217002414E1F000003418C1E16C
+:106BC0000C7000101867080406E7B356223E0C202C
+:106BD00040005626932282030420F255185787025C
+:106BE000CC503C00D20518572904D45382066C605F
+:106BF000400099670804F24728470600DC4000017E
+:106C000082096C60400099670804046499671E0457
+:106C1000F2E40C2008148B540300C429C22B987E84
+:106C2000090482DB987E080482D81C6080006676A6
+:106C3000997E08040471997E1E04187E26046C70E7
+:106C40004000997E2604F216987E050092056C603D
+:106C50002000996E0804287E0600DC700001820A7C
+:106C6000187E08046C704000997E08040474997EB4
+:106C70001E04687E08040421C4702205182E1F0417
+:106C80001622F72F40E12418E1F000003414B1F18E
+:106C90000C50001018450804B374325A18751E04BD
+:106CA0006B41040001000500AA0010001C00360022
+:106CB00044007400047299751E0499052704F24873
+:106CC000047399751E0404719975DE04087070418F
+:106CD0009905B6042C7090CFF218DC406000823821
+:106CE000047499751E04F234047599751E040471B8
+:106CF0009975DE040C702000D6749905B6040870EE
+:106D000070412C7010CF9204B975C404F221544F15
+:106D10006647B945C404F21C99051E040C200814EA
+:106D200004300C4018000CF02C01F1F00C2022145F
+:106D30000430044A0CF02C01F1F00C202C14043027
+:106D40000C4010000CF02C01F1F04B95030030F1D9
+:106D500004202414E1F0000028403C150830008095
+:106D60002C300CDC3418C1E128E30A0028F30C00B5
+:106D70005C4010000470C64734E134F123EE23FF79
+:106D8000435E436F920E18404715C441920A184360
+:106D900011003F540E003F640F0043744355436697
+:106DA0007042C6473203A172F204C6450202A152E4
+:106DB00078520200C6573204A9720200F205C65684
+:106DC0000203A962020040E12418E1F00C700010F7
+:106DD0001461A9679C03A9679E03E1F028703C1524
+:106DE0003C105000DC701000D9813000D9C1400047
+:106DF0000870008006E206A306B72CB00CDC8215F2
+:106E00000C401000264B104404600C806700B94110
+:106E10000C000656B9611800B9610800B961140088
+:106E2000B9611000B181F25798604315822B0C6054
+:106E300098000C709A000C40A600266B267B264B0F
+:106E4000206620777044B9610C00B171B94110001F
+:106E50000C60A8000C70A2000C40A400266B267BDE
+:106E6000264B706670777044B9611400288B9C00C3
+:106E7000B9710800B9411800785B9E00786BA000DA
+:106E8000F22A0C601000266B1066288B1400785BC9
+:106E90001600B9610C000C7012000C401E00267B1D
+:106EA000264B207770440C602000266B7066B17111
+:106EB000B94110000C701A000C401C00267B264BB8
+:106EC00070777044B9611400786B1800B9710800CC
+:106ED000B9411800204E062E2654A15E285E0200FD
+:106EE0002665A96E0200CB6A0300C4A128DB0A0054
+:106EF00028CB0C009A9100000C60001038469C03CF
+:106F00001451C64506769A830100709E78AB220024
+:106F1000C69A321A183B0200B9612C00062DCBA08C
+:106F200000000652F75F2625E7203F220900069D54
+:106F3000F7903F3A09002B9A0000063ACBA00000D8
+:106F40003F220900F21D3F5A0D00C695021E183B54
+:106F50000200B9612C00062DCBA000000652F75F9D
+:106F60002625E7203F220D003629069DF7903F3A5F
+:106F700009002B9A0000063ACBA0000026293871A0
+:106F80002C00A9279C03F203A9969C03789E02007B
+:106F900078AB2400C69A321A183B0300B9712C0052
+:106FA000062CCBA000000652F75F2625E7203F22E3
+:106FB0000900069CF7903F3A09002B9A0000063A18
+:106FC000CBA000003F220900F21D3F5A0C00C695DD
+:106FD000021F183B0300B9712C00062CCBA0000047
+:106FE0000652F75F2625E7203F220C003629069C33
+:106FF000F7903F3A09002B9A0000063ACBA0000018
+:10700000262938712C00A9279E03FA010100A997AF
+:107010009E03FAFD0000069D06ACF790F7A03061D4
+:10702000CC606400020506563C506400F2053071E5
+:107030000C5064003657CC80640002043C8064002D
+:10704000F2050C6064003F8806000463266B10663E
+:10705000387108000442264B1044B9611C00866751
+:10706000B941040002033F660900384118008674E4
+:1070700002033F770A00704EC649B14136493202D9
+:1070800024418644320216442FB4040026B4063B41
+:10709000C646D73226B326B4023D36460635062408
+:1070A000B9712C00B9612800B9512400B941200000
+:1070B0002B9A000038412000262B0634B921080005
+:1070C00006242B9A00003851240006352B9A000024
+:1070D0003831040006521441062D264DF720B941DF
+:1070E0002000B9512400CBA00000384120003851C5
+:1070F0002400386128003F2204003F390200363660
+:107100000625CBA00000262B38712C0038B10800D2
+:10711000F202062BB86110008207C461820426BB0C
+:1071200036B2F20206B238610C00D4618214062B2A
+:107130000C306400B9712C00CBA0000030413871D4
+:107140002C00C64922042692A19EF20534913F22CA
+:107150000900A12E78BE0200C6BA3F9A0B00320287
+:1071600024918699320216992FD9090026D9066DE5
+:10717000C697D76226D626D9022B36970638062917
+:10718000B9712C002B9A00002F620D0006390629D8
+:10719000B96128002B9A000006382B9A000038317C
+:1071A0001C000692062CF720CBA000001481387139
+:1071B0002C00268C3F2208003F3A02003637062971
+:1071C000CBA0000038612800262D06D6F202062D3D
+:1071D000B86114008207C461820426DD36D2F2024F
+:1071E00006D238710C00D4728218062D0C3064005F
+:1071F000CBA00000C6BA220526A2A9AE0200F20D5D
+:1072000034A13F220A00A92E0200F20728979C030E
+:1072100028A79E03FA05FFFF58C14000588130009F
+:107220002C105000E1F000003C101400D9C1040003
+:1072300008C000FF0CE0C81404D02CC0FF0F287059
+:10724000DC14637DD4718227303E067377765C70E0
+:10725000FF0FA1710C70FF0F5673A9710200187017
+:107260004715C47192050621773EEB6E0300062197
+:10727000CB6A03002061307E5C60FF0F5766567C4E
+:107280006676286102001C5000105C60FF0F567586
+:107290006676B17E24D1C4D524E492D258C10400CC
+:1072A0002C101400E1F0000034180C20BD1414312F
+:1072B0000445C1E10CF02C01F1F00C20B81414319C
+:1072C00004450CF02C01F1F00CE00010387E9C0419
+:1072D000186E9A047776547FA676820E0471997E92
+:1072E000DE04B90EC4040C20C81404300C40140091
+:1072F0000CF02C01F1F0990E9A048BC801002BF6CA
+:10730000030040E12418E1F03C101400D9C104004E
+:10731000B1B10CE0001098DE83028219062C0C201B
+:1073200024120C30D4110C4050000CF0EC00F1F0A1
+:10733000062B0C207E120C30791204450CF0EC0068
+:10734000F1F0187E8302997E8402F224062B0C2031
+:107350007E12063D04450CF02C01F1F0062C0C20A9
+:107360002412063D0C4050000CF02C01F1F00C20D2
+:107370007412063D04450CF02C01F1F0287E060045
+:10738000990E84021C6014005676A97E0600990EA0
+:107390009B0458C1040030B12C101400E1F000002F
+:1073A0003C101000D1C10CE00010187EDE0406D2A3
+:1073B0002672C4700C209C14820E0C30C4140C4035
+:1073C0001C000CF0EC00F1F0187EDE0426D799DEEC
+:1073D000B604F214983EB604820C0C30C4140C406F
+:1073E0001C000CF0EC00F1F00471997EDE04F20652
+:1073F0000C401C000CF02C01F1F050C12C101000BE
+:10740000E1F000003C101400D9C1040006C206E3FC
+:107410000623063CB1B18B31040086229A8B000012
+:1074200008700080187740DCD47192040472997E51
+:107430000D00D4C39205187E0D00C476925B186EC1
+:107440000A0014512656047153750C50001028453B
+:10745000DC0443776647A945DC043845C4041C3086
+:10746000000466745C70FF035643664706747776C3
+:107470002471547F1C3001F057765643664757619C
+:10748000B945C4042665187E0A003856C40408406D
+:10749000FF0F2C40FFFF577E56546657B956C40461
+:1074A000204E087000FF5C40FF0F2C70FF0F574606
+:1074B00056756674B976C404285E02001C4000103C
+:1074C0005C50FF0F56746675B976C404185E0B00E5
+:1074D0001375C47FC202045F3876C4040840FFF00D
+:1074E000545F2C40FFFF575C56746675B976C40430
+:1074F000F203C47A82030420F21D0CD02412067B0E
+:107500000C70001018778402C6C732F6186E0A0095
+:10751000187D0A00C667920A062E063D04448B4079
+:107520000400187D0B00997E0B0024C12CD01000A4
+:10753000F2E758C1040030B12C101400E1F0000053
+:1075400018720600D47482250C4000103854C4040C
+:1075500008601FFF0675F77A247154772C60FFFFCF
+:10756000D77A56656667B964C40418520500047179
+:10757000345153750656775866750850E0FF5C70B5
+:107580001F002C50FFFF577856566657B954C40455
+:10759000E1F000003418C1E1087000800C600010B8
+:1075A00018F71ADC3876C4047776547FC67F022633
+:1075B0002846DC0404700C30C814065704E1062485
+:1075C0006325D421820AC67FA207062E53251522E1
+:1075D000B1035642F20224712451C455243492F06E
+:1075E000045F56573876C404A946DC041C4001F0F9
+:1075F000575656746675B976C4043876C4040C5070
+:1076000000F0D65782067776547F24719976DE048F
+:1076100040E12418E1F000003C102000D9C1100026
+:10762000D1810CE00010E8CEBD049231987E830237
+:10763000822E0C9024020CD0D411269E06BC088009
+:107640000080042C262D6B3D0100C4208218067892
+:107650002C700CDC18770E00C6C7BAA00000187D8D
+:107660000A0004A126AB26BE997BBD040421063D79
+:107670002BA00300C420920424C1F20206AB2CD03C
+:107680001000C6D98A8B000006BAF2DC987E84020C
+:107690009205987E83028A82000004D006CD06AE51
+:1076A00014912F7C0E006877BD043471C4703206CB
+:1076B00004C006BE08A00080F247267A68B77902A7
+:1076C00034B1C4B0321D68377E02042424345732EA
+:1076D000263A2C30D4012BA00300C420920224D1DE
+:1076E000067CC473120924712F670E001856BD045E
+:1076F0009956BC04F2F7999EC10434C1F21257B2F4
+:1077000026BA2CB0D401042C262B6B3D0100C420DA
+:1077100082080422063B2BA00300C420920224D13D
+:1077200024C1C4C402BFF2C557722F8B07000C904E
+:10773000D4012698042C26296B3D0100C420920C0C
+:1077400024C1C4C5822B2F7C0E0068777902347166
+:10775000C47032EBF2F6067A2C700CDC18770E004F
+:10776000C6D7B21C04702F670E006856BD041441C2
+:107770002645C64C82E6C450120D1878DE0104215D
+:107780009976BD0406392BA00300C42092DA24D1D7
+:10779000F2D82471C47592E8F2D40470064E2471B4
+:1077A00006672F3407002F560E00E825BD04020798
+:1077B00068F3BC04C6F292039905BD042461C46455
+:1077C00002F3C47492EDABAC030058C110005081B9
+:1077D0002C102000E1F0000038702C153C10100037
+:1077E000D1C1307704205C700001C672824098508D
+:1077F0004615923D0C6000103846C4040C7000F031
+:10780000D6740625823438769C047674DC70FFF3D7
+:10781000922E28D6DC047746544F0657063D633532
+:10782000D431821A043126355731263638E3C40460
+:1078300038F39C04062E063F772677365C20FF0F30
+:107840005C30FF0FC623247192115CE0FF0F5CF0E7
+:10785000FF0FC6EF920BC674B2042451C45592DFD9
+:107860001826DE049906DE04F202042050C12C1012
+:107870001000E1F03C102C00062104300C401400F4
+:10788000D9C11C00C9A114000CF02C01F1F00CE0CE
+:107890000010987EDE04920A983EB60492070C20EF
+:1078A000B81404450CF02C01F1F0987EDE048266D9
+:1078B000987EB604826328DEDC04047108F0FF0FB2
+:1078C00006320C30C814044006B72CF0FFFF1461D8
+:1078D0002667065D63560665D461822613570460E9
+:1078E0002FC60E0068CCB8042461C6C7820CC465DC
+:1078F00092F804602FC60E00E8ACB804246192052B
+:10790000997CB8041356F203C46592F514C126C5D8
+:10791000066B536C66642346306357C1575E566FDF
+:1079200026C16665B16C2471C476243492D104708A
+:10793000066D6367D4612471920D2F560E00683571
+:10794000B804C63792049905B804F2042461C465EA
+:1079500092F5C47592EE387EC4041C6000045C404D
+:10796000FF0356766674B97EC4040C20C814063131
+:107970000C4014000CF0EC00F1F058C11C0048A1C0
+:1079800014002C102C00E1F008700080187740DC07
+:107990003C101000D471D1C10CE000108224987EFC
+:1079A000990482180CC0701404D0187E9904C6D7AC
+:1079B0003207062C0BAA030024D124C8F2F7387E24
+:1079C000C4040860E000D676820E987EDE04920B36
+:1079D000F207987EDE049207987E9A04820404716E
+:1079E000997EDE04187E9904997E9A0450C12C1069
+:1079F0001000E1F0086000802C600CDC98760F002D
+:107A000082270452D657820728560A002042345152
+:107A10003654A1520454D657820928660C002852C5
+:107A2000020034613665A9620200D4718207707267
+:107A300028620200A9720200A16220725C70FF0F2E
+:107A4000A172287202005C70FF0FA9720200E1F0BF
+:107A50000870008098771BDC3C101400D9C104002A
+:107A6000822E08C000FF0CE0C81404D02CC0FF0F09
+:107A70002870DC14637DD471821E306E0621067678
+:107A800077765C70FF0F5C60FF0FA171A961020047
+:107A9000ABCF03002061307E5C60FF0F5766567CE1
+:107AA0006676286102001C5000105C60FF0F56755E
+:107AB0006676B17E24D1C4D524E492DB58C104009B
+:107AC0002C101400E1F0000034140C208A12043051
+:107AD000044DB1F10CF02C01F1F030F10C700010FC
+:107AE000146199678B0299678A0299678D02996779
+:107AF0008C022414E1F00000C4413C102000D1812C
+:107B0000D9C1100006B206A304E0020414E226E480
+:107B100013EE0870008006672C600CDC18C60300AA
+:107B20002442C64C220434C113CCF20213C4189769
+:107B30000CDC08D000302CD000A0C6ECD216062EEB
+:107B400006392B9A0000262A57212F7D0200307714
+:107B50005C70FF7FC6B7B20604619960921204217F
+:107B6000F20524E123EEF2EA042058C1100050810E
+:107B70002C102000E1F00000C4413C101000D1C1E5
+:107B800006C204E0020414E226E413EE087000804A
+:107B900018770CDC2442C647220514D126D713DD02
+:107BA000F20213D4062306372B9A00000870003027
+:107BB0002C7000A0C6EDD2122F6E0200576126670E
+:107BC00030665C60FF7FC6C6B2060461996092129F
+:107BD0000421F20524E123EEF2EE042050C12C1022
+:107BE0001000E1F03C103000D9811000D9C1200014
+:107BF0004BBC00000C70001028671E00B921040067
+:107C00000697C46AC21298605215820F3867C4047E
+:107C10005C6000F0CC6000109208046199679402E7
+:107C2000990791029967920218698F02C462C2088B
+:107C300004619909910299699202990994029869DB
+:107C40009402821298699302820F98699202820CC0
+:107C500004619909940299699102990992024B5918
+:107C600001004B950300986992029ADA000098E9A6
+:107C700091029AD6000018698E02C4619AD1000060
+:107C800018690500C4619ACC00001829DD0118D9D3
+:107C9000DC01C420820414E126E213EE08500080C7
+:107CA00006652C600CDC0473267610770647344199
+:107CB000C624B9710800920313B2F20404B126B2CB
+:107CC00013BB0470C6D7B17182051441264D13440D
+:107CD000B1411886020014612668C6D6920313AD1E
+:107CE000F20404A126AD13AA06752C700CDC105703
+:107CF00004C00635B9510C002B9A0000262D0860EF
+:107D0000003057212C6000A02FD6020030DD5CD05F
+:107D1000FF7FC6EBD26B38310C00062E2B9A000089
+:107D20003831040028F9580130612333C66AD25B28
+:107D30002F4602000870003057412C7000A02647E3
+:107D400030445C40FF7FC64FA24BC643924918495E
+:107D5000DD01C64E92051859DC01C656823C1869F1
+:107D600090020451D65682131839DC0124321333A1
+:107D7000C638A207186990020454D6569210F21D14
+:107D8000062DCBD70300C42082F6F228D46282F3FA
+:107D90001839DC01062D34321333F2F41839DD01C1
+:107DA0003871080024321333C637A205986992024D
+:107DB0008212F214062DF208D46882F91839DD0116
+:107DC000062D343213331849DC01CBDB0300C42009
+:107DD0009205F2ED04619969910204C1F2042461F3
+:107DE0001366F2A524E113EEF295986991028209D7
+:107DF00018699602C46192054B5901004B95030026
+:107E000098699102920DC4C0920B387104002869E0
+:107E1000580123C7C66CD20404619969920238598B
+:107E2000C40406655C5000F07766CC500010546FB7
+:107E300099699602921118598D022869DC01CC507B
+:107E4000FF00A9698A02920818598C02CC50FF00E1
+:107E50009203A9698C0258C12000588110002C108F
+:107E60003000E1F03C101000D1C10C6000102C205B
+:107E70003A00A8D6DC0457222FE602001471A97E2E
+:107E80000400A97E0600A97E0800A97E0A00A10EB2
+:107E9000A90E0200920F0C20F613063D04480CF0C8
+:107EA0002C01F1F00C20FE13063D044A0CF02C01CD
+:107EB000F1F0A90E0C00A90E0E0050C12C101000FC
+:107EC000E1F000003418C1E104E0062E2BF30300BA
+:107ED00024E1C4E592FB40E12418E1F03C101800D5
+:107EE000B9310400D9C1080018D10400B12123C25E
+:107EF000C64D2831020018E105003203432EF2116D
+:107F0000C64C22034323F20D3F2D0400363E2B9A2C
+:107F1000000043223F3D0C00CBA00000262E432250
+:107F200058C108002C101800E1F0000038702C1522
+:107F30003C107800D9C16800D98158003077DC70D6
+:107F400000088A070300C430920CC4209A02030080
+:107F5000A870DC149AFE02002BF60300FAFA020065
+:107F6000987052150CE00010825D287E06000860B3
+:107F70000080D4782C600CDC287E1E0018567F0010
+:107F80008227C657D20D0C701400997EF4030C7032
+:107F90006400A97EF0030477997EF503F256186613
+:107FA0008000C667D20D0C701400997EF403046A39
+:107FB0000C706400A97EF003996EF503F258047A00
+:107FC0000C606400997EF403A96EF003F24CC6576E
+:107FD000D20F0C701400997EF4030C706400A97E1B
+:107FE000F0030475997EF5030C705A00F240186690
+:107FF0008000C667D20D047F0C606400997EF40394
+:10800000997EF503A96EF0030C70B400F230047A87
+:10801000997EF4030C706400A97EF0030C701400C8
+:10802000F267987ED2019207287E06000C6010004D
+:10803000D667820E0C701E00997EF4030C706400EB
+:10804000A97EF003990EF5030C705000F210D4785D
+:10805000823B047A997EF4030C706400A97EF003DD
+:108060000C701E00997EF5030C709600A97EF20339
+:108070000C70A413B97120000C70A613B9711C0008
+:108080000C70FE13B97134000C70F013B9710C0050
+:108090000C70A813B97130000C70AA13B9712C00C0
+:1080A000087000FF04502C70FF0F06DEB951080065
+:1080B000B9511800B9514000B9513C00B951040000
+:1080C000B9713800F21A08700080286E1E00187707
+:1080D0008BDCC667A2040C701400F202047A997E4D
+:1080E000F4030C706400A97EF0030C701E00997EEE
+:1080F000F5030C70C800F2BB287EDC043851040084
+:108100006375D471920606252BF30300FAE401008F
+:108110003871040024715771267E3867C4040676CE
+:1081200077765C70FF0F43575C60FF0FB9512400F6
+:108130004356B9512800F85DA40332203851240079
+:1081400038412000A1543851280038411C00A15466
+:108150003851240038413000A154385128003841AA
+:108160002C00A15438410C00A90DA003A90DA203B5
+:10817000045199540E0099540F00785DA803367588
+:10818000B9711000787DAA03B89110003667B96103
+:10819000140032021699B8A11400320216AA43291B
+:1081A000433A0CF08000F1F0987052150682B971D4
+:1081B0004400821B382EF003383EF4030648EBF6E9
+:1081C0000300287E1E0006C2C477C2430678F77FEC
+:1081D0002F480700382EF003383EF403E7404344AD
+:1081E000EBF6030006B2F236987ED2019206287EA4
+:1081F0000600DC701000820C868832022483064858
+:108200006741382EF003383EF4034344F21F287EC2
+:108210001E00C477C21604332622CBA000004342BE
+:10822000383EF403382EF003EBF6030006B2383E76
+:10823000F403382EF0030648EBF6030006C2F20AF8
+:10824000382EF003383EF4030648EBF6030006C26E
+:1082500006BC187E8702C472D20F38602C151856DF
+:10826000AC00A95EF803A95EF6031866AD00A96E1E
+:10827000FC03A96EFA0338602C15782EF603185605
+:10828000A9001876AB001866AA00B9514C00063553
+:108290002F8605002687B9715400B96150002B9ACA
+:1082A0000000386150000642782EFA03B9414800B8
+:1082B00006362B9A00003871540038414800063BBE
+:1082C00026420627B94148002B9A00003841480051
+:1082D000432226240638CBA0000038514C0043B27C
+:1082E000782EF80306352B9A0000386150000652AC
+:1082F000782EFC03B9514C0006362B9A00003871D9
+:10830000540038514C00063C26520627B9514C0007
+:108310002B9A000038514C00432226250638CBA06A
+:1083200000004372063B0629B97154002B9A0000E5
+:108330000C306400CBA00000387154000662063790
+:108340000682062AB96150002B9A00000C306400A6
+:10835000CBA00000B851440038615000387154007F
+:1083600006C2920EC4609205C4940481120206856E
+:10837000C4C09206C4A404611202066C06C6385139
+:108380000800066BC6B53202066538511800436610
+:10839000C675B96108000667320206654366B961B1
+:1083A000180038410C00386110003871140068540E
+:1083B0000E0015A6F7AF336AC6561597F79F3379A7
+:1083C00092040451B9513C0038410C0068540F002C
+:1083D000C65792040451B9514000385134000CB0D2
+:1083E000A80391653861040026BD2666266E99763D
+:1083F000FF03063B044406218B4004004BBC0000F5
+:10840000187E8802C4712071D219286E5801232267
+:10841000C662C214986E91029211786DA003C6686C
+:108420000205B8513C0082020686786DA203C66C34
+:108430000205B8514000820206C6C4A09202168806
+:108440002388C4902687A18128710200920216CC4D
+:1084500023CC26C70621A9C10200CB6A0300787D80
+:10846000A80370A13F770A00C47032021677A97D75
+:10847000A00378C10200787DAA033F770C00C47086
+:1084800032021677A97DA2033861240038712000DA
+:1084900038512800A16738611C000444A156062BFE
+:1084A00006318B40040038710400385138002471C3
+:1084B00057712F670E003876C4045CA0FF0F57A6D3
+:1084C0005675667A1C4000105CC0FF0F5674667CBF
+:1084D000B976C404386120003851040038711C009A
+:1084E0002C6010002451B961200038610C00B95192
+:1084F00004003851340024622C7010002452B961F9
+:108500000C0038610400B9711C00B9513400387195
+:10851000300038512C00C4652C7010002C50100015
+:10852000B9713000B9512C002CD010009AE6FDFF33
+:108530000C20FA03262E1434044426328B40040007
+:108540003871080038411800A97EF603A94EF803D7
+:1085500058C16800588158002C107800E1F00000E4
+:10856000087000802C700CDC18473500065204207F
+:10857000C642821E98773400821B0C703C1406623F
+:10858000782704002461C652220E78270600C652BE
+:10859000120A7027C632220778270200C632120359
+:1085A0001326F2061366C664247892EB0420E1F0E9
+:1085B0003C101400D9C10400B1B10CE00010287EB9
+:1085C000060018CE9904D47106D206B3922C187204
+:1085D0000A00D7C12CC0340026CE0C203C04997C64
+:1085E0004004262C063D04448B40040099BC410401
+:1085F000187D0D000462997C4204187E9904247150
+:10860000997E9904187D0D00D667820D0464D667A3
+:1086100082050471997E9B04F206DC7018008203C7
+:10862000990E9B0458C1040030B12C101400E1F0E5
+:10863000085000802C500CDC187534003C101000E1
+:10864000D471D1C1066306E29206046199620D00FD
+:10865000FADB00007022783E020018F53500047045
+:108660000C503C140647C64F821578D50400C6D27C
+:10867000120D78D50600C62D120970D5C6D3120684
+:1086800078D50200C63D12020471244113442458D7
+:10869000F2EBC4700CD000108273C4618209C46113
+:1086A000A26BC462821EC4648240FAA20000186DEC
+:1086B0009B041471C4609A9D00000B2B040086C2B9
+:1086C00082090476997E0D00062E063C8B2D04004F
+:1086D000F2040472997E0D0099CE0E00FA89000012
+:1086E000187E0D000461D6678208D4768203047A6E
+:1086F000F2670C701200F2410462D667147182793D
+:108700000B2B04008632820A987E0E0092070476B4
+:10871000997E0D00993E0E00F2040472997E0D00C0
+:10872000062E8B2D0400F264187E0D000461D667BE
+:1087300092DD0462D6671471825C0B2B04008622E2
+:10874000183E0E008211C4308211C623047A8203BF
+:108750000C701200997E0D00062E8B2D0400047102
+:10876000997E0C00F206C43092F40472997E0D00DA
+:10877000990E0E00F23D0472997E0D00F239C4612B
+:108780008234C461A231C4628204C4648214F231AE
+:10879000187E0D00D4728213983E0E0082080C7071
+:1087A0001200997E0D00062E8B2D04000471997E17
+:1087B0000D00F217187E0D00D47292060471997E96
+:1087C0000D000470F216983E0E000472997E0D00A2
+:1087D0008207047A997E0D00062E8B2D0400047109
+:1087E000997E0C00F2EF0462996E0D00F202147192
+:1087F000285D06000463D6659207186E0D00546369
+:108800006665A96D060050C106272C101000E1F026
+:108810000470C67482092F67030060562F67020038
+:1088200091562471F2F7E1F07100F2FF706F367625
+:10883000786F0200C676B2072677267F7877060023
+:10884000267FE170787F0400267FE170C6230672E0
+:10885000320206734327E1F0C6232207C6240672BC
+:10886000320206744327F206C63406233202062477
+:108870004322E1F03C101000D1C106E506D66B049E
+:108880000000063E064D6B04000050C12C10100085
+:10889000E1F02400C6230672020206734327E1F0CA
+:1088A0002623E1F026232624E1F024002632264365
+:1088B00026542F260500E1F00470C67482092F6744
+:1088C000030060562F67020091562471F2F7E1F021
+:1088D0003414B1F17741047014613441C646820901
+:1088E0002F57030030F52F570200B1F52474F2F62C
+:1088F00030F12414E1F024000470C67482062F675E
+:10890000020091362471F2FAE1F0240077411471EB
+:108910003441C6478204B1322424F2FBE1F0240042
+:10892000773114713431C6378204B1022424F2FB4A
+:10893000E1F024000870008006672C600CDC18371A
+:108940000CDC182601003414B1F108F000802CF082
+:108950004413F1F006720C60000726220850003024
+:1089600026265771046014342C5000493474C673A1
+:10897000346282092F45070030442FF60200774801
+:10898000A14FF2F530F12414E1F0240008700080CA
+:1089900006672C600CDC18370CDC182601003C1034
+:1089A0001000D1C108F000802CF04413F1F00672E1
+:1089B0000C6080022622085000300C30800B0CF036
+:1089C00000A0263226F526265771046014442C5048
+:1089D00000493474C6743462820E2FEF070030DE13
+:1089E0002FE60300A1DE2FE5070030DE2FE60200B0
+:1089F000A1DEF2F050C12C101000E1F034140C7024
+:108A00001E00B17130711461C4702667B16192FBB0
+:108A10002414E1F0E1F024003414B1F108700040B6
+:108A2000B9079060B9270060B9370460B9070860DA
+:108A300038679060D46182FD0C600081B967006086
+:108A40000B14000030F12414E1F024003414B1F1CF
+:108A500008700040B92700600460C6652F23060037
+:108A6000820DB92704603024B92708603827906048
+:108A7000D42282FD24612444F2F10C600081B967A4
+:108A800000600B14000030F12414E1F03418C1E14F
+:108A9000087000400C6000DEB967106077310C6030
+:108AA0009001B96700607721343108600013B9275D
+:108AB00004606636B93714600850001038671460D7
+:108AC0000C401460D665264792FA38E71860B10466
+:108AD0000C600081B9670060B90710600B140000DA
+:108AE000062E40E12418E1F0000000000000000024
 :108AF0000000000000000000000000000000000076
 :108B00000000000000000000000000000000000065
 :108B10000000000000000000000000000000000055
 :10DBD0000000000000000000000000000000000045
 :10DBE0000000000000000000000000000000000035
 :10DBF0000000000000000000000000000000000025
-:10DC0000000002020402000001000100180E180EBC
+:10DC0000000002020602000001000100180E180EBA
 :10DC100000FFFFFFFF000005D002020103016400C6
 :10DC200064000100010000000000000000004C0042
 :10DC30004800980801FFFF000002014600010002B1
 :10DD5000FF3F010040020100000010000000080029
 :10DD60000000000010100800103F103F643C10003D
 :10DD7000643C1000643C10000000088201000000B8
-:10DD800000000080640000000000000000000000AF
+:10DD80000080008080800000000000000000000093
 :10DD90000080000032800000000000000000000051
 :10DDA00040220100000010000000080000000000F8
 :10DDB00010100800103F103F643C1000643C10003D
 :10DDE000324000000000000000000000400201007E
 :10DDF00000001000000008000000000010100800E3
 :10DE0000103F103F643C1000643C1000643C100064
-:10DE10000000088201000000008000806480000093
+:10DE10000000088201000000008000808080000077
 :10DE200000000000000000000080000032800000C0
 :10DE3000000000000000000040220100000000007F
 :10DE4000000008000000000010100800103F103F04
 :10DE700000000000004000003240000000000000F0
 :10DE8000000000009DB900004A4A05004A320032F5
 :10DE90000019320032000000640000006464C80011
-:10DEA000140001003200C80014002C015E015E0164
+:10DEA000140001003200C80014005E015E015E0132
 :10DEB0009001000028006400000032000100010011
 :10DEC00000000501320AB80BF40101011E001E001A
 :10DED000200364006400140096000005040A010693
 :10DEF0001400280014000A002C0103020101010093
 :10DF000050005000180114005000DC001E003200C8
 :10DF100064001404FD020003140102030102050061
-:10DF2000000000050F19324B646400010023231E1A
-:10DF3000326464000A0A1E00050A01006400C80079
+:10DF2000000000050F19324B64640001002D2D0A1A
+:10DF3000003264000A0A1E00050A01006400C800DD
 :10DF400005008200C8000505C80028003200000056
 :10DF50009DB900004A4A05004A32003200193200D9
 :10DF600032000000640000006464C8001400010076
-:10DF70003200C80014002C015E015E01C2010000E5
+:10DF70003200C80014005E015E015E01C2010000B3
 :10DF800028006400000032000100010000000501CB
 :10DF9000320AB80BF40101011E001E0020036400C8
 :10DFA0006400140096000005040A01063C0000000D
 :10DFC0001E000A002C010302010101005000500054
 :10DFD000180114005000DC001E003200640014041C
 :10DFE000FD02000314010203010205000000000508
-:10DFF0000F19324B645F00010023231E326464005A
+:10DFF0000F19324B645F0001002D2D0A00326400BE
 :10E000000A0A1E00050A01006400C800050082001B
 :10E01000C8000505C8001E00320000000000000016
 :10E0200000000000000000000000000000000000F0
 :10E200000000000014000000100000000E180E189E
 :10E2100000000000180C00004A000000640000002C
 :10E2200000000000900000000000000008800000D6
-:10E23000000040002C20240054FF0F0008080100BB
-:10E2400000000000FF022C01202C1010010008002B
-:10E25000C800C81061A70200FF3F01002C1B00008E
-:10E2600064C012000100000000000000400F400FD9
+:10E230000000A8003214240054FF0F000808010059
+:10E2400000000000FF022C01143210100100080031
+:10E25000C800C81061270300FF3F0100200600002E
+:10E2600064C012000200000000000000400F400FD8
 :10E2700001018000FF0FFF0F008000800000000000
 :10E28000E00F00000000FF0F0E180000008000806B
-:10E29000648000000000000000000000004000005A
-:10E2A0003240000000000000000000004022010099
+:10E29000648000000000000000000000008000001A
+:10E2A0003280000000000000000000004002010079
 :10E2B0000000100000000800000000000000000046
 :10E2C00010100800103F103F643C1000000008824E
-:10E2D0002C01FF0F01000000FF7F0000C800B0010B
-:10E2E0002B00081FFF000000000000001E001000AF
+:10E2D0002C01FF0F01000000FF7F0000C8000000BC
+:10E2E0000000081F000000000000000000005B00AC
 :10E2F000000000000000000000000000000001001D
 :10E300000000AC0D10100000000000000000000034
 :10E31000000000000000000000000000667FF00721
 :10E4D000000000000000000000000000000000003C
 :10E4E000000000000000000000000000000000002C
 :10E4F000000000000000000000000000000000001C
-:10E50000B1C60A1AAAAA0A1A97620A19A4960A197F
-:10E51000A69E0A188E3E0A189E7E0A17A4960A170F
-:10E5200097620A16A18A0A16914A0A158D3A0A15A7
-:10E5300098660A148F420A147F020A138D3A0A134E
-:10E540008B2E0A1381060A13914A0A13996A0A1339
-:10E550008E3E0A1398660A138D3A0A1373D2091372
-:10E56000B6DE0A1AAFC20A1A9C760A19A9AA0A19B3
-:10E57000ACB60A18924E0A18A3920A17AAAE0A1746
-:10E580009C760A16A7A20A1697620A158D3A0A15F2
-:10E590009D760A1493520A1485160A1391460A139B
-:10E5A0008F3E0A13861A0A1397620A139F7E0A1374
-:10E5B000934E0A139C720A1390420A1371CA0913EC
-:10E5C000B5D60A1AAEBE0A1A9B720A19A9A60A196A
-:10E5D000ABAE0A1891460A18A38E0A17A9A60A1705
-:10E5E0009C720A16A79E0A16975E0A158C360A15A3
-:10E5F0009B720A14934E0A1484160A1390460A1347
-:10E600008E3E0A13851A0A13955A0A139D7A0A1325
-:10E61000914A0A139B720A138F420A1370C209139C
-:10E62000B0C60A1AACB60A1A9A6E0A19A8A20A1932
-:10E63000AAAA0A1890420A18A28A0A17A8A60A17B4
-:10E640009A6A0A16A5960A1695560A158A2A0A156E
-:10E650009B6E0A14914A0A14830E0A138F420A13FE
-:10E660008D360A1383120A1394560A139C760A13E2
-:10E670008F3E0A1399660A138D360A136FC2091367
-:10E68000B1C60A1AACB60A1A9A6E0A19A8A60A19CD
-:10E69000ABAE0A1891460A18A18A0A17A8A60A174B
-:10E6A000996A0A16A4960A1695560A15892A0A1511
-:10E6B000996A0A1490460A14810A0A138E3E0A13B4
-:10E6C0008C360A13830E0A1393520A139B6E0A1395
-:10E6D0008F3E0A1398660A138D360A136EBE09130D
-:10E6E000B3CE0A1AADB60A1A9A6E0A19A8A60A1962
-:10E6F000A9AA0A1890460A18A28E0A17A8A20A17F1
-:10E70000996A0A16A4920A1694560A15892A0A15B5
-:10E7100099660A1491460A14810A0A138E3A0A135A
-:10E720008C360A13820A0A1393520A139A6A0A133E
-:10E730008D3A0A1397620A138D360A136DBA0913BC
-:10E74000B3CE0A1AACB60A1A9A6E0A19A8A60A1902
-:10E75000A9A60A1890420A18A1860A17A69A0A17AB
-:10E7600098620A16A28E0A16934E0A1588260A1572
-:10E7700097620A1490460A1480060A138C360A130C
-:10E780008B320A1380060A13914A0A1398660A13F9
-:10E790008C360A13965A0A138B320A136DB6091374
-:10E7A000B2CE0A1AABAE0A1A99660A19A69E0A19BF
-:10E7B000A8A60A188F420A18A1860A17A69E0A1749
-:10E7C00098660A16A28E0A16934E0A15871E0A1517
-:10E7D000965E0A148E3E0A147FFE09138C320A13C9
-:10E7E000892A0A1381060A13914A0A1398660A13A2
-:10E7F0008C320A13965A0A138B2E0A136CB609131D
-:10E80000B2CE0A1AAAAE0A1A99660A19A59A0A1964
-:10E81000A79E0A188E3A0A189F7E0A17A5960A170D
-:10E82000955A0A16A1860A16914A0A15861E0A15D5
-:10E83000955A0A148D3A0A147EFE09138B320A1374
-:10E8400088260A137F020A1390420A1397620A135A
-:10E850008B320A1395560A13892A0A136BAE0913D1
-:10E86000B3D20A1AABAE0A1A98660A19A5960A1903
-:10E87000A69E0A188E3E0A189F7E0A17A3920A17B0
-:10E8800095560A16A1860A1690460A1585160A1587
-:10E89000955A0A148D3A0A147DFA09138A2A0A1322
-:10E8A00087220A137FFE09138F420A1397620A1305
-:10E8B0008B2E0A1393520A1389260A136AAA091384
-:10E8C000B3CE0A1AAAAA0A1A98620A19A5960A19B0
-:10E8D000A69A0A188E3A0A189E7E0A17A3920A1759
-:10E8E00095560A16A0820A1690460A1585160A152C
-:10E8F00095560A148C320A147DF60913892A0A13D4
-:10E90000861E0A137DFA09138F420A13965A0A13B8
-:10E910008A2A0A13934E0A1388260A1369AA09132E
-:10E92000B2CA0A1AAAAE0A1A97620A19A4960A1952
-:10E93000A59A0A188D3A0A189D7A0A17A38E0A1703
-:10E9400094560A169F7E0A1691460A1584160A15D1
-:10E95000934E0A148B2E0A147DF609138A2A0A1381
-:10E96000871E0A137DFA09138F420A13955A0A1358
-:10E970008A2A0A13934E0A1388220A1369AA0913D2
-:10E98000B2CE0A1AAAAA0A1A975E0A19A4960A19F6
-:10E99000A5960A188D360A189D760A17A38E0A17AF
-:10E9A00094520A169F7E0A1690420A1584160A157A
-:10E9B00093520A148A2E0A147DFA0913892A0A131B
-:10E9C000851A0A137DFA09138F420A1394560A1303
-:10E9D000892A0A13924E0A1387220A1369A6091379
-:10E9E000B5D60A1AA4920A1A924A0A199D760A19E9
-:10E9F0009E7E0A1887220A18965E0A179C760A17C6
-:10EA00008D3A0A16965E0A16892A0A157DF60915A8
-:10EA10008B320A14830E0A1476DE0913810A0A1354
-:10EA20007FFE091376DE0913861E0A138C360A133D
-:10EA3000810A0A138A2A0A137F020A1363920913AE
+:10E50000A9AA0A1AA28E0A1A90420A199E7E0A190C
+:10E510009F820A1887220A1898620A179E7A0A1799
+:10E5200090420A169B6E0A168C320A1587220A152B
+:10E53000924A0A14892A0A147BEE091388220A13C4
+:10E54000861A0A137BEE09138D360A1394520A13A6
+:10E5500089260A13924A0A1388220A136FBE0913E6
+:10E56000AFBE0A1AA8A20A1A955A0A19A3920A1942
+:10E57000A5960A188D360A189E7A0A17A38E0A17CE
+:10E5800095560A16A1860A1691460A1587220A157B
+:10E59000965A0A148E3A0A147FFE09138D360A130E
+:10E5A0008A2E0A1380060A13924E0A13996A0A13D6
+:10E5B0008D3A0A13965E0A138B320A136EBE091344
+:10E5C000ADBA0A1AA69E0A1A94560A19A28A0A19FC
+:10E5D000A3920A188C360A189D760A17A28A0A177F
+:10E5E00095560A16A0820A1690420A15861E0A152A
+:10E5F00095560A148D3A0A147FFE09138C320A13B9
+:10E60000892A0A137F020A13914A0A1398660A1389
+:10E610008C360A13955A0A138A2A0A136DB60913FF
+:10E62000AAAA0A1AA5960A1A934E0A19A18A0A19C1
+:10E63000A3920A188B320A189B720A17A1860A172E
+:10E6400093520A169E7E0A168F420A1584160A15E0
+:10E6500094560A148C360A147DFA09138A2E0A136A
+:10E6600088260A137EFA091390420A13975E0A134A
+:10E670008B2E0A1394520A1389260A136BAE0913C0
+:10E68000AAAE0A1AA59A0A1A93520A19A18A0A1955
+:10E69000A38E0A188A2E0A189B720A17A1860A17D7
+:10E6A00093520A169E7A0A168F420A1584160A1584
+:10E6B00094560A148B320A147DF60913892A0A1318
+:10E6C00087220A137DFA09138F420A13965E0A13F2
+:10E6D0008A2E0A1393520A1388220A136AAE091368
+:10E6E000ACB20A1AA5960A1A934E0A19A28A0A19F6
+:10E6F000A28A0A188B2E0A189C760A17A0820A177B
+:10E70000924E0A169D7A0A168F3E0A1584120A1531
+:10E71000934E0A148C320A147CF6091389260A13C4
+:10E7200087220A137DF609138F3E0A13955A0A139E
+:10E73000892A0A13914A0A1387220A1369AA09131C
+:10E74000ABAE0A1AA4920A1A924E0A19A18A0A19A1
+:10E75000A1860A188A2A0A189B6E0A179F820A172E
+:10E7600091460A169D760A168E3E0A15830E0A15E4
+:10E77000924A0A148A2E0A147BF2091388220A1379
+:10E78000861E0A137BF209138D360A1394520A135C
+:10E7900087220A1390420A13871E0A1368A60913D8
+:10E7A000ABAE0A1AA4960A1A924A0A19A0820A194A
+:10E7B000A1860A18892A0A18996A0A179F820A17D5
+:10E7C00090460A169C760A168D360A15820E0A1590
+:10E7D00090460A1489260A147BEE091387220A132D
+:10E7E000851A0A137AEE09138C360A13924E0A130D
+:10E7F000861E0A1390420A13851A0A1367A2091388
+:10E80000ABAE0A1AA38E0A1A914A0A199F7E0A19F8
+:10E81000A0820A1889260A1899660A179F7E0A1785
+:10E8200090420A169B6E0A168C360A1581060A1546
+:10E8300090460A1488260A147AEE0913861E0A13D3
+:10E8400084160A137AEE09138B320A13924E0A13B6
+:10E85000861E0A138F420A1385160A13679E091330
+:10E86000ACB20A1AA3920A1A914A0A199F7E0A198F
+:10E87000A0820A1888260A1899660A179D7A0A172C
+:10E8800090420A169B720A168B320A1581060A15E7
+:10E890008F420A1488220A1479EA0913861E0A1381
+:10E8A00083120A1379EA09138B320A13924E0A1360
+:10E8B000851A0A138F3E0A1384160A13669E0913DB
+:10E8C000ACB60A1AA3920A1A914A0A199F7E0A192B
+:10E8D0009F820A1888220A1898620A179D7A0A17D6
+:10E8E0008F3E0A169A6A0A168B2E0A1580060A159A
+:10E8F0008F420A1487220A1479E60913851A0A132B
+:10E90000830E0A1379E609138A2E0A13914A0A1311
+:10E9100085160A138E3E0A1384120A13659A091388
+:10E92000ABAE0A1AA3920A1A91460A199E7E0A19D8
+:10E930009F820A1887220A1897620A179D760A177B
+:10E940008F3E0A1699660A168C360A157F020A153A
+:10E950008E3E0A1487220A1479E60913851A0A13CF
+:10E96000830E0A1379E609138B2E0A1391460A13B4
+:10E9700085160A138E3E0A1384120A13659609132C
+:10E98000ACB60A1AA38E0A1A90460A199E7E0A1974
+:10E990009F820A1887220A1897620A179D7A0A1717
+:10E9A0008F3E0A16996A0A168B320A157FFE0915E0
+:10E9B0008D3A0A14861E0A1478E60913851A0A137A
+:10E9C000820E0A1379E609138B2E0A1390460A1356
+:10E9D00084160A138E3E0A1383120A13659A0913CA
+:10E9E000ADBA0A1A9C760A1A8C320A1997620A1969
+:10E9F00098620A18820A0A1890460A1795560A174A
+:10EA0000871E0A1690460A1684160A1578E6091516
+:10EA1000861E0A147FFE091472CE09137CF20913B4
+:10EA20007AEE091373CE0913820E0A1389260A138C
+:10EA30007DF60913861A0A137BF209135F82091304
 :10EA4000000208000002080000020800000208009E
 :10EA5000000208000002080000020800000208008E
 :10EA6000000208000002080000020800000208007E
 :10EEA0000000000000000000000000000000000062
 :10EEB000000000000000230000000000000000002F
 :10EEC00000000000000046237FFC8F3F0000000090
-:10EED0000000000000000000564545165554451638
-:10EEE00055644513966545139645511616654516A6
-:10EEF0001655451696645116966545159555451552
-:10EF0000D664451616654516966545165544491549
-:10EF100041404000404040004040400040404000F0
-:10EF200040404000404040004040400040404000E1
-:10EF30003030303004411000044110000441100012
-:10EF4000044110000441100004411000044110006D
+:10EED0000000000000000000000000000000000032
+:10EEE0000000000000000000000000000000000022
+:10EEF0000000000000000000000000000000000012
+:10EF00000000000000000000000000000000000001
+:10EF100000000000000000000000000000000000F1
+:10EF200000000000000000000000000000000000E1
+:10EF300000000000000000000000000000000000D1
+:10EF400000000000000000000000000000000000C1
 :10EF500000000000000000000000000000000000B1
 :10EF600000000000000000000000000000000000A1
 :10EF70000000000000000000000000000000000091
 :10FC300000F00080000A000000FA008000020000CE
 :10FC4000000000000000000000270000001000007D
 :10FC50000049003000A0003000000000000000005B
-:10FC6000CF9F076F47456DAF000000000000000008
-:10FC70001908DF07122020004953545632544147D7
+:10FC6000D49951A2EDB373F700000000000000002A
+:10FC7000070ADF07113122004953545632544147D5
 :00000001FF
index db10e00..2871377 100644 (file)
@@ -34,7 +34,6 @@
 #include <linux/mutex.h>
 #include <linux/anon_inodes.h>
 #include <linux/device.h>
-#include <linux/freezer.h>
 #include <asm/uaccess.h>
 #include <asm/io.h>
 #include <asm/mman.h>
@@ -42,6 +41,7 @@
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/compat.h>
+#include <linux/rculist.h>
 
 /*
  * LOCKING:
@@ -134,8 +134,12 @@ struct nested_calls {
  * of these on a server and we do not want this to take another cache line.
  */
 struct epitem {
-       /* RB tree node used to link this structure to the eventpoll RB tree */
-       struct rb_node rbn;
+       union {
+               /* RB tree node links this structure to the eventpoll RB tree */
+               struct rb_node rbn;
+               /* Used to free the struct epitem */
+               struct rcu_head rcu;
+       };
 
        /* List header used to link this structure to the eventpoll ready list */
        struct list_head rdllink;
@@ -672,6 +676,12 @@ static int ep_scan_ready_list(struct eventpoll *ep,
        return error;
 }
 
+static void epi_rcu_free(struct rcu_head *head)
+{
+       struct epitem *epi = container_of(head, struct epitem, rcu);
+       kmem_cache_free(epi_cache, epi);
+}
+
 /*
  * Removes a "struct epitem" from the eventpoll RB tree and deallocates
  * all the associated resources. Must be called with "mtx" held.
@@ -693,8 +703,7 @@ static int ep_remove(struct eventpoll *ep, struct epitem *epi)
 
        /* Remove the current item from the list of epoll hooks */
        spin_lock(&file->f_lock);
-       if (ep_is_linked(&epi->fllink))
-               list_del_init(&epi->fllink);
+       list_del_rcu(&epi->fllink);
        spin_unlock(&file->f_lock);
 
        rb_erase(&epi->rbn, &ep->rbr);
@@ -705,9 +714,14 @@ static int ep_remove(struct eventpoll *ep, struct epitem *epi)
        spin_unlock_irqrestore(&ep->lock, flags);
 
        wakeup_source_unregister(ep_wakeup_source(epi));
-
-       /* At this point it is safe to free the eventpoll item */
-       kmem_cache_free(epi_cache, epi);
+       /*
+        * At this point it is safe to free the eventpoll item. Use the union
+        * field epi->rcu, since we are trying to minimize the size of
+        * 'struct epitem'. The 'rbn' field is no longer in use. Protected by
+        * ep->mtx. The rcu read side, reverse_path_check_proc(), does not make
+        * use of the rbn field.
+        */
+       call_rcu(&epi->rcu, epi_rcu_free);
 
        atomic_long_dec(&ep->user->epoll_watches);
 
@@ -740,6 +754,7 @@ static void ep_free(struct eventpoll *ep)
                epi = rb_entry(rbp, struct epitem, rbn);
 
                ep_unregister_pollwait(ep, epi);
+               cond_resched();
        }
 
        /*
@@ -754,6 +769,7 @@ static void ep_free(struct eventpoll *ep)
        while ((rbp = rb_first(&ep->rbr)) != NULL) {
                epi = rb_entry(rbp, struct epitem, rbn);
                ep_remove(ep, epi);
+               cond_resched();
        }
        mutex_unlock(&ep->mtx);
 
@@ -871,9 +887,8 @@ static const struct file_operations eventpoll_fops = {
  */
 void eventpoll_release_file(struct file *file)
 {
-       struct list_head *lsthead = &file->f_ep_links;
        struct eventpoll *ep;
-       struct epitem *epi;
+       struct epitem *epi, *next;
 
        /*
         * We don't want to get "file->f_lock" because it is not
@@ -889,17 +904,12 @@ void eventpoll_release_file(struct file *file)
         * Besides, ep_remove() acquires the lock, so we can't hold it here.
         */
        mutex_lock(&epmutex);
-
-       while (!list_empty(lsthead)) {
-               epi = list_first_entry(lsthead, struct epitem, fllink);
-
+       list_for_each_entry_safe(epi, next, &file->f_ep_links, fllink) {
                ep = epi->ep;
-               list_del_init(&epi->fllink);
                mutex_lock_nested(&ep->mtx, 0);
                ep_remove(ep, epi);
                mutex_unlock(&ep->mtx);
        }
-
        mutex_unlock(&epmutex);
 }
 
@@ -1137,7 +1147,9 @@ static int reverse_path_check_proc(void *priv, void *cookie, int call_nests)
        struct file *child_file;
        struct epitem *epi;
 
-       list_for_each_entry(epi, &file->f_ep_links, fllink) {
+       /* CTL_DEL can remove links here, but that can't increase our count */
+       rcu_read_lock();
+       list_for_each_entry_rcu(epi, &file->f_ep_links, fllink) {
                child_file = epi->ep->file;
                if (is_file_epoll(child_file)) {
                        if (list_empty(&child_file->f_ep_links)) {
@@ -1159,6 +1171,7 @@ static int reverse_path_check_proc(void *priv, void *cookie, int call_nests)
                                "file is not an ep!\n");
                }
        }
+       rcu_read_unlock();
        return error;
 }
 
@@ -1285,7 +1298,7 @@ static int ep_insert(struct eventpoll *ep, struct epoll_event *event,
 
        /* Add the current item to the list of active epoll hook for this file */
        spin_lock(&tfile->f_lock);
-       list_add_tail(&epi->fllink, &tfile->f_ep_links);
+       list_add_tail_rcu(&epi->fllink, &tfile->f_ep_links);
        spin_unlock(&tfile->f_lock);
 
        /*
@@ -1326,8 +1339,7 @@ static int ep_insert(struct eventpoll *ep, struct epoll_event *event,
 
 error_remove_epi:
        spin_lock(&tfile->f_lock);
-       if (ep_is_linked(&epi->fllink))
-               list_del_init(&epi->fllink);
+       list_del_rcu(&epi->fllink);
        spin_unlock(&tfile->f_lock);
 
        rb_erase(&epi->rbn, &ep->rbr);
@@ -1603,8 +1615,7 @@ fetch_events:
                        }
 
                        spin_unlock_irqrestore(&ep->lock, flags);
-                       if (!freezable_schedule_hrtimeout_range(to, slack,
-                                                               HRTIMER_MODE_ABS))
+                       if (!schedule_hrtimeout_range(to, slack, HRTIMER_MODE_ABS))
                                timed_out = 1;
 
                        spin_lock_irqsave(&ep->lock, flags);
@@ -1844,15 +1855,12 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
         * and hang them on the tfile_check_list, so we can check that we
         * haven't created too many possible wakeup paths.
         *
-        * We need to hold the epmutex across both ep_insert and ep_remove
-        * b/c we want to make sure we are looking at a coherent view of
-        * epoll network.
+        * We need to hold the epmutex across ep_insert to prevent
+        * multple adds from creating loops in parallel.
         */
-       if (op == EPOLL_CTL_ADD || op == EPOLL_CTL_DEL) {
+       if (op == EPOLL_CTL_ADD) {
                mutex_lock(&epmutex);
                did_lock_epmutex = 1;
-       }
-       if (op == EPOLL_CTL_ADD) {
                if (is_file_epoll(tfile)) {
                        error = -ELOOP;
                        if (ep_loop_check(ep, tfile) != 0) {
index deb915c..58bda2e 100644 (file)
@@ -589,6 +589,7 @@ enum {
 #define EXT4_FREE_BLOCKS_NO_QUOT_UPDATE        0x0008
 #define EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER  0x0010
 #define EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER   0x0020
+#define EXT4_FREE_BLOCKS_RESERVE               0x0040
 
 /*
  * Flags used by ext4_discard_partial_page_buffers
index 84d817b..df633bb 100644 (file)
@@ -363,7 +363,7 @@ static int ext4_valid_extent(struct inode *inode, struct ext4_extent *ext)
        ext4_lblk_t lblock = le32_to_cpu(ext->ee_block);
        ext4_lblk_t last = lblock + len - 1;
 
-       if (lblock > last)
+       if (len == 0 || lblock > last)
                return 0;
        return ext4_data_block_valid(EXT4_SB(inode->i_sb), block, len);
 }
@@ -1722,7 +1722,8 @@ static void ext4_ext_try_to_merge_up(handle_t *handle,
 
        brelse(path[1].p_bh);
        ext4_free_blocks(handle, inode, NULL, blk, 1,
-                        EXT4_FREE_BLOCKS_METADATA | EXT4_FREE_BLOCKS_FORGET);
+                        EXT4_FREE_BLOCKS_METADATA | EXT4_FREE_BLOCKS_FORGET |
+                        EXT4_FREE_BLOCKS_RESERVE);
 }
 
 /*
index e6941e6..1fefeb7 100644 (file)
@@ -655,6 +655,14 @@ int ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk,
 
        BUG_ON(end < lblk);
 
+       if ((status & EXTENT_STATUS_DELAYED) &&
+           (status & EXTENT_STATUS_WRITTEN)) {
+               ext4_warning(inode->i_sb, "Inserting extent [%u/%u] as "
+                               " delayed and written which can potentially "
+                               " cause data loss.\n", lblk, len);
+               WARN_ON(1);
+       }
+
        newes.es_lblk = lblk;
        newes.es_len = len;
        ext4_es_store_pblock(&newes, pblk);
index 4635788..ec9770f 100644 (file)
@@ -100,7 +100,7 @@ ext4_file_dio_write(struct kiocb *iocb, const struct iovec *iov,
        struct blk_plug plug;
        int unaligned_aio = 0;
        ssize_t ret;
-       int overwrite = 0;
+       int *overwrite = iocb->private;
        size_t length = iov_length(iov, nr_segs);
 
        if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS) &&
@@ -118,8 +118,6 @@ ext4_file_dio_write(struct kiocb *iocb, const struct iovec *iov,
        mutex_lock(&inode->i_mutex);
        blk_start_plug(&plug);
 
-       iocb->private = &overwrite;
-
        /* check whether we do a DIO overwrite or not */
        if (ext4_should_dioread_nolock(inode) && !unaligned_aio &&
            !file->f_mapping->nrpages && pos + length <= i_size_read(inode)) {
@@ -143,7 +141,7 @@ ext4_file_dio_write(struct kiocb *iocb, const struct iovec *iov,
                 * So we should check these two conditions.
                 */
                if (err == len && (map.m_flags & EXT4_MAP_MAPPED))
-                       overwrite = 1;
+                       *overwrite = 1;
        }
 
        ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos);
@@ -170,6 +168,7 @@ ext4_file_write(struct kiocb *iocb, const struct iovec *iov,
 {
        struct inode *inode = file_inode(iocb->ki_filp);
        ssize_t ret;
+       int overwrite = 0;
 
        /*
         * If we have encountered a bitmap-format file, the size limit
@@ -190,6 +189,7 @@ ext4_file_write(struct kiocb *iocb, const struct iovec *iov,
                }
        }
 
+       iocb->private = &overwrite;
        if (unlikely(iocb->ki_filp->f_flags & O_DIRECT))
                ret = ext4_file_dio_write(iocb, iov, nr_segs, pos);
        else
index 5890614..b07a221 100644 (file)
@@ -577,7 +577,7 @@ int ext4_ind_map_blocks(handle_t *handle, struct inode *inode,
                                       EXT4_FEATURE_RO_COMPAT_BIGALLOC)) {
                EXT4_ERROR_INODE(inode, "Can't allocate blocks for "
                                 "non-extent mapped inodes with bigalloc");
-               return -ENOSPC;
+               return -EUCLEAN;
        }
 
        goal = ext4_find_goal(inode, map->m_lblk, partial);
index e48bd5a..d4d7265 100644 (file)
@@ -626,6 +626,7 @@ int ext4_map_blocks(handle_t *handle, struct inode *inode,
                status = map->m_flags & EXT4_MAP_UNWRITTEN ?
                                EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
                if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) &&
+                   !(status & EXTENT_STATUS_WRITTEN) &&
                    ext4_find_delalloc_range(inode, map->m_lblk,
                                             map->m_lblk + map->m_len - 1))
                        status |= EXTENT_STATUS_DELAYED;
@@ -736,6 +737,7 @@ found:
                status = map->m_flags & EXT4_MAP_UNWRITTEN ?
                                EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
                if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) &&
+                   !(status & EXTENT_STATUS_WRITTEN) &&
                    ext4_find_delalloc_range(inode, map->m_lblk,
                                             map->m_lblk + map->m_len - 1))
                        status |= EXTENT_STATUS_DELAYED;
@@ -1030,7 +1032,8 @@ retry_journal:
                ext4_journal_stop(handle);
                goto retry_grab;
        }
-       wait_on_page_writeback(page);
+       /* In case writeback began while the page was unlocked */
+       wait_for_stable_page(page);
 
        if (ext4_should_dioread_nolock(inode))
                ret = __block_write_begin(page, pos, len, ext4_get_block_write);
@@ -2096,19 +2099,32 @@ static int __ext4_journalled_writepage(struct page *page,
                ext4_walk_page_buffers(handle, page_bufs, 0, len,
                                       NULL, bget_one);
        }
-       /* As soon as we unlock the page, it can go away, but we have
-        * references to buffers so we are safe */
+       /*
+        * We need to release the page lock before we start the
+        * journal, so grab a reference so the page won't disappear
+        * out from under us.
+        */
+       get_page(page);
        unlock_page(page);
 
        handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE,
                                    ext4_writepage_trans_blocks(inode));
        if (IS_ERR(handle)) {
                ret = PTR_ERR(handle);
-               goto out;
+               put_page(page);
+               goto out_no_pagelock;
        }
-
        BUG_ON(!ext4_handle_valid(handle));
 
+       lock_page(page);
+       put_page(page);
+       if (page->mapping != mapping) {
+               /* The page got truncated from under us */
+               ext4_journal_stop(handle);
+               ret = 0;
+               goto out;
+       }
+
        if (inline_data) {
                ret = ext4_journal_get_write_access(handle, inode_bh);
 
@@ -2133,6 +2149,8 @@ static int __ext4_journalled_writepage(struct page *page,
                                       NULL, bput_one);
        ext4_set_inode_state(inode, EXT4_STATE_JDATA);
 out:
+       unlock_page(page);
+out_no_pagelock:
        brelse(inode_bh);
        return ret;
 }
@@ -2727,7 +2745,7 @@ retry_journal:
                goto retry_grab;
        }
        /* In case writeback began while the page was unlocked */
-       wait_on_page_writeback(page);
+       wait_for_stable_page(page);
 
        ret = __block_write_begin(page, pos, len, ext4_da_get_block_prep);
        if (ret < 0) {
index 576155c..aed1a67 100644 (file)
@@ -4611,6 +4611,7 @@ void ext4_free_blocks(handle_t *handle, struct inode *inode,
        struct buffer_head *gd_bh;
        ext4_group_t block_group;
        struct ext4_sb_info *sbi;
+       struct ext4_inode_info *ei = EXT4_I(inode);
        struct ext4_buddy e4b;
        unsigned int count_clusters;
        int err = 0;
@@ -4810,7 +4811,6 @@ do_more:
        ext4_block_bitmap_csum_set(sb, block_group, gdp, bitmap_bh);
        ext4_group_desc_csum_set(sb, block_group, gdp);
        ext4_unlock_group(sb, block_group);
-       percpu_counter_add(&sbi->s_freeclusters_counter, count_clusters);
 
        if (sbi->s_log_groups_per_flex) {
                ext4_group_t flex_group = ext4_flex_group(sbi, block_group);
@@ -4818,10 +4818,23 @@ do_more:
                             &sbi->s_flex_groups[flex_group].free_clusters);
        }
 
-       ext4_mb_unload_buddy(&e4b);
-
-       if (!(flags & EXT4_FREE_BLOCKS_NO_QUOT_UPDATE))
+       if (flags & EXT4_FREE_BLOCKS_RESERVE && ei->i_reserved_data_blocks) {
+               percpu_counter_add(&sbi->s_dirtyclusters_counter,
+                                  count_clusters);
+               spin_lock(&ei->i_block_reservation_lock);
+               if (flags & EXT4_FREE_BLOCKS_METADATA)
+                       ei->i_reserved_meta_blocks += count_clusters;
+               else
+                       ei->i_reserved_data_blocks += count_clusters;
+               spin_unlock(&ei->i_block_reservation_lock);
+               if (!(flags & EXT4_FREE_BLOCKS_NO_QUOT_UPDATE))
+                       dquot_reclaim_block(inode,
+                                       EXT4_C2B(sbi, count_clusters));
+       } else if (!(flags & EXT4_FREE_BLOCKS_NO_QUOT_UPDATE))
                dquot_free_block(inode, EXT4_C2B(sbi, count_clusters));
+       percpu_counter_add(&sbi->s_freeclusters_counter, count_clusters);
+
+       ext4_mb_unload_buddy(&e4b);
 
        /* We dirtied the bitmap block */
        BUFFER_TRACE(bitmap_bh, "dirtied bitmap block");
index 9ed611e..668efa2 100644 (file)
@@ -1981,7 +1981,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
                          struct inode *inode)
 {
        struct inode *dir = dentry->d_parent->d_inode;
-       struct buffer_head *bh;
+       struct buffer_head *bh = NULL;
        struct ext4_dir_entry_2 *de;
        struct ext4_dir_entry_tail *t;
        struct super_block *sb;
@@ -2006,14 +2006,14 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
                        return retval;
                if (retval == 1) {
                        retval = 0;
-                       return retval;
+                       goto out;
                }
        }
 
        if (is_dx(dir)) {
                retval = ext4_dx_add_entry(handle, dentry, inode);
                if (!retval || (retval != ERR_BAD_DX_DIR))
-                       return retval;
+                       goto out;
                ext4_clear_inode_flag(dir, EXT4_INODE_INDEX);
                dx_fallback++;
                ext4_mark_inode_dirty(handle, dir);
@@ -2025,14 +2025,15 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
                        return PTR_ERR(bh);
 
                retval = add_dirent_to_buf(handle, dentry, inode, NULL, bh);
-               if (retval != -ENOSPC) {
-                       brelse(bh);
-                       return retval;
-               }
+               if (retval != -ENOSPC)
+                       goto out;
 
                if (blocks == 1 && !dx_fallback &&
-                   EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_DIR_INDEX))
-                       return make_indexed_dir(handle, dentry, inode, bh);
+                   EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_DIR_INDEX)) {
+                       retval = make_indexed_dir(handle, dentry, inode, bh);
+                       bh = NULL; /* make_indexed_dir releases bh */
+                       goto out;
+               }
                brelse(bh);
        }
        bh = ext4_append(handle, dir, &block);
@@ -2048,6 +2049,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
        }
 
        retval = add_dirent_to_buf(handle, dentry, inode, de, bh);
+out:
        brelse(bh);
        if (retval == 0)
                ext4_set_inode_state(inode, EXT4_STATE_NEWENTRY);
index 21a0b43..af1eaed 100644 (file)
@@ -803,6 +803,7 @@ static void ext4_put_super(struct super_block *sb)
                dump_orphan_list(sb, sbi);
        J_ASSERT(list_empty(&sbi->s_orphan));
 
+       sync_blockdev(sb->s_bdev);
        invalidate_bdev(sb->s_bdev);
        if (sbi->journal_bdev && sbi->journal_bdev != sb->s_bdev) {
                /*
index 62d426d..556af9e 100644 (file)
@@ -470,28 +470,12 @@ __writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
         * write_inode()
         */
        spin_lock(&inode->i_lock);
-
+       /* Clear I_DIRTY_PAGES if we've written out all dirty pages */
+       if (!mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
+               inode->i_state &= ~I_DIRTY_PAGES;
        dirty = inode->i_state & I_DIRTY;
-       inode->i_state &= ~I_DIRTY;
-
-       /*
-        * Paired with smp_mb() in __mark_inode_dirty().  This allows
-        * __mark_inode_dirty() to test i_state without grabbing i_lock -
-        * either they see the I_DIRTY bits cleared or we see the dirtied
-        * inode.
-        *
-        * I_DIRTY_PAGES is always cleared together above even if @mapping
-        * still has dirty pages.  The flag is reinstated after smp_mb() if
-        * necessary.  This guarantees that either __mark_inode_dirty()
-        * sees clear I_DIRTY_PAGES or we see PAGECACHE_TAG_DIRTY.
-        */
-       smp_mb();
-
-       if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
-               inode->i_state |= I_DIRTY_PAGES;
-
+       inode->i_state &= ~(I_DIRTY_SYNC | I_DIRTY_DATASYNC);
        spin_unlock(&inode->i_lock);
-
        /* Don't write the inode if only I_DIRTY_PAGES was set */
        if (dirty & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) {
                int err = write_inode(inode, wbc);
@@ -1162,11 +1146,12 @@ void __mark_inode_dirty(struct inode *inode, int flags)
        }
 
        /*
-        * Paired with smp_mb() in __writeback_single_inode() for the
-        * following lockless i_state test.  See there for details.
+        * make sure that changes are seen by all cpus before we test i_state
+        * -- mikulas
         */
        smp_mb();
 
+       /* avoid the locking if we can */
        if ((inode->i_state & flags) == flags)
                return;
 
index c78841e..dadfedb 100644 (file)
@@ -455,7 +455,7 @@ int jbd2_cleanup_journal_tail(journal_t *journal)
         * jbd2_cleanup_journal_tail() doesn't get called all that often.
         */
        if (journal->j_flags & JBD2_BARRIER)
-               blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL, NULL);
+               blkdev_issue_flush(journal->j_fs_dev, GFP_NOFS, NULL);
 
        __jbd2_update_log_tail(journal, first_tid, blocknr);
        return 0;
index 7a10e04..4f7f451 100644 (file)
@@ -1102,6 +1102,14 @@ static void dquot_claim_reserved_space(struct dquot *dquot, qsize_t number)
        dquot->dq_dqb.dqb_rsvspace -= number;
 }
 
+static void dquot_reclaim_reserved_space(struct dquot *dquot, qsize_t number)
+{
+       if (WARN_ON_ONCE(dquot->dq_dqb.dqb_curspace < number))
+               number = dquot->dq_dqb.dqb_curspace;
+       dquot->dq_dqb.dqb_rsvspace += number;
+       dquot->dq_dqb.dqb_curspace -= number;
+}
+
 static inline
 void dquot_free_reserved_space(struct dquot *dquot, qsize_t number)
 {
@@ -1536,6 +1544,15 @@ void inode_claim_rsv_space(struct inode *inode, qsize_t number)
 }
 EXPORT_SYMBOL(inode_claim_rsv_space);
 
+void inode_reclaim_rsv_space(struct inode *inode, qsize_t number)
+{
+       spin_lock(&inode->i_lock);
+       *inode_reserved_space(inode) += number;
+       __inode_sub_bytes(inode, number);
+       spin_unlock(&inode->i_lock);
+}
+EXPORT_SYMBOL(inode_reclaim_rsv_space);
+
 void inode_sub_rsv_space(struct inode *inode, qsize_t number)
 {
        spin_lock(&inode->i_lock);
@@ -1710,6 +1727,35 @@ int dquot_claim_space_nodirty(struct inode *inode, qsize_t number)
 EXPORT_SYMBOL(dquot_claim_space_nodirty);
 
 /*
+ * Convert allocated space back to in-memory reserved quotas
+ */
+void dquot_reclaim_space_nodirty(struct inode *inode, qsize_t number)
+{
+       int cnt;
+
+       if (!dquot_active(inode)) {
+               inode_reclaim_rsv_space(inode, number);
+               return;
+       }
+
+       down_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
+       spin_lock(&dq_data_lock);
+       /* Claim reserved quotas to allocated quotas */
+       for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
+               if (inode->i_dquot[cnt])
+                       dquot_reclaim_reserved_space(inode->i_dquot[cnt],
+                                                    number);
+       }
+       /* Update inode bytes */
+       inode_reclaim_rsv_space(inode, number);
+       spin_unlock(&dq_data_lock);
+       mark_all_dquot_dirty(inode->i_dquot);
+       up_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
+       return;
+}
+EXPORT_SYMBOL(dquot_reclaim_space_nodirty);
+
+/*
  * This operation can block, but only after everything is updated
  */
 void __dquot_free_space(struct inode *inode, qsize_t number, int flags)
index 04ce1ac..d0ea7ef 100644 (file)
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -447,9 +447,8 @@ void inode_add_bytes(struct inode *inode, loff_t bytes)
 
 EXPORT_SYMBOL(inode_add_bytes);
 
-void inode_sub_bytes(struct inode *inode, loff_t bytes)
+void __inode_sub_bytes(struct inode *inode, loff_t bytes)
 {
-       spin_lock(&inode->i_lock);
        inode->i_blocks -= bytes >> 9;
        bytes &= 511;
        if (inode->i_bytes < bytes) {
@@ -457,6 +456,14 @@ void inode_sub_bytes(struct inode *inode, loff_t bytes)
                inode->i_bytes += 512;
        }
        inode->i_bytes -= bytes;
+}
+
+EXPORT_SYMBOL(__inode_sub_bytes);
+
+void inode_sub_bytes(struct inode *inode, loff_t bytes)
+{
+       spin_lock(&inode->i_lock);
+       __inode_sub_bytes(inode, bytes);
        spin_unlock(&inode->i_lock);
 }
 
index 26fed95..f17a2e9 100644 (file)
@@ -187,6 +187,7 @@ struct sec_battery_info {
 
        int swelling_max_vbat;
        int swelling_mode;
+       int swelling_block;
        unsigned long swelling_block_start;
        unsigned long swelling_block_passed;
        int swelling_full_check_cnt;
index 091d72e..c21b684 100644 (file)
@@ -72,6 +72,7 @@ static inline bool compaction_restarting(struct zone *zone, int order)
                zone->compact_considered >= 1UL << zone->compact_defer_shift;
 }
 
+extern void compact_nodes(void);
 #else
 static inline unsigned long try_to_compact_pages(struct zonelist *zonelist,
                        int order, gfp_t gfp_mask, nodemask_t *nodemask,
@@ -102,6 +103,9 @@ static inline bool compaction_deferred(struct zone *zone, int order)
        return true;
 }
 
+static inline void compact_nodes(void)
+{
+}
 #endif /* CONFIG_COMPACTION */
 
 #if defined(CONFIG_COMPACTION) && defined(CONFIG_SYSFS) && defined(CONFIG_NUMA)
index 4641c51..e8cf649 100644 (file)
@@ -2494,6 +2494,7 @@ extern void generic_fillattr(struct inode *, struct kstat *);
 extern int vfs_getattr(struct path *, struct kstat *);
 void __inode_add_bytes(struct inode *inode, loff_t bytes);
 void inode_add_bytes(struct inode *inode, loff_t bytes);
+void __inode_sub_bytes(struct inode *inode, loff_t bytes);
 void inode_sub_bytes(struct inode *inode, loff_t bytes);
 loff_t inode_get_bytes(struct inode *inode);
 void inode_set_bytes(struct inode *inode, loff_t bytes);
index 03b5532..8fbe050 100644 (file)
 
 #define IST30XX_EVENT_MODE             (1)
 #if IST30XX_EVENT_MODE
-#define IST30XX_NOISE_MODE             (1)
 #define IST30XX_TRACKING_MODE          (1)
-#define IST30XX_ALGORITHM_MODE         (1)
 #else
-#define IST30XX_NOISE_MODE             (0) /* fixed */
 #define IST30XX_TRACKING_MODE          (0) /* fixed */
-#define IST30XX_ALGORITHM_MODE         (0) /* fixed */
 #endif
 
 #define IST30XX_TA_RESET               (1)
@@ -178,7 +174,7 @@ enum ist30xx_reliability_commands {
 #define DEV_DEBUG                      (5)
 #define DEV_VERB                       (6)
 
-#define IST30XX_DEBUG_TAG              "[ TSP ]"
+#define IST30XX_DEBUG_TAG              "[TSP]"
 #define IST30XX_DEBUG_LEVEL            DEV_NOTI
 
 #define tsp_err(fmt, ...)              tsp_printk(DEV_ERR, fmt, ## __VA_ARGS__)
@@ -501,6 +497,8 @@ struct ist30xx_data {
        finger_info fingers[IST30XX_MAX_MT_FINGERS];
        u32 lx[IST30XX_MAX_MT_FINGERS];
        u32 ly[IST30XX_MAX_MT_FINGERS];
+       bool tsp_touched[IST30XX_MAX_MT_FINGERS];
+       u32 press_cnt[IST30XX_MAX_MT_FINGERS];
        volatile bool irq_working;
        u32 irq_enabled;
        bool initialized;
@@ -528,10 +526,9 @@ struct ist30xx_data {
        u16 max_y;
        bool track_enable;
        bool deep_sleep;
+       u16 press_finger_cnt;
        /* SEC defined ]*/
        struct delayed_work     work_reset_check;
-       struct delayed_work     work_noise_protect;
-       struct delayed_work     work_debug_algorithm;
 #if IST30XX_INTERNAL_BIN
 #if IST30XX_UPDATE_BY_WORKQUEUE
        struct delayed_work     work_fw_update;
index 459c41b..faa9278 100644 (file)
@@ -31,8 +31,8 @@ struct sec_input_bridge_platform_data {
 
        struct sec_input_bridge_mmap *mmap;
        unsigned int num_map;
-       unsigned int num_dev;
        char **support_dev_name;
+       unsigned int support_dev_num;
        void (*lcd_warning_func)(void);
 };
 
index 1592624..ccbb00a 100644 (file)
@@ -6,8 +6,13 @@
 
 
 /*** FUNCTION OPTION ***/
+#if defined(CONFIG_SLP_KERNEL_ENG)
 #define CPU_LOAD_HISTORY_NUM   2000
 #define CPU_TASK_HISTORY_NUM   30000
+#else
+#define CPU_LOAD_HISTORY_NUM   300
+#define CPU_TASK_HISTORY_NUM   30
+#endif
 
 
 #define CONFIG_SLP_CHECK_BUS_LOAD      1
 
 /*******************************************************/
 #define CONFIG_CHECK_WORK_HISTORY      1
+#if defined(CONFIG_SLP_KERNEL_ENG)
 #define CPU_WORK_HISTORY_NUM   1000
+#else
+#define CPU_WORK_HISTORY_NUM   30
+#endif
 /********************************************************/
 
-
+#if defined(CONFIG_SLP_KERNEL_ENG)
 #define CONFIG_SLP_CURRENT_MONITOR     1
+#endif
 #define CONFIG_SLP_CHECK_PHY_ADDR      1
 //#define CONFIG_CHECK_NOT_CPUIDLE_CAUSE       1
 //#define CONFIG_CHECK_ENTER_AFTR              1
@@ -323,7 +333,11 @@ bool cpu_work_history_onoff;
 
 /******** +CONFIG_SLP_INPUT_REC+  ********/
 #if defined (CONFIG_SLP_INPUT_REC)
+#if defined(CONFIG_SLP_KERNEL_ENG)
 #define INPUT_REC_HISTORY_NUM  20000
+#else
+#define INPUT_REC_HISTORY_NUM  20
+#endif
 #define MAX_INPUT_DEVICES      256
 
 struct input_rec_history_tag {
index b889221..20c753d 100644 (file)
 extern int unregister_muic_notifier(struct notifier_block *nb);
 extern int register_muic_notifier(struct notifier_block *nb);
 
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+#define MUIC_PS_DETACH_NOTI            0x0006
+#define MUIC_PS_ATTACH_NOTI            0x0005
+#endif
 #define MUIC_OTG_DETACH_NOTI           0x0004
 #define MUIC_OTG_ATTACH_NOTI           0x0003
 #define MUIC_VBUS_NOTI                         0x0002
index 30611d7..691673a 100644 (file)
@@ -50,6 +50,7 @@ enum {
     MUIC_SM5504_CABLE_TYPE_INVALID, // Un-initialized
 
     MUIC_SM5504_CABLE_TYPE_OTG_WITH_VBUS,
+    MUIC_SM5504_CABLE_TYPE_SAMSUNG_PS,
 };
 
 typedef enum {
@@ -71,7 +72,9 @@ struct sm5504_platform_data {
     void (*uart_callback)(uint8_t attached);
     void (*otg_callback)(uint8_t attached);
     void (*jig_callback)(jig_type_t type, uint8_t attached);
-
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+    void (*ps_cable_callback)(uint8_t attached);
+#endif
 };
 
 bool sm5504_get_otg_status(void);
index 1c50093..6965fe3 100644 (file)
@@ -41,6 +41,7 @@ void __quota_error(struct super_block *sb, const char *func,
 void inode_add_rsv_space(struct inode *inode, qsize_t number);
 void inode_claim_rsv_space(struct inode *inode, qsize_t number);
 void inode_sub_rsv_space(struct inode *inode, qsize_t number);
+void inode_reclaim_rsv_space(struct inode *inode, qsize_t number);
 
 void dquot_initialize(struct inode *inode);
 void dquot_drop(struct inode *inode);
@@ -59,6 +60,7 @@ int dquot_alloc_inode(const struct inode *inode);
 
 int dquot_claim_space_nodirty(struct inode *inode, qsize_t number);
 void dquot_free_inode(const struct inode *inode);
+void dquot_reclaim_space_nodirty(struct inode *inode, qsize_t number);
 
 int dquot_disable(struct super_block *sb, int type, unsigned int flags);
 /* Suspend quotas on remount RO */
@@ -238,6 +240,13 @@ static inline int dquot_claim_space_nodirty(struct inode *inode, qsize_t number)
        return 0;
 }
 
+static inline int dquot_reclaim_space_nodirty(struct inode *inode,
+                                             qsize_t number)
+{
+       inode_sub_bytes(inode, number);
+       return 0;
+}
+
 static inline int dquot_disable(struct super_block *sb, int type,
                unsigned int flags)
 {
@@ -336,6 +345,12 @@ static inline int dquot_claim_block(struct inode *inode, qsize_t nr)
        return ret;
 }
 
+static inline void dquot_reclaim_block(struct inode *inode, qsize_t nr)
+{
+       dquot_reclaim_space_nodirty(inode, nr << inode->i_blkbits);
+       mark_inode_dirty_sync(inode);
+}
+
 static inline void dquot_free_space_nodirty(struct inode *inode, qsize_t nr)
 {
        __dquot_free_space(inode, nr, 0);
index 971efd2..6f09a99 100644 (file)
@@ -5,6 +5,7 @@
 #include <linux/threads.h>
 #include <linux/jiffies.h>
 
+#if defined(CONFIG_SPRD_DEBUG)
 struct sprd_debug_regs_access{
        unsigned long vaddr;
        unsigned long stack;
@@ -123,3 +124,67 @@ struct sprd_debug_regs_access{
 
 #endif
 #endif
+
+#ifdef CONFIG_SEC_DEBUG_REG_ACCESS
+struct sec_debug_regs_access {
+       u32 vaddr;
+       u32 value;
+       u32 stack;
+       u32 pc;
+       unsigned long time;
+       unsigned int status;
+};
+
+#define sec_debug_regs_read_start(a)   ({u32 cpu_id, stack, lr;        \
+               if (sec_debug_last_regs_access) {                       \
+               asm volatile(                                           \
+                       "       mrc     p15, 0, %0, c0, c0, 5\n"        \
+                       "       ands %0, %0, #0xf\n"                    \
+                       "       mov %2, r13\n"                          \
+                       "       mov %1, lr\n"                           \
+                       : "=&r" (cpu_id), "=&r" (lr), "=&r" (stack)     \
+                       :                                               \
+                       : "memory");                                    \
+                       \
+               sec_debug_last_regs_access[cpu_id].value = 0;           \
+               sec_debug_last_regs_access[cpu_id].vaddr = (u32)a;      \
+               sec_debug_last_regs_access[cpu_id].stack = stack;       \
+               sec_debug_last_regs_access[cpu_id].pc = lr;             \
+               sec_debug_last_regs_access[cpu_id].time = jiffies;     \
+               sec_debug_last_regs_access[cpu_id].status = 1;  \
+               }})
+
+#define sec_debug_regs_write_start(v, a)       ({u32 cpu_id, stack, lr;        \
+               if (sec_debug_last_regs_access) {                       \
+               asm volatile(                                           \
+                       "       mrc     p15, 0, %0, c0, c0, 5\n"        \
+                       "       ands %0, %0, #0xf\n"                    \
+                       "       mov %2, r13\n"                          \
+                       "       mov %1, lr\n"                           \
+                       : "=&r" (cpu_id), "=&r" (lr), "=&r" (stack)     \
+                       :                                               \
+                       : "memory");                                    \
+                       \
+               sec_debug_last_regs_access[cpu_id].value = (u32)(v);    \
+               sec_debug_last_regs_access[cpu_id].vaddr = (u32)(a);    \
+               sec_debug_last_regs_access[cpu_id].stack = stack;       \
+               sec_debug_last_regs_access[cpu_id].pc = lr;             \
+               sec_debug_last_regs_access[cpu_id].time = jiffies;     \
+               sec_debug_last_regs_access[cpu_id].status = 2;  \
+               }})
+
+#define sec_debug_regs_access_done()   ({u32 cpu_id, lr;               \
+               if (sec_debug_last_regs_access) {                       \
+               asm volatile(                                           \
+                       "       mrc     p15, 0, %0, c0, c0, 5\n"        \
+                       "       ands %0, %0, #0xf\n"                    \
+                       "       mov %1, lr\n"                           \
+                       : "=&r" (cpu_id), "=&r" (lr)                    \
+                       :                                               \
+                       : "memory");                                    \
+                       \
+               sec_debug_last_regs_access[cpu_id].time = jiffies;     \
+               sec_debug_last_regs_access[cpu_id].status = 0;  \
+               }})
+#endif
+#endif
index 04d610b..01b4747 100644 (file)
@@ -57,5 +57,8 @@ struct sec_switch_data {
        void (*otg_cb)  (u8 attached);
        void (*cable_chg_cb) (int cable_type);
        void (*set_jig_state_cb) (u8 jig_attached);
+#ifdef CONFIG_MUIC_SUPPORT_PS_CABLE
+       void (*ps_cable_cb) (u8 attached);
+#endif
 };
 #endif /* __LINUX_SWITCH_H__ */
index 9afbfde..bf78577 100644 (file)
@@ -122,6 +122,16 @@ struct bt_voice {
 #define BT_SNDMTU              12
 #define BT_RCVMTU              13
 
+#ifdef CONFIG_TIZEN_WIP
+#define BT_LE_CONN_PARAM       14
+struct le_conn_param {
+       __u16 min;
+       __u16 max;
+       __u16 latency;
+       __u16 to_multiplier;
+};
+#endif
+
 __printf(1, 2)
 void bt_info(const char *fmt, ...);
 __printf(1, 2)
index 18ce5e4..c51e544 100644 (file)
@@ -246,7 +246,11 @@ enum {
 #define HCI_CMD_TIMEOUT                msecs_to_jiffies(2000)  /* 2 seconds */
 #endif
 #define HCI_ACL_TX_TIMEOUT     msecs_to_jiffies(45000) /* 45 seconds */
+#ifdef CONFIG_TIZEN_WIP
+#define HCI_AUTO_OFF_TIMEOUT   msecs_to_jiffies(5000)  /* 5 seconds */
+#else
 #define HCI_AUTO_OFF_TIMEOUT   msecs_to_jiffies(2000)  /* 2 seconds */
+#endif
 #define HCI_POWER_OFF_TIMEOUT  msecs_to_jiffies(5000)  /* 5 seconds */
 #define HCI_LE_CONN_TIMEOUT    msecs_to_jiffies(20000) /* 20 seconds */
 #define HCI_LE_AUTOCONN_TIMEOUT        msecs_to_jiffies(2000)  /* 2 seconds */
index e0750d8..d032509 100644 (file)
@@ -970,4 +970,8 @@ void l2cap_conn_put(struct l2cap_conn *conn);
 int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user);
 void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user);
 
+#ifdef CONFIG_TIZEN_WIP
+int l2cap_update_connection_param(struct l2cap_conn *conn, u16 min, u16 max,
+                                 u16 latency, u16 to_multiplier);
+#endif
 #endif /* __L2CAP_H */
index c0aad07..d512f27 100644 (file)
@@ -67,6 +67,7 @@
 #include <linux/atomic.h>
 #include <net/dst.h>
 #include <net/checksum.h>
+#include <net/tcp_states.h>
 
 struct cgroup;
 struct cgroup_subsys;
@@ -2243,6 +2244,14 @@ static inline struct sock *skb_steal_sock(struct sk_buff *skb)
        return NULL;
 }
 
+/* This helper checks if a socket is a full socket,
+ * ie _not_ a timewait or request socket.
+ */
+static inline bool sk_fullsock(const struct sock *sk)
+{
+       return (1 << sk->sk_state) & ~(TCPF_TIME_WAIT | TCPF_NEW_SYN_RECV);
+}
+
 extern void sock_enable_timestamp(struct sock *sk, int flag);
 extern int sock_get_timestamp(struct sock *, struct timeval __user *);
 extern int sock_get_timestampns(struct sock *, struct timespec __user *);
index b0b6459..50e78a7 100644 (file)
@@ -25,6 +25,7 @@ enum {
        TCP_LAST_ACK,
        TCP_LISTEN,
        TCP_CLOSING,    /* Now a valid state */
+       TCP_NEW_SYN_RECV,
 
        TCP_MAX_STATES  /* Leave at the end! */
 };
@@ -44,7 +45,8 @@ enum {
        TCPF_CLOSE_WAIT  = (1 << 8),
        TCPF_LAST_ACK    = (1 << 9),
        TCPF_LISTEN      = (1 << 10),
-       TCPF_CLOSING     = (1 << 11) 
+       TCPF_CLOSING     = (1 << 11),
+       TCPF_NEW_SYN_RECV = (1 << 12),
 };
 
 #endif /* _LINUX_TCP_STATES_H */
index 649daed..b205f6a 100644 (file)
@@ -122,7 +122,7 @@ static int arch_hwlock_fast_trylock(unsigned int lock_id)
                }
        }
 
-       printk(KERN_ERR "Hwspinlock [%d] lock failed!\n",lock_id);
+       pr_debug("Hwspinlock [%d] lock failed!\n",lock_id);
        return 0;
 
 __locked:
old mode 100755 (executable)
new mode 100644 (file)
index ed363f1..b42946b
@@ -84,6 +84,8 @@ extern void sec_gaf_supply_rqinfo(unsigned short curr_offset,
 extern void sec_debug_save_pte(void *pte, int task_addr);
 
 int sec_debug_dump_stack(void);
+
+extern int get_sec_debug_level(void);
 #else
 static inline int sec_debug_init(void)
 {
@@ -128,6 +130,9 @@ void sec_debug_save_pte(void *pte, unsigned int faulttype);
 {
 }
 
+static inline int get_sec_debug_level(void)
+{
+}
 #endif
 
 struct worker;
index ac7203b..49861a5 100644 (file)
@@ -1,4 +1,5 @@
 # UAPI Header export list
 header-y += edid.h
 header-y += sisfb.h
+header-y += sprdfb.h
 header-y += uvesafb.h
similarity index 67%
rename from include/video/sprd_fb.h
rename to include/uapi/video/sprdfb.h
index 267398e..5b493e3 100644 (file)
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  */
-#ifndef _SPRD_FB_H_
-#define _SPRD_FB_H_
+#ifndef _UAPI_SPRD_FB_H_
+#define _UAPI_SPRD_FB_H_
 
-#define SPRD_LAYERS_IMG (0x1)   /*support YUV & RGB*/
-#define SPRD_LAYERS_OSD (0x2)   /*support RGB only*/
+#define SPRD_LAYER_IMG (0x1)   /*support YUV & RGB*/
+#define SPRD_LAYER_OSD (0x2)   /*support RGB only*/
+#define SPRD_LAYER_BOTH (0x03) /*support RGB only*/
 
 enum {
        SPRD_DATA_FORMAT_YUV422 = 0,
@@ -51,29 +52,51 @@ enum{
        SPRD_FB_POWER_LIMIT
 };
 
-typedef struct overlay_setting_rect {
-       uint16_t x; //start point - x
-       uint16_t y; //start point - y
-       uint16_t w; //width
-       uint16_t h; //height
-}overlay_setting_rect;
+typedef struct overlay_size {
+       uint16_t hsize;
+       uint16_t vsize;
+} overlay_size;
 
-typedef struct overlay_setting {
+typedef struct overlay_rect {
+       uint16_t x;
+       uint16_t y;
+       uint16_t w;
+       uint16_t h;
+} overlay_rect;
+
+typedef struct overlay_endian {
+       uint16_t y;
+       uint16_t u;
+       uint16_t v;
+} overlay_endian;
+
+typedef struct overlay_info {
        int layer_index;
        int data_type;
-       int y_endian;
-       int uv_endian;
+       overlay_size size;
+       overlay_rect rect;
+       overlay_endian endian;
        bool rb_switch;
-       overlay_setting_rect rect;
-       int v_endian;
-} overlay_setting;
+} overlay_info;
 
-typedef struct overlay_display_setting {
+#if defined (CONFIG_SPRDFB_USE_GEM_INDEX)
+typedef struct overlay_handle {
+       int handle;
+       int index;
+} overlay_handle;
+#endif
+
+typedef struct overlay_display {
        int layer_index;
+#ifdef CONFIG_SPRDFB_USE_GEM_INDEX
+       struct overlay_handle osd_handle;
+       struct overlay_handle img_handle;
+#else
        int osd_handle;
        int img_handle;
+#endif
        int display_mode;
-} overlay_display_setting;
+} overlay_display;
 
 /*
 int sprdfb_IOinit(void);
index 498d366..0a33d4b 100644 (file)
@@ -2,7 +2,6 @@ header-y += ion_sprd.h
 header-y += sprd_vsp.h
 header-y += sprd_jpg.h
 header-y += gsp_types_shark.h
-header-y += sprd_fb.h
 header-y += sprd_img.h
 header-y += sprd_isp.h
 header-y += sprd_jpg.h
index 6be2879..6466516 100644 (file)
@@ -186,7 +186,7 @@ int __init rd_load_image(char *from)
        char *buf = NULL;
        unsigned short rotate = 0;
        decompress_fn decompressor = NULL;
-#if !defined(CONFIG_S390)
+#if !defined(CONFIG_MACH_Z3) || !defined(CONFIG_S390)
        char rotator[4] = { '|' , '/' , '-' , '\\' };
 #endif
 
@@ -272,7 +272,7 @@ int __init rd_load_image(char *from)
                }
                sys_read(in_fd, buf, BLOCK_SIZE);
                sys_write(out_fd, buf, BLOCK_SIZE);
-#if !defined(CONFIG_S390)
+#if !defined(CONFIG_MACH_Z3) || !defined(CONFIG_S390)
                if (!(i % 16)) {
                        printk("%c\b", rotator[rotate & 0x3]);
                        rotate++;
index 3127ad5..a2eff34 100644 (file)
@@ -608,7 +608,7 @@ static const struct file_operations kallsyms_operations = {
 
 static int __init kallsyms_init(void)
 {
-       proc_create("kallsyms", 0444, NULL, &kallsyms_operations);
+       proc_create("kallsyms", 0400, NULL, &kallsyms_operations);
        return 0;
 }
 device_initcall(kallsyms_init);
index c5a1e25..6910dbd 100644 (file)
@@ -47,9 +47,6 @@
 #define swap_hlist_for_each_entry(tpos, pos, head, member) \
        hlist_for_each_entry(tpos, head, member)
 
-#define list_first_entry_or_null(ptr, type, member) \
-       (!list_empty(ptr) ? list_first_entry(ptr, type, member) : NULL)
-
 
 
 /*
index d4e93ed..a1d4265 100644 (file)
@@ -422,9 +422,7 @@ static bool __is_proc_mmap_mappable(struct task_struct *task)
        struct sspt_proc *proc;
        unsigned long r_debug_addr;
        unsigned int state;
-       const unsigned int r_state_offset = sizeof(int) +
-                                           sizeof(void *) +
-                                           sizeof(long);
+       enum { r_state_offset = sizeof(int) + sizeof(void *) + sizeof(long) };
 
        if (linker_vma == NULL)
                return false;
@@ -838,6 +836,7 @@ static int write_msg_handler(struct kprobe *p, struct pt_regs *regs)
        unsigned long caller_offset;
        unsigned long call_type_offset;
        unsigned long caller_addr;
+       bool drop;
        int ret;
 
        /* FIXME: swap_get_uarg uses get_user(), it might sleep */
@@ -853,8 +852,8 @@ static int write_msg_handler(struct kprobe *p, struct pt_regs *regs)
                return 0;
        }
 
-       ret = preload_threads_get_drop(current);
-       if (ret > 0)
+       ret = preload_threads_get_drop(current, &drop);
+       if (ret == 0 && drop)
                return 0;
 
        buf = kmalloc(len, GFP_ATOMIC);
index c700b96..b8c2b77 100644 (file)
@@ -257,14 +257,14 @@ get_call_type_done:
        return ret;
 }
 
-int preload_threads_get_drop(struct task_struct *task)
+int preload_threads_get_drop(struct task_struct *task, bool *drop)
 {
        struct thread_slot *slot;
        int ret = 0;
 
        slot = __get_task_slot(task);
        if (slot != NULL) {
-               ret = (int) slot->drop;
+               *drop = slot->drop;
                goto get_drop_done;
        }
 
index a82c0e6..9020fb8 100644 (file)
@@ -13,7 +13,7 @@ int preload_threads_set_data(struct task_struct *task, unsigned long caller,
 int preload_threads_get_caller(struct task_struct *task, unsigned long *caller);
 int preload_threads_get_call_type(struct task_struct *task,
                                  unsigned char *call_type);
-int preload_threads_get_drop(struct task_struct *task);
+int preload_threads_get_drop(struct task_struct *task, bool *drop);
 bool preload_threads_check_disabled_probe(struct task_struct *task,
                                          unsigned long addr);
 void preload_threads_enable_probe(struct task_struct *task, unsigned long addr);
index 4d8f0ab..3cfca07 100644 (file)
@@ -83,17 +83,11 @@ void swap_task_data_set(struct task_struct *task, void *data,
 }
 EXPORT_SYMBOL_GPL(swap_task_data_set);
 
-
-static atomic_t start_flag = ATOMIC_INIT(0);
-
 static int copy_process_ret_handler(struct kretprobe_instance *ri,
                                    struct pt_regs *regs)
 {
        struct task_struct *task;
 
-       if (atomic_read(&start_flag) == 0)
-               return 0;
-
        task = (struct task_struct *)regs_return_value(regs);
        if (!IS_ERR(task))
                swap_task_data_clean(task);
@@ -103,12 +97,8 @@ static int copy_process_ret_handler(struct kretprobe_instance *ri,
 
 static int do_exit_handler(struct kprobe *p, struct pt_regs *regs)
 {
-       struct task_data *td;
+       struct task_data *td = __td(current);
 
-       if (atomic_read(&start_flag) == 0)
-               return 0;
-
-       td = __td(current);
        __td_free(td);
 
        return 0;
@@ -122,18 +112,59 @@ static struct kprobe do_exit_probe = {
        .pre_handler = do_exit_handler
 };
 
+static int __set_helper_probes(void)
+{
+       unsigned long addr;
+       int ret;
+
+       addr = swap_ksyms_substr("copy_process");
+       if (addr == 0) {
+               printk(TD_PREFIX "Cannot find address for copy_process\n");
+               return -EINVAL;
+       }
+       copy_process_rp.kp.addr = (kprobe_opcode_t *)addr;
+       ret = swap_register_kretprobe(&copy_process_rp);
+       if (ret)
+               goto reg_failed;
+
+       addr = swap_ksyms_substr("do_exit");
+       if (addr == 0) {
+               printk(TD_PREFIX "Cannot find address for do_exit\n");
+               return -EINVAL;
+       }
+       do_exit_probe.addr = (kprobe_opcode_t *)addr;
+       ret = swap_register_kprobe(&do_exit_probe);
+       if (ret)
+               goto unreg_copy_process;
+
+       return 0;
+
+unreg_copy_process:
+       swap_unregister_kretprobe(&copy_process_rp);
+
+reg_failed:
+       printk(TD_PREFIX "0x%lx: probe registration failed\n", addr);
+
+       return ret;
+}
+
+static void __remove_helper_probes(void)
+{
+       swap_unregister_kretprobe(&copy_process_rp);
+       swap_unregister_kprobe(&do_exit_probe);
+}
+
 static int __task_data_init(void *data)
 {
        struct task_struct *g, *t;
 
-       /* set start_flags */
-       atomic_set(&start_flag, 1);
-
        do_each_thread(g, t) {
                swap_task_data_clean(t);
        } while_each_thread(g, t);
 
        return 0;
+
+
 }
 
 static int __task_data_exit(void *data)
@@ -146,9 +177,6 @@ static int __task_data_exit(void *data)
                __td_free(td);
        } while_each_thread(g, t);
 
-       /* reset start_flags */
-       atomic_set(&start_flag, 0);
-
        return 0;
 }
 
@@ -156,18 +184,9 @@ static void task_data_start(void)
 {
        int ret;
 
-       ret = swap_register_kprobe(&do_exit_probe);
-       if (ret) {
-               pr_err(TD_PREFIX "register on 'do_exit' failed: ret=%d\n", ret);
-               return;
-       }
-
-       ret = swap_register_kretprobe(&copy_process_rp);
-       if (ret) {
-               swap_unregister_kprobe(&do_exit_probe);
-               pr_err(TD_PREFIX "register on 'copy_process' failed: ret=%d\n", ret);
+       ret = __set_helper_probes();
+       if (ret)
                return;
-       }
 
        /* stop_machine: cannot get tasklist_lock from module */
        ret = stop_machine(__task_data_init, NULL, NULL);
@@ -179,6 +198,8 @@ static void task_data_stop(void)
 {
        int ret;
 
+       __remove_helper_probes();
+
        /* stop_machine: the same here */
        ret = stop_machine(__task_data_exit, NULL, NULL);
        if (ret) {
@@ -187,30 +208,6 @@ static void task_data_stop(void)
                 * all the installed probes */
                swap_unregister_kprobe(&do_exit_probe);
        }
-
-       swap_unregister_kretprobe(&copy_process_rp);
-       swap_unregister_kprobe(&do_exit_probe);
-}
-
-static int task_data_once(void)
-{
-       const char *sym;
-
-       sym = "copy_process";
-       copy_process_rp.kp.addr = (kprobe_opcode_t *)swap_ksyms_substr(sym);
-       if (copy_process_rp.kp.addr == NULL)
-               goto not_found;
-
-       sym = "do_exit";
-       do_exit_probe.addr = (kprobe_opcode_t *)swap_ksyms_substr(sym);
-       if (do_exit_probe.addr == NULL)
-               goto not_found;
-
-       return 0;
-
-not_found:
-       pr_err(TD_PREFIX "ERROR: symbol %s(...) not found\n", sym);
-       return -ESRCH;
 }
 
 static int task_data_init(void)
@@ -218,6 +215,7 @@ static int task_data_init(void)
        int ret = 0;
 
        __task_data_cbs_start_h = us_manager_reg_cb(START_CB, task_data_start);
+
        if (__task_data_cbs_start_h < 0) {
                ret = __task_data_cbs_start_h;
                printk(KERN_ERR TD_PREFIX "start_cb registration failed\n");
@@ -225,6 +223,7 @@ static int task_data_init(void)
        }
 
        __task_data_cbs_stop_h = us_manager_reg_cb(STOP_CB_TD, task_data_stop);
+
        if (__task_data_cbs_stop_h < 0) {
                ret = __task_data_cbs_stop_h;
                us_manager_unreg_cb(__task_data_cbs_start_h);
@@ -241,8 +240,8 @@ static void task_data_exit(void)
        us_manager_unreg_cb(__task_data_cbs_stop_h);
 }
 
-SWAP_LIGHT_INIT_MODULE(task_data_once, task_data_init, task_data_exit,
-                      NULL, NULL);
+SWAP_LIGHT_INIT_MODULE(NULL, task_data_init, task_data_exit, NULL, NULL);
+
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SWAP Task Data Module");
index 52a5684..51b4566 100644 (file)
@@ -457,12 +457,13 @@ static int mr_pre_handler(struct kprobe *p, struct pt_regs *regs)
        ret = set_kjump_cb(regs, mr_cb, (void *)&task, sizeof(task));
        if (ret < 0) {
                printk("##### ERROR: mr_pre_handler, ret=%d\n", ret);
+               ret = 0;
        } else {
                atomic_inc(&mm_release_cnt);
        }
 
 out:
-       return 0;
+       return ret;
 }
 
 static struct kprobe mr_kprobe = {
index 099e270..187ce1c 100644 (file)
@@ -47,7 +47,7 @@ static int __do_usm_stop(void *data)
        return 0;
 }
 
-static void do_usm_stop(void)
+static int do_usm_stop(void)
 {
        int ret;
 
@@ -62,6 +62,8 @@ static void do_usm_stop(void)
        unregister_helper_bottom();
        sspt_proc_free_all();
        exec_cbs(STOP_CB_TD);
+
+       return ret;
 }
 
 static int do_usm_start(void)
index 624876e..5420389 100644 (file)
@@ -7,6 +7,10 @@
 #include <linux/seq_file.h>
 #include <linux/spinlock.h>
 
+#ifdef CONFIG_SLEEP_MONITOR
+#include <linux/power/sleep_monitor.h>
+#endif
+
 #ifdef CONFIG_SLP_KERNEL_ENG
        #define TIME_LOG_MAX    (1000)
        #define ALARM_LOG_MAX   (3000)
@@ -85,6 +89,152 @@ static struct time_history th_ctxt = {
        .nitz_update = -1,
 };
 
+static DEFINE_SEQLOCK(th_seq_lock);
+
+static struct timespec th_old_system;
+static struct rtc_time th_old_tm;
+
+#ifdef CONFIG_RTC_CLASS
+static struct rtc_device *th_rtcdev;
+static DEFINE_SPINLOCK(th_rtcdev_lock);
+
+struct rtc_device *timeh_get_rtcdev(void)
+{
+       unsigned long flags;
+       struct rtc_device *ret;
+
+       spin_lock_irqsave(&th_rtcdev_lock, flags);
+       ret = th_rtcdev;
+       spin_unlock_irqrestore(&th_rtcdev_lock, flags);
+
+       return ret;
+}
+
+static int timeh_rtc_add_device(struct device *dev,
+                               struct class_interface *class_intf)
+{
+       unsigned long flags;
+       struct rtc_device *rtc = to_rtc_device(dev);
+
+       if (th_rtcdev)
+               return -EBUSY;
+
+       if (!rtc->ops->read_time)
+               return -1;
+
+       if (strcmp(dev_name(dev),
+                       CONFIG_RTC_HCTOSYS_DEVICE) != 0) {
+               pr_err("Miss-matched rtc(%s) for timeh\n", dev_name(dev));
+               return -1;
+       }
+
+       spin_lock_irqsave(&th_rtcdev_lock, flags);
+       if (!th_rtcdev) {
+               th_rtcdev = rtc;
+               /* hold a reference so it doesn't go away */
+               get_device(dev);
+       }
+       spin_unlock_irqrestore(&th_rtcdev_lock, flags);
+       return 0;
+}
+
+static struct class_interface timeh_rtc_interface = {
+       .add_dev = &timeh_rtc_add_device,
+};
+
+static int timeh_rtc_interface_setup(void)
+{
+       timeh_rtc_interface.class = rtc_class;
+       return class_interface_register(&timeh_rtc_interface);
+}
+
+#else
+#define th_rtcdev (NULL)
+
+struct rtc_device *timeh_get_rtcdev(void)
+{
+       return NULL;
+}
+
+static inline int timeh_rtc_interface_setup(void) { return 0; }
+#endif
+
+#ifdef CONFIG_SLEEP_MONITOR
+static int timeh_get_sys_time_cb(void *priv,
+               unsigned int *raw_val, int chk_lv, int caller_type)
+{
+       struct timespec ts;
+
+       ts = current_kernel_time();
+       *raw_val = ts.tv_sec;
+
+       return 0;
+}
+
+static struct sleep_monitor_ops timeh_sys_time_ops = {
+        .read_cb_func = timeh_get_sys_time_cb,
+};
+
+static int timeh_get_rtc_time_cb(void *priv,
+               unsigned int *raw_val, int chk_lv, int caller_type)
+{
+       struct rtc_time tm;
+       struct rtc_device *rtc_dev;
+       struct timespec ts, curr_syst, delta_syst;
+       int err = 0;
+       unsigned int seq;
+
+       rtc_dev = timeh_get_rtcdev();
+       if (!rtc_dev)
+               return -ENODEV;
+
+       if (chk_lv == SLEEP_MONITOR_CHECK_SOFT) {
+               do {
+                       seq = read_seqbegin(&th_seq_lock);
+                       curr_syst = current_kernel_time();
+                       delta_syst.tv_sec = curr_syst.tv_sec - th_old_system.tv_sec;
+                       if (delta_syst.tv_sec < 0) {
+                               pr_warn("%s:system time back-travel\n", __func__);
+                               return -EINVAL;
+                       }
+                       rtc_tm_to_time(&th_old_tm, &ts.tv_sec);
+                       ts.tv_sec += delta_syst.tv_sec;
+               } while (read_seqretry(&th_seq_lock, seq));
+       } else {
+               err = rtc_read_time(rtc_dev, &tm);
+               if (err)
+                       return err;
+               rtc_tm_to_time(&tm, &ts.tv_sec);
+       }
+
+       *raw_val = ts.tv_sec;
+       return 0;
+}
+
+static struct sleep_monitor_ops timeh_rtc_time_ops = {
+        .read_cb_func = timeh_get_rtc_time_cb,
+};
+
+static void timeh_sleep_monitor_cb_setup(void)
+{
+       int err;
+
+       err = sleep_monitor_register_ops(NULL,
+                       &timeh_sys_time_ops, SLEEP_MONITOR_SYS_TIME);
+       if (err)
+               pr_err("%s:failed SYSTIME sm_cb(%d)\n",
+                               __func__, err);
+
+       err = sleep_monitor_register_ops(NULL,
+                       &timeh_rtc_time_ops, SLEEP_MONITOR_RTC_TIME);
+       if (err)
+               pr_err("%s:failed RTCTIME sm_cb(%d)\n",
+                               __func__, err);
+}
+#else
+static inline void timeh_sleep_monitor_cb_setup(void) { }
+#endif
+
 static bool is_realtime(struct timespec *time)
 {
        const struct timespec realtime = {
@@ -839,11 +989,16 @@ static int __init time_history_init(void)
                return -ENOMEM;
        }
 
+       if (timeh_rtc_interface_setup())
+               pr_err("Failed to setup rtc intf for timeh\n");
+
        spin_lock_init(&th_ctxt.lock);
 
        time_log.buf[0].history_idx  = ULLONG_MAX;
        alarm_log.buf[0].history_idx = ULLONG_MAX;
 
+       timeh_sleep_monitor_cb_setup();
+
        return 0;
 }
-arch_initcall(time_history_init);
+fs_initcall(time_history_init);
index 620fae4..3e3ce36 100644 (file)
@@ -982,7 +982,7 @@ char *netdev_feature_string(char *buf, char *end, const u8 *addr,
        return number(buf, end, *(const netdev_features_t *)addr, spec);
 }
 
-int kptr_restrict __read_mostly;
+int kptr_restrict __read_mostly = 2;
 
 /*
  * Show a '%p' thing.  A kernel extension is that the '%p' is followed
index eeaaa92..dbdc782 100644 (file)
@@ -1168,13 +1168,18 @@ static void compact_node(int nid)
 }
 
 /* Compact all nodes in the system */
-static void compact_nodes(void)
+void compact_nodes(void)
 {
        int nid;
 
        /* Flush pending updates to the LRU lists */
        lru_add_drain_all();
 
+       /* Increment compact_stall when compaction is invoked from vm interface,
+        * i.e. /proc/sys/vm/compact_memory
+        */
+       count_compact_event(COMPACTSTALL);
+
        for_each_online_node(nid)
                compact_node(nid);
 }
index 0385ee3..4fda943 100644 (file)
 #include <net/ip.h>
 #include <net/tcp_memcontrol.h>
 
+#ifdef CONFIG_SHRINK_MEMORY
+#ifdef CONFIG_COMPACTION
+#include <linux/compaction.h>
+#endif
+#include <linux/vmstat.h>
+#define MIN_SHRINK_THRESHOLD 25000
+#endif
+
 #include <asm/uaccess.h>
 
 #include <trace/events/vmscan.h>
@@ -5029,6 +5037,29 @@ static int mem_cgroup_force_reclaim(struct cgroup *cont, struct cftype *cft, u64
                if (loop && (!total || total > nr_to_reclaim))
                        break;
        }
+
+       if (IS_ENABLED(CONFIG_SHRINK_MEMORY)) {
+               /* if reclaim failed from cgroup and if number of
+                * global reclaimable pages is less than 100MB, then
+                * do not call memory shrinker.
+                */
+               if ((total < nr_to_reclaim) &&
+                       (global_reclaimable_pages() > MIN_SHRINK_THRESHOLD)) {
+                       unsigned long nr_shrink;
+                       nr_shrink = shrink_all_memory(totalram_pages/2);
+                       pr_info("%s: Total pages shrinked: %lu\n",
+                                                __func__, nr_shrink);
+                       total += nr_shrink;
+               }
+       }
+
+       /* Calling compaction immediately after reclaim give good benefits.
+        * So, if either cgroup_reclaim or shrinker could make some progress,
+        * we trigger compaction.
+        */
+       if (IS_ENABLED(CONFIG_COMPACTION) && (total > 0))
+               compact_nodes();
+
        return total;
 }
 #endif
index 08009b2..fbb030d 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -346,6 +346,21 @@ static __always_inline void slab_unlock(struct page *page)
        __bit_spin_unlock(PG_locked, &page->flags);
 }
 
+static inline void set_page_slub_counters(struct page *page, unsigned long counters_new)
+{
+       struct page tmp;
+       tmp.counters = counters_new;
+       /*
+        * page->counters can cover frozen/inuse/objects as well
+        * as page->_count.  If we assign to ->counters directly
+        * we run the risk of losing updates to page->_count, so
+        * be careful and only assign to the fields we need.
+        */
+       page->frozen  = tmp.frozen;
+       page->inuse   = tmp.inuse;
+       page->objects = tmp.objects;
+}
+
 /* Interrupts must be disabled (for the fallback code to work right) */
 static inline bool __cmpxchg_double_slab(struct kmem_cache *s, struct page *page,
                void *freelist_old, unsigned long counters_old,
@@ -366,7 +381,7 @@ static inline bool __cmpxchg_double_slab(struct kmem_cache *s, struct page *page
                slab_lock(page);
                if (page->freelist == freelist_old && page->counters == counters_old) {
                        page->freelist = freelist_new;
-                       page->counters = counters_new;
+                       set_page_slub_counters(page, counters_new);
                        slab_unlock(page);
                        return 1;
                }
@@ -404,7 +419,7 @@ static inline bool cmpxchg_double_slab(struct kmem_cache *s, struct page *page,
                slab_lock(page);
                if (page->freelist == freelist_old && page->counters == counters_old) {
                        page->freelist = freelist_new;
-                       page->counters = counters_new;
+                       set_page_slub_counters(page, counters_new);
                        slab_unlock(page);
                        local_irq_restore(flags);
                        return 1;
index 0fffcb9..67614fb 100644 (file)
@@ -1524,7 +1524,12 @@ static void zs_object_copy(unsigned long src, unsigned long dst,
                if (written == class->size)
                        break;
 
-               if (s_off + size >= PAGE_SIZE) {
+               s_off += size;
+               s_size -= size;
+               d_off += size;
+               d_size -= size;
+
+               if (s_off >= PAGE_SIZE) {
                        kunmap_atomic(d_addr);
                        kunmap_atomic(s_addr);
                        s_page = get_next_page(s_page);
@@ -1533,21 +1538,15 @@ static void zs_object_copy(unsigned long src, unsigned long dst,
                        d_addr = kmap_atomic(d_page);
                        s_size = class->size - written;
                        s_off = 0;
-               } else {
-                       s_off += size;
-                       s_size -= size;
                }
 
-               if (d_off + size >= PAGE_SIZE) {
+               if (d_off >= PAGE_SIZE) {
                        kunmap_atomic(d_addr);
                        d_page = get_next_page(d_page);
                        BUG_ON(!d_page);
                        d_addr = kmap_atomic(d_page);
                        d_size = class->size - written;
                        d_off = 0;
-               } else {
-                       d_off += size;
-                       d_size -= size;
                }
        }
 
@@ -1765,8 +1764,6 @@ unsigned long zs_compact(struct zs_pool *pool)
                nr_migrated += __zs_compact(pool, class);
        }
 
-       synchronize_rcu();
-
        return nr_migrated;
 }
 EXPORT_SYMBOL_GPL(zs_compact);
index d97cccd..a6b0819 100644 (file)
@@ -3017,7 +3017,11 @@ struct hci_dev *hci_alloc_dev(void)
        hdev->le_conn_min_interval = 0x0028;
        hdev->le_conn_max_interval = 0x0038;
        hdev->le_conn_latency = 0x0000;
-       hdev->le_supv_timeout = 0x002a;
+#ifdef CONFIG_TIZEN_WIP
+       hdev->le_supv_timeout = 0x0258;         /* 6000 msec */
+#else
+       hdev->le_supv_timeout = 0x002a;         /* 420 msec */
+#endif
        hdev->le_def_tx_len = 0x001b;
        hdev->le_def_tx_time = 0x0148;
        hdev->le_max_tx_len = 0x001b;
index 363f768..b7d0fb9 100644 (file)
@@ -165,7 +165,7 @@ static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
                conn->link_policy = get_unaligned_le16(sent + 2);
 #ifdef CONFIG_TIZEN_WIP
        sco_conn = hci_conn_hash_lookup_sco(hdev);
-       if (sco_conn && bacmp(&sco_conn->dst, &conn->dst) == 0 &&
+       if (sco_conn && conn && bacmp(&sco_conn->dst, &conn->dst) == 0 &&
                        conn->link_policy & HCI_LP_SNIFF) {
                BT_ERR("SNIFF is not allowed during sco connection");
                cp.handle = __cpu_to_le16(conn->handle);
@@ -1570,7 +1570,14 @@ static void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
        BT_DBG("%s bdaddr %pMR hcon %p", hdev->name, &cp->bdaddr, conn);
 
        if (status) {
+#ifdef CONFIG_TIZEN_WIP
+               if (status == 0x0b)
+                       BT_ERR("ACL Connection Already Exists on cs_create_con");
+
+               if (conn && conn->state == BT_CONNECT && status != 0x0b) {
+#else
                if (conn && conn->state == BT_CONNECT) {
+#endif
                        if (status != 0x0c || conn->attempt > 2) {
                                conn->state = BT_CLOSED;
                                hci_proto_connect_cfm(conn, status);
@@ -2302,6 +2309,8 @@ static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
                if ((get_link_mode(conn)) & HCI_LM_MASTER)
                        hci_conn_change_supervision_timeout(conn,
                                                LINK_SUPERVISION_TIMEOUT);
+       } else if (ev->status == 0x0b) {
+               BT_ERR("ACL connection already exists, this evt is ignored");
 #endif
        } else {
                conn->state = BT_CLOSED;
@@ -2313,7 +2322,11 @@ static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
        if (conn->type == ACL_LINK)
                hci_sco_setup(conn, ev->status);
 
+#ifdef CONFIG_TIZEN_WIP
+       if (ev->status && ev->status != 0x0b) {
+#else
        if (ev->status) {
+#endif
                hci_proto_connect_cfm(conn, ev->status);
                hci_conn_del(conn);
        } else if (ev->link_type != ACL_LINK)
@@ -4711,6 +4724,10 @@ static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
         */
        irk = hci_get_irk(hdev, &conn->dst, conn->dst_type);
        if (irk) {
+#ifdef __TIZEN_PATCH__
+               /* Update rpa. So that, if irk is refreshed, it can be saved */
+               bacpy(&irk->rpa, &conn->dst);
+#endif
                bacpy(&conn->dst, &irk->bdaddr);
                conn->dst_type = irk->addr_type;
        }
index 47aa0fe..50ad6f4 100644 (file)
@@ -1500,6 +1500,7 @@ static void l2cap_le_conn_ready(struct l2cap_conn *conn)
        if (hcon->out)
                smp_conn_security(hcon, hcon->pending_sec_level);
 
+#ifndef CONFIG_TIZEN_WIP
        /* For LE slave connections, make sure the connection interval
         * is in the range of the minium and maximum interval that has
         * been configured for this connection. If not, then trigger
@@ -1518,6 +1519,35 @@ static void l2cap_le_conn_ready(struct l2cap_conn *conn)
                l2cap_send_cmd(conn, l2cap_get_ident(conn),
                               L2CAP_CONN_PARAM_UPDATE_REQ, sizeof(req), &req);
        }
+#else
+       /*
+        * Too small supervision timeout causes sudden link loss,
+        * when remote device has multiple links and it cannot manage those
+        * properly.
+        *
+        * To protect such a case, it needs to widen supervision timeout
+        */
+       if (hcon->role == HCI_ROLE_SLAVE &&
+           hcon->le_supv_timeout < hdev->le_supv_timeout) {
+               if (hdev->le_features[0] & HCI_LE_CONN_PARAM_REQ_PROC &&
+                   hcon->features[0][0] & HCI_LE_CONN_PARAM_REQ_PROC) {
+                       BT_DBG("use hci_le_conn_update");
+                       hci_le_conn_update(hcon,
+                                       hcon->le_conn_min_interval,
+                                       hcon->le_conn_max_interval,
+                                       hcon->le_conn_latency,
+                                       hdev->le_supv_timeout);
+               } else {
+                       BT_DBG("use l2cap conn_update");
+                       l2cap_update_connection_param(conn,
+                                       hcon->le_conn_min_interval,
+                                       hcon->le_conn_max_interval,
+                                       hcon->le_conn_latency,
+                                       hdev->le_supv_timeout);
+               }
+       }
+
+#endif
 }
 
 static void l2cap_conn_ready(struct l2cap_conn *conn)
@@ -5255,6 +5285,24 @@ static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn *conn,
        return 0;
 }
 
+#ifdef CONFIG_TIZEN_WIP
+int l2cap_update_connection_param(struct l2cap_conn *conn, u16 min, u16 max,
+                                 u16 latency, u16 to_multiplier)
+{
+       struct l2cap_conn_param_update_req req;
+
+       req.min = cpu_to_le16(min);
+       req.max = cpu_to_le16(max);
+       req.latency = cpu_to_le16(latency);
+       req.to_multiplier = cpu_to_le16(to_multiplier);
+
+       l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONN_PARAM_UPDATE_REQ,
+                      sizeof(req), &req);
+
+       return 0;
+}
+#endif
+
 static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
                                              struct l2cap_cmd_hdr *cmd,
                                              u16 cmd_len, u8 *data)
index a7b2019..b7e6f17 100644 (file)
@@ -948,6 +948,42 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
                chan->imtu = opt;
                break;
 
+#ifdef CONFIG_TIZEN_WIP
+       case BT_LE_CONN_PARAM: {
+               struct hci_dev *hdev;
+               struct le_conn_param param;
+               int err;
+
+               len = min_t(unsigned int, sizeof(param), optlen);
+               if (copy_from_user((char *) &param, optval, len)) {
+                       err = -EFAULT;
+                       break;
+               }
+
+               err = hci_check_conn_params(param.min, param.max,
+                               param.latency, param.to_multiplier);
+               if (err < 0)
+                       break;
+
+               conn = chan->conn;
+               hdev = conn->hcon->hdev;
+               if (conn->hcon->out ||
+                   (hdev->le_features[0] & HCI_LE_CONN_PARAM_REQ_PROC &&
+                    conn->hcon->features[0][0] & HCI_LE_CONN_PARAM_REQ_PROC)) {
+                       BT_DBG("use hci_le_conn_update");
+                       err = hci_le_conn_update(conn->hcon, param.min,
+                                                param.max, param.latency,
+                                                param.to_multiplier);
+                       break;
+               }
+
+               BT_DBG("use l2cap conn_update");
+               err = l2cap_update_connection_param(conn, param.min,
+                               param.max, param.latency, param.to_multiplier);
+               break;
+       }
+#endif
+
        default:
                err = -ENOPROTOOPT;
                break;
index 4545d58..fa22e9b 100644 (file)
@@ -1024,6 +1024,15 @@ static void create_eir(struct hci_dev *hdev, u8 *data)
        ptr = create_uuid16_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
        ptr = create_uuid32_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
        ptr = create_uuid128_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
+#ifdef CONFIG_TIZEN_WIP
+       if (hdev->manufacturer_len > 0 &&
+                       ptr - data + hdev->manufacturer_len + 2 <= HCI_MAX_EIR_LENGTH) {
+               ptr[0] = hdev->manufacturer_len + 1;
+               ptr[1] = EIR_MANUFACTURER_DATA;
+               memcpy(ptr + 2, hdev->manufacturer_data, hdev->manufacturer_len);
+               ptr += hdev->manufacturer_len + 2;
+       }
+#endif
 }
 
 static void update_eir(struct hci_request *req)
@@ -1095,6 +1104,7 @@ static void update_class(struct hci_request *req)
        hci_req_add(req, HCI_OP_WRITE_CLASS_OF_DEV, sizeof(cod), cod);
 }
 
+#ifndef CONFIG_TIZEN_WIP
 static bool get_connectable(struct hci_dev *hdev)
 {
        struct pending_cmd *cmd;
@@ -1110,6 +1120,7 @@ static bool get_connectable(struct hci_dev *hdev)
 
        return test_bit(HCI_CONNECTABLE, &hdev->dev_flags);
 }
+#endif
 
 static void disable_advertising(struct hci_request *req)
 {
@@ -1122,8 +1133,13 @@ static void enable_advertising(struct hci_request *req)
 {
        struct hci_dev *hdev = req->hdev;
        struct hci_cp_le_set_adv_param cp;
+#ifndef CONFIG_TIZEN_WIP
        u8 own_addr_type, enable = 0x01;
        bool connectable;
+#else
+       u8 own_addr_type = ADDR_LE_DEV_PUBLIC;
+       u8 enable = 0x01;
+#endif
 
        if (hci_conn_num(hdev, LE_LINK) > 0)
                return;
@@ -1138,6 +1154,7 @@ static void enable_advertising(struct hci_request *req)
         */
        clear_bit(HCI_LE_ADV, &hdev->dev_flags);
 
+#ifndef CONFIG_TIZEN_WIP
        connectable = get_connectable(hdev);
 
        /* Set require_privacy to true only when non-connectable
@@ -1146,16 +1163,14 @@ static void enable_advertising(struct hci_request *req)
         */
        if (hci_update_random_address(req, !connectable, &own_addr_type) < 0)
                return;
+#endif
 
        memset(&cp, 0, sizeof(cp));
        cp.min_interval = cpu_to_le16(hdev->le_adv_min_interval);
        cp.max_interval = cpu_to_le16(hdev->le_adv_max_interval);
 #ifdef CONFIG_TIZEN_WIP
        cp.filter_policy = hdev->adv_filter_policy;
-       if (hdev->adv_type != LE_ADV_SCAN_IND)
-               cp.type = connectable ? LE_ADV_IND : LE_ADV_NONCONN_IND;
-       else
-               cp.type = hdev->adv_type;
+       cp.type = hdev->adv_type;
 #else
        cp.type = connectable ? LE_ADV_IND : LE_ADV_NONCONN_IND;
 #endif
@@ -2014,10 +2029,6 @@ static int set_connectable(struct sock *sk, struct hci_dev *hdev, void *data,
        }
 
 no_scan_update:
-#ifdef CONFIG_TIZEN_WIP
-       if (cp->val || test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags))
-               write_fast_connectable(&req, true);
-#else
        /* If we're going from non-connectable to connectable or
         * vice-versa when fast connectable is enabled ensure that fast
         * connectable gets disabled. write_fast_connectable won't do
@@ -2026,7 +2037,6 @@ no_scan_update:
         */
        if (cp->val || test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags))
                write_fast_connectable(&req, false);
-#endif
 
        /* Update the advertising parameters if necessary */
        if (test_bit(HCI_ADVERTISING, &hdev->dev_flags))
index b1d680f..248aca2 100644 (file)
@@ -154,6 +154,7 @@ void ping_unhash(struct sock *sk)
        if (sk_hashed(sk)) {
                write_lock_bh(&ping_table.lock);
                hlist_nulls_del(&sk->sk_nulls_node);
+               sk_nulls_node_init(&sk->sk_nulls_node);
                sock_put(sk);
                isk->inet_num = 0;
                isk->inet_sport = 0;
index 7198d66..a1d126f 100644 (file)
@@ -39,7 +39,7 @@ cgroup_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_cgroup_info *info = par->matchinfo;
 
-       if (skb->sk == NULL)
+       if (skb->sk == NULL || !sk_fullsock(skb->sk))
                return false;
 
        return (info->id == skb->sk->sk_classid) ^ info->invert;
index 993050b..ff06882 100644 (file)
@@ -2,7 +2,7 @@
 
 Name: linux-3.10-sc7730
 Summary: The Linux Kernel
-Version: Tizen_sc7730_20150907_1_2edc4585
+Version: Tizen_sc7730_20150926_1_720d288e
 Release: 1
 License: GPL-2.0
 Group: System/Kernel
index 3b2a3fa..79e57ec 100755 (executable)
@@ -41,6 +41,7 @@
 #include <soc/sprd/dma.h>
 #include <soc/sprd/dma_reg.h>
 #include <soc/sprd/sprd-audio.h>
+#include <linux/wakelock.h>
 
 #include "sprd-asoc-common.h"
 #include "sprd-pcm.h"
 #define DMA_LINKLIST_CFG_NODE_SIZE  (sizeof(sprd_dma_desc))
 #endif
 
+static struct wake_lock pcm_open_wakelock;
 struct sprd_runtime_data {
        int dma_addr_offset;
        struct sprd_pcm_dma_params *params;
        int uid_cid_map[2];
        int int_pos_update[2];
        sprd_dma_desc *dma_cfg_array;
-       dma_addr_t *dma_desc_array_orig;
-       dma_addr_t dma_desc_array_phys_orig;
        dma_addr_t *dma_desc_array;
        dma_addr_t dma_desc_array_phys;
        int burst_len;
@@ -208,7 +208,7 @@ static inline int sprd_pcm_is_interleaved(struct snd_pcm_runtime *runtime)
                runtime->access == SNDRV_PCM_ACCESS_MMAP_INTERLEAVED);
 }
 
-#define PCM_DIR_NAME(stream) (stream == SNDRV_PCM_STREAM_PLAYBACK ? "Playback" : "Captrue")
+#define PCM_DIR_NAME(stream) (stream == SNDRV_PCM_STREAM_PLAYBACK ? "Playback" : "Capture")
 
 static int sprd_pcm_open(struct snd_pcm_substream *substream)
 {
@@ -223,6 +223,7 @@ static int sprd_pcm_open(struct snd_pcm_substream *substream)
        sp_asoc_pr_info("%s Open %s\n", sprd_dai_pcm_name(srtd->cpu_dai),
                        PCM_DIR_NAME(substream->stream));
 
+       wake_lock_timeout(&pcm_open_wakelock, msecs_to_jiffies(300));
        if (sprd_is_i2s(srtd->cpu_dai)) {
                snd_soc_set_runtime_hwparams(substream, &sprd_i2s_pcm_hardware);
                config = srtd->cpu_dai->ac97_pdata;
@@ -275,15 +276,12 @@ static int sprd_pcm_open(struct snd_pcm_substream *substream)
            || !((substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
                 && 0 == sprd_buffer_iram_backup())) {
 #endif
-               rtd->dma_desc_array_orig =
-                   dma_alloc_coherent(substream->pcm->card->dev,
-                                          hw_chan * (PAGE_SIZE+32),
-                                          &rtd->dma_desc_array_phys_orig,
+               rtd->dma_desc_array =
+                   dma_alloc_writecombine(substream->pcm->card->dev,
+                                          hw_chan * PAGE_SIZE,
+                                          &rtd->dma_desc_array_phys,
                                           GFP_KERNEL);
 
-               rtd->dma_desc_array_phys = (rtd->dma_desc_array_phys_orig+31)&(~31);
-               rtd->dma_desc_array  =  (unsigned int)rtd->dma_desc_array_orig + (rtd->dma_desc_array_phys - rtd->dma_desc_array_phys_orig);
-
                if (atomic_inc_return(&lightsleep_refcnt) == 1)
                        sprd_lightsleep_disable("audio", 1);
 #ifdef CONFIG_SND_SOC_SPRD_AUDIO_BUFFER_USE_IRAM
@@ -296,15 +294,13 @@ static int sprd_pcm_open(struct snd_pcm_substream *substream)
                    (void *)(s_iram_remap_base + runtime->hw.buffer_bytes_max);
                rtd->dma_desc_array_phys =
                    SPRD_IRAM_ALL_PHYS + runtime->hw.buffer_bytes_max;
-               rtd->dma_desc_array_orig = rtd->dma_desc_array;
-               rtd->dma_desc_array_phys_orig = rtd->dma_desc_array_phys;
                rtd->buffer_in_iram = 1;
                /*must clear the dma_desc_array first here */
                memset(rtd->dma_desc_array, 0, (2 * SPRD_AUDIO_DMA_NODE_SIZE));
        }
 #endif
 
-       if (!rtd->dma_desc_array_orig)
+       if (!rtd->dma_desc_array)
                goto err1;
 
        rtd->dma_cfg_array =
@@ -330,10 +326,10 @@ err2:
                sprd_buffer_iram_restore();
        else
 #endif
-               dma_free_coherent(substream->pcm->card->dev,
-                                     hw_chan * (PAGE_SIZE+32),
-                                     rtd->dma_desc_array_orig,
-                                     rtd->dma_desc_array_phys_orig);
+               dma_free_writecombine(substream->pcm->card->dev,
+                                     hw_chan * PAGE_SIZE,
+                                     rtd->dma_desc_array,
+                                     rtd->dma_desc_array_phys);
 err1:
        pr_err("ERR:dma_desc_array alloc failed!\n");
        kfree(rtd);
@@ -361,10 +357,10 @@ static int sprd_pcm_close(struct snd_pcm_substream *substream)
                sprd_buffer_iram_restore();
        else {
 #endif
-               dma_free_coherent(substream->pcm->card->dev,
-                                     rtd->hw_chan * (PAGE_SIZE+32),
-                                     rtd->dma_desc_array_orig,
-                                     rtd->dma_desc_array_phys_orig);
+               dma_free_writecombine(substream->pcm->card->dev,
+                                     rtd->hw_chan * PAGE_SIZE,
+                                     rtd->dma_desc_array,
+                                     rtd->dma_desc_array_phys);
                if (!atomic_dec_return(&lightsleep_refcnt))
                        sprd_lightsleep_disable("audio", 0);
 #ifdef CONFIG_SND_SOC_SPRD_AUDIO_BUFFER_USE_IRAM
@@ -623,7 +619,7 @@ static int sprd_pcm_hw_params(struct snd_pcm_substream *substream,
        sp_asoc_pr_dbg("Node Size:%d\n", j);
 
        dma_reg_addr[0].phys_addr = (u32) (rtd->dma_desc_array_phys);
-       dma_reg_addr[0].virt_addr = rtd->dma_desc_array;
+       dma_reg_addr[0].virt_addr = (u32) (rtd->dma_desc_array);
        sp_asoc_pr_dbg("dma_reg_addr[0].virt_addr:0x%x\n",
                       dma_reg_addr[0].virt_addr);
        sp_asoc_pr_dbg("dma_reg_addr[0].phys_addr:0x%x\n",
@@ -646,7 +642,7 @@ static int sprd_pcm_hw_params(struct snd_pcm_substream *substream,
                    (u32) (dma_reg_addr[0].phys_addr) +
                    runtime->hw.periods_max * DMA_LINKLIST_CFG_NODE_SIZE;
                dma_reg_addr[1].virt_addr =
-                   (dma_reg_addr[0].virt_addr) +
+                   (u32) (dma_reg_addr[0].virt_addr) +
                    runtime->hw.periods_max * DMA_LINKLIST_CFG_NODE_SIZE;
                sp_asoc_pr_dbg("dma_reg_addr[1].virt_addr:0x%x\n",
                               dma_reg_addr[1].virt_addr);
@@ -866,7 +862,7 @@ static int sprd_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream)
                 && 0 == sprd_buffer_iram_backup())) {
 #endif
                buf->private_data = NULL;
-               buf->area = dma_alloc_coherent(pcm->card->dev, size,
+               buf->area = dma_alloc_writecombine(pcm->card->dev, size,
                                                   &buf->addr, GFP_KERNEL);
 #ifdef CONFIG_SND_SOC_SPRD_AUDIO_BUFFER_USE_IRAM
        } else {
@@ -967,7 +963,7 @@ static void sprd_pcm_free_dma_buffers(struct snd_pcm *pcm)
                        sprd_buffer_iram_restore();
                else
 #endif
-                       dma_free_coherent(pcm->card->dev, buf->bytes,
+                       dma_free_writecombine(pcm->card->dev, buf->bytes,
                                              buf->area, buf->addr);
                buf->area = NULL;
                if (buf == save_p_buf) {
@@ -989,6 +985,7 @@ static struct snd_soc_platform_driver sprd_soc_platform = {
 
 static int sprd_soc_platform_probe(struct platform_device *pdev)
 {
+        wake_lock_init(&pcm_open_wakelock, WAKE_LOCK_SUSPEND, "pcm_open_wakelock");
        return snd_soc_register_platform(&pdev->dev, &sprd_soc_platform);
 }