diff options
author | dianlujitao <dianlujitao@lineageos.org> | 2020-02-08 13:59:30 +0800 |
---|---|---|
committer | Michael Bestas <mkbestas@lineageos.org> | 2020-05-01 18:21:37 +0300 |
commit | 1a1279a83fd39034a3fdca21ed9064a4cd38d6b9 (patch) | |
tree | 060860ef4c95ab6dbd19739715d5058425b0ff75 | |
parent | e8636ad7de158ecd66fc79700a39fb1058d1f917 (diff) |
input: touchscreen: Import synaptics_dsx_force driver and firmware
Change-Id: I40f2a859ab86548a7da140cf2fc80de4640aacbf
21 files changed, 53900 insertions, 1 deletions
diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig index f6880aa6506f..4164678c225d 100644 --- a/drivers/input/touchscreen/Kconfig +++ b/drivers/input/touchscreen/Kconfig @@ -12,6 +12,7 @@ menuconfig INPUT_TOUCHSCREEN if INPUT_TOUCHSCREEN source "drivers/input/touchscreen/synaptics_dsx/Kconfig" +source "drivers/input/touchscreen/synaptics_dsx_force/Kconfig" # HMI_L8867_A01 source "drivers/input/touchscreen/nvt_touch_a/Kconfig" diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile index 2ff3d100e7b5..5102c5ca1063 100644 --- a/drivers/input/touchscreen/Makefile +++ b/drivers/input/touchscreen/Makefile @@ -71,6 +71,7 @@ obj-$(CONFIG_TOUCHSCREEN_SUN4I) += sun4i-ts.o obj-$(CONFIG_TOUCHSCREEN_SUR40) += sur40.o obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_v21) += synaptics_dsx/ obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_TCM) += synaptics_tcm/ +obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FORCE) += synaptics_dsx_force/ obj-$(CONFIG_TOUCHSCREEN_NVT_D2S) += nvt_touch_d2s/ obj-$(CONFIG_TOUCHSCREEN_FOCAL_FT8719) += focal_ft8719/ obj-$(CONFIG_TOUCHSCREEN_NVT_A) += nvt_touch_a/ diff --git a/drivers/input/touchscreen/synaptics_dsx_force/Kconfig b/drivers/input/touchscreen/synaptics_dsx_force/Kconfig new file mode 100644 index 000000000000..b34228f5c1f9 --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/Kconfig @@ -0,0 +1,124 @@ +# +# Synaptics DSX touchscreen driver configuration +# +menuconfig TOUCHSCREEN_SYNAPTICS_DSX_FORCE + bool "Synaptics DSX touchscreen" + default y + help + Say Y here if you have a Synaptics DSX touchscreen connected + to your system. + + If unsure, say N. + +if TOUCHSCREEN_SYNAPTICS_DSX_FORCE + +choice + default TOUCHSCREEN_SYNAPTICS_DSX_I2C_FORCE + prompt "Synaptics DSX bus interface" +config TOUCHSCREEN_SYNAPTICS_DSX_I2C_FORCE + bool "RMI over I2C" + depends on I2C +config TOUCHSCREEN_SYNAPTICS_DSX_SPI_FORCE + bool "RMI over SPI" + depends on SPI_MASTER +config TOUCHSCREEN_SYNAPTICS_DSX_RMI_HID_I2C_FORCE + bool "HID over I2C" + depends on I2C +endchoice + +config TOUCHSCREEN_SYNAPTICS_DSX_CORE_FORCE + tristate "Synaptics DSX core driver module" + depends on I2C || SPI_MASTER + help + Say Y here to enable basic touch reporting functionality. + + If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called synaptics_dsx_core. + +config TOUCHSCREEN_SYNAPTICS_DSX_RMI_DEV_FORCE + tristate "Synaptics DSX RMI device module" + depends on TOUCHSCREEN_SYNAPTICS_DSX_CORE_FORCE + help + Say Y here to enable support for direct RMI register access. + + If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called synaptics_dsx_rmi_dev. + +config TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_FORCE + tristate "Synaptics DSX firmware update module" + depends on TOUCHSCREEN_SYNAPTICS_DSX_CORE_FORCE + help + Say Y here to enable support for doing firmware update. + + If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called synaptics_dsx_fw_update. + +config TOUCHSCREEN_SYNAPTICS_DSX_TEST_REPORTING_FORCE + tristate "Synaptics DSX test reporting module" + depends on TOUCHSCREEN_SYNAPTICS_DSX_CORE_FORCE + help + Say Y here to enable support for retrieving production test reports. + + If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called synaptics_dsx_test_reporting. + +config TOUCHSCREEN_SYNAPTICS_DSX_PROXIMITY_FORCE + tristate "Synaptics DSX proximity module" + depends on TOUCHSCREEN_SYNAPTICS_DSX_CORE_FORCE + help + Say Y here to enable support for proximity functionality. + + If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called synaptics_dsx_proximity. + +config TOUCHSCREEN_SYNAPTICS_DSX_ACTIVE_PEN_FORCE + tristate "Synaptics DSX active pen module" + depends on TOUCHSCREEN_SYNAPTICS_DSX_CORE_FORCE + help + Say Y here to enable support for active pen functionality. + + If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called synaptics_dsx_active_pen. + +config TOUCHSCREEN_SYNAPTICS_DSX_GESTURE_FORCE + tristate "Synaptics DSX user defined gesture module" + depends on TOUCHSCREEN_SYNAPTICS_DSX_CORE_FORCE + help + Say Y here to enable support for user defined gesture functionality. + + If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called synaptics_dsx_gesture. + +config TOUCHSCREEN_SYNAPTICS_DSX_VIDEO_FORCE + tristate "Synaptics DSX video module" + depends on TOUCHSCREEN_SYNAPTICS_DSX_CORE_FORCE + help + Say Y here to enable support for video communication functionality. + + If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called synaptics_dsx_video. + +config TOUCH_DEBUG_FS + bool "touch debugfs suport" + default n + depends on DEBUG_FS + help + Say Y here to enable support for touch debugfs. + +endif diff --git a/drivers/input/touchscreen/synaptics_dsx_force/Makefile b/drivers/input/touchscreen/synaptics_dsx_force/Makefile new file mode 100644 index 000000000000..f613ea961569 --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/Makefile @@ -0,0 +1,17 @@ +# +# Makefile for the Synaptics DSX touchscreen driver. +# + +# Each configuration option enables a list of files. + +obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_I2C_FORCE) += synaptics_dsx_i2c.o +obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_SPI_FORCE) += synaptics_dsx_spi.o +obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_RMI_HID_I2C_FORCE) += synaptics_dsx_rmi_hid_i2c.o +obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_CORE_FORCE) += synaptics_dsx_core.o +obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_RMI_DEV_FORCE) += synaptics_dsx_rmi_dev.o +obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_FORCE) += synaptics_dsx_fw_update.o +obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_TEST_REPORTING_FORCE) += synaptics_dsx_test_reporting.o +obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_PROXIMITY_FORCE) += synaptics_dsx_proximity.o +obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_ACTIVE_PEN_FORCE) += synaptics_dsx_active_pen.o +obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_GESTURE_FORCE) += synaptics_dsx_gesture.o +obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_VIDEO_FORCE) += synaptics_dsx_video.o diff --git a/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_active_pen.c b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_active_pen.c new file mode 100644 index 000000000000..825b0f36e542 --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_active_pen.c @@ -0,0 +1,630 @@ +/* + * Synaptics DSX touchscreen driver + * + * Copyright (C) 2012-2015 Synaptics Incorporated. All rights reserved. + * + * Copyright (C) 2012 Alexandra Chin <alexandra.chin@tw.synaptics.com> + * Copyright (C) 2012 Scott Lin <scott.lin@tw.synaptics.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND SYNAPTICS + * EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, INCLUDING ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, + * AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS. + * IN NO EVENT SHALL SYNAPTICS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION + * WITH THE USE OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED + * AND BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF COMPETENT JURISDICTION DOES + * NOT PERMIT THE DISCLAIMER OF DIRECT DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' + * TOTAL CUMULATIVE LIABILITY TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. + * DOLLARS. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/interrupt.h> +#include <linux/delay.h> +#include <linux/input.h> +#include <linux/platform_device.h> +#include <linux/input/synaptics_dsx.h> +#include "synaptics_dsx_core.h" + +#define APEN_PHYS_NAME "synaptics_dsx/active_pen" + +#define ACTIVE_PEN_MAX_PRESSURE_16BIT 65535 +#define ACTIVE_PEN_MAX_PRESSURE_8BIT 255 + +struct synaptics_rmi4_f12_query_8 { + union { + struct { + unsigned char size_of_query9; + struct { + unsigned char data0_is_present:1; + unsigned char data1_is_present:1; + unsigned char data2_is_present:1; + unsigned char data3_is_present:1; + unsigned char data4_is_present:1; + unsigned char data5_is_present:1; + unsigned char data6_is_present:1; + unsigned char data7_is_present:1; + } __packed; + }; + unsigned char data[2]; + }; +}; + +struct apen_data_8b_pressure { + union { + struct { + unsigned char status_pen:1; + unsigned char status_invert:1; + unsigned char status_barrel:1; + unsigned char status_reserved:5; + unsigned char x_lsb; + unsigned char x_msb; + unsigned char y_lsb; + unsigned char y_msb; + unsigned char pressure_msb; + unsigned char battery_state; + unsigned char pen_id_0_7; + unsigned char pen_id_8_15; + unsigned char pen_id_16_23; + unsigned char pen_id_24_31; + } __packed; + unsigned char data[11]; + }; +}; + +struct apen_data { + union { + struct { + unsigned char status_pen:1; + unsigned char status_invert:1; + unsigned char status_barrel:1; + unsigned char status_reserved:5; + unsigned char x_lsb; + unsigned char x_msb; + unsigned char y_lsb; + unsigned char y_msb; + unsigned char pressure_lsb; + unsigned char pressure_msb; + unsigned char battery_state; + unsigned char pen_id_0_7; + unsigned char pen_id_8_15; + unsigned char pen_id_16_23; + unsigned char pen_id_24_31; + } __packed; + unsigned char data[12]; + }; +}; + +struct synaptics_rmi4_apen_handle { + bool apen_present; + unsigned char intr_mask; + unsigned char battery_state; + unsigned short query_base_addr; + unsigned short control_base_addr; + unsigned short data_base_addr; + unsigned short command_base_addr; + unsigned short apen_data_addr; + unsigned short max_pressure; + unsigned int pen_id; + struct input_dev *apen_dev; + struct apen_data *apen_data; + struct synaptics_rmi4_data *rmi4_data; +}; + +static struct synaptics_rmi4_apen_handle *apen; + +DECLARE_COMPLETION(apen_remove_complete); + +static void apen_lift(void) +{ + input_report_key(apen->apen_dev, BTN_TOUCH, 0); + input_report_key(apen->apen_dev, BTN_TOOL_PEN, 0); + input_report_key(apen->apen_dev, BTN_TOOL_RUBBER, 0); + input_sync(apen->apen_dev); + apen->apen_present = false; + + return; +} + +static void apen_report(void) +{ + int retval; + int x; + int y; + int pressure; + static int invert = -1; + struct apen_data_8b_pressure *apen_data_8b; + struct synaptics_rmi4_data *rmi4_data = apen->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + apen->apen_data_addr, + apen->apen_data->data, + sizeof(apen->apen_data->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read active pen data\n", + __func__); + return; + } + + if (apen->apen_data->status_pen == 0) { + if (apen->apen_present) + apen_lift(); + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: No active pen data\n", + __func__); + + return; + } + + x = (apen->apen_data->x_msb << 8) | (apen->apen_data->x_lsb); + y = (apen->apen_data->y_msb << 8) | (apen->apen_data->y_lsb); + + if ((x == -1) && (y == -1)) { + if (apen->apen_present) + apen_lift(); + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Active pen in range but no valid x & y\n", + __func__); + + return; + } + + if (!apen->apen_present) + invert = -1; + + if (invert != -1 && invert != apen->apen_data->status_invert) + apen_lift(); + + invert = apen->apen_data->status_invert; + + if (apen->max_pressure == ACTIVE_PEN_MAX_PRESSURE_16BIT) { + pressure = (apen->apen_data->pressure_msb << 8) | + apen->apen_data->pressure_lsb; + apen->battery_state = apen->apen_data->battery_state; + apen->pen_id = (apen->apen_data->pen_id_24_31 << 24) | + (apen->apen_data->pen_id_16_23 << 16) | + (apen->apen_data->pen_id_8_15 << 8) | + apen->apen_data->pen_id_0_7; + } else { + apen_data_8b = (struct apen_data_8b_pressure *)apen->apen_data; + pressure = apen_data_8b->pressure_msb; + apen->battery_state = apen_data_8b->battery_state; + apen->pen_id = (apen_data_8b->pen_id_24_31 << 24) | + (apen_data_8b->pen_id_16_23 << 16) | + (apen_data_8b->pen_id_8_15 << 8) | + apen_data_8b->pen_id_0_7; + } + + input_report_key(apen->apen_dev, BTN_TOUCH, pressure > 0 ? 1 : 0); + input_report_key(apen->apen_dev, + apen->apen_data->status_invert > 0 ? + BTN_TOOL_RUBBER : BTN_TOOL_PEN, 1); + input_report_key(apen->apen_dev, + BTN_STYLUS, apen->apen_data->status_barrel > 0 ? + 1 : 0); + input_report_abs(apen->apen_dev, ABS_X, x); + input_report_abs(apen->apen_dev, ABS_Y, y); + input_report_abs(apen->apen_dev, ABS_PRESSURE, pressure); + + input_sync(apen->apen_dev); + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Active pen: " + "status = %d, " + "invert = %d, " + "barrel = %d, " + "x = %d, " + "y = %d, " + "pressure = %d\n", + __func__, + apen->apen_data->status_pen, + apen->apen_data->status_invert, + apen->apen_data->status_barrel, + x, y, pressure); + + apen->apen_present = true; + + return; +} + +static void apen_set_params(void) +{ + input_set_abs_params(apen->apen_dev, ABS_X, 0, + apen->rmi4_data->sensor_max_x, 0, 0); + input_set_abs_params(apen->apen_dev, ABS_Y, 0, + apen->rmi4_data->sensor_max_y, 0, 0); + input_set_abs_params(apen->apen_dev, ABS_PRESSURE, 0, + apen->max_pressure, 0, 0); + + return; +} + +static int apen_pressure(struct synaptics_rmi4_f12_query_8 *query_8) +{ + int retval; + unsigned char ii; + unsigned char data_reg_presence; + unsigned char size_of_query_9; + unsigned char *query_9; + unsigned char *data_desc; + struct synaptics_rmi4_data *rmi4_data = apen->rmi4_data; + + data_reg_presence = query_8->data[1]; + + size_of_query_9 = query_8->size_of_query9; + query_9 = kmalloc(size_of_query_9, GFP_KERNEL); + + retval = synaptics_rmi4_reg_read(rmi4_data, + apen->query_base_addr + 9, + query_9, + size_of_query_9); + if (retval < 0) + goto exit; + + data_desc = query_9; + + for (ii = 0; ii < 6; ii++) { + if (!(data_reg_presence & (1 << ii))) + continue; /* The data register is not present */ + data_desc++; /* Jump over the size entry */ + while (*data_desc & (1 << 7)) + data_desc++; + data_desc++; /* Go to the next descriptor */ + } + + data_desc++; /* Jump over the size entry */ + /* Check for the presence of subpackets 1 and 2 */ + if ((*data_desc & (3 << 1)) == (3 << 1)) + apen->max_pressure = ACTIVE_PEN_MAX_PRESSURE_16BIT; + else + apen->max_pressure = ACTIVE_PEN_MAX_PRESSURE_8BIT; + +exit: + kfree(query_9); + + return retval; +} + +static int apen_reg_init(void) +{ + int retval; + unsigned char data_offset; + unsigned char size_of_query8; + struct synaptics_rmi4_f12_query_8 query_8; + struct synaptics_rmi4_data *rmi4_data = apen->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + apen->query_base_addr + 7, + &size_of_query8, + sizeof(size_of_query8)); + if (retval < 0) + return retval; + + retval = synaptics_rmi4_reg_read(rmi4_data, + apen->query_base_addr + 8, + query_8.data, + sizeof(query_8.data)); + if (retval < 0) + return retval; + + if ((size_of_query8 >= 2) && (query_8.data6_is_present)) { + data_offset = query_8.data0_is_present + + query_8.data1_is_present + + query_8.data2_is_present + + query_8.data3_is_present + + query_8.data4_is_present + + query_8.data5_is_present; + apen->apen_data_addr = apen->data_base_addr + data_offset; + retval = apen_pressure(&query_8); + if (retval < 0) + return retval; + } else { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Active pen support unavailable\n", + __func__); + retval = -ENODEV; + } + + return retval; +} + +static int apen_scan_pdt(void) +{ + int retval; + unsigned char ii; + unsigned char page; + unsigned char intr_count = 0; + unsigned char intr_off; + unsigned char intr_src; + unsigned short addr; + struct synaptics_rmi4_fn_desc fd; + struct synaptics_rmi4_data *rmi4_data = apen->rmi4_data; + + for (page = 0; page < PAGES_TO_SERVICE; page++) { + for (addr = PDT_START; addr > PDT_END; addr -= PDT_ENTRY_SIZE) { + addr |= (page << 8); + + retval = synaptics_rmi4_reg_read(rmi4_data, + addr, + (unsigned char *)&fd, + sizeof(fd)); + if (retval < 0) + return retval; + + addr &= ~(MASK_8BIT << 8); + + if (fd.fn_number) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Found F%02x\n", + __func__, fd.fn_number); + switch (fd.fn_number) { + case SYNAPTICS_RMI4_F12: + goto f12_found; + break; + } + } else { + break; + } + + intr_count += fd.intr_src_count; + } + } + + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to find F12\n", + __func__); + return -EINVAL; + +f12_found: + apen->query_base_addr = fd.query_base_addr | (page << 8); + apen->control_base_addr = fd.ctrl_base_addr | (page << 8); + apen->data_base_addr = fd.data_base_addr | (page << 8); + apen->command_base_addr = fd.cmd_base_addr | (page << 8); + + retval = apen_reg_init(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to initialize active pen registers\n", + __func__); + return retval; + } + + apen->intr_mask = 0; + intr_src = fd.intr_src_count; + intr_off = intr_count % 8; + for (ii = intr_off; + ii < (intr_src + intr_off); + ii++) { + apen->intr_mask |= 1 << ii; + } + + rmi4_data->intr_mask[0] |= apen->intr_mask; + + addr = rmi4_data->f01_ctrl_base_addr + 1; + + retval = synaptics_rmi4_reg_write(rmi4_data, + addr, + &(rmi4_data->intr_mask[0]), + sizeof(rmi4_data->intr_mask[0])); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set interrupt enable bit\n", + __func__); + return retval; + } + + return 0; +} + +static void synaptics_rmi4_apen_attn(struct synaptics_rmi4_data *rmi4_data, + unsigned char intr_mask) +{ + if (!apen) + return; + + if (apen->intr_mask & intr_mask) + apen_report(); + + return; +} + +static int synaptics_rmi4_apen_init(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + + if (apen) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Handle already exists\n", + __func__); + return 0; + } + + apen = kzalloc(sizeof(*apen), GFP_KERNEL); + if (!apen) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for apen\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + apen->apen_data = kzalloc(sizeof(*(apen->apen_data)), GFP_KERNEL); + if (!apen->apen_data) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for apen_data\n", + __func__); + retval = -ENOMEM; + goto exit_free_apen; + } + + apen->rmi4_data = rmi4_data; + + retval = apen_scan_pdt(); + if (retval < 0) + goto exit_free_apen_data; + + apen->apen_dev = input_allocate_device(); + if (apen->apen_dev == NULL) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to allocate active pen device\n", + __func__); + retval = -ENOMEM; + goto exit_free_apen_data; + } + + apen->apen_dev->name = ACTIVE_PEN_DRIVER_NAME; + apen->apen_dev->phys = APEN_PHYS_NAME; + apen->apen_dev->id.product = SYNAPTICS_DSX_DRIVER_PRODUCT; + apen->apen_dev->id.version = SYNAPTICS_DSX_DRIVER_VERSION; + apen->apen_dev->dev.parent = rmi4_data->pdev->dev.parent; + input_set_drvdata(apen->apen_dev, rmi4_data); + + set_bit(EV_KEY, apen->apen_dev->evbit); + set_bit(EV_ABS, apen->apen_dev->evbit); + set_bit(BTN_TOUCH, apen->apen_dev->keybit); + set_bit(BTN_TOOL_PEN, apen->apen_dev->keybit); + set_bit(BTN_TOOL_RUBBER, apen->apen_dev->keybit); + set_bit(BTN_STYLUS, apen->apen_dev->keybit); +#ifdef INPUT_PROP_DIRECT + set_bit(INPUT_PROP_DIRECT, apen->apen_dev->propbit); +#endif + + apen_set_params(); + + retval = input_register_device(apen->apen_dev); + if (retval) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to register active pen device\n", + __func__); + goto exit_free_input_device; + } + + return 0; + +exit_free_input_device: + input_free_device(apen->apen_dev); + +exit_free_apen_data: + kfree(apen->apen_data); + +exit_free_apen: + kfree(apen); + apen = NULL; + +exit: + return retval; +} + +static void synaptics_rmi4_apen_remove(struct synaptics_rmi4_data *rmi4_data) +{ + if (!apen) + goto exit; + + input_unregister_device(apen->apen_dev); + kfree(apen->apen_data); + kfree(apen); + apen = NULL; + +exit: + complete(&apen_remove_complete); + + return; +} + +static void synaptics_rmi4_apen_reset(struct synaptics_rmi4_data *rmi4_data) +{ + if (!apen) { + synaptics_rmi4_apen_init(rmi4_data); + return; + } + + apen_lift(); + + apen_scan_pdt(); + + return; +} + +static void synaptics_rmi4_apen_reinit(struct synaptics_rmi4_data *rmi4_data) +{ + if (!apen) + return; + + apen_lift(); + + return; +} + +static void synaptics_rmi4_apen_e_suspend(struct synaptics_rmi4_data *rmi4_data) +{ + if (!apen) + return; + + apen_lift(); + + return; +} + +static void synaptics_rmi4_apen_suspend(struct synaptics_rmi4_data *rmi4_data) +{ + if (!apen) + return; + + apen_lift(); + + return; +} + +static struct synaptics_rmi4_exp_fn active_pen_module = { + .fn_type = RMI_ACTIVE_PEN, + .init = synaptics_rmi4_apen_init, + .remove = synaptics_rmi4_apen_remove, + .reset = synaptics_rmi4_apen_reset, + .reinit = synaptics_rmi4_apen_reinit, + .early_suspend = synaptics_rmi4_apen_e_suspend, + .suspend = synaptics_rmi4_apen_suspend, + .resume = NULL, + .late_resume = NULL, + .attn = synaptics_rmi4_apen_attn, +}; + +static int __init rmi4_active_pen_module_init(void) +{ + synaptics_rmi4_new_function_force(&active_pen_module, true); + + return 0; +} + +static void __exit rmi4_active_pen_module_exit(void) +{ + synaptics_rmi4_new_function_force(&active_pen_module, false); + + wait_for_completion(&apen_remove_complete); + + return; +} + +module_init(rmi4_active_pen_module_init); +module_exit(rmi4_active_pen_module_exit); + +MODULE_AUTHOR("Synaptics, Inc."); +MODULE_DESCRIPTION("Synaptics DSX Active Pen Module"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_core.c b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_core.c new file mode 100644 index 000000000000..b23534981541 --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_core.c @@ -0,0 +1,6105 @@ +/* + * Synaptics DSX touchscreen driver + * + * Copyright (C) 2012-2015 Synaptics Incorporated. All rights reserved. + * + * Copyright (C) 2012 Alexandra Chin <alexandra.chin@tw.synaptics.com> + * Copyright (C) 2012 Scott Lin <scott.lin@tw.synaptics.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND SYNAPTICS + * EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, INCLUDING ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, + * AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS. + * IN NO EVENT SHALL SYNAPTICS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION + * WITH THE USE OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED + * AND BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF COMPETENT JURISDICTION DOES + * NOT PERMIT THE DISCLAIMER OF DIRECT DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' + * TOTAL CUMULATIVE LIABILITY TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. + * DOLLARS. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/interrupt.h> +#include <linux/delay.h> +#include <linux/input.h> +#include <linux/gpio.h> +#include <linux/platform_device.h> +#include <linux/regulator/consumer.h> +#include <linux/input/synaptics_dsx.h> +#include "synaptics_dsx_core.h" +#ifdef KERNEL_ABOVE_2_6_38 +#include <linux/input/mt.h> +#endif + +#if defined(CONFIG_SECURE_TOUCH) +#include <linux/pm_runtime.h> +#include <linux/errno.h> +#endif + +#ifdef CONFIG_TOUCH_DEBUG_FS +#include <linux/fs.h> +#include <linux/debugfs.h> +#include <linux/uaccess.h> +#endif +#include <linux/mdss_io_util.h> + +#define INPUT_PHYS_NAME "synaptics_dsx/touch_input" +#define STYLUS_PHYS_NAME "synaptics_dsx/stylus" + +#define VIRTUAL_KEY_MAP_FILE_NAME "virtualkeys." PLATFORM_DRIVER_NAME + +#ifdef KERNEL_ABOVE_2_6_38 +#define TYPE_B_PROTOCOL +#endif + +#define WAKEUP_GESTURE false + + +#define REPORT_2D_Z +#define REPORT_2D_W + +#define REPORT_2D_PRESSURE + + +#define F12_DATA_15_WORKAROUND + +#define IGNORE_FN_INIT_FAILURE +/* +#define FB_READY_RESET +#define FB_READY_WAIT_MS 100 +#define FB_READY_TIMEOUT_S 30 +*/ +#define RPT_TYPE (1 << 0) +#define RPT_X_LSB (1 << 1) +#define RPT_X_MSB (1 << 2) +#define RPT_Y_LSB (1 << 3) +#define RPT_Y_MSB (1 << 4) +#define RPT_Z (1 << 5) +#define RPT_WX (1 << 6) +#define RPT_WY (1 << 7) +#define RPT_DEFAULT (RPT_TYPE | RPT_X_LSB | RPT_X_MSB | RPT_Y_LSB | RPT_Y_MSB) + +#define REBUILD_WORK_DELAY_MS 500 /* ms */ + +#define EXP_FN_WORK_DELAY_MS 500 /* ms */ +#define MAX_F11_TOUCH_WIDTH 15 +#define MAX_F12_TOUCH_WIDTH 255 +#define MAX_F12_TOUCH_PRESSURE 255 + +#define CHECK_STATUS_TIMEOUT_MS 100 + +#define F01_STD_QUERY_LEN 21 +#define F01_BUID_ID_OFFSET 18 +#define F01_PROD_ID_OFFSET 11 + +#define STATUS_NO_ERROR 0x00 +#define STATUS_RESET_OCCURRED 0x01 +#define STATUS_INVALID_CONFIG 0x02 +#define STATUS_DEVICE_FAILURE 0x03 +#define STATUS_CONFIG_CRC_FAILURE 0x04 +#define STATUS_FIRMWARE_CRC_FAILURE 0x05 +#define STATUS_CRC_IN_PROGRESS 0x06 + +#define NORMAL_OPERATION (0 << 0) +#define SENSOR_SLEEP (1 << 0) +#define NO_SLEEP_OFF (0 << 2) +#define NO_SLEEP_ON (1 << 2) +#define CONFIGURED (1 << 7) + +#define F11_CONTINUOUS_MODE 0x00 +#define F11_WAKEUP_GESTURE_MODE 0x04 +#define F12_CONTINUOUS_MODE 0x00 +#define F12_WAKEUP_GESTURE_MODE 0x02 +#define F12_UDG_DETECT 0x0f +#define F12_HOMEKEY_DETECT 0x0c + +#define DOUBLE_TAP 0x01 +#define HOMEKEY_WAKEUP 0x80 + +#define INPUT_EVENT_START 0 +#define INPUT_EVENT_SENSITIVE_MODE_OFF 0 +#define INPUT_EVENT_SENSITIVE_MODE_ON 1 +#define INPUT_EVENT_STYLUS_MODE_OFF 2 +#define INPUT_EVENT_STYLUS_MODE_ON 3 +#define INPUT_EVENT_WAKUP_MODE_OFF 4 +#define INPUT_EVENT_WAKUP_MODE_ON 5 +#define INPUT_EVENT_COVER_MODE_OFF 6 +#define INPUT_EVENT_COVER_MODE_ON 7 +#define INPUT_EVENT_POCKET_MODE_OFF 8 +#define INPUT_EVENT_POCKET_MODE_ON 9 +#define INPUT_EVENT_END 9 + +#define BUTTON_WG_EN 1 + +static int synaptics_rmi4_check_status(struct synaptics_rmi4_data *rmi4_data, + bool *was_in_bl_mode); +static int synaptics_rmi4_free_fingers(struct synaptics_rmi4_data *rmi4_data); +static int synaptics_rmi4_reinit_device(struct synaptics_rmi4_data *rmi4_data); +static int synaptics_rmi4_reset_device(struct synaptics_rmi4_data *rmi4_data, + bool rebuild); +static void synaptics_rmi4_sleep_enable(struct synaptics_rmi4_data *rmi4_data, + bool enable); +static void synaptics_rmi4_wakeup_gesture(struct synaptics_rmi4_data *rmi4_data, + bool enable); +static int synaptics_rmi4_irq_enable(struct synaptics_rmi4_data *rmi4_data, + bool enable, bool attn_only); +static void synaptics_rmi4_wakeup_reconfigure(struct synaptics_rmi4_data *rmi4_data, + bool enable); + +#if defined(CONFIG_SECURE_TOUCH) +static ssize_t synaptics_secure_touch_enable_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t synaptics_secure_touch_enable_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t synaptics_secure_touch_show(struct device *dev, + struct device_attribute *attr, char *buf); +#endif + +#ifdef CONFIG_FB +static int synaptics_rmi4_fb_notifier_cb(struct notifier_block *self, + unsigned long event, void *data); +static int synaptics_rmi4_fb_notifier_cb_tddi(struct notifier_block *self, + unsigned long event, void *data); +#endif + +#define DISP_REG_VDD (1<<0) +#define DISP_REG_LAB (1<<1) +#define DISP_REG_IBB (1<<2) +#define DISP_REG_ALL (DISP_REG_VDD | DISP_REG_LAB | DISP_REG_IBB) + +static void mdss_regulator_ctrl(struct synaptics_rmi4_data *rmi4_data, unsigned int flag, bool enable); +static void mdss_reset_ctrl(const struct synaptics_dsx_board_data *bdata, bool on); +static void mdss_reset_action(const struct synaptics_dsx_board_data *bdata); + +#ifdef CONFIG_HAS_EARLYSUSPEND +#ifndef CONFIG_FB +#define USE_EARLYSUSPEND +#endif +#endif + +#ifdef USE_EARLYSUSPEND +static void synaptics_rmi4_early_suspend(struct early_suspend *h); + +static void synaptics_rmi4_late_resume(struct early_suspend *h); +#endif +static irqreturn_t synaptics_rmi4_irq(int irq, void *data); +static int synaptics_rmi4_suspend(struct device *dev); +static void synaptics_rmi4_pocketmode(struct synaptics_rmi4_data *rmi4_data, bool onoff); + +static int synaptics_rmi4_resume(struct device *dev); + +static ssize_t synaptics_rmi4_f01_reset_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t synaptics_rmi4_f01_productinfo_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t synaptics_rmi4_f01_buildid_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t synaptics_rmi4_f01_flashprog_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t synaptics_rmi4_0dbutton_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t synaptics_rmi4_0dbutton_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t synaptics_rmi4_suspend_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t synaptics_rmi4_wake_gesture_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t synaptics_rmi4_wake_gesture_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t synaptics_rmi4_irq_enable_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t synaptics_rmi4_irq_enable_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t synaptics_rmi4_pocketmode_on_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t synaptics_rmi4_pocketmode_on_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t synaptics_rmi4_panel_color_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t synaptics_rmi4_panel_vendor_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t synaptics_rmi4_virtual_key_map_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf); + +struct synaptics_rmi4_f01_device_status { + union { + struct { + unsigned char status_code:4; + unsigned char reserved:2; + unsigned char flash_prog:1; + unsigned char unconfigured:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct synaptics_rmi4_f11_query_0_5 { + union { + struct { + /* query 0 */ + unsigned char f11_query0_b0__2:3; + unsigned char has_query_9:1; + unsigned char has_query_11:1; + unsigned char has_query_12:1; + unsigned char has_query_27:1; + unsigned char has_query_28:1; + + /* query 1 */ + unsigned char num_of_fingers:3; + unsigned char has_rel:1; + unsigned char has_abs:1; + unsigned char has_gestures:1; + unsigned char has_sensitibity_adjust:1; + unsigned char f11_query1_b7:1; + + /* query 2 */ + unsigned char num_of_x_electrodes; + + /* query 3 */ + unsigned char num_of_y_electrodes; + + /* query 4 */ + unsigned char max_electrodes:7; + unsigned char f11_query4_b7:1; + + /* query 5 */ + unsigned char abs_data_size:2; + unsigned char has_anchored_finger:1; + unsigned char has_adj_hyst:1; + unsigned char has_dribble:1; + unsigned char has_bending_correction:1; + unsigned char has_large_object_suppression:1; + unsigned char has_jitter_filter:1; + } __packed; + unsigned char data[6]; + }; +}; + +struct synaptics_rmi4_f11_query_7_8 { + union { + struct { + /* query 7 */ + unsigned char has_single_tap:1; + unsigned char has_tap_and_hold:1; + unsigned char has_double_tap:1; + unsigned char has_early_tap:1; + unsigned char has_flick:1; + unsigned char has_press:1; + unsigned char has_pinch:1; + unsigned char has_chiral_scroll:1; + + /* query 8 */ + unsigned char has_palm_detect:1; + unsigned char has_rotate:1; + unsigned char has_touch_shapes:1; + unsigned char has_scroll_zones:1; + unsigned char individual_scroll_zones:1; + unsigned char has_multi_finger_scroll:1; + unsigned char has_multi_finger_scroll_edge_motion:1; + unsigned char has_multi_finger_scroll_inertia:1; + } __packed; + unsigned char data[2]; + }; +}; + +struct synaptics_rmi4_f11_query_9 { + union { + struct { + unsigned char has_pen:1; + unsigned char has_proximity:1; + unsigned char has_large_object_sensitivity:1; + unsigned char has_suppress_on_large_object_detect:1; + unsigned char has_two_pen_thresholds:1; + unsigned char has_contact_geometry:1; + unsigned char has_pen_hover_discrimination:1; + unsigned char has_pen_hover_and_edge_filters:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct synaptics_rmi4_f11_query_12 { + union { + struct { + unsigned char has_small_object_detection:1; + unsigned char has_small_object_detection_tuning:1; + unsigned char has_8bit_w:1; + unsigned char has_2d_adjustable_mapping:1; + unsigned char has_general_information_2:1; + unsigned char has_physical_properties:1; + unsigned char has_finger_limit:1; + unsigned char has_linear_cofficient_2:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct synaptics_rmi4_f11_query_27 { + union { + struct { + unsigned char f11_query27_b0:1; + unsigned char has_pen_position_correction:1; + unsigned char has_pen_jitter_filter_coefficient:1; + unsigned char has_group_decomposition:1; + unsigned char has_wakeup_gesture:1; + unsigned char has_small_finger_correction:1; + unsigned char has_data_37:1; + unsigned char f11_query27_b7:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct synaptics_rmi4_f11_ctrl_6_9 { + union { + struct { + unsigned char sensor_max_x_pos_7_0; + unsigned char sensor_max_x_pos_11_8:4; + unsigned char f11_ctrl7_b4__7:4; + unsigned char sensor_max_y_pos_7_0; + unsigned char sensor_max_y_pos_11_8:4; + unsigned char f11_ctrl9_b4__7:4; + } __packed; + unsigned char data[4]; + }; +}; + +struct synaptics_rmi4_f11_data_1_5 { + union { + struct { + unsigned char x_position_11_4; + unsigned char y_position_11_4; + unsigned char x_position_3_0:4; + unsigned char y_position_3_0:4; + unsigned char wx:4; + unsigned char wy:4; + unsigned char z; + } __packed; + unsigned char data[5]; + }; +}; + +struct synaptics_rmi4_f12_query_5 { + union { + struct { + unsigned char size_of_query6; + struct { + unsigned char ctrl0_is_present:1; + unsigned char ctrl1_is_present:1; + unsigned char ctrl2_is_present:1; + unsigned char ctrl3_is_present:1; + unsigned char ctrl4_is_present:1; + unsigned char ctrl5_is_present:1; + unsigned char ctrl6_is_present:1; + unsigned char ctrl7_is_present:1; + } __packed; + struct { + unsigned char ctrl8_is_present:1; + unsigned char ctrl9_is_present:1; + unsigned char ctrl10_is_present:1; + unsigned char ctrl11_is_present:1; + unsigned char ctrl12_is_present:1; + unsigned char ctrl13_is_present:1; + unsigned char ctrl14_is_present:1; + unsigned char ctrl15_is_present:1; + } __packed; + struct { + unsigned char ctrl16_is_present:1; + unsigned char ctrl17_is_present:1; + unsigned char ctrl18_is_present:1; + unsigned char ctrl19_is_present:1; + unsigned char ctrl20_is_present:1; + unsigned char ctrl21_is_present:1; + unsigned char ctrl22_is_present:1; + unsigned char ctrl23_is_present:1; + } __packed; + struct { + unsigned char ctrl24_is_present:1; + unsigned char ctrl25_is_present:1; + unsigned char ctrl26_is_present:1; + unsigned char ctrl27_is_present:1; + unsigned char ctrl28_is_present:1; + unsigned char ctrl29_is_present:1; + unsigned char ctrl30_is_present:1; + unsigned char ctrl31_is_present:1; + } __packed; + struct { + unsigned char ctrl32_is_present:1; + unsigned char ctrl33_is_present:1; + unsigned char ctrl34_is_present:1; + unsigned char ctrl35_is_present:1; + unsigned char ctrl36_is_present:1; + unsigned char ctrl37_is_present:1; + unsigned char ctrl38_is_present:1; + unsigned char ctrl39_is_present:1; + } __packed; + struct { + unsigned char ctrl40_is_present:1; + unsigned char ctrl41_is_present:1; + unsigned char ctrl42_is_present:1; + unsigned char ctrl43_is_present:1; + unsigned char ctrl44_is_present:1; + unsigned char ctrl45_is_present:1; + unsigned char ctrl46_is_present:1; + unsigned char ctrl47_is_present:1; + } __packed; + struct { + unsigned char ctrl48_is_present:1; + unsigned char ctrl49_is_present:1; + unsigned char ctrl50_is_present:1; + unsigned char ctrl51_is_present:1; + unsigned char ctrl52_is_present:1; + unsigned char ctrl53_is_present:1; + unsigned char ctrl54_is_present:1; + unsigned char ctrl55_is_present:1; + } __packed; + struct { + unsigned char ctrl56_is_present:1; + unsigned char ctrl57_is_present:1; + unsigned char ctrl58_is_present:1; + unsigned char ctrl59_is_present:1; + unsigned char ctrl60_is_present:1; + unsigned char ctrl61_is_present:1; + unsigned char ctrl62_is_present:1; + unsigned char ctrl63_is_present:1; + } __packed; + }; + unsigned char data[9]; + }; +}; + +struct synaptics_rmi4_f12_query_8 { + union { + struct { + unsigned char size_of_query9; + struct { + unsigned char data0_is_present:1; + unsigned char data1_is_present:1; + unsigned char data2_is_present:1; + unsigned char data3_is_present:1; + unsigned char data4_is_present:1; + unsigned char data5_is_present:1; + unsigned char data6_is_present:1; + unsigned char data7_is_present:1; + } __packed; + struct { + unsigned char data8_is_present:1; + unsigned char data9_is_present:1; + unsigned char data10_is_present:1; + unsigned char data11_is_present:1; + unsigned char data12_is_present:1; + unsigned char data13_is_present:1; + unsigned char data14_is_present:1; + unsigned char data15_is_present:1; + } __packed; + struct { + unsigned char data16_is_present:1; + unsigned char data17_is_present:1; + unsigned char data18_is_present:1; + unsigned char data19_is_present:1; + unsigned char data20_is_present:1; + unsigned char data21_is_present:1; + unsigned char data22_is_present:1; + unsigned char data23_is_present:1; + } __packed; + struct { + unsigned char data24_is_present:1; + unsigned char data25_is_present:1; + unsigned char data26_is_present:1; + unsigned char data27_is_present:1; + unsigned char data28_is_present:1; + unsigned char data29_is_present:1; + unsigned char data30_is_present:1; + unsigned char data31_is_present:1; + } __packed; + }; + unsigned char data[5]; + }; +}; + +struct synaptics_rmi4_f12_ctrl_8 { + union { + struct { + unsigned char max_x_coord_lsb; + unsigned char max_x_coord_msb; + unsigned char max_y_coord_lsb; + unsigned char max_y_coord_msb; + unsigned char rx_pitch_lsb; + unsigned char rx_pitch_msb; + unsigned char tx_pitch_lsb; + unsigned char tx_pitch_msb; + unsigned char low_rx_clip; + unsigned char high_rx_clip; + unsigned char low_tx_clip; + unsigned char high_tx_clip; + unsigned char num_of_rx; + unsigned char num_of_tx; + }; + unsigned char data[14]; + }; +}; + +struct synaptics_rmi4_f12_ctrl_23 { + union { + struct { + unsigned char finger_enable:1; + unsigned char active_stylus_enable:1; + unsigned char palm_enable:1; + unsigned char unclassified_object_enable:1; + unsigned char hovering_finger_enable:1; + unsigned char gloved_finger_enable:1; + unsigned char f12_ctr23_00_b6__7:2; + unsigned char max_reported_objects; + unsigned char f12_ctr23_02_b0:1; + unsigned char report_active_stylus_as_finger:1; + unsigned char report_palm_as_finger:1; + unsigned char report_unclassified_object_as_finger:1; + unsigned char report_hovering_finger_as_finger:1; + unsigned char report_gloved_finger_as_finger:1; + unsigned char report_narrow_object_swipe_as_finger:1; + unsigned char report_handedge_as_finger:1; + unsigned char cover_enable:1; + unsigned char stylus_enable:1; + unsigned char eraser_enable:1; + unsigned char small_object_enable:1; + unsigned char f12_ctr23_03_b4__7:4; + unsigned char report_cover_as_finger:1; + unsigned char report_stylus_as_finger:1; + unsigned char report_eraser_as_finger:1; + unsigned char report_small_object_as_finger:1; + unsigned char f12_ctr23_04_b4__7:4; + }; + unsigned char data[5]; + }; +}; + +struct synaptics_rmi4_f12_ctrl_31 { + union { + struct { + unsigned char max_x_coord_lsb; + unsigned char max_x_coord_msb; + unsigned char max_y_coord_lsb; + unsigned char max_y_coord_msb; + unsigned char rx_pitch_lsb; + unsigned char rx_pitch_msb; + unsigned char rx_clip_low; + unsigned char rx_clip_high; + unsigned char wedge_clip_low; + unsigned char wedge_clip_high; + unsigned char num_of_p; + unsigned char num_of_q; + }; + unsigned char data[12]; + }; +}; + +struct synaptics_rmi4_f12_ctrl_58 { + union { + struct { + unsigned char reporting_format; + unsigned char f12_ctr58_00_reserved; + unsigned char min_force_lsb; + unsigned char min_force_msb; + unsigned char max_force_lsb; + unsigned char max_force_msb; + unsigned char light_press_threshold_lsb; + unsigned char light_press_threshold_msb; + unsigned char light_press_hysteresis_lsb; + unsigned char light_press_hysteresis_msb; + unsigned char hard_press_threshold_lsb; + unsigned char hard_press_threshold_msb; + unsigned char hard_press_hysteresis_lsb; + unsigned char hard_press_hysteresis_msb; + }; + unsigned char data[14]; + }; +}; + +struct synaptics_rmi4_f12_finger_data { + unsigned char object_type_and_status; + unsigned char x_lsb; + unsigned char x_msb; + unsigned char y_lsb; + unsigned char y_msb; +#ifdef REPORT_2D_Z + unsigned char z; +#endif +#ifdef REPORT_2D_W + unsigned char wx; + unsigned char wy; +#endif +}; + +struct synaptics_rmi4_f1a_query { + union { + struct { + unsigned char max_button_count:3; + unsigned char f1a_query0_b3__4:2; + unsigned char has_query4:1; + unsigned char has_query3:1; + unsigned char has_query2:1; + unsigned char has_general_control:1; + unsigned char has_interrupt_enable:1; + unsigned char has_multibutton_select:1; + unsigned char has_tx_rx_map:1; + unsigned char has_perbutton_threshold:1; + unsigned char has_release_threshold:1; + unsigned char has_strongestbtn_hysteresis:1; + unsigned char has_filter_strength:1; + } __packed; + unsigned char data[2]; + }; +}; + +struct synaptics_rmi4_f1a_query_4 { + union { + struct { + unsigned char has_ctrl19:1; + unsigned char f1a_query4_b1__4:4; + unsigned char has_ctrl24:1; + unsigned char f1a_query4_b6__7:2; + } __packed; + unsigned char data[1]; + }; +}; + +struct synaptics_rmi4_f1a_control_0 { + union { + struct { + unsigned char multibutton_report:2; + unsigned char filter_mode:2; + unsigned char reserved:4; + } __packed; + unsigned char data[1]; + }; +}; + +struct synaptics_rmi4_f1a_control { + struct synaptics_rmi4_f1a_control_0 general_control; + unsigned char button_int_enable; + unsigned char multi_button; + unsigned char *txrx_map; + unsigned char *button_threshold; + unsigned char button_release_threshold; + unsigned char strongest_button_hysteresis; + unsigned char filter_strength; +}; + +struct synaptics_rmi4_f1a_handle { + int button_bitmask_size; + unsigned char max_count; + unsigned char valid_button_count; + unsigned char *button_data_buffer; + unsigned char *button_map; + struct synaptics_rmi4_f1a_query button_query; + struct synaptics_rmi4_f1a_control button_control; +}; + +struct synaptics_rmi4_exp_fhandler { + struct synaptics_rmi4_exp_fn *exp_fn; + bool insert; + bool remove; + struct list_head link; +}; + +struct synaptics_rmi4_exp_fn_data { + bool initialized; + bool queue_work; + struct mutex mutex; + struct list_head list; + struct delayed_work work; + struct workqueue_struct *workqueue; + struct synaptics_rmi4_data *rmi4_data; +}; + +static struct synaptics_rmi4_exp_fn_data exp_data; + +static struct synaptics_dsx_button_map *vir_button_map; + +static struct device_attribute attrs[] = { + __ATTR(reset, S_IWUSR, + synaptics_rmi4_show_error, + synaptics_rmi4_f01_reset_store), + __ATTR(productinfo, S_IRUGO, + synaptics_rmi4_f01_productinfo_show, + synaptics_rmi4_store_error), + __ATTR(buildid, S_IRUGO, + synaptics_rmi4_f01_buildid_show, + synaptics_rmi4_store_error), + __ATTR(flashprog, S_IRUGO, + synaptics_rmi4_f01_flashprog_show, + synaptics_rmi4_store_error), + __ATTR(0dbutton, (S_IRUGO | S_IWUSR), + synaptics_rmi4_0dbutton_show, + synaptics_rmi4_0dbutton_store), + __ATTR(suspend, S_IWUSR, + synaptics_rmi4_show_error, + synaptics_rmi4_suspend_store), + __ATTR(wake_gesture, (S_IRUGO | S_IWUSR), + synaptics_rmi4_wake_gesture_show, + synaptics_rmi4_wake_gesture_store), + __ATTR(irq_enable, (S_IRUGO | S_IWUSR), + synaptics_rmi4_irq_enable_show, + synaptics_rmi4_irq_enable_store), + __ATTR(pocketmode_on, (S_IRUGO | S_IWUSR), + synaptics_rmi4_pocketmode_on_show, + synaptics_rmi4_pocketmode_on_store), +}; + +#if defined(CONFIG_SECURE_TOUCH) +static DEVICE_ATTR(secure_touch_enable, (S_IRUGO | S_IWUSR | S_IWGRP), synaptics_secure_touch_enable_show, synaptics_secure_touch_enable_store); +static DEVICE_ATTR(secure_touch, S_IRUGO , synaptics_secure_touch_show, NULL); + +static int synaptics_secure_touch_clk_prepare_enable( + struct synaptics_rmi4_data *rmi4_data) +{ + int ret; + + ret = clk_prepare_enable(rmi4_data->iface_clk); + if (ret) { + dev_err(rmi4_data->pdev->dev.parent, + "error on clk_prepare_enable(iface_clk):%d\n", ret); + return ret; + } + + ret = clk_prepare_enable(rmi4_data->core_clk); + if (ret) { + clk_disable_unprepare(rmi4_data->iface_clk); + dev_err(rmi4_data->pdev->dev.parent, + "error clk_prepare_enable(core_clk):%d\n", ret); + } + return ret; +} + +static void synaptics_secure_touch_clk_disable_unprepare( + struct synaptics_rmi4_data *rmi4_data) +{ + clk_disable_unprepare(rmi4_data->core_clk); + clk_disable_unprepare(rmi4_data->iface_clk); +} + +static void synaptics_secure_touch_init(struct synaptics_rmi4_data *data) +{ + int ret = 0; + + data->st_initialized = 0; + init_completion(&data->st_powerdown); + init_completion(&data->st_irq_processed); + /* Get clocks */ + data->core_clk = clk_get(data->pdev->dev.parent, "core_clk"); + if (IS_ERR(data->core_clk)) { + ret = PTR_ERR(data->core_clk); + dev_err(data->pdev->dev.parent, + "%s: error on clk_get(core_clk):%d\n", __func__, ret); + return; + } + + data->iface_clk = clk_get(data->pdev->dev.parent, "iface_clk"); + if (IS_ERR(data->iface_clk)) { + ret = PTR_ERR(data->iface_clk); + dev_err(data->pdev->dev.parent, + "%s: error on clk_get(iface_clk)\n", __func__); + goto err_iface_clk; + } + + data->st_initialized = 1; + return; + +err_iface_clk: + clk_put(data->core_clk); + data->core_clk = NULL; +} +static void synaptics_secure_touch_notify(struct synaptics_rmi4_data *data) +{ + sysfs_notify(&data->pdev->dev.parent->kobj, NULL, "secure_touch"); +} +static irqreturn_t synaptics_filter_interrupt(struct synaptics_rmi4_data *data) +{ + if (atomic_read(&data->st_enabled)) { + if (atomic_cmpxchg(&data->st_pending_irqs, 0, 1) == 0) { + synaptics_secure_touch_notify(data); + wait_for_completion_interruptible( + &data->st_irq_processed); + } + return IRQ_HANDLED; + } + return IRQ_NONE; +} +static void synaptics_secure_touch_stop( + struct synaptics_rmi4_data *data, + int blocking) +{ + if (atomic_read(&data->st_enabled)) { + atomic_set(&data->st_pending_irqs, -1); + synaptics_secure_touch_notify(data); + if (blocking) + wait_for_completion_interruptible(&data->st_powerdown); + } +} +#else +static void synaptics_secure_touch_init(struct synaptics_rmi4_data *data) +{ +} +static irqreturn_t synaptics_filter_interrupt(struct synaptics_rmi4_data *data) +{ + return IRQ_NONE; +} +static void synaptics_secure_touch_stop( + struct synaptics_rmi4_data *data, + int blocking) +{ +} +#endif + +#if defined(CONFIG_SECURE_TOUCH) +static ssize_t synaptics_secure_touch_enable_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct synaptics_rmi4_data *data = dev_get_drvdata(dev); + + return scnprintf(buf, PAGE_SIZE, "%d", atomic_read(&data->st_enabled)); +} +/* + * Accept only "0" and "1" valid values. + * "0" will reset the st_enabled flag, then wake up the reading process and + * the interrupt handler. + * The bus driver is notified via pm_runtime that it is not required to stay + * awake anymore. + * It will also make sure the queue of events is emptied in the controller, + * in case a touch happened in between the secure touch being disabled and + * the local ISR being ungated. + * "1" will set the st_enabled flag and clear the st_pending_irqs flag. + * The bus driver is requested via pm_runtime to stay awake. + */ +static ssize_t synaptics_secure_touch_enable_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct synaptics_rmi4_data *data = dev_get_drvdata(dev); + struct i2c_client *client = container_of(data->pdev->dev.parent, struct i2c_client, dev); + struct device *adapter = client->adapter->dev.parent; + unsigned long value; + int err = 0; + + if (count > 2) + return -EINVAL; + + err = kstrtoul(buf, 10, &value); + if (err != 0) + return err; + + if (!data->st_initialized) + return -EIO; + + err = count; + + switch (value) { + case 0: + if (atomic_read(&data->st_enabled) == 0) + break; + + synaptics_secure_touch_clk_disable_unprepare(data); + pm_runtime_put_sync(adapter); + atomic_set(&data->st_enabled, 0); + synaptics_secure_touch_notify(data); + complete(&data->st_irq_processed); + synaptics_rmi4_irq(data->irq, data); + complete(&data->st_powerdown); + + break; + case 1: + if (atomic_read(&data->st_enabled)) { + err = -EBUSY; + break; + } + + synchronize_irq(data->irq); + if (pm_runtime_get_sync(adapter) < 0) { + dev_err(data->pdev->dev.parent, "pm_runtime_get_sync failed\n"); + err = -EIO; + break; + } + + if (synaptics_secure_touch_clk_prepare_enable(data) < 0) { + pm_runtime_put_sync(adapter); + err = -EIO; + break; + } + reinit_completion(&data->st_powerdown); + reinit_completion(&data->st_irq_processed); + atomic_set(&data->st_enabled, 1); + atomic_set(&data->st_pending_irqs, 0); + break; + default: + dev_err(data->pdev->dev.parent, + "unsupported value: %lu\n", value); + err = -EINVAL; + break; + } + return err; +} + +/* + * This function returns whether there are pending interrupts, or + * other error conditions that need to be signaled to the userspace library, + * according tot he following logic: + * - st_enabled is 0 if secure touch is not enabled, returning -EBADF + * - st_pending_irqs is -1 to signal that secure touch is in being stopped, + * returning -EINVAL + * - st_pending_irqs is 1 to signal that there is a pending irq, returning + * the value "1" to the sysfs read operation + * - st_pending_irqs is 0 (only remaining case left) if the pending interrupt + * has been processed, so the interrupt handler can be allowed to continue. + */ +static ssize_t synaptics_secure_touch_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct synaptics_rmi4_data *data = dev_get_drvdata(dev); + int val = 0; + + if (atomic_read(&data->st_enabled) == 0) + return -EBADF; + + if (atomic_cmpxchg(&data->st_pending_irqs, -1, 0) == -1) + return -EINVAL; + + if (atomic_cmpxchg(&data->st_pending_irqs, 1, 0) == 1) + val = 1; + else + complete(&data->st_irq_processed); + + return scnprintf(buf, PAGE_SIZE, "%u", val); + +} +#endif + +static DEVICE_ATTR(panel_color, S_IRUSR, synaptics_rmi4_panel_color_show, NULL); +static DEVICE_ATTR(panel_vendor, S_IRUSR, synaptics_rmi4_panel_vendor_show, NULL); + +static struct kobj_attribute virtual_key_map_attr = { + .attr = { + .name = VIRTUAL_KEY_MAP_FILE_NAME, + .mode = S_IRUGO, + }, + .show = synaptics_rmi4_virtual_key_map_show, +}; + +static ssize_t synaptics_rmi4_f01_reset_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned int reset; + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + + if (sscanf(buf, "%u", &reset) != 1) + return -EINVAL; + + if (reset != 1) + return -EINVAL; + + retval = synaptics_rmi4_reset_device(rmi4_data, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to issue reset command, error = %d\n", + __func__, retval); + return retval; + } + + return count; +} + +static ssize_t synaptics_rmi4_f01_productinfo_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + + return snprintf(buf, PAGE_SIZE, "0x%02x 0x%02x\n", + (rmi4_data->rmi4_mod_info.product_info[0]), + (rmi4_data->rmi4_mod_info.product_info[1])); +} + +static ssize_t synaptics_rmi4_f01_buildid_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + + return snprintf(buf, PAGE_SIZE, "%u\n", + rmi4_data->firmware_id); +} + +static ssize_t synaptics_rmi4_f01_flashprog_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int retval; + struct synaptics_rmi4_f01_device_status device_status; + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_data_base_addr, + device_status.data, + sizeof(device_status.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read device status, error = %d\n", + __func__, retval); + return retval; + } + + return snprintf(buf, PAGE_SIZE, "%u\n", + device_status.flash_prog); +} + +static ssize_t synaptics_rmi4_0dbutton_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + + return snprintf(buf, PAGE_SIZE, "%u\n", + rmi4_data->button_0d_enabled); +} + +static ssize_t synaptics_rmi4_0dbutton_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned int input; + unsigned char ii; + unsigned char intr_enable; + struct synaptics_rmi4_fn *fhandler; + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + struct synaptics_rmi4_device_info *rmi; + + rmi = &(rmi4_data->rmi4_mod_info); + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + input = input > 0 ? 1 : 0; + + if (rmi4_data->button_0d_enabled == input) + return count; + + if (list_empty(&rmi->support_fn_list)) + return -ENODEV; + + list_for_each_entry(fhandler, &rmi->support_fn_list, link) { + if (fhandler->fn_number == SYNAPTICS_RMI4_F1A) { + ii = fhandler->intr_reg_num; + + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_ctrl_base_addr + 1 + ii, + &intr_enable, + sizeof(intr_enable)); + if (retval < 0) + return retval; + + if (input == 1) + intr_enable |= fhandler->intr_mask; + else + intr_enable &= ~fhandler->intr_mask; + + retval = synaptics_rmi4_reg_write(rmi4_data, + rmi4_data->f01_ctrl_base_addr + 1 + ii, + &intr_enable, + sizeof(intr_enable)); + if (retval < 0) + return retval; + } + } + + rmi4_data->button_0d_enabled = input; + + return count; +} + +static ssize_t synaptics_rmi4_suspend_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + unsigned int input; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + if (input == 1) + synaptics_rmi4_suspend(dev); + else if (input == 0) + synaptics_rmi4_resume(dev); + else + return -EINVAL; + + return count; +} + +static ssize_t synaptics_rmi4_wake_gesture_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + + return snprintf(buf, PAGE_SIZE, "%u\n", + rmi4_data->enable_wakeup_gesture); +} + +static ssize_t synaptics_rmi4_wake_gesture_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + unsigned int input; + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + if (bdata->cut_off_power) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Unable to switch wakeup gesture mode\n", __func__); + return count; + } + + input = input > 0 ? 1 : 0; + + if (rmi4_data->f11_wakeup_gesture || rmi4_data->f12_wakeup_gesture) + rmi4_data->enable_wakeup_gesture = input; + + if (rmi4_data->suspend) + synaptics_rmi4_wakeup_reconfigure(rmi4_data, (bool)input); + + return count; +} + +static ssize_t synaptics_rmi4_irq_enable_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + + return snprintf(buf, PAGE_SIZE, "%u\n", + rmi4_data->irq_enabled); +} + +static ssize_t synaptics_rmi4_irq_enable_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + unsigned int input; + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + if (input) + enable_irq(rmi4_data->irq); + else + disable_irq(rmi4_data->irq); + + return count; +} + +static ssize_t synaptics_rmi4_pocketmode_on_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + + return snprintf(buf, PAGE_SIZE, "%u\n", + rmi4_data->pocketmode_on); +} + +static ssize_t synaptics_rmi4_pocketmode_on_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + unsigned int input; + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + if (input) + rmi4_data->pocketmode_on = true; + else + rmi4_data->pocketmode_on = false; + synaptics_rmi4_pocketmode(rmi4_data, rmi4_data->pocketmode_on); + + return count; +} + +static ssize_t synaptics_rmi4_panel_color_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + + return snprintf(buf, PAGE_SIZE, "%c\n", + rmi4_data->lockdown_info[2]); +} + +static ssize_t synaptics_rmi4_panel_vendor_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + + return snprintf(buf, PAGE_SIZE, "%c\n", + rmi4_data->lockdown_info[0]); +} + +static ssize_t synaptics_rmi4_virtual_key_map_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + int ii; + int cnt; + int count = 0; + + for (ii = 0; ii < vir_button_map->nbuttons; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, "0x01:%d:%d:%d:%d:%d\n", + vir_button_map->map[ii * 5 + 0], + vir_button_map->map[ii * 5 + 1], + vir_button_map->map[ii * 5 + 2], + vir_button_map->map[ii * 5 + 3], + vir_button_map->map[ii * 5 + 4]); + buf += cnt; + count += cnt; + } + + return count; +} + +static int synaptics_rmi4_f11_abs_report(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn *fhandler) +{ + int retval; + unsigned char touch_count = 0; /* number of touch points */ + unsigned char reg_index; + unsigned char finger; + unsigned char fingers_supported; + unsigned char num_of_finger_status_regs; + unsigned char finger_shift; + unsigned char finger_status; + unsigned char finger_status_reg[3]; + unsigned char detected_gestures; + unsigned short data_addr; + unsigned short data_offset; + int x; + int y; + int wx; + int wy; + int temp; + struct synaptics_rmi4_f11_data_1_5 data; + struct synaptics_rmi4_f11_extra_data *extra_data; + + /* + * The number of finger status registers is determined by the + * maximum number of fingers supported - 2 bits per finger. So + * the number of finger status registers to read is: + * register_count = ceil(max_num_of_fingers / 4) + */ + fingers_supported = fhandler->num_of_data_points; + num_of_finger_status_regs = (fingers_supported + 3) / 4; + data_addr = fhandler->full_addr.data_base; + + extra_data = (struct synaptics_rmi4_f11_extra_data *)fhandler->extra; + + if (rmi4_data->suspend && rmi4_data->wakeup_en) { + retval = synaptics_rmi4_reg_read(rmi4_data, + data_addr + extra_data->data38_offset, + &detected_gestures, + sizeof(detected_gestures)); + if (retval < 0) + return 0; + + if (detected_gestures) { + input_report_key(rmi4_data->input_dev, KEY_WAKEUP, 1); + input_sync(rmi4_data->input_dev); + input_report_key(rmi4_data->input_dev, KEY_WAKEUP, 0); + input_sync(rmi4_data->input_dev); + } + + return 0; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + data_addr, + finger_status_reg, + num_of_finger_status_regs); + if (retval < 0) + return 0; + + mutex_lock(&(rmi4_data->rmi4_report_mutex)); + + for (finger = 0; finger < fingers_supported; finger++) { + reg_index = finger / 4; + finger_shift = (finger % 4) * 2; + finger_status = (finger_status_reg[reg_index] >> finger_shift) + & MASK_2BIT; + + /* + * Each 2-bit finger status field represents the following: + * 00 = finger not present + * 01 = finger present and data accurate + * 10 = finger present but data may be inaccurate + * 11 = reserved + */ +#ifdef TYPE_B_PROTOCOL + input_mt_slot(rmi4_data->input_dev, finger); + input_mt_report_slot_state(rmi4_data->input_dev, + MT_TOOL_FINGER, finger_status); +#endif + + if (finger_status) { + data_offset = data_addr + + num_of_finger_status_regs + + (finger * sizeof(data.data)); + retval = synaptics_rmi4_reg_read(rmi4_data, + data_offset, + data.data, + sizeof(data.data)); + if (retval < 0) { + touch_count = 0; + goto exit; + } + + x = (data.x_position_11_4 << 4) | data.x_position_3_0; + y = (data.y_position_11_4 << 4) | data.y_position_3_0; + wx = data.wx; + wy = data.wy; + + if (rmi4_data->hw_if->board_data->swap_axes) { + temp = x; + x = y; + y = temp; + temp = wx; + wx = wy; + wy = temp; + } + + if (rmi4_data->hw_if->board_data->x_flip) + x = rmi4_data->sensor_max_x - x; + if (rmi4_data->hw_if->board_data->y_flip) + y = rmi4_data->sensor_max_y - y; + + input_report_key(rmi4_data->input_dev, + BTN_TOUCH, 1); + input_report_key(rmi4_data->input_dev, + BTN_TOOL_FINGER, 1); + input_report_abs(rmi4_data->input_dev, + ABS_MT_POSITION_X, x); + input_report_abs(rmi4_data->input_dev, + ABS_MT_POSITION_Y, y); +#ifdef REPORT_2D_W + input_report_abs(rmi4_data->input_dev, + ABS_MT_TOUCH_MAJOR, max(wx, wy)); + input_report_abs(rmi4_data->input_dev, + ABS_MT_TOUCH_MINOR, min(wx, wy)); +#endif +#ifndef TYPE_B_PROTOCOL + input_mt_sync(rmi4_data->input_dev); +#endif + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Finger %d: " + "status = 0x%02x, " + "x = %d, " + "y = %d, " + "wx = %d, " + "wy = %d\n", + __func__, finger, + finger_status, + x, y, wx, wy); + + touch_count++; + } + } + + if (touch_count == 0) { + input_report_key(rmi4_data->input_dev, + BTN_TOUCH, 0); + input_report_key(rmi4_data->input_dev, + BTN_TOOL_FINGER, 0); +#ifndef TYPE_B_PROTOCOL + input_mt_sync(rmi4_data->input_dev); +#endif + } + + input_sync(rmi4_data->input_dev); + +exit: + mutex_unlock(&(rmi4_data->rmi4_report_mutex)); + + return touch_count; +} + +static int synaptics_rmi4_f12_abs_report(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn *fhandler) +{ + int retval; + unsigned char touch_count = 0; /* number of touch points */ + unsigned char index; + unsigned char finger; + unsigned char fingers_to_process; + unsigned char finger_status; + unsigned char size_of_2d_data; + unsigned char gesture_type; + unsigned short data_addr; + int x; + int y; + int wx; + int wy; + int temp; +#if defined(REPORT_2D_PRESSURE) || defined(F51_DISCRETE_FORCE) + int pressure; +#endif + int touchs; +#ifdef REPORT_2D_PRESSURE + unsigned char f_fingers; + unsigned char f_lsb; + unsigned char f_msb; + unsigned char *f_data; +#endif +#ifdef F51_DISCRETE_FORCE + unsigned char force_level; +#endif + struct synaptics_rmi4_f12_extra_data *extra_data; + struct synaptics_rmi4_f12_finger_data *data; + struct synaptics_rmi4_f12_finger_data *finger_data; + static unsigned char finger_presence; + static unsigned char stylus_presence; +#ifdef F12_DATA_15_WORKAROUND + static unsigned char objects_already_present; +#endif + + if (rmi4_data->input_dev == NULL) { + dev_err(rmi4_data->pdev->dev.parent, "input_dev is NULL, do not report data\n"); + + return 0; + } + + fingers_to_process = fhandler->num_of_data_points; + data_addr = fhandler->full_addr.data_base; + extra_data = (struct synaptics_rmi4_f12_extra_data *)fhandler->extra; + size_of_2d_data = sizeof(struct synaptics_rmi4_f12_finger_data); + + if (rmi4_data->suspend && rmi4_data->wakeup_en) { + retval = synaptics_rmi4_reg_read(rmi4_data, + data_addr + extra_data->data4_offset, + rmi4_data->gesture_detection, + sizeof(rmi4_data->gesture_detection)); + if (retval < 0) + return 0; + + gesture_type = rmi4_data->gesture_detection[0]; + if (gesture_type && gesture_type != F12_UDG_DETECT) { + input_report_key(rmi4_data->input_dev, KEY_WAKEUP, 1); + input_sync(rmi4_data->input_dev); + input_report_key(rmi4_data->input_dev, KEY_WAKEUP, 0); + input_sync(rmi4_data->input_dev); + dev_err(rmi4_data->pdev->dev.parent, "double click send input event\n"); + } + + return 0; + } + + /* Determine the total number of fingers to process */ + if (extra_data->data15_size) { + retval = synaptics_rmi4_reg_read(rmi4_data, + data_addr + extra_data->data15_offset, + extra_data->data15_data, + extra_data->data15_size); + if (retval < 0) + return 0; + + /* Start checking from the highest bit */ + index = extra_data->data15_size - 1; /* Highest byte */ + finger = (fingers_to_process - 1) % 8; /* Highest bit */ + do { + if (extra_data->data15_data[index] & (1 << finger)) + break; + + if (finger) { + finger--; + } else if (index > 0) { + index--; /* Move to the next lower byte */ + finger = 7; + } + + fingers_to_process--; + } while (fingers_to_process); + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Number of fingers to process = %d\n", + __func__, fingers_to_process); + } + +#ifdef F12_DATA_15_WORKAROUND + fingers_to_process = max(fingers_to_process, objects_already_present); +#endif + + if (!fingers_to_process) { + synaptics_rmi4_free_fingers(rmi4_data); + finger_presence = 0; + stylus_presence = 0; + rmi4_data->touchs = 0; + return 0; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + data_addr + extra_data->data1_offset, + (unsigned char *)fhandler->data, + fingers_to_process * size_of_2d_data); + if (retval < 0) + return 0; + + data = (struct synaptics_rmi4_f12_finger_data *)fhandler->data; + +#ifdef REPORT_2D_PRESSURE + if (rmi4_data->report_pressure) { + retval = synaptics_rmi4_reg_read(rmi4_data, + data_addr + extra_data->data29_offset, + extra_data->data29_data, + extra_data->data29_size); + if (retval < 0) + return 0; + } +#endif + + mutex_lock(&(rmi4_data->rmi4_report_mutex)); + + for (finger = 0; finger < fingers_to_process; finger++) { + finger_data = data + finger; + finger_status = finger_data->object_type_and_status; + +#ifdef F12_DATA_15_WORKAROUND + objects_already_present = finger + 1; +#endif + + x = (finger_data->x_msb << 8) | (finger_data->x_lsb); + y = (finger_data->y_msb << 8) | (finger_data->y_lsb); +#ifdef REPORT_2D_W + wx = finger_data->wx; + wy = finger_data->wy; +#endif + + if (rmi4_data->hw_if->board_data->swap_axes) { + temp = x; + x = y; + y = temp; + temp = wx; + wx = wy; + wy = temp; + } + + if (rmi4_data->hw_if->board_data->x_flip) + x = rmi4_data->sensor_max_x - x; + if (rmi4_data->hw_if->board_data->y_flip) + y = rmi4_data->sensor_max_y - y; + + switch (finger_status) { + case F12_FINGER_STATUS: + case F12_GLOVED_FINGER_STATUS: + if (stylus_presence) /* Stylus has priority over fingers */ + break; +#ifdef TYPE_B_PROTOCOL + input_mt_slot(rmi4_data->input_dev, finger); + input_mt_report_slot_state(rmi4_data->input_dev, + MT_TOOL_FINGER, 1); +#endif + + input_report_key(rmi4_data->input_dev, + BTN_TOUCH, 1); + input_report_key(rmi4_data->input_dev, + BTN_TOOL_FINGER, 1); + input_report_abs(rmi4_data->input_dev, + ABS_MT_POSITION_X, x); + input_report_abs(rmi4_data->input_dev, + ABS_MT_POSITION_Y, y); +#ifdef REPORT_2D_W + if (rmi4_data->wedge_sensor) { + input_report_abs(rmi4_data->input_dev, + ABS_MT_TOUCH_MAJOR, wx); + input_report_abs(rmi4_data->input_dev, + ABS_MT_TOUCH_MINOR, wx); + } else { + input_report_abs(rmi4_data->input_dev, + ABS_MT_TOUCH_MAJOR, + max(wx, wy)); + input_report_abs(rmi4_data->input_dev, + ABS_MT_TOUCH_MINOR, + min(wx, wy)); + } +#endif +#ifdef REPORT_2D_PRESSURE + if (rmi4_data->report_pressure) { + f_fingers = extra_data->data29_size / 2; + f_data = extra_data->data29_data; + if (finger + 1 > f_fingers) { + pressure = 1; + } else { + f_lsb = finger * 2; + f_msb = finger * 2 + 1; + pressure = (int)f_data[f_lsb] << 0 | + (int)f_data[f_msb] << 8; + } + pressure = pressure > 0 ? pressure : 1; + if (pressure > rmi4_data->force_max) + pressure = rmi4_data->force_max; + input_report_abs(rmi4_data->input_dev, + ABS_MT_PRESSURE, pressure); + } +#elif defined(F51_DISCRETE_FORCE) + if (finger == 0) { + retval = synaptics_rmi4_reg_read(rmi4_data, + FORCE_LEVEL_ADDR, + &force_level, + sizeof(force_level)); + if (retval < 0) + return 0; + pressure = force_level > 0 ? force_level : 1; + } else { + pressure = 1; + } + input_report_abs(rmi4_data->input_dev, + ABS_MT_PRESSURE, pressure); +#endif +#ifndef TYPE_B_PROTOCOL + input_mt_sync(rmi4_data->input_dev); +#endif + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Finger %d: " + "status = 0x%02x, " + "x = %d, " + "y = %d, " + "wx = %d, " + "wy = %d\n", + __func__, finger, + finger_status, + x, y, wx, wy); + + finger_presence = 1; + touch_count++; + touchs |= BIT(finger); + rmi4_data->touchs |= BIT(finger); + break; + case F12_PALM_STATUS: + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Finger %d: " + "x = %d, " + "y = %d, " + "wx = %d, " + "wy = %d\n", + __func__, finger, + x, y, wx, wy); + break; + case F12_STYLUS_STATUS: + case F12_ERASER_STATUS: + if (finger_presence) { /* Stylus has priority over fingers */ + mutex_unlock(&(rmi4_data->rmi4_report_mutex)); + synaptics_rmi4_free_fingers(rmi4_data); + mutex_lock(&(rmi4_data->rmi4_report_mutex)); + finger_presence = 0; + } + if (stylus_presence) {/* Allow one stylus at a timee */ + if (finger + 1 != stylus_presence) + break; + } + input_report_key(rmi4_data->stylus_dev, + BTN_TOUCH, 1); + if (finger_status == F12_STYLUS_STATUS) { + input_report_key(rmi4_data->stylus_dev, + BTN_TOOL_PEN, 1); + } else { + input_report_key(rmi4_data->stylus_dev, + BTN_TOOL_RUBBER, 1); + } + input_report_abs(rmi4_data->stylus_dev, + ABS_X, x); + input_report_abs(rmi4_data->stylus_dev, + ABS_Y, y); + + stylus_presence = finger + 1; + touch_count++; + break; + default: +#ifdef TYPE_B_PROTOCOL + input_mt_slot(rmi4_data->input_dev, finger); + input_mt_report_slot_state(rmi4_data->input_dev, + MT_TOOL_FINGER, 0); +#endif + rmi4_data->touchs &= ~BIT(finger); + touchs &= ~BIT(finger); + break; + } + } + + for (finger = 0; finger < fhandler->num_of_data_points; finger++) { + if (BIT(finger) & (rmi4_data->touchs ^ touchs)) { + input_mt_slot(rmi4_data->input_dev, finger); + input_mt_report_slot_state(rmi4_data->input_dev, + MT_TOOL_FINGER, 0); + } + } + + if (touch_count == 0) { + finger_presence = 0; +#ifdef F12_DATA_15_WORKAROUND + objects_already_present = 0; +#endif + input_report_key(rmi4_data->input_dev, + BTN_TOUCH, 0); + input_report_key(rmi4_data->input_dev, + BTN_TOOL_FINGER, 0); +#ifndef TYPE_B_PROTOCOL + input_mt_sync(rmi4_data->input_dev); +#endif + + if (rmi4_data->stylus_enable) { + stylus_presence = 0; + input_report_key(rmi4_data->stylus_dev, + BTN_TOUCH, 0); + input_report_key(rmi4_data->stylus_dev, + BTN_TOOL_PEN, 0); + if (rmi4_data->eraser_enable) { + input_report_key(rmi4_data->stylus_dev, + BTN_TOOL_RUBBER, 0); + } + } + + rmi4_data->touchs = 0; + } + + input_sync(rmi4_data->input_dev); + + mutex_unlock(&(rmi4_data->rmi4_report_mutex)); + + return touch_count; +} + +static void synaptics_rmi4_f1a_report(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn *fhandler) +{ + int retval; + unsigned char touch_count = 0; + unsigned char button; + unsigned char index; + unsigned char shift; + unsigned char status; + unsigned char *data; + unsigned short data_addr = fhandler->full_addr.data_base; + struct synaptics_rmi4_f1a_handle *f1a = fhandler->data; + static unsigned char do_once = 1; +#ifdef NO_0D_WHILE_2D + static bool before_2d_status[MAX_NUMBER_OF_BUTTONS]; + static bool while_2d_status[MAX_NUMBER_OF_BUTTONS]; +#endif + + if (do_once) { +#ifdef NO_0D_WHILE_2D + memset(before_2d_status, 0, sizeof(before_2d_status)); + memset(while_2d_status, 0, sizeof(while_2d_status)); +#endif + do_once = 0; + } + dev_err(rmi4_data->pdev->dev.parent, + "%s: touchkey interrupt event\n", + __func__); + + retval = synaptics_rmi4_reg_read(rmi4_data, + data_addr, + f1a->button_data_buffer, + f1a->button_bitmask_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read button data registers\n", + __func__); + return; + } + + data = f1a->button_data_buffer; + + mutex_lock(&(rmi4_data->rmi4_report_mutex)); + + for (button = 0; button < f1a->valid_button_count; button++) { + index = button / 8; + shift = button % 8; + status = ((data[index] >> shift) & MASK_1BIT); + + dev_err(rmi4_data->pdev->dev.parent, + "%s: Button %d (code %d) ->%d\n", + __func__, button, + f1a->button_map[button], + status); +#ifdef NO_0D_WHILE_2D + if (rmi4_data->fingers_on_2d == false) { + if (status == 1) { + before_2d_status[button] = 1; + } else { + if (while_2d_status[button] == 1) { + while_2d_status[button] = 0; + continue; + } else { + before_2d_status[button] = 0; + } + } + + touch_count++; + input_report_key(rmi4_data->input_dev, + f1a->button_map[button], + status); + } else { + if (before_2d_status[button] == 1) { + before_2d_status[button] = 0; + touch_count++; + input_report_key(rmi4_data->input_dev, + f1a->button_map[button], + status); + } else { + if (status == 1) + while_2d_status[button] = 1; + else + while_2d_status[button] = 0; + } + } +#else + touch_count++; + input_report_key(rmi4_data->input_dev, + f1a->button_map[button], + status); +#endif + } + + if (touch_count) + input_sync(rmi4_data->input_dev); + + mutex_unlock(&(rmi4_data->rmi4_report_mutex)); + + return; +} + +static void synaptics_rmi4_report_touch(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn *fhandler) +{ + unsigned char touch_count_2d; + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Function %02x reporting\n", + __func__, fhandler->fn_number); + + switch (fhandler->fn_number) { + case SYNAPTICS_RMI4_F11: + touch_count_2d = synaptics_rmi4_f11_abs_report(rmi4_data, + fhandler); + + if (touch_count_2d) + rmi4_data->fingers_on_2d = true; + else + rmi4_data->fingers_on_2d = false; + break; + case SYNAPTICS_RMI4_F12: + touch_count_2d = synaptics_rmi4_f12_abs_report(rmi4_data, + fhandler); + + if (touch_count_2d) + rmi4_data->fingers_on_2d = true; + else + rmi4_data->fingers_on_2d = false; + break; + case SYNAPTICS_RMI4_F1A: + synaptics_rmi4_f1a_report(rmi4_data, fhandler); + break; + default: + break; + } + + return; +} + +static void synaptics_rmi4_tddi_reset_work(struct work_struct *work) +{ + struct synaptics_rmi4_data *rmi4_data = container_of(work, struct synaptics_rmi4_data, + tddi_reset_work.work); + + pr_info("%s: START\n", __func__); + + rmi4_data->irq_enabled = false; + disable_irq_nosync(rmi4_data->irq); + + mdss_fb_prim_panel_recover(); + + enable_irq(rmi4_data->irq); + rmi4_data->irq_enabled = true; + + pr_info("%s: DONE\n", __func__); +} + + +static void synaptics_rmi4_sensor_report(struct synaptics_rmi4_data *rmi4_data, + bool report) +{ + int retval; + unsigned char data[MAX_INTR_REGISTERS + 1]; + unsigned char *intr = &data[1]; + bool was_in_bl_mode; + struct synaptics_rmi4_f01_device_status status; + struct synaptics_rmi4_fn *fhandler; + struct synaptics_rmi4_exp_fhandler *exp_fhandler; + struct synaptics_rmi4_device_info *rmi; + + rmi = &(rmi4_data->rmi4_mod_info); + + /* + * Get interrupt status information from F01 Data1 register to + * determine the source(s) that are flagging the interrupt. + */ + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_data_base_addr, + data, + rmi4_data->num_of_intr_regs + 1); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read interrupt status\n", + __func__); + return; + } + + status.data[0] = data[0]; + if (status.status_code == STATUS_CRC_IN_PROGRESS) { + retval = synaptics_rmi4_check_status(rmi4_data, + &was_in_bl_mode); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to check status\n", + __func__); + return; + } + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_data_base_addr, + status.data, + sizeof(status.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read device status\n", + __func__); + return; + } + }else if (status.status_code == STATUS_FIRMWARE_CRC_FAILURE) { + if (rmi4_data->chip_is_tddi) { + schedule_delayed_work(&rmi4_data->tddi_reset_work, msecs_to_jiffies(5)); + return; + } + } + if (status.unconfigured && !status.flash_prog) { + pr_notice("%s: spontaneous reset detected\n", __func__); + retval = synaptics_rmi4_reinit_device(rmi4_data); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to reinit device\n", + __func__); + } + } + + if (!report) + return; + + /* + * Traverse the function handler list and service the source(s) + * of the interrupt accordingly. + */ + if (!list_empty(&rmi->support_fn_list)) { + list_for_each_entry(fhandler, &rmi->support_fn_list, link) { + if (fhandler->num_of_data_sources) { + if (fhandler->intr_mask & + intr[fhandler->intr_reg_num]) { + synaptics_rmi4_report_touch(rmi4_data, + fhandler); + } + } + } + } + + mutex_lock(&exp_data.mutex); + if (!list_empty(&exp_data.list)) { + list_for_each_entry(exp_fhandler, &exp_data.list, link) { + if (!exp_fhandler->insert && + !exp_fhandler->remove && + (exp_fhandler->exp_fn->attn != NULL)) + exp_fhandler->exp_fn->attn(rmi4_data, intr[0]); + } + } + mutex_unlock(&exp_data.mutex); + + return; +} + +static irqreturn_t synaptics_rmi4_irq(int irq, void *data) +{ + struct synaptics_rmi4_data *rmi4_data = data; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + if (gpio_get_value(bdata->irq_gpio) != bdata->irq_on_state) + goto exit; + + if (IRQ_HANDLED == synaptics_filter_interrupt(data)) + return IRQ_HANDLED; + + synaptics_rmi4_sensor_report(rmi4_data, true); + +exit: + return IRQ_HANDLED; +} + +static int synaptics_rmi4_int_enable(struct synaptics_rmi4_data *rmi4_data, + bool enable) +{ + int retval = 0; + unsigned char ii; + unsigned char zero = 0x00; + unsigned char *intr_mask; + unsigned short intr_addr; + + intr_mask = rmi4_data->intr_mask; + + for (ii = 0; ii < rmi4_data->num_of_intr_regs; ii++) { + if (intr_mask[ii] != 0x00) { + intr_addr = rmi4_data->f01_ctrl_base_addr + 1 + ii; + if (enable) { + retval = synaptics_rmi4_reg_write(rmi4_data, + intr_addr, + &(intr_mask[ii]), + sizeof(intr_mask[ii])); + if (retval < 0) + return retval; + } else { + retval = synaptics_rmi4_reg_write(rmi4_data, + intr_addr, + &zero, + sizeof(zero)); + if (retval < 0) + return retval; + } + } + } + + return retval; +} + +static int synaptics_rmi4_irq_enable(struct synaptics_rmi4_data *rmi4_data, + bool enable, bool attn_only) +{ + int retval = 0; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + if (attn_only) { + retval = synaptics_rmi4_int_enable(rmi4_data, enable); + return retval; + } + + if (enable) { + if (rmi4_data->irq_enabled) + return retval; + + retval = synaptics_rmi4_int_enable(rmi4_data, false); + if (retval < 0) + return retval; + + /* Process and clear interrupts */ + synaptics_rmi4_sensor_report(rmi4_data, false); + + retval = request_threaded_irq(rmi4_data->irq, NULL, + synaptics_rmi4_irq, bdata->irq_flags, + PLATFORM_DRIVER_NAME, rmi4_data); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create irq thread\n", + __func__); + return retval; + } + + retval = synaptics_rmi4_int_enable(rmi4_data, true); + if (retval < 0) + return retval; + + rmi4_data->irq_enabled = true; + } else { + if (rmi4_data->irq_enabled) { + disable_irq(rmi4_data->irq); + free_irq(rmi4_data->irq, rmi4_data); + rmi4_data->irq_enabled = false; + } + } + + return retval; +} + +static void synaptics_rmi4_set_intr_mask(struct synaptics_rmi4_fn *fhandler, + struct synaptics_rmi4_fn_desc *fd, + unsigned int intr_count) +{ + unsigned char ii; + unsigned char intr_offset; + + fhandler->intr_reg_num = (intr_count + 7) / 8; + if (fhandler->intr_reg_num != 0) + fhandler->intr_reg_num -= 1; + + /* Set an enable bit for each data source */ + intr_offset = intr_count % 8; + fhandler->intr_mask = 0; + for (ii = intr_offset; + ii < (fd->intr_src_count + intr_offset); + ii++) + fhandler->intr_mask |= 1 << ii; + + return; +} + +static int synaptics_rmi4_query_product_id(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + unsigned short lockdown_addr; + + /* Product ID addr starts from F01_RMI_QUERY11 */ + lockdown_addr = rmi4_data->f01_query_base_addr + F01_PROD_ID_OFFSET; + + retval = synaptics_rmi4_reg_read(rmi4_data, + lockdown_addr, + rmi4_data->lockdown_info, + LOCKDOWN_INFO_SIZE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "Failed reading reg %d\n", + lockdown_addr); + return retval; + } + + dev_info(rmi4_data->pdev->dev.parent, + "Lockdown info: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X", + rmi4_data->lockdown_info[0], rmi4_data->lockdown_info[1], + rmi4_data->lockdown_info[2], rmi4_data->lockdown_info[3], + rmi4_data->lockdown_info[4], rmi4_data->lockdown_info[5], + rmi4_data->lockdown_info[6], rmi4_data->lockdown_info[7]); + + return 0; +} + +static int synaptics_rmi4_query_chip_id(struct synaptics_rmi4_data *rmi4_data) +{ + int retval, i; + unsigned short chipdata_addr; + unsigned char query_data[8] = {0}; + + chipdata_addr = rmi4_data->f01_query_base_addr + F01_PROD_ID_OFFSET; + + retval = synaptics_rmi4_reg_read(rmi4_data, + chipdata_addr, + query_data, + 8); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "Failed reading reg %d\n", + chipdata_addr); + return retval; + } + + dev_info(rmi4_data->pdev->dev.parent, + "chip info: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X", + query_data[0], query_data[1], + query_data[2], query_data[3], + query_data[4], query_data[5], + query_data[6], query_data[7]); + + for (i = 0; i < rmi4_data->hw_if->board_data->config_array_size; i++) { + if (!memcmp(rmi4_data->hw_if->board_data->config_array[i].chip_id_name, + query_data, + strlen(rmi4_data->hw_if->board_data->config_array[i].chip_id_name))) { + rmi4_data->chip_id = rmi4_data->hw_if->board_data->config_array[i].chip_id; + rmi4_data->chip_is_tddi = rmi4_data->hw_if->board_data->config_array[i].chip_is_tddi; + rmi4_data->open_test_b7 = rmi4_data->hw_if->board_data->config_array[i].open_test_b7; + rmi4_data->short_test_extend = rmi4_data->hw_if->board_data->config_array[i].short_test_extend; + rmi4_data->factory_param = rmi4_data->hw_if->board_data->config_array[i].factory_param; + rmi4_data->panel_power_seq = rmi4_data->hw_if->board_data->config_array[i].panel_power_seq; + if (rmi4_data->chip_is_tddi) + rmi4_data->hw_if->board_data->reset_gpio = -1; + break; + } + } + + if (i >= rmi4_data->hw_if->board_data->config_array_size) { + dev_err(rmi4_data->pdev->dev.parent, "failed to match the chip id\n"); + rmi4_data->chip_id = -1; /* Set chip_id -1 to ensure it won't do firmware upgrading */ + return -EINVAL; + } + + return 0; +} + +static int synaptics_rmi4_f01_init(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn *fhandler, + struct synaptics_rmi4_fn_desc *fd, + unsigned int intr_count) +{ + fhandler->fn_number = fd->fn_number; + fhandler->num_of_data_sources = fd->intr_src_count; + fhandler->data = NULL; + fhandler->extra = NULL; + + synaptics_rmi4_set_intr_mask(fhandler, fd, intr_count); + + rmi4_data->f01_query_base_addr = fd->query_base_addr; + rmi4_data->f01_ctrl_base_addr = fd->ctrl_base_addr; + rmi4_data->f01_data_base_addr = fd->data_base_addr; + rmi4_data->f01_cmd_base_addr = fd->cmd_base_addr; + + if (rmi4_data->hw_if->board_data->lockdown_area == LOCKDOWN_AREA_PRODUCT_ID) + synaptics_rmi4_query_product_id(rmi4_data); + + return 0; +} + +static int synaptics_rmi4_f11_init(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn *fhandler, + struct synaptics_rmi4_fn_desc *fd, + unsigned int intr_count) +{ + int retval; + int temp; + unsigned char offset; + unsigned char fingers_supported; + struct synaptics_rmi4_f11_extra_data *extra_data; + struct synaptics_rmi4_f11_query_0_5 query_0_5; + struct synaptics_rmi4_f11_query_7_8 query_7_8; + struct synaptics_rmi4_f11_query_9 query_9; + struct synaptics_rmi4_f11_query_12 query_12; + struct synaptics_rmi4_f11_query_27 query_27; + struct synaptics_rmi4_f11_ctrl_6_9 control_6_9; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + fhandler->fn_number = fd->fn_number; + fhandler->num_of_data_sources = fd->intr_src_count; + fhandler->extra = kmalloc(sizeof(*extra_data), GFP_KERNEL); + if (!fhandler->extra) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for fhandler->extra\n", + __func__); + return -ENOMEM; + } + extra_data = (struct synaptics_rmi4_f11_extra_data *)fhandler->extra; + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.query_base, + query_0_5.data, + sizeof(query_0_5.data)); + if (retval < 0) + return retval; + + /* Maximum number of fingers supported */ + if (query_0_5.num_of_fingers <= 4) + fhandler->num_of_data_points = query_0_5.num_of_fingers + 1; + else if (query_0_5.num_of_fingers == 5) + fhandler->num_of_data_points = 10; + + rmi4_data->num_of_fingers = fhandler->num_of_data_points; + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.ctrl_base + 6, + control_6_9.data, + sizeof(control_6_9.data)); + if (retval < 0) + return retval; + + /* Maximum x and y */ + rmi4_data->sensor_max_x = control_6_9.sensor_max_x_pos_7_0 | + (control_6_9.sensor_max_x_pos_11_8 << 8); + rmi4_data->sensor_max_y = control_6_9.sensor_max_y_pos_7_0 | + (control_6_9.sensor_max_y_pos_11_8 << 8); + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Function %02x max x = %d max y = %d\n", + __func__, fhandler->fn_number, + rmi4_data->sensor_max_x, + rmi4_data->sensor_max_y); + + rmi4_data->max_touch_width = MAX_F11_TOUCH_WIDTH; + + if (bdata->swap_axes) { + temp = rmi4_data->sensor_max_x; + rmi4_data->sensor_max_x = rmi4_data->sensor_max_y; + rmi4_data->sensor_max_y = temp; + } + + synaptics_rmi4_set_intr_mask(fhandler, fd, intr_count); + + fhandler->data = NULL; + + offset = sizeof(query_0_5.data); + + /* query 6 */ + if (query_0_5.has_rel) + offset += 1; + + /* queries 7 8 */ + if (query_0_5.has_gestures) { + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.query_base + offset, + query_7_8.data, + sizeof(query_7_8.data)); + if (retval < 0) + return retval; + + offset += sizeof(query_7_8.data); + } + + /* query 9 */ + if (query_0_5.has_query_9) { + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.query_base + offset, + query_9.data, + sizeof(query_9.data)); + if (retval < 0) + return retval; + + offset += sizeof(query_9.data); + } + + /* query 10 */ + if (query_0_5.has_gestures && query_7_8.has_touch_shapes) + offset += 1; + + /* query 11 */ + if (query_0_5.has_query_11) + offset += 1; + + /* query 12 */ + if (query_0_5.has_query_12) { + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.query_base + offset, + query_12.data, + sizeof(query_12.data)); + if (retval < 0) + return retval; + + offset += sizeof(query_12.data); + } + + /* query 13 */ + if (query_0_5.has_jitter_filter) + offset += 1; + + /* query 14 */ + if (query_0_5.has_query_12 && query_12.has_general_information_2) + offset += 1; + + /* queries 15 16 17 18 19 20 21 22 23 24 25 26*/ + if (query_0_5.has_query_12 && query_12.has_physical_properties) + offset += 12; + + /* query 27 */ + if (query_0_5.has_query_27) { + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.query_base + offset, + query_27.data, + sizeof(query_27.data)); + if (retval < 0) + return retval; + + rmi4_data->f11_wakeup_gesture = query_27.has_wakeup_gesture; + } + + if (!rmi4_data->f11_wakeup_gesture) + return retval; + + /* data 0 */ + fingers_supported = fhandler->num_of_data_points; + offset = (fingers_supported + 3) / 4; + + /* data 1 2 3 4 5 */ + offset += 5 * fingers_supported; + + /* data 6 7 */ + if (query_0_5.has_rel) + offset += 2 * fingers_supported; + + /* data 8 */ + if (query_0_5.has_gestures && query_7_8.data[0]) + offset += 1; + + /* data 9 */ + if (query_0_5.has_gestures && (query_7_8.data[0] || query_7_8.data[1])) + offset += 1; + + /* data 10 */ + if (query_0_5.has_gestures && + (query_7_8.has_pinch || query_7_8.has_flick)) + offset += 1; + + /* data 11 12 */ + if (query_0_5.has_gestures && + (query_7_8.has_flick || query_7_8.has_rotate)) + offset += 2; + + /* data 13 */ + if (query_0_5.has_gestures && query_7_8.has_touch_shapes) + offset += (fingers_supported + 3) / 4; + + /* data 14 15 */ + if (query_0_5.has_gestures && + (query_7_8.has_scroll_zones || + query_7_8.has_multi_finger_scroll || + query_7_8.has_chiral_scroll)) + offset += 2; + + /* data 16 17 */ + if (query_0_5.has_gestures && + (query_7_8.has_scroll_zones && + query_7_8.individual_scroll_zones)) + offset += 2; + + /* data 18 19 20 21 22 23 24 25 26 27 */ + if (query_0_5.has_query_9 && query_9.has_contact_geometry) + offset += 10 * fingers_supported; + + /* data 28 */ + if (query_0_5.has_bending_correction || + query_0_5.has_large_object_suppression) + offset += 1; + + /* data 29 30 31 */ + if (query_0_5.has_query_9 && query_9.has_pen_hover_discrimination) + offset += 3; + + /* data 32 */ + if (query_0_5.has_query_12 && + query_12.has_small_object_detection_tuning) + offset += 1; + + /* data 33 34 */ + if (query_0_5.has_query_27 && query_27.f11_query27_b0) + offset += 2; + + /* data 35 */ + if (query_0_5.has_query_12 && query_12.has_8bit_w) + offset += fingers_supported; + + /* data 36 */ + if (query_0_5.has_bending_correction) + offset += 1; + + /* data 37 */ + if (query_0_5.has_query_27 && query_27.has_data_37) + offset += 1; + + /* data 38 */ + if (query_0_5.has_query_27 && query_27.has_wakeup_gesture) + extra_data->data38_offset = offset; + + return retval; +} + +static int synaptics_rmi4_f12_set_enables(struct synaptics_rmi4_data *rmi4_data, + unsigned short ctrl28) +{ + int retval; + static unsigned short ctrl_28_address; + + if (ctrl28) + ctrl_28_address = ctrl28; + + retval = synaptics_rmi4_reg_write(rmi4_data, + ctrl_28_address, + &rmi4_data->report_enable, + sizeof(rmi4_data->report_enable)); + if (retval < 0) + return retval; + + return retval; +} + +static int synaptics_rmi4_f12_find_sub(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn *fhandler, + unsigned char *presence, unsigned char presence_size, + unsigned char structure_offset, unsigned char reg, + unsigned char sub) +{ + int retval; + unsigned char cnt; + unsigned char regnum; + unsigned char bitnum; + unsigned char p_index; + unsigned char s_index; + unsigned char offset; + unsigned char max_reg; + unsigned char *structure; + + max_reg = (presence_size - 1) * 8 - 1; + + if (reg > max_reg) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Register number (%d) over limit\n", + __func__, reg); + return -EINVAL; + } + + p_index = reg / 8 + 1; + bitnum = reg % 8; + if ((presence[p_index] & (1 << bitnum)) == 0x00) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Register %d is not present\n", + __func__, reg); + return -EINVAL; + } + + structure = kmalloc(presence[0], GFP_KERNEL); + if (!structure) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for structure register\n", + __func__); + return -ENOMEM; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.query_base + structure_offset, + structure, + presence[0]); + if (retval < 0) + goto exit; + + s_index = 0; + + for (regnum = 0; regnum < reg; regnum++) { + p_index = regnum / 8 + 1; + bitnum = regnum % 8; + if ((presence[p_index] & (1 << bitnum)) == 0x00) + continue; + + if (structure[s_index] == 0x00) + s_index += 3; + else + s_index++; + + while (structure[s_index] & ~MASK_7BIT) + s_index++; + + s_index++; + } + + cnt = 0; + s_index++; + offset = sub / 7; + bitnum = sub % 7; + + do { + if (cnt == offset) { + if (structure[s_index + cnt] & (1 << bitnum)) + retval = 1; + else + retval = 0; + goto exit; + } + cnt++; + } while (structure[s_index + cnt - 1] & ~MASK_7BIT); + + retval = 0; + +exit: + kfree(structure); + + return retval; +} + +static int synaptics_rmi4_f12_init(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn *fhandler, + struct synaptics_rmi4_fn_desc *fd, + unsigned int intr_count) +{ + int retval = 0; + int temp; + unsigned char subpacket; + unsigned char ctrl_23_size; + unsigned char size_of_2d_data; + unsigned char size_of_query5; + unsigned char size_of_query8; + unsigned char ctrl_8_offset; + unsigned char ctrl_20_offset; + unsigned char ctrl_23_offset; + unsigned char ctrl_26_offset; + unsigned char ctrl_27_offset; + unsigned char ctrl_28_offset; + unsigned char ctrl_31_offset; + unsigned char ctrl_47_offset; + unsigned char ctrl_58_offset; + unsigned char num_of_fingers; + struct synaptics_rmi4_f12_extra_data *extra_data; + struct synaptics_rmi4_f12_query_5 *query_5 = NULL; + struct synaptics_rmi4_f12_query_8 *query_8 = NULL; + struct synaptics_rmi4_f12_ctrl_8 *ctrl_8 = NULL; + struct synaptics_rmi4_f12_ctrl_23 *ctrl_23 = NULL; + struct synaptics_rmi4_f12_ctrl_31 *ctrl_31 = NULL; + struct synaptics_rmi4_f12_ctrl_58 *ctrl_58 = NULL; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + fhandler->fn_number = fd->fn_number; + fhandler->num_of_data_sources = fd->intr_src_count; + fhandler->extra = kmalloc(sizeof(*extra_data), GFP_KERNEL); + if (!fhandler->extra) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for fhandler->extra\n", + __func__); + return -ENOMEM; + } + extra_data = (struct synaptics_rmi4_f12_extra_data *)fhandler->extra; + size_of_2d_data = sizeof(struct synaptics_rmi4_f12_finger_data); + + query_5 = kzalloc(sizeof(*query_5), GFP_KERNEL); + if (!query_5) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for query_5\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + query_8 = kzalloc(sizeof(*query_8), GFP_KERNEL); + if (!query_8) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for query_8\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + ctrl_8 = kzalloc(sizeof(*ctrl_8), GFP_KERNEL); + if (!ctrl_8) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for ctrl_8\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + ctrl_23 = kzalloc(sizeof(*ctrl_23), GFP_KERNEL); + if (!ctrl_23) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for ctrl_23\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + ctrl_31 = kzalloc(sizeof(*ctrl_31), GFP_KERNEL); + if (!ctrl_31) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for ctrl_31\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + ctrl_58 = kzalloc(sizeof(*ctrl_58), GFP_KERNEL); + if (!ctrl_58) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for ctrl_58\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.query_base + 4, + &size_of_query5, + sizeof(size_of_query5)); + if (retval < 0) + goto exit; + + pr_err("%s %d: fhandler->full_addr.query_base = 0x%04x\n", __func__, __LINE__, fhandler->full_addr.query_base); + pr_err("%s %d: fhandler->full_addr.ctrl_base = 0x%04x\n", __func__, __LINE__, fhandler->full_addr.ctrl_base); + pr_err("%s %d: size_of_query5 = %d\n", __func__, __LINE__, size_of_query5); + + if (size_of_query5 > sizeof(query_5->data)) + size_of_query5 = sizeof(query_5->data); + memset(query_5->data, 0x00, sizeof(query_5->data)); + + pr_err("%s %d: size_of_query5 = %d\n", __func__, __LINE__, size_of_query5); + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.query_base + 5, + query_5->data, + size_of_query5); + if (retval < 0) + goto exit; + + ctrl_8_offset = query_5->ctrl0_is_present + + query_5->ctrl1_is_present + + query_5->ctrl2_is_present + + query_5->ctrl3_is_present + + query_5->ctrl4_is_present + + query_5->ctrl5_is_present + + query_5->ctrl6_is_present + + query_5->ctrl7_is_present; + + ctrl_20_offset = ctrl_8_offset + + query_5->ctrl8_is_present + + query_5->ctrl9_is_present + + query_5->ctrl10_is_present + + query_5->ctrl11_is_present + + query_5->ctrl12_is_present + + query_5->ctrl13_is_present + + query_5->ctrl14_is_present + + query_5->ctrl15_is_present + + query_5->ctrl16_is_present + + query_5->ctrl17_is_present + + query_5->ctrl18_is_present + + query_5->ctrl19_is_present; + + ctrl_23_offset = ctrl_20_offset + + query_5->ctrl20_is_present + + query_5->ctrl21_is_present + + query_5->ctrl22_is_present; + + + ctrl_26_offset = ctrl_23_offset + + query_5->ctrl23_is_present + + query_5->ctrl24_is_present + + query_5->ctrl25_is_present; + + ctrl_27_offset = ctrl_26_offset + + query_5->ctrl26_is_present; + + ctrl_28_offset = ctrl_27_offset + + query_5->ctrl27_is_present; + + ctrl_31_offset = ctrl_28_offset + + query_5->ctrl28_is_present + + query_5->ctrl29_is_present + + query_5->ctrl30_is_present; + + ctrl_47_offset = ctrl_31_offset + + query_5->ctrl31_is_present + + query_5->ctrl32_is_present + + query_5->ctrl33_is_present + + query_5->ctrl34_is_present + + query_5->ctrl35_is_present + + query_5->ctrl36_is_present + + query_5->ctrl37_is_present + + query_5->ctrl38_is_present + + query_5->ctrl39_is_present + + query_5->ctrl40_is_present + + query_5->ctrl41_is_present + + query_5->ctrl42_is_present + + query_5->ctrl43_is_present + + query_5->ctrl44_is_present + + query_5->ctrl45_is_present + + query_5->ctrl46_is_present; + ctrl_58_offset = ctrl_47_offset + + query_5->ctrl47_is_present + + query_5->ctrl48_is_present + + query_5->ctrl49_is_present + + query_5->ctrl50_is_present + + query_5->ctrl51_is_present + + query_5->ctrl52_is_present + + query_5->ctrl53_is_present + + query_5->ctrl54_is_present + + query_5->ctrl55_is_present + + query_5->ctrl56_is_present + + query_5->ctrl57_is_present; + + ctrl_23_size = 2; + for (subpacket = 2; subpacket <= 4; subpacket++) { + retval = synaptics_rmi4_f12_find_sub(rmi4_data, + fhandler, query_5->data, sizeof(query_5->data), + 6, 23, subpacket); + if (retval == 1) + ctrl_23_size++; + else if (retval < 0) + goto exit; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.ctrl_base + ctrl_23_offset, + ctrl_23->data, + ctrl_23_size); + if (retval < 0) + goto exit; + + /* Maximum number of fingers supported */ + fhandler->num_of_data_points = min_t(unsigned char, + ctrl_23->max_reported_objects, + (unsigned char)F12_FINGERS_TO_SUPPORT); + + num_of_fingers = fhandler->num_of_data_points; + rmi4_data->num_of_fingers = num_of_fingers; + + rmi4_data->stylus_enable = ctrl_23->stylus_enable; + rmi4_data->eraser_enable = ctrl_23->eraser_enable; + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.query_base + 7, + &size_of_query8, + sizeof(size_of_query8)); + if (retval < 0) + goto exit; + + if (size_of_query8 > sizeof(query_8->data)) + size_of_query8 = sizeof(query_8->data); + memset(query_8->data, 0x00, sizeof(query_8->data)); + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.query_base + 8, + query_8->data, + size_of_query8); + if (retval < 0) + goto exit; + + /* Determine the presence of the Data0 register */ + extra_data->data1_offset = query_8->data0_is_present; + + if ((size_of_query8 >= 3) && (query_8->data15_is_present)) { + extra_data->data15_offset = query_8->data0_is_present + + query_8->data1_is_present + + query_8->data2_is_present + + query_8->data3_is_present + + query_8->data4_is_present + + query_8->data5_is_present + + query_8->data6_is_present + + query_8->data7_is_present + + query_8->data8_is_present + + query_8->data9_is_present + + query_8->data10_is_present + + query_8->data11_is_present + + query_8->data12_is_present + + query_8->data13_is_present + + query_8->data14_is_present; + extra_data->data15_size = (num_of_fingers + 7) / 8; + } else { + extra_data->data15_size = 0; + } + +#ifdef REPORT_2D_PRESSURE + if ((size_of_query8 >= 5) && (query_8->data29_is_present)) { + extra_data->data29_offset = query_8->data0_is_present + + query_8->data1_is_present + + query_8->data2_is_present + + query_8->data3_is_present + + query_8->data4_is_present + + query_8->data5_is_present + + query_8->data6_is_present + + query_8->data7_is_present + + query_8->data8_is_present + + query_8->data9_is_present + + query_8->data10_is_present + + query_8->data11_is_present + + query_8->data12_is_present + + query_8->data13_is_present + + query_8->data14_is_present + + query_8->data15_is_present + + query_8->data16_is_present + + query_8->data17_is_present + + query_8->data18_is_present + + query_8->data19_is_present + + query_8->data20_is_present + + query_8->data21_is_present + + query_8->data22_is_present + + query_8->data23_is_present + + query_8->data24_is_present + + query_8->data25_is_present + + query_8->data26_is_present + + query_8->data27_is_present + + query_8->data28_is_present; + extra_data->data29_size = 0; + for (subpacket = 0; subpacket <= num_of_fingers; subpacket++) { + retval = synaptics_rmi4_f12_find_sub(rmi4_data, + fhandler, query_8->data, + sizeof(query_8->data), + 9, 29, subpacket); + if (retval == 1) + extra_data->data29_size += 2; + else if (retval < 0) + goto exit; + } + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.ctrl_base + ctrl_58_offset, + ctrl_58->data, + sizeof(ctrl_58->data)); + if (retval < 0) + goto exit; + + pr_err("%s %d: extra_data->data29_offset = %d\n", __func__, __LINE__, extra_data->data29_offset); + pr_err("%s %d: extra_data->data29_size = %d\n", __func__, __LINE__, extra_data->data29_size); + pr_err("%s %d: ctrl_58_offset = %d\n", __func__, __LINE__, ctrl_58_offset); + + rmi4_data->force_min = + (int)(ctrl_58->min_force_lsb << 0) | + (int)(ctrl_58->min_force_msb << 8); + rmi4_data->force_max = + (int)(ctrl_58->max_force_lsb << 0) | + (int)(ctrl_58->max_force_msb << 8); + + pr_err("%s %d: rmi4_data->force_min = %d\n", __func__, __LINE__, rmi4_data->force_min); + pr_err("%s %d: rmi4_data->force_max = %d\n", __func__, __LINE__, rmi4_data->force_max); + + rmi4_data->report_pressure = true; + } else { + extra_data->data29_size = 0; + rmi4_data->report_pressure = false; + } +#endif + + rmi4_data->report_enable = RPT_DEFAULT; +#ifdef REPORT_2D_Z + rmi4_data->report_enable |= RPT_Z; +#endif +#ifdef REPORT_2D_W + rmi4_data->report_enable |= (RPT_WX | RPT_WY); +#endif + + retval = synaptics_rmi4_f12_set_enables(rmi4_data, + fhandler->full_addr.ctrl_base + ctrl_28_offset); + if (retval < 0) + goto exit; + + if (query_5->ctrl8_is_present) { + rmi4_data->wedge_sensor = false; + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.ctrl_base + ctrl_8_offset, + ctrl_8->data, + sizeof(ctrl_8->data)); + if (retval < 0) + goto exit; + + /* Maximum x and y */ + rmi4_data->sensor_max_x = + ((unsigned int)ctrl_8->max_x_coord_lsb << 0) | + ((unsigned int)ctrl_8->max_x_coord_msb << 8); + rmi4_data->sensor_max_y = + ((unsigned int)ctrl_8->max_y_coord_lsb << 0) | + ((unsigned int)ctrl_8->max_y_coord_msb << 8); + + rmi4_data->max_touch_width = MAX_F12_TOUCH_WIDTH; + } else { + rmi4_data->wedge_sensor = true; + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.ctrl_base + ctrl_31_offset, + ctrl_31->data, + sizeof(ctrl_31->data)); + if (retval < 0) + goto exit; + + /* Maximum x and y */ + rmi4_data->sensor_max_x = + ((unsigned int)ctrl_31->max_x_coord_lsb << 0) | + ((unsigned int)ctrl_31->max_x_coord_msb << 8); + rmi4_data->sensor_max_y = + ((unsigned int)ctrl_31->max_y_coord_lsb << 0) | + ((unsigned int)ctrl_31->max_y_coord_msb << 8); + + rmi4_data->max_touch_width = MAX_F12_TOUCH_WIDTH; + } + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Function %02x max x = %d max y = %d\n", + __func__, fhandler->fn_number, + rmi4_data->sensor_max_x, + rmi4_data->sensor_max_y); + + if (bdata->swap_axes) { + temp = rmi4_data->sensor_max_x; + rmi4_data->sensor_max_x = rmi4_data->sensor_max_y; + rmi4_data->sensor_max_y = temp; + } + + rmi4_data->f12_wakeup_gesture = query_5->ctrl27_is_present; + if (rmi4_data->f12_wakeup_gesture) { + extra_data->ctrl20_offset = ctrl_20_offset; + extra_data->data4_offset = query_8->data0_is_present + + query_8->data1_is_present + + query_8->data2_is_present + + query_8->data3_is_present; + } + + synaptics_rmi4_set_intr_mask(fhandler, fd, intr_count); + + extra_data->ctrl26_offset = ctrl_26_offset; + extra_data->ctrl27_offset = ctrl_27_offset; + + /* Allocate memory for finger data storage space */ + fhandler->data_size = num_of_fingers * size_of_2d_data; + fhandler->data = kmalloc(fhandler->data_size, GFP_KERNEL); + if (!fhandler->data) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for fhandler->data\n", + __func__); + retval = -ENOMEM; + goto exit; + } + +exit: + kfree(query_5); + kfree(query_8); + kfree(ctrl_8); + kfree(ctrl_23); + kfree(ctrl_31); + kfree(ctrl_58); + + return retval; +} + +static int synaptics_rmi4_f1a_alloc_mem(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn *fhandler) +{ + int retval; + struct synaptics_rmi4_f1a_handle *f1a; + + f1a = kzalloc(sizeof(*f1a), GFP_KERNEL); + if (!f1a) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for function handle\n", + __func__); + return -ENOMEM; + } + + fhandler->data = (void *)f1a; + fhandler->extra = NULL; + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.query_base, + f1a->button_query.data, + sizeof(f1a->button_query.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read query registers\n", + __func__); + return retval; + } + + f1a->max_count = f1a->button_query.max_button_count + 1; + + f1a->button_control.txrx_map = kzalloc(f1a->max_count * 2, GFP_KERNEL); + if (!f1a->button_control.txrx_map) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for tx rx mapping\n", + __func__); + return -ENOMEM; + } + + f1a->button_bitmask_size = (f1a->max_count + 7) / 8; + + f1a->button_data_buffer = kcalloc(f1a->button_bitmask_size, + sizeof(*(f1a->button_data_buffer)), GFP_KERNEL); + if (!f1a->button_data_buffer) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for data buffer\n", + __func__); + return -ENOMEM; + } + + f1a->button_map = kcalloc(f1a->max_count, + sizeof(*(f1a->button_map)), GFP_KERNEL); + if (!f1a->button_map) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for button map\n", + __func__); + return -ENOMEM; + } + + return 0; +} + +static int synaptics_rmi4_f1a_button_map(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn *fhandler) +{ + int retval; + unsigned char ii; + unsigned char offset = 0; + struct synaptics_rmi4_f1a_query_4 query_4; + struct synaptics_rmi4_f1a_handle *f1a = fhandler->data; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + offset = f1a->button_query.has_general_control + + f1a->button_query.has_interrupt_enable + + f1a->button_query.has_multibutton_select; + + if (f1a->button_query.has_tx_rx_map) { + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.ctrl_base + offset, + f1a->button_control.txrx_map, + f1a->max_count * 2); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read tx rx mapping\n", + __func__); + return retval; + } + + rmi4_data->button_txrx_mapping = f1a->button_control.txrx_map; + } + + if (f1a->button_query.has_query4) { + offset = 2 + f1a->button_query.has_query2 + + f1a->button_query.has_query3; + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.query_base + offset, + query_4.data, + sizeof(query_4.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read button features 4\n", + __func__); + return retval; + } + + if (query_4.has_ctrl24) + rmi4_data->external_afe_buttons = true; + else + rmi4_data->external_afe_buttons = false; + } + + if (!bdata->cap_button_map) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: cap_button_map is NULL in board file\n", + __func__); + return -ENODEV; + } else if (!bdata->cap_button_map->map) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Button map is missing in board file\n", + __func__); + return -ENODEV; + } else { + if (bdata->cap_button_map->nbuttons != f1a->max_count) { + f1a->valid_button_count = min(f1a->max_count, + bdata->cap_button_map->nbuttons); + } else { + f1a->valid_button_count = f1a->max_count; + } + + for (ii = 0; ii < f1a->valid_button_count; ii++) + f1a->button_map[ii] = bdata->cap_button_map->map[ii]; + } + + return 0; +} + +static void synaptics_rmi4_f1a_kfree(struct synaptics_rmi4_fn *fhandler) +{ + struct synaptics_rmi4_f1a_handle *f1a = fhandler->data; + + if (f1a) { + kfree(f1a->button_control.txrx_map); + kfree(f1a->button_data_buffer); + kfree(f1a->button_map); + kfree(f1a); + fhandler->data = NULL; + } + + return; +} + +static int synaptics_rmi4_f1a_init(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn *fhandler, + struct synaptics_rmi4_fn_desc *fd, + unsigned int intr_count) +{ + int retval; + + fhandler->fn_number = fd->fn_number; + fhandler->num_of_data_sources = fd->intr_src_count; + + synaptics_rmi4_set_intr_mask(fhandler, fd, intr_count); + + retval = synaptics_rmi4_f1a_alloc_mem(rmi4_data, fhandler); + if (retval < 0) + goto error_exit; + + retval = synaptics_rmi4_f1a_button_map(rmi4_data, fhandler); + if (retval < 0) + goto error_exit; + + rmi4_data->button_0d_enabled = 1; + + return 0; + +error_exit: + synaptics_rmi4_f1a_kfree(fhandler); + + return retval; +} + +static void synaptics_rmi4_empty_fn_list(struct synaptics_rmi4_data *rmi4_data) +{ + struct synaptics_rmi4_fn *fhandler; + struct synaptics_rmi4_fn *fhandler_temp; + struct synaptics_rmi4_device_info *rmi; + + rmi = &(rmi4_data->rmi4_mod_info); + + if (!list_empty(&rmi->support_fn_list)) { + list_for_each_entry_safe(fhandler, + fhandler_temp, + &rmi->support_fn_list, + link) { + if (fhandler->fn_number == SYNAPTICS_RMI4_F1A) { + synaptics_rmi4_f1a_kfree(fhandler); + } else { + kfree(fhandler->extra); + kfree(fhandler->data); + } + list_del(&fhandler->link); + kfree(fhandler); + } + } + INIT_LIST_HEAD(&rmi->support_fn_list); + + return; +} + +static int synaptics_rmi4_check_status(struct synaptics_rmi4_data *rmi4_data, + bool *was_in_bl_mode) +{ + int retval; + int timeout = CHECK_STATUS_TIMEOUT_MS; + struct synaptics_rmi4_f01_device_status status; + + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_data_base_addr, + status.data, + sizeof(status.data)); + if (retval < 0) + return retval; + + while (status.status_code == STATUS_CRC_IN_PROGRESS) { + if (timeout > 0) + msleep(20); + else + return -EINVAL; + + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_data_base_addr, + status.data, + sizeof(status.data)); + if (retval < 0) + return retval; + + timeout -= 20; + } + + if (timeout != CHECK_STATUS_TIMEOUT_MS) + *was_in_bl_mode = true; + + if (status.flash_prog == 1) { + rmi4_data->flash_prog_mode = true; + pr_notice("%s: In flash prog mode, status = 0x%02x\n", + __func__, + status.status_code); + } else { + rmi4_data->flash_prog_mode = false; + } + + return 0; +} + +static void synaptics_rmi4_set_configured(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + unsigned char device_ctrl; + + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_ctrl_base_addr, + &device_ctrl, + sizeof(device_ctrl)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set configured\n", + __func__); + return; + } + + rmi4_data->no_sleep_setting = device_ctrl & NO_SLEEP_ON; + device_ctrl |= CONFIGURED; + + retval = synaptics_rmi4_reg_write(rmi4_data, + rmi4_data->f01_ctrl_base_addr, + &device_ctrl, + sizeof(device_ctrl)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set configured\n", + __func__); + } + + return; +} + +static int synaptics_rmi4_alloc_fh(struct synaptics_rmi4_fn **fhandler, + struct synaptics_rmi4_fn_desc *rmi_fd, int page_number) +{ + *fhandler = kzalloc(sizeof(**fhandler), GFP_KERNEL); + if (!(*fhandler)) + return -ENOMEM; + + (*fhandler)->full_addr.data_base = + (rmi_fd->data_base_addr | + (page_number << 8)); + (*fhandler)->full_addr.ctrl_base = + (rmi_fd->ctrl_base_addr | + (page_number << 8)); + (*fhandler)->full_addr.cmd_base = + (rmi_fd->cmd_base_addr | + (page_number << 8)); + (*fhandler)->full_addr.query_base = + (rmi_fd->query_base_addr | + (page_number << 8)); + + return 0; +} + +static int synaptics_rmi4_query_device(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + unsigned char page_number; + unsigned char intr_count; + unsigned char f01_query[F01_STD_QUERY_LEN]; + unsigned short pdt_entry_addr; + bool f01found; + bool f35found; + bool was_in_bl_mode; + struct synaptics_rmi4_fn_desc rmi_fd; + struct synaptics_rmi4_fn *fhandler; + struct synaptics_rmi4_device_info *rmi; + + rmi = &(rmi4_data->rmi4_mod_info); + +rescan_pdt: + f01found = false; + f35found = false; + was_in_bl_mode = false; + intr_count = 0; + INIT_LIST_HEAD(&rmi->support_fn_list); + + /* Scan the page description tables of the pages to service */ + for (page_number = 0; page_number < PAGES_TO_SERVICE; page_number++) { + for (pdt_entry_addr = PDT_START; pdt_entry_addr > PDT_END; + pdt_entry_addr -= PDT_ENTRY_SIZE) { + pdt_entry_addr |= (page_number << 8); + + retval = synaptics_rmi4_reg_read(rmi4_data, + pdt_entry_addr, + (unsigned char *)&rmi_fd, + sizeof(rmi_fd)); + if (retval < 0) + return retval; + + pdt_entry_addr &= ~(MASK_8BIT << 8); + + fhandler = NULL; + + if (rmi_fd.fn_number == 0) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Reached end of PDT\n", + __func__); + break; + } + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: F%02x found (page %d)\n", + __func__, rmi_fd.fn_number, + page_number); + + switch (rmi_fd.fn_number) { + case SYNAPTICS_RMI4_F01: + if (rmi_fd.intr_src_count == 0) + break; + + f01found = true; + + retval = synaptics_rmi4_alloc_fh(&fhandler, + &rmi_fd, page_number); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc for F%d\n", + __func__, + rmi_fd.fn_number); + return retval; + } + + retval = synaptics_rmi4_f01_init(rmi4_data, + fhandler, &rmi_fd, intr_count); + if (retval < 0) + return retval; + + retval = synaptics_rmi4_check_status(rmi4_data, + &was_in_bl_mode); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to check status\n", + __func__); + return retval; + } + + if (was_in_bl_mode) { + kfree(fhandler); + fhandler = NULL; + goto rescan_pdt; + } + + if (rmi4_data->flash_prog_mode) + goto flash_prog_mode; + + break; + case SYNAPTICS_RMI4_F11: + if (rmi_fd.intr_src_count == 0) + break; + + retval = synaptics_rmi4_alloc_fh(&fhandler, + &rmi_fd, page_number); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc for F%d\n", + __func__, + rmi_fd.fn_number); + return retval; + } + + retval = synaptics_rmi4_f11_init(rmi4_data, + fhandler, &rmi_fd, intr_count); + if (retval < 0) + return retval; + break; + case SYNAPTICS_RMI4_F12: + if (rmi_fd.intr_src_count == 0) + break; + + retval = synaptics_rmi4_alloc_fh(&fhandler, + &rmi_fd, page_number); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc for F%d\n", + __func__, + rmi_fd.fn_number); + return retval; + } + + retval = synaptics_rmi4_f12_init(rmi4_data, + fhandler, &rmi_fd, intr_count); + if (retval < 0) + return retval; + break; + case SYNAPTICS_RMI4_F1A: + if (rmi_fd.intr_src_count == 0) + break; + + retval = synaptics_rmi4_alloc_fh(&fhandler, + &rmi_fd, page_number); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc for F%d\n", + __func__, + rmi_fd.fn_number); + return retval; + } + + retval = synaptics_rmi4_f1a_init(rmi4_data, + fhandler, &rmi_fd, intr_count); + if (retval < 0) { +#ifdef IGNORE_FN_INIT_FAILURE + kfree(fhandler); + fhandler = NULL; +#else + return retval; +#endif + } + break; + case SYNAPTICS_RMI4_F35: + f35found = true; + break; +#ifdef F51_DISCRETE_FORCE + case SYNAPTICS_RMI4_F51: + rmi4_data->f51_query_base_addr = + rmi_fd.query_base_addr | + (page_number << 8); + break; +#endif + } + + /* Accumulate the interrupt count */ + intr_count += rmi_fd.intr_src_count; + + if (fhandler && rmi_fd.intr_src_count) { + list_add_tail(&fhandler->link, + &rmi->support_fn_list); + } + } + } + + if (!f01found) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to find F01\n", + __func__); + if (!f35found) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to find F35\n", + __func__); + return -EINVAL; + } else { + pr_notice("%s: In microbootloader mode\n", + __func__); + return 0; + } + } + +flash_prog_mode: + rmi4_data->num_of_intr_regs = (intr_count + 7) / 8; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Number of interrupt registers = %d\n", + __func__, rmi4_data->num_of_intr_regs); + + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_query_base_addr, + f01_query, + sizeof(f01_query)); + if (retval < 0) + return retval; + + /* RMI Version 4.0 currently supported */ + rmi->version_major = 4; + rmi->version_minor = 0; + + rmi->manufacturer_id = f01_query[0]; + rmi->product_props = f01_query[1]; + rmi->product_info[0] = f01_query[2]; + rmi->product_info[1] = f01_query[3]; + retval = secure_memcpy(rmi->product_id_string, + sizeof(rmi->product_id_string), + &f01_query[11], + sizeof(f01_query) - 11, + PRODUCT_ID_SIZE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy product ID string\n", + __func__); + } + + if (rmi->manufacturer_id != 1) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Non-Synaptics device found, manufacturer ID = %d\n", + __func__, rmi->manufacturer_id); + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_query_base_addr + F01_BUID_ID_OFFSET, + rmi->build_id, + sizeof(rmi->build_id)); + if (retval < 0) + return retval; + + rmi4_data->firmware_id = (unsigned int)rmi->build_id[0] + + (unsigned int)rmi->build_id[1] * 0x100 + + (unsigned int)rmi->build_id[2] * 0x10000; + + memset(rmi4_data->intr_mask, 0x00, sizeof(rmi4_data->intr_mask)); + + /* + * Map out the interrupt bit masks for the interrupt sources + * from the registered function handlers. + */ + if (!list_empty(&rmi->support_fn_list)) { + list_for_each_entry(fhandler, &rmi->support_fn_list, link) { + if (fhandler->num_of_data_sources) { + rmi4_data->intr_mask[fhandler->intr_reg_num] |= + fhandler->intr_mask; + } + } + } + + if (rmi4_data->f11_wakeup_gesture || rmi4_data->f12_wakeup_gesture) + rmi4_data->enable_wakeup_gesture = WAKEUP_GESTURE; + else + rmi4_data->enable_wakeup_gesture = false; + + synaptics_rmi4_set_configured(rmi4_data); + + return 0; +} + +static int synaptics_rmi4_gpio_setup(int gpio, bool config, int dir, int state, const char *label) +{ + int retval = 0; + + if (config) { + retval = gpio_request(gpio, label); + if (retval) { + pr_err("%s: Failed to get gpio %d (code: %d)", + __func__, gpio, retval); + return retval; + } + + if (dir == 0) + retval = gpio_direction_input(gpio); + else + retval = gpio_direction_output(gpio, state); + if (retval) { + pr_err("%s: Failed to set gpio %d direction", + __func__, gpio); + return retval; + } + } else { + gpio_free(gpio); + } + + return retval; +} + +static int synaptics_rmi4_pinctrl_init(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + + /* Get pinctrl if target uses pinctrl */ + rmi4_data->ts_pinctrl = devm_pinctrl_get((rmi4_data->pdev->dev.parent)); + if (IS_ERR_OR_NULL(rmi4_data->ts_pinctrl)) { + retval = PTR_ERR(rmi4_data->ts_pinctrl); + dev_dbg(rmi4_data->pdev->dev.parent, + "Target does not use pinctrl %d\n", retval); + goto err_pinctrl_get; + } + + rmi4_data->pinctrl_state_active + = pinctrl_lookup_state(rmi4_data->ts_pinctrl, PINCTRL_STATE_ACTIVE); + if (IS_ERR_OR_NULL(rmi4_data->pinctrl_state_active)) { + retval = PTR_ERR(rmi4_data->pinctrl_state_active); + dev_err(rmi4_data->pdev->dev.parent, + "Can not lookup %s pinstate %d\n", + PINCTRL_STATE_ACTIVE, retval); + goto err_pinctrl_lookup; + } + + rmi4_data->pinctrl_state_suspend + = pinctrl_lookup_state(rmi4_data->ts_pinctrl, PINCTRL_STATE_SUSPEND); + if (IS_ERR_OR_NULL(rmi4_data->pinctrl_state_suspend)) { + retval = PTR_ERR(rmi4_data->pinctrl_state_suspend); + dev_dbg(rmi4_data->pdev->dev.parent, + "Can not lookup %s pinstate %d\n", + PINCTRL_STATE_SUSPEND, retval); + goto err_pinctrl_lookup; + } + + return 0; + +err_pinctrl_lookup: + devm_pinctrl_put(rmi4_data->ts_pinctrl); +err_pinctrl_get: + rmi4_data->ts_pinctrl = NULL; + return retval; +} + +static void synaptics_rmi4_set_params(struct synaptics_rmi4_data *rmi4_data) +{ + unsigned char ii; + struct synaptics_rmi4_f1a_handle *f1a; + struct synaptics_rmi4_fn *fhandler; + struct synaptics_rmi4_device_info *rmi; + + rmi = &(rmi4_data->rmi4_mod_info); + + input_set_abs_params(rmi4_data->input_dev, + ABS_MT_POSITION_X, 0, + rmi4_data->sensor_max_x, 0, 0); + input_set_abs_params(rmi4_data->input_dev, + ABS_MT_POSITION_Y, 0, + rmi4_data->sensor_max_y, 0, 0); +#ifdef REPORT_2D_W + input_set_abs_params(rmi4_data->input_dev, + ABS_MT_TOUCH_MAJOR, 0, + rmi4_data->max_touch_width, 0, 0); + input_set_abs_params(rmi4_data->input_dev, + ABS_MT_TOUCH_MINOR, 0, + rmi4_data->max_touch_width, 0, 0); +#endif + +#ifdef REPORT_2D_PRESSURE + if (rmi4_data->report_pressure) { + input_set_abs_params(rmi4_data->input_dev, + ABS_MT_PRESSURE, rmi4_data->force_min, + rmi4_data->force_max, 0, 0); + } +#elif defined(F51_DISCRETE_FORCE) + input_set_abs_params(rmi4_data->input_dev, + ABS_MT_PRESSURE, 0, + FORCE_LEVEL_MAX, 0, 0); +#endif + +#ifdef TYPE_B_PROTOCOL +#ifdef KERNEL_ABOVE_3_6 + input_mt_init_slots(rmi4_data->input_dev, + rmi4_data->num_of_fingers, INPUT_MT_DIRECT); +#else + input_mt_init_slots(rmi4_data->input_dev, + rmi4_data->num_of_fingers); +#endif +#endif + + f1a = NULL; + if (!list_empty(&rmi->support_fn_list)) { + list_for_each_entry(fhandler, &rmi->support_fn_list, link) { + if (fhandler->fn_number == SYNAPTICS_RMI4_F1A) + f1a = fhandler->data; + } + } + + if (f1a) { + for (ii = 0; ii < f1a->valid_button_count; ii++) { + set_bit(f1a->button_map[ii], + rmi4_data->input_dev->keybit); + input_set_capability(rmi4_data->input_dev, + EV_KEY, f1a->button_map[ii]); + } + } + + if (vir_button_map->nbuttons) { + for (ii = 0; ii < vir_button_map->nbuttons; ii++) { + set_bit(vir_button_map->map[ii * 5], + rmi4_data->input_dev->keybit); + input_set_capability(rmi4_data->input_dev, + EV_KEY, vir_button_map->map[ii * 5]); + } + } + + if (rmi4_data->f11_wakeup_gesture || rmi4_data->f12_wakeup_gesture) { + set_bit(KEY_WAKEUP, rmi4_data->input_dev->keybit); + input_set_capability(rmi4_data->input_dev, EV_KEY, KEY_WAKEUP); + } + + return; +} + +/* Re-configure touch settings when wakeup gesture mode is switched in suspend */ +static void synaptics_rmi4_wakeup_reconfigure(struct synaptics_rmi4_data *rmi4_data, + bool enable) +{ + struct synaptics_rmi4_exp_fhandler *exp_fhandler; + + synaptics_rmi4_sleep_enable(rmi4_data, !enable); + + if (enable) { + mdss_regulator_ctrl(rmi4_data, DISP_REG_ALL, true); + mdss_reset_ctrl(rmi4_data->hw_if->board_data, true); + } + + synaptics_rmi4_wakeup_gesture(rmi4_data, enable); + + if (!enable) { + mdss_regulator_ctrl(rmi4_data, DISP_REG_ALL, false); + mdss_reset_ctrl(rmi4_data->hw_if->board_data, false); + } + + synaptics_rmi4_irq_enable(rmi4_data, enable, false); + + mutex_lock(&exp_data.mutex); + if (!list_empty(&exp_data.list)) { + list_for_each_entry(exp_fhandler, &exp_data.list, link) { + if (enable) { + if (exp_fhandler->exp_fn->resume != NULL) + exp_fhandler->exp_fn->resume(rmi4_data); + } else { + if (exp_fhandler->exp_fn->suspend != NULL) + exp_fhandler->exp_fn->suspend(rmi4_data); + } + } + } + mutex_unlock(&exp_data.mutex); +} + +static void synaptics_key_ctrl(struct synaptics_rmi4_data *rmi4_data, bool enable) +{ + int retval; + unsigned char ii; + unsigned char intr_enable; + struct synaptics_rmi4_fn *fhandler; + struct synaptics_rmi4_device_info *rmi; + + rmi = &(rmi4_data->rmi4_mod_info); + + if (list_empty(&rmi->support_fn_list)) + return ; + + list_for_each_entry(fhandler, &rmi->support_fn_list, link) { + if (fhandler->fn_number == SYNAPTICS_RMI4_F1A) { + ii = fhandler->intr_reg_num; + + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_ctrl_base_addr + 1 + ii, + &intr_enable, + sizeof(intr_enable)); + if (retval < 0) + return ; + + if (enable == true) + intr_enable |= fhandler->intr_mask; + else + intr_enable &= ~fhandler->intr_mask; + + retval = synaptics_rmi4_reg_write(rmi4_data, + rmi4_data->f01_ctrl_base_addr + 1 + ii, + &intr_enable, + sizeof(intr_enable)); + if (retval < 0) + return ; + } + } + + return ; +} + +static void cover_mode_set(struct synaptics_rmi4_data *rmi4_data, int enable) +{ + struct synaptics_rmi4_f12_extra_data *extra_data; + struct synaptics_rmi4_fn *fhandler; + struct synaptics_rmi4_device_info *rmi; + int retval; + unsigned char ctrl26_value; + + mutex_lock(&rmi4_data->rmi4_cover_mutex); + + if (rmi4_data->suspend) + goto end; + + rmi = &(rmi4_data->rmi4_mod_info); + + list_for_each_entry(fhandler, &rmi->support_fn_list, link) { + if (fhandler->fn_number == SYNAPTICS_RMI4_F12) + break; + } + + extra_data = (struct synaptics_rmi4_f12_extra_data *)fhandler->extra; + + if (enable == INPUT_EVENT_COVER_MODE_OFF) { + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.ctrl_base + extra_data->ctrl26_offset, + &ctrl26_value, + 1); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read ctrl26 reg\n", + __func__); + goto end; + } + + ctrl26_value &= 0xfc; + + retval = synaptics_rmi4_reg_write(rmi4_data, + fhandler->full_addr.ctrl_base + extra_data->ctrl26_offset, + &ctrl26_value, + 1); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to close cover mode\n", + __func__); + goto end; + } + + synaptics_key_ctrl(rmi4_data, true); + rmi4_data->enable_cover_mode = 0; + } else { + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.ctrl_base + extra_data->ctrl26_offset, + &ctrl26_value, + 1); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read ctrl26 reg\n", + __func__); + goto end; + } + + ctrl26_value |= 0x03; + retval = synaptics_rmi4_reg_write(rmi4_data, + fhandler->full_addr.ctrl_base + extra_data->ctrl26_offset, + &ctrl26_value, + 1); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to change cover mode\n", + __func__); + goto end; + } + + synaptics_key_ctrl(rmi4_data, false); + }; +end: + mutex_unlock(&rmi4_data->rmi4_cover_mutex); +} + +static void synaptics_rmi4_switch_mode_work(struct work_struct *work) +{ + struct synaptics_rmi4_mode_switch *ms = container_of(work, struct synaptics_rmi4_mode_switch, switch_mode_work); + struct synaptics_rmi4_data *rmi4_data = ms->data; + const struct synaptics_dsx_board_data *bdata = rmi4_data->hw_if->board_data; + unsigned char value = ms->mode; + + if (value >= INPUT_EVENT_WAKUP_MODE_OFF && value <= INPUT_EVENT_WAKUP_MODE_ON) { + if (bdata->cut_off_power) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Unable to switch wakeup gesture mode\n", __func__); + return; + } + + rmi4_data->enable_wakeup_gesture = value - INPUT_EVENT_WAKUP_MODE_OFF; + } else if (value >= INPUT_EVENT_COVER_MODE_OFF && value <= INPUT_EVENT_COVER_MODE_ON) { + rmi4_data->enable_cover_mode = value; + cover_mode_set(rmi4_data, rmi4_data->enable_cover_mode); + } else if (value >= INPUT_EVENT_POCKET_MODE_OFF && value <= INPUT_EVENT_POCKET_MODE_ON) { + rmi4_data->pocketmode_on = value - INPUT_EVENT_POCKET_MODE_OFF; + synaptics_rmi4_pocketmode(rmi4_data, rmi4_data->pocketmode_on); + } else { + dev_err(rmi4_data->pdev->dev.parent, + "Does not support touch mode %d\n", value); + } + + if (ms != NULL) { + kfree(ms); + ms = NULL; + } +} + +static int synaptics_rmi4_input_event(struct input_dev *dev, + unsigned int type, unsigned int code, int value) +{ + struct synaptics_rmi4_data *rmi4_data = input_get_drvdata(dev); + struct synaptics_rmi4_mode_switch *ms; + + if (type == EV_SYN && code == SYN_CONFIG) { + dev_info(rmi4_data->pdev->dev.parent, + "Set input event value = %d\n", value); + + if (value >= INPUT_EVENT_START && value <= INPUT_EVENT_END) { + ms = (struct synaptics_rmi4_mode_switch *)kmalloc(sizeof(struct synaptics_rmi4_mode_switch), + GFP_ATOMIC); + if (ms != NULL) { + ms->data = rmi4_data; + ms->mode = (unsigned char)value; + INIT_WORK(&ms->switch_mode_work, synaptics_rmi4_switch_mode_work); + schedule_work(&ms->switch_mode_work); + } else { + dev_err(rmi4_data->pdev->dev.parent, + "Failed in allocating memory for switching mode!\n"); + return -ENOMEM; + } + } else { + dev_err(rmi4_data->pdev->dev.parent, + "Invalid event value %d\n", value); + return -EINVAL; + } + } + + return 0; +} + +static int synaptics_rmi4_set_input_dev(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + rmi4_data->input_dev = input_allocate_device(); + if (rmi4_data->input_dev == NULL) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to allocate input device\n", + __func__); + retval = -ENOMEM; + goto err_input_device; + } + + retval = synaptics_rmi4_query_device(rmi4_data); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to query device\n", + __func__); + goto err_query_device; + } + + rmi4_data->input_dev->name = PLATFORM_DRIVER_NAME; + rmi4_data->input_dev->phys = INPUT_PHYS_NAME; + rmi4_data->input_dev->id.product = SYNAPTICS_DSX_DRIVER_PRODUCT; + rmi4_data->input_dev->id.version = SYNAPTICS_DSX_DRIVER_VERSION; + rmi4_data->input_dev->dev.parent = rmi4_data->pdev->dev.parent; + rmi4_data->input_dev->event = synaptics_rmi4_input_event; + input_set_drvdata(rmi4_data->input_dev, rmi4_data); + + set_bit(EV_SYN, rmi4_data->input_dev->evbit); + set_bit(EV_KEY, rmi4_data->input_dev->evbit); + set_bit(EV_ABS, rmi4_data->input_dev->evbit); + set_bit(BTN_TOUCH, rmi4_data->input_dev->keybit); + set_bit(BTN_TOOL_FINGER, rmi4_data->input_dev->keybit); +#ifdef INPUT_PROP_DIRECT + set_bit(INPUT_PROP_DIRECT, rmi4_data->input_dev->propbit); +#endif + + if (bdata->max_y_for_2d >= 0) + rmi4_data->sensor_max_y = bdata->max_y_for_2d; + + synaptics_rmi4_set_params(rmi4_data); + + retval = input_register_device(rmi4_data->input_dev); + if (retval) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to register input device\n", + __func__); + goto err_register_input; + } + + if (!rmi4_data->stylus_enable) + return 0; + + rmi4_data->stylus_dev = input_allocate_device(); + if (rmi4_data->stylus_dev == NULL) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to allocate stylus device\n", + __func__); + retval = -ENOMEM; + goto err_stylus_device; + } + + rmi4_data->stylus_dev->name = STYLUS_DRIVER_NAME; + rmi4_data->stylus_dev->phys = STYLUS_PHYS_NAME; + rmi4_data->stylus_dev->id.product = SYNAPTICS_DSX_DRIVER_PRODUCT; + rmi4_data->stylus_dev->id.version = SYNAPTICS_DSX_DRIVER_VERSION; + rmi4_data->stylus_dev->dev.parent = rmi4_data->pdev->dev.parent; + input_set_drvdata(rmi4_data->stylus_dev, rmi4_data); + + set_bit(EV_KEY, rmi4_data->stylus_dev->evbit); + set_bit(EV_ABS, rmi4_data->stylus_dev->evbit); + set_bit(BTN_TOUCH, rmi4_data->stylus_dev->keybit); + set_bit(BTN_TOOL_PEN, rmi4_data->stylus_dev->keybit); + if (rmi4_data->eraser_enable) + set_bit(BTN_TOOL_RUBBER, rmi4_data->stylus_dev->keybit); +#ifdef INPUT_PROP_DIRECT + set_bit(INPUT_PROP_DIRECT, rmi4_data->stylus_dev->propbit); +#endif + + input_set_abs_params(rmi4_data->stylus_dev, ABS_X, 0, + rmi4_data->sensor_max_x, 0, 0); + input_set_abs_params(rmi4_data->stylus_dev, ABS_Y, 0, + rmi4_data->sensor_max_y, 0, 0); + + retval = input_register_device(rmi4_data->stylus_dev); + if (retval) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to register stylus device\n", + __func__); + goto err_register_stylus; + } + + return 0; + +err_register_stylus: + rmi4_data->stylus_dev = NULL; + +err_stylus_device: + input_unregister_device(rmi4_data->input_dev); + rmi4_data->input_dev = NULL; + +err_register_input: +err_query_device: + synaptics_rmi4_empty_fn_list(rmi4_data); + input_free_device(rmi4_data->input_dev); + +err_input_device: + return retval; +} + +static int synaptics_rmi4_set_gpio(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + retval = synaptics_rmi4_gpio_setup( + bdata->irq_gpio, + true, 0, 0, bdata->irq_gpio_name); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to configure attention GPIO\n", + __func__); + goto err_gpio_irq; + } + + if (bdata->power_gpio >= 0) { + retval = synaptics_rmi4_gpio_setup( + bdata->power_gpio, + true, 1, !bdata->power_on_state, bdata->power_gpio_name); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to configure power GPIO\n", + __func__); + goto err_gpio_power; + } + } + + if (bdata->reset_gpio >= 0) { + retval = synaptics_rmi4_gpio_setup( + bdata->reset_gpio, + true, 1, bdata->reset_on_state, bdata->reset_gpio_name); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to configure reset GPIO\n", + __func__); + goto err_gpio_reset; + } + } + + if (bdata->power_gpio >= 0) { + gpio_set_value(bdata->power_gpio, bdata->power_on_state); + msleep(bdata->power_delay_ms); + } + + if (bdata->reset_gpio >= 0) { + gpio_set_value(bdata->reset_gpio, bdata->reset_on_state); + msleep(bdata->reset_active_ms); + gpio_set_value(bdata->reset_gpio, !bdata->reset_on_state); + msleep(bdata->reset_delay_ms); + } + + return 0; + +err_gpio_reset: + if (bdata->power_gpio >= 0) + synaptics_rmi4_gpio_setup(bdata->power_gpio, false, 0, 0, NULL); + +err_gpio_power: + synaptics_rmi4_gpio_setup(bdata->irq_gpio, false, 0, 0, NULL); + +err_gpio_irq: + return retval; +} + +static int synaptics_rmi4_get_reg(struct synaptics_rmi4_data *rmi4_data, + bool get) +{ + int retval; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + if (!get) { + retval = 0; + goto regulator_put; + } + + if ((bdata->pwr_reg_name != NULL) && (*bdata->pwr_reg_name != 0)) { + rmi4_data->pwr_reg = regulator_get(rmi4_data->pdev->dev.parent, + bdata->pwr_reg_name); + if (IS_ERR(rmi4_data->pwr_reg)) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to get power regulator\n", + __func__); + retval = PTR_ERR(rmi4_data->pwr_reg); + goto regulator_put; + } + } + + if ((bdata->lab_reg_name != NULL) && (*bdata->lab_reg_name != 0)) { + rmi4_data->lab_reg = regulator_get(rmi4_data->pdev->dev.parent, + bdata->lab_reg_name); + if (IS_ERR(rmi4_data->lab_reg)) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to get lab regulator\n", + __func__); + retval = PTR_ERR(rmi4_data->lab_reg); + goto regulator_put; + } + } + + if ((bdata->ibb_reg_name != NULL) && (*bdata->ibb_reg_name != 0)) { + rmi4_data->ibb_reg = regulator_get(rmi4_data->pdev->dev.parent, + bdata->ibb_reg_name); + if (IS_ERR(rmi4_data->ibb_reg)) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to get ibb regulator\n", + __func__); + retval = PTR_ERR(rmi4_data->ibb_reg); + goto regulator_put; + } + } + + if ((bdata->disp_reg_name != NULL) && (*bdata->disp_reg_name != 0)) { + rmi4_data->disp_reg = regulator_get(rmi4_data->pdev->dev.parent, + bdata->disp_reg_name); + if (IS_ERR(rmi4_data->disp_reg)) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to get vddio regulator\n", + __func__); + retval = PTR_ERR(rmi4_data->disp_reg); + goto regulator_put; + } + } + + if ((bdata->bus_reg_name != NULL) && (*bdata->bus_reg_name != 0)) { + rmi4_data->bus_reg = regulator_get(rmi4_data->pdev->dev.parent, + bdata->bus_reg_name); + if (IS_ERR(rmi4_data->bus_reg)) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to get bus pullup regulator\n", + __func__); + retval = PTR_ERR(rmi4_data->bus_reg); + goto regulator_put; + } + } + + return 0; + +regulator_put: + if (rmi4_data->pwr_reg) { + regulator_put(rmi4_data->pwr_reg); + rmi4_data->pwr_reg = NULL; + } + + if (rmi4_data->lab_reg) { + regulator_put(rmi4_data->lab_reg); + rmi4_data->lab_reg = NULL; + } + if (rmi4_data->ibb_reg) { + regulator_put(rmi4_data->ibb_reg); + rmi4_data->ibb_reg = NULL; + } + if (rmi4_data->disp_reg) { + regulator_put(rmi4_data->disp_reg); + rmi4_data->disp_reg = NULL; + } + + if (rmi4_data->bus_reg) { + regulator_put(rmi4_data->bus_reg); + rmi4_data->bus_reg = NULL; + } + + return retval; +} + +static int synaptics_rmi4_enable_reg(struct synaptics_rmi4_data *rmi4_data, + bool enable) +{ + int retval; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + if (!enable) { + retval = 0; + goto disable_pwr_reg; + } + + if (rmi4_data->bus_reg) { + retval = regulator_enable(rmi4_data->bus_reg); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to enable bus pullup regulator\n", + __func__); + goto exit; + } + } + + if (rmi4_data->disp_reg) { + retval = regulator_enable(rmi4_data->disp_reg); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to enable disp regulator\n", + __func__); + goto disable_bus_reg; + } + } + + if (rmi4_data->pwr_reg) { + retval = regulator_enable(rmi4_data->pwr_reg); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to enable power regulator\n", + __func__); + goto disable_disp_reg; + } + msleep(bdata->power_delay_ms); + } + + return 0; + +disable_pwr_reg: + if (rmi4_data->pwr_reg) + regulator_disable(rmi4_data->pwr_reg); + +disable_disp_reg: + if (rmi4_data->disp_reg) + regulator_disable(rmi4_data->disp_reg); + +disable_bus_reg: + if (rmi4_data->bus_reg) + regulator_disable(rmi4_data->bus_reg); + +exit: + return retval; +} + +static int synaptics_rmi4_free_fingers(struct synaptics_rmi4_data *rmi4_data) +{ + unsigned char ii; + struct synaptics_rmi4_device_info *rmi; + struct synaptics_rmi4_fn *fhandler; + struct synaptics_rmi4_f1a_handle *f1a = NULL; + + mutex_lock(&(rmi4_data->rmi4_report_mutex)); + + rmi = &(rmi4_data->rmi4_mod_info); + +#ifdef TYPE_B_PROTOCOL + for (ii = 0; ii < rmi4_data->num_of_fingers; ii++) { + input_mt_slot(rmi4_data->input_dev, ii); + input_mt_report_slot_state(rmi4_data->input_dev, + MT_TOOL_FINGER, 0); + } +#endif + input_report_key(rmi4_data->input_dev, + BTN_TOUCH, 0); + input_report_key(rmi4_data->input_dev, + BTN_TOOL_FINGER, 0); +#ifndef TYPE_B_PROTOCOL + input_mt_sync(rmi4_data->input_dev); +#endif + input_sync(rmi4_data->input_dev); + + if (rmi4_data->stylus_enable) { + input_report_key(rmi4_data->stylus_dev, + BTN_TOUCH, 0); + input_report_key(rmi4_data->stylus_dev, + BTN_TOOL_PEN, 0); + if (rmi4_data->eraser_enable) { + input_report_key(rmi4_data->stylus_dev, + BTN_TOOL_RUBBER, 0); + } + input_sync(rmi4_data->stylus_dev); + } + + if (!list_empty(&rmi->support_fn_list)) { + list_for_each_entry(fhandler, &rmi->support_fn_list, link) { + if (fhandler->fn_number == SYNAPTICS_RMI4_F1A) + f1a = fhandler->data; + } + } + + for (ii = 0; ii < f1a->valid_button_count; ii++) { + input_report_key(rmi4_data->input_dev, f1a->button_map[ii], 0); + input_sync(rmi4_data->input_dev); + } + + rmi4_data->touchs = 0; + + mutex_unlock(&(rmi4_data->rmi4_report_mutex)); + + rmi4_data->fingers_on_2d = false; + + return 0; +} + +static int synaptics_rmi4_sw_reset(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + unsigned char command = 0x01; + + retval = synaptics_rmi4_reg_write(rmi4_data, + rmi4_data->f01_cmd_base_addr, + &command, + sizeof(command)); + if (retval < 0) + return retval; + + msleep(rmi4_data->hw_if->board_data->reset_delay_ms); + + if (rmi4_data->hw_if->ui_hw_init) { + retval = rmi4_data->hw_if->ui_hw_init(rmi4_data); + if (retval < 0) + return retval; + } + + return 0; +} + +static void synaptics_rmi4_rebuild_work(struct work_struct *work) +{ + int retval; + unsigned char attr_count; + struct synaptics_rmi4_exp_fhandler *exp_fhandler; + struct delayed_work *delayed_work = + container_of(work, struct delayed_work, work); + struct synaptics_rmi4_data *rmi4_data = + container_of(delayed_work, struct synaptics_rmi4_data, + rb_work); + + mutex_lock(&(rmi4_data->rmi4_reset_mutex)); + + mutex_lock(&exp_data.mutex); + + synaptics_rmi4_irq_enable(rmi4_data, false, false); + + if (!list_empty(&exp_data.list)) { + list_for_each_entry(exp_fhandler, &exp_data.list, link) + if (exp_fhandler->exp_fn->remove != NULL) + exp_fhandler->exp_fn->remove(rmi4_data); + } + + for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) { + sysfs_remove_file(&rmi4_data->input_dev->dev.kobj, + &attrs[attr_count].attr); + } + + synaptics_rmi4_free_fingers(rmi4_data); + synaptics_rmi4_empty_fn_list(rmi4_data); + input_unregister_device(rmi4_data->input_dev); + rmi4_data->input_dev = NULL; + if (rmi4_data->stylus_enable) { + input_unregister_device(rmi4_data->stylus_dev); + rmi4_data->stylus_dev = NULL; + } + + retval = synaptics_rmi4_sw_reset(rmi4_data); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to issue reset command\n", + __func__); + goto exit; + } + + retval = synaptics_rmi4_set_input_dev(rmi4_data); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set up input device\n", + __func__); + goto exit; + } + + for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) { + retval = sysfs_create_file(&rmi4_data->input_dev->dev.kobj, + &attrs[attr_count].attr); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create sysfs attributes\n", + __func__); + goto exit; + } + } + + if (!list_empty(&exp_data.list)) { + list_for_each_entry(exp_fhandler, &exp_data.list, link) + if (exp_fhandler->exp_fn->init != NULL) + exp_fhandler->exp_fn->init(rmi4_data); + } + + retval = 0; + +exit: + synaptics_rmi4_irq_enable(rmi4_data, true, false); + + mutex_unlock(&exp_data.mutex); + + mutex_unlock(&(rmi4_data->rmi4_reset_mutex)); + + return; +} + +static int synaptics_rmi4_reinit_device(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + struct synaptics_rmi4_fn *fhandler; + struct synaptics_rmi4_exp_fhandler *exp_fhandler; + struct synaptics_rmi4_device_info *rmi; + + rmi = &(rmi4_data->rmi4_mod_info); + + mutex_lock(&(rmi4_data->rmi4_reset_mutex)); + + synaptics_rmi4_free_fingers(rmi4_data); + + if (!list_empty(&rmi->support_fn_list)) { + list_for_each_entry(fhandler, &rmi->support_fn_list, link) { + if (fhandler->fn_number == SYNAPTICS_RMI4_F12) { + synaptics_rmi4_f12_set_enables(rmi4_data, 0); + break; + } + } + } + + retval = synaptics_rmi4_int_enable(rmi4_data, true); + if (retval < 0) + goto exit; + + mutex_lock(&exp_data.mutex); + if (!list_empty(&exp_data.list)) { + list_for_each_entry(exp_fhandler, &exp_data.list, link) + if (exp_fhandler->exp_fn->reinit != NULL) + exp_fhandler->exp_fn->reinit(rmi4_data); + } + mutex_unlock(&exp_data.mutex); + + synaptics_rmi4_set_configured(rmi4_data); + + retval = 0; + +exit: + mutex_unlock(&(rmi4_data->rmi4_reset_mutex)); + return retval; +} + +static int synaptics_rmi4_reset_device(struct synaptics_rmi4_data *rmi4_data, + bool rebuild) +{ + int retval; + struct synaptics_rmi4_exp_fhandler *exp_fhandler; + + if (rebuild) { + queue_delayed_work(rmi4_data->rb_workqueue, + &rmi4_data->rb_work, + msecs_to_jiffies(REBUILD_WORK_DELAY_MS)); + return 0; + } + + mutex_lock(&(rmi4_data->rmi4_reset_mutex)); + + synaptics_rmi4_irq_enable(rmi4_data, false, false); + + retval = synaptics_rmi4_sw_reset(rmi4_data); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to issue reset command\n", + __func__); + goto exit; + } + + synaptics_rmi4_free_fingers(rmi4_data); + + synaptics_rmi4_empty_fn_list(rmi4_data); + + retval = synaptics_rmi4_query_device(rmi4_data); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to query device\n", + __func__); + goto exit; + } + + mutex_lock(&exp_data.mutex); + if (!list_empty(&exp_data.list)) { + list_for_each_entry(exp_fhandler, &exp_data.list, link) + if (exp_fhandler->exp_fn->reset != NULL) + exp_fhandler->exp_fn->reset(rmi4_data); + } + mutex_unlock(&exp_data.mutex); + + retval = 0; + +exit: + synaptics_rmi4_irq_enable(rmi4_data, true, false); + + mutex_unlock(&(rmi4_data->rmi4_reset_mutex)); + + return retval; +} + +#ifdef FB_READY_RESET +static void synaptics_rmi4_reset_work(struct work_struct *work) +{ + int retval; + unsigned int timeout; + struct synaptics_rmi4_data *rmi4_data = + container_of(work, struct synaptics_rmi4_data, + reset_work); + + timeout = FB_READY_TIMEOUT_S * 1000 / FB_READY_WAIT_MS + 1; + + while (!rmi4_data->fb_ready) { + msleep(FB_READY_WAIT_MS); + timeout--; + if (timeout == 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Timed out waiting for FB ready\n", + __func__); + return; + } + } + + mutex_lock(&rmi4_data->rmi4_exp_init_mutex); + + retval = synaptics_rmi4_reset_device(rmi4_data, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to issue reset command\n", + __func__); + } + + mutex_unlock(&rmi4_data->rmi4_exp_init_mutex); + + return; +} +#endif + +static void synaptics_rmi4_sleep_enable(struct synaptics_rmi4_data *rmi4_data, + bool enable) +{ + int retval; + unsigned char device_ctrl; + unsigned char no_sleep_setting = rmi4_data->no_sleep_setting; + + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_ctrl_base_addr, + &device_ctrl, + sizeof(device_ctrl)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read device control\n", + __func__); + return; + } + + device_ctrl = device_ctrl & ~MASK_3BIT; + if (enable) + device_ctrl = device_ctrl | NO_SLEEP_OFF | SENSOR_SLEEP; + else + device_ctrl = device_ctrl | no_sleep_setting | NORMAL_OPERATION; + + retval = synaptics_rmi4_reg_write(rmi4_data, + rmi4_data->f01_ctrl_base_addr, + &device_ctrl, + sizeof(device_ctrl)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write device control\n", + __func__); + return; + } + + rmi4_data->sensor_sleep = enable; + + return; +} + +static void synaptics_rmi4_exp_fn_work(struct work_struct *work) +{ + struct synaptics_rmi4_exp_fhandler *exp_fhandler; + struct synaptics_rmi4_exp_fhandler *exp_fhandler_temp; + struct synaptics_rmi4_data *rmi4_data = exp_data.rmi4_data; + + mutex_lock(&rmi4_data->rmi4_exp_init_mutex); + mutex_lock(&rmi4_data->rmi4_reset_mutex); + mutex_lock(&exp_data.mutex); + if (!list_empty(&exp_data.list)) { + list_for_each_entry_safe(exp_fhandler, + exp_fhandler_temp, + &exp_data.list, + link) { + if ((exp_fhandler->exp_fn->init != NULL) && + exp_fhandler->insert) { + exp_fhandler->exp_fn->init(rmi4_data); + exp_fhandler->insert = false; + } else if ((exp_fhandler->exp_fn->remove != NULL) && + exp_fhandler->remove) { + exp_fhandler->exp_fn->remove(rmi4_data); + list_del(&exp_fhandler->link); + kfree(exp_fhandler); + } + } + } + mutex_unlock(&exp_data.mutex); + mutex_unlock(&rmi4_data->rmi4_reset_mutex); + mutex_unlock(&rmi4_data->rmi4_exp_init_mutex); + + return; +} + +void synaptics_rmi4_new_function_force(struct synaptics_rmi4_exp_fn *exp_fn, + bool insert) +{ + struct synaptics_rmi4_exp_fhandler *exp_fhandler; + + if (!exp_data.initialized) { + mutex_init(&exp_data.mutex); + INIT_LIST_HEAD(&exp_data.list); + exp_data.initialized = true; + } + + mutex_lock(&exp_data.mutex); + if (insert) { + exp_fhandler = kzalloc(sizeof(*exp_fhandler), GFP_KERNEL); + if (!exp_fhandler) { + pr_err("%s: Failed to alloc mem for expansion function\n", + __func__); + goto exit; + } + exp_fhandler->exp_fn = exp_fn; + exp_fhandler->insert = true; + exp_fhandler->remove = false; + list_add_tail(&exp_fhandler->link, &exp_data.list); + } else if (!list_empty(&exp_data.list)) { + list_for_each_entry(exp_fhandler, &exp_data.list, link) { + if (exp_fhandler->exp_fn->fn_type == exp_fn->fn_type) { + exp_fhandler->insert = false; + exp_fhandler->remove = true; + goto exit; + } + } + } + +exit: + mutex_unlock(&exp_data.mutex); + + if (exp_data.queue_work) { + queue_delayed_work(exp_data.workqueue, + &exp_data.work, + msecs_to_jiffies(EXP_FN_WORK_DELAY_MS)); + } + + return; +} + +#ifdef CONFIG_TOUCH_DEBUG_FS +static int synaptics_tpdbg_suspend(struct synaptics_rmi4_data *rmi4_data) +{ + struct synaptics_rmi4_exp_fhandler *exp_fhandler; + + synaptics_rmi4_irq_enable(rmi4_data, false, false); + if (!rmi4_data->enable_wakeup_gesture) + synaptics_rmi4_sleep_enable(rmi4_data, true); + + if (rmi4_data->enable_wakeup_gesture) { + msleep(300); + synaptics_rmi4_wakeup_gesture(rmi4_data, true); + synaptics_rmi4_irq_enable(rmi4_data, true, false); + goto exit; + } + + mutex_lock(&exp_data.mutex); + if (!list_empty(&exp_data.list)) { + list_for_each_entry(exp_fhandler, &exp_data.list, link) + if (exp_fhandler->exp_fn->suspend != NULL) + exp_fhandler->exp_fn->suspend(rmi4_data); + } + mutex_unlock(&exp_data.mutex); + +exit: + return 0; +} + +static int synaptics_tpdbg_resume(struct synaptics_rmi4_data *rmi4_data) +{ + struct synaptics_rmi4_exp_fhandler *exp_fhandler; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + if (rmi4_data->enable_wakeup_gesture) { + synaptics_rmi4_wakeup_gesture(rmi4_data, false); + if (bdata->reset_gpio >= 0) { + gpio_set_value(bdata->reset_gpio, bdata->reset_on_state); + msleep(bdata->reset_active_ms); + gpio_set_value(bdata->reset_gpio, !bdata->reset_on_state); + msleep(bdata->reset_delay_ms); + } + } else { + rmi4_data->current_page = MASK_8BIT; + if (bdata->reset_gpio >= 0) { + gpio_set_value(bdata->reset_gpio, bdata->reset_on_state); + msleep(bdata->reset_active_ms); + gpio_set_value(bdata->reset_gpio, !bdata->reset_on_state); + msleep(bdata->reset_delay_ms); + } + + synaptics_rmi4_sleep_enable(rmi4_data, false); + synaptics_rmi4_irq_enable(rmi4_data, true, false); + + mutex_lock(&exp_data.mutex); + if (!list_empty(&exp_data.list)) { + list_for_each_entry(exp_fhandler, &exp_data.list, link) + if (exp_fhandler->exp_fn->resume != NULL) + exp_fhandler->exp_fn->resume(rmi4_data); + } + mutex_unlock(&exp_data.mutex); + } + + return 0; +} + +static void tpdbg_shutdown(struct synaptics_rmi4_data *rmi4_data, bool sleep) +{ + synaptics_rmi4_sleep_enable(rmi4_data, sleep); +} + +static void tpdbg_suspend(struct synaptics_rmi4_data *rmi4_data, bool enable) +{ + if (enable) + synaptics_tpdbg_suspend(rmi4_data); + else + synaptics_tpdbg_resume(rmi4_data); +} + +static int tpdbg_open(struct inode *inode, struct file *file) +{ + file->private_data = inode->i_private; + + return 0; +} + +ssize_t tpdbg_read(struct file *file, char __user *buf, size_t size, loff_t *ppos) +{ + const char *str = "cmd support as below:\n \ + \necho \"irq-disable\" or \"irq-enable\" to ctrl irq\n \ + \necho \"tp-sd-en\" of \"tp-sd-off\" to ctrl panel in or off sleep mode\n \ + \necho \"tp-suspend-en\" or \"tp-suspend-off\" to ctrl panel in or off suspend status\n"; + + loff_t pos = *ppos; + int len = strlen(str); + + if (pos < 0) + return -EINVAL; + if (pos >= len) + return 0; + + if (copy_to_user(buf, str, len)) + return -EFAULT; + + *ppos = pos + len; + + return len; +} + +ssize_t tpdbg_write(struct file *file, const char __user *buf, size_t size, loff_t *ppos) +{ + struct synaptics_rmi4_data *rmi4_data = file->private_data; + char *cmd = kzalloc(size + 1, GFP_KERNEL); + int ret = size; + + if (!cmd) + return -ENOMEM; + + if (copy_from_user(cmd, buf, size)) { + ret = -EFAULT; + goto out; + } + + cmd[size] = '\0'; + + if (!strncmp(cmd, "irq-disable", 11)) + disable_irq(rmi4_data->irq); + else if (!strncmp(cmd, "irq-enable", 10)) + enable_irq(rmi4_data->irq); + else if (!strncmp(cmd, "tp-sd-en", 8)) + tpdbg_shutdown(rmi4_data, true); + else if (!strncmp(cmd, "tp-sd-off", 9)) + tpdbg_shutdown(rmi4_data, false); + else if (!strncmp(cmd, "tp-suspend-en", 13)) + tpdbg_suspend(rmi4_data, true); + else if (!strncmp(cmd, "tp-suspend-off", 14)) + tpdbg_suspend(rmi4_data, false); +out: + kfree(cmd); + + return ret; +} + +int tpdbg_release (struct inode *inode, struct file *file) +{ + file->private_data = NULL; + + return 0; +} + +static const struct file_operations tpdbg_operations = { + .owner = THIS_MODULE, + .open = tpdbg_open, + .read = tpdbg_read, + .write = tpdbg_write, + .release = tpdbg_release, +}; +#endif + +static int synaptics_rmi4_probe(struct platform_device *pdev) +{ + int retval; + unsigned char attr_count; + struct synaptics_rmi4_data *rmi4_data; + const struct synaptics_dsx_hw_interface *hw_if; + const struct synaptics_dsx_board_data *bdata; + + hw_if = pdev->dev.platform_data; + if (!hw_if) { + dev_err(&pdev->dev, + "%s: No hardware interface found\n", + __func__); + return -EINVAL; + } + + bdata = hw_if->board_data; + if (!bdata) { + dev_err(&pdev->dev, + "%s: No board data found\n", + __func__); + return -EINVAL; + } + + rmi4_data = kzalloc(sizeof(*rmi4_data), GFP_KERNEL); + if (!rmi4_data) { + dev_err(&pdev->dev, + "%s: Failed to alloc mem for rmi4_data\n", + __func__); + return -ENOMEM; + } + + rmi4_data->pdev = pdev; + rmi4_data->current_page = MASK_8BIT; + rmi4_data->hw_if = hw_if; + rmi4_data->suspend = false; + rmi4_data->irq_enabled = false; + rmi4_data->fingers_on_2d = false; + rmi4_data->wakeup_en = false; + + rmi4_data->reset_device = synaptics_rmi4_reset_device; + rmi4_data->irq_enable = synaptics_rmi4_irq_enable; + rmi4_data->sleep_enable = synaptics_rmi4_sleep_enable; + + mutex_init(&(rmi4_data->rmi4_reset_mutex)); + mutex_init(&(rmi4_data->rmi4_report_mutex)); + mutex_init(&(rmi4_data->rmi4_io_ctrl_mutex)); + mutex_init(&(rmi4_data->rmi4_exp_init_mutex)); + mutex_init(&(rmi4_data->rmi4_irq_enable_mutex)); + mutex_init(&(rmi4_data->rmi4_cover_mutex)); + + init_completion(&rmi4_data->dump_completion); + + platform_set_drvdata(pdev, rmi4_data); + + vir_button_map = bdata->vir_button_map; + + retval = synaptics_rmi4_get_reg(rmi4_data, true); + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to get regulators\n", + __func__); + goto err_get_reg; + } + + retval = synaptics_rmi4_enable_reg(rmi4_data, true); + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to enable regulators\n", + __func__); + goto err_enable_reg; + } + + retval = synaptics_rmi4_pinctrl_init(rmi4_data); + if (!retval && rmi4_data->ts_pinctrl) { + retval = pinctrl_select_state(rmi4_data->ts_pinctrl, + rmi4_data->pinctrl_state_active); + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to select %s pinstate %d\n", + __func__, PINCTRL_STATE_ACTIVE, retval); + goto err_pinctrl_init; + } + } else { + dev_err(&pdev->dev, + "%s: Failed to init pinctrl\n", + __func__); + goto err_pinctrl_init; + } + + retval = synaptics_rmi4_set_gpio(rmi4_data); + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to set up GPIO's\n", + __func__); + goto err_set_gpio; + } + + if (hw_if->ui_hw_init) { + retval = hw_if->ui_hw_init(rmi4_data); + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to initialize hardware interface\n", + __func__); + goto err_ui_hw_init; + } + } + + retval = synaptics_rmi4_set_input_dev(rmi4_data); + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to set up input device\n", + __func__); + goto err_set_input_dev; + } + + synaptics_rmi4_query_chip_id(rmi4_data); + +#ifdef CONFIG_FB + if (!rmi4_data->chip_is_tddi) + rmi4_data->fb_notifier.notifier_call = synaptics_rmi4_fb_notifier_cb; + else + rmi4_data->fb_notifier.notifier_call = synaptics_rmi4_fb_notifier_cb_tddi; + retval = fb_register_client(&rmi4_data->fb_notifier); + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to register fb notifier client\n", + __func__); + } +#endif + if (rmi4_data->chip_is_tddi) + INIT_DELAYED_WORK(&rmi4_data->tddi_reset_work, synaptics_rmi4_tddi_reset_work); + +#ifdef USE_EARLYSUSPEND + rmi4_data->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1; + rmi4_data->early_suspend.suspend = synaptics_rmi4_early_suspend; + rmi4_data->early_suspend.resume = synaptics_rmi4_late_resume; + register_early_suspend(&rmi4_data->early_suspend); +#endif + + if (!exp_data.initialized) { + mutex_init(&exp_data.mutex); + INIT_LIST_HEAD(&exp_data.list); + exp_data.initialized = true; + } + + rmi4_data->irq = gpio_to_irq(bdata->irq_gpio); + + retval = synaptics_rmi4_irq_enable(rmi4_data, true, false); + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to enable attention interrupt\n", + __func__); + goto err_enable_irq; + } + + if (vir_button_map->nbuttons) { + rmi4_data->board_prop_dir = kobject_create_and_add( + "board_properties", NULL); + if (!rmi4_data->board_prop_dir) { + dev_err(&pdev->dev, + "%s: Failed to create board_properties directory\n", + __func__); + goto err_virtual_buttons; + } else { + retval = sysfs_create_file(rmi4_data->board_prop_dir, + &virtual_key_map_attr.attr); + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to create virtual key map file\n", + __func__); + goto err_virtual_buttons; + } + } + } + + for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) { + retval = sysfs_create_file(&rmi4_data->input_dev->dev.kobj, + &attrs[attr_count].attr); + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to create sysfs attributes\n", + __func__); + goto err_sysfs; + } + } + + retval = sysfs_create_file(&rmi4_data->pdev->dev.parent->kobj, &dev_attr_panel_color.attr); + + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to create sysfs attributes\n", + __func__); + goto err_sysfs; + } + +#if defined(CONFIG_SECURE_TOUCH) + retval = sysfs_create_file(&rmi4_data->pdev->dev.parent->kobj, &dev_attr_secure_touch.attr); + + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to create sysfs attributes\n", + __func__); + goto err_sysfs_secure; + } + + retval = sysfs_create_file(&rmi4_data->pdev->dev.parent->kobj, &dev_attr_secure_touch_enable.attr); + + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to create sysfs attributes\n", + __func__); + goto err_sysfs_secure_enable; + } +#endif + + retval = sysfs_create_file(&rmi4_data->pdev->dev.parent->kobj, &dev_attr_panel_vendor.attr); + + if (retval < 0) { + dev_err(&pdev->dev, + "%s: Failed to create sysfs attributes\n", + __func__); + goto err_sysfs_panel_vendor; + } + +#ifdef CONFIG_TOUCH_DEBUG_FS + rmi4_data->debugfs = debugfs_create_dir("tp_debug", NULL); + if (rmi4_data->debugfs) { + debugfs_create_file("switch_state", 0660, rmi4_data->debugfs, rmi4_data, &tpdbg_operations); + } +#endif + + dev_set_drvdata(rmi4_data->pdev->dev.parent, rmi4_data); + + rmi4_data->rb_workqueue = + create_singlethread_workqueue("dsx_rebuild_workqueue"); + INIT_DELAYED_WORK(&rmi4_data->rb_work, synaptics_rmi4_rebuild_work); + + exp_data.workqueue = create_singlethread_workqueue("dsx_exp_workqueue"); + INIT_DELAYED_WORK(&exp_data.work, synaptics_rmi4_exp_fn_work); + exp_data.rmi4_data = rmi4_data; + exp_data.queue_work = true; + queue_delayed_work(exp_data.workqueue, + &exp_data.work, + 0); + +#ifdef FB_READY_RESET + rmi4_data->reset_workqueue = + create_singlethread_workqueue("dsx_reset_workqueue"); + INIT_WORK(&rmi4_data->reset_work, synaptics_rmi4_reset_work); + queue_work(rmi4_data->reset_workqueue, &rmi4_data->reset_work); +#endif + + device_init_wakeup(&pdev->dev, 1); + + synaptics_secure_touch_init(rmi4_data); + synaptics_secure_touch_stop(rmi4_data, 1); + + return retval; + + +err_sysfs_panel_vendor: +#if defined(CONFIG_SECURE_TOUCH) + sysfs_remove_file(&rmi4_data->pdev->dev.parent->kobj, &dev_attr_secure_touch_enable.attr); +err_sysfs_secure_enable: + sysfs_remove_file(&rmi4_data->pdev->dev.parent->kobj, &dev_attr_secure_touch.attr); +err_sysfs_secure: + sysfs_remove_file(&rmi4_data->pdev->dev.parent->kobj, &dev_attr_panel_color.attr); +#endif +err_sysfs: + for (attr_count--; attr_count >= 0; attr_count--) { + sysfs_remove_file(&rmi4_data->input_dev->dev.kobj, + &attrs[attr_count].attr); + } + +err_virtual_buttons: + if (rmi4_data->board_prop_dir) { + sysfs_remove_file(rmi4_data->board_prop_dir, + &virtual_key_map_attr.attr); + kobject_put(rmi4_data->board_prop_dir); + } + + synaptics_rmi4_irq_enable(rmi4_data, false, false); + +err_enable_irq: +#ifdef CONFIG_FB + fb_unregister_client(&rmi4_data->fb_notifier); +#endif + +#ifdef USE_EARLYSUSPEND + unregister_early_suspend(&rmi4_data->early_suspend); +#endif + + synaptics_rmi4_empty_fn_list(rmi4_data); + input_unregister_device(rmi4_data->input_dev); + rmi4_data->input_dev = NULL; + if (rmi4_data->stylus_enable) { + input_unregister_device(rmi4_data->stylus_dev); + rmi4_data->stylus_dev = NULL; + } + +err_set_input_dev: + synaptics_rmi4_gpio_setup(bdata->irq_gpio, false, 0, 0, NULL); + + if (bdata->reset_gpio >= 0) + synaptics_rmi4_gpio_setup(bdata->reset_gpio, false, 0, 0, NULL); + + if (bdata->power_gpio >= 0) + synaptics_rmi4_gpio_setup(bdata->power_gpio, false, 0, 0, NULL); + +err_ui_hw_init: +err_set_gpio: + synaptics_rmi4_enable_reg(rmi4_data, false); + +err_pinctrl_init: + if (rmi4_data->ts_pinctrl) { + devm_pinctrl_put(rmi4_data->ts_pinctrl); + rmi4_data->ts_pinctrl = NULL; + } + +err_enable_reg: + synaptics_rmi4_get_reg(rmi4_data, false); + +err_get_reg: + kfree(rmi4_data); + + return retval; +} + +static int synaptics_rmi4_remove(struct platform_device *pdev) +{ + unsigned char attr_count; + struct synaptics_rmi4_data *rmi4_data = platform_get_drvdata(pdev); + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; +#ifdef CONFIG_SYNAPTICS_TOUCH_COUNT_DUMP + if (bdata->dump_click_count) { + if (!rmi4_data->current_clicknum_file) { + kfree(rmi4_data->current_clicknum_file); + rmi4_data->current_clicknum_file = NULL; + } + } +#endif +#ifdef FB_READY_RESET + cancel_work_sync(&rmi4_data->reset_work); + flush_workqueue(rmi4_data->reset_workqueue); + destroy_workqueue(rmi4_data->reset_workqueue); +#endif + + cancel_delayed_work_sync(&exp_data.work); + flush_workqueue(exp_data.workqueue); + destroy_workqueue(exp_data.workqueue); + + cancel_delayed_work_sync(&rmi4_data->rb_work); + flush_workqueue(rmi4_data->rb_workqueue); + destroy_workqueue(rmi4_data->rb_workqueue); + +#ifdef CONFIG_TOUCH_DEBUG_FS + debugfs_remove_recursive(rmi4_data->debugfs); +#endif + + sysfs_remove_file(&rmi4_data->pdev->dev.parent->kobj, &dev_attr_panel_vendor.attr); +#if defined(CONFIG_SECURE_TOUCH) + sysfs_remove_file(&rmi4_data->pdev->dev.parent->kobj, &dev_attr_secure_touch_enable.attr); + sysfs_remove_file(&rmi4_data->pdev->dev.parent->kobj, &dev_attr_secure_touch.attr); +#endif + sysfs_remove_file(&rmi4_data->pdev->dev.parent->kobj, &dev_attr_panel_color.attr); + + for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) { + sysfs_remove_file(&rmi4_data->input_dev->dev.kobj, + &attrs[attr_count].attr); + } + + if (rmi4_data->board_prop_dir) { + sysfs_remove_file(rmi4_data->board_prop_dir, + &virtual_key_map_attr.attr); + kobject_put(rmi4_data->board_prop_dir); + } + + synaptics_rmi4_irq_enable(rmi4_data, false, false); + +#ifdef CONFIG_FB + fb_unregister_client(&rmi4_data->fb_notifier); +#endif + +#ifdef USE_EARLYSUSPEND + unregister_early_suspend(&rmi4_data->early_suspend); +#endif + + synaptics_rmi4_empty_fn_list(rmi4_data); + input_unregister_device(rmi4_data->input_dev); + rmi4_data->input_dev = NULL; + if (rmi4_data->stylus_enable) { + input_unregister_device(rmi4_data->stylus_dev); + rmi4_data->stylus_dev = NULL; + } + + synaptics_rmi4_gpio_setup(bdata->irq_gpio, false, 0, 0, NULL); + + if (bdata->reset_gpio >= 0) + synaptics_rmi4_gpio_setup(bdata->reset_gpio, false, 0, 0, NULL); + + if (bdata->power_gpio >= 0) + synaptics_rmi4_gpio_setup(bdata->power_gpio, false, 0, 0, NULL); + + synaptics_rmi4_enable_reg(rmi4_data, false); + synaptics_rmi4_get_reg(rmi4_data, false); + + kfree(rmi4_data); + + return 0; +} + +static void synaptics_rmi4_f11_wg(struct synaptics_rmi4_data *rmi4_data, + bool enable) +{ + int retval; + unsigned char reporting_control; + struct synaptics_rmi4_fn *fhandler; + struct synaptics_rmi4_device_info *rmi; + + rmi = &(rmi4_data->rmi4_mod_info); + + list_for_each_entry(fhandler, &rmi->support_fn_list, link) { + if (fhandler->fn_number == SYNAPTICS_RMI4_F11) + break; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.ctrl_base, + &reporting_control, + sizeof(reporting_control)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to change reporting mode\n", + __func__); + return; + } + + reporting_control = (reporting_control & ~MASK_3BIT); + if (enable) + reporting_control |= F11_WAKEUP_GESTURE_MODE; + else + reporting_control |= F11_CONTINUOUS_MODE; + + retval = synaptics_rmi4_reg_write(rmi4_data, + fhandler->full_addr.ctrl_base, + &reporting_control, + sizeof(reporting_control)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to change reporting mode\n", + __func__); + return; + } + + return; +} + +static void mdss_regulator_ctrl(struct synaptics_rmi4_data *rmi4_data, unsigned int flag, bool enable) +{ + int retval = 0; + static unsigned int status; + + if (rmi4_data == NULL) + return; + if (!rmi4_data->hw_if->board_data->panel_is_incell) + return; + + if (enable) { + if (rmi4_data->disp_reg && (flag & DISP_REG_VDD) && !(status & DISP_REG_VDD)) { + retval = regulator_enable(rmi4_data->disp_reg); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to enable disp regulator\n", + __func__); + return; + } + + status |= DISP_REG_VDD; + } + + if (rmi4_data->lab_reg && (flag & DISP_REG_LAB) && !(status & DISP_REG_LAB)) { + retval = regulator_enable(rmi4_data->lab_reg); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to enable lab regulator\n", + __func__); + return; + } + + status |= DISP_REG_LAB; + } + + if (rmi4_data->ibb_reg && (flag & DISP_REG_IBB) && !(status & DISP_REG_IBB)) { + retval = regulator_enable(rmi4_data->ibb_reg); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to enable ibb regulator\n", + __func__); + return; + } + + status |= DISP_REG_IBB; + } + } else { + if (rmi4_data->ibb_reg && (flag & DISP_REG_IBB) && (status & DISP_REG_IBB)) { + retval = regulator_disable(rmi4_data->ibb_reg); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to disable ibb regulator\n", + __func__); + return; + } + + status &= ~DISP_REG_IBB; + } + + if (rmi4_data->lab_reg && (flag & DISP_REG_LAB) && (status & DISP_REG_LAB)) { + retval = regulator_disable(rmi4_data->lab_reg); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to disable lab regulator\n", + __func__); + return; + } + + status &= ~DISP_REG_LAB; + } + + if (rmi4_data->disp_reg && (flag & DISP_REG_VDD) && (status & DISP_REG_VDD)) { + retval = regulator_disable(rmi4_data->disp_reg); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to disable disp regulator\n", + __func__); + return; + } + + status &= ~DISP_REG_VDD; + } + } +} + +static void mdss_reset_ctrl(const struct synaptics_dsx_board_data *bdata, bool on) +{ + if (!bdata->panel_is_incell) + return; + + if (bdata->mdss_reset > 0) { + if (on) + gpio_set_value(bdata->mdss_reset, bdata->mdss_reset_state); + else + gpio_set_value(bdata->mdss_reset, !bdata->mdss_reset_state); + } +} + +#if 0 +static void mdss_panel_poweron(struct synaptics_rmi4_data *rmi4_data, bool enable) +{ + if (!rmi4_data->hw_if->board_data->panel_is_incell) + return; + + if (enable) { +#if 0 + /*disp regulator always on, so do not control this regulator*/ + if (rmi4_data->panel_power_seq.disp_pre_on_sleep) + msleep(rmi4_data->panel_power_seq.disp_pre_on_sleep); + mdss_regulator_ctrl(rmi4_data, DISP_REG_VDD, true); + if (rmi4_data->panel_power_seq.disp_post_on_sleep) + msleep(rmi4_data->panel_power_seq.disp_post_on_sleep); +#endif + if (rmi4_data->panel_power_seq.lab_pre_on_sleep) + msleep(rmi4_data->panel_power_seq.lab_pre_on_sleep); + mdss_regulator_ctrl(rmi4_data, DISP_REG_LAB, true); + if (rmi4_data->panel_power_seq.lab_post_on_sleep) + msleep(rmi4_data->panel_power_seq.lab_post_on_sleep); + + if (rmi4_data->panel_power_seq.ibb_pre_on_sleep) + msleep(rmi4_data->panel_power_seq.ibb_pre_on_sleep); + mdss_regulator_ctrl(rmi4_data, DISP_REG_IBB, true); + if (rmi4_data->panel_power_seq.ibb_post_on_sleep) + msleep(rmi4_data->panel_power_seq.ibb_post_on_sleep); + } else { + if (rmi4_data->panel_power_seq.ibb_pre_off_sleep) + msleep(rmi4_data->panel_power_seq.ibb_pre_off_sleep); + mdss_regulator_ctrl(rmi4_data, DISP_REG_IBB, false); + if (rmi4_data->panel_power_seq.ibb_post_off_sleep) + msleep(rmi4_data->panel_power_seq.ibb_post_off_sleep); + + if (rmi4_data->panel_power_seq.lab_pre_off_sleep) + msleep(rmi4_data->panel_power_seq.lab_pre_off_sleep); + mdss_regulator_ctrl(rmi4_data, DISP_REG_LAB, false); + if (rmi4_data->panel_power_seq.lab_post_off_sleep) + msleep(rmi4_data->panel_power_seq.lab_post_off_sleep); +#if 0 + /*disp regulator always on, so do not control this regulator*/ + if (rmi4_data->panel_power_seq.disp_pre_off_sleep) + msleep(rmi4_data->panel_power_seq.disp_pre_off_sleep); + mdss_regulator_ctrl(rmi4_data, DISP_REG_VDD, false); + if (rmi4_data->panel_power_seq.disp_post_off_sleep) + msleep(rmi4_data->panel_power_seq.disp_post_off_sleep); +#endif + } + pr_debug("power %s seq:\n", enable ? "on" : "off"); +#if 0 + /*disp regulator always on, so do not control this regulator*/ + pr_debug("IOVDD: preonsleep=%d,postonsleep=%d,preoffsleep=%d,postoffsleep=%d\n", + rmi4_data->panel_power_seq.disp_pre_on_sleep, + rmi4_data->panel_power_seq.disp_post_on_sleep, + rmi4_data->panel_power_seq.disp_pre_off_sleep, + rmi4_data->panel_power_seq.disp_post_off_sleep); +#endif + pr_debug("LAB: preonsleep=%d,postonsleep=%d,preoffsleep=%d,postoffsleep=%d\n", + rmi4_data->panel_power_seq.lab_pre_on_sleep, + rmi4_data->panel_power_seq.lab_post_on_sleep, + rmi4_data->panel_power_seq.lab_pre_off_sleep, + rmi4_data->panel_power_seq.lab_post_off_sleep); + pr_debug("IBB: preonsleep=%d,postonsleep=%d,preoffsleep=%d,postoffsleep=%d\n", + rmi4_data->panel_power_seq.ibb_pre_on_sleep, + rmi4_data->panel_power_seq.ibb_post_on_sleep, + rmi4_data->panel_power_seq.ibb_pre_off_sleep, + rmi4_data->panel_power_seq.ibb_post_off_sleep); +} +#endif + +static void mdss_reset_action(const struct synaptics_dsx_board_data *bdata) +{ + if (bdata->mdss_reset > 0) { + gpio_set_value(bdata->mdss_reset, !bdata->mdss_reset_state); + msleep(10); + gpio_set_value(bdata->mdss_reset, bdata->mdss_reset_state); + msleep(10); + } +} + +static void synaptics_rmi4_f12_wg(struct synaptics_rmi4_data *rmi4_data, + bool enable) +{ + int retval; + unsigned char offset; + unsigned char reporting_control[3]; + struct synaptics_rmi4_f12_extra_data *extra_data; + struct synaptics_rmi4_fn *fhandler; + struct synaptics_rmi4_device_info *rmi; + + rmi = &(rmi4_data->rmi4_mod_info); + + list_for_each_entry(fhandler, &rmi->support_fn_list, link) { + if (fhandler->fn_number == SYNAPTICS_RMI4_F12) + break; + } + + extra_data = (struct synaptics_rmi4_f12_extra_data *)fhandler->extra; + offset = extra_data->ctrl20_offset; + + retval = synaptics_rmi4_reg_read(rmi4_data, + fhandler->full_addr.ctrl_base + offset, + reporting_control, + sizeof(reporting_control)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to change reporting mode\n", + __func__); + return; + } + + if (enable) + reporting_control[2] = F12_WAKEUP_GESTURE_MODE; + else + reporting_control[2] = F12_CONTINUOUS_MODE; + + retval = synaptics_rmi4_reg_write(rmi4_data, + fhandler->full_addr.ctrl_base + offset, + reporting_control, + sizeof(reporting_control)); + + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to change reporting mode\n", + __func__); + return; + } + + return; +} + +static void synaptics_rmi4_wakeup_gesture(struct synaptics_rmi4_data *rmi4_data, + bool enable) +{ + if (rmi4_data->f11_wakeup_gesture) + synaptics_rmi4_f11_wg(rmi4_data, enable); + else if (rmi4_data->f12_wakeup_gesture) + synaptics_rmi4_f12_wg(rmi4_data, enable); + + return; +} + +#ifdef CONFIG_FB +static int synaptics_rmi4_fb_notifier_cb(struct notifier_block *self, + unsigned long event, void *data) +{ + int *transition; + struct fb_event *evdata = data; + struct synaptics_rmi4_data *rmi4_data = + container_of(self, struct synaptics_rmi4_data, + fb_notifier); + + const struct synaptics_dsx_board_data *bdata = NULL; + + if (rmi4_data->hw_if->board_data) + bdata = rmi4_data->hw_if->board_data; + else + return 0; + + /* Receive notifications from primary panel only */ + if (evdata && evdata->data && rmi4_data && mdss_panel_is_prim(evdata->info)) { + if (event == FB_EVENT_BLANK) { + transition = evdata->data; + if ((*transition == FB_BLANK_POWERDOWN) || (*transition == FB_BLANK_NORMAL)) { + synaptics_rmi4_suspend(&rmi4_data->pdev->dev); + if (rmi4_data->pocketmode_on) + synaptics_rmi4_pocketmode(rmi4_data, rmi4_data->pocketmode_on); + rmi4_data->fb_ready = false; + } else if ((*transition == FB_BLANK_UNBLANK) || (*transition == FB_BLANK_NORMAL)) { + synaptics_rmi4_resume(&rmi4_data->pdev->dev); + rmi4_data->fb_ready = true; + if (rmi4_data->wakeup_en) { + mdss_panel_reset_skip_enable(false); + mdss_regulator_ctrl(rmi4_data, DISP_REG_ALL, false); + mdss_dsi_ulps_suspend_enable(false); + mdss_dsi_ulps_enable(false); + rmi4_data->wakeup_en = false; + } + + rmi4_data->disable_data_dump = false; + } + } else if (event == FB_EARLY_EVENT_BLANK) { + transition = evdata->data; + if ((*transition == FB_BLANK_POWERDOWN) || (*transition == FB_BLANK_NORMAL)) { + rmi4_data->disable_data_dump = true; + if (rmi4_data->dump_flags) { + reinit_completion(&rmi4_data->dump_completion); + wait_for_completion_timeout(&rmi4_data->dump_completion, 4 * HZ); + } + + if (rmi4_data->enable_wakeup_gesture) { + rmi4_data->wakeup_en = true; + mdss_regulator_ctrl(rmi4_data, DISP_REG_ALL, true); + mdss_panel_reset_skip_enable(true); + pr_debug("Enable suspend ulps\n"); + mdss_dsi_ulps_enable(true); + mdss_dsi_ulps_suspend_enable(true); + } + } else if ((*transition == FB_BLANK_UNBLANK) || (*transition == FB_BLANK_NORMAL)) { + if (bdata->reset_gpio >= 0 && rmi4_data->suspend) { + gpio_set_value(bdata->reset_gpio, bdata->reset_on_state); + msleep(bdata->reset_active_ms); + gpio_set_value(bdata->reset_gpio, !bdata->reset_on_state); + } + if (rmi4_data->wakeup_en) { + mdss_reset_action(bdata); + } + } + } + } + + return 0; +} + +static int synaptics_rmi4_fb_notifier_cb_tddi(struct notifier_block *self, + unsigned long event, void *data) +{ + int *transition; + struct fb_event *evdata = data; + struct synaptics_rmi4_data *rmi4_data = + container_of(self, struct synaptics_rmi4_data, + fb_notifier); + + if (mdss_prim_panel_is_dead()) { + dev_err(rmi4_data->pdev->dev.parent, "%s: panel is dead\n", __func__); + return 0; + } + /* Receive notifications from primary panel only */ + if (evdata && evdata->data && rmi4_data && mdss_panel_is_prim(evdata->info)) { + if (event == FB_EVENT_BLANK) { + transition = evdata->data; + if ((*transition == FB_BLANK_UNBLANK) || (*transition == FB_BLANK_NORMAL)) { + if (rmi4_data->wakeup_en) { + mdss_panel_reset_skip_enable(false); + mdss_regulator_ctrl(rmi4_data, DISP_REG_ALL, false); + rmi4_data->wakeup_en = false; + } else { + synaptics_rmi4_resume(&rmi4_data->pdev->dev); + rmi4_data->fb_ready = true; + } + + rmi4_data->disable_data_dump = false; + } else if ((*transition == FB_BLANK_POWERDOWN) || (*transition == FB_BLANK_NORMAL)) { + if (rmi4_data->wakeup_en) { + synaptics_rmi4_suspend(&rmi4_data->pdev->dev); + rmi4_data->fb_ready = true; + } + if (rmi4_data->pocketmode_on) + synaptics_rmi4_pocketmode(rmi4_data, rmi4_data->pocketmode_on); + } + } else if (event == FB_EARLY_EVENT_BLANK) { + transition = evdata->data; + if (*transition == FB_BLANK_UNBLANK) { + if (rmi4_data->wakeup_en) { + synaptics_rmi4_resume(&rmi4_data->pdev->dev); + rmi4_data->fb_ready = true; + msleep(30); + } + } else if ((*transition == FB_BLANK_POWERDOWN) || (*transition == FB_BLANK_NORMAL)) { + rmi4_data->disable_data_dump = true; + if (rmi4_data->dump_flags) { + reinit_completion(&rmi4_data->dump_completion); + wait_for_completion_timeout(&rmi4_data->dump_completion, 4 * HZ); + } + + if (rmi4_data->enable_wakeup_gesture) { + rmi4_data->wakeup_en = true; + mdss_panel_reset_skip_enable(true); + mdss_regulator_ctrl(rmi4_data, DISP_REG_ALL, true); + } + + if (!rmi4_data->wakeup_en) { + synaptics_rmi4_suspend(&rmi4_data->pdev->dev); + rmi4_data->fb_ready = false; + } + } + } + } + + return 0; +} +#endif + +#ifdef USE_EARLYSUSPEND +static void synaptics_rmi4_early_suspend(struct early_suspend *h) +{ + struct synaptics_rmi4_exp_fhandler *exp_fhandler; + struct synaptics_rmi4_data *rmi4_data = + container_of(h, struct synaptics_rmi4_data, + early_suspend); + + if (rmi4_data->stay_awake) + return; + + if (rmi4_data->enable_wakeup_gesture) { + synaptics_rmi4_wakeup_gesture(rmi4_data, true); + enable_irq_wake(rmi4_data->irq); + goto exit; + } + + synaptics_rmi4_irq_enable(rmi4_data, false, false); + synaptics_rmi4_sleep_enable(rmi4_data, true); + synaptics_rmi4_free_fingers(rmi4_data); + +exit: + mutex_lock(&exp_data.mutex); + if (!list_empty(&exp_data.list)) { + list_for_each_entry(exp_fhandler, &exp_data.list, link) + if (exp_fhandler->exp_fn->early_suspend != NULL) + exp_fhandler->exp_fn->early_suspend(rmi4_data); + } + mutex_unlock(&exp_data.mutex); + + rmi4_data->suspend = true; + + return; +} + +static void synaptics_rmi4_late_resume(struct early_suspend *h) +{ +#ifdef FB_READY_RESET + int retval; +#endif + struct synaptics_rmi4_exp_fhandler *exp_fhandler; + struct synaptics_rmi4_data *rmi4_data = + container_of(h, struct synaptics_rmi4_data, + early_suspend); + + if (rmi4_data->stay_awake) + return; + + if (rmi4_data->enable_wakeup_gesture) { + synaptics_rmi4_wakeup_gesture(rmi4_data, false); + disable_irq_wake(rmi4_data->irq); + goto exit; + } + + rmi4_data->current_page = MASK_8BIT; + + if (rmi4_data->suspend) { + synaptics_rmi4_sleep_enable(rmi4_data, false); + synaptics_rmi4_irq_enable(rmi4_data, true, false); + } + +exit: +#ifdef FB_READY_RESET + if (rmi4_data->suspend) { + retval = synaptics_rmi4_reset_device(rmi4_data, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to issue reset command\n", + __func__); + } + } +#endif + mutex_lock(&exp_data.mutex); + if (!list_empty(&exp_data.list)) { + list_for_each_entry(exp_fhandler, &exp_data.list, link) + if (exp_fhandler->exp_fn->late_resume != NULL) + exp_fhandler->exp_fn->late_resume(rmi4_data); + } + mutex_unlock(&exp_data.mutex); + + rmi4_data->suspend = false; + + return; +} +#endif + +static void synaptics_rmi4_pocketmode(struct synaptics_rmi4_data *rmi4_data, bool onoff) +{ + if (!rmi4_data->wakeup_en) + return; + synaptics_rmi4_sleep_enable(rmi4_data, onoff); +} + +static int synaptics_rmi4_suspend(struct device *dev) +{ + struct synaptics_rmi4_exp_fhandler *exp_fhandler; + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + if (rmi4_data->stay_awake || rmi4_data->suspend) + return 0; + + if (!rmi4_data->wakeup_en && rmi4_data->ts_pinctrl) { + if (pinctrl_select_state(rmi4_data->ts_pinctrl, + rmi4_data->pinctrl_state_suspend) < 0) + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to select %s pinstate\n", + __func__, PINCTRL_STATE_SUSPEND); + } + + if (bdata->cut_off_power || (rmi4_data->chip_is_tddi && !rmi4_data->wakeup_en)) { + if (rmi4_data->fw_updating) + return 0; + + synaptics_rmi4_irq_enable(rmi4_data, false, false); + + if (bdata->power_gpio >= 0) + gpio_set_value(bdata->power_gpio, + !bdata->power_on_state); + + if (bdata->reset_gpio >= 0) { + gpio_set_value(bdata->reset_gpio, + bdata->reset_on_state); + mdelay(bdata->reset_active_ms); + } + + synaptics_rmi4_enable_reg(rmi4_data, false); + } else { + synaptics_secure_touch_stop(rmi4_data, 1); + + synaptics_rmi4_irq_enable(rmi4_data, false, false); + + if (!rmi4_data->wakeup_en) + synaptics_rmi4_sleep_enable(rmi4_data, true); + else { + if (!rmi4_data->chip_is_tddi) + msleep(300); + else + msleep(120); + synaptics_rmi4_wakeup_gesture(rmi4_data, true); + synaptics_rmi4_irq_enable(rmi4_data, true, false); + goto exit; + } + + mutex_lock(&exp_data.mutex); + if (!list_empty(&exp_data.list)) { + list_for_each_entry(exp_fhandler, &exp_data.list, link) + if (exp_fhandler->exp_fn->suspend != NULL) + exp_fhandler->exp_fn->suspend(rmi4_data); + } + mutex_unlock(&exp_data.mutex); + } + +exit: + synaptics_rmi4_free_fingers(rmi4_data); + + rmi4_data->suspend = true; + + return 0; +} + +static int synaptics_rmi4_resume(struct device *dev) +{ +#ifdef FB_READY_RESET + int retval; +#endif + struct synaptics_rmi4_exp_fhandler *exp_fhandler; + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + +#ifdef CONFIG_FB + static int skip; + + if (skip == 0) { + skip = 1; + return 0; + } +#endif + + if (rmi4_data->stay_awake || !rmi4_data->suspend) + return 0; + + if (!rmi4_data->wakeup_en && rmi4_data->ts_pinctrl) { + if (pinctrl_select_state(rmi4_data->ts_pinctrl, + rmi4_data->pinctrl_state_active) < 0) + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to select %s pinstate\n", + __func__, PINCTRL_STATE_ACTIVE); + } + + if (bdata->cut_off_power || (rmi4_data->chip_is_tddi && !rmi4_data->wakeup_en)) { + synaptics_rmi4_enable_reg(rmi4_data, true); + + if (bdata->power_gpio >= 0) { + gpio_set_value(bdata->power_gpio, + bdata->power_on_state); + mdelay(bdata->power_delay_ms); + } + + if (bdata->reset_gpio >= 0) { + gpio_set_value(bdata->reset_gpio, + !bdata->reset_on_state); + mdelay(bdata->reset_delay_ms); + } + + synaptics_rmi4_irq_enable(rmi4_data, true, false); + } else { + synaptics_secure_touch_stop(rmi4_data, 0); + + if (rmi4_data->wakeup_en) { + synaptics_rmi4_wakeup_gesture(rmi4_data, false); + } else { + rmi4_data->current_page = MASK_8BIT; + + synaptics_rmi4_sleep_enable(rmi4_data, false); + synaptics_rmi4_irq_enable(rmi4_data, true, false); + +#ifdef FB_READY_RESET + retval = synaptics_rmi4_reset_device(rmi4_data, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to issue reset command\n", + __func__); + } +#endif + mutex_lock(&exp_data.mutex); + if (!list_empty(&exp_data.list)) { + list_for_each_entry(exp_fhandler, &exp_data.list, link) + if (exp_fhandler->exp_fn->resume != NULL) + exp_fhandler->exp_fn->resume(rmi4_data); + } + mutex_unlock(&exp_data.mutex); + } + } + + rmi4_data->suspend = false; + + if (rmi4_data->enable_cover_mode) + cover_mode_set(rmi4_data, rmi4_data->enable_cover_mode); + + return 0; +} + +#ifdef CONFIG_PM +static int synaptics_rmi4_pm_suspend(struct device *dev) +{ + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + if (device_may_wakeup(dev) && + rmi4_data->wakeup_en && + !bdata->cut_off_power) { + dev_info(rmi4_data->pdev->dev.parent, + "Enable touch irq wake\n"); + disable_irq(rmi4_data->irq); + enable_irq_wake(rmi4_data->irq); + } + + return 0; + +} + +static int synaptics_rmi4_pm_resume(struct device *dev) +{ + struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + if (device_may_wakeup(dev) && + rmi4_data->wakeup_en && + !bdata->cut_off_power) { + dev_info(rmi4_data->pdev->dev.parent, + "Disable touch irq wake\n"); + disable_irq_wake(rmi4_data->irq); + enable_irq(rmi4_data->irq); + } + + return 0; +} + +static const struct dev_pm_ops synaptics_rmi4_dev_pm_ops = { + .suspend = synaptics_rmi4_pm_suspend, + .resume = synaptics_rmi4_pm_resume, +}; +#endif + +static struct platform_driver synaptics_rmi4_driver = { + .driver = { + .name = PLATFORM_DRIVER_FORCE, + .owner = THIS_MODULE, +#ifdef CONFIG_PM + .pm = &synaptics_rmi4_dev_pm_ops, +#endif + }, + .probe = synaptics_rmi4_probe, + .remove = synaptics_rmi4_remove, +}; + +static int __init synaptics_rmi4_init(void) +{ + int retval; + + retval = synaptics_rmi4_bus_init_force(); + if (retval) + return retval; + + return platform_driver_register(&synaptics_rmi4_driver); +} + +static void __exit synaptics_rmi4_exit(void) +{ + platform_driver_unregister(&synaptics_rmi4_driver); + + synaptics_rmi4_bus_exit_force(); + + return; +} + +module_init(synaptics_rmi4_init); +module_exit(synaptics_rmi4_exit); + +MODULE_AUTHOR("Synaptics, Inc."); +MODULE_DESCRIPTION("Synaptics DSX Touch Driver"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_core.h b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_core.h new file mode 100644 index 000000000000..020e618da2d2 --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_core.h @@ -0,0 +1,553 @@ +/* + * Synaptics DSX touchscreen driver + * + * Copyright (C) 2012-2015 Synaptics Incorporated. All rights reserved. + * + * Copyright (C) 2012 Alexandra Chin <alexandra.chin@tw.synaptics.com> + * Copyright (C) 2012 Scott Lin <scott.lin@tw.synaptics.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND SYNAPTICS + * EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, INCLUDING ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, + * AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS. + * IN NO EVENT SHALL SYNAPTICS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION + * WITH THE USE OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED + * AND BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF COMPETENT JURISDICTION DOES + * NOT PERMIT THE DISCLAIMER OF DIRECT DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' + * TOTAL CUMULATIVE LIABILITY TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. + * DOLLARS. + */ + +#ifndef _SYNAPTICS_DSX_RMI4_H_ +#define _SYNAPTICS_DSX_RMI4_H_ + +#define SYNAPTICS_DS4 (1 << 0) +#define SYNAPTICS_DS5 (1 << 1) +#define SYNAPTICS_DSX_DRIVER_PRODUCT (SYNAPTICS_DS4 | SYNAPTICS_DS5) +#define SYNAPTICS_DSX_DRIVER_VERSION 0x2065 + +#include <linux/version.h> +#ifdef CONFIG_FB +#include <linux/notifier.h> +#include <linux/fb.h> +#endif +#ifdef CONFIG_HAS_EARLYSUSPEND +#include <linux/earlysuspend.h> +#endif + +#if defined(CONFIG_SECURE_TOUCH) +#include <linux/completion.h> +#include <linux/atomic.h> +#include <linux/clk.h> +#endif +#include <linux/input/synaptics_dsx.h> + + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 38)) +#define KERNEL_ABOVE_2_6_38 +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 7, 0)) +#define KERNEL_ABOVE_3_6 +#endif + +#ifdef KERNEL_ABOVE_2_6_38 +#define sstrtoul(...) kstrtoul(__VA_ARGS__) +#else +#define sstrtoul(...) strict_strtoul(__VA_ARGS__) +#endif + +#define PDT_PROPS (0X00EF) +#define PDT_START (0x00E9) +#define PDT_END (0x00D0) +#define PDT_ENTRY_SIZE (0x0006) +#define PAGES_TO_SERVICE (10) +#define PAGE_SELECT_LEN (2) +#define ADDRESS_LEN (2) + +#define SYNAPTICS_RMI4_F01 (0x01) +#define SYNAPTICS_RMI4_F11 (0x11) +#define SYNAPTICS_RMI4_F12 (0x12) +#define SYNAPTICS_RMI4_F1A (0x1A) +#define SYNAPTICS_RMI4_F34 (0x34) +#define SYNAPTICS_RMI4_F35 (0x35) +#define SYNAPTICS_RMI4_F38 (0x38) +#define SYNAPTICS_RMI4_F51 (0x51) +#define SYNAPTICS_RMI4_F54 (0x54) +#define SYNAPTICS_RMI4_F55 (0x55) +#define SYNAPTICS_RMI4_FDB (0xDB) + +#define PRODUCT_INFO_SIZE 2 +#define PRODUCT_ID_SIZE 10 +#define BUILD_ID_SIZE 3 +#define LOCKDOWN_INFO_SIZE 8 + +#define F12_FINGERS_TO_SUPPORT 10 +#define F12_NO_OBJECT_STATUS 0x00 +#define F12_FINGER_STATUS 0x01 +#define F12_ACTIVE_STYLUS_STATUS 0x02 +#define F12_PALM_STATUS 0x03 +#define F12_HOVERING_FINGER_STATUS 0x05 +#define F12_GLOVED_FINGER_STATUS 0x06 +#define F12_NARROW_OBJECT_STATUS 0x07 +#define F12_HAND_EDGE_STATUS 0x08 +#define F12_COVER_STATUS 0x0A +#define F12_STYLUS_STATUS 0x0B +#define F12_ERASER_STATUS 0x0C +#define F12_SMALL_OBJECT_STATUS 0x0D + +#define F12_GESTURE_DETECTION_LEN 5 + +#define MAX_NUMBER_OF_BUTTONS 4 +#define MAX_INTR_REGISTERS 4 + +#define MASK_16BIT 0xFFFF +#define MASK_8BIT 0xFF +#define MASK_7BIT 0x7F +#define MASK_6BIT 0x3F +#define MASK_5BIT 0x1F +#define MASK_4BIT 0x0F +#define MASK_3BIT 0x07 +#define MASK_2BIT 0x03 +#define MASK_1BIT 0x01 + +#define PINCTRL_STATE_ACTIVE "pmx_ts_active" +#define PINCTRL_STATE_SUSPEND "pmx_ts_suspend" +#ifdef CONFIG_SYNAPTICS_TOUCH_COUNT_DUMP +#define TOUCH_COUNT_FILE_MAXSIZE 50 +#endif + +enum exp_fn { + RMI_DEV = 0, + RMI_FW_UPDATER, + RMI_TEST_REPORTING, + RMI_PROXIMITY, + RMI_ACTIVE_PEN, + RMI_GESTURE, + RMI_VIDEO, + RMI_DEBUG, + RMI_LAST, +}; + +/* + * struct synaptics_rmi4_fn_desc - function descriptor fields in PDT entry + * @query_base_addr: base address for query registers + * @cmd_base_addr: base address for command registers + * @ctrl_base_addr: base address for control registers + * @data_base_addr: base address for data registers + * @intr_src_count: number of interrupt sources + * @fn_version: version of function + * @fn_number: function number + */ +struct synaptics_rmi4_fn_desc { + union { + struct { + unsigned char query_base_addr; + unsigned char cmd_base_addr; + unsigned char ctrl_base_addr; + unsigned char data_base_addr; + unsigned char intr_src_count:3; + unsigned char reserved_1:2; + unsigned char fn_version:2; + unsigned char reserved_2:1; + unsigned char fn_number; + } __packed; + unsigned char data[6]; + }; +}; + +/* + * synaptics_rmi4_fn_full_addr - full 16-bit base addresses + * @query_base: 16-bit base address for query registers + * @cmd_base: 16-bit base address for command registers + * @ctrl_base: 16-bit base address for control registers + * @data_base: 16-bit base address for data registers + */ +struct synaptics_rmi4_fn_full_addr { + unsigned short query_base; + unsigned short cmd_base; + unsigned short ctrl_base; + unsigned short data_base; +}; + +/* + * struct synaptics_rmi4_f11_extra_data - extra data of F$11 + * @data38_offset: offset to F11_2D_DATA38 register + */ +struct synaptics_rmi4_f11_extra_data { + unsigned char data38_offset; +}; + +/* + * struct synaptics_rmi4_f12_extra_data - extra data of F$12 + * @data1_offset: offset to F12_2D_DATA01 register + * @data4_offset: offset to F12_2D_DATA04 register + * @data15_offset: offset to F12_2D_DATA15 register + * @data15_size: size of F12_2D_DATA15 register + * @data15_data: buffer for reading F12_2D_DATA15 register + * @data29_offset: offset to F12_2D_DATA29 register + * @data29_size: size of F12_2D_DATA29 register + * @data29_data: buffer for reading F12_2D_DATA29 register + * @ctrl20_offset: offset to F12_2D_CTRL20 register + */ +struct synaptics_rmi4_f12_extra_data { + unsigned char data1_offset; + unsigned char data4_offset; + unsigned char data15_offset; + unsigned char data15_size; + unsigned char data15_data[(F12_FINGERS_TO_SUPPORT + 7) / 8]; + unsigned char data29_offset; + unsigned char data29_size; + unsigned char data29_data[F12_FINGERS_TO_SUPPORT * 2]; + unsigned char ctrl20_offset; + unsigned char ctrl26_offset; + unsigned char ctrl27_offset; +}; + +/* + * struct synaptics_rmi4_fn - RMI function handler + * @fn_number: function number + * @num_of_data_sources: number of data sources + * @num_of_data_points: maximum number of fingers supported + * @intr_reg_num: index to associated interrupt register + * @intr_mask: interrupt mask + * @full_addr: full 16-bit base addresses of function registers + * @link: linked list for function handlers + * @data_size: size of private data + * @data: pointer to private data + * @extra: pointer to extra data + */ +struct synaptics_rmi4_fn { + unsigned char fn_number; + unsigned char num_of_data_sources; + unsigned char num_of_data_points; + unsigned char intr_reg_num; + unsigned char intr_mask; + struct synaptics_rmi4_fn_full_addr full_addr; + struct list_head link; + int data_size; + void *data; + void *extra; +}; + +/* + * struct synaptics_rmi4_device_info - device information + * @version_major: RMI protocol major version number + * @version_minor: RMI protocol minor version number + * @manufacturer_id: manufacturer ID + * @product_props: product properties + * @product_info: product information + * @product_id_string: product ID + * @build_id: firmware build ID + * @support_fn_list: linked list for function handlers + */ +struct synaptics_rmi4_device_info { + unsigned int version_major; + unsigned int version_minor; + unsigned char manufacturer_id; + unsigned char product_props; + unsigned char product_info[PRODUCT_INFO_SIZE]; + unsigned char product_id_string[PRODUCT_ID_SIZE + 1]; + unsigned char build_id[BUILD_ID_SIZE]; + struct list_head support_fn_list; +}; + +/* + * struct synaptics_rmi4_data - RMI4 device instance data + * @pdev: pointer to platform device + * @input_dev: pointer to associated input device + * @stylus_dev: pointer to associated stylus device + * @hw_if: pointer to hardware interface data + * @rmi4_mod_info: device information + * @board_prop_dir: /sys/board_properties directory for virtual key map file + * @pwr_reg: pointer to regulator for power control + * @lab_reg: pointer to regulator for LCD lab control + * @ibb_reg: pointer to regulator for LCD ibb control + * @disp_reg: pointer to regulator for LCD disp control + * @bus_reg: pointer to regulator for bus pullup control + * @rmi4_reset_mutex: mutex for software reset + * @rmi4_report_mutex: mutex for input event reporting + * @rmi4_io_ctrl_mutex: mutex for communication interface I/O + * @rmi4_exp_init_mutex: mutex for expansion function module initialization + * @rmi4_irq_enable_mutex: mutex for enabling/disabling interrupt + * @rb_work: work for rebuilding input device + * @rb_workqueue: workqueue for rebuilding input device + * @fb_notifier: framebuffer notifier client + * @reset_work: work for issuing reset after display framebuffer ready + * @reset_workqueue: workqueue for issuing reset after display framebuffer ready + * @early_suspend: early suspend power management + * @current_page: current RMI page for register access + * @button_0d_enabled: switch for enabling 0d button support + * @num_of_tx: number of Tx channels for 2D touch + * @num_of_rx: number of Rx channels for 2D touch + * @num_of_fingers: maximum number of fingers for 2D touch + * @max_touch_width: maximum touch width + * @report_enable: input data to report for F$12 + * @no_sleep_setting: default setting of NoSleep in F01_RMI_CTRL00 register + * @gesture_detection: detected gesture type and properties + * @intr_mask: interrupt enable mask + * @button_txrx_mapping: Tx Rx mapping of 0D buttons + * @num_of_intr_regs: number of interrupt registers + * @f01_query_base_addr: query base address for f$01 + * @f01_cmd_base_addr: command base address for f$01 + * @f01_ctrl_base_addr: control base address for f$01 + * @f01_data_base_addr: data base address for f$01 + * @firmware_id: firmware build ID + * @irq: attention interrupt + * @sensor_max_x: maximum x coordinate for 2D touch + * @sensor_max_y: maximum y coordinate for 2D touch + * @flash_prog_mode: flag to indicate flash programming mode status + * @irq_enabled: flag to indicate attention interrupt enable status + * @fingers_on_2d: flag to indicate presence of fingers in 2D area + * @suspend: flag to indicate whether in suspend state + * @sensor_sleep: flag to indicate sleep state of sensor + * @stay_awake: flag to indicate whether to stay awake during suspend + * @fb_ready: flag to indicate whether display framebuffer in ready state + * @f11_wakeup_gesture: flag to indicate support for wakeup gestures in F$11 + * @f12_wakeup_gesture: flag to indicate support for wakeup gestures in F$12 + * @enable_wakeup_gesture: flag to indicate usage of wakeup gestures + * @wedge_sensor: flag to indicate use of wedge sensor + * @report_pressure: flag to indicate reporting of pressure data + * @stylus_enable: flag to indicate reporting of stylus data + * @eraser_enable: flag to indicate reporting of eraser data + * @external_afe_buttons: flag to indicate presence of external AFE buttons + * @reset_device: pointer to device reset function + * @irq_enable: pointer to interrupt enable function + * @sleep_enable: pointer to sleep enable function + * @report_touch: pointer to touch reporting function + */ +struct synaptics_rmi4_data { + struct platform_device *pdev; + struct input_dev *input_dev; + struct input_dev *stylus_dev; + const struct synaptics_dsx_hw_interface *hw_if; + struct synaptics_rmi4_device_info rmi4_mod_info; + struct kobject *board_prop_dir; + struct regulator *pwr_reg; + struct regulator *lab_reg; + struct regulator *ibb_reg; + struct regulator *disp_reg; + struct regulator *bus_reg; + struct mutex rmi4_reset_mutex; + struct mutex rmi4_report_mutex; + struct mutex rmi4_io_ctrl_mutex; + struct mutex rmi4_exp_init_mutex; + struct mutex rmi4_cover_mutex; + struct mutex rmi4_irq_enable_mutex; + struct delayed_work rb_work; + struct workqueue_struct *rb_workqueue; + struct synaptics_dsx_panel_power_seq panel_power_seq; +#ifdef CONFIG_FB + struct notifier_block fb_notifier; + struct work_struct reset_work; + struct workqueue_struct *reset_workqueue; +#endif +#ifdef CONFIG_HAS_EARLYSUSPEND + struct early_suspend early_suspend; +#endif + struct delayed_work tddi_reset_work; + unsigned char current_page; + unsigned char button_0d_enabled; + unsigned char num_of_tx; + unsigned char num_of_rx; + unsigned char num_of_fingers; + unsigned char max_touch_width; + unsigned char report_enable; + unsigned char no_sleep_setting; + unsigned char gesture_detection[F12_GESTURE_DETECTION_LEN]; + unsigned char intr_mask[MAX_INTR_REGISTERS]; + unsigned char *button_txrx_mapping; + unsigned short num_of_intr_regs; + unsigned short f01_query_base_addr; + unsigned short f01_cmd_base_addr; + unsigned short f01_ctrl_base_addr; + unsigned short f01_data_base_addr; +#ifdef F51_DISCRETE_FORCE + unsigned short f51_query_base_addr; +#endif + unsigned int hw_version; + unsigned int firmware_id; + unsigned char lockdown_info[LOCKDOWN_INFO_SIZE]; + unsigned char valid_button_count; + unsigned char enable_cover_mode; + int irq; + int sensor_max_x; + int sensor_max_y; + int force_min; + int force_max; + int chip_id; + int touchs; + bool flash_prog_mode; + bool irq_enabled; + bool fingers_on_2d; + bool suspend; + bool sensor_sleep; + bool stay_awake; + bool fb_ready; + bool f11_wakeup_gesture; + bool f12_wakeup_gesture; + bool enable_wakeup_gesture; + bool wedge_sensor; + bool report_pressure; + bool stylus_enable; + bool eraser_enable; + bool external_afe_buttons; + bool fw_updating; + bool wakeup_en; + bool chip_is_tddi; + bool open_test_b7; + bool short_test_extend; + bool disable_data_dump; + bool dump_flags; + int (*reset_device)(struct synaptics_rmi4_data *rmi4_data, + bool rebuild); + int (*irq_enable)(struct synaptics_rmi4_data *rmi4_data, bool enable, + bool attn_only); + void (*sleep_enable)(struct synaptics_rmi4_data *rmi4_data, + bool enable); + void (*report_touch)(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn *fhandler); + struct pinctrl *ts_pinctrl; + struct pinctrl_state *pinctrl_state_active; + struct pinctrl_state *pinctrl_state_suspend; + struct synaptics_dsx_factory_param *factory_param; + + struct completion dump_completion; +#ifdef CONFIG_TOUCH_DEBUG_FS + struct dentry *debugfs; +#endif + struct delayed_work event_check; + struct workqueue_struct *event_wq; +#if defined(CONFIG_SECURE_TOUCH) + atomic_t st_enabled; + atomic_t st_pending_irqs; + bool st_initialized; + struct completion st_powerdown; + struct completion st_irq_processed; + struct clk *core_clk; + struct clk *iface_clk; +#endif +#ifdef CONFIG_SYNAPTICS_TOUCH_COUNT_DUMP + char *current_clicknum_file; +#endif + bool pocketmode_on; +}; + +struct synaptics_dsx_bus_access { + unsigned char type; + int (*read)(struct synaptics_rmi4_data *rmi4_data, unsigned short addr, + unsigned char *data, unsigned short length); + int (*write)(struct synaptics_rmi4_data *rmi4_data, unsigned short addr, + unsigned char *data, unsigned short length); +}; + +struct synaptics_dsx_hw_interface { + struct synaptics_dsx_board_data *board_data; + const struct synaptics_dsx_bus_access *bus_access; + int (*bl_hw_init)(struct synaptics_rmi4_data *rmi4_data); + int (*ui_hw_init)(struct synaptics_rmi4_data *rmi4_data); +}; + +struct synaptics_rmi4_exp_fn { + enum exp_fn fn_type; + int (*init)(struct synaptics_rmi4_data *rmi4_data); + void (*remove)(struct synaptics_rmi4_data *rmi4_data); + void (*reset)(struct synaptics_rmi4_data *rmi4_data); + void (*reinit)(struct synaptics_rmi4_data *rmi4_data); + void (*early_suspend)(struct synaptics_rmi4_data *rmi4_data); + void (*suspend)(struct synaptics_rmi4_data *rmi4_data); + void (*resume)(struct synaptics_rmi4_data *rmi4_data); + void (*late_resume)(struct synaptics_rmi4_data *rmi4_data); + void (*attn)(struct synaptics_rmi4_data *rmi4_data, + unsigned char intr_mask); +}; + +struct synaptics_rmi4_mode_switch { + struct synaptics_rmi4_data *data; + unsigned char mode; + struct work_struct switch_mode_work; +}; + +int synaptics_rmi4_bus_init_force(void); + +void synaptics_rmi4_bus_exit_force(void); + +void synaptics_rmi4_new_function_force(struct synaptics_rmi4_exp_fn *exp_fn_module, + bool insert); + +int synaptics_fw_updater(const unsigned char *fw_data); + +static inline int synaptics_rmi4_reg_read( + struct synaptics_rmi4_data *rmi4_data, + unsigned short addr, + unsigned char *data, + unsigned short len) +{ + return rmi4_data->hw_if->bus_access->read(rmi4_data, addr, data, len); +} + +static inline int synaptics_rmi4_reg_write( + struct synaptics_rmi4_data *rmi4_data, + unsigned short addr, + unsigned char *data, + unsigned short len) +{ + return rmi4_data->hw_if->bus_access->write(rmi4_data, addr, data, len); +} + +static inline ssize_t synaptics_rmi4_show_error(struct device *dev, + struct device_attribute *attr, char *buf) +{ + dev_warn(dev, "%s Attempted to read from write-only attribute %s\n", + __func__, attr->attr.name); + return -EPERM; +} + +static inline ssize_t synaptics_rmi4_store_error(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + dev_warn(dev, "%s Attempted to write to read-only attribute %s\n", + __func__, attr->attr.name); + return -EPERM; +} + +static inline int secure_memcpy(unsigned char *dest, unsigned int dest_size, + const unsigned char *src, unsigned int src_size, + unsigned int count) +{ + if (dest == NULL || src == NULL) + return -EINVAL; + + if (count > dest_size || count > src_size) + return -EINVAL; + + memcpy((void *)dest, (const void *)src, count); + + return 0; +} + +static inline void batohs(unsigned short *dest, unsigned char *src) +{ + *dest = src[1] * 0x100 + src[0]; +} + +static inline void hstoba(unsigned char *dest, unsigned short src) +{ + dest[0] = src % 0x100; + dest[1] = src / 0x100; +} + +#endif diff --git a/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_fw_update.c b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_fw_update.c new file mode 100644 index 000000000000..2b97adfc515b --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_fw_update.c @@ -0,0 +1,5506 @@ +/* + * Synaptics DSX touchscreen driver + * + * Copyright (C) 2012-2015 Synaptics Incorporated. All rights reserved. + * + * Copyright (C) 2012 Alexandra Chin <alexandra.chin@tw.synaptics.com> + * Copyright (C) 2012 Scott Lin <scott.lin@tw.synaptics.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND SYNAPTICS + * EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, INCLUDING ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, + * AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS. + * IN NO EVENT SHALL SYNAPTICS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION + * WITH THE USE OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED + * AND BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF COMPETENT JURISDICTION DOES + * NOT PERMIT THE DISCLAIMER OF DIRECT DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' + * TOTAL CUMULATIVE LIABILITY TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. + * DOLLARS. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/interrupt.h> +#include <linux/delay.h> +#include <linux/input.h> +#include <linux/firmware.h> +#include <linux/platform_device.h> +#include <linux/input/synaptics_dsx.h> +#include "synaptics_dsx_core.h" + +#define FW_IHEX_NAME "synaptics/startup_fw_update.bin" +#define FW_IMAGE_NAME "synaptics/startup_fw_update.img" +#define DO_STARTUP_FW_UPDATE + +/* +#ifdef DO_STARTUP_FW_UPDATE +#ifdef CONFIG_FB +#define WAIT_FOR_FB_READY +#define FB_READY_WAIT_MS 100 +#define FB_READY_TIMEOUT_S 30 +#endif +#endif +*/ +#define MAX_WRITE_SIZE 4096 + +#define FORCE_UPDATE false +#define DO_LOCKDOWN false + +#define MAX_IMAGE_NAME_LEN 256 +#define MAX_FIRMWARE_ID_LEN 10 + +#define IMAGE_HEADER_VERSION_05 0x05 +#define IMAGE_HEADER_VERSION_06 0x06 +#define IMAGE_HEADER_VERSION_10 0x10 + +#define IMAGE_AREA_OFFSET 0x100 +#define LOCKDOWN_SIZE 0x50 + +#define MAX_UTILITY_PARAMS 20 + +#define V5V6_BOOTLOADER_ID_OFFSET 0 +#define V5V6_CONFIG_ID_SIZE 4 + +#define V5_PROPERTIES_OFFSET 2 +#define V5_BLOCK_SIZE_OFFSET 3 +#define V5_BLOCK_COUNT_OFFSET 5 +#define V5_BLOCK_NUMBER_OFFSET 0 +#define V5_BLOCK_DATA_OFFSET 2 + +#define V6_PROPERTIES_OFFSET 1 +#define V6_BLOCK_SIZE_OFFSET 2 +#define V6_BLOCK_COUNT_OFFSET 3 +#define V6_PROPERTIES_2_OFFSET 4 +#define V6_BLOCK_NUMBER_OFFSET 0 +#define V6_BLOCK_DATA_OFFSET 1 +#define V6_FLASH_COMMAND_OFFSET 2 +#define V6_FLASH_STATUS_OFFSET 3 + +#define V7_CONFIG_ID_SIZE 32 + +#define V7_FLASH_STATUS_OFFSET 0 +#define V7_PARTITION_ID_OFFSET 1 +#define V7_BLOCK_NUMBER_OFFSET 2 +#define V7_TRANSFER_LENGTH_OFFSET 3 +#define V7_COMMAND_OFFSET 4 +#define V7_PAYLOAD_OFFSET 5 + +#define V7_PARTITION_SUPPORT_BYTES 4 + +#define F35_ERROR_CODE_OFFSET 0 +#define F35_FLASH_STATUS_OFFSET 5 +#define F35_CHUNK_NUM_LSB_OFFSET 0 +#define F35_CHUNK_NUM_MSB_OFFSET 1 +#define F35_CHUNK_DATA_OFFSET 2 +#define F35_CHUNK_COMMAND_OFFSET 18 + +#define F35_CHUNK_SIZE 16 +#define F35_ERASE_ALL_WAIT_MS 5000 +#define F35_RESET_WAIT_MS 250 + +#define SLEEP_MODE_NORMAL (0x00) +#define SLEEP_MODE_SENSOR_SLEEP (0x01) +#define SLEEP_MODE_RESERVED0 (0x02) +#define SLEEP_MODE_RESERVED1 (0x03) + +#define ENABLE_WAIT_MS (1 * 1000) +#define WRITE_WAIT_MS (3 * 1000) +#define ERASE_WAIT_MS (5 * 1000) + +#define MIN_SLEEP_TIME_US 50 +#define MAX_SLEEP_TIME_US 100 + +#define INT_DISABLE_WAIT_MS 20 +#define ENTER_FLASH_PROG_WAIT_MS 20 + +static int fwu_do_reflash(void); + +static int fwu_recovery_check_status(void); + +static int fwu_read_f34_blocks(unsigned short block_cnt, unsigned char cmd); + +static ssize_t fwu_sysfs_show_image(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count); + +static ssize_t fwu_sysfs_store_image(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count); + +static ssize_t fwu_sysfs_do_recovery_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t fwu_sysfs_do_reflash_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t fwu_sysfs_write_config_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t fwu_sysfs_read_config_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t fwu_sysfs_config_area_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t fwu_sysfs_image_name_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t fwu_sysfs_image_size_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t fwu_sysfs_block_size_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t fwu_sysfs_firmware_block_count_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t fwu_sysfs_configuration_block_count_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t fwu_sysfs_disp_config_block_count_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t fwu_sysfs_perm_config_block_count_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t fwu_sysfs_bl_config_block_count_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t fwu_sysfs_guest_code_block_count_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t fwu_sysfs_write_guest_code_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static void firmware_force_update(struct synaptics_rmi4_data *rmi4_data); + +enum f34_version { + F34_V0 = 0, + F34_V1, + F34_V2, +}; + +enum bl_version { + BL_V5 = 5, + BL_V6 = 6, + BL_V7 = 7, + BL_V8 = 8, +}; + +enum flash_area { + NONE = 0, + UI_FIRMWARE, + UI_CONFIG, +}; + +enum update_mode { + NORMAL = 1, + FORCE = 2, + LOCKDOWN = 8, +}; + +enum config_area { + UI_CONFIG_AREA = 0, + PM_CONFIG_AREA, + BL_CONFIG_AREA, + DP_CONFIG_AREA, + FLASH_CONFIG_AREA, + INVALID_CONFIG_AREA = 0xff, +}; + +enum v7_status { + SUCCESS = 0x00, + DEVICE_NOT_IN_BOOTLOADER_MODE, + INVALID_PARTITION, + INVALID_COMMAND, + INVALID_BLOCK_OFFSET, + INVALID_TRANSFER, + NOT_ERASED, + FLASH_PROGRAMMING_KEY_INCORRECT, + BAD_PARTITION_TABLE, + CHECKSUM_FAILED, + FLASH_HARDWARE_FAILURE = 0x1f, +}; + +enum v7_partition_id { + BOOTLOADER_PARTITION = 0x01, + DEVICE_CONFIG_PARTITION, + FLASH_CONFIG_PARTITION, + MANUFACTURING_BLOCK_PARTITION, + GUEST_SERIALIZATION_PARTITION, + GLOBAL_PARAMETERS_PARTITION, + CORE_CODE_PARTITION, + CORE_CONFIG_PARTITION, + GUEST_CODE_PARTITION, + DISPLAY_CONFIG_PARTITION, + EXTERNAL_TOUCH_AFE_CONFIG_PARTITION, + UTILITY_PARAMETER_PARTITION, +}; + +enum v7_flash_command { + CMD_V7_IDLE = 0x00, + CMD_V7_ENTER_BL, + CMD_V7_READ, + CMD_V7_WRITE, + CMD_V7_ERASE, + CMD_V7_ERASE_AP, + CMD_V7_SENSOR_ID, +}; + +enum v5v6_flash_command { + CMD_V5V6_IDLE = 0x0, + CMD_V5V6_WRITE_FW = 0x2, + CMD_V5V6_ERASE_ALL = 0x3, + CMD_V5V6_WRITE_LOCKDOWN = 0x4, + CMD_V5V6_READ_CONFIG = 0x5, + CMD_V5V6_WRITE_CONFIG = 0x6, + CMD_V5V6_ERASE_UI_CONFIG = 0x7, + CMD_V5V6_ERASE_BL_CONFIG = 0x9, + CMD_V5V6_ERASE_DISP_CONFIG = 0xa, + CMD_V5V6_ERASE_GUEST_CODE = 0xb, + CMD_V5V6_WRITE_GUEST_CODE = 0xc, + CMD_V5V6_ENABLE_FLASH_PROG = 0xf, + CMD_V5V6_READ_LOCKDOWN_DATA = 0x1b, +}; + +enum flash_command { + CMD_IDLE = 0, + CMD_WRITE_FW, + CMD_WRITE_CONFIG, + CMD_WRITE_LOCKDOWN, + CMD_WRITE_GUEST_CODE, + CMD_WRITE_BOOTLOADER, + CMD_WRITE_UTILITY_PARAM, + CMD_READ_CONFIG, + CMD_ERASE_ALL, + CMD_ERASE_UI_FIRMWARE, + CMD_ERASE_UI_CONFIG, + CMD_ERASE_BL_CONFIG, + CMD_ERASE_DISP_CONFIG, + CMD_ERASE_FLASH_CONFIG, + CMD_ERASE_GUEST_CODE, + CMD_ERASE_BOOTLOADER, + CMD_ERASE_UTILITY_PARAMETER, + CMD_ENABLE_FLASH_PROG, + CMD_READ_LOCKDOWN_DATA, +}; + +enum f35_flash_command { + CMD_F35_IDLE = 0x0, + CMD_F35_RESERVED = 0x1, + CMD_F35_WRITE_CHUNK = 0x2, + CMD_F35_ERASE_ALL = 0x3, + CMD_F35_RESET = 0x10, +}; + +enum container_id { + TOP_LEVEL_CONTAINER = 0, + UI_CONTAINER, + UI_CONFIG_CONTAINER, + BL_CONTAINER, + BL_IMAGE_CONTAINER, + BL_CONFIG_CONTAINER, + BL_LOCKDOWN_INFO_CONTAINER, + PERMANENT_CONFIG_CONTAINER, + GUEST_CODE_CONTAINER, + BL_PROTOCOL_DESCRIPTOR_CONTAINER, + UI_PROTOCOL_DESCRIPTOR_CONTAINER, + RMI_SELF_DISCOVERY_CONTAINER, + RMI_PAGE_CONTENT_CONTAINER, + GENERAL_INFORMATION_CONTAINER, + DEVICE_CONFIG_CONTAINER, + FLASH_CONFIG_CONTAINER, + GUEST_SERIALIZATION_CONTAINER, + GLOBAL_PARAMETERS_CONTAINER, + CORE_CODE_CONTAINER, + CORE_CONFIG_CONTAINER, + DISPLAY_CONFIG_CONTAINER, + EXTERNAL_TOUCH_AFE_CONFIG_CONTAINER, + UTILITY_CONTAINER, + UTILITY_PARAMETER_CONTAINER, +}; + +enum utility_parameter_id { + UNUSED = 0, + FORCE_PARAMETER, + ANTI_BENDING_PARAMETER, +}; + +struct pdt_properties { + union { + struct { + unsigned char reserved_1:6; + unsigned char has_bsr:1; + unsigned char reserved_2:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct partition_table { + unsigned char partition_id:5; + unsigned char byte_0_reserved:3; + unsigned char byte_1_reserved; + unsigned char partition_length_7_0; + unsigned char partition_length_15_8; + unsigned char start_physical_address_7_0; + unsigned char start_physical_address_15_8; + unsigned char partition_properties_7_0; + unsigned char partition_properties_15_8; +} __packed; + +struct f01_device_control { + union { + struct { + unsigned char sleep_mode:2; + unsigned char nosleep:1; + unsigned char reserved:2; + unsigned char charger_connected:1; + unsigned char report_rate:1; + unsigned char configured:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f34_v7_query_0 { + union { + struct { + unsigned char subpacket_1_size:3; + unsigned char has_config_id:1; + unsigned char f34_query0_b4:1; + unsigned char has_thqa:1; + unsigned char f34_query0_b6__7:2; + } __packed; + unsigned char data[1]; + }; +}; + +struct f34_v7_query_1_7 { + union { + struct { + /* query 1 */ + unsigned char bl_minor_revision; + unsigned char bl_major_revision; + + /* query 2 */ + unsigned char bl_fw_id_7_0; + unsigned char bl_fw_id_15_8; + unsigned char bl_fw_id_23_16; + unsigned char bl_fw_id_31_24; + + /* query 3 */ + unsigned char minimum_write_size; + unsigned char block_size_7_0; + unsigned char block_size_15_8; + unsigned char flash_page_size_7_0; + unsigned char flash_page_size_15_8; + + /* query 4 */ + unsigned char adjustable_partition_area_size_7_0; + unsigned char adjustable_partition_area_size_15_8; + + /* query 5 */ + unsigned char flash_config_length_7_0; + unsigned char flash_config_length_15_8; + + /* query 6 */ + unsigned char payload_length_7_0; + unsigned char payload_length_15_8; + + /* query 7 */ + unsigned char f34_query7_b0:1; + unsigned char has_bootloader:1; + unsigned char has_device_config:1; + unsigned char has_flash_config:1; + unsigned char has_manufacturing_block:1; + unsigned char has_guest_serialization:1; + unsigned char has_global_parameters:1; + unsigned char has_core_code:1; + unsigned char has_core_config:1; + unsigned char has_guest_code:1; + unsigned char has_display_config:1; + unsigned char f34_query7_b11__15:5; + unsigned char f34_query7_b16__23; + unsigned char f34_query7_b24__31; + } __packed; + unsigned char data[21]; + }; +}; + +struct f34_v7_data0 { + union { + struct { + unsigned char operation_status:5; + unsigned char device_cfg_status:2; + unsigned char bl_mode:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f34_v7_data_1_5 { + union { + struct { + unsigned char partition_id:5; + unsigned char f34_data1_b5__7:3; + unsigned char block_offset_7_0; + unsigned char block_offset_15_8; + unsigned char transfer_length_7_0; + unsigned char transfer_length_15_8; + unsigned char command; + unsigned char payload_0; + unsigned char payload_1; + } __packed; + unsigned char data[8]; + }; +}; + +struct f34_v5v6_flash_properties { + union { + struct { + unsigned char reg_map:1; + unsigned char unlocked:1; + unsigned char has_config_id:1; + unsigned char has_pm_config:1; + unsigned char has_bl_config:1; + unsigned char has_disp_config:1; + unsigned char has_ctrl1:1; + unsigned char has_query4:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f34_v5v6_flash_properties_2 { + union { + struct { + unsigned char has_guest_code:1; + unsigned char f34_query4_b1:1; + unsigned char has_gesture_config_area:1; + unsigned char has_force_config_block:1; + unsigned char has_lockdown_data_block:1; + unsigned char has_lcm_data_block:1; + unsigned char has_oem_data_block:1; + unsigned char f34_query4_b7:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct register_offset { + unsigned char properties; + unsigned char properties_2; + unsigned char block_size; + unsigned char block_count; + unsigned char flash_status; + unsigned char partition_id; + unsigned char block_number; + unsigned char transfer_length; + unsigned char flash_cmd; + unsigned char payload; +}; + +struct block_count { + unsigned short ui_firmware; + unsigned short ui_config; + unsigned short dp_config; + unsigned short pm_config; + unsigned short fl_config; + unsigned short bl_image; + unsigned short bl_config; + unsigned short utility_param; + unsigned short lockdown; + unsigned short guest_code; + unsigned short lockdown_data; + unsigned short total_count; +}; + +struct physical_address { + unsigned short ui_firmware; + unsigned short ui_config; + unsigned short dp_config; + unsigned short pm_config; + unsigned short fl_config; + unsigned short bl_image; + unsigned short bl_config; + unsigned short utility_param; + unsigned short lockdown; + unsigned short guest_code; +}; + +struct container_descriptor { + unsigned char content_checksum[4]; + unsigned char container_id[2]; + unsigned char minor_version; + unsigned char major_version; + unsigned char reserved_08; + unsigned char reserved_09; + unsigned char reserved_0a; + unsigned char reserved_0b; + unsigned char container_option_flags[4]; + unsigned char content_options_length[4]; + unsigned char content_options_address[4]; + unsigned char content_length[4]; + unsigned char content_address[4]; +}; + +struct image_header_10 { + unsigned char checksum[4]; + unsigned char reserved_04; + unsigned char reserved_05; + unsigned char minor_header_version; + unsigned char major_header_version; + unsigned char reserved_08; + unsigned char reserved_09; + unsigned char reserved_0a; + unsigned char reserved_0b; + unsigned char top_level_container_start_addr[4]; +}; + +struct image_header_05_06 { + /* 0x00 - 0x0f */ + unsigned char checksum[4]; + unsigned char reserved_04; + unsigned char reserved_05; + unsigned char options_firmware_id:1; + unsigned char options_bootloader:1; + unsigned char options_guest_code:1; + unsigned char options_tddi:1; + unsigned char options_reserved:4; + unsigned char header_version; + unsigned char firmware_size[4]; + unsigned char config_size[4]; + /* 0x10 - 0x1f */ + unsigned char product_id[PRODUCT_ID_SIZE]; + unsigned char package_id[2]; + unsigned char package_id_revision[2]; + unsigned char product_info[PRODUCT_INFO_SIZE]; + /* 0x20 - 0x2f */ + unsigned char bootloader_addr[4]; + unsigned char bootloader_size[4]; + unsigned char ui_addr[4]; + unsigned char ui_size[4]; + /* 0x30 - 0x3f */ + unsigned char ds_id[16]; + /* 0x40 - 0x4f */ + union { + struct { + unsigned char cstmr_product_id[PRODUCT_ID_SIZE]; + unsigned char reserved_4a_4f[6]; + }; + struct { + unsigned char dsp_cfg_addr[4]; + unsigned char dsp_cfg_size[4]; + unsigned char reserved_48_4f[8]; + }; + }; + /* 0x50 - 0x53 */ + unsigned char firmware_id[4]; +}; + +struct block_data { + unsigned int size; + const unsigned char *data; +}; + +struct image_metadata { + bool contains_firmware_id; + bool contains_bootloader; + bool contains_guest_code; + bool contains_disp_config; + bool contains_perm_config; + bool contains_flash_config; + bool contains_utility_param; + unsigned int firmware_id; + unsigned int checksum; + unsigned int bootloader_size; + unsigned int disp_config_offset; + unsigned char bl_version; + unsigned char product_id[PRODUCT_ID_SIZE + 1]; + unsigned char cstmr_product_id[PRODUCT_ID_SIZE + 1]; + unsigned char utility_param_id[MAX_UTILITY_PARAMS]; + struct block_data bootloader; + struct block_data utility; + struct block_data ui_firmware; + struct block_data ui_config; + struct block_data dp_config; + struct block_data pm_config; + struct block_data fl_config; + struct block_data bl_image; + struct block_data bl_config; + struct block_data utility_param[MAX_UTILITY_PARAMS]; + struct block_data lockdown; + struct block_data guest_code; + struct block_count blkcount; + struct physical_address phyaddr; +}; + +struct synaptics_rmi4_fwu_handle { + enum bl_version bl_version; + bool initialized; + bool in_bl_mode; + bool in_ub_mode; + bool bl_mode_device; + bool force_update; + bool do_lockdown; + bool has_guest_code; + bool has_lockdown_data; + bool has_utility_param; + bool new_partition_table; + bool incompatible_partition_tables; + bool write_bootloader; + unsigned int data_pos; + unsigned char *ext_data_source; + unsigned char *read_config_buf; + unsigned char intr_mask; + unsigned char command; + unsigned char bootloader_id[2]; + unsigned char config_id[32]; + unsigned char flash_status; + unsigned char partitions; +#ifdef F51_DISCRETE_FORCE + unsigned char *cal_data; + unsigned short cal_data_off; + unsigned short cal_data_size; + unsigned short cal_data_buf_size; + unsigned short cal_packet_data_size; +#endif + unsigned short block_size; + unsigned short config_size; + unsigned short config_area; + unsigned short config_block_count; + unsigned short flash_config_length; + unsigned short payload_length; + unsigned short partition_table_bytes; + unsigned short read_config_buf_size; + const unsigned char *config_data; + const unsigned char *image; + unsigned char *image_name; + unsigned int image_size; + struct image_metadata img; + struct register_offset off; + struct block_count blkcount; + struct physical_address phyaddr; + struct f34_v5v6_flash_properties flash_properties; + struct synaptics_rmi4_fn_desc f34_fd; + struct synaptics_rmi4_fn_desc f35_fd; + struct synaptics_rmi4_data *rmi4_data; + struct workqueue_struct *fwu_workqueue; + struct work_struct fwu_work; +}; + +static struct bin_attribute dev_attr_data = { + .attr = { + .name = "data", + .mode = (S_IRUGO | S_IWUGO), + }, + .size = 0, + .read = fwu_sysfs_show_image, + .write = fwu_sysfs_store_image, +}; + +static struct device_attribute attrs[] = { + __ATTR(dorecovery, S_IWUSR, + synaptics_rmi4_show_error, + fwu_sysfs_do_recovery_store), + __ATTR(doreflash, S_IWUSR, + synaptics_rmi4_show_error, + fwu_sysfs_do_reflash_store), + __ATTR(writeconfig, S_IWUSR, + synaptics_rmi4_show_error, + fwu_sysfs_write_config_store), + __ATTR(readconfig, S_IWUSR, + synaptics_rmi4_show_error, + fwu_sysfs_read_config_store), + __ATTR(configarea, S_IWUSR, + synaptics_rmi4_show_error, + fwu_sysfs_config_area_store), + __ATTR(imagename, S_IWUSR, + synaptics_rmi4_show_error, + fwu_sysfs_image_name_store), + __ATTR(imagesize, S_IWUSR, + synaptics_rmi4_show_error, + fwu_sysfs_image_size_store), + __ATTR(blocksize, S_IRUGO, + fwu_sysfs_block_size_show, + synaptics_rmi4_store_error), + __ATTR(fwblockcount, S_IRUGO, + fwu_sysfs_firmware_block_count_show, + synaptics_rmi4_store_error), + __ATTR(configblockcount, S_IRUGO, + fwu_sysfs_configuration_block_count_show, + synaptics_rmi4_store_error), + __ATTR(dispconfigblockcount, S_IRUGO, + fwu_sysfs_disp_config_block_count_show, + synaptics_rmi4_store_error), + __ATTR(permconfigblockcount, S_IRUGO, + fwu_sysfs_perm_config_block_count_show, + synaptics_rmi4_store_error), + __ATTR(blconfigblockcount, S_IRUGO, + fwu_sysfs_bl_config_block_count_show, + synaptics_rmi4_store_error), + __ATTR(guestcodeblockcount, S_IRUGO, + fwu_sysfs_guest_code_block_count_show, + synaptics_rmi4_store_error), + __ATTR(writeguestcode, S_IWUSR, + synaptics_rmi4_show_error, + fwu_sysfs_write_guest_code_store), +}; + +static struct synaptics_rmi4_fwu_handle *fwu; + +DECLARE_COMPLETION(fwu_remove_complete_force); +static int fwu_read_f34_guest_serialization_partition(void); + +static void calculate_checksum(unsigned short *data, unsigned long len, + unsigned long *result) +{ + unsigned long temp; + unsigned long sum1 = 0xffff; + unsigned long sum2 = 0xffff; + + *result = 0xffffffff; + + while (len--) { + temp = *data; + sum1 += temp; + sum2 += sum1; + sum1 = (sum1 & 0xffff) + (sum1 >> 16); + sum2 = (sum2 & 0xffff) + (sum2 >> 16); + data++; + } + + *result = sum2 << 16 | sum1; + + return; +} + +static void convert_to_little_endian(unsigned char *dest, unsigned long src) +{ + dest[0] = (unsigned char)(src & 0xff); + dest[1] = (unsigned char)((src >> 8) & 0xff); + dest[2] = (unsigned char)((src >> 16) & 0xff); + dest[3] = (unsigned char)((src >> 24) & 0xff); + + return; +} + +static unsigned int le_to_uint(const unsigned char *ptr) +{ + return (unsigned int)ptr[0] + + (unsigned int)ptr[1] * 0x100 + + (unsigned int)ptr[2] * 0x10000 + + (unsigned int)ptr[3] * 0x1000000; +} + +#ifdef F51_DISCRETE_FORCE +static int fwu_f51_force_data_init(void) +{ + int retval; + unsigned char query_count; + unsigned char packet_info; + unsigned char offset[2]; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f51_query_base_addr + 7, + offset, + sizeof(offset)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read force data offset\n", + __func__); + return retval; + } + + fwu->cal_data_off = offset[0] | offset[1] << 8; + + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f51_query_base_addr, + &query_count, + sizeof(query_count)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read number of F51 query registers\n", + __func__); + return retval; + } + + if (query_count >= 10) { + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f51_query_base_addr + 9, + &packet_info, + sizeof(packet_info)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read F51 packet register info\n", + __func__); + return retval; + } + + if (packet_info & MASK_1BIT) { + fwu->cal_packet_data_size = packet_info >> 1; + fwu->cal_packet_data_size *= 2; + } else { + fwu->cal_packet_data_size = 0; + } + } else { + fwu->cal_packet_data_size = 0; + } + + fwu->cal_data_size = CAL_DATA_SIZE + fwu->cal_packet_data_size; + if (fwu->cal_data_size > fwu->cal_data_buf_size) { + kfree(fwu->cal_data); + fwu->cal_data_buf_size = fwu->cal_data_size; + fwu->cal_data = kmalloc(fwu->cal_data_buf_size, GFP_KERNEL); + if (!fwu->cal_data) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for fwu->cal_data\n", + __func__); + fwu->cal_data_buf_size = 0; + return -ENOMEM; + } + } + + return 0; +} +#endif + +static int fwu_allocate_read_config_buf(unsigned int count) +{ + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (count > fwu->read_config_buf_size) { + kfree(fwu->read_config_buf); + fwu->read_config_buf = kzalloc(count, GFP_KERNEL); + if (!fwu->read_config_buf) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for fwu->read_config_buf\n", + __func__); + fwu->read_config_buf_size = 0; + return -ENOMEM; + } + fwu->read_config_buf_size = count; + } + + return 0; +} + +static void fwu_compare_partition_tables(void) +{ + fwu->incompatible_partition_tables = false; + + if (fwu->phyaddr.bl_image != fwu->img.phyaddr.bl_image) + fwu->incompatible_partition_tables = true; + else if (fwu->phyaddr.lockdown != fwu->img.phyaddr.lockdown) + fwu->incompatible_partition_tables = true; + else if (fwu->phyaddr.bl_config != fwu->img.phyaddr.bl_config) + fwu->incompatible_partition_tables = true; + else if (fwu->phyaddr.utility_param != fwu->img.phyaddr.utility_param) + fwu->incompatible_partition_tables = true; + + if (fwu->bl_version == BL_V7) { + if (fwu->phyaddr.fl_config != fwu->img.phyaddr.fl_config) + fwu->incompatible_partition_tables = true; + } + + fwu->new_partition_table = false; + + if (fwu->phyaddr.ui_firmware != fwu->img.phyaddr.ui_firmware) + fwu->new_partition_table = true; + else if (fwu->phyaddr.ui_config != fwu->img.phyaddr.ui_config) + fwu->new_partition_table = true; + + if (fwu->flash_properties.has_disp_config) { + if (fwu->phyaddr.dp_config != fwu->img.phyaddr.dp_config) + fwu->new_partition_table = true; + } + + if (fwu->has_guest_code) { + if (fwu->phyaddr.guest_code != fwu->img.phyaddr.guest_code) + fwu->new_partition_table = true; + } + + return; +} + +static void fwu_parse_partition_table(const unsigned char *partition_table, + struct block_count *blkcount, struct physical_address *phyaddr) +{ + unsigned char ii; + unsigned char index; + unsigned char offset; + unsigned short partition_length; + unsigned short physical_address; + struct partition_table *ptable; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + for (ii = 0; ii < fwu->partitions; ii++) { + index = ii * 8 + 2; + ptable = (struct partition_table *)&partition_table[index]; + partition_length = ptable->partition_length_15_8 << 8 | + ptable->partition_length_7_0; + physical_address = ptable->start_physical_address_15_8 << 8 | + ptable->start_physical_address_7_0; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Partition entry %d:\n", + __func__, ii); + for (offset = 0; offset < 8; offset++) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: 0x%02x\n", + __func__, + partition_table[index + offset]); + } + switch (ptable->partition_id) { + case CORE_CODE_PARTITION: + blkcount->ui_firmware = partition_length; + phyaddr->ui_firmware = physical_address; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Core code block count: %d\n", + __func__, blkcount->ui_firmware); + blkcount->total_count += partition_length; + break; + case CORE_CONFIG_PARTITION: + blkcount->ui_config = partition_length; + phyaddr->ui_config = physical_address; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Core config block count: %d\n", + __func__, blkcount->ui_config); + blkcount->total_count += partition_length; + break; + case BOOTLOADER_PARTITION: + blkcount->bl_image = partition_length; + phyaddr->bl_image = physical_address; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Bootloader block count: %d\n", + __func__, blkcount->bl_image); + blkcount->total_count += partition_length; + break; + case UTILITY_PARAMETER_PARTITION: + blkcount->utility_param = partition_length; + phyaddr->utility_param = physical_address; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Utility parameter block count: %d\n", + __func__, blkcount->utility_param); + blkcount->total_count += partition_length; + break; + case DISPLAY_CONFIG_PARTITION: + blkcount->dp_config = partition_length; + phyaddr->dp_config = physical_address; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Display config block count: %d\n", + __func__, blkcount->dp_config); + blkcount->total_count += partition_length; + break; + case FLASH_CONFIG_PARTITION: + blkcount->fl_config = partition_length; + phyaddr->fl_config = physical_address; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Flash config block count: %d\n", + __func__, blkcount->fl_config); + blkcount->total_count += partition_length; + break; + case GUEST_CODE_PARTITION: + blkcount->guest_code = partition_length; + phyaddr->guest_code = physical_address; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Guest code block count: %d\n", + __func__, blkcount->guest_code); + blkcount->total_count += partition_length; + break; + case GUEST_SERIALIZATION_PARTITION: + blkcount->pm_config = partition_length; + phyaddr->pm_config = physical_address; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Guest serialization block count: %d\n", + __func__, blkcount->pm_config); + blkcount->total_count += partition_length; + break; + case GLOBAL_PARAMETERS_PARTITION: + blkcount->bl_config = partition_length; + phyaddr->bl_config = physical_address; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Global parameters block count: %d\n", + __func__, blkcount->bl_config); + blkcount->total_count += partition_length; + break; + case DEVICE_CONFIG_PARTITION: + blkcount->lockdown = partition_length; + phyaddr->lockdown = physical_address; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Device config block count: %d\n", + __func__, blkcount->lockdown); + blkcount->total_count += partition_length; + break; + }; + } + + return; +} + +static void fwu_parse_image_header_10_utility(const unsigned char *image) +{ + unsigned char ii; + unsigned char num_of_containers; + unsigned int addr; + unsigned int container_id; + unsigned int length; + const unsigned char *content; + struct container_descriptor *descriptor; + + num_of_containers = fwu->img.utility.size / 4; + + for (ii = 0; ii < num_of_containers; ii++) { + if (ii >= MAX_UTILITY_PARAMS) + continue; + addr = le_to_uint(fwu->img.utility.data + (ii * 4)); + descriptor = (struct container_descriptor *)(image + addr); + container_id = descriptor->container_id[0] | + descriptor->container_id[1] << 8; + content = image + le_to_uint(descriptor->content_address); + length = le_to_uint(descriptor->content_length); + switch (container_id) { + case UTILITY_PARAMETER_CONTAINER: + fwu->img.utility_param[ii].data = content; + fwu->img.utility_param[ii].size = length; + fwu->img.utility_param_id[ii] = content[0]; + break; + default: + break; + }; + } + + return; +} + +static void fwu_parse_image_header_10_bootloader(const unsigned char *image) +{ + unsigned char ii; + unsigned char num_of_containers; + unsigned int addr; + unsigned int container_id; + unsigned int length; + const unsigned char *content; + struct container_descriptor *descriptor; + + num_of_containers = (fwu->img.bootloader.size - 4) / 4; + + for (ii = 1; ii <= num_of_containers; ii++) { + addr = le_to_uint(fwu->img.bootloader.data + (ii * 4)); + descriptor = (struct container_descriptor *)(image + addr); + container_id = descriptor->container_id[0] | + descriptor->container_id[1] << 8; + content = image + le_to_uint(descriptor->content_address); + length = le_to_uint(descriptor->content_length); + switch (container_id) { + case BL_IMAGE_CONTAINER: + fwu->img.bl_image.data = content; + fwu->img.bl_image.size = length; + break; + case BL_CONFIG_CONTAINER: + case GLOBAL_PARAMETERS_CONTAINER: + fwu->img.bl_config.data = content; + fwu->img.bl_config.size = length; + break; + case BL_LOCKDOWN_INFO_CONTAINER: + case DEVICE_CONFIG_CONTAINER: + fwu->img.lockdown.data = content; + fwu->img.lockdown.size = length; + break; + default: + break; + }; + } + + return; +} + +static void fwu_parse_image_header_10(void) +{ + unsigned char ii; + unsigned char num_of_containers; + unsigned int addr; + unsigned int offset; + unsigned int container_id; + unsigned int length; + const unsigned char *image; + const unsigned char *content; + struct container_descriptor *descriptor; + struct image_header_10 *header; + + image = fwu->image; + header = (struct image_header_10 *)image; + + fwu->img.checksum = le_to_uint(header->checksum); + + /* address of top level container */ + offset = le_to_uint(header->top_level_container_start_addr); + descriptor = (struct container_descriptor *)(image + offset); + + /* address of top level container content */ + offset = le_to_uint(descriptor->content_address); + num_of_containers = le_to_uint(descriptor->content_length) / 4; + + for (ii = 0; ii < num_of_containers; ii++) { + addr = le_to_uint(image + offset); + offset += 4; + descriptor = (struct container_descriptor *)(image + addr); + container_id = descriptor->container_id[0] | + descriptor->container_id[1] << 8; + content = image + le_to_uint(descriptor->content_address); + length = le_to_uint(descriptor->content_length); + switch (container_id) { + case UI_CONTAINER: + case CORE_CODE_CONTAINER: + fwu->img.ui_firmware.data = content; + fwu->img.ui_firmware.size = length; + break; + case UI_CONFIG_CONTAINER: + case CORE_CONFIG_CONTAINER: + fwu->img.ui_config.data = content; + fwu->img.ui_config.size = length; + break; + case BL_CONTAINER: + fwu->img.bl_version = *content; + fwu->img.bootloader.data = content; + fwu->img.bootloader.size = length; + fwu_parse_image_header_10_bootloader(image); + break; + case UTILITY_CONTAINER: + fwu->img.utility.data = content; + fwu->img.utility.size = length; + fwu_parse_image_header_10_utility(image); + break; + case GUEST_CODE_CONTAINER: + fwu->img.contains_guest_code = true; + fwu->img.guest_code.data = content; + fwu->img.guest_code.size = length; + break; + case DISPLAY_CONFIG_CONTAINER: + fwu->img.contains_disp_config = true; + fwu->img.dp_config.data = content; + fwu->img.dp_config.size = length; + break; + case PERMANENT_CONFIG_CONTAINER: + case GUEST_SERIALIZATION_CONTAINER: + fwu->img.contains_perm_config = true; + fwu->img.pm_config.data = content; + fwu->img.pm_config.size = length; + break; + case FLASH_CONFIG_CONTAINER: + fwu->img.contains_flash_config = true; + fwu->img.fl_config.data = content; + fwu->img.fl_config.size = length; + break; + case GENERAL_INFORMATION_CONTAINER: + fwu->img.contains_firmware_id = true; + fwu->img.firmware_id = le_to_uint(content + 4); + break; + default: + break; + } + } + + return; +} + +static void fwu_parse_image_header_05_06(void) +{ + int retval; + const unsigned char *image; + struct image_header_05_06 *header; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + image = fwu->image; + header = (struct image_header_05_06 *)image; + + fwu->img.checksum = le_to_uint(header->checksum); + + fwu->img.bl_version = header->header_version; + + fwu->img.contains_bootloader = header->options_bootloader; + if (fwu->img.contains_bootloader) + fwu->img.bootloader_size = le_to_uint(header->bootloader_size); + + fwu->img.ui_firmware.size = le_to_uint(header->firmware_size); + if (fwu->img.ui_firmware.size) { + fwu->img.ui_firmware.data = image + IMAGE_AREA_OFFSET; + if (fwu->img.contains_bootloader) + fwu->img.ui_firmware.data += fwu->img.bootloader_size; + } + + if ((fwu->img.bl_version == BL_V6) && header->options_tddi) + fwu->img.ui_firmware.data = image + IMAGE_AREA_OFFSET; + + fwu->img.ui_config.size = le_to_uint(header->config_size); + if (fwu->img.ui_config.size) { + fwu->img.ui_config.data = fwu->img.ui_firmware.data + + fwu->img.ui_firmware.size; + } + + if (fwu->img.contains_bootloader || header->options_tddi) + fwu->img.contains_disp_config = true; + else + fwu->img.contains_disp_config = false; + + if (fwu->img.contains_disp_config) { + fwu->img.disp_config_offset = le_to_uint(header->dsp_cfg_addr); + fwu->img.dp_config.size = le_to_uint(header->dsp_cfg_size); + fwu->img.dp_config.data = image + fwu->img.disp_config_offset; + } else { + retval = secure_memcpy(fwu->img.cstmr_product_id, + sizeof(fwu->img.cstmr_product_id), + header->cstmr_product_id, + sizeof(header->cstmr_product_id), + PRODUCT_ID_SIZE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy custom product ID string\n", + __func__); + } + fwu->img.cstmr_product_id[PRODUCT_ID_SIZE] = 0; + } + + fwu->img.contains_firmware_id = header->options_firmware_id; + if (fwu->img.contains_firmware_id) + fwu->img.firmware_id = le_to_uint(header->firmware_id); + + retval = secure_memcpy(fwu->img.product_id, + sizeof(fwu->img.product_id), + header->product_id, + sizeof(header->product_id), + PRODUCT_ID_SIZE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy product ID string\n", + __func__); + } + fwu->img.product_id[PRODUCT_ID_SIZE] = 0; + + fwu->img.lockdown.size = LOCKDOWN_SIZE; + fwu->img.lockdown.data = image + IMAGE_AREA_OFFSET - LOCKDOWN_SIZE; + + return; +} + +static int fwu_parse_image_info(void) +{ + struct image_header_10 *header; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + header = (struct image_header_10 *)fwu->image; + + memset(&fwu->img, 0x00, sizeof(fwu->img)); + + switch (header->major_header_version) { + case IMAGE_HEADER_VERSION_10: + fwu_parse_image_header_10(); + break; + case IMAGE_HEADER_VERSION_05: + case IMAGE_HEADER_VERSION_06: + fwu_parse_image_header_05_06(); + break; + default: + dev_err(rmi4_data->pdev->dev.parent, + "%s: Unsupported image file format (0x%02x)\n", + __func__, header->major_header_version); + return -EINVAL; + } + + if (fwu->bl_version == BL_V7 || fwu->bl_version == BL_V8) { + if (!fwu->img.contains_flash_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: No flash config found in firmware image\n", + __func__); + return -EINVAL; + } + + fwu_parse_partition_table(fwu->img.fl_config.data, + &fwu->img.blkcount, &fwu->img.phyaddr); + + if (fwu->img.blkcount.utility_param) + fwu->img.contains_utility_param = true; + + fwu_compare_partition_tables(); + } else { + fwu->new_partition_table = false; + fwu->incompatible_partition_tables = false; + } + + return 0; +} + +static int fwu_read_flash_status(void) +{ + int retval; + unsigned char status; + unsigned char command; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + fwu->f34_fd.data_base_addr + fwu->off.flash_status, + &status, + sizeof(status)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read flash status\n", + __func__); + return retval; + } + + fwu->in_bl_mode = status >> 7; + + if (fwu->bl_version == BL_V5) + fwu->flash_status = (status >> 4) & MASK_3BIT; + else if (fwu->bl_version == BL_V6) + fwu->flash_status = status & MASK_3BIT; + else if (fwu->bl_version == BL_V7 || fwu->bl_version == BL_V8) + fwu->flash_status = status & MASK_5BIT; + + if (fwu->write_bootloader) + fwu->flash_status = 0x00; + + if (fwu->flash_status != 0x00) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Flash status = %d, command = 0x%02x, config area = 0x%02x\n", + __func__, fwu->flash_status, fwu->command, fwu->config_area); + } + + if (fwu->flash_status == 0x08) + fwu->flash_status = 0; + + retval = synaptics_rmi4_reg_read(rmi4_data, + fwu->f34_fd.data_base_addr + fwu->off.flash_cmd, + &command, + sizeof(command)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read flash command\n", + __func__); + return retval; + } + + if (fwu->bl_version == BL_V5) + fwu->command = command & MASK_4BIT; + else if (fwu->bl_version == BL_V6) + fwu->command = command & MASK_6BIT; + else if (fwu->bl_version == BL_V7 || fwu->bl_version == BL_V8) + fwu->command = command; + + if (fwu->write_bootloader) + fwu->command = 0x00; + + return 0; +} + +static int fwu_wait_for_idle(int timeout_ms, bool poll) +{ + int count = 0; + int timeout_count = ((timeout_ms * 1000) / MAX_SLEEP_TIME_US) + 1; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + do { + usleep_range(MIN_SLEEP_TIME_US, MAX_SLEEP_TIME_US); + + count++; + if (poll || (count == timeout_count)) + fwu_read_flash_status(); + + if ((fwu->command == CMD_IDLE) && (fwu->flash_status == 0x00)) + return 0; + } while (count < timeout_count); + + dev_err(rmi4_data->pdev->dev.parent, + "%s: Timed out waiting for idle status\n", + __func__); + + return -ETIMEDOUT; +} + +static int fwu_write_f34_v7_command_single_transaction(unsigned char cmd) +{ + int retval; + unsigned char data_base; + struct f34_v7_data_1_5 data_1_5; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + data_base = fwu->f34_fd.data_base_addr; + + memset(data_1_5.data, 0x00, sizeof(data_1_5.data)); + + switch (cmd) { + case CMD_ERASE_ALL: + data_1_5.partition_id = CORE_CODE_PARTITION; + data_1_5.command = CMD_V7_ERASE_AP; + break; + case CMD_ERASE_UI_FIRMWARE: + data_1_5.partition_id = CORE_CODE_PARTITION; + data_1_5.command = CMD_V7_ERASE; + break; + case CMD_ERASE_BL_CONFIG: + data_1_5.partition_id = GLOBAL_PARAMETERS_PARTITION; + data_1_5.command = CMD_V7_ERASE; + break; + case CMD_ERASE_UI_CONFIG: + data_1_5.partition_id = CORE_CONFIG_PARTITION; + data_1_5.command = CMD_V7_ERASE; + break; + case CMD_ERASE_DISP_CONFIG: + data_1_5.partition_id = DISPLAY_CONFIG_PARTITION; + data_1_5.command = CMD_V7_ERASE; + break; + case CMD_ERASE_FLASH_CONFIG: + data_1_5.partition_id = FLASH_CONFIG_PARTITION; + data_1_5.command = CMD_V7_ERASE; + break; + case CMD_ERASE_GUEST_CODE: + data_1_5.partition_id = GUEST_CODE_PARTITION; + data_1_5.command = CMD_V7_ERASE; + break; + case CMD_ERASE_BOOTLOADER: + data_1_5.partition_id = BOOTLOADER_PARTITION; + data_1_5.command = CMD_V7_ERASE; + break; + case CMD_ERASE_UTILITY_PARAMETER: + data_1_5.partition_id = UTILITY_PARAMETER_PARTITION; + data_1_5.command = CMD_V7_ERASE; + break; + case CMD_ENABLE_FLASH_PROG: + data_1_5.partition_id = BOOTLOADER_PARTITION; + data_1_5.command = CMD_V7_ENTER_BL; + break; + }; + + data_1_5.payload_0 = fwu->bootloader_id[0]; + data_1_5.payload_1 = fwu->bootloader_id[1]; + + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.partition_id, + data_1_5.data, + sizeof(data_1_5.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write single transaction command\n", + __func__); + return retval; + } + + return 0; +} + +static int fwu_write_f34_v7_command(unsigned char cmd) +{ + int retval; + unsigned char data_base; + unsigned char command; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + data_base = fwu->f34_fd.data_base_addr; + + switch (cmd) { + case CMD_WRITE_FW: + case CMD_WRITE_CONFIG: + case CMD_WRITE_LOCKDOWN: + case CMD_WRITE_GUEST_CODE: + case CMD_WRITE_BOOTLOADER: + case CMD_WRITE_UTILITY_PARAM: + command = CMD_V7_WRITE; + break; + case CMD_READ_CONFIG: + command = CMD_V7_READ; + break; + case CMD_ERASE_ALL: + command = CMD_V7_ERASE_AP; + break; + case CMD_ERASE_UI_FIRMWARE: + case CMD_ERASE_BL_CONFIG: + case CMD_ERASE_UI_CONFIG: + case CMD_ERASE_DISP_CONFIG: + case CMD_ERASE_FLASH_CONFIG: + case CMD_ERASE_GUEST_CODE: + case CMD_ERASE_BOOTLOADER: + case CMD_ERASE_UTILITY_PARAMETER: + command = CMD_V7_ERASE; + break; + case CMD_ENABLE_FLASH_PROG: + command = CMD_V7_ENTER_BL; + break; + default: + dev_err(rmi4_data->pdev->dev.parent, + "%s: Invalid command 0x%02x\n", + __func__, cmd); + return -EINVAL; + }; + + fwu->command = command; + + switch (cmd) { + case CMD_ERASE_ALL: + case CMD_ERASE_UI_FIRMWARE: + case CMD_ERASE_BL_CONFIG: + case CMD_ERASE_UI_CONFIG: + case CMD_ERASE_DISP_CONFIG: + case CMD_ERASE_FLASH_CONFIG: + case CMD_ERASE_GUEST_CODE: + case CMD_ERASE_BOOTLOADER: + case CMD_ERASE_UTILITY_PARAMETER: + case CMD_ENABLE_FLASH_PROG: + retval = fwu_write_f34_v7_command_single_transaction(cmd); + if (retval < 0) + return retval; + else + return 0; + default: + break; + }; + + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.flash_cmd, + &command, + sizeof(command)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write flash command\n", + __func__); + return retval; + } + + return 0; +} + +static int fwu_write_f34_v5v6_command(unsigned char cmd) +{ + int retval; + unsigned char data_base; + unsigned char command; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + data_base = fwu->f34_fd.data_base_addr; + + switch (cmd) { + case CMD_IDLE: + command = CMD_V5V6_IDLE; + break; + case CMD_WRITE_FW: + command = CMD_V5V6_WRITE_FW; + break; + case CMD_WRITE_CONFIG: + command = CMD_V5V6_WRITE_CONFIG; + break; + case CMD_WRITE_LOCKDOWN: + command = CMD_V5V6_WRITE_LOCKDOWN; + break; + case CMD_WRITE_GUEST_CODE: + command = CMD_V5V6_WRITE_GUEST_CODE; + break; + case CMD_READ_CONFIG: + command = CMD_V5V6_READ_CONFIG; + break; + case CMD_ERASE_ALL: + command = CMD_V5V6_ERASE_ALL; + break; + case CMD_ERASE_UI_CONFIG: + command = CMD_V5V6_ERASE_UI_CONFIG; + break; + case CMD_ERASE_DISP_CONFIG: + command = CMD_V5V6_ERASE_DISP_CONFIG; + break; + case CMD_ERASE_GUEST_CODE: + command = CMD_V5V6_ERASE_GUEST_CODE; + break; + case CMD_ENABLE_FLASH_PROG: + command = CMD_V5V6_ENABLE_FLASH_PROG; + break; + case CMD_READ_LOCKDOWN_DATA: + command = CMD_V5V6_READ_LOCKDOWN_DATA; + break; + default: + dev_err(rmi4_data->pdev->dev.parent, + "%s: Invalid command 0x%02x\n", + __func__, cmd); + return -EINVAL; + } + + switch (cmd) { + case CMD_ERASE_ALL: + case CMD_ERASE_UI_CONFIG: + case CMD_ERASE_DISP_CONFIG: + case CMD_ERASE_GUEST_CODE: + case CMD_ENABLE_FLASH_PROG: + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.payload, + fwu->bootloader_id, + sizeof(fwu->bootloader_id)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write bootloader ID\n", + __func__); + return retval; + } + break; + default: + break; + }; + + fwu->command = command; + + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.flash_cmd, + &command, + sizeof(command)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write command 0x%02x\n", + __func__, command); + return retval; + } + + return 0; +} + +static int fwu_write_f34_command(unsigned char cmd) +{ + int retval; + + if (fwu->bl_version == BL_V7 || fwu->bl_version == BL_V8) + retval = fwu_write_f34_v7_command(cmd); + else + retval = fwu_write_f34_v5v6_command(cmd); + + return retval; +} + +static int fwu_write_f34_v7_partition_id(unsigned char cmd) +{ + int retval; + unsigned char data_base; + unsigned char partition; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + data_base = fwu->f34_fd.data_base_addr; + + switch (cmd) { + case CMD_WRITE_FW: + partition = CORE_CODE_PARTITION; + break; + case CMD_WRITE_CONFIG: + case CMD_READ_CONFIG: + if (fwu->config_area == UI_CONFIG_AREA) + partition = CORE_CONFIG_PARTITION; + else if (fwu->config_area == DP_CONFIG_AREA) + partition = DISPLAY_CONFIG_PARTITION; + else if (fwu->config_area == PM_CONFIG_AREA) + partition = GUEST_SERIALIZATION_PARTITION; + else if (fwu->config_area == BL_CONFIG_AREA) + partition = GLOBAL_PARAMETERS_PARTITION; + else if (fwu->config_area == FLASH_CONFIG_AREA) + partition = FLASH_CONFIG_PARTITION; + break; + case CMD_WRITE_LOCKDOWN: + partition = DEVICE_CONFIG_PARTITION; + break; + case CMD_WRITE_GUEST_CODE: + partition = GUEST_CODE_PARTITION; + break; + case CMD_WRITE_BOOTLOADER: + partition = BOOTLOADER_PARTITION; + break; + case CMD_WRITE_UTILITY_PARAM: + partition = UTILITY_PARAMETER_PARTITION; + break; + case CMD_ERASE_ALL: + partition = CORE_CODE_PARTITION; + break; + case CMD_ERASE_BL_CONFIG: + partition = GLOBAL_PARAMETERS_PARTITION; + break; + case CMD_ERASE_UI_CONFIG: + partition = CORE_CONFIG_PARTITION; + break; + case CMD_ERASE_DISP_CONFIG: + partition = DISPLAY_CONFIG_PARTITION; + break; + case CMD_ERASE_FLASH_CONFIG: + partition = FLASH_CONFIG_PARTITION; + break; + case CMD_ERASE_GUEST_CODE: + partition = GUEST_CODE_PARTITION; + break; + case CMD_ERASE_BOOTLOADER: + partition = BOOTLOADER_PARTITION; + break; + case CMD_ENABLE_FLASH_PROG: + partition = BOOTLOADER_PARTITION; + break; + default: + dev_err(rmi4_data->pdev->dev.parent, + "%s: Invalid command 0x%02x\n", + __func__, cmd); + return -EINVAL; + }; + + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.partition_id, + &partition, + sizeof(partition)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write partition ID\n", + __func__); + return retval; + } + + return 0; +} + +static int fwu_write_f34_partition_id(unsigned char cmd) +{ + int retval; + + if (fwu->bl_version == BL_V7 || fwu->bl_version == BL_V8) + retval = fwu_write_f34_v7_partition_id(cmd); + else + retval = 0; + + return retval; +} + +static int fwu_read_f34_v7_partition_table(unsigned char *partition_table) +{ + int retval; + unsigned char data_base; + unsigned char length[2]; + unsigned short block_number = 0; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + data_base = fwu->f34_fd.data_base_addr; + + fwu->config_area = FLASH_CONFIG_AREA; + + retval = fwu_write_f34_partition_id(CMD_READ_CONFIG); + if (retval < 0) + return retval; + + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.block_number, + (unsigned char *)&block_number, + sizeof(block_number)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write block number\n", + __func__); + return retval; + } + + length[0] = (unsigned char)(fwu->flash_config_length & MASK_8BIT); + length[1] = (unsigned char)(fwu->flash_config_length >> 8); + + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.transfer_length, + length, + sizeof(length)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write transfer length\n", + __func__); + return retval; + } + + retval = fwu_write_f34_command(CMD_READ_CONFIG); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write command\n", + __func__); + return retval; + } + + retval = fwu_wait_for_idle(WRITE_WAIT_MS, true); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to wait for idle status\n", + __func__); + return retval; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + data_base + fwu->off.payload, + partition_table, + fwu->partition_table_bytes); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read block data\n", + __func__); + return retval; + } + + return 0; +} + +static int fwu_read_f34_v7_queries(void) +{ + int retval; + unsigned char ii; + unsigned char query_base; + unsigned char index; + unsigned char offset; + unsigned char *ptable; + struct f34_v7_query_0 query_0; + struct f34_v7_query_1_7 query_1_7; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + query_base = fwu->f34_fd.query_base_addr; + + retval = synaptics_rmi4_reg_read(rmi4_data, + query_base, + query_0.data, + sizeof(query_0.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read query 0\n", + __func__); + return retval; + } + + offset = query_0.subpacket_1_size + 1; + + retval = synaptics_rmi4_reg_read(rmi4_data, + query_base + offset, + query_1_7.data, + sizeof(query_1_7.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read queries 1 to 7\n", + __func__); + return retval; + } + + fwu->bootloader_id[0] = query_1_7.bl_minor_revision; + fwu->bootloader_id[1] = query_1_7.bl_major_revision; + + if (fwu->bootloader_id[1] == BL_V8) + fwu->bl_version = BL_V8; + + fwu->block_size = query_1_7.block_size_15_8 << 8 | + query_1_7.block_size_7_0; + + fwu->flash_config_length = query_1_7.flash_config_length_15_8 << 8 | + query_1_7.flash_config_length_7_0; + + fwu->payload_length = query_1_7.payload_length_15_8 << 8 | + query_1_7.payload_length_7_0; + + fwu->off.flash_status = V7_FLASH_STATUS_OFFSET; + fwu->off.partition_id = V7_PARTITION_ID_OFFSET; + fwu->off.block_number = V7_BLOCK_NUMBER_OFFSET; + fwu->off.transfer_length = V7_TRANSFER_LENGTH_OFFSET; + fwu->off.flash_cmd = V7_COMMAND_OFFSET; + fwu->off.payload = V7_PAYLOAD_OFFSET; + + index = sizeof(query_1_7.data) - V7_PARTITION_SUPPORT_BYTES; + + fwu->partitions = 0; + for (offset = 0; offset < V7_PARTITION_SUPPORT_BYTES; offset++) { + for (ii = 0; ii < 8; ii++) { + if (query_1_7.data[index + offset] & (1 << ii)) + fwu->partitions++; + } + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Supported partitions: 0x%02x\n", + __func__, query_1_7.data[index + offset]); + } + + fwu->partition_table_bytes = fwu->partitions * 8 + 2; + + ptable = kzalloc(fwu->partition_table_bytes, GFP_KERNEL); + if (!ptable) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for partition table\n", + __func__); + return -ENOMEM; + } + + retval = fwu_read_f34_v7_partition_table(ptable); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read partition table\n", + __func__); + kfree(ptable); + return retval; + } + + fwu_parse_partition_table(ptable, &fwu->blkcount, &fwu->phyaddr); + + if (fwu->blkcount.dp_config) + fwu->flash_properties.has_disp_config = 1; + else + fwu->flash_properties.has_disp_config = 0; + + if (fwu->blkcount.pm_config) + fwu->flash_properties.has_pm_config = 1; + else + fwu->flash_properties.has_pm_config = 0; + + if (fwu->blkcount.bl_config) + fwu->flash_properties.has_bl_config = 1; + else + fwu->flash_properties.has_bl_config = 0; + + if (fwu->blkcount.guest_code) + fwu->has_guest_code = 1; + else + fwu->has_guest_code = 0; + + if (fwu->blkcount.utility_param) + fwu->has_utility_param = 1; + else + fwu->has_utility_param = 0; + + kfree(ptable); + + if (rmi4_data->hw_if->board_data->lockdown_area == LOCKDOWN_AREA_GUEST_SERIALIZATION) + fwu_read_f34_guest_serialization_partition(); + + return 0; +} + +static int fwu_read_f34_lockdown_data(void) +{ + int retval = 0; + unsigned short block_count; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (!fwu->has_lockdown_data) + return -EINVAL; + + block_count = fwu->blkcount.lockdown_data; + fwu->config_area = UI_CONFIG_AREA; + fwu->config_size = fwu->block_size * block_count; + + retval = fwu_allocate_read_config_buf(fwu->config_size); + if (retval < 0) + return retval; + + retval = fwu_read_f34_blocks(block_count, CMD_READ_LOCKDOWN_DATA); + if (retval < 0) + return retval; + + secure_memcpy(rmi4_data->lockdown_info, LOCKDOWN_INFO_SIZE, + &fwu->read_config_buf[4], fwu->read_config_buf_size, LOCKDOWN_INFO_SIZE); + + dev_info(rmi4_data->pdev->dev.parent, + "%s: Lockdown info: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", + __func__, fwu->read_config_buf[4], fwu->read_config_buf[5], + fwu->read_config_buf[6], fwu->read_config_buf[7], + fwu->read_config_buf[8], fwu->read_config_buf[9], + fwu->read_config_buf[10], fwu->read_config_buf[11]); + + return retval; +} + +static int fwu_read_f34_v5v6_queries(void) +{ + int retval; + unsigned char count; + unsigned char query_base; + unsigned char buf[10]; + struct f34_v5v6_flash_properties_2 properties_2; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + query_base = fwu->f34_fd.query_base_addr; + + retval = synaptics_rmi4_reg_read(rmi4_data, + query_base + V5V6_BOOTLOADER_ID_OFFSET, + fwu->bootloader_id, + sizeof(fwu->bootloader_id)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read bootloader ID\n", + __func__); + return retval; + } + + if (fwu->bl_version == BL_V5) { + fwu->off.properties = V5_PROPERTIES_OFFSET; + fwu->off.block_size = V5_BLOCK_SIZE_OFFSET; + fwu->off.block_count = V5_BLOCK_COUNT_OFFSET; + fwu->off.block_number = V5_BLOCK_NUMBER_OFFSET; + fwu->off.payload = V5_BLOCK_DATA_OFFSET; + } else if (fwu->bl_version == BL_V6) { + fwu->off.properties = V6_PROPERTIES_OFFSET; + fwu->off.properties_2 = V6_PROPERTIES_2_OFFSET; + fwu->off.block_size = V6_BLOCK_SIZE_OFFSET; + fwu->off.block_count = V6_BLOCK_COUNT_OFFSET; + fwu->off.block_number = V6_BLOCK_NUMBER_OFFSET; + fwu->off.payload = V6_BLOCK_DATA_OFFSET; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + query_base + fwu->off.block_size, + buf, + 2); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read block size info\n", + __func__); + return retval; + } + + batohs(&fwu->block_size, &(buf[0])); + + if (fwu->bl_version == BL_V5) { + fwu->off.flash_cmd = fwu->off.payload + fwu->block_size; + fwu->off.flash_status = fwu->off.flash_cmd; + } else if (fwu->bl_version == BL_V6) { + fwu->off.flash_cmd = V6_FLASH_COMMAND_OFFSET; + fwu->off.flash_status = V6_FLASH_STATUS_OFFSET; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + query_base + fwu->off.properties, + fwu->flash_properties.data, + sizeof(fwu->flash_properties.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read flash properties\n", + __func__); + return retval; + } + + count = 4; + + if (fwu->flash_properties.has_pm_config) + count += 2; + + if (fwu->flash_properties.has_bl_config) + count += 2; + + if (fwu->flash_properties.has_disp_config) + count += 2; + + retval = synaptics_rmi4_reg_read(rmi4_data, + query_base + fwu->off.block_count, + buf, + count); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read block count info\n", + __func__); + return retval; + } + + batohs(&fwu->blkcount.ui_firmware, &(buf[0])); + batohs(&fwu->blkcount.ui_config, &(buf[2])); + + count = 4; + + if (fwu->flash_properties.has_pm_config) { + batohs(&fwu->blkcount.pm_config, &(buf[count])); + count += 2; + } + + if (fwu->flash_properties.has_bl_config) { + batohs(&fwu->blkcount.bl_config, &(buf[count])); + count += 2; + } + + if (fwu->flash_properties.has_disp_config) + batohs(&fwu->blkcount.dp_config, &(buf[count])); + + fwu->has_guest_code = false; + + fwu->has_lockdown_data = false; + + if (fwu->flash_properties.has_query4) { + retval = synaptics_rmi4_reg_read(rmi4_data, + query_base + fwu->off.properties_2, + properties_2.data, + sizeof(properties_2.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read flash properties 2\n", + __func__); + return retval; + } + + count = 0; + + if (properties_2.has_guest_code) { + count++; + retval = synaptics_rmi4_reg_read(rmi4_data, + query_base + fwu->off.properties_2 + count, + buf, + 2); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read guest code block count\n", + __func__); + return retval; + } + + batohs(&fwu->blkcount.guest_code, &(buf[0])); + fwu->has_guest_code = true; + } + + if (properties_2.has_gesture_config_area) + count++; + + if (properties_2.has_force_config_block) + count++; + + if (properties_2.has_lockdown_data_block) { + count++; + retval = synaptics_rmi4_reg_read(rmi4_data, + query_base + fwu->off.properties_2 + count, + buf, + 2); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read lockdown data block count\n", + __func__); + return retval; + } + + batohs(&fwu->blkcount.lockdown_data, &(buf[0])); + fwu->has_lockdown_data = true; + + fwu_read_f34_lockdown_data(); + } + } + + fwu->has_utility_param = false; + + return 0; +} + +static int fwu_read_f34_queries(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + u8 *tp_maker = NULL; + + memset(&fwu->blkcount, 0x00, sizeof(fwu->blkcount)); + memset(&fwu->phyaddr, 0x00, sizeof(fwu->phyaddr)); + + if (fwu->bl_version == BL_V7) + retval = fwu_read_f34_v7_queries(); + else + retval = fwu_read_f34_v5v6_queries(); + + tp_maker = kzalloc(20, GFP_KERNEL); + if (tp_maker == NULL) + dev_err(rmi4_data->pdev->dev.parent, "%s: Failed to alloc vendor name memory\n", __func__); + else { + kfree(tp_maker); + tp_maker = NULL; + } + return retval; +} + +static int fwu_write_f34_v7_blocks(unsigned char *block_ptr, + unsigned short block_cnt, unsigned char command) +{ + int retval; + unsigned char data_base; + unsigned char length[2]; + unsigned short transfer; + unsigned short remaining = block_cnt; + unsigned short block_number = 0; + unsigned short left_bytes; + unsigned short write_size; + unsigned short max_write_size; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + data_base = fwu->f34_fd.data_base_addr; + + retval = fwu_write_f34_partition_id(command); + if (retval < 0) + return retval; + + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.block_number, + (unsigned char *)&block_number, + sizeof(block_number)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write block number\n", + __func__); + return retval; + } + + do { + if (remaining / fwu->payload_length) + transfer = fwu->payload_length; + else + transfer = remaining; + + length[0] = (unsigned char)(transfer & MASK_8BIT); + length[1] = (unsigned char)(transfer >> 8); + + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.transfer_length, + length, + sizeof(length)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write transfer length (remaining = %d)\n", + __func__, remaining); + return retval; + } + + retval = fwu_write_f34_command(command); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write command (remaining = %d)\n", + __func__, remaining); + return retval; + } + +#ifdef MAX_WRITE_SIZE + max_write_size = MAX_WRITE_SIZE; + if (max_write_size >= transfer * fwu->block_size) + max_write_size = transfer * fwu->block_size; + else if (max_write_size > fwu->block_size) + max_write_size -= max_write_size % fwu->block_size; + else + max_write_size = fwu->block_size; +#else + max_write_size = transfer * fwu->block_size; +#endif + left_bytes = transfer * fwu->block_size; + + do { + if (left_bytes / max_write_size) + write_size = max_write_size; + else + write_size = left_bytes; + + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.payload, + block_ptr, + write_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write block data (remaining = %d)\n", + __func__, remaining); + return retval; + } + + block_ptr += write_size; + left_bytes -= write_size; + } while (left_bytes); + + retval = fwu_wait_for_idle(WRITE_WAIT_MS, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to wait for idle status (remaining = %d)\n", + __func__, remaining); + return retval; + } + + remaining -= transfer; + } while (remaining); + + return 0; +} + +static int fwu_write_f34_v5v6_blocks(unsigned char *block_ptr, + unsigned short block_cnt, unsigned char command) +{ + int retval; + unsigned char data_base; + unsigned char block_number[] = {0, 0}; + unsigned short blk; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + data_base = fwu->f34_fd.data_base_addr; + + block_number[1] |= (fwu->config_area << 5); + + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.block_number, + block_number, + sizeof(block_number)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write block number\n", + __func__); + return retval; + } + + for (blk = 0; blk < block_cnt; blk++) { + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.payload, + block_ptr, + fwu->block_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write block data (block %d)\n", + __func__, blk); + return retval; + } + + retval = fwu_write_f34_command(command); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write command for block %d\n", + __func__, blk); + return retval; + } + + retval = fwu_wait_for_idle(WRITE_WAIT_MS, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to wait for idle status (block %d)\n", + __func__, blk); + return retval; + } + + block_ptr += fwu->block_size; + } + + return 0; +} + +static int fwu_write_f34_blocks(unsigned char *block_ptr, + unsigned short block_cnt, unsigned char cmd) +{ + int retval; + + if (fwu->bl_version == BL_V7 || fwu->bl_version == BL_V8) + retval = fwu_write_f34_v7_blocks(block_ptr, block_cnt, cmd); + else + retval = fwu_write_f34_v5v6_blocks(block_ptr, block_cnt, cmd); + + return retval; +} + +static int fwu_read_f34_v7_blocks(unsigned short block_cnt, + unsigned char command) +{ + int retval; + unsigned char data_base; + unsigned char length[2]; + unsigned short transfer; + unsigned short remaining = block_cnt; + unsigned short block_number = 0; + unsigned short index = 0; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + data_base = fwu->f34_fd.data_base_addr; + + retval = fwu_write_f34_partition_id(command); + if (retval < 0) + return retval; + + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.block_number, + (unsigned char *)&block_number, + sizeof(block_number)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write block number\n", + __func__); + return retval; + } + + do { + if (remaining / fwu->payload_length) + transfer = fwu->payload_length; + else + transfer = remaining; + + length[0] = (unsigned char)(transfer & MASK_8BIT); + length[1] = (unsigned char)(transfer >> 8); + + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.transfer_length, + length, + sizeof(length)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write transfer length (remaining = %d)\n", + __func__, remaining); + return retval; + } + + retval = fwu_write_f34_command(command); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write command (remaining = %d)\n", + __func__, remaining); + return retval; + } + + retval = fwu_wait_for_idle(WRITE_WAIT_MS, true); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to wait for idle status (remaining = %d)\n", + __func__, remaining); + return retval; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + data_base + fwu->off.payload, + &fwu->read_config_buf[index], + transfer * fwu->block_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read block data (remaining = %d)\n", + __func__, remaining); + return retval; + } + + index += (transfer * fwu->block_size); + remaining -= transfer; + } while (remaining); + + return 0; +} + +static int fwu_read_f34_v5v6_blocks(unsigned short block_cnt, + unsigned char command) +{ + int retval; + unsigned char data_base; + unsigned char block_number[] = {0, 0}; + unsigned short blk; + unsigned short index = 0; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + data_base = fwu->f34_fd.data_base_addr; + + block_number[1] |= (fwu->config_area << 5); + + retval = synaptics_rmi4_reg_write(rmi4_data, + data_base + fwu->off.block_number, + block_number, + sizeof(block_number)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write block number\n", + __func__); + return retval; + } + + for (blk = 0; blk < block_cnt; blk++) { + retval = fwu_write_f34_command(command); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write read config command\n", + __func__); + return retval; + } + + retval = fwu_wait_for_idle(WRITE_WAIT_MS, true); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to wait for idle status\n", + __func__); + return retval; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + data_base + fwu->off.payload, + &fwu->read_config_buf[index], + fwu->block_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read block data (block %d)\n", + __func__, blk); + return retval; + } + + index += fwu->block_size; + } + + return 0; +} + +static int fwu_read_f34_blocks(unsigned short block_cnt, unsigned char cmd) +{ + int retval; + + if (fwu->bl_version == BL_V7 || fwu->bl_version == BL_V8) + retval = fwu_read_f34_v7_blocks(block_cnt, cmd); + else + retval = fwu_read_f34_v5v6_blocks(block_cnt, cmd); + + return retval; +} + +static int fwu_read_f34_guest_serialization_partition(void) +{ + int retval = 0; + unsigned short block_count; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + fwu->config_area = PM_CONFIG_AREA; + if (!fwu->flash_properties.has_pm_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Permanent configuration not supported\n", + __func__); + return -EINVAL; + } + block_count = fwu->blkcount.pm_config; + + fwu->config_size = fwu->block_size * block_count; + kfree(fwu->read_config_buf); + fwu->read_config_buf = kzalloc(fwu->config_size, GFP_KERNEL); + if (!fwu->read_config_buf) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for fwu->read_config_buf\n", + __func__); + fwu->read_config_buf_size = 0; + retval = -ENOMEM; + return retval; + } + fwu->read_config_buf_size = fwu->config_size; + + retval = fwu_read_f34_blocks(block_count, CMD_READ_CONFIG); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to get guest serialization partition\n", + __func__); + return retval; + } + + secure_memcpy(rmi4_data->lockdown_info, LOCKDOWN_INFO_SIZE, + fwu->read_config_buf, fwu->read_config_buf_size, LOCKDOWN_INFO_SIZE); + + dev_info(rmi4_data->pdev->dev.parent, + "%s: Lockdown info: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", + __func__, fwu->read_config_buf[0], fwu->read_config_buf[1], + fwu->read_config_buf[2], fwu->read_config_buf[3], + fwu->read_config_buf[4], fwu->read_config_buf[5], + fwu->read_config_buf[6], fwu->read_config_buf[7]); + + return retval; +} + +static int fwu_get_image_firmware_id(unsigned int *fw_id) +{ + int retval; + unsigned char index = 0; + char *strptr; + char *firmware_id; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (fwu->img.contains_firmware_id) { + *fw_id = fwu->img.firmware_id; + } else { + strptr = strnstr(fwu->image_name, "PR", MAX_IMAGE_NAME_LEN); + if (!strptr) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: No valid PR number (PRxxxxxxx) " + "found in image file name (%s)\n", + __func__, fwu->image_name); + return -EINVAL; + } + + strptr += 2; + firmware_id = kzalloc(MAX_FIRMWARE_ID_LEN, GFP_KERNEL); + if (!firmware_id) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for firmware_id\n", + __func__); + return -ENOMEM; + } + while (strptr[index] >= '0' && strptr[index] <= '9') { + firmware_id[index] = strptr[index]; + index++; + } + + retval = sstrtoul(firmware_id, 10, (unsigned long *)fw_id); + kfree(firmware_id); + if (retval) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to obtain image firmware ID\n", + __func__); + return -EINVAL; + } + } + + return 0; +} + +static int fwu_get_device_config_id(void) +{ + int retval; + unsigned char config_id_size; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (fwu->bl_version == BL_V7 || fwu->bl_version == BL_V8) + config_id_size = V7_CONFIG_ID_SIZE; + else + config_id_size = V5V6_CONFIG_ID_SIZE; + + retval = synaptics_rmi4_reg_read(rmi4_data, + fwu->f34_fd.ctrl_base_addr, + fwu->config_id, + config_id_size); + if (retval < 0) + return retval; + + return 0; +} + +static enum flash_area fwu_go_nogo(void) +{ + int retval; + enum flash_area flash_area = NONE; + unsigned char ii; + unsigned char config_id_size; + unsigned int device_fw_id; + unsigned int image_fw_id; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (fwu->force_update) { + flash_area = UI_FIRMWARE; + goto exit; + } + + /* Update both UI and config if device is in bootloader mode */ + if (fwu->bl_mode_device) { + flash_area = UI_FIRMWARE; + goto exit; + } + + /* Get device firmware ID */ + device_fw_id = rmi4_data->firmware_id; + dev_info(rmi4_data->pdev->dev.parent, + "%s: Device firmware ID = %d\n", + __func__, device_fw_id); + + /* Get image firmware ID */ + retval = fwu_get_image_firmware_id(&image_fw_id); + if (retval < 0) { + flash_area = NONE; + goto exit; + } + dev_info(rmi4_data->pdev->dev.parent, + "%s: Image firmware ID = %d\n", + __func__, image_fw_id); + + if (image_fw_id != device_fw_id) { + flash_area = UI_FIRMWARE; + goto exit; + } + + /* Get device config ID */ + retval = fwu_get_device_config_id(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read device config ID\n", + __func__); + flash_area = NONE; + goto exit; + } + + if (fwu->bl_version == BL_V7 || fwu->bl_version == BL_V8) + config_id_size = V7_CONFIG_ID_SIZE; + else + config_id_size = V5V6_CONFIG_ID_SIZE; + + dev_info(rmi4_data->pdev->dev.parent, + "%s: Device firmware Config ID = %02x%02x%02x%02x\n", + __func__, fwu->config_id[0], fwu->config_id[1], fwu->config_id[2], fwu->config_id[3]); + + dev_info(rmi4_data->pdev->dev.parent, + "%s: Image firmware Config ID = %02x%02x%02x%02x\n", + __func__, fwu->img.ui_config.data[0], fwu->img.ui_config.data[1], + fwu->img.ui_config.data[2], fwu->img.ui_config.data[3]); + + for (ii = 0; ii < config_id_size; ii++) { + if (fwu->img.ui_config.data[ii] != fwu->config_id[ii]) { + flash_area = UI_CONFIG; + goto exit; + } + } + + flash_area = NONE; + +exit: + if (flash_area == NONE) { + dev_info(rmi4_data->pdev->dev.parent, + "%s: No need to do reflash\n", + __func__); + } else { + dev_info(rmi4_data->pdev->dev.parent, + "%s: Updating %s\n", + __func__, + flash_area == UI_FIRMWARE ? + "UI firmware and config" : + "UI config only"); + } + + return flash_area; +} + +static int fwu_scan_pdt(void) +{ + int retval; + unsigned char ii; + unsigned char intr_count = 0; + unsigned char intr_off; + unsigned char intr_src; + unsigned short addr; + bool f01found = false; + bool f34found = false; + bool f35found = false; + struct synaptics_rmi4_fn_desc rmi_fd; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + fwu->in_ub_mode = false; + + for (addr = PDT_START; addr > PDT_END; addr -= PDT_ENTRY_SIZE) { + retval = synaptics_rmi4_reg_read(rmi4_data, + addr, + (unsigned char *)&rmi_fd, + sizeof(rmi_fd)); + if (retval < 0) + return retval; + + if (rmi_fd.fn_number) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Found F%02x\n", + __func__, rmi_fd.fn_number); + switch (rmi_fd.fn_number) { + case SYNAPTICS_RMI4_F01: + f01found = true; + + rmi4_data->f01_query_base_addr = + rmi_fd.query_base_addr; + rmi4_data->f01_ctrl_base_addr = + rmi_fd.ctrl_base_addr; + rmi4_data->f01_data_base_addr = + rmi_fd.data_base_addr; + rmi4_data->f01_cmd_base_addr = + rmi_fd.cmd_base_addr; + break; + case SYNAPTICS_RMI4_F34: + f34found = true; + fwu->f34_fd.query_base_addr = + rmi_fd.query_base_addr; + fwu->f34_fd.ctrl_base_addr = + rmi_fd.ctrl_base_addr; + fwu->f34_fd.data_base_addr = + rmi_fd.data_base_addr; + + switch (rmi_fd.fn_version) { + case F34_V0: + fwu->bl_version = BL_V5; + break; + case F34_V1: + fwu->bl_version = BL_V6; + break; + case F34_V2: + fwu->bl_version = BL_V7; + break; + default: + dev_err(rmi4_data->pdev->dev.parent, + "%s: Unrecognized F34 version\n", + __func__); + return -EINVAL; + } + + fwu->intr_mask = 0; + intr_src = rmi_fd.intr_src_count; + intr_off = intr_count % 8; + for (ii = intr_off; + ii < (intr_src + intr_off); + ii++) { + fwu->intr_mask |= 1 << ii; + } + break; + case SYNAPTICS_RMI4_F35: + f35found = true; + fwu->f35_fd.query_base_addr = + rmi_fd.query_base_addr; + fwu->f35_fd.ctrl_base_addr = + rmi_fd.ctrl_base_addr; + fwu->f35_fd.data_base_addr = + rmi_fd.data_base_addr; + fwu->f35_fd.cmd_base_addr = + rmi_fd.cmd_base_addr; + break; + } + } else { + break; + } + + intr_count += rmi_fd.intr_src_count; + } + + if (!f01found || !f34found) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to find both F01 and F34\n", + __func__); + if (!f35found) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to find F35\n", + __func__); + return -EINVAL; + } else { + fwu->in_ub_mode = true; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: In microbootloader mode\n", + __func__); + fwu_recovery_check_status(); + return 0; + } + } + + rmi4_data->intr_mask[0] |= fwu->intr_mask; + + addr = rmi4_data->f01_ctrl_base_addr + 1; + + retval = synaptics_rmi4_reg_write(rmi4_data, + addr, + &(rmi4_data->intr_mask[0]), + sizeof(rmi4_data->intr_mask[0])); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set interrupt enable bit\n", + __func__); + return retval; + } + + return 0; +} + +static int fwu_enter_flash_prog(void) +{ + int retval; + struct f01_device_control f01_device_control; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + retval = fwu_read_flash_status(); + if (retval < 0) + return retval; + + if (fwu->in_bl_mode) + return 0; + + retval = rmi4_data->irq_enable(rmi4_data, false, true); + if (retval < 0) + return retval; + + msleep(INT_DISABLE_WAIT_MS); + + retval = fwu_write_f34_command(CMD_ENABLE_FLASH_PROG); + if (retval < 0) + return retval; + + retval = fwu_wait_for_idle(ENABLE_WAIT_MS, false); + if (retval < 0) + return retval; + + if (!fwu->in_bl_mode) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: BL mode not entered\n", + __func__); + return -EINVAL; + } + + if (rmi4_data->hw_if->bl_hw_init) { + retval = rmi4_data->hw_if->bl_hw_init(rmi4_data); + if (retval < 0) + return retval; + } + + retval = fwu_scan_pdt(); + if (retval < 0) + return retval; + + pr_err("%s: fwu->in_ub_mode = %d\n", __func__, fwu->in_ub_mode); + + retval = fwu_read_f34_queries(); + if (retval < 0) + return retval; + + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_ctrl_base_addr, + f01_device_control.data, + sizeof(f01_device_control.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read F01 device control\n", + __func__); + return retval; + } + + f01_device_control.nosleep = true; + f01_device_control.sleep_mode = SLEEP_MODE_NORMAL; + + retval = synaptics_rmi4_reg_write(rmi4_data, + rmi4_data->f01_ctrl_base_addr, + f01_device_control.data, + sizeof(f01_device_control.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write F01 device control\n", + __func__); + return retval; + } + + msleep(ENTER_FLASH_PROG_WAIT_MS); + + return retval; +} + +static int fwu_check_ui_firmware_size(void) +{ + unsigned short block_count; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + block_count = fwu->img.ui_firmware.size / fwu->block_size; + + if (block_count != fwu->blkcount.ui_firmware) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: UI firmware size mismatch\n", + __func__); + return -EINVAL; + } + + return 0; +} + +static int fwu_check_ui_configuration_size(void) +{ + unsigned short block_count; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + block_count = fwu->img.ui_config.size / fwu->block_size; + + if (block_count != fwu->blkcount.ui_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: UI configuration size mismatch\n", + __func__); + return -EINVAL; + } + + return 0; +} + +static int fwu_check_dp_configuration_size(void) +{ + unsigned short block_count; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + block_count = fwu->img.dp_config.size / fwu->block_size; + + if (block_count != fwu->blkcount.dp_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Display configuration size mismatch\n", + __func__); + return -EINVAL; + } + + return 0; +} + +static int fwu_check_pm_configuration_size(void) +{ + unsigned short block_count; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + block_count = fwu->img.pm_config.size / fwu->block_size; + + if (block_count != fwu->blkcount.pm_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Permanent configuration size mismatch\n", + __func__); + return -EINVAL; + } + + return 0; +} + +static int fwu_check_bl_configuration_size(void) +{ + unsigned short block_count; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + block_count = fwu->img.bl_config.size / fwu->block_size; + + if (block_count != fwu->blkcount.bl_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Bootloader configuration size mismatch\n", + __func__); + return -EINVAL; + } + + return 0; +} + +static int fwu_check_guest_code_size(void) +{ + unsigned short block_count; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + block_count = fwu->img.guest_code.size / fwu->block_size; + if (block_count != fwu->blkcount.guest_code) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Guest code size mismatch\n", + __func__); + return -EINVAL; + } + + return 0; +} + +static int fwu_erase_configuration(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + switch (fwu->config_area) { + case UI_CONFIG_AREA: + retval = fwu_write_f34_command(CMD_ERASE_UI_CONFIG); + if (retval < 0) + return retval; + break; + case DP_CONFIG_AREA: + retval = fwu_write_f34_command(CMD_ERASE_DISP_CONFIG); + if (retval < 0) + return retval; + break; + case BL_CONFIG_AREA: + retval = fwu_write_f34_command(CMD_ERASE_BL_CONFIG); + if (retval < 0) + return retval; + break; + case FLASH_CONFIG_AREA: + retval = fwu_write_f34_command(CMD_ERASE_FLASH_CONFIG); + if (retval < 0) + return retval; + break; + default: + dev_err(rmi4_data->pdev->dev.parent, + "%s: Invalid config area\n", + __func__); + return -EINVAL; + } + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Erase command written\n", + __func__); + + retval = fwu_wait_for_idle(ERASE_WAIT_MS, false); + if (retval < 0) + return retval; + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Idle status detected\n", + __func__); + + return retval; +} + +static int fwu_erase_bootloader(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + retval = fwu_write_f34_command(CMD_ERASE_BOOTLOADER); + if (retval < 0) + return retval; + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Erase command written\n", + __func__); + + retval = fwu_wait_for_idle(ERASE_WAIT_MS, false); + if (retval < 0) + return retval; + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Idle status detected\n", + __func__); + + return 0; +} + +static int fwu_erase_utility_parameter(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + retval = fwu_write_f34_command(CMD_ERASE_UTILITY_PARAMETER); + if (retval < 0) + return retval; + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Erase command written\n", + __func__); + + retval = fwu_wait_for_idle(ERASE_WAIT_MS, false); + if (retval < 0) + return retval; + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Idle status detected\n", + __func__); + + return 0; +} + +static int fwu_erase_guest_code(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + retval = fwu_write_f34_command(CMD_ERASE_GUEST_CODE); + if (retval < 0) + return retval; + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Erase command written\n", + __func__); + + retval = fwu_wait_for_idle(ERASE_WAIT_MS, false); + if (retval < 0) + return retval; + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Idle status detected\n", + __func__); + + return 0; +} + +static int fwu_erase_all(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (fwu->bl_version == BL_V7) { + fwu->config_area = INVALID_CONFIG_AREA; + retval = fwu_write_f34_command(CMD_ERASE_UI_FIRMWARE); + if (retval < 0) + return retval; + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Erase command written\n", + __func__); + + retval = fwu_wait_for_idle(ERASE_WAIT_MS, false); + if (retval < 0) + return retval; + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Idle status detected\n", + __func__); + + pr_err("erased core code\n"); + + fwu->config_area = UI_CONFIG_AREA; + retval = fwu_erase_configuration(); + if (retval < 0) + return retval; + + pr_err("erased core config\n"); + } else { + retval = fwu_write_f34_command(CMD_ERASE_ALL); + if (retval < 0) + return retval; + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Erase all command written\n", + __func__); + + retval = fwu_wait_for_idle(ERASE_WAIT_MS, false); + if (!(fwu->bl_version == BL_V8 && + fwu->flash_status == BAD_PARTITION_TABLE)) { + if (retval < 0) + return retval; + } + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Idle status detected\n", + __func__); + + if (fwu->bl_version == BL_V8) + return 0; + } + + if (fwu->flash_properties.has_disp_config && + fwu->img.contains_disp_config) { + fwu->config_area = DP_CONFIG_AREA; + retval = fwu_erase_configuration(); + if (retval < 0) + return retval; + } + + if (fwu->has_guest_code && fwu->img.contains_guest_code) { + retval = fwu_erase_guest_code(); + if (retval < 0) + return retval; + } + + return 0; +} + +static int fwu_write_firmware(void) +{ + unsigned short firmware_block_count; + + firmware_block_count = fwu->img.ui_firmware.size / fwu->block_size; + + pr_err("core code block count = %d\n", firmware_block_count); + + return fwu_write_f34_blocks((unsigned char *)fwu->img.ui_firmware.data, + firmware_block_count, CMD_WRITE_FW); +} + +static int fwu_write_bootloader(void) +{ + int retval; + unsigned short bootloader_block_count; + + bootloader_block_count = fwu->img.bl_image.size / fwu->block_size; + + pr_err("bootloader block count = %d\n", bootloader_block_count); + + fwu->write_bootloader = true; + retval = fwu_write_f34_blocks((unsigned char *)fwu->img.bl_image.data, + bootloader_block_count, CMD_WRITE_BOOTLOADER); + fwu->write_bootloader = false; + + return retval; +} + +static int fwu_write_utility_parameter(void) +{ + int retval; + unsigned char ii; + unsigned char checksum_array[4]; + unsigned char *pbuf; + unsigned short remaining_size; + unsigned short utility_param_size; + unsigned long checksum; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + utility_param_size = fwu->blkcount.utility_param * fwu->block_size; + retval = fwu_allocate_read_config_buf(utility_param_size); + if (retval < 0) + return retval; + memset(fwu->read_config_buf, 0x00, utility_param_size); + + pbuf = fwu->read_config_buf; + remaining_size = utility_param_size - 4; + + for (ii = 0; ii < MAX_UTILITY_PARAMS; ii++) { + if (fwu->img.utility_param_id[ii] == UNUSED) + continue; + +#ifdef F51_DISCRETE_FORCE + if (fwu->img.utility_param_id[ii] == FORCE_PARAMETER) { + if (fwu->bl_mode_device) { + dev_info(rmi4_data->pdev->dev.parent, + "%s: Device in bootloader mode, skipping calibration data restoration\n", + __func__); + goto image_param; + } + retval = secure_memcpy(&(pbuf[4]), + remaining_size - 4, + fwu->cal_data, + fwu->cal_data_buf_size, + fwu->cal_data_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy force calibration data\n", + __func__); + return retval; + } + pbuf[0] = FORCE_PARAMETER; + pbuf[1] = 0x00; + pbuf[2] = (4 + fwu->cal_data_size) / 2; + pbuf += (fwu->cal_data_size + 4); + remaining_size -= (fwu->cal_data_size + 4); + continue; + } +image_param: +#endif + + retval = secure_memcpy(pbuf, + remaining_size, + fwu->img.utility_param[ii].data, + fwu->img.utility_param[ii].size, + fwu->img.utility_param[ii].size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy utility parameter data\n", + __func__); + return retval; + } + pbuf += fwu->img.utility_param[ii].size; + remaining_size -= fwu->img.utility_param[ii].size; + } + + calculate_checksum((unsigned short *)fwu->read_config_buf, + ((utility_param_size - 4) / 2), + &checksum); + + convert_to_little_endian(checksum_array, checksum); + + fwu->read_config_buf[utility_param_size - 4] = checksum_array[0]; + fwu->read_config_buf[utility_param_size - 3] = checksum_array[1]; + fwu->read_config_buf[utility_param_size - 2] = checksum_array[2]; + fwu->read_config_buf[utility_param_size - 1] = checksum_array[3]; + + pr_err("utility parameter block count = %d\n", fwu->blkcount.utility_param); + + retval = fwu_write_f34_blocks((unsigned char *)fwu->read_config_buf, + fwu->blkcount.utility_param, CMD_WRITE_UTILITY_PARAM); + if (retval < 0) + return retval; + + return 0; +} + +static int fwu_write_configuration(void) +{ + return fwu_write_f34_blocks((unsigned char *)fwu->config_data, + fwu->config_block_count, CMD_WRITE_CONFIG); +} + +static int fwu_write_ui_configuration(void) +{ + fwu->config_area = UI_CONFIG_AREA; + fwu->config_data = fwu->img.ui_config.data; + fwu->config_size = fwu->img.ui_config.size; + fwu->config_block_count = fwu->config_size / fwu->block_size; + + pr_err("core config block count = %d\n", fwu->config_block_count); + + return fwu_write_configuration(); +} + +static int fwu_write_dp_configuration(void) +{ + fwu->config_area = DP_CONFIG_AREA; + fwu->config_data = fwu->img.dp_config.data; + fwu->config_size = fwu->img.dp_config.size; + fwu->config_block_count = fwu->config_size / fwu->block_size; + + return fwu_write_configuration(); +} + +static int fwu_write_pm_configuration(void) +{ + fwu->config_area = PM_CONFIG_AREA; + fwu->config_data = fwu->img.pm_config.data; + fwu->config_size = fwu->img.pm_config.size; + fwu->config_block_count = fwu->config_size / fwu->block_size; + + return fwu_write_configuration(); +} + +static int fwu_write_flash_configuration(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + fwu->config_area = FLASH_CONFIG_AREA; + fwu->config_data = fwu->img.fl_config.data; + fwu->config_size = fwu->img.fl_config.size; + fwu->config_block_count = fwu->config_size / fwu->block_size; + + if (fwu->config_block_count != fwu->blkcount.fl_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Flash configuration size mismatch\n", + __func__); + return -EINVAL; + } + + retval = fwu_erase_configuration(); + if (retval < 0) + return retval; + + retval = fwu_write_configuration(); + if (retval < 0) + return retval; + + rmi4_data->reset_device(rmi4_data, false); + + return 0; +} + +static int fwu_write_guest_code(void) +{ + int retval; + unsigned short guest_code_block_count; + + guest_code_block_count = fwu->img.guest_code.size / fwu->block_size; + + retval = fwu_write_f34_blocks((unsigned char *)fwu->img.guest_code.data, + guest_code_block_count, CMD_WRITE_GUEST_CODE); + if (retval < 0) + return retval; + + return 0; +} + +static int fwu_write_lockdown(void) +{ + unsigned short lockdown_block_count; + + lockdown_block_count = fwu->img.lockdown.size / fwu->block_size; + + return fwu_write_f34_blocks((unsigned char *)fwu->img.lockdown.data, + lockdown_block_count, CMD_WRITE_LOCKDOWN); +} + +static int fwu_write_partition_table_v8(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + fwu->config_area = FLASH_CONFIG_AREA; + fwu->config_data = fwu->img.fl_config.data; + fwu->config_size = fwu->img.fl_config.size; + fwu->config_block_count = fwu->config_size / fwu->block_size; + + if (fwu->config_block_count != fwu->blkcount.fl_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Flash configuration size mismatch\n", + __func__); + return -EINVAL; + } + + retval = fwu_write_configuration(); + if (retval < 0) + return retval; + + rmi4_data->reset_device(rmi4_data, false); + + return 0; +} + +static int fwu_write_partition_table_v7(void) +{ + int retval; + unsigned short block_count; + + block_count = fwu->blkcount.bl_config; + fwu->config_area = BL_CONFIG_AREA; + fwu->config_size = fwu->block_size * block_count; + + retval = fwu_allocate_read_config_buf(fwu->config_size); + if (retval < 0) + return retval; + + retval = fwu_read_f34_blocks(block_count, CMD_READ_CONFIG); + if (retval < 0) + return retval; + + retval = fwu_erase_configuration(); + if (retval < 0) + return retval; + + retval = fwu_write_flash_configuration(); + if (retval < 0) + return retval; + + fwu->config_area = BL_CONFIG_AREA; + fwu->config_data = fwu->read_config_buf; + fwu->config_size = fwu->img.bl_config.size; + fwu->config_block_count = fwu->config_size / fwu->block_size; + + retval = fwu_write_configuration(); + if (retval < 0) + return retval; + + return 0; +} + +static int fwu_write_bl_area_v7(void) +{ + int retval; + bool has_utility_param; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + has_utility_param = fwu->has_utility_param; + + if (fwu->has_utility_param) { + retval = fwu_erase_utility_parameter(); + if (retval < 0) + return retval; + + pr_err("erased utility parameter\n"); + } + + fwu->config_area = BL_CONFIG_AREA; + retval = fwu_erase_configuration(); + if (retval < 0) + return retval; + + pr_err("erased bootloader config\n"); + + fwu->config_area = FLASH_CONFIG_AREA; + retval = fwu_erase_configuration(); + if (retval < 0) + return retval; + + pr_err("erased flash config\n"); + + retval = fwu_erase_bootloader(); + if (retval < 0) + return retval; + + pr_err("erased bootloader\n"); + + retval = fwu_write_bootloader(); + if (retval < 0) + return retval; + + pr_err("bootloader written\n"); + + msleep(rmi4_data->hw_if->board_data->reset_delay_ms); + rmi4_data->reset_device(rmi4_data, false); + + pr_err("reset after writing bootloader\n"); + + fwu->config_area = FLASH_CONFIG_AREA; + fwu->config_data = fwu->img.fl_config.data; + fwu->config_size = fwu->img.fl_config.size; + fwu->config_block_count = fwu->config_size / fwu->block_size; + pr_err("flash config block count = %d\n", fwu->config_block_count); + retval = fwu_write_configuration(); + if (retval < 0) + return retval; + + pr_err("flash config written\n"); + + rmi4_data->reset_device(rmi4_data, false); + + pr_err("reset after writing flash config\n"); + + fwu->config_area = BL_CONFIG_AREA; + fwu->config_data = fwu->img.bl_config.data; + fwu->config_size = fwu->img.bl_config.size; + fwu->config_block_count = fwu->config_size / fwu->block_size; + pr_err("bootloader config block count = %d\n", fwu->config_block_count); + retval = fwu_write_configuration(); + if (retval < 0) + return retval; + + pr_err("bootloader config written\n"); + + if (fwu->img.contains_utility_param) { + retval = fwu_write_utility_parameter(); + if (retval < 0) + return retval; + + pr_err("utility parameter written\n"); + } + + return 0; +} + +static int fwu_do_reflash(void) +{ + int retval; + bool do_bl_update = false; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (!fwu->new_partition_table) { + retval = fwu_check_ui_firmware_size(); + if (retval < 0) + return retval; + + retval = fwu_check_ui_configuration_size(); + if (retval < 0) + return retval; + + if (fwu->flash_properties.has_disp_config && + fwu->img.contains_disp_config) { + retval = fwu_check_dp_configuration_size(); + if (retval < 0) + return retval; + } + + if (fwu->has_guest_code && fwu->img.contains_guest_code) { + retval = fwu_check_guest_code_size(); + if (retval < 0) + return retval; + } + } else if (fwu->bl_version == BL_V7) { + retval = fwu_check_bl_configuration_size(); + if (retval < 0) + return retval; + } + + if (!fwu->has_utility_param && fwu->img.contains_utility_param) { + if (fwu->bl_version == BL_V7 || fwu->bl_version == BL_V8) + do_bl_update = true; + } + + if (fwu->has_utility_param && !fwu->img.contains_utility_param) { + if (fwu->bl_version == BL_V7 || fwu->bl_version == BL_V8) + do_bl_update = true; + } + + pr_err("fwu->has_utility_param = %d\n", fwu->has_utility_param); + pr_err("fwu->img.contains_utility_param = %d\n", fwu->img.contains_utility_param); + pr_err("do_bl_update = %d\n", do_bl_update); + + if (!do_bl_update && fwu->incompatible_partition_tables) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Incompatible partition tables\n", + __func__); + return -EINVAL; + } else if (!do_bl_update && fwu->new_partition_table) { + if (!fwu->force_update) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Partition table mismatch\n", + __func__); + return -EINVAL; + } + } + + retval = fwu_erase_all(); + if (retval < 0) + return retval; + + if (do_bl_update) { + retval = fwu_write_bl_area_v7(); + if (retval < 0) + return retval; + pr_notice("%s: Bootloader area programmed\n", __func__); + } else if (fwu->bl_version == BL_V7 && fwu->new_partition_table) { + retval = fwu_write_partition_table_v7(); + if (retval < 0) + return retval; + pr_notice("%s: Partition table programmed\n", __func__); + } else if (fwu->bl_version == BL_V8) { + retval = fwu_write_partition_table_v8(); + if (retval < 0) + return retval; + pr_notice("%s: Partition table programmed\n", __func__); + } + + retval = fwu_write_firmware(); + if (retval < 0) + return retval; + pr_notice("%s: Firmware programmed\n", __func__); + + fwu->config_area = UI_CONFIG_AREA; + retval = fwu_write_ui_configuration(); + if (retval < 0) + return retval; + pr_notice("%s: Configuration programmed\n", __func__); + + if (fwu->flash_properties.has_disp_config && + fwu->img.contains_disp_config) { + retval = fwu_write_dp_configuration(); + if (retval < 0) + return retval; + pr_notice("%s: Display configuration programmed\n", __func__); + } + + if (fwu->has_guest_code && fwu->img.contains_guest_code) { + retval = fwu_write_guest_code(); + if (retval < 0) + return retval; + pr_notice("%s: Guest code programmed\n", __func__); + } + + return retval; +} + +static int fwu_do_read_config(void) +{ + int retval; + unsigned short block_count; + unsigned short config_area; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + switch (fwu->config_area) { + case UI_CONFIG_AREA: + block_count = fwu->blkcount.ui_config; + break; + case DP_CONFIG_AREA: + if (!fwu->flash_properties.has_disp_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Display configuration not supported\n", + __func__); + return -EINVAL; + } + block_count = fwu->blkcount.dp_config; + break; + case PM_CONFIG_AREA: + if (!fwu->flash_properties.has_pm_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Permanent configuration not supported\n", + __func__); + return -EINVAL; + } + block_count = fwu->blkcount.pm_config; + break; + case BL_CONFIG_AREA: + if (!fwu->flash_properties.has_bl_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Bootloader configuration not supported\n", + __func__); + return -EINVAL; + } + block_count = fwu->blkcount.bl_config; + break; + default: + dev_err(rmi4_data->pdev->dev.parent, + "%s: Invalid config area\n", + __func__); + return -EINVAL; + } + + if (block_count == 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Invalid block count\n", + __func__); + return -EINVAL; + } + + mutex_lock(&rmi4_data->rmi4_exp_init_mutex); + + if (fwu->bl_version == BL_V5 || fwu->bl_version == BL_V6) { + config_area = fwu->config_area; + retval = fwu_enter_flash_prog(); + fwu->config_area = config_area; + if (retval < 0) + goto exit; + } + + fwu->config_size = fwu->block_size * block_count; + + retval = fwu_allocate_read_config_buf(fwu->config_size); + if (retval < 0) + goto exit; + + retval = fwu_read_f34_blocks(block_count, CMD_READ_CONFIG); + +exit: + if (fwu->bl_version == BL_V5 || fwu->bl_version == BL_V6) + rmi4_data->reset_device(rmi4_data, false); + + mutex_unlock(&rmi4_data->rmi4_exp_init_mutex); + + return retval; +} + +static int fwu_do_lockdown_v7(void) +{ + int retval; + struct f34_v7_data0 status; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + retval = fwu_enter_flash_prog(); + if (retval < 0) + return retval; + + retval = synaptics_rmi4_reg_read(rmi4_data, + fwu->f34_fd.data_base_addr + fwu->off.flash_status, + status.data, + sizeof(status.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read flash status\n", + __func__); + return retval; + } + + if (status.device_cfg_status == 2) { + dev_info(rmi4_data->pdev->dev.parent, + "%s: Device already locked down\n", + __func__); + return 0; + } + + retval = fwu_write_lockdown(); + if (retval < 0) + return retval; + + pr_notice("%s: Lockdown programmed\n", __func__); + + return retval; +} + +static int fwu_do_lockdown_v5v6(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + retval = fwu_enter_flash_prog(); + if (retval < 0) + return retval; + + retval = synaptics_rmi4_reg_read(rmi4_data, + fwu->f34_fd.query_base_addr + fwu->off.properties, + fwu->flash_properties.data, + sizeof(fwu->flash_properties.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read flash properties\n", + __func__); + return retval; + } + + if (fwu->flash_properties.unlocked == 0) { + dev_info(rmi4_data->pdev->dev.parent, + "%s: Device already locked down\n", + __func__); + return 0; + } + + retval = fwu_write_lockdown(); + if (retval < 0) + return retval; + + pr_notice("%s: Lockdown programmed\n", __func__); + + return retval; +} + +#ifdef F51_DISCRETE_FORCE +static int fwu_do_restore_f51_cal_data(void) +{ + int retval; + unsigned char checksum_array[4]; + unsigned short block_count; + unsigned long checksum; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + block_count = fwu->blkcount.ui_config; + fwu->config_size = fwu->block_size * block_count; + fwu->config_area = UI_CONFIG_AREA; + + retval = fwu_allocate_read_config_buf(fwu->config_size); + if (retval < 0) + return retval; + + retval = fwu_read_f34_blocks(block_count, CMD_READ_CONFIG); + if (retval < 0) + return retval; + + retval = secure_memcpy(&fwu->read_config_buf[fwu->cal_data_off], + fwu->cal_data_size, fwu->cal_data, + fwu->cal_data_buf_size, fwu->cal_data_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to restore calibration data\n", + __func__); + return retval; + } + + calculate_checksum((unsigned short *)fwu->read_config_buf, + ((fwu->config_size - 4) / 2), + &checksum); + + convert_to_little_endian(checksum_array, checksum); + + fwu->read_config_buf[fwu->config_size - 4] = checksum_array[0]; + fwu->read_config_buf[fwu->config_size - 3] = checksum_array[1]; + fwu->read_config_buf[fwu->config_size - 2] = checksum_array[2]; + fwu->read_config_buf[fwu->config_size - 1] = checksum_array[3]; + + retval = fwu_enter_flash_prog(); + if (retval < 0) + return retval; + + fwu->config_area = UI_CONFIG_AREA; + fwu->config_data = fwu->read_config_buf; + fwu->config_block_count = fwu->config_size / fwu->block_size; + + retval = fwu_erase_configuration(); + if (retval < 0) + return retval; + + retval = fwu_write_configuration(); + if (retval < 0) + return retval; + + return 0; +} +#endif + +static int fwu_start_write_guest_code(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + retval = fwu_parse_image_info(); + if (retval < 0) + return -EINVAL; + + if (!fwu->has_guest_code) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Guest code not supported\n", + __func__); + return -EINVAL; + } + + if (!fwu->img.contains_guest_code) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: No guest code in firmware image\n", + __func__); + return -EINVAL; + } + + if (rmi4_data->sensor_sleep) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Sensor sleeping\n", + __func__); + return -ENODEV; + } + + rmi4_data->stay_awake = true; + + mutex_lock(&rmi4_data->rmi4_exp_init_mutex); + + pr_notice("%s: Start of write guest code process\n", __func__); + + retval = fwu_enter_flash_prog(); + if (retval < 0) + goto exit; + + retval = fwu_check_guest_code_size(); + if (retval < 0) + goto exit; + + retval = fwu_erase_guest_code(); + if (retval < 0) + goto exit; + + retval = fwu_write_guest_code(); + if (retval < 0) + goto exit; + + pr_notice("%s: Guest code programmed\n", __func__); + +exit: + rmi4_data->reset_device(rmi4_data, false); + + pr_notice("%s: End of write guest code process\n", __func__); + + mutex_unlock(&rmi4_data->rmi4_exp_init_mutex); + + rmi4_data->stay_awake = false; + + return retval; +} + +static int fwu_start_write_config(void) +{ + int retval; + unsigned short config_area; + unsigned int device_fw_id; + unsigned int image_fw_id; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + retval = fwu_parse_image_info(); + if (retval < 0) + return -EINVAL; + + switch (fwu->config_area) { + case UI_CONFIG_AREA: + device_fw_id = rmi4_data->firmware_id; + retval = fwu_get_image_firmware_id(&image_fw_id); + if (retval < 0) + return retval; + if (device_fw_id != image_fw_id) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Device and image firmware IDs don't match\n", + __func__); + return -EINVAL; + } + retval = fwu_check_ui_configuration_size(); + if (retval < 0) + return retval; + break; + case DP_CONFIG_AREA: + if (!fwu->flash_properties.has_disp_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Display configuration not supported\n", + __func__); + return -EINVAL; + } + if (!fwu->img.contains_disp_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: No display configuration in firmware image\n", + __func__); + return -EINVAL; + } + retval = fwu_check_dp_configuration_size(); + if (retval < 0) + return retval; + break; + case PM_CONFIG_AREA: + if (!fwu->flash_properties.has_pm_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Permanent configuration not supported\n", + __func__); + return -EINVAL; + } + if (!fwu->img.contains_perm_config) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: No permanent configuration in firmware image\n", + __func__); + return -EINVAL; + } + retval = fwu_check_pm_configuration_size(); + if (retval < 0) + return retval; + break; + default: + dev_err(rmi4_data->pdev->dev.parent, + "%s: Configuration not supported\n", + __func__); + return -EINVAL; + } + + if (rmi4_data->sensor_sleep) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Sensor sleeping\n", + __func__); + return -ENODEV; + } + + rmi4_data->stay_awake = true; + + mutex_lock(&rmi4_data->rmi4_exp_init_mutex); + + pr_notice("%s: Start of write config process\n", __func__); + + config_area = fwu->config_area; + + retval = fwu_enter_flash_prog(); + if (retval < 0) + goto exit; + + fwu->config_area = config_area; + + if (fwu->config_area != PM_CONFIG_AREA) { + retval = fwu_erase_configuration(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to erase config\n", + __func__); + goto exit; + } + } + + switch (fwu->config_area) { + case UI_CONFIG_AREA: + retval = fwu_write_ui_configuration(); + if (retval < 0) + goto exit; + break; + case DP_CONFIG_AREA: + retval = fwu_write_dp_configuration(); + if (retval < 0) + goto exit; + break; + case PM_CONFIG_AREA: + retval = fwu_write_pm_configuration(); + if (retval < 0) + goto exit; + break; + } + + pr_notice("%s: Config written\n", __func__); + +exit: + switch (fwu->config_area) { + case UI_CONFIG_AREA: + rmi4_data->reset_device(rmi4_data, true); + break; + case DP_CONFIG_AREA: + case PM_CONFIG_AREA: + rmi4_data->reset_device(rmi4_data, false); + break; + } + + pr_notice("%s: End of write config process\n", __func__); + + mutex_unlock(&rmi4_data->rmi4_exp_init_mutex); + + rmi4_data->stay_awake = false; + + return retval; +} + +static const char *fwu_get_firmware_name(struct synaptics_rmi4_data *rmi4_data) +{ + const char *fw_name = NULL; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + int i, j, def = -1; + bool found = false; + + if (bdata->tp_id_num != 0) { + for (i = 0; i < bdata->config_array_size; i++) { + found = true; + if (rmi4_data->chip_id != bdata->config_array[i].chip_id) + continue; + else + def = i; + + for (j = 0; j < bdata->tp_id_num; j++) { + if (bdata->config_array[i].tp_ids[j] != + rmi4_data->lockdown_info[bdata->tp_id_bytes[j]]) { + found = false; + break; + } + } + + if (found) { + fw_name = bdata->config_array[i].fw_name; + break; + } + } + } + + if (!fw_name && (def >= 0)) + fw_name = bdata->config_array[def].fw_name; + + dev_info(rmi4_data->pdev->dev.parent, + "%s: Choose firmware %s\n", __func__, fw_name); +#ifdef CONFIG_SYNAPTICS_TOUCH_COUNT_DUMP + if (bdata->dump_click_count) { + rmi4_data->current_clicknum_file = kzalloc(TOUCH_COUNT_FILE_MAXSIZE, GFP_KERNEL); + } +#endif + return fw_name; +} + +static int fwu_start_reflash(void) +{ + int retval = 0; + enum flash_area flash_area; + bool do_rebuild = false; + const struct firmware *fw_entry = NULL; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + const char *fw_name; + + if (rmi4_data->sensor_sleep) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Sensor sleeping\n", + __func__); + return -ENODEV; + } + + fw_name = fwu_get_firmware_name(rmi4_data); + + if (fw_name == NULL) { + dev_err(rmi4_data->pdev->dev.parent, "%s: do not found fw to update\n", __func__); + + return -EINVAL; + } + + + rmi4_data->stay_awake = true; + + mutex_lock(&rmi4_data->rmi4_exp_init_mutex); + + dev_info(rmi4_data->pdev->dev.parent, "%s: Start of reflash process\n", __func__); + + if (fwu->image == NULL) { + retval = secure_memcpy(fwu->image_name, MAX_IMAGE_NAME_LEN, + fw_name, sizeof(FW_IMAGE_NAME), + strlen(fw_name)); + + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy image file name\n", + __func__); + goto exit; + } + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Requesting firmware image %s\n", + __func__, fwu->image_name); + + retval = request_firmware(&fw_entry, fwu->image_name, + rmi4_data->pdev->dev.parent); + if (retval != 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Firmware image %s not available\n", + __func__, fwu->image_name); + retval = -EINVAL; + goto exit; + } + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Firmware image size = %ld\n", + __func__, fw_entry->size); + + fwu->image = fw_entry->data; + } + + retval = fwu_parse_image_info(); + if (retval < 0) + goto exit; + + if (fwu->blkcount.total_count != fwu->img.blkcount.total_count) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Flash size mismatch\n", + __func__); + retval = -EINVAL; + goto exit; + } + + if (fwu->bl_version != fwu->img.bl_version) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Bootloader version mismatch\n", + __func__); + retval = -EINVAL; + goto exit; + } + + retval = fwu_read_flash_status(); + if (retval < 0) + goto exit; + + if (fwu->in_bl_mode) { + fwu->bl_mode_device = true; + dev_info(rmi4_data->pdev->dev.parent, + "%s: Device in bootloader mode\n", + __func__); + } else { + fwu->bl_mode_device = false; + } + + flash_area = fwu_go_nogo(); + + if (flash_area != NONE) { + retval = fwu_enter_flash_prog(); + if (retval < 0) { + rmi4_data->reset_device(rmi4_data, false); + goto exit; + } + } + +#ifdef F51_DISCRETE_FORCE + if (flash_area != NONE && !fwu->bl_mode_device) { + fwu->config_size = fwu->block_size * fwu->blkcount.ui_config; + fwu->config_area = UI_CONFIG_AREA; + + retval = fwu_allocate_read_config_buf(fwu->config_size); + if (retval < 0) { + rmi4_data->reset_device(rmi4_data, false); + goto exit; + } + + retval = fwu_read_f34_blocks(fwu->blkcount.ui_config, + CMD_READ_CONFIG); + if (retval < 0) { + rmi4_data->reset_device(rmi4_data, false); + goto exit; + } + + retval = secure_memcpy(fwu->cal_data, fwu->cal_data_buf_size, + &fwu->read_config_buf[fwu->cal_data_off], + fwu->cal_data_size, fwu->cal_data_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to save calibration data\n", + __func__); + rmi4_data->reset_device(rmi4_data, false); + goto exit; + } + } +#endif + + switch (flash_area) { + case UI_FIRMWARE: + do_rebuild = true; + retval = fwu_do_reflash(); +#ifdef F51_DISCRETE_FORCE + if (retval < 0) + break; + + if (fwu->has_utility_param || fwu->img.contains_utility_param) + break; + + rmi4_data->reset_device(rmi4_data, false); + + if (fwu->bl_mode_device || fwu->in_bl_mode) { + dev_info(rmi4_data->pdev->dev.parent, + "%s: Device in bootloader mode, skipping calibration data restoration\n", + __func__); + break; + } + + retval = fwu_do_restore_f51_cal_data(); +#endif + break; + case UI_CONFIG: + do_rebuild = true; + retval = fwu_check_ui_configuration_size(); + if (retval < 0) + break; + fwu->config_area = UI_CONFIG_AREA; + retval = fwu_erase_configuration(); + if (retval < 0) + break; + retval = fwu_write_ui_configuration(); +#ifdef F51_DISCRETE_FORCE + if (retval < 0) + break; + + if (fwu->has_utility_param) + break; + + retval = fwu_do_restore_f51_cal_data(); +#endif + break; + case NONE: + default: + break; + } + + if (retval < 0) { + do_rebuild = false; + rmi4_data->reset_device(rmi4_data, false); + pr_err("%s: fwu->in_ub_mode = %d\n", __func__, fwu->in_ub_mode); + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do reflash\n", + __func__); + goto exit; + } + + if (fwu->do_lockdown && (fwu->img.lockdown.data != NULL)) { + switch (fwu->bl_version) { + case BL_V5: + case BL_V6: + retval = fwu_do_lockdown_v5v6(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do lockdown\n", + __func__); + } + rmi4_data->reset_device(rmi4_data, false); + break; + case BL_V7: + case BL_V8: + retval = fwu_do_lockdown_v7(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do lockdown\n", + __func__); + } + rmi4_data->reset_device(rmi4_data, false); + break; + default: + break; + } + } + +exit: + if (fw_entry) + release_firmware(fw_entry); + + if (do_rebuild) + rmi4_data->reset_device(rmi4_data, true); + + pr_notice("%s: End of reflash process\n", __func__); + + mutex_unlock(&rmi4_data->rmi4_exp_init_mutex); + + rmi4_data->stay_awake = false; + + return retval; +} + +static int fwu_recovery_check_status(void) +{ + int retval; + unsigned char data_base; + unsigned char status; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + data_base = fwu->f35_fd.data_base_addr; + + retval = synaptics_rmi4_reg_read(rmi4_data, + data_base + F35_ERROR_CODE_OFFSET, + &status, + 1); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read status\n", + __func__); + return retval; + } + + status = status & MASK_5BIT; + + if (status != 0x00) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Recovery mode status = %d\n", + __func__, status); + return -EINVAL; + } + + return 0; +} + +static int fwu_recovery_erase_completion(void) +{ + int retval; + unsigned char data_base; + unsigned char command; + unsigned char status; + unsigned int timeout = F35_ERASE_ALL_WAIT_MS / 20; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + data_base = fwu->f35_fd.data_base_addr; + + do { + command = 0x01; + retval = synaptics_rmi4_reg_write(rmi4_data, + fwu->f35_fd.cmd_base_addr, + &command, + sizeof(command)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to issue command\n", + __func__); + return retval; + } + + do { + retval = synaptics_rmi4_reg_read(rmi4_data, + fwu->f35_fd.cmd_base_addr, + &command, + sizeof(command)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read command status\n", + __func__); + return retval; + } + + if ((command & 0x01) == 0x00) + break; + + msleep(20); + timeout--; + } while (timeout > 0); + + if (timeout == 0) + goto exit; + + retval = synaptics_rmi4_reg_read(rmi4_data, + data_base + F35_FLASH_STATUS_OFFSET, + &status, + sizeof(status)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read flash status\n", + __func__); + return retval; + } + + if ((status & 0x01) == 0x00) + break; + + msleep(20); + timeout--; + } while (timeout > 0); + +exit: + if (timeout == 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Timed out waiting for flash erase completion\n", + __func__); + return -ETIMEDOUT; + } + + return 0; +} + +static int fwu_recovery_erase_all(void) +{ + int retval; + unsigned char ctrl_base; + unsigned char command = CMD_F35_ERASE_ALL; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + ctrl_base = fwu->f35_fd.ctrl_base_addr; + + retval = synaptics_rmi4_reg_write(rmi4_data, + ctrl_base + F35_CHUNK_COMMAND_OFFSET, + &command, + sizeof(command)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to issue erase all command\n", + __func__); + return retval; + } + + if (fwu->f35_fd.cmd_base_addr) { + retval = fwu_recovery_erase_completion(); + if (retval < 0) + return retval; + } else { + msleep(F35_ERASE_ALL_WAIT_MS); + } + + retval = fwu_recovery_check_status(); + if (retval < 0) + return retval; + + return 0; +} + +static int fwu_recovery_write_chunk(void) +{ + int retval; + unsigned char ctrl_base; + unsigned char chunk_number[] = {0, 0}; + unsigned char chunk_spare; + unsigned char chunk_size; + unsigned char buf[F35_CHUNK_SIZE + 1]; + unsigned short chunk; + unsigned short chunk_total; + unsigned short bytes_written = 0; + unsigned char *chunk_ptr = (unsigned char *)fwu->image; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + ctrl_base = fwu->f35_fd.ctrl_base_addr; + + retval = synaptics_rmi4_reg_write(rmi4_data, + ctrl_base + F35_CHUNK_NUM_LSB_OFFSET, + chunk_number, + sizeof(chunk_number)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write chunk number\n", + __func__); + return retval; + } + + buf[sizeof(buf) - 1] = CMD_F35_WRITE_CHUNK; + + chunk_total = fwu->image_size / F35_CHUNK_SIZE; + chunk_spare = fwu->image_size % F35_CHUNK_SIZE; + if (chunk_spare) + chunk_total++; + + for (chunk = 0; chunk < chunk_total; chunk++) { + if (chunk_spare && chunk == chunk_total - 1) + chunk_size = chunk_spare; + else + chunk_size = F35_CHUNK_SIZE; + + memset(buf, 0x00, F35_CHUNK_SIZE); + secure_memcpy(buf, sizeof(buf), chunk_ptr, + fwu->image_size - bytes_written, + chunk_size); + + retval = synaptics_rmi4_reg_write(rmi4_data, + ctrl_base + F35_CHUNK_DATA_OFFSET, + buf, + sizeof(buf)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write chunk data (chunk %d)\n", + __func__, chunk); + return retval; + } + chunk_ptr += chunk_size; + bytes_written += chunk_size; + } + + retval = fwu_recovery_check_status(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write chunk data\n", + __func__); + return retval; + } + + return 0; +} + +static int fwu_recovery_reset(void) +{ + int retval; + unsigned char ctrl_base; + unsigned char command = CMD_F35_RESET; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + ctrl_base = fwu->f35_fd.ctrl_base_addr; + + retval = synaptics_rmi4_reg_write(rmi4_data, + ctrl_base + F35_CHUNK_COMMAND_OFFSET, + &command, + sizeof(command)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to issue reset command\n", + __func__); + return retval; + } + + msleep(F35_RESET_WAIT_MS); + + return 0; +} + +static int fwu_start_recovery(void) +{ + int retval; + const struct firmware *fw_entry = NULL; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (rmi4_data->sensor_sleep) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Sensor sleeping\n", + __func__); + return -ENODEV; + } + + rmi4_data->stay_awake = true; + + mutex_lock(&rmi4_data->rmi4_exp_init_mutex); + + pr_notice("%s: Start of recovery process\n", __func__); + + if (fwu->image == NULL) { + retval = secure_memcpy(fwu->image_name, MAX_IMAGE_NAME_LEN, + FW_IHEX_NAME, sizeof(FW_IHEX_NAME), + sizeof(FW_IHEX_NAME)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy ihex file name\n", + __func__); + goto exit; + } + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Requesting firmware ihex %s\n", + __func__, fwu->image_name); + + retval = request_firmware(&fw_entry, fwu->image_name, + rmi4_data->pdev->dev.parent); + if (retval != 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Firmware ihex %s not available\n", + __func__, fwu->image_name); + retval = -EINVAL; + goto exit; + } + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Firmware image size = %d\n", + __func__, (unsigned int)fw_entry->size); + + fwu->image = fw_entry->data; + fwu->image_size = fw_entry->size; + } + + retval = rmi4_data->irq_enable(rmi4_data, false, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to disable interrupt\n", + __func__); + goto exit; + } + + retval = fwu_recovery_erase_all(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do erase all in recovery mode\n", + __func__); + goto exit; + } + + pr_notice("%s: External flash erased\n", __func__); + + retval = fwu_recovery_write_chunk(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write chunk data in recovery mode\n", + __func__); + goto exit; + } + + pr_notice("%s: Chunk data programmed\n", __func__); + + retval = fwu_recovery_reset(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to reset device in recovery mode\n", + __func__); + goto exit; + } + + pr_notice("%s: Recovery mode reset issued\n", __func__); + + rmi4_data->reset_device(rmi4_data, true); + + retval = 0; + +exit: + if (fw_entry) + release_firmware(fw_entry); + + pr_notice("%s: End of recovery process\n", __func__); + + mutex_unlock(&rmi4_data->rmi4_exp_init_mutex); + + rmi4_data->stay_awake = false; + + return retval; +} + +int synaptics_fw_updater_force(const unsigned char *fw_data) +{ + int retval; + + if (!fwu) + return -ENODEV; + + if (!fwu->initialized) + return -ENODEV; + + if (fwu->in_ub_mode) + return -ENODEV; + + fwu->rmi4_data->fw_updating = true; + fwu->image = fw_data; + + retval = fwu_start_reflash(); + + fwu->image = NULL; + fwu->rmi4_data->fw_updating = false; + + return retval; +} +EXPORT_SYMBOL(synaptics_fw_updater_force); + +#ifdef DO_STARTUP_FW_UPDATE +static void fwu_startup_fw_update_work(struct work_struct *work) +{ + static unsigned char do_once = 1; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + +#ifdef WAIT_FOR_FB_READY + unsigned int timeout; +#endif + if (!do_once) + return; + do_once = 0; +#ifdef WAIT_FOR_FB_READY + timeout = FB_READY_TIMEOUT_S * 1000 / FB_READY_WAIT_MS + 1; + + while (!rmi4_data->fb_ready) { + msleep(FB_READY_WAIT_MS); + timeout--; + if (timeout == 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Timed out waiting for FB ready\n", + __func__); + return; + } + } +#endif + + synaptics_fw_updater_force(NULL); + + if (rmi4_data->chip_is_tddi) + firmware_force_update(rmi4_data); + + return; +} +#endif + +static ssize_t fwu_sysfs_show_image(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (count < fwu->config_size) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Not enough space (%ld bytes) in buffer\n", + __func__, count); + return -EINVAL; + } + + retval = secure_memcpy(buf, count, fwu->read_config_buf, + fwu->read_config_buf_size, fwu->config_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy config data\n", + __func__); + return retval; + } + + return fwu->config_size; +} + +static ssize_t fwu_sysfs_store_image(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + retval = secure_memcpy(&fwu->ext_data_source[fwu->data_pos], + fwu->image_size - fwu->data_pos, buf, count, count); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy image data\n", + __func__); + return retval; + } + + fwu->data_pos += count; + + return count; +} + +static ssize_t fwu_sysfs_do_recovery_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned int input; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (sscanf(buf, "%u", &input) != 1) { + retval = -EINVAL; + goto exit; + } + + retval = fwu_scan_pdt(); + if (retval < 0) + goto exit; + + pr_err("%s: fwu->in_ub_mode = %d\n", __func__, fwu->in_ub_mode); + + if (!fwu->in_ub_mode) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Not in microbootloader mode\n", + __func__); + retval = -EINVAL; + goto exit; + } + + if (!fwu->ext_data_source) + return -EINVAL; + else + fwu->image = fwu->ext_data_source; + + retval = fwu_start_recovery(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do recovery\n", + __func__); + goto exit; + } + + retval = count; + +exit: + kfree(fwu->ext_data_source); + fwu->ext_data_source = NULL; + fwu->image = NULL; + return retval; +} + +static ssize_t fwu_sysfs_do_reflash_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned int input; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (sscanf(buf, "%u", &input) != 1) { + retval = -EINVAL; + goto exit; + } + + if (fwu->in_ub_mode) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: In microbootloader mode\n", + __func__); + retval = -EINVAL; + goto exit; + } + + if (!fwu->ext_data_source) + return -EINVAL; + else + fwu->image = fwu->ext_data_source; + + if (input & LOCKDOWN) { + fwu->do_lockdown = true; + input &= ~LOCKDOWN; + } + + if ((input != NORMAL) && (input != FORCE)) { + retval = -EINVAL; + goto exit; + } + + if (input == FORCE) + fwu->force_update = true; + + retval = synaptics_fw_updater_force(fwu->image); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do reflash\n", + __func__); + goto exit; + } + + retval = count; + +exit: + kfree(fwu->ext_data_source); + fwu->ext_data_source = NULL; + fwu->image = NULL; + fwu->force_update = FORCE_UPDATE; + fwu->do_lockdown = DO_LOCKDOWN; + return retval; +} + +static ssize_t fwu_sysfs_write_config_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned int input; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (sscanf(buf, "%u", &input) != 1) { + retval = -EINVAL; + goto exit; + } + + if (input != 1) { + retval = -EINVAL; + goto exit; + } + + if (fwu->in_ub_mode) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: In microbootloader mode\n", + __func__); + retval = -EINVAL; + goto exit; + } + + if (!fwu->ext_data_source) + return -EINVAL; + else + fwu->image = fwu->ext_data_source; + + retval = fwu_start_write_config(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write config\n", + __func__); + goto exit; + } + + retval = count; + +exit: + kfree(fwu->ext_data_source); + fwu->ext_data_source = NULL; + fwu->image = NULL; + return retval; +} + +static ssize_t fwu_sysfs_read_config_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned int input; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + if (input != 1) + return -EINVAL; + + if (fwu->in_ub_mode) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: In microbootloader mode\n", + __func__); + return -EINVAL; + } + + retval = fwu_do_read_config(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read config\n", + __func__); + return retval; + } + + return count; +} + +static ssize_t fwu_sysfs_config_area_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long config_area; + + retval = sstrtoul(buf, 10, &config_area); + if (retval) + return retval; + + fwu->config_area = config_area; + + return count; +} + +static ssize_t fwu_sysfs_image_name_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + retval = secure_memcpy(fwu->image_name, MAX_IMAGE_NAME_LEN, + buf, count, count); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy image file name\n", + __func__); + return retval; + } + + return count; +} + +static ssize_t fwu_sysfs_image_size_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long size; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + retval = sstrtoul(buf, 10, &size); + if (retval) + return retval; + + fwu->image_size = size; + fwu->data_pos = 0; + + kfree(fwu->ext_data_source); + fwu->ext_data_source = kzalloc(fwu->image_size, GFP_KERNEL); + if (!fwu->ext_data_source) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for image data\n", + __func__); + return -ENOMEM; + } + + return count; +} + +static ssize_t fwu_sysfs_block_size_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", fwu->block_size); +} + +static ssize_t fwu_sysfs_firmware_block_count_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", fwu->blkcount.ui_firmware); +} + +static ssize_t fwu_sysfs_configuration_block_count_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", fwu->blkcount.ui_config); +} + +static ssize_t fwu_sysfs_disp_config_block_count_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", fwu->blkcount.dp_config); +} + +static ssize_t fwu_sysfs_perm_config_block_count_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", fwu->blkcount.pm_config); +} + +static ssize_t fwu_sysfs_bl_config_block_count_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", fwu->blkcount.bl_config); +} + +static ssize_t fwu_sysfs_guest_code_block_count_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", fwu->blkcount.guest_code); +} + +static ssize_t fwu_sysfs_write_guest_code_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned int input; + struct synaptics_rmi4_data *rmi4_data = fwu->rmi4_data; + + if (sscanf(buf, "%u", &input) != 1) { + retval = -EINVAL; + goto exit; + } + + if (input != 1) { + retval = -EINVAL; + goto exit; + } + + if (fwu->in_ub_mode) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: In microbootloader mode\n", + __func__); + retval = -EINVAL; + goto exit; + } + + if (!fwu->ext_data_source) + return -EINVAL; + else + fwu->image = fwu->ext_data_source; + + retval = fwu_start_write_guest_code(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write guest code\n", + __func__); + goto exit; + } + + retval = count; + +exit: + kfree(fwu->ext_data_source); + fwu->ext_data_source = NULL; + fwu->image = NULL; + return retval; +} + +static void synaptics_rmi4_fwu_attn(struct synaptics_rmi4_data *rmi4_data, + unsigned char intr_mask) +{ + if (!fwu) + return; + + if (fwu->intr_mask & intr_mask) + fwu_read_flash_status(); + + return; +} + +static void firmware_force_update(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + const struct firmware *fw_entry = NULL; + const struct synaptics_dsx_board_data *bdata = rmi4_data->hw_if->board_data; + if (!fwu->in_ub_mode) + return; + + retval = request_firmware(&fw_entry, bdata->backup_fw_name, + rmi4_data->pdev->dev.parent); + if (retval != 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Firmware image %s not available\n", + __func__, fwu->image_name); + return; + } + + fwu->image = fw_entry->data; + fwu->image_size = fw_entry->size; + + retval = fwu_start_recovery(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do recovery\n", + __func__); + release_firmware(fw_entry); + return; + } + + release_firmware(fw_entry); + + return; +} + +static int synaptics_rmi4_fwu_init(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + unsigned char attr_count; + struct pdt_properties pdt_props; + + if (fwu) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Handle already exists\n", + __func__); + return 0; + } + + fwu = kzalloc(sizeof(*fwu), GFP_KERNEL); + if (!fwu) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for fwu\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + fwu->image_name = kzalloc(MAX_IMAGE_NAME_LEN, GFP_KERNEL); + if (!fwu->image_name) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for image name\n", + __func__); + retval = -ENOMEM; + goto exit_free_fwu; + } + + fwu->rmi4_data = rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + PDT_PROPS, + pdt_props.data, + sizeof(pdt_props.data)); + if (retval < 0) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Failed to read PDT properties, assuming 0x00\n", + __func__); + } else if (pdt_props.has_bsr) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Reflash for LTS not currently supported\n", + __func__); + retval = -ENODEV; + goto exit_free_mem; + } + + retval = fwu_scan_pdt(); + if (retval < 0) + goto exit_free_mem; + + pr_err("%s: fwu->in_ub_mode = %d\n", __func__, fwu->in_ub_mode); + + if (!fwu->in_ub_mode) { + retval = fwu_read_f34_queries(); + if (retval < 0) + goto exit_free_mem; + + retval = fwu_get_device_config_id(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read device config ID\n", + __func__); + goto exit_free_mem; + } + } + + fwu->force_update = FORCE_UPDATE; + fwu->do_lockdown = DO_LOCKDOWN; + fwu->initialized = true; + + retval = sysfs_create_bin_file(&rmi4_data->input_dev->dev.kobj, + &dev_attr_data); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create sysfs bin file\n", + __func__); + goto exit_free_mem; + } + + for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) { + retval = sysfs_create_file(&rmi4_data->input_dev->dev.kobj, + &attrs[attr_count].attr); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create sysfs attributes\n", + __func__); + retval = -ENODEV; + goto exit_remove_attrs; + } + } + +#ifdef DO_STARTUP_FW_UPDATE + fwu->fwu_workqueue = create_singlethread_workqueue("fwu_workqueue"); + INIT_WORK(&fwu->fwu_work, fwu_startup_fw_update_work); + queue_work(fwu->fwu_workqueue, + &fwu->fwu_work); +#endif + +#ifdef F51_DISCRETE_FORCE + fwu_read_flash_status(); + if (!fwu->in_bl_mode) { + retval = fwu_f51_force_data_init(); + if (retval < 0) + goto exit_remove_attrs; + } +#endif + + return 0; + +exit_remove_attrs: + for (attr_count--; attr_count >= 0; attr_count--) { + sysfs_remove_file(&rmi4_data->input_dev->dev.kobj, + &attrs[attr_count].attr); + } + + sysfs_remove_bin_file(&rmi4_data->input_dev->dev.kobj, &dev_attr_data); + +exit_free_mem: + kfree(fwu->image_name); + +exit_free_fwu: + kfree(fwu); + fwu = NULL; + +exit: + return retval; +} + +static void synaptics_rmi4_fwu_remove(struct synaptics_rmi4_data *rmi4_data) +{ + unsigned char attr_count; + + if (!fwu) + goto exit; + +#ifdef DO_STARTUP_FW_UPDATE + cancel_work_sync(&fwu->fwu_work); + flush_workqueue(fwu->fwu_workqueue); + destroy_workqueue(fwu->fwu_workqueue); +#endif + + for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) { + sysfs_remove_file(&rmi4_data->input_dev->dev.kobj, + &attrs[attr_count].attr); + } + + sysfs_remove_bin_file(&rmi4_data->input_dev->dev.kobj, &dev_attr_data); + +#ifdef F51_DISCRETE_FORCE + kfree(fwu->cal_data); +#endif + kfree(fwu->read_config_buf); + kfree(fwu->image_name); + kfree(fwu); + fwu = NULL; + +exit: + complete(&fwu_remove_complete_force); + + return; +} + +static void synaptics_rmi4_fwu_reset(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + + if (!fwu) { + synaptics_rmi4_fwu_init(rmi4_data); + return; + } + + retval = fwu_scan_pdt(); + if (retval < 0) + return; + + pr_err("%s: fwu->in_ub_mode = %d\n", __func__, fwu->in_ub_mode); + + if (!fwu->in_ub_mode) + fwu_read_f34_queries(); + +#ifdef F51_DISCRETE_FORCE + fwu_read_flash_status(); + if (!fwu->in_bl_mode) + fwu_f51_force_data_init(); +#endif + + return; +} + +#if 0 +static void synaptics_rmi4_fwu_resume(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + + if (!fwu) + return; + + retval = fwu_scan_pdt(); + if (retval < 0) + return; + + pr_err("%s: fwu->in_ub_mode = %d\n", __func__, fwu->in_ub_mode); + + if (!fwu->in_ub_mode) + fwu_read_f34_queries(); + + return; +} +#endif + +static struct synaptics_rmi4_exp_fn fwu_module = { + .fn_type = RMI_FW_UPDATER, + .init = synaptics_rmi4_fwu_init, + .remove = synaptics_rmi4_fwu_remove, + .reset = synaptics_rmi4_fwu_reset, + .reinit = NULL, + .early_suspend = NULL, + .suspend = NULL, + .resume = NULL, + .late_resume = NULL, + .attn = synaptics_rmi4_fwu_attn, +}; + +static int __init rmi4_fw_update_module_init(void) +{ + synaptics_rmi4_new_function_force(&fwu_module, true); + + return 0; +} + +static void __exit rmi4_fw_update_module_exit(void) +{ + synaptics_rmi4_new_function_force(&fwu_module, false); + + wait_for_completion(&fwu_remove_complete_force); + + return; +} + +module_init(rmi4_fw_update_module_init); +module_exit(rmi4_fw_update_module_exit); + +MODULE_AUTHOR("Synaptics, Inc."); +MODULE_DESCRIPTION("Synaptics DSX FW Update Module"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_gesture.c b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_gesture.c new file mode 100644 index 000000000000..d37f110fd13c --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_gesture.c @@ -0,0 +1,2305 @@ +/* + * Synaptics DSX touchscreen driver + * + * Copyright (C) 2012-2015 Synaptics Incorporated. All rights reserved. + * + * Copyright (C) 2012 Alexandra Chin <alexandra.chin@tw.synaptics.com> + * Copyright (C) 2012 Scott Lin <scott.lin@tw.synaptics.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND SYNAPTICS + * EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, INCLUDING ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, + * AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS. + * IN NO EVENT SHALL SYNAPTICS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION + * WITH THE USE OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED + * AND BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF COMPETENT JURISDICTION DOES + * NOT PERMIT THE DISCLAIMER OF DIRECT DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' + * TOTAL CUMULATIVE LIABILITY TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. + * DOLLARS. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/interrupt.h> +#include <linux/delay.h> +#include <linux/input.h> +#include <linux/platform_device.h> +#include <linux/input/synaptics_dsx.h> +#include "synaptics_dsx_core.h" + +#define GESTURE_PHYS_NAME "synaptics_dsx/gesture" + +#define TUNING_SYSFS_DIR_NAME "tuning" + +#define STORE_GESTURES +#ifdef STORE_GESTURES +#define GESTURES_TO_STORE 10 +#endif + +#define CTRL23_FINGER_REPORT_ENABLE_BIT 0 +#define CTRL27_UDG_ENABLE_BIT 4 +#define WAKEUP_GESTURE_MODE 0x02 + +static ssize_t udg_sysfs_engine_enable_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t udg_sysfs_detection_enable_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t udg_sysfs_detection_score_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_detection_index_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_registration_enable_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t udg_sysfs_registration_begin_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t udg_sysfs_registration_status_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_template_size_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_template_max_index_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_template_detection_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_template_index_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t udg_sysfs_template_valid_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_template_valid_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t udg_sysfs_template_clear_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t udg_sysfs_trace_size_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_template_data_show(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count); + +static ssize_t udg_sysfs_template_data_store(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count); + +static ssize_t udg_sysfs_trace_data_show(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count); + +static ssize_t udg_sysfs_template_displacement_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_template_displacement_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t udg_sysfs_rotation_invariance_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_rotation_invariance_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t udg_sysfs_scale_invariance_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_scale_invariance_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t udg_sysfs_threshold_factor_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_threshold_factor_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t udg_sysfs_match_metric_threshold_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_match_metric_threshold_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t udg_sysfs_max_inter_stroke_time_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t udg_sysfs_max_inter_stroke_time_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static int udg_read_tuning_params(void); + +static int udg_write_tuning_params(void); + +static int udg_detection_enable(bool enable); + +static int udg_engine_enable(bool enable); + +static int udg_set_index(unsigned char index); + +#ifdef STORE_GESTURES +static int udg_read_valid_data(void); +static int udg_write_valid_data(void); +static int udg_read_template_data(unsigned char index); +static int udg_write_template_data(void); +#endif + +enum gesture_type { + DETECTION = 0x0f, + REGISTRATION = 0x10, +}; + +struct udg_tuning { + union { + struct { + unsigned char maximum_number_of_templates; + unsigned char template_size; + unsigned char template_disp_lsb; + unsigned char template_disp_msb; + unsigned char rotation_inv_lsb; + unsigned char rotation_inv_msb; + unsigned char scale_inv_lsb; + unsigned char scale_inv_msb; + unsigned char thres_factor_lsb; + unsigned char thres_factor_msb; + unsigned char metric_thres_lsb; + unsigned char metric_thres_msb; + unsigned char inter_stroke_lsb; + unsigned char inter_stroke_msb; + } __packed; + unsigned char data[14]; + }; +}; + +struct udg_addr { + unsigned short data_4; + unsigned short ctrl_18; + unsigned short ctrl_20; + unsigned short ctrl_23; + unsigned short ctrl_27; + unsigned short ctrl_41; + unsigned short trace_x; + unsigned short trace_y; + unsigned short trace_segment; + unsigned short template_helper; + unsigned short template_data; + unsigned short template_flags; +}; + +struct synaptics_rmi4_f12_query_0 { + union { + struct { + struct { + unsigned char has_register_descriptors:1; + unsigned char has_closed_cover:1; + unsigned char has_fast_glove_detect:1; + unsigned char has_dribble:1; + unsigned char has_4p4_jitter_filter_strength:1; + unsigned char f12_query0_s0_b5__7:3; + } __packed; + struct { + unsigned char max_num_templates:4; + unsigned char f12_query0_s1_b4__7:4; + unsigned char template_size_lsb; + unsigned char template_size_msb; + } __packed; + }; + unsigned char data[4]; + }; +}; + +struct synaptics_rmi4_f12_query_5 { + union { + struct { + unsigned char size_of_query6; + struct { + unsigned char ctrl0_is_present:1; + unsigned char ctrl1_is_present:1; + unsigned char ctrl2_is_present:1; + unsigned char ctrl3_is_present:1; + unsigned char ctrl4_is_present:1; + unsigned char ctrl5_is_present:1; + unsigned char ctrl6_is_present:1; + unsigned char ctrl7_is_present:1; + } __packed; + struct { + unsigned char ctrl8_is_present:1; + unsigned char ctrl9_is_present:1; + unsigned char ctrl10_is_present:1; + unsigned char ctrl11_is_present:1; + unsigned char ctrl12_is_present:1; + unsigned char ctrl13_is_present:1; + unsigned char ctrl14_is_present:1; + unsigned char ctrl15_is_present:1; + } __packed; + struct { + unsigned char ctrl16_is_present:1; + unsigned char ctrl17_is_present:1; + unsigned char ctrl18_is_present:1; + unsigned char ctrl19_is_present:1; + unsigned char ctrl20_is_present:1; + unsigned char ctrl21_is_present:1; + unsigned char ctrl22_is_present:1; + unsigned char ctrl23_is_present:1; + } __packed; + struct { + unsigned char ctrl24_is_present:1; + unsigned char ctrl25_is_present:1; + unsigned char ctrl26_is_present:1; + unsigned char ctrl27_is_present:1; + unsigned char ctrl28_is_present:1; + unsigned char ctrl29_is_present:1; + unsigned char ctrl30_is_present:1; + unsigned char ctrl31_is_present:1; + } __packed; + struct { + unsigned char ctrl32_is_present:1; + unsigned char ctrl33_is_present:1; + unsigned char ctrl34_is_present:1; + unsigned char ctrl35_is_present:1; + unsigned char ctrl36_is_present:1; + unsigned char ctrl37_is_present:1; + unsigned char ctrl38_is_present:1; + unsigned char ctrl39_is_present:1; + } __packed; + struct { + unsigned char ctrl40_is_present:1; + unsigned char ctrl41_is_present:1; + unsigned char ctrl42_is_present:1; + unsigned char ctrl43_is_present:1; + unsigned char ctrl44_is_present:1; + unsigned char ctrl45_is_present:1; + unsigned char ctrl46_is_present:1; + unsigned char ctrl47_is_present:1; + } __packed; + }; + unsigned char data[7]; + }; +}; + +struct synaptics_rmi4_f12_query_8 { + union { + struct { + unsigned char size_of_query9; + struct { + unsigned char data0_is_present:1; + unsigned char data1_is_present:1; + unsigned char data2_is_present:1; + unsigned char data3_is_present:1; + unsigned char data4_is_present:1; + unsigned char data5_is_present:1; + unsigned char data6_is_present:1; + unsigned char data7_is_present:1; + } __packed; + struct { + unsigned char data8_is_present:1; + unsigned char data9_is_present:1; + unsigned char data10_is_present:1; + unsigned char data11_is_present:1; + unsigned char data12_is_present:1; + unsigned char data13_is_present:1; + unsigned char data14_is_present:1; + unsigned char data15_is_present:1; + } __packed; + struct { + unsigned char data16_is_present:1; + unsigned char data17_is_present:1; + unsigned char data18_is_present:1; + unsigned char data19_is_present:1; + unsigned char data20_is_present:1; + unsigned char data21_is_present:1; + unsigned char data22_is_present:1; + unsigned char data23_is_present:1; + } __packed; + }; + unsigned char data[4]; + }; +}; + +struct synaptics_rmi4_f12_control_41 { + union { + struct { + unsigned char enable_registration:1; + unsigned char template_index:4; + unsigned char begin:1; + unsigned char f12_ctrl41_b6__7:2; + } __packed; + unsigned char data[1]; + }; +}; + +struct synaptics_rmi4_udg_handle { + atomic_t attn_event; + unsigned char intr_mask; + unsigned char report_flags; + unsigned char object_type_enable1; + unsigned char object_type_enable2; + unsigned char trace_size; + unsigned char template_index; + unsigned char max_num_templates; + unsigned char detection_score; + unsigned char detection_index; + unsigned char detection_status; + unsigned char registration_status; + unsigned char *ctrl_buf; + unsigned char *trace_data_buf; + unsigned char *template_data_buf; +#ifdef STORE_GESTURES + unsigned char gestures_to_store; + unsigned char *storage_buf; + unsigned char valid_buf[2]; +#endif + unsigned short trace_data_buf_size; + unsigned short template_size; + unsigned short template_data_size; + unsigned short query_base_addr; + unsigned short control_base_addr; + unsigned short data_base_addr; + unsigned short command_base_addr; + unsigned short ctrl_18_sub10_off; + unsigned short ctrl_20_sub1_off; + unsigned short ctrl_23_sub3_off; + unsigned short ctrl_27_sub5_off; + struct input_dev *udg_dev; + struct kobject *tuning_dir; + struct udg_addr addr; + struct udg_tuning tuning; + struct synaptics_rmi4_data *rmi4_data; +}; + +static struct device_attribute attrs[] = { + __ATTR(engine_enable, S_IWUSR, + synaptics_rmi4_show_error, + udg_sysfs_engine_enable_store), + __ATTR(detection_enable, S_IWUSR, + synaptics_rmi4_show_error, + udg_sysfs_detection_enable_store), + __ATTR(detection_score, S_IRUGO, + udg_sysfs_detection_score_show, + synaptics_rmi4_store_error), + __ATTR(detection_index, S_IRUGO, + udg_sysfs_detection_index_show, + synaptics_rmi4_store_error), + __ATTR(registration_enable, S_IWUSR, + synaptics_rmi4_show_error, + udg_sysfs_registration_enable_store), + __ATTR(registration_begin, S_IWUSR, + synaptics_rmi4_show_error, + udg_sysfs_registration_begin_store), + __ATTR(registration_status, S_IRUGO, + udg_sysfs_registration_status_show, + synaptics_rmi4_store_error), + __ATTR(template_size, S_IRUGO, + udg_sysfs_template_size_show, + synaptics_rmi4_store_error), + __ATTR(template_max_index, S_IRUGO, + udg_sysfs_template_max_index_show, + synaptics_rmi4_store_error), + __ATTR(template_detection, S_IRUGO, + udg_sysfs_template_detection_show, + synaptics_rmi4_store_error), + __ATTR(template_index, S_IWUSR, + synaptics_rmi4_show_error, + udg_sysfs_template_index_store), + __ATTR(template_valid, (S_IRUGO | S_IWUSR), + udg_sysfs_template_valid_show, + udg_sysfs_template_valid_store), + __ATTR(template_clear, S_IWUSR, + synaptics_rmi4_show_error, + udg_sysfs_template_clear_store), + __ATTR(trace_size, S_IRUGO, + udg_sysfs_trace_size_show, + synaptics_rmi4_store_error), +}; + +static struct bin_attribute template_data = { + .attr = { + .name = "template_data", + .mode = (S_IRUGO | S_IWUSR), + }, + .size = 0, + .read = udg_sysfs_template_data_show, + .write = udg_sysfs_template_data_store, +}; + +static struct bin_attribute trace_data = { + .attr = { + .name = "trace_data", + .mode = S_IRUGO, + }, + .size = 0, + .read = udg_sysfs_trace_data_show, + .write = NULL, +}; + +static struct device_attribute params[] = { + __ATTR(template_displacement, (S_IRUGO | S_IWUSR), + udg_sysfs_template_displacement_show, + udg_sysfs_template_displacement_store), + __ATTR(rotation_invariance, (S_IRUGO | S_IWUSR), + udg_sysfs_rotation_invariance_show, + udg_sysfs_rotation_invariance_store), + __ATTR(scale_invariance, (S_IRUGO | S_IWUSR), + udg_sysfs_scale_invariance_show, + udg_sysfs_scale_invariance_store), + __ATTR(threshold_factor, (S_IRUGO | S_IWUSR), + udg_sysfs_threshold_factor_show, + udg_sysfs_threshold_factor_store), + __ATTR(match_metric_threshold, (S_IRUGO | S_IWUSR), + udg_sysfs_match_metric_threshold_show, + udg_sysfs_match_metric_threshold_store), + __ATTR(max_inter_stroke_time, (S_IRUGO | S_IWUSR), + udg_sysfs_max_inter_stroke_time_show, + udg_sysfs_max_inter_stroke_time_store), +}; + +static struct synaptics_rmi4_udg_handle *udg; + +static unsigned char ctrl_18_sub_size[] = {10, 10, 10, 2, 3, 4, 3, 3, 1, 1}; +static unsigned char ctrl_20_sub_size[] = {2}; +static unsigned char ctrl_23_sub_size[] = {1, 1, 1}; +static unsigned char ctrl_27_sub_size[] = {1, 5, 2, 1, 7}; + +DECLARE_COMPLETION(udg_remove_complete); + +static ssize_t udg_sysfs_engine_enable_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + bool enable; + unsigned int input; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + if (input == 1) + enable = true; + else if (input == 0) + enable = false; + else + return -EINVAL; + + retval = udg_engine_enable(enable); + if (retval < 0) + return retval; + + return count; +} + +static ssize_t udg_sysfs_detection_enable_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + bool enable; + unsigned int input; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + if (input == 1) + enable = true; + else if (input == 0) + enable = false; + else + return -EINVAL; + + udg->detection_status = 0; + + retval = udg_detection_enable(enable); + if (retval < 0) + return retval; + + return count; +} + +static ssize_t udg_sysfs_detection_score_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", udg->detection_score); +} + +static ssize_t udg_sysfs_detection_index_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", udg->detection_index); +} + +static ssize_t udg_sysfs_registration_enable_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + bool enable; + unsigned int input; + struct synaptics_rmi4_f12_control_41 control_41; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + if (input == 1) + enable = true; + else if (input == 0) + enable = false; + else + return -EINVAL; + + if (enable) { + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.ctrl_23, + udg->ctrl_buf, + udg->ctrl_23_sub3_off + 1); + if (retval < 0) + return retval; + + udg->ctrl_buf[0] = 0; + udg->ctrl_buf[0] |= (1 << CTRL23_FINGER_REPORT_ENABLE_BIT); + if (udg->ctrl_23_sub3_off) + udg->ctrl_buf[udg->ctrl_23_sub3_off] = 0; + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.ctrl_23, + udg->ctrl_buf, + udg->ctrl_23_sub3_off + 1); + if (retval < 0) + return retval; + } else { + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.ctrl_23, + udg->ctrl_buf, + udg->ctrl_23_sub3_off + 1); + if (retval < 0) + return retval; + + udg->ctrl_buf[0] = udg->object_type_enable1; + if (udg->ctrl_23_sub3_off) { + udg->ctrl_buf[udg->ctrl_23_sub3_off] = + udg->object_type_enable2; + } + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.ctrl_23, + udg->ctrl_buf, + udg->ctrl_23_sub3_off + 1); + if (retval < 0) + return retval; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.ctrl_41, + control_41.data, + sizeof(control_41.data)); + if (retval < 0) + return retval; + + control_41.enable_registration = enable ? 1 : 0; + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.ctrl_41, + control_41.data, + sizeof(control_41.data)); + if (retval < 0) + return retval; + + return count; +} + +static ssize_t udg_sysfs_registration_begin_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + bool begin; + unsigned int input; + struct synaptics_rmi4_f12_control_41 control_41; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + if (input == 1) + begin = true; + else if (input == 0) + begin = false; + else + return -EINVAL; + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.ctrl_41, + control_41.data, + sizeof(control_41.data)); + if (retval < 0) + return retval; + + control_41.begin = begin ? 1 : 0; + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.ctrl_41, + control_41.data, + sizeof(control_41.data)); + if (retval < 0) + return retval; + + return count; +} + +static ssize_t udg_sysfs_registration_status_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "0x%02x\n", udg->registration_status); +} + +static ssize_t udg_sysfs_template_size_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", udg->template_size); +} + +static ssize_t udg_sysfs_template_max_index_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", udg->max_num_templates - 1); +} + +static ssize_t udg_sysfs_template_detection_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int retval; + int attn_event; + unsigned char detection_status; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + attn_event = atomic_read(&udg->attn_event); + atomic_set(&udg->attn_event, 0); + + if (attn_event == 0) + return snprintf(buf, PAGE_SIZE, "0\n"); + + if (udg->detection_status == 0) { + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.data_4, + rmi4_data->gesture_detection, + sizeof(rmi4_data->gesture_detection)); + if (retval < 0) + return retval; + + udg->detection_status = rmi4_data->gesture_detection[0]; + } + + detection_status = udg->detection_status; + udg->detection_status = 0; + + switch (detection_status) { + case DETECTION: + udg->detection_score = rmi4_data->gesture_detection[1]; + udg->detection_index = rmi4_data->gesture_detection[4]; + udg->trace_size = rmi4_data->gesture_detection[3]; + break; + case REGISTRATION: + udg->registration_status = rmi4_data->gesture_detection[1]; + udg->trace_size = rmi4_data->gesture_detection[3]; + break; + default: + return snprintf(buf, PAGE_SIZE, "0\n"); + } + + return snprintf(buf, PAGE_SIZE, "0x%02x\n", detection_status); +} + +static ssize_t udg_sysfs_template_index_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long index; + + retval = sstrtoul(buf, 10, &index); + if (retval) + return retval; + + retval = udg_set_index((unsigned char)index); + if (retval < 0) + return retval; + + return count; +} + +static ssize_t udg_sysfs_template_valid_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int retval; + unsigned char valid; + unsigned char offset; + unsigned char byte_num; + unsigned char template_flags[2]; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + byte_num = udg->template_index / 8; + offset = udg->template_index % 8; + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.template_flags, + template_flags, + sizeof(template_flags)); + if (retval < 0) + return retval; + + valid = (template_flags[byte_num] & (1 << offset)) >> offset; + + return snprintf(buf, PAGE_SIZE, "%u\n", valid); +} + +static ssize_t udg_sysfs_template_valid_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long valid; + unsigned char offset; + unsigned char byte_num; + unsigned char template_flags[2]; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + retval = sstrtoul(buf, 10, &valid); + if (retval) + return retval; + + if (valid > 0) + valid = 1; + + byte_num = udg->template_index / 8; + offset = udg->template_index % 8; + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.template_flags, + template_flags, + sizeof(template_flags)); + if (retval < 0) + return retval; + + if (valid) + template_flags[byte_num] |= (1 << offset); + else + template_flags[byte_num] &= ~(1 << offset); + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.template_flags, + template_flags, + sizeof(template_flags)); + if (retval < 0) + return retval; + +#ifdef STORE_GESTURES + udg_read_valid_data(); +#endif + + return count; +} + +static ssize_t udg_sysfs_template_clear_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned int input; + const char cmd[] = {'0', 0}; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + if (input != 1) + return -EINVAL; + + memset(udg->template_data_buf, 0x00, udg->template_data_size); + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.template_data, + udg->template_data_buf, + udg->template_data_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to clear template data\n", + __func__); + return retval; + } + + retval = udg_sysfs_template_valid_store(dev, attr, cmd, 1); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to clear valid bit\n", + __func__); + return retval; + } + +#ifdef STORE_GESTURES + udg_read_template_data(udg->template_index); + udg_read_valid_data(); +#endif + + return count; +} + +static ssize_t udg_sysfs_trace_size_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", udg->trace_size); +} + +static ssize_t udg_sysfs_trace_data_show(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count) +{ + int retval; + unsigned short index = 0; + unsigned short trace_data_size; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + trace_data_size = udg->trace_size * 5; + + if (trace_data_size == 0) + return -EINVAL; + + if (count < trace_data_size) { + return -EINVAL; + } + + if (udg->trace_data_buf_size < trace_data_size) { + if (udg->trace_data_buf_size) + kfree(udg->trace_data_buf); + udg->trace_data_buf = kzalloc(trace_data_size, GFP_KERNEL); + if (!udg->trace_data_buf) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for trace data buffer\n", + __func__); + udg->trace_data_buf_size = 0; + return -ENOMEM; + } + udg->trace_data_buf_size = trace_data_size; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.trace_x, + &udg->trace_data_buf[index], + udg->trace_size * 2); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read trace X data\n", + __func__); + return retval; + } else { + index += udg->trace_size * 2; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.trace_y, + &udg->trace_data_buf[index], + udg->trace_size * 2); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read trace Y data\n", + __func__); + return retval; + } else { + index += udg->trace_size * 2; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.trace_segment, + &udg->trace_data_buf[index], + udg->trace_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read trace segment data\n", + __func__); + return retval; + } + + retval = secure_memcpy(buf, count, udg->trace_data_buf, + udg->trace_data_buf_size, trace_data_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy trace data\n", + __func__); + return retval; + } + + return trace_data_size; +} + +static ssize_t udg_sysfs_template_data_show(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + if (count < udg->template_data_size) { + return -EINVAL; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.template_data, + udg->template_data_buf, + udg->template_data_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read template data\n", + __func__); + return retval; + } + + retval = secure_memcpy(buf, count, udg->template_data_buf, + udg->template_data_size, udg->template_data_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy template data\n", + __func__); + return retval; + } + +#ifdef STORE_GESTURES + udg_read_template_data(udg->template_index); + udg_read_valid_data(); +#endif + + return udg->template_data_size; +} + +static ssize_t udg_sysfs_template_data_store(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + retval = secure_memcpy(udg->template_data_buf, udg->template_data_size, + buf, count, count); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy template data\n", + __func__); + return retval; + } + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.template_data, + udg->template_data_buf, + count); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write template data\n", + __func__); + return retval; + } + +#ifdef STORE_GESTURES + udg_read_template_data(udg->template_index); + udg_read_valid_data(); +#endif + + return count; +} + +static ssize_t udg_sysfs_template_displacement_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int retval; + unsigned short template_displacement; + + retval = udg_read_tuning_params(); + if (retval < 0) + return retval; + + template_displacement = + ((unsigned short)udg->tuning.template_disp_lsb << 0) | + ((unsigned short)udg->tuning.template_disp_msb << 8); + + return snprintf(buf, PAGE_SIZE, "%u\n", template_displacement); +} + +static ssize_t udg_sysfs_template_displacement_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long input; + + retval = sstrtoul(buf, 10, &input); + if (retval) + return retval; + + retval = udg_read_tuning_params(); + if (retval < 0) + return retval; + + udg->tuning.template_disp_lsb = (unsigned char)(input >> 0); + udg->tuning.template_disp_msb = (unsigned char)(input >> 8); + + retval = udg_write_tuning_params(); + if (retval < 0) + return retval; + + return count; +} + +static ssize_t udg_sysfs_rotation_invariance_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int retval; + unsigned short rotation_invariance; + + retval = udg_read_tuning_params(); + if (retval < 0) + return retval; + + rotation_invariance = + ((unsigned short)udg->tuning.rotation_inv_lsb << 0) | + ((unsigned short)udg->tuning.rotation_inv_msb << 8); + + return snprintf(buf, PAGE_SIZE, "%u\n", rotation_invariance); +} + +static ssize_t udg_sysfs_rotation_invariance_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long input; + + retval = sstrtoul(buf, 10, &input); + if (retval) + return retval; + + retval = udg_read_tuning_params(); + if (retval < 0) + return retval; + + udg->tuning.rotation_inv_lsb = (unsigned char)(input >> 0); + udg->tuning.rotation_inv_msb = (unsigned char)(input >> 8); + + retval = udg_write_tuning_params(); + if (retval < 0) + return retval; + + return count; +} + +static ssize_t udg_sysfs_scale_invariance_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int retval; + unsigned short scale_invariance; + + retval = udg_read_tuning_params(); + if (retval < 0) + return retval; + + scale_invariance = + ((unsigned short)udg->tuning.scale_inv_lsb << 0) | + ((unsigned short)udg->tuning.scale_inv_msb << 8); + + return snprintf(buf, PAGE_SIZE, "%u\n", scale_invariance); +} + +static ssize_t udg_sysfs_scale_invariance_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long input; + + retval = sstrtoul(buf, 10, &input); + if (retval) + return retval; + + retval = udg_read_tuning_params(); + if (retval < 0) + return retval; + + udg->tuning.scale_inv_lsb = (unsigned char)(input >> 0); + udg->tuning.scale_inv_msb = (unsigned char)(input >> 8); + + retval = udg_write_tuning_params(); + if (retval < 0) + return retval; + + return count; +} + +static ssize_t udg_sysfs_threshold_factor_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int retval; + unsigned short threshold_factor; + + retval = udg_read_tuning_params(); + if (retval < 0) + return retval; + + threshold_factor = + ((unsigned short)udg->tuning.thres_factor_lsb << 0) | + ((unsigned short)udg->tuning.thres_factor_msb << 8); + + return snprintf(buf, PAGE_SIZE, "%u\n", threshold_factor); +} + +static ssize_t udg_sysfs_threshold_factor_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long input; + + retval = sstrtoul(buf, 10, &input); + if (retval) + return retval; + + retval = udg_read_tuning_params(); + if (retval < 0) + return retval; + + udg->tuning.thres_factor_lsb = (unsigned char)(input >> 0); + udg->tuning.thres_factor_msb = (unsigned char)(input >> 8); + + retval = udg_write_tuning_params(); + if (retval < 0) + return retval; + + return count; +} + +static ssize_t udg_sysfs_match_metric_threshold_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int retval; + unsigned short match_metric_threshold; + + retval = udg_read_tuning_params(); + if (retval < 0) + return retval; + + match_metric_threshold = + ((unsigned short)udg->tuning.metric_thres_lsb << 0) | + ((unsigned short)udg->tuning.metric_thres_msb << 8); + + return snprintf(buf, PAGE_SIZE, "%u\n", match_metric_threshold); +} + +static ssize_t udg_sysfs_match_metric_threshold_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long input; + + retval = sstrtoul(buf, 10, &input); + if (retval) + return retval; + + retval = udg_read_tuning_params(); + if (retval < 0) + return retval; + + udg->tuning.metric_thres_lsb = (unsigned char)(input >> 0); + udg->tuning.metric_thres_msb = (unsigned char)(input >> 8); + + retval = udg_write_tuning_params(); + if (retval < 0) + return retval; + + return count; +} + +static ssize_t udg_sysfs_max_inter_stroke_time_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int retval; + unsigned short max_inter_stroke_time; + + retval = udg_read_tuning_params(); + if (retval < 0) + return retval; + + max_inter_stroke_time = + ((unsigned short)udg->tuning.inter_stroke_lsb << 0) | + ((unsigned short)udg->tuning.inter_stroke_msb << 8); + + return snprintf(buf, PAGE_SIZE, "%u\n", max_inter_stroke_time); +} + +static ssize_t udg_sysfs_max_inter_stroke_time_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long input; + + retval = sstrtoul(buf, 10, &input); + if (retval) + return retval; + + retval = udg_read_tuning_params(); + if (retval < 0) + return retval; + + udg->tuning.inter_stroke_lsb = (unsigned char)(input >> 0); + udg->tuning.inter_stroke_msb = (unsigned char)(input >> 8); + + retval = udg_write_tuning_params(); + if (retval < 0) + return retval; + + return count; +} + +static int udg_ctrl_subpacket(unsigned char ctrlreg, + unsigned char subpacket, + struct synaptics_rmi4_f12_query_5 *query_5) +{ + int retval; + unsigned char cnt; + unsigned char regnum; + unsigned char bitnum; + unsigned char q5_index; + unsigned char q6_index; + unsigned char offset; + unsigned char max_ctrlreg; + unsigned char *query_6; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + max_ctrlreg = (sizeof(query_5->data) - 1) * 8 - 1; + + if (ctrlreg > max_ctrlreg) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Control register number (%d) over limit\n", + __func__, ctrlreg); + return -EINVAL; + } + + q5_index = ctrlreg / 8 + 1; + bitnum = ctrlreg % 8; + if ((query_5->data[q5_index] & (1 << bitnum)) == 0x00) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Control %d is not present\n", + __func__, ctrlreg); + return -EINVAL; + } + + query_6 = kmalloc(query_5->size_of_query6, GFP_KERNEL); + if (!query_6) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for query 6\n", + __func__); + return -ENOMEM; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->query_base_addr + 6, + query_6, + query_5->size_of_query6); + if (retval < 0) + goto exit; + + q6_index = 0; + + for (regnum = 0; regnum < ctrlreg; regnum++) { + q5_index = regnum / 8 + 1; + bitnum = regnum % 8; + if ((query_5->data[q5_index] & (1 << bitnum)) == 0x00) + continue; + + if (query_6[q6_index] == 0x00) + q6_index += 3; + else + q6_index++; + + while (query_6[q6_index] & ~MASK_7BIT) + q6_index++; + + q6_index++; + } + + cnt = 0; + q6_index++; + offset = subpacket / 7; + bitnum = subpacket % 7; + + do { + if (cnt == offset) { + if (query_6[q6_index + cnt] & (1 << bitnum)) + retval = 1; + else + retval = 0; + goto exit; + } + cnt++; + } while (query_6[q6_index + cnt - 1] & ~MASK_7BIT); + + retval = 0; + +exit: + kfree(query_6); + + return retval; +} + +static int udg_read_tuning_params(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.ctrl_18, + udg->ctrl_buf, + udg->ctrl_18_sub10_off + sizeof(struct udg_tuning)); + if (retval < 0) + return retval; + + secure_memcpy(udg->tuning.data, + sizeof(udg->tuning.data), + (unsigned char *)&udg->ctrl_buf[udg->ctrl_18_sub10_off], + sizeof(struct udg_tuning), + sizeof(struct udg_tuning)); + + return 0; +} + +static int udg_write_tuning_params(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + secure_memcpy((unsigned char *)&udg->ctrl_buf[udg->ctrl_18_sub10_off], + sizeof(struct udg_tuning), + udg->tuning.data, + sizeof(udg->tuning.data), + sizeof(struct udg_tuning)); + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.ctrl_18, + udg->ctrl_buf, + udg->ctrl_18_sub10_off + sizeof(struct udg_tuning)); + if (retval < 0) + return retval; + + return 0; +} + +static int udg_detection_enable(bool enable) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.ctrl_20, + udg->ctrl_buf, + udg->ctrl_20_sub1_off + 1); + if (retval < 0) + return retval; + + if (enable) + udg->ctrl_buf[udg->ctrl_20_sub1_off] = WAKEUP_GESTURE_MODE; + else + udg->ctrl_buf[udg->ctrl_20_sub1_off] = udg->report_flags; + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.ctrl_20, + udg->ctrl_buf, + udg->ctrl_20_sub1_off + 1); + if (retval < 0) + return retval; + + return 0; +} + +static int udg_engine_enable(bool enable) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + if (enable) { + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.ctrl_27, + udg->ctrl_buf, + udg->ctrl_27_sub5_off + 1); + if (retval < 0) + return retval; + + udg->ctrl_buf[udg->ctrl_27_sub5_off] |= + (1 << CTRL27_UDG_ENABLE_BIT); + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.ctrl_27, + udg->ctrl_buf, + udg->ctrl_27_sub5_off + 1); + if (retval < 0) + return retval; + } else { + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.ctrl_27, + udg->ctrl_buf, + udg->ctrl_27_sub5_off + 1); + if (retval < 0) + return retval; + + udg->ctrl_buf[udg->ctrl_27_sub5_off] &= + ~(1 << CTRL27_UDG_ENABLE_BIT); + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.ctrl_27, + udg->ctrl_buf, + udg->ctrl_27_sub5_off + 1); + if (retval < 0) + return retval; + } + + return 0; +} + +static void udg_report(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + atomic_set(&udg->attn_event, 1); + + if (rmi4_data->suspend) { + if (rmi4_data->gesture_detection[0] == 0) { + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.data_4, + rmi4_data->gesture_detection, + sizeof(rmi4_data->gesture_detection)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read gesture detection\n", + __func__); + return; + } + } + + udg->detection_status = rmi4_data->gesture_detection[0]; + rmi4_data->gesture_detection[0] = 0; + + if (udg->detection_status == DETECTION) { + input_report_key(udg->udg_dev, KEY_WAKEUP, 1); + input_sync(udg->udg_dev); + input_report_key(udg->udg_dev, KEY_WAKEUP, 0); + input_sync(udg->udg_dev); + rmi4_data->suspend = false; + } + } + + return; +} + +static int udg_set_index(unsigned char index) +{ + int retval; + struct synaptics_rmi4_f12_control_41 control_41; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + if (index >= udg->max_num_templates) + return -EINVAL; + + udg->template_index = index; + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.ctrl_41, + control_41.data, + sizeof(control_41.data)); + if (retval < 0) + return retval; + + control_41.template_index = udg->template_index; + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.ctrl_41, + control_41.data, + sizeof(control_41.data)); + if (retval < 0) + return retval; + + return 0; +} + +#ifdef STORE_GESTURES +static int udg_read_valid_data(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.template_flags, + udg->valid_buf, + sizeof(udg->valid_buf)); + if (retval < 0) + return retval; + + return 0; +} + +static int udg_write_valid_data(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.template_flags, + udg->valid_buf, + sizeof(udg->valid_buf)); + if (retval < 0) + return retval; + + return 0; +} + +static int udg_read_template_data(unsigned char index) +{ + int retval; + unsigned char *storage; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + udg_set_index(index); + storage = &(udg->storage_buf[index * udg->template_data_size]); + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.template_data, + storage, + udg->template_data_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read template data\n", + __func__); + return retval; + } + + return 0; +} + +static int udg_write_template_data(void) +{ + int retval; + unsigned char ii; + unsigned char *storage; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + for (ii = 0; ii < udg->gestures_to_store; ii++) { + udg_set_index(ii); + storage = &(udg->storage_buf[ii * udg->template_data_size]); + + retval = synaptics_rmi4_reg_write(rmi4_data, + udg->addr.template_data, + storage, + udg->template_data_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write template data\n", + __func__); + return retval; + } + } + + return 0; +} +#endif + +static int udg_reg_init(void) +{ + int retval; + unsigned char ii; + unsigned char data_offset; + unsigned char size_of_query; + unsigned char ctrl_18_offset; + unsigned char ctrl_20_offset; + unsigned char ctrl_23_offset; + unsigned char ctrl_27_offset; + unsigned char ctrl_41_offset; + struct synaptics_rmi4_f12_query_0 query_0; + struct synaptics_rmi4_f12_query_5 query_5; + struct synaptics_rmi4_f12_query_8 query_8; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->query_base_addr + 7, + &size_of_query, + sizeof(size_of_query)); + if (retval < 0) + return retval; + + if (size_of_query < 4) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: User defined gesture support unavailable " + "(missing data registers)\n", + __func__); + retval = -ENODEV; + return retval; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->query_base_addr + 8, + query_8.data, + sizeof(query_8.data)); + if (retval < 0) + return retval; + + if ((query_8.data16_is_present) && + (query_8.data17_is_present) && + (query_8.data18_is_present) && + (query_8.data19_is_present) && + (query_8.data20_is_present) && + (query_8.data21_is_present)) { + data_offset = query_8.data0_is_present + + query_8.data1_is_present + + query_8.data2_is_present + + query_8.data3_is_present; + udg->addr.data_4 = udg->data_base_addr + data_offset; + data_offset = data_offset + + query_8.data4_is_present + + query_8.data5_is_present + + query_8.data6_is_present + + query_8.data7_is_present + + query_8.data8_is_present + + query_8.data9_is_present + + query_8.data10_is_present + + query_8.data11_is_present + + query_8.data12_is_present + + query_8.data13_is_present + + query_8.data14_is_present + + query_8.data15_is_present; + udg->addr.trace_x = udg->data_base_addr + data_offset; + udg->addr.trace_y = udg->addr.trace_x + 1; + udg->addr.trace_segment = udg->addr.trace_y + 1; + udg->addr.template_helper = udg->addr.trace_segment + 1; + udg->addr.template_data = udg->addr.template_helper + 1; + udg->addr.template_flags = udg->addr.template_data + 1; + } else { + dev_err(rmi4_data->pdev->dev.parent, + "%s: User defined gesture support unavailable " + "(missing data registers)\n", + __func__); + retval = -ENODEV; + return retval; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->query_base_addr + 4, + &size_of_query, + sizeof(size_of_query)); + if (retval < 0) + return retval; + + if (size_of_query < 7) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: User defined gesture support unavailable " + "(missing control registers)\n", + __func__); + retval = -ENODEV; + return retval; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->query_base_addr + 5, + query_5.data, + sizeof(query_5.data)); + if (retval < 0) + return retval; + + ctrl_18_offset = query_5.ctrl0_is_present + + query_5.ctrl1_is_present + + query_5.ctrl2_is_present + + query_5.ctrl3_is_present + + query_5.ctrl4_is_present + + query_5.ctrl5_is_present + + query_5.ctrl6_is_present + + query_5.ctrl7_is_present + + query_5.ctrl8_is_present + + query_5.ctrl9_is_present + + query_5.ctrl10_is_present + + query_5.ctrl11_is_present + + query_5.ctrl12_is_present + + query_5.ctrl13_is_present + + query_5.ctrl14_is_present + + query_5.ctrl15_is_present + + query_5.ctrl16_is_present + + query_5.ctrl17_is_present; + + ctrl_20_offset = ctrl_18_offset + + query_5.ctrl18_is_present + + query_5.ctrl19_is_present; + + ctrl_23_offset = ctrl_20_offset + + query_5.ctrl20_is_present + + query_5.ctrl21_is_present + + query_5.ctrl22_is_present; + + ctrl_27_offset = ctrl_23_offset+ + query_5.ctrl23_is_present + + query_5.ctrl24_is_present + + query_5.ctrl25_is_present + + query_5.ctrl26_is_present; + + ctrl_41_offset = ctrl_27_offset+ + query_5.ctrl27_is_present + + query_5.ctrl28_is_present + + query_5.ctrl29_is_present + + query_5.ctrl30_is_present + + query_5.ctrl31_is_present + + query_5.ctrl32_is_present + + query_5.ctrl33_is_present + + query_5.ctrl34_is_present + + query_5.ctrl35_is_present + + query_5.ctrl36_is_present + + query_5.ctrl37_is_present + + query_5.ctrl38_is_present + + query_5.ctrl39_is_present + + query_5.ctrl40_is_present; + + udg->addr.ctrl_18 = udg->control_base_addr + ctrl_18_offset; + udg->addr.ctrl_20 = udg->control_base_addr + ctrl_20_offset; + udg->addr.ctrl_23 = udg->control_base_addr + ctrl_23_offset; + udg->addr.ctrl_27 = udg->control_base_addr + ctrl_27_offset; + udg->addr.ctrl_41 = udg->control_base_addr + ctrl_41_offset; + + udg->ctrl_18_sub10_off = 0; + for (ii = 0; ii < 10; ii++) { + retval = udg_ctrl_subpacket(18, ii, &query_5); + if (retval == 1) + udg->ctrl_18_sub10_off += ctrl_18_sub_size[ii]; + else if (retval < 0) + return retval; + } + + udg->ctrl_20_sub1_off = 0; + for (ii = 0; ii < 1; ii++) { + retval = udg_ctrl_subpacket(20, ii, &query_5); + if (retval == 1) + udg->ctrl_20_sub1_off += ctrl_20_sub_size[ii]; + else if (retval < 0) + return retval; + } + + udg->ctrl_23_sub3_off = 0; + for (ii = 0; ii < 3; ii++) { + retval = udg_ctrl_subpacket(23, ii, &query_5); + if (retval == 1) + udg->ctrl_23_sub3_off += ctrl_23_sub_size[ii]; + else if (retval < 0) + return retval; + } + + retval = udg_ctrl_subpacket(23, 3, &query_5); + if (retval == 0) + udg->ctrl_23_sub3_off = 0; + else if (retval < 0) + return retval; + + udg->ctrl_27_sub5_off = 0; + for (ii = 0; ii < 5; ii++) { + retval = udg_ctrl_subpacket(27, ii, &query_5); + if (retval == 1) + udg->ctrl_27_sub5_off += ctrl_27_sub_size[ii]; + else if (retval < 0) + return retval; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->query_base_addr + 0, + query_0.data, + sizeof(query_0.data)); + if (retval < 0) + return retval; + + udg->max_num_templates = query_0.max_num_templates; + udg->template_size = + ((unsigned short)query_0.template_size_lsb << 0) | + ((unsigned short)query_0.template_size_msb << 8); + udg->template_data_size = udg->template_size * 4 * 2 + 4 + 1; + +#ifdef STORE_GESTURES + udg->gestures_to_store = udg->max_num_templates; + if (GESTURES_TO_STORE < udg->gestures_to_store) + udg->gestures_to_store = GESTURES_TO_STORE; +#endif + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.ctrl_20, + udg->ctrl_buf, + udg->ctrl_20_sub1_off + 1); + if (retval < 0) + return retval; + + udg->report_flags = udg->ctrl_buf[udg->ctrl_20_sub1_off]; + + retval = synaptics_rmi4_reg_read(rmi4_data, + udg->addr.ctrl_23, + udg->ctrl_buf, + udg->ctrl_23_sub3_off + 1); + if (retval < 0) + return retval; + + udg->object_type_enable1 = udg->ctrl_buf[0]; + if (udg->ctrl_23_sub3_off) + udg->object_type_enable2 = udg->ctrl_buf[udg->ctrl_23_sub3_off]; + + return retval; +} + +static int udg_scan_pdt(void) +{ + int retval; + unsigned char ii; + unsigned char page; + unsigned char intr_count = 0; + unsigned char intr_off; + unsigned char intr_src; + unsigned short addr; + struct synaptics_rmi4_fn_desc fd; + struct synaptics_rmi4_data *rmi4_data = udg->rmi4_data; + + for (page = 0; page < PAGES_TO_SERVICE; page++) { + for (addr = PDT_START; addr > PDT_END; addr -= PDT_ENTRY_SIZE) { + addr |= (page << 8); + + retval = synaptics_rmi4_reg_read(rmi4_data, + addr, + (unsigned char *)&fd, + sizeof(fd)); + if (retval < 0) + return retval; + + addr &= ~(MASK_8BIT << 8); + + if (fd.fn_number) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Found F%02x\n", + __func__, fd.fn_number); + switch (fd.fn_number) { + case SYNAPTICS_RMI4_F12: + goto f12_found; + break; + } + } else { + break; + } + + intr_count += fd.intr_src_count; + } + } + + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to find F12\n", + __func__); + return -EINVAL; + +f12_found: + udg->query_base_addr = fd.query_base_addr | (page << 8); + udg->control_base_addr = fd.ctrl_base_addr | (page << 8); + udg->data_base_addr = fd.data_base_addr | (page << 8); + udg->command_base_addr = fd.cmd_base_addr | (page << 8); + + retval = udg_reg_init(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to initialize user defined gesture registers\n", + __func__); + return retval; + } + + udg->intr_mask = 0; + intr_src = fd.intr_src_count; + intr_off = intr_count % 8; + for (ii = intr_off; + ii < (intr_src + intr_off); + ii++) { + udg->intr_mask |= 1 << ii; + } + + rmi4_data->intr_mask[0] |= udg->intr_mask; + + addr = rmi4_data->f01_ctrl_base_addr + 1; + + retval = synaptics_rmi4_reg_write(rmi4_data, + addr, + &rmi4_data->intr_mask[0], + sizeof(rmi4_data->intr_mask[0])); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set interrupt enable bit\n", + __func__); + return retval; + } + + return 0; +} + +static void synaptics_rmi4_udg_attn(struct synaptics_rmi4_data *rmi4_data, + unsigned char intr_mask) +{ + if (!udg) + return; + + if (udg->intr_mask & intr_mask) + udg_report(); + + return; +} + +static int synaptics_rmi4_udg_init(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + unsigned char ii; + unsigned char size; + unsigned char attr_count; + unsigned char param_count; + + if (udg) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Handle already exists\n", + __func__); + return 0; + } + + udg = kzalloc(sizeof(*udg), GFP_KERNEL); + if (!udg) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for udg\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + size = 0; + for (ii = 0; ii < sizeof(ctrl_18_sub_size); ii++) + size += ctrl_18_sub_size[ii]; + size += sizeof(struct udg_tuning); + udg->ctrl_buf = kzalloc(size, GFP_KERNEL); + if (!udg->ctrl_buf) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for ctrl_buf\n", + __func__); + retval = -ENOMEM; + goto exit_free_udg; + } + + udg->rmi4_data = rmi4_data; + + retval = udg_scan_pdt(); + if (retval < 0) + goto exit_free_ctrl_buf; + + udg->template_data_buf = kzalloc(udg->template_data_size, GFP_KERNEL); + if (!udg->template_data_buf) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for template_data_buf\n", + __func__); + retval = -ENOMEM; + goto exit_free_ctrl_buf; + } + +#ifdef STORE_GESTURES + udg->storage_buf = kzalloc( + udg->template_data_size * udg->gestures_to_store, + GFP_KERNEL); + if (!udg->storage_buf) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for storage_buf\n", + __func__); + kfree(udg->template_data_buf); + retval = -ENOMEM; + goto exit_free_ctrl_buf; + } +#endif + + udg->udg_dev = input_allocate_device(); + if (udg->udg_dev == NULL) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to allocate gesture device\n", + __func__); + retval = -ENOMEM; + goto exit_free_template_data_buf; + } + + udg->udg_dev->name = GESTURE_DRIVER_NAME; + udg->udg_dev->phys = GESTURE_PHYS_NAME; + udg->udg_dev->id.product = SYNAPTICS_DSX_DRIVER_PRODUCT; + udg->udg_dev->id.version = SYNAPTICS_DSX_DRIVER_VERSION; + udg->udg_dev->dev.parent = rmi4_data->pdev->dev.parent; + input_set_drvdata(udg->udg_dev, rmi4_data); + + set_bit(EV_KEY, udg->udg_dev->evbit); + set_bit(KEY_WAKEUP, udg->udg_dev->keybit); + input_set_capability(udg->udg_dev, EV_KEY, KEY_WAKEUP); + + retval = input_register_device(udg->udg_dev); + if (retval) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to register gesture device\n", + __func__); + input_free_device(udg->udg_dev); + goto exit_free_template_data_buf; + } + + udg->tuning_dir = kobject_create_and_add(TUNING_SYSFS_DIR_NAME, + &udg->udg_dev->dev.kobj); + if (!udg->tuning_dir) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create tuning sysfs directory\n", + __func__); + goto exit_unregister_input_device; + } + + retval = sysfs_create_bin_file(&udg->udg_dev->dev.kobj, &template_data); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create template data bin file\n", + __func__); + goto exit_remove_sysfs_directory; + } + + retval = sysfs_create_bin_file(&udg->udg_dev->dev.kobj, &trace_data); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create trace data bin file\n", + __func__); + goto exit_remove_bin_file; + } + + for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) { + retval = sysfs_create_file(&udg->udg_dev->dev.kobj, + &attrs[attr_count].attr); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create sysfs attributes\n", + __func__); + retval = -ENODEV; + goto exit_remove_attrs; + } + } + + for (param_count = 0; param_count < ARRAY_SIZE(params); param_count++) { + retval = sysfs_create_file(udg->tuning_dir, + ¶ms[param_count].attr); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create tuning parameters\n", + __func__); + retval = -ENODEV; + goto exit_remove_params; + } + } + + retval = udg_engine_enable(true); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to enable gesture engine\n", + __func__); + goto exit_remove_params; + } + + return 0; + +exit_remove_params: + for (param_count--; param_count >= 0; param_count--) { + sysfs_remove_file(udg->tuning_dir, + ¶ms[param_count].attr); + } + +exit_remove_attrs: + for (attr_count--; attr_count >= 0; attr_count--) { + sysfs_remove_file(&udg->udg_dev->dev.kobj, + &attrs[attr_count].attr); + } + + sysfs_remove_bin_file(&udg->udg_dev->dev.kobj, &trace_data); + +exit_remove_bin_file: + sysfs_remove_bin_file(&udg->udg_dev->dev.kobj, &template_data); + +exit_remove_sysfs_directory: + kobject_put(udg->tuning_dir); + +exit_unregister_input_device: + input_unregister_device(udg->udg_dev); + +exit_free_template_data_buf: +#ifdef STORE_GESTURES + kfree(udg->storage_buf); +#endif + kfree(udg->template_data_buf); + +exit_free_ctrl_buf: + kfree(udg->ctrl_buf); + +exit_free_udg: + kfree(udg); + udg = NULL; + +exit: + return retval; +} + +static void synaptics_rmi4_udg_remove(struct synaptics_rmi4_data *rmi4_data) +{ + unsigned char count; + + if (!udg) + goto exit; + + for (count = 0; count < ARRAY_SIZE(params); count++) { + sysfs_remove_file(udg->tuning_dir, + ¶ms[count].attr); + } + + for (count = 0; count < ARRAY_SIZE(attrs); count++) { + sysfs_remove_file(&udg->udg_dev->dev.kobj, + &attrs[count].attr); + } + + sysfs_remove_bin_file(&udg->udg_dev->dev.kobj, &trace_data); + sysfs_remove_bin_file(&udg->udg_dev->dev.kobj, &template_data); + kobject_put(udg->tuning_dir); + + input_unregister_device(udg->udg_dev); +#ifdef STORE_GESTURES + kfree(udg->storage_buf); +#endif + kfree(udg->template_data_buf); + kfree(udg->trace_data_buf); + kfree(udg->ctrl_buf); + kfree(udg); + udg = NULL; + +exit: + complete(&udg_remove_complete); + + return; +} + +static void synaptics_rmi4_udg_reset(struct synaptics_rmi4_data *rmi4_data) +{ + if (!udg) { + synaptics_rmi4_udg_init(rmi4_data); + return; + } + + udg_scan_pdt(); + udg_engine_enable(true); +#ifdef STORE_GESTURES + udg_write_template_data(); + udg_write_valid_data(); +#endif + + return; +} + +static void synaptics_rmi4_udg_reinit(struct synaptics_rmi4_data *rmi4_data) +{ + if (!udg) + return; + + udg_engine_enable(true); +#ifdef STORE_GESTURES + udg_write_template_data(); + udg_write_valid_data(); +#endif + + return; +} + +static void synaptics_rmi4_udg_e_suspend(struct synaptics_rmi4_data *rmi4_data) +{ + if (!udg) + return; + + rmi4_data->sleep_enable(rmi4_data, false); + rmi4_data->irq_enable(rmi4_data, true, false); + enable_irq_wake(rmi4_data->irq); + + udg_engine_enable(true); + udg_detection_enable(true); + + return; +} + +static void synaptics_rmi4_udg_suspend(struct synaptics_rmi4_data *rmi4_data) +{ + if (!udg) + return; + + rmi4_data->sleep_enable(rmi4_data, false); + rmi4_data->irq_enable(rmi4_data, true, false); + enable_irq_wake(rmi4_data->irq); + + udg_engine_enable(true); + udg_detection_enable(true); + + return; +} + +static void synaptics_rmi4_udg_resume(struct synaptics_rmi4_data *rmi4_data) +{ + if (!udg) + return; + + disable_irq_wake(rmi4_data->irq); + udg_detection_enable(false); + + return; +} + +static void synaptics_rmi4_udg_l_resume(struct synaptics_rmi4_data *rmi4_data) +{ + if (!udg) + return; + + disable_irq_wake(rmi4_data->irq); + udg_detection_enable(false); + + return; +} + +static struct synaptics_rmi4_exp_fn gesture_module = { + .fn_type = RMI_GESTURE, + .init = synaptics_rmi4_udg_init, + .remove = synaptics_rmi4_udg_remove, + .reset = synaptics_rmi4_udg_reset, + .reinit = synaptics_rmi4_udg_reinit, + .early_suspend = synaptics_rmi4_udg_e_suspend, + .suspend = synaptics_rmi4_udg_suspend, + .resume = synaptics_rmi4_udg_resume, + .late_resume = synaptics_rmi4_udg_l_resume, + .attn = synaptics_rmi4_udg_attn, +}; + +static int __init rmi4_gesture_module_init(void) +{ + synaptics_rmi4_new_function_force(&gesture_module, true); + + return 0; +} + +static void __exit rmi4_gesture_module_exit(void) +{ + synaptics_rmi4_new_function_force(&gesture_module, false); + + wait_for_completion(&udg_remove_complete); + + return; +} + +module_init(rmi4_gesture_module_init); +module_exit(rmi4_gesture_module_exit); + +MODULE_AUTHOR("Synaptics, Inc."); +MODULE_DESCRIPTION("Synaptics DSX User Defined Gesture Module"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_i2c.c b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_i2c.c new file mode 100644 index 000000000000..5201665e4d46 --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_i2c.c @@ -0,0 +1,1106 @@ +/* + * Synaptics DSX touchscreen driver + * + * Copyright (C) 2012-2015 Synaptics Incorporated. All rights reserved. + * + * Copyright (C) 2012 Alexandra Chin <alexandra.chin@tw.synaptics.com> + * Copyright (C) 2012 Scott Lin <scott.lin@tw.synaptics.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND SYNAPTICS + * EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, INCLUDING ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, + * AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS. + * IN NO EVENT SHALL SYNAPTICS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION + * WITH THE USE OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED + * AND BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF COMPETENT JURISDICTION DOES + * NOT PERMIT THE DISCLAIMER OF DIRECT DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' + * TOTAL CUMULATIVE LIABILITY TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. + * DOLLARS. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/i2c.h> +#include <linux/delay.h> +#include <linux/input.h> +#include <linux/types.h> +#include <linux/of_gpio.h> +#include <linux/platform_device.h> +#include <linux/input/synaptics_dsx.h> +#include "synaptics_dsx_core.h" + +#define SYN_I2C_RETRY_TIMES 4 + +#define I2C_BURST_LIMIT 2048 + +#define MAX_WRITE_SIZE 4096 + +static unsigned char *wr_buf; + +static struct synaptics_dsx_hw_interface hw_if; + +static struct platform_device *synaptics_dsx_i2c_device; + +#ifdef CONFIG_OF +static void dump_dt(struct device *dev, struct synaptics_dsx_board_data *bdata) +{ +#if 0 + int i, j; + char tmp[256] = {0}; + dev_dbg(dev, "START of device tree dump:\n"); + dev_dbg(dev, "power_gpio = %d\n", bdata->power_gpio); + dev_dbg(dev, "reset_gpio = %d\n", bdata->reset_gpio); + dev_dbg(dev, "irq_gpio = %d\n", bdata->irq_gpio); + dev_dbg(dev, "power_on_state = %d\n", (int)bdata->power_on_state); + dev_dbg(dev, "reset_on_state = %d\n", (int)bdata->reset_on_state); + dev_dbg(dev, "power_delay_ms = %d\n", (int)bdata->power_delay_ms); + dev_dbg(dev, "reset_delay_ms = %d\n", (int)bdata->reset_delay_ms); + dev_dbg(dev, "reset_active_ms = %d\n", (int)bdata->reset_active_ms); + dev_dbg(dev, "cut_off_power = %d\n", (int)bdata->cut_off_power); + dev_dbg(dev, "swap_axes = %d\n", (int)bdata->swap_axes); + dev_dbg(dev, "x_flip = %d\n", (int)bdata->x_flip); + dev_dbg(dev, "y_flip = %d\n", (int)bdata->y_flip); + dev_dbg(dev, "ub_i2c_addr = %d\n", (int)bdata->ub_i2c_addr); + dev_dbg(dev, "lockdown_area = %d\n", (int)bdata->lockdown_area); + + for (i = 0; i < bdata->tp_id_num; i++) + snprintf(tmp, 256, "%s %d", tmp, bdata->tp_id_bytes[i]); + dev_dbg(dev, "tp_id_bytes =%s\n", tmp); + + dev_dbg(dev, "config_array_size = %d\n", (int)bdata->config_array_size); + for (i = 0; i < bdata->config_array_size; i++) { + memset(tmp, 0, sizeof(tmp)); + for (j = 0; j < bdata->tp_id_num; j++) + snprintf(tmp, 256, "%s 0x%0x", tmp, bdata->config_array[i].tp_ids[j]); + dev_dbg(dev, "config[%d].tp_id =%s", i, tmp); + + dev_dbg(dev, "config[%d].fw_name = %s\n", i, bdata->config_array[i].fw_name); + } + dev_dbg(dev, "END of device tree dump\n"); +#endif +} + +static int parse_dt(struct device *dev, struct synaptics_dsx_board_data *bdata) +{ + int retval; + u32 value; + const char *name; + struct synaptics_dsx_config_info *config_info; + struct synaptics_dsx_factory_param *factory_param; + struct property *prop; + struct device_node *temp, *np = dev->of_node; + + bdata->irq_gpio = of_get_named_gpio_flags(np, + "synaptics,irq-gpio", 0, NULL); + if (bdata->irq_gpio < 0) + return -EINVAL; + + retval = of_property_read_u32(np, "synaptics,irq-on-state", + &value); + if (retval < 0) + bdata->irq_on_state = 0; + else + bdata->irq_on_state = value; + + retval = of_property_read_u32(np, "synaptics,irq-flags", &value); + if (retval < 0) + return retval; + else + bdata->irq_flags = value; + + retval = of_property_read_string(np, "synaptics,pwr-reg-name", &name); + if (retval == -EINVAL) + bdata->pwr_reg_name = NULL; + else if (retval < 0) + return retval; + else + bdata->pwr_reg_name = name; + + retval = of_property_read_string(np, "synaptics,bus-reg-name", &name); + if (retval == -EINVAL) + bdata->bus_reg_name = NULL; + else if (retval < 0) + return retval; + else + bdata->bus_reg_name = name; + + bdata->panel_is_incell = of_property_read_bool(np, "synaptics,panel-is-incell"); + + if (bdata->panel_is_incell) { + retval = of_property_read_string(np, "synaptics,lab-reg-name", &name); + if (retval == -EINVAL) + bdata->lab_reg_name = NULL; + else if (retval < 0) + return retval; + else + bdata->lab_reg_name = name; + + retval = of_property_read_string(np, "synaptics,ibb-reg-name", &name); + if (retval == -EINVAL) + bdata->ibb_reg_name = NULL; + else if (retval < 0) + return retval; + else + bdata->ibb_reg_name = name; + + retval = of_property_read_string(np, "synaptics,disp-reg-name", &name); + if (retval == -EINVAL) + bdata->disp_reg_name = NULL; + else if (retval < 0) + return retval; + else + bdata->disp_reg_name = name; + } + + retval = of_property_read_string(np, "synaptics,power-gpio-name", &name); + if (retval == -EINVAL) + bdata->power_gpio_name = NULL; + else if (retval < 0) + return retval; + else + bdata->power_gpio_name = name; + + retval = of_property_read_string(np, "synaptics,reset-gpio-name", &name); + if (retval == -EINVAL) + bdata->reset_gpio_name = NULL; + else if (retval < 0) + return retval; + else + bdata->reset_gpio_name = name; + + retval = of_property_read_string(np, "synaptics,irq-gpio-name", &name); + if (retval == -EINVAL) + bdata->irq_gpio_name = NULL; + else if (retval < 0) + return retval; + else + bdata->irq_gpio_name = name; + + bdata->cut_off_power = of_property_read_bool(np, "synaptics,cut-off-power"); + + bdata->power_gpio = of_get_named_gpio_flags(np, + "synaptics,power-gpio", 0, NULL); + if (bdata->power_gpio >= 0) { + retval = of_property_read_u32(np, "synaptics,power-on-state", + &value); + if (retval < 0) + return retval; + else + bdata->power_on_state = value; + } else + bdata->power_gpio = -1; + + retval = of_property_read_u32(np, "synaptics,power-delay-ms", + &value); + if (retval < 0) + bdata->power_delay_ms = 0; /* No power delay by default */ + else + bdata->power_delay_ms = value; + + bdata->mdss_reset = of_get_named_gpio_flags(np, + "synaptics,mdss-dsi-reset", 0, NULL); + if (bdata->mdss_reset >= 0) { + retval = of_property_read_u32(np, "synaptics,mdss-reset-state", + &value); + if (retval < 0) + return retval; + else + bdata->mdss_reset_state = value; + } else + bdata->mdss_reset = -1; + + bdata->reset_gpio = of_get_named_gpio_flags(np, + "synaptics,reset-gpio", 0, NULL); + if (bdata->reset_gpio >= 0) { + retval = of_property_read_u32(np, "synaptics,reset-on-state", + &value); + if (retval < 0) + return retval; + else + bdata->reset_on_state = value; + + retval = of_property_read_u32(np, "synaptics,reset-active-ms", + &value); + if (retval < 0) + return retval; + else + bdata->reset_active_ms = value; + } else + bdata->reset_gpio = -1; + + retval = of_property_read_u32(np, "synaptics,reset-delay-ms", + &value); + if (retval < 0) + bdata->reset_delay_ms = 0; /* No reset delay by default */ + else + bdata->reset_delay_ms = value; + + retval = of_property_read_u32(np, "synaptics,max-y-for-2d", + &value); + if (retval < 0) + bdata->max_y_for_2d = -1; + else + bdata->max_y_for_2d = value; + + bdata->swap_axes = of_property_read_bool(np, "synaptics,swap-axes"); + + bdata->x_flip = of_property_read_bool(np, "synaptics,x-flip"); + + bdata->y_flip = of_property_read_bool(np, "synaptics,y-flip"); + + retval = of_property_read_u32(np, "synaptics,ub-i2c-addr", + &value); + if (retval < 0) + bdata->ub_i2c_addr = -1; + else + bdata->ub_i2c_addr = (unsigned short)value; + + retval = of_property_read_string(np, "synaptics,backup-fw", &name); + if (retval == -EINVAL) + bdata->backup_fw_name = NULL; + else if (retval < 0) + return retval; + else + bdata->backup_fw_name = name; + + prop = of_find_property(np, "synaptics,cap-button-codes", NULL); + if (prop && prop->length) { + bdata->cap_button_map->map = devm_kzalloc(dev, + prop->length, + GFP_KERNEL); + if (!bdata->cap_button_map->map) + return -ENOMEM; + bdata->cap_button_map->nbuttons = prop->length / sizeof(u32); + retval = of_property_read_u32_array(np, + "synaptics,cap-button-codes", + bdata->cap_button_map->map, + bdata->cap_button_map->nbuttons); + if (retval < 0) { + bdata->cap_button_map->nbuttons = 0; + bdata->cap_button_map->map = NULL; + } + } else { + bdata->cap_button_map->nbuttons = 0; + bdata->cap_button_map->map = NULL; + } + + retval = of_property_read_string(np, "synaptics,short-jdi-25", &bdata->short_test25); + if (retval && (retval != -EINVAL)) { + dev_err(dev, "Unable to read jdi short type 25 value\n"); + bdata->short_test25 = NULL; + } + + retval = of_property_read_string(np, "synaptics,short-jdi-26", &bdata->short_test26); + if (retval && (retval != -EINVAL)) { + dev_err(dev, "Unable to read jdi short type 26 value\n"); + bdata->short_test26 = NULL; + } + + prop = of_find_property(np, "synaptics,vir-button-codes", NULL); + if (prop && prop->length) { + bdata->vir_button_map->map = devm_kzalloc(dev, + prop->length, + GFP_KERNEL); + if (!bdata->vir_button_map->map) + return -ENOMEM; + bdata->vir_button_map->nbuttons = prop->length / sizeof(u32); + bdata->vir_button_map->nbuttons /= 5; + retval = of_property_read_u32_array(np, + "synaptics,vir-button-codes", + bdata->vir_button_map->map, + bdata->vir_button_map->nbuttons * 5); + if (retval < 0) { + bdata->vir_button_map->nbuttons = 0; + bdata->vir_button_map->map = NULL; + } + } else { + bdata->vir_button_map->nbuttons = 0; + bdata->vir_button_map->map = NULL; + } + + if (of_property_read_bool(np, "synaptics,product-id-as-lockdown")) + bdata->lockdown_area = LOCKDOWN_AREA_PRODUCT_ID; + else if (of_property_read_bool(np, "synaptics,guest-serialization-as-lockdown")) + bdata->lockdown_area = LOCKDOWN_AREA_GUEST_SERIALIZATION; + else + bdata->lockdown_area = LOCKDOWN_AREA_UNKNOWN; + + prop = of_find_property(np, "synaptics,tp-id-byte", NULL); + if (prop && prop->length) { + bdata->tp_id_bytes = devm_kzalloc(dev, + prop->length, + GFP_KERNEL); + if (!bdata->tp_id_bytes) + return -ENOMEM; + bdata->tp_id_num = prop->length / sizeof(u8); + retval = of_property_read_u8_array(np, + "synaptics,tp-id-byte", + bdata->tp_id_bytes, + bdata->tp_id_num); + if (retval < 0) { + bdata->tp_id_num = 0; + bdata->tp_id_bytes = NULL; + } + } else { + dev_err(dev, "Don't know which byte of lockdown info to distinguish TP\n"); + bdata->tp_id_num = 0; + bdata->tp_id_bytes = NULL; + } +#ifdef CONFIG_SYNAPTICS_TOUCH_COUNT_DUMP + bdata->dump_click_count = of_property_read_bool(np, "synaptics,dump-click-count"); +#endif + + retval = of_property_read_u32(np, "synaptics,config-array-size", + &bdata->config_array_size); + if (retval < 0) { + dev_err(dev, "Cannot get config array size\n"); + return retval; + } + + bdata->config_array = devm_kzalloc(dev, bdata->config_array_size * + sizeof(struct synaptics_dsx_config_info), GFP_KERNEL); + if (!bdata->config_array) { + dev_err(dev, "Unable to allocate memory\n"); + return -ENOMEM; + } + + config_info = bdata->config_array; + for_each_child_of_node(np, temp) { + retval = of_property_read_u32(temp, "synaptics,chip-id", + &value); + if (retval < 0) + config_info->chip_id = -1; + else + config_info->chip_id = value; + + retval = of_property_read_string(temp, "synaptics,chip-id-name", + &config_info->chip_id_name); + if (retval && (retval != -EINVAL)) { + dev_err(dev, "Unable to read chip id name\n"); + return retval; + } + + config_info->chip_is_tddi = of_property_read_bool(temp, "synaptics,chip-is-tddi"); + config_info->open_test_b7 = of_property_read_bool(temp, "synaptics,open-test-b7"); + config_info->short_test_extend = of_property_read_bool(temp, "synaptics,short-test-extend"); + config_info->is_factory_param = of_property_read_bool(temp, "synaptics,factory-param"); + + if (config_info->is_factory_param) { + factory_param = devm_kzalloc(dev, bdata->config_array_size * + sizeof(struct synaptics_dsx_factory_param), GFP_KERNEL); + if (!factory_param) { + dev_err(dev, "Unable to allocate memory\n"); + return -ENOMEM; + } + + config_info->factory_param = factory_param; + + retval = of_property_read_u32(temp, + "synaptics,tddi-short-limit_b", &value); + if (!retval) { + factory_param->tddi_short_limit_b = value; + } else { + factory_param->tddi_short_limit_b = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-noise-limit", &value); + if (!retval) { + factory_param->tddi_noise_limit = value; + } else { + factory_param->tddi_noise_limit = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-extend-ee-short-reset-dur", &value); + if (!retval) { + factory_param->tddi_extend_ee_short_reset_dur = value; + } else { + factory_param->tddi_extend_ee_short_reset_dur = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-extend-ee-short-int_dur", &value); + if (!retval) { + factory_param->tddi_extend_ee_short_int_dur = value; + } else { + factory_param->tddi_extend_ee_short_int_dur = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-extend-ee-short-tx-on-count", &value); + if (!retval) { + factory_param->tddi_extend_ee_short_tx_on_count = value; + } else { + factory_param->tddi_extend_ee_short_tx_on_count = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-extend-ee-short-rx-on-count", &value); + if (!retval) { + factory_param->tddi_extend_ee_short_rx_on_count = value; + } else { + factory_param->tddi_extend_ee_short_rx_on_count = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-extend-ee-short-test-limit-part1", &value); + if (!retval) { + factory_param->tddi_extend_ee_short_test_limit_part1 = value; + } else { + factory_param->tddi_extend_ee_short_test_limit_part1 = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-extend-ee-short-test-limit-part2", &value); + if (!retval) { + factory_param->tddi_extend_ee_short_test_limit_part2 = value; + } else { + factory_param->tddi_extend_ee_short_test_limit_part2 = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-open-test-int-dur-one", &value); + if (!retval) { + factory_param->tddi_open_test_int_dur_one = value; + } else { + factory_param->tddi_open_test_int_dur_one = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-open-test-int-dur-two", &value); + if (!retval) { + factory_param->tddi_open_test_int_dur_two = value; + } else { + factory_param->tddi_open_test_int_dur_two = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-open-test-limit-phase2-lower", &value); + if (!retval) { + factory_param->tddi_open_test_limit_phase2_lower = value; + } else { + factory_param->tddi_open_test_limit_phase2_lower = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-b7-open-test-int-dur-one", &value); + if (!retval) { + factory_param->tddi_b7_open_test_int_dur_one = value; + } else { + factory_param->tddi_b7_open_test_int_dur_one = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-b7-open-test-int-dur-two", &value); + if (!retval) { + factory_param->tddi_b7_open_test_int_dur_two = value; + } else { + factory_param->tddi_b7_open_test_int_dur_two = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-b7-open-test-limit-phase2-lower", &value); + if (!retval) { + factory_param->tddi_b7_open_test_limit_phase2_lower = value; + } else { + factory_param->tddi_b7_open_test_limit_phase2_lower = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,tddi-b7-open-test-limit-phase2-upper", &value); + if (!retval) { + factory_param->tddi_b7_open_test_limit_phase2_upper = value; + } else { + factory_param->tddi_b7_open_test_limit_phase2_upper = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,button-count", &value); + if (!retval) { + factory_param->button_count = value; + } else { + factory_param->button_count = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,abs-0d-open-factor", &value); + if (!retval) { + factory_param->abs_0d_open_factor = value; + } else { + factory_param->abs_0d_open_factor = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,abs-0d-open-test-limit", &value); + if (!retval) { + factory_param->abs_0d_open_test_limit = value; + } else { + factory_param->abs_0d_open_test_limit = 0; + } + } + + if (bdata->panel_is_incell) { + retval = of_property_read_u32(temp, + "synaptics,disp-pre-on-sleep", &value); + if (!retval) { + config_info->panel_power_seq.disp_pre_on_sleep = value; + } else { + config_info->panel_power_seq.disp_pre_on_sleep = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,disp-post-on-sleep", &value); + if (!retval) { + config_info->panel_power_seq.disp_post_on_sleep = value; + } else { + config_info->panel_power_seq.disp_post_on_sleep = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,disp-pre-off-sleep", &value); + if (!retval) { + config_info->panel_power_seq.disp_pre_off_sleep = value; + } else { + config_info->panel_power_seq.disp_pre_off_sleep = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,disp-post-off-sleep", &value); + if (!retval) { + config_info->panel_power_seq.disp_post_off_sleep = value; + } else { + config_info->panel_power_seq.disp_post_off_sleep = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,lab-pre-on-sleep", &value); + if (!retval) { + config_info->panel_power_seq.lab_pre_on_sleep = value; + } else { + config_info->panel_power_seq.lab_pre_on_sleep = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,lab-post-on-sleep", &value); + if (!retval) { + config_info->panel_power_seq.lab_post_on_sleep = value; + } else { + config_info->panel_power_seq.lab_post_on_sleep = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,lab-pre-off-sleep", &value); + if (!retval) { + config_info->panel_power_seq.lab_pre_off_sleep = value; + } else { + config_info->panel_power_seq.lab_pre_off_sleep = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,lab-post-off-sleep", &value); + if (!retval) { + config_info->panel_power_seq.lab_post_off_sleep = value; + } else { + config_info->panel_power_seq.lab_post_off_sleep = 0; + } + retval = of_property_read_u32(temp, + "synaptics,ibb-pre-on-sleep", &value); + if (!retval) { + config_info->panel_power_seq.ibb_pre_on_sleep = value; + } else { + config_info->panel_power_seq.ibb_pre_on_sleep = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,ibb-post-on-sleep", &value); + if (!retval) { + config_info->panel_power_seq.ibb_post_on_sleep = value; + } else { + config_info->panel_power_seq.ibb_post_on_sleep = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,ibb-pre-off-sleep", &value); + if (!retval) { + config_info->panel_power_seq.ibb_pre_off_sleep = value; + } else { + config_info->panel_power_seq.ibb_pre_off_sleep = 0; + } + + retval = of_property_read_u32(temp, + "synaptics,ibb-post-off-sleep", &value); + if (!retval) { + config_info->panel_power_seq.ibb_post_off_sleep = value; + } else { + config_info->panel_power_seq.ibb_post_off_sleep = 0; + } + } + + prop = of_find_property(temp, "synaptics,tp-id", NULL); + if (prop && prop->length) { + if (bdata->tp_id_num != prop->length / sizeof(u8)) { + dev_err(dev, "Invalid TP id length\n"); + return -EINVAL; + } + config_info->tp_ids = devm_kzalloc(dev, + prop->length, + GFP_KERNEL); + if (!config_info->tp_ids) + return -ENOMEM; + retval = of_property_read_u8_array(temp, + "synaptics,tp-id", + config_info->tp_ids, + bdata->tp_id_num); + if (retval < 0) { + dev_err(dev, "Error reading TP id\n"); + return -EINVAL; + } + } else if (bdata->tp_id_num == 0) { + /* No TP id indicated, skip */ + config_info->tp_ids = NULL; + } else { + dev_err(dev, "Cannot find TP id\n"); + return -EINVAL; + } + + retval = of_property_read_string(temp, "synaptics,fw-name", + &config_info->fw_name); + if (retval && (retval != -EINVAL)) { + dev_err(dev, "Unable to read firmware name\n"); + return retval; + } +#ifdef CONFIG_SYNAPTICS_TOUCH_COUNT_DUMP + if (bdata->dump_click_count) { + retval = of_property_read_string(temp, "synaptics,clicknum-file-name", + &config_info->clicknum_file_name); + if (retval && (retval != -EINVAL)) { + dev_err(dev, "Unable to read click count file name\n"); + } else + dev_err(dev, "%s\n", config_info->clicknum_file_name); + } +#endif + config_info++; + }; + + dump_dt(dev, bdata); + return 0; +} +#endif + +static int synaptics_rmi4_i2c_alloc_buf(struct synaptics_rmi4_data *rmi4_data, + unsigned int count) +{ + static unsigned int buf_size; + + if (count > buf_size) { + if (buf_size) + kfree(wr_buf); + wr_buf = kzalloc(count, GFP_KERNEL); + if (!wr_buf) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for buffer\n", + __func__); + buf_size = 0; + return -ENOMEM; + } + buf_size = count; + } + + return 0; +} + +static void synaptics_rmi4_i2c_check_addr(struct synaptics_rmi4_data *rmi4_data, + struct i2c_client *i2c) +{ + if (hw_if.board_data->ub_i2c_addr == -1) + return; + + if (hw_if.board_data->i2c_addr == i2c->addr) + hw_if.board_data->i2c_addr = hw_if.board_data->ub_i2c_addr; + else + hw_if.board_data->i2c_addr = i2c->addr; + + return; +} + +static int synaptics_rmi4_i2c_set_page(struct synaptics_rmi4_data *rmi4_data, + unsigned short addr) +{ + int retval; + unsigned char retry; + unsigned char buf[PAGE_SELECT_LEN]; + unsigned char page; + struct i2c_client *i2c = to_i2c_client(rmi4_data->pdev->dev.parent); + struct i2c_msg msg[1]; + + msg[0].addr = hw_if.board_data->i2c_addr; + msg[0].flags = 0; + msg[0].len = PAGE_SELECT_LEN; + msg[0].buf = buf; + + page = ((addr >> 8) & MASK_8BIT); + buf[0] = MASK_8BIT; + buf[1] = page; + + if (page != rmi4_data->current_page) { + for (retry = 0; retry < SYN_I2C_RETRY_TIMES; retry++) { + if (i2c_transfer(i2c->adapter, msg, 1) == 1) { + rmi4_data->current_page = page; + retval = PAGE_SELECT_LEN; + break; + } + dev_err(rmi4_data->pdev->dev.parent, + "%s: I2C retry %d\n", + __func__, retry + 1); + + if (retry != SYN_I2C_RETRY_TIMES) + msleep(5); + + if (retry == SYN_I2C_RETRY_TIMES / 2) { + synaptics_rmi4_i2c_check_addr(rmi4_data, i2c); + msg[0].addr = hw_if.board_data->i2c_addr; + } + } + } else { + retval = PAGE_SELECT_LEN; + } + + return retval; +} + +static int synaptics_rmi4_i2c_read(struct synaptics_rmi4_data *rmi4_data, + unsigned short addr, unsigned char *data, unsigned short length) +{ + int retval; + unsigned char retry; + unsigned char buf; + unsigned short i2c_addr; + unsigned short data_offset = 0; + struct i2c_client *i2c = to_i2c_client(rmi4_data->pdev->dev.parent); + struct i2c_adapter *adap = i2c->adapter; + struct i2c_msg msg[2]; + unsigned short index = 0; + unsigned short read_size; + unsigned short max_read_size; + unsigned short left_bytes = length; + + mutex_lock(&rmi4_data->rmi4_io_ctrl_mutex); + + retval = synaptics_rmi4_i2c_set_page(rmi4_data, addr); + if (retval != PAGE_SELECT_LEN) { + retval = -EIO; + goto exit; + } + + msg[0].addr = hw_if.board_data->i2c_addr; + msg[0].flags = 0; + msg[0].len = 1; + msg[0].buf = &buf; + + msg[1].addr = hw_if.board_data->i2c_addr; + msg[1].flags = I2C_M_RD; + +#ifdef I2C_BURST_LIMIT + max_read_size = I2C_BURST_LIMIT; +#else + max_read_size = length; +#endif + + do { + if (left_bytes / max_read_size) + read_size = max_read_size; + else + read_size = left_bytes; + + msg[1].len = read_size; + msg[1].buf = &data[data_offset + index]; + + buf = addr & MASK_8BIT; + + for (retry = 0; retry < SYN_I2C_RETRY_TIMES; retry++) { + if (left_bytes == length) { + retval = i2c_transfer(adap, &msg[0], 2); + if (retval == 2) + break; + } else { + retval = i2c_transfer(adap, &msg[1], 1); + if (retval == 1) + break; + } + + dev_err(rmi4_data->pdev->dev.parent, + "%s: I2C retry %d\n", + __func__, retry + 1); + msleep(20); + + if (retry == SYN_I2C_RETRY_TIMES / 2) { + synaptics_rmi4_i2c_check_addr(rmi4_data, i2c); + i2c_addr = hw_if.board_data->i2c_addr; + msg[0].addr = i2c_addr; + msg[1].addr = i2c_addr; + } + } + + if (retry == SYN_I2C_RETRY_TIMES) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: I2C read over retry limit\n", + __func__); + retval = -EIO; + goto exit; + } + + index += read_size; + left_bytes -= read_size; + } while (left_bytes); + + retval = length; + +exit: + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + + return retval; +} + +static int synaptics_rmi4_i2c_write(struct synaptics_rmi4_data *rmi4_data, + unsigned short addr, unsigned char *data, unsigned short length) +{ + int retval; + unsigned char retry; + struct i2c_client *i2c = to_i2c_client(rmi4_data->pdev->dev.parent); + struct i2c_msg msg[1]; + unsigned short index = 0; + unsigned short write_size; + unsigned short max_write_size; + unsigned short left_bytes = length; + +#ifdef MAX_WRITE_SIZE + max_write_size = MAX_WRITE_SIZE; +#else + max_write_size = length; +#endif + + retval = synaptics_rmi4_i2c_alloc_buf(rmi4_data, max_write_size + 1); + if (retval < 0) + return retval; + + mutex_lock(&rmi4_data->rmi4_io_ctrl_mutex); + + retval = synaptics_rmi4_i2c_set_page(rmi4_data, addr); + if (retval != PAGE_SELECT_LEN) { + retval = -EIO; + goto exit; + } + + do { + if (left_bytes / max_write_size) + write_size = max_write_size; + else + write_size = left_bytes; + + msg[0].addr = hw_if.board_data->i2c_addr; + msg[0].flags = 0; + msg[0].len = write_size + 1; + msg[0].buf = wr_buf; + + wr_buf[0] = addr & MASK_8BIT; + retval = secure_memcpy(&wr_buf[1], write_size, &data[index], write_size, write_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy data\n", + __func__); + goto exit; + } + + for (retry = 0; retry < SYN_I2C_RETRY_TIMES; retry++) { + if (i2c_transfer(i2c->adapter, msg, 1) == 1) { + retval = length; + break; + } + dev_err(rmi4_data->pdev->dev.parent, + "%s: I2C retry %d\n", + __func__, retry + 1); + msleep(20); + + if (retry == SYN_I2C_RETRY_TIMES / 2) { + synaptics_rmi4_i2c_check_addr(rmi4_data, i2c); + msg[0].addr = hw_if.board_data->i2c_addr; + } + } + + if (retry == SYN_I2C_RETRY_TIMES) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: I2C write over retry limit\n", + __func__); + retval = -EIO; + } + + index += write_size; + left_bytes -= write_size; + } while (left_bytes); + +exit: + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + + return retval; +} + +static struct synaptics_dsx_bus_access bus_access = { + .type = BUS_I2C, + .read = synaptics_rmi4_i2c_read, + .write = synaptics_rmi4_i2c_write, +}; + +static void synaptics_rmi4_i2c_dev_release(struct device *dev) +{ + kfree(synaptics_dsx_i2c_device); + + return; +} + +static int synaptics_rmi4_i2c_probe(struct i2c_client *client, + const struct i2c_device_id *dev_id) +{ + int retval; + + if (!i2c_check_functionality(client->adapter, + I2C_FUNC_SMBUS_BYTE_DATA)) { + dev_err(&client->dev, + "%s: SMBus byte data commands not supported by host\n", + __func__); + return -EIO; + } + + synaptics_dsx_i2c_device = kzalloc( + sizeof(struct platform_device), + GFP_KERNEL); + if (!synaptics_dsx_i2c_device) { + dev_err(&client->dev, + "%s: Failed to allocate memory for synaptics_dsx_i2c_device\n", + __func__); + return -ENOMEM; + } + +#ifdef CONFIG_OF + if (client->dev.of_node) { + hw_if.board_data = devm_kzalloc(&client->dev, + sizeof(struct synaptics_dsx_board_data), + GFP_KERNEL); + if (!hw_if.board_data) { + dev_err(&client->dev, + "%s: Failed to allocate memory for board data\n", + __func__); + return -ENOMEM; + } + hw_if.board_data->cap_button_map = devm_kzalloc(&client->dev, + sizeof(struct synaptics_dsx_button_map), + GFP_KERNEL); + if (!hw_if.board_data->cap_button_map) { + dev_err(&client->dev, + "%s: Failed to allocate memory for 0D button map\n", + __func__); + return -ENOMEM; + } + hw_if.board_data->vir_button_map = devm_kzalloc(&client->dev, + sizeof(struct synaptics_dsx_button_map), + GFP_KERNEL); + if (!hw_if.board_data->vir_button_map) { + dev_err(&client->dev, + "%s: Failed to allocate memory for virtual button map\n", + __func__); + return -ENOMEM; + } + parse_dt(&client->dev, hw_if.board_data); + } +#else + hw_if.board_data = client->dev.platform_data; +#endif + + hw_if.bus_access = &bus_access; + hw_if.board_data->i2c_addr = client->addr; + + synaptics_dsx_i2c_device->name = PLATFORM_DRIVER_FORCE; + synaptics_dsx_i2c_device->id = 0; + synaptics_dsx_i2c_device->num_resources = 0; + synaptics_dsx_i2c_device->dev.parent = &client->dev; + synaptics_dsx_i2c_device->dev.platform_data = &hw_if; + synaptics_dsx_i2c_device->dev.release = synaptics_rmi4_i2c_dev_release; + + retval = platform_device_register(synaptics_dsx_i2c_device); + if (retval) { + dev_err(&client->dev, + "%s: Failed to register platform device\n", + __func__); + return -ENODEV; + } + + return 0; +} + +static int synaptics_rmi4_i2c_remove(struct i2c_client *client) +{ + platform_device_unregister(synaptics_dsx_i2c_device); + + return 0; +} + +static const struct i2c_device_id synaptics_rmi4_id_table[] = { + {I2C_DRIVER_FORCE, 0}, + {}, +}; +MODULE_DEVICE_TABLE(i2c, synaptics_rmi4_id_table); + +#ifdef CONFIG_OF +static struct of_device_id synaptics_rmi4_of_match_table_force[] = { + { + .compatible = "synaptics,dsx-i2c-force", + }, + {}, +}; +MODULE_DEVICE_TABLE(of, synaptics_rmi4_of_match_table_force); +#else +#define synaptics_rmi4_of_match_table NULL +#endif + +static struct i2c_driver synaptics_rmi4_i2c_driver = { + .driver = { + .name = "synaptics_dsi_force", + .owner = THIS_MODULE, + .of_match_table = synaptics_rmi4_of_match_table_force, + }, + .probe = synaptics_rmi4_i2c_probe, + .remove = synaptics_rmi4_i2c_remove, + .id_table = synaptics_rmi4_id_table, +}; + +int synaptics_rmi4_bus_init_force(void) +{ + return i2c_add_driver(&synaptics_rmi4_i2c_driver); +} + +void synaptics_rmi4_bus_exit_force(void) +{ + kfree(wr_buf); + + i2c_del_driver(&synaptics_rmi4_i2c_driver); + + return; +} + +MODULE_AUTHOR("Synaptics, Inc."); +MODULE_DESCRIPTION("Synaptics DSX I2C Bus Support Module"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_proximity.c b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_proximity.c new file mode 100644 index 000000000000..7344812fbf52 --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_proximity.c @@ -0,0 +1,692 @@ +/* + * Synaptics DSX touchscreen driver + * + * Copyright (C) 2012-2015 Synaptics Incorporated. All rights reserved. + * + * Copyright (C) 2012 Alexandra Chin <alexandra.chin@tw.synaptics.com> + * Copyright (C) 2012 Scott Lin <scott.lin@tw.synaptics.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND SYNAPTICS + * EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, INCLUDING ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, + * AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS. + * IN NO EVENT SHALL SYNAPTICS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION + * WITH THE USE OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED + * AND BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF COMPETENT JURISDICTION DOES + * NOT PERMIT THE DISCLAIMER OF DIRECT DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' + * TOTAL CUMULATIVE LIABILITY TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. + * DOLLARS. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/interrupt.h> +#include <linux/delay.h> +#include <linux/input.h> +#include <linux/platform_device.h> +#include <linux/input/synaptics_dsx.h> +#include "synaptics_dsx_core.h" + +#define PROX_PHYS_NAME "synaptics_dsx/proximity" + +#define HOVER_Z_MAX (255) + +#define HOVERING_FINGER_EN (1 << 4) + +static ssize_t synaptics_rmi4_hover_finger_en_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t synaptics_rmi4_hover_finger_en_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static struct device_attribute attrs[] = { + __ATTR(hover_finger_en, (S_IRUGO | S_IWUGO), + synaptics_rmi4_hover_finger_en_show, + synaptics_rmi4_hover_finger_en_store), +}; + +struct synaptics_rmi4_f12_query_5 { + union { + struct { + unsigned char size_of_query6; + struct { + unsigned char ctrl0_is_present:1; + unsigned char ctrl1_is_present:1; + unsigned char ctrl2_is_present:1; + unsigned char ctrl3_is_present:1; + unsigned char ctrl4_is_present:1; + unsigned char ctrl5_is_present:1; + unsigned char ctrl6_is_present:1; + unsigned char ctrl7_is_present:1; + } __packed; + struct { + unsigned char ctrl8_is_present:1; + unsigned char ctrl9_is_present:1; + unsigned char ctrl10_is_present:1; + unsigned char ctrl11_is_present:1; + unsigned char ctrl12_is_present:1; + unsigned char ctrl13_is_present:1; + unsigned char ctrl14_is_present:1; + unsigned char ctrl15_is_present:1; + } __packed; + struct { + unsigned char ctrl16_is_present:1; + unsigned char ctrl17_is_present:1; + unsigned char ctrl18_is_present:1; + unsigned char ctrl19_is_present:1; + unsigned char ctrl20_is_present:1; + unsigned char ctrl21_is_present:1; + unsigned char ctrl22_is_present:1; + unsigned char ctrl23_is_present:1; + } __packed; + }; + unsigned char data[4]; + }; +}; + +struct synaptics_rmi4_f12_query_8 { + union { + struct { + unsigned char size_of_query9; + struct { + unsigned char data0_is_present:1; + unsigned char data1_is_present:1; + unsigned char data2_is_present:1; + unsigned char data3_is_present:1; + unsigned char data4_is_present:1; + unsigned char data5_is_present:1; + unsigned char data6_is_present:1; + unsigned char data7_is_present:1; + } __packed; + }; + unsigned char data[2]; + }; +}; + +struct prox_finger_data { + union { + struct { + unsigned char object_type_and_status; + unsigned char x_lsb; + unsigned char x_msb; + unsigned char y_lsb; + unsigned char y_msb; + unsigned char z; + } __packed; + unsigned char proximity_data[6]; + }; +}; + +struct synaptics_rmi4_prox_handle { + bool hover_finger_present; + bool hover_finger_en; + unsigned char intr_mask; + unsigned short query_base_addr; + unsigned short control_base_addr; + unsigned short data_base_addr; + unsigned short command_base_addr; + unsigned short hover_finger_en_addr; + unsigned short hover_finger_data_addr; + struct input_dev *prox_dev; + struct prox_finger_data *finger_data; + struct synaptics_rmi4_data *rmi4_data; +}; + +static struct synaptics_rmi4_prox_handle *prox; + +DECLARE_COMPLETION(prox_remove_complete); + +static void prox_hover_finger_lift(void) +{ + input_report_key(prox->prox_dev, BTN_TOUCH, 0); + input_report_key(prox->prox_dev, BTN_TOOL_FINGER, 0); + input_sync(prox->prox_dev); + prox->hover_finger_present = false; + + return; +} + +static void prox_hover_finger_report(void) +{ + int retval; + int x; + int y; + int z; + struct prox_finger_data *data; + struct synaptics_rmi4_data *rmi4_data = prox->rmi4_data; + + data = prox->finger_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + prox->hover_finger_data_addr, + data->proximity_data, + sizeof(data->proximity_data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read hovering finger data\n", + __func__); + return; + } + + if (data->object_type_and_status != F12_HOVERING_FINGER_STATUS) { + if (prox->hover_finger_present) + prox_hover_finger_lift(); + + return; + } + + x = (data->x_msb << 8) | (data->x_lsb); + y = (data->y_msb << 8) | (data->y_lsb); + z = HOVER_Z_MAX - data->z; + + input_report_key(prox->prox_dev, BTN_TOUCH, 0); + input_report_key(prox->prox_dev, BTN_TOOL_FINGER, 1); + input_report_abs(prox->prox_dev, ABS_X, x); + input_report_abs(prox->prox_dev, ABS_Y, y); + input_report_abs(prox->prox_dev, ABS_DISTANCE, z); + + input_sync(prox->prox_dev); + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: x = %d y = %d z = %d\n", + __func__, x, y, z); + + prox->hover_finger_present = true; + + return; +} + +static int prox_set_hover_finger_en(void) +{ + int retval; + unsigned char object_report_enable; + struct synaptics_rmi4_data *rmi4_data = prox->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + prox->hover_finger_en_addr, + &object_report_enable, + sizeof(object_report_enable)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read from object report enable register\n", + __func__); + return retval; + } + + if (prox->hover_finger_en) + object_report_enable |= HOVERING_FINGER_EN; + else + object_report_enable &= ~HOVERING_FINGER_EN; + + retval = synaptics_rmi4_reg_write(rmi4_data, + prox->hover_finger_en_addr, + &object_report_enable, + sizeof(object_report_enable)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write to object report enable register\n", + __func__); + return retval; + } + + return 0; +} + +static void prox_set_params(void) +{ + input_set_abs_params(prox->prox_dev, ABS_X, 0, + prox->rmi4_data->sensor_max_x, 0, 0); + input_set_abs_params(prox->prox_dev, ABS_Y, 0, + prox->rmi4_data->sensor_max_y, 0, 0); + input_set_abs_params(prox->prox_dev, ABS_DISTANCE, 0, + HOVER_Z_MAX, 0, 0); + + return; +} + +static int prox_reg_init(void) +{ + int retval; + unsigned char ctrl_23_offset; + unsigned char data_1_offset; + struct synaptics_rmi4_f12_query_5 query_5; + struct synaptics_rmi4_f12_query_8 query_8; + struct synaptics_rmi4_data *rmi4_data = prox->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + prox->query_base_addr + 5, + query_5.data, + sizeof(query_5.data)); + if (retval < 0) + return retval; + + ctrl_23_offset = query_5.ctrl0_is_present + + query_5.ctrl1_is_present + + query_5.ctrl2_is_present + + query_5.ctrl3_is_present + + query_5.ctrl4_is_present + + query_5.ctrl5_is_present + + query_5.ctrl6_is_present + + query_5.ctrl7_is_present + + query_5.ctrl8_is_present + + query_5.ctrl9_is_present + + query_5.ctrl10_is_present + + query_5.ctrl11_is_present + + query_5.ctrl12_is_present + + query_5.ctrl13_is_present + + query_5.ctrl14_is_present + + query_5.ctrl15_is_present + + query_5.ctrl16_is_present + + query_5.ctrl17_is_present + + query_5.ctrl18_is_present + + query_5.ctrl19_is_present + + query_5.ctrl20_is_present + + query_5.ctrl21_is_present + + query_5.ctrl22_is_present; + + prox->hover_finger_en_addr = prox->control_base_addr + ctrl_23_offset; + + retval = synaptics_rmi4_reg_read(rmi4_data, + prox->query_base_addr + 8, + query_8.data, + sizeof(query_8.data)); + if (retval < 0) + return retval; + + data_1_offset = query_8.data0_is_present; + prox->hover_finger_data_addr = prox->data_base_addr + data_1_offset; + + return retval; +} + +static int prox_scan_pdt(void) +{ + int retval; + unsigned char ii; + unsigned char page; + unsigned char intr_count = 0; + unsigned char intr_off; + unsigned char intr_src; + unsigned short addr; + struct synaptics_rmi4_fn_desc fd; + struct synaptics_rmi4_data *rmi4_data = prox->rmi4_data; + + for (page = 0; page < PAGES_TO_SERVICE; page++) { + for (addr = PDT_START; addr > PDT_END; addr -= PDT_ENTRY_SIZE) { + addr |= (page << 8); + + retval = synaptics_rmi4_reg_read(rmi4_data, + addr, + (unsigned char *)&fd, + sizeof(fd)); + if (retval < 0) + return retval; + + addr &= ~(MASK_8BIT << 8); + + if (fd.fn_number) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Found F%02x\n", + __func__, fd.fn_number); + switch (fd.fn_number) { + case SYNAPTICS_RMI4_F12: + goto f12_found; + break; + } + } else { + break; + } + + intr_count += fd.intr_src_count; + } + } + + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to find F12\n", + __func__); + return -EINVAL; + +f12_found: + prox->query_base_addr = fd.query_base_addr | (page << 8); + prox->control_base_addr = fd.ctrl_base_addr | (page << 8); + prox->data_base_addr = fd.data_base_addr | (page << 8); + prox->command_base_addr = fd.cmd_base_addr | (page << 8); + + retval = prox_reg_init(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to initialize proximity registers\n", + __func__); + return retval; + } + + prox->intr_mask = 0; + intr_src = fd.intr_src_count; + intr_off = intr_count % 8; + for (ii = intr_off; + ii < (intr_src + intr_off); + ii++) { + prox->intr_mask |= 1 << ii; + } + + rmi4_data->intr_mask[0] |= prox->intr_mask; + + addr = rmi4_data->f01_ctrl_base_addr + 1; + + retval = synaptics_rmi4_reg_write(rmi4_data, + addr, + &(rmi4_data->intr_mask[0]), + sizeof(rmi4_data->intr_mask[0])); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set interrupt enable bit\n", + __func__); + return retval; + } + + return 0; +} + +static ssize_t synaptics_rmi4_hover_finger_en_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + if (!prox) + return -ENODEV; + + return snprintf(buf, PAGE_SIZE, "%u\n", + prox->hover_finger_en); +} + +static ssize_t synaptics_rmi4_hover_finger_en_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned int input; + struct synaptics_rmi4_data *rmi4_data = prox->rmi4_data; + + if (!prox) + return -ENODEV; + + if (sscanf(buf, "%x", &input) != 1) + return -EINVAL; + + if (input == 1) + prox->hover_finger_en = true; + else if (input == 0) + prox->hover_finger_en = false; + else + return -EINVAL; + + retval = prox_set_hover_finger_en(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to change hovering finger enable setting\n", + __func__); + return retval; + } + + return count; +} + +int synaptics_rmi4_prox_hover_finger_en(bool enable) +{ + int retval; + + if (!prox) + return -ENODEV; + + prox->hover_finger_en = enable; + + retval = prox_set_hover_finger_en(); + if (retval < 0) + return retval; + + return 0; +} +EXPORT_SYMBOL(synaptics_rmi4_prox_hover_finger_en); + +static void synaptics_rmi4_prox_attn(struct synaptics_rmi4_data *rmi4_data, + unsigned char intr_mask) +{ + if (!prox) + return; + + if (prox->intr_mask & intr_mask) + prox_hover_finger_report(); + + return; +} + +static int synaptics_rmi4_prox_init(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + unsigned char attr_count; + + if (prox) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Handle already exists\n", + __func__); + return 0; + } + + prox = kzalloc(sizeof(*prox), GFP_KERNEL); + if (!prox) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for prox\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + prox->finger_data = kzalloc(sizeof(*(prox->finger_data)), GFP_KERNEL); + if (!prox->finger_data) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for finger_data\n", + __func__); + retval = -ENOMEM; + goto exit_free_prox; + } + + prox->rmi4_data = rmi4_data; + + retval = prox_scan_pdt(); + if (retval < 0) + goto exit_free_finger_data; + + prox->hover_finger_en = true; + + retval = prox_set_hover_finger_en(); + if (retval < 0) + return retval; + + prox->prox_dev = input_allocate_device(); + if (prox->prox_dev == NULL) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to allocate proximity device\n", + __func__); + retval = -ENOMEM; + goto exit_free_finger_data; + } + + prox->prox_dev->name = PROXIMITY_DRIVER_NAME; + prox->prox_dev->phys = PROX_PHYS_NAME; + prox->prox_dev->id.product = SYNAPTICS_DSX_DRIVER_PRODUCT; + prox->prox_dev->id.version = SYNAPTICS_DSX_DRIVER_VERSION; + prox->prox_dev->dev.parent = rmi4_data->pdev->dev.parent; + input_set_drvdata(prox->prox_dev, rmi4_data); + + set_bit(EV_KEY, prox->prox_dev->evbit); + set_bit(EV_ABS, prox->prox_dev->evbit); + set_bit(BTN_TOUCH, prox->prox_dev->keybit); + set_bit(BTN_TOOL_FINGER, prox->prox_dev->keybit); +#ifdef INPUT_PROP_DIRECT + set_bit(INPUT_PROP_DIRECT, prox->prox_dev->propbit); +#endif + + prox_set_params(); + + retval = input_register_device(prox->prox_dev); + if (retval) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to register proximity device\n", + __func__); + goto exit_free_input_device; + } + + for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) { + retval = sysfs_create_file(&rmi4_data->input_dev->dev.kobj, + &attrs[attr_count].attr); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create sysfs attributes\n", + __func__); + goto exit_free_sysfs; + } + } + + return 0; + +exit_free_sysfs: + for (attr_count--; attr_count >= 0; attr_count--) { + sysfs_remove_file(&rmi4_data->input_dev->dev.kobj, + &attrs[attr_count].attr); + } + + input_unregister_device(prox->prox_dev); + prox->prox_dev = NULL; + +exit_free_input_device: + if (prox->prox_dev) + input_free_device(prox->prox_dev); + +exit_free_finger_data: + kfree(prox->finger_data); + +exit_free_prox: + kfree(prox); + prox = NULL; + +exit: + return retval; +} + +static void synaptics_rmi4_prox_remove(struct synaptics_rmi4_data *rmi4_data) +{ + unsigned char attr_count; + + if (!prox) + goto exit; + + for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) { + sysfs_remove_file(&rmi4_data->input_dev->dev.kobj, + &attrs[attr_count].attr); + } + + input_unregister_device(prox->prox_dev); + kfree(prox->finger_data); + kfree(prox); + prox = NULL; + +exit: + complete(&prox_remove_complete); + + return; +} + +static void synaptics_rmi4_prox_reset(struct synaptics_rmi4_data *rmi4_data) +{ + if (!prox) { + synaptics_rmi4_prox_init(rmi4_data); + return; + } + + prox_hover_finger_lift(); + + prox_scan_pdt(); + + prox_set_hover_finger_en(); + + return; +} + +static void synaptics_rmi4_prox_reinit(struct synaptics_rmi4_data *rmi4_data) +{ + if (!prox) + return; + + prox_hover_finger_lift(); + + prox_set_hover_finger_en(); + + return; +} + +static void synaptics_rmi4_prox_e_suspend(struct synaptics_rmi4_data *rmi4_data) +{ + if (!prox) + return; + + prox_hover_finger_lift(); + + return; +} + +static void synaptics_rmi4_prox_suspend(struct synaptics_rmi4_data *rmi4_data) +{ + if (!prox) + return; + + prox_hover_finger_lift(); + + return; +} + +static struct synaptics_rmi4_exp_fn proximity_module = { + .fn_type = RMI_PROXIMITY, + .init = synaptics_rmi4_prox_init, + .remove = synaptics_rmi4_prox_remove, + .reset = synaptics_rmi4_prox_reset, + .reinit = synaptics_rmi4_prox_reinit, + .early_suspend = synaptics_rmi4_prox_e_suspend, + .suspend = synaptics_rmi4_prox_suspend, + .resume = NULL, + .late_resume = NULL, + .attn = synaptics_rmi4_prox_attn, +}; + +static int __init rmi4_proximity_module_init(void) +{ + synaptics_rmi4_new_function_force(&proximity_module, true); + + return 0; +} + +static void __exit rmi4_proximity_module_exit(void) +{ + synaptics_rmi4_new_function_force(&proximity_module, false); + + wait_for_completion(&prox_remove_complete); + + return; +} + +module_init(rmi4_proximity_module_init); +module_exit(rmi4_proximity_module_exit); + +MODULE_AUTHOR("Synaptics, Inc."); +MODULE_DESCRIPTION("Synaptics DSX Proximity Module"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_rmi_dev.c b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_rmi_dev.c new file mode 100644 index 000000000000..ca4b8abcfc8b --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_rmi_dev.c @@ -0,0 +1,1058 @@ +/* + * Synaptics DSX touchscreen driver + * + * Copyright (C) 2012-2015 Synaptics Incorporated. All rights reserved. + * + * Copyright (C) 2012 Alexandra Chin <alexandra.chin@tw.synaptics.com> + * Copyright (C) 2012 Scott Lin <scott.lin@tw.synaptics.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND SYNAPTICS + * EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, INCLUDING ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, + * AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS. + * IN NO EVENT SHALL SYNAPTICS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION + * WITH THE USE OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED + * AND BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF COMPETENT JURISDICTION DOES + * NOT PERMIT THE DISCLAIMER OF DIRECT DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' + * TOTAL CUMULATIVE LIABILITY TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. + * DOLLARS. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/interrupt.h> +#include <linux/delay.h> +#include <linux/input.h> +#include <linux/signal.h> +#include <linux/sched.h> +#include <linux/gpio.h> +#include <linux/uaccess.h> +#include <linux/cdev.h> +#include <linux/platform_device.h> +#include <linux/input/synaptics_dsx.h> +#include "synaptics_dsx_core.h" + +#define CHAR_DEVICE_NAME "rmi" +#define DEVICE_CLASS_NAME "rmidev" +#define SYSFS_FOLDER_NAME "rmidev" +#define DEV_NUMBER 1 +#define REG_ADDR_LIMIT 0xFFFF + +static ssize_t rmidev_sysfs_data_show(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count); + +static ssize_t rmidev_sysfs_data_store(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count); + +static ssize_t rmidev_sysfs_open_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t rmidev_sysfs_release_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t rmidev_sysfs_attn_state_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t rmidev_sysfs_pid_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t rmidev_sysfs_pid_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t rmidev_sysfs_term_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t rmidev_sysfs_intr_mask_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t rmidev_sysfs_intr_mask_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t rmidev_sysfs_concurrent_show(struct device *dev, + struct device_attribute *attr, char *buf); + +static ssize_t rmidev_sysfs_concurrent_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +struct rmidev_handle { + dev_t dev_no; + pid_t pid; + unsigned char intr_mask; + unsigned char *tmpbuf; + unsigned int tmpbuf_size; + struct device dev; + struct synaptics_rmi4_data *rmi4_data; + struct kobject *sysfs_dir; + struct siginfo interrupt_signal; + struct siginfo terminate_signal; + struct task_struct *task; + void *data; + bool concurrent; +}; + +struct rmidev_data { + int ref_count; + struct cdev main_dev; + struct class *device_class; + struct mutex file_mutex; + struct rmidev_handle *rmi_dev; +}; + +static struct bin_attribute attr_data = { + .attr = { + .name = "data", + .mode = (S_IRUGO | S_IWUGO), + }, + .size = 0, + .read = rmidev_sysfs_data_show, + .write = rmidev_sysfs_data_store, +}; + +static struct device_attribute attrs[] = { + __ATTR(open, S_IWUSR, + synaptics_rmi4_show_error, + rmidev_sysfs_open_store), + __ATTR(release, S_IWUSR, + synaptics_rmi4_show_error, + rmidev_sysfs_release_store), + __ATTR(attn_state, S_IRUGO, + rmidev_sysfs_attn_state_show, + synaptics_rmi4_store_error), + __ATTR(pid, S_IRUGO | S_IWUSR, + rmidev_sysfs_pid_show, + rmidev_sysfs_pid_store), + __ATTR(term, S_IWUSR, + synaptics_rmi4_show_error, + rmidev_sysfs_term_store), + __ATTR(intr_mask, S_IRUGO | S_IWUSR, + rmidev_sysfs_intr_mask_show, + rmidev_sysfs_intr_mask_store), + __ATTR(concurrent, S_IRUGO | S_IWUSR, + rmidev_sysfs_concurrent_show, + rmidev_sysfs_concurrent_store), +}; + +static int rmidev_major_num; + +static struct class *rmidev_device_class; + +static struct rmidev_handle *rmidev; + +DECLARE_COMPLETION(rmidev_remove_complete_force); + +static irqreturn_t rmidev_sysfs_irq(int irq, void *data) +{ + struct synaptics_rmi4_data *rmi4_data = data; + + sysfs_notify(&rmi4_data->input_dev->dev.kobj, + SYSFS_FOLDER_NAME, "attn_state"); + + return IRQ_HANDLED; +} + +static int rmidev_sysfs_irq_enable(struct synaptics_rmi4_data *rmi4_data, + bool enable) +{ + int retval = 0; + unsigned char intr_status[MAX_INTR_REGISTERS]; + unsigned long irq_flags = IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING | + IRQF_ONESHOT; + + mutex_lock(&(rmi4_data->rmi4_irq_enable_mutex)); + + if (enable) { + if (rmi4_data->irq_enabled) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Interrupt already enabled\n", + __func__); + goto exit; + } + + /* Clear interrupts first */ + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_data_base_addr + 1, + intr_status, + rmi4_data->num_of_intr_regs); + if (retval < 0) + goto exit; + + retval = request_threaded_irq(rmi4_data->irq, NULL, + rmidev_sysfs_irq, irq_flags, + PLATFORM_DRIVER_NAME, rmi4_data); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create irq thread\n", + __func__); + goto exit; + } + + rmi4_data->irq_enabled = true; + } else { + if (rmi4_data->irq_enabled) { + disable_irq(rmi4_data->irq); + free_irq(rmi4_data->irq, rmi4_data); + rmi4_data->irq_enabled = false; + } + } + +exit: + mutex_unlock(&(rmi4_data->rmi4_irq_enable_mutex)); + + return retval; +} + +static ssize_t rmidev_sysfs_data_show(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count) +{ + int retval; + unsigned char intr_status = 0; + unsigned int length = (unsigned int)count; + unsigned short address = (unsigned short)pos; + struct synaptics_rmi4_fn *fhandler; + struct synaptics_rmi4_device_info *rmi; + struct synaptics_rmi4_data *rmi4_data = rmidev->rmi4_data; + + rmi = &(rmi4_data->rmi4_mod_info); + + if (length > (REG_ADDR_LIMIT - address)) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Out of register map limit\n", + __func__); + return -EINVAL; + } + + if (length) { + retval = synaptics_rmi4_reg_read(rmi4_data, + address, + (unsigned char *)buf, + length); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read data\n", + __func__); + return retval; + } + } else { + return -EINVAL; + } + + if (!rmidev->concurrent) + goto exit; + + if (address != rmi4_data->f01_data_base_addr) + goto exit; + + if (length <= 1) + goto exit; + + intr_status = buf[1]; + + if (!list_empty(&rmi->support_fn_list)) { + list_for_each_entry(fhandler, &rmi->support_fn_list, link) { + if (fhandler->num_of_data_sources) { + if (fhandler->intr_mask & intr_status) { + rmi4_data->report_touch(rmi4_data, + fhandler); + } + } + } + } + +exit: + return length; +} + +static ssize_t rmidev_sysfs_data_store(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count) +{ + int retval; + unsigned int length = (unsigned int)count; + unsigned short address = (unsigned short)pos; + struct synaptics_rmi4_data *rmi4_data = rmidev->rmi4_data; + + if (length > (REG_ADDR_LIMIT - address)) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Out of register map limit\n", + __func__); + return -EINVAL; + } + + if (length) { + retval = synaptics_rmi4_reg_write(rmi4_data, + address, + (unsigned char *)buf, + length); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write data\n", + __func__); + return retval; + } + } else { + return -EINVAL; + } + + return length; +} + +static ssize_t rmidev_sysfs_open_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + unsigned int input; + struct synaptics_rmi4_data *rmi4_data = rmidev->rmi4_data; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + if (input != 1) + return -EINVAL; + + if (rmi4_data->sensor_sleep) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Sensor sleeping\n", + __func__); + return -ENODEV; + } + + rmi4_data->stay_awake = true; + + rmi4_data->irq_enable(rmi4_data, false, false); + rmidev_sysfs_irq_enable(rmi4_data, true); + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Attention interrupt disabled\n", + __func__); + + return count; +} + +static ssize_t rmidev_sysfs_release_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + unsigned int input; + struct synaptics_rmi4_data *rmi4_data = rmidev->rmi4_data; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + if (input != 1) + return -EINVAL; + + rmidev_sysfs_irq_enable(rmi4_data, false); + + rmi4_data->reset_device(rmi4_data, false); + + rmi4_data->stay_awake = false; + + return count; +} + +static ssize_t rmidev_sysfs_attn_state_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int attn_state; + struct synaptics_rmi4_data *rmi4_data = rmidev->rmi4_data; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + attn_state = gpio_get_value(bdata->irq_gpio); + + return snprintf(buf, PAGE_SIZE, "%u\n", attn_state); +} + +static ssize_t rmidev_sysfs_pid_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", rmidev->pid); +} + +static ssize_t rmidev_sysfs_pid_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + unsigned int input; + struct synaptics_rmi4_data *rmi4_data = rmidev->rmi4_data; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + rmidev->pid = input; + + if (rmidev->pid) { + rmidev->task = pid_task(find_vpid(rmidev->pid), PIDTYPE_PID); + if (!rmidev->task) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to locate PID of data logging tool\n", + __func__); + return -EINVAL; + } + } + + return count; +} + +static ssize_t rmidev_sysfs_term_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + unsigned int input; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + if (input != 1) + return -EINVAL; + + if (rmidev->pid) + send_sig_info(SIGTERM, &rmidev->terminate_signal, rmidev->task); + + return count; +} + +static ssize_t rmidev_sysfs_intr_mask_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "0x%02x\n", rmidev->intr_mask); +} + +static ssize_t rmidev_sysfs_intr_mask_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + unsigned int input; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + rmidev->intr_mask = (unsigned char)input; + + return count; +} + +static ssize_t rmidev_sysfs_concurrent_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%d\n", rmidev->concurrent); +} + +static ssize_t rmidev_sysfs_concurrent_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + unsigned int input; + + if (sscanf(buf, "%u", &input) != 1) + return -EINVAL; + + rmidev->concurrent = input > 0 ? true : false; + + return count; +} + +static int rmidev_allocate_buffer(int count) +{ + if (count + 1 > rmidev->tmpbuf_size) { + if (rmidev->tmpbuf_size) + kfree(rmidev->tmpbuf); + rmidev->tmpbuf = kzalloc(count + 1, GFP_KERNEL); + if (!rmidev->tmpbuf) { + dev_err(rmidev->rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for buffer\n", + __func__); + rmidev->tmpbuf_size = 0; + return -ENOMEM; + } + rmidev->tmpbuf_size = count + 1; + } + + return 0; +} + +/* + * rmidev_llseek - set register address to access for RMI device + * + * @filp: pointer to file structure + * @off: + * if whence == SEEK_SET, + * off: 16-bit RMI register address + * if whence == SEEK_CUR, + * off: offset from current position + * if whence == SEEK_END, + * off: offset from end position (0xFFFF) + * @whence: SEEK_SET, SEEK_CUR, or SEEK_END + */ +static loff_t rmidev_llseek(struct file *filp, loff_t off, int whence) +{ + loff_t newpos; + struct rmidev_data *dev_data = filp->private_data; + struct synaptics_rmi4_data *rmi4_data = rmidev->rmi4_data; + + if (IS_ERR(dev_data)) { + pr_err("%s: Pointer of char device data is invalid", __func__); + return -EBADF; + } + + mutex_lock(&(dev_data->file_mutex)); + + switch (whence) { + case SEEK_SET: + newpos = off; + break; + case SEEK_CUR: + newpos = filp->f_pos + off; + break; + case SEEK_END: + newpos = REG_ADDR_LIMIT + off; + break; + default: + newpos = -EINVAL; + goto clean_up; + } + + if (newpos < 0 || newpos > REG_ADDR_LIMIT) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: New position 0x%04x is invalid\n", + __func__, (unsigned int)newpos); + newpos = -EINVAL; + goto clean_up; + } + + filp->f_pos = newpos; + +clean_up: + mutex_unlock(&(dev_data->file_mutex)); + + return newpos; +} + +/* + * rmidev_read: read register data from RMI device + * + * @filp: pointer to file structure + * @buf: pointer to user space buffer + * @count: number of bytes to read + * @f_pos: starting RMI register address + */ +static ssize_t rmidev_read(struct file *filp, char __user *buf, + size_t count, loff_t *f_pos) +{ + ssize_t retval; + unsigned char intr_status = 0; + unsigned short address; + struct rmidev_data *dev_data = filp->private_data; + struct synaptics_rmi4_fn *fhandler; + struct synaptics_rmi4_device_info *rmi; + struct synaptics_rmi4_data *rmi4_data = rmidev->rmi4_data; + + rmi = &(rmi4_data->rmi4_mod_info); + + if (IS_ERR(dev_data)) { + pr_err("%s: Pointer of char device data is invalid", __func__); + return -EBADF; + } + + if (count == 0) + return 0; + + if (count > (REG_ADDR_LIMIT - *f_pos)) + count = REG_ADDR_LIMIT - *f_pos; + + address = (unsigned short)(*f_pos); + + mutex_lock(&(dev_data->file_mutex)); + + rmidev_allocate_buffer(count); + + retval = synaptics_rmi4_reg_read(rmidev->rmi4_data, + *f_pos, + rmidev->tmpbuf, + count); + if (retval < 0) + goto clean_up; + + if (copy_to_user(buf, rmidev->tmpbuf, count)) + retval = -EFAULT; + else + *f_pos += retval; + + if (!rmidev->concurrent) + goto clean_up; + + if (address != rmi4_data->f01_data_base_addr) + goto clean_up; + + if (count <= 1) + goto clean_up; + + intr_status = rmidev->tmpbuf[1]; + + if (!list_empty(&rmi->support_fn_list)) { + list_for_each_entry(fhandler, &rmi->support_fn_list, link) { + if (fhandler->num_of_data_sources) { + if (fhandler->intr_mask & intr_status) { + rmi4_data->report_touch(rmi4_data, + fhandler); + } + } + } + } + +clean_up: + mutex_unlock(&(dev_data->file_mutex)); + + return retval; +} + +/* + * rmidev_write: write register data to RMI device + * + * @filp: pointer to file structure + * @buf: pointer to user space buffer + * @count: number of bytes to write + * @f_pos: starting RMI register address + */ +static ssize_t rmidev_write(struct file *filp, const char __user *buf, + size_t count, loff_t *f_pos) +{ + ssize_t retval; + struct rmidev_data *dev_data = filp->private_data; + + if (IS_ERR(dev_data)) { + pr_err("%s: Pointer of char device data is invalid", __func__); + return -EBADF; + } + + if (count == 0) + return 0; + + if (count > (REG_ADDR_LIMIT - *f_pos)) + count = REG_ADDR_LIMIT - *f_pos; + + mutex_lock(&(dev_data->file_mutex)); + + rmidev_allocate_buffer(count); + + if (copy_from_user(rmidev->tmpbuf, buf, count)) { + mutex_unlock(&(dev_data->file_mutex)); + return -EFAULT; + } + + retval = synaptics_rmi4_reg_write(rmidev->rmi4_data, + *f_pos, + rmidev->tmpbuf, + count); + if (retval >= 0) + *f_pos += retval; + + mutex_unlock(&(dev_data->file_mutex)); + + return retval; +} + +static int rmidev_open(struct inode *inp, struct file *filp) +{ + int retval = 0; + struct synaptics_rmi4_data *rmi4_data = rmidev->rmi4_data; + struct rmidev_data *dev_data = + container_of(inp->i_cdev, struct rmidev_data, main_dev); + + if (!dev_data) + return -EACCES; + + if (rmi4_data->sensor_sleep) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Sensor sleeping\n", + __func__); + return -ENODEV; + } + + rmi4_data->stay_awake = true; + + filp->private_data = dev_data; + + mutex_lock(&(dev_data->file_mutex)); + + rmi4_data->irq_enable(rmi4_data, false, false); + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Attention interrupt disabled\n", + __func__); + + if (dev_data->ref_count < 1) + dev_data->ref_count++; + else + retval = -EACCES; + + mutex_unlock(&(dev_data->file_mutex)); + + return retval; +} + +static int rmidev_release(struct inode *inp, struct file *filp) +{ + struct synaptics_rmi4_data *rmi4_data = rmidev->rmi4_data; + struct rmidev_data *dev_data = + container_of(inp->i_cdev, struct rmidev_data, main_dev); + + if (!dev_data) + return -EACCES; + + mutex_lock(&(dev_data->file_mutex)); + + dev_data->ref_count--; + if (dev_data->ref_count < 0) + dev_data->ref_count = 0; + + rmi4_data->irq_enable(rmi4_data, true, false); + + rmi4_data->stay_awake = false; + + mutex_unlock(&(dev_data->file_mutex)); + + return 0; +} + +static const struct file_operations rmidev_fops = { + .owner = THIS_MODULE, + .llseek = rmidev_llseek, + .read = rmidev_read, + .write = rmidev_write, + .open = rmidev_open, + .release = rmidev_release, +}; + +static void rmidev_device_cleanup(struct rmidev_data *dev_data) +{ + dev_t devno; + struct synaptics_rmi4_data *rmi4_data = rmidev->rmi4_data; + + if (dev_data) { + devno = dev_data->main_dev.dev; + + if (dev_data->device_class) + device_destroy(dev_data->device_class, devno); + + cdev_del(&dev_data->main_dev); + + unregister_chrdev_region(devno, 1); + + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: rmidev device removed\n", + __func__); + } + + return; +} + +static char *rmi_char_devnode(struct device *dev, umode_t *mode) +{ + if (!mode) + return NULL; + + *mode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); + + return kasprintf(GFP_KERNEL, "rmi/%s", dev_name(dev)); +} + +static int rmidev_create_device_class(void) +{ + if (rmidev_device_class != NULL) + return 0; + + rmidev_device_class = class_create(THIS_MODULE, DEVICE_CLASS_NAME); + + if (IS_ERR(rmidev_device_class)) { + pr_err("%s: Failed to create /dev/%s\n", + __func__, CHAR_DEVICE_NAME); + return -ENODEV; + } + + rmidev_device_class->devnode = rmi_char_devnode; + + return 0; +} + +static void rmidev_attn(struct synaptics_rmi4_data *rmi4_data, + unsigned char intr_mask) +{ + if (!rmidev) + return; + + if (rmidev->pid && (rmidev->intr_mask & intr_mask)) + send_sig_info(SIGIO, &rmidev->interrupt_signal, rmidev->task); + + return; +} + +static int rmidev_init_device(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + dev_t dev_no; + unsigned char attr_count; + struct rmidev_data *dev_data; + struct device *device_ptr; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + if (rmidev) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Handle already exists\n", + __func__); + return 0; + } + + rmidev = kzalloc(sizeof(*rmidev), GFP_KERNEL); + if (!rmidev) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for rmidev\n", + __func__); + retval = -ENOMEM; + goto err_rmidev; + } + + rmidev->rmi4_data = rmi4_data; + + memset(&rmidev->interrupt_signal, 0, sizeof(rmidev->interrupt_signal)); + rmidev->interrupt_signal.si_signo = SIGIO; + rmidev->interrupt_signal.si_code = SI_USER; + + memset(&rmidev->terminate_signal, 0, sizeof(rmidev->terminate_signal)); + rmidev->terminate_signal.si_signo = SIGTERM; + rmidev->terminate_signal.si_code = SI_USER; + + retval = rmidev_create_device_class(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create device class\n", + __func__); + goto err_device_class; + } + + if (rmidev_major_num) { + dev_no = MKDEV(rmidev_major_num, DEV_NUMBER); + retval = register_chrdev_region(dev_no, 1, CHAR_DEVICE_NAME); + } else { + retval = alloc_chrdev_region(&dev_no, 0, 1, CHAR_DEVICE_NAME); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to allocate char device region\n", + __func__); + goto err_device_region; + } + + rmidev_major_num = MAJOR(dev_no); + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Major number of rmidev = %d\n", + __func__, rmidev_major_num); + } + + dev_data = kzalloc(sizeof(*dev_data), GFP_KERNEL); + if (!dev_data) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for dev_data\n", + __func__); + retval = -ENOMEM; + goto err_dev_data; + } + + mutex_init(&dev_data->file_mutex); + dev_data->rmi_dev = rmidev; + rmidev->data = dev_data; + + cdev_init(&dev_data->main_dev, &rmidev_fops); + + retval = cdev_add(&dev_data->main_dev, dev_no, 1); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to add rmi char device\n", + __func__); + goto err_char_device; + } + + dev_set_name(&rmidev->dev, "rmidev%d", MINOR(dev_no)); + dev_data->device_class = rmidev_device_class; + + device_ptr = device_create(dev_data->device_class, NULL, dev_no, + NULL, CHAR_DEVICE_NAME"%d", MINOR(dev_no)); + if (IS_ERR(device_ptr)) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create rmi char device\n", + __func__); + retval = -ENODEV; + goto err_char_device; + } + + retval = gpio_export(bdata->irq_gpio, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to export attention gpio\n", + __func__); + } else { + retval = gpio_export_link(&(rmi4_data->input_dev->dev), + "attn", bdata->irq_gpio); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s Failed to create gpio symlink\n", + __func__); + } else { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Exported attention gpio %d\n", + __func__, bdata->irq_gpio); + } + } + + rmidev->sysfs_dir = kobject_create_and_add(SYSFS_FOLDER_NAME, + &rmi4_data->input_dev->dev.kobj); + if (!rmidev->sysfs_dir) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create sysfs directory\n", + __func__); + retval = -ENODEV; + goto err_sysfs_dir; + } + + retval = sysfs_create_bin_file(rmidev->sysfs_dir, + &attr_data); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create sysfs bin file\n", + __func__); + goto err_sysfs_bin; + } + + for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) { + retval = sysfs_create_file(rmidev->sysfs_dir, + &attrs[attr_count].attr); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create sysfs attributes\n", + __func__); + retval = -ENODEV; + goto err_sysfs_attrs; + } + } + + return 0; + +err_sysfs_attrs: + for (attr_count--; attr_count >= 0; attr_count--) + sysfs_remove_file(rmidev->sysfs_dir, &attrs[attr_count].attr); + + sysfs_remove_bin_file(rmidev->sysfs_dir, &attr_data); + +err_sysfs_bin: + kobject_put(rmidev->sysfs_dir); + +err_sysfs_dir: +err_char_device: + rmidev_device_cleanup(dev_data); + kfree(dev_data); + +err_dev_data: + unregister_chrdev_region(dev_no, 1); + +err_device_region: + if (rmidev_device_class != NULL) { + class_destroy(rmidev_device_class); + rmidev_device_class = NULL; + } + +err_device_class: + kfree(rmidev); + rmidev = NULL; + +err_rmidev: + return retval; +} + +static void rmidev_remove_device(struct synaptics_rmi4_data *rmi4_data) +{ + unsigned char attr_count; + struct rmidev_data *dev_data; + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + if (!rmidev) + goto exit; + + for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) + sysfs_remove_file(rmidev->sysfs_dir, &attrs[attr_count].attr); + + sysfs_remove_bin_file(rmidev->sysfs_dir, &attr_data); + + kobject_put(rmidev->sysfs_dir); + + gpio_unexport(bdata->irq_gpio); + + dev_data = rmidev->data; + if (dev_data) { + rmidev_device_cleanup(dev_data); + kfree(dev_data); + } + + unregister_chrdev_region(rmidev->dev_no, 1); + + if (rmidev_device_class != NULL) { + class_destroy(rmidev_device_class); + rmidev_device_class = NULL; + } + + kfree(rmidev->tmpbuf); + + kfree(rmidev); + rmidev = NULL; + +exit: + complete(&rmidev_remove_complete_force); + + return; +} + +static struct synaptics_rmi4_exp_fn rmidev_module = { + .fn_type = RMI_DEV, + .init = rmidev_init_device, + .remove = rmidev_remove_device, + .reset = NULL, + .reinit = NULL, + .early_suspend = NULL, + .suspend = NULL, + .resume = NULL, + .late_resume = NULL, + .attn = rmidev_attn, +}; + +static int __init rmidev_module_init(void) +{ + synaptics_rmi4_new_function_force(&rmidev_module, true); + + return 0; +} + +static void __exit rmidev_module_exit(void) +{ + synaptics_rmi4_new_function_force(&rmidev_module, false); + + wait_for_completion(&rmidev_remove_complete_force); + + return; +} + +module_init(rmidev_module_init); +module_exit(rmidev_module_exit); + +MODULE_AUTHOR("Synaptics, Inc."); +MODULE_DESCRIPTION("Synaptics DSX RMI Dev Module"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_rmi_hid_i2c.c b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_rmi_hid_i2c.c new file mode 100644 index 000000000000..91e18ddb1ee7 --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_rmi_hid_i2c.c @@ -0,0 +1,1004 @@ +/* + * Synaptics DSX touchscreen driver + * + * Copyright (C) 2012-2015 Synaptics Incorporated. All rights reserved. + * + * Copyright (C) 2012 Alexandra Chin <alexandra.chin@tw.synaptics.com> + * Copyright (C) 2012 Scott Lin <scott.lin@tw.synaptics.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND SYNAPTICS + * EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, INCLUDING ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, + * AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS. + * IN NO EVENT SHALL SYNAPTICS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION + * WITH THE USE OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED + * AND BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF COMPETENT JURISDICTION DOES + * NOT PERMIT THE DISCLAIMER OF DIRECT DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' + * TOTAL CUMULATIVE LIABILITY TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. + * DOLLARS. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/interrupt.h> +#include <linux/i2c.h> +#include <linux/delay.h> +#include <linux/input.h> +#include <linux/gpio.h> +#include <linux/types.h> +#include <linux/of_gpio.h> +#include <linux/platform_device.h> +#include <linux/input/synaptics_dsx.h> +#include "synaptics_dsx_core.h" + +#define SYN_I2C_RETRY_TIMES 10 + +#define REPORT_ID_GET_BLOB 0x07 +#define REPORT_ID_WRITE 0x09 +#define REPORT_ID_READ_ADDRESS 0x0a +#define REPORT_ID_READ_DATA 0x0b +#define REPORT_ID_SET_RMI_MODE 0x0f + +#define PREFIX_USAGE_PAGE_1BYTE 0x05 +#define PREFIX_USAGE_PAGE_2BYTES 0x06 +#define PREFIX_USAGE 0x09 +#define PREFIX_REPORT_ID 0x85 +#define PREFIX_REPORT_COUNT_1BYTE 0x95 +#define PREFIX_REPORT_COUNT_2BYTES 0x96 + +#define USAGE_GET_BLOB 0xc5 +#define USAGE_WRITE 0x02 +#define USAGE_READ_ADDRESS 0x03 +#define USAGE_READ_DATA 0x04 +#define USAGE_SET_MODE 0x06 + +#define FEATURE_REPORT_TYPE 0x03 + +#define VENDOR_DEFINED_PAGE 0xff00 + +#define BLOB_REPORT_SIZE 256 + +#define RESET_COMMAND 0x01 +#define GET_REPORT_COMMAND 0x02 +#define SET_REPORT_COMMAND 0x03 +#define SET_POWER_COMMAND 0x08 + +#define FINGER_MODE 0x00 +#define RMI_MODE 0x02 + +struct hid_report_info { + unsigned char get_blob_id; + unsigned char write_id; + unsigned char read_addr_id; + unsigned char read_data_id; + unsigned char set_mode_id; + unsigned int blob_size; +}; + +static struct hid_report_info hid_report; + +struct hid_device_descriptor { + unsigned short device_descriptor_length; + unsigned short format_version; + unsigned short report_descriptor_length; + unsigned short report_descriptor_index; + unsigned short input_register_index; + unsigned short input_report_max_length; + unsigned short output_register_index; + unsigned short output_report_max_length; + unsigned short command_register_index; + unsigned short data_register_index; + unsigned short vendor_id; + unsigned short product_id; + unsigned short version_id; + unsigned int reserved; +}; + +static struct hid_device_descriptor hid_dd; + +struct i2c_rw_buffer { + unsigned char *read; + unsigned char *write; + unsigned short read_size; + unsigned short write_size; +}; + +static struct i2c_rw_buffer buffer; + +#ifdef CONFIG_OF +static int parse_dt(struct device *dev, struct synaptics_dsx_board_data *bdata) +{ + int retval; + u32 value; + const char *name; + struct property *prop; + struct device_node *np = dev->of_node; + + bdata->irq_gpio = of_get_named_gpio_flags(np, + "synaptics,irq-gpio", 0, + (enum of_gpio_flags *)&bdata->irq_flags); + + retval = of_property_read_u32(np, "synaptics,irq-on-state", + &value); + if (retval < 0) + bdata->irq_on_state = 0; + else + bdata->irq_on_state = value; + + retval = of_property_read_string(np, "synaptics,pwr-reg-name", &name); + if (retval < 0) + bdata->pwr_reg_name = NULL; + else + bdata->pwr_reg_name = name; + + retval = of_property_read_string(np, "synaptics,bus-reg-name", &name); + if (retval < 0) + bdata->bus_reg_name = NULL; + else + bdata->bus_reg_name = name; + + prop = of_find_property(np, "synaptics,power-gpio", NULL); + if (prop && prop->length) { + bdata->power_gpio = of_get_named_gpio_flags(np, + "synaptics,power-gpio", 0, NULL); + retval = of_property_read_u32(np, "synaptics,power-on-state", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,power-on-state property\n", + __func__); + return retval; + } else { + bdata->power_on_state = value; + } + } else { + bdata->power_gpio = -1; + } + + prop = of_find_property(np, "synaptics,power-delay-ms", NULL); + if (prop && prop->length) { + retval = of_property_read_u32(np, "synaptics,power-delay-ms", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,power-delay-ms property\n", + __func__); + return retval; + } else { + bdata->power_delay_ms = value; + } + } else { + bdata->power_delay_ms = 0; + } + + prop = of_find_property(np, "synaptics,reset-gpio", NULL); + if (prop && prop->length) { + bdata->reset_gpio = of_get_named_gpio_flags(np, + "synaptics,reset-gpio", 0, NULL); + retval = of_property_read_u32(np, "synaptics,reset-on-state", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,reset-on-state property\n", + __func__); + return retval; + } else { + bdata->reset_on_state = value; + } + retval = of_property_read_u32(np, "synaptics,reset-active-ms", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,reset-active-ms property\n", + __func__); + return retval; + } else { + bdata->reset_active_ms = value; + } + } else { + bdata->reset_gpio = -1; + } + + prop = of_find_property(np, "synaptics,reset-delay-ms", NULL); + if (prop && prop->length) { + retval = of_property_read_u32(np, "synaptics,reset-delay-ms", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,reset-delay-ms property\n", + __func__); + return retval; + } else { + bdata->reset_delay_ms = value; + } + } else { + bdata->reset_delay_ms = 0; + } + + prop = of_find_property(np, "synaptics,dev-dscrptr-addr", NULL); + if (prop && prop->length) { + retval = of_property_read_u32(np, "synaptics,dev-dscrptr-addr", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,dev-dscrptr-addr property\n", + __func__); + return retval; + } else { + bdata->device_descriptor_addr = (unsigned short)value; + } + } else { + bdata->device_descriptor_addr = 0; + } + + prop = of_find_property(np, "synaptics,max-y-for-2d", NULL); + if (prop && prop->length) { + retval = of_property_read_u32(np, "synaptics,max-y-for-2d", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,max-y-for-2d property\n", + __func__); + return retval; + } else { + bdata->max_y_for_2d = value; + } + } else { + bdata->max_y_for_2d = -1; + } + + prop = of_find_property(np, "synaptics,swap-axes", NULL); + bdata->swap_axes = prop > 0 ? true : false; + + prop = of_find_property(np, "synaptics,x-flip", NULL); + bdata->x_flip = prop > 0 ? true : false; + + prop = of_find_property(np, "synaptics,y-flip", NULL); + bdata->y_flip = prop > 0 ? true : false; + + prop = of_find_property(np, "synaptics,ub-i2c-addr", NULL); + if (prop && prop->length) { + retval = of_property_read_u32(np, "synaptics,ub-i2c-addr", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,ub-i2c-addr property\n", + __func__); + return retval; + } else { + bdata->ub_i2c_addr = (unsigned short)value; + } + } else { + bdata->ub_i2c_addr = -1; + } + + prop = of_find_property(np, "synaptics,cap-button-codes", NULL); + if (prop && prop->length) { + bdata->cap_button_map->map = devm_kzalloc(dev, + prop->length, + GFP_KERNEL); + if (!bdata->cap_button_map->map) + return -ENOMEM; + bdata->cap_button_map->nbuttons = prop->length / sizeof(u32); + retval = of_property_read_u32_array(np, + "synaptics,cap-button-codes", + bdata->cap_button_map->map, + bdata->cap_button_map->nbuttons); + if (retval < 0) { + bdata->cap_button_map->nbuttons = 0; + bdata->cap_button_map->map = NULL; + } + } else { + bdata->cap_button_map->nbuttons = 0; + bdata->cap_button_map->map = NULL; + } + + prop = of_find_property(np, "synaptics,vir-button-codes", NULL); + if (prop && prop->length) { + bdata->vir_button_map->map = devm_kzalloc(dev, + prop->length, + GFP_KERNEL); + if (!bdata->vir_button_map->map) + return -ENOMEM; + bdata->vir_button_map->nbuttons = prop->length / sizeof(u32); + bdata->vir_button_map->nbuttons /= 5; + retval = of_property_read_u32_array(np, + "synaptics,vir-button-codes", + bdata->vir_button_map->map, + bdata->vir_button_map->nbuttons * 5); + if (retval < 0) { + bdata->vir_button_map->nbuttons = 0; + bdata->vir_button_map->map = NULL; + } + } else { + bdata->vir_button_map->nbuttons = 0; + bdata->vir_button_map->map = NULL; + } + + return 0; +} +#endif + +static int do_i2c_transfer(struct i2c_client *client, struct i2c_msg *msg) +{ + unsigned char retry; + + for (retry = 0; retry < SYN_I2C_RETRY_TIMES; retry++) { + if (i2c_transfer(client->adapter, msg, 1) == 1) + break; + dev_err(&client->dev, + "%s: I2C retry %d\n", + __func__, retry + 1); + msleep(20); + } + + if (retry == SYN_I2C_RETRY_TIMES) { + dev_err(&client->dev, + "%s: I2C transfer over retry limit\n", + __func__); + return -EIO; + } + + return 0; +} + +static int check_buffer(unsigned char **buffer, unsigned short *buffer_size, + unsigned short length) +{ + if (*buffer_size < length) { + if (*buffer_size) + kfree(*buffer); + *buffer = kzalloc(length, GFP_KERNEL); + if (!(*buffer)) + return -ENOMEM; + *buffer_size = length; + } + + return 0; +} + +static int generic_read(struct i2c_client *client, unsigned short length) +{ + int retval; + struct i2c_msg msg[] = { + { + .addr = client->addr, + .flags = I2C_M_RD, + .len = length, + } + }; + + check_buffer(&buffer.read, &buffer.read_size, length); + msg[0].buf = buffer.read; + + retval = do_i2c_transfer(client, msg); + + return retval; +} + +static int generic_write(struct i2c_client *client, unsigned short length) +{ + int retval; + struct i2c_msg msg[] = { + { + .addr = client->addr, + .flags = 0, + .len = length, + .buf = buffer.write, + } + }; + + retval = do_i2c_transfer(client, msg); + + return retval; +} + +static void traverse_report_descriptor(unsigned int *index) +{ + unsigned char size; + unsigned char *buf = buffer.read; + + size = buf[*index] & MASK_2BIT; + switch (size) { + case 0: /* 0 bytes */ + *index += 1; + break; + case 1: /* 1 byte */ + *index += 2; + break; + case 2: /* 2 bytes */ + *index += 3; + break; + case 3: /* 4 bytes */ + *index += 5; + break; + default: + break; + } + + return; +} + +static void find_blob_size(unsigned int index) +{ + unsigned int ii = index; + unsigned char *buf = buffer.read; + + while (ii < hid_dd.report_descriptor_length) { + if (buf[ii] == PREFIX_REPORT_COUNT_1BYTE) { + hid_report.blob_size = buf[ii + 1]; + return; + } else if (buf[ii] == PREFIX_REPORT_COUNT_2BYTES) { + hid_report.blob_size = buf[ii + 1] | (buf[ii + 2] << 8); + return; + } + traverse_report_descriptor(&ii); + } + + return; +} + +static void find_reports(unsigned int index) +{ + unsigned int ii = index; + unsigned char *buf = buffer.read; + static unsigned int report_id_index; + static unsigned char report_id; + static unsigned short usage_page; + + if (buf[ii] == PREFIX_REPORT_ID) { + report_id = buf[ii + 1]; + report_id_index = ii; + return; + } + + if (buf[ii] == PREFIX_USAGE_PAGE_1BYTE) { + usage_page = buf[ii + 1]; + return; + } else if (buf[ii] == PREFIX_USAGE_PAGE_2BYTES) { + usage_page = buf[ii + 1] | (buf[ii + 2] << 8); + return; + } + + if ((usage_page == VENDOR_DEFINED_PAGE) && (buf[ii] == PREFIX_USAGE)) { + switch (buf[ii + 1]) { + case USAGE_GET_BLOB: + hid_report.get_blob_id = report_id; + find_blob_size(report_id_index); + break; + case USAGE_WRITE: + hid_report.write_id = report_id; + break; + case USAGE_READ_ADDRESS: + hid_report.read_addr_id = report_id; + break; + case USAGE_READ_DATA: + hid_report.read_data_id = report_id; + break; + case USAGE_SET_MODE: + hid_report.set_mode_id = report_id; + break; + default: + break; + } + } + + return; +} + +static int parse_report_descriptor(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + unsigned int ii = 0; + unsigned char *buf; + struct i2c_client *i2c = to_i2c_client(rmi4_data->pdev->dev.parent); + + buffer.write[0] = hid_dd.report_descriptor_index & MASK_8BIT; + buffer.write[1] = hid_dd.report_descriptor_index >> 8; + retval = generic_write(i2c, 2); + if (retval < 0) + return retval; + retval = generic_read(i2c, hid_dd.report_descriptor_length); + if (retval < 0) + return retval; + + buf = buffer.read; + + hid_report.get_blob_id = REPORT_ID_GET_BLOB; + hid_report.write_id = REPORT_ID_WRITE; + hid_report.read_addr_id = REPORT_ID_READ_ADDRESS; + hid_report.read_data_id = REPORT_ID_READ_DATA; + hid_report.set_mode_id = REPORT_ID_SET_RMI_MODE; + hid_report.blob_size = BLOB_REPORT_SIZE; + + while (ii < hid_dd.report_descriptor_length) { + find_reports(ii); + traverse_report_descriptor(&ii); + } + + return 0; +} + +static int switch_to_rmi(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + struct i2c_client *i2c = to_i2c_client(rmi4_data->pdev->dev.parent); + + mutex_lock(&rmi4_data->rmi4_io_ctrl_mutex); + + check_buffer(&buffer.write, &buffer.write_size, 11); + + /* set rmi mode */ + buffer.write[0] = hid_dd.command_register_index & MASK_8BIT; + buffer.write[1] = hid_dd.command_register_index >> 8; + buffer.write[2] = (FEATURE_REPORT_TYPE << 4) | hid_report.set_mode_id; + buffer.write[3] = SET_REPORT_COMMAND; + buffer.write[4] = hid_report.set_mode_id; + buffer.write[5] = hid_dd.data_register_index & MASK_8BIT; + buffer.write[6] = hid_dd.data_register_index >> 8; + buffer.write[7] = 0x04; + buffer.write[8] = 0x00; + buffer.write[9] = hid_report.set_mode_id; + buffer.write[10] = RMI_MODE; + + retval = generic_write(i2c, 11); + + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + + return retval; +} + +static int check_report_mode(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + unsigned short report_size; + struct i2c_client *i2c = to_i2c_client(rmi4_data->pdev->dev.parent); + + mutex_lock(&rmi4_data->rmi4_io_ctrl_mutex); + + check_buffer(&buffer.write, &buffer.write_size, 7); + + buffer.write[0] = hid_dd.command_register_index & MASK_8BIT; + buffer.write[1] = hid_dd.command_register_index >> 8; + buffer.write[2] = (FEATURE_REPORT_TYPE << 4) | hid_report.set_mode_id; + buffer.write[3] = GET_REPORT_COMMAND; + buffer.write[4] = hid_report.set_mode_id; + buffer.write[5] = hid_dd.data_register_index & MASK_8BIT; + buffer.write[6] = hid_dd.data_register_index >> 8; + + retval = generic_write(i2c, 7); + if (retval < 0) + goto exit; + + retval = generic_read(i2c, 2); + if (retval < 0) + goto exit; + + report_size = (buffer.read[1] << 8) | buffer.read[0]; + + retval = generic_write(i2c, 7); + if (retval < 0) + goto exit; + + retval = generic_read(i2c, report_size); + if (retval < 0) + goto exit; + + retval = buffer.read[3]; + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Report mode = %d\n", + __func__, retval); + +exit: + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + + return retval; +} + +static int hid_i2c_init(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + struct i2c_client *i2c = to_i2c_client(rmi4_data->pdev->dev.parent); + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + mutex_lock(&rmi4_data->rmi4_io_ctrl_mutex); + + check_buffer(&buffer.write, &buffer.write_size, 6); + + /* read device descriptor */ + buffer.write[0] = bdata->device_descriptor_addr & MASK_8BIT; + buffer.write[1] = bdata->device_descriptor_addr >> 8; + retval = generic_write(i2c, 2); + if (retval < 0) + goto exit; + retval = generic_read(i2c, sizeof(hid_dd)); + if (retval < 0) + goto exit; + retval = secure_memcpy((unsigned char *)&hid_dd, + sizeof(struct hid_device_descriptor), + buffer.read, + buffer.read_size, + sizeof(hid_dd)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy device descriptor data\n", + __func__); + goto exit; + } + + retval = parse_report_descriptor(rmi4_data); + if (retval < 0) + goto exit; + + /* set power */ + buffer.write[0] = hid_dd.command_register_index & MASK_8BIT; + buffer.write[1] = hid_dd.command_register_index >> 8; + buffer.write[2] = 0x00; + buffer.write[3] = SET_POWER_COMMAND; + retval = generic_write(i2c, 4); + if (retval < 0) + goto exit; + + /* reset */ + buffer.write[0] = hid_dd.command_register_index & MASK_8BIT; + buffer.write[1] = hid_dd.command_register_index >> 8; + buffer.write[2] = 0x00; + buffer.write[3] = RESET_COMMAND; + retval = generic_write(i2c, 4); + if (retval < 0) + goto exit; + + while (gpio_get_value(bdata->irq_gpio)) + msleep(20); + + retval = generic_read(i2c, hid_dd.input_report_max_length); + if (retval < 0) + goto exit; + + /* get blob */ + buffer.write[0] = hid_dd.command_register_index & MASK_8BIT; + buffer.write[1] = hid_dd.command_register_index >> 8; + buffer.write[2] = (FEATURE_REPORT_TYPE << 4) | hid_report.get_blob_id; + buffer.write[3] = 0x02; + buffer.write[4] = hid_dd.data_register_index & MASK_8BIT; + buffer.write[5] = hid_dd.data_register_index >> 8; + + retval = generic_write(i2c, 6); + if (retval < 0) + goto exit; + + msleep(20); + + retval = generic_read(i2c, hid_report.blob_size + 3); + if (retval < 0) + goto exit; + +exit: + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to initialize HID/I2C interface\n", + __func__); + return retval; + } + + retval = switch_to_rmi(rmi4_data); + + return retval; +} + +static int synaptics_rmi4_i2c_read(struct synaptics_rmi4_data *rmi4_data, + unsigned short addr, unsigned char *data, unsigned short length) +{ + int retval; + unsigned char retry; + unsigned char recover = 1; + unsigned short report_length; + struct i2c_client *i2c = to_i2c_client(rmi4_data->pdev->dev.parent); + struct i2c_msg msg[] = { + { + .addr = i2c->addr, + .flags = 0, + .len = hid_dd.output_report_max_length + 2, + }, + { + .addr = i2c->addr, + .flags = I2C_M_RD, + .len = length + 4, + }, + }; + +recover: + mutex_lock(&rmi4_data->rmi4_io_ctrl_mutex); + + check_buffer(&buffer.write, &buffer.write_size, + hid_dd.output_report_max_length + 2); + msg[0].buf = buffer.write; + buffer.write[0] = hid_dd.output_register_index & MASK_8BIT; + buffer.write[1] = hid_dd.output_register_index >> 8; + buffer.write[2] = hid_dd.output_report_max_length & MASK_8BIT; + buffer.write[3] = hid_dd.output_report_max_length >> 8; + buffer.write[4] = hid_report.read_addr_id; + buffer.write[5] = 0x00; + buffer.write[6] = addr & MASK_8BIT; + buffer.write[7] = addr >> 8; + buffer.write[8] = length & MASK_8BIT; + buffer.write[9] = length >> 8; + + check_buffer(&buffer.read, &buffer.read_size, length + 4); + msg[1].buf = buffer.read; + + retval = do_i2c_transfer(i2c, &msg[0]); + if (retval != 0) + goto exit; + + retry = 0; + do { + retval = do_i2c_transfer(i2c, &msg[1]); + if (retval == 0) + retval = length; + else + goto exit; + + report_length = (buffer.read[1] << 8) | buffer.read[0]; + if (report_length == hid_dd.input_report_max_length) { + retval = secure_memcpy(&data[0], length, + &buffer.read[4], buffer.read_size - 4, + length); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy data\n", + __func__); + } else { + retval = length; + } + goto exit; + } + + msleep(20); + retry++; + } while (retry < SYN_I2C_RETRY_TIMES); + + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to receive read report\n", + __func__); + retval = -EIO; + +exit: + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + + if ((retval != length) && (recover == 1)) { + recover = 0; + if (check_report_mode(rmi4_data) != RMI_MODE) { + retval = hid_i2c_init(rmi4_data); + if (retval == 0) + goto recover; + } + } + + return retval; +} + +static int synaptics_rmi4_i2c_write(struct synaptics_rmi4_data *rmi4_data, + unsigned short addr, unsigned char *data, unsigned short length) +{ + int retval; + unsigned char recover = 1; + unsigned char msg_length; + struct i2c_client *i2c = to_i2c_client(rmi4_data->pdev->dev.parent); + struct i2c_msg msg[] = { + { + .addr = i2c->addr, + .flags = 0, + } + }; + + if ((length + 10) < (hid_dd.output_report_max_length + 2)) + msg_length = hid_dd.output_report_max_length + 2; + else + msg_length = length + 10; + +recover: + mutex_lock(&rmi4_data->rmi4_io_ctrl_mutex); + + check_buffer(&buffer.write, &buffer.write_size, msg_length); + msg[0].len = msg_length; + msg[0].buf = buffer.write; + buffer.write[0] = hid_dd.output_register_index & MASK_8BIT; + buffer.write[1] = hid_dd.output_register_index >> 8; + buffer.write[2] = hid_dd.output_report_max_length & MASK_8BIT; + buffer.write[3] = hid_dd.output_report_max_length >> 8; + buffer.write[4] = hid_report.write_id; + buffer.write[5] = 0x00; + buffer.write[6] = addr & MASK_8BIT; + buffer.write[7] = addr >> 8; + buffer.write[8] = length & MASK_8BIT; + buffer.write[9] = length >> 8; + retval = secure_memcpy(&buffer.write[10], buffer.write_size - 10, + &data[0], length, length); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy data\n", + __func__); + } else { + retval = do_i2c_transfer(i2c, msg); + if (retval == 0) + retval = length; + } + + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + + if ((retval != length) && (recover == 1)) { + recover = 0; + if (check_report_mode(rmi4_data) != RMI_MODE) { + retval = hid_i2c_init(rmi4_data); + if (retval == 0) + goto recover; + } + } + + return retval; +} + +static struct synaptics_dsx_bus_access bus_access = { + .type = BUS_I2C, + .read = synaptics_rmi4_i2c_read, + .write = synaptics_rmi4_i2c_write, +}; + +static struct synaptics_dsx_hw_interface hw_if; + +static struct platform_device *synaptics_dsx_i2c_device; + +static void synaptics_rmi4_i2c_dev_release(struct device *dev) +{ + kfree(synaptics_dsx_i2c_device); + + return; +} + +static int synaptics_rmi4_i2c_probe(struct i2c_client *client, + const struct i2c_device_id *dev_id) +{ + int retval; + + if (!i2c_check_functionality(client->adapter, + I2C_FUNC_SMBUS_BYTE_DATA)) { + dev_err(&client->dev, + "%s: SMBus byte data commands not supported by host\n", + __func__); + return -EIO; + } + + synaptics_dsx_i2c_device = kzalloc( + sizeof(struct platform_device), + GFP_KERNEL); + if (!synaptics_dsx_i2c_device) { + dev_err(&client->dev, + "%s: Failed to allocate memory for synaptics_dsx_i2c_device\n", + __func__); + return -ENOMEM; + } + +#ifdef CONFIG_OF + if (client->dev.of_node) { + hw_if.board_data = devm_kzalloc(&client->dev, + sizeof(struct synaptics_dsx_board_data), + GFP_KERNEL); + if (!hw_if.board_data) { + dev_err(&client->dev, + "%s: Failed to allocate memory for board data\n", + __func__); + return -ENOMEM; + } + hw_if.board_data->cap_button_map = devm_kzalloc(&client->dev, + sizeof(struct synaptics_dsx_button_map), + GFP_KERNEL); + if (!hw_if.board_data->cap_button_map) { + dev_err(&client->dev, + "%s: Failed to allocate memory for 0D button map\n", + __func__); + return -ENOMEM; + } + hw_if.board_data->vir_button_map = devm_kzalloc(&client->dev, + sizeof(struct synaptics_dsx_button_map), + GFP_KERNEL); + if (!hw_if.board_data->vir_button_map) { + dev_err(&client->dev, + "%s: Failed to allocate memory for virtual button map\n", + __func__); + return -ENOMEM; + } + parse_dt(&client->dev, hw_if.board_data); + } +#else + hw_if.board_data = client->dev.platform_data; +#endif + + hw_if.bus_access = &bus_access; + hw_if.bl_hw_init = switch_to_rmi; + hw_if.ui_hw_init = hid_i2c_init; + + synaptics_dsx_i2c_device->name = PLATFORM_DRIVER_NAME; + synaptics_dsx_i2c_device->id = 0; + synaptics_dsx_i2c_device->num_resources = 0; + synaptics_dsx_i2c_device->dev.parent = &client->dev; + synaptics_dsx_i2c_device->dev.platform_data = &hw_if; + synaptics_dsx_i2c_device->dev.release = synaptics_rmi4_i2c_dev_release; + + retval = platform_device_register(synaptics_dsx_i2c_device); + if (retval) { + dev_err(&client->dev, + "%s: Failed to register platform device\n", + __func__); + return -ENODEV; + } + + return 0; +} + +static int synaptics_rmi4_i2c_remove(struct i2c_client *client) +{ + if (buffer.read_size) + kfree(buffer.read); + + if (buffer.write_size) + kfree(buffer.write); + + platform_device_unregister(synaptics_dsx_i2c_device); + + return 0; +} + +static const struct i2c_device_id synaptics_rmi4_id_table[] = { + {I2C_DRIVER_NAME, 0}, + {}, +}; +MODULE_DEVICE_TABLE(i2c, synaptics_rmi4_id_table); + +#ifdef CONFIG_OF +static struct of_device_id synaptics_rmi4_of_match_table[] = { + { + .compatible = "synaptics,dsx-rmi-hid-i2c", + }, + {}, +}; +MODULE_DEVICE_TABLE(of, synaptics_rmi4_of_match_table); +#else +#define synaptics_rmi4_of_match_table NULL +#endif + +static struct i2c_driver synaptics_rmi4_i2c_driver = { + .driver = { + .name = I2C_DRIVER_NAME, + .owner = THIS_MODULE, + .of_match_table = synaptics_rmi4_of_match_table, + }, + .probe = synaptics_rmi4_i2c_probe, + .remove = synaptics_rmi4_i2c_remove, + .id_table = synaptics_rmi4_id_table, +}; + +int synaptics_rmi4_bus_init_force(void) +{ + return i2c_add_driver(&synaptics_rmi4_i2c_driver); +} + +void synaptics_rmi4_bus_exit_force(void) +{ + i2c_del_driver(&synaptics_rmi4_i2c_driver); + + return; +} + +MODULE_AUTHOR("Synaptics, Inc."); +MODULE_DESCRIPTION("Synaptics DSX I2C Bus Support Module"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_spi.c b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_spi.c new file mode 100644 index 000000000000..b682fecd972c --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_spi.c @@ -0,0 +1,710 @@ +/* + * Synaptics DSX touchscreen driver + * + * Copyright (C) 2012-2015 Synaptics Incorporated. All rights reserved. + * + * Copyright (C) 2012 Alexandra Chin <alexandra.chin@tw.synaptics.com> + * Copyright (C) 2012 Scott Lin <scott.lin@tw.synaptics.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND SYNAPTICS + * EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, INCLUDING ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, + * AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS. + * IN NO EVENT SHALL SYNAPTICS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION + * WITH THE USE OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED + * AND BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF COMPETENT JURISDICTION DOES + * NOT PERMIT THE DISCLAIMER OF DIRECT DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' + * TOTAL CUMULATIVE LIABILITY TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. + * DOLLARS. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/spi/spi.h> +#include <linux/delay.h> +#include <linux/input.h> +#include <linux/types.h> +#include <linux/of_gpio.h> +#include <linux/platform_device.h> +#include <linux/input/synaptics_dsx.h> +#include "synaptics_dsx_core.h" + +#define SPI_READ 0x80 +#define SPI_WRITE 0x00 + +static unsigned char *buf; + +static struct spi_transfer *xfer; + +#ifdef CONFIG_OF +static int parse_dt(struct device *dev, struct synaptics_dsx_board_data *bdata) +{ + int retval; + u32 value; + const char *name; + struct property *prop; + struct device_node *np = dev->of_node; + + bdata->irq_gpio = of_get_named_gpio_flags(np, + "synaptics,irq-gpio", 0, + (enum of_gpio_flags *)&bdata->irq_flags); + + retval = of_property_read_u32(np, "synaptics,irq-on-state", + &value); + if (retval < 0) + bdata->irq_on_state = 0; + else + bdata->irq_on_state = value; + + retval = of_property_read_string(np, "synaptics,pwr-reg-name", &name); + if (retval < 0) + bdata->pwr_reg_name = NULL; + else + bdata->pwr_reg_name = name; + + retval = of_property_read_string(np, "synaptics,bus-reg-name", &name); + if (retval < 0) + bdata->bus_reg_name = NULL; + else + bdata->bus_reg_name = name; + + prop = of_find_property(np, "synaptics,power-gpio", NULL); + if (prop && prop->length) { + bdata->power_gpio = of_get_named_gpio_flags(np, + "synaptics,power-gpio", 0, NULL); + retval = of_property_read_u32(np, "synaptics,power-on-state", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,power-on-state property\n", + __func__); + return retval; + } else { + bdata->power_on_state = value; + } + } else { + bdata->power_gpio = -1; + } + + prop = of_find_property(np, "synaptics,power-delay-ms", NULL); + if (prop && prop->length) { + retval = of_property_read_u32(np, "synaptics,power-delay-ms", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,power-delay-ms property\n", + __func__); + return retval; + } else { + bdata->power_delay_ms = value; + } + } else { + bdata->power_delay_ms = 0; + } + + prop = of_find_property(np, "synaptics,reset-gpio", NULL); + if (prop && prop->length) { + bdata->reset_gpio = of_get_named_gpio_flags(np, + "synaptics,reset-gpio", 0, NULL); + retval = of_property_read_u32(np, "synaptics,reset-on-state", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,reset-on-state property\n", + __func__); + return retval; + } else { + bdata->reset_on_state = value; + } + retval = of_property_read_u32(np, "synaptics,reset-active-ms", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,reset-active-ms property\n", + __func__); + return retval; + } else { + bdata->reset_active_ms = value; + } + } else { + bdata->reset_gpio = -1; + } + + prop = of_find_property(np, "synaptics,reset-delay-ms", NULL); + if (prop && prop->length) { + retval = of_property_read_u32(np, "synaptics,reset-delay-ms", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,reset-delay-ms property\n", + __func__); + return retval; + } else { + bdata->reset_delay_ms = value; + } + } else { + bdata->reset_delay_ms = 0; + } + + prop = of_find_property(np, "synaptics,byte-delay-us", NULL); + if (prop && prop->length) { + retval = of_property_read_u32(np, "synaptics,byte-delay-us", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,byte-delay-us property\n", + __func__); + return retval; + } else { + bdata->byte_delay_us = value; + } + } else { + bdata->byte_delay_us = 0; + } + + prop = of_find_property(np, "synaptics,block-delay-us", NULL); + if (prop && prop->length) { + retval = of_property_read_u32(np, "synaptics,block-delay-us", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,block-delay-us property\n", + __func__); + return retval; + } else { + bdata->block_delay_us = value; + } + } else { + bdata->block_delay_us = 0; + } + + prop = of_find_property(np, "synaptics,address-delay-us", NULL); + if (prop && prop->length) { + retval = of_property_read_u32(np, "synaptics,address-delay-us", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,address-delay-us property\n", + __func__); + return retval; + } else { + bdata->addr_delay_us = value; + } + } else { + bdata->addr_delay_us = 0; + } + + prop = of_find_property(np, "synaptics,max-y-for-2d", NULL); + if (prop && prop->length) { + retval = of_property_read_u32(np, "synaptics,max-y-for-2d", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,max-y-for-2d property\n", + __func__); + return retval; + } else { + bdata->max_y_for_2d = value; + } + } else { + bdata->max_y_for_2d = -1; + } + + prop = of_find_property(np, "synaptics,swap-axes", NULL); + bdata->swap_axes = prop > 0 ? true : false; + + prop = of_find_property(np, "synaptics,x-flip", NULL); + bdata->x_flip = prop > 0 ? true : false; + + prop = of_find_property(np, "synaptics,y-flip", NULL); + bdata->y_flip = prop > 0 ? true : false; + + prop = of_find_property(np, "synaptics,ub-i2c-addr", NULL); + if (prop && prop->length) { + retval = of_property_read_u32(np, "synaptics,ub-i2c-addr", + &value); + if (retval < 0) { + dev_err(dev, "%s: Unable to read synaptics,ub-i2c-addr property\n", + __func__); + return retval; + } else { + bdata->ub_i2c_addr = (unsigned short)value; + } + } else { + bdata->ub_i2c_addr = -1; + } + + prop = of_find_property(np, "synaptics,cap-button-codes", NULL); + if (prop && prop->length) { + bdata->cap_button_map->map = devm_kzalloc(dev, + prop->length, + GFP_KERNEL); + if (!bdata->cap_button_map->map) + return -ENOMEM; + bdata->cap_button_map->nbuttons = prop->length / sizeof(u32); + retval = of_property_read_u32_array(np, + "synaptics,cap-button-codes", + bdata->cap_button_map->map, + bdata->cap_button_map->nbuttons); + if (retval < 0) { + bdata->cap_button_map->nbuttons = 0; + bdata->cap_button_map->map = NULL; + } + } else { + bdata->cap_button_map->nbuttons = 0; + bdata->cap_button_map->map = NULL; + } + + prop = of_find_property(np, "synaptics,vir-button-codes", NULL); + if (prop && prop->length) { + bdata->vir_button_map->map = devm_kzalloc(dev, + prop->length, + GFP_KERNEL); + if (!bdata->vir_button_map->map) + return -ENOMEM; + bdata->vir_button_map->nbuttons = prop->length / sizeof(u32); + bdata->vir_button_map->nbuttons /= 5; + retval = of_property_read_u32_array(np, + "synaptics,vir-button-codes", + bdata->vir_button_map->map, + bdata->vir_button_map->nbuttons * 5); + if (retval < 0) { + bdata->vir_button_map->nbuttons = 0; + bdata->vir_button_map->map = NULL; + } + } else { + bdata->vir_button_map->nbuttons = 0; + bdata->vir_button_map->map = NULL; + } + + return 0; +} +#endif + +static int synaptics_rmi4_spi_alloc_buf(struct synaptics_rmi4_data *rmi4_data, + unsigned int size, unsigned int count) +{ + static unsigned int buf_size; + static unsigned int xfer_count; + + if (size > buf_size) { + if (buf_size) + kfree(buf); + buf = kmalloc(size, GFP_KERNEL); + if (!buf) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for buf\n", + __func__); + buf_size = 0; + return -ENOMEM; + } + buf_size = size; + } + + if (count > xfer_count) { + if (xfer_count) + kfree(xfer); + xfer = kcalloc(count, sizeof(struct spi_transfer), GFP_KERNEL); + if (!xfer) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for xfer\n", + __func__); + xfer_count = 0; + return -ENOMEM; + } + xfer_count = count; + } else { + memset(xfer, 0, count * sizeof(struct spi_transfer)); + } + + return 0; +} + +static int synaptics_rmi4_spi_set_page(struct synaptics_rmi4_data *rmi4_data, + unsigned short addr) +{ + int retval; + unsigned int index; + unsigned int byte_count = PAGE_SELECT_LEN + 1; + unsigned char page; + struct spi_message msg; + struct spi_device *spi = to_spi_device(rmi4_data->pdev->dev.parent); + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + page = ((addr >> 8) & MASK_8BIT); + if ((page >> 7) == (rmi4_data->current_page >> 7)) + return PAGE_SELECT_LEN; + + spi_message_init(&msg); + + retval = synaptics_rmi4_spi_alloc_buf(rmi4_data, byte_count, + byte_count); + if (retval < 0) + return retval; + + buf[0] = SPI_WRITE; + buf[1] = MASK_8BIT; + buf[2] = page; + + if (bdata->byte_delay_us == 0) { + xfer[0].len = byte_count; + xfer[0].tx_buf = &buf[0]; + if (bdata->block_delay_us) + xfer[0].delay_usecs = bdata->block_delay_us; + spi_message_add_tail(&xfer[0], &msg); + } else { + for (index = 0; index < byte_count; index++) { + xfer[index].len = 1; + xfer[index].tx_buf = &buf[index]; + if (index == 1) + xfer[index].delay_usecs = bdata->addr_delay_us; + else + xfer[index].delay_usecs = bdata->byte_delay_us; + spi_message_add_tail(&xfer[index], &msg); + } + if (bdata->block_delay_us) + xfer[index - 1].delay_usecs = bdata->block_delay_us; + } + + retval = spi_sync(spi, &msg); + if (retval == 0) { + rmi4_data->current_page = page; + retval = PAGE_SELECT_LEN; + } else { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to complete SPI transfer, error = %d\n", + __func__, retval); + } + + return retval; +} + +static int synaptics_rmi4_spi_read(struct synaptics_rmi4_data *rmi4_data, + unsigned short addr, unsigned char *data, unsigned short length) +{ + int retval; + unsigned int index; + unsigned int byte_count = length + ADDRESS_LEN; + unsigned char txbuf[ADDRESS_LEN]; + struct spi_message msg; + struct spi_device *spi = to_spi_device(rmi4_data->pdev->dev.parent); + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + spi_message_init(&msg); + + txbuf[0] = (addr >> 8) | SPI_READ; + txbuf[1] = addr & MASK_8BIT; + + mutex_lock(&rmi4_data->rmi4_io_ctrl_mutex); + + retval = synaptics_rmi4_spi_set_page(rmi4_data, addr); + if (retval != PAGE_SELECT_LEN) { + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + return -EIO; + } + + if (bdata->byte_delay_us == 0) { + retval = synaptics_rmi4_spi_alloc_buf(rmi4_data, length, + 2); + } else { + retval = synaptics_rmi4_spi_alloc_buf(rmi4_data, length, + byte_count); + } + if (retval < 0) { + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + return retval; + } + + if (bdata->byte_delay_us == 0) { + xfer[0].len = ADDRESS_LEN; + xfer[0].tx_buf = &txbuf[0]; + spi_message_add_tail(&xfer[0], &msg); + xfer[1].len = length; + xfer[1].rx_buf = &buf[0]; + if (bdata->block_delay_us) + xfer[1].delay_usecs = bdata->block_delay_us; + spi_message_add_tail(&xfer[1], &msg); + } else { + for (index = 0; index < byte_count; index++) { + xfer[index].len = 1; + if (index < ADDRESS_LEN) + xfer[index].tx_buf = &txbuf[index]; + else + xfer[index].rx_buf = &buf[index - ADDRESS_LEN]; + if (index == 1) + xfer[index].delay_usecs = bdata->addr_delay_us; + else + xfer[index].delay_usecs = bdata->byte_delay_us; + spi_message_add_tail(&xfer[index], &msg); + } + if (bdata->block_delay_us) + xfer[index - 1].delay_usecs = bdata->block_delay_us; + } + + retval = spi_sync(spi, &msg); + if (retval == 0) { + retval = secure_memcpy(data, length, buf, length, length); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy data\n", + __func__); + } else { + retval = length; + } + } else { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to complete SPI transfer, error = %d\n", + __func__, retval); + } + + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + + return retval; +} + +static int synaptics_rmi4_spi_write(struct synaptics_rmi4_data *rmi4_data, + unsigned short addr, unsigned char *data, unsigned short length) +{ + int retval; + unsigned int index; + unsigned int byte_count = length + ADDRESS_LEN; + struct spi_message msg; + struct spi_device *spi = to_spi_device(rmi4_data->pdev->dev.parent); + const struct synaptics_dsx_board_data *bdata = + rmi4_data->hw_if->board_data; + + spi_message_init(&msg); + + mutex_lock(&rmi4_data->rmi4_io_ctrl_mutex); + + retval = synaptics_rmi4_spi_set_page(rmi4_data, addr); + if (retval != PAGE_SELECT_LEN) { + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + return -EIO; + } + + if (bdata->byte_delay_us == 0) { + retval = synaptics_rmi4_spi_alloc_buf(rmi4_data, byte_count, + 1); + } else { + retval = synaptics_rmi4_spi_alloc_buf(rmi4_data, byte_count, + byte_count); + } + if (retval < 0) { + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + return retval; + } + + buf[0] = (addr >> 8) & ~SPI_READ; + buf[1] = addr & MASK_8BIT; + retval = secure_memcpy(&buf[ADDRESS_LEN], + byte_count - ADDRESS_LEN, data, length, length); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to copy data\n", + __func__); + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + return retval; + } + + if (bdata->byte_delay_us == 0) { + xfer[0].len = byte_count; + xfer[0].tx_buf = &buf[0]; + if (bdata->block_delay_us) + xfer[0].delay_usecs = bdata->block_delay_us; + spi_message_add_tail(xfer, &msg); + } else { + for (index = 0; index < byte_count; index++) { + xfer[index].len = 1; + xfer[index].tx_buf = &buf[index]; + if (index == 1) + xfer[index].delay_usecs = bdata->addr_delay_us; + else + xfer[index].delay_usecs = bdata->byte_delay_us; + spi_message_add_tail(&xfer[index], &msg); + } + if (bdata->block_delay_us) + xfer[index - 1].delay_usecs = bdata->block_delay_us; + } + + retval = spi_sync(spi, &msg); + if (retval == 0) { + retval = length; + } else { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to complete SPI transfer, error = %d\n", + __func__, retval); + } + + mutex_unlock(&rmi4_data->rmi4_io_ctrl_mutex); + + return retval; +} + +static struct synaptics_dsx_bus_access bus_access = { + .type = BUS_SPI, + .read = synaptics_rmi4_spi_read, + .write = synaptics_rmi4_spi_write, +}; + +static struct synaptics_dsx_hw_interface hw_if; + +static struct platform_device *synaptics_dsx_spi_device; + +static void synaptics_rmi4_spi_dev_release(struct device *dev) +{ + kfree(synaptics_dsx_spi_device); + + return; +} + +static int synaptics_rmi4_spi_probe(struct spi_device *spi) +{ + int retval; + + if (spi->master->flags & SPI_MASTER_HALF_DUPLEX) { + dev_err(&spi->dev, + "%s: Full duplex not supported by host\n", + __func__); + return -EIO; + } + + synaptics_dsx_spi_device = kzalloc( + sizeof(struct platform_device), + GFP_KERNEL); + if (!synaptics_dsx_spi_device) { + dev_err(&spi->dev, + "%s: Failed to allocate memory for synaptics_dsx_spi_device\n", + __func__); + return -ENOMEM; + } + +#ifdef CONFIG_OF + if (spi->dev.of_node) { + hw_if.board_data = devm_kzalloc(&spi->dev, + sizeof(struct synaptics_dsx_board_data), + GFP_KERNEL); + if (!hw_if.board_data) { + dev_err(&spi->dev, + "%s: Failed to allocate memory for board data\n", + __func__); + return -ENOMEM; + } + hw_if.board_data->cap_button_map = devm_kzalloc(&spi->dev, + sizeof(struct synaptics_dsx_button_map), + GFP_KERNEL); + if (!hw_if.board_data->cap_button_map) { + dev_err(&spi->dev, + "%s: Failed to allocate memory for 0D button map\n", + __func__); + return -ENOMEM; + } + hw_if.board_data->vir_button_map = devm_kzalloc(&spi->dev, + sizeof(struct synaptics_dsx_button_map), + GFP_KERNEL); + if (!hw_if.board_data->vir_button_map) { + dev_err(&spi->dev, + "%s: Failed to allocate memory for virtual button map\n", + __func__); + return -ENOMEM; + } + parse_dt(&spi->dev, hw_if.board_data); + } +#else + hw_if.board_data = spi->dev.platform_data; +#endif + + hw_if.bus_access = &bus_access; + + spi->bits_per_word = 8; + spi->mode = SPI_MODE_3; + + retval = spi_setup(spi); + if (retval < 0) { + dev_err(&spi->dev, + "%s: Failed to perform SPI setup\n", + __func__); + return retval; + } + + synaptics_dsx_spi_device->name = PLATFORM_DRIVER_NAME; + synaptics_dsx_spi_device->id = 0; + synaptics_dsx_spi_device->num_resources = 0; + synaptics_dsx_spi_device->dev.parent = &spi->dev; + synaptics_dsx_spi_device->dev.platform_data = &hw_if; + synaptics_dsx_spi_device->dev.release = synaptics_rmi4_spi_dev_release; + + retval = platform_device_register(synaptics_dsx_spi_device); + if (retval) { + dev_err(&spi->dev, + "%s: Failed to register platform device\n", + __func__); + return -ENODEV; + } + + return 0; +} + +static int synaptics_rmi4_spi_remove(struct spi_device *spi) +{ + platform_device_unregister(synaptics_dsx_spi_device); + + return 0; +} + +static const struct spi_device_id synaptics_rmi4_id_table[] = { + {SPI_DRIVER_NAME, 0}, + {}, +}; +MODULE_DEVICE_TABLE(spi, synaptics_rmi4_id_table); + +#ifdef CONFIG_OF +static struct of_device_id synaptics_rmi4_of_match_table[] = { + { + .compatible = "synaptics,dsx-spi", + }, + {}, +}; +MODULE_DEVICE_TABLE(of, synaptics_rmi4_of_match_table); +#else +#define synaptics_rmi4_of_match_table NULL +#endif + +static struct spi_driver synaptics_rmi4_spi_driver = { + .driver = { + .name = SPI_DRIVER_NAME, + .owner = THIS_MODULE, + .of_match_table = synaptics_rmi4_of_match_table, + }, + .probe = synaptics_rmi4_spi_probe, + .remove = synaptics_rmi4_spi_remove, + .id_table = synaptics_rmi4_id_table, +}; + + +int synaptics_rmi4_bus_init_force(void) +{ + return spi_register_driver(&synaptics_rmi4_spi_driver); +} + +void synaptics_rmi4_bus_exit_force(void) +{ + kfree(buf); + + kfree(xfer); + + spi_unregister_driver(&synaptics_rmi4_spi_driver); + + return; +} + +MODULE_AUTHOR("Synaptics, Inc."); +MODULE_DESCRIPTION("Synaptics DSX SPI Bus Support Module"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_test_reporting.c b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_test_reporting.c new file mode 100644 index 000000000000..a1290128fd7f --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_test_reporting.c @@ -0,0 +1,8327 @@ +/* + * Synaptics DSX touchscreen driver + * + * Copyright (C) 2012-2015 Synaptics Incorporated. All rights reserved. + * + * Copyright (C) 2012 Alexandra Chin <alexandra.chin@tw.synaptics.com> + * Copyright (C) 2012 Scott Lin <scott.lin@tw.synaptics.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND SYNAPTICS + * EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, INCLUDING ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, + * AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS. + * IN NO EVENT SHALL SYNAPTICS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION + * WITH THE USE OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED + * AND BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF COMPETENT JURISDICTION DOES + * NOT PERMIT THE DISCLAIMER OF DIRECT DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' + * TOTAL CUMULATIVE LIABILITY TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. + * DOLLARS. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/interrupt.h> +#include <linux/delay.h> +#include <linux/input.h> +#include <linux/ctype.h> +#include <linux/hrtimer.h> +#include <linux/platform_device.h> +#include <linux/input/synaptics_dsx.h> +#include "synaptics_dsx_core.h" +#include <linux/proc_fs.h> +#include <linux/vmalloc.h> +#include <linux/uaccess.h> + +#define SYSFS_FOLDER_NAME "f54" + +/* #define USE_RT8 */ + +#define GET_REPORT_TIMEOUT_S 3 +#define CALIBRATION_TIMEOUT_S 10 +#define COMMAND_TIMEOUT_100MS 30 + +#define NO_SLEEP_OFF (0 << 2) +#define NO_SLEEP_ON (1 << 2) + +#define STATUS_IDLE 0 +#define STATUS_BUSY 1 +#define STATUS_ERROR 2 + +#define REPORT_INDEX_OFFSET 1 +#define REPORT_DATA_OFFSET 3 + +#define SENSOR_RX_MAPPING_OFFSET 1 +#define SENSOR_TX_MAPPING_OFFSET 2 + +#define COMMAND_GET_REPORT 1 +#define COMMAND_FORCE_CAL 2 +#define COMMAND_FORCE_UPDATE 4 +#define COMMAND_ENTER_INCELL_TEST_MODE 16 + +#define CONTROL_NO_AUTO_CAL 1 + +#define CONTROL_0_SIZE 1 +#define CONTROL_1_SIZE 1 +#define CONTROL_2_SIZE 2 +#define CONTROL_3_SIZE 1 +#define CONTROL_4_6_SIZE 3 +#define CONTROL_7_SIZE 1 +#define CONTROL_8_9_SIZE 3 +#define CONTROL_10_SIZE 1 +#define CONTROL_11_SIZE 2 +#define CONTROL_12_13_SIZE 2 +#define CONTROL_14_SIZE 1 +#define CONTROL_15_SIZE 1 +#define CONTROL_16_SIZE 1 +#define CONTROL_17_SIZE 1 +#define CONTROL_18_SIZE 1 +#define CONTROL_19_SIZE 1 +#define CONTROL_20_SIZE 1 +#define CONTROL_21_SIZE 2 +#define CONTROL_22_26_SIZE 7 +#define CONTROL_27_SIZE 1 +#define CONTROL_28_SIZE 2 +#define CONTROL_29_SIZE 1 +#define CONTROL_30_SIZE 1 +#define CONTROL_31_SIZE 1 +#define CONTROL_32_35_SIZE 8 +#define CONTROL_36_SIZE 1 +#define CONTROL_37_SIZE 1 +#define CONTROL_38_SIZE 1 +#define CONTROL_39_SIZE 1 +#define CONTROL_40_SIZE 1 +#define CONTROL_41_SIZE 1 +#define CONTROL_42_SIZE 2 +#define CONTROL_43_54_SIZE 13 +#define CONTROL_55_56_SIZE 2 +#define CONTROL_57_SIZE 1 +#define CONTROL_58_SIZE 1 +#define CONTROL_59_SIZE 2 +#define CONTROL_60_62_SIZE 3 +#define CONTROL_63_SIZE 1 +#define CONTROL_64_67_SIZE 4 +#define CONTROL_68_73_SIZE 8 +#define CONTROL_74_SIZE 2 +#define CONTROL_75_SIZE 1 +#define CONTROL_76_SIZE 1 +#define CONTROL_77_78_SIZE 2 +#define CONTROL_79_83_SIZE 5 +#define CONTROL_84_85_SIZE 2 +#define CONTROL_86_SIZE 1 +#define CONTROL_87_SIZE 1 +#define CONTROL_88_SIZE 1 +#define CONTROL_89_SIZE 1 +#define CONTROL_90_SIZE 1 +#define CONTROL_91_SIZE 1 +#define CONTROL_92_SIZE 1 +#define CONTROL_93_SIZE 1 +#define CONTROL_94_SIZE 1 +#define CONTROL_95_SIZE 1 +#define CONTROL_96_SIZE 1 +#define CONTROL_97_SIZE 1 +#define CONTROL_98_SIZE 1 +#define CONTROL_99_SIZE 1 +#define CONTROL_100_SIZE 1 +#define CONTROL_101_SIZE 1 +#define CONTROL_102_SIZE 1 +#define CONTROL_103_SIZE 1 +#define CONTROL_104_SIZE 1 +#define CONTROL_105_SIZE 1 +#define CONTROL_106_SIZE 1 +#define CONTROL_107_SIZE 1 +#define CONTROL_108_SIZE 1 +#define CONTROL_109_SIZE 1 +#define CONTROL_110_SIZE 1 +#define CONTROL_111_SIZE 1 +#define CONTROL_112_SIZE 1 +#define CONTROL_113_SIZE 1 +#define CONTROL_114_SIZE 1 +#define CONTROL_115_SIZE 1 +#define CONTROL_116_SIZE 1 +#define CONTROL_117_SIZE 1 +#define CONTROL_118_SIZE 1 +#define CONTROL_119_SIZE 1 +#define CONTROL_120_SIZE 1 +#define CONTROL_121_SIZE 1 +#define CONTROL_122_SIZE 1 +#define CONTROL_123_SIZE 1 +#define CONTROL_124_SIZE 1 +#define CONTROL_125_SIZE 1 +#define CONTROL_126_SIZE 1 +#define CONTROL_127_SIZE 1 +#define CONTROL_128_SIZE 1 +#define CONTROL_129_SIZE 1 +#define CONTROL_130_SIZE 1 +#define CONTROL_131_SIZE 1 +#define CONTROL_132_SIZE 1 +#define CONTROL_133_SIZE 1 +#define CONTROL_134_SIZE 1 +#define CONTROL_135_SIZE 1 +#define CONTROL_136_SIZE 1 +#define CONTROL_137_SIZE 1 +#define CONTROL_138_SIZE 1 +#define CONTROL_139_SIZE 1 +#define CONTROL_140_SIZE 1 +#define CONTROL_141_SIZE 1 +#define CONTROL_142_SIZE 1 +#define CONTROL_143_SIZE 1 +#define CONTROL_144_SIZE 1 +#define CONTROL_145_SIZE 1 +#define CONTROL_146_SIZE 1 +#define CONTROL_147_SIZE 1 +#define CONTROL_148_SIZE 1 +#define CONTROL_149_SIZE 1 +#define CONTROL_150_SIZE 1 +#define CONTROL_151_SIZE 1 +#define CONTROL_152_SIZE 1 +#define CONTROL_153_SIZE 1 +#define CONTROL_154_SIZE 1 +#define CONTROL_155_SIZE 1 +#define CONTROL_156_SIZE 1 +#define CONTROL_157_158_SIZE 2 +#define CONTROL_163_SIZE 1 +#define CONTROL_164_SIZE 1 +#define CONTROL_165_SIZE 1 +#define CONTROL_166_SIZE 1 +#define CONTROL_167_SIZE 1 +#define CONTROL_168_SIZE 1 +#define CONTROL_169_SIZE 1 +#define CONTROL_171_SIZE 1 +#define CONTROL_172_SIZE 1 +#define CONTROL_173_SIZE 1 +#define CONTROL_174_SIZE 1 +#define CONTROL_175_SIZE 1 +#define CONTROL_176_SIZE 1 +#define CONTROL_177_178_SIZE 2 +#define CONTROL_179_SIZE 1 +#define CONTROL_182_SIZE 1 +#define CONTROL_183_SIZE 1 +#define CONTROL_185_SIZE 1 +#define CONTROL_186_SIZE 1 +#define CONTROL_187_SIZE 1 +#define CONTROL_188_SIZE 1 +#define CONTROL_189_SIZE 1 +#define CONTROL_190_SIZE 1 +#define CONTROL_191_SIZE 1 +#define CONTROL_192_SIZE 1 +#define CONTROL_193_SIZE 1 +#define CONTROL_194_SIZE 1 +#define CONTROL_195_SIZE 1 +#define CONTROL_196_SIZE 1 +#define CONTROL_197_SIZE 1 +#define CONTROL_198_SIZE 1 +#define CONTROL_199_SIZE 1 +#define CONTROL_200_SIZE 1 +#define CONTROL_201_SIZE 1 +#define CONTROL_202_SIZE 1 +#define CONTROL_203_SIZE 1 +#define CONTROL_204_SIZE 1 +#define CONTROL_205_SIZE 1 +#define CONTROL_206_SIZE 1 +#define CONTROL_207_SIZE 1 +#define CONTROL_208_SIZE 1 +#define CONTROL_209_SIZE 1 +#define CONTROL_210_SIZE 1 +#define CONTROL_211_SIZE 1 +#define CONTROL_212_SIZE 1 +#define CONTROL_213_SIZE 1 +#define CONTROL_214_SIZE 1 +#define CONTROL_215_SIZE 1 +#define CONTROL_216_SIZE 1 +#define CONTROL_217_SIZE 1 +#define CONTROL_218_SIZE 1 +#define CONTROL_219_SIZE 1 +#define CONTROL_220_SIZE 1 +#define CONTROL_221_SIZE 1 +#define CONTROL_222_SIZE 1 +#define CONTROL_223_SIZE 1 +#define CONTROL_224_SIZE 1 +#define CONTROL_225_SIZE 1 + +#define HIGH_RESISTANCE_DATA_SIZE 6 +#define FULL_RAW_CAP_MIN_MAX_DATA_SIZE 4 +#define TRX_OPEN_SHORT_DATA_SIZE 7 + + +#define F54_POLLING_GET_REPORT +static char *factory_string[] = { + "tddi_short_limit_b", + "tddi_noise_limit", + "tddi_extend_ee_short_reset_dur", + "tddi_extend_ee_short_int_dur", + "tddi_extend_ee_short_tx_on_count", + "tddi_extend_ee_short_rx_on_count", + "tddi_extend_ee_short_test_limit_part1", + "tddi_extend_ee_short_test_limit_part2", + "tddi_open_test_int_dur_one", + "tddi_open_test_int_dur_two", + "tddi_open_test_limit_phase2_lower", + "tddi_b7_open_test_int_dur_one", + "tddi_b7_open_test_int_dur_two", + "tddi_b7_open_test_limit_phase2_lower", + "tddi_b7_open_test_limit_phase2_upper", + "button_count", + "abs_0d_open_factor", + "abs_0d_open_test_limit", + NULL, + }; + +#if 0 +/* test limit config */ +#define TDDI_SHORT_LIMIT_B 150 +#define TDDI_NOISE_LIMIT 28 + +/* #define ENABLE_EXTEND_EE_SHORT */ +#define TDDI_EXTEND_EE_SHORT_RESET_DUR 60 +#define TDDI_EXTEND_EE_SHORT_INT_DUR 150 +#define TDDI_EXTEND_EE_SHORT_TX_ON_COUNT 146 +#define TDDI_EXTEND_EE_SHORT_RX_ON_COUNT 146 +#define TDDI_EXTEND_EE_SHORT_TEST_LIMIT_PART1 100 +#define TDDI_EXTEND_EE_SHORT_TEST_LIMIT_PART2 96 + +#define TDDI_OPEN_TEST_INT_DUR_ONE 145 +#define TDDI_OPEN_TEST_INT_DUR_TWO 15 +#define TDDI_OPEN_TEST_LIMIT_PHASE2_LOWER 50 + +/* #define ENABLE_AMP_OPEN_B7 */ +#define TDDI_B7_OPEN_TEST_INT_DUR_ONE 23 +#define TDDI_B7_OPEN_TEST_INT_DUR_TWO 27 +#define TDDI_B7_OPEN_TEST_LIMIT_PHASE2_LOWER 0 +#define TDDI_B7_OPEN_TEST_LIMIT_PHASE2_UPPER 115 + +#define BUTTON_COUNT 3 +#define ABS_0D_OPEN_FACTOR 8 +#define ABS_0D_OPEN_TEST_LIMIT 30 +/* test limit config - */ +#endif + +#define TEST_INVALID 0 +#define TEST_FAILED 1 +#define TEST_OK 2 + +#define TEST_TYPE_20_333X "20" +#define TEST_TYPE_25_333X "25" +#define TEST_TYPE_26_333X "26" +#define TEST_TYPE_02 "2" +#define TEST_TYPE_03 "3" + +#define CHIP_ID_OFFSET 11 + +#define concat(a, b) a##b + +#define attrify(propname) (&dev_attr_##propname.attr) + +#define show_prototype(propname)\ +static ssize_t concat(test_sysfs, _##propname##_show)(\ + struct device *dev,\ + struct device_attribute *attr,\ + char *buf);\ +\ +static struct device_attribute dev_attr_##propname =\ + __ATTR(propname, S_IRUGO,\ + concat(test_sysfs, _##propname##_show),\ + synaptics_rmi4_store_error); + +#define store_prototype(propname)\ +static ssize_t concat(test_sysfs, _##propname##_store)(\ + struct device *dev,\ + struct device_attribute *attr,\ + const char *buf, size_t count);\ +\ +static struct device_attribute dev_attr_##propname =\ + __ATTR(propname, (S_IWUSR | S_IWGRP),\ + synaptics_rmi4_show_error,\ + concat(test_sysfs, _##propname##_store)); + +#define show_store_prototype(propname)\ +static ssize_t concat(test_sysfs, _##propname##_show)(\ + struct device *dev,\ + struct device_attribute *attr,\ + char *buf);\ +\ +static ssize_t concat(test_sysfs, _##propname##_store)(\ + struct device *dev,\ + struct device_attribute *attr,\ + const char *buf, size_t count);\ +\ +static struct device_attribute dev_attr_##propname =\ + __ATTR(propname, (S_IRUGO | S_IWUSR | S_IWGRP),\ + concat(test_sysfs, _##propname##_show),\ + concat(test_sysfs, _##propname##_store)); + +#define disable_cbc(ctrl_num)\ +do {\ + retval = synaptics_rmi4_reg_read(rmi4_data,\ + f54->control.ctrl_num->address,\ + f54->control.ctrl_num->data,\ + sizeof(f54->control.ctrl_num->data));\ + if (retval < 0) {\ + dev_err(rmi4_data->pdev->dev.parent,\ + "%s: Failed to disable CBC (" #ctrl_num ")\n",\ + __func__);\ + return retval;\ + } \ + f54->control.ctrl_num->cbc_tx_carrier_selection = 0;\ + retval = synaptics_rmi4_reg_write(rmi4_data,\ + f54->control.ctrl_num->address,\ + f54->control.ctrl_num->data,\ + sizeof(f54->control.ctrl_num->data));\ + if (retval < 0) {\ + dev_err(rmi4_data->pdev->dev.parent,\ + "%s: Failed to disable CBC (" #ctrl_num ")\n",\ + __func__);\ + return retval;\ + } \ +} while (0) + +enum f54_report_types { + F54_8BIT_IMAGE = 1, + F54_16BIT_IMAGE = 2, + F54_RAW_16BIT_IMAGE = 3, + F54_HIGH_RESISTANCE = 4, + F54_TX_TO_TX_SHORTS = 5, + F54_RX_TO_RX_SHORTS_1 = 7, + F54_TRUE_BASELINE = 9, + F54_FULL_RAW_CAP_MIN_MAX = 13, + F54_RX_OPENS_1 = 14, + F54_TX_OPENS = 15, + F54_TX_TO_GND_SHORTS = 16, + F54_RX_TO_RX_SHORTS_2 = 17, + F54_RX_OPENS_2 = 18, + F54_FULL_RAW_CAP = 19, +#ifdef USE_RT8 + F54_FULL_RAW_CAP_NO_RX_COUPLING = 8, +#else + F54_FULL_RAW_CAP_NO_RX_COUPLING = 20, +#endif + F54_SENSOR_SPEED = 22, + F54_ADC_RANGE = 23, + F54_TRX_OPENS = 24, + F54_TRX_TO_GND_SHORTS = 25, + F54_TRX_SHORTS = 26, + F54_ABS_RAW_CAP = 38, + F54_ABS_DELTA_CAP = 40, + F54_ABS_HYBRID_DELTA_CAP = 59, + F54_ABS_HYBRID_RAW_CAP = 63, + F54_AMP_FULL_RAW_CAP = 78, + F54_AMP_RAW_ADC = 83, + /* td43xx start */ + F54_TD43XX_FULL_RAW = 92, + F54_TD43XX_NOISE = 94, + F54_TD43XX_EE_SHORT = 95, + /* td43xx end */ + F54_ABS_DOZE_NO_CBC_INCELL = 121, + INVALID_REPORT_TYPE = -1, +}; + +enum f54_afe_cal { + F54_AFE_CAL, + F54_AFE_IS_CAL, +}; + +struct f54_query { + union { + struct { + /* query 0 */ + unsigned char num_of_rx_electrodes; + + /* query 1 */ + unsigned char num_of_tx_electrodes; + + /* query 2 */ + unsigned char f54_query2_b0__1:2; + unsigned char has_baseline:1; + unsigned char has_image8:1; + unsigned char f54_query2_b4__5:2; + unsigned char has_image16:1; + unsigned char f54_query2_b7:1; + + /* queries 3.0 and 3.1 */ + unsigned short clock_rate; + + /* query 4 */ + unsigned char touch_controller_family; + + /* query 5 */ + unsigned char has_pixel_touch_threshold_adjustment:1; + unsigned char f54_query5_b1__7:7; + + /* query 6 */ + unsigned char has_sensor_assignment:1; + unsigned char has_interference_metric:1; + unsigned char has_sense_frequency_control:1; + unsigned char has_firmware_noise_mitigation:1; + unsigned char has_ctrl11:1; + unsigned char has_two_byte_report_rate:1; + unsigned char has_one_byte_report_rate:1; + unsigned char has_relaxation_control:1; + + /* query 7 */ + unsigned char curve_compensation_mode:2; + unsigned char f54_query7_b2__7:6; + + /* query 8 */ + unsigned char f54_query8_b0:1; + unsigned char has_iir_filter:1; + unsigned char has_cmn_removal:1; + unsigned char has_cmn_maximum:1; + unsigned char has_touch_hysteresis:1; + unsigned char has_edge_compensation:1; + unsigned char has_per_frequency_noise_control:1; + unsigned char has_enhanced_stretch:1; + + /* query 9 */ + unsigned char has_force_fast_relaxation:1; + unsigned char has_multi_metric_state_machine:1; + unsigned char has_signal_clarity:1; + unsigned char has_variance_metric:1; + unsigned char has_0d_relaxation_control:1; + unsigned char has_0d_acquisition_control:1; + unsigned char has_status:1; + unsigned char has_slew_metric:1; + + /* query 10 */ + unsigned char has_h_blank:1; + unsigned char has_v_blank:1; + unsigned char has_long_h_blank:1; + unsigned char has_startup_fast_relaxation:1; + unsigned char has_esd_control:1; + unsigned char has_noise_mitigation2:1; + unsigned char has_noise_state:1; + unsigned char has_energy_ratio_relaxation:1; + + /* query 11 */ + unsigned char has_excessive_noise_reporting:1; + unsigned char has_slew_option:1; + unsigned char has_two_overhead_bursts:1; + unsigned char has_query13:1; + unsigned char has_one_overhead_burst:1; + unsigned char f54_query11_b5:1; + unsigned char has_ctrl88:1; + unsigned char has_query15:1; + + /* query 12 */ + unsigned char number_of_sensing_frequencies:4; + unsigned char f54_query12_b4__7:4; + } __packed; + unsigned char data[14]; + }; +}; + +struct f54_query_13 { + union { + struct { + unsigned char has_ctrl86:1; + unsigned char has_ctrl87:1; + unsigned char has_ctrl87_sub0:1; + unsigned char has_ctrl87_sub1:1; + unsigned char has_ctrl87_sub2:1; + unsigned char has_cidim:1; + unsigned char has_noise_mitigation_enhancement:1; + unsigned char has_rail_im:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_15 { + union { + struct { + unsigned char has_ctrl90:1; + unsigned char has_transmit_strength:1; + unsigned char has_ctrl87_sub3:1; + unsigned char has_query16:1; + unsigned char has_query20:1; + unsigned char has_query21:1; + unsigned char has_query22:1; + unsigned char has_query25:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_16 { + union { + struct { + unsigned char has_query17:1; + unsigned char has_data17:1; + unsigned char has_ctrl92:1; + unsigned char has_ctrl93:1; + unsigned char has_ctrl94_query18:1; + unsigned char has_ctrl95_query19:1; + unsigned char has_ctrl99:1; + unsigned char has_ctrl100:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_21 { + union { + struct { + unsigned char has_abs_rx:1; + unsigned char has_abs_tx:1; + unsigned char has_ctrl91:1; + unsigned char has_ctrl96:1; + unsigned char has_ctrl97:1; + unsigned char has_ctrl98:1; + unsigned char has_data19:1; + unsigned char has_query24_data18:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_22 { + union { + struct { + unsigned char has_packed_image:1; + unsigned char has_ctrl101:1; + unsigned char has_dynamic_sense_display_ratio:1; + unsigned char has_query23:1; + unsigned char has_ctrl103_query26:1; + unsigned char has_ctrl104:1; + unsigned char has_ctrl105:1; + unsigned char has_query28:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_23 { + union { + struct { + unsigned char has_ctrl102:1; + unsigned char has_ctrl102_sub1:1; + unsigned char has_ctrl102_sub2:1; + unsigned char has_ctrl102_sub4:1; + unsigned char has_ctrl102_sub5:1; + unsigned char has_ctrl102_sub9:1; + unsigned char has_ctrl102_sub10:1; + unsigned char has_ctrl102_sub11:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_25 { + union { + struct { + unsigned char has_ctrl106:1; + unsigned char has_ctrl102_sub12:1; + unsigned char has_ctrl107:1; + unsigned char has_ctrl108:1; + unsigned char has_ctrl109:1; + unsigned char has_data20:1; + unsigned char f54_query25_b6:1; + unsigned char has_query27:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_27 { + union { + struct { + unsigned char has_ctrl110:1; + unsigned char has_data21:1; + unsigned char has_ctrl111:1; + unsigned char has_ctrl112:1; + unsigned char has_ctrl113:1; + unsigned char has_data22:1; + unsigned char has_ctrl114:1; + unsigned char has_query29:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_29 { + union { + struct { + unsigned char has_ctrl115:1; + unsigned char has_ground_ring_options:1; + unsigned char has_lost_bursts_tuning:1; + unsigned char has_aux_exvcom2_select:1; + unsigned char has_ctrl116:1; + unsigned char has_data23:1; + unsigned char has_ctrl117:1; + unsigned char has_query30:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_30 { + union { + struct { + unsigned char has_ctrl118:1; + unsigned char has_ctrl119:1; + unsigned char has_ctrl120:1; + unsigned char has_ctrl121:1; + unsigned char has_ctrl122_query31:1; + unsigned char has_ctrl123:1; + unsigned char has_ctrl124:1; + unsigned char has_query32:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_32 { + union { + struct { + unsigned char has_ctrl125:1; + unsigned char has_ctrl126:1; + unsigned char has_ctrl127:1; + unsigned char has_abs_charge_pump_disable:1; + unsigned char has_query33:1; + unsigned char has_data24:1; + unsigned char has_query34:1; + unsigned char has_query35:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_33 { + union { + struct { + unsigned char has_ctrl128:1; + unsigned char has_ctrl129:1; + unsigned char has_ctrl130:1; + unsigned char has_ctrl131:1; + unsigned char has_ctrl132:1; + unsigned char has_ctrl133:1; + unsigned char has_ctrl134:1; + unsigned char has_query36:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_35 { + union { + struct { + unsigned char has_data25:1; + unsigned char has_ctrl135:1; + unsigned char has_ctrl136:1; + unsigned char has_ctrl137:1; + unsigned char has_ctrl138:1; + unsigned char has_ctrl139:1; + unsigned char has_data26:1; + unsigned char has_ctrl140:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_36 { + union { + struct { + unsigned char has_ctrl141:1; + unsigned char has_ctrl142:1; + unsigned char has_query37:1; + unsigned char has_ctrl143:1; + unsigned char has_ctrl144:1; + unsigned char has_ctrl145:1; + unsigned char has_ctrl146:1; + unsigned char has_query38:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_38 { + union { + struct { + unsigned char has_ctrl147:1; + unsigned char has_ctrl148:1; + unsigned char has_ctrl149:1; + unsigned char has_ctrl150:1; + unsigned char has_ctrl151:1; + unsigned char has_ctrl152:1; + unsigned char has_ctrl153:1; + unsigned char has_query39:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_39 { + union { + struct { + unsigned char has_ctrl154:1; + unsigned char has_ctrl155:1; + unsigned char has_ctrl156:1; + unsigned char has_ctrl160:1; + unsigned char has_ctrl157_ctrl158:1; + unsigned char f54_query39_b5__6:2; + unsigned char has_query40:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_40 { + union { + struct { + unsigned char has_ctrl169:1; + unsigned char has_ctrl163_query41:1; + unsigned char has_ctrl164:1; + unsigned char has_ctrl165_query42:1; + unsigned char has_ctrl166:1; + unsigned char has_ctrl167:1; + unsigned char has_ctrl168:1; + unsigned char has_query43:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_43 { + union { + struct { + unsigned char f54_query43_b0__1:2; + unsigned char has_ctrl171:1; + unsigned char has_ctrl172_query44_query45:1; + unsigned char has_ctrl173:1; + unsigned char has_ctrl174:1; + unsigned char has_ctrl175:1; + unsigned char has_query46:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_46 { + union { + struct { + unsigned char has_ctrl176:1; + unsigned char has_ctrl177_ctrl178:1; + unsigned char has_ctrl179:1; + unsigned char f54_query46_b3:1; + unsigned char has_data27:1; + unsigned char has_data28:1; + unsigned char f54_query46_b6:1; + unsigned char has_query47:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_47 { + union { + struct { + unsigned char f54_query47_b0:1; + unsigned char has_ctrl182:1; + unsigned char has_ctrl183:1; + unsigned char f54_query47_b3:1; + unsigned char has_ctrl185:1; + unsigned char has_ctrl186:1; + unsigned char has_ctrl187:1; + unsigned char has_query49:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_49 { + union { + struct { + unsigned char f54_query49_b0__1:2; + unsigned char has_ctrl188:1; + unsigned char has_data31:1; + unsigned char has_data32:1; + unsigned char has_ctrl189:1; + unsigned char has_ctrl190:1; + unsigned char has_query50:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_50 { + union { + struct { + unsigned char has_ctrl191:1; + unsigned char has_ctrl192:1; + unsigned char f54_query50_b2__4:3; + unsigned char has_ctrl194:1; + unsigned char has_ctrl195:1; + unsigned char has_query51:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_51 { + union { + struct { + unsigned char f54_query51_b0:1; + unsigned char has_ctrl196:1; + unsigned char f54_query51_b2:1; + unsigned char f54_query51_b3:1; + unsigned char f54_query51_b4:1; + unsigned char has_query53_query54_ctrl198:1; + unsigned char has_ctrl199:1; + unsigned char has_query55:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_55 { + union { + struct { + unsigned char has_query56:1; + unsigned char has_data33_data34:1; + unsigned char has_alternate_report_rate:1; + unsigned char has_ctrl200:1; + unsigned char has_ctrl201_ctrl202:1; + unsigned char has_ctrl203:1; + unsigned char has_ctrl204:1; + unsigned char has_query57:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_57 { + union { + struct { + unsigned char has_ctrl205:1; + unsigned char has_ctrl206:1; + unsigned char has_usb_bulk_read:1; + unsigned char has_ctrl207:1; + unsigned char has_ctrl208:1; + unsigned char has_ctrl209:1; + unsigned char has_ctrl210:1; + unsigned char has_query58:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_58 { + union { + struct { + unsigned char has_query59:1; + unsigned char has_query60:1; + unsigned char has_ctrl211:1; + unsigned char has_ctrl212:1; + unsigned char has_hybrid_abs_tx_axis_filtering:1; + unsigned char f54_query58_b5:1; + unsigned char has_ctrl213:1; + unsigned char has_query61:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_61 { + union { + struct { + unsigned char has_ctrl214:1; + unsigned char has_ctrl215_query62_query63:1; + unsigned char f54_query61_b2__4:3; + unsigned char has_ctrl218:1; + unsigned char has_hybrid_abs_buttons:1; + unsigned char has_query64:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_62 { + union { + struct { + unsigned char size_of_ctrl215_sub1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_63 { + union { + struct { + unsigned char size_of_ctrl215_sub2; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_64 { + union { + struct { + unsigned char f54_query64_b0:1; + unsigned char has_ctrl220:1; + unsigned char f54_query64_b2:1; + unsigned char has_ctrl222:1; + unsigned char has_ctrl219_sub1:1; + unsigned char has_ctrl103_sub3:1; + unsigned char has_ctrl224_ctrl226_ctrl227:1; + unsigned char has_query65:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_65 { + union { + struct { + unsigned char has_ctrl225:1; + unsigned char has_query66_ctrl231:1; + unsigned char has_ctrl232:1; + unsigned char has_query67:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_67 { + union { + struct { + unsigned char has_abs_doze_spatial_filter_enable:1; + unsigned char has_abs_doze_average_filter_enable:1; + unsigned char has_single_display_pulse:1; + unsigned char f54_query67_b3__6:4; + unsigned char has_query68:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_68 { + union { + struct { + unsigned char f54_query68_b0__4:5; + unsigned char has_freq_filter_bw_ext:1; + unsigned char f54_query68_b6:1; + unsigned char has_query69:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_query_69 { + union { + struct { + unsigned char has_ctrl240_sub0:1; + unsigned char has_ctrl240_sub1_sub2:1; + unsigned char has_ctrl240_sub3:1; + unsigned char has_ctrl240_sub4:1; + unsigned char burst_mode_report_type_enabled:1; + unsigned char f54_query69_b5__7:3; + } __packed; + unsigned char data[1]; + }; +}; + +struct f54_data_31 { + union { + struct { + unsigned char is_calibration_crc:1; + unsigned char calibration_crc:1; + unsigned char short_test_row_number:5; + } __packed; + struct { + unsigned char data[1]; + unsigned short address; + } __packed; + }; +}; + +struct f54_control_7 { + union { + struct { + unsigned char cbc_cap:3; + unsigned char cbc_polarity:1; + unsigned char cbc_tx_carrier_selection:1; + unsigned char f54_ctrl7_b5__7:3; + } __packed; + struct { + unsigned char data[1]; + unsigned short address; + } __packed; + }; +}; + +struct f54_control_41 { + union { + struct { + unsigned char no_signal_clarity:1; + unsigned char f54_ctrl41_b1__7:7; + } __packed; + struct { + unsigned char data[1]; + unsigned short address; + } __packed; + }; +}; + +struct f54_control_57 { + union { + struct { + unsigned char cbc_cap:3; + unsigned char cbc_polarity:1; + unsigned char cbc_tx_carrier_selection:1; + unsigned char f54_ctrl57_b5__7:3; + } __packed; + struct { + unsigned char data[1]; + unsigned short address; + } __packed; + }; +}; + +struct f54_control_86 { + union { + struct { + unsigned char enable_high_noise_state:1; + unsigned char dynamic_sense_display_ratio:2; + unsigned char f54_ctrl86_b3__7:5; + } __packed; + struct { + unsigned char data[1]; + unsigned short address; + } __packed; + }; +}; + +struct f54_control_88 { + union { + struct { + unsigned char tx_low_reference_polarity:1; + unsigned char tx_high_reference_polarity:1; + unsigned char abs_low_reference_polarity:1; + unsigned char abs_polarity:1; + unsigned char cbc_polarity:1; + unsigned char cbc_tx_carrier_selection:1; + unsigned char charge_pump_enable:1; + unsigned char cbc_abs_auto_servo:1; + } __packed; + struct { + unsigned char data[1]; + unsigned short address; + } __packed; + }; +}; + +/* td43xx start */ +struct f54_control_91 { + union { + struct { + unsigned char reflo_transcap_capacitance; + unsigned char refhi_transcap_capacitance; + unsigned char receiver_feedback_capacitance; + unsigned char reference_receiver_feedback_capacitance; + unsigned char gain_ctrl; + } __packed; + struct { + unsigned char data[5]; + unsigned short address; + } __packed; + }; +}; + +struct f54_control_96 { + union { + struct { + unsigned char cbc_transcap[64]; + } __packed; + struct { + unsigned char data[64]; + unsigned short address; + } __packed; + }; +}; + +struct f54_control_99 { + union { + struct { + unsigned char integration_duration_lsb; + unsigned char integration_duration_msb; + unsigned char reset_duration; + } __packed; + struct { + unsigned char data[3]; + unsigned short address; + } __packed; + }; +}; +/* td43xx end */ + +struct f54_control_110 { + union { + struct { + unsigned char active_stylus_rx_feedback_cap; + unsigned char active_stylus_rx_feedback_cap_reference; + unsigned char active_stylus_low_reference; + unsigned char active_stylus_high_reference; + unsigned char active_stylus_gain_control; + unsigned char active_stylus_gain_control_reference; + unsigned char active_stylus_timing_mode; + unsigned char active_stylus_discovery_bursts; + unsigned char active_stylus_detection_bursts; + unsigned char active_stylus_discovery_noise_multiplier; + unsigned char active_stylus_detection_envelope_min; + unsigned char active_stylus_detection_envelope_max; + unsigned char active_stylus_lose_count; + } __packed; + struct { + unsigned char data[13]; + unsigned short address; + } __packed; + }; +}; + +struct f54_control_149 { + union { + struct { + unsigned char trans_cbc_global_cap_enable:1; + unsigned char f54_ctrl149_b1__7:7; + } __packed; + struct { + unsigned char data[1]; + unsigned short address; + } __packed; + }; +}; + +struct f54_control_182 { + union { + struct { + unsigned char cbc_timing_ctrl_tx_lsb; + unsigned char cbc_timing_ctrl_tx_msb; + unsigned char cbc_timing_ctrl_rx_lsb; + unsigned char cbc_timing_ctrl_rx_msb; + } __packed; + struct { + unsigned char data[4]; + unsigned short address; + } __packed; + }; +}; +struct f54_control_188 { + union { + struct { + unsigned char start_calibration:1; + unsigned char start_is_calibration:1; + unsigned char frequency:2; + unsigned char start_production_test:1; + unsigned char short_test_calibration:1; + unsigned char f54_ctrl188_b7:1; + } __packed; + struct { + unsigned char data[1]; + unsigned short address; + } __packed; + }; +}; + +struct f54_control_223 { + union { + struct { + unsigned char voltages_for_0d:8; + } __packed; + struct { + unsigned char data[1]; + unsigned short address; + } __packed; + }; +}; + +struct f54_control_225 { + union { + struct { + unsigned char force_doze_mode:1; + unsigned char f54_ctrl225_b1__7:7; + } __packed; + struct { + unsigned char data[1]; + unsigned short address; + } __packed; + }; +}; + + +struct f54_control { + struct f54_control_7 *reg_7; + struct f54_control_41 *reg_41; + struct f54_control_57 *reg_57; + struct f54_control_86 *reg_86; + struct f54_control_88 *reg_88; + struct f54_control_91 *reg_91; + struct f54_control_96 *reg_96; + struct f54_control_99 *reg_99; + struct f54_control_110 *reg_110; + struct f54_control_149 *reg_149; + struct f54_control_182 *reg_182; + struct f54_control_188 *reg_188; + struct f54_control_223 *reg_223; + struct f54_control_225 *reg_225; +}; + +struct synaptics_rmi4_f54_handle { + bool no_auto_cal; + bool skip_preparation; + char *data; + unsigned char status; + unsigned char intr_mask; + unsigned char intr_reg_num; + unsigned char tx_assigned; + unsigned char rx_assigned; + /* td43xx start */ + unsigned char swap_sensor_side; + unsigned char left_mux_size; + unsigned char right_mux_size; + /* td43xx end */ + unsigned char *report_data; + unsigned short query_base_addr; + unsigned short control_base_addr; + unsigned short data_base_addr; + unsigned short command_base_addr; + unsigned short fifoindex; + unsigned int report_size; + unsigned int data_buffer_size; + unsigned int data_pos; + int result_type; + enum f54_report_types report_type; + struct f54_query query; + struct f54_query_13 query_13; + struct f54_query_15 query_15; + struct f54_query_16 query_16; + struct f54_query_21 query_21; + struct f54_query_22 query_22; + struct f54_query_23 query_23; + struct f54_query_25 query_25; + struct f54_query_27 query_27; + struct f54_query_29 query_29; + struct f54_query_30 query_30; + struct f54_query_32 query_32; + struct f54_query_33 query_33; + struct f54_query_35 query_35; + struct f54_query_36 query_36; + struct f54_query_38 query_38; + struct f54_query_39 query_39; + struct f54_query_40 query_40; + struct f54_query_43 query_43; + struct f54_query_46 query_46; + struct f54_query_47 query_47; + struct f54_query_49 query_49; + struct f54_query_50 query_50; + struct f54_query_51 query_51; + struct f54_query_55 query_55; + struct f54_query_57 query_57; + struct f54_query_58 query_58; + struct f54_query_61 query_61; + struct f54_query_62 query_62; + struct f54_query_63 query_63; + struct f54_query_64 query_64; + struct f54_query_65 query_65; + struct f54_query_67 query_67; + struct f54_query_68 query_68; + struct f54_query_69 query_69; + struct f54_data_31 data_31; + struct f54_control control; + struct mutex status_mutex; + struct kobject *sysfs_dir; + struct hrtimer watchdog; + struct work_struct timeout_work; + struct work_struct test_report_work; + struct work_struct resume_touch_work; + struct workqueue_struct *test_report_workqueue; + struct synaptics_rmi4_data *rmi4_data; +}; + +struct f55_query { + union { + struct { + /* query 0 */ + unsigned char num_of_rx_electrodes; + + /* query 1 */ + unsigned char num_of_tx_electrodes; + + /* query 2 */ + unsigned char has_sensor_assignment:1; + unsigned char has_edge_compensation:1; + unsigned char curve_compensation_mode:2; + unsigned char has_ctrl6:1; + unsigned char has_alternate_transmitter_assignment:1; + unsigned char has_single_layer_multi_touch:1; + unsigned char has_query5:1; + } __packed; + unsigned char data[3]; + }; +}; + +struct f55_query_3 { + union { + struct { + unsigned char has_ctrl8:1; + unsigned char has_ctrl9:1; + unsigned char has_oncell_pattern_support:1; + unsigned char has_data0:1; + unsigned char has_single_wide_pattern_support:1; + unsigned char has_mirrored_tx_pattern_support:1; + unsigned char has_discrete_pattern_support:1; + unsigned char has_query9:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f55_query_5 { + union { + struct { + unsigned char has_corner_compensation:1; + unsigned char has_ctrl12:1; + unsigned char has_trx_configuration:1; + unsigned char has_ctrl13:1; + unsigned char f55_query5_b4:1; + unsigned char has_ctrl14:1; + unsigned char has_basis_function:1; + unsigned char has_query17:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f55_query_17 { + union { + struct { + unsigned char f55_query17_b0:1; + unsigned char has_ctrl16:1; + unsigned char has_ctrl18_ctrl19:1; + unsigned char has_ctrl17:1; + unsigned char has_ctrl20:1; + unsigned char has_ctrl21:1; + unsigned char has_ctrl22:1; + unsigned char has_query18:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f55_query_18 { + union { + struct { + unsigned char has_ctrl23:1; + unsigned char has_ctrl24:1; + unsigned char has_query19:1; + unsigned char has_ctrl25:1; + unsigned char has_ctrl26:1; + unsigned char has_ctrl27_query20:1; + unsigned char has_ctrl28_query21:1; + unsigned char has_query22:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f55_query_22 { + union { + struct { + unsigned char has_ctrl29:1; + unsigned char has_query23:1; + unsigned char has_guard_disable:1; + unsigned char has_ctrl30:1; + unsigned char has_ctrl31:1; + unsigned char has_ctrl32:1; + unsigned char has_query24_through_query27:1; + unsigned char has_query28:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f55_query_23 { + union { + struct { + unsigned char amp_sensor_enabled:1; + unsigned char image_transposed:1; + unsigned char first_column_at_left_side:1; + unsigned char size_of_column2mux:5; + } __packed; + unsigned char data[1]; + }; +}; + +struct f55_query_28 { + union { + struct { + unsigned char f55_query28_b0__4:5; + unsigned char has_ctrl37:1; + unsigned char has_query29:1; + unsigned char has_query30:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f55_query_30 { + union { + struct { + unsigned char has_ctrl38:1; + unsigned char has_query31_query32:1; + unsigned char has_ctrl39:1; + unsigned char has_ctrl40:1; + unsigned char has_ctrl41:1; + unsigned char has_ctrl42:1; + unsigned char has_ctrl43_ctrl44:1; + unsigned char has_query33:1; + } __packed; + unsigned char data[1]; + }; +}; + +struct f55_query_33 { + union { + struct { + unsigned char has_extended_amp_pad:1; + unsigned char has_extended_amp_btn:1; + unsigned char has_ctrl45_ctrl46:1; + unsigned char f55_query33_b3:1; + unsigned char has_ctrl47_sub0_sub1:1; + unsigned char f55_query33_b5__7:3; + } __packed; + unsigned char data[1]; + }; +}; + +struct f55_control_43 { + union { + struct { + unsigned char swap_sensor_side:1; + unsigned char f55_ctrl43_b1__7:7; + unsigned char afe_l_mux_size:4; + unsigned char afe_r_mux_size:4; + } __packed; + unsigned char data[2]; + }; +}; + +struct synaptics_rmi4_f55_handle { + bool amp_sensor; + bool extended_amp; + bool extended_amp_btn; + bool has_force; + unsigned char size_of_column2mux; + unsigned char afe_mux_offset; + unsigned char force_tx_offset; + unsigned char force_rx_offset; + unsigned char *tx_assignment; + unsigned char *rx_assignment; + unsigned char *force_tx_assignment; + unsigned char *force_rx_assignment; + unsigned short query_base_addr; + unsigned short control_base_addr; + unsigned short data_base_addr; + unsigned short command_base_addr; + struct f55_query query; + struct f55_query_3 query_3; + struct f55_query_5 query_5; + struct f55_query_17 query_17; + struct f55_query_18 query_18; + struct f55_query_22 query_22; + struct f55_query_23 query_23; + struct f55_query_28 query_28; + struct f55_query_30 query_30; + struct f55_query_33 query_33; +}; + +show_prototype(num_of_mapped_tx) +show_prototype(num_of_mapped_rx) +show_prototype(tx_mapping) +show_prototype(rx_mapping) +show_prototype(force_tx_mapping) +show_prototype(force_rx_mapping) +show_prototype(report_size) +show_prototype(status) +store_prototype(do_preparation) +store_prototype(force_cal) +store_prototype(get_report) +store_prototype(resume_touch) +store_prototype(do_afe_calibration) +show_store_prototype(report_type) +show_store_prototype(fifoindex) +show_store_prototype(no_auto_cal) +show_store_prototype(read_report) +/* td43xx start */ +show_store_prototype(td43xx_full_raw) +show_store_prototype(td43xx_noise) +show_store_prototype(tddi_extend_ee_short) +show_store_prototype(td43xx_ee_short) +show_store_prototype(td4722_b7_amp_open) +show_store_prototype(td43xx_amp_open) +show_store_prototype(abs_0d_open_w_autoservo) +/* td43xx end */ + +static struct attribute *attrs[] = { + attrify(num_of_mapped_tx), + attrify(num_of_mapped_rx), + attrify(tx_mapping), + attrify(rx_mapping), + attrify(force_tx_mapping), + attrify(force_rx_mapping), + attrify(report_size), + attrify(status), + attrify(do_preparation), + attrify(force_cal), + attrify(get_report), + attrify(resume_touch), + attrify(do_afe_calibration), + attrify(report_type), + attrify(fifoindex), + attrify(no_auto_cal), + attrify(read_report), + /* td43xx start */ + attrify(td43xx_full_raw), + attrify(td43xx_noise), + attrify(tddi_extend_ee_short), + attrify(td43xx_ee_short), + attrify(td4722_b7_amp_open), + attrify(td43xx_amp_open), + attrify(abs_0d_open_w_autoservo), + /* td43xx end */ + NULL, +}; + +static struct attribute_group attr_group = { + .attrs = attrs, +}; +/* +static ssize_t test_sysfs_data_read(struct file *data_file, + struct kobject *kobj, struct bin_attribute *attributes, + char *buf, loff_t pos, size_t count); + +static struct bin_attribute test_report_data = { + .attr = { + .name = "report_data", + .mode = S_IRUGO, + }, + .size = 0, + .read = test_sysfs_data_read, +}; +*/ +static struct synaptics_rmi4_f54_handle *f54; +static struct synaptics_rmi4_f55_handle *f55; + +/* td43xx start */ +static unsigned char *td43xx_full_raw_data; +static signed short *td43xx_noise_delta; +static unsigned char *td43xx_ee_short_data; +static unsigned char *td43xx_amp_open_data; +/* td43xx end */ +static int *g_abs_0d_open_data_output; +static char g_flag_read_report_fail; + +DECLARE_COMPLETION(test_remove_complete_force); + +static bool test_report_type_valid(enum f54_report_types report_type) +{ + switch (report_type) { + case F54_8BIT_IMAGE: + case F54_16BIT_IMAGE: + case F54_RAW_16BIT_IMAGE: + case F54_HIGH_RESISTANCE: + case F54_TX_TO_TX_SHORTS: + case F54_RX_TO_RX_SHORTS_1: + case F54_TRUE_BASELINE: + case F54_FULL_RAW_CAP_MIN_MAX: + case F54_RX_OPENS_1: + case F54_TX_OPENS: + case F54_TX_TO_GND_SHORTS: + case F54_RX_TO_RX_SHORTS_2: + case F54_RX_OPENS_2: + case F54_FULL_RAW_CAP: + case F54_FULL_RAW_CAP_NO_RX_COUPLING: + case F54_SENSOR_SPEED: + case F54_ADC_RANGE: + case F54_TRX_OPENS: + case F54_TRX_TO_GND_SHORTS: + case F54_TRX_SHORTS: + case F54_ABS_RAW_CAP: + case F54_ABS_DELTA_CAP: + case F54_ABS_HYBRID_DELTA_CAP: + case F54_ABS_HYBRID_RAW_CAP: + case F54_AMP_FULL_RAW_CAP: + case F54_AMP_RAW_ADC: + /* td43xx start */ + case F54_TD43XX_FULL_RAW: + case F54_TD43XX_NOISE: + case F54_TD43XX_EE_SHORT: + /* td43xx end */ + return true; + break; + case F54_ABS_DOZE_NO_CBC_INCELL: + if (f54->query_65.has_ctrl225) { + return true; + } + else { + return false; + } + break; + default: + f54->report_type = INVALID_REPORT_TYPE; + f54->report_size = 0; + return false; + } +} + +static void test_set_report_size(void) +{ + int retval; + unsigned char tx = f54->tx_assigned; + unsigned char rx = f54->rx_assigned; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + switch (f54->report_type) { + case F54_8BIT_IMAGE: + f54->report_size = tx * rx; + break; + case F54_16BIT_IMAGE: + case F54_RAW_16BIT_IMAGE: + case F54_TRUE_BASELINE: + case F54_FULL_RAW_CAP: + case F54_FULL_RAW_CAP_NO_RX_COUPLING: + case F54_SENSOR_SPEED: + case F54_AMP_FULL_RAW_CAP: + case F54_AMP_RAW_ADC: + /* td43xx start */ + case F54_TD43XX_FULL_RAW: + case F54_TD43XX_NOISE: + /* td43xx end */ + f54->report_size = 2 * tx * rx; + break; + /* td43xx start */ + case F54_TD43XX_EE_SHORT: + f54->report_size = 2 * 2 * tx * rx; + break; + /* td43xx end */ + case F54_HIGH_RESISTANCE: + f54->report_size = HIGH_RESISTANCE_DATA_SIZE; + break; + case F54_TX_TO_TX_SHORTS: + case F54_TX_OPENS: + case F54_TX_TO_GND_SHORTS: + f54->report_size = (tx + 7) / 8; + break; + case F54_RX_TO_RX_SHORTS_1: + case F54_RX_OPENS_1: + if (rx < tx) + f54->report_size = 2 * rx * rx; + else + f54->report_size = 2 * tx * rx; + break; + case F54_FULL_RAW_CAP_MIN_MAX: + f54->report_size = FULL_RAW_CAP_MIN_MAX_DATA_SIZE; + break; + case F54_RX_TO_RX_SHORTS_2: + case F54_RX_OPENS_2: + if (rx <= tx) + f54->report_size = 0; + else + f54->report_size = 2 * rx * (rx - tx); + break; + case F54_ADC_RANGE: + if (f54->query.has_signal_clarity) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->control.reg_41->address, + f54->control.reg_41->data, + sizeof(f54->control.reg_41->data)); + if (retval < 0) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Failed to read control reg_41\n", + __func__); + f54->report_size = 0; + break; + } + if (!f54->control.reg_41->no_signal_clarity) { + if (tx % 4) + tx += 4 - (tx % 4); + } + } + f54->report_size = 2 * tx * rx; + break; + case F54_TRX_OPENS: + case F54_TRX_TO_GND_SHORTS: + case F54_TRX_SHORTS: + f54->report_size = TRX_OPEN_SHORT_DATA_SIZE; + break; + case F54_ABS_RAW_CAP: + case F54_ABS_DELTA_CAP: + case F54_ABS_HYBRID_DELTA_CAP: + case F54_ABS_HYBRID_RAW_CAP: + f54->report_size = 4 * (tx + rx); + break; + case F54_ABS_DOZE_NO_CBC_INCELL: + f54->report_size = 4 * (tx + rx); + break; + default: + f54->report_size = 0; + } + + return; +} + +static int test_set_interrupt(bool set) +{ + int retval; + unsigned char ii; + unsigned char zero = 0x00; + unsigned char temp; + unsigned char *intr_mask; + unsigned short f01_ctrl_reg; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + intr_mask = rmi4_data->intr_mask; + f01_ctrl_reg = rmi4_data->f01_ctrl_base_addr + 1 + f54->intr_reg_num; + + if (!set) { + retval = synaptics_rmi4_reg_write(rmi4_data, + f01_ctrl_reg, + &zero, + sizeof(zero)); + if (retval < 0) + return retval; + } + + for (ii = 0; ii < rmi4_data->num_of_intr_regs; ii++) { + if (intr_mask[ii] != 0x00) { + f01_ctrl_reg = rmi4_data->f01_ctrl_base_addr + 1 + ii; + if (set) { + retval = synaptics_rmi4_reg_write(rmi4_data, + f01_ctrl_reg, + &zero, + sizeof(zero)); + if (retval < 0) + return retval; + } else { + retval = synaptics_rmi4_reg_write(rmi4_data, + f01_ctrl_reg, + &(intr_mask[ii]), + sizeof(intr_mask[ii])); + if (retval < 0) + return retval; + + retval = synaptics_rmi4_reg_read(rmi4_data, + f01_ctrl_reg, + &temp, + sizeof(temp)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read interrupt enable register\n", + __func__); + return retval; + } + + pr_err("%s: intr_mask[%d] = 0x%02x\n", __func__, ii, intr_mask[ii]); + pr_err("%s: temp = 0x%02x\n", __func__, temp); + + retval = synaptics_rmi4_reg_write(rmi4_data, + f01_ctrl_reg, + &(intr_mask[ii]), + sizeof(intr_mask[ii])); + if (retval < 0) + return retval; + } + } + } + + f01_ctrl_reg = rmi4_data->f01_ctrl_base_addr + 1 + f54->intr_reg_num; + + if (set) { + retval = synaptics_rmi4_reg_write(rmi4_data, + f01_ctrl_reg, + &f54->intr_mask, + 1); + if (retval < 0) + return retval; + } + + return 0; +} + +static int test_wait_for_command_completion(void) +{ + int retval; + unsigned char value; + unsigned char timeout_count; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + timeout_count = 0; + do { + if (rmi4_data->suspend) + return -EINVAL; + + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->command_base_addr, + &value, + sizeof(value)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read command register\n", + __func__); + return retval; + } + + if (value == 0x00) + break; + + msleep(100); + timeout_count++; + } while (timeout_count < COMMAND_TIMEOUT_100MS); + + if (timeout_count == COMMAND_TIMEOUT_100MS) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Timed out waiting for command completion\n", + __func__); + dev_err(rmi4_data->pdev->dev.parent, + "%s: command = 0x%02x\n", __func__, value); + return -ETIMEDOUT; + } + + return 0; +} + +static int test_do_command(unsigned char command) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = synaptics_rmi4_reg_write(rmi4_data, + f54->command_base_addr, + &command, + sizeof(command)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write command\n", + __func__); + return retval; + } + + retval = test_wait_for_command_completion(); + if (retval < 0) + return retval; + + return 0; +} + +static int test_do_preparation(void) +{ + int retval; + unsigned char value; + unsigned char zero = 0x00; +#ifndef USE_RT8 + unsigned char device_ctrl; +#endif + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; +#ifndef USE_RT8 + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_ctrl_base_addr, + &device_ctrl, + sizeof(device_ctrl)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set no sleep\n", + __func__); + return retval; + } + + device_ctrl |= NO_SLEEP_ON; + + retval = synaptics_rmi4_reg_write(rmi4_data, + rmi4_data->f01_ctrl_base_addr, + &device_ctrl, + sizeof(device_ctrl)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set no sleep\n", + __func__); + return retval; + } + +#endif + if (f54->skip_preparation) + return 0; + + switch (f54->report_type) { + case F54_16BIT_IMAGE: + case F54_RAW_16BIT_IMAGE: + case F54_SENSOR_SPEED: + case F54_ADC_RANGE: + case F54_ABS_RAW_CAP: + case F54_ABS_DELTA_CAP: + case F54_ABS_HYBRID_DELTA_CAP: + case F54_ABS_HYBRID_RAW_CAP: +#ifdef USE_RT8 + case F54_FULL_RAW_CAP_NO_RX_COUPLING: +#endif + case F54_TD43XX_FULL_RAW: + break; + case F54_AMP_RAW_ADC: + if (f54->query_49.has_ctrl188) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->control.reg_188->address, + f54->control.reg_188->data, + sizeof(f54->control.reg_188->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set start production test\n", + __func__); + return retval; + } + f54->control.reg_188->start_production_test = 1; + retval = synaptics_rmi4_reg_write(rmi4_data, + f54->control.reg_188->address, + f54->control.reg_188->data, + sizeof(f54->control.reg_188->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set start production test\n", + __func__); + return retval; + } + } + break; + case F54_ABS_DOZE_NO_CBC_INCELL: + if (f54->query_65.has_ctrl225) { + /* enable force doze mode */ + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->control.reg_225->address, + &value, + sizeof(value)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: fail to read f54 ctrl225 reg\n", + __func__); + return retval; + } + + if (!(value && 0x01)) { + value = (value | 0x01); + + retval = synaptics_rmi4_reg_write(rmi4_data, + f54->control.reg_225->address, + &value, + sizeof(value)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: fail to set f54 ctrl225 reg\n", + __func__); + return retval; + } + retval = test_do_command(COMMAND_FORCE_UPDATE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: fail to do force update\n", + __func__); + return retval; + } + } + + + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_ctrl_base_addr, + &device_ctrl, + sizeof(device_ctrl)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: fail to get f01 ctrl base reg\n", + __func__); + return retval; + } + + device_ctrl &= 0xF8; /* clear the bit of no-sleep and set sleep mode = '00'*/ + + retval = synaptics_rmi4_reg_write(rmi4_data, + rmi4_data->f01_ctrl_base_addr, + &device_ctrl, + sizeof(device_ctrl)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: fail to set f01 ctrl base reg\n", + __func__); + return retval; + } + + } + break; + default: + if (f54->query.touch_controller_family == 1) + disable_cbc(reg_7); + else if (f54->query.has_ctrl88) + disable_cbc(reg_88); + + if (f54->query.has_0d_acquisition_control) + disable_cbc(reg_57); + + if ((f54->query.has_query15) && + (f54->query_15.has_query25) && + (f54->query_25.has_query27) && + (f54->query_27.has_query29) && + (f54->query_29.has_query30) && + (f54->query_30.has_query32) && + (f54->query_32.has_query33) && + (f54->query_33.has_query36) && + (f54->query_36.has_query38) && + (f54->query_38.has_ctrl149)) { + retval = synaptics_rmi4_reg_write(rmi4_data, + f54->control.reg_149->address, + &zero, + sizeof(f54->control.reg_149->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to disable global CBC\n", + __func__); + return retval; + } + } + + if (f54->query.has_signal_clarity) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->control.reg_41->address, + &value, + sizeof(f54->control.reg_41->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to disable signal clarity\n", + __func__); + return retval; + } + value |= 0x01; + retval = synaptics_rmi4_reg_write(rmi4_data, + f54->control.reg_41->address, + &value, + sizeof(f54->control.reg_41->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to disable signal clarity\n", + __func__); + return retval; + } + } + + retval = test_do_command(COMMAND_FORCE_UPDATE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do force update\n", + __func__); + return retval; + } + + retval = test_do_command(COMMAND_FORCE_CAL); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do force cal\n", + __func__); + return retval; + } + } + + return 0; +} + +static int test_do_afe_calibration(enum f54_afe_cal mode) +{ + int retval; + unsigned char timeout = CALIBRATION_TIMEOUT_S; + unsigned char timeout_count = 0; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->control.reg_188->address, + f54->control.reg_188->data, + sizeof(f54->control.reg_188->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to start calibration\n", + __func__); + return retval; + } + + if (mode == F54_AFE_CAL) + f54->control.reg_188->start_calibration = 1; + else if (mode == F54_AFE_IS_CAL) + f54->control.reg_188->start_is_calibration = 1; + + retval = synaptics_rmi4_reg_write(rmi4_data, + f54->control.reg_188->address, + f54->control.reg_188->data, + sizeof(f54->control.reg_188->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to start calibration\n", + __func__); + return retval; + } + + do { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->control.reg_188->address, + f54->control.reg_188->data, + sizeof(f54->control.reg_188->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to complete calibration\n", + __func__); + return retval; + } + + if (mode == F54_AFE_CAL) { + if (!f54->control.reg_188->start_calibration) + break; + } else if (mode == F54_AFE_IS_CAL) { + if (!f54->control.reg_188->start_is_calibration) + break; + } + + if (timeout_count == timeout) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Timed out waiting for calibration completion\n", + __func__); + return -EBUSY; + } + + timeout_count++; + msleep(1000); + } while (true); + + /* check CRC */ + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->data_31.address, + f54->data_31.data, + sizeof(f54->data_31.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read calibration CRC\n", + __func__); + return retval; + } + + if (mode == F54_AFE_CAL) { + if (f54->data_31.calibration_crc == 0) + return 0; + } else if (mode == F54_AFE_IS_CAL) { + if (f54->data_31.is_calibration_crc == 0) + return 0; + } + + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read calibration CRC\n", + __func__); + + return -EINVAL; +} + +static int test_check_for_idle_status(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + switch (f54->status) { + case STATUS_IDLE: + retval = 0; + break; + case STATUS_BUSY: + dev_err(rmi4_data->pdev->dev.parent, + "%s: Status busy\n", + __func__); + retval = -EINVAL; + break; + case STATUS_ERROR: + dev_err(rmi4_data->pdev->dev.parent, + "%s: Status error\n", + __func__); + retval = -EINVAL; + break; + default: + dev_err(rmi4_data->pdev->dev.parent, + "%s: Invalid status (%d)\n", + __func__, f54->status); + retval = -EINVAL; + } + + return retval; +} + +static void test_timeout_work(struct work_struct *work) +{ + int retval; + unsigned char command; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + mutex_lock(&f54->status_mutex); + + if (f54->status == STATUS_BUSY) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->command_base_addr, + &command, + sizeof(command)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read command register\n", + __func__); + } else if (command & COMMAND_GET_REPORT) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Report type not supported by FW\n", + __func__); + } else { + queue_work(f54->test_report_workqueue, + &f54->test_report_work); + goto exit; + } + f54->status = STATUS_ERROR; + f54->report_size = 0; + } + +exit: + mutex_unlock(&f54->status_mutex); + + return; +} + +static enum hrtimer_restart test_get_report_timeout(struct hrtimer *timer) +{ + schedule_work(&(f54->timeout_work)); + + return HRTIMER_NORESTART; +} + +static int test_do_resume_touch(void) +{ + int retval = 0; +#ifndef USE_RT8 + unsigned char device_ctrl; +#endif + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; +#ifndef USE_RT8 + retval = synaptics_rmi4_reg_read(rmi4_data, + rmi4_data->f01_ctrl_base_addr, + &device_ctrl, + sizeof(device_ctrl)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to restore no sleep setting\n", + __func__); + return retval; + } + + device_ctrl = device_ctrl & ~NO_SLEEP_ON; + device_ctrl |= rmi4_data->no_sleep_setting; + + retval = synaptics_rmi4_reg_write(rmi4_data, + rmi4_data->f01_ctrl_base_addr, + &device_ctrl, + sizeof(device_ctrl)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to restore no sleep setting\n", + __func__); + return retval; + } +#endif + test_set_interrupt(false); + + if (f54->skip_preparation) + return 0; + + switch (f54->report_type) { + case F54_16BIT_IMAGE: + case F54_RAW_16BIT_IMAGE: + case F54_SENSOR_SPEED: + case F54_ADC_RANGE: + case F54_ABS_RAW_CAP: + case F54_ABS_DELTA_CAP: + case F54_ABS_HYBRID_DELTA_CAP: + case F54_ABS_HYBRID_RAW_CAP: +#ifdef USE_RT8 + case F54_FULL_RAW_CAP_NO_RX_COUPLING: +#endif + case F54_TD43XX_FULL_RAW: + break; + case F54_ABS_DOZE_NO_CBC_INCELL: + rmi4_data->reset_device(rmi4_data, false); + break; + case F54_AMP_RAW_ADC: + if (f54->query_49.has_ctrl188) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->control.reg_188->address, + f54->control.reg_188->data, + sizeof(f54->control.reg_188->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set start production test\n", + __func__); + return retval; + } + f54->control.reg_188->start_production_test = 0; + retval = synaptics_rmi4_reg_write(rmi4_data, + f54->control.reg_188->address, + f54->control.reg_188->data, + sizeof(f54->control.reg_188->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set start production test\n", + __func__); + return retval; + } + } + break; + default: + pr_err("%s: resetting device\n", __func__); + rmi4_data->reset_device(rmi4_data, false); + pr_err("%s: done resetting device\n", __func__); + } + + return retval; +} + +static void test_resume_touch_work(struct work_struct *work) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = test_do_resume_touch(); + if (retval < 0) + dev_err(rmi4_data->pdev->dev.parent, + "%s: Resume touch failed\n", __func__); + +} + +static ssize_t test_sysfs_num_of_mapped_tx_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", f54->tx_assigned); +} + +static ssize_t test_sysfs_num_of_mapped_rx_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", f54->rx_assigned); +} + +static ssize_t test_sysfs_tx_mapping_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int cnt; + int count = 0; + unsigned char ii; + unsigned char tx_num; + unsigned char tx_electrodes; + + if (!f55) + return -EINVAL; + + tx_electrodes = f55->query.num_of_tx_electrodes; + + for (ii = 0; ii < tx_electrodes; ii++) { + tx_num = f55->tx_assignment[ii]; + if (tx_num == 0xff) + cnt = snprintf(buf, PAGE_SIZE - count, "xx "); + else + cnt = snprintf(buf, PAGE_SIZE - count, "%02u ", tx_num); + buf += cnt; + count += cnt; + } + + snprintf(buf, PAGE_SIZE - count, "\n"); + count++; + + return count; +} + +static ssize_t test_sysfs_rx_mapping_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int cnt; + int count = 0; + unsigned char ii; + unsigned char rx_num; + unsigned char rx_electrodes; + + if (!f55) + return -EINVAL; + + rx_electrodes = f55->query.num_of_rx_electrodes; + + for (ii = 0; ii < rx_electrodes; ii++) { + rx_num = f55->rx_assignment[ii]; + if (rx_num == 0xff) + cnt = snprintf(buf, PAGE_SIZE - count, "xx "); + else + cnt = snprintf(buf, PAGE_SIZE - count, "%02u ", rx_num); + buf += cnt; + count += cnt; + } + + snprintf(buf, PAGE_SIZE - count, "\n"); + count++; + + return count; +} + +static ssize_t test_sysfs_force_tx_mapping_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int cnt; + int count = 0; + unsigned char ii; + unsigned char tx_num; + unsigned char tx_electrodes; + + if (!f55 || !f55->has_force) + return -EINVAL; + + tx_electrodes = f55->query.num_of_tx_electrodes; + + for (ii = 0; ii < tx_electrodes; ii++) { + tx_num = f55->force_tx_assignment[ii]; + if (tx_num == 0xff) + cnt = snprintf(buf, PAGE_SIZE - count, "xx "); + else + cnt = snprintf(buf, PAGE_SIZE - count, "%02u ", tx_num); + buf += cnt; + count += cnt; + } + + snprintf(buf, PAGE_SIZE - count, "\n"); + count++; + + return count; +} + +static ssize_t test_sysfs_force_rx_mapping_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int cnt; + int count = 0; + unsigned char ii; + unsigned char rx_num; + unsigned char rx_electrodes; + + if (!f55 || !f55->has_force) + return -EINVAL; + + rx_electrodes = f55->query.num_of_rx_electrodes; + + for (ii = 0; ii < rx_electrodes; ii++) { + rx_num = f55->force_rx_assignment[ii]; + if (rx_num == 0xff) + cnt = snprintf(buf, PAGE_SIZE - count, "xx "); + else + cnt = snprintf(buf, PAGE_SIZE - count, "%02u ", rx_num); + buf += cnt; + count += cnt; + } + + snprintf(buf, PAGE_SIZE - count, "\n"); + count++; + + return count; +} + +static ssize_t test_sysfs_report_size_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", f54->report_size); +} + +static ssize_t test_sysfs_status_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int retval; + + mutex_lock(&f54->status_mutex); + + retval = snprintf(buf, PAGE_SIZE, "%u\n", f54->status); + + mutex_unlock(&f54->status_mutex); + + return retval; +} + +static ssize_t test_sysfs_do_preparation_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long setting; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + if (setting != 1) + return -EINVAL; + + mutex_lock(&f54->status_mutex); + + retval = test_check_for_idle_status(); + if (retval < 0) + goto exit; + + retval = test_do_preparation(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do preparation\n", + __func__); + goto exit; + } + + retval = count; + +exit: + mutex_unlock(&f54->status_mutex); + + return retval; +} + +static ssize_t test_sysfs_force_cal_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long setting; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + if (setting != 1) + return -EINVAL; + + mutex_lock(&f54->status_mutex); + + retval = test_check_for_idle_status(); + if (retval < 0) + goto exit; + + retval = test_do_command(COMMAND_FORCE_CAL); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do force cal\n", + __func__); + goto exit; + } + + retval = count; + +exit: + mutex_unlock(&f54->status_mutex); + + return retval; +} + +/* tddi f54 test reporting + */ +#ifdef F54_POLLING_GET_REPORT +static ssize_t test_sysfs_get_report_polling(void) +{ + int retval = 0; + unsigned char report_index[2]; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = test_wait_for_command_completion(); + if (retval < 0) { + retval = -EIO; + f54->status = STATUS_ERROR; + return retval; + } + + test_set_report_size(); + if (f54->report_size == 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Report data size = 0\n", __func__); + retval = -EIO; + f54->status = STATUS_ERROR; + return retval; + } + + if (f54->data_buffer_size < f54->report_size) { + if (f54->data_buffer_size) + kfree(f54->report_data); + f54->report_data = kzalloc(f54->report_size, GFP_KERNEL); + if (!f54->report_data) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for data buffer\n", __func__); + f54->data_buffer_size = 0; + retval = -EIO; + f54->status = STATUS_ERROR; + return retval; + } + f54->data_buffer_size = f54->report_size; + } + + report_index[0] = 0; + report_index[1] = 0; + + retval = synaptics_rmi4_reg_write(rmi4_data, + f54->data_base_addr + REPORT_INDEX_OFFSET, + report_index, + sizeof(report_index)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write report data index\n", __func__); + retval = -EIO; + f54->status = STATUS_ERROR; + return retval; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->data_base_addr + REPORT_DATA_OFFSET, + f54->report_data, + f54->report_size); + + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report data\n", + __func__); + retval = -EIO; + f54->status = STATUS_ERROR; + return retval; + } + + f54->status = STATUS_IDLE; + return retval; +} +#endif +/* tddi f54 test reporting - */ + + +static ssize_t test_sysfs_get_report_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned char command; + unsigned long setting; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + if (setting != 1) + return -EINVAL; + + mutex_lock(&f54->status_mutex); + + retval = test_check_for_idle_status(); + if (retval < 0) + goto exit; + + if (!test_report_type_valid(f54->report_type)) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Invalid report type\n", + __func__); + retval = -EINVAL; + goto exit; + } + + test_set_interrupt(true); + + command = (unsigned char)COMMAND_GET_REPORT; + + retval = synaptics_rmi4_reg_write(rmi4_data, + f54->command_base_addr, + &command, + sizeof(command)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write get report command\n", + __func__); + goto exit; + } + +/* tddi f54 test reporting + */ +#ifdef F54_POLLING_GET_REPORT + + retval = test_sysfs_get_report_polling(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to get report image\n", + __func__); + goto exit; + } + +#else + f54->status = STATUS_BUSY; + f54->report_size = 0; + f54->data_pos = 0; +/* + hrtimer_start(&f54->watchdog, + ktime_set(GET_REPORT_TIMEOUT_S, 0), + HRTIMER_MODE_REL); +*/ + retval = count; + +#endif + +exit: + mutex_unlock(&f54->status_mutex); + + return retval; +} + +static ssize_t test_sysfs_resume_touch_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long setting; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + if (setting != 1) + return -EINVAL; + + retval = test_do_resume_touch(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Resume touch failed\n", __func__); + return -EINVAL; + } + + return count; +} + +static ssize_t test_sysfs_do_afe_calibration_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned long setting; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + if (!f54->query_49.has_ctrl188) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: F54_ANALOG_Ctrl188 not found\n", + __func__); + return -EINVAL; + } + + if (setting == 0 || setting == 1) + retval = test_do_afe_calibration((enum f54_afe_cal)setting); + else + return -EINVAL; + + if (retval) + return retval; + else + return count; +} + +static ssize_t test_sysfs_report_type_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", f54->report_type); +} + +static ssize_t test_sysfs_report_type_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned char data; + unsigned long setting; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; +#ifdef USE_RT8 + static bool do_once; +#endif + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + mutex_lock(&f54->status_mutex); + + retval = test_check_for_idle_status(); + if (retval < 0) + goto exit; + +#ifdef USE_RT8 + if (setting == 20) + setting = 8; +#endif + + if (!test_report_type_valid((enum f54_report_types)setting)) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Report type not supported by driver\n", + __func__); + retval = -EINVAL; + goto exit; + } + +#ifdef USE_RT8 + if ((f54->report_type == F54_FULL_RAW_CAP_NO_RX_COUPLING) && do_once) { + rmi4_data->reset_device(rmi4_data, false); + msleep(1000); + retval = test_do_command(COMMAND_ENTER_INCELL_TEST_MODE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to enter incell test mode\n", + __func__); + goto exit; + } + msleep(100); + do_once = false; + } +#endif + + f54->report_type = (enum f54_report_types)setting; + data = (unsigned char)setting; + retval = synaptics_rmi4_reg_write(rmi4_data, + f54->data_base_addr, + &data, + sizeof(data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write report type\n", + __func__); + goto exit; + } + + retval = count; + +exit: + mutex_unlock(&f54->status_mutex); + + return retval; +} + +static ssize_t test_sysfs_fifoindex_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int retval; + unsigned char data[2]; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->data_base_addr + REPORT_INDEX_OFFSET, + data, + sizeof(data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report index\n", + __func__); + return retval; + } + + batohs(&f54->fifoindex, data); + + return snprintf(buf, PAGE_SIZE, "%u\n", f54->fifoindex); +} + +static ssize_t test_sysfs_fifoindex_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned char data[2]; + unsigned long setting; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + f54->fifoindex = setting; + + hstoba(data, (unsigned short)setting); + + retval = synaptics_rmi4_reg_write(rmi4_data, + f54->data_base_addr + REPORT_INDEX_OFFSET, + data, + sizeof(data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write report index\n", + __func__); + return retval; + } + + return count; +} + +static ssize_t test_sysfs_no_auto_cal_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%u\n", f54->no_auto_cal); +} + +static ssize_t test_sysfs_no_auto_cal_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned char data; + unsigned long setting; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + if (setting > 1) + return -EINVAL; + + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->control_base_addr, + &data, + sizeof(data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read no auto cal setting\n", + __func__); + return retval; + } + + if (setting) + data |= CONTROL_NO_AUTO_CAL; + else + data &= ~CONTROL_NO_AUTO_CAL; + + retval = synaptics_rmi4_reg_write(rmi4_data, + f54->control_base_addr, + &data, + sizeof(data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write no auto cal setting\n", + __func__); + return retval; + } + + f54->no_auto_cal = (setting == 1); + + return count; +} + +static ssize_t test_sysfs_read_report_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + unsigned int ii; + unsigned int jj; + int cnt; + int count = 0; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + char *report_data_8; + short *report_data_16; + int *report_data_32; + unsigned short *report_data_u16; + unsigned int *report_data_u32; + + if (f54->report_data == NULL) + return -EINVAL; + + pr_err("%s: f54->report_type = %d\n", __func__, f54->report_type); + + switch (f54->report_type) { + case F54_8BIT_IMAGE: + report_data_8 = (char *)f54->report_data; + for (ii = 0; ii < f54->report_size; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, "%03d: %d\n", + ii, *report_data_8); + report_data_8++; + buf += cnt; + count += cnt; + } + break; + case F54_AMP_RAW_ADC: + report_data_u16 = (unsigned short *)f54->report_data; + cnt = snprintf(buf, PAGE_SIZE - count, "tx = %d\nrx = %d\n", + tx_num, rx_num); + buf += cnt; + count += cnt; + + for (ii = 0; ii < tx_num; ii++) { + for (jj = 0; jj < (rx_num - 1); jj++) { + cnt = snprintf(buf, PAGE_SIZE - count, "%-4d ", + *report_data_u16); + report_data_u16++; + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "%-4d\n", + *report_data_u16); + report_data_u16++; + buf += cnt; + count += cnt; + } + break; + case F54_16BIT_IMAGE: + case F54_RAW_16BIT_IMAGE: + case F54_TRUE_BASELINE: + case F54_FULL_RAW_CAP: + case F54_FULL_RAW_CAP_NO_RX_COUPLING: + case F54_SENSOR_SPEED: + case F54_AMP_FULL_RAW_CAP: + /* td43xx start */ + case F54_TD43XX_NOISE: + /* td43xx end */ + report_data_16 = (short *)f54->report_data; + cnt = snprintf(buf, PAGE_SIZE - count, "tx = %d\nrx = %d\n", + tx_num, rx_num); + buf += cnt; + count += cnt; + + for (ii = 0; ii < tx_num; ii++) { + for (jj = 0; jj < (rx_num - 1); jj++) { + cnt = snprintf(buf, PAGE_SIZE - count, "%-4d ", + *report_data_16); + report_data_16++; + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "%-4d\n", + *report_data_16); + report_data_16++; + buf += cnt; + count += cnt; + } + break; + /* tddi f54 test reporting + */ + case F54_TD43XX_FULL_RAW: + report_data_u16 = (unsigned short *)f54->report_data; + cnt = snprintf(buf, PAGE_SIZE - count, "tx = %d\nrx = %d\n\n", + tx_num, rx_num); + buf += cnt; + count += cnt; + + for (ii = 0; ii < tx_num; ii++) { + for (jj = 0; jj < (rx_num - 1); jj++) { + cnt = snprintf(buf, PAGE_SIZE - count, "%-5d ", + *report_data_u16); + report_data_u16++; + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "%-5d\n", + *report_data_u16); + report_data_u16++; + buf += cnt; + count += cnt; + } + break; + case F54_TD43XX_EE_SHORT: + report_data_u16 = (unsigned short *)f54->report_data; + cnt = snprintf(buf, PAGE_SIZE - count, "tx = %d\nrx = %d\n\n", + tx_num, rx_num); + buf += cnt; + count += cnt; + + for (ii = 0; ii < tx_num; ii++) { + for (jj = 0; jj < (rx_num - 1); jj++) { + cnt = snprintf(buf, PAGE_SIZE - count, "%-4d ", + *report_data_u16); + report_data_u16++; + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "%-4d\n", + *report_data_u16); + report_data_u16++; + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "\n"); + buf += cnt; + count += cnt; + for (ii = 0; ii < tx_num; ii++) { + for (jj = 0; jj < (rx_num - 1); jj++) { + cnt = snprintf(buf, PAGE_SIZE - count, "%-4d ", + *report_data_u16); + report_data_u16++; + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "%-4d\n", + *report_data_u16); + report_data_u16++; + buf += cnt; + count += cnt; + } + break; + /* tddi f54 test reporting - */ + case F54_HIGH_RESISTANCE: + case F54_FULL_RAW_CAP_MIN_MAX: + report_data_16 = (short *)f54->report_data; + for (ii = 0; ii < f54->report_size; ii += 2) { + cnt = snprintf(buf, PAGE_SIZE - count, "%03d: %d\n", + ii / 2, *report_data_16); + report_data_16++; + buf += cnt; + count += cnt; + } + break; + case F54_ABS_RAW_CAP: + report_data_u32 = (unsigned int *)f54->report_data; + cnt = snprintf(buf, PAGE_SIZE - count, "rx "); + buf += cnt; + count += cnt; + for (ii = 0; ii < rx_num; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, " %2d", ii); + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "\n"); + buf += cnt; + count += cnt; + + cnt = snprintf(buf, PAGE_SIZE - count, " "); + buf += cnt; + count += cnt; + for (ii = 0; ii < rx_num; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, " %5u", + *report_data_u32); + report_data_u32++; + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "\n"); + buf += cnt; + count += cnt; + + cnt = snprintf(buf, PAGE_SIZE - count, "tx "); + buf += cnt; + count += cnt; + for (ii = 0; ii < tx_num; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, " %2d", ii); + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "\n"); + buf += cnt; + count += cnt; + + cnt = snprintf(buf, PAGE_SIZE - count, " "); + buf += cnt; + count += cnt; + for (ii = 0; ii < tx_num; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, " %5u", + *report_data_u32); + report_data_u32++; + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "\n"); + buf += cnt; + count += cnt; + break; + case F54_ABS_DELTA_CAP: + case F54_ABS_HYBRID_DELTA_CAP: + case F54_ABS_HYBRID_RAW_CAP: + report_data_32 = (int *)f54->report_data; + cnt = snprintf(buf, PAGE_SIZE - count, "rx "); + buf += cnt; + count += cnt; + for (ii = 0; ii < rx_num; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, " %2d", ii); + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "\n"); + buf += cnt; + count += cnt; + + cnt = snprintf(buf, PAGE_SIZE - count, " "); + buf += cnt; + count += cnt; + for (ii = 0; ii < rx_num; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, " %5d", + *report_data_32); + report_data_32++; + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "\n"); + buf += cnt; + count += cnt; + + cnt = snprintf(buf, PAGE_SIZE - count, "tx "); + buf += cnt; + count += cnt; + for (ii = 0; ii < tx_num; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, " %2d", ii); + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "\n"); + buf += cnt; + count += cnt; + + cnt = snprintf(buf, PAGE_SIZE - count, " "); + buf += cnt; + count += cnt; + for (ii = 0; ii < tx_num; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, " %5d", + *report_data_32); + report_data_32++; + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "\n"); + buf += cnt; + count += cnt; + break; + case F54_ABS_DOZE_NO_CBC_INCELL: + cnt = snprintf(buf, PAGE_SIZE - count, "tx = %d, rx = %d\n\n", + tx_num, rx_num); + buf += cnt; + count += cnt; + + report_data_u32 = (unsigned int *)f54->report_data; + cnt = snprintf(buf, PAGE_SIZE - count, "rx "); + buf += cnt; + count += cnt; + for (ii = 0; ii < rx_num; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, " %2d", ii); + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "\n"); + buf += cnt; + count += cnt; + + cnt = snprintf(buf, PAGE_SIZE - count, " "); + buf += cnt; + count += cnt; + for (ii = 0; ii < rx_num; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, " %5u", + *report_data_u32); + report_data_u32++; + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "\n"); + buf += cnt; + count += cnt; + + cnt = snprintf(buf, PAGE_SIZE - count, "tx "); + buf += cnt; + count += cnt; + for (ii = 0; ii < tx_num; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, " %2d", ii); + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "\n"); + buf += cnt; + count += cnt; + + cnt = snprintf(buf, PAGE_SIZE - count, " "); + buf += cnt; + count += cnt; + for (ii = 0; ii < tx_num; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, " %5u", + *report_data_u32); + report_data_u32++; + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "\n"); + buf += cnt; + count += cnt; + break; + default: + for (ii = 0; ii < f54->report_size; ii++) { + cnt = snprintf(buf, PAGE_SIZE - count, "%03d: 0x%02x\n", + ii, f54->report_data[ii]); + buf += cnt; + count += cnt; + } + } + + snprintf(buf, PAGE_SIZE - count, "\n"); + count++; + + return count; +} + +static ssize_t test_sysfs_read_report_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned char timeout = GET_REPORT_TIMEOUT_S * 10; + unsigned char timeout_count; + const char cmd[] = {'1', 0}; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + if (rmi4_data->suspend) { + return -EINVAL; + } + + pr_err("%s\n", __func__); + + pr_err("%s: f54->tx_assigned = %d\n", __func__, f54->tx_assigned); + pr_err("%s: f54->rx_assigned = %d\n", __func__, f54->rx_assigned); + + retval = test_sysfs_report_type_store(dev, attr, buf, count); + if (retval < 0) + goto exit; + + pr_err("%s: done test_sysfs_report_type_store\n", __func__); + + retval = test_sysfs_do_preparation_store(dev, attr, cmd, 1); + if (retval < 0) + goto exit; + + pr_err("%s: done test_sysfs_do_preparation_store\n", __func__); + + retval = test_sysfs_get_report_store(dev, attr, cmd, 1); + if (retval < 0) + goto exit; + + pr_err("%s: done test_sysfs_get_report_store\n", __func__); + + retval = test_wait_for_command_completion(); + if (retval < 0) + goto exit; + + pr_err("%s: done test_wait_for_command_completion\n", __func__); + + if (rmi4_data->chip_is_tddi) + queue_work(f54->test_report_workqueue, &f54->test_report_work); + + timeout_count = 0; + do { + if (f54->status != STATUS_BUSY) + break; + msleep(100); + timeout_count++; + } while (timeout_count < timeout); + + if ((f54->status != STATUS_IDLE) || (f54->report_size == 0)) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report\n", + __func__); + retval = -EINVAL; + goto exit; + } + + pr_err("%s: got report\n", __func__); + + if (f54->rmi4_data->dump_flags) { + retval = test_sysfs_resume_touch_store(dev, attr, cmd, 1); + if (retval < 0) + goto exit; + } else + rmi4_data->reset_device(rmi4_data, false); + + pr_err("%s: exiting\n", __func__); + + return count; + +exit: + rmi4_data->reset_device(rmi4_data, false); + return retval; +} + +/* td43xx start */ +static ssize_t test_sysfs_read_report_td43xx(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count, + bool do_preparation, bool do_reset) +{ + int retval; + unsigned char timeout = GET_REPORT_TIMEOUT_S * 10; + unsigned char timeout_count; + const char cmd[] = {'1', 0}; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = test_sysfs_report_type_store(dev, attr, buf, count); + if (retval < 0) + goto exit; + + if (do_preparation) { + retval = test_sysfs_do_preparation_store(dev, attr, cmd, 1); + if (retval < 0) + goto exit; + } + retval = test_sysfs_get_report_store(dev, attr, cmd, 1); + if (retval < 0) + goto exit; + + retval = test_wait_for_command_completion(); + if (retval < 0) + goto exit; + + queue_work(f54->test_report_workqueue, &f54->test_report_work); + + timeout_count = 0; + do { + if (f54->status != STATUS_BUSY) + break; + msleep(100); + timeout_count++; + } while (timeout_count < timeout); + + if ((f54->status != STATUS_IDLE) || (f54->report_size == 0)) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report\n", + __func__); + retval = -EINVAL; + goto exit; + } + + + return count; + +exit: + if (do_reset) + rmi4_data->reset_device(rmi4_data, false); + + return retval; +} + +static short FindMedian(short *pdata, int num) +{ + int i, j; + short temp; + short *value; + short median; + + value = (short *)kzalloc(num * sizeof(short), GFP_KERNEL); + + for (i = 0; i < num; i++) + *(value + i) = *(pdata + i); + + for (i = 1; i <= num - 1; i++) { + for (j = 1; j <= num - i; j++) { + if (*(value + j - 1) <= *(value + j)) { + temp = *(value + j - 1); + *(value + j - 1) = *(value + j); + *(value + j) = temp; + } else + continue; + } + } + + if (num % 2 == 0) + median = (*(value + (num / 2 - 1)) + *(value + (num / 2)))/2; + else + median = *(value + (num / 2)); + + if (value) + kfree(value); + + return median; +} + +static int tddi_ratio_calculation(signed short *p_image) +{ + int retval = 0; int i, j; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + unsigned char left_size = f54->left_mux_size; + unsigned char right_size = f54->right_mux_size; + signed short *p_data_16; + signed short *p_left_median = NULL; + signed short *p_right_median = NULL; + signed short *p_left_column_buf = NULL; + signed short *p_right_column_buf = NULL; + signed int temp; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + if (!p_image) { + dev_err(rmi4_data->pdev->dev.parent, "%s: Fail. p_image is null\n", __func__); + retval = -EINVAL; + goto exit; + } + + + p_right_median = (signed short *) kzalloc(rx_num * sizeof(short), GFP_KERNEL); + if (!p_right_median) { + dev_err(rmi4_data->pdev->dev.parent, "%s: Failed to alloc mem for p_right_median\n", __func__); + retval = -ENOMEM; + goto exit; + } + + p_left_median = (signed short *) kzalloc(rx_num * sizeof(short), GFP_KERNEL); + if (!p_left_median) { + dev_err(rmi4_data->pdev->dev.parent, "%s: Failed to alloc mem for p_left_median\n", __func__); + retval = -ENOMEM; + goto exit; + } + + p_right_column_buf = (signed short *) kzalloc(right_size * rx_num * sizeof(short), GFP_KERNEL); + if (!p_right_column_buf) { + dev_err(rmi4_data->pdev->dev.parent, "%s: Failed to alloc mem for p_right_column_buf\n", __func__); + retval = -ENOMEM; + goto exit; + } + + p_left_column_buf = (signed short *) kzalloc(left_size * rx_num * sizeof(short), GFP_KERNEL); + if (!p_left_column_buf) { + dev_err(rmi4_data->pdev->dev.parent, "%s: Failed to alloc mem for p_left_column_buf\n", __func__); + retval = -ENOMEM; + goto exit; + } + + + if (f54->swap_sensor_side) { + + p_data_16 = p_image; + for (i = 0; i < rx_num; i++) { + for (j = 0; j < left_size; j++) { + p_left_column_buf[i * left_size + j] = p_data_16[j * rx_num + i]; + } + } + + p_data_16 = p_image + left_size * rx_num; + for (i = 0; i < rx_num; i++) { + for (j = 0; j < right_size; j++) { + p_right_column_buf[i * right_size + j] = p_data_16[j * rx_num + i]; + } + } + } + else { + + p_data_16 = p_image; + for (i = 0; i < rx_num; i++) { + for (j = 0; j < right_size; j++) { + p_right_column_buf[i * right_size + j] = p_data_16[j * rx_num + i]; + } + } + + p_data_16 = p_image + right_size * rx_num; + for (i = 0; i < rx_num; i++) { + for (j = 0; j < left_size; j++) { + p_left_column_buf[i * left_size + j] = p_data_16[j * rx_num + i]; + } + } + } + + + for (i = 0; i < rx_num; i++) { + p_left_median[i] = FindMedian(p_left_column_buf + i * left_size, left_size); + p_right_median[i] = FindMedian(p_right_column_buf + i * right_size, right_size); + } + + + + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + + if (f54->swap_sensor_side) { + + if (i < left_size) { + temp = (signed int) p_image[i * rx_num + j]; + temp = temp * 100 / p_left_median[j]; + } + else { + temp = (signed int) p_image[i * rx_num + j]; + temp = temp * 100 / p_right_median[j]; + } + } + else { + + if (i < right_size) { + temp = (signed int) p_image[i * rx_num + j]; + temp = temp * 100 / p_right_median[j]; + } + else { + temp = (signed int) p_image[i * rx_num + j]; + temp = temp * 100 / p_left_median[j]; + } + } + + + p_image[i * rx_num + j] = temp; + } + } + +exit: + kfree(p_right_median); + kfree(p_left_median); + kfree(p_right_column_buf); + kfree(p_left_column_buf); + return retval; +} +static ssize_t test_sysfs_tddi_extend_ee_short_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + int i, j, offset; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + signed short *tddi_rt95_part_one = NULL; + signed short *tddi_rt95_part_two = NULL; + unsigned int buffer_size = tx_num * rx_num * 2; + unsigned long setting; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + struct synaptics_dsx_factory_param *factory_param = rmi4_data->factory_param; + + struct f54_control control = f54->control; + + struct f54_control_99 original_f54_ctrl99; + struct f54_control_182 original_f54_ctrl182; + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + if (setting != 1 || !factory_param) + return -EINVAL; + + /* allocate the g_tddi_ee_short_data_output */ + if (td43xx_ee_short_data) + kfree(td43xx_ee_short_data); + + td43xx_ee_short_data = kzalloc(tx_num * rx_num, GFP_KERNEL); + if (!td43xx_ee_short_data) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for td43xx_ee_short_data\n", + __func__); + return -ENOMEM; + } + + + tddi_rt95_part_one = kzalloc(buffer_size, GFP_KERNEL); + if (!tddi_rt95_part_one) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for tddi_rt95_part_one\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + tddi_rt95_part_two = kzalloc(buffer_size, GFP_KERNEL); + if (!tddi_rt95_part_two) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for td43xx_rt95_part_two\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + g_flag_read_report_fail = 0; + + /* step 1 */ + /* keep the original integration and reset duration */ + retval = synaptics_rmi4_reg_read(rmi4_data, + control.reg_99->address, + original_f54_ctrl99.data, + sizeof(original_f54_ctrl99.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read original data from f54_ctrl99\n", + __func__); + retval = -EIO; + goto exit; + } + /* keep the original timing control */ + retval = synaptics_rmi4_reg_read(rmi4_data, + control.reg_182->address, + original_f54_ctrl182.data, + sizeof(original_f54_ctrl182.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read original data from f54_ctrl182\n", + __func__); + retval = -EIO; + goto exit; + } + + /* step 2 */ + /* Modify the Reset duration, Integration duration, and CBC Timing Control as well */ + control.reg_99->integration_duration_lsb = factory_param->tddi_extend_ee_short_int_dur; + control.reg_99->integration_duration_msb = (factory_param->tddi_extend_ee_short_int_dur >> 8) & 0xff; + control.reg_99->reset_duration = factory_param->tddi_extend_ee_short_reset_dur; + retval = synaptics_rmi4_reg_write(rmi4_data, + control.reg_99->address, + control.reg_99->data, + sizeof(control.reg_99->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set f54_ctrl99 in step 2\n", + __func__); + retval = -EIO; + goto exit; + } + control.reg_182->cbc_timing_ctrl_tx_lsb = factory_param->tddi_extend_ee_short_tx_on_count; + control.reg_182->cbc_timing_ctrl_tx_msb = (factory_param->tddi_extend_ee_short_tx_on_count >> 8) & 0xff; + control.reg_182->cbc_timing_ctrl_rx_lsb = factory_param->tddi_extend_ee_short_rx_on_count; + control.reg_182->cbc_timing_ctrl_rx_msb = (factory_param->tddi_extend_ee_short_rx_on_count >> 8) & 0xff; + retval = synaptics_rmi4_reg_write(rmi4_data, + control.reg_182->address, + control.reg_182->data, + sizeof(control.reg_182->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set f54_reg_182 in step 2\n", + __func__); + retval = -EIO; + goto exit; + } + + /* step 3 */ + /* Force update */ + retval = test_do_command(COMMAND_FORCE_UPDATE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do force update in step 4\n", + __func__); + retval = -EIO; + goto exit; + } + + /* step 4 */ + /* get report image 95 */ + retval = test_sysfs_read_report_td43xx(dev, attr, "95", count, + false, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report 95. exit\n", __func__); + retval = -EIO; + g_flag_read_report_fail = 1; + goto exit; + } + + + /* step 5 */ + /* use the upper half as part 1 image */ + /* the data should be lower than TEST_LIMIT_PART1 ( fail, if > TEST_LIMIT_PART1 ) */ + for (i = 0, offset = 0; i < tx_num * rx_num; i++) { + tddi_rt95_part_one[i] = (signed short)(f54->report_data[offset]) | + ((signed short)(f54->report_data[offset + 1]) << 8); + offset += 2; + } + + + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + + if (tddi_rt95_part_one[i*rx_num + j] > factory_param->tddi_extend_ee_short_test_limit_part1) { + dev_err(f54->rmi4_data->pdev->dev.parent, + "%s: fail at (tx%-2d, rx%-2d) = %-4d in part 1 image (limit = %d)\n", + __func__, i, j, tddi_rt95_part_one[i*rx_num + j], factory_param->tddi_extend_ee_short_test_limit_part1); + + tddi_rt95_part_one[i*rx_num + j] = 1; + } + else { + tddi_rt95_part_one[i*rx_num + j] = 0; + } + } + } + + /* step 6 */ + /* use the lower half as part 2 image */ + /* and perform the calculation */ + /* the calculated data should be over than TEST_LIMIT_PART2 ( fail, if < TEST_LIMIT_PART2 ) */ + for (i = 0, offset = buffer_size; i < tx_num * rx_num; i++) { + tddi_rt95_part_two[i] = (signed short)(f54->report_data[offset]) | + ((signed short)(f54->report_data[offset + 1]) << 8); + offset += 2; + } + + + tddi_ratio_calculation(tddi_rt95_part_two); + + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + + if (tddi_rt95_part_two[i*rx_num + j] < factory_param->tddi_extend_ee_short_test_limit_part2) { + dev_err(f54->rmi4_data->pdev->dev.parent, + "%s: fail at (tx%-2d, rx%-2d) = %-4d in part 2 image (limit = %d)\n", + __func__, i, j, tddi_rt95_part_two[i*rx_num + j], factory_param->tddi_extend_ee_short_test_limit_part2); + + tddi_rt95_part_two[i*rx_num + j] = 1; + } + else { + tddi_rt95_part_two[i*rx_num + j] = 0; + } + } + } + + /* step 7 */ + /* filling out the g_tddi_ee_short_data_output */ + /* 1: fail / 0 : pass */ + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + td43xx_ee_short_data[i * rx_num + j] = + (unsigned char)(tddi_rt95_part_one[i * rx_num + j]) || tddi_rt95_part_two[i * rx_num + j]; + } + } + + + /* step 8 */ + /* restore the original setting */ + retval = synaptics_rmi4_reg_write(rmi4_data, + control.reg_99->address, + original_f54_ctrl99.data, + sizeof(original_f54_ctrl99.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to restore f54_ctrl99 data\n", + __func__); + retval = -EIO; + goto exit; + } + retval = synaptics_rmi4_reg_write(rmi4_data, + control.reg_182->address, + original_f54_ctrl182.data, + sizeof(original_f54_ctrl182.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to restore f54_ctrl182 data\n", + __func__); + retval = -EIO; + goto exit; + } + retval = test_do_command(COMMAND_FORCE_UPDATE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do force update in step 8\n", + __func__); + retval = -EIO; + goto exit; + } + + retval = count; + +exit: + kfree(tddi_rt95_part_one); + kfree(tddi_rt95_part_two); + + return retval; +} + +static ssize_t test_sysfs_tddi_extend_ee_short_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int i, j; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + int fail_count = 0; + + if (!td43xx_ee_short_data) + return -EINVAL; + + + + if (1 == g_flag_read_report_fail) { + kfree(td43xx_ee_short_data); + td43xx_ee_short_data = NULL; + return snprintf(buf, PAGE_SIZE, "\nERROR: fail to read report image\n"); + } + + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + if (td43xx_ee_short_data[i * rx_num + j] != 0) { + + fail_count += 1; + } + } + } + + kfree(td43xx_ee_short_data); + td43xx_ee_short_data = NULL; + + return snprintf(buf, PAGE_SIZE, "%s\n", (fail_count == 0) ? "PASS" : "FAIL"); +} + +static ssize_t test_sysfs_td43xx_ee_short_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval = 0; + int i, j, offset; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + signed short *td43xx_rt95_part_one = NULL; + signed short *td43xx_rt95_part_two = NULL; + unsigned int td43xx_rt95_report_size = tx_num * rx_num * 2; + unsigned long setting; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + struct synaptics_dsx_factory_param *factory_param = rmi4_data->factory_param; + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + if (setting != 1 || !factory_param) + return -EINVAL; + + if (td43xx_ee_short_data) + kfree(td43xx_ee_short_data); + td43xx_ee_short_data = kzalloc(tx_num * rx_num, GFP_KERNEL); + if (!td43xx_ee_short_data) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for td43xx_ee_short_data\n", + __func__); + return -ENOMEM; + } + + g_flag_read_report_fail = 0; + + td43xx_rt95_part_one = kzalloc(td43xx_rt95_report_size, GFP_KERNEL); + if (!td43xx_rt95_part_one) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for td43xx_rt95_part_one\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + td43xx_rt95_part_two = kzalloc(td43xx_rt95_report_size, GFP_KERNEL); + if (!td43xx_rt95_part_two) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for td43xx_rt95_part_two\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + retval = test_sysfs_read_report_td43xx(dev, attr, "95", count, + false, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report 95. exit\n", + __func__); + retval = -EIO; + g_flag_read_report_fail = 1; + goto exit; + } + for (i = 0, offset = 0; i < tx_num * rx_num; i++) { + td43xx_rt95_part_one[i] = (signed short)(f54->report_data[offset]) | + ((signed short)(f54->report_data[offset + 1]) << 8); + offset += 2; + } + + for (i = 0; i < tx_num * rx_num; i++) { + *(td43xx_rt95_part_one + i) = + (*(td43xx_rt95_part_one + i) > factory_param->tddi_short_limit_b) ? 1 : 0; + } + + for (i = 0, offset = td43xx_rt95_report_size; i < tx_num * rx_num; i++) { + td43xx_rt95_part_two[i] = (signed short)(f54->report_data[offset]) | + ((signed short)(f54->report_data[offset + 1]) << 8); + offset += 2; + } + + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + td43xx_ee_short_data[i * rx_num + j] = td43xx_rt95_part_one[i * rx_num + j]; + } + } + + retval = count; + +exit: + kfree(td43xx_rt95_part_one); + kfree(td43xx_rt95_part_two); + + pr_err("%s: resetting device\n", __func__); + rmi4_data->reset_device(rmi4_data, false); + pr_err("%s: done resetting device\n", __func__); + + return retval; +} + +static ssize_t test_sysfs_td43xx_ee_short_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int i, j; + int tx_num = f54->tx_assigned - 1; + int rx_num = f54->rx_assigned; + bool result = 1; + + if (!td43xx_ee_short_data) + return -EINVAL; + + + if (1 == g_flag_read_report_fail) { + kfree(td43xx_ee_short_data); + td43xx_ee_short_data = NULL; + return snprintf(buf, PAGE_SIZE, "ERROR: Fail to read RT95 image\n"); + } + + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + if (td43xx_ee_short_data[i * rx_num + j] != 0) { + result &= 0; + dev_err(f54->rmi4_data->pdev->dev.parent, "0x%02x\n", td43xx_ee_short_data[i * rx_num + j]); + } + } + } + + kfree(td43xx_ee_short_data); + td43xx_ee_short_data = NULL; + + return snprintf(buf, PAGE_SIZE, "%s\n", (result == 1) ? "PASS" : "FAIL"); +} + +static ssize_t test_sysfs_td43xx_noise_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval = 0; + int i, j, offset; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + int repeat; + int times = 5; + signed short report_data_16; + signed short *td43xx_noise_max = NULL; + signed short *td43xx_noise_min = NULL; + unsigned char *td43xx_noise_data = NULL; + unsigned int noise_report_size = tx_num * rx_num * 2; + unsigned long setting; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = sstrtoul(buf, 10, &setting); + if (retval || (setting != 1)) + return -EINVAL; + + if (td43xx_noise_data) + kfree(td43xx_noise_data); + td43xx_noise_data = kzalloc(noise_report_size, GFP_KERNEL); + if (!td43xx_noise_data) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for td43xx_noise_data\n", + __func__); + return -ENOMEM; + } + + if (td43xx_noise_max) + kfree(td43xx_noise_data); + td43xx_noise_max = (unsigned short *)kzalloc(noise_report_size, GFP_KERNEL); + if (!td43xx_noise_max) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for td43xx_noise_max\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + if (td43xx_noise_min) + kfree(td43xx_noise_min); + td43xx_noise_min = (unsigned short *) kzalloc(noise_report_size, GFP_KERNEL); + if (!td43xx_noise_min) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for td43xx_noise_min\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + if (td43xx_noise_delta) + kfree(td43xx_noise_delta); + td43xx_noise_delta = (signed short *)kzalloc(noise_report_size, GFP_KERNEL); + if (!td43xx_noise_delta) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for td43xx_noise_delta\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + for (repeat = 0; repeat < times; repeat++) { + retval = test_sysfs_read_report_td43xx(dev, attr, "94", count, + false, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report 94 at %d round. exit\n", + __func__, repeat); + retval = -EIO; + goto exit; + } + + memset(td43xx_noise_data, 0x00, noise_report_size); + + secure_memcpy(td43xx_noise_data, noise_report_size, + f54->report_data, f54->report_size, f54->report_size); + + for (i = 0, offset = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + report_data_16 = + (signed short)td43xx_noise_data[offset] + + ((signed short)td43xx_noise_data[offset+1] << 8); + offset += 2; + td43xx_noise_max[i*rx_num + j] = + max_t(signed short, + td43xx_noise_max[i*rx_num + j], + report_data_16); + td43xx_noise_min[i*rx_num + j] = + min_t(signed short, + td43xx_noise_min[i*rx_num + j], + report_data_16); + } + } + } + + for (i = 0; i < tx_num; i++) + for (j = 0; j < rx_num; j++) + td43xx_noise_delta[i*rx_num + j] = + td43xx_noise_max[i*rx_num + j] - + td43xx_noise_min[i*rx_num + j]; +exit: + kfree(td43xx_noise_max); + kfree(td43xx_noise_min); + kfree(td43xx_noise_data); + + return retval; +} + +static ssize_t test_sysfs_td43xx_noise_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int i, j; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + bool result = 1; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + struct synaptics_dsx_factory_param *factory_param = rmi4_data->factory_param; + unsigned int noise_upper_limit; + + if (!factory_param) + return -EINVAL; + + noise_upper_limit = factory_param->tddi_noise_limit; + + if (!td43xx_noise_delta) + return -EINVAL; + + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + if (td43xx_noise_delta[i * rx_num + j] > noise_upper_limit) { + result &= 0; + } + } + } + + kfree(td43xx_noise_delta); + td43xx_noise_delta = NULL; + return snprintf(buf, PAGE_SIZE, "%s\n", (result == 1) ? "PASS" : "FAIL"); +} + +static ssize_t test_sysfs_td43xx_full_raw_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval = 0; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + unsigned int full_raw_report_size = tx_num * rx_num * 2; + unsigned long setting; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + if (setting != 1) + return -EINVAL; + + if (td43xx_full_raw_data) + kfree(td43xx_full_raw_data); + + td43xx_full_raw_data = kzalloc(full_raw_report_size, GFP_KERNEL); + if (!td43xx_full_raw_data) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for td43xx_full_raw_data\n", + __func__); + return -ENOMEM; + } + + retval = test_sysfs_read_report_td43xx(dev, attr, "92", count, + false, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report 92. exit\n", + __func__); + return -EIO; + } + + secure_memcpy(td43xx_full_raw_data, full_raw_report_size, + f54->report_data, f54->report_size, f54->report_size); + + retval = count; + + return retval; +} + +static ssize_t test_sysfs_td43xx_full_raw_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + unsigned int ii; + unsigned int jj; + int cnt; + int count = 0; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + unsigned short *report_data_16; + + if (!td43xx_full_raw_data) + return -EINVAL; + + report_data_16 = (short *)td43xx_full_raw_data; + cnt = snprintf(buf, PAGE_SIZE - count, "tx = %d\nrx = %d\n", + tx_num, rx_num); + buf += cnt; + count += cnt; + + for (ii = 0; ii < tx_num; ii++) { + for (jj = 0; jj < (rx_num - 1); jj++) { + cnt = snprintf(buf, PAGE_SIZE - count, "%-4d ", + *report_data_16); + report_data_16++; + buf += cnt; + count += cnt; + } + cnt = snprintf(buf, PAGE_SIZE - count, "%-4d\n", + *report_data_16); + report_data_16++; + buf += cnt; + count += cnt; + } + + + kfree(td43xx_full_raw_data); + td43xx_full_raw_data = NULL; + + snprintf(buf, PAGE_SIZE - count, "\n"); + count++; + + return count; +} + + +static int tddi_amp_open_data_testing_b7(signed short *p_image, + unsigned char *p_result, + bool is_b7) +{ + int retval = 0; + int i, j; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + unsigned char left_size = f54->left_mux_size; + unsigned char right_size = f54->right_mux_size; + signed short *p_data_16; + signed short *p_left_median = NULL; + signed short *p_right_median = NULL; + signed short *p_left_column_buf = NULL; + signed short *p_right_column_buf = NULL; + signed int temp; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + struct synaptics_dsx_factory_param *factory_param = rmi4_data->factory_param; + + if (!factory_param) + return -EINVAL; + + if (!p_image) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Fail. p_image is null\n", + __func__); + retval = -EINVAL; + goto exit; + } + + if (!p_result) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Fail. p_result is null\n", + __func__); + retval = -EINVAL; + goto exit; + } + + if (f55->extended_amp_btn) { + tx_num -= 1; + } + + + p_right_median = (signed short *) kzalloc(rx_num * sizeof(short), GFP_KERNEL); + if (!p_right_median) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for right_median\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + p_left_median = (signed short *) kzalloc(rx_num * sizeof(short), GFP_KERNEL); + if (!p_left_median) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for left_median\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + p_right_column_buf = (signed short *) kzalloc(right_size * rx_num * sizeof(short), GFP_KERNEL); + if (!p_right_column_buf) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for left_column_buf\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + p_left_column_buf = (signed short *) kzalloc(left_size * rx_num * sizeof(short), GFP_KERNEL); + if (!p_left_column_buf) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for left_column_buf\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + if (f54->swap_sensor_side) { + + p_data_16 = p_image; + for (i = 0; i < rx_num; i++) { + for (j = 0; j < left_size; j++) { + p_left_column_buf[i * left_size + j] = p_data_16[j * rx_num + i]; + } + } + + p_data_16 = p_image + left_size * rx_num; + for (i = 0; i < rx_num; i++) { + for (j = 0; j < right_size; j++) { + p_right_column_buf[i * right_size + j] = p_data_16[j * rx_num + i]; + } + } + } + else { + + p_data_16 = p_image; + for (i = 0; i < rx_num; i++) { + for (j = 0; j < right_size; j++) { + p_right_column_buf[i * right_size + j] = p_data_16[j * rx_num + i]; + } + } + + p_data_16 = p_image + right_size * rx_num; + for (i = 0; i < rx_num; i++) { + for (j = 0; j < left_size; j++) { + p_left_column_buf[i * left_size + j] = p_data_16[j * rx_num + i]; + } + } + } + + + for (i = 0; i < rx_num; i++) { + p_left_median[i] = FindMedian(p_left_column_buf + i * left_size, left_size); + p_right_median[i] = FindMedian(p_right_column_buf + i * right_size, right_size); + } + + + + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + + if (f54->swap_sensor_side) { + + if (i < left_size) { + temp = (signed int) p_image[i * rx_num + j]; + temp = temp * 100 / p_left_median[j]; + } else { + temp = (signed int) p_image[i * rx_num + j]; + temp = temp * 100 / p_right_median[j]; + } + } + else { + + if (i < right_size) { + temp = (signed int) p_image[i * rx_num + j]; + temp = temp * 100 / p_right_median[j]; + } else { + temp = (signed int) p_image[i * rx_num + j]; + temp = temp * 100 / p_left_median[j]; + } + } + + p_result[i * rx_num + j] = 0; + + + + if (is_b7) { + if ((temp < factory_param->tddi_b7_open_test_limit_phase2_lower) || + (temp > factory_param->tddi_b7_open_test_limit_phase2_upper)) { + p_result[i * rx_num + j] = 1; + + pr_info("%s : phase 2 failed at (tx%-2d, rx%-2d), data = %d\n", + __func__, i, j, temp); + } + } + else { + if (temp < factory_param->tddi_b7_open_test_limit_phase2_lower) { + p_result[i * rx_num + j] = 1; + + pr_info("%s : phase 2 failed at (tx%-2d, rx%-2d), data = %d\n", + __func__, i, j, temp); + } + } + } + } + +exit: + kfree(p_right_median); + kfree(p_left_median); + kfree(p_right_column_buf); + kfree(p_left_column_buf); + + return retval; +} + +static ssize_t test_sysfs_td4722_b7_amp_open_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval = 0; + int i, j, k; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + struct synaptics_dsx_factory_param *factory_param = rmi4_data->factory_param; + + unsigned long setting; + unsigned char original_data_f54_ctrl99[3] = {0x00, 0x00, 0x00}; + struct f54_control control = f54->control; + unsigned char *p_report_data_8 = NULL; + signed short *p_rt92_image_1 = NULL; + signed short *p_rt92_image_2 = NULL; + unsigned char *p_result_1 = NULL; + unsigned char *p_result_2 = NULL; + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + if (setting != 1 || !factory_param) + return -EINVAL; + + if (f55->extended_amp_btn) { + tx_num -= 1; + } + + if (td43xx_amp_open_data) + kfree(td43xx_amp_open_data); + td43xx_amp_open_data = kzalloc(tx_num * rx_num, GFP_KERNEL); + if (!td43xx_amp_open_data) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for td43xx_amp_open_data\n", + __func__); + return -ENOMEM; + } + + + p_report_data_8 = kzalloc(tx_num * rx_num * 2, GFP_KERNEL); + if (!p_report_data_8) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for p_report_data_8\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + p_rt92_image_1 = kzalloc(tx_num * rx_num * sizeof(signed short), GFP_KERNEL); + if (!p_rt92_image_1) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for p_rt92_image_1\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + p_rt92_image_2 = kzalloc(tx_num * rx_num * sizeof(signed short), GFP_KERNEL); + if (!p_rt92_image_2) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for p_rt92_image_2\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + p_result_1 = kzalloc(tx_num * rx_num, GFP_KERNEL); + if (!p_result_1) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for p_result_1\n", + __func__); + return -ENOMEM; + } + + p_result_2 = kzalloc(tx_num * rx_num, GFP_KERNEL); + if (!p_result_2) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for p_result_2\n", + __func__); + return -ENOMEM; + } + + + + if (f54->query.touch_controller_family != 2) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: not support touch controller family = 0 or 1 \n", + __func__); + retval = -EINVAL; + goto exit; + } + + + retval = synaptics_rmi4_reg_read(rmi4_data, + control.reg_99->address, + original_data_f54_ctrl99, + sizeof(original_data_f54_ctrl99)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read integration duration\n", + __func__); + retval = -EIO; + goto exit; + } + + g_flag_read_report_fail = 0; + + /* step 1 */ + /* set the in_iter_duration_1 setting */ + /* and read the first rt92 image */ + control.reg_99->integration_duration_lsb = factory_param->tddi_b7_open_test_int_dur_one; + control.reg_99->integration_duration_msb = (factory_param->tddi_b7_open_test_int_dur_one >> 8) & 0xff; + control.reg_99->reset_duration = original_data_f54_ctrl99[2]; + retval = synaptics_rmi4_reg_write(rmi4_data, + control.reg_99->address, + control.reg_99->data, + sizeof(control.reg_99->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write the integration duration to f54_ctrl_99 in step 1\n", + __func__); + retval = -EIO; + goto exit; + } + retval = test_do_command(COMMAND_FORCE_UPDATE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do force update in step 1\n", + __func__); + retval = -EIO; + goto exit; + } + + retval = test_sysfs_read_report_td43xx(dev, attr, "92", count, + false, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report 92 in step 1. exit\n", + __func__); + g_flag_read_report_fail = 1; + retval = -EIO; + goto exit; + } + + secure_memcpy(p_report_data_8, tx_num * rx_num * 2, + f54->report_data, f54->report_size, f54->report_size); + + + k = 0; + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + p_rt92_image_1[i * rx_num + j] = + (signed short)(p_report_data_8[k] & 0xff) | (signed short)(p_report_data_8[k + 1] << 8); + + k += 2; + } + } + + + tddi_amp_open_data_testing_b7(p_rt92_image_1, + p_result_1, + true); + + memset(p_report_data_8, 0x00, tx_num * rx_num * 2); + + /* step 2 */ + /* set the in_iter_duration_2 setting */ + /* and read the second rt92 image */ + control.reg_99->integration_duration_lsb = factory_param->tddi_b7_open_test_int_dur_two; + control.reg_99->integration_duration_msb = (factory_param->tddi_b7_open_test_int_dur_two >> 8) & 0xff; + control.reg_99->reset_duration = original_data_f54_ctrl99[2]; + retval = synaptics_rmi4_reg_write(rmi4_data, + control.reg_99->address, + control.reg_99->data, + sizeof(control.reg_99->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write the integration duration to f54_ctrl_99 in step 2\n", + __func__); + retval = -EIO; + goto exit; + } + retval = test_do_command(COMMAND_FORCE_UPDATE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do force update in step 2\n", + __func__); + retval = -EIO; + goto exit; + } + + retval = test_sysfs_read_report_td43xx(dev, attr, "92", count, + false, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report 92 in step 2. exit\n", + __func__); + g_flag_read_report_fail = 1; + retval = -EIO; + goto exit; + } + + secure_memcpy(p_report_data_8, tx_num * rx_num * 2, + f54->report_data, f54->report_size, f54->report_size); + + + k = 0; + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + p_rt92_image_2[i * rx_num + j] = + (signed short)(p_report_data_8[k] & 0xff) | (signed short)(p_report_data_8[k + 1] << 8); + + k += 2; + } + } + + + tddi_amp_open_data_testing_b7(p_rt92_image_2, + p_result_2, + true); + + /* restore the original settings */ + control.reg_99->integration_duration_lsb = original_data_f54_ctrl99[0]; + control.reg_99->integration_duration_msb = original_data_f54_ctrl99[1]; + control.reg_99->reset_duration = original_data_f54_ctrl99[2]; + retval = synaptics_rmi4_reg_write(rmi4_data, + control.reg_99->address, + control.reg_99->data, + sizeof(control.reg_99->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write the integration duration to f54_ctrl_99 in restore phase\n", + __func__); + retval = -EIO; + goto exit; + } + retval = test_do_command(COMMAND_FORCE_UPDATE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do force update in restore phase\n", + __func__); + retval = -EIO; + goto exit; + } + + /* step 3 */ + /* check the result */ + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + + if ((1 == p_result_1[i * rx_num + j]) || (1 == p_result_2[i * rx_num + j])) + td43xx_amp_open_data[i * rx_num + j] = 1; + else + td43xx_amp_open_data[i * rx_num + j] = 0; + } + } + + retval = count; + + +exit: + + kfree(p_rt92_image_1); + kfree(p_rt92_image_2); + kfree(p_report_data_8); + kfree(p_result_1); + kfree(p_result_2); + + pr_err("%s: resetting device\n", __func__); + rmi4_data->reset_device(rmi4_data, false); + pr_err("%s: done resetting device\n", __func__); + + return count; +} + +static ssize_t test_sysfs_td4722_b7_amp_open_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int i, j; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + int result = 0; + + if (f55->extended_amp_btn) { + tx_num -= 1; + } + + if (!td43xx_amp_open_data) + return -EINVAL; + + + if (1 == g_flag_read_report_fail) { + kfree(td43xx_amp_open_data); + td43xx_amp_open_data = NULL; + return snprintf(buf, PAGE_SIZE, "ERROR: Fail to read RT92 image\n"); + } + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + if (td43xx_amp_open_data[i * rx_num + j] != 0) { + + result = 0; + break; + } + } + } + + if ((i == tx_num) && (j == rx_num)) + result = 1; + + kfree(td43xx_amp_open_data); + td43xx_amp_open_data = NULL; + + return snprintf(buf, PAGE_SIZE, "%s\n", (result == 1) ? "PASS" : "FAIL"); +} +static int tddi_amp_open_data_testing(signed short *p_image) +{ + int retval = 0; + int i, j; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + unsigned char left_size = f54->left_mux_size; + unsigned char right_size = f54->right_mux_size; + signed short *p_data_16; + signed short *p_left_median = NULL; + signed short *p_right_median = NULL; + signed short *p_left_column_buf = NULL; + signed short *p_right_column_buf = NULL; + signed int temp; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + struct synaptics_dsx_factory_param *factory_param = rmi4_data->factory_param; + + if (!factory_param) + return -EINVAL; + + if (!p_image) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Fail. p_image is null\n", + __func__); + retval = -EINVAL; + goto exit; + } + + p_right_median = (signed short *) kzalloc(rx_num * sizeof(short), GFP_KERNEL); + if (!p_right_median) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for right_median\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + p_left_median = (signed short *) kzalloc(rx_num * sizeof(short), GFP_KERNEL); + if (!p_left_median) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for left_median\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + p_right_column_buf = (signed short *) kzalloc(right_size * rx_num * sizeof(short), GFP_KERNEL); + if (!p_right_column_buf) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for left_column_buf\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + p_left_column_buf = (signed short *) kzalloc(left_size * rx_num * sizeof(short), GFP_KERNEL); + if (!p_left_column_buf) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for left_column_buf\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + + if (f54->swap_sensor_side) { + p_data_16 = p_image; + for (i = 0; i < rx_num; i++) { + for (j = 0; j < left_size; j++) { + p_left_column_buf[i * left_size + j] = p_data_16[j * rx_num + i]; + } + } + + p_data_16 = p_image + left_size * rx_num; + for (i = 0; i < rx_num; i++) { + for (j = 0; j < right_size; j++) { + p_right_column_buf[i * right_size + j] = p_data_16[j * rx_num + i]; + } + } + + for (i = 0; i < rx_num; i++) { + p_left_median[i] = FindMedian(p_left_column_buf + i * left_size, left_size); + p_right_median[i] = FindMedian(p_right_column_buf + i * right_size, right_size); + } + + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + if (i < left_size) { + temp = (signed int) p_image[i * rx_num + j]; + temp = temp * 100 / p_left_median[j]; + } else { + temp = (signed int) p_image[i * rx_num + j]; + temp = temp * 100 / p_right_median[j]; + } + + if ((temp > 0) && temp < factory_param->tddi_open_test_limit_phase2_lower) { + td43xx_amp_open_data[i * rx_num + j] = 1; + + pr_info("%s : phase 2 failed at (tx%-2d, rx%-2d), data = %d\n", + __func__, i, j, temp); + } else + td43xx_amp_open_data[i * rx_num + j] = 0; + } + } + } else { + p_data_16 = p_image; + for (i = 0; i < rx_num; i++) { + for (j = 0; j < right_size; j++) { + p_right_column_buf[i * right_size + j] = p_data_16[j * rx_num + i]; + } + } + + p_data_16 = p_image + right_size * rx_num; + for (i = 0; i < rx_num; i++) { + for (j = 0; j < left_size; j++) { + p_left_column_buf[i * left_size + j] = p_data_16[j * rx_num + i]; + } + } + + for (i = 0; i < rx_num; i++) { + p_right_median[i] = FindMedian(p_right_column_buf + i * right_size, right_size); + p_left_median[i] = FindMedian(p_left_column_buf + i * left_size, left_size); + } + + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + if (i < right_size) { + temp = (signed int) p_image[i * rx_num + j]; + temp = temp * 100 / p_right_median[j]; + } else { + temp = (signed int) p_image[i * rx_num + j]; + temp = temp * 100 / p_left_median[j]; + } + + if ((temp > 0) && (temp < factory_param->tddi_open_test_limit_phase2_lower)) { + td43xx_amp_open_data[i * rx_num + j] = 1; + + pr_info("%s : phase 2 failed at (tx%-2d, rx%-2d), data = %d\n", + __func__, i, j, temp); + } else + td43xx_amp_open_data[i * rx_num + j] = 0; + } + } + } + +exit: + kfree(p_right_median); + kfree(p_left_median); + kfree(p_right_column_buf); + kfree(p_left_column_buf); + + return retval; +} + +static ssize_t test_sysfs_td43xx_amp_open_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval = 0; + int i, j, k; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + struct synaptics_dsx_factory_param *factory_param = rmi4_data->factory_param; + + unsigned long setting; + unsigned char original_data_f54_ctrl99[3] = {0x00, 0x00, 0x00}; + struct f54_control control = f54->control; + unsigned char *p_report_data_8 = NULL; + signed short *p_rt92_delta_image = NULL; + signed short *p_rt92_image_1 = NULL; + signed short *p_rt92_image_2 = NULL; + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + if (setting != 1 || !factory_param) + return -EINVAL; + + if (f55->extended_amp_btn) { + tx_num -= 1; + } + + if (td43xx_amp_open_data) + kfree(td43xx_amp_open_data); + td43xx_amp_open_data = kzalloc(tx_num * rx_num, GFP_KERNEL); + if (!td43xx_amp_open_data) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for td43xx_amp_open_data\n", + __func__); + return -ENOMEM; + } + + p_report_data_8 = kzalloc(tx_num * rx_num * 2, GFP_KERNEL); + if (!p_report_data_8) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for p_report_data_8\n", + __func__); + retval = -ENOMEM; + goto exit; + } + memset(p_report_data_8, 0x00, tx_num * rx_num * 2); + + p_rt92_delta_image = kzalloc(tx_num * rx_num * sizeof(signed short), GFP_KERNEL); + if (!p_rt92_delta_image) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for p_rt92_delta_image\n", + __func__); + retval = -ENOMEM; + goto exit; + } + memset(p_rt92_delta_image, 0x00, tx_num * rx_num * sizeof(signed short)); + + p_rt92_image_1 = kzalloc(tx_num * rx_num * sizeof(signed short), GFP_KERNEL); + if (!p_rt92_image_1) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for p_rt92_image_1\n", + __func__); + retval = -ENOMEM; + goto exit; + } + memset(p_rt92_image_1, 0x00, tx_num * rx_num * sizeof(signed short)); + + p_rt92_image_2 = kzalloc(tx_num * rx_num * sizeof(signed short), GFP_KERNEL); + if (!p_rt92_image_2) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for p_rt92_image_2\n", + __func__); + retval = -ENOMEM; + goto exit; + } + memset(p_rt92_image_2, 0x00, tx_num * rx_num * sizeof(signed short)); + + if (f54->query.touch_controller_family != 2) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: not support touch controller family = 0 or 1 \n", + __func__); + retval = -EINVAL; + goto exit; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + control.reg_99->address, + original_data_f54_ctrl99, + sizeof(original_data_f54_ctrl99)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read integration duration\n", + __func__); + retval = -EIO; + goto exit; + } + + control.reg_99->integration_duration_lsb = factory_param->tddi_open_test_int_dur_one; + control.reg_99->integration_duration_msb = (factory_param->tddi_open_test_int_dur_one >> 8) & 0xff; + control.reg_99->reset_duration = original_data_f54_ctrl99[2]; + retval = synaptics_rmi4_reg_write(rmi4_data, + control.reg_99->address, + control.reg_99->data, + sizeof(control.reg_99->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write the integration duration to f54_ctrl_99 in step 1\n", + __func__); + retval = -EIO; + goto exit; + } + retval = test_do_command(COMMAND_FORCE_UPDATE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do force update in step 1\n", + __func__); + retval = -EIO; + goto exit; + } + + retval = test_sysfs_read_report_td43xx(dev, attr, "92", count, + false, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report 92 in step 1. exit\n", + __func__); + g_flag_read_report_fail = 1; + retval = -EIO; + goto exit; + } + + secure_memcpy(p_report_data_8, tx_num * rx_num * 2, + f54->report_data, f54->report_size, f54->report_size); + + k = 0; + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + p_rt92_image_1[i * rx_num + j] = + (signed short)(p_report_data_8[k] & 0xff) | (signed short)(p_report_data_8[k + 1] << 8); + k += 2; + } + } + + memset(p_report_data_8, 0x00, tx_num * rx_num * 2); + + control.reg_99->integration_duration_lsb = factory_param->tddi_open_test_int_dur_two; + control.reg_99->integration_duration_msb = (factory_param->tddi_open_test_int_dur_two >> 8) & 0xff; + control.reg_99->reset_duration = original_data_f54_ctrl99[2]; + retval = synaptics_rmi4_reg_write(rmi4_data, + control.reg_99->address, + control.reg_99->data, + sizeof(control.reg_99->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write the integration duration to f54_ctrl_99 in step 2\n", + __func__); + retval = -EIO; + goto exit; + } + retval = test_do_command(COMMAND_FORCE_UPDATE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do force update in step 2\n", + __func__); + retval = -EIO; + goto exit; + } + + retval = test_sysfs_read_report_td43xx(dev, attr, "92", count, + false, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report 92 in step 2. exit\n", + __func__); + g_flag_read_report_fail = 1; + retval = -EIO; + goto exit; + } + + secure_memcpy(p_report_data_8, tx_num * rx_num * 2, + f54->report_data, f54->report_size, f54->report_size); + + k = 0; + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + p_rt92_image_2[i * rx_num + j] = + (signed short)(p_report_data_8[k] & 0xff) | (signed short)(p_report_data_8[k + 1] << 8); + + k += 2; + } + } + + control.reg_99->integration_duration_lsb = original_data_f54_ctrl99[0]; + control.reg_99->integration_duration_msb = original_data_f54_ctrl99[1]; + control.reg_99->reset_duration = original_data_f54_ctrl99[2]; + retval = synaptics_rmi4_reg_write(rmi4_data, + control.reg_99->address, + control.reg_99->data, + sizeof(control.reg_99->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write the integration duration to f54_ctrl_99 in restore phase\n", + __func__); + retval = -EIO; + goto exit; + } + retval = test_do_command(COMMAND_FORCE_UPDATE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do force update in restore pahse\n", + __func__); + retval = -EIO; + goto exit; + } + + for (i = 0; i < tx_num * rx_num; i++) { + p_rt92_delta_image[i] = p_rt92_image_1[i] - p_rt92_image_2[i]; + } + + tddi_amp_open_data_testing(p_rt92_delta_image); + + retval = count; + +exit: + kfree(p_rt92_image_1); + kfree(p_rt92_image_2); + kfree(p_rt92_delta_image); + kfree(p_report_data_8); + + pr_err("%s: resetting device\n", __func__); + rmi4_data->reset_device(rmi4_data, false); + pr_err("%s: done resetting device\n", __func__); + + return count; +} + +static ssize_t test_sysfs_td43xx_amp_open_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int i, j; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + bool result = 1; + + if (!td43xx_amp_open_data) + return -EINVAL; + + + if (1 == g_flag_read_report_fail) { + kfree(td43xx_amp_open_data); + td43xx_amp_open_data = NULL; + return snprintf(buf, PAGE_SIZE, "ERROR: Fail to read RT92 image\n"); + } + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + if (td43xx_amp_open_data[i * rx_num + j] != 0) { + + result &= 0; + } + } + } + + kfree(td43xx_amp_open_data); + td43xx_amp_open_data = NULL; + + return snprintf(buf, PAGE_SIZE, "%s\n", (result == 1) ? "PASS" : "FAIL"); +} + + + +static ssize_t test_sysfs_abs_0d_open_w_autoservo_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval = 0; + int i, j, k; + int tx_num = f54->tx_assigned; + int rx_num = f54->rx_assigned; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + struct synaptics_dsx_factory_param *factory_param = rmi4_data->factory_param; + struct f54_control control = f54->control; + unsigned long setting; + + unsigned char original_data_f54_ctr223 = 0x00; + unsigned char data = 0x00; + + signed char *p_report_data_8 = NULL; + signed short *p_rt92_image_1 = NULL; + signed short *p_rt92_image_2 = NULL; + + unsigned char button_count = rmi4_data->valid_button_count; + + if (!factory_param) + return -EINVAL; + + button_count = factory_param->button_count; + + retval = sstrtoul(buf, 10, &setting); + if (retval) + return retval; + + if (setting != 1) + return -EINVAL; + + if (button_count == 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to get rmi button (count = %d)\n", + __func__, rmi4_data->valid_button_count); + retval = -EINVAL; + goto exit; + } + + /* allocate the g_tddi_amp_open_data_output */ + if (g_abs_0d_open_data_output) + kfree(g_abs_0d_open_data_output); + g_abs_0d_open_data_output = kzalloc(button_count * sizeof(int), GFP_KERNEL); + if (!g_abs_0d_open_data_output) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for g_abs_0d_open_data_output\n", + __func__); + return -ENOMEM; + } + + g_flag_read_report_fail = 0; + + /* allocate the buffer */ + p_report_data_8 = kzalloc(tx_num * rx_num * 2, GFP_KERNEL); + if (!p_report_data_8) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for p_report_data_8\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + p_rt92_image_1 = kzalloc(tx_num * rx_num * sizeof(signed short), GFP_KERNEL); + if (!p_rt92_image_1) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for p_rt92_image_1\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + p_rt92_image_2 = kzalloc(tx_num * rx_num * sizeof(signed short), GFP_KERNEL); + if (!p_rt92_image_2) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for p_rt92_image_2\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + /* step 1 */ + /* get first rt92 image */ + retval = test_sysfs_read_report_td43xx(dev, attr, "92", count, + false, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report 92 in step 1\n", + __func__); + g_flag_read_report_fail = 1; /* special code to indicate the failure of report reading */ + retval = -EIO; + goto exit; + } + + secure_memcpy(p_report_data_8, tx_num * rx_num * 2, + f54->report_data, f54->report_size, f54->report_size); + + /* normalize the rt92 image with 16-bit */ + k = 0; + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + p_rt92_image_1[i * rx_num + j] = + (signed short)(p_report_data_8[k] & 0xff) | (signed short)(p_report_data_8[k + 1] << 8); + + k += 2; + } + } + + memset(p_report_data_8, 0x00, tx_num * rx_num * 2); + + /* step 2 */ + /* read original 0d voltages */ + retval = synaptics_rmi4_reg_read(rmi4_data, + control.reg_223->address, + &original_data_f54_ctr223, + sizeof(original_data_f54_ctr223)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read original 0d_voltaes in step 2\n", + __func__); + retval = -EIO; + goto exit; + } + + /* step 3 */ + /* modify 0d voltages and force update */ + data = original_data_f54_ctr223 - factory_param->abs_0d_open_factor; + if (data < 0) + data = 0; + retval = synaptics_rmi4_reg_write(rmi4_data, + control.reg_223->address, + &data, + sizeof(data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to modify 0d voltages to f54_ctrl_223 in step 3\n", + __func__); + retval = -EIO; + goto exit; + } + retval = test_do_command(COMMAND_FORCE_UPDATE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do force update in step 3\n", + __func__); + retval = -EIO; + goto exit; + } + msleep(100); + + /* step 4 */ + /* get second rt92 image */ + retval = test_sysfs_read_report_td43xx(dev, attr, "92", count, + false, false); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report 92 in step 4\n", + __func__); + g_flag_read_report_fail = 1; /* special code to indicate the failure of report reading */ + retval = -EIO; + goto exit; + } + + secure_memcpy(p_report_data_8, tx_num * rx_num * 2, + f54->report_data, f54->report_size, f54->report_size); + + /* normalize the rt92 image with 16-bit */ + k = 0; + for (i = 0; i < tx_num; i++) { + for (j = 0; j < rx_num; j++) { + p_rt92_image_2[i * rx_num + j] = + (signed short)(p_report_data_8[k] & 0xff) | (signed short)(p_report_data_8[k + 1] << 8); + + k += 2; + } + } + + /* step 5 */ + /* restore original 0d voltages and force update */ + retval = synaptics_rmi4_reg_write(rmi4_data, + control.reg_223->address, + &original_data_f54_ctr223, + sizeof(original_data_f54_ctr223)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to restore 0d voltages to f54_ctrl_223 in step 5\n", + __func__); + retval = -EIO; + goto exit; + } + retval = test_do_command(COMMAND_FORCE_UPDATE); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to do force update in step 5\n", + __func__); + retval = -EIO; + goto exit; + } + + /* step 6 */ + /* calculation */ + for (i = 0; i < button_count; i++) { + g_abs_0d_open_data_output[i] = abs(p_rt92_image_1[(tx_num-1)*rx_num + i] - p_rt92_image_2[(tx_num-1)*rx_num + i]); + g_abs_0d_open_data_output[i] = (g_abs_0d_open_data_output[i] * 100)/p_rt92_image_1[(tx_num-1)*rx_num + i]; + printk(KERN_ERR "ref value is %d value1 is %d value2 is %d\n", g_abs_0d_open_data_output[i], p_rt92_image_1[(tx_num-1)*rx_num + i], p_rt92_image_2[(tx_num-1)*rx_num + i]); + if (g_abs_0d_open_data_output[i] < factory_param->abs_0d_open_test_limit) + g_abs_0d_open_data_output[i] = 1; /* fail */ + else + g_abs_0d_open_data_output[i] = 0; /* pass */ + } + +exit: + /* release resource */ + kfree(p_rt92_image_1); + kfree(p_rt92_image_2); + kfree(p_report_data_8); + + pr_err("%s: resetting device\n", __func__); + rmi4_data->reset_device(rmi4_data, false); + pr_err("%s: done resetting device\n", __func__); + + return count; +} + + +static ssize_t test_sysfs_abs_0d_open_w_autoservo_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + bool result = 0; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + struct synaptics_dsx_factory_param *factory_param = rmi4_data->factory_param; + unsigned char button_count = rmi4_data->valid_button_count; + int i; + + if (!factory_param) + return -EINVAL; + + if (!g_abs_0d_open_data_output) + return -EINVAL; + + /* check the special code if the failure of report image reading */ + if (1 == g_flag_read_report_fail) { + kfree(g_abs_0d_open_data_output); + g_abs_0d_open_data_output = NULL; + return snprintf(buf, PAGE_SIZE, "ERROR: Fail to read RT92 image\n"); + } + + button_count = factory_param->button_count; + + for (i = 0; i < button_count; i++) { + if (g_abs_0d_open_data_output[i] != 0) { + + result = 0; /* 0: fail */ + break; + /*dev_err(f54->rmi4_data->pdev->dev.parent, + "%s: Failed at 0D_button_%d\n", __func__, i); */ + } + } + + if (i == button_count) + result = 1; + + kfree(g_abs_0d_open_data_output); + g_abs_0d_open_data_output = NULL; + return snprintf(buf, PAGE_SIZE, "%s\n", (result == 1) ? "PASS" : "FAIL"); +} + +static void test_report_work(struct work_struct *work) +{ + int retval; + unsigned char report_index[2]; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + mutex_lock(&f54->status_mutex); + + if (f54->status != STATUS_BUSY) { + retval = f54->status; + goto exit; + } + + retval = test_wait_for_command_completion(); + if (retval < 0) { + retval = STATUS_ERROR; + goto exit; + } + + test_set_report_size(); + if (f54->report_size == 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Report data size = 0\n", + __func__); + retval = STATUS_ERROR; + goto exit; + } + + if (f54->data_buffer_size < f54->report_size) { + if (f54->data_buffer_size) + kfree(f54->report_data); + f54->report_data = kzalloc(f54->report_size, GFP_KERNEL); + if (!f54->report_data) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for data buffer\n", + __func__); + f54->data_buffer_size = 0; + retval = STATUS_ERROR; + goto exit; + } + f54->data_buffer_size = f54->report_size; + } + + report_index[0] = 0; + report_index[1] = 0; + + retval = synaptics_rmi4_reg_write(rmi4_data, + f54->data_base_addr + REPORT_INDEX_OFFSET, + report_index, + sizeof(report_index)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to write report data index\n", + __func__); + retval = STATUS_ERROR; + goto exit; + } + + msleep(2000); + + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->data_base_addr + REPORT_DATA_OFFSET, + f54->report_data, + f54->report_size); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read report data\n", + __func__); + retval = STATUS_ERROR; + goto exit; + } + + pr_err("%s: f54->report_type = %d\n", __func__, f54->report_type); + pr_err("%s: f54->report_size = %d\n", __func__, f54->report_size); + + retval = STATUS_IDLE; + +exit: + mutex_unlock(&f54->status_mutex); + + if (retval == STATUS_ERROR) + f54->report_size = 0; + + f54->status = retval; + + return; +} + +static void test_remove_sysfs(void) +{ + sysfs_remove_group(f54->sysfs_dir, &attr_group); + kobject_put(f54->sysfs_dir); + + return; +} + +static int test_set_sysfs(void) +{ + int retval; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + f54->sysfs_dir = kobject_create_and_add(SYSFS_FOLDER_NAME, + &rmi4_data->input_dev->dev.kobj); + if (!f54->sysfs_dir) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create sysfs directory\n", + __func__); + goto exit_directory; + } + + retval = sysfs_create_group(f54->sysfs_dir, &attr_group); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create sysfs attributes\n", + __func__); + goto exit_attributes; + } + + return 0; + +exit_attributes: + sysfs_remove_group(f54->sysfs_dir, &attr_group); + kobject_put(f54->sysfs_dir); +exit_directory: + return -ENODEV; +} + +static void test_free_control_mem(void) +{ + struct f54_control control = f54->control; + + kfree(control.reg_7); + kfree(control.reg_41); + kfree(control.reg_57); + kfree(control.reg_86); + kfree(control.reg_88); + kfree(control.reg_91); + kfree(control.reg_96); + kfree(control.reg_99); + kfree(control.reg_110); + kfree(control.reg_149); + kfree(control.reg_182); + kfree(control.reg_188); + kfree(control.reg_223); + kfree(control.reg_225); + + return; +} + +static void test_set_data(void) +{ + unsigned short reg_addr; + + reg_addr = f54->data_base_addr + REPORT_DATA_OFFSET + 1; + + /* data 4 */ + if (f54->query.has_sense_frequency_control) + reg_addr++; + + /* data 5 reserved */ + + /* data 6 */ + if (f54->query.has_interference_metric) + reg_addr += 2; + + /* data 7 */ + if (f54->query.has_one_byte_report_rate | + f54->query.has_two_byte_report_rate) + reg_addr++; + if (f54->query.has_two_byte_report_rate) + reg_addr++; + + /* data 8 */ + if (f54->query.has_variance_metric) + reg_addr += 2; + + /* data 9 */ + if (f54->query.has_multi_metric_state_machine) + reg_addr += 2; + + /* data 10 */ + if (f54->query.has_multi_metric_state_machine | + f54->query.has_noise_state) + reg_addr++; + + /* data 11 */ + if (f54->query.has_status) + reg_addr++; + + /* data 12 */ + if (f54->query.has_slew_metric) + reg_addr += 2; + + /* data 13 */ + if (f54->query.has_multi_metric_state_machine) + reg_addr += 2; + + /* data 14 */ + if (f54->query_13.has_cidim) + reg_addr++; + + /* data 15 */ + if (f54->query_13.has_rail_im) + reg_addr++; + + /* data 16 */ + if (f54->query_13.has_noise_mitigation_enhancement) + reg_addr++; + + /* data 17 */ + if (f54->query_16.has_data17) + reg_addr++; + + /* data 18 */ + if (f54->query_21.has_query24_data18) + reg_addr++; + + /* data 19 */ + if (f54->query_21.has_data19) + reg_addr++; + + /* data_20 */ + if (f54->query_25.has_ctrl109) + reg_addr++; + + /* data 21 */ + if (f54->query_27.has_data21) + reg_addr++; + + /* data 22 */ + if (f54->query_27.has_data22) + reg_addr++; + + /* data 23 */ + if (f54->query_29.has_data23) + reg_addr++; + + /* data 24 */ + if (f54->query_32.has_data24) + reg_addr++; + + /* data 25 */ + if (f54->query_35.has_data25) + reg_addr++; + + /* data 26 */ + if (f54->query_35.has_data26) + reg_addr++; + + /* data 27 */ + if (f54->query_46.has_data27) + reg_addr++; + + /* data 28 */ + if (f54->query_46.has_data28) + reg_addr++; + + /* data 29 30 reserved */ + + /* data 31 */ + if (f54->query_49.has_data31) { + f54->data_31.address = reg_addr; + reg_addr++; + } + + return; +} + +static int test_set_controls(void) +{ + int retval; + unsigned char length; + unsigned char num_of_sensing_freqs; + unsigned short reg_addr = f54->control_base_addr; + struct f54_control *control = &f54->control; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + num_of_sensing_freqs = f54->query.number_of_sensing_frequencies; + + /* control 0 */ + reg_addr += CONTROL_0_SIZE; + + /* control 1 */ + if ((f54->query.touch_controller_family == 0) || + (f54->query.touch_controller_family == 1)) + reg_addr += CONTROL_1_SIZE; + + /* control 2 */ + reg_addr += CONTROL_2_SIZE; + + /* control 3 */ + if (f54->query.has_pixel_touch_threshold_adjustment) + reg_addr += CONTROL_3_SIZE; + + /* controls 4 5 6 */ + if ((f54->query.touch_controller_family == 0) || + (f54->query.touch_controller_family == 1)) + reg_addr += CONTROL_4_6_SIZE; + + /* control 7 */ + if (f54->query.touch_controller_family == 1) { + control->reg_7 = kzalloc(sizeof(*(control->reg_7)), + GFP_KERNEL); + if (!control->reg_7) + goto exit_no_mem; + control->reg_7->address = reg_addr; + reg_addr += CONTROL_7_SIZE; + } + + /* controls 8 9 */ + if ((f54->query.touch_controller_family == 0) || + (f54->query.touch_controller_family == 1)) + reg_addr += CONTROL_8_9_SIZE; + + /* control 10 */ + if (f54->query.has_interference_metric) + reg_addr += CONTROL_10_SIZE; + + /* control 11 */ + if (f54->query.has_ctrl11) + reg_addr += CONTROL_11_SIZE; + + /* controls 12 13 */ + if (f54->query.has_relaxation_control) + reg_addr += CONTROL_12_13_SIZE; + + /* controls 14 15 16 */ + if (f54->query.has_sensor_assignment) { + reg_addr += CONTROL_14_SIZE; + reg_addr += CONTROL_15_SIZE * f54->query.num_of_rx_electrodes; + reg_addr += CONTROL_16_SIZE * f54->query.num_of_tx_electrodes; + } + + /* controls 17 18 19 */ + if (f54->query.has_sense_frequency_control) { + reg_addr += CONTROL_17_SIZE * num_of_sensing_freqs; + reg_addr += CONTROL_18_SIZE * num_of_sensing_freqs; + reg_addr += CONTROL_19_SIZE * num_of_sensing_freqs; + } + + /* control 20 */ + reg_addr += CONTROL_20_SIZE; + + /* control 21 */ + if (f54->query.has_sense_frequency_control) + reg_addr += CONTROL_21_SIZE; + + /* controls 22 23 24 25 26 */ + if (f54->query.has_firmware_noise_mitigation) + reg_addr += CONTROL_22_26_SIZE; + + /* control 27 */ + if (f54->query.has_iir_filter) + reg_addr += CONTROL_27_SIZE; + + /* control 28 */ + if (f54->query.has_firmware_noise_mitigation) + reg_addr += CONTROL_28_SIZE; + + /* control 29 */ + if (f54->query.has_cmn_removal) + reg_addr += CONTROL_29_SIZE; + + /* control 30 */ + if (f54->query.has_cmn_maximum) + reg_addr += CONTROL_30_SIZE; + + /* control 31 */ + if (f54->query.has_touch_hysteresis) + reg_addr += CONTROL_31_SIZE; + + /* controls 32 33 34 35 */ + if (f54->query.has_edge_compensation) + reg_addr += CONTROL_32_35_SIZE; + + /* control 36 */ + if ((f54->query.curve_compensation_mode == 1) || + (f54->query.curve_compensation_mode == 2)) { + if (f54->query.curve_compensation_mode == 1) { + length = max(f54->query.num_of_rx_electrodes, + f54->query.num_of_tx_electrodes); + } else if (f54->query.curve_compensation_mode == 2) { + length = f54->query.num_of_rx_electrodes; + } + reg_addr += CONTROL_36_SIZE * length; + } + + /* control 37 */ + if (f54->query.curve_compensation_mode == 2) + reg_addr += CONTROL_37_SIZE * f54->query.num_of_tx_electrodes; + + /* controls 38 39 40 */ + if (f54->query.has_per_frequency_noise_control) { + reg_addr += CONTROL_38_SIZE * num_of_sensing_freqs; + reg_addr += CONTROL_39_SIZE * num_of_sensing_freqs; + reg_addr += CONTROL_40_SIZE * num_of_sensing_freqs; + } + + /* control 41 */ + if (f54->query.has_signal_clarity) { + control->reg_41 = kzalloc(sizeof(*(control->reg_41)), + GFP_KERNEL); + if (!control->reg_41) + goto exit_no_mem; + control->reg_41->address = reg_addr; + reg_addr += CONTROL_41_SIZE; + } + + /* control 42 */ + if (f54->query.has_variance_metric) + reg_addr += CONTROL_42_SIZE; + + /* controls 43 44 45 46 47 48 49 50 51 52 53 54 */ + if (f54->query.has_multi_metric_state_machine) + reg_addr += CONTROL_43_54_SIZE; + + /* controls 55 56 */ + if (f54->query.has_0d_relaxation_control) + reg_addr += CONTROL_55_56_SIZE; + + /* control 57 */ + if (f54->query.has_0d_acquisition_control) { + control->reg_57 = kzalloc(sizeof(*(control->reg_57)), + GFP_KERNEL); + if (!control->reg_57) + goto exit_no_mem; + control->reg_57->address = reg_addr; + reg_addr += CONTROL_57_SIZE; + } + + /* control 58 */ + if (f54->query.has_0d_acquisition_control) + reg_addr += CONTROL_58_SIZE; + + /* control 59 */ + if (f54->query.has_h_blank) + reg_addr += CONTROL_59_SIZE; + + /* controls 60 61 62 */ + if ((f54->query.has_h_blank) || + (f54->query.has_v_blank) || + (f54->query.has_long_h_blank)) + reg_addr += CONTROL_60_62_SIZE; + + /* control 63 */ + if ((f54->query.has_h_blank) || + (f54->query.has_v_blank) || + (f54->query.has_long_h_blank) || + (f54->query.has_slew_metric) || + (f54->query.has_slew_option) || + (f54->query.has_noise_mitigation2)) + reg_addr += CONTROL_63_SIZE; + + /* controls 64 65 66 67 */ + if (f54->query.has_h_blank) + reg_addr += CONTROL_64_67_SIZE * 7; + else if ((f54->query.has_v_blank) || + (f54->query.has_long_h_blank)) + reg_addr += CONTROL_64_67_SIZE; + + /* controls 68 69 70 71 72 73 */ + if ((f54->query.has_h_blank) || + (f54->query.has_v_blank) || + (f54->query.has_long_h_blank)) + reg_addr += CONTROL_68_73_SIZE; + + /* control 74 */ + if (f54->query.has_slew_metric) + reg_addr += CONTROL_74_SIZE; + + /* control 75 */ + if (f54->query.has_enhanced_stretch) + reg_addr += CONTROL_75_SIZE * num_of_sensing_freqs; + + /* control 76 */ + if (f54->query.has_startup_fast_relaxation) + reg_addr += CONTROL_76_SIZE; + + /* controls 77 78 */ + if (f54->query.has_esd_control) + reg_addr += CONTROL_77_78_SIZE; + + /* controls 79 80 81 82 83 */ + if (f54->query.has_noise_mitigation2) + reg_addr += CONTROL_79_83_SIZE; + + /* controls 84 85 */ + if (f54->query.has_energy_ratio_relaxation) + reg_addr += CONTROL_84_85_SIZE; + + /* control 86 */ + if (f54->query_13.has_ctrl86) { + control->reg_86 = kzalloc(sizeof(*(control->reg_86)), + GFP_KERNEL); + if (!control->reg_86) + goto exit_no_mem; + control->reg_86->address = reg_addr; + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->control.reg_86->address, + f54->control.reg_86->data, + sizeof(f54->control.reg_86->data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read sense display ratio\n", + __func__); + return retval; + } + reg_addr += CONTROL_86_SIZE; + } + + /* control 87 */ + if (f54->query_13.has_ctrl87) + reg_addr += CONTROL_87_SIZE; + + /* control 88 */ + if (f54->query.has_ctrl88) { + control->reg_88 = kzalloc(sizeof(*(control->reg_88)), + GFP_KERNEL); + if (!control->reg_88) + goto exit_no_mem; + control->reg_88->address = reg_addr; + reg_addr += CONTROL_88_SIZE; + } + + /* control 89 */ + if (f54->query_13.has_cidim || + f54->query_13.has_noise_mitigation_enhancement || + f54->query_13.has_rail_im) + reg_addr += CONTROL_89_SIZE; + + /* control 90 */ + if (f54->query_15.has_ctrl90) + reg_addr += CONTROL_90_SIZE; + + /* control 91 */ + if (f54->query_21.has_ctrl91) { + /* td43xx start */ + control->reg_91 = kzalloc(sizeof(*(control->reg_91)), + GFP_KERNEL); + if (!control->reg_91) + goto exit_no_mem; + control->reg_91->address = reg_addr; + /* td43xx end */ + reg_addr += CONTROL_91_SIZE; + } + + /* control 92 */ + if (f54->query_16.has_ctrl92) + reg_addr += CONTROL_92_SIZE; + + /* control 93 */ + if (f54->query_16.has_ctrl93) + reg_addr += CONTROL_93_SIZE; + + /* control 94 */ + if (f54->query_16.has_ctrl94_query18) + reg_addr += CONTROL_94_SIZE; + + /* control 95 */ + if (f54->query_16.has_ctrl95_query19) + reg_addr += CONTROL_95_SIZE; + + /* control 96 */ + if (f54->query_21.has_ctrl96) { + /* td43xx start */ + control->reg_96 = kzalloc(sizeof(*(control->reg_96)), + GFP_KERNEL); + if (!control->reg_96) + goto exit_no_mem; + control->reg_96->address = reg_addr; + /* td43xx end */ + reg_addr += CONTROL_96_SIZE; + } + + /* control 97 */ + if (f54->query_21.has_ctrl97) + reg_addr += CONTROL_97_SIZE; + + /* control 98 */ + if (f54->query_21.has_ctrl98) + reg_addr += CONTROL_98_SIZE; + + /* control 99 */ + if (f54->query.touch_controller_family == 2) { + /* td43xx start */ + control->reg_99 = kzalloc(sizeof(*(control->reg_99)), + GFP_KERNEL); + if (!control->reg_99) + goto exit_no_mem; + control->reg_99->address = reg_addr; + /* td43xx end */ + reg_addr += CONTROL_99_SIZE; + } + + /* control 100 */ + if (f54->query_16.has_ctrl100) + reg_addr += CONTROL_100_SIZE; + + /* control 101 */ + if (f54->query_22.has_ctrl101) + reg_addr += CONTROL_101_SIZE; + + + /* control 102 */ + if (f54->query_23.has_ctrl102) + reg_addr += CONTROL_102_SIZE; + + /* control 103 */ + if (f54->query_22.has_ctrl103_query26) { + f54->skip_preparation = true; + reg_addr += CONTROL_103_SIZE; + } + + /* control 104 */ + if (f54->query_22.has_ctrl104) + reg_addr += CONTROL_104_SIZE; + + /* control 105 */ + if (f54->query_22.has_ctrl105) + reg_addr += CONTROL_105_SIZE; + + /* control 106 */ + if (f54->query_25.has_ctrl106) + reg_addr += CONTROL_106_SIZE; + + /* control 107 */ + if (f54->query_25.has_ctrl107) + reg_addr += CONTROL_107_SIZE; + + /* control 108 */ + if (f54->query_25.has_ctrl108) + reg_addr += CONTROL_108_SIZE; + + /* control 109 */ + if (f54->query_25.has_ctrl109) + reg_addr += CONTROL_109_SIZE; + + /* control 110 */ + if (f54->query_27.has_ctrl110) { + control->reg_110 = kzalloc(sizeof(*(control->reg_110)), + GFP_KERNEL); + if (!control->reg_110) + goto exit_no_mem; + control->reg_110->address = reg_addr; + reg_addr += CONTROL_110_SIZE; + } + + /* control 111 */ + if (f54->query_27.has_ctrl111) + reg_addr += CONTROL_111_SIZE; + + /* control 112 */ + if (f54->query_27.has_ctrl112) + reg_addr += CONTROL_112_SIZE; + + /* control 113 */ + if (f54->query_27.has_ctrl113) + reg_addr += CONTROL_113_SIZE; + + /* control 114 */ + if (f54->query_27.has_ctrl114) + reg_addr += CONTROL_114_SIZE; + + /* control 115 */ + if (f54->query_29.has_ctrl115) + reg_addr += CONTROL_115_SIZE; + + /* control 116 */ + if (f54->query_29.has_ctrl116) + reg_addr += CONTROL_116_SIZE; + + /* control 117 */ + if (f54->query_29.has_ctrl117) + reg_addr += CONTROL_117_SIZE; + + /* control 118 */ + if (f54->query_30.has_ctrl118) + reg_addr += CONTROL_118_SIZE; + + /* control 119 */ + if (f54->query_30.has_ctrl119) + reg_addr += CONTROL_119_SIZE; + + /* control 120 */ + if (f54->query_30.has_ctrl120) + reg_addr += CONTROL_120_SIZE; + + /* control 121 */ + if (f54->query_30.has_ctrl121) + reg_addr += CONTROL_121_SIZE; + + /* control 122 */ + if (f54->query_30.has_ctrl122_query31) + reg_addr += CONTROL_122_SIZE; + + /* control 123 */ + if (f54->query_30.has_ctrl123) + reg_addr += CONTROL_123_SIZE; + + /* control 124 */ + if (f54->query_30.has_ctrl124) + reg_addr += CONTROL_124_SIZE; + + /* control 125 */ + if (f54->query_32.has_ctrl125) + reg_addr += CONTROL_125_SIZE; + + /* control 126 */ + if (f54->query_32.has_ctrl126) + reg_addr += CONTROL_126_SIZE; + + /* control 127 */ + if (f54->query_32.has_ctrl127) + reg_addr += CONTROL_127_SIZE; + + /* control 128 */ + if (f54->query_33.has_ctrl128) + reg_addr += CONTROL_128_SIZE; + + /* control 129 */ + if (f54->query_33.has_ctrl129) + reg_addr += CONTROL_129_SIZE; + + /* control 130 */ + if (f54->query_33.has_ctrl130) + reg_addr += CONTROL_130_SIZE; + + /* control 131 */ + if (f54->query_33.has_ctrl131) + reg_addr += CONTROL_131_SIZE; + + /* control 132 */ + if (f54->query_33.has_ctrl132) + reg_addr += CONTROL_132_SIZE; + + /* control 133 */ + if (f54->query_33.has_ctrl133) + reg_addr += CONTROL_133_SIZE; + + /* control 134 */ + if (f54->query_33.has_ctrl134) + reg_addr += CONTROL_134_SIZE; + + /* control 135 */ + if (f54->query_35.has_ctrl135) + reg_addr += CONTROL_135_SIZE; + + /* control 136 */ + if (f54->query_35.has_ctrl136) + reg_addr += CONTROL_136_SIZE; + + /* control 137 */ + if (f54->query_35.has_ctrl137) + reg_addr += CONTROL_137_SIZE; + + /* control 138 */ + if (f54->query_35.has_ctrl138) + reg_addr += CONTROL_138_SIZE; + + /* control 139 */ + if (f54->query_35.has_ctrl139) + reg_addr += CONTROL_139_SIZE; + + /* control 140 */ + if (f54->query_35.has_ctrl140) + reg_addr += CONTROL_140_SIZE; + + /* control 141 */ + if (f54->query_36.has_ctrl141) + reg_addr += CONTROL_141_SIZE; + + /* control 142 */ + if (f54->query_36.has_ctrl142) + reg_addr += CONTROL_142_SIZE; + + /* control 143 */ + if (f54->query_36.has_ctrl143) + reg_addr += CONTROL_143_SIZE; + + /* control 144 */ + if (f54->query_36.has_ctrl144) + reg_addr += CONTROL_144_SIZE; + + /* control 145 */ + if (f54->query_36.has_ctrl145) + reg_addr += CONTROL_145_SIZE; + + /* control 146 */ + if (f54->query_36.has_ctrl146) + reg_addr += CONTROL_146_SIZE; + + /* control 147 */ + if (f54->query_38.has_ctrl147) + reg_addr += CONTROL_147_SIZE; + + /* control 148 */ + if (f54->query_38.has_ctrl148) + reg_addr += CONTROL_148_SIZE; + + /* control 149 */ + if (f54->query_38.has_ctrl149) { + control->reg_149 = kzalloc(sizeof(*(control->reg_149)), + GFP_KERNEL); + if (!control->reg_149) + goto exit_no_mem; + control->reg_149->address = reg_addr; + reg_addr += CONTROL_149_SIZE; + } + + /* control 150 */ + if (f54->query_38.has_ctrl150) + reg_addr += CONTROL_150_SIZE; + + /* control 151 */ + if (f54->query_38.has_ctrl151) + reg_addr += CONTROL_151_SIZE; + + /* control 152 */ + if (f54->query_38.has_ctrl152) + reg_addr += CONTROL_152_SIZE; + + /* control 153 */ + if (f54->query_38.has_ctrl153) + reg_addr += CONTROL_153_SIZE; + + /* control 154 */ + if (f54->query_39.has_ctrl154) + reg_addr += CONTROL_154_SIZE; + + /* control 155 */ + if (f54->query_39.has_ctrl155) + reg_addr += CONTROL_155_SIZE; + + /* control 156 */ + if (f54->query_39.has_ctrl156) + reg_addr += CONTROL_156_SIZE; + + /* controls 157 158 */ + if (f54->query_39.has_ctrl157_ctrl158) + reg_addr += CONTROL_157_158_SIZE; + + /* controls 159 to 162 reserved */ + + /* control 163 */ + if (f54->query_40.has_ctrl163_query41) + reg_addr += CONTROL_163_SIZE; + + /* control 164 */ + if (f54->query_40.has_ctrl164) + reg_addr += CONTROL_164_SIZE; + + /* control 165 */ + if (f54->query_40.has_ctrl165_query42) + reg_addr += CONTROL_165_SIZE; + + /* control 166 */ + if (f54->query_40.has_ctrl166) + reg_addr += CONTROL_166_SIZE; + + /* control 167 */ + if (f54->query_40.has_ctrl167) + reg_addr += CONTROL_167_SIZE; + + /* control 168 */ + if (f54->query_40.has_ctrl168) + reg_addr += CONTROL_168_SIZE; + + /* control 169 */ + if (f54->query_40.has_ctrl169) + reg_addr += CONTROL_169_SIZE; + + /* control 170 reserved */ + + /* control 171 */ + if (f54->query_43.has_ctrl171) + reg_addr += CONTROL_171_SIZE; + + /* control 172 */ + if (f54->query_43.has_ctrl172_query44_query45) + reg_addr += CONTROL_172_SIZE; + + /* control 173 */ + if (f54->query_43.has_ctrl173) + reg_addr += CONTROL_173_SIZE; + + /* control 174 */ + if (f54->query_43.has_ctrl174) + reg_addr += CONTROL_174_SIZE; + + /* control 175 */ + if (f54->query_43.has_ctrl175) + reg_addr += CONTROL_175_SIZE; + + /* control 176 */ + if (f54->query_46.has_ctrl176) + reg_addr += CONTROL_176_SIZE; + + /* controls 177 178 */ + if (f54->query_46.has_ctrl177_ctrl178) + reg_addr += CONTROL_177_178_SIZE; + + /* control 179 */ + if (f54->query_46.has_ctrl179) + reg_addr += CONTROL_179_SIZE; + + /* controls 180 to 181 reserved */ + + /* control 182 */ + if (f54->query_47.has_ctrl182){ + control->reg_182 = kzalloc(sizeof(*(control->reg_182)), + GFP_KERNEL); + if (!control->reg_182) + goto exit_no_mem; + control->reg_182->address = reg_addr; + reg_addr += CONTROL_182_SIZE; + } + + /* control 183 */ + if (f54->query_47.has_ctrl183) + reg_addr += CONTROL_183_SIZE; + + /* control 184 reserved */ + + /* control 185 */ + if (f54->query_47.has_ctrl185) + reg_addr += CONTROL_185_SIZE; + + /* control 186 */ + if (f54->query_47.has_ctrl186) + reg_addr += CONTROL_186_SIZE; + + /* control 187 */ + if (f54->query_47.has_ctrl187) + reg_addr += CONTROL_187_SIZE; + + /* control 188 */ + if (f54->query_49.has_ctrl188) { + control->reg_188 = kzalloc(sizeof(*(control->reg_188)), + GFP_KERNEL); + if (!control->reg_188) + goto exit_no_mem; + control->reg_188->address = reg_addr; + reg_addr += CONTROL_188_SIZE; + } + + /* control 189 */ + if (f54->query_49.has_ctrl189) + reg_addr += CONTROL_189_SIZE; + + /* control 190 */ + if (f54->query_49.has_ctrl190) + reg_addr += CONTROL_190_SIZE; + + /* control 191 */ + if (f54->query_50.has_ctrl191) + reg_addr += CONTROL_191_SIZE; + + /* control 192 */ + if (f54->query_50.has_ctrl192) + reg_addr += CONTROL_192_SIZE; + + /* control 193 reserved */ + + /* control 194 */ + if (f54->query_50.has_ctrl194) + reg_addr += CONTROL_194_SIZE; + + /* control 195 */ + if (f54->query_50.has_ctrl195) + reg_addr += CONTROL_195_SIZE; + + /* control 196 */ + if (f54->query_51.has_ctrl196) + reg_addr += CONTROL_196_SIZE; + + /* controls 197 to 205 reserved */ + + /* control 206 */ + if (f54->query_57.has_ctrl206) + reg_addr += CONTROL_206_SIZE; + + /* control 207 */ + if (f54->query_57.has_ctrl207) + reg_addr += CONTROL_207_SIZE; + + /* control 208 reserved */ + + /* control 209 */ + if (f54->query_57.has_ctrl209) + reg_addr += CONTROL_209_SIZE; + + /* control 210 */ + if (f54->query_57.has_ctrl210) + reg_addr += CONTROL_210_SIZE; + + /* controls 211 to 213 reserved */ + + /* control 214 */ + if (f54->query_61.has_ctrl214) + reg_addr += CONTROL_214_SIZE; + + /* control 215 */ + if (f54->query_61.has_ctrl215_query62_query63) + reg_addr += CONTROL_215_SIZE; + + /* control 217 reserved */ + + /* control 218 */ + if (f54->query_61.has_ctrl218) + reg_addr += CONTROL_218_SIZE; + + /* control 219 - 221 reserved */ + + /* control 222 */ + if (f54->query_64.has_ctrl222) + reg_addr += CONTROL_222_SIZE; + + /* control 223 */ + if (f54->query_64.has_ctrl103_sub3) { + control->reg_223 = kzalloc(sizeof(*(control->reg_223)), + GFP_KERNEL); + if (!control->reg_223) + goto exit_no_mem; + control->reg_223->address = reg_addr; + reg_addr += CONTROL_223_SIZE; + } + + /* control 224 reserved */ + + /* control 225 */ + if (f54->query_65.has_ctrl225) { + control->reg_225 = kzalloc(sizeof(*(control->reg_225)), + GFP_KERNEL); + if (!control->reg_225) + goto exit_no_mem; + control->reg_225->address = reg_addr; + reg_addr += CONTROL_225_SIZE; + } + + return 0; + +exit_no_mem: + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for control registers\n", + __func__); + return -ENOMEM; +} + +static int test_set_queries(void) +{ + int retval; + unsigned char offset; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr, + f54->query.data, + sizeof(f54->query.data)); + if (retval < 0) + return retval; + + offset = sizeof(f54->query.data); + + /* query 12 */ + if (f54->query.has_sense_frequency_control == 0) + offset -= 1; + + /* query 13 */ + if (f54->query.has_query13) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_13.data, + sizeof(f54->query_13.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 14 */ + if (f54->query_13.has_ctrl87) + offset += 1; + + /* query 15 */ + if (f54->query.has_query15) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_15.data, + sizeof(f54->query_15.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 16 */ + if (f54->query_15.has_query16) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_16.data, + sizeof(f54->query_16.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 17 */ + if (f54->query_16.has_query17) + offset += 1; + + /* query 18 */ + if (f54->query_16.has_ctrl94_query18) + offset += 1; + + /* query 19 */ + if (f54->query_16.has_ctrl95_query19) + offset += 1; + + /* query 20 */ + if (f54->query_15.has_query20) + offset += 1; + + /* query 21 */ + if (f54->query_15.has_query21) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_21.data, + sizeof(f54->query_21.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 22 */ + if (f54->query_15.has_query22) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_22.data, + sizeof(f54->query_22.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 23 */ + if (f54->query_22.has_query23) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_23.data, + sizeof(f54->query_23.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 24 */ + if (f54->query_21.has_query24_data18) + offset += 1; + + /* query 25 */ + if (f54->query_15.has_query25) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_25.data, + sizeof(f54->query_25.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 26 */ + if (f54->query_22.has_ctrl103_query26) + offset += 1; + + /* query 27 */ + if (f54->query_25.has_query27) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_27.data, + sizeof(f54->query_27.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 28 */ + if (f54->query_22.has_query28) + offset += 1; + + /* query 29 */ + if (f54->query_27.has_query29) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_29.data, + sizeof(f54->query_29.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 30 */ + if (f54->query_29.has_query30) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_30.data, + sizeof(f54->query_30.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 31 */ + if (f54->query_30.has_ctrl122_query31) + offset += 1; + + /* query 32 */ + if (f54->query_30.has_query32) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_32.data, + sizeof(f54->query_32.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 33 */ + if (f54->query_32.has_query33) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_33.data, + sizeof(f54->query_33.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 34 */ + if (f54->query_32.has_query34) + offset += 1; + + /* query 35 */ + if (f54->query_32.has_query35) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_35.data, + sizeof(f54->query_35.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 36 */ + if (f54->query_33.has_query36) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_36.data, + sizeof(f54->query_36.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 37 */ + if (f54->query_36.has_query37) + offset += 1; + + /* query 38 */ + if (f54->query_36.has_query38) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_38.data, + sizeof(f54->query_38.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 39 */ + if (f54->query_38.has_query39) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_39.data, + sizeof(f54->query_39.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 40 */ + if (f54->query_39.has_query40) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_40.data, + sizeof(f54->query_40.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 41 */ + if (f54->query_40.has_ctrl163_query41) + offset += 1; + + /* query 42 */ + if (f54->query_40.has_ctrl165_query42) + offset += 1; + + /* query 43 */ + if (f54->query_40.has_query43) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_43.data, + sizeof(f54->query_43.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* queries 44 45 */ + if (f54->query_43.has_ctrl172_query44_query45) + offset += 2; + + /* query 46 */ + if (f54->query_43.has_query46) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_46.data, + sizeof(f54->query_46.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 47 */ + if (f54->query_46.has_query47) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_47.data, + sizeof(f54->query_47.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 48 reserved */ + + /* query 49 */ + if (f54->query_47.has_query49) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_49.data, + sizeof(f54->query_49.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 50 */ + if (f54->query_49.has_query50) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_50.data, + sizeof(f54->query_50.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 51 */ + if (f54->query_50.has_query51) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_51.data, + sizeof(f54->query_51.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 52 reserved */ + + /* queries 53 54 */ + if (f54->query_51.has_query53_query54_ctrl198) + offset += 2; + + /* query 55 */ + if (f54->query_51.has_query55) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_55.data, + sizeof(f54->query_55.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* queries 56 */ + if (f54->query_55.has_query56) + offset += 1; + + /* query 57 */ + if (f54->query_55.has_query57) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_57.data, + sizeof(f54->query_57.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 58 */ + if (f54->query_57.has_query58) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_58.data, + sizeof(f54->query_58.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* queries 59 */ + if (f54->query_58.has_query59) + offset += 1; + + /* queries 60 */ + if (f54->query_58.has_query60) + offset += 1; + + /* queries 61 */ + if (f54->query_58.has_query61) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_61.data, + sizeof(f54->query_61.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* queries 62 63 */ + if (f54->query_61.has_ctrl215_query62_query63) + offset += 2; + + /* queries 64 */ + if (f54->query_61.has_query64) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_64.data, + sizeof(f54->query_64.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* queries 65 */ + if (f54->query_64.has_query65) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_65.data, + sizeof(f54->query_65.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* queries 66 */ + if (f54->query_65.has_query66_ctrl231) + offset += 1; + + /* queries 67 */ + if (f54->query_65.has_query67) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_67.data, + sizeof(f54->query_67.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* queries 68 */ + if (f54->query_67.has_query68) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_68.data, + sizeof(f54->query_68.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* queries 69 */ + if (f54->query_68.has_query69) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f54->query_base_addr + offset, + f54->query_69.data, + sizeof(f54->query_69.data)); + if (retval < 0) + return retval; + offset += 1; + } + + return 0; +} + +static void test_f54_set_regs(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn_desc *fd, + unsigned int intr_count, + unsigned char page) +{ + unsigned char ii; + unsigned char intr_offset; + + f54->query_base_addr = fd->query_base_addr | (page << 8); + f54->control_base_addr = fd->ctrl_base_addr | (page << 8); + f54->data_base_addr = fd->data_base_addr | (page << 8); + f54->command_base_addr = fd->cmd_base_addr | (page << 8); + + f54->intr_reg_num = (intr_count + 7) / 8; + if (f54->intr_reg_num != 0) + f54->intr_reg_num -= 1; + + f54->intr_mask = 0; + intr_offset = intr_count % 8; + for (ii = intr_offset; + ii < (fd->intr_src_count + intr_offset); + ii++) { + f54->intr_mask |= 1 << ii; + } + + return; +} + +static int test_f55_set_controls(void) +{ + unsigned char offset = 0; + + /* controls 0 1 2 */ + if (f55->query.has_sensor_assignment) + offset += 3; + + /* control 3 */ + if (f55->query.has_edge_compensation) + offset++; + + /* control 4 */ + if (f55->query.curve_compensation_mode == 0x1 || + f55->query.curve_compensation_mode == 0x2) + offset++; + + /* control 5 */ + if (f55->query.curve_compensation_mode == 0x2) + offset++; + + /* control 6 */ + if (f55->query.has_ctrl6) + offset++; + + /* control 7 */ + if (f55->query.has_alternate_transmitter_assignment) + offset++; + + /* control 8 */ + if (f55->query_3.has_ctrl8) + offset++; + + /* control 9 */ + if (f55->query_3.has_ctrl9) + offset++; + + /* control 10 */ + if (f55->query_5.has_corner_compensation) + offset++; + + /* control 11 */ + if (f55->query.curve_compensation_mode == 0x3) + offset++; + + /* control 12 */ + if (f55->query_5.has_ctrl12) + offset++; + + /* control 13 */ + if (f55->query_5.has_ctrl13) + offset++; + + /* control 14 */ + if (f55->query_5.has_ctrl14) + offset++; + + /* control 15 */ + if (f55->query_5.has_basis_function) + offset++; + + /* control 16 */ + if (f55->query_17.has_ctrl16) + offset++; + + /* control 17 */ + if (f55->query_17.has_ctrl17) + offset++; + + /* controls 18 19 */ + if (f55->query_17.has_ctrl18_ctrl19) + offset += 2; + + /* control 20 */ + if (f55->query_17.has_ctrl20) + offset++; + + /* control 21 */ + if (f55->query_17.has_ctrl21) + offset++; + + /* control 22 */ + if (f55->query_17.has_ctrl22) + offset++; + + /* control 23 */ + if (f55->query_18.has_ctrl23) + offset++; + + /* control 24 */ + if (f55->query_18.has_ctrl24) + offset++; + + /* control 25 */ + if (f55->query_18.has_ctrl25) + offset++; + + /* control 26 */ + if (f55->query_18.has_ctrl26) + offset++; + + /* control 27 */ + if (f55->query_18.has_ctrl27_query20) + offset++; + + /* control 28 */ + if (f55->query_18.has_ctrl28_query21) + offset++; + + /* control 29 */ + if (f55->query_22.has_ctrl29) + offset++; + + /* control 30 */ + if (f55->query_22.has_ctrl30) + offset++; + + /* control 31 */ + if (f55->query_22.has_ctrl31) + offset++; + + /* control 32 */ + if (f55->query_22.has_ctrl32) + offset++; + + /* controls 33 34 35 36 reserved */ + + /* control 37 */ + if (f55->query_28.has_ctrl37) + offset++; + + /* control 38 */ + if (f55->query_30.has_ctrl38) + offset++; + + /* control 39 */ + if (f55->query_30.has_ctrl39) + offset++; + + /* control 40 */ + if (f55->query_30.has_ctrl40) + offset++; + + /* control 41 */ + if (f55->query_30.has_ctrl41) + offset++; + + /* control 42 */ + if (f55->query_30.has_ctrl42) + offset++; + + /* controls 43 44 */ + if (f55->query_30.has_ctrl43_ctrl44) { + f55->afe_mux_offset = offset; + offset += 2; + } + + /* controls 45 46 */ + if (f55->query_33.has_ctrl45_ctrl46) { + f55->has_force = true; + f55->force_tx_offset = offset; + f55->force_rx_offset = offset + 1; + offset += 2; + } + + return 0; +} + +static int test_f55_set_queries(void) +{ + int retval; + unsigned char offset; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->query_base_addr, + f55->query.data, + sizeof(f55->query.data)); + if (retval < 0) + return retval; + + offset = sizeof(f55->query.data); + + /* query 3 */ + if (f55->query.has_single_layer_multi_touch) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->query_base_addr + offset, + f55->query_3.data, + sizeof(f55->query_3.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 4 */ + if (f55->query_3.has_ctrl9) + offset += 1; + + /* query 5 */ + if (f55->query.has_query5) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->query_base_addr + offset, + f55->query_5.data, + sizeof(f55->query_5.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* queries 6 7 */ + if (f55->query.curve_compensation_mode == 0x3) + offset += 2; + + /* query 8 */ + if (f55->query_3.has_ctrl8) + offset += 1; + + /* query 9 */ + if (f55->query_3.has_query9) + offset += 1; + + /* queries 10 11 12 13 14 15 16 */ + if (f55->query_5.has_basis_function) + offset += 7; + + /* query 17 */ + if (f55->query_5.has_query17) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->query_base_addr + offset, + f55->query_17.data, + sizeof(f55->query_17.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 18 */ + if (f55->query_17.has_query18) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->query_base_addr + offset, + f55->query_18.data, + sizeof(f55->query_18.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 19 */ + if (f55->query_18.has_query19) + offset += 1; + + /* query 20 */ + if (f55->query_18.has_ctrl27_query20) + offset += 1; + + /* query 21 */ + if (f55->query_18.has_ctrl28_query21) + offset += 1; + + /* query 22 */ + if (f55->query_18.has_query22) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->query_base_addr + offset, + f55->query_22.data, + sizeof(f55->query_22.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 23 */ + if (f55->query_22.has_query23) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->query_base_addr + offset, + f55->query_23.data, + sizeof(f55->query_23.data)); + if (retval < 0) + return retval; + offset += 1; + + f55->amp_sensor = f55->query_23.amp_sensor_enabled; + f55->size_of_column2mux = f55->query_23.size_of_column2mux; + } + + /* queries 24 25 26 27 reserved */ + + /* query 28 */ + if (f55->query_22.has_query28) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->query_base_addr + offset, + f55->query_28.data, + sizeof(f55->query_28.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* query 29 */ + if (f55->query_28.has_query29) + offset += 1; + + /* query 30 */ + if (f55->query_28.has_query30) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->query_base_addr + offset, + f55->query_30.data, + sizeof(f55->query_30.data)); + if (retval < 0) + return retval; + offset += 1; + } + + /* queries 31 32 */ + if (f55->query_30.has_query31_query32) + offset += 2; + + /* query 33 */ + if (f55->query_30.has_query33) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->query_base_addr + offset, + f55->query_33.data, + sizeof(f55->query_33.data)); + if (retval < 0) + return retval; + offset += 1; + + f55->extended_amp = f55->query_33.has_extended_amp_pad; + f55->extended_amp_btn = f55->query_33.has_extended_amp_btn; + } + + return 0; +} + +static void test_f55_init(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + unsigned char ii; + unsigned char rx_electrodes; + unsigned char tx_electrodes; + struct f55_control_43 ctrl_43; + + retval = test_f55_set_queries(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read f55 query registers\n", + __func__); + return; + } + + if (!f55->query.has_sensor_assignment) + return; + + retval = test_f55_set_controls(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set up f55 control registers\n", + __func__); + return; + } + + tx_electrodes = f55->query.num_of_tx_electrodes; + rx_electrodes = f55->query.num_of_rx_electrodes; + + f55->tx_assignment = kzalloc(tx_electrodes, GFP_KERNEL); + f55->rx_assignment = kzalloc(rx_electrodes, GFP_KERNEL); + + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->control_base_addr + SENSOR_TX_MAPPING_OFFSET, + f55->tx_assignment, + tx_electrodes); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read f55 tx assignment\n", + __func__); + return; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->control_base_addr + SENSOR_RX_MAPPING_OFFSET, + f55->rx_assignment, + rx_electrodes); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read f55 rx assignment\n", + __func__); + return; + } + + f54->tx_assigned = 0; + for (ii = 0; ii < tx_electrodes; ii++) { + if (f55->tx_assignment[ii] != 0xff) + f54->tx_assigned++; + } + + f54->rx_assigned = 0; + for (ii = 0; ii < rx_electrodes; ii++) { + if (f55->rx_assignment[ii] != 0xff) + f54->rx_assigned++; + } + + if (f55->amp_sensor) { + f54->tx_assigned = f55->size_of_column2mux; + f54->rx_assigned /= 2; + } + + if (f55->extended_amp) { + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->control_base_addr + f55->afe_mux_offset, + ctrl_43.data, + sizeof(ctrl_43.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read f55 AFE mux sizes\n", + __func__); + return; + } + + f54->tx_assigned = ctrl_43.afe_l_mux_size + + ctrl_43.afe_r_mux_size; + + f54->swap_sensor_side = ctrl_43.swap_sensor_side; + f54->left_mux_size = ctrl_43.afe_l_mux_size; + f54->right_mux_size = ctrl_43.afe_r_mux_size; + + if (f55->query_33.has_extended_amp_btn) + f54->tx_assigned++; + } + + /* force mapping */ + if (f55->has_force) { + f55->force_tx_assignment = kzalloc(tx_electrodes, GFP_KERNEL); + f55->force_rx_assignment = kzalloc(rx_electrodes, GFP_KERNEL); + + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->control_base_addr + f55->force_tx_offset, + f55->force_tx_assignment, + tx_electrodes); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read f55 force tx assignment\n", + __func__); + return; + } + + retval = synaptics_rmi4_reg_read(rmi4_data, + f55->control_base_addr + f55->force_rx_offset, + f55->force_rx_assignment, + rx_electrodes); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read f55 force rx assignment\n", + __func__); + return; + } + + for (ii = 0; ii < tx_electrodes; ii++) { + if (f55->force_tx_assignment[ii] != 0xff) + f54->tx_assigned++; + } + + for (ii = 0; ii < rx_electrodes; ii++) { + if (f55->force_rx_assignment[ii] != 0xff) + f54->rx_assigned++; + } + } + + return; +} + +static void test_f55_set_regs(struct synaptics_rmi4_data *rmi4_data, + struct synaptics_rmi4_fn_desc *fd, + unsigned char page) +{ + f55 = kzalloc(sizeof(*f55), GFP_KERNEL); + if (!f55) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for f55\n", + __func__); + return; + } + + f55->query_base_addr = fd->query_base_addr | (page << 8); + f55->control_base_addr = fd->ctrl_base_addr | (page << 8); + f55->data_base_addr = fd->data_base_addr | (page << 8); + f55->command_base_addr = fd->cmd_base_addr | (page << 8); + + return; +} + +static int test_scan_pdt(void) +{ + int retval; + unsigned char intr_count = 0; + unsigned char page; + unsigned short addr; + bool f54found = false; + bool f55found = false; + struct synaptics_rmi4_fn_desc rmi_fd; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + + for (page = 0; page < PAGES_TO_SERVICE; page++) { + for (addr = PDT_START; addr > PDT_END; addr -= PDT_ENTRY_SIZE) { + addr |= (page << 8); + + retval = synaptics_rmi4_reg_read(rmi4_data, + addr, + (unsigned char *)&rmi_fd, + sizeof(rmi_fd)); + if (retval < 0) + return retval; + + addr &= ~(MASK_8BIT << 8); + + if (!rmi_fd.fn_number) + break; + + switch (rmi_fd.fn_number) { + case SYNAPTICS_RMI4_F54: + test_f54_set_regs(rmi4_data, + &rmi_fd, intr_count, page); + f54found = true; + break; + case SYNAPTICS_RMI4_F55: + test_f55_set_regs(rmi4_data, + &rmi_fd, page); + f55found = true; + break; + default: + break; + } + + if (f54found && f55found) + goto pdt_done; + + intr_count += rmi_fd.intr_src_count; + } + } + + if (!f54found) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to find F54\n", + __func__); + return -EINVAL; + } + +pdt_done: + return 0; +} + +static void synaptics_rmi4_test_attn(struct synaptics_rmi4_data *rmi4_data, + unsigned char intr_mask) +{ + if (!f54) + return; + + if (f54->intr_mask & intr_mask) { + pr_err("%s\n", __func__); + queue_work(f54->test_report_workqueue, &f54->test_report_work); + } + + return; +} + +static ssize_t short_test_333x(void) +{ + int retval; + const struct synaptics_dsx_board_data *bdata = + f54->rmi4_data->hw_if->board_data; + + if (!bdata || !bdata->short_test25 || !bdata->short_test26) { + retval = -EINVAL; + goto out; + } + + retval = test_sysfs_read_report_store(NULL, NULL, TEST_TYPE_25_333X, strlen(TEST_TYPE_25_333X)); + if (retval < 0) + goto out; + + retval = test_sysfs_read_report_show(NULL, NULL, f54->data); + if (retval < 0) + goto out; + + if (strncmp(bdata->short_test25, f54->data, strlen(bdata->short_test25))) { + f54->result_type = TEST_FAILED; + goto out; + } + + msleep(1000); + + retval = test_sysfs_read_report_store(NULL, NULL, TEST_TYPE_26_333X, strlen(TEST_TYPE_26_333X)); + if (retval < 0) + goto out; + + retval = test_sysfs_read_report_show(NULL, NULL, f54->data); + if (retval < 0) + goto out; + + if (strncmp(bdata->short_test26, f54->data, strlen(bdata->short_test26))) { + f54->result_type = TEST_FAILED; + goto out; + } + + f54->result_type = TEST_OK; + +out: + if (retval < 0) + f54->result_type = TEST_INVALID; + + return retval; +} + +static ssize_t short_test_4x22(void) +{ + int retval; + char buf[4]; + + retval = test_sysfs_td43xx_ee_short_store(NULL, NULL, "1", 1); + if (retval < 0) + goto out; + + msleep(100); + + retval = test_sysfs_td43xx_ee_short_show(NULL, NULL, buf); + if (retval < 0) + goto out; + + if (!strncmp(buf, "PASS", 4)) + f54->result_type = TEST_OK; + else + f54->result_type = TEST_FAILED; + +out: + if (retval < 0) + f54->result_type = TEST_INVALID; + + return retval; +} + +static ssize_t short_test_tddi_extend(void) +{ + int retval; + char buf[4]; + + retval = test_sysfs_tddi_extend_ee_short_store(NULL, NULL, "1", 1); + if (retval < 0) + goto out; + + msleep(100); + + retval = test_sysfs_tddi_extend_ee_short_show(NULL, NULL, buf); + if (retval < 0) + goto out; + + if (!strncmp(buf, "PASS", 4)) + f54->result_type = TEST_OK; + else + f54->result_type = TEST_FAILED; + +out: + if (retval < 0) + f54->result_type = TEST_INVALID; + + return retval; +} + + +static ssize_t open_test_333x(void) +{ + int retval; + int val, tx, rx, num = 0; + char *pos; + + retval = test_sysfs_read_report_store(NULL, NULL, TEST_TYPE_03, strlen(TEST_TYPE_03)); + if (retval < 0) + goto out; + + retval = test_sysfs_read_report_show(NULL, NULL, f54->data); + if (retval < 0) + goto out; + + pos = f54->data; + pos += 5; + tx = simple_strtoul(pos, NULL, 10); + pos = strnchr(pos, 16, '\n') + 1; + pos += 5; + rx = simple_strtoul(pos, NULL, 10); + pos = strnchr(pos, 16, '\n') + 1; + + while (num < (tx * rx)) { + if ((*pos == ' ') || (*pos == '\n')) + pos++; + else { + val = simple_strtol(pos, NULL, 10); + if (((val > 0) && (val < 100)) || (val < 0)) { + f54->result_type = TEST_FAILED; + goto out; + } + + while ((*pos != ' ') && (*pos != '\n')) + pos++; + num++; + } + } + + f54->result_type = TEST_OK; + +out: + if (retval < 0) + f54->result_type = TEST_INVALID; + + return retval; +} + +static ssize_t open_test_4x22(void) +{ + int retval; + char buf[4]; + + retval = test_sysfs_td43xx_amp_open_store(NULL, NULL, "1", 1); + if (retval < 0) + goto out; + + msleep(100); + + retval = test_sysfs_td43xx_amp_open_show(NULL, NULL, buf); + if (retval < 0) + goto out; + + if (!strncmp(buf, "PASS", 4)) + f54->result_type = TEST_OK; + else + f54->result_type = TEST_FAILED; + +out: + if (retval < 0) + f54->result_type = TEST_INVALID; + + return retval; +} + +static ssize_t open_test_b7(void) +{ + int retval; + char buf[4]; + + retval = test_sysfs_td4722_b7_amp_open_store(NULL, NULL, "1", 1); + if (retval < 0) + goto out; + + msleep(100); + + retval = test_sysfs_td4722_b7_amp_open_show(NULL, NULL, buf); + if (retval < 0) + goto out; + + if (!strncmp(buf, "PASS", 4)) + f54->result_type = TEST_OK; + else + f54->result_type = TEST_FAILED; + +out: + if (retval < 0) + f54->result_type = TEST_INVALID; + + return retval; +} + +static ssize_t i2c_test(void) +{ + int retval; + unsigned short addr; + unsigned char query_data[8] = {0}; + + addr = f54->rmi4_data->f01_query_base_addr + CHIP_ID_OFFSET; + + retval = synaptics_rmi4_reg_read(f54->rmi4_data, + addr, + query_data, + 8); + if (retval < 0) { + f54->result_type = TEST_FAILED; + retval = 0; + goto out; + } + + f54->result_type = TEST_OK; + +out: + if (retval < 0) + f54->result_type = TEST_INVALID; + + return retval; +} + +static int syna_selftest_open(struct inode *inode, struct file *file) +{ + f54->data = vmalloc(PAGE_SIZE); + + return 0; +} + +static ssize_t syna_selftest_read(struct file *file, char __user *buf, size_t count, loff_t *pos) +{ + char tmp[5]; + + if (*pos != 0) + return 0; + + snprintf(tmp, sizeof(f54->result_type), "%d\n", f54->result_type); + if (copy_to_user(buf, tmp, strlen(tmp))) { + return -EFAULT; + } + + *pos += strlen(tmp); + + return strlen(tmp); +} + +static ssize_t syna_selftest_write(struct file *file, const char __user *buf, size_t count, loff_t *pos) +{ + int retval; + char tmp[6]; + + if (!f54->data || count > sizeof(tmp)) { + retval = -EINVAL; + f54->result_type = TEST_INVALID; + goto out; + } + + if (copy_from_user(tmp, buf, count)) { + retval = -EFAULT; + goto out; + } + + if (!strncmp(tmp, "short", 5)) { + if (!f54->rmi4_data->chip_is_tddi) + retval = short_test_333x(); + else { + if (!f54->rmi4_data->short_test_extend) + retval = short_test_4x22(); + else + retval = short_test_tddi_extend(); + } + } else if (!strncmp(tmp, "open", 4)) { + if (!f54->rmi4_data->chip_is_tddi) + retval = open_test_333x(); + else { + if (!f54->rmi4_data->open_test_b7) + retval = open_test_4x22(); + else + retval = open_test_b7(); + } + } else if (!strncmp(tmp, "i2c", 3)) + retval = i2c_test(); + +out: + if (retval >= 0) + retval = count; + + return retval; +} + +static int syna_selftest_release(struct inode *inode, struct file *file) +{ + vfree(f54->data); + f54->data = NULL; + + return 0; +} + +static const struct file_operations syna_selftest_ops = { + .open = syna_selftest_open, + .read = syna_selftest_read, + .write = syna_selftest_write, + .release = syna_selftest_release, +}; + +static ssize_t syna_factory_param_read(struct file *file, char __user *buf, size_t count, loff_t *pos) +{ + char *buffer = NULL, *pbuf; + char **p = NULL; + int i, cnt; + int buflen; + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + struct synaptics_dsx_factory_param *factory_param = rmi4_data->factory_param; + + if (*pos != 0 || !factory_param) + return 0; + + buffer = vmalloc(PAGE_SIZE); + if (!buffer) + return -ENOMEM; + + pbuf = buffer; + i = 0; + cnt = 0; + for (p = factory_string; *p != NULL; p++) { + cnt = sprintf(pbuf, "%s:%d\n", *p, factory_param->data[i++]); + pbuf += cnt; + } + + pbuf[0] = '\0'; + if (copy_to_user(buf, buffer, strlen(buffer) + 1)) { + return -EFAULT; + } + + buflen = strlen(buffer); + *pos += buflen; + + vfree(buffer); + return buflen; +} + +static ssize_t syna_factory_param_write(struct file *file, const char __user *buf, size_t count, loff_t *pos) +{ + int retval = 0; + char **p = NULL; + char tmp[100]; + char str[100]; + int i, value = -1; + + struct synaptics_rmi4_data *rmi4_data = f54->rmi4_data; + struct synaptics_dsx_factory_param *factory_param = rmi4_data->factory_param; + + if (!factory_param) + return -EINVAL; + + if (copy_from_user(tmp, buf, count)) { + retval = -EFAULT; + goto out; + } + + sscanf(tmp, "%s %d", str, &value); + + i = 0; + for (p = factory_string; *p != NULL; p++) { + if (!strncmp(str, *p, strlen(*p))) { + factory_param->data[i] = value; + break; + } + i++; + } + +out: + if (retval >= 0) + retval = count; + + return count; +} + + +static const struct file_operations syna_factory_ops = { + .read = syna_factory_param_read, + .write = syna_factory_param_write, +}; + + +static int syna_datadump_open(struct inode *inode, struct file *file) +{ + f54->rmi4_data->dump_flags = true; + + return 0; +} + +static ssize_t syna_datadump_read(struct file *file, char __user *buf, size_t count, loff_t *pos) +{ + int retval; + int cnt = 0; + int buflen = 0; + u8 *buffer = NULL; + + if (*pos != 0) + return 0; + + if (f54->rmi4_data->disable_data_dump) + return -EINVAL; + + buffer = vmalloc(PAGE_SIZE * 2); + if (!buffer) + return -ENOMEM; + + retval = test_sysfs_read_report_store(NULL, NULL, TEST_TYPE_02, strlen(TEST_TYPE_02)); + if (retval < 0) { + snprintf(buffer, PAGE_SIZE, "data test error: start\n"); + goto out; + } + + retval = test_sysfs_read_report_show(NULL, NULL, buffer); + if (retval < 0) { + snprintf(buffer, PAGE_SIZE, "data test error: read\n"); + goto out; + } + + cnt += retval; + + retval = test_sysfs_read_report_store(NULL, NULL, TEST_TYPE_03, strlen(TEST_TYPE_03)); + if (retval < 0) { + snprintf(buffer, PAGE_SIZE, "data test error: start\n"); + goto out; + } + + retval = test_sysfs_read_report_show(NULL, NULL, buffer + cnt); + if (retval < 0) { + snprintf(buffer, PAGE_SIZE, "data test error: read\n"); + goto out; + } + + if (copy_to_user(buf, buffer, strlen(buffer))) { + retval = -EFAULT; + goto out; + } + +out: + + complete(&f54->rmi4_data->dump_completion); + buflen = strlen(buffer); + *pos += buflen; + vfree(buffer); + + if (retval < 0) + return retval; + + return buflen; +} + +static int syna_datadump_release(struct inode *inode, struct file *file) +{ + f54->rmi4_data->dump_flags = false; + + return 0; +} + +static const struct file_operations syna_datadump_ops = { + .open = syna_datadump_open, + .read = syna_datadump_read, + .release = syna_datadump_release, +}; + +static int synaptics_rmi4_test_init(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + static bool proc_already; + + if (f54) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Handle already exists\n", + __func__); + return 0; + } + + f54 = kzalloc(sizeof(*f54), GFP_KERNEL); + if (!f54) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for f54\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + f54->result_type = TEST_INVALID; + + f54->rmi4_data = rmi4_data; + + f55 = NULL; + + retval = test_scan_pdt(); + if (retval < 0) + goto exit_free_mem; + + retval = test_set_queries(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read f54 query registers\n", + __func__); + goto exit_free_mem; + } + + f54->tx_assigned = f54->query.num_of_tx_electrodes; + f54->rx_assigned = f54->query.num_of_rx_electrodes; + + retval = test_set_controls(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set up f54 control registers\n", + __func__); + goto exit_free_control; + } + + test_set_data(); + + if (f55) + test_f55_init(rmi4_data); + + if (rmi4_data->external_afe_buttons) + f54->tx_assigned++; + + retval = test_set_sysfs(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create sysfs entries\n", + __func__); + goto exit_sysfs; + } + + f54->test_report_workqueue = + create_singlethread_workqueue("test_report_workqueue"); + INIT_WORK(&f54->test_report_work, test_report_work); + + hrtimer_init(&f54->watchdog, CLOCK_MONOTONIC, HRTIMER_MODE_REL); + f54->watchdog.function = test_get_report_timeout; + INIT_WORK(&f54->timeout_work, test_timeout_work); + + INIT_WORK(&f54->resume_touch_work, test_resume_touch_work); + + mutex_init(&f54->status_mutex); + f54->status = STATUS_IDLE; + + if (!proc_already) { + proc_already = true; + proc_create("tp_selftest", 0644, NULL, &syna_selftest_ops); + proc_create("tp_data_dump", 0, NULL, &syna_datadump_ops); + proc_create("tp_factory_param", 0, NULL, &syna_factory_ops); + } + + return 0; + +exit_sysfs: + if (f55) { + kfree(f55->tx_assignment); + kfree(f55->rx_assignment); + kfree(f55->force_tx_assignment); + kfree(f55->force_rx_assignment); + } + +exit_free_control: + test_free_control_mem(); + +exit_free_mem: + kfree(f55); + f55 = NULL; + kfree(f54); + f54 = NULL; + +exit: + return retval; +} + +static void synaptics_rmi4_test_remove(struct synaptics_rmi4_data *rmi4_data) +{ + if (!f54) + goto exit; + + hrtimer_cancel(&f54->watchdog); + + cancel_work_sync(&f54->test_report_work); + flush_workqueue(f54->test_report_workqueue); + destroy_workqueue(f54->test_report_workqueue); + + cancel_work_sync(&f54->resume_touch_work); + + test_remove_sysfs(); + + if (f55) { + kfree(f55->tx_assignment); + kfree(f55->rx_assignment); + kfree(f55->force_tx_assignment); + kfree(f55->force_rx_assignment); + } + + test_free_control_mem(); + + if (f54->data_buffer_size) + kfree(f54->report_data); + + kfree(f55); + f55 = NULL; + + kfree(f54); + f54 = NULL; + +exit: + complete(&test_remove_complete_force); + + return; +} + +static void synaptics_rmi4_test_reset(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + + if (!f54) { + synaptics_rmi4_test_init(rmi4_data); + return; + } + + if (f55) { + kfree(f55->tx_assignment); + kfree(f55->rx_assignment); + kfree(f55->force_tx_assignment); + kfree(f55->force_rx_assignment); + } + + test_free_control_mem(); + + kfree(f55); + f55 = NULL; + + retval = test_scan_pdt(); + if (retval < 0) + goto exit_free_mem; + + retval = test_set_queries(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to read f54 query registers\n", + __func__); + goto exit_free_mem; + } + + f54->tx_assigned = f54->query.num_of_tx_electrodes; + f54->rx_assigned = f54->query.num_of_rx_electrodes; + + retval = test_set_controls(); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to set up f54 control registers\n", + __func__); + goto exit_free_control; + } + + test_set_data(); + + if (f55) + test_f55_init(rmi4_data); + + if (rmi4_data->external_afe_buttons) + f54->tx_assigned++; + + f54->status = STATUS_IDLE; + + return; + +exit_free_control: + test_free_control_mem(); + +exit_free_mem: + hrtimer_cancel(&f54->watchdog); + + cancel_work_sync(&f54->test_report_work); + flush_workqueue(f54->test_report_workqueue); + destroy_workqueue(f54->test_report_workqueue); + + test_remove_sysfs(); + + if (f54->data_buffer_size) + kfree(f54->report_data); + + kfree(f55); + f55 = NULL; + + kfree(f54); + f54 = NULL; + + return; +} + +static struct synaptics_rmi4_exp_fn test_module = { + .fn_type = RMI_TEST_REPORTING, + .init = synaptics_rmi4_test_init, + .remove = synaptics_rmi4_test_remove, + .reset = synaptics_rmi4_test_reset, + .reinit = NULL, + .early_suspend = NULL, + .suspend = NULL, + .resume = NULL, + .late_resume = NULL, + .attn = synaptics_rmi4_test_attn, +}; + +static int __init rmi4_test_module_init(void) +{ + synaptics_rmi4_new_function_force(&test_module, true); + + return 0; +} + +static void __exit rmi4_test_module_exit(void) +{ + synaptics_rmi4_new_function_force(&test_module, false); + + wait_for_completion(&test_remove_complete_force); + + return; +} + +module_init(rmi4_test_module_init); +module_exit(rmi4_test_module_exit); + +MODULE_AUTHOR("Synaptics, Inc."); +MODULE_DESCRIPTION("Synaptics DSX Test Reporting Module"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_video.c b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_video.c new file mode 100644 index 000000000000..d0762544ffb2 --- /dev/null +++ b/drivers/input/touchscreen/synaptics_dsx_force/synaptics_dsx_video.c @@ -0,0 +1,416 @@ +/* + * Synaptics DSX touchscreen driver + * + * Copyright (C) 2012-2015 Synaptics Incorporated. All rights reserved. + * + * Copyright (C) 2012 Alexandra Chin <alexandra.chin@tw.synaptics.com> + * Copyright (C) 2012 Scott Lin <scott.lin@tw.synaptics.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND SYNAPTICS + * EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, INCLUDING ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, + * AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS. + * IN NO EVENT SHALL SYNAPTICS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION + * WITH THE USE OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED + * AND BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF COMPETENT JURISDICTION DOES + * NOT PERMIT THE DISCLAIMER OF DIRECT DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' + * TOTAL CUMULATIVE LIABILITY TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. + * DOLLARS. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/delay.h> +#include <linux/input.h> +#include <linux/platform_device.h> +#include <linux/input/synaptics_dsx.h> +#include "synaptics_dsx_core.h" + +#define SYSFS_FOLDER_NAME "video" + +/* +#define RMI_DCS_SUSPEND_RESUME +*/ + +static ssize_t video_sysfs_dcs_write_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static ssize_t video_sysfs_param_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count); + +static int video_send_dcs_command(unsigned char command_opcode); + +struct f38_command { + union { + struct { + unsigned char command_opcode; + unsigned char register_access:1; + unsigned char gamma_page:1; + unsigned char f38_control1_b2__7:6; + unsigned char parameter_field_1; + unsigned char parameter_field_2; + unsigned char parameter_field_3; + unsigned char parameter_field_4; + unsigned char send_to_dcs:1; + unsigned char f38_command6_b1__7:7; + } __packed; + unsigned char data[7]; + }; +}; + +struct synaptics_rmi4_video_handle { + unsigned char param; + unsigned short query_base_addr; + unsigned short control_base_addr; + unsigned short data_base_addr; + unsigned short command_base_addr; + struct synaptics_rmi4_data *rmi4_data; + struct kobject *sysfs_dir; +}; + +#ifdef RMI_DCS_SUSPEND_RESUME +struct dcs_command { + unsigned char command; + unsigned int wait_time; +}; + +static struct dcs_command suspend_sequence[] = { + { + .command = 0x28, + .wait_time = 200, + }, + { + .command = 0x10, + .wait_time = 200, + }, +}; + +static struct dcs_command resume_sequence[] = { + { + .command = 0x11, + .wait_time = 200, + }, + { + .command = 0x29, + .wait_time = 200, + }, +}; +#endif + +static struct device_attribute attrs[] = { + __ATTR(dcs_write, S_IWUGO, + synaptics_rmi4_show_error, + video_sysfs_dcs_write_store), + __ATTR(param, S_IWUGO, + synaptics_rmi4_show_error, + video_sysfs_param_store), +}; + +static struct synaptics_rmi4_video_handle *video; + +DECLARE_COMPLETION(video_remove_complete); + +static ssize_t video_sysfs_dcs_write_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int retval; + unsigned int input; + + if (sscanf(buf, "%x", &input) != 1) + return -EINVAL; + + retval = video_send_dcs_command((unsigned char)input); + if (retval < 0) + return retval; + + return count; +} + +static ssize_t video_sysfs_param_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + unsigned int input; + + if (sscanf(buf, "%x", &input) != 1) + return -EINVAL; + + video->param = (unsigned char)input; + + return count; +} + +static int video_send_dcs_command(unsigned char command_opcode) +{ + int retval; + struct f38_command command; + struct synaptics_rmi4_data *rmi4_data = video->rmi4_data; + + memset(&command, 0x00, sizeof(command)); + + command.command_opcode = command_opcode; + command.parameter_field_1 = video->param; + command.send_to_dcs = 1; + + video->param = 0; + + retval = synaptics_rmi4_reg_write(rmi4_data, + video->command_base_addr, + command.data, + sizeof(command.data)); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to send DCS command\n", + __func__); + return retval; + } + + return 0; +} + +static int video_scan_pdt(void) +{ + int retval; + unsigned char page; + unsigned short addr; + bool f38_found = false; + struct synaptics_rmi4_fn_desc rmi_fd; + struct synaptics_rmi4_data *rmi4_data = video->rmi4_data; + + for (page = 0; page < PAGES_TO_SERVICE; page++) { + for (addr = PDT_START; addr > PDT_END; addr -= PDT_ENTRY_SIZE) { + addr |= (page << 8); + + retval = synaptics_rmi4_reg_read(rmi4_data, + addr, + (unsigned char *)&rmi_fd, + sizeof(rmi_fd)); + if (retval < 0) + return retval; + + addr &= ~(MASK_8BIT << 8); + + if (!rmi_fd.fn_number) + break; + + if (rmi_fd.fn_number == SYNAPTICS_RMI4_F38) { + f38_found = true; + goto f38_found; + } + } + } + + if (!f38_found) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to find F38\n", + __func__); + return -EINVAL; + } + +f38_found: + video->query_base_addr = rmi_fd.query_base_addr | (page << 8); + video->control_base_addr = rmi_fd.ctrl_base_addr | (page << 8); + video->data_base_addr = rmi_fd.data_base_addr | (page << 8); + video->command_base_addr = rmi_fd.cmd_base_addr | (page << 8); + + return 0; +} + +static int synaptics_rmi4_video_init(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + unsigned char attr_count; + + if (video) { + dev_dbg(rmi4_data->pdev->dev.parent, + "%s: Handle already exists\n", + __func__); + return 0; + } + + video = kzalloc(sizeof(*video), GFP_KERNEL); + if (!video) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to alloc mem for video\n", + __func__); + retval = -ENOMEM; + goto exit; + } + + video->rmi4_data = rmi4_data; + + retval = video_scan_pdt(); + if (retval < 0) { + retval = 0; + goto exit_scan_pdt; + } + + video->sysfs_dir = kobject_create_and_add(SYSFS_FOLDER_NAME, + &rmi4_data->input_dev->dev.kobj); + if (!video->sysfs_dir) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create sysfs directory\n", + __func__); + retval = -ENODEV; + goto exit_sysfs_dir; + } + + for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) { + retval = sysfs_create_file(video->sysfs_dir, + &attrs[attr_count].attr); + if (retval < 0) { + dev_err(rmi4_data->pdev->dev.parent, + "%s: Failed to create sysfs attributes\n", + __func__); + retval = -ENODEV; + goto exit_sysfs_attrs; + } + } + + return 0; + +exit_sysfs_attrs: + for (attr_count--; attr_count >= 0; attr_count--) + sysfs_remove_file(video->sysfs_dir, &attrs[attr_count].attr); + + kobject_put(video->sysfs_dir); + +exit_sysfs_dir: +exit_scan_pdt: + kfree(video); + video = NULL; + +exit: + return retval; +} + +static void synaptics_rmi4_video_remove(struct synaptics_rmi4_data *rmi4_data) +{ + unsigned char attr_count; + + if (!video) + goto exit; + + for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) + sysfs_remove_file(video->sysfs_dir, &attrs[attr_count].attr); + + kobject_put(video->sysfs_dir); + + kfree(video); + video = NULL; + +exit: + complete(&video_remove_complete); + + return; +} + +static void synaptics_rmi4_video_reset(struct synaptics_rmi4_data *rmi4_data) +{ + if (!video) + synaptics_rmi4_video_init(rmi4_data); + + return; +} + +#ifdef RMI_DCS_SUSPEND_RESUME +static void synaptics_rmi4_video_suspend(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + unsigned char ii; + unsigned char command; + unsigned char num_of_cmds; + + if (!video) + return; + + num_of_cmds = ARRAY_SIZE(suspend_sequence); + + for (ii = 0; ii < num_of_cmds; ii++) { + command = suspend_sequence[ii].command; + retval = video_send_dcs_command(command); + if (retval < 0) + return; + msleep(suspend_sequence[ii].wait_time); + } + + return; +} + +static void synaptics_rmi4_video_resume(struct synaptics_rmi4_data *rmi4_data) +{ + int retval; + unsigned char ii; + unsigned char command; + unsigned char num_of_cmds; + + if (!video) + return; + + num_of_cmds = ARRAY_SIZE(resume_sequence); + + for (ii = 0; ii < num_of_cmds; ii++) { + command = resume_sequence[ii].command; + retval = video_send_dcs_command(command); + if (retval < 0) + return; + msleep(resume_sequence[ii].wait_time); + } + + return; +} +#endif + +static struct synaptics_rmi4_exp_fn video_module = { + .fn_type = RMI_VIDEO, + .init = synaptics_rmi4_video_init, + .remove = synaptics_rmi4_video_remove, + .reset = synaptics_rmi4_video_reset, + .reinit = NULL, + .early_suspend = NULL, +#ifdef RMI_DCS_SUSPEND_RESUME + .suspend = synaptics_rmi4_video_suspend, + .resume = synaptics_rmi4_video_resume, +#else + .suspend = NULL, + .resume = NULL, +#endif + .late_resume = NULL, + .attn = NULL, +}; + +static int __init rmi4_video_module_init(void) +{ + synaptics_rmi4_new_function_force(&video_module, true); + + return 0; +} + +static void __exit rmi4_video_module_exit(void) +{ + synaptics_rmi4_new_function_force(&video_module, false); + + wait_for_completion(&video_remove_complete); + + return; +} + +module_init(rmi4_video_module_init); +module_exit(rmi4_video_module_exit); + +MODULE_AUTHOR("Synaptics, Inc."); +MODULE_DESCRIPTION("Synaptics DSX Video Module"); +MODULE_LICENSE("GPL v2"); diff --git a/firmware/Makefile b/firmware/Makefile index 05ac8f0a9246..691852793e89 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -104,6 +104,8 @@ fw-shipped-$(CONFIG_USB_EMI62) += emi62/loader.fw emi62/bitstream.fw \ fw-shipped-$(CONFIG_USB_KAWETH) += kaweth/new_code.bin kaweth/trigger_code.bin \ kaweth/new_code_fix.bin \ kaweth/trigger_code_fix.bin +fw-shipped-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FORCE) += synaptics_jdi_3331_c8.fw \ + synaptics_jdi_3330_c8.fw synaptics_sharp_4322_c8.fw ifdef CONFIG_FIRMWARE_IN_KERNEL fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_MPR) += keyspan/mpr.fw fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA18X) += keyspan/usa18x.fw diff --git a/firmware/synaptics_jdi_3330_c8.fw.ihex b/firmware/synaptics_jdi_3330_c8.fw.ihex new file mode 100644 index 000000000000..830c8710a234 --- /dev/null +++ b/firmware/synaptics_jdi_3330_c8.fw.ihex @@ -0,0 +1,8583 @@ +:1000000079C1997C00000010000000001000000081 +:100010003A3A53BA0000000000000000000000005F +:10002000000000000000000024000000300000007C +:1000300060000000B0000000D0080000F0100000D8 +:1000400090010200C0010200F00102002002020043 +:100050000018020000000000000000000000000086 +:100060002853AEE00D00000000000000000000007A +:1000700000000000000000002200000080000000DE +:10008000020D0100E9D829004453352052322E32A6 +:10009000302E3200000000005333333330000000B4 +:1000A0000000000000000000000000000000000050 +:1000B0006F83DF060F00000000000000000000005A +:1000C000000000000000000000080000D000000058 +:1000D0000000010000020000240502000100FF01F1 +:1000E000070603008000000227020600800080024D +:1000F0002F100700801C0003641B08008000801F75 +:10010000671A0500200000400F0004006000204036 +:1001100003000000000000000000000000000000DC +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C000000000000000000000000000231D294976 +:1008D000A1AA435513000000000000000000000022 +:1008E000000000000000000000080000F008000008 +:1008F00000000000000000000000000000000000F8 +:100900000000000000000000000000000C7403075D +:1009100000170107FA0E37047F078340FA410303EB +:1009200021211E11011E0509FB2C091E3EFF33006B +:1009300048E86AEB8950E6C405080A10570F0A40D8 +:1009400001010107010128C01E64262680800000E5 +:1009500045450140463CFF00C800C8006F03B7068C +:10096000649600000000250A660046000000370477 +:1009700000007F072E00010A04580204081E02FF2F +:1009800000C800FF000100003200140014006400E1 +:100990006400100010007D007D004066581BFFFFC2 +:1009A000FFFFFFFFFFFFFFFFFFFFFFFFFFFF010054 +:1009B0000000000000000000000000000000000D2A +:1009C0000700180180031B0000FF2F01FFFFBF96E7 +:1009D000C0E80300FF8080800000000014000000D9 +:1009E0006401371F0C0C0C0C00310DFFFF0065017A +:1009F0000100060601010065010101010303270052 +:100A00001400000002000128032600140000030265 +:100A100000012C822300140000040200012D022199 +:100A2000001400000805000228011D001400000D3C +:100A300003000125801400140000000500032C862B +:100A40005100140000010200012886490014000032 +:100A5000050200012B8540001400000B0500022850 +:100A600084360014000014030001278327001400BB +:100A7000002C090002258221001400003A0B00021C +:100A800023060505050505050505050505050505F7 +:100A9000050505050505050505050505050505000B +:100AA0000000001C001C1C1C1C1C1C1C1C1C1C1CF6 +:100AB0001C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C76 +:100AC0001C090909000000000000000000000000EF +:100AD0000000000000000000000000000000000016 +:100AE0000000000000191900000503030203071F9E +:100AF0000003003C00146401013D3C3C3D01043A0C +:100B000000010002000009060000000702000000CA +:100B100000050500000303001B39060000373700FD +:100B2000050201100C0A0003481E001E00403C8014 +:100B30000314640301FF020500070107100000070A +:100B4000050007010F190000070101390006000028 +:100B500014140005040023010001033B01102020B0 +:100B60004000000000FF0100000001000002030D32 +:100B700033330009AAAAFF010A191560283C0906A7 +:100B80000000000020F977331010001E1818181804 +:100B900018171717171717171717171717171717E4 +:100BA0001717171717181817180E06171710001E03 +:100BB000191C1F1A181617130D12110E0F10090BFE +:100BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF191B +:100BD0000E0E0E0E0D0D0D0C0C0C0D0D0D0D0D0D44 +:100BE0000E0C0C0C0D0E0D0E0C0D0D0E0F0000005A +:100BF00000170B0B0B0B0A0B0B0B0B0B0B0B0C0C43 +:100C00000C080000000000000000000000000000D0 +:100C1000000100060023000C3333000309FF80FFAE +:100C200080FF80FF8001013A077D10010500070366 +:100C30001F1F000007050007031F1F000007010119 +:100C4000330006010016140005090000AA09FFFF81 +:100C5000FF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FC4 +:100C60001F1F1F1F1F1F1F1F1F1F1F1F1F1F1F00B3 +:100C70000000001C1C1C1C1C1C1C1C1C1C1C1C1C08 +:100C80001C1C1C1C000000000000000000000000F4 +:100C9000000000FF000403003E003F01FFFFFFFFD4 +:100CA00058585869990D04881010101000212022FE +:100CB0002505032B2C2423263902062A2932342722 +:100CC000282F38353631302E2D33370001FFFF0005 +:100CD0000102030405060708090A0B0C0D0E0F108C +:100CE0003E3FFFFFFFFFFFFFFFFFFFFFFFFFFF0094 +:100CF000100010CD14CD1480808080808080808092 +:100D000080808080808080808080808080808080E3 +:100D100080808080808080808080808080808080D3 +:100D200080808080808080808080808080808080C3 +:100D3000808080808080808080660E660E660E6671 +:100D40000E0E0E01000000820000010205050101E7 +:100D50000C0C0103000A1010030702020703010133 +:100D600000333300000002000037041910B264237E +:100D7000000037040014B2642300007F071E10B285 +:100D8000642300007F071E10B264230608000F0AC8 +:100D90001E4B0000000000000000000000000000EA +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E000000000000000000000000000B48B3893F6 +:1010F0005A1F4CFB1200000000000000000000001E +:10110000000000000000000000C8010010110000F5 +:101110008AED6A0672E110F3E6D13C02BA951EBA76 +:10112000503B411698EBB3B2C588E5F1EA6BAE1FB0 +:101130002251EB3918C16A5DF4F460516E14D698EF +:101140009A194705ADD5E20B4ED607C44A480AE7BF +:10115000F8D6B429DA2D173AF330CA74DAA1A71EEB +:101160002B82C897A47C66B666CCF18C759214CBA2 +:101170009AF2A222540818CCBE34A379E2891169EC +:10118000B086ECB60071A350DDB57D25859DC41AEF +:1011900008642D1915ECD0DB2C7CE99948BCFB7454 +:1011A000F59BFA83CB1FC15FC84235627ECF4C48A6 +:1011B00099ECC4C1E24A7305B1B7F91CA46ABE74C4 +:1011C00097C55F163CAE7CB30DF158A349748D11E1 +:1011D000178E98EC4482BAE407AF593E1152F5F4E9 +:1011E000C397E5F4A0A7C37A036CCAE08BA3562982 +:1011F0008ACEE5ED6283A60E3CBDDE377BEAF6299A +:10120000E1C5E1B4025553DEEE1801FA8463DD64F2 +:101210004F53A36AC61BFEFE024392B304463C280A +:101220009E3C6375095F2C4F392E3A550D69BB3BC7 +:101230003DD5CC32A10729E695D235BAA047A444C2 +:10124000AC7DDF700CFC0D55FB60AD96B37F8CA0C0 +:101250004016AE3B0C372049243CB2844DB0BBCF86 +:10126000075B26F9365966E1991F9EEC8B6636308E +:1012700006F755274768C1F0958DF7943DB8974F0D +:101280006BAFE7DE7F28FDA76C5BB1613E062E4B9E +:10129000F6B87DD97616707E85B618A9D4F2C1BC91 +:1012A00067C0D535763DD5DB6875C4D661E8E7D231 +:1012B000DCA35E492B49F1080FC9C5E5ECD5EE4327 +:1012C000236D5363ED8856852825B3E7ADC93B09E7 +:1012D000948C597C1A8D112CEB054F1550C1D111EE +:1012E0003E7931F7117E2024C0FEC5FEFFAA41D011 +:1012F0009C5931C2324331B7C09D82C9A44B2C40A6 +:101300003A90A635184FB74E08B3970D495574F665 +:101310001DC1872494A816BE594C5923F6457584DF +:101320004650FFA97CA21A23677C187BF3FDED08C9 +:1013300008B52791B166E5C88A78CFA4AE31D867E1 +:101340002FEE1A1A7B29E542F3BF92810EA0757920 +:10135000E79E9E514A26251B575A956ECDF0D0EA3E +:10136000939A7856DF1001A645A646DE36FE2292F5 +:1013700026F04B3A3E863B223C6C9CBCE607B51FF0 +:10138000EFC5D9B234F2309C857B587C2971E5E8F1 +:1013900082D9987F71D0CA295D25BE7B775B2D7F6E +:1013A0006EED4ADA57ACF3128A8B9DF78E20C69EFB +:1013B0004A56CB7214D933B9EEA398532E237AAE82 +:1013C000EA1642E05CAFD91FF9816F31A775CA8573 +:1013D000EED589C28D2A736096E0588F573203F19B +:1013E0008F8F58590A492E3C78A5A9E9138D7DCCD9 +:1013F0005EA3C536D22C141F98FDECA369DF0BFD4C +:10140000CEBAC087DCDC158DF2C47F263D19E3DA45 +:10141000C2A928A3C60A3CC19B4E15B281BAF6F8F0 +:10142000AAA7CDC21FA59EC7760BA96053A45BBD1A +:10143000C5F49D2FD1456476D2C9D99D95C206E3E6 +:101440008048BDD25EF8CD45C4D3B98352299838BF +:101450007E2EE94CABF9CC91863105413E6FD459D3 +:101460000239544C7D3774965A3D531CA77055175A +:101470001F32F02D185834F72C996179058DF8DF5B +:10148000890402E12F828C2B91E16CD1C6E8E745FB +:10149000F8B21BFA49A994AFAB8BF0381CA4C01565 +:1014A0002B5563A5E0DF62EE6AE7BC48A12E9CA144 +:1014B00029809599D7584598F22F6F215E17F862C9 +:1014C0003F978939613072F4E83C2A67AA94E9822F +:1014D0000EF7165815FBB16DA95615B4262312B692 +:1014E0003784AD08641635CE40450007D14EBA6644 +:1014F00028CE99699F701F22F9EA61EB46DE1560DC +:10150000870A0C01AC3FBB8D0E9277ACF32F2D08F0 +:101510000072B0DDA8FA6BB0F0635B5BEAD5C6FF82 +:1015200088E3D2CB212451CCB577EF3BA5B26F4CE9 +:10153000F002B810318B425E10C0BDA7C63E51F616 +:10154000777C50BAC910D0B59EBA1051671AC0AF97 +:10155000745B187687138AFC6AAB89642BB1DEEE64 +:101560006E1ED8FE7B44D97A203AEBABAD4CAEDF91 +:101570001DBADAE9BC57449B61455D5405D92EABD1 +:10158000D247B81809E52E9E3BCFB2E2B24220E026 +:101590004D43C17FF413F186992BB3D3CDD50A7E89 +:1015A000F0323D6D3FA43E604F4646F7F297307EE5 +:1015B00017715ED71D3FFABB983DF75293A9E3F22E +:1015C000A3FC7F632BE1DA0B270893544DFE46B151 +:1015D000D83A9D8F224448DFF8614F959C87A3A598 +:1015E00064992DC71138AF2EBD597481FCFCA281BE +:1015F000E22F11F526E3C0B9DEDA7D5979B5D73A85 +:10160000B3F12035A3D8DB267E6F1D154112CA67C2 +:10161000A5AE28D2C7D8DA21DA2537860405090C09 +:101620008E20E15EA5B139BC6F230D3CDEBFBD91BC +:101630004E81485E1CE13D7282C70D2BE88E55C37A +:10164000B1643CB864CBF4CDF50F9D60A412B23EFA +:101650000D1085E7CDCC66AF7E9928A2B66B597781 +:10166000896EBD07D7659C698CEE03F6640F628FA7 +:101670009ED425918169B9F9FAD01AC1D905D5C28C +:101680009CAFEECF65CC0306E3C875EFC57B6B0559 +:101690005950D4B379FA4F8040A8FF00CDFBA6196A +:1016A0007B0C00697B274428E60616D15AA219BE96 +:1016B00028CAC77B192CBD4F13C81CC3D342D944B9 +:1016C000CD219A773A70D6E18503919BE69C609C88 +:1016D0006D6A55782B117853942A90C59C59738E56 +:1016E000DFBAEEC0237247C85A8E95FE1AC829B2D7 +:1016F0001B4DBD12A3237EC7C701F9F94231B92F93 +:1017000095FFA5886F126C901C9DC67E43791B4483 +:10171000ABD6226F206C36066C8C5B98EADD6C15BC +:10172000C50AB6AF81ACE86E02D3C90636CF7CBC21 +:10173000CD31BAE26A181C5721AFCDA333CCC3ED2B +:10174000ACF2FEAC97A2931316872928F4949A8FD3 +:101750006635BB061A2EDB7185CA256FE66293706B +:1017600049038B8A0B041F13B8A63232A2A519B203 +:10177000A9310D8470CD546B70157D9958799948B5 +:101780009A4BD2D4532994333F6268D1AFDAAD4D2E +:10179000101B18BCF9B05B44ED8C967DB15C2B310D +:1017A000F1D7D0898CA4DF9ED1BB5A78E3624AF886 +:1017B000EAB8E565D606255B37C38F08F1EAD2653E +:1017C000914D00D5FD6E52AA9595B73C749DF4D607 +:1017D000AEDF1FE826E847CECEF743034CE819F208 +:1017E000B17D4BF9B38E039ADC7E7DCB8E40A2F6A1 +:1017F000B2719D727B6B882C0A58BAA43D4DE77379 +:10180000FD3337F56534FF38209533E2D8B2095BF4 +:101810001C8FF075D025F7BDE0B1BB914FAA6826AB +:1018200007FC9CF029C10675B5B7B72AF6F950B583 +:10183000DD09E426D7820740DFB19EB9668E8D7E32 +:10184000E2B2145B81A59A0DED65DAF16D5198064F +:10185000484805BA6E0C77B514A07AC16D073BBF36 +:101860007930459759058DC17371413820D8B851E9 +:1018700048A86ABA90F8B04FF40C76E5739796745E +:10188000E889B71CBE8F937C842AFC1F8D570A679A +:10189000964E1ABDC943289B7F4CBDC4A14FFE4D37 +:1018A0003EFD07CBAB9FE2A78D7B4C7B95F2462C90 +:1018B000F711CA726FE8C905885E34DB13872CA85C +:1018C000F19FA332FE2E8622242807515CA8CC0269 +:1018D00077E6674DC59BEB22B26CE0918BF3A7D105 +:1018E0005CC934969EDEE0D8C3EF16ED569E5B11C0 +:1018F000A38C129E9C6CFB6188C469A94F0C831059 +:10190000519D9E469FA524C3B04547A90F855E20E3 +:10191000348CBDEB96867E922892F09FCFBD2CB082 +:101920002C29BF4FC228E46C39E6373EE92A49A783 +:10193000512B1C09C0B857AF8C0E7FA86AB4371D55 +:10194000C18932ECEB8C84A1071DA78CCB850815CF +:10195000B5A2E55F0E3D2BD7A53F65DDF797B11921 +:1019600077C52FA9AABA3714F9565EF0F7C94B5DAF +:10197000819A6F24014990991F609CC59EC68D0075 +:101980006CD4CD29EA95AAB3346B807E5B91453047 +:10199000F4A4E00D2F2934C70467DCFB88C191C192 +:1019A000EF20D1D3A4CACCF3876C066F8042D2CB90 +:1019B000476DDCFEA0F7B311871F4634EC8AAB5DA0 +:1019C00031A5E48D7D9F2B23BDDA977C0DB4754541 +:1019D000F47B19E67C9D530427EA028894B9E85504 +:1019E00075AA42B14936E5E622125BE7619346D813 +:1019F00053183B00161BACDD266303167B54812471 +:101A0000A8A3F9339B116FC0CF6204AE398E755114 +:101A1000B3C827B4A20604C4F43251A000A24AC637 +:101A20006EE6E5700BE12131845242061A7DBCABB3 +:101A30003DCD3E0657A636F554DD8DD863FC36B74E +:101A4000CC98DAD7F3BED53325F038867D1AAD1998 +:101A50009387E68129F9BD2439A04FF11ABFB7A8B1 +:101A6000874C94AA9F631C9F394229490348334AF3 +:101A7000B903AA9C1216DB0EC8E589FAD9C18B9569 +:101A8000B449C43CFD1C8D89992D7E4AC8E16D96F0 +:101A90005AA91E9501B9D638E7A52BBDE3EA7DE426 +:101AA0002070E46C8F41CC6A07645A332C4B0C24B1 +:101AB0009C90E70EB748978C7BE1EFCCC6E4BD273E +:101AC000ABDD03C5B9876AD1576C45E9AD293964E7 +:101AD000071D8F3381214920C1295322CBCE25599F +:101AE0007DEA98EF2C0B35AC4A9D709C8074CCA19C +:101AF0005A91A2B18774B01963F8C1183DD91CDEA0 +:101B00005630CBE07D4CF285AA32B33D8230E504FD +:101B1000666069DB5084F83ECAF953FBBEC8BF4A11 +:101B200052EBD2284DD2BE209972D8AB1A1EAA9180 +:101B30003BEBD1E326C368CE66E3A54246548D0154 +:101B4000BA1F5BE51E2B473A6632206F3D1955B030 +:101B5000F2EF6C25C32A8D92C61F434356F61E8CA6 +:101B60002CB42280287CE2D2A8513B979DBBCAD9D5 +:101B7000776991F83DDA5006F04BCC741C7D811AE0 +:101B8000CB4053A22B3505AB0843833A5235777EC1 +:101B9000DDFBF6666D79EE661EF62EBE48D38E1E10 +:101BA0007A50FF0115C1AFD6175079A665C641D846 +:101BB0001B25C931B35A6E08CAC636D22DD67293C8 +:101BC000E4DCABAEE9CF7E4E5C789C66BB90C9206E +:101BD000FE0D449BD0ADDAB316216B6A5D48F890D8 +:101BE000D84C5D37D6392E8BB62E64827D5D83C589 +:101BF0000CAADECB2040FEBA745F9684D11C83D839 +:101C0000952E8BC4015F5B82C8D3995820EA53A3F9 +:101C1000318B41712676D1714FE0EE81F6764473B7 +:101C2000223CA90F555AB43B41EF77BBA69E30D258 +:101C30001B22DBDB847FBFB6D71FFA63E62F09CFF9 +:101C40006829D7961E64387785A923D6C7C8D724B4 +:101C5000773A2AE51B6AFD22CDE435A0E65E206CCA +:101C6000641B6B147FAFACABA7DCE6A0B69CB46181 +:101C700066309CF4A861253102B02FE055FBA533F6 +:101C80000F2E6960275C3A2AA3099A325B214978B2 +:101C90000DFEA5A9F0C3294B582B47461AAD04C623 +:101CA000EB83720E6440AF0D09805672EDA5EEF025 +:101CB0000B41E9DAFDFD21F36C2693EC33F7E636B0 +:101CC0000CB4E5CDC11674BB667C0773912B557BB4 +:101CD0000879868422CA0E6BDEE0039B5A84A5A68F +:101CE0001BF3C365D851DED5748B6BC4EBB7E7F932 +:101CF000E30345993B84328DA11426DF7F29993275 +:101D0000DFE9A03AF669B24A64629FC1293C7907CB +:101D1000679C81C057FAC65A0F6E590599283A0A2E +:101D2000D9A532E1E241E28957D93A0D2BB2B8E1A7 +:101D3000230FA01475A35B248133DCEC81601E7932 +:101D4000E298F983AB09F55658C59AF278FEBE5E63 +:101D500080602C789CCD65E1832D3F29CAA28C61DF +:101D6000962564AFB501C1EB5B71E2B67124093E03 +:101D700054F922364DCCE8FD7F33BF7E5DD6D6BC0C +:101D800012F1A93269799A94FB7CEA09F5197A5B18 +:101D9000F574654E58AE7AF7B9D458423AFE95DEDE +:101DA000B8889FC7B3E4CC020749BB7579A18A24E0 +:101DB0003BA70AB20875DCFB4ABA5ACB6FE59572AD +:101DC000BFE3DE69F1B5AA421D648FA2F0BEFC53E9 +:101DD0006018DB63A23DF1576355281CC0CBD01BB4 +:101DE000140DC0989144C8D8CDE78549887C7954B2 +:101DF00099F853618B889C034384476830052A0710 +:101E0000536AFA4DFE6A9E619639435403B8886955 +:101E100064565F488F3A5595653121DA745B3FDE31 +:101E20002A6ECCD48F787AF3A64D1D2C3617F20B80 +:101E300051D9F3E74F65AAC39E0813AB671252DA74 +:101E400078FC51EB10E675B851A6F66C8379A023A7 +:101E500019A440E5BB38626BE5C899A30EA6F0450E +:101E6000BB6121E62621F75586571ACEE947F75F71 +:101E7000F1D86E79044F10A8B040417D24711DE166 +:101E80000AEC59D80B8E052C6C8EFDFB0C53B94413 +:101E90004533B68E4619E0A232C5F88B4E5CFAE99E +:101EA0008C44F2512DEC164723C5BF871490C9010D +:101EB0003B98B8CE9AFDD0DF9AC8A8E114DC21F592 +:101EC000B4BBC8E317C21A7CB95BD5548EBF651E7C +:101ED0007DFD7B54DAD1B15FA99952484DB85FCCF2 +:101EE000BBF582221B1753C30EB1E2CD6850AF2F52 +:101EF0005F19A0545149F0AEA48D487C2CD51E2A00 +:101F000038A1E47503E3BD948C077421ABBE23A70D +:101F100020D87ACBED08599BB6326268B6C637A98D +:101F2000DF9A4AE4F28AACA288D91C615D54FA6D4A +:101F30006CA9622F4518C9E50B8C78E12FBD2103F0 +:101F4000D2354391E535FCFB5967776274AC315962 +:101F50005AA6CE727A8E0725CD29DC163B526F0128 +:101F600031B13CF7E6F5E4BAFA285941465C0B1367 +:101F7000AB72741535138EB643F8DDAEBAB8BA68D5 +:101F80001A1040782CAC8972975AC03187AE390646 +:101F9000D87F50D5A96286CEED8F119EA0186CAE69 +:101FA0009501BA0A6B917019BF037BDB8FF25C9EBF +:101FB000965F7BF20C2E55C8D6DA2FF8485BBC52E0 +:101FC000170968A3634CBBA70EC4CC5FF63EF6FAB4 +:101FD00067BF4042EBE9C7C04A1E16AED0F02B5196 +:101FE000CFBA31EF91F98093C42742A42C0AE3477A +:101FF00084D5424DE347868BA29DC858046361B5E2 +:10200000CF64A83E33AD91119A355CB50B646BB5C6 +:10201000BFA51A60754741245A882BD53B52F6302C +:10202000F4EBBC4BDDEC6C8EC2068DFB708F7075D3 +:10203000A9F0D9684711C9BB5635B6B15AA6FF48B1 +:102040000A750B15CC0D62A79C6DEE9F8079F3A0ED +:102050004CF783842DCCC6AFFF6EE00BC476720DB7 +:10206000B581532A82DF6DC779C4E76BEB97BD9EBC +:102070006F7CDE41BC336C4E9DECA477D33F9B9FBD +:10208000AE4EFF7A630AA9308AC1666C649326C09B +:102090004FAD2F2AF3F14589EDA9FB94888EFC0BF7 +:1020A0002520CE8C77EE436439C6921C78715D7A18 +:1020B000219FA6F138EB19DA0E2DBCE867E8E5A2FE +:1020C0005A2B9F9FC40A0121303AB1178CDDECD006 +:1020D000736E48B3CB69A2ADA9CC21AEAD3033F954 +:1020E00078CDC69D54EB52BBB4E8A664438ACADFE0 +:1020F0008BB76AFD9ED1E74429EC487703B2DADB5F +:10210000A7568A9CAEC94A58B2CABA9763F03757E5 +:10211000096AA2C8E4FE135606592E6C7AF1DBC197 +:10212000DEC99B470FBDBF26D7A9CDF61807C94109 +:102130006629CE60CB02AC8A797D4ACC9F7EDC9446 +:1021400019B82A67E90C25D51387D0A3071399631B +:102150004B090873F8066375AA786C9F5F52852552 +:10216000D2C8CEB79F16B9C34A7AC14136632B4B4A +:102170008B008B7FDE9D60B1DA4C6D7341CF7DDECD +:102180005F71A13EDBF9CBAE8812FF0A15E68C9099 +:10219000E3C8FD31F84951D3BFDF65AAF1673BE5DC +:1021A000D9ED7DA5058C8EB9275E23758F0D53EA79 +:1021B000259205F28EC503280F368DA1789E002545 +:1021C000EFD2C920F4EFEAD732E643234CDD8A236D +:1021D000B625E177AAEFEF0D4A7DCC144FC998FCE4 +:1021E0004C5795D5D9D6C6FD41774060691207CCCA +:1021F000779FCB4996ED2EA697CE7CF89F3FAE21D8 +:10220000EADFA51B192CA354B17B9248E2542DC2DE +:1022100015DDF63B9A5CF817BEBF8C137DAA82DAF7 +:10222000A2E90C7776BF833AE716BF8566EDCC66E8 +:10223000D94E798E6E67C193403D5F98ED515C0732 +:10224000B17B4B0CAC04237DD940A751FADF51EA96 +:10225000157E36FAAA518BAAAA52C61D4778616B21 +:102260007259D777780496B24F48E787ADB7E367DE +:1022700094F427FC74DD08A36E4A0835B6A96E8D68 +:102280007C0A2BF380F7E20115D21E8C1B2E847280 +:10229000B81AEF4D5AC090F2162341C5E4AE2D8E08 +:1022A00082A63DEE7C2014748ED84AA2F692B536F2 +:1022B00029A9D756D07AF1D7D4F08FC9102DB137CC +:1022C00075D73D72D0A24082068164829DCE40B80F +:1022D000C8ECA82C68F80E313383861E61F00AE83A +:1022E000F48F3AAD87AAA661B80F52387A362BDD43 +:1022F000C78D7469842BF00E086696CE1ED1ED2D25 +:10230000489176025B30F606FEC6171AE487E3DED4 +:102310006B2CAA67A63AC25AA4563CD39FEE46310C +:10232000B9DE775F7E222E091AB94406A8CC3C6E2E +:102330006FE6C6F6C13FBB2F74BAB73870F7643A80 +:10234000A1C651504944215FC1D91462F207120D50 +:1023500061CEBB8CD140095512EF57D7CF016FE04A +:10236000F539CFD8B1F7F7BE6806B2539D443A901D +:10237000377DD4C1832E9C7440A350AE15DD0EBFB3 +:10238000C3CD3A4397EB22CCE072333DACDE575CD1 +:102390008E22E73A0390C2DCAADFC7174A483FE91A +:1023A000675E65C2E895E974B7EA18886CC206F200 +:1023B0009CD27CF186B433DAB81270019940211FA7 +:1023C00035D1782049036AD62DBB824223C2640FDF +:1023D0003C502D5FB845BF8534A15A83699DC346E3 +:1023E0009F34BBE556CF545C6019F5220E7CEE425B +:1023F00052FBF88CC145A26CDAE03A78B30E015A70 +:10240000F55F88DEF2D1D1BBBBB9038D3896B60E2D +:102410002946E7E049ADB88BA32E2E075DC9C37DE1 +:10242000D8718A2FC1AAB647A4939203124A70DFCB +:102430001AABA148F83CEE1A475D285D9FBB7AAA0B +:10244000C83C805A034AA54EA7481E95E82C111394 +:102450007ABDE05F443852217217C49EA74504AA92 +:10246000AAEC0214A8A04D9B65B82CE56CA4FF143F +:102470004B3FFF3C5F4124098B2D965141C0DEA4A8 +:1024800049EFB53732DC06D443DA6FB17A1E6E05F8 +:10249000B976539E4E89A8EBE9EC8798AA3C8C1B31 +:1024A000AC0AE8B921E759F2BF1C2D422D567B70CA +:1024B0007BD989B86E377D29A7FB89250CE5417149 +:1024C0002B795F4C867A397796C2440DBAE74783F9 +:1024D00066F15A6803B27A092F6AAD5B57E58F0738 +:1024E000D0F055076FE40A7853C2DC4F09E8221F89 +:1024F000EB29FF4C26F1B801F227CF5F820B521374 +:102500008710C95A54AA284A8EC32CE8E6CE6DE932 +:10251000D77A19D4498C849FE31725A2E1924848C1 +:1025200085AB62CD839AF66511AE67683B29FEA73D +:10253000DD984DB67AAB40ACBBDA3748A35B400FB1 +:1025400099574B5618A8C533F81DC0830DBC6AD8DF +:10255000C67943A9B1D2EE624CC1EAA92E742FDC30 +:10256000A38ADF9C578E4319D1D3A27E2FDA7EB97E +:102570008A63E8E2477D79BFEBE8B75DA694BBA329 +:1025800042101A74B7954A503910F6DED49835D9EE +:10259000E22BB8C7A481DB6EFD36E47E43CD53E366 +:1025A000137BFDD0B1157017F53CDD55A6EDD62691 +:1025B000B23B798FC3FE33ECD54124CB58D68A97F2 +:1025C000C728FD863B6037404D4365B998A46CC76A +:1025D000AAF2B34A0EAC7B6502BC8562E9594CBBDA +:1025E000EA6779938ECD040350D986BB89023EB148 +:1025F000E423914EB3EAF4CCCD81287BD7AC9AC0CA +:1026000073B161F77F9C143B81598A8EE97FDED2DA +:102610007378AF4D7E4EB087FABC24486EC0FFC9B8 +:102620001F6EE3E984F3E7BFFB54A2283BF50F5A82 +:10263000C51BE9576F32D73527A5D877B76D46E167 +:1026400018DEFDD3E02735820DED02E78A14274C12 +:10265000C1ED7D63E626EFFC3463634AE739BB25B1 +:10266000E4C82422058DD2407AC8E8B124DAB84EF5 +:10267000F0342C60F1DB3D9A0BC188E712CF205873 +:102680004690D462D688B1F5E8048820CA2E528DCF +:102690008838641F2586C1C3BFC506BA584DE47685 +:1026A00015621CB78ECC5565CE951D945EAC172E69 +:1026B0004B9A2F52EDBB827D33F2D6C21536E749D5 +:1026C000B945158AD8DC860A1A82164E7B33FBC3BD +:1026D0004EE93A04717B922C656E33B0B49DFA6E6C +:1026E0009BB37B534B1C017FFFDBCD191037C377A6 +:1026F0003787A1A1B8F967E5383DF99A5E3DBBA1DE +:1027000054CD6A4A25B99FF9A56B41E1B8AF7573FD +:10271000AD67CEC6D9E1C772850D77F03142FE9B19 +:102720008B1C3C565F9F5142BC57CB4C624346804A +:10273000C6631CA843C8984E8145490FBAF4673751 +:10274000595E8C90F53B571AEDE4B6A7B31EFD7C9D +:1027500020FBD4D0D51FEFD98816BB38420B1350BD +:102760004237B737BD89250A6E7E0652DDA681E75E +:102770006D325143EB8D65114C6F8EFE67A844C9D5 +:10278000B061D8141EF92DEAEDB4C2AC3C481D93DB +:10279000307056C07D926090162FA8BBF1AEAF92FC +:1027A00086E7E94B2CD8D24DD0827A62C1421C76A2 +:1027B0009CBBE2A0A7303C83BA7D659FBF9F366279 +:1027C000787DA3926E5EF76CF91C96A422D59520B5 +:1027D000DF6D8F391E44EADD94BBF59519D5EA3DCE +:1027E00081A97D4DD074555AA52E46B133970CF171 +:1027F000A167B7A8DB53EE57B55E89357C6EB72964 +:1028000090AE6F51E9F8616062E98642DC1B0940D5 +:1028100028A600969791B38643B696157FB8D193B4 +:10282000DAEFF16EDDA3067B19D354019B7D4CEAF0 +:102830001E0872304906C7488B606455F1A0423DBE +:1028400063E3DA8375B3386BEC42567B4846827D8E +:1028500057F1BC4CB7BE497F89E53BC9F84AAC98F3 +:10286000A0415120A64165FEC1A237999E24692648 +:1028700035B22E69CAE5AD530081E5EEFA77060B55 +:1028800091F93CC0202812012E59E62F4398AE4EF4 +:10289000F82672BE1530D2B41E1F6AEDCE9A1CFB0C +:1028A000038D9CFCFFEE656ABD08C3AA0B7207B9D5 +:1028B000CA770641AD6D281668925E4FF4D40CD7E6 +:1028C0008220194442F6BE113A2BD0F3581531CD6F +:1028D00006C00D28E8AD33EEDF8977B8522DE8CE7B +:1028E00082182305C1EF97E66327671E3422824FC3 +:1028F000F41732E7E98ACEA7F5ABF4A59783231F37 +:10290000F2504CA1260FDCA3F6017D7D96170E9B9D +:102910006DADB6EFF08B26AA34AD28996D0A0F6A1B +:1029200018B3E7F26B5641E013D9485D53A6B47A69 +:102930003B4EBDBDEA79C86D8561CF030E110A8893 +:10294000D2A0A13ADF37602EEFBB4DE054DF3462F6 +:10295000BB3E5157CF91CF832FDBF8C9BCD3455A2B +:10296000219FF8E1715DB350975FF3F5F117556062 +:10297000EEC86504CFBCD49F9E4070ECEDDD0DAE7B +:102980007D5CF255DDDCD3BDCBD961873317957003 +:1029900044EDE792FDC8039218D9C28D201F899299 +:1029A00078E55F872B55F9654E665843590F69B82E +:1029B000B85C2A1F27BEF8D869D01DBA02719D40A5 +:1029C000BE06942FD810831614F66596029E6F31BA +:1029D000E4A4AB9D9721CBDF1F555687C9060B801A +:1029E00055E0DD1DC6C665AB262546FC44E0677C88 +:1029F0005B443605072F191DB5100AA9F013F14ED7 +:102A0000CBF4D2C58E702682E7D421647A11FDAE54 +:102A1000DA624946FAFEF0F6EA611AB24B33250C47 +:102A2000DCC34879F156D5B8E70EBDE3475D1B0618 +:102A30002C4C005A9C5EB13296BB5FEA7869DF8607 +:102A400080E9C048A70A88802C31621BBAE3D89A73 +:102A5000E2A59AABCDD5B7F0CDBA9C549D4E41E0DE +:102A6000FF7F23D890E02EDDA947ECD30A2C474BFB +:102A70004F3A630BA9358C352C090B2BD00E2CC487 +:102A8000EF2DA2076D93C560A50FF79259461FCF92 +:102A9000970BD35811D560E5350CC79199C383982E +:102AA0002F04DD305D491C5DC6ED7F1006AA72ACB7 +:102AB00017877C65129204BC00A0C9E5063DDCEDD9 +:102AC000D7AAA87E85F8EBD1E649C2DD3C5C1E564C +:102AD0006ECFD2B8D5A576D5B047D011BA7C1794B1 +:102AE00068856D46CC6DFDAABC88072932EC658EE1 +:102AF0002551E0E17BED61A8C3E7AFF8A1A6B2C51F +:102B0000D939D3A5DF92BE1EDA80D739DFFBEB6E51 +:102B100095E9EB6CE5CF8FA56CCB226F7E8EA42E52 +:102B2000923792AFD6B2F2BB3BE55FEDFC95CBFDA1 +:102B3000DF4F0EA3FF061BD8068DD4A96E1FCE242F +:102B4000CA85D46A5D121E4CC13C13B153B0D0EE9D +:102B5000C2A5C757F08A03456612B53C0C52F587EB +:102B600069DBA2451421C77E9B7CE8306A329D4D0B +:102B700077F9BB4F612643157D9E7C8314AFD5DC6E +:102B800029255FEE82310CE62D090A7CE6BAF20BAC +:102B9000A73CAE9261B3FFAE2A7607CD1000F7DCFA +:102BA000F8C1833852A360C643EAEC2165A6D8B9C0 +:102BB0002087A7422C7D8AA5FF504D631D8DE07CA8 +:102BC000B5425EC3F4392B43F2C4ED349B9B5914D8 +:102BD000A33B0F42FC6B8E7AA35915C2004B7C4C71 +:102BE000EECDA181E8E3ACF47A81AC4134833509C0 +:102BF000A12E9AE06A476C047D823EAB35001653E5 +:102C0000656F25B37DD348066E19F0986D574ED485 +:102C10006D1E84C4B7FEAD4ECEEBBFA360D2E2ED15 +:102C2000AC868563AF4540784CC02494BB2E1A0E09 +:102C3000D0CE1C21736A8F858EEB1D0D6D56BEA8FC +:102C4000B22D89F6E17377F45C6E77371743D9A319 +:102C50009C2A3EB5947EF952B43C09F6531E02CA32 +:102C6000B834BB30F868B20A1486508192FBA6894A +:102C7000653B91D85AD815DE05A8C0C6B5059EA5F6 +:102C8000C2D2555829D3ADD6293C2192D4206118FF +:102C9000748391DDC5C755441A7919E3FFEE67B116 +:102CA00069D1860E94DB54EDB8A652F7A212D2F485 +:102CB000C41A64766983B7AE387640420FAEF8A185 +:102CC00027D6548EA184BD66772D20D51F541318A6 +:102CD00072CE77FB60EE0E19B166BD8D07BF1F5F28 +:102CE00066EE919FC9143B5FB01A14906EAC579278 +:102CF000278626368DD74A4415B17AB7705B81692D +:102D000052558E60496D87279899DC823DF0C3C883 +:102D1000041B38AD57447AB79C7E0BCA0B0EA00A31 +:102D2000DF6D7012F26D37F103FE448883DBF76FBD +:102D3000FA2205CD64EF8482F059201D39E46C0439 +:102D40000A87CD8CFE44B1C05BA50470707F1D085E +:102D50003F59B18ECFDFBCE1CC981EA0F66B2C1E84 +:102D6000B30C113EEA1002FAFBAC075697ED21EFC7 +:102D70008C5AA2FA11D65E59BD998EE8ED8B346C4F +:102D8000C394B516ADFAE613A853716968F12846E5 +:102D900099D225A657C1012AEDB55C345F0B850495 +:102DA000F9E50D5AB2C76CFF6782737D24D54AEDF1 +:102DB000F987CFEDC137FB2DB497FD68CB9760FB4A +:102DC0000BD157E22326E3D13A6B0EAB98A820BE75 +:102DD000764DB348232F2AF3E3CC303D1243CE2562 +:102DE0008C42CEB5B23BEC7E575F682B19F8DE39CA +:102DF000DE2480EF36BA4D26CC3AB2947C767ED56E +:102E0000CC44CBD0833FACEAAC3FC5C4020796A804 +:102E100015A9E373418002AE31C74880EDACCB48C1 +:102E2000498EF210214D7E7C19DCD8AC027AD8DDB7 +:102E3000C810D2DE21334ADC8CA7C72148483300B2 +:102E40007FA0B96B76EC1D47DA95E5AB630A95D0A8 +:102E50003D0A65C12BFCB4550864A3635E9B694CB5 +:102E6000CFE3E260FBBF769B282346BE1C7C7D023D +:102E700090C892B3539BB808F56DDE7A9F8908BA63 +:102E8000427D57C30E6D068C5763070265A83EF856 +:102E900043EEB11D857A27387E7C044F90222015A1 +:102EA000487F884C189E3FC80C0A686FAC53ADEA47 +:102EB0001742434A228B934D1DC18B34F7BDE11D50 +:102EC0002706149AA4B48745CC62994AF0537CF142 +:102ED000DE8B98F89143F4C37AF4CA5FFD04C3957E +:102EE000163FA88C40FB907232542576136A6EF917 +:102EF000A40582C5AF96AB3ADECD23F994A7192F6E +:102F000074C4F90ED720FAFC1A66B39D476D47DEEC +:102F1000EE519666BD7A6429609CFA2FD4666810DB +:102F200014007C5389ED781DEE92322A6E9036EDB6 +:102F3000C3B9AECA681C2CD6440C9722FE3F2FF1B1 +:102F40001E6F8ABEC258C615688630E65EF5992B9C +:102F5000370965B74AA8CF339730761B10F5BAD03A +:102F600043157086ED94B22AECE97AD882530DD4D9 +:102F70000CC15CF8AE6C58CBFD935DC1C83BD5E08D +:102F80006BFD7327ADDC160FAEFBE35A0ABCF001F4 +:102F90004E81F4F73B184BFE1E075B474A9ED45DFB +:102FA0008AF75A29FE0AD0B6629D5E00FAFD7A457C +:102FB0001A6FC749742FB7CDCF31C804023A48BF42 +:102FC0008FAC9753433DEFA5D2EDC6962F726B257C +:102FD000D780DD11EF9163BE6E76C2DDD2B4D7C269 +:102FE0003875CC16D1BB6EB634C5BFBEFFD3111039 +:102FF0001210209CC591EFB112C9C8008BFC50E79C +:10300000448BCD66342DC69F57087B9678F1209669 +:10301000C520187BD1245D8854AD6A71ABF8FBE6FE +:103020002085626C1A10F4AF30CBCEE2B1426CB2A4 +:103030005F157B45F76BE0ECA61C552F87E8442D08 +:103040004DDD7C3A78A21D7AB18A8DEC50FFD08F8D +:10305000534792048B4E99C9AC5A6E2FE8BA9E5BC7 +:103060009BF4AD98E8299F329AF98C0C06ACE37D6D +:10307000F060F4C10550E3CB6CE660D76DC8E0CEDC +:10308000A009025D8283B6F309EF8C66D6CAC61B1F +:10309000FC3F236A9DBD4E495E4B92C6463E673F4C +:1030A00034BEE0626731F48BF69A1E578B9846FD6A +:1030B000A97AF1300821996A55155AFBA2279CCDAF +:1030C0003CF9617CA5AE7DB20CC8A6E3EE673AF68A +:1030D00034A9ED743ABB2BAA83A94D9B2FEF1D4A4F +:1030E0004C330D9E970B0D7AB29D3C521520363015 +:1030F000F5702766F0F03F0687377AC34CBCCD9752 +:103100006755CE7C476CE22CAAF7E62964A4AE0191 +:10311000B0009D4184C69B999BB7349B55C45555BF +:10312000A29FD215F99F134F3F20A002CCB224B723 +:10313000EF923BC5D462FFC91BD5C6AF34F27DC048 +:1031400091A75168BE71209AE17BFCA7F2E555ADCD +:10315000ADEDEFFB878427CE8DE616FC4CA6DFEBAA +:10316000844B1C11667FB4259035703FE0BD2FA9BC +:103170002C224D420DF0B505F6341AD104211879F0 +:1031800047CA9C05FA6EF95445FEDD5231713BC7C2 +:10319000B3ADC7F627FC9C3CA3715C562C1A51AF0B +:1031A000E927647EB9E1E552537DD76D16C1BE6152 +:1031B00088961BE041C2D4AB4734D1D20FE7AF4869 +:1031C00083314A86625A72D6A6937EE6C1468B82C6 +:1031D000EE38BC6C44FF0145BC30D87A75D00A6526 +:1031E00033B5FF0B9B7815B09C3239E1D582EAB438 +:1031F00007B26A5BC7482178C5B12ACF0E4A1F5A69 +:1032000096589C6A01F6324FFC353182315F6F422D +:10321000C1C7ACCB725F9BE9F8D1EB3BED08D78C13 +:103220005E88D4D138AC7E0F238C746036FCB7C571 +:1032300025F21E50E83FE3618A4D6BFEA1D056AFE8 +:10324000D15B9D4E097941E0AAF6A4EB86805A092C +:10325000A6A105E1CAEDE09C0C0D24867870CE3263 +:103260009B3D291912B593ED4E17B848FCBBE37D81 +:1032700040DE2E2925AF22C2F6127FAB20EFBAA97D +:10328000D8D87A1323940EC475A10D2C00E07D7359 +:103290000DF9939274C0D4BD559B13C6E87A03ED23 +:1032A00077F757C7D9A329151ECBD0EF29E273E3CF +:1032B00053D9584B32B5A18D636C5BAA3E83EE297E +:1032C000EDEFDEFC0EA2BF1B92D721D2A0C29F92CF +:1032D0004D3D4D64331C8225449EF431B477BF9438 +:1032E0002BC9F841F6A8B31C866AAC56E2AC266539 +:1032F0004B56CC3E5231EC6474D641CE05D9DA221D +:10330000985859BD59D9D69E50702D1862766B2B9E +:10331000637D67AECC75BB1C15CC1A141CD3B54DA0 +:10332000663713F66D9848CE58005882F1E8265C4F +:10333000383E212FCC0F7A5192B9648F7396BB6FB0 +:103340004BF4680515F30C727746A5FAA89B845ACE +:1033500031E99EC5510B048CEBD521294F9DFF62AD +:103360001EA5A760570E7FD3F34F4E6EBC11B12040 +:10337000551F9AC553ABA384120DF72C41DB99510D +:103380009D3F03B474D68B2CCD2627AC8CEA4041EC +:10339000155EEDE0512B94E058EB1EFCFDD4D3B349 +:1033A0001576138E43A62ECEDC129D2E68F3BD0A31 +:1033B000272F5D69ADDD4320E9CF139DBEAA457976 +:1033C00018E75B532D6711D5ECE658DD5520F45B0B +:1033D00011E329A5A46B39B51743CB2A0C52055F1D +:1033E000331CC676529B0C7AC9CE16FFF11A5D4388 +:1033F0004480C59544B6AA54E305BDDBB9A7C7719F +:103400004F6C52696625C5E920F150B3F83D51C6AD +:10341000F712F1C8AF4C7392653C1D04D5C04DE561 +:10342000B40DDFD629D228491A74B6BF715F9384D0 +:10343000280B7571A0F06C15D0523FE68F63F5A193 +:10344000C16DE6A7206868E3626161C1FC0CBEDD66 +:103450008E524D13BD4D2E95BAB82D69A8CBF6B539 +:10346000FCAC6F55958191D8C03071D77CC9484C60 +:10347000D466173AC11B569E971D0D8B31B60AA311 +:103480004FBBD00AF3E84167D0FE1DCA283A9D9B86 +:103490007CA433FB97DB8C32995C5CBD67D7FE6103 +:1034A000200C8A746FC20A8F2AD94A7D5F6B153A45 +:1034B0000E7719F0329488E488E9CB283E225FF138 +:1034C00039A56DE5303D9D6119BB0B701AF8C2EB53 +:1034D000861494C84C8C0326853101E24F9A7FC62E +:1034E0009471B7E9FF6D1BBF836820D1D039FD39D6 +:1034F000D7AC01F9A6D9108B25CA1E85401FC597E8 +:1035000048C5CAEA7F3FD5CCEB402597A6E5DA2D22 +:10351000331003616B115518A953D25FB36C064089 +:10352000676B79D80718025263E373A6ECB04A9D23 +:10353000408A279BCCDE4404B632571E879D432326 +:10354000418E806027C6BB1493E63AD1D311E14F78 +:10355000BA7F9FC84B2DB22C33D9D34E53147390DE +:103560006E0A43A75EBB4907537CEDC22319F200E4 +:10357000D73FED1C2324661FBC4F782D476F98C2A0 +:10358000E2BDA51C5845E0264805A11F1BC409AF94 +:10359000279AD14DF9330E67E426111D9DF7AD4AE8 +:1035A0000C16DA39E0587A96B11A4F5554CE3D3898 +:1035B000F9FC67F5FA57DE8B41C2FB1FA39C4389D8 +:1035C00044D548BFDCE5E630ADFA140466E5C6C470 +:1035D00081DD2FF74B286137538C94AC3151AAE031 +:1035E00067B197666B969C282DDBC53FAEF940BE50 +:1035F0006C47807B19F87ABBB7A4DDE7E366078CDC +:10360000B7A4A5C87872DF1C380E61C34D911F0E98 +:1036100029A55837D23DD7F7F9CC5334B28C465848 +:1036200026E7AB77C26F649D1434978EC25EBE4F9F +:1036300033E23FC126B460797C21437CAC4D0E3629 +:10364000AF289435AF04E255B18522EB8DD47A06CC +:10365000B74594523099778D43447E49BF4EFFF66B +:10366000306BF95AA6F70C4C866F1928E9D7AF577B +:10367000ACC501AD395402F602C76906DF43A09319 +:103680002C89E38334A7C523558EF21FD895FD41BD +:10369000A88FDB8750D1D3EF0DF946D6770DCD81BA +:1036A00066AC847696B3CA081F250980DB5ADD9282 +:1036B000CFC6A433CA9F539905CFDE621C749D30D8 +:1036C00006D2E0075528D0A7C05C123856E44CA6B5 +:1036D00041070C30B3F3D949C126C4B546B81D3DE6 +:1036E0002584B622AAE0F5E5FE6B56CA90CB2FE4FE +:1036F00059BBA8D8372191B11C89E0639320583673 +:10370000C59E48B04467F6E68974A4B8553E703249 +:10371000E571C6EF9F253FBEE83F0163ECD1AE598E +:10372000FB7B8D4713EB81E1289E4ABEB0A7AD819C +:10373000C3E1A81E212533122224BFF248CFE8F2AC +:10374000190296C491060D1FB7987D676EDA10C0F6 +:103750003139369394C88D1DE41695D2A50D5C754C +:1037600084D3CC85D1A58BB8D1A45C97F994C02C17 +:10377000074B1E04438C0A6065822A4E250ACE261A +:1037800079A8EC0D322A2ECE9FFF80916FDEA01714 +:10379000B47D8E33C8F4C06C71FEC7A132E89FFFC0 +:1037A00078231B413E803027C16749B31795150820 +:1037B000CB22DCB86520A463883DA6433C41083C8D +:1037C000987049C4B0146B6FD4C1EAFD778D5B70FB +:1037D0002E1E10431971BF05939DD082A2EFD444D1 +:1037E00032E3A388C2A79A7B3EF641181DDD0D1D6A +:1037F00070E420453882EFEFAC5422DF047226E7F4 +:103800002808015971F618F56309DF2014CD8DEAF7 +:10381000DB1FCB14C9CF6257DD02C796DDD2FAA3F6 +:1038200096BE6F864E966A4061AD3639851E8D64B0 +:103830002278558A75A75846AAD2E57B25AE7745EA +:10384000C25E91D589EC27CCD94B0B9513FA1008A1 +:10385000A5D7CB6D851480E79193B75C28E70BE77C +:10386000D02D7CCDC9E26A36131FEDAABEA2AE06EA +:103870006FDA8C42F3344489240A933AB181DF062B +:1038800013DA702A94D19CD0DDC931EDC7BE661021 +:1038900087784DED0C1DBF5E61B84C8EAFD058815E +:1038A00040BADC30D5B6F5B92EF14FB516B43CBCF4 +:1038B000253D92F52AAAF1345D61BFC9D5EBEDAE85 +:1038C000AF7C28571DC93082629BF4F3AA00BDF873 +:1038D00020139FC53497B05021838139CD246728A8 +:1038E00093CC25FE3A317D1F90CD27C1F39CCA5160 +:1038F000F5C3C0574859EB30B2FC0AEC3B45935432 +:10390000C088E6969C4766DAA921C23228BD912775 +:1039100013E3A87CC0AE933B029D592250459C1EE8 +:10392000B884C3596FF5FF602F13679F334FB2A759 +:10393000167AD1374EAD32A6B8CB044561FC377F3D +:1039400018EC6738E802998E04A3F33ED88DAFFCDB +:10395000E9342BEE760DA715006178D7D5AECA0BEA +:1039600007E8A8EC95CDA54594A3A9DC48195841D2 +:10397000206501B5FF86BBFEA330DEC5E662F643D7 +:103980005EF00E874AD039C7F7784338D51BC64654 +:10399000CD38C2873E273A2A249B604A92C1D72B52 +:1039A0003333AB2C0F055114F156C7F58A47508FAE +:1039B000BF9A0D7447E918F668BE6A9DD80F29971B +:1039C000B50E6183E4797F879B8E40D35FD4752CDD +:1039D00004D868CBA5484EE35914ADBD6676BE2F1A +:1039E00089A23317BF5665A9276ACF3328C2327E12 +:1039F000D9830FD517B4711E5E2098B3364FFEC31E +:103A000021B660E8ECE45189C3ABC1111CECFE5C4B +:103A1000D1AA97EABEC13607B75A96FFBF02CEAC0D +:103A20006EB727717EFF5284C483F5B3A504F348B3 +:103A30006EF08402DE5715BE125480900020F10F04 +:103A4000EC30FF41DC00E25F36277E634AC49E65AE +:103A50008A621C16D156C5B953634DB0AEABF1079F +:103A6000550660144EDE62E4F8A9933A126F318F66 +:103A70004000E2BC929A87EFC65DF58A82E3448AF1 +:103A800021B551799D487BC0BF4CEAA8DD09BE4FE6 +:103A9000F5EB994D4B31ACF1B0B75EA817E96A115F +:103AA0004D801B2878024DB10E4700083A32F8FAD3 +:103AB00037CE2D74C50E56489620594C328AD4FC08 +:103AC00068103CF68F71028AB8A9781FD0EBBDDA76 +:103AD0003FD6D564532F2A7258057AA6A0BC8920F8 +:103AE0007DC019D7FD45B4B57F362BCADBB0820344 +:103AF00074F6DD54E26A985E95F7D6C819E72B5D37 +:103B000047CF9D96116CA78F3F6E9479F5AC380323 +:103B1000FC082EEC05D42D9888608C451959E09E40 +:103B200057BCFF22C25FD1EFFF953B0CE0BA45A323 +:103B3000DF7250141E0FA1A4FE3F113253B0165A6B +:103B40005B24136E294E2FF976B3A3898909CE170A +:103B50007ADBAF7E711FA027DA1DC3997EB224BD28 +:103B6000160000BF5B93C729A3C66B930D4755CFC3 +:103B7000964D2D200F72615DF763B3CE718A44EDCF +:103B80005FA50BEA009867544BBDD58CC91CE8AE05 +:103B90001F6B7C0CC84AC3799E7791824EBAD8AE0F +:103BA000A4B71EBFF6C45CC681A8659BAC9BE7D7D3 +:103BB00072B8FA60FF3A59E3C967E0A5C1E35ABC9D +:103BC0001A8523A64C54A1014BBB7C46926FD7A308 +:103BD0006158A72C27F0349E2CE2819CDC3F157A9B +:103BE0008CEFC6173304F38A47415D1C73A1DB7465 +:103BF000C16D9149E7FB4739E6284463DA67537999 +:103C0000F2043389E6DB109097ABB633F37E431CA6 +:103C1000A5C05C58BC471042F6D01BFEB6E9A40113 +:103C20005E3210331927A96B762D0614CAA58DBAFA +:103C3000DB225F0967FF2A07300D74FD18D2B14AF5 +:103C4000E122BAC45A5348559928B1F1AB55FFA6A1 +:103C5000D4B94F6E223668CCC241AC8B36AD1187D9 +:103C6000E31637E13CFE2741B7903530457081B708 +:103C70001930ADEFDDCEBA34903FE1599E8F3C83D1 +:103C8000E3E0A577076AF820C0F4B961BAA08A30EA +:103C90003B416E6D9DC68BF48D72146BE8E3990EFB +:103CA000207F891CBE416BA682B6EF72C8D7659A89 +:103CB0007FF3EC694803E680E30FEE45D3C0563F3F +:103CC0002160806F56AC54F9E237EF848C49369B03 +:103CD000FE80EE9549EB2133043DE86665A445B3CB +:103CE0009F212CF8B25C53461458A1762AAF6AB3D0 +:103CF000E2D13ACF7D0BFBADDA6F983F3ADB9B798F +:103D00001FCF8B78B052F7C821E6C53580711708F0 +:103D100004ADC37C76F0C3F86B7877EC4C93647E8B +:103D20001FE46B9BBC29164D19A01F7202DF7B504C +:103D30000593A412DE975A9665130A963896940650 +:103D4000AD674D277EFFBB48E489786AF763E5D904 +:103D5000676C10E700EF9EAC3026F469C3BC75BFFA +:103D6000B042DD3BB92CF750486273D151D51ED813 +:103D7000B06CE8FA53339DF2A48D75A244302D0E39 +:103D800021B6798BC1663DAF264D09ECA5A4C6507E +:103D900059655E24AEB5946E323EA30549ACB12D93 +:103DA0007447F6035D181C50138F7222ACAF187B5A +:103DB0007C861E31F260FD8C95F9370E3831C25A7F +:103DC000403830B40ACD9D8435A390D839AE326CDA +:103DD000BB5D13F2F44A8C2F863FFB59360F8D7C66 +:103DE00030F0543670D74AB02FCD71B8ACCD8A7E42 +:103DF000555ABF3587EDC79B3C16DDA73BA91B4D28 +:103E0000464E250B5D5E6A77F7E99CBEF6AB1F7CDC +:103E1000FB26725238A78CB28DFBA10EEA1C1A0148 +:103E2000248AB3A9A7FA50B064EDB75312BE0E8C22 +:103E3000FCB26E4275DCB260E01A1FB72FDB7BBAB2 +:103E4000CA16B827E3A50BAD88CC4B9162B6862184 +:103E5000BF274DCC95C6A76C27CFF2DB566367E32F +:103E6000B7EC524DDFD2C20B509D042D62987546BF +:103E700098ED7CBB89E05D086BDB449B8D3412A61A +:103E80005E53494E0D4A2479A28AADD019B6B905C0 +:103E90001D33A2E555A4C1B8106B0D7E66A185E562 +:103EA0001934D060C602A1DAE2C1EF625B42FB5670 +:103EB00060D08E0D21CA444BF2DB5596298D6D776B +:103EC0001E1F3384276D35E76EEB63262085391678 +:103ED000050DB7077748AA6D767BFBB6EBC59E3913 +:103EE000564E9DFAEC9E0FE476A30925C08F90BD37 +:103EF0003452B3F3CEA93F1DB74218A0729648F2D0 +:103F0000D7CB29C82F99AD0F177C051D8B72F330C5 +:103F100049D8CE72134780A22C3597B3BB60B1D677 +:103F2000E6206FE0EE14EDA86BA742C9DBEF2E3C54 +:103F30004769094F09972CE3E3A8902965530DD0F1 +:103F4000F1CDFA184C995BE9EC34F9E96B0EC149F3 +:103F5000E5D3C6FBB233ABF99CDB9D9D2DED1E6511 +:103F60008C3BE421993D1614970858FF9598CA1D7B +:103F700018C01D3BD9074E91B5567FFD466EDDAA90 +:103F800019D0B07013E1F4DC79E0EC19C1787A1142 +:103F9000ED8F406452BAFADFAB224DAB5FDB27698D +:103FA0003E5D2E74791A441AC835CA34197D697E6B +:103FB00024C6461BE43D753B81BA94420596B9047C +:103FC000F268718A85706C5F7337F79C9CDC59527C +:103FD000E8A2F5E76BD4DEA8DFD7B424ACBB9F9191 +:103FE00030FB75A30721D5EE3B8363484BB8DE5FFA +:103FF000466671BC69F26CA36A8425AD07165677D4 +:10400000A71A72342B200390FD8470C2D58E869837 +:1040100053FF7E5FD27B9934F85488660FDE09190E +:10402000349586055F3D47BCE797D12A4CF9355555 +:10403000F7486353DDBDF3B34E30A5ABE8B79F57E8 +:10404000EC491CE52C8AE085026C7CF15B4F187C06 +:104050009E6F328526BD7F3F2E817BDC32955FC20D +:10406000F1701C596D4715CB23423DFC2C1EE3FC1F +:10407000823B6E52500F7EE8A10470F453E5057D3B +:104080008F1E4EBB451A465D825632BDC8BB2258B4 +:10409000BDB398C277FB0F21AC9DD4077725B71726 +:1040A000DFA9895799954373B5B875545661F2F1F4 +:1040B000CE812FE8DF4F70A33DC1EEEF6A3B514B3D +:1040C0002DF9B6B92C43E55D1E843BC342539FE2F4 +:1040D0008DD942B2B0140A8B6D76EC8765F378A364 +:1040E000650CE477DDBE8895287CEABFA69146750D +:1040F0005E7EA8314F982AE035FFC3102C1DA3E542 +:10410000D2A75060C59249E2B1765C8BB316956E2A +:10411000E6F81C382A97416F6926CAF74EF71C63E8 +:1041200064FF41F75563944B7869A579F80BDA463B +:104130004A5F9252890C191F78BB3A0322121797D3 +:10414000AF1E489350AA55621D0A3D404BDB1D0D22 +:10415000D83A8F0DE155B93B1D458D5A3EFD596644 +:1041600019C5C7323EF803028EDF9AEF0D631A7845 +:1041700040684094B4083099602D58F75760054D59 +:10418000110B2A93ECE5E7701329CEF186F0076A4C +:104190000241550D1B6038999A24868F8507621C51 +:1041A00053B3E522C9EE7C61DDB704E4C2E04B18ED +:1041B0004FC4E05998FE71174815C2998A89FB448B +:1041C00063D3846BF631718490F066BBF9A4E6F496 +:1041D000749DD074D86A21D05D0795F9221035D529 +:1041E00006EBB763D886201B42DC6AA10963E3E0D3 +:1041F000665A17C38AE4F19CF8413A0DF2B006A65C +:10420000735FFDD2F51CEE8F15340E16B13C1EDB2C +:1042100060727486F9C6E9456B23B3727E1C7B4BD2 +:104220009A7BAE692A7B68DF120B27BD36BF530C21 +:10423000591168701F0EFE0AD567DD50698196D846 +:104240004F1FBF3CE77B10C91D8DBB38166B824DDD +:104250002C67F1529C752081A03298125F4FC28466 +:104260001FEFFF689997B35337C5CB74C908EC7833 +:10427000E8AE604ED9CC9AB0190C0460B2D6FD39C4 +:104280001EFC2A5B66B78AAD8B59DAEE068BF39B70 +:10429000A8A8CE13CF78911AE3D851111746B015BC +:1042A0003748679A2D1DE742A3BD4B81034040ED7F +:1042B0000575B9D2745626448209CF4219EE333CB3 +:1042C000217978035C59097C72443E23AFCA8D562C +:1042D000551A5C552EDF0758189DE11BE41DFA0B9B +:1042E000A68E83F5EE811C43D4A7D5ABF3A6DA0ADC +:1042F0001329D34E0D001CF917CFCE6B8B601D78A0 +:10430000B079040BB5E0615D86758DB0412DA4C018 +:10431000752596F5E98396558653A36F47AB03D36E +:1043200022C1F87DFB6C425FCFFE451E2D33155731 +:104330000817D0E83807486602E80A5E54823098C9 +:10434000EDA9F147850EC92C84A5209DF53AE143DE +:10435000FB4FBF2BDA798D121C0E519691B4AD53E1 +:104360006676FA66B8EB88C06BB6338499D54EC4CE +:10437000D46AF0544000F694B8575AA445BE852735 +:10438000F09376DB969160BD7FDACCD9B3B65F76D9 +:10439000EC32A2AD8D5EBB42035D0A1684C9D4DF48 +:1043A000EB2E79293F0E87AE35517D4F963FCDC319 +:1043B000B6366B30EA3C7539E27715AFA1D7967DFA +:1043C0004EBDB9388E8F2393AE42BAC5A6CAA54852 +:1043D000163C271F7E8867430302AB659F47398CD5 +:1043E000FBBB1B6DF662B20C9FA8044FB7E8C999DE +:1043F000BE1E97BB7749568A3C356038925DF7A25E +:104400009E059865C4B31618841060CA95A0FF4332 +:1044100014490D59DEF40812F494CDCB7128B0354F +:104420009742C44C48E1F85C13B7D52EDE1A1E3A09 +:1044300074F4C9A90B2D4181C82926B6829B179215 +:10444000FF9517302634BF729765EBD478A84DBB23 +:104450003A56D531350DBDA8B2B9E9FEB96B9749C9 +:1044600036FB90BCF452D95B7FD01BEFF90FB7E459 +:104470008E870DC18D051AE28CC12537200EFA26D4 +:10448000000F82E0C3A6EDF52A1336B64A6C661516 +:104490000A0D0EDCF9D4DFF2807D65FD929CBE8FA3 +:1044A0000E3E4354078A8D260153FBC4A9BB93C01B +:1044B000BD7CBC3FBCC4242992438776D1ED633CCC +:1044C000B26100136FD01D134D5A300A18B6360B67 +:1044D000F1D4E16B8CA05E95211C53676B3897E596 +:1044E00054D11B966553FF9FBA62238BDE24351689 +:1044F000C62A27E5C3B40BCAA8E04BA9CAA6570928 +:1045000069DEEBD348D22EBA61E3D0B19B5BFE5B90 +:104510000F65059B304AC84D3F04D13B7811AB4134 +:1045200025CEE4A518080EBD61006723EC43B9252C +:10453000038AFC9CDFBC60999640D54B87DA87AC38 +:1045400085583882484BC77903D85DAE7EF468BB86 +:1045500035B3740B4B8CE4C2CA01E35846B054B96E +:10456000A1E3BD11221E2694F966BF969FF1307714 +:10457000DA4192850EF4775A1BCDC0595F7665BC3F +:104580007DD75A042617ED5E1D6576E1FE79E0F9C8 +:10459000AA192EDA10A82EB0DAC02F6F56A0EEDFBF +:1045A000055F9AFA405F2A016F13BCAB98182F2B56 +:1045B00003F3D9BCCE664A61C30EC26D6F0195DBB1 +:1045C000581B9FB839B91E9FF6163B9819F7BD04C2 +:1045D00033BF911E350235BFE2694ABABAC3A76339 +:1045E00052B586EA0278D57BCE824D9F4EC889149B +:1045F0006FF2B4340E1A212333848AC991C4954FC3 +:10460000DD34138AD9DE8F9BC6D89AA38001DEE4FD +:1046100090CF3A4B871D6CED3981FBEE8ED3A5AC64 +:1046200024B065E8768BCF9DE3731B53AB08DEB4F3 +:104630003DFB27102DFEEC2C49AB0143AC59126811 +:104640008EC006A5B4827440F4EA3AC0AAE198C5C7 +:1046500040BCD49DCD77544AB77BAC2E6CE230DCA5 +:104660003542B03EC6E00B8D8D76ADEF5357057BDE +:1046700049A5E98909ADACC304B3A9516A83BF2830 +:10468000B525361724AFFCD5205ACE216D01546ACA +:10469000DDFB3D43C47D2E25E50BA23EC20CE9F5B2 +:1046A000F104731091D1AD8BE59C74A714F0F3B5B0 +:1046B000152F0A12A638C25C75C29636F09526C22E +:1046C000C1C7F21137E8DBBA7576017269A3870DAD +:1046D000D0CBDF09A05726BB78F7D11EB22B3DEE19 +:1046E00015DBE7A3CF381BF877CAA451EC922C3521 +:1046F000D2B3A21B98505AE5384ED480582C89DB8F +:104700007CC8DE31B8E290F2B0B33AAB71B03AEFA8 +:10471000551F79D50B656770699D8C3EE8E782A2CD +:10472000ABBCB150D1806C2A3DBCA26AFE7C0DA00E +:104730006A67DF52E50385FB6D353A33DF817D190A +:1047400076A77BFBD7F6A8AEACC4C061D8A7D79E2E +:104750009B51B0725E9277BADAE6ABB3E5210F22D5 +:1047600035DCE3FCC7735753A5DB8EA717B0295D73 +:10477000C8AC32890DD2DC15CC57E3BED99489FA86 +:10478000CF08D20D243B95E88BB372CCB3DC06DEA8 +:10479000765BD003258C8F859417B2E490F578353D +:1047A0000FBCBAEEC766408A4E23D0919AA3D2348A +:1047B000FF55C86E0A7F48D52ED55E676AA1633C57 +:1047C0002E23DD6B190E97036B1640D55220E5762C +:1047D0002FF0D4A8ECE7353F201A958A3C82F114DB +:1047E000BFD766A8F9ECAF138D8497FAFDEDF19B66 +:1047F0005B88EF06626AC9A1CB3AFB19DAF5A739E3 +:1048000093129435B5A1776FAD691FC7B66970056E +:10481000BF3563169547899B293501B80367D7676C +:104820009C4EB6E69076BFD880C8F66529D302A024 +:1048300032747D97CAF5738421EC4C7B7B536D31C8 +:104840006C7D781CC38984D4A645F4C54247E73EF5 +:10485000E08A08CA61CE0331CB52B9DB8774950870 +:10486000EA6685BD00C14D30E4D321B06D830A18DE +:10487000C50D15283EC91EC42B093CDD6B391F2808 +:1048800012E947FC6B802C7676A5C90F8EFB0C35A0 +:10489000CA7C366FD3547D41C503F79B614B6910C9 +:1048A000D8E18E94FD48CACCC8123F75D8C0299073 +:1048B000049F90DF670C737F797DC0C970E9497AE6 +:1048C0005F97F9DD9A8E9264521E06E1CE13273A65 +:1048D000AFD87574A0AA352E19DCD12537A7B852E8 +:1048E0006DB6C97887208BDF6626E076D5AD257456 +:1048F00001EBDA63372548DA4DF794AA9D97C06239 +:1049000029C9C691198C8083E1A07573F7F2B4644C +:1049100008F3754601C1E83450DB38F2B597E585F8 +:10492000A7075FBEE64F77F530596EAA2B079C2E7E +:104930004952CB40C46DCEDA048EA7FD474ECB69F9 +:10494000C3C2A4322E0127468AB72EFB82A4A0DF61 +:10495000C592351C4E7EA1B3EAD2350E460D75B90F +:10496000881FCE58CA2B5C13A7C2C1768C3F427AEF +:10497000BDFDD89EC601BBBA17C063E8AB40C108F5 +:1049800091F9B63685FA0852882167ECC502BD2533 +:1049900022C025D4CD69D0A116AE5D85A01A9D8117 +:1049A000EC7D2FD35C702A759B75A6672EDE37567B +:1049B0005DFFCF9F173EDFEA63653383F93D3D60BE +:1049C000957BB4E5B4805E508A3C2AEAD9116F9198 +:1049D000750984BCE0677A01C684404F727939EF6B +:1049E000B2B55FCD654132850153EA21E8BD1E5263 +:1049F00052B68396C72AE594EE6053FD4E62D1DB32 +:104A0000720197C6A2D0F51621D4ADF0DE27E838A2 +:104A10000D4A0A9D157A013F8C691F810157ADCD62 +:104A20007A96892E42843027A1ABADF13D63D16FD8 +:104A3000399A93B6A7263A5FBC5C4158E39432CFCB +:104A4000F7BE6D380E0715F9F7A4E344546F61F112 +:104A5000268B12732D9960678B40285A4393D1F9A6 +:104A60006FFC326C3249C6284C4BE14B2C368589A1 +:104A70003BDBDF8ECA68330F49066B3C20CDD67E08 +:104A8000C19733C8AAE8DB646F386730F1478945BE +:104A9000C65B7FF6F28B7992BEEB2B23E9F55D18AE +:104AA0005FE85EBA7F030595D7060BFDC5701ACA8D +:104AB000CB87AD8C56473DCA9A488D5E7C8D2D21A3 +:104AC0008E55E5080A6FFDD9CE087063F589392344 +:104AD00042EE4E933BE99F382ADFDAE573B3DF3BC2 +:104AE000D9B806275D2D5FCBEACBC8912A42DDEA13 +:104AF000103F35DF0F3B9415BD380A61D4A5D78E22 +:104B0000F30DA76856D65E25785E4E50F6116D847B +:104B100085366136A412B8DD6F98FF0E8BD64C41F6 +:104B2000DE3B5A89CD5C63D36511CEFD1A40927D80 +:104B3000C5B15194A2B437C3843B6F89C020BB5F19 +:104B4000540291FF3C8FCB6413C48D1317962DB381 +:104B5000D1B0CB5AAE25DE74DCD9558186EE7233E6 +:104B60003FB2E0109B929D6C3A38421B1983FCCFF8 +:104B700074907308633EDBE4144F159A9AF576CA75 +:104B8000CE21EE8595A3D24225BCD5A889EFAFEF03 +:104B90006B98A1F3C1FB11B434C6C5CF89D4F9D841 +:104BA000C899A3E1153833222AEE15014AEF9B6C10 +:104BB000C3C9B9D790F3C729BB5672CB3D50B7F9DB +:104BC000F06A6263D289448EFE269072D8EF924AD0 +:104BD000CD78D81991F7EC62FC3AC5A2DFC82661FE +:104BE000209A381E5AD16F315DC04C07067E08CC22 +:104BF000D88E639E1CD05B2934DF1BB001FE867902 +:104C0000D774B6FDCA51BE34E854AFEF55176ABC2D +:104C10001884452F9EA46CDD0FD9D7BBA9FCF0905A +:104C2000C64791BC888F9C72CE27CEB5FE6C07908C +:104C3000A21AF41668EFA3F3135EB9E8C9B72C996A +:104C40005EB3D4E1DDE5B091711BC35A3CEDA8BB66 +:104C5000CB518B18C6B18B5B9620FD93677FE86ABA +:104C60002181A4B59F1DB4F0307F359B6B814BF043 +:104C7000B869989915C139ED96A04F5F24DD3C2E97 +:104C80005B372734CFA274B9E44225999A0487E6AA +:104C9000AE293C1B56F629BE8C4DD17339E4F78DF5 +:104CA00067AED96E3741358D45888951E9A5C20572 +:104CB0000D98BB7ABEC0415B8DF3BF95ED838F5DD0 +:104CC000BE786467C714805C9ACF73696BBA74ED61 +:104CD000D723C93E7677FFE37D727E3CDDCBD5D00E +:104CE00089C8AAC6E445A9677F6D3C3BB2F51FABF6 +:104CF000FBA3B6616BAAF9BBBE571109A0E75C9292 +:104D00002F2996FA28A9AF0B0D4E536046C4DBB18C +:104D100059404B501E1326D49439EEE9736B576AF1 +:104D20006E5C7F66D33D22456404AE8F4D127F7A60 +:104D3000301B1C3987894CA53148E03082781AE055 +:104D40003897AE1329BA432DD5DDB5B3E276C61236 +:104D5000EFC80422D155453C2CFFE2145C40399148 +:104D6000F8AB3462078C8A7D4FE90E94CAFB062C9F +:104D7000E80DF71FAE845B9A4510353192FF51BFA5 +:104D8000F020E27A8056464C7C34A6BA1DEC8F6344 +:104D9000FCF22CA64AF158FA5B1266304484E530E6 +:104DA000B63FF8218621F4E8D86183394B1DF42001 +:104DB0005B23313E7ECC9B73A512A079720E988442 +:104DC0001A937D5D6EE2FC23C817320F139E8EEDA1 +:104DD0009C7A8CC565B33E0D47C81C574FFF272EE4 +:104DE000AE4859A8547497F2AAC529AA84BA70810A +:104DF000427D401511AD58593BFBA04638295E4312 +:104E000045574392E1FAB4107864CDC2944A3BC44A +:104E100020684084C6AA9AC26651C0C570AD520EC1 +:104E20005143D6D015F91CF49032F06219FC043FBE +:104E30009E23FB593BFFA3334405DFE0D8C65EF257 +:104E4000D86500447CF24D2658CDBF1850D2C73DDE +:104E5000C2168FF6E1C29831AE121AF6D3ACBB126D +:104E60009AEAD82D4C8328512E726A30E3997C53EC +:104E7000827327A68A7C10B1D6F253E87E3D123D9C +:104E8000AD200C8FDFB51A040EA761D27C96257574 +:104E9000332599BE9140654DE8DB86C0D3B0624EA4 +:104EA0007FC5123B06DBB9506A171947ED27BD2AAB +:104EB000F65487715417EFC5C7FEAE591CCD378421 +:104EC00042B88BD72ED56CCAA20D2F2293EA251893 +:104ED0003872E924BD43E20DD7A1D3ABA176EAC570 +:104EE000EC6B852D432A975F0002D2B936431F0130 +:104EF000959FB9C5E3B90DF4437A1E3854D277189B +:104F0000EE60963AB7064FB8951427D63256C91AAE +:104F1000C231CE165D0E800D1CE9F699BED47F938A +:104F2000E1BDF8BE5B303E55F9B0F0F0FBF75194AF +:104F30000FBDF7E39E4B8148272FBC888E8FAC5066 +:104F400046E2D2B9FDDB05124F9E6A2FD1A320990C +:104F500039E352A6281691045886362AB534A58519 +:104F6000D939209150BDD4CF1AF05AE25511383CAE +:104F70006A9FBCCDEB5249437F3C15053F99F4A392 +:104F800034E30C21774AFED6CAF3B43002842A4AAD +:104F9000C6BC8A5609AC93455E53E9154CDE946F46 +:104FA000322B17D5FA4822401F426AA656CE374BFD +:104FB0006C53D2D90847F4D1310187C5C21D39F4E9 +:104FC00039DD331CF7081D89E9CAE88F4DDD8D01F5 +:104FD000535A3FC6FC88FC8E9FE4A6303C58F83BF1 +:104FE0009D5B6181A1DEFE5399C663DFCAF425771C +:104FF000730D3CC92748DA8036F24499D8D75771E7 +:105000002914C688A60B22DA947B7806238E580EC4 +:105010000FE4C0DD54BE374E280C68BFB516270913 +:1050200035EAE61018AB5B194A7894D8802BF6F075 +:105030007AE1FB649949D2D4226D74A8DA42B1E8CE +:10504000AFFFAB2EBC2BBD9347EF6DCE7C3B1C64FA +:10505000D2F18C770AFE9C2852068E06E81B11D0EE +:105060004614776B81866E95B2A830024FA4D5D2D4 +:105070004427C5A2DA5172059C80C08AD74BA45040 +:105080001BA40FDCBA8BC65A8C13C41C58C1C9743C +:105090004CCCEE2A7C6087E9D19B1D5EC4BCE67DCA +:1050A000E148A84F74F787A5C19BA30A0424980878 +:1050B0004822190C73CA496BBA11551515A6F30D80 +:1050C00013E1BCB0A1F6444B9D2127E57C7DF93B63 +:1050D000AF0E1779D7B93582B3B1B6DDCFA96D3927 +:1050E00055E6C3999CBB6A2E049E0AFAE5733627DF +:1050F000399B9321EEFB895EB294C297039B23FBFD +:1051000047155632E2365999FF3DF132E94F45498C +:105110005EFB8FF0C91398A19B9E4BAE76DCC04717 +:10512000B1F8CAA2BC0063FCFDC089530B3C1F0E42 +:1051300098003052C369CECB56C4CEE6E61A40671B +:105140000BFB0F7F6FB6B7035995F1F0749561FFB4 +:10515000DEEC88DFC680C8AD0C492E677B49710C38 +:1051600077744C6E83C4EC0F2AFEF54BB1E51B132C +:10517000094D1E23BC152C0F3A35B2FB10926B6CF7 +:10518000DB3C6D59A45EDBFC2469A945AFA5E8CBE7 +:105190000E07B196F55EE7F11703F7545E55CF7B26 +:1051A0005CE68A336AF0AF0C2B67BBF049F633BE7E +:1051B000776008E2815A56E38AF95B21A3F2035132 +:1051C000CF0B7A4C4616CDE8CFEC46EDC92B034DFC +:1051D00013607E9DE1718DCC28DB36082FD6FCFA5A +:1051E0000A14C078255C22BE420D71E95E20392F79 +:1051F000480FC303F5FF2D331B71EC2773CDED551D +:10520000FF49D3DCE8F6E1679003E10672D13A8109 +:105210004625E13134A1FF170131AF558BD616F386 +:10522000D27CFA1E162E38CB2A1F99D1E0F2FE8AC4 +:10523000DFD2C5196556EC40AE49A50505600440AE +:1052400084B7E67D0F1A3CA5976969C50586FFFC02 +:10525000BAA5324F99A3E3427005D545EF3DA96346 +:10526000C31C2926026A8B398F3486AAF6568F8F83 +:105270002BEC661EA07903D026A66FFAE8C78FEB49 +:10528000AC91DA44082BF8F6E58AFF14E379719DB6 +:10529000EFEF5BA1E9136D5609E1727146AEC4C52B +:1052A0008AD499A75C1697F5D8AD7F29DDA15F2632 +:1052B0003AEF7722D79DFF4A43CEA61ECF0760B7AD +:1052C000E10295A6C03D9102E7277EA3F668BBB830 +:1052D0005932B2EA0047289A3C2785C65CEE65241D +:1052E000D28EB57CA53F2AECCA69B7336BFE13A2F8 +:1052F0008BF94A1D1EBE1644FD958B3DDC40754F53 +:1053000010862A4585073AAA4F8ED9F5077FCCC06B +:10531000DE658CBA2F92BD469673442A8DD7AB6753 +:10532000284C3BFAFF25CE91B03478571FE3521D2D +:105330006E9C8FE604265EB4667E93D24ED2D17BFD +:105340001805488CD89FB345DD1BEBC6289434D58F +:10535000DAA2FE33FE2826A82091027097802BCD7A +:10536000569834EE5C43CC076B48BF11A4571C44DD +:10537000693CB53847C4A573E33DCCBE8E4C5C6830 +:10538000DA624D8CA839B64E041C2726BA0C74C9B3 +:10539000D5E7A36A77741F35132F8719F6C9DC2B5D +:1053A000F3C380946AE0A721F9413516F09C9192ED +:1053B000316FB2AEA3B9E0A8545A86B16687C50B67 +:1053C000AEBFB6C2F3EA9685DE05A42A27C49410C0 +:1053D0009E1BCAAA59A9700D972499B211B34AE32A +:1053E000DBB00D7145E30E48D4A1D7533A60D955CF +:1053F000DB2496D1A679AA0524E0D67C81C6912D1E +:105400008AB4C92A5F0086DC81571FEA24C38BC98E +:1054100048A1AB05FA7C0BB3D8F719917620971603 +:10542000E59D93D94B78E1F0F8EDE92761638D7B39 +:10543000FA66A4EC9A714CD7C8E6394BE49215058C +:105440007CBE6B896F7EBD6D52D781E7043D39DD2F +:10545000148F518914C9BCCFDB2182BCDF8E86BD7D +:105460008EFE46B929FBE69CC58560DEC37CFD1E29 +:1054700036BC19D1F4EB8AB32DBF2FF8EA65899DAC +:105480008ECF935F4806EB635CDEC022CC149E1186 +:10549000A65C7097CF3DEE757374E34F7CE0A9B6C0 +:1054A0005863BD867A7F72994BF3C4A8D0BCD938B3 +:1054B000E1E8E5482EC8E8C7D2A2F6CDFA7DFF663E +:1054C000214E6E2A517CB6D45F11FE8D7B1AB2AC90 +:1054D00072B50919019B560D5310B53E928B106B96 +:1054E000260FB3D9CE5DED3AD8B43DCA14E4226696 +:1054F0008DAF90F5790CF1133A7680F0767160619A +:10550000DEC235B1541694B0EB84BA8F50EFA37E4F +:10551000E9F8942300FEB8F1C518D8B0F2AA816268 +:105520008A6150E3AA0BA5273AF2396FC3211F3FC6 +:10553000B76D78DB8309B3704EDF5C3173D78C7D38 +:10554000F53ABFBAAB1D5B54CA1A61DBAC257618BD +:10555000F06B418DFAB6608084E04FA96490563DAF +:10556000C40124B67ED63599A5FBC94CD2367A3E05 +:1055700073767978F0BB44E83EA86413E1258C8FFC +:10558000CD06792CFCBEFED6C6C166E39F3909C4A0 +:105590007517C3861CA045110C49B0DBF5CD9C22C4 +:1055A0006DB1E25F48596983D056933FFDCCF37AE1 +:1055B00052B2E3B6BDB29D06E699201EB91F257A08 +:1055C000B25FB828EE7F015DEE49443559BB046EE9 +:1055D000F9560B54578A433F45849ACB5A0DF6CD62 +:1055E000CD9CE3002A06FBE31AA746983290B8291F +:1055F00056B6B95C7F714B1AEDBB9DA3552EC97D84 +:10560000F8F46A9EC1BB18F8A0404011496AC9F776 +:1056100048AB0BE61E87DF66D6E216E64A230F6626 +:1056200055A4F4D19153045D020624B457ED0279D8 +:105630008756ECBCB0C573A127BFAE6F47C27E6D65 +:105640005634AF15F569A770D5EA00E01A4F7A8C89 +:1056500026BD615767967A06239C0B78C19121C8B5 +:10566000E9C1E8FB62586F3ADDFB1E3643345A430A +:10567000033A2CA048BF52BF14A725DA724918C4B8 +:105680003C096E75908648036701D954722B4FF21E +:10569000BEF59AC1DF3158238B3B8F069DDBBAE004 +:1056A0003427F1DCB5A0112C66A8E675EA8A47F824 +:1056B00098C201CDF716D050552D43B00D8E18501D +:1056C000AD2F97E32C30FC92918C7D8170DD580BCF +:1056D000F197018B618DD8C4A0A23B6E2D4BD323D3 +:1056E000C94BCB402CB7D1E0A4A2DF297182AA918B +:1056F000C7EE53A88DB955D5D5A5ACD639BA194939 +:1057000059543C58A6EA46E370B2C54EB69CF839E7 +:105710008F97CA76C6CDC32DA4F67934BD7AA46B13 +:105720007DCA674E067E1AD1E04F8F61CD4C5D5623 +:10573000C558A7E1B3E83D31E569BE7FCAFDCCC9D4 +:1057400076AC637CCF9C0AD62C05392EE0AAD373A5 +:10575000E1B3B4D1AF7223390D1E28532F08F92CB1 +:105760006DCB6CC0EF966F27E264659F82ED51A40C +:10577000BD250D86BA1E72A11676BABB64F261070A +:10578000D53DDF5E837EABD25D9D7A6BBD0E265B21 +:10579000A4688E1AD59C16D043F2B309F3DD666671 +:1057A00051E06A172ECB11433BBA5640BB7B9702A0 +:1057B0005728C8D77EE2E000EB4774848AADAD0D70 +:1057C000C57C866C5B9FD9A8C737EE36760921E089 +:1057D000E0F98F7D2A114ADDCE14525B194C75AF6A +:1057E000EB010B77290251EFAF55064B74BBA004B8 +:1057F00006BA3B832DE4493D1ADD6F40B696F6B4F8 +:105800002F81A39907CD28897DDB8F448FA74988F5 +:10581000FFF84606EDC60A797136B2483C33C9A690 +:10582000E71E4CAF675EDCA2BE724B31FA6ED1C38D +:1058300007F71672531A4739782205B5340BFDBCA9 +:10584000DEE2FB8DA804B15CE13790CD1C3C1C501E +:10585000F6E2E0B816BC427A447C4998CD3F48E075 +:105860007C7AFB1361DF218A8C4C45BCB92CC9C101 +:105870007FAC6B5FA172130722309701EDB0AB8252 +:10588000206ECA1794544327FA6A9F2EABBE3BEC96 +:10589000037BE43E5E97080CCB62503B1DA4AE6FC9 +:1058A000465F708E121828BC8E0033E6DE86C8E58F +:1058B000F5EEC996B74EE2843BC809B8092291DBE0 +:1058C0001A04522B81916C87E7CA22EFBA81E52D29 +:1058D00022F1463C9663D8E401F2D2EE3B19FA5924 +:1058E000ADD63D5A3935EE7741AAD4465565610E9D +:1058F0003BADA695D9861DF041C6BCDD9A0EBEC053 +:10590000951328C26042EAAC45F9BD4B10137725C8 +:1059100034A61F5C94391E86603D8C6B408BE9F386 +:10592000A6555F475094555E682624B281ED83EFFB +:105930002A868AA925E4D3D8B998BC42F2E322E7A3 +:10594000B21E292834FEBDB0C66A3C5641FCAD5B90 +:105950006CDE75C22F23B0B2CF7528228D33882F0D +:1059600047302ED7A4C8464318E7A21148EE75FD6C +:1059700092FE05B1407807C15379BDDE848EEF8673 +:105980003783DF2CFFBF4BAB6CD268DDC6C7C9A223 +:1059900094E131E16EDBD0FBD839857A4E2518FAD7 +:1059A000BF897E40245DDC04F2DE9062684B17AF55 +:1059B000DC7860D5C73E267265722DD264F4FEDBBA +:1059C000BADD9576CAAA8FA3EFA7880B99E7DA46C6 +:1059D000CFF92C7D4422AD04726E7D0BCFF07E4555 +:1059E000282E668E42EEDCF1BF5310526334AA7843 +:1059F0004AFAA6BBF72634B940AEE2E0F575A0E45A +:105A0000C748211A5705C440DAAB79845A532CC4CD +:105A1000137AE47152615F1F7E687A7A70472A8A2E +:105A2000114282E8A06EB80ABE2DDE1FD7621E3872 +:105A300033FC679B8439AF679D2D244813EE9C7718 +:105A4000754A000B0CB1F4C8E640F370E3CBFF7E5F +:105A50008CB26133DCAC413124AEDF6768D71C4FB8 +:105A600005892EB1587C0AE3F162ACFEC8459F2936 +:105A700094AC458444B9C2EB5FCB74582E4FF28886 +:105A8000D2F70BB2D0DC942D182040CA84E937EA53 +:105A90009F2EF09AEB9EE131FCF94D915BCB5AECD5 +:105AA00062A9019CA2123AB20CA38ABABD261C5468 +:105AB000A2CAA254AED8E8A1C386FEF26F03F7B221 +:105AC0003C913694C2E9BABFACDABE2218B8E5867A +:105AD000693FBD253DB3B38FCF614E3C5DDF43D001 +:105AE0000AB0951FE293667C8A2D0CF071AE5C02C1 +:105AF000B45BFBC274FD9AAB3AC2A8E2EF3D5728F3 +:105B0000C58E5BB9A9D241A1C0274D22F88FB9C07B +:105B1000FC866D9E0E1B1D9B46AC85A04A0EABF607 +:105B2000ECD14BF2803A81E7C7B89D3E05E904A469 +:105B30008A4381A0FBC4CCC5780CBB0B0D0CCBB148 +:105B4000EAFEE49317F06FAA8FFF5A1F9410BD224C +:105B500095CE91F45EEE221BF83771D14E5BC2DB1D +:105B6000126020FB7FCD089C05798E032A78FE7D8C +:105B7000B63B3D3A51F52283B7088D8A2EF8FA9E3E +:105B80004C343CADE0B52C37F973C967CC6C0DA92A +:105B900087A614F41BD2AB38CE204604A42C91DD8A +:105BA0005C8EB36ECC85944B5AA98931429198B9D9 +:105BB000396E21A2E275FDA9420F22211602B7BA61 +:105BC0009103569843CF18E2D91BFA46C9AA4B5DF8 +:105BD000351DC1B4BF6FF84910A863ADEEBA4834A3 +:105BE0006EE1C39BC399E122B8F9004C494A4816BB +:105BF000A30FCD5BB90DDB5F661F130AC8D5672FF6 +:105C00002D87772B9754389FCE8978D44AF0116727 +:105C1000B89A825895B06FFB0802E3E7D1AFDCBFBA +:105C20001DD08CC753DDC1BE832C39BCE3E5384B96 +:105C300079DF74FA18923D437240DE98097C4CB1CA +:105C4000D6BB7FD4400E6EF691C8CEB82E03320379 +:105C50008E5AFBF97AC6435D2137136A4382F0EC12 +:105C60004227076D7030C7A541BC1F034EF86DFC7D +:105C700093CA912DF026FE26450EFC6A7F658D4263 +:105C80007C6162F92B0BE6B2CABBCA971E37C539D5 +:105C90006C08856F78D0938709A804361C966AE152 +:105CA000A577960BB45C38155B73BD00350489E7A6 +:105CB000621341FF4D627D44E3D502813FBE6B5DBF +:105CC0003D1A78895F4640E66AAA08DD254C59935B +:105CD000549FEB5F9AADD5C2E5E3C956A8895D58DC +:105CE000A26736EC86C361E8FC906FC7D16DA97AD4 +:105CF000ABF222225BBA68FAFD65BD64F6E75C2769 +:105D000014F9CE290E30A224A32B82AA24D0B828BD +:105D1000D539E058D99CBFB1F33DFB483BE3DAA04D +:105D20003235C5D25BE017A19A595D826A40DB4BE0 +:105D3000D9CC67786A8D4C9A47A7E6FCBFDB707FA9 +:105D4000547953BF7481EB2C795DB8CBACD62FA6B8 +:105D500051736865C04D2D25CB3B3B6B5DB4CE7454 +:105D60007C9F725D2864838E3828F2E4E47048C911 +:105D70004077FC107E8F2DD5544C105C2B521CA408 +:105D8000072657A1A0BF8A142C0BC4570F72CE1D33 +:105D9000789BC6AA0429058350EF5E53CAD0142805 +:105DA000D0A2D82C8545782C00DB462FE689679A4F +:105DB000C9319BAFF503BB16CFE31B6986936EA178 +:105DC000A8429C8A7830BED3E91146F64B456A1941 +:105DD000F3EB71DB03887561A057E3DA8C018FC1A7 +:105DE00091F282ACCD967A7A6B2CFEF480615B0DD9 +:105DF0005D85E3FDB446FD7E3797081E7D0854A0FF +:105E000000CF9F17E7303A215D2A5B06A17876C95B +:105E1000EB6A635781802B205271FA40C2A80DEBC8 +:105E2000381788CC9F431D328F878D0084AEBE56B5 +:105E300002CD633957855BAF02285BD1EE11F921A2 +:105E4000CF946C13EFBB7D59791D536BC820333849 +:105E5000788B12F55E7D8424C923B568FFBFCFC45B +:105E6000C3FE721A763A6E068B66FF3E2C5554744A +:105E7000B4C9E838B6466BC42043D60A4297547971 +:105E80007D62AF803C0FA2F2859D533492DACC7ACA +:105E90007066B0DE305E9309F2A501D2CBC6D36F37 +:105EA000BF31D62164960D805B1230389D69A83EC3 +:105EB000F6C3F5B7DF3E07BEF5DB083362FF0856D1 +:105EC00070AD02F94D784175389A4566597A3D06AC +:105ED000540EBDB303CD59DF04033FEB68AB3B2148 +:105EE000574402FD77F908CF6D33F7ADCF64E63A3A +:105EF000DBB8FBE3579092EC4F58FF807CFB794C6A +:105F00000A3A31DE638CB77C86F5822F3108ADDB2F +:105F1000817C3FCA0680D7A40D20CFA1812E6F5966 +:105F20000AE38CBF692C7566041049A4D28ACF4F4E +:105F30009925F5A433502F311791EE577E7FDE5E01 +:105F40001C6B4EF4954BB2831786D243A2F8517F57 +:105F5000A381F930F47C655F47C6D11656B594AD80 +:105F6000E29222CC6EE8934E87516CADE0741443FC +:105F700071A463B73C7F37A13C1F42F46B00354BE3 +:105F80000387A6288D5DA02E7221E1E5196EF52FFD +:105F90008F3EE06D0E587CA83C3892ADEDC2958FD7 +:105FA00004E926C6511EB72F954A6ABF982A61EEAA +:105FB0003AFB3B6908031391EE8416950037AAE07B +:105FC00094EC39C28435AB1E828E6FF2AE95B9AABD +:105FD000303D60EC8900F381044EAAE97EA2B9FA53 +:105FE000CAFE0C84173590217FCBFAF373765814D0 +:105FF000F76D59C2273F35503C72F3FA48241A61B5 +:106000007218AD4D0FCF08979E41EA4C2614F72326 +:106010009AB38A79593B6EDC98A59E784ADE790C52 +:1060200018C128D33075B3AD6591CEAFF5DD2EB272 +:10603000F4E395CDFC8C59E77A4F4CBF70D81D0026 +:1060400016C04EF19CFEF31262918F1083CADC756C +:10605000A9BF139020099742A7506335DA42BAE1ED +:106060004DB0A6BF2C47F41D471B188B80EBB0F931 +:106070000FC63716DCF62D693B7C45A32F1B208607 +:1060800089FDCEBDEC62052FD1109B83F6E97AA77E +:106090008D68DDE19AECBB3F998B5EACA4EED2FE3D +:1060A00077EDD7F828528F8EA697E31BB70CF381B4 +:1060B000F592644FA352D52105859A035040BE96B0 +:1060C0005BFC2326F1C6CF59CA1154C6E7F03372E0 +:1060D000E5A68FCC2C538AA4095DF20F31F091FC18 +:1060E0008A573BDFEAA57CE66F0C8313023935BE85 +:1060F00092105819D1B5B330FBECFF6D03CD66B4E7 +:10610000D230BC32B15285FCCD627975AC464F3E7F +:10611000B07709992FC89E1C6A34ADE9E051A843B5 +:10612000D23FA9D9C57AAD08F538942B88E7478DB9 +:10613000EBD35F74159800F4CDC8B882D2A4B253E3 +:1061400075C0241193FE8975451B45C4578D188B66 +:10615000F43BF1E0D27EDC1796AAE49FC3E54782C8 +:10616000D116EA389AA8A36BD5378ACE68B5FB3525 +:106170003BA0F902F8EBE0FF6BAF6E5734E0B57D62 +:10618000A1451850031578D4A1B7C7B522C69D9371 +:10619000F93818EF99F7A997E0E029A9654FBFB53D +:1061A000EB0F310FCAB12651CDA8191DB5FB6C8478 +:1061B0009A18529DD2CF8CDD51670BD52C5C956A15 +:1061C000678CCAB085256A866802887462B077BA1F +:1061D000786F8AA09DD2EF2DA4EFDBFCC62C9A57D6 +:1061E00078681F0F1D372B4E5E5351459867D75364 +:1061F0002FA4B15C21D8019028253D4595D98C99D3 +:106200005311DB8DF06CB39EBEB64AB37B234C8139 +:10621000FA6C7661DE40631C00CC883287EF6E4CEE +:10622000C76674F283AD3CA7F6CD59A881A0B99E8C +:106230009CDAE0471113C60C956285A0B887756794 +:10624000157FAD55C6A8C89F0B311D1DF58EE71FE4 +:10625000253F4A6659481CC543964595C6FAB6F38C +:106260005C661C779DCE675CE2A350154685F0C244 +:10627000DA70053D5D49E9B169976F16E103EA35CA +:1062800092768EF46B3B223CDE22B5021E0B188305 +:10629000F76AA98F98741C0A6EFB08271BD883978E +:1062A0000C7B7CE0EB6C8A13539CB0C3BB9C219E9F +:1062B00098B98F4C6365A4088BF31945D669A1BCC6 +:1062C00031FC5054CC5CEE46A93B4674625630F823 +:1062D000441C32BB1ADD73CCFDB8A275B99987197D +:1062E00099F5F1100B829003130A5E3403332E5A92 +:1062F00028DD1E73A2EBE44EC72DDF0835AC23FD6D +:10630000D9FA0FE39AC7BC512645F05D20CDD39151 +:10631000DFFC5D3E2E4C747181909EB8BFBB69D28C +:10632000662826B79617A4CE85F20E5D56CF5B2E53 +:106330007C8026BD6C9C27C835FCEDAA3E2D4FFF06 +:10634000E8A407719160DC40344ED0BE6F5DD0BAD6 +:1063500077C94A20DF73F3BEA548011C941322407D +:10636000D1D303DA8DCEBBE7AE3D1E1CB23EAC41AD +:10637000C6C4F1B130DCE8A2C2A664B636A2BA76D1 +:10638000D961A794B44845E6F22AB568E23097404F +:10639000BE2850FD67D2D3BE96CEAF2837D0048D2D +:1063A0007544E90FCC5DE22669FFA00DE3B3B22F7F +:1063B00098155C75524E2BE0C9D10E63F5129163AE +:1063C000988947704AF5AA43819420F0DE582E9FA1 +:1063D0006138BBBEC0F10BB5ACBE29643B3EFC636B +:1063E000D5709469EAE6F8078AD22D2FF65FD07C43 +:1063F0000AACF131B5BF239251A9EFF0CFD40A5FB7 +:1064000050DD0B622F88598EA5818C76550C70EE6D +:1064100006AB7EB5DDEF2B89069E32A13447E9EE4F +:10642000A958EFBAF286CAE69F695A6F3FB0CCDA34 +:10643000ED8F9FED4C16839D6A5F6FECB8C91DF51B +:10644000C456D9DCDEDECF92726D3488738B8EF940 +:10645000BBE57BAE0A40C8411D712BD87055526612 +:106460007F64C30E97D8B42561B753BD7E7892463A +:1064700083B9D7242D1272C4B4E3381FAB928F2591 +:106480002A18B375A80425999A317D80196B470F96 +:106490009C39475FA669E760D59EBC2C4D1A06C3A0 +:1064A00094E25CDCA06C08266C17B9BC02472E4C49 +:1064B000FFA3C77E145FCD4F5EFD253363CED41599 +:1064C00059201B72D0CACD31CD0504C106911CE400 +:1064D000B87D6BB1087CD4670131F7BF12DBCD41C9 +:1064E0009747ED47D821C47B1997B12FD2D9BAACC1 +:1064F0001F1D5035453CE53B08D41EFFB817746599 +:10650000C1AFB77BC3B646A9E56112BC5458D56D7F +:10651000FFA3074E55C8699D81AFFB5009CE145BA0 +:106520004113C3D144F2021CAE5326E91A9FBD6A3F +:1065300049B8DCA99E7E7DDE316C9A6C48C53989EC +:1065400042ECE799C2C19E3293CA8AEC624321DFD2 +:10655000892342DCB2993E3C4B4F9530122BFD66AD +:106560009288FAE23BABCD0F29D394A8B71F975E70 +:10657000F6375139FCCB879DBC3D1CDE976B8C1CDC +:10658000F5CF4670D7DD9FE1AD3B048D3188B9F280 +:106590002EDB296534EF29B07CBDA054E97BA8BF70 +:1065A000CF549F65BE79D664A8AB22D9358FB9FA8E +:1065B000E326EB2EE9176FDB937CC605745C339CF6 +:1065C000144B5C05F13887A1CC76B3191428C206A8 +:1065D000BCB29814F97EDF9FFB1A7533EC5F5D9EA9 +:1065E000A5A36556C80142CAF3771197D0AA53F301 +:1065F000BBD1067450E0BE716DA3534FC5D16EF58B +:106600006037215905019EDE4BAD73D306302FD282 +:10661000D0C869204CE4E6846614BF204AB8EA7FFB +:1066200033831A9B7E343D1C44EC33A441417E6489 +:10663000A88C36BBDD1BD07EC98981DC7EA15DF4D0 +:1066400034D71CAF234C06F73AE2E66E3CDA88BE3C +:106650009F2790EE324571F546C2CC10B67051A519 +:10666000424CAF4C7EF0DE0D34A466119F7CE28874 +:10667000DA193ED3B14DF93CA79B780D014CC57C8E +:10668000E9F0349EB1B95B48F7A74DB07CE5E3452E +:106690007778BF280B421F5F1F2D9699241FBDE3FB +:1066A000B2B7A51418214D6F4996F70F62DFAF2BD3 +:1066B000D9F2CC19BD1020BEFE4AAE8BB2CF531119 +:1066C000D99F86FB8E5ACBC45F4E750B336A5A65D1 +:1066D000D71B3DE21BA04052E561C950FBCD7C2891 +:1066E00011C0184CC6D4C57786BE3E79A66868C16D +:1066F0007AF83DBE0E858F7C20C7B08F47AC9E8652 +:10670000366756211D8002A4E8175D5F1AA3F33592 +:106710005C065ACAA57FE07DD2377BB9A45956D909 +:10672000E3DFCB9C2F914878C25E2C298C7EA1AEF2 +:106730002232F37E3E39A51F0A427AE5172DC7DDC6 +:1067400046147ABB6429A5211FFEF06A7F059E8945 +:106750005ACD2E9861AEA85AA8C7D0CA0395A16495 +:1067600099222B5A6A1D4089C967213D72AC70433A +:10677000F3BE12A9D2C5AF144E3F60715F3184D50C +:1067800036A31EC1F3A2C44AC30399F4E8F19EAF35 +:10679000904A530D2D6AEAE3564EF5088827324A8F +:1067A00084E6A481F9DFFF29DC6F201118FD105069 +:1067B0000F95C10FEBE25FC7E3A7A93F3B2D19E996 +:1067C0001782CB1A6F77270F490C42B4C7FEB14529 +:1067D000906CBEAD95F0832ABB3A83EFFE63E67BF7 +:1067E00064DC3930088DBE212B6741FEA248517C04 +:1067F000DEAF525EC83C6B5E34303A26703DCCA6AC +:1068000060E0F26E6205A30014E557F93D96ACF125 +:1068100020BDFDBBF173515A9D982C60D0C2201A47 +:10682000D84F04E36A1BEE683E855B9202D367E3B0 +:106830009E2334DBE87E0401DBCB41CCFD84B046F3 +:10684000E7E91D4DBE2CEE7972CDF13193C057773B +:106850005086BFF4D20A59D319151245B1A68951F1 +:10686000DFD7B4260C7907E2A4D889F29E97E447D3 +:10687000047796731FD959340BB01EAB9576A2EDF1 +:1068800065F90F9A2FBAF6961B4A5B9F572BE7D5EF +:106890005A77856099DCA9AEFAFF85421040A78E31 +:1068A0007A0FBC5B601CB9A20A1CEF8C5B56BF81DF +:1068B000A1774375EA317F177080991667DA16E67B +:1068C000C84D45773160A506D83A688783C6C11997 +:1068D000192F52FC0FFCE6458B805350D9AC15E8BC +:1068E0000AED8335544701DF5B8EECA31C65A9CE0E +:1068F000D4E231C7AD568D2718F89653E71CDC0D4E +:1069000081456BEA6A25D8F9C96750C17A88A71111 +:106910000E8E05768B5F889DE0F8D555155CC0BA64 +:1069200066565EF8ED8E6469348261F03036FC267E +:106930002C74F1DF286721FA41F45E0CF73944FC2E +:1069400088EC78A90CEC4368003C82C1BC78A4F2C6 +:10695000F76C04BF3BF2F2E93F092CE8CAE8F00FFC +:10696000AD76C0B1F5E1B3B23E0C593D8828AB68B5 +:1069700063541383B38E1429D263BB5A7BB5970437 +:106980007DEB6DFB57A1E06AF430C9DB3AE3443E8E +:10699000981D8931BDDA0CFF8DEDBF8833F3EC8C87 +:1069A0004E563352735C15CA179837657D8B147435 +:1069B000C280D4146CEA7008B1C614F02E6AE921C2 +:1069C00013C002888DFFF6FAB8B552890611E56B3F +:1069D0000D376F68C5FC29787B2262370536A1D454 +:1069E000524D08EE73518CE04E344D98B60E322065 +:1069F000D898FBD55D91EDCA5B1740CE22016DB1F1 +:106A00000F221F37D2BC368161269A5575664946DA +:106A10006A4BF2B22A7494204063ADD20C0A8023F0 +:106A2000FD97CD5C76FA45D97B7C01D984E9D521E7 +:106A300065980030E63D5DAD19451F950D99508A6A +:106A400081D75750298426A1C927F0A1CA1CF897DD +:106A5000F6591997F95BA75B6B387FC3DBEF33C936 +:106A60005E3B33A7BABADDA1165943FA338D6E5F88 +:106A7000E7DDA2A1A74B24ADA5E136A2F60018CA16 +:106A800072FE838066B3C4A04E51C0EE09707A7660 +:106A90004E2E79A1867FCC23F5E2D3425C707B7BBE +:106AA000B5CD2D9516046AE1E6FCE8E56F44321B8E +:106AB00050CD1CE51FE0D8024408E67A8D09E1C1FB +:106AC000CED44AD76F1D12D1F40C89D55FC2D97FBD +:106AD0000A474D0FB2C0E3E7C879661B631126244D +:106AE0005B9F487DB00AF3F0767D1EE4B693FEC549 +:106AF0005EEBF01EFC58F9FD0427275EFF44ADE86D +:106B00003E7725290595563CA72718FB6D733397CB +:106B100099123C871F1680CBABAF2E88174EBEF361 +:106B20005853E9B002C7D26F196E7CD3E5B2890F12 +:106B3000877F0FD1581321B1E6E5D0470C5DF5747E +:106B400030A6C1E26C5B8D4864662ACF8F70D87620 +:106B5000985C23703FC92D8A099B5F1E838047F78D +:106B60008B7BA862EA6586BF51AF5CCC8F71495EB2 +:106B70003BF2757ED0F22C823DE076465F3D04F715 +:106B800010C0D20CE4AE2D87FA2E04E3D308F149ED +:106B9000E180EC451D81D893B70A485E47684EDD19 +:106BA000BC6D6D6E60A57692308C44C28B255332DD +:106BB0008F9E2CFDAEE64C9797AC4FB29374039B1F +:106BC000D8571752D08A1685334EE65C9CA5E1BE95 +:106BD0000263FB68923D160E47A328ACC2CEBA51A1 +:106BE00034FF096B7253CAA14432C963D798AB2DE5 +:106BF0003CA74233882399A1601B9DCDE62AB4555A +:106C000026D531421F79268CDB01A6561E75F682E9 +:106C1000A41907989DE2A9C2C3AA380A43858F3AEE +:106C20000A5267A6D85345C89C9D28ED8B53EA03AA +:106C3000A23B37DBEF99609B5A35B80A3BEFB0F1C6 +:106C4000C6D69D23A288A282F80136CA36BB49590E +:106C5000F71D4CF0765F87859F9D5323135AF409E7 +:106C6000425ED1B15AC42ED5B13F527C034E592752 +:106C7000DC6FF848D77BA0BF9204B6A678B57A65DA +:106C8000ABA358D4ECC0D367AE80E2648A8EBA4C12 +:106C9000C701C1922DBA26FECD4B6547A49534702D +:106CA0001007A3C24FDDDA86DC4BCBF0CEC70A0A51 +:106CB0009EE143A4506B0C1843D9BE3A0ACA8DF624 +:106CC000526F6B87E343AF8F83AADA59C458B3D2AC +:106CD00001D8509CD0F9E3F1D86C8280E36496C56A +:106CE0002040762DF2084CD5035A40644D837462DF +:106CF000C51C50405504ECE92DD1962ADD71A1FE4A +:106D00001836F624F97E1AEC12ADCB6B1B91EF6BA3 +:106D1000DE9737A8AF45E2A8A657E6268CB62D85A4 +:106D200024F8322F58340A48B46C9FBBE4676E08CD +:106D30009CA50620F40A4FD52D3E6872523AB30E38 +:106D4000F249F7FA9E48B67DFDF3E42F05B4D7B8B3 +:106D5000C8A2AAFD23974A3365EEA7E6A98EB8809C +:106D60001294738D4BFF2165F371471CEB87C6327C +:106D7000FF09D02DEE7A1AD406C92C1942EF8C2BBC +:106D8000D561B19F36F508AEC1CB5A84B16C7DC8D0 +:106D90009AC728974A22547EE851F28E97C94BAD84 +:106DA0007D7456B0055AC621B3469B9DC14B73DD19 +:106DB000032F90341D486DB3A180C754970597AA3F +:106DC000E697FF9003C75434155F108AB637EEFD7F +:106DD0001BFED2C9F5C2DC7012B956108137AFFB69 +:106DE00094C0CFF95153FE80CC4B23D46AE4B65CF7 +:106DF000F73940797A201E1F6FFD5B87C64DC73C6F +:106E0000BF51E90072EA61BA63FB90B24AB884C02C +:106E10005725078C827C3EC1C6D45011BDAB33D3FD +:106E20000961002A7A5E9093DC92EB8B984B5AC9E9 +:106E300082DD03BE83B7459C636E0DF4229D04E49E +:106E400000273DCB4C487ACC8BBD788B83770F994C +:106E50001E69DA297176B7AE06279E554ACA79C9E6 +:106E600083AEEBC9B7C5D11327E4C85395DEA65945 +:106E7000EC927FCAF717EE3D523124369785876E24 +:106E80008F8EB86052F5AA8088C548DF9ABC28F575 +:106E900090D42F9CD2CCFBE339F52B0A351012216C +:106EA000511048BF53458786889E16CD605154388F +:106EB000F52A40CB49E10A7B02105FFED70694F524 +:106EC000F613C46E6C4231D9C2C4F129BE6D19B03B +:106ED000ADA0627BD25AA4953FB9E781BEA706BA9E +:106EE000B0942AD3492843EC4422BCC3F7C8C695C2 +:106EF0007C48795F8FACED445D520B1C2BFEC9853D +:106F0000F191696E247CF5F8774135E156B824316A +:106F100002DE4A6342727B143E679080869CEA449C +:106F2000ACE406175B2926AA475BCB51A6550BC0DC +:106F30004B55613087819720D7E04D5866D6DC6A83 +:106F4000BF81EB8E8392CF5D2E27B2918E3F5A2662 +:106F50001B3004AFC601709955B2430EBD496C6F2A +:106F600092F505ED9173D4D44EF66745CAA250212F +:106F70006D99E1F1D347A5CE6B856BD7066E9B96D5 +:106F8000499BB2F24019CA70CE0E039D69DE84514E +:106F9000B6BB032A8B8F534782C34F5A68198CDCC8 +:106FA000433F66A6466EF72C76BC74C95F05520E49 +:106FB0008842B881445DBCD4B197058BCF044A5A4E +:106FC000BAB513BF22CED96F35C7D456EAFFF5063E +:106FD000199A6BF06B8D7C9CD5FCECC773F2BA26CA +:106FE000061D5D53EBC6384E7364F9EA9D25CEB09D +:106FF0005BDF5BBD4E97B76F2112AFE89E5A0BCA9D +:10700000AED44291F9C3AFF5696FC27F3218EFBFBA +:1070100015D15DAA19DA5FA1B3A8BFD589679DE52F +:10702000F5976E3E3D4049105DBED39623B9FEC133 +:10703000C5C29D0EE463A351F995FFD6922C61134E +:10704000232B2C3E26FCE0AA71A1AEA645F766CF05 +:10705000ECD0951C0220FB92682328F42669DF758A +:107060004705EED1E9D2854BB80D578218FB7E2A31 +:1070700092EA6A0E1772D49061F8F4424D9452C9A4 +:107080000441895E673FAFF15B291EC410412E0C9D +:107090004811E89E774746CDCFF43F9D908FBE695B +:1070A0002BA46E1BFC348C8D2AA4C0EC50298A487A +:1070B000C3D1586CE56DBDB6B11BE50DA55F1CBC19 +:1070C000B29AE88ACE546CE3D3F70812FA0F02762C +:1070D000AFC231BD809F63D90BE07ADC24B1662852 +:1070E00057A0F88ACE3C8683A00576C90CF1DB6FE9 +:1070F000CB8CEB875FED179C87A8C479792C86A78A +:107100000EF66D5D6CD852B03F733BDCE1B68E88F5 +:10711000E7AB410F2F6A4B0636844EB6C73C5DA3E2 +:107120001F97E6EF0269CE2DF1FD270D4126E3689A +:10713000C8CFBDD178DFDAB60A05301E2EDCB6FE28 +:10714000B92A4B42208E9918CE12F88245AE41DF03 +:10715000BD314E54485B392E8696852F3DFF9805EC +:107160000D02DA90DF64DEF9C46A5C83C963EB0167 +:10717000795C06A5F6B799B9E9DBD04A620FBFBAC8 +:1071800092370ACD2DF373E968D405ADA7AF36A4C5 +:10719000B488D59223EFCEC67DAD0F372F56ED8143 +:1071A0000A449CE8A6E410BEB35F52A5F83D2DB694 +:1071B00064F0CACB819E4A08776EE5AF9156357D63 +:1071C000A8759EEA2167EC057C0403485C418FD4D6 +:1071D000F984C7A26A3EFCCC657D035125B1A18725 +:1071E0000011DBD65C372BA378AD851C6C036015D2 +:1071F0009F215FC5CB855D72DF1DE4E8CE92F5F27D +:10720000D409D6BF29C172DAF80C6755D4D06325EA +:10721000B6FDF5417121C793D4C777EBEF0239630F +:107220006F386317B76FBF7F79594D0F3A022B0341 +:1072300064524C51706EBE84D0875163D18A46F936 +:10724000D36D1EAE51931A7EBC0587FE25D3D85B45 +:107250004BBA546B9C28DD3EB3F4E93D2CCED1F8FB +:10726000BC08FD8112B98257BE3B5D422376921461 +:107270007C5F8479324BAB6C3B7D8ECE16EF748590 +:1072800041A95AD5737C148407500A5DE7AE6700A4 +:10729000579B625C930054BD6805A290AB812A0B9A +:1072A0001EA7F88EDC75E4EDA2CE9A6A5CD89BDA54 +:1072B0008AE4AEE14BAE17717DD962271B5A78B4D0 +:1072C00029B774E28A9BBE70602E9F67435054EDCD +:1072D000FF194162D5B38E175B38B87C37158634F9 +:1072E0004FFE2D0D7F407A792A14032CFBC1C97300 +:1072F000B15475315528E3F20269E0D127D6127EE8 +:10730000FFCE244708F72F96E7D4822693CC25CBCF +:10731000E1F7A324B9618D65231B5C47F6CA0EF81B +:10732000D43DED7AD898D6E328C4712F1D63C36786 +:107330006B40F0F616F15E38396D3D26C529BD214A +:1073400087A2F8788064272C41E3CCE091F5EF9B8D +:10735000802E370C930230358C004E2EE2D6CA2098 +:10736000731984D715015717FFC642E8257B3105ED +:107370001B626AB154B1A855B49DE7F5E4B463A0AB +:10738000171C6E0E94DE6057E569B07F4506B0E4C9 +:10739000420669A5FB0BC3A24C2976D2DBF7B234B7 +:1073A0005A5E710242865FA5451E800FC766078040 +:1073B000FFB80E0753480EDBC6D25FEDAAF4593270 +:1073C0007D1395EE0ABB4FEF24184701EB7CB6E81E +:1073D0004E41F5C95690CC45781745D334213CDA57 +:1073E000DE844D9E25ACE3BD69520150190097081B +:1073F000065F8E4B200931852759AB19AD2E188AAF +:1074000059A0E9FB882D2683BCC13653981978848E +:107410006AEBC8F8194795A8A6D36384FFD8C68F2E +:107420002CAC2C3AEFA07DEA8539FEDE6FF4000328 +:1074300052E6742582F103A55A6672E86ABDB081EE +:1074400072D8DC0C1D8CA74F4957333E44F22D6295 +:1074500086DD5A0AE1FE2EE58935610701BF8C7D84 +:1074600025AE28F0E4E11871F4356336F2806C49FA +:1074700042F69AE387BA6E7D0CCDFBCF0CC97776C6 +:1074800087F7DC9F3441D1C9B49F0E6AE10A6C7D55 +:10749000229B6ACB1B7E598211695AF16EE3DE5D35 +:1074A00044712142269F1C17A36983C738BC5BBB6C +:1074B000431D5561A706AC4A23D7AC195FED3506CD +:1074C00039EE454F864AF5F7936E74B37FBE0C4193 +:1074D0000E07E9B9CC6FD4EFE0F08E239DA98EC4DE +:1074E000B99BB87E67B7D100AC33AE49574540A9C8 +:1074F00002E8BC3400A5F9319D899DBA074C0CB84F +:10750000329A3CA5D1CD3FA0AA863DE84BBE0822C9 +:107510004625A5C9E660795AA2068080980B2D1CE5 +:10752000629EC1A1434B8942F72E98A7CE89DA11FA +:107530001A91873E119B27E5383AF542C90650DF7C +:10754000C803889AD4644C24A3E54937B959F43464 +:107550003CD8E556046CC66012121A9EB48EAFC6B3 +:10756000A98D6144A9F36F5363FB51AFF82BB6C6E5 +:1075700029364652935B353D71DB208A422A79AB2E +:10758000BF755F3AC1B0747C1FAC0C1DA383083774 +:10759000FEA41B602BEC68737C37F1BF1DE84E0125 +:1075A0003F462ACB57A48A0FD7F36777478E1CF242 +:1075B000587A64FBE8B16246E705898FE3EEF36D24 +:1075C0004A03AE50BAFF2D54651CFDD9CAE8108697 +:1075D000271C8C3686B60A5283A28AF02C8573E566 +:1075E000DF6FAEE866641A330AFF6750A0F2C9ADD8 +:1075F0007DE9D190E1BB8B15B20BB64E764265BBEF +:10760000F97C255CDEBD5D420C85EB28D1920FF440 +:10761000966F8227034E04BCCC717578AC1E9C1704 +:107620005D5C0C17457D93777D3466ED6D32F6B267 +:107630006FB247921A77E2C6C6C3631166DB0D4785 +:10764000A8662CDBC648B27AAA34DD1CCA24F45BD7 +:107650004FF611C4B579221194CC90388E325CE289 +:107660000B903817DB8B3F5DE01A3A3A4F8DA1BF84 +:10767000BAE00B02737EDC1B5220C5850D0F8741DB +:107680000943EE450B9E52DE042240405F90BBFA58 +:10769000DC9A56A0A095F7C11836B144555CF28625 +:1076A000E587B3597515E5DA262C47D4D415122E83 +:1076B0009E68858A7002091662E489446A53566896 +:1076C00061A24A9BF7688C96E77AC8E592F62CF39C +:1076D00099FD4FBCBF04E01642A12431DC06D882DC +:1076E0006A701CD7C730CD0BB49515825943340549 +:1076F0006C269E10FE5D55D605AF0644960974882B +:1077000030E303EE3356FC92437FC7F48616219193 +:10771000364EDCAB6B1AB9980F3C2A1C57F23F145B +:1077200064B050A2F7261CD568ACDC270D00992167 +:1077300050BAE2C38253D0172E95B2CB949C64E921 +:10774000E3CC4B3AB9B3944135827E04E077C83E2E +:107750009B186579A17BD9A806ACD283167D1EB48F +:10776000574CCAD7714A6A0754FDBD9127DC18E10E +:10777000E4E89B6F2C1878267F27A5B85AC5ACD5AE +:1077800086E066C2C7AF7443D985F7B2A65AAE9DEC +:10779000EDFD80E72AA385578FD9FC726FFFF39325 +:1077A000C9AE00F178ADF0C2D201B41FDCD4507F75 +:1077B000D13D9835C22B2A2E5886D62F3717C7F1C0 +:1077C000F33579C4DDA3A11E8F63A48AB01AF4EB4C +:1077D000E40DB6C9A98683BC92610FE103581CC2AF +:1077E00027D3E870EA218520BAAB17A8DA268328C8 +:1077F0002AB0D395044716F9AE403B20ED8AF295A6 +:10780000A584D452412C367615567CC8E14AA2BDD7 +:107810005EDB1943E4A27539323F3C12FBFBD9E72A +:1078200025B2D90F00C0AAF181BC508BB0ADF03C9D +:107830000B3D70F184AAA21A5B4538B2F3561C2D99 +:10784000EBFD9B414C94CE9A56A6599FEF0542986A +:10785000E06C83A46B8BBF4894AD91AC44390FB6F8 +:1078600030E54291EE13EE4B1A6EE07E62865107D0 +:1078700072E6631F1C9578412EAC8D20D20EEF630B +:107880003BB95DFBA378518401D2B62CF22E9B3B11 +:10789000B6C8E0CC1E843841B7136234D29B1ED6E2 +:1078A000FB98DA013DD0B4EDCDB3C03ED9F7E6B0D8 +:1078B0008777FC59B5137D8F15D0938BF989967016 +:1078C000C67FE32C71EC0E2B374F418008F6D48D28 +:1078D0005B25399F60F7E041333A6E2F22539CEECF +:1078E000B453D05CE4EFC6E49E65B7B88130DFC521 +:1078F000F8E42400798BA0C57FAC415AD7F9A5DB09 +:10790000343006C418D6D8224B68E5A44107CF68A6 +:1079100093F20C3FDAEBA99EDC0C09C1FD158849F6 +:10792000709811694F4C1F0D231C25B1B07801C907 +:10793000E5A4852F5AD21CC9AD4DA0AE0AC89A86BF +:1079400010DF2416897D5200A1E74C188C3F4405B6 +:10795000F216AFEC41BBB1054A729F8BC41FEBFD21 +:10796000F6C09FFF7C660281608DE390C24A93DE81 +:107970000FED5AA3DC4E72DED817D4BED258219731 +:10798000AA6B723E02C622E8D7AC3BD10F5267EA1F +:10799000FEDF4B7761B58C4000C7FC9BE8DA588D61 +:1079A000AD3BDACA92AB8DF78CACB44F8F4441DE5D +:1079B000224BB1764077E92AB2B192688A14B3AC0F +:1079C00000528D7F701BADA7153D5DE82D777E0BB6 +:1079D0003D0D01C9AE9867C524E5C92A1E07A3104D +:1079E00001108241932EF8F566564F90B6082B9FF2 +:1079F00036AA5F3B175F049BE1F25C6F283D7D1B5D +:107A0000FE3E940A18B3B3DF93626A8278E10748B6 +:107A10001FB89C743387EB998A7C6D4AEA9F916802 +:107A20007AB80383A19C38985FBBED3247027E632E +:107A3000CE74393FFEF7AD4163F86C514684197836 +:107A400072A6EE3FB6583D98C5EDCB22EAB1B84ECE +:107A50004077ECC5CBFEFD4213F47B0264309CB54D +:107A6000A2A65C4BC362FA3B15AFCD825A7B1DF4D4 +:107A7000DFE19708EA08192485D57467291C70523C +:107A8000A9507D741B2EDA9DBD268914DD66CF3783 +:107A900006D3130F8076066CAE79D218D6398703D9 +:107AA000AEAE2A54D82C7E587B858ADA7E5E41E3BE +:107AB00012B5BD08D3736609914EEDF68C8EFD1B91 +:107AC000EEB0182B062FA8FDCA1963C026009C1023 +:107AD0006A09C3DA36A379FBE1B544FC9CAEC0CA9F +:107AE0009D139F838594A3472A01B2D303C3DC5A15 +:107AF000F28B8BDB2ED95F4171B97949AF528C443F +:107B0000B466319D8CB9B476DBD9CD268CCAF443EA +:107B1000ED670EA0ECFBB94DC97BB747A681848EFB +:107B20007080DBAA7E0DAB9AA4C086F6CDF8BB4769 +:107B3000AF1DFE7A89E58EBFA2E05BDAC35E1588D1 +:107B4000337FEC24A9B879608F3D5546760D2741E7 +:107B5000D03A62169BFED30203245A7987E8E87074 +:107B60007A37CD853B4DA24FEC9E2AF4E5D5330202 +:107B7000D0ACD6313321E2B98B575D6A1A9DE3460A +:107B8000D2C926F785BA38CF48AE6F30163F0FD628 +:107B90005B715C087ECA29C9ADE531C6C87221AFE8 +:107BA0005106422D7F586CF149668F225DFFEBBB79 +:107BB000CD7D54E557DFF8C5B34A340DCFD5256FD9 +:107BC000C6FFB80D60B661D5D31759E6C0A5DCDA9B +:107BD00072BFE0CA7FF774D17837F68799BD24FA6F +:107BE0001A9C3FB0D9CEFF7B121563564DF59CBD54 +:107BF000127BE8F2F74943C2C96EFC1B385B6894FC +:107C0000641343A57E0942907E23A6D141DB0BDE9F +:107C1000255F64207F4192F0248CF644D0B182C766 +:107C20005206C8ACA38B968FD080F455CCF7F68B58 +:107C300031263144C92B1ABC164938535C1F8F9C1E +:107C4000E792F7FC1B1C43E053249AF896413DB69B +:107C5000E21EDCE58310E3294CBD1FE6C436647DDB +:107C60009FB3C99FEA1DFDC106CB92381AB0E2D975 +:107C7000BC61F1DCFB2D417556261195718024BC49 +:107C80004C5960D1883192D4549E21207E2BBD90D6 +:107C9000DCCB4A9C4358B85FFD39459B0F2968D817 +:107CA000FB12C65CFE9830C1A4C69B2F5401E8D2DB +:107CB000507C7FF8CE176DD9CC1FD80556CEF8D89A +:107CC00094E30AFA86CE55885B0742AC1F9E705A31 +:107CD0004693202B91CE161AC733FC64B6E2C272CB +:107CE000C35FC6FCD0864BBE9C00F29E2D19019846 +:107CF0007C921ACDF8BFB44F8BAAE34535ACFC8E0D +:107D00000625F8AE488641E40BB11ABC5E916B7B48 +:107D1000F97C5604A4A8BE6B62890072389ADF7A97 +:107D2000AFC86E82A8B1755FDC70F07B8E1668B745 +:107D3000B42B462BBED003D192A64FFB5F9C3B8257 +:107D400041CEE2D18F237E9C52857B0893354BEF49 +:107D50005EAAB688E56228E79BF68FAFD979F8C3AB +:107D6000EAB36153B0C8A672313D63EF0B6CE30A0E +:107D700020508942C7AD53B88FE446CD6E75F8B335 +:107D8000D5917041262D929170A9AB3B260989951A +:107D9000E1F3585646F80CDCAF526E02D8D14A8750 +:107DA000A3D2D45DD8C569AB1E9DE060C082D1C5A9 +:107DB000CEC861BC4129DF2561E9F39F5FACA6BB5A +:107DC000345B118CB89B15C048B341FCE884555511 +:107DD0004F2F75008A9FD760EABA679B93C99B5261 +:107DE0002C76538F1C22DF021DDEAAFB2AB6DF2B66 +:107DF000659146C006E2489150D1AD348E7D7CC479 +:107E00008D69496E899469316A41928B1888085945 +:107E10009B1080023E1A6B46A1D468A028191CACA6 +:107E2000780DBF2CB4738CC6A4F4274DA83DB8CDF3 +:107E3000CDEAB33779ABA22B1A8FFE359046927EEE +:107E4000CEA7D20FA857CC61808CA1E45E3F46D765 +:107E50003AAE1CBAD1A1FF2FCD51CBD59C1DA7C8DE +:107E60006A5D05BE90B23D2F307BF46CCE867C9A65 +:107E70007D61703281B346684F363EEA8E34E370DE +:107E80006525D25BDAA7AA7205E3AC56543D65C9F5 +:107E90000B4E3922AE4919492C7A8D2DA0182E4D42 +:107EA0009D5D419EA906495B3EC8F9DE145B759352 +:107EB000271C3AA4854311D6E6EBCFE4147C3F742B +:107EC000B1DECA5DB8422F0444428A183933AAFD94 +:107ED000DF6FA943C8BAC2E91355FACDA8411C1DEA +:107EE000F161D1A22455736B5924257A18E697F0D5 +:107EF000A2662C93683761003DB4F3A1EDD12A8CC2 +:107F00002FA26CB2960660345B84B51E185DCEE07D +:107F1000FE72D01194BE6BDB856507C4C9ABD0D7A8 +:107F200036BB162EAF8C6B41A7B579A983694F7FFD +:107F3000F9975180876D6FAA84595D1C35CA505CD2 +:107F40004B8D599AE7A88760832B7CD3A8446D6436 +:107F50007CFD4C5B424A1CD614F195A989DBEC44AC +:107F6000A05E91043B0FABF968C902D833C2297AED +:107F700087FA29608401FED0891E6330517B601B23 +:107F8000388AB91FD843ED776CB16657BB9547194E +:107F9000AEAE4C6A0BB8A458BB1E010D025AF58850 +:107FA000AB03C29A1E183B88EC055D350418B4D0AB +:107FB000EDF7A5210A98C08626529E4E4667D2A0AC +:107FC000ED5E503A807BCD7EC7C982FC32717F2B3B +:107FD0000EC21DC32CD889416EC4B92CB0A6CAF8F4 +:107FE000BF20C30B9CD53A26405F186B7A8AB30535 +:107FF0004FD4E973AC5A5DDF30DA75D852AFC8CED2 +:10800000B7251BF2A54FF90750B878566FD9033C36 +:10801000338383A4791F9020A7687D82204445A0E4 +:108020004D003CD85EFF5D64C578B1F7DC04D7CA6B +:10803000AD5470C52E5F770B4A65A85F423B1C3B71 +:108040007BC2158E5624D5AB341ACC0B1C67364533 +:1080500069343D794FB18FB4863F76168898D68EB5 +:108060000036BC041828ED08404637B8533218B221 +:10807000366A9D547E9CA6CAA3E1D58CBB58AF95A9 +:108080007872D671D7DA619E71B16E914ADA0EF8C4 +:10809000F674133EF76C0146612D94134FA8647972 +:1080A00030E628FD3B4365B8966822C29B315508EF +:1080B00009CF7ECD02F475ACFA37B2A362212DE070 +:1080C0007A5551E1E691067E2F988E6B507047628B +:1080D00065BD95C925A78D72F271459038C164556B +:1080E00012FB32BB1B8113037E13B93CE897E223DA +:1080F000BF897D614F83EBA84784FB48CE7C3879EC +:108100000B1CD0195A68A6107B5789C76DB13986E8 +:108110001C49E8EF0780D1C2AA22619491245FA68E +:1081200028A0056659CB058C01F08F9959A64DB151 +:1081300018FF2F75E22532A5869C8F77BC530C263D +:10814000DF6F5A1725DA3D0811A5318EE50539088C +:10815000692374C88BCF7EA96D3A27BA404482B593 +:10816000DF8AFC1987716A6F4FD2EA9C601A443922 +:10817000054D98524CAD377133C061369472337DE2 +:108180001A351ABA34F099B5B308E0C642C5E76E9D +:108190005622D6CE74DED43C12700A97E000243604 +:1081A0002A6E6ADE79929CC3A6BB367C8BC9FCD54D +:1081B000E9DA584C6853D28A49E3619CE7EB401FE7 +:1081C000E67876F4F1DF4668343F0E7792914E916F +:1081D000EB2D2932ED0B982287F7AB25B4B85372FB +:1081E000E5C4DBED88391D03A97F4A631F3C5C05AC +:1081F000628916F2602912FFA2C712DA655CDC867A +:1082000042D0BADA5230B3A82919684E7D1A4E3CD2 +:1082100000D58AB5745E5CBA3AE4F69E6175379C07 +:1082200049C45D337BF1928289EC1B3651FABA4A1C +:10823000E2032A51020148D918A74859349210B5CF +:108240009611C6CA0B8487344AD3CB2F88C740E225 +:1082500087566FD131A621CFEA9E2DE7677C6AF25F +:10826000C904A20B6B026327B080563818F86F78E8 +:1082700014E38C1C18B11517C89BE6BF8A171BDFC7 +:1082800042823421BD95F9CF01B64FF9A775A00BF5 +:108290002D8A5DFA59977828CB9D004E583C3D8C2D +:1082A000D2B924ED1F6558918AB9BB156AC844E15B +:1082B000D895B74BEA296E151D0E5EE622D8E1DD92 +:1082C00045E98658FF5A7D766478E5DAEE9F25FD0C +:1082D00059B33C38F493C5E0B287211E9AC375B5F3 +:1082E000FBDB49E15ADAE94164900F414F9708FE00 +:1082F00087E725923D4E9CCE351BE11B9E40348581 +:10830000DA1496B23A4112E565D2CF53BB90BECE95 +:108310004D26538A14B5A765D94B0ABBEB3464C10B +:108320003B36447F1AFF54450F5231B07F3DC3DFC7 +:1083300056D6E607E0624F98C5A525C10F8CE4F13B +:108340005507E572927DDE720CFF88C42643FD89D5 +:1083500065F74EF7DB9CD2E179318CB12DDDE7FD7D +:108360001203389DE6C64182233035D561E0DF48EF +:10837000CD3786BF987B0BA8DBE176DB10A599CBC8 +:108380004EDDF282F46C3DD1C74C44AF4CEC9FDB28 +:10839000C968C589FA6B090B8D6A898ACA20883930 +:1083A000042346072908BFEA460EBA567F81477460 +:1083B00024E1947886AA8B954A1258E4B250D17B76 +:1083C000E89A9A023344E9D0966432603AB88E69EA +:1083D0005A6F83AE0B278352AC23AB65E44246D879 +:1083E000A18E91235765B322179B840FB523D9FA29 +:1083F0000C5E629854ECDEB94FC7BEF49874175601 +:1084000002082F01C4275586CBCDC3842B64470EA9 +:108410000CE969E6A44B548DA427417BE14A74E939 +:108420009C33CACE8431D0B785D3B8E6CC3823C6C6 +:108430000A798BFCF563E77AAEBDF6B0D1132791CC +:10844000939DD3263BA69AE0C819CCA8A2D4F0EFFE +:10845000245FE8FDB44F249EE785ACE1AA376703AB +:10846000541DB8A964CF19F41BF75BB5371F92E20E +:10847000544F926B5A0301AB7417EB4C201AEE74F5 +:10848000EBAC2786181BF8D5106C10DCA388D7A29C +:10849000F225AF3633C4FF025BC4312AFCBC6F4601 +:1084A000FFF8AA8B35184B852701083CD887CA5A94 +:1084B000F148849BB83FB6F73922B22123FAF16123 +:1084C000ED7B33E1C369D2C99398B46086225DF431 +:1084D000915D36526F1B2C677B87B14AC118BFE98B +:1084E00082FCB01E5D7FAC43D57DB228DA2198BEF8 +:1084F000BF8995CD253133349B43F1FEE6E965BF55 +:108500004E63F678E6A1177D198BB2B88859868B31 +:108510001C10E1A59C2775112964CA116804E9C9DA +:1085200054D48CAD136C2DDA0BE2ECE1B158C80BCE +:108530005C95D78CA68C3287A80553C00AFA0679B9 +:10854000B27CA5AAE61EA7B101D12E9B7959C3B969 +:108550004D66EEC370D9A51DE1F3A528C4EAB63E69 +:10856000ED8102E4415282116FC145E9CE82519101 +:1085700064CD3AAD7B964279C943F20FEC0CDEDB59 +:10858000545C23EC89A85758E4C117425EDAA798D7 +:10859000A40A3D3F0022FF5DED74E1A712DF243203 +:1085A000402E5159B8C53F7DF2540842CD53111B9E +:1085B0000E8585F2BE336456A31DEE45792950C45D +:1085C00082AE690D619C57A3B842D1DD66356E3F1E +:1085D0005BEEDE93DC3C4A8B7440E0D3FEDE9B9482 +:1085E000EFE72747380EED431E1F238A29495AE932 +:1085F000D36A37D67568C9A859702A659B59B7FCE4 +:1086000059606E0C86F1ADF226ED4EFDC3DF9D7C08 +:1086100018383FC3C4FF398562AD1D842ECF21FCBD +:1086200092F709D56B36DC6404F1A51FEDF65EDE2A +:10863000FFD9B26E732A5CCB56DDA74A793CAFF7FF +:108640004E9D3F8D565198AD9E2397CD5284218EDD +:10865000E63797D7D8D1780859511C8D38CB0819EF +:10866000810EB3C9A610ABB9C4DF5658C5A7610BBC +:108670008FA3FCFD6B6E0E34B9C94375B0871B78B0 +:108680004C981F7D6217DFDCB7CDC534F805333653 +:10869000C20A18E99964BDE4B47DA583A3707BE0A8 +:1086A000DC12F6729C708D1DECB78D5BD10234FF2D +:1086B0008E0F0402985F336E71DB04DE3F65382451 +:1086C000CAE0DC16FF2A082C1AF5CD86A13861E92C +:1086D000C3CCA362196379217FAAD39E511997E96C +:1086E000884523FD455D0415E2CB53E3C2538A99C7 +:1086F00074BFD1D6A919DD3F946B2118D443750EF0 +:10870000AFCE6DDB4B1431B913F9D911310C39D817 +:108710005A19CD2DE34ECEBED5756B244FA6255AE2 +:108720001A381DE952298B841D0A777F6BC1E31724 +:1087300004F5C7C97B3D27982F81E502AE57BC736E +:10874000BBABDF10E97BA05F24F0315886715C7809 +:10875000B0D720A0A043ECCB2C451BFD5B0034F22E +:108760006C23504B29E20D97BE5E5B39BFE35ECEB2 +:1087700000B25AF99A8A46829F418B4F12DEA5C8F1 +:10878000342B85E06CF1AC98C2FD3B0FCF75B34E36 +:10879000AF8896EE1DF4E0A9620518E0D0B7473720 +:1087A0009176418906CD57AFBA982DA1A06178A2E4 +:1087B000A0840354CAD111213B9584AC80B406ED4A +:1087C000A350AA0977DCBD578F5BD3F2CA6A73C482 +:1087D0006FF6C5105B6D4A3189F8D9D1E8D04BE806 +:1087E00010E1150D8A41C5545F7FBB3F386C043AD8 +:1087F000C125830849E6A82F5D3ECBB6FF36F8B405 +:108800002975D27B2DFBDCFFDA3B0E01A59F04EC22 +:108810005C086E4266F6DCD1C16114CB7504F46D60 +:10882000A7DA054E700AF7DA16F3F49F006716818F +:10883000EABA20DD7E3163CB05571F8040AD1113AE +:10884000E7936A8790037CFA6FD481FF332F4B083C +:108850001E4817F60514FB86288A6552985CB83FB7 +:108860006DF25CC544DCD5E913F411569916E24F5C +:10887000CBFC146D01FF51B058241E725EDEA8516E +:10888000EC6E5B29A2A1627F042538CB135A420B00 +:108890004FC04A15CCEF4711DB6CE59984F84A1BB1 +:1088A0004FFF8B56A1544D6C94ABC424FF7F43A261 +:1088B0009C82F367294FF2596A5681DBE6F1AD11CC +:1088C0006FE1B6D391C3DA0C0FE52038D7A7B50C0A +:1088D000E58EAB32149F33E4693F8C1D6B3EECCECA +:1088E00026C00DEBBC1BD7CD77B8B179D2E9662B8A +:1088F000F90DCCF9288A37C44E49121774125A70F0 +:10890000374CBFB18314CFC7FF6A6CFCEA4310EC4D +:108910003E6D10D28B29EAB31C62A044AFFA4384A7 +:10892000A52F319FACA872D263831A19C9ACB8A71E +:1089300093E0838AF5936BA74D966A2A119E3D5F5B +:10894000A0ED68D6F1E713A022B60460AAB66F8C3A +:108950009C16D042077C2A347CCBB1E1345680553A +:10896000EF66C54EDFEFE19BCD5B7C99E5588BEB65 +:108970005BD5BC2FD33CE7E4B55407E5EDE7816454 +:1089800028B4CEA2349D3898252EE370AA19481039 +:1089900054D4E1AC39C2E2DD0F65D55503D22B7A50 +:1089A000501EDAC179CEF6B2F06E9BD5743ABFB4E0 +:1089B000E7267B071C8322DD7CACF1433A7F4BBE6C +:1089C000A13E96A1298C188DA83D4F8B75E0FD1F07 +:1089D00011E9CA15D8BCDD6C4B00FCB35F7991C9B5 +:1089E000D7FC7C82D2464A2253B5C65CFD94342320 +:1089F0008FB5F939EEEB27066F0BD9AA11F233B513 +:108A0000609968ABF12925E55D864E0C4A126AD261 +:108A10007551C5CAF9997EE75571EA0EBE01B65681 +:108A2000CEF3ED29B73FBDF74C546F43B4A60D0DFF +:108A30001EE08C66DC185B016CF977CFAB43F60166 +:108A400046F87C80D697884F33D06F9B013BE10A74 +:108A500043B16A4E43719DDF8C7DBF0B4DCD2DA080 +:108A60006575EE0B3AB2E1D841506EEEF0B3712F5E +:108A7000563BC9F30E5E7401878FAF1AA0DA2BDA6A +:108A8000E0FB8C9FDFBB305077D36FFF0DF3BF4F00 +:108A9000427BE8ACCC4F52B403946ACE116391820E +:108AA0007B7A98BD2BBDC31156EF32FC1F92CADCF6 +:108AB0008115486AB0C4912AB4B777EEE007788F81 +:108AC000902F19A54786E35FE4B8C07FD3BB28CBBE +:108AD000D32AA70960D343AE7146CA181AED87E5B9 +:108AE00063D8CC5234791AAEC84464B2A619C154C2 +:108AF000F24EC0A349F87AFE12BE2A24F270DF02B9 +:108B0000CE7D764A5BB797A9634D8B772653588401 +:108B10000FCB66985604EC5F2748C68A14BAF186D4 +:108B20005B70749C6174293C69C84D0E529D8C3BEE +:108B300011142A92AF0A66060C167CB621E651C5BE +:108B400061DA96119D9EEBFFAB89BFA4075553C90F +:108B5000F4C70C2385711257247344683D87DCBC2D +:108B60003A9079D4C4720FDDCFF3F7677D593C3664 +:108B7000ED39749EE683B3E359727983EC25E9827B +:108B8000A0E41B76DFB60AE347252B3A13EBE3FF9D +:108B900010E3075EE1721456AB3FE9AD41C9400CEA +:108BA000EE4DDB3C62899F24287E278A30EDAC5253 +:108BB0004432C850D18BBB39CFF0E59BC425715DE1 +:108BC00043694430E1279C9DD8E1CC37C33EDCE6C5 +:108BD0000650963E08118472C404B25D35D3D42C7D +:108BE0005E510815F7AC2FA90D0726A4BFA6091AD8 +:108BF0002A213DFC8E32F5B66EA6E9198D9BA9831C +:108C00007BC4697E929035303C093B18A73DFDD569 +:108C1000111B2ADD8B3C351E62DA7624442DA977A0 +:108C2000D4A8EC85CFFA23B8D1C1308297D3A4421F +:108C3000A980A130F9F866EDAC83F5B4CCAC191578 +:108C4000C1211ACB759557353FE7348A388BDA91B5 +:108C5000C25B341656C44DC81165294DADB543DE0F +:108C60000C42376A7B37BEFDD0F6B69578D7FA2628 +:108C70008B4F807A0C602A429910F84EDBF8206EF8 +:108C800044F47FDDAF5860A9925129E1963F3096B8 +:108C900067FEA40084B46C495B718C2CF1ADC8D61E +:108CA000754CC6F68CD4CE1B9A2F2A36F4B30855D1 +:108CB000D63AE938AC4932F83921821C56A5A84A7F +:108CC000507A9318EA6E834764AE8BC9139B7CB1CC +:108CD000D87E2A0FA2D8642C656D21368667E3F60C +:108CE00060B974E3EA0DE283001D62E5EA40D777DC +:108CF00019A2A72641CBCE57693B219AE01686D40C +:108D0000DC33613006E19F827A234DEBD0EF11E72F +:108D10007E348F91957CE8DA57BB5F42B3EB449386 +:108D200092719A889D0B3F7DC8DA1A2D320C8AE326 +:108D3000FEB275B284112DE390C6B24F0457B8BA93 +:108D4000BBC4FDCAD8FC6F67A6B0C229CADAA39912 +:108D50000D4C2E53D82BA75953569A64E112C67D59 +:108D6000A8D39B323FCD81AA1094226DE4CF3AED77 +:108D7000D19BCFE8C227B4AA498F97A51F8A0BDEE3 +:108D8000770C360E696AA24B73AB8286B1234339E6 +:108D900051B021E64B92CC43CBCD376C2F9DDD15E6 +:108DA000DCD5A17FD4C13550F455C1EDEE78BB417F +:108DB000DC7E2B09264285C294C892C2773DE972B7 +:108DC0005F0211DE6A61334280AF37AA7EB8FEB916 +:108DD0003529C764018A23FB6A18713E9B719C7B0D +:108DE000344AB7AF56CC9A72C84A79CAF4DA7F7A55 +:108DF000A4D325C68C4062B2994BD0627EF7C7AF30 +:108E0000A63E14F7BF18E4A9BD13880116CED351AE +:108E10002D4987BF2D2557862D25EF935BD43744E9 +:108E2000DF6199C1F37F1036C1D5D20C2D91A88F87 +:108E30001B7671F57EBB659F35F34800FE6AFA5BD1 +:108E4000CBB6582096A77041D53AEF82B8C3B60D7D +:108E500068313E29BBC3057263443B890E501EEE48 +:108E6000B1FBD2C28797CF4A045531929A562B351F +:108E7000513BF53283EFA4B5DEC76CD2ABE577ED9D +:108E80008E985351219BB9E66C2FFE316E31E6F27C +:108E90005A29052E5B8FF75615E5B10EBF08BBC8E2 +:108EA000E120B5959F738BA6E21D0DB22E76624E22 +:108EB000218761F8BB38B8B7F74E55D9F61026555B +:108EC000CA58DA1A652B430B7F17FEB81400977542 +:108ED000CEA1E7E30FD159959C0F26A5382DA949BE +:108EE0007723A036075A6437AD3DA06A2FC7491AC9 +:108EF000C1305E72684E52553675DD3991E4081105 +:108F00008B35B466CFE4446FB4B53A14713245E59D +:108F1000BD15B329CDF5EC1E1AE1915E956162C5D0 +:108F200055AC97B626504A9CE1C8DCC4A3AAB7FD4D +:108F3000D62D0B3F9DD00684CEE0CBE4A73228B4DB +:108F4000DCF5B5F52D5FBAFA65846AA7BABFBF54E0 +:108F5000B5CF2600314EEAFC87715D948F926B2E5F +:108F6000A87999213284EF24E426AA400C8B526818 +:108F700009C1BEB838FAD1608B90EEE5316232C5D6 +:108F80002BABADC2C7A61AEC46D74C24D279798751 +:108F9000BE5980D5214FB0CBEE35F9D2A2E2F8F31D +:108FA000685468F39EE0DDF932C6A546F9D6F1E6CD +:108FB0009BCC6A05460DC56CEFEB818AF8E695DA25 +:108FC000A2FB1101B539C3F521EBCE1EF2762AE0E2 +:108FD0003B86C87F6D73B029B1C61DA71B82B1C582 +:108FE0006C530718A344CFFC8C04E0739428F6E478 +:108FF00015A6A0D40E96E7D4110E1B234F3A1A7073 +:1090000001B3D4B9AB35442BDFDACFFF63BD1177A1 +:10901000BA6ED5F3B60444EC333451F09052556334 +:109020008B4C412126F6C615097BFEFBEB6552B63B +:109030003A056C6BEE1CABEA278B8CBBA2873C4DD0 +:10904000BE855F1A396385F24D0E266909E4ABDDF2 +:10905000E4519E39F7B044FE6889CF234E5D81CB41 +:10906000FF65735274BF97C65EACFA084E4AEE3D78 +:10907000E0D53E8EF48590B4565AA62C29C50798A3 +:109080002B35510381FDB436C6888D0AB202AF6814 +:10909000D6D3435391E6756457B913CA385714A60B +:1090A000DA26CF406AB481E9A6115A7D327762F59B +:1090B00025BBB23AC47AAB573AC3295ECEFBB72D73 +:1090C0009C2BF8C5E4EE3E1A1FB544FDA918E7A78E +:1090D000722458D5AFEECD0EB3B109A3775F0E5D04 +:1090E000AE983C0E6822E635CD069D24758A815DDA +:1090F0009A42CFC524BA92C3FB9C59E20FBB0A8F98 +:10910000A86F1AA367816048889A326C648F488E72 +:109110009FED056E32C6BC5DE9A34EF477110AD609 +:10912000DF934B619EE73A734A38F6B71E4B76F5EC +:1091300043EF2814A990068A2DB5E293770B1F24DC +:109140009E89EDE32FDD11584F3FE5BB8DB1251012 +:109150005B25B1E6A6DA3EEBA31CFA026E1519FAFE +:109160009FBE3D79886D9AB513B7B1D73DA76C8086 +:10917000230BCCCAC6C3C9C34D3CB2581A65C4F050 +:1091800048C080E57A1A53190DFE674F5112CF1E61 +:1091900093D2F7DB45E3407A323E21ABEC733049A2 +:1091A000747EFA5AD6C05673FC41F87ED806FBFD91 +:1091B000A4BCFC16076C213C8DF6E12A682CB32E6A +:1091C0001AFE642D7810CA9135838EAD6C8FF939F3 +:1091D0009FE9F91B2D31C886317B2EFF36FCC4DF99 +:1091E00057D174796F798C5431A13D0C6DAA5F30E1 +:1091F00049EA6BE8BEE4F2A3675ECFE59133321D26 +:109200004A1C567450C95F5B2F036103ED7C46A076 +:10921000664EEB4F70279A07B0D579A7EC36B5E2CA +:1092200081333B670B3142A029F81FD663EF5C25E1 +:10923000034293DD164543D5DD50E00B608DB56DDF +:109240003238B2E7F0D070873CE394F81E921CBA33 +:109250000999237DD0A6777D944DBEBD6A670ED94E +:109260009ADBA281D3A22DAF81ED3D01A2EC939AAE +:10927000F19065ACDFAF77425D6EE3E57C185AE7AD +:1092800032B13581E8EDCDD29DD020CCA03D3694D1 +:109290006E564CEAC2E6BB5DAA227D79F597F28F45 +:1092A000FDAD5183196AD3932D8EE7E55AA08EFB4D +:1092B000619238E1811D4731505092E35ED2B92B63 +:1092C00052EE8A3BF17311A69B8FC3553C26352085 +:1092D00038A38B8ADDDD2A1C0004A7928C0AFB626E +:1092E000A34E689FBE4E38676A8DAA0133166DC5BE +:1092F0008C72BE66407EBF8F0AD701EE8F71BA4670 +:1093000013E92AE0D75290452353D991F6353C47CB +:10931000D0A3D878F969A54CC3CC705902CCCEEF54 +:10932000969ACA5BDFECCD42727E11C7E5FC9D4F79 +:1093300073147A5D767CF5C2A7C34A2C7992645285 +:10934000306E4195C8A842C87453F454A750760AA9 +:10935000F11B4178DF357297566E35C5D18A12DD23 +:10936000FC2C45B350BD27D0C1328D4A2093CDBAD5 +:10937000122FFBC733627EBAE19892FEBDD5B77C4F +:10938000C34322EB838CA6982620CC2D7ED8E3E81D +:109390007937207325AA89D4D62A5DEBD644A1C497 +:1093A00021871B467DD0CA2247297DC2D9C0725E63 +:1093B0002F57ECE6BE21C1E3C0A0E6BE5717566C9E +:1093C000F5273E6E2C8C12A5056F88D9C217204D4B +:1093D000D7990BF4837AF178135DE02DDC990D4871 +:1093E0000B5888EA4DA9413069F46BCBDD3D6583AC +:1093F00084DF45EA974A5E9AF8ED4C630113411306 +:1094000022B4B3A3C6378CAF59B5DDAEEEABF7755A +:109410003AC6BA739E1BF2A3A67F5C23C2999357E8 +:10942000A32F5BC409F118BC5ADC4D8531C51BB4B0 +:1094300068F4AFCD88A1AC1EE9124E72790F7C7230 +:10944000C6C4D6E706D63927F08C26E051EDED7A72 +:10945000271061FB86D7164BD16263EFD637FE60CB +:10946000730EDB9CF3467FE3273433FA9EE32250EE +:10947000551C04140BAB25CF2824797772574997D4 +:109480008AA218F661B554BEABB6EE2DA34FCFB18C +:10949000BAC94C7FFDE88C4B3C343312221A24109D +:1094A000C6D85011B9E194B3A67E1E35A0C98D87E8 +:1094B000F28978C47B503FD87E7308B59AE5F2F004 +:1094C000ACE79BF1C5B7D6B56FE8766292DCE7965C +:1094D000F8C88668961409CBE80639543575E3CD8B +:1094E0000BC43B9C4284CA91A9D66DA41718B6BE82 +:1094F0009CD0DC5755EB9071596631D8BB3DF234A6 +:10950000B310CF7726CB23A94E1D2BADBACD771A3A +:10951000533862963E809D57C7DE01595198D31C3F +:10952000C2F3FBEFFEC9CEE6AEEEE2CEF00B1720A3 +:109530007637819413F0935F209BAAFB50E25A0A7E +:109540001E218BB06B9DBE82FD131FF48649C47132 +:109550003BC430C97B26FADC004D2DB1D06E8DF6B0 +:10956000ECA9706A1365D3ECC8507C4C86783F94A4 +:109570005D0A0254225A003E568BDA0D1A8007B853 +:10958000E2F6C5D14685E80693AFC9A12FAEBDA7C7 +:109590003AB3CE4ECE8342D3943CAF179D9970B46C +:1095A0005EE73A034FDE3CE24856B24B5A637163C2 +:1095B000454315D33C10EDC51A83C79A0A6BFABE12 +:1095C0004A63003DEA1E42B408D5135C2590A6DF2D +:1095D000A1139F7679E75A4A3E085DB3DDA5036281 +:1095E000EAD499EF1AE092F5BD66979E5F1FC31308 +:1095F0004247233E75F001325B8DB1334BB14921B7 +:10960000AA50E4D9D42CB1AAFCDFC9CC7A840D8A43 +:10961000D1FC7231296644F6CF6E509BED6BE7ABFF +:10962000326F80368A34F88C70E0A6BE47FBB4A750 +:10963000F8C9DFD7E1ADCEC23621C4FC4395E42999 +:109640007BC64E55E5198748DB7123E25A414EF936 +:1096500051C255554ADEFDB85D19D0E0C9E1FB267F +:109660006E6D5CC5C52918E241780EB5753C9364F2 +:10967000AFFC8BA35EC0C9D18AE7C80D5A4E748770 +:109680007931706C747A24BC390E536896F38F9ECE +:10969000CAE2195D7C3EA3554FE00A48FF3806E157 +:1096A00049663CB7303645E3733D9505F2EEA8D3E5 +:1096B0005B81A66DB0C06AC9A55427C05C64C8436D +:1096C0000FE82FE9926B08361EEB501A199EFC1812 +:1096D000B4DC3B258548B178AD330EE528387847B2 +:1096E0002F1EE049733C9087E8D652173B688931BA +:1096F00004B9F173B86B712144DCE07355348615FD +:10970000137A12A82AF143F4941A9024C7414CDE2C +:10971000DCE72F50A46352BE7A714727D754C8E9BB +:10972000C5113E1A6F87CC5E6AFF92200B44E46538 +:109730001639E81C8DEE3612F7E6CF6FCC5B67C8A2 +:109740001B650CC54FDDDA1A68BF25906E383CFCEE +:1097500097C46E337F73B54E266DF44E1D63010DB5 +:10976000799F5A7025F7CADDA1B253C9E59A528A8A +:10977000D419077E0B9D71EF562C16E66E5D3E3BAD +:1097800073CB2E4A92DD49E6F6B503F34036B03589 +:1097900074D0960D1E649B547C009D6CE3D9875653 +:1097A00042485D4D423513C75813497346C561C6DB +:1097B0004A4CC65C52AE96C175A557538E1AD680D8 +:1097C000C2A58082F76843B1155CF31242B97FCD20 +:1097D000DAA93548E1C318F358D0064030C15B0818 +:1097E00016905F4CC83679085D35BB512A93983F77 +:1097F00087A78101F22630BD862DD94AAB3A8EF774 +:10980000A49313C318B047007740F58C16901AFD47 +:109810000F91A9C86315895A774CC5F556E0E7281A +:1098200059DFAD0C7D8933B0A63A54C5D098E18B91 +:109830004D4D62D1A837F310745BC6A8640C4CDAA6 +:109840004FE8662327113C21906653F69AF24C7933 +:10985000B993C3BB918950877AB3FF31398F127A9C +:109860005A0A3E790BC9BEA974C94A9B9A04561676 +:10987000EAC8BBBA28856DDD463885DF3E42A1A720 +:1098800049B638D6F741EF15075F92F63A5A064BBC +:10989000548236F1064437A7FBA5AE8A9A45267A4C +:1098A00057956F789305095385B25BE0C79320EB1A +:1098B000283662CE2F32C8C01B77D403775D4F0A9B +:1098C0001E5090F3BC3E10B973D07A6FCB273EDCAC +:1098D000FC60F698762E5A27583459101AF5CB9B0F +:1098E000F9E07EB99182527708EE0A69BF07C34D4D +:1098F000EBC6C882A5A228DFA0CA7F3D4D7736E21D +:10990000C5773DA59D4D309994AE6FF6F8946CF7F0 +:10991000291E1A0A945BCDCE8A82607C9D224671F4 +:1099200051315FA2890465B990DEAD66A9026F3D31 +:109930008AF01A240F8996F55904FB10D28725A6C0 +:1099400046345AFD44DBA7B8F8E8CD8A29DB667FA8 +:10995000BEADA16457CA918900FE947E13EE9F7A32 +:109960002F06B993B4B968C43E84B32BB71D24EA5B +:109970008608A2DFDE9D775C6364D83E06457DBB2A +:10998000DA923FA69A2B2F4CAA8551C878F0A8A648 +:10999000774960F7E7BC17832B821A7A70DAFD30BB +:1099A000F7EF65E201E6E92638BD3BE6BCB1E93DEB +:1099B0008A4E9A90F7580D864536AE117129319727 +:1099C000E8825CB94772FDCC31024C774BFC5A946B +:1099D000B29ABDE351AC05BE0C78FB7F4B567E0EB0 +:1099E00043D3A135C1C1B784D9CFC49E4172EBB76F +:1099F0003AB64427E16B11E4929A55CF96568E2ED3 +:109A0000E6E42DA8966F63FE67F862D3E610FA29A4 +:109A1000485DCB2BAF9FEF5C766457E157284BF541 +:109A2000BEC4A9F303CA4B99D0909BA7804A795131 +:109A3000A87FC57D495A10DCDC6C708B237DD81C57 +:109A40006536F0E9D218F61BF32B8B75CAE7F92BB4 +:109A5000AD8B19F08D2157E856AD41560263FEE7F4 +:109A6000C5138853A872C0CE17ABBA92F70F0E4732 +:109A70005E230C4644AFF66F37609633584601E4D8 +:109A80006A6743B06BBCFF1C26DDA7F4C65B7B2274 +:109A9000217B813C20077ACE3CFD004F162F8FB9E9 +:109AA000EA7C49E6378E5F1BBA11F0D66C7EA5BD05 +:109AB000B34CB1C205CBAE24E43745E7E40D88FBD7 +:109AC000FC85BC2E9CC5627409F79D914335594DA8 +:109AD0000438785B06F561D81C985302828C11EF2C +:109AE000CF5A7759522C86EF71924D021278E16469 +:109AF00079FA1EDF0F92366337FD48A0B00ED13BD6 +:109B00006301C7D91C0AEA95EBC29BA79FE63DA259 +:109B10004CC9646C2F08C0D527F8E68775967A9BE8 +:109B200015E2A74C2D8D6F3EF60FE83E7FA60A8802 +:109B30007B0B660C99E468BA78878A5DE7860F65C7 +:109B4000F27AE1744333A214CF22639867E444F0BD +:109B5000E5B53E530AB85921DF83157E90D32D0A0F +:109B6000E307CB1748E5271A188CD4F44DC4ACF1A1 +:109B7000BD8B31836C4A432C959A6362B5F19BBED1 +:109B8000D6EB0B4EE0B74472E47AEC87854E58C9A9 +:109B900027937D8A7FCB6993DBB6D0E1CAF73C3A45 +:109BA000A007F99B2C08D4F6CC9614B174F828645D +:109BB0007BCBFA080F0264A41601B54651C6CE6CE1 +:109BC00052784AB85CBE66C1975AFE1EEE91F80BF9 +:109BD0005E12D8BB6EE11FE588B5D542ED1E114C73 +:109BE0003E152C195CD429019B9ACE3591D39951FD +:109BF00075CEFB6913E6E0271B86B5199D719C7A2B +:109C0000884DD77EE6E32A70FF3FD15C14B5D4843B +:109C10001532F4096726BFC6AB470D6F8A49D001DC +:109C2000FEE5787777523BF23B00CCBAE14B24ADAE +:109C300032502CD042B74FCC88DD29112230D64487 +:109C4000771F51919485D776A0EB339AD83DE46085 +:109C5000FBA00BF19F924F5B945AFA90F4A36C3BDC +:109C600029ADC664271362AE105751CE170F2FA12E +:109C700006D165C0C189948F1622AAB39FE3114B08 +:109C8000F89E250C8DE0CF710BDA358DF83F53B07F +:109C9000097CC241B7781CE47C15DC553A569B1709 +:109CA000F183DD6B4D220533388E951E02A1C8C8A5 +:109CB00091665AD4E42A93E80711271C3966AFA1AC +:109CC0003B2C66C757B4A4EACC2A14FD0B557DF78C +:109CD0000E9E333A8C07E57E33F003494A8BB4730A +:109CE00082EBA49A767DCBD7D9E3A8AC9BEA2F8BE5 +:109CF00098E2B885C1ED1805D3B0A25B8C854EFA09 +:109D0000BD151F729448A2DB648759A33322204AF1 +:109D1000FCAE9E3E09E454B217E873DB3DA99440C3 +:109D2000EA422BDF7FDD1B40E7FD7B3FFA5C9D8431 +:109D3000331ABF9ECCA5EE518A726EB36ACDD02B7A +:109D40000B17EDD4E076442223A4C1B1F97F31C6CC +:109D5000FEAE6850FA6C1230F6F524A204A35DC47E +:109D6000A88588F2D4B92C11F89A4189D9DCBE3A79 +:109D7000603C786FE4641E85101696CF71B4C9C834 +:109D8000CFE49877ED7677EA1E5E69A8C7FBC488B2 +:109D90002C664D10DDEDB2082D05D77BE40AFEDA06 +:109DA000FBDB86975D522FBE0F11FF839CD49C1066 +:109DB000A9AA9A81F94DB700F925F01CED40EBC036 +:109DC0004512CCEC774C2EEB93DC24F3B982123C99 +:109DD000DF86CE38883934A97B97EE434FC40F55C0 +:109DE000E28BE7A685DFE5A7F07DC73164533E909F +:109DF0002E94B9B64E7C81BE566EC445AF1473A482 +:109E0000404F8AE6BA2B277ED4187DE279C1889F1D +:109E1000DC43E6CDE8A66D704324F8635D03038E52 +:109E200000286E05B24C4473852AA3EA457ED6E12C +:109E3000B8CCFA5122B1C68AE5E7296BD0128DDA87 +:109E400072C12DE296285A84FD44340C36D14DAFB0 +:109E5000BCB90DDA93E5E2432F64E3C4B44DD4E218 +:109E6000EA3DAC504586FB1D4D258CC4F28D8FBE5E +:109E700050AACA30E17908FBC2531CE1BBD20501EC +:109E80007D3C62E145830F5448327517F0B32FFDD6 +:109E9000EBEF1A1934B86E0E5D171E86684C26C695 +:109EA000334BC2F9630B53B1C26FBBC72F11FF49CC +:109EB00092F33F82DF2995F01713F417935151C4A1 +:109EC0003122C94602494B96F271BE83B89A656445 +:109ED000B6497DD9F5407BB1D1BE24CDF33B05E039 +:109EE0004BB0D94F90AF28A19984E39189F18ED9D5 +:109EF0007AF229D41C8F33E29530B815AAD042AB40 +:109F0000E999AD67B5D1CD778E4DBA7E5829B4A702 +:109F1000A37C4C7187A74C55F22FE6A8499B26706D +:109F20007113DFC44396093F8A568383875FB50F59 +:109F30007E8F6B84FE766F5D260FF6D5073B540F40 +:109F400089998C4EAC78651668B02F54331737EC6E +:109F5000784FC5FAD0942BCABCF538701B822EF00E +:109F6000444D1F68EAF427DCA6F49C8C5418D7599A +:109F7000B59E6F2EAAF5BCD722A9A27B9C034216E0 +:109F8000E5028385BB91DF71B364938650046B3B1C +:109F9000A5A1F576441B9DF69271EF727AC7BA00BF +:109FA000FED93BB467508A8133B74C7E047AA389CB +:109FB0008AE51242114EA511142EE1FA4D41D264E8 +:109FC0005929F2923B81A86BE70CF0C9447CA8E3C5 +:109FD00097625508CE00E81549CAD23B6934D6B617 +:109FE00029E83B734322F6C7015625E049A56FF9DE +:109FF0000EF5AA06F13EA5D421CF58E4A63F57DBC3 +:10A00000DC38EEF39A16E4BB1E66BFC9719B04F3FD +:10A010008061DC490B7452BDFD35994EBD7918C184 +:10A02000C386221497D2E1828EF50EA7742A3E4C85 +:10A03000FBE7682935D5F64197669423A8EB4A4596 +:10A040002FC37A17F293BA51F88FEA77E47D715BE8 +:10A05000B5DDECC82B038993943CC4988975E82F2F +:10A060001EE3D83BAA83F482A63426E29F682732F7 +:10A070005E655FA73A9BF6D1DC7AD61F4C703588B7 +:10A08000933464F9B3F34187125C94CC5978DFB010 +:10A09000912B0743A02E048E2557FEA4A14BECB4B0 +:10A0A00047C41BDF62C614C0878C17C5C924CD0BFB +:10A0B0005ED4AC85356E9604EDD4625363AFB66C56 +:10A0C0005BD3F826A7D431291D8009BF1169F29E00 +:10A0D0004F6686622E9340D85AC8F555243852648C +:10A0E00044A87BFB1D1C300A4664272D5F86B4D72D +:10A0F000707C35FEADF29384261340A8F3C5D1BB26 +:10A100001B1EE794243B8A682A75CA89848706AE99 +:10A11000F395452D5DAEAD6A33FCB45D4A2EF6195C +:10A120003B068CB8C314CB6388D3ED7FB91525C724 +:10A130004686BEEBC1478327CF1129BD5C576FF41C +:10A14000279C93C9254EA3D29E27DD6F02AA53F602 +:10A150002BA7BCFA385D7743DFDD59FC9B7D8F3E32 +:10A160008741A7676CFAE21622CB6FB57A1677960D +:10A17000CF0DA4FCEED0A6F19085B010FAD8C2F7AE +:10A180008AF4003D03E3C11E54D29E03E9395EE721 +:10A190008FCE2E1EC4B2D94AE0DE8ECE67F0A8B0B4 +:10A1A000339442931AF6949C179595574C0530C1F9 +:10A1B000A41AB97BF163DA6AF1059DBBCED4CA5B00 +:10A1C0007D33DB51F713A77F4D9668DB5FF8766D23 +:10A1D0008D699E85AF0E6958AD8BDA0E2288075FB8 +:10A1E0008F81A701CF8BD73BB4006B681BE96C1A3A +:10A1F000CD3307D6834C47473C29DF88383934F0C4 +:10A20000F42EB3D6BF10431BA9DD93AD999EF32A5C +:10A2100073FE01598557B8B4AAC5FB54C1EFA6B95E +:10A2200084287A85D9783166718064763DC706F4D2 +:10A23000DA10A1E43AF9E9104EDCA58AD353A14320 +:10A240007BE6992EE8C65EAEED00D91A78B3CB80D6 +:10A25000F3866D9422DFFFD40F4F120CDC29D73523 +:10A26000CF6E2AE3323C72D9AEFADF48F831703E45 +:10A2700023B87E9141FA6EDDC6414CBC47B9248DAE +:10A2800006E94A680963254711EDA4B03A2889CC4C +:10A290009125A2E63A25709F9CE2F4C539322B0144 +:10A2A0002166910E71A841F9C74052F92B3966FC1D +:10A2B000BC0F77F3A37F067FD79BB72A2C67B85DC7 +:10A2C0000EC50B0C9CC8AD57CD2B8CFEB0F359B707 +:10A2D000C593D07115B596CAB8BDC94BEA3A47299E +:10A2E00075B108416D669ADA875AD09BE575B4DE80 +:10A2F000F6B3C22B14000A9462A2A848D643E244E3 +:10A30000D6EE51D8D9D575754B366786FD81243B7D +:10A3100079AF19AE165AA5AD38E3F55EF639FF0AE6 +:10A3200048FFA18C3D6BDDE88AC837723114D68CAA +:10A33000EE4D4D891831CE8AC042D18FBA67D419FB +:10A340000BBE033E324047124FFE7AC8BF4C8E38D8 +:10A35000BAD5FCEE818F5902639A437DCECF2DF1A1 +:10A3600048B2E26B9FD22A09DC62D632418996B9A3 +:10A370009B43324195C011EA98430E69D59C02185F +:10A38000D679E941FED0DDE08AD4EB1357141821C9 +:10A39000EB3800CBA9186B44E1B67A7206ED954C08 +:10A3A000B7893EAFE2DBAE7B56900DC7E3566945F9 +:10A3B00046908B2E68B308C59617121A6150F14269 +:10A3C000223739E70FDF1205AA45E6303004708CDA +:10A3D00061B342E5143F97F33010EB2DA140D184D7 +:10A3E00079ECEB24D433149B07FDF83C79DC07DAD5 +:10A3F000253A5573B9D7511570E18EAC00F9C56691 +:10A400004464A2D82D81552DC9D9D36D5F2CC8BC09 +:10A41000151EF8C2B56CF2602170FD9B4B0EB09119 +:10A420003A284394CB980B5D4130073D1A3DB51354 +:10A430006554D0D596251B94BFCDF76C116703BC2E +:10A44000896F0340C961B27DE82B6FAF2D1901936D +:10A450004B5F8FDA0B26E159647BDE90991B36390E +:10A46000AB2B126B092C0FF2957A6FAF8223A6D615 +:10A470001E8C8BACDD55B7A190FADE49DF80F5A2CA +:10A480002EB2EB831D4A83C82F9D6E99250C38454B +:10A49000BF12D2C977DE779E45173198D14FAE07EC +:10A4A000076850771D3BB230AB8DD3B5D4E55C1B4C +:10A4B0002ADDA2A4064A4ACB0ED0FE4F1D850BE32F +:10A4C000A94F7ED3AA43B5EF0D0278140DF70A6F9A +:10A4D0008902C8AC5A0D979C3C3D0B08DEB2E09651 +:10A4E000D518FCE53BA28CF615351AF7DF68B601E6 +:10A4F000C1BDE3E4AC4C0C9BB5461272269334F913 +:10A5000026A435E5B7E1EB2F5C581B34028873C3F2 +:10A51000824198834C1021B74FF9AA68D81E6BDE90 +:10A52000BCA8947A5A725CB4CD2602C097EA82AF76 +:10A53000C83903973B52ADF7BD00D4D3CAE3EDBC95 +:10A540008E6BAF0D5A80AD558AF311652545E657E0 +:10A5500082156A1E282E1106D649F1A8C73484D266 +:10A560008C758D4DAAA48C42DB6B747F54377FC0F1 +:10A570008BC690F2170A9899C463A08FDED44D1E43 +:10A580003C11EBACD8836DB2A4B08C6FB7CD3DDB82 +:10A590002FB3FCB71C4D052CD2730BA51ADB98E426 +:10A5A000E2082663E9D8A31D6244891A296CD20205 +:10A5B0001C7C839D66BAE1A42CCBF2F0CF0DF09DFC +:10A5C000F01420D3A2E15863BA8BC0770954E31E7C +:10A5D0009A9D3CD4E7138D4B9BB8398C02D612DE82 +:10A5E000A4B467C6B22576B02CB645F288C96854C3 +:10A5F00047AD355AB3007A2D4CFDE153B88A7EC77A +:10A6000075FC232C241B7DD6325EFD3E3B6F057A04 +:10A610000DB75EA69BC5AE2245A16FFA96175924C9 +:10A6200055A5501E8B485A6BD75E1C79C3D6124E67 +:10A630002377E678CBF21E670D7CA0F24842D11F4B +:10A640009DD827B2F45F05BDECC4FD1030C7D7EE2E +:10A6500028986F9A5BB033669A17CB2D5296AA2D25 +:10A66000F9B0202CD80C7EC5574CB75816E94AFBD8 +:10A67000729DDCA72353E854053F19B702A82E7D2D +:10A68000A5CDDC7A1859CCF9104B4485367E08925A +:10A690008AFCE110BB694CDD26E0ED3C37A17AE590 +:10A6A00064BE2BD2C90B316577E3586E114D2F680C +:10A6B000C1F95B1E21D06CF21AA33EABED8553BCF1 +:10A6C0001396D56D2F6E519BCB931F1599C199F79A +:10A6D000A20746E41EDFC89CA586B4F682751B0A55 +:10A6E00000B4F21FB87197957916F0F7C674D30BC2 +:10A6F000739D5AEE58F6A957C81055F502FC5055EF +:10A70000D7D929405E2E7BB33F50B74463D1EFA425 +:10A7100061DC4A6203E3DBEBC090914EE3B95D0874 +:10A720008DDC98239BD7341F6D61942B89F01238F0 +:10A730008E74A256E5AAB139DF7EC2230F6420DFF2 +:10A74000D5325756517EC59E4A1ECB8154E2A696FD +:10A750003822EB4454FF0CEFDE2B7B30A8EBA042F9 +:10A76000D32564AAAB8ABAB2C9FF38520BAD9E0A90 +:10A77000C4F3073E9AEA7632055B726E65A445BB68 +:10A78000792CE27E6AFD0426A9764E763352B50115 +:10A79000354B34C494A7219DEEABA438C4C6EC2E2F +:10A7A000214A5EEB56B77A95D40115DBF28B65949E +:10A7B00099CA8E20060FAD4C7910D4E00F3E5AD1C5 +:10A7C00028F0A54B1524C51AC3A120385B2C16A16F +:10A7D000809D2E6EF52C924EC924F9B949165AFB6C +:10A7E000F0CADB00806EF2B1A3BD3B19FBA8E3BC4D +:10A7F00012C472DD979D34EEED79CD98C2AEB0A053 +:10A80000DBCFF40AE67A16937AC38C852163398507 +:10A81000DF5BAD21DB9A965B661831D08A6DA5AE01 +:10A820006E6F2C83DA600A5D46F3E04D2639A5F0A1 +:10A8300015D17BFEC69E4479465703DACC8B7ABA93 +:10A840001EF2BBD2FFD595225304E7C5A183980021 +:10A8500094E9F2381ABAF84A5CE25476412F2B1187 +:10A8600030B4432222E8C0C4E1AB8683311DE070DE +:10A87000329910BAA0D35086DC4D9623FCC3897759 +:10A8800015577340F10E611BAC1BEBFCB193649345 +:10A890009DB82AA69DC05817DE80BBFC6B514A911B +:10A8A00016804A26AC594F8175572BEEEA976AB845 +:10A8B0004E29CA8A556B6671C3D078DFC8E1ECE0D7 +:10A8C000869C7E5D05134EDB4738CACCEB94CFA443 +:10A8D000262972E5E850DFF750647467186A170993 +:10A8E00050A9FB1D7C811979E3C2513A19EB98AE4E +:10A8F000A6545C843F25F06F0E80485D83F006050A +:10A90000B693A3538812BA2E86764D08C96CA48DCF +:10A91000A9075A0AA297856663508F2DF466B2FC88 +:10A92000718ACF8B88B3CB087C94CEA9E6948377C9 +:10A93000CD846651F025E9D7A43121F1BD2F4265C0 +:10A940004BF56BAA08E880CE4562DF23DED198BCC8 +:10A950001A98CB9B120EB404A8986F7A528625AF32 +:10A96000CABD39A8844CC894C187FD07AE7B23D3E8 +:10A97000279E1F8AC200966F016CEBAE71FB4D39AA +:10A98000BA29A0DDA5AFE0FB15737251AB3A25F2F1 +:10A9900042F0DAC7C98E14BBF16D2E0E6464730ADF +:10A9A000B7BC53498CBD5B8C112BF084094BEE7FF7 +:10A9B000DCB4940A6BD680B76478E443CC16E0C864 +:10A9C000267C6BF2C2B735D8DAB3EE8BEC5AE123B2 +:10A9D000E4E76A5A49D958E1A8DED23BA6FCE58AE9 +:10A9E0004F47F59B833C0EEE400744312B95B7064D +:10A9F0000B004A038F3D9F22039AB5325A0A5851E1 +:10AA00008290CB9783EB35B293AA88786CEA14D204 +:10AA1000BDE51D1D4D11B44BDEA01DF0D7D210E5D4 +:10AA2000F839495464C714DE4F252C3C14CBFD057E +:10AA300074E0BE33AFF49FDA7BA89BF6419225FF0A +:10AA40001D4C6A15C3E852BA13099B926E492F47F1 +:10AA500054FD1AC3033E908CBA4C9103D2375BF17C +:10AA6000E4D7BFE711147A604C266CD535AB1AE1F8 +:10AA7000CEFB834C50C87C0B5DEEB2C665C4AC9473 +:10AA8000B2E764A5CFCA54A8ADF865F06FBBB0E1DA +:10AA9000D3C1D215B3D8228270E35C3C9A1DAB07B8 +:10AAA0005CC4E4E7A39ADEECAE9FDECE9EBA44BF60 +:10AAB000CD0477F007EA36CCDF556B15E69010042D +:10AAC00008F5A1F4A06274872C9B10FFA9FD8E4CA1 +:10AAD000C145E9942C9D1870777E62BD40B84088CE +:10AAE000747E2A4BE6551C8CBB7AAC04F66E24C8E7 +:10AAF000998957804BA7EE6DD869993052F70FF9B5 +:10AB000054F8922C5EC228AF707B23002DF165C0F3 +:10AB100007331A800D5C70AA90322EB7680AD7905E +:10AB2000F0687136201DA77C0F77D908DBEE3E5EFA +:10AB300032FC8A88ADE8E1E41F4935A9C0477CBFF3 +:10AB4000C94ABB7D18ED3515110C5749877167212E +:10AB50004071079488F5A8DEDF4E9E21266476B00A +:10AB6000DF334C543F7655087409D2C44505A14BD8 +:10AB70006CD37CE7ED02B1C94E58FEF59B91CD1028 +:10AB80001747DEF43362479A4F6282EE23AD758A2F +:10AB900033C00AE8FC7064932D14091847547DD61D +:10ABA000B444C633BA7E972ABF58C3081093DB015A +:10ABB000084C82FF8C6F0D0A7E9C4CB8B5850275DF +:10ABC000B9D08884DDAD3534EB00B8303E07FB6684 +:10ABD0004CB8976D500A40EB22B52D7D85D2DB3203 +:10ABE00049F8920B150824D2D53C2A6DDE50147E0C +:10ABF000BC70B624396D6CE175CE44BFD266DD0DF4 +:10AC0000A4994680AD8AF2BBA93C7B2D6890A93EF1 +:10AC1000E0DE24CAE3EFDC254CB212A1CE6F821C29 +:10AC2000343EDAED16BA2AF5562A51CBF47B36ECCF +:10AC3000A7F2A8BE52F4BC3535C792B01C68D38EBB +:10AC40007BAC149D58447E96489FF9947BFE404906 +:10AC5000E111C7E1277B7A0B0B9555010B4F7ABDAC +:10AC6000909A81DE8DDAA439D4813F460AAFE81488 +:10AC70000974753F1CCF2EDF007FE11C749EB6184F +:10AC8000B64C8728FC218AB21184B6B78D59C94CBD +:10AC90002BAB5DB339A1C91A8E74D06B7DDE9A716E +:10ACA0008927E84CDC0D15CB9323DA950C82F2074B +:10ACB0005A78639841140286A760BC1E55D45AEE98 +:10ACC00047D97DC3B67F84557B56004E0AC54CCD0F +:10ACD0003CF329495F318A4571361F8368AB521CAA +:10ACE00077D11DE01AD6EC69B0E7C66C94CD7EA38F +:10ACF0002FF00F6145BC22423F9DD9CC679118C30C +:10AD0000A7331FD118A96B023BFEEF8CC37115CE80 +:10AD10003CB2C50C00DD73A910B27089B8CAAFFD92 +:10AD2000FB9468C0D5D5D0FDD49ABD63D7FC0B2861 +:10AD300034FC169DB9E3E4E47743F319C9E8091C30 +:10AD40009EF6F021CF20F882BF8EF3DB58B99339FD +:10AD5000E17CC23966CE96F13EC538ABA456B53813 +:10AD6000FB600ED1608B8B3C7CA2AD13A802CAC2E3 +:10AD7000287149B4AB025C2C21D68BE7441277B022 +:10AD8000EAD2524E3EB6D9BCAC6E8344C350F1A257 +:10AD900029DD8F9CDE6904074F3496736795DA0FBF +:10ADA0009729CC33B353307BC29D69D87FC950708B +:10ADB0004C52FBEB93D25F66F0CDF591C7678D21C6 +:10ADC000603656C0EAA5531EE0BFFD8B1153813497 +:10ADD000773D2D873AF326C84D63A11FB85655DE3F +:10ADE00012B50A0122486B3C675940247E8D866764 +:10ADF000F824B9CB03F84A215EA8F0047F4B1B115D +:10AE00007137D7752CB3CCEA2A098EDDF2A5758B84 +:10AE10001D309FF1D0A9B966F79895E6AE2C8BAF9F +:10AE200088FCC2F33475A7D23424BF5183F72E3780 +:10AE30009C65D154465F559CEBD195E1B28936DDD6 +:10AE40005FAABAF58E55E2CDAD9882FA57855ED8E5 +:10AE50006CC565EC4C389E76F4B28DD1E94EE6AB0C +:10AE60000FA218FA88CB119A1224DDBDBD0FD5DDD3 +:10AE7000AFEAD12F1C25CA8B3F473606554F9DC1DF +:10AE8000E8150FE1D54865F01DF97A3A08E966B88A +:10AE9000AC873F0DD33A9E0020C918F4B1A42ED838 +:10AEA000BF0CF3941BED2AD246B595D316070AD5ED +:10AEB000D8D8D7C8FEED91E49C5046FB771EB187E9 +:10AEC000B5B927B7F50923EDF2ED044515F699EF6D +:10AED00078FEEAC9D494D018A9189AA75AA5EC0903 +:10AEE00050E67CCD6730819646309D75AB3338FA9D +:10AEF00068573D26CBADF191ED61F9D48A6CCDC494 +:10AF000081AF32941D4364948954039F5C57649FBE +:10AF1000182022325C45DCE65D335F230639D89881 +:10AF20003FD72303C7B3C69C6CED49FE74CF1CBE4C +:10AF300033B797DD519A1E07417B622C73871F3E02 +:10AF4000736F5EDAECB9EBCD7C9DE51A5AB1912BAB +:10AF5000B0F25324DE1B3AF3D2FFD211D6363C5A5C +:10AF60004AA126B8007A13AAD4D4726CC18876DCC0 +:10AF700034DBA6BDAE3E637A5CD10FFBF5739E5306 +:10AF800069ED1A413C3E1B50808A5CDE1CFE156850 +:10AF9000A0F883487C1C5DE6678DE0E7BA2856E799 +:10AFA00088951AFCA108316AB0E54A9505AF86BAC2 +:10AFB000445166E41DB85DB0637B767C6B58607C61 +:10AFC000E5E7037DF23558D7BA7BBDB8F5192FC830 +:10AFD000192B8C492027C3D1B1D26E999E1B97EBB8 +:10AFE000BD222664709B86088A648375AB96FCD06C +:10AFF000F4D346282CD9B2C4AB1115FD29B2974918 +:10B000002DAA131D1D2D500953B7D6EE0472F4C599 +:10B010002D6C85BED7F428303814CC69D114AF71AB +:10B020009FB69CB0486CF038AC19F81781E8130053 +:10B0300055D8702A15A33C56507826C221B54351E5 +:10B0400032B1133BC69CBDB17D533481C8C3DA1500 +:10B050000B50933446F3641C9A7164F123623F0CE5 +:10B0600026B647D9AFD38660618E96ECF2809BFE00 +:10B070005BD9BBE9E1D96BDF0CFC40F9F51BE6B706 +:10B080003565C9DE8B42CC07C4806DBB294BB10648 +:10B090000FF0412F469F5932B048C796904527027E +:10B0A000145986725C52C780723F224923BAF993C1 +:10B0B000D9962B8ECE089356D4CAEBEA80D9F38E5C +:10B0C000DECD8521AD980FDB175F9DB3315684A18E +:10B0D000BBEAE6296A3319C8C1E3FE093E4E244A99 +:10B0E0007157BC6EC94C71D60D34F4819393A93B52 +:10B0F0002998825C257F10381928F8DA8704D0E572 +:10B1000018171EA535A5BF82D1A3FDC0E810B5ACA8 +:10B11000670FDE8A6D54EA706CAD722A9578F5730C +:10B120001D733168C78D23E6251B75D657B3238A57 +:10B13000BEB1DC0A756BBF492A2B94C5B80147CE56 +:10B14000C8CB4B456264D64F0C7AAB4FC27170E1ED +:10B1500049B5E0352A88FE41B678589743C98583BA +:10B16000BBE6409EBD9BF4A7E402B02B7F5A8EF154 +:10B17000E16A45632F057B016DADF15BD3D9EEE943 +:10B180001EEC93F95D631199A363E18789E35399F9 +:10B1900010449B914CB55897459B20AE39EF16044F +:10B1A00071493C72136C6E60D4D8FA1922B74B5CAB +:10B1B000BCA1864AF7B3154A2769A014098F8FE905 +:10B1C0009CF8C36F5E68E8DE52098EAF7244E3AF4D +:10B1D0007D6951A2BC7E7B30C63889053A3FAD6B94 +:10B1E000ADA6B9F665A873FA9A1E08C7D962020718 +:10B1F00037119112D097AF34EE22EEB58CED146E6C +:10B20000B6BB003A09C7044C09905ADA639420BBD4 +:10B21000E917501714AC90430B1E3FD9B19868D270 +:10B22000A849FDF56B3FFE19B25A3D08CA2A0EDA4D +:10B23000A1460835E99AEE9E4AFAD5DF46BA8097CC +:10B240008CD579A0377BB729B2F15CC7F3E35857A7 +:10B25000C006D1AB72A3899E1BB81CCDDC8FB26D2A +:10B26000055A13B68666102F2BE3E42AD9B08D3524 +:10B27000AF406D333247E73AC08FE44DDFF68EDEE4 +:10B280002C8FD4D5DF65C17CC421DAB47BAAFF182A +:10B2900059DD469B9C03AF8312FF355F6640308AC1 +:10B2A000D3D9A2DEC22577AE44F0C485F46606F594 +:10B2B000D6F0057C2B935963B466D9D05B282A5FFE +:10B2C000695FAEB76CE7DE4ADF9E0451D22A014DBA +:10B2D0007F0CE99A526D96AD6A0F78B1E901EF1BC8 +:10B2E0008D556DA99C7D066DA63CB9BB662AE0F420 +:10B2F000077B1E22C693249ADBF104C5EA21CFED19 +:10B300002C75393019F756178D592C5202DB86E708 +:10B31000FB919D025B8434C4EA71728E5BD76E69C7 +:10B32000B1FADBD4088AE41A01A08BABFA56E5F037 +:10B330008A1310C9F4B7E4049D68821C0D8515BA00 +:10B3400034DE11F527E5FB25BA4573E453DB866748 +:10B35000DACA4E7908E501A16569A5EDE42AAC5782 +:10B3600054CCA8DB96890D5E8DEB202E9775FD4E93 +:10B37000FE61C21EF01C3D2CA689824C667345F905 +:10B380004467FEA84D120D4A6EB1BE5430363403E8 +:10B39000AB91E322647D261A5900DD2D5326E5BAD0 +:10B3A000F241FB0F55E18D5E6CE3AE849789939873 +:10B3B0008759FBC6F64D06F3ECF5D93E91FE8CDDC0 +:10B3C0007FCFB85E7276E7B1ADF1A3520B08A351FF +:10B3D000D4A403F01E990A5C1150CB3350C09A8D4F +:10B3E000ADD6C2AD253B8B9AFEBDC2DFDF6B0577C4 +:10B3F000654653B8C8B46B63A5826AEAF83194ED28 +:10B400003BD55804C41FFC413CEB04050F25ECAFB1 +:10B410003B26E0F8CC42A68EF088C49E81936B4216 +:10B42000E41C35A7B34BFD83A920E3C32F557F61EF +:10B43000CA0D64170B43996EAF907C22C0BED33FF8 +:10B44000CF81E926D79C3D28084EF8136C5CF81C88 +:10B45000044D6351C32AE98F75FF2F280B9910B64D +:10B460001441D79163848741CA1C8C2A8A07CAD2A7 +:10B4700029A608EE88D85D5E9BA7020CDFDDAB77BE +:10B4800078AE6C9988E0CE84C42D2668B3B42AB314 +:10B49000F18F7EC99E63FF2C574F62EDBFE9A6185E +:10B4A0006F64573F4BFEF8E3BA0CB50F69B6FD6702 +:10B4B00023BC113064C79087FF12AF50884553C535 +:10B4C00091327D68938E6ADBCE5BFA52789C507421 +:10B4D000473EB608FF6038E7BDD3A1343047657DED +:10B4E0008ABD9802A6670455F007CEC56C86F07D2C +:10B4F00023C071DB64A796BA16F2BD0863FA7949D6 +:10B50000810B3CF746F61708ADBFF0E019CFADEA66 +:10B51000F5277B208EF8AB64B8BC21D92296713F09 +:10B5200060EAB447F63E367AF971B7B48FEDB910D8 +:10B53000910314299A1722716D4C0F9E841E9D87CA +:10B540004EBE75BE25D3F9B7338BC72C89E8FCF105 +:10B550000E03D500C106E5B3BADD223E4D2F475F8D +:10B5600041A1BA15E1A1689AF7D07114A846AEC4FA +:10B5700054CABF3B85E074536FF7EBF803198A7C1C +:10B5800022A91D1C8B740B9FFAE3912A84ACC34241 +:10B59000BC0CC87A261CD690E64D098DE7143450B1 +:10B5A00053B2BE2FC3E7F93C90E103C9EE4D63DC13 +:10B5B00002BE80876B6B2C1A4023A0DBC241D94CA2 +:10B5C000BE20D23ED1E65B8667AC5BB1055F22D37D +:10B5D0005177BA801D0AC6CC15F76622F288EE268E +:10B5E000C1B7C7BA84B6FBBF3AF2FDB4427DA534F9 +:10B5F000B63F5A977B6DD5A53BF0D43B682CF2AC97 +:10B60000B0D5C5735639874657B3A860CC8CB3FB09 +:10B61000E26DD486A99392D6BD10E790C8B1385F89 +:10B62000FFA51BB92FB44E298C7249CBCC7853534C +:10B630008C9F714CE16555A35A48A24802915090E5 +:10B6400027F31AE46EFE331F765ECA52BF773604C4 +:10B65000B15018EA98EDD70FEB487B912316AD1542 +:10B6600042E711AD56627DC4EDEEC4963125A4A12A +:10B67000B4901C8A19794B544EB859784C53428D6A +:10B68000226BCE297B9247B5ED710EE51EF273B9A0 +:10B69000C03BF84CFDD021AFD4E2679B8E20A37154 +:10B6A000A8C1D005CF66F59E48A123CFD5E23820AA +:10B6B000584CA318CC4E1B4A2490D6321C10D3E908 +:10B6C000DC38CA1F0FCD61D57FBD60EDA0CA5C0E0E +:10B6D0005CFDB7D5455E562EC9FC1875B542C1C292 +:10B6E000F9535A1B12C015789D4A2B91F52F8ACD1C +:10B6F000B13AC27456D1D7B8CE7757EDD2225CE9B1 +:10B7000003538495162B89640043356E31D3DEA034 +:10B7100051030138BA9CE1C3EB59D444050765369F +:10B72000DA5D35254439495AC9B3BBBD4A1B1D8B67 +:10B73000FCD0F171F5ABA3A3A4F387E0E22D90B4A4 +:10B74000D93D3D0724665C6B3D57F745D63D33E751 +:10B7500058E29BAB3E03C2624E2896DB9289DF9C87 +:10B760007A46983CAEE819D03FA15896E8FE2A9D4B +:10B7700072E1BCB215C6241337FA58A1B2AF667095 +:10B78000610AB617D6F455B36A8B78ABA2B2589C4F +:10B79000F0995823643D4E1B2B41B94BFB46A2DE6A +:10B7A000BFC035BA5E919C1F89A966C24E97D4CAA4 +:10B7B0001ED5000A5CB25F0D212B6B5D134080EA41 +:10B7C00036B0EDF2E9211BE22AA7425C9F98E4A380 +:10B7D000181EA0254D2CC62E17F8D315BAABB59858 +:10B7E000340B967F529C0EBFA22BDA5D197F7E3EF2 +:10B7F000217CBA44B1A44F28BC97B1BEA5F09A8968 +:10B80000C1175352B249789FE6E85721783D8846E0 +:10B81000F6B1E2F28951852251886CB71EF87105A4 +:10B8200061275FE83286601AD260CCECE39D01C2EA +:10B83000CC532DC3647C9D3860E32FC8F04484C38F +:10B8400019072FE9633BAAFD8E8B8B3655C2B52BAA +:10B850008DAC19064CDAC18DA6CF65116AA615AD5F +:10B860007C5C95F8BF7F03E585949184837BADDE96 +:10B870000A692C7C8983B8F6D3A0C4B2A3DA9CD120 +:10B88000DF3E6BE4AF7F3788957CB5BA586E393DA3 +:10B89000A03FA5BA9A59E11E14A887665B82FE7B79 +:10B8A000CD3325D0C4BF58D6875BB6F92F3A7D4E2D +:10B8B000AF935622636CB088A46BA02110674786B3 +:10B8C00026F6AD074AB64B6157CB42A857B3A94DF0 +:10B8D0008E13C3031B9A12579DD18A3AE5C5E3BE66 +:10B8E000E0E906C45DF55CC42EE38582FB62BCAA78 +:10B8F00097D270689033CAA7EC4010F33CAC078035 +:10B900009ABF96001528F89F654DEE8D2D4DD69364 +:10B91000ADC696328E570C815302E214CE7E960845 +:10B9200077DFE08C845BEED9CF6678AA7613DDBA38 +:10B930005FB618AADF475A3698B3F2530BA00BF341 +:10B94000DE2B7DB75341BB7C547D68F27D815B4E1D +:10B95000D8C127DFA8F214B0F7C13FFA4380EC0446 +:10B96000A85ECCCC03C4BA3F03CB2C2C523AC0CB3C +:10B97000E692B991D6103B78322AE4621C15E6C5EE +:10B980003ECDAEFE2A89061A93F7992552E585CA5F +:10B990008B2876CD1A50A9E927B85C0D931A7D76CD +:10B9A000B49BFE351C131A36F3E1BD2E530E0B4A21 +:10B9B0005F1CF8B6309001D177578EF4A3BB1C21E1 +:10B9C000B0C07EFFED8849454829D40E7FF806A90E +:10B9D000BE0C94BE2C5C0C55D020E235A7E57B480C +:10B9E000AAC2BC5DFC225C42D645FC60CB9B8BE2CC +:10B9F000993A43EEAFF7F7B60F02D86FF41063B47D +:10BA0000B6908DAFBD4DD4FDE0A04683EC1D3CCF7C +:10BA100023F254E09B0F0C4AFC9B0ED0A26ABE1589 +:10BA20000750A6621DF95E7D43FADECB08ECBEE34B +:10BA30002DCC9A0BE6C9E98E4216F05BDE85B0ECA0 +:10BA40003D009564798C537175CA8F0687A67E3048 +:10BA5000EBBB968A41B8FE02BAACF44A59AADBAFF6 +:10BA6000ACB770FB13818BDD03D03E371ABF80F07B +:10BA70002113783CA5519B2D50DA4A02A6C63D57AA +:10BA8000D3F46B684BBBD5E3357EF60B7F3FF819DB +:10BA9000F9AFBD65BF54E31FCA183D57C0FFA7DF0C +:10BAA000C98BE9E18D99177DC735F23B4F180F1906 +:10BAB00017D6442B0C3D1647B0E68E4FC52FC9D87C +:10BAC00085242A171DF617F840620CD938C8803330 +:10BAD0000E32F2E5E74D290C3871DD71418427788B +:10BAE0004ECBBE5458C3DD140BA1D0EF6E06D6A8C2 +:10BAF0002B4DAC946B646504119C9F023B6778F1FD +:10BB0000962D632D8FA8022D0D938950437777458D +:10BB10003F18BABE96FAED8DC49908F3381C879188 +:10BB200024B2876CA0DA6CCEB3BD5671823815F2A0 +:10BB3000E73A89C7C46B18BD1880C14A8DF1B5407A +:10BB4000EFC93EAD6141B113E66767809071C9E10D +:10BB5000860047492ADF91CBC40015E3E5699AEFD7 +:10BB6000023860E4B86FA37CAFA436BF4CA632E0C5 +:10BB7000F23CE6CF7C05948510B18B8548C7203F09 +:10BB8000F22EA851BF2AEDF5725829CF253909FCAC +:10BB9000405AB746FE1F0866EC4C8F5ABCC2C663BB +:10BBA00065C5047856217080E74BB7612475F1A410 +:10BBB00091C9A55EAA64AA1B58B2B54190791C9997 +:10BBC0001B04E03754FD8A6A559AFD1658ED678AC2 +:10BBD0003F2E9C941DF3A6A682C9A61C3B8B5BBC82 +:10BBE000A99B4472C4F560C7B55BB3E4217FF7AD90 +:10BBF000DA41CE407DF11DEA7614E7B6451CF6BC6D +:10BC000043320CBEA4D49A8FF2FDDE6BB38F1B08B7 +:10BC1000441B9D4DB61E9F3DFA1159FCCF14CF45D4 +:10BC20009F3FC351832AAD72C8B6D42D725AA33B2D +:10BC3000256BBE5836FD557A828F40FC9527D0C3C0 +:10BC40002F51C9958FA2DE6AE887B60E581DEE08FF +:10BC500045D3696566CB638A1CA5044A9D352A973E +:10BC6000225ABD651631DCD4FC15D07E62D2C6895D +:10BC70001029E140D32E34431809CAD38851FE1E3F +:10BC800022D55F3F1C2F6AD79757E555707913402F +:10BC9000EF8386FA73686D8DDDC24811D75BA8B655 +:10BCA000F8D6800D7B44111D3FD9646D15FCD04C36 +:10BCB00099D9D612156C92E27CF7F04D4913119E7A +:10BCC000B745DD5361CB00A89428D3A8BBA08CD581 +:10BCD0004FAC70CCEE1C9B7B47BA4224E6265A6CD4 +:10BCE00083A8F1500B6D15F4EE7E2CBA26E5D338FF +:10BCF0005E5E7B4E00C3E06E39592118015EF26131 +:10BD000033B7E22C64148834BBB41C88ECFD1A30C1 +:10BD1000601600912635628E1627C825959A080D63 +:10BD20003CEA5EA5CB01F7F2A55C6AB3B37BD51DF7 +:10BD300046E11496C31AE4BAA13790197B9ED6FE49 +:10BD400012E09633AD5BE05EEA209ABC165B0258C7 +:10BD500091CC1F57118F488BDEC933C38D90BAF930 +:10BD6000ACC11199DEBBA4C5AA3623016458678B08 +:10BD7000931B3CB0EBB0A8EB9677049B42308DEB65 +:10BD800015F727D3AFD7CFC8529F2ABF14E63F3D40 +:10BD9000E529A4AFC473BBD05EB400EFE195D75BD7 +:10BDA0000E52ECFF7DEE40D5D392668FE95A5B14BC +:10BDB00058B207F363765DF6FF2454C1E75F975CE2 +:10BDC0005AF3671BE4BF4269385EA6E5E627DC4804 +:10BDD0007FEC6AE5A3668B0CFD973889F24197BD2D +:10BDE000A477AE016D486D68FF1DC9EDBCAB2A5943 +:10BDF0000490728A6662B9E30DD70C455088D9EC7D +:10BE000028170C407C60C3E3798558481ED7E33B74 +:10BE10007E36C1F8590225AE9CB6A2CFC3BEB3DDB3 +:10BE20004F4D3A56192AE02EBF788A7518C51A89DF +:10BE3000D3C7EA3EEB74A442191212BB8657BEC7A1 +:10BE40000DB6EA3CD781F014760366FF86705ED2A9 +:10BE500005AAEB5C07E41D94DC8028B1443CE9E0D2 +:10BE600075ACB3EAFE22D30C3CBDBD56ED4F456325 +:10BE7000C0B40B908E304C965654169379914E5216 +:10BE8000847FEB09CE1B1451F9F422643BE0E11DE1 +:10BE9000934FE01D32DE4A95D8CC2D8F256B71EA89 +:10BEA000C1B2548B67D6B21D2DE32E3A5A0EEB6504 +:10BEB0001D3484F2283DD22D6117EEA1B09511708A +:10BEC000399B72E5135E088F7712C97CBDC1C93AF0 +:10BED000DDACCD2CFB4AAF4F9CBA84B7EEABBDAA0C +:10BEE000402926B328D1995F8E8ECFBDA4F67AC1A2 +:10BEF00013DC6274E3E82D800E3AE642E190970687 +:10BF0000156CB14AAF0E171B8D6371EA27ABCA5689 +:10BF10004F67F8603FEE05045A78C510B9540CDB42 +:10BF20005A363B714926901D5F0F94DB6AECBD7752 +:10BF30001E22D46385D09B2A4E61D5663A65EEEF0A +:10BF40001ED7798AECBBB793E52FF600455ABF7F21 +:10BF500047DCE00D8B4C22CF838E5D5704929921F4 +:10BF6000EBBD49B013C7F61D0FFB48AD97816C0EB2 +:10BF70004D0E7CE5A62A1C7D85476E0C9D92262BD6 +:10BF8000D7D29F013EFD78AC0937E99A0664078352 +:10BF90000DF6585EE5E099AB503EB2F9EAEEA1A588 +:10BFA0009E1DF0C89D6657A9DDC902CD71B3CD268F +:10BFB000ECEAB1B12D7D227566A3A7DF5B23AF3814 +:10BFC00038937064D9105F376823F4DA77291BF54A +:10BFD000F000E5677F0B70B58C72D7097B3E129C31 +:10BFE0000526E2FC274AB8EEBC653CFD49B408B022 +:10BFF00036F6467D34FC74E7DBDCABB97574E2B829 +:10C00000394852FCFF35F0AFB4C6E88EE9DDF019CF +:10C010009D63631173420A78F34A37E042C5AEF478 +:10C020002AFCBFD98AFF2D3F2E481DB8C887B5AB63 +:10C030002C8F998DFC731BADA8F49B95F9508E1D28 +:10C040000CFC6B9A042EDBB86B53587AFC368FBA13 +:10C05000D7B859BC1BED4D36C887C3B43111862201 +:10C0600080510C5654EB786DF99825E15CE7CEE3EE +:10C070005098A2D32394E1F6DE26D63BC3371E8424 +:10C080008838B6C9AAF278DAD7B9EF98243E53E1D6 +:10C09000331BEE17747FC9A214C77D119FF643515D +:10C0A000B06EF8EEABC354692E9ED2C4B115717D4B +:10C0B0008CC5D9A08BD7199AAE9F46217B481CFF0F +:10C0C00022B8908FF3A0E4BCB609734BE09742EF1F +:10C0D0005DB0F9068275A246722816E86784F323DC +:10C0E00010E8D84A0FE626C924909CAC0C60BA31FF +:10C0F00029367E715FA3E9C0C83319469ABC336400 +:10C100000BF2F01BA24279F6CD4D0C8CFCE5CB6D09 +:10C110009861427D2E347947A81D9D978C8AF51E23 +:10C12000DD1A4E8359570E569CFCCEF5C68F2482DD +:10C130002AC6AB26F2090ED07A70D8F1BBA97DA62B +:10C14000FD2BFA74E17321684D10AE5244EEB12319 +:10C15000194B8ACA4B2CBD5FC4EE0BC3EC28C7E356 +:10C1600046ED2ED97FA2BF15BB430480BDC1627FBF +:10C17000B72EBF2FB40B36C807F1B2A3AF4A1FF1D9 +:10C1800012BA459C177317B359C98B2B05888D0EAE +:10C19000952B95E1911941018B42B34D97637984B9 +:10C1A0004A9131D5B88B1B9C790AA0CDD52ECFE909 +:10C1B000A8721004F00712744B958B1398B0967107 +:10C1C000BA5E707A301969F7A24DA4C167017E7416 +:10C1D00095FB751232B01CA9ED8ACDCAFAF7955FAE +:10C1E0004486985325A32EB46A4ACF242D5200A426 +:10C1F000B967A59B58EB8EA2A7FD8EC397295A4914 +:10C20000FAE7603D9EBD02AB91188B9F8056E8FA1D +:10C210003505EB37C96808CF9E5DB5541C1B5DF32F +:10C220004B1375786F665C54A6E80A3A2D18458A58 +:10C230001A779669BF160CB3DD4F32DCAC702D8DCA +:10C24000D5D8CE172CBD023C4085B04077D0702C9D +:10C25000275BA60223E900969812D27D4B523BC57C +:10C26000A6D59C99679B02390333DC6A8EABD9391A +:10C27000A4EBDE140B2443D956241E752FAE7F8306 +:10C2800048666147C984CF558F83ECD5FB6EADF00E +:10C2900090B88FBF98D31F5A5E7055520120D3A219 +:10C2A000B468D870B7C9F65AD2C3B46B543F4B06C2 +:10C2B000399DA7FD3B076624BA5FECD1B9C73AD7D1 +:10C2C0003CE7E4FEB91B06591CAC2185514DE40C3A +:10C2D000015CF8758331039E8B2642EFDF0284F107 +:10C2E000B2FCE9981DA5AF4029C0FB45157F7844F5 +:10C2F000911264F58F1C145F6862D40811218B6D54 +:10C30000376DD46230AD834C86FA96005574813017 +:10C31000AE17F940B68C1EC6CBB5EF34EFEB58BC68 +:10C3200049A8B484023560A789656FE22448549215 +:10C330001216CD017F60BADE5E6CDD28D89C4DA060 +:10C3400019C077752222E5875EBC1AD32198680F41 +:10C35000E363D79CFE3F5258C5D740FA980DB7A06B +:10C360009653021078EAA75972F7F3972B8C552A47 +:10C37000ED3639F999438E59C801277EA9152F2921 +:10C380003C8F17914CDA6D9695FF668CB700F49D43 +:10C39000C1DA0E9F490925CCF87FC782194F726414 +:10C3A000464D0F3664BF020C128D56B5602493D9EA +:10C3B00034E62996C93AC09CBB24F36A8A81710984 +:10C3C00022EE7CEDE60334B0AA6295DA8E14723761 +:10C3D0003F2E2B9526D8B61F2656D95F991F5B880E +:10C3E00087C2E03E90B9797A9E577589ED860A53E7 +:10C3F000FD000DCB7F85799BF745027F538D36502D +:10C40000C324A498F78E5F86C2DBF0AFC3C3E67384 +:10C41000CE39CB29E8F5ECAB1CBA1258A937E3A604 +:10C42000F34ACF920C952C47A501DA6415C11AF98D +:10C43000CB5AEBB00217ACD8C0EC8902EF254BF811 +:10C440001A004E284C8BC0E9BF6D99EBC0F121E07A +:10C4500027B141AB6BD28BEDB57BA2E22E2C1F52E4 +:10C46000F3837F8D40C1F8125A0C11FE3064ABB4D7 +:10C4700029C85ECA116E46F20876FD3D7C702DD546 +:10C48000B391F8A66C3E1C21A55E7B91EF0397BA91 +:10C4900093EE5C618CF30F8D52A3CB3867710D76F0 +:10C4A00022A496A73F9FC430AC536286950BCE2F33 +:10C4B000DB246B743B0DE262398574D83280284EE0 +:10C4C000F6BF60688D1CD22F2088205E383388BD6F +:10C4D0000F742A9214312F04B79F7B1F00F26CB7A0 +:10C4E000C1495C2E13FAC74D0BBBDE084DC710DFE8 +:10C4F00006F6627E9FFD573216BEC92ADF3A4FC04C +:10C50000695215E4561AC79AC5FDFA694491E59B2C +:10C510008E4847B58829506C69CB6FAC6DF7934056 +:10C5200053E61B0C3CD175FE828E5DBB9E5D3FF1D8 +:10C53000C2E86D10B4FF74DFEB410309B4C427C730 +:10C540006D4D817902DD2D60F99D9B14BEBF8B3747 +:10C5500064FE9147EF5B45F3F732A03057687819D6 +:10C56000C65C17E5E3B4D5275DAA7193DC0712E634 +:10C570001A0A8DCB9D5B00CA2DD9DE36EC66D577C5 +:10C58000B5A8D930698BC83638608CD7FAF7CEF2A7 +:10C590007B63B36411B62FA30DD78E651ED2D6DD93 +:10C5A000FC5BB78812DC21FA24BD317B34299C7DE9 +:10C5B000B5242D51F61021769C08E925A75BC92CDE +:10C5C000363535257CA52962B43A9B0F12F17826C1 +:10C5D0000C81A92940B31BE7850F292CBEB26E55EB +:10C5E00070DF23F850766537747B7CE1032DD8A289 +:10C5F000088E0E5C83AAF7DD25A3CDEC54A2D80EDD +:10C600008BF3B57B90FC02EDE71F2E73B0313273D4 +:10C61000E3D2AD467664A1E9E7860EFD4F3D85A9DC +:10C620006B1976B6127C6DB97F528F8EB551C443AB +:10C63000E15A69DB688592E81BA4DB749060C21C38 +:10C64000AEB8B4B11FDB6EBC96AB7BEB8590E00758 +:10C65000A7075EBFCA1EC82546B30E7EC5DDED9D89 +:10C660000BBD9E760199BBFF228E74B95DB12B087C +:10C670003F1157E31BDDD430AF31C2849D6267C5E3 +:10C68000F0B276B0A63148CD010716E162903F992D +:10C690005B3DF86EB241B0798B429CC1E87BCE1213 +:10C6A0008C14E9F139DAACBA1278B9C107E59E0207 +:10C6B00034B5D5FDF5969CFD49265DCED1AF098EEA +:10C6C0002E633B7D50A541CD942A0FE3E8FBE5DEC8 +:10C6D0009F653A1AB41DCD3FFA9A38B6D84444C281 +:10C6E0005EA2EB30C57518C59A340F41C760331789 +:10C6F000281041DC8CE9EC03EAF4E8206956A8B67E +:10C7000055654FAF552DA023DD1622A715BA8C22F3 +:10C71000BF39B72D04AD86B14BCF2D5EDF06F8775C +:10C72000975BE45FC51EC5929C850978D090A743AE +:10C73000EECD13708CE1E7652E7DEDFC2056028175 +:10C740001F425D94C28FB53EC2C554D1D78F5AA146 +:10C75000A3EE636FCCD6CB0C1D0641F02F34B1A5F0 +:10C76000FB5E53EC9185DBE57BF70D5ADB534AF515 +:10C7700081DA67C0BFFEE7172BC4895643909FE557 +:10C78000471B7A2DD644EBD303EB7F0B0BB6533507 +:10C79000FD06EEE558170ACDBC41CC4E5D3A43F09C +:10C7A000E21A9145532A6E43435AC48DC067CA9614 +:10C7B000998D68EC8381A2427DDD44A50EBB236385 +:10C7C0002B101AB10364E7FF1C4D924C6515151F21 +:10C7D00015DA025DB1FEECD8FB26EE25B6CDA3B886 +:10C7E00074EE5D5FE30718927D2F881127437F5E0B +:10C7F00057F62B1EAFB77A33A74151BC9FDF29BE36 +:10C800007E174D7AA10FE7246B3DB26A5DB8901F89 +:10C810003C1C842174B1B4897ACD0C03570CE441DB +:10C8200036D25B89829D66C0BD81F8C3937269254B +:10C830009BFF6C7F9078421940742C278E6900B959 +:10C840004531F4012525F7B0E85D87E8703C5EF4DA +:10C85000F087E9CB54CAC6361F647482DCE289ECE7 +:10C86000FFAA4AAC4E4E84C9022C4A65279DA8D324 +:10C870002DC4B2E74DB1D5FF3E8BE4B974678C4C43 +:10C8800087C534B9EB5E7758305288BC0A86C987B1 +:10C89000E843DBCD9BA538313EAD321E40E29946E0 +:10C8A0007E562E51E75E666F348FA2D4B0DF3BA573 +:10C8B000AAF942FAD2C79362A6481C1ABD1E40606C +:10C8C000ABE625CE173DF1B7372B976D5F7C81B175 +:10C8D000149C5C90126D9424C7E46B619787415B54 +:10C8E000963ECCB81D3BCAF776B3D76D518ECA15AC +:10C8F0003AC1B1AC1FF680EE6D3965E77AB2625786 +:10C90000870CB58DCA2243EF24D55E7EEBA23E5B39 +:10C9100031529C139F11FC9F2EEA7AD6EEE4C01888 +:10C920005099AC046EB0B8DF220C61C1FA9E460784 +:10C93000477139B4A3EF2057BB9C335ED0A4553761 +:10C940004C04DF54B035652A44A08434881F884ED7 +:10C95000AABA80A4A5EB1D79A794FE6CDA2B3FEE52 +:10C9600051DA70C2F2EC7AF9918B1EB5B59F0BF0DB +:10C97000F3578653C09F07CAF59B659C021F0F9A09 +:10C98000417B896E0001F1133F212297A57C088924 +:10C990008197E96D9B2D7933853142FB1D67902985 +:10C9A0005E1494D61BF28E8D58F06128EC8D6FB812 +:10C9B0004DA2884537D337BF490E74CE5EDFF14CA8 +:10C9C000735C9E9683363C23FD6B891AEF08C10782 +:10C9D000ED021FB7C55630B682F47292D0DB7F6E7F +:10C9E0008E8A11FA1CC71480E82D44CF16F0B4C605 +:10C9F000BCE6D675EC39F5D4F38CE9599CBC0BBE7A +:10CA0000E7EAB200E238E0CDF86D78AE29DBFBC191 +:10CA10006BDA21F60F1F9A508564B372899EF13646 +:10CA2000D4252B1E29D4E0AAAA8A52A4B460A2BE9F +:10CA3000CBF99F2679CE470EDA43E1903EB138E438 +:10CA40003563587B2F967E38F484B85B88674D3009 +:10CA50000FD230B98C51C940EDD9932BA841A647CC +:10CA6000658019EF5520941017C761D387334D485F +:10CA7000BEB417F608635E129032EB79B3C5E7BA1D +:10CA80007DD8787F3D975A93C0984E319B3A26FCCB +:10CA90005EA21FBE8E83A4FFA282CF811457590AC3 +:10CAA000D511B680BB93498FCD9FA3595EEC42143C +:10CAB000CF853A92E4AE7A2309C4C3798D0EC7B10B +:10CAC00042F93DF689C2D4DFCBAAA7B3227C7660B7 +:10CAD000549A172296819EC4D46D527D7D2F26C212 +:10CAE000800098A333C4CE40067D711F611114B835 +:10CAF0008A9BA246394B1382F1060A9D74D9636C56 +:10CB000075B0D05A8131591E471C8971FE1874279F +:10CB1000094DA553C66D48802F1DA78CA734278FBC +:10CB20007708BCBF411D6BE39FC20ABAF05BB1B18D +:10CB3000B242DC9A8CE24128FD26CC99C5C662B887 +:10CB4000C97E7FB192CFC07254720EFDCEC92FAC98 +:10CB5000BE6E4B8DD4FD381156645BEFB5D83CCC1E +:10CB600076E0462F87BA1D3B84A016042DB8084EE8 +:10CB70001CA8FF9B8B139D761E2CC8B9DD810C89E8 +:10CB80008F6888D8CAA517F5033B6A5280FB947258 +:10CB9000FADF9C5BDBA5D622D2E592E395C3CAA55A +:10CBA0000E2C84773C3C1AEEE20924BE6C99A9F65F +:10CBB000F7ACCA740F8630888162E89E9EE4C16734 +:10CBC000B9199F71CA9A4CAC903AA7FEEAB85B9B20 +:10CBD00041ED23E7856EBD1DA6D7ADA246F099B005 +:10CBE000DE2FDBC5B124802E763033331B233B1E72 +:10CBF0005B78B2E97F104FFBAA5C4B6B339B78A646 +:10CC000041ACA4BDC0DE5921127DA0D80F574A3EC9 +:10CC10004B7AA543A3002E69E616A7D527EF241467 +:10CC20003CCDA02D302392D0D376A1846534EE99EB +:10CC30003480B26BF3E4C41497E0EC4AE77ED9A7E2 +:10CC40000AB91EAA7FE788A4FF5FD42831F0C1D3B8 +:10CC500074FFEAAAFA4BF6F8C497D79ED9ACB44150 +:10CC60002D15ABA4E969A474E50CFB7F22CFF0710C +:10CC70003B489A283CD5FF4CAD7E28734DF0B597C4 +:10CC8000DF092453551BDB0A2918F6635F210F4384 +:10CC900014021EDE532366914E9872F2E335E8C00B +:10CCA0006F65EA1FD6AFF1BA69A2831DA6F62B7F86 +:10CCB000B562F0306183F244535464AE6D06A3F75D +:10CCC000B772307B7FB1DB884F86DC275B22ABE01D +:10CCD000F15B2A52DD63695253A903C4E3080707D5 +:10CCE000BEB64FA7D4AA39EDE84AD3F597AD56C0E2 +:10CCF0002833070A024A367D41267F8E03F41F7FC0 +:10CD0000B304552A1ADA84C31EF15C813586417C4E +:10CD1000514AD089B03237756DF7BCAC91A86BBC65 +:10CD20004B195048784E199E577AE48D80AD12FC0D +:10CD300026B363FEC0C6F66320CD6967BE7E6B81F5 +:10CD4000B58D0C86B93A108ADA913C687DDB70DCCF +:10CD50005C1B9483BF4B616C2BE1C555186944DDA6 +:10CD6000F67E3AF1CE80F0D3BF415411387DE529EB +:10CD70009E5AC6274EED8CF2CC4BF5C56D1408A11A +:10CD80002AAD3846D966CBFBD9FBC4D9539C268F34 +:10CD90009C9F4235629E6320F921205A9370D21ADB +:10CDA0002200F96D6F8BCE7CF1851EBD48370F5B7D +:10CDB00029E937AB500552E14773BD2EDF985698ED +:10CDC000DA97ED57DC2758B50B899984A5ED276CC8 +:10CDD000666BC3E64B27D9735010F26C90D3027088 +:10CDE000F23FB87CE0E9F635D0D6D0B0189C37DCFD +:10CDF000627417E01F7684CB3FC2421D49D412C132 +:10CE0000C54C2C9A65D1A6CD9E0883CF200B313E10 +:10CE100091EFA115B3969E37EDBC5841FF06779F61 +:10CE20006A23BB3A13722D4B127519E317D3987707 +:10CE3000EFA79789F86282E2302ABD908F7D721544 +:10CE4000698EECE40B741CEF0A5DCDAD66FC5225D7 +:10CE5000953D9ACDBB5F438933A46C99F5C4328369 +:10CE60003CDB2D90E87A01D5E1E043AE3FB92ED30B +:10CE7000515989A0611E61AE26EDC1F3173B461DD5 +:10CE80007DD8AB55846F858E8073EA338ECCC465B4 +:10CE9000D6437C77A8DA4A1C5C955B06674A60E655 +:10CEA000FFD1092DDA3FF139F4304EAF7E6E81BAF1 +:10CEB0001AED6B74467CFE53E17F500671A6E18E3D +:10CEC00015110A12C017E4C67D6616FB774D89BEA0 +:10CED000F1867EF4BA48C270234FEAA654840D63EB +:10CEE0005A635C4F372E2F3411F85F9F5FB8525F43 +:10CEF000F0BD3BD9F38C39CD91C106A875B4856DD1 +:10CF0000E688C13EE4A81203F60B9824F30F0656F8 +:10CF1000797AC64257D2AD3A7D961442CB0588B194 +:10CF20004CBA382933FF35F5926D4D0EAAF20CB28A +:10CF300002943265A3365C75F6AEEF611F773BC095 +:10CF40002ED2DDADB77A789CC7EB255267DEB13BB8 +:10CF5000D27A354ED640DDD75E59662F0DF69297C0 +:10CF60002204A5BD0E9EB6784E7CD08F3DB08AA31C +:10CF70009B08BC075B7D5DF2BD71C00AD0E9B116AC +:10CF800092B99F4CE767B01F194D40EBC16D421C31 +:10CF900073E522515D9C1F3C1465B341B05DA49BB9 +:10CFA00040DC1FC118142AE008C884CA308437DE68 +:10CFB00050A0F126BC51BF86E69DC555E31B6934E0 +:10CFC000B32EA941062390D1D827B2572843FB4757 +:10CFD00014E9A1022500371F7D51B4569A37F897FE +:10CFE000463C2740FA4E8FE6C753B13474A0879170 +:10CFF0009BFD4C8F3B54D292E618F344DA067DD168 +:10D00000EE42C8784B96DC90A723019D41FC6ACF85 +:10D0100008855B2DFBE4D4ED89795C773D8A4B6311 +:10D02000D2BB22440884C0080DE078ACE4C94F4567 +:10D03000D240002F90E87D9EBAC3963433865A3191 +:10D040000B8FE5CD301C626CD19EA41C2A65035E5B +:10D0500052607142C451321AA25FD085915793F049 +:10D0600032C596474215A56AB410B6A1A9597249AE +:10D07000CDE27F156272644AD7E48C3A3F06B2D69D +:10D08000E9E6FB8CF72507FA2CEC2DBAF98F1F0E79 +:10D090003BB0C411B38F37D99DC9014DEB182F5345 +:10D0A000C715E5C3083887FD7653E0D68D7100D2E9 +:10D0B00046FBC6B0F46962E1918D103F3C61D9A195 +:10D0C000F6810A15756FCF3CD047B82C81DBEAA1F9 +:10D0D0001968BC939DD0F17FA8CCF8B6100B04441E +:10D0E0009645B924CE73CDB00E6ABCA51FBCEFFF28 +:10D0F0004C91D5E67078C3846C6E5D33E1B72A98A5 +:10D10000E27B2AD9D72CA208F4C16E2867E61870F2 +:10D1100033E71B8838B94AA9403F8E6EDAC2C07225 +:10D12000FB6FAFC02192C0975B44BF8C53103B088C +:10D130002E26EE7F9E635246DED4F8A88B387C3ACA +:10D140006992BC4477346310F8234AC44A5DFE45B3 +:10D15000BDCB800E8603E0A0A7C32CF26D6AAD5B49 +:10D1600019F44C30B70B08E72A8809141DC07EABB0 +:10D1700086D24EA3EEE9BF842A05D961F3C06B9B2A +:10D18000D406CAF45C26C47C1687F0CCEAFA70BCDC +:10D19000D21A8EDCFD3CA7DB56F405D1485A1C3B65 +:10D1A000B3746D52427702C2AD1EFAB5F997C4123C +:10D1B000D99BDE09D746D0280A04563BEC14CBC4D1 +:10D1C000D1AEDBA471DEE322E9151A6088A4D73C56 +:10D1D000E281FE4F267DE60CA18E874BA40724EC4E +:10D1E000AA9120F7CFB94AC1AE5A569EEA0FCEF3A4 +:10D1F0002EC005C5EA87025E2C32A21D9A93F8BAAA +:10D200007B353129CA9958C6E2168E12901E12A893 +:10D21000332D61940130B5B75A07328957D89E1023 +:10D220007E068D93DF5B600718174702D06AE0CE59 +:10D2300002048BFDD95CAE15380EBD16B46764953B +:10D24000ED87C9DC9D2E2DC2AB3AD3E7723BC348B4 +:10D25000D2DE3A2E2BE27A5EEFA4049E437A1BEBD9 +:10D26000D0A54418119E4B3C4E125E27A55EE4C229 +:10D27000267B34274BFFED70C9387EB40EC6DA73B7 +:10D2800098059BF2CEE69941AE8A525AA391027359 +:10D29000C33CB2B0EE8D943E51F7ECAAD99B79AA6B +:10D2A00045FE6BC2952766838755A216B935B73DF3 +:10D2B000A9A47771B57C5BB274929B5ED091580F34 +:10D2C00027FB579983C21C5AB26E5F13CCF4F03916 +:10D2D000DA07D047CF7D645C07CCEA037B9D8F29BA +:10D2E000C81F3557EF2A838ED3CEBD2D9EB2A749D6 +:10D2F0008DE15B8E173632E3BE6FF98A51A5BE49C8 +:10D300008762C18FCC8015096479BC1FEDB3234BB4 +:10D31000F17333445D8B84A89F29E0D6C00CC2789A +:10D32000F76972C36D668139C478529AF499E80E30 +:10D33000D8F2B8B03E099B07242E97E66ECBB08397 +:10D34000054B7DFF0D10F38850A334E3A91DBC3DB0 +:10D35000E027BB10471FD14097DB0C359A4CF6A253 +:10D36000E9B780FF9DFF44DC250CD4A0612D6AB88D +:10D3700075FC4E7012C5D5F1FD635F5B3B4A9E574D +:10D38000D1A4C641EBE9520B0154E875BB43604F91 +:10D39000EA4734085906D14812D57E63066D241237 +:10D3A00006CFEA7570E14DC337AFE59EDCCBAE2109 +:10D3B000D9D630455525971BF4B4719CB4EA3DACE1 +:10D3C0008D25E7EB6610EC10E14CFF3A5607816AB9 +:10D3D000507D4DD5977C1A31E53EE2A2DADB301361 +:10D3E0005697A190170828F54CEB040AC2254F0464 +:10D3F0009EF7D09080A9287E9A9C35A5D3E2D63F8F +:10D400001A07B2465E5D61B98C9E4386061480BAE7 +:10D410009EC34249299860A2F6154C93BEFEA5C64C +:10D42000557A802265BC19D1F4D14ED8B8031CC4FA +:10D430007EC39540AA1FE273D093CF1E96E006CE1E +:10D440003CAD0DFC0CD99B5F51462F78DCD5F4E840 +:10D45000FF52902037889B1124295B07FBF590F73A +:10D46000DF31A26D70662822CECE857549A6D5F52E +:10D47000F5CA78DC22204B8C93A27B133ACC808AAD +:10D480005BD5A2057718924240B6B9E2DC3707F1C6 +:10D4900066427669D27AD245879972C5304A96EB50 +:10D4A0003DDC80B3AE7C0137D399473DEAECF860B0 +:10D4B0003BA7AEEE13B780B73610C09E948F24B151 +:10D4C000048F256CBE3BC12917E69F71AB542756CC +:10D4D0008CB7B273B2C1F797B50A776E227EE4902B +:10D4E000127CD0109993CADC3FE86A42B1C4324C36 +:10D4F0005474182C47A3BD8379D136C58215493D94 +:10D50000D7625CC5B7DF5E3996E192324F2792A7AA +:10D51000ADF960ABDDF88CEB8816DF3F027BD57B85 +:10D52000B893C81788D50D39590BA779A565880711 +:10D53000C5356AB9743116E7C15EBEEA5A621C9BF2 +:10D5400027513EA2430E7CB1E7E4B1742552B99253 +:10D55000B37ED737290F3470C7945DD0B022FD4E0B +:10D56000156E38408A10BD02E1B91796CD9D96C858 +:10D57000C55DA2A4B54CE65BD3DB08E09F6A742CC2 +:10D58000D56DB67D9C9F94C433633C6F67B44005F2 +:10D59000C1DE38BA33928DC80FD161C23B424A72A4 +:10D5A00090760D743931D2A2A745DEB3EF8A493B9C +:10D5B00000FD64F098E23C14AF69D25AA0C93490DF +:10D5C000417FD360E700C9F52FDEA50AFC4FC2E911 +:10D5D000F2E96A9F33E0ACF103B733D95349F04124 +:10D5E000F62266050648B595F795AB18D2699C7486 +:10D5F000A441D631AF15ED9946848C0DDAF7D01DD4 +:10D60000441EF3BFDC943CFFE36C8FCE2B6BFC38E5 +:10D610001C66FEF79AB8B76879C0137B1AF35B34BF +:10D620000F789BABE4186D4728739ACE01A4C3DC36 +:10D630008C1B2E7C1DC2CC2BAAAAF23DFC0E61369F +:10D6400096E4AA0476E4DEE07580D6C320CA3EEEF6 +:10D6500078BC0C34A89080E384584B1342815A6202 +:10D66000429A213D005192A3515ACC09868EECCFAB +:10D67000E5853AD6A037B5A2D52C9116FB114FDE21 +:10D680004169D8A09A2319B735F1767B795E3B03BF +:10D69000FF3EBBF087C4D3FDDB15804DCAC7D74C16 +:10D6A00003F495B052C97385687EF38AB75EED6660 +:10D6B0009CC8A9D4E459A52316A3C970D024E73780 +:10D6C000C00D3C2DBD2BB79C879292B7E94246E234 +:10D6D000091E20CA579E95BEBA9C77F5D4D4F5EDA5 +:10D6E000AF4585E7B4A2D4C4F25FC8915A97241815 +:10D6F0002E782DAF049A93568A9871218E0E0FAF13 +:10D700002F1EE943B72450E7092566899E44F4BEDD +:10D710006202D0DDF28D1B2B5E186954D054A0E458 +:10D720005D5A86DBC90C1397B57857EEB9BAA5DCFC +:10D73000CE77B0D81914325D739A3565BA06827007 +:10D740005DAC7260755F6EC3F29B2251EDE45A01CD +:10D75000257E00C6D7BFE73D1CF877931A3B87F7B5 +:10D760002455178A847082C53E1A66E0095DFB6CF9 +:10D770009B37442449FD9BC5259A4EE7C01BA5A4B1 +:10D78000E012B2BF9905C7952FB8B7DE89298BDFA4 +:10D79000A91E15D86895D89D913A71D6C1FFFEABE8 +:10D7A00055E6C1C111585E969DE6333A8C1629A7FD +:10D7B000B2E58EA33128AA5A4118435CB2EDB328D2 +:10D7C00028C64D3ADCBD21E8EFFA1FFB2DCFF9E763 +:10D7D000E4D82DB6D33DBDF040C0AD5D42E54CDC94 +:10D7E00042E95BF08EA324E2BCDD378832041DB031 +:10D7F00026958AB127192A47B6B529F1FC354F1766 +:10D800000405F9BF07678EABF944986FB5414A61CB +:10D810004F01F8D4ABAAFBC06858A4143EA28050B4 +:10D8200086AF42650FB15AF19614C9E998CE6D786A +:10D83000D75C5D76D1BC85CD581E4FC2C9AD3E794F +:10D84000997E4A4862AB4338F8B602EFC9BD2F0D46 +:10D8500055801F4F760817875D5FBF230EAA61545E +:10D8600022B1754F39393A26C1E17A3752C1164F84 +:10D8700089300C254D7922872CBC1BA0303A471CDF +:10D88000BA60ACDF0BDFC4C1B303544164205C5AFF +:10D890007E011698EB499698CE16FBD7492CD5B049 +:10D8A000A9D39DBE62012D8AE54E65844D68C2DD17 +:10D8B000CA3C787180D2E1038D733157B3528336FD +:10D8C00069D3EA283F39FD20C01D2596573E759C37 +:10D8D000910EF0D16ECF894AF1CCA976C2C7539987 +:10D8E00038589D3690A7C13C2D4CF642024EA81FD9 +:10D8F000F7010D31FD5EEDD6C4F8FB2A56EC263A51 +:10D90000FA1665BC67EE9FC5EC547F81D3AF343106 +:10D91000DA5E519CBF772A31C993888CFBCCD24206 +:10D920005654C9CB973B4E4CD912BE53F97F231A9C +:10D93000BCA5E83C289D83A4EDA109A5D966118A60 +:10D94000A696418C24E98CC7597E5F5211F872FF6C +:10D95000DBCFA537AF176B44046A2E3CFCED932355 +:10D960008D905BACF30BE5453634B6A58DA53FEF46 +:10D970000D1AB5A5C8075410405E1DADF060EB9FB1 +:10D9800033BD5D1827744E84EFB1B848E38071CC85 +:10D9900095956BD24CD159BC73472CF58076C39AC0 +:10D9A0009854E8797CF141B4C6E2F61F1FA3AA4A55 +:10D9B000C0C88949AE6EC835A3B4BBD2E013DC0140 +:10D9C000CCCEA7A763F639A3A0E1C765CEC8CAEB42 +:10D9D000011D165F4F071DD67EFA82B9F4F8FAFAD8 +:10D9E00051215AFD1431C0421635711DB9927AEF9A +:10D9F0000D1AFBF5DC137B66B5B197C97063CF05D3 +:10DA00006E61364455AF08F49A3049BD791367C842 +:10DA1000FCAFA920A5781EF03A4C37ECC4EA995126 +:10DA2000ECBD9EE774ACEE0B6D97382C5134C6C23A +:10DA300031EBB12BE9243C64E17C2E743473CAF5DC +:10DA40001B9ECF33B5C2C60537A7DEC0B162FEDA72 +:10DA50002B0FCC1886F78CCFBB339947305C55051C +:10DA6000C1152798C9CE7E51FF422EF0EF6BAAD781 +:10DA7000E1403BE2D8F95E016009523DA5AB90213F +:10DA8000E6EBD1154C805FC52A9D57DEE5EEC0C69A +:10DA90005A7498634D1B0EB6028115F0D25EE4A055 +:10DAA000BC1FD5EA43E7C64F55E11199081E10B5D2 +:10DAB000412EAA0CE52A21F5746955DDB133F84AE7 +:10DAC00059AFB45E060287BD8E73EE03EF72756DBB +:10DAD000DDB1162836BC2B9F5E5B6050D8364360A4 +:10DAE00070CCD6AE335F3C24C5970417DB29901C5D +:10DAF00081C50128CF6012A8F1C044E1496F62AC32 +:10DB0000DA91EDA35CF2639877CF4A5C3B8A136E9F +:10DB10003EA907503630808C78476D669245445D4B +:10DB2000262D283FE7F90B158327C7DB0CC09E2C59 +:10DB30002E25F6D12571896A42E1639FDC27100CFE +:10DB4000994EA3B54D243FF8B4626CAED19130F23A +:10DB5000288957E34E637B3C3F64589000E087BEC2 +:10DB60009F153B66D1BEDAD1E0E179872B65D6619E +:10DB7000B65E061BA78710067F00BF6090358546FE +:10DB8000F147B7CDF0C08DAA64E0861899702736AA +:10DB9000668BE564A97FB729EB332C13791F538576 +:10DBA000E0543B0BFE7E66A52189EF3B4B4A7DE2AC +:10DBB000BB01294C56B4ACD8984B49B372E209FA70 +:10DBC000FF73A49A2475D3669528F1948A38636EFE +:10DBD0006F7EB5DB2C01A4BAB5D6B0D01D799318F1 +:10DBE000D1DA5C95D82BCB239AFC222282FBEA4027 +:10DBF0008D7CE3EFF9A1C7BF0BBAC6E0D4ECE627F2 +:10DC0000C5DD3ACE71686D38F7B63BA246C37737AB +:10DC1000911A4BC0DCFD504275F1D402B7858224C5 +:10DC20001AC41E337B55F618978B82EAB621A5BE1F +:10DC30002AB62C6EAC91783816280746BE96DB368D +:10DC4000BBC9E2333AB60B6CF9DB173FCB0B4A701A +:10DC500072602E097448072F405654A46618D73DA9 +:10DC60000ED9FC071012AB979CD4C5A02FA47EE957 +:10DC70006DDD875B042ECAD096D309668188F84C87 +:10DC8000EF5E99F7A90CE464BBC19B382AED21CD66 +:10DC90003F7CD81042EEF8E6BC0DAFE6365248AAFB +:10DCA000969B5195292E001A5C09815C4CC19B15ED +:10DCB000134C03226404223C90A8F886DD2C3273B6 +:10DCC000FE01FF20931889F28241F190A8F09BA4F5 +:10DCD000E896F77F138188405D14BF4511094D2CEC +:10DCE0008D6F89E5A561D0FCE5A8CEEB9DEC0EE536 +:10DCF000C87EC45B9A8058FB1835E01368D3C5DA38 +:10DD00008027CA490E435E78605AF081496DF4C895 +:10DD1000E0333D7E6920721AF8D42E9B6AA1CEAA08 +:10DD2000707CBD5BE5C4EDBB641FF4CC752C2BB6D9 +:10DD3000E51B7F530FA5EDDCF2687E2A44302FA44B +:10DD400057AB5086FDB7E5DD6040ABB6873BFB5275 +:10DD500036A2F1C063981C99BAD55C4165CA77FABE +:10DD60009949E40D957EC81EF28FC4B63491ED93A7 +:10DD7000CD1D2169D722C56783BEF35A66A5219CB4 +:10DD800004D80A8572E0DFCB0D371705BFEC864952 +:10DD90009949E06FC6D91C80A94F41DA2732345F18 +:10DDA000C22AB0C7B872386566574D56001AE0EA05 +:10DDB000307CA29270FF06878BB086FD3671D8E565 +:10DDC000BDD3360D7D96F9D394F7FAEE2EEE1621DB +:10DDD0004B3E868303138CF7BE51DE960775A5A5CF +:10DDE000F629A7A07E3BF66D73A7CCF9EF425DC084 +:10DDF0006BED0E19E1B764E4045DE978158414ADA8 +:10DE0000B748B596A9CB957DAEFF5D053C2E3EBFCC +:10DE1000566C64B94C38255C1F682A4E0BB1EE96DF +:10DE2000B52805CD3054C58BBE31A6C1EB8656FB57 +:10DE300026006A906AD709FE9D3EE0C1B95F72D99B +:10DE4000756747F01225D80D3F032B2045A51F44C9 +:10DE5000AEA6EBEF579EAEF80BEE3E855409B652D8 +:10DE6000E7F375E185BB4C001B6FC93D5D6DDEB20C +:10DE7000DD04B81D342C23AE8D2FA88DF68E36B45C +:10DE8000879CA23961B3A8912B23812E8FCC90CE91 +:10DE9000CF9513BC8D976964D6A14007CF528A995C +:10DEA0009DEFC2678879D1F91DE39396D17B6E43CC +:10DEB0006661978C7EFE4F83E4DE8736E0FBA8BF69 +:10DEC000C07BD2571D8827599A29C92C227B26FD51 +:10DED000B6DE1F11BA8F9B17F0323DF1CA985DEC88 +:10DEE0009C4CC177E6D6083A3D4FCAC6176127B0A9 +:10DEF0002139F78503DCE963BF7858D6925854235B +:10DF00001C63B725F55BDE081ABFEF2EC3897EE7D9 +:10DF1000B7B16C67348049B022FD7CB1CC87F27B0D +:10DF2000A020A7715508326B0DFBAF640712AB67D9 +:10DF3000FAFDD1B5A2D194F6B55FE090F0F0662578 +:10DF400049D3023E04315119CC5C5AFE1F35783C4E +:10DF500011BA7D6FCF91D8C1E0AABC48AACD07EA1B +:10DF60003D74D6EC00EE9D6D6342110CDE61F8A0AD +:10DF700090315966158B866FAEE2B25E8DE8695FAF +:10DF8000ACDD72E2446CCE2C144729D367E5AA2499 +:10DF9000644572A1B353E296130249D5F39D095427 +:10DFA0007546049885090C5CA4D8B7E3EA58ABBB66 +:10DFB0009C5D3B3D537C436FACB2B8D36DBBF975F0 +:10DFC000AE347AEC03C052AF80B72531ADF973049B +:10DFD0005DC4F6046F493833F528CDCED22B17AE89 +:10DFE00041BC886E365F7A50E7428BB0B2C5BC4800 +:10DFF000A8D53B6C437D6CC3889461C643352C87A0 +:10E000002FC92E3461C582508752EA75FA0D5034FB +:10E01000B7D74E29C863B6FD5CB64AF0A39CFF7B18 +:10E02000E6180FD03111E0CB470AFD740CDD84A651 +:10E0300004905C12D93DEB08127547296F40383DBA +:10E040000E23C657897D993019FDAAACA5F9A77E84 +:10E05000BB79D1DC0D476D6318EC50835E989EA2AE +:10E060004B1361150EA825A09D0B8D2F73705C7E40 +:10E070001DB9B6AAC71FC681B5C1EC1760B374BD80 +:10E0800016886D64CB7D0E101807BDAD997BC32536 +:10E09000D0B9966C95A4CAD898F72AFAA0F0FB4795 +:10E0A000DEDD0FBE343E40DD12686DF17B32B427F9 +:10E0B000B7366A1A39B06E2B732B9495D1BA1949B9 +:10E0C000CE2D975BC4F9188A054E0ACDE18CA001CC +:10E0D000438618FFB0BD6EFAC5563CBDF508BC00BE +:10E0E0002CF6330D95C15CC9E008298EFFCEE556AC +:10E0F000BCAAAE5A62C6635DC943EEA13A0808DD08 +:10E10000F01AD74E3CB803E451911B2100F45BF3A5 +:10E11000ED08EA55AFE1CFDBD8004CCD73FAC6323B +:10E120006E186299A3F2B639C3797BB1792B8570E9 +:10E13000E881FE5DD0EA8560D8B116C9DECA967A5C +:10E1400086415BE8C994B2B36EBBF2758C7A7FB33B +:10E150000AD6E3D250919540EFE773A59B998C1CAA +:10E16000E74CD2DC0F9E6B418A4E873FBA5FDEE1FF +:10E17000BC14072890FA289410459EA20A4671887C +:10E18000F050285BCFE4C71F22039E7F90D6342433 +:10E19000F3CAC94F79825DD472D03E879898DB2C40 +:10E1A000ECD2E3A9990D51652DCD1F8248C8F19697 +:10E1B000A55F0352C91AB2E88A4E56649CB6244A37 +:10E1C000E0805722E14EE7729DED9B97731ADDFFC9 +:10E1D000DE92BF537712C9BDA72C449E186AFD2456 +:10E1E000667BB8D18EA283B6C874AD2E2EC078419E +:10E1F000EC8398979B6B90ED319EFB8BF9D5A7B282 +:10E20000F31369033010B7FAA868C40248424E30CD +:10E21000BC101EF2358A44AF27B28E656E3712BC31 +:10E22000B5F4AE6362E80A48AC3DCEBD60D66BA8DB +:10E2300044900085F396A3B1805E6E966D64FEF205 +:10E24000E4C22A4548434EFC075A97C5141A323097 +:10E25000ED0538AECE1E9E06EADC7BD19193940587 +:10E260005469F474BD121ECE52409F046F7B7E6CC5 +:10E27000CA36A304F42AA1F53C4A329713020C28AB +:10E280003480C53A6FFEFED676C5A9AA6C0B67F23C +:10E290007CC2C2011009C73B4DB537BC73148F80D7 +:10E2A000BAAE54784CE42A317814562C68B44553ED +:10E2B000707B12361FA247C07CAD7506CBBC39AD52 +:10E2C0006FCB37B2F5CB85A16C2479B206E5E47D3E +:10E2D000F7F7CFF96FA439BDD5DB5FCDF09FE4DE52 +:10E2E00002CCA706CF7387F29653CC9CAE24DF7581 +:10E2F000F62C2A3A6E067CF252CC1DCCB566C00FC5 +:10E300006DFACCBF3EACAE446E8CEF780D9D2EAB5B +:10E31000439D1BF9A5C7DBAE3978A2D6309864437C +:10E32000F13A24D72C5D5385E664188B9E6C9120BE +:10E330007F1BAC43EFC7D57F4CC9210DF1E6855B50 +:10E34000F4AB96045D2ADDD9F959906C1C4D7073BD +:10E35000251C558AD65C6D9EA16697B5B5E43B3009 +:10E36000CAC7306A86C976E4D28F3A06FBFFDBEA79 +:10E37000B965AFDE149F76A22D7BA69D452244FC95 +:10E380001BA14BD803697B22934393950D8D0E1CE3 +:10E390009F1F1E3D1FDC0A870B5D00A6BD0BAF85CE +:10E3A000AD217219EC72E4DAB95A4280CC3D8A325E +:10E3B000DCB52357E70A9E04135FA6F2D557253B29 +:10E3C0008DDF68CF59260AF3647D8D1EA72D0A497B +:10E3D000FC1F79995B627D3E328A1B81BE6B373AA6 +:10E3E000724DC21C5AA5001DD880EF66FC7E926C4F +:10E3F0008132C5D0B99B53C5D24E217B99110F6B89 +:10E40000DEB54F89E1D9A9712653480086A64E6F23 +:10E41000BEF8B3EABEB5E8D83F03A43AAF5023AB89 +:10E420003E8151101A80585BB712EF710ADAE50D80 +:10E430004B394DCBA70F9D92BB195A652746F7065E +:10E44000B4B997F12AAE30FB5DA3C5F7E05DA17DBD +:10E450001270F5B5873A59BB36B32DBBC2B3C68E21 +:10E460001348C5D1CF9CC829438EB68AD7F82CC093 +:10E470008426156FF361CD2DF92BE573AAF681770C +:10E48000DE1E5865637F4FA361CDDE3394E3FE4CFF +:10E490007E61B4236294BB556D69F78C00CE4DA5A7 +:10E4A000E903443CEEA41F526A06A6516A1BDE979C +:10E4B0008F433AF9612DC4F87881D51F38A89C8321 +:10E4C0007B7AC52D2131EB9906C73DA88ABDD4942E +:10E4D00037EADE125BFD8807AFFB3F2DB6E8B93A9D +:10E4E00052DFB2B4EE9BB4E7AC1D73485F57284CC3 +:10E4F0008F730A784394FB329532A6B3C40F5A9CAB +:10E50000793606E856AEBB6A3D8DC1DB03A41DF625 +:10E5100097476030565CE4EA41AD2A21B0C540D14E +:10E520008AB1E8C8F3C30E8387DB8C039EC4D8ECA2 +:10E5300048FBB96ECE22547E42D798031AFBB7FB34 +:10E54000253DE84F807BD0ED674519E603D79FA8AE +:10E55000E774F2BCE4608943B1243E52E4F4951DB3 +:10E56000D97CBF954153C2BD9BD01867143244502B +:10E570005820286D4E18F48A2240A380888918F408 +:10E58000FEE1BA5E51C6F6868E013FAE4A9BA6F703 +:10E59000CDD7F71CF031C80F05AF139DC34CD4067F +:10E5A0002D7C3A4A98BF3A0889C4D90DA719D50BD2 +:10E5B0004D1582834EE4F592E13F4AB8400BC37596 +:10E5C0007588BED3BDF468D120F467AB942264C2D1 +:10E5D0008AADAF78ACA4F5BEBA4A875853281BFB66 +:10E5E000CD58A1DBB2D831029C766C81F30EF07A63 +:10E5F000E4373D9984B5D91D7F55821D20AAEBD300 +:10E6000019F205092C87B742FE7AAD3A8727FFEA4F +:10E610005B77667AE6AC16F45A52FD35A20E03F12A +:10E62000B381B85B32579E4FB712E976F013A2E878 +:10E63000531F0B9E2D53685BACEF640C8C5D35E66D +:10E64000A5024EB8891A789B61F950219D669B24DA +:10E65000644ADD10CB3EB84E471308DAD438900731 +:10E660006B3323A4D233A722FFFFDD76CCB630690B +:10E67000969CB9656CB1580667972BA5347858D32A +:10E68000E8CEDFC513696A909302925F218F0B8FEA +:10E690009349B33E8D6A7F28C7657A8851179122C6 +:10E6A000C7E7719BC10CD7C4360AA776CE1F2CF9D9 +:10E6B0003D7E55EA62D79304029629C46D0D3E2F24 +:10E6C000E28F34D4E09BC88303E1665CBBDF50C1BA +:10E6D000F3B6EB87F359B39F3AD22418E054D4151C +:10E6E000D8A34095CB6E4CE1F454E04829FA288B2E +:10E6F00034F9115E97845E3A30519A401CA9B5589E +:10E70000A975F1A54DD3289315A5607B495880C9FB +:10E710000DC1264932ADFAA0DD62679DFB98F9B0C4 +:10E7200052B439323387313707CA89B370773C42E4 +:10E73000BBCB1748E54C1A5D032903F5D0CE726AAE +:10E7400079DF7B5DD210F5A30262D2B04B59F8EFAE +:10E75000565D52827B499429A7B8B35B046EBBD93E +:10E76000D57748C012BE9DFBFD4839A304AFC20057 +:10E770008D37E63B84359F6C76699C3F7998CDA8B0 +:10E7800049087D8AB8C4AE302644ED3800FEA8ADF5 +:10E790005057F94AE1F810003D3C9946B1994F991C +:10E7A00035BA464F712A15C84AA2060E7463116223 +:10E7B000A1E17C83F7AFBBC4FFE8B7F5D745D788A5 +:10E7C0001BC77F804E03708B7ABB4CAB90E0ABFDD8 +:10E7D000F199503716F6E703283D3F6C31B8116BBD +:10E7E000884915CF84FEEDF27980F42E533CD91F71 +:10E7F00096C64925030CABEC040CF0BF6293A0D87D +:10E80000FFFEECA73A64FCDD2B3FAE02D6B1608878 +:10E8100030A2DCAAF2CA6BD3CDA250478F705453FA +:10E8200092E43FC1E2181863120EEE46399D4FC0C4 +:10E830006723E1C7AC8C6D897E15BAD3CA1A06DE90 +:10E840000E65CD91165DB5AD18653584C2154A0DBE +:10E8500008824E6A3BC3CA05FD2D759B7BEB94C6AF +:10E860007A569342EC4D037D1780A763711E06878D +:10E870009F105D3D34F5AE5A1C55C87BC6153FEF61 +:10E8800017232F9AAD32392D0CBF9488CA9593E582 +:10E89000FC2BAF396093DF6A9F0F753C88F1EFA9BD +:10E8A000FFAD251DAE04D5556DC12A38DBB386DF1B +:10E8B0006585B45D4D32A6A1852ACCEE2E8AE02670 +:10E8C000724C8F2702076C253B25A44C4CCE5A373F +:10E8D000093B9CFC003B7277689A758C68ECDE57AC +:10E8E000C72392A33B5EFA35B9AC2884774289FDF1 +:10E8F000C4D90359EA2313B878D24175A1907E5C3C +:10E90000C7BAC1BF709009CF4A3E4189A6798FF737 +:10E91000559DDD1CA399A3E70B6D73229B11B823B2 +:10E920008F19BD24524295A90E66356E67530C624D +:10E93000FE465BC644A7A26DC495F4E0E1FD268BBC +:10E940002DAF4165CB58DAB5A93C5586CC0A4A3083 +:10E95000763789FDA557A860A7DB4A85BFF4FA3A48 +:10E960009F48F633F0A7D012EAFA44BED31DC1F98E +:10E9700031ACF73DDD7A64757B27F4F1AF92650A1F +:10E98000C0ECC1DF4A20EE121E10F0E0EE06C7E335 +:10E990000F891778100CB9FB45D3F6E693D3DD4405 +:10E9A000A5D8729C0D55D5F7F9701892DFB360BAEF +:10E9B0003EFFAA22E15F1B1974A536DA7F6F899E9C +:10E9C00076773E18E62E08BCD3BD3BE538E8EA076B +:10E9D000654670D512245C5D3BBAF256779922B237 +:10E9E000EC5A5B89F9C53AA66353DC186ACC601609 +:10E9F000B2471293AC37A280D1B63A44325AC4120D +:10EA0000F32AB9AB4FBC44BD058D327C2EB372F0F6 +:10EA10003E57EB306ACEB1FBE60E0889FA68CCF3BC +:10EA20002E8895858AB6C8DA8F2F2BE1701DB7C660 +:10EA3000F73C539398EE46B668084778E7A5A534A7 +:10EA40000014E030300DCE36A9940DDA4B48023276 +:10EA50008A6A30F5AE17E6398F54825EC5C3F9A5D0 +:10EA600008CBC34DB48CC4CA448416C2EA27E45709 +:10EA70000F6FD461525432B0ECDD768EB6FB0139A3 +:10EA80000CF1907AE132A8257FDA7A15B5C502A794 +:10EA9000908C03BC5318D19C9599B2BB7DB87EF184 +:10EAA0002CE0C2C5F0AF261463FD9709CC6E72EC62 +:10EAB000C956B707C9793263D6469ED584A2B52E0A +:10EAC0002339424DE6F575242E79EB114AA1550400 +:10EAD000EC0F5F107FAB856D606A7DC081394F247C +:10EAE0008C28BE51062BC062EFEB2CFB1278A9A339 +:10EAF0000F0D47CA4D1CEFEA11996C1874BC34A372 +:10EB00003A104C4BF07EC0E6AFFE201379A695BFBD +:10EB1000B05D09C2AE3FD6A76FC789B8A30FFFC2C9 +:10EB20007679CC3CECBD221936691821021B4D8642 +:10EB3000910EF147F684D1AE7FE7BD513D9AFB8D32 +:10EB400039C4DF388B6ACB28944F0A5844E4C9088B +:10EB5000AF7D2C19D7DE50F4A0A4B82139706DD444 +:10EB6000B18EEE6E92F40048A470AA785B983DF0E6 +:10EB70009A3A0E578899F4846D58CFF4C0BFE11DBE +:10EB800013691BBDAC34AC40EC2EA8D961939B85B6 +:10EB90003FDF82B81AB97969C8C86186DCAB6B946B +:10EBA00062015D134EA1756CE925316708B2C8F0AA +:10EBB0008854753BD85E78628CACAC10707D703731 +:10EBC0006A806D0E7E583035686E4FC735AA1FECCF +:10EBD00052D022FBF4C7353B90B4C0B1A4CCD27F55 +:10EBE000B9ABAF96072BCFECD6D12278692119BCEF +:10EBF0007412231382BC1945E892944C8FD701708C +:10EC00004793B32CB825C380DDA7693C861B98E0E9 +:10EC1000E6BA6EBC52BD70917C49925A30FCABD0C2 +:10EC20000D91C60B87A1A1600B1A4B9D6D8BAF4C4C +:10EC3000077FD69CEEC9406B992D5FA8CEE23AAB18 +:10EC40001B3A87B006019955E6B0DEADAB45E64C00 +:10EC50007CEE33FDE93291AA0E5B2D6D30CDB3CB46 +:10EC6000FF08298546849AB376478B42F47151BADE +:10EC70002B863A48672F470C68ED48645C3B6F432E +:10EC80009F3E87DC2B24C7B70E4CDFEBE7A346750E +:10EC9000EB6F6D81217A0746806F4BD3DAFEDE2061 +:10ECA0000180DBB6535C4A4FC56DCBED8AA1017B79 +:10ECB000EAE72B9EF0086C7BBDE5AECD2B2D2B1C1F +:10ECC0001CEE1EEE7A19087D94E291A8A4EA56354E +:10ECD00023EA1DA643BD9C3C16A651FF5AA5789772 +:10ECE000EC0F56E4E2F5ED5298A32F6600A78F7C57 +:10ECF0005ED795F52D657CC62BAEF1EEBB5D3A7106 +:10ED0000663A9C3FC330DB0695A24CEB650519893A +:10ED100026311BE890901FE1AF3E13E395492DFC8F +:10ED2000CD839D45D88892F964B5608F4EFD3064DF +:10ED300042EEB42416AE38F028C4E397B476D5B4C6 +:10ED4000676FB030F7A1D9106F5AF60C53C6BF45A4 +:10ED5000016165406549359506FB483ADCE4CF72B0 +:10ED6000BFF71F67EFA1C86FE640D59518ECC32A1F +:10ED700002E665074D79B27596C51885A5187B32F0 +:10ED800010B590294AE0DAAE13DAF8A57F4E338C3D +:10ED90001681664E7C982E9E492DAB73069A1AE614 +:10EDA0001BBE040FD325D7E98230D6862AD8D74C8C +:10EDB0003A3B50B46EE19879A3087D160314854858 +:10EDC000A7A4469D6D2C5B0D4FC695F31DE58C5D8C +:10EDD000D45DD13BF975A5837F7654E12D42E6BB26 +:10EDE000C92A9BA9647EAA54C7E99C9CF6D56926CA +:10EDF000FA1DE43D321CD17733644A1FB26A0AE837 +:10EE0000D88091048EF55BE0979B10430AE4CFE530 +:10EE10005B035FC7E32192B69C597AD608C181355E +:10EE2000562B48D9BA27E826A9C725CDF5AE818C3F +:10EE30006BA1F0E4B399E03104F13FFB1F5673EE90 +:10EE4000C06866BFD56BDA6E08758783D806325501 +:10EE5000D3B7085C84E91C3C10E6D7CB89EA60098B +:10EE6000A257529369EC3087E39F0123375F0F2D40 +:10EE7000CFA871023F4714B2CF0EF193BC80220A93 +:10EE80008B20C42203C10B33E0C2FF0087E3D616F8 +:10EE90006D86942890C7BF1CE29B512BA7770C87E7 +:10EEA0005E158DB2C015D4B352EFFD39288C8B6A34 +:10EEB0003D8BB7E7F8920E70557D4D3D5A24C40046 +:10EEC000B809ED3A6671C75EC8151A80C987E8FCB3 +:10EED000D7A51703EDD8144C27361E6541866B2A3B +:10EEE0005251B02A2AFE326C896345DDA6DBBFC0D1 +:10EEF000716921BE0DFDCDDBB9DA90F8A3FEBA7FB2 +:10EF0000206A04F3207EAF4ED23BEA78C363E0D69A +:10EF100058B20012299C4C06141D9A35BAD8C7E580 +:10EF2000B026ECA60E0A19F92818C2544916E42096 +:10EF3000F6E7445E1B62500FB682307E624E006080 +:10EF40001EBD673470EC7A045CD7678E8383217CA6 +:10EF50001B535F8B303DF9F26ACF5809B400D823B8 +:10EF6000EBEF62F8A92858ACFE3DA6B2E534DF31DC +:10EF7000B1C35754D271879471082A8286F2EC711A +:10EF800073636F15B796C6DCCEA9DA88EB37B8AED7 +:10EF90006240317E7F392E7349EEE8EF159947C6FE +:10EFA000D835FF44CB4654C03F77104DAC720D09A5 +:10EFB000A941AC2A068747C843AA8BFAB2BDBEFD59 +:10EFC00090ED17A3BF7431DF71620A547D17F8E02A +:10EFD0004F305150D9E552BCFC68528CD5CE91FCD3 +:10EFE000E85D8263C8D9F770BDFD995C5CEE5F2275 +:10EFF000361ABFB76098AFBF988A14ADDC6084D86A +:10F00000E4B39C0F71E3A19709D4D0F80DCD8A9495 +:10F01000699CAD69195593B2F87A10C559D5F78333 +:10F02000D9425721240028089D28811E7B58766AE2 +:10F030003AC0977056770D2511F47D7631EC6BED63 +:10F0400067077C2C7E14E6904D65151CCC33BC08FC +:10F050006DC111F89EA03ADC42234DF04493868D99 +:10F060002E4FF7476C826FA82A6767B6F1C9200454 +:10F07000123CD1FDE95F51AE8C83C61E588F7E9B3A +:10F080008E88F0F18D9CAC73890B51903739AEC6E8 +:10F09000D4D9C46CAE49902F0D282C69D0B0273834 +:10F0A000737C3E83DC7BC28D748FF319F7BBE8025F +:10F0B00066E38E59D1E76E2CC9D157616E3A5B2D4C +:10F0C0000F15F8872563ECCDA3E00CD5C2EAF20852 +:10F0D00058FBF1A83067527B2449CD43C01CBCC00B +:10F0E000E1C3EFF69F33556EB233D9D60888069048 +:10F0F0009D0C576D908A5E35053B7CF67A96700EB6 +:10F10000CE9C42C2B62965F85AC777A7645414AE9C +:10F11000634E70B5AD1B3A6DD275CB291455275788 +:10F12000F34DEBC9FAF3002FCDC4D94DA4BE7F75C2 +:10F13000F2A34EE36BF1FDC7377BE580A78AD0379A +:10F140000EE459D30F2104A8BB4E722380D126EBC5 +:10F15000A10CFC559AB6BEB85E16D3E9D44701B5EA +:10F160008CC8D216CBBED8941C759023D915A56E29 +:10F1700051EB4B8561AE6D6F31F440B343D08A667D +:10F180006EFEF0BC14EEFCCDF2712F1A8E7A114F88 +:10F1900045959AC97F1543BC5CF75AB9FE3259B4FC +:10F1A0007CD919BAB23B79DA2711B02C25E86EE880 +:10F1B0000672806F5D59B142E08913EF079E5DF8DA +:10F1C00000C6F7F192C53E58CF45E01A06F02F343D +:10F1D0004B612A071B1F050FF6F5082414BA43528A +:10F1E000FBAC14FE90EF89E5DF9B62AEE38D7AC342 +:10F1F0006658A75A4FEA6FAA1B514ADD7726851138 +:10F200005AED2BA34145F32E01A9897F7E8A2083E5 +:10F210005B15E0DF41BB4577F6C48039140F245BF2 +:10F220006E24EF128BACE15878A9EE741718D5064E +:10F23000B1F9C309381B8B35FD9D4B888BE9B4436D +:10F240003EE8754FE16B506056CC8810DCBF619989 +:10F25000BDD442792F38841AECDCD648AE4FC75F54 +:10F26000B634CC1D3A0E1F03541D2F8FB7F972AD63 +:10F27000C057A3A58085E8BA5EE43A7B7F3171DD93 +:10F28000781C626EB825AB1F245C9ABD5728885441 +:10F290003DB6281C6FCDAAFB240F5B572B837E62E3 +:10F2A000B01EA38490231EE9CD762F186F89590DC7 +:10F2B000F7187A5F0CE072D88342BDED43386A33A9 +:10F2C00019F8EFEAB4CAFDD107C78603F3440584F1 +:10F2D0007E5927CD56164730095A84AB6D2436C95E +:10F2E000032A18F948EAA86394AC0907AB48CF7C15 +:10F2F00000BCABFEDDDB0AED4BC8BCB23071EEA248 +:10F3000074AEEB761665B15197001560B91B5A645F +:10F31000F89478903873A2BB0A3BCFFBDFD8E71C88 +:10F32000DCD9A9518C7A1640CC1D8F39C78F47EE96 +:10F330004C49E6750E75C76B13756CDDB19D0D9765 +:10F34000AB3A960708643AB70C8906E70935FC849E +:10F35000A68A6C73A85214F278B329E85B5064F95A +:10F360005314A6D612DE692EDCAD11C636C6BE45D4 +:10F3700007FB5AF054D5F682058E8502CE0903C1EB +:10F38000CF0421945AD39038744E0A887230545C5A +:10F39000236D40DDB84F1AF5255C6C1AA1C5348782 +:10F3A000BDE7D2ACCBE8F2E3F1C220E268B5427926 +:10F3B0009B93FB8B001C461C8BDF7D82CB2A86DE59 +:10F3C0008CC2B9156118C71497548CCB0712710100 +:10F3D00099BDD5762F8B47865830140404CBAE19CF +:10F3E00079B4A2BD5E1FC5F708E5ED6CAA4FDEB982 +:10F3F0005C300AF86D342380A464F871EFE55EB0E8 +:10F400008486A9C645C8E1771895C6215F4CE8589F +:10F410009C0E016FDA6AAB94431D43B7C94C606719 +:10F42000B44C9A45002147D41AC5EF4CCD6E1CED63 +:10F430006DBB24565A724EFF3320C00BA969F521CB +:10F44000F3645115FE8EE876839EEE98CA06C2D00C +:10F45000D5C6A952592B4C8ACF86D4864EAC5C2295 +:10F460009B105F7C883CE7BADA81E9AC54A009B70D +:10F470000182AD81DFF99BCF3E66BC8898A8CC2C79 +:10F4800022F4F41759E9948ABD2CC4C70031D46121 +:10F490003E0BFFBE2968A7AF2DDCEE2135640BAD16 +:10F4A000BFC8F009DDF5C6952481B874EA5DF8613E +:10F4B000299272E42E2EB4BED5F84CF97D895308FA +:10F4C000F892920B59D454DBD9ED1FBB7336CF128F +:10F4D000CB1F61BBD56AEB32A7B85A4ED5D707E52B +:10F4E000627B41A576227B2B308C77031B26734FE2 +:10F4F00085B0F61FDE53968B19684C5AA164FFF352 +:10F50000C21E1FA28F4A69EE2FEC51A83E8BE470F9 +:10F5100058FDC0E48C669FEEBCEAE22D62B0C12BC0 +:10F520007CB8D6E0966594A74E5241369015AC88CB +:10F530009BBA7916E9C3C8FF67A247D9FB57DFE337 +:10F54000C5664FAD53CBACE0D23F88ED78EC5AECBA +:10F550006EDF7849660D9F5F8224956B60609C59D1 +:10F560008DE3E5EC650EDB322123E20E5F734C2860 +:10F570008E820BB96CABF23EED11F024857A910DC1 +:10F58000B500C2E2B6C89FC8FD82B7D11E4063A0D5 +:10F59000C0509C20BBDA3C069817E7ACD2B9978BD9 +:10F5A000A7E6433293CB29AF39CBA6593A63A06182 +:10F5B000991350F020B888608145CEB06D17D38F75 +:10F5C0001A3CFDF46595178D02A418B16DD5C12ABA +:10F5D0003BEEB93B43ED56D469089F3A471E1D5296 +:10F5E00046E2EC858A4550EC3027C6BA2C03347AC3 +:10F5F000B7E06ED0EDC2387D51B5F634EC7DEDF15B +:10F600008E359A2609876F12D9A94F436637DE36A1 +:10F61000A3DBDA9AD0815AD32BA81CD63AB3A78B96 +:10F620004E0AC966FDABCBAE605F0DCDBBAD23B658 +:10F63000CC100C431BD3AD6FFFE35263B2E634D959 +:10F64000A17C16AB5A79053A5AB3C78743A2837E89 +:10F65000F32867B05CCB5F5E96AB998D9C80B90553 +:10F66000B2F338E3524708310B4BB3443DD49856BC +:10F6700020B3A094DBED6E2272D14A4240CA03024D +:10F680000781D98A58E463F39BC1F2DEB2FEFAB770 +:10F69000A660A37CD429A140D708EFA5695712C161 +:10F6A000E192C8FA1B108E32F890E5C1B034C1BDAA +:10F6B000352E55D1A9408B50C23D284C74848CC244 +:10F6C0009142B52F42E03634F43FD46E74F6BF80D9 +:10F6D00028CE18135312CA318725AEEA9F1FD5AB27 +:10F6E000AA8431C9EC3753B52E51F6634ED2023499 +:10F6F00069BE692CCED710EA3F959DCF5A779C29D9 +:10F700005370F21DE726A9CCB6F7A0A67C4DCB54CA +:10F71000CD098189365155F32E88617D92DA2B36D9 +:10F720009FDA535DB0CF9497B323827DEA39366672 +:10F730002DBD0978DBCA9FB8E9C10B1331BD35B9BE +:10F740000C9F2C63AA92993477884AB9DD600F9C8C +:10F75000493886B96ABC614FA2BEAD31D3A25B0203 +:10F76000925B5DFBA1F973BAD540E5BB999AC3984A +:10F7700088057C439E65AABED45C8680ADFC3DA115 +:10F7800014CC00EC5710118BC03CBFD5ED1565D3E0 +:10F790001518F53747DF72E6A10113A68ED5D4AC54 +:10F7A0000C5180BE0091B3F14EEA93E9DEB8C2DCA1 +:10F7B0001536F059565B66B2740CE9185B20484F59 +:10F7C0005829F71166B9FF3466E8AF40234EFFCFE2 +:10F7D000AF59760AC2FC8F47377DE5CC1576283BBA +:10F7E0005E3C51872A8004D0973DCCF9A16DB27957 +:10F7F000D6BA053F1529AC1A09013DF45930E0E1AC +:10F800004E532238DA1F8EB549B4848FD1F9BB7BB1 +:10F810007F03398E8EBCFEC7B8ABAC60C52330B653 +:10F82000CEF3EC2FE41D77B079EF841F069EC6C19E +:10F830009481D0350F76DEF1F68C66C6DED7784C33 +:10F84000978D10626CADB80DFF1CBF3F35EA59A40F +:10F8500095A4FE1769B6C85AD494AC8D1E23218393 +:10F86000E6FA2776FA8654215A0C4B55E2A3A836BD +:10F87000A64FCCA74CFC8255225EC5D7CC15487646 +:10F8800020352AEC17A161A4E639DD542EF39CFB48 +:10F89000FD84C62B2E3D30B1D74F26CDBB616163B1 +:10F8A0009EBF8BDDF38F94F655CADC817788052CDB +:10F8B000ADD05E6B653AC4D7C78185A5CDC97B7BCA +:10F8C000FD4B3D8BEF2BA335871631B8270C1E71EE +:10F8D0004C74BE9BF95517B0EF6E9815E26BFA8029 +:10F8E0005AA7A8B579323C152FF9E7AA1A87056FF0 +:10F8F000090A5E51020AD57A3E226C418CAC177817 +:10F90000221DB283CD0AD0630B2B9BA9F67B622507 +:10F910002DFAE10A78F413BBD5BC998F0E1025D9C6 +:10F920004FF75C315D0B6C68E93DCCD4FFB0CAF891 +:10F930001B3D7C799B9763DE6E3D3EC9D380CF8BA8 +:10F9400020EFB108C873B4BE9BF1CD09DBC5B7B8D1 +:10F95000DCF3F6CD206EED87A9ADADA83F1DCC3B05 +:10F9600051DF75DF5F6418502DA8F3257B80508D23 +:10F97000D437B15E8F1FC50F851A03A2BEF8EF669C +:10F9800067680F0807E2CC0BD81586DEC84EFFE289 +:10F99000C6C1255332C919BEE53CBB05F29084E8C7 +:10F9A0000C83EA2F657AD136C2F2408304F2D3B0D9 +:10F9B00081CE0E51660AE9E8EFD4EE49690F4A1785 +:10F9C000767DF2233EB679BBE18A084CD7CC14662B +:10F9D000EE979471E43A56F653A5C0AF6573A878D4 +:10F9E000E31CAF1B7620F089740A8679D9D6E53BF3 +:10F9F00042128D6FD5EFB3F5087304ABDA4168D7C7 +:10FA0000CC215C097025CA8C30B080B80665E5BF92 +:10FA1000E80D75CDD838AFEDA5C91328EF57F44FD1 +:10FA2000C78DA822FD89A26B4FC3D960FEC8C4311F +:10FA30004E9FE55DEAA528A0D0183562233147B571 +:10FA40002936D9BE2F2B0499B5E0AD6116277D105C +:10FA5000065994C510792632797D0EA1B14A989144 +:10FA60005C6042FD1338805DA6BB221F4E9E5AEF9C +:10FA7000D423BAB8B3E4439F9A81ABDD67BBCCCA49 +:10FA8000FC5C24FB09FFF18335CBDB14F74827F539 +:10FA900023C2B87CFCFB305F481359E2857A5B0FC8 +:10FAA0006539B3E9252561F1F51AAF867948331038 +:10FAB000210B2FA40C71A7990A5C49075A711EEDFE +:10FAC000BC872E40D1CF80C9BD23A18465D572CB20 +:10FAD0004F38F2B5D64512F265475B1EE582E9B9AB +:10FAE00066F18CB7E7613DE379E82676F8F80DD04A +:10FAF00044BBADAC4D0E608B57A91FD1F089F40407 +:10FB0000A3A152E8345BD47FA1FA7DA0000F783B1B +:10FB1000A99DD067347F0ABA7ABF0868CC954E1089 +:10FB2000E6A40D37A50A211A1093939125198D5C2F +:10FB3000BBE70F81BBF83C88C4CF10F8AFBE8BACDD +:10FB40004ACF737CB9E0E48E7D13143D145557E61B +:10FB50002CC0743FC4065A6D8F3A1DC3A2BC2EAE92 +:10FB60004021C87AFDD73E16CEB5B37F61D1CFC64E +:10FB7000FB67D38FC70C324E80D6C8330719CCE150 +:10FB800064AD98A3F7834E62385D73E6BCE8CB9A08 +:10FB900001FC2EB50550F3C803FA66F8089FD5F4AA +:10FBA0002310CE9D7387EA864F2F5AA23ACE7E62EB +:10FBB00007D63A0A715282AD57593454C6C4B9B9FE +:10FBC0004244C5A1EFF75681B2C848A59243E8EC7C +:10FBD000DCFA9F25DB290142BB7EB2C31F5B1AFE04 +:10FBE000EA969D6A37B9E9EB5171B3CB3EDEFD74FD +:10FBF00007B5673A32034F596B63196E5CE8C4C5A9 +:10FC00005A9344EDC790E09E4BAC11583551EAD35E +:10FC10005B4E8564F75FB9F9FACC7A5D672F18D728 +:10FC2000E594FC6E62D1E8E4C5B67093FACF0B465A +:10FC3000B8EDC97663C10063B4A63193C2C0A34EC8 +:10FC4000DF63521F01084EFFC47A6C6EE43506EB89 +:10FC5000572CED223686BFBAED293439F584DBFD09 +:10FC60008BA38D1D83E64C900A3A562AEF483093B9 +:10FC7000F271E38AE6B15A9BE9257D6E585FBFAF0A +:10FC80001647156D06BD5498475A051273DE285560 +:10FC90003ED8DBFBC3EAFFA29CEFAD16B0EDDA1550 +:10FCA00078665C61F515ADFC4951BE5D20FD90A301 +:10FCB0000D3AE3B9C4CAE007AB7A631ED2467B4A69 +:10FCC000EE3B903F72836C9B2E8DBA53879C40F025 +:10FCD0008D730EBD7381E8C911F8A0CD3C604D8BCA +:10FCE00088587E0B7F18483AAAC5F9251C5AA89B4C +:10FCF0007D70D8BDEBFF3F6402D1BBC7B7DC662384 +:10FD00006881C849EEBABF0ACE0C1AFFA27D3BDF5C +:10FD1000B3838A799D5BFE266F51C83264F458AA7A +:10FD2000E7BA01FD14F62127F45578467603C34B54 +:10FD3000147C390E997BC0D93CF4BE0AC4764CD2EF +:10FD400023A8ACFB5D2D23A311790E324760D0961A +:10FD5000EA1A873267A27FD87CCDAFFD934F94E833 +:10FD6000405D73C7877A124775EFA97BFAECA31D34 +:10FD700028CFE69CD2C5E14D74B5F2D73392D90DA8 +:10FD8000F68BA860E164FED6BD821F0827F4848D3F +:10FD9000EAC691341296A8D51FFE1F0811ED7EA564 +:10FDA000CAADB24F59FDB157BACE572027CF3693BF +:10FDB0009259AB3FF6E1738020D40EB5C9220AEF09 +:10FDC000F708A2BC36069CFE9DAC3877A155CD4CF9 +:10FDD00095908D1562129BD41DA83B8F61C86DCD87 +:10FDE000807BD4636A17F8B6BF40D3A117091A768F +:10FDF00093E799201E8E1BED83FF95C7306EB5BE2D +:10FE0000E3A0DD165235CAF3BC225B8CEE0222BCA5 +:10FE1000EFBB8671C79E3B0166147F6E2CE57310A5 +:10FE2000F4E9B86463B82B13FC9467BE75431EC134 +:10FE3000E3FB0E60D8E47C21869F8BDA5E26309F40 +:10FE4000CB9E4DF9F7A07D52BB89F820C72395F0D2 +:10FE5000C082B29BA7E0CB773F00468BCA304D549F +:10FE6000D4D85EFDCF61365D196EA04E6139C8D120 +:10FE700011EE4BF7CB22F2293896332623EACA1E1D +:10FE8000037F911DAE8E0C4D5FEFBD741965DC02D2 +:10FE9000323569F819C99538E655142B6967F93573 +:10FEA000D77216B6E0761BBF126345704B83F99F7D +:10FEB0002E506C92C1ACACEAB1FCF1BB10DA2C0351 +:10FEC0008028B55D2ECD85FCD6E40975CE5EFAB4EA +:10FED000BE7AAA0A71704EB6C9E3B0F8CF3DE2EA25 +:10FEE0003E42E3B816B05C187393E50031075DE15C +:10FEF00009AAFA2CE3B89DA57B3F36A0EAA31B1CF8 +:10FF000065177B62FF93338A86BB7538867C1DAF8D +:10FF1000F156D2B6C8B52F6746FBE606925265ED9C +:10FF200098A0C0E4BD684BC059879FC6A284508783 +:10FF3000B89A5E85313DFA9B954EFDF7C9FD923B1F +:10FF4000A5A9A72EEDE2CB002761A88C8BF3E8666C +:10FF500064A573CB570352728CB8690021A530DFBA +:10FF6000F6E6B9528044AEABDE8955F42765596395 +:10FF7000B4C84514BD5B54C8A53D3D7C42A0E9957D +:10FF80008DA24A79C484FB892CB092AC51C706E299 +:10FF9000966F9471EE1FAA9B08B6FCDED15BDFEB77 +:10FFA0002F1EB71AF040ED59138FB88F45441AD55C +:10FFB00083A724F9DB2D22F286BEADABF3E9BAFBB1 +:10FFC000F7646483B456EE589B7891B37BE28B89D7 +:10FFD00050EAD5CE33647BCA763070957E0E21B35D +:10FFE000624FD8B7CA639C4AE4D4F96171391ACD1B +:10FFF000D330EE94D498BF1B9B42CB51F70762F7E6 +:020000021000EC +:1000000062C34FFA013EFE3FE2494B5E3403F5A264 +:10001000ED6507CFC027561556140E1DEC5A55F640 +:10002000E04DF0DFE7B1F2C48C71BC8D40C2F561E8 +:10003000A05A7471BF7BF01777087A9A1A077087F5 +:10004000C2480D337520C1B61ED6FD724E7E52C712 +:100050009E3E9BB3EB0518F14DB43432AC18FBA6B1 +:100060002BC7426B5DD5D490955203C44003DD0786 +:10007000576249DA0A8FFCA118375646533FF2BD42 +:10008000BAE4CBC955F4D430AD48D74D3C246AB45A +:10009000CDB5B37664D5869BE213A57A911E68F33D +:1000A0008E41806A27B32A8C4C035BCA4EAE33AABA +:1000B0008C54F9E89986D6BB60B115BCA0AAF38B25 +:1000C000D1C4876CE41E887026308906E33DA039D0 +:1000D0002D7B1EFDE7E3BA8E1CD9EDC0F55D08F659 +:1000E00036354D8E93FD3BE6B87B7730A2ECC92EBA +:1000F000FCDC22E7E10BCFD66561BD002C629C4F92 +:10010000885909AD337F85789F07F8CD037E094074 +:100110008E024688794E6BB4158349213F472B7177 +:10012000727666A034A0EC16666FF442F4C116BD78 +:100130008DD3B19681DA4E1B03EFD29B6F31D24340 +:10014000D1A09029C61DF290734F704C0961B7275A +:10015000EACFCA7080D1AF66DC7A5E463F5B5AA7B1 +:100160004B500D55235828DEEF896A7FABB902A8A2 +:1001700024F78B34EF273EE8913D3121626E9C2CB1 +:10018000F4C8DBD0ADCBCACB421D43F52BAB5396A5 +:100190007762B92551790455C04DA0672F38CCCA74 +:1001A000670DD7216AFBFD231059D925DD80066A2A +:1001B000DE11D65BBEE3B4A8CF67799BAACEEC85EF +:1001C000E992DE5768D21F0D47515C41D1BE99902C +:1001D0003F762F66DE3345F34E14663F87D281307B +:1001E000D5829AA433F632E4D59FC0D213769EC24C +:1001F00022FC17C59B6B11AC095AEE9CD9D575F43E +:100200004F839F325A0A0278AC95434B19E400445D +:1002100052C4D147298350D021DCA99C6D34A44617 +:100220008C012043006C407D0DC113DEDA0D81147A +:10023000824C3618CB4891697B8B29435339F9821C +:100240007A73BE146A1E467ED2B6710D311314C481 +:10025000AEB34C5117759EC87DC9218422412BE055 +:100260004BCD061FFC4A17FE0F06D5CA39888006FB +:100270007408CC8AE540BF95BF2EE9F8FA141F79BF +:1002800073825E145DFB6CAA7546BEC45C6F4E4201 +:100290003EC0C177A6B8DB480E14274A4C1DA0F714 +:1002A0003567C62E88A314D830D840C822C44E4D16 +:1002B0000F2D1EE19EEF957FDA8DA9AA12DECA5698 +:1002C000D29B699585D6F581C1B665E41E66DC26AC +:1002D000A9C8C2F4176D40C8CF8D383B1757DF331C +:1002E0005786421D69A5CC7711C1F6E6EFF6B24AF2 +:1002F0006DC3556C7DF856CD30046303B9F9C6283B +:100300009E9416862F6155A88714508D2071573002 +:1003100042806FD6B35F7A61982D0CD10D3324C023 +:10032000A4F4C28EF47EB3DACD03E549DB41F33F9A +:10033000CEC9504166C60554C90DE88EDF4C53E561 +:100340003BA36ADC0C94811770D67C9F9776777FED +:10035000A13F0441BF76CA1523DD6F2D251B79C649 +:1003600012610539C60C33C93B47F6F1584638A728 +:10037000B2E81BEC2466FAB7D56EBE43E0A2EA0DE4 +:10038000CAE95DF83BF6BBC3944555467004E1AA43 +:100390007C0577E17A295A602362C2E859756DFAC3 +:1003A00084E0181C0337D6F60F9C55C3E76C59AE92 +:1003B000EA5273776F04A2E095ABC9FA73E46F70E9 +:1003C0002DF60E3948B0F52EDE8F4897FCBA1A4D3F +:1003D0001429D8BEE22B7F58339E02AFFA2415624F +:1003E0002378F3475CC11C99A368B16146EC1C2ECD +:1003F00083EBF9BE438988FE8D5694AF4CF0646A56 +:1004000056D066EFD75D32DC3D22562C24047DF9B0 +:1004100078069FDCF3D0C73D584E0E2A5CB6E5CA7D +:10042000C4340DD64B84DC0ADB4290679CC6280797 +:100430003405DCB004A92E70B621B80F65C924E5D7 +:10044000582D364E647D367B1176EDB2239CD88FC5 +:10045000B1F115EE888B8183793FF1864E85437724 +:100460001C3D1445AC0029720F97C952EEB33CD71E +:100470005D545836CC355D4094C5F9F2DB472863AE +:10048000690B1510C7F8AA5A444997A69FE413129E +:10049000307F6DAF011E62B389F8B016DC816EE269 +:1004A0008E69CC476C06817ECD8E5BDBE59EDE5E81 +:1004B00024590D8F8536D6F96E9FE4DD2C17F23363 +:1004C000DB7CEFC5FFB20B94F2EE9AEEE07F7FCBC0 +:1004D00066B2F9D88107328FE92F1408C0BDBD017B +:1004E0007ECFE45D7EBB88FBB0653C167FDCE5BC5F +:1004F000A1FA78A68D35DDBE37E7FA08C9F56C5547 +:10050000B2D5615A33F69989233A8545045DF78E51 +:10051000972E93709DD5B01392CFD4CC3DDC55B9B6 +:1005200049B4A82544578F7FCEEA30643B89829F27 +:1005300043CBFB74E9B07CC5004B6486652166AA99 +:100540009341F9E1AA9776B9E1C538047B32CC57DB +:1005500095537101E7D9F5FC6912DCA825704A7E34 +:10056000CCFF6500A73FCCE24C3D455A9CC502ED4F +:100570001B4C7DBEC14C714EEC4492756C896C7CF9 +:10058000DA298CE3FC7A3D20B4096ED9CB0EB19701 +:100590000C7521390B76C3CAAF4CB4ED5DA7CB19EE +:1005A000ECCE92E99C0FE8BFCD51883C7399E3A74C +:1005B00069ED528EF9CE1493130AF3AC53CD43ABCD +:1005C000FF3314A8EDE13197083C526C7440F9C335 +:1005D000830F1F54A553FF738CC6332547CC21319D +:1005E0002AF673A91F0C7328AB3921AA6719F822C0 +:1005F000507EA8894960618EB609A30BC81F5CBDF7 +:1006000042D463657818C4791E9DB5A6D18A2A6341 +:1006100053A8F406788E804B93E29198C9E0A8988D +:1006200003BD08543A9EC36DEAF532076E29EE33D6 +:1006300017F22EEA488C2F81B10E52BF0AAC7E4AC7 +:10064000E72A5C8B8F1644EB3A1C3EC3183F1CB95B +:100650003FBAB0EDEB0ECD1229BA246D312C60F00B +:100660008344C99A546D645726154826282D09DA03 +:10067000C55A89E715D75E1F13DFA3227840762A73 +:1006800074A9072DA2180995CDD394F459AB07D7B7 +:1006900097BAACFA052EC2B3AA884E5EA0F15DCF20 +:1006A000D5757B16E1C3DC30152016FDEDAAABF93C +:1006B0004AE274B92857440695F6BD58D3CCC4967F +:1006C000AC72A322B1147258B26B39DB6AE52245D1 +:1006D00075F929D8B59BF445CE6FC4D1DD50693387 +:1006E00014B01566ED50211D0D1C921BC7C47C195A +:1006F00032F53E6C53F46C0A5760B3356368844E30 +:1007000065CC212C0D22563E2BA3006D1D946BBC95 +:100710009818EE0FB6A04C2A10138BFF94D47B6D63 +:100720000F852E7896DA97E42781BA6595A4158D02 +:100730006509EC51015FC9EB32DD5906931C7BEA78 +:100740005FA6B14E306B832FD2813F354B66B76BBE +:10075000DD80F3598D062448F798E60F430DB62146 +:100760006EC873E093F11DB6B6C10AD26263035935 +:10077000DE1FAF511096CD2EC25FCA6079F412A56C +:1007800036C486B2FA803EE6495B01B7D227F9C487 +:100790008ECB0A45D9407C385F836422B8715423DC +:1007A0006CE9F99C737A8DC74A3ABF6935A7928381 +:1007B000B863B9A0198044235AED2538E94E2BD9E6 +:1007C000EAD0B6C621FCE8AC7812D44C43E0AFD1F5 +:1007D000941423D68D4C2C7C2CF9C68AEBC90C348E +:1007E00089CCCF62DC597A760236686171313F0973 +:1007F000A6C1BC0FBF5763BD9695539CF216F380FC +:10080000F8050C4A4264F6D9B71A7501B02E9DC19D +:100810004A837D94750AE9961A9D20C49F5626E462 +:100820000398B28ECD15EA5C6C28E5DC61C8192608 +:10083000BC9C153F790BC0C964FEABD61F404F244A +:10084000CEB79B1B4B266F88CB04BCBAFAE363E898 +:100850004C76141C1E602B88542A7E967C55FA28F0 +:1008600092EDF6DB407C05686507063D75FD742753 +:10087000FD9D2D280186450B04609E7BC4950D3C93 +:10088000023AB4C4E6FAD9045839168AA67B31690B +:1008900087CA0DFCCA21E5C5CB1DA4CB812D73D21F +:1008A000AEC8263BE15F43A56D31322B322A581486 +:1008B000E5041DBD284FC533ED5ADD565B4D93FA57 +:1008C0005748D75C790EC724E248130B433EB879EA +:1008D00018C816191B3BEBB52999B873EAE44BDA33 +:1008E00033CB5504A6F87B67781606B1CE4A58A3D9 +:1008F0005A6E6C8CD7083FD154F078D8E6A06FDCE4 +:10090000C6EB735F205933FD72A5D4907B1FA5E41D +:10091000AD6779A446F1F9D8F73FB168C71A4FAB74 +:10092000D055CBE4D041BAF5AA59EC6A7D13915960 +:10093000927DCC5EED56F8A6F50419D47790FE2C86 +:10094000E448712FE440253E85D0E42D9189A256DC +:10095000CCB2DB89D44566119105CE405ECCAB5953 +:100960008643DA7AE5224A284D8DAAC40867406C8E +:100970006AB3DEBE644096C9559365E9392FB90A5A +:10098000D4C1D89266B114731602004D248CD5B12F +:100990007C2ED57F06C67D7AF66E75BEC39CD5C209 +:1009A00055BA3446E92E53ECC5F88DC99CA7618928 +:1009B0006FF09985D41FE2FB61BFE6F361E393F426 +:1009C00005199DFEB23F599E28809C9BB826D36F87 +:1009D000ABCA506EDEAA8579A0225F22D8F23C56BF +:1009E000D5EB923F395063A3DF1A8755330DC330DF +:1009F000D7FA5ACA66AABFE844E9AADAAAF2CDA889 +:100A00004470E98BA36C532CD28B8F7081FE2EBF68 +:100A100063083F19FC9130FC9EAD9C17B30D590043 +:100A2000EDAA78E3811319D154EC77036E3F11E6F8 +:100A30004F4EE1B36DE2C5C9DD9ADED520C572C166 +:100A40008781D71C521EE4967467C744F12A3FFC85 +:100A5000CE42DC2040150E43A884F588E665363684 +:100A60003F96459650C2BBF33F47A427AF88D8AB0B +:100A7000155FF8083196A71DA75B9C8DB049BB6038 +:100A800079E6576F0AF4FAA8F6789D068D24C7B761 +:100A90004124B4216A4C4D12CE9970C138CCB0CFEC +:100AA0003AF4D7E36A04357BF3FC36290F28FB8739 +:100AB0003500BF390B02793439F9BC331EF8D24EF8 +:100AC00000EBC0AD77FBC3A7AD4D09DC22453B7001 +:100AD000E3F1CE5DD58A07190CC4A3BAD2791B2FD6 +:100AE00000079189A58AD459E100B31C2BF5111F89 +:100AF00008ACAEB7D4A1EF9442D50626FCFA824FDB +:100B0000B3E65BD6C792996B3A30CEB022DD2AB3FA +:100B10005046D2EE80F42B85383EA2FF7D852C54C2 +:100B2000FBDC71DA479AE45E39CD43BBF9C6163275 +:100B30006E0D436DD3BE0B14CCB85126759605913E +:100B40006D59BCB275EE5D1FD37965E08E0B79A649 +:100B50002B2871C548B4D37D0279700D4A7669C0DF +:100B60002B28E9F7887E32BEDC40E3F934A65C0727 +:100B70002244656C352C88F828B470243C48BBF9B5 +:100B8000E8D4C9BC70509FD52E881430B49A730233 +:100B90000DC196E142CA07A0649F4F976CE55BA91F +:100BA0002DA91B5E4EC180DA9249C32A16376930DF +:100BB000C3A8AE584A0545615957FC06BE10B9583E +:100BC000338F3EB7CAA81BA91633A4FA982CCCC3FE +:100BD0007DD649773745599E7CC47BCB3E699912B7 +:100BE000657400CC5EBC76978DCAD7673BD651063C +:100BF000F798727194D7258D4E5A083B7982F695F5 +:100C0000E62E88E7FFBEEA971FDCA8454D08B4B67C +:100C1000048CBD6664AC0BF47904D0DF0B5C091363 +:100C20000C7ADA7EC5962C3080C75F35C63BE2C8A9 +:100C30001775A129FEFB6CFB7FCFFF781787930107 +:100C4000FB33D86894FB4FDBEB00B0CEB64CDFA291 +:100C5000B223FAA15267F774A19E956EC2B2A4B4F2 +:100C6000A405E6962D0EBCFFD216F47212BB069CAC +:100C70005D30758DBB86B6AA545D8F406D97333756 +:100C80004CE2963520DB9405A882426010ABD30677 +:100C90005F644056DFFBB38A3B4D3B0685F06F43F4 +:100CA00003C54969C02FDC4FDDD68F755F064F2B1A +:100CB000AA0303C5B677A3AA834157CFBC6C6FE6DE +:100CC0006BF9C964AEA72B8496740D0DBD476BCE2E +:100CD000F5E92AFE6519F6A73861BC51A971E3B29E +:100CE0005CF09C633E6C7BAF6FB8422E208CA64AB2 +:100CF000CB0A0CF7CCAC8B7A5C1F846F09B492EEF4 +:100D0000E696C07D61D1E957C83428973B151F018D +:100D10001AC9A1E779A624FEEB1F9D6D66E478B59C +:100D200077F39B50416DB2AB8244418C724D2B8660 +:100D30007613BCF254E7BCDDB8B6625F71B350BF46 +:100D4000AAE338CAABF8E3AF756707796E26A4C388 +:100D50007452607B292C7F4D3D01875F5B1D3C12E7 +:100D60006A403B58D790CAEAABE0B8B6C74F7BEAB7 +:100D7000B0112B870CF5C1580109B347DF15363781 +:100D8000D544F9228EA94FB7A76932ED098285C1F2 +:100D900093C17B991E18DF5742E6E983F53AF26367 +:100DA000C7C77BFE4BC80197043751BC4EE678E3BA +:100DB00063D8B693B5D9029EFC7D93898CE55A29F8 +:100DC000F8DCC6A8905EAAC79D11BB7B958E0F9BD1 +:100DD000072ADBFE3E8CBA7F0D171E8BA0259FBE17 +:100DE0004E012DA61D043D1294280A1E17373D6A98 +:100DF000098346048908B2838418C4D8D0C7C7E7DA +:100E0000BE81F53B3BA4167E66F0394AD678C96AA6 +:100E1000727DA73B34C3F75974DCFA9E43550073C7 +:100E20004D376A82BE45508775A616597140FB93AF +:100E300058FD4516D6CCDD76F4687E2126E204D92D +:100E400022AFE8EFD008DA2DD1FDC91899A2686D5C +:100E5000E19E1853077454FDDC0C08C8EB9737DF8C +:100E6000A7F68D1EC1210FE7B80BEDF0E5A83701FD +:100E700023835556C7913B2C966444A110C7127228 +:100E80001C25C4C8ED88AFA7CCEE758BBD9866BE97 +:100E90005D8B61A9F484E60AB603A1A86B555401E1 +:100EA00060324E2C5EF4EBE4C224993F71DCF852C0 +:100EB000DD9E72602C555BC344B32787408BA7240B +:100EC0004B27464CD0C25C14F946008B351F74BCCE +:100ED00046648C3B6988FD7F33A915FC2D52F2E2F4 +:100EE00004B0E6382A470962934BD145272317C936 +:100EF000DD7CCFB79C50CBD9C8E9D9F5CA977A8A9F +:100F000076DEE98C0A3ADE810960F57DB33B5F7ECF +:100F1000E348257FB5CA6945090659323F293A9BFE +:100F200041FFBB197EB1B4D7C0E2CD91E63192FC4E +:100F3000A0ECE0A63B5A245077F399751046FA349A +:100F4000AF55AD3BC2CA0401837B7449016F117375 +:100F5000B9B62E5071B511BD8D3A16EAD00F9F9BD0 +:100F6000169EE64FA931A79E0E2321758A313CD0EB +:100F70000BD6A35B32A078219746809B5F6D533FD1 +:100F80001B8744AA308E3ABC6ADA4E99F7CFC04329 +:100F9000E7E30D99FD8A5BFF8C9109E567CE64520A +:100FA0001A047AA47A4763F18FAA0989BC3D38C232 +:100FB000465C8CAFA901CED548E928AF6A590576C1 +:100FC000FCFFB25070C59EA71C018DE94CD31A439B +:100FD000B14C76D49A8CC1F1C2853E38424FCFF3E2 +:100FE00098455402656DFD0F2769B6E3A74CD6F30B +:100FF000E5AE8F46CF12A960AC158D4503903779C9 +:101000001FDACDF8A1E579F4426D337A2755DC89F2 +:101010001EBCE8C182C5D72609E0CDD7BC5FE66912 +:1010200083AACA94B224EE3C4B264958CC8CA0210A +:101030007FC821CA3E9DAB578CF9AD7A48DF5B3043 +:101040001B1F471F57E7B6F4444A641021D0E41E23 +:101050005DAF1C50FE05C7C766CE3E50ED6DCBB3ED +:1010600049039D64C160BDE9B0329C67CC36DF0D99 +:1010700008CAE74A357556DAD8AC555148F353F0EB +:10108000E732404C7F8F6464B2FEA2DACAA5797F52 +:10109000DCE97726EBA3CEF7D02E12336FAD825B5F +:1010A00096CB9F2167C3479BB21C6083057BB152DF +:1010B000E5559F2B5C998E5524B666A285F6F90EF0 +:1010C000AF2F75494F08A6E3F3E8B46D587526FCB9 +:1010D000A3F9AA81640728F6F765BB18428D4CF680 +:1010E00000E8D993127FA860FD2AA4BE7CDB8C2483 +:1010F000B07F29AB8DED6B98AF8B08AD930B679FDD +:10110000D2C0FC31B83A5CBCA5B6270DE187996224 +:10111000FC7CA976F90779AD153D50BCFAE60B6069 +:10112000159121B55FFFB9E9D1AE7BAF3907B9752C +:1011300055FD29E1A86AE2062A7A0715C7892A25FA +:101140005B5472A4E9447721734E1E1107328DFF60 +:1011500079598ABB0AF9DC76518EC56F27B6B2A8D9 +:1011600048FE2A653BE97A3ABD5B25513F29564640 +:10117000B4927B7EDB12B1F8F2C5F51383ED6110FA +:101180005C29CB6A50F3CC2089A4ED0CDEDA3A91CD +:1011900039C5F25D40CD4D0748F106EA7354A6C843 +:1011A000C09E57FCAC4DDF8142DEC97D8B7683AD9E +:1011B000B10A98EA694D6D4F15EF1B3380870E3BDE +:1011C0003C3C1F17C6E74499B398B0944FD73A0AEE +:1011D000A07E7C6925D9E2807CB243BC99DCE253D5 +:1011E00051737DBD39E12BF9FB3EFC46B596BCE35E +:1011F000D0DB7E896D13F3A0F286DE1815C772AEC0 +:101200000136F3D1695D69CD8C50E4A32CEF8432B3 +:10121000628A31997E408F6C44B9FBF51738A56F0F +:10122000BF0B54B1A4450B9DDD3958A71374E44D91 +:101230004EC2F801EF513D915218FD0BEAB3D53182 +:10124000302A4C6B118655903D3BFE94CDDAC5EBB0 +:10125000F30CD30E0AC34C0E000CEA815856AE3B79 +:10126000A0F046115C681FDBBA33F1D4ED44225183 +:10127000338482CED26B07FDD57B68FC5A98405DE3 +:101280008166FD0E11EDE708D8586E28EFBA3328B5 +:10129000D7178AA28C1726A49AE4F0B1B6A634D444 +:1012A000EC7C89FE0AC161B877B323C12ACD88CD11 +:1012B0005E12CCA62E2FC0D86825419C3D84A78DF8 +:1012C000B2C1DA253DE4E5E75CAD90B7A2E5048E56 +:1012D0005230F701337EA5C19DC8ADC4FFFBEB6062 +:1012E00072274BB61B880BE6C74DCF2C157E9A672D +:1012F0002BE4116D4D09B462897F189CC0104979A7 +:10130000D10610DB1DD3CD454E60010F2F79A30808 +:101310003364319FDFE8A82A47A89463A561A46FCE +:10132000F6566F851C4FECA48D687EBE7248AB0CE0 +:10133000E7A19B66A4D613C5E2981F40B452317A48 +:10134000D560DF325DEBF8000EDACDEF5C7B8A4BC7 +:101350005A3A75FCB97F15B375CE9DFC5DB01E4C35 +:101360000D9DDA2F25C319C69A1FE38E857CEFB732 +:1013700000324C28ADA6C8051A8E18744112FB39EC +:10138000B0EBE92116732C596C03588950EA6E832F +:10139000DDE0CF688F729B30B90C3A054DCC05F972 +:1013A0003B5F39CD6A2F00FC24BAC66AEA191EC019 +:1013B0007C67CF1368BA41DA85E9576A2BA3D1B2AB +:1013C00050CCAF4C57F1A9F6035609821B58E9AB34 +:1013D0005CAE84206E1C2861BD9ECA623D469CF2B4 +:1013E00070851D679ECF8F8687C4E5BF9DE970C855 +:1013F00032C50333A54D275D833F56D68A1CEAD6F6 +:101400000AB785DD7DAAFA0CBEA48D4C185909B423 +:101410003E2DC8EA028192C966E87ACEE86D0619C7 +:1014200014963C27A66EAEEB00B0F1FFB8757CA316 +:101430001BE54EF9DED4559E97742BCD530B290C2A +:10144000DB81322FF015143BA1A743EE692A00C1BE +:10145000F2EBCC264EFABACE4693166BDB22D5E1E0 +:101460009B39AC99CA73F1BB4AC95D062042ABAB4C +:101470005C5420D168F6A19675A372E1A026D743EB +:10148000F577762B5895AB1E7AB9CA5CE195471B68 +:101490004240CD82FFC38C0106612F8D623C3357E1 +:1014A00089CC065A09BA7A6D238A1B95F4FAC79833 +:1014B00003DCD4210C89D29987C2ADAEE2FEBD64B3 +:1014C000E4ADA7D73B6969F8FDEF9E5CDB144FE7FD +:1014D000F556C0163E8CCD84A31878B691AAC006E6 +:1014E0006004E49EDB590D25E046BD053A71528C3F +:1014F000F86EABFBFE3A51F3BD6852DD063388D07F +:1015000086D1A143CDF3CF4F74EBE47F0F471A850B +:1015100025DD0B61C073DB6EA9AC6FEB62388F7099 +:10152000B6812C9F68C1AC044C8840B7FD46E3DA15 +:10153000DF7AACC258D3910335DD60532D3662B0EB +:1015400026AE00F21D617301870E9550B947D5DDB7 +:101550001B58AA9C8E2A6C7E987814B4F66057CAE1 +:1015600069167F6D19F74244F9C6B9D14737CA2DBC +:10157000174C35DADFB107474D395C90BA1C970A32 +:101580004B64DAB4C2B6331D194F872E16F6E70C3A +:1015900001F364D5DFE80E767DCB414A96AE623921 +:1015A000CF5A2E8A8F624E2D498E44652444894538 +:1015B00068C02618F7E61CECD4E1489AAF07F7F1AB +:1015C000BDB0DF8B0EC340D58584306FB4CBEE8EBB +:1015D0006D2A6375A51ABAD655F80C70749322DA81 +:1015E000A414B7FD16914AA6B0871F427687A2CAF7 +:1015F000987E5067757192C99E1A0D29E35DC5C624 +:1016000091E8C83DFAD0ED74CFB665BEEDE3FD902C +:1016100078E7F49686F4C89BFE60B3EBAEA2AC23E9 +:101620002CA488B71C5130617B5BD6DBE71866AA17 +:10163000A0E03BA74799C9180E78214C94EFC98CBC +:101640002891B4D888FBF57F1F1553E1C098046A30 +:10165000FB2BA797C7CA37C7A55015A6BA05138F86 +:1016600099C8C45143F978921F36DBA01C4FC2F4CD +:101670008BD843985BB6E8C85AAF82260682DF0A49 +:1016800014518A24AE542E06D31720E1EF3E6A1E71 +:101690009D87F1EAB7710FF62884141C81A4680CA9 +:1016A000F53EF11AD5D91D2389EEB8992D6EF92B87 +:1016B0009E1C95E69B3CF60804A60525C921152627 +:1016C000CA3BD56C19C45AE4C0C716DCE419A5019D +:1016D000E56C5FC5058AFBDB91667E3BEAACCF819A +:1016E000CAC33E34C75245D6D892A865D385771170 +:1016F000D0CB62639B388CFFFE5F2EB180B62C7C12 +:101700003A37E22DA189B25DAFEBD670658135C461 +:101710008E8A6D27EE7AE01261BB68ABE215176B1B +:10172000DEBDD300D9DB9F3B774D55BD848817BC08 +:10173000386D7D80B4A8789678B4B7CAA4E546928F +:10174000AFBD0D949B1BF439B199EFB09D78468CD9 +:101750008A9496411364422D51E23E3BBFE5E0C9B5 +:10176000A443076FD0A1E3784A113DE48CB0F23D69 +:1017700026F9E83814852C8926F54425FC354DCE0C +:101780005098B946FF9B0541B75D21F950E60355D6 +:10179000104085E4E986495ECDB3F9F455B03A725C +:1017A00026F3D77B904AD9A3D49DC5EA75AD829E16 +:1017B0002A244234166E3C98F222A3222072E8BDFD +:1017C000107998B302C8E366248F11274AF21E27C6 +:1017D00032F779C0BDC5DF5313B6797B92EC9DAC6F +:1017E0001E381DBCE9BEF15754E5A96835745C305C +:1017F00004ABA0052C5097885F71EF024ED6FD63B5 +:101800007FBB24D78A95D7D3D7FDBCF207E288F0F7 +:101810001ACA0A7D426F8F51BBB2EF764055CAEAB1 +:101820008A1AD6B4AD294229F6CBE1C7AFA3CF0AB5 +:1018300026102B39A69E3FCBA2A4EFEF4B6616A233 +:1018400000F5151AE597D98E59E2B37EF38B9CA467 +:10185000323B87C3C07C300575CBD872FEF4F636B8 +:1018600035ED0FDDB3ED0594B0D7D60A70AFE4B90E +:1018700028E8CDAFFB67C4B6ED872C448A9D8F5B0B +:101880004F9294079291EA43250B055C50E0A6C75E +:1018900023DF09C69CE1F4CE26419FED554EE8A01A +:1018A000011AA7B0E69CF20A768947403B2DCB246B +:1018B000AE9E3F9E13D911246CB6DF6C0DDBFF5733 +:1018C000CBA45FE7F02F8BD643AC7DD7425E1CDE06 +:1018D00024A5A73E06CFECD8CEF73E648F3E9EDF10 +:1018E0004667526497F31F963D34B36AE33DBA7A74 +:1018F0006B749CCC5A1D3AAC8B299B943D095B02BE +:10190000B8CB4AC4AC8D27AB80ABA0131BE9BC4B52 +:10191000F0D308805D50404F23C0C5290E70770B6F +:1019200050378C48E86DCCD3A8CF1D81248E7E7FA4 +:1019300001B6390D5D54523606D9A39489AAD74A07 +:10194000CEA0F10CC65B0D59727F7F095A92061A20 +:101950007086AE208391EE62E2DE49AA69D1965983 +:101960003BD919F01FBFDF6663D17372B9C0776BC3 +:10197000FF2EF5DE61529337FCC5CBEDF2E9E8F6B8 +:101980000181A6968E0D086168B5AEB693F609C2C0 +:10199000857F3F250A35376B3E51F14686ED12D8DB +:1019A0001B1F0C5AEED354D45497C172557D676DEA +:1019B000F7420C09C7495C10FCCE0553DD23EEF459 +:1019C00077F548151D24A7CDDFDD13B94D6FF50858 +:1019D000BC7A7C2BABCD4BF8C0BB67DDA64263263F +:1019E000D61817E59115CE666363AA9BA2DD0C7D20 +:1019F0009113453FC90ADDAF77CF3ABB8F699BEDA5 +:101A000071F59C6A646E35F0BBA0C79805C33F3B77 +:101A100010045480B9AFC5620F7C525E11B4A106A8 +:101A20006276C8DFF5CBA3CECB82CE935BD20DCC52 +:101A30001671047D1664412C7C95F33A8A6D6ADF39 +:101A40002567C0CE36526F524C00E7109BB2DE21A4 +:101A50009709483B1B5222C6171418CFB813A1E3AD +:101A60000903AC7FFA83B8EB3B9650A5BD0E86C741 +:101A7000006406301E17816BFED039241FEDD000A4 +:101A80006450FC43E9004694C3BE09291AE930E5D5 +:101A900041F76139013E8715A9044A3A248CADA16A +:101AA0003AA912CD0E828BDC6780230368D281268F +:101AB000205E1D0F00F0196E7DDAF588CCDC1D6705 +:101AC000238D6206F14F94D690EBF3BD5F498BE016 +:101AD000E9C85283C840AFC505051F91126403D8F9 +:101AE0005883043D67D913AF035E046064CFB965C2 +:101AF000E064D80E3ECCF60F7BB6A3215A7CEEF8FC +:101B00008E11626CAB5F86D8F94B262A5BD670AD1E +:101B1000DBF005EF60CE936B0C46322DAFA62212A0 +:101B2000549CF1FC207522316E30A1BC8F17885473 +:101B30008529C043101DB407278DC93C1A84B15AAA +:101B4000334ED58ACD783E2E9C0CA9313B01C83549 +:101B50007DF9D4A10DFFFA1217FBE78D422B40A7A8 +:101B6000C58D460D81B302CD3E4025EF94D11D8732 +:101B7000B15FC6E90841D68BCC300861289F2B7233 +:101B80008995E25086A8081459F2254193EB71FE1D +:101B9000F334923B3B7237741B5B71DBCB9232C6E2 +:101BA00008B140151BE7001C8A2FDAE674DE0AAC88 +:101BB000CA43A8D0410D56110BCCBBE96F3F2C5F37 +:101BC000FF04D3D2EACC91C9DCF881BB727BC4C4D8 +:101BD000154CF0C02123E791AC20A7A39F1243F638 +:101BE0007D854AB12149A201818F0921D7EDBB84AE +:101BF000C2F6517C489FBE9311AED134C31B3889C5 +:101C0000944E3D1D3F6EBCAADA9B0E0D23FDEF8462 +:101C100060FD92A5F6ADE9E46CC92F0D3EA7A19B2E +:101C20002298FD955938757B55EAECA57917AA8E4F +:101C30004539A1105149202A42CA75328C055BE111 +:101C4000F13C37BA30E73E9FFFD1C1BDDC556FEDA7 +:101C500005A9854BDDA88CC183897A3D0DFBC44461 +:101C60001534C1234D38712CF69AED41299900E1C4 +:101C700035F3CF2B9D428263422B2167C4DB3BF7B8 +:101C800078C74779BABEE4EF9CC8A1FF0A46421460 +:101C9000F1EF870157DF8CB8D43E9315E60A93899C +:101CA000EB6658B6C8DCEE1BD91510FD45C6E384BB +:101CB0002C6879E023A03646E1110204A9E8A8D5F2 +:101CC00009540FB35F7D7A8D9F788422248EA5F608 +:101CD00047E9990C09B2F20951B87BD621E212D238 +:101CE0000EC21D15DE237C887770A995DE7FBD2688 +:101CF00051EF4C006913AC8921F22E7B53D7E56973 +:101D0000D69CEF2261030D8B24FD9541B830234F03 +:101D1000C08A3AF3820976958A9BC0615FCD0CEB4D +:101D2000CA9F9D0AE62E1B46CE31241DE4129C1448 +:101D3000DD873FB109B7452B5CC2780235B7FCFCA3 +:101D400032EF3F932DEFBFC72B2F3070084FF2BA01 +:101D50004B6EA3B87194074FB7C9C153A12CAFB153 +:101D6000E4BFF4D3B461284FDE233CE90B1849AE3D +:101D7000BC47B032C07E4705B290C806DDF357407D +:101D8000F46FB48DF1D012DB04B23F95C058ECA5CE +:101D900062B566128619F9C5D43ACBAD6DE042A0A2 +:101DA000440DE133EFF154EF8509FF83F4B1CA5CD0 +:101DB00073C5846348A953D6C3FF3273716E34056B +:101DC0001E746A9DBEBAD49FE850B59BD26476005B +:101DD0002EB0328DE5CBE51130C01AE6BBEBA30582 +:101DE000AB8F8914A06F2B3FE55E24ED74A4C5155D +:101DF000EE89CE1EFCFE8390F528ACDC4A5AC00565 +:101E0000BD778E8DB3BA47D75D9A824A9A0E1AE48F +:101E1000837A3F7E979D8602142726FBE93349DEAD +:101E20001045498075F34177795326411D72FD1E97 +:101E30004CA25070A76305698A5D852807887D34A8 +:101E4000B64BECFE11DCF1A1D13E23791084535244 +:101E500094A843221F9D0643F03FF268933271DE3F +:101E6000F15703F22D7FB161EC9D59409218F204B5 +:101E7000403BFF70889006854D1402D2CF0554EE8A +:101E8000799242CFE3C4379530A2DE893007E4E38C +:101E90004C8EDA5D0C8AEE1908CCE200C428B196AB +:101EA0006A862EEFC2F6B2D88A4B58BFF7FCFF7491 +:101EB000E30AD818D12EFB5A0CE41462A1FFF57086 +:101EC0007CF289A2457B38D01F0484075D7875F0C9 +:101ED00033F06D9639EAEFFED824B43BABB7441E1D +:101EE000301FBFE3CD9DC46BC6740AF8241984402B +:101EF000F389AE48BE81CF152DA41F0BEEBFBE7374 +:101F000098CE13AEAEC0BD01EF10DCE066629886DD +:101F1000E577546080D245529755373C8665D79710 +:101F20001F886862A16ADB25BBC497165A631DFE31 +:101F3000A4EF6288866B5829022417AD5DF2EE8605 +:101F4000BADBA1D7C9D3A3617EFFAE6DA3217167B0 +:101F5000D1C46A920F8C7267F9E44E46248996695F +:101F600074E91D56F0FBF7176C003D1FEC3473D37A +:101F7000BB8A75F73B9CD6A571E20C74CB31BEFBD6 +:101F80000B600DAC9C13410C67BBD501537ECF6B2E +:101F90000FCEC6BE7CED50D236F64DEC2753D1DFC6 +:101FA00058D5B14A57ACFEDD1132A9109DD6A49880 +:101FB000BAA78A5121EF96C52BE23D2B6E08870107 +:101FC00060A4DE08F4DC6996D5830651DE7B92447A +:101FD000BE17B5F0FC797ECB09AE01DEDE21431CD5 +:101FE0001BF550ABE5AEC9042348D3EA60F6D4A391 +:101FF000A00E21E00563F98FCCD53E21FD61340EA2 +:102000008127F42050206DFD6FE33EFD63F683E8E9 +:10201000DD4D7F4C59219ABFBD4967CECD6641DE6B +:10202000BDD71E63884681A2F552595B03D7AF8A9C +:10203000280DA378F672CC25F5ED4030A8936418EE +:10204000850CEAD1F3C54A7546F18F4D9B69FBA417 +:10205000A6CF5D7ACF66C8A3833BA9324487F0C080 +:102060003FEF9B798CE0B82BF3F317C1DC0FE174E1 +:102070004AB09550B5A9DDA4E272463D5130281210 +:10208000B980CE030715C7382E28A9A0621D625F4C +:102090006FC657D2EC3E1718075278C2F12771115C +:1020A0001F3B53F6CBA319C8D8D63441275C224135 +:1020B0000CC0552B2D6A6A3D8EFC6EA69B1F72E3E9 +:1020C000E90B62992D23270102CFC859107ED6163D +:1020D0002A7D0A9C53301E506D9AC3DEA7018BEAFD +:1020E000703A6925ED0C24A4120FCF866467CA18D4 +:1020F00067A6B5EDD8956C906A556353614598FC19 +:10210000FB08F05FCF97FA2A1C354E51540FF34469 +:1021100054558446FB60C3CE4C40B1F3146CB1D32C +:10212000389ADAAD9F2411C3DF1BE44B5D7B7DEC55 +:102130004684864714A76A82B101F3FB2A43CAA7E3 +:1021400069CEB06BE40D4D8049BC7153D5CC569728 +:1021500081E05D331533AE23BE759548FB5FE6DD48 +:102160005DDD7179B1B1B8A474778E7C893FBF66AB +:10217000D85C0FFDE62199475A12187D34012FFFD4 +:102180009973C876FB4F69890B4EC57A38328E43F6 +:10219000C87352661E49303148511CCF4CA50161AD +:1021A000E8C0CA1AA249457FF5F11121448EA398CF +:1021B00011DB4396EFEC6E6B53C80ABE6466F06E9B +:1021C000935E75F6A56FC38DB74728F92DCCEAC18C +:1021D00031E791A38FE8D2D6F7B5B47ADBC73D11CA +:1021E00034BE007F3A7A5EAAA74ECC299082D0FBFB +:1021F000BDCB6989CF4CD4452ADFB4AC22DF7561F1 +:10220000D8D69708B6417C2F62C252591984C7E2CA +:102210004B9DCFF23A1FDC128BA84742391FFD7F3E +:1022200092BF083F1FC718C9617DCE3144B1C44A6F +:10223000D11B93B81C07BF6E058AD02626DDEAB5F0 +:102240004435A1D60DDF685FA30BDAEDD906A16B8B +:10225000E231969552C0CAF1E27BC25B1DB515848E +:10226000DE9106245C898042BD4613F587C65DB6C3 +:102270008C48E89204177BE14ADEE0EDAE83BC2C8B +:10228000B060B055034FDF51C9E353E2F182E7FE7E +:102290002C937DD330ACF8B4DF9F115582486D820A +:1022A000D6E7D6A7115ED99C3E15E1AC6244141165 +:1022B0007D674BC6E7352D5572E75733C1CB6212A8 +:1022C000EC8CE5190E643B57D79CF55F44A2F815DA +:1022D000171565DEC795A9388165F931B2FD20DF94 +:1022E0002FCE864959E3EEDDC1CEAADE4E38CB585B +:1022F0006221FF6DEE4DE5401B61865967A53240B6 +:1023000000CDA238AE9CF4AD585491BA19E7AC2870 +:10231000971C5056628DD418BCABF995E6280D0F6A +:1023200035DD625D873392A8E551D47CE744EE2524 +:102330009E231336087164E42E6E2804BF30989BE8 +:10234000270AA1407ECEFD87B8C2D54D78A2D81A03 +:10235000772145F3A98DE6F9AA8AE43EA9862E7174 +:102360002A54F1DB173E340A297F4DEA5DF65525E4 +:102370005C66B759D7983DBE80ED20736165CF4547 +:1023800076ECED784750F144BD7FF95D93122E5DF8 +:10239000477E4F2447EE8D3A44FFC4536C46BB55ED +:1023A00021D084C2CB4F8FDCD445242A61660CC671 +:1023B0003F3C06354E0056B37C373F1F9DEF3F72C2 +:1023C000F0AF5125002A5687FEE060A1AEAE94D34F +:1023D0009D19573519C049E87AB0CF6EE93F1FE023 +:1023E000D0CDC9AD4C6FCE2A941FCDB70CD9E4FA2D +:1023F000CD3B3ABFD5D98B93B8C9111D216BAB40EA +:10240000857EED041119386203071FE304C7FFB589 +:102410008AF7F86AB8C9302E4708679BEC9388742E +:10242000866DAD32A0A64AF1705828A0F663D3336A +:10243000126C0EF779FF216679EEA2514AE7DF2C84 +:10244000273CB39F2927DB41B20DB7122633D6D3E1 +:1024500069025365B9931F6F537BBFB8AC0B0CC1B6 +:102460005174CFB2BEF04B25D48CA0F24FF0BBCB51 +:10247000A3A33E6B0420AE5B0226823AB84E94447E +:102480002EC0F7D99FD747648B703E9C207DE98F83 +:10249000EFFBA0E1DF7F859F5DDFC3376E9BE665C5 +:1024A000D7B33E2D53D7FE9F4B3700439FCFFA4EF5 +:1024B00084B5FF3A503C0B633F5929D1841BAD6969 +:1024C000033CC16EC13F8E5C25FAA43ACB8A2E9F95 +:1024D0006A4782EFFDF65E79250C49CC5BA88A6FCE +:1024E000260CCFB9BC850EDDB8F6495A300CBA8639 +:1024F00030CA37DF6FE56F689F8F286E29DD626114 +:10250000DFAC667A6439731A34D7B66728EA0C7A76 +:10251000997924C6777C80A7F1016C7AAF7557ACA6 +:10252000F7C53BE8A2A5C77346244E6E2B1238842C +:1025300029985C9107EFBF10E412E7DB750556AAF6 +:10254000824B34F62A6D66E092B129376A40D60D87 +:102550007C2AD5D0E1A684F1EEF5C77AC07EB80B0F +:10256000760C7DDF1789430175D87175164F0AF611 +:10257000F9D775EC59B6D6F1A10DAA753A73613742 +:102580002920BAFCF7544656B09EF062B418E39E78 +:1025900024F77331DC2C086A63BB83B8CAE705E310 +:1025A000D24B05A6163B1DDC5C6CB588ECE58F4371 +:1025B0008CF38EDBFCACE531C2EC5CFEFF1750FE09 +:1025C000AF6119DF7860390AC382C65EA3DB80245D +:1025D000CF1C1B5E4CA5EDE4BA6E680F45605D81B3 +:1025E00065AEF734F5F6B6251BF3E99FF451B777DE +:1025F0002AF98CFF2D637B9BBFC46C711A3AE608E5 +:10260000776D8E17F870628E9FD3523F4AEE0E1C84 +:102610000CE47DCC976F757428792ECC4EB09EA1BA +:102620000745FAD4912AB789A437AB2F0ACD0D0DEF +:10263000CA2CA4216E5613AF81694C3BC55D11C1F4 +:102640003BE67EF893BC8D2DD23438879BD127DCB6 +:10265000BDFB450D076C62AB7F2990F80D3A08B6BB +:1026600070A82CB51D193D04B2AD25717D3FF48EC7 +:1026700084171BED32EE8DAD4D0F180BB2C4290936 +:1026800015E10E1664A95EA231F1BC8438D5BCFBFD +:1026900024E6CE8D66081230BAA6BBA84936F2C62B +:1026A000C419C7F50936DA1FC85E605206A209FDD3 +:1026B000FE92593D6CAC3E9C5AD7443997FE625607 +:1026C000EF87E6E479C3AAAC484EEF7D1818B89FAF +:1026D0000F9B765E34E004E10DB13497A5EBECB8C6 +:1026E00049BDCF7AFB32A0A4B67875C03463294EB9 +:1026F000FAE16F6F1D4E89A0F1600DC4A3C810B13F +:1027000054252705CD0DFB704097561349E92367E3 +:10271000E092BFC87258D67E46973030D8F96035FF +:102720002B4FC9F6D64A11F95446517D6529612CC3 +:10273000818C4367056E0E647C5BDEABB86C659A7A +:102740007E0446CEC62BF3F99AE318CE8C2DEE52BA +:102750009BFFA67427AA3BC48B3F578A70281EBED6 +:10276000EF81E1CF746FC0ADE987144AD222D06304 +:102770000A009B733A9C4747FD9F4F62F784CCBD8C +:102780006DC2C41664D37E1311E4A3608FCAC56AF8 +:1027900049EB427ADA0FDA6E4516030017A5EBE92A +:1027A000145ABE77624623E9400A1F6287F2157207 +:1027B000D972D24D985BE572C6BB706F53CF5ABFCA +:1027C0004C5D4D69B4E96E6BAB8A2FEC9C8EE44195 +:1027D000ABC4EAE7BAC1B439352827D8E8636A3E02 +:1027E0007DF3B1B3D43799377717498002F7C6F232 +:1027F0008236994C8E8DB43DC50BD55BC3E08049C4 +:10280000136EB4353DE145A053B140AF6AC7E71A36 +:1028100021320C4CB2BE307C503B2D12126AB134C6 +:10282000AF0DE87E65724E1E4BB407EEA9A5FB57AF +:10283000FDAB30FB67F7DF9670408B6D91F748C3B7 +:10284000957966293358E73B0E4FA809224F50056A +:102850007B604E6615FFCE0359E70978BECAF96A58 +:10286000E71D06A8C179DF7C009B58B377336278F7 +:10287000CEC1976FBC9215A0314599032EDCB6915D +:10288000E09AAF6BBC053257D243F528768035C944 +:10289000844A1D09894E7374ED5DDA0A799F585F89 +:1028A00016C18C6DC7BA40E0B3722F3026A23245F4 +:1028B000BE65F82647EE2C80DE7A3BA38D9828ACC7 +:1028C000D8DE6775098A98A371D84C9D7848444E24 +:1028D000B3C0F36C9DFE4DA452372B56AAF50544A8 +:1028E000E0E669B5E098F5CA7426AFE0A1C4F179D5 +:1028F000A1C3AABA1EB18F741F5F8B029808907192 +:10290000A95AFA3ED2D89143A751FB461D7DDA88D9 +:10291000C76F7925596DFDC19F7612F40085B6C544 +:10292000EBE4142237AB1272E6BE0F7B03B0430F09 +:102930000958E77157884BC9747142038C85538DD0 +:10294000748DB580DEE9E56E5EFEE39FB86800D366 +:10295000A471FC76F83804E39380180B9D70015C39 +:10296000B5329C802B4E6C0925D64CF3AF4550CB2D +:10297000DCBC73F88D7873F609E7C7859C95A3973F +:10298000C7CE27BE0A816F632CCF621DDAF91F0004 +:10299000E37FA0823B38CFA76214509DECC479D46A +:1029A000924A53592C1EC8446429650EE538268581 +:1029B00094C94777359DCFD63D863572FED11D55DA +:1029C000305D5178F8CFB31545965A5A205B75554E +:1029D0009FA635AE693850F0F5E59064E97974D476 +:1029E000993C56F55E627C1A4663ACFDCCEBFEED7D +:1029F00049A15666D0612EF51DD7B8A0CCAA9391F7 +:102A00005ED30E51992EB9743F73C5B4BE2F0AA47C +:102A100072406F216DC87628874C0E25CC0C951C12 +:102A2000DA503D75C3F35685CC47BE99E0A1558574 +:102A300026FCCB10E1ECC07BA053FDDE7A4CA56DEB +:102A40006699AD41BE8CE30594C4313E90BFDE5A19 +:102A5000BCB3631744F55123B0C1B98408FDF9C86C +:102A6000370E963DF8AA870F192CBCC9229BE3EEBE +:102A700024EBA0845D13C966086927B50D2A2E10C2 +:102A8000CEDEB79FEB7B5D63E4461D9D0F30E6080D +:102A900027ED3DE3A09B782F383A3B9447D2E75B84 +:102AA00007E7DEB7FCE5CFFBF87D246C7A3BA33863 +:102AB00001FC877C9EE6D06D490E510D09D62C7124 +:102AC000A39551AD53E1EE21FF87AA2D845D3C0D06 +:102AD000F8FE012DCCB6ED6924BF5941B4E11F5D6C +:102AE000D16579DC9D8D4D1813D7369FBA83DB13E2 +:102AF000A3C1B7414DB672226D7E8BD732F703FC6E +:102B0000F92B1B93F237D74B6FC5A011021CE02E97 +:102B1000619FD1804638D91AB3B50A720AE66000BF +:102B20000AEA4E797985B5AF403CFDE19D2EA94476 +:102B3000B5054A9E3B8278030C5120C543BA59F82B +:102B4000C774371CCEBAAFA8158C413BE93787282C +:102B50006D0977F76A79F6428FA3847162E098E095 +:102B6000B0DBF8BEE4BFBC86689BBB92CC85FCCFD3 +:102B70007F4C8B62C63FDC13AD67AB4E7C2EDD8590 +:102B800068F1E44B533A4633FC5CF57CB946A3B894 +:102B90004A7E3920BA70FAFABA3EE55F0B5E037BD3 +:102BA000549392918FBA8C44921E2943ABA17329FE +:102BB0007A1E47498265EDAC212C6696AE392864B1 +:102BC00011324D0D14A36E77B878A7EBC37CE5C91D +:102BD0003703265CC524FB21E34C42A4EB3026D806 +:102BE000B9E62C7DA96E7A748998DC052024297DAC +:102BF000F979853D5E55927C49AE434A7260837A8D +:102C00005B00F651E2A2B79A535FA4163D2DF8225D +:102C1000FD500AFD9334E6C5445CC5DFA0C62623FB +:102C20008F664605E2B32C4D7F133A964A1482997B +:102C300056C22CA8D5925A1C301584FB53656843A4 +:102C40007DA4037AD0549D1243B960CFD5C4726E6F +:102C5000394FDB5A504212C17AC501715F8D0C4168 +:102C6000051F1094B901F299511F0BF3B0CE0AEF72 +:102C7000ECF79EDBA377E9B0E3FA853316466D4C9B +:102C80005D4B8D469C286B07D87BEA385850C2981C +:102C900062B7BF1DF03E4CB1D37A0BFE9847123D90 +:102CA000090989060F76B773AE7CCE1F92E10C8EB0 +:102CB000259AD7C950776E13AA6D4CAE7658D24379 +:102CC000DB223BAD46D98D99D8C01C961A286A5391 +:102CD000CF50E5CAD1760DCE961EAB19BAF2055289 +:102CE000AF2F4B248FDCBD27B4898705A2ED1C2CA8 +:102CF000321D95DAE5B959658CBA7B4984FC9F4051 +:102D0000D4927049BD518EB480BE1CB055A69EAC05 +:102D10002C65788899DCDFA18B04683B6D2DFED88B +:102D20009C0C4FF589AA04E47F5F3CF053DF2F270A +:102D3000E55CBC990A66A18605C17E5A15FA952BF9 +:102D4000E74940299887682AE355C4C9874AC47C63 +:102D5000D239DF0478F688DC4BDEA58C5ECC9C8F04 +:102D60007D8E76E94C25C348058A79DB968BB01CAD +:102D7000E82CC6D5228590649C9B62F125821C05B7 +:102D80001A95D548F7746B8D592107C9A766A7A076 +:102D90008BEF6CFF1A675EC0248EB875C71ED3E137 +:102DA000942EF5030F7BC12DBD75350AAFC4CEA798 +:102DB00079D1B0006DF4C267D23DE624D66B4D00E8 +:102DC0006660746EB3B689C496A2EF527ABE8B6702 +:102DD000250FB149677A106280F322E66632897A5C +:102DE00084617D3A20313D558D84E409486598C160 +:102DF0009683142B1292917D6B8D18D3E732CBFC06 +:102E00004DE9C45A8A6F214C9E74D128A0540DA953 +:102E100097579D0552DE0FCC22B9AE4306FA00FC4F +:102E2000AB3C864D6DE273EC3C013E4E32FCCA1465 +:102E3000D65A987E59DFE7626B0790FED4469558C4 +:102E4000A126B21D141DFC9FA4C649A81A8536B63A +:102E5000D1DF295D4995CDE8CF45DC132343977435 +:102E6000A58DFAE7676C5D1330FAEB03CB4737F9B2 +:102E70008F2566CAFF834ECF8BB6769EDB044782D2 +:102E8000A184F20D09696AB49A1E0F550367B867E9 +:102E9000326195AEE0668AA873C61A2DB097031703 +:102EA0002F761A2384645157B6330EB552E4076760 +:102EB000E68171C1685A9C6196E466BEBFD347EB58 +:102EC000BD5E2979E5DBEA5AE574910E10092EB34F +:102ED000D102DD5D68C5F181A07A91C70DADD85DE5 +:102EE000C973AF66D37B79CA7178E49047A8B438C8 +:102EF00076364D1569FC3CA71621B41EB4EF358417 +:102F00007470F5F1E7CA371E6D09190EC4D9282B64 +:102F1000D5D087573F42B5892F417D87D158A08CA6 +:102F2000DD6F8DC7B071DE9621997AAC947DC22396 +:102F3000482066EB8B39728A6D7DCB7828761B50E2 +:102F40004620A31A33E0FD1E7A4A073614D793971A +:102F5000BDE74AEE8638602C759E9847B376B10679 +:102F60008DC2810606C6825DF7F97353CDDAFAF594 +:102F700010703F88857C366B988A9ADEB2B7FD0F59 +:102F80004FA42B31D57B0DDB0EAE0063239B2909AB +:102F90002F022F40F589827AF135C5F441B2DD0F59 +:102FA000A02275B34DB5FEAAFC9CF84159223A7D8A +:102FB0003DFB25ACF07514201EEE2FC7FE40501FC0 +:102FC000524C5E6CB1E0306433DCCA7A8A402456DD +:102FD000A3BD85ACDD47A67A2DEBF09F9F127BBD8C +:102FE000ADF2409D932DD72716C4E1BA579AA0831E +:102FF00062656AE5DA8EC09A932394803A21D221E1 +:10300000E476370D137D887E67FA72C96847656A72 +:103010008A4272D0F952C9790F8F74B9B4B36D8DE9 +:10302000C632DF478BF72A7437FEB1C9591025C95C +:103030008572217AE563EBA720E2072907E473E1B3 +:10304000B7C7D548897160CF88FE680FF0644178B2 +:1030500043006150156A4CB801B413B9759F56E727 +:10306000FCF86A58B6853D5750ED162148D66EA03B +:1030700062C424C771756AD2111A980102C655003C +:10308000BECCE994FB345A3A171FCB3300531811C6 +:10309000B5071B669FC16D3AF7A0016BAB6E60660A +:1030A0008AD2FE8BE324BB1D28865B37F6A08C8773 +:1030B000F23A95C74FCC3F47BBB51389DD1743257F +:1030C00003A9EE132D7E2F7C98E398D204ED98840B +:1030D000F5686E6FC99D4E3CA1BA409BD26FD38EEE +:1030E0002A63786445A5E36E8C7A5DF5F6B9922F74 +:1030F000DD22ED0E64EA4754F3364761640E0BD2CD +:103100003F6D0625224DA271543789E4E211031365 +:10311000E8ABDF812F4F4661520E28867627638108 +:1031200029E386F64E239A2E6C1568829E53D87A30 +:10313000E1B9FA902796C3FCB79AEF0B8659D201F2 +:103140000ADBB2D65C22066447729EC75EE4523147 +:1031500068C5BACC91F58A0D8A185A7365B08A741D +:10316000E2092F83455F2252620C8242A732AB30C4 +:1031700084FDFCC26ED8F89F6A5D5B3E3761DC7BE4 +:103180008703AEFBA93762491C3F960EEEE215702D +:10319000C52F16EF6B5C461B5FF02F772E82AA358A +:1031A000CEA150426179E98C895E6BB56E7346663B +:1031B000C2459F05BEAD5B590916861999BF4FC11F +:1031C0003E6D5182E7E2CD8F340069E57AFEACB9FD +:1031D00042BF5BCC3E2F11776F1587B3AB8D032CAD +:1031E000B4EBD271D6B883C2AD540B3D69BE555C09 +:1031F00006854E3D221A0A67F00C5DEEB6DDD861F9 +:10320000BC445E9B8F97BBC5B061718E13144A9E00 +:10321000B34FFACD3CBF24FFE688575923BBACF32C +:1032200085D3BD44CC75F1A402ADA2767CEC7009C7 +:103230006CF6497088C043EA0EA4320AA5475BBE0B +:10324000AF44B1EFFC5CD6174F57446D6055CB9A35 +:103250002B07D64C1BBD4C8ABED11879F7FE2A2409 +:10326000832CEDB6EE5AA2998D14CF322CE7238928 +:103270008A771A94036496EF92A55F5EB088D5D1E1 +:103280007D96CD40EEFEE34ED2A0B664C97389A40C +:10329000441D4FA6A5D0348AD1027AB02EFF7DDD21 +:1032A000562B265A77BEF944F755E8DA78C9FA1052 +:1032B00045964E76C4673634AA89355EC09FC3668C +:1032C0005FE306E6B5DDB3156411BFAA92C97D625E +:1032D0004CDDF80063296694B22D7A0F2F350A274A +:1032E00055009EB001FEB18AD650FF4EC0D1DA4DD6 +:1032F000D74EDE10B81B88A462BA8C195BDECEDA1A +:10330000EA5B1CEB48F565CCCA82F985A91270CC42 +:10331000203B5C894EE0F8CA5F92DFBBDA208C6B01 +:10332000B9DAFF7CAD4D7BC546DA82088CFC1BDB2D +:103330003C602EB27B84B4433F32B0550222D2CDE2 +:103340001C3FFA4021AA9FB09C1E43161B31EDAAD8 +:10335000CFA95301E90BCFAE6A14A83BE8F40B6187 +:10336000DBF95300360B483022B9ECCEE9272C4963 +:1033700009B2EABEBC921FA9B669A5E86550E8FC8F +:10338000749406985165D6B86525494F60B1BB4124 +:10339000A171B940B35ED76E85F70D8F7E27BCCB88 +:1033A000D7A52C8B0D9DCFCE8E8549317CE7510062 +:1033B000698BFABBEA4189A0E53B91451AF1A2B3BA +:1033C00090C0E0A2C360DDB190FDE08AFD293434F5 +:1033D000F9412A7823AE8E5BE45C6D9A75856E7137 +:1033E000469D4C7A5071F4372D2DA059DDF96DA012 +:1033F0006FA6D0164A61F3FC451192A0EA883938CD +:10340000405BB442FCFB45FE2CDDFC1868107F4697 +:10341000F2371E433542618CEB04C24ACE72F2A9E8 +:10342000377ECFE787093EAE17D347AF3002099703 +:10343000E5B2A214243D5A168EB4E2EF08EE33250D +:10344000098BCA41DBA13F7EA27D920E720CBD7634 +:10345000F181EFAE9D60805446DAFD6F7DCAE4B81D +:1034600077064A9C3D8A87D17B3E368F6D8F8A676F +:10347000542AF88B9EFC0F63E6978AE3BFD20CB404 +:1034800064F1E2F8F777D6DEEB03FF70B19F1CF62C +:10349000266C01BED62AC871F47F999B1F75F2A3D2 +:1034A0002783F957E24E2ECC4A2FE3AFC73028EDE1 +:1034B000BABF3485D139DB7AD050AA52AA00504124 +:1034C000EA68BA29402BED4D1894C3ACADADFD5A56 +:1034D00036A6240A596AA45A7701DF4B79C98C6F42 +:1034E000F9035211F620D88FEB0A68FFDC94B26121 +:1034F0004C0112DB26E2E5A24AB240716CE520598C +:10350000DF5EC61934C41C352A6F63A977E5F71B43 +:10351000EEB520D6C12DA52ED70C27F041D5ECDA7B +:10352000F590C860259F1120A6109E1CCEEF3A0B87 +:103530002AD1F1DDE1117F7DCF70EA9B613477D430 +:10354000031DB404790B2F8A07C087F91DEE9B5623 +:10355000F24914642C946EB0BDB29578A3F8E6E8F5 +:10356000FBFBBE5E33B1C995503FE9A59337791A8D +:103570008B004692619B0BB4A4C9DBB3CCCCB7459E +:10358000FDD7AA55C22F0A4242C32842C00A37D2E9 +:10359000BCB801A8F448CDB6B767315F9D610E8411 +:1035A0008F76E25F004BC1892BAA929089AB602A8B +:1035B00074C3CBA066F49AB180F9F6F2ED7342932E +:1035C00087B5D628FF47DFEC113A1C49EFDEFA0138 +:1035D000745695E0690F280F02AA0A1ACD0446C452 +:1035E000735BCA36889A6D507026D265BD3847EE37 +:1035F0005AA1313BBDC693D6DBABD7A9C2AE90BDB5 +:10360000C7808AD80C560354FC07C29413BA53A837 +:1036100034FB498198C5609CB56C00BBE4793309E3 +:10362000699E69B07F154DC48F5E46F963C4F9A0E9 +:10363000908D7502A3B5BE6FD65FB9B754E0039005 +:1036400072F59DEE9091EEFEBAB6B7245AB41014FE +:1036500024C5EB81D871B6596E1803A56787F31C92 +:10366000B3EA1034B74EC51B8F706A2FE120A659FC +:103670004DF86B9E29587DE4BC8D2C8D8D16948061 +:10368000CA5D4C8AB95C708F4FC0E113FDB8CBECBA +:10369000007EF7B6B368459C109BF7F6DBCD32ECA5 +:1036A00009F9EA8C9AC668002D3863CF4AC1A66C26 +:1036B000E0699BFB07F58CA3B315173B0F6C203912 +:1036C0002B3FD56C1618AA037AB67A2C4488A67DAF +:1036D0005B156EF9B642C80CC2AE26B7FD50C7A541 +:1036E00016D6541CC481C6BB93EEB6A8F53DF4E9CA +:1036F0005D78F16B39B18E669AF9F6150B1164FBA2 +:103700003D790D3B751F2108FC991F9E4FE71A0458 +:10371000E21CDF23C3C53DCA04C052DAE0E878E208 +:10372000182A9315E2A6CE1F9E9DB6DA8B0B2F8921 +:10373000A31FD9A1204969B0E8C7AB00AFC9977CE6 +:1037400032A9A15ADBD917260A6449439196FBE3B3 +:103750001918FC1DC481C9E1F6FD1C7BDB548BE507 +:1037600089CCF8D9468272C29DC7429B0D16A32B05 +:1037700012E403DDEFE13A9BE15A1FE217AA6DB3B1 +:10378000CE37F0F230C5BAD38ACD300A747877D309 +:1037900013DCFA0C779E850B18F47185772F2D1F9B +:1037A000EF32E4DA1084D12376CF2B81D35DF74A50 +:1037B00069ECB17863D6D9AE1F928852EDD88CDD12 +:1037C000EF95A81434C93E77FC0682AD75445C774A +:1037D000D6E94B444398FF14FDB377D219B29B1D31 +:1037E00021C1C692CDA1401AADDF6C12BF131733B1 +:1037F0005193C228915C14615D1196EB6A76D6896B +:1038000042BF80AFC511579AED19C657D6B830CC14 +:103810006E6FCC5B70C210AFB9908ED6727B1327DF +:1038200055A9DB22F5E524636E326C45D2B60ADC7D +:103830002E5F59F8C6737DC253C26E70858BAA592C +:103840006B4EE9FD6B59676CD77AE0D0B246954272 +:1038500066E5455606D32C5C4451E9FF5834C0DA7E +:1038600070721F63B1201D056ED4511F836D34E942 +:103870003163A3AB3CA8245619E95BFF20F3DE2F8C +:10388000DC87F5A4E8CDEB81872E73CAD81E148699 +:1038900026E43F5B843AFE398E35C31DE82BC26DAA +:1038A000BE4EC2AE1B9489331E52FBC3B913F4063D +:1038B00002179F36B7A0745D9A4BC8B8D104023D79 +:1038C0008892ED037ABCDC00EBFAF7DC8132D7C7D3 +:1038D00097A20EE26E6BDC442631D5F25DA313F79E +:1038E00094D3C8FD4788FDD1BA217711BFDACC91B6 +:1038F000D7DE1C64F11C1D970044DDC271934BFCA4 +:103900002364070E2B3C0430AB82B18F1716159D34 +:10391000D821454BFB8CA2B8D7C728DCA06254DA6B +:10392000A32BA764BFF0F1F288FB4A11486CF8752D +:10393000B43B74A2C7D16F3D4732037F6D515B8D9D +:1039400096B0C5D31608FBC070578C1A777ABA4D5B +:10395000D81DE96CA7DDD5D8229744E77D5D60D9F5 +:1039600010305D619F5679E7893F2D80C32F2E5619 +:103970009C5FCAFEF0F89311CD775F120647581787 +:10398000FD19433EE6B5759ED3096529A6681995CC +:103990006E8C3DEE89B0E223503D53E8957A4E5946 +:1039A000244C95F50F54209596F5819AEB068E9D43 +:1039B000C80B6001E5ED79FCA934ABF0D7181826E7 +:1039C000297708073022CC00C8B95281BB157E7315 +:1039D000EEAC9CB4504FFE27683108E900335B6AB7 +:1039E00027F1A63D299FA30E40EAC8A708973CFDF2 +:1039F0004D857655600CCF2FA16355C872377CB3C7 +:103A00002350A1022067EDE177C6DE1B34C935875C +:103A100024E8A2232D7E724FAC0DF7F36A17D2363D +:103A2000089A320EAB15254EDF571FE1A3F0500E5A +:103A30001348B7BE4D6FE49660DE3A042AC6FBF128 +:103A40007713D86BBD2740D1C056254EC2C6C8A932 +:103A5000C3FAEF637F3E707AC98AB7F485AF6D030E +:103A6000605A7BC3EA5EC0797CA32C1DEC1BB6F4C4 +:103A7000136A619C5F36D80D1A2A75FCE42E69D250 +:103A80008A29D104A9BC1758AEB6445EF1ABF29AAC +:103A900082E0719EA1E7924BDCCDAA3E47244D52B5 +:103AA00042F20C98BCA4327A806A6C2F9886018905 +:103AB000495A66B22585C1899E3E48D3605650B6A4 +:103AC000F320B56E4CF4F027146E228F61A9434D9C +:103AD0004B0C09544FC8CD742D3A9B66BA4FB2288F +:103AE0007E3B408811CC45139626C2F4B162A8F7FC +:103AF000A2747E5C1A13EB0EC1ACB159E01B8FBBF4 +:103B0000E86B113D2C991265F85714911EA1BFFE68 +:103B100036BEB87576F742CCF55CC729F47A95685D +:103B2000C73A8A346725A82639979D09F41774DDAA +:103B3000646511743F7DB210AB99EE4675E0B3F742 +:103B40008FB381557DA3CBCB0B059955CD9F5307E3 +:103B5000A8069AF86DDCFAA8AC9E10EF0721AEA972 +:103B6000BC7410CB9999DB6A537200D227594BB8B9 +:103B70009EB311AA1230705329C30B043022174090 +:103B80003F69692872AA8BFA250AE2E2B4DC7C78E4 +:103B9000765AF0D881A0D0B94FF454F0887A904288 +:103BA000FCBC1698DE668E54DC2B25F519FBEBCD9C +:103BB000BC3B4495296BC551C3FF1D88F3940B464C +:103BC0000CC89C14252D36217454A1F552C430F034 +:103BD000955B5E0FC3D14DC31124D47A14800C665B +:103BE000A895DCF4A813E89B5AA77A266545D92B3B +:103BF00092D9AAD03E5B26ABB36753979395F784CF +:103C0000676739588CDB59E33A46BF1252D8BA007D +:103C1000B36D24684C503547C3EF3AB2CB4D6B6956 +:103C2000B2EDF9D1EC31943BBC3BA0B8C8A483F50C +:103C3000BC76113ED32AA419BE53943801F25963BD +:103C400057ABD93A8296DEABF2CC1EC5E328907C06 +:103C50009F03FE7F4B243125C5F8F2B513F00522F2 +:103C600067D6F17A65636610A9F7E7FFF22FBD1AF0 +:103C700061BC5DEB12B7CB14DF71B6DC24BAE9147A +:103C800071685BF01EFAFBF1724CFD239CD98B40EE +:103C900088E95D6E9A91DB0930FF8DC2B9CAC9030C +:103CA0000ACB254A7702D003A78D56D896C2F1C316 +:103CB000184C804140FA2C7C9054F80005FE6DD0E1 +:103CC0005CC1E873053677FC0886E19283B11FC5B5 +:103CD0009D733D51B34C51610326EBF8D3B323FCE4 +:103CE0003AC2AF0BF74381246AEC11BBF0DBDC0E68 +:103CF000F125570AAD51AF327BC7B3E25C90ACBB44 +:103D0000D07771711EA08805D774518C381F2ACDC9 +:103D1000647B239E08AB6FBD21CEE0BB59FADC6308 +:103D2000E9306DDE0531CC3B769FD09F63C27B547A +:103D3000548DDDA13F7033DCB58461E1DC5F6C291B +:103D400003D9551F9F1BDE12B33F6E86CB4425D58A +:103D5000C5EC50BE0A9D99B7615629A4A4430C2F07 +:103D6000D0EF2B8B404DBD6CA235E2B27884D4B13C +:103D7000AE1571BDB0A620A366549D1DFFD7F1E915 +:103D800099918B970175DF3AC932FCD1E956DFDD95 +:103D9000B14C84A6D4497DC2C52D2785707FFE71A4 +:103DA000E6D1D1AFF9B52B0994BD0233F6AE67ADBC +:103DB000A35A4AB89873CEFEBF1C345A546D6B0494 +:103DC000483CB14B6E7158E50FFF1438FDDB828C17 +:103DD00030E6BE6DD5AA64FB0ECBEC36B4FECCB497 +:103DE000EB48C4A482151134C94A06DD214D6BE3AA +:103DF000AC41649A5523C572AE0FD93BFF6464BCD5 +:103E0000876602D779B9A6E796F0EB3B05F4E0AAFE +:103E1000D2DF488DC749A445BFB644E04187E11EC3 +:103E2000E33C560410210A8B5FBEEA7E6ABAEB2A95 +:103E3000DE4201EF66AFCC1CEDDF726E53C43A1860 +:103E4000A2851417218A542A2FC02A622A32B192DD +:103E5000944E9171195BB8618EAA2169D12AF87CC0 +:103E6000017447AF0EABE79D3FEA2915DFD98CF906 +:103E7000339BC5D94084330B18C02485101F415390 +:103E8000B2D2EF024A7337F2E833216087488EE4FA +:103E9000D56D809552F9901415733968025FFE5EF6 +:103EA00055FF0FFFC3B816AD86DE8D538708DC477C +:103EB0003DCC9FE2AB9922BC4E02354E9437A50211 +:103EC000A5AFDD64F5335E40727D6379144132B392 +:103ED000C87300D79EF34C4B1C60230C5BA6FCEB15 +:103EE0003E27380CFF5F0FC3FC46429CD6D3E081CF +:103EF0006CBD13CC995CFA815D519F3613751C6FB4 +:103F00005AF7F4B4DBB510023197A3F14F4801E042 +:103F1000E174D5AA26DA58F8595DD3ABCC412D9679 +:103F2000A3F3D4A84C26044E446F0791C1236929FA +:103F300049B34E28A23BBAF6DA08099DD809CA1738 +:103F40001313063192E1506681C214EC4660139659 +:103F50001D1CE6EA5C1C9FE3B252D69C79D0782403 +:103F600057A13C4D65003CE6A80764E64848589BCD +:103F7000985C8AE500123FD887CBEDDC01E10E8A20 +:103F8000AE5E9026FFC14146A00FD991ADE6A4B91F +:103F9000DBFBB41FEDBF84D07BC5C6DBE1DA730960 +:103FA000BB0C488169EC4906EE43DCECE51E1DE9DB +:103FB000CC008C5AEDC8D6491E61D1586120917D44 +:103FC00049BA5CDB7C44FDA219C99DC3AD82033EA6 +:103FD000582270010559C563C3B1C69518C1A4E341 +:103FE000E02F9A4DA1F9A045C4F28EEB494B36FB68 +:103FF000B529D570EAFAF96B4F6347E45B12D934FF +:104000001EECD717A0C82CF4612D0B8D65B710B628 +:10401000859DB9FA45E2C112F0209951060C311084 +:104020005A196151B344248434508546D51C97BC39 +:10403000E0BB6D0B33A195A7B46CC03B5A0B42514A +:1040400032C6860E7EAD2618901F36DFF0650C7BDB +:10405000C0E3F052C71E87A66FAE5D81DA047D63B0 +:10406000C10CD222E4FFA067786C60561497F9D493 +:1040700024CCA83EF4EE95308849D32B8F47CA6CE8 +:104080009A59399B5D0755F71A09A5E8C3BBE94F53 +:10409000DBEA1D6D8E0B3FF2674152DA9136895C87 +:1040A000ED4765CE9C55377172AE1A19C556B5B637 +:1040B0005C5FA61EE06E95E842EA93C963945B9646 +:1040C0003101C3164CC26F6722A37F6AED73FF07ED +:1040D00034A91D9573BC08B468757F1319EDCE140F +:1040E000E23A0D0A833E55C7206B271D89866D5520 +:1040F00081B213975B2F09B2430C5D625E7D30364F +:104100001CE35817CB9E297005DAC74BBB6F745759 +:104110008C75BC1974B83B5560A55FEA3454488F60 +:10412000E5B77B03416092D46FF908EA20CEE2F054 +:10413000FCE17A4FCEE61292B4F1A24863BD4A7315 +:1041400035FAA66106F0F73403634BE6EE39D84A38 +:10415000DAEAFA26B642D0D1903D52E4E601A61C36 +:1041600058A341BA05380C360B9419E1AD6795098F +:104170001759A7AD08ABA2F1AB1CD6B185783E6F3D +:1041800021E587C80E58996230A98061E1C92DF4F4 +:104190009D5E428A34E289889E98B86C026B13BC9B +:1041A000D23975DA15342DEE93D86DBA58BFCD9546 +:1041B00064AD8B501F9330DDFC0017C5F0514EFCF1 +:1041C00029F0456B10F84AEBF619AF63A98AF7DEC0 +:1041D000BE099437B98D210B31FA9193AA0EAFE83D +:1041E0003ED90604AA8B5524477B468BD5E1682926 +:1041F0009FFCDFD6E3C35579790897655B6E9DCD4B +:10420000C9068B47B39C36D64F81F5357B4D84E488 +:10421000F5CFDE664ADE2615B0B7AD4563F15AA488 +:1042200068E72BD875E676E608D1F0DBC5A7F7017D +:10423000319F58D2043BDB32DE145CE45522899571 +:10424000F267502961CCCA20BA9B3903D3ABC2D7DD +:10425000AB47AF3E1CA80A2ACB898DACCA2F2C9144 +:104260006C77A34211AC1D42DDBC68AA6F698399CB +:10427000E5858AD1ADD16CE09FCB2FD6B0A8790F60 +:10428000BD58A4CD3AD2DCC0EC4FCDA65A0760850C +:10429000C6B9CA85819BFAE3D2C9658D2DA10745B0 +:1042A00043C3962C6975AD051D5B9E57EC220561D5 +:1042B000C4004F96977DB572434ED67E66469AB53A +:1042C000D8CFCCE97D3C16915179EF2D04EF95685C +:1042D000911E87825D85B8211ABBA416A7E1646F81 +:1042E0002E6BC3FB067C6E3DC474F027E1B2DD0C7F +:1042F000F57A5C5CB781BFB25183403798CED290DB +:10430000864873C1BBE48BCAB4536F6DFC0CB29A80 +:104310000C1C4BF506846CBBDEDBB7E3318B1FAAAC +:10432000A3618394BC5A0F353675EB205030272F8C +:10433000E2D416B3C9BFD45B2C890134AABC6FB2D6 +:10434000A9AAE4682F14C826C1C8D0AEB3CC2023D4 +:104350003A15B903DC72000DD7B550579122C256F9 +:1043600001E77C6FBDA033244C6E5EC835B6A398C0 +:10437000A29121BBE3385DC9B93D77CB9DDECDBCB1 +:104380006AB5FFEE493A52BAF777B1E6ED9BCD2B0D +:1043900024CE49D182D9E3B5630877008347D5A8F5 +:1043A0001CE86E7E257F3F4D980E2090F1CDFBECF2 +:1043B000A227FF8EA4CB921C639CF9E5126ABBA7CF +:1043C0000D639845227CED0CB74D7ED769DAEA95EE +:1043D000F7AD967B65DC4F5E1192F4DACC9F655D9C +:1043E000C4C054FD11392DF9BB1B71FCFECC09B0C2 +:1043F000F0A100A6D0A1961C942BED5A0F322607EF +:10440000AD6B5892ACE2D8F90E4BEE9E779FFA7ADC +:1044100041271BC839EB587A22EDD2C33C588EECA9 +:10442000642F6F37C78AA83546146FEA0CE66B56BF +:10443000EA1C3234DC8120FE0EC66CEA936A9F3897 +:1044400065119DFCA940A7EE5780771CA732DCF2CE +:10445000C3E99A4316B6520435A242D8D1A7F5E271 +:1044600093EEF3077B490850AC42D887BE7FA72361 +:10447000FADB698095B0882AEE9B112A701A527275 +:10448000053D10FD6DA0062E5167CA11525B351116 +:10449000C581097032562869F43490D3559EA68898 +:1044A00020340D876772067DF724EBCFC8631D515A +:1044B0006B3CD621F086E0673E5A399BEC68FA5295 +:1044C000E742987E5F0D9BC7BE412B5AF8AB76370B +:1044D000686083501CD4F5A7D2D17036CD6A09C963 +:1044E0008B01A47417FE2E62518BF1CB6E3794684A +:1044F0007F29EE9620A97DDED99AA09AA68C37DC7A +:10450000DF9E864574382EC323019C272CBED374AE +:10451000C28F0716655337EF10880798C9C5D6CEE6 +:1045200019BB52006E72C775A6FE45D9846359FE49 +:10453000189165ACCC5175371B1713EF7891257125 +:10454000D2A903A06D98577A9E7BF16EFD9DEEACCB +:10455000FACD73B893FCBBF91046939AEA6DDF6FFE +:10456000840DAC88A7B03DCCE315E801729F9D8D0A +:10457000934FD3D09E6AAA0350949A44DAA128415B +:10458000B139CA6EC7187B08F664F82183A498A9CC +:1045900009077C6268D6A7E1DDD836494A2E52AABF +:1045A0007D40ED315D6747E0593892C6C3907A4F40 +:1045B0008EA988C9BE263E8404D3AC8C3E4CF41B25 +:1045C0009FD5B75FF74BF50AE87A6C89B00F158174 +:1045D000EEACD03C515AA08390F6AAF9EA56F3A06B +:1045E0003F645DEB87117A8CD904CDABCD351B3A96 +:1045F000F6469E1A0E4AFA40E0AED1E67A1390EEE5 +:104600008120D0D4DC30FE2D49FE7DE2177E82026F +:10461000FB81C183627586AD0F9D8B758448F8E57B +:10462000F0A9AF97A83107644E98F78D60C8E0E80D +:104630000A22E3ADADD6BA6ABCCEED45ED76A962ED +:1046400068128A080DD4E3FDE5B929D2618BEB43EA +:1046500072A0C9ECFAA4AB9FC70CEFF586711B1FC3 +:10466000648C245A8B6E7591172B4A7731704847AA +:10467000F6CDFF69F1C6644E24C9AC509871F39031 +:10468000C4F6AB0D1408CF767047B7A94C9E0257FD +:10469000A9BE5716D7119B79C15AADA4CF31544F3B +:1046A0006B85E688515DE76597F83A59B6FF395E44 +:1046B000BF6D8DD92EEC299CAD0CA3E2BF8B36CFFC +:1046C0005805C242012F00FBA430B5A012FB6B2C91 +:1046D0007095D9A9F138D05F903F304A22E78A23FC +:1046E000AD841312BCB6D030B1E6D7DBFBCB43A709 +:1046F000AF8216CCFD25D62448B0C5BCE093E67643 +:104700000C90CCD6CDA6B2327F2466ED10D1E0B8A5 +:1047100033EFFD571B1B7E8C3634F3207A261310A3 +:10472000CB8F71B8D2A341F70DD4C25C565748FD68 +:10473000545DDDF41B4142B38BE8DC8AFA2A83D84E +:104740000668E0A134E7ABAC0F686B0A14458EA095 +:10475000514BFCE3566C5CC89430D0B0786D547605 +:10476000D45A7BFC37BB478873B14FC1956FD5597D +:104770001B5519D317E0AD317899AD2580C248C6D5 +:10478000282A988F2B708644CEFBD50B3D1D2E9F7B +:104790001E7CF3307CE37A66A0E109C4FE5DF7017C +:1047A000228E5D4FE1530617471461288204B83FFB +:1047B000085B0D450CB51BBD62BF624BEE29E0776F +:1047C0005FB64C66E2669BCA187E4BABA46B015E7B +:1047D000360E8AE119166A379B9200843CBA8752DA +:1047E000BB78BDF83312562DC4CEE2F9C3D2F4A380 +:1047F000AF91C4E2F5DC3EF30B2971E5F8F05A669F +:104800009F184FB4B0F0FBCAB0765CBAA96442FD01 +:10481000E2274814576E7C3AD15C2FC444E59B04D0 +:104820008FAA630B3ACF1D47B8816E4E37D8917A65 +:104830007CECB7AC57F8F1AC801DDBC9E185FA2000 +:10484000D46C8FE60F4613C907C443D725F5C87F3C +:104850002D2F6F2B518A6FB851BB326F0F01476AF2 +:104860000DC37A98D0A9F9D041F227739C71D681F3 +:10487000170DA3E5BF23448EFC6949F0B634A1AA05 +:10488000737DEDB07F279B82B69A65ADB9CB1501DC +:10489000639AE738773DE9E65655C60B2C34712EFE +:1048A0007D2ABF671AE50715763242FFA06FC5D98A +:1048B000FD5742CF022C03958B6BD463F99466A409 +:1048C00046239794F1B32AA9623640ABA26AD6F385 +:1048D00085414215B1CB06F8A81D9205008A503DCE +:1048E0007002D3AAB0E05EDD93245FCB0F4E316A35 +:1048F000601F5540EF2B15DEAA4AA718DE4F5D9AC0 +:10490000678AE7FD5064E86DEF0E51E9E1F6DD4995 +:10491000A92A570165702167E1D45E1E126588EDF2 +:1049200033D087F968518A676C600E89CA5B185961 +:10493000746BB1331DDFEC61254106FF5012312D40 +:104940004CB0C1880A689FC67214746FEF7EDFD8BE +:1049500050EAB6DFB969F56F801D2CD707A8518DD5 +:104960004F044064C0812D4C3390D6586FC48733B8 +:104970008142B456E86F897497A5A8F355369E37DF +:104980002C1000A7776BEEF924A1E17D397DD0577B +:10499000FB1661BA3DF29965EC273A84944A7C4F44 +:1049A00003CDCAF512CECE42BD0BB467E963E3591D +:1049B00033A8AB6DDB95D29541C649438177998D7C +:1049C000B1A5A75F2067E2A69EA888FFCB9419BD7A +:1049D0004F14DD21D4283A7DDA5442DEA933A058A1 +:1049E0004A58B6A121D747729E05DA55ADAF587B1C +:1049F000A01C8AEA72BC3F4D4F4501AC127BC67DBC +:104A0000B15A6ADF7EBFB8CC4B6E0A969484A1D7A8 +:104A1000A0C68832B9CFBEDDE8288BBA3457FDDB9B +:104A20008789746858A50C84D0246A341BEC7C8B6D +:104A3000BB4ECF38BB10AFFDA243085F167780C8CE +:104A40007F8FC612EA92B16ED80DF8A78725C8F8F5 +:104A500074A2A7BE9721C13F659DBE54E2BA37E557 +:104A6000D6287C829DFF81AEA04702E54837C62547 +:104A7000A5D50FCD0EE6C966E1D358E976C8FD4F3E +:104A80009C6BF87A4500ABADF687FD489FB28BDF93 +:104A9000CE52EBC648D90659A6486EBD9E437EBA93 +:104AA00061E271159AADCD18AE1B1EC1EB1A42A47E +:104AB000964E5DC05A9BD71D0AF16E40569B069BD1 +:104AC00067C56BA02BC539122096AC2395FE78499B +:104AD0003CAF5BCC0F9C8900978E79829E744962B3 +:104AE00089A5197F24D7561A68EBB89EA035CD400A +:104AF0003495866F19C8E1D2BF7E5F45BA797EA032 +:104B0000D1A3BE0760FAED2FB6C64939A238898510 +:104B10002965C96FDF17BC995252F8FD2BDE4F4251 +:104B200075050D67CA9E7E2E6CE58086B40B768176 +:104B3000EF8DBA0BBAD33CCC7CFA7DBFD7095B387A +:104B4000BA18FD89C125139171C69BAE1075DB4360 +:104B5000445AE9DDD65DBBC4F9931C7AB4C37BE348 +:104B60000FB79A14D6EF8CF25EA3186EF5AB38E04F +:104B7000411FE4FA9F1FD5764E01F1BE6F2AC0DBBC +:104B80004E2B3008D50B55938C2C37DFC52279EE90 +:104B9000B2B4E914D874C438934C3D1818C70B212B +:104BA0003215B642F0FADF9FC9904C54B2DE7F68EE +:104BB000C4A341DA9BD8D0628FB2F6A3938FEA16D2 +:104BC000667CFF0A67975B724BAED21AA9BE5A8009 +:104BD000AFA9E738A500ADC69628BFD619ACE298B4 +:104BE0004F1B6930BD8DA6F8CEEFE5BDDB33E45D2C +:104BF0006526938B5C4BA233A3A43FF2DCBF3CA79A +:104C000085BDF106E73148FF19EF23C4BB20368F7D +:104C100085F6910C077BE31F21BB8C14C48E8D732A +:104C2000367A9AA2116E5B2CB5672DCC07C112673C +:104C3000EF4616FCB96C67D92606D006446427AF48 +:104C4000945AEA813786FEB9954428F94EE906FD63 +:104C500054135F3A7D4C87617E96096A739B773661 +:104C60005885CA84D226FDA1D140887CE66DDA0041 +:104C70002770DD2A978EB3EC1425571E29BF83B702 +:104C8000AFA7227CF925A85A7548DD44881C5F9996 +:104C9000E9F8854F59421EDEC6715783BADD98BCCC +:104CA00068B33D0DB05D6F30F91E47F09E95EE88FC +:104CB000FC7EB243BEC6D63B3CB79C44C340DADC64 +:104CC000C173726656B84A26A76E067AEE8E44D530 +:104CD00084DE2B6C57774CCA97E0FB8DAA8826A1FF +:104CE0008389AACD4FDEC20C9F2AD7FB2A5CDEAB9C +:104CF000EF0ED496932328814A132A820C24261C73 +:104D0000B2E638DAE2DBC5854D12321AA97A6BEECB +:104D1000952CE7F395BFE406AA711325E3016452CD +:104D20008CD80AC92260C6E799370D0B33765B8DA4 +:104D3000CBB1B8B8B7BA8C7040BC27BE7860E997E1 +:104D40008B5DF6F9AF98B694ACB7AAC540E8E0C160 +:104D5000F7689A90E4EE65D5F20058330EC62F2717 +:104D6000D06DD77A9C6F47A71C07F997E9BCF4B7B9 +:104D70008ABBA1B72592DD1712CC12DAB6DC9F4FA1 +:104D800027EA3D030A0093337BD2814F94D649151D +:104D9000BCA58E4D11DBAB1EC1F5137A4C291D82CB +:104DA0009F2C9B744C683262826FE192EF6E5601C9 +:104DB0002A65EAA928A3EE03B94B47B9505FAD02B3 +:104DC000671C3628F17D9845B1998EA3A32A986275 +:104DD000A6351AF54A910B702AF982E6709190BEB9 +:104DE000377DC17C834558446138E960A7BB6A2C94 +:104DF000713F24D2E52612EFE4AABACE7E2D22B965 +:104E0000A7BF4FBF9E5296EBB5C32E1CA5EA3A072B +:104E1000A120144EF4CEDA8EAC9E966BC5D87D18C8 +:104E2000646C5D2E70E73F4515D1BFB001207C0258 +:104E3000DBCF2DC625D965D05F88C91A89CC01037F +:104E40000C0D68A5186405593BCE2B238205AEEBEB +:104E500043382BDAA423D9B847886C1239A1EB1256 +:104E600070EDD5C3FDB822AE8FCCF9A6F709360E8A +:104E70003983B70A1FFFBD9B86E6B59B1047AE334B +:104E8000F18ED846A9A6DCE6E4D5E9314CF98218C2 +:104E90006BF13E6FD14C1410906E6C064230CE4ACE +:104EA000E0BC6C48D92ED5CBD8A5C194A1FB9056B7 +:104EB000CFE0803A640093C38257563F9C278178A5 +:104EC000B8FD84E44F6460A066D38645D14F91EB72 +:104ED000FDA01B3529DBFC4FEA656B26C1B11AF832 +:104EE0006980F8514D634D7731C38BEBB471FAABE8 +:104EF00089950D7F0092D4E40D13AA0C874F2DDF06 +:104F0000D57FD982C0781DF91B3DF1EA581BB17DD0 +:104F100076F56F83F3CC72A80A989295B142A5E911 +:104F20001A2707E28B8B6B506735F3DD2556F1EBC3 +:104F3000DC4AC803341247189058D61DF2A5DA424D +:104F40001CF2E609E55CDB2988437108DE06BC69D2 +:104F5000EEEB8A9C5340E7E6DA7638AA95B73F60D5 +:104F60005395E3DD198FAE2CBC6EABA3D7A085F4AF +:104F70000F24C71CD3A098C45AF1FBD3E6EC150349 +:104F8000C23CF9DC7E21908109D2DFA1DF49C41344 +:104F900012A8080B39E159206BC53BC27522D96CA8 +:104FA0000302667EFCFBD5284207DB516A2E4FB90F +:104FB000AB2132B72889F80922E032EADC3EF48AD4 +:104FC000F43FFE670C31F337FD780BFAD7F2A8FDFA +:104FD0006E7836AF51925B3542592208BFED720CA4 +:104FE000602DA3E96F5D2C8422189070755BFDA67F +:104FF00026E0FC6B1FE953A7C9354A416063762A56 +:1050000021F9EB009DDBCEB7EEDF2B61A812AB24BC +:105010001C1D77B87F1C8AA75A5F8A132446020793 +:1050200008F589137535B069113633E2A9B8A07A4D +:10503000953BD01357FBF3F97A61BB5FEC645436B0 +:105040009BEF18A6997CE3E9683FA4FBED7751BB81 +:10505000596C3978929E9EB8E5A5E30FB856B8D43E +:105060006004FB29D03A478ACA49417ADE52EB7D77 +:10507000D60FC91B8CE05269FE6B1AB46C3138CF65 +:10508000326A67B5F6D8B9136A92C2B700A9FEE0D2 +:10509000B82FE87348E3A5CC3022B88023F47C7A9B +:1050A00050B4982057FF04AAF050824B94C6A61D16 +:1050B0008427834EE54979FA83F5F7446E63FCD281 +:1050C000221906BA58F4F9DD34F0A244D94E7C9B7B +:1050D00078F3FDC7C30A03815B43B4D9D9FCD1453A +:1050E000A554BBF843263B0C98FB698B59E256B29A +:1050F00063E6787C805C7DC141EABA18AEB5B2D96E +:1051000027340F9F659D6876D6F141C0BB1935E104 +:10511000D0784ACEDE6DEC6718C08544990338C854 +:1051200010DCE97E497C61DD71005C81370217F497 +:10513000A8E6A0537A5A261DEFBD45A6E5255AB824 +:10514000F844A59344DCFB7283299D836E095F8735 +:10515000A68958479B9EB6FFB63231B1B431629CE6 +:10516000A4B4D9092EF60BF024FFCE58A6E7109B65 +:10517000AF13296E2D9AB661DE67AF7084F66A5A56 +:1051800076A08DAEC71D4925644CCB451A1D5AD457 +:10519000D0464D12D86025E9BFB082C9AE4F3DFA66 +:1051A000E10655996F064BD3D286261113A72BF231 +:1051B000A5E6DCEB0891134FBF59CB3F88767A11F7 +:1051C000596B404EF2BFE14DCA2A4252ADF9473702 +:1051D0001A221BAD576F1472B965EF3E0B28CAA295 +:1051E0005ABB804946D4031AB660F25CEFFAFAD78C +:1051F000B1DB58E2F0FA4638BE1623A3F3352E375A +:105200003B4AB642078BA5ED1B4590A90EA0BA3CC0 +:10521000F55380C56C6D6F738948EC7901EAC4FE63 +:1052200090690B361C4201B0FD11B2C16B3A822568 +:105230001AD4AFA2FDE0ED40E0596B5362D8F4936D +:10524000E1DEBCC5E246DC33BDE5AB3BCAC71F4A65 +:105250009FD5E87BE94E6A8B571C3CC4AFAC1FE777 +:10526000734009526B7AE1F8B5E081722D47F0FF87 +:1052700006523424691EB0656BA55FC9E8D6FE8569 +:10528000A394ABBB3DB28BA53858C53EE68DD82C58 +:10529000662E78688BD7636EE022E3104178023D7A +:1052A0005E8ECF1B18A4188786422953510EF99A97 +:1052B000FFF81D3755D0FF4C7457AD0AA6BDCD6E13 +:1052C00098FB0F6F0F3AEF4B74ED1F85177BBF16DE +:1052D000A17F10B511724AB0394CC121A255937902 +:1052E000C2BD17B15B889453F8D3313A9B4DD06659 +:1052F0001BBE9830B1D1D3643E02D5E604E585C12A +:10530000AF79FE3B1C2AC6458AEB41F6A519A836A3 +:1053100051CBF48F53FDEDBEEC9B2623271E175E69 +:10532000A137EB6995B68A1D251629A5ABB3AB6DE0 +:105330008BC401E055ADB0ACCBB3B2289A52204D2E +:105340002B7451232EE00ACCB7F2371BCCF5C58D58 +:1053500006B5C4A94781F26250673002F7B08E17D4 +:10536000C9FE0B0FFB7ED6883811710F3141457293 +:1053700012668F6165EBE65DABE190F2F2F2E173EC +:10538000EEF0D725BAFC50E3D9A9458916B1F15EF4 +:10539000D339EBDD7FD013212274A2AE2E24712EDF +:1053A00087B704B4FD46F6059BB37A3EE5EDFACF28 +:1053B00005E7490E988BD05AB3FF0DFFBCCC5AFBC2 +:1053C00098113E34F8D956EB2DD4A13B5A4DE21535 +:1053D000E9943C202A9F146013B61698790D112881 +:1053E000DE2582A75DB79E0E6A594930DBB91F0FD3 +:1053F00085A29976B787BB853DECE063A897D67BFD +:105400008C0234B3A7D50141B76235EA6CF8D1DC20 +:10541000D90AB371EA602F34A136782F06A1460C61 +:10542000465137D432BFAE0A3FCA66CD5C52181F10 +:105430000F2041EA8973587C00DD4A4FC43D4F1F5D +:1054400014D06C27377D283E1921997CABB67EAFEE +:105450002CB036E173A667CB15D61DB8481E227D49 +:1054600099DD695D93EA00009507F03E9F0B21A04E +:105470000E1079E301C75FD600FF444E8C668300AF +:10548000BA2D0E90BD0ED921EA3AEB622C5350464C +:105490001D2DC64D9CD6437DA100EA8974FCE3CC4A +:1054A000C8948F45573B8888E2074B132766A1E4D1 +:1054B000DC8928E147EB60B1D3C91EA48FC2EA287A +:1054C00027C2726CD4E26B4B232D9607A4C5B70E8E +:1054D000184A143BBDE5EE40FC2D8405D6198386A1 +:1054E00098C3FE35ED10E0C3437DF34C00D750FB6D +:1054F00050423DC9E8B6FF921533BE24C12CAA2004 +:10550000FCDC48456B73C74B226935B9F7851F5ED4 +:10551000C982C36890973E42410E0A37DFC9A53C55 +:10552000ACB69CB5AD2CC41F9A794BCE8796879CA0 +:10553000A63A58609C0C6CB115D6C6412CDCA54F20 +:10554000CE75C0F7E2911BB1E3A6E361D01127301D +:105550005B222A3A869C86745803C7D7D81EE7C0B8 +:10556000F09F22FCEEBE46EC41D4145A86935ADAE0 +:105570002B0684D2279D05E793079D08849AE15660 +:105580001DA2EF7A8B0800F8BD3801FC975AD4F9B8 +:10559000A780D4FD8CC4AE3D6B3D0BC7D8A79C271C +:1055A000F25B56DC1DBFE4DF7D97D6C24F2E387804 +:1055B000F87B294AE8620DF97C900D27FC0A185403 +:1055C000A947EB3D252F264F9177CBC41560AA63E1 +:1055D00038C686870337E81B32AD6D90A02832B3FA +:1055E0009CB483554E6A84871795CE4A172294AF90 +:1055F000B710F2646B49589C0372D650D4DBAC8E62 +:105600009B82A0C96ED8C66F36665A6324360228BC +:105610005205BD6CE5776A795E6FCFB7711DE1FE0B +:105620005BC7461FB892A215EC0A79E372C355E135 +:10563000B9F711B7A4A08642D930A30B3FCB938B07 +:105640006877260D96CA531A077CDC83C26A548693 +:10565000F0EDA9D09E52958E31B8EC035C962A9459 +:10566000B51AF1EF95774919AEC939DD64A7DCE7C2 +:1056700006369C0D37138730ACBA77E1898E3B48EC +:10568000FD9BB5180FB48130C41C8E45179ADA33D0 +:1056900051417277A68948F2155B96E8134324A11D +:1056A00025807B62BEB940DDAF60AC1CE6E725E833 +:1056B000C762E3BB241AD81322451C0442FBDA0755 +:1056C0004C3423F46EEAD02799D8603E767D4EBAEA +:1056D0001FD60F0AE5B665E58CBC346AD67BB4AC40 +:1056E00020C187188D7B1E2BF9F0FF0B8940D9BA9A +:1056F000E769DE279537D0A69FDC229957B9857ACE +:1057000047102472CA98E8B9F83F4F16C583A4F928 +:10571000541FF875D0178C89DFADD8E569904F110B +:10572000431ADA9E27E2DC15250A5402D6B5C5F3E2 +:10573000FB1E37A85A6F33DBFB3FF2C9EA99CA2731 +:10574000B3F91295D388E911A403E947F4380DC7DA +:10575000249113CC78F3654BC5912327B7314614B8 +:10576000F5FD522FEFFC6FD3F2012300A01F75CD82 +:1057700020BCDFD37425C33EF884EBE65C4F38E3EE +:105780000FD0590B03F395B668BA182C9EEDEC6553 +:105790009504DC11C19BC4A526A51CF86C12CE850E +:1057A0007FC7EE9245089F69B61BEEB33CB0AF0BC6 +:1057B000195C08A4ACE0C1EED471C5725E6C73D004 +:1057C0005205586099049AB4BF4F7D524BF3387319 +:1057D00058FA45FBC855EEE3C0A0381372C8F0155F +:1057E00011059514B5DDF37E5FD1948C5F749496AA +:1057F0000D54144469B45E9A57D59B933FF2EFACB5 +:1058000039189EE331E614E4D11FA7994983BB4EB2 +:10581000F41ED408EE20A3D33AA8D6E8B2C85DF3AC +:10582000D4602006987E35D35B668A24AB1EB2E72F +:10583000A91BFD18F40D5AA1A033E18A65D6010C0D +:10584000CE0AC82155EBA47F93DA1FDCBCCE0F78BB +:10585000405A5BCC4AF8B4FCD6F642F79E1603D801 +:10586000E225620AF90C7F12DB35FED7868BA3593D +:105870007ACC8860D18B17EDB11A03BE6CF932B2C5 +:1058800065BC9CD6393D43A74EF0293EDA6A974C59 +:10589000C607A8EF4EA38A5B3F6220B6157208D0F8 +:1058A000644B8DB654BA54737FCE224C1B95175956 +:1058B0009DB95014BEB46CAC236F8C9BD88C847B88 +:1058C000A8C0885F1A3F4D301825FBD938C420E2A4 +:1058D0007C8A673906B7F2C0CB95307CC145B03FB2 +:1058E000F2EBD25B819576CB398234443785CE4951 +:1058F00087084BC6750BE2D33C20780060664B16D8 +:10590000409251B58080F5879C9FD8B6F2084181BE +:10591000424FFFC4A341DC81ABE16128C02F1B2CA7 +:10592000324ECC63748150F6C6860FF1D0096432D2 +:10593000556B8A709D9F5D26B04672693D9762B92E +:105940008EA41787341FC00A6C930A234752FBA208 +:105950008CF2433CDCEE58F68F2AD785FC30414A66 +:105960005D22ABB92FA26E8459E14745695F65B4EA +:1059700049E6BCC8111DDFDCAF20EDEB141A7D44F5 +:10598000557C0F60C7B687E94EE398191DFBCC67BD +:105990001F19BA43769DD9A8FAC41E1A96C40B786B +:1059A00064682626E9987DBA402DD7B88F808AD1C1 +:1059B00056C0312F9E9C4FDF80104FA6AB255A9BBF +:1059C0002DAB499CE4EEAA0B510C95A55D78CC5FFC +:1059D000CEACD5EDF2D985F64F21CBDDBB0612DC7E +:1059E0009F286FB50D4EF646E48BE882B3B5B16AD9 +:1059F000D806CC91B6E6D0CE0D1A61E98F756076E7 +:105A0000D69C71E63F35DDC750C206D40D8E608E40 +:105A1000C034D4396872B76D2765E89D3575480480 +:105A2000ECF080AA000B6AEA80C2D8BA4BA122F639 +:105A3000F76423A40C36F656F621A54EA872FB0493 +:105A40006F30FB4EF54115E336E2724C58E6BAE290 +:105A50001ECD011CDACF45F830E2D12689B9BDD080 +:105A60004893A39A08F384384B50495FDE13971389 +:105A700004505D890BFB86279B9E6D42EAE77E1FE3 +:105A800036EA64690373B4952AFFAE2BE9BCE1AD35 +:105A90005B8F9D9BC3A8A96142D19F080F8656C00A +:105AA00085D66048370A207EE3C779C76A42EB444F +:105AB000747F23222E6AA8B091E779951E60E112C7 +:105AC00074D9AAF496431526321596FF435A3C6FB3 +:105AD000646CFDFFBB2E4773EE286FF6D715DAF026 +:105AE0001FFC01FF529A19AE2C8ED2680D221C7336 +:105AF00071E5331847BAB8FDC6DA2D1C778F3D52D1 +:105B0000087B493C056C81C5E79E368DCDF17981D6 +:105B10008E4545FA334287DDDEF7E85BD6B831576C +:105B2000C0C371D74C384F858DB01C957F1230465D +:105B300073CC1EDE45AC8D84518198844CA84A5F9D +:105B40000374B9BEE71A3E84A3C9378A4FBFF5BFB5 +:105B50004600AA9B4E77325388FB6FC94DDD65F72F +:105B6000D56DE12649E3034E174C276E3C5074CDAA +:105B7000F298D4B5B8ECE6DB362B0DF57037B4CD22 +:105B8000C3FC6DA2D9E8100F3F27E2C5B52BC93A77 +:105B900069237EC6C6186ABADB200C923CFB1C81C6 +:105BA000442790D9B3B1C0C453B97495F1543ECDD4 +:105BB000B988FBE7ED2DE1DF5FCD8E49AD4F6D84F8 +:105BC000757FD8B99B4E079D8E0BF66111B8C647FD +:105BD00058480B36E75BFE1F337C117EF25465DFBD +:105BE00077AB4A1BEACB5934558300924F5BB9E738 +:105BF000DAD390AA8B18D0CE55AD13E38DCEE4BC8A +:105C0000A43E4BC04B582E921E155B894BA55AC71C +:105C1000836DE831CF9D8E55AF3A67E02C23DEB51A +:105C2000113B9F8CF3879B45C8AEC07FC8CC70A04A +:105C3000D5FE4B7B7F85959AA9D993D3AC75BA5A7B +:105C4000BCB47E86DD3FC8B0320AD7EEF5D2F2DCB6 +:105C5000E806A277CC1ABFA5BD7BFDC2D6206E5F39 +:105C6000887A05204F2DFD8C9427FC9CC741B826CF +:105C70009CB6498CB0F04FA3B5A4DE55057B0B0450 +:105C80001CBBC8774265231E3FDA013AE17A91BF17 +:105C900025F5567BDCEBD70EC6AEE0DA62966B07D5 +:105CA000A77DD4382D83871C7E3925177B354AB1D3 +:105CB00088AC1A37DED39A9DE34D5B17070D07605A +:105CC000187BD6ED268B30384FC7292BCBB827FE53 +:105CD000707C7BB62177B2C93AFBEED7ABC104E842 +:105CE00027F5A0BFAA7A0A0D101E4A06D146282A17 +:105CF0003BDC5ECD1A1E2510445502FA75D969B8F1 +:105D0000684D33F740E3095485931CB27AF2A99E9B +:105D10002A004E81106DB9D025338FE79103DBD96E +:105D20006E01B4B44A4590F10E190D987445AADD80 +:105D300072E9DF23354F34F8BEDCD13E1B6909DA46 +:105D4000F0A75303B2F6796D7DB28CA5EC3808C18B +:105D5000A53A7353CD73BD719C3F821F9873666AD9 +:105D6000C3D326BE07AAEE9AC7AF17BA41BAFFB58A +:105D700027333F30A408F48F6B46FB8360E744175A +:105D8000DB09EA034A663C89668CC246D9314ACBB4 +:105D900098E4233F8A04B3D6B7E113FF065C6F7D16 +:105DA000363815B92922FF8BF6B72F82AC3541ACB6 +:105DB0001AE71285B5C648D151EB6ADB921A40FC4E +:105DC000CC7670AC01DC6F25A04AF7957D6EF5CFDF +:105DD000B6670B35A26DF19610844F85B13C6C69A6 +:105DE000526E305A5EA0B36F85CF232BB530AE60B4 +:105DF0001A829BFE3FF92468BE1C2E9DC11F692F8D +:105E0000FFA32F54891472D500C7DC71B25F03A4BD +:105E10008BA3B8A81583A0989A9FEA599F663DB0B6 +:105E200084DA1C0B1F661BBA6A423FF7306A0323F1 +:105E300027047AC76C5974E95F667F9C6566060E15 +:105E400056DA844F203813BF99093CB4D5ACF5B667 +:105E50005DB3ADA4E8CE3E5A95026BDE9AD3C9ACD1 +:105E600051936573AB5E888E3CCE4BFA3FA552BC16 +:105E700049F43D2C7B7B259DAFFB0559982BB3B294 +:105E800038F5A68C8E319AF3039804BF208013FE58 +:105E9000667691FE22541A731A073F87354F84B4F1 +:105EA000B69C774BDC863B2B29ED3A0ECCF66CC1C9 +:105EB000BD83460288F7DBF8B16022B890A76FCFA8 +:105EC000EE4F6C0D893F3A4DA2E0C6E3861FECF51C +:105ED000933D95297738EA6B19997A57DFDAE90308 +:105EE000690D9BD85384CDB78E9C23F5869E1E7F6B +:105EF0004B8EB8113EAF150F024525C1CC4F28BDC2 +:105F0000A5BB99482D7CF8EADF8339A49910A23DFE +:105F100020D55359F3ED636340E3BF7BF2B3140222 +:105F2000D065B961C6F74724538670846BADB9DE7E +:105F30004DC596FB63C93E3C244465285E49B9FCC7 +:105F4000E780F84AD3A697494CE5196F0CA44B8A11 +:105F5000EAB40E76EA3BC2D38028DC9399C24D574F +:105F60001B3C437C92AE00013C1CE0143A86BEC44C +:105F7000A74881A997D6BB55AB4CFA21C1FB306B22 +:105F8000D6F3D097D30FAA7099053F7EB870B02B87 +:105F900009022502DFA48A80EADC4412C519BCE2AA +:105FA0009BAAD4690934CA9A1454D89272751E8374 +:105FB000E964E980A92B54E099FA236935A95FE9DE +:105FC00055429932FAD3FA1379DB1B8DC87ECAF594 +:105FD00055DD1DF2BE7C880280BC0A7FEC2B4E672B +:105FE000B9C1B058D79F8CA7EBCDE8D62F21882D0B +:105FF0004AEBC4B784F85B96BB1848933C00B6E8FC +:1060000045118BE5A9611212499AB1C0D765CA94AE +:106010009278A1CA9078052FE4071A12AE132E3594 +:106020009F9C71095C9D060FAAE2F3B74FBEC25553 +:10603000D592BA2B9362AC8683CB745E736A015E91 +:10604000BEDE3C4A0B2BBA442728F9F7B12E8F1A33 +:10605000C8EDDB43E0B6767FF2A4C8F77A9D53B073 +:10606000652FAD87DDF4EB8C32316C82C5F1DB2717 +:106070001A447C4AA2E5C4A50F00FFDC150EFD857D +:106080000B54EFB88B0015F00B74000766354864AD +:10609000150B036E90EF789A214EDB7D11B0203AFC +:1060A00092B05BB2BE028F530231C8C0434076E467 +:1060B000F72568D346632ACEFC4276E848E0FB8B9E +:1060C000F293A49B2863659B32CF1246F192FECADD +:1060D000666E1A0E0DEF510D66F073AFD2F24BEFF4 +:1060E000A5CA6608D96BA3E6F1A03E65770547D837 +:1060F00021D128B90194C19CC8914D4FCF3B634237 +:106100005E5A396BBA4DB77395B9A02EB74DC8FF1B +:10611000DADEEB6FEB7A9E9B9A2FC32CB7ADA1D83A +:1061200094EC5B05BA6BA6433CB86E0A270FEEB839 +:106130000C83B143FD0945E4DCBDDCEEBD4CEE55FE +:106140007E39B9BDF6A2CC7C801AFC5A81A8EF0238 +:10615000E814DDB0C4FA12506789A6ACD813EC3449 +:10616000FA0086B090D7A562B5E5927A0FADF8D760 +:10617000CE1A65996FEEA06F75AB27B73800C2F5E0 +:106180007109F7EB5724CBC3EFB9FD7F2BAF21EF9C +:106190002EC4FD9F438138F5F660AA6D0BD6AD7E07 +:1061A0006C687C70E3C73752BF03015ED396673BD0 +:1061B000A53D6D3CF3E5EF57C3967B1A05869B8C96 +:1061C000BC7E43F0B17CC38AF183F44997DA07CFF0 +:1061D00001FDE8DFF568A0874E5CE03618D3FAF5DC +:1061E000C2EEEEF7BEDD01FA93F24D68B441F988D4 +:1061F00054E8A3C80F6A8EE0A163D98DA25FBE2BBD +:10620000D67F7123676727A649C8EB7D419B1EADEA +:106210008646B86B7FCCF8F3DAA6D1A894432A401F +:10622000352C37A3845793D96405D63BC679D9D684 +:1062300072B0907D0625EAAD644DF2A7D0DD29C588 +:1062400035051793B0066C1BFBE3CD24A2D3F94EA2 +:10625000F4798DB0D7C8B8B9E459976BA2D8AD4ED0 +:1062600079558DA42555B7E1FDE3F47EF77145B26C +:10627000C23C536F36935245BDBCCE2D76236DC4C0 +:106280008C33E9D51CD40AAF4BA22E307E0261E6D6 +:1062900011EB2ECF38B503A9EDE19EBC7BE9C922F5 +:1062A00062B62B87236E1785901328B30006C1B4FE +:1062B000703107FFB152672B6C5C76D5DF4B5C6F9A +:1062C000BB2758F513FD5CCFC05AB772315E7820FA +:1062D000AE4142877D66006D33585D5EBE83F50238 +:1062E000FB42DDA80E58A5A2089C49BB5022D378DA +:1062F0001888ACC475E5899D9DC6498DBFCDC73949 +:106300007EB15FD268B316E3C35E71BDCF9527D26D +:1063100057B59179A05240DD22E89C1B470256AE4A +:106320000FD75EA13E9030A78165E5A8269BC4E506 +:10633000DF9DE485427AF3933222372F36B22992D9 +:106340009189C7F388F1AC0FF9D000403875A1A945 +:10635000BB8E47E63EAE79E171A546DC47E222936B +:106360004E78C6746380650D9E848F8F86D05AFBED +:10637000D1AB3256C2537C2A363F4156536F103749 +:1063800089997B14628B087A23625690FC845DA9FC +:10639000F1402EE2D31EB5B3B315DC12FDE1217D31 +:1063A00094FABB4B548D2CCDA6114D88D264F12CA0 +:1063B0003D7859FEDB7703CF46F48654CDE4D746CB +:1063C000DAF4DDE3929DB2BDDED9FFEFC46A27A8FF +:1063D000498743A9F965A5BDEBD8E16810EA6E537A +:1063E00057E91C1287AF9FB794AC09DA86C263974E +:1063F0008757D61EC51548EC9EA5F11639D2231C29 +:1064000038968A1126A9F35C6D24B09AA6A761611B +:106410002D33FF9E32AF5BB4A377805A7EA8F82954 +:1064200024B930842F4982576C3B7F93A3536A165B +:106430009ADAEB95250C56D5587E33BD4233323A65 +:10644000258C33D13E55D8BA1D259B2EE7D12DF191 +:10645000813AD7246377BF690B5C69D8C9D5FC56EC +:10646000CEEBE9EF1BB74A0FD5042257D468CDCB4A +:1064700042F74A90E84E7877B61074A18046A1F3AF +:10648000BD2532AF9BEAEABFE3C2C952F3B0BCB943 +:10649000350928C10868D00987AAAD058653A60D1D +:1064A000E417F1F31299C0A7C28E6CE59920B1628E +:1064B0009C644AAF54B00A02B3598388CDBF4E7E64 +:1064C0009C5FC462E70207808C40366A505A986528 +:1064D00098DCA6E484A9FC3F01C2EA87831560A189 +:1064E000EAF9C560BD6A94AD6AF52CA34850124E16 +:1064F00016C88B863B1BF080CDC085AA033F0BA539 +:10650000D4F03CE59D12C81333642FF9316DAD8290 +:106510000F9AD1CAF61D7EEEE921A5DE28B53565B4 +:10652000A988A60097BCC2B80DA755CA1173E2CDC1 +:106530004A2125F028F699E764F1BE80FAE5BEAE5F +:10654000C42E92938DB5FBAE433A4A60263DC57E7C +:10655000DA298D53928CBBE4097372D809C30BEA14 +:10656000EB174CDC673D582C6E60095EC1FF49ECAF +:1065700032A67025ACD6A4D23F2C809112CFD14840 +:10658000F0177B8BE374151B02A471B38F5AB4838D +:106590006D11F851A23F10A21877413F578555DE83 +:1065A000A6041A7FF8962750E7FD117CA85D69C5FF +:1065B000344DA17E520939E121DF7644805DDE6CE5 +:1065C000F968CC64FC168B2E1379F6CA4EEB13CC0B +:1065D0007AAFB873074B33AA5847D1A1B123110A38 +:1065E00017312BEBA638D71E45C5ED9341B9A08BCB +:1065F00047D756D98D05BE610756AECAF2A8EAA2A2 +:106600007E857A7241B5154FF5EFCD0CE6E6E14691 +:10661000637DEDA8BF7348353246FCB072541BE36E +:10662000E921A13C9264D8F4E86DCF46AD55704B9A +:1066300034203E22EF9239C04AA9BBAA0276B6D0D6 +:106640000569630BADD32F93C0E7A169E959BEA9D2 +:10665000F3B8C5FC5A94E53426E17767F441AEA45B +:10666000AD43615989ED4B1D8972EB71E2B23E3D3C +:1066700011998C9796DB4D42AEC15A1F6E9F43C550 +:1066800092D44507D2719492EB21AD44F33E47E496 +:10669000BF9182AB2B70783FDD44447B612B9562C8 +:1066A0005521AED4E26A1AB3B881AB3119A7706133 +:1066B00037C3F14FAA6226AB4CECF1ACB7CC5A1AF7 +:1066C000C80770FC3982FBE33AD619EA85CAE66D41 +:1066D000F07B25A4C7A23C774515EA1FC4B51E3838 +:1066E0004F561498DA289EF1992881F474808ADA3A +:1066F0005F212EBABAC8C39BF4F24AF396095864D4 +:1067000065D0AD96880DC0DB548656EE2E7BF2D751 +:1067100041D758F5AC8D4B15230EE3011C268DAFE8 +:10672000256149B31675EBB2789D514F1454FD2A7B +:10673000A046B8BFD7E6B7464176E094BC02B6F8AB +:106740009F8700A12991B3DD01891C9B113DEC724B +:1067500064445412A145A9C479EAD9BE3AA25E376D +:106760000FE0310802C7D2BE03EF3677E89229273F +:10677000C6EE2AC66572F32D81666C09C3D272D249 +:106780005DBF226E02696BF59A3B8BD415AE452333 +:10679000EA6CF15376A104AC131A927FAE9FE8F72E +:1067A000590D45D64C831855A861630F8BB34DC75F +:1067B0005739FDF8C1BF9A1ABF56F8DF778E5D06CC +:1067C00013D25FF95689FD7809992CC0DB9F97D8C1 +:1067D000C9B168CBF756C16F36427CACE17DA4C825 +:1067E000742D4121300D00410C04A34FBF60EC78A3 +:1067F000E748E4540CC458E3C25686F27DD63D5FA8 +:1068000010F6FF14C23AB314DC83F1AB1596DC101A +:106810004EE25421970A53691071FD55899768C358 +:106820009E1F6CA4EA4C7CC1A2D5A6DFA42DBC6F30 +:106830002DD3929222F947B9432ACB7B262A5AA418 +:10684000A63225E4CB110A2E96EFCED7C9A77DC478 +:10685000F3A0B2F52F7B9446F1F82EB01CBECFD634 +:106860006C7C8E339CC2B7D97D216B9567ED69FF37 +:10687000A1A1A500F160CF13B835169B22E4B7C0E3 +:10688000BE0EC1FE86A4BEC8B2062D11E6E416F601 +:106890002D4D35428C5F9C00B0D40AB05E7A395DD4 +:1068A00047A0765CEC63F27B811FFDC2FEA2F8BFBD +:1068B000B7F0D852750399D85B38940FFF12358F13 +:1068C000E560600F10B437EF0674682DA05DB73F28 +:1068D000BBA72F66163500A555564DF1F8E5EE0E0F +:1068E000D5FAA29EF4D8EB0EFC33340E5DBD8316B0 +:1068F0004943AB7FFE64DAE63A32F29DE24BA97877 +:106900000850BDEB01CB41079F631E70AEA8E8B1F4 +:1069100096A2A9A7334F54A574AC7867D645FB0956 +:106920005950D8644BDFECE0F0699A59307A380F4F +:106930005B145BA9B82F6BBAC88409707953A1495D +:10694000828FFD580775B6241C2FC3AA22F8744FF6 +:10695000C9BECF4E33A87CE3B2A3CD32E2971FDE8F +:10696000255D380E69B36FCB44C28001F3E58C8599 +:106970002326F09BA8A517E570DEBEEBADC686EC1E +:106980007CC66902B5709544DE3910C60FD18859AE +:106990004E55A9C25F10D97B230AA092C2FD93561F +:1069A00020AEDB9E371201695AB4D4ACB9229119DA +:1069B000F105D77F4557D4CB17D7CD57B5582DBF45 +:1069C0006A2A36A711FD970B59D2F4E83562A8FF61 +:1069D00021AE022C50F29A99423EA74C7B182A8590 +:1069E000B45E7DE9C12C1C6433CA3710005050A539 +:1069F0009C2811DAF220D5FC05AF8B002A660EFF29 +:106A00008168071207E05EA2453F89C45444CB3237 +:106A1000618FEBFE96F8A98DCC58909E6E0F84384E +:106A200071A760CCB2AD19377CF2CD87EC8828C74E +:106A300079ACBEA3651C96ED8FD3D353EE1CEDA6A7 +:106A4000543F2CECB3D43A5264383165DBB9B233DD +:106A500080BE04D3B10117B0C85C0A98F0AD60B233 +:106A600010241CA9D8375CE5EF29894518FC7B2246 +:106A70001386AD9CAF3E9235B32EE021775BE623C3 +:106A8000147B56B124F751D3B6F4B4BA96351B70C3 +:106A90003971B077BDA0B6D7CE24595A7ECBBC5A37 +:106AA0005E3AC4D32D4DE2B683324EEB54A88E032A +:106AB000F8850F17948D6DE3CAF081604BD7A067FE +:106AC0008D7839FE9ADE39BBDF9AAF6AA859454402 +:106AD000AF49307BDDDB87DB0DA321446E1963C337 +:106AE0004C2F28AE18928C435F134385166130B843 +:106AF0002F86F501751C01B62E5BEDAB9952D5586A +:106B00006FEFB86B0E0BBBE8067A70FB81E4190BD4 +:106B10006D8797D19FE71571002731CEFDF934E4D9 +:106B20004ACDA45CDFED3EA582C9711C1B55930FB5 +:106B3000B7A3162512AACD74CF1B5AA1E5F4A3CB97 +:106B4000E7DFD2EC6DE785B7F97934EA4B72430E93 +:106B50001FEF66E5B0DCD22E1F8FA1E217C3D42051 +:106B600095A004924B8C8EF651F7A1912198C70401 +:106B7000AE32FA7F38D4D8EBB214080FA3E6044C37 +:106B8000708EBE664E85DF13389F7B8BE695744F03 +:106B90000162BE9FC73E524BB201AD532287B29AEB +:106BA0006D169D963BFADD3324D007574994CAB041 +:106BB000D3072F84F3C473378EBE3F340F773E95CF +:106BC00077FB29CE9B334AF94EB4045FD635DE9A63 +:106BD000200DEF6B5E535288D96D66C16E0326019E +:106BE000B1E5CC9592DF70EDAE900F0ABE49788C7E +:106BF0008545A880BEDFFC641A76BD655281D3C886 +:106C000029279A142F97A86BEB47E935CE75AE2D3F +:106C1000853B3803583C5A5422BA3C277AD2FDEFC0 +:106C2000EB85692CCA07C846633C08DB2DA55CCD03 +:106C30009DA0309A780B0937CB8EEF129D07493F04 +:106C40006B6E72C5FBD8C8713984A874F29A6E9FB6 +:106C500067BF32458C4E291575112E8ED014D3EF97 +:106C60005F10F2AE3FDF2AFDC3FD486FE0E26EF930 +:106C7000F4495EE86226A6ECC0B5E61C926C626D33 +:106C8000F5414652CC7BEC3A328C787D331E38A5E8 +:106C9000ADB6C38E6A021A6358D972B56728F2CAB4 +:106CA000984FFADE32672FE5E524C2525098D13F63 +:106CB000892E5832CA27C9FE5FCC4130C9DBD99230 +:106CC000F01BD23AC618AEDD8387E4F08B31F58A2B +:106CD0000704F546ACCDACA26C0BADEF63CC9CDBEE +:106CE0002A4D7AE5D87746A8B99B58161BE9E432B5 +:106CF0006C5425EF8311EB47B56351392EFAC4DB91 +:106D0000F4C0C3A8BD2D7573B5E7848B9EE3EAD1AB +:106D100011EDCF40D61D5226D351E05EBEF8A76ECE +:106D2000BF48ADE099B0E0EDB0C5E0871A29E9E2CF +:106D300054606CB24B23ECA6E54C8D56D30DC3B416 +:106D400028F361F9ECC7F8635B4773BC0364E04563 +:106D5000F6D525BE01F3E71220B5F6BEF4A99D35A0 +:106D6000519B6A5858F1E3F36FFD54E7B8D36F2194 +:106D7000C045C631BC234805C9632A72800452004D +:106D8000BAC2CDC1E81D6B3B9BD4576C9100573400 +:106D9000F59629AAEF533EDE28468D585DFB7861B3 +:106DA000043A24BFE5E62D5F4FC8D185981312063B +:106DB000646F066209BFA4E10DC8DA598BFB49B4C0 +:106DC00084F9DBEABA195D05BB1146AC5E5F60165B +:106DD000994938409C9A7F420AC618086A31B88B94 +:106DE000AFB11A28DDFA8447703127835D574F1AF7 +:106DF000C29A357F8B98AB0366A5F8CC4F1A5531F4 +:106E0000C817B1916B5726E489D900330AF39A5C0D +:106E100031762000C5178708A6586331B0E8315D88 +:106E2000FC1864364F148E9D0722D8ECB18D3D7A44 +:106E300079D15BC542B9B1FBAAC6C79E4E409F44FB +:106E4000D65F9531801AA8F53E73B9BD91D02D4D0E +:106E5000DF8099EFB30EEFA185ADAF75ABF5A82E2E +:106E6000397EDDB408977EDB64E629D1DA145AF363 +:106E70003B368C73ECD77D3C4976D63FFF24F44CEF +:106E8000F76B103FBE625B1A4AF26D61017ABCC2B9 +:106E9000B67B06D5FE3445912B0FACBCA66DA989F7 +:106EA000E7919A588C9B3AA09228918EFA47B8BDE8 +:106EB000534ADA81AFF58B091EA7B42363CF596813 +:106EC000B543A8340FDD5ED6FFCB3BA0038D5F6AD0 +:106ED0001A09099A3FC4F0B43D9FFDD9AE0180EC78 +:106EE000D1054D3FD68F48D583B5D501F3A00DBE52 +:106EF0002A72E7601E719C3DF562E6A7C06D9FE7B0 +:106F0000D6051DE89DA2B199C7B0FC82BA1B6B5F84 +:106F100079F8D431B6772298E501FDE2C05DB9D9A0 +:106F20002A71430CAFBBE882E54E9084B01E1BCCA7 +:106F3000C9E24B2C3A204F4657AC5BC1857537E10F +:106F40007A52B1D4403E762EDAA858603CC96F8799 +:106F50003C04957E5AD5433DC53007C06809258954 +:106F60007A6838B8A8F2C05102EC1EC6FF3C4FD573 +:106F700002A91460CBA7603B3B733583A8E33EBEF8 +:106F800012E340245328AA253E0D8B00B3BAA599DD +:106F9000B33B44F7714540D927488376C1D3FFD32B +:106FA00000D523A43F546026A38887021A3CE44BF3 +:106FB000DE854DAD6332225B4C18099459720C4C3E +:106FC0001F6700F3A4D2481DD4753E3DABD3405299 +:106FD000C0BB55240A2ECE7DAFA8E771956E73B95C +:106FE000240EED88D7BDB7847782033A1DE36DADDB +:106FF000149676197AA36BA8B7E72710DB85E6B855 +:107000005746602FAF37D8CE8DCA03A14087B84608 +:10701000B65DC9F21C79B45A48A38BA001DCEB76AB +:10702000B486014347E174C5622D0ACA51D970A0E4 +:10703000B9C8795873305F4D7D286829CEA63F8B3B +:10704000E29CA9D3B43FEBF41A0D4A10E8D0E63025 +:10705000B881590125E1D10B067DAFE04BE7F8126D +:10706000EC443C09E072CE6FA9B388C0B16FAE6347 +:107070006481AD93D88661C5EE779311CDA2C244E9 +:107080004D2D49DED3283180249EB89A78F2D1B6AE +:107090007BCC6F0E979E3E12A831DF03CF25DBF924 +:1070A00053B3315AE26A517177AC285DFE26A77C52 +:1070B00052E5A8E800C5788E5334A83B302661A07D +:1070C000175CAA56FA7CC6E69473B0A9393A2A60CE +:1070D00065488BB8EF745D245A2A9491A51E648686 +:1070E00006A5D3686441144BBFD08CDE3C4F197F9A +:1070F00074C725B281737D69E44F4FBA2EB6C97645 +:107100008D2780AF777733A5A00F2063ADE5FA1107 +:1071100033775CB55930E230ECAA23505CDE0FB80F +:10712000798AD704481DAF0BE7B10FD8338ACFD681 +:10713000F0FF8CC4BF8361364B8C282D8AE29CD72C +:10714000D88743C8F038BFCD6B5FFC0BEF110E241E +:107150004ABD1B070FCFE1201F6C822A07E2639311 +:107160000A1E584E38215E1500D96A0148FFBFC576 +:10717000C189C0746D5DCB4F437360280E5A911E58 +:10718000167E85B112999701019FD46A4D1CB5DF17 +:10719000B6D2F8CB9FACFA83DC73D37399343B2E11 +:1071A0000D6ED78D9AE56BC4BD1DF143A9AA80D59C +:1071B0003990B4E1AE07411106B603F5BE9A54D535 +:1071C0005CF639C44E701AF9415EF6DD391690DC72 +:1071D000EAEE9385B4B98D7A7A69C0AAD34744C3DD +:1071E0005FE3161F2646091116678E8FA208545EAC +:1071F0002D634E302D2A4B7FAFDBB5A0071DF3ED7D +:107200001B715AD402055CE6D528C251D338A504B7 +:10721000B3127CA1EB0D0494F4D549076D39E9282C +:1072200076CE7D0B8A51777F215FA49060265B9399 +:1072300005DEDC74B05F2E712B60661EBBFE961BF4 +:107240006CB87138B72E781EFB26314FEA3DECBA88 +:10725000CEC0317E3504A0EB95888D965C022085EA +:10726000412A265B32D4941C9D6B67B4A04A55C357 +:107270003ED892F9110964F83161DBFCAD4C3C61F8 +:1072800086B46B56B3C2AE691E4118803C9DF5B002 +:10729000623A04FE2B62CEC671F98F335563D584F2 +:1072A000659DBD483FD01504252B3C87438BF622B6 +:1072B00058BE52910875C9103D2758A8047E6888A9 +:1072C0008F76AF387E4009242CC029239BBE8C6F5B +:1072D0007CFDED938F0C7CE4A29DB1B17646ED0070 +:1072E00070CD1BB473743E6032F2CA32EE8E42B679 +:1072F0001B09F1152E683C68AAE89258002F20C897 +:1073000028026F2B1034E6568731DB593C8926DA88 +:1073100088961A7A39F7E7A9E80895321B852492EE +:10732000EDEE916F10A06123AA98FE39669352CEBC +:10733000177449E87B6339CBD99F5CC970755B369C +:107340001DB058CEC33C692E826FE0B8878E415382 +:107350001E2495CE77A31A0E251FCFDB905C0AD68C +:10736000BC31074A212A657A6408713DFFDBCD0BE9 +:10737000CA6E2A067F06F4BFA1A933F834278BAE64 +:10738000F7DBC074FAA86554B588426C584ED463D4 +:1073900073DAA36EA4FAF6C84441AD2CE9976C01E8 +:1073A0005BA8F8EC552760E0BEE61BC4DD019682C1 +:1073B000D07A4C18C7E5D67EE50F14EA2C8B43E44F +:1073C000CA5C7947C41F51EA0B1E3D2E52354EA7A9 +:1073D0007D10C53DE5DD6CADCFF46A71F2C038BEFD +:1073E00002523E3E8ED5758686EFDCB77DD2E4E351 +:1073F000FADB86B0C4A773E5F82D6569E129642638 +:10740000A3BA444495FC5910212F11D18EE1A8E76D +:107410003092CB8AB0F2AEDBB766CCF7E57614AF2C +:107420007C7DAD746E74EFE8656255540215B34D02 +:10743000640D3D80D78FCFCB622C83029AE21A7BFA +:1074400031C6F086AC6B1CDD07C0157AB5DAEC24CA +:10745000F09AA1E1099C939EC6E4EB983D69804CAB +:1074600073A659511BB54A0308C6F40363BB459C78 +:1074700074F095C0310F17CDE88FED48F3B529387A +:10748000533D54BB6221581BF013C19A76AF096279 +:1074900018F59F17CA9E58711F8A1DB7C57F2427EC +:1074A0005A3BF0BF7FF02CEA1952FAFBAD6B3F4D0F +:1074B000A72EEBF111B33B1213283B4DD7C75458FD +:1074C00092C4E6E57E8D474980F7BF103E8F45BAEE +:1074D000EC7B0230A30519802B06AA43164657FB06 +:1074E000FF4C945A1AF99D35F8E77E6ECCB53C15E1 +:1074F000B1BD3AD831ACC06E07D91A490184FC0E2F +:10750000B96C5D5FD90F322721782D759EAC8CD276 +:10751000D62CA2FF36A7C6B1403D3A40AB34406EF0 +:10752000407744607FCF191974E221C04B25C2A473 +:10753000FCB8EE8AF38CFE5F5326AD868ED6E7BA92 +:107540003A148B1C78A1FBDF407ECFCA200AEDBF26 +:107550006B42D0E9D63BE61D9C21503BB1837E8136 +:10756000897B0FD68EA69BDD869A581AE5E758AF21 +:107570006104AC901F95858E434C4522986169E665 +:10758000326B5CDD0FE18E61D597A311493477CC66 +:107590008EB9A071951275B7CBBBC90FD27F86CEBD +:1075A0004B923EB5C9CDD53ED2D8D91D9CD282884A +:1075B000A92CC8818B844ACC059C3306AAE906B263 +:1075C000D99619339C9BAD96DA6B46852E38B665F5 +:1075D000E584FA3199C55CEE845D79DED06B4AE5CD +:1075E00051EB6F34A8582F3CB9A7B2A66A679488AC +:1075F000B7026893019DA1ACA5DC3B6F7956FBA156 +:1076000037D1E06703A094CC7E6075E7DE3B44335E +:1076100050038FEEC8A4023E1479E508DE7AD3CE7B +:10762000024357BBEBD8AF799A1679BCEBFB87C8FE +:107630000EC59B7B5AED65348AE7314E70EFB6A8D4 +:107640004DDC3F07227F34C721D23426109047E516 +:1076500059CF7DDB2513FBD88D50734F3A1CCBBF20 +:10766000226FC80AC1681F768B9C98B20013391923 +:107670001FA3C8D41FEA525D4019F4BB169ED4174D +:10768000C47738B33F58B28CFB5B5FE5451355F3C5 +:10769000804AE53C3597A28E91E9D99E79F3629CA8 +:1076A0007AB55A383BA2A454129B18C9C3712A1741 +:1076B000507CF450FDA6941845345312A8137BED6A +:1076C000A3489D59FCFF3B17803633FC3284268645 +:1076D000876102542E87098E49F616BD6682848919 +:1076E000B81ECDC12464F0EFCF8E2D1F542DE36161 +:1076F00027E525ACA53526F9B2645BD3393BE1AF6C +:107700000519ED346C0EE6C9E16802EE0BB0DCA59C +:10771000F463DE2F7042C9069966597EE63C09641F +:107720003FA65A39EB306394BF0B86981DA3B8A0CF +:10773000CE0E7EB42633880E9420BFD75B76308081 +:10774000159B968DEFA4ECDF0730E6EDCE0DF950DA +:1077500034BCD9EDB96A06F778100DCC890D03E574 +:10776000008DEF7AEEE28F90D5914C90AFAF4082D2 +:107770007764434415DF87E11276BE129A1EF8AF94 +:10778000F8A716CDB73E6EF29932CEA63276D24425 +:107790008B1EF67104A94E41F65148D705EC3C7496 +:1077A0004E36CD8107E589072153ECC696B2B6EA7D +:1077B000F009CAA7C1A98FD308B304A862AB584384 +:1077C00008B90F8B0215C2F858E60D513B6D6E4E8D +:1077D0009D9FAF7F5D8D138CB0C025F3C2252DFE1C +:1077E0001F66B09C15121516BA1352EA5589A9FEE8 +:1077F000BB62CDED4FE8117E9BB7D2D249E605EDD5 +:107800009D9D57D301C82A7ED9037586AD7B3490E0 +:1078100064F5E1AF894ADA274876AA983ED864131E +:10782000CCDB7FCDAE650D72F9666DCEA42A4628FD +:10783000685A002CEC13F60003E2A2288D38E25FB0 +:10784000FE4180185025583FC10BEF9547BBAB2632 +:10785000B8A0E11A8F7A39A3F2FF2439A6D61F7394 +:10786000C96C63E7BDD3061DD6C46F50C931241758 +:1078700051EE0280E2CDA24E227A7F2ED0E2237218 +:10788000C7DB50156FD95AECFA0D765A91382E672E +:107890007F3187C8D3393E47092D20CEB731092A19 +:1078A00025B2FDDE78F719932991E72CFAD966E421 +:1078B000AB41F82832A878D8A6992837DBCC719B41 +:1078C000CD2A93E1611E0837EA7680B690B8ADCD37 +:1078D000C5EF2B78D173FE839FB9E38FB23CF4A13F +:1078E000A4561157FAE9632CB5E0F762520FB9E1DB +:1078F000014005CD279B1E3A6D9F53B5829EDFB395 +:10790000843798086722A93E2B845199EE384F504E +:10791000FC0957D71EAF9C6DAF89248B2AB45175D3 +:1079200094D6972C63862886433CB6AB986D217914 +:10793000263DC51CD0232C38CF375A57E88E98FDEA +:10794000A6FD6A36F26BF09B794F12F8FDE50A54FA +:10795000AB4929A0AB4C099A1D8C41A45320F2F3EA +:107960008DB751F6A74E89B0CC9080F3999B4256C3 +:107970008448A31F395E01379823E4482A1C4A3300 +:10798000EAF090E70B417FD22E1483CAC21A245327 +:10799000C19B6172BEC8250AFC5E85FEBA97E0AF46 +:1079A00083B5FE5279ABB6DD423772EE9361E2A346 +:1079B000D1D55BC6437C1E58396393F756675B7A13 +:1079C00049F2052BD9E4DFBC3CB437A52B376AF567 +:1079D0003ACA04DD22D2A75C09EECDAF2CC3DFD4B6 +:1079E00095212B1F1E8BECB6B81A4B982A95186B55 +:1079F000FC5333AFE05BC3AF31229CE142C97E3917 +:107A00009B1A8D7E540FCECE9553C697EE5CC54023 +:107A1000B5BB94EFA5DD47C47EB80D394B35AFFE3D +:107A2000CB1B4A597426476058DD0D0CF47C767ADE +:107A3000FA140C3E89D6E04507384ACE038AE0CFD7 +:107A40009FE0D9C389E16D0CAE7088CA2F2D48F92B +:107A50007CC81A7C5B7E4655D3813D224A805DCF2F +:107A60006F3E350DE20EF98C46E09F553D73EC7E7E +:107A700084C6AB203EE146359EF7CC24F026712328 +:107A8000E2449F9F7D19F8910117413CE297174B03 +:107A9000C9489FD430EE1E97B8343F72A22C8CF4A4 +:107AA000F075B1B7A4660001DC51ADC1B9B6792853 +:107AB000B4A817FFEA44DE3108B7507E7BD1B6CCBC +:107AC000D0598CF269BE5FAB88892DE650508CA8E6 +:107AD0000E9EFC85FE6C04B65CA3730D53A59593B6 +:107AE0005C6E816B18FAC100A6BEE8E281FD6145BB +:107AF000D495919BBE9D35339450E2787526CAF893 +:107B0000810F27EAD29DD56A3AC3583547E2F96515 +:107B1000F13DDBA51C28778F761DA2CB346E0BDEE2 +:107B2000B4F231CA924A4AF5CC41131C663D7D5CE1 +:107B3000627BBDCCF77117CA0FB6883D40DB618D03 +:107B4000F010652A7212AA2ADBE4EE1422162EA285 +:107B50009E5B0DEF161C3DD460A3F588A0340D5C30 +:107B6000F32DFE79E8343E5A781F3DBD749AA5ABDB +:107B7000BBE52AD310C403C839588766AEABEED92B +:107B80009FD44EA306058CDF55037EB9B9DC7C96E5 +:107B90001540F906CFA2434298EB48567C2202F5E5 +:107BA0002A59CC7706CB40C6E3618943312E1E7833 +:107BB000B1068E4BC2748F432E3E524DB8E5A0974E +:107BC000DB0D4FDE6E660D278AF648122C1A35CF74 +:107BD000B8C1641B2A9EB0FE61214E2D8F838CFD9F +:107BE0002281A0C7BBACCE90C96F79BF76CDFB7E9A +:107BF00020216CF4C8993DEBF337431D58EF3A8BC5 +:107C00009141AAAE3BB9A663BFEDE7CC5F047FEF1D +:107C1000A39AC41B799714D594E7DE33089C2E737E +:107C2000EC17013BEF6A1AC89EF34E1291929E6DBB +:107C3000698BE8E6F4356712B1D095D4359640BC2F +:107C4000C362CAD624BB8065060EC3DE65C42E8718 +:107C5000BDD3517824404B92929BA98C2A66799887 +:107C6000C40E0332965BAACD450610B9F05F0E55DF +:107C7000E8463214889D54C848756C0F84A77880F4 +:107C80006CC2D220C19B0694C52FC44839CEC417FC +:107C9000B391ECAF72C0DA43026961C69261AAA9DE +:107CA000A00AF64A8AB71953512B73C5DCCFB8F531 +:107CB0007100848BF3A63914C1B4064265183A6E7C +:107CC0009C0D7E88C80EE263BD48F39111C6B19D3C +:107CD0008BA70D1FB02E9C57BCABB8910F080E9A06 +:107CE0004FB82C48E35EA28746E0D7249A4A778FA4 +:107CF0006E592C5734494DEFF5900D49BDF28E5217 +:107D00001A10C3F14ADF7C76809B4868697CDA02EE +:107D1000DCCDDB497127E4FB2DAED5AA5C20CE2B50 +:107D200064110C0F7FE31FEB3CCF609A8BFD363361 +:107D30006A05266955030CCB3842EB728AE68AA0A5 +:107D4000A94905CE509D3DBC3EF326460E5AA001E2 +:107D5000EC242EB461559305687D04A1708551D53E +:107D60001398142C2E81F13980EA2F460E59314D8B +:107D7000C1D52DB5670A336A36271C6CE416EAC1F3 +:107D800066FB63B7C779DC8631F5BA7178366CA4C7 +:107D90007EA8761E5C4E0BF6A580EF9947FBDC13A0 +:107DA0004126FF96C17F805CEDB534D51977306AE6 +:107DB0003F64137F5BD60C035AF9C984B06E40D57B +:107DC000093D436A3232FFFED9903B5BD8F86C3EE6 +:107DD0004E3EF1C13D122A4AAA83EAA577AB821131 +:107DE00046950BB94C34CC0022A2E8E8C190135060 +:107DF0005939309F61BD3E4273703EDF4613CCDD82 +:107E0000AA9082FCC3BFBAD46D85B977BA760A73DB +:107E100055C6AB3394CD3858CD2B84297E84ED28BC +:107E20008F9C212B2D0D553CB31C1DFB4F3F21CBAF +:107E30004F0445A369B4D17F9B22B55882B1148009 +:107E4000FCCDEA94C5AAB5A04CA81760FB14B715E1 +:107E5000083BC1A4488174F78448016E8C3F181810 +:107E6000ADBB253C874C68865F5AFC672E062F58B1 +:107E700036A17814A1625350B89583B0784FFFF6BD +:107E8000059F73E35C96D5FAB50372A5E84B7EE9CE +:107E900002D3DD2D1A1335F8C9ECCE32797526657B +:107EA000636EBB6AC861DF3C49C2BA574E3A97B9A4 +:107EB0006EE4BCD7FBA2B0940BC9B9CC72A5100577 +:107EC000A9079EFB697BD3CEFAC4DBDC5F7CFF9AFB +:107ED0005C75C5FE3AFB4BC9D46501A242B30DFDEA +:107EE000320AF3DB8349B112A278344B1B41AA0555 +:107EF0002B8995CC2968834484BE87EC8214E37572 +:107F0000FA9F1A96AB9D662A5346F0BAC277346F31 +:107F1000B9AEACDF7CEDEC27D720C3A3E4D04B3265 +:107F200086C998CE25B346D29C4A29D323FBECB907 +:107F3000556854CB03FF910E6E4131449D70F06A39 +:107F4000CFA2F5A71C9F1485ACF591DEB54957CE9D +:107F5000A22DCD6E36892B3E7C728709188B3E167A +:107F60001F2638AFD77BC18C18D2ABC7EF7A16B0BB +:107F700056477AFBB6CB6991FE48A0C46B5328C51F +:107F8000F7259E8A854592C8E9D58CA4819178E130 +:107F90003150C6FD9839ACA5C74809B4996AD75F76 +:107FA0004CC3C35857F53CD4E7E6EE681263C74AA2 +:107FB000D3DF6A2E93851A32CC230022490BA5F217 +:107FC000ED07B9221D2051CE00EB0D6B09CF0C5EE1 +:107FD00014ABF133B9BF4085461792EB51F3248FB0 +:107FE00041570454B8DC60EB6C98B6EFC449BD74DB +:107FF000F605AA7305A789C1FE711D063EDFD7CA23 +:10800000D166F2A123C8AB5FB0B706CB85826847C3 +:108010004D8BA73A9672A7303550DAAFE8F07D0362 +:108020000ACDD2B1BF2EA270A26CB7CF6B93B8D4D9 +:108030009B22865017C09BD09CECE2F1FE8FB58E40 +:10804000F6464AB3E5A50132ECD86F286058427F66 +:10805000611CFEF596791A7E9D663572BBE6106747 +:1080600034D416273176C83FAD96A54943F2B20CF9 +:10807000A40C4FCEE9BF47841DACFCA45C52736FC7 +:10808000F1DBEEDBA0C15AE52EFA0112C726D2348D +:10809000B1277FFC513C6BBF9D5D474BF45332C908 +:1080A00094CFD192BA80D5BD25FC5F2E8FC5D3F574 +:1080B0000117463517C1015A8EBD9CB518EC4BB857 +:1080C0006993922A840A742C476E9058880FE7D8D7 +:1080D0005DE2F8EF33B9A6C8F5DE414E709FBEEF02 +:1080E00013296DC62004CA0FB025294EC3441A7344 +:1080F0001BCE88ED2D80F689ACD66B023E9E874B59 +:10810000FB9CE345F91EACE9F2E1AF57F3925F0D3A +:10811000CE989D870D479B2A2A66E3249564AB3B46 +:108120008F51F504BEE65FA0AD642325DCE1F80FB6 +:108130006DE537F76DF6D7690B4C5502A09A7C5E5A +:108140004137013B8CF26C9E06C2113FDB136890F5 +:10815000B65C72671027D99FFAE4D4BDA25F9B2E4C +:10816000D0491DDF44C88CD7EB2A3A0CE2151B9E80 +:1081700097E2B87D48BFACB7F4B370BF4CEB63D6A1 +:108180008F6CAF058CBC4F4C65B8C0D97988B9AA43 +:10819000513C344D1E5C66EBEA75F307CE5318A8CC +:1081A0006BED6EE4471B0C0FE47F77941023240FD4 +:1081B0004D87FDC2EBC9A7FB750B311903F8558B31 +:1081C000DD6D68BBFE63874A47C79BE52155CCE15F +:1081D000FD4B01E00B5C45B23924020C8B00A52F4E +:1081E00017929FEEDBDE0A639319DD5597ADEAB077 +:1081F00051EF88AA0920BCBF4F170C2E0745E2BFDC +:10820000F9994947E965377A247D3120C3A8B652E8 +:108210008A378023B1F39C1D7689667976E98F20B1 +:108220000FABE6F1F1F069F277E575475ECB86E2D8 +:10823000EDF38DE18FB1047F4851F8D56DB3314D29 +:10824000E0EC937E0207F18BE0BE1F2189AD28D8B8 +:10825000796B7C1F7AE278B1D1E1F95CCA3FB75201 +:108260002983E555F57D89F105A52C3D5FC4723064 +:108270007DCF9F50EAC91F42CA758CA9AC5282714A +:10828000707FCE100919982472232CD76DE5454CC8 +:108290003F931429EFDA26F1B0DAFEC99F804A1C19 +:1082A0008DE3A08663EC3E80ECDFC8C113823E0AFA +:1082B0000140CBD542E1B6F94B4CC9B7AAEFF697CE +:1082C000C930C4FCAB4D5D201DBE95530BB0BEA79D +:1082D000C71024FF8DA8CC1A6DDD673849E3ED5E29 +:1082E000CE1B8E4F6D7F1BE13BF3C5D28673885C3E +:1082F000ECE76A30BBD9BBF7CEBAAAF2406CC3D068 +:1083000070252A515CB6969E9654129D76E344F1F0 +:10831000BD0236EFC3D2425F1A7970B1B250D812A3 +:10832000ACFE00D88A33AF65493A65CC73394FF457 +:10833000937BB3643F629C53D38DD2626F6D46983A +:108340000C8E94BFC2D6A90C04AD26E1A40D35ADA8 +:1083500005B994ADFCE2CEED766E9F543A25328598 +:108360003591BC84C6F399DF9599C13BAD715CAB87 +:10837000A771105A2FC376A92215056E6872E48181 +:10838000E7E3ADFD02E1007AC4ACA219790C3AB67C +:10839000385CC2845B560E735D7B697C5C20CFC900 +:1083A000DAEC90473F73C5298651C5583E5F9894D3 +:1083B000DA0DA8579218DAD00FC361440A0C379D22 +:1083C000BDA190EBEC1BE6551D31E029C54FCF97C1 +:1083D00005F92E2DE8A0F7A8F484BA4469B3433513 +:1083E0000DD11CA08DFBBA4F37D39A89A4646DE2DE +:1083F000160E4D87ABC2F6BBFB96E010085DBE8E35 +:108400003C4605E76CFE7C8BEFEE48919A7C4A6413 +:10841000D9712AE990AD16426CC4792E0D4740FD02 +:108420007823FC49416A875DECDECB5176050EC9A5 +:108430005B2726031E616E8C36611E09986761B545 +:108440006B4F66E2DF7E95C9B46A60B1AD4F0249F9 +:10845000CBAC25D8D22EC0396A9EAC73836B064450 +:108460005782958C0B164FD6E69D025B6EB4307A20 +:10847000F2195A4A299B12292FACA6429501F1F70D +:10848000DDCA873E9D46887A33F1D31713FEDAE4BE +:1084900068B3A1D59DF66B23EB112417B6778585BC +:1084A0005082FBED0B4EBB2166C0222BDFCC752525 +:1084B00010D96DBBF779432E669F948F40156F34AA +:1084C000FCB14E05F55535296EF9B556597816B7F4 +:1084D00042B532AF9827273241AF869364EB234FE2 +:1084E000501E7861E2117582BE819EA21F07385529 +:1084F000DB8464D34329F5A1D85B06058CF218C848 +:10850000FA97E29B9D8AB94DE38439CB5B042F0532 +:1085100086CAC13008B23A2B2F0B26E2E5B144FAE5 +:10852000679C3DEE99AB25A11B641AFFD3E6CD3CB9 +:108530000C9B366F56837C8A2E6BEB7B2429C7F805 +:108540000D9E92F667FE8600A3BE632ABEFF31062B +:108550008CA30064DDFB538A127AEA24485E5964D6 +:10856000DF5EDC5DEAF42E077DA0317A46606F3E67 +:10857000C0D9EE8F493422B6DBEA0749E447F492CA +:10858000C030AA1B58AE84005C1F1F4EBB11B3AB9A +:108590002BD0BD095969A8FF982ADB1B723F84DDE7 +:1085A0004EA49DE66DD014CF9069CB2C8AC3C8161B +:1085B0008FB2A0184407B93786514BAD12C4A995A4 +:1085C00098C8300A844E3B107BA00227E541D7654E +:1085D000D093BC2841F112A2E1105032FBF7BABB94 +:1085E00037948FD7BFE1E3ED36AA25A6D400D66F26 +:1085F00070749A88152FBCC55F9B4A4B48DBFAB153 +:108600005046113CB7B4E8BE85AF65BA7B8D2926CC +:10861000181907A4F0961D5EB0371B2D97B4D3042C +:1086200016019FEF8B023BC26E66AC009CA3B04963 +:10863000B1E82A17D3ABD455C9FC727343873CC346 +:108640001B7A4D16CAF2EEE4AEAC6D1D1A2E90BA2E +:10865000DFD46BAB226CC0124B97A367E62F7C7BF9 +:10866000127EF6E6D8CFD1DDA8C8FA2943D1C9E3F6 +:1086700060A543ECB297CF0DA370FC1650656EDF7A +:10868000D13F83D26D53330839B085870AD3BEC535 +:108690001794F36102D88928436005FC7127E149EA +:1086A00075231CC0CA4BCB45B764D91AE1033053BC +:1086B000BEC18DC181EC926E7E2484DE62A9F499E4 +:1086C000E64E2F4DB2859C0893E82494166BB25465 +:1086D0001FE17C5E5C11A09CDCDFDAE471C6FFBFA9 +:1086E000EF3C0204DA021DB9DAC9C57702032F890B +:1086F000E6EB55B1BBEFE01C6C395B7927D78430D2 +:108700000B281D654B82DF428977F4C962E6EA0BCC +:10871000571D26A8A97AE6A17518D04DCE8FCA702C +:10872000380658126C7161D7F821120DD972EECE4D +:10873000BBF5D95FBF4518F416808DD4C4E654ABA1 +:10874000C7142BE6E6C06C60AE8AD0AA543AF5F4A2 +:108750006FAE2CCF3204F81896D6BC331987CB27CE +:108760004727AF15BD0C2B445B64C638073A1F255D +:1087700048115945991500BBB6815502ED0EF73ADF +:10878000AFF37721D548B68680071057AA37AD8357 +:1087900093583B507A043BFB4F403B2DB9189C2328 +:1087A000F41BBE66083F912BF2B3A1DE186207F3FB +:1087B0001B6D5C64613921AFECF6E881941B13FEFC +:1087C0003A38DF02102F24D1E3172FA6E62BDDCA9B +:1087D000DF4273A37C0AFF572FC0497CB9E4F9C973 +:1087E000FD10298C14C4D31CCB3E0B2FFE999C8CFE +:1087F000F8B4EA0D0A6A13A2F15626BC83A2D97A0C +:10880000DB1E59477086C7F187ECF921ECCBBE7DA2 +:108810002CDD094536A0478F6BC0CCDE861D30E5C8 +:1088200077F6F4960FA7F1A799137AD7033B09546B +:1088300048694311809D42E53D069A4D674324698E +:108840007D8E8FA1F789E67ADDCA07FE4D34326549 +:10885000D4B932076A834861D8CF1E7969E89A2C67 +:10886000CB98D64128B925DAADB77868988E26B569 +:108870001362AA8DB0FDD2B328AB38409D80B16998 +:108880003E33D1C831109710112D72C83FAF7F61B0 +:108890002832F50565C553D917F841F23A9A4926A9 +:1088A0008C11B9111CA4314592C88C56024FEEC6EA +:1088B000223DDB2E6D929BED752F174AC9782383DD +:1088C00023D69465BB7034BE2EEA9EBF59899D574E +:1088D0005740FD6BF01584A9F25F1AEA7247DD90EC +:1088E00000F0D834CBE98E517E735089241DF31EDD +:1088F0001554EB53D490209A67AD9384A132674FFF +:108900000ADFAA37B445E5A45D571A7F208AD5ADA2 +:1089100029ED0436599AD029020420B78AB46F0988 +:10892000580FF42EEA6F45706D2A745E218155E16F +:10893000FA6978F4A7894D4333ED7ACBA6058B4CC1 +:1089400031C04AE47CF43341825D878836C14F25CB +:1089500019CD337D9FA7BF0CEFA66003F00DC12B8F +:1089600066A4F7ABEB33AE010B656CE8D79C4049CE +:108970009ADE08FD9EC217116001836DB109088D52 +:1089800083C2FD32E6A43E5812B2DD05B511BF2BFD +:108990002D6B12C53C37152A5AC57ACE8488B1BBD7 +:1089A0004B3621160E2F294D8C335A20446F530419 +:1089B000329258AF0C7D2794DBAD9DB4B77EF5B3F2 +:1089C000101121B69FAD6935DFCDE45CF59ADD1C51 +:1089D000EF010068582C1E1DAE71464F1C1CD3A31E +:1089E0008D2044A3F9B3099A294DA89247ACC157E9 +:1089F000D7A5F1697558273DC24F596DDCAD3D23B0 +:108A0000AD4395D12AD2E847ED9A805C558FBE2FB1 +:108A1000E1EDB73EC41EA1295DA4EB17342F9CCF16 +:108A200012CC52E7AE97E44E4CB7B0127103365BEE +:108A3000EBF61F6FEDD96A381E77A4D30B11A0A7F0 +:108A4000D37E17290A9F9BBA85B41045370CCD47B2 +:108A50002EF7D5E1C56F48A0DEBF45DDEA1FCE8405 +:108A6000165FE5C8D986DB713F1F859DF7645A37CD +:108A7000FC3DF89B886AFB319BFDD84742BBB12F78 +:108A80005B63C6E1FD7444E08D72E62D603ADBC5A0 +:108A9000EAEDA462044E28DDAAE02E35D0AD574D94 +:108AA000B26AEEF436CB4DF181AB50ED089820EB75 +:108AB0007668A3B2CD443019A5FAC1E987BFB48660 +:108AC00020D39B35F713E21CF9CC30FE050B14BC08 +:108AD000D41006E79FD84FB40AEB738F9A4842B47C +:108AE000AF1A61B3F3E91D1ECE145BC635C7AAD217 +:108AF000F317608EEA78D4DBCF850B3D5F815A8215 +:108B0000C1B7CF1E8D60C495B44E070E2A6B67FCAB +:108B10003B4B60E9537D28FE931B83218A63637E70 +:108B200026848E09A9D6ED1A067DED88A82BB321DF +:108B300063D3981DF2948C477FCB9DB809C32CD882 +:108B4000275CC0C0986D2A585803D64A8637D6CFBE +:108B5000EA9CA1198253ED30EA3856A392D8EEC4AC +:108B6000C03012F8E4F11BF2920EF70E371FC8392D +:108B7000DB5C85E4D7226FAC177009FCD00E56255C +:108B8000946EE1BF27F514265C0766968D604B70E6 +:108B90005759B6F2D0145F9226162B904A85C88C8E +:108BA000C803124876055CBC08E020971AB3431B43 +:108BB000A8C633CA955DBC7583D970322523484356 +:108BC000A57B64BEAAEAC40BCBB324CD5950D90609 +:108BD0004DEA298E56538620DE83824F3F7A027DEE +:108BE000AFA5E82DF2180BC590849EA658D016D2DA +:108BF00071761B38A19A9E60EBE463BE50D9BCE845 +:108C0000D5F3E0302C16BF87BA60DD22EDFB703162 +:108C100070A5B0A9ADA83F040D402342BA57CB1DA3 +:108C2000C84741118711C555135A24C4E74995FE19 +:108C3000D55B143753B867B13808BE008330383578 +:108C4000F022467442457F0F8ACCC9D81BC67F7973 +:108C5000682659052F56F8492C12C7C9B1F57787F0 +:108C6000E749A0714F23DAE928E9F3056C1B64F3A7 +:108C7000A7C3C378D0D842CE6D1DA5EE66F47C8024 +:108C8000F6D750B5594C9C144176FD4649396F735F +:108C9000AD0D5016293E477B85209FF4CB0E8AA64A +:108CA0004A53640EF595DF227E6CCE5FBE6ABB53DD +:108CB000F4592CED907DB1D8DB3ACE6AFDE3A61BCA +:108CC000CD88AB8B39F7B11FAAEC3633C51E1660C1 +:108CD000EF23E624F0E7F8FC46A06001477E006938 +:108CE000BC4BE15623119B51B92B9702EB39729B78 +:108CF000144A6649FB07D43E26AEBB22138576088C +:108D000012EE1E54571945EC0003BC60EE31A0A4CE +:108D1000D80ADD03C4CC9EB18DB08A719AAB5AD803 +:108D20007D841F5A8815B8FD0A1D597FF29D93F264 +:108D30000D4C7DB85142CF9F755035128AEA0129FA +:108D400019847CFADD17E2D85E359A95B9D5E8E248 +:108D5000EBD2F8C6C4B5529FF614F2D886F5E8A651 +:108D60008435A72B83DC0BA057304D84AA03C9613F +:108D7000F57AD2887F9800B98C54891711C9714748 +:108D80001AE040044899FC853C11DECA6EAFE82920 +:108D90009731D61529E7C59B5BF18322E5508B41BE +:108DA0004C2FDEA6B95DB02E046069C359E73223AB +:108DB0009BD556F07CEDE5935F1C82186A2D35A398 +:108DC000826052E21FF04C3180E75475974D8E5708 +:108DD0000EF0709015991F1E9EC1F38B2344FFEC7B +:108DE0007330559609151ABA843A2C8D4304A7920C +:108DF00086BD3FC0E80003BE8C8AEE58309F80AB32 +:108E0000042FF6FEE97F9CD56570F22A556FBABB38 +:108E1000E6FAB8D65556542E6BC249C294F3A7F65B +:108E20001E63FB5C06DB548FD3236C158F4931DB4B +:108E3000208E60F277061FA037973D6FF0FA54BB83 +:108E400025E6F79F479F8D9C2D697ECE18E022C6B0 +:108E50000A5BF1A119538B0948D9D94D647BDBE03A +:108E600023126ECDDB388905D471441742BBFEC492 +:108E7000D894629CE693916C01ADDD3253874C73BC +:108E80002B7499875446B799CF6138045628A57337 +:108E9000EAF1E3E80409C318173260FF1439B9E4B2 +:108EA000C3F628773359E2C6B66659A0B2ECF20190 +:108EB000772A20C5E40CD952BAE11D95722970EDCC +:108EC000EC9F2D9E2691B63EBEC0486D411A34BE21 +:108ED000906C494BE58519DEC02C7CDA3503D57FD3 +:108EE0002967369182D22F7C831764F3D7F803A4C5 +:108EF0003CE17E679115E9BEC205A686635CA1715F +:108F0000A0CBAD58CAC3ACE47C89761B6A1EFCDBDF +:108F1000F827C56CB69D210E40B1622A8287217C5C +:108F20002E039A67B94278292E5A6F5E6591FF6BBE +:108F3000C57451A65CA657FECD11DF96B7DBD44BA6 +:108F400003BE9D527538110F9D4EB7482B2497B61E +:108F5000E036F4BC8BB34B09222B4047222822A7D2 +:108F6000C9C439022DF833CA7E663F052D06407EFE +:108F7000ADCD227142BB9D923471AC0799982B3DC7 +:108F8000F08A65A4F44F450BC7ABD8DD2C3FDB73EB +:108F9000D5FF891D25B468FF19276EE86D27ACA899 +:108FA000BFF302A81585D9B64A6C15BF55CC078406 +:108FB00021371673E24903421E49B46339305DC359 +:108FC000A48549B70D132F51FB0FE76D0DA7C411F1 +:108FD000E3A96E7C6BC16F99282DB7C821BD42E90A +:108FE0006674C99935DF051F4B3D8DB2DD59AA76F0 +:108FF000517A941C7580328FE9F737A360F44C7274 +:109000006CA8D1F519F964BE2DABC12D0E16ACC9F3 +:10901000DE896A76139CE4AABACB57CB629DB5A9C8 +:10902000DC4D2862DE543FEC2D7E0948F3810A3A7C +:109030008D6F4EF0E134048AA107CF3DE7795D04DE +:10904000A55A3DD6AF5BC1D3BB58E48F3D12DB4E72 +:10905000A897335D0FAFE0B05480282455442D33DA +:1090600087DBF40AAF6A1F7EC0AFF565CE73A73AFF +:10907000569BA94666DADC68CC3B6A419C3FD22706 +:109080006B1206831F60ECE5931B3EFE1F83E7A077 +:109090001E359D1F5F31590D0B331ECE4BEFCE4C4D +:1090A0000BAA6E5C9378BBCBD3E6A3173F4B3F3440 +:1090B0009E350D0D724B925156A1185F8C182629C2 +:1090C00019E2ECA1C89A39A14DA6818FD1C5D2ACC5 +:1090D0006D43BBDFEB7154DB8C7E027A123E810A5A +:1090E00023BE89B68ED728DA9B04E4E02DDEB5F9DD +:1090F0006EFB4F5C1CA364BA4F007C42673126664E +:10910000EAC6E396A1F387154681CEE9D64E369B93 +:10911000507AB224C34E3071CAF9A4E468367D9502 +:10912000402EF2D3466FAAC45D7D2CEF0B1F143482 +:109130008FC0DE6B63BAB531FB1CC6229F1079CAA3 +:1091400031E6D1EAEE8DB8A00BAF5875BB25E49897 +:10915000A06787F42A3292999DE30D71579FCFAC97 +:109160006A237877416460ACC5FF442CF792A5F080 +:1091700037914566853B01E813CDEDA95C219AE264 +:109180003C0AED25B81F4BFA3284B81C7B69F2C942 +:109190002FA75AF4FE790446CEC18949460E4FAE38 +:1091A000F8B4B75B431981FE2E330DCCAB7E304B48 +:1091B000D5FC53146F0F97B97C259C7A71FDD3B4FD +:1091C00069738296C08EA863EA20B4282C03A0326B +:1091D0009275EC97263AF99A7D9DF1D49012332A34 +:1091E000FEA118F0430B853BE39C2FE944F551DECB +:1091F00009BEC515335DC436EABDA26D9ED143CC10 +:109200009DF72AEDE9F4436B1C7DE3DE5438A200A0 +:10921000BB8E69684DF5E3F20C404BFA300A3D2AEB +:109220005F84BC05C58F8A2408E3441EB661CC2D3B +:109230004CB058DB1B1A895C88C33B63AA0148A663 +:1092400010C7E0EC57405CB9FC35BE41B992085CF0 +:109250007BEA2502DAEA155170E6F157BF175EFE88 +:10926000B2FB81B83C82D443CE9792473FCB2A864B +:1092700040172676F803895B464653EE02AB8DCE47 +:10928000D070B0069A35C51DE0297544A49AC7D19F +:10929000F5845F36A588B9A8704814269B5D93961F +:1092A00054BA62ABDE15EF1B5CE14CF26718B353A6 +:1092B000D944C3919764C478C36319509C3FA4CA2E +:1092C000A61D2C3559CADF88C86D0B8E1F4E91C460 +:1092D000FA8D125CF9CC6C4A1F22DC81A8C7395385 +:1092E000FAB43E221F9EF049BEEC91DC14BA0CACDD +:1092F0004BCCED31D45FF2173156C878D996923FF6 +:109300005D7109F1DA5403067CBBB9616DE7396E12 +:10931000DBAFE89E13B71BA1D6CB364D87936871A0 +:1093200083877FA07C2E9D27172229417AE08B30EE +:109330003B2B46A3E87B676B2DC9050964019A287E +:10934000CC94FA8E33377177F2A697F4BE6CC88945 +:10935000DA85FC540A5FB873B7316C93A6538DD885 +:109360007497D3A8B788BE1A4667CACEFBD3B6F5A2 +:10937000283D220A108603C427C4752E6D67634AF0 +:10938000CE7D641C9B9492C38ECA9D21661F7F2D47 +:10939000BCA04578603345441EF52579DE2E09D200 +:1093A00008B6440DB021A1DA4B4CDC73119A5B1066 +:1093B000F6048C6E6C10E901DEC2AD33AE4087E975 +:1093C000EA752DEF72CF1E93BCE98295A92067A3A1 +:1093D000222F85FFBEF61E17C671B873F7E76F9F81 +:1093E0000416DC550355D1009E49C09F8B1CBEEB73 +:1093F0001C58B8A1EDF4639A6A41E2E81BE62E1905 +:109400002CFD51898EE54B5041A475DF2E675763C3 +:10941000CD9C8B3AA3F76115A2480087DCA166B802 +:10942000C557D18C3FA35B52FDB3F2A4E278F67B23 +:10943000E428FE43BE22F84F6CDC907C1B42996B03 +:109440003D384B56515D5414285C19A8EBD66E1765 +:1094500066AD768F9FB7B02A5A5F5308420C87D803 +:10946000A977C9A91929ED1760E18488E7932584B4 +:1094700045F0820A68D9337C67F6FA6635E5DBEF9A +:10948000B72A32396CB66DE80FFA458D5F039C46FA +:10949000F8D70CB5FAA8A0C608BE6F5826BFC20BF5 +:1094A000901F82D97001BFEB835F569CCA02AF3A0E +:1094B000C311FBED7E80A0E491FAA45D26FC51115E +:1094C000F92D5CB4052EFDA6EC8663FABBA4D86B1F +:1094D0007347C845FC9889B657960886998EB28915 +:1094E00071AC77484E891CFF80B583CE946A844462 +:1094F00096D159D61CE74915449B020E0438D26315 +:10950000E2C477C2FE192CA5128F4B5A0F84EAAC25 +:10951000234594D708B07CF77659813CFC80A14C58 +:10952000B364C3086B4D8E6920073972059892D3D6 +:1095300047EFC975B1B7446459D9B020B720B9EE27 +:10954000D3F4C2888320FECBF2D4452857A11CF265 +:109550005ADF2AC57B8550135825FCFFD39DCD814A +:1095600098695F39017EFFFAEB1844A63EF3DF5499 +:109570001D059D0893FD085C9B40C6988C0B1EBA88 +:10958000BF72461E900AC09F66CA2F73B12983CF4F +:1095900090788E1D72F9A3BFC3CFF2D80442C444A1 +:1095A00054B995CF69DD509D496E9411FAB4638723 +:1095B00038D893CF9A4BD202D01ABBC4A50F7610DD +:1095C0003ACEBC72DBA66E3D3C04B5D8AEF0E09E50 +:1095D000853620E4C4C75598A167086C430F5C43E7 +:1095E000C4535F69D311A1949AB3D554894EE24014 +:1095F000E1DAD91D947281F450F601BDF2779DDF56 +:109600000E6335021FE8C6F9BE5C0FFCEFCA5300BB +:1096100059466F051C9F5BBE66C18E90E1D70B302B +:109620009C2E5F45A6EFFB94298309CCBC341E8396 +:109630000BA0F656CE6B3C27CA2ECCED65E488E233 +:10964000E4323F52FBCE14D1828F14FB01502F38ED +:109650009BED76D1D1390B8053A6984BFD2CE4EECF +:10966000442E5BF6A1AAE22ED56E4BD8E3319BA91E +:109670008378F69551B64BB2228774EA78D6118A70 +:10968000B9D36EA2583D660F8C6B509E09B022E68E +:10969000BC6962D8C35E9EF589846FEF6A41E9E1D7 +:1096A0000BFC0BB7BE4E35963105CA77C0E3EE4BC7 +:1096B0008EEC50781C27ADAC074E9F21AA06C39FA5 +:1096C000F314226407C66951585D50016C4DA9A17D +:1096D000CAD1719BD9E185FEFEBDE46BE9C4CEB56C +:1096E000C2D92DCCD602F8E959682B440C6081D739 +:1096F000C682AFC8399AFB13733E6AC56DCF1CDFB3 +:10970000260ABBBDAFBB1351515AA4A1D4D896F6BB +:1097100080A408D8BC3C56A19B82C3594798DAC0A4 +:1097200014E00EACC35B03B19061848FA08E87E917 +:1097300056303D9A9E666ED7783A7FCACD5F0082DA +:10974000C7B7E3BDCD597F3C362C9ECB078E78330F +:10975000FFA5B4AA2F66094BC017179E8D4BF4B610 +:1097600050148FC6002BE7DDBE860220101B8C0F25 +:109770002DB885CFF1C4526C63BB85E60BDEA63BEA +:10978000F5E3AFD2A2645F82FB185E2717D304A271 +:10979000B38DCA3DBA6E1BED96753A780E694C2EA4 +:1097A000BA7CEF0024267BB4F1F9A751C41442BE61 +:1097B0002084EE59153599C85B1B44E05DD32A8A95 +:1097C00099831BADEE9E34D7C4AF47ED0E6A9BB7AD +:1097D000CF0B8EA2D90DFA6EF59B7E04B370D8968E +:1097E000994F7CD2E4A369408E8F4723FAD6C021DB +:1097F00071EC60D91FF7594E387B352270304C2BF5 +:109800003F9216A75AA7555F4A1F068EC2479C2E45 +:1098100021C7DB55DAC8DC5BCA719A2A83EF4B7C1F +:109820006A5B5648C5A5E1DD11C98D5875F1010780 +:109830005C2AE1C57A08030FA96D4662F72C35CE84 +:109840008BEE8ED2C41BE47BC3715530C800AA03D3 +:10985000A8E09825E097C2931CAE3794EE53173ECC +:109860002540F9CA06463C527F3872B6D79E0F098A +:10987000020248F9E6FE04C9F123745D63EA32BFCF +:1098800095B06CA3534655DE46979DB904B4AD1E02 +:10989000794A3AAE3F4B2097BD6AA9FDB4A508525C +:1098A000D3D7CE1C3C3F9405C8FD03B2F8CA1DF7C0 +:1098B000E689AFAA53194012B324F4EC3F825E4903 +:1098C000E631415F84B97C467E414610EFAFECC87B +:1098D000D21835043A91C61C15C8B79065589D89B1 +:1098E000627E4C914533771BD25834E38552FBB0EE +:1098F000CE40B6133B8ACBB2A6763241206FE7A2A8 +:10990000413F6D869FE936C91BC2E6E5D6936DE6F9 +:10991000E0F34F9B2516E7CD894E5DF309E8A0449F +:10992000D8F8A0DA17ECB475DD493B057AFE3D2680 +:109930009065A9E8F0F2789BF3B26FC7E1538669AE +:10994000AE72A88891FFA4D2A59F53DEB44C583FB5 +:10995000F7D408BAC6C354912465E5AC3D8E33FEF6 +:109960003F694B9600C9E50682FBADBAE671D1FAB4 +:10997000A400C8B206433C8ECF770A1D1EF2B4C2C3 +:1099800006F160C70C12F03D42DFECD0277186CEA5 +:109990000905AA0805B6933718E7D036B1F266CEA6 +:1099A000F67D334B2B49E6B247870EFD378EEC85AB +:1099B00087E0D43521E6C21148F0A9A6312FDA514B +:1099C000DAC55B72831542B66307A72784F286A2C5 +:1099D000A252A05EA9075949F2C56AD1F646A12F45 +:1099E000C1E7D8993417F45EFF4B657A73BB1B0946 +:1099F000A78CD1C2D3755411425BBEAE52BFD9F809 +:109A0000CAEA1358B93E5707A642B894E6881C8C98 +:109A100051C171C73EE4EB3FBE1E42E2999AFA6B18 +:109A2000C1D3D7BD92CAD77F3F90B301539866C3C5 +:109A3000365D02DC8AB25567F75FEF1C7E462C0666 +:109A40006EBA6644C033ECC31AFCAB97456499E820 +:109A5000B579AF797BD2B2DB1E56D4FBCC5CFC9BD4 +:109A6000F57FD785BC69EC9C8619FA564D4073B2D8 +:109A7000663C03EED6714F0DF466A10C5A9B13623F +:109A8000E1FCC16C6C68C54E2678C16994E5EF3F76 +:109A90000165870ECA5936B5F9DCA2AA88B2CBA1F6 +:109AA0006660D6A99DD367E4D211E78FF91B62D413 +:109AB0006020FD4D2AF0DAE473212DC109251B2C0D +:109AC00039932116DA12762C52891BF53E8BCA2760 +:109AD000FA067BD248F1EA16763663E6A98F0020B3 +:109AE000D6B7A905C2A66EEC5572010E638C0DBBEC +:109AF000F0DE57C992EA5C7A25380C6022C382EF07 +:109B0000DDA4A20CF42EF25513DEC96269955C8FB8 +:109B1000FC16DAB0DC43A6729A914B47C8BF48C521 +:109B2000CAF0445953F3004D81A0863501EFCBBDF7 +:109B3000E643BE87E142E3867F645FBA6A3F84FA08 +:109B4000712148B02D1B97EAAA37957AE96E445CDB +:109B500028BA3614D6A5A5D168835E4333A95DD44F +:109B600043386A435A63FAF6B6073944A2FF3A66A5 +:109B70002F62BE761E576110AB515C557155623134 +:109B800027E59FD0661E206F0FF55ACFF7CFC5008F +:109B9000F85427F6187D10A8164B80C37650425310 +:109BA000DB2163F525EE70B5B71F1573ED50DCCBE7 +:109BB000A00E6F0503B95D8E62FBC783BF9EE918D7 +:109BC000BAE34E4FB4AB9897B35ACCB6D43389832B +:109BD0002FA3CE9D77AF56B4AC2B9F01372F41B644 +:109BE000C77DC5602FA7D62B8E428FB8519D509E42 +:109BF0008B46DE0C2857AD64F439F72DE07963818C +:109C0000E8CCBB161EA5B9D6CAF533ECDDCAADDC6F +:109C1000EE587088F6667370CF7B5CAF4671AFB359 +:109C20009F6C0A3F20396B266C5A9D02483D64A602 +:109C3000E44AA3E1F560CD910F02887D0C13B52EA7 +:109C4000FFB87A9208D34DF09645464C963087F887 +:109C5000272A07ADE43ABA7C937439415966050D59 +:109C60002BD9664F2ADC7A6A5F917180ED23636C91 +:109C700088C925A308F2E714F9617F79E540A3E0DC +:109C8000C9C9B69FF63A6BCC4CDCA9DB2285CC5A0D +:109C900005FFEEC29AE4602C76D2730B340C0C6D87 +:109CA00057F7DF8D2489767AA30DF1019574CE954F +:109CB000FD13D4122D9B9A4F4FDBC1B4ACFD9239EA +:109CC000B7A3945A9CFDF9F3CE72AFAD3C620D7709 +:109CD000EBDC61A887AD3E84AF1ECE1B9410DE1670 +:109CE0004878C9BEABF9FB7B68D545D7808CE8DBEB +:109CF00070D259C1641EF74C5CBD950EE45B2C7AA2 +:109D00009C9B2FFD45FBD2E463A4CA84E03D9B19D4 +:109D1000641140A1D3080A0DBD58A9A043657C3445 +:109D2000C49F7CE3F530117DB8EC66AF4885B898E8 +:109D30000B35D134C050F0B865C2865E38A0F177DB +:109D4000D835341F3061081A40C1DF96EDC9A3072A +:109D500018354882F6CE7913BBF4347B79446754C6 +:109D6000C087FADF1C274905E86F56AC262AEC6449 +:109D70007A8EBC98FB8FC56B3EBEF5C589256C52AB +:109D8000462DFACC9BCBF6FC8370F1745B482DB268 +:109D9000728FCE97B5F3FA74C119E8651C35A033FC +:109DA0004DBED679A05465FC25521E69675998733B +:109DB0004B068D4C3A6208C9AC5E8E63863AAAB9EE +:109DC000CD6A87026E45000763B65FC153F9231E53 +:109DD000CBE78F458AFDD89F01F40E477F4A89A0C3 +:109DE00029E4ED61006F62D009BB8860993BFD01F9 +:109DF000C929945A8D8EBB710E62F662E1F02DA9CD +:109E0000A7979284B4F366132A69C65C8E9FD60224 +:109E100040D1C3A5B0883967EC6468797D58B147F3 +:109E2000D6ACAD9DB3D0C8662E17E1CD8DC166808E +:109E3000ED99E6A12474F51E504684CA907F636CA8 +:109E40000C818446BD63026D3432148B16A4BC00B1 +:109E5000CE85251460403F1B5EC0CE15F852C45419 +:109E60002620B3CFF1355AC0E45F60D71E759DA49C +:109E70009977113639127B3D527B93FAA8B52C6243 +:109E8000F3A0E402B31EBEF1B1F44DC5288A5EA36F +:109E90009AA62CE448BB3DDA5FB1BAE959A68B6AB1 +:109EA00055FB9A0384EFE09D9884D60C2D2231FD5A +:109EB00051F241251B51A95A967B65F51DC37E7A47 +:109EC000DEC45D29D498007E2D9672D024896387E4 +:109ED000D42A4998BF3E6E85AE0AE42011D84EEBD5 +:109EE0000099ACCEE9781A8AD2848E4A8DBC96ADA0 +:109EF0002B539A9620448C5A9F7E4D45AA2EAFDF55 +:109F0000A865A0B7B0DCC86A3E564786207BDE084D +:109F100016B4CF854CB9CBE3C5D80FFA9C4C887DDD +:109F20002F07722277CEC6873AC723F96D17D9ADAE +:109F300077B5A5CA9E2CBFD0A299693BCEC01A188E +:109F4000AAC7B0DB49FE8E082DEFF30AE4694F8BF8 +:109F5000D00DBF4F03903952D5635403E0C598AE7E +:109F600008E9C977B9A7B71E972D007E4B720393F6 +:109F7000BC29C64B1226CE6C9AA0CEE943961D573B +:109F8000B8F2562C3316A13DBB73CBDC973ACE47C3 +:109F9000B81A5CAEB34C70C0BFCDA89641558902CB +:109FA0000C34024E5554AECC7C42688722E368D50F +:109FB000C3BB91F51E92E9A2A5B72BCD9DB8C28A6D +:109FC00007D1E7F18E5CCBC7C884F2F900A8FC7119 +:109FD000E1DED2E29B94E7650B0485D4A69148822A +:109FE0000EB56E4194C1818764C966118A49BF0E5E +:109FF000478781C6B39C372F3E4A0850ADDAD681D9 +:10A000004B738E11A7CA1CD09758BC8CB6209F8268 +:10A01000D497F0F1FCB443905D1CE13AC04F22EFBD +:10A0200027CB694B96C495B093F3B1622C7B948790 +:10A03000BBD73C99BB605DC7FB76B701125809E7F7 +:10A040009B85AB516C9DDFCED1E5FDD7CF960D47FB +:10A050008B1B382032E23010F443F06091B7253C7E +:10A06000E1C074C1C7D61EA706F104CED7D7873783 +:10A0700001608CB63F99D3121BB44B3327A9888457 +:10A080005FAADAC72054243A4E00A7A496C4B61497 +:10A09000D2FBAF0B3DE2F75C9BCAA5F5037C0B6CD2 +:10A0A00089DF5C50D4EA9CC06758A71AD58E826DB0 +:10A0B000F20B99916C655567CC55291B028BB88DB5 +:10A0C000F425593B1C5E101540BD0FB2366448554F +:10A0D0009F7D75977F8142409B57C1DFCA431F8D8B +:10A0E000A4C304C0BBD179D189B2223E01BF4C8345 +:10A0F00027784FF4BD3875DCA89781822A444A5EE0 +:10A100006F979F1BC1024A7F11F038EEEEEB4F2B89 +:10A110004552890DB3801EF70E6E178A6B6EDDA255 +:10A12000BCFDD4AB70A6B0AE6CDFB6C89D8501BCDB +:10A13000C14AAA2394F9BB4CE923A05C1E2427C47E +:10A14000C8E285A34FD97D91822AAD47B6340A650E +:10A15000FCC82E2EC8A2A3030CB462D0720257848E +:10A16000483FC4B0C167EB46A32962099C1F30DE9B +:10A170004D69D9BBD929C1BA01E65D9963F5DF9B69 +:10A180009714762E13C6DFB51B317D433B123BEF90 +:10A190003B9608F864CC55090417541058511B36E7 +:10A1A0007F8F7A27C577BF1E48FDE2513F113024CB +:10A1B000C2BF81AA0C9EC40D76F7E105D813D57EE7 +:10A1C000AA70E9981B79CB78F62ED46B7F1A31A54B +:10A1D000BEB01B30C69DA3B5F7A89523783D87B6C2 +:10A1E000425CFBD7A8FA66310447B0B06416BE5B88 +:10A1F000B230873350705F4B7FDB7DBA038A675D77 +:10A2000075A52D1F4C1EB090153FE45D53B74C1043 +:10A21000DB35183AEAF9CDD3956D3811B74B47467F +:10A22000B84DAF849A5A715EE6974023A6F8D138AC +:10A230009B6155D046FFE71E5DBD46F3512D6D472E +:10A24000507CF29C8EE8FD6BE9C00F2B479BFDE331 +:10A25000A707BF321F5E677AC77D64E0BBDC3D782D +:10A260002D5B1E8D810A4629359F6F520F6679B985 +:10A27000A1B2589969FDC69C530443DD239F6B1816 +:10A280006B144F67CC86E3B20DECD4644197C76A78 +:10A29000B4FC09F63D378C04C43E3143E321A38D61 +:10A2A000C7EF9EBD52FF8CC7BAB5D20CD98437C751 +:10A2B000F6681B5DEEE3A20F4E574E763746052A31 +:10A2C0000C7973CDB7D88F6FF8D4164165F26C74E2 +:10A2D000DAC2A70D31BF0E84B16C86C51089751E18 +:10A2E000B4390598CFF6D3902AB49F1ABDF67C4FA7 +:10A2F0000C34C3847B9428A9E3CDE236A6A4266659 +:10A30000D04413944D47DD15BB0779BBEA72B7946F +:10A310002A33089E03B3F8340EB44348D9E2F02838 +:10A32000B76E7962713F2AA84D692AB5A426A38722 +:10A33000D7D40D3874FA6BF93EF5E8CF796438C498 +:10A3400001897A26194CBBDCBE1112E089163C57F4 +:10A350001BBB5D696636184683DFD3B3B8FAC6ED1A +:10A36000553C770DEE1C15513CCA1CAE9E5FCAE2EF +:10A3700007585BD974081D8FBC48C19C15DF3CC9C8 +:10A380005242FD2FDDAB8C972D0C69E968271C2B01 +:10A390005DD9AAFB1B59622B44F7451D8F7B36B252 +:10A3A0008499DA9724AC91B91BE3F2A5F09C583656 +:10A3B00091E6EB97236C5C0DEB5ED52D40ADFFAEC7 +:10A3C000CC265B21DCCE4A6EEC3BA0AFBD9F1AFFD2 +:10A3D000B13CBBA5C8E07C1DA014737EE8E894A83E +:10A3E000CF3E908F8D56C45E0DF13981B1AF5DC007 +:10A3F0000364680CD92C8072E83651F329BBDA91DA +:10A40000ABDA6F87AF364FBCFD9FF64287C5A22DF2 +:10A41000700BA95B504FDE75145A4389034FEFFE52 +:10A42000C55FCA3FF0FBECABF91A234E8144777F3E +:10A430007A2DEE6AB2398017C98D61C5B0AE41344C +:10A44000751D67602C0F9746DE165542D3FDFE98AA +:10A45000AB361E097178E23CD8D597A78B3FAC0884 +:10A460004D0BC6E2B1FAE1D85CEA07B7E7528510B6 +:10A47000EAA19D5E846E2A07C34D9BC053BF5079ED +:10A480009763565865C28509A7ADEEB2C4F70DB7FC +:10A49000878C275994C6F6107BB9AF72B4F51F6D3F +:10A4A000BE99E00B76937E5E558B1EDDB65D9E57A2 +:10A4B0004B51AC43F5B61E7D101270AF8D1BBFDA49 +:10A4C000829D939901A24B5150E7599F14E027793F +:10A4D00095C0C093C279F0EDDF30132D8B68F4A6E0 +:10A4E00092429220EE1258E72CA928D41DD42705B9 +:10A4F00042BCEC004BE20A733CA28AD9EE4B6E756B +:10A500006563A98153EAA4F0859845A98AEA202EBB +:10A51000B9EA1C1ECE485E4FBBCF93001C9B4CB2C9 +:10A5200012412BFE3265E5B297ED85E055630721B8 +:10A53000B1216D03DF94EC9AD236FF3B7F3614577E +:10A54000209E1F28FD372C482B19D539206B1889E0 +:10A550002EF8DEA4680A65029A824AF9072B71690F +:10A560009894D7DB2D84057A6CA8BF94A55BAE7E4A +:10A57000E9E6B2F962C71B70B6AD251A352760014E +:10A580000250A64140A044CBD63A9F035CC55E2D45 +:10A5900054339027C8E9528539E4A87A6B2E8C236E +:10A5A0008F4F9D37CB1C2ADB1F3DF5D178114D090C +:10A5B00033DBF66DA47275DA4129F13D74C252ACF9 +:10A5C000B5F18F20A6664AF976F149AEFB0AC87E3E +:10A5D000B25EF586F6AA628145C5E1946C1964B352 +:10A5E000A2B80B8D91FD05FC898AF786013973DFCE +:10A5F000203EE3458867218134804E625BFFFEFF89 +:10A600007AE0360CBD9F22E04A9778F0A6F500006C +:10A610009241FC7154F7C820BA676640BC29AEE489 +:10A62000536635AC1AF06C35B96E389E765DF546DA +:10A6300040B4660E3A10BDC4BF1B51CD22D3F3DD2A +:10A64000871D8E282A8902DE9B96A5167F80A1236E +:10A650000A4B07F8525E3811BBFE35AE7A25D1336E +:10A66000B515AD51167A9F3F971E6DCB2BA37E0378 +:10A67000D3D70CF4A617A23468C9AB314C8870A6A6 +:10A68000A05D70FA74554944735650A707E5884792 +:10A690005FE57DA2A0D920259CD48CC3197136A07A +:10A6A000387FAFC2E94470819141329FB33D6BB4B2 +:10A6B0009D644BE12E5F07A66A7732BE8AC595D2AC +:10A6C0004A58C33BEB21B8A38108F22D6D4E0C8D87 +:10A6D000D35C3ECECC1DE45F0E4838C70BF0B5739B +:10A6E00065F1C13A83E5B1A05A15EEA3D4B03F5F3E +:10A6F000844F418E6A1962DB6BD44AD8A7FEE316F9 +:10A700007A5B3EE7BC22340B39007FF7A6EB481397 +:10A710001612C19D583F7BC5D07FBACFE4B13E50E1 +:10A72000C066DE1B6AA01DA993D0252C325FE69778 +:10A7300078700066C7FD6D5330FDD8EDB01BD503B2 +:10A740001829155929AEB1F59F164D02C68B0DB8C3 +:10A750004CFBDEC97D8A5C630EBD60256A26C3DDC5 +:10A76000FD508452827FB1BF3619BE9ADD5FEE6C18 +:10A77000F9DD9F4FA78591EED8E2FA228AB2A66151 +:10A780001E47628ED97BF36C72416504BB60E3ACFB +:10A7900050A27A8197514B1DEE9B69D4B38B088BE5 +:10A7A0005245E6D2E1EF30E4D7508F24FAC3B747E1 +:10A7B000422A717DB09D85E9963322B30CBCC03628 +:10A7C000371FC342ECC80F2F048EEE2743EF5F0103 +:10A7D000441CFE839E61D466B89E52958CC5E739B1 +:10A7E000B184F59AAC7239D3D4EE16E3D35681C551 +:10A7F0006DFE0547EBE6BE63D8C3B6057657959662 +:10A8000078A8A4FC558BC424B70A0787C3950CE02D +:10A8100012F7450897233EC61C233B2E656222EEA5 +:10A820008A6C5C6D278FF5AFEA387D8150C27EA3BC +:10A8300016D7523CDF3F87C8345ECDF9A8837B8CA6 +:10A8400096C9E5BDB44EF0D6FFF522066BA2C7CB84 +:10A8500094030EEC95FBD5C6C66132B50E6409EFC4 +:10A8600066931DE1A98A42CCDF8D1031AB1E6A636D +:10A87000188D37723230C240C2A0244544956F5BB8 +:10A8800094CE3898221F9CD99CA25DB826BDADF607 +:10A89000C05F67D4B7A15059BF07421579095EE37D +:10A8A000228B7BAA9A08F43BCFB10398E92F846DE1 +:10A8B000FAF1459CF6F054DA7D741C6EB4DE9DA06E +:10A8C000E537334D04D11209519A2CC217250537AB +:10A8D00016CB31FB8BA6992488AB97767885EF86CB +:10A8E0008739F9F5765010F2EB6E4CE66FDCB24C1E +:10A8F000B1BE7F1DB56067DF235BBDC147905307C5 +:10A90000D7005EFF61DD6A3ED05E979AB27A512D24 +:10A91000243B5C827905796FE3618C3B0D22A5C7EE +:10A920009508F183F66A3F8CD7D171A8392AE7D010 +:10A9300089CE0F73112F098DB230751B998E692244 +:10A940007228C5DE4BBDCA76987B16FF6DDD7AD3C3 +:10A95000CAF1AE0AB73729FC353868E5600CEA025F +:10A9600020EE354BD8659A81F67CAD4110C47096C7 +:10A97000ACA26331D2F404DA9357972A92E922A762 +:10A98000868D6A01B8051D563E5ABB66D1DAD84994 +:10A990008E9C59506D47295D99CB9BCFF99A979E14 +:10A9A0008C95A3F3756E9427E5DA2DA0EEB9A70E6A +:10A9B00066843127AF4FDBAE43DEB431751D0261D3 +:10A9C000F514000F35501F5D3C6816B753AEFE33CB +:10A9D00032C0026C87DB4B8C91046DC231EE685D36 +:10A9E00072CCB05041FDE1E0AC93ED969DDB21AE21 +:10A9F0004BD978315D8E0BDE868C164A3F79C43D8B +:10AA00004FF5C9E1556CF66E2202A39F8F5EFFD110 +:10AA100085F890AB19778200A3A96F2BD8A868DFBF +:10AA2000B46210ED02390802A24D0EB4EBA5402E1F +:10AA3000A5E455D67CA9D978D055A201F10EB04035 +:10AA400046374AEE92C2794062AF6B2F65B75E76A9 +:10AA50002FBD7B8FCEF4D928D242C346EBD26303FD +:10AA6000A0B2971946FD9A3CD1C777C92101511967 +:10AA7000D9C8518941BB2B81C16830F3F01A24FD3C +:10AA8000D96AC7B42C3EF5C3DB57A61A9C1A792F96 +:10AA90003629AAAE2E54D41C0DB09577EDC42647A6 +:10AAA0006C21AFB83FE1551C81966CDFFE603F29F9 +:10AAB000A3437A4314DC0A2EBAD75DDFED76F7C3E1 +:10AAC00002EF8B79FCF502C7290114C534F69838DA +:10AAD0007B672B8DC00CA611A8FDA6C3709E8B7D35 +:10AAE00003CE7404A7AEEE8D384AAF3B1DAC82D5C1 +:10AAF000451F219F957B8B12F624657C6D3D44F9A3 +:10AB0000ADA584D50CB7411D89D1CA627743782B96 +:10AB1000BB0425C8F4D0ECE8ED39280EFDFB68F441 +:10AB2000AF007C50965F0F0B79DA88C1F6BDDD105F +:10AB3000DDB0BCFC80A508DAA0648A55F9EE8A6114 +:10AB4000E0822DF04EF426437CAC28A46F6D04D136 +:10AB5000F867D8DBC30FF2ED3440087658D992A9D4 +:10AB6000C8B96610ACD893A021C1B75B6942131174 +:10AB7000EB8126790799EAADE51D3EB5E51DE9E1D2 +:10AB80003ACE56414AC25775ED54F88A86D8D4BC9D +:10AB900092EBBE17945C97099F14F1274A9EE096AA +:10ABA00016655CD509FB2EDBF655659365A23CDE88 +:10ABB0003B3810DA89C0C90ADD89BFE27531CEF3AE +:10ABC000AA2092CABBE52125DEEAED5323B6D99728 +:10ABD000FFD02C1C35AD014B96F98903B9D1117109 +:10ABE0003CAC67E4A1BB1B98D889D08A4388A2B04B +:10ABF000099566365DAF7ECA01EE674A67039955CF +:10AC000047F1C9AD7E83636AFAF5C0A30B0BBE356D +:10AC1000B5CC885F1C85C875D30ACB31C1AFD718B6 +:10AC2000E0B846A31D7F8C973959FBE5673261F187 +:10AC30005C94FFD98402A848259716139FA19EBD56 +:10AC4000C1BDDD46D2479EBBDB35099996BCAF8EB0 +:10AC5000A165361189019408B81ABFDA4A841EC763 +:10AC6000E970362AAEE986781F66BBC2DE9EA2175F +:10AC70003E79090B3B75122A5DF211ADDF43D91DF8 +:10AC8000FA01749DA5A527330A11C85C40D0ABED2D +:10AC9000584EE9D8C25A653B4190837D1128A54A98 +:10ACA00092120F836C80658C4A9BC75BB017FC5C6B +:10ACB00011FA2EF72C23E0C400FC16885495AFBD82 +:10ACC00050719E0A00CFF0ACB766D6FFD0072B8E2E +:10ACD000AC140AECB0E77DF88CF4A18AA8259DCFCE +:10ACE00054A74214462976CC963B869BEB83278952 +:10ACF000DE0CDA58885E8A535A5D4532353DFEC710 +:10AD00007E6188ADBD71CB67F865EC26572CAA91A2 +:10AD10009AB45065A2969E659DB84436A81D81F6EA +:10AD2000DC51BE1923DB59A63E62E06D8C44D7DAB4 +:10AD300026549075AF83F90C95132759205C86FA39 +:10AD40003BF30173130D6885373A177B9D547A0CDA +:10AD500050C1D267FF236E1D2EFB2E631A50569DE5 +:10AD6000A18DE53CF45CC3F70C2CA9207FAB5728E0 +:10AD70008EEA8483A1DFF1FE4A229DA3ED0B334CC2 +:10AD8000DEB9FE33304F18AE1650BD2DB3A19A88F0 +:10AD9000B5C848E6FFFB6A77F46B38A879604A2E9D +:10ADA000D40E26EA2D672B780D378C987944C09203 +:10ADB000DC0ADF548B2AD916AAF63E34508BD533E1 +:10ADC00047350C116B919DA85473F14099D273D4FF +:10ADD000E1C6CF62367F9A72CC7D01D179F7183AFD +:10ADE00011864BA13A025A43AAB1F663C5D3DACC15 +:10ADF00009089EFA0B1B52D9EA136AFE6C495D12D0 +:10AE0000D53DC05178E6ECCD6E25B2531C800B27A2 +:10AE100073EA1B077D47305CCA70CBE2C63EC8149C +:10AE200090D08FE93B57C9191101A519AF5D682B67 +:10AE3000E9F39CCEE0B3A40A7BC21986E2825E08E5 +:10AE4000959CB740016EFEC5D6D2D1FB503CB8757B +:10AE5000E7B3C072BB8F12438FF8198835CEB4D0D8 +:10AE60006AA39B2E3B4648F60BBDB1E570F77C6D9F +:10AE700000A70AA0B5EC572A6281DA863177B5A817 +:10AE800031462E4F43EC015E7661BFC269599BC1CA +:10AE9000E9AF33F937A06DB8DE5F6D73E8A63952BC +:10AEA000D69A0C35A289120FF706C206CE539052DD +:10AEB00080A76E9C718FFC27D908CE3F5BB430AC65 +:10AEC0003C3530EB54D102E95242B9F98F6EC0657E +:10AED000709B27CE56A6C0203704CCF09A2BAD8AA3 +:10AEE00021A59C2DBF674EEC70D47ADC273312E687 +:10AEF000EC93F5F313F58E6EDB13D85AA608ED85A7 +:10AF00006EADCA2BB6D500B95E0ED402E595E355F9 +:10AF1000BE0BE4E603D2D131495A193394E09DA522 +:10AF2000F299EAA0912CA50E665DC724FF9C93BF01 +:10AF30003377816B21F78B1E94C0E2BAF277066BF0 +:10AF400085E737FAAF200CCD16C4DF001EAA159492 +:10AF500043DF540CFAF3E499B4AC531976B7A36702 +:10AF6000F9D1C30DABC3B30DCD118C8FEB70143180 +:10AF700007FAD0F0009905648D7FC68271F67CE5F2 +:10AF80005B0C8CDEFECDE8DAD045B491F2C4C06132 +:10AF9000EA61260A340C28685E9BD362A7D74C145A +:10AFA000EEDD9B95ADA1F16F0AA29BAD1741E2F1D9 +:10AFB00043C4C247A1388B94AACC5158EB9DFC40A6 +:10AFC0001F8884B29CD620DFEA2301EEA81F8F8D54 +:10AFD0007EADD3D7BED7E82B862415284D2C6F6ABB +:10AFE000225D0145D075DAA54DE070139DA2971C36 +:10AFF0009CF38BBF82A3030DB890ECA1A6C96C9FF4 +:10B00000B8C196E64209D6AED0A601C0F58F5EC1A2 +:10B01000268D9226FE948FF69067A5EB832E2C7DCD +:10B02000820DC5B845F7E6B9D069744F93D39981BD +:10B030002D822D02A18262CC4642C018FFA1A77DBD +:10B040006045954ACEE1653AB72183E4284EE26037 +:10B05000494170BDBEDA80B4EFE14CB454D3ADF5D4 +:10B06000179F3145EECE061B44D5AD8F8404C988A9 +:10B070004F5AD41F1DD9CB01306E14DC58DFA9A95B +:10B08000A25EB9067A1A37959525905935D8836806 +:10B09000A375EC8B79C497FFEE84F571487EF9BBFC +:10B0A000CA4606E7916CD3881D6A4080E5A524282E +:10B0B000422A28CA9A4651B7BB9A69EEE9BFB4C979 +:10B0C00013A9BAFA376FCB688DF02CB3331B2A71F2 +:10B0D00093BB2E1439FA67130AFF4C9BD0F043F64A +:10B0E000DE4DB36E6A6A4C88CC03415815825ED53A +:10B0F000D3E564429F62B43318AFC39617D2FC9372 +:10B10000C5F67C5D83ABB0627C92D864E0E068BE3B +:10B1100049163CC7059F195C2CFC061AC04F28999C +:10B120007C39269563404D01AAE6BE031AC98DCD30 +:10B1300028A726D743AB66E73BE1A1DF7ABD1B9F7B +:10B14000F76043F19D12E4FE6198829108C29F1A54 +:10B150009F82D02F63242177B6A7956399A50EFB14 +:10B1600097958DE73E7C66138F23BB2DEF6F861C72 +:10B17000899A5820BDA1FB76EA44A31E98DBA3AAB6 +:10B18000AB74E54DD60A09444F5799CD1B3E248533 +:10B19000958A046A7DBE839BD776081D3C96274B13 +:10B1A000057887447F4E5DC8473E022D4CA79EB46C +:10B1B0009907583DCF2EF0B498E0639944E94725AC +:10B1C0006CCDEC728406FCD3E30568E20E0594FFB7 +:10B1D0007F71B7ECD611705587355982950B8E6407 +:10B1E0009D1F194CE02F1B1AD74BE63AC71F1301BE +:10B1F000A34EAD4FF189D8E451AF7103C0287663F7 +:10B200001A3910B89CF9A87A5A372784DA0385517D +:10B210003043010325C664685D3564A0B4C02F4483 +:10B22000006BC689C0040EDC82A662EB83C564B2E3 +:10B23000914168548E87F3F918FAC301ECA66F9612 +:10B2400087D6D25759AEF4BBF0ED5F469A8D9395F1 +:10B2500064ECCC7D6574B419F42EE1690C645688F5 +:10B26000FE21953B00E675A6F73961CEFD9DCBE545 +:10B270002FD4AA5A46A0229D81ECE157976D203425 +:10B280006C7851F7075E5D9292939F10CE0E009FEF +:10B29000DE4BB19F05CFB9675BBF6B63E4D67346E6 +:10B2A0008E154A71C2C905814E0266169C76D21F60 +:10B2B000B6D25EB605933735A77183B3487A94F05A +:10B2C000C06DE9442F407828187EDDF49AB572CB22 +:10B2D00034A47C763F6BC5C8277E56CF9DA180DB0A +:10B2E000702A53891ABA7823CAF44D7EDF790D7714 +:10B2F000A6AAA768BFC1BD2512EE9DD8F2EF0DAB7F +:10B30000F294276310627F50E802FFAF04FD3E3ADB +:10B31000AB8BAFF10B4CDFCF32CCBEFBC23E8AF31E +:10B32000E19AE2CED56A61CD029B265DBA0FBD459A +:10B33000790DAEAE7F41525AB1BAEB806AC52E7C10 +:10B34000C7564657850961873F79956E9AFACD4B66 +:10B35000CD305B74112008F0486D91A8AF8E9C240D +:10B3600021ED63091B227F0B8B09DD207BC3CD35CB +:10B370008C6F49E5B516AC9D29E050BC2200DAA9D6 +:10B38000DA7D931FFD92D57DF902C0485D70DCCA5D +:10B390006B80410307DF592BA220D3918939B04C30 +:10B3A0007597DD3609942E7CBD495E74A848552AF0 +:10B3B000882D80848564C478491E7F69682A3D3958 +:10B3C000575ABCA92614A2CFF6CA747153DF7C1752 +:10B3D000A822FC5758450BD8954C5D12969D375FB7 +:10B3E000DE825D60C64E40A3AFB2DCC1D68F0408DA +:10B3F00058F86E2DB09E7123FBB1779E66E109F27D +:10B40000943D7CF763344691D3A6CBB2875FCE9749 +:10B410002861A4596EE777512B6927A92DE44F467F +:10B420002320B155CC74A22F0113A47C00DB062C81 +:10B430004A458DAB2778DE97E3AA0E299680CAFB92 +:10B4400004BA1E3C9E937DBADAE1213520CBA031AF +:10B45000FBD216546F683497FA76B732CF3B689DAB +:10B460009969A2DFE309F9AD4D3DB15D3888EB6222 +:10B470006B93B40931336414E8DC5A193CA32CE70C +:10B48000AF3E42C0C7C21C81ACAD1FA644CD8BA24B +:10B49000036A2CD1BE79FEE8E99BF6343993821B0E +:10B4A000233556A1931CF12157FB67EAAC9766D56B +:10B4B000D4C17F69EE3869993248EDDA0203AFED05 +:10B4C000DAA4C139C09A0520E4ED2545FAB1FE2E73 +:10B4D000A8DE7346530B1C6128DD3E396E43D03322 +:10B4E000B5511F2E2BF4373BFFF2EA74C00FC15841 +:10B4F00030B88650BB670119116D20332F6381BCB2 +:10B5000013B37F4FAB364FA11181F8F98F425B49DE +:10B51000F3F186C60B3062129336ED79FE2E8E4122 +:10B52000CE5EF751C729FA38038B9A6D50166A30F0 +:10B530002BA286B5A250DF9C3690DAA247DEA51C6E +:10B54000D43237A9DBDEF2FAA578E1AD1311441C41 +:10B550006DE1BED297E720685735B05B9FA89696FD +:10B560003BD269D7BD4699ADE6140CD6443A1A6170 +:10B57000511F5D4067E68F55394363313DA83C203C +:10B5800005665B850DE5892F30303F073A3573142A +:10B59000C9961427B493B8E93323565977591A8CAE +:10B5A000DA17010F1795C67EDA3B5BE3DC9BBF5BC6 +:10B5B000B8064E5A5C4CF13ED2A22AC08EDB4365DF +:10B5C0001CE6CAE4DCA14A77E394DA855A2494891C +:10B5D000CF2AA8ECD82B230E014E97BD5A82198B87 +:10B5E0007AFA639334E520E3CAEACC48237B988B4C +:10B5F000B04BBD4868914308EAA5179096FB49DE19 +:10B600006C93722AFA2FDC2F1485BA44E135BD976A +:10B61000CC4F6EE3E501CC6A0FCDFE75D62BE66FFD +:10B62000C12386BF266FD96AB72DC082CC934D4EF9 +:10B63000A8471D877C96B340040C227F3123EF2C52 +:10B640007EF976D5E9F9D574FB08D4258B344FF80B +:10B650002AC7673963E914F774E13F9FD47FF94E35 +:10B66000FE6A91A8EED40127C07F582BD5EB78FC59 +:10B6700099DB3D524371FDB1D5A949213401EE203A +:10B680000CFC2EAC96E3A25A5A5A624D62FA14830D +:10B6900014CDE0633AF74A6A69E874A9E3205F13BE +:10B6A0005B0913EE5997F5932A41EA2DEBFCB2EDB5 +:10B6B0001C66BA9D88938F012CC447AFAEF19FF0F2 +:10B6C000040506E988A3B47299E12C454A6821E98A +:10B6D000E29BDF21DECE3C20FB838FD1F7606E251D +:10B6E00075CBE271B314CBC8DF5581844C2A4E7FF1 +:10B6F00052A42365FCF9F4554E3DB0E1B03C28431B +:10B70000DA1C0716D30A226341AABAB325857ECB79 +:10B71000E61B359F5A03C66FB485A5AA27B871DE0C +:10B720004E3D9AD15AF5D4DD4E33B4C32D11920853 +:10B73000768C6C92566760D9834F5276144228B04B +:10B74000C83775D0AB5822F7FB860F9A0699DA28CE +:10B7500090B907138900A82A849F52FA0EED54E489 +:10B760008D2DAC0DD0F28BE4E787ECC45FAC713863 +:10B770001215122270E690C0E6CF6F654DBC178699 +:10B78000F87042D88EAA414CDC262357DBEE24A465 +:10B79000591FA88DE0CEDAB2C98405F0FE20090257 +:10B7A0009174E9D1058251BCB5F62E0436149AE3A2 +:10B7B0004EF2966CCAD49458ECD325C1DF109C3855 +:10B7C00031DDBE452B1FB799BD47CBB766B3FF5DD3 +:10B7D000576B66AEE03195A5CAE09CB685E9613944 +:10B7E0006F31B83EF3B8DD660478CC441BE1CE0D72 +:10B7F00047C7BA8145312960EA82AB01856CCCA884 +:10B8000064C96AC40A06EC79FD5B66A1B27C2FC7E5 +:10B81000A5E4F529C76C06716909270709D104E178 +:10B820000077ED01D030069B3F520290095FA18660 +:10B83000EFC349CC37B525B9F22BCC94257443D945 +:10B84000750A1343BDFC7F5C9E3497EC5F4A4EEB58 +:10B85000A78C83A41D29AE58BC7456948A36DBEF9E +:10B86000F39BA30E56A0561A6F7CA143B2FEF52798 +:10B870008CF340FF4863D16FA283C4673CA70942A1 +:10B88000CAAB8800F9080D15328A7D89A00C2C37C7 +:10B89000735C555EC19BAA595BF8ECAB26917DD9D0 +:10B8A0006946D54F9A779B2181F215B19D18766D27 +:10B8B0004EAB2DEDCA0DFEE47F99A546B7949A8D47 +:10B8C000C203F619F06960AE01A881F08749390E0C +:10B8D000A72F4D9A8BE0235ABBD2B1628C9FA2D086 +:10B8E000A8FD37268962DDB4F8233959F7FFF90836 +:10B8F000725E4DB85481FAB302E43DD322A783C3EC +:10B9000043DA15D752B31D3A28B560588B7DD86BF2 +:10B910003AFBF3660E2E95423845483BF3F12D76FF +:10B920005E9426485CD0360F27354C79360B0E8452 +:10B930006CD84192D5CDF9C74D53EA1750AFAFAC93 +:10B94000E15E6F7594414AF96D944C2F3BA70F2D22 +:10B9500096F698EFE298A71D71CFF4CE9D0FFEDF0B +:10B96000912DB85A247950C9DF350DAE02E3158701 +:10B970004374778BDD250B1FD3E54B7CEDCE5DFD4E +:10B980005875679804C444B5F299D0B5059F63070C +:10B990008B01ED9AB87D546FB1C404681269B65D2D +:10B9A000223E0B25BA4754B8C47400ABF451A5F736 +:10B9B000D7DDDC587D101162CC5637CA867117FF6F +:10B9C000AFC2355905D1D930B3407E306995F28C7C +:10B9D0008A9860DC0ADBCB1A3078BF327F72B2EB18 +:10B9E00094FF3F34E61B4E0BBB3D9FEDBB34F98803 +:10B9F000A9C1211B265F10BEEAC6B2BEB55D12D139 +:10BA0000FF40C06BA7CE2F723842A63C955958E430 +:10BA1000A328921748D3DB45D4336BFF1A3AC542AB +:10BA20007E832C9BBBE8A953D305E3B922F73FD013 +:10BA300052EA176E80F3258D32B318BD78846CAC52 +:10BA40005A8B1881648119E0369A7F4DC434B58DC4 +:10BA5000654C136F41F5ED98B007012F3CDBB49BAB +:10BA600073688E952E9A229B98B16439A4FD6AF072 +:10BA70003E56775B51D638310D3CAF00A930D147E7 +:10BA8000286542F7BF39005E7F57E7D19F48AB2654 +:10BA900087A1ECF9991C608EFD8794F2292232650A +:10BAA000EFB602953AF5AF6AE394B493519EE4E79A +:10BAB000EAEECE2D50D6FD49DB5CF2101A4399E92F +:10BAC000B23CB4D2488B0A4025EAA03987B34D5521 +:10BAD00088885CD01030A1CEED8345FA223DC10CA0 +:10BAE00023DF597E00B98FE1C174AB35C42C0C390A +:10BAF000AEDB2BAC8B6512DA0A71A49F91008DE04E +:10BB00006E049E970DF3C9372CA0277001D0DED0AC +:10BB10001438F9EB6F62F4C156FE1F9B63C8DE3B1D +:10BB2000169F2F46E35716F996A587D55E2C4B46F0 +:10BB300077F975D6D58C962B8B5C54CCBA365F9A38 +:10BB4000DEFC817FBC21384FF0B90E725F5075EF7B +:10BB500006DF931C90B91196C1634B6059614E2565 +:10BB6000EA1952893D5390323B7A55AC81D8A17C79 +:10BB7000B50B4C0D475C4F8B4CCF4C8D8B8AAB6615 +:10BB8000760FD86F33A4A7C29D518E0917446B3628 +:10BB9000B3D2018C5AEC81AB14E53649B59C5FE712 +:10BBA0009CC4D67259B83EF30619F87DD8E8C00790 +:10BBB0004129420FD21AB879C8F09F1BF9199E97F4 +:10BBC000A5E2F37EB4259B5FC678A0546AB04E8888 +:10BBD00037F7AABCF3DA60121A5E90CF5ECECC8C37 +:10BBE000FEE4A44EDB5A1BE77461D780C591E05593 +:10BBF000402710B6FF43CD810938795B41E58A249F +:10BC00003F7A16FD62B8B9E061B3C6D56F48C9C8BE +:10BC10001EE771749B265D4C53B07B474F68F63826 +:10BC200005797B54F169938D87082F8DE9077F365D +:10BC3000F340D999A3D2C1CEDBAE0901773B5E6058 +:10BC4000B6376B9FDEEF5DE5959EA7F03C665E5DC7 +:10BC5000BAEBC9BC7A7FB0C8F16087958C87672141 +:10BC600014C9B8E5504F3F9A43C6F4DD0BDCC65308 +:10BC7000AF7DB3CDA86052D67B2F9B2C0F0BAB08AA +:10BC8000067E4A02022B1AE820172B9F64555DB1ED +:10BC900025DAF3A3E26144A723DE5929B4441685CB +:10BCA000605225BAA568560900D19418C4918277CC +:10BCB00084B977E3C8A0E18FA16EB483FD3D827B98 +:10BCC000D3334EC525B9721C4EB2349FE3963099DA +:10BCD00037F9530D2D3946DCB712D758B324211448 +:10BCE000CA6E2C10F425C9B26BB6A0EB0D9E7F78FE +:10BCF0008B0FB20C8E1DC7248CB32B1C07FF37147F +:10BD0000235C04EFDB5AD33B31E7AD3B45F6780EBD +:10BD10004C7500A381D39FC98B27914596E15B4C5D +:10BD2000B00B8DB30E6CEEB98F571C7AAEF9B8D349 +:10BD3000C8EA91CF2255A278E99EB479EB2FDE7341 +:10BD4000BA41317138488A1E92B20F3BCCC0FDC94E +:10BD5000E59DC24A76417CC2F3861DC7DCC30493CD +:10BD6000DADAAB1F3C3E0A1AD76291D49030A5A014 +:10BD700094FF018A88EE92BB8A4266760F02C2B3B4 +:10BD8000824ABB4F94626191ACFE1632F6EF5A388C +:10BD90008E9BDCCA89172BF56CEC0DF4D8ADF551F0 +:10BDA000691DEF6EA2F5D70184439579F777D4E743 +:10BDB000854890C38D06555F005779029EC2AD4FEE +:10BDC000F24A74112139505430434829E9066C5B1A +:10BDD0000BBB14B0A35D798F6494A25B4C6CAE0274 +:10BDE000FF89D2020F97283D995D7C250B3DBE1C33 +:10BDF000CB1E1C31C6FDFFAD296A4A631C685F3348 +:10BE0000993601F5A7894C7039450258996F97C743 +:10BE100048EC6D59B30DEC0C6E09C94FF8F9DB8E87 +:10BE2000D452B83224B74B04925534F159B10014AE +:10BE3000BAD6DD3DA7F98177044D41BF60EC4604D9 +:10BE40001B629F3667229D9DED8F071E93B9D8A96F +:10BE5000528D9E1FB384A98B1CEEEAAC1F3F282293 +:10BE600049FD83388AFE152D9D5887A6AF83EE4E77 +:10BE7000B10064A17FF22B5E8F4EFC6DB040ECC22E +:10BE800082D414361CF0D64C150CFD80E10F12390B +:10BE9000C43C75D54756EBECEBE9C0D6B2AC682193 +:10BEA0004F98734B4612C4AD1F81722E808320833E +:10BEB0001DD568985328D19C938B0A05D96BAE0089 +:10BEC000652E1A7EFD449BDD435072824EBBEC4BC7 +:10BED0002F4A34D6599B5E03171D29446C8BD1F52C +:10BEE000D1FF9DC4F3789187E91F4BEE2CEBFBE467 +:10BEF000AA528D529DCC19B06383DF0942D3F14F12 +:10BF0000CABB2352889AD597C29BDDB9B9C8CCF277 +:10BF10009FC76AAABA1AA136EE1FF1149D9BC1846D +:10BF20009F233B91FB4586801E95263A4EA17720A4 +:10BF300096E01F7BFB536D37EFEAB29B710F0275E2 +:10BF4000A12CF675581F29DB76835345C613506420 +:10BF5000B557C0E86C9552722BDBA3172B18E8126B +:10BF60009467F5EF50F653E5D6AF8738A9424AF10A +:10BF700076A9BC9BCFF02A51E22FBA37AC3363AA23 +:10BF800082CEE0A90CFE347C9C15C36E42FF822F4A +:10BF90001891BF822A9F653AACA6C9E5F3A4D602E0 +:10BFA00021A7BC3389E6C2C9E41C7DB7BFAC9CC8DD +:10BFB0007C541C853AD2B68AC1D888E85D8021B508 +:10BFC000D7979A4A7B20298A32F718DDFEB4AE97BC +:10BFD000199837B91383F28621BDEE00CC5E5D7BE4 +:10BFE000CE1E6594EF0A7D86CDA25BA645BDEF3FD0 +:10BFF0003F6D03893893A34D3614F3B2E3F375F420 +:10C0000046DD2C0025FC7691C5FA5FFBF10E1CD2B3 +:10C010009A345A12DFA78257ADF41E76B6CD1FD8D8 +:10C02000A8ED8B9C7616BB3A6B05951EE8D1BE0E2B +:10C030009D5EE4704A379290D2B672146262DB3130 +:10C04000229D645041D1A068CFE21E5AC35FE8C36D +:10C0500082D1DCC8FD69B62A8A08BDB401E82692FF +:10C060001D765434431C5EC472473480C72569A5CD +:10C07000CDA0208E799699370B85BCD7D9D6661678 +:10C080009186302EAB955D8870F57890C8845EF906 +:10C09000BCB85498B86EB307D3BA58A6E3998C5E6F +:10C0A000E9F371F922A8AB70323C95F724298C7F13 +:10C0B000B9BD70314F8B20069ADDE8B4F805ED77F5 +:10C0C0009CB9A204F383ECE9A146A7815FD755B7D9 +:10C0D000E1C5942F703B186234069D2B37FDB8964E +:10C0E000F8728DD6079A4DABCC8757BABD46E8B4E7 +:10C0F000E0FC5004618D5312E1F9C53FA19EE4328A +:10C100006BD0EA37CC549C5D1E6BE35E7F12F93E28 +:10C1100025DB08D1DC4DDF06532C4882473C38A98B +:10C120005CF6E4CF5A9CD80A0ED879222440A5AEFA +:10C13000183746BF221AAD69D69114A3487BF0ABDD +:10C1400081644865C83E25BCD49559DE7711736873 +:10C150001C78B5E785B7B9D3FBC8644E06CEA62DCB +:10C160007BE86D368DC182862A69BB50509C70E198 +:10C170005171E51707CF99A17319774191A61F66F1 +:10C18000D4F8C31BC84EAAE44AB7E951083A8763FA +:10C19000B7B39E0791C0DF0A2AA2908AB90BB6DE18 +:10C1A000FAF752D07B9932FE9A1EA4B65CE956EBA0 +:10C1B000CAE3266BDDFA8B69DC0B017BD467A2E452 +:10C1C000E76090C3A31A4D53FBBEB15745ABCB6993 +:10C1D00040C5600C06D82CD224DF9273783AF5DF84 +:10C1E000EBB75CAB658DEFD56C469CDA97E261C826 +:10C1F0007EC4673B55535DEB2258A8BC896207E0BB +:10C20000AF0456F5E3368E4E3B9E9965AFAF3AB913 +:10C210008E741070464433152377AC1626A305CBD5 +:10C220004438355FD174CC8C63D080E287EFF1461F +:10C2300030E5858CDAA492FE92A624D8467C44A8E8 +:10C24000887533EE94BC7917A3C50F696B3538A98F +:10C25000C9DE6CF952A22ADE6B239A47340CF03007 +:10C26000B2A7936FE295B7067477DC6C0CEBC5C68A +:10C270000C2304B6834B29BBF906CC1205D74859C9 +:10C28000568C555E78935762CC158CD4C90F5DC21D +:10C2900009639A91533FF483EECB4D6A631B20ED03 +:10C2A000D893A64099320EF4177E24D199B253E167 +:10C2B000B9B6C8147D2C2343DE599C29071E6AD5C4 +:10C2C0003F6AFCA2D5092EAD506D495E7863B75226 +:10C2D0004902EEEBED95F2B0B0F4B9F2C38D6BC349 +:10C2E000C34710D9ABF30E9D847DC60476FA9070D7 +:10C2F00083CE2B7BC54DA91A2DC1780CACD093D819 +:10C30000E7D6821942A254CA892D51034E3587427D +:10C310005C86B7371FF49F9701C839E6BE23CE630A +:10C320008712CBF53877706636FE2FD5FB56FFD7D0 +:10C3300055A4A5D8947EDB7FAEE25541606628A166 +:10C340003493D72DEAEC2F8D4E7DED92E00931B676 +:10C3500084CB202322A5620CF58C2CF0AA528851A4 +:10C360001059AF7363C0DA1B9C3FC387903026E738 +:10C37000813C91C9D5CA94A2E0E8F0DBD007B22A8B +:10C3800041CEFD0E26113E2DA4F1316020A85A4168 +:10C39000865ACA723524860BC7905743E0DD711D5B +:10C3A0004D043235F0A71D86188090E3430D65AD2E +:10C3B000894BAAE4F3963B9AFC9545FC2C2AC905C7 +:10C3C000FADBF7B1636D31F0B2B6D704424E4F637A +:10C3D0005C94D43664D299EEB9621A24527D84EE0C +:10C3E00034294D009BD51F856AD6E459068B16105B +:10C3F0002F93F973B9D352F85AEB6068ADD0C7BD2B +:10C40000A3EE937B640006CAC1CEF114305752DF0D +:10C410008C1DA4361ACB0B0B762376CF4EE1C3E4EA +:10C42000EC2AD353C028FB7971333E7D5DE4B5FD22 +:10C43000148B617CB436409045A429F0000F9F61B5 +:10C44000E5739C3FD95A793722CAF4B55E4C71D551 +:10C450003E2C20ACA5DBA156D9701A30B26FC04A71 +:10C46000731E26BDEBDD8AF2FE0122519FD073EFD1 +:10C4700072EFA43CB36CB657F6AC8BDBCF6515B549 +:10C48000E36F7A7CA8F9657F78A59612617D0DB877 +:10C490006BAD0C8FF54DDC79B97E15FBFEE961F8CB +:10C4A000951E639FEBCCE58C2266BAAF333BACB1F3 +:10C4B000EFE300CD951E92631B1CDCBA05E0FA8801 +:10C4C00059AC38FF21014850BAC80E0E676081EDA3 +:10C4D0006C8DB061220EE7FACE9A9D7995F0D1521B +:10C4E000A92FEB421A5ACB6CDD7052CFBE033ABC77 +:10C4F0009AB7390B4DD9BF2D9AF635DA98BDDB3F87 +:10C500000A78CCEF21D82FE71CA77652C2C77FA3A9 +:10C51000A700FFC86675C4A9420AD5359D0F1D5AEC +:10C520009B81E1EFD0C61342EC5EE63193D8775E93 +:10C53000AE7CACD242AC40856D498B93EEF0CC9A88 +:10C54000F1F2930E43641F97C2E68E521794EF09DF +:10C550000520CBA704F29D1D5BA769E6681900576B +:10C56000AA112D8A7853FF4386B541D8449653913A +:10C57000E79573D5C305EFF8E68217471D40E1D272 +:10C58000E2B277F951803B30F194FA86E5195D48C3 +:10C59000E2ED4A7C214FA88CB41E10C7EE3C16CEAB +:10C5A00055A64930C47B9D0C4B810C3E2D67AB6278 +:10C5B000EE77467F27890E9321EE8ED9965F808B8A +:10C5C0003A42C5D4BB2228705CE331E719BC23860C +:10C5D000D105CFD777DB7D6808B8AB5B675C627548 +:10C5E000DDBE7A42687CCB52E87C07E49D058C8FE7 +:10C5F0007A35B70AEA6608C75E5AD820AF8543C4C1 +:10C6000003D708ED0C8337BED6EA48BBC921D64B09 +:10C6100008FB687EAF699D9884483E699EAAFD30FC +:10C620009A82311AD5EE17DBD2981416E926642ABD +:10C630004CBE54F6987E2E4387CE27BF7BC4ED6850 +:10C64000827FBDA873B72E205B039093F03E31BB71 +:10C65000EF0E97F79782139D8D9740B9B639C7D0E3 +:10C66000C946D4B8808CB6A4F9A2B0E1FE1D1AF276 +:10C6700013B41CD257042618AF932D9B2A8D82C762 +:10C68000A595541D7C89196DBF7B2888A5FC5F1278 +:10C69000C1B8CB492EA3BDB695ECF256794E468F64 +:10C6A000ACBCE2C615E614D539BEA759EBF1CA6B8E +:10C6B000C48F72357678E8F9C96919DD38651921B2 +:10C6C000283063C8B3B35D5AA05529D7073BEAD4D5 +:10C6D000E6C4BF5591E07FB59C58B71E2919A869DB +:10C6E000D461038C663C498E9D5274D470FC0896CC +:10C6F000C48C5724C4C4226AAEFB356DA04DE799A3 +:10C700002E3E2A882C3338DC8830745370418F26B3 +:10C71000F582917AE8FBC6D550C44D8C4977E7374E +:10C72000CE094D4559022B62D36AD400612C696A47 +:10C730006C0B55BE044AFB989ECD8C6A22F58B4843 +:10C7400079A6F9F29E52C7267A9180A0C3F5298C6A +:10C75000E3D1044AF9C782A14D4F0DCA6107906524 +:10C760000DF972226A0A4891E9222A7981A68C3F42 +:10C770008E6B1D069CE0CBDE605F82F96FD061A1FD +:10C7800040B7C4A88C7D805F7B827E8669A9ECDF80 +:10C790002ED969D3C7040B4F729652A683B284D8A0 +:10C7A000A12F0456D56F0E7A2E1D3E1DE8C9C42454 +:10C7B000DA30B0E5F63B21D4D343BB3EB88113DD7C +:10C7C0006A2638C872ADB5BF68CD60F117DAFEA928 +:10C7D0000AF91AC99729D411516BEC9EA233375527 +:10C7E000118E8AC7315EED6433DF186C2AD9390A9D +:10C7F000C998A948459A9A392B93E0E65B34994346 +:10C80000FB8FB266FB234CDDD1690A22DC3F31FB92 +:10C810005DF7691423BDD60985BE643A0399F523F3 +:10C82000FACE16E4CF0462687A37FA66C7FEDCA156 +:10C8300018EBC5675649713DDA6D7AC24EB52B4586 +:10C84000BF320D00869253EC4302FBD060586D4717 +:10C85000BF7D495D1A48A4661D178C53B2362276F7 +:10C8600009A37A324B411DC1A45585DCEDC8E9FA14 +:10C87000EF09FFAAD7EE26F6D4BE13525894D4621D +:10C8800082D777E6C0C53195910F615501AF0F1979 +:10C890001C454BF3F24C768995E36740120FCA288A +:10C8A00041DF659F2A01DF427AEC91865D042FB259 +:10C8B000030FBD904D0C08989860A30408D50F167F +:10C8C0003351A24F1BB8454C5D86137CB63B07D253 +:10C8D000BE3C3EAF05405F8CFDF9FCA61C31745C8C +:10C8E000A21EA6033886D0C9BD345CE9D96B5502B7 +:10C8F0009F8B96F7BDECE692360D73F3077E7413AB +:10C90000023244BA5CF128C8E51314E813543B75AD +:10C91000019984B1A230DB68E77B90E49B71C6404B +:10C9200054B4DE456DFB5EE10E5FBE3D68A558C0A8 +:10C93000CF05BCF0B92E7FA4C86231477691E66E70 +:10C9400087CDDC9BA6C381F0C45A050E5938DC3C68 +:10C95000A8C6A87FAFCF570BCFF15C99F8B42B0CCA +:10C96000778EFB0535D644A36F42E142200746157A +:10C97000418DAD05E0A47579834518406CE7C26D23 +:10C98000CDAD2D6FE477194DD4D8304F5C04AB6337 +:10C99000AA3CF2F5B3197CDDDF2098CB473076F066 +:10C9A0002A24FECB84BEC9C8BB7AF9622C8A492AE4 +:10C9B000A1101340F94CB20394DC44E14C773D9252 +:10C9C0009E07BEA644B70EEFA4A0090E2F8704F55C +:10C9D0004A05609A506461A94FEDB09D358BC37DC7 +:10C9E000044D05F87B92B76F752C4B7C4CDB607C5B +:10C9F000D87A3C376525F390DD31172CD3240EDC33 +:10CA00008A1FBB1F5F8252018FECC4AEF2B04D0E85 +:10CA10009802611FA9D5BC4B1675F02D4A67763A6E +:10CA20000A1C039ED22C97B44648A468CFB9834110 +:10CA300099A2735AB9B6E77CD95ACCC1F459058B7F +:10CA4000573C467C5E01B952B49AED496EEE0CDA61 +:10CA500040A37821596DFA72FF63A5F9FD1CCED76A +:10CA6000ECAD97C7517C2C2C9B3E570F4D94AA4997 +:10CA7000F3BE2EC757B677E934204732DDEAA74127 +:10CA80002E289982D54789DEBC088B0E4B7A2A6FF7 +:10CA90008A4316FA62203CE0A25BBD8DD5EF317768 +:10CAA0001A0985B990B3E42F8E7C0AD9B55507FAD7 +:10CAB000AD5BD145F948D4BB3FEE770A43287EC32E +:10CAC00070F67DF2AED114D45C591E8A78928DE94D +:10CAD0005B5E9121F875A1FF241D4F50050C71A4D8 +:10CAE000DCD5B5709F67F725C7F01FD2E81EB119D6 +:10CAF0008C6320B803807902089DF834D3E5AB98A5 +:10CB00004CB287CBE20521884F5E248B49F3E005C8 +:10CB100092CAB47110AC69776E23C5B4537E128487 +:10CB200000E29A3B2D3FAC5E19D0A17F89E0C46939 +:10CB3000C129F7A21054A4EAB8DF661D3E2E3D15A8 +:10CB40007457CC8FD081C851AB0E046FBEF3760200 +:10CB5000DD728DD37107B522ECF3055B5943224694 +:10CB6000407B7F35AD3DFA4E06E08B9BC1DC603BE0 +:10CB7000CDB669634B5D62714A258763203BB9AED0 +:10CB80009E856E01AD513261F9A09B7D63D45EB884 +:10CB900088EDE033CC0122D99AF2DA88A4CE8CF663 +:10CBA0002047522CA1B44CAD1CDE88EEDFC350648C +:10CBB000EF7306AB2293FF78730980D9B792F36EB7 +:10CBC0009715D8B3DDBE22C32C13AC61DDA1337140 +:10CBD000A1A3839937BB8BA2C2EF32E8EAD0CC7E07 +:10CBE00024FAEFD6DC7A2463760BE76AB664134A3C +:10CBF00085F1CC3DB6AE5BA3294EFD9C1D5B0EA41A +:10CC000043BD95D1E05E072EFD7CBD9F779B8813C9 +:10CC1000DA06B605623FBCC3D4706BEB7D56935009 +:10CC200093779C08AC8A2B7DDBBD6FC34F32DAA6AD +:10CC3000702577C060552624B10A07EAFE343C9976 +:10CC40002854613EE93E8D31D808754E683B52C18B +:10CC50000B9AC014CFBD3FC466612319398D680B90 +:10CC6000A2788B8F528DE51FB3E1FE0C4EBA6E5643 +:10CC700016838FA17DD64092D2446FF0AF3F8E3C99 +:10CC80003D625A3C1E589A2A2C9A022D54DCC4A9A3 +:10CC9000976B941591C462EE1ED16F81234532F0DB +:10CCA000271E590E133BFE2C8A937B2428C68D35F4 +:10CCB000504143FB758C467135818572A8DBCDA947 +:10CCC000E4F95E530F39A2D8D181A48E1FD869A090 +:10CCD00088B2EE4760B3188BB2E0BC9A5B51D2D1F8 +:10CCE00010A58F91672F0D3EB883BEF8A76DF82071 +:10CCF0005C7AA5ABEE4F003B4E90817E7A35F271A7 +:10CD00008BDD28465329790D7EF930696E2B2F80F3 +:10CD1000278B3088F453AFE1AC83E5364FE005A6AE +:10CD20009C98E7CAEA71BEC7C4263400C99B296231 +:10CD30002BD17516CB33EF0C5210B224C203DE4B4D +:10CD4000ECF4CD585A6AD5A598FA3059AC7869CF29 +:10CD5000C2ECAA155B72223143CE954EE45115C345 +:10CD6000DC9387E879004D413A89B5B66463D3B264 +:10CD7000559D918BFD6C68ECEDD9838A776E74A517 +:10CD8000F8DBF93CBBC782F25F4C94B0FF6540CB47 +:10CD9000004E4CD78DC7194CD6BAD62756EB528ABF +:10CDA0000CE89D47A2A174D22FE48A50C5495A438A +:10CDB00040F3E38A04D4972325AFA655671FF6985E +:10CDC000713313C227EE199FB304136A02CA2FAB43 +:10CDD0001DB83C28DAD7D698698F3C1D41BBE59D2C +:10CDE0007242F2E616C24F0A7610577E26DE381CD3 +:10CDF00019BB7353A7D33A7178ADF0BD3EB1C65F8E +:10CE0000FACC219A850D03DF0EF77D05730BA26E18 +:10CE1000D3CFBCFA0CC4D516358D622D2795C91B0E +:10CE20003A3A587B64C9D2C8AEF11EF36D10FB6D5F +:10CE3000E6E4936C63DE604F69BD896AEC752A781D +:10CE40007BC8CD7E9E760618A3F335F48C19FD655C +:10CE5000BE999828BEE3AA9277379797EEB400C59B +:10CE6000A9AFCB91DA61A4D89CAFECB28CE6FE718D +:10CE7000F7CB6C79B96C3C05402CCDBDD7EE1705CE +:10CE8000759F6F3C6EEC27CE9A4BAEBDAD4997A215 +:10CE90007A844E397A6D1D89577157FAA83E044B32 +:10CEA0005AE919719B8E0F7198C28101BDA67967ED +:10CEB0006EB10C6645A27C726A6978A98A4108261F +:10CEC0008457BD0C703A67653CB3D9C88FB8B13789 +:10CED0009B8ACAD2D17A2D32A7C693942D8A17BDC8 +:10CEE00015277531649BE4443FBDACD31B8CB0F572 +:10CEF000ECA08112EEFCCD8981F5E8029867A73895 +:10CF0000F251383ABD71B7C0DA845BA1C58AEF8CA3 +:10CF10009604E032E352587C00C86BD25A457B7AC3 +:10CF2000A95DEB5E6685423B62F7189C64CD34A830 +:10CF30000421EBCEE8CBD683781B939A1926D3290C +:10CF400029139412B7B1C38E97BBCF995E53BD1608 +:10CF5000A7D7E50E88F5D5DA5AD79375AFE36CDE1F +:10CF60000A196748D3831768135078FCEE230FE043 +:10CF7000F33FD907C8F7F216FBF3762C4243952905 +:10CF8000AB5E8CF9D219223313E210E03B8A965340 +:10CF900079D9C980470A8491032443F90F5F851E1C +:10CFA000D998D10F4C7E6A9585E450F57221A6EB95 +:10CFB0008A5CC038D90602F6870FADC0F91F480C4D +:10CFC00099AB971382A8DDD982C980F2A48B356F03 +:10CFD000AA7E2386AE4D9D029C271D421119E55461 +:10CFE0009AC320EDFDD6A95B9D1BAEC01E0678FB43 +:10CFF000CA410765654039D75FE571F535232436A9 +:10D000000D98833258A2824103A97ADA2A3821F78F +:10D010004AF61EB0C5271DD4B6DA93A2830779B1AC +:10D0200088980820E7C4F8E5B5C1F9FC6DDEFBA2DD +:10D0300028640396BDEC95B339D52040B420DF8435 +:10D04000E2590CE93C6987E4EA56AC3EF4E54DEE62 +:10D050004801961E140BE96E72E8427D03036E1DB3 +:10D06000FF5FD1B37734ACF2EF7BEBCA8432D04BA5 +:10D070001C87ADC18F6E3694889902F6F0684F2FE9 +:10D08000649A46B8F428D9BD0261DF113D44296D88 +:10D09000997BACCE951E95C5D630CBE9876ED63937 +:10D0A000E2C644F2EAAF7F1789E7A390104F42E04F +:10D0B000FD5494132600EB848C95E02019BB9D8AC7 +:10D0C000C24FBAE8E5C792D2494FCFAD557B27B1E1 +:10D0D000DF15EBBDEA8090313CD3F331193CF961A7 +:10D0E000B981044AA47627E3018BE13BD140536325 +:10D0F0003FEA991EC1D56EBCE594A55033663F301A +:10D100004C622DD603F7F76C2913F6DA119AE8EA88 +:10D11000008E9C6B8C0D42EDBA7A035AD7EEF15714 +:10D12000B8B08DF4FD1044049081245BAEA9D1DB2E +:10D13000CD88AF3E710DDAD2FCEF253E94E7C5B83D +:10D140003C11F7E1DA8BC522FBAE324C5BA2A47630 +:10D150005723F638857ADBFE0F3E1D52BDB7FB50D4 +:10D16000AD33F41959447A009F83F48323C13A44C0 +:10D170006A741234379A696F63EA06CBE04A22D6A2 +:10D1800095230C94E47EF41882CD0556071A821676 +:10D190005F094FD6A5B0537A8918BF420B9586B95F +:10D1A000B8E3BE6B403929E92CE208B9116A92292B +:10D1B00062574AE1935959B3868581058D61D3073A +:10D1C000F697939E7127E9DADBC34DD9AD85627A74 +:10D1D000D31DD555A7CEF650B493D058988B03EFF6 +:10D1E0003F53476C6D54507F207791F9A886043FD8 +:10D1F0004A7D30F8FBF5C1D43DC2071D0466555C7D +:10D200008CCD35EA941D4EA7984D29115098A481D4 +:10D2100014AB54EF0F1B33D82D5C6CEC9FD8DF544C +:10D22000E2B29FAB425115BD07DCB5E4D2527B9010 +:10D230009C0905D0E8BF6C0B9DDF8EEE9C6E96FDC1 +:10D240001889AA123863670B4AE5861A711B1C45B8 +:10D25000AA77340CAFAD82D24041E875FF4AA628C8 +:10D260005DB9B476A6926EB5098B04BB19041FB4E0 +:10D2700089A8F90C4E1615A0DAE5F7CC83B3947D96 +:10D28000AB5AC48B5AD0873A297BD9D3AFBFE80FAA +:10D29000FBF56387EEAB0499A52F6FD424B20D8103 +:10D2A000C8D9B7BC45FB883BAC7433CF4502DFA679 +:10D2B000E4CCBDDCB1A231B9E4FD13CF66AFB5CD8E +:10D2C0009D819A236493085DE2F1AFE55A062D052E +:10D2D00031B5D99C1FF456C1F6C9D0148B74ABAAD2 +:10D2E000DC2CE381FA89CED78F65E0A12728584F3F +:10D2F0007E13AA74D8BB665F44050586E5F43859E9 +:10D30000659D0E0F9C030CF57E37467DBD15B93F1C +:10D31000EB21FCE279B85DAC0D271CB96EBBDFA038 +:10D32000725096730D22CEA116A5B641D155D7A144 +:10D3300024ADBFD2007CD0C7645D3EED0EA00F834C +:10D340007A77AB09A18D46A65E068A8E86388A2436 +:10D35000BB819B70E0DE86D39F22FA7091D5BFFE21 +:10D3600070705ABF5443C7D77C0FA7056ADEAEFB67 +:10D370008F2DAA6210D44A607938328D11BAF373B6 +:10D38000A0639D547A18BD0A5DA14A3E27A7F9CE35 +:10D39000B20EB12C4A1DE8CF07DCDACF3687FA523D +:10D3A000B2BE15081ABC87E2E972298FE696964844 +:10D3B000CB74D96BCC81AE079E6AF8E9D900985F2F +:10D3C000CB2D6BA8E63A3AE34FC3F0E9ADA3CDAE5F +:10D3D000EE6EA8B7D6C52F0F1943372C3AC12AF9DC +:10D3E000D52A015D1F49CCD2A9D79D8D669F1854BF +:10D3F000DF9A919B15F9C0E61CDC1DA097EC9D9966 +:10D4000054F205BCA2B19A21E4E15F7616AE7170C8 +:10D41000AD22D39FCD74005DA5BADEE9EB761BFC8F +:10D42000DC625C7A1B1649955A0CE441274B0E408E +:10D430002EAF9FA8915324B944ECC5CE7436E36F48 +:10D44000BEAC9735148E3148E7185A79E260BEC6F3 +:10D4500092D6DA4ED388BF61BFEC5C0994F7FDD752 +:10D46000D838BC17F4D4A415950CC2D48BD42D0D88 +:10D47000D39ABA9BA91043B1E3C7761E029E83D903 +:10D48000BD94452C6BB7D5C5EB423CB55C812F6A8A +:10D490004E0BC1F1976474E1F76B7381175E213411 +:10D4A000A789FF505A0F42657B74E0C2326D168324 +:10D4B00018A3B4850BCABC7F5288E68AAFCF505EF2 +:10D4C0008B180099AFD7B024C8D124321AA49C0B72 +:10D4D00078138321E246B249BBD3FA67AE455D05B6 +:10D4E00076341E966064052FC427E6279C9E323A48 +:10D4F0008A669561EDDDBB86429B92910A0105D655 +:10D5000075999BCE3E9DA0313683FA0960EFEED629 +:10D510001E3C76486D06802EF67B9827CFF8922C1D +:10D52000D3D710D367EAD859430CFDA352259241B3 +:10D530000E419793918589879A123E079FC208B63C +:10D54000583BEEA9CBA8187AC8213C4B7086F15500 +:10D55000CD7848922C8CE59599DDA1558AEEC221B3 +:10D560009EB0C50112E3492973351F31A4B469DCAB +:10D5700022D6A24CF74D23EF50D77F246CD053EB2B +:10D58000CEE00614479D154F27716A8316C3D3C595 +:10D5900017EB120411EE2811C17B57F4FA8819AE6B +:10D5A0001B99D4A8D928661000D0D3DE8FC0BC73D5 +:10D5B0009E81166FB06E7372C4BACCC0C57062879C +:10D5C000F7AFBF2C96A5C2B49D2D543FF178DF3D37 +:10D5D000766169DF56CB19FD085D8B068E62DBC074 +:10D5E000FFE5781F64C27EF8FE2E6B58B4CD1F8C09 +:10D5F000FF0A50DE4BF3C5402C780B740BE5FE425E +:10D600005B08FF11C34BE34D32E830E00B399B233D +:10D61000A91ED03AA933FA5A7646492CED53B7CA17 +:10D6200010BF129115FA44CAFB54486D90D383D6AB +:10D6300056110C96512C5A247B9F49385DDFAAC99C +:10D64000597EF488A50BEB5D02F36E39AACDAD725D +:10D650008DF98583D3C130E83B3141C150D69876EE +:10D660006FDFFA73F0023C9E9BBF739A378493116D +:10D67000A42B1F10553EBD1C5B0E671942FEB2CE97 +:10D680006C0F9FCE98C0CC17ED65D91EA16876C9E6 +:10D69000992DFE750FF0540323115ED6EC3D8C01DD +:10D6A0003489493663F48BD86C8120D3DF8CBF6614 +:10D6B000BA350B8103BDB840FB060C95D6E25B1969 +:10D6C0006BCC863CF72AE4E53B76403938875BAE85 +:10D6D000978E0D4BA41C213B8A90EE7F71498ABE28 +:10D6E000741FCD6FE257E0EB6CCD714CD5CBB870A9 +:10D6F0009599EBA7504235DE8E0A4024E1FABD2809 +:10D70000C15D3CAB609D9722EA241DC36D6F79E536 +:10D710009C13FDDF2FD53DB36AE7A2088F011049A6 +:10D7200081BC42CB6CFF1D3225B891D0AD075BDECA +:10D73000EE8401F07F8E8621ACD14493D91EAD4199 +:10D7400063D9C3A4A86E20C5C74A2CEF53380D7205 +:10D750004332D68619BA80CAA5F166687B6B0395F9 +:10D76000A0ACD1EB73A503B1F0565597E8804C21DE +:10D770003AF36D363756CBED1470D5DA1106A78221 +:10D78000CB11D692390436BEACF150F790BE22BD13 +:10D79000A88A5FCFF0152EF8E8F9B63E5B334C1936 +:10D7A000CBC3CDCC2F9B79D1AD423324E65DC47D74 +:10D7B000E216A5F84F787F3D76004DB5AF6288E759 +:10D7C000881AC40C462F711E502457694D079325A3 +:10D7D000B55D67910020584B83A917C32F9DF1E1D8 +:10D7E0007544359F456154C6A633795163D1F2AA79 +:10D7F00007E151B418A258616163BD61516285B5FA +:10D80000F88786C50055685B3DA78976C051960F9D +:10D81000B1FB68DBF36C6866F893B0F86AFBF165FE +:10D82000B73E35FD3D314A3E0F3C1F0A702B1E3F6F +:10D83000FB9FBEF11B6E9A7EE2050EB8E7C78D30E6 +:10D84000751DB8C602EFB425B09D7D428DE8FCED94 +:10D850009D7A2B9DB38BA99C71CDD1F18823B7C53F +:10D86000C3593E5360FDA489B69D3CCC7F8C46AE27 +:10D870003E35DF33C5E002E3CEEEEF2C4873966809 +:10D88000B9B088F00B7C8F11B6B4D9576A00275114 +:10D89000A494ECC3AD7DE89882DDBD06F7F3345067 +:10D8A00000F91CE68217B335FD26345DEA277AECD1 +:10D8B000E473184629DF6586417D282235E6661720 +:10D8C000ED38E59D2018D933BAE2C4CDA5FFCAD9F9 +:10D8D0008464DFBFAD67BEC0E7415AAECC976BB181 +:10D8E000035A58E7BEE51FF229201817D1B15B573C +:10D8F000D45269D3C24250DAB84672EEF5B2039000 +:10D9000067D1C7ACBA85F417EFF93986B5CA986301 +:10D91000069AD92604000100000000000000000063 +:10D9200000000000000000001020000030D90100BD +:10D930004A24615FC3B4AD7D0E438BDBD97917BD3B +:10D940001600006341EB312FDD064509E91B7E51CE +:10D95000BE539C6E893BE68B09864F7F8C62A9285B +:10D96000A3DC2A9C3868DC68F8C26094D5B662D91A +:10D9700007786208CF66644096085FB56678791FBD +:10D98000F4D1A44E3699E903D64C503CE4F65360EA +:10D990004F283845D0ACC587E4E9D6C8A258288DB1 +:10D9A000814D75034F99D6966F38B017E324B4FDB7 +:10D9B000D2170434D121C4179F4E3E45AA0A61FBF9 +:10D9C000A0279AB6F8089EE517243E70721BAAB7E6 +:10D9D000145CB8A4E7DAA496FB937440638C4639D0 +:10D9E0009AC243146CE111153125B1F4A4AD332D65 +:10D9F00022F735EF9438E717E5C2F5ACB1B4DEA5F0 +:10DA0000D120C0B33FD8A403CEA74A238592177173 +:10DA1000E693DED5A2A6B802CFD7CED281E46D3F81 +:10DA2000E02FE203FE15645F41678AE494B76BDE82 +:10DA3000C60F6A5FC3CC0F7987AD41B2D8F394C9E2 +:10DA40001FFDFEA95006E8A19005444F599469AF07 +:10DA50002B7AD1A67AE60B44FACB087CB78EF4BBBE +:10DA600040850E1799D99782A597E5527F0AC51F61 +:10DA700030111608AA6041C596BD574EC8CACF9945 +:10DA8000E0413D967A5D4F32EE6869ED97E94726B1 +:10DA90003D3DF2637F9EB44BBF55080C5AC609EF5B +:10DAA00060890A83C4F75FE0AD64929774BFB8FEE3 +:10DAB000FB0B90CF38614680F615F90E1758B81950 +:10DAC000D8111ABEDC0A75CDB10DFA85DDB89C0BF4 +:10DAD000E5C5E83183DF6B8518727A90703070DAB3 +:10DAE0003A41BD550A314F2CE249739C1FF4483727 +:10DAF000185D479DEE080DF5068652868F5392BB42 +:10DB000025EEDF5DE00DA41E3AF18882A44ED5AE6D +:10DB100000EAF72A43E3790015F955DD89D1093088 +:10DB2000F3DFCBE71DAF5C37DC96A1E97D0B49DB6A +:10DB3000BA79550376A43BD7AF95A700274DC9AB5B +:10DB4000D3AE09EC7A2674AC0C7B66C5EC3781F059 +:10DB5000FCDCC5420F7AC14FAF292D204DC7F5FA25 +:10DB6000C373B93F08C73EF560572D1540C1119DDD +:10DB7000C54186612E3AF644B338FEA9581CD938FF +:10DB800009659A6F200DDAD8755E26712DA5D9DA50 +:10DB900071BFE2BE1415D70677EF957E1E899224D9 +:10DBA000841AC1022F818290917EC3C6DDB6BAE786 +:10DBB000ADBF9F6A08FD760489D7C226ACB15CEF81 +:10DBC0007943C93B60F77777C11D3ECB0599086D56 +:10DBD0009768F4450CBED180C88091C7C32D5447C7 +:10DBE000905154C05F88B17B858F7463A99DC0A696 +:10DBF000AC1F9AB3A354A315BF4441A64DBA1163F9 +:10DC00004B1D3CE5D4C2F7365AF88BB3EF7743D7B8 +:10DC1000FA97787E65E42D8F05D1144ADC9DD4A651 +:10DC20008CACBE92A0DC3C66B9ECA02CABC5AA6F54 +:10DC30003B68C75043DCE7067DCDF01D1BD9403360 +:10DC4000463732FAFB9243653A192C08560BD291AB +:10DC5000EFD26AC8CE7C944918D1C288A8ECD3B45C +:10DC600073B34300BEF288A34FA983DF7DB66C5A1D +:10DC7000ADE6291FAD983A9652A18CCCAAFF8EAE84 +:10DC8000BAF90F7F61CDE71234D3D474DD07858FE5 +:10DC9000D5C64D38501D2E0F7B1FDD9F5158517337 +:10DCA000C1789156531CD79ECC879E82A1613A9829 +:10DCB0007A2E42AE8501C0796ABEC926779D58C5C5 +:10DCC000E54A3E056F540C7476FE5CD2E05DC08C74 +:10DCD000DEB2DED773F92535F4EF9122ED7161578D +:10DCE000125FC3D50D3729A98A76B60F6E4F989863 +:10DCF00014A83290A26F9B494056ABF769A4736A8F +:10DD00004ADD6A7E39064CAAE94A7AEE8DFC02BBEE +:10DD1000A42E2E5A760592454684C92EC7259523F2 +:10DD20005F7344AE68FF3DF9468B7269295885DA06 +:10DD3000A7080CDCDB86881D7BFA914DAFD6EC3F43 +:10DD4000E1EB34624F97D4F3659B2EB92EB13A9A2A +:10DD50001A6E80DDBC06FA58E9C5BBA1FA8C47F7FC +:10DD6000920604A8E50C63121CD7D642AF85B4C551 +:10DD700093E868C185194289E44ECF56564125AED5 +:10DD8000FB72FA79F11365E19A961AAE479DE0E0CD +:10DD9000F7D5867641C66EBB5B5AEA1B12C58E72FA +:10DDA0000EF6E806C4F99B8CB12110760ED7E489F3 +:10DDB00027845FCEDBAB2BF05B4D1E7559272DC43E +:10DDC00021904034277E707A7D3B87D55C73B97D86 +:10DDD000D1E8ACC51EC038FDD550444B0D125ACE0B +:10DDE00050A9983179FF2CA46318DD5FF5F6F4672C +:10DDF000F41B4BD04A209D45AE5022E4CD5AF46826 +:10DE00002958A23C1EB264B329B4E107DF083711D8 +:10DE1000438011683E69686C1E077D03A126952426 +:10DE2000BA5DD8B3AAC0AD5451F517E359C6BEB810 +:10DE3000074EF7E3426DB2F4F9AB954428490DFF64 +:10DE4000375DEF8E4ED518B7E442D40E5476DF9886 +:10DE5000DE4CB150C0F21E71D5F4EB1360768B1717 +:10DE60007F0E619DB584931B962090DA9E5A69B30C +:10DE7000F58F044952B64FD8C656D40F45BFEC674C +:10DE8000B1BFD2A36DC4C2A1FFF77A9AAD97EC419E +:10DE90004854EC4F129A231A7FCEDFC113717D0BC9 +:10DEA0000B4C6B75EB26FEC5CD0447D9140B24F83B +:10DEB000685DF43C1AE529565FD0881E07C2A27E31 +:10DEC000D9A8A06819F8DE99BDFE0D3AB2E5D76C65 +:10DED000CDA757C51856C1985ED62FB782D71267FF +:10DEE000F3896D47BE2714BD88F2857EF157BFA226 +:10DEF000FCA4B6A9234985C73F8694A077FB753754 +:10DF00004C9A11BE05A65094269C178CD9FD7C19FD +:10DF100013495DE390E6FC5DAD8D55A1E9043757EB +:10DF200061B18516B2C786A7DD31E6AD7D8951495D +:10DF30001C701F02C594D0655F8B8E4AB2C4EE82FE +:10DF400004483713DD8FE0C3FF142E4810B1904B07 +:10DF5000991BEC67F180FFC38A181453D3808B0898 +:10DF6000B2D8CF57B95087BAEA80D8396224BFC82F +:10DF7000C7405DD08B561E92EBCF30060DEF3B1B9A +:10DF8000B65DD59063D4832C8D62CE7F554F0AE762 +:10DF9000EA863784919AD2D1F7D9404808B3D70797 +:10DFA00014B14E5CBFC997B1958D6F96F4B1F77AF5 +:10DFB000BDBE977B41D5703C84AF2162C6FA101E6E +:10DFC000C4E40F444F6F1B8BB53F520CD4449FAA3F +:10DFD0002FE61843B2C0329042261A343ABD39C5F2 +:10DFE000ECAAB89F7885D8D778BC3200374D092E77 +:10DFF000F77B13ADB6DB6CB69C8722C8BD8F372B81 +:10E00000C35BB95ED721B27B70519300DA921A39A3 +:10E010005CD41937717F4D7BF3C5DD8511E9B941BA +:10E0200001E11D80B18B569AB5E46BE972C11544CC +:10E030005762B73574C021DA8B39A34EDB26B4762C +:10E0400014A5672393F978AE26ED1BD82F7D2B35C9 +:10E05000177E8041D316F1A29F96E8F3EBDC1622DF +:10E060001F3BF2FBBFDED1E5D324F518D7FC27A078 +:10E0700085FC3E7B30C6E548602C57B3B65B5051FB +:10E08000D3F5219D5ABA2BF50F8C4EA3D94EC3F868 +:10E090005BFF17DF99538758A26EA048615E310F6E +:10E0A000FC4CC8B11C63CDB6CBE76522B0C7EACF44 +:10E0B0002DEDEBAA324C3300DD83DC3B5014A85924 +:10E0C000F8785200FB1C97F20CD054ABC2E1AB06BF +:10E0D000A811938DFCCCEDC9365AA7714B64273536 +:10E0E000A48D1296D3EDA6E2531D368BF8BAE2B397 +:10E0F000ADC8D59CBB526944C87CD7AC6AA6B82FC2 +:10E10000565EBBE118629BA4650EFD3EB059513AC4 +:10E110009F152D22D7791F443612BBAE067B2A8964 +:10E1200023B5AFD8530B960C9395DA114CCC3644EB +:10E13000B15B44BE39BF135A530CC865AAF0010045 +:10E14000A3E9ACC852FBA8393530F494F626820A0C +:10E1500086D63F53645A19D871E7E6DF509FD8330B +:10E16000CA4EEAB1AACF8358AB2B61CD0EB250C0D4 +:10E1700099E37E37F87C959AE525D7E89E841D378C +:10E18000B858E14E8B61A2C3322DFA5FDBEDA38F4D +:10E1900054D48DEC3652013674F6EF007742E771B5 +:10E1A000353AE113BD68B11E8E23ED47145176A3B5 +:10E1B0006FE78024ABF6A9F01F1F33576C9E36BD66 +:10E1C000A6BE233F79718F3AFF169BBD2886654F07 +:10E1D000072F9F7887022F64024C4A7EAE819F52A0 +:10E1E0006D79475FE21C8CF72A2B0F3CF9BD5D1857 +:10E1F000224D6A766246694700F8358A955DEB6B79 +:10E20000267E106F09896D520C77C874666B0140C9 +:10E21000C6A3688CCFCFA82AE1AB0F9140B4669219 +:10E220003D45AB55EC25D77365DCC0906F83D4F3C7 +:10E23000983460980DCC15F469C5F6E57CD33C4E56 +:10E2400043686312A46F3C3FAF78DDFC1DDCE6C77A +:10E2500047D3A586322CD57DAD44B3DD4D228ABA95 +:10E26000C748D6127AB90C18B165CEAE9FACB56965 +:10E2700012EF4AE7B0C705A0D6EBED48202B425974 +:10E28000FDB453575851968FD0DEF0D508C88E781C +:10E29000C5B6051BCDB30FCA070565E7E4AE62B28C +:10E2A000DB47558C51D274F4DC6B31871EBB81F394 +:10E2B0003D2BB373AB95AAEAB44E9B5790AA962C0C +:10E2C00077B1668D5E203CC87AB768F9FCD22737F3 +:10E2D0006763BC6364D2FF88B18777A07F5F968055 +:10E2E0007E512837C062E3ECE44A8962C00E79A20D +:10E2F00073D268A102EA08CE604035C62AEFCCBED0 +:10E30000AB0FBD3CA581090B63703EDCEDFFCC3C3F +:10E31000F49156B57731E72DF8E9380BE1D0A72E07 +:10E32000128D754ACCE51E3C3545EBF19DA4C485A4 +:10E330008FA8337213DEAFC5C24A77F5EDE0758B57 +:10E34000B321EB926AC4BB879A8B392AB84F3383C7 +:10E350005B8B0EA734AB5923DE2B093E193E208E72 +:10E360002454D50A6C0F1B2540A1FD2CEEA5B5A9A0 +:10E370004D6FD95E9FFFDC2F1465D6DFE1F389BBBB +:10E3800048029D150BBB28EE89E7963E6C84D76941 +:10E39000283FDC1F09747D92414AD6D00FC0E0842B +:10E3A00031D1EAC96244C272C29A04A4DFD54A5686 +:10E3B000B37E6BACC8FAC32684697C10B372FC1AB6 +:10E3C00087350EF28EF7BDA74D4244DE6E237F45A2 +:10E3D000A6D08540CF7837C4F651C284C93D40E409 +:10E3E0005DB4656777872E59AC8825AA8D65BD8990 +:10E3F0009879520E1618017D78A1140217BDDBD74B +:10E4000049BF3B51D3F1C4A416D7F13063DFC3D267 +:10E41000F793AFC1F2550581E0BA9F38212BF8BCC4 +:10E420002D0826FB65EB34285D37FF8D40AAC1E23D +:10E430005567287E32BDC3C9BD8A26AE3885104ACD +:10E440002618716AF66058EEB45C5E14B7DAF69975 +:10E4500081443BA5E7CE712B9E5B64DCA11AA74AE1 +:10E460002FD8C2E83277405FC7B647F4FB9B6BFA00 +:10E470001D3B139F495411943286992623CC93DB7C +:10E48000D30045F203F7787459E6505D982CC7AD78 +:10E49000B46E21F945F5D4901F65B5B4F15B7EA942 +:10E4A000D096215D2BE4E6C460670B1B8ED35C67BE +:10E4B00028443010783E5653638EC28C5B53EDBDBA +:10E4C00003EC6D1A0378B010BA0F810B4E03692864 +:10E4D000F9C2AF5899173265E208DFB52D9EAEBA82 +:10E4E000B7829989E05EBC95DD8FBE30C85F6AC394 +:10E4F0007DFE0F906481D16CBBA37C17C5B47AFEFE +:10E500007AD415F461D2A3DCE01E712025DB97CA12 +:10E5100000211971D15DB61121CA911311FBE57764 +:10E5200034100CB706CA516C09F73CD65DC293DAB9 +:10E5300050235DE688E570FFA4695259A682FF9AD0 +:10E54000DB8BBAB0C1C9805FC653D42D751EED0DEB +:10E5500010A865F032F56060C9FB1B2FFB47B18343 +:10E56000D2713849166CBE6482B7CA518ACB2E2E3E +:10E57000BF5BA71DCC96CA179A1175852F72F01133 +:10E58000E31660183C918B04655B485E328A958483 +:10E5900077AE4498E782679DB7C8CD2C9F501B0A81 +:10E5A0006969E10E69944F7FEE61D1C64C5CECA1C4 +:10E5B000F6508A49BD68EF1E2F25463DAC47B73758 +:10E5C000348C903569431F6DD1EC4A4C9BDD7463EC +:10E5D000BC0719F2C61F403023592B51375E04B9CE +:10E5E000504D4D0CDC59AB026EBF8C42D3EE2F0F59 +:10E5F000229A81DF95120DC87E6D2C6534B22A48AF +:10E60000E2D1DC750699B1C94A3941E74E6B83EE18 +:10E61000E742A18764675CCBF27A48B029664AABCF +:10E62000DFD618420D564CE3573E25F5AA118F61EF +:10E63000F56B7ECA31FE3021D2E3C70FD113E5C49A +:10E6400059069EB5B3877A3118220951CF1A5D2A2F +:10E650005346A741E0AA8BA546BE279FE37543C159 +:10E6600035B1A72B482DE250C19CA56CA4002BFC12 +:10E6700061648D16FBE736054044F87893869AD797 +:10E6800071A462AA643A0DD2CCA7DDC6CAEFF96BB9 +:10E69000501EE90748A0AA135659EBB0E66FA13106 +:10E6A000A44A312E8EC3E6147A52AD30F2163B06E0 +:10E6B00037B21FE10FE2F610A99963F64C342CB182 +:10E6C000442F3A20E3A8548E937591F1531AC51341 +:10E6D0003BBA67B2C7161BF4E008865FF868884B40 +:10E6E00059768C144168A61230E8483DFD20C16A75 +:10E6F0001E2FE8B0F1A7063E2701779C46A7E0A2AF +:10E70000E9D914011CAC278BF757121430F5260DEC +:10E7100012336A0012CCAAAF12D13E7EAD7FA5D6CD +:10E720009E8690615C9BDD70DF40E9800D5BBFA938 +:10E73000A646F34399F4F9C3EA6A4C5BE09350D8D8 +:10E74000A8723720048D600E022E6359451DA73E26 +:10E75000B3F85EF60D063854075BB4D8715E22C478 +:10E760008733AC76E60987C49590F38E06C6F1DB55 +:10E77000A51A90ACCC29ABD6EE622071C5B2BAE531 +:10E7800088948C28FF11D65AFE845E39F1F207F87E +:10E79000DC92F3F7CF65C7B7A559C8752605AAF46B +:10E7A000D9EA5D5C0F43677BF7D577BF3A1E48D344 +:10E7B0007B4F2F2C1AECE0DA67677A6B46BBF58546 +:10E7C000BD519F44925814E85B9ABD0580039F5A3F +:10E7D00076164565478666444DEB4C9A03C052C396 +:10E7E00039D319170485F5E69F2BBF967F15582658 +:10E7F00008D3B8F98E20635F7B3D3C29E1235D158A +:10E800007A900865B5C57F634A24281C84C0924D60 +:10E810003501FCB888203222F88719D642A07155FC +:10E820009CF199A67881DA0DF79DBF61FCECF43E6E +:10E830009540A09792A3D2CCBE16F7C4B23EDDECB1 +:10E84000EDEF1EF3FF35639C003D5A265D37E3BDB7 +:10E85000C6CB8140B7DB0D89952B08887D924BDFB5 +:10E8600011E53EED637AEC8DC4AB848D6B0F67CF01 +:10E87000B6D2204682E971EBE903D628C16E7B024D +:10E880003C4F8824438ACDDD044BD9BA1CFD8BE371 +:10E89000AFC2E8913C4300A531B2EFBF8FDB5E8091 +:10E8A0009D2651796BD451BC1D4B78D5B8D48412B8 +:10E8B000400C4671B283993D2DBD14CBF386FAD43A +:10E8C000146832C185ABAA9C7E509612C80D706C3C +:10E8D00013668589F666FA25F18B17F8B3A63362BD +:10E8E000EEC5EF110BB98ECE9777394FEBBAC979D8 +:10E8F00080C4E7E847D43222CA2D12003FB7AE7E6B +:10E90000588F4F80299FB00E08922ED615E590792A +:10E91000AF0FC8C23B7A3EE7A36F28EDDC5114BAB3 +:10E92000CBA7B7996F1756739A52E8C5AC5AFBA597 +:10E930007284ECFCB6D82E8470A7FA2331D34F6DC5 +:10E9400082A3C3094740D3C85D04F4529970039E63 +:10E95000DBCBC972C01ACD437B406038055AD26602 +:10E96000C09232714F8643A3A60C7474752C7B370A +:10E9700010D653815E94AE8A3426F55F04B3015AF3 +:10E9800094503905148CBA1EEB1E28A498ACF23DA5 +:10E99000854F8F33193FF39F707FDDB9F60AD05052 +:10E9A000035BDE83C6953B6DA80009B1DDD34960EA +:10E9B000C78F4B2F3345FC0FB82A13BD4389B95B72 +:10E9C0000AD0857662218760F0A8653860D6B609DE +:10E9D0002E8F827A8DDF5224F87169DA50C8CE36D4 +:10E9E000E99D90BC2B846C5CE5EA0960E300A5D549 +:10E9F000A1F57CBF05827A133A6D59237FEAC17273 +:10EA0000E0F1C45CB5EBC55EC2403754D64DC9BC1D +:10EA1000B065C47C9B8E565FFE901D7D42E292E203 +:10EA200054C0A4E0AF23CC8F1D451BDFDB0C86C296 +:10EA300007CDB17C2F674A4FD8CBBCC01374DAE046 +:10EA400004C8E43E48673133464CB903B400323958 +:10EA500015082E4ED95E36E087012930C5BF99D8FA +:10EA60003733EE9AB34CFC244F0D65E1F6E05605C2 +:10EA7000ECFA71AC07F63266053D73681238DD3882 +:10EA80007021CBCFA1B931A170F43B4483284A2F28 +:10EA9000192EFCBFD2449708A1BE9D7A675262AD81 +:10EAA000CB8B1DF5E051B83DD1F7453AC977BEC3D0 +:10EAB0005B3BEC3A2E6CD3F2AAB239F1EFAB2D27C7 +:10EAC00026B38312A74136A2D2962C34012C7BE1C7 +:10EAD0004352F2A47DB6E255B19A6574EE15E1DEBB +:10EAE000C661CADD9F9FEA78380109F07F960F9DC5 +:10EAF00043A42EB13A87612512656231762D617F7C +:10EB0000ECCC2DC5100EFFFA4AD004AD8BB7E37FD5 +:10EB100069C2F7AF3D6625BD54622B11DD645C8B85 +:10EB2000586EB919B2EAD5782D76712F28FA8F016F +:10EB3000D6083ACF5F9B3A5A2B174888F98403C509 +:10EB40006239B41AC24822F67B7AECA67DCE0779E8 +:10EB50004B479C2CB1AC3C553ACC6ED81333FAFEE3 +:10EB6000CB676FBAECC710ED9E9D7672151117CC6E +:10EB700024E5864223C23C65236C9EC7D17E457F37 +:10EB800068F2D13B1116E12740A40BA8D52DCC2F5C +:10EB9000A37E9C1B7A8CA49CC7BC474F55080630AB +:10EBA00009ACCA3EA579F61FFE011C0B08446ACACF +:10EBB000A99E85B752571671EA36E7BE04F843DAC4 +:10EBC000BBE69455467CD70EBDDBB7CA8147DCDD7A +:10EBD00043F7AD41DDF072716B2AC258108AF19291 +:10EBE000D17EBB7DCA27F62F106E3F3712E4A942B3 +:10EBF0004B2A452A4039967BBBFFF2EB8BB15DED8A +:10EC0000310B196202A75EA40EB74DF361BE9E3DA3 +:10EC100064E4A77A095EC88097995B619A4350685B +:10EC200031B0DD7FB2967F4FA56A166D5E33F74136 +:10EC30000B8CEE4341BD50F8EA4F8936B508612987 +:10EC4000CDE698CAAD876951FB75746A907B45170C +:10EC50004DC12DA78D6023691215D1A55A1155FEFE +:10EC6000284D5F9E14859661D601BF408ABEE17231 +:10EC7000E43BFFFF20978FF89CECF5B92AAFB31F58 +:10EC8000DB3B3A5AE1ECBD98141035156DB9D49BB5 +:10EC9000407475D2A28F73499ACF17180B1830FCA5 +:10ECA0003B8BC470F6B20EF116323FD826F0EC98CA +:10ECB0006EEEFB1F4D7FF322A96265B40B495AE744 +:10ECC000BB753997F853A093E5868846110C746696 +:10ECD00005689EC4E4DC37D6F038218CA2D1C4E1AB +:10ECE00075397B6C97DAA1A5070C6312ED7FA4AA96 +:10ECF000C6990284E1846D6CC84D273E4BEFB73C4A +:10ED00000C2216CA83CC38AC2A6148E498D3A55F9C +:10ED100006B58A4863FF599BD4BF27A53D1354B756 +:10ED20000539EFE244869AE106AC3D110CE48A4FC6 +:10ED3000046FDE33336FC2D27E326658FBA4F947CC +:10ED4000BFA7229133C4FC138EB4CBD9E33215F79D +:10ED50009B42EF50F291307C9E1694A349ED1D60CA +:10ED6000659EC56F2A6FCBAF90BB5EB079C183370C +:10ED70009702E35743C069061E1BDA3A8B441C6DA9 +:10ED8000B0A7A2EFD55396B94EE5F824CAF61ABD3E +:10ED90009D06A9D1DAF7D3B4931E0A8E90C3FCC89E +:10EDA000BA826B89C61440E3A0BB817AD12428DCE7 +:10EDB00028CA294C9FF141A05D422CFCF6F2D0CF2D +:10EDC0002D97A4759551ACF487FBE461EEFBEA78CE +:10EDD000B5FA8555C9D6708BE062544A27C1CD0D6E +:10EDE000DD25ACC6A803F01CB20B658436E31DBD5F +:10EDF000285297E7C3077A52038844B89A22ED4A0B +:10EE000030E96E032955CDE0020C80D5800FAF2488 +:10EE100072205001F3425714405BA6DBE63C95A0FC +:10EE2000701573F82B10C603C19064CDD5342CFA3D +:10EE30009C90D3C7C504998F389B30CE970B572D24 +:10EE40000C128404DC31146D7084D76FD1399F5853 +:10EE5000FAA1345E6E1201FDA16075904BF0FF8542 +:10EE6000CADE0A4B2286505EED0A9B2C16F625FF61 +:10EE7000905CD8296F7BFAEEF71419C5DB5D486307 +:10EE8000F441630F8E39C3AF5139C6E8831DDA5F91 +:10EE90008847FD4D756815401FE205A892B31B9584 +:10EEA00046D63B5FE5E063ED793EDC267C019C12B3 +:10EEB000D23D73B3E86DE4955BC99B9051E9207234 +:10EEC000521F097CB15A81E5AD08568846651A760D +:10EED00020196A9D038B87CDFE4BA11808DCA9720F +:10EEE0008CC89A57A5662C312BD812F3E710699776 +:10EEF0004911FA7E805ADFC5307D31D1CD01180D20 +:10EF000067413BC0247156FAFE038E825BD8362CD3 +:10EF10002C50CF16E95C43E233D785EEC7A231957A +:10EF20000F802337E0DF13D5A1FE96C464470A782B +:10EF300053B61EC653EACEB7E681128A7D85C398C2 +:10EF4000EEA09E7A183E517F527DFDD9CF8CF21CE7 +:10EF500079E834A0B89C7A3796A378E29F61988EBE +:10EF600039FA6AE90F3F19EDCF80176FDC3110F0E5 +:10EF7000776E1D05F73AAAE390205D5BAC8F4D7D5F +:10EF800015F0174C5ACE691D2E6A2BD84EB5FE547B +:10EF900042C08C7A4FF30B45EF5888DC1950060CB1 +:10EFA000F25D816CA22E9942C4A3B68D2B9D467F43 +:10EFB0007BC37E3A02468DD33C64691969AF8917D9 +:10EFC0002C473AAE6E9F24144612175F2D7CC03436 +:10EFD000935FB0D85FDB85146EDB588EB71DD9AE5A +:10EFE000A700868231559A30AD2BD1B3A8D50066E3 +:10EFF0008305F23B2C5947D7EC85587FE33B9B4078 +:10F00000ED847E961FCDE2CEBF2E909F3176110704 +:10F01000E0ECA7B33DF55FE81509521B1B518C22AC +:10F0200051176A148AC393FC9B2F1DBAD23AF75525 +:10F0300050BDFA712D0F644A9EB600C5E929BC1473 +:10F04000AAC778225AEF7FE411C6342FDD658853B2 +:10F05000FD352E698282DF42319BDAC25B86172E34 +:10F06000DC36E75EB6AF90B70167040FCCC3DDCCEA +:10F0700039774E120D438466C152DC59E3689C37E0 +:10F0800068D66B2A8CB7786829321C30EAE1E7CD64 +:10F09000CD05D9C3062B1FC54ED9C1D771E06A2350 +:10F0A00021A486C913BAC7EDE2340BDA05F3953D06 +:10F0B00041D3A592576B603C33A7990A78DBCAC14C +:10F0C000F198B92B9E752C472650B9D251DCE28CB1 +:10F0D000BEE51C517B65FBEA354FEE20A255CD19EC +:10F0E000C67766EBB87F4A4A4C31476D8A07BA6AE1 +:10F0F00034503623FCD747B99E307D9BA019AAF324 +:10F100004BBA23E64841432C0E5AB4EBE1217B9FD6 +:10F11000983E23E6ED90EF2939E972167156836C1B +:10F1200050BD5A60FC570B89692FD97EB4B18292C9 +:10F13000A04F29365FF068A6B488A592535CC0B78B +:10F14000106453982819A4D3005D3D785792C99A4A +:10F15000646D638F4AF36B8DA4898C794D95321958 +:10F160000E13F03DD66513C44AE3BE156A67DBAAE9 +:10F17000AB6B4A70769B45640D083CF7A094DF7D2D +:10F1800093629DA77D120BEBE263404D3C4AA8229F +:10F19000DC9E8B11B6CF64A609866CFC48BBAC1212 +:10F1A0007D90AFD5E5D8E2DF47AC03E4E21F3F4FE7 +:10F1B00088CA8845795D03076E88D7244D757571B7 +:10F1C00037BD82F79ECD30BFD3DF153189E2415381 +:10F1D000A78A63820688770F1716F13E06F1EB7552 +:10F1E0003B5CBBE07686C93CF643C7C14A8C938F33 +:10F1F00086643CF7A99117677495A789064EDCF6DB +:10F20000F505696EB0AF72981F6EA64150266D99D4 +:10F21000B62BB653AA4210094E393D8737D600DEC9 +:10F220007079FAC7633D0013BD43372760A5EBF63D +:10F23000EC2CA94FAB1B6C67CC1563DA4BE02E8B23 +:10F240002182D3C256E880651BBCD5A886378ECBF9 +:10F25000162470CEDF7E27D30B9ED94456FDCD4AAF +:10F26000A1379A17228FE9DA7A7C851D6F26B8A319 +:10F27000BD3A89ABB0CE80E3532612EF2E55E1E3C1 +:10F28000D02F23802DF663DD12F787E22312A8E842 +:10F290004071AAEB5D004BAC0755057D26124E5917 +:10F2A000125676CE9947CBC04FBF810E7389059E0B +:10F2B0001327DAB63B248490FD1F544DC8DFAB5DA5 +:10F2C0009E3FF14C3482F08258B3D85819BC10AD2F +:10F2D000A7A583C2A0441B944ED09FA29C12D0A588 +:10F2E000B9F3DFA51AA2FD32DE16504A90D60A6A9B +:10F2F000BAC492E7D8A94B22318354252314B37E94 +:10F30000058148BE8CE3B8B36ADDDBB7257722F808 +:10F3100080A109CAF71FC787055F8278385E9822E7 +:10F3200076EB5D1C33B6F996E0B38F7C04EF6CF797 +:10F33000AE842555CBE2D2502C334D4B9FE164393E +:10F3400099934CEF3129079A68FAACA113B29261F4 +:10F35000DFDEC00B760FF64D77A395A6866C8B5F2C +:10F36000AB10352A0F1797D769EC3A90D873C42A97 +:10F37000C4C1E708F37D5ECFDC31605C46073D2801 +:10F38000EFA54B40CE202088C9FC625620B24FD456 +:10F3900041CD6C9958B4AF369510B5E7107BE2D3E8 +:10F3A000574210F5825AA953ECAE6568400D22927F +:10F3B000654C9A0DEE7BE6CF3226F9204C30D1C851 +:10F3C000BB07C7DDAC2038BC883045EC338AE6018A +:10F3D0006365A6DD2643EECF06E785FFFCF64C26E7 +:10F3E000D15C938FDB694C2012E3B659B84F81C2D0 +:10F3F000B9BD3FB7C84583A3D33A2C9363262321D5 +:10F40000ED7D442266B7732E4E0C26AFE6808F6BDF +:10F41000C0DB337F2F480CE924D06C096E7D29FCBA +:10F4200008B8F3417B2518DB19C63C632E6ED04625 +:10F4300069646DDCCA5665951ABA6A7DE75ED6B70F +:10F440000F0BB19A5DC650D40885A5E52BBF42A12C +:10F45000C929B7035D96D6A7944DE1B51391EBA6E4 +:10F460009A04F1DCC63E97D4C560C8EB1F4A728788 +:10F47000847EBB4AE75B3BC6B29D3C15EFC163FE91 +:10F4800089C430D02872EFBFCBA7A86A6E38422358 +:10F49000D9410B27A6A232784C7504B2A8579DF823 +:10F4A0005A9FA534486654966AF7B41D278454E1E0 +:10F4B000F05C01C0A728C3D143319006F5414C56FA +:10F4C000FBDC065EF7D565BD6ABEA8DCAEBAE79E7A +:10F4D0008E8D01CA2FBFE46C07DA1B5D4C04FD8BD7 +:10F4E000221087E5D198B91180044985B38DD633B0 +:10F4F000F9665EAB7A24F7874BF2C00355DC842DA6 +:10F5000030404AD72E1A65BCC1D9A1E887971B2D78 +:10F510003F0A21875AC2641F8A668CF0B3ADE68821 +:10F52000865FBF4AFF0E7A6FCE58895C7AA7F49443 +:10F5300005FACDB9F861BFF24EAE2FC9E9A2EB8151 +:10F540000F4E050062B083769A1D8DADB326DE1B8B +:10F5500053B21ED00D675A4E798C9D28C5AB530D02 +:10F560009148D6180A5C873C40A7C9EEAB547CE7AB +:10F57000118DA7CF5083BBC4958D1A0C898FB7808E +:10F58000EE398A9F45ABC09C074BA46EC55143F62C +:10F59000CF24990B741B82EFCE8ED42945C550AD74 +:10F5A000D73830E154AB69011498BB6DFB475A6AF8 +:10F5B00057C423A11551E8EAEFDCF5A297DF14DB6D +:10F5C0008BF270A75105789CD31D303FD369B75A91 +:10F5D0007A1BBDA3871B38F65AE76AA0AC81F57584 +:10F5E000E373E8F5DFE77F5FF9B9C404F765A88C3A +:10F5F000970257F00CF47155A5E080612C0B9EA882 +:10F60000DB7254CA4F60B6657A1D1DB59EF0DD648D +:10F610005AE88B217A0DC13ABD084CBA633FA33139 +:10F62000A376072636C91A974F486F8E666AE2C6D8 +:10F630001419E8B8C0256DD3A3258F874AA2F032EC +:10F640004CF1080785355D3CA2FA8F4241F8E66B24 +:10F6500015E2CE22CE540EAB129C568636DF922493 +:10F660009FAFCC496E02B913F7893FC58CE845813D +:10F67000291AAD8F67BC41B72A25E19CA4520C170B +:10F68000A52B53F638A02E11AFD50574F6358AC0D8 +:10F69000E0212C2B8D3C107E71F291DEF6DA9D1468 +:10F6A00085CAA1DA1C6476937AA9352A9950313536 +:10F6B00028FCD7ADBF1792AE075CDE1C8B00581E2E +:10F6C000D1EAB1E10084FF99F7C529A22F0215F80C +:10F6D0008C4DB8EB60F8DF1C8AC1C55C33E9175A62 +:10F6E0004BB5DA418D2172EF790F939B97205A50D9 +:10F6F000EE3CBC7DF9AAA6F5AC4E277F8144EE9383 +:10F70000FB5EBF3EC68E1F07E30E2B60DC6B70CD29 +:10F7100065F429ED6DDF058666CB64265FCE8D8CA2 +:10F720007DE6C2CCC76E42A9EE1C7A59429DCC52EE +:10F730002A77C906E56A987CD31B88246C608A65A1 +:10F74000400EBF17AC447A45EE9F85FDAB24EF1504 +:10F75000C4DF4F123CB2BCD58B89498E427FAE6D5F +:10F76000034818F51C96D2949EA11B6C15F6B7970A +:10F77000B860E893EF9A69C39D2D3A81BEB64508FB +:10F78000C90DF8C88775C2239D570776CEA1607052 +:10F790001775002584514075A4CEDC998A498BAE3B +:10F7A000F8B10110B80777203C9DB2DAF7A3A82082 +:10F7B000824DCA25B60A9C7E7E11F02384BE298E16 +:10F7C000E4846D6E44EDF11451C672ED38DEB09CE8 +:10F7D000075B789C74FA06DECF287B3FECD1CB9D8B +:10F7E0005887AFF0E0C0289D8C48235C7BEAAF4A85 +:10F7F0007A200DA842DD0CD466C6CA59A9962D2BD5 +:10F800009BE4D32ED1DEBE8D5B31DAD24DC7DCEB6B +:10F8100074DCB52BCE8640B136155EEDF983989D2C +:10F82000749D700D0C84F032E6DA33EE2D79DBAF87 +:10F83000A9A599B38CED7209CFF68A54D8C6C3CB6B +:10F8400015012DCC85FB08781B819611EA81235B7D +:10F850009545D72AFDB1584EC43D492656B382B8C6 +:10F86000EDE0D380228362E2C923DF43BB02674C11 +:10F87000F6024462E425613931D6C1B85362203FB3 +:10F88000F68CB1C6AF61191500B1D3CA54D811F5C1 +:10F89000635991508107C33A5CC20BA2A292595C92 +:10F8A000E1D70C8ED505B4DCB0A30358C7436ED79F +:10F8B0009E9AA8E35E3B392B3DC0AC1E81E986329F +:10F8C0000FA3EC801AE0E8A5B65BC08A9FC885A3A9 +:10F8D000BCBD612F78D408019BF49CAB28675D2ADE +:10F8E00077B4E8EDAEA5B920235E35BC8BDA2202F1 +:10F8F000580745EF1AAF2086E10F35B394635EA138 +:10F900005494D92C82B02BDEF0417DD220FB5241A1 +:10F91000B2FB0439856B4FACC4B46B0AB42FC35926 +:10F9200000BCAEF574A7CBE880B9073ABA8D630185 +:10F93000376C7E01336157A25674702CA756C4EC05 +:10F94000FFFFFFFF110000000000000000000000AA +:10F9500000000000000000000008000060F9010045 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 +:10FA200000000000000000000000000000000000D6 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA60000000000000000000000000000000000096 +:10FA70000000000000000000000000000000000086 +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000000000000000000D5 +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000000000000B5 +:10FB500000000000000000000000000000000000A5 +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000000085 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 +:10FC80000000000000000000000000000000000074 +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000000000000000000000044 +:10FCC0000000000000000000000000000000000034 +:10FCD0000000000000000000000000000000000024 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000000000000000000000000000000004 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD400000000000000000000000000000000000B3 +:10FD500000000000000000000000000000000000A3 +:10FD60000000000000000000000000000000000093 +:10FD70000000000000000000000000000000000083 +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000000000043 +:10FDC0000000000000000000000000000000000033 +:10FDD0000000000000000000000000000000000023 +:10FDE0000000000000000000000000000000000013 +:10FDF0000000000000000000000000000000000003 +:10FE000000000000000000000000000000000000F2 +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE80000000000000000000000000000000000072 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000000F1 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 +:10FF400000000000000000000000000000000000B1 +:10FF500000000000000000000000000000000000A1 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000000000000000000071 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000000000051 +:10FFB0000000000000000000000000000000000041 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000000000000000021 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 +:020000022000DC +:1000000000000000000000000000000000000000F0 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000FFFFFFFF0E000000000000000000000085 +:1001700000000000000000001000000080010200EC +:10018000000000000000000000000000FFFFFFFF73 +:10019000BCD66B1603000000000000000000000049 +:1001A000000000000000000010000000B00102008C +:1001B0000703000010D9010040F9010060010200AE +:1001C000B641A3D3090000000000000000000000B9 +:1001D000000000000000000010000000E00102002C +:1001E00049324300FF00FF000C0D2000000000001A +:1001F000B641A3D30A000000000000000000000088 +:1002000000000000000000001000000010020200CA +:1002100049324300FF00FF000C0D200000000000E9 +:10022000FFFFFFFF100000000000000000000000C2 +:100230000000000000000000000200004002020078 +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:100440008A5DE7AB0C000000000000000000000027 +:100450000000000000000000A5030000600402008E +:100460000001000100020002000100010001000182 +:100470000050000500020020000100010001000101 +:1004800000010001000F00150007000F0008000A1E +:10049000000300010002000400090001000D00013A +:1004A000001A001000130001000100020004000502 +:1004B000000200020002000400010001000100012E +:1004C0000001000100010001000100010001000124 +:1004D0000001000100010001000100010001000114 +:1004E00000010001000100010001000100010010F5 +:1004F00000100001000100010001000100010001E5 +:1005000000010001000100010001000000000000E6 +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000100010001D7 +:1006200000010001000100010001000100010001C2 +:1006300000010001000100010001000100010001B2 +:1006400000000000000000000000000000000000AA +:100650000000000000000000000000000000000199 +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E0000000047F030E050E9F05FF090040004037 +:1006F000000000001E1E011E05E4159E052D37FE9C +:100700003AFEF0D2F0D28280C4C405030532800FD5 +:100710000A200001010704040AC01964262680800B +:100720000000801901404032FF00000000004C042E +:100730006C073C3200000000050A2C012C0100006F +:100740000000000000001300000C195802190C1ED4 +:1007500000050A2C01FF0001000032001400140003 +:1007600064006400100010007D007D004066581B8E +:10077000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:100780000100000000000000000000000000000068 +:1007900000000000080307E9D829000410008000C9 +:1007A000801D80000004FE01000001E00000FFFF4A +:1007B000FFFFFFFFFF533333333000000000002101 +:1007C000030F000B0100000000000000000000000B +:1007D0000000000000000000000000000000000019 +:1007E00000000000002300000000000000000020C6 +:1007F000144900120801122C230C06010124000BDD +:100800000041340000000000000000000000000073 +:10081000D5B47FFD0C0000000000000000000000C7 +:100820000000000000000000740500003008020015 +:1008300001010001000100010001000100010001AF +:100840000001000100020002000100040006004C4B +:100850000001000100010001000100010001000190 +:100860000001000100010001000100010001000180 +:100870000001000100010001000100010001000170 +:100880000001000100010001000100010001000160 +:100890000001000100010001000100010001000150 +:1008A000000100080005000200040084002200424C +:1008B000000A000300010005001700080001000104 +:1008C000000A0002000A00040004000900090002F6 +:1008D000000D00010003000A0001000800040004EC +:1008E0000003000B00060022002200420006000464 +:1008F0000001000100080001006D0001000100017D +:1009000000010001000100010001000100010001DF +:1009100000010001000100010001000100010001CF +:1009200000010001000100010001000100010001BF +:1009300000010001000100010001000100010001AF +:10094000000100010001000100010001000100019F +:10095000000100010001000100010001000100018F +:100960000001000000000000000000000000000086 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:100990000000000000000000000000000000000057 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000001000100010001000100010001DF +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000001C5 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A900000000000000000F40180031B0000FFFFC5 +:100AA000FFFFFFFFFF00FFFF00C080100A000000F3 +:100AB0000014000000200132210C0C3030003905F8 +:100AC000FFFF01FFFFFFFF0606070700FFFF010111 +:100AD00001030014001400000002000128001400AB +:100AE0001400000202000128001400140000050296 +:100AF000000128001400140000080200012800145E +:100B0000001400000A020001280014001400000A6A +:100B10000200012800140014000000020001280057 +:100B20001400140000020200012800140014000048 +:100B3000050200012800140014000008020001282A +:100B40000014001400000A02000128001400140020 +:100B5000000A020001280808080808080808080810 +:100B60000808080808080808080808080808080805 +:100B70000808080808080808000000000000000035 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB000000000000000000000000F0F0701070305 +:100BC000030203071E000300A600146405013D3C58 +:100BD0003C3D01043A00010002000009060804023D +:100BE000070200000000070700000303001B2805A0 +:100BF00001002220000502201C0C00000808A000B3 +:100C0000A00050508003144B00019B02010006021B +:100C10000F0F000006070303020303000003010196 +:100C20001900050100141400050000000000010374 +:100C30003B011020204000000000FF0000000001E8 +:100C4000000002030D998F590D998F59010A19005F +:100C500020283C030100000010289077000F1400AA +:100C60001C1C1819181818181718171817181718FF +:100C700017181718181818181818181817171717FA +:100C800017181000302E2D332F282734292A2C2B0B +:100C90002625232224242424242424242424242414 +:100CA0002424FFFF000000000000000000000000FE +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000100000000000C33330091 +:100CF0000306FF80FF80FF80FF8001000EFF7D1054 +:100D000000050005031F1F000005050007001F1F49 +:100D10000000060101330006010016140005090059 +:100D200000AA09E00EBE0000000000000000000064 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000FF0000222044A05A04 +:100D700002013A001E5044C861F8FB0C0F84057F45 +:100D80006EAD8F909C803090F88180B4D808038538 +:100D9000B0F1818080EAB08322208801686710006A +:100DA00001540000000000000000000000000000EE +:100DB0006F58BA650C000000000000000000000041 +:100DC000000000000000000024020000D00D02001E +:100DD0000201000100010001000100010001000109 +:100DE00000010001000100010001000100010001FB +:100DF00000010001000100010001000100010001EB +:100E000000010001000100000000000000000000DF +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA000000000010001000100010001000100013A +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000120 +:100FD0000000000000FFFFFFFFFFFFFFFF51515126 +:100FE00051CD0D04831010101083FF031800010071 +:100FF000011A0000000000000000000000000000D6 +:10100000E87ED93F0C000000000000000000000056 +:101010000000000000000000A902000020100200F3 +:101020000301002200200008002200200008000325 +:1010300000010001000100010001000100010001A8 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000001000100010001000100010001E8 +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000001CD +:1012200000012101200219061C031F051E041D07D1 +:1012300016081709180B1A0A150E110F12100D13A4 +:101240001E1F2021000102030405060708090A0BDE +:101250000C0D0E0F101112131415161718191A1B56 +:101260001C1D3133001000100010001080808080A1 +:10127000808080808080808080808080808080806E +:10128000808080808080808080808080808080805E +:10129000808080808080808080808080808080804E +:1012A000808080808080808080808080808000102E +:1012B00000100010001000000F0022208B818040E1 +:1012C00003090800000155000000000000000000B4 +:1012D000DD9ECD630C000000000000000000000057 +:1012E00000000000000000005E020000F01202009A +:1012F00006010001000100010001000100010001E0 +:1013000000010001000100010001000100010001D5 +:1013100000010001000100010001000100010001C5 +:1013200000010001000100010001000100010001B5 +:1013300000010001000100010001000100010001A5 +:101340000001000100010001000100010001000195 +:101350000001000100010001000100010001000185 +:101360000001000100010001000100010001000175 +:101370000001000100010001000100010001000165 +:101380000001000100010001000100010001000155 +:101390000001000100010001000100000000000048 +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C0000000000100010001000100010001000115 +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000001FB +:1014F0000000003C960A00000000000000000C0CF8 +:101500000100001410100307020207030101003359 +:10151000330000000200003C046414B2640F0000B9 +:101520003C046414B2640F000077086414B2640FC2 +:10153000000077086414B2640F0B0B010F0A252515 +:1015400006014E0000004F000100015100000000A4 +:1015500014E9C3C10C0000000000000000000000FE +:1015600000000000000000008E0200007015020064 +:1015700080010001000100010001000100010001E3 +:101580000001000100010001000100010001000153 +:101590000001000100010001000100010001000143 +:1015A0000001000100010001000100010001000133 +:1015B0000001000100010001000100010001000123 +:1015C0000001000100010001000100010001000113 +:1015D0000001000100010001000100010001000103 +:1015E00000010001000100010001000100010001F3 +:1015F00000010001000100010001000100010001E3 +:1016000000010001000100010001000100010001D2 +:1016100000010001000100010001000100010001C2 +:1016200000010001000100010001000100010001B2 +:1016300000010001000100010001000100010001A2 +:101640000001000100010001000100010001000192 +:101650000001000100010001000100010001000182 +:101660000001000100010001000100010001000172 +:101670000001000100010001000100010000000064 +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000100010001000100010001000192 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000E9D829820000000081000000FC +:101800002C5249C70B00000000000000000000003F +:101810000000000000000000180000002018020076 +:101820004004020010080200B00D02000010020087 +:10183000D01202005015020000000000000000005D +:00000001FF diff --git a/firmware/synaptics_jdi_3331_c8.fw.ihex b/firmware/synaptics_jdi_3331_c8.fw.ihex new file mode 100644 index 000000000000..66640f751ed8 --- /dev/null +++ b/firmware/synaptics_jdi_3331_c8.fw.ihex @@ -0,0 +1,8624 @@ +:100000008F47E1A400000010000000001000000075 +:100010002C016BD500000000000000000000000073 +:100020000000000000000000280000003000000078 +:1000300060000000B0000000D0080000F0100000D8 +:1000400090F10100C0F10100F0F1010020F2010087 +:1000500060040200901A020000000000000000008E +:10006000246F52700D00000000000000000000002E +:1000700000000000000000002200000080000000DE +:10008000030D0100E2F025004453352052322E3694 +:10009000372E3000000000005333333331000000AE +:1000A0000000000000000000000000000000000050 +:1000B00077BAEF740F00000000000000000000009D +:1000C000000000000000000000080000D000000058 +:1000D0000000010000020000240502000100FF01F1 +:1000E00007060C0000010002270203008000000345 +:1000F00027020600800080032F100700801B0004E9 +:10010000641B08008000801F671A05002000004063 +:100110000F00040060002040030000000000000009 +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000005624CB7172 +:1008D000C0BD817B1300000000000000000000008C +:1008E000000000000000000000080000F008000008 +:1008F00000000000000000000000000000000000F8 +:10090000000000000000000000000000017410184A +:1009100000170107323137047F072B4139420303A7 +:1009200020201C10011E0509FB2C091E3EFF35006E +:1009300084E6FAE98950E6C405080A10570F0A4010 +:1009400001010107040428C01E64262680800000DF +:10095000C0535B804D4D0140463CFF00C800C800BD +:100960006F03B706649600000000250AFA00C8006D +:100970000000370400007F072E00FF1B045802040C +:100980000A1E00FF00C800FFFFFFFFFFFFFFFFFF81 +:10099000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:1009A000FFFFFFFFFFFFFFFF013C00FB031E006195 +:1009B000070000370400007F07120701006400E809 +:1009C0000332000A0096000A00002C0180031B007D +:1009D00000FF2F01FFFFBF96C0E80300FF8080806B +:1009E0000000000014000000640132210C0C0C0C0B +:1009F00000310DFFFF0065010100060601010065E1 +:100A0000010101010302210014000000020001297C +:100A1000022100140000020200012B011C0014003E +:100A2000000505000227811C0014000009050002D2 +:100A30002980140014000000020001298014001411 +:100A40000000000500032C0649001400000102000C +:100A5000012B053F001400000705000228053500A2 +:100A60001400000C030001250535001400001003DC +:100A7000000127843500140000000200012984359C +:100A8000001400000002000129040404040404040A +:100A90000404040404040404040404040404040416 +:100AA00004040404040000000000001C00181818CE +:100AB000170F0F17170F0F0F0F0E0F0F170E0F0F28 +:100AC0000F0E0F0F171718000000000000000000A5 +:100AD0000000000000000000000000000000000016 +:100AE00000000000000000000000000000071002ED +:100AF000000503030203071F000400A6001464019D +:100B0000013D3C3C3D01043A0001000200000906A1 +:100B100000000007020000000002020000030300C2 +:100B20001B39060000232300050201100C00110AE6 +:100B3000320A321420460A000A480A000A00401409 +:100B4000800314640101FF02050205031919000066 +:100B50000705050501191900000701012B00060012 +:100B60000014140005040023010001033B011020C0 +:100B7000204000000000FF0100000001000002030F +:100B80000D33330009A11ABE010A191560283C096A +:100B9000060000008A20F977221010001F1F181885 +:100BA00018181717171717171717171717171717D3 +:100BB00017171717171718181F18181817170000E6 +:100BC000313837302E2D332F282734292A322C2B39 +:100BD000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:100BE0000E0E0606060504040505040404040304A9 +:100BF00004050304040504040405050700170000A8 +:100C000000000A0B0B0A0A090A090A0A0A0A0A0A58 +:100C10000A170000000000000000000000000000B3 +:100C200000000100060023000C0C3333000309FF11 +:100C300080FF80FF80FF8001011C077D10010500FF +:100C400005031F1F000005050007001F1F00000609 +:100C50000101330006010016140005090000AA096D +:100C6000E00EBE0E0D060607050504060605050581 +:100C70000504050505040505050405050606080027 +:100C800000000000000B0C0B080706060406060512 +:100C9000050505050D000000000000000000000033 +:100CA00000000000000004030023012400FFFFFFF8 +:100CB000FF8C8C5151CD0D048810101010001B03B7 +:100CC0001D061404190515091F081C0A160B1E0E13 +:100CD00018071710110F1A0D12130100FFFFFFFF65 +:100CE000000102030405060708090A0B0C0D0E0F8C +:100CF0002324FFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:100D000000100010CD14CD14808080808080808001 +:100D100080808080808080808080808080808080D3 +:100D200080808080808080808080808080808080C3 +:100D300080808080808080808080808080808080B3 +:100D400080808080808080808080660E660E660E47 +:100D5000660E00000F00000000000A0101FFFF0105 +:100D60000102020201017F000200274F42610019C7 +:100D700001200300000300274F426100010102002F +:100D8000263200610001460C0C010000000000004A +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E000000000000000000000000000B9894DAAC7 +:1010F0006D7EBA57120000000000000000000000E2 +:10110000000000000000000000B801001011000005 +:1011100051E595CF7043CDF186EAE60603CF8A5AB2 +:101120002E0EEE992641150834CD2335EBCA46FB29 +:1011300068A02A6AA6C8D4B9D4E219919D14165998 +:10114000AA531B6C44766BE963FFC0ADE096D314E1 +:10115000EA0B816D6E5460B510B3DB8916B7D3D23C +:10116000D9349562135782AA3A41F6B8060FA6758C +:101170007A0BB84660EE16D30FD59DF3AFCE8569D6 +:1011800090BC3E07B274DF4A54F92FFC0C26F12DB7 +:101190003FDE5858C6443F05D9050316B4941FE6F0 +:1011A0008C6A162DE59DB29CFA02D48CC06F25295D +:1011B00073B72CBB9A36BBE51A5B4DC94925D97D5F +:1011C000A8728747D7B61220BD59338444B28D80A8 +:1011D000736D58BE134A385AE5A24BDC3B2EB46BF4 +:1011E0000916BE035D94A868228CE7E3EED8533C51 +:1011F000F3AFAFA43D495F35E5EEFBD144850190E7 +:101200009072026E46E1644B4F7C1DBDFA3AE208D3 +:10121000DD867800111E5EC47906164EA35C70BF91 +:1012200049D32DD272E5CEE929AE24355057CEF000 +:10123000AA653441E17C54CA3C07D55336DF9FD7B9 +:10124000C812CE0893B76C54AD50E4555A8F44037E +:10125000B32317721A059AD6FC420854E24BF4974E +:10126000E89E19AF1AEAA577B66ED08AD4E040CDD1 +:101270004DCC888FE77CE9AE959A5CC002958CAE28 +:10128000B0708B4A408F4DF5517AC7FD198AA61E62 +:10129000B70858D0403B7D446408065688E3E4E232 +:1012A00061264C8BB8C409640E3F8F45E293A49F1E +:1012B000AEACFB93CB4CA95AAD3A5CC4EEB330FB59 +:1012C0002027F14FF7EDD13BB253731172221B0867 +:1012D000D4B99F1B0C51EE43AD215931314659A968 +:1012E000ABF513EADF76CD0B7D1FE030EFD90E3280 +:1012F000E19F7D103A4121B1F9363ED30AB3997688 +:101300008DDAF64ADD47563CB2023ACA8DCDF86F07 +:101310002C4FE4B1B97D792B9F52F336D397A4318A +:101320000248A22440304DFF1F0C802958DEB1EC4A +:10133000610402D5DF5E55832AD2530659A588463B +:10134000A70AB663EDD925DE021DE7BD8551A901C7 +:10135000A670714F495C3D57810A32B37B43CAAED8 +:10136000C29D4497BEE5DB78801E913043E432791C +:10137000BCD826BAB70716F4FE05A257742CE8FAB3 +:101380004265B3B43A0EC601C3E4DD61C1DC376B1C +:101390000D668BAC5AFA05C4ED73A644A19DFA0DF7 +:1013A00017A05259424D12FE6A42F0486B396095BF +:1013B000011734B826C7A30050E121071CFEECFE3C +:1013C0008DA632691094D5A3B0892BA0C36E5DEBB6 +:1013D0004F880AC2B8EB0F5D380F166677E4CC77FA +:1013E0002E7026AA785D9E922D4458639727B133BC +:1013F00025FE23C53DD45D741508A2D291DE4C3B79 +:1014000028797579630590A812BA7D786D020C94DD +:1014100055CA48794C8771A0C8EC44578C0809D646 +:101420009FD1FFC76B6F54F16066DAE2D3FB62C5F0 +:101430008F11831007962500EE926C61ADF541ABDC +:10144000C79D798356074471CDF4DA740A0BC254F0 +:101450005203A9EC403F1EC8E40C3C620E8C5CAF0A +:10146000766019A62AAF51D9ACD48B440E7F83DDA8 +:1014700022ED45C17A9481FAF86EAD269BA597D6E8 +:10148000654AFA0D1A6F28B1BDFF65F46812514222 +:101490005996A1670A8B52F83C34F35731A8C0C65D +:1014A000D5BB46804FD06C208A00BCFA684ACF5624 +:1014B000EC9DA71DE5669F77461662E7DFE9676347 +:1014C000A9FF3C2C08F05A035347B9BF29520F1DFE +:1014D00083A1492164057E74CD2BB173335762EC2F +:1014E000FDDAC7FFFABB287B23E566CCAA85076B2C +:1014F00017618EA76F6CBDDEB1802B9F0498ACFC8A +:10150000A38FE1278F47A78CB898ED666FD072380C +:10151000391E3C1BEA29F3A6C696356BC7F03D5B26 +:1015200008E594F695D54B86CEDC7DE5D7077BAEF6 +:101530006879D55C2AF738626CEB34DD2417D33B2D +:1015400007009D3DF05465787429D3346C32FBF06C +:10155000425CF50D730150726B56321428F7BECB06 +:1015600093AFC256F489A474CA509C3AB0AE77685F +:101570000C2625B9F6F52A6370632EF4A22DCB1242 +:101580009B100FBF99C011D42FBE5C59920AB4C4EE +:10159000551C4AAE0964B1DECD4FC87DD4F6115951 +:1015A00005033EED916AC6DC62F955ACDD1E4C01C7 +:1015B000441E9B8D68F80CA47A975D79150E23491B +:1015C000F9BCED80941B25ADCEFBC4B2FB0A92A002 +:1015D0003C10B05A8E5917924E234A437442CD0C98 +:1015E000D9FCEADE9E5EB9C84110F76EF25538208C +:1015F000985FE59564C0EB22038E9C79478BD2E718 +:10160000E99D1D696D0166AAF808538A5E5034256C +:10161000D8D967A055C01F839347FBA866C145145E +:10162000A602A0E1B3595D82FE499C77579E1F2E0A +:10163000AC3E0AB23E6031386B70AEBF408C87253D +:1016400049B046E87CF0B6ED2C50B5B669816A0B1E +:10165000FC38DD19E4D6FBB27D87A39FABCC97861F +:101660003BA54F7FC77842F8F6DCF3E063C0BA3A97 +:101670008305EC815FF7D7466106521C896DB4AAD9 +:10168000026780B868523CE8DF9A238C489BF2C01E +:101690002EB88D33200EFBA30A65A58B91DBDFA846 +:1016A0006993DE02E76A28C5FD89D2AF9BC8581F3F +:1016B000DF7310D72B450669F5FE518914695D5318 +:1016C00047942568BFBC418930C91D3DA23D7101C9 +:1016D000534BC9684C00394AE1FF1AAB12470F78E7 +:1016E0002AAC4AAECE62544E2634E4C4708BE7F680 +:1016F000FD841B2074549218661F1FC77FEF96BA93 +:10170000A6CAB0E4D398F67DB642F8C7D1574D4A81 +:10171000EC12A3B6FDBF1725100AD50791DCA8DD92 +:1017200064BC2587DC74F8BE4E20B7A15AB780028E +:10173000995EED341BB386D9382E284FD5A78DE599 +:10174000543FAE6A934EB5BF019E73F441D52CC988 +:1017500080A3AE8D7E1E95EAA632773BC1E843D3C7 +:1017600069C8DC3B152D1C09166185A0CE7D3B1D8B +:101770009C456181C44A934EE21EA9D87ACF2E308F +:10178000E2B1019CC99F5680F590753802CF5C9EEE +:101790003F4FAA3E67549CD681A84B7F3BD20E5345 +:1017A00042E1B8D5FAAA3C5716C006E2905B160C87 +:1017B000C3CEB672BD8487114746191E60D3FFC0E1 +:1017C00039AA2FDF638170F60686FCD35A103725BD +:1017D00042FE1A7B1FF657242F655C02C56D60C65A +:1017E000F11425B4656605CE5A9E6CA80459881874 +:1017F0004D3FC7E6646F2F955342ED0D60363EA90D +:101800007FFBEFF4E48383D19DB3299C63DFB905AB +:10181000409FF7BEC505AC332979E974F6E7B16797 +:101820005F01991B67B9051D5DE19725E35EDC5BF0 +:10183000C91D632E8B567642CA9B0BAD484CC1C264 +:10184000BBD853E5B69C7E4F9F13806B0C3752A2DA +:10185000B601C4492879780B0B2B0C047D0652F78E +:10186000A47ED142400BA90F5634C4463735FB85C0 +:10187000A11425AEF84B4BEF2F6F5C6685F8A0FAEC +:10188000AC2087CE1BD2D5CDB22DA2B0AB65A68F32 +:10189000BF801FCF1E3D06A43B903CF90FF46C4E59 +:1018A000CABF765E564787F1F8AD260F062EBF2FCA +:1018B000372044D5E960D7C2AF0FAFD4122B4ACF3F +:1018C000501EC3C5A0B82B20AE1547B163C4BEEDF2 +:1018D000288F685CC41537C147AA27D18B8E8EFC30 +:1018E000F6F320AD610DFC13E37E4DD801788C68D2 +:1018F0002FFD8E309F2C4A7AB71E0DAEBCB513302B +:101900009C8219258BB89056EB56BDF625E9311906 +:10191000477F7250A1AC13A8EF3CDB6BDB8CB28E1F +:101920001685371CB1D28160A2D85A876714EB3470 +:10193000E9BBD4C4213FB7FEC7FAD00DC7BD2DCF38 +:10194000DE69DE8E3110BAD1DB7B02A7841243D967 +:10195000847454825DEEB133924273DED8DE2C4C37 +:101960004F0D45589577C93F49B0D0E62B77AF5E0C +:1019700097BA745CFAE64AB787A70BE6039A09F4AC +:1019800080FA9B5581559DE0DB9560CE22D3E8AA75 +:101990000F4EFB03220E8D899D5C46B956BA72210B +:1019A00090449365ED1ED5BBB531B6C96FEB658D1F +:1019B0004A253657E5030DB4FE4D7420EC884C05DE +:1019C000D3116937E4BF1FB2394434220E9E45005B +:1019D0003EC3A72A0D6FA1913ED82E9AD1AF2D2FCD +:1019E000B16C5FB6855E230FDF6B7A5639853CD2CA +:1019F000A81FC6918408A1B2AC598AE114BFD17363 +:101A0000166E4F4F27F579D8766BFB7C9A9AF4C700 +:101A100087162A6D69E308D2521B32D9C2B4367ECA +:101A20005616C414AB35A3DE8DDEC99279009D69CC +:101A30005916BA4A8BF8EB4D20840CDA961AB4E4A6 +:101A4000295E74548720DD5543123289FD3CFA2407 +:101A50004B4D489F4D2C3670FC4CBAB6A0507D7251 +:101A60007A4699751E345C103D525FAFB28384573D +:101A7000A4A525163FBD3A805418DE8B8B3CB0D60A +:101A8000B6B179F5D5E32C6D2CE51459EC30F89806 +:101A9000DFD6AAF99DF3BAB4F10EB8A43883299E13 +:101AA0009F0B6D7E9DF7BBD478E4038291A3D4BCD9 +:101AB00072881337E2A5127B2EE777273C84D61C69 +:101AC0009FDD793C500748EEE821C8E22B94460C94 +:101AD0004AB84D572F9D3337AF0F094BC179EA16DE +:101AE00095946FEEC023585295D6D77BE3A0D9C307 +:101AF00021D009C66DCB2A4F4B9DF796AC5A8B98D7 +:101B0000D1FCE3DFAE8308FEAB198BE2DCDFA99AE0 +:101B1000E5C29A7F48A8240FBDEC8F74AC462F9F76 +:101B2000F4F3E541434518AF3D60A7A649D574F2EB +:101B300049B8C0BBD8547BBADDC511E9D401F45D06 +:101B4000B954F6F43B25EBFD9C3F6D4958BF451C4D +:101B5000918AD7C2D1CCB1BEACF0663388D62C38CE +:101B60000424729B0BCD070CB2F155DAD642EFA6D6 +:101B7000341B0F6AAB9B7D2369EB24A2953086EB67 +:101B80002CA189CCC8E62CD44548CE54425A5316D1 +:101B90005DB4AAA2DC6D3CE026FD5872DB64A2E0D5 +:101BA0001E386357252B56DF09B1BDE6007AF17761 +:101BB000436AA613B09D8B5D953DE18C2394EBABFE +:101BC000768D60B3DE3CA1260C6DDD11A409806F1B +:101BD0003908E77FDF8F38F6E51289CA7D0F207755 +:101BE00060053FA3A193038B0E11720AB437E56918 +:101BF00013A492910D1F6162874ED645BC20DC5420 +:101C00004F3FE2DFB8EBCC5F43397A846A59D92B76 +:101C100030FF53021C4A4F3F43E425EAA88282BEAC +:101C2000FF48E7F11C9F7D0F927FC46A6A83EC68CE +:101C3000D8E78249C9AE2B119C1C891016CAF7A897 +:101C40000096ABC29F4CD386D05B0D36A5E6B64856 +:101C500002A6DE30152F8DCBFBD6096C79070B4C15 +:101C6000660AFB841B101EC222C5C62145A4CFDC18 +:101C7000619C7D735A7D959ADD03A81FCB2A74273A +:101C80005B4FDB507A4383E1F65B05060E0194B4AB +:101C900098A00CBC47C139D575D58C548020815B88 +:101CA0001AD45D0D57B5BFA772E7DFE202D605571C +:101CB0002EAF749964ED701AD6C598ED10F0426C91 +:101CC00033E031D981B8F165B7CEB873D8F0A59EAD +:101CD0005B5B933B04F6B0D35ADB9351AA8F3283FC +:101CE000C9E03E2B5C76D70C62EEF5A5477072A278 +:101CF0007A92D681119DF38029386E81A3B0052098 +:101D00005C73DF0056F22F92417034082575135032 +:101D100030CF4C10E4F786962E077AC9122545BEBF +:101D2000BFFB1A24C3BA69F36B1C9BE60306CF0101 +:101D3000ABF65553C5016F430958567AFC13EB6552 +:101D4000CAEC138D9D0545A96D2F4B49EB6C8006A0 +:101D5000A395DDA49D0C7E7E312DA05779A9328EEE +:101D6000234B14EAA3F78ECFFCAE6A14FFB73C20D6 +:101D7000C279E1DCE57F93F940BBB4A221B8A3FEB0 +:101D80003CA92C3A0E3711138A871E349D0B7EC74F +:101D9000154F99D4EF721F52F2C5B122B00DBB7529 +:101DA0006EFBDEA274C2FE03221B348D1B39C86594 +:101DB000D67A3AE6DE7B946EC6715648A9AC3AE014 +:101DC000B84071FDC1A911EE9D50B494C4AF4B87CA +:101DD00005712C542AA89D9AF1D878A67933BA4572 +:101DE000A48EFE1634F69EECAAB1D7A7B9CCC6DDF8 +:101DF000BA8C8F506E88F64CA9599A3A4B7699371F +:101E000004D3A997426645B542B42F59190B5236EF +:101E1000B1F53EF2C13504EA895CCE17A23FA4F9C0 +:101E2000A93A98AB0BF81A1E3E9E4AD21AB634A7AE +:101E30005BAA56B8A03F6A0D043BB4E545F1C91250 +:101E4000C67B714439F55D2BDDA56A83DDB8D031E1 +:101E5000CCB2C25371411B8FDF8C3DA9B57770CED8 +:101E6000821CD9CFC1B807B37EC6B2A40BCCB5AD26 +:101E7000A5A70AE5439B0858DB0831B701DCF477D6 +:101E8000F7DD19F4EC2E3314E8DAE3FCD0B4A54402 +:101E90009D458F9599DBAD57BC7646369C052BA2A8 +:101EA0004D2AD8BA615CEB334BB6DB2E2A9417E887 +:101EB0007514DB6F963074D5F7E125098111B4F6FE +:101EC0009470987F09F64323874E0D81D41B081721 +:101ED0004D31A9B696D678D25A47452412BEA52DC3 +:101EE0006D4798571D9406B47CD6962549C159D0A4 +:101EF0005965D41789306B5043A9CC2F8C64109C42 +:101F0000560C28F97710089C9C29E46F602703067B +:101F10004226C3F26D27338C44FFA6059FA20A62B6 +:101F2000830FBCE5C44BE5005BBB9F97D6B9E93E88 +:101F30005F0DFD14DA1DE40F61D3F3AAE046A06A39 +:101F400045833D49453042F0070E283DAD51ECB088 +:101F500069B8FD9B1D0E6BFE6E1F48B8D5845AEC08 +:101F60004354FDAF95DF573E29CDD4D4CC99EFDC57 +:101F70005E310383C2E134DA91A26B4B38E5408FC6 +:101F800089B2A2866B05AB29A67D57F4BD73FC67A9 +:101F9000886E74B4E85A689562F56264F0EB0937AC +:101FA0005BDB37973FBE0958EFA4CCC455FD307DAD +:101FB00021FDB1B90E9389D0DE107E36E34F6D2539 +:101FC000F7CCBE2A0906B0CDF183173BDD35D847E3 +:101FD0001713A5EE13F699C96A8A7EBB245ECD97C6 +:101FE000C6838730EE60AC50B5D7FB057C227763A3 +:101FF0005068C8A5F03DFB8F9D1BCD72F7C6A5F7B5 +:102000000C8D38D089EAA661025719E124C64BE944 +:102010009AB86D7666546DAC711E63CC25427AE138 +:102020004AA2751C1587B58F8EDC2E729E0287AA78 +:10203000814FB65F7AB86EEC377D1582980383E5E1 +:10204000DF371DD1EC89DE06AE8599F2DFF8B4F1F9 +:102050009F5976F06C04929936319B8F2166BC5B58 +:102060007D82C1E75185AEDBDF234C2A1771AAA020 +:10207000B6BDE701A1DA5FDE5CDAAAFEF48C94CC8F +:10208000D4D3BE9849EDD6F3EF756CF2824101BF0F +:10209000C0094596425EB82C821FCB70D7FFBD7A2F +:1020A000280CA4ADAF99A45361AEFB52EDDB1AF638 +:1020B0004AE8D9CB58502E8A300D9F78628BADBD3F +:1020C000F8400BC18E8A9AE2BC7264484B447D3B57 +:1020D000BD9E08208E3A38E1193E0031519AD15206 +:1020E000A86DDAEA930426D2A72B08D5862E98FE8F +:1020F0005E67F1F12C1C1786F12D546AE9EDFA5850 +:1021000023CE1009723A2D529DB273A00D64A7C55B +:1021100052FFC2DF9DB3080F6914FB56AC4F62E952 +:10212000AD70251DF2CFA9A537C85167B304ACB572 +:10213000E64A8ABFD6463B415C82493A6AEEDBEF0B +:102140005F3639476F0C747371A2EDFCCCEB10F461 +:102150001E7AD12BEBE5CBA31BB287E17EF6AC5BFD +:10216000F4DAF14081C313EA36C156AFE9EFE14733 +:102170004DA3D65C18AA502BFEB813B65BE56F9B37 +:10218000D5EA8007628467891F1BA872358F0E2FDE +:10219000246F834A4E66F7A128790A61D44CB63978 +:1021A000BB310D65A8EE6D1CC261EC61B1C37DF65B +:1021B000B59EBF9B1B016EFCF73070301CFDC9D172 +:1021C0004368264845D809ACE1AAEA15C9470B324D +:1021D000DE9E28FD2214C4596CC8849D6A2924B54A +:1021E000D28932BC683C8862C1EAD40433C82B600F +:1021F00002E34E63DCF9988748050A23D05DAEE818 +:10220000D97AF65FB2407B6EB73C7BF691C57F43CF +:10221000A27919D20CFF2CD10930185EED367F342B +:10222000963D31D05C96F72072BAD75DF2D724FA8A +:102230007D28B1ED4C9798B107EBF44BEB60E2D2FF +:10224000EE95EAD7447C3B66DAA2F3041D86002BA8 +:10225000ADDD9E329260F3721F4256E673798804B8 +:10226000224EEC71D4E3D110F7C46FE392FAF53C3F +:10227000D2C99A8AAF14763DCAB94DE02EC8CC981F +:1022800045C8226D5D9C32102D5537E7DD4EFBA20F +:102290006529F69B73FAD7118827D1A2CAF87EBAAE +:1022A00028A05281A8D7B0D559FFE82C2E2178F26A +:1022B000C5668227555B48D59C4B79D776B516996C +:1022C000F2244CD8DB2E8808B89DB0C3D455B9424F +:1022D000BF2C112520AFB8E931E8D1985C85CD132A +:1022E00026AE36D33954BC8A4AF7F5B137DF4F579B +:1022F000DEAE13B3B5E2E695BA765C8F953481A075 +:10230000475616B0AAC8F9479A7750478B28F8174E +:10231000F3C2AC458D136B9C3A5F490882D75C7B56 +:10232000D081E9D6DD0A20964E249B2CDE58B73AA0 +:10233000BC1960C4C6ECB98F1C52538E6D5EE3C5E8 +:102340000E0A5692D7AA8C80A33AECA66EDF7CCDFB +:10235000165E04329353A2091A2703FDAFBC6B1E0D +:10236000E34B4FBA9C1ADBC186983B52DB88B2051F +:10237000525CE684C4229912E4A1D005AFBE2C8B36 +:1023800033E5BF5ECCDF13D6C8910A08E5909F788D +:10239000A758BFCB19877CC7C100F6AAE167926F27 +:1023A00057B0EAB75BFA117358E0F4F03E1C51687D +:1023B000500D082578F05ACB02B34CF275BC25A11C +:1023C00000F7280145A610150FD2D19E1A26EC4819 +:1023D0000D788CE8A8677078958ADA1C458C6C9328 +:1023E0003F70361FED655795412C9948AC1E6A62C7 +:1023F00041A9A04BE11CC19060F22154EEB8862B9C +:10240000E59854EEF2D87165F7CCE6A0A3D0BE1AD9 +:10241000CE15073AE22CFDBE08282792672EAA4265 +:1024200061F94A6AEB70A4593C1A936A562F54EB2F +:10243000A00F10BA848062E84805A8EDD14FDE9065 +:1024400005BE825F1B33512837233E349512E3F0DB +:102450002DF09AD90714E1F044FD349BD900D1E264 +:10246000749C46B02D9F350A6367CEAB1BF97C592F +:10247000575010966A7800477CE2CF214A52389430 +:1024800015FA026ED0D5F5E5E152AFC2895354B0CA +:10249000BD16F0D27234A8B403D9F476B3FD51AFAF +:1024A000012A3C381B11E93BD05BBBC38FF93DBF10 +:1024B000271707864E4609894DCB7318B1612195C0 +:1024C000A2233FC78EAB692EC198553CE5C058CBBF +:1024D000D32D4940F1B59843D197555E8A6A4BBBDD +:1024E00083C804559D56F13546F2BD9FD480C5CCB6 +:1024F0001DE0A14F6C034F45188596E7AD18821F6C +:102500000E4B0100DC60D5CFA3882840420327F39F +:10251000517A0BC95D8017BC2F240A68F60363A0AB +:10252000339E4D007C8A8BBDABBAAFE9F204E289E1 +:102530006AA3132974AED77081D343A5E861671FDE +:10254000EAA2A7E11FEC1683D66E14468310183951 +:10255000A28ABBA1545F250A17A808942CAA7092DE +:1025600058F547B52E1258F755CC19587C23BBA9FE +:102570001BE283053FA5C55B9193AD4E9D4738A0F7 +:10258000EF90529FF4BAA8D0D53D2877E569654F02 +:10259000CE4EF50C783CC2575B8FD60D8F7214D996 +:1025A000738B5F15C2C477EC33113424935A2263C2 +:1025B000635532FBBBF60F9535E5A033AF291855AF +:1025C0000F54735433C18F34D220330C659E7E6C0C +:1025D0003A7749D5F33796D7069A915AB9D9882FC1 +:1025E000ED916E3E89A5A73A0C0F751D53CD5E4344 +:1025F000FBFF6B135926087DE3F502723B0CBD47C8 +:10260000934B63A761BBBAC469680EEA85D936B932 +:102610001887F0B2075EA96D08742BD16EBDFC7CE3 +:1026200049888476A44DCF35847B5E6A6FE27271EF +:10263000489990561D17CFE36C40CD5BA4EF27C59A +:10264000C16685F8B5A56131555B2130409A4B3C98 +:102650004DFD06E5739C99E1356290FEE662541FDC +:10266000506FA26DC7DFE12B0C978D9723AB2542EE +:102670003BEF630F09D6D3A7BFFD912B160D5EED7F +:10268000B5C21475B7F3CD9D8D222E98A35E9177B8 +:102690002D371FE5A26D9D364B868BC9CA792F7FDA +:1026A00030AE5E8C0724F4E6F75899B96034FE79B1 +:1026B000ADA4101D5C23BD7C80F505B78F3CF702EF +:1026C000C5C11590E9D97AA6E171073A0BDE4E89AA +:1026D000E618F30CE2002AD88BAF3EB64DA5C5AB89 +:1026E0007DA95C136BFE9435D11F655553D68EDEE4 +:1026F000215C5F9DBFAFA3188942C24A24339F2A41 +:102700004256865952B22BE77E1C10A66D20F3A8C4 +:10271000FA1F6C35DF1316987F19CC19DB226D0F69 +:102720004C7A2442410BE12350335165A666C73AE7 +:1027300004478AF3B14228D1812276A23DE34F1E9D +:10274000140064872AD008D7BE863E3480EEAC40A1 +:102750003F3452D1C468C26A13F9211FAD05D6F9BE +:102760007A7F0E30EE8D52BC5A407BC0D43F7B390D +:1027700098BA1CA21D417C079DED5785C962A9D757 +:10278000ECB17E5FA9974F29E37CBA95CA55A5F3B2 +:10279000440DED85102CDA009280225AAF41E944B5 +:1027A000398D23619F1D65C80E8EB8E72E78782C71 +:1027B00022B07C96B64546E117C8ADFA4D87BC9C61 +:1027C0009DA40130CBA4E38398C31F825521E62644 +:1027D000D84422D7932F0B5D114D01B25A90A4A279 +:1027E00046A617EA0ACE460754081B1FE102CF3A55 +:1027F0003880BB8B58E294A7B2EC13C8009256DB2A +:102800009519AA735E05F008F405782B5C4BAD7A38 +:102810002B4C7670678C67773539420FB839278132 +:10282000E4ABD4E6E04C5DFC69C90804B15305E1B2 +:10283000A61D0DF7026EA0B37555B2DC708DCAE609 +:1028400080310EE5068CB1DB57395D1BC04C2D4144 +:102850008CE7ED29AA0DA707874A6A8C2D8E936C09 +:102860009160F47C1864465CCD81364F0564932BEF +:10287000D214C0754EB03819B05C4EED9DCFD0501B +:1028800062231C24340299ECFF42D42233BD14C2CB +:10289000EA2EB7EDD9A6DB1306D7016D4295DC54BD +:1028A000B6304B31AC94057EDF0A20F1AF94E7ECF3 +:1028B0002D18B97B3C4C7659BCAF19649CA5EE8BA6 +:1028C0005AF3A551E9A9CBEFD43887BD8CC0DAE71C +:1028D000C10FACAE204C3297DB94942DB58F2ADF1C +:1028E0009172A3700A216583121E2DE46039B1EB49 +:1028F0009FAF600356BDC4F53BCCFE92FD6AC9464E +:10290000637A52CF86796A5D242E17F79E90ED6424 +:10291000FCB237383A6F624E31B95ABB36797A79A0 +:1029200041698F0919E7A894F767F101D407037289 +:102930008AEAB71F1C5488F9E85D73A2ECDCCAC0B0 +:10294000ABE46230FBC99EC1A0963C4EC1A7BDBCA2 +:10295000AD82D573537E87409D699D5510C9F41F84 +:1029600007715809BEBAAB25207834D9EC547D469E +:102970006323A3E5E9345A2E590BF9C4DB0BEDAD03 +:10298000D50AC20D06E43CFB67AACD5A0583424E28 +:10299000AE6486CB9AA2B0A8A894DEC9DCAA27BDF3 +:1029A00020852B33A6A936A79F03D5E03E23B6A3E7 +:1029B000F7850D42A0DFA64F781789C2BA92297D0C +:1029C0004BDF531C6A900BE911C57CBFC80F865BB7 +:1029D0009F35DEC739CA0A99BECBFD1C570355A3E4 +:1029E000608D9C895C9ADE122B44E6FC44CCA3CF1C +:1029F0003D514465F1AD34CAED790E65C8D3D20CB2 +:102A0000CD1072421AA1D19953CE4D9B935B6E4269 +:102A1000ED354EFE1E2F4BD75E252D6C56AD5B87D8 +:102A200090A49D6D40B44D8BBFD8356358357D3C27 +:102A30005954F7C4109EECAEEFABEB18FED5C9723B +:102A4000A0B572D03774F99E7DBEC264F7F5982D9B +:102A5000337F4E50221DBDE8E4E79AA5816DE7570C +:102A60008CF192334F69FF1EA9EE367CC394DD01D1 +:102A700093409FB19822A12535DCA314BB283D1EAD +:102A8000C0429323D7AF329D694FD6A20DB6F8FA54 +:102A900070B63C924F78247B699274FBB6D080EE7E +:102AA0001BDA45BC1C29EA6033922F59EAF46435DD +:102AB000A6077F8CFF9042FA9355BA57E54C568C87 +:102AC0008C99321E4EA8F4D60825EEB57BEA5C58E8 +:102AD000046C83FF90B6A60E58FD3379602307CFB0 +:102AE000C11786AC140EA72CCAB6E8BA75B89217EF +:102AF000B843981264D82A81280B91215C32D8AC53 +:102B00006535CCCABBE61E0F171209E5FE80CA0761 +:102B10002E1EA29CBE011AF109D6D49CF700732C7C +:102B2000C69059DB1457C25121236636CDAF30E829 +:102B30005B855353FCD41C001AE73470963DC61FC6 +:102B400064000766260EEA44311186CA5FC58C5CB4 +:102B5000A066857F646CFDFF8C3773BB85AE9342A6 +:102B60007BDBD67F6C387B14F960F6BC71C4123EF7 +:102B70003DD87D814FF26D4C57C6E7D67F4508584A +:102B8000A6A89489D5A208806E69F857F3F996F53E +:102B9000582515C28F7331D8BEA15C90751BDDAD71 +:102BA0006C3A36C5C03D7CD29B58A74BC733B07436 +:102BB000D69545CF77E204DA0459CD0E42C7EEE947 +:102BC000785A093AFA4A23BBFE7BC01AA7097955FD +:102BD000A926F740C9503ABA518EE74B4D8448BAFE +:102BE0004E3BEB919CBE4754AD551BC624247D3E05 +:102BF0003327CBFA76B92D901E23C2FB5E2006DF69 +:102C00008C9FD6282CD3A7D58DB5DA7D78F2837A20 +:102C100058A0407DF9917C77FBC6517B7B185367A8 +:102C2000E1E036468B820F86BDE9C843A6FA8915D6 +:102C3000DECF6BE804A78DF648A34FE1C3A45F93F2 +:102C4000D03C885162351BFAD25B45987D9A33FEA1 +:102C5000016DC12FE8171C637E4F9A26ECD9395CB1 +:102C600065DB243EC073AC5FDFA44748BC85DB0452 +:102C700010080EC688310AE82EBE75B1CC7935CA67 +:102C8000AEE7CCEA6C4AC45C7433A14E8EF255BBFD +:102C9000E5A7932BAD3D18C2C63D84E5F99B67744B +:102CA000111313154B55672ADE744A5B8A905599A8 +:102CB000E95E63C837FF7B8179112CA5C3ACA261A3 +:102CC000E8FBCBB20BB9E97A22F192FB397D3B41AB +:102CD0001467932631032345A6A6799671D0B45084 +:102CE000F4EEC262052C6ABD242B39A0A4B355169C +:102CF000D2947D80934F98C07526B38C7F5A7165AE +:102D000077BFB5AF55D798FB0F0B1324CF2D1CC839 +:102D100023760EB35BFEA24EF893378DEC170A258F +:102D2000D2AF5B12B68326C9893926E6D39F2DED33 +:102D3000868AD5ABDA16C7DDE8177BDD78A1ABB2A2 +:102D400031A564EAF30B0AFA1CE3FBACC78CD3B4DD +:102D5000062495749BB302EBCD8E46158BB5237874 +:102D6000E64634C61B3B6867C506D279953F4919CC +:102D7000BA9D5535813BDDFB6FAB32E469E24A2AEF +:102D8000A825F77AC35B347AEE03724FCE01B5966D +:102D90005E394EAB1018E6C17337F267757504BA29 +:102DA0008D290AF4464C942DF0CD62082E941DD73F +:102DB0007CF3A48690E84903F91BA500C5E2F487DB +:102DC000383D41C2107346CF7E398A0152B36C033D +:102DD0003680091415B9A16A011D9577A2AC4BA7DD +:102DE0003C36D31F64845890505C0F9D7D7413262D +:102DF00030E441DCF724CC58E10C978E275A4B4F36 +:102E00008C4EFDF4841C117641CBB39FF356C864FD +:102E10009858A5C083B400ADA97B1FACBE334A1738 +:102E20003BEB9DF5420770DBDA44589FE73750DFF4 +:102E30004790B473145E15F32E6A42FEC7FC3672D7 +:102E4000E1921F6CE02DA3004254BF7EEBF7C6E277 +:102E50006FCAA807D3D6B12535CA7ABA06AF21C43E +:102E6000A86C5A3DEC1FF85F934F148AB6E3B01478 +:102E7000F8126B714BBA58E1D9C5E0AB785B36DA22 +:102E8000E2249156FC0C511BB381212EC84CE34225 +:102E9000D9A8119B7FAC7A6D245B5F66F4071EC6D0 +:102EA000C8E848B956B6D47243B05AF92D51783CA7 +:102EB000408543F1F9BEC37D4BB3DD80001FE3C302 +:102EC000F9FEBCD306461A0BB9E009E694734FD855 +:102ED0007BE1F2891ABE035108AA3E597B68D95D8D +:102EE0007BFACB91F5069940940D984D1EFF2A1D53 +:102EF000566DAC194EE515F5143C3E01ED76AB541C +:102F0000C101609F25C5A45FFB5465051F17C962F9 +:102F100091159200F2547062F28E06DCD78C819586 +:102F20005DD357DA2B19A1127E8CCD8EBCCDE9561C +:102F3000E09BFD5D3A3BEA995B8606D8D4C1585FB9 +:102F4000F3A877222457E7CC38EC2B3CAD48939775 +:102F5000207DB679EAD144ED04D2BF3AD1A51893C9 +:102F60006F068F6742A8A35D31043FE8DA07C66C9D +:102F7000942289B87CA920344B10FEBEE1751CBC9C +:102F8000A8AB033DA257C98EA2F36810200C05B26E +:102F900077E90C3CFB9C7818319BB512E6F305FDF4 +:102FA00041724F8CA96042B5E0C48A7161E5FF2887 +:102FB000763CD939F58F254BF13C5F52C0AB08F315 +:102FC0001EB742E8211DACF055CF2B10358B1911DF +:102FD000692AF4C3A13ED49119D148A691DEEFD15C +:102FE00074AEB316CC0C6C0B03DC6847E0B4367ED1 +:102FF000E0046C6E0D510768236E1FAA289EC41B47 +:103000009C014F92ADAACD2AA130172DE4191EE5DF +:10301000A5DC59FF1A63FD5E673C2EF1B7E7F3B8F4 +:1030200057CDCA07F93CC5F68C21C403424379A1A8 +:103030004727B5F8F4035D0EF34E4DA967DF4B3813 +:1030400015F8B3A8E91180A6B32D9F49B4C54F93D5 +:1030500039D94411FF881F0819D59846E48D3C23BF +:10306000843ED626F07F4996ADBD6CA1A5E182DEF7 +:103070002F6823D7C978DBD9B35D8AE1120952DB07 +:10308000022CC1909E8CD4EBE32490C811FBE5EC9C +:10309000B0B981775078547D86B01261F522CC5456 +:1030A000DF81F1E606C47B486848787C37977BA7C8 +:1030B00008EB17AC46D5821931F7112AA987DA280F +:1030C000153C248B305C665A8C7BBE2B4A209A5A66 +:1030D000E98D68AA44070303AB25E1C33403EBF78A +:1030E00028A0CC5FCF64D7765B353648D5CAE33F9E +:1030F0003191CBD639D1A5C39EA6E88E29A35533ED +:10310000FEF20478792F9F51E97016E3A016B627D6 +:10311000A2427558B91179AD888F3D03F477BF1E6F +:1031200089D35EDCAC9E2A51CA02C20A2D4036BA4F +:1031300051439EE8012B6D4995F6C1E4E55BC9C298 +:1031400028E7C253ED6DEA39BEA12D22E2A2BBCA27 +:10315000463515FCF8E5438939F61653E888DA0D4B +:10316000B0F026C25155341CC15B8EBA1DBBE0BD08 +:1031700044DB69EA68CBE2BC1EDFD5AD5DD5A34E6A +:10318000F3A167EE2DFB0547B858DC9955C68DBAFB +:10319000526F1D2CD01D0E98D2F29D07CFB1648ABC +:1031A0001F78AA92AF43366AC4D7AFBF9AA74A180E +:1031B000AB36F1A4B82609FC39D59B854998D122B4 +:1031C0001DB597BED80816725D21A3D8A70C4DEE89 +:1031D000E149B978B69D499A7A03649869F9B8F1DA +:1031E000C2F1382F93A96C9909F878DDA7B6B268B7 +:1031F0006DBF92A1593B461B6A83879C43C1AD3189 +:10320000139DA2C2DDD4EE46CBAC0B261049C033D1 +:103210004A6886056295A25FC4CA0CCC46FB8B0245 +:10322000D9A4D719BE59646D953E11E6733BEEC41F +:103230004472EE8BEB54F8C797E7E47132DBF6A3E8 +:103240005ABD8FB5F2B71B784D3111C7EEF61B7E14 +:10325000E012FD9135C30A0CE3407368CF12794F39 +:103260004B9ABEDA878BD78EEFB5607F7B5C3C765E +:10327000F5117ADCAC7D90CE421C2177D1B04CA206 +:1032800047655D07BFCFB8A718C770BB3160F3A90A +:1032900023A98CEC7FF17E99D270EC935671076D67 +:1032A0003D0121E7C8BF16F243045773CD7CBD35FD +:1032B000A83BF719C44A5D01B3F5207D728B3750E6 +:1032C000C70FFE40FCF991BB179BE21EEDBA1299A5 +:1032D000FEAB8AB776983F3BB48C40314FA23D9C01 +:1032E0004CD251CF9CA0BF3BAB070698E36193A0A3 +:1032F0006A12A80495EB63068DCFB5F0254579C910 +:10330000278A0829E80783E27BBC37F3ADF079AD63 +:103310002CA3154C46F1B5707E8FE180B5F366693C +:10332000B70D85227DFD7B59F5D02075948FAD8733 +:10333000988A9A4389F04DBF4FF23A1E1D6E1D26A2 +:103340006275C4259E56794FDA7C582E2EA6339787 +:10335000774A8D729A60CBB9554E014930AB490618 +:10336000F02043CE849BB023AB8EC64A1AB3C05E16 +:10337000C1C66FA602152F8211A93DB63F9952FC16 +:103380007E7F9A058EC80F2F0390E086C9E2E8A2DF +:103390007392437FDD7C73A5929E346CFEA358002C +:1033A0009183FFA783AF3968E8BB9DCA037CAD4A10 +:1033B0006A0FEF7A7E5DE156A6ADA521A343A7363D +:1033C000C8202013D999C1D7672F82F5088A6EB01B +:1033D000A21A9F35A21722D9C4E60CF2BAC41FCA9A +:1033E000500B2F29D8397F876CEAC8CD6E3038440E +:1033F000E0FEC1C4D0440988E35058C25A06C265F1 +:103400009DBAF2E063F0D751CBF32F0ABAC7D4E2EA +:103410008F9E0680C65F81F57A211C3C50474FEE97 +:1034200017A438EDFD0CF19E83809A0FE323994C8D +:1034300001428BF475CCB0FFA65D6ED2A500661379 +:10344000697D284612E0AD3F639F423E39EC61CD75 +:10345000034FCA3A822108F2BE244E71CDD6C575FB +:103460007A9A0F954595498E0CD8BDCA1ECA0D157E +:10347000A6989C2EFBACD6B96BD13644979562DBEF +:10348000A1BBC2B59502B4E8A8C2C1CA4A3A33D0BA +:10349000BB41F39D91CBC3063F9D8223AE6D51EEA0 +:1034A00016AA02271B96AC7ACBC12637AACCB54503 +:1034B00078880372C21C85A40604FE4039EC47FDDF +:1034C000AF963C283FA24FF779AF93350D6AC436CB +:1034D0004365F1E451EEF134259A291F214295D537 +:1034E000AAB9D9D5E2AE2144D7D7FF2319A5EAA9B5 +:1034F000C04BAB9767FE66EFADB353D65A9F04F847 +:1035000046CC172CBA49A584A8C8FB1472774F6D16 +:1035100064901872EE2FC1907BA36C464D88B8550D +:1035200043362402957B57FE0C2EE96E7EA8786CFC +:103530006C3D5D67F601FD1AF736DD9849D68118B6 +:103540009C7D178B29F3B8C32833DF32312DDB1173 +:1035500028FA44D4E1AACD19D8C887E0D1FC1E2DA1 +:1035600099B09C27FD8E4A411BEE3FC5C3AC891123 +:10357000648DC1882F881C1ADCD38A118DD2390E34 +:103580004AED7C5AE0710C4378488F0615D2CBA0E7 +:10359000CBD30D868DFE6E88ED28AF69F9A1937DA2 +:1035A0001667B475550504F883862CA1A89C778B03 +:1035B00031B76522275B1CD35AE5857B78E56DB270 +:1035C000343F418965BDC2465D606A7FDBFD3EB622 +:1035D000B1E14FD30C18F40D131CDB7B90531A0E82 +:1035E000F63076722FA591C0CEB9D223B99719DAE9 +:1035F00021913EC42F0F52037A14C96782114D13D3 +:103600005CE187DB221E99180E5486EBF3C5D2EBE2 +:10361000C1A62CC1F70470D5087C37E5134F6AD4D6 +:10362000BCB926BFC160D6F5B107CA2C0A07116E16 +:103630001D8C9E6220FE1B04FBB2BAACA23A66D976 +:10364000FE51F98319F4AE44C1636F1942970CBB64 +:103650003248F4892C36CD0FE52262BE0FB8C8DCA3 +:103660002455FEFD228F48B85F5E5A41D57D11A2D8 +:103670009F9BD9EE1889D97F91B55A5D5BDA6F347B +:103680004CD7409842AA842BE2DA1FD297A2EA8450 +:10369000540B6186FBE2575F5EC1E6DC86EDDC4BD6 +:1036A000126E97F6B593CF6303B4E6A44B9B2A7EC4 +:1036B00059142071059912C4ABF2797FA20A1C44F7 +:1036C0007A05170B6CB512B19A1BDC1ECCF6FFD92C +:1036D000BDE77DE48987B7BF15E32DC19D0BC48D80 +:1036E000B0DF15AE825419AA011904E0D81A266673 +:1036F00055201A75789A9DC2F2C823AA7DACBF45A1 +:103700007339FAC942E567A158998BBC80A6C5AE4A +:10371000B1BDE00198417E056B0487FF8F3DCF610D +:10372000D18A8A89D3DCCF16F0EBE17F852C590151 +:10373000295739EF6A5BC6FB40A91A291387E03F76 +:103740005724B7D71CEFC5C6CBED938F194A4061FC +:10375000BE2BCD14511D65DAB43D0B328904A40D86 +:1037600020D5A4BA10A08FEA5D7A488B67911CBA65 +:1037700034FF33A020E3CF1C3D65D3EC99D18416F0 +:10378000C351893525AE76255E95E2DFB9072783DB +:103790009482B398F1D24EDA51FC41948C91F67F29 +:1037A0000487F5107D7A976EB4AFB72F04CC15D58A +:1037B000A793EBF35CF5C9D39763F318D3A974A867 +:1037C00052297776995F2D2371283F80E9308E1931 +:1037D0004C72B42E431F0C662DD4DFDD135CB01E7B +:1037E0009E1CCA2A176EACC8DB91C9273B0473051F +:1037F000E7F28DF2CF3238F8C7E5C15A0C9B22BCF4 +:103800009EA0F7A0C88AC43624C17518A29983ABBC +:1038100097934982F01555308E400B4D1E8B6455A1 +:103820008950C4AA34D87C3A9FB6831A80D6AAF1AC +:103830005C6E4A41D36E9A59DF1CA362B4437A0A84 +:10384000EBF575752A21177EC6E4913E71292BD2BE +:1038500071271C40F736249E136D7F55E65367642D +:10386000EF5573529FBEBCD28368FEE2417354553C +:103870008DD15B8E6440A5D8DA60F3681DE86C39A1 +:10388000D4E755F3D1998229E62CEE260B0289C99B +:10389000030858292FC7A152911A4C7F516C6CED27 +:1038A0008832859F9A6B98FA3A4FCFD91D3152D6FC +:1038B0006F1C094146ED265987B496B97B31AF811B +:1038C000EED8E7DBF312E8E0EA49E17DFA344A7426 +:1038D0002778AB70E355446E328FCFA570DAB452BF +:1038E000F2A6A07BBE66ADA12159424C4C181E59D0 +:1038F0004B3A22F676B2E0CA3C0AF073264E842890 +:103900003E336AEA681AC8AD27E8AC1872B99773F3 +:103910004E606FCC824276B2F8530A05E62811B5A4 +:10392000D5DE36A1B52DDC8D72AF44496237DF227A +:10393000AB07F16EF2FD6A8A72853965F84D500762 +:1039400090433ABFC778666E0E08FED2BD9C410414 +:103950006EC99D63FFBF9B5AC984C293BCF38C5050 +:10396000EBB1736A7EBEA521655EAF6D18B50C77AD +:10397000302AD96FEA613B15FB1F3B58DD9EC01E04 +:1039800099765AD264A8A1A3AB72E60DC624D36E71 +:10399000EE68A2949D56F3EE7FA4B8B08137A3E8F9 +:1039A00091E1DF0941640EED3EA86064FA6925C427 +:1039B000F70B162B802C6F1F70661B46F338599E31 +:1039C00043D030E655B203AF755301293151375F0B +:1039D000C72C9F5F7E448D3467E7C10BA084D7E678 +:1039E0000590BF903EAAB16A32F6F9C5BCF2F1B0BB +:1039F00061BB59BD671DC145DA086AB144ADA56B0D +:103A0000E8E4663299A3A8BA9FA8C025A409A09D9E +:103A10008DF601DE5AA3EE6B7C2277AB174BF38B4E +:103A2000D4CB19026576DA101E801E39BBEEE39006 +:103A3000D0200FB1D171C3637EF30C6F0DD5A915E2 +:103A40001D1C7D5F9D3C0E945DA40728474D1DC243 +:103A5000E2C36C1872005AD40AF9A1ADED3A996E1E +:103A6000A074C6E5B8008231270DE079B29E2BC163 +:103A7000E17A2B67185F7BB5AD6FF919B48F1B889E +:103A8000371DA575E5E8BB63ECAFBF334BAE03F65E +:103A90009D96E2ED5AF5003D4A20A981760BB67954 +:103AA000E0734D47837C6B60B3611252D7985B160D +:103AB000B58941F45A342C6CEC9D6E04F30F797186 +:103AC00072E0EED0DCCD8A34FFD7C8763724821A74 +:103AD000309CCA33EA262DB7DDADE0F9AD0E5B941C +:103AE000F99A445E970BD5459CC130A49E8FA443A0 +:103AF000318EBE5C9C1CB72AE3B540E1F5E9BD18E8 +:103B0000CA8BA4795486F393B75F90DB969E61DAF3 +:103B10009EF4DAC71A685D3233D9C619BE323681CF +:103B2000ECDA6603DB8657C6639FCADC1C0B4CE2EB +:103B300099A1B5B22C826B12D51BCAC12C9719BBA7 +:103B4000EFC30F70A2D96502955FFEA6BC0F69C4D2 +:103B50003575EA24FF8660F8296571962D4D175654 +:103B6000B6E0A44D5E2626B4E142D1A793DBA6269B +:103B70002FB24CED8D21A233E863A3E835752A8975 +:103B80009F574CCDF7EF014C38036770C2BD61D22F +:103B90009902FA9F29281F9E45F486C0FF267D774B +:103BA00060EF8707C7004AC0996BCA9CD4946D50D8 +:103BB000AEEE40887E93583F24E4CCD0C22D0D94C5 +:103BC0006598BF4D635399037651B076D5A14DD812 +:103BD0006183B400E72E9EE6DF91D46139DB38D9EA +:103BE0003FF629645F37B7C90E2DB11BA3C48C46BD +:103BF000FE9D9550DC14ED3D3AB36F088EBB2399C2 +:103C00006AC8A6570B4EA54F4CAD03C5DE97966606 +:103C1000F08CBD786CB5BE6FB1829006692FAA9DFD +:103C20006E90BD365D8F2BC97792C0DC2B22ADC361 +:103C3000B9A30D5EE638EF688E752EA4591592E58E +:103C400056BB39282A9CCF04681356570FCC8D9B3E +:103C5000135A07509E71906C3ABD7F540B658CD1FE +:103C600041D9908FE212743FDACBC0C76FBFEC30FE +:103C70003A36F9451635B849B13B937CB20122E595 +:103C800031EFC3B28D9D14A9EBC067DCC333CE20E6 +:103C9000C852227DE51C2FF716478341159C7DC530 +:103CA000765C9A79D51CF59BE3CE9664142921CBDA +:103CB0005E03D1742F5B6B33BAC653CD183C93F0BF +:103CC000986EC21F7DE296C0BFF577DA658C7B9B4C +:103CD000756CE3D65B2165D0D473FA83FD6746A883 +:103CE000BA855B75046EA96F0C675DE0C9643E4FD1 +:103CF000EB1C2C4171A4AD870E4D6A5AAFC933B18C +:103D0000DFEA45E36B0584D62A1253D259FC73636C +:103D1000E364547991CB406E34837B4F8F32BE562F +:103D2000243D7432DAFA3D1255D838FF744397783F +:103D3000924406EC0EB328FCE8A5888FBC0B8FA339 +:103D40009457E794F91E19262FFA434BC3FA21CE54 +:103D5000B445CFDD7A25F8EE759672EBBABF2F72B7 +:103D6000C2C4D85D63761400FDC34E79EF2E85562C +:103D700079204B1342A1782018C3BC5434FC4AC9A3 +:103D800085FC24FBCC330BFD9D56782EC3BC446DC3 +:103D900030595226E76878B34AB735D76F89B2826F +:103DA000BD2870E1CDE312056A0CF84EB116D67F3E +:103DB000B420A523232762C5A4AF81B59A47A96F74 +:103DC000D4E6F339B159617AA5EF80F26F1B503513 +:103DD000DB6650B9DCD5E2918F98C0B5DCAFD13746 +:103DE000696B3980ACC20B04AAE389A66102763400 +:103DF0007604C8D132B81775CA83B445D230EB8186 +:103E00004F88724691BCC9CA288D1DF73DFADC9FC8 +:103E100096EF6A2FDD536EA6EF7E379F256292F7ED +:103E2000D84202CCD89DDE85E182453239F68958E8 +:103E3000C584AB21D324C2EB7F459BAEDC6A9AC319 +:103E40007F88DDE9E73E582BF085583C5BB25FA4E4 +:103E50009AE205F6359238C449E635C7D74A5A0A78 +:103E600040BA236D79798C7CC3CC64C9B515EB7FDE +:103E70004F961865DBC2583ED7DF6FA9BCD05120E2 +:103E8000BC563DFF904E1AA31B605EB35BCFBC8453 +:103E9000EFBC171099D681682DA06A9A6D5CAA872D +:103EA0002432FDF61AA9FE9739DC56138F9D1A1796 +:103EB00055539C38B7A7286C66826470D825F07C6F +:103EC000D432F7525BDC39EC0FFE28418EE3078ACF +:103ED000E454CE4C3724415C4AF02301A0ECD14598 +:103EE000AF1C2EFDA01390C84D058EBF6E55A6AE1B +:103EF00090DE1F443E6874AFC9BFE0C5F64642F786 +:103F000067A10C4EB26709DF4AAA7F84024DBBAAA3 +:103F1000390050807226679129943298952F05E3D5 +:103F2000AE757492FCE14EF24F0D6FF674F2A6C9B5 +:103F3000E5AA76B0E31044A8378DB2A10720774AEE +:103F4000C0DB8529AF1828430BBDFB829BB4FBF770 +:103F50006089F101805FCEB3C709EF812A5B48BB5E +:103F6000AB5671C4D191494D90CD2AB9868A6C4720 +:103F700017BD9113D8B43CF14768646E012E579C6D +:103F8000230123F8ED8AFDF2A74071FC90EA50C3AB +:103F900059198996B93B9FFE5E5528BE8C246D71D8 +:103FA000403D338AF7A91DC25B635CA083EE17EF27 +:103FB000579D1124406D4B52C76750E92A66D66F52 +:103FC0003DBA8EAE214CBB1D75891E9CCEFB1F4297 +:103FD0008991AC918E0D71FF60AA292F170106BC43 +:103FE0001D250F52F558581CE190822C95F9693D1A +:103FF0006EA2B1A4EF55A316A2A1B8BF2F4671C9F6 +:1040000077449FB124C20D7DE2F340C01CE53084AB +:10401000956C6A02CCD6322A0960A07536B99BB776 +:10402000DBCE99BF11D3D517A172A5761C460671B8 +:1040300086B5AABECE373FB3DE76A3D64B751F88B2 +:104040009BFE5D0940F8F0C5EA99B41A7DC319B228 +:104050007B7DD8FB273BA769C6C1EBF439009B1CCD +:104060005330F01204B809761ECD04E157FEB6FABB +:10407000FD87DA3FAED97E06BEDD4B7C8BA573870C +:104080000CC1E92836298350BB21B77FAF379DD1BA +:104090003FF514A36EDDEF0483D99FBD10BD82E60A +:1040A0005B76633DC6B1AC5B17E82CAD4EB11E0725 +:1040B0006C5C2C1F417D7C4F70DD07599E45FE3C9A +:1040C00093D5AD5C22EAC9EF35A80E05DF46FA9A12 +:1040D0006C5EF7F720564033921CBD2820072F2432 +:1040E000A9AD96F1D7CE14ECEAAF40FF4700E996B0 +:1040F000ED1602A41ADC8D84474070788AD455EFFF +:10410000089B089649A4E636E3F8F7EF4A0CFD87CA +:1041100016A58AEFFB3540ECA1FFDA092E6149FEB6 +:1041200061C76D853052350404486C3918C8F6AC47 +:104130003FBEE7C6E5B531EA3A7F16057B35CDBD12 +:10414000C712B76D8C8DD0872A1045EBFE4BC14945 +:104150001047CAD1B2888F333EB05A90B2DDC3BA8D +:10416000DF18399D6F292D9D23618A27D481E17540 +:104170002FA7E827BF6F9AC48D709C9894706644EF +:104180004FCC1500C977A5FF88FCDFA02D71EE5438 +:1041900063B61DBCA499939FBAC2E77503294A4D23 +:1041A00065B258D63DA54A1FBDCDB876E3DBBB6FDF +:1041B00051037742449DCD7C4DD7D0FD316A3AAF53 +:1041C00073E1DA497D91CA155E14E94E833BDAD773 +:1041D000A2336D08F0515010E33D003B8DA29F4982 +:1041E0008C034855CB629A7DFEBA67B39BCA083FE1 +:1041F000356455F2C801A774AA6C2C9BBD25BB4F32 +:104200000C701F4A9349256C44BDA800EB4BF55C2C +:104210000D1969E6E8633C17A4E112B02CE909CE58 +:104220008A7287D5FB37101A80D97E146A8AB6FF46 +:10423000EFD623FFEA34230FBE97283A38170CF83D +:10424000F0196A17DFA9EBCACF292FF3566CECB629 +:10425000BD45B8127FC2D4A0142D2746DAE0BD8830 +:1042600093BBAF47980BF6DA585E10B601A15FEF2B +:10427000240072C1FB90F6A95586C9D4D7E959CA62 +:10428000F9AA03DBAF3BFA69CC04A184B52FAE30A9 +:104290008DFB5392F2CA32B0F25A1D4F9B8F90E4BD +:1042A000065B5B5C99F149F30D2103892692C6D721 +:1042B000E6B4BA4514E29693B7337F077660A1EE71 +:1042C000CF5C4ECA3508A353D081D3A33DB57B0A3A +:1042D000A3F753A30DBB6824F2931F2FC28A49C9C9 +:1042E0009476A258F8DE682FA3BB010653EBAB57B8 +:1042F000DB0D359B32A0B525CDF3B82FC2CD36FFEF +:10430000D5F61792D8F670564F493E56C183D72539 +:1043100005DF7EBD68D70BD5F76348B4C98B5270F3 +:104320000A7E4DFF3532E9B566BF1C9308AE1F25E6 +:1043300018BAF7B9025B7F924439E92F55B0006093 +:10434000E91A18AF78E409432A41485AF03998C16C +:10435000A70AAD063F5DA2EA8072FC1DA7B7A73988 +:104360001C292E3868C44AABB0A0BF8BD1D3C4552A +:104370008573D63860636B1251B9E3DC61908DB3FD +:1043800094D1EF80553C17D2EDD147724458576015 +:1043900084C57A74661A91FFF5E8C8ED115D09AD20 +:1043A000C76FCC670859D57A874C55475B727D0734 +:1043B000F13CA4B4048FBD57093B1D08A73DA96E6D +:1043C0006E35F4129AA6C78666CA34DF9FCEF05DBA +:1043D0008A0606429D68F0A52B63BCB37950AF9C5A +:1043E000B66CF398D3F0F826ABB3832A825F669657 +:1043F0009A8B1A2A92FD7C4C986D9CE4D8EF141F7E +:104400009DC6866EEC9C877B55CE1304E7113BAFAF +:10441000A49B8C9DEBBF72790EE01E6F80145BBB7A +:1044200038B117C266F378671233101BDB44FBF414 +:1044300081BBDA24FA10B88A98869BC0C1B6BCC684 +:10444000D3FCB6A990431A624ED4CC4647DB037521 +:10445000DE80B4644F88691F5D63866283759B1C30 +:10446000DFDBEEFB1033C118E4BB220BD59A6521CC +:10447000AE7CAFBC502BF621AA68FE4B7D52CEEC31 +:1044800055331EC810E1FA181D4F5B4C00F4DEC70F +:104490002DED7D7756E2B1B33ABF628C29E0E1E6BB +:1044A000C1D63BD15A7CD84EBAF6260C553B66276E +:1044B00079E2D1E8CE5760B6CF998E8968737314CC +:1044C000D5A48659136DC83342581C34A0C4D1AD4D +:1044D0004CB3CDCEAD0FF59C4EF40A97C607036AD8 +:1044E0009FEF1FB2F9E18EB046E655EA81F928B890 +:1044F000BCD78A66C47D5924FFD696DA6EE62FD9DA +:104500001207364EB790AB83AE8F8E6AF08CD6D63C +:10451000AC1C598ECACD23DFE34E0BC96144A31CEA +:10452000AC94E0032566347B84DF91FDAAC11DC6EF +:10453000A825C3A744DE9A6B1E7A6C7C63F6CCCEAA +:1045400081AB14E72FB40C098055D2286AB742BE5C +:104550007367731BC79958DB7FAE19B7A0B9531E99 +:1045600084690568BBBA694B9A16FC349A8B93D65A +:10457000557FB6B132CED1AB21ED4ED9F653F98687 +:1045800057CA3C86CDAF0E8861C1CABA2A2FE54D05 +:104590006D8646ED2DE8BC789F8D45724B35AA554A +:1045A0008E91B2FA69264448001FEF60B7AB73A141 +:1045B000F0D608C340425557D13487B5C6C67A20D5 +:1045C000084595A0E7574D5A38F705380AC19B5B57 +:1045D00038851B18DA4DBED94F0B0610DD9E817849 +:1045E00033480C1AB25AC13B873FF4287F9B0A47D5 +:1045F0009C6F05D0B3DD2BAB39BE2E1E69EDBF22FB +:10460000ED80F902A068C247FCCA60F0CCAD93818E +:10461000471AC63711F9D5BC4C682F302FC434AFB8 +:1046200094129C6D961C4B3BBDC24C3455B950A5A1 +:10463000C19655D010A708F4F20EDA0B1D4AB5DC6E +:10464000397ADE70D0A5CAC57C909E6192D0A81E32 +:104650001D29749BB13329C1C314D610ACBFD0231C +:10466000660ADABB47615900F854BBD6FC1266668D +:104670008A88CB7E591ACC9A7EBDBC28CBAB64BC51 +:104680008D03DA64ACC5501F51C50BA08D6CE0B032 +:10469000179DCCB766E134DE5E9C6F209B3A95385F +:1046A000B4C0084F473CEE9FF3CFAC3BA2C4778425 +:1046B000533D4A5ABEA43AB4413B137269E25DBC11 +:1046C0006479563201A3E94BBC627ACEC4FF2E9ABC +:1046D0002F5E0C2A0B70AF8EEA0368E51D1B5DC8C8 +:1046E0001E07E2420AADB459909F766178B057B484 +:1046F000284B9EBB8E50328125849B542BC0FE9C40 +:1047000025160E60E64FD4C6CC76C2C4BBBC131BC4 +:1047100067C071CC12D079C4DC61CDC35E0307DE03 +:1047200002A67FD63C8245546F3EA903D38EB8B013 +:104730007782AAB9D5B71B47E6F77257A65A5D5AD2 +:1047400066EF0CE9F881404E7F36382D82732EC417 +:10475000BF5B396F8D31F6408DF22142D2E73C4884 +:10476000AD8AA9F9C0E15668A09C22DACB38B1091C +:10477000CC01BAD03AA6FADF1D48360A16642304E3 +:104780007876E4B2FD93E8EDFCDA1C5560F80DA6EE +:104790009BF19CE8A4249835EB24A28672D55EE7B1 +:1047A000345A2D6047558F4100167FCB0A31F57181 +:1047B000A50E0F65A7F4AB63A1530E6BD4404289DD +:1047C00058F15A832E62AF182A427B911B50388DC4 +:1047D00065CE05B5F00E40951661318F7C4E86781A +:1047E000E1EA5856E3CA0AFE2A578DCB7050C89AA0 +:1047F0003AB946C0B8C3ECE83B941447390D29696F +:104800002D080EFC3F4337B429FF02C4839E3A6B48 +:104810005A8D1A22B73199BE6BCA9C066A90F9A4C8 +:10482000B912D0FDF45E4319C6724CAEAD6A0A49A6 +:10483000286781D0623AB7D4CF211F7BF1BFE2F065 +:104840009FE8D03557AC23A3C9663DB3F41A1032A4 +:10485000A6262DB35107D0920BE303D0874E37A67F +:1048600084D5A2B33E9FFF8036141B3021E73B4A1C +:104870006269976E75F8B956D2FD094910982E44B1 +:10488000E2B43748B92E13F1C13200AF74AB9CC00B +:104890001308641177FFA5DD0C5BA3DAF1899B5641 +:1048A0002CA91B9C16FB914FE1662AA01AE3507AB3 +:1048B000A973770F497C4CBCAE2A2C76D3426DA7E6 +:1048C0008FBEF6F4F2373E0C9FB559830E5BC1B82C +:1048D0008DE9B83F81EF7145DB9FAC99F891B65CEB +:1048E000F7447B68C181E817EFECBF928067B5ACF5 +:1048F000A037E254EA940D789B56836BA59A6EB567 +:104900009052875B6D17C494F749F50BFA6648D24D +:10491000027D0CE415780A049E1381ACB7346D0C4B +:1049200069DB0E8F6BE41B6919CFE62C9EE179F2EF +:10493000640F80C78953EEA383E9118639E537C137 +:10494000E310279277D29BABCF333B1D04838F3785 +:10495000D0AF0F8062CA2E864B1C31C66672C9CB9F +:10496000F4EE6436487D155D815BA327555D003606 +:104970000BD0284B7FEAB4FD306B345A9418BF94A7 +:104980001FBF69137ACFFD246B883CF20E3AB6E361 +:10499000E086BAEAEF4F83EBC68532F414C1B29FCA +:1049A00013365032CD2783DA40FBF366E789816AFC +:1049B0002B992EA900CDF0517D78C9CAB0658B0E18 +:1049C000F5DD658FA3D76AF97A508C98722F733012 +:1049D00085B2B8BDBC8E9BE7E270DE61E88C505DAD +:1049E00085B9666D20C9B9E11D5FDB24FD9C4AC411 +:1049F0005C31C72752B02951CAD33C01CFEBC1D893 +:104A000036D339DCD8E1AA560C2738008E5610CBA5 +:104A1000C8D121882DA5FF44383BD0FE3D3F87FCFF +:104A2000FD273020784EB1D5CCC7C12AB4216154BE +:104A3000AB488ED2EB000556CB8B08C20F1A30CA9A +:104A4000DD109DFE3F461676F6D820DA01DA977221 +:104A5000B890E65B64788BE4BC3DA77AEB3BD786E5 +:104A6000E05DF4B4E0692384225CD9195CC752216B +:104A700083FC448D7DCF486469DAD36560F9F54ED7 +:104A8000A9D08D766F2C03E7A180DCA872819E9B54 +:104A9000824E5DA80693A1C0BB7A937F7482579023 +:104AA000DF30CECE85A4D30A22940E033F2D5CFACC +:104AB000F9398225157A66C6F050646941291CDEF1 +:104AC000B3753EDBBE00FB82BADC5466AF4EB0F37A +:104AD0007E9227F9BEAEDB9837341669B16AB0A56D +:104AE00025F6FED67B253B6C4E867CC744B18F7085 +:104AF00012FE56B7C35FC92E915B59C1A6FAD8C141 +:104B0000B4A882F7C2F3B86DEFA90A89F63534AFBD +:104B10007DEE0B9C47F5C49305FC3C3FB087153BED +:104B2000913F52FBBF7E2C02F36977A0D04A9BB322 +:104B3000F9D81549954A4820A8FC915E1C5658F4AE +:104B4000B6D7B0EE4CA7878FD27D08DEEA4DCAB942 +:104B5000D71DAF705DD1BB02EDA6E83F6244DE0B0E +:104B60008DB9B1730D3AF812AC855072DCA5556F52 +:104B70006A129349BA5C83445069A7B53C3E3AEC4B +:104B8000624A55F97AE4B7EB910B15C89E6123721E +:104B900061EEE5D3A876D0C589ECAB0594B9CE4BD0 +:104BA000127320AE8467B17DC7800904EDEECCEEB0 +:104BB00039730FA2F61F92C3674FE9C991258F037E +:104BC0008909DF5C6706912787C617C0FC153A6F15 +:104BD000E4F97BFB405D6939913D8189C3284FBE73 +:104BE000F78446A54AE581FB875C9A2D1A5D49CE7C +:104BF000C8E96DC050B6EDE6104AFB46D3933E14AB +:104C0000EEE85981D23C24BD155420673D208CD953 +:104C10007EB8803037649329EB1A5D782EB25EB887 +:104C2000F0F2F0F7F6C683F7C2AD86D2A55CB97391 +:104C30005EE2862E8E7019778E3ADE00DF224ADD24 +:104C40009AEABCFDC2B0E6E30CBE83257AF9C58FB3 +:104C5000A34915C5A166320405A42D55E852F149B2 +:104C60008E6172B328765BA0973C3B3FB69654C7E3 +:104C700031B95864C9FE99559ADFFB6501A90C86C4 +:104C8000294147C98A87E9DC2DEDDB1EC235F16178 +:104C900015CCFC5E40D5B380766499455C1EC1C8D6 +:104CA000982A3E72D8604346E95CA94C99CD4A6384 +:104CB00067E95B71F5E10337059F544DFA46983477 +:104CC00095187952824B5BA8360417A53C9B355446 +:104CD000B7EDB5C612442C8160704804356D327052 +:104CE000D0F187D5AA7917DD70595374422E43FB52 +:104CF000E3ADA1FB0AAA7D0284E06E7322DD5F8F23 +:104D00004BE1A54910E14099F19278350FEC5C92A6 +:104D1000E9E90189F1ADD920CA891563F6B1CE4E12 +:104D2000138308BFBDE4312B440D8548C9590805DC +:104D30009C55C83FB67330DB9009EBDFEF11059946 +:104D400070226FE52B224E3AFF8702C30A4CBF4008 +:104D500069C355279C3E49BE7EF7C068146AA61FEA +:104D6000C7396C34EC5BD1C9365BBBF7A285C82E62 +:104D7000E0145DA2B23F159C83170CC6C933C3AEC5 +:104D8000B99A36E36BE9F4958554B744EF63FCCAEE +:104D9000D4CFE339E1C87E60DA034E13C871780ED0 +:104DA00004D239D84FA3549DB595F8D9B92DBA4B33 +:104DB000C01DCFFBB53ED30D94B00DAFD58A1151B8 +:104DC000A204EC3C61FAA95EF098FCAAE9657C605B +:104DD0002ABE2C34EC23F006F92AF67CC9F32948C4 +:104DE00058831361EE6D9688B5DCE7B16C1B7C606F +:104DF0002BE8EF4008906A06DDC0ED57C8CC7C1464 +:104E0000B121178ABA23E5EB11D916E0B8846014F2 +:104E1000A7085696F0FA6A38A342C3F0FFE7D657C0 +:104E200099488794DC2015A67BE33C32D97D0B089A +:104E30003E0707DFA7DD01B29EA60F524512ACF96F +:104E40008CD2F6874ED1E5BB7ACC390C6169F0DBA8 +:104E50008E8775B46BB15439D30A27BC04C1D076A0 +:104E60003C47A40DAA900B4E3E3BF4E2AC0688E210 +:104E7000EAD3B0DECD6D61181F7A5BA66C4A3E9115 +:104E80006EB54550E7DD12E86E809E15B533EB2612 +:104E90005C4B28D3C649F785F49E311DD965B38094 +:104EA000E68C6E24E006C2B67453059A1556F4AC2F +:104EB000FBCE9EB6E9EB85D6DD7FF6BC1689BB1529 +:104EC000E9A40F2788CF6C8A43728375B9B59B6BB1 +:104ED0006B3F6993C7877D62562637AB01637A942F +:104EE000AF3B581D3BAF5CF0D94A4F8C81AFF93CCA +:104EF000CD49831ABBDB8FA15735136EEF608561F7 +:104F0000CC9AB325629A46BE26247FF6CCE0C98DA2 +:104F1000B346A450C41F87C0F573E7BA1A3EF847DA +:104F200036D01AAB8D83FAEC70E0EBA4EBC7F46CCF +:104F30003C1C3A427EDA66AD8362D222E901D9D3C3 +:104F4000C5B4C1D5B4058F299D91EA6719F54C8286 +:104F5000D54CCFB0DA983A117F4EE484A06E981801 +:104F6000E9E3F41F540860D9A00D376154E322EB44 +:104F7000D974F6C47430BDE6F1FB916E65B18EB3A1 +:104F80006C4FD2A1896C73CF74D44DAC0F9557423E +:104F90000A96370E5DA56E7CEFCC5CC2FB99A2E44D +:104FA000E35496DAD269A8CCA8C5B0129257E78B21 +:104FB00003134AAD79EEDF1F602EACD42AAC6E9B92 +:104FC000BD1FDC4E9DD6C3EF1832C40DCFB5923550 +:104FD0004D41EA29DDE9AD9E8ECA9606CA3A266E93 +:104FE000386BFB64DDFC1029651F1012BE2C605C61 +:104FF0001CB712349F7464C983CB443490D5A66324 +:10500000620346E4916D61D2238B02D64EEEE8AD89 +:105010002D94FF13617A67B8679746F07F268D8DD0 +:105020008A481586DF507300EE38191B0813E8AD67 +:105030007686EBC80C8B12C618269CA1E23AC531C5 +:1050400047E70B79107D3D1ACF19FFE407CD0859CA +:105050005B5D18BB33BFB964FDB6C05F62183ACF61 +:1050600034B829901DD0D8F049D3E37B6159DB4790 +:1050700021CF396471F2C1239CB3966E4A67E91B54 +:105080003656EE336FD27C7DBE7233E6453CEB7A0A +:105090005C7DD4F2417B02AF24A2B85B041D40C901 +:1050A0000F1AD5D832C65FBCF10331E65F3D9FB61B +:1050B00009459ED3D783C1B51D92D0D50E1820F0D7 +:1050C00069BB55B5E9D74089AD87F2868BD792C8C1 +:1050D000F928F022347FD8EDCD11895DCECD0EA216 +:1050E000C1A48300CE8F10D2010DA42AABAF4D48CE +:1050F000B5C6B208880A7FF7E64B01BB0448A81280 +:105100001829876EF284F5BA1725AF484412EAD2FF +:10511000200B587D02C75CED3D2239EE20C9766E2A +:1051200073A29212C8CD6DF03210ADA7355DF65A5C +:1051300097BD639E0D44EC12478A3949E12337033A +:10514000467461D555043D9E72250CC45DC6D7AB2F +:105150003C2A33B7F64594A978156F7B7B35E7B4C5 +:1051600083E8F293D38D4983607ACB868CC400F7B1 +:1051700065EAF49B3E2205463B76D6A57C2D9F44EE +:10518000554281EF739804CC47452DF28358E4FFD4 +:10519000DB8447FC571E3F1B222A5DA0E15CD91728 +:1051A000C66F81941665DCC3028DF74C0BE1DDAB55 +:1051B000D66915D7CCA2A2E033C7DAFB0809DBF524 +:1051C0007CCC49C0C6C9903BCFF3F1DB4FA30E1E88 +:1051D000BB4182CE280D566E0C052B795E662EC41F +:1051E0009D6D47535DA60D72F8DB8FD2766EB3F9D5 +:1051F000689C6588110E844504FEF0072B98DC122C +:10520000E8969F10911C5D57F022038893E6DB7DA2 +:1052100052549DB2DAAA9B4E7A3E5C35614523A971 +:105220000AC9D503B7DFC79A7E048028683135BD27 +:10523000E668B9B7E2EAE4F03D17131DFA49281F02 +:105240005D17B9F2C676BEF03067CF1EDA8AE62C5B +:10525000E67D3EC7CC999242C50FE439C83E23B7DC +:105260002064D7017874064FDB4032221AA5C43778 +:10527000881558DFE9DE76117F9A28B6C37FF1B131 +:105280002520F6BC5D5EE6D8206F11CA2D7C2F0C60 +:105290004912E9884AAABFC188419EA5BFBC6DFAE0 +:1052A0008953BAF4F109A8EA69D3F1C210ADDD6AF5 +:1052B0001B0E6D5D165EE3864D7EDCC067840DB609 +:1052C0002C7073504E155B29A96B94750364C950FB +:1052D0000FDCF51825DB808734310DDA8A9E55C244 +:1052E00030D869FD6E064E71911E20B7315238E4F8 +:1052F0009D932189AE1711CD6B86FB490469C7DBED +:10530000F739D160C43F4761BCEE010F323D723ABC +:105310007546ED30A6BE35800A82B7710821BA6C99 +:10532000D268A0E331C9953B9442CB8B7EE8BB5653 +:10533000AF0082678B0313B983C04BB7E882E17477 +:105340004999DD50ABF6F45421144C86446BB56892 +:105350004688F3942158E6CF7DDE2027920A88C83C +:105360007AB879CB9EE658E216E9743182F0EFD034 +:10537000C530C4E77EEF67B5965EDCFCAA47AAFF9E +:10538000FD4F5847D10891ED216251E720D9A3FF85 +:1053900002782491BFA7507B76FDD86B626230D231 +:1053A000C42557285BA3DFE6947B26E20B62C1711C +:1053B000047486FCA5AD6EB9810092EF154274A10C +:1053C0005B388D450DAF3B9E51AF795C573E86B43F +:1053D0004057D2DB610BC8BF25F115D050B2F702A0 +:1053E000AE64087CB692C695518EF8DF2D932742A5 +:1053F000BFE35A36DFA4ACEAE467F221826C87D8B7 +:10540000208C284FF1266631C7E59717E376A1FD7A +:105410000460040BB83F6AF8D5E504777EEAA3AAD6 +:10542000FCAA1417C634A8FF933271181BE4E85E77 +:105430004ED23188FC8293973BA29D9091132E1FF0 +:1054400067BEA48F564AB7599413DF5EE52E18E164 +:10545000310F046ED51F2C4BDE761B58BC72A9127F +:10546000AD36EEDB462B6915C1AEE53317BA4A19E6 +:10547000101163606EA1E02E3122C7CEABF5754AE4 +:105480002EA3F31B173114E92C0D954E421CA2A537 +:105490008972540CFD134EE34476FBED04AC8CE1B1 +:1054A0008FC267F01E9DF7A9D80DA5BE1E10699783 +:1054B000822E9300904E6833CE736C551035594848 +:1054C00092C64BA34E5ADDDC85A4AFEA29FF905269 +:1054D000A888558A36BD6EB3A8DE9E0DF04E2F48C3 +:1054E0007DA89F7D5CCA6B3A953243D6877FC8857D +:1054F000C98B29BEEB85144FCE72DC9A2431691416 +:105500004F2E8EC9012E8ACC880EFFA96821DD5A44 +:105510001B579ED369611A8A5C668C80F16ED785B1 +:105520003C50DE12155597AF8AD97758E2A2A4A84D +:1055300063F3E5F255B1868D18287DB9DF2F395513 +:10554000BEEBB80374182FA60BDA6C3478A4FF678F +:105550004F9FCF7333E41FCC8E3439C4732DBA8C74 +:1055600083C9ABF41DC7BF8433C0E7221424AB7AD0 +:1055700077A384CD629F849A387D6194B6F2687671 +:10558000A0C33990A86E369619F9911938EF9DB1DC +:10559000408C6241FB353FA76C313AA7B63B888906 +:1055A000B678E61137C6DA4D5F331C731B8C89B6AB +:1055B0008FB1497348410ED50E134BE1E3B6EF4569 +:1055C000AAB53C8A0BA046F61F9B3733379BCABE51 +:1055D0004BEE8E23F8D60443E893AB110D60A8057B +:1055E000CFA740BD5AD26311C4AC550275BEC518D1 +:1055F00052E3DA9429B7EDDF0D7603D7A5AACB499C +:105600001B1F2EB6AED25C528A79978E23134C772D +:105610000AA9BC44DAD955E0AFAF9CA9AEADB6DC5F +:10562000448AE9957C964BF7FCA6031D70228137CE +:10563000BD31C71C36E88D4EFD88F72A1BEBCB9D8C +:105640009B5AEE5CD5BC4B973F238C86202C3FFBAE +:105650008BD28991786742DA85F23CA9B479C70C7C +:1056600059BAB81022851CFEB32C6DE485E790A2D0 +:10567000F23A9A85C9627844C8A6712B3001D5B92F +:105680004486B49F9C13FBFDC6672F5A1A65BA5B0C +:105690001793C6BA476D4F882CCBAD047A5DD67C84 +:1056A0007CDEED1FB4E6FDF2E702B9BD1316841DE2 +:1056B000F44D7D0F2816BB30514D0546953A228298 +:1056C0001A76337598F08570A0AF3DCF6904627982 +:1056D000A9D613178B3DDFBE0417FAD03C1C7834D3 +:1056E00028C8712A868CE4B4485F397529CBCB90E1 +:1056F000EC53351298498B04F73A3A142D1DD50F07 +:10570000ACD12610644C4222483041BA429DFD7D06 +:10571000F6E2D90786AEFF246C212CE7C3BEF34026 +:105720000D0989674E36689BDD05735CC870F6DD30 +:10573000A96DD175AED9E1BA95036BFD8D1526FD26 +:105740004822A114F4A35A61C53FBFDFB6F09B08FD +:10575000291825AF3C20C1CFE370BEDB7BFA1D3E8C +:10576000840CD83583919A3D83B3BA6979DA0FBA3C +:10577000A71CFA4277D287607EACDCC75BBAB5FE65 +:10578000335780623275386DA2951A8F7CAD20C276 +:10579000A63CFA83669248529D5DECF02650B31CFD +:1057A0002B859F16B914E7FFDA6A442FD3AD43085F +:1057B000ACA36801B85086AE06F1AA68E2EC32F2FA +:1057C000D3B6B37820E7C4F29D0807F4BC651E8BFE +:1057D00093023CF6F3DAA1A20FF5B65C5CC3F0C904 +:1057E000B5D041315610757AE359DA0EE5BD384B24 +:1057F000EB268C2EB36BD676C7B28DD34F144202F4 +:10580000DBD3EA0399E224B626E24B1F22341E8B37 +:10581000293BC463DB45A5F8DD016D3A8509EF8BB3 +:10582000DC2BFC35E64BB54D4BDE7A55CE1E0B6BB3 +:10583000F686094A285FC9EEADB78015DAF3310E56 +:10584000474695BE7A8F0B03F1FC8C9434A562DB3E +:105850003DB48004BBA42A6AB2E439A45D2C2F6E47 +:105860008846A722F5D9E289AE3337D3FEA5C0BD5D +:10587000E23879E6A07C2B7D52BBFACF31BA26887C +:105880004F83C4F269239598301C2959299D118BA7 +:10589000492509EFBD688F74D63FF91B15EEE42446 +:1058A000BEE3295FA870DF213E7EA28A54E4ADA248 +:1058B000F9071696821804C92C8B41D9FC90D6E1C1 +:1058C000031FB7520B7C1F961830729A6EE7F69F33 +:1058D000CCFCA09C060C1028AF1401D28F671C07CB +:1058E0007D28EC9D40D17A8A5C8B070E12026AFFFC +:1058F000B6F01FB0B2E1AE1FCED4B5E2BF05658DE4 +:10590000A76251C1FB0FA06DE6E890FA282D4B2D40 +:10591000D851C530EC274A4742E9C9F4F6C951E2EB +:105920004C3780FBEEEB93B9D8DB1896C9DA7FB31E +:105930005076702E55B1AC5B1C4554B5F361F17EC9 +:1059400076C584CFA136623C33F85C9C479045F81D +:10595000CEAC1A571E712CF8F4E7DA4D937002178B +:105960006C1929821AA5FED24147E828A8249E4036 +:10597000087445A20C398795545D7A0ECEA69A7CA0 +:105980003F3ADBCB85EB71A4B543B22B659A43302C +:10599000D467798A7EBC9EEBF70A3E54FD1C254AEB +:1059A00004FD7FCB9696AC782C96410A25B1F7D0B2 +:1059B000C1C6092639AA32A39557617FFD177361C5 +:1059C000E2E5E0CAA49AAE454FC0AAE2A2AFB3B8DE +:1059D0008B0134213234F0555DE7102ACD225681F7 +:1059E000DD79B78568BE186B80ED7D3C667B66F21D +:1059F000DE6A39CE4F7B28113687AB663AEF20310D +:105A0000DAD33A257BCA1C48B0EB961F5D5189D08A +:105A10005A163BE7FF02CF3B005960A64B84465025 +:105A20009A3596D1BAB1C2BE5644F143710941BB11 +:105A3000C5298248492EAA710E52A76599E237EF0F +:105A40002AB267BCE9EF921648E9E1C4AE99056D48 +:105A500026077F42A7DC4C9B8DE07B7087C53DCF3E +:105A6000DA4B30E0177DE4D22833AB49404ED03FCB +:105A7000FEFCC16A88212AD1DFE6EED1B964A71005 +:105A80002EE61F7A826A76F2A95FE87BC1B151A146 +:105A9000784BB7ECA631357E59C101D8BC4920C03E +:105AA00016CD3E921676DF630ED51FA953E67A1403 +:105AB000FB8CE719E976A6E7B1ED273F16E1F72A57 +:105AC000302366869790B70BE6743F1EC6B489F7FD +:105AD00065BA9918A5F71FEAEB4EAA9D0FF1ABA581 +:105AE000F3C1EA31EC103725F4E9CDC6275B5ED16E +:105AF00010C44AABAC32A9983CA209D1CD3B3F2798 +:105B0000818407125927675FCA70EC3D0FD73D6942 +:105B100055BC2EE922CC094506CAEC8089C69E7880 +:105B200087A7E3A323D8EE65F1F506B0591201A0CB +:105B3000CC21D0D419D91714FEEF103C906E3FD071 +:105B4000CE6FF8F2953FD2B4997D2FFCED7C32ED0B +:105B50006E482275D5312ABF44A63014029301AE97 +:105B6000BE44D41E3E5CA914C77823ADC534AA2711 +:105B7000B2DD938848B4164F5C0505DC397CB7B5B7 +:105B80006954590227534ED58CD69C00FE4CCFC881 +:105B9000A115FF73535D822F9DDD6FA1C95C7F6BE3 +:105BA000A689B7AF0AC2ABF342B5A33C5D1D8F9F78 +:105BB00008E1E0D72434C6D301867982FDD77CE1A1 +:105BC000389D65C10F3B64D81EABDDD2F18E0180DC +:105BD000A36B014547E72D0AEF3B738D9BAC31F773 +:105BE0000D50CE4991C55B6C96FF2078E2418864E8 +:105BF000A1EAD34E31388A10F1B28050A1351E91FE +:105C0000C63845E786D4BCA267C3FDD332D6AEB949 +:105C1000581A25C17550D259C5B89AC3BF506BAB3D +:105C20002F2FA0143B43E8144708BEB2E36C4D94F9 +:105C30000605A92D9D869B8E82C9491CAFE67E2351 +:105C4000122E5401B30DA7FE14EBEEB3E5945F944E +:105C50004B013CB314CCFF784A22518B7824BC56BC +:105C6000E191D0D1B6606BA686788FFFD5F267AD93 +:105C7000824948D3D3E3887C7C443F790D11A2410B +:105C8000526EE3686077F776751C63544F5F0A9E27 +:105C900066C1D3E39748767652B8F8126D505185B5 +:105CA00017CA6BB57C1D61CCCB43B7D7D1E261532A +:105CB000215020FD2C6F892AFF1C1FC8693E28BD7A +:105CC0007AB9685DFBC91096069868EF4D76E3C611 +:105CD0000FA5F38857B41E1A962E0944562EF5D3F5 +:105CE000081FF248FB45DF2DA119267A531025F82D +:105CF0002396EBDD5D9FB57EF44A5408239CAB50A0 +:105D00006C8D64F259F6BBCEFF6D71D6482355EB0E +:105D100050A96DB7FD10C14C02C65618EB6A8F0929 +:105D2000CC9FC68B847F3B252C9EDE5680AE5CAA22 +:105D30004A2CE60E885F119D9006932DD1BDDEEFB3 +:105D40004EC05A990F5CB8F00DF56210AE1062DECD +:105D50000C6A92DA4C02D5175EAD11481849887D5D +:105D6000375C398DA70BDB2DCF43F1630F1B146C10 +:105D7000E4F9836C5A979766043464BAC3D77CF20B +:105D80006C95CFC3EFBFAC7E5DE1DFF314EC4AD17D +:105D9000213534F32787BC304951152F199913C980 +:105DA000F8F095949325CBC55DED262EC003466F84 +:105DB0007172BF1926FB13F2E2FBB92DBEDC6AC477 +:105DC000E12E3260EE22DF8A6E4C1185A6EC81EC6A +:105DD0007DC53D2679987C437A06F6EE9751A4DD81 +:105DE000E95769B5E3ECF5955E5FD03DF8310FA555 +:105DF00001CE4DA9713016BA3398AF9E58E6119A6C +:105E0000F4A54A2578DF193633F5A5A4F00EA06A6B +:105E1000D111DEDBC59C7B8B2A08939C5DBB27419F +:105E200071F5B600E2D4F96FCE1E7C17A795589392 +:105E30008DD6DFFF0576A2E9B0E2EBEFC4DB1D8073 +:105E40003F8AAE2B3F60C80A86F450999D117C268C +:105E50004FCC59205058B0B67E739D27B61BA588ED +:105E6000398E121E22B216CF059C4757AC646108CA +:105E7000AACCDE3A2A8650B8B7A88FF4066B0596EE +:105E80003D2BED807750C76D176E5E6C1F19DFD10B +:105E90007E5041E06039E10C57A030FA341F53F4D2 +:105EA000A34F6B6F777BB754E29E609F771622718A +:105EB000AD9ADC04BBD6C4C6C4DA77D64D5D810A80 +:105EC0002B18ABDF6DC0A3454AE4707726059BB164 +:105ED0003CC1080A6F698393702F6C53E45F4D7D5A +:105EE00083DBBC8431269B46C45E8D9E42DE0D75ED +:105EF0001132511914BA7D1B88D8C1D6BD11F51EB7 +:105F000047D5F9104F79CA2595CD92EA7A888C54F5 +:105F10004B05CB6A37FB27BE68BFB8BA91239D32C9 +:105F20000095109C62FD6C2BE08F74A83AEE51CC6A +:105F3000E4E9DCCB49BAE4617174306EE831C9FA46 +:105F400062D2E8D986E7016A608B54EE1319E0B695 +:105F5000D442AC28A0C6C0711830CA49A0D0F5916F +:105F6000ACE9971348E7713FE1BA10F4598D717DA0 +:105F7000D55EE4359F7E8B65C8DAA040B5A159D2C5 +:105F80009EDADB1286C5BDA38DB3BD634FC3191660 +:105F9000CCB9396F0AD89CA5870DA04148AAD5FD78 +:105FA000C6CD6FC645267DB6539162523D1D7473B2 +:105FB000F62FF852EA1BE1201CEAD8CCC33026FEAB +:105FC0004D15AF31E7656DC7D4797CF01835537C3A +:105FD0009B0A98A89F65DE55088D4FB8FAC496C2F3 +:105FE0008F696A6E090742F61B81149AA2DD073C8D +:105FF00026A6B9E3DBE92C570DF66C5849CC0F58AF +:106000008AF0246CB7DED4422B57B8ADE7DBF2E55B +:1060100097591108C19FB755A3AF4F860A41EFDAD0 +:106020007D4586D5A5C4B6E60E377FD5D13B7490A5 +:106030005CB8EFBA1F241BEC757F43AF46165BA01C +:10604000A661F4F49DACEA43372383FBB392CBB350 +:10605000A4F045C541A9F60F2D87A6D5095BB1E48B +:106060001CA596156C790E2542DCB46EE9D9DEBC10 +:106070003E51FB20C1029D35C788FCA167C49EDB51 +:10608000D1BCF10FA3CD0203B44241F683A96C4009 +:106090007B4A7D1C2E0CFA4D3AA3B1904ABDC60A2C +:1060A0008DA43F77575B90665F977CBD59C2082EE1 +:1060B0007AE525C52CF0A899907CF8B68214A1F554 +:1060C0003A59A727B0EB2F22E144D5A038B085AECE +:1060D000F88CBE61E9E99597995BE51E0D028C4845 +:1060E000F97CFC705DC1709B90B06D3EC2407B52EC +:1060F000497F00128B8B307257232F66AB60038B66 +:1061000016227E30121E63FDFDB5C58C1A86EAC0CC +:10611000A0F6A5BF344DFFE58F82CB4C6FFFA0E00A +:106120005D1EC0EAEEE45EB6328F400594C05D8F1E +:10613000AE7D1A776233B5C50AEE5A8AB570FEEAAB +:1061400033AC9E4EEC7DF039F432E0F4552BF789F8 +:10615000426D716BACB90378188D9B0D280CA7D3D9 +:1061600064B0E61DDABFA41D7F824D40358F667096 +:106170008EC3BD95406F50524B9426E7755466917F +:10618000559BD221FECB082370D5C8992334071222 +:1061900057A105B247916A0972961141AFF8B992B9 +:1061A000CE013C728E058EF55ADA070A7AF8EB3783 +:1061B000DCC38E0ABF2E69F47583AF8C1342F3D40F +:1061C00027F20CCAE50280AE0F25D400B08AFE6E1D +:1061D0009E98C8BB5FDE7AC1D31611BE00439AE019 +:1061E000F9B7ABD01C032AC6DBFF765F740EC2B2D0 +:1061F000B601DD0C86D78B283E25E2B8DEA8AFE0DD +:10620000A40483C69C523EA6ECB4170B3D324EBA92 +:10621000339705B0F361F65922789AC66AF3E075B0 +:106220004831480F380178B8866F0FEBBB00C9B012 +:10623000FEB90F40B5D5D0E9C4A1F4AFD13CFCDC28 +:10624000A08E23124E36CA58E5AE9B3637D4D3679C +:10625000753E660C82AE01AA6901CF4EEA9CE31935 +:1062600050FABFD75085A12761D300F485C448599F +:10627000921B45E2325223E13213D2D22A27C10EB9 +:1062800094B1DDD221AC1CB1CC95A35318E0D50A52 +:10629000F674EBC4E553B2DA572FC4EAFCE9814740 +:1062A0005F3CCC28E093226D82BE525B7C29459FE7 +:1062B000570190195B115AB7198990B30431765977 +:1062C000880850E4D64B4B572A67CB159CEDF76AEC +:1062D000A9FE92EFA96550C272A4B70E2C67F4858F +:1062E000B9FD7173270FA5462158C9B631958ED9CE +:1062F00042756298E8497FE4495C2FD8B570397AD5 +:106300008BE0E7DA4ABF74CD10703FCDB97F3AD643 +:10631000DFB21A83E2A5EFCFC3624AF736D6BCB02C +:106320004CB7E58C59174C8F13EE2E3891B6D9EF38 +:10633000894FB69307A4BE3BDCA478A891732F20A5 +:106340006A728C64006AABC165B797FE51C03C01AC +:106350008F1252C9B66824200513BDEE49B7796B78 +:106360008E0E38C830344C7ADF50E03B9B4D46E20D +:10637000AA9933C04DB942648E46A7AC2FDB5A7838 +:10638000ED3537EF3FA0965477D88C534C61CAF364 +:10639000B47DF388E4202EE4E24A0F4BF4C6A0FD5E +:1063A000D48D93E3A3ADECE98E8B03F9DAF72B07D9 +:1063B000C01ABBA9CFB19DF4CC33AC3BE4E33C2E77 +:1063C0009DEC3A4EBBB1C3AA92258C66782037C3A8 +:1063D0006A3764D54B196BE25C0009B7379D0F969D +:1063E0007CD105C4ACE645BECC2B1149C2E4C8FB48 +:1063F000DD074AA73B365F45D782728C48CD13EF45 +:106400008A316552E549F331F1689A15125FFFDC74 +:106410001CA3304F67FCCB3D095BFFA241A542693D +:1064200067BA6154554EC373AFEC9812FD41FEE359 +:10643000C3592DCA295F6F75A0436E54921623B6B7 +:106440006D3A416BEABD4CAD35CE03459FEE91F2FE +:10645000BF8C736BB5E7ED741CA7E1A8D8A09017AB +:10646000A17FA7BC6B496F2B1538C43064728D5F58 +:1064700021BB224D1EB7297C6D67E19730E017CE16 +:1064800058D15BCAA01385ED896B01E54F05886F74 +:10649000443B3EA8E5B509B104C0FD572FF3AFEB6F +:1064A000E6ABFC23052822CED8F61555ECC06F6864 +:1064B000CC5D75B345C24D39D5A3492D89A02CB902 +:1064C0004CE5CB29FE29DC39B00B75FBA6CDC5E523 +:1064D00094CF8F52C3A2B6C99A53EB0A2E51662F9E +:1064E000817108EBEB0B8E873890C26BD5F36CBFD4 +:1064F00049633401E6770997B6CDD07918C791D7AB +:10650000E5DB6F53A38ECC6DDDA8AD994A25D0EEA7 +:106510006A1B7FF493736587E5F9D2D951946E4F66 +:10652000048992D460B8DD019C9B4BA27C5DAA3BA0 +:10653000B9CBBA3B0308EAB91FC80AB538F3707380 +:10654000655715F40E71542ABC275D3B8EAF9D9A9A +:10655000B27D9F2D13D511A27CE25FB25C97AE662F +:10656000BF1F52D5F9CAEBCF9206F0DD0E17BA580D +:10657000C4052A70A94F31D8FFAF116B47BF067908 +:10658000858D426CE18B89140D1C6AEE0FD74DD2BC +:10659000C679070E387B84F53C058A1C169C57B0DB +:1065A000C9A7B93CF8494F90004048D2DE485D5F2A +:1065B00075D763CEBB8A807D79661F9574752CAFC5 +:1065C000D4C08D79BB9703CDD568389E58FA26E99B +:1065D000AC0024055561D9D728A0514C204B8E0E14 +:1065E0002DB897F8876B7E48CA22F6AACCDBE6D591 +:1065F00003AF23B915D453A7D7978E34B4029CDFC9 +:10660000CAFA748F65F4147ABFF71D8A457374F65D +:10661000F9D1F3E3C2554983A8350F81E562F50945 +:10662000AE8DF5C6371CB6FC33899B383337D64C54 +:1066300099E771066C0E261AFF10E379A17B2DCD28 +:10664000A4ED9840BAEAE9480D76C7BF43255169E1 +:106650004125CE0103A93BD8EB2E1F6859B5BFE9F0 +:1066600074AD339F9716695B6584B419800F969853 +:106670004F686E49BDD308C3100053C77DAB93D19B +:106680002B73D94C1218B7BFF1EED047E27A00B2A3 +:1066900069110D6B647ED4ABDF6AB7F11B48CE3451 +:1066A0003A0731089CA25657EFAFC0D9F5D84BC86E +:1066B000AFF8C17EEF2AE44EDC1BD94AEA23A511CC +:1066C000F16D795BC810F3232F70662B603C962A1E +:1066D0004A21E11E34D1187056AC63C0EF207A6EA7 +:1066E00020B803F5BFBCE87545A754CD9ECCC35B6D +:1066F00050DD2C19E0D53790615C13F76F47C190DE +:106700008D5743DBD731D9F175EC39E918CD2E26F9 +:106710008227D4ACA6633A674BF83D6925AFE03ACF +:1067200012EF052A8FBA46688050715BACBA48896F +:10673000CD9EDF91EF1E1104DFCE078741CB26806F +:1067400018C74E3284354467BB493AD8380EB11168 +:10675000E582ABD33EF8C2F49A0EA3722BB57163F7 +:10676000C21A58D6E98D8FB6E457B2DC6678632238 +:10677000D388668436897B29BCC79B1ED72482BAFE +:1067800025A54317D8300B0105723F35AB8FC2C921 +:1067900038237D99684000305ADCCF0368CA14D58D +:1067A000C68DCCDE52306FE0724EB80C8BD4DE0D4D +:1067B00005A000660E6B02C8E7B84EDF73E56211F4 +:1067C000DF68966EACBE84B6B5C608B3666818F5C9 +:1067D000430BDF0280D4FD277681B48F484C897B40 +:1067E000F80C02C404DE6F8E5A6BD9232830C1978F +:1067F000168CC2DDD1C67BF62E9DA47474815F1CFD +:106800000BDC17FE0FA65ADA0C4B1FED03A0CB06CC +:10681000FC5A67E2813C10C87BB33FDC4F4EE2F785 +:10682000FCCA820BC358B57436B77175BEF2ABCCD7 +:106830009FD4715613961EEC50A0742BB3ECB798EE +:106840006D0335B9F7C264095F95499F18C3E7E244 +:106850003EDEF00F916E08A4BD8B1A7A2C774D8F17 +:10686000D030F85C0D4312C937CB19F42309613DD0 +:1068700023711EE937D7595AC720D6BB32B7932A9E +:10688000F91B3D21F807FA6D51FB3FE2568FCBFB18 +:10689000AB6125287FA2ADCC678D63826E44AC9F2F +:1068A00015EA1D5B9B4CA90AC19F8C933D40E96C86 +:1068B000DAE0344CDC074384E9B816F67E8E26779E +:1068C000A31513DBAAF666DE4C2EF290D840B54530 +:1068D0000AEBA57B2C893083F80333471D8E676252 +:1068E000EDA0C6E54AAD40080C6FF513A82C7CE27C +:1068F00044EF3BC062F5B6BC94B64146FD285186D4 +:10690000BF60F73E35AB48D1BF8E44FA3A89884C18 +:10691000775C3F6B8E028A7B06335593125C1CB802 +:10692000D85313CC6AE18B4B3E7FB09CB1DFB2CA27 +:10693000343C91DA06085E5EC5B494D9C91ADF51B9 +:106940006B3A8D7542A97022E9E6FC6173CEA01AFC +:106950002D4EF46EC9C79178A234E401D35DE06294 +:10696000B80A7A2863C462DF1B2A4E71DF764D9223 +:106970005E5A29AA958664902D0022A82D0CE0DB92 +:10698000B45D6EF2E3EA9ECCD0277C93F415E82147 +:106990009ACC355279EF8B0843FB5E0125DFF53B3E +:1069A000E6AABE05866DD65532A193E7D599664213 +:1069B000EA24EFFCBE1D4A4AEE5B2B64455FEBBA4E +:1069C00052E8802642857EBB56B58CAD2C18939339 +:1069D000751908310C5513F6CA2570ACC6A093334F +:1069E000B89E0D405306398F0DD717D55E4594EEEE +:1069F000B118ED8421FB3DC89C5EB377D6895097D2 +:106A000046F0445ABB027C018B80E4AA6FDA4D0445 +:106A1000797EC359077BE9123372659BDC3E6C4A71 +:106A200027E15351D96B315C8238F862C0987A7D86 +:106A300080915FE5B27217C91EECBB12159A067100 +:106A4000DA6804F69E359276C8EC6FB1790C5D2950 +:106A50002C52A7118549E09F2F6D50CDC28EF2EFC9 +:106A60004E5F11EF9B62B18999447B37E119C228CF +:106A7000D9105E18D255115EEB158EB5C3864B51F9 +:106A8000189499D539F9A5119FE662E221D7743699 +:106A9000B5A2B2834C59644F03A86CA356C0830BB4 +:106AA000012FCE56066E4A122C2168FEC603E00660 +:106AB000C67B5003E770A914A0105AF617E7E7CF7A +:106AC000D268D6DDAE797C39C0736FDCBA1F5EA0A8 +:106AD0007E13BEC3C9840C153A286C38B04811A87F +:106AE0007C10512E3E2627D310B4E24C3188B4D10D +:106AF00045F1BF8AB5AF62A228832D5139B5419BBC +:106B0000B434B0D7B3F9B6A3F6E9160F3CAB867729 +:106B1000B9E346C082002D92C6753CD5D68292005C +:106B200048B8229A7E8710FD2A4F06EEA7A84AF0A1 +:106B30002B9BB202EBB87F136B9A5034513CA448A4 +:106B4000670327332F8FB3A0BA70FA4E1CD36E564B +:106B5000597F15AED2A16DA972BB32590E7789F15A +:106B600099DA6A0BB80C52608C38C0984075561B85 +:106B700049E76CBC180188B28C09EF86F3781738A6 +:106B8000EECB8B3A4B14E483B3FD3377650749E5CD +:106B900080D65DFA95AE3ED0FBE57380E939585951 +:106BA00096B896B37A1A2496873A3AC755B043B93D +:106BB000BAB30B3229E7BC494881ACA4EF0EC251ED +:106BC000F77C35BE25FB5E36D5AED40A749FB30F75 +:106BD0006054D89B4B88516068DBC5EE4C70EF5B0E +:106BE0008A31F95A9336822E1161FC55488ED2F2C1 +:106BF0006BAB7E5C2D73CDB279C92B81FBB484BBAA +:106C0000A1DEDBFA014039F50C7A90360DBFB738BA +:106C100029922AC4B7ED871D37F47EC804889A7A72 +:106C2000EF5168E6555A065DEE9A209D9A3E0E8118 +:106C30000020DF6BC6D5FEE102073E00B85B2C0AE0 +:106C4000296B5D773AFC468E944BB06FB98B13C9B4 +:106C5000DF99CADBB609BD2AF8565644E19A38D7FF +:106C60007F5CDC06A7A0218712259F3D47A91D6DEB +:106C70007EAD54D282A12C135AD1E846C930DFB37D +:106C8000166BCEA6A7B10A784204549EB31F56C411 +:106C900057B78105E555B3AE614AF918584105CD9E +:106CA000E193BB8CAFC1E3E578B8930FE4518284E4 +:106CB000B6F0095534F148FFA03932E8714F91B36D +:106CC000D3BBCF6536BE808CC44BA2965540A1265F +:106CD00095E8667D9846D384B974E47B40DFAD07C0 +:106CE0003D6323495B9D82EA8869BC100A126C9B54 +:106CF0006B25A0EBE1B00F09F7B12570B463F67610 +:106D0000F9E4E7C0C723250DB588EF0D2A33EB5012 +:106D10000E39DCA4B000DC16FFFC7F5819876E56D4 +:106D2000BE7E5B624E490EE0ED72C67FDAA2934CE6 +:106D3000331BD18048DE3160AF6A7E4AFA8FDDF4C2 +:106D40002C0CA60772DB383A0D63D317457BBE20A7 +:106D500068C5851552845DA96399CCCDC33651AC05 +:106D60007241F42F198D47D43C740A69389F1B3C3B +:106D700061511AED0729EDBD334ED3C51716B590F5 +:106D8000F1F1BF48DAE04BE61EB5BA2C1055692F79 +:106D9000009909D6B885F99196E3289967D14C6393 +:106DA00064185C0FA22F57EFC00B32ADA4A0DBC953 +:106DB000484170249CF0EC179A594556760D0F39CE +:106DC000D2677921483B61E02DA57027821574E7D1 +:106DD000D454B232E2DD9CC073C83AD07B008DE35C +:106DE000B944FAFC53C2EDDD90C260D04831019144 +:106DF000B2381ADF8EFC3274CC5CD29EEAA2C25446 +:106E0000CB830002CC741F354473921A240BC1CB80 +:106E1000C446944CB20EFBF2466AF4A81A5A917D0D +:106E200080D48D9BDA1F51A661C5AFF143F4ECC647 +:106E3000AC079010AD6FF8FD6E60E8A9424A2823B8 +:106E40002DBB94CEC9F694F4D5964B043E8363EDE6 +:106E5000F0DBB2EA7C14CFCD4B2C8DEDBB475CB69A +:106E6000319CE9DAAA35B780E6DB327C33409342C5 +:106E7000B7B6F92FB939E581BFC67ABA048AE854A2 +:106E8000003B0803640F414F2F060B9B86CED4F7BF +:106E90000381670194697AC9B4F37439822D7C0740 +:106EA000007990A4BD1F2DFA0347194E52E4B5CACC +:106EB000A932F3FF31C17091EDC848DA3DB1CAC2C1 +:106EC000A14E6466E7D0A99B010633AC5FC1A3F76E +:106ED000B1E9A6446550A8741BACF93012B7E9A11A +:106EE000F792602146162FA81A15A8589AAACDD352 +:106EF000120125F051345D634C4A427343159D32B3 +:106F00005B440B70D493DDE08EA2AEAEC5E931C810 +:106F1000E22E53D9572C3BA966D53878DBDA4E7D63 +:106F20005AF05B4F3DE9AC3BED3E6AEC5A91F83FBD +:106F30008F83A45C59E7BE8EFEAC4CABDD553605A5 +:106F40009554C0F6893D1DB621841CC28A9D74C427 +:106F50001725A8305182A665A96AFA12A733CEA9CF +:106F6000D31A03144767849B27B9853B62F9C0A4F1 +:106F700064ACFEC2E45BE666DCF48ECBE295B42C36 +:106F80000FC2353FBE78817CB925DEDB7DBDC70CE5 +:106F9000CB0583B6B7352E7DDD82A5019E0EAA4FA7 +:106FA0000A42763687C7649A64FF65E3D732875C06 +:106FB0003B5304C9712E372DE3BE1B3A566F32097D +:106FC00036B7DCF4903FA24CC0102B7E860966C613 +:106FD000E0C3348A21B75DE9C8662051D162314CE3 +:106FE000907F6AD8C53C9E2B68D8DE78374438F04D +:106FF00071B4248827B27FC4111E6DC3CF94E68D6F +:1070000043C3B632DE285B24722F7ACA566E57A766 +:10701000E195EC7CE7938EC846E3D9A0C1AF382652 +:10702000B2A6760368A00DA8BBDFED6E4EFBDBFCBD +:10703000B8880B51511C084D3AAB9F1C4D27358E1B +:10704000244BA90EF07AB1BBDC3E416E24828E0047 +:1070500018B6A5C3474DB3235020CCFD48C58FD6E5 +:10706000D1DCBAB33F3E8D7652EECE12415FA265BF +:107070004D829BA66D8B59D27CF6585C72622F0AAA +:107080001191E8602BDE1F62D720B8F9921C76CDF3 +:10709000151DD1B4D4C191FA8588846D58B8F7D341 +:1070A00068CDD40C118819FDD3394941467B595913 +:1070B0003A196BF49F9FB9A80239F58A74207E05AE +:1070C0006455192F8A3CED51C799DD1B3934A998B5 +:1070D000AB07FCAF156C3B7236C9932EC4D31F6847 +:1070E000E390CC953A573262BC42878F56A82D69FF +:1070F000779FF073250886F8591F311981DC7C2AA7 +:107100003FF223D6BD5026D589373F88ABF119EC25 +:10711000EF194588905E616F4D6F107B7789DE9D1A +:10712000932090AC2174D40C94A0977E9B4025A111 +:10713000455D8E11827C827641FE3A77C02E2E8587 +:1071400019E7B83A59FFE5C80B26E3AF439171E957 +:1071500088A611F87F29975D32BC80DDC7DCA86462 +:107160007BE0900E9746F7913D933E3886091BBD14 +:10717000D270AC159697CD5BD0940E726EC97DDA45 +:107180007189F042BB50F0AC11FEBFBC21DCD6D7F8 +:1071900062AD7AB9E432D096A5520B88C4252C8909 +:1071A000F7A14BD944778526814DD29828CBE97B2E +:1071B00076FAE5D4EA187292F2EFDC0A781B83F0D3 +:1071C000F440DB93EFC89199A0FE36672DB9453A9C +:1071D0003289447854A9B35E7F54AD4CCE8F44CFEE +:1071E000159515EADB9C3873231FC0F8880B3043D4 +:1071F0000E54FC78FD149C426C764E15F459001424 +:1072000054E9EB01ACBACFC8546E172FC17C07CB41 +:10721000DF99722CAD525E3D627D05BD5726828E90 +:107220004780817FCAFF8BCFFFFD10474CE262E6AB +:107230000ECAD7F16DBC2322DAC0F425DDAF4D5D57 +:10724000D717038F39771896D74DD59EF5B98B5838 +:10725000836B6F1107A99C169C066F4BF09CDA9EFE +:1072600097E29F8976D9F7EFB030A5A2730B0BC4D4 +:1072700034EEE359E2D246A9D8B9EDDFC84BE57246 +:1072800031152F3A0B35F137B3B24672F85C292B22 +:1072900062CE0DA62082A0F0F2D848D0EC68501142 +:1072A0004296F4B78029405C16AEE2AA01A2167796 +:1072B000D78978C1CF64F59E6D969896A983952459 +:1072C0007816921A64FA31D35F63405AB83B044887 +:1072D000FA0C4A257DE290680FBE504EAA6ABABFEA +:1072E000CA327A363860D577F1FB4750BB6C1B2227 +:1072F000C57DCA62D632A42D26B3A5AA00B713C68F +:10730000BEB351CEB03F48D1AFD65BFDDB552A703E +:10731000D33BB4315A632FCA57067E361EC4B1A67A +:1073200030ADD193888DA15F6569973DAACFA0AF9D +:1073300040A3E55EDEA79B44AAC9535658763C5746 +:107340007E599789359BACB120497387F383A31489 +:10735000372CB4D21BE0D0734F22B6A2E22558538B +:1073600005916EA5E6B18344AB4457E4CE69FD2D8B +:10737000B428AA70583821408AB419FB806824D9EF +:107380001198276465637BFB997E17E4EEA0B66FC6 +:107390008E4F76EA8F355506DD073C3D91B818854E +:1073A000A56A3A5D479368C5658AA060ADCAF53A9B +:1073B0008BABB84B7DDEE1E42CF22908B7CD3483EA +:1073C0004624086C2F7EDD397EAA36F80D34A3E6FC +:1073D0002F0A8A7CF687BC93A710B4490D06527A0F +:1073E00039AC24845C90CB04D174119DED029B7365 +:1073F000E33DAD126131694EBCA360BAD0273F9125 +:10740000E706D2E610675B8248844B5A3DBB62D1E7 +:107410001BE5DCA5B40CDEBACE25723327AAD83B17 +:10742000859C714304DD19E269A022A02AC925E0E8 +:10743000F4070DC25116ABD49747CF0845E8CBE40B +:107440008A033C03E651AC721DC27787FBB8E0BDEE +:1074500042E87797F2E9D208003ECFFC6211550767 +:107460003DBB35287FB1C450504D997954CB7796A8 +:10747000BEBF7FEBD77744F65863519C666C623C85 +:10748000215E5D5C51D3F64036DFB90E6121B5DE79 +:107490007C1A9499DF39072266E91EB943AD8EDC68 +:1074A000FC85071155442A05A5119FBDE4415B5891 +:1074B0007C9102EDC4AE4AB5378ED10B356E34AB3C +:1074C000AE37D78E137290F74285E83A5EB8DA94F9 +:1074D000D1B6468BC523FC31B15DC4082A7CC7BE3A +:1074E000D0F63751B3E8B6B3981FB15895EF4EC1F7 +:1074F000DAF384A59E72D7B4D18E3558FBD1D64627 +:107500005A81A46D5CD15A59C5B8D2375BA91226ED +:10751000194B9D1113187B2660D1AD8BCFCF12E98B +:10752000E67E58AF08F7372F8205F45CE095885D5A +:107530006129EB96D7E4A3EC02507C5D5C17BB9706 +:107540006BD8440675472B6453AA524F616BC1D167 +:10755000FAB3D168873CAF831D1957DD27AB675E4F +:10756000B2B6C7B61EDFFB7AA03966C63C965A385B +:10757000F9CE8B80B5C46A0CDAC7C809B066AF64AF +:10758000077AB4F1479F275C74E13EC576B9DF1CEA +:107590004A7D41F0FE2658332ECB9DC7ABF87BDDEC +:1075A0003834F9E375480262E9DE38356B706AC534 +:1075B000DD4C2D4B158005DFE10C27817250E64232 +:1075C000167A043BAE7F47F97D09B831329C8F9221 +:1075D00043EC2AB7E19ADED6ACB028EA421A4D71E4 +:1075E000BE4D7F81705A7682A3C399CABC35AB4722 +:1075F000AFDDEA5F41DA034093ABC031985CDF183E +:107600001CDD63DB7937C5F598A32CA4CA16FB9D56 +:10761000517478C681C192159758876DC69D620DC9 +:10762000FD82EAF9720FCC3363305EE213C80CAD11 +:10763000CBB3D957FA9BB202FB6195C6DAD6B6AD89 +:1076400014F4C56BB46B46533D895B5771DAD91995 +:107650001ADD641181651E7E735BA5E00765E1CECE +:10766000FF2E78B3123C6501BB9DCE3B1738A1902D +:107670007977D5789DDACE6A3D05829644F527F86C +:107680003CCADEDD0D0344B767691C04B7D6F50BB1 +:107690004FC1E6BB353EED8C76A576FADAEE4D624B +:1076A000F20240027E98B52648E1A951D091D36BF1 +:1076B0001B302E9CBC3BEAE3E8B0EBDCFF2BBB0BA2 +:1076C0004DB15964BEBD50D9DACDA3F942921AA08A +:1076D00031087CE984A9E8C2883AD8DBDBD689AADC +:1076E0004726BBC8866680FAE1371A25BAF21C9491 +:1076F000F476FFB5C6316773EAABCFD5FA65B21F32 +:10770000906AB349469C359ECBEA861C20697B0E65 +:1077100041107A8413B5AA14A7E80C3C4A58EB6AC6 +:1077200014EC0472ADE80797C2E9F3A05EF09DCEB9 +:10773000E818639ED5BF24CF3BED384BD20C5D2AB1 +:10774000109E15C25F9CD842B6E34BA1128A3E7CC4 +:10775000DBCD5F5284532927B519057F1DE0DEAECE +:107760002DD0A1865DD04E192836BD6F792A2A1BEF +:1077700047BEF912403E26CF709C3A71C456FCC1F8 +:1077800024B7A0244E753EE8FB8B9B0ED3BC8DB76F +:107790003394A9394CFC1D9459D9C0B3B0B7FD88B6 +:1077A000575B6502B9EA94BFCF2C74749A03A47A2C +:1077B0004E391F461B969B0216BF7A8BFB359A8F5C +:1077C000980D3E1237C60B3ED2B9C7F8B93970E0F2 +:1077D000FE1A920DD820D78E7CEF702304D1CF7D76 +:1077E000EFADA5AFE07240108BB1B65CB3D053A83B +:1077F0006B32EF267D5D0D185A1681D2D51DD94703 +:10780000A1979E56B497F8E8FAD601D3E3FE9A7B87 +:10781000DA23632739B2F4A4B8C96ACFF32BAFF1E6 +:10782000418D911D4EEFEB38D840D3E3A18F4BDC57 +:10783000F57DA2510ED22E06B62F4CD1471D54D83D +:1078400093A503794C38F73B81063935A3929665A9 +:10785000F497BEFEFD04327EB0496AD67DEE4E86B8 +:107860003A7D6DD7C57B82AF50D59410B9016F9129 +:107870005BE3617D27BC84A06721FD42EDBA2AFD50 +:1078800035EC04398B70F0021D983F9E067583A875 +:10789000E42E5F2AAF82A24EEEE44BB5CB033F1934 +:1078A0000F2AA78FA4451AD4EC379C4446C8B5EAE2 +:1078B00098347DF226C6BCDAF624358DA4498EDDD7 +:1078C0001489E03B6B5AC7AEE872615CFD0C24ED95 +:1078D0000E6B315DC7643E93C4CE6F00133B667779 +:1078E00059BD01CE8D3628DDD001ACE5B33B09B7DB +:1078F000F450C2722C61F0270C084817399EF735F6 +:1079000080C066180F0C49E89049E65191F1C4C651 +:107910001903E9612F166767A64C42555A7715037C +:10792000CC9442E52CCF64B0613A9F0AF47043EFE7 +:10793000912D09F3A7F4F8403693F641B0259FE561 +:10794000F9F1679D14E04287E75A046615EBDCF80D +:107950008ED41A8C2E0E37EB821C54C8FC6637DA94 +:10796000DBCFA9AA94BC1FAC792F11CB5A1EAA4910 +:10797000AE275E6215ECBD87EB481427C7AD9DD0DE +:107980006C8D93D2B65297EB96CD9782935918ECA3 +:10799000BFC3C8F4C5AA6072375559732D7AD83160 +:1079A00032F8011DE155191C64CAA60E00757FA6A8 +:1079B0009AC4594A0A3FDC53C3D5DB1DD3B7960C92 +:1079C000BE7C2A1063A8423BABD93EC6CE63A49CC2 +:1079D0000D6A66896587FCA4DAEE0784A2D359088C +:1079E000FE30CF918F5ED356591ACCD34FE3D5F7E3 +:1079F000D31BB960A87CA5E1C1ABAA1E034EFF361C +:107A00001DA3FFB9F1BC422D4FA617D3721C541011 +:107A100075743CE69C59F9B4D4CB8F237F64BDEADE +:107A20002F6C37AF7E5BE0A2D1F5DEDC0352FF5E48 +:107A30004EB6A9C953B16F8465C3D49D46C7F7F448 +:107A4000143B42D381D9C85782862A18C630687B36 +:107A5000A877048C032C005DC42126C11E37C1EF1A +:107A6000E0275858CA51D6610E59B44A23A658BBCC +:107A7000A88E18D115DE4F62688687B87F286D46BC +:107A80007603C265D8E3FED5698BC2849AB3442FCE +:107A9000FE6E9E9644C8ED325EC79B5F9D33048E9A +:107AA0009D1ACCAA2FD09BC4510DF5B494B2C243F9 +:107AB000B77CF2EFD224073AB16A26F20D615692F2 +:107AC0009050E451526390CF86ED88E7A15C316C11 +:107AD000179B7772CE945D35762617DC2398ADDD43 +:107AE000A0317DCB45D59FBAC1C84AB31869C20D34 +:107AF00012865863538581CE907B9B4502D71AD45A +:107B00004150A3BB6C87A792316248BAADE5DF4C08 +:107B100064B8FBF15C75A463D3E0AFDFE7E586EE04 +:107B20009F890EFD1867BB51FAC4941BF7FD4ACE1E +:107B30005F9688A37697C14A9CA6CA4AD0C7AFBAB7 +:107B4000CBF86C8899597F5FCCD23B319B222DD6E4 +:107B50007A2689C726A428A0F11CF2B2CC69FB9929 +:107B60006AF4E50475911C5002339C2DDE1D8C5087 +:107B7000A80FE88600F648FCF40DF72775CE647A66 +:107B8000103135931FAA2FC88322E7345599BD12AF +:107B90007D5FCEBF1D43F3119B7278A804247B66E2 +:107BA000FF933E321C826742B7E648CB04AB408667 +:107BB0002F7AB156D80862CF12C4E177B793055B2C +:107BC000716D4E064869514E6F44675AC07953BC77 +:107BD0000DBB72961C0348F44FE356665D77E07662 +:107BE000FA058052D17C1D6BA9EFCDC7C1DD0E9582 +:107BF0009277D85CD5BA37D567DF749DAE522B1912 +:107C00000F58043B421E2034D1FCE5E01C725203A5 +:107C100075243967CBFAE1B7619DA3D21349692B6B +:107C200044FE3E760C86BB1332545DD74F58A5AE4A +:107C3000F42432B7A4AA59BED8AC4D701AB35EA2D0 +:107C4000882719A8AAEE0EC953E7DA6AA632FD41C1 +:107C50002F100779B0A9D8F6E4EFF3188ACAB493C5 +:107C60008D4F9C1F24FD3798AB323CFC39E44DBB53 +:107C7000B09E1AAE4FDE681E1A8BD4E61409800738 +:107C8000B992D161DEC48983F248E2FE0D540F71CE +:107C9000A8EE87C94ED39EE02BC12E957DD3365FCB +:107CA000C1B9549E54D829951ABFA5CC164F5EAAC7 +:107CB000BCAE15C989A97020FD35B79A24714D0A4B +:107CC000C2AB58A00E9CB23683B75114C734D6C489 +:107CD0002C40BA278C2A07328228C5995F546179D3 +:107CE0004FAE045A4C7F8AE8B7A6A088245A693858 +:107CF000BD6C2831A038B86BFFF24A4387D52EEF10 +:107D000056AA434A88D0FD7B583EE11B43B9D5ECC7 +:107D1000DD823FAC77E83A73DB08189501E213B0D7 +:107D20001CD0417D56008A7231F1A21E3A88310A78 +:107D30007ABE78A334A70AF73FA63AC4DFC0BD973E +:107D4000E7ACBD5C68DDE74EB985F66279BD28E534 +:107D5000769165FBBF229BF7AE71033DFAB8B92758 +:107D60002CD1DCD78030239AB4C248D67124222E7D +:107D7000FFB22A52500064591028D706E1F4825607 +:107D800003FCFDC7B9354D51F253501D0C819EB314 +:107D9000E85C0FAD35A9DB9601D61CE10BBDC440F4 +:107DA0002AFE6C549A0D7D18B8861258D0A8620726 +:107DB000C2129BF46DCDD784BB4CE2265C012966D0 +:107DC000281D84E63DB11E6F9C684EED373FF220C2 +:107DD000B203A3903CC507998B4C7230E832B6537E +:107DE0008E769DDF3ADC336199BD0DB8483F5EEB7E +:107DF0008693E9D1D71CEF579FA73ADDADC465E75D +:107E000020713AFD061E55B17EFE69C5309B7E236A +:107E10003AE3E0DB01BF772B2C9EBEA0D32EB0A6A9 +:107E2000CB8F1725B64D1081B8532E2EFA73E44828 +:107E300010DD3616D7A36B12C4E5C09260935DF3D4 +:107E4000AD3A04AFA5207FABBC09871FA5BF8A123E +:107E5000507112E6BBDC89855E6D0996F565C1ED52 +:107E6000B6764C1E6669ED9DA9A20FFB58AFED6575 +:107E700079A94E917730F8A54556E91FAEE11F5715 +:107E80008E407AA5A09BECC8843B5B18D279E98030 +:107E90003521D37E0B8620AB9CF22B27F822A6003F +:107EA0000D1C5E5C63D2BB4F1AF8864B3C166C0906 +:107EB0006455B78356DC90022068D05AAE1CDF9E12 +:107EC0005401891825CDED47427BD1B63F9DB2C202 +:107ED00050748035E2773070AD0A96C19E472C57BA +:107EE0006F1EBDED56F07AAC9B4BDE92CE1086BF76 +:107EF0001BFC5E1546AA0549DB43DFAD78AFFBE20C +:107F000097210B9E9B2D320D6F29A0F6D65BA37A8D +:107F1000A05797AB0712BFB829AF65FBEB72E90614 +:107F20006FC4C0251E4073194A824163BE9AFB1874 +:107F3000C3530A54D7DFC66A90292B028AE1E57938 +:107F400092D265C554DFE04473BB3FAC2FB64C2BD7 +:107F5000CF9C7AB06DCC92D0CFD500ECCF6A19CC43 +:107F60007728316ECA1D103BF351C5E54776277D52 +:107F7000F29A58EC43A80B47CE9F2E90E1774B7FA7 +:107F8000CDABCBE5F3BC145163AB8D93CFD256F0A0 +:107F90007E52B2FE423D2B3EEB392E18D8ECEF1646 +:107FA0005D6441DC9D69CD7BF208ECD7B8CEC0138F +:107FB000E0490578109B269794A53164A994BF1DCC +:107FC000007B8A45CD1D3AB779BC5FDD0241FF9B3E +:107FD0006A9EFEA21A3456300ED0BB5881BCB69FA2 +:107FE0007CF33F5385498A5FDB47CC825958ED8843 +:107FF0004BD895716B463F9EF78D5C71ADC2CE72CA +:108000004F14ED2CB22C66DA93DB9F3B39A918A6EE +:10801000C7AABF23A53D79DF65C2D7EB15141C5A4B +:10802000B3852517E28FAE5AF53108DC5026CEB560 +:10803000BFF33C837F5C144279136A88AC9906696C +:10804000BFA89FE268DDFEE4D8538C8D36C40CDEF9 +:108050009CABC56C1B692CA0F6676BD62697A5B6A2 +:108060003CB5C6127B720BCC55859C782CABD86185 +:108070002A56620FB780DF9EAA40A187EB81FE3BA4 +:108080007F4D90EAE08CE31B9D68738ABE84546741 +:10809000D8087A9FBF37A133C1F7148B8355B73EF9 +:1080A0001FD241F7510C6877E94A2568B0883FA68E +:1080B0008A67D8C23D43F982147AF7F88FD63351D4 +:1080C000305002F7D3AFFBE79660AC9A0AB4352480 +:1080D0002FC22F62264C94BB29907DCC4B4B457B05 +:1080E000BDF5F80147AB303B0F9576A6A1ED030136 +:1080F000770D5949EA59304990108022AAF5A0809D +:10810000EB7E8D63DBA665AB984E23989E392AA83B +:1081100030CA9B1C90FC3DE33B888383B086DC49DE +:108120006DC0CFF94E52E775793831D0408CC149D6 +:10813000B541C94E2F645AD5D9BDF81ABA42208E1E +:10814000032338DD9A220DB218ACD95D99CF4FD4F4 +:10815000C4F8F40AC20C6DF2D5E4616C1D418B09C0 +:10816000BCD1784CF39EB00B3709B9F1B1D421B82A +:108170001AEAE39574FE587CD4C0316B15B0D1EE89 +:1081800064A1B55F759C22BC02C262EAA9D5579D65 +:108190004EB2250EB519B20B381E1FF444E9584EE5 +:1081A0006CD957131F431048C563F9C352D8DA5B23 +:1081B000BDE17F95516F5176A6E82F566E00B2A9AA +:1081C00042D48132F651406BE12FEF7162490A9738 +:1081D0005B44B57D56B811B7D02E0634650FB95043 +:1081E00049D00A6B26F20E3EF8131B266F4422A4D8 +:1081F000D49EDC9BB5EF451B52B1C5B83E8670607E +:1082000051449A9708FA740322459C15DD5460D0B6 +:108210003ABBEDB926F806D8E4D8071EE557CEBE1E +:108220009B305B8A0490940596D87CED2F47950E81 +:1082300025BE8EADB357C2A70BDFE3FF60A18BA3B2 +:10824000E256794199A9009B29FA25A724CCCE9A18 +:108250002A6F84D65E7CE9B5FB8C49FB9417FF1D21 +:10826000C774C33B67A382C51447CA992D2580D81C +:108270005034227CD16C871DA6A2CA6BD0DC02527E +:10828000AAEACC17EFE7B1427C9B2432438D0CABBA +:10829000240CB40A7FA475C60FF01F8D94F7EC0F61 +:1082A000FB4F4A7E8BC7DCAAB6439FF970D0240AE5 +:1082B000121FD1A40BA4D86677198A9EFEACF85879 +:1082C0003134B063D916542E5A54853A6F08947FCE +:1082D0008C566ADB20141A6BE73F4A5CA1D10B1E57 +:1082E000B5F601931F54F6DD4031220834BFD97B27 +:1082F00006716192C4AB12E38A6D724052E81414A5 +:10830000DD5D525C8394240A27E5394C1D990B0BE3 +:10831000FB8CF1B911F4A4C6F31B2FC57DA1E77343 +:108320009627E034686C72913AB05BFB38F8E7311D +:10833000E9FE5E7F12DE437392F4ACAEBCA1C06D69 +:10834000FD99BAF61C6EF17229ADC9D64002F92822 +:10835000817CEA71A7A586602C31EC60D683884DBC +:10836000287C7471D4AF9FA582A021BF5C0B4D996E +:10837000EE1CFC05495E9A6CE9083F8A5933614658 +:10838000305A3217AAFB4905F7C8D1E4F1865C7B65 +:10839000265C0630985CB5D3D025BCAAFFF9B0B4F2 +:1083A0008771154E194F1675860B36464F910A1672 +:1083B000B1EAD3A18F32C69229BCDC5F57658E6FBC +:1083C000FDAF78E9182A2B1FAF67F3CB61DC6C9601 +:1083D000ECEEEE83840D1FA5837D71CABDDCA8BFC2 +:1083E000FA7E3F5BEF39624A60735585A98DBF7590 +:1083F000FD61500E7BB1E8FFB0819CA64B6FB79634 +:10840000D80F66888BB884F2BB1B4E5E8B5E9EB223 +:108410009ADE2529930733FBAEA71748023E51A6E3 +:10842000DDED7533A00BFE71E9D19708BA5D16AB8F +:10843000467C57A27F8718A17DD16D076A08FC444E +:10844000874E252A0041E5AD0E9C0C4B1E071D19D9 +:1084500022B7A41C1CEA6DC07A021EEEF6A8030D1A +:108460005AC5D957F0F942BB7A7EB61DC36BAEB67A +:10847000C88E2713442D495B9ABB08DA21D92DC633 +:108480004271A99BCBD93D495A9023B1F6D3F8BF8D +:108490009F01D508D5FC83D3DDA1C04D73F77F5D67 +:1084A000BEA7079D531B4BCE825E4EAAE751D2E476 +:1084B000D34D2D340D80FB0DCDC40E74069FC1E14C +:1084C000A5453D257CF32DA553E0E645F8190D089B +:1084D000524FFA0BC9C725C736602C95D55F00BB34 +:1084E000E36DDF4EB4A8FBD471F7579826C6109001 +:1084F000497C11DA19FAEDB2A3DBA5B88612C99B43 +:10850000E3AF6C633D53F550E887F20C9BB4BA9D22 +:108510009E8414535E62F64EFAE878E30FA2B66DBD +:1085200046C77204FEFDB692D110AADDC42635E41A +:10853000DCB85B65ED9C7DC976CFC6783637EB51EC +:108540003801BAC90C394D7963A42F507A586E8816 +:1085500006CED9C5CE63441876107B40E7BEEF3116 +:10856000C16793B39CCFC72485D7460F2B46F0A78E +:1085700002BFAD727AF198ECD4452550E223ED7A32 +:108580009BF2D8B144D72055034D59172B30824365 +:10859000BDF818B7AF9A1F60628C47C56198A630C6 +:1085A0007020B5CC2E6FEA9A28BF7E21F3F22929DC +:1085B000C06E8AC997A23FC70A792DCF3CA6C30EC9 +:1085C0005CA836CE9BF9BA3F000CE2BA3380974BD9 +:1085D00057CAF3C5D5BA396D92332CC7DBC6616C67 +:1085E000A410CB60ADE9C0270254347BE37380381C +:1085F0003069C53D48B053269603D541E0E7DA8A95 +:10860000266010118CB1EC7E3FD2EECDF13CDCDF68 +:10861000E95482E6EA07AA5381B51E369BD0FE5282 +:10862000D3FA3BC2C448D97042884AAEDD7920B043 +:10863000F4B86CBBA3577D16782BA1725C681ED66C +:10864000FBF55EA9050801784D36D884B0D53AEF20 +:1086500046D3F0815AA07CE63C15604B4FF53A4B6F +:10866000C20A7728A68AE58DA8EC7A1A3CD0CBF10D +:108670009D6D473519809A45E790768127D4D0CAF9 +:10868000DCF8EBFBD4E573A722FBA2DC0738DC9A0D +:10869000C7B8A80C09B873509FA6B2E0A4DC941127 +:1086A0009D701F09EF1774CEAB5B15D2872A3CDD96 +:1086B0007435267916908AFA25CB576F09B6743E21 +:1086C0006E07DA1BDC8F5102CE320E3E65537F1FE0 +:1086D0002D46B23208B02B807825B3CF0CA265B0FE +:1086E0001F0B81561D495C387BA7EC1A676A5561E0 +:1086F000FC7179E1F1B573A000517E1397018DFBF8 +:10870000EDCC6A92CCD9BFE09F5BA65BB886CAFB72 +:10871000DB03BBA613BFE758BF01D5791B73A7CFF7 +:1087200034FAD42709A6212ED11BEE7E2F95B24E06 +:10873000742E51214EB1494705292FD7A4AB2F6084 +:10874000289489BA80AA169CE03CA86D043E9D57E7 +:10875000352FDB37447F5BB17679668D9D6EA01037 +:108760009BDED5E8524AC3FB052CF2E5A7CF853B3B +:108770002B1AFE16F3DC015D008DEE67488F44383E +:1087800041BFCE1755D397A7A357C6A7A55A0042F6 +:1087900052B254DC2ED307FC29A00F188B30608115 +:1087A000E383496EF0BAA3994D4B6B02B1FBB587D9 +:1087B0006CEC2E72C9A8456DCA48CD36F7478DB20C +:1087C000EE43CF38DA121EEF89B623CFC99E7EDF83 +:1087D0009A1222B0E51653469240A88C0E392AF719 +:1087E000C4CA3A7B555AA4BDCE58FE5E7BAF8912EF +:1087F0009D194DB578AAB8A5B48689700B96A1AF1E +:10880000AF8DDACBB3F801FE102F856F9188EE2C77 +:10881000416F313B8EA280A685450A78A5C6A8BFC8 +:108820000C9C020B408F12707FD545D41661B6DBCD +:10883000D13BD10FFD0277C2678E2A3A8AFB62F3E1 +:108840001DAD5605DA62054DCD6464533408DC5A1B +:108850005ADFEADAE3417B9CB65D9EC3FE8B91DF73 +:10886000AB16EDA479FAFD3DBC378A5927F94D2F97 +:1088700091EE090CB820BE0CBA223040869E8FF8CB +:108880007877E6664C7882F462F9E0D9FEA1FD05BE +:10889000EE4DF44AC1C98E08E5E9159CDFF0BDF341 +:1088A000B3781A5FD52F3F2CEF700CF07B931AB57D +:1088B000A33311F934AB389863D53260EFE8CE7F3B +:1088C000DCC88BBE0EEB65150DED22C795BDFA8198 +:1088D000A0F54608656163F67BB1E0185018FD9974 +:1088E000AF100394A627D3224EB201A234FA0A7A1B +:1088F0000B27078AB938401F0B53473612E470B56F +:10890000D03AA42B04719B2974600BC3510F151B23 +:1089100049EB344E629D39D7E0B8B79C8D028D6C1F +:10892000A3D4898A25509AC5B92A7CCDE5764572AB +:1089300048D34109F0849AB24DC1F7899AF4B1BC89 +:108940000924A5B20EB67E9EBBB172AA28E1A6C7C5 +:108950006F5E861837CAE45ECCC4036BAC78B5444E +:10896000522EDD671C8E55F05B8EE5444CE7EDB969 +:10897000BDC5DF7D3ED33ACC48B735B3EC738843F1 +:108980009A6D84AB3428A34E6AB207485A03702705 +:108990005EEB05A261CD6056A8BD9A290279ABEEC7 +:1089A000F183374F2DC8FA53101012931DDD752334 +:1089B000A7AA1559DEA635E36ED29F023C65D3AC5B +:1089C000A959C8B8D5E17FC49EEA33EB7313FE49B9 +:1089D00096F34D2E1050BC870B3EA37B92D3A72954 +:1089E000A92493B296E0053951D9426058F3645FE7 +:1089F000D69B5EE783884301882EB94B3D0ED9BDD7 +:108A00004DADC50BC169CEC314B194EACC942E4DC3 +:108A1000468EF33B98991437183FE0A2C61AA3E498 +:108A2000E8D86C8CB155F0C260BECE12B039238844 +:108A300053DA1B41CAB5FCE55F7AD9168354D6CF09 +:108A40002B2FABEC39C9A8F3DB7110BCDB90D5231D +:108A5000BC0C6897574373A039150EBBD16C70716D +:108A60004549BE6E8808EB453990CED592D81A6537 +:108A7000036CE44150E51B71D13651C510740F07EA +:108A8000A582FE5CB46B4A2DD620738E24F57776D2 +:108A9000108FA88A5673EFB231A5377802E87B169B +:108AA000D948467B767687108600EF2A3BDDDAE9E7 +:108AB0009FA741719F2FB026A988DDD23DE0D2A7A4 +:108AC0000EEB88B51EC87C41F523EE414ABA08ADCD +:108AD00002E1839FA29F2541F53939C727C3CEBD47 +:108AE0009D438FD70CBE9864CC52DFD4B6285B8FE1 +:108AF000BA3EDEB03C339F45058FF3A2F51072B647 +:108B0000B4234AF2D016FFFE49E28A3BADF6E019E3 +:108B1000ABD725954EEC5D2C0CD3DCD4AF23085F8E +:108B20003278B66F8F221274E23FD5185730210881 +:108B3000C7DCED1A09F12ACC9DECAEBB55AD37E68A +:108B40002369B9D35FD96A1480D8AC65CBF6F759DD +:108B50009285E4875AEB270855CDCC10AC019EB026 +:108B600063159D0AD21A2F511A79D52FC6502DD1CF +:108B70005B9DE1471C69EBCCE90EDD49E339BA6442 +:108B80008E90E4C4BECB2BE19F825B4F30C39B7BB6 +:108B9000E054A67A274886628B4BA0B1AA86D28C75 +:108BA000A4FF45E52D3568CA7B7ADAE95B997B85B8 +:108BB00080548938DCC9FB4D08280CA659E67C7224 +:108BC000E955BD4FBEAA7E9F26549078111EB5D19F +:108BD00076350A43F8A15F83C3CC48B576FDEDB87E +:108BE000EA93FC412EAAA716A32DF56446345B4CEC +:108BF000E91DAD0AD73D47A4D4812DF99CEADEEEEC +:108C0000EDCEE4C184C3F9E610E12D49737D8123E3 +:108C10003ED6576BFDE2450D9E26C71F765A6B6BFD +:108C2000C62647030A28DBFEDA0360E5BFAD7618E7 +:108C300058F9E352B679867B476323EAA75FF10EC2 +:108C400023FFAFFF5D41ED33FB80FCC8505DE810B2 +:108C5000721131CCB8B6B77E05D03B366AE50F3419 +:108C6000F3CD709C90289D771F10FFA107315161B3 +:108C7000FDA7B80D90A442F710B920C7C626C58F2E +:108C80006409FD9BB1E8A6798E328FEA3D378FA14A +:108C900052DAE31F9EB0EF4B39F0402E44DD1F380F +:108CA00054EB6EF97C90F5885EDB0841E49245ACAC +:108CB0004477A76C4C2CAD5186A0A1F91082663B7D +:108CC0008FA75FD75FE5F53981B50CD33376C7D36E +:108CD000F21D9BDB350B66ED8CE3D195B32B470D75 +:108CE00093662043C73300EAB8536BB9682C91BC34 +:108CF000F257F92842245E98E7F01B59F85A289653 +:108D0000FA2635B69ED5CB0E4DEA5B84284F7EAE53 +:108D10000BA0CE560F39FFB6F3E5050B2A149815B4 +:108D2000EB030EEA0E90A66747F0B391F2B8EBDDC5 +:108D3000D8D5019D4CE387E9797BBA9703335694E4 +:108D400096938F512A325EB0D130024F4082927E8C +:108D5000B3AEBC3A8E41573DDDD781F80F0CB988D0 +:108D6000CB9CB5941C12476866604616C4D4BBAB56 +:108D7000D7641FCB0DFF96EC897BDF2EA950BE1B5D +:108D8000C0A0AF94DFCD4D32076A863CC71484B6CD +:108D900028308570BFF2D988189E56AF48C1AF61A0 +:108DA000D7D02514C26973EA72A9A04BC7470A1B22 +:108DB000CA07C2C455DDAEFFD0E7E35BFA5BC24829 +:108DC000693CBBE448C7ECE6CB4E2F6CF26FA3DAEC +:108DD000C466D6B6BC905B3F117BCF85D2AB5375D2 +:108DE000BDA70678080E55F82C5F8DC7968B3EEB15 +:108DF00062FE0B04C57226AB455A838BE6BD28AFD5 +:108E0000AB9A2C2F577FB404AAB37618DEC155D97C +:108E1000C9EA4B83525321F2991153381BD4916BF9 +:108E200018A609AA1B1C758A8FC6EE4364926CEBC8 +:108E300021A95C015CAA90DEAB597E431A179425E8 +:108E4000C8FD66355345408EF28EF52CACD0D50F5B +:108E50006B855F97185CE29D2892832695B0C1D5FB +:108E60003AE0E57E85FE566526431A111B3111A2B4 +:108E7000F57B2FFD03E1FCD35A0E96B60B6C1CFC60 +:108E8000A37A1AF431FD389AC9C36A56F94791AFEB +:108E9000F5CDC034398E9579B71A6DAB9056453003 +:108EA000631DEE637DEB9201CEE5CA44658E65FFDE +:108EB000B7243BDD638F43E47C02F6B4B80A73EC5D +:108EC000BABCD4021FE9BF01A3D554C98ECE566ED9 +:108ED000CF4B8F8062AF324E81BC7DB33587446DFE +:108EE000C6FCD1BD0B13C146A37C15CB97EA2082EB +:108EF000EEB77FE3747EA99E7F55BE9F33A15127B5 +:108F0000B9A0F6EBC06CA0AC2C9688DB65727778C4 +:108F1000516D0ED791795E9CE8339B385BAECC6681 +:108F200096317CEFF165205C205136A727618BE8F4 +:108F3000881A29DD55589DE2DFCFC272BE756F8950 +:108F4000C51E21995AE799592FC5EA12C7B5CDCD4B +:108F5000319CC2F73538345AB2DBB4A58F0A01BD53 +:108F6000831B89972444B85CF3536B42CDE87CB3F0 +:108F70009FEF4B8070ED5A158972437673D6009E31 +:108F80005CCFDD4494D2348A1A42ADBDA7ACBBC3DA +:108F900013B41E20494DC917948CDFD70195731760 +:108FA00007BF2D0A2DA55EF97AC1ED984BBACADE2E +:108FB00068F62E922C70E8AD44D315AE6A422D1C93 +:108FC000C8553685C3B9A30A7DECF84F46626830B0 +:108FD000C4DF43969B307D519D88A005856273C890 +:108FE0002F55EBDF2646F1C8707F1B2A87BBCD03C8 +:108FF0006A9D29EE4573EF46F14A6FEBC3FA84D8B8 +:10900000C627762CC273B1D9BE10EA48FFFEAD9ACE +:10901000A1664BCAF42E9607B141863E74336F4861 +:10902000E48F0224537BCC9438CC4F0099C47C52FB +:10903000C23FAE9B2DF3ACE5AA7BF64F5A1429A68E +:109040009041499A3E754BE71DF0D185481EAD977A +:109050000A7C881EB1D7FFD02657807B61E3081EAB +:109060004E9904D355181EB65FB8D4FA914BCDEC87 +:10907000B311C38F73A8C62FB9C5F948AFF4254300 +:10908000529CB5D5E55CBAEC521C2061F4BD13B816 +:10909000B7076C4903970E384723B26CED5DEFF6C6 +:1090A000B670124680DC6AC4DE3BBA0B3645765E8B +:1090B000B473B500CB12E75D46F8E86C29F0D90F20 +:1090C000E43EEE9C8544E202B7FCA319C49F6B0307 +:1090D000031AA279599ED2F27D1A738539A6B29AE3 +:1090E000319B7B4E96F8E06F35D4DEAE4325278C5E +:1090F000C2662B899F26DA65F91E61641B1DBA5072 +:109100005762CEC3482C6129A17130C8AE723BA909 +:10911000B8E63FB5C5E9CF5AA894F5D6D6D9571DBC +:109120005BABD957F656A8A99B39287064C29E94A8 +:109130004C7334AC3D138671F0158C1A720C24EB11 +:109140000357F04B82BBBFB193BC4D43D748992521 +:109150001487C8DDE274EC42EA94C1EAC1C929125D +:10916000C74B3C04BE39ABEAC5B37AED93418FA43B +:1091700003C09B65787790529F7F71C98B2B23AE7C +:10918000CFB00B18F2C1641BAECD92512D295B5E9E +:1091900066B76830FA6D37F87DC700A4F82B4B5AD4 +:1091A000C5E2156E9C0240B6FC89E1EF8251F3E600 +:1091B000CFE0A6FA6D97872018D4FC8B413F69EF6A +:1091C0008863B47802D85BD29ADFE6A46061D1C824 +:1091D0006686EC984C62ED4262A00BAC8EDB9C3252 +:1091E000B3FA852F5459C4F2AA79359001CD8D4D2B +:1091F0006C91F7997473C57FA0AB6831B6477F0057 +:10920000F2E13328242597F3B6867B2C883DC25D96 +:10921000C427BA9A3B56EAE2B970FB53D6D2B1B72B +:109220001F8412C26F1D513B87DB2674A97FAA657C +:10923000470A5375E6F599896157D961CC295C4293 +:1092400082EAC7C8A10710280CF6D544A28777D9AF +:1092500008FF6208D9ACE7888F5AB21D5508C0D004 +:109260003330EBEDF72606CAEF311494B272211FAA +:1092700012EC0AF3CE13F37D2543E958FADB5C19AF +:10928000532469326D505DE16E3097F50DD78D57DF +:10929000D6BBD6C4657C7B4647CEC8663E2C0DDC6B +:1092A000F82BD819A539CE37A3C6B13C7579140D62 +:1092B000510BA4CFD18C7C03D7960DDF9C814F2F0F +:1092C0009812D26FDDED286C2E12B9DD3006165DD6 +:1092D000E8CC5215E09E71F1EFEBCCA53761B09D63 +:1092E00097B23FAA251E9B1CBB0E4DE63A76E27450 +:1092F0004D38D3F6015EE9904D9292348C619129FC +:10930000074B80E4CE7B5053909ECA4B2BE0C1F1BB +:1093100010E8FB54BB7ACCDE91CEA3BF840810B812 +:109320008F72252319169A0C1342B4187F012460FA +:10933000B6DC0CF0623FBB9D6A2A494F8BF0D432F9 +:10934000FE7D3607F74C69C24831AEC3940B75A950 +:1093500025E0A3D7583197BBC1B9C2E1E6CEAA49EF +:10936000DBC49918180572A6A01056998B0DD2402F +:10937000EE5A0664162CDD4EC76CEA8B09A6213B1B +:10938000C04DDC4F77AF6643ED6527B8D5947327A2 +:10939000A21DFE2202A29D439CD8607AF5832496EA +:1093A000F8AF910950F3BEF1543E7B0A1F89358610 +:1093B000C7CC52BA286B72050A02D73DF6DA4521AE +:1093C0001E34A8CE340CA4ED230004A1221B5FF1AF +:1093D000441A52FA96FD26F6672B179FC9819652BA +:1093E000F8B1666C480EF14A65271E47D09E21FAF7 +:1093F000480BACC58305072141ECB2DDD03C62AC23 +:1094000043CBD60FDAAD386EA8B1FFEE3D77689B3F +:10941000EF51708B7FAF92F3AFBCC013BEDF16C7A6 +:10942000086059F03DEC472D874E8CF9CEEBBA40E1 +:10943000F59EAC5782B92BB4C33606DE5DC3B923A3 +:1094400058804BEE6390DF57C14A751A3716FA679A +:10945000DD5F7CFA297827D865FA0067915814896E +:10946000BADA72ABF3C67870A8E06CE30383280E17 +:10947000C12437BF213C82202F15BCE77C75DA94CC +:109480005EB89DBFCD3D166E9F0144F623E0669CFD +:10949000B30E7048B81A0F6F2F7C625E5AC4F51A6B +:1094A000B1F924671B4E3542E6BA8BC39138BDA58E +:1094B000DA98536A26B020F6A23A389235F0A12104 +:1094C0000EB4A39125968939D4CE7C686336600C9E +:1094D0002352B80FEE61E24199E975E77558DD2B2B +:1094E000097D86DB01433CEFECEBF5E2337436B4E7 +:1094F0002AB1D85D2FD102550B6E3849876E2E48A0 +:109500005A8074AEB3F76D17673EBF0AF431BBC023 +:10951000D89914F22169E2F37B63E2F17A50B95CE5 +:10952000ACB505D571865BAE7A7D3BD28CC475C770 +:10953000333E3F029E4EFC13ED9E3B320018708E70 +:109540005FD0BAB5E77E089FA24A76CD9B06BF7A68 +:10955000103080F253EEAA5BF711F4FC9269064BCF +:10956000C3CCB8DF780463FE91DFD75399F4C39A74 +:109570007BE321B463566288682983D3C527386AA0 +:1095800023CC63BFBDE083F43BFA4D66665D98BBB8 +:10959000E2D814838E0A5F6A4BD6471E8023DB9184 +:1095A0002A1AA9CB66948E603D02DC78D3A6748615 +:1095B000BBD5CD9E90148347C06F2DF87BCA51F95F +:1095C000E42B5A18C23E5C48C888F88B91C7807F4C +:1095D000E6405F1AE2A940EBF31922175D76EEEE42 +:1095E0005FA8A90A9B694159FCA56C7E59A5A34EA9 +:1095F0005EAAD1792E86D15F2A1BD5AE51E1DF1D3F +:109600003D4DE16F780BCC8702819D0F772B788FD2 +:10961000FC2A964EE360A18B53BA120A728BFCAE01 +:10962000A4CD68B2C8A2289FF9506C03944921992F +:10963000FE2D9EBE1F20E72A915241B28D93218FAD +:1096400042E5467D72B339FAF103719E9C1F259461 +:10965000CAAD349F7554AC54C1C80242531A5A71F2 +:1096600012F37F077D7997B46E0774D05A671C4553 +:109670005A9717AEC1E47D7E63583319080DA4478D +:10968000DBB2C6462F547EF15CA66450419A1E861A +:10969000E88366478C47368A5871666CD83197EBF9 +:1096A000F55A1C7EC8C2011E5D1B141526C8B86180 +:1096B000148257188848E6165588ECF2070951FEBF +:1096C00012FAA4E12E25092F139554C3D6D1439540 +:1096D0008FDCB37DE9B24BC77B8BC00F46D1E2DB99 +:1096E000DBC4236FD0BF5EBC0F8BC600C12A3B8D8D +:1096F000D15AB076302544AF6C6B31D64578ACB4D6 +:10970000B2C25EFC083BDFE45A27C42CFF9460958C +:10971000B4E18AB337641787426404AD7B0F6FA549 +:10972000517941CF5010F767923136F355C05EE161 +:10973000F315F84DB574610A5D0A705F4DD7F456A4 +:1097400036F50CC722D79342D159374265E55E867C +:10975000CE930952BC13546221B5162B33262F33F6 +:1097600001569E0123673551247A801DD9B0481ACD +:109770007F0FCB1E2C8D639351043FE65CE8FE8D7A +:10978000D644DBE34450EFEE1B383122BF9BFD2E65 +:10979000246344C96DF9B1433D83D8CECF71FE1A1D +:1097A00080C32B252E0AAD01B363C2F183862385C6 +:1097B000CC4C16DD39956A0B49033C7A95C2BC0541 +:1097C0005A5FA6AAF2FEA631D8FEA34DD0C1248EC0 +:1097D000445C6D58C21480E8A6CBA2DA96F1C7515A +:1097E000FE530A5FAD78B19660A4B523F26F106A9C +:1097F000EE2759D8621DA93AD45FB6E2A3DDF1E3A2 +:109800007D74AE8D114B97A79941E4185F679CC199 +:109810009D076D0FFA686997C5F9A2EDD7906C5452 +:1098200044AE39AA582DE07975D5C0FE8FBF347C7F +:10983000C403B9905CB2760BCC3EF4D287923F86DB +:10984000FFFA2F9BA6DFD4C16AEFFAED82D325275A +:109850007D16323F11472B3494B7DD6B6E027F28A3 +:109860000A16470BB174F4F254D8A4A867216168B2 +:109870007056442719676B8918B1CA4A5C5676CF6F +:1098800003A608977D8615820224F0E80B9FF56EEB +:1098900020CA2AE057479701366E273FF516443114 +:1098A000582BB8B2B3C886275B0A8A2F44CF443EF0 +:1098B00007DA96B91E8ADFE919C524F0E812E044F8 +:1098C0006E708A308A4E615A4FBBE431B244A02A8E +:1098D000DDA5AEA3782A8A2B2DFDAF7F21DB52D9DF +:1098E00078A45FFB0BBA066D8365674957308AB869 +:1098F000048C01BDC873DB3B0787CE65383782B562 +:109900002DD1F58A0F4E6BB83305E817FC61F4A131 +:10991000E91302661E84646D15366F31828BBE6258 +:109920005D2DDC95BEC8CFF252C1619031C4B7C97C +:10993000F3E45BB8B711E538482F6F84E8E55E5A69 +:10994000969622EA807E4043159900F20252C04565 +:10995000FD3C61C6C165BCF125366C9BE0362FC667 +:10996000F9920A03DE99BC42BE85E29CF29598D238 +:1099700039CF07A783A6D83F7FB491F83880CD614F +:10998000883E2F86AACD5BA6DADCBAE723EA76EC1E +:10999000438B1262B497D2581628D1DB59304878DD +:1099A000EF91A21A6DFFC71E2691CFB7D706D24AF4 +:1099B0004C7C1095C407A20D94496334BFAD0AF2E4 +:1099C00067EC6C94EBF8199BD945C8F08C33B4C79D +:1099D0007CF4B9F8B32CB5CC2F778E01B612A64320 +:1099E0005A91C5F5D53AF3BADD3159A07ED1AD1DF6 +:1099F00013A57EBA15B5F81D4AE3716DA47E5128F2 +:109A0000CC8E6862D7F8A217B59B13B1D1050000C0 +:109A10005EA26B90C9C6B1E47FC892310FB674E004 +:109A200044ED2981C921ECBE2E8B9AE9F528035417 +:109A30003E8896A71F861F3B62BCCAA5D905DAD00F +:109A4000BC797277BA9996B70828444B0B20C09F0F +:109A5000A209CF46D76B31B3D309D9164214451F9B +:109A6000A40AAEB093F45F4C744B7D469198267176 +:109A70009480165AE4086DD12726B72921179A3603 +:109A8000E41CB6077E7BC89D3DA15CCD28D6335033 +:109A900023F7AEDE342FD8C7B42501DB2BE05F33CC +:109AA000E1306C1DB399314CC04F49AE7C9419A87C +:109AB000C7B2638850AA694AB82E1D3764A41DD165 +:109AC00027BB4156DF270848F07357A2E717FEE986 +:109AD00051F71DA35D9153CA5AEE5BF4BA1B799DF1 +:109AE000E8C244E51316AB539EE6209056D263FBC2 +:109AF0001C1EAEF9F63722FE14E702A079AAB03E8A +:109B0000131CBAD4D30415442D451352B15CF7028B +:109B1000EECE24F85215C8D032DA962BCB2F8664BD +:109B20001B1D3F926599D34D22E71A83319A89799B +:109B30003359360CCD96F774CDF46470653E284FDA +:109B40004653352A1E78B4DA52BE67067FE2C275E4 +:109B5000F71CF06B71AC3328018C54BD4BC90569FF +:109B6000CA0692769F86A156AFE27647BAB76627B5 +:109B700073FB17490C2E2137D05DD076A58C40B5EC +:109B80004501106B1B7EB1C27B54A5AB8DBAF9CADF +:109B90002E8E97A2138CD273F0A21A7B3D68E80137 +:109BA00091EA0BDF13C1F95E8DCBB089966E139CE1 +:109BB000A8950A7FD2BF3BE26EE6670613FE7ED30E +:109BC000B228A2A106FFFFA844736F83A31889AD32 +:109BD000FD90F35EF7AFF22F70260521D5E3F63D39 +:109BE0007CBE89F460FCDBFE350895091B8118DE1C +:109BF000FCBDC2A9AF3A19F55DB616A46264CF499F +:109C00009A615A3446A0D709EAB39A1DDACFC882BE +:109C10008EA494473F87ED82893D1F375CACB81214 +:109C200037014F0781AF63DCDAE54CB04EE2E391D8 +:109C30004F2090B104D461AA574B9F39E444C8BD6A +:109C4000611A994CCC07AE85121FCBB4F0D482B800 +:109C500035B129106EB0040513967EBE331A8810F4 +:109C6000686FDD781BFDFA764DED5C68AD461D8CA6 +:109C70003495F8CCB131F4B42CCAE90BD195ABF9D9 +:109C8000BA130115EAFEF77AAC61AFC88E9BC41A0D +:109C900053A4A3203C4816583663B213EC365C1A22 +:109CA000C9F5F2739468337A5F23DEC9BC739751A8 +:109CB0003D0616D2DF88F06D2095B645E451706BF5 +:109CC000570F70858D1C06AEB044A50A833180A560 +:109CD000F3AB2A4B204D00DCBC076FF280030A92E5 +:109CE0004D5D4E6EE224DA5CD4CF807714F40E28FA +:109CF000D1D432982500C2D38547A471AD8EB24E1F +:109D0000EE0F0630AEE6BF1DC6A9BC678D9DE96F9C +:109D100011E57A242DE3CD872CFE2FE1EB02627D45 +:109D20008651B375077DBA23649FD2C69E420FAC9D +:109D3000284114AC3B649A41AAB5355CFEB11B7650 +:109D40008A051FCE2CCE43C4EF31191F590871E28A +:109D5000C39A2C70F23BD6BC7C0FCB83508EA8C725 +:109D6000ABD160B9482AE5422A6BE7A69A0AC961D5 +:109D70003F6D942282127FFC2EE479E3A72983575A +:109D80002A75AAD134646A65A3B587A9EC5FA528B2 +:109D9000B74172ADA209B8835A473A298CCE78DC14 +:109DA0002835ABBD47703C1AD379D1956A1F2E6C0C +:109DB000909F489A77888AC2305601457EE34AEFE1 +:109DC000061609045174F9C38329507C79E0603781 +:109DD000AA7624E545AE73650C919A92564551B129 +:109DE00051C1E9EF7CF4B755C44680CE314DB16A1C +:109DF0001ED84FB9DADF5EA3F9115B35C468B28AA9 +:109E0000E954D0334E2B94EEE0604F32D619D71878 +:109E10001D87870580D9A5663C9C98A8C9C2E60D18 +:109E200099A0314E5B1890ECE666827B0F58F3CB1D +:109E3000BC557359437BE16E31927D0A5C7824F8FE +:109E4000B96C6912D358A32F9A8C7D8132FEE23C03 +:109E50008E5275CF28C999CCC8FE2D9098B620F7A0 +:109E6000E3AFBC2C6499E3A643F62A0465D6E1B6B9 +:109E7000AE9987977708C50FE656C12E33C0BE55F9 +:109E80001C1DF42EAC1F523044F6FEAB60F0CF83A5 +:109E9000E1E8DE1014C35B08E7F1567449A41F82A1 +:109EA00013B2FC96C2127DBC598B4146E0A822EA4F +:109EB0002F8A70DD1676452FA562C35ACEA400B650 +:109EC0004A2A120087D67F937629DBFB7D7DA9F590 +:109ED000DC67CBCF45C0CD4D58C66E74381FA4DEAD +:109EE000E1060421A9B7AD15BD7C8FB5F0C0320CD9 +:109EF000801315E4140E6E70825E43F69BC4409D81 +:109F0000524670B652D014DA48B1DA1047F58D21B6 +:109F10005B34D3919180B64FA92A22F5846ADA0680 +:109F20004B02A19C9D5EAB49986D2E14C0E45C2B46 +:109F30009CA20ECBB9BA5AD20D087F7FE90A3082B3 +:109F4000C6DF3C9EA65F5870653E46D066A12D6771 +:109F500033957D0E683425AD6B366F93FE3579B73A +:109F6000FD58C306759782DF55CD0FB545243B3F9D +:109F7000AF42341438FA304EFA8785BA9BAEAB80C4 +:109F800020238CB3CF15DAA47355AA77E2B9B0F6C3 +:109F9000B458DA587FC720B3B7B390E72464F549C3 +:109FA000C8FEE87392CC5D42E9EEE255A79D8CA70E +:109FB000463F38857508E1600CDCD78C5074420749 +:109FC0004E76D24AA080F87E044A6289AC4A481292 +:109FD00084821CEA78939E78170AE344EC985E1D0D +:109FE000A25594387E19CD90CBED35658F2956AAB0 +:109FF000E754A60D127902B2057F4E5EBF0BDE2834 +:10A00000543A3873D1A46EE0D937445C6F83935FC0 +:10A01000F33CAA9FC671620BE9532C7005BCEA4F52 +:10A02000E92B3417BFB95C1BBE87839DEC7EEAEE3B +:10A030005ED853E02E66F08DE772CFF7342C1B0606 +:10A040001C05423E4AE21E91A0359C328BCCC9DAF7 +:10A050005B15A18C41D6D72D1C056606C96FC3536D +:10A06000CB93D6EA73033B97A7A0E1C7F1FF64C384 +:10A070008103BDF1A042600938BCC531E75BB41073 +:10A08000B59851DAA1B9224694F919FC5B62E4FF54 +:10A09000FAF5F3D49F62F8B5485CB56DA75ACAF3D8 +:10A0A00055B40B38555C9218F8C892F30A2FA84C97 +:10A0B000FDC019E76BED403D7AB82337FB014AFE3E +:10A0C00071431B232F4D5691D86EFFBCF05B98084F +:10A0D000872A538A03BFEE27BD63D1D49FE3F8F5E7 +:10A0E0003C31F39F19FBAF5C92F239CD2C8AD5A499 +:10A0F0005E879B80E16336F5C895AA6432B0792DFE +:10A100000264CF81D4C8B2B4D26896F1BBE1FBCE71 +:10A11000D2830AEEF0A68AABD982E80987FC7630B2 +:10A12000E2BAD6ABBA43DA2D08E57E646C461A185B +:10A130009A737A1C09E940698372B64BA1FFBA7B16 +:10A140007532FE07BDE883AB823087C7075F143BDB +:10A1500094B62CCC96E98F6BDA0701AF3144298B8A +:10A16000D5C8646160F5A86AF3B61B75BDFAB1176E +:10A17000DF2D8B5946DF66566976D6C5A089869D48 +:10A180001449509465ACDE73D429C13453D0E975B9 +:10A1900064A0669E2E18ED10C18CDB6658BCD9A356 +:10A1A000E5250B9ED4A2EAD0F1F1983275E9249806 +:10A1B00020D7E5FBD5B42F5CA37935810357DF2089 +:10A1C000630C2910AFFA5F37BFBD93B98267830470 +:10A1D0004ABFB9AB8E7AE2F84E5579EEDC78144B73 +:10A1E0007C8C13BA4A05AA4C0C1540FBEB527ED767 +:10A1F000ED2909A95B6D24E7696F318C57D231E7EE +:10A200004BD8D764A9B536DD4AC1546226978EE093 +:10A21000DF2C0D7D255FDEF667063B1C39656F641C +:10A22000EED8FC5A7C0F8C278E0C36AA349320B0C3 +:10A23000C2E8048A2EFAB5B51DF6F7880EC0D3DE43 +:10A24000D7512402F1237814F6A6723B62FA4AF63B +:10A25000F810704C6D6E5F906427570CA2FCB252E0 +:10A2600025E0237003CD86882220CE1DAE38EC4C2D +:10A270009235DD8C97C95C8C780C219CD0BAF0A308 +:10A28000C424D3F15AC3AE4E653E205A86625AC8E2 +:10A29000AAADBB44EDC4D12613A792A053C6B6D530 +:10A2A00008D3A9F4C4A6E4E7FD4260051FCF999046 +:10A2B00086D2CD0BA86D1868343F43077F781F9C6A +:10A2C0005355ABFD25CEDA37B9E53FC5A23D1D5A42 +:10A2D000671E8AAD13354ABB9DF484213857942BF1 +:10A2E00040FEABAFEAAB189CEC09191DFAE31FC2A4 +:10A2F000C09AD8B2DE0C6F029803FEAAE95B6535FE +:10A30000B7082F82769E5295C4B12F02F76DCC9478 +:10A31000E14ACE4F2B00F5C497200567742E06EB5B +:10A3200080E96098C8596DE8497F48A296E6F5C76C +:10A33000B494B086D885B5F4D3E7503FFE4FA6FC61 +:10A34000BA67E7ECBDCFFADDE41F405548191D3B65 +:10A35000E92AEB4251DA42BBB698700805AC72C5E7 +:10A36000A88E68EF67566EA53E6B022531CC909A99 +:10A370005B49E5FADF7D63F853122DC6FE2F6B8033 +:10A38000A7B7A421D69B87548CA37CBF9AFA0C5EF6 +:10A390001FC208F046DF5882EBBBDCCC9803E98F84 +:10A3A0007DC8B9906CB52E69C8DCBD5833160F4511 +:10A3B00053ED98B86D4249D9C8B9BA4BDA135083F6 +:10A3C0001C99382F89FD21D707237A3D009BD4148F +:10A3D0003597F8C5E166666ECA5D9F7B0DD7F85567 +:10A3E00020002D63024F95A1F9FB3F38DC5C962FCE +:10A3F000A02E95C425DE88ACC973D3D2ADCD8361C0 +:10A4000025624F219A1F3EDDA5154B2CB4902CDF01 +:10A410007D596D7A693C41D976B06C2EEA4144DAB7 +:10A42000659B748DAE07D0082D860053188C9C3E1A +:10A43000B9AFA1EFD97602925ECE2648F968AC4159 +:10A44000B1BD94FB19F3DCE2A6CB8F97D96D4F24F5 +:10A450008C40581295D5FD729D1D38E2767E81F2B2 +:10A46000932FECAEE1FD35651FD235AA3C05E00E19 +:10A4700065605AA261E9197EFB7F28039603689FF5 +:10A4800098ED3F143A83F6B62E49BFC07F0EB1ABAC +:10A490003C36B545E707EE456A14740DCBD1572914 +:10A4A000C3364848F9C6E376D25C0E7534EEF8D16F +:10A4B000126E3E7A3E740A14F1EB4D0BC043109CB1 +:10A4C0007201068ADD7755593B057A3145E80D8DD5 +:10A4D000EEAD94DDD31561695BA1FB426A83DD2D8E +:10A4E000A090A33437C1C5332738B2B0BBA2A2585D +:10A4F00046E141A99FFA0B4B2503243FF80323793A +:10A5000068762FB39F2DCD29C5B3142FCE24C193C8 +:10A51000ADA1485F29E27AC6C34422C4CE0CF4221E +:10A52000C1E7C9CA8F5BAE7B49850DC7DF01DC5D22 +:10A530009134E384E06C7A669AE5F54E6230DA8015 +:10A54000365D871BAD808A9F32CD699E02A5E1A84A +:10A5500034B1E0D44A853E048BA1A07F7A01E5D1D5 +:10A56000C33049EBA07606F2D7A9F06DAA368CFE6F +:10A57000C97A3A21FF9BAA702BC0EEAE3C8347916B +:10A58000C6232802991CD015930A7D896A636BC77C +:10A590004FF91D1FD1B4360588592940BE4F48E0F8 +:10A5A000B1C296CC2973B9D95BC65AA7FE68E15EE1 +:10A5B000C98F1C783C3121FFB979F2832315AC98FF +:10A5C00055F7C041C887C43D674356EF5FA1B81037 +:10A5D0004CD8FB97E5DCDA1E6F51D683E2158D1F50 +:10A5E00025496253DBF823F21A395BDA8153B0480C +:10A5F0004512453AC1E2A794F1DB06C6033E2D5F42 +:10A60000141569F521EC0E8E2F51BB4E208A09AF2F +:10A610002A0B5C411B9FC036DAEA291BF33798A945 +:10A620009987FB6A6906D898E573A51C8A1D22D90B +:10A63000FC99B79C83A3764DD85A2FABC9B102A51C +:10A640004AFCDB807E06A105D4C29FC3D9D0D46862 +:10A650008ECF6AE9666F9ED0B3BAF5B7DD55EF0EBF +:10A660001B64D77FC4688B7F813EB2775DEE3CAEC2 +:10A67000A22731D55730FE6A54DEDCF3FD677CBC7F +:10A68000997D3015255E2A021983A1B3D7BB853881 +:10A690002586FF66F631AD007800668F10F04060C9 +:10A6A0008540EEC4D3EF21952494CF877E8393F227 +:10A6B0001E5AC7948441C50F4F80EA549DB631415C +:10A6C000F5C2FDD7FAD9745844FE04B7EE2C98B3FE +:10A6D0000D288380A89439BD4ECC56D9BC6FFCC1DF +:10A6E0005062A42A8AA52622B06B85889ED57571F2 +:10A6F0007459B93106115ACC37D22C44ECCFB84436 +:10A70000435F70E2DD07B9283CB3BE773373B5A968 +:10A71000E58DBAE963AB2366A5656E32A6BE166603 +:10A72000C2BA7D25ECBC9F5DBAB47E815E333FE149 +:10A73000A1D7DE87FACCBC583CD3D15CC602937655 +:10A74000D5326256BAC3125A2174D765D0481BC598 +:10A7500058C9BB1094EEC9A861F02358D776B9F058 +:10A7600043DDF56BC10CF47F4FD97C2609A33A0277 +:10A77000430F35040BFBA98EF185E9CD260154E08A +:10A78000DBFEDDA9605150FBB87AB0AAAE520CDEF8 +:10A7900023D9A50830BD8F475C16ADE3BA4D04112F +:10A7A0008991E3C4A02475AEF05D2953C3144CDE37 +:10A7B00041E2A9C1589FE3324A7A573E749BEDF1BA +:10A7C000E4CCB8DB7FFC0CA1DE8A3D0E17CEE8029C +:10A7D000DCE8A2B0FE0A886E69555F043BC8CADF98 +:10A7E000BB8B7C4B9DCA28CB1A51DED79C99A61EE9 +:10A7F0003AFA405AEFFD8A88F9C00EFD3A6EDCF550 +:10A800008A8A1F9086A634E133425A9F6420A98326 +:10A81000B43B4DFFC4D206E34100E959DC1FBE142E +:10A820000F70B62D6F03F7FC9DC2304E1FB5F79821 +:10A830000436DDB3A0BD966CDF5176033DA49BD7F3 +:10A840000A4E46E0CCC4EC971454AB8443689E4453 +:10A8500002A0466159F44EBFD89D0CBE5AA4D576CD +:10A8600005121917772AAAE425DEFF638C0302B6C6 +:10A87000B5D47FCF52252A82D203A7372B22537714 +:10A8800083DCAA0E6F8561A791544F0CB6FF904DE3 +:10A89000754071BBDF635C45AABB7539D65EADBA46 +:10A8A00088302076DA4A94A81E96464104F6AB1CFE +:10A8B0002D8EC1183A6BFF58E3A2318D0992CBD08F +:10A8C0001E98729E129A398E48D6C8990A031A1792 +:10A8D0000AEEB3338414694456D0CFFCDB1B5C6FA3 +:10A8E0008D4251A5C1E1155A638E28984808D29629 +:10A8F000DB9F3618A2082637048346CDFA5E211E58 +:10A90000441F18823123A4B4EA269E78A2486B61C2 +:10A91000654D7C3D17BB9E2B2F335AE7686A790E35 +:10A9200063C735FACABA82638CBA2587ABFE670360 +:10A93000C0299ADC2EDD0325934378FE67EF5E1F66 +:10A94000A23B3201BE79196A0697651455EE3ED3D3 +:10A9500050D40875505190DB7A981C45F7C59BE69A +:10A96000008AE6F31A12E67FBA90762AE7AD8C1CCD +:10A97000E023179994C6CB2D2DE34F041D7C917ACB +:10A980009379AB703EFBE85239107C6D62DB3BD9AA +:10A99000E19BE53F755C4614C8E03942751653B833 +:10A9A0005519BFAC4771F77C57A441F4FBFAB94184 +:10A9B000081ED9F2CC282E58627A8B9AF33A2F824D +:10A9C0008D8AFED2513DBC33489C84E388427F1B74 +:10A9D0004C6472EAA1AB7625540CEADEE33BB0CEC0 +:10A9E000B08A3EFD581B71780747C5B4F392A16247 +:10A9F0009F5FFDCDE80C373579D326124A95E55F88 +:10AA0000E6985671742E5E4C25388740420919F23B +:10AA100055C9CD224686EFC498301942BFFB3A474C +:10AA20000B9A4DE88686DDA5801A5C2C9286F57B14 +:10AA3000C2EAF0E01E09FE80B9DF30A0B7229243DF +:10AA4000FD6EE0D39A8185D5D335D54174C2DD360C +:10AA500022B92B10EFEBA56520A9BFD267BD33004B +:10AA6000C43D63982DF7540DF646DB916D6FA9A692 +:10AA7000C9660AAA555015E6C2C75485FEF5405C62 +:10AA800006A43E99CD0A7739BDDED963DB0392ABCC +:10AA90001564DE907F52D7B3AB7A107E65FADB295E +:10AAA000B15644D9CDD00EDE3C6E2421F5B329E356 +:10AAB000655654D425E6D806FB99DF7A7F634CD3DC +:10AAC000C9B95E10E884F0216C888FC0C657548ED7 +:10AAD0002A22483DC8E2F6BA08B57235B931522D7E +:10AAE00069959CF3463306A4902A3286210CCE6CDD +:10AAF0008A59D3A0CB64816A48E3C45D37F3F7D1A8 +:10AB0000F9B7DE4AE2BB337CFC8760E369C956E1F2 +:10AB100095629142600C2E9CAEEC34BAD442CD7F4B +:10AB2000FDAA0E2601B2657E450F3E36EFEA3BFEDA +:10AB3000D0BBFD52C98F4C2EC5CB7599C792C1A70A +:10AB4000C75605E7D3EA246154AAFB5D233DE23BE7 +:10AB50002C3A17C3E76807D8C7D21D5FBD93B54A23 +:10AB6000AAADCFEE65F956942C6C3EF2D183736991 +:10AB70008243BC39539376DA0AA209F73CDF3212DA +:10AB80008EE5AE6411DE7ED516A5E06F000BD9D53B +:10AB9000DD3FF55B481FC685455867552C7EC218BA +:10ABA000C7D8C72B8D75A3282C57CBE55E24345FFF +:10ABB0007D6E951AD76E7FAAE517E7BE54B4ECE90F +:10ABC000114DB2E26ECBB46CCC6E4661F3D98FB44A +:10ABD000ACB0339A8F4820D528F3C38DD4A69465A2 +:10ABE000BBA4AD06B01F51E3106270AAA6B4F13A3F +:10ABF000E0D69C5AC01D0326A858B7C09AFF5E65D0 +:10AC0000BEA66A82FF8F276760601A398CB8AD13C1 +:10AC100031472BF47B76452663AA49A2D9549591F6 +:10AC20001554789736A67BAD012DF7BD61C2F3D1DF +:10AC300037B99C10E5F70038B259D3CC070198C05A +:10AC40008BDA4CBA095B1FFEE3716C5D012C0E645C +:10AC5000210B4FDD1F5D3C61BAA2F7D08B1C8F1515 +:10AC6000F00CD0E17781393DBC6DD6F78B1D316C8E +:10AC7000DA28E0AA6A08BE048A186C479EEFEB4601 +:10AC8000096D3AC8473691D962E50D6C44FA42D154 +:10AC9000931BB0B3E01767F0C3E634EAC0059E8D9E +:10ACA0005D6C2A6B5AF17C1ED8F8B8380079762D85 +:10ACB000019A21F59F91CD53F7BD4C22258D782522 +:10ACC000CDC4E193B6B1C6BE431BECF36AAFBDA8D9 +:10ACD000F5FAFB68B37E34D60176F3EBBBF0A6FA47 +:10ACE000D063EF5A0804649309B4EF600C44CE7249 +:10ACF0003BE6DC4EA99A4D15E843BCF9A2F1FFBF33 +:10AD000057D7FC10A2483BC4FFA80C706536E4611D +:10AD1000283CF218D10CE268B083AA1BD88FFFC27E +:10AD200078203319B19590077B2B1C5D1F2E7C0179 +:10AD30004D6AF0B6D46C82870EE3B1243C57514A79 +:10AD4000B216A5CE61021383EA7FAB7EEC9EA6BD50 +:10AD5000818FB1864FD92B4D1DCB0AC9E541CA1948 +:10AD600026E65E17F22987C6FA1E504652E1637E38 +:10AD70007B7104F52E604AE4EFC0428FEAFB91E656 +:10AD8000DB819C7AFC921EE5238A1B8CDB5B69BB12 +:10AD9000655F2976253EF3424F831204EE170AD7EA +:10ADA0004279D2ECA05FD92BBE7FB7206CCB2203B7 +:10ADB00000EAD17E7AC4C2C8542FE5032605DE829C +:10ADC000C728BE4D2B4158799196BB291EE18E1B99 +:10ADD0006662D08A05C9F08B6C7842610519DF770D +:10ADE000CDE7FB228563AE3095E20907B19024558B +:10ADF00017DA008DC0E32367B931DCEF4AE3DA9359 +:10AE0000417533110EE574378DADD38DABBA9F5EAE +:10AE100000A5F113B1AC96B5D8E874C1CF18CBD466 +:10AE20000D8607DC890AE1AC140DC56424D47CAE20 +:10AE3000CAF447D063A058069561122BD6E0A6E667 +:10AE40008C8BADAEF13CDC014C6E96298522A9EDD0 +:10AE500000326F769B13A1DFB2CBAE2A436DD7468B +:10AE60006A146045A5E49140A30414DCFB9A6622B1 +:10AE70004EA4CB8D5D80E133C9B64D334231BE3433 +:10AE8000A14EF537EE3435030922445FF06619A56B +:10AE9000D7E702C837E0C37CD1E9D0EDD4CDD4D612 +:10AEA00050CFE144B3452DCC4E1F443A8BC45B10C8 +:10AEB0000BEA0701E6C7D16901B133ED5065C4590A +:10AEC000DF3D62089C9FCD7DB242409B09EA407401 +:10AED000FE784670DFA2B13D891EAD1BEBE1374D18 +:10AEE000E6D9E7C9B6DDE3FC428A747FCC45B9BB3D +:10AEF000433782AF3C028EF8F31D83A71A1B282428 +:10AF00002358702ACE181B78F3FD1BF7F500F60BBB +:10AF10000E25A100CA52ABF94CAC5B7F50F7E58F10 +:10AF20007D4C39C612F68E60968F4DE60199AC4B7A +:10AF30009FC6D6484AE2C746DE1C330A2A6E61E243 +:10AF4000BE31DADCEC899F3211ECFA55BC10B80343 +:10AF500019716A045EFEA0D3476789C0D9DE2BA1B0 +:10AF6000688DBFBD4EE34AA2AB1C96FE9ECC3063FB +:10AF7000A8B6A8F41DA3BDDC8E98241AC25F0D519B +:10AF80002B276BCE14CE8AC72C78B3C23B1A0A2E5D +:10AF90009790B3DC78ADB58C7CC740C195226A7BB5 +:10AFA0008BF0C1182F961507B4047080B592A3E1F9 +:10AFB0003400545E054DD853F1FE54FB68194389A3 +:10AFC000BE4AE353627A22A7E2781346493336C970 +:10AFD0000473D298E85220DD674D10693C569E55A7 +:10AFE00044BE460531EC48D7E0B388A21EC84CB336 +:10AFF000CEA95A5FE066924BB99224247FA33815FC +:10B0000071A1AD4E813AD2BC6E316711A868FB16B2 +:10B01000A151E22605AB47C42A5BB5BA800EBD6FCD +:10B02000EC215E682E7C30F930323CD55271CA9FDB +:10B030007451862D9F9938D0F7B7FCE7B1D4A85941 +:10B0400048D77FBBDA9E4519987A8447B62A1C7088 +:10B05000D3D3EB4D5F32B3DEFD55557F50CF1DBCD2 +:10B0600056246659A500704BE9095508D806015BBE +:10B070002615D3538C0FD8618529FAC041D7E84AE9 +:10B080007A2203C2ED2058F4BB3B4815D1742491B9 +:10B090009495F48E7CBE76E1333B389FFC054BD80B +:10B0A0007AD52A2AF93776196570C786E30C58E4F1 +:10B0B000BA461F024D51A2EC7E296F359B62329732 +:10B0C000A91D0EA690FFE48124A5290240A10E38F7 +:10B0D000A6723E9FC3A940FF5AD10B98707B72267F +:10B0E000C8F3ACA052ADC2777E14E01002CF3B761D +:10B0F0006ABA1A2089152D0FC03AB6DE3B75634532 +:10B1000013CA51A2BCF28C279369CD9E16001BABCB +:10B1100011278D0318D1D0421FF2285F2A58E2AEC2 +:10B120003E3792A79819558167D28F278C19480D01 +:10B1300001C8916C430EA0EC0A48DB3E2BCD2E5883 +:10B14000709FF757353D4057CF0A15FCF35B2647F4 +:10B150008A135C54FAE4180B8C0F87983E375664B8 +:10B160006A6387582CD305875BC4A98AE144090B1D +:10B17000771898366E2DD59DAD9BF9142A6E2C0646 +:10B18000683FCA0306AE0A796EA5DD33A4F3BB5C43 +:10B19000048031F439EC66BF865EC35E57BCA48878 +:10B1A000CAE91B51CE1E398F515246BC475983F113 +:10B1B00086606BF5C005D0B0FF65A33342504412E2 +:10B1C0002F92B42C8C1A494E9D3C9D45F5FB476847 +:10B1D000864FCA2B85F95687F578BB7E0296959BDC +:10B1E000EB877B6C006F1C5F967A876794E53A8CDF +:10B1F000C207CE5D2A6E19B8F5D25236616F81FD55 +:10B200007A30D48136808245E34F0678A17D695E2D +:10B21000BC619FBF91BC78E94E1D485D208BA22C7C +:10B22000D0F71057DC0BFC4D0B94B1E3636F335335 +:10B23000FD8482C7EAC4DCA17976757820B5C38C19 +:10B24000FD1CED7B982868757EDC3864795E00A370 +:10B2500011049D45F57D4DC32B5B9DF4626D17EE8A +:10B2600071900A2A986F856CFA4D1CD21C2D1641DC +:10B270003441E2F09AD4DB5EF06C8FC35F2183F639 +:10B28000B9F88ED3236F1437D2036DE0F749B1714B +:10B290005FD8D5983EF870E885488BD61EE8B6385A +:10B2A000354D288B32AD933D861898BE986B8A2F0A +:10B2B000915B30CBCC61B45D421B25E0105EF56F35 +:10B2C000B46E6C3A9E46F83A069A921869E18DE699 +:10B2D00014FE1352B1378F830C38810D3864D86156 +:10B2E00084BBABD29F4A9C3A13EC5762BBFA23F75C +:10B2F000DCC39176DAA6C75E0EA788E5B73EBB7EB3 +:10B3000081A76CEC1BA28E08DC66155A11CF8978D8 +:10B31000E0C7FBB72E7E9079FD4583E452BCD1DEB9 +:10B32000BCF5277AD2776BD78A5F500E376B065BF6 +:10B330002DDCACC813D0CEB64227F1EF8D98DC12CD +:10B34000E90FD97C3D47E7F09F78BC8F84F6E5B8DC +:10B35000089139515B2FBB738D3F22AEFCD046253F +:10B36000B3479E11E5DA98C6ECEF911A227EF2E718 +:10B3700079FBA72A28D9F3C28714BDF69FC06F8234 +:10B380007715A14F9256D6B57BF95F92AE199450BE +:10B39000846B4390D63351F925291E8D588E09C0F0 +:10B3A0006DB474450ED23CB84035B5BA431C652720 +:10B3B000C2EB91747C31FA206A86EC883DEA1C2746 +:10B3C000EF5E3A21CBD45B532173867EF2BB4B7484 +:10B3D000308EEC5591A60E936419D84D54B399371D +:10B3E000FFA4594459D90C85A077C1E35D448BA7CC +:10B3F000731BC16DA7CF93DBD01611FE5557309A42 +:10B400003817EC2D9F322B3465BD0A9CD31FF721D2 +:10B41000D468F46B0C963654432920377AB9D17B23 +:10B420009745F2C11D60E98D3855DED3BADFFD3E88 +:10B4300029C8293915FABD4E4EE9D951E1AD77C574 +:10B44000BD33924160E8003B07B5643937CD074909 +:10B4500050AE4CCEC87CD8B97755E326E255827100 +:10B460004C626F5B7C50553CCBEFFBF657C72629EF +:10B47000C2A39F88CDFB094EBF04F0A6FFCAB6DE6B +:10B48000E9490EAC83FFC568C29F9393586013A12E +:10B490000EA49936C3160F6C39E1F45A7D1D8B6CDE +:10B4A0008A14DD92E3341DA899A4B839C6A140A539 +:10B4B000DFEC14FF7EB5118DB0787CE37EC526B538 +:10B4C000612703BC1A35DD6064D98BF57132FB3F0F +:10B4D000F25777E01A01DD0998F56B6097202CEBA5 +:10B4E00028AE56809AF7FE1C47DC1E137BF4E47AE4 +:10B4F00047E545D1E9243BDA6FB5571EB63C500409 +:10B5000053250027238C15F2B105FD7BB9BD916150 +:10B5100033E9763BB30CF315743DCA8B2E2DDC89D1 +:10B520006C99D98682A5AFA621801B2CFA692D348F +:10B530003E50BC6A9BCC3EB7B5B6B7DDA257D09C97 +:10B54000CD9704139051976FACE3399E87028FF12A +:10B55000DB4A9951CCBBFAD6C4445FAD82B2ACD3BE +:10B56000E1F2A7BF495CD39BDDCD6E455F25F8F2C4 +:10B57000795017DD8656292A076879A3787D502DE2 +:10B58000A834C08D95C5F3D74A60BA5D3518919C33 +:10B5900085FFB6F44A82115E84135A9AC203DB60B7 +:10B5A000D6A949DFE45ACC301F9E65BA2C962E20CE +:10B5B0000AD84787FD8352387C347F07DF777A6C5F +:10B5C000E7AF26E5EE7D562D07DDF59A60EAD4D487 +:10B5D000C45FD4714B674F59DF6F07FE6CEA0A13E3 +:10B5E000AD7CEDBBF1E597CEE1FF83625EB9598B8F +:10B5F00060983EA62ACA89760BE101E61D721C9F5F +:10B6000061AA6D895D8A2895AF0DF20DFF09CC31D5 +:10B61000B1FF0BC27BA1AAC1CBFD561979A1165966 +:10B62000FAD5FC1F7B1F68EAFB987A6063C2F1C8F9 +:10B63000551D545B7C38D7D206D2A39EDC87686543 +:10B640004FB2237047517D7FE898A35A8CD4AC0445 +:10B650000F43592FF23F2874C721CA05158DC42600 +:10B66000C547A8FF8424C628B174B77BF21D95DABC +:10B670008053E0980B614679013D5D1E3567183BAC +:10B680005770F55C613726D721D170EA8AEC45AE58 +:10B690002DE065316C337291B7B53C779312166922 +:10B6A000A3EB699AEC48C62136EB8599A4D0AE2964 +:10B6B000140A49AC1B6C1516DF53FF693A51324628 +:10B6C00090E93A2397AC54C37ECAA521AA627005BB +:10B6D000F59F71B861EBBBA630BC18936ECA679C2E +:10B6E000D527618E31B99E8383A147922F81ADDE2C +:10B6F0009B5ED2C46CF29331E708D84CE52F741EE0 +:10B70000AB847AEDC89DECD82CE1240404B592C535 +:10B71000B1BF96B6D7921B72175AD515F4D42BF633 +:10B72000B0B6872054DA79657A6842E435C6126487 +:10B7300017CFADC47EF41CD13685A6E5EAF3AACEB8 +:10B740005F24DB908EAB7FC8B6514FC8EAEB1A1B63 +:10B7500080164FEB6660FC3E0DA580FC38DD193D80 +:10B7600034F99628BA9CD59DDEC444B32E444FD7F5 +:10B770002CF51D0213E40A63E25128946529022383 +:10B78000EA1F6842E3243F98D3EE919B6C87A5376C +:10B79000D4E9B3FC11C8F1E18101782430659882C5 +:10B7A0009D680AF2CF4632217F1940A458D9BC7453 +:10B7B000986A818188AB46D6B43AFCEEB2AA5B4463 +:10B7C0004E1EEDB09E9619FB8D260BD54228CEACB1 +:10B7D000386B4CEC6F72CE40D2F5A05EF6181E5A54 +:10B7E000F2E83868CD43F342F2D24623EDB1A60128 +:10B7F000682BF5960B330BACCF6D040D6781A60457 +:10B8000064A051E15EA989CA4570179DDCE47A54B1 +:10B81000B07F15457D9C6A53140249A764D015EB8F +:10B820001E22CC1FA893ED0830EE1F47B9FDC6F3CA +:10B830007B68EF9EBC695D88790902751C85E6C846 +:10B84000A8794357A0202C6DF255461B920C6FB877 +:10B85000BDC3BC5EDC905E995E963568E8C9D012C7 +:10B860007A2C6C5155B34404E6BD5EC0DE891B964C +:10B8700094C4FD9DBF547754566DE457BD608E7BD4 +:10B88000E4CC5F869C6F35704FCD306CDD35841E07 +:10B89000498B48273680188BE8E0A2E6D2113D009C +:10B8A000E5B49E08B7C28818D0E76E615578461790 +:10B8B000999EE2DB25EA2A323B0AA251C3715370FA +:10B8C000ECDBA0435EB15BEF586BBF2AC566CAB81C +:10B8D0000ACD3ACEC94DA9B399EACFAC09F115C347 +:10B8E000D72CC30469AF43683E05701305E3ACA1D0 +:10B8F0005B7D29BE9E71507153004B27B19C8E46D3 +:10B90000ACE45BD1AA78D2A176F5D2A71F7C8FEAEE +:10B91000933B803B2997A722E6F312089AF6814AC7 +:10B9200097B0C21DE0989C05CFD44EA51F243620A9 +:10B93000F306C72AF43562E068CCF6E22FF35534FB +:10B940003B7FE3320A739C454431B736C844555FA8 +:10B950003AFF253DFA99E2B507E38EB4E5553B8001 +:10B96000064866E9C163206C745E1BCA70F57B648F +:10B97000F1BE652CD237E75F27C7A32C3669FBE3FE +:10B98000F6BC6499193A9AF9656FACCF192D58FA3B +:10B9900006E890FA2B05A2F5AC37FFA15E2B3BED34 +:10B9A000F163D7EF53A85D70603C2AF7FC34338D08 +:10B9B0007E230ED8CC80E5FCBA7250756D29B25C3E +:10B9C000AD971AC93BE966D664028729147387F8D4 +:10B9D000A1EE743F9C7FF75EA45EC36F65B1402A01 +:10B9E000077782615206DDFD6CDA92D87D97B78FBA +:10B9F00092758DC5D36D9F092418B0134D1A2280FE +:10BA0000C01B86770D76A217CF266D21BB30CE885E +:10BA100022FF73A49F1B4408E6D17EC08EADE507CC +:10BA2000845C1420F33F2C61E9B4E9286534B30E3B +:10BA3000B43215A75010E5DF4AF325BAAAD0CD4598 +:10BA40007F96868AD6BC8A7CFF27C9A2BBBE442BC0 +:10BA5000A8DC831D872F31CAF30908266604E55048 +:10BA6000A30D4DD64D0BB5AA3C6465FEFB57C06BCC +:10BA7000BCF391DA2BF74FCB9317F24AA6A898752F +:10BA800085ED0442C78916D1C0E1EAB0E75D0C2A12 +:10BA90003C60786DB0293DE5E9D4E3D011538A527A +:10BAA0003BC7EA23F3E8A5077741D8AEDE84E04C34 +:10BAB0006F01C2A5A80037F888D8E8D0BEEA7300A5 +:10BAC0004DF67A5D8DFAFA037A6680DE17FDC6E2DE +:10BAD0002C6941A9AB19033D6E4A3DC38545A24877 +:10BAE0001913C610589EEBE22B6B2CAC48B9920A86 +:10BAF0004462966E02B56D130A4F4C20A09E498C8D +:10BB0000BCA9D6FE3C2311FCB3F0514A3DDABDABD3 +:10BB1000B5BC383B4651F74D1942C6AF7D54AF0115 +:10BB20004CADC1146AA5319C8B41CC7A226511C8F9 +:10BB300091AFD2C949E8C08315EA7EA7285E05F017 +:10BB40004F5F0CE2FBA07FB066CF57622A785FD9C7 +:10BB50005A9596CE060B09E8346EFDC932D341E7FB +:10BB60002E24A000CC37F0098CF033077D41B2EAD7 +:10BB700091D9A560BCE510FE31383FE06F1E058409 +:10BB8000221C41CB3814F6339829D0318A9F9E610C +:10BB9000743B31D53352256DEE99A600F8D53605A4 +:10BBA00060F247E74326FAD77F70CBDE96D45B1668 +:10BBB00000406AAD98F2ADD5E5AE85474664669221 +:10BBC0006D0DA07CEF6BD259C7DBA6A8C275932C74 +:10BBD000336D4ACAEA3A692888F78BCDC83B595178 +:10BBE000C5DF0376012A8FC59AB5DD968921BBA5ED +:10BBF0009CB4B3925251CAD4A6978334B4A8A59BDF +:10BC0000F10410BEB582FE528C44AFA06D7D92301F +:10BC1000961C3E4A7A3F54CD746F06FCCEE0D55C4C +:10BC20002A386CBABE0A43E9F909703C32D93B683C +:10BC30006FCDB49B75A88AD600CA90A06B28C9E2C4 +:10BC400020649E9EC23476512A6DA56D9EC9331E16 +:10BC5000758C67A8D41D5108CA98C02339ABA3B509 +:10BC60004D45ABCE50AD260CF619ADFBC5C8120440 +:10BC7000D6816FC3349CA8A8D67480E2ECDC8ED940 +:10BC8000CF95DB400D08D5429E0B972344ED3DDF59 +:10BC9000C27477C3456CA924551D492E3832613CC6 +:10BCA000D953A1DA24D305E1254CB8A5C73A19D058 +:10BCB000CD3EB842135F1BF7E5839981DD2F55B563 +:10BCC000786A58C685553424EE122752AB82478ACB +:10BCD0007991BE747AFB0DCB43C1B449B192312D39 +:10BCE0001B34E9B80FFCD69E738A0AD08BF44DAC96 +:10BCF000F513A41139FEC3C8C4E2AC377899340FE8 +:10BD00009114181C48E7B450D1F20F013D5AAD25EB +:10BD10004688876627B86558707572C4F29AC1D58F +:10BD200046FD62162F94D5C4324DC34019CB8935D8 +:10BD3000E9E3EC3F9BA69D68D5EA4B7F46543E1154 +:10BD400031E0C91FC31CC31FE98649019511C49284 +:10BD50002B9BCDBDA3255B9F1B5967AB756BFE1E4F +:10BD6000162E12EAED69D81FD8E86921C815F244E9 +:10BD7000069E339121EE4B33EFC998B3486FC1B69D +:10BD800014AA7A66F6C8C28EEFCE1F5994D98113D1 +:10BD900088C174D64C9AF1943E452AF6F7700C91FE +:10BDA0007EB381AB7E367A0161ECB0113E843735CB +:10BDB0001BEF37F90BA187B7F852DBD142BEC5455F +:10BDC000EFBD0A7A89A4F52684EB99459006D18EB9 +:10BDD0004C2896C490C8CFB27D69197FCD3EDB4513 +:10BDE00083F5B06B26702AE1AE16A29EDE30BFC08E +:10BDF0003CBC01871BF94B30382045B66A1F6FF6F3 +:10BE0000165471A83FFB701BD55EB19F59FD4F734F +:10BE1000ECD7CE77BFD51590E401E562066B4A6397 +:10BE200041C5A67E9416B01E9AF616F5514899277C +:10BE3000F7EB556A08BC716FBC7AB69DCEB731E698 +:10BE40006970B869E341CC6E2AF2E502C4082602A3 +:10BE5000D46101F70B031FEE9B9AD923D1BFD5C044 +:10BE60005D6C605216F638575EC50244D106FD1A65 +:10BE7000FB4788E1BE254F0867D668105764396FC5 +:10BE8000B221B2DEBD1944009F6B204F741091C4E3 +:10BE9000015BFA44F12EECCD316A1270B6342E21DA +:10BEA000FF6ACFB166268AABC5AD3058C1C3322315 +:10BEB000FE55C76CD26372A0CFCEDD3F7D9D8C4E08 +:10BEC000120DB172BB3AB2ED5DC063F2965A95B7EE +:10BED000A47AAEE5F3272FCC6EE4B1EDDEB0F5A782 +:10BEE000AB655DB38F75639455C91D459AEAB4126D +:10BEF000C2730086B3C4B8F7BBEB6B333458D7B802 +:10BF000085AABED6C49DE33E02705D1A8BDE411247 +:10BF1000106883707137B3DDF635CCD7D0F36C1170 +:10BF2000D0A85E344AC9D0FD9753464DE45A2A97AB +:10BF3000866DF32F2F149BFA97ACF1F0238C38E425 +:10BF40002D5367183624D36E3415F98705C4A76DB1 +:10BF50008699178EBBDBD68475475D6FC5B13C0CE7 +:10BF6000D7E37FC5A388E6DC922736C2600DDB49A4 +:10BF70007ED178B35B96E029F4AD3DF2E6F5F21F91 +:10BF80009C77D55884BB02087F181B3D0ADB94ECD4 +:10BF9000AFB42B846568CBE1465B5B6ADF092C1884 +:10BFA0006163E0C5C5B54C09F2CA73B0E1B55C2E5A +:10BFB0004A6F1FC5FE863A9E7CAA30421C5054042C +:10BFC000B4502825B2E0DC06899948137094000B20 +:10BFD0006317F3DCE8F9D2AD25EFCB33B6B34139C3 +:10BFE00093AB9F0117553198E50CA33F9ECA0BB147 +:10BFF000AB58C475EDEF99351F0CDEA60723F4830B +:10C0000062A8EFB5D1F9D25036A8B8DF2FB0CEFE76 +:10C01000E2670A684CB969EB04C3300D6A5F4C9C57 +:10C0200042BCF6156A3B309832DDE95F2321881B5C +:10C03000F5C8643522382D53A9B6D2E80EDD1BC8E9 +:10C04000B25F5DFF8186317BE8691451C3A68477B6 +:10C050000777D097881F683C7DB3AFDFA115EF3D10 +:10C0600010CCCC478C40C988F41DF04427DDE8D5BE +:10C07000E98522CE9299356975551653E3D7DC2AA6 +:10C08000477A3F6AD8C9D44AEEFF08A25A10A88C52 +:10C09000190F2C9F53652EE5925C8A75024725C0C7 +:10C0A00060CB51640044CEBC840B63DF087CDF545A +:10C0B000BD75BC3560E5145195DC4101B0BCA18E65 +:10C0C0004463B05401576F95877C4C7565689F1C1D +:10C0D000AE56DBC7ECB881A6D62FA10FDC9EC48A72 +:10C0E0001DAAE4AA7D70ED2FC3B6B01E79E5F05EFF +:10C0F0003A022B2BCD35605DC902148109863F8D34 +:10C100002E24D546F871145AC664615E2772FE4C1F +:10C110002646E766B7A26F81B1CE1A2D463D2E9F07 +:10C1200093E3CEA18734DDEC9279885DC891379E88 +:10C130004C22427AAAAC74023DBE3818FB8180D7EB +:10C14000D6EF2752869447DA340AEC5C697474504F +:10C150004806F5832D8E37B999AADBD4AF22A38B7D +:10C1600007139950A9246493BD152924DAF60B947A +:10C1700001116739FB72A837AD4F1422C86A250632 +:10C18000CB983D4856A3D2DCA8D3F7E81C0202E0C6 +:10C19000225190F1B5CF2C8387ABD23A323642CCC4 +:10C1A0003F5B08D5C1520BA94AC1B0990327F6E6F7 +:10C1B000F9372EAD9C5A0F06C16A8EFB32B1E53CB1 +:10C1C00054CA337890F5A1D0EBAAFCFED850EED437 +:10C1D0005149F389129111FC5409D3BC7B0ABB3A33 +:10C1E000A6A3A686E96B07FD180AE6E50D6C858512 +:10C1F0009733C66F34D99A1B30314CD67851B37708 +:10C2000030A5F835747B132AE0EF8325CE52AEAC0F +:10C21000402925926A43F5A6DDCF4074B674ECC27E +:10C22000E7F8F0F001566DF7BDCD55D431E7DE6586 +:10C23000D3F1EE592E813B7B48D20BE4D504C25397 +:10C240009AEFDC022593045AFD8960BA740CF94B0D +:10C25000B54C9274EC9BDBC405D9FEE191CD8EE325 +:10C26000CC0E7B37C62C3AFF334E81B1F36BD288AC +:10C27000013E93ACE2B646C7DE8FD209BBE6AC29DD +:10C280004FA115E851C74EA752A5C04DE82D3AC49D +:10C2900031D3CB19BA60C4D4C416A6D4C93FDCD6F6 +:10C2A000008168EAC560AAA0B580A3B62E732BEB07 +:10C2B000F80BE630784E82E00E8104D5020112A719 +:10C2C000E7C0CF6272D3476D47ADA1980F98F905CB +:10C2D000FE442619A35B89B720A53789BE6BC19C94 +:10C2E000DC94D2F041A909C74B2DFBF6D4B6A420AB +:10C2F000F3653383FCC3CE76AA02F2D859F556090A +:10C30000EEBDF9E76491D1C0AFA51BFB11DD96FC32 +:10C3100027BCDDCCDABF2D47C667B4FC782C577A32 +:10C320005172615C8CA7192B5C945EC0F6CB68C21D +:10C330002AA42C8E02DF6A38D51EA69869870A6F58 +:10C340008CF05580507FA281B01361E239A9FB4B7C +:10C350004AC2545D9D42B1020FF2FB5FDF5A534D5A +:10C36000813E7CAF17C32653A99F53B644DCCB65EF +:10C3700007881D71BE4804D0CF1ECE30760495F9D3 +:10C38000F96AC5B107DCF7714F61D48BC40897E136 +:10C39000A94DEFECE0C47FB45D3908E43EE5D3027B +:10C3A00068EDE49C3B88EC61917E6E55D859D3EDE5 +:10C3B00027451E48D4BDB86B6609E8A0F5DACC4C19 +:10C3C0001575F3649F2CF7C2D17972CA1C2AE7A9AC +:10C3D000C7D4F772D05898FA1136855B1144B9FD6D +:10C3E000AD1530870967E09BD182B5AD7C7FADC6C6 +:10C3F000A52872B9016E38A7E7DF7B27232B1FF52D +:10C40000A99C010D9DFF9D5AA729EFC70FC942D5D1 +:10C41000230CBEB88AD1D8173EF1E6BD0777F46188 +:10C42000FCF7C55AA517D81FD9D113C53EEB93C247 +:10C43000724708EC4ADA91A013E63F685953372156 +:10C44000F2CD6B5B0166CB622980930ACF70381AFC +:10C450009312DB633DEE64BCD9A0E39ADD3F1AC7BB +:10C4600029A9F847B1D2714ED3AC1DBC274B32631A +:10C470009B42289AF13A6514FD601F6FE51763C966 +:10C480003BD5AF87FBD5856AD79CD4A61B77D2D086 +:10C49000B24B42761BFA3A9D5EC878782A20FE9D00 +:10C4A00002DFCDB35A4C03F9A39E806C46E854D802 +:10C4B00059277B28981E8DEA43D4F4987B0C1BAA3D +:10C4C000CBDDC95201C76A8A1A44C82DBD22C940B2 +:10C4D0007D09A91C9BBD48A5F4DADF0EBAA6BB8274 +:10C4E00000A578F54E1769D5ECC440CE2FDD3DE2AE +:10C4F000579E6D27B497E2754FF32A9B00C319FE30 +:10C500006B7E9A9E23463190DCCABB6D8822212324 +:10C51000CE6F04E1376BD8FCBDA3428B6D36613F13 +:10C52000B897E3044E93C9C8224B34813EC2BDDEA6 +:10C53000EBC41F8F41FACA80BCB390A7585D005E60 +:10C54000E4947B40422152D8BE171A69DED8288E67 +:10C550003D76AA0F0989FFB59C718D25B17473F7DB +:10C560002A4E36E4F2DEC9988BF252E1D05FD8EF62 +:10C57000C860CB4898D28E067B8F76C069E7CDB570 +:10C580007A074184DFAA4094666E87A5D4B29F9152 +:10C5900038277BD3BBB1FA47DC9B23EC559F3E4A3F +:10C5A00087ECE11E2B47165F4304BD75F206D97C6C +:10C5B00036190B5C612F17C12D986F994D1B849C08 +:10C5C000BC90DEE45F85993D71FBF82A9D98696B0C +:10C5D00058A502AC0C4E719F96C3F056B82FD8A543 +:10C5E000163F47A1B422D70606C0CF6BE316444ED0 +:10C5F000CEEE97A89C70C4209967B4E73B7291294E +:10C60000358F76C82FF22386FA5AD9708155E69E67 +:10C61000B1C0705247EA64E4D0E2FA7A8060818166 +:10C620000E04B75CFE448FA9DB7BF7C8F60A0DE366 +:10C63000F5ED2360711395FC123DEBAA19E9209BDF +:10C6400018E680F61944077A4FFAC7D1F952321327 +:10C650002DD79DEC4D891EEDC01263BAD6044AA6B3 +:10C660008D64AD6B6E5426745792080DA34D7FE018 +:10C67000B0967A5228B98ADB1E97A56B39D73E0C43 +:10C680007BD1CFE2BADFFE0E06844E932FC97D1A0E +:10C69000B213019EC0BEDC938F0A30B6C3494C91E1 +:10C6A000BA8B840929D6B71F86B7536A9DB3F38125 +:10C6B0002B78BAD51CADE6AE4A4EC41F26B3C3E4F0 +:10C6C0007B9862D4DA5F28AF5E2C755501E0676B0A +:10C6D000D6A49EEBA1D79C34BD50CCE2156235B9EF +:10C6E0005FA32765CA2A2D0DEC0346CD17CC378FE3 +:10C6F000E25B7E8F899BC30A1237510C6360E0D8DE +:10C700004C303CFCD50D531AC13FCBA38BF9D2E57D +:10C71000D4969E30AB71520A16E4410A4E7C65E114 +:10C720000F6D850EA3915B7712F085B70A53CF6F1B +:10C7300057F04321A54313AA606DE6C43D5976F432 +:10C74000F4F53912B3376C9637A4F5BAB1BD5A3245 +:10C75000E96CF3FA182037EE0C75CF0DE2B8FA57F2 +:10C760000A257BE71A907EE5DD8F0AD3CCDD4C30BD +:10C7700053EE3E1B313250DC2AD2E07103AFD89524 +:10C78000A09C28CB9F8FD07D691D9733DEA620C447 +:10C790004AEF83B484B993343EEEB377D65207B5EB +:10C7A000EE52DFF5D34807B6E411BC3B0F8DCDE464 +:10C7B0009317120BF48082B63C2F3F6460921841AD +:10C7C00094D890FF6C7EB49458DA08472EAC3D3D67 +:10C7D0009A394442282005674DA03A69ED5908DF8F +:10C7E000D1315C834F8141EE50430E808E533D2406 +:10C7F0008DBFDAC9F57B6DF35F59004E07A12A1B87 +:10C80000F85CF5D376E7B69C4CC6F4029625C1E1F8 +:10C81000E21D3001853190F0939727D18DD188F0BA +:10C8200050B41CFA28A1A3D6BEC42FFACCDD570100 +:10C830002C6C7C405CEF76A8C52FB23D9C7096DED8 +:10C84000859D105B405B76BEC10C36F1ECD69B5DDE +:10C850007949E1D086521FF68214117D232AAD4119 +:10C86000E1476ADF3A609B0D4524FDED9732EFB456 +:10C870006997346FA3911D4E0A161F61F09A5431C7 +:10C88000D09FDBDDC7392979EEACE703C6AD2103C4 +:10C89000AAEDDCE97193FB4A580075559EF1381EEC +:10C8A00007D3E22E254156C7CECAEEAB7673388940 +:10C8B000833123F0437C456C0B35BE0E1CE3B97409 +:10C8C0006C1F94FAC40454374BA6C1D4D5F50ADEC4 +:10C8D0004D881000B320524183279ABB869C2E427C +:10C8E0006BF35E772CCE400C8F2EE85C93D48FAF29 +:10C8F000B5722C74048B6C98AD0B5A883812D8C959 +:10C90000A3F7A1219FA764E62FE95178F73DF96DC0 +:10C91000837427564310E08B86F6020CC6D0DE8760 +:10C9200048BD077B5389ABB5F19BE77CF7669382E3 +:10C93000847970334D267E9F1FE5DD99094978760D +:10C9400032E2AB568B2CD50A6F649FE6838B741D45 +:10C95000DAEC06BA57B7002539AF17C63A8B6BD851 +:10C96000D3609D50FB83A64E425FAD99EB21C21E62 +:10C97000802C21271F534DCB725951A86ED64BBA2C +:10C980009C9F7D217C34449AFD854D0B3196D89730 +:10C99000EF41B1782044446EBAE679A83CB8B6D3EA +:10C9A000138FCF24070AD8F65539E6946E6BD5F06D +:10C9B0005FC5D6160AF8F0DB41FAC98D0AB26322C8 +:10C9C0008B0E77781D7E24B666F9A679C0D6E30271 +:10C9D000FFECFBA09133791AF1DEEA2973EC11E840 +:10C9E000AE33CD8D878B6F913730128E1BE3640190 +:10C9F000368F88CE056EB6721CFC26BD36BAE6DED2 +:10CA000021F95E261C3884E59568A374D2CD29D11E +:10CA10006FE085DD52CA8F2BB7F389067BFFFD607F +:10CA2000C77B5895A9ADFFF7D632173AF10F6DB411 +:10CA300055FACE8888D9E12F39E4FAFB89CBE7791A +:10CA400020E303AE1C3452BCBBB72EAF6174FF1A97 +:10CA5000A0163EADFF0AC336CA23FFF4E1819A2136 +:10CA6000E98C10D46959C5369D13A7F5444BE515DB +:10CA7000BA0BA1027774796D3894C094BE8B4422AE +:10CA8000E23F702365F6D3152ED29EBB9185836E4F +:10CA9000D2B9922DD81D837C678A5005A3DDBD8055 +:10CAA000303EFEE6DC92394111D51ED0F0A3F99A52 +:10CAB00034C1A3C1B955BDA30468967F21FDA5FD6E +:10CAC0006EF82E6E48E31EF0F2F5BB18D4B74A613B +:10CAD000BD94604693BF7F8EB914A3E95198C4E713 +:10CAE000D59ADF2EA5B5C88C2AC65C6F291D2C10DF +:10CAF000CFB9969E7602498EF4A50F551F0C9CD295 +:10CB0000F2DE5808ED1CD38BF1A764D20DBF6F1D68 +:10CB10005FBF627597387C79FB42881CC3539CB910 +:10CB20005B31A2A1CB1398A2BA905DF826BC91D438 +:10CB3000FA63B31164552FEEE65EE2FA650A6426E5 +:10CB40008DA4215F1E85CC76F645842D3CC26B37C3 +:10CB5000FC59028B15284BD360335806710D65F9CB +:10CB60006745719ED4D8A9A0236E78AEC133E01575 +:10CB70000ADC379E41273011679D32644A6BAE1044 +:10CB800009933EE4C9FBD51AE6337EA80D577CEA2B +:10CB9000227A2B3C9B06993B699580CC18DD6CE58D +:10CBA000E1D45CEAC2D373B41159386109A27E6C36 +:10CBB000110BFF8C8C2A5BF53EBB06299EF081BFD2 +:10CBC000B18FBCE2AA260C80B3416BC1C43AD51523 +:10CBD000BB9C1D74FDEDA39BE665781D93EEA8C775 +:10CBE000CD895277CD01BE8C43E802D62ADD2A23B7 +:10CBF0008BCD2C3B14F1441CD71A81B27CD7E32295 +:10CC00000E6941881D85412722EE452E7DCCA61157 +:10CC1000FE4C06A4B145C7088102F4DDA9AA6E53F3 +:10CC2000C56A1AE493FECDE09969AE939BD238C2EF +:10CC300032824E824BE01A8304E1BCC8039CB322CB +:10CC4000E8E3D5ED7FF2DB2B2436F20A1A035B8D85 +:10CC50007B1E9FEF2F9980B6D8D3FB21F8BC06C36B +:10CC6000729AC5F0309C678870CE5D735193DB3843 +:10CC7000BC7AD5E248722E8CEB06133A75D5FDF5D9 +:10CC8000103EE0DCF6D14FD64E7B533018224C2FAD +:10CC900034DB6893DFF27F49B4CEF4CB75D9CEC7CD +:10CCA00036A7965A64726B8B9FB9A8A1D9EECDA80E +:10CCB000F93380AFD2503BF8C7BD07CC2C1E23DC24 +:10CCC000B1517D51D0D6F175ACAB2D3680E043AA81 +:10CCD00000E2DC93F561F8C2331BBBB6734039EF59 +:10CCE000336BBDE644E0BA3107894AFA835729CF4E +:10CCF00097C2E427E6E7421EAC32FC45BC83459C64 +:10CD0000780E7843ABAA96A4702001F6F1EB650D7E +:10CD1000DFA4F0DA611D4CC724F4105D5C9C7873CD +:10CD2000A9E5988CA94E89F174F0F4BF3CF7A418DA +:10CD3000F245EC39B07850C9658F2D71556EEFEF23 +:10CD4000278DF169CAC7360ADF3F1D362C496C8A28 +:10CD5000B194B692E0851EBB19916774040CB25B66 +:10CD6000A716D787EB8ADE48DEDDEFAB5F8037168C +:10CD7000F82A3397F8565687B1DF403AFBE6F68239 +:10CD800019A6480DCC47848B7E80756F612789F08A +:10CD9000255478DF3E88CFC218DEF793804EB64622 +:10CDA00066E0B4767A12131AFCB351C934C010D3BA +:10CDB000242FB9D27325EBE05663B7648E15F85B68 +:10CDC00001A87A932F6A7446ED3E7FC9143FE4C3ED +:10CDD00032C14454485BAC8047629E08A8517489B4 +:10CDE0002A5C1D949DD813D372EA41A593543C1C30 +:10CDF000D277331AE3E8EEF4BEC6C62C38A0E45F5F +:10CE00001C7CFEA2BAACB33C95D032A6B68EA9EC7F +:10CE100062AD1142D483BF8D0803093F5174A1F55F +:10CE2000F03F461DD4D8AD2A35C7596ED8EF8D36A0 +:10CE3000372956AE720AD7505E00A54C96AF0C1833 +:10CE4000882FFB7A7D504018906178B10A89A83606 +:10CE500001E970C75220131F09133E0887D6F58ACF +:10CE6000B024B21332823FC07DDA77793DCDCECE89 +:10CE70007D50AD4DF810805586537049E68749AC1A +:10CE800019C4A3C39887C2CE9D26CA96EB587BF0DF +:10CE90008FC2023D7041DE2B44E7A9AD7E3E6C8718 +:10CEA0007B9B7750C6C9D8973AF456EDC5B1FF9130 +:10CEB00036C75F024DD0467E0DE7A62537D068E91C +:10CEC00003D845003EB7B78B2184BD2E59DC97139C +:10CED0009C849D00EC10EC55AB0B15BEBCA49B11C3 +:10CEE000A1BED3E2BDDB1C177552D1CB0ABB3B2BD5 +:10CEF000DC30E5D4FB6C71E169B603F983D37BD7F1 +:10CF0000013F9494A96025E6AF9418A67103E52922 +:10CF1000A1D40B649A8E6C20CA14834B373ADF6716 +:10CF2000E48E26196D51A144EA5A0AD0C6A94F0FC2 +:10CF3000CC2309D3F16ADACF2FDCC8BBF6DBD92CBE +:10CF40004CBB3C00E50DFAC01A719F3B9544149D03 +:10CF5000D3CB66C207BBB3ADA828F062B4AF5F7B8A +:10CF60008A059C0A6E1485E49B50CE98D5EA4ED86B +:10CF7000C76C7482A0F0071694181B539C65C743B6 +:10CF800007904C7750663323279199B88932F86D12 +:10CF9000081BEDF082558BE3866875210D5355BE55 +:10CFA000344DE9188A4D85FD57D5824EE3FC0008C3 +:10CFB000195F0F087D3E73865370E7A59CA97659CB +:10CFC00027E400E0242110915B0170537AF1FC7D8D +:10CFD000152DA5784E3868D74999E2E59BA22778A8 +:10CFE000DC132F163FDE0EDB57C3CEE15091E5BABE +:10CFF000DA1B0D16A93BDA176167A4364BF84CC44F +:10D0000059CC199224D6A7BBF38D550DA6CE4A5FF5 +:10D0100050D34956AD28214658550EFC4774142B61 +:10D02000375A725C960A3A9EC133D96B14C06D347C +:10D030009CFF5731D84E3C9C2CA4D7D9AFB53BE4CC +:10D0400050FCA9226A29E232D56D68E3F1EB89DA56 +:10D0500029F5891C52453BBB22EECDAB6639CC9EEF +:10D060002B85445409E10343CD9DA2FD37BAD8AEC8 +:10D07000E0DC30A5906F8355BE8DDC254380DBD688 +:10D08000D862E0D60D12E2FCBF344229D95AFCF72F +:10D090005DDC53616B3A40825EFBEA10A0BC48370E +:10D0A0000E156898A3FBA2E8622EFB35FB04E14A4B +:10D0B00052CAB6564BBF57837FA0F822DE0E53C626 +:10D0C000B15BA0278B8A051C8BD3709611D869653C +:10D0D000CBAA931BF822A6D19391758977B65B28CA +:10D0E000EF043DAD7C21095D9929274A91F437C1B0 +:10D0F000F0CB7E618F540C96E6AD4D7105A6BDADAB +:10D100006B33EE6ED6344E15FB8615A75B2DBEF045 +:10D110001A7D41AB62275722F9B99C0E83007559DD +:10D12000022B1B65A7A1D4B6E592E23CC692F5BBE3 +:10D13000F50DC34EBEEC62BBF82F05A36E04B963B8 +:10D140004A9EA7CB498F4F61D4E8D436B8F5E406A0 +:10D15000C6F24A89643B67FA56A457348CACDFB9EF +:10D160006123ED59F5C0EF5CD674000EC864F72555 +:10D1700026B9BFFABC4939BD95DC9EFC73008C33DF +:10D180006506459C53EA2060A5C675608B728FB119 +:10D19000808F8669AE14E198BCA0CE1B013491BF8C +:10D1A000195019EBC091310A6AFB2E375C346F7746 +:10D1B0002AD523354D175A94E5D043B22748BB0FE3 +:10D1C0006090FBB6BCD43AA213E5246EE4F3CF9191 +:10D1D000262529D84C71A461F6E4A0BFD961F41AC0 +:10D1E0004725BEEDEEC0DFBCB6CC2F29CB9C492D28 +:10D1F000C298F7FB19C3A1FE8959A1BAA9395A935C +:10D200006C6B5298F7687209558AA26AD9D5604347 +:10D21000D42177E46C7C0B39853F5E299AE612F7BE +:10D22000D46C365D75186BC09A9424657C2A0F54B3 +:10D230005D61ADA557E8D757C57137C80D894EC494 +:10D240004FB5BD07F8BBABAD904C9813D5F06A3520 +:10D2500083A7F13D356863ED654E9747C203AF1470 +:10D26000D20D93594C64537498896AEC797FA3CC9E +:10D270000EC2F9DE349D855B27309795EA292B3560 +:10D2800038B9B5A9F50BD1A9208603DC879776D8E4 +:10D29000C6EA0C3E1688150E2AC0C6EC272A5CFA90 +:10D2A00050115F6AC8AD9BEDEDD1E80892290DB928 +:10D2B00051456161733CACE186B35FAD4D1601969B +:10D2C0005258976F4BC0EC8589BFFC1E7CA4F3C5F8 +:10D2D000BC98E3509E80D97AF752A65D884553D812 +:10D2E000614F032FDC07A7BE11B948AEAA1B1D284A +:10D2F000C224A199DDF4D7EFECD1618A87E0D97916 +:10D300001E5F633B88814C233CEC7C4D882ACD56C4 +:10D31000B8B07B9DF33ECF42B8683C2BAD58290294 +:10D320004BF4C1FE7E2549E70C1DBA6C4060ED0B45 +:10D33000C091BC4A816BCE886C8FED8CDD79C3DEE9 +:10D3400092019FF43FF11E6AF65396C84F563E4332 +:10D350001DE7CEFBF80A678E290FE509794B2F0DE3 +:10D360008FDBFCA637FEB7CEE1F574F340D0AC4EB0 +:10D3700029E33D8B9ED2DCEE0E6025BB11E5BE009D +:10D38000EA3F5B81AF8641ED268EC3F7A35FBBD238 +:10D39000059BA27FE99327CA6290C12D80F59D511C +:10D3A000F9FA0AFD3A022BA6525821206A1491EE8E +:10D3B0005BD809CF102B7D3564D3C2CDF5F97A0047 +:10D3C000D8CEB5DF55383BDD335C1B8C5D52513315 +:10D3D000311A88B5DD04D9C95A1B0155ACA512F321 +:10D3E00038B7C6CB27E8527A7AC830DE8236BE1705 +:10D3F000BCDE91B7FC14BCE30E548071A7CEAB70B9 +:10D40000C60C94C96E3737FAC6A466201E9F64B155 +:10D41000D1957B5EC50F02F391646ED5EA7F6D8A6C +:10D42000468E7FE7E20F883F62B2E3A41360080EE6 +:10D4300004275E0CED907334BB5078662A54E9A53E +:10D4400022FECA6D79473AF3C18FACE4659BB3867F +:10D4500030D2ED77EEAE1671FF3DD36B76A40F2E72 +:10D460002BC73D44934E194E67D1154884F6F64BB1 +:10D4700056DA59043CC8CDD67485E6E941826BA7DB +:10D48000BBAC8260CCCFC38F3DABB4BEB519481FD7 +:10D49000F81F692EE667D42BC76B384EF72A9A5AC5 +:10D4A00057E20FD95A44E73A61CA0CB4EDFCA358CD +:10D4B000414A9FCEACFB1F48F34F7DECF9126EA0A2 +:10D4C00028F154BB431DB38FF518662B4F213DBF88 +:10D4D00098CA50A9DC512E4EB625106BB22FF9C850 +:10D4E0004292E1912E274A73F6C5410A042ED69E38 +:10D4F00080FFD0E59D85ACBB300CE65C9DA6DAD6FE +:10D50000D01754B1EC8814BC57DCFBA0CB3CECC268 +:10D510006B93176E23B68FE651A0E373B97F5A92CF +:10D52000D308375AE8FE750B28CC093CD5F3868D15 +:10D5300005148D700855D722317362268EAF1DDD1C +:10D54000C0304DDAE6F8789F554A6F23714E477523 +:10D550009756E71A30253184F905CECFD6B61AAFE3 +:10D560000CB7BCB6FE79C3D00867C748E0B53C0D20 +:10D570008A5D5F4AC0A618219CB54544B2D58A256C +:10D5800049E39BB1DCD36F3B991782B5A58561CD8B +:10D590008BB57B333D6574687C068E7D9D286C431E +:10D5A0002B0A0FC40B10553FE1B8E7F5E9FB5AAB66 +:10D5B0000A4E1F6DFD323A5AB5D8A33A1128A9D99F +:10D5C0007D17338A44261140E9BFAB2125CB9DAEA0 +:10D5D000E4AF7C23C968284E8ADE1D32DCD42DF9E5 +:10D5E0008947B7FE02184029E9CD6DB97D63A2F4E1 +:10D5F000E0F4B2F0F5BA0D93E1A18DCEEE5CA1FDA1 +:10D60000EF05519462D31E62538E4135C5AF45D7A5 +:10D61000222F23AE9D1630D001328B2A6417C1B958 +:10D620004BD6CBD2BA2495AE46F0DC10E568317803 +:10D63000ABC5234C3489C60E85B2A532E42CA616A0 +:10D64000436610ED5E86FF23EAF13774D861BD1999 +:10D650000DB8139BDC756A0B96D1B1627BF17657DE +:10D66000EF8735F69C1C59994F74640AD67C6D98E7 +:10D67000663F61EA23A4E8E5168C98788048F4C1F7 +:10D6800090E5B855B0A05C96678F7E87E87F47D558 +:10D69000C21BB53A8658961092B114F694546C0D8C +:10D6A000F5EDB99D6BD92D8C44FB04F67E7BB0EA79 +:10D6B0009E88D0F505BD40F3AD3C489D5327FFAC97 +:10D6C000AD11841ACFF0A81A1BFD854544076837B1 +:10D6D000DD2BDE36C239DDBC47A81204F10180F82B +:10D6E0009944F8B866CCCF8BB27D6E86B614A2CFC3 +:10D6F00093DAEB7C5C79D2FC2415D94A6112E1C043 +:10D70000CCCBA55D35AD4AE282E9B8D601C86660EA +:10D71000E115A130E4D0B02044F1DFDE28EF8C89A0 +:10D720005E86C5A5F4CC497F1B054080B96400FA2C +:10D73000AAF4CBAF6906EF81DF197E4BC7797AF780 +:10D740003DF1773C05C52515F1B5FC70365830E242 +:10D7500083217AD84532531D4AD743DF3BE0CD08B9 +:10D760004475266023BBDBD39A578D9DF17E0C61F7 +:10D77000DD32498552CB2A69A1A2B2F89F033F88C6 +:10D7800013EFE1140FCA1BD36CD1454BB7F512014F +:10D79000791E00B57CEEFB9ABFA06154A2A68CD482 +:10D7A0001045ED5638E0904FD40DD64706CD0E0803 +:10D7B00008758F59E94ECA2190DA9A941913A32E4D +:10D7C00064F78A586171850996B04949E24261A2BD +:10D7D000B94F97CD7B0BE463912CE9088CB130F005 +:10D7E0001899586389A3815BA0D97A227FB5780FF5 +:10D7F00048699443A646317A5824FD875832162E3C +:10D800006B922492DA306049E094B6862AEFFB5995 +:10D8100017DB652F173166233F53FD2A4ADF602C43 +:10D82000AA3962F19C72BD61153E0286411BC6C4D5 +:10D83000521EAC507E4AA2E4164CA458C26D449AC3 +:10D840008BE2442046FCDF72F89C99F9F81A811C9F +:10D85000D8D2D35AAD4045A88FA1C1108562675A6E +:10D86000067C1D4F37D54962207608C23582F1FF0C +:10D870001DDEFB257200002C91BAFF916D206CE536 +:10D88000B2C211FDB962A6BB90DC9DE2CF399B0B01 +:10D89000F2D644973317ECAE9100545422A5245D80 +:10D8A0006B8512C490D57AB2383B7BD960314FD3A7 +:10D8B00026A95DE507EBF4B502923311C5B3204408 +:10D8C00022E8F91BA204F0710F1A31F520981662B4 +:10D8D0005DD9152ECF684BFDA29AA9C543E9BB05BA +:10D8E0007F819EFD9716CBF25805DF0425FA52DBA7 +:10D8F00008D75F06AAC46FB2201881F30D4A6D1FC6 +:10D9000062BF7E30309DB951482EDC7D96DF61ECE0 +:10D91000D7C8C072CDC29FA6F235BA3979D27CCFB2 +:10D920003971BD02919113314F14A20BCD47C4053B +:10D93000F5F624D09FAD3395CC19CADF0DCAA92DB9 +:10D940001EAC4AA7E00CDD00D817E566B25B677035 +:10D95000C9DE1EBA0CC32E6D5B308BDFFAB0EA9FB6 +:10D9600084FD164A9B96A301C3DDD95CCD8D005280 +:10D9700040C63153F0DC7DE2F5349EB4E1231AEE6B +:10D98000C87C55B8D22C58803B32748C73A29B59FA +:10D99000E23E211663925ACC82FE245C0122323D83 +:10D9A00009AFD7791B2B76E6703523C192D72B2C84 +:10D9B000FB41B4CA223337659590E8D9203420EC76 +:10D9C00017E134CAFB23C4213C127C3423EFDD7FF2 +:10D9D00094AF6CC88B06D12178E83B9120D34E0DD3 +:10D9E00045D0EDD1BB0897EBC205F4DC6B544F96E4 +:10D9F0007135C95B543D28DA97B74E3DA7D270897F +:10DA00005B1BFD7F7CFB185019B959407628F2FC4E +:10DA10005B9488800B6BB8713D1C4B732470FC6663 +:10DA2000FEDEE90CF07586026BC4C9ED1788CCBA2E +:10DA3000567BF2B164765DC5C7D07DD0A453DBD5EB +:10DA400098B4D86B453849B366919E83F8A48AB1DF +:10DA500072D320E1F13E61A7858DDB2CE77239207E +:10DA600017BF7DE9BE1CF863DAECB6725ADC04A875 +:10DA7000AB07AD7CC646B29CDB820F720C777DC6CD +:10DA800027160AE1F58896FE12530D54241AAC3A73 +:10DA90005F42E4576D9A96B40A57D82B6F22B3C7EA +:10DAA000E2B8582D931D468F5CA59BD542F0635B71 +:10DAB000CBDECC955566253B87E2C9297036D5B1BA +:10DAC00088F922D7C04C25CE5C02326BB21B378A54 +:10DAD0006D98685EEFAC9035520867EE72F393294B +:10DAE000506B7E0B67A310C41FEDAD131BD947B657 +:10DAF00073E53EB11522C9A7A1B7E79BABD83B6C34 +:10DB00001C9D63F64C62EB92CCA7065F3FF42C534E +:10DB1000433A6143D44568FAA2D5A197E15FCE812B +:10DB2000E00100D51A7FBC12B8BCF8532B17B566BC +:10DB300017DB8FA57236773A737DDA90F7EA7B9C14 +:10DB4000705867A6E92E4C02415722B51ECBFC281F +:10DB5000284D87DB0FCBB0DE1B5072F00F5FEA441D +:10DB6000823E68E7259499BBD4594F131D7DDF850C +:10DB70002CFEB4BFDD0F8BB13A4BE62BF612318889 +:10DB8000C87B10A545B7AB97357360DAC01114098F +:10DB90006FF7D1959E47B876A1F8ABCDF8CD0D497A +:10DBA000CE5CF4CCC5182880E473BFA4F73543F2EB +:10DBB000D4ED4BFEDDEFAE05920A5878D8BC8A2032 +:10DBC000F66563A408948C0D3B215454AD6318A5ED +:10DBD0003D0875BC7BC36CA5E57011A81746D2B98A +:10DBE0001D1CBF27A4F041B62B0EAE6371FB32475C +:10DBF00096E52A51D52419A8751AA35C6E558F3F56 +:10DC00003EF6A0A8E4118C23AC6B0A71146DD39C72 +:10DC10008CE98073652FC78287DA9DEF8E3AE453D3 +:10DC2000556BCC99946BE0A959D5AB643EA53446AD +:10DC3000940126DDE5C020C050E5505EC7455BA9D4 +:10DC4000643C7C740C2E74B20A592E84C3232CEFCE +:10DC5000FDC4F36864EF6590841ABA649308BA67E8 +:10DC6000003AC5034FDE8B4F86F87F54BCEFD48F4C +:10DC7000FA3D947C346295492C03016031E7E1CD93 +:10DC8000AE6D3EF4A200822B1DC15E42B66A835087 +:10DC90007F24C97C965B74FB0AE4C9533981BE2E8C +:10DCA0008A4508A071BCB715391E6ABD9304C657D2 +:10DCB000F832816631C9DB117E547BA5E3E97894A3 +:10DCC0006E4ABCDA1C7FD2BC7A5E0D8483F63D447A +:10DCD00019EC2E9F53DF44799AFE60F9E022F1D1CE +:10DCE00007B212E1795D8048C2568C98281D230C3A +:10DCF000CCCF91257B9A002FF80234D84B350ACE31 +:10DD0000D9C92DDE44F76B848F8893BF6CFE475CC6 +:10DD100009F9D9E3A87E25E01A79CFF7EB2377C07C +:10DD200045F4413E0A64C142AFA5FBCC5833FF081D +:10DD3000E820608225C552764C220048FF198CC726 +:10DD4000C0392900AE3206ABA1C7BB5FB486447BA5 +:10DD500087ADCD42CA4192AB153F031BD1A69DDDD5 +:10DD600091D08180C860CA4265C0CFF8D932AE90E8 +:10DD700076D476D0E85AFF414B8BB00FC725C54407 +:10DD8000998A9BAE736D976AC66EE24565CE8576BD +:10DD9000F67CCF09DC17CDED19A13C8B143556D795 +:10DDA00073406F14C7A86396DED52127709540F5A0 +:10DDB000CF639573DC78DC8A69D2BE37517F1D470B +:10DDC000F915C8EB2434F1BAD39A8A98888126FFD2 +:10DDD000CA92514DEDD27F9325F6548AC8F444E699 +:10DDE000D1FB18B6D26DF6CE21AD72DAADF10A3B99 +:10DDF00009A47087BB551CE107130F7CF162DBF3AC +:10DE0000C7E6DE62DD2305D250B025F1315E9CB15C +:10DE1000D4EAA9AB9840DD3E8C9322C8E64484B88E +:10DE20004CAB30CC327D985FF5BDEB4270F271CCDB +:10DE300059491A8BE634FC5E6B74A026EAA9D3E13B +:10DE4000A7153E3BA403610710A6A4DB5181BB10BC +:10DE5000D4802503B7BE5BBDE0B5AD5F05C95DB13C +:10DE6000016BABB396A5A908B6A70B198F9C43F815 +:10DE7000DA5BDAA21810774E5341E64F49A2C5C1CA +:10DE8000571F7AC5FDABC12075847FC177FD1E9BEE +:10DE9000D13E561B9617F8B2E2AD0D5BE353AE4789 +:10DEA0009D24C722B412E021AE90D7C969D6E4E917 +:10DEB000C8F40D9CB00DB7BE4DCBFE0D55F60AD281 +:10DEC00066D4C9CEF54EF200BC94A3ABBA7BB16F59 +:10DED00049B42A7A2173FCE959538607BDD27C5391 +:10DEE000D58CDC5A4282280E75AD15D7CBE9FD6280 +:10DEF000F60A78FCDBDC4801FB3966EA1A7A221D57 +:10DF0000507561748BB382C99EB5952E864FDF2004 +:10DF100008372A1EC0A471DEEC845F0382F666CA4D +:10DF2000B70B452FEE57305ADC7DE471E6A793B26C +:10DF30002C89AF3AC74AD2D2CC2FEE2C2F88982CFE +:10DF40006D7DEA0DB880366BC44B96D38A635566F7 +:10DF5000DF185DC67CCCD3985D0DD59287136632F1 +:10DF600006493BD92EDD1B341B2DEBFBA64390C28B +:10DF70008427F59C8E0D7323FD42288AEE73D015FD +:10DF8000F8D312CD2762D3B762EDFAD0E0F7D3AF62 +:10DF9000D7EA9C2809B6B6DFAB69B5256A8BA41C05 +:10DFA000F9F7136D9C65FA5F47144406CB9FF4267E +:10DFB000A4A48EEFFF36A6234B3177C3114E5D55D7 +:10DFC00054C6E7F7F4A79FF0A5C9B808BA4ADDA57B +:10DFD000D244EC9536DE014D04363A3B468EE49E43 +:10DFE0005B0FEED2B8A30B8DCE9A4808E09AA68EAE +:10DFF00061338A734C9E0E53D40FF6B36B7D1E961D +:10E000001DD1C796196499D4AC19F1935895180489 +:10E01000405C17C2D7B2646AA04D479570FAB7B298 +:10E02000FF0E51C00420E54EE1EDE7773AD9406993 +:10E03000537D6CF86BD521BEDA1A2E71DA20473683 +:10E04000839BAE6A45F8A549FA19BF9577049CC928 +:10E05000F8DE598B74E47D04F28BF5D51E18D76D6C +:10E06000E94E2ECD36A22D0E602DF5B4BEF976F513 +:10E07000398AC05E50799B74EC2117E612C4643B68 +:10E080003CFFEDCD203986F6CFC0AE841F25917CB4 +:10E0900015025CD938995F413B2B35A4F095C570CA +:10E0A00061F36938CDAAA801FFD6107A06F1E4B46D +:10E0B00067DE81EE258491683560EFBD82A14E92C6 +:10E0C00055ABD328942EC8193E8D896E27A398C8C6 +:10E0D0005296A08E8D88DDF373FDF659F88036B820 +:10E0E0009F3BB4B2523B87E72DDFDEF1E019158F7D +:10E0F0000B1E58407919056750937A96834497B759 +:10E10000446BF3C96DC13807D1D13EC3DD9BBB79E8 +:10E110008AED6AF6C93B1B722B799EF4670068ACE6 +:10E12000E7A2685721FB5AE3CAEF827CAEC8F59498 +:10E130005173577020AD93F66F0197F8EA9223BBA5 +:10E14000144E49FAFB76411B14939EAB614ED6A246 +:10E15000B18047244DE2C2229D774505BDC8EAEE55 +:10E16000325CBBD35BAA7B09D3AA19E966D9839435 +:10E17000260B596D1D47E2E4FC9728285BB627DD86 +:10E180008789F0EC2A8BFB024E6260AEDD87FE537E +:10E19000C11FF8F4178DD01BE2A7E904D8B7FDD949 +:10E1A0002E1DD84AFA3ABEEC19A40547FD1A99FD6E +:10E1B0000217FD86E79C6C8E27606D9DC37579659F +:10E1C000A614A44E4A58B1B4D0BC006E73E7BBBDD0 +:10E1D000281613C9148A4A2338A0199EBA235992C3 +:10E1E000B80B37E2C7042865B44495B5D3E6A19BC4 +:10E1F0009237B6BA9AC5F3AE5BE97EB82F981A6A21 +:10E20000603B651604F8F785D046E73716AEDE5E4C +:10E21000B002269FC9857FB03397AB9B789A3D9714 +:10E22000115A0D3038C7E8EEA42239CD8096F24C51 +:10E23000470298D4EF10E11FCD3681F0D8B33BEF01 +:10E24000842B5540F1FA8145358B198A6EBB56E90E +:10E2500000B540DE273BFB2961ADABE1B57A06B6E0 +:10E260000257319369DBA51DBEF6ECAD0C56E76491 +:10E27000CDA7A10DDC5AC4940B48B2AB682E6568DB +:10E28000B0514F9F5A77F720F4AD89715D18B1C630 +:10E290003FA7784EE88405DF8CFC02F78093C9D84D +:10E2A00073DCFD2A1BCE60D9193B5F901A2AAE9908 +:10E2B0005777173670BBF8C762FA8D8E89C0DCEDD0 +:10E2C000F66791F575001C57FCACFC7C9B367A63B5 +:10E2D00099B9695B22B5551E05F1D37EB01AED617F +:10E2E000E447A37A02CC792F300C68A88A5BE86EE9 +:10E2F000F361DE3FE0C00398CD69A4E76C52B35CE4 +:10E300004C342CEC91ADD3E89F370CD358C170E25C +:10E31000AC9853DC96BC51E21D02E05BD1FA993E09 +:10E320003F7485B902819BFB7B78415FC388118371 +:10E3300094666735FD08A1698EE88A2FB63C00E82F +:10E34000B14A9A8FF0EFD1F0124610C8CE9C671FE9 +:10E3500072C822EF47E4353F1F466FFCF9151F06D0 +:10E36000D70F7EACCDA9C200B181A8823999607166 +:10E37000946C3E0D8255F4C65F3E6C60BA3BF4244B +:10E3800095BF3DCCB83FCE4A959E1F9E6B1C74A492 +:10E390009B597DFD75C830B3CF5F27BD3A5C3C000B +:10E3A000133751EE19F3352D60E904AF278C8A5DE0 +:10E3B0007B99A31A55C8CBD628327CC5498A1B8CB9 +:10E3C000631B4FF4C98816B2D401FC788CB8D30310 +:10E3D000ED5C2B74CB22EE9391181DE2793CAC5787 +:10E3E0004DD8139D4D973C52A0F0575974196E703B +:10E3F0000AA30CA8FA86EBB839639C85A489E10BC3 +:10E4000099F51603BFC4E2666387F4B66A347350A5 +:10E410002F10FDA0D90CD431AA349271D3C1101A97 +:10E420008C54BDEEF73BBBDB9642674674800A9284 +:10E43000A7F4FD2D407DA579EFB25091B71526F6D2 +:10E4400093639F4D28D85B5D6A7E3596761722D2FE +:10E450000AF0E3D7FBBEE0140FA73B98C1EF89EFAA +:10E4600021AEA5359BF674DE0F52AB26547A1EE41E +:10E470000AA158AC126D111C98DB4B66A338D0DE94 +:10E480004E803AD3D3CA7CD3DDFE41A076485E6D80 +:10E49000EBA04C986B594ABE87B57FF1FA279DB225 +:10E4A00095148EADE5F441D399518D3DD9EA171AF3 +:10E4B00079ACB30C4C7056A940D4677B91B716C6A3 +:10E4C0002BE61B3CD128F8800196E21DAC4E1DF6D0 +:10E4D000D4B9F519627B061F7637DF3E30B1972F2E +:10E4E000AEADA53371855189E002A4ECBDFA885325 +:10E4F00089FCC10E20A749C946FA28C0D6D50E808E +:10E5000045C6374952E9B76A1FD9CC6E1958DCF7AE +:10E5100074D014309EA0B5033A39778D8B95D40210 +:10E52000EBDF39885BA58B59C4FC25207D9E4BCA47 +:10E530003BC944838D1D18C2ED9E94942DBECAD94B +:10E54000DF8D9CDAB83DC652F56AA6CD35119DA087 +:10E55000BA8807BF4AEB543D3DCFC443FC73955086 +:10E56000F793518CA9B0510934F3177736F93E1C53 +:10E570001E54BAE13EA822BEF9C0E88C0A7A29FBF3 +:10E58000D1D9FE4F3E813AA77B8F10C4AC251E34F3 +:10E59000BF25947B687E3ADBC5FCFCCB6108852FE8 +:10E5A000A240FA45639E229B9636A2D1162733FEDF +:10E5B000D54A9E551BF3480594BCFC46F142FED853 +:10E5C000BD849A210435AED9AEC68F4D7141936793 +:10E5D000F86B2E9A046A1B752B74428271C2EB1F72 +:10E5E0003B02F0D6914972CF3418C958CE125A73F3 +:10E5F000BD185A28332525CD6979F2C8D0317E2F30 +:10E60000FDA977338E1F7791BDB03782FC07DF29D4 +:10E610005FB385432ABD45979F99762CA85B4543F8 +:10E620002FC4A64DC582D0D24D9613CC48CAC3651F +:10E63000CD7891CA3F7986F8E0F5D721A6F72E5517 +:10E640009B409626321DB29F1DD1C95973FC8E483E +:10E650008E2E76B3B7A9064341CE22CBDF076C4599 +:10E660009AED95251330AF3035B541033F41112E5A +:10E67000E4F6E439658827C59F46181BBDCA2522E4 +:10E68000744BFC1A6F22C02C321B50598256BD8B22 +:10E690008F48023A7C05370DFB63D2056AB1ECF373 +:10E6A000FFE347687DF80C5E00F45CF913300A1153 +:10E6B0001365DA84DF93F9BFE8368C17BE1BED557E +:10E6C0001E67BE6F17F1BD81D99250E4D38FCC7411 +:10E6D000CBDF61219CB87B3CD53A171CF140F98710 +:10E6E0000AAE232A8466611240678A9FCA1DE833F6 +:10E6F000082574E837D748329A50B6D49ED129837A +:10E700009ED9F6B3DBD70A60D9FCFAF483AB41B5E6 +:10E710000E1A92C1FE2F8E635FD1C8223DD6A68409 +:10E7200000E336752EF474850197D8E8071BC47D85 +:10E73000B090967604F295EDC8C78BA3B5FF11C9CA +:10E74000138C2D68ADA22469657B8CCCA2B6A3691D +:10E75000B7418A2434B31906FBA1F0E9BAE4B8E260 +:10E7600091B9A25D0F484119C7CD971C6B8268A172 +:10E770002FBE1CFCC8125CCEB6571E8F823B804059 +:10E78000827202242FFEB5F8CCC252ECAE0A794553 +:10E79000797C6569E90655FB579D576986A5478CC5 +:10E7A000ACBE8DD412BDA5C33858584F0D23C758E1 +:10E7B000EA4A94E984DA9F89DE9D6CD6F0B87CA79A +:10E7C00067E56CF7642031C96EA5A0AB43A0063F96 +:10E7D000FF76AC9CEFE906E2DB7F99F930990434CF +:10E7E000832D2670AE90EC2F3A7E8FF5788E6421C3 +:10E7F000953B27F2C1283225CB52E389638D7A1EDF +:10E8000053C1E8BB8A92B3998EE9D39D81BCD80FDE +:10E8100075DFFA18AD777C4B9C9DA9FAB435E2B24E +:10E820005057E683042B001DB1176EB56B3850EDC1 +:10E83000FB72E92863F9C2BFD69DA9C71068F880AA +:10E84000AB88089C73736B74C6BE89348B2171DFEF +:10E850000D478195341E12FB20BC10E6F48889FE1A +:10E8600095B7644D9794BA1FD5E714BA447C37C95D +:10E870005A3C11D94A0AEC112F7FA90ED9068B1ADE +:10E88000B0BDEE490CBBBAE89B1941431EFF7EC0E8 +:10E89000CFDB60BC2A8934C948F07D1D9492F13ADF +:10E8A000C59A7F0E9A68D9E5C7FC096C5561447D0D +:10E8B000FD8195F60F0560BA698E19971172D03FE8 +:10E8C00005993EEC76A87DDABD09008C9E220FE703 +:10E8D000CFEF169CF959531C43D03A03D1C8870592 +:10E8E000EB38502B0291964629A8748198A4F56DB7 +:10E8F000F79B9CC3FC0962AD8F1444AA16DE854DBC +:10E90000780138EFCFD7FDA9777780CCB07CA9B854 +:10E91000DF3A2436009115D00BAB0C7FDAB9D60460 +:10E920006F9FC86558484AFA73002A71CC9752D134 +:10E93000E093684DDF513389E8CEE5582711ACE10B +:10E9400077EE30D9817B787A8E344FDEB2C953B2FC +:10E950009584BD6518A11378DD044980A638670148 +:10E9600055E105E164418BDD49C17900FE0E433C70 +:10E97000EB1A37DDD3195F200281E86AC984870763 +:10E98000D2B33B827857CB8EA15D0EADADD67E91D2 +:10E9900037373258A376479B14ACDB58D2FC41F989 +:10E9A000C6552E11E557D09F6AC025268C8A5A0677 +:10E9B00094F35698AB2D6E23B16DF381CE38D516F6 +:10E9C000C271C51E677089FCBF76B49654AB7B5884 +:10E9D000E84BDAA768074A50452B00965360608DD4 +:10E9E000A54BFE612E8089C6516E5163AE34155C15 +:10E9F00013C9F3096F733CB557CBC9EF3AC6B438A6 +:10EA0000EF63D16F26AB99D59EC9E028DA660B0477 +:10EA1000C1397DD6E940350A4B8ADE086FB0EBB0CC +:10EA2000299682E583DC744BA2C066ED051F9542F2 +:10EA300078142F8E4F10EC4040005A75821A3164C2 +:10EA400095802E93657A655DDD1D84F30A69959640 +:10EA5000050BC5D6267E491EB1E4552139C0076F86 +:10EA60005DC818990588E49724692B7ADA1A19A0E9 +:10EA7000B1C029BFE2505242CB7EB8510A7D398BDA +:10EA8000CF495EC06CAA38657323FE350114B462A9 +:10EA9000F354CD70A5A7045A693156E5644CE4DB04 +:10EAA000BEA68FCBCCAC6361DF2D4E73B72EC3EE09 +:10EAB00049626E0FBEFC3AF81FF96FCBA2F98F06C0 +:10EAC00074EEF98391548AF0EE10C2DB776BAE944A +:10EAD000C77E94980475CA7CB888F68A601735F4A6 +:10EAE0004974627A6480D6FBA0235044EBF8A2B349 +:10EAF000037380C72C5143132DB9704E034A37B6A8 +:10EB0000AEE918C5A0726838A173E2F238AD188A70 +:10EB1000BCF53621EE3472ADC79EBC68BCAC20EBB0 +:10EB200092EE2873DE79FFB6BD850044B125330E21 +:10EB30007835FFB95FC09828455D5EA00EBE783578 +:10EB4000091D9D70A492A7D367076A981A7A443F5B +:10EB50007F2EED5A18998CD41A6AF11974034A81E0 +:10EB600039E5815135777120A81ADE10E5CC3E8A4F +:10EB7000619EA0F54B80051F95F4E178D6DB00F48B +:10EB80005F6539CB010E160E1EDA69A3B50A3A711C +:10EB9000851D02E88DD2151D4CB239A78378B8A81F +:10EBA0001A3FC6787B3AD465B1D419ACDAE30526AE +:10EBB0001EFB5864CF5F205DD04B0606A94BEAAF21 +:10EBC000B9C69D41D6E2686B21FE2AFD3A40C2BF1C +:10EBD0007B2036348DC71DD94ADD775DF48CFE5914 +:10EBE000787CE15153E1C621D7D999E7233F80C909 +:10EBF0000BE8886DF5DE41BDE8A73D7B46033E127C +:10EC0000C8208C8C29BBC116FAA6123ED8D01B4155 +:10EC1000A12B06553DF6836AAC60ABFEF8BC3E50B6 +:10EC2000B742F8181FCDA6FC6E5EC9260D3481943C +:10EC30009503A713FC8CDA7C46C4B2528DF8D72416 +:10EC4000BB2EAC7C3A42825A17DC35E896E51D456E +:10EC500089AB4D5AD6423E64116E965DAC133FBAF5 +:10EC60009BD537C97B6EC5C4FEB427A53054A5E239 +:10EC70006A2BAAE3DB175F868F332BC9979B95BA64 +:10EC80004EB417F6D6A43A386369B1E3B4C42D8AFA +:10EC90000C421EE798A1072A3A72424C900063F199 +:10ECA000714AB69FA0589648611256689A2938D87A +:10ECB000E58F32472BAAFC1B3D7AA91488A7647301 +:10ECC0004D13262FEAD21FDAD3BCAFF65A15B3D9AB +:10ECD000251DD8EC0F993CD8B5D8F489D25006B38D +:10ECE00085E098EAFA68A76E345C39910873825718 +:10ECF00099B129A482045E106F6A104E963100E427 +:10ED00005AEEE058783F43F50282AF8F5173FEDB35 +:10ED100014CBBDD69647C79F4CC2E3672B94A40182 +:10ED200070C06DAAABB1D825ABDC161AFFF181E239 +:10ED30009ED5E327B7D11A6A4D6805A285092DC56E +:10ED40006F22D5D508122BFCB0C55D65B2FA7EA541 +:10ED5000180E42ABA67ED7EB996AE8C361B29A72ED +:10ED600004963B7B0A5A8BA88742C253A6AF5BFF2F +:10ED7000A9F5127D775B8B7F8705D6B700C8F5C0F4 +:10ED800069E387570439BDD615105F179BEB9011C7 +:10ED9000FCA320697B88445F85F43E6A960CADFB3A +:10EDA000EA6A3C301DE5AA7A2CB8DC5F4D6645C99D +:10EDB000677AEEE96431B46A022E732E186D43450A +:10EDC0005CE0DD5C663B36ADED9A1E01162F7FA53B +:10EDD000022D06A0DD567AD391DF3950F450679D9D +:10EDE000090E468D18F1F85701F33F84CC8A8E8BBB +:10EDF00011A27C5DD782270AB1562BD0B7D94B31EF +:10EE000060B182D8F471924E4F6FCCB520DBC50E45 +:10EE10009937FB7FB8E54E645F8C61C44EB2AC6934 +:10EE2000AEEB8BCBA124C80E17C84F5552CA803702 +:10EE300080CECED0AA5E42722F6997C3E5B7AEDC12 +:10EE400060B3D1FDB9EC6C7EED57E599A0D685F3A2 +:10EE50005C787B9AD4CA7C2C912B82E25841A69193 +:10EE600032025187BDE92F14CDDE3F0A5CED7C0CE8 +:10EE700014EBC0804E2F88CAD6DED5F19A0BBAC5E6 +:10EE80002531E3C207480B2449564F6902407EAE44 +:10EE9000930F813B7414983325A4C24BF7F82F4984 +:10EEA000E8C5ED5315E49DC1D1E1DCCBBD8D4936FC +:10EEB000E042CFA8D696A3A584AF41E63BF9C5A210 +:10EEC00085659E10786D259E24DB7186EB401B01C5 +:10EED000A7390AEF6AAD280A947E53600975779EB8 +:10EEE000479341E575A8A55F888ACA46E639BD6D96 +:10EEF0006B9D82706D9E12C699A9223BC00173352D +:10EF0000B4459E66803A4290A402D2418CB88E1CD1 +:10EF1000395553BFEAE765810006FE87552316572A +:10EF2000A8A17E6B32407B1914BE851FD9A9CA41A6 +:10EF30005DC0BCF1E4973C5AE703F7AD8F673C2A0C +:10EF40002548BE710893959818F07FF21D2DC8C60C +:10EF50000BE8D4782A19CA9EBFA0EDEAECAFA7B798 +:10EF600001011B9291297EABA6850C29A117DC20FB +:10EF7000C210F220AC048899711783D6A0FCB8CBDC +:10EF8000E2C2419582A4ED71A6F4AA5815FF2F772D +:10EF9000BF650287CC38D26084B5AB99FEBDE2D99B +:10EFA000389A02994B895DE394DCD30FF0F18357D3 +:10EFB0000EA6DE40627D0EA31E5C44C3993A56FF46 +:10EFC0000540BFCBCEC76CB2B589DBF949823CB9ED +:10EFD00033EEAF9682C86BBB12EE3268747D54621A +:10EFE000235977DE2A95F37E9D91CC2AA030B7B9BC +:10EFF000AEE7EA539B1D5AD69347110DA08588882A +:10F000002BC986D73E9BC7F2E3BC830CF791707483 +:10F0100016AA26889D4CAFB72F9BCCFB5291C1BB43 +:10F02000D75ABDE5F158DBAB3AB1E60FA4FE57560F +:10F030008C6181A54B1F648139A022868DAB358FF1 +:10F040007D93CC25980D57D9406462EEA86C40653D +:10F05000488D7FA0ECE3FF1DC9267BABA867BFE40A +:10F060001E6BE434529E220EDC525BCE855C7945E9 +:10F0700027C1909E9D50149DCBC70300548CF26411 +:10F08000F09C2E82B8B0DE85AAB4035BA549325D40 +:10F0900012FA7B2E92FE4E64B3744758340D827977 +:10F0A000E178F2172C2B5F6070F884A8F6ABB037CC +:10F0B000FB2F4B7DFB909844B7C653AA92A881EFD3 +:10F0C0005FE4B61DE007A02354566FE93558D3C856 +:10F0D0006012A7243D7DA57CC1653AE72221F50495 +:10F0E0002C61ACB1539CABFC9B0214FCFB21947EC5 +:10F0F0002D8B3ADF388BFC0D6BCE2B7B04077DD03C +:10F10000D4E429545EDE5C634527E8330D0991F0B1 +:10F11000D6DC281E107F35FE1C1094CA49BFF5CFDF +:10F12000003FC83335EB07F5B44EDA109E5B02485A +:10F1300084B40834EF98784730425795ADE602041E +:10F140002486A558CBBD0C2828B5D1539D9F08FB1C +:10F1500072C487B35010BC6FBEEE9F9A8277F723BC +:10F16000348320ACAA42C0D21934148CA9E5F5032B +:10F17000FCA15DB07A5552D965F5538E665B854D1D +:10F18000C4379067A4218C67565087C3CA9F44C177 +:10F190006466F3AA2A2746BA6A2804CC023AAD0B61 +:10F1A0000295C6D10DC57E1B9F350BD182A908944F +:10F1B000F0A381CCD711023D316F0F8928E55F1094 +:10F1C0002D921BFFDBC95EE0131CC3B082190E3801 +:10F1D000B8506956277CF2D537A1A739BAACE02BD5 +:10F1E0002992C9510E00BE5CB6415EEE16E5B72FFE +:10F1F000CCFF418B908A4AFF977E849D2423A43FB5 +:10F2000027DFDE3FE99C3DB0CAE281DEA1EC75CA92 +:10F210003E87A0694222589D864EE86DB5E4368A45 +:10F2200062062481D722AC5531E0917740810DBE32 +:10F23000A07AFEDA02BB6CD5D2D497B7F64EE912AB +:10F24000738D1A4813AD9D63BD00E83CC77A0AD799 +:10F250003281400343D238335B492C81CDB0890BD6 +:10F260005E27C0CE28F03CACB41F1B454B424C4837 +:10F27000C4F70F6A7716B9037441A5A46204B39862 +:10F28000887E231E245A43E2622AA086BDAC60A277 +:10F290006EE43DC3546C47D5E1B7EC21745FE5B62D +:10F2A000E8E8CC0BFD2252FA6B7446985B0CC989D6 +:10F2B000F17CADE495C3D14F99207E7356C2D45CE6 +:10F2C0001B3E0A5AC5210D53E1CA5EBE8386A012B9 +:10F2D000022F0CF5000955D87074D30A386625350D +:10F2E00032BDFFD4BE0868FAE4C6339795EC22CD50 +:10F2F0002A935672002E61480CB39B6361081FC6A7 +:10F3000020909FBA211565E437200B058009F90686 +:10F3100025E1A01F55A3AB99675F4358C199579B3F +:10F320007B94E88D18A68CFD76413562E754D3A70F +:10F33000DE78BC389DB849F91B5E7C9783DA71A7EB +:10F34000E5325452E22061E31F0F2B6952F26C89BF +:10F35000C20A071CEBBFA5D8BBD206B0E967A6DA84 +:10F36000DCC2581CC2507293D4F455B552E3DA365D +:10F37000B2BB9BC16CFB015A613C684C57FF5D24DA +:10F38000F67E20E929BC60E6D7F35463D09D75284A +:10F39000DBDB4B21BB82587FE903843B27A28848F3 +:10F3A0000E76AEC3C0686406D53E66FF2F1D6BB1F6 +:10F3B0000E03D1BA678F87E792FFBF1D3320F6CFC8 +:10F3C000817A36B6C5F4B6476B28B1D14AAF490643 +:10F3D00042B0E0FE6E5CF8D8A9984AE82273B0F11A +:10F3E000874CDD7EDABB8E8F133E1CE32D19113363 +:10F3F000503AF6FB428425E6DDA7D354097D726EB0 +:10F4000099303125433B9E15402EBAE6153CFE0748 +:10F410007EA7D6B49BA7E0FE6590F2E6B86E2638CC +:10F4200048D4CB36AFB7ED981840B91F59E1CAE9B7 +:10F43000470C1C700DA19626C6F2289FB1EE162E21 +:10F440005102D046F71DE0D44F9E4003ADEC2A8117 +:10F450001FC2BDAA11A235B167321B6445492FAD49 +:10F460003B9DC5D973688A751ED2F943C99D7EBC80 +:10F4700086F0D8CFDEABD941D61D46065B40E79E6D +:10F480009C7FF1A4C6FC3A5BC7F504582AD811E466 +:10F490004CA411B50CEA3EE610855425C88F7AC9F4 +:10F4A000CEE66BD0A529CB086D60BF31881066F61B +:10F4B0006AE63BCFB4DC6EC8919EEB26682C1076D2 +:10F4C000B800479723F07FF170BB711A3AB4E4514A +:10F4D0000B5D3C0FBEA01D15FBA13A5673925D3E1D +:10F4E00030E8F7D6F5A4B6386DD21DCE03999CF955 +:10F4F000467E0B08B641C6DFB36C6B1A95CEB4429C +:10F500003F3CC7E5628DC5887740BA29A9B568E157 +:10F510000943BB2C37DE58E632439925FC997F7CA2 +:10F52000E4EC022C4D83C668B772E1F6DB829BCF18 +:10F53000E1A4083C8F9BE98B17BA999B7725F9AE1C +:10F5400052DFD97A6D83D47049E23ED3C9C6879A17 +:10F550007489948C951B08A21DA1ADC6BB8352482B +:10F560001D9528CDC83C4BD4F213459A139D6BB31F +:10F5700001FA9753D4863BEC1F69C689EC6BA80E41 +:10F580001C14B7DC56C2D01C2AFCD576C5F0CE4878 +:10F590008CF3741395A6537244F696F9B9FE055789 +:10F5A0007A4DFADAF76E546B09A85D4C82C0F420EC +:10F5B000FED80C2A815FD1BFACC1D3C71052D4672B +:10F5C000F20A0EFC10EFF3103A01780C25A64ACC93 +:10F5D000E8EE4959FCADB00B52C7769CAD6DA5D095 +:10F5E0008769CBE31496919D50477732AAD71119BA +:10F5F0003748C89C67FCC4016AA2338088DD91FF4C +:10F6000034E43AB174954AD5E35A74EC432608338E +:10F61000F98A85C684ADF3BF0095214F89C15E2963 +:10F62000184E508127D131CBFB51DCF9B085FF1149 +:10F63000E7FBF93D020EA2531BEEECB65DB8E5CF39 +:10F64000E2AEC2D3039F7F7C2ABFB7115AC410BE5B +:10F65000B4D1DC7033735BF46931519D02941FFAAD +:10F66000998CF290E7B3BE3B29D2D612FE2DB54E4F +:10F67000F76FE9E4CFA3BF06CDDE1462CACD0CD488 +:10F680000E0DB2E696AC612B945F2D32BD0620FACA +:10F6900007AA7A09AB3DA86CCAC80394CFAB814DC9 +:10F6A00072AF2247D2A3337DB3EF9D82F98222DF6E +:10F6B0000EDB88405F8F68A2D05BA9BE570787BC6E +:10F6C000155AE3221453F8C00DACFFD6AF00C4ACFA +:10F6D000429123632C3BB85E7D38EEC7A39C9B4FC1 +:10F6E000AFE319915D29C5DFE67467E95623671515 +:10F6F0004B81AF7A75EFC1822AFC5533E12C529EC3 +:10F7000027105A37C78E22086BC8076DCFD8D7FB92 +:10F71000291BDE4FC9E2EE654DA2A440291D8DE7ED +:10F72000CA012EA49C96DC7F1A00732EB4D709B4AC +:10F7300097F55D6F58E22D4231E2C9B24C509732D5 +:10F74000FCC9964CFB0FFA0D74B7BDED8F43E12752 +:10F75000CDC97B4659205E9BCDA4856A8B7346C775 +:10F76000372D65D21C544801D5BFF90F2EDC77F236 +:10F77000666D6D87E48FFF74B5D264ADE0476FD4DA +:10F780006EE7F6A24F4D5357A142DB003505A0DAD4 +:10F790003D60B28F4924BA627E7D326429D17B7884 +:10F7A000EBDD76D9F1426CDF4AD82E7D21BDCA0649 +:10F7B000F198D65103BFA8C4F9EA6515C0ECB5C2EB +:10F7C000C704B932E0595FF064021CEFC0249DE524 +:10F7D00086DC5F980085196278616D7C11F781EF96 +:10F7E000481A22623A0E0A97A05E6242D36AEE116C +:10F7F00052D59683C5412AD37DD972C2CE1C3779A2 +:10F800003B8A0156F43EB0947123F436A0BE92E5D3 +:10F81000BE1532BB9A2FC261D0FA75C806F8D42A39 +:10F82000603B5043675D5D3A067592D4D5DFEEA923 +:10F830009A1F1E653310584126DA59DD37429D3B29 +:10F84000CA2D088DB09B6319BDBEE651A552CD06E9 +:10F85000832F77E118D666F1DB7A464F18C9967286 +:10F86000F875810882A2DBC9652593911062844FE7 +:10F87000C88572F3A61D1730769321ABA4C33D262D +:10F88000A31DC0F193D54D9426B8F9938B648CC118 +:10F890001CBA2671768756F6697B13CACFC8B41A8C +:10F8A000CB236F2439F34AD1E9AA0A6B50FB337E8C +:10F8B000C01E0D904C6ACFE4D02CA6EB096132AF8C +:10F8C0000F0BA113DFD504AAD272AE957FA7F9570B +:10F8D000EF7DA919E00E92FAEA884C4F2FB033431E +:10F8E000B52C7602A3459AF8D37EBE9215FBA5A946 +:10F8F000B2C27BF0D23250B41B5282305DA0CAD467 +:10F900006678CC3A0294E5D37D457039C4F267CD70 +:10F91000E7068556C3890B0997C6A211EEE44BBDD5 +:10F9200080EAEC608B9E9005749D9E800CD9C72E5A +:10F930004BE414F1F85E17A230CC8432F66602ACC8 +:10F9400041F1C8EA6D7FBC91ADBC91D266646D3562 +:10F950003A7A27D7954680B36128CB17CF698C9622 +:10F96000F0E94957B6C93E0FD96968B8C0C111BCA2 +:10F97000E993AD72885ED546F3AEFC0358CF5715B8 +:10F980007CC86DFC80DF383659975A5790CD983532 +:10F99000575C26E88F48EABA1380C10E9910061DFD +:10F9A0004BAB99610024777B2825B9D57A9E5DD031 +:10F9B00009565A3D4E3651A00A55BE7C14D7B4762E +:10F9C0001AF01F93E9F4F89835F6F4711A9CA1AA7D +:10F9D00073900A9CB2BD6B9B3FBD9DC5B0E3DCE359 +:10F9E00055BFB8DE87FEAFDD535288C7FD5230AD3C +:10F9F0000653DE2196F233D6791043957A6442E4B9 +:10FA00000967B91A719D9401818E69339E764D0DF7 +:10FA1000D335B4927EF60B89F722F198CE954E40FD +:10FA2000671E23E26A4D904F92E908C7AC89C385EF +:10FA3000A2BDA97FAB8CB1F5740BC43B832B0EAC7C +:10FA40006B62BCFF546BD88AF93932B27495C8FC2A +:10FA5000FDCF10F1E0637D596F87C9166AE6C34296 +:10FA6000A717369E9CC5B1EB3DDC1702230719E3AF +:10FA70002CA743E8EB8C6ED371CB62EE4A647F22F5 +:10FA800090B746E1C07F3E5FC45101E0DB52993E32 +:10FA90000F5BBC060F691322165D02FE2C79EDB0D8 +:10FAA00055979D855100101C9DA42C871D5C0FC38C +:10FAB0008898C6022D1C18A7B37B873124169C0D8D +:10FAC000C9FABE2457E7E5296D6F8046F5C8C6D14F +:10FAD000AEBCE8BF324ED5F13193A9EED07E9A97F5 +:10FAE0006643D835F7179A89A702695FBEC8E1C097 +:10FAF000A89B585C272787D9C812B0832908D066ED +:10FB0000091BBBD5925BFCA7536F6879226BE3DCC2 +:10FB1000128EF82D80CD20C4DE6E1999D55E9DEB36 +:10FB2000D6A994CCCE992F80D05D67BAFC36C2514D +:10FB300050CA33448249A39CE83460AFC8D3D498F8 +:10FB4000233723C785E5CDF58654E2C7FC6BF2F970 +:10FB5000D891A6F25EC20CDFF4877E741A1D7ACCAF +:10FB600055F454C0ED7D7D088D5B131AB7BE21F0AE +:10FB70003BD63E96653CC70A630FEE3C757BC3EDF2 +:10FB8000C74F484836D91E8968749928D80283B06F +:10FB9000C7E62A9FF32836330B2D1F46ACCB0FBB8D +:10FBA000D4E05C2F3CDD84C57DE4813E45B08A4DC8 +:10FBB00074AB13E61AD57A99586A7EBE3A10F7E00C +:10FBC000D71986983A2DDE60BAE84AEEB90BB08DA7 +:10FBD000E7EE03081CD3AD72BC3B82B00395403CFA +:10FBE000B7709F3056D1084566955889F9D2149E52 +:10FBF0008107A9348643AFA08729262482B8386FAD +:10FC00008E915EF0DFFC45D927DA5ED5E48BA81E25 +:10FC1000D93DFF375E5AE3B69C7AA0C2491A99E4EF +:10FC2000015518546D38785F5241A22AD07D7F3F2C +:10FC3000CC0E5BF60A4605AF503F702AA45F78737E +:10FC4000F22DF9484EAD5D6F7C8157D3D8A47FD398 +:10FC5000A9DDC8D60BF64C45082608FF1E98145B94 +:10FC600097043BC0AF3D146AF94CFFBBFBD265A3C0 +:10FC7000541A0B38F37926447ECCEA04466BA196DD +:10FC800023A7D245509F5D34AC286CB1B1CA8578AA +:10FC900023BBBDC0DD7DF299A150E4AF66DF2688AD +:10FCA000C948D8B8668DA84E08C3A0D5C540407BCA +:10FCB000ED42036903FACAC8C0FCE38A3CF40FCEE4 +:10FCC000DDF4E41C458A6CC66C10CB2DD431558E06 +:10FCD00062900604DB9CC26862C777112692F167C6 +:10FCE000AABC26AC4753DDDA6CEC19A11075A09CB8 +:10FCF000E319D48F2D97CB922E12DC31A0A9FFE50A +:10FD0000415E05EA9C807DC7E771D216E19CC485FF +:10FD100093696D48739806D0374F6D1B6876634CB6 +:10FD2000551EC32335808330E1313B665D71C028A9 +:10FD3000315109D05462B1FB651AEBC0560E4E51D9 +:10FD4000B5147EFE7BE98EE544E7ABA764CEAD9C9F +:10FD5000F10E71AEFB885DC3F1B37023596EFA10DA +:10FD60000B3E46B2980217310C2DA320369980869F +:10FD7000E0F7B23FE4F22BBA3310D62F98A45945DE +:10FD8000D7BE6B1B2FCADC6433448512D729BA480F +:10FD9000BE2339642C8BC2D5246A9B6B84C4C09269 +:10FDA000868F32EBB9C7BB9B71A181A28BA7B3D958 +:10FDB000D5736ADFC12CA7A6E5CD3F57C5BFC68264 +:10FDC00044EF551456BF9B8B7B121CBF0DE8156882 +:10FDD00096CA00A92B840ECCBFCD2C0D2D71933665 +:10FDE00045F64F583B4473A9FE32EA71BFBF1780F6 +:10FDF00018B9249AA0D5457CE7B42858EC3D6DEE9F +:10FE00003ECD9216F2343519155C89406BAF737B89 +:10FE1000173FEE7BEA243E233F450E3FEF84FB3A3B +:10FE20009CEB8CE910F253E47C44BB07DA332A12D2 +:10FE3000ED23CFA8D41D9BD881F3DE33DC3DD48ED7 +:10FE4000736D63E77A55237889ED33880FDD212FB1 +:10FE50003E0CDA1FC9D9961DB52FC9902E6DD8FD5D +:10FE600009C653632313F5674681699DE04B65BC62 +:10FE7000592831D0F9838D0A04D11E45CB3F9940D2 +:10FE800022564D5821A11B155A4CC909B03133EAED +:10FE9000C571B72632BD6688879271B4C770422299 +:10FEA00000C300C911DF054A7D0DE3D0A3424BC555 +:10FEB000DF6FFAFB9AC4CFD277201CD92871607308 +:10FEC000B2AD8B7B3F8B951F3E475914676522046B +:10FED000DB344E88A2FECF1502004AC4005F3A5CB4 +:10FEE000BE4BABAF864ADD9C12E8D0A8CD8687A971 +:10FEF000007BD44417DCA100B17302E823C301D90D +:10FF000031AE8531CF8A0AFAD94A5B91F6CCC7CD9A +:10FF10002FA90A8904BE930671F71C63BD04DAA0F9 +:10FF2000A8F69538D5BDCF1E774E89C05CB1CFAD50 +:10FF30007F5E080D2094C9FF6F33FABABDF8632FB6 +:10FF4000C2A1F3DD92F35F497ABAB7FC554E87231D +:10FF500006BEF77510802649FBE933A41E1891F3FD +:10FF6000678DB5673E407E6B577A12CABAC5FF8768 +:10FF7000C39707D6CBECA116A66CEB543578870E49 +:10FF8000079637E188580124EE37F9C4E85DA6806A +:10FF90001EC9FA1F19CDC98B04BD19FA3DE7A9F096 +:10FFA000B59947BE73DDD4E485FAF539C7E9D4D2F3 +:10FFB00015B7BCD20D1652826C517FC60315567709 +:10FFC0002E7CD99B109AC2584FAF0A1609B45DD641 +:10FFD0007D51F68ECDFF5A39D9C1C655C035514C29 +:10FFE0001761C0E7214A37263CDBC5314EA06E8F32 +:10FFF000CD9AA5F681A68BB0868BB5C75F256FD845 +:020000021000EC +:100000000CC48451A553787279F1D3B634728D60E3 +:10001000B8017D4D25D41FFF3E1AB45F0AB982AFE7 +:10002000756D642C484F2D2DA662EE86888250B5E2 +:10003000E0D1651DC83F5756BFE24F3EF5ABFF808C +:1000400094EC3B1A94DA6BD904F1E29510F970C97B +:10005000C0F6B78DC31A3F21CA4743FCD746BED866 +:100060008E1C312EB1DAB057761BFEA38AE25D8A70 +:10007000A38DDEC4FF5582151620C2A89732724D9B +:100080001C172281174EB01FACADB469ABF9090A39 +:10009000D416E2B83CC9DBF212826691CA8021ED27 +:1000A0008CA293F878D987B22F732CECDB0D140453 +:1000B0004BBAD29FF4118B94D8AAA1ACE9C80B5AC1 +:1000C00002CDF8BEFC0078EAF3DAB451C36558F308 +:1000D000F8AB7384A0AA161EE43CD917B194146B34 +:1000E000B7CB548C0629903B42DF34CA405D2E3D8D +:1000F0006FD4AA16786AC84E65029183720D0EFFFE +:100100006BEBF3CD588E5D079C52714DA97E1005A7 +:10011000FA4D0F41A98BA3600F0E785B222E0E6162 +:10012000C9C8AA02B732BF839276D66C4919D728BC +:100130004358BD757EAD91BE6CBE97F5783DA2D893 +:10014000C7F4E673CF6236FDB7FEBE04BB662A5C19 +:100150003C0BB1CAF57578B772F6DD4D9E1A75E4A1 +:10016000618F271AA0C88BA18E7B8EB7793E837FC3 +:100170002FCA5E8D8A62D83410DF5B84CFD9DDD37D +:1001800096B421383FD88101F0D31B41A400B76653 +:100190009DFDD263376AC4713D0C83D5288D9D7B4C +:1001A000B400651FBF065210202D23C75007E895E5 +:1001B000EF56B479FDF430D3F61765FDF54247AD3F +:1001C000927A4243239EA8C3891D8F93C867231345 +:1001D000AF286D1B342EA81F3BA5337193595A616C +:1001E000FB5D5843115090DDB67B8AD0038002C37B +:1001F000B724662824CB2DA613BBBE2AC40DB38911 +:10020000507B6FD2DB069E3A72FBB0A6FC7A5A3F57 +:10021000C206FADC19335A4C8739DC90CCFF4CBD4E +:100220002A5BDC2D777EB79A6EC433407E263D175D +:10023000BA7030C5BCA49C9CCA31A773C11D346B75 +:100240005D175A28571D2ED98533A5011C86D20962 +:1002500066D258D2AB3CF93232B464E64D2B6E9381 +:100260003B64865B7A2D8533CF7DBFE38B3991B2BA +:100270003BDA6E9046ABEA68D8D7049E379F907EF3 +:100280005D6033907A147BEF7BB75B5CFED00FFF31 +:10029000BEBC6345F4F944AF9DD82E6E191E8CB3D5 +:1002A000024E50E6880F58A4BE0EE6F1B4E773DEA6 +:1002B000B6B1E831EFDE562A5E924424337B86A540 +:1002C0001B26D57B2F0711183654C4D86D1370DF49 +:1002D000873BC1A1C6468898ECC7F0EA13DBC49BF4 +:1002E000ACBAB00608F80EBC0E43BB7E76222A07D5 +:1002F000F71326517DCC44A2EF769A7A54BFABB661 +:100300001BC1556A0D9D21732454F41F9AB0846E4D +:10031000D245D2892F1317E8B1D05B47D42EC48AB7 +:100320008C31EA12E1BA0A9F67E5D54F5DAEB47C25 +:10033000B565744FC917703AAFCBA5A893E2EFFD2E +:1003400053F7E1F02EAC056AA8C485A20E34FF7CF9 +:10035000630F639AC68FD7C289918F70C21237D24A +:10036000474F06D18615211741550C5A64880BD981 +:100370005D3407FD11BA49DEF6F7C7630230ABA45E +:10038000EEC79BD621A00B14A6F0362514315FD200 +:1003900056C026FEB10B94F31BC306526B69CDBD4C +:1003A0006B52DC9A02C3BB8659A37280836BD4FE66 +:1003B00003CA13DBA593B3F30C2F37982D3AF22A17 +:1003C000C3A030258F9542DD7FDE26F3F02A2D0075 +:1003D0003288C714353082B53D7BDA45A72D47BC3E +:1003E0007F38B86A65707C4BCFACDE06E3BD5B1529 +:1003F000FEF879783F228E26964BF6192FCA63496C +:10040000172B081991EBDCFD382FBABD6191BDD0D7 +:10041000B4C44CE96C579C9D33CF17AF59F270F6BA +:100420009869282142477B19BE5C13A38C3746503C +:100430002946A4BCD64006567C786D6784B6E9A4EC +:10044000B935D46A4FBB218472A5D6DB35F2B3AD82 +:100450002CE5AFCEB286E01CD64F633B11943762D9 +:10046000CF476FC2FF2B485B6FDAD2B7805AE61EC8 +:10047000C6A2685257154460055B44B87DD2548EBD +:1004800057BC93E6B0A8C1E4A1DB64BD6035DA2BAC +:1004900024D9301FC1C504342517312FB94D9F8C85 +:1004A0003B8D93674B32DFE5EC97002D08DFAE0004 +:1004B0005454498543A9C83EB43F45380231C17000 +:1004C000F992721344EE5CC09D2DD31D83031E3040 +:1004D000ECB1545A6179E1EA6E735BA3E2819BBF90 +:1004E00018813903CED9E8C25A530E5D0A99925346 +:1004F000832CD9C4ACB58D900113AC383FAAAF9C06 +:10050000BB3891BB98B7E75BB73D38A7FF1384A012 +:10051000AE49BD95C8EDC514B6402E7DD2BBCD8782 +:10052000D211D7D9336BFD3F6DB785EFEE32078D12 +:10053000AAF4BC718DE367E3C483A23CF4B079CC28 +:10054000ADDEEB3DDBDF8DC3E3D21ECE639313281C +:100550007ED6C32E4CACD827A9FA64FC09BA25373D +:10056000410520C5A096E28F70AC623F10F893D78A +:100570000CCAD7877C62DBCED4FDA395584CDEB382 +:10058000616A9C5C0274DC26067AB16E44DF959742 +:10059000D5037E4C8067AFF9941905674502755005 +:1005A00064CC9210257A8D229C5DB8827BE75698A8 +:1005B000CE1A6F9360A28BEE81D3B5A1EF25F49E86 +:1005C00039B833AA33F2D5F3E3CECF5491B25D8379 +:1005D0000E66FE874C92E4F59DE6C6C17134403745 +:1005E000BE4D19949FF7ACF0054195D44EDEE6144C +:1005F000EFDB5A31279970B70028946730A2286D35 +:1006000045CD4D88B30999AA60436D187A651227C4 +:1006100061523A8C1B511137C620B1352CCADC11FE +:1006200079C871C8C5C5EB7B530744678596337796 +:100630000245DFDB83309A3389ED4D941E54B3B00D +:10064000767AF2D4185343E66B47CE319BBC8C7656 +:100650004023F9C857EBA9F35F7230E505FD806CC4 +:10066000C3297C533BF4C984BC527356666A76B77F +:1006700059FC49CA52E921E9CBA6193DBAE836A08E +:10068000DF3DCBF76D2DC2E419FCE3A8608F1D821E +:1006900066999EDE540962BE460210FFA5A60F00B1 +:1006A00077E4717F9E3304FF52CC0B910A1B493CC7 +:1006B000D02275947387173C06DD5DA46E3A7C0FDB +:1006C0000F4CAE021544A4300FD2948F8C486A357B +:1006D0003B770014470EF1816927645EA3F6E65C60 +:1006E0009159198D6AA58731C12872D46A1069841D +:1006F000E84AA6B6F5E6D9F99D63ACE33FF659F6AC +:100700003BAE3E2EB004C5A52F852B9AD90CDD1724 +:100710003639757F9EA7825E119ABDA330FC66AE06 +:10072000E609C6A4CAE42A4666E4F830052789A784 +:100730001381B1A328B4EEC50AEFED45D0CB92F6F4 +:1007400012212F7361EBC9E060E55085D1AADB056A +:100750009B67754EF6578F7E529CD96E916A1ED854 +:100760005BC27CEFFE6CB867BDBE658B35663EFA3A +:1007700012BC5BC836B034A3D34C5ED64B3F384076 +:10078000D606EE0AF3F7BCA7E29B9CA4E55F268E93 +:10079000BA46C1749EA2AD73DE09EB2E0C2072BE68 +:1007A0006A39EC181EB9DCE2B1EA3E2FF510030FEE +:1007B0003FB57CB0CC84FEAB53382AFF39EBD9244B +:1007C0003468001110E6F3624359B1015FC7862D0A +:1007D000D5D6187878EF8CB5BDF2329F96FD74FAB5 +:1007E000DFBFDEDC161923D1411F66B7A91B72B724 +:1007F0008DC2513D1B22FD7222F36C0E5B4B81AA10 +:100800008F2ED310DD202812A6FC3A403AD363EC99 +:100810001EF0D089405C90E7B092B47B8D17F0FA5F +:100820001DBCB6341560D168D637C37AE7FFBE70F9 +:1008300008B3488A23581A9CAD8F88FE5357D8F4C2 +:100840007BA8C7B6DB21CA30459D4E7B029B6CE777 +:100850002687065121A2AD710484733A84D6CF8DC8 +:10086000A86CC0722224B8EABEC553C6A333D92FE0 +:1008700097F31CFD195953BBD7061E5BA51E10BF6D +:100880009DB679C24BAB14F474D3F8998D2B2A42E0 +:10089000508675E2C97470D1C60EC73F47FE39381D +:1008A000AF2E30FED0B743BE06D4ED55F9A67CCCB2 +:1008B000ECE03F826398A9AA86A2D9C7E415F91C87 +:1008C000106846A0FC1DD48D3E376DE0B1589FD016 +:1008D000211C470FF455AD98FE74DFCB8BC6FF8506 +:1008E0004371432854E65F9F698CF62F9572C2626C +:1008F000186E36DB1D03A7D43BCAA845055908531B +:10090000304ED69239A8489CE0D1279E527E5DEAAF +:1009100026DA4D24CBE7919A3AA7EDABD284C945AC +:10092000E64A4821B372FD5B4D41F9810B7A33EE03 +:100930007BB8FB294A3153B24ED4574358643FD752 +:10094000F0011A62CFEF005D04D49162EAAC56E583 +:100950006022BC86833F5B1045398BC0E9FB0BCD21 +:100960000AE232884ABFAC912FD74B2BBEE7BA5E62 +:100970002C17EAC3D8BF22F8C822DA2C4A77C2DA89 +:100980002E6B8996485A22AC50C0E76214E8444E58 +:10099000FF829F652843CC7257A439402EF7A99D4A +:1009A0001E776D77D1EDF7404317BBEDF97671CB2C +:1009B0005ABD018DCC5902E6054D4AB6064B918FC2 +:1009C000F28EB01B94014B46A1D699A7FFAD142A15 +:1009D000B196048C3831D31A3ECDCF84CDBB72AFE3 +:1009E000B408CEC381266D964540C4272FEFD08929 +:1009F00036EF53C9E201CA11D80431FD4D0924274D +:100A00001E2FE9B32C4A6E40520BA61EC5E8610C9E +:100A10003C6BE815EF4F5DD9AE4D1DE95DC6CE4E7E +:100A2000E5E36589B968EF31DF752E8BCFE1808D05 +:100A30002E5F617BB5FF14C58FAC9EEE25C1A50668 +:100A40002BCD36F18A40A42520F2F08C11486E009F +:100A50009DD695149C2B435C3A77D1074317356A92 +:100A60009F3CFB7262C5EDED95D197EE1D198F95F8 +:100A700003C3F97BD83CB870A5389B08C9FEC4BE37 +:100A80001B7FCC7F0F484A68C3F84BCB44D1B56875 +:100A90001C3D129303ED2951B648152829109BE0FF +:100AA000423B3E50745305AAF0F4BC8F4413EA4510 +:100AB000D8943901E4F2D0E6B9989DADE2289E7948 +:100AC0006EE7409B73B0AED14E7CB43725B794C26D +:100AD000400C628D8B966493E949FFC20F1E008C17 +:100AE00002219BE914FEAEA0CC9D75B939166FB8F2 +:100AF00094D4B4F77FCC8C90E11752B88A0B451C84 +:100B00000926DEB670D49B79DB5BB608CF1E2D4775 +:100B1000C2E723607C66561E2BFE9C92266142F73C +:100B20000540B9C0C628A9C3F0ED62BB53DE98DE0C +:100B3000DED9CFC531F3085AACC859835E71298517 +:100B4000C9652538DB799D05FF92F658CFA47188D9 +:100B5000832E1EBC055C56287B7AE60D81EDDA45B6 +:100B6000E9134C6D9F32640F9531C5539579EA674F +:100B7000A24795D730DF3F545F5E56007FA91B7BAD +:100B8000020717524BC03C6BF0123DBD4E37C0A25E +:100B90008F85EA4BC5A01C861BF5CDF2E9CDD2723C +:100BA000043D7BBD6362845C0981003FD8434FB341 +:100BB000601C13127DF43887F8146AA73B337A86D9 +:100BC000DA0A88FE821ED26F2083CF8B9BAAB5D112 +:100BD00079F701DDA2FC542DC043926E5F434CF8BF +:100BE000E5528C4EE1A07332A35EC81A849F54274D +:100BF0007F6B613BB6B3B136DADE46D7BF5DDCFA58 +:100C0000EB16CB6F2C289448A05A5D8FB247C325B2 +:100C100074CE407DC3D064460655ABD0A5ACA36668 +:100C2000DDD739CD1175B4A143E2974FCF236D7451 +:100C30001CF1EB741563F7BB2E44927393CC2FA574 +:100C400005DBDD4A2C4217949B2D25350BD5C2A917 +:100C50004030813BE440ABB8BE5322BCD6BD0A4F06 +:100C60001AE9CD177DF7CB3080682BC793176FDE5D +:100C700049AB2C2C76847F2C5BB432E4B0423E2707 +:100C8000275A2302A5E33BB370FFA1826B809E3DF0 +:100C900097A2C40975029403283EEAB746E4315D81 +:100CA0009EB8BE4D659CBD93C182886CB8D4BFFE12 +:100CB000506B84427C25166807FF7CE7ECF42576B0 +:100CC000222A0FBD76FBC472279DC173E41BDB4053 +:100CD0002E119E1855E60C92408823C94CFA2F4DD0 +:100CE000CE13726B4F792E7547B0EAB706E2E5AACC +:100CF000C52A759C8066AAD4470DA8D91582A0A8DC +:100D000088AAF38E0B400E4121231742370100922F +:100D1000EA60B319A1BBE5EFEBA91A727BD1A2ACD3 +:100D200024963CB0AE1256975013D599A9E2E5DC53 +:100D3000D68BD39B568AC8F0EFA27057AC13228093 +:100D40007834D41745BC1B208A3BB3A9AEA23644E5 +:100D50001222AFA0863384587ACA359D68A13EE23C +:100D60007CF394C0330149EB27390543C96A22C695 +:100D7000ECD16A8A0BAC6F476C3CA57FE4CC65CDA7 +:100D8000445AE1D3560135E8D0F5432BD64BCDCEAE +:100D900085CBBA949D7D64BDDE688EC788E91B0152 +:100DA000E0325A3DAD6FFF0988B072A28B6E7606B5 +:100DB000630F83FB5AADD48A7C89B6489B6B97C07E +:100DC00023C000A55C8CEFF61995AA8B95ABFFF8B4 +:100DD00000D4C16F3104F3C78EA708AE964DB0B1F1 +:100DE0007A1BC8CD4C753BD30C5B907F66313ACDF6 +:100DF000CFDCC2448B6B59E8E5D45576A357217BF1 +:100E00006954DD236B2F07DBFC9C7ED5CB9307B2A7 +:100E100088B0D45F0872F6667D4C69BF549ACBDB0C +:100E20006A79894A2CA11EE0812FF44E6EBB24C43E +:100E30003A36F40C1DAC4BE4A7D19A7B4B54701B93 +:100E40006801A2B5A6D5E5C201A7BBE5244C632D78 +:100E500084AD822E13B4762DFF74738392C46B110C +:100E600064B39CA58A7C52598BCB564D1F137B498A +:100E7000015E4C96B1684C9A0BEE642A0552ACF9AF +:100E800025ED790F441E489AF3207CE06A1274C461 +:100E90003007E4FD5585DB0CBD8A9285855C93693E +:100EA0009CA5476A47189832E3AB340C3795E9C0E4 +:100EB000F5776C869AA4265E48C6862A97F74CB9C1 +:100EC00013E7D7C54289097B371D9C02CB2E2671BB +:100ED000EF7C029CB400BFE108D197644B59967E29 +:100EE000E3B2CD90D4B239B3D18214CEE1E5D7814B +:100EF000459640BF3FF8EF7122E7C79212AAD0C7CC +:100F00008B72892AD9BA1D34628322F2C107BE349A +:100F1000CD49E3C3CDCC4E673A5892756672082A24 +:100F2000AC81BCEBC41E9886708A481DB3D5167E72 +:100F3000BE24584406487E8555AC362250F23E3ACF +:100F4000E930C33C468C788319FCE5293E57D7B37A +:100F500026539A6AF53B95C6C1DBBF2AC9E28E12B9 +:100F60000F21B3EEED6B148F8C905B5459B20CE2F1 +:100F7000753594B2253B4D7BC0D0124FBEF9345F1E +:100F800047B43B5D63321B18BDE2831AAC4C550E6F +:100F9000B0CCBD01A45D1ACD44F0A53DC742F67F9B +:100FA00093F6814C59272BE3C23FF6DE30C0E1D7E0 +:100FB000E273A76974CEDBB269E214AE950066DE17 +:100FC0009E9DA7273786C79D8C965F22198BFA6F47 +:100FD000518D073CD1E789D349ADBE09E29FE2C2FA +:100FE000AF24C4902C2C8ED0495D7DB25EAFF9C584 +:100FF000326E9E15C6924BA9E3332DD4A8D92E3953 +:10100000B93057CB3EC0C337EF38E566A3B37B6139 +:10101000A4849C083770DECFE17CAEE435227F7774 +:1010200022431C59F2A40E471DA537B0D494D4070F +:10103000C516BF26B1257117DF0C215F669BB1B3C2 +:1010400043DF595C97FBD37B0E8F9C49F342C0046E +:1010500069BE11A397C2679785EE2F49DDEAD7FCD9 +:10106000DDB732E4F2A1D7D2535986B63EAA43A7E0 +:10107000955A3FD2EE597D910208403F451FE33615 +:1010800045BE56668D26B5D98C8D85993C9A2ED253 +:101090009C258222BC1EF1D55F2A9D3A98F2E45B22 +:1010A00047161AD3811E829A0B909CB3316499B96A +:1010B00019785CEDE3084887DA1EB89858A087DBFA +:1010C0005BCAF69645A4AAB942FB80B678A578B269 +:1010D000966465BB7B1F9E1826F441D19941D74C7D +:1010E00029B0299764445A5DA7C8215DE5EF38BE51 +:1010F00032C19DE08B1376129F8FB3B833A71FCCFC +:10110000670963B1F37FA388BE7E0FA171B65697BE +:10111000C7D0D31E5C1403648B6C631D89E42EFB63 +:10112000BCD35B477DCF77BA8586FE702D6181B5D4 +:10113000899D40B7C6C88036CCA71D22F711C2488A +:10114000A3B5238667707AFB86CC109965E70D9965 +:101150005B30A609E5A001476E58142AE23B65D230 +:1011600047325D2B219D649987651D0AB394D6B4DF +:101170004B8C8747D4E1922587D506DBDF7D06EFD0 +:1011800026935D15F3D17827BA3DB0F420363A7630 +:101190009D3EDF3E8F06AAB85027C2B60AF611312F +:1011A00052CD668D00C7FA0C404FE0939E9A8DBEDB +:1011B000142ED1FD7199B2F75FE420839245694204 +:1011C00007D81B25CBB777B865FA00E432A9701EA3 +:1011D0001FDBD4DE51EB30CC61FB5E3000399B3439 +:1011E0004E68BF18D04DF1147305534944F1D81718 +:1011F0006EB3E5838E549A7FC2C6ADC8E51F9D27A6 +:101200003C5B98E48A52782637388BE1F46CBBDD7E +:101210007A4F728885D9F24E3F2820985EAD8C199E +:1012200039409EC104B4B2FA5E18F6858F5296E337 +:10123000E5B7E9D4C083F9168630DE2F028DD3F4EA +:101240008FE1364A591EEAD22423CA40CE69994515 +:101250008635F998CC60CFEF5F95F38B7957144CB6 +:10126000B6F3D0EEA65B66A26BEC619B0D1B2F74F0 +:101270004D658624FA4B1004FAFC91E831651CE1B7 +:10128000321BC891F4CF3829174DF8DCE906CD1789 +:10129000A65A0160DD981E33DB64623E0A4AA7C984 +:1012A0008C48A768E804A7F8B461297206A1A90FC1 +:1012B00010E860FD7338E2FF7429658A7C831AAEFA +:1012C0006A7253C03A5C2BDDDC37A237430B532CD8 +:1012D0002EEC7F44DF48509952656E7B64B178EE06 +:1012E0005F7339F7A4C443A0D26D2D5AE9F89DCBA2 +:1012F000656BEEBF86F8ABDCDF698288C1C1D8A11F +:10130000594559FD03C262B0AAAC88BD92211CB7F1 +:1013100004E827CAA161745348079D18D8810E9527 +:10132000F7609B5908C6551F494111A179A6D11BE9 +:101330003D21183768C3295C9203AB39C17E66E64C +:10134000D15C2A135C5C0C658A347D135FCDE47B31 +:10135000437EBCD8AD4EDFBDD875E640B3400D2905 +:10136000787CCD51F50E048A3CFA39E00AE174C26A +:1013700003891DBDE0458442888C33B303708A38ED +:1013800057854C6D22A2C1B1D2827EDA872A24EC25 +:10139000EC3EAF1B48FE25D0118B926601A52217AB +:1013A0005F0CFDAE300AD40A5138C3157F8BCA8753 +:1013B00045D5E15EC30AFDB08E2C0B2CDF0CD8C1E5 +:1013C000C269EEA3C0917E00528705BE49723852B1 +:1013D00039FACF0BDE3AEBFAEB836B6FE2709118C0 +:1013E00093018DD496E29F67D2AF3C985B66F9DD9E +:1013F0009D183A706C983AD64218429E824D406FC2 +:1014000077066DB58C6D23EB26C9B243B989EC51D3 +:10141000F002BF3EAD6B53CE0BC71F43AAF0603D39 +:1014200078990C1273034E26CA22D66F810938F7B9 +:1014300051D5A1CECC1BA1F792138946F05608DDF9 +:1014400005DF422E5ABB87004F652F7FA4CF18437C +:10145000B857F6377889F7DF5080F0F0047D3A9B73 +:10146000F10AA3CE616B29FEDC80CBF760B59FBC8F +:101470005E369E0A22E6696B1DA70B3E14656491D9 +:1014800042AA96908E3F32018B51EB2559AC5B9965 +:101490007E5D7A35D076F56D547A6525E25398ED08 +:1014A000766D874D5A79E2622B5757028BCE9E3864 +:1014B00097AFF93C9DA799E22CD6F8E1FB21B52521 +:1014C00068B7999285BD23E3FC2C09EFF3E859DB5B +:1014D000D27C82AEFCC86A4BF5359FDD95AE1D21EE +:1014E000ED01853AD062F100DD92DF6ACEEFB0AF58 +:1014F000CFF503118C07EF3904D7D12157B23DB294 +:101500004AF64C93D9231C9D640246C699BDC8F186 +:10151000ACF770069E8315E4A086C441014D6FFCB4 +:10152000D5BCEAEEE432A78EA4DB2C4DFAAC1F3D0D +:10153000A03E8405A4E0F7AB63EDB4C7DB319DE8C2 +:1015400006919C4D31FA632A74E843F2BD78512923 +:10155000B076EC789B36D983377F49729551B5A820 +:10156000A4D8691B1E241EC0A341CAFE40A459E290 +:10157000DA8D367DB66A8C5A0AD57F67D6B58EDC91 +:1015800057FFF178DDD41F4205A8FD7004C0C4F8F0 +:10159000462065A464245144256169E2B42E3F4B82 +:1015A000AE66D89FC00AD590546E249CFF1EB0DC56 +:1015B000FB70610D90B2813A6CD56128B6C29A5029 +:1015C00084B05DDF7CC92A25A911151603B03871D6 +:1015D000D1B94FCF81601C82FD4EFE150553EFD06F +:1015E00047E24BAE8B14334171122462FFB4CA8AB6 +:1015F000EDF0EDBFFE5F108F95313B9905576C6A9A +:101600006823BD3CA1A08DE27724834D6AF4E925CF +:10161000CDDC202344D911B5FC9F2B9BB1989E3281 +:10162000085782B4F6CAB2713718DF56E59912949A +:1016300011A5DE467A86D7EC2FA1C10D4E5F616001 +:10164000482FF4B228386B384C3961F748B2050896 +:10165000846541331EBE2EE30F71AAEB3F02B3CD6A +:1016600025C87DD583AEF0B3BEC9B37CC4D2FE1508 +:10167000F15B690A72535E1A9600832F365FF2742B +:10168000ABAF11E4AE9B1048605DA4E76E2FACF7E2 +:101690008AB1D15CE3281B24570EFC58875B6C4E43 +:1016A0001C23859D6BB883EEFA46CDA80E76731B7E +:1016B00096142A6C080278620CCF272608AC155DB8 +:1016C000BAE4D365C60501D9207E554AB83599D903 +:1016D0004290AEFC33BEFCFC025A024218751A65F9 +:1016E00015545C10C68662CB02818F73BDE85271BF +:1016F0007270837E2DA47A3A38DF80A6F2F3FA372F +:10170000839CB8859933B0D8152072063BF0FE5102 +:1017100022D7F69209225D49CA1110D736E21A354E +:101720008C236EE86D165525C2381A800D94DB1394 +:101730005BF72C07E877F1B03B7F6B927F9594269F +:101740000CDEA3EE656C920CC1A25E257EF6B3366C +:10175000C441D6E7223992AA1BCBB87BD6CCE51F71 +:10176000E9C574F5B78404A1A3C5AC66D0917C2803 +:1017700002C3BA8C92F9A97DAFFCA4D1D5AB5FB5F9 +:10178000AA7DE0CA74DC05330B7F9C38AD8A33F444 +:10179000F1FFD1401C44098C496810D240D37D58D8 +:1017A000FD14EBBEAEDE9741A28BFA7E668B556CC4 +:1017B00006A0DF45D97331B3DA1BA518FCF5F8593B +:1017C000B14A4E010F292CFFFED9DDF6D4EA3C3A8E +:1017D000D962DA4F7688449E45FE418E1CADD9F51C +:1017E000C9F06F776E993B145BC80C4D561AF1D255 +:1017F0001FE7FAFC9D31FF4CBF1FA010325B5C86D7 +:10180000BC1E51642C78B513715A8C21095C152DBE +:10181000ED470A10E6F1A79BD612D24BBC6963E1F3 +:10182000470E41093F2DF25B90592AB2BE5EE1F5A9 +:1018300090799F67731270D96910E8E9A2314EFB65 +:101840008A90F2D051ECC5F1FE8A914F8FE793FF59 +:1018500022A87DDDF3EE876ADC5D94AFB53C5900CC +:1018600073C53F9F0EF69387EA45DD00DA744FD9C2 +:1018700061A49C49E82259ADAFE0A3F163AD87E8CC +:10188000B1A29258C4061DE39DEB1B27886F1D1162 +:10189000A0E172030632ACA972466833147A5DAADD +:1018A00051F3C76E4E1D9B7D3AF401942DE6C8BFDF +:1018B0005E38890F0D1220A47421FD0DA292C67509 +:1018C000C8CB0465874AC3E118F1060425B4A33FD9 +:1018D00049241016427E4BE646643C6D777C43F605 +:1018E000DC6D79D24106CE71996886730949BE973D +:1018F000F45E8579CF0201917D9A41A5F4EFE05124 +:10190000AAE01E943F7A56EDF7BB7CF0285FD7C360 +:101910002CD441B068FAEE042DCFAC8DD2CE240683 +:10192000AD462EC186CDBC811B5FD3CEBF3BB3BCC1 +:10193000EBEDA06379F160A2E7BF413DC7B639F294 +:1019400007CBCE6505C2BB775A7FEC604BFB73E4D7 +:10195000B9142A038B8984904722BF413819B27584 +:1019600063E4F418AC89751F341D977835EB0CAF20 +:101970001A0FA716060DA44834D243EB4EB998317E +:10198000B24785DF85105D117561C33C2BBA0C45EC +:101990001FCAF493CFB49608C92F3BE72CD1624DF0 +:1019A0009BA562DCE6C569D654DD8C5DD44CC223B0 +:1019B000E42401676BB928B95DEAD12A5D8CE8643B +:1019C00060789ABD84B8E0D8810C27C20E7AB4F44E +:1019D000780B94F87A42AA336701E6125C3E72F7FC +:1019E0002BE636A70D54542D566D6B4C06AFB35FE6 +:1019F00057C3B70BC45EDF91130DF0CF09C3B47F9B +:101A0000AA24CB665897A2A50AB5B826CD30E974AA +:101A10005BB262BF3960BD432A06637438439BB52D +:101A2000F77F4FDBDD9E36A7069116648ADCB6B8D9 +:101A3000D6E43D6D4788F2CF6FFEA492AB14624BA3 +:101A4000C791C3E08B0162D4D560C8483FB532B0BE +:101A50007230408548116750270616F73585F552D4 +:101A6000AF1FF7DFC341C83F9EFEB7F64A884572F5 +:101A70002D2D3A1706F8355F3205102228F2F6347C +:101A8000FED26270CC0143767B66EBCAEBAFBDE45D +:101A90007B95C819454E3AB7EE5DD9CE3B884FA12C +:101AA00007BEAB1E5911FF1FC62D1B78F1E973D27B +:101AB000A604910A57A9D68B305A571EE1A9BBBD7F +:101AC00052AD62DC5DACE00003CAAEA653833FF8C2 +:101AD000AB322B90A5CAD6F5B67DE8B578BA8A2880 +:101AE00042D5D2C4163A01C6F739E7E2371ABBFB32 +:101AF00016A7A579430AA68FA473822A25919EFE74 +:101B0000D3C4938319F0B27380A9E89BBCA8246B5B +:101B100020487B52B947D9D1C8E7F1721738845EA3 +:101B2000478461063EECBF0ABF58FDBEE922E1FCD6 +:101B3000CB7DCDBDCE62F3DAACB2823F7F1D3D29B5 +:101B400009F37AE32298453E39BE3ED86081424887 +:101B500036A18BB1394FEBD8047AD54C9DC555D6FB +:101B600033F6A77C72BD084DCF9D518EE9C47B47EB +:101B700029ECD23FA944522BB21AD5A7DF6A80AA1A +:101B8000DE6D9EDD3AEF2E0425AE8B345BA1C7954A +:101B9000516954676A614CC5CDBC4F0B84B701C015 +:101BA000753F354B1C2FC7D6214C6FA70F65AADA9E +:101BB000282D85802824A343F6642AA9A5AB7B366B +:101BC000EFB6F31052F178AA6CE2E7A47602E20EC7 +:101BD000F6E239BFAC233EEA987E18C766A0FF093B +:101BE0004EDC0ADAA048E965C8820F4AE245D59181 +:101BF000790577B03DC51DA4D4ACD9FD194B41285A +:101C00003C8063BB5F0DC01036BB660FE2B9CB7082 +:101C1000FE6EE7599636F26CBD7A90114226D39744 +:101C2000F4F9D1366E93EE790D34C73D18CF5CCF01 +:101C3000F88FE8DC587620D5F398ED3F8A0F142F03 +:101C40001C473C433D90C45C51DF3B5884EE2EA3BF +:101C5000CBFDC1D4391074CAA419BA8F9CE443DFF8 +:101C60002D1C184998CF937AEA2A40E3364641E979 +:101C7000044D63F80340EF2E7FEA2B110830D35B4D +:101C80005EA561893F26096A241436576485D610FB +:101C9000A1A801AB1628E603FF7512D807FB6996C9 +:101CA0003B13F35DABAD2AA7AF9D81C62EE85ED78F +:101CB00090E64518CB88C8E0944DEB507ABD4B5266 +:101CC000F2C61B4A84736C0CD08C0A24E06032800C +:101CD00083021701A211C3CE3E10D2B9188F47BBA1 +:101CE000D242E021ED1BB6F54D73458C8A155301A8 +:101CF000123F5EBA22E0AB0FC800B67A2BA6BF290E +:101D00007BBED643DC4F256D9BD33F04E1B59E617E +:101D1000C7989347A5F2D87138DF526E871D764376 +:101D20009A0CD780C8DBA8945709F39405D1E0C872 +:101D30008DE269DD1502944B5953B21D17BB8274B5 +:101D400028816FB04EC9202F56B943A4E84E4A658A +:101D50008DE3FA87E70637A33B89E298F9B059FD8E +:101D6000A88FC6B71BE2383074B4AFD2C570C9684B +:101D70003DB20A9F01E28CF084EEFE051AA0032218 +:101D80000480DF95CF6E8336FAD4326644D5E47A88 +:101D900079B91D249CFFE35B6AA2B436591787A862 +:101DA000471C303780E2701A0C147EF0B81247835B +:101DB0008FAB346ED5CE66D2F9AC0061407F951BF7 +:101DC000DD24C8E8BFBB86D3FAD54D119DDC89D18F +:101DD00067EE90028A0AB1FB3F1187EC27E7616743 +:101DE000D82D0794F1389860DA11ED637E71891B64 +:101DF00080CD15F4BC14A6E2B4CCA02A91931E0C9D +:101E0000E614D8C587879237D41010C1A8DBFA3FF3 +:101E1000627F132D0F5B2FAA30938CC4C221FC2943 +:101E200033CDFE1EA2FA63CE0F10E692709C5F21A6 +:101E30009C0BADC454A41F40597934447F8C752247 +:101E4000EC1162BA5C626619C8BA465F682B6C26F0 +:101E5000C8C23CD2A2D1DD1E58BF47780DC2F9B02E +:101E6000442C5B35A37A7ED1F18C7B77987DC9E8D1 +:101E70005D140045A89A8E58AD10B1742EB672F15B +:101E8000926D745482D01D01248BEC08322EE88FA1 +:101E9000B77FD1F3ECFBAC9EF520E284686D42B6CF +:101EA000B1D948C1B52B99F7E02D155565257A2094 +:101EB00070B6A03646943715B4028B20CBAFB2FA79 +:101EC000BD3273B1A376523427AB8C37B52FAE3405 +:101ED000CC156E5C0FBF6B254E006CB8F2D8CCDF12 +:101EE000CF7BF28DF348FE5772166EAE72163FFC32 +:101EF000C487E04F22BC224A0C37C93EDC0273D4AF +:101F0000DEE2E145CC243B539902D356C38461FB06 +:101F1000744D51855726717A39866B655BBF935D29 +:101F2000E6001781050B0001699B90FC3B5F1A1AC4 +:101F3000880B449D04BCCC31AC04DEC9E5D9834296 +:101F4000137F12C4C7D9F8ECA00413030CDDDB0027 +:101F500019F43D6730A266354232E317FFA9DAC9AA +:101F6000630960AF15FB433469071844453AB21F53 +:101F700078A6CAC2E323CD2F4F08EF96CC77057120 +:101F8000DA1B51439E6DE10C0562F3B9C277F4345C +:101F90004929659A017F9599951395C9146A6E8BA5 +:101FA000FC0717911293CEA75ADDAA2D6A7D0F392F +:101FB0008737BF91EB6B80E8D0F21690DD8B595DCF +:101FC000407653B5C1000E534421E477877390D116 +:101FD000332063779AF1C0BDEBBDE59999DF4C6A78 +:101FE0005CED89C41D5472C75AD585408CD231EB43 +:101FF000242767AD3A85D8090036A3EDCB454ED2EC +:10200000463BFF4BA5FC58AD449BD2019F482F7D1A +:102010002DC64FDAC93C5FEF6E207E8D54DC596CC3 +:10202000DF1A74DE96A7058120FC10E71E54ADDF91 +:1020300047C963680937C05FA00B690B5DCC4C765C +:10204000388C85FE153445C41E7A6009C7215110AD +:10205000D23E59009155933880254172C45C9986CF +:10206000B07E8A762F2C1D9A4EC63498088B908E9F +:1020700043D6F10820A4648A56BDAB5B2E6E60A4E3 +:1020800005A00FDB393E5AF1ED418B70308196D9B6 +:10209000ED629564589F63102F8E50DAB637F17C4D +:1020A00009FFDBDC26664FFD6882B4FB1A661CBDA7 +:1020B0004B155B47FF71D8A1335A87273DF6114B6B +:1020C00017F581B2457DF7DF5CFC2172EBB213F0AE +:1020D000A6BD58707E889FB497D3460C38414659A8 +:1020E00090D54ABDF0A0BE737B5F7B2C363D015D71 +:1020F0005915DC4CDE8ABACA342B8C2992033F4B2B +:102100009F25339F4357CDBDE720C61647EECF45E9 +:10211000F78132CC3BD1D0ABFEFBF6099859D17098 +:102120000A8DB885A1D96D7BA3D80E2B030B525510 +:102130007D5A0D6389E9CE899F2D520F34678E72C7 +:102140006CC81DF2C783E5D24E3E96DD41CCB42A61 +:10215000E2F3DA5DE2CED81C17E3F958C8090A9514 +:10216000B6064C8D6B99EDFF7674B68FBD3CFFF6CD +:102170006D06EA853FA94F6273E4AF685CCF49E121 +:102180004E3855DC3954BC7DCD6433A6B45A7577CE +:1021900090C8A8271AAE6F99FBFF25476540F8A3A2 +:1021A0006CEBD55CC62ADD672F2D8E152CA8E905B2 +:1021B000BD4F34302FCC66EB9D845D69795A90EA2F +:1021C000C735A647601D3F03417BDC95A098438D32 +:1021D000D19A138BC4A6C34F2F9DCFE1E071563C1B +:1021E000B685B5A16D3DAE8AD9623098436F555F13 +:1021F000C85B096E883F7399A05627ED1BD490BE2B +:10220000B3126BD6D999E8714F19B697CB46FCBB80 +:10221000480008C506F8DDEBC39CD0CEA8B0D55960 +:102220007556E5393F93C1E277A042B9BF29D584FD +:10223000F1ED319BDB34B3B3B17D4354D2D4A04E26 +:102240002B07FB1BA3D1981A74B0A5F16B5B252952 +:10225000561F7F914D9B049E9C30E4AEEE33CF9B86 +:1022600015CA1C0334CD681ACCE439EFB88528812F +:102270000F607371140BDC001E8AE4E1DD145D5DF8 +:1022800006FA0BABCCB285167BBBCB54AE461648D8 +:10229000515872FC45E497127907C983A9278F3BEF +:1022A000EC7330256387D1B88B540FC3A112C5AF2F +:1022B0003B4E74BAEDB841F7BC4C44DF47434690FF +:1022C0002CF865795F5FD50CA144ED158C2FA4DA4D +:1022D000F96CBADAF21F9C0B73AB79CE2F74587578 +:1022E00002F1334D55269417E1C893839C8605412E +:1022F0009A03328BEF4B10670C7E9A072F2BA4C7E3 +:10230000E01049046C20F9BE02A529550238A5F059 +:102310002652F6C1FD11E669697198014BD15FD56E +:10232000EC9B2EA806E8D34C33379932B8F7DDB5CD +:10233000858599DAC937DEE7B8D5E09E5EC83F7378 +:102340005C9AC5F2D9284F387B451C7BE183B636B1 +:10235000E9313C14978177CBD3F0CAD20909262200 +:102360003E06852D9A8EB156458889E8C67C3C6A22 +:10237000F7D34D07D6A921A6BFC811A3BB29E4589E +:10238000906A3C374C2609FF6E4B452EEFF69A3685 +:1023900038865A960936DE5FE48328B20B5B982CA8 +:1023A000FBAA5F891DACB605E7C4A040A9C675A607 +:1023B000A974D19321A34156D0C8A64204B47D4E3E +:1023C000C499F28C2E2D7F74A2015618CDCC69A32E +:1023D000A2B22F29DE3F2D57767DBD55767421ACF4 +:1023E00088BE1B5F740893CB213643B8393014C1C3 +:1023F000CA423842C495CE7B8F515B60A47864FF9B +:102400006D08A4CE738F369F57E5BB995E308F3928 +:102410005C96E4B6BCB8B615DB5002DAD533D029E9 +:102420003B19BA6F64038247B0F3625FA429A15FCE +:102430003D64A0F3FBF1622BC59735B991902970EB +:10244000E5C5A92F529DFD837E0FA1792CC3ADDF79 +:1024500069F58B91D39533B35327EAC37073C321C6 +:10246000014A1125B8E843C3B96A22FE0DEAAFABB1 +:102470004D0CF0F7F63C44EB0FD495BEBCA162CEF8 +:10248000D72C22E805E35D53CA780CB0BAA2F196C6 +:10249000D918188B6304C9BA5717D3F6BEC9573D6C +:1024A0005E1A75A614FE12667FC08C0D00F3F3C38E +:1024B000EBB44A9BD0DC1E46783F5B5B4EB7099677 +:1024C00043C8FBF530C7923077F66C03CBE2C8ED1A +:1024D00057EA2F8C1EB8EC42C33CB75019A8100520 +:1024E000A2CF118F9C1A6B1924C6FFFA1280D6C195 +:1024F0003D3E2A0A5232B9790910E1201B5F26C4F9 +:102500006CC9916288D300FF75B35EE9A1C403CDA5 +:10251000D65D86204B56103C4987C5DC1364140DEC +:10252000226B270A03DEA8441DD3AB2C31B7836A84 +:10253000BE05C78F4CE78E6018AEC0AC5194E6570D +:102540000F0BE9A426D15A582B2E1AC7F2C9B0ECAA +:10255000711E8CA7A0E96512FF8734ED9899DF2DD5 +:10256000BAC56463549151B401875B14FA99C68C5F +:10257000809E7C003B4B3F05A157EC74EC670D73CC +:102580002ED95BE0804494AE6A1E3681283C09D186 +:10259000482F61F193B4051132A36611F691AC2175 +:1025A0009E9EC36DB85C07DD44813CFFF0612C1B2F +:1025B00025F9554C34D9990540FC1D95995D1EF5BA +:1025C0008643859A09F9D58A54706E3A437A3D6BF1 +:1025D00013353E4A4D667046C8D6261088DFD07A3D +:1025E00083A7F54C2694DE075B2A7BCEBA9AAC848F +:1025F0003F228FB3BF71DCE48B8B904A5D297168F9 +:102600008F15CF5083C4E48047161876CC6B5AD907 +:1026100085C1C05265E70F88D69FB277F1A959C727 +:10262000EEC1C2EAE53408AB8B35DDDD7C3A13A29E +:1026300056376601A5334A49E4F0199169CE8B33C8 +:1026400018BE508602621481B16BB0F56D1D001783 +:10265000C3836E867F3D9559FDD6A0F6EC78EE0BD0 +:10266000353D280A02633031E585EFEE2AD4051E98 +:10267000952B72A6BBCD30F8090F1CC3E943775ADE +:10268000224E7C3792BAADA588647DB3D2E87E2A0B +:10269000BC8837C54FD140482F356CFBF6012CE77D +:1026A0008E9945451472DA749869156FD3C25DEB43 +:1026B0002A8497730646FFA46A421579C321D984F8 +:1026C000F81B284DAA5441B2E797D67DC715451689 +:1026D000A6A7E7D7A88F53E9D193DC5122956FB510 +:1026E0004B44490BF77BEEEC7B43DFB26137D5659A +:1026F00021966088F5FBB57AB2973C027682E1A616 +:102700009DF51F9DC0C50558807836DAD64C794EA8 +:1027100005D1453A1C8E23D824806421A2D690BAD4 +:10272000AEAAD35E910735A04F9DF63FA4DF006DA2 +:1027300091EF5518E583A51A2414239537888561F0 +:10274000D3FDBD12014240D70661F836AD5C6DADD8 +:102750005F7C5A43E15DB2DB32F0762E9B9AB63253 +:10276000C1F66E0A7C320C00773EDD0509DF45526A +:10277000CEEE01044442601C9FCE79434919DFAB81 +:10278000E8E9ABD459FE41A14B76BFDDE2B0A70921 +:102790006241E1050B508D49E2AC9805C9422676AD +:1027A00002A8B5F229F76BB118881E7ADEB469BAAF +:1027B000416181BE6E1F212D7467B1F211546DA568 +:1027C000AC0F1A69FA7CA41770ADB7A4A9DB695ADB +:1027D000BE1F486BE6D18602E335093482AEF3268C +:1027E000DBFDC1B157F92A08255565D9A630FAECA9 +:1027F00059A4AD988B1DA53DDB27C2891A91585C61 +:102800002D4FAD49BD450F2A79634EACAF51014AFA +:10281000E959B43085A15080F323A10519555BEC2B +:10282000C8105D948C5E2F898EC424A8E845F34DB2 +:1028300074F848F11431BE9CA441BEFDAD1D922C2C +:10284000B2522665AB6426224DE21BB59AA0333600 +:102850008555C1AF3287C90EB35374E2D557EB61CA +:10286000DD59E4B82A68A6544BFDE52E45BF621732 +:10287000744981FE9F8F5868D2CD6527B01E19809C +:102880004B0A53BA65F80D1DF32FB7565CE1B763D9 +:102890003A75FE27A3DFE17A6E48B737B8768EF433 +:1028A000503F14695819D483CA5F18265006B2E302 +:1028B000B2C9B3435362A017E381CF31599A2FF4C1 +:1028C000003A83C3417A8C2A43F593AC23A731DDC8 +:1028D000B869686E7F78D576AD1BF345C810161BB6 +:1028E0006DDCE61AF9ABD281685CCA609334356C52 +:1028F0004764EBD423AA61B857816AB9FFA7286758 +:10290000A418A264BCEFD715D00B69CF8B51720C01 +:1029100006182F1483933A4D1651B77C1DB28E477B +:10292000ACEBCD1E95E192CCC43A0ED95F58193864 +:102930007B1CBDBFAC1A2A17D77FC874080B56D4AE +:1029400069B34C4D5FEF4FB86949598BA5CC19BCA1 +:10295000B493C8F9AA235FF3AEFE7FD71D5DF1C51E +:102960001A5AB3DE86192668DC8B67FD5E8DF5B4D6 +:1029700042187B50B4CE9231EE43DA11AA339C1147 +:1029800031363938572825244B676E1D5E0E08F7FF +:10299000D761C5D7B589E272D116C9429E8C57E47A +:1029A00028309BBC0F3DD3AD57E21A90EA607B1CE8 +:1029B000FCAF8D9899BE3C2FC35C6E4BBFA9AF0492 +:1029C000805D0F2353B04E6D9173652414DCD8E302 +:1029D000D1FFF5D239BFC02943880813F8D4203479 +:1029E00077BD320555CFC933A080349BAB5E4AA575 +:1029F000744BCC7D40989B868D9903B6D827DEBC5E +:102A00000DFF2C49EABC4A17E229B8DB94E4CFB4A5 +:102A1000DFD9964982A63DC7F61F1E3F3FD675B146 +:102A2000B73835DBD2455FD47B54604FEA01791269 +:102A300092BEE812DC2F1D55AC4AC1B1CB8731C024 +:102A40008E096D22ABDFE5D9358F0C8C7D9BEF9520 +:102A5000FAA445B2D1660F723F2B31BC1E1D669E93 +:102A60005A7393443BAC5D99F5AA8473F871BD5BCE +:102A7000B2A779EA60B8641D4A1FA256BF0E971923 +:102A8000C62F79A132D8D69DEDDA755155A4C5C6A9 +:102A9000444A8D322FDC1DBFC9FB10A80D1064A164 +:102AA000945A31FC723C3B34A8D30502C900F4139C +:102AB000C9548C8E6175011E336C98F0FAC0328057 +:102AC0005AD578388A3C16FE162870585B1F2C0998 +:102AD0002577E069B358E94F7AF72F303B7D22051F +:102AE000FBD2A7FF757EBA218DBDA92CB041E2456E +:102AF000BE5699445DAFECEDA12B079A60BC2FAD9B +:102B0000BA340A421925566568A7ADF2F01D795E00 +:102B1000CD46564221FA05B8BD89C3140A1CBDD85A +:102B2000E03EF397A04F68BC23B8C96AE98B432DF8 +:102B3000AAB091872EA634FEDFAD5A1F38AB655C74 +:102B4000674F694F9A40671E7CE7704A94A9DC9DE5 +:102B500050D7C343B3654D961212EEC743E419062E +:102B6000B70C4DC8FFDFAC1036144E05632894F83F +:102B700083C7E6D324523D25C8C04EFF5651CF75BA +:102B8000FA77CD3D8B45BEEA6BBDAED26390C811DE +:102B90007BA7174CAD5841C0C18FA3F4AD0412916F +:102BA0006C07474EF704DDE74BF13F8C39825EC975 +:102BB000F07FF09AE8FB636CD28F5D9A35EBCA75B3 +:102BC000455D0ECA194FEB10CC69698F3EB50128DF +:102BD000C88CFE8C12551D458739C9CBA07A9E63DF +:102BE000BCB54CD7C1459BF92702AFDF5D73B81A5E +:102BF000538943DA43B77DC08C64A149DE84E06B1E +:102C000097D9C1C6E8053339CF5BD704A1B467B7FC +:102C100020C15874850FB6DA5F1BB62BF7994AC9E5 +:102C200009C3DAAE2BF23783FB8C53ADBDA93DED62 +:102C3000E1FD2899F7C80787E01CD41B2012F3C2D6 +:102C400079501D3E5C0FD39E3D79AB52ADBE880FCF +:102C5000CF567D64722DBD956CFB3C7A9CFC50AFC9 +:102C6000830F292DF4542B002AF69CD09C5CD71C92 +:102C7000A8BD5118F9E0E2101AED799A2C36C8284F +:102C8000810D26027D7F17BA6F6CF9530280E0290F +:102C9000E0C012D5DDC53CA0927880E417D0CCC04E +:102CA0007696DC07D53EA41EC3CA6D7BD150674320 +:102CB0003DC034145CCB00019F7C3FDACBD2E30FE4 +:102CC00077CE2521EB027504B37293FC3E146EC3DC +:102CD000829BAB0520FB833374271EEFA94AD7B232 +:102CE0006615489AEE3D71786C9C1FCC5A8FBF6276 +:102CF0007A0164C3E7874E9E5EE2860D0F09CDBB65 +:102D000063357D4695FF320D38E05E1C88D7C523BC +:102D10004DBF481436AFC9337F11CB38638FCDBA5E +:102D200006CFBB6CBF12B8D33DE675D53C5F623CA5 +:102D30006CC061A79E78C76F2EE46A4824438D1A41 +:102D4000B6541897A976A1EC8F9FF731E691595E9A +:102D5000665D7F356ED415F753665059E3683B7D49 +:102D6000B1B3FF9A6A41AE67DE92D795F8DF244D82 +:102D7000EBCA3DB35478867901A8A6CF8EB73154FB +:102D8000613B303C9C778AF1E52A43E6DDBA0FFED1 +:102D9000ACA9E06C11477E0613974999864E3BEB30 +:102DA000073EEE4782319E621BB85F0B91920A8606 +:102DB0007E4501666B8BBBFDE58E01678F4128ABBD +:102DC000C6BCA0DA9C0E53E16D61EDC825DD6E2313 +:102DD0003B2413D82DEE67EEBAF7632B1626831922 +:102DE000F244D1EA79A942EF763ECBECF39C5C9CAD +:102DF000F003852E81A76504D29D45E1A17D1E3893 +:102E0000C1D80775795FB5C5CFDC1FA4BC54F7AB3B +:102E1000907E302D4A2CA5A3A5DFC7D539EEBD5431 +:102E20001E3E4A1C4D7BB001D18A0F959ABCA50F5E +:102E3000BE7B320A178C0505C3AA541F7627A30749 +:102E4000B4D9D573362175E8CF1212138EC6A206F7 +:102E50001003374CAA50122340B9C978A814BA817C +:102E6000A9C48C9AE662F82E9D8ED3D0711FD6F23B +:102E7000F1D7B6C8D47B7906906D28EC5BC4B7AEA9 +:102E8000264A723CA1492A0A749E2D8A8F8BC5B5A9 +:102E9000EA47CE2DD88041BD82203E624A933881D8 +:102EA0006F7A375A3920F1C6E4963647448B731A45 +:102EB000FA685E55F312E3436F9E3AFD56C5962EAF +:102EC000510F704D5F76BB646BF3B226C97D12FA69 +:102ED000EC103D581A1ED14483123C16123E9E53EC +:102EE000B84554E1E4323498BB0EA6C9DEA9B50555 +:102EF000CBBDBBB52AC3AB6C5272BCB2B6F5940D58 +:102F000000D917A62BEC9B48A1BE4E4BC967BDD973 +:102F100033E16EAC245F8BC592669571123FE5502C +:102F20004E421523B47E0D3F8E02C24BBB08546C3B +:102F30002611A7668E132CB3222AE2C70B8FDB97CC +:102F400082A3D851793809DA03F655773E0852AA98 +:102F50003E6996716B9E1F98B4753C946A2F3F86AC +:102F600063A651EDB0813C49961ACE1954BA82AF8E +:102F700044EEAD85F44D0684FA95215F4B9AC9A2C3 +:102F80001DC2941A8945E13BCD6EBDD9A036C3E27E +:102F900036791B5DE870E5CC871FC973B3A23FAAE1 +:102FA000E5DFED52E13FFFB193D838CEB55B4A691A +:102FB0009F4CB7EEB1D09AC73EF7D663DB9EA0B167 +:102FC0001C1E2C19BDB38A7016EDF2B42F07B5483C +:102FD000E639D63CCA3AC38654CA284C3322A9B62D +:102FE00050857A82573BA6B6946ED4A243C3DA6664 +:102FF00001E28EF886060D4A90FBFD44FBF7288E11 +:10300000D6538497E0F8C3C750A1226C9D39BB60AA +:103010001832AA9C61621FAADF4278287DFDDB4836 +:10302000A6E1FC249309999822D396218BDBFC948A +:10303000A3895DE61FB04BAC122D62080423153541 +:10304000E615EF6987148CDB8C21001614F4063F1B +:10305000DEC4B9EEF0BFD0D682EB8C52072B5DEE0A +:10306000DB270EDF93196D9B46B429C2A81DC71537 +:1030700084B4DCCA73CB664659F278AFFC0D5C2A87 +:103080002D11D6389CBC47726389E5BAAD3EA8F8CD +:10309000786525CC548A6CC5266A025919F7A42094 +:1030A00024256A333F27A25E0A08DCE9584EFE5603 +:1030B000F2E2FD330C954EA670B14549496BE587A8 +:1030C00009CC700938A0FFF0165A3589885ADBC040 +:1030D0004428BE09F81036D9D2BCB32017DB5D32C4 +:1030E00042BD128A7EC45FF706B030EF7777AB57E8 +:1030F00089A05C4455E0875968C3245550DA774865 +:103100006F9F28A4D998CBA59FF545CC3C98D9F7BB +:10311000A2D1BEBFC593D4795A8E1F0802C70AA296 +:1031200067B9B950A1498E7D373DBAC7A1CE65A90F +:103130004195EB79294EFC2003BBA34534EA7BCDB6 +:10314000CB7F1D825266E38892D7E69E4DFB8BE4CF +:10315000690869FAB5618FA59A7863EF9A113FF40F +:1031600020FFD25274227EC24E11D45B9AFFAC88EB +:1031700065C9E4D92A120D6A906B0B1558E4B6D5CF +:103180006F4276220A7423875C2AA840495C6CC18E +:1031900031D450DAB0EDE291581092111645991BD6 +:1031A0008DDEC5E4E9FBE6795A230D98F3749FEFB1 +:1031B000C2BC555A58D479859EF121BC5FA3632FB8 +:1031C00008DECB41A013E77792E0EA39EB581469A7 +:1031D0000C7C177089D4A486D55A8954CD4C0645E9 +:1031E0005C13DC33A27192587DAB5648F40C1FC6B9 +:1031F00043A15EF54B30672B7BDD1AC761064FF7A5 +:103200006C797A1147AF43FA0784E80809BDF3A344 +:10321000CCDAF94D76BC120693BDF10AC19CEB8D58 +:10322000C626259C2839379C3F10B9DC2B9A6704A9 +:103230007C82ADF425B54FD709E76F33B5EAA7FF18 +:103240007C22BE2DC0657CE35063DC6CD6B58BAFB1 +:10325000FC53F5F608614B7EE2D577F441F3E31AAF +:10326000C190FB5C2E4C6E2BD44768B8C18A46BE19 +:103270007E9B014E57FFDAAC6A470BD63F2E064ABB +:103280001AD55A718238A490F837416CA78C6B45D7 +:10329000A422A262D4AA3D376B438933ABBEA58773 +:1032A000EB73A94C35B33E8D72D89042282CE4794B +:1032B000603E40B48DE9454314E893D40DB4BF9DFE +:1032C0009C78E5B9350ADED5FD7F304E3C769226F6 +:1032D000938034118C3547860FB2796C560DCB969E +:1032E0004666F17052E4B9487DB6C2ECCE1A456428 +:1032F000647BC756EB6F26385EE01159906B1B0359 +:10330000983B06E05437E0A9F6C86F2516A374521F +:103310000C974EE116A4F404D2BC76D10CC7BCAA1B +:10332000B4F8C2E6A243F523F2D42E7EEF32EE0EBD +:1033300040062869F28754484489D10FBD5E8F1B2F +:10334000FDF6159EF5B2AFCC30223462E4785944D4 +:103350006597435393843E3C8DC917CF9746D1BBA5 +:10336000EF9161D0954478E327F35535C8E10B011F +:10337000519EFD943E8B374EFBD36C620FFAFC8A54 +:103380007B66C73AB9DA521F482008949E7B4BA44B +:10339000B21D3FE118BF604FEABF401778B3855DAB +:1033A0001A21DD9CBA7244A50313C9B1A513E7EA3B +:1033B0004D7ACF68757D4D2912F9DFB5488216E741 +:1033C00058F030D79E59511DA1AA3AE46B36FB5CE8 +:1033D00049DACCD8E58DE97FFCEDBD481DFF18F535 +:1033E00096AFF72D95B0F8B6E8B661BCB77081908E +:1033F000D8F0D7B797C0641AAE5F3D98B9E25CAC1D +:10340000C8949DAA1121A4E8BE2954ED5B8ECE304C +:103410003BA875D65F47D170F0249C8F11550BFFE8 +:10342000BECCA99EA62E2DF633C4D0840AD8A3C044 +:10343000CF459224EFC566C90F7F53F3BEB7CD9831 +:1034400019BA07BE1A1520947C28DFD1075B2C3CE3 +:1034500060464DBB506C6CE515098CB3151CE5C777 +:10346000D13F3F90C6078DE2AAE08FDC200B90E7AA +:103470001D034EEEEBE45EB3231667D13FD0E3B1FC +:10348000F22E01E5D81CD4580C6E8F8A5CF9BB185B +:10349000F91EF04BAFB8D925D20D6217F366A4A47C +:1034A0005416BD1DCDBB876745E6A56D40891B350C +:1034B0004A2330999ABC29EBDC640A25ACD8CB6C42 +:1034C00057D6F8670318AEFEB9470C53DE6571A7EF +:1034D0006BFAE6FC6F765A51B61EA203B450EB4469 +:1034E000330CC4B82C1BF3CC898783E9D40945720B +:1034F00023065FA2F669033ED6DFAFB2E7B1D2E89A +:10350000843CDEA6407FC2FFCE6C71ADB3C604C161 +:10351000D385269018063DAA59A365F1C1A67A0A5B +:10352000346D0890489CD9DED745AA0C56D7E90BD4 +:103530000040C7A93061038B8F40F491A1D7E98483 +:103540009EC51E07BA6FD9C7D2EEA1E9F8C8DCA59F +:10355000F88A5B9D04D37734DCE5612CCF0E7E3591 +:103560008635A98130F730330654B1AD4E66BA6C5A +:103570000FCF5C81257826FF3379939786E0918978 +:103580000B269932F079BCA23C89DBC0D9997B1615 +:10359000B6A622D9EE68F61E2328B25C3F8124EC41 +:1035A000C476750C6468798DC3881C245D17E0812E +:1035B0000798E1C6601001CD6DCB8E811E7D24EC95 +:1035C0008F4907E16CC226AC5CF973D2489816E3C8 +:1035D0000C2D1BACBF2A7D9A3E762FEFAC0911C68D +:1035E000244F811B5F26CB22E4D265B33E67A1CB7B +:1035F00074D9A82D0D5909D4C1D407F376CF0DB5D0 +:103600006A13000D0E122CBD49D80234E2853D3BF1 +:1036100064FDAE878C4A470B6F0ECECC8B53E07F98 +:10362000C1318D8A3736D9795BC36D225314D0608E +:10363000FDB727A4C1F63CA03E88765BDE11A2B19F +:103640004B4A9D6BE36E4813579B765FFF8C2D3E74 +:10365000BBB73813F6082F3EE8DE4CF359906BAA3F +:1036600036302E9B149FA754CBB82A1A432E7A8546 +:1036700097782ACF1B4555EE0A83A78968FBF4DCAF +:103680006B42682893179A3FFE824E4D194817AA3D +:103690003116690020F79D8FF6FF554234C8662920 +:1036A00018DE5C61BF390C552E3F0F72C4C71BED8D +:1036B000AF51497819BDFD978AEF961DE7D12819BA +:1036C000FA7FE5D87C9250931BE39CBD4A46A660E6 +:1036D000491159B0F23612350388E05D6FE2392D99 +:1036E000282943ED012D82903593B01F8ADDF31C0C +:1036F000821DC2C64113F60485B251BA12F5F56BAC +:10370000EB946BAB618C5417114648F1E760F4D928 +:1037100083897323B91E759149E7EE62C9739E8D43 +:103720008D702A8DB9D296F68A01888A3987D77921 +:10373000009CD67C70A85241CFFB99BFDB7E2961EB +:10374000CC2BB07F46B088FD870179563ED1EDC5C0 +:10375000C7874F234D277F0DFF870A81DCDFCF55B9 +:103760007C37DC2192B2DDC9561A5D5F096C796045 +:103770000B94D1B742F76891B780FB7B66C9852669 +:103780000A26A8103BE042A2DC3BCC1EF06E8FA1C3 +:103790001342C333D8977299CD761E0EE112E059C9 +:1037A00025B94CE2948244FB905DD81D856B74CCA6 +:1037B0007B8D34B5271D2CDBA300CE6F2C6F8C8145 +:1037C0008FC914DC40DC2B76E1CF9B1E2055EF1B0C +:1037D000BE4F04924AACC26988D2A116844003EB62 +:1037E0007FE8D33DCD583DB3340D3D7CBF039F4FA3 +:1037F0009FB6336EA2566F9028D6426EC12E251BFF +:10380000E045B4E73408A5124E5DE1EA74E689F4B8 +:103810008E74867D46B640DE9BDA1EB8A3A7486D3F +:10382000EE837435FE790A6F6F9A17FEDE2351B569 +:10383000A007F29F9DC83C00247AAE4C81890020ED +:10384000B96359369BD116D5ED9B51B9B1F7D775F0 +:10385000035DBF9DF3BFD844DC0A83976417A20AB7 +:103860000917FC21F870A41FB8656C20876B817262 +:10387000CF992551D280B9802011ADA284FFB2FC2E +:103880007C1CB979D93FAEC228597375ACF641C6D4 +:1038900067827D234B17899B33166099653D8C6742 +:1038A0000251D4E2A5714A45F84B093E1488CFAEC7 +:1038B000D3EE9EA2034923454604D0B0F6CE606005 +:1038C00027A620D9998621FD66B245ED19C9FB8846 +:1038D000B2E2A9AA9A033258288464B34A6B9F8F34 +:1038E00014042A63B9E5134DE6A9D06E18F87CEAF2 +:1038F000E17BB3B21068417DE7C6036203F968401B +:10390000744E7D41F7D58DA3CD1ABD86CD4DAED673 +:103910005857C31E61CD4B5F31E18D905FAB1C47A3 +:10392000323F08A5C219099733BA5B528E196CEB66 +:10393000A898657E4F15F2A6AD4B46A421B87BE052 +:1039400085EC21530E7B96CF1D206EF2673455B265 +:10395000AE8F0BD9FC2358F904E9970AC96745785B +:103960009DA4DFE6CB0E73C454BC78BBE992BF4480 +:103970003E03ABCDB0E0105EDF65E0A6E13F9DB554 +:103980009548D07458950069DDD8BC82980ACB95CB +:10399000E142C3498B0D0FC079EB0F5CDE2DA240D5 +:1039A000F7BE9E53DA3717720B796A6D13561909F1 +:1039B0009B71B274C511D41D86599617169905F3DB +:1039C000B091FCBE5E4175587B367EDC2634498B57 +:1039D000E3118CE16CFEDEC09D09929150638D1E57 +:1039E000E96CD464DD040AFF3F4A82DE28E7DB8904 +:1039F000C74648D090CD27E43F39C71CD2DC3D34C0 +:103A00008D2067751A1C2808B66AB790431D2DD8FB +:103A100069F4384F6B513789A65E0D936559C88696 +:103A2000312729AC9E3CCB6C4DA5E6C5549EB8A56C +:103A30006A845E7858A5A45F734EA4E414ACF8843D +:103A4000AA146CA2363BC4FE3FC51CE99345C66868 +:103A5000314E5547CC728CBA2FBA55A85FDD6BFA40 +:103A600083759D7CBFDC96CFEA684546348A4F3724 +:103A700021FEAD16ADF936D0BCD85C83A8C386C391 +:103A800051C74FEAF272FD6C6210DEFFFFEA27A910 +:103A9000D150EE602E4689A7DD3EE3189EE8DF2375 +:103AA000B00AA92D8F5A85180DD480EBDAF0167A5A +:103AB00065A189A4365F3F6C2F863BEC774B84F081 +:103AC00069F592E497F15B1886D82B8E835F0EB868 +:103AD0004250B094A23FD2E6C2D168C1F0E7ECFBFD +:103AE0002A8A5708B368C98C5A5F9CBA2AC3DC80FB +:103AF0006183CA7670D6AE17E443238F444F35995D +:103B0000ECA0FAC56727E30935B67AB4A1E9B8266F +:103B10005BBCA8637E75DDBA8EFBC231B9280BB7DA +:103B200086247CE3371F0E83CB86B3E2EF3B7A4FCC +:103B30000C8F5D5D51DE9C276D170B50B866648954 +:103B4000B93792E63CBE244D30EA0E85E78DCEFFB4 +:103B5000FB39B3BFA724A8D810A50C46256E6C4826 +:103B6000F2C41DB35403F16B0F3E5EFF7369514DF8 +:103B70000FA4A7973AE1671480002E64F931E66D2F +:103B8000BB9A68F76887473C902AB7EE5C8D01F0D6 +:103B9000C25FB3495A205E040D0B8690F75BD3F6E3 +:103BA000830252005B0D02AE0B91FC027E6DBC3BAA +:103BB00085B38DEB32C32B170CF50A8B0D92793F31 +:103BC0005B02A23CFF0A45451FE2D0DA61CC398492 +:103BD000B2914378C6A2CB7871BA53135ACAD2AB0A +:103BE0008D5F428B63D4595927EABA4ABCFD2A8BB0 +:103BF000176A54E0B661B1136FCBB6E7A1D9130EC3 +:103C00006F648E84F28F5EC959C2DAD1729B92EAD8 +:103C1000EB53A60C14552A2099A9327C94DA39ABBF +:103C2000FCF56746ADA0996379D047D479B6935631 +:103C30007C9013C96BAE0E7B2B2A6441814805EA48 +:103C40003ACEB6C656562875ACA61B0F519146DA29 +:103C50005782ABF8560678025C594A69D1684C9F86 +:103C6000CEB02C5584C6CD0E5D7523D604A94B2D40 +:103C7000D6663652CCF06CB98E7FA2058C70AE152C +:103C80002426349E9F307376BAB9C3C311C9B1904C +:103C90004989A740C3D6C21B6ECB7E3527640D3140 +:103CA0005D5CB56335CC687C49197FD2D5757A9B4C +:103CB000D3C58FB3585DAC71009E940A824E28FE26 +:103CC00025F722F8DC4C5D712E1620D1504E6C1970 +:103CD000AF8014903582284E95C17203C77B9A6CD1 +:103CE000D33DD32086838C5CC81CEBEDCA1D5402E7 +:103CF000A327A92F7A6F9193F17ACC54C4EBD8DD26 +:103D000024C96143BCA8AE5C68DF7766626DCE569D +:103D10005043C364A9B89DEBF08D4D3100638BC255 +:103D2000282DD3277867C4468B3C851662EB6565E2 +:103D3000CB3584DCD1DB80C214B932EAF920785467 +:103D4000777A342C2D1E162747D86EC2A89048A823 +:103D50003677E2BC2CA0816BFDE13070AD0DC772EF +:103D60004AAA0B0321854606815D3FA34A69FF707D +:103D7000085C66043684F85C669560D8F1C68143B9 +:103D80007B226E32993A029B676AB633A994B132AC +:103D90005CAE5886D7F96CE2E64F597159C4E13EE2 +:103DA000B5BFF247DAA8D014C257AAC614CFC41EB2 +:103DB0003638266CA8710FA949FD4879A22F543ACC +:103DC000F59451633E1E83BC43CF7A81922F5C38B9 +:103DD000DECEA566C3466ECD1D91732E742C84BABB +:103DE0008FDAE2D3719DB7D9259855EA0A7719730E +:103DF0007A290E773EE2B079128F534510D3885955 +:103E0000D61DB9AD258982A0D630460645DF8FB4D0 +:103E10006609EAD1BB3EC1C8C7E4DED6F3677423A6 +:103E20003A9E2EC9A50E5044F5C2511073E1EE2101 +:103E3000FB213EB1A3B3AA23A696092DD08047BE8D +:103E40005DA20E45109529D8DD48384D48CFC9EC04 +:103E500035B78C1FEF2BB518ECA223560DB4625D5D +:103E6000ED1A260947557AFEC90707B691C183CBDB +:103E7000B78A911F3FF8F935D4578C5DDBB3BEC3C9 +:103E80000D430E5F092D0CE65244095FD8E678D445 +:103E9000F102A0028F4255D6F32D8F4A348F0B6B5F +:103EA000CDCCB8473B462910843B1CA494162E0E5B +:103EB0000A209F2A894D72285E24BA4B00116F5C3C +:103EC0000BFF2C998CAAC8954BC41C5012DA68D8E9 +:103ED00007D5D58EE7DCDA27858FC1A6DA4933C945 +:103EE0001D0918F094C72537725FC68B0F06B2D430 +:103EF0003524A922E70D1797D29B7BC410E2DEF888 +:103F0000DED25D271CB3306128EDE880AC857955A1 +:103F10000C77158B3F922BAB6F0A526C67B136DE74 +:103F200019A4D944ECBE7BCBEDE1A5581C2AF4A71B +:103F3000B6BB7774D6C8F303576A2211B99F9D4D5B +:103F4000D0DF27C04D0D38488A31F910A3451E0F28 +:103F5000A42BE53D9A6A96A01E36095FF6D6A033DB +:103F600007E5065025504EA403A26658FE42A9D28A +:103F7000931D1BE0A24715DEA7B0B93C0090EB18DB +:103F80006F24DA92AFB93FCC200CE4FE0742DF5336 +:103F900076C48EBECF7EDC79C37EC9B6DBBC330966 +:103FA000470B2037BE664EF1FFBC7713D7BF4439AD +:103FB0002B73FA27CD87B11A425F156B4D98D52127 +:103FC000670EABDA430CDEFC510708E5B338CA785C +:103FD000356324B1763FF7BD0BC371DCBF6BA2879D +:103FE000702C405BF18F0E759802C0F781C958059F +:103FF0004745FB84573A308F478C39F40B3A187297 +:104000003A43BB591B88E3B9F851E0643C7A8F739B +:10401000614850FF58067400C0261A1A02486312FD +:10402000FC8ED2F21FF94F78A5CDAA92909C6F8991 +:10403000AF6020ED321DC593F0F0F369CBD78A1441 +:10404000987837335B58B53D717A4786319A374C4B +:10405000860462508ABDCC7B334781BF87805FF87E +:10406000679F9F57C86BF30D7F913A5187CC9A3E5B +:104070003CFF620100B275807229AA7AE12599CFCE +:104080000BC4165E09A6CD4C0B062ACD44BE6E5459 +:10409000C3F9B4550A98505EE53BA372827E3BD7C4 +:1040A0001745225532B7CBCA7EB856DFC73204BD9A +:1040B000F3FA5EB46F1790686E393ED0083CD52B8A +:1040C000DF15F179D4503CB85A4AFB9C96A80D9F55 +:1040D000361A80A0770EA05E08FD217A69F407FCED +:1040E0002F28DB37814098F82B6C24C311712540B1 +:1040F000E80CE0E10BC80022689CF6998A10347441 +:10410000C150A6EFD7A15A8C0584303FED7E4D8E6D +:10411000AA6CEA8ECD4AF36368C76AD4E7BE905CA6 +:10412000A8C0D228733241C550FFB7E68EBCA4594F +:10413000D307296D50AB2E43AA18B866E7C9C8C586 +:10414000E6DB967A048BF3CB5B49E37E9F145478CD +:10415000675AD8C02C90682CBC11F6CAA225015809 +:1041600087E0D49FBF5750AD1D0A5C22385F7A228A +:104170007844FE15E477CC4F0E423F63620B25E78F +:10418000D205AA07934F572C6842D8181CB30AAE21 +:10419000963EE099B00235EE2B8B74762BF631B655 +:1041A000191CF53C719065D81005D9175B0AFD1EE6 +:1041B00082FDC249371BF7423E1E40376A506AB241 +:1041C00035CDCA43DB52793C72B5F6D2AD0DE95418 +:1041D00097C596AD56A7C5BACBF6092EBCF1674672 +:1041E0000019821BF277966F6E46F1CC0E9CDD971C +:1041F000C5E62DFA516C527D32C823A01D18D0C9D6 +:104200004A91F11A18DBE3C84B8BD1959A92671C3F +:1042100041B933ED176A692238AD4665982ADF1D2A +:104220005B207D4071F369F905C72FCF995FCDCD34 +:10423000B05F7E06C0D7C700512B0F922C09B25A2F +:104240006FCBE77109A2076E778AEDA3320F981D35 +:10425000CF1D8C579C47CE2136024A376676D97DD2 +:10426000DD18C1F0513CB567F4164584177430DA97 +:10427000657843170E9A7F2DF9B356BE84322B41D1 +:104280006B2491AC8FABE09ABC0AAFB3F8C46DFF5E +:1042900068974914E201798156BB06249DA6B19C1A +:1042A000040E169C24ADA8EE44A82B9A42F936B908 +:1042B000163B7994EEC9552F27231816DA84E08926 +:1042C00043F6C1721361DC8B6E6BB52291C2AC51A7 +:1042D0007317F8ABB11BDC9AA24701875657B7A4F6 +:1042E0001443386AC458A52A498CB5A1E50A61CAA5 +:1042F000CFA9D54BC69FB64E24026297FD67AFE3A8 +:10430000DE058EE6BB89DFF244A2AA944281F087E3 +:10431000F8286984B1B6263460A1739A1D8AB6C2A2 +:10432000A86AC73B4755624A1E9517A4B4FDC083CF +:1043300047879B88AC5542A10187548CC42586FCD5 +:10434000DB54C578E452445FFB7CE10A5ECD5981C1 +:10435000F633EA4ED67CB0F00E474D7A914971485B +:104360000FB5D2FABE50EE028037E3D8C709B116B6 +:10437000DED16F2028A39652444CB5D77F927A8124 +:104380007AFD3C6145EE3DE3732BB6AE62B63BE28F +:10439000664AF36320406D3EEA57719ABC640E672B +:1043A000DDFB436B3C528A6E294658DE29C0B53688 +:1043B00099DC78B8C5A2BFD780568D63DBF746D8A5 +:1043C0003DE3F52FBA8EAA3F33C305EEE60A6D3DF5 +:1043D000F70B7B115A7FC8EDE942CA4256E89F5756 +:1043E00077028D93B1F019B4554411F469C96ABCD0 +:1043F000B8051997CFE4A45D677012C87C23944078 +:104400000C29FD6B8D7F1F308DEB2688162EBB5A35 +:104410005F323E084286A835F2F625AA99EEDBAA5D +:104420009892FC254D3682B4C275D78B92069F4F69 +:1044300001BC872231FA3305C72D70452C34D0A139 +:10444000152D9DFF325ADDBB56D20ADD765EBC8A41 +:104450006F92D671B2902DFCB6714184F1A360C702 +:10446000416397F85E4E3F2CDC21FE74FBFA9333D8 +:10447000A8CE4EBC89F363BAF42A178E49FB3BEAF7 +:1044800030A73B79A7B7AD877D14905A22E43DE071 +:10449000D5AA1B0ED3A7ADD0841F05081B84A4BECC +:1044A0005C7D118DA4CC7E02388450EFE0F3D26E97 +:1044B000E934787A5D679594B439A72DD784D00A0A +:1044C00073171B7404C4B27265960A4EE679544998 +:1044D000847DCEE98A7B214ADE9A1232A6AC817BAA +:1044E00096B55E5AB5AAE7282CFFAF5FC901AD8D1E +:1044F00032308B437C2391409E78FBC06F76CAE9B3 +:10450000DB05FA057947D01EE9018D67B7960E1BCA +:10451000693B82C634AD08B9C9C387C37247376CDB +:104520005B5CDEC269CD88F1DD6FCA891746774BC7 +:10453000D59F963D313A3FE48436F1A6ACD511447F +:104540008BAC84369A88C3732F335599199C17E323 +:10455000A0BA1C92B8D39B3C7F8F219BC2D193A859 +:10456000D40BE5313C865D6D5E14A3DD4A98B9300D +:10457000ECF7B1EE993C01A4E786918DDC5721253B +:1045800056B96721B0662D2399645F9CC05163635F +:10459000D70C47BF4C1B8C5BB93B02E8D7F792089E +:1045A00090E3EA7D42283107D3F1A3BF571B098E60 +:1045B00045F44318F470DA1378E6CB37E8A8ECAD8D +:1045C00054B8AE135B9DA1190DEF671D97C6B49B40 +:1045D00075BE3DF37ED9F4DABB0276AE0A18461DED +:1045E000A4DE25BF33163FDEDDE46618D97FB16A4D +:1045F00095C66E5F4AEB0DF756E84A99ED3F8A8201 +:10460000719B7E3B2DE8B71770516B8FAB02BBB02F +:10461000B5AB4BA93500EAC90D1EB1A785C3780318 +:10462000039ADE6628F4B8A4CFCE43D8BB99F0F63F +:1046300077982864E1F1EBE8EB84B26ED002924007 +:104640001F9C459822635F0B224F4CF62968760623 +:104650009D2F5E38CD47C352538542664DA7E5B0C6 +:10466000771D8706849A177BF05E01E86082969436 +:10467000CDF923A15379EC4A42F74A797151C1ED42 +:10468000FEEF9DDEDCE64D1782692D2CF5F23F8DA5 +:1046900082692AD53ABBCD9B9C5311AAACC0E57D5B +:1046A00001BC644C62E56726D74670694AE586D44A +:1046B000A3AC1BA6A0415230E74A307BE2F67EABAA +:1046C00081FE6AABF208D97FB4B92DBAE06AE9E499 +:1046D000A326F8978CF612833FEC2C0A72D1F207CE +:1046E000EB8A7741AA3466147642B6D93F0353C4A5 +:1046F00024BD080C3F8346B5EB9E3A0D69CAE149DB +:1047000058CB4DC420FB1566D9F79760D4F76F09D5 +:104710009C68B23FFCF79CB4FFC11D6BEC1771960F +:1047200038FACB483FE40380FFA98D1A6F3B910410 +:1047300090E146172EA3A3605C9E16F207C68BA7D6 +:104740005EEC41099C618E66B196EC6ABC08E98713 +:10475000DAED4A1BB2FE20B6B99236846A0C52B426 +:104760000A90CF4CDD25E8376C123E679EE90FE7D3 +:104770005DBB1F4EA670DF807CEAC33AA21B4CA330 +:104780002DE0AC54059F0B8AFF9984B36CA9DD61C1 +:10479000904297D327EB58064C8CF22954AB1985DD +:1047A000C9EAE67EA36A9499BCE1324F776866C68F +:1047B00025B89B35F34D00D14B159AD861DAFC5CD6 +:1047C000452AC3EDD778F7EE4E06737E4E277A82E0 +:1047D000AAC1823CD2734180EEE90292AFE3CB984A +:1047E000D2D0AF7CD3EA4CB4767D2B607DF061D91A +:1047F000B3F8731BB0421D903A9C46EAC49D07F87B +:1048000061389C986E969648682B03F05EB2C3019F +:104810005C4218ACE8AD0E09712B12F722038FE54C +:10482000DEB41EAE61C51AF46A9B7B937B5D37E5EF +:104830005ACF197B85D733ABC138B09A239D2B7CD7 +:104840004E47251706322FB7F0E87EC06747CC9950 +:104850000DE251E9C153ED5073A63B21E41A541EF9 +:104860004885E05A553A6C70CA26FB615A42AABC88 +:10487000A56F466636C9FB0BFCCFE98AA4B4457B1D +:10488000ED4AEC357331CDB889F2AAA3301C2B4820 +:10489000401C3AF18C04E7F98E02CF3DE0428E686D +:1048A00064A27932516DDFFECB486C771F454A7B9D +:1048B00099B80F42BE996FCE85FB7959ED6CF70F11 +:1048C000BE63D3411AF089B3D4584DFEF2EACAAFA1 +:1048D000441223F6FF7FED2549B3385E74102C7C1B +:1048E00001595F53877ECDA16EC0AF4773E557FF77 +:1048F0007E2F63F42C8F49E2147BE13A35AF7D378C +:1049000088F03A708EA26C87B992729D08129E7FD1 +:10491000C86A778DAEABC33A9178B21B0730488432 +:10492000DAAD9F7DD50E5DF16438F4FF2E5F070D83 +:10493000599F6201A4E36D8471ABAC6D23773D7A1E +:104940007A0EF26AE7339E1B5EE833FD20E351A343 +:10495000382181870A5A7BC0A37D8E6F23B0509E79 +:1049600067E9129AAFEC4CBD8F67A1119957DC6AC9 +:10497000C3374E8D0935EF89244CD2E9493A6F5D32 +:1049800002D1F27D80EE1A5CDFB649A7C2D9C30A14 +:104990003BC037F9E57FDAE66A3F63A079530186C9 +:1049A000E277EC9B0AC1557AB66670A11B5BF836BC +:1049B0001893680C1C1D62760C72AA1373F5160905 +:1049C0009ECB94983E0D637C06A4E1F19793684ECC +:1049D0008565C962D8B26366F69725F7D883013A30 +:1049E000CE13EDF730F42BA1463EE336AF0400635F +:1049F00076DDF125535A918F95779D52396ACDFD19 +:104A0000B47FC7E8727F966E51D8DC1180465DFB9B +:104A1000C34C70211C3B9B684D2A7CF9CA2A4CB7B9 +:104A20004EDF037E61D9F47C795A0EE5D3934D6B4A +:104A3000C6C39E302A163C5EBF6B872DEBC546640D +:104A4000F8A33C757A3C417B61A78C2B08E193E28B +:104A500014EB97E6F59828FDE1A6B6F215F9BD0529 +:104A6000AEFA04C52F428DBA2EAF61BCB042AAA8DF +:104A70008DD8C675503FDA232B5A9931A50EB5D182 +:104A8000CE3C14DDD5EF998042FC80B25464BCF872 +:104A90002DD6B77A49454ECF577906EB5ABD8FF5DB +:104AA000D894976FF70AD9A4FEA4557ED51A947DA1 +:104AB000FB8A5256CE98EF97C024F64007A86E8C1A +:104AC00071736992542F8A6D59812870BBBD708CA7 +:104AD000491ECE1BF26EFF981EAC857AC020363B75 +:104AE00079099F2CAE805CB64AAE3DA36A9870D01F +:104AF0008C5B5A784659E67A5C907D87297E67B54B +:104B00005BBF88279DC54B692EFAE1E0BDE8724482 +:104B1000503E83BB2B6707D25C17F2DC5A642356E6 +:104B2000FB732AE2F35DE7DA0BF74717A4734292AF +:104B3000C1F6AF0FB8B7FE5D2A4268382678C9873C +:104B40003F8085057B58F0814743C556761AE710AC +:104B5000E0280927EE18DFB80226777F8B3D37E87B +:104B6000C3951D24AAC2EDE8D1DD8EEAA2A1656E2F +:104B7000EB9C34BCE1C0F5F8AF1D80A572B157E7DE +:104B8000D527A58610864DA61A3E81228CAEA5405B +:104B9000257FCFDAF98D2AB7703962EDABCDD2928D +:104BA00087B0487F4663DFA8BFF0289B6BA024B482 +:104BB000DEAE1374758A75380D0B6179645F3BC482 +:104BC0002ABA80109842732B7C91CD02053DAEDA53 +:104BD00073D090D7DB7CD3C7CDE0F12A0DDEB35084 +:104BE000C234C6B0F86DF6A7C63510A65569B3171E +:104BF000C53C91E771BC1FB5B3DD2863FBDF6E7D5B +:104C000060A09E05CB0F78CC12EF23C4352DB55094 +:104C10003ECA60556E2B9A0BA546C55FB497CA5025 +:104C20002424615B59919D6FE02D17BB5A688C1746 +:104C30009666C5E39E3455D3998A380EE42D7FAC31 +:104C400002505F9AB24B8F8636C7C17A1D826EDAE8 +:104C5000A5B3ECE1E02CF6575D48C587ED4D944CCB +:104C60007BB6217C1D43E8E5F600824EA0D4DA3005 +:104C700083435777DCCC65263C9BDA5C07463BCC0C +:104C8000F85D6E3FD78B3E0136C2626EB4A3B87832 +:104C90009411CDCF50ABAC5CA41F92A6D823C264B4 +:104CA0007AB8C44C056185E210A98D32B7454CB382 +:104CB000D4C43E2A7A731F5EEFF9F8BC4807F41497 +:104CC000EFE914A0899A3FD02300CD991445BE4145 +:104CD000329D163969AE9003C7850AC74BCEDC609A +:104CE000449E468258D1B90247D1CEEEF546C8C29D +:104CF0006C190C6757C7F33000054BDAC842868C35 +:104D0000BB646DDCA8E50CECE64154875B7E7C0857 +:104D1000500EC12CA06DCB999CB9CE73EF719DE95B +:104D20007D3CEC7B85C08D9F86BDDCBFA78A44039C +:104D3000AECDBD201056299B9CC55E88D3C7009C74 +:104D4000FF7594585BA8742FE53C026794DDF1BAB7 +:104D500005C52D09F4726F2522B6501FBF602E3E87 +:104D600096A0D43A78C04E436E67945E4CADCA7F2D +:104D70004818D634B3FAFC70E0E39B449876661C7E +:104D80009F5F2E67490F75A467D81F6385775722E9 +:104D9000FEE3218BE1D520CE095EDDFD41BE8DCF46 +:104DA00099501F628F764183BC134F8E6F686C548D +:104DB0008B6C67DCCF19E107847E0B8F956332C85B +:104DC000A89278D147538697491D151F29EE57267B +:104DD000D67152FF2316EAFE121D30A8A9A577B698 +:104DE000A15BC2E3BEFBAB873A921716736A1688C3 +:104DF000EA8B8BB20D0B5EE2D846B30AE134DDB527 +:104E00008DABE87B132FA4E870680FD60862BFADA6 +:104E10000F4061B256C622098301F758C520407B76 +:104E20004C8A7D2C7A737B9751E14AA93005DC4F7F +:104E3000A26BAFF887E9A3A4AD5222F59BED917365 +:104E4000CB87A151AE4D6051AB25385E1591806F77 +:104E50002EEBC4AB278211170E2FCC9D53E2D3A0AB +:104E60009CF1B2666A40A15038B698F0F560785966 +:104E7000DDD5C804CD126792F64FE198A4CC0A6B39 +:104E8000A7995C625C74AB80A469016E052F237DD9 +:104E90001588EE7A3773AAA7BC6AEB133652C9F9A4 +:104EA000FAFB5824353B54A71E656A7ED5582DFE63 +:104EB0007A9F5612AD00D03AECAC24C4C69D5E4D2C +:104EC000F0975A713B2C6B08E08ED4509FD5B06C94 +:104ED000A5850C99D65E97AA63EFF55D73751A5098 +:104EE000F3B435F836FF0C05B91450442B690C1E89 +:104EF0000535BD316FAA5047814772A03F987BE8C6 +:104F0000DBD0918BB3B62AB2B5D147CE2F2E2A90E3 +:104F1000941EC3976E12378B91D9450061D16A8078 +:104F20008C97B12A2EB58FC09B974536A8F554B201 +:104F3000DA00F7FDD910787BC60F7A4886ED94E742 +:104F40003B4171DCF41211D01CE70C8D24EA19B638 +:104F5000FF91C0A7F993C1F604D0DAC6136643489F +:104F6000CF11CEB6652530CF374ACC1509389A40D7 +:104F700016F4E3B3B7AA118588DF552CB225D5C83E +:104F8000C55D9E3A9B83464B2D7797ABC7B1F0A288 +:104F90001CEA9B155305073A3C5FF0979DCD1DFB1E +:104FA000768896D51A20A3E0593A6DA42736776201 +:104FB000FB6B857DAB627C0C931733A05651842E1E +:104FC000346FE69DAE9A0468D41E00A819E2B0CDF5 +:104FD00097DC22D4C0A2618E8D051E889A78E58266 +:104FE00078345402BE02FFB05E53D988E9A459F662 +:104FF000D60F742579E6495FA6F3D48F6BFA498EF4 +:1050000080F80EE597F0530B414AEB35DF2491D041 +:105010004C4DFCFD30EF3BE25E76FF91DF688E8207 +:10502000AF6B670FBEBABB5061E16B43C3F1B5B95B +:105030007C03B75A7B056FBBF788B4FAE712FE1101 +:1050400019B47FC38FF86EE8B2AF8A5791567E5D70 +:1050500035D81A8DA73C805ECDC569AAAFE26166DE +:10506000011231919499E42047ADCC20165DB39C98 +:1050700087986D15548D906580AEF0FAE08A55885A +:10508000BEDC916157F790B87E3714E0B5E920DBBC +:1050900060F17432566028530B1597052B6818C6BB +:1050A00039C54FA8995DF987463BC77A0209547DF7 +:1050B00025F5D793A7B762CD0D91AABA76B5DCB620 +:1050C000B6036D639537949D5200EB076794252BCB +:1050D0002987E15D0ED7A69A8BA9487C89C02D3A15 +:1050E0007D369387BA02FC54B61D4C1E5D70B39892 +:1050F000A5ECBC7B1C4CCE25939A9426B930792B19 +:10510000B36EEBE277F7A1D79DEC05AE286697F07A +:10511000271C1E53A90DB9AE5B151A07B38A2816B2 +:10512000C7603BC3C712691E87F5EB88F8FB14BB49 +:1051300075CD894276E20F73058B6F24B8F73097EF +:10514000DDE8458476623E6C7DDF1A2C0BA479780D +:10515000A62C3F3F29F5E6A28A66468940CDAAFAE9 +:1051600034358D559E30BCB5CC1C3B331DFB8BB20A +:105170004B7862551903695BA3A0AEAB6A237878BC +:105180006BF5AD1E61963B68FAA8C833759CA055B7 +:105190001FEB05C99382A5E664CECBCA9E52691166 +:1051A000A6EA392A9522D35E7A1C8F465624CADA9B +:1051B0003F52D0543896EC1537BE57114B43E3D8C5 +:1051C00043EB23EF9132BCC867E6AD4AB3E8C1EBCD +:1051D000CFFD089177FC723BB7121BA44B92E718E6 +:1051E000D02CE479886B6CBE46C408ECEC2F0F58C9 +:1051F00036D46F6705CA81BA77104CB559DB2B8C52 +:1052000081BEEC953993A3C3E287D5D8403B04987F +:10521000467106FC30E38833FD526EC93E013BCE39 +:10522000A228719748FF96288F15D60F0BA91BDB74 +:105230002CBF24DD0E2D301A4BEFC28E3267EF33B8 +:10524000D027033C336E5A4AA3323B6D3F929DEF09 +:105250001F31621E51B52668F269FBE2C06D3155FF +:105260009899DEA62B3644B5CAB13C35852D22D39C +:10527000519524A6482F55A6DC9D58A1EA424CF131 +:1052800000259DB441CD7CDEC17B782674A82F40DB +:1052900072EC09F6339C8F19C1F8362937AE3FFC02 +:1052A0001EB7AE44AA7177523C947FB126FA1AD742 +:1052B0003C54E066ED2734B0BF9A8BDC2A3363E8B8 +:1052C00057C3E6A14C3E5F9AB969A44B97209E76DE +:1052D0004145328194FF7B01B4727DD24657C205AD +:1052E0004B1FD70081C40C261D5A1B5A3FB481F9AD +:1052F000830B1442E92E0D84326922BC2C74A4EB7A +:1053000093DC07EA7D13266D606FD01669F3C6E162 +:105310004F7B02C8817D428E3DE4FDC1AEE8D6736D +:10532000D19B4B52E028D5C050F76C2A3151BCBC00 +:10533000600CBAA87F4C4037143D1153679FBFB72C +:105340000B6B7FD23DBBA7E0535D754B170EB63795 +:105350007C963C64385C8DD211379B08AA97BD6956 +:10536000DCD08812E7D83E5F8CD501AB8D558B1A07 +:10537000B698A35746549A6CC2873FEAC12DFFECFA +:1053800007221F06121BF9571C688436EFEDE092C6 +:105390005F487B402C03E7ACAE7C6187DE48E6A02B +:1053A0004F7DFD7538D63DACD48C77A89ABDC9AC7D +:1053B000B876AACD1A594395F0BF7359EE8A9F4229 +:1053C00043F77A4D9275AAC3EB706A3CCDFF131C6C +:1053D0001F06EA4F79A6AEB4F4D5EC35C6D4262123 +:1053E00094007E6C227A178A0294AEC20B1CE10EE6 +:1053F000416125AE9657A4B8F3B74E4DCB871D84B7 +:10540000B7E8830470B311CABFB7049D12E559AE63 +:105410009D4F0E36FE1FC2A0276336CCEDACD8815F +:10542000F0257003E605B617F7F07FFDB6011B3FC8 +:10543000D9C3240C9FB4E57EBE12DED83C75182576 +:10544000F69BD0E0E15F85EDD804C13AF5D0330397 +:105450003EC99D6F72B4705AE62CC9CCA1953BEB46 +:1054600001A8149DF5E2D9AE8851F48F685402A1C9 +:105470002F98BF385992CD47757C9FEB9972A5C480 +:105480009465A3E61B895E07BF410B3326F5F14403 +:10549000FADDA436332A6D02BA0A8AA9E49B9F6D0D +:1054A000AAB4CE23436500D8986A857BDE4E0E9E53 +:1054B0008FF44A7B6F51B36FCCAD830244F21ACBA9 +:1054C000A5DB221EFA5ED23ED57756071E6AAD4B8B +:1054D0003C745DD1D0B8F745B3E8AD0A2993E6E452 +:1054E0002FF51750A4B520381663B5235625EF12B3 +:1054F000E5D4160541ED0A4A704053A34C09C82271 +:10550000565856EBA7DB4F8A7FE82D7350A94EBC47 +:105510009BE0A77AF9B98C979F51BEB04701DA2C6E +:10552000C619199D0F3C34180E944777969CB1C24A +:10553000A224CC3A253B5F93325F9A602129492F00 +:10554000866B04E22921F8C5FD7906FB4F43DE3A5C +:105550005925DE5C33BC234415B310F2C134FF641B +:10556000A5A9C9B63677EBEA989A053CB399F32317 +:105570008D8B45E3235D306E4DC4FA911C64E7F0DA +:10558000550DFDE6344625246F90F4771CE2192270 +:10559000F9356F7B94127FD2C886D7994FDCDEA98C +:1055A00012259FB4C7F0AC5B4D6296FB958618E65A +:1055B000BB57C786CED61E6764926644685C84A7D4 +:1055C000064E31F6E584A88639D6CA5F5F23A41F4C +:1055D0004A22858447D277524556D68B5D92FB8A04 +:1055E00072869451C6B817EEBC3C93043B97B161E8 +:1055F000FB77CF0DB95CAB2C71B329BECC7F386083 +:10560000652291CB2FAA9114699F59DD1988236FC8 +:1056100090FA277BA226A03CAE3BC8174D4F2237FD +:1056200036256E251AB3AC39BEC236FCF65E2210A2 +:1056300019D5E4F51DFB556C7598DF478BD79F8A0C +:10564000C991D36827FD3D4FD56D79C45A4B9981D7 +:10565000CF9328B5F3CE80CA8948C5C1BA42F21F9C +:1056600022CAAC0B3DD39E6A2A3BCC7D579C302985 +:10567000D1EB2B431D01624C9D00DDADDA3A2034A5 +:1056800015D69F30EF429B81A766C0FA38043AD402 +:1056900045B758F3507C8A9F39D4DEDA94FD8847A9 +:1056A0002C52FF5C1593CEFCCE173BF71BABF8AC2E +:1056B000B1D0042B11E135C48CFE39583000577B32 +:1056C0004970CF1E53A522DF893E9F63BE2D9F3BAD +:1056D00033E8A4E46695AD6D7BA90B0CA3E64158B5 +:1056E000CB92EB3668F85BC48768803480698E6B38 +:1056F000F17BFA7CE198D4A2C7A2FFB6C0923454E1 +:10570000382145000F8441CB6DE17DFE2242B17A04 +:105710004344C07ECFDBD75A4E62511D60227D5973 +:10572000E51262529F0DC75321EE351CC1B9AFAFD0 +:10573000DCB09906E1AD51372B5404206894CF7B3F +:105740008D909010E26DA3A1B2AFAADA9FC6257A20 +:1057500019B1CF844D710388A2E0439B1F03193612 +:1057600043E967EC228BB5F00CCD6DEF75929B0190 +:10577000CC9F01DBBBC15C0C482623A94B9A48D3C4 +:105780001C7C71EE2E8B4552EC31FA57499CF62762 +:10579000F6255E963F6A8E02C18D81DFF82F2D12AD +:1057A00016747CAF902EACB898F1C2B5B591600A72 +:1057B000C2A15682C1C095B7B9329F2DC2823F2B7C +:1057C0004CFC5FAEDFD0237AF08C86D8B72866F128 +:1057D000592D4C822E58063100AEC4D8A3812D35E8 +:1057E000CF4FF70DA8514CF6E54DCA946FB69AD33A +:1057F00075BE22C0848AC61F2133E10AB226F8A8EA +:1058000049F59F11A0E20B5A6AB83E60394892FEF2 +:10581000C89C608B752B4E30D0E42A5C4F0A47CF72 +:10582000EFC0605D22472DEA734EC2D7384EAA649E +:105830006556E42DE94E15B130EB4ABA9434E55F74 +:105840008730292684F56D035BCFD19609FE0B6363 +:10585000295AB58F49DEAFEA94E5098D598AC60603 +:10586000B843ABFC65C64FECE5D09DE927DF10914E +:10587000CB8FCD0CE1839F89EB3ABA5559B14E8954 +:105880007BCE8C7865ACD0D575ECED4D76B2AE059F +:105890009C6102678D23BD213A83C695DB1532D505 +:1058A0002CC6BA933F9C965D27ACA7924B24EDD9AA +:1058B000950D57B5ADA710DC76EA139AE5732E4621 +:1058C00002C37A3E5E0B157FE0C36A75BDBA7F42A4 +:1058D000E08CF1062FCB2CF782A0F70B06BF024F0E +:1058E000E90783C4E1F6A891BED2832636C2CD9ED5 +:1058F000693F3046298EA07498DE46F0FFEBD7A5AD +:10590000C7DAAF1D79CDF2ABDE6B3488D8AE072491 +:105910005AD9F82E61D2CB85F0AE0E8E267FD251A9 +:10592000D72D0ABFEDBD261278E85E740EAAE0C13D +:10593000CAF30B41880275F1061F3E69F8E12F900A +:10594000F05572BCCCC56F0B92C6AD9D48343DEA94 +:10595000B476B7F7DC5F475994BB73490D2E3530E9 +:10596000FBDAFAD60C64086C0BC8DEA572A4C0D9A9 +:10597000718874ACE10419D5EABA9250FB89743588 +:10598000A67E858583E857BDCC51F44F8342D892DB +:1059900078129BD587A8BCD29A465487489C9769B1 +:1059A0004AAE24475B9F5D4C8A3A9F33A4589D13AF +:1059B000D68E2DAA897A0EF4CF3C33025818E2E035 +:1059C0002A1730971EA4B5D19CE53DF0C299E8E9AD +:1059D000D4229BED650BFDC0997A39A53BF8AABC92 +:1059E00075B3EA467A724B971B7F2091279866BD64 +:1059F000B584AC297B3910431B0C970A56945ED6AC +:105A0000858E3FDDB45DEE7298DA925BE60F13ECA3 +:105A1000DB61D2D3DDD4FB92F8016D91783BFF8D31 +:105A2000C1F764DAE4FDFF6120AF560C0CF206A862 +:105A3000163944E297FBF1297B1BED623C010325FB +:105A4000424456E49D647CF552F73ECD7EB38BA173 +:105A50001A5035FBFFB8179A3F3D6A4118C9023901 +:105A6000146E198AAF83E286D0C139B56B5ADB2434 +:105A7000558576D58D82C4F73807163DF8ED4D81F2 +:105A8000CB452FE5510083D4798FC67A589C5F1798 +:105A90004ABFC2C07968223737526C4A328F216FB1 +:105AA0007402ABEE7C184A582C4D5C23C7AB3744CC +:105AB000E74558231568C2719F54C492BC4244E222 +:105AC0007C469A1404A8F0551A07B3FC8D1DB8281B +:105AD00098F5E45276138D0BF70062F20D0758BC6F +:105AE0008B0D00D59E82C6CD519002373D814AD99B +:105AF000A211F045795F05E1EDFDFE65CFDBC02326 +:105B00001057DC7E04BB723A34F38ACC7E538B820E +:105B10008F624AD34DFB97848C76E88876BA6FDD26 +:105B20000F4F75F862840F6ACA41F568E7EAD8C773 +:105B3000453E3EC139845C1C90E6AE405D05DB65A8 +:105B4000EC233FF7BCAA61AE5ED91E58368E04B670 +:105B50004799C5CE761D84C6D7429F6A377DDEC081 +:105B60003528750B35225007C493548904326F7160 +:105B7000D343DD22F1437AD14BD9E23AD0642844B1 +:105B8000A8A67CE5FB4FD4B9EBF0D05C103B42F803 +:105B90000BD73EB4EB447E6C75CDA3A51316F49CD5 +:105BA0001E1C98672AD99E209317760A33DEE9FFD8 +:105BB0002BDCC8D36B62B0B56D4548CDDC9D2B594D +:105BC00033149AB70CD4092AE880148D86177EB650 +:105BD00024373F5B8AB7CDBBE34052F3E43E23F268 +:105BE000E87FF5166D7848B84F1DFF3C903CE037D4 +:105BF0001684D2C19E34D1F40F25918EF80F1898D7 +:105C000016117A345D97643DA564742BD7219428CE +:105C10009308A74BB6B5837AE09068FDFBCCBBCE6A +:105C20008A805DD0A3C5B751505505C37CADB77D03 +:105C300016EAC17253988B4A4978B41E7F60912E40 +:105C4000968D9A849A36DAB3F90D882ECC680FFBBC +:105C5000B3909A0A0678E785784F1580955C02C85C +:105C6000167A838841E26776F3D088C006731307FB +:105C70002C18C63634AC0BF8C57DA8E32C87AF6171 +:105C80004DF0540282F43C1A0FB9BE05BBB03BBEC6 +:105C90002590C7098488EF04CBCC28257EEEE2BD91 +:105CA0007254448A04D52E597799A3AC7DC101A7BB +:105CB00053DC07EF406FB3DC3AC9E3C6AE922176FE +:105CC0002A791600DC9C75468F8E73978372A5F82F +:105CD0007449C5D718F5D537E9E18180ACC30E10FA +:105CE000CE4128DE09A7D05568D1107EBEAD8E25E5 +:105CF0001DD280F0D06D0D73C571025A5183961C70 +:105D000093450F45CC58A5866BBC02F093B3B27394 +:105D10008C506CCD55609840F3D8E379077C41CF27 +:105D20002CB6A9179B847A2C0B55A75E66F0230B23 +:105D30002F8B46553DA6B4D80CD2C58D1F3A92EC98 +:105D400082F1684C67B26B03682D711AEE7D9FEE8D +:105D50006B4F2A9E5999215101ACC594BBD856B8B6 +:105D6000CD5D31D8A993F9F3CF41F86B3835735D28 +:105D7000092A9A45C95FBCA2CEC79B57EB528FF147 +:105D8000025C66E66CA243D6A37E3F3D616281A0C1 +:105D900087E986E862FB9A2B23655C5A475C977417 +:105DA000B2F6E69F8A7BBC69967A747E89F6FA4AD7 +:105DB00048F641131090BD6B2FB703259F82B6FAAA +:105DC00022ECFA69DC4A95D17CE7C016A643443838 +:105DD000E2F71E1E815F78D87F2012C8CEF865F6E4 +:105DE000DCB3377B18056E76166EA965875F5D108C +:105DF000528EC8EF904CD019BC85088958D95E5F87 +:105E0000996B727F4C7D65CA80535CABB8B9ECE589 +:105E100029E4345A8C2F37633B339DB2000CEB5C82 +:105E2000850648A8246CDB7A03DB76B3768E82A7DE +:105E3000B73951CF2C5933B10C613335D5147AB8F9 +:105E40008F956800B777312C3EA999A8C648317262 +:105E50001DB99C980588423137C18EC4F013DE8C81 +:105E600095D66B17B040EE11DC99892E4923039328 +:105E70004F84A7B67178C7AE46826F891550EA6223 +:105E80006659E1051F092A6DDB02E8E07B2159FE16 +:105E900070EBA5ACF318334CF1A474304944829CE8 +:105EA000AF5D35F357AB9B2BE7830DC066A4BFD323 +:105EB000FC4BE2890B88570DD7DE1827465DAC0EE8 +:105EC000212838424DE5F347A7ADE94AA133196DC2 +:105ED000E62A1459E49B684496357A60BFF83A1B69 +:105EE00024AE4678F75ED3ED868E4BA9B2899640F4 +:105EF0000F1BD8F25232809F4510A591EFC2EDD30F +:105F00001DFFBE7EB8D23B676B932F1E5CC9F7188E +:105F10007133BB24AC0AAB28F30C598215977FACC4 +:105F200044C927C6DDA22F36DDE37027639CAEEBA4 +:105F3000E070F381471A3D5F56C92E27C5A8238C10 +:105F4000E574F76A53D67E1521F7F0455EEFD91A4E +:105F500091B986BA33C514F6A575574E4C3B577F99 +:105F600046FAD571AC4952EC834F522D6C4DC87F27 +:105F70002F0C3F5E7691D32BA9A8D6A331F4B68A15 +:105F8000D99868CE6ED090CFC6F753D42CC9C6A38B +:105F9000CA11A734F2332DF73299BB53AB01260B4C +:105FA00047294FF8BA7C87C4D47B512B8DAF48BCAE +:105FB0007CDAE16F60695038A769D39EB3A885EB9E +:105FC0009502D3E58B5774C3C22B01EF65DA90E5D8 +:105FD000E50B75543346E0674350986E8C34422A83 +:105FE000DCEF89C32A041B263F32512F2623DF888A +:105FF0007285C0CD4DB89938578AE80E53A44C62CB +:106000002A50C73271D764402C1A9951360F18F9AB +:10601000D4D1E1F04C795E367B585D3AAFEB9478A1 +:1060200072A32FD25F810C59D528832C96F0EF4DA7 +:10603000579F279631AB11583E1C4E25737CC7568F +:10604000CCACCBFB6E27E00064B3344A4295C775F5 +:106050007A29C7C9C4A9546A00E3DEB134F75E30B7 +:1060600004D76F8BE41FD4EF57CC308E7D2EC787BB +:10607000D8868CF418B405A815A721EF9C6BCF988F +:10608000ABEACA185F71937F4962B4FAB626399DAC +:10609000DB0F888BA205090003FF44B838A4E5C9CB +:1060A00068E406D292FDEF0BB95CCFB2C9311EF1A4 +:1060B000734B2147B180BA4D1A582A3F3F13A203B0 +:1060C0006812374D64581C49613210CD819E4ACC0C +:1060D000F9341A3DCAC80F1D52545A99F68DF15819 +:1060E0007DA2A838A92117BA1E52673EDD2BDA1E01 +:1060F00032AEA4654A42199A47447E58C9845C6B03 +:10610000FE81EB25A9443E38BB69CC3057BB59E131 +:106110001CB98DB77B476DC04E179FBEA65062E677 +:10612000EA6D16FBD7E7C362DB1F775078F9D63AE2 +:1061300064A505A2457A265532FE8FAD93867B393C +:106140007C2C3CFF5CBBE15566F8D38281BED97DD7 +:10615000E6B2D657DF0A53507F376E41BC8360CD1D +:106160003D637DCAE4CA272C785D4456A31E2A18D5 +:106170003DA9800F2FFF34A1700A32729086AC3A8D +:10618000255545EAF79683D1FBC417283624C3C8A2 +:10619000F414B159FC476A3FC999AD77B21B87FC2B +:1061A000BF1F803460E8400A522F799B38F06C5052 +:1061B000B4BB9AB6F213EDB57388856C0EA847F69A +:1061C000C102C1E9933BEBB91BE92B8C63C0DB2017 +:1061D000257BE72BE815FC3AB88379D9EBA593EF3B +:1061E000845C8BE88E45295512B531541DEE4E8BDB +:1061F000FA990ADBA0A088E92CB777804EF305D482 +:106200002299050996296C21FE33B4CF70B29A9C6D +:10621000ED4605A58972AB5BF17EBB94E2D357D402 +:106220000C65FB7B3BB4F56AB7A3D945F74F9AE100 +:1062300007550014C13E86F760E38156B6F239D2A5 +:10624000ACDDD937F98488FEAE8E170430F4257999 +:10625000D6D2261E49A4536F812F213C128FA1EB69 +:10626000539993B9CC16A72851799A7D2662E8886C +:10627000079D3FF554EBC6E6A0AC57B77BC9502C41 +:10628000CF692D164365CE33396CE77EEE458D8D93 +:106290008485B8AF49293703B672B52D82D8DD6D34 +:1062A000B1FEF3F0CDB6A4EEC44163C73E53DD4565 +:1062B000A6B59B58F8C62C7B1BFB9AF9E2EFC04AA7 +:1062C0003A57D9FA5D8EF5AC7CE1E95FACBD1C6054 +:1062D000CCAC38ED08022287CA964E4862AC3B0F20 +:1062E00024DC3739A36C4A979A3DBC52052B9CA4F9 +:1062F000D3AAB1D3BA350EA5397D475FA31B23823C +:10630000B07166637AB24E553488FDF67A55D97FFE +:1063100080CE5E681B948BEC72F32A524119F0E830 +:106320001B7447BEA52127BC6F826AFAD9CE48C725 +:10633000EF860D2E975261FD1E3678D68B309C1459 +:10634000782AC971D84C394B75F3CFBBF6C8A29BDC +:1063500000D3DACA30B614B8C477C4E194952133B7 +:106360006E5E924308D20BBCDB94411E71A995E589 +:1063700054DF89E51B4275B91A148DE4CE0C2571E2 +:10638000F9A1E292C5B88F4D1C792938B431800C3F +:10639000D9C3835579F3B09F52520C64367BBFDB6F +:1063A000803709D87B299E34AF977AD7E1217708C7 +:1063B000A4E18E6C2897905F408786B9BF1BE4DC10 +:1063C000B6B4953D33D6B0D02119FBB1A31D5B5AAD +:1063D0009B9E4FFDF584FF81FBB1F8B4AD02033500 +:1063E00032EE258C9AC7E1D6CC776A37D45037E4A1 +:1063F00033EEA54701DA5B0DE6E37DF66E88BF9FBD +:10640000F6D75FEAE09CED895AC864E73A03C845CD +:1064100028FA1C640B0F6AC9111600116B782CEC5A +:106420009968D107267B0FE07D98346A42F341C812 +:10643000F67C77318DA6AFB342571D4D982B0C7467 +:106440007242694615A91FDB995E9257635D78B564 +:1064500088F7182C5319351738FCEC5B3F9AC62C7B +:106460002CD7D1E2C6577D1C5C91169926C57E0CAF +:10647000461AAB159DBC78A0611A07C7B0FDCC29A0 +:1064800031E6C8D85DC8DF9F32979535DBC05383AE +:10649000C295827D84B98F57B2E7A0A95C35F554C7 +:1064A000F11F5ACAD9D59BF80D90E04F0E46D4B6CD +:1064B0008259F2178F7833E472D429C567362527BD +:1064C0003451935B9CC9E7DC7E21FE51494DF200BB +:1064D000EB4B2197CC8925A0A7E1F5CAE975F86AAD +:1064E000E9AB973F4CA1D596C0B10E237D964054A1 +:1064F00058EF44BB5269136766B8DA576BE0FB127A +:10650000C7923AD7700E5A4787094796217DA73D13 +:10651000DB09524D8EC1E019C2A084D271F01A86F7 +:106520007295D3C1B749A66F0F3423D591F3AC63ED +:1065300017FC9EE9AE884FD11795A32E2174B07C2D +:10654000C547C914916509D316E9F627FE137B4E9A +:10655000CD3E7B03A06B0C66C03A1D4655A088B7A4 +:10656000C77E14768C147ED0687FD999CFE4CD7B1A +:106570006C3047E53B8C20DD4D4E903AC7CA30F079 +:1065800079BDFBCBF06044B5EE1321ED2A395D44B3 +:1065900010FE588DDE608FF5D59C495927172D6761 +:1065A000DE03A83A49A19C83820F22102403246BA6 +:1065B00006449273306D0248656FA0D34256D1797C +:1065C000DB221785FA0C71D938235BFDFF4BDEE81F +:1065D000693DC335E491BB71DDE29C6D445CA773FA +:1065E000D4CB51C5F7A44BF238FA4D124323CC9CBF +:1065F000AC00F38DBDC27655626DB5FB23014E40F4 +:10660000422BC64CEC277BE67B6B35F99D154FA6DC +:106610002FFE1D4E06BA158E32A48A8749BA249ED3 +:10662000B148CEAAFAF3A0B033F65D29EF2ED04AD6 +:10663000D756C939BF5C0EE124E07DD9EE12BAEB22 +:10664000FDA79C83F8C61D138C4C67BADE7795E4D2 +:1066500019D7F73635BAD544BDD1549C9AEB428A46 +:106660004846947605D61F8DA1CB17BE931AD194B8 +:106670008711D8CD64BDD6275E98EDE3D14337AA04 +:106680008A1429E2BF91DE2E5D22247EC5A5FE0973 +:1066900062AD82F0157CB5575E45F81F3BD904F119 +:1066A0001E2B117A1CF0816F3D92FE4A9C37538A53 +:1066B000BE34DA85033F4797C7CF635B95F214DE9C +:1066C0007D04A358CD5BE5903724D77A61947D5142 +:1066D0006E8BD9921BE533A817F90A2F4CE58BF581 +:1066E00017675058A6DF59A1CA3C3B76744AA239B5 +:1066F00040199F04E35A8CE688449124D1C8AC7EAB +:10670000378B9564E25F258A7F0A556597CB1953CD +:106710005378E7CB5A675CC449108AE8B4F2BC2CC2 +:106720004FDCEA2273184F052F2AA4BC026DD41245 +:106730007BAF3345377113D1CD8480D1E45B77775C +:106740003878F7DACB288AD313F8DCAC3A5558609E +:10675000222C10C340DAACF5D34FDA1CF754FCA559 +:106760003B8CDD8A7F4D5C1BEB8138B578FF33981D +:10677000F8AA34EAA9E485EA88BD5A7C0DD32D3203 +:10678000DE8F074E6DB421D79C324C8AE8B949F3AD +:10679000B1FF08C0188CBBA19FAD941BB34497BB3D +:1067A00017C9DF47F85D0465D7D083BD62D4CA93AB +:1067B0004F0234F85B00B2378EBC479750F0A3B954 +:1067C000ABC96015D1E92E3CF0D4B66EE7B1C62155 +:1067D00063A80EC0CB22CBDBB697842BD261D7A99E +:1067E00022D193E9C2853E4131E7C780A14529C93D +:1067F000B27A4A3582D8E0AE0EDF0F5DE7F9818FBD +:1068000023CE4E3A1AD48561DF2603C3AD4C4848E7 +:10681000FDEA1FFE4424F865871C8479F5CC9D842D +:10682000CD39E5789B7496C11B4DA89C0A87789E4C +:10683000A36C57D702435C4768B823F5B1F7A0B9FA +:10684000F3A336D1D1D2DCD64924E2D667BDF5B365 +:10685000098CAB78C865162CA146CF28B68CC81613 +:10686000D6785F5829E74557C21E134B242AF0B348 +:10687000362A1784D244323CD24065DD3432815A04 +:1068800026BB4BD38600A214FB965993FB7E815402 +:1068900036CA798696471EFDB411F7DE6F2CE50ADD +:1068A0002600873F908D576A922EFE1135FBEDDB57 +:1068B000FA5F46BBA6A49698E9E49A597EEF2BC5E9 +:1068C000833D526D753740F484AEDACF26442BF405 +:1068D00013E864680C74EC484A8C07A5A402F656C9 +:1068E000564D0CC5CC2DCA1D87949308BEF0639BF2 +:1068F00027EE81B55896306F2FA754FB7EF44DFCE0 +:106900008D05077229F1E7F0DA5E750191E95750BC +:10691000D69F49D956BC6D3954294C8D52125E1AF6 +:10692000A209664F6B215891DD05007CFDDCD3C1C7 +:10693000FC0EE0F267DEB57F29C712A8F63A045EC6 +:10694000E979865A5AB42EDF49E7059B04506593CE +:106950006FFC0D4C524867C861A5B69E555804237C +:10696000BD08ACA978DD27F3FF7A9D56464BC412CB +:10697000AAE5B8A43EDACF3FC057C90DABAC189614 +:1069800021A6870120FEF292A9FCADFF8D02EC3911 +:10699000F68A82492A25CCB126507E65A590B8ECAE +:1069A000695E257F2CDB0BBB7E286C0F2FE75DDA41 +:1069B0007AACD63F98E103719BD5F428E6F8BA8CFF +:1069C00036AE5B5164DCB87DC050A5F3B72AE565EF +:1069D00008E7FF902BBDACBFD2C21ADC6810BB2BFE +:1069E00081B283D5B68B7F273AFF47D10213BF19F7 +:1069F00047A0077DC8E9511198736CECFC1BFF326E +:106A0000B5C110646A1A3D6ACA592F7148D98FAD51 +:106A100016DAE90CAE7205CDC1FEAB844D782907BC +:106A2000B8A99D44BC779AF194140DFAA91E3A01B5 +:106A3000C6C7F92F2BCE46A9B1D7B7F98C8572C935 +:106A4000855CAEC413479644F7C529E6309C099A85 +:106A5000336576E5345006E9945B4E64F3BA6267B9 +:106A60007ACFE071584998080E4D065F9ACDE78DB0 +:106A70000923D2C117249770F9F3A411B340284316 +:106A800045E3D8D75D11FF2638B2683CA92111A88B +:106A90009DCA3ECAA2FB259C3AC87D0E0A4B72CD08 +:106AA000A5E14E042E60B3454C2F4BFFA73C7C372D +:106AB000F16F0A6C061F7433A5D1B3A0E6C2D4E30C +:106AC000B01F14A711CC527FE60FEE1B27BEB35F99 +:106AD000A5A8D636298BA1EF9CBA515494C0325147 +:106AE000C8ED4240A9FE44303F3215FC8DCCF4E1A4 +:106AF0001AB988B5AD0254D66254D2C314B7E2CFE6 +:106B000050C0E1A01A3EF3A58AC22C5AE20B394EBE +:106B1000B8CC9B563B05A6FF81CDE576C6CFB2D457 +:106B2000CD71C36FAC4D3F4545FBA4F81395BA87B3 +:106B300009733BD317462198A8C919A2E9D5C442C5 +:106B4000EC0130982DBDF77761D8DF0FF78B4D053D +:106B5000C4E33CDADF58D0649898398682B01038A4 +:106B60001B8D59283A2206CD7955C874BE06490CAA +:106B7000DD9A48E9DE59967F61256D7B5432A87E07 +:106B8000A34A500AD46806066DB9099B295A7FFFAB +:106B90000487920B0C0C4B04CEC4CAE142C08A029B +:106BA000E353144613399D1BAE3BD25BF71115F32B +:106BB00089103F2C2908E983783ACCB550A2FAA86D +:106BC000D3E36A292F0ADEA1C3D1DF95CBCE611AA8 +:106BD0004F12169E89CFE25A56C2E998C1EBD7E010 +:106BE00028798B46616FC308FF469758C553C8F78D +:106BF0003F42A70598BC7279F54A8A738B10D4116D +:106C000021A1928E23B20C797AAB3C541D34552DC0 +:106C1000F9533D5DB55AEDD9BAA28C9C1B661C6434 +:106C2000E3B342A0E1F4E89B89AB5140A658861E2D +:106C30007D19DC585EAEAB24AA10FF61DDB1BF2B1D +:106C4000C619B8B467EFADB9056FBAF84A89DFE382 +:106C500069E5A6F47CAB88873D75D154D2008024C9 +:106C6000BF5E01A348639F03DD2CA9C57F310419D2 +:106C700028A86F7F499B0DFBBF167080EF1EA8C828 +:106C800057D47D8EE7C9B3FE374F5B600D7BE9FBC0 +:106C90007EB4F481B46077E7EE6D18203199477DBA +:106CA000C671CED6761E67D6BD74B961683393B10E +:106CB000328AE6783AF324530B800EBBB7ECA25726 +:106CC000CC88420240E0E8BA481C029CBD6266CF14 +:106CD0003FC4091924D1913EB9E73CC498F2052A72 +:106CE00063B59B3B554B2BBFC9BC715B54144AF831 +:106CF000A89D94B38B0A4C67EB4A419FB1E718E615 +:106D000061BC8B8A12CCC96D484517114631414F81 +:106D10009E8641E3AD62B586DC7098F75A3F77A056 +:106D200067DE3DF30FE0990222D97A62F14DD5CFAB +:106D300004B1BD4376009B90983D457D6D89A74683 +:106D4000C6066DD422BC37C02442BBD85E04A6C0A0 +:106D5000BE759B66FE8C6FCA83A3B1B13EF486C537 +:106D6000656E9C074802A7495BB13121648293722A +:106D70009C6E2D94A63CD12F7F7F3CCBD5A493193C +:106D8000CB6609C5F48B7853621F71C8F981C56A57 +:106D9000B31CA0CEC444D51E766D702606CB74A855 +:106DA000DF48CFA8B19C66BB45B063D0EBF8E1D318 +:106DB0008CC88B2436C7E5A4E8151078021D72CC68 +:106DC000F8AD2A5E8E35673EE738C2C8A640B8C91E +:106DD0009DE216C0E70119DFF60684AEF634DAE567 +:106DE0006916D39F4EDC8F5FC085ADF84D89B9021F +:106DF000A794D9700D1E6B7F6A149F3B79BDF75D18 +:106E0000E15009D47344658A817CEE4CFF7433AF42 +:106E1000D4DFF7B1A6783CC9B90BD4767C870BAC2C +:106E20007764D43D3AB0D8F647E0BDD724B74F11C8 +:106E30000EBA6719D00383181B9BDC112A5BBDB9FE +:106E40001D6FE81B049B94205A3ECDD4B4EBA32FB6 +:106E50009BF6B8FD03AB75712D33F217FEA1BEE6AC +:106E600041CBB0E41E6BFE015B9F7B23244BC9A585 +:106E700099ABA1E287CB0833E598E650C960D4808E +:106E8000BD0DC05AC5BCFD0FEB2DAEE6A5E24C0210 +:106E900083E26A7FC56513DB5044C1B91B4FDC7CBC +:106EA000D2772F896D6FC76413EDDC3B51888ADF81 +:106EB000929D989877A7B761F1482ADE894CA8E699 +:106EC0008BF76B89E8594C0DD4B4891598651F0769 +:106ED0005AD4EA17201F8D85D05EF4265AA7ECE21B +:106EE000575ED0BBA957B68FA1416ED20354919380 +:106EF000A67A82E3B0150ED1764FC970358ABD747B +:106F00004A192AB4E6259C98633897A00E6E3B8BED +:106F100085E9337832ABB637A7C9EF4B9B1146668C +:106F200033BE013077A57CD790E83E1CF360109DFE +:106F3000E8E431CDFEAB80E851CE82226F2F5E7146 +:106F4000587041ABC21C15B523FB76D5B3015F5217 +:106F5000A790C7CCA4BC60E0016F4BE7BA89B5022B +:106F600084BEF7E1CCD48A4397B78EF8185ACBEE9B +:106F7000DD1F9060944C1997CC29163F581C90E760 +:106F80003B07B41AE6BE9044BB73318CC9C0DF62C4 +:106F90003AF442365F805B294E92033460FFA520AD +:106FA000322A5608CF5A6FAF94CAA737B32DD624CA +:106FB000D75F27B9D3B6867AC6144555A6B7953399 +:106FC0006CCC1D4B6CCCA3EC36847EC635CF2AD35B +:106FD0000A6D378DA782ECEBA230543F18A1075FF2 +:106FE000719868F19B7BEF2D8402056414EAFD0C17 +:106FF0003ACC9B2228A998170519C97C0617953FFA +:10700000CB32997D26AE08104D4D3E60E4D7A1D21B +:10701000AA47FAE8C6934039E42EC9D3B7C76E8DA4 +:10702000FD828B3DEBCF44C29BA6E59FADE5911958 +:107030008D97E41F3228DF555F8B6B6FE21A276A4A +:10704000800BC06068ED6AD4471C77545B05C6BFEF +:10705000CF155FCB3320313983727C005225304FFE +:10706000470DD28D9541E2C5CAD8848AAE49B18E0A +:10707000001A7652883B188E393D5DC4CC7EA12A19 +:107080003D4CC2BA9633781812ECBE4C657D8BFF2E +:10709000D59A42BDC59F29F909926497C3482EB37A +:1070A0004718313331496D8A98093FC6834CE02730 +:1070B000A84397EAD4F09EF92C22BEBB0AD3CD0494 +:1070C0005108A5BD0F9ACBB24C6A47BCE7AC7134EE +:1070D000E8EBB6CFCCB58ECD25EE2F6980A00D8024 +:1070E000CA8E42F7EA0789A35D00BF1F59B79631E0 +:1070F000038451204E1A765B3A80817015F2BE826D +:10710000A01C088F4FEB4552BA89EA59E993D56420 +:1071100024250A3C25BFE1E7E34C1FB1CA1F78359F +:1071200023AC41531717970F2BE821725C4D578CF6 +:107130005BB17919FF01545CC26D60FC9FE2F354AE +:10714000FC346B80B88E1D54025AA1803E55BA1291 +:10715000E36A86A440D5444B4F774E3C0D851D34E1 +:10716000073331C11A3DBA9C50E136260212C79C42 +:107170004347B1660AE23B20CD08EF463ADCDA2805 +:10718000D84553A3642B95597CA134B5744E6E2910 +:107190005538FD40014A722FC4C4F86C37823FCA8B +:1071A000931DC355491DA2B3CF589C5F8BB687383A +:1071B00082F6F29930476B9B0B884C95F8D14C6D59 +:1071C00066C26DFAA2AA5F649E767D91FCB5FAB69E +:1071D00097015DE854E947927C955977D2A70A94C4 +:1071E0009FE66C83F16911AD6CF573441C566DB864 +:1071F0005F9E01BF5408ABD855248A42FC9936786B +:107200007D5948A1BA6AD5BEEAAC624BBD0CF84EB6 +:10721000095848EB439165D7A88ACCC7C6ECC08112 +:107220008B6B34794A215A9B7B57CD34A6A3063900 +:10723000F4A6487762B7CDE84E927BB86104DFB41C +:10724000B80CD6C7C4E7A8400FB945CAD31C2597C8 +:10725000A425E0F57AC55CE40F0D6290EF75840C0F +:10726000F054010F6A6AC902881E628C6105B5502C +:107270003DE51672B3A43B1C41CED9E9C236372195 +:10728000BF201C20AE49F4378FB616F68DB71B0D04 +:107290000E910888941EE4AEDCDDF5CADD0AA13447 +:1072A000585144FE721680CB0B1AE92DE9193B2E7A +:1072B000BECC04683B2C38AAEB98E884BB933FDD36 +:1072C000E4E3A3B9542CA2089BF84646052568DEE2 +:1072D00014DAC9FDC7AFEFF45FDA23D08BE692630F +:1072E0007F7F977E874770C38F42D68281D5DD2A04 +:1072F0002FCD67035CDDEB308F968391CD462BA3BA +:1073000005E48E91BCEE89B3A2CEA528BCF3ABE711 +:107310006CC738B6F0337AF65FB7AB5B5C4EE341CF +:10732000E8FFFE8815B1EFAC2A2744ADC174BDB3A8 +:10733000078BCA0C7044C0604945B0A6E135E4CE65 +:1073400057EEB74E4BF6BA71385CCEA07EB00C400B +:1073500041F1548503D505AFA5B976F71E855D2AA1 +:10736000D0F518445DF593402F431752422B2F2B35 +:10737000B79DCDDD055FCF368B623CD4E3F0FF0FC8 +:1073800042FCBDA1F9DF5E50CAAB0D28580DF79540 +:107390006AA8255146F6274D944124E94D3A0258F2 +:1073A000A6C9B62B6FE476791236E9EC4A06074790 +:1073B000EBB443BF52373AAD7323C23D84C8F55492 +:1073C000B11F1F033E49568BE495556425DE832289 +:1073D0002D5E9FD9F3FD988CDF6A397E8671919C72 +:1073E0006134C5B72EE076FEEBF47242CC984D21A5 +:1073F0001A39BC10C1EB343034D4425C2A108E1ED2 +:10740000C1CC4C5D3659AB34BF88FF6C9A780B68A1 +:107410009E0A2E1A60CAA5116D7EC81036886DEDC1 +:10742000B9BFD1E3D6BA9247BB4624BAFD565E38FF +:10743000F21BA2BB3691E554CC6F4F6BAF8879C479 +:107440004B84BCDAF5468F888C6E9801F7EA5FC2F0 +:1074500016D76C68C67ED0B81D7907626FCE70559E +:10746000FCC2D344E4634AE33B60AF1F8141E98B34 +:1074700056F8E33E29EA007D8B323B216B00354014 +:107480009CC2BF7636EF1B7D39FDF5356B348B2BF7 +:10749000BB4601DB92AF333909CBD9F6AFE37F4965 +:1074A000E62578DB866C70DB08BA7490473FA9113B +:1074B000E36EF47F04434741F019C4B6B8B3825475 +:1074C0004CEA88FE20A7DE9302A74BC1FB4763ED81 +:1074D00089F4C16754F9B37567F39A1FC006684011 +:1074E000F84626F7B19DFC026425F491AB40454B6C +:1074F000B670EBD5CFAAE1DE396971D3C7FDF6D1FD +:10750000DC7B0905102DC5A33CC846B9BCB283B3CA +:10751000FFC4C8BDFE7EE389C6BF17C898F9585599 +:107520006A02AF25D9D74463FD8E267971ADF56027 +:10753000BB5067230B5D150EEA685EFCFDE30B7C18 +:107540008E059BCD25968E5BCD43A3464D779EDB66 +:107550003BA601BC22ED9C466985EA918291FE52D0 +:10756000731D93AC1DBBF0AC9E5CA64A5F10638D8F +:107570002964B56F7DAD7DC47B637C886902799495 +:107580003F62BCAD9404D05CF866EE01C884DBFEBB +:10759000FF9C150ADCA8811C067508C159E9052A5B +:1075A000B71BDA461AC69BD2061E4790EF0B549DB6 +:1075B000FF902D0FB749B1BF2E58A6626A9EDD29F4 +:1075C0005EA1F4A9F1154280233C55D9A1EA7A6560 +:1075D000EE6280184011E7C68B125E70E46C0357B0 +:1075E000C59DB816C6823F3D041562D85B8AD8484F +:1075F000CB02DFA2F7E51761BDF9C9D5D1071F4856 +:10760000D7F48DD64EA3CD7F2DC03F5CA8A44E10DD +:10761000E0A04D10CFC59430513A0CF874501D4184 +:10762000F49E7A082B035359B7C8EEDC91B196ED5E +:10763000007C37A745A3A7DA526168B9E175A52B8D +:1076400084CEDDD94EEA04F0A5BACADB249D61469A +:1076500062FFC107FA3538BCCCB55CB3EF635ECCD2 +:10766000BD7057018776CD658562652877DC428CD1 +:10767000C9CD1C644AB507FCBB2B452A14F3EDAEFB +:10768000AC5C2079286C3437BCE250A347612BE115 +:107690001E23435F7BC5914FB2815B69F034FA6270 +:1076A0001DE96704C2440064FDC9E77BFC1CD55991 +:1076B00016A4EC9CCB64E55CF717E1A953BD1DF360 +:1076C000DB87AAF8B3E8B65841A0F600A3C459DD99 +:1076D000DCDF1E64FEE7899481B87D16044F489B69 +:1076E000B8B2040E8150919BF9A42FBD42AA1ADBB7 +:1076F000FC413F7B0532C85878A3CFA0151CBF883A +:107700005B4CD60ED308591ECE409544D553FB6B27 +:107710004C9ED8A2965AD0B7B07475E1AD9CA7E53F +:10772000F5A1C821FB628FCF11747D7F82070F2CDA +:10773000DD5400027F319180A4A5C10766F76980FE +:10774000644D80AFBB5A98D916D37ABCFCD557BFCD +:107750004EE929556B6869ED3CD0CE2AB6A230209F +:10776000A40378A5EB11E689366C8FB0F837C8D53D +:10777000CC5B7E1E3E97E4C7309B5ADEDFBFB9D498 +:1077800027576107DB60D2DEC00E4016400ADE3E9E +:10779000C8FFB108B3D730F1FBA791623642D609D2 +:1077A0007F357031E6FB008368DF96F4701F63500D +:1077B0009F7E24DF455593670D5B632F4A12A21EFF +:1077C000EB3EBD39D0470C40EBAC51469548D2BE9C +:1077D0009B1D11AEE0527864545A83EBE9FF199671 +:1077E00076A9A301C55512CAED07F00E5B1FDF9EF7 +:1077F000D65860AAE19F0A3DB15176BCD05DD33224 +:107800008087A5DFF8461AE855AE62614B20C22B8F +:10781000D533DC68C8FDB30FF5C4A8FD283C5A96E3 +:10782000F814FC2AADF64CB03B7165F3BDE00237AD +:10783000AB7529460438312B8A03536012A3866A3C +:107840003389A979CFCDC2C2340EF9A5944D602EEB +:1078500002B600B2B7C6E173A7CDB5EA20DF48672C +:107860009F4698F59901E61D1FBA0BF5568771E002 +:1078700028CFEC5318DB184CB68F50654AC22E81C6 +:107880002CF07D13751428C7304582EE60211A7CD8 +:107890002C878EB86DA38A5F1D0CFE87C9B261F874 +:1078A000A1A981F6AA521902C387843E0DB3851699 +:1078B000FC1355F2F2F47737E9E19907D37D625D65 +:1078C000A8015FE326F5500282EFEAFFF8A61AA0AE +:1078D0002CC7EA7C93F235504F474BE5EA1D1F4B0E +:1078E000838DA923F34911995A02E05C3BE97C4658 +:1078F000E41312E44B7F963D5CB33F1FF3B50DCA12 +:10790000A23DD8E93245639490CA6814308CE4A251 +:10791000BE82F44641358D4880C1611FD84352B2C2 +:10792000AC234C88B73466356F1A9416C8B31C5311 +:10793000E6068C4BBBAB8B5503E0D2743CAD91E6B5 +:10794000A24F75B26203642E0EEEE9F3E88387E777 +:107950003986A78344C28B8176343D1065897CA02B +:107960009D26BC08426252A54D5CE36A4CE37B82D3 +:107970008EF54BA982294790980B43F279EC75322A +:107980000B2DF05234E92293C31C158E70A9473D8C +:10799000CCB0FFC48D3FB96308C6BEF6CD903CACF9 +:1079A00029A40E36CAEA9345B7C99156741FEDC192 +:1079B0002475A6F7C1C5A6C88AFA1BDA2275CC635E +:1079C00013A5658C6088B02D3B84DE07B5E5DD34FA +:1079D000718568D8A59E5C78B685DD1B0D4C911E1F +:1079E000D6ED2FBF1C0F69A3B633E9C0CE2A1811FC +:1079F000AA550A09446A24AAFEBC579BFA419C3244 +:107A0000FB1EDDC99864677927FA439EC9A66E40BC +:107A1000998DC10CF2D33B6795F62ADB11F9DDE9AC +:107A200038C65A473AC4E250CC3A95002AA5FE63BC +:107A300031021CE470839586AEF356DAD0BB7EB279 +:107A4000294D7629CAB415204F6BE70A26B4DAA966 +:107A5000259C54616FC51A448902F2E877979432E5 +:107A6000C0C33083BA9FE404FFE4C50C75AC5F8AE1 +:107A70008EEA2C09FCE26E801181B21EDD58E75FB0 +:107A8000C346CB76A740844C43DDFA84F9CAD2388A +:107A90002EC44B974572C7B600C2363B782CA8FC63 +:107AA000588B9B9C0C59EDACA21D3D2516AA7D3828 +:107AB0006F10734AB748D45ABD15C380E55D7A7A12 +:107AC00038D40FC45AC64086B6E5038B8092630251 +:107AD000C536BB1BDB4B8B2AF8083DE09C9D491942 +:107AE00074A43C36668C87F86AD007B6F940A8BE05 +:107AF0006D05CF9EDA8F49C91980E53E573A840C4F +:107B00002076DB2F71A0BAAFDEF051B7A8605EA47B +:107B1000E3DDAF8B04EC5E22E3FE7056FB1176EEE4 +:107B20003894980D0FECB2ED9469196F9384ACCD35 +:107B3000E56DF2333340C130B4DABC087478C192D9 +:107B4000A551B3DB7693CA769BE3D070AC554E3229 +:107B50007EAD330D1D78D543A1B4532C8F20ACBA24 +:107B60005FD8B1318CF35CA89760CE084652F4021E +:107B700057339919DB359F613EFE98746B78F91B7A +:107B8000553A39D4E1E83ECD895830432D24D0A769 +:107B90003F442112A328F23BC63DE60F4D5F7359C7 +:107BA0004F79B588D6FECFFF4FDFBEB2BA5EB0B513 +:107BB0007F0C8EDC820CF2840F0C3528D2133CFB38 +:107BC00042EA9DC676002EE2D24C7F2AC612173EAC +:107BD0000C32D5D48770018A69D9AD7B1F3DACFDCD +:107BE00091E424C04BB708757CB29EE950320E5622 +:107BF000A1D00A309D17B933F92195275E3D6B69F5 +:107C0000B9EC244DEAA268BCE0AE0657BAC905E655 +:107C100032654A46C9A2CA30353BB9B379A545A4F5 +:107C200017BFC911CF44325EF1A8C9E1B5CF0DDC51 +:107C300089FEB451B7E1BB7AD335C8DC6130081C8A +:107C400079BA4CB2A861D41D6DA247CABFC49D5178 +:107C500001C7FB1389C377DB97558DEB66980EA29E +:107C60003DAD2C7DEA6A47C1DA21BB4DC7DD1C9EC4 +:107C700075DCC13399F8DBF4881C5B28C45342EEF1 +:107C8000D66A9E681FC24618EE33C13DDB4039A359 +:107C90009DF5DF2BCFEF76AE66C26AE0853D90DAC8 +:107CA000FD971F5936CA613CD2AFFFD53E89811A74 +:107CB000372B43388C1CE10D7ACA00C0EB7F8EE273 +:107CC000624B0E73735F6BD94A2DD91F301BCE7F69 +:107CD0004A1F1204FB497CC3C6B4F41BABDFC7A424 +:107CE0006A3F7241469D411D616ED5EA5E733368FD +:107CF00060C241E7F753037A69A674173D68AF5B2A +:107D0000C5C2642AFE23021914A6498AC8620A451C +:107D1000238352E66D9D51D2037DCEF2D3015010E4 +:107D200049A4CB2E8F957A7608914BDF014475815B +:107D300019B78FCE1AE02907B51D81CA9A69A873B1 +:107D4000168101D2466CE44A7AD9BE420E24FB1E4B +:107D5000911208A762C2ED2C17029E5069BD06DB86 +:107D6000332864F67385AE0AD483D3112ADDBFB5F8 +:107D70005F8219D98447510C51D679AAD91DFBB31A +:107D8000AD1B6E5DF22064035AB2A7CF67A87DA336 +:107D9000349F595DC762A670B05B790E32A750134D +:107DA000401FF1564D70BDCF33B168A34477248591 +:107DB0007EF1B3B89EFE08BB4EBEA3A73AAB14AA91 +:107DC000C1D609BE48E54685BD3A3CBDC5CD3B257B +:107DD000110AD1B84653FB8ABAD6297E75F1495BA0 +:107DE000F7D1DF7CA8487EB8D67843266934483579 +:107DF0004F3E796A4583103DD4EAB385E335E635D5 +:107E0000AD37C9851AF19DEA0D299C74AA32E1EDBE +:107E1000D0E042FDA1F488010ADF2E3F9EBF1F1C67 +:107E2000AA0EEE83DF6111DBF3A962A8881088280F +:107E3000AD20220F591172FD6485BBC3AE66AA5FE7 +:107E4000A03EC640B830D571BC06AE34BFAC0F9E64 +:107E5000EDD4E8C327225120662F5D2DFFB8819510 +:107E6000D25A38AAB7C78EBEDAD1DC95A807BEBBF6 +:107E700048D90C4F7DE2A9D72556EFFC07E85848B2 +:107E800098EC113C26F673A6C51A4505A6E17BA021 +:107E900016D1D6414A94000B511FEF1FB2B423BB39 +:107EA0000924024FAEE13AC37CA40B16B45F771DE0 +:107EB000AB8AE2F6B91B97347FD68F99D71E4AA6B4 +:107EC000F61E5D41416E48A292BE51FC894006DA21 +:107ED000632335562AB637171719D5B6008C910883 +:107EE00014B08534A11DEF0F7DE80F7F48DC7C16B0 +:107EF00002120B9CF060A6F0C0D0D183C281DCEFEF +:107F0000EA6538F4CDB13CB52F71573BA15A6C4AA4 +:107F10008AF255D30450FC550CFC923956334D74FB +:107F200089C57C87C0E308B595E1A7ED9C4A262A60 +:107F3000337EA75D4AA6329E30D177F3EEF47BCE36 +:107F4000BC64371082A3A72180F7404C6718AE1F8E +:107F5000AEDB70AF0B63F246C0C2AE21B108F78C46 +:107F60009BCD368E8D4F6205404DA0960F4E6A6DAB +:107F700061FC5A54B81AAF018A61AC25ADBA08C089 +:107F8000515222181EC6C62F5154721638D52FC50D +:107F9000096E039F56429B05749FB84D107B0AEDF6 +:107FA000B15F71136615EC2E0EAFF9D583A4ADD970 +:107FB000CE64B6838E024B3FD4E2AAAC0DEF92E5BD +:107FC0005F3D6BDF6A4A1CAAA4E7A6EA9956D31F55 +:107FD0009EFED858860B7888AA21F6F96651C9BF4B +:107FE0003175CE2D911EA4BB5867907EDB171D9076 +:107FF0006D1EC5FE9C0121FBF31785727C40EA448F +:108000006BB25094C09F744978B1145C3D4AA6C9C4 +:10801000A6508A24F1DF6D253A732FAF6FBB7279BA +:10802000ABDF3FF2664F64F4BA369D02444A8E26B7 +:108030003FCF757B206B23C655ACFAB32C8B4A4ED1 +:1080400011C657C8A8B016CFDCC517875EA04F2849 +:1080500037CCD9EB7BFB76366D97587FFF20A56038 +:10806000011D7A56399D323EE03AC428CE677B8D99 +:10807000F97FA15D13889FC2D913DD0141C225F8A4 +:10808000E60AD91AB7BF5A93A9434F2B571B542D51 +:10809000D1488E956DB622459AFFDBC4275D9711B6 +:1080A000AEA945E4A2C2205C6A8D90837DC7B289E7 +:1080B000B951C63111971DF7E23311CF976CFF7795 +:1080C000130C0E1C467BD5AE75F6CE5B98C1DD0A4F +:1080D0003D50523468CB76D570E60A10939FDFC7C7 +:1080E000C0DCD4B288A98A27DBD4383199177DB493 +:1080F0006355867F36945A930FEE3613D183BBE7D0 +:108100000D131312C3CE14691BE9B1AEDAB211C15B +:10811000446E5257D7CB066CD1DD9370659D7E9D22 +:10812000FE56A601574863B7F0A9D0661828E97D26 +:10813000C72B2B493D8BCFC51C8884C3A45CF0DCC6 +:10814000A297ECE4774CF08C25FD63D26F97802FDB +:10815000A452C3E600ADE908917851905617FFF894 +:10816000B9AFD1EC59142AB5DAC63EE1292A7EC846 +:10817000AACF886F96569153652C207575C38124BC +:10818000F4508F62421F8B56DFA1882D68CA7AD3C4 +:10819000D8826185C3477132D1CCCEB4AAAEBCD6E9 +:1081A0002BF6981380288922FBE19334F821287656 +:1081B000148EB5B4448DA2A86C09832258CAF48CDD +:1081C000091638C83ADBD7FEEA625613B4FA01EC56 +:1081D00069BEC025F140247CB8F45C25847C05325E +:1081E000560DCC024A638F2FA05FE9150625028A3F +:1081F00010AF902EB2E5F63B2ADAD1DFB4B7AF115B +:1082000052F7C0D66F1E7D19F6EC300958ED73FF9A +:10821000F6E58AC215B57F6739E8B74BD4DCA7D33A +:1082200074FFA82B80B17288C554088660ECE8867C +:108230000E9AA2B90D3349FBD3730ECF4A580ED410 +:1082400066A29989B5AFC7DE7200EC72D6D98BA948 +:10825000FB859C517413C02AAC5223CFBAB10A8259 +:10826000AD17EC439A3A2898AF3B3AAB2E3C8AF7CD +:108270004D5CAA6E6FDA445CE9D6225836E9E14ECD +:1082800076DE8A652E44842EB6E27B344E187E79E3 +:108290007443C162ED4E9F48395AB1D9EA22BD8C70 +:1082A000B890047B5C8ABD753F89A49903BCBC0E61 +:1082B000D2DCB1509760521F484E395284DFDD2521 +:1082C000855774F84DBA75BD0D1C4D422E6834C0EB +:1082D000CA0FECDF72EBA20E4FE571FE4BC1EA5004 +:1082E000CBF2D64D01E6D20AE2FC95BBA5D1635C88 +:1082F0001ABADDE47741426AEF71C67D2CA2444A86 +:10830000DC12ECB72F8BA8652B9EA47D5A3123FC81 +:10831000DEF37BB54C337A39D5AA02B15F40AABAF5 +:1083200082CAE7A6130BA48ACB680889C54BD6621C +:108330004722B4F0B9D1BC050C2721E44B14B81C7A +:10834000D01F3740B3FC9CB00F85554401B9188B42 +:10835000805EE6EC23DA505279B369A1DCEDDB1CD8 +:108360001F73D394B94342ECF29D6EE54BA085C9CF +:10837000E32B7A12AEB86C6E921F5B1B719CDED041 +:10838000C82270246C97446F0A1B96543C5A45616E +:1083900023EFF8021F55756E158363271ADB3748E4 +:1083A000A6FADFBDEB734FF86A480FC495B38CD6BD +:1083B00000FE93E8753AE20B9923D2BC9A77E55B0D +:1083C000AC3EAD8D01139D536363C5E133A7FF4DF3 +:1083D0006A12FF338656434BBA81E75B26AF8DFEA8 +:1083E00038F8BFB5036CEF74105967E5625B27BAC4 +:1083F0009BBFDFDB89B10C42148304A4CF6D37D758 +:10840000B4C4A69F998AE7766E1D727C537305CD1E +:10841000AE4914BC88F5D59AB41AE39C4FA716ED63 +:10842000C93571B9223807E913481CE4724D5077F9 +:1084300099B857727F387C28F358730E502B7FEF12 +:10844000B294818B5B150DFE67D9FB2B60A295D68C +:10845000F3661195CEB0B04A1CE60E9019AC567377 +:10846000AFFB673A559662711A90E189EFB3906954 +:10847000BA2FE9AE063B336A521C5E9BF8DCBC0D9A +:10848000B7E8EF419F76648C8D36A45777BCEFDE5A +:10849000DA29C989A170A6B98C61A7C23B74961B61 +:1084A000C6376769B3EB99CEDC844DC2938E0CD18D +:1084B0000A5377B7658E54A8637A03B15FEB14A5AE +:1084C0001B0842B7B9EE2059E034A7A06D0C23FD7C +:1084D000508839582B704E77AB5518480908E8E496 +:1084E000EC20DC4DB77C3F752C4B23FF4127A07B54 +:1084F000FF67959AC0C2E62ED838569A4B1810A33B +:10850000B4F9CF09BD96F642DAFB3DB1288A014F96 +:108510005D38362B0EC2C0A5BE2FEDE357657BEA52 +:10852000ED48B7AAA579B09AE9A463B95A267B8821 +:108530001A335CD7F5482CFF73ECC1BBCF31601107 +:108540009C11DB3F02486C8ECD5D527A7345D54558 +:1085500048B4448395426B36A05F60EF25A7A41C06 +:10856000F8F2A23BA50DAAF63EB320E14E02BF41B0 +:10857000725665877A1A37071C8D91BE169A6EBAA5 +:10858000A1D60D79B1A99DE1B3C11036E917BC9907 +:1085900005A7A8B51AA3B7BF1762E6A9DB38533001 +:1085A000DE03AB432472DE1B188365F6350F22A66B +:1085B000A478E0E22895049DCB65E77F228803BD7F +:1085C00023D7D60D5D2AAD7D5812AFA22382E08558 +:1085D000DB5B1169D87402E31DA02024478E0E19BD +:1085E000EA4DAC137FF360269FE37FC6A5E9C45430 +:1085F0005CD9E1DE9C74762C9E4EA3A727D095878C +:108600008025ABDD4260E8DDE8CC885A46AB539666 +:1086100036B6B9FD36D89532F154AF753E1EC40A50 +:10862000F855AC2248F3B1CDEC93CF95901BA0C088 +:108630008A50E459DF4B4B6D268DA63D94CAAED3CC +:10864000F9133B1615C0E87733054AF08542B1AC03 +:1086500008ED8CB9786697CA584F53DE3C504028D5 +:1086600048354907A9659A3067BCE28562C03DCDAF +:10867000355696E41955B3031D5E85AFA43BF0B99A +:108680001C1D3AB61D6350D4C67364D273A75C54E4 +:10869000A2AE5C0FB02D2119EE470C5B835D132059 +:1086A000D1DFF4FD9E503B09420BEED1BFFCE8A4A4 +:1086B000223EEF53D3BFFBAF0533BA78B8D832A40C +:1086C000E5D3321D035C10E66744B1A5B4014077E1 +:1086D00066AFFD72D46A2CD36079A7A428EC4C61F4 +:1086E000FB6B5D6C860BDF6E34183473436A73A7C3 +:1086F00000A68C0F55341A871D9CFFA5DBA759A730 +:108700009923CD754DCDFC8EE107F7EFB59C769A98 +:1087100079DC163020543450966CB18D207A9874E0 +:108720004D0C56904779FF55C3F2D69F01EF9F4BF2 +:1087300069EDF811232148D940C29381DC196230D8 +:10874000CC4A3A138CE43CFF578BCEE46CDEEBFC56 +:108750005EB136D96A9E8BB696B4206440CA3F0A91 +:108760003AEA976CF41EF431C37E787F9951C53292 +:10877000C140DFEA623880DE8B7E5EBF8CBA770450 +:10878000BBF6E5E5E89CB6F620D7748B714864F13A +:10879000A4F269CBB901F7AE70CC08DBB09893D6E0 +:1087A0005D795CC56BBB23ABF29F346C26F5E48E20 +:1087B00066929F9B4BC92B9E7631E66FF1C3DB49D6 +:1087C000F818F41198A80C309A63F18EB6FE9BB994 +:1087D000DEEEEEA59BEC2D1AAF0C9A88DB355CBA69 +:1087E000E0659775F6770EBFCCBA24D9E3F2232A59 +:1087F000DBB428E2E8DAF8B0D9DCA906B3195EA93F +:108800006C6D04E419584E2892BAD80B6D42B98D9C +:10881000AD5916761EAEB39C7EBB5593152A020A3F +:10882000709A10F3708163ECB59BE49C2BAB1E43F4 +:10883000DBDFF0A2375118AA7AAE44C3E438473AD6 +:10884000FF791F4C952495D43FAF904ACEA8DFB155 +:1088500029E8A0D6AED9F5ACB8854170AF36EBB9F2 +:10886000A1A82C7301817D2D73A26F7DA06D48A3FB +:1088700055801E659355A192C8283F605667A3880E +:108880007CEB9DCB01F3AE1104808624FC8918FE9D +:1088900036414EA980D98335E65CEE82E2307B28F2 +:1088A000864899C49D694C0DA5FBF31CA0DE84F697 +:1088B0005AB52F828D2B1E50B6311FE79FB1F3BDE5 +:1088C00077B62B83924923E537ABC6F5DD0F677189 +:1088D0004EC9CA662A5514429100073E12E8613516 +:1088E0002AA78A7A847E684AB0E7BFFFFA2F4D50E4 +:1088F00042C240381E5259ED3E9BB3AB023019C103 +:108900002C5D1C3FE808839614E2C298E5D8C9E5BF +:108910005B3FAC110262E234BD2903081E049C9047 +:108920007270960071637EEC1FFDDEB2B5369576EF +:108930007C8172EF7358CEC45A90688FA97EE5C3CC +:108940009F2C5C4296B01A38A948202EA9D29EA826 +:10895000CEFE1656747859EF2C7D154E5544B4EC66 +:108960002C268CCA3835E79E53C2E699DE07680F7D +:108970004779369ABDD16340EDAEDDB763EA0E8C20 +:10898000EB0885C1B4891D9C2EB18D5AD5C1BF7429 +:108990003DE99B91CC3CA97218FBE1048E376EFA3D +:1089A000F27442D712708C0F998E75311DFD3B8E7B +:1089B0002B95A8E4D439B102FA2726490F1882D59D +:1089C0006DBFBA9FF70CB41F0481AC7E8AF3CBEB6A +:1089D000A053B38EE171BFBE6BA50C383F7C37E26C +:1089E00021480E5DF499B62C234A9D9137CA238AFB +:1089F00067613E69CE350CDD6F04E634A0F5D10227 +:108A00005B6880EE071BCB234476E79BD860B616E5 +:108A100002D1CA6011EDB87ECBADD39F77BC32E0F6 +:108A2000CDDF5220FCE64C82F444AC95B253BAB38D +:108A300071D222F9CEE3AD604EBE524A02EF8027DA +:108A4000D9BE1F38DE6030F4484EB7F337D3412D1E +:108A500095D5D2CA129305A6B196471FA843915740 +:108A6000B07FA5471A99CFDCB617E06EC4CF4CB2E1 +:108A700012918EE0A011D1A3B434B7627473025C7A +:108A800049A73F71523E4BDB597BFF18C7D77B7E0E +:108A9000595A49B1BD27000E1C6ACF880DB404C7CE +:108AA000B2F46E83CFE1201FFA4C43903B67D12094 +:108AB000A1F588D9FA6981E98309A546FCF73A3A14 +:108AC0001709A0E772DC94DDC999EBE022F815E400 +:108AD000F9E924D6EDF72127C77B21EED17B70146D +:108AE000E956112F61B44514F7F9015E52F3A23033 +:108AF0001C2690FA27742DF39C20995EBAC07773D8 +:108B00003D8906C8DA3D28246DB64EDF3DD5377560 +:108B1000BCC0FFAE20395A46D026339997F356CDC4 +:108B2000797F0DE197AF1937FE05BE3272A39D3BE9 +:108B3000EC80BFE960CDCF89DD537D3443E1FF3662 +:108B4000E99A000B3241DB6921F19C6B93FD132004 +:108B5000A717D71CACCFF4D614EF5CA0EA70FECEFA +:108B6000A80DAD47BB9772A303F8923AFA71E03DA6 +:108B7000B5BF49440F5DE395344307D2A7A854AB72 +:108B8000A2FFB4EAFEBAACA506259CEB8045C8F866 +:108B900050A63DB23588CA7E921B1C6DFBD725D0EE +:108BA000D0AB2CB63F3688BD27F2A402D5D44F9463 +:108BB00022B4335CC20C6CB630FC48061066CC693B +:108BC000D4D314DB0F32E8722F25A16290A72A9725 +:108BD000CE3DE3843A06274ECA314AC9F53390B1F7 +:108BE00058BB773E7F56D9F60EE5AEB0612B2E5FAF +:108BF0000ABE0D8BB17136DA5BDD74DB42A550F233 +:108C0000DF755342BA8A1043517035C63542E3C509 +:108C1000517F7A09FC46DC21D855315F783083AE2C +:108C2000D6453EB19930EB4F223C09C7D1FBE8074E +:108C30003C6F850567AEA14398D0764CE397D1B2DF +:108C4000351E86BF7F375A8288FDCB396DE08C9503 +:108C5000A054932975C50668AF8DFD281A79E5E003 +:108C6000DE1EEE4C57C0264794A4DA55E8BE8306B4 +:108C7000F909027FD4EA9502AC2B021B0D10ADDF7F +:108C800063ADA70E4BAAC0032B15FA0DE9452C2E98 +:108C90002BE1438BF4E0464891ADCE22B28351EBF9 +:108CA000368F268EA1DACD39BE08BB71BB29F89C60 +:108CB0002D6BC395DF0487DE3D0D814AB86C6B5880 +:108CC0002E65D4BD89A8E152D7D91E4A50B4E866B2 +:108CD0003B1F82F9CF6D3416CF8BAE5E78E12E3D0F +:108CE000FB39F71C5173CFA7846F0E683EE4C2CAEC +:108CF0001CF745CEEC3405A75B6BE8B70F9F2DA999 +:108D0000A36A9265FC67AA5D905A33A933FF98BBAA +:108D100035F68A5085D67DD30CB62A3FAC832A809F +:108D20008154F845490625018D9CE96FB7300D3D0A +:108D300009D529B62470091FEDFE4E5259708E5C7C +:108D40007DC4177163BBF1EC3384794AB2AF6AE535 +:108D5000997246D3D97A2CDCFB61CFBAB2FDDC3CE8 +:108D600006AB9441AC710B34A61ECE7FCD3DEFB562 +:108D7000EA58AF1F5DCE72A94A633DFB07DE8597B7 +:108D8000ED14637CE973848AD37D4620C74C6BC89D +:108D900021E7E9E715B978182CD177D2196E295F48 +:108DA00021F2358A362CDD786CB04670AC64B2B8EE +:108DB000CFAD13D240B059CF4EE15E5666BD1A35E5 +:108DC0007DDC71413BEA42A651BD00818897DDD32D +:108DD00046464124FA4CB25BFF6E2DC1117AC9F2AE +:108DE000AE0310AC02622FE272D614F96DFB789ECE +:108DF00076ED4FE2627A90C677373985925AFF4412 +:108E000018161C9D6E42C7B6A73D1FA0E729012E6C +:108E1000B35C716D086643F1594333F504B09F8428 +:108E200023AEF0EBDA84A0F898789A0C5D5EEA2421 +:108E30000720C22802894B3A3C3D4BC73BD269D739 +:108E40007469FD203600D81EFF8C22441569F1D6C6 +:108E5000EBB8B434F85DCC291953BFAAF48F349C15 +:108E600032EB8C8C42130EF51BB169DF0E0C808B3C +:108E7000A144CF1B2E8843C5A8FBF57961D2FA34F3 +:108E8000D34E1339EC679A1C5CC597851DEC1F3FC8 +:108E9000FA0B24C8754F9059456FEDDDA36481B579 +:108EA0009CE922AD8108E9736ED09BEDF571CD8808 +:108EB000E6B9F8E76E67BE7F223D292BF03AEE4314 +:108EC000507A74E7CF20D77676B317968DE1BBC67C +:108ED000595484B90C703DCE6E7590FE78D15540D2 +:108EE0007702DD3509D04EA6D285870F63BFB1EA80 +:108EF0009584109A9FBFCF61D124A9C1D36B6B48D1 +:108F0000360E14B7261212C414705D281FF09DE0AF +:108F100099549AD31FB02B082973E2488C6CD4B9AA +:108F20003991AEFEC309ABC504EEF0FDD99D8DD0DD +:108F3000A4CE87440189081F4539A9BFED2CF5AFA0 +:108F4000B611DA99D2BA8E299C8BA4B8033A9698B6 +:108F5000E20D70AD476478B8C1E68F2B5D44817532 +:108F6000B0068832425E4F712B19D61ADA6824A6F1 +:108F700044D4E15CF07437EAD6FE6F58BBADDB5ADF +:108F800003E5389BC31C029D66F21B486EA591DF6A +:108F900067753A6B3CCC778E1E3D62A3DDAE254AE9 +:108FA0005D3A557820AA65BCAA73782A6B7C4BEC95 +:108FB000B9B143DB84423B898A7CBCE7F63277EE69 +:108FC0004BC69308107D5A760F624430EA6B342FFB +:108FD000626A3234721363DDA3CE539DB5AC46A6EC +:108FE0000C45C25424FCAA882B430591D254D36E5D +:108FF00077619C88B60B9D906ADA380E771E4A3FDF +:1090000005E4E6E48ED3BE2DE3C8C9359833770571 +:1090100037429A662B270AE61C3E14F963FBB9FF18 +:1090200090DF4672C00701833BE0D9AF48D3758D0E +:10903000B92CA634BE05504D47425AB5E24C9B129E +:10904000F16F4D165708C3FB88871442F835A3A467 +:1090500095BA36970ED0EBA106A048720DE675932F +:109060009D93D1B7F3C7EB8D94FD18A540278ECE05 +:109070001358216DFE081953F6295C8432B6F00BA3 +:1090800043504318DA627EC7B361AB2784D5C2C1AF +:10909000B69210EC795DF148FF5ED492A360A23ADB +:1090A0007B7B3A368F802B5D31FA81022154E08F31 +:1090B000C2BC79463B2B959B290C5777487A1F52A7 +:1090C000832B1A76B52180E46FAB646D0B8C782509 +:1090D000AD226144FEC85ED5C91D1EC5911B7A35FF +:1090E0009E86AC73A6E004FD3A9E3507635622C601 +:1090F000F43483EBECCC02A51F416D19168E2AD0F7 +:1091000059CAC9F39C26F0831EED6A98EAB1823DE4 +:1091100054815246D21C22A139A0EF3D22FEFA9280 +:10912000D71572520E2A478A4CFCABB358E950ABA4 +:10913000B149ED5BBCDC57C96CA0FE3C1AB0664D72 +:109140000A2495286A642A5F2AD7A26391D3BAC2F7 +:1091500085B5CD7F0C2674D4E16A4CFFDF24A8BD11 +:109160006522748C15EDA9E38F431C938AF67E8EDD +:10917000A584A9BB75D523B8FE9510C0E9B5BA93EF +:1091800099F75FC4F1EA886F1568CE0DA4F64D9784 +:10919000731456BA9A72FA3917DE9F423CB9397580 +:1091A00068204D2C20F0C9E18F2DBABA2C244EFD39 +:1091B0005FE299F8FB098F01B218DCBA5896C71B19 +:1091C00049C398DCA301AF323F006F812167FCE304 +:1091D0009190895911D528D95631FBEB0021CF80C8 +:1091E000DCFC007FDBFC29594259830ED4A3D6F264 +:1091F0002B5987ADF3229D7F90621767C1806D1D4B +:10920000FFCC608482F5B33F98087CDFEECA7D8591 +:10921000C3F2B96FE98ED1584A51E78943A87A8BD6 +:109220000230F1920F78406CF964E3E45317D42FC5 +:1092300087C1CF811F280FD1C9CD056F39CE0CDA78 +:10924000F134386E9D5DACFB4F58F8B0DBA3D43BD6 +:10925000B5C9771530F0BC5A41A157238D60E2A9FA +:10926000838CC4F2716ABE72E29F59089D4B2D38FF +:1092700048623E567B3951F4F12F4F7EC38ADAECB7 +:10928000B9A268CD0793ECE5D1C3FEAA4498EBF3ED +:109290003D8D78234446F48E3EF821EF3DE7451995 +:1092A000B2CA837A913893E6487120EC62E7F9B943 +:1092B00057D7D298EDA1966B30546CDF85CFD7CDC0 +:1092C00015BE0DFFB86CB2B647FB6305F00F49330E +:1092D0002BA1A2AE108CF89C71B59EC81872F9989B +:1092E000BF364F01CFBA55FE243ABF1FF01AF29095 +:1092F000BCBEB569C30B56C926B76EDEA663DA8D50 +:10930000D29C0F37544464DBE70D55988B4C3FC813 +:10931000D565B6C189ABE509A0FF7DC39180132F48 +:1093200048F327510EE9D06FFE04ED52FA78C7E0FA +:10933000E60FC9FB6D7FAA76276B7CB2991F71BBC4 +:1093400001ECBDB6B4CD0BED62395BB1FCB920992F +:109350007A57A6031A007E01752875607B047C9DF0 +:109360005418F095692E4B31E8B5FA69D68E52C57E +:1093700040349A400754DEB019DC68E301567B752F +:10938000375B97888EE81E47603A3940E3A57171D4 +:1093900043FC5B468350296A26E12449F35332CAD1 +:1093A000AF9EFB5F34AA14191A4CFA8B591C07277D +:1093B0004D89B038797D5544DFFF4FE58534CF05C1 +:1093C0002691F8B01E4834D8D5F44B92CF46C472DB +:1093D000E7177D8725E781E5659A1CACC7658AC8D4 +:1093E000A03C75E3F6E4324341D8153EC8E5EF16DC +:1093F000FA51794B16A2642016476E33F09D0FF395 +:10940000B6738791AAF9704F2072C535797E9F9601 +:1094100050F93AB450B48E6F4BD40BE90AF1437E45 +:1094200061ED18C38EDDFC8624F1EC806826E8DA55 +:1094300093EADE0F18C4875CBF9C2CDC7FD32ABD67 +:10944000CEDB5D569A9ECDB11CC68083097F8D3ED2 +:109450001B6C8990818049C6CD3D69EEF55BC1A149 +:10946000BAB02C4727834684B475F801AE48464904 +:10947000DB6709910FD814CA076398B1CC8D6AA62F +:1094800040D1EF009E09EDD28B593E49536C795380 +:1094900048C3CF17E60D7DB6691BF67560412C46B3 +:1094A000DE5C0DD046ADE07F8F0C1A389A08BD47C0 +:1094B000A37258E5A36DB7A110D5A065B0FBF3D09A +:1094C000DEBC7D059FDF27EA4AF6C92622020FEDA2 +:1094D0003CF5525A1EFD257FA36822C0FE42FFAD17 +:1094E0005A22F945AAAD8A6399B7A1BD8770312385 +:1094F0000DA998696B2B063E606DC00A22CC283AF4 +:10950000C64EAE0FFB3050269A9497B2F36DD1F051 +:109510007E20A93A692FF820401131C2FEBE914841 +:1095200071DA23245487A5C5C4BE4AD4929905E0B4 +:10953000E20D0F5874E11B690291232E2C94FEEB6F +:10954000375C32A2510CB89EC06E4B7A5CEFA70418 +:10955000300D6EB7C74D3B5BA1E768082B88B86A32 +:1095600055FF01EFE513E23905D982D858D91AFD24 +:1095700057419EEFB5550B200F44C283DA27D8CB55 +:1095800079031E469A787FEF8A55A06BBBBDDF5CDE +:109590008DFAE36CD614F4F57409750D4B53928F64 +:1095A000F0D2E7A2BF101D93708186022F53C636FA +:1095B0006765B71100792652FBBC25A5650F0C3FE6 +:1095C000192DB770EB8B58C903AAA2E3476A9F19FC +:1095D00022A134D69F5512C0A7795652A3F5A6E70B +:1095E000B3A733C9CDF617DCC8D5C07AE7F9151C87 +:1095F0009EB0A1A957128FAE50424BF4668CF34F28 +:109600004F502B9223A25CDA435691768F00C70D00 +:109610009A00E999820EB1679238973698D2229BC8 +:10962000DE0A1DC734FC80E97599B2D42132E4C248 +:10963000F94BE3E49D9D8A959E8A4D07E089E517E5 +:10964000FB3176E23027BE65AEA9419D0751EF8917 +:109650006EA939684559CC6620A3F791D2A6A00C13 +:109660002C0F1ECE7D82AE3B9BFBEAAF3FDC942EDF +:1096700015EE16C5DAEA8FB97FE98CD14393C77925 +:1096800086304810DA7959AD6FF4F34DF0F5B21128 +:10969000B9850B1257F91A6BEB6520B7C017C06775 +:1096A000A0EE00981D6ED78B84D5E5125ACC970991 +:1096B000ABEFCF50895CF992D5B8251F45F75274AE +:1096C00091302AA96AA8992385752BEBCBDC8FC42E +:1096D000E448974D88BEDDFC55F0F7B2191BA7B2E0 +:1096E000D86AE09A504D8195266E8DAF8E9515956E +:1096F0002C77AFFAE3C41EE254ABED1F6600EA8795 +:10970000A33891499E9823A442A81655EAF24356DD +:10971000962C0B969A26146E08A94823D95C6BE206 +:109720000C726F05E129D8CACFF562C857DF2491C2 +:1097300022B53ED05B5488E0370AF791F6F53E62D9 +:109740006C237084513FBEB8DEE3DFE03EB93CD607 +:109750005E03BF8D55998EE58F1C0FFEB9E7BAA247 +:10976000B26CB151DBEA98DAE7BBB572A84769AAD7 +:10977000D172900E10242B3C585EC7BB62028AC97E +:1097800027BB4D206A06B71ED33B6D31FD26FC6C0E +:10979000E22F032B2D22DAF64E95FF1FBD4D236FCE +:1097A00025DA7D57A63612D045EF17235F06E84528 +:1097B00019403B02A5C3A9536CAD49FCA2FFC4A04C +:1097C0009315443530511F78AD8096409B9BBD1456 +:1097D000FA297C1520B98F419AAAD827FE22921D1A +:1097E0007F4FCC9FF9118ED58BDA340F470E444949 +:1097F000FB076B011F39D56A44610F274BC53E0E2D +:109800006C6E7CF86FE60267303EBB8F3CB31FB2D4 +:109810003DC4111D84EA452CB557519F24E4DFB4A3 +:10982000F6DA06FDE945EAAF809FB9C916646C0A0D +:10983000C5A13FF40D431D623BFCF55B97AE62C1D1 +:10984000CA4C9EE8E4F270ED174A8285239C1B2CDB +:109850006DA411B7FDAB9C14CD09328D45920B015F +:109860005EE185CD07CC2D8EBDEB4B2E1E8490691D +:10987000735D9B4AA00629EFEB81D90CA168B493D4 +:109880004C4F2972CE1E21D6CF472F4A1B3558CFB9 +:1098900010FB42FD17E7BCE46DE0DCAF8A032E3A13 +:1098A000190E80E8CCC4FF311C6F7B20322E72A4CD +:1098B0007C3D5019FBAB9337507777B04F1A5FFA66 +:1098C000306F578295824AA68733896705FEA9B80B +:1098D000EF30FBEFBC3D131EEC887869F4A6C88816 +:1098E000D581ECE236E88A4F8508B78E5CF8078EA2 +:1098F000C301880C130435CC3AD304008111DDE395 +:109900007303C26AC8D8251BD10359AD581353B786 +:10991000322607B86103ADA6F137C8A4454B05AFA1 +:109920003C3DC7AF8AA573423EEB6E14FA227F9B83 +:109930002A14B375668B4D8D3D929357D787E1CF2F +:109940003270B5EF72A7AE078F9EE149AFBA054AF4 +:10995000BCE20018BA58ABEAE1F09215AB7E6EFF9C +:1099600038E033544C4D48DFD628CFA51495215A02 +:10997000F0155CA795271FE36009775EE2C7BDE895 +:109980008DF0079CEDC2B59621AF21BF6D4E535BA4 +:10999000AA0F1D844FC360624259AC4042E9F26F86 +:1099A00052A7108BF2ED011C28AA4AAF4A25527E1D +:1099B000584CF7D9C477E95CB02B6FF9A62270B583 +:1099C000911A3B173CDB77DBD04BADB473A8B0D317 +:1099D000933A987D841CEA32FB87F2D444040488CD +:1099E00063B912BC794093AA27FC8DE25E2CD8693A +:1099F000DE660DFFC3830C8CA1CE4933E2DCAA598D +:109A00009C0BC2299C0E367E2F59F3C474AEFDC741 +:109A1000A1836413C81DF89590081B54C12B592FBE +:109A2000F1C3AB3B09C6715E111828DC4DA3AA50E7 +:109A3000503879A42516BF4565C910B1071F472EB8 +:109A400062A63603BE39A74C10F70CFF32FF164F43 +:109A500036F016AD8F6B46C947B36A624B502D394D +:109A60009C6412140F9980FA2177AB90F7D29F96DD +:109A7000903EFD8F89E86BF0F5AFF655F671B8E0D2 +:109A80001E918C504C79E17D5EE8FB6AAFEFCBAD67 +:109A90002CD584F2289D86E294DB395D2535F019BA +:109AA00040D0B317A2915E7226D655BC349E2F7754 +:109AB0003C988746A7FC6A3767DFA96CFED46D65C2 +:109AC0001B0D7B6DEDF1AFF6D5EC5B3C6089A01B07 +:109AD000F16EF45DED1F7C7D294309C4B63F90B95A +:109AE000AA720AC8425F971469883C00A7EF01B0C8 +:109AF00020565482EB41F96A8ACF7BDF52093ABB88 +:109B00005E42889C05779BD7088DDCA44D0077C307 +:109B1000A1B3C929D899A8E3AA4559507B9786A132 +:109B2000DD6E3E595FCE9B92AC21DF41CE7482093F +:109B300005A7F365D1F2DF7C324675BEDF3AFA6CD9 +:109B400035B7FE8612208722280589B05EA7D18B03 +:109B5000F295B3A1AC69D456AA17287EAA170D882E +:109B6000133F73B870DE63A8E4A293BD01CA0187F6 +:109B70000E8D91599D987C5A0E9612F6A8ADFC63F5 +:109B8000A404037AB378B80E4AD63FD3E53EA89D25 +:109B9000BF48911CF9D3457BC08B5F757EC50373AD +:109BA0004D11A771D6B52CBA211DE78A347605066A +:109BB00090A5672C8F09533C438131500C3E2432D1 +:109BC000A8143E42F39102DD8C7870185BAF218AB5 +:109BD00060CB5F31F31E2F76218FA17EE45CF70E00 +:109BE0002EF7603AB8A1EC92B9D3B182152183B3B4 +:109BF000E25F6E26C05A31A04329D3AB9A716AB393 +:109C00000206A7D824BB541289DF415ABD5440E153 +:109C100019828BCACAAC444DCF5DA4248E0AC18878 +:109C2000F40EC5BC9B31BD9EC5112F99FB091B0FBE +:109C30008996878AC7EE8ECCED43A820AF3D7298F7 +:109C400014824A8A7BF3AC635543ABA9B713AAD5F8 +:109C5000E7E47C5A4F7B30DC8917979C5846A7DA9B +:109C6000B463ED577E0BA48789D2FB7DED7DADAF4C +:109C7000290C9F2E852D359E5DF9830AAC2AA6906E +:109C80003595939D0DA40D6F4161E1BA0FE986C929 +:109C90008ECBB377100387ECE3733D5257BBD3B839 +:109CA000C773447451BB10C4333495BB34F3F3050C +:109CB000193A7085F418926CDD9738C7EC3FB09D67 +:109CC0009FE2E10588721F9214341F074E8A7F714C +:109CD000DFC880B51129D8BEB55B376747C297BDCD +:109CE00095CA7EEF78921A827141793C554367524A +:109CF000D0D61284C2327A4DE7035F9424B29480A6 +:109D00008A05589565E357976DA5A8FEFD8245C85D +:109D1000DAE5FDCB6DD2F116DBF8EC4EE01198C818 +:109D200084428A041606B1568832D316F5327C1561 +:109D3000011B2C25DBB3006BA54AA11AA4B626C4CF +:109D40007AE3E63F36CBAFB0C94BB32F621128653B +:109D500024DB61B590084C52EEF6441F56B0D8A5EE +:109D60006C8516C35B4903B7E81E035C816F5C47D3 +:109D700014CE03D28EE8739F2DF5286B97A13ED7A2 +:109D8000F3E7B93F3D3F8721003132C2B161305C1A +:109D90008CF2E6491E42ED3EE9AC218B70ED555444 +:109DA000B286B10D8AC9EA97721B54B15CEFAD9EC1 +:109DB000B2202EF33EA8ADB6782A659CF32E384526 +:109DC0006FC76C18ABB238C594AB98AA2ABC4C9636 +:109DD000C3DCA1DF0617DFCF0AF1E685DF7AAF7FAC +:109DE000998CE378B2B48D4D95FED74462D33A1F77 +:109DF00012794BE830DBB8079A12E64FB04925D804 +:109E0000F310B0D50FB91F865E9DABC084876D0F70 +:109E1000F5301C516A558DF84B51F46F1D2EB30A65 +:109E2000AB7048139B56C1D623DFED7D52AC6D3924 +:109E300089B2B4D8CEDE1510A9F44958EC081CB686 +:109E40003915287B5AB8BBDBAA620F1FACAADBF41A +:109E50007EEB4CEC2537E1105D9D174D8160241B96 +:109E6000B87905D66F13066F0731FD52A54BEF6227 +:109E70003A70D94CBB84DF08E1B43066BBD7C85018 +:109E80002BA7FCFC945907943127C95CC6CECA4B5A +:109E900042988FDC46F788850DAFABE2DFC2E0CF9A +:109EA0007C552C0E067AF50EA9FEFBE9BFA14BC727 +:109EB000C8B1F2096B6CEE3537100AAA1E08EE3FE6 +:109EC000D9056A4B21EDBD0170E2EC879007211C9A +:109ED00008224EBADE8CE331A8CE70D131E8DCC75F +:109EE000A3BB7C0CCEA1F735489E2CB23016EC04F7 +:109EF0001D5FED4EA6926CA25026983D1D5BD55875 +:109F0000E731745993927972A99E8357D6C7D23A92 +:109F1000C2B0B83E9F1F2E6E5E27DA0814F7E7C561 +:109F2000531B9B282411763AC327D5FFE4540933E9 +:109F3000BD95819EADED0E28460F820CDD57326037 +:109F40008AFFA47F83744035B90098E1A1E6680ACE +:109F5000284FF7765A538DDFFCABB9CDC86E90A46D +:109F600007F12422A594E0C5720901D04FF98D9E16 +:109F70003F6B4F7A29463940EB12462B9D14C44360 +:109F8000ECF05076AE44C4D3A0602BA4F043516CE7 +:109F90004F0A506A11B673404871494EA653E3AC5C +:109FA00046707F276C89122FFDDFF2B1EE61DD6014 +:109FB000AC1A70FB0657C34A3D2FD220C6E1A43E1F +:109FC000E8762E8B4ABF696DCF3FAC24ACC5FC7DD3 +:109FD000B31CF74D6E7408F0EA40BAE81ADF721746 +:109FE00002719B2B646A2961592CB8A7B3EA94CCFF +:109FF000B565A1A5945A4EDFA5C86328D402F31114 +:10A000008D019B40DC0CB94B60AE5423C7B357FAAB +:10A01000B29CF002FA9D9FF260744F49AAAF5EECC9 +:10A0200089E9867CD4BDBB485F647EFCCD946C78A6 +:10A0300054DC954D97D22ABD0AE504AC623DA8BA1E +:10A040007CCCF51D846B5A18394621DF05E20BE301 +:10A05000ADD19E0E13A8C671C550C8C19DFD328EEC +:10A060000AE77949000524A9A5A3669DD1734A2A68 +:10A07000FD104A0DD68A468A0D3FAB6FABFBBC0480 +:10A0800081B633337679514E65FF91F84CAE7FDD62 +:10A090000ADE94C7C78875E4BE24E5438E014608EE +:10A0A000A497782AA60D9798806745CE3A82E9242E +:10A0B0002C8943DE9D9F5C927A9CEBD6479DD564AC +:10A0C000D24DCBFF0089E007FCD247BC38ACFA1771 +:10A0D0008A4BA3BF1CE1AC8ED9ED4EB72F1E1E9349 +:10A0E000EA0E1345560C623E49DEB7745F170AC884 +:10A0F000D9DCFF204A50651EF63D642747E17318FE +:10A100000DD5229A8AD1D93DF09645B76503CD3158 +:10A110002E86459D4743ED082891B232467136D9C7 +:10A12000AD6170B6D18210593466D7DBE1F01213FD +:10A1300068E039BBEA35CD39917D6288703FF39F85 +:10A14000EF5EE54A9570275BCF143C00BCB3E3C0DB +:10A1500067B552E778FD9F0B2D3C633780EB805F3E +:10A160008480164E8DA4DAB191B4BDB4C57075D19A +:10A17000A16D03ADF5A27EB6CAA48E741DBF682D75 +:10A1800083529144A0BF437A33B71CEAADA566144D +:10A190005C8D23F05DB865B3CD3BBA8A0B697E0256 +:10A1A0007F37791287BDBE0E14F4737E20908A0427 +:10A1B000F20BF90EEA62821CB2DB39F7B6E15B7989 +:10A1C000FC0BB668CF26BD042811358CBB72AF1AC4 +:10A1D00018C457736FFDD9C98A5A13D2CA7C403448 +:10A1E000BF4C486EE323E7B18AA77E419411D16E3C +:10A1F000FA132F379EB8AD23E9CF291907744550BC +:10A2000088F511819348292CBBCFDEB5B95A0A4A8B +:10A210001766D0A87CF03D0653A15CCA606453E386 +:10A22000984202F1FF6E3576E2D5EE6A4E1667F07F +:10A2300004CD79417F04DDDC9FA3DA16F57BC77D71 +:10A24000D0B2D96015D06814F8ACD05E5E374D1529 +:10A250001A71AF6F7A2A4321F242588164AFD21249 +:10A26000EBC39B6EEAE23D4E7B7D4E18A8E217726F +:10A270006044DD0CF1F5F04C8AFEDE5932A0A98E67 +:10A280002CE5E8E6F7C9E218F4C2112806C70D8BE1 +:10A2900023499DF5551B2D4C3AC171678334D9EE86 +:10A2A000002D33758B69A115A9F0D1DB0185D7B6D7 +:10A2B0004629C959832FD3B155A3DD188580590389 +:10A2C000307340F849F47A3362B0EF2CB9786C2ED1 +:10A2D0000BE3FA635CB0320A2AB16B1B8652E2F5DB +:10A2E000F82747DCC0B9C698FD3C61DC177BF4C198 +:10A2F000CB1E46BBA8599EAC4421ADFA27A9DE8CE3 +:10A300009ACB07162B68787ADE112902F25B4F7020 +:10A31000CB6AA4B010306B4336152C936DF34EE02E +:10A3200016C99768403C763441445C75FE62CB8424 +:10A33000BFF4B26AF4ADF1012C4CDBA12E3B24FD3D +:10A34000D0C691916D4BD6C779D0AED6F226CD4608 +:10A35000EF3253BB6205289201D1055A17B44489E4 +:10A3600070F469A96F759B36F38346077ADA786BC8 +:10A37000C8BCECE5F87A23F31D40E3EA4175D39EAF +:10A38000EF5EFD7A6D9AF894B6E500E52386B9A7ED +:10A390003EFE087AC9E7BC3F2D218547553322F0A0 +:10A3A00083204BB60DD51DBA0CED847FCED8A73BCC +:10A3B0009E7A625EF2FA8060152F9E4C3C2E59B355 +:10A3C0000BB85D8ECF9EB934821451ADFC6D542410 +:10A3D0005AE5D6B484787148AC32DEF40D04705975 +:10A3E00018A571BAA9BBB636A060CFC5161897706C +:10A3F0004EA231FFFCA22FBF37E2DD1B3186B27BBC +:10A40000F9C92D1769D120173DC721F4125DDE0966 +:10A410003737E39FAA1FD1AFBBED9DD2C1FB9E8210 +:10A42000CA6F41EE6AE9962295558242FE04C31531 +:10A43000F0F1CC4ADA2D613C3AE7A76D5B45A59A6D +:10A440008E7047E9B62B27F8B31F3FB5847DF4D74C +:10A4500010BA06E8F020258789233CE20451A604BF +:10A46000DDBA1805F517B2221C757C8E9035DE9981 +:10A4700036D55B22FE074AFAF6C75F0AE5FCA4C39D +:10A48000298C2ECEAD04C3F75E4B2EFC607120D21A +:10A490002D690FE3C3B7ED28DC9C6C652C249DEC83 +:10A4A000E7F2D2AA1F0D7697EE8AD4F9FA2664E66F +:10A4B000AD263AF4C7E65C0702F963DDF761BE92A8 +:10A4C000DF94A6707359B4531C19E891E28BEFE93D +:10A4D000E6449D0CB2453D9E28CDF4E4EFDA6D676D +:10A4E000F33786EFEB496A307D7628EECFD1E9501D +:10A4F000AB8FF0BD927904B885044187D0DD1B2174 +:10A500002B432464080157FFC4823B9DAC8F9708FE +:10A51000496BFE7E758BDCD34D476607DF00A6B125 +:10A520008605B2A5F3337DC7985357B615CD53B6FC +:10A5300066AC220DB4714CD198CFFABC64EA3117E5 +:10A5400039E01BA93CD7981D94956AD7A66B013FAB +:10A550002DBCE65199EFC511E46B40417A898B51CE +:10A56000543532455D405F97CBB1A30BF87D3BE09E +:10A57000CE9362B9E07863E8D2BC66E7D8378E7ACA +:10A580009ECD9EA6CB683BE15D4DE8D59BD1A7F261 +:10A59000A6D0172CD0E27CBC6628B3DD8C02413DEE +:10A5A0006EC65EDAD885B4C933EF24C9461EB12B16 +:10A5B00010165E8FDA4B74A84ECA48DBD3FAE9BE98 +:10A5C0001B015A15A42AF1273D73AA13E6B0420BCA +:10A5D000943E87460E0B66282D790F56969DB60D34 +:10A5E000BAF456CA6960255F1A877E5649DDFB9723 +:10A5F00022F90C79EABEE86461BEFCC58B16E6342C +:10A60000C872B631C4AE900F402BFBDE3CA741B4FC +:10A61000F61AF14C1439821D7B0255BBF6E6042470 +:10A62000FFCCCCBBA9595CB1016443B70C7BBBE543 +:10A63000D38D8D0DD518A04EDB3BB9C90BEF432947 +:10A64000D4031138FFC1C51DE65D39008FA83EC394 +:10A65000FC3604F5EE33600BCCF1BE7EDBF85F31E7 +:10A66000D1737BC48F343AED74F5A11AE95E483694 +:10A670007868312CF2E4A8830378CF037FD6CA60D0 +:10A68000E79C15556A451B1EA9DCF6B65660EB8C97 +:10A69000142BE339BE3A44A54C84FB2A37B453C982 +:10A6A000DE388D8834F8E37AFAEBBFAA3F3DE888BC +:10A6B000512859235210473CB8F7653201C3FE199F +:10A6C000D76A2A9DCCC550D51A4651DEB8AF7A114B +:10A6D00068E295727C8227C4C4537212F4FAA90FFF +:10A6E00070927CD789791B43A4E4CA6A94702B22A8 +:10A6F0007426721F59F87AD987F6CD9655D005CAB7 +:10A70000811C1EBD3BD7B0A86F236608137DDED326 +:10A7100062C4FB61971F51933BC21DE46D2D91678D +:10A72000691A120B61EDEB60341A28060628F08EC8 +:10A730009D84BC4A88517634F069677598823FBE23 +:10A740008C721C5400905CE3A0923B47A88FA686B5 +:10A7500050BD61436B4C153EFBCE2F9C2E064D5ECB +:10A76000A8945786414BABA06CB2F28635339AF66B +:10A77000D037491B688ADD90322C0A1A3BB51A384B +:10A7800069002B72F33A2C6E65A44E3A4DC8370817 +:10A790004BF81AFB01624C0E4F1F84C5F3A0C96B26 +:10A7A000E677B745D139292893FA2417D53773812D +:10A7B000B26EB3303A27B104BFAC344306C075E083 +:10A7C00015C6F2C03189AC7781C8912C536080E006 +:10A7D000EEF530344F983209E081334B6AEFE552A1 +:10A7E00096B79D1285C1060051F1ABEDEC900F2B91 +:10A7F000C9AB8D8E0B4FC8D6E13D6C937B33532C88 +:10A800002EA8BB69F170D91685AE6CD838BF3C99BB +:10A810007A6197B655AEA500AE91361A70917DEC6F +:10A8200039D24C73FFE055B4391E1E1C02D72D855A +:10A830002E17A5578B0B89493C8C450D2C05F1AD86 +:10A84000C1919C79C85D31B63EB5296571650F002F +:10A850004F26460F60F7677C45F96A5D83E394EA0B +:10A860000A7C5B05996FD4A20E91F80D831CA01190 +:10A8700081314B0D151F29F259E01C59EDBBD7D280 +:10A88000C66CF5B7A6DE20094CF0E5375D5BFF75B9 +:10A890006F370764A7FE9A6F0893C062768088C2FC +:10A8A000C789114BAC9B77BA5ECDF84FF6F3C65211 +:10A8B000FC3F5B5FDBB345290EABCA19DFFEF51A1F +:10A8C000B888C969370C615CE669CDE039F4F42ECB +:10A8D0002D0314A198F6E7F3EB17FDD4F9BE554309 +:10A8E000E9BD0ED4BFE78AFE87695751CCB2EE06A8 +:10A8F000B91A76685442694ACCB72830C7D410BF19 +:10A9000029F0EEEA3DB7BDCE64DBCE671290471961 +:10A910003582AC4922660E8BB5652A64EC4A18BABA +:10A92000D6A06A724980E43264333209F0AB460043 +:10A93000958F16199153BBE04CE78F5CDE2C6FE6C8 +:10A94000919F2DBEB80C5F7C69E778D53BE3E44569 +:10A95000E9BE2D6C6FF32DE95334F4ED9626AA9BD6 +:10A96000F7A27A3FAC910602871BDDAC9EE0B501F1 +:10A9700023DE9C2235C6C84FEEAA0123743FAB41AB +:10A98000FAF87A5048E842E583192620D34173FD4E +:10A990006AB99395207C6723240AC0CF916AF45E3C +:10A9A000890B0A5EE057F09764CB3D1081CF8A2E69 +:10A9B000DE8F853591E81ACDE8E50B53C4064F18B4 +:10A9C000F20F825E717E8032422D09069016BE7AA9 +:10A9D000D4601CEDF7DD5B78901F4592ED5190C679 +:10A9E0004F313621FCCEABC2FF9F2B29A904DC6777 +:10A9F0001E7D78F5371D615BC31BB906AE80DA603A +:10AA00001A59D826E67D53017F48F654C62F7C5F3D +:10AA1000112F596010CE159DB292FA1A037CACB07A +:10AA2000F681A1E78EFBBB06D6F4047E30229E435E +:10AA3000E05D5C5653AE45866B7B9A5D9A40120092 +:10AA4000523D6CD91AA4C8217B0B3E76216696F242 +:10AA5000422D47338B3BD630A9A6F7EB045F0A0A99 +:10AA6000DB09D10229D47E729AAED5B808AE544E15 +:10AA7000A588E6C22B7FFC3981E3FA07CF85962BA8 +:10AA80003BA0738F45B1CB19C5A9787853BC4B4D0A +:10AA9000CD64967B7531EF791F5A0EC3AF33EC4A04 +:10AAA00004060BE2C8960A8850367CF3A0ED7CC2FF +:10AAB000E143641F61A364E3F51827381088BCAE36 +:10AAC000F2C70D31F22FE806DD24414AAC7D8572D4 +:10AAD0007FD65A8B2AA89C8E6ED28AE59070D8E4D5 +:10AAE00069B39DB01126BC5C0BE50B026D87EBA72B +:10AAF00012CD972D2C10F186CB7FC443F3B27C543A +:10AB0000654911F55DE2A3546725921EDB6B66ACC7 +:10AB1000DE9B8CF62D6A3114D32B3B9E33DAAF3C8F +:10AB2000D435BB9F52E1B423439063DA334BA6ABD9 +:10AB3000284BB5C48B043A35782B4EB65D0337638A +:10AB40009E6B9DC3491902C546599EBBBB07306623 +:10AB5000C4914D8B5235F6EB8D4CB63D171260709B +:10AB6000CF64F1A141BAF249601CD560148E94A55E +:10AB7000A668A1A267D5F1AF38ED54A054A7E9BBF0 +:10AB8000FDD7C32DF28099F419AC67B66D382672E3 +:10AB90002CA5DC8173FF6F61DC58B7346AF78199AB +:10ABA0005B94D11423BB040F11D3B6A219076EA472 +:10ABB0000099022DC05599647064E0E5B37AABFA50 +:10ABC0002F53BF62362E49BAD72E60CD286EF62A93 +:10ABD000BD073FD201D2FFE82EFF35C78945299D29 +:10ABE000B74B0F6334D63048CC95AD567374F2240E +:10ABF000ABC14C5AD20F870739444016493DA12EAC +:10AC00002AD12884107D4C00234E75203A16E7EE99 +:10AC1000C08F315EDFBCC66A108655FBFD4E4D0C01 +:10AC20005D312BCEBD914599C16D1C75D16458B372 +:10AC3000DA9745596B7D879C5395F382FD1FD16749 +:10AC40007E99234585EAD761798F6939752D3EDB79 +:10AC50008CF3EBC7151CB775210021D90FF96F7B59 +:10AC6000FF3718ECCE17D6595CC773CCD36DD88597 +:10AC7000685E647571C0F860C5B0BFD069A308A1F3 +:10AC8000B6862555B1651085AAE510DC1488982E86 +:10AC90002CC2AD2F243A3346A5A03AB21049A9D808 +:10ACA000BD94DDDB427427F43E0EED7B6B552E43E5 +:10ACB000F0969D120C9F7DE68E10B1B31A0588C4E4 +:10ACC000A5075C264601782E79CDEC7C4B8D53424E +:10ACD000F005CDA7BC23E39D53E0E37E583CA65E80 +:10ACE000576C2185EE066843E47130243253916E2F +:10ACF000EFEE455AB21F7B7124B895ECEDA7D10E4B +:10AD0000BB2C0D0802E1D0BFEC1424F6E159D4B1FC +:10AD10004A874ACF8CCE9B69EA6551DA2A07B0A6EA +:10AD2000DCF5BAE6C9DF2638F38F74FFA72C0B4C8D +:10AD30006ADCE367155ACC288CDC837A11FBCE7170 +:10AD40000C9251D70C0037990D94E8539CB9CEF969 +:10AD5000A5D238093789B0D574914F9CDC9EBCA32D +:10AD60001D9012F3BEC561AE81D3AC8DFDD3E9B9A0 +:10AD7000F1D712CD7AD241DBF9E76B7BDB575FB9B4 +:10AD80008F7518B042C6FFA9BC9E48498B4E2BB3A5 +:10AD9000433D45DD5326D0CEACFDAC2DCCE6461868 +:10ADA000CA058F6D76FDA9DE2197314198026F08A3 +:10ADB0000013CAC399205023A44DD1A6F91F202601 +:10ADC000AB2635C2CA43D2A43F0AEE8933CA33CF79 +:10ADD00091DA9AA533E6BFB7275EEEA7B5ED8025D9 +:10ADE000E14D84D299835BF7721C7B65A8825CD5A8 +:10ADF000F53FDAE99E92EDD209C707C54D65405788 +:10AE0000AAA346CDC69CFBBF4B385C521C51A42361 +:10AE10009CFE770C5159892E828143562943E2A129 +:10AE200062FE98319BAE1A04500DC9595E110FB9DC +:10AE30009BCF94A72999B074BB77097BF4DF63E0BB +:10AE4000FC5745F08F73BAA5E816104BE9D67D8EF6 +:10AE5000EBF18235DBCC5294A9BD00EDC463677180 +:10AE60007D92B871931DD2296DE131D571394CF4C1 +:10AE700041B5C33A2A280C67231B214B66B4D0770F +:10AE80002F19A1293A113F177B5F80D0CF8E035A2B +:10AE9000FF2DFB36ACAE75F6019DD9C32698798D92 +:10AEA000F563A96727F32FB99B54CD13C89A541D96 +:10AEB0008691B9C63C452A95F5EF6C6B8BDE99DC23 +:10AEC00036C9ACE695B5731DF6FA796BAA92825F26 +:10AED0004FF22C6E5298AFE3449454E05959FE213E +:10AEE0007D0C96528571E902C94A19DA3A1A78C876 +:10AEF000FF4F2F2580B0FC148E7FF010C64B377AA1 +:10AF0000CA75C81E60B68A95C6912DC3384CD64402 +:10AF10004C64099B0B6359A9AC24E477E6DE3AFB49 +:10AF200023DDD3359FD5C48941255728B43AE1FEA6 +:10AF30008CFC61CCA4A7D12D2D3FA19FC988F29193 +:10AF4000BCC8F4D4A815586D8D4BB3502886300F6B +:10AF50002D2F4CC8143DE76A874B88D41ACA3F0589 +:10AF6000DDB7B5DB71374BB5693E298EE491120828 +:10AF700005F8A8F983943B4AB1DECEAF53F602221E +:10AF8000B0517657835F6A383A46F01FAE9DE3C3EF +:10AF900032FB9AC32CB1D84A43F4557557E31EBB14 +:10AFA0007F03842AF1BBEE8D8FFA788A2D3DE96C00 +:10AFB000F995E934BFADE36E35983797C01E48DC8C +:10AFC000ECD9619969D144F48EA388062DFD5DA268 +:10AFD00094FF26F292C0BE8CDDCD1A56859D4C7929 +:10AFE000D2E5767559518DE858C853BA15C9AF3AAC +:10AFF00014B430FB5562843038C017363A1036E24C +:10B00000446613218BD484CAE4410975B35FA71346 +:10B0100072D28EEF332D9057B41B4D415933E3401C +:10B020007428FC455DE44405ED6AE91B27E1021B39 +:10B030007F126324CC8B30D12C736A07BE20FB5D5A +:10B040008EBFDAA46ED4FAE198D5501EB97F7C9CED +:10B05000F914C76D34BA9D07BC1307751A73B53B55 +:10B06000CE91222C3B7D30ECCA5312B1DBFCE14F78 +:10B070001BBB110E3C77C5BA30339D53A38DC33132 +:10B080000354901AF2C3C93238E3B5B47FFD1F1FD1 +:10B09000894DC4749358D5B8393D781EB5CB348CDE +:10B0A0004E605DC909ED593FB2B5C3E07E5F4247CE +:10B0B0008CE915B30456AB436342A2473F32DA0E24 +:10B0C000A4118EE7D41411EC4AEA6EEB5E6DA60370 +:10B0D0006BD2F5EE1D0FD1E334D7D8D3A261E76E62 +:10B0E000B464F711CA8AB9C11123BCCDD99EE3EC6F +:10B0F000EE2588E5468E5BF9E2543234D1CA356CD0 +:10B10000707D9E625423597264DF6C865583A89AC1 +:10B11000EA547B36A17590ADA9670F1C74743EC3C9 +:10B12000D3CC5051B33BDE8B27E0E3A59631FE1B19 +:10B13000576B885147D189D60C485989A234EBD234 +:10B14000568524CDC95FBEE64F0C502AE29A856829 +:10B15000241F779570C1303D4F3DD1865F41E82473 +:10B16000067CCEC6E4E714C4DC3619F5CF95B26888 +:10B170006388AE5D2F3D11AAD2CD71375292EBBEDE +:10B180004EB76DE4FEAC473D58FC0C77DFBFA12203 +:10B1900073DCB7F681DF5B17FC935FC1B89AD9C146 +:10B1A0004C5D6CC7D89E4EC9A7DFA15BE5A509B76A +:10B1B0008F6ACDFA58F471A812EA2D36E14F5CB6C9 +:10B1C000379630D60B55261322778A7814C84EA9A5 +:10B1D000B00A82FAFB09185E0E2E8982237DADFE2D +:10B1E0009D5E6D4BC2464EA35975620EFBEEA4FDEB +:10B1F000F9CF33F9C01DDD816EE0FBCD89D681C06A +:10B20000A24B5561A1A50D9A049C8A168034AF51BA +:10B2100084A8217DA6EBC9B0F21C6923659840E2A1 +:10B22000490FCCC3C912E5EE3ECD31D6E75EFEE054 +:10B230001549635E53FB00AE6DE813AC92AC8AEE29 +:10B2400019F1E8C17C3C255E2004035769095C784C +:10B25000E1460695BBF09BBE73F3401AFB18FB104A +:10B26000A2979DD9EFC02BDB4B2C597A8EA92133A5 +:10B27000ACD11C98484ECC705C4DDC113B37FF269E +:10B28000D0204CC8125FC48A4951E7254928432180 +:10B290009E7CF56C9ABBD58E111A662BB0170D8F5C +:10B2A000E77927BBAA4C55CB280ADFB9D619552414 +:10B2B0008B5FC33622C7CC40F2068313C6FDD8E9A4 +:10B2C000B568C91A7A26E6615DE1AABB3527C8A52B +:10B2D000D35452ADC3EB3272BE3F0BF7E8D47FC4F8 +:10B2E000B38878747EA69668052EAF2C513096B838 +:10B2F000F436AFEE45C0B52FEF3AD851F9812C1195 +:10B30000202EF5EFB5CE4D2E7DB49C0FC712739154 +:10B310001427158695249811D67ACCEC7E88A2BF86 +:10B320001C497505882F0692333EEFDA5E71495F3E +:10B3300013CBD2B6232D5A8884BDC57547FA23474F +:10B340000F73CE2202638797B177078065CBF86EC3 +:10B350002F78E01D2BAF6F10796356518661FB3D4E +:10B36000078DF78922E6B63BAFD39AA7FB80349CC2 +:10B370004BB3CBCE648C0373F3AA6940F97A9D4B2F +:10B380009457B08CC9FCFDB34F261269A682BCC687 +:10B390009DE8412337584D97113AD165EE0C58FD81 +:10B3A0000835F11DAC78199F7A5E19D16EDABBD4DD +:10B3B0002451E61D738D7350DA0B3BF12220269D3C +:10B3C0001E648A35F0E0E721489BC48A9A78646459 +:10B3D000C94981A455101AB31D353DA4892B2EE10E +:10B3E00015F5B8E17E0756E653D1C485D37F2542D3 +:10B3F0004A6208FED4683279E3847278F88C591C6A +:10B4000013E25261EAC42F61153A0A66EF69C3C1BB +:10B41000F150F93367F01721F561937E5199585235 +:10B420000CF1BE24937FD84C5EA0415E576F1C2F59 +:10B43000DF2194FE865DE2B1D666EF9F79E71C5767 +:10B44000E6EE4BF7A76A1589935024C9FBBFD335A5 +:10B45000CA07411A4F0B03B4B7D536947285EDABCA +:10B4600032B2F665833DF1662D1188DE0BFD45EEA7 +:10B470000852148630A57A10C6DF1F034B44966C21 +:10B4800030117FD991A846CB0F708E2CB89370984D +:10B4900084818D827EB003C68AAB2250896C1E8166 +:10B4A000A45B20BA03C88FB633E6751F0799BF891E +:10B4B000000FAEB03981CCAF96ADBD2F8413FD4ADD +:10B4C000E5C50FB37B3C113505615086C398DC445C +:10B4D0002E6743991597869D0D76DC30A29A2F1E14 +:10B4E000D47A0B6CB0A7A3AE6055F2886E32F245E9 +:10B4F000E40F204893F43B5240C51AA5D4FF891CA1 +:10B500009EDF551CA91D45CFB3F6CBBF6B4B899170 +:10B51000DEFC7189CD7CCB45407D228D8F0F0CD513 +:10B52000ECDCF60706425217A03032F5D4EDF633C4 +:10B53000D7598850A8046EC57BE42726B32444BF9E +:10B54000330F419B5FB4F2CC7A1B3C774970F89B78 +:10B550008C115C549E91E808D4220B07F124AE9B19 +:10B5600051CB89C71E15A7580D0CF6A0D4FDE8884D +:10B57000757040401CBB144409D6663731F416730D +:10B5800047D7A7701A2B3251EA1AF7C0199CCF255A +:10B590008E7C354719BDD52F971D8480F55960DF06 +:10B5A000A4CE90510747402303A1EFEDEB71213466 +:10B5B0009F4B38D98C1EEDC973B12E6087C8D997BF +:10B5C000B707ECDC4A268DBBC9743185439E8F26B4 +:10B5D0006FF764D2C07BCA9B7042064E504582F61C +:10B5E000AF2DA03A60492800023306AB42D049CDC6 +:10B5F000E7FB65C48D6D642D8D83A75BA7F01D47A8 +:10B60000C0D7D510CAA7405D31516AE2077A879545 +:10B61000A58A916FEB6906F0507FEB3EF78C6BEAE1 +:10B620005C52F013FF883012E75F99EFB416533283 +:10B6300084AF5478EE3E8A242B38B62513C11B45BF +:10B64000B76BC53362037FF94C801042EAD5904C4A +:10B65000E65AF018B93244FC35F2FF358AD1D27F70 +:10B6600060A0E3EBEB2974B6968F5FA20964417F7B +:10B6700045E22AC102E4672D91AFA4B61A4790D3E0 +:10B68000940B75CDB4BFDEBFDD369BEB8C6E05A28F +:10B690009CA998D4D8AE46D2DA88ABE42521BECA9C +:10B6A0009E9B2605DAA85108AACF8D8D418E54287D +:10B6B000432E4623C7E9FB9DCCE4F338A89065767A +:10B6C00071FE604B336C95FC6704C49EDBD4857DB2 +:10B6D000187DCC9E391D825B25C8AF4D0EC7FBB1CE +:10B6E000D894920BDC784C94D38A3E77F874E08639 +:10B6F0009D1AC1E27665E7B5E10F437A71C296C340 +:10B700001A3F057CEE2B200DC78D1267EDD8B611C0 +:10B71000CB6047BD66AFCCFBBFD8424316236F81D9 +:10B72000AB1C7D9673A89F3AC2C9B8A63E3039B605 +:10B730003B08113182444AA26AB6227C4622971AFB +:10B74000F60C4B44E0112BF00D7AFC19D60A894116 +:10B75000C9BBCEB7A307CF26DF2D4F1EDC68DBF8B1 +:10B760006F82E2EF74BBF03019C7C26E090ED5BF0D +:10B77000EE78D5520EAD25B7B8E6D1B9D7D9A7E73F +:10B78000806ADEA165BDB66544ADE51E5FDBD18E86 +:10B790008FD10AADFB3ED7F8760922C920EF810F81 +:10B7A0007EDED36D728027CF7BDAD136A3B84B50C3 +:10B7B00087933AEF20D9EF26B45054D6133C427801 +:10B7C0005EAD164B7066B5F82306C7366914BAE746 +:10B7D000BD9BE9E33BB9CFC3C4780A7CC74557D2C8 +:10B7E0008E67E2F0BAC941DC6419A56C7536236630 +:10B7F0002031473A247E1973496B3B8D5770BD1237 +:10B8000002C6576E43D2E15BDBBA9ED1E3FF2D8CBB +:10B8100063F0B5D3EF170AB02F910A1BEE3EAE8D41 +:10B820005EA24EED80BC070CD59E67BF987C16E6E5 +:10B830006835A9C438B7AA67D4952161B100C9E1B8 +:10B84000065ECC9CEC6DE087EA4F440586C0B2E909 +:10B850001D85FC3EA7C570CABF323BADCAF729C5DE +:10B86000886F1740B4C7721DCE0184C680277BC382 +:10B87000BD7F064E04F5D127C9697DD1A22111D320 +:10B880004D74696CB40F601B0E9B7D6355767A72A4 +:10B890000CC3FCE79A716A96BEB40179140C61ACD2 +:10B8A0009330D5602071DCF48AA870D2A4AF3A8AB4 +:10B8B0004016513B8BF774EB0ECF1A7D8B10F43F83 +:10B8C000031234686737A554610EAF16946A18A145 +:10B8D00052DF496C0A96ABF94B4D3B70A8D546FF39 +:10B8E0004A051E1326E318191A0CB83BA5E6BE0E2E +:10B8F00022037B27881F45E7A289FF0A4923CD0D34 +:10B90000D851C4397C347811DCA82D37D27633A8CD +:10B91000D84E97AD1B278D989245A92B83C465BC43 +:10B92000DA4187FFC4DED6E82C990204D92623F039 +:10B930004F48C565E36AF7BA0AC4FD064561AD4CD8 +:10B940006ACE72F21D9273F9EAEE185340F89EBF68 +:10B95000585619E90DE99F06A97B6649845429AC1C +:10B96000C10F152B20CFBD76B4E0C35705750C97DA +:10B9700061D0C7B1E53223B6929911CE591A654B01 +:10B980000EE8A32E61AA5EC14F9E2C62CB2473C821 +:10B990000A0988F711A1C430B1E28D111551511671 +:10B9A000475FC54B19D0CF9F7AD789B2C0633C623D +:10B9B000116F21A120D8AEAF45E82886853CFB61F8 +:10B9C00027B79C48EC7A96F936BE4849675032ABA7 +:10B9D00014D435588E89F3675BBECE7692E11EE7AC +:10B9E0004BC5BCF03E5FF473CFFB17AC0714D672A7 +:10B9F0003DEF674FBEB6A09E47F53BEFE4A7BE6F95 +:10BA00007D74AC222F23CA8E55D1CAC34DCCAB183E +:10BA100049A23FD1A812E905637257A15A6DA56FDB +:10BA2000F046FC8793261704E3D895DA2F7C0F396C +:10BA3000E87A9566A5C258858FD53A365293A1FE0D +:10BA400089D6BE2F6838B4AA9E217E25269A5B86A9 +:10BA50001BFFF79DC56BE7827F3D32C0ABAF260B66 +:10BA60008209EF16FBB5D73BFA6A02F8F3725B194D +:10BA7000C0EE6995FA015A75103FD8219088BF84AD +:10BA8000D3DC94B1C0D773109418AB7C5FFDCBD0DE +:10BA9000BD0CB3C95BF684EC3FB26A479A256EC110 +:10BAA0004AB693B895786D224E54A94651EA5EDDA8 +:10BAB0002D724FD3DFCCBEF78088EB863158A6813C +:10BAC000DE57C6551F1004775D01E94D0400B98F9C +:10BAD0009B2A888115328D7115EA4814C4D9FF4616 +:10BAE0007FC1AB21CB3380E18EEE78AE6BB5DF3614 +:10BAF000A15FEA1F182E465B01F467AE8CCC2F5471 +:10BB0000EEF637695A13D1DE319212F481681727A5 +:10BB10005A78815EB1F5D4BB2AEB61ED3712C62CA1 +:10BB2000A48C20EC63685ADA08B3EE92F563A2F2B3 +:10BB3000A61FD61935310A3A0F50599EFBA7F32795 +:10BB400005E766BDB76733EE4112256E5F20BACCBC +:10BB5000BE551AEF2B5A500D56C3CD821C2BF0E761 +:10BB60002DD9C30E84386947B08A39CE08D4BAD1EA +:10BB7000CF94F80464DF68FC3125920E6D29052B03 +:10BB8000F485BAA3BB4D385A2E7FD983D8CE93748F +:10BB900019E42CAB51C4E1B52FC1F27B2C10C5D4F4 +:10BBA0001C58F74611649629C6C5589AFB07496F79 +:10BBB000C9B925183CD119532C565203FC1E2B49E8 +:10BBC0000394A865CB2141A0AAB00C96B4B9EC436C +:10BBD000A0CB1ABF930133097A9F4E6417E4B1EEEC +:10BBE000FEACBB921BBE60AA6FD098E48D46BD44EC +:10BBF000526144744D5DAE436946A0630AF6905BA2 +:10BC00001BD2AF3285F011A4AF0FD29AD787F4B10F +:10BC1000C18251C24056C8ADFBC9A80CB70A98D022 +:10BC200090F84E067C1E04E049B2D9DAC67D0CC4F9 +:10BC3000A2E03F4AD8EF239B6F5BA4EB56A5469248 +:10BC4000CFB21E5114757E81DB1C165D32CA99AECF +:10BC5000BAC3061A906877374906A356152825CF28 +:10BC60001B3BD29CE9574A5C9A272CA9AF86AF10A0 +:10BC7000FD30EA9E17B23972A218168847A4132520 +:10BC800096FB1D06DC722C3AE33CB59306FD057667 +:10BC90003163BCBDC10FB17532FA41F4ECAFEFD9DD +:10BCA00042E372935205C65EF7661F1D3658433A4B +:10BCB0000CC4E7F0C0B069A2C11C815ABF7CB68E2B +:10BCC000C554DC256519C0BBACA7EDB508852E4071 +:10BCD000E8BE9722EA63F81CA90D4D6F9CD60AB600 +:10BCE0003DEDD9970EA46B5F67FD6951E09A2C4634 +:10BCF0002BDDEBE107935656F3D16E1AB5C7A86357 +:10BD00007479780C42C2ECFEE294A3B401237C4D1A +:10BD1000646583152353B7303E979D5CA75F64C36A +:10BD2000971A4D7A399651F67575594BE2F6268178 +:10BD3000534AC9961657D402361A3AC66F69D01CB0 +:10BD4000641BB293EE13D1B82EFED0E2823552DCE2 +:10BD5000BAF2E82321268867907773A98BF64B54B3 +:10BD6000316752435030FC28D3CE61308BA49E45BE +:10BD7000BB3A0E500ABBD38099A730CEE79C6966C8 +:10BD800017DB3086DD461307B7E07E25B9671E272F +:10BD9000CA113191E7BC1C9277DF997485D34B1D92 +:10BDA000CDECECE645FCE7F404D5B36FA423C83E24 +:10BDB000E38BA120FA1C35C007F228E16FB20AD547 +:10BDC00005C986BA463EF38AF1A0617B188BE31C55 +:10BDD0003DA089A67D47C55CC8487A5EC589B7EB9A +:10BDE000CB2A41BFA9145C5F62DBBB8C2D1D8F2A5F +:10BDF000E088D74B788DCBE83E187252F56ED93A71 +:10BE0000E065C618B0F0A8437F1659231E03CFDEA5 +:10BE10007871DA8B60131F993B1B609B6E73918462 +:10BE200098D1A064FA09EACBC4B4B4DA0EA8A63A51 +:10BE300073158D2D15AC0361755F16F33998D767AF +:10BE4000505B95A046F199985094569A54B8BE0705 +:10BE50004FB3EA6C643403262F3466324F95D21305 +:10BE60001C46601285A3EE67101534E0A1E31A8822 +:10BE70004BC253AA0F19052847C81EBF622942ABFF +:10BE80008DBDE2CA34E1782A1E964CAB86A2E865E5 +:10BE90003605B96E9433F4978F758654ED387FB3B9 +:10BEA0003101D0D933687C80DB05B7C2BDA651B360 +:10BEB000B61E83C558BD7D36A8BC8C32C6428A8268 +:10BEC0003BF4C34FCEF0AC2F5E1AD42271E507438A +:10BED0004F3D41D1460852442FA591E4EDB2F450B4 +:10BEE000F1ECA5674328694607A215DF8D30EC1EEB +:10BEF000F1E168B71F907CEFEA6E0E8DBE07A412C9 +:10BF0000E1028FF2487735AB9D6D75801C1D6B9CEF +:10BF10002A91397CADC7578344AFA879A5BD44CCDD +:10BF2000C3A15DF1D6AA856D386A2C121D37D8ECF5 +:10BF3000B3687A52F94DDA52F8C4E13E8A7B8B1A23 +:10BF4000A06DCD7E861C6D0B7928131FAD00D7AA7E +:10BF5000CCE4FDFD1D6BF3432835E4850F691979A9 +:10BF60006C19F00DD62345C3854845C2185D1A29C2 +:10BF70007D736AED6DC0E62B2F7A11672281D503A0 +:10BF800076E86A4341BD7FBC975B42D15ACF8D238F +:10BF900053885F3A90DA032CC510858B7C53953E0D +:10BFA000F4A2AB476025FEBEC29395F76FED424CFD +:10BFB0000594FA8B94318CE2AEF434166E8B85CEF8 +:10BFC000144B5E1ECD581D8CE169DCD226CA86AAB0 +:10BFD00028C96A8FB32356FCEAA89178CA192A198E +:10BFE000E5FCF189D5588858D474911A1A9F39857F +:10BFF000BF1E8A0EE69B2574528B9BF0864C215007 +:10C000003D414377A6544F9CDB1639E60EFA578E16 +:10C01000824B6D3A8D0D7608DD97B1502643E3E8EB +:10C02000F7B83EA8F6AED9C0CD2CA6568D7B723B94 +:10C030005BEC1FF8AB570D7629C8CD98BD71E0CDEC +:10C04000CACE026A6DC7D23AFAF3BAEFDE5A9ED16F +:10C0500025BC5720F3FE99ADF91872A9919FABD773 +:10C06000254D08B0606FF92F8C7C99D5BB3B9C3E69 +:10C0700001E0C0E6E4FCFEA46812633BCC2877D85C +:10C080005FA91C6CD54C1DEF04FCAA8D87A05C6FCA +:10C09000A3F74B704840FA14FCF560A837224853C8 +:10C0A0001C16686750C4616511967AFD9626EE19D4 +:10C0B000369498AF4FC72C4DA40FFF8A95C125B673 +:10C0C00035B57123402FB7F0431725F750A93D7AB6 +:10C0D000EC4234F6BD90303F243E9532222AAC8AA1 +:10C0E0006B5AEC53FA37B5407328CA83C87172098A +:10C0F000874FC6571DA442267143D3A3CAF4B5BEC9 +:10C10000D9E6202D468EEA4161F1161BA240D7DB0D +:10C1100014C6656CB61547A2550A363F88591520D6 +:10C1200004F0D7408911CD41938EAEBDD194411713 +:10C13000AA62F87EC1F465B30136B7A3DC0E89C7E5 +:10C14000E8F73016DEB09AAD0505ABFE72F2FF29B6 +:10C1500092F1876DCCA9144BEE222D92EB6C04EA80 +:10C16000E73D590922DD1B13B448933E99943CD80E +:10C17000B79003DA39C83A8B87DAA03A38783EA309 +:10C18000932972EC1CBB139FBDBCE94AA316A5F012 +:10C190003B6B1FADF553E08ACFD0C8AE15707483EA +:10C1A000A53926F4B12DAAC06309709684B0FBDFCF +:10C1B000CE719C45C2C04D8FF9F097324AB664A14A +:10C1C000A0C1B212F479634D13DCC7C8F7F691220F +:10C1D000D3229F496F83DF5DABBA813C2B71048E04 +:10C1E0007FD78356C99AF8127FF320063764F75A2F +:10C1F000BD958AAF4D744EF6D4F00BBB5051A98457 +:10C20000E92C41158DED63C990981280ADF52C8B0A +:10C210004414EE701466AB0B4D1858EB1A411045E0 +:10C22000413519415AD806E9F9A7A5C76EBC04F9EA +:10C23000319F9DADE270A941240F863FEE3459BA7B +:10C2400063076A1E100F1DE114BD86859BFC593FD4 +:10C25000755FC8BE2A56391A40F6861F0A6E2FA788 +:10C26000BF081367E93177BD5B6A41D94AF2A00480 +:10C2700016DE8D26DE62977CD21EAD461D359C8B68 +:10C28000E988BDF03510B6197898171CCB9C533B44 +:10C2900093F93EF714CC9BE7457917E9F5BB6A3073 +:10C2A000BBCE39D300C615DF7B864A0B87D105E3A9 +:10C2B000DE8994DB4EB642F67260853CE25B2C2D43 +:10C2C00091929013CE42FEE5D3563999A8570C2A85 +:10C2D00017BA25EB36DE7263076DDFBF0E18BC7F21 +:10C2E00001AD5CABA80EE34909A616B5F638FAB560 +:10C2F000895A1BAB15290CBDA56C5D2D04BA815361 +:10C30000DFB6B035F650E60D0720E8CF301DC9780E +:10C3100074DE24F688CC68718DD33D2CBD06392C93 +:10C32000CB46B295BA1C593BB21A440D967224976B +:10C330003B1AC0B12BE7DF7CACDF9D9C4306AE38D7 +:10C34000280FB919E145730AE33F79246DE92EB24C +:10C35000697A3C0A234C24086C9641DF5EADBDFB34 +:10C36000F491BA33E12930A552651010B012431B85 +:10C370000749776E577D0BB62C65D403F43219A5A7 +:10C3800001F933FFB02666E3E48325E03999D27AD8 +:10C39000B32886F56A70163EE6B2527165AD388FE5 +:10C3A0005FFCD4BC92DF56E11C7B8CB1CAEB5A76A1 +:10C3B000802DABA01F75482AD438D16E500747D9BD +:10C3C000E468980C5B1B449E29A02646EFC128FE1A +:10C3D000D72FED6A930A76C54A176FB0D16A569F78 +:10C3E000199B0F03C164ED492CDF936E28E423638E +:10C3F00001B3E1D11C8D1196EC89CBB70B02F26C25 +:10C400002F7563C632A4B21B517E976F6524BDABF6 +:10C41000C08F1EE89F3E3DD3EA6411D3E695608449 +:10C42000F5DF6F5B7AF557B96A53CE94265A1A8AAC +:10C430008333041F8AB5B3796DB4195F2D09C441E4 +:10C4400068215F80F3153557C2038FB04D60C2F786 +:10C45000D0D91597A6E06930DBFCB6AEABFF71A36F +:10C460000E4B428BE63ADBCDE359DFF2C176C16376 +:10C47000E764B0925798933A2F5771359ED601C50D +:10C48000763659039CFFA652E5691E170B132168E7 +:10C49000FD943A3A7734E685B2AA40F700C857EBE4 +:10C4A0005250CC1998F427A9269685C47A3D1E9E31 +:10C4B0004C42F36D3284DA948B96B951351629AA21 +:10C4C000419999E26DB9D13CD0D3CC170ADFA99E2E +:10C4D000D793E7CB5BD58ADF3887DC132E10522247 +:10C4E0005B3C65A6E1B38C209025FBBFD65EA078AF +:10C4F0008873D713D660BC0A2D7AC3F0618B3D1CBC +:10C5000020E26D9B44E44484E9594DD3B60FF663B1 +:10C510003D1C36E1C0999020AF6BE92ACB5084D8FE +:10C52000E44D2BA359A3D804CEECFC7299D55D0839 +:10C53000E0C81BD132C2A3CD862F094483E741A8AE +:10C5400038226886099FFC404AFA525E79FFCD5234 +:10C55000A888D69A981BED72E7F20508061BB175FC +:10C5600080AC18783942B54922BEA3A1E4220C520E +:10C57000FC30BBC9978CCE12850186CACCBE5364F1 +:10C580008422AF5AE34EA6A16803E68A7919D387BD +:10C59000042A03852067B8ADE5CB79C0D38EDE428F +:10C5A0004CDB3B9EACC72DDAA06B20A13794E64054 +:10C5B0002BBD77BA0C0A37006D8FEE75A0BC2CD15D +:10C5C0003DCA7B3FCB564C0517AAFECBE34003E99F +:10C5D0000FF6BC33BBDFA7BFB26B209A6DD586398F +:10C5E000BBF5DF4FBA0C213329FB5EBE79BD188243 +:10C5F00012E6BA95155F551824F09F4C1AB85B20C7 +:10C6000013B6E3B23D9D98E336055CD96FFF818197 +:10C61000B4168659298CD64E6C2EE57E4B7F03725C +:10C62000474D731E8958F9983D7CEAC938DEE158B8 +:10C630008DBEBB76B3E2425D86185CE0290D2A7799 +:10C64000C6BD7251511C95D0A78619FD3B85AD051D +:10C650002073F8D363FA0BA4FB72A7CA1C908CD585 +:10C660008D83C20ECC6B5EF5E007597EA217931B3B +:10C670008D961D88392949612A09D6FA40F91FEBA0 +:10C68000972D9A2120F914FD2BF09E574420AD6D73 +:10C690009081BD5C1D106031AD14077CB0CF6CD3B0 +:10C6A0000355EC9EA86273627670967A2437F35E27 +:10C6B000C48591C34EEBB363760C42E3079EA2356B +:10C6C00049D8281796599BC86A4628489ACF678840 +:10C6D0001029B079A4DE6F34D761EBE4B1EFC66DF9 +:10C6E000F2EDB04105AF00CC5D1646D9429AC7E6DF +:10C6F0008C1A1623AD59DDCA3DA0505E31B66FC607 +:10C7000000BA8A734E3CC249EB35B0BA3D4C3B840B +:10C710004A386C3CB96D9AE76DE61F80F0C94E024D +:10C72000437F7AAC387322188BBA86EB300DE44322 +:10C730002204F283641CAFCB833B9868723B2CEBE2 +:10C74000075EBABA9EC2E9A29EF4B14FEC339310D1 +:10C75000B38B49AE5DB978A102802AFBACCC42F123 +:10C7600011D77CBC7E85E024CEF751886AA9C879B0 +:10C77000527FD06E83ED47D8C4E71FD08389F00283 +:10C78000E542B08C3E41D82860CD88F6DB99687CC4 +:10C79000C011833BF4EFCDACDEED2CE9917CBFFF03 +:10C7A0006C6BC2B0BAC0DB081AA9EAC93EA31FB5B8 +:10C7B00083F5705CA251624C5734ED3C5863FED453 +:10C7C0001CF411E7DC8DAF5FEFF202B61F70BBD037 +:10C7D0001652DB2EEFC402D780E5278E45320D7C42 +:10C7E00055F3661D15C7F5A866A5E89A6270BC48A2 +:10C7F0008EED13E2CB21168CB0E432556E3564CE4B +:10C80000D743A15340134DDA9248171B1514C29514 +:10C8100051C1D3C704125CFAF649843C862E649554 +:10C8200086C6F930074746687E6CDFA70E073DCA0B +:10C830005E517E9BB7D1AD370832A07CE84C8E8E1E +:10C84000B52B4BD22C6D1E0C8CCD2CE0F3D1423885 +:10C85000D34252558499C81745D2A94FD9B067948D +:10C86000F7000DF5D9BC9D236B9B66CE9EB3258545 +:10C870006B4088341615A75B07ECCA381FCC666D71 +:10C880007717E5C897212F4CA748189505987396F8 +:10C89000B35ACE118B9577AB27216FA9E55C8958E8 +:10C8A0003EC1DB25DB9486295755C5DD4D2CBDFAED +:10C8B00091E1DEB6347C231A98D981B80FA3876D35 +:10C8C0008B343B0238580B69234D5930EE552E7C82 +:10C8D00020AC91DBD627D79EC18B3049C56E8F30F7 +:10C8E00036C4E6A0A1E66D7C6527362C76C5568158 +:10C8F000FB3DD2B8219813D5202157F68C9EC13C20 +:10C90000E7880A7599CDF3F295994634A79BE0AF75 +:10C91000501A7F0D0400010000000000000000001C +:10C9200000000000000000001020000030C90100DD +:10C930005914F60DDD9B9FBDCC9829F8F8C361BE54 +:10C940008E02348C5564AF38A42282B9BA7C294057 +:10C95000635F529020ACF50F9FEE88598C1195B90A +:10C96000E9C303DF5742DD94B16F4AA98B25DC8010 +:10C97000FD8DBBCFA0DED6D04F538364EE2963C9B3 +:10C98000DB20C24B90916A4407572148437690BD03 +:10C99000D72297EA2B8C713B22B3517F23A70787BD +:10C9A0001F678F814323A7FD3EB864530639536543 +:10C9B000480B08477269389F567CD61C27CA99C60F +:10C9C0003EB81FD2C140E636DB277B7C78E13BC214 +:10C9D000C6F803C047E4018F53C10F96DD1F7F40A7 +:10C9E000BFCAA1620DBFE88719D46608CE9F566FF3 +:10C9F000B1B54C94203738D4E320FE2BBEE3EF25AD +:10CA00002BAC244CC5EF9DEB6F0C0C99EEA00C7277 +:10CA1000225E42DFA3455AC986FB62D05E9AB38686 +:10CA200079C523BE29E3AE1CDA3E19C296C56CDD7A +:10CA3000E6D644920E760E9E3E2A080D76D151B26D +:10CA400009A3A93368379065F097EDF4DA7CAB98C9 +:10CA5000DEC42F507F7DBEEC2BD815B0B3F2B801E9 +:10CA60007593B8C4F585254F38784CB347E3462312 +:10CA700029ED66905AAC4C1DAB3B2A4422C4395F69 +:10CA8000402AAD867BA0C176EFCD45FE203E601BDF +:10CA900019F371E65FA077FCFA5B7A151C26309DCE +:10CAA00086CC4DDA80EBF8F37D54370405FFEEDADF +:10CAB000CF9CABF983FEA5FF52E9005F931D6D2566 +:10CAC00035FAF3784CFD0263B064BD310BE7465B89 +:10CAD0002E5478B50C89349CA5264C33B301134CE5 +:10CAE000950A4E043F5136C3422E4B9F878B4A29ED +:10CAF0006B7828502B0D03BB48367BDD84EB9D3CC7 +:10CB00007E3B0D523DD310BA4BA9A8AE490C13F58C +:10CB10006DB220345E02FA10B1AD00D9331F33621A +:10CB2000E1D7859E7D96D5125A902718A9D7B24392 +:10CB3000D6C47BA6E568BB29858E4679F11D1CDB32 +:10CB4000E9243907CD9E6ACE1F5255A73B425AEEC3 +:10CB5000214EF9FEB276B24B9946CCDEF8C24E2C8D +:10CB600081FAF0BC54DF62DA8AD92DCF034263DA4E +:10CB7000B4FC815A0A56B29C52906261398119D52F +:10CB80008E4A74CF8028697440768F4EFC844204AC +:10CB90007BA503A984A054C5E36957CB04AE6427E1 +:10CBA000B76FEF50C9CFC7CBCDC42284BE9573FEFB +:10CBB00037082ABE915441F75A4C740019C03EBB45 +:10CBC000679B96641C6B897AB10603C2BED39D2312 +:10CBD000ADE2C2F35911A4512FFE7D0F88AE71242E +:10CBE000EFA55B01218A3F7A1F541E2E401D686C01 +:10CBF0001C1385A95206DFAF5BD5080678FAEF90C3 +:10CC00007764859F166298CC7A3F6DB8644939E89D +:10CC100079FEC6499A3BCF98579240A5A4661A9FC1 +:10CC2000C380069524E2A1CF580784C5509F737F27 +:10CC3000A048FE9542E34500C57CC77381F3268E6C +:10CC4000AE1C7B037C54D3E1ACA8F0658B40F1BCF7 +:10CC50006E35D4B8BDB8616F81718A804BF7782684 +:10CC60002D3F45FBDB86A2F9F43E056B9EE7EE5AAD +:10CC70007D3EA804C03CD59805659DBF81D5E31DC8 +:10CC800095A985CDD869129F16B6863292AB8B15C1 +:10CC9000921F7BF785A8C7268AC01A0274AD1DD9DA +:10CCA00073BE47AA94E9D8DD0BB3D06CFFD9D9DBAA +:10CCB00038DDA0E765A74805503822854DCC382ED1 +:10CCC00019899FBE22932946E6065412FCE0EA0F1A +:10CCD000D00AE6EF9B289A4D74961F3AB4251304A8 +:10CCE00065795DC16F66CB1CE836F38BE61C11E3FA +:10CCF0002D846B53306F036721BB6B868EFF075EFD +:10CD0000B7C7AF15FF077D43ECD6B8BA6D5FD32028 +:10CD1000250816565609F04C94A81D12C1D35A7C0A +:10CD20002D929E2254F77F91FAE644D0911E23C1A2 +:10CD3000B563E659551D5C856C7E1C05DC694A05AA +:10CD40007A1AC08E7259506ED1CBD77D24BAB9CF22 +:10CD500040B9F21503C51C2F70AB4E9A01DB7B3036 +:10CD6000A4824085F5D38BC8C79378468C79B1E20D +:10CD7000FC28FB65401158DCB062DBD353DD110F9A +:10CD80001CD5A96035A0407C484D92FCFBC27E1F9B +:10CD9000B0D1327A32A84BA7B0471188989F1C2493 +:10CDA000A270EFD27D1941768D2BA674406D2D01B6 +:10CDB000CE24F19817C9170B8CED6EC4C52A490C07 +:10CDC000E178B650E429212D98553AB7F4D4A7A3B9 +:10CDD0008E894D1233F3311619866E9F4855305A9D +:10CDE0007730CF9EECDD3397E217F4118EF14D2CA6 +:10CDF0007F36FE6BADF6CFA664844778C05A5B528F +:10CE00002F838BD8F652CF069C34036D2DABC8CC44 +:10CE1000044021BE861FDD4FE294332DBB308D646C +:10CE20009BAF920DD9E65A507A290630BED2A3CED6 +:10CE300085037525D5EC46DDF6BA7D3E4127DB0D31 +:10CE4000500B6799599E07CDC98A835E18B7ADC24A +:10CE5000654933F1F8BD7EA8CF935F783650667C84 +:10CE60006371CFF87E3892202E30A495C10C7ECD10 +:10CE7000D608B95DF191086A94A3E79928C44E0FCA +:10CE8000FBEEB84B6CB31544B39B6B07E97CCE0843 +:10CE9000C1D6E2D069963494C036C32EA9085EA3E9 +:10CEA000F4ACCE3237D10A62B8069F2485415DD9F1 +:10CEB000203B1C1AB0DAF6E277D34565ECA249EEC6 +:10CEC000247E9C220A2286192C6BABAF827BDBBDB1 +:10CED000DA3A96B0AD8E399481F5202EF4E8DD90E3 +:10CEE0000C94A604F7434D551DC87DD520217085AF +:10CEF000E005887FFA8D6B59EA2C051F647BE49B63 +:10CF00005ABB951085AA6B281ADCC0119A7EC650B0 +:10CF1000370C6F49D8BA4BEED6AD8C35EF61CC15D6 +:10CF2000C455587C367FB18C1DF4EDC2084072A305 +:10CF300073C8B1F94E0AE1DFF8BC1045733C51D318 +:10CF4000509E99B281DB227FE76052F0D4F20D0D42 +:10CF5000C9EA7938A1892BCB2691ECD0C79B65779C +:10CF6000A418CECADBAF8F092AC073EF69DC9D68B5 +:10CF700033F0173019554C480007402C9DE61F4EE2 +:10CF800062FF134AF5BAF920B5504B9FDCD4C23C7E +:10CF90000B6C4557E4CD18DB47C442E0E7A35713B9 +:10CFA000FA2CDC8E4C32AFC871115AC6FBC1E4BEFC +:10CFB000C8F8C4F53C7828A1C8EFF1A00C8FDC7646 +:10CFC00070CC56924943CCB626F712CA51859CE5DF +:10CFD0008A667722A28E739BF2A46F93D96C35096F +:10CFE0008EC842AE5C2973958077EBB76E1A4C33CE +:10CFF00043CE27D95676E1ECF17F8BEDBB47A637C0 +:10D0000035A0AF5BC3FACD5B7B38E640A219B79B76 +:10D01000649C49D7241D27D3CFB08938822F276637 +:10D02000ABA7FBD9CF4A8E2D175658D27C03E7CC3D +:10D03000B118C831101A042A525D5937FBFDDEC7FA +:10D04000ACD4BFAE27BC1BDFB4D8ACF13CE49091AC +:10D050005E1C08F5B1E0250481DB6F3CAB80838C5E +:10D06000A5794D37B7A2B7324E6C72D2928A23356A +:10D07000A26D14755882759B7E692B47F616F2686F +:10D08000928925F1423B8FB2975E0C4F2F0E020B17 +:10D090003B817DAF127D195B40DE9376C3F711199A +:10D0A000B42DD218C090E6901CBD76EDADABDF1A62 +:10D0B000868C5E15763CE94C0473251F5AA3EB4E13 +:10D0C0006FD5CD87545ED160C90881D57D8C5DF761 +:10D0D000545C219C5F37C71AE58E2244F6443272B5 +:10D0E000E55D98BFDDCCF0D3476EAEC9BCF4A1BFFF +:10D0F000823DC3E5B9D3C57FE2C106942AB8E513E2 +:10D100007273DF71F39E6C3B4B3F696E626392D921 +:10D110001369951D38CCE844AC706439425B816476 +:10D120002700D26D6F308FEACF96D80B2E19515A47 +:10D130004D3FFFFF2EE1F90419BD7B72C7BA752779 +:10D14000BAFC6F1A32C1EEDF5FA4B413B2D78959AB +:10D1500050A4CF28EAC6BF220C816BEDDA7FFB68B2 +:10D16000902EE5CCBA16803A06DD7129352EDFB453 +:10D17000EE11506FE12C59B7643432C1D4C96F3C01 +:10D18000BE57B8EB640BD9138F00CCC3B5EB1C3F73 +:10D1900072FF9D781DC1A7281E4BC3F1676C8FF2EB +:10D1A000D96064BFDF41D9B6F7EE6F2F9BC0519BAA +:10D1B000958485A2B88A6BBD37BE1DC3534C53E11D +:10D1C000BEAB77871B12E761501E83CEB33E2E3B6A +:10D1D000D151B2C237AF0DB203D04E4BBA3CB7E714 +:10D1E000FCE4454406617A88C074938910465D1555 +:10D1F000085A16BF6BB3D70CF59544BC0DD3529E9D +:10D20000E8B0523B3299ED16CA8C7DD78168BEBD1D +:10D21000EEAFD272CB85A9BA176F15B6AC91436643 +:10D220008CED1FA8F7D50AD3476505E98ADC86414E +:10D23000E4F40290B4B8CC332E41CBCD2AD6E7EE3D +:10D240009579BCDDA51A8EE81B64B6EBF4C03654A4 +:10D25000B84C6D6E99981A5D04F55CAB45F0489238 +:10D260006B702DE1D8E68A61FD7EB94BFE9C0A9E6B +:10D2700064B168199B6F06EB4A9F55B4079410B8C8 +:10D28000C6A5A5A6B85F8FDAEEA079BC99C2609753 +:10D290000704D605E2DF796F894AA946B1C414E6CE +:10D2A000DEDED0D486AD066E2754E8663FBACFB432 +:10D2B000A3167CA45218ACA9F0A50B23E7FAB9CCAD +:10D2C000982125C1A78B3E8870F6B447CBF779E348 +:10D2D00034541CFD56678225ECAF3692C861B57E8A +:10D2E000C06B13EE18E1C76F1DCB3898B3C135DCA6 +:10D2F000CBE9F4C1936204CFABB2AAD0832A2E64E7 +:10D300003A13E17E83CAAB7311667DC78BF1C9F80E +:10D31000BF34D3EAEDBFBC62817621A583766CD0A1 +:10D32000FDD179F00A6104306BA2FF0CF26A7C092E +:10D33000021E5A2DD635BFE09348C4E1AD4748D60A +:10D34000905F9441E97BD1FFBC68D33914DEDD4E98 +:10D35000BBFE79409A0483339CCA74873FEAF96A1A +:10D3600069F46EFCCBD888AA1D7B1D09F785145380 +:10D37000C3EE6A53A691A9D819C6DE6F742547E695 +:10D380008E416466FFDE5EF580DEAC63A0738E9036 +:10D390000E7494BFED8C5B88266B562E2D7127186A +:10D3A00046CC02F6715F19F6057392DB3449DEC58F +:10D3B0000ED92ED03F1DCF30A54E027DDB24707BD1 +:10D3C000ABDBBEBCC243EA7D406B469F729BDADB9F +:10D3D000EA38CA246CF8894D685BE588605E8A9CEF +:10D3E000CA6511E58C29095CADF1B527BC633E4ED9 +:10D3F000E93B3A9831E8A45DB55AA4630D5CDE6C54 +:10D40000BD221397D76805FC192946E782C915057F +:10D41000365110A39293652F10921079BECA5EFF09 +:10D42000625EAE035BA02187D7FCAB43DD2B99E79F +:10D4300000CCEA399B468E2AAF268726A8F6F4D080 +:10D4400081A246DED27BB6C9E09679E172213544ED +:10D45000B3EDCB2FC2B48A9BD9480E2D986D4F7572 +:10D46000DECCE37712362756D822C9FD1BF5C1A0C2 +:10D47000DCF2B015DD216C36B72B0AF18B8D2E094D +:10D480001B9479192316C6F564334D919DC51C185C +:10D490001E45CF28AFB43D6AA97B2A4C43EA71DA16 +:10D4A000E2AF4E6DDBFD79CCA71A354F9C232B9E46 +:10D4B00041200CCD6069B4646B9B2AA5095558BB0B +:10D4C000BD84443BE75E0ECE73E2C5426CC035F5C9 +:10D4D000B67150E9085EABCDEA36539868E30E1496 +:10D4E000D754B6D70BFDC5955D8FB4FC9BD9E7BD6E +:10D4F0002329ECD33EEA40C9884F25367F195DBB0E +:10D500002A4AF71B43AA79D0B8736A0962E0D2D5D8 +:10D510006697756D45EEFEAAE0823726C7D13EE2DA +:10D52000D736AAE11712363671EBB6BA7D8402E916 +:10D53000C249398D4052CA4385B3991C611C862764 +:10D54000E27B7DFD02AFD3FD5BFE1F208C5662CBDC +:10D55000459BC57833DC07C90661DD082699672439 +:10D56000EC3E49C5BC7179E8088C3F53E02337573E +:10D570008B6CE8F4A3A30A57AD91EF631346815176 +:10D580005ED36B1BC934EEEC3E276CBC717AA77975 +:10D590003CC2F122413BE341DEFC5EA3A629239578 +:10D5A0000D627961C8CCDF448D60613859B2AAEF51 +:10D5B0000A376B9193D4A5C34630ECF6C4DFF43A36 +:10D5C000DF2E32F973373C833307E651A50E1ADF9D +:10D5D0003C9CEAB3BF858CD30914D32D841A4057E1 +:10D5E00008E625C464F41D3286AC450B5DEEBFB67B +:10D5F0005A239A3FBEE8E327B38640974EB80D42C0 +:10D6000058546A1A90F2DBA95DBABF2DB12EDBB572 +:10D610004B25A4307E45987B79465E3EEFA4873B40 +:10D62000B67958B6DEE1D976D99DE48F25223D1131 +:10D63000250CC2A9C3C2B3766BE50B19D2E2FE0B6F +:10D64000A4E0DC8F5D42BDE9DC92D139A1306EB03F +:10D650003E9D12D34AABD3AB46894D4CD6F6D5CEC0 +:10D660008EA581B2748682567CE5577D4DE8532F96 +:10D670007DC1C2FCC90F40B6549EDB141DFD86530C +:10D6800070D51F37275A048AFBC4B2434C087FB1B8 +:10D690009A10EBDCEFA654574FCB244479698B5F8B +:10D6A000015E157EC9B5F1EBCE178927421A7E5B64 +:10D6B0004C173160CF20089F47A6C46D1DEAC441B6 +:10D6C000D266184A961621C8CC06702086D60C4819 +:10D6D000CC50A26196CE8096127CAA25900062F56D +:10D6E000BD6C9CE57BC895E91B70EA9E29030E9DE5 +:10D6F000AE937BBB280F565DEC6168332124A320D9 +:10D70000509AAE2381C41EAE66BA830205026662D9 +:10D71000FBF612FCAC7570F7060DE58FA17A24CDEF +:10D72000EE6CB78F0D739398D7DBFC7EEFCA841A2B +:10D73000C42D4B910B46EA8B535B3EDCFEC02A1A8C +:10D7400049B3729C21649D91D26E97B8698F662D02 +:10D7500065F26A3F99A32216342D5050639AA6F6BB +:10D76000905956DB9601A6B14AD55DC7CB313249F7 +:10D77000ED36718B44938C9A04EA6E0E5B901ADF3F +:10D780003113C4C0E2D6679DF65D696598750B4498 +:10D790003E359C2E9F892AA4A14EEBE8E52F69D047 +:10D7A0007ED31A5647410A52B6AA286411930C3305 +:10D7B0005CD740AE96D8B23183D64B9D8C4BC71BFD +:10D7C00047A59D7BB97EA020844C75BC67609515EC +:10D7D000D8E11D6696C8BBF31530D16A6270E1F1DD +:10D7E00088808C6B7617C89C4B6AF89A0B8D4938E9 +:10D7F00071FC8557F8134C0FF327BC3286B41A60BE +:10D800001E6B9DBA2650CE3E9C78396153455721F8 +:10D81000F1ABFFE8C2D3EE8EB710E6A9FC6B6B2428 +:10D82000819F738BF6599CB2CED6095FF1BC9C41A7 +:10D83000145F9DFE178C6485A18BB6739B3F529538 +:10D84000D6C71B9EA626AD981EBD612DB78BE1D411 +:10D85000C2D01FD8550833883FF6330B38FD070A6E +:10D860006D664CB02AC6B5F35EC117A7DB7A78E9BE +:10D87000862FD7659EF80475B2F6DB2EE0954BD661 +:10D88000808FFDFBE0B7261961D9960ED6F4CE3015 +:10D89000A038DF1B75AECA9EF97FD55F5A24115D93 +:10D8A000FACF701B22E70D2681C344E37E75FC444A +:10D8B0002590B18862210CD4B393B188AE1330D0D7 +:10D8C0005086482671518557B822CACEDA3619E8F3 +:10D8D0009E2F26681A997283A937D4C89739E6D043 +:10D8E000FC880B8B14F4C3BBAD49C20244EB31DAA4 +:10D8F000B2E8E3CBDEC9116AB758B4C1EB79E8C529 +:10D900008B8E9E23BBD17BD32FC8052F47B74D0BE2 +:10D9100054518A85A265EE739144CCCF8D4BBB1FC9 +:10D92000B4BA9F03A4B2A13A378ACDFEBB3F331BE2 +:10D93000B53BF4A764D844F73ACB21C5E1DA0B7ABA +:10D94000B3A79197EF26C376147745F3CBAA39177F +:10D950006244FA65CA2BE84CECD62820F5A727BA12 +:10D9600016E885D1583EA6376DE00CB232BF4C7A2E +:10D97000C010770CD3D05D553F5FA5644F52869E93 +:10D980002CC6BF3DF69504C6D6CD34E186BD46868D +:10D9900085DBD76CBA562332A70904650C4F00AB60 +:10D9A00035A7FC5632443830CC3B231A4651C48349 +:10D9B000B8AD9CC9C54B2AC028D67A8B1DC625CFC9 +:10D9C000010FEB8E5D570776B1B51609101D0B419F +:10D9D000A916496123B18949AE0C928EEB54011E00 +:10D9E000B029F80C88F8251E9329F66832A7104C48 +:10D9F000C0E0C9E6F579DDD001EB409D78B49FAE7B +:10DA00004FEDA289CFC74003E8C914641A5C700BBC +:10DA100087B2BBE4ADB905FF2882EA4F66155B3DCE +:10DA20007AF607B19415A8DA7BF9020612A9A47157 +:10DA300027074F2984C4E026B00FFDE9DC11F288E6 +:10DA40006028FEF7841F379B824F58EDB56CE66D5A +:10DA50008B65F38F2C7FCC83E253EE76D4073C6248 +:10DA60005B1CA0E8EBCE70FCFF009C3B42FA06EA90 +:10DA700025A75300C6DD0E5068E7CD7568FE45C783 +:10DA8000829C1463A51AEA2C1D9B6BED62D27EE882 +:10DA900040C29B0F8DF8BBF4A17A2E709AF8020851 +:10DAA0003C730EEB688407BFCCAE03EB6F18D170EC +:10DAB0006D7C044B372BEE30E34B73CD08CB6F53AB +:10DAC000328F572C8972A6A434989972B904135EC8 +:10DAD000289244102DA517EE2D9C1D0AC7709DC0DD +:10DAE000E10CD559F6B86A0D3F9FF775E2B31B9765 +:10DAF00087BB987FA4483CB76FD55997F0577B7682 +:10DB0000A672019985ACB3A348E77359F11DBA4CCD +:10DB100044A7621906C325129BB4E3A7A7DC58E407 +:10DB2000FC0CCC766E1E8EE53AB482DB967C05B595 +:10DB3000EE7793B0E6DD8666A0D4F522C3937B71C1 +:10DB40009EACDA5A5A35A257F2C7808D2E759E5B6D +:10DB50008D6BD5B91F8109D2CB790B4F2D94135101 +:10DB6000416684AF9007D9D35BD37513C475FBAA04 +:10DB700081D03059B35F93E67602A0EFF4FD7BC409 +:10DB8000AAC2BDBB110F5811354CC6DD9D475BCAFB +:10DB90006F093C666BE822455FACD900F995820DB0 +:10DBA000DABE12C67129301EC5F5138B1B9B274B9D +:10DBB000FD65BFDAD63CB029E2D03D8AE04BEAF4FD +:10DBC0009A852890EAF8CF91AA93B14C4E44D1F0AF +:10DBD000AE6F39ABB63EBC217CF62C592A08634C9B +:10DBE00076217D3AD7DE653B4CD39BCBE9F50260CD +:10DBF000C1C815ADCDEA804011A6956415B5348431 +:10DC0000F5C4BF9A506D829FAB41695461E6955F40 +:10DC1000967F2F39D25B14E7B8A203892613E9E077 +:10DC200065E57E2A5AE04508975F447DFB89549359 +:10DC3000C3B50111260F2E89E95FB7C73993089143 +:10DC4000B2F290133F474F492F1A985F67C39ED88F +:10DC50005288570F5C4006984D6FF7C97959419F1C +:10DC6000A46BB9719CC68B01D64E93DF4350FF7AEB +:10DC700053853BDB2D041FFDE2F9365B3E814D19D8 +:10DC8000E435B54CBF9C4614F48D5E82794411D7BF +:10DC9000467B0EB2B488FC93C3F75BE29099B4D391 +:10DCA00081F7042FCA3162AFDCA124FE168C2DE56A +:10DCB0001227F18DC4B61F83C673949437C0396C94 +:10DCC000D06AB48E9205B8CD90B1F6E106AF84C5A6 +:10DCD0002AF818283967258FCDBA47C3E78C5EDA52 +:10DCE000104E0B23184D053F25280AAA58E0902F07 +:10DCF000B3D8F598596BE2D69AA2AAD59B7ADD14CF +:10DD0000EB0583C25F8714B9DF6F4A4EF1CE866F91 +:10DD10001D02FE073BB902C1FD3912D8C3400D53A5 +:10DD200052CD2CDCB46B7B90C6A438C53E9604194A +:10DD3000A66BD9E3AF90BCBCCE784786E6F6AEC8FA +:10DD4000AE2BDC72A105E6F122CD61C18D9BF528D9 +:10DD500036B5FCC75327FAE5FB8E2650A17D32EA83 +:10DD60001E165C6EA89F9EDDD320BCB4A75B519E9F +:10DD70001FD588328BDCF15348C057A9272DD848CE +:10DD80008DD7C3D13E4C5F2485F00A899B544CD774 +:10DD900007FC6F105DD8EA945893648ADCA5B6AD91 +:10DDA00036FF41197622267130C352B1EF936A10C3 +:10DDB0005F81D86B932A201F139506855B126171D2 +:10DDC000ABBD3839EE7542646AB316439F35C5D989 +:10DDD000411BE1389D693B2B732E351F8246D916B6 +:10DDE0005A7180C1D74BB1235ABF689A8E29C68712 +:10DDF000009E0AE63F37091C39F6E89CB43C894B83 +:10DE000009A5B0C86D779FD017689A777A47BFF396 +:10DE100059637FF65911AE528A9B0DEF7ED87395E8 +:10DE2000379E4D36E608657F27D2E13E5A75BB66C0 +:10DE30002722FEB440B8962F5AF679B8010E84BC5A +:10DE40009599CF9546D52FA38D876DAE684BBFB4FE +:10DE500082916686889FA15895506853DB261FCE15 +:10DE60008C05F209CDE71376B477EE33ADDB81484C +:10DE700042D353742CB75F83F7C1AD4C0719C33637 +:10DE8000F027C33FED13E5B522C178F4668DCDB818 +:10DE9000CB021567740D3D71804408AC272ED04F1E +:10DEA0009F7AB7C458F3F586671921AF7B657DF279 +:10DEB000F91C70AF89596F473B29A0F7AF58BBD900 +:10DEC000F25363F2B9ECBA33516DE828A2E38FC87C +:10DED00005F7CCD453D9D5E4A0992CCD1C189F13A9 +:10DEE000C0FCDCB7A109B23B61DFA9B55A99E9E1F1 +:10DEF000D0DADF38176FA696C530E82836DFC41EA3 +:10DF00002D49C80D70E883EEBC4D6DA2E7EB812072 +:10DF1000E4CDDD1E5A0D0E2AEF523A629A60D0DF30 +:10DF2000A1750D3C20550FA821F558C109C708025D +:10DF3000CDA61F0042724EAB2F84A4B3ECF685E150 +:10DF4000000606BEE99E3AE0167D0D9B6ADA2BA616 +:10DF500058EDD18D120C7B47281567395288EF3D5B +:10DF6000CD99BD95D8884A21B3E8169BBCF9BBC1B1 +:10DF7000F45EF737177602859FED888F783434F298 +:10DF80003F6A9186AB877E3500F8739877DB61DF57 +:10DF9000688CA3563A44FA9F5ECAE46AF8550FF2B9 +:10DFA000F9F71C09B6A0C16D8EF7A115029E05A256 +:10DFB00043418CF6BB313C4C1183197FDB73E199F3 +:10DFC0003122785333586C0791788B242B7979243C +:10DFD000A129F9D3B81AB6C77E7F44898B34746EF1 +:10DFE000381D5CBC13B9891F93D0E20BCEA39E4BA6 +:10DFF000D07E4B48AEF8ED056C9EEE15C263C5EDC4 +:10E000007DCBAA90C021D981AB600E74CC345080F6 +:10E01000C405ED2A1D114176E0C308E93469417950 +:10E0200026BBDCEFF6634FB71C12862CCE7630FC95 +:10E030000E5CBF50F78EBF2CB50A269E706D4C3813 +:10E04000FEF33BFDF2DFE8C3AEBCC00A841CFCFD5E +:10E05000C5E206B91056D6E5F2F5BD43E5E5FB7914 +:10E06000672B4122E418A4F0289D6819687BC0A2A0 +:10E0700066500303FF90839FD078B3B302E42D2250 +:10E08000EAEFB1D257C33DF27C07D3AFB561E06D83 +:10E09000A2F47109DE4A131B8F715CCB345ACD1187 +:10E0A000A1FA1F4F31BA60EA4E449FAFA4177525FD +:10E0B000DEAFC9A043F8F8A87B85AEA05646C6B32C +:10E0C000DA0F76530689B5DA7E490162073BC95FEC +:10E0D000AD59C0105AE3806C3D79B4A14DE70A8D6B +:10E0E00002C9F3EBA8D481BF4E6995CD638BD6DB13 +:10E0F00071055599FF99DB04C6B51E3FCDCCB5021D +:10E100008CB478813F3F202739689D0AEF738D23B7 +:10E1100090FDAEBF2F11D02130A81F778DAE2E7E7F +:10E12000D58A710355E36A013BD86A82B10104DAEA +:10E13000F298A6CB24A5CA20B093E80945C5502380 +:10E14000AF1E349361234B9D8CDC02058BE0507E27 +:10E1500003C17A5CB223E7D0E60B78406DE4A1DE20 +:10E1600030B4C85C6684096ABFE8D75F512E17DFF8 +:10E170002E36ADE8619DA6AB8B034161DAB9DA2793 +:10E18000629BE0518894AF1F04317104790A1F7AB1 +:10E190007162526D9730A9532FB1AF26A93444F95B +:10E1A000A03B4E6D3066D2E3CE9DD7A59632E6B544 +:10E1B0003D4EA12483CFBA6F810DCA73E517A7C660 +:10E1C000EB35D602C70FD4E7A68572F63DC7804867 +:10E1D00052B983822EA95AAA65A81BBF7048BF3ABC +:10E1E000C736886151A4541EB20D9C33D62AE5135C +:10E1F000A17179DADEBF38D3C72EFE7AE8710E8EB0 +:10E2000048306276F943F63F573D4B61F56CC5FEE9 +:10E210001CEB4ADF1C3316328CC07AEC9761340455 +:10E22000E8C8EA2BF72AF4D83284110581E5A26800 +:10E230009605260B81BE88B84E29C648C83C87C6BD +:10E240001EEB8BACF4CB79F39F4B347488EC8F448A +:10E250000099B1E9B245FBBBDC3660B6DD7F0C0648 +:10E26000E87CD80123E76B08A1448A2CC2EEE4C302 +:10E27000CD7C1A2C93F7DE8E0E055614E815AB6094 +:10E28000C25F5E39460E9E449AF754CF845E45C005 +:10E29000CF638F8140F55FDEDBDC1D523382726518 +:10E2A00028186FCAEEE1B46E13953995F6E655DF7E +:10E2B000F867F861A3FEE504B0B16EB47091DBB00D +:10E2C00078F4B1EFB81BC42C0604F491C3BC44B974 +:10E2D0009F800D167F379B5A810BD3CE8ADCA1C657 +:10E2E0002BEE483D3B665281FF6B1843DC4F109F7D +:10E2F0009F6F037FD58F36B7B1B075ED55F65F21AF +:10E300003615F5461B5AD511B866ACC6D1DC2EBF02 +:10E310002618A9193D8566CD000702513C1654F90F +:10E320009A315B4A895A17751DE2887E43064F9CD5 +:10E33000662AAF8BE06EBBD69D11831CA310233ED3 +:10E3400092C4D7C90A08C88C7A180E0F07B17BD1BE +:10E350007B0DF98AB3E1F6071254779812D5A5E53B +:10E36000D57B77B15457D4DB4DDAE722042B01ACCF +:10E370003F213E44B6C837C73E4D9D98ED77711793 +:10E38000AC77028C1EC6DD3EC1C79C0EA6DC933F57 +:10E3900051E2BF510AE2CE1CD1DCF29B4C4CF2E1BF +:10E3A000F58C8541399655E8EE696599F83FC80CBA +:10E3B0003672D854E82D23330C224952AEFCA68481 +:10E3C000737EE3F12C2464425BD522077F85BF85F1 +:10E3D000003ED4E4637EC07E8C50B2A6C51CFC8790 +:10E3E00062FBFA3D8293337002EB6F2BFB7794490B +:10E3F0001317C78203B79734C10D0D18F0DCB35063 +:10E400009103412DFDB6313E1F8B1A3114FB1A24A6 +:10E41000A508C2A986EE12F09FB78107C145FB3A55 +:10E42000CCFEBCEECDAAA36C42B47D4F4CF54EC1E0 +:10E430002FB30D1BB0A189CFEE9720F922A54C5721 +:10E4400054FFB27C89E95A242AD06D2B02C5AD3520 +:10E45000021F2227FA628F20E8AA4438630631851A +:10E4600073D78DDDE9CBDE90C9CE0A2563B94E8422 +:10E470001A5717BD219111CE5E607DD9D903255B56 +:10E48000DACB6310D076E3CD4CB2A6633C9FF4FBAD +:10E49000ECE1A3D2F7FBA37312D474D478C350B6C3 +:10E4A0001653F31967FDA3C52FEBA329F08D222086 +:10E4B000ECFAD56581CF8A0D816F861ABAB156AE56 +:10E4C000F527EA9CF07B594246E06020C210A7BFC6 +:10E4D000F627AB22D00A1DA4AB52FDCFCFBB9FD5F0 +:10E4E00074858A8655BF9F09436212668823C25786 +:10E4F0000A9CC4A43FEB10DBCD6FBC5D124E31B55E +:10E5000072E3B6C1252392E49D645E0BD0CF34E460 +:10E510003C100FBB9AB1AA2A4371B17A804DDA241C +:10E52000E0142EBFEB3A4AFC4068935A1E48838D94 +:10E530006D043F58FB0C5972747FEB4D29CB345559 +:10E54000192A772146DED53E00215BC8A236780421 +:10E55000B009B2501FEEC482AA73A39A73E81707DA +:10E560000B4C11047F12B6E804E173B2805444A549 +:10E57000E4DFD282B8A9B3207778CF1EFDBD49BEB3 +:10E5800019F5BCF4D542CF327A27A46DC1D9B66C47 +:10E59000E7E6DC2ED278369FE2EA722A01616C83CC +:10E5A000980908B402D05A42B3E0A788CBB6827F5C +:10E5B000376D11A08277387516223D24EFCB2FA43A +:10E5C000A13B24C8A2EC2B2781E7B4E3AA16C042E2 +:10E5D000398C0ABBE0DE2EF0CFD29F92F0DCD06502 +:10E5E000A326DD45FD0479989AF712DBF64827D576 +:10E5F00085B0E2A38F1D3AEF06DD7B7D28CD534D1C +:10E600009EA2EB6C24A4C507854FF0214250CC4458 +:10E61000B391CF048450A23FE48CA1C2779B5835BC +:10E62000FD526E4AE3CF9D084BF34FECFFCDDEF673 +:10E630009BAE45F0CC6A1DBE13E9C228DE60D10E48 +:10E64000014280F86490581273C9A64678F2BED78A +:10E65000E8E2CD8FB8CF07CD7305F6F05E2E0C6AD9 +:10E6600008039297AC35B141C95917D245D7432C0D +:10E6700000346B93A1041C5A1232B1EB02C512A3F1 +:10E68000B44314A27C8C189D2108F93B3DC767C296 +:10E6900033B8EC0A8404919C19D67FCE77637387D4 +:10E6A000BCA0762530E99AF91BD0D6EF9F2C5E7E70 +:10E6B000899BC7F5FC9B951FFFEA471C634FB392EC +:10E6C0003CD1FFA76DF409BE34229C31B66B4D508E +:10E6D000FFAEBA7D2D9C1E040191B1576CBA8355D3 +:10E6E0003113192D293FA160325A348DA289386C1B +:10E6F000C42ADBC76ED6CFBD1EB108B060AA69B40C +:10E700004EF096350EDA8F08A69BC220A7CE289F22 +:10E7100014005AA9F0DFA0572C7A115F74F461C776 +:10E72000BED6C9B0A0E43BA3BD9FD7D5D800B46185 +:10E730006C11F0AFEBDE0B90EAD72AC535A6503D41 +:10E740004E490F7B6455E7C5582DBBB6A1E5D1A84E +:10E75000727EAF904EF1A090D3FA21AC92A0B9EEA8 +:10E760001C26DF559BC3FA5568DEAC1DC36DCFB1C7 +:10E7700014AD1A57D8CEDDAFE2D470E4AD6C27D417 +:10E78000A7459886E186D2C843E84E8AED018F3FBF +:10E79000E0F8FF057D8D10DC5D00F598C8949E2D96 +:10E7A0008B41AD8EA6FFDE7F44F9B78D05BA00BF61 +:10E7B00009D09C881BF7504B48709BCBD6E5B2A87C +:10E7C000D0D2CC38A54FE416B76CC0835B4AB39463 +:10E7D0001ED052BF03F34A21A514DA0E14BA34B581 +:10E7E000E58B578FD18460B0443AD17DFA9E7EC9C3 +:10E7F000F419B693E690E783C4ED5C2968FB3D53BA +:10E80000207C1FB16ECD21470A754343D2B51FE767 +:10E81000152C658F512915F9C8F63C9794F89A8202 +:10E8200088683EB2C895E63FDAEBEC5B338417F3B9 +:10E8300048D3CED64745B919C67B4CD159540E8B17 +:10E840007073552E24B1D9B9CE6816DD4D7247E5E7 +:10E85000E0C25AF5AC0BB8E6274BD3F9F1E9282C06 +:10E86000291AA53382C86019A30B169D6F49208809 +:10E870004730265EB4538535F39DB6BE08FDA4939C +:10E88000CC7662C7DA3FAD907FDD06382CA44B9C76 +:10E8900030E9695BC18098EDC0D01849FFB779B500 +:10E8A000A1CFBB2A5FF0502BE13506B4AB552CD07D +:10E8B0004C1CEFFA563E9DD24243FA9539BF27973A +:10E8C0005F2B32D32003BC4BF3B0BDA4989F1764D9 +:10E8D000373828F25B0D3627E22248545AA60E9F9D +:10E8E00023CF0B4028CF452A7F222E4B65D925D92F +:10E8F0001FD742BC5A5F317130EA2E5A2D99B8FBAE +:10E90000348E0622940EFBF2AB43C2CB0D2E14FCC8 +:10E910007500576B569A8BF1F5209CC2067F9C962A +:10E920007BA7AE795FB660BEAB82743D52B545152C +:10E93000BC2DC30F0D26FA6837141C0C0920BD1A14 +:10E94000FFFFFFFF110000000000000000000000BA +:10E9500000000000000000000008000060E9010065 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000000000000000000000000000014 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000000000000000000043 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000000000000000000D0 +:10F0400000000000000000000000000000000000C0 +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000000000000050 +:10F0C0000000000000000000000000000000000040 +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F1100000000000000000000000000000000000EF +:10F1200000000000000000000000000000000000DF +:10F1300000000000000000000000000000000000CF +:10F1400000000000000000000000000000000000BF +:10F1500000000000000000000000000000000000AF +:10F16000FFFFFFFF0E000000000000000000000095 +:10F1700000000000000000001000000080F101000D +:10F18000000000000000000000000000FFFFFFFF83 +:10F19000BCAA6B7603000000000000000000000025 +:10F1A000000000000000000010000000B0F10100AD +:10F1B0000707000010C9010040E9010060F10100EB +:10F1C000B641A3D3090000000000000000000000C9 +:10F1D000000000000000000010000000E0F101004D +:10F1E00049324300FF00FF000C0D2000000000002A +:10F1F000B641A3D30A000000000000000000000098 +:10F2000000000000000000001000000010F20100EB +:10F2100049324300FF00FF000C0D200000000000F9 +:10F22000FFFFFFFF100000000000000000000000D2 +:10F2300000000000000000000002000040F2010099 +:10F2400000000000000000000000000000000000BE +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A000000000000000000000000000000000005E +:10F2B000000000000000000000000000000000004E +:10F2C000000000000000000000000000000000003E +:10F2D000000000000000000000000000000000002E +:10F2E000000000000000000000000000000000001E +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED +:10F3200000000000000000000000000000000000DD +:10F3300000000000000000000000000000000000CD +:10F3400000000000000000000000000000000000BD +:10F3500000000000000000000000000000000000AD +:10F36000000000000000000000000000000000009D +:10F37000000000000000000000000000000000008D +:10F38000000000000000000000000000000000007D +:10F39000000000000000000000000000000000006D +:10F3A000000000000000000000000000000000005D +:10F3B000000000000000000000000000000000004D +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC +:10F4300000000000000000000000000000000000CC +:10F44000841C5DD4170000000000000000000000D4 +:10F450000000000000000000FC0F000060F401004C +:10F460000610FE07000280020000000000000000FD +:10F47000000000000000000000000000000000008C +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B000000000000000000000000000000000004C +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F5300000000000000000000000000000000000CB +:10F5400000000000000000000000000000000000BB +:10F5500000000000000000000000000000000000AB +:10F56000000000000000000000000000000000009B +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F6500000000000000000000000000000000000AA +:10F66000000000000000000000000000000000009A +:10F67000000000000000000000000000000000008A +:10F68000000000000000000000000000000000007A +:10F69000000000000000000000000000000000006A +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000000000004A +:10F6C000000000000000000000000000000000003A +:10F6D000000000000000000000000000000000002A +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000000000000000000000F9 +:10F7100000000000000000000000000000000000E9 +:10F7200000000000000000000000000000000000D9 +:10F7300000000000000000000000000000000000C9 +:10F7400000000000000000000000000000000000B9 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000000079 +:10F790000000000000000000000000000000000069 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000000000000000000000000049 +:10F7C0000000000000000000000000000000000039 +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000000000000000E8 +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000000C8 +:10F8400000000000000000000000000000000000B8 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 +:10F880000000000000000000000000000000000078 +:10F890000000000000000000000000000000000068 +:10F8A0000000000000000000000000000000000058 +:10F8B0000000000000000000000000000000000048 +:10F8C0000000000000000000000000000000000038 +:10F8D0000000000000000000000000000000000028 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000000000000000000000E7 +:10F9200000000000000000000000000000000000D7 +:10F9300000000000000000000000000000000000C7 +:10F9400000000000000000000000000000000000B7 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 +:10FA200000000000000000000000000000000000D6 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA60000000000000000000000000000000000096 +:10FA70000000000000000000000000000000000086 +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000000000000000000D5 +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000000000000B5 +:10FB500000000000000000000000000000000000A5 +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000000085 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 +:10FC80000000000000000000000000000000000074 +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000000000000000000000044 +:10FCC0000000000000000000000000000000000034 +:10FCD0000000000000000000000000000000000024 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000000000000000000000000000000004 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD400000000000000000000000000000000000B3 +:10FD500000000000000000000000000000000000A3 +:10FD60000000000000000000000000000000000093 +:10FD70000000000000000000000000000000000083 +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000000000043 +:10FDC0000000000000000000000000000000000033 +:10FDD0000000000000000000000000000000000023 +:10FDE0000000000000000000000000000000000013 +:10FDF0000000000000000000000000000000000003 +:10FE000000000000000000000000000000000000F2 +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE80000000000000000000000000000000000072 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000000F1 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 +:10FF400000000000000000000000000000000000B1 +:10FF500000000000000000000000000000000000A1 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000000000000000000071 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000000000051 +:10FFB0000000000000000000000000000000000041 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000000000000000021 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 +:020000022000DC +:1000000000000000000000000000000000000000F0 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:1004600041F482E8160000000000000000000000D7 +:1004700000000000000000000400000080040200F2 +:1004800040F4010000000000000000000000000037 +:10049000F1BD398E0C0000000000000000000000DB +:1004A0000000000000000000B1030000B0040200E2 +:1004B0000001000100020002000100010001000132 +:1004C00000500005000200020020000100010001B0 +:1004D000000100010001000F00150007000F0004DB +:1004E0000008000A000300010002000400090001E6 +:1004F000000D0001001000100013000E00010001AB +:1005000000020004000500020002000200040001D5 +:1005100000010001000100010001000100010001D3 +:1005200000010001000100010001000100010001C3 +:1005300000010001000100010001000100010001B3 +:100540000001000100100010000100010001000185 +:100550000001000100010001000100010001000193 +:100560000002000000000000000000000000000089 +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:100660000000000000000000000000010001000187 +:100670000001000100010001000100010001000172 +:100680000001000100010001000100010001000162 +:10069000000000000000000000000000000000005A +:1006A0000000000000000000000000000000000149 +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:100730000000000004FF030E050E9F05FF090040A6 +:100740000040000000001E1E011E05E4159E052D40 +:1007500037FE3AFEF0D2F0D28280C4C405030532DF +:10076000800F0A200001010704040AC0196426262C +:1007700080800000C0535B80801901404032FF0040 +:10078000000000004C046C073C3200000000050A29 +:100790002C012C0100000000000000001300000CE0 +:1007A000195802190C1E00050A2C01FFFFFFFFFF5C +:1007B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:1007C000FFFFFFFFFFFFFFFFFFFFFFFF0100000034 +:1007D0000000000000000000000000000000000118 +:1007E000006400200332000A0096000A0000080797 +:1007F00007E2F025000410008000801C8000000447 +:10080000FE11000001E00000FFFFFFFFFFFFFF53AC +:1008100033333331000000000021030F000B0100CF +:1008200000000000000000000000000000000000C8 +:100830000000000000000000000000000000002395 +:1008400000000000000000000020140F004C001306 +:100850000801122F260D06010127000C004134006B +:100860000000000000000000000000000000000088 +:10087000A0657C940C000000000000000000000057 +:1008800000000000000000008D050000900802003C +:10089000010100010001000100010001000100014F +:1008A000000100010002000200010004000C00042D +:1008B0000006004C000100010001000100010001E0 +:1008C0000001000100010001000100010001000120 +:1008D0000001000100010001000100010001000110 +:1008E0000001000100010001000100010001000100 +:1008F00000010001000100010001000100010001F0 +:10090000000100010001000800050002000400844D +:1009100000220042000A0003000100050017000841 +:1009200000010001000A00020009000A000400049E +:10093000000900090002000D00010003000A000187 +:100940000008000400040003000B0006002200223F +:10095000004200060001000400010001000800013F +:10096000006D000100010001000100010001000113 +:10097000000100010001000100010001000100016F +:10098000000100010001000100010001000100015F +:10099000000100010001000100010001000100014F +:1009A000000100010001000100010001000100013F +:1009B000000100010001000100010001000100012F +:1009C0000001000100010001000000000000000023 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A6000000000010001000100010001000100017F +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000165 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000F40180031B0000FFFF54 +:100B1000FFFFFFFFFF00FFFF00C080100A00000082 +:100B20000014000000200132210C0C303000390587 +:100B3000FFFF01FFFFFFFF0606070700FFFF0101A0 +:100B4000010300140014000000020001280014003A +:100B50001400000202000128001400140000050225 +:100B600000012800140014000008020001280014ED +:100B7000001400000A020001280014001400000AFA +:100B800002000128001400140000000200012800E7 +:100B900014001400000202000128001400140000D8 +:100BA00005020001280014001400000802000128BA +:100BB0000014001400000A020001280014001400B0 +:100BC000000A0200012808080808080808080808A0 +:100BD0000808080808080808080808080808080895 +:100BE00008080808080808080000000000000000C5 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C2000000000000000000000000F0F0701070394 +:100C3000030203071E000300A600146405013D3CE7 +:100C40003C3D01043A0001000200000906080402CC +:100C5000070200000000070700000303001B28052F +:100C600001002220000502201C0C00110A320A3269 +:100C700014204600000808A000A000505080031473 +:100C80004B00019B02010006020F0F000006070344 +:100C900003020303000003010119000501001414FD +:100CA0000005000000000001033B0110202040006F +:100CB000000000FF0000000001000002030D998FFA +:100CC000590D998F59010A190020283C0301000091 +:100CD0000010289077000F14001C1C181918181801 +:100CE000181718171817181718171817181818188A +:100CF00018181818181717171717181000302E2D56 +:100D0000332F282734292A2C2B2625232224242458 +:100D10002424242424242424242424FFFF00000049 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000192 +:100D600000000000000C0C3333000306FF80FF80FE +:100D7000FF80FF8001000EFF7D1000050005031FAE +:100D80001F000005050007001F1F000006010133BA +:100D90000006010016140005090000AA09E00EBEB5 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE00000000000222044A05A02013A001E504494 +:100DF000C861F8FB0C0F84057F6EADBF90BC8030DE +:100E000090F88180B4D8080385B0F1838080EAB07F +:100E100083222080016B6A12000154000000000050 +:100E20006F58BA650C0000000000000000000000D0 +:100E3000000000000000000024020000400E02003C +:100E40000201000100010001000100010001000198 +:100E5000000100010001000100010001000100018A +:100E6000000100010001000100010001000100017A +:100E7000000100010001000000000000000000006F +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000001000100010001000100010001C9 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000001AF +:101040000000000000FFFFFFFFFFFFFFFF515151B5 +:1010500051CD0D04831010101083FF031800010000 +:10106000011A000000000000000000000000000065 +:10107000C8C7F9470C000000000000000000000095 +:101080000000000000000000AE020000901002000E +:1010900003010022002000080022002000080003B5 +:1010A0000001000100010001000100010001000138 +:1010B000000100010001000100010000000000002B +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:101260000000000100010001000100010001000177 +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000015D +:1012900000012101200219061C031F051E041D0761 +:1012A00016081709180B1A0A150E110F12100D1334 +:1012B0001E1F2021000102030405060708090A0B6E +:1012C0000C0D0E0F101112131415161718191A1BE6 +:1012D0001C1D313300100010001000108080808031 +:1012E00080808080808080808080808080808080FE +:1012F00080808080808080808080808080808080EE +:1013000080808080808080808080808080808080DD +:1013100080808080808080808080808080800010BD +:1013200000100010001000000F000022208B8180B0 +:10133000C003808080200A090000015500000000E1 +:101340000DF045BE0C000000000000000000000091 +:1013500000000000000000000E0200006013020008 +:101360000501000100010001000100000000000073 +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000001000100010001000100010001A4 +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000018A +:101560000000000000070400030001DC0000000090 +:10157000016189A40C0000000000000000000000D0 +:10158000000000000000000047020000901502006B +:10159000060100010001000100010001000100013D +:1015A0000001000100010001000100010001000133 +:1015B0000001000100010001000100010001000123 +:1015C0000001000100010001000100010001000113 +:1015D0000001000100010001000100010001000103 +:1015E00000010001000100010001000100010001F3 +:1015F00000010001000100010001000100010001E3 +:1016000000010001000100010001000100000000D4 +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000100010001000100010001000172 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000158 +:1017900000000000000000003C960A000003030067 +:1017A0000000000000007F00020022432A670019A9 +:1017B00000E8030000030022432A67000000020043 +:1017C000263200000000780C0C01050633000039B9 +:1017D00000060001510000000000000000000000B1 +:1017E0000A0191390C000000000000000000000018 +:1017F00000000000000000008E020000001802003F +:101800008001000100010001000100010001000150 +:1018100000010001000100010001000100010001C0 +:1018200000010001000100010001000100010001B0 +:1018300000010001000100010001000100010001A0 +:101840000001000100010001000100010001000190 +:101850000001000100010001000100010001000180 +:101860000001000100010001000100010001000170 +:101870000001000100010001000100010001000160 +:101880000001000100010001000100010001000150 +:101890000001000100010001000100010001000140 +:1018A0000001000100010001000100010001000130 +:1018B0000001000100010001000100010001000120 +:1018C0000001000100010001000100010001000110 +:1018D0000001000100010001000100010001000100 +:1018E00000010001000100010001000100010001F0 +:1018F00000010001000100010001000100010001E0 +:1019000000010001000100010001000100000000D1 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000100010001000100010001000100 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A800000000000E2F0258200000000810000005C +:101A90002E6C44AF0B0000000000000000000000AE +:101AA00000000000000000001C000000B01A02004E +:101AB0009004020070080200200E02007010020064 +:101AC0004013020070150200E01702000000000041 +:00000001FF diff --git a/firmware/synaptics_sharp_4322_c8.fw.ihex b/firmware/synaptics_sharp_4322_c8.fw.ihex new file mode 100644 index 000000000000..9c6e875daa69 --- /dev/null +++ b/firmware/synaptics_sharp_4322_c8.fw.ihex @@ -0,0 +1,8034 @@ +:10000000894E8B2A0000030600B00100001000009A +:100010005444343332325F433800E21001000000B0 +:1000200000010000002000000021000000B00100DD +:10003000445335205231322E342E3000000000005F +:1000400000E6010000100000B00000000000000009 +:10005000F451280000000000000000000000000033 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:10009000493243001D01FF000C0D2000000000004C +:1000A000493243001D01FF000C0D2000000000003C +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:10010000B3FC53D60B3EF4134EB04ABF949DAFD20E +:10011000BCC24D9FAF90A54E5466BA46D01124285C +:100120004F80F10147D72BD6F68D6517120E5AEA8C +:10013000345B6819316F4E64CA939F5824A079BB11 +:10014000657125956236D5EE3DCE0BB20F1B1DE9CC +:1001500087476C9113F2C9CDE0B0D76087EB65306B +:10016000293078B854CA0132C47E78EAA2D1CD7958 +:10017000C6D3294FA7F45F7E47B71185581DBD37F9 +:10018000F40C425E90C446BC199FB567C4B019A771 +:100190008BF55E742BF1EBB6B2B3F8D40E75CC7A56 +:1001A00092EB038E35700DA7755AB34BF72736B116 +:1001B00019DD7181D2196AC385A4ED2856A1CE70CC +:1001C000342A148392FD13E826F4433060AE25668A +:1001D000BDCBC731207027D542B03E4F635897AB97 +:1001E000BC2F1EFFEE77D32ABD27326D3B502BC0AC +:1001F0004A654FFB3443092C750E6DC9BBAC9F6833 +:10020000DB2BDD33BA506F26D81B5F18C97170DD48 +:1002100033C9BC4B890190467F409A0DD781A1C557 +:1002200020F4241AA0A2C130A731DAE05AB91E3353 +:10023000F2DD51F839DD15BE7836328F6EE5D4DD4A +:100240007552ED3B54C598A2002B4CE759B17A0387 +:10025000321237FC8DA4D193B5C90F610C91D0A493 +:10026000D8ED054F5522CA763F54E6602E35454AF3 +:100270009A2454D898CE658A019FAF7D1FD3661407 +:10028000AFBEDD0E43F33C3F4CC04B3D404111F14E +:10029000E503D50BE2970F36DEB10A6EA8587393CB +:1002A000D7FE3321AA335020F642E52629D01A285A +:1002B000BE34D5DDEEB676CD62C9B95CDD814AF9D2 +:1002C000E867C95018DE5DA4ADF71ACDBCF07D4FCC +:1002D000773BB8D2A0C30B45DCDC90A56FBA7E9605 +:1002E00018D89160AD6986E420175F30AF7E63CA8D +:1002F0009ABCB552285115269D619636EA70FE3596 +:100300008B20AD56858FFA500AD2F204DE90AC17DE +:10031000DDD4EAEB8FA3FE98740549912A52BF1EE3 +:10032000D7EFF039CB91C95CFE8992F5C01CFFE78D +:100330009B6E8D7D10699CCB52BC5B62D107814660 +:100340003E174AE06C2412C06E2B624418DDF35154 +:1003500017C234B3C0B7235FCECE05AE2E1CC0B0DB +:10036000CEB538880688A919A042552730009E438B +:10037000383AD035A0DDA0BBF917EA9D0AB8E641AE +:1003800094A1F37DD1CF54A22D64519508798E7B31 +:1003900037F92A13C965FB1074F20A1776327ED634 +:1003A00062F30818653AF8B02CAE1C500BC0883EBA +:1003B0003A0B234AA9B0BF9BF1AE703AA7E9593571 +:1003C000227F15EB5FB551162EC4D8566D6F829EF5 +:1003D0004408865D79EFB45469EBEFA01507660B0E +:1003E00086B95E9AB7DF7947F4D7E75180EB65E4C9 +:1003F0006A3A44C990192FD93A5CA1A4E32D4FF56C +:10040000C3BEBAE6B22C2A91CA4D2F97DE170ACC8A +:100410009582F0B4EE2F6E0A70A4CC1521E5C4616C +:10042000E73A6B29E3A642D676E53FF703141E8F21 +:100430007DFFE00D453A69A3E377BA8330432E4F41 +:1004400081F05DD5844452B247063243B8790A251B +:10045000E214C7E3AD6EEB2933AFB6C42A964A88DF +:100460003A162D2296B5701C83D36A3F506B4054C8 +:10047000F1C3E11F5EC5F9AC3DEECDE2410E71F373 +:10048000AF076D14AA572922CC58C7006FACF3FEF2 +:100490007B03F723E30CAD9D9CED6EE00BDCAA44DF +:1004A0008C68E48385A33E37374D5821089C53A2BE +:1004B000A9C58ED295277401C434A5D4D0AF452FD9 +:1004C000A6EC907CC5A5C1BD77E45B9D5BF80D777C +:1004D000FDF9CBB0400D9F264AB51528603A0D01B5 +:1004E000AA215C600ACBDFB7D7BFFD5EAD3D170A1E +:1004F0009C87C2AE87D4160C8ED9176C69CD8464E4 +:10050000AE3F2EF35D75CE362DD0E1B0D27D76BEF6 +:10051000AB29B43CF071A827DD31B47828D00C00A9 +:1005200089A948C1531F71AEECF3ECF8FA4A2B9D30 +:100530002798D715ABD53AE3A85DB2B513B32CBD58 +:10054000D033B796DB511FD1308A50373E4909B5B9 +:100550000A6E135C695B8C902DD32AE6CB10C2AD7A +:10056000F59B4EEA2FC8DE13970ECBC4C198BFA1EE +:10057000B6D185B9F7335C6A5CCA49674B47CE1779 +:1005800009D0956B1B971A4B4DBD21DA2EFBF0035A +:1005900086C454CA09973395B9E6FA294FFA36DF6B +:1005A0000D420E4FD38220E5539618ED6236448BF0 +:1005B000F937538BFCA7C3458DB8E6C4B01524B7F3 +:1005C00014F25411F002E17C280E7474DEF562E43A +:1005D000CAAC385A6FC434CB2188EB5E8BF91A1F32 +:1005E0002B61450E0E712A8121A3E7D3BF8E798F2F +:1005F000F9B7200882519D6E016962AD5A9CDAB547 +:10060000ABDD52DEE5DB55E6AF897CD4B687DA2870 +:1006100000B7FC3F3568BBBEFF241B08F65C3FC932 +:1006200009089265A4CA29DDE286FA30C75BC1B227 +:100630001A02199E4035FC4449F78CF11C22ACE9A2 +:100640003EF270F7ACFBAA49FF5182903094D74D2F +:100650002EB8B3AF85E4A28085599FAEA0CD9FD7B9 +:10066000875A06B3C0EE6E09B12E193F80939012DF +:1006700065FDB94C07E7FB14EAD918479A1687EECF +:100680008F09E220060427B303A2042D041AF0F414 +:10069000464DD9856FC4EE756EA6B1E893A9EDCD30 +:1006A00030AC912EFE9C37860A2D6DA75A41245BF3 +:1006B000062F5E7B216C8B66999242092CAAF0C6AC +:1006C00078AC80FEB2B5C71B534897B1B3BC9CA0B1 +:1006D0006686E00D572B5BFBA57071663FC8E9ECA1 +:1006E00035C5E5FED76611190C3251D6D3F7A948A6 +:1006F0000DA9BAEC4B000A76B1D2F597AF3265FC82 +:10070000B8BB8442129BC139D5359A3EAA3B179398 +:100710008E27DEC446BF926FC7CB554EC1A63A1B8B +:100720003CD66380EBB8695D884B3F150BED3730E5 +:10073000215585E6D7E37C2960BEA42DA655EB9014 +:100740009938D432CD7F7E3D44B6D594F81580E8F3 +:100750003C949CCAEC60F80F366FF8120EBD7435ED +:1007600096F3AE30A82E42A38DA819FEE169E1A64A +:1007700074D840F22B87C6A3C91882D2E8EDF2A63E +:1007800069349803944E6852CD54B17023936690A7 +:10079000A1C30B6964DE5963CDEA36A8C0B645EB48 +:1007A000A8644788BE076971C4F4DA3A7D22B37041 +:1007B00092FB2DDDA9023088A2F0F998B2FAC62981 +:1007C0000FE1EBCECB5DE71631880A1721CE4EAE96 +:1007D000949910AC2EB2F610D0D7835E0FA1884941 +:1007E000BA57C7D20B85AF827B62AD5349B76AB0A7 +:1007F000BE15AC6D28447C5262F2D814F63F3C5AC8 +:10080000CD29586961BBE8AB6DCA564C1EADCBAB68 +:10081000EE2025F7D614EAA9E9F160DE55E0794E1D +:1008200040D1F98858219AD16779E6988E8333812F +:10083000DB053B88E0BAE8B8CCFEE4AA1A7ED274A5 +:1008400017E802FCCF0874DA6A6C736A1B5C6BB041 +:10085000F4C78E7BB3E40DDBE513C6FB9493BC4574 +:100860008F7C7C3195AF0055CAD03C628C653B359E +:10087000AA8A118100C0B46C49D2F2A48EF58A3ADA +:10088000B7AE0C79B0F1F40178CC4CA0DEBCEDC869 +:1008900056D1E60A85C9CE8B404D55160B191B6201 +:1008A000CC867CBEF653B48B1C811515F55CB53235 +:1008B000B33CD1CCEFAF9BB55565CB975AB8C84B7D +:1008C000798B1A925BC397C1ADD074C87D537D817B +:1008D000331F1AF655864123A009602AFCEF67549E +:1008E000359F1441E89983EFC995FD1B2A57A89DB0 +:1008F000D58C1FD2A5F8B5DA02D3FC3529EB9DD1F2 +:100900001DB7C69CF2D953EBC6739AEB5269DF9DB3 +:10091000DE64EE5D8C6122B60E3D74E1E6D16F0FB0 +:10092000DBBC81356E1B5A95C59A609A06500AB693 +:10093000D8139221D7F3BF8318F2F8F66DBE115584 +:100940002D6368B4BA84C4E5B188AC99A4238D94AE +:10095000AB37992EBE4EA61EE7CE3EA6F22DBDD0D9 +:10096000100B95CB6B3E8A18227E18532E941E33A3 +:10097000EE5E450C55E809A2A48EEF9C52D75BC4ED +:1009800080B417F6F2F1692C385EEF506660EC32F5 +:1009900067C9E22C513F930B108322098D9E56208C +:1009A000CEE19CD1B46D636EB6E902FFB541ED1E98 +:1009B00070720930220833F70E54B6384D394CFEA8 +:1009C0006B43A8BE932D5078A7C10BDE46CDDF85C3 +:1009D000583B093CA09EB675F2AEE910A55C1A42E0 +:1009E000537ABE863DAB1242E3CABB71893B7D445C +:1009F000D34F8F9F4250A057AB280A0FE85D25AA1E +:100A00009CB8C0F3406AD12B784228EFA7BEEF25EF +:100A10000DB381D974294719F270167322028AE343 +:100A20002CFBDCDCA14F955F9B7169A8860CD9E893 +:100A3000118D1D2CEB77014AF69F51251725803B20 +:100A4000B4DF49AB6865EDD6A9416540C242A269F1 +:100A50001CE8C9E79E72E00A05BB704C23A06F0139 +:100A600035CC09E17E8E37D1FE2DCE6E025913C4EE +:100A70006DB0CA2E648B65EF67A4D0545A6E36B43D +:100A8000DF4CA2662F96BFB1315F605193D1AC634A +:100A90002B15995721546C88C43ADA591552C4F56C +:100AA0005B9E986D42507CA7911B7160B14037FEF0 +:100AB00066927127DE3CF0C988D979D96B5FECEB7F +:100AC0006D092CF0EB8A987655159969E699338D66 +:100AD0004B7AF0F653880BCF50E63DF79D0FA146B9 +:100AE000DB094549BA9C2E5CB64E41FA401BB0F575 +:100AF00099CE15BBDCBC58E0121635E031A70E3597 +:100B00005D737EE64D9DB1A199A32A44583683AB0F +:100B1000A5DA4DE0F76FE0B50251ACADF45E4C8163 +:100B200058C475D7A335EF106245D9372022967E79 +:100B3000441DB2A76F4C96B397122BA880CD9A0A8A +:100B400070D988252339BF492B4DBE61E9EE238337 +:100B5000B5E841F249C1AC2854A3C65AE54D9341CA +:100B600073B6A90F4304F4137250D4769148708E73 +:100B70005FDCCF943E6EB960F1282BCE7933A6BEF0 +:100B8000BD2211F8EC3761A4B5E350F38EA97DB412 +:100B9000639110E0FB8F6BB41D848348AC00DD14BF +:100BA000A1105BEA2FAC4C90080E27C33CED870EDA +:100BB000C05F18812A852AA42D9AECE3A2C26B0497 +:100BC00070C32D7BB7E2E3FB8EB7559C4932A2D0B0 +:100BD00044207D6DA5FD611A8A76BC83F3191B4BF9 +:100BE000A96796FE482E31204537BC62C7429B4715 +:100BF000D70E59DD7FBCF8D498176F2BDB2B5A9C8E +:100C0000E309D2FC30DD162110EF043669C56DC44E +:100C10006B2C0DC75A5CDC48C0F8C3DFBCD6D2953C +:100C2000F47987DD33086896DA591AA052F7121161 +:100C30002CC21A81939ABBDC8AECF4F775F5623A00 +:100C40004FDEE04A9FE7C0B08E208ABC5D2CB1DF4A +:100C50008655FD436CB697CB567BABE7ACAC296DA4 +:100C6000D4419318E63B2F9FF3F47E2050126E562A +:100C7000744D92208BDC2AC5FBB00F9460E7F9D04D +:100C80003074048A76B8741D1ED1A9B0D6099109B2 +:100C900017E88807AB99E598F3018A16397DB3A662 +:100CA000DFF681548E3EB38421A8DDDC527C4FE117 +:100CB0003B29CCF6D16A72635FC687E2EC3D2CF922 +:100CC000CE14AF9FAB959AFA2B166C9C97592B8933 +:100CD000212FE18C6160CE0AAFBA1980941D2713D1 +:100CE000157882D3D7F4ED1C7CC0883DD1B9B16BA7 +:100CF000B1C2B318A8FDBADDE64DD0633531C8AA3C +:100D00007353F1F1797C857353CB65EF52752135BF +:100D10006B71925DCDC633B712641F247317963082 +:100D200003BD5D7E7C68E6BC2B2460905F82E6EFAD +:100D3000235E013C35BE1856496B5B7D7E0A90E010 +:100D400088BA364DE033D0B6FB35F4FDDF83A66EAE +:100D50001F198CA0A1E86D918CADD0587E8A45DF1B +:100D6000A66ADE7BDD9D8A681A2F535AA9E926D828 +:100D70001655DEBEC661BAAB59414DCF3104408530 +:100D80001EF7BBB6628069E66E5FCE329B3B7F8BFF +:100D9000E334AB39B0FF6917701A43BD9423E03ACE +:100DA0005FD703FBAECE4B8A3AFBB46B41711E0F8B +:100DB000252E382F9FC75A784137CD7F478373211F +:100DC000E5B7345FA35F945509BAB0894519ED883A +:100DD0004D099078A2EF9EFA4A56C464636C069956 +:100DE000D3FFF39C701E7F52E93537CD847749BB22 +:100DF00087C6F993D878B90A7EA061347B57B7408B +:100E0000583E5DCBDF5CE0F4E8E1E6C4234967C00F +:100E1000DB669EF3252B0A3AF98FB3D45655F4318D +:100E200014B0FE88A044DCB772ABA5660C3DBDAC27 +:100E3000551E1B2738176CB8FDFF15DD981990C19A +:100E400052018914D612BAC836979DE5F9AE8304CB +:100E50003A4B53D01C8D45ED777603E79666826654 +:100E60001353F465E150EC287B71C5F28C6FDF9170 +:100E7000A757650B3F927EE87326D9B5FADE00CC02 +:100E800070CA30CF3B96975210A674746DE6588C9A +:100E9000D560CA96446C9DBB53C9178ACFCA93F1DB +:100EA00020BA64F8DB29922EFF31A79D4CF35B82B8 +:100EB0005FCC27290AF70149C759986E3C86A95A81 +:100EC0005A6B0B12401A222763CD1B77ED3CF89723 +:100ED0007B05E4F2AADF6D8AED43D9759D15823654 +:100EE000A394DBC4807628A3F84F5EB185D59BC45C +:100EF000221CABA33BAC16429F4CA467B5B370C792 +:100F0000984361447B1952991923AA850B8F56FC8B +:100F100027BB1CD0869715ED409B40C4541003E9B5 +:100F2000961136780070860DBCEE96332AA255DBFA +:100F30000BB93335374B569EDB615ED8F6278A51A5 +:100F400077016646DE031B15116885E53D7D7BAFA5 +:100F50008A044AC30E03F4A8540A862AD6B417E9B1 +:100F6000C59047AE65E9658D2968E140EAF2BA4669 +:100F70006B82BDD421DBF1B76B87B61C1D6BEDD442 +:100F8000ABCDFFFF76C1B9EC0E234708DC66B8296C +:100F90007849E9E057D450760F31A2E722A34922DD +:100FA000B8A42A9673ED527D16E1E5606F5CA75AEE +:100FB00095CAEBA8A4AECE407CE9FFB454D84AFC55 +:100FC000937F27AE0FD33605DAE3B26901338B0383 +:100FD000D35A07AE374608B101F833FCF46A1C381F +:100FE00086833B72FF9E3D43C4D1DE9771219B27D0 +:100FF0003D9565C75783E08960A6ABAB9BAF60307A +:10100000A5D3F6AE620A7949384ECCBF8BFD796024 +:10101000F45F66FF6A038DD0B2B8CF014789CC5C1C +:101020005D82BB975889260DC8B2A890F6117B87C0 +:101030005C3F4985BBF62C26978B3A2014326871A9 +:101040008DB9BAFFE9F8B45C0C2066A383E11F8672 +:1010500085D867EEC941C07375A09833EA2A95FE1A +:101060001999A276C7CC193D0710EB06DD161E456F +:10107000A079324497BC5296B069DA82A3709E7B05 +:10108000557297B51FF18111565D9BB271122AE11D +:101090000A8943A1732B3AA6B34C3692EE930B8286 +:1010A000A94D9247DB32ECAA6DA9D6421EF6E12B80 +:1010B00036FD6DA63EF9B3BA1F53E336FE4127DE77 +:1010C0002F04238619297A946E777C8CAC13956D46 +:1010D000BA255E8C63F954557F44D2519D57D4DFB5 +:1010E0003C6AB36891A4AD8644DEC880ABC8C12811 +:1010F0003F211A6E364D6F7B22A6EA019309529268 +:10110000C69DA3014D8B959FA034539C0753CCC023 +:10111000EFEA9B0D90D3EFAFFA16DE089A49C6F6B8 +:10112000A247EB56056BB890BA6F644FE567056050 +:101130001EA540EDBAA5EA73BEDCB679DF8DA467C3 +:10114000982657FA21F216C9D8668A71E00A2DCB83 +:1011500088F89CE14E47B8AEE97765B95E8B5D4A89 +:10116000AEFDA82B5BEEFA1A229473096E28C31306 +:10117000E17C5A00E3EAF1B8FB59DA1E18BEC88FC9 +:10118000565A592E19319A5EFEAD015FE178C68E2E +:1011900047124BC91DFA7A276BB0EFC0BA05BB21C5 +:1011A000E9AB43813F435265A98D77045D4C4E0FF7 +:1011B000D52814A131856CA42345DDD2369A52C5B9 +:1011C000386C1A762E6AFD846294EEE87B8C797214 +:1011D0004A87FD21DC593BE76DA647226DC63B429D +:1011E00060068828957DB224436BF97C0AF54BA3F1 +:1011F00063DFA1C96FC57CA482021F16121FBE0245 +:1012000036CB7D0010AF27597096EC8319A15C682E +:101210000F080D8993381511D0B2318D4E29330D39 +:10122000D08A2AD671E0AA26E1BB35DA3F0A5A15E0 +:10123000B0D3D75C580EDB23CCE55F19589874D235 +:1012400056EEBD0ED98ACA57FAA59CE54DCE53D3AA +:10125000226616F353675DFAB112F5F5205912F3C1 +:101260007B4A66F7CF0F172BE0D740070230436C5D +:10127000DCAFF471881F5A80139ABF272109240C10 +:101280007774E62A2487DD8BB1D4F4F324287264C2 +:10129000C1BF1277DE7228F247DF09F6BCF9C07FC2 +:1012A000D0E33D4CB1E4ED0AF1B418A80707FD8C7A +:1012B000A38A7557D9ED65FDA0B027B68B7E5CFB80 +:1012C00056F99380F0DEFB13CF246FAE09CF97E978 +:1012D0003D085FC4638A0D1376EB566E63CF5B8760 +:1012E0002B3A737B3145EC32226F4ECC2DCD94FFDF +:1012F000E07FE951D83D4B46472238E9C213698265 +:101300004E735BA7A045190544AE46BBB0073470C9 +:10131000248791628A63D64B31B939F3587826E233 +:1013200097DC504E75DA2D3A03130113F6DB0E6885 +:10133000C8E6653C1527F9A56C3361FF2AE13575D0 +:101340004E3C5302E05AFB7077939E5892FFC2E3E3 +:10135000B2B80D0E735D8D45E449FB3969FFE5DBDD +:101360007F25032F348140D0BFE5FCFB20DBB8A9EB +:10137000D58FE652292B10D3470C9387160862DBD2 +:101380006B9EEFC74A5A0055C126959EE3C81B1FA6 +:1013900010CCA1AA04F9A3E27351FEC5CFAAFD9017 +:1013A000AA2990B3EDD2F6C83ECDEC1D1FACAEE736 +:1013B000E96591E3843D082A58377AF0CA0823B6D4 +:1013C00071B8B9434A39CE40A2EB96942A03D2C4ED +:1013D000D68FBF662469A53B3AC5DC5FDBB6AE326B +:1013E000097092238BA38587DF00502A1BF8CD6DEF +:1013F000DB0566D0C53AD8BD9A58F4540B328A7AC8 +:10140000DCF8DD3EB618AFCACA3051D89EDC36696A +:10141000CB1549D34CFE980B48A50C1F15BEB43113 +:101420005BA219E7283A3423922E54E21EC1FE90A3 +:101430007971CCA99E35803A49A89A63B4BEB29618 +:10144000ED7583EE20B43CB7ED3E061954DD70DA3D +:101450009E142C69AE49E566DB8D4681562A2D899E +:101460009DFB9C736BCE26564088090A13BA6124F3 +:10147000F966E2FA663BE200634B465C0913588E5C +:1014800091462D4258284798F9BCD64A1203EB25BD +:10149000E196D2571AFCF55F156C2C874120431456 +:1014A0008D43F4ED8C08EC31FA7A9F1887F9C893D4 +:1014B0009CB81B205926C53CB0B5E81A5149AF7CF1 +:1014C000CAED6A2AED91FDEC70D183F5F02DCA0BBF +:1014D000F326D7DDE71B3FDC114B8334C0B39148C3 +:1014E000A5A18B1C17C70BED06D4438F49A803F9A0 +:1014F0001C68D8EFDF24A8E42F9E74E6A11FAEB6C7 +:10150000B09A7DFB86C940FDAE8242D3B4164C2909 +:101510000861BBEFDEAE34AA246A5AB86555BAC476 +:10152000C23109AB1A00196D1E4F948BD412453D80 +:10153000ABB28868457D98C0C3829C3F7E253B66E0 +:10154000D55E988DD4298434405E1458B4EE8D3322 +:101550004D5656870BB96ADD29C69B63455AA07A5A +:1015600066760E5FB9CF8EDB39226AF3D6A90160A9 +:101570005B9594AAA7800C52A4EFCAE31E6CC75ACD +:10158000140FCEF88FBE337AE2AF91A1E1696E09F4 +:10159000CF7036F1C5B32FF205EA741217A4D7370E +:1015A0008E1E2C7FD9ED3D90DED56882F8A65A17A5 +:1015B000FB9C677F99FFC2393582C99C3D9B7E6247 +:1015C000691036AE1B35991DA0699393F5276036D7 +:1015D00011A2C9D48FA036C42C9D88453096E385CE +:1015E000C181F69A81897B204B0C5AA4E3E6002046 +:1015F00084464D14E2C92F3ECA32A72BBA25B56CDA +:10160000D95ADCC3A45D6626DF88DDB892BBB28000 +:10161000E6F04A416B33DB19786EFEBFD05862FFAB +:10162000DEF69E0A7D240613F67CD7D112BF76FD26 +:10163000D0EA1BFE9A9C05428DA7DC95CF16C28886 +:1016400084465039B397D0B1B0D96EA3576933EF00 +:10165000F68CBEA868ED00AC6C87ECBA9691652458 +:10166000E222B64A4BF2395375429D69F2B577FFD3 +:10167000692D0D6F8EB5A452473362FFF8CD372A1E +:10168000AF29C8201C45F02B0DAF57552F116765AA +:101690002A7211AE24BC120045A45F735C53E1B7FB +:1016A0000F7CC45B1EEF5CB572597A7365D25156DC +:1016B00091CFAF6E36FEB47E090729A981E6BB86BD +:1016C000151D8F4FA5B1992EA2910F75BA3226190B +:1016D000244A17A68D99DE0EC627946D623E2236E7 +:1016E000766CFCFD808886DC941507D3BF835E345E +:1016F000CE0E7B0E877A9C332EE0023FDB70709417 +:101700006727F32685C9652BBE20BDEAE95825EF7A +:10171000FAAC7CEC74F54DA6B4617F2A69338F7501 +:10172000EC1B00AD141E9758128594C7DFC8C68302 +:101730000738444EB340465217C28ABFE074258F23 +:10174000A69D9CE16D1139676FA4D06625B064DD5C +:10175000D9EB355235B9B95336F5EDFF79D576E782 +:1017600031E86DFA254EA8A48019C74E72A41992CB +:1017700006A24D957E569AB2D1B8FD04D844F750D2 +:101780006ACBBB27BCBD32974717483CE072AB9E83 +:10179000DBE61725F84CA1EB31A2C9C5C5B74BD381 +:1017A000CF585E22D9313D1C1B4EBEC25C67017E04 +:1017B0006996E8BA2AD9D3261C6EB3DD22F6ABB2FD +:1017C000CAE93E1332F144A5B12AE06BBC832B1267 +:1017D000D60D7C3BFA10D212985069F3285DAD28E3 +:1017E000B4CCF71C28FFC5134637206FF0A3397D12 +:1017F0005D101F8FC2A5AE570251A18DF64D3669FF +:101800005B862008FA15D7D18384C7CF13EBF43554 +:1018100010474FAC1FC9AD170D1D28E3751D812959 +:10182000A59A59BCEFEFCB97D49043CEEA559DBA19 +:10183000C47F8AD372D00A220AD358DF4B5B0C379D +:10184000ED02D72734EE264633251ACED1B8BA8713 +:101850003DC846F5840AC8D2DE11BF004CA092FEF6 +:101860005E284088DD30243E22565363BA01214071 +:101870005B8173E958B7C4E79CB8A7E8C58CA1CBD6 +:101880005DEE6BC122688D61616AA85934E3002A5C +:101890005087343813D0880D8CC97E7EBD954F7A21 +:1018A000B6D59B45DCFA8C4A301C68DCE3B0036596 +:1018B0005DFEB53766FB6CF7DA085B9C2533C4E048 +:1018C000E8BDBEBE97DE33ACCCD53F2F065BD1EF73 +:1018D000960ADDE3610CD536E9D61345C5D23D61E4 +:1018E0001CBEE7DDE8A8EE6898B18608BC9880B019 +:1018F0009A4DA3B84F25B27E5FFA66C0229B51A3D2 +:1019000056B6F533B8F277CD86C543AAFCA9F5A241 +:1019100075A1585B144A5DE15D86836148C01689F4 +:101920008FFF83E0AB9ED366A463B5C359D9345A05 +:1019300065EC3AACB0D9C2B12D5481E72B64C9D45F +:10194000893C3060865DC916636C34C62064CEE283 +:101950002B7A238E7C2F629E6D51BC89497444C0C2 +:1019600017C0EA0945E3407340B99472862DB22A44 +:10197000D23BFB5071FE4332242DB74BB8D4F174E7 +:10198000EAEA7758C3A0FCB4075EB4EB17FB3D7AD4 +:10199000F9838BAC76C5ADCBFDAB1F1D6D4068A741 +:1019A0001EFD2D6E5F7BD9359C27184D3059527422 +:1019B000C68A51182C52001D9A6F7C5D2C788DF1CF +:1019C000B7084C4562C59A7316FEA8185BA1694F0B +:1019D000A46E362A9690240DC96865049B3A8BEC58 +:1019E000174C9E0E5E198803CA8BDB4EBEFDE2EEDD +:1019F000959ECCDE3B17CEC1BFD05BF07B97ABBCD6 +:101A00003786DDD7A875033100793D72C1CC21EB53 +:101A10006BBFFF6776AB826E06EB4294690BBED557 +:101A20007DEF2F9E6A2C9A3568818DF00A0305514F +:101A3000DC031AA39656BB75AFA1E132F94578874E +:101A40006750465A0650C0CE86345B047778F93426 +:101A500066104C463776BA926484F8BD70948295CD +:101A60009AF989A08809C7FC0BF9CDA3C0635BF57F +:101A7000F2B0B44E33143865C5CA83619DE44A5D43 +:101A8000FC9F072EFB28F33D130B2A510EE82F9BDA +:101A9000637AC37C492709DDE5AD06AE6EBD62D829 +:101AA0005CC21EE05A74990C861381486C1F7FBB80 +:101AB00018B5DDB1AE5FF8F6678511B754C56CE6B1 +:101AC0005CCEECAB9BB70AAE1FE43FCEA473E83EFE +:101AD000BFD6A1934EDBCF342E2DD7452B538AACE6 +:101AE0007094A3B0CDA02D4A7182472C8D0433CEC3 +:101AF0008F0CB631D65B430F590320F0F20517184F +:101B0000A339B6F7CC9481DAC8EB7C81BB5F5D3139 +:101B10002BF91C24B8EE0E56DD6426154B31E90571 +:101B2000A9D5CCBAB539785E6D7A7D3B38F4197990 +:101B300010AC60684BAA4064D2A39C243C97261545 +:101B4000A2D4451078AFE38E38271520CE022E1987 +:101B5000DB41D4016B63387B2DE4CB36779EF213E7 +:101B6000A458DE39A4736661A6CDB9935624EAF56C +:101B70009DB349F5440CF04191211BBBD89FACF1BA +:101B800006FF803FE370AD74990A5CF81BCC8B783C +:101B9000113D409EF9994F7521AA1E35733DBEBA7D +:101BA0002E1F8A3F0881016AF2211D7D603AB687A7 +:101BB00011B86EA32BA267621391C31DA8D92391FC +:101BC000A26D27FF0258B0E50CBB59B1C91EA2F5A2 +:101BD0008011706739B588D8170BBAD6539B02139A +:101BE000202C15F065368EC07D3611328FCFC83F60 +:101BF000A23759E1F286499AC202C6A501EA93E1E9 +:101C00004F216AC9E9086AFBEB08AD648711258D8D +:101C1000784D4F0B8813C1A671AB5E329B57D33AF8 +:101C2000623294142293032B5227B6A279342DCF1B +:101C300061DE9B6550E645834BE753C9146A471D37 +:101C40001ED16943A2346BFAEC25DBA63AA17B8155 +:101C50007992A17D2D43CF2DB0BA55AD5F274B3082 +:101C60002324CDEBE3D4B21C7A9053D6D5549B7089 +:101C7000AB11D2667B901D4C58A2EB190CC712B366 +:101C80006694930653DF253AE838DFE50081FD3C92 +:101C90000770282603DE257020FBA6BA8F8CBB5E5A +:101CA000F918D4397A94730A6F6FBE95EA18C81878 +:101CB0002E745CB1F1368EBD14E87D69E2A5CF12B9 +:101CC0001B6CEC7189511AC325D2E87B34A8D7D498 +:101CD000D1F8C82F852F00BE796E706086BDF4AB39 +:101CE0000E59078399CD01AF950E412D2349CDB3F0 +:101CF000579F788234224A22569EFCE9BEEF24B4D4 +:101D0000EE76F0DC3C52457CC85280FD8672888EAF +:101D100013CFEC9F81C14BA55DB461A002896657CA +:101D20004159DB519C12B554B3D43D98A3C3DF692C +:101D3000A2EB7F07F35C1AFA8CD75BC2A7E73C449F +:101D40005C13D6A46DB292F4E880174C37D4B57CFE +:101D50000755C050D864062B9640715683F6A341B0 +:101D6000427A51E16400531EC82E2764AF973C525B +:101D70008BA350EA049583E8386E0FDD4EC0E6ADC4 +:101D80005CC99AED0E0B321AA1489B84717CDA96DD +:101D9000C01ED1E7536CD9F9895A5B05A14F80A1C8 +:101DA0009EE05050E300A500AD590EA98DB2992ACE +:101DB000A3E2C46056F4680EC1321E6DD6193452C7 +:101DC000AC2B3B3E0E60015EDA65E82FF9172CE77D +:101DD000DE35C5C9FE0C61B3E7F4A837DCF505C1F3 +:101DE000CEF44E0CDC9668A3BC1EEACB09D80F4E8D +:101DF000D785CF8D91E0B2B97EC8723342F2E8C880 +:101E0000B2C4BA8C50EFE498A18D1BF8943D29DC44 +:101E10004CEDCFD2265A83B4427B67A895A72D49B3 +:101E2000935E608B6E2B9407892382181E97B39F55 +:101E3000FFCAA091FFF455A6A1206F87E868E713B9 +:101E4000A0343F08E269B40DC31056039DE1AACA4D +:101E5000E31B299732D8978377119A41365CD16179 +:101E600086ECA8008B5AC393592EA39198A3E00E39 +:101E70009385438C4A8AEA42406BE2AC8477F7153B +:101E8000FC5FBB3C0EDD09D7FB167E237529692359 +:101E9000C8D6BFDC5654877C31C4E9BB99F3DBA0BC +:101EA000143AA3F0B566D92E69C810A09A2326B5B6 +:101EB000C5F6EB7D4C8335856312925D32829CE7DB +:101EC0000A595BED2F7D5B4514D98F58482BE4D51B +:101ED00015A0102B6030F78A55CB84D9F5E5867DA7 +:101EE0000F0163CA9F8599883840C6660CF084DA72 +:101EF0001929C28EFEF48BFBDB13FE28D44AF5D7DA +:101F000079DC935C89D805A7040438295399DD7BD3 +:101F100042FED182C51C92F88653F207D8CDCDBFC0 +:101F200079CFB6A984150B5AA4AC1E254702A76F1A +:101F30009C67B0CBCEDB143FD77E0032BAB24A7377 +:101F4000882F57248AC930C65643C9F61B8DC75EF1 +:101F500087D2CB82B451125C4A256D6E4C62FDDD96 +:101F600093A76E80DC5400FA0D14BA8ECB603C311E +:101F7000664B365E3BB5FA52F0A54861D8DA9980D7 +:101F80002139C073C314FB389542189738BE7C0FB3 +:101F90008CE4FCFBD7C0E3FCCCA9FAD8C991751F2F +:101FA000F0030462998580A7F72BE638B36C3BE415 +:101FB000A6DDF4D960278E57144A65C9794655CCF9 +:101FC0004530A5732C0814A6E5EBDDA7312CB8FA33 +:101FD000FBEACAC4E6B8F5D16F5F807B3737A554FA +:101FE000DE329A2723A156CFBF4850C8AC2B66F9E2 +:101FF000DFFBD0749A0BE586CA6C9EFFB547BCD850 +:1020000085E674FADEBE5299C48A6C2505BC32A9F5 +:10201000A2299D157F459B3F862253694ACF38C62A +:10202000E3ED69B0F7060AD9F1C0C331AAA404628E +:102030004E817CF4B4AC3B61518CA64B1440383AD1 +:102040000A181B446B6DC5A23498CE85538A92B989 +:1020500018A48A4C16FB82FA3AB0BAE0AC6905C102 +:10206000E3BE4924916680B2CC794C9DE6AAD09912 +:10207000B55A3D2F4432DA453545E3FE3FB8518726 +:10208000C63D62FC58C7CBAAE921D2F38F1C2311AD +:10209000702DEEA6B9FD80EDFE89267C85B117D5A1 +:1020A0004C3A1E7721C0EA09EE736E571C08E69E73 +:1020B0004098DA92D64610EF89DED5C570769AB789 +:1020C00030DCE7B057062798314E20E90FA7C990BA +:1020D0006AF95783E80557752B68DFAE99F2FA80E5 +:1020E00065C1E0B27E9A2E214531588C2E1906A981 +:1020F00067341584A4B1F648869454AD2609D01EE1 +:102100003641FB90497D1B513EDE0EFC1151C74B01 +:10211000A4BDF626473B8B9AD7BB6B117928667214 +:10212000CD57750F56E1926C84583609C1B4977F2C +:1021300007EE466D9FC4EED3A3D1CCE2D858291B3D +:102140009041BBD7E0AFEAB65A2923109EEA5B6DF7 +:10215000B2CD63A0F8FE183BB7B1DB5061B55A3E73 +:1021600020EFB552A5AAA9217C8C494C9AB73F6AA9 +:1021700065D2CF74F7FF074126C8A5E01DFE473E94 +:10218000C786B44E9BC554184C0D5F8C3C8342B13E +:10219000801206516A3E600ADCE6E01190F6286D76 +:1021A00055826CEDEF41253A3E786E0D43D6F181B4 +:1021B0003191A4B46685F88087447FAFECD217FFD5 +:1021C000DEDAF2CCD04852B97DCAFC744923734799 +:1021D0009A1E48D46924309E326981BAB9DC0EC394 +:1021E0007C2A42B6DE9155052B85BA020821D823F8 +:1021F00023D94C3A3C03898E6FB00765DD22FCFB86 +:10220000133BBD7B04796F90BC918C759F697BAE4D +:10221000A9C96F595CFB426C86439FCB4FED62DCD2 +:102220004698CA33753E7DDB388E1F99840B51E189 +:102230006CAC85E53D531B99B946D273A07C2799B8 +:10224000E3F72B9267492F1F2978773D4148F2FE2B +:1022500074E8C01E29B4DDC66386B85BBA2C2BAE09 +:10226000E399B5ED4198C6A7F99A8F9EA417B120BE +:10227000C6C7BCC78478090D63D5B8B62EC384A37E +:10228000506BDB734EAEB6FB75CD326461BECB2FA7 +:10229000B9B93C4C370AE8FA4D2204281649D853FC +:1022A00088F903E0A96DC4B15E0E96C11FD4DC0BA2 +:1022B0008E44B9547E4CB7D869832F5528290178AC +:1022C0004D5A519D18C996AAC7523BB39ADE18EAD7 +:1022D0008A005C15DEA38C590B1BA0841CAFB5F9DA +:1022E000914C9DFD76E723AE910513AEBE286A2181 +:1022F00006A9EEB1D2ECD77F4065DA2000652C4C00 +:1023000013CFB1EE9E468271B1E17E9DA6465A374B +:1023100084AE628EFD34C71F42CB5A9BE033AFE7D9 +:102320007E94BFB2B5038EA8CA7DCCDEE7A5C07B84 +:102330005BB8273BAD0D862A4EEAFBA9176274EC09 +:10234000F86F41056B8387BC0780B6E8083510EA53 +:10235000916F37E32E30559B9FBA60744D9865D1CD +:102360007055A8F06D0FA4B946FA76D70850CD5134 +:102370009DE653102867E22357BD9725D998C9F7E2 +:10238000BE74F8925AAD80E0F98C725D16F6BFB457 +:102390009389308A44CD5339D971CE629A5C71C920 +:1023A00068F0B5A75F64ED3B8B132B7814AFD0E8D2 +:1023B00079897CFC19141C8E6CD394C0034BE49572 +:1023C00061CEF709BD3477DC058CC6D7CE3427A79C +:1023D0009FD921753FE68CF954DA9BB045287BA341 +:1023E000F0A10C3EF27D6C925670CDDB29CFCB1B59 +:1023F000D32A30AD8EF0B93EBD8E4FC8FDD9A52E83 +:10240000E7B247332C2E55CC9E243ABED8863D34B5 +:102410003B06683D608AB74754BBFDB9C44C5D9428 +:102420007078CBC977D02602F806137A59293FD1A4 +:1024300072416D3B6055C08CBE241E1B6A760D47F1 +:1024400012952BBD426577F4227FEA4B3FFC4F8803 +:10245000FF9BCEE5860AA8E0E8984A361BBFA87C19 +:10246000C6D301D10C06EE6538D18C9C16D3FD5A2B +:10247000AD63F78B02DAC76CEFADC18B1C2339B4A7 +:10248000339E8CFE1AABB4C22A28F4874482CA60F9 +:10249000CD65CDF809D436ADCC5D5C80D9C10ABE1E +:1024A00086D0FE7BEE34707DD934793B4C492B3C91 +:1024B0009299242042DC2513FB009372B25FC15332 +:1024C00011F5987496515C358193980AC4B196E5DC +:1024D000DF53FE12DF8144BB0A04598C27C483C733 +:1024E0000205BBA928244F3B7909525DFFED15EA8F +:1024F0003E5A735FDC792FF09F00AD7E9208CF9536 +:10250000A429F4E8E5609A5BED13B477DA2F0F267F +:102510006BBDE9180C9B47A22E5D9A69470AFDDC4A +:1025200081FD44755B9FA9534BFCB56B46D2720489 +:1025300041844EAA7739350BDBE5609BB0D307EABF +:10254000890F714ADA6B3B7860EE0AE2A49632801A +:10255000172D9882C4BBE05DCEC78A7CA5D1078FBA +:10256000986A56455699B4CA856BE8B95FC86EB685 +:102570003489A561966CEF0965EDD41F4281677AB5 +:1025800099E251B9D2369C6B5D63DBF47367220428 +:102590003F6A90E1562A5B981FFFB1F1396CA0E2C7 +:1025A000B5EEDEEDEA2ABEB4749EC58B153B384706 +:1025B000511E26350343645F1FC8657E500C06C458 +:1025C000E27948B71543B1C2EB6686A35C371C6756 +:1025D000C0E14C677DC396487066C292186D8F0348 +:1025E000CF6E12214C084C0397C90F966A2CAAB1E2 +:1025F000E07F98ADFBF0210E8470275773E9EA89DC +:102600000F0BB88240AA1D4A75FE261148F5562EBA +:102610003105F6046A05FC44D59D4F77E5A97C3663 +:1026200086E3BD6C4549EC6E0C5B6CDC33945570F5 +:1026300029AC605A4DF9FBBAC987A1E5B5D681D757 +:10264000459C68B1D6A41674B426F37B9788F91E0E +:102650005ED08ECB9987C37ADBF65B4DD3E23FDE4B +:10266000C4DE519E42B6AA74BF70883112A4EF2B0B +:102670009071F326271363C3C33EFF7523012CD744 +:10268000AFC42CCC80CDF3C5F02555EAC63619C5AC +:10269000E90B69FE6CF576735A9BB860A8BAA79BE4 +:1026A00005325F61305E2AB2C87C9623AADFFDC086 +:1026B00028E2EC0119DD237AFDB3261575C0D61684 +:1026C000D7B1EAE5CF631F289FC73AD2C55E96907F +:1026D0009EA391D154FFD7B2A3E9C56AC514254F73 +:1026E0008B5DEEB6E76888C84902AF860A56316F3F +:1026F0005336DE47454FBA24FCAFC05F550327ADC4 +:10270000AAEEDE0C37D025C0404015AA112335C4EF +:1027100041467631DEA864651223AD2724CC7824A7 +:102720007435C6CB0DA703EA7485D387ECE897DD33 +:10273000DA66C2268C735729924821CEF4FC0AFA35 +:10274000401095335F07DC005E7F2B8B01144692AF +:10275000ECE78A34A35A0CA717A3C16363925E15F2 +:10276000B3C79C33BFDE9DEA97BA10F18CA29C845C +:10277000F9DC91C4388FE44AEDEDB76B64667D04F3 +:10278000FBF123BAA58A4E8571B9F12ECF51B4E879 +:102790006E968013C7D8627EA6427F0B9A8C036C1C +:1027A000E69EF17C649BA76CC6D3AD1400F8F006DE +:1027B00001691062DC575E2E4C2567308A397253EE +:1027C0009256884503C50E81BC721E348C21215857 +:1027D000D5BB68BF558BC2359B07E727ADCEDC9BC9 +:1027E000ABF4FA59F07B5A732F6E09C4A4780DF735 +:1027F0008005259040E89C470816DA684EA2793299 +:10280000CB9C76B21BDEB3A3193D34829B8D98819D +:1028100039B95372465F9371473354A8E332A5CB5D +:102820006218CD6CB76BC760D9204709813171E45C +:102830007DFF0C61A41B88EA79DD70F70E524C0D08 +:102840001F91CADCB7CA687AA162726E59E3970118 +:102850003920DDE93C02964F1E24D3C3A1F4CDB646 +:10286000DC1C0F5FFF967EA1C0F1EA9F0FB88AB211 +:1028700008A52C0D3195284CE2F88C79DEA6AC8C9D +:102880006D4421DE2CBEEFEFDA60938185EC9386F8 +:102890005FD1AA658667003074495076C843DE7AF6 +:1028A0009F97B89990E1F05351327093245FF734B9 +:1028B000C430245CEF52CA5323CC94A07426ED5943 +:1028C0004C56315AC03B3076180F086A07AF24E4E3 +:1028D0004944DB576FF321619946F292F3EAEE5EC9 +:1028E000BBC6A8EF644078A3CFFA59575F5717D0FB +:1028F000D0BCC70A88BFF462A3CF80E25A9F808C05 +:102900004A49815CDAC5693697657B19311C942682 +:102910007E83C8DD146CDD0857304654352BB95C16 +:10292000439FF74537FF060E7A722EAF476B1B3772 +:102930004185E328388A47DC6B6C3D0DC445F80DB2 +:10294000CB24C67B5DF14A71BB2BAC4BF2AF671F4A +:10295000DF761866EED1DD44929C15F3ECF5E9764E +:10296000FA5CD00CA63A75B00D12FB85E3ED0510AC +:102970009838BFE124FABD9CDEB38EF1DEDF9D16F0 +:10298000FCEBF3B2A880BD9F38FBE22BF288EA484B +:10299000A5B3FB321150C6D229AED6B5E0A1C0BC5A +:1029A000F1393BC0F5919C9DBDA119E708567AFC11 +:1029B000B6ABB18752CB1C54E95A473CDD67DAEE1F +:1029C00075FA2701D4297E870E45196AD19BE2CD7D +:1029D0000EE6638C069C62BE0731A4989D4E216C66 +:1029E00049FE24B1EC45DAD5707175D9431849C256 +:1029F000447DC5D9BA41539163720DEE7D3B9F9AD8 +:102A000018E537C8207B333458C499D39D09E8A50D +:102A1000E03DD57508E30BEE60994FDE058551204A +:102A2000BEEE1BBC7F9AA3FF29CD670FB6F9D80570 +:102A3000AE45FC79F5592DE718E38EA86814FF0C14 +:102A4000B29328A7BE2F1864FB954F7199B363FF0B +:102A50001C4B4535FB79F69C9156B042122CC5D3E0 +:102A6000273A411DE3214A5E571B07D4CA169F70BF +:102A7000E1F9E8CDAD756419A33427EAEA65BC79BC +:102A8000D3B67C20229F004653511CAD4B18B2F99F +:102A9000E77C51FEB44C2616AB4A60D98A8B1AECFF +:102AA000281CEB81EA7DBA0EA713D0ADEFED262CE2 +:102AB00026E62FDC2B7D81748ADBC9311B1E148432 +:102AC000FB702A909C0D16714BCEE4978C60B66516 +:102AD0006EF3E85CF42F7609E6FDCB8B4FDC4DFA04 +:102AE000EA2F85F6AEC4DCF7E10F57DB90E74855D7 +:102AF000C9A9E11C791CBBF61725E33C039E1226ED +:102B0000FBFB362B5130CB28B6BF12BAFAB26A2D76 +:102B100022D06CA9D5895E99B9E75828746AB01D8E +:102B20009567AE5303922C690B61F70E80691BC841 +:102B3000AEBD111CC6C22437D8B4192AE67FBF8E99 +:102B40006DEB0DF8468D22B96EBE9B87A5CCB6E124 +:102B5000A026FEED5F8B33914ADBE967F437CDB4F5 +:102B60008960C02E1B016D2954D4E97477AD8B3672 +:102B7000186FF8E3EA5E34F603DBC8BBDA96F6A416 +:102B8000051A17CEE784B76907ACE545BCFE11B15D +:102B90007B9966BFC6FB372FBF7964D16C02417940 +:102BA000B7492CC1B365FA81B05341BF66982C6216 +:102BB0002B4963702F4507C8A58D0F872D260D6DF6 +:102BC000C145E5FA297121ED5D836C79245E033AF4 +:102BD0003B718BA1A8209F72023747D7CFE3684F84 +:102BE0003DF8ABC0599A1092F3E80352647E9E6D93 +:102BF00023C75F5CF349FE76980495C2D7565EC33F +:102C00005A5714BDE0B7BFB1BDC8026F4B3EDC4F91 +:102C100087172F4D409799FB343A343AAFF7E6DEE9 +:102C2000DD4DC0073E3065E207C27F3099BCA4810C +:102C3000C0E511DE077853ECA060734B186C8DED86 +:102C40001FF3FEBFF5FB5F3C72C22D6973BC83149A +:102C5000CABC4DFBECCCE7FFA59E1E76BAFBCED9D5 +:102C6000442DD42CCDAEC47D16AB8A14E4F83EC9F5 +:102C70006D37597942D6D155FB725DEDBEE4AC9803 +:102C8000C1C35C4546A1BEB98692D08571448EC948 +:102C90004D264BF7E23BE546BCD64BC38CE37FF9B0 +:102CA00041871C6C3B5E5F4615951B64A62E9DD428 +:102CB000E5E6D3D70305C67E4A9E8C448A96148BDC +:102CC000AF9D56525612F07568681B55674F0A073C +:102CD000D7623918E09615AFF9D09F3A1964A6D299 +:102CE000634F2DC2B4D66A020CEA138D991601DB2C +:102CF000181F6097ED7476DF130C266C7EAEBC81D6 +:102D00003A236073C19C4E9DCECDB31CABD994BF0A +:102D10005F28FC30E547C2C1F1F707831EC70FAE3D +:102D2000A46B8C29FB670AABD1B646276FEB2567EE +:102D30003D1773CF43F704C0B1327610E3C1C846E4 +:102D400062671AAFE13825E59CBDFAA87CDE4D6DBF +:102D5000161A7B519A15BA43EB250279FD5437892F +:102D6000E3EAB2E86F948B55152D040D7129A17D0E +:102D700040F8417667B39F6029B641947F765AD672 +:102D800007E259FD3B1F27076395FE2F79FC3BBFE8 +:102D900070A0C3F995A8727FD9F28B721B174EAB46 +:102DA000DBC7CFE51DB1E4DA40E749835C87CF2C70 +:102DB000A80BFBA662C6C41ABDC0B156427DD04462 +:102DC000ABD0B0E914148366B534A6F2E4FF2994BD +:102DD0008197C95449607E02FD3F912DF09033DF09 +:102DE000A2796D192D6721621BA9EB005D5ED4A746 +:102DF000A0C98EA748D05948997967F09904213A1B +:102E000001DDDD2D36297D21E6D6880E56C810A4B9 +:102E1000A0F80915F4BE6A5114C68399E92483EF1A +:102E20000AE86149FA3E592374D7DA27EF26831F4F +:102E3000CB2EC6A79E518D932A953E6036CC9E65BB +:102E4000DF1972BF54A95AC39358E374F37F63A088 +:102E5000A7B3C32110D482F0342FE88BBFE8A400BD +:102E6000569CE00C6A5B737E0B0369F3BF74357389 +:102E700016B5DAFC8846F0485E71AD3152EF4E4827 +:102E80002658197CA05A0BF3C29067455415B6FE1C +:102E90009FBB27484AAC976C2F4E4601540E206EBC +:102EA000A6CB9DB35ED11B06816A3E02AF8C7145F5 +:102EB000483D8188A26DD5516298579DCB133C6FD8 +:102EC00059337B4D6D95F62E03F47F9FDE73898910 +:102ED00080F01A405458E146B21CF73DF8A50FB9EE +:102EE000CA1E1C77B0CE6C9B7B4361D5B76A301588 +:102EF0002D7371FA0349A5A130887AC4FF51E4FA11 +:102F0000FCF20380FA3D3EBB0043CDB563E4F7BD60 +:102F1000502FA4336266FB1B0864B0A9DD743CC16A +:102F20000A656E06F13FC9ADE536B2AF13927C90EB +:102F30003A7CB6F71F12960C8E22F44C9872902FA2 +:102F40001BA278C0F3CFA53B6F927E2FA5AD27F4CF +:102F500028F98867ADF6867892845EBC636CBD9E66 +:102F6000FF1C934B84E3019C6942A8664BD7954FA5 +:102F7000A39D6312EAF7EA83D28944DFB57898917A +:102F80009941476466F115EFB494F3CEBB25E4CBC9 +:102F90003470D8E80B0E6CD8B6D602F1B17EA0EC36 +:102FA00069820DCC0356C8C3E2B5F8FF0933D06778 +:102FB000B7A366B1C21514A1951662A2AE2254A1A0 +:102FC00027000CB28ACB240ECC60DEE1CE6CBF6150 +:102FD000E33AD20F7FC542F6C039D8ED5A181F5BCD +:102FE000C661DF4BE6B0EDDEE2F522A95279FAEBDD +:102FF000AC60E84F1A34E94FD1851D6B2D7E57190F +:1030000038FC2967E04E8CE2D7752C6FB2B89DF37F +:10301000496BD52638576DF125943C81F267538B67 +:103020002A5BC3E24947D1A97D8DBA6B644D0E5D21 +:10303000F320BFBC7C1AC54A17C6FACFB1CD66FDD6 +:103040002E953BBA12A0486CE5DD1A5B1246F1885A +:10305000208B8F5467ABE009BCAF9E2550DEFC7C13 +:103060008A7C4C361B8EEAF82E6276572665CBD1C9 +:1030700010276E651F9B10F454086212307F786829 +:10308000B79588632734799338053D9E9FA0BACEC3 +:10309000EA67375470028B339B7A656654C309DE46 +:1030A0006D92B7756452B62B47A8169FF0A100C762 +:1030B00074B3801BC8FE68CB5E71C452137E77EA7E +:1030C000F71F54904F5C82DE776407E4E4DEE70983 +:1030D000EC5538EA5032316EFD9DEB880B5AB0AD9D +:1030E0006A4970353D3C205614607A85141ED04DD7 +:1030F00052B5F289141013B61364943CD6C34251EE +:10310000A898335040EBC2FE9D14DB8CB636823F4C +:103110003818CD64BA726F5FDE4FB86230076EFC4C +:10312000653AA611A0ECFC17DD5AAB4C4F5003CC0E +:10313000C59E239D6B712E281E92D6BDB56848AEE4 +:10314000CC67064CC5538BFC98EA062947C7161F67 +:1031500015DE5E1524274C2B7771B75D49CC61A72E +:1031600068D9E84888B2516A3D45D59B98344726CE +:1031700095830172B92C7D4550D6BB5915E52F9525 +:103180009B3C97D655ACFECBD9C4D9B3268D6A08E3 +:10319000C7FED1A79A5E852BA285CB574A59454ECB +:1031A0006F88046D301C0ABAA0328EEC825E264C09 +:1031B000F15CAA1027165C838A174D6EA9C66CC6EF +:1031C0000EDBC71A75DA28F8353177AED42D85AD08 +:1031D0001B03B0FF8B170F3C83D6FEF49F11F977CA +:1031E000AF596A2CB77986E8FFFB71136BCCA0044A +:1031F0003EC8F79CC72629F1D6B9778F125A1C957D +:10320000B4FF0BD14260FB861017C3A6FB2372FDEF +:103210004EC20F13F905D1C28C709D888721668C30 +:10322000128E4CF3ABFDD48ED6F76E26ED93014291 +:10323000A83BB135BF4AC9150CEE94BA20645D268F +:10324000B5921BDC3CF44F3C1E2D3D12B1C99026BB +:10325000521E96A580A001775B73374A4AC5C49079 +:10326000209C3A53A34DAFC17D273F257D07EBA19D +:10327000B518FFE865B38081C2F3711A3698FB4B2D +:1032800097D49BD38C1B8C6124D15BA9FEBB3C32B1 +:10329000D17626CAFB33AC20329D4A298037CEAF87 +:1032A000893271F6694B262931BD3F0932C7CCFA04 +:1032B0006E4A5B7777FFF3FCD3878FC73C189F007C +:1032C0001AF6123252A3986E902F4131B359A8507A +:1032D000D2B78A9654E4F533922F78F44262101DE7 +:1032E00056DE1FFC5E4BCC8DDDCE6A176D04E5F219 +:1032F000C16F9B1B28DBCA735A087228EF196AC476 +:10330000A08C24A58573C6FFF9EDC22881A3987609 +:10331000DA9F022E8E01602D6B626F1AF67FEE002F +:10332000A089D71243B1FBE99449B92DE0A8510D0A +:10333000959F754C632A8566664B1E77F348D68940 +:10334000F58AFF63B7915F07ABC28C5CB5601C1A4E +:10335000515DF4E909D39CE5AC320F3A7A8B538B7B +:103360007064852E51952C74B03F2C76038D1A7E97 +:103370008CAE95392D79F6B3A4835DCBF6CE453569 +:10338000B43A6F5ADF409032F5A0647B4003A4C08A +:10339000A9392418CE027E02B00399B3EF2258E572 +:1033A0004385B54F5F5ECAA423CF154F01193299EB +:1033B000D177C2085FD3A83767881864BE279BDB24 +:1033C000152370F42ADF5FC007187FD95C7275F28D +:1033D0002451DE63CFF4A4E47B6F9131E08CF32BB6 +:1033E000AE2D51D56D455983E2311C6998196FE1B5 +:1033F0009A4A76B83DCC7CDB5C325C8B312E782AE5 +:10340000338B6B5D4F2E272925F55E6C7BC2F998B7 +:103410005917BF9DE73D4DC978DDF36AB686A38F86 +:10342000450BBB06E950264CF5C187DEF18E47E916 +:103430004C9D47ABD9AF82D49846974494FC59E24F +:10344000BA53A3C33B34FD522101E5C50513DB6A22 +:10345000589AA57AB9EEB865A769FBF47091354A18 +:103460003640A344324AB2C8405C86B76DBCAC1348 +:10347000744D8332548C42B6B35327ED967B3C7C1B +:10348000862F8424D07C76BE2B7913EF9C30E7F412 +:103490000413E871CE25C331CDE8BCD6497E5FF276 +:1034A0000EC2202894724478115324332CD84BF444 +:1034B000F0F48B67547E9AFDB56E6B7604F300349E +:1034C00037546660768C7BA4132E668BF2F1B3BB07 +:1034D000D89932748DB710958061B74561D0DB7D86 +:1034E000654ECF79CEC9D2CBA54A4DAD90F919839F +:1034F000B15DAFC9A4DFC5B17A96E318C130F0352C +:10350000CE36DE7A1EDC4C1CC31BB01A6743FA446D +:1035100046037F94D113FBD8C745F16D32BEB3BAD1 +:103520002CAD192CB9857EB6EFCB894B3808C26615 +:103530008C05D714B28E7C02627CF6E7C04DCF407A +:1035400038861C9D2CDDF7145B479019AEAF9DB0FB +:1035500049AB4150CC02C6CD13030D8121566419ED +:103560001CFA1200CC56C4F980D17CAB8B5DBB4AEF +:10357000783A606DFECAB1D3FE6A8AD26DBF8CD430 +:103580003A9E274D5A999B7C6713C7853ED03400DD +:103590007777E00BF763C341799D218813EE4DCE19 +:1035A00094F9FD48E636AE375A622FF5D243F9ABAF +:1035B00053D0B4C82FD42479B17DDC882BD127E532 +:1035C0007D59CCD613543FAE8D31AF94CBE0D3228E +:1035D000E14D05DB170048FEF2E694CB6D351A107D +:1035E0006B7B0910E2DE96076A0183169231BD8378 +:1035F00013DF8662FAC083AAE6BF43EFCE8F7C6FEB +:10360000133CEB1090FCEC22247005DF17AA6740F6 +:103610009F52517B58A3BF87BFBD5E2501DB6F68FA +:103620007AB2A9134EF9AEBA4D5BF9A3F7937B3387 +:10363000193B4AC6C0F821571845FD16FCFA53DE5F +:10364000FB43E143BFB5A16EEA86E685D02F2CB7D8 +:10365000F48BD24D01E80325ABFC89D3D38E9D5664 +:10366000C9BBACED481118FCEA8B3A77AC4371AAA0 +:103670001BD3410FE29B17F4289BBCA6F8DA4F5EE0 +:103680009DD560C424BDAD56083802613BB0A92267 +:103690009DC843EA219CB6743C85B2E6B4DA9177C2 +:1036A00007168D6BF481B6396624F77E45D436E46F +:1036B000D01F993A7DECB120ABC57861E3934E8D74 +:1036C00022023B00BF9ADE42F8B37E612FF7AE3E86 +:1036D0008577ABA5F3C8084572377A4EC2F10BD097 +:1036E00041838F603A1E7E4DA0BECC35D7812A7DA6 +:1036F0004154914B715B4B37454860F04343DE3694 +:10370000EA122C46019D6E7E407780E848C495A061 +:10371000443B60C70C27866B0DE6884E496F9EAD13 +:1037200071997A6B1A7C2E0E948B022078EF7BAA0B +:10373000D98E3713D0E99E9213BE816808BBB3F1CE +:1037400048D5E5B5998DF46160EC688A04E050C312 +:103750003BCAA58C4A9999D2CF5E4C233CCE3827E0 +:10376000855315284C6149534A5EB6E1A7CCE65013 +:103770008681CF88B1FE44110E5604A2F5BBC5D197 +:1037800053991BD43F979ADEC40E864277D6C5C3A1 +:10379000966E32CCEE95FECD0D715181F7240EAAB6 +:1037A00032A8261FFECD081908CA5FDB9AEE2D7DD0 +:1037B000C742FD67AB9D35D6AFFEC02A457ED3F725 +:1037C00063E64F8A62CF51A4F3D6E591280CCC4D25 +:1037D000C44496A55F13394D343E2F8C09C27969D4 +:1037E00020DE75E8517291654F7F7CBAF68420B473 +:1037F000C02E7EC0C02DD1BFBA85AE26538E88DDC7 +:103800008A37F96FA496F8A74F1986D8CDF2C4B9B4 +:1038100018C41065001EFE7B9127383383C54661AE +:103820002D7DF1CEAB38F88ADF5B2288FE2F759BA9 +:10383000F2E53FC368064BD908BF24D695E1809EC8 +:1038400083A4F2E30048ACA7C94DF27E38F135CA33 +:103850009165169A2FCE3FDCA87FB91F12BC86E473 +:10386000A006A2D6763B50E83A6F5D7561A09A78C3 +:1038700058D6DD09D9AE7274CC8B516FE4617D0EE0 +:103880008E019207DD6F87266ECBEA11A04F9AFC5E +:10389000924655239AA32B7A0E444E2BF8C21B1541 +:1038A0008CE3DFC0815DCF5B479987EC36CF333641 +:1038B000FD3096DF64B1BA853B6FF9C85BD138E85B +:1038C000954E20FCC8D38DD9EBAAF15404F07F7F2C +:1038D00064725227BA865A20817878514A63688088 +:1038E000F50C5EF3B6A059A015B701ABF57823949B +:1038F0004FDB6A3BD4736C5F07055BB5FD62367FB7 +:10390000B9FC1ACD4BC7E2AAA0757E7122FC1574D2 +:103910003E12F027ECF891DD7F615A262DA9F3F0D5 +:10392000F50A64B5DD99E72FCCB4561A8BB435CAC5 +:10393000C5424815595B53189DF60D1D3A97776897 +:10394000DF36102D924B883AC222CA855CF7E6EA30 +:1039500063879708A0906B4700A87A1A929D520639 +:103960007A7B1274576C830FD34263C14EC43D32CD +:10397000680D2B6F6028C9CAB8916E1B9C933733B2 +:10398000DAC53B8CA2F592CE0ADCA582B2B2620205 +:10399000576EB53F88BE0EAAF2C0E8878F490EE881 +:1039A0004AD461AE9B85B8965EC0C356031185E0CC +:1039B000D257AE7ED8C85744D1748C035E137B7542 +:1039C000E7559E519301747448D1F2B1C336756DB9 +:1039D00030BA01D2C5D336D23D6E77FECCF141B9B3 +:1039E0009E038C5BD2AC6F63B74B301B89F8A67516 +:1039F000EBBFD51CEE21BA0FD64C2373C27698913B +:103A0000D1C757C1B854105B17D4E4449E3EE17C43 +:103A1000439581ACC6295B0C644C4F32951D76F4FE +:103A20009B21FB991B5D9EB15AD563166DA85481ED +:103A30002F25C31FF314B7F65ED38D739058279EBE +:103A4000D1F0C596C888026AF27C26D23DDE89AFE5 +:103A5000112A1853E35B2CE0B7B68789191FCF7B77 +:103A60002F136B4026F0A4A0645C82D0BBB6B005D7 +:103A7000FC1FE1F12DF3CFB5C5C3CD452C02D7A175 +:103A80004BCF97D4B31AB9F6BEAB017B14D21B153A +:103A90001D27261DBEB104B484136FAA19B69977E9 +:103AA000456CC2319CA6ED85AE2EBD7B9BA8E3EA9A +:103AB0005EB37D684E35AE8DD2436203C3321F8044 +:103AC000AF6434D3B15D71ED3CE6A6F08AD2AE129C +:103AD000B81230B1F18757453926CCF2B9561FDEFE +:103AE0003D21CC51C4B5F80A7A2B51E901696963CB +:103AF00082F120522DA1DEA1A0A2F52FE3706AA1D0 +:103B0000080F6A68ED7EAE5ADE63A10DDF079327CA +:103B10006A4059925242038A96077D3C4B6B0EFFD6 +:103B2000AA43FE0C0FA8DEA8D874453FCB3F33A1B3 +:103B30001764D9D564803477B52386AA0DA55B3880 +:103B4000196EB956092579F6AEEB5E32A26E6CFF9E +:103B5000203CF7D7783352C742FC2E7C4BBA69C35E +:103B600025A9212772C0B812BDF547AAA016BC49E5 +:103B70005A6C80FB44AAEB55FCE42ADC158D989422 +:103B800046DA0E75AB03231582D2920342A6E6E312 +:103B9000D2D2104D26F5FF50E3F1F96BBEC3C4C07D +:103BA0001E23A5585D027654078ABA3198095267D8 +:103BB000CF795AA4541D7E9CCC76D3AA1F151BE640 +:103BC000C210EB59988724C3FC7C082864FC67BDAD +:103BD000394C4337C8C3CB01CB000843D50F51EE56 +:103BE000CFC0036EFC1370EA26D35490A613A1CD68 +:103BF0004202FC44C6E6F0A72A33B8D3A74DF17AB7 +:103C0000C3F36EC87BF71B21D4EC5E6103910BE913 +:103C10006E0A4C74DF6F363F4D43DF7993CA864A94 +:103C2000EEF89B9EB6566D43AF8DB4B42D3615F3AA +:103C3000781F2E895213225C189B387843F3067044 +:103C400076030639CB96A19D6212B4E137E7A9C786 +:103C5000324CC54D850290BF89FED737A81F6AB088 +:103C6000BA8DEDEFA5B7DD4ADD39EAF5A639E39760 +:103C7000DF58663CA853B2B736DEABFFE73141B33D +:103C800053EA9CB39E97AD08BFA034CDBFAA12875C +:103C900018E6E2C6AD3D436041C17621BC85632D87 +:103CA0004201AB9D586B63106AFE885D8FA03D9CFE +:103CB00021C239992DFC661FB0AB4F3AB1A615252C +:103CC0001E88329F360849AD3B9D2E356903AD50A5 +:103CD000EDA78E86B61C64332A07E2B1885AA6384F +:103CE0000C9C46FDCF6834DD9A5156AD9429D6958B +:103CF000DD3B0E13FE4528E9A28D478C15A61B4916 +:103D0000D95AACBEE491D02D68EC0F02BAB5803A16 +:103D1000D1D8D0C3621B7DA4C3B5E41C6AC94CD6FC +:103D200061553337B524597525DC8EC1D9CE572757 +:103D30006F71BCAE1468DD59C2A6FA0CC746226981 +:103D4000D5B3A7EC3B96C340C9391C9C0EBA4F5162 +:103D5000846FA1A6958C4C1820BEC01360CDC318EB +:103D6000FACD37814298448260B9B7DD7406478640 +:103D7000894F3CE63A1506CA7CD2E27479FF8DC7BA +:103D800065CA4A91F3C4CFCE4222FCB7683FCE81C8 +:103D9000BFF25089B7D7AD552917BABD89F62D01A5 +:103DA0003B2619A32CAB8AA53CB340369205A0AEA6 +:103DB000935452FE5F61673705B37B97125F6C6067 +:103DC000FDFF90205DBA093756E47B652AA194C5B2 +:103DD000FA71421F8CF720D27E061E84906FAB8B47 +:103DE000A4285591C900731DDBD54788E53DC475EE +:103DF0008651B3795AFF706A5B51E35913D9D16A7E +:103E0000F2E0473DF5D3018F3981764970F471BFF7 +:103E10002BCE5EA2792DD90391A5D420B57CF2A337 +:103E2000C06291ABC1D9E4E6114948EFA35A048AB4 +:103E30008EF24360103F53C5E0CDD1C60415390959 +:103E400006A3019CE21A5C1E4A950C2811114794A6 +:103E500071A58C78277B7B5AE2AF2E9E4F9AEC306F +:103E6000594730AE7C1F4146DB4C09A39000D58DED +:103E7000040339D1F60624743BEC0FDD5407CFF56B +:103E8000E0215755A400B137D08FB1BFBAEB3171E3 +:103E9000C32125251C6E143C4EE569688DA3FA9F4D +:103EA000364CB2C9D834CCF899BE89C6AEB2C2DF9E +:103EB0003036D06788A6AA57EE28D04D44AC3819C2 +:103EC000AAA24E1633C698872DC93CACEA7847FFA4 +:103ED00033FC61E2D81167B62A5E2D71F33FC1E66B +:103EE000A558A7AB51AA908D38D792746135386E1A +:103EF00022EB1632BC53DAADEF8DCDC315AC08C53D +:103F00004DFD3D93C8D7C16FB923C3C25E19149D3F +:103F10009B1684EFEEC73B1A90BFB4D9F37A231FE8 +:103F20007A33D3BE68B1EF71E5C680B09F6B89F17B +:103F3000A0AA681EEDA153BF92E89DCCFEBB6D10F8 +:103F40007F81979207F8AC3F92C6FA60EE6B9C783F +:103F5000BD605DFFD294C2E1A26EB6BF520FF703FF +:103F60007FB949FA87B69805F4306E33D1D0CFF8CF +:103F7000E8D474F104E6095EEDF5B9BA89583BF767 +:103F8000800FA8957642E51D7FCD226DAFD85454A1 +:103F9000CEF37D305C6CB6B25D5C13822920AA82C0 +:103FA000A31EEC9D7D44B5FDE460DAC4FDEB21ADBC +:103FB000D44BC09C7DF322A961F31A8B4097AB5977 +:103FC0001B06AF91B4C10FA2FAB2E3B6C0A084AF92 +:103FD000309F1F670F47B053A3E297DBD3B541A2D1 +:103FE000B41EF456ABE9DC41F200716B5FF0248D36 +:103FF00003AC96B1F1A5C6D76C2749FE0ADE4F0582 +:1040000037FB61CC683005F4B7A75DB623C92098AB +:104010006A1A9E0B5E1132A99F9D23DB7D99C6CE45 +:10402000AF45F167CB38118B03F9178D1903C22601 +:1040300023FADF81046F30958141F36EAE949F1DAA +:10404000015BE57766229F85E215BCA8B6CFD198C3 +:1040500020B0D02723D2BF081F8A9BB90C336ECD66 +:104060008608FE94AD408BDA3D4A1C39295CC3B802 +:10407000C629A6A36394B40B5E3C4928CF0F6E5E9D +:104080009C6E3576209C34851A638AB46B5978FB14 +:10409000FD9E2DB8B9D05FB0DF53A32A81D3C28271 +:1040A0002AFE415C00356A69AEE8CEA135338E4FF9 +:1040B000A68DB626E255B8D304EC114394BD4077E3 +:1040C0001EA3F7F65365027001ADB750FD0BE298E1 +:1040D000948584E89EB5F8BCC7D434EBE9CE926EE3 +:1040E00006A2A0BC0913E4A1E568888437589ED7CE +:1040F00085A1AE876748429F9E799B4A2520A2955D +:1041000034FAA927171F9541E98926D46C60EEA2DD +:104110004D74A8382B1878A213C3C66D1C88FFE510 +:104120002AC3D68B92F9A72C9BC2B064593A416638 +:1041300059DB187BD493B9B66260EA1A2D61A76A7D +:104140000CB48E899037EA9343A8EDE6B52FBA2ACE +:10415000E9CB8261F39B72857669E7698ADE154F48 +:104160005EDACB1BF36AB905AC3FB83395FDF4C3F7 +:1041700039C240DA4FE3754B34F086CD1FC3B870B7 +:1041800086C3D404E9A160AD23E17602DEDA0188BA +:10419000B2A775E53020110DD1859F08B7FC551FDA +:1041A000B8E5DACED4AD2D8C9095FD156433590A5F +:1041B00064B3EBA78235129A6D7F3B1B16F0131D7B +:1041C000EBE42E2DA16281E5A8B90FE7A03012BD66 +:1041D0006DF5FDB3D34C641B1053AFF25D4293E415 +:1041E000EFAAECBF229569DB0521CDA98B3AFF141C +:1041F0003FF714CC62DB691F12E46E3EF81526C14E +:104200005C13D136471E5644C45DC17D1FC95E078D +:104210005DBC116F0C01A8418C0D7C7AD54AA6516A +:10422000479945CA5C80142F25EC0437702291050C +:10423000F10AD2912DB4F5666F8F1DF774E5620116 +:10424000B29B06819FF51F62843F1C4E4A60C9D80D +:10425000B077382878D6BA13BC53937FF5260A94E2 +:10426000032F94E04C7B8009746B0890D34691EC4B +:10427000FEC2D6918628DB26A1B38008B6E4339728 +:104280000B0C412E80B3725175A6DD2C880D9D203C +:104290003722CFE976DDA0FD6B017F9928924B4252 +:1042A000D7CD2D0B9D0A50458F230993378766E0A4 +:1042B0003E0A32733B1F3F38F77A0DBB157BF53052 +:1042C00000232BC37F62CAB7941C32E8E3E81A6369 +:1042D000D94952899127228B6558C66D4696D85682 +:1042E000BDBC7BF6F15BE6BD3C0FB3D99E21F97DE9 +:1042F000BF9C8ADE3B79DA50BB52EC26A6B7C5B824 +:10430000E00B5CF6346E51F56986CCB918071E993E +:1043100051E9115647071FD2B1980DBC1484B1F66C +:1043200086CBFCBCC48C87F91A43EFD2E769566888 +:10433000C62875CA835BB2113FED7CAAFCB80AE7B8 +:1043400048AA6FF57AE8237C34A76D3CBDE2450CA2 +:10435000306EEFFAAA1AE58FECB1830F28ACA6CD28 +:10436000AE243E071F00DC5241241897CB5FF2B900 +:104370001F5F2C5328B36356201CE7FFAD6221FB5F +:10438000FDF0DEE761AD5C1B2B242CA35342AC1780 +:104390000F98A0905873076C19D5BE7F2EDB62145E +:1043A000272EE8DD9F70D323F7B5CF419B32A214AF +:1043B0007F1E55E767AD41F68E5CE22527E0F9D414 +:1043C000827164D0FD2DC1211E6137FE7EABD0A568 +:1043D000501C8B339F267325AF9E2844E88B7A03AD +:1043E0009E6918D309B87E9753A81582E6AD987ECA +:1043F00023A3ACAF54789840A30362144D3FB48814 +:104400006184E4459BE7AE337B9E7A30C63995CA1A +:104410005D7C5B148AFADA2866C25AB59FF70955A3 +:104420009301F73F636BEB441DEFF294457BF2631E +:10443000696CA9845ADFED5A24D336EFDE3FFA7F48 +:10444000E83DE4EACF3024F7503BBE0168DF2E2D73 +:104450000E2B08602DE71B6D153DC7FC35B4FD2FF5 +:104460003434523B56A489A8C69124E661101EE953 +:10447000563B0CA10A058A4DA0C86FE22B7D0BFDAF +:10448000847ADAB5D73A59F372A5CA75BB97564EF6 +:104490005D80AF429ABB0DBEEC030CF4D555D90438 +:1044A0005623EEF069C4B64D1B1094C49C89FBD40E +:1044B0000F07F5E472F1A2D07117CE8FC7F800CEC6 +:1044C000DDB779727DD6D1F388202300C15AD08818 +:1044D000CE82228F4CD388F102B2CD06381E98EFDF +:1044E000CEB62F0F1FB513BF5C13B2D712CA27CA9F +:1044F0006454C430668162134CFFB30A00453E71B8 +:10450000BF27BB1C94E3C161E6E6DC81279ABF4567 +:1045100071C7F3F2E33BA4E63DDCA36B506D1DF2E3 +:10452000393979A3B2F2509369A50CF60A7FCBEF23 +:10453000A34CE8E0EF43D8D3A8BDF5779438FC3618 +:10454000801025838097E523B76EFB6DC0DD8C045A +:10455000208F9C8266500A1261E0832E7631CD292D +:104560002318636EFE0E62F6778EA5F7E368D7F622 +:10457000DA37AA77A6BA2FA49F63B1E6E162E48294 +:10458000C56EA0BB3BADB7CDAA55482D59E3A94197 +:1045900075B2CFFDB4EDE983BED211BA2DFE24D69B +:1045A000E6A1DAAD07A71306D1EFA7F6D55B8BAB73 +:1045B0005A1E4E7A8C1E945994616D47D95CED2E2B +:1045C00039553966134C315038013F75996CBC2B05 +:1045D0007AA92D84B397E55D3057AEF544511C1C84 +:1045E0009B16786A3A12512BB99F1EDAAE933E564B +:1045F0000F4A998705AC410F7A9A740BABAB08D37D +:10460000E7FFBA36ABDC98896509F482E059A27CF1 +:10461000FC3F34219AB99B6A2C4187DDEAEFB3ED68 +:10462000CEFAC8EECE1E162D2126F0B6967144079E +:1046300050E1930BD2D2E51B2AB1C39E644C7CA1FE +:1046400060AEC545E92C6C277C0B95123B6121A916 +:10465000B59B2B5E3C6C22B59169A73DB64F3834B3 +:10466000B46B59FE7AB005EAF932DA6EEC92A4899D +:10467000A4A2E137A6F2392DE60C2861AE7272646D +:10468000A180B50341D6E12AFD7F618C5DD9FD8E05 +:10469000944A4F3952CE7726B82EB007D952F776C2 +:1046A00093010335110AC4143FD93B36B2B983468E +:1046B00039D2FFCA7B911DABAC124E90B02D336145 +:1046C0000F5AEE2593BA942F6E42BD56CAA08FFFA3 +:1046D0006C612A6306E63B17859F337168D2E6DC7E +:1046E0003F563D5A6945ED2D24E79EEF5655919F63 +:1046F00058182732F414B20C878DA409066FA2D87B +:1047000052FD0969EA2A708D64098EBC90B40A10C2 +:104710004B331C5C3F5124E5A8EF62DDDDEE156CE8 +:104720000967D4D63212027EAC12F1CED7896CE082 +:104730009F953F4C218B742DE8349486E590F4DFEF +:10474000BE387666C80E4059C360C6E60A7C8CEB5C +:104750007AF4920C1D1A15B6340875DB79CADBA6FB +:1047600034FCCF98AD415C936D2478B622B07A5D6D +:10477000646B130CB272D5D6428588E9A497AD2438 +:10478000091E6FADDCDC1E0C86273D7185B50E63FE +:10479000F01BF88D42719F82582C2F7F1174AED57B +:1047A0005D5F2A93E1E2E6D57D7392EFE8E8B41B02 +:1047B00081361BE92CB2812C623D69D481F9EF7FEF +:1047C000E133BA1498AEC554D53065C700745C06A1 +:1047D000989328831E823153F603D784FB105B53D2 +:1047E000E7B4BBB1182FF52A1F3AD4C6C7BD53038F +:1047F000B6ED27CD1F4ED4C43FCEC60D684A292C36 +:10480000F2DA22FCE7E37755A0641112DD80B2A34F +:104810009CC81B7C5DA1B69E546806829BFFC46C3D +:10482000930433807D13E6BF98923363C19D54A1F6 +:104830000BAB043A0291818845420CCF07D6D326B0 +:10484000C86E54F7D5B3F3673C2AB22F032F666DB9 +:1048500058E44B80BEE4C58A47A0FDCA36A8AE7EA8 +:1048600065E0DB54B3B6E9E86E295E14FFD84FE289 +:1048700081052ACDBBCFB2818E4474799A79793380 +:10488000EF6FDF4F70B451BEA71BC498F0714BB2ED +:10489000D33715DC2B92ED12D24DB160559CFD81C2 +:1048A0006DE5F4B42B9BE7C1EF0E3720C87F478E30 +:1048B000CD2CB2ECBD3309563D7A89328F7E920FF2 +:1048C000021E8E925AEBB9D2827622D8BB3D25FFCA +:1048D000206B89B7CC251DBE511C081A32D318C6CF +:1048E0001EADA6C8267D16502E231B807D06A47AF9 +:1048F00030B6E5868E97FA39272073A6333A199099 +:10490000F85773B71A0EEE49C69F18882D229BC719 +:10491000B00E51A297425078C20132F415AB418BD0 +:10492000EA91FEA70B8C4516139928AB713EA1B6F0 +:104930000B66B03488BFDF56AB4FC9ABEF73FCDA00 +:1049400055B136BBD69996ADE4DD369701856DC677 +:10495000401BC53490358199AB5F46DC1403D734D6 +:104960003980C5EBCE07B46C221045F7A43F5C77C5 +:104970001F7324DC4CE6B158A7C2C47B878B69A2A5 +:10498000F1F3C678A6E8FC30C7BED40D1C16B84AB1 +:104990001BE2A204E8962A41EEA3CDA668434F7D10 +:1049A0007D83F2EFE30414B9725CF99149AD788329 +:1049B000F61F87150310465F98F023E083A346C8CF +:1049C0009EAB79D47E0689470EB9321E4B854CB119 +:1049D0004BCE4EF7C0207E8A4ED0CF2906729AE485 +:1049E000648EF5AB5AE72A62E865A8F2F9CB0CBEF3 +:1049F000D433D7ADB2DFBB7791E4C93CB3FB03330B +:104A0000CCF6B13344F4DE06418C2798FAA9040EA3 +:104A100065053EF2FE52A6E819E76B0D7AFBFB57DF +:104A20009461A98B0737F561265737069093F68F67 +:104A3000CE4EE14430E5D2EF60D242A6DE6846AB0E +:104A4000B552D09E35E4E1D7F1E286392114284AE7 +:104A5000397F9C746EEDED17DC0D249A283199BCDA +:104A6000BEB06BDA40F607A0631BBB5E16B0E9C2AE +:104A7000F09E2955206ADD01DF80EF384B27AA4ED2 +:104A80007C77E173C1416C1CE8D1C436F663D04039 +:104A9000276E5DA2AB77E6B33C6FA8246D42F99513 +:104AA000102425FA1924EC60C6A37E00311B66246D +:104AB000F4E1F5FEE62531DC301A95B7517671B197 +:104AC00060009AC9616B1D9DD07E0CD4F84333C63B +:104AD000FC1940DC5AF8D43975B2718E12C2DD4D22 +:104AE000CC68DF00C9242A491CCA1829C15D9D2150 +:104AF000236F5FFD987805A139E074AD17D8DA7699 +:104B0000AD2AD015A0D62EBEE4909CBF90BCFEE48A +:104B10009B4EEDAA915EA9FDD7E2EE8E745DA39641 +:104B2000B25B244542C2350B31908CB9CAD265A321 +:104B30009DE7A153F1C6B75D782A1959577B97C2F3 +:104B4000B66BAE05F9FB72E9D4A21AC075BFA6FC1C +:104B5000DFC9A6FAAD53F5E3C282A54F6149847A55 +:104B60001CD41081A9CCBBA4F2AC3DB67F7318C590 +:104B70009E92B219C2FA2C332AA85E0F622D6E9053 +:104B80001C24F2C0BA951C38E5C3640832850C3881 +:104B9000DDEF6E1791B1538A8D9AB6F2351F1B5017 +:104BA000F1D91FB6AB3453C0DE52D5F432F0547D88 +:104BB000FAB87CE170943F8EDF6E904C912AD10D53 +:104BC000CC3113364AFAE6B1E7D9D823428599E7C2 +:104BD000B323070879A52AD57E93D0192138610A15 +:104BE0003D96E7F4178F3A99A72407D4925C18BE34 +:104BF00061BE3650AC41E30FCBB8A729F9992646E0 +:104C00006EA771B92E5065FEE381A09AD8F14518C0 +:104C1000785762B7624BDE71C82FD4A05B311E9209 +:104C20002ABD8D3CE1382EABBFD0A1028A682EC4CC +:104C3000374979ECF4740BCDD34D5C181B69AAA6E7 +:104C4000A1A04981768483701403CAFE91BB9307A7 +:104C50002A2F6122AB5A869A6396FC747ACEE700BB +:104C6000A5842881834C5792E064C32F534B58632B +:104C7000D738E2110411FD0427186BF6E0FD4C2B28 +:104C80002C974A5825B036B45FF4ED153576155C8F +:104C9000A3E875C8B2E223296DDF42F9DE44D83DAE +:104CA0003E676898F53F0EAC21EE9E050CE527594E +:104CB000E12FD27FE5B2141E818B4729BC4F46EC11 +:104CC000F3AB07821824FE5557CAFB7E1570B481DA +:104CD000C4F66F29BD74ECAAFF7A298156B6A40BDD +:104CE00063BE7CBA6FFB4BD952FF6E5D784C326469 +:104CF000330E718531D7F5673C93E42E5D21FBB906 +:104D000091E4E4E0AC9E135FD08E30B47A6C5444EE +:104D1000527F4D61AA073ABDB99C5C029CC61649F8 +:104D2000EAF86B21280BA3FAA12E96BFBFC1955CB0 +:104D30004BE08414DC62FF3397186863AF63A8DD2F +:104D40007F396C33DF34EB7D43350F52CB55BE5D7D +:104D5000C969D85972512CA9BDA3F761246DB0A5BA +:104D6000D1923A58BC87C25463741007647E285E9F +:104D7000CC5551C9D13EE1339C09311E2095E73015 +:104D80007E4853791430E2104EC15D49EB26300362 +:104D9000DA6E04B57A4B320C28BFD94E187972A658 +:104DA0003450728AAF2700497808AEB6D95624CB62 +:104DB000CC3CB574A91B0F7E488A1251E2D91284EB +:104DC000E9E6103483522C3EEA7E61A3638B675878 +:104DD00005C2D41982CB3B1EDA4D72715548B41FFF +:104DE0002C5BEE82EC389BDBC04103A19D6312D3A8 +:104DF00027AA274EAA233B98F943C67D2328591D8D +:104E0000918A36398B0237AF431A08C5E70FEEC5D2 +:104E1000944DFC9F2B3783ED720443A79B3CD8E451 +:104E200000E8C1C96BF6B2DAAA01615237F3ABF3FD +:104E3000F75B2CD61FBC1526FEE78E0809446E4191 +:104E400054B1F28F952390E98B5F911C02C5FA70E3 +:104E50003EAA51195BB76C50DE319F7C04AAD10386 +:104E60001EB5AD36965A4C13BAAD5615CDFE0CAFE5 +:104E7000277C70CF0834DA6D2A08C5423E573F3888 +:104E8000243FD34644D50C74A0AC01AA866482E1C9 +:104E900074757E622D86D845BC68A99AC1C8B7ECE6 +:104EA00016B7D23CDB2FE68B37ED02B7397FE1B185 +:104EB000AB835EE22854AEA7DAE6CC5372644C6C46 +:104EC00030A325CB1D120C6D0D4B70AC94893AD3D9 +:104ED000E4649332F88DDC01032DD1D49E1A401185 +:104EE000D7C2A6C693752651CABF8B94000DF87021 +:104EF000E99EA291806C231786E1EAED4C5459801B +:104F00006CD4882A18031931C01C985C6C3F0F2C94 +:104F1000916CB37B13023CC76E612430D5708682DE +:104F2000D67D3E183EBF3BB9B17F8749F81180CA94 +:104F300031596C96E3826270A3B3267899CBB2CED6 +:104F4000A4968F52ABA48A6B3BB50B12DCA0F05F2A +:104F50009DAAD2556A8088649B6F67E94A6090A9D0 +:104F600084389BBFADBC5B5E9C0735184C2E8EC54C +:104F700079DC080CCF8A3EC7E38804F366B5EEE51A +:104F80002BFA337186AD41E1AEE50FE8B3F99596A2 +:104F900071BB1C50A6C19B5FFCBF892CBD8F144503 +:104FA0003DD665B5EF27E6880D0991640D5BFEF2ED +:104FB000D7452F11E20684BDCABD0F91BB5C7BF5BE +:104FC0002C58E62814D2EC9B43D154DAC4A861F8DB +:104FD000628DC12394593B7F4F66C50E78270DA083 +:104FE000FF71BDEDCC6F6373EB8FCCABC5259779AB +:104FF000C5F08C8C92EE7ED62ED5BFFAAE50B2B9EB +:105000008D22687E7340C31AE53268498C73C86C80 +:1050100029769DCB05B2E92A32779C7CB44570D8BD +:10502000D61C5253D8D5810EC70D8FCF4E02FCAE81 +:10503000C188D5678395B782FCF79683EA08F8267E +:10504000846298C6069D2EBB83445281F1603F1650 +:105050006075512D62E9115793101C57926D612AAA +:1050600090CF2745B99123318017B35D92771748C8 +:10507000875E66DF89FA89E7F5EDC32237AC784FA2 +:10508000118E770FC55F3502A5146FDEAC4630A9CF +:105090007CE91ECF18D3E62BC761B2B92D42504828 +:1050A000242C405E1504BEB16C96E9BFFFB836658E +:1050B0002EA347A3FC7B16817C556C821CABE78238 +:1050C00081F4099108530B5408888EF72FB4EDC270 +:1050D000A3165F6E94175DC244F64CCB6E1E7EAE77 +:1050E0003CE647B369695646B405DC762D455675EE +:1050F000FA9F23318A95A364B1CAD5A7F50DC6E1FD +:1051000060D5E282C0785F54711BA902134F98C02A +:105110001A5CC918433DAE8B375FA9FA5D8756E527 +:10512000D4F3FB0C4154BB9F3FDD765D13AECB4BFC +:1051300099B297B7249B076AEFEC26954EB0C09BB7 +:105140004A73E4A54FA020D403718562466671CDF1 +:105150003FB1AE2918B3B6F758B51D14129247BE29 +:1051600026361DE591244F43FA0B1929C05F1E0F07 +:105170008837FF4574AA2AF6C61188F0870D568431 +:10518000CB0B2B597F35C2DC36BFBFD1A8D13E82B5 +:10519000AF369BED270A5244234B7FDD30073BCFD0 +:1051A000D5C127308E855FEE7CF32FAD52E1DF8EC7 +:1051B000F7B11A03ACEB37C479B45B5AE84B228AD7 +:1051C000A76B15ACC6D1CA1B5E9865EB04367F078A +:1051D00079D51AFFAF9BBC136875C919BDCBE50221 +:1051E000D5DEBA45D5C3E52DE5062CD1CBCCB65CD2 +:1051F000E9A65FADAA748891ED8A4A41B1F3B17016 +:10520000E1A6045DA983D02D04604FE15BB0929AC2 +:10521000FB2AC479A7A75B895539EE9139EE695EFF +:10522000EB92FDA8079D4B1975C9AEE863B9894E8D +:10523000ECADDC09644B778F1DBC90E4B63E0B638C +:10524000BD6D5C816C1A295DDD047B647EBCA5802C +:10525000AF860679C8DB4C486EE44B79CE4231C14B +:1052600099ACFDF47DF0A67EF695AEC719489D3148 +:10527000A71E3090EF4A00C3DDB6552AD8F70C1EA2 +:105280000905452B28CEEBF3D68B838E23088AD0D5 +:10529000B06C38154B766435C21697C7806DCFA2B7 +:1052A000043EAE377A14C7381228D4AC1261D0D875 +:1052B000A20610D4AF6D80A8DAFEE2D5144A9B2E68 +:1052C000216CC79FF1D98214465D97B59A8087619A +:1052D0008B2D8857B7526B707BF643E44FBC4B97CE +:1052E0008156256E88C70E119CF14396E8003FC396 +:1052F000FF2548DCF3DB9B4F0FE4DD998758547999 +:10530000E6BB1B67471E381AE81199435AECFDAFFC +:105310007C4DAB03A5FD10747155FB01D3C108BCD6 +:10532000604334FDDB756A3D081C868C3E54EA8E72 +:105330003400AF229CF803D031E6B448DCBE90DDE7 +:105340005B4696F747DE7F9BF011DB3F2EDA66B3B4 +:10535000E148C1AAF435DB67BF69D3F1BBD544DCB2 +:1053600018CB966BC87004F8F6A66C0D1BFB64E0B6 +:1053700022EEC49E6AEE583E659D3AC35030CCF78B +:105380007C5529643301F0E7455B3838285B7D772D +:10539000885DCCF4AB595ECAF3E130D935AF66F124 +:1053A000AEFC476088ED09B0F1B171105A04FB7F83 +:1053B00056E4679733812C284C11490647DD789CC9 +:1053C000BA7FE0F41E3EA42313B6B836E92AC12002 +:1053D0003D0DA6C969135A63313641D8B2CD338227 +:1053E000E5A78DB1DEDA68CEC69FC0E4ECF5F05BD0 +:1053F00093EA6DE50A2943CE0F405CAA940527EF96 +:10540000CEE4F3E9C2830802F8E87DDDE4C374ED7D +:1054100013C112FE1FDA5BF11FA5A02CD8B3F5480B +:10542000F270E6D78D2CC2C375DC7A0B68CA7B9EFE +:10543000910629931EE9146895AC2D8EA56C656FB5 +:105440004F1565856C8AF148F5FB7C210EF3111030 +:10545000F8E53574A9EE94DFCC626AB3E876C10F43 +:10546000B244DD80FBA4D637C4C5D2234EDA85A66C +:10547000AAD90EEB2663C1A8693CEFE50836512294 +:10548000065A14940F6FC7112D148E756F32FD7C60 +:105490002B0548749C3C3F3B01D1EBF4074FDD8664 +:1054A0002448C61CCDBCA2B62D100AA1D6022AB82B +:1054B000BF0C514EDC9C02F8910055D5EF9C0D6B52 +:1054C000A6AD1B5547B0CC76AE0C937E9A4A7F585A +:1054D000B8C737CE10953E536228C9214F69F9F4F9 +:1054E0000DF102CDC091443C2574AA25E5110B8A2B +:1054F000367FEB89E9F420357836E49F18C68E2094 +:105500005F8F17D1031A57A2451B1C6B7C86F64E82 +:1055100018267406DB90B7376F2A4051FBE3C0E8CA +:10552000746377EAC7EF0765DF32CD679B794EE694 +:10553000DB2DFB27CA92C82BD9FF086DC0DAEF3FDD +:10554000FD97A44B1925C356F02A736B2B0AB61688 +:105550005452ED7D739A97B938569C48681D4AE9B4 +:10556000989E577B15FD74D9231A3C4785514E757B +:10557000805D20F6753F605BDA9DF724A63BBE0E8A +:10558000BA347FD5A9F27E0AD2AB7AD7E4C353F7F7 +:105590002399DC9DAA885D77B454DBC8FCA9A7AD2C +:1055A00092E7E5EFDCDA97186B3F7F1FD3C352C950 +:1055B0009CAD2026F693989E6C61721BB45C1F9183 +:1055C000A67062BF3218A80E7B37BC9CE6D29169E8 +:1055D000ACB5FEAD2DEBD0EC4C4C5D1D3DBE1E4F71 +:1055E0003C71BA4B6772E2DF2F7E6CF1845C00B9CC +:1055F0005659A56B5FB14BCED9E6EC11155E7E41D5 +:105600007A72CE8BE90C28E2688F376453EA57EE42 +:10561000AF8713725E66B509C6296B803C2C1C935C +:10562000DCA074E11D0EFC44AFB61DB0D98DA96F8E +:1056300052C4DA863071D06CAB3B0AFA46D33D5483 +:1056400043EA39301C81D8B436256CF51C5E490E0E +:105650000C183D9AD7E3422B8B26269A8F9C32FF5B +:105660009CF12BC55EEEAC02E222BC2E3BA2582E72 +:10567000F9B2DD513BD866702A05BD9C4C00FBAFEA +:10568000C53DF1E31DA86582E2ABE77C7A3A44812F +:10569000574ACE3052E0EE429ABB74BD9FA23CEE18 +:1056A00097AE3A0A888BFD9A4F8372731807283297 +:1056B0007A66B54164FE4EA0D62576E3F9C1D222C2 +:1056C0003E71669FBC32D809B5964A4DCDFE2C6C12 +:1056D0006BAD023C949F08663EFA11233805EA88B8 +:1056E000DE1F4A2493511FF422C5B44708D888D13D +:1056F000ED957BEAFB3AC73C5B50E5621F215A42BD +:105700001A07B17DEF5ECA95B17869AAE477F35DB7 +:1057100075549049C4FBB85E0FD94E1E169DDDF539 +:1057200001FB7E60A3ACE483458E191E4FAB893E1E +:10573000336559DBFE497CFC5C0B4AD1F8B1A80DFE +:10574000A1ECADB52C14B32A4339FC9EADD4A7B956 +:10575000FD2C45781D4DED56E4A8DBE83FAADC2C76 +:10576000C3E30BC20BD8552116A892A3FDDA260F6E +:10577000F9F2AD2E0F10A8A5A3E5BD04D0DDC276C9 +:10578000E95E91285333E5F0312081E91BD1FBC359 +:105790001079D28ED4C464A7BBEF3E6EF1DA6050AC +:1057A0008B982CAA04B16EE25F6E015FDE754099A2 +:1057B000B4992B6F313C1A4BEE658C94B409BAC482 +:1057C00097798D2DA2C4F0458BBBBC6A67B4632A60 +:1057D000C947908B27AD18ECC6B2D0AC1D343FC979 +:1057E000E04724BE03C5BF382DC1F447AB13E42FF7 +:1057F000FC5786FD1AE3CD63A0FA03696422C784CF +:1058000073B1DA506D56C86F05E1CC4F2D7D45362A +:10581000F9B03AE3ED50CDDDF234C126EDFCD366AC +:10582000D8D801EEC903CC6BAA161F6A2E70398333 +:10583000196A9C7E76D17E05ED4AC1000EB824140B +:1058400013D429D4FA7637EBC3D7680A8669EF8771 +:105850005047A5D88598E9E5AD992F3089FEDF84BA +:10586000762783B52A272060A7278F0B11D05A3EB1 +:10587000207B80A2EAF394BBA7571290B35BD0E2DF +:105880006842431E58D7E5130FA3258172BE2779BE +:105890000E7234941341BE2BDF51859BECE08C25B6 +:1058A0002E7058A24D70844E9C0EBCAF93BEADF6C8 +:1058B0003AFA4B27E26BBB46031EE051A5A3126FD9 +:1058C0004445A6D844337D9B9CF6C27AA4175E2932 +:1058D00004EECDB06897C372E23174CD033D9BF006 +:1058E000981772FD6C40AF4B31273CDC69ECDB96BE +:1058F000AFB615811472361D8FE238CB2B9CEE2388 +:10590000EF4F970D29C117EBE4A61EE3AB600580AE +:105910006C20B0471C79BDB8354FFF3EEC858A3B03 +:1059200076C882647333FDD01B2CF50544DC3B4103 +:1059300039FA0C32D20680D1EFC9E10D12A36316F9 +:10594000F1F776AF97B07B540B7A45D84100794296 +:10595000385DC67231EA47C3EF7CA566C69FD3B9EE +:10596000BD489BDDA76C83171227FEA6B7C004585D +:10597000DEFD56D46DD67E738151B7B3316181356A +:10598000DAB80AB135016898E90FADDD1C430CDACD +:1059900061E830AA4B8568D7193BA3D7B58D09EBD1 +:1059A000436C93D90A7B9F7E07E391469D3A12C3CD +:1059B000DA78BDD1AC1BF71142F161179526ED8560 +:1059C0009C79D21FAA9C6664C5E300470F8C6EAF1A +:1059D00024FDFD945CE177DADA1A985BF68D0F10FE +:1059E0001078071513AB77F391A1CA5B2C4CC0ED6F +:1059F000317A731E1CB7F4552A9707474F3970F850 +:105A0000BDE36C042C0A18CC07E031FF2418658B29 +:105A1000866698BE41B80A9FC4789EF710780DE25A +:105A20007BC8E3E742A8D07341BDD92890A684D3B0 +:105A3000486E65480226F68564E3C68D6E0FC8F68B +:105A40003E431354917EA3A55F0A70B9E392F768B1 +:105A5000F305145B8C79356DDD294A7DE2CBB13ECF +:105A6000A77ABF88F3A66734EB7F806F0656FD6B7D +:105A7000EE22B73F0DF9AE5B3136811AD358285864 +:105A800036741A471DADA3AF5B00163E089B500D40 +:105A90003A16197012A3CD99F35A99296433B3D2E7 +:105AA00074CF84D03544FB1394DA5B9A0CE5A4FEE2 +:105AB0004CDF09EE51F9194E21D783D6182E7BEC15 +:105AC000D6110D93F9C9C40E09EF882491E9ABB042 +:105AD000D5C2B6CEF67B7702783CDFF4CB476F3089 +:105AE0006C796941DDDCD041D32ED88D24B46318A4 +:105AF000F432B1B5C0A059B08746E4378EE2CC2B62 +:105B000080F628BF0F4D194517086ECA69DCD29E72 +:105B1000FE1666F0186CC25C2FDAC66B6411F68153 +:105B200066AE4B6F7EBE9F2A8722E041BEAC0891D5 +:105B3000264B63B008E52DD349048CF92D8E5DC446 +:105B40007470EADF46C81C35FD3DA4D1096E7BD6D2 +:105B50005FA18677021A5254477C93F3FFBC2F440F +:105B6000B0E8D6ED8E7A431C0DA48C9021B957BBBA +:105B7000B6A8F10A69910C24881FB7B34CD2B3A719 +:105B8000063A0343CC7CCFDB457D78F53DAC04552C +:105B9000AA2205AAA9ACAC4EF25CDA4F81575C2070 +:105BA0009F9D38BE93D90D96DED64F8C54A54542A5 +:105BB000905B2F54D1203D7DA349BDDCF9C1D4CFEA +:105BC000894B6EF4B41E28CAE03AB661AFFEA14814 +:105BD000D772227B016AE413CCA765D0EE18CF2ED2 +:105BE000F96C04310AA84BB9CF83B4EED90C779382 +:105BF0006AC827D6F8A9D4148B852E43CAE0D818D2 +:105C00007BCC1365CCF3513EC919C45CED777DD7CD +:105C10001DDD45E55360E2AD110D631EAEFDC59778 +:105C200068BBB40E5AAF49119C84AF8A4CE9A5B247 +:105C300071D4803A9804A76190DF9E348814A92417 +:105C40009EE55435321BB2A5B51E3D11250D1D4DE7 +:105C5000F8EF137245BFADE9F301B08C34E9DC68AD +:105C6000217E1EC3B90EAF9AC6650A58BF8151B2D4 +:105C70003EB8C6EB16C2D0EB70AAC0CFB7AB558FFB +:105C8000667B94160EEDF51504935B985DC36EB3B9 +:105C9000326020416A7341F369F0E5D783A9596CFA +:105CA0001A080F6D2E3D867E8306EE9EB4BE1E62E0 +:105CB00018A6F2C9F6A7C15231B287EDF0D73DA5BB +:105CC000C5669249361DB06BA1C83AD5D1E3F5DF60 +:105CD00047DFE953D91BC74566847797B8FFF27051 +:105CE000EF7468B1593ECCF2E9951D053E723B2F29 +:105CF000D553EEFF847F954F98E6713A1FD50FCFAD +:105D0000A6BF30F020E1A26DEC679E0976249B339C +:105D1000C078AB61230461843357A7FF874B683594 +:105D2000280915F6AFC3B0DD584F0DE3655302A740 +:105D30001888F22A1550CA8EA59B56ADE4F69AAF84 +:105D40000D380898D507273BD27A97A378ABCB1BA1 +:105D5000C20D5982389EADFC695DB7E688D12BDB58 +:105D600072642BFCB805E2EB336AF8B3C6F3962AEB +:105D70008DD7D67A2C5A98C22C4515AC37094DAF21 +:105D800084B55ACF1032E996C7A5C6EDAF87AE26C7 +:105D9000731DD28B68A27488541B7B8E0AFD6E1013 +:105DA0000D71D9E4E42DFAECAC9C73F2BE4D3DD2FA +:105DB000879BFA901EA7AB227D48C8071069BD7368 +:105DC000535717430FF989F8674D56024BC647F3EF +:105DD000753760405307805A74F5B74AD292E1850F +:105DE00042033665F64EA0E23C8934928C7078BF4F +:105DF000185B625B24BEE431AB2901BA567AD7E066 +:105E0000BBE2B1A33D51F789DE8744A6B2BD25D7D9 +:105E1000699B3ED26AC2B215AE0628C3497684CACF +:105E2000A0CBCD50D35C7F09DAF175B75DDAA19DC7 +:105E3000C8BC2350DD9E108DBEFDFB7B10A7DA4D44 +:105E4000122434AE60D757F9AF1E51ECD416D27974 +:105E5000BDD287643BC544528EF85E18D3162D63BD +:105E6000E3671FA827967627014E0EDC380EB3C6CF +:105E7000DF2B6DEC811C3EEB6FB1A1895610347A9B +:105E8000DFF72FCFAD7FEB9111252577A9494D5F26 +:105E9000F5A5501D9E1F94BB4C69BD07800970EA93 +:105EA0003935DBEDA9F1636A39161C6807B485D76B +:105EB000F22F421C6E92DB5ECF3CD5F6C63ADAAFCB +:105EC00055D127E8B31DA82C7FD001BD0373ABCCFF +:105ED000F61846B9A0A7E86EA4E9F1F9748A4EE76E +:105EE000F740DD7D3B4D53D86ED9076400AC0AB650 +:105EF000B4AA05E5C3DA31805CE0D37A0B20AD03A8 +:105F0000E7193B894DDDCDA9ED08F8B784ED43389D +:105F1000006ECBAB7FD7E909EDE01A7FF228728AD9 +:105F2000E7B81F5B32B8C5D5E9D86274D85EC880BF +:105F30002591E6D7F6C2D71853D22DBB2AC385E2E6 +:105F4000825BCF643CB1122E512F63A873AAFF96D7 +:105F500014456CD4E31A77FA12E61C03CD726E2452 +:105F600046DF7C812016A64F059481457F1B026485 +:105F7000517CA0733E9EEA292F321E07213A38F049 +:105F8000761E9F879871AE4FB4C447BF023F5F2D06 +:105F900065B74A66149A1782FA55EC2DFA81858CFA +:105FA000AE7F18107944C83AD44E7AB928E33498B1 +:105FB000B4973C5E23C7447A64B4D806C640C68E04 +:105FC000CBA9AE7D5544B40AF269489182842FFA78 +:105FD000607205B343085488CAE6DBBDFBF0D98C78 +:105FE000874536F1BF8BA16BB71C311D97FCE40FC1 +:105FF000628B5DFB7259DDFFF72B82FF04E2E7B491 +:106000005467AB0E02CC196AA721A570D772BF7076 +:1060100063C0254133C4CE2767821B458F8D493C21 +:10602000BE8B53BA99A17F56672D810AD953BB867F +:10603000EFBEDBE661D667987E52A2222E011BA33B +:10604000E1001771E4F76EA678A452C5B460979B7F +:106050009330FCC211F91D8E4CDBA6A71F7E11FAEE +:10606000F0594D3069A8972BC0AAF755AB34E7D249 +:1060700054EA454B48A62D387C014E4ECF0C0FF20A +:106080005CF7E2B3053E53C2F370B658CC092CDD81 +:10609000E0C2B42AF9221D2DCAB89C5E5DDEB4D2DE +:1060A00006DE608F63C2552004F40D75E014B2D98A +:1060B0008CFF177AB583D918DC1B3471A7F410E470 +:1060C000A1E80772B64B194584A89F2586753F0D38 +:1060D000BCF7B3D828BF120E6C09EF16C583E4DFF6 +:1060E000CD8D3DBBB3E5B3B90AB43E935881D52BF2 +:1060F0004AC1C2984C6B56D66A3AE645E428413408 +:106100004AC4319F479520F6203A2C7190B2F1D0C5 +:10611000421A935A5C544DE9141893AECFC3DCB4C1 +:10612000F7E524C42D6B1319683ABAB7099AA11D73 +:1061300035E7B991569E117FFEE302C8A7776C0F31 +:10614000F49A567C08E29E8198D3FB52EC9061A9A8 +:106150008E293688EE5344F137483B3AB4560E3315 +:10616000FC622EF6618A68BB7378C19E1C43BC6ECC +:10617000A9DDC60C3EE8F8AF542D3330A9400B1B07 +:10618000D74EB395AECCB6EE0B8EF37C1336AA2960 +:10619000A563A053ABBD26D4797B4B7EF7A7DE3435 +:1061A0009BB7323DC9681E2FA0BF7A21D36B1F6AEF +:1061B000A2B42CE33BF022D0623DF857B0EA790F4D +:1061C000E5E3FDD077686EA0C604AE0B74380D060B +:1061D000F825A463199401169B0A1ECF4DE531E6FC +:1061E000B3AB913028FFE8ECEF27BB87A4B638EBC0 +:1061F0005377B4FA0D3643679D4753AB5C1D2C2A89 +:10620000C5B0BA2719FE290391E5D9347CE8D6AA8E +:1062100064760B8FCCDC234C64146E1F17580B86EE +:106220008E0EB28F24168A46A40B02E8804156A82F +:106230005B30A4CE472C92B9AAE19B903E254551F4 +:1062400066C2B93BA76F6D667A01F44A0D19848660 +:10625000BB24099F46A07A5F7BC9CEBD5E7B2FCE53 +:10626000E138B4BCDE19249D9BC00F156A0A82DC9C +:106270009D6FB60DCE94DFCD0747BE4C13D6A061FF +:10628000B48F1572D3E30F5074369157C27FEBB5BC +:10629000FEE2529B10AADD70FBD0F5134094CD3A7C +:1062A0006A09E5D1871369923C73E0327B878BE8FA +:1062B000C376A524C24A213F32739A6DFFAD835E37 +:1062C00014109F57DC158D092A9276BAA32A02185A +:1062D000C8A0ACB5DF5C03D27D960E3BA9F7A33313 +:1062E0007CA03D1DD33AEC0862BE7B6C3B9BCCC6C8 +:1062F00058E5682FD5A4403208D74B6591F104B812 +:10630000EBF52B7D4B882862C92DAF9436677CE670 +:106310000B7FE3B8296329A86947BC5EB9A102F8DD +:1063200069D3AF30C545103B243E35C8E384137AAA +:1063300003AF308C60B22AF5771A7BB71AC4CB351D +:106340004355D7F588611F760C27DB29251DABE364 +:10635000EE3EE420D543FCFDB999853A923DAF3E2F +:10636000462C72E003A711F0F53007D82A42B7A7F0 +:10637000ED2D7D8CD534999821327E4CA0A2EB5E18 +:106380000A938DBD1AE14189BF770A09D23658CCEC +:10639000D5B39AF725C13AE1684BEBAA591DD586CA +:1063A000C3A665FF77B943C5B054AF881000CE21AE +:1063B0009E824A1031F9890F0E550D540D665AAA66 +:1063C00020A76D5EA69BE1A63B6C808B5C51356F70 +:1063D0001F9E1B49C3DD2D5CF1A00071B0910FE938 +:1063E00052C78F672F77A36AFE8F042FD85AC4A095 +:1063F000699FB34782E155F1EC623B6F2628D400D8 +:106400009CA40A0914FA2AA57DFA429FC017DC8BC6 +:10641000BBFFDE7C89D154BA625721675E760BBC24 +:10642000DFB8A0D9D90054D2B389134780DC906B70 +:1064300057FA811B1EE4D3ECDB7C7AFD257B8E4A68 +:10644000A0ED1FF31021EECEEEDA2D3865A894E50D +:10645000F36C263E4C80162E92EF26AC248E96BD11 +:10646000E42F32EF224D508A28BE0FE48F5940347A +:10647000B3DC7C059B6792F07605C2BD3729EB053E +:106480000F30DE8A55F88C8794743A5BA84439B093 +:106490006DF20E2852698747F4F5A4A430770B23D8 +:1064A000901A09AADF9DE112AE211F58163215A0DD +:1064B000570BCB3D69BF6A52063BDF994ED305C2ED +:1064C000516712723B3A42037A49EDD9975FBF2078 +:1064D0000E34120EC363D9D889E09FA3F4B121CD45 +:1064E000F4792F9263B2E29806CD08E2A003D25667 +:1064F0009B33D93CE62658AA08B1F6F81933F5E5DE +:10650000079FDC2343DA8E88FBEF6E905BAD41354D +:106510009E800CF1705AA6AAB462B8515009D39D5E +:106520002B04D4974DA5B9BAEE2A96525B2D0809D3 +:10653000152C503431BFC9657E663A7B47B03C4963 +:106540006A77CDA3430AE88E9A6F3AC8DF6E5A2F56 +:10655000D84614F46294F67655D2B8F67A966B6DF6 +:10656000CEBFF6AC4D53A363A544CE5954A557B640 +:1065700088A3D5EB6ABD8F98E077172D1E444C3861 +:106580007FAC008584D023D7D05F4A438C4F34B989 +:10659000DF2539EB1F514A03B6B39105E7CA2FFB3C +:1065A00053BAE761623E0BCF4013BD5D216522D82F +:1065B000BFE0C1E7DEA9E8C6414CC8892436B978F6 +:1065C00006EB7DADBB0E13629772FDF62BB1F7E3C0 +:1065D000BCB0359723CE02708F5BF7263B758C7865 +:1065E00048D7C22371791642708CC6ED676A6D8CEC +:1065F0004EEAE347F7AB77DF6757B8A6C16B2DBD0F +:106600003AA0D27676D0F1156BF2949D375A42ECCF +:10661000032AAB3BD0FACA33E2680795FF6CF3E379 +:10662000D63AE604DDB9E0578DB7151061F49BDE6C +:1066300076F30825446BF16768FD2FF6501691E557 +:10664000E88B565B7D1C1ECC98D8D5F7CBAA1B3D9A +:10665000F867DE1DEBD20C71478B2369D658191FE2 +:10666000342055F841D5D562B3995E2BCDEC898D98 +:10667000925813FF90E93DE98E09FF64B2505AFD2C +:106680009C79CE19137E67E2332F853D832D6E47AB +:10669000F2F762A382CE1262F2591650FA49FF0B4A +:1066A000FC5AD1AE16956A977FE1498047B9966E3C +:1066B000C8952E8D24C1625359F540A48BF831CB77 +:1066C000021112AF8C35362C75D7D50FCBC3D0CB7A +:1066D00036AF1310CDD1B57430D1015C076B55972F +:1066E000EBDD1C6E9173E9D5E8822BDBFFF1A51C75 +:1066F00009A1E0463F0F3B1989454EB25A6B26AAC5 +:106700004E77BC9895AF9F0F472E112EA641E32AD6 +:106710006659E1446D82DAAD875E63F11834B45591 +:10672000261A919C4812D0D66F546F8D2ECDA24E52 +:1067300060D5C194DE5B9032899ED94318941B5F6B +:106740002E68811F2CA4634EC9DF71B653B1FBAA1A +:10675000A642DC034A6DBC8DD2273AE0E56CCBA49F +:1067600033F96674F8D45D4BDC854CC64021D69471 +:10677000947672B128F383DC35601E603724644E52 +:10678000A41F98F862651C54C757477A2030ABD2D3 +:106790004AF5B4426BC5E137D7C5C35E0ADF71BFA6 +:1067A00060D702E59F1A7635F04DC2A621C96F74F5 +:1067B0004C49D122FCA4A3068E17A35E5521CCDA46 +:1067C000A46D2CBEFC449F7F1D07D4994F5260AA34 +:1067D0006BCC79CE10C5FA97FCBC887456A1CAD789 +:1067E000E86ADD483624E8BBF47DBF250D53E7B1E8 +:1067F00089E9D127668A3644BB4A38D4BE0547109A +:106800002CF0EBB18EDEB207AD5F487CAD37EA19F4 +:10681000DCF9F4EB430138CA10C02565D66AAFB481 +:106820009BFE562011D0D3AB906C2C26B1B13A3CD4 +:10683000772E1F7DBD6230FEFB60BC48B27F1B928D +:1068400047CCEDBA1215BD3D5195BF890C311FBF24 +:10685000FB6541BB04ABB1FA9F63A1E079259D03C1 +:10686000E74C44BE03B935D859DCC31D8AACB79B8D +:10687000C6C288C64B6674F8FC57B5E25D3ECD9C37 +:10688000C7EB1DF469A353988BD02C0EE1B4D14F04 +:106890000093F1A46742E0A04B17C2B36260D3C279 +:1068A000058039EB6AEF988A20A2CB606199EC4FA2 +:1068B000BD861186A4022CD570BF8D1F69C33D19FA +:1068C000CD16B088C41C136101E0FF0AE0D64A2946 +:1068D0006E8623D620B5FA6AE59FE85953FC41D06D +:1068E000F011EC01CA7939AF8345D61DB9095FB5FE +:1068F000F4E3157C7B14BBC6AB01ED8845AC71B8E5 +:1069000006AAB95474C94519DFE3617139C9AD529A +:106910001A2C8983B25B8A4612AB4EA48330C3988B +:106920004511265E9CB8862DCE0014EDC15485C35A +:1069300079D1454B076F1E2A595C57CA5E76C91636 +:1069400024FB9DA7A196E8123D1F0A74F7C6B45018 +:10695000930564CB914D1712E52BDBFF2E7248BADD +:1069600080D025FC78C98DF4C0CB0420C999B90327 +:1069700078E8D2A599B9361FD0615656C1A4B5930F +:1069800044931BEF3DFF622205ADC2FACDE96B25B2 +:10699000D70C1A8ED23C998D7EFC0567FC882E4957 +:1069A000B72C5F87CFF5784BE004433F512CD07C68 +:1069B000C47BD21235C1719CC26EFDBD8B4A088466 +:1069C0004F099390E74A60F989C86F43B20629C717 +:1069D0008DB290FA39771CFCA49E2CCCE0CBF756F4 +:1069E00092BCA3686DDCADAE1AE583189F57C04812 +:1069F0009ACE5564AABAB0701D0E9869039E33DC16 +:106A0000E1EC23689F74673A85A98E8889E12A9F03 +:106A10002D8010119C1520B0601A045B63B5375EA1 +:106A20005E9D4653A098EDAE5CA9F6150DD4FAA96B +:106A300097608DBBAAB72E0CFCA046A1BC18FD0226 +:106A400050906A45E2BF4BDB88C35CEF8193236EB5 +:106A50003ECB871AF68B537C14788078DEC509E824 +:106A600083A7744F44FE4E57D19A7219BC1D67E735 +:106A7000551777D65FBA1056569C23A9C9EC23A7A1 +:106A8000B7DF802019B19077C921E87838B28494B3 +:106A9000B108BF67C84FFEC990C7E921E5556142FB +:106AA0006FFEFA4607E4B4CCB63462C8FE598205DC +:106AB0000CC2E1A96D4674364827809820D0755ED7 +:106AC000CEE2DD4C6736DE468D37807651A670A06B +:106AD000BB664D383E12B7D620FD2A3F084A23B781 +:106AE000263B37E64CE35B174D231F791A8AE38E6A +:106AF0004B7928A065F91F8EA2A16B3003E6D5E182 +:106B0000768238C50EFC70AE2C266975C5B45E99C8 +:106B1000B9A5D2C63E41F0B958184E684842CB1EBE +:106B2000B9B12EBCEDFEEAD7BA3C770610571787ED +:106B30007777FC8E8E892FB71D0900EC67393F1FD0 +:106B400043E0B67FF80E0A074381FAEE4F1C03B408 +:106B5000776027AA1ED666F9F6595508C52F79AF72 +:106B6000D4B1BE708D87AB270DACF2F5EE32516912 +:106B7000513611F797BA4D8BA3EC4D5FA8DE80110B +:106B8000FC70DAE68FF4739295A0940497B62FD632 +:106B900067E1DE7A60DAADA5190749CA21180F0C42 +:106BA00026B4E3D7343B4A15D5134D15696118C691 +:106BB00080443297D6818AC0D9D4CA9AC2F02403BD +:106BC000CB4E802F28F875FF04FFFD7245F141E19F +:106BD00083C13C70011E7FEEDF3121B68AE7DE18EB +:106BE0003ACCEF476263234CC80D50DFB16FED74B0 +:106BF00041EF691EA0AB606214A3572418C01F3573 +:106C0000D19128C8184DA6C3D3CF6F2E309AA1C7F3 +:106C1000FAF906CF1F43DEA8F0969344C47A0EBC5F +:106C200035622C8889EE5955C90CCB416E0781C459 +:106C300044F3F5630A8CADB818CF584002E916A9A1 +:106C40006E52A12CEE5FF009A36E7E51D81E379EC6 +:106C5000454B5F1F0793E7468242217BF2DC2BE026 +:106C6000D00DC80B6F6104F2106D1160909D7BF028 +:106C700014AA253CC4204A19AD654D9ED0E434D4F5 +:106C80004C98F8E087C7BCA6CB0CB3C4CE6A02E729 +:106C9000EBF486B4D15B844BBE0FE6ED34817766AE +:106CA0004C5506248C4AC70D12B863EFC68CA4D18C +:106CB000262DD19131ED10DB702BF4B80C351CFB77 +:106CC00068B7912480DABF6C95EBFDE9579BA1EF83 +:106CD0001AB0F490EB945BE1FF75AD429D75FFFA3D +:106CE000DE66A185869697F1A387C908572A53FCCB +:106CF000C84CEAC1624975E12406F9600A4EFD7488 +:106D000071AF69A828EA15D424B5A67E9F3B4C6ACA +:106D100018D740D580703DC7F00F6AD12412021AEF +:106D200063A8BB01B0E6F3B1E191891AA80E4AB499 +:106D30004A114C53247C8E674681F0C27D2E4A59FD +:106D4000C52908DB122EE7F0203D0F4268DC176DE5 +:106D5000AC2DDDE2A745FA1E48AD6718EC15AC8EE8 +:106D600009AD0FE9F0BA8AF679B70053852F677F2E +:106D7000DD8B901F84DC923B5C289C2A11F3675EBC +:106D8000802613FD52DBA058DDBD4D22AB7D0729C7 +:106D900043570D0EDF9EE5F99AEBA41B296D8B6C12 +:106DA000BA7B156B65E4B4E95983FE39210483FA93 +:106DB0006077DBE143E32F843EEE7C37E18ACABE95 +:106DC0002D348E56B5A2C6C169027AFAD886F090E3 +:106DD000CDDA2D838B5FC1E86C4FCD0CE033866E2E +:106DE0007ED0AB91A84AD73B53550B2A5FE06CABE2 +:106DF0002CBC2B5DB72ED865DAD93B1968B8D7D62D +:106E0000920AB978638893E0E8DBCFAA57331D6C08 +:106E100041D0871EF782FF7E0BDF179A55EACB3AE7 +:106E2000583805D14B51949C24CF7B86A42ED8ABE7 +:106E30006A2F14AB952EB12835A70C3A7B9B6BE6D5 +:106E4000E3F650A59EC32E79CFC2C65AA69859AB79 +:106E50007790E17BE8E8230F236E7207BD662FA3CE +:106E6000A2F015BE5A128F5CA79459DA3BF751AACB +:106E7000765ECE99D6E5D2959F96068E869548FD8C +:106E8000922355AC4210F1C77BE4D75F8968FA5A68 +:106E90009A3849BB652C48FA340CDD7118E186112B +:106EA00022074EBDE96A74A940F4E8E58488CB99CD +:106EB0002814EDA3933955BE7B6BFB57B871CEDD1B +:106EC000712AA9F643837C0BA3831E32F045FD167D +:106ED0008A0C5AEB97849CE924B1750CF6CC5423A8 +:106EE00087F2366A9A5F011C5208AD40818615E729 +:106EF00039E5B58FC364ED58291070B8218373DD6F +:106F000000B8EADF755E9F6BF460BA67A2FB8E2E55 +:106F1000A4BE30203E689EDC94BFD51BCFD9A136DD +:106F20006432550297AA343EA55878FF476B502427 +:106F3000899FEB0590565AAA389C70EA62E7B80719 +:106F40000764098B49EB7E0CF22A5572DA05F3458A +:106F50008F573D8AB305480C4B512AC516C6CD1B29 +:106F60007DC49E2E437D948ABC94386116249A6712 +:106F7000AAF26396D39076C5BDA273E962B3575E59 +:106F800035EC126E036963670D7066A52A3CD996CD +:106F90002EC61148600E53363A11DBBBB8C3C3B0DE +:106FA0005D9169AAA8E8B5A0D27443A1705E51A80A +:106FB000163427F71278364483ACE3D773D89C6B2A +:106FC000433462F611F54B0EAA79D883FDE30DBF69 +:106FD000F697F264531D0F2B25EAD254E7B5487794 +:106FE0004CFFC002413ABC5A2AC1B4C5F9F370EF54 +:106FF0003F74AB1A92F7763A3B68D8C412F508464C +:10700000E996F833D32D1D11AD728E2552C90B9020 +:10701000B4C59D925DAB950A5D8FD321AC008C0FFA +:10702000126FBA4489AA26057604B522AA066976A3 +:1070300022D7375F90B162D5D09613196FF6D48DF1 +:107040004ED51F833653FC13464196F6AA65A5C854 +:107050005A783CFD0215209378F62D23B636A20C03 +:107060001462E610FD3F029204B0359500A1378C02 +:1070700054BB49ACD3F5C682A09784D76686BD734E +:10708000009C0AEA815AD3F0FCFA3361EA9914377A +:1070900029F7E91305EB68BE2B883308E4DD9D4032 +:1070A00046393095C4E65FE84E2366DFD618AAD687 +:1070B000DEF95D3C9C651C03FBC099345A4D9A3B3C +:1070C000B8A129E7564CF9C56CE9180A1FE35637F1 +:1070D00055448BBD6EA02CED19BF537225AC041F17 +:1070E0003E1DD970D68C8D233317348A0CEEE2B94D +:1070F000DFA647E4D6E2C857199035FA9F1161C45C +:10710000549B6E11E424BD8096898B73D963650C02 +:107110003CBC9014237593FD2E32C6ACC1A4619281 +:10712000606FEF5AD7352493EEEA60C38333CDE81E +:107130004FB04B8C48A4F42C7B616CF720455BB8B6 +:107140001F47E6956A98BA181897ADB9E1FD76EB36 +:1071500095CE815533D70DDEB3FA948CC465464A7B +:107160006FDE1CEE8872C420F545F5B8D299A245B1 +:10717000443B5646A359C8CE7B2291209DB3624F13 +:107180003E5354C7BA67458C2357B93727B0A9195E +:10719000192B326F8F8E041AAD44F26509173EF435 +:1071A0007C5C34661DE7C4EC390074DE47665672B9 +:1071B00084C6520DCB70AC80F3E6C31F15250B14AB +:1071C000086D1628A5F58734DE4C85F8C938F71AFE +:1071D000E2D0E776C5EC0BB95231A0E03BD0E6E552 +:1071E0002697CB0F61D8CB1B587FD514C0068FD5FF +:1071F000C4880799BB5CB5698257ABEC42DC08ECEC +:10720000ACB641C1042043343BB65C22B94C52A316 +:10721000E16E8BC7A53DA6E261452FCFD081590D08 +:10722000E4CA6EB0491D705615B69F7873B409A7AD +:10723000BD8FDF4A6B1587164AB08C6F126D4BEE0F +:107240003EB85EDA74FCC2503F9806CCC0F22F16EE +:10725000DD3805C4D6940DB2462E512E89BD7F6E01 +:107260005C906002274B69B2BE63155AAB41DE3FAA +:10727000F6B703A76188135F0A020A36814874656E +:1072800053713073A73DF7B5A1121DDFCF1DBF7C31 +:1072900054CA55518BB9DA8E2274657A833BED5D01 +:1072A000C32DD8DE5F8EAFF4A8D25F4C153FFD85AD +:1072B0005D468169A72F88DCAD9B7655239882F1C6 +:1072C000705D3FD279F2B14EBB96536B4B3F1ABD06 +:1072D0007962C570238906FA70B754145715AF1C2C +:1072E000EF62406638E8384322E867D7D5ADCBAACD +:1072F000A30A069579ECC006C87AF7A77708CA29C9 +:10730000AD7C7AFBDB37CB97A52FA700B3896E0442 +:10731000A980F1FB19C5EAB7FA3C102D1E86B6808C +:107320006C2091ECFD85F4F81903A2D801B934174B +:1073300041113693DB595C4ED5BCE2BDE8CB153329 +:107340005E1608302174E43288656C4BBFAEAC54D5 +:107350003D3FB3DB1FB4D502C44B884CA41D1BDAE0 +:10736000694A631D1A2D43EC83538693EB309206D2 +:10737000A47D94753F65634F5088216EBF35D3FE61 +:10738000A308AC46982905C27B6D3ED63388D3D579 +:107390007BBB5B842B99444C1637CB52FDB6C62F72 +:1073A000674AF4DB582A3BB0AB14462440E4D46966 +:1073B000B666D6FFD0E0E566363847F0065795EC5E +:1073C000C1D0ACC797ED4F57AFD7E05DE846143B4F +:1073D000B430434D15DEC5E16D5BB3873F0A480607 +:1073E000F76A554747EA5FAB4F42912CA3933E9D06 +:1073F0005319E992E023BA20490DB145BA8C949E05 +:107400008105CFB0D0D390F30C73B01BBB50E61501 +:10741000C1C47880CBD295212C12E2BCFFE691E565 +:1074200004E98683C8514266771D7D0680EC72B5FB +:1074300024A5BF51B99F7AB16BC52FF6D3CD94A8BF +:1074400079FFE90F12B7AE36DA578E225C7CC9306D +:1074500018472227E99888E003A340A353BF62742A +:1074600060A1667769C33AF93E55ABFFCDBF9691EF +:10747000A227068B85901F9E31191FB31FAAF220E9 +:1074800063B8B2232B71614F0B2AA6337D6EDFF3F5 +:10749000C05C83B8DCED7D159E6096716744CEFFBD +:1074A000BF8F1154A35386C473501CE7E0333F5B76 +:1074B000B2569CB1CC772A7DF509F60258F2C78DF9 +:1074C000707453674C4235D4E8AE96A8CC4B034A4F +:1074D000F43C626F06DDE83D1C9A7D4BAB09785C9D +:1074E0006AF12DC0F39EDA4ADD6DAD1CE7EB521355 +:1074F00088D99EB2703D078A299C4C656B12AE8676 +:107500000D5A0FE38B15FED0DC54C33498CFDFD572 +:10751000D0C4770F13326205FAABC21CA5377DB910 +:10752000BCD57D4779E8CC090086EB4FB14530B535 +:10753000D3BD037D953A04D54F26C91BC18FA8C47E +:10754000761612D03303F4E6ED6DF3BEECA38DD3C3 +:10755000CA76EA7438ADB62844D6F9AA766A8B356D +:1075600084C8129BC3F21B3AB2B02CD804DE165F5B +:10757000D6C2D5EC4DB652A63A55FBA83A38B578E6 +:107580009B60A7103999D7FB794D0425FDC69FE173 +:10759000CD20FF95D90CDB729DE35873BAF7DFFA63 +:1075A000133831E658303D7298AE3F3F400BCEDE87 +:1075B000C97CE297F6BF5F04DE4E2BC445FFF0B0F6 +:1075C00089F929F49B672B715B60631CB2B0266656 +:1075D000F13C0D89BCBCA5686E4F4DA34CC01F1675 +:1075E00060E7CDA926069514553098ECCAF18901BB +:1075F000C842AF48EFC18FFDF82B1AF14B23C1F001 +:1076000093CC73ABAD8303831FB13E89F318E805B8 +:10761000DC4C34D769F96EFF1941D84E88474033A6 +:107620009B4F5D52C0758871B51A995F49BA6DC795 +:1076300096DF680A9B2481948037269D253AA0B95D +:10764000AE02500B4C4B9644A1AA4BE9514F6EF23F +:107650009E25A5842B789146471A18ED4A33D62FDC +:10766000FD0C797D3957F152B2C5D08F3E53FC03E2 +:10767000A6323218EDB924DC9A170B99F917FB9F43 +:10768000CE0AD428333DE8D91239EF1FB53FC533B0 +:107690006345EF38BD3E1F59316A906C856DF6AD7C +:1076A00087F2E41C0E03B91208DF5447A826AECEB9 +:1076B000356C8886AEC322FCC6269F34AF3EAC3EF6 +:1076C000CAFE1125184BF217F7F737FA2B0570D5BC +:1076D000278623016C3FB1CAEA901550A4BD62848D +:1076E000D8623FB3D1A5A549E737F8D887BEACB972 +:1076F0006EA09833CEDA2D69A65F44F0D03169CD03 +:1077000042DFB18334C8008D729848431649C132B4 +:10771000D38548FC396AEAEC1561B65C58DA7B37E8 +:107720006CFDA675A3B9FC7D75B044B05389E374B4 +:10773000273C0FAA810CE4A90516EE5AA62E82C09A +:107740001351CF2ADB0A1527E98B02440206E1EE2A +:107750003BF09C33AEF4C77E4B4738F307287E22BC +:1077600089D83AF3E42E7E6E92680A53B11D2B9AA3 +:10777000B96D7D1178F8EC760901AF86921EA0FBF9 +:10778000109C723D8D559F0EEFCEA3BD206F709B58 +:10779000D2ED722F13FF0D0FC70FD0D708B56F2A88 +:1077A000380CABED8403A080368A994D36B390E354 +:1077B00047FFC73E57D348DB3B36A9A46D5F05148E +:1077C00012CEE5806FCC2492728B3ECA9042EC239D +:1077D000FC4537572D00C874626C9C1809299D4ED2 +:1077E000435B5AFD56A433ED3AC99ACD1B0FA4EC66 +:1077F0005314A34AF7B73045316082C48E82FADA57 +:107800009348EBDAADA73F89B846D739E767B4AEFE +:10781000D8B80BF98E9F1523962412ACB651EE19E9 +:107820001580DC9D1FA4BAC935C52AF0ACF0E2145E +:107830002155FB8F53932FE1474A34E80EA897CF89 +:107840005860DE50DAC7FC530BA8DA8E7F4DE66E27 +:107850005D09A7274762FCD26B71DE2FBBC1B8B6AA +:10786000EB19DE18948136CCD3F7FA2F8AE7351856 +:1078700025525E3BBD4D7CC8EE441CAE2BE16D191C +:10788000CE90C59140CA1B5613313E41259157DB1E +:10789000F9737F2F9876E39E13330708757AAF301C +:1078A000E3465D95A817EB66171942D6662CD845B6 +:1078B0008AEF4D21461C1F0C509A74A1665660B386 +:1078C0002A561935524FAE2E12197D5EE60B7A5F9D +:1078D000E9C616FE2B60C9ED560C34490D57E0CDB4 +:1078E000102991962582723EEA9BE3615E282499D5 +:1078F000F36D09EAD56A5A79F1B297C24B9678A529 +:107900007712B7B30A276FF80215188B73DC325B56 +:10791000BF7E02469A171B9F2C51C5A1180F4445E4 +:1079200057FE667A7954C710F7693A4A7C75C1EFF9 +:10793000A53EB7E5B03324F174C727C0EA1E5173E2 +:1079400061CFFFC0D2328607572C5767763DA12002 +:10795000266E49203CD1C99955D914F9553FDDE12E +:10796000A6588D12FF65514636F21A711CF45CDC84 +:10797000184C450AD1325F23BBC4485E3F3C408669 +:10798000E656B6E1F61C231CA21EBD98160354A9A8 +:10799000BAB199354E32B4E3042E9F8E50A48AA812 +:1079A00015DA5A5AC26517496DCAE946626ABC10AF +:1079B0004CBCAAF86E5E2E3F1CAF655B0DE0C27832 +:1079C000AB6AEF0E56E6174E16A201B6570F0BD450 +:1079D0008BD4E364C5B0A98060448865C3BE9E6F44 +:1079E00081646362ECD85B2918A2478D43DFD129FB +:1079F000B44C08B0CB8D02251E1004447E5262CDDB +:107A0000D440DDC17E5B5E1744E22DC2B2B4487B38 +:107A1000436E12344DD542D4088C6A2A929ED8F710 +:107A200019EFA204AEB41B87B58122545EE6EFA520 +:107A3000F8AF91E8C4BDAE10FDF34DBBD7884A75D1 +:107A4000D0ABFA1B5260C3539CD37C69E192CD68E2 +:107A5000A2AAF6D7E50539142D6C2D6D1F3EC4344E +:107A6000FA21AFA438791C3CA72CA2FD680DCF41A8 +:107A7000642B15564F0D4B8F9513C19CBCDBC92E43 +:107A8000611AD5667903AD1DB760BB7C823EDF8489 +:107A900066489ABCDFE015239DC948E1BDE16F420D +:107AA000FB34DDF98154A522A36740109F859FE533 +:107AB00001F873471890DB5A7EACB10F0D3F41417E +:107AC00040C7CBC3ADECED1F447A641998E3F2CF05 +:107AD0005BED4940B193C2904C3A11AD85EB65F432 +:107AE0008AD3E6BD217332D9C5DFE351F552DFC336 +:107AF000228E7D2E4E2C26BF6879F90559C9CD41BD +:107B0000C57F60CEE8C191998293DBA0D266FD4922 +:107B10008865E40A3D8C1DA37E29A4C60D69EF0685 +:107B200054D77C1AE71511EE55AA44DE360185DBE1 +:107B300030EC48545F330D18606ADB786D31A2DB9E +:107B40005B9BA56CC905C0DA473018897DCAD9840A +:107B50001881ACE939CC35FCD8C7A9DE64DCECC0AF +:107B600002EAA7272A751216827457580D429EB34F +:107B7000AE962C0B7CF7000A04CB76EBF227D4AE42 +:107B8000E88E5C0264D51DB46203965D2C9E4A9A11 +:107B900095063A602759EFB178BA0AC15FED47956B +:107BA000C8A26BC2C8CE8DC9892E894FDE9C410008 +:107BB000873DC578AEE66269146884F9E6E2FDEDBA +:107BC000023CD98801F70C3E3F2D26D5D751CE7205 +:107BD000FDE0923D1275550046F8A020D8F9CEA9D7 +:107BE0002FF27A6FB20821ECF6C255A5D8FFB93D45 +:107BF000CB053E5B6AE61762D1F3BEB7D185E86478 +:107C000043A81B7C3DB44EDBFAC8BCCEB8D9CE51DC +:107C10005486D4D1DE270473591FF5B9951F6949DD +:107C2000D403D6AA84C4984C681A5DBE0A44C95BC2 +:107C30004581BD123BADA4740E1E6E20D659D3A152 +:107C400060C50071E9B70A7D0CF985A8D3CF987893 +:107C50004C70D6238D5E01003C2A0369332E042B21 +:107C6000B97FEE006363D6873B2EE29ACD8F0FD3A8 +:107C700064FB4F6C7ABC2FB68B79693F3556B69052 +:107C800079A9D2FA7E8AF32DE5BB52758AF687D59B +:107C90009EC01AC2D3E63F5DB0C564F58AB1718952 +:107CA0000988D2219CD27F790E411F984F7852E1EA +:107CB000ED770210CB45E18F87D47575981190D977 +:107CC0006B560D36D4F1E0F9A82887F645E8B5BF24 +:107CD000BC9CE6BCD7C4D10E4A99A8791D5627BED4 +:107CE000E466E5C8BBE1EB8EF2934ABA5A8A2CF6F9 +:107CF000F7ACD9129992D601FFFD2E55056107DD2B +:107D0000D830FFBB8E61729C1816067AE5E34607F1 +:107D1000F104B7CBD5E5BB3A097E527772E576011F +:107D2000BADCB1E3B33E7284C4F564D124696676EB +:107D3000BEC49A624708B32535E8D2481C774B7514 +:107D400058EE177C244733926F513EC2AEDA193693 +:107D50005928A20B5F84E712879221233D15A6C004 +:107D6000CF72A6598DDFD2D489A304DE4B090EBF92 +:107D700073FCB20B57FBCACAB7297B5B7516FFB7FA +:107D80006941E31BBC7DAF7EE8873ADE3FFE30C42D +:107D90006A87D230449C407E7DEC0665A04C5872C8 +:107DA000F972FB4D58A1FB294EEDC63D7D4AE642D6 +:107DB0001AB2D3A9C4B574A8D41A5714864184F250 +:107DC0009EE565132DD9AAED998547E9C3B105D97B +:107DD000549A41060153810333725FD6B4DBDD5AF6 +:107DE00013FABABE92EB9C458BA40969CC02DF97CB +:107DF00009744849CBD793E943538A81E482845478 +:107E0000E1E61711799304E86D9E9127A20A457661 +:107E1000F0726832A1B61568DEBC93DFDA8F5A368D +:107E2000CFA9CEE28BDF1DB7106CFFA3800C96A20A +:107E30001A1DE8B3F1F2490A0157B37B639E4C3B2C +:107E4000260F4AA4567BDA643B0C4A300CB6C8496C +:107E500019679D82660C340C8B9722E831B18888B3 +:107E60007FCBB094F3745A2952670B3FF598B7C48F +:107E70008780F0CD28A852759E5002B2561BC06B69 +:107E80005E88C2208FE3BCB95F7B67AF720117E7E2 +:107E9000DA985C949B42F801C1BCCF1EE3C8DBB505 +:107EA000C08F60C13685DF9DF84F9120B0C2C327D7 +:107EB0008D16B9A292A20F5FF8813C75C7CA4DE03A +:107EC0004ACF1D0540887B38FB9C4D4E97D1F489E5 +:107ED00024463495591159040EFACD7767C696F2A7 +:107EE0006DCD8B7E2650C8BE1C0FA01D3624593B7D +:107EF00080A93F4A0B0A1B45118864CF1C564A666D +:107F00000AF852648C094F03A58E3F062825AD67F9 +:107F10005FFC98E693472DA45F532F4035569B1581 +:107F2000CBE62CEB15CC69129631ED9FA67EC5B53C +:107F3000819C31165FE76D42A0FCCE3EFD627272FD +:107F40006113529FA9E86C9D81B7F8D2A3209823B2 +:107F5000A9FAE061701768793C60C7B8AB8531C198 +:107F60007D1823FF5CCE08D573DCA0F47839926BC2 +:107F70006A7D5C7E9CFBA4E9567F4AC9CA8606647A +:107F8000842AB72A54671C796E98F107E09D383C23 +:107F900091111ADB96646E40261D086D5AC783B096 +:107FA0003C295092E8E181AC0B404CF971F3CA6571 +:107FB00047AAE45B2AA50D839FFE252853FD49EDC2 +:107FC000675F1817D529BB62939C71C3561F068C37 +:107FD000E05C5894BF475CC1E542533FA57B3EFF40 +:107FE0005178B32B9AEFE00C6824F6E3469103CB6B +:107FF000DBB7554E7BBC1970FC44402D60271F1920 +:10800000EB694EAB6B39B6EBD398B9606AED47A418 +:10801000D6195E93C8E3FA7BA1523EBE41A21FC2AD +:10802000845C7F46B4D7146886E3717EFEEFCE850C +:108030005F353673199763F9242AE7989E4FBEEA95 +:10804000489EAB069ECB11EC889BFE1B25284A411F +:108050009FFB35DB1EF8BC75076A66ADBF4CE92F88 +:108060001F677C67384A15EC71CE0F0261EC2B1E3E +:108070003A30A54D35CBB4D36DC99016516E13C4AB +:1080800001CD06B975FA2DAA2FABE9989FDFC8C1BB +:108090001467BD7D109102D379B3E6428882342BF8 +:1080A000C3FD0038FEAC878A22A1E6EA9F4562FC48 +:1080B0005018634956D4D0D413EE6C98B2FCEC69D6 +:1080C000861F29B7D9F2C4F50F48CE6F5693F00F2B +:1080D000C258D5CF2AA8272EF537B7E7DB18F5ED1C +:1080E000ABECC75847D971578C8F1EDC1D5DE10E74 +:1080F00012610943172070CC7BF38CF5A99F2421D2 +:10810000F2618436CCFC5FF5AA4A80FBA211A085FF +:108110006219E213E214BE7384F4F2B62558F759DB +:10812000CC002A014CC2D914CDCBEF8FDD00ED6D10 +:108130005AAD888895D793C0C00ADD30AFC24E13C0 +:108140003F3ECE15A48D68908EC78128CD93E66AF8 +:108150005B906D9B690CAA52F0DA935912C16E596B +:10816000F1ED542669F44D75A9DD344E58477BBDB9 +:10817000D7E48739C5F0ABE5C66464EAB47EF65C43 +:10818000493DBCBFB963F135EEC45159DF74BAAF94 +:10819000A243C829E6363CD0D418FD010D03C35EC6 +:1081A0007AE6C65EE1B8104CF7CA1C8AB370EBC61B +:1081B000E0508851E62A9B868694B53A7960B1A250 +:1081C000174C7402030C9FCEBAFC6D877029F3FA2A +:1081D000DBAB552F7CB8F2C2412C82F96403C90194 +:1081E00035DF14AD9A0B61D62BDE1F3523C0D3804B +:1081F0004C991454846C9FBAEF1B58C86B45078484 +:10820000D4E2BE5AD84B2EC9E35C200DBF1B839B22 +:108210009AFFA012371B73AFD94E549835F91D6AD7 +:10822000A93DBD0884DAB722635DDB2D5B9F529FB9 +:1082300099C981ABBD5B064E1C5DD0B7A8B2F7589B +:1082400004FD717F0E5FA117E461F289085AA2F75D +:1082500079C2C36C8E497828E4EF4826CB03278681 +:108260005480AEEE6F83C95AF8008B19ABFA358A89 +:10827000F58A2E0B3E9E2E3C4EEC9A104C09D56A88 +:10828000C0443B1B9569E4193D569BE5B1D8AFBE90 +:10829000E2C29E5E180EFF243BAE9FA0783AEE72BB +:1082A000622708FC33CA58E66987387FCBD7047E3B +:1082B000B89B6D15F9C3767C4F470B6789AD548821 +:1082C00099166D1A8EF7E77608095346C69668F236 +:1082D00092771878F88F9267BA95A57C3F56E1217E +:1082E000631C2D43280C780549290145CF82631171 +:1082F00018421B384C7D5CF21F8A1F9A709EC01377 +:10830000E0B2459B85578D9EB8A504D7F90208EFCA +:1083100038FDA0877E3F181C39371BDF221F86528D +:10832000FB68467B0EAFF31D8F30921E02CAF068C9 +:10833000B79654D4BF3CD03E22FC5B83CF1135545A +:108340005FDCBFF0A5BE2939285D7A9D5789C7B982 +:1083500040A2579B7FB1D43441002EBEDB1A15A436 +:108360003CD08650A89E9E1B67B143589AD9A386DD +:1083700084159BB7BB461AAC609CE60D90DB274288 +:108380000251C73E68529C2B2A80BC8BAB886F6F12 +:10839000D165D831FCF7029492652803F82786D17D +:1083A0006192381EFF1A18672F667714034732B997 +:1083B0009D5A7A77E6D5FE834B5FA521561890CB60 +:1083C00069AE44AD33E77909A9E8FCF69E3905E9C1 +:1083D000923F6A8511C45209F6A5A8CD148E39E3DF +:1083E000E8F892207A91BF4816065B80E65E6FBF80 +:1083F00066F424ED22B759D06D5117842FF6DDE8CD +:108400000E251D15853420981A971490A9139A30BB +:10841000F6714CEA150915347E823D42BBEB41F6FC +:10842000F8C733C057CDEE628C830983C71CF34B6A +:10843000F919B6D0AAC175CAF3015250E7FD475FDA +:10844000D5F3A16C10AA542D31E2DA156C6D876753 +:108450007855A49BB8C94694A585F20D83E5BE9CCA +:1084600066DFCFE2790ACC47458BC1D4E97C45A8C9 +:10847000433D5F56154D4DB434720D4D0ECF3FF751 +:1084800041C6B5D44BDF744266374F846BF7CC20BE +:10849000712CAF13D342E86A9FA11905DBE74AA10B +:1084A000AD37B9D2C02A914EA716499D25DD90C39C +:1084B00035EE287FD87E20F02C5D8A88043AFCD3E4 +:1084C00038C36403A4A648047CAF2C0A0C2143D211 +:1084D000E2F84CDB6AAB7BD2FC95B1A449B2B34164 +:1084E00012A354FEFF56D77C17928B4F78D5C6EF58 +:1084F000D781D805534756B884213BAC96781533BD +:108500003FA63FEDAEC42F2549786D2B67C9128871 +:10851000A254C0AAA80DC7BA0E3783F9B13598C1C5 +:108520004AA85F4E805A1A073A930A1FC460B3E8FC +:10853000CD0D2BC4A7DFFE946C43F93807BD9A41DB +:1085400008B764D1F228BA15007F6508C12EEDF492 +:1085500054C43A6ED270F40016F7257B1BCD7A68AE +:108560009AC9E4681212CF5C42FD9398B441EC0DB5 +:10857000B1E235768492E3C2419E842CF71855D33C +:10858000187C84EF2A090109A463C614EA943A5CB2 +:10859000BCF38166F97A9BF5F55255F481DB70D610 +:1085A0005F5605DB37A189909F4488D0AE9B64FF5E +:1085B000D2E486563E44180DC86EBAA286F79922B8 +:1085C000A11E7573A1B36D16B8907A9EF2008D66E8 +:1085D00018252A0EB678C8CAA17CDF402C2A383369 +:1085E000B16D5EE5E6AFF8D8D049783B9EC218176A +:1085F000D795AD4E0624B0D92AD530A8C90E6E66DF +:1086000039BA4B1BAC34521DA98D3DF65CC6BDE199 +:10861000E14E474F50DAF919C458E3CFF26710CF53 +:1086200064A24B4E946C0B92CF192565F68D8ED6B5 +:1086300096EEED534E5B852B2616FFA9E158601888 +:10864000BF92348A0435EC0765094976A5A9078AE3 +:108650009709149BE42245DE7A7B531BDECBA67878 +:108660000E91B59B96AFF90A8995122CD14172A94A +:1086700020C86F2467B7F9D8775D162F0A2818F934 +:1086800009C8F13C0ABC1F85CDB7086023FC0E3F2A +:108690000E6BF6E1780C3194B701C572AAE726D5C6 +:1086A000EBCBEE63FCAB5FFF10C9F810E03C774208 +:1086B0002E266C0D60F605AA829618B2392C58AB9E +:1086C00038AC17E5516667CADAB142D49E0421641A +:1086D0004318DBF350FAA69F585E260523C3837A1E +:1086E00026954304CCA3DAE45B52BD4193BB94B11D +:1086F0005F71C8813966670242CD800463F7EE83FB +:10870000E8ABFB1093E3264D8B87A397574170C3CB +:1087100059BD47EA8674ECBB250395D28BD8886B8C +:108720008461993166BDDA5C3C8C8518008D94912A +:10873000287AD407199C94C994A62944BBAA69A392 +:10874000C91B36FC5801E1B6C5C0E2EAC485E76B37 +:108750003CB50579A5CDEA50526716E4E3900D9734 +:1087600067763002D248CAFDBA5B38457D424BF885 +:10877000523E8DB5F74683879B7E246705708054F3 +:10878000701A8CD0E0B3C003B75814E3E4CD2D10B9 +:108790006441F03C84184316CB7685BCA8A765CF0E +:1087A000A771162488A2C3CC27A8FF8AC512D5C2F8 +:1087B0007EDB5CF35F216B7C16E56E6CC57A79B06D +:1087C000C7F2E4D76FA8E440171CE3E4F8AEEA0769 +:1087D000F1DBB360C34A2D57618C51BA1362EE7856 +:1087E000161DC7C51DD62A892456DF7B1EA7DFFFAD +:1087F00081D2A51DECCFCE7AFA87057F0E9846BEB2 +:1088000051DC1B32F2246D71B807328C9C4688AF64 +:10881000D5106412A570B2370F1ADDD8B2A56E73E9 +:10882000DE16508890BD414E7066AEBF352753F8B6 +:108830002EA3AD042A95ED94C441C046802FABBE53 +:10884000163F5C58B98ABCEAE8D6F9E62150E55DE6 +:108850003C39A830219CF196A581C9E1480D0C6DE9 +:1088600013472B729FD9FB97F2B8FDCA5CEEE9A6BD +:10887000FC71687ED9F6B7CBC74E78F4A7A885708F +:1088800084CE7760196AE13F3D71BCE9AC1ADE899C +:10889000726BFE6A513AA4EFA3FC684BF6C278F300 +:1088A000BF98C1B81DCE939764B0B5D1AD437932AE +:1088B000A15D5014BD4ACE34D153F5697639F278B2 +:1088C000B07793753A8B62D23B56C9CAA1464CAD7C +:1088D0006AFAA1B69566D01180723E71E752F8C46B +:1088E000B34316FBA22BE98145D003CA6FD2698E30 +:1088F0007C3DA66B7ECF23D8178DE139EAB749DDE1 +:10890000FCA816EFCBCDCBAA250F256DEC2BE65E90 +:1089100070679C40A70446399FFB394FB4981D2EC1 +:10892000627B3B7C6C0BE20E3524AF5DFF976512DA +:10893000B1C9BB7D218D5C5596CCBBC1E46FC64FE0 +:10894000ED516F2686442976BD4F3C1D3ABF1CE38E +:10895000125F5C2716B93FE2E3575EE252716ACBC1 +:10896000690750B4FDE12BC9F3E93250F299D1BD4A +:108970009563C0CEA862DFD4AA75E7B3A8DEB67649 +:108980004600CB7B821859E66B37F5D7F345101BB1 +:1089900004C5C6DB813A4E22C7581A01872135DC4F +:1089A00028DB55275D30EC06303E996ACF9BC582A7 +:1089B0009760A02FEB1D339685A7A7BB3C6A152BAC +:1089C000C96AD8857483D35BB93DD4214A21A2AC4E +:1089D0001799F1C45758ACBE35F5041ACAA8568C7D +:1089E000BB2411243F5DA8C97A1E414DF57BD36E8F +:1089F0000AD857C69D4AD7C3C28948E6ED1BB52D94 +:108A00009B673E20991E3A255FDEC548BADBC151FF +:108A10009695803361D5D44B781D4A94D042038318 +:108A2000343D4253650008CFAFAB7FBF75B2BDE99F +:108A30005A5D1B169556005C7DC6AB51CA72344018 +:108A4000C006DDC922B42304AC13E73412D148AE0A +:108A5000DA0627C60117023BA0C07B3D2EC10AA043 +:108A6000CEEBB59F1081A9F77679A515834B2FE43E +:108A7000D445E8F3DCA236243716AA2B0EEF7B642C +:108A8000079C0DF8B5F153FDC7B6CE943D48B08EA6 +:108A9000E917ED2B406A8C9E31317D6A67CFB72292 +:108AA00071B3FA186C0B494F93C0977DF942502E61 +:108AB000C6BCC3CFFB10B6E9BFF25206EBA5CC3063 +:108AC0008780150FF1011E0ACC3A13E2F3E6D6C3F4 +:108AD000BFAAFF9E4AF2BDAA1F2AC6D0452CBA6380 +:108AE000229A4A58A40F234E5646EB4A10F398E3B5 +:108AF000E862A4DF1E1AF7C79CCDD5FA2B9B61D57F +:108B0000DABA492CC8945AEE9B4CC03A7888025085 +:108B100041E4C0E152C8602FA370E451CAC39FD0A2 +:108B200067D0EBD5A1F98DA733FB1F867BB3DD9111 +:108B30008550AB547B4D688FBC3172D25AC5825A76 +:108B4000F80F16F18A754008C28B242A2956396518 +:108B5000D019EF00D08FB027F09DF1EC31BE6CDF63 +:108B60005CE2E385FA310CD8D716FB9ED559DC912F +:108B70008481C624E6BDB3F4874F98937DB204592F +:108B8000B03EAE9EBCBD77DBF531CAFE9D38BB4B17 +:108B9000BE6D87F560CC3457813A8ACE3204047BAF +:108BA0006A888D9095A07109DBC4870C7AF8FA92D7 +:108BB000DE216A1BEF118DFC68A39B58C01CBA61B3 +:108BC00076155937D850B7FABEABA4FC3B1897D1ED +:108BD000BF9A64F8B7DD9C4E82D481F22222D89FDE +:108BE00096D6B1655967131F96DB971D307754C22F +:108BF0008C23D9236DB2C16732A30233BEB3F15FB8 +:108C0000B59743507EAFF0A21385AD3B87EEEEC51E +:108C10004416E52106CA281F36E40FED812DEEDF4C +:108C2000510B1994C1D6363579F85EA275675D3C53 +:108C30005C4474A9B7DAAD9E8024B082929B9DBC3F +:108C4000FC1DF175C1811DB09D641EA3DEF2C7132A +:108C50006F41C2490DCB1A41E84C05BFA934751DBF +:108C600081321666303A5C46B8DBFA12812ED75B49 +:108C700067F97B78A1B175CE84D2CF21F01C5C87D7 +:108C8000E31953FAFFE87BFE631CFACFD64FD100FD +:108C9000358488AF23FEA5F27B77E3240540A08EC0 +:108CA000AA6262C0AC0ABF66EF3D989B53AE14CF78 +:108CB00012B6C2AD82BFE33B2EB376366A6788DC5C +:108CC00019D2D703DBAEE553CBAF7F1F4C939E8BFE +:108CD000A97D7EDCA9CDA0F3AC90A494D302F75B70 +:108CE0003133D208B5460B217D8C2E7E0495F88950 +:108CF0005C5039DE681AF0D3E645397EDCEA1FEEB7 +:108D0000ED141480AF58D8474F4D1F7A6DAC913E8B +:108D1000579624136B971A23DF6F4BA6C36C33F45B +:108D2000B03ECF0823A88E64A2A921016A95D4126F +:108D3000AF7BD7A008293B5F9E77689FE8B4950179 +:108D400038F2EF6AAFC3E465C794FD85DD38A0CE85 +:108D500053978E78F839016AA80921AAA65F5F1B8C +:108D60003775DF5CB588BA810EABAD25137E2F0B4E +:108D70003CB3041458F810FF73EC0CBAB65A118DBA +:108D8000EE757D1B457220E5EE3E5A2EC3561B192B +:108D9000B600762098F512524860834B0F521F9D03 +:108DA000CA9E2B506A6B9DBAE465BAC8E11C3B5A57 +:108DB000087455AD3C8280A9BDD0000EE0443062FD +:108DC000E4B45F5C05F674343C7E229889AEF1769B +:108DD0002CE0176B52C1DC001B47C535B409357E4A +:108DE000CDE5C5FD5E0075CCDFFE4E37F6D3CF0B6B +:108DF0008976B506A8A8AA3FCD01F1A43DC51849BA +:108E0000CF691F54A019C2D4A7B89638DD7C498811 +:108E1000DB1B368CF0BA474762DE6BEF9DFE27CF37 +:108E2000897A7852B84B528DA051536D43D2890E36 +:108E30008D7155C75CB834E0FDA238F667F72FABEB +:108E400062310C7F6EB31E01BB58337C7261F1E05E +:108E50006FE3A424330AD27774D26247540033D923 +:108E60004CFB419EF7FDA390B06343D8B4474A0B37 +:108E7000618B7651D6C5AFE425FF81745E9DC283B8 +:108E80004BE5ADA2F6FB0836AC2655BB64C7B91757 +:108E90005BBD040A8CAA2F602EADAA4FB87F6D006F +:108EA00032099006E97C1D075273F8BDB815E68CAF +:108EB000D1FBA212419E4EA0C002FA1DE906772006 +:108EC0003355AB093BC3332F5C1ABE3CF5F4E39C2E +:108ED00027ED3A6D63A46F57B840706B1BD175D105 +:108EE000B15035D6A471A10F2CC83FD50BBDD5CE3E +:108EF000017EF4FF8E5DD16E79B9E0EB978B13554F +:108F0000DF4AB07C0E8354FE41B8C3CF5403A8752A +:108F100078F94CEEADEE4F5EDF7FECCD5412970F3B +:108F20002171BE87C51E5C56C42EF3C9C10260CE36 +:108F3000674505A0867A6303CD94835DB1BEA79E85 +:108F400057926DA359401616CB5D72C1A407314BE1 +:108F5000F3ECE42D28373F518C9BDD859F26BF061F +:108F60006A6170D512AE07C5A924365B58D193BA91 +:108F7000985F1367DF9C1168DB480EFD2A523B881F +:108F8000A8DEDAB3952AAC223442BC17BD9E8B68AA +:108F9000973FEC64C701C89495F7A4364CCF101DD9 +:108FA0008E0E29B13CD690EAF7B683835606A29876 +:108FB000C96EB1C8F4FC87A0C8958A8953FBF542F5 +:108FC0007DAB43416414BA7289846BD748509F319A +:108FD000E26A0E12078FBB38B5B240D28C71405096 +:108FE000A0C83AB9D7B617D6521B501D424DA44D52 +:108FF0008AB58215C9603CE359DE09B30CEA62FD0B +:109000001A1A2409695FC7D24166D6A56A5C75BC85 +:1090100037DE57267390ABC1453648C8D18B03A0C5 +:10902000A9FA56D524EAA8E65C7AD8F56C86B60289 +:109030009612E99D718CCDED024E4D87E88E7A2017 +:10904000F1936D9DA7BD41EC4A5E58014B76204DD2 +:10905000AD424A1F2BD654D7D46B8BCF3460523AD3 +:10906000E1325EFB922D0EC53B95AF5DB08F30A413 +:109070008C7F364E4A03E3530D7C3744ADCF5DEF12 +:10908000AC5C7C0539094F791D1B0CE0E7B72C9CC3 +:10909000EE8153BE0AFBDEDCDE8F309742E45DCF0B +:1090A0009F4CF4DF4746DE4B70703ACC1C06D0DD97 +:1090B00045106AE9BF46859BA9645EBEC4E5D899A0 +:1090C0007C5D43774E3E7FFB65D97F41BECE4DED43 +:1090D00083FA9DF6FE831B7F85DC2D64B8B94F446F +:1090E00094D1B72B37F54C1D77905D364580BCE4A5 +:1090F000B23E972E4953AF45A1F01076A07F925211 +:10910000C7F4DD23AB913DFEBCBE6882C5883C122E +:1091100042A90719FFC33590E87563F0E68C680A29 +:1091200073D9F9F74F435D6F679B08DA050058AABA +:10913000EF251D57641678E04060B55A3D6DD67A2C +:109140003BE60EB2D86A3C62FB0E0D2F956A766143 +:1091500013A2CF7867A3B069189DDAD9D04DC17634 +:10916000849C6B6DCA298D518D3DDCA208B9D10656 +:10917000F2F24285F5C254C1409D3A1F2F2878E390 +:10918000D43A94BFCACEA5C8C7B7DF746D50FE00ED +:10919000E365232028ACED7F3E545C038E4EAC6526 +:1091A000578823E8516D2F078B56A4E8EDFCC80AB9 +:1091B0007BF63739C8DF9F971D073663DE31234CB6 +:1091C000498703FC0F60B5EB4E369DBCB9988728E4 +:1091D000D67875C8ABCFF7DD2FF49093ABF2FA7168 +:1091E000B18CB4EF9E8F7FE56C3F1F84BF835AE242 +:1091F000ABC7D4A5D3CB4C8EB2F95B935273FEC8E8 +:109200009211468E6FC804C5B73A52CDA108A95233 +:10921000E0AD7C65FCEFAD876C5B0FCDBB13AD990A +:1092200021A48D1CB31C08D2485840497CADE8AB42 +:1092300023C1B49B0E25B5118D6D42385F61544436 +:1092400064184F4F54DA3C2432F2EC1569B98C6E35 +:10925000C3832D14C9C8007FF490ED071F58907583 +:109260006061E878EF59CD176FE57DC5D62AE50234 +:109270001F244927015211C57BECFBC145AC117776 +:109280005B9AD2897A37039324DAAA55D77BE8B45C +:109290006BDBE318DA569D6B7262997A98371FFC84 +:1092A0003A3641E611A160D3EA7D367D32B7AE5140 +:1092B00019C71C44C6DE05F3C0EC7D2826999169C8 +:1092C00086950088CE30DC5614AC5964080D674E84 +:1092D00041E07E98EACBF78E97583796E864383CA1 +:1092E000ABCAB674462A0E2E7268F88F5055CD8AD6 +:1092F000C6C6259F4322CC8A6E51CF9BFF5246D2D1 +:10930000FE220E024A3BD76E209E46BF0E8CE572AF +:10931000D443ECA01DFD03D703284FF4E14D81D7C2 +:10932000FC4D257A15E23999214BCB892C317B11E3 +:109330001B3122305BD875BDFDC127E887635D3BDB +:109340000F55F89B8E1A001250C2035E5A6E6B5F67 +:10935000AEFC386AD719A1AE172ED6A575BA7622FB +:10936000ADF24E15C97067FF9E93D594DF2591909D +:1093700056BAF97DDD99C2F55FA24A6F044C941E7E +:10938000CA247997CAE1C243CBF11019941059C38A +:10939000E0C4E59554E9A440AF281E0B8DD4B5BCBC +:1093A000A631C0CB9610B32518C6EA3A97B4360F4B +:1093B000F331B703881F172E2ECC9AA26F8FE6B910 +:1093C000B89944EABC80ED58CB46C12F11A971274A +:1093D0003640997D615B5ACFD808A5F849D968E62F +:1093E00056D0C7BB664B733CF4ADD7716915D15FDE +:1093F000FAE39E082CE77C47655611F38F48ABAE25 +:109400009D63F4D56D860808626300691856F7A558 +:109410002F95A41D9F53DC3109C8DFA70770EC27E7 +:10942000707C17992A7B5F82F84D4AD2BF173D594D +:1094300023FD7F80A829746506F0154FC50790EAC3 +:10944000899BE0EE2C61F73612CAB30AF3019765E7 +:10945000E71CDA12363D5AB2553CB20E597D4461D2 +:10946000542486B36D32E99E09437228221C076E8C +:10947000B28A0423A6DEE4CC4F26819977B006D0C9 +:1094800002D553B4D52036232C2443EA7B073C1F56 +:10949000C352F74B5E7FDC7616A5035D81E93B186E +:1094A000E06D4177034126C2258533B52F9E84ADFB +:1094B000DCE634CE8BCA8311E299E493343F331B4C +:1094C00097B2977C5F976787C93F632DEF97320408 +:1094D000E52671A370950445EE19036836043EEA4B +:1094E00028F77C6B3EA2312B56FFD4AC0C50B2BA9D +:1094F000C38FF79FDF20AD162EED03F808E5257822 +:109500007D0CFAC438CF8795BB8760CB2A9AE19E41 +:10951000412EAAEAEFE3BF82B3B2C2F5AC523332B6 +:109520001E000F1547F30BDD897172B0D297D5512C +:109530002557AA780B325F4FDB542E30048F3195BC +:10954000F7BC129429C82AA2326596EB4F7F7F6E32 +:109550005116F0922A05B7DB6CADDA97A85588A7AB +:109560001C0F8FC689157471E91E448DF4D67CECEE +:10957000254D7206E36BAC531F6C7D0891B59C932F +:10958000EE2715414271B4660F6F2F3CFEC1517436 +:109590002A8736308683EF5A2CFF8E0980BB4C8594 +:1095A000676FFCB8B3C02468B5DFBA522760477153 +:1095B0008C7147C0A0D9104D55B230415848E4D005 +:1095C000DF15D73D26B4ACB4978473EF2F594A2EDC +:1095D000B06E866FB575F8E893D406663B23929C0F +:1095E0007E032B59424398BBABD8B9094DB40CBB91 +:1095F00075CAC1A388F211ADE39EB9A31CC974F565 +:109600002DA4517F68A7944B84CE73C9EC251AC151 +:109610009615E90F9AF75C94B13F286CC6FD465C3D +:109620002D42765D22C6D2E5DCE09E2C17806E9539 +:109630000AEF1A55504EC9C2098178917126A122AC +:10964000CF0EA4C2C56C3C184BD139B4FF47D9F931 +:10965000F388804ACEC233BE603EE93FB735BA9D3B +:1096600057F1A6176234BA254B729AF4F744FADB25 +:10967000D0EC369DBC4A1C88B08CDBA87BC43DC0B6 +:10968000833D9DC4D79087477142D98374754AF052 +:10969000CE67BA31DC1487E076ECC7F1614261999C +:1096A0007693CAC69D83AD190AC2135A7762467E65 +:1096B000AF13A37B655D75E13FFD7C5D230D8E954A +:1096C000E7893F2AB39AC255A09BD114CF6425B92C +:1096D0005DA4DBAD96D0ACC7E4543CAD1749407BEC +:1096E00099B2418F2001E66D65E072C9C4B3D51906 +:1096F0005EB895213B194BAFD1741438754C3700C7 +:10970000A587B7EE9CE2F9AA1A9AF8A69517AE2893 +:1097100047147A9861DBBB1CBD1EDC73548C8193AB +:10972000327EEE979A4AED40BA51E39A4A19209652 +:10973000DAEB94F02523F7AD1BD597BF0D80841687 +:10974000EF17FD0D539CCC0BAB187701AA553A3996 +:10975000F02090CC74435DC945440042A7F0D43159 +:10976000B2022CB4F664CBE8FA29DF70CD3BA2FF3D +:109770005698E3FE952E892F924A00B17A1785BE3E +:109780005A7DFC2BE652A8A3AADE7AF373580D6E1D +:1097900060B20E40B70C35CC0BAE47B3FF2012576A +:1097A00006129A76F82D0632EE3B2E7D0CC164111E +:1097B000571BC854434EC6999B795D6A07D97138C7 +:1097C000C4A9B1F12E58DE3395247538D2667F478F +:1097D00097FAF831A1FF694452997A193D9B682F95 +:1097E0007D626454C5E47D7117933F96A4E9F857F0 +:1097F00002B3B57CB9BE8DA4C09571D60F94F25357 +:1098000017555EDF4DA1D5D9BBB769819AB505D390 +:10981000D92F19A0726A66B05E587BBF3AF85E0B0A +:109820002242BA8A8DE2EFD810F81617045A9B0A22 +:1098300018591FBADD61B4F517A4D5D60C731DD025 +:1098400047A8E46F9900CCA3B88FF615E0BEE54BAE +:10985000857A441B1838E2709B1CA0DBD80145B305 +:10986000576CA07120606058FA84C0BD71A0B9081F +:10987000C146246255783E83E9341BC1FF2F9F67A0 +:109880000C37F233EFC483BABE73579660460E4965 +:1098900013E039BAA95345D9923B119BFAB98474A4 +:1098A000C47D68349EEA74E19223058008A3506069 +:1098B0009415DA23A38D0BDBBAAC0896899CB0C74C +:1098C000869CAA9337788E995CB09CB1FEE0F587B0 +:1098D00044F298294D08DF773D32532239B46AAEFD +:1098E0000DA248569D00A96709115D31B36039B5D5 +:1098F00046E6609FE0138F0A1D3D2FCF908D4036C6 +:10990000A8B5B1B498625A7C44C0E18EA7656716C9 +:109910001F451FC26FFED2A49A446EDF518F90077D +:10992000F9358562AADA484ADE07F1E88333338DD8 +:10993000D4AF7897B6ADEFD58F3B7E835C0AD1610B +:109940006D1D904B10D6B58DC7C4954E18A0F86DFF +:109950000B717C6F0B3467467010B3B10B7AB82D66 +:1099600047EDE2F041540FB65DDE30121F13700276 +:109970009F44CFDD37CEF39A569E26E3F666CE6D32 +:109980006AF9EC3322176B154024183A8000B1FEB7 +:10999000263962FBF0FAFDBD9E7B35061C84FE3045 +:1099A000F2770E455AB842D24AECCB5BFD3192F9C0 +:1099B000EBCAB3CDF4A98E5D7676114EC62FEE1BA1 +:1099C0005FBB31D2760A6DC876EF7BCF66477840B1 +:1099D000A10F120A2B302D449932A4820067119EE8 +:1099E0007E5AED1F4E69A246364E84F2270DFAFBD1 +:1099F000B6F422E4C32027B1EBE373E5D93C70FA57 +:109A00000FED8EA7429B79E27E43AAB4DD88F33C3A +:109A100087DB84A56E7EF611387B6943719A333BF0 +:109A2000F88015D7BF0CD5798BF778FEA163D0D815 +:109A3000742725D96ABE4066909D19985B5B714278 +:109A4000039D5AED800164A37FDF88611694507CEA +:109A5000099C80C54B40A5683A63EF9ABD7E778B21 +:109A6000E3E4C263AB64CA1E8C589A33430E4907C1 +:109A700064CB05D739F65988AD7899718C8B8912EA +:109A800014FA24B751F140A1C31CD85B86BB2DE565 +:109A90009AD1E314644943A28E205BFE8AEA9AD6E7 +:109AA0002F323C260B8E54F1893F379FF8A10F9C33 +:109AB0005E52F617727EC78352D3A89FEE19BEFE80 +:109AC000BC1ECF3B4A4D90523EB5A01C57076C7D43 +:109AD00037D103EC931DF0A5BC59117FE5DB9F1135 +:109AE00016128070A39B3B30D8A2114639082DDD99 +:109AF000E367D0A9B8DB8464F3E998E44F5961CEF9 +:109B00004789ECEE0307E6FEDB02D1F03D0B20FDBA +:109B1000260CD6E8CE7FC2B143C8C7024564116B9C +:109B2000B7EA8668E8E170CD7E0F64AA7F76B0FB65 +:109B3000F483675CE0D099F59F43BD5E225283BDFC +:109B40002DE3EC678C227E9B6E4AA1EA70BB0FBFAF +:109B500020323258E692A38458A51048FDA367A886 +:109B6000F48A7327121718C599AE8AC039444E7704 +:109B7000E047FA81570BFF634EB9D4D39A54EE17DE +:109B8000AB1D17FA9C1250256C85EAA0878FAA910D +:109B90004091C28DE64F9C8878B19AC5D2A0796673 +:109BA000FAA2CAB055A956A78C29DAEC6208F5F7D3 +:109BB000845520C40C9363A26EEA6BC46B77556C1A +:109BC000BE7360EBF0B1CDA969D50766DEE94BC67F +:109BD000242C1B6D64EE75D05F098F9C71559A35EE +:109BE000100DE23512BB1A46F1CBED88FD6260C55F +:109BF00088C7995D69780A139DAFBC6C68FD5A8A65 +:109C00003D6F546AB9B6B0AF2BE057BCA9B618CCBB +:109C1000711D84691887D130C0A6B129AF7E39A6DD +:109C20005266F8E950C5243F3AFE49BA4A631FD646 +:109C3000AD1C1C9BD8B02EE53F2B9D3F3FB042C7CB +:109C4000183D10DDE7958BBEC67618B06FFE23F287 +:109C50002435F26E9F3F73F68870475E3A998A907A +:109C60004C1E35F1AE64EDD3E458844C546E3DB2D5 +:109C7000E1F191116E76D23D480F1413033F501F4E +:109C8000D2A4F5B603F8178D26B3D14C78E1CF33C3 +:109C9000C85F8949EF229092925F9DD0AFB0436C2C +:109CA000DF55CBA802CB44511D8EFAD43F789C548B +:109CB0002B05D2B68B1E0E59924EE6F94CEB23A122 +:109CC0003DFC4B5A45E7BC64E4F6D0B2668DC78EC6 +:109CD00080EFF8DC6ADFC4D77BCC8BB57121387F8D +:109CE0002611285093E972939E0D01A754E2367312 +:109CF00026BD59AC955097384AA0E0FBB7D28610E4 +:109D00008CB5A5569AA277085779B1670DFD4A57C9 +:109D100056010A19A2042E228662ED2A8DDDF0B0CA +:109D200002F1D128B397A9120154C85E44324F30D2 +:109D3000625D1BB08AC91AD3A2F0181E1412F61164 +:109D4000368F4370D71EBA35A48DB76AA61CED7442 +:109D5000E13022586775CA513B8F196AB5414D1BD6 +:109D60006B32E1221342D2DB5589B39C82AC38D9E5 +:109D70002BE3512318869C47996C06B62BA4BA9204 +:109D800036FBDDF8D171BA820A9BF28FA7AC89B19C +:109D90008BC8622D6B8C8D46B64268C979343FD42E +:109DA000213F04723EBCB7372ED349BDDC0EA4B5AB +:109DB000863F296E9E38C43A45640C6B715391F608 +:109DC000949B374CAD7CDC24A204C1D358C24DD146 +:109DD000AD8050AEAA62A4759A17F211E3732546BE +:109DE0002BE1717A8184598E0A821C76DD75345498 +:109DF000C2306FD642192F1B12559E300B2629F9FF +:109E0000F68AB4C9FEDA11348EDE1D3C9C7D7C37A7 +:109E1000998598F0844C1CFA343C86008530449235 +:109E200020B969D26D3D58DC6E18AF2BDD358181CC +:109E3000AFBC9389FBFB2D4B5152C6D810D8B70B42 +:109E40005C0A4EAC6A282911A83EDC38F45EAC20CE +:109E5000959D7F8C6D051EB76770CA65E82DDCEC9B +:109E600086411365FA180D850BF276C5450A98618F +:109E70006665F7F40612BF472C96A532A1F615BD0C +:109E800080904A11EE1CAB8D5A48B451529517FF81 +:109E900008FAD113B203C90BC70F2B263752B2D21F +:109EA00098007AD9D42E319FE756D15C757C394120 +:109EB00056E0089D2FE8D2FCFF9AB9BE7981114D7A +:109EC000B27D7B28059222E08C59AE378D608DA93A +:109ED000636BCB449055916A258E765C85C49B124A +:109EE000C8BA4BB021A8192CE1B9C1C0E8B4AA0482 +:109EF000A0D2033178412ABBE27F0A3F058744475D +:109F00000831A792ECC1CF06BA4BA68642CB0875A2 +:109F1000A26F2828E4CB16563677BA7224C6C47FBF +:109F200069994C44F274071EC6A4E76168D449C617 +:109F3000BB06E6CB1BA38B5309CA66CCC9A1A9B249 +:109F400084E7FCACF1D614678BE0BA787374827145 +:109F5000296CCCD3A308CB0582777CEB8F8A5A532C +:109F60009A8B7F2471C70F00A2F36B06BCBFFC3134 +:109F7000AE75FA668A20AC18CBDDC69B38C6ED5D9F +:109F8000F78AAD30920BE3CA88619BFC933C069A3A +:109F9000763DF404A77C443170F6C6965494B12CF7 +:109FA000C733D0FB81B3DFC8042F9A497DB5768CC7 +:109FB0002B5D1ECEBA3D8BD19FDF36785921565688 +:109FC0007089291B6148967459225C30DF5D16B494 +:109FD00000D6ECF9E76A881244A3001DE552A37A83 +:109FE000FFC61E7B21ECC778A3C4B16F65604C76B9 +:109FF000C599DCDA21BE5ABA9B07BAC9755FFF065C +:10A00000AF4710BCA44672C460346B8B147D47AA62 +:10A01000D3401D77AE139D984235B378A55329EAF6 +:10A02000908FB58337F5E6794D1AFA632DB3392E43 +:10A03000DDC0F913681F584EF9C0AB8D9961B4A407 +:10A0400049AAE7B0E5B3181F668658A04FCAA133E6 +:10A050007AA906F1CFF757AFDEFB2B6B40FE579482 +:10A06000DCF0B53EDFBA092B6221331FBF6D0C2136 +:10A070000ACD2EDD4AFB6A8F17FFA3A6ECCCE1C305 +:10A08000DA218E8622564277D6A1B4C231F6233425 +:10A090008A38B9AA055C8F4D933EE58D860B878B78 +:10A0A000B6CCECDD399C9B206EBD5EE46B91B33881 +:10A0B00056D4A99C9D9AD7CF8AE05A75DA9C6B6DCD +:10A0C000ED91B93C68940C3188EAB410959C1D3E22 +:10A0D00073EF9E56484DDE4A88C0BEF745DB886A5E +:10A0E00050B39D33EB1F38881588B55A489E9C9F06 +:10A0F000BEBF811C27448B0E7BCA018CD964732898 +:10A10000824B83B443EF4E4CA28E9EC3A8AD71AB7D +:10A1100045704B99176A4169E7A9C0AB846556A39E +:10A120008C7D77C60D567DE4FEDFEFC5E47FFC191C +:10A1300074CCA9914A0BD7F550956057B3B3DF7330 +:10A14000CCA71DAAC7AABBD609B3618521380D5873 +:10A150006A93984AF7F82C9099F7CD12559C1AB645 +:10A160001CC87B93FD05745695365938FFF080283E +:10A17000A24B9B3F560E33B8105A3286593649E9E6 +:10A18000732CF94EEB308DD75098172E6F06974AE7 +:10A190003F2457CF64E4BBEAD15C34CD94BA481A6B +:10A1A000CC1FEB5ABF66D5168CCD07E039F8874D2A +:10A1B000AD85831626729C4F4CE75202B40884ABDF +:10A1C000E56FA90FB530111B27A6696CCBF2CB86C2 +:10A1D0002468DE03DCD506D48ED45C13BC38CB9265 +:10A1E00073123FF4D9F93D28EF4F5187F743602FA1 +:10A1F000529E4E1E14C1D7602CEFF1257C9185B57F +:10A20000C9051A0A380B044EE73F4700F66A46466E +:10A21000FC5242D08BD949C288263C206B7CD1A30A +:10A22000CEF6E84602D2CE1D8408B67AF58E91822B +:10A23000DCD72D0C153B8D7F6CCEF76A37C3AE0B88 +:10A24000ED10C74A066059B759AF7E80FFB90903C0 +:10A250002141D97E970BBA68C64AD715356A70CDA9 +:10A26000CD626018B6E57E7F72796A0A73C367179C +:10A27000C67FF26F8A8680A95273B3D5591489D9E3 +:10A28000F582EC5A8495BBCA450E2324E7F0776229 +:10A29000CBB4838A232345917F3D78B7BCEB9514DB +:10A2A000C8B200676F68017D32C003EE031CFAB4C8 +:10A2B000FD6BB500F4A353324493F9A5AD601007CC +:10A2C000840F0D1BD87CDF3CF8C35B850E1F2777FE +:10A2D0000F2655798D744861C1EFF678DD3DBBCD11 +:10A2E0003F7A54C7FF94FD09B6C5B0E84A7A871093 +:10A2F000080ABCC36977686A7BE001D87CE26A69B6 +:10A30000858E83481BEE97E38F8C49A78252DF7BB3 +:10A310008A139D391BE68A11A7A23A30175351546C +:10A320000BE7764EA29FB8D52CCE4C0C3EE1E6E66C +:10A33000DDA070990127FA49B81AD59D8FFE5BA060 +:10A34000B9035E5C660F63A158D9408A3DFA02F2F8 +:10A350004355B76DC0BFE584EF70B9B32AA14F6A0A +:10A36000AF6B50EBE6E3B6F720AD57FD719A1C7466 +:10A37000BF9602E24ED465BC01F8532C634787F7C1 +:10A38000BA6D0DD97B96E3E32C935E65D6979A144C +:10A39000226545EBAF41946D34622CF237C11F7BCF +:10A3A000B2BA7C078BDAD3E60D3BC8CD6BF520C083 +:10A3B000AD133CAA2B4771B3E15AB01C3886E6F0C6 +:10A3C00051A336A9D40FE9B857D1A8C9BBB328E324 +:10A3D00056F7240C3D10D6C908A0B1ABA290BCA47E +:10A3E00050181A9A1E71A962F7E750DA50634FBFEE +:10A3F0004D198FC13CB100BD7B2734EFA47C822B6B +:10A40000049B9854C46B1BDDE3D96F9D5C681630C8 +:10A41000FB97BFE5907B300158128E9152E3830386 +:10A420007CB834951F9EC993CFEDA612F7DBB92AED +:10A43000004F05EB6B38555B52F6773CCD8FE0262D +:10A440001EE5EED5C92B3CEA742E18E97736D5F90E +:10A450002E61CE264F8E5BCEFACE4EB9867BBC8463 +:10A46000AD1ED59FE16E82D676B733E0A41A237471 +:10A470006B4B527144933E3C5964BFB8E373A19453 +:10A480007BA39A722FE8BFAD2D88130084439228D6 +:10A49000B590EE3B9F68FD54C2D9993892DC85A0F7 +:10A4A000B078A20904EB0D10CF795FF668A0F5A291 +:10A4B00057650C67A15295271795AE6D5B0AF29010 +:10A4C000C5E79168915033323AE19E6408377BD1F9 +:10A4D000014609C4A941D36624DB1E713C19C8A9F1 +:10A4E0002E6722C519CAB6919129232FEDF1930E3B +:10A4F00088BB54F8C982855CA858FA77791037D799 +:10A5000049B5289A063BD23D37591C42EB9D03952D +:10A51000EEB4DDD7930F0A10A728DDE77CB1F8AFC2 +:10A52000A0D6BAEEFA0BF7F09A501E7132BC26860E +:10A530009FAAE6CF6257432616360105E2749E8035 +:10A540006506E1BB9BC7B7A596D25CD5B42EF7755F +:10A55000F69D84E0E1CA378EFA3675245F44CE7AE0 +:10A560008E0FE8318163F08B483CF1F2FB305D17D0 +:10A5700062A50C768A3CB300A8126A62D0656F7639 +:10A580007357EB436A0CBF77977D1ED2DE3CCF3CFE +:10A590004FC2F7287B1F20E4A73700BDA2A1E5C367 +:10A5A0008EF883E2822739E2CC72CCB8239F089DD3 +:10A5B0003317869DB595EA9F0037DFA7BE28A7AC65 +:10A5C0001E535AF162A5B444DDB41258065E7D698B +:10A5D0004D327E2BF70647F1C78363469404284A21 +:10A5E000C93C4DD1C91578B0F293328236647ACE27 +:10A5F000DCE4C90AE2297BBAD49EFE2DA3B8EBF4B1 +:10A600004140BA3A836F411269244DE81108D2B231 +:10A610005EB30A1FD5F85D41AD0B3A300B185823D5 +:10A62000699E162BB7F42EBFD3F695C50A67331172 +:10A63000914EEFE2FFBB06AEBD4F5201746137266B +:10A64000DDED568CC9756C7A02CF7289FD846C99E8 +:10A65000500E6DD332A4634CD67E2C599B5A07AC56 +:10A660006B27533796F32B5291448858E04676F483 +:10A670008F7D2FF81E733BE1FC400350E626707F70 +:10A68000FB71C1B1F820E1F876AE8C49CA300F20D9 +:10A690002CCCE0330EBDCF4FBC34BD7A6AD3EB7304 +:10A6A000FC0B84E86E504DF8A71595E375DD582630 +:10A6B00037BCBED2D7FF04ED891CC548BE793944EA +:10A6C000507B5414F12BE3DEFD6A752D1965000AE9 +:10A6D0002405F4579E6E33462A2E33821AE38A26C7 +:10A6E000003B5F66E6D5D22F851F9A2E1261D628D1 +:10A6F000AB636FB44022E6C69BF8534F0D435A51EB +:10A7000024E9772FD1333FEAA063941332B4D912EE +:10A71000B8BDBEC8878A70E13A2B553ECAB2C7257C +:10A7200092AFEB20BB8D75A16DF5A56137FABE1810 +:10A7300029BE2510EBE2428704175111EBF0AB550F +:10A74000410FA244A3BA6068995BE5D8D7649F071C +:10A750000EE77EB3E47F1ABBA3855904F1FBA50F76 +:10A76000226A785C74F38428C45BD37064C0ADF350 +:10A77000193E7A4087530ED5A2FBA3BF96FF4B220A +:10A7800012A87706224AA7A09B3145F4444B925267 +:10A79000C911CC56115C0DA00098F8A81E8F762B1D +:10A7A000B9A265D2B416499D207FE4D03C3481C85B +:10A7B000A9DB86EDDEC702E95E02CFF080B1CEE60E +:10A7C000CC76166F249E2E0A369F28D59156B6EA6F +:10A7D000E8EF2CFAD6A779AD817D00A0D5BD54074E +:10A7E000D15F24A566E661DD835F8E4CE0E4A0C303 +:10A7F000310A2D74EB145A3D24AFC4A360BB39A1B8 +:10A80000D2EC1894C9B0738BF5FADFF976AE2883D1 +:10A810009AFD66B19A4D47FF3B44B8BD8215CA798F +:10A8200042ACF4CBDF18254CD5A333132425ABC29F +:10A83000FF2385A258CA19FE29B8435E1EB80E4CE4 +:10A840002B2D5ED66443D3681A4D02022985BD8E36 +:10A850005146AACAF1AAD56D1D779442DBE4920550 +:10A860000B1AB439C69258D9DDEEFC0A7F0044E8D1 +:10A87000D9ABB6FBAA1F49E3A1A9245708033DD8C9 +:10A88000792A239F01ABBDE30C73DCBCCD0632A556 +:10A89000E44E2C2735345EAA6ADAF3AAA9EAFADF75 +:10A8A0000EEC9E0C94EF3D6EA979CC6A91667055C2 +:10A8B000E35D78B5D883B0741F0A14B46B1AB41270 +:10A8C000204649627FD157EBC7CB2C6D663C04EC28 +:10A8D0001AB66586EE863D4583013D457F4DAAA5A6 +:10A8E000E3BAC87C3A592D965CDF8BAB10B686ACC8 +:10A8F00096BE6AB09D4764F0A70749A35442851AE3 +:10A900007A42CF3F3955608A89245CCD1B838647C4 +:10A91000ACA3E2F32B618907BBB7A4B2EEB98FEB0E +:10A9200099CE062C8B9748DA1BE76F4E2FF6638380 +:10A9300051774003575A761923EE6CC91D6E1EA33A +:10A94000688699457090323DA8763D1342BBC77D1D +:10A9500020FAF618D5FFB548ACC4A4A1AC158BF607 +:10A96000ACDC4509DA934D13255643EF83E403032A +:10A970004AC17AE98B8594779067F8C034A9B42FDF +:10A98000B201D1664F32779F874EAE251C92E749C0 +:10A990009D8A33B024151DFB262AEA4D2B1E4094B8 +:10A9A0002F55845BBEA7B0BFAA77BF05F42F6C48B4 +:10A9B0005416B554A6B068943DD6414B704D611104 +:10A9C00082F84B934C1AE1726530491ED69ACDE459 +:10A9D00080FB4049CA64B82D023B9063521E657EDD +:10A9E000BB7455F703FBDD6C58606D74AE3FB4511A +:10A9F0009BE640AA293843AA8BF6EBA3C46C9E229F +:10AA0000B278C085FA37161DFF78E72DAD99EF8033 +:10AA100039D0EFCFEBC05D04C05A91413722EA3400 +:10AA2000B0DA8E353D4FE5AF4C8614EAFD34DAFCE2 +:10AA30001A688B235D96743955426F8C4F50ECD455 +:10AA40004064FC1DC05C81B5E6584352153F787CDC +:10AA5000F6E9AA71BA6807042137D1C134DBFE04D4 +:10AA6000B6F2971FFC1681531AFE1CCDB8C70ACA4E +:10AA70002AD13DCCE16F897EDD210B96F9257AAA9A +:10AA8000875FF47A5D45C0A9D9FC2CF48A25061BA2 +:10AA90000341BA7D6496185A11566A5CEC1B99857D +:10AAA00058209DA0A7DB908E36F49A6E463DB79F46 +:10AAB000558FEE9C6CE9821D87C2143E48EEF04B28 +:10AAC0004118EF0A0C0533148EFB3A31A919594E7F +:10AAD000213EDE8C4A839DEF89832B4D138DCD5112 +:10AAE0002E365D5637FBFF739D9EFDD9BD9FBD077A +:10AAF000297D9493657DCD5EE82660A7AF01FB3A82 +:10AB000087C57BFCD105DA76E9ACF4C35AE2961F1F +:10AB1000329A73EFA19CA7C305839DF048C1D33C33 +:10AB2000DB51BD4819C445E2EDC25DEBEEAC5724E4 +:10AB3000C4479D9773DCE520645B66CE21B9EEBE09 +:10AB40009CA532765702BC732ADA8A37D09D636699 +:10AB5000F055CEF7B111DAB58799D8F85BE2B56D4B +:10AB6000A1A0B642468BCC79BEB3CB0D982FFE9AEE +:10AB7000764C94CBBC0BA5CEBF08EC3E1097C040E2 +:10AB8000F963497B96B93587D45077D4B898106665 +:10AB900020CBFCCB2C4BD945E3B33CFFCC445CB77A +:10ABA00086A783C48E184B0BD8BDE6EDA419A86BFD +:10ABB000DEAAF330B04272F62342C8C20D453F31DF +:10ABC00048D3BDB09F61BF28A1977D8B1A38CEF0C6 +:10ABD0006A443701CB4CA33460BB44A02DEAC51DA9 +:10ABE00001BD5D2418668F13AE25D2A508F9E43D9A +:10ABF000033180E8F744E56D890F5136B86BE6DD27 +:10AC000099CC9B249CEA3031266037F78008F9A361 +:10AC1000D558D4269D2CE2AF5BA9D7E0FBD215B165 +:10AC20002F6389400919B8249B2400778D740D5037 +:10AC3000B83167C5639ECBFE1211D2C1730C06CC2E +:10AC4000FDCE637EEAA7F3462839036CFED51D329C +:10AC50000BBAF9DF8C391D128CA9969A96CC17473E +:10AC6000F966BB9603CFA56C23499FF802FF20939A +:10AC70005678EB3205C7ADACC4121ED107E8A992D5 +:10AC80007709EAEFDA0910AD0743B4FC43FE0AE3A3 +:10AC9000907FCBF33C81704F854B10BF99872995EE +:10ACA0000C189FE0CFC4C904DC082C4A0E1C7FD8C6 +:10ACB000D6F08BAE8BEF5D9438151BA18CB3D5E429 +:10ACC00009C95F0BB2C80086D8697CDDFD61FFC38E +:10ACD000CF3F7490EE2A8C201C855DCA9937A568F9 +:10ACE000BF5F8ACE62155E9B27367EF7C4CAF09E90 +:10ACF000EC1A5C3246524ACD365F33E207173869A8 +:10AD0000AA54F87231719ED9C8C1F7EF9B228414FE +:10AD1000C5411E8D08C8BC40409240EF7F1C812475 +:10AD2000670D737B9872552DB20A64D9904E4CAF63 +:10AD30006AFA53753305D9EFF3370738C9AE4EF4C5 +:10AD40000DA2F51F2DAA58D4326E17F1BF34EED9DB +:10AD5000CEA7FF6C557929830E758CA45A15BDB802 +:10AD6000F1DFFDFD4D7EEFAD56210794AE063EA20C +:10AD7000071F7CC2573395BC7D40D46C1507E897FC +:10AD8000F1006E070A6B8419DC13585E2E0C2F3508 +:10AD9000F4E29CE3C5A70432BC514D99EC58E4069B +:10ADA00021C7C0015654799F359B630897F8FB4330 +:10ADB00072AEEDB41094F3A207FA1326F7BC237811 +:10ADC0004A5937CC8C3D6C6651082F722AE71E3CDD +:10ADD000781A66931EE289891D758CACE0314C248B +:10ADE000C8368DA48667C9B64A5C4BEB4D5A0F2B0B +:10ADF000E37FDAEC85B5694C6C80D02354A975E00B +:10AE0000A3E368825FCF99C80F404131B087BE5B32 +:10AE10000A464D3F88281D9B0921DE3165C5FC850A +:10AE2000F30A8C09EED94C4B03CFC622EC0CFDD7AC +:10AE3000CF3355A37EB8335E4745BC7ED42F4A1E20 +:10AE40009E1AF2B0822EE95E65F81E4CD5B5EC0E66 +:10AE500000DBA4C1DD355BFA8F5549184D91851291 +:10AE600037464CBC04BB156596C5869A3A03E05A32 +:10AE7000A5F8FBCF00A2EF19FF35F1B4F0C4C2B1C1 +:10AE8000A80082877E0AB4B08426FEF3D760AEFEA7 +:10AE900035F77960525CFA5DF988664E98D09A9DD4 +:10AEA000537CD4ED5C8963B23B0A0C0741EA9B35C5 +:10AEB0000CCA4960C567699F9E65024884EF43E6F6 +:10AEC0005608EB93805BF47549B4BB93F35C6786DB +:10AED000EB136BCFF4EE5BDBCA8EB228AC39E52402 +:10AEE0004EBA0FD78B18486C6586790FE4DD9B321C +:10AEF000DEC713DBAF9AC9C61838599808DAE14C97 +:10AF0000B1D657B67CE0E7E88E6BE4F25C714AB9E3 +:10AF10008E7B28270807F705353AF4939320536B67 +:10AF20004B8999320CE93E7551012304A40A45125C +:10AF30009975050D1304228D8183B0EE0C3798D6D8 +:10AF4000828C06D5E398756E2DB49220C2DF7B5CAF +:10AF50002C37B6161E34050EC25BAF872A933040DD +:10AF6000C60A0D2C37BE424FAA3CDB45BEB020249A +:10AF70002CAB2E01F6FB7919502C876FDBC5F5360B +:10AF800075292C5387AC3698DF557315C2DE575E92 +:10AF9000B7B1D8498334DEF4A88E8ACCB4EFFF432E +:10AFA000A7AB85F02EB7D658172CD0A203AF2B7EB7 +:10AFB0007461C07B7C73FB3D8A29EE342F0EA9831C +:10AFC000892789AD0A94FFCBDE01E11C092CC20B55 +:10AFD000EABB11C2AD0880EFCBEF51E1999222326A +:10AFE0002E53AEEB71AC518822AF4A7B321BE62068 +:10AFF000CDE67249DD6D625B70106D5A94996547BC +:10B000001CDCBA5762D63AECEF4B62F97AEA823A24 +:10B01000A4212EFC43119CF6FC62D75F52D467C872 +:10B020006DB15022A36E6CDF9C15528ECAFCFB6F73 +:10B03000CB3152B2D77081F3038D790EE2BAB5DF0E +:10B04000B51259E53281C126F2BF0DCFFE32F2A909 +:10B050006D86A4BFE48750DFDF96D2B60099571003 +:10B06000F94115434043DA9EEAE711F98590D5E2AC +:10B07000F2BAE24728A89726C1F482AE61913CCB90 +:10B08000E9D401ECF97CE5C395518F1925208FBFD8 +:10B0900019E69B3A98867C94F36E2418C8B489C04C +:10B0A000B127328882AB8C85BCA1439DD6DB6C2056 +:10B0B0008FE412E7F46FB5750BF33D52E6AD2EC386 +:10B0C0007C332FC0BA7A1FB9C46C2D00A029544418 +:10B0D00073E02EC488A676D0D8032081B317426EC1 +:10B0E0009A364B65100339BDA2885675E750992EE4 +:10B0F000FF4240FD50A0365CA58E9882EEA06969A3 +:10B1000053862A2E50186F5138A688A4AC14FD001F +:10B110006E6C5093A7860EBCBD1373995A5F330DA6 +:10B12000CEC6C9D139993FF1FF817BBB47BAD56003 +:10B130003C899231C86C8F82D66AEA164AD650CFC3 +:10B14000E0C748F908F5BEB195EC9BA9D4E9A9FA86 +:10B1500063F7C4F6A3E9CD11FBB3BB0CC7A537FA5F +:10B16000DA093E9281B9218EEFD069AF2EC246CB6B +:10B17000660AF8F61B68FAF26C807FAF2686C693E3 +:10B18000B220ED5D0242A11E8C57AF2346BC80CA9F +:10B19000FCE91019BF5B34439649820CF5463E41E9 +:10B1A00040FD40BCA3341C358C9656A197FDDD773D +:10B1B000545042C673FD5CF5E3D95F0172214588A6 +:10B1C000325E137317D9B8696891060407C3B8AC27 +:10B1D0001DAC8383F6482C4785C5BC525801379374 +:10B1E0004788FD3BFCF718E1053842C3AFC12AA8E8 +:10B1F00003088FBDED7B3365F793F06819FD4E743E +:10B200007B92505023A0C533D918F589946C958949 +:10B21000F5CDE242486FB347BFD9021929FB43ADD0 +:10B2200015334638C5932E0E50D48EEF9CEEC6D8FB +:10B23000D8AA49CD628D775C43C523FE3616916F3F +:10B240009FBBF5EFE1B2B61896765FC81DC2C4C8C1 +:10B25000FDC18EBF5B168EE1DA9DEDECA0C1022828 +:10B26000B10EBA235AE217A95137B19DA5C228C918 +:10B27000015CBF2F932D4C6C5211FB81298EB86657 +:10B280002FA782D23736346BBF4DAF6CD207AD4E8D +:10B2900018D96AAB14BE3800C58D985C7E277966D4 +:10B2A000795D272637E277D4F742AF62CB1F2D6D49 +:10B2B0002CA21F4578C8AB93E6A87676DBB810FAC7 +:10B2C0008055946832347376CAF76EFF487825F15A +:10B2D0009BF9CFF3324654A83F3EB8ACCA185FBCC6 +:10B2E0005F6F0ADD7384015D2497965208CCB647E0 +:10B2F0003426C9A88A7055AC7F407C700F8F73AE1E +:10B30000B2A6089DAA62609D22CE3EF41BC948D910 +:10B31000ED9A6EB0D406F57C9B4EE0093EA7FE3E4A +:10B32000435293226618D2C1A9A79C2CE99CB6C6A9 +:10B330003D700A791732E716814A33E40A3D857574 +:10B340006E06E80838710789145785F64D81B0E418 +:10B350002FEF3A25E234CF2C68A71C2ACA74005973 +:10B36000DD4FF713801DC8A0F08B266CC6A0219579 +:10B370005E66A2042742B235FF75AEB379983F2CC2 +:10B38000AAFFA70E789C6501BD583B030D4764F1E9 +:10B39000B46BE4A0378F301C0FD7CFA9FD308F02DC +:10B3A0009F4533C567E30143A8608BC8C03ADA11F3 +:10B3B0001217C898A2B6EF3398F943E74FCF2492FB +:10B3C00061623D9B9433176F21244BBF31886D0818 +:10B3D00096A0D9309C56141BC148EA9CBCAFBF4E06 +:10B3E0003A5798A97369A3C663BE3F36BD1C94EC57 +:10B3F000EC0C9A3022283B2F5A048C06688E45E8C4 +:10B40000169088E089617535B11078936717482EDA +:10B41000236E3204EFA4F4438EAEEFAC7B9F8332F5 +:10B42000E343C6D2A061A6363A04AF27DFA90FF3E3 +:10B4300037D863B13C1159CCBB7239FE21E3BCB89B +:10B44000DE3E02B63F0FDA62DE6BDEFD2F32A279FE +:10B45000A837BDC2F57DABE118B3FACA9C94E7E703 +:10B460000251AA9AFA96AD34D54811A34235F8BDD7 +:10B47000637DC6ADBC62F458D7E139CD6EF0F47D82 +:10B48000D8C59EDEE8DDD39DABD16054CF507AF2B3 +:10B49000968665D9DBB91A06F9248DC2DA59B9F551 +:10B4A000CF819244E5309EFD12C4407D53343F85E8 +:10B4B000A8BC41CBF641A4CA226033AE320CB5FC25 +:10B4C0006800645531F5154D7751122C705FC883B3 +:10B4D0008F440518E0627E757EEEB8191A9B2BE149 +:10B4E000AA6AD29F86082D25B21CD0971949FE6101 +:10B4F000A0536ECC623C58DF69EA214C3FD6659878 +:10B50000954C66999078F6FB4512FD8D1EAD3F2156 +:10B510000D0E30A2FF9B5F715B4D864C5E12D09486 +:10B52000959A6B9FACA99482AEFC8B60A467489FF0 +:10B5300027D0F0DB21B9E0DB403F0332720E58E048 +:10B540001B811DE0BC6314E99A7434808CEFF10C0C +:10B55000C083275ED4EF094EE6C052B544D99F5B45 +:10B5600002B4A1B10C1C93CB966F71DB214DA1717C +:10B57000CB554CA4C490463DADF0CFECB70B9C35F9 +:10B580007F4D726A123FA86E1755A491D89B5966D9 +:10B5900033843B9EC00CED71CEF387A8D1C8038CD9 +:10B5A000A0591BA9CDA727F31666BF57AA724081E1 +:10B5B000110501D7040F1B579297FA32C1DC186CA2 +:10B5C000955E01F99795CF28E56A57883E247781E3 +:10B5D000134AD05B5FCF56E8AC28DB0BB7D88AD4D0 +:10B5E0005648C81FD8CD8515EBC2A3574A4F18D768 +:10B5F000E8B3297571BAA341884FEEE150B0144900 +:10B6000095B8C7D263533765AEA232BE895577FC71 +:10B610002204357DB2CEE90CBEF562537394910DD0 +:10B6200046C80A07133F6BB674AE17D262FD1C0101 +:10B63000F76B03DD2DCCE2207D3FD080168DACBCB6 +:10B64000E2695F74AA5C9BE86F75029D99DE06064D +:10B65000162CF01B44E27447439F687AE49F559F81 +:10B660002496A3AE302489DC903FAE92EB191A49A0 +:10B67000D8F7CE7DA368F212B774805B5A9610C9D2 +:10B6800075FCB16A7A517A24746BF2E03E54E2E0C0 +:10B69000CA572032B921ED74387AA4761FA37547B2 +:10B6A000F6BDAACA36E7B2D65C66D95BF74FF2148C +:10B6B000ACC21C340B62E154E6BB7315EF52F3D1FC +:10B6C000CECAE242DBA2403DD4CF25FA0E43C440AD +:10B6D000135C68565CBD94D1DC352022A17E0E2B14 +:10B6E000CF32AA5FFCBBFF825B2D2C2F3F1B58E2A1 +:10B6F00063CED8055D0345ECB05424C24275B7A5AE +:10B700006EECFE63863C7B571DE7F56F343AF2C85A +:10B710009AE4AC50534E567FF8C741668DB5CF5171 +:10B7200036D5F9F96BC4FE9FD3DD6C6CAE492BD6D0 +:10B73000181F4085C1814E4AE7679BD957E05AB729 +:10B74000813BD3B7A047CA6B62D52EBE55E5EDE16C +:10B7500011D8FE49F5CD1F01C41CFA61B2138176E0 +:10B76000F66A838C99E0DE7ED19A3AF252E426ADF5 +:10B77000F3927BCB3C51F5E3437261F602BDA49199 +:10B780009D2DE4EAC88B959145D22AFE5394F51A73 +:10B79000FD29B4787878DC72A5AFBA947A6EEF118F +:10B7A000CC3832E1ABFF98E03352DD526485144C63 +:10B7B000F05999657FEBBBE8A83A1933632A28AFA3 +:10B7C00024A60A4861F672E8033D5C613F694404BF +:10B7D0000795485400C1A401B8078F95C6A890D317 +:10B7E0000A1B08A6D063FE47409347E6E51A2906E0 +:10B7F000735669613B5AAC81647F6D2AECAB41A4FE +:10B80000C16C6AF82B2BF7A9D7EADBE5BBC5FB2790 +:10B8100065FB10B82EC383C7AE9B581F3021F3AE13 +:10B82000CEA1830879ABB5E16D38B5FA8FFA9DB535 +:10B8300019EB1344806D97637DC38008169E2AA977 +:10B84000EBDD7C8C85FD3A28AA7FAC27079B113F56 +:10B8500041FC5E37350BDF3F7DB1EEBCAB60E48E63 +:10B86000323ED94BD7FDF327A445B8F9E547B62AB0 +:10B8700022B8CF366296F136CF85DDD3C2F3E90028 +:10B88000D4D0DD3B8BC9F43D1583DE430D7E331EE2 +:10B890007E2C2FBCCD3541758CDEE0EF4EB506BD5C +:10B8A000DE50C14FDA6B3C6CC5D9E43524671152C8 +:10B8B000A9F76CEBE516BD4007C9602D2A28CB1807 +:10B8C00019F94B4D8CAD4C4522ACFEB9D344F99AD5 +:10B8D0001A157D76EAA604ECC2D5D8D1B1B180C1E3 +:10B8E00074DC7EEBE5295BC7C87841EFF401BC0F3F +:10B8F0009FCDC1BDC368B8C80665D25BD5E39D8442 +:10B90000A85D6D030A30194D2A42D0C93BA179CEFA +:10B91000FD14132A24C19A78CC2AF4739827495528 +:10B92000AE223C3FEB5CB7B9116777451F93AFBEC2 +:10B93000B81E84C628482CD31042D5726160648337 +:10B94000D730CA95AA9F40C9994B320F9F20D2F495 +:10B95000CC2F09E7E76D15ECEB115C4B8871255393 +:10B9600045FA15DCEAC8E719E79C458AC2DF90DB97 +:10B970001042566CA48C302E2B05FC3A398F8DA9C1 +:10B98000DB548DA3509274326F2535CC333D723227 +:10B990005D0E827DCE4400A81F51ECE7849A7D9F06 +:10B9A0009204E4821F8491B4A1D24E66451D594988 +:10B9B0007FB88049A076A8A6C3FBA4ACD33FE9D149 +:10B9C000CE5D3C5B473D0DC580A22E009B61857618 +:10B9D000EEC1573C2E6D881223CDC142D470AD57B5 +:10B9E0002528BE006803E109C07DCEAE27484B2163 +:10B9F000BD6B23BD0C7AD39D9C609396835BEE2731 +:10BA0000237DC3D40CCE83FDFA237C6CF6ED1D9D03 +:10BA10002E6FF56A4B07803C054AC933B7B7F71D4F +:10BA20007A095FB5A6DF827436E1DAF192DB6FF353 +:10BA30000E780336AE8AF4B2CFF545625535DD6C2B +:10BA4000D10C86918D0A7BE84DED65ECBC4EAB8840 +:10BA500064E69947E6C6F85E7B03C74214E1BD87FA +:10BA6000062FE305387A6C381437CA933000AA6D74 +:10BA7000C7FF5E0F6A8D754BFCA270988D3AF65227 +:10BA8000D1D3E2ECED2893C250098FF7F60EB1DC6A +:10BA900080E90F22798451119D7A93EEAABA9D49CB +:10BAA0007B26879F5F22BB5C18378D71E86DA2757E +:10BAB00081574857D8419C0C20D58DAAFBF25BDBFF +:10BAC00081E8FC6056E7EBFCFD742313346BF8D778 +:10BAD000BA0D2B77D6BDFC5C3F6DB58E9BB08DC982 +:10BAE0001218EADE0BE9D8E32AC73D482C1F957BE4 +:10BAF00012B5889187D839C5D626DDDB64AC90B302 +:10BB0000BBB6FB87ADF3928D971B8F546ADDD55181 +:10BB10009FB8BE3050772251EF1C1852888778604A +:10BB2000F426799626B705C643EF4D362F31D83027 +:10BB300071BECD607F4A7B82D228E888E1CC1DDCD3 +:10BB4000648086CD7FD4B8EF0BB6FBB2C2A0A2B89A +:10BB50008427E4BB4DCA4B234050AED7918565E0A6 +:10BB60000B52F5371D8909942DB5C18640D2DD955C +:10BB70003F02B83487CCC0A6191D64B521C9A609F7 +:10BB8000E046D896995F27EB0D8BA6BD1461730034 +:10BB90002D9CFB93F35F4EC4FB69232DACAB0EBE13 +:10BBA00061984A541C6A40529696463781463270D4 +:10BBB000FF56A8D2EE830CFA00320869ED1A20CEA7 +:10BBC0001AB8F0511110585F373BA3C9F030820802 +:10BBD000B1A1FAA06F7D8EE2413F7A5078F3B5B201 +:10BBE0006E3941E2F40832D349307F9C78F7262E33 +:10BBF000B2A605FE77FA2FFE3E055D67AF326F6194 +:10BC0000E28A13BBB24F2D312DF5A4F74A41A49E11 +:10BC1000A8A685D1A15D9632DDBC2A8DC3712833DB +:10BC200004CC333C46B13401DDDC6BAC2447E43E4C +:10BC30006CCF6808A13F6474E3325A236B8951A525 +:10BC40004494A3244D834D78CBDF05BAEF9B0E5B64 +:10BC50004E6B8C4A3348D3578DB596CC7C1AFE2E4A +:10BC60000695AA7303EFFB0DB98B3F2344078F1F83 +:10BC700008B9BF857E00013696F6A0CD59EADE866A +:10BC800050C0D62C6C3A9D35D40000D2E035E9C7BF +:10BC90001808C1A526ECD41492766461A19E0EEE1C +:10BCA0003074682985CCF6AFD07CD6FEC3B1E99953 +:10BCB000B6567A79D40C60ED6654FC4A0DFDAEAAF6 +:10BCC000BC646A871806344E8317A14EB21CEC3848 +:10BCD00043306D62B0E2EF161276D1123B2E0B06A6 +:10BCE000F7EB9C7FD03D6766214B7D1424275132B2 +:10BCF00002A1EE0AE7D537EC83EC22B36066599ACD +:10BD0000E646D7A28B43B3BEFA64D77C4383896BE4 +:10BD1000D2ACA00B08BEB3A944BAEC2EAF37FB4D92 +:10BD20004FA50DD1C11279BF2483991653E06CEF52 +:10BD3000CFADADEEC2886DC170294EFEB0E8EAEE1F +:10BD4000C9C045C876FA6FCB13BD71F4F33FF94013 +:10BD5000409FC02F9B36AF9296E5C05964DCC591D9 +:10BD6000E2618A05FFB1C4FCE2BE910646FB73A204 +:10BD700016CE2CE56FAB82281E81A04161E07E7F4C +:10BD80009D031597AEC2A50C95564BB85FAA96E4D5 +:10BD9000CB05E352CA6676AC0067A331DE961CFB86 +:10BDA00092CD52159A8A20EC02293559AF716681DD +:10BDB000A683C78D45CDD70D1025B43526C966F6A7 +:10BDC000734E36C92B8181F9F1627A3DBB43F4DFB2 +:10BDD000E6FE147D7B8FEBFED5A315C333E489E427 +:10BDE0005B86EC3B0119FB1FBACADBC542AB7DE7A2 +:10BDF000A6C44CD291393B9394253E4A7AE15D31F9 +:10BE00007A7FC6E48D6B320E4AD07F5D5C7EB233A2 +:10BE10005DFF0303B279BD4150692B75B7E60B5640 +:10BE200049127BD6C7EB3F4DBDE98022F4581CDB9D +:10BE30003F20DB424054A2968969B729DFFEEF26F6 +:10BE40005C86ED84921314F26B03133A009A7E859C +:10BE5000BCB89B45D8A8B9C7C6C63FDFA7F6A4DFC4 +:10BE6000D99B20093A256E63549E3E84994FA4EED7 +:10BE70007FAF7662339EAE1437BA8FDDA3BFD52570 +:10BE80000C47DBDE5C10BCFB875AE679E68444A2F3 +:10BE9000C537FC408B08F908D260244AB3B92F8615 +:10BEA0000241B8EF2F3D5AC84476146E79DF333C17 +:10BEB000B3BE6FDC08631F3954DD6D1A9804933CE0 +:10BEC000CE6831A7AD50F9217368BB81D261FE7590 +:10BED0005360878F406BB22ECD058DE76ADF15FC6E +:10BEE0007B86C8F5444EE6C4838CBD84B45A6C5D31 +:10BEF0002F5372798DF563A571F65392B855911D44 +:10BF000003B7316C787FAD7B6618F9D66000237E6D +:10BF10002F68DBBBECFE23C013373EC58834099283 +:10BF200013C983C972964C21F08FDB4F4D3E7A883E +:10BF30008497115224E3A330880029867A224397FC +:10BF40001C707996CEE19D0C25F5040B6717DBBAC2 +:10BF5000CFC548A67317EAEE3E1C010F69B247B081 +:10BF600044C465FAAF618447A3E3A443986FAF6A02 +:10BF700036BE76183B9CD57141F704EE0DD152D2F6 +:10BF8000F00198FB65150DC62433A6323763524F76 +:10BF9000FA27A70600BE4DD5F611BF40DD33D60601 +:10BFA0000C92C4AAD49F8927528364011F28CE21F2 +:10BFB0005CEB99EA84AEA093722B590F15C994617A +:10BFC000649D7785F157F2800797B40D0A8BCE57A1 +:10BFD000ACAE0D6DF0471932F169962B1A3D3A9EC1 +:10BFE000CAA4F88777BF411F298E6F7DEC0F0C9B89 +:10BFF00057B1052C3A1E73E200C6DED20208B883A0 +:10C00000F4E98A454C1E291205B684255A72AB23E1 +:10C01000D4679904D97D96714BC6D166B4ABC8F785 +:10C020002182967F596DD13E277EE39C73076F690D +:10C0300093A5EB25846341DB189146DBC1FD2CD928 +:10C040006CDBC79C6202C30BD951219D579A3F4FAD +:10C0500082FC10BB52C6C647A59EC33E818589712E +:10C0600025DFBF25B6A6F70676688943B8DE42709D +:10C070006FD290C6E8E4F61267769F75895E4171CB +:10C08000FACA7F5581D2A3EDC728B4D24F7B489717 +:10C09000206B0D37AA5820B4CEFBB68129A4EA96AE +:10C0A000C2C2BB79796B5A9124A5A9E9829B3B93C3 +:10C0B0000AD26D7ACD8D0509FF4A3767478558F852 +:10C0C0004E079A4707D2263ACD485E738DF4B2FDEB +:10C0D000BCC0A7D1A76F4EAFBF9F331B5270E1E228 +:10C0E0005C5C260600433EB5BDF960946DDC35DF2F +:10C0F000677348FDD74ED6958B03C647E17C043F56 +:10C1000029F60543697B4E7D979B8C45E91E059476 +:10C110000AFB0EAAD6BD96566019CDEA7AA238E679 +:10C120003FD4643C7C1745021F751DF6F8406B1820 +:10C130001AADE36FE9B99518169C65931CF4C463B6 +:10C14000D0DB3C9DFC4EF2420A5564C4B12A6053D8 +:10C1500098B9E74B37D5491227B693CF81DE5AD825 +:10C16000E6E48681390BC2BDA9021E8FE1BCDCD09A +:10C170003B4BEDCA4F35817F8A3542DBA1635302C9 +:10C180004F1F6724022E356908B5575C767CD3CCE7 +:10C19000030E3D883C7D4F23ECC391E503485E6769 +:10C1A0000B9CFE361E0A54B07A66B8944A06EE77A7 +:10C1B00070BF5A08B7573DCFBF20C04E716C928CEC +:10C1C0003D8AD64E7B669016C81A688DBBEECD5E52 +:10C1D000F399C52835ED2D0CA98E08A2F6BB1DF9E3 +:10C1E000114645EB894D7DD1CE13348B56EA30F79D +:10C1F000B0549FCA7C64B2ECE32C63B8D1D0D2783F +:10C20000DDCDD5820881E6169B1B37F45E6B58E3C3 +:10C21000F33EBC403E3F6ED454D8CC6B09810E3403 +:10C22000C1B4AE9F990F3B4343E6339BDA26018EA0 +:10C23000A25F5E9722430E21E27DA8BB44DCF6F0AC +:10C2400010AC94D8408F7D1CFA5ADC278AB681370F +:10C25000E42ECD2745D2ABC5948F2485CDA4EB9B8E +:10C260001DDDDB49DDD643B9FE4DA919E35385A495 +:10C2700021349ABED48A8144F386C91A2CDB05681E +:10C280007500770C347A22C5E6477E93785B2606E4 +:10C2900045F7FF31A4A911EECB9B350FEF38AFBDA9 +:10C2A00056AD0875A1F712490720527E270D95D685 +:10C2B0002AC423118ADB59C04CF3B9E944B449CEEE +:10C2C000F84A662E8C4F42BBE00F73550A1B64E0A0 +:10C2D000CC60490EF75F2DF80E3981D09FC1D3BFD6 +:10C2E0009D4FBB104F032D60D5222D05891A91D18A +:10C2F000A6E6F737F7170ABEC5790CAC7749F88A76 +:10C30000F7A5A49C6A54D431B8A1DD2BE1608CF66A +:10C3100016092FFE967C644CE51BC73DAD6AEA3AD0 +:10C3200010C7197272AE8813A1B30D21976CE38CFC +:10C330009515515E309CCB1D8EA2FAF3E91CE9DE07 +:10C3400023E3DAF213A1E0AC891DABA9AC1AA1D7A3 +:10C35000629DC29BFD296615D664F4FCD6E42C21AF +:10C3600096472EB20944A6CACF8AE45CD12B8D0C25 +:10C370003C145AE1D5BB1E4F71389E5C3B6C077272 +:10C380008EFC64DC471462E2AB01B8FB1F36D7F0C9 +:10C3900099C3D56A8014419211B8C8B1B8A69BB8A8 +:10C3A000B2F533DFF1066FE823DC045258F3BA8AA2 +:10C3B0005379FD8224C26FCADCEC55722CFC966F57 +:10C3C000107F53D20CA555E6A37FA53E1827E7DCC6 +:10C3D00012AC6D039266655D58D2C2A675384726C9 +:10C3E0000117CDC8CB68F6B66D483EE9A31EB69ED0 +:10C3F00040CC11E57A0489F1C3E6D5E51878F2AFAF +:10C40000BDB977A17E58E39F27153318D59C756277 +:10C410005511E3F96AE76FFFA379A05F639AFA0BFE +:10C42000E0C0AB37205467B2FF27C80D386BE24736 +:10C430008EEC462383A4AF149E1D3D04CE3DAD3546 +:10C44000AC3CF7F18089FBA425603E3684D47B1E8A +:10C4500072C5FCAA1EFA3F29A83FF075F8A6CE8C3B +:10C460002B8757EA1ACDA7346AE9630AED6E7DD0AF +:10C4700043CA8A774972902B6AF71483FAD4FCB2C4 +:10C48000C546FBE0366324E6CE54DC4019399B0FE9 +:10C4900088DEF91A78DD8631EB36EB09A05A24DA0A +:10C4A00030BDE9ED15BD1614980582E46F1F248E8A +:10C4B00079E80B8CE90DC04478A8D7AB52009C37C3 +:10C4C000E52E3FA4BE00405723E92E1FE3BCAB3E40 +:10C4D000CCB58668ED0B3B77034DFDE69314511EFA +:10C4E000E792A71B51BC0E53478202781233A0A5D6 +:10C4F000DBFBE67F7E6E53E2D0CA5DE179B5D6A95B +:10C50000F18E122CE7B66A681CEDE688F03D330028 +:10C510009AB31051607BFD615B7B48B8CB7851F9D1 +:10C52000D28FD7A09E6EBFD515587DD25F77B40F3E +:10C53000816F33F20B2E1D1C46EFC64ACA98580C69 +:10C54000FA4782485F2578D71881B703064B69BE42 +:10C55000AAB6CBBE6EC2B50394FB8760A7645495A0 +:10C560004915E6B98B1F90C2F0B47483003AE8898C +:10C5700034F9A1D3EE63D915A2EB2E0E21447F62CC +:10C58000502AE4DEF146AA64A09E5522AA8B486D8B +:10C5900030A6F19992A44211E7F79BE75D37C5EC0D +:10C5A0006B9F4DC1991240167E2050E7EE1BADB532 +:10C5B0006511DBF33055469A648F98B78234A273C5 +:10C5C000147EEB6128099C62B89A68C3E212AF1E20 +:10C5D000D51091AB0C8550ED61F0139F37FB7F7B3D +:10C5E00007B8E7D5509D37DD669E1CE392592009B8 +:10C5F0006925E1B5321FF632A8BDDE8EA632C8FA33 +:10C6000096F7C20945E5091ADF93F53B000200B32E +:10C61000AE2E2364652A6A679FB6861AB7764A27C4 +:10C62000FDEE1A8ADFCF9A8F946CA52EF21F5C99CB +:10C630006F693BE47769289C195C41BCFA787EB04D +:10C6400002DFE1DD650CB16B7D380C58E9722CDA44 +:10C65000E46CBCE249787AC0A0E2704F7E382415C1 +:10C660001EFE51BD7B14FD370650BC9E15B72EDF54 +:10C6700054129DC9B19CB80DFC61DBB8B8DC22ED49 +:10C68000B12E4EA7D7A21B8D3374061840C3DE4AC5 +:10C69000CCF51515AC361BCBBF1E1DB77C23182F50 +:10C6A000D3A2BFFD8C083C447E01E3DECF4D513F59 +:10C6B0004E68B4F6F1414865E16298CBDD41DBC4D8 +:10C6C00072489E8C2D1825D851805011844EABD5C0 +:10C6D0003938850EA897C739D112B4BC990EF8091C +:10C6E00003AC7C3AE096A282AD1484E58B399D6060 +:10C6F0007EFF766485296A189F8D21885F12906F6E +:10C700005D52D270C52A576DC2278306B6047D9F3D +:10C7100072987C1E4533E2233A7BF5E00CC3BC8063 +:10C72000D22062B582E0DD842CD7A977CC69FEA443 +:10C730004187950326423B47E6CCCACFB23D358CB4 +:10C740009C77395FBD652CE248152D94A971572B54 +:10C75000723255BA70EC62BB9DE0FCB4773C722A31 +:10C760002EBBAF56888E295620EC0B7C39006D40CD +:10C77000EEFC2D676D9B3BBD43E3E4105DEA1C8836 +:10C7800063B8EEECC289B8502368EF6F24F4EF9ED3 +:10C790004472C3F2EE64C9B63A5140EF6C389BF66E +:10C7A0008CF0BA79E6E34169419B8589FDAC2F9B0A +:10C7B0005C17C4C9CE677542E11EE125CD115C1935 +:10C7C000131356880914FD4C72C9B70CE2CD81B31E +:10C7D00033825DF6910BC7CA41C9B4D5FCFBBA855B +:10C7E00044322EC2B82B3FB0FE572E815532D6149C +:10C7F000FDF96007E33A4C44413F6D5195F7CFDBBB +:10C8000036872ABDFFC90D7B131AEA956F7F86B460 +:10C810003B4523DBB1E3B1341E4BBBD199E8AA33CE +:10C82000251F180CD2E29CE8672E71EB4B27622F74 +:10C83000D8709C27879DAD0104B179066840DE530E +:10C840008CD83D245019FB4AECDED3485FBB2BF358 +:10C8500089462D7C5171204452DE1A08E8FC6C8810 +:10C86000EAA45E2E14A925829F5FBB0B7D4D256433 +:10C8700015586EF3BAC48D4B041A9BDEEB52F705C4 +:10C88000D4768D6DA247D1795DFA1C5FF7489F354C +:10C89000DF7F82994C77CB4AEDE9DBCE085833C66F +:10C8A000A71682C761B4940A9C9DD0731392B96A8B +:10C8B0008F38CD54E0D52DF811E13FCBE477E0532C +:10C8C000F486B04289CAF66371F45D5F8C668B862C +:10C8D00024F190F4E46897E034A7275EAEE577484A +:10C8E000FC73C72017C1E30B163DBDEFC90B2DF339 +:10C8F0007B38E65095521AC2F523214A29A4AE8707 +:10C900002A9A21CC3D331F8233E083FDFE52AD9B3A +:10C91000B11C28C348EB5D1C2A944C63A2D3FB8551 +:10C9200096C0151094230268BC43F4FE5CA1EB2C66 +:10C9300063F8D8112B7651C59F29502931FC033259 +:10C94000C6C69CF3A716C90D8D187ED70282C3AE4A +:10C95000956FDE165839563CE50DDB84FAC3D40ECC +:10C96000FC5E1A2B577CA12529CABCCEB06D4B7436 +:10C97000F2A922561F05ED2283271A7E9F2C4E49CD +:10C980006B0D7AADA9A3873035B3966D6D9181405B +:10C9900077C80F40B4F0583714DF0D49ED5A6FC80F +:10C9A00024820FD0765929301CBA851BF3D2CF7B55 +:10C9B000A7A04C0BAC35DD47AB677C9F5801275ACD +:10C9C000F2C74BD6AEABA9F62092674B0ECF9D1C9B +:10C9D0006C30D703CB2CB43D92194EF746D83EE6C7 +:10C9E000D20D8AEB890639D0ED395C3EAC0C94D679 +:10C9F000230941F9A6767C6688FC1580CB07D9C946 +:10CA0000C480B3440E8A457A8ECF1614352807F2B7 +:10CA1000F8CD6DA1ED57A71E93816413A382F896FC +:10CA20008B4532AA757A3173D627A50ABA6C99B8A4 +:10CA30001EBD9C6CECEA00C56C0A07291321C02BB3 +:10CA40001269D8C42ECEBD9548D756CDC1503D7C75 +:10CA5000B82E416EB1162A25C500F462C68110D9E0 +:10CA6000484782B4BE35A25539BB8AD2CA70362334 +:10CA7000EED6856D6F628AEEF18940E3DFE4A6377A +:10CA80000748BBF7FBAEDA407857CF60601CBB901D +:10CA90006FEE5AB0228E3DC0F1546FA941200A2E8C +:10CAA0000F1D22F1438772CFBD7731AD69E96988E7 +:10CAB000C1F6F1D48B0EFF307201C551129634E4E9 +:10CAC0002A4A31D1393C3F8B05A57F2BA9DD9561E1 +:10CAD00078B35002377CD909A1C62B371AF86D3FBD +:10CAE0003AB7B9DCEA89D3E8203CBF52B4A517169F +:10CAF000D515340DB4121B5ED476155299B034A4FA +:10CB000078FB2DDE4B264798E3E081EB5F88D60D5E +:10CB100045D23E001E612F61BC44ABC5A0E9779DA4 +:10CB20001AD366E0C5F6C19F741627147AE7392533 +:10CB300056F5C5EA43C882C9BF91CC9A9D017B36A0 +:10CB4000EC06E4D90107E855823DF115F82266317B +:10CB5000EA42D1AE51388A5EE0C2544B8770B617B4 +:10CB6000D18223E831F78D257DD35AB35EB3166F9A +:10CB7000663891B59AAC2B7846F86F720B5BC1F2B0 +:10CB80004CDD1AAB08FC305D50C2A6BFC2B7C35F14 +:10CB900085B79F89E7FD7C8FB684BFFCE7AD4FBDAD +:10CBA0002CC53456E72C8DF84FAF85818E9B575599 +:10CBB000DC84CE894D1FDFE7562249773AB91E5CE7 +:10CBC00093CD1E7FC2F9D106920BEA029BB91714CE +:10CBD0006E5FEEC50B62D1115D2EB9CE941252502C +:10CBE0004D970CC3A72EAE738B238891C934A3F73E +:10CBF0004B377396307A59ABF72D80560231FAD302 +:10CC0000A3690214658BD12FF12D4482010E823568 +:10CC1000175663C4F5A0CCEE03826679F37DD5CBBD +:10CC200024FFE53AA279047D016C915C5A3012032D +:10CC30001F2D553F8E5B201A02D7B2BD30B606DAE3 +:10CC4000EB242980EAEFBEC7D696973812D0E95573 +:10CC5000DBDC08AFA7707A17105DB930DCFF3E034C +:10CC6000AF618DDEB7E2E7B444EED4E168CAF468A0 +:10CC7000F551F79192D33F821785475ED884ABAFC9 +:10CC8000B4F80B126A063F68D2124ED2F425CC6873 +:10CC90004672917BB407253103E3D68F859ACB4545 +:10CCA0005C3938D1D768DA9CEAA8E146903920EFA0 +:10CCB0008280E7E5F966B239B78A43FA798B86F361 +:10CCC000319697E7EC1803E6B9E84B11EA444D1F9B +:10CCD00017F30506AED9AE2E6151E3009792179077 +:10CCE000B03A0441D9A3F9D4CE262209CE028FCD81 +:10CCF000537E6A1AC51591F3583DE592225590541A +:10CD00002472F9DA01AEBF77D820E9DBDADE13D975 +:10CD1000CE7DBBFB0346AE6BF10BD2568CA25A46BE +:10CD2000AE269B163EDE8379EDA215C831C3122EC6 +:10CD30003D34E7F5A5AACBCFDE31B788212EA792E7 +:10CD400072D082720D8055E5F2D8A3C6F617ABEA11 +:10CD5000F0730DFAE2CBEA97E080FD27D29493912D +:10CD60001294354705A2A7A1F11A248CBFAB4EB58A +:10CD7000D0ECA534925882B0BD2D008E98FAF4C83C +:10CD800065699664DB570FB22037D582502E560561 +:10CD90006F0659611AA2577EE5E39FC702FB9F5BAE +:10CDA000DB02541259E3A61B8A4D69A83A62A2E439 +:10CDB00039C321293488112FC7A6D1C05FA09F7421 +:10CDC000828D930EB49A3288C415375B3481ADE3FB +:10CDD000502EE8E032A1D1D06411888508504A3243 +:10CDE000145449B7314AD377D4B7351D2C51460274 +:10CDF0000C46554B2045D8298A7F03029BA8D4595D +:10CE000067A08F97B3F68B7502A4B7538A2F11547E +:10CE10007DA90D1F2EFBE8B6E3ADEED7E0C17B2860 +:10CE2000D2AAAE9B6F3BF93BA1530908E7886D5925 +:10CE30000B0339A8887FAAD9B105FF194C7A43C1E1 +:10CE4000F001ED00433A675BB2641721DCCEE89D48 +:10CE50002C0FDA2FC345BAA70D0F6D189098811DBE +:10CE600069FD5300D51E1D3669DFB28B9196F7140C +:10CE70006C2ABD2CC41EED6935A43A5E50BA71818E +:10CE8000A0F412CEE895DC2E29C25C9E8346ECA36A +:10CE90001900D263B7DD3D00161E205FD1BDB1EA97 +:10CEA00058F43102358ADD90AC69962918BDF26CD0 +:10CEB0000624C355E52639B41C23E299148F7E4716 +:10CEC000526132C8DE302EB14F34492065C675A795 +:10CED000D53FE7A03ED3C2A2AE1D1DA4377494A2D5 +:10CEE000CA1C2916BD926E8548673A7E1069516347 +:10CEF000EA724AE00BBFBF146767E5E6E2E9E03794 +:10CF0000B859451DAB244D9039F8CEB12F34FA37BE +:10CF1000E75EAD92915466DCBF84E56178BFC717C8 +:10CF2000A0DC994633E9DA85837C944AD58F5DE3AA +:10CF30005C91D832DA96ECE8FE720E1310BC127BCC +:10CF4000EEA1FE54587178D6BB63C9383D74754C58 +:10CF5000C73D29962C5971D0E2D620ABFCFB26A800 +:10CF6000550DDA30FBA82CD6314EFC9AF0B2DAA17E +:10CF70001140C7B886B5D7A1EC10088455F547DD38 +:10CF80005D4BFA9DC0D7B79FE8E454848C353F1BB6 +:10CF9000FA34CAF30BAFCD2E53661FED3B79F62062 +:10CFA0000CC14C79A8AE1B7B61CFC85B67CE66E92C +:10CFB0003B29ADECA99D40030A3FF8AEBDCFF2A5D9 +:10CFC000168602CC46644DA8FF691D44F1434348D0 +:10CFD0001F8103237315B16E3C57EA486D19EFDDCD +:10CFE000CEB58999CDD61EA6965699C4D7CE6C02D9 +:10CFF000597F514EC9FF543B6D4A6F854FF85A73A4 +:10D00000CDE73873C38B5600EDF24A2F12964621B6 +:10D0100036A05569BEDAA540AF5F7D1CCCF5ED02A8 +:10D02000430E0322B7A07076E83995F48A3511874C +:10D030003398A64F73126E2F79429650ACC025BE1E +:10D04000A1F9F3B99318E3AC10AD26C2A7E3377D7D +:10D05000EE00BB8BBD306950F9FD7CD42212141355 +:10D060000506EBE250A3AC0ED4477417FB1ABC5D67 +:10D07000125E52B754E4D74E32D345E12EDC1D8800 +:10D080001FC5599E1C1CF62A0F68A4656903F4C6C7 +:10D09000F232E10B89E8A9007ECF37ADA57B0FE91D +:10D0A000BAD4426E6F1E76137FF600C9724BA27D12 +:10D0B0005DAEF83482B75EDD2D1DB30DBD54F55164 +:10D0C00075DB28B80ED89C5699E9BDF6B1CA48510F +:10D0D0009724816E07B41139FCA80973736D780821 +:10D0E0000F4FD0DC0AB0F4F4D70D2D2D7CAD8C3A67 +:10D0F00097590063C398E278767E035269BF071F91 +:10D100009344D4639669911ACF2EB31944FB03D884 +:10D1100099982EB23F1A5FD933809C57CE1FCD8F7E +:10D120003FF407A8CE06E2BEAFBBB9708E20BD4764 +:10D13000844947CFEDB6ACED57BEAABD8B1634BDC2 +:10D140000BCF7CC9F38D75421F79B06BECDE1230CA +:10D1500050A9DC7614AF5685988837AC665D49F6E1 +:10D16000278F5745EEA5C301A7172607497BCE8B0E +:10D170003760C89A6ABA1FF8530FA803E8FE01C7C0 +:10D1800011601165F43B0BA2D8D9600B808C4AC5A5 +:10D1900014A6BE9CA42174D8DB218C27012E309AC2 +:10D1A000A619BFF823D651C2327F2911CB426B9208 +:10D1B000D18E3C8D6835EAE7F35F99F7809E3C6D30 +:10D1C000DBBE4D343CE65B1F8B6D639FBA54A57587 +:10D1D000C2642E45119AC157839DD0E723AD5445B3 +:10D1E0000144E1C904A28546B4D07A1D3A399A2592 +:10D1F000C0DC6975139999E1BC160853C546A2763F +:10D20000601A0B46995675FDA88CE34218216DD81B +:10D210009B0D68F22D968402EBE88746B7CF74BA6F +:10D22000321178193D7A9A0073A9B40668816E8F1D +:10D230002A48E53F7D5F011622210C6CCE80D8097B +:10D24000EF91209475FF825D9F26F72F129CDA2EB6 +:10D25000FE8E880B87049BEF535511C5EAC434A397 +:10D2600078E38122647C1DDB25FB802A813B714EA3 +:10D2700044EFC4B8AE82EF717C72006119BE99EBC5 +:10D280000BDB78C23C319A5CC62421CD2E0C961261 +:10D29000E29A353F0E996B2EB33B09E0F45D913C69 +:10D2A000173CB1F8438BB0F7F8CB5505542B4734F6 +:10D2B0008FC518395E2E8A500C9802041812AE9D44 +:10D2C00018BD6CE9DFF57B11B7C8089E85A7EB6A2E +:10D2D000CDE91226985648FCDD727C2BE5A169D772 +:10D2E000046778A9E9FA3EF4E6001DF0F688A2BFCB +:10D2F00081E7128E95248837112F90FAA8ACBC666E +:10D300000BA6E26C31A13774BED16E067B0738EEF6 +:10D31000C4836C146328BA1076AA7AE1E018176304 +:10D320002D095E9A2074103EDEFE6EB13E6A7EA02C +:10D33000E917939A611E3E8D77CBA3FE109A606227 +:10D34000AB44B2525ECC7671930C9B0ACB848E2C8C +:10D350009B68433F3E49178320B060C894C0AE41EC +:10D3600035D8CAB7F3617C64EC4500C58B48B07C06 +:10D370004F0D4E7D9D7D8320D2345DE4E925940ED2 +:10D3800059107EEEC6E3ED2E9665F65FC2521E95ED +:10D39000976A1664E4E9BFE81D5B37E29F9A7A2E2C +:10D3A000FCEC2995D4CE6AB2973FFD20A1BA00FCCF +:10D3B000A7F327C7562624D922C3B01217D7D3C93B +:10D3C000C25B608D3B9E4594727EC1272295423F91 +:10D3D000770E55BD42BE62C6770FD5D5086B44AFF8 +:10D3E00034CFAF3D54EFD69B17FDED0B45342B9C4E +:10D3F000D5A189D2D43C3FE28D30828D0794BF2BDA +:10D40000DB4B1AAAEDA1A22D890C75A477B465880F +:10D410000473A1A8F30F74F02F0606D8EA3C832A00 +:10D42000D2C957F814433BA4A3CF249DE0DE5AEFA2 +:10D43000F92F109F8F5EE019C46543A6FF324FFDA0 +:10D440004CD6A701495CC232A55F548F732F271AAF +:10D450002B0F31A122EDBE2823E5DFDAC1BB123B41 +:10D46000E4A53AED9B4E80D8D33C93696FD46D2AE6 +:10D47000992FE0DA07A750C1BC27D1EB339C69B3E1 +:10D480006CE85028E2E82A83EC02A43364C921AF97 +:10D49000B4432A9047922172BCCD7A3D592B13F2A6 +:10D4A0007CB9C53E49FE6708D4EE9F6BB8BF6E25B8 +:10D4B000FEDFA3DACC5586344BE51E2B46553A8564 +:10D4C0002B7BEDCC75FCA98DE365B22088720DB481 +:10D4D0002C35599AE71A1D38A1841762F79C52AF70 +:10D4E0001CC825289B1060B73EE19772F66035791D +:10D4F00035CF59F138C6A9451C7AD3E781C09A01C6 +:10D50000422F980A982BCC26E17F0018A7FBF094B5 +:10D51000FEDB2851F361E505CB629404D9E2943334 +:10D520008E1190D87FBA2C27DD2B2AA11C0F91DEFB +:10D53000DD0E8DAADAE7A1A67335EDDA0ECC9F4891 +:10D54000AA7819DAB75814081FDBC9EE430D151C69 +:10D55000AB020B9544763D76F4D094C28D73FA20DD +:10D560000B4A70223FF1FE2945C7F8CD909A710F02 +:10D5700043688B55EB56199341624064B4045525BA +:10D58000A67EEA656C40DE7A9AF05BF1E8D6D23985 +:10D59000F1534538E73D93770A2FC0C53DA78B0867 +:10D5A0007E12EA9EA833B0394A65FE3382B6BF3296 +:10D5B0009203BB0D989E33AD64F8EAEE4377111EDB +:10D5C000AC96012C3AE27D8A1409DE48A46F0089EA +:10D5D0003267D56DA29F58A2ACD07BFEC88141FEB8 +:10D5E000A0DCCE64CFB117CE39CF7C0349ED7836BD +:10D5F00035AA1440ACC4AB3E6461657200667EC758 +:10D60000834FB3C6AB6C23A788BFE30FC91023C4F5 +:10D610009953C3F176C81B92982C2193D077F907C0 +:10D620006557DD88BB733FA05260311533B52525A2 +:10D6300061BEFC2C0B7F66F7E666D3375161D505DA +:10D64000645C6BCBD21A66A5954E345773ACC57625 +:10D6500056BC1096ACA19FCB85B68F309522FC9618 +:10D66000451CC85216E054E3FD9B22B274AD26B3AC +:10D670008E651D6BC9D92D1E1DF4DCDA179432435B +:10D680007EC563515BB9D1847DF33FD62C841A09E2 +:10D69000BF7FFB16D3F4D16783347F9950A94275BD +:10D6A00076C6950C175A4DA8FE44A6A218D7DD0BD6 +:10D6B0004B63ECD80546015E93D1003586665AAEC1 +:10D6C000342883D0BD09B6CA72E430DBFB83C3289B +:10D6D000B35AE8E242D99AB991978B3AEE7BFF466A +:10D6E000CDE6B28C934986335C25071FA149B8EA81 +:10D6F000F967BEFF163DFD568960B201BA6649550D +:10D700004D5DAC51D2686D9591D99071C526268238 +:10D71000284579DD17D66C2984425842739AEFB2B6 +:10D7200018CA005241FE32A962AED517130BB908D0 +:10D73000B00CD32EAF389F1458078BDE55D6E0D7E8 +:10D74000960338A7199229A26EBDEDB05924D2A232 +:10D75000D6E9CB348E3B44E4378937B5510CF70317 +:10D76000A5AF9426D635B3EB579F560204BFC91117 +:10D77000B65DE27A6CCB98E766958DF61B05B1DC59 +:10D78000B1DB38EEE985194D63FADA7CA3A02155A7 +:10D79000D206F4B3B09F7181A48FE12412F377C64F +:10D7A000A7EBDDDDB9D36A632FFA902959AD62FB8F +:10D7B000563F09AA5E0808A6BB8241293E52D2798B +:10D7C000AC4B51B5412AFC06F8327ED7042317CC66 +:10D7D000F2AA2A456248DBD7B7EF34E7372F8360D8 +:10D7E00059251DC7D8C570D81C619CFBEAC627A166 +:10D7F000F3DC3F641A1ACE9B3B5B8377A5148454F9 +:10D800009C1816362F1C246D50EBCCD2115D68A2EB +:10D8100043FDD4F00A3BB44B8F6D65F4D541AFD9CD +:10D8200088F12A09F2886EBA6C5D0CB01070340170 +:10D8300015296D655A7B16A1D49644EC431FC92760 +:10D840002A1FD469B2048A3D117192F1A5E19ACFE1 +:10D850000216A788C7E034F5FE479C006528882695 +:10D86000AACEEA754E79E6CF252B4C120B5E4A26DE +:10D8700021D2D0498CDD444A801D749D12D6A5E288 +:10D88000BFA696431C077AEDA2C833EB7DEC097D59 +:10D8900016CD39A9FDF4F4A913069E8701FB9F213B +:10D8A000D3E7090F48661509E71732FD2E2C2F9B89 +:10D8B0003B99982E4A95FB2A66920FB0E7789C62B6 +:10D8C0003483D8810C94548C4D780375FD620C130D +:10D8D000F6BA3DB98FE8DAED40F99C2AC172C92D3C +:10D8E00028B3BE26E13FE6A8453E5E185F74BD49F9 +:10D8F0001F4B2C06A300DD0F4E0F3848FB2492FD72 +:10D90000D4127A8E6F5E3540A8B3B7163B2C9F2891 +:10D91000C0E11A443927ED2D73979E9A288FA46190 +:10D92000CDA6F3A8CDEB7A699A59BB9CBE97066841 +:10D93000E64E985325B9870A7990B1743605DC69AB +:10D94000A82FEA2F90624B291DEF3D0137C8111017 +:10D950001643671E4EE1A7B9BEC514B6774B805576 +:10D9600060015F99EEE946A7DBA412A65DCD7A4F70 +:10D97000F38A7BDC3BB44EC92FF2B35064104C2ABF +:10D980008C10405460A5D2342B02B157F95E596E09 +:10D990001910CC16FA1B0E1ABE88DFD1C6D7FD6C43 +:10D9A000078876533A967B736D146C18B7D32301AE +:10D9B000F17166051DAC79812AE27F24F7EC78339A +:10D9C0006D0355DF265C0531C722FC9A0CFEC8E7C3 +:10D9D0004D740E60DE9E6919CED4ACC0012021F1D9 +:10D9E0000382822C7274F1FB8B0C175493C99F85B0 +:10D9F00004917952DA3DCA3C9383DD342079744432 +:10DA00000F7F8C6DDD86349B3015E36F3E8A368A3E +:10DA1000DF42C8BFA5B845E6858FC1BAE7DE4A44F4 +:10DA2000D1F11D1E4A4A94992E57237A48ED478119 +:10DA30007C4A71E5EC29B49AA13824C89F184B762A +:10DA400049E97FB629808006F08002B03C8BB3AFF5 +:10DA50003D1D6A17A6538D484E59F542FCA79354B5 +:10DA60002A09B881410F2E137C292EB451F61ED2FB +:10DA7000E0483974D1A22968C17AFDA54CA58F98D8 +:10DA8000AFE8E26EA289911082D636E25F065B4B68 +:10DA90009E548C63DCDB7F650004A5E8D7779D0B83 +:10DAA00016522FEE27945FA859AE6FB6703557BD4A +:10DAB0005F0E29790A12FDBC4F85FFCAA7B85F5CCB +:10DAC0008A5FFEA3FFCAE1ECFC8F5FFC6FFFE254AC +:10DAD000C45A1267B5F7DE9FB9E14CF51DD3971212 +:10DAE000C8342251F928D477B551E40289D62F2FB2 +:10DAF00012BED68966CB4F81CB5E78BA4C8735088B +:10DB00003D1335C2078D097A04676C4DBDAB815357 +:10DB1000A19B9D88B10C1BF7BF680845D3E4CC17C7 +:10DB2000A98D8C5626C569CA7DB9E3929598C4948F +:10DB3000013D0CA683ADC9C37F38F0D3BF16B6BF75 +:10DB4000D44DF6F8A3056F4DC3D0A2A18141CC906E +:10DB5000ABA4A491BDFEBEC47C80B897C4904A6BB0 +:10DB6000F77ADA11D6EF04D12D706C304A14FF0B1E +:10DB7000FA908AE7948BECF3CA02B766006104AEB0 +:10DB800035A5225699DB55DAEEBD028A8539301863 +:10DB90006D71CF7E843473FC3DAF8928D7954626BE +:10DBA00025BFE0DF47C3A551A0F7ADF4BA31EF9C24 +:10DBB000A7166A485AE31B4B4B8ECB22F596E2011F +:10DBC000C8A6FA0F1C94CB34FD4D59F213671F6A97 +:10DBD000DF918720C9185D368AB5A36B67E2A7F786 +:10DBE000F03B51C156CCAB4E7C8BACADEB7E46B21C +:10DBF000925F72189055BB542195FE944F4B51BEC5 +:10DC00009D8BA6FBB35DBC0C587EF50F07943C19A9 +:10DC1000FF5F26F2D5B2915EA43BC8916B027A23D6 +:10DC20001C8CC79AAE621378656763F90DD5752DA4 +:10DC30003BDE610B368D2F1FC70A219993A7C03B8E +:10DC40002D3ADD441E59BBF93EB0780BE6C7AA2A2F +:10DC500076ED42CB6289E580220973AFFA9B5321AE +:10DC6000E51446CAF682963C3ED9530678E516D7A7 +:10DC700062DE0DC76E6BFA88D52199AA3BCC6A3C4F +:10DC8000DC7094CD7DC43CF793B05C4C0DF81A3732 +:10DC9000B2A410BFF89D2BCD9B56F04C1B31158CB8 +:10DCA000141568D2680150FFE2230FE8380593FA93 +:10DCB0004E8F7257377599AD3C3926820BB434EAD2 +:10DCC0004CB68D7B26449A1C8E3E942B8F6A2C94E6 +:10DCD000686681A901B6ED389F6D1CE1B3A08A3B4F +:10DCE00039E0613FFEC28C2165256D1F41C9BFD35C +:10DCF0007B75F80F7C6EFD8D9EFE5D77A87F892D6C +:10DD00006A6664C3A82DD75D84B70765C70C36AEB5 +:10DD10007BA0BD0B68E0253BA3A223AE356E8B9F95 +:10DD2000B78582FFED242EACFF3F68150406CE9C1C +:10DD30000913007FEA5E09F3EECDCB1A9D8509D564 +:10DD40005C136BF30CFDEBD1C495A7F2EA5088CCC1 +:10DD50001EF164BC2E40F4EB777FFE2B263255B5C6 +:10DD6000097CFDADC77BA1F11E7214ADAE0595BC5B +:10DD7000B179AB28445530C5CC8DA00A85AA9B2922 +:10DD8000609449FBDD63AD386E862C22182368D879 +:10DD9000A22D049D43972F70C96EED2B83061BCADD +:10DDA0008661D599A4A30953EFAA6E5AAF7870AED5 +:10DDB0008DC01B27BD4601174E6080F9D4D3B2A693 +:10DDC000D60C0C3F201A20326864B02987552812DF +:10DDD00061D4EDD8DBFCAC2E99EE8835625EC2DBF7 +:10DDE0003EF0899AAE02D5FC64E34E252DDE65ED4A +:10DDF00030BE1B8A2B621F3D830C00DA1225DBE646 +:10DE0000F970FB85DADE44AF799B1DE45D6281F732 +:10DE10007A48E9B2041F8BE45EFA4E6C8178E5EA39 +:10DE200007B97988A1FA513DF13628316D55259011 +:10DE300099D28D1CD3D12236DC4360089BC0DCB85C +:10DE4000FC1FDFCE0713EBC6373974D6F177D857EE +:10DE50001DE50265C3135138018AC8CED5DF75F8B8 +:10DE6000D837A543BAD7739215F4267FEAFE749685 +:10DE7000D137C9C32D210411FFD858CCA0F0C06AF6 +:10DE800058F0BDF345FC7D482C7395DC043656D71D +:10DE90001C6FB46B900AA08773A2B0185E97958B25 +:10DEA000715B8593816F3AB9F208274E5BEE9DB3A3 +:10DEB000102585462D1EEB52D50E86F5BFA63DB525 +:10DEC000927DFC07BDAE5EAE73F7E5C749313365A1 +:10DED0000FF9B92D00FE2C4FD550ECF18FA6174D40 +:10DEE000576EB40B56487728C09626F8DE30FFD31D +:10DEF0008C53D79A819FD89B48642BDD69918A5CAB +:10DF0000320A76D3D9E92F97C3FA251EFF2F230DA6 +:10DF100017A0A16211A3F9685014B3B495360ECAC4 +:10DF2000B87FD2370C90F30B2A365AA1A4FEA091E9 +:10DF30006D863A512A65B2B77E2E072EA5AD04BF75 +:10DF4000DDF5317F305848296D9FB407A21FBFE629 +:10DF5000885F3DEE16848393EB514594F12870045D +:10DF60005417EC2A5996D569EF82BF23EE220A8412 +:10DF70006CBACBE203E7C5B36D6C14EA4C49F29678 +:10DF8000F08C11913F138F94B076D6F7012D5C7E03 +:10DF90001B618FE53ADAC414C4BF1FFDBBD8E5D0BE +:10DFA000FD0B558CB72808650F67B83E01463DFB51 +:10DFB0001BD51BED5353DAFFFB71FF675911E3D5F6 +:10DFC0004268BFF856B29281879D7580FD16AB6C92 +:10DFD000C8C0DC2665CB6E1B9E951D6816A73D69E3 +:10DFE0003FDF9AFAA357BBA5FCF3FF059EF2E35B64 +:10DFF000D8575AC0E751CF0D44453671277598243C +:10E000005FFE9BC362011447966EE6AADC267D1074 +:10E01000ADF6ED58FC5A0EA64F0DD60AD357C3DB0A +:10E020008BE5606539C6AB3E629BB1491BC4AC2F22 +:10E0300018BEB621982179FA85AE554E4EF71A10C2 +:10E04000E3D317BAD8CA4E1D08A6F13BC47936737C +:10E05000CCE7662C313BFC9A10EC524D77C8CE08C9 +:10E06000868F772265618E989C46E9B130FEED9CE3 +:10E070002397875FA1B195FB7FB846372756B298A3 +:10E0800066AA090572CCF556109E3C3D87F50897A7 +:10E090008D0EB2F23432D107FE5D707CE270C5D4D1 +:10E0A000807E695554774104AE677B28C71E90C6B1 +:10E0B000ECDB1DA33C43A05107983A7609A9793FB0 +:10E0C000E8CCE5FBFCECAACAE1F6DB25C04DC31A9F +:10E0D000EE5252F6BA1A422F3B9361A1AD58794ED7 +:10E0E0003494DF5EABB272189FA35FAB0B57AA816B +:10E0F0009A08F9603F7D92D962030F37742871F056 +:10E10000904BB9E718E9F8373B72DE340FF1D3F9D9 +:10E1100033ECC95394AFB28E132DE71591996FBFAD +:10E12000956E439C6F87A9D25BA4491D8A21D3FFBA +:10E1300012312AD215BFA65B6E2DC2E2FE81FD719F +:10E14000F67EF21BDEABB03AA81BE4E3AD3998F3E0 +:10E15000887B64A01CE7E1DBAE349291A7102035E8 +:10E1600073031F617098C2257FAAE98DF68A292C56 +:10E170003DEE00462F5C04D83211A8A65C0CFBAB28 +:10E1800042C97DC48FE79BBA6602A49C369F1CBD22 +:10E1900082A97F0D27A835BE3D5108E6951D3F2475 +:10E1A0009A37BDD05928586A83D6C5E4F678A8E5D1 +:10E1B00072B0A98DAEBF174D3059C0E867D1CE5DA2 +:10E1C000F9F487D9F717B093CDCD9C329FDB5F9CD4 +:10E1D000274ECC3B81CD0C5E2DFAABAEDF03D6577C +:10E1E00069D8C3D080EA0258B30DFF51E9B50042A7 +:10E1F0007BBF80BFC2D88A3E2712479B2DACC3632A +:10E200006F695ECB578E1BFF58CBB72A232350264E +:10E21000E1860EB927550B19AEDF91436FC49056B6 +:10E22000A4CAAAA514319B70FA3C1E0353E803AE9E +:10E2300046955BEE1EBE05F0FCF7326FCDCC89FB38 +:10E24000A0B428CC41F60AC12F59D9483F28FDD1A6 +:10E250005A2804288A501E0EA00027924A70F5FF03 +:10E260004700C0FFB39061F6B1E234CD895315F594 +:10E2700085C56BE61EA2984FE9832454F2D4B758A3 +:10E28000FC9BCF9365A9491EC0864B883335664DEC +:10E29000829ECD0A0E6C99F1895F09C1F2FF11636C +:10E2A000FD54F6CA96DFA4115295A4FDF970988624 +:10E2B0007761F18A71C0C1229CDA40C1F8CC573C29 +:10E2C000B278F925E42ED251E89EB6B4860206A4AF +:10E2D000A3E56DB1D9EEF3075D796D794D2A3C1355 +:10E2E00082DA8F6D4ECBE418A010D19C16F5223245 +:10E2F00065E5AEB77E4BC2259FE5A7C7038C4AF9FB +:10E3000020C722C8EF045D402600D1123748713B78 +:10E310002D6BA7AAB013EB1077EB01FF47B9ABC782 +:10E320003506145F7BACC7A505C79EBB562CA771ED +:10E33000A3219A0BC605F7EE6834A4F0F9245D9684 +:10E34000E028E41643A25A78AF501C2FAAB824BD87 +:10E3500033A6E60FB6719D8404ACE11EE6F5F78B9B +:10E36000490234D2D884653F094BAC0D8B19C333B5 +:10E37000DD8575248605228D4B8CF8C7CCC158C528 +:10E380007A726E9FAACF3FE087D5E6B0E19C8616F1 +:10E39000ED82AD8A638E5551147BE801DC201E1A94 +:10E3A000551610F3BB71E54D5E7024E6E368917677 +:10E3B000E8B4F2C34F398E49C59FB22F0675DFBE50 +:10E3C000AE877A5D21969AABE35802BD6AAFA96425 +:10E3D0001BC3563162096036C0D7D2BD0BD55B5D19 +:10E3E000836255FDCB8E07180423D6D91DA51FF6D1 +:10E3F000AFA556A926E37B63F14099C1CA5F2614F5 +:10E4000099302FAF9E9963000E0B6767D7461F9018 +:10E41000A6219AC9A0D7454B86D27EA0280CF533F9 +:10E420009C56A50D171C875598FC31B23C06618A95 +:10E43000850CD8FD43D568964E7CA52D99B9B65666 +:10E4400031C1DFA7CB09DC0B4684CB74BDFDEA727A +:10E450000FAF0074B9D8C3AF4142AC19CC44F2F449 +:10E46000666FF3E5D2902ED0C66BD86CB9EA60A285 +:10E47000A2E455C27C10A505BDBD6430EF81A32583 +:10E480000602442D6EC84086CD8AEE78848ABCE0B0 +:10E4900083413A2D490B19CEACB923CB85FB6C26B1 +:10E4A00081CD3CCB93477CF9E389914758D9A90D9D +:10E4B00026A125C9A78C9F635802D5D3624ED8D90F +:10E4C0004F9D46CE467B723705FBDAC1AF50E46004 +:10E4D000CF8A2E6BE1E1BF064F8007A933784FE565 +:10E4E000CA89F089BEF5DE9FE7D8547991B480D50A +:10E4F0006663435CE93AEEC1D2DEE6DD2E060E1716 +:10E50000892F2E59FE2B2203913A02D7D615397C3A +:10E5100043C9DCEEF0138B4C4E71477675F12054F5 +:10E520004D7E8069FE890BB9BBB24A68F2E63C1E9B +:10E53000CC1C0EDCC0410181799ED5D6E7493A7EDC +:10E5400095564AD7F5DE02573F671CB8CDF137859F +:10E5500027278E4100B48FF9FD34D6ADE511902800 +:10E5600066B8E9D755585B33B153F842DE05A2745B +:10E57000C83B60494E61CC9060F8F76578B8AFCB86 +:10E5800036E0F7241D991AAED695472F1C07E1AE49 +:10E5900072E405CF3E5F89A1732ECBFD917AD543FE +:10E5A000A42DD0101E64E990B78B044E0FD38026A3 +:10E5B000716AEB40C2517F3ED9B09DCFDE3E512003 +:10E5C000A8B0D4F52809692BEB1C0DCD561B2BD612 +:10E5D000E7C8D2C5D77C56E835B3D8A40E051011CC +:10E5E00020CCF532A5E64D48F66DDD59B6FD9B6CA5 +:10E5F00028586BC6F4DB934CADE805D847017F98EB +:10E600001F813FDBF3B34BDD82DA7B767C6007460C +:10E61000123F48FFAD052138775BE09914F5249F40 +:10E62000D5B84D8E1960EB4AAE6F4C76FB3CE47268 +:10E630001F04D505E7E1E1AE3287EC95F2AE6F68D5 +:10E64000A7ED6B34D35F7FEEDF9782E47D257ABE42 +:10E65000A75C3CDB2CBEA82A203BF8697D5D1D0F22 +:10E66000034299D6A2DAC54364018DBF1D7FE88DB0 +:10E6700089D1B99ECC024D82F5DE0EC97BEB5302E7 +:10E68000EB9426C34E2799D288D9FE54655791063C +:10E69000EB16D521F6999B3D2CC15367B326A1FCFF +:10E6A00067465C582AC1A4B18FB33CC607D1347306 +:10E6B000F129F3727217AB680FF6D0EA87D7A4A0DE +:10E6C0007A1E1BCAE8BCF95A5AC9FA18B29A05044C +:10E6D000F5A82E05A90E6564CDDC30A0E6F359B18E +:10E6E000893993E200F94A0DAAD244CDA8087E02E6 +:10E6F0005D4BCD1E3465C57CC54385BD109A31E5A3 +:10E700000E8E2D1A531B82090A055E47386869F779 +:10E71000D96D8DA43AB416FFB957FEB8027C2B4CC4 +:10E720000297819744A88ABB2C6DCF97F143B1061D +:10E730000F95AE10FEDD0048CF71AB929223428B55 +:10E740002CBBCD3239CFCB249195E2C316CB33F01D +:10E750004A32F586D94FACF5014583B805478F4D50 +:10E7600005AB5D563F6BF591DA49265086A7FA4511 +:10E77000868265E91F68B2060F324865EB3E84D693 +:10E780003F58BD8A575931F6A01238E91559FA1287 +:10E790002B9751436E8B9CC77CB81441884D6AAE51 +:10E7A000B34142298B517AD03E2E05818A9AF9AB2A +:10E7B000F0F6FC3E335262FAFCE752C093654668BD +:10E7C00019C8A41AAB0549941274779A1C007B29C6 +:10E7D0006422F0FE2DD13EA2634714FCD75572F09F +:10E7E00059864F1E1CF163D2E9D27F384E10BA4FC2 +:10E7F000FCA718E17E44D22E6B4467343C0D7B7D30 +:10E800007B862390B038A3DC3E12FD40658577E916 +:10E810009CE7CD4F7CACDF1EB13DAC47EB12ACC0EA +:10E820006A9469E2C97D9B0D7408D4FE3874EC2F9C +:10E830001EC3A096D06E745C2C18644C3EFE866697 +:10E84000258D08E340411EB33072E2B25F4792A9C2 +:10E85000B486C1583DAB18665032E082457C38A082 +:10E86000765678A2412A4736319515C03528F2B937 +:10E870004B0479CF8E408B06A8352B037A6DA563A8 +:10E88000B91B2867EF07BF246A109DE3DC198729AD +:10E890003F0CF7F9B50FCBF1725ED38F9CFDA281CF +:10E8A00020721F453929EDC8D6839AF39BDDD81D08 +:10E8B0007E5BD643255180D5D34AF60BD19079BBE8 +:10E8C00047498FA6B8CCE9F3A0ECFAE8F9819E504D +:10E8D000759A56F0B8A4E185D1B2829179B4481501 +:10E8E000F8A81594EFF5DFF1CD8089E926EB8ADAF7 +:10E8F000542E04FED0520394D4C7C8519C0F5E32EC +:10E9000032BE2262EFD390ACA8F41ECF68329D09CC +:10E91000DDB6FE331840ADE35634FD61D141E1F17F +:10E92000D78D9E59E352F322245000D6C14EC33EE8 +:10E93000DD8FACB50B4B327F220BB042AE9E8066B2 +:10E9400088B92CDBE8108DB5D77B81E0E080BD6A0B +:10E950000986DD1DF41A622AA2A9812066E62F62CB +:10E96000F1A75721FC26431280632554C5CAA09FF6 +:10E970003BD036E070B12F0512ADE89D98EB616C8D +:10E980001FD575EBA12470D65424CC78A0656CB348 +:10E9900087CAB2A6AE0D82FF7DF61B2814FD23D5D3 +:10E9A0002BE1A7246A06DA89A484B02816F4DF9D37 +:10E9B0007CEC57E6672751760BB50ED58A3D7A9BDE +:10E9C00098CEE598ACCB9E89BF5504E9236708EE45 +:10E9D000D5188F069EFC527A02D258FA30544099CC +:10E9E000159BC1DBCF235107C5AFA1A24C2DF6DD8E +:10E9F00026718C2CF29F8328E3E47CB465600E358D +:10EA0000B5376FCD07021CFB9859A023E8379FE468 +:10EA1000A7DC18E23565570AFD9FD36095389C7CCA +:10EA200021FED170ACE48E1693E5CB6B7412FA0123 +:10EA300017C9F64DC5C0979E43A05EA9DA83F810AA +:10EA400007E048E12E731FDDE37342EE2208907B5E +:10EA5000C46E1DF260FAB6E360D62340DF27C0E83B +:10EA60008EDDE678F3FC08EFD48F98D23BE67B4C42 +:10EA70008B52ECDF8DA72C06B1E97BE3A922C5728E +:10EA80003A9145D06AE45242FF1E3C4E3E06BEDB40 +:10EA9000CB51807D59E95294202026C532BE5A1AA6 +:10EAA000E6BD7DFDDA92EC168165D212D925A5DA94 +:10EAB000A34BE08A42ED6F08328BD3A2BC29D44429 +:10EAC00097C7D3263CCCF9FFCD1A5421DD9068AA14 +:10EAD000A27F1B0DE60C3BA0130C22A0B385C22B1A +:10EAE0005979A7D90B9D9BD0A29A25D9DCD2EEA04B +:10EAF000F2D164BC5B0A50A4048EBA46DB0845E43C +:10EB000037E6A8DBFFE276CCE305BB7D02C321A597 +:10EB100024F8BBB3ED5C1B15B5F806D71BBEC1D3FB +:10EB2000BCABEF9728077A82637BFC0A64BFCD9465 +:10EB30002A81A8F4DB5AB2634CBAB7CCCA409A8493 +:10EB4000F01A8F55ACE70BC7A2D6BD2CD8ECC57D0B +:10EB50007E51C55E431DE5670C0E5C48ECDBC80AC0 +:10EB60000F465B927164E3B601D6E41A60D15E167B +:10EB700075E06DE835172B854EE08DEFB10B79DF31 +:10EB80000EB6519FDC0CF8A77FA7DF59AEBF60948B +:10EB90000D45A201C3AF2FBBDA509B59156061032D +:10EBA0003F248455A5C8CEC486E1A0AF60D27F467D +:10EBB000F5005A74AAE8C15D51CE2E1E434271B7CA +:10EBC00022D9BE8930FAF69EA3DBB5BEAF308C7871 +:10EBD000E89C915D19C96A308F1FD5DF47B3FFCF1D +:10EBE000CF48A76FB475338FD221AEDF83A2531401 +:10EBF000CFCE6D09EC02DE50BC18351AAD5E6D4DFE +:10EC00005CFD6A2371A31F78AEDF35902AE21AD625 +:10EC10004EC6A4B589290E0F97D8BB5066AA61E8E5 +:10EC20002CA7FB54D63646E764798AE23650C828CA +:10EC3000669E2D323D9BCD31DA9C645D68AAADEBBA +:10EC4000C56CEB8179CE45138240EDFC2B87FD2509 +:10EC50003317CA18D0D8BE6C3276141EFFF716A32D +:10EC600067BDE5A4B0E4F7A091A49300953E10E140 +:10EC70004C35FAA479A4C7D55F2927C0F13F48AF26 +:10EC80002841E3936949BD4DBFA16F87BCF22CE8D1 +:10EC900063C7164662DE59CE27BE3F6F2D51EAB4D8 +:10ECA00075D41D16FCDB8D4DF8C5ED11330D6EE1ED +:10ECB000F7459C509E936C915809C2682712259F76 +:10ECC000D9176B2AFDB8AFC13685469BBD5715CE07 +:10ECD00029992F535579CA6E1047B5AA792BFB98FD +:10ECE000A2B7EAAB186515D3C4054985A417F3EE9E +:10ECF000C2B1A8377FB7268114C9A911237F2B90F1 +:10ED00009B041838E3E3858048130F9AA53C28E359 +:10ED1000E553F44CD2022ADEAEC640604ADD4B1702 +:10ED20008F38A55D0BF1B7E1F9DE526C5B296766A0 +:10ED30001D86345A609FDBB1243E0E3003031ED87B +:10ED40003F1375956688C70826D669F1A4E66ADE82 +:10ED5000AE9DD9813435711A83A6AABDD8431A64F1 +:10ED600076120A79C2221C8F6DF36810B139C97A04 +:10ED7000DFE64E3ACFB82D9F1696EF2468F4E06593 +:10ED800036CC85E691AD4F0BF84CE5ED4F53EC1CBE +:10ED90007027596529B82AAE64EDB1F385697AC444 +:10EDA000BE34BE58BBF3139BF647D04AA36C0B3955 +:10EDB00044F2399022ADCD67455ED6CAF673A46C95 +:10EDC000ED96D24C0FB8D31E20DD18E453DD5BED79 +:10EDD00017AD9527F2CBDFAFD9411F8881F0E1F065 +:10EDE000BB3BBB9515D5578AFAD82FCDCB9556543A +:10EDF00079C8E53A38892F08A7FA4588F8FA44A473 +:10EE00006A601C29BCED805860756C9BE65A70D214 +:10EE1000BDECB8DA784D49E9042C9E11B6F077AA1A +:10EE20001B8EF09906C7A8767F7AD0E83D4BAF9647 +:10EE30006057140234AA2F36FD24C4407EC0EFBFB1 +:10EE400069F9E259CF9031E03DA1C328D33284540F +:10EE500090D9F2C7F22B4FED98EBBFC6D50E6EFFDF +:10EE600047836934EC5FC18933EA46D6B158C29E04 +:10EE7000C411A161A516EC358B6EC1781C681465B0 +:10EE8000746637042D0B07A54038F5E1FF78B923E8 +:10EE90005C98A7BBCF3A9C960E4507E587827D8B91 +:10EEA000640D2F17F5CA1451723A56042820BEF883 +:10EEB000845E5E0733634A3FB867FC54EAEB73F93C +:10EEC000A72EF3DC8C9667F782C260DC3C1B0F47F1 +:10EED000A3F7D70FEB94A1C9D8EB5210B664E7E4BF +:10EEE000777232DCAF26B6BDCB1B43BE4D257B31DE +:10EEF000D6F69AB2B30371D09E8094EB94F85A255B +:10EF0000846E201474CE3F77AC18A37F2C06304C4F +:10EF1000F78240C8113FAC64CA2C7A597CBD578730 +:10EF200063FD36B89B638A7C35A84E2BEB40C997AE +:10EF3000E20CFDC0FE1A7BC5A094E49631A38F605D +:10EF400072ABD14413A9E9025656BA89614B28A382 +:10EF500025225BD144C9495B2EC8ECA92287D3CFB7 +:10EF600076F2866AFE0D8FD3630811330A7C3B0A62 +:10EF7000C6EC9707010E65DF788E7E58EDBB0F6FEC +:10EF80006631C3D4505CDE2F5F71C522AEE4D6AAD1 +:10EF90002305A8EBF048019C550BE0B969B5139126 +:10EFA000089C4DA96476F4129971BDF261B549BF10 +:10EFB000F15D78B2EC5BC21654835135988392713F +:10EFC00089D16C82886CA6892897031B48DB41771E +:10EFD0001C6BE9B106C716693ACE741131174FD3CD +:10EFE000CFE796ACD8C18EFED60F78D07004AD2591 +:10EFF000D8F11AA69B97D115AD96766D291B5E4E5A +:10F00000986018C5652EB51726CF4D919FC47C7B9F +:10F01000D67631F5E4D0D04E40669CE9DEACCA1D10 +:10F020008C4ADBA5C4954C20395E950197B8B1C0D8 +:10F0300068E460C802759BE5EEF2F6A9987C1BA90E +:10F04000C69BBFF3256813824C1D3E7AB2F43B0C7D +:10F05000874E07E56D2704EB7B91E150E66D4D741B +:10F06000549947A4C3A13DB259EF1A2E90C88C9D64 +:10F0700052AE9B240199DE37380E9684FD7B4BD42B +:10F08000D8BCC19D61661ABF5BD7BB24F290563BCA +:10F090007FAEE3029611BF1C97E035D753006E6830 +:10F0A00003C685EC9B3280057865DF0451BDCD8BAE +:10F0B000A27E9D910C76B2799A683F47A570C316DF +:10F0C000B7280682A93CF73D4B216DF561E723FA8D +:10F0D000A327364E9794C6DA35768F3CB7A708E952 +:10F0E0004D212CE39C7576719060F0D014DFCEC773 +:10F0F0005DC697332DAFE87F31772FCE977E9D8009 +:10F100007EDF73A28861CB0EAEB9E21419C007EDA1 +:10F1100000A82AAB0341BCC408D3E6F049AFA7E27C +:10F12000DC7EA118BE537D447DFAEE53A3C3D79471 +:10F1300074A4D45CCC417A985272B924294AEFC4A1 +:10F1400075D51EDF4BA2F4DD55219E119E9F946064 +:10F15000D165F58D7F35AC3574EA56C48A3ECAC98F +:10F16000A59FA07277AB5A9C1F95978FB9727BC3EE +:10F1700090BE2F43CF6D56170F93075F928B3518B4 +:10F180007AEB57144197FF8FCAA66D4E1C0CF39073 +:10F1900058925730BA7DF91F6B11F31F63EA14D5EB +:10F1A000BA6F97F1B4F49D7C8C1395AC3FA4039394 +:10F1B000E5D3CB740C5A8126D4AF8C3A0BEB70F6A6 +:10F1C0005D6C907FB2471DFF2DFDEA00ABE9D234A4 +:10F1D00048AE7F2B048C841AC8A6EF237F0C45D73A +:10F1E000B88082015DEE28F7E508D13CF55A60F859 +:10F1F0000C1E83C4169D5FDA22DC1A8835B2A00A81 +:10F20000324C9BEAFECA949B39A23C75C848255DE6 +:10F210007732B500CE0AD13C8EE061E71F0E5A2C42 +:10F22000E748B5306F9CB65F8807766ED36E435B58 +:10F23000D8FF719E905FFD35668983ECFA17CD1B70 +:10F24000EA723854E297D7E5C80CE2D76E0324611E +:10F2500081FC174872F2F46F610084C74BE7A28B00 +:10F260009D13ACE422E00085C9D3923BC910AB8367 +:10F27000D24D448CED70EE14AB13D410F3304C9E91 +:10F28000CCA29ADA1109A0A0C12A30D5106E2EEABC +:10F2900051939AB8FD4D08B33DC78AE49F9EC4D5EB +:10F2A0007640ADB4BD162B0A42FA531F5C2058B10C +:10F2B000E5CC2F39CCAD9FAFC4893D2CC39039E04C +:10F2C000D3FEAEBD91803E813FB9C89B6CD7CBFDCC +:10F2D0005DA1E60766D8091F3D08B547DC48DD2D6E +:10F2E00067A65C3054A032A9CBD733D63356C1655C +:10F2F000DDC31DF47439B55C94BEEFF6AD806D9F2F +:10F30000FD2FC06D0B3BB35A8EA07A2A988481F4EE +:10F3100016D5688CDDBB4B595384B59B2D84AD3F0E +:10F32000706D536F06585EE312ACCAF814A104F76F +:10F330003025807616BAF0057DB260E5067F21B1F2 +:10F34000FD87E41AE03DB8B8F8C992A2398ABAE656 +:10F35000D00DC5B4AB87C5735E14D7E418423ABC70 +:10F36000EADED7DAAAA280016B6437B8B74EC3DFF2 +:10F370008634CCF92D9938E822F321EBA49B32C0D6 +:10F380000C3F4662A3819235BB90019704426050C6 +:10F390001BD8DA5191010FE0435B5B8A3B81DAC6EF +:10F3A000EB8D2C23064AE0A870A2AB35D40F42ABFC +:10F3B0000CB2B3377AB56EB1BD9E315DE392B21136 +:10F3C000967F4B704179FA4AEC592C068ABCC0559D +:10F3D0002132FC589C6852B52DA30C0060F56B8758 +:10F3E000547A42779F2F04C3CC3F57BD63B78C7AC2 +:10F3F0001D417B56FF9B9369AE4D195A30BB636824 +:10F400002EB9C551A50719D36ED99B66CB42A23C34 +:10F410005D60DF911FA6F44ED0D056DCCE1D07995B +:10F420009E75D44578DE2FB629B8AEFB1CA8979BF5 +:10F430007F09961DCF5E4BA7F025E91FA8ED077247 +:10F4400083EAB0FE04F431E251470EBEF19904653F +:10F45000778A204F509DE21FBA71BBF7DA730AF525 +:10F4600061E1FF524D0540ADD43323B158AE328A2D +:10F4700085F8A97CBE5DFF01CCC3F79E7644BA7DBA +:10F48000261590EF7F5FB180DF185A467E07F6455C +:10F490006B8195A690BE794405B34D80BD63FF474F +:10F4A000BF912661D16367C0E70FF115C8D45B9B9C +:10F4B000F92D8205D3B84A50C3E0C28C97301F3E65 +:10F4C0008CFA0AEDF5359BF9F144A7896BCE2AA693 +:10F4D000965DF081D0503B26B05041786501FECA60 +:10F4E00024F9E33FFB91F13325967C701DAB8DCB66 +:10F4F000926A12916E99A61E5EC7770236D3A8B1A2 +:10F5000047E0BC48B77D078EE18881774C7EF97370 +:10F510005ECA89E25508050DE71899CF152D2B4CC9 +:10F52000400A8B63873E3C333A6812FEAACB8E9F1B +:10F53000EEEA34ADDFBFD3DAF1727BEF3CAEF1120D +:10F54000D250C7F9B05EF066A78150825D928EA35B +:10F55000765873DCA819B8B6E955250A2F7598D0E6 +:10F560002DFB562D8E8D1552B44409BE46F11ED684 +:10F57000871740F724DF4A69FCB2DD8F9067682265 +:10F58000AB6AA27CAB2079BC5D6FA743BE80B89309 +:10F590007EC8C12C7D4EEADD45B09F10F34C055569 +:10F5A000AEC8F2AC945192E8C36CEA409D56029208 +:10F5B00034B6BCFDC1DF6AC058226DD9E71531ED04 +:10F5C000706AD656F9F1C7DC9F3FD43236C98265DE +:10F5D00062842CB19BE37ECFB63E09E8DC88E274FE +:10F5E000A838FA92892EEFD1EF9E3A603C0E950230 +:10F5F000CF38CE5C952165DD2275359C1298A753D6 +:10F600003F7DEAC2D6223F882DCBC0DCC2F748DB63 +:10F6100004F32C2AD66C568A7D0C981A1CC4CE6A28 +:10F62000A5CA8AC461F81B5276BAAD6318C604DC59 +:10F6300060645F33C646BEF9F5F026E779A2F405AB +:10F6400083F2A7AB1C6F2335FE8FB596507602DD93 +:10F6500018CF8CDCE44A0D7A36CC68F35B7729F45A +:10F6600035E654CFDB820B21DD2A3B768148E55E0F +:10F670007D6F6FC480207D6E96434B72B0120FDC9D +:10F680005FA8B10DA5BC1F777D344D89BC759B2348 +:10F690004274616580EC0D9C6595D3B4B739A3E7DE +:10F6A000158860C50BA4C326C2AA3A0B2D7B041E85 +:10F6B000BDABBF2B3EE68A54C82CBC56D108D5182A +:10F6C00046BE3C7991F7B78793B78E23EC28B14CAF +:10F6D00022345377840E57FEC136D71A25A59C3C99 +:10F6E000A166955BD1C1AD6352865D4F231966ACAF +:10F6F0002D9FD1E71AA68DEB80D2C68828324D56B1 +:10F700002EF65106AF4C1DE5C202D528B822ED6693 +:10F7100021E473FF3781BBDE92C3E2AA6A0BAC5AC5 +:10F72000D70786A4D5679F4286F81EF759A6DD47FE +:10F7300011584585020DE62E116AA1FFF04C78F6AE +:10F74000C1B8D824A2A2ED02CB2A31CA8108DAE1DD +:10F750007673CE2A98B95ECFEB1C8296CC5635EBE9 +:10F76000127AEF2AD8A995DD9DFF688B99D3211ACB +:10F77000D89B8A5A5280CB80F46CC86B2054E31318 +:10F7800008D0F2A6654FA777011BC18313675D9C64 +:10F7900030D488F20270525C6C697FB7927AC9CF1C +:10F7A0000C79D04F67E06E64D9759ACDBCA4A7A33D +:10F7B0003B18EA7D97B8F0302374711081FB1878FC +:10F7C0002BB111E25467FAF00E55168B949BA48E60 +:10F7D0004CAD9D7E635B55713CCE9ACEE30AA6DAB2 +:10F7E000AB1D36E464569ECB0740A4D3013E2DD713 +:10F7F000999501269601C083EDAAB3997B302AB46E +:10F800001A0C1C663FC29F157B2C10F47859AA5C19 +:10F810007DA14E56DB878EA10E616033213C0A9399 +:10F82000C9DE2E597F37B0670931DEB959C5BCDD55 +:10F8300001C583579B1CEC30DAEA50E15C1413815C +:10F84000DFF253DD20D0BBF50D40BF48D22BC29D67 +:10F85000AF2224A13EBCDB195AD759B328C3DB2BF6 +:10F86000EE2BC20D46C3D2D0D93FA410DA0E2879B0 +:10F870001F89792FD0B2922B6A195F2628553851EB +:10F88000D7036F341CBDDBF511FD89F0260B8BDA35 +:10F89000B76CFDBA59DCAC1995CDCC87349BC4BE8E +:10F8A000B74893C30AB7B2D6A421D2518093A447D4 +:10F8B000214830BA474B0CA03CF8B9C7AEDB3CAB93 +:10F8C000C92A90A675EFF3D140CF938103EC6B600A +:10F8D000DD72A11DAC65D255CC5433AC31FBC61ED4 +:10F8E0008E20A7D46F6E7FF4C85647B2A97A8CEDEC +:10F8F00046D3D4D4231CF66EBC5A5AE9234273CDA6 +:10F90000C311A3C9AB1B51D5693E3B4C98619D5DAA +:10F910001081CC7C050D779FB5A679CED0A6DB6390 +:10F9200014315E3126136213DBE050C11C13673DB6 +:10F93000CC0816D5CC4B83145FEA36BD0F781FACCC +:10F94000588B679C11BC0683175E3A3378B1A53398 +:10F95000EDFC78BA56D4F695B711EA51821B4D09E1 +:10F96000ACB07EA299823B6EE0D4859DD4D8CCC049 +:10F970008CE9EE7DAD72CF24897AB320B2495B2346 +:10F98000E81E2302970FA0890F382BD3A978DFE355 +:10F99000336A2084F53625FB2F0FCFADDDA0AB2DCC +:10F9A000B4E7C5719F6176C639A0EC7BFC2370C9B2 +:10F9B00042CCB858BB228577B58C3F5D1B034D8E7A +:10F9C00050C04ECFD2ACA38644BFD4BAE5BF5CFED4 +:10F9D00072FBE9E08E81D1E00A3D8C0CF9F60E91C4 +:10F9E000FA0BD8AA42D02CA3585695AEA303DD0D2E +:10F9F0003E70F7D53CD2B996F52ACFCBB6AEC65EEF +:10FA000031863E433ED14652AAE93D4448F0D12DCD +:10FA1000889415E3ACBDBF54236B70EEECEF0C067D +:10FA20002CE3DAD7181EC05C0866082C701F7EE530 +:10FA30008504510D0A91DCE7DE32FACD206454587A +:10FA4000B0603DF7136A682FEEE67208FEFB454B87 +:10FA5000200AD1D564B97F929BBF8719C9F9E3D336 +:10FA6000C7524AA970C20F34D695D2A81499939060 +:10FA700006078E5FDD01E6095F041C00A49E19B72E +:10FA80008E96790C69CF3021F5EED65301C472FC05 +:10FA9000D2B45CA5761E1795C8B7B103EBC29AA67F +:10FAA00085D61F3C89EE251FEEDFFA9A5498B9C718 +:10FAB0007BE03985F43AD200A9E0FDE233B6DD2ED1 +:10FAC000041044EE89F07D8304995C4EB50297BB27 +:10FAD0003551AA6BBAD99EFB20852E5D71F22DE5BA +:10FAE0004B913D5FFB9EA835D3F1B976B088D4EE3B +:10FAF000AB1F8B318168A3CB39DA98C3BCBAB7D0BE +:10FB000074731934C6BE716E8C97C71BB2A40607F6 +:10FB10000957AE8BB2F6031186349CCFA212F81CA3 +:10FB20004FD72BA7AF4FB39F5D6BD14DC4B7CCF56B +:10FB3000CEF6FA0CDB7576D5284170F55314D22C2D +:10FB4000124605B105B725392B7D7A751EC1DFAB8D +:10FB5000C674896DFCB218FD8755DCE59533BE7817 +:10FB6000B684331334B3AFBD745494AF83EF363CD3 +:10FB7000AA35670B301756E3EB047D2DCA5E2C7C4B +:10FB8000190F9F6FFBBE6FA9F20C97F8FF318CF332 +:10FB9000FE83E1B02462792CF8B3F76BCCCE164625 +:10FBA00024E7DF8C9D307D1A9294A58781EA830635 +:10FBB0004DDCB4373D6A79F95DACE2312CB182A7F6 +:10FBC000EA9FFE869BE40B746806E47829350FF8FB +:10FBD000D8054F2E6937F51338F0D2B8D3CC99BF7A +:10FBE0006DD6D7B9B63D7B6380348B20350E56E396 +:10FBF0009221ADFF1F6CDCFB4E0856EDC177BBE3D5 +:10FC00008C55C5E4415ABE2131A6F0EB9CBE609DE7 +:10FC1000C734B3F7A2E166552523CEB9A79E0C30B1 +:10FC20004238B033468C7CEC6FF7F8A24E34D78460 +:10FC30008E06B32230A29EEFB1CAD899B3302AF211 +:10FC4000824F0A01C62D76384AA223C52FED15E84A +:10FC5000DA7D3ACF67E1B4E2CE1987EB511A82D947 +:10FC6000247DFBFCD4FD5D7AA5C3DB607E67E4499F +:10FC7000D9C84603549F20F54ACB5C619C85F68227 +:10FC800032956B861197A0085A9AE5DFD48AFABE9E +:10FC900014E7282A3E47CD8DA3F388F24F9703251A +:10FCA00047F2A74F66FED919014E7A5A168B1C628D +:10FCB000C7FCFF4552D5ED2C4293423E088B4FBF07 +:10FCC00012D5BFC277314231C9092A02C6653E3317 +:10FCD0002D3DAE523FDEA43F5D047D159B3602CD27 +:10FCE000E98536C9147B2C9B0CFFF08FB6B0075208 +:10FCF0009F0FCAC8D9E98732764D57273601E94D9B +:10FD000022B37698C804BA52B4EA5E059B9764AFF2 +:10FD1000C4B434E8F02B9D4290915E77B641E24046 +:10FD2000DD1E857DD17941CC6B2FBB907F6915E9B4 +:10FD3000E9AAA4B775D3BB8E5EE1923BEE561D587F +:10FD40008A6F46D1A8BA315BD3692F81288B74663C +:10FD50003CB406519B9B14255C4FA82196863549DF +:10FD6000C74EA9D6D966562A235BA79AE8E93A0175 +:10FD7000CC871ABAE9ABC433147DD775774673655F +:10FD80005A7222AC76DDDD9D80D5C7CCB5AB9C53D5 +:10FD9000E0D06EE377D8032D9A15BE64A2ABB367AB +:10FDA000693E12D17160C98C52C5CABDA0BFE13A8B +:10FDB000A33829F61775AC144B73267272A73D1C35 +:10FDC00097467C2D1866C91AE7202F19CE9A62E74C +:10FDD000D7C2D9E660FB178715B83DB52544470B58 +:10FDE000F816AEB2EB982877A069D8AF6C33CDCBBC +:10FDF00051CFC739BE5A78ADEE9507015C6D887456 +:10FE0000BB5E4987904CD0E7B52E9D76D15C6D28BE +:10FE10005ECB37201445ADAF0321FA4689C1671385 +:10FE2000A26FBB8E5E14811B6417E9E31968B0BB37 +:10FE30003C6BB0615F4CC4411F3065B9C91CC09BAD +:10FE40007BC0B484EB543F678B8A0403C3798ED1A3 +:10FE5000CFD974ED9F623BBB423056590862127F86 +:10FE60005C341832C2A2DFDCA76F7B411D873AE702 +:10FE7000F972944B0ED1DB7A927E8C7A7B660823E2 +:10FE8000F717D043D7C104DD9546A837338ED2CFBC +:10FE900093D0C501B2447582951C9CDDD5CC5BE93D +:10FEA0005CDD9E9F0C1581DE6505519E9344316794 +:10FEB000709979B33A447D2A2715D31AA789D0E3DC +:10FEC00085A5C574CF74420B729556D2BACD688B96 +:10FED000718C49B890FADDC70F7F042A75466CA66D +:10FEE00077B4DFD0A7B80D886AAD957A06A1B3D3F1 +:10FEF000F03DFCC696C0516932A84D4A3284C8B361 +:10FF0000F926E8B9C301729973993391EFC0709CD7 +:10FF10006C3EACD3A36E0587D5BFDBCD68473034CC +:10FF2000ADDC794C715D2DB74BEC281F6123AC0E15 +:10FF3000AB1FF6E5B7EF07C719B247145832FB23DA +:10FF4000BEA243B3CA1F87339FEEEF3B8114F5195E +:10FF500009E9132BD03E07F298912C6C78875796BD +:10FF600000D09BD4892F33A74A17AD225E01090C1C +:10FF700089B78E2AD658A41EB334B1F11A6C28EA78 +:10FF800027F4AFF457B816BDE497DE0B713844037D +:10FF90001914D9813CB1BBA4D24E5281C748F38E0B +:10FFA0003DF03334F267A6F98F9B8515A7DEE05448 +:10FFB000D067C119AAC55E65D695160A06759B6BF2 +:10FFC000E31EAA9E502EDF8C8646973A7D43049707 +:10FFD000069E7C6DF8DC8120335DBAE5FF35058136 +:10FFE000974F90EB5CCAA27B7483BBAF8A002980D9 +:10FFF00016F5582739AD4D3BB602D746229D97C11D +:020000021000EC +:100000007ABA326087423C733E6C95DEEE79791D98 +:10001000354718D5AB7CCC151BB4F396E656A28AAF +:10002000C4172DB1666A7555B507959B5A1FD7DD64 +:100030007136057D025C884DFBFE8D5BF7A1C231F8 +:10004000A904E8A5EDC78E1FB569C6C291A3944D5A +:1000500090CDED2C5CC5BB68B51B8C13265A517432 +:10006000B847851A0EF15EE81FA72DE5897E945BDF +:10007000BF7E7F942392ECE762600F5101DB81A881 +:100080002CBC5DBC21B7B13CF58514D96F7D539371 +:1000900041BA12FEEEEA23D5B06BDD909CEAD30D97 +:1000A00005AE360CEA7026C0B34D818EB6644D782D +:1000B00031F420560C55EBB73D7D1887A8D5973CF9 +:1000C0006417503247C756B41C7FAC45267F681D65 +:1000D000C751B9D069BA791A072C4EFB67836EF302 +:1000E0008B6E47E6B9480BAB2542022710644F6E72 +:1000F000B72DD3720CC4B276FF5CE36393E5E109DC +:10010000D8254084265BCF4D474E4B963256430848 +:10011000CCDB34D319CDC1469568C8FD0EFC096A05 +:10012000661F8F004FD864BBCA23A40BAE61D43DB9 +:100130005DEE15D79C019BE92512354FA175982DD1 +:10014000A630C9A7CF4DEE45FAA9B7989B7D7F1C75 +:1001500099283C09EEF1938A53EBC105DDEC3F672A +:10016000E26DDA5BAA8CF04227EBF28ED314E462E4 +:10017000E75B223CA4334972BEDADEAA455E93B641 +:1001800048C53025FD11B5CFBFDF681EFB4A1A8A6E +:10019000F7CBAD440A3F27FF3736D7F9CD7CC527CB +:1001A00097CDFDB3659887D38CC2C2AF4FF0F5E908 +:1001B000E7FA039371D3835DD88D3BEB9FD6AE886E +:1001C000447424FB802264E197076B8C87C78DAC55 +:1001D000FD6F01F0DD1C9A0C4B8DA9CD8E122E1FE8 +:1001E00063A1241F1EBF12D10B1A2BAE1CEB7E562F +:1001F00078A9B7EA1F7A388C1DC18A1328B4303920 +:100200006949ABB67234BF1733FF34845CC65B9365 +:1002100015FB375E3BB1C3DA5273EC3E2A461F92A0 +:100220006CE3C058E90B1C061E4AB6C54F9FF20E80 +:100230009B3E44438B0C92CBF832E6709631A32759 +:10024000FFF873E9CE5B3DFE10BCA14EAF31135DEC +:100250007934DE2F4D046C2C6C81FBFC81F185F12F +:1002600010997DE438FA0E71A4E8D955ABDE5B84B1 +:100270005DCD2F387F06CBA416A6F3604BD35D1659 +:10028000EDF8004C82B5638F65D49BBBCCBFBA88B8 +:10029000DA1D7FAB31CDDD3D9C82710A31413AB22E +:1002A00030EBA0227786E07B34C0E53E69A731962B +:1002B0009E4C863EB640789A23F4D77398583D27D3 +:1002C000ECBE9240E7599640796C62B52555C8CD91 +:1002D000CF7F22C6312379DB862D6E8FFC7C35B033 +:1002E000F0A1459891B5909BAE94FE45E88EADB5D2 +:1002F000C07741479E33A44E93B2FC3A4B309A0FDD +:10030000652A4F0A39EFC453CC850166BFBCE3535D +:10031000A6CD0F35CE9ED6A78E17EF3810BFDD0CB9 +:100320003B336D87BA9F9E007DD486D6878C44DD93 +:10033000B45EE1711E737C705173F9EC2A54B5F60A +:10034000C33EBE492A66D5536AEFED5EB0F327DDA2 +:1003500089D63ADD20180808B1B39B0BE5B409ED46 +:10036000CA7D9D5683FBA20354C6169DB13BFEEA8F +:100370009AEB7E0247973686E6CBBA30AA5A6EF6DB +:100380009801CDE72E2E8F177EFAF2B585115D7399 +:10039000E43A433E8440BC7AC6E592994215D26164 +:1003A0003EC81B09C822A41BF9731A9BC797859ED8 +:1003B00044F3928E36BEB926F8FFA8629873DE2BFE +:1003C00076B6EF8DAA0A2F759AAEA92FD35BC58397 +:1003D0001BE7BFBC683B3F82A6CA5E5ADCE9ACFFA4 +:1003E0003EBDFE2DAC890E6E8540965DAC7C6820CE +:1003F0004B8BAB3C4D943F468C01D69618182F8200 +:10040000761677990868729DAE074CAA028712A4E7 +:100410007B2082B811A6DD27DEE29D39F0ECF03BAF +:1004200066DBFC0835548AF4924B844E7649260AE2 +:10043000AECCAD89C2029A551853F64581A63E55F9 +:10044000357DF9625D76107CBEDD45994C4B6B17AE +:1004500044F107DFF2A78E8FDAAE3A633DBADB16BE +:1004600011E97E540D4C6D5C60E71BEE39E2769A23 +:10047000933B8448884E145B66320F5E4415666178 +:10048000A9DCFA522FB59C04C6079451888FA55C4D +:10049000DF734B5B6DF64563D41B133D84CB2EAEEF +:1004A00011A4B960332A1DC5022BE7B12AB2F55356 +:1004B000785A13D07BEECFE48F9FEBD17F8E2ECB7B +:1004C000D7405761B6680B0B4F3F2B0EFEE301C6BA +:1004D000A631E02071E15F905962ABF2B3F858F1B8 +:1004E000F7E2C7ABDB85BE503E5C31616055B4D3EB +:1004F00085B1999820A81431219811EEC4B712E95A +:1005000007DC904493CD28C454FC305D3E97DF85D2 +:10051000651DEC459608B0D3AD3FA5DA539A296B1B +:10052000AEECD4458A47A58EF87C222667C218B562 +:10053000C759202F2C31AF962DBF881D9148903779 +:10054000D1D2D4A96FACAEAF5D87C76A31792C79AF +:100550002C402D4D07120F5775BD1A348604E27AD0 +:100560008C6E8DC2633A2155D5A0250611DDADB73D +:100570006368B01A7BBA7570CFAE85BF669BAE322A +:10058000A55AAFC9AC54A70D442982D3A08CEA7AEE +:100590009AA9D62F79A753C961F81462C1A370F53F +:1005A000CCEC5AC4E3459F1C931B5A880919D40606 +:1005B0005AC1FD977BF3D56A7914CAA9CC3F22A70B +:1005C0000E90FD45D6BF929D0B8F0828AFDB041E11 +:1005D000F00133339BC40D6B873A830081C4DD4245 +:1005E000F1B069E5405EECBD8CFB9FF771133B7881 +:1005F000E96A08EF40DE41051E72E5F5D57DC1D8F8 +:10060000B9F1863C9C4A28DD43F123A9AD1324D1DE +:100610009F370B332948E68D1058F4B7FF65C66E37 +:10062000219B532B39B0CEDBDBBCA8CB7CEB511329 +:10063000D266E4AC4750DFAAFD28D344F9E2F43097 +:100640005208CDE3B32DA63C031A03CFFF67558AAA +:100650007AE9AB1AE8692EFF9AE2DC9839F7835EF3 +:100660003C5902065CA15BCBEB50B6F5B6B46BBC53 +:10067000AF05C5824E77968E38FF01FFA4B6D28BA8 +:10068000CA086775CE4951E7C573DCE32AFEB95A3B +:100690006B3D4716A34A312FBACAAC4F1DFA151845 +:1006A0007ECC33A79B7265594C5CF76DF10D222609 +:1006B00001DEA023A82BE048E69E5409C1F5FDCF3A +:1006C0000FB4DC34003BC2D5BC947554C3207D2BE1 +:1006D000D5BE5D6323C88BAB67BD5352D5E4A51F60 +:1006E000C6A34CFE5BDE946CB6F33119ADD07542F7 +:1006F0009F4C6A0608C8203790BCC84C96F35751E7 +:100700009BA31DF779F957F8910F78AEB63509EF2D +:1007100055636491337293620408BA0684AF712CF6 +:100720005403BECDAB1AB9D414B3159448AD9A375F +:1007300095E686746EE51B8D7CC08EA72C591AA198 +:100740002895F548A5B82F7C531DF1FBA396E283AD +:1007500013DD20566DC349D9900B2D04880E1CBFA4 +:100760009CDB2BC8ABA75B5FA266C8E9E73DDBD586 +:10077000A7EDC5FFD98F4C66095D9C92ED51C67EF1 +:1007800050565854C1DA02B4BA02F8E3B61D5828DC +:1007900060187E6946F70813F4A46E25E6580D7AB2 +:1007A0003A3321B73BAFE2319FBD8D089061E21033 +:1007B000B2141799BFF03DA31EE4728B8DB8E864A4 +:1007C000B63EF2D17C1F616BDC07B9BF8B9AECB3EC +:1007D00074E020802EB404BCCB1477BDE4B32AC5EA +:1007E000290A5CE48BA2A317A2A7E1DC0FC9874406 +:1007F000AE445C2F72C7F22242C6EA0199FB7838F8 +:10080000F1616FA2DAC5007CE7B1D7D37384B2BAC5 +:100810005380534FB7EEE8B778B1DBE94473688192 +:100820000239D3CE869DAE6D17A120680CB35392CA +:10083000E916F74F643DA634DCD5F471839EC153AD +:100840001ED8AAABA1744A0FE6937BF99EB5C5A743 +:100850003254170CC3B879390761A33938FBDD422C +:10086000E18431352C0ED2471230415398FB00936E +:10087000F48C8F9C6B0A76273309CF18ECC7D74BC3 +:10088000994D8879E1EB836D81D62388154BE54A34 +:10089000C0FB0C3B2BF7CA2755032FBB456F913A82 +:1008A000540008A482772C9224BD8056EECA3F8B58 +:1008B000F0082C1BC03F9A371BF969D3FEBA83019D +:1008C00071B2FA9E5C5430013428C629D6FB9B5481 +:1008D000B1407FB41B1C99D2B831B1ADF5984874C2 +:1008E000998FF9B216040BF00063D9043380C55E0A +:1008F000E0BA31866D57BF50B8E8122FCEE2D8F675 +:1009000023FEA2E5916C4AB27262372AF486E5842E +:1009100074EBEF26A95D4E71C29C38BDBCA1F7AB4C +:1009200028D39695948655AB4304E142D8700B19B1 +:10093000F9A19DB8A964C178FFE2F32169ED40A750 +:1009400041B4043C6694F547E76648729C15FFE4A1 +:100950004F60719205A0F08D74798B58F2E36FAA05 +:100960007AD5D7EDFE86082731FD841FC408F836F6 +:100970007DC21FFE6E0BDE09CC400497DF1DCF1732 +:1009800057DF8EAD80D59A03748689A3521F38F342 +:10099000CE1403B8342A75B70D060907CDC6B222A6 +:1009A000B0E5F5BDDF7261BB42DE127CD0E37C4D69 +:1009B00069CD15011EEC4CB74C6BD0E6C08E55B717 +:1009C000EDAF5B9A0507AE3CC68211A1308F06CB16 +:1009D000D8F84F44A71DCCEA9B6DA90D48712C4552 +:1009E000DBAF234FF9EE351534D859F61298EBB03A +:1009F0008CBC710C8CDDD97937B98C1138F6A2B06A +:100A00005619F6BCC00F8E07460130C9E09768DB67 +:100A10009C606EFC8FD582954671566EF368A1F48A +:100A200009B69B74086A33E9DFF9BBD899AB465520 +:100A30001C9EEEA56DD976689ED7684293E6C344A6 +:100A4000AC0D987C57E5664A52F1FE3E04EBE67524 +:100A50003323E185A32986BBF1AD0C44561C371422 +:100A6000B9F967716450CDA364E4619295C98C5E55 +:100A7000B1566A542F36044DB0DCF062B5F68332BD +:100A8000247A78C548BBD0FDCFA11F813C3AE5F15F +:100A9000CB3151AB76CE359EF386069C55B9563692 +:100AA0001E005ADB9F48B944BE139D6E0125480DB8 +:100AB000455A3DD0767E65E88C11509E4FEB86F905 +:100AC000B58758DAA6C91E8DDB313733977FD80634 +:100AD000C1BE7C3667E90EAD91AEABC9EC1DE66CCC +:100AE000033B733561998101C3E4B7931334BACBE7 +:100AF000CA76011E9A19239F497770F27701266BF7 +:100B0000B3149F0D0EDE85723407BE88785DC14D2B +:100B100062DDF0FC642CED6737AF6DB0AD8E8B7885 +:100B20008B55EE5CDFFA721D0BA95A2513415165F6 +:100B30004CBC41CD6DED59D109A9BACF0A363B69FC +:100B40001A0FCA93DB4804D2B5A917EC18684EA255 +:100B5000382FD4C855F722A52324A3ED652195E2AB +:100B6000D078EB85C3767A8601BF11CCD467DA8F53 +:100B70002FC06B8D3A2D22601FCE12253C934B0C5B +:100B80007FCCD8EC85C43B1429BC504630DB409662 +:100B9000FE02E508A7D7F5959F46003170FB00449B +:100BA00014CE1C562C52E6B118FF8BFAE62609F833 +:100BB0001AA95DF1F7183CBC82BBB4BBBB824153A0 +:100BC000270500141B87D6FC4F3D2AAE13F73C2D9A +:100BD00039D69F630CF84BD1FC2ECEC1241A9A9FB4 +:100BE000C8C09047B51023982BD23B53A09DF76EF9 +:100BF000F09CB11DFFD54A2F45482B2282E8F44CCA +:100C00000BDCA9446C750B166E49D2B05BF4623CE8 +:100C100020A85EC5807ACB5401DE60C2C7AE6FD912 +:100C2000DE260B73BA43FBA37E0D88F28729E1C24F +:100C30006633853EA72641D4DF29D782EF16886622 +:100C400041279E3E4AB0C6683854DD1222F5213F46 +:100C50006DC3232103D8D69F0B73D7B209406750C9 +:100C6000114AF7ACC0C5619777D51959241FD149EE +:100C70006C5D52A145279876AAF8E648D9203351F1 +:100C8000B4F99BE94EFBD669F729C433662907A25C +:100C9000A6C4E927B39DEA9B63940E00BF6AD0F215 +:100CA00012B96F3A2FBC0E46AFD03A1F1201E2FEC6 +:100CB000898DF592C3271DD0CD43C9DB7CE1426A03 +:100CC000CA95A35E62368C1FB0AD07496E85D5CD3F +:100CD0001DBCBA59F4684F82C98171C7EBE25786CF +:100CE00006D6155A44A06AAF937996B06F1006489D +:100CF000A23F903D8B46FE96FC2B85703BC943CEB0 +:100D0000381A9F3E050175A1AE30BC1C1FA7861C7A +:100D1000A7D53294D60C618240EC4CD7291A2828EA +:100D2000709454A9DBF641EF02B0E7FD16D07C4089 +:100D3000C0D21306628ABFCC20779571AA5273E69F +:100D4000111B507637B7E7CE73B6D82D60BCD4AC44 +:100D50002E20CEB1363842B3FF6DD25D3C615FECE0 +:100D60004400A35F32A37C42616AD528601BDD5733 +:100D7000B17DD82BB0A8276B86BDA53CA4FFB62DAE +:100D8000E248F142A78905BA1E0FE399CE04A9688B +:100D900007568C2360FC2B5C899301D6709791A336 +:100DA0002F524B91E19B1F012BFDA40FDBDC94C262 +:100DB0006802B848B5BA6EC702BC60FE9CF08152AA +:100DC000EA0F02497B054C57CC1454B91E0D984EBE +:100DD00052F4FF05FB8E73FE00C1FBCB86CAD01513 +:100DE000057192CD771F2BD6738FE2570C5EA4034B +:100DF000F0CFB7263ABBD87D45CEE65767051395A9 +:100E000025777E29B2890DA1493F051531A85D18C6 +:100E10005468BDFEB8DD668B1AD60C8BA7C4221AA7 +:100E200004E8854D16F969AF723A8A7F4AF21A8151 +:100E3000281B7FF14834624DB4EACE7E8220AD2378 +:100E40004DABD0BB0E1524E32CEC92EF85F4A396AA +:100E50008DF1F31122149CF077E9B40F1583A734B8 +:100E600014FE6424D373CE9F8033E95BDE817F73ED +:100E700085F2315BB2A34BE718C9F5F1F2BCF30878 +:100E80000011B67BFAE498DE0FECAF174FD73F7F27 +:100E900039FB4810D4BC838F557727391785AD6946 +:100EA000E2CEA4BDCF2ED97072F918653B1E930413 +:100EB000F2BED94502071D35A6B1394D026DE25D7E +:100EC000A0F813F0E3D95EADB1A284C9CC85A8D84F +:100ED0008CB9CD19B6FCF0E0FC5B2FF073C410C1E7 +:100EE0005399FFE2F377065858F520257CEB7F5E97 +:100EF000A39585D41C39AC1F3388811978041086DA +:100F00002704BB921C29C8414DFFEB569273A5C123 +:100F1000A6B216679414A2A8E87266FA6A550C572E +:100F2000BFDCD65474E8BE1259EFFDE471EF1EA980 +:100F30005749741F56A528BF13BFE2B8D94E40D8F1 +:100F40000E05690AA82B0762C441751C37D0D93F2A +:100F5000BD65590612C4B8193317C01A2DAB0DDA86 +:100F600058226E42090FD51F2449A1D02C2E3C6D6A +:100F70005B670E4E68E9848C77B575E001DC6C1315 +:100F8000DCB8E3031F0891B2531F67499595616967 +:100F9000E52CA9AC2CC4E12A9571F5BE0DB0D22880 +:100FA000A757F1718658D14AB399ECA27AB55E85FC +:100FB0001A85375937B745833D9A5EA1A334C35488 +:100FC0001E70B6577927F5687C81C05974D94EBC1C +:100FD000E9FE36BBA387FB53EA8A033A09B7F0F26E +:100FE000B8E7782EC56755F69B1454632ED4CE36D9 +:100FF0004D557600430073AE700404B07851E32879 +:101000007520BFBBBE1A35FC9CD6104B3018E2BF12 +:10101000933CA79A3D435893866FB33DDB090BF58C +:10102000ADC462B73905E536311E4E8BF1753B8292 +:1010300036DBB59698CF16C3DBDAC210EB7742A841 +:10104000BE4E658D1FD88EC919E8D823572EE712DA +:101050009FC41038035009E093A931EBD13BED5404 +:10106000FE89973A53E487FB72E7712B4AD398EED7 +:101070009A351EBC680CD391454B80716917BCB77B +:10108000E31CBF36CB81FA417025BEDEEAB049963B +:1010900029B69ED6F7F96E03A4EBCFD95E00DD5FCB +:1010A0000423EFBA8D3DC0107393FBBE321024B100 +:1010B000C77B2B8041B83EFD08DA9BB1FF766A33CF +:1010C000D46CF97057E1530BA9432DA156B045B626 +:1010D000D2FF0B831ABFBFF5249A0979F2D081E2BF +:1010E000F038918536DCB3AABD814F2E8D1388B9B7 +:1010F00091CC0C9A8EA1857CBB03B8F273A53C22DF +:10110000DB4E87AD7D339A243306F8BD619C19AD63 +:101110007E07EBB0633264641DCEEA8DB01C898D0E +:101120005BDCC866128407E98E8828DC8C2B34AF20 +:1011300013D524381AB19AA246080D120CDD11A25B +:10114000F925560B7A2ECE2F6C82478AF409834EEE +:101150009031F6E139C767465C63C1B19D82AADA76 +:101160001E5FC1FCBD60E365779AC7F01F80E33E58 +:10117000986B1D953E1A9B52E64B904086648FC932 +:1011800082E4B3B72D2E143450F912DEADE6A9ADCA +:101190004E4E2D865659B164767A7F98B071CF2421 +:1011A0006AF401DB08ED15482536D7776E42FEBCA0 +:1011B0001C2156EBADFEB64184878B866412E9A9EB +:1011C000808F180B1262FE1366A54BCB3BD47A2995 +:1011D0007CDC1CD16DF9FE9311F1B0FF6D610E57EF +:1011E00057651FE351D0EE8FC9B7FBFE58234C4C17 +:1011F00049234CE46C1DA0D7F39BA7CE72C0A34F2C +:1012000072607209411968B56A8260E44F92747C19 +:1012100083362F275D96A7DF8DDC056DCA13E8B2F4 +:1012200033166A14733D15B0DE5C5592DC83EDD441 +:1012300087F80C55ED0383E9E6B55F54BF414CF6E2 +:10124000332981E0283A7AC9D6DF94F32241FFFDA1 +:101250005DAEA57C4B3FDB5B42112F7FEA7AA4B8E1 +:1012600026237BB6226D48BA31446B29547B5A57EA +:101270009EE3AF31F703944F52542729570919348D +:101280008DBA973477465061685000F1DFF37ED70E +:10129000D89AF868DD577F39B02F498DA7869F2EE1 +:1012A00062F9AE69E55311D488CD682AB1CD07172C +:1012B0005514DCBF8FC9067A54045421B700F5F5E4 +:1012C0005D1256E047E2C2F00B3721D1C82C49B27B +:1012D000F77641C5795B7E3FABC25648D5CFF82B38 +:1012E000925935116CCA50263EEE40A1990CE1ADE1 +:1012F000477DA787440BED4CC254AD003E1A41898F +:10130000A94B7C5B12C3B5B4C66592DF278BC0398D +:101310009E99772CA4CC08ABA46517FB9BB1DC315C +:10132000C4F200016C890AEFF9A3CD48D5862328C1 +:101330000C06FAC7C3368B692AC0822193B230CC1F +:101340002FBD1A8174D0EC91CCABB07B8FBA7E3DAF +:10135000893A6D0FD73D55B2BEAB2578DF787E0157 +:1013600093E915A876FD756C45B81D1BEF367C64B6 +:101370009FE4088A519DF1E8908F6B6D2F1AA002AF +:10138000626BF78F8B61D20DE095A92C90408FE3B3 +:10139000245F4166D82A88397DD568DA82738A93BA +:1013A0008C7B7ECB4A525BCED61C3C19764FAD036C +:1013B000480F6ED1F64C503DE1228FAC20EA95CD1E +:1013C000CFCC6ECFCEF93B30580066D33249D1AD89 +:1013D000A98D5E2EA76414C8D834E88C7A8BD856B1 +:1013E0000562F6003F9001558581069F506B19619B +:1013F00093A788BCF6E0FD41516B4D721BAB49B41D +:10140000EC5B121F6226E4E6909B077F8CBFA8EC82 +:10141000B240BD3E2E38C05E042B9876503A9BFFFA +:101420000F1DE41BC2CEE4DFE96A51B6A83EED30E1 +:101430001DE6A315E3DC71A0229D6D280A68395FC3 +:1014400058DBA79BA5613FDD346F369A98E0ECE24C +:10145000D0C48CCB8B485B164A128F7FE0D7C91063 +:101460008A16DB8942CA3B85E13347576B1F5C868E +:10147000A8600532B0C0078A9EE4BA6ACA150E3168 +:101480008C9FB5228767A2C81B276AAAC32859B1B7 +:1014900009F2E8ECC585450FFED0A9424A55199CD2 +:1014A0007FAA0854A3249048E03902146136107BC7 +:1014B0000D0B6B6E33C0CBB4608FB946F948003268 +:1014C000100147C83B0F0BC3DC3E17DEF175F799DF +:1014D00034600E8AF111A8F09B8855BC4439A00DE8 +:1014E000559AC65EB36DC893BD4C1AC1608374181B +:1014F0006DA9DA4F034359BF61DC0B4BB28E12A4C6 +:101500009CF2B02B6E1760D5A46B101179513C8200 +:101510001130105ED450945375736E5F2B12576068 +:101520009AB333DB9952F4C9035976725AE024A96D +:101530005E37888596215A6F0211F2739282AD1937 +:101540003B89BB57C1BFE8C4AB93062E8AE580CA6E +:10155000946EA5C4CED70F8083D9DC84ED559F0D42 +:10156000E0AB8457C0EAAD228ACF202F2CFD37C1D3 +:10157000D40B7F8DFCC82DA9F01ECCDB15E4CCD09C +:101580006CA94040C784E1B3C884F9D64B019940A7 +:10159000E3DA7009F0C67EBE8DCEDC5B900B350FB2 +:1015A0003E2439A35F45DC51ACAA45071AEE462814 +:1015B0001BBA3AD7F63423D3EC3249F4BF2EC539DF +:1015C000D9111247CB78B81EE8A4DC337EE26768F5 +:1015D000828A5E93F6488FBB8EF5B5B249B6FA2A79 +:1015E00074B4FF5DC5488F1B0A6DBBC535F650FE50 +:1015F0007D5811ABC33396DE46960B686F0835CD28 +:10160000D0F4E649B986E74D8337279ABA5534B8FE +:101610001F2A738745DC7A07D6F2BA81605C1B9378 +:101620008147A0F73CB4A4634099F23F2CC70EC990 +:101630006494824E0A0D0520D992847C378764D643 +:10164000835A92540D94F920C510E5B92A51D03D22 +:101650006ED7CB499786792DE57BEEB9E87B3F22A3 +:10166000204F57409E16FB7B3FD6A88167F36B94B3 +:101670001E072FDCC5FC459B966B917B1EEB9D687E +:10168000E2C4F31426FF20302707FE4407CE8B3731 +:10169000582FD6CECDD6DB987CF5ACDF1A2F7783CA +:1016A000C73B6AB119E3BDB16181EAC34641226417 +:1016B0009B8CA8C5C9DE65B21E68F9AA593EE0A98F +:1016C000BF894A8DE33FD74374AB8266E66F9B5A6E +:1016D000F478FE36EB65B8BA2C5059665516626A36 +:1016E000678EC5A50AF84A4ADF29E8BD17CD8F5095 +:1016F0004C2FB5CF7780377BFF4816065CC9C6E410 +:1017000093F41850A862814FE8446C04694EB6CD3A +:10171000E6A3BEC8EE772735AD0E24D20DBBA8CE0A +:101720001ECC4F034B442F48897344EB4D8920FA5C +:1017300031BC8C210860D0890ADDCEBE4A6DD466EA +:101740002A820D9198DC2761CE465BFEDEE363D6EC +:1017500043ED9A0B43DE7E4948E867345AAAE4F524 +:10176000619373165ED1FCE5305443E48EED73C093 +:1017700087ACF8D11611521AAE58A669B79817AFB0 +:10178000E818736CF92115F49A4D323D7543029CAB +:101790002C45358F3F568F3392E05748D93404910A +:1017A00024339080CFF88C2F9B2A7CF4CB0E1864C6 +:1017B0000D26D5C2A30542CA55B9F29F11CA0DD84C +:1017C000950CDC1CE9FA27D49A00FD0869C9178337 +:1017D000FDF34DB9BA933F8E88D9CEF93D8CCEBF7B +:1017E00016E03793E27B5EEBD426378D7316AE1F7F +:1017F00079566C422ACC7942AF7D3701C90288A064 +:101800005B19454CFBA0664EADA773AB6F6F6D388F +:10181000AC9A553553BBA47CF17D6D213CE5664EF9 +:10182000FF02E57DB8247FB7DAE582EEFEFCFE1903 +:101830008BEC95B864388D4C2932A1FB092D1DC75E +:10184000F7E0572AD23ED82503D7739733A9803DB6 +:10185000D9A66AE7D62069A6AD85A4F487A6AA5DB5 +:1018600044BB3D73DB5244EA29FA29514C0A4DB678 +:1018700057DAAF59C6902D6A8BBC9805E4A0628DEB +:1018800012202FF4E0F9CBBA1E594952E9101BD6A9 +:1018900003A57EAFC947376D91F462ACBBA6C1B357 +:1018A0007727850151C88C616BB162AD4777BD2048 +:1018B000363EE3DE3C96F78215BEFD527BEAE7C179 +:1018C0006EB0D2A05F9C6868C7C6A6960106F809EC +:1018D00023E1BD4BFB7F7CBDDEE6072C0462BBE948 +:1018E0002DB5ACBE53F6497E68B9D90E12C0B4BB53 +:1018F000F7F1D1DE1F810B7CB229A4B69218173DF7 +:1019000081FF9F122B62381C23CB37BF685D617348 +:101910004B2C08BB48C05B4E1D850D5FAE352D9B23 +:10192000A3743F74318266045A8635DF9059F2F40D +:1019300023DF3C45406E7D0E3C9A8C31E2C500951C +:1019400052FB2B7BE0C7CDA8B6307B90385E34F1DC +:1019500075A8112BE882288C194E7E57CEB9F9FF55 +:1019600021923529316BFDA68DF25E677AD59A9367 +:101970004730FFD1226A249D6E45D5EDBFFB741818 +:10198000BC8BF5F47576E1228FCA588C21CD3FEBE4 +:10199000723185BF22E4CF232487D63BB1904676AF +:1019A000A2B0E3ED072125128599780336E3B99EAD +:1019B000EDB44483CB965F1C294E43D6F748CBEC5D +:1019C000345B1E007A2EEB5F758AA75B04C03E6F06 +:1019D00033CD11462B1DA3904D3013F7532EE3DE6C +:1019E000CB7882D7BF3C8406992E1024F29C18A491 +:1019F000D87D6D9C1B9AE80873DB144A625E771EE3 +:101A00002903FE644990FB69A14D4DE5FB61F7C1D7 +:101A1000CC7A7F17AAFA8BA6935A606EB4A27B3950 +:101A2000C9167BA68DA5195AC0E5EE8688FDD11989 +:101A3000CCAB814A0EB939E5EF8735598CBA2E33D4 +:101A400019481A1A47F97E89AB64BDC572704F5F99 +:101A5000129B67066361C743E52A5C85018ED658F1 +:101A6000886AD9D07B4B223BD0FA4FFE9E6DDCF8C2 +:101A70001331C6F734D46D68F2EE65545118C0F8CE +:101A80007C1D20F7E56A0CBC3DB55F1A155A5B5901 +:101A9000E2BF4630C77368D7F27BBDEC608A22C6CE +:101AA000E82F34802F0FA6B9A7C393755729D9AF54 +:101AB00044305A88DD7D3AB9C214BD79B1A8C496C4 +:101AC000AFF970A09C7D0C4FC9999A00325C817F60 +:101AD0007BD9BD363C44866198CD28004C398E8F29 +:101AE00022A925C08191497982486D7806BE2336A6 +:101AF0006C277E2ACB3909CD831868CD9932F20E36 +:101B00004CE435FBFD5BEC4EAFCF2FF09A997EE5B0 +:101B10001D9153933FBB5CED3A5E81371C429CD2D2 +:101B2000A6743BD5720E0C3CD16E6F99E6F34BE375 +:101B3000D6093FA1A5CD323D4D13A0126F9895183F +:101B40004404EA9DB5FF8CF18FE3AB20C304243C31 +:101B5000A7CFA290E8C26A9833138B314C8F825280 +:101B6000275C6AA8D53E9CFCCD86A4EB93A7E9C967 +:101B70002E4A04978DF5857CA3513A2F828179D224 +:101B8000954D54C0083AD2AE77ECB53B90556EA94E +:101B9000D115078D88F55C1CDA59E9341097782047 +:101BA0000DF6A01BA10F129D9851795B26F27D12B4 +:101BB000FB044B2EB4D1EC2FBFC879C4B10EC22D9B +:101BC0002134C691522EEF8B13AC3E163FE272AF1A +:101BD000F9D6EA90F7372028E7825CED54A8F98E11 +:101BE000F74344D05B8D7386325F27A57F64E07135 +:101BF000399BF07F172123B47C6C17EF1946B51978 +:101C0000BADB788B75B2D88CF810B3EFC13F56C2EF +:101C1000C65AD2BCA6F8EA853B08BB2B44D2C734CF +:101C20001E4A741A8CB41FDBE728C1F1AAE2DCCA91 +:101C30006CFE3006C9AC2E4E182EB2B36159E14C81 +:101C400079FBE243DE9376E401528C99A05EF3FEC9 +:101C50001D6948FADA3617A8A52422516ADBFB125F +:101C6000FB194F4E11CE584C13F5E9B404C21E6B4C +:101C70003BB060D8C5D8B07AB98B1729409E8C6D1F +:101C800009D8EC1A5A335C17AE2B0E867C16FD8AE7 +:101C900070DAE99216E763464980A9587F9A64147E +:101CA000C3739D14AF119D30F8DF789F4740EB8BD5 +:101CB000137A46FE67781FCFFF603A82E6D8D4F2E7 +:101CC000E99C12AC5A9298E6C6E0FB7C463CF502D1 +:101CD0003A150FDD98D35D78AC470798FB3E9DC061 +:101CE0004CD9027F7566308352C45CFEA1A68397EF +:101CF0009B206BF7E70D8F91DE2CB658244AA55137 +:101D0000D47015C4B9A2D5B23D4077D2946761D5DD +:101D1000CF8B04A4444E63E1B0FB67A492AC43753F +:101D2000EB2CA74373386E79CAAA479680F666945F +:101D3000F43635D0CA0DBF6A898FC211668C0A1677 +:101D400069C4FF5AA6B30E372E74DD2858A5B7D242 +:101D50002D453C251B901CCE0B0912FA783640D538 +:101D6000F1C3CCB4A5AC603E5AB090A375F928FA83 +:101D7000D485C7176BC2B8473FE8BAB8455AA4A282 +:101D80003D44D319DD24FE8D48871DDE7A554B5422 +:101D9000BFD76ADB3072B4D96302AAE817FC80D2DD +:101DA000DA23032CCA73FEE551B7657ADD74252A60 +:101DB00042ED544D42304D7A3F31C7748EBF484991 +:101DC000436FD66BF056ED072836EC03BB79E3B4CE +:101DD0006D0C47EA3DC0C5118A957B120B6EA78F2B +:101DE0006839B9F22602AEDC684E463215C91812BF +:101DF000EFCC0892BBEBF747B2590040D1337F607C +:101E0000368A8B245945E4141950D1090E0848C567 +:101E100009FF09E334DF6162BEFB954761805646E6 +:101E20000455EA5FADD833409AAAD111EBEFBA4618 +:101E3000534560DB2D0C367D3E3973529C14A099BE +:101E400022318C5ECBDE92EF3BB6D8916918E63634 +:101E500026093AF53F857CCAD56735EAA3F9245CA3 +:101E6000FC87896D28B00836853C98EE8C9E86A24A +:101E7000231B4EDF772FFFDF2D9FEF16C7A7AF6322 +:101E8000F0A756B7F24CE5175693C35300280AF350 +:101E9000375C8546086203CC532B37AAB164657260 +:101EA000750D71AEEA00188A8831E2EADCB602519B +:101EB000C60AB6F884B977E186CE754914421A3558 +:101EC000C78F618A2DBE1478D08BB2AE23629A443C +:101ED00020E2A44B44E6C48687410F72539C5036DF +:101EE000BDDD31EDF7D54A44C993359BA1A4442DFE +:101EF000D83A7EEB102B5280365BCD2077C5382840 +:101F00009065597E56504C6A58F700EB0D0D40D83D +:101F100020221F515BC6027C331475F1595823DB14 +:101F20004423D76730DC93E0BFA1FBFF76426B4BC5 +:101F30004A3E7A326E6162A2332E4DF4B784814FED +:101F400031C8EF28DD9A2E7B3B8C509EB033D439BC +:101F5000A0DA8D425D4BBECF60099E42F1B36F1790 +:101F60009B0F5783D677DEA8BD9BED46FB64DCD084 +:101F7000226734B9E44DC6599303086E1B1B805A7F +:101F8000EFDF876F2540749160096D8CB23EAF2FF3 +:101F9000AD3B924E1F8E2B725FDE859E8F98FC3577 +:101FA00060455272AB05E1D0C590AC00AF0D97EA29 +:101FB000E4D9B8DC7C733854658A9DEBD299CA3574 +:101FC00090354CB13B1C9409035FB5941CD69774B3 +:101FD000DBA5218777CF8F4D3968A80A31A45EA38E +:101FE000EDB1EEC783639269B1AA9E98264BFF9F1D +:101FF000C005C648E855B7B81D201C6EB17658E13B +:10200000BB2C997DCF43E7A4564F4C5F92C93AA9A8 +:1020100090F74DF2736161C66A3A578CF6A31E0DB4 +:10202000B6F696EC4B1C003A5ECC6FB33BC5FF9CFA +:1020300017BAAAF831C550544D0562DED276009D1C +:10204000AF55A350D3D7373C703D3D1585FE9095D5 +:1020500038EF101F606F108E56486B1386835FDB5E +:10206000C5E8DAEC4536BC146DBBDD91C978DECD30 +:1020700076C02639A614BD38E632798928836B618B +:10208000BD5DDA4BE7CA65995D8BD87280AE4819A1 +:10209000E89354C04721C91961CBAF23D2DE78AB96 +:1020A000CB91BF4F54F36960B1E70B36F105A67EC3 +:1020B00081E320E2E6C85828BD569E60319FB132C8 +:1020C00041E59F37CD3E41F01DF2882976606DC510 +:1020D00059269FB36FEEDF41866ADB38651F17EA2A +:1020E0007191B203B596D278FE5B229244B6D4EEDB +:1020F000AE8E5CBB1CCD201D1802F5C2E09647F0E9 +:10210000C070BB66E59B1696648824A976ED5BF7E4 +:10211000F5B2EDC89006D9F5808FA53E930DBBC4EE +:10212000F24ACA87E9EAA54117BB9AE1A0FBBB5571 +:10213000670F5CA371AFADD2F39BC1DB1B97EE6E53 +:10214000F2CC65BABD1A9AD67727C92C6550FCAA7D +:1021500000C677B4DE1B2E62746AB8FEA582047BCB +:102160009EAFC0BA5D0FEF5027546C672D15343306 +:1021700051336140455581841836EB71672D3031FC +:1021800063AD91805DA516655E1CD4DE4B7869B9A0 +:10219000FF6A581AA5AEBA5C0ABD57A5A9DEDE577C +:1021A000A7E669FAB76FD059E03EBE4F35836A0A99 +:1021B00071034F75D313FCA54F2AAF06FE18CFF657 +:1021C0001174E7A7B6ADA7B4095227D55ADE38E196 +:1021D000CD0C8D54183F6848C357D9DCB04D11FF62 +:1021E0008CCB477462A3A9D92E680EEE06F00BFAC9 +:1021F0007A100C17E37660012A5080426FA39E4C40 +:102200009303792FA3530657D3A7F51F6F8DC06B88 +:1022100085D79F8EF7FCA9CC43AB265D61797DF60F +:10222000C8F6458422598789D77C670F22F8B063A6 +:102230006FCE6EB7FAACB17F7484992CE319506BF2 +:10224000B06BE59E05DC9E8A0A0F388D2BB9815F45 +:10225000BBBED5A9C18A24D9609B60044FCDC95C9F +:10226000DAA51507A826DF7A653533F2C97BBD9359 +:102270000B0465EEA850A5D3BE6ED52E3530B04800 +:1022800027A5916943C83AB59765B1CE9BB8907CB4 +:10229000A0147DAB42B4D8BE011EBB9A59E261F7CF +:1022A0004D5C1B202D9539CAED6A12D67679179CA4 +:1022B000358C98172F388F6E3E6C28FA3CD986C81B +:1022C00004B467A3CA37255DF732FF1D90B15B10D8 +:1022D0000E0DEA7996E959E42C4A5FBE65716D836B +:1022E000871AB95CC696361C914411543D63148418 +:1022F0004C78AF8EF2FC906614182921FD125B9683 +:1023000098E122F37426FCADBB2F574E738DADF5CB +:102310000C2D5247A5A7E893F172223EA93CFAC7BB +:1023200060A9A378327F8676B145DC1E8843052DEF +:102330007A2243F54510DCD306BDEC7712EAE93981 +:1023400064953B1EB9F68684CDD2940A61185C7BF5 +:102350005EFED68186706483BF3C973EE3D72A85B4 +:10236000E7D5AAEFF129192D81C217757DF7AF8C3A +:102370001326E57460B61CF051689469C854F6C120 +:10238000205EF77212C9B394FC65B04F5684CBE05F +:102390004D2A9D023322CBF2263C6821FC66DA26C8 +:1023A000C4E82DAD587CE381D110165183ADF9629C +:1023B000BBE430CDA382428A584A289981B75CA6F3 +:1023C0001599FF9A0EE1ABBAD6D601AB946C608931 +:1023D0000C6D14839E6142E91D00FEB5D178C71BC8 +:1023E000EB0DBAB11FA6BF60AEF12D5D0245BB2A51 +:1023F00067437892699841BEB7171050C433C945F6 +:10240000B2BDE2AD4C6A90760058F7CC18B43C46A9 +:10241000C7413922B4869CC0F49FCE958A29149C6A +:102420003A9B77811B1A95ACF8C5E05F5DE31320FA +:10243000FFAAD24014C5511E37030EAC55BAB137AE +:10244000884E27EA38F9D865B922BC61262197352C +:10245000F77FEE57B8CE7C59403AAFAA1313C54E5A +:1024600043A4C683083A31DD5D1A41D3064398EA96 +:102470008D5E8FE139E50FCDF879F34571F4D12DFB +:102480005BD2A1690D7F45BCDB9ACC64EE38169F08 +:102490001D3306F42F92B128FA5B3592556D620612 +:1024A00068B6A4FB3709016226F5CD630BBF826DC8 +:1024B000128F15FD45BD7B7B322BB969818629655D +:1024C0004CED54C010F4EE70B552C617DEA95EBFD5 +:1024D0000E5CE827A99AEBB193A8D1A952A471C6C2 +:1024E00050A4C1AA4B97D429E3D191B99F497A430B +:1024F0002CF8DD88DF8B5E8F36CC186A54FB17F41E +:10250000EC43E289A61D8C4E4887923D3600C22BD3 +:102510002F9B435A72FE4BD9493C755D1E9255075D +:10252000AD9ADD7AEC3E2B89DF7477BEB6DE94453A +:10253000CC4BFF3D05C214D5D929B9E44D235184B4 +:10254000847ED797602B57953C1B63820D409A621F +:10255000818004D2F07A36BAA560B67E7BAE970C45 +:10256000743F38401C442E256DCCEBA1A847ADE943 +:10257000E820EB59BBDC5F6D165989ACBF9F5D78D5 +:10258000253CBCB304A172E04890E5505177144655 +:102590006C78E675515393124F458D9C20EBBED35A +:1025A000D956B2E09A2866D770EB0FE04CF3A9F940 +:1025B000E55778F45EBC4E112DFA2A056256080FD5 +:1025C000E2524A5FA3F7B873A84ADE923442121A65 +:1025D000DC58FC0203139976DB387386A56660AC81 +:1025E0001AA9CCD0F7792641D47EA5D611FF731352 +:1025F0000F9EABA7653266C11727B2DBA6A8C63D02 +:1026000045FF3EF14FDFC6575673C15C92CB8CC677 +:10261000C456DFDB1781C1E6566712237BDA74F5F7 +:10262000D0F023AD5EB7EC08180FD88E4D159A91F7 +:10263000D7616AD7CE9CDA76E9D6910195C3146446 +:102640006E657531D1041E85A6727B08DCB84660C4 +:102650004D11C1C91F691344D83D222A0746126B88 +:10266000E8408A76EC2E73A96CAA04374DE0232C3F +:10267000D10E497DE52F196EC59E5760116486AF56 +:10268000D323CF70E566D48F08C3282EA616DA07A9 +:10269000E8752C6248CA7A5ED51946DA40B57FDA09 +:1026A000F819B0CF04698F89DCA413470F0ECC9DB5 +:1026B0001E3B8E237BAA0BAE9F5B080ADFB0C5963C +:1026C000BE14CBF66ADD395A4C0401D8E9E7D715B8 +:1026D000AA846A0CADBECFA341E9E64384BCD27B99 +:1026E000C30F57B55F08716E2A63876F6DB47DEBBA +:1026F0007C5FA43403B622A36B75AF773BE4DD9116 +:10270000BF3D1D8B1CC9C13B28633EE455AE7A42D8 +:102710000F068262A35AA1C8230AE0AD7862018342 +:10272000E3FA3F490191A760CE067ED26F378EE96A +:10273000D1B56FDE9F52200ADDC6BDD31C9DDD3FA3 +:102740004935AF7380547AFDA8E17C222045FA3DDB +:10275000064DB1A2071BF791ED0C579446D2167A9D +:102760001CB81232977C842D69DAF3E043D1376EBE +:10277000B1F80640835D610543340DF85C6675A7CA +:10278000C8B00C6F1E1D9F8472DD96D8F445A4C19D +:102790008762608759D90DD706FC44CC22A553ED3A +:1027A0007A651A2B448518B4EAAE1D01F40886B781 +:1027B0004681AC22E21197F2CB272660DAA242FED4 +:1027C000940ED9AD599AE0A7AFFC2B4D84AE1CB442 +:1027D000092046C9DB01AC0E1376626AE3CB23EE17 +:1027E00049640F662293CFA468ADCF38973B9AE730 +:1027F00039B5B0D053F7D21FDF7C07291CD419E2BA +:1028000071486EB66E76F9FC140D26F8215F8C784F +:1028100082DE31C05B97C57401B1E05294C523A438 +:10282000091B372B70EF788C2CBA556030CFEA3407 +:10283000FA6FE2491A1C81DC883119A6E5E215E13C +:1028400090F6214F79C5564511DE699A9E5901AE21 +:10285000C26F582B5670BE8E21AF3567361B737F03 +:10286000784944A23B57FAEFFFE8BC9BEDA7B98635 +:10287000CF98CF36B5373C22611E3F4F510A3A15EB +:102880005D9D408910FB5F83DF18A28921E361DF32 +:10289000862081F9BD8A3F0D3EAA01B40DA625C44C +:1028A00086D4E84B0C5E35C087A398B099641FE3CB +:1028B00032C1281D705DFC9DAE2CBA09E397816D75 +:1028C0008DC33E8D44B6D1726630F2F8CE4730D417 +:1028D0000E29897791D29280ED01C0261C01DD1D61 +:1028E000DA64D7DB76062F81E994FDB1A6967F974F +:1028F0006546146BC8FA9350772C938284315E8DB1 +:102900006F91998A70769A6F62B2A6EC3378A77548 +:102910009E2EA33134BB0553B7D00BA04A1CD3570E +:1029200097235FCBD72155CA615122FBFF753D1C10 +:102930000615954995975E0D01FA3F70083710F01E +:10294000BC9042117359E6249597E901D633E0BD56 +:10295000339E3DA0F6A3CC010D640F938849C5BDFD +:10296000A06C870064A8C7CBC5B5CC985BAA76D607 +:10297000FB05164B715A9BCAC931F7FFD3D1BD3144 +:10298000320B891FBF9930BCB3147E6AFD45D85302 +:10299000F5A27D4EC095107E3813F9878CAED731E5 +:1029A000854F2156D9FF1E0C3EAFBBCCE9B228A201 +:1029B000D0DE070A34ADE987EAD3D59F0EB533F4EC +:1029C00042E11750C1D46F897F248BFE118D05F62B +:1029D000ADDFE4AB27DDFFFD4C7671627889E5431E +:1029E000D8022BF51DAC0013257FC1BF0EFF204D73 +:1029F0008D5BDE7CD8B92C3E7740FC3EE4F73B3F54 +:102A0000BEE17AA1DBFB58D6C6EF389D897001F490 +:102A10005559C32F267338CD1352B92CE5EDB28129 +:102A20004492A80A2126E5064C43DEEDC85F4CF12E +:102A300042EDA12A7D3DE5095AC0DCC14785A87257 +:102A40009DC5EB1933F2918F8513B5EA3753CD420B +:102A5000889D4FE23BE8047BF834CE42100853E8EF +:102A6000315F3B3122913B3921E9D5AB572FFD5ED8 +:102A7000503121F9B650DE90814B3681653B76931B +:102A8000E4B5620A899221024D5D66F6D612311BC9 +:102A9000A632EBAD8ED29732E4EE62603FDE56CACC +:102AA0001E4350F533055DE774C49D9E6331986104 +:102AB0004D65967504CAD32A2C0EAFDF6C7D7E90CF +:102AC000672D163F64906544DE9A4DDE6858618636 +:102AD00090B6C88CD1BCEA3B49A9A1D4C5D9792FFD +:102AE000424AA4629F40825B4548B883D73035BADA +:102AF0004673088EEAD65A3825E68664629F4B01F3 +:102B0000825635E9AB25467F9F41EC8C27BDD06BC3 +:102B1000AE959484C9B4DDCDBB036B7F0DAFB70711 +:102B200040CD340FF62F7E8B701F21100FB14AB0AD +:102B30007FC6A2D5C1710979DD9F80B8AEC98F511A +:102B4000040A0AAF2DC772F9DAC8D28887567BBE4D +:102B500007F0523D1D78606FC61AD8CB8DDA3B9ACC +:102B6000EA92A9CA63EA84B369FE33BE4755EB15FE +:102B7000584F3E8F44F35B686C3EC78F9019398085 +:102B8000AD213A6109FB0FCCD40BA52273A926C154 +:102B9000DAC6ED3602F4D4F8A36EFBD2157D856A51 +:102BA000A9AECF61E0312AA07818FB21502B548DBB +:102BB0004E0CF7E9DEA2ACA7BFC983DC5CC3DEED37 +:102BC000FC2F203F0A8F1223892E86DD7BE6E56DE0 +:102BD000D365CDFD2230CB7385200089B7BC1A7D2B +:102BE00018E49C2D6BD4832314E61ECC8F4669B861 +:102BF0009FAB60AF8EB1B67EB8C3FC7963BCB41234 +:102C0000C919146701D301D020171C4D01289384E2 +:102C1000100391B79B7588DB12AB136AE5B220688D +:102C200067A3A022F91EE504321C6A3A6538A3A501 +:102C3000C7E235CE5ED6E9659BC89A60FDBF4533D5 +:102C40008317C6862B9DA6AF6A65DF7E82BBADD497 +:102C5000CE6244C56CCD2D34684AC81ED524663278 +:102C600017403E495A2482A2014BEAF5A81770008A +:102C7000DD1D0339DBC068E3D8FAB88C1BBD55D421 +:102C800022FAFDC531F1C511FCC94118BFE8C9D30D +:102C9000DFDBC535EB2534715A54B06CEA0D2BDA05 +:102CA0004540B2154557B84959D4D0866645CB4DF5 +:102CB0000693F33FF26355856D584B97E10ABD1CAF +:102CC0007F1CE683558379C2739F9B2E74815CAC15 +:102CD0007D96BE07DC93506A3EB335DCCE09B498CE +:102CE0006A12EC8A7AA78232FC383981922EBCF1C2 +:102CF000042823DFC621B8E42947DE5592277AD27B +:102D0000B8038BF4AE6F224384555D8D3B8836B794 +:102D100005C3A474670C2CB2F679F78F02C7978CA1 +:102D20008264528ADDAB97127421497723DCBD8619 +:102D3000D80C06A268A219EF4927F9BBF2ED09F8F1 +:102D4000A85E65BD1C01AFF93CFA4ACC73AC9E2C61 +:102D50003466AD234FCD4C4B96ADAD1A4F9B033F20 +:102D6000113FC4C78E50EA62DD548E04FD0ED8A612 +:102D70002E3D0BED2AB2D6A6C0F16D4D8FB878145A +:102D800076044E142DD87912A61F984E2007714D47 +:102D9000185D449034674CC9B5F47811511A9CFF02 +:102DA0003E9FFEBDEBBBCD3F45EC60081D6F46FA74 +:102DB0001A7CB7DBCED807F46808716C51ECEF1EB3 +:102DC0008BB6DCB692E3C91D3CE9A2718D9CCF772E +:102DD00002FF82E2121D00C6957CC795C421BA4B42 +:102DE000098E08265A4D47E8881442696177DCE667 +:102DF0002F8B9905A2E437ACFF59C130663730B24A +:102E0000CBB6A2EE4AF586EF3780935391799109BC +:102E10000DE37F4DC0BD0F11BA8CF8ECD5E35B8894 +:102E2000912B9F9D04A4D05C3BB979D0BFA6DEB3A3 +:102E30005D0771DD844902A0398C2C58457228FC4D +:102E40006A6A484456E1C6D1D96330568B2DB059D1 +:102E50004279FEDDA9939AF14522C3D07AB054108D +:102E6000D453E2195042E469207AD8B87AA2F765BF +:102E70002CA28F0A1ADE400136CEA51122CF5C9E0D +:102E800066029C53C06F8D7B72B0EE729B96C899A0 +:102E9000ABDD8BD26D6E0EDB1D8FE8ADB6BDFF9442 +:102EA000C907CC80FB99088EE2A44532ED8B62EC19 +:102EB000392BB338C4154F41FF7C1252C88834F502 +:102EC0004D9364DD9C57C74957FC5A059B8F3B3D8A +:102ED0001F120A0C08B0E45B479A9F63A620BEF657 +:102EE0006C3063669B2A236685B7EAA5AE1DEC2C81 +:102EF0000FDA412C85CDBE62D06D257DC1FF797280 +:102F000073D32B4419F27F3049922EF2A10DFAE8C7 +:102F1000ECFCE0A14100E76C99BFCFCC077FAA652C +:102F200099126A6AE186585543C89104326F8677D0 +:102F3000EE5FC37B15024482C34F57A63655E3307C +:102F4000B1A986490DB58902829FEB9369C8990D95 +:102F500059415B2F6B101CC834C03A54B64DDD2666 +:102F600030372E24DE4C4CE880AC87D0CE5F6D65C8 +:102F70005D3E92CACF2EAA9554DE89F84E332A942C +:102F80000262FFB1D91669846DBD428CA968F679D9 +:102F9000D75DC221A04503C14321BFE9470C698D1C +:102FA00048B7F865F7620097D6ACBD13367C43048A +:102FB000979F6165370C24F48E1D9360D264C554CD +:102FC000883C8206305881BFB606C0B62C52FCBB86 +:102FD0003A6E23B6C76CD0DC5FFCDFF7E5E1C8775B +:102FE0006A8B8DC6EA63350AEE8E1E9ED2DD8A3864 +:102FF000FEA80F1600A11B4859B7A1EFC704DA7F3E +:10300000430D6F6A80AE540171CEDC30396A0735EA +:103010001859355F2E0CB5405140E18296C3216EA0 +:103020007061D24639C31953939CE2048A9AFD42D7 +:103030002773D7B5AD09EFA1DCB07FC4B04B6632C2 +:10304000AC415F1EADB9564E8588905C059E9D9043 +:10305000B63F0D9BE99D2B18D3405742A618867E9C +:10306000119316B6670A2B2DD721143FF3AB357D8C +:1030700065FC54F98BC83A192770C59EC227AB006E +:103080003EDD1542DD1E58B7B5E404D6F320A3E2B9 +:1030900055EA4EEE6EBB02D916297CBB09EB6B29B3 +:1030A00044299CBCC864EDC72130685A525DE136A2 +:1030B000A8D3414896433BAEBE297E4C55332815D4 +:1030C0009C48EBC28A064B450E551C7CFD03C0ECA8 +:1030D0002F2D2B5B7580303D6CB26A6ECC2B4A9CD9 +:1030E000A248DFEE971F283655A7FD445D614A7F51 +:1030F000DD58F8234C9685CCF1B649C21B303A8C8A +:103100007929B5C501F4B2F8EDC2AF02C3B9B75819 +:103110002BC76E755F707525143B225323792DA044 +:103120000DEFF22E782858140ADF87AF735585FA11 +:103130002E1803E4CBF6E0F339E4CE60772C3F2C75 +:10314000B3919011F6F0FB8017899ED462ABFD0716 +:10315000111E30F8F4C007BDAD6988B00EFED1F77E +:10316000634CAF8E7A97331076AE2AB913D8081015 +:10317000699DCBD29B82943E53B5844FDE3712DFDC +:103180003785B7C662213883439E99F3F810E587E7 +:1031900013198A76406749522FF23E9E696381CBAC +:1031A0005C593F640ADC35F6BFB44BD7962473B242 +:1031B0003B2DC97A97233E1E2BAAD04F738F460A08 +:1031C000E3795ED5BC45CA76306CB8C6818D70593E +:1031D000BD5C0116C953E198FD34D32B0B278648FB +:1031E00025F3DF3F0B4A25ADF939F481B73EB59D94 +:1031F000ACA82F81036C0B66D7AB7EF946E259BBB6 +:10320000AF16FF1EC18E8291B01B3A3A9CBF5F661B +:10321000ED999BED3F47783F8B517D9522FB98833D +:10322000C5535D81A86C39586C3EFFF63BDBCAFC88 +:10323000F836FD495CFC8456A8BB6A0D087B11BCBE +:103240006BDE56FA94C3F9E80B742D05EF23D09387 +:103250005F34B659EB5316B85D29AACB26849CEF90 +:103260007AB4DD0BADEA5529F6982A460EF5367D7F +:10327000A6A9E0614DE90FAD4E19D95DE08A05219F +:103280001F9576CC2293F9A8D24B092FA257D66D61 +:1032900042CB6C2040A577DD692E856AC04C1B228D +:1032A000CEAB4C5B526944B2C2D68513F73C67D3B0 +:1032B0002F5BA203D26C51635CAB00EFA5769EEC52 +:1032C000EE1C25B2E917504C60980E359A4A69BE3B +:1032D000732285B6D29031B8F6D3F854438895C39B +:1032E000B0FFACFACC6DE2AFE995C2ED6F5CD9C42A +:1032F000BA588DFFE2A621125DE1319DA6F9045274 +:10330000AA16B0CB61A1C08CA5810447D6E21504F2 +:1033100078AD9F4F05127EDD6FD32F2871D689F6C9 +:10332000E1879516990F8FBCAC1E9A367FDD648EAF +:10333000613F15F98D0219A21CA0E45556B9B1F5EB +:103340006ABC08BA5218B336103F31C63882C26719 +:103350006EA9D32D86264128E3011290DD0ADF7283 +:1033600036B1B1AACBFBAE243C4AE181D4629B7555 +:10337000DD33295F5C6279B7234DC1AAAB54C547E1 +:103380005B866B16F7891E896C8D22FD26C374A996 +:10339000B3863FB35E9285A4DBF62D0141FC2EBAC5 +:1033A000EB71CDEC6813B2A82AC66D8EEE55707E17 +:1033B000102FF018DA751B9FBA423C8CDFF289A4FB +:1033C0000390943D18A05D249EC2A1C1AF97D885FB +:1033D000DBF178B3EBCAA63E319FEB7CD46CBDA584 +:1033E000D403C18BE5865A859C850F445D2D56E933 +:1033F000CFE9598A4719F4EA1186F322A4AE81591C +:1034000051A2B9CACDFF7929947DA4F9EDA862AD86 +:10341000221592118E9CDF77C6E83FD23CDF1D3C1F +:10342000003DF7694F23C955C2FF01EBB46B29BFBB +:103430001D1D8CE45DBAF9FF1066634877FE6E8F40 +:10344000436EEBA81DEF51D78868D604782F632B05 +:103450006BE37A25F23288458D534DC279DC22CC5C +:10346000EDA686BF781667E92C48E3BE45ABFFBCE6 +:103470006CD78DB618706EABB940C86AFFD8AF165E +:10348000272EEFB694086EEADFF31C2752D2E33200 +:10349000A616491B14FEDABDAC522AFE22676D75D2 +:1034A000635210C49CC8F3EAFC288E22502DB0EF62 +:1034B000EEC7E4008AA036255A2EE898C8726AEB57 +:1034C00090D8696B3DAEA7044E3F54E9DDD56C60E2 +:1034D000A20EB60E2DFCB943B28E200CCD58E74794 +:1034E000D502ACBE59E80753FD51DD1B20598BCDE9 +:1034F0001DD9BF49AA1493C376B630E2BE724A7191 +:1035000060FB78D0E2E7A6CACDCEF819199C73AC5F +:10351000E05B2077B516AB2E95FCBC988446D5CEE3 +:10352000BC4321D4BD6A139437E52AEF0BF12A4E30 +:1035300053E98785B925151FA5473942391A87D719 +:1035400078F6A7A34815ED7FA17B60EA77A4173E24 +:10355000E68A973315DAD56A8CBFB2957F2B7E7ECB +:1035600018B1F3ED146E9567257220DFA98230A49F +:10357000C21784B4E73F36B69917DFA98C9CD28C6A +:10358000C79CC7543099360D3DBE428AE286A5E1FC +:10359000D70E97F7E0FAA57210E87369CA6707209B +:1035A00018F7EEBED372C574D5CDA872877EC574E8 +:1035B000C57CDE25AAD1690C19F6CDEF9FA8E82CB1 +:1035C000B763B392B31B7B125FBB90201BCC5DB47F +:1035D0005BA08028B94B4364550807703FAB80B8A7 +:1035E0003C8DE74C8F2ADA40A2BC0C89ACE6334B09 +:1035F00022326FDE061D0257E71EFE2EAD0682D375 +:10360000FD35214BAFAD8EC2914E1FFE09E241C583 +:1036100051BD31B676B8AC4579BFE5411E1B2C478C +:103620005D3B2BDDCB0F9EFC254E1F80C9E70EDED8 +:1036300071142774832AE340CDEE31074B5E9088E6 +:103640002FDB666286A8D15F30EAD969F2DB980782 +:10365000F8D2D50EB5505CB894DAFDD8551C9AE571 +:103660007171C9D44EEACA9AC03576ECEFB9B2ACE2 +:1036700079AF411A6400DA29D31DE5E43FAC4AFB77 +:103680002A4219363BEFBF82E30E4ED8A8646CDEA7 +:10369000EFF28676E585F95D4DD052368D95CF4BAC +:1036A0002E7099607CDB6D95AAE8D3C442DC8489D6 +:1036B000B4D9CCC0C4AD673BA1F0594E6B0458C817 +:1036C0006359CE212C63C81DBD135BE66A9C20FEA6 +:1036D000758B39A9E44A75F2966C4E797BF7068DA5 +:1036E000115037EAA8097B2E5CDE9E6B6F6C5AA4E2 +:1036F000E0A12ABC5E90E82947C5347FCFC251447F +:10370000B2E1C8F315D87EE979035D34F7BE9F991D +:10371000B165D8F129AE6A8002EA6BBF2A426CCD4E +:103720005AB4F3C55E7894C91750DD1A2E6A61E564 +:103730008E597E2D90B87D7FF58E977BEB965782C4 +:103740006285CA290567F563014EEF79E37BD55D94 +:10375000F99DA43647DA3726E2C1461DBF8F161100 +:10376000C1CCC5FAEBA72C9640C498AA409E4A52F9 +:10377000113A9125AEC724C66AAFF3E1E5CF1D9497 +:103780002D9E83C5888B99104CAEEBC2B4B0079BBD +:10379000D0F1BF921607C9FF212AB9EB233BAAE655 +:1037A000AACF1305138AE744B7E6DC42D2F5A63C5C +:1037B0000E46A4EE2127B3A63168627E8E7D9D7DE4 +:1037C000C2B24B091678279DD082EFC4AA72280D89 +:1037D00095628E1D554B37CE00D16465850872C346 +:1037E000E997497CDB6340CE08902CE250D0BC06C0 +:1037F000B691CF0205CC9270294F1A718A8BC5926F +:10380000EDBBE432D3A6A153AD72BAE43438DE2561 +:10381000DC9C71E9FA7C9E1B9BE561CA15782CE162 +:10382000231508DADED96D56CC1F227DB0F17C4716 +:103830006A81EBC37BB31F28112823DD3E08B492B5 +:1038400033F7FE2B6BE711330ECBAB708D774EE960 +:103850004FD66625C8ADCD9D3F7F7B2BD92FBD3E72 +:10386000FCB7E40FEF951846F3A0BB83BF03A14F4D +:10387000059779A35FC235A048779F8DB4747C6BA0 +:1038800065539AD6CD8E0BF53DE512DC777363E078 +:10389000AE1E995C78C1608D2B0CF804AAAC03BAFB +:1038A000BC13639C8890DD49162EB8B3D606D74763 +:1038B00012BA91BF27904C35376ABBB83607F277FA +:1038C0001A49C83EA7B7AFEA90081371F65EFB66C7 +:1038D000FD1F302674D06A4935E946F991FBEABDEF +:1038E0008AF8E400A8E79813E69DD3BFE49EDE1AA9 +:1038F00010EE352FFDAD7794A06062B3E07A06FD3F +:1039000090520BCA89ED1FBF4EFCD791B6CE61E332 +:10391000794CAE93503F90AE55705D820CFB24CB3A +:10392000337F87154533D69FD774277CBFFA184954 +:10393000FDA723E3B16C42488930A666357D17A9FF +:103940005EE99026F6D772B9B1829212BD10FA14D0 +:10395000415EE93E98CEB00811019DE429E1283C82 +:103960007C68F0FE74CC6565998153584BD1B2D513 +:10397000824E94F7C9E4A4FDDBC218C3152C551F71 +:10398000749D72874B94A6E5B1E5D48947AB06D701 +:103990000C1557E13FBFAF9C2B879E72C8A82179B9 +:1039A00041FA1C7A8D51814764BF279A694C168E63 +:1039B00054E9E5AC6FB74BA2BCB66ECFE6ADDA3BCF +:1039C0005C1B2334B5D169CFE504CF43EF9011D60A +:1039D0006188BE2820DB25E4318C09C577379B48F8 +:1039E0009F0BCBF775B5B77790E45310113C045695 +:1039F00066C9E2AD36DEC33F26287E4835ACDF1B04 +:103A00002212C67B3C38211C932C60016D4BDB9E3F +:103A1000245D72E86F335750DBA2643E4119444580 +:103A2000D0934ED8A0668DF85D55DDBD26DCA35938 +:103A3000084E89CEA09D9610054C3C8BF1D29E9DE0 +:103A400012DC40AF3F05881399405871E9D410CF7C +:103A5000D5C25943EC15E4CCC19A38BF6769A78732 +:103A6000BE58971D447CC59CC87D9E73AB0C003925 +:103A7000128992998E2B95164AEB72204D12A298BC +:103A800096CE23813C82C5C7195D141E87611B93A6 +:103A9000C15AB3A58BE92E3481DF9D183ADF374137 +:103AA0001F6DDF99ECEEF4D3D3D0AD35EDF9656140 +:103AB0000E100560784DE871436751481603FF5EAC +:103AC000B9BF31BB94B5646BAB67953C16719989EE +:103AD00069C586C854F95CC6DC1B143962CE14BBB8 +:103AE0005E5012C57A419F6A695186F64B1299E77A +:103AF000384304C4D0026B7006D8D22158484DB068 +:103B00002440221CAB042986AE52F5C22AD21C8A5C +:103B10008320A40E35C3ADC55404BD63D64950BF40 +:103B2000D5A2161E276D1F5D8516AB1842C64082B2 +:103B300029E45022D2D6E47CF03940D67F9C75B57A +:103B4000800156836B14283143618E39FA716C8978 +:103B50004EB30F207F05869B99E5035C1AD8953DEF +:103B600032D88289ED54B9E4F2E8C53AE591BB85D3 +:103B700094ECC47287DACB93350B060E7CDF990484 +:103B80000AD745F2AB01A28D31B9FEE2DFF5B88C60 +:103B9000FE19E78512EE814C0D5ADC1F766D704CD4 +:103BA000CB0AB01D303401126BB313F6BA5D2CC4CE +:103BB0001F07721CE330DF98B70774A955E9CF30AF +:103BC0004A4AB640C615BB248925DDF7999173345E +:103BD000B89C46870A44A9BF7C7691EA437D3CD1D4 +:103BE000DD3723116EE97AB93CB0BCE4E8E899907E +:103BF000455D95E2A39A1D6B3763BC9D8139E6F163 +:103C0000E1CBBF42E1A4EEFA9D2A5DABD6F5924E20 +:103C100087A66EB195EA7C53599BF990C34337D37D +:103C2000AE5C58DF29AD3F52CA010811CDD219E56B +:103C300089A9B0BB19283036280C1CCDD2DA3187BF +:103C400098FD3D1D0DA54B7B10BB5AC99C91B4AE90 +:103C50005D399FACCDE3DD8C668F8CA7B4BC8C4204 +:103C6000B50078FB2FD931D1A7A153CEA5D4AC7A1A +:103C70008DE6486F609FEB4DABF5A8A2CBCCA19928 +:103C800015B00C37AC647A039AB6EA48E90C4633AF +:103C90006A3B0F044B0592E42EC893DB8707C921CA +:103CA000504E5DB778A4A27365BF8691C028973D3A +:103CB000C146CE1656AD4F8944366CC00C1647B679 +:103CC00036327771C93A4450728AE7F88A312D65E5 +:103CD0007AF73291840AC1B2E4339D77DE9EE8BC64 +:103CE00004251F3AD949B3E966AE2BDE0512238CB1 +:103CF000A03A10F159742B19DCB9573E543C6E08A8 +:103D000079C2238FD0B3731FB5708ECD5093748753 +:103D1000782A417A06EBE4DC7F022BB0E1DA8CFEF4 +:103D2000EAA9C8725874390E5F4942EA25A37A6538 +:103D30004A2B88CF62B8182BDD9D42DAEE6513E37B +:103D4000D03827393258692C5F672D55F1A1620BA5 +:103D500063375FD1FD4C1C757F011540FAD208AE68 +:103D6000B0DF85CEA87EE8E668BA4AA9B020638BAA +:103D700085BE187CB8A1AFCC2A6D5F895998FE0E1C +:103D8000DDD1D626471F22445366310870ECAD12B0 +:103D90008AC399649414A6E466E8168FBB0A65C7C3 +:103DA000D80606CDF8091E4C157890FBF7BA9C3C56 +:103DB000FC48E57B06459FE897A60E7609639A9F27 +:103DC000C1D5BC578C3171E305C41B526E3268C833 +:103DD000C4EB98CF5EB8DB3DCF0E9B13AAB02DE0AD +:103DE00056B0DBDA6EAB95B2C1C0283FF70C6AACB7 +:103DF0005CD63668E0500264B7B56E289F33C15F69 +:103E00003199A140B76F993EA68B7E6094EAE34654 +:103E100085F685E2F6DC4DCBD04B3DE9EA605154A6 +:103E2000AD4C51B28D9084EF1E6FB1064008B1A524 +:103E3000B7CFB4B5D426E559230C4D8F992B7A9C76 +:103E4000280EAF828186BA012EF8049517AD0FFFB8 +:103E5000BC32FCF834039A1E0FF375D9B3AAF91AD1 +:103E6000A209DD93EB74FD1B9F14D8B9CD85E7BD86 +:103E70004799FA6B88682380A512256AA274EA68BC +:103E8000AA1A9478FE2DFE55488AD526CF3806CA40 +:103E9000D155C64C91474E5BBADAB82C3348F95D20 +:103EA000EB48A3AC38ECBB8754EDF408CF6906159A +:103EB00082CDE5137214747E1DAFDA323F6F6E5EF1 +:103EC0009EF789E7AB5007D8A81FF66CFB6F49DD5A +:103ED000CF01C700439B9E0BBF2D2F31C2043AC3B5 +:103EE0002BFB9F253089D4CCB9BDF0EB2D4A8E3CFD +:103EF000D4041A65DCF32E434797506A94B596961E +:103F00002E3B9EE598B1586055C6C36DDB412281BA +:103F1000A5B1316F20848FB53B33EB377559F74529 +:103F2000978B6637023C3B9BCB51ACCA10CD10132C +:103F30002637C1C56D998F238510683C25C52B1187 +:103F40009C11567BB2F494CB49AD0FCB3C005A3E4A +:103F5000CD028E02A7EB1E65DCB12DEC83B43936A1 +:103F60006C475F9336766032D9B65143353C547511 +:103F700063EE41A7F2DF87F65FE45DEEBB268A8839 +:103F8000E23496908D22F0E21DB1160D379FFE5857 +:103F900035539C856E6772F525A81CF9F82E2EE422 +:103FA000BC84B8AEE31CB55FAA46DB794FA5327876 +:103FB0000D5A66D48F00C750D58C65806839E5BB33 +:103FC0009635AB2C509F4E08CD68883CAEF3FFF67B +:103FD000824B940FE0912F5A8018145B14DD41FA44 +:103FE00018389BDFDA4366B49005A5B23EA495FF6E +:103FF00072244BD5C3001E4278FC13B50D3C95B519 +:104000004355B8AB6601D9EC622FE3BFC3F90A6030 +:1040100085438E6DBEC13D24636396E85D17D871FC +:10402000E637FD9B78B2CAA83E6BFA65C983914218 +:10403000397A0BAB722A9E105FD5B368B883CA6217 +:10404000638A104CFDED84B279BF72C571AC730206 +:1040500082B515CC232077BE5A7F2C1BE76A8B983C +:10406000D0EC56183D9D3F8D710BF1335F40CE7201 +:104070005DA4076B6686DA080B92E9CF983D1CC1F8 +:10408000CF425BC92E7D9132E28D1E2F3D5B9F9BFF +:10409000BECCC20E999533D827FD2807F278B420FC +:1040A000FDFB8256DAE37205DFEAA2CC1C68795D7B +:1040B000C230A4DF0003BD4375E1915D12A372E934 +:1040C000817953C604621EA2FA5FD060230AAEBF94 +:1040D0001E0DA976EFF20E24AF9BEC4850D45EB9CA +:1040E000004DA43110105901C53D91D12D32449A93 +:1040F0001DFA983AEC61A1606CF85586C7ECD75B65 +:10410000B4BC9371FD665A5D4312B43C2049F97406 +:10411000A90E80D87DB9D8016939CA3DC6F59ECFB0 +:10412000C8636CF17D2ACC4BFE9EBD82C2BB37BCFE +:10413000758FA43C7E474E0F6F1BFC224D2ABBB3EC +:10414000CD465C290BAB67D9D07B689DA85C262443 +:1041500012F3AD6C5CD215CD0DCBB31F5C2DABCF84 +:1041600033ED35F59B26DD19E7CC8EEED604929F14 +:104170009CF5B1E490FAFA7BDE1FCF291DA707D585 +:1041800012C017C78539115D9A133BCFBCE2D338F3 +:104190004DB08A09FC752407811BEEA87F64C325F6 +:1041A0007289882A370D9158AECAF638097EBBABA2 +:1041B000FB743B357296A0D6605F120E7C3403E030 +:1041C00005B6B65A75D26637FA236A91E1DB6D916E +:1041D0001DAB5704DAC2C5AF6A0F9470488EDD83F9 +:1041E00090390875B0FB5AFFC19A2E63C4BE09947A +:1041F000B191DFFC14E2745579619BEF12C3EFBFFC +:10420000F5B7622EE344EEFAAB5C664E4E8D00E5E8 +:10421000BAA652E7F3B52AEA297A30F135701E932F +:104220002172A4DADCE21EA334D6EC4299A1FBCBC6 +:10423000B17FF93845B9208C10D2A5ACDD047BF1F3 +:104240006ACEADE805A80032CFDB603376405DD69C +:104250005E424461C9C03E2DB005F9FED0C3DA3ECE +:1042600002536AEDD5796B809053FB6BCA11B1AEE6 +:10427000BB8A13E4D44ABCC650AB7F20BB02951066 +:10428000443D724270CBB172B46B7CED88C98092B0 +:10429000353B3B7637AD10F47E2F9A4BBE62C9CCCE +:1042A000557811B08EA9A1FC71BFE30AB84176D749 +:1042B0004EFB801C898F6312C1F407A38BA9720384 +:1042C0005B77316DEDA944D464B41265F83B673B6C +:1042D000B3A7EE1FF5C2AC78F6246E36D59581AD46 +:1042E0008733F7582C088106E88A2EA2D5E7F04ECE +:1042F000502131ED20DB96FA7635E1DB79D10A26C3 +:104300002F8465FBED44D8252A0D419ED0BE23D8CD +:10431000F8DFC0FD85432F7F60C91C9C14D38E8AB3 +:104320003C14439874DA5506898875D0CE230E4024 +:1043300034D5AD790CE9D22C4CD7F882663434836D +:104340005EA0BC92887CC3B348EB17FF93E399EB64 +:104350006AEB9B7D964912D3148DBB18F8317AB75E +:10436000C919B120ED23D3A339CAE6ACD83B03EF7A +:104370006E5E2AE6D0258858D80D154609A7E88430 +:10438000AC15144C02DC98206E7ABA26FE73DAA9BA +:10439000CFECF8C0F9879D03577C0416E0CFBE54DC +:1043A0009D8676DD5792658AFBD777FBCA25417BD0 +:1043B000F7B9A02D0D37FF766C38C8011406A83068 +:1043C0001F4CAEEDB43B80D83795B775862BE339DB +:1043D000EF19779BD8BECAC540235AEC5FA1B6DF60 +:1043E0003654CDEFCC74C3B9E853B692E16C633662 +:1043F000C62A3D393235FD4249C5452FA278556957 +:1044000087DED05F1A8CA37FA1A8BE32EAEC3423EA +:1044100084DE047356864A10FCCBB05557DDA7B135 +:10442000C19846C5F5C7BC7A76C9D4FCDBB05FCE6F +:104430003BBB60F6BFEDC768DCD255050C36AC73EC +:1044400077882BA000A32A0B3578DAC05BAA921AD2 +:104450001C31B69E10C88EB51034C3DA7BE4BDDFC4 +:104460000B85A8AAE1C788232E8EAB3B2DBED5CFE6 +:10447000C8B15C746EF311CEECC790679B67901F58 +:104480007029374025F17790FF8BB77AC7DD2CCBA9 +:10449000248ABF827B137E5CB6271C18EB9BF2D963 +:1044A0000619FE534EFE2171F4A0B07AB37D6B0560 +:1044B000B5A4AC4C3127A01E9A7EEC1B0888C7A778 +:1044C000D1C495C247CC10C1C872BF35F4786E26EE +:1044D000640196E1FC262351EE14C4E89E78F3CFE4 +:1044E0005DD77F94A4A8A7CB4B1105E4264723A74B +:1044F00043BF58559100030AD1ED9ADB3F3116DED8 +:104500007E7DA9B619D7AFC031FA2EBD2DEA38D6B7 +:1045100007F8C3FC1DDEAFF1356A0D9BD7670D2888 +:10452000081421B76648058D147C71682A15A70800 +:10453000F7432782F714B46B15392953AF38520665 +:104540004F6C3951D494A5D1278175DFFFEFDFD6A9 +:1045500096EA5C24848F8F6FD2A8023989C29E8E1E +:1045600011E640430896609A78DA7E473C31679FAF +:10457000414BEBFDC4B2707D0C02CA498E562AD75E +:1045800082BBA20209D1481AF9A4605E0C58CDA8DA +:10459000A4DE25174412D94BB880E6F30B59669177 +:1045A00021E0C21BD9E18266E128CB8A4802E10EF4 +:1045B0005AE0D4A0C1DA4E959C97C2B1875B106FC8 +:1045C000D229B388569CB7F5770CDC9D6C152589EC +:1045D00024A30E1DA278928F4CC93AC825D8CFD7F4 +:1045E000C9FACF53F1780A555EF634F074D70ADC75 +:1045F0003AA5D85A5353930F74D52B013E00798BAB +:104600001A251DC0C0C76F5B1D515AD6797E797EB1 +:104610002648FACDF11014B3656A7DA6F897B4D494 +:10462000494673E64063489FB7AFF49E2D6CF40093 +:1046300092EDB1B9887BAE68FCF2BAFDE206C01D0E +:10464000206646E51FE6E7051C1151247937EC4149 +:10465000A20AB2FA77B1FCD01F38A5BB3773CC05DC +:10466000E5C2D6120C1D9FA17CBAD6381930BF6D99 +:1046700034397E84C109EC5F0FCCF91E5A529F1E5B +:10468000FAD1DA6813EECEBAD7639212FBB2E640E3 +:10469000651ADEB9537C5138F62E04548B0182180A +:1046A000C1115B7F231C4115A44F843CEB19B99DBC +:1046B0001E67B441323CA5ED833CECC8C7297007A6 +:1046C000661298EC34D9C55AA53000899BAC5B7250 +:1046D000AE7FDEAEDB0B2AF57FE977DA03A1B90501 +:1046E000FFF094F694D5DCF761957B45968BF056F8 +:1046F00070FB17CB800DB08D27CDD9CEE164785BF0 +:104700000C11F7819B4B3D922E15BFE530123218EC +:10471000642D3144422D14754E5A705BDDFBBE573B +:10472000CC21EBC13063DBE6966A59031E7D5FE85E +:104730009D5C68301BB869EF18CE34879D301DF63C +:104740003C2C771BB501BFFEF42DB0D86265517BC0 +:104750008F39853BCC3A85591451F2DF6C6693450D +:104760007A4D9133483C62E7291C8A1EE7C00959FB +:10477000BF26968D76A66C9051122549698DD05929 +:10478000E22BA54DBFF5547AC4BD2FD3B74DE9F048 +:104790009BEA2569635892F68C61DD93FE02658B76 +:1047A0009252B1819305B99D8DE3DE7422E6BFFD7F +:1047B0002494C591BED782A089C010959BC85C6F18 +:1047C000491FD12D0A96B995038D63B3ED7BA5AC36 +:1047D000789BC76D6D99E512725D767AC01F138064 +:1047E0005581097E9AB2AFBB23C77D084B596450EF +:1047F00005231386D4640007431269C22DD0BF2954 +:1048000066CCB0A1EFFACBBD00AA8E860661BB9A3A +:104810009511172612BA8E3D474B6178F7688B1DAC +:10482000283E597A461A5E457F53AA3B8ADBE7B297 +:104830002306B6B0E57106F3305A93AA64889B3913 +:1048400020ED95F15743B7D8CB6B8616ACF6C0E098 +:104850008499397A720C1EDE4A15193AD16DEFBE71 +:1048600005C6287D9C2391F8C89C35273D271DD679 +:104870008D93132A80462390DC6F2613BCEA78447C +:1048800026676C39644697A3D1D3460DCDCD181455 +:104890006B5331A8DD9FDA08DE0181FC71073872A5 +:1048A000BE8159939312C09DB4D5A7E703515129F6 +:1048B0009A549B070BCC363C9DD3D1E44C2A339AB7 +:1048C000B202376D068BC6619E5A54723467C5605A +:1048D0004CB26952B69B20A4795B8F42B289C5E382 +:1048E00036E4143792A2F367685634DC45125586D5 +:1048F0005E3491AFCBED0115F7D5346CB8D704DD3C +:10490000992DBF33F6B97FE26E2844690BE1245636 +:104910006AE521EB3CE86CE53730F0ABD677C4FFB5 +:10492000FF0C46E5FC3DE337327009958D118B5342 +:104930003E293B50237FCCEC67E866442A5336413E +:10494000F115F4168277DD263600FEF0BDB2B7E22F +:104950004A0648C88430B48EE610A595BC059AD99D +:10496000D14534CF0E4BFB0DCD64760995EA3182EB +:10497000888BA0150993794CD0B0B25659FA6921A9 +:10498000A452EFA05F3453D91970B7C7AB75958A9D +:1049900046F585A724388000AD19A6D318E4CAC609 +:1049A0007C4E742D0EDE428F9A2F29758CF4AAC08E +:1049B000CFA39349F3B4D0BD62D2D0C211A979CAB2 +:1049C0004739C01E9E1365698D968F4955D2826600 +:1049D0002AAFFC148DFBABF0163DF2300935203DBB +:1049E00080CE0F3ED4B488367B662E066CFD0565FE +:1049F000E90818A782EBDB1C2DBC16E64BC098C655 +:104A0000F99017E3A31A4B38E087B05645A5C3B118 +:104A10002DB570D9A7DCF8B9A9B34BA37893CC1DF9 +:104A200094C520237CC12E8B6C7358F7DD615DD358 +:104A300046CF53795334DFEFE8A6DCCF05D640C428 +:104A40001351EBB10039403BD501329EA37BE5A762 +:104A50000DD25C5E71103C7134BB5C4010416FA69E +:104A6000D9CDD05A207FFE677682D79BDB17A71F50 +:104A70008B410EBBAEC2DDCA5AF7A604313B4AD603 +:104A8000D409D48ECA76563B24CBF54B9F4334B21F +:104A90004910011C036FC851C23D7095EC4055F69A +:104AA00042E82EB758B3F686A603CAC157DD414087 +:104AB0001BB1A74853DF02C75195B3DD42C59080B3 +:104AC000DD6B7C5A7FCC526DC7DF1082D6E259F283 +:104AD000C43A955466C17AAC9C37C5FD0657743507 +:104AE0002DDC1170D0F1FDFD696F13B32FD07773FA +:104AF00039EA6BA36BA7C293A2460B5814D3337445 +:104B0000C96CAF32C283109D6C36B6E09D8593D6DA +:104B100071EAAC90F5B655365A093EFF0534E5F317 +:104B2000333CDDF6D4B909870FE1B988501FE4069C +:104B3000779A470840EF9E9DEA029C6F10A7F1AB61 +:104B4000FC5D29D23040BC256DF16EBEFFCA4275B6 +:104B5000DB0C75ECA8178D46DF7E2AF94DC20817CD +:104B60003882AC32123B664D92EA0D4A65F393BF30 +:104B7000FF1FF83592BF88D02558006C7DE0D90D15 +:104B80001A5FA254779817A391C22D5097AD69FB75 +:104B9000BBD34C787B545F54B6C5BA125377A70386 +:104BA00065A65CA537C5C1D6D281AA9F741FF5D072 +:104BB0007CFDC19623C4B6F8DE26CFA86A90F648DD +:104BC0002F369EF319E806209DCEF86EBD54811055 +:104BD0007975266826F7726A76FC87FFBF53180836 +:104BE0005BF48C2C534EC3682F81A6850CA75B5BAE +:104BF0001B9016A87676C3B0444914E209227706C2 +:104C000006A003166EBFA8BBF7C2CA41E82144E262 +:104C10003D01F1553DEB38CFC28586BE31478797C0 +:104C2000BD5D8AE1F7160FBCC9AF39A30FC6BEBB85 +:104C3000018D03E59498B16EC2CD0BA9D99E62A3F4 +:104C400034728BB1A253305C42FBB4084D5CEBD99B +:104C5000D01B2300DC1051AB5B865C734997528EEE +:104C6000FBC7BEC0A62301C90114C7451CA4F35B42 +:104C7000BFAFCF1EC296129A8E7DC9246D8D734A26 +:104C8000BC8D4D924F3C9EFE0105A33AE48F82A855 +:104C90003DDA600E5DDDD6BC2647651ACF727BEC2F +:104CA0004A54D375E8B750F50A7636419753D7FF83 +:104CB000FCF91F0831DA22073C85AAB34399CEE1FB +:104CC0003E718552B47CE0B0CDFDE6CCF4E0C46B1F +:104CD000BFC54A2E65A03A303192E2A7BF99826BD8 +:104CE000D83015D81DF947D14100C228B4EA6F1554 +:104CF000888706095F9C33C2BEA03BEBD56AFD6185 +:104D00008057D99BBBFB0F8532F5E436CF59A530D0 +:104D10009B5B67742A62E38CD5B0F27420FDF0A22D +:104D2000068BF71781FA580CEF28F753ED38B25C71 +:104D3000E1552DC2E5DD374F4C389933B9DE0B9F75 +:104D4000B48C848C5C276C1EDF35259E1A2EEFB741 +:104D500035D2345E1BAB7DC03410F2440DE0A7D5D4 +:104D600047811AF5A5FC90713191C34B96FD139CB8 +:104D70005D0FD731A75F512AD8B27DCB58DF885B52 +:104D80002133E8B65B3A9FF42046AFEB0978B4B024 +:104D9000B77A823F46E868AF90C6613BC1072B7186 +:104DA00051F8DDAA936B33AF0C3F17BF726A3D0A0F +:104DB000FDB87AF1F5D2607FD48963B346C96A91B0 +:104DC0008AE397C0F0085AA59D91973D86534A0BF8 +:104DD00026038A27E0241C0F3C185BDC939D0E1DE4 +:104DE0009B42C628D99B28C597CA740DBF6321581A +:104DF000CA22C238CF141D73386043046C3FAA1F07 +:104E0000DE24804A0728DD624C1DC34A5864C6C7A9 +:104E100014CC1CE165C830CD58796CAB70423A9126 +:104E2000AFC91A8000E83C57C8347BDCC6E248A40E +:104E3000771B2ED8292719CE170FF844820EE46B62 +:104E4000D890ACC788BB5B1A2D243368CD12568C22 +:104E5000D90CB47B69C1F7670CB80B17B6B4A6368A +:104E6000AB2B41E99CF48734BC9F351925F7A73358 +:104E7000257D110AFAE11B01D6C0E18F1D5F915B10 +:104E80002E3D10C7C268C23693D958E59943F578CC +:104E900023359FE11C47F60C8E53CBDF00D017A7BC +:104EA000E8AA37EE1AF8F1349CA5B5A66E56B9F605 +:104EB0000BC4F53308E363BAC1125AD26CDBC17577 +:104EC00017F3FA06CE57805C025089654170617510 +:104ED000C57BDBFEE09880868129B373665E3B412B +:104EE0008C06CD5E9102B24B5D1BB573F8BF62E4D8 +:104EF000AB4EEB1716E8ED7E8549DD4A0857CC3BF3 +:104F0000EFC55B481AF8E3473E175FAA9190818688 +:104F1000FCF40F6C34FE036CD0495377A00EFDE017 +:104F20009A9E8C8F12A198DB5104DC7CC60FBF4780 +:104F3000950213052EA0DB0C05341F0351E357889F +:104F400075E90A46352AB45703A83B7177A44E6920 +:104F50007C124152CBC88FCD1EB86485EF224B0224 +:104F60004ED5E5AF6244E38A490B131DA2CD794EBD +:104F7000EDC05A8BCF10907AFF97A42F193CE9818E +:104F8000B2710D687F29BF946166A8368C256431A3 +:104F900036B211D314E600B66646D411D2269F0D60 +:104FA00052B67E0624DBB3E05C4C1ABE795EF3D0C9 +:104FB0000B2F7170B7C58C04C7F1ECEF667DECC3A5 +:104FC0005E726C3F09B92618974CCBE76A15F72536 +:104FD000341B906626A01DA56C5A9A389EF1BB58CA +:104FE0006CC7C183B31758CC16F0D7EE34E3C4981E +:104FF000495A4A5283AF4A3DBF2E2ECFEBFD135D77 +:10500000669ECEB55D75BC24E0F418A01BFDE1ECF6 +:105010000B4C182FFC4519AB94BE608057DDBA0DC0 +:105020002162C54E90AB3A690A9066B97578480519 +:105030006FF51D49BB7319D817ED7C28FEA894E9BC +:105040006546FE2112DC634453A29C4239679DCB26 +:10505000C9936C510CB051D1883C91CF0C1C41626A +:1050600022C042B44EBA8935C2A34ECAA90A5A997F +:10507000ABA2DA76154FF2619E9757B046D02C302E +:10508000B5EF37F4F6BEBD1DDF15E4C9157D71938C +:105090003A03EB20E67B6E010E13792E27F2E68FA2 +:1050A0001FB8BD6D23DEDAC9758A430F6887071202 +:1050B000254F37467846B1B26C49D426AF6E853558 +:1050C000A3F4EDA03E432E504FF28270CB885E5F7A +:1050D0005763214FE2D64361FCF387571DB2A8689E +:1050E000AA5DDA9E67192425DAEDFCCA769104815F +:1050F0003981E67DF54269928E55B2002E465D12E9 +:10510000AF9F412757D41789CE4135CBAF901AF3C3 +:10511000A5152B106C9A898A110A1FB19B02B2AA9D +:10512000A8EDE2D641EE017A8312AC3121910C3028 +:1051300047B0A005FC6607A728D9C57491EB688D18 +:105140008A600BB0C206FDA34F572E81CA3F59D4C7 +:105150000D7896E130400D78EB90F191ADD3619BE5 +:10516000AB034819EB6EF0935AAB067A82B26BB37D +:10517000502E770293B3D9C1E307D56C229D802EC0 +:105180006B40B161EB7843AB5FBCC764C41D197B56 +:105190007E238DFD81E731A0DC8235E1F80017B870 +:1051A0002B20E74AF3AACD613CD80E01A320FCF8DE +:1051B000BE3080118B9BA789DB41DB4C11E83F316E +:1051C0006522FA1AE2AAE5DC0B94CEB406D5D59D89 +:1051D000F55067C7BC8B9209C386D4E3C5175A48FC +:1051E000BE1B57A7B749482751EEF1B9BDD4D4F239 +:1051F000B85B764A8DB862A3779BBE8F4591D6ED9A +:10520000614CCF85496A420913A7E137940D52C01A +:10521000F0EA5C17CE842F36978A665B8FB9B5E3C8 +:105220007B99124CA22E062690461CAD48F29FE0B8 +:105230008E820A430E3609DA9E90E79A03CB02E18A +:10524000A9C4A5392C70DAE514F2BDAD29B49DFED0 +:1052500055C679BDC014129028261D388C885B8DE8 +:1052600017E626639FF02D1F6457FD259D7B089749 +:10527000380DBFFEFC0106579F704031C2BD14FFC0 +:105280000DE91A3605CC13BCB623AC5FCEA1712153 +:10529000AA0CA7DA52D42BD17DBAFC6B8417AFB815 +:1052A00092CBA1027B4B81A19C593F0146CC81CB83 +:1052B00079FAEF26F289F661A53B1F9FAB519FA0BB +:1052C000BF54A786E133BEF8D0A34890967D2968E5 +:1052D0003CF6B2635287361DAF461667F477A6C612 +:1052E000CDD42D0E0B109CEDA6B8E2F14677569169 +:1052F0008F9726A8FF326044B030ADA0133A8A9150 +:1053000005FA60DE74B7E45ABB2BBC2BED9F1E2C54 +:10531000700705BB91032E372836B51D6ACAE1CE4A +:10532000019CAD50EC3BED4A9C73DBF69CD042F007 +:10533000EBE9013BA3D83CD03E63096D945B7E4C06 +:10534000BF98A9960803E61FC0D6D7B34B3E686145 +:1053500008F5E0AF4E0A23973CBF648F55CD1A5530 +:1053600058C3B946C5C7D37A4A23DF7DAF57142B3C +:10537000D48A76D3F67F3B3FB53311395EA87E37AA +:105380004756AD0A5C2D3A3613A55797D42D267F84 +:105390007B7DD593FBEF44FD0B09FCB052C0A665A5 +:1053A000D984C203968B8E7F0459AC56EC015351BD +:1053B000FE988827361AE9530EB95984518C35B5B1 +:1053C000F796CB2834F6091CED9751047681DFF56A +:1053D00060E0277F98DD843780187A6F9E8F69752B +:1053E0000F64124CD8CAAD706645F81B4C4A8EEC5F +:1053F00074BBA61ED8DFB2AEF51049269A1F4DCA5F +:10540000EBA742C9B0818EB32012E4C234FBA71FC0 +:10541000B9C4421E878DF82F3EB1EEA8A5A5A624DB +:10542000A27509D3997367644F40B33D6F45142942 +:1054300066A2D1DAD59E6AD38C40DB992E63F3F352 +:105440007568BDE8D5C93F0A15F7E87707DEA88972 +:10545000503B8C7CD29C8F861B99BEB8806A876D2E +:10546000F08E1772332CAE27D43EE5142A4FB1DBF1 +:105470008D95ED953BA1379097378F8FCE1FBFA3AA +:10548000412E3DED230C5B1AFA4FED18C566F43A38 +:105490001A9FF9059C53DECF49833459F0DAD5576A +:1054A00046758DFE97F7B8C2DFE5B1CCE39197B4AE +:1054B0006073C012993C25A04FB0630C1BFFE0F94C +:1054C00097475F40377A763C329CBF4ED7EFB001AA +:1054D000E9DB93761E18A5E14A9604A2248ADDF33F +:1054E000E9F3252E4A5C91E868D12EA4AEFCE30CCA +:1054F000BF37B9F9990C145765902B6DA539863EC5 +:1055000053F75FB47AFB0D8EDF9531C3169BBC4F0A +:10551000C83C30A130F2DA24C1CD35830D6BB10D1A +:1055200071E52CAB569450750453B54E158F186425 +:10553000532C9F789C0B835362AFD370F8AA00F56D +:105540008C5EC5A2DD13D11029A800AF3D14D1DCBB +:10555000C3A5FCFFAA0E0DBAF6231BA49AA5FC3F17 +:105560008BFE2ECAE6303411145729B171A73CF1D5 +:10557000E1579DEB28A32FF57DF610D86A96673E7C +:10558000BFBD6048B81AC3D021AAF066088E80C695 +:10559000C724823D57719CD7A891B450C500A5CEB1 +:1055A0008124DD953F03710DFDA5AE9C5E0FF2BB1E +:1055B000D75392946CF8767B966B7ECA677560556C +:1055C000A76C50720C73494848FD7BA6B7AAF02619 +:1055D0008998FE39A2C6662A6B3F8AF4A1E49D40F1 +:1055E000DB159D6B3A09AC18FFCF7B68E511090903 +:1055F0008BFFD4530D603F87A5CA7F744C141D5197 +:10560000472DCDA345FB91AB19FCE2EE1486D40BDC +:105610008A0A71F85F247CE890E616800CDAFB8633 +:10562000684B2DAE63C6BB4883E929738097B9CA1E +:105630008D553930A9F4FC545822A673021995E50A +:1056400024CACFF8FA4BFA338C1F1F5CA0EC1199D7 +:1056500001BC57D74076AB56BF4EE4DA0769640108 +:1056600092FB7D429FE91077362F42A669775E4113 +:105670000880B6E778FBA8FBEA0CDBDDBDBC91B483 +:1056800070B192920B5232BEBB125B85D3EA79A7FE +:105690004746D704E882AD1DC0419CF2E45C8CD241 +:1056A0000247FBB5E7CFAE1F048948FA296B7C851A +:1056B000A716638890DE239A4BACD43B2FF40C449E +:1056C00031938C3446A29661E480A6BD97BD51C04B +:1056D000DAE6850A20F4ECF7AE4DD331B20CEBD705 +:1056E000A92774574D1903469D9C28902977CAE530 +:1056F000157E8D788DEB98A9D07B2AFB14A66ABE07 +:105700009F5552F51663536952006870C5B5B05C79 +:105710009AD5177A8BB3E981BA21376B26DA8E0BCB +:105720001370D6E0B748ABE1B3033E0B120C511136 +:10573000716A36D57E64D68E900DADEB9EB4DBF3E8 +:10574000E865B6F2B373E14EE8F3C442F51B437B60 +:105750000D1BA50501F3E25F689CD59E86C545DF5C +:10576000F63EDEEE3D6F4B71E98C58274BB7BA5EC3 +:10577000559C51857DD1B3D6D55192FD4A4B59697F +:10578000411F4CD461B7973D59804DF37742FEBB22 +:10579000D0E83814A66226E4B360271EEE457EBC2E +:1057A00075C9533B6EE0FF771705D644FAB3DE01A7 +:1057B00069B7D07ADE142F038B8F0A9ADCB6841B6C +:1057C0000F9CD4AAE052BACFEC7A5EFCEFE5447F9E +:1057D0006CFE64D74925FECCF9D9E98EFBE77B4BFB +:1057E000BE014E865E35BFF4EE6E8B2887DC9DA72A +:1057F00030DD7CA746209220D20908FC95EF1747A0 +:105800004F3D6F2F945B0D5B58A2964603630905CD +:10581000BCB4F3C0D3B483B1F51AFECBE2B6E58ACB +:105820008931615B018FDDDFF350E6393489597FBF +:105830009D10580EC30AB0802126427D0F9F19D7B4 +:10584000453ED2C98A140BB7C660FF663211D76EC7 +:105850004779E76FE98704F14777299E6232B97B80 +:10586000264B945D23FB64B3C581D896E4972EED57 +:10587000B19E8E6E7C99FFEF805CEFF0FDC8A46C4A +:1058800093FA4874FB6ABFB36476D1FBA7BA417838 +:10589000ECC65CD517E82CEF174B80F51F0FDE6CBC +:1058A000B23FFFFFA51B8AB35B7FFBC7D10D1D92E3 +:1058B00019281A41B13F0853B50791FD94F6F9AF85 +:1058C00082DF73CDFCC2E5E804868770720B9A45CF +:1058D0009A04F700D2933172B4943D61611D248A19 +:1058E000BD4FE27FB5FB6B82BCEADD96E7D3D360A8 +:1058F0006C1C91C25F493BCA92FAE3FBFB08F8318A +:105900003E66238FF08C99B032AC85594F60558B31 +:105910005B91413E4BCA12C76A9547663C4D726C1B +:10592000E8A4711265ACBB68E0A47C36FC8A14E183 +:105930006A1DC41796B36C776EE13A29F37161F072 +:10594000A3F0B0ABF9C335E3E28D325A8CBCC893F7 +:10595000C28FA14BA4AF223C43963814F2DD4C0D0C +:105960008F4D555CDB220141EE4D936F4EEBFFEF07 +:10597000FA8E614AC79A3F8F37FEC9A901B3730CEB +:10598000DC29E56DBED8035F42AB51CA12342F113A +:1059900067F0508F7364D81F9E46AFD569EBF24411 +:1059A0008DABE0C4626854D887C4BDCC56CE2737CF +:1059B00078CA09E589FB18CF3F12D94F6913736183 +:1059C00054C1F98A854570C8C3C1443DA297001FE0 +:1059D00098F61EA530B770C93B63ABC6AFBAD7FB0C +:1059E00059330FE0680732C43FE61ED52F316E777A +:1059F000721B890717F65C3716679E4F64BC983296 +:105A0000F9AA5A8D920E14FD8A9EAB1F8889E03B3D +:105A100053DC324189D059A394473143374F43CEA9 +:105A2000A06046BD8ABFFC88B4E6F5EA2A3EE4D60B +:105A30007EAD6904E1B05CD9973770E8C637C531EF +:105A40008625ABEEEF41D4E0303C3DCC0A4A34161B +:105A50003925B151BC6B89752E84E5C68607959BA7 +:105A60002C20043629D988238DE44FF150813EA89B +:105A7000EC75B4042878F22B45F82A3F001D7237E4 +:105A80006DE3CDABA39E4BA24E6566C0B33B163211 +:105A900032C8F6AE1AA19E7F947D260CE36BDB958F +:105AA0005988C3F15F273C04AD42ED56165F7D185F +:105AB00066252104F24FFAD57B861F76636177ED68 +:105AC000065B3E3128F260DDE459FA892C32A2EC03 +:105AD0008A31D52DFB331DE5C702B4AEA64CA3DB3E +:105AE00096CF4D43BDFDDC6E88BB7ADC4046329DCF +:105AF000174F67574A283B689FF0BF2D71450EEF3F +:105B0000010B768D6A3E408899DFB984C875B43A36 +:105B1000E0015CDC4EEB29A6A6A067F1336834A453 +:105B20007C00BC3C769C593028DB12073BDD3234CC +:105B300078519DEC8906B61804C610340CEBEFB60C +:105B4000071987A76B6D5EA8291A3F27BE9064517D +:105B500047A1935FF8FEC4499972E9FB760158D1D9 +:105B6000FA7B03567FE23D50622AE37E4FA4E6EDC6 +:105B7000295B7BCE8DC6B66C521D5B3890308AFF98 +:105B800006143E70F758E22E8E65AF79B99DF9CABA +:105B90007D77FC325650D087574EE6FFAC0F731915 +:105BA0007014CBF3FDE893FCC9DBD520015C953F75 +:105BB000602DB51712FD50BEB636E2B7B0AEE2BEEC +:105BC0000C148A03EB4A770DD857E33C4F86C5E2A5 +:105BD000DB924A96304D2ACC3AC8F6862E2D70B00C +:105BE0000E3976DC198C42DD61CDC2DB7F4E7C063E +:105BF0006CA0F925F4860BA7124CEB1854C56DED7B +:105C000099F15E55660140280CE72FB3395B59E6E0 +:105C10006DA0760403B61D8F04930C3A8B4D15903E +:105C2000DE380E1AB4C96EBE4BD1E907B78E11AF7C +:105C30005962246170F7ED1DE57A0E93743A7C6227 +:105C400001210F8EBBC1448F5D577801AA10098CCA +:105C500093CCA74BE2440E7797CFD3D66AC3F756BF +:105C6000E33913CFAB220BD7519A201D43AFA1E7E5 +:105C7000F4EB717EC5BB4BBDABD38BE93251E1C7B1 +:105C80005F93F590D1B9E8D51F53312F8E3970DD70 +:105C9000C1B2D3617C0AF10CB4A9503CF0F0725847 +:105CA00012B94B7E138739D5BC8C32B0A95864ED3C +:105CB0009EE366251CE127ECC97EF4690AFA289F59 +:105CC0001F9462B2BE790E1258E21927C15F0FEF1E +:105CD0008E2B70B728CAD12A54FB89F436A3191920 +:105CE000DC24A4E26AD856B212D49333B65E2EC432 +:105CF0003D8C840D218890F35F7A1B7A11CFDFAE43 +:105D0000090FBEE2A48875A48FADEE5B6023CFC8F7 +:105D1000C4564CB9D8FA666C684C987091903BD7D1 +:105D20006D07956FA573E036386F22530A1A5EEF40 +:105D3000B321F3EC7DBD52352CD23D4B0C3F56BF09 +:105D4000DD3C66DEF62518840D37E7F0A60B801FD4 +:105D5000CF6C97260DB9449A34EB6BD32CF35DA529 +:105D60003490240238DFB2EDDBD6B52DC20EFFE948 +:105D70004371ABA18757D682F70FF91FD97BBA239E +:105D8000B1173FD29BAD5F02A284518B177B03D02A +:105D90003AA081E5AFA22446C5F7BEAB865FF2F21A +:105DA0005D4054D2BABB58AD1ACF4D72C9AD005840 +:105DB0009259D9BF3F307D75BC93461EC03E2F6AB5 +:105DC0002525DB6B64DAD411B8682A0EC502DB3FE7 +:105DD000A381617D2A85C3027C00453240DB5D7072 +:105DE000C9A6D9DB0462DD29BEDFE57B286833283C +:105DF000D28CB5B8170CF5525BA7652F41047758C4 +:105E0000A7CC4C96050EB06A1955F5B2C0571CDFE9 +:105E1000EC3F3ADA2C110E12F071FBCCC6FA006995 +:105E200034DD052C258B677EA8994D5E2E82BBFB49 +:105E3000C265C67631586EB00E683C7EFEAF8ACE23 +:105E4000D2977B58373E64BB08D0560079F41332A2 +:105E5000E3F9A7B4C1D48C038A0075B25F69BE624E +:105E60006B287341F2432AF58A7BE87424478E91AC +:105E70000DC7DB24818C15C27277C9B2C2A85253F8 +:105E80009A3A6AE6ACC276011E00ED0BD5E63E2FCB +:105E9000A437DDF2793836BDFBCF17D3D7E8A2AAF5 +:105EA0008D92333FAD6DF6FFA99F5A84AF1CA64E6D +:105EB000E4DB2C028E019C67273A2BE95955D6A4C6 +:105EC0009E98381DA3CBDFD418FBBF27C9EAF0A6E4 +:105ED000F96B1F3630DB9A1D3C4C59B34C43D1BC97 +:105EE000FD7C81A5C69423AE81ED33C50D7ED250D5 +:105EF0008654E5A9563F4BCFFC75BC38CE25FBAD8B +:105F00006DAC8C0DCD0BF91F07142A2ACBD578F177 +:105F1000423733004AD82323D8E4BAAC2C53013398 +:105F20002FF0112857F292562637B1168EF5C11967 +:105F30008C4DBF5F16A6EBC7C8150161E1193E0580 +:105F40000D980447E211E1BB2ADEDD975B8A23F45A +:105F5000382DEE6B4CAC9F92D921CF10118F277842 +:105F6000CA28CFCBDB00BBB40B37679AB64D26CE21 +:105F7000E2649297B64F22379C336814244DE18235 +:105F8000C72FDD42269272C3CCD92E56DECC0FA687 +:105F90008C8B7C1C346D6E6979B19FACB3E0A964C5 +:105FA0004733560DF246A42731F4D69B23BBBC855C +:105FB0001A7461C1E5ADC13A7254D62715304C60F0 +:105FC0007A7640985CEEFA17D541B33E0C63EE87C3 +:105FD000D74A0A33CCDD2CEE37512E860A2A0D180B +:105FE000EF0616A4F901EE7BC48BC8FCE594A8B4B7 +:105FF0001037D5C5E899CC01C3A4D06C2425DE3E6A +:106000008DA4263E679530D3E96C069344A9E281BE +:106010005617EC7A02FFF323DBB4F3F715A0B0EFC9 +:10602000A726B507FFE891FD04D25AEF9B86ED6ED7 +:10603000C69AA2C5027A301EF681C5BCB8540E0AB3 +:10604000EC5EEF606E949DC186D4907A610666E73F +:106050005C0A0B3D4CC5073800DBFD2C0CAD64FC25 +:10606000AD9FC0B531C98A69E96CC7271866FBCDF9 +:10607000DFE05915C07ACAF90580532AD846973F00 +:1060800029512ABA715D2A0A848C4C9DCB666938E5 +:106090001A2BA326A5632F7CDDD36B16A0ED6BE432 +:1060A000014096FBB637DD011F361F15DEF519D707 +:1060B000BBFC341F14FFE2D03A5DC4E53B489CE7CB +:1060C00026E577DF27C6B69E73330CE80D1E3278BF +:1060D0001E451AF9640D7475DA887447F930F0FDBD +:1060E0002D947AFB6919E52F576ED73EB42E18C54B +:1060F0001DF160AEA13F0C9497286A91ACAA7E5323 +:1061000090FCD0DF25FF57324E729572554663875B +:106110001544E490B829A240C793AD13BBAFABFAC6 +:10612000B76B49CF8A36C383A15D4705714D4A0AD3 +:10613000109AED46B96DF9528505B35061C8BC6837 +:1061400047232712CEE6307BC9956C01E421244217 +:10615000EFAF7D02A11955F93A8A1D68BB71D1597B +:106160007B920F0108E71BE3B7211D7129614608E7 +:10617000F1B9232FC5B679F8D5225EC8E4A4450B42 +:1061800096577B6071D1C65C68FF7FFB04AF3A9283 +:10619000056185FFE67EDA26EB2064EBC299A81242 +:1061A000AA83615F1B6FD4AD1204C7E3B2591823F1 +:1061B0007857417DA812F6B8DEDA8C88D9B9D82C88 +:1061C000C1C7A51621AA80AA2B3AD09C30BAC7EB2A +:1061D0008B24BD0A69E6B7D5668BAB9E70E60C32A0 +:1061E000D5E4B0241631914407B399B92E2874CC64 +:1061F000F0715B656B4DB1951E89B6E0B1684BD906 +:106200002E63382770895A6DE51035FA04BAB42028 +:1062100049C65CBFDAB3A6E661757CCDCD7D9BD265 +:106220003F2BC7AAF16D2C0105283AA285CC7E6EC2 +:106230002E8E17543C21C8EB53490B6753F0B7FA25 +:10624000D7AA9FB18CC63B4E2575F93E06F343B6DF +:106250008A13013FCB7047C930CDE48F031C69021C +:10626000F2789734E68268FC495501C63251997D2F +:10627000EB472BD56C69136C4CDF869FF8597FC3B5 +:106280009A51549C7C051C73CF1B20F164B8B469EF +:106290000EA56719416D08F750B58C735D1F519AB3 +:1062A0002ED5E4DFB4DE0FCA84EA9FD8A1EC0657EE +:1062B000ECFCDD0CD06202A63FE3B743FDCD5C08E9 +:1062C000B6525E172FA7C1954D243F851DC65D228E +:1062D000E4DC8824ACEA0F4A6997A9F2DB9DCC364E +:1062E00052AB1CAAF8FF8968ED340060752ABD1B0B +:1062F000A33AF6654C8CC4DAFDFBB99C50B0909281 +:106300001ECF203C7F59DA75CA3A02B44276F9753D +:1063100050CB27294E0EA498A41420D83EDA6F2B18 +:106320005BD2015C4757B1844452FB9C50F1235926 +:106330003A7FBED61D38CEFB98826D9A29A9926805 +:10634000CF77862A3031C60E499E56F90255F4EDB4 +:1063500023C87A403D916F5D134A1F7478DB4F4923 +:106360005756FC0925E00CA2AA57332DA61B35066B +:10637000FA453031CF8FDD75E782E2A78502C07A1A +:10638000C89808EC9045D2755BBC8C9178CD0AC852 +:10639000AF7FD9B94E29F311BF4CA056425ED4ADA0 +:1063A000DCE929B104F83CA30B8A3AF1459B96C974 +:1063B000C438D8203F7616389C157A762639A357EC +:1063C00002AE07880667E24CD1B9B4C53FE3345C3E +:1063D0005B5B901632C56CBA75BBB3E128A398F02D +:1063E00072D0B1CBD5B012A7435BF37AB9C375EEC7 +:1063F000C36B92DAEAC972CFDEF3F57C80B3EA7A36 +:10640000F3DDE78A35C5F9D9F9009763D655441607 +:10641000248594FAFFE2FCAF48D226E666F313B770 +:10642000E6874DFB8F948A738CAAF10EF115133A0F +:10643000C05AB831ABFE971CE1E4FA488038178F98 +:10644000238037C8911CA4501D9FD377CB81E9D0FE +:106450007CB2AB1AEC3BF73F05EF219902DD065702 +:10646000C0099CBF8B0C1FAF6F852738A88929B442 +:106470008234E7C0F1A049A9987CE921E54E2E7746 +:106480004DDE7F0B381CA79AA42EBBB1B3DD56336B +:106490001E9395430C82E38BCF4B266D52A6FCD303 +:1064A0005066627DBD43674AD93461F778A8FB54D2 +:1064B000EE773EC3E735A784562BFF3261C11B3C04 +:1064C00060592DA35E2AFE66A1FC4101F5CB290788 +:1064D000F8DEE684E7E9B6C60F0D5095C9E4C0A81A +:1064E000D163CB6EBA93F3F9D5AB9E9222F237010A +:1064F000B64B5EF2458C14B4A36C3329D47DE4CD45 +:10650000903404F34CE36352DD6E2DF4C881B2B5D0 +:1065100017951C12FFBF14C3F41D6696CF7B16AFF0 +:106520004A52377FC683E396772F4085FD3279B58F +:10653000A82C4D3ED74E4555E911375DD7E1CEDF4A +:10654000BC8F2D11EAB3EF29716ABF40C6FC4478B5 +:1065500050155828E6EB6399ECB147A7DCB99BEAE4 +:10656000B40944A3A2C05239C52970CD3AC4188ACF +:10657000A5187D11EE25EDDEE2D3E1667652AE136D +:10658000DBC7178CD7AB437034C9F0349B51011172 +:106590006DB4D3B4451A0D18F13ADA6F4A9133212C +:1065A0005B5EA4920566C8DE19C54A98790720D0BB +:1065B00088A322D84551CABA957FBB4E9ED3A95F06 +:1065C00020739E6C2062BDC73DEE8F91FE4529EC85 +:1065D0001F47B0EF1A980E75E983E05E0475C4C1D9 +:1065E0007453319B265E258178C97390C93773B87F +:1065F000638BA5866CD5631A1A8F2E0BC5E407052D +:10660000950E943BC32A37FF0ED1D473ECC36BE5D0 +:10661000D5D664309E99033E0170B1456378C34B73 +:1066200011EB9C4965DA7688575CDC8C4DDE70B7DF +:10663000AEFB638CEF1C4F51B6AD8996CDC8359437 +:1066400023971647B927E04CBC77E99D58982189D4 +:1066500022C78BCC6D8C6B98AFD5D8D5D010DE13FC +:10666000CC3DF980B145CCAC96AB75E8515145F6BF +:106670002EC9D59E373144B9AC68BF0B56E93409F1 +:106680008DCC8BE985915FDF04EE6BBAC46959E26A +:10669000694E5CE8050B6FFB2E53698769A161F4B5 +:1066A0001FC93042FA4A01E367F4FD0471CE6B97CB +:1066B000F74CB4296BCA29CC06A953D6E7B93E2BAF +:1066C000524509E2D18EBD123573B44CF461A5E494 +:1066D000942F8619F4964540C54BF4EC492BFC5495 +:1066E0009C61A1261F19B99EABC5B5939C971BAEA3 +:1066F000E7D2AEF210D70A179D9FFD7F2CF2302A09 +:10670000521616139180F29017DEE96B15E15A0EBE +:10671000572E32E2B0B0058E887E91D3EB12E8B1ED +:1067200000839D0DE7BD404BCB1AA2D9A1B8DA6317 +:10673000A3F67737BB708503140476DE8096953513 +:10674000FEEFB69BDCE19364CC9C3E610E9417EDAA +:10675000CCA437F8D5B8C3E1177231A1F9A0B917A5 +:106760009E9536C71BCCB74B006801FFCAFB1C5E69 +:10677000C242F88BDDFC81191A213A53B1C04EFC9C +:10678000C761B14B443B7511EC11614D4E57989C5C +:106790000E0B5E7D06FB5F73D7013E8D1C294DBD40 +:1067A000C3F81FEAEB27EDFE6833B236C76881589D +:1067B00083ACAC13829A71EB4AB709B3914480CA97 +:1067C000203BFA84A0204C22F34760CB9BC96E1D6E +:1067D000D0FE6964E296B9B73C82D6FB4CF193AB2C +:1067E000CC34E2443C60D5B523109BDDE7A5572AA5 +:1067F000CB06FD96DE382D027AC2936443162BB386 +:106800006C3328E992AD0AE54585BBCA3E2869F19B +:10681000C939AEA52251387C1A5BEC4CEA741805D4 +:10682000A9C09ED732CE110A806D74142C2A4B2039 +:10683000F78BDED34715F2B08C010A7C094039C4CE +:10684000F6ABD6BEE9F7D99054381DF22BA54AD63F +:10685000080FC799E99332F4704C5CFC786E15858B +:106860006262BC69B8F6AD63E5F47D17B52F339B62 +:10687000AE1A31F7F66646E5C43E519BC753A725CD +:10688000C9DC61FE085FB5853CDDAE3363C89E7A26 +:106890005A42795E6F614511D4365FAB784049F753 +:1068A000274B31550457F948BDC07212FA14343FD2 +:1068B000343604228CBC050D0129694224EDC4B98B +:1068C0000C5922E3FEB3C86DB561CDAC142C5385D1 +:1068D000875DB946EF6429607D608045137FB72FDF +:1068E0003FB05AACE9D041F04149C070011B699DED +:1068F000A67D688BFDA5FC99AB580489CAA3FA272D +:106900003BA84CD4C0134C59154C6F76AEF589B9E1 +:10691000F0633C44C767EB4B7C1D0913B745A145A9 +:1069200004DC1A783FF9AE50BCD2A791C3C35D50C6 +:10693000180D807D862AD0A9BD7C0D5079963458DB +:10694000709A3773195F478774E3268B0F92A1AF54 +:106950002270FBC0831773382ECC92D28C41A3D205 +:106960001AA4B624812BC7561A54E7833AC08C0761 +:10697000C230974AF93596AD37B96976D91C2D6D75 +:106980005D7162E2C4EE795887F265B7B34BA6AB8E +:106990002DD43819BC7DE23320C813DB6AF35205CD +:1069A00026C70C4FE07DD79EBF8FEA8682EB24C6B8 +:1069B0000C2F39865F488E2A92A2C727577777B85F +:1069C000699F849B3026DF44BB93578A37BAEA60BD +:1069D000436BF3216A86721CE87A32E2EEB5D7DDAA +:1069E0006CAF44611D27290A92AC7DA84E4CC55955 +:1069F000CC7BC9999E37B08974EBDE92C35E820C62 +:106A00003290261461F4A24EFD7037BCF842C400E7 +:106A10005C70F4EB04143BC4382BEF8C7BACE59931 +:106A2000C2E57EFCB4F7EC153093145EDFD380032F +:106A3000EB72F0AFED2A0839C6D8B992FFC840AF63 +:106A4000E12F0BA74CEA716D0F2C9C8B72F53C105B +:106A5000EA136437368C26C536AA629D109465E029 +:106A600018BA0FAB55EE780D076F4DEF249629320B +:106A70005699E81C3C25203AD3254A3062CAF7D4FF +:106A800098192907B8804E2E0C63FF541DEDF10EA6 +:106A9000209EB8D1F118AF411042A86488277145F3 +:106AA0007C1586DA6723B74D30C1D0A965FA01633A +:106AB000CAC1DD3961B681E887D1376F2D96D16DB6 +:106AC00068C2CFA231ADBB01B55FFB1038F12CDD40 +:106AD000276AC4EB3EDBD8C48EEC5CB61E503B6923 +:106AE00002D2D22F9A2F81BA97FD79F640479D386E +:106AF00059DC581EB8D1D7CDB15193F4D4226F25AB +:106B00005720AAA3CEBD4880A4062C82D3EA65E014 +:106B1000110282EB237DF42AAD51EFA32B55899B03 +:106B200009C91DAE54641CCB9E5C7AA401DFE5D379 +:106B3000F63EF8FC2D83FD115E611E2C997266AC49 +:106B4000D0E9E10B023210C55BD4BB3069E2348678 +:106B50007F46D72640614B9F62F0C367BC9915C240 +:106B6000E8FC2DB4D22BFE915329A92FAA81ADA602 +:106B7000973E2D45F03FC4FAB2B72560C3198E8CFD +:106B8000A92B7BB05BC5315B474FC91BFB182900A4 +:106B9000D831E87AF42B3D4C34F238EA08DA6FB495 +:106BA000801BE241C76247DC35B5F6E30DA86542BC +:106BB000CCEAD3AC365939D7813D141BB977E63EC0 +:106BC0008A2FBA1A54BAF8B55911CE3D6746DA84FD +:106BD00014F7D5B16B24B7B365A78D282BAA4B2129 +:106BE0004714F87639E428F16B3D889084C084908E +:106BF000193E28CA93F018BEFB126C32DCC02E6618 +:106C000021A4DF32566C14E559C3A91A50A44E8250 +:106C1000E4C0FFAB3422EBC29334EA36F0BFA0CA23 +:106C2000396CCECA1107D5E6CAB50D26EF51698574 +:106C300028B2C4101C019AD28D6998DC4CA2022E95 +:106C4000C648754CC4170F8AAF9AD1D7FAED505485 +:106C50009871ADF81432F4526F2C87F51629B4D917 +:106C60001616493977E9C917F3B22A1FBA01ECCBD6 +:106C70008C78054161A7CDB3EC1234B696469D439E +:106C8000E4B9C9E225ACDD7C98D1EEB68B0CC9C560 +:106C9000FDCD2EFEC1C2B588603FF4E2FE5943250A +:106CA000258C4E37622F813905F9CE57206C1B2D6C +:106CB00088105FBAE2868CF7DA2601A8DA8952FEDC +:106CC000B1DBDC69E82BFA0C4095B6CDA97C9115B7 +:106CD0006CDDEE40AFAE8C9BA66B0BB3B34F946AEA +:106CE000D32A91AC957B5CCD05F3592FC1BD6317B9 +:106CF000F075EEE3AF40DE6AA1FA88AA96F89C131D +:106D0000E20A50E94E27E4BD913011178F84701EBE +:106D10005558C684919043AA601820EEE592D74654 +:106D200093FAC4A5783837B1BF95CFC0526EA5A2EB +:106D30006A49CC1071568B85C74ECDEC51F1AE72BD +:106D4000BC983631E6B42F45E11A460C30B76015D1 +:106D5000B805F4D9A24DBD42FF03AC622BA0172E9B +:106D6000022FE956D5F631870DB68B88E8E6058FF8 +:106D70003403DF327E68359A36F4F71E02898FEECF +:106D80006EB3135DFB1A2865D1244DBD437E41B619 +:106D900066A0B01961CEF681AF72CA349AC3DC50D6 +:106DA0001EE186FD9B27D37CF70EFD90CDD36AD9DB +:106DB00089CDB71E999A26133370DD76A4C315AC1E +:106DC000B6D967457E866BCD31C285C01E3D93E046 +:106DD000B55DF034AAC480D9E020CC8A9345AA4A94 +:106DE000A616949F0C3B85B8449FB9EBF7572340F8 +:106DF000EC0BB8D92C85CE40186A11AFA424A6BEDE +:106E00006C7F11382658B2535E4E64599431849782 +:106E100036C72160A45560E6F91FF744E79CED846E +:106E2000C20AA3DF7D34018EC4E2F00D69EBECCD24 +:106E30001B0E010B5F696B2376F9817871303694F4 +:106E4000062B778420D5BB4CEE98D91C3728281602 +:106E5000A4FF42CFC164D6DDC765488C0AD195F343 +:106E60003E55419020346489B77E044A17755031ED +:106E700064A8D72B0C688FAE0A25387B0C694A1B97 +:106E8000538AD8DB4B316462B4A14064E6F0E1BBC5 +:106E9000DCC8E0B2E1ADF794E719245F54B1F4BA6D +:106EA0005F0C62E977470B9339F625FB7E18A081CA +:106EB00007BBA6519679523705105F33566978B8EB +:106EC00051C4A2657D18B57DFBDF75DCA04BEF6872 +:106ED0005F4C0B5D60C84CD670388618B17B9F75CF +:106EE000A1802F88C7CD469EA7E93D2BA2BC0A985A +:106EF000275125CB86A0722E7C12C8F0C3FE9528A0 +:106F000037C968A3D899406F39A3C79F00ECB90966 +:106F1000F40A70E06CF17BD9799AC4E9FA3F87BF33 +:106F200028523345119FC1C27DC759879BDA5CB493 +:106F300055ACB0EF66FEA392157DCD732BB39A13BB +:106F400040FC80330605314AF226885E418761B8ED +:106F5000515D291959B0688D514449718A3C5E6E62 +:106F60007497B22A42DB2EE5FC8C470105EF04AC96 +:106F700055E433851519A9DE8C821717DE8623C3E5 +:106F8000A86395AF0E21526D0E612E6F717118D8E6 +:106F9000A4E658DF706F64D5913F80025A8D240BB0 +:106FA000990D9E7AFB6A03060E1ED70D6EE2C5BCD4 +:106FB000789A9EB31EAD5B4D0F15042AC6383B0D63 +:106FC000E4A71FBA9B85954BAEB759163418AE6B24 +:106FD000E29794F28414335ED0133D7C05BB67487E +:106FE000CE9FEF02DD1873397A1B6C2442A1C56075 +:106FF0008EA1273C43459FA3D6EC552C2E05847EBD +:10700000364F7B8A057773187AE82E046666573AFE +:107010007EA05A34F9FD8FBC666D806581F0EDBBB2 +:107020008BC9A0AC835A49BFDB2693638C2694732B +:10703000213E427382361E22863132CD75705B92BC +:10704000F38DEA0D3B93745967668CC24CF985A1A8 +:10705000B58D4FE30C2AD0C00FB430A8C964BD0071 +:10706000F99EBA9E2C6C9FF174C50EFF98EE9B386A +:107070009DA210987EB8B58E1FF3B5D97E155163C9 +:1070800072C74CE464A57F61D5FB29771814338956 +:107090005BF0724D29215B083434388CC1C89AD515 +:1070A000B4D29E1D499BC29E2F0662B739E057F7A6 +:1070B0004E97C585629C4617FA1405CD426527A3F5 +:1070C0008E0A66C13C0EC6CD08D5ACAB25822F5BBF +:1070D0002D790AF4FB136375F556195FBD9C839DEA +:1070E000E27FD9102403E513543F34644D4D651FEE +:1070F000480E88F6F986393156EB27DE421D7DC7EA +:10710000126396DFAAA598D5D3D5C4E6669F6150D1 +:10711000E732FB69E7591F2594FF90F8062029FA0A +:10712000E04A224300D559BEA270A543B22C440FB9 +:1071300077FB97729F7314922C36631CE25745B904 +:10714000A783C8F3C7B9245B4495F0FAC95702581E +:10715000E7D136A5DCD7C7E26FF6F1EB6F236E41BE +:107160004CE6309AEB3E1A813A8639636E228834B7 +:107170000BD166AA3EE148248746A043A3929FC054 +:10718000B08A0FBD113C91CEE42FACC2665FDF4CDC +:107190007CA339172CAF31E48E51D32525ABD6EA29 +:1071A000946829FCF92E6B06F2DB21F1E4A070450E +:1071B000429CC40BE3C9D9570004CE11A77A4918E1 +:1071C0006283B6E5FA4012A41CDD96CF48C3E8FE00 +:1071D00090A85A26FCF94208B3B32090D0D28BB9BC +:1071E000EB8AE3FD802A8584CA035F37AF7DEBD647 +:1071F000C2CF5C05075E0DC9C269BF563ACEA1D1A8 +:107200007FB3D27C887C548BAF8E8E5370A50A944A +:107210006330FADE86AC930A6DACA22970B4531DBC +:10722000562D5F7DC9D13D6CC2F5B5B7048C2F6971 +:10723000844246F54A3D036CE6A1F5BAABC8614FFE +:1072400067DB51F01C87F1580CE418E1FADEDF6AC5 +:10725000EDA0F9918A0324043855EDA0A47C7E1B8F +:10726000A68AA0F4D6E6A7E760CF77D4558E517CE6 +:10727000FCF050F4240256BA882B0BFE0EA2635F7A +:10728000F9492BC3A457D6109C2D870CA618A10032 +:10729000A9DAE9623D3756FC97F2BEFC7789097F8F +:1072A000EA22862ADB71CD48F11C86939417EDC340 +:1072B000C3ECD1D6305B7411F4E67D1470108DB838 +:1072C00096763D8811999AAA7CC4EDBD8E1D16A3B1 +:1072D000D049D194CE2B4E179AEA2108DBC74E86AF +:1072E000EA1E09381163AAD1C9ED2A07880CFF8666 +:1072F000BC7F9BB3FB89D12FB01E6E0C99D547E59F +:10730000E7FE6EDA4C6EF6C3511437109AA57F541F +:10731000B3E641517C297C9A4A1DE019C607183B07 +:10732000F54182C06B704922A1CD69B927BBAD97E9 +:10733000EF825D363101ED2C625086D7647AD01F22 +:10734000C9051A056CFEE9D8D1B72A11194E4CCCE3 +:1073500015FBCC547B5A196FDB56F9984219C0F1D2 +:107360002FCB4267ADD2FC60FBA2DBFCB3024675BB +:10737000121413D7FB4BCB7974F20492EAFA0D95F1 +:10738000319569EE9D9040F91148BE232FCA0D0733 +:10739000428BBB8633DAA721A72FA9D0235ADBE182 +:1073A000795926C907FDCD4C6F99193B8ED6CD92E0 +:1073B0005D364A5CA24B4A806487AE6B3B011A453E +:1073C0008CFCBDD139D9B117466EAC8B0AE977A6D2 +:1073D000B59E57DA9F1532F570E4B4BE564C66C8B8 +:1073E00075F1D6216BBF40DF60EF08CC282B1A1D4A +:1073F0005CB99AE57C0F1D203513260F7D44E45CB3 +:10740000C1C1ED11AB30934D4406C96BB834D810EF +:10741000DE95B099F06D9C46D059B7256D0849BBF3 +:1074200060613B6C9ECF4196D5CED7BE62D9625883 +:10743000FA8F3AA7D1DA12C1F8BA845759B25FC5A8 +:10744000B759EBDD61BD02765A4B9670FDACBD16A7 +:107450001905510B6F8236B7E07CF67DBAC29205F2 +:10746000399961F4E27511C36EAD399BF48C01DA80 +:10747000260C47ACB8C6DD37D062B5F202252DB870 +:107480008484BA6DF994E2C6931110D40103BDE46B +:10749000321377EB12670B29710C047A7712B13231 +:1074A000CFB49275C0E721C5603053190DB76D7028 +:1074B00017167CB79512EC83342B8CB1F29458A834 +:1074C0000037E85829B1AA7995F4AA90DA286966B4 +:1074D00016153055B4F280618E815EEFD36AEB4FA2 +:1074E000D91D91D0F5A4A27528AD39D5C5CD399354 +:1074F0000B9C903D820D2D723B07A24F13A8871560 +:10750000C89AD5114C9ECB0C8F12A78058AE31D69D +:10751000320697DAF5E2E31EEB99B0D96997A9A292 +:10752000C08A8A13FA479AE75AD7EAE9FE367252B6 +:10753000AADF04453C0198390122CC1B0FEAC3990C +:10754000DD1D55F09B60B32BA3BD40114E8FCCEFDA +:10755000D211CE8CB2B70E4A24A079E3508D1B61B4 +:1075600068247E71CADDA3F01754E6DF3A1E911B32 +:107570000355BDEF942234552725A47C033CEC84AD +:107580002FC7AC4907E74068AFBA1EA4856E2F5ECF +:107590005713FC506DCC9ADB8A418A5866242A180E +:1075A0009CBABCE9EB13C84A8EE4A4EA6F9E6CD285 +:1075B0009AD94030E90F901E60401FA7BE1B20E8FB +:1075C0001FDA55588B0E1CD62B9D9B4BFA67B610B5 +:1075D0005800883A156D1754163FA6F9CF896714DD +:1075E0000BFC6DAA42273BF0B131BA11852699FCFC +:1075F00086006E7A3791DAE2FD914B732759F1E6F6 +:10760000C33946BB3B84CFFD193A2F05A0705B0CF4 +:107610009C648C94E330C1F0C79E6A3F15406D2393 +:107620000BAB0FC6A7ED60ECD4CA4D7D41C2AE6076 +:10763000D8C751C3CC684A6E944A948EDAB49ED7A8 +:1076400010CE98E65D0809755DB4758AE63BE743A0 +:10765000573A69C3EB72DF7E40E0EDA143A6FEB26C +:10766000EA5477BF38F2753BC7751EEB0E31F971DE +:1076700058736F4FD85D491D1FD3AC378B8ECD0E1D +:107680006B1A582943EFABCE046B85F594F0044296 +:1076900080ADBFDDDE52D4C1D23CD126F8DB5850DC +:1076A000D0D9DD8DD51D3D3226E0F52F47CC757D37 +:1076B0007D03ABB5E130CE5EA9A32F72D813968DB2 +:1076C0002127764D9AFCEFF38558B8CD62820ECA19 +:1076D00031069D1EBECFE6BFB43D6816BEEA42CB62 +:1076E000EDF6050B3719A0E8CB563F6D3307245D47 +:1076F000D380AD0A7A53B335F4C5EE92866C6686B4 +:107700006FFD6FF17EBC6D35D15398D657671E5013 +:10771000C520DD73FDC6FEE1AB62657D140DEE9004 +:10772000AE202290A1954A8584E83A84F7D63D00A0 +:1077300054A9739D02A360E8B3E23F4788EC68ACAC +:1077400061BBC4C7E394579D6CD5D6E105F94A1EC9 +:1077500099F70F015EA3D632A3C613B92D3CBC879F +:107760008CEC4E3AEC041574018DC6E9C5FF3E1150 +:10777000F53838F0DCEC572BC93C874C33C22B1B57 +:107780003AD1F77EE166D5C32647058C6E90B3FDEE +:10779000969B284919EC7C769C8CAC438392D20D45 +:1077A0000F99A0E685EB6F605A759DBED61B925B64 +:1077B00049636F8218AF8E081DE06B7E0222699DBF +:1077C0007152DF868C81C9E4BBFBE5FB70871FDC4F +:1077D000B2C882EF7B1814DFFE4BBC976FA6E9415D +:1077E0004EDF721A4A479A3D6FAE13B290342B8225 +:1077F000396B389C755024DFC240BB2DB551E7D59D +:107800008B761BDFE074E4296298E3A5BF7716A1AD +:1078100087C323AE345932BB4C5372FCD6C5150A0C +:10782000DFEB943A74326D2E0941D58D71C344ADAE +:10783000A70A28C35F207E41A144B87A9270782BB2 +:10784000985710B798ACF804EFD10E4E33B25F6F73 +:107850009CA55B39BF01900C697A6E2AE0B4EF1EDB +:10786000732811D2C8F58AD7356FE53CC251CB8851 +:10787000387DB404C110956F9CC2E08B0175BAE3EA +:1078800028648438E7D7AAD072A966C2FBA0390C55 +:10789000B2CECFBC736A6818C616327F82A44D0977 +:1078A0003A2490C2EBEDD6687C569E17C1835CE209 +:1078B00091F55A024542379B6406ADA96AB8BAA44D +:1078C000113A3CAC4912D23FDBFFC12759A89B7843 +:1078D000AD5402E6DEBC9C7C68CCF4E179B47A213C +:1078E00063764D16FBF1D7558263B53956B3830DD8 +:1078F000C2E06F491E4F228E9CDBD59B607B5618E1 +:10790000938E78CAED0A125ECEDADBBA05BE30DBA2 +:107910001E487A2EFAA56A6587FA4CB5F9EE2B3324 +:10792000669A356178BDC8E07FA8740065BD3F9B4D +:10793000938B0DC342C10AA80090D30F65097FF154 +:107940003DC4A4A8DD75C431E918A6C901A6547BBD +:107950006A0E02B3877F5D2CE5D89ACD7A7F903E80 +:10796000D7AD232C18D773B16C98D203548EF4B0D2 +:10797000E117658CC4DF2FB70D7FF24B7D7CB4819E +:1079800022CBEFBA96C27184B36A36276E724F0D5E +:107990006039CE205295CFBECFE9D77E9E3D62851D +:1079A000F28AB97330371CCFC7D46FA36F58E6B8CB +:1079B000E446157045FA51A2BC13ECF2F71D9A1378 +:1079C000BED8C0E9B59C6F5B906ECEFD65B9E4B7DB +:1079D000FEB8A80BB835A96A863B61D994ED80E959 +:1079E000084F9540D9DBFD6402D3C206ECE03B08AA +:1079F000022C4437E1E2A32AEB18251F3BEA32FEB2 +:107A00006628B913D526E9D3D6CBC81BA462564F36 +:107A1000BDD96A90F8DEF12E67028C8A2E1C9ABEC0 +:107A2000EB09B5509478E8E5BF283F07FA2BB9E099 +:107A30001691190E87E934101AA69D6DE017F5AF5F +:107A4000C16F591920C5CCB273150DFB839CBAE4E4 +:107A50004B0D9AFC4176A0FF732D6F81168800F0C4 +:107A60009FAC17185C9F3538AF96FC0A3F66E394CD +:107A7000F2C8BCD67CAEECF3549CF18EEEDBE08118 +:107A8000861D5EDE18EE6CDD4A721BD325D0AE92E9 +:107A9000695664313AFD5A60376D4CCFC50C085AAF +:107AA000EB38FA9BE7EB82743DF1723E6EF72E677E +:107AB000C5FA39C1F44F3F2B6811C3056A19A0C834 +:107AC00016C9ED4815C3A4D82A0F6F2252A73163F7 +:107AD000E609B02275410E8F33849448C6693C8E06 +:107AE0002365E850104285D6C76338447209ABD28B +:107AF000B35B10FC89D969CCE02689EFE9148D418C +:107B00005D002626E20FC857BC94D5850D75692FF8 +:107B1000BE3834CD3A5575379F8C48C90F33D79A44 +:107B20004BB5E4F72EAF881CDCDEFFBB487905B50A +:107B300008BF97F6AA72EB55B779F212FCCCC4EEE7 +:107B4000DB790359BB3A21E03C6B83DA5CA2BC0BC6 +:107B5000C86BB7B6C015FD0D8985944E30A8C85CBA +:107B6000CCB9735DCA5D454DEC5F0FD832F5963FD9 +:107B70001767B4C64E76919E3A695DA4DD3D3DAB74 +:107B8000E3538136192412FECAEBA2EE753DF0E8EC +:107B9000822B5BEF906DFF762D19822DD9F2A78491 +:107BA0008DBCC85EAD6C63496393327C65D2BD9E6B +:107BB00029B5475DD707AD8580DAFFD39DA6AA6EAC +:107BC00088346914EFBCC4B4AB1857CEB1B648348E +:107BD000D405D1AE20466CD18229AE219937885682 +:107BE0000B08F83923AA070995393AC4FDCB11349B +:107BF0002D3FADD66480E6ABCC1802CB6CFDB373E1 +:107C0000F25537B920AA49A9B163E082445BD6880E +:107C10001555A5C1F149D05635F4E9280E6150C477 +:107C2000015B7F86E40CF191781B032468E597E4FF +:107C3000A1F1B3B582B60710B6C14019169762A676 +:107C400030EB8AB529776B40385018655C889D8782 +:107C50009839FFE2264A9CF557B7AFC1750BD5029C +:107C6000A214AE906630BD82A2630B4BDCF73E449B +:107C700063FA3456DB31F95BEB0F3652DA4B1D8871 +:107C80001318E2E89D840835FAF44855B13728D036 +:107C9000AD055FBACCE06769D3E0A5CE21CEE8D3CD +:107CA000CC395D96F46E8C5B63A6D9F3BF56C85889 +:107CB0001827CD22134D640EED39FF4E2D4AEB04EB +:107CC000FFD57263EF71AA381BF3EED50C0C5F0879 +:107CD000B57DA9D48EC7D1FE912DD7A4A3F107F409 +:107CE000F03B5AD57FEEBBA053B757CA08C4F9DEA4 +:107CF000046651621EDBA20EA98BDDB5ABCDBD7E45 +:107D00005B1AB4B4041F38DB87448B63ED32F11087 +:107D10006A3D6C20D3D61795FB275453EBB82E9DA4 +:107D200044F2E94639D52FE20730125C6787A49BFD +:107D300011592A4F99B51A49BF092A10CB35D6F9DE +:107D40006BA3F996FD8EA1AF68387E70E9348F542D +:107D50006AA3AA2D958EEB42E0068550E30BD24232 +:107D60005A7F86198A0C876717DD2F9A2BD04AF421 +:107D70001E3070FAD896001F76DD58BCB539902BAE +:107D80006B9C58B5375B9F94306BE7198BF166AAF3 +:107D9000AA91D8B20C9527321C2A84C150077F4B78 +:107DA000036BB3E87E4FD42E4711C6BF0D216D5132 +:107DB00044C32FEF9B97F940D5DD4225769A5D04A9 +:107DC000C5BEF18C6A42975B696E8392EA5E3ABBEC +:107DD0002965BD24CCD49DEAFA4F05FD61C14898C0 +:107DE00039E8B9488B7302A15B95F7AD7CFFACFC19 +:107DF0009901472B799274E5F2B72FCE52446588EA +:107E00008B01142380C4F7D2F45A3BDEF4EBBA158D +:107E100066950CD704E24FAC1C33A231800C61068E +:107E2000CBC197572BAF6804485424118412BDE38B +:107E30002DF8544B417D77A7AB5F02A9438097D4BF +:107E4000DDA87DF99F536A803D56A0C416654B019D +:107E500094745A50B5D39DAAB9ECC3E57D1F5399CC +:107E60008B9B946210F5E00F62E178D89FBA60991D +:107E700043E46DAF40D4793055BB46828855BC0E83 +:107E8000D1968D9C05A7C167C907F179EBD0EC535A +:107E90000F22CF1E685AA8D0E7D6841272AEAAB7B6 +:107EA00080D21B4FA55208458B62BD9AB07AAE01B5 +:107EB000985A1753E8D9E02C4FC6BDB0630497CC4D +:107EC000B490391C8C886E6BE4E7510FE5177DC9BF +:107ED0006E3C2FF3FB384406CEBEDBAC8B18471547 +:107EE00036E335D31AF6C6D4B9ABFD157ABB93C5C4 +:107EF000BFA8EFAF0937FDF21955DF0D8808D8E1AB +:107F000066F210E476149D5A0A61AC4FB6A138D5DA +:107F1000908C30E047606DD8E3FF77C8A453AA4542 +:107F2000C5F35EF355CCF5BDAC61BEA51E1CD513E3 +:107F3000AE28262969F5292399D30E868DE1B4C48C +:107F400027A075DE3B64E61A3DF764E8A07FEE8A61 +:107F5000BF70C909A6C534C7B7FABB986051EDD048 +:107F6000F7DE74A4E95AE4AF984B91DE44037870CD +:107F70004B9CF4CA7366650C0033FD97E2F36E8C7C +:107F800000D70CB8F907D6CCDA5E2210E8A0FCDFE7 +:107F90001A8C7C7471C98783DD0598D4B43D9F1F0A +:107FA00058148C7B1726CE60A28DE5AFAE65AA284B +:107FB0007EF033EDD6E9BB1D63E62E0236632CFC62 +:107FC00049EAAC29A98DE408FDB4EE4ED3F7283573 +:107FD000DEC3E456837F300D8B761C13F21FB8513D +:107FE000AC742B3E3E7003F37F8B4D0BC9C63A74C5 +:107FF000F21B102E8A40A98B4BF1123A0AF5A223EC +:108000002F4F8E0742040E9601C38B95F3D34E9CDF +:10801000262823318A7B4187FE705111626DBC177F +:10802000FD41C6A5F5B21A1B2F889961BD2A3248B9 +:108030001B04781C9F9D66BC24DEAF65A91ABEEBAD +:108040003498FC177EAB8F6521486DA8529C8761E0 +:10805000B73489076403C0DEF17C2A165AFAF3D3D9 +:108060004432AB3B09D899B32890B4A39D8906AF9D +:10807000892E8A3BB303A3DD3B6FF69F31B7B3A2D2 +:10808000B296F7B20D0C131F992FECDA1D16D5C559 +:1080900009004CDE5218AEA3530CCF8A0F2585FB86 +:1080A000B788316EFB782339FA5608168B5F560C69 +:1080B000ABEB686149981DB4381B698E8F059A3502 +:1080C00073AD763B8961A15FC83E1834BD4274062A +:1080D0009412E161F9BF1CE285851FA1A2A28F77EE +:1080E000C75401D90F866A02D5356AC4ADAD091FE0 +:1080F0008ED0645EE46B30B4D70BF145E9B07BFD04 +:1081000069E18095F4CC9885BACB7811F8BB94E6F8 +:10811000F47B8C92391B000FA825CF73E07E46AC10 +:10812000C89FBE05B9C90497080E97A7BB18408F12 +:108130009AF6D70CE925557E766C71C6D57050122B +:1081400091E9162A02C27A546956ABF723A269FD57 +:10815000D933127CBEDCDA502DD78F63716DD132EA +:10816000C8A5EAEA4BD9620CDEE6AED31E5AEEA0F1 +:1081700080F58C5438C441A728F5E4D866FBBCB41C +:108180001117CCA9B7D2271B66C66375187FF249B1 +:1081900010890932AEF81BB9300E3D2B394C41FF26 +:1081A0001C01AF3A0E4FC7891232FB63ADA9A87C00 +:1081B000130FF898A162CE3486D28D394CC0AB969D +:1081C000D1DBDC57ED2DE80276CAFDC8F8EFBEA37F +:1081D00010D1FBE2981E1C59071A9C9D898EC6057A +:1081E0008148DE8FF67B2A9FD260B13275C9170EA7 +:1081F00007D79ABF0A14B29FC4D5F09A10A8F56C9D +:108200007CD82CD520053F9913F34B32B1E755CDDF +:1082100064B925363B6874D80ADCE9874791463E45 +:10822000709CCB23E4DEFC27A26BA0A1CCFB70A04A +:108230000057873A1BE2274D183EECA10177DADDA3 +:108240002DC9553B144FB237AE1D557E99F179F4C7 +:1082500084C844733CBF17EA5E574699A3016D5B1F +:108260003237BB8B664913316F80AF90798B9C128C +:108270000E0D224AD15EDF3FBC21CCDA7947BEAA7F +:10828000C824AE644744DF1891D4EC2FD579130E7F +:10829000254E48BD950BDED88696EF0AF1BACF9EE3 +:1082A0007A21610F4B1E7E1659A9F932E99379BBE9 +:1082B000E68B690B55832CAB6E1D3AE01F8716C207 +:1082C000DF8D4BEAA1B35E5DC8C1FD858B40B89ED2 +:1082D000FD80DEE8EFE41705801EDC0D6188B398B1 +:1082E00071F39F31DF6E0054928222E693DA6AC303 +:1082F000A5F7DC7C7171A57A70DCBAB984F87BA92A +:108300005536A0FBEFF0AD7A065861EB478E74DB73 +:1083100029FA76AFC5B1A9D049E0A7381EBF933F6F +:1083200044139A07AA4533A36A6F283755B14129E8 +:1083300034D6390E04F07963DB71CA0B85AF920035 +:1083400070B96067B8088EF300033B42B27867608B +:108350006D748F640E82B9CA1CA58D2E13DC4F5C20 +:108360008F2406001140429F3822EF426A35649BF9 +:10837000B630EB18AEE9B0F6AC64158ACD8F144F69 +:1083800086693BAFA10D1B0DAE1AF16DDA9C2DFF76 +:1083900062854ED3B64F4B5A3EE0DC5210557A4DB3 +:1083A000BB4A7B3906ED77000904BD675BBEAAE3D3 +:1083B000C0684C8449D170EEADDF530127739DA98D +:1083C0003066AFEA1F9B88311659113FD9F9708189 +:1083D000186C8FECCDA69B2071FF0AA6F1DEACEDE8 +:1083E0001DCB2B2246285F093452945149E5091BC5 +:1083F0009EF6F2AF2390F46AAA6E17C5A92420AAAC +:1084000029F03209B11DEDD5DB1D12DB7F52ED0CD9 +:108410005C8CCE4ECD65BAA54D8C6B517F32B6F6D5 +:108420008F29118D9679EDC2975D48048794D0B954 +:10843000746D693748262AA1B89E664B9CF99AC983 +:10844000D8B49295F67D3EABC1EB3F3B46E74F7605 +:108450006019367181E5B5CA08CDB699A7A8818A99 +:10846000D50B73E9E63B4959D82DBD625516E0B0EE +:10847000F1F1810C7E6762991D51795AC269FF92B0 +:10848000BA8947BD5F1B71EF7AC87F30AFDE8ADEE5 +:10849000145471AA8C9A19A322BB593ACB08A2F59D +:1084A0005D050107EB57DEFD0909ABB2F40022AB15 +:1084B0002520EA67F3EF98CF63C7F049926551A38F +:1084C00015E6E23B0A3B1AF6CA2DE9EA013EA21183 +:1084D000EB97FD1835F2EC19529400D9A8815EAEE5 +:1084E0003502BA6909910878956ED267F7E686BABF +:1084F000AC84AE5880F10269EC7152BA8522B57F26 +:1085000034D5C1702E820AD444464F9988A6EF25EF +:10851000EA795449A0CF3E4E9FE55E4DEEB4D6C2F7 +:10852000D5652AFBB19E6BC028E109AC0F107B8793 +:108530002D6F2F29D127E64593E41EB18CB7534800 +:10854000B557AB7C797AF43155431ABFE3436838A9 +:1085500017218B1BEA1B98E618BF9EDF35E3F13825 +:108560001029495AC3EFDE37FBA8F848DF8B57378D +:10857000142FAE5186880728884D23C1A1F93EB239 +:10858000899D379A0E9A3EE7D964FFBC98468216B9 +:108590003878457A607FD5407EAEAC2CED2A37A086 +:1085A00010C4C21E1360EBA6A928C6B0A71A638E1A +:1085B000BEBD0972530BA771178DD5041AFADFC817 +:1085C0004EA7BB1F3E74C1B09C70C299878D19DD48 +:1085D000F88778EB0908FEC0320726C0FAB23F21BF +:1085E0004B299CA38A0E607C6103B570BDE11D9090 +:1085F0005098320CC42A0FD264E87EE8A7691D287F +:1086000012C3EC567302A2854BDDC2C382F8D32F8E +:108610009B71E71188BFC889C08C5B2128F38C54FB +:10862000E5DA31589387A527B939DBBB2558270AE6 +:10863000C7A1A1C9D5CCA6141EFFA8D994FF3E019D +:10864000E7576AF5F30FF44880ACE37B309B97441F +:1086500045F66CEAC4D9E17729C1660DDABD4AA4B2 +:108660002DC55D7DED6AD06AD790930956CA77AA69 +:10867000B831470F9668C4779995C2BAC9A70C93C9 +:108680001D78131C9C811064C474E32C585B1DF18D +:10869000CF6B047DC0FB001A0850A40A11E351CB34 +:1086A00044D6A60E0711AB21FB2C1690FCDD05A3CA +:1086B0000207F020D0971131BB9F546756E5048222 +:1086C00080E694008DB9A4CA1B1F6E332C396D1639 +:1086D0003BAACCCE8DECE38FC215502908717901ED +:1086E000F64F35756C6364BAAF1B0AC77A0E824ABF +:1086F000DBD8C9D23D7815180FCFE256E54F562A80 +:1087000000761B9A8822ECBDAB16407DFECB89908B +:10871000DCFB0F8D9B45BEA759D68D5C23FACC069A +:1087200016A784C25DC48471B6DFB37E14253B8F67 +:10873000B3100B5AE2E6E7DE3D49B7FF4421476438 +:1087400078A9E71796B1A9ACE09A1F0FC47F1FE57F +:1087500077F62938FE67665D35B69E95FFA064D72B +:10876000C50D2AF4C21296DFD4B1DCC0A7335595EB +:10877000AD8818DD55BE48073D6B1B07AAB302172D +:1087800084A86949E611C09FEBA1F4CC040FF03333 +:108790009DC6671E9B17CD43414128DAEDCB50683B +:1087A0005C32F381B32C2D4F893F8187A1DBC69EBC +:1087B000B2895540AE58D07180FA420C78D91F0565 +:1087C000F0270A9265F9F558F99A2D2AF696CC0801 +:1087D000BE15621F6A0BBBA26AA98D9307D2F9E688 +:1087E0006E149E1E44BEBFB9915AB0A534EABC7D3A +:1087F000B62A613E6E6E1F8074D6972A7E02D0F52F +:108800004A0CAED712D1BBBDE7950FD5F1EBDEED2B +:10881000BFF4609D44921325F3A0E1A9CC6A400205 +:10882000B6395B35DCB74A7377610703818C78848E +:10883000F6B06D6A07416E90042B91EEC99D2E77BC +:10884000BC2F5B1D9DBC1773DFEA1AD879240C225C +:10885000B0C9FC86F6DD2565D74C1F2792AF46CB05 +:10886000EECEDA0150ABCB93E7A69EF08F67F1C551 +:108870003636BD0CD0F7E75309B7895F5BED35732A +:10888000DCF518D9BA144B5528C4A9AE4F414E6037 +:10889000CD0E8505F13A38A898F6FDABDD6EE503FF +:1088A000F59B2541615D1B06FA0418B8BF87E638C1 +:1088B000C38C4591FB42CD0931760D746FBD51B328 +:1088C0000FEAD226845F705B8F88DE267CE17420FD +:1088D000288E36CC30C3AEA07CE8EEE9E838E43927 +:1088E00001E1A77DB683934B3179760174CA538336 +:1088F0009C74A8BCEEFA892F3DCE6106C8A36F8C8C +:10890000B2F667AE5C134F0759F174DF120EF18FA8 +:10891000732183393DBC29266FC1B864FD0A290043 +:108920005308B13E56B2D537E6A1099A67E5676F9D +:1089300097D79D0DB3AEF5BCA3071EB7A1472B5427 +:10894000277E8B3C2C9DB972493153DC9E215726E2 +:108950000153D2234D9D56F5BB155869B572EB34C2 +:10896000CB265CA09BC891C114FF00A372D37DAE3F +:10897000EE1A26C3303C4DC843E98BE78737E5A0A4 +:1089800046C533BF3385DE568B94CC8429BD057232 +:1089900035C0DB734F016323B92F5465E10F7A6152 +:1089A0000AB0C5F03E9DFAF6EA02D9000F679ACDEB +:1089B000BF1D2ED81BD82282F2977E2CEDD20E3C02 +:1089C000DE06525A4714478B04982150AB5BD94EB0 +:1089D0006955BB420E76E604D20E66E02B605B8DD5 +:1089E000ACCDD07B9DE926F5FE45B96961FD080255 +:1089F000BE67CB59A3A4A4B9F59E5E83B40B722FB6 +:108A00008B0865677C0CBE8672159B0FF7ED1E23E5 +:108A10002A2C5336A300A078881901681C6355647A +:108A2000112AF1085EFA24EC81676EA59E5407A80E +:108A30008386059F2ACE6836868A8488DAE78C4149 +:108A4000FAE9122E8B9E56B14DA876C68084321458 +:108A5000AD70BAEFB543D6588E88C8021E2763732F +:108A6000295464C2DC13587FF8B87D8B335A78A33D +:108A70002A1268CD9435A6775F09B52789C694DA9E +:108A80000E52371DB6431F930BF9D520749DC92C88 +:108A9000E009369462786E49C54F6590F145826071 +:108AA000273EF92BC93F84749229A2AF2A1A676323 +:108AB0008E7E577FEE8F8545068B37958288D88DC1 +:108AC000E70247ADC8ADDF93C9CCDF858A511C9C56 +:108AD00038382E029C5B805BB9336BA07F34EF513A +:108AE000F7797EF9B4C2B0BBD897AEC63BC3BF57C7 +:108AF00003C9EA50F3BA968A4CFDF91A2DA1C97F31 +:108B0000B24A183D9C1259AA6E5082FF4B22E6854C +:108B1000A3C6A83D70B6E10EAFC6B3A31CB1C04D4D +:108B2000BA195475B311EAC4721494ECFA5FC74FC2 +:108B3000085DAB479E5CD83CF8CEA900ACE8117943 +:108B40007C80E20956A615CB2211CBC0083A5A7296 +:108B5000E146C9C379F17CE0486C80C253B7A6F006 +:108B60005AC74594A15BB89A7D2877A46A6717E332 +:108B70000F5BB82602D73D5B7012E6F09B147C9128 +:108B80003A6BBBEDF67AC3DE467F0CF7A952F53996 +:108B9000D01A363AAB47CE212BEB6504FB269A4818 +:108BA0002855AB20C3B3A8EF8DC1220A4B03F04771 +:108BB0005E3960520C4A4A7A0468BF43BAB1CE3378 +:108BC00069D04695595722E8544233187677594868 +:108BD0006E104A038FF6AB8B17C20DFD6847C18339 +:108BE000BEB200D506A3E960C6383DB459928145AE +:108BF000F96A15CAC4EAEFD6D2608D7A77E18BF5AF +:108C0000486B77D62B51961B1DAFCBF2632D1E0BF5 +:108C1000597CF1DB0DE65E67CB303BDF8E01C92866 +:108C2000DEB97476884F52849478C0005A177D6BF1 +:108C3000220E2058B6FAAEDEE6BCA5E7EB322DB226 +:108C4000A637ABF246553500D0CA41C6C8721348A4 +:108C5000B0BA31CE3190765E0A0BEC1F98F78C3D9E +:108C6000241B3B25D4A95345DC1C389582348C81C8 +:108C700069798454D1D6C94B27EA02C79332F3CF1E +:108C8000D54A2E0EC18D5F6803912EFEAFB1BABCDE +:108C90004C10DA4F35A8B713D938DC02F15A280244 +:108CA0007A2030705AE90D7BB87CC93D6D16219D44 +:108CB000574B7DCAC6E5E6DD44C7C326BA5F29190E +:108CC0001CFD500C25F780683CDEF4BE9D684B68A7 +:108CD0006FC167E7C62F31532D32707207514D5B5C +:108CE000DA22A1A9FE0E368BD98EA2245BE52C8D4B +:108CF00003F791F36907122D36B381CD1093988A4B +:108D0000E17C177D56BA1DA82B91560D547E8C150B +:108D10006D7094F97325E035FCA29768B5808F508B +:108D20003B8FA578BCCDD491DA1469552028600515 +:108D3000F581EFBC793F514A9CE17DB36BCFCECD3D +:108D40006B7017FC9A28195582FE0F859E773A762C +:108D50000916E17D627A531212D78B6856E8D33632 +:108D6000A31EF90794CC06A5007001042CE482949C +:108D7000ABAB65519AA8F96E22EBBF6E143547294B +:108D8000CE3B5BD7239A06281A769F3B74DAE21F04 +:108D900051F8361768DF383885E589E4A5253B7634 +:108DA00000C5B90341F80499125EA29F4AE8DEF2B9 +:108DB0003536A51EDB3FD18B5BAF7F0A8B30385336 +:108DC0006EBF560EB8A5ADCB3CD318221B82F6CF92 +:108DD0000F8741F09640C06863860F3891E90857C5 +:108DE000DD27810B9C7DB04DD618AF8FD4B114D741 +:108DF000B86A6FDC5410EFA24A07D9BC7E593349D8 +:108E0000DF859148B15B24242E0AE0BBBF81E8CA0C +:108E10007F96C07D737322DC01B66145BC62791315 +:108E2000EDBFB9F2B4446E6A9459AC35231D14AB4E +:108E3000EE36E28E2BF22B836B8D1E71E446E8CE6C +:108E400039D406464DE77DF9410FF4603B2716B94A +:108E500056DA109DA7F3A28440E7FD59144D035242 +:108E6000D3B913416F6BA9C82A01BB7A480E6B11A5 +:108E70005D8DF44FF56010DA823BC021EC994C59BE +:108E8000D6B04DA7D0C445A87567E0254B508E30AD +:108E90003058B9A22948BE0DA2A51D96146DE871DF +:108EA000DE3BF4B7FFDE8260B8CCB613C99BB61ABE +:108EB00042A83D5613BB888A9EB5EB37257CBC8EF5 +:108EC00016AF282E79B38CF7FE8FF1ACFAA1F420FF +:108ED000B68D9F48AA476978E9A7AE2F2D08342B95 +:108EE000B0C23377F3CB025CBF8AFCCA5D0AA3260B +:108EF000FBD284D4F58832823566BB13B3469D37E6 +:108F0000AB86A1419B53C5794EB3B6D67AA3E76928 +:108F1000F9B220DFFB4A0787DB3A5FF825DDA2F1D3 +:108F20008C63EF2E669F02808DBA0950E1E4FAAFA0 +:108F30005861EAC9660DD09158C9738BEB5D98F8FA +:108F40002535E3D99DA15798863F82B725469ADDFE +:108F5000001F2B52AD9BDD9337247936ABF6B41549 +:108F6000253AE48EAD3F78E043DCFD0C6622291AF9 +:108F7000796B8E1906B321C06C806FA3620EA5BBFE +:108F8000B84D19F7AF7532B237769C38C67ED3FE2E +:108F900028E35667631C711CC5FF1A86628629E99F +:108FA00059BBA99E59DBF224D13EA9B111CE68F379 +:108FB00037F7D446DB2FABB6B4E71B2C24D6BCA0C6 +:108FC000037F96978D5E027055D168A7F7104F54B6 +:108FD0009C73E3E7ABB975719D11F579ECAF6F390F +:108FE00031300966C6B7138CB2E663F78358D3BA3B +:108FF000402FC9273D53176C5906DDBEC35E184686 +:10900000EE0C271F29A524028BBED6F295D41F2C67 +:10901000AE952A173134016C7E468A790B291C6B78 +:109020003B6857063D0011545C72C06FDD65B3D3D9 +:1090300092A11E6F36E99C86F33B9A6F58DAAE65B3 +:10904000E72359B43D6BBCBAAD4EBA56B38DA658A2 +:10905000A634AA5EFA92CBDDFF873F8ACAB2CC6DF6 +:109060006441CDA84FC82160387C45F241F4C1CF9E +:10907000EF5EDE2E209971E544BC941777F3449699 +:109080008E7BAD98C9E4205D5A3AE02FCB61B4DC09 +:10909000DD20728DA521B871867CDC4BADF5AD83EA +:1090A00016FE9D05114A29AFFF84CB1F2B9C6F290B +:1090B0002515D12DCED4C717A06179CA961D2D5F75 +:1090C000CF5286BA460C26EAE385297BB8507D4FFD +:1090D0005987F88212D9369D8F04B436906A8E5320 +:1090E0008835919F4AC42FBEC1494FFD9F7731916A +:1090F000FACEC2F316A06CD6467879D4FC8935F541 +:10910000D4083CDA6879A0F982AA6E450BEA249E5D +:10911000A0875D828E7EB21201181D66335E2073B9 +:10912000DF466EEB3CCF52A00EB923B196EB363C36 +:109130000C39412B1EFCCB49C9ECE52C1AC5C2C722 +:1091400098116FFA95E8744B4C17ECB860E70FC2B2 +:109150007D9205A78DEC2E136A93AFF7DBE8E6113D +:1091600009F5B53FD563B74092E1748D00DA44A8A4 +:10917000D53ADB915045A4BE13D265B4AC47BEE6E8 +:10918000B73EA0E10849B13D414A52C7211611340A +:10919000DA1957B1BF4CE161FAC73F55C1D91F2851 +:1091A00073A34D38A67659BBF999D3C8515146F6E9 +:1091B00071D3DBCEE770503393E8279AF235F18E06 +:1091C0000005E46E368F2627B34EF7A8E3C7CEA17D +:1091D000937AE5A82FEFA51063F0D1428985217716 +:1091E0002F64D0B02D06FF0F6DD614CB47C7C02912 +:1091F0007FF21897116BC64E9AF824F0BE81C28494 +:10920000F185B9074CB42767ADFD223AE06B677072 +:10921000ED851C642D823F56C5B70F07454CCF53D3 +:10922000E44CEBF622E1291747B60F054BF062C577 +:10923000884F008BB879C28C1EFE304B43ADF25E76 +:1092400005995E5B89DC150202989AD13317F06CA0 +:1092500099623CDD06A124437FD68B5406EA605D0B +:109260007E41D7EC2BCBB060BD3D4E2F68AB0B30B1 +:109270009008C6D725DEB2E47B6244C09D5E8E298D +:10928000C9E04300A0C6F63E47F3DBED80FC624335 +:109290006CECA41A46DE710CDB058ED4CEB467717B +:1092A000895AD1F12DBB7AC345B3976C464820D07B +:1092B000A55DE08A5BE48E4739745D9A08C2F76E5B +:1092C000EC5059E64B2B7A7D4614193B42989DFD94 +:1092D0003607AD0D7744130B22A525E9E45A642423 +:1092E000604864BFB8265E3A9E0A22A19D566A82F3 +:1092F00086AA2930CBC0979907457B22EC09AB722F +:10930000A5396616E8B19B3F42DE6A129D859D5ED7 +:109310007915D05AF8C8C276EEFA4AFED2B03CAD02 +:10932000BD4474EA42F9A75EB0B5011525A9D2047F +:109330008DE9EF9F88279FF151874BFAF0376654EC +:10934000407351C58C6CE96D65C3C3701B26A08743 +:109350005E4E027F5213E36DA98FC9D718A23C97C6 +:1093600055298138FC25C20824F5940CC09BB2799C +:1093700047EE74A1B5AC5003B38F748E784CB8F33C +:109380006557D8CC395BFB5803BF80E3295BA76FD7 +:10939000641ED6CA241DCFFD9ADA0B30489484345B +:1093A000264C8D505CDBA0C879B922F675C4AE623C +:1093B000BE669FAE73FF278D5F79E7D5CD895537A0 +:1093C000282C505D0385707007718DC01F356B842C +:1093D0000DA096493D66844EDDA2390A4739F7C192 +:1093E00016E4E94D6294E8A4B1306301A013BE44D1 +:1093F0000FA20234CB4AEB20B01C0946D247C82446 +:10940000E6374FB44804E909BFD1FA6ED9E926AE70 +:1094100078DCC972B413D6261C715D122A46C28448 +:10942000FDB40009683F842997D953781877356DC2 +:109430002FE235D528A096A61E1FBF712914124110 +:10944000852D9C3960B49A7A4B7D9E9DEE476DE5E3 +:10945000B1FDCFD3E011A13BC6A268723A0319C790 +:109460009F2F87C4C5C4C1FF91F3EBE79F4583528B +:109470008CC4F4FA3C23EB305F3CF93213A06263F6 +:10948000D127DBCE0C82C3908BE082CC50FCCAEAA1 +:10949000F318BEC0BADA39EF8870836307EA5B1647 +:1094A000E486AB86249FB17C340EC81BA13CF1FE40 +:1094B000FB4B7C2A2F3E87523153EEB50623B2E197 +:1094C0003C4BB26E6E505A3865C83376DFE2C6BB8D +:1094D000D598BA823DB264F970C5C05F9975CD6206 +:1094E0009A745BE1A4B4BBE180FD583E59A188F9B0 +:1094F000040A3F9F6DD81CBA1C3A952718F3AB316C +:10950000285F4604511DFE23BAB635CC305B10E40B +:1095100009019CB2368891CAA6F99A04078DB8F55C +:1095200067E93B6C2934E46599E9ADB88FEE7403C3 +:109530000366DEFB85379850D0D7865E022EA6CE16 +:1095400073DA01A4A2E1EEC5D2938CA5031C987D29 +:109550006D3DB8345BEC486BF6624B44320D67A44A +:10956000E9D4CABBFC973C969F2412A71823E8B9FC +:109570008934942DCA17D1D3E4B1897B601ABF4BCB +:10958000457CE89FD736765037886FF3A3E6E37EB5 +:10959000823F84F539AFD98F86931AFDC07818BE03 +:1095A0007AE8AD66109478CD202840E230894D2EBF +:1095B00032436A6F4BAF9A460E159E28C532420B56 +:1095C0008A3C2B6B84BE971CF4732DA731E73A714C +:1095D000AF0EC7D085F3E0290C93CB0DF80C9EBFDE +:1095E000BD12CCCDDC9910A8960D027FC41CE7C734 +:1095F0000D843DAFEC4A7EDE012A7B6ED6E28E24DE +:1096000086979E695AED53000E6FAF3958E6F48085 +:10961000B715268DD10F03F83F2BD1F391CDE38FF2 +:10962000CD4DAAF339FF10D0B232A6A5304E9C6AB8 +:109630009F14B1E081240CED33DBFF225401762727 +:109640008688229FC88E1B3DE4976CE51F193AC699 +:10965000AC03826B7EA85D8933415F3B7D22433F33 +:10966000CA2A0AA1EA974751826BD32E8B7F70E4F6 +:10967000D1E11C3EEF16F1289FC3D2C6BF8550C66C +:109680001B5787BE3A627E169890D3A00F77867BD1 +:10969000EC67A88F10040012DCAC3744433B8BD638 +:1096A000E7C6846F428A7FFCD3795419FAF0929905 +:1096B00018940452F8167525E0384CC4FCCAA41658 +:1096C0002BADE94412F7762BDB45BD295505FDF896 +:1096D000A88BDD21A5B534B8B6463BB083473DFD28 +:1096E0006D83383C5F3765253E2738236E6755EC20 +:1096F000E42004AE5FADB030027C8EA1E19C5A0242 +:109700006394A63605166A780177239AE9E1C40ABC +:109710000B6A0A66EFA57D1D9AA7A5971EA1014AAF +:10972000C368F9505E2382ACD5502CDEA5DB93AC28 +:10973000DF9E5F289DCA2FFD0AA314D132E228EBD9 +:109740008911117A9FED39A29B8D0059E91111DF22 +:109750007B8CFB24FB5439B2CCF7AD811982B40465 +:109760000F0C38CFEDBEAF6F9C703BA19EF9BCF1E2 +:10977000D42CD288CFEA16950993F19F2BDCB463E1 +:109780002C4E737C4D768D9FFAEAC3BF4BFE2CB6F0 +:10979000617A114B202442CDE268A4D20C9A2E2C7F +:1097A0001D55C6543B16EAE22C54FCB0388E7B4261 +:1097B000D5450AFA36B03CFC9BDFEC91DCE3AE13F6 +:1097C00001CDEA36223597511A94423A73FAE27083 +:1097D000995C6531E63CAADA4240A583A05D2DB0D4 +:1097E000B86E1E8F49CC7F81D2DC768ACF2D0C31AA +:1097F00008A9678977D67C8C72FA7A79CC56A1F958 +:109800002C2AE9D25BAA6A97FB82D212FC4D8813FC +:10981000EBA2912D4BB61FE80C0E7F56A754527643 +:10982000C167D1A4845098DE1FE36D5F224BFB0E0D +:10983000232346768A8FB908FAE5BDD93D59ACB1E4 +:10984000F621BE2DD3FFFE1463E9F7802D923DA3D0 +:10985000AC3D609DFB3EEAD862DBF608727416FCF4 +:109860001EAB1E13BA3A1335311FADFC065D50C155 +:10987000A95B6B27775648A9AED036EEC543625632 +:1098800051047ADC98F637CA3E5AF2E9CF96DBA942 +:10989000BB97A028ACF99D5B8038C63AAC56DFB1C7 +:1098A0009598782C4B9D220209BF02EED5349CB7C7 +:1098B0004CB17852F3D03A94733804485A16C50E16 +:1098C0001203BEECA9D5145D84E3038392C293987E +:1098D000E3B72BEA0F94BE925E8FBB9F77A4A9C714 +:1098E0004CC130CBB86D3B69935CB9B053238F52F8 +:1098F000D6283BE7728D9E5A5974FD68C17A3A6248 +:109900006DB1552D0D4771BDF7AFDFA4E7B174BB45 +:109910001F291FF73F70A3665741BB7F6C3BA527EC +:109920007BF01AA3CE76259635B60EDDCC70E68296 +:109930006AAE619559D75A607837F90AEA6F678835 +:10994000A5850E268D83C0F3DAB98868F2FC4D4BED +:10995000CE9B7C92E53D4A2CD19961CC64B72FB067 +:10996000D07020DC0148453FFBB5C76C9F5AD6A399 +:10997000EF315E4211301EE10D58E394890FDC3463 +:1099800041B3B57017249438DCEB67242767982D12 +:1099900008DDEDFC74796C56C30B536807707BF9D6 +:1099A0000C9941C8788BC0F1A4F468F07A007B333D +:1099B00080D2B654D2CDB5A1AA79BE2F841FDE13B2 +:1099C000F1AB792E82799F7C4F11FD949208C9EFFB +:1099D00066F0A8F8F41A4707D57DE9D216DCDDDF7A +:1099E00052B88C18C7A45131C807E45BCD45132485 +:1099F000E128BE4470618BE99C787F04AD4AB06E6B +:109A0000C0D44C39B81F8D3F7C15C1E5CB75B4155A +:109A1000A5867D6733B92F49E4ACCDCE362400A1AD +:109A200044964ABB0666F35270BCB57728EE10C860 +:109A300074D01787221E969578A1E4BE3051D116B6 +:109A4000EB3A4355DA39989A69BBAEA3BF74123F1B +:109A5000B468A71BB996313FB82D61B57338D49857 +:109A6000E6332BCEAB1EECC3EF40C8688B7168A108 +:109A7000475317A3F0F8BCA137A22DA218F09FB846 +:109A8000BCD9C36476AB8313567CA8DA8EEA9FDD1B +:109A9000C2DC8C87E79551FB63EB84A3A4EA9203B5 +:109AA000423AF8E29EFA409E02A58970AF8E70A5F8 +:109AB000B734CC2BEA8D36BC6609639750701432EC +:109AC0008144AA38B8BEC809AE3E7D9DAF53A034CC +:109AD000861C9E2225E9B6C22CA02FDEE428BBA15D +:109AE000613B13E568B5B4ADAE96CF5160B55E0687 +:109AF000350A73F67A1B711996608A2F4F318C6A7A +:109B0000A611095CA1B6350BE84392B2C9956E0463 +:109B1000AC025F544FF387E168F8FEEFA20B189098 +:109B2000DA5CF792C3A8B5CB2732ED370D73167FF9 +:109B30009ABD03EF76D2B16C90F86DB837D73CC2BE +:109B4000D61D33E9583C678C936FC1DFFC1DF86864 +:109B50009CF2908CC70BFC75D0A1EB25C5F6C445D3 +:109B60006568C737772F2700C7B9D6A0218B678FC5 +:109B7000C6B01BAC623C5F80BFA163089C753AAB6A +:109B80008A54836CF8C6C0D06DC3231BEF8C7FD57D +:109B9000A14C1BBEAB7374048907B8C5E0D36DA795 +:109BA000C294E6CE9907DCF7F4DBC1E380740221AE +:109BB00039B9F923AC19DE3F41BE5C715FD381290D +:109BC000CB97BED44E09DE4772DC12EBAA99130A7A +:109BD0004DD043E242818C3EB9946EF2BF2122BB4C +:109BE000A7613DEF5EAC4BA0B53B902A4840717039 +:109BF000559B98213521F1F93D0EF9CF344E71ABCB +:109C000037BB13681418267872785B26513F74327C +:109C1000A1155762683F2231434228C6D3A9D70411 +:109C200023F202F05348E98BF43C472E2851ABB5A0 +:109C300031B9B4CB514726F7C2991F5BDFBB2E74F5 +:109C400088FCF18E24F95396324F6A88184B52954E +:109C50001E7DDDC359565E5BB996E73A316DB6019C +:109C60005A804AEA443549E2B16C99A6C2469AB490 +:109C700096AB71BDD7BF3DF8BF16065B21E3B3219C +:109C8000D4A4D74E2712B06E8D361737961B4AB123 +:109C9000E5DE9BCD98A66E3949DE670C4758718684 +:109CA000206252F98E1240617791883859377AFCD8 +:109CB000D6A6F9C027B162A58B7EC147C373B9117F +:109CC0006C9100C304ED7BEB3772E70AE8A59614AC +:109CD000BB79AAF0100A058DA5A09CED2DE19F305F +:109CE000D71CFAFFDD20D11A23E28DCBB1E5928992 +:109CF0005829EA96C5BBF4C05527662F3B8C760DD4 +:109D0000753B756E0961A4300E8EED203975FAA091 +:109D1000F3704FD988C86D9BE38C3BB020917B09D1 +:109D200050F3EA5A86AECDA4957F5BE16E6D3A7B27 +:109D3000F9E1FEA1AEC8744F1EC94FAAF1A07DC4BF +:109D40009A56500DABB81A1B809AA15CB03260DBFA +:109D50005618D79EA82492025855BAC22C6444CEF5 +:109D60000BA42258A5F8F76921E121A757BF650088 +:109D700041D360D777BBB63ECBD7F7CB46F11D7149 +:109D8000704A2DDF1260B15E00CF1539EB2F952D93 +:109D900030FA71BD295594EDDBB680A149DD8429E7 +:109DA000AD030C06CE4E2DF9F9EE3E99A305621FC8 +:109DB000225C2A9138EB988E6275F6D20B7040B90E +:109DC0003CAA1335DA4BF9DC8D30E04AEF0524A8C4 +:109DD0003BA52F645D3A72854A6D215A9B9D0A7A94 +:109DE000DC876AE17A685BBBE7B45975925F02FB76 +:109DF000EB14212F532CA497516A7A2F12BF2933C9 +:109E0000842F640CA5895D9E89D933C691F26412B2 +:109E1000C10FC408CBA2C79F92ED4B3AAAA8E08419 +:109E20002A27EBA14966CFDF63A4EE83FDA15D1372 +:109E3000D56208BCA431A762142465C498D3776D99 +:109E4000A6B155312AD23A073ACB1BA3BDC6B85D9D +:109E5000B11A23FAA0BA540A2BFDFFFF23C5B3EEB3 +:109E6000040EBFE8DCCC66E893A984B9B415195C8C +:109E700019FC4184F8FC0F80C48800D16F0CDE937C +:109E8000E26C8951358AF8306E3132F356213B5CF1 +:109E9000B7AF30D2E5343D81C4DD6E17F22C52D419 +:109EA000AFFBB3A1C1486D1184965AC0BEC4F697EA +:109EB000E1B858B1B659E6B384F27E7FCACC655199 +:109EC000B258CE2846BAD35D21AEF10EF929AA7058 +:109ED00086520D7B285E274ED2E16D58DD3A103355 +:109EE0000323F64881E4C147B9470AEC119A9E550D +:109EF000AD41E3AE9FF65FE0B5253B4EF83E854DA4 +:109F0000E0749AA0B65D46DBB433A287BECB03D023 +:109F1000B13859D71DCF2FEFDC163BE54F93C3C2A5 +:109F2000B95D79458210696324D53B11D37CE08605 +:109F30005F3F702543F2CC4194FCA58B6EED959E5E +:109F40006798548F9A5748C7A2CEA3329608D6284E +:109F5000739C1B2F798B6997D556ADEA6B7F48DED2 +:109F60004B11C1290B11AD7F7EA76EA59EBD7D3D16 +:109F7000694FE74DE905CA02B9F689C92C66B8AF41 +:109F800076DF9DD66F8B3D53A0E7AD44A4A462EB72 +:109F9000898E3AA68CA82E7D127A401954A003BF50 +:109FA000D109359487E558A98F3418637BF5ADD96D +:109FB000D44CB4A4AC2E6F05B153317995228134C1 +:109FC000027B076F8E355A7EE1DFA79A4134A9DA0A +:109FD0003D9C120B448841B23520482A57B6E89F71 +:109FE000A92A0BC4043368F0A2C3457E094E7098B9 +:109FF0005ABB29529FBF76ABA2DC452D560B687128 +:10A00000561C2FAA016FA4BD4CFFB44500C60246E2 +:10A010006ABC271CD9B710D59D6B09227292270BF9 +:10A02000C25560765D9A87A52F6FB44F8BE182078A +:10A030004AC18FFE47A560AFF84352581872767533 +:10A0400025D341B62231CBB12CE249CFF495791911 +:10A050005C5770A438CE14219E534143421BB72154 +:10A0600065F834FED2508768FAA39C598E8ABF45A2 +:10A070009947D8ED8CDD700CFBC78BF849A7D34A04 +:10A080005C66DB46FE82894D78DD4D29F825BD935F +:10A090004E84FB1C875416CE0D3468C68A2411E604 +:10A0A000EB6E9657C8584B696C83DB9C376786E626 +:10A0B000A66E5939EEC236F13C45B16EC7C8EB0CFD +:10A0C00088C4F4E699C141776818C85FBC55D0D8F8 +:10A0D000131A49567EF8B40E4DDAE99665E407B4D2 +:10A0E0002BD94D765D5529C5C8F0FD13E3C46EBB71 +:10A0F000A349107809EF5D4EDB9330D12B981AA35A +:10A10000813B22A9A3DE214851FA6162AD1AE1E246 +:10A11000B3C79AB5310BE32F3D243967A5A3471187 +:10A12000FAF2CA7C3A9A7DBE6612D2B36CFF0D1663 +:10A13000DA5E856E4CDDAF787BED82D26E24A56849 +:10A14000ED792400D40B8ECDFE9B9B8BED9F47BFFA +:10A150003B794FD759D8F1AF1B502A03917D797ABB +:10A160002F260E764A4F2D6913D05D31E8E85768E7 +:10A17000352F6DB22368E831CF5D3CD22AB87336F3 +:10A18000FC98A0ECD959247DFF2EB0271D3E78768F +:10A1900001D3E103D21A6B8D4C990564E8A3F7470C +:10A1A00043DD3D7DD6C5C4B95A8EE93B99D19BAB01 +:10A1B000EF827315B2BE516FD20522FB7DE572743A +:10A1C000AB6F4261665CAF925C040FBE9B0D96ABB9 +:10A1D0000C03C3006EA4BBB3AC65F7F0B9BAB65FAD +:10A1E0009A503B7537F86BEBD656F7D7B1DF6381E2 +:10A1F000D656545D8FD25714D243C7A3ABA45C5735 +:10A200005562EFBD6461F5A3A806D8D03E34290F8E +:10A2100077FA646DA4A391F3716C469AEA7A020806 +:10A22000A0A38078D28A63A0AED476AACA9DF60590 +:10A23000BAA958D77C0650E8B0CD6FD4C6ACC47B61 +:10A240001C0DDB7662BCE501D169E0A67EA202931B +:10A2500041F064717D1771742F6185CA92CF8BEACA +:10A2600023341B0EA939DDB60952EE5108B6673901 +:10A27000863DEDE275E22C3035CBF6F65BDBC8EFC0 +:10A28000E091AF6B4C6DA56600C2269C58BD3D4168 +:10A2900036C0D1EE4209C5A4445036DC1F074864DD +:10A2A0006185E1DE8B3BA3673E7C06F0F0B433E2D0 +:10A2B0003A227D9B6254A848761DCD54D95A80130A +:10A2C000BE2CB9FBCECF6BBFD6B45B089ACD0721AD +:10A2D00095AD782EAE8398149324D548A52E359C41 +:10A2E0005217D343715D052F47ED23B2CF4BF033A7 +:10A2F0009FC3BCAF93C6DBA5209E3A62DFDED0EFE2 +:10A300009E693F2ADE0D1940AF5C9C7470DABA9FDB +:10A31000C2587759B9B11FCA9FCF0D9784E49F5B8C +:10A32000E03238E54894A17FD60227A88209093790 +:10A33000F63BBFB47D365F53A5620F53B776143931 +:10A34000F1D7EBD195A3593BBCACCF8D40EDC2BA50 +:10A350009266C432962FEED80154C4E2A5D3FA24F3 +:10A36000FEB5317000BEEBC7521F6B1446128A72E5 +:10A370005F8F6AAFFC725602EFAEC5F6F806AE6CA0 +:10A38000BEF3DBB1E007A41A72ACBAB2817278ED09 +:10A39000D7CB5194E8B4307F16EA66AB6B14498C86 +:10A3A00033C4E2A020389F752234901A121FBB409C +:10A3B000C997DB31EB2341762154F2DD4B8D796F68 +:10A3C00001C8E4260C523D59B0BAC2C8057DCD2162 +:10A3D000C268A23E498DE0528CD4CE838B39B6D070 +:10A3E0007A2E5FC6ABEDD3A5F8300B53DD9F09A3E2 +:10A3F000BFB1399D8B8B98E90563AF2A10A1A79156 +:10A40000524F32D0074FA30062FAFE23B7606A0EA4 +:10A4100030CBD976F6395C2AEA89A261CE2170BBAD +:10A4200065B1950E391EDDD1DADA98F8577B7C0CD0 +:10A43000BA069D9DF4BF376CB2A157A2824BF4833C +:10A44000EDDFEA9566EE200E17B70E35479390E8DC +:10A450000F06E02A26BC13B208D836AAAE1CD7F7DE +:10A4600068BCE772D2CE24020F4230347ED74F163A +:10A47000326DF94A6BA365F7B44DA909487EDBAE8E +:10A4800048E94FEBDDE0E0B6367E803BCCB5D7BD8A +:10A490005392A65DC744AA2B3C775B6B089DEE7D6B +:10A4A000EB0CBA52B6C0613126114D3CC5DC749E2E +:10A4B00054BB30400F357AF41C7A0BBFADC98469A8 +:10A4C000C0181A059CF0CA49B5A085FE26DC813368 +:10A4D000F194D378B79CBABA4FD807E93EE1942DEE +:10A4E000D53DA365A9F92F3AAB2DA055086E07817C +:10A4F000D486C3CDCA62E8FEAEB0216999B5AAF789 +:10A50000A2FE0F5127AAD3011956F82C241ED7AA50 +:10A510005F484C7706B3A2B41B53C4F16C513EEDB7 +:10A52000A098F8B7ACE81B00C6B42A30816DDF5E96 +:10A53000D0442340FC59BBD06B7C3CF9E3A95D13AC +:10A540002F3CE114088D128BCF434A037C5C5CD511 +:10A55000600B4B6D79F3E3D9564D9B60DAEF68AD34 +:10A560008167D8B13D5CC906893705410C6FF69209 +:10A570002C7441470301F5AFB306BBA1BDD013CC8A +:10A58000D093D9AE3BA442F54D119CF81A6BFFA6AF +:10A59000CB34125C1E7E9E48A2026DE34A28AF2493 +:10A5A0001360478E4D5A503EBA6FB6FF9F30AE8A49 +:10A5B0009164FEAD193CCB389C8B00C7C1FBE724EE +:10A5C000D5241F8A0FF93E98F6B543D08AA45DBD05 +:10A5D00018B89E39F09753E1B6FC59B626214F16AC +:10A5E0004D147ADAE21732D00628E61BE8CCD535CE +:10A5F0005DC53D8D8020D84B4FAB5A635037B9199C +:10A600006B2F983F0B60E8B3874A14325E4A0523EC +:10A6100006DA30827170799635D45B55379379D3E9 +:10A62000006BEAFF5E9320F9E3A057B513AA4F7CB5 +:10A63000CEBB98E02673AE0D44BC73C8A07C1B56FD +:10A64000F57EEF7A8D41EC3C82ACF677D796AFE1A0 +:10A65000AF74A5598F8D9EEF5215CB9C9941121F57 +:10A6600030A4F75E42B98B32532CBEF7348C4B8F3B +:10A67000FED63E62FBF09C2A80C9A16D82836BB836 +:10A6800052A2DFC912635CD05C2EDD222FBB51C504 +:10A69000487D9A4D4726B4FAE967F895587FF0A3AC +:10A6A000E004CF6BA87E9171B54C20FC375745C1B3 +:10A6B000B0BC0494BBC388140BECCF99BBD1010F81 +:10A6C000261284A8A5FB39D7205DFCC700F66914C3 +:10A6D00025C09DC7B50E57195C3D165C4C99876C1B +:10A6E0008BAAF3A8BBE0B785E223D5C84CC81E6F80 +:10A6F0009143030DCEBA983E38955F35ADE47F7136 +:10A700004CC93E2C6AC57D45B6473A5CF37115E2EB +:10A710000542C4954E28215AD625B013C4A1582EFF +:10A720007F03730C6D462F2955E0C734F8D95FC6F7 +:10A73000BB124344EDB62D430A41D91185CB3B3EB4 +:10A7400062C57957C100B35DCE869333D03476F6B7 +:10A75000B182114C65670AAB80E7F16261B117E322 +:10A76000E8F7CAAE5AA041EF106E857E2913B229D0 +:10A770008A843A6CCBC02A13959853149AC991E5F0 +:10A78000183B66B2F1241BA9A2B9B417122AEC5ADD +:10A79000FDD007F5AA091F467851D6AAFB44C6EAA0 +:10A7A0000A3F640EC63715400E112D93C41F04B224 +:10A7B00091153083FBF45B51D766E4F55C2A3E06C5 +:10A7C000E5B9F63479E554454118E751A435D4C2CA +:10A7D00087D9A44F7F6D95E9DFEB21B7857983A7F2 +:10A7E000D4CC30ABEF57013E33004C1D419BD4B36A +:10A7F000251487B54193C19053EB5C1BE0C4AB6B50 +:10A8000096A22ADBD236E3835E6DB2E2D79B357324 +:10A810001400B2F05B69C82580121820899911656F +:10A82000BB5B7E0D5FE6C5F4495DCB14F981CB635C +:10A830004CD5D5FB2443D7920D114CB85A0F77BB9A +:10A84000D577F60B3A7B2C42045AA4AE9E384F3093 +:10A85000937E4E331DF4C9C48CAA5E3055DB1F4B6A +:10A860000469F6CD11FB62B3EFCFCCBB0782340D88 +:10A87000B8BD9BF7307E3D0B5945712A7553313277 +:10A88000A0E6D097DE9C911F077D2915CE4124912B +:10A89000BC5D04640A2AC586FDE3CDD6FBD18BBB23 +:10A8A0006CD1EE09BE7FA44D448E29493048969262 +:10A8B00092D9D3499626A6FAFBF7C1F28FAFA6F13B +:10A8C0003624F798EEF6304DA84D894D9C07A560CB +:10A8D0006F410F38DDF7DBC6CB1D40CF48513069E3 +:10A8E00095DB1B6A58E8BA9BA993EED17AC46F171F +:10A8F000D70ABFF414DC178C7886D916BABF0C4B74 +:10A900002F90F2BFA5B2D825060CB99079873EF2F8 +:10A910001D1D11D7A936C197ED750796A2361740B0 +:10A92000D737369D98B7284E5A64F5F0D4BEF80F45 +:10A930005F8034B5C1B2ECAEBBA997827488C838C9 +:10A940005514B30B10FB573ADEF42F80E3E52A0AC7 +:10A9500030435053BD497DB07075F9B2BDBF8337E8 +:10A9600051AE82D83F0EF58A7F6987DA10E8F6DDAE +:10A97000749399F6F20D549BD9C0291493FBB21B22 +:10A98000FE67D9DD2C882F746B99F803EA8F8E054A +:10A990004BF8B2689481946CE1E27FCF071471A800 +:10A9A0001E2A520A9147A567F01ED7B0088B8A313C +:10A9B000EC768E74A28DB249389137641FF36633FA +:10A9C0004040DB4DB3CE0E1473477A7878951FC99B +:10A9D000B83E85D39D890CF66560FD303408F716C6 +:10A9E0009AD8D98D4FAE303DD323414404C6A2AE90 +:10A9F00037E7057FC947D757030A7E985CDF9EBFBC +:10AA0000CEF3E639E0605DE0A890A78CE70121581D +:10AA100087B86685FA62DEC74FEA539F57ABBFE53A +:10AA20002FF350BFA28541D8EEFFC9827EA446DE37 +:10AA300046572A5A10485200A3F64D53CA5408C329 +:10AA4000F1C51DA9CE225BA1E812DFEA394E30E73D +:10AA50003F4A1577D2D6BFE25B276C81CDA15BB4AC +:10AA60003DA45CA70F7BFE4AE7B701D9FF45EFA2E3 +:10AA7000F8FD947BF86761BDDD57A26625D8D4FE4A +:10AA80004DCA235023563E39E6A54321D90BF61B68 +:10AA9000E2A55D23162920E5955A68BBD6B5FB7F54 +:10AAA000F70F162982BBEF33DCB6CC7D813D40D059 +:10AAB000B1CBF39F8512A7E9338768F06BE32F10C2 +:10AAC000D82CEEDBB82C3F9C9D9C077ADE89AD9795 +:10AAD000B48CB868F019E17BEF3CAA488F88E5E8B0 +:10AAE000814ED02B5ECA5BA015257B77B71603720B +:10AAF000192BB8CB10B87C758AF97A4129C70BEDB0 +:10AB00005B0E95192529F1978DD9484AAB448E7271 +:10AB10001AD7AB73C988965D7E4F77230BACAAB268 +:10AB200091587157D5538B05AF569C3851793F7862 +:10AB30004B172BBDF6787049AE73EE7048F8C50D13 +:10AB4000395CCC5B537D7E3CC9C9742C6803B3343B +:10AB50006810F76219759DF7A0C6B6872CD621C676 +:10AB6000FB4E51F9A6A50A4F0E144E227CE75E2B30 +:10AB7000B366DB576262D6619354DC97D80862E70C +:10AB80004C38C6B74A965455439003A14F76F624E5 +:10AB900097FD89EF7EF163277254A7A44D96E4EFE9 +:10ABA000C749246A5578862C24A4016CFEEB99D6FB +:10ABB000F775B6093BF997429B174E3464A5CDB2A1 +:10ABC0001293C5487C44E616710A0946CD062D222B +:10ABD00037A8419612F549A71718671C64DD8C3316 +:10ABE000B44C11DB6171D66683C280779C7D1E09EF +:10ABF0007C7C7D58C07582EF2266B9D946B8B20B0D +:10AC00002B51CC0D63C3050900AF97480C1B4CC2F8 +:10AC100027F34EC2B7C9FB126D0B3FBC7D9C6A3057 +:10AC20007E171C355670CA3F5C66A576453D9CDA9A +:10AC3000C88C66BC0F34FD18B68AC6F5765FD9A2FB +:10AC400037FA61476C6D5CE9310E28E40C655631CA +:10AC5000685D07A35A67E7C9EB123F4A058D0609ED +:10AC6000F219D6E4E609210805ED5C3E91F5AE99AE +:10AC7000745049F2CC94D8E465C41A800215278434 +:10AC80001C6BABDA01CAAE83576A078D7326C2C14B +:10AC9000B54805CA69634ACFC41C096BB6C2FC64D7 +:10ACA0008D2789DDA5BF36DE4E82EE33D75383294B +:10ACB0009E585DFD33BA15399D14AAA4300E28683C +:10ACC0000E0E6396A3E4EA38D77E89003B3FF8AACC +:10ACD000429080F22683DE6DB919B2435E68231C70 +:10ACE000965884E72FA001D0A8039DAF6964EA4E6F +:10ACF00031F01BF17FA8E97B1258E4F9FBDA939558 +:10AD0000B986A7FB3AA04A29EF06C059AB0AC3F897 +:10AD10005F7ECB34F84CD87D63D32FDF7BF08C196A +:10AD200050BE1363F20E9338107F3DC8838054F5F4 +:10AD300059DB56C81F02B8BF7804617C0AB99E155A +:10AD40009B17FC3F40F85D542389252AB691FEA24B +:10AD500042F6E66A98E985A69BC4364DD32BDEF70A +:10AD6000DA4CDEF8CAA95E371B3158518E6EFC31C1 +:10AD7000878AF2264A6494E4EFC04D9867C9035964 +:10AD8000AB5128C1CF6C8AD2413D74CD4964E59B5B +:10AD9000F572F5CF483D260CA7DFE793B92C43B5F4 +:10ADA000BF3700A1A8D3600DB5424411CC5C64A6A6 +:10ADB0001A4D871345C483734CAC5144C45796183D +:10ADC00032A7E9C0F69E0E71888951AFB5E8E01B45 +:10ADD0001F857B622BF7A14A19246A2B9A5FA9BCB5 +:10ADE000F05D00BDADD7AE10ADBFAA49F75756B064 +:10ADF0007CC8E362E56F93773D409361AC0B5BC524 +:10AE00008EE9BE7D49CEEAD116F4D9A7DE0DB2B8DF +:10AE10008164C615D3170ACDD5214A895535965F69 +:10AE2000B01FF334A90F7FDECF7401904610E7C046 +:10AE300052BBE108C763992A18E13AAD87C772A1EE +:10AE4000713E0015A43E5A4AB70088549E945F7024 +:10AE50003A97CB9E9675DC8D7AD0503C1509A3802D +:10AE6000DFD6E3D351597492032AE3D3F8BE8E1B85 +:10AE70008778EF69DD9D0C16710AD753203B803827 +:10AE8000872B56AF67C76F9F6B4DF22FFC630F0583 +:10AE9000DE26CC9CA063C8D20D32811A4B4C191609 +:10AEA000A1D0727C99AB651D5B659DF7E458A71A2C +:10AEB000D3C205806D54081F1E2096E2E5BC3D7A82 +:10AEC000DCA4370499FC096DFC507D83DC4B1D8BA1 +:10AED00064B2A9178DD2064262BA24883187078CE2 +:10AEE00047E620DC012311A4E0DEAF3EAD49C16F8F +:10AEF0006FC2AC4E668E3BFE851BFF55E968BFF204 +:10AF0000999091CC620549FD5DE425680228BCAEAC +:10AF1000A7DD39505EBF5EC408F34309B8D6EB1E07 +:10AF2000E94978904FDD090AFDEF0BA067276461BE +:10AF30007572DEDAB747D4720D2EA11398358DB134 +:10AF4000231F82C09F7D466F672CF565F22ED201CC +:10AF50009F7CCA4701DE7A35695180FFECE3F02817 +:10AF60006E8F769BA1130A42B2CCA530B876ECC89E +:10AF70003FDC1DD17DDA1F2BB6CAA6F72DA597C6DB +:10AF8000ED586E33EEA606E95F7B39BFB259991FC3 +:10AF90003E902480B39190AE61D0D9597C59FBAFDB +:10AFA000A870DFF3311479581A9DF2CBBD0BB3238F +:10AFB0005FB5715F3A994733BEFE3FF245E7E15F07 +:10AFC000E7C6CF25C35EC75071E4DC849749D8C873 +:10AFD00033A0A46430DA477F45C038F8EA0DF7BDE6 +:10AFE0007FBF255E6B2D9C0BB742C2DA2888098B88 +:10AFF000660F0E1E021C36BFA9418AD812B09DAF43 +:10B0000091C4D850670898AC1CA23DF2288D000A64 +:10B01000EAC0E06A2E016C990C163F0113D0FD6B5B +:10B0200034748415A462FF25C77455B57B04F88574 +:10B0300089BBBBDF52413BCC8EBF5582911212219E +:10B0400016AB039FCDEE10B5C60ADC2D434D11F0B3 +:10B05000016147F2756F90BD050A28DFF393FB414C +:10B06000CE94F98BB1BA2D223A5BA0F9CE06779334 +:10B0700050AECC19056CAAB926B0785CDC713910D9 +:10B08000300B5D14B2AB4531FDEA1E283E9C3763A0 +:10B090006D3E874153996330D3E2E7B08665A9805E +:10B0A00009D793BBD8B9718BFF7FBF9C03076D0B8A +:10B0B000A41713BF54E004AD3D10A6E6FED580985A +:10B0C0000059014FF4AD066DFBBE4E8F5DD9AC57F4 +:10B0D000046967B64D542C4B05F9CC02E1252C5D73 +:10B0E000D3CEA7F09C77BA40CA6A1AF9CAD3E7F957 +:10B0F0002339FDCB78571A73AFE20D2F2F8A206DBD +:10B10000654EBB2ED76D6806A126935E863B81688F +:10B1100088EB0790A23799A22D630D883C8B136CA6 +:10B120000D1A577747E91D4E876C1E568E2C17CD8A +:10B13000C42EE87D49CCA886A21C368E9AC50F0A7B +:10B14000D0A011A67B2C6562AF9B27BF7970F1DA86 +:10B150000684B9D899030DA88F85A10EDC95E9D096 +:10B160001034D0CB6C237854D1796708F3B84A3BBC +:10B17000FFC0F9844C3906A830BD4F7FDF3D6CFB22 +:10B1800082A8C3857C78F6545E4EDCE5C973EAF686 +:10B19000DEBE295B1C809B75ABD13A6077514A8D2E +:10B1A0006C685ACCC8E8676545ED0E604E3DDBDB48 +:10B1B000947F1531FE4CB28849370247F12BF93F95 +:10B1C0008CAB1CE410EF5352125F667C2A079F2D54 +:10B1D000FA7D9F14B7185B129230309AEE0116DB9D +:10B1E000AD11D8318B155E5AB341285BC9082DFCCF +:10B1F00004FC464556C151D848F78B9BB0BE63E26C +:10B20000428CE6F506D419E5F6C44AF99A9C612BFE +:10B21000B30C17A9A89DE496E9424A062E5F56276B +:10B22000F470F5F735DC160DBDF22507DE34BE22CD +:10B23000CFB4C8A73AA868423B0B6A9A657C942CA5 +:10B24000782C165AA3C1BC1D00F955A15729476691 +:10B2500072E09B64D5ECB28931955235BEA75BCACA +:10B26000AAE26978180850874124B986157FC60D6F +:10B270006C211C0EC9A2AD29304A70EC98D21CFE7C +:10B28000CE3CF85FD4C31248D8FF3D0B843C5EBA75 +:10B2900086B5A8A34E7EF773E1E9F0AA5DAACF9721 +:10B2A00089F69A52467DAB852AE2C398DA7BC6A11D +:10B2B00069C139A65CE656C41D58CB448F2EDB9C71 +:10B2C000939801E274090761BBDD9E0C7A0418AF04 +:10B2D000685AD4FC6D18AC5CF18F7ECF7C69DCFCC5 +:10B2E000DED74DB467A69271507D1FC505AAC1F780 +:10B2F0007F7760410A8BF64CC85FBB189AF6A3971C +:10B3000049360076103F49E95B20CC9FD7D0A45046 +:10B31000FD6C31E11A21224944585419BCFE2ED249 +:10B32000A91B4962E766AA96FB09CABEC5D757683A +:10B33000ADCBC7FEC561127A5A90ECF3009D47A2CF +:10B34000DEF8CB2862B52A80B09EAB841136AC6D96 +:10B350003DB0074A3D5F039489410E7FD793E46671 +:10B36000F608B1AE8B48947C7F40D94E42566D555D +:10B37000F6A27653B6BFB934E47C0F0416D0C09859 +:10B38000BDF89BB23BE361AB31CD72FE6C3930C38B +:10B390001BAB943179EC097AF609E1129F074CFB5B +:10B3A00085FBB0758A1A3CC001576BAD568006B05C +:10B3B000ADBF585C306B25891EC8933084C28DBEEA +:10B3C00038CDD4AA9CA38ED1EB39639076D9A8CE80 +:10B3D000C99CBF850C521B6442B795143E05B3E06F +:10B3E000C0882B37C0BE3B0DA399E9BE5FF2FB2E90 +:10B3F000B73009A53AC9C1CAC24AA071CA1ABF75F5 +:10B400000784CB715F520C0934EDD4E180DB76EB1D +:10B410006B1EE98384F1CC53D1194584EFCE02072A +:10B4200041E4FDC63692B511089D51A85C8C76604A +:10B4300001A68C37D27DBAD4718D55152BDDEDF672 +:10B44000D01B909D96936BC12944CDBC7D2E3E149C +:10B45000B52603DD834E6F06FF8D82490AAF0A527F +:10B46000A7B9E5D4FBDC73EC56F16D121E076B2710 +:10B470008AFDCC5E0DCB387453FEC746BD0B2D6ED6 +:10B48000BC50CC029BC4CC042F4984C778A0E46193 +:10B4900097161A2DF6D8070AB207873F949B1E8C81 +:10B4A000B86F31B617CB267D22AB94349BE3A2C58F +:10B4B0000F836BB818A9EF6A29AE707AE2DDD2BBB0 +:10B4C000DD9C9870157CA50BA147E4B94146762D0B +:10B4D0005628AAE189A150944DE40DB7656636DC83 +:10B4E0005A890E3E73FBEDF66612A65ABD870640DA +:10B4F00095AE07092756B8BD2E5DFA5E341FFF973B +:10B500007F32D96F7CE0F9C181DCC93F6EC2188DF2 +:10B510005E70A6137DBFBDB6A9AA76DEC6EAE5C2F7 +:10B5200021F181555A62DBD7113172FD43552786CF +:10B530005F52FF3A96B14E22B850428E44E45DBA53 +:10B54000C044D8A02AC93331CE5489050C67A51749 +:10B550004A3591E0022AC9C0BE302614A030D73047 +:10B56000BABD5B3D2C2CBB910D48075E6269F3F0C0 +:10B57000C352B18C8403D7D2FFE154422EC20D9A3C +:10B580003CAF1C5C8CC81BBC0925F8B874D384483C +:10B59000F960FDB16BFE98840643C9B9568DB67744 +:10B5A0007F239B7C25D8BD62DF19AE52AF644C7BF4 +:10B5B000C7F9D8380F8CBAF4875FEFE34FCACFBB17 +:10B5C000F6B26D178F9DCDD48A43BFF38F340289B5 +:10B5D0005BF04610C1D50164AE7BD3AB85136E6DB5 +:10B5E000186FF83BD044C4FBE060EF53886436A486 +:10B5F000FE2A14B5EBAAB3B9437EAE940CCCD8C2E4 +:10B60000A17E841E689074133BC0B01665BE21569F +:10B6100047C9D60E25D870EC30702E03A02EC30774 +:10B6200049E3B488D1008171D99116C948C9A542AE +:10B6300032DD06B33A5EF871034E589143552B4EF6 +:10B6400043599BEFFC4A398089084D6AE12AA26C74 +:10B650001553880E3265390F81FD993D70CFFDDE9F +:10B660003C82D2559E1832C50C63053EF2599EDBD2 +:10B6700005CFF00B131E33C667BDE692522D7A67D5 +:10B68000FCD9AA42E610BD9E1C572199CF440964FB +:10B69000043B8F16DE3D6DD8A0FF4E77957B0E9D47 +:10B6A000341D3139FE73D68D5159E5C4B396A72F99 +:10B6B00089EEEE26F7784B9831FB078EB2CB2981C5 +:10B6C000841AE20C3F36DC1E408BCEB551EA47CDE2 +:10B6D000A6D7364D479B0B514E8A445BBE09B3AC8F +:10B6E0004D0A08A3AC9D7ED732F1F6A1373731A9B8 +:10B6F00009F8AC02AC950E3483DC176DDEEA66699E +:10B700009EA8F461A56A5E3E09C21092150E2AE851 +:10B710002C3682911850A017A40AC854AB8B4476DB +:10B72000D5CEE95F2953FFF288CAD58ED07D139F0D +:10B73000E7B3ACD0C2C6E3464786E012542547A320 +:10B740009FC60EF4600306E84EBA2113DBCE63EA0F +:10B75000EC161CD1D96BAE1DC9CF8E342FB72D0B73 +:10B7600076B63930D43486F6490ABBDA68487F3C6D +:10B770009E8CFA8B6175D18CEBDFAFE71C47465D81 +:10B780001E44DEDADD0F5BD8EA82F7ED4DB1AE354F +:10B7900037FF0CE24917C846EE86B3276A0C568A73 +:10B7A000ABD2AF3B48D4A0664356E9ED52F98B16B5 +:10B7B0002454B5BF64A576D7EC0959488413B54124 +:10B7C00028C556DD06C705E47684DFD6C6D7855B77 +:10B7D000C64735313837B85B5BDCE7A9DC6D3D4FD8 +:10B7E000D1A874FC89E19C44CC26401DD339F75D77 +:10B7F0007C2AC8A9CB84E3BC7C228536BC9CFF0E86 +:10B80000F84740478CE7A9822DACED27E9F2FCE12F +:10B81000ACC3E259A2F167DAC27DF9D4E3427B9E60 +:10B82000123DF7D4455E8C49F701FF98C3EBDE2843 +:10B83000D5CD6F12259268BC357238A62AD4067D04 +:10B840007F189C672959448A1585E9B0964054A908 +:10B8500070B450F8E261122D331D29004ADFED98D3 +:10B860003F308B241EDCDFCF91E80478C9ECDE2961 +:10B87000DCD41E6990E759987D5864F3B408E13030 +:10B8800064F132AFFF9E74A2425BF315F291851F03 +:10B89000F319726AAA4BBF0749B7F0A1B3C23C853E +:10B8A0003E00899FC9E7C61D44DEB59F1BECF39F90 +:10B8B00020DD2E10DD0980D652B426E6976F96D192 +:10B8C0005E5AB3EA13FEB69129220ABFC309028267 +:10B8D0004F28A67DCAF607312F9903454FC9A733D4 +:10B8E0007CA99394A35422A88A635E22CC58635EF9 +:10B8F00002052A33DB20CD5DBC70986DA5D4C74E00 +:10B90000E194FDEA183F572311E01345E02AD26A7B +:10B9100040184567C1208FEA5B3137EC652EEFF2A6 +:10B92000C19F5846AD77B449341904E868F2AEDADD +:10B93000C23D2928354263AEC626ABD1124A5031EA +:10B940000F23D846B9B6341F4884FE1A2A2DA726DD +:10B950009EAFBE8139C2A19F2011C6EF15442D397B +:10B96000F5F713B64D925184CFB1996251FD92F023 +:10B97000C0B3E6F127D75499C51D760C3E254D2757 +:10B980000977A31AE011970B064E37BFA620A24AEB +:10B9900060559A10FD79F8A5F58293539CB242CE7A +:10B9A0004E80A0AF491AFB2BF2B9AF94BFF56920C6 +:10B9B000D5C7F9EC1295373029ED5F78034D55F96D +:10B9C0004BE9DB45B37EE2377C984BB808A1AEB7B4 +:10B9D0001137756AD130C71A40A176E82F3EDF4390 +:10B9E0007EAB35A3ACCA894D6A283C72B7E7082202 +:10B9F0004F4143819F4FECE9BD7741BA1F3B97D937 +:10BA0000FC262F5B0DA94A358E880679B736C7B458 +:10BA100019A9C61887A17D05E19C77B26F95CB2740 +:10BA200089AE33E5729F1DC7EC008F0A8E804F717F +:10BA30000B666F16B549E6C8189DBC1B74A8ED4788 +:10BA40009D5678CFBC209179D5726C8F3EA908FFA6 +:10BA50004FCB602E5BDBE70871027E896E1998433D +:10BA6000017E69E1927E1786216BE45508E7CFBB22 +:10BA7000E3E7AD0910EC0DE99285BC055A31E9C840 +:10BA800050A1CC2B6757C37F5B17A405139C743957 +:10BA9000DCBED7A60F0D72ADD73BA2000AE517A3F7 +:10BAA000B63EFD876CBB53CDF5F0E1B6F16B4911A5 +:10BAB00039618B4C306C0CF3C2D574EFE815064B32 +:10BAC0000081D7E720D4FC03D1ED497B7CB56D2FF5 +:10BAD00070F3D0543B5DF2134E63984975C7FD92E5 +:10BAE0008C2D0E1C30A8555F4AA7FD7A2C420665A6 +:10BAF0002488D481CA7216207DFC22E3877D7F0AC8 +:10BB000041450A83DC5F78097626B7F37D01A4AF4F +:10BB1000FD714AC44B0181ADE2B556D2E743938231 +:10BB2000D02689DD002A3924F4EB30E5CCFB06F27F +:10BB3000EB750B78C349323EE77435E3C21AC05641 +:10BB400031A9EF26A84DE04218728B095DF97FB448 +:10BB5000F2BD681F43BD16E7FC5BCB9DB9D00A73ED +:10BB600068E89CB5D7600B7B32CDA1CC447115EE53 +:10BB7000CB6CDA6DADEA5C5E8E60444C6A35EEAA41 +:10BB800055693898F5E3C7CDA6E6978A76E94BFB69 +:10BB90005CFAEBF2A422837379F8349125F3FB85E8 +:10BBA000EADA3AA06B2E7549969C746B214109061E +:10BBB000C0374864B6F634B4DA29E9A8C7DA493799 +:10BBC0003F1F1E5B5846470C4172B1E8B8AE039068 +:10BBD00037CBBCD973A5628D3F95AB06EEECEB413C +:10BBE0004791A49A85BEEAD9F69D358E89F1D25740 +:10BBF000DF5FF750280B7268FA84C5D8D772CEC8B9 +:10BC00009F667E799AECB3E9A24EDEFC4E534775EF +:10BC10006E2CA10832D175A6B2041FADFAD0EE6524 +:10BC20005886A7990E636DBF0B4FD3EE0A741B04A1 +:10BC30002C239F67A8C669DFE84325BE70B00DA915 +:10BC40001F399EEC962102FED6B086FBB70B9427D7 +:10BC500017FAB7AE2EE8D1E80A1AB754D405DCAD0E +:10BC60001CF4761636354308C13F13E9447E30DEB6 +:10BC700032B902A5B81656FB5FDBD110FE07253D91 +:10BC8000C92C0462B008FE99856235D3CE5CE5FF0D +:10BC9000902FEF5E30B9629CC9FA911EB2C4FCF7D6 +:10BCA000ABAA3159C7CBEAD98B8A6CDD03CBBA7BFF +:10BCB000D7C7BA90353B27E39297FD437B8F351862 +:10BCC00013AA919E45F888774926B317B6AA0FDDC7 +:10BCD000E9431CEA54B5272462796A37B1DC4A4843 +:10BCE00090257E6B10655D43C2823143D943FD2FA1 +:10BCF00078B1A50A2A7823035D4EE9EF29C60340EF +:10BD0000B970D0EC65FDD2DDB39989DC21D9AF38AB +:10BD1000439B3123A5808EA1D5D0267DA31A4DD675 +:10BD2000D382560047936BC3AA75D4A9123176C645 +:10BD300044AE2606C8399FDDFEDD662095EE3DC186 +:10BD400040736433CCAF6BF901DBFB9A4CE02165A7 +:10BD5000640D655E84950D6A7B1B31D1A180ED0970 +:10BD60007DD63367B1ED7342E25039A119CD54FB52 +:10BD70007A24A239B31B87292F33D4E0738FFAA614 +:10BD80007B9336D4BFF11FF5E3118B8A6192539BED +:10BD90004D66FE4CDC14B62782DDB29F0D51FE5677 +:10BDA000968E5CB39D19C03E25BF7274BE637981C7 +:10BDB0007A53B1F6D073E31FA9473431106BF25DAB +:10BDC0003F36333A65EC9C8F3DD8039661E8F856D0 +:10BDD000A813FE63D2E559E9E8C9F1180184CD96AC +:10BDE0000F02261A2DF1D26ABF09DFB191D2446643 +:10BDF000E7218573C99399F50BFAFA121A30B36AE1 +:10BE000030CE3F5096E3AEF74197B8DB444C61F338 +:10BE1000CFFE481C63DD3921EA425A5AC8823CEE03 +:10BE2000A6BEC1C6E3508F5E7913C3C2DF7A5F0836 +:10BE300063FD75BA6B9F9C2D209E8597B3B5AB6A49 +:10BE40005D716310499A3A5DF19F0027A49D931993 +:10BE500010054E9DCEA6FCC7E923C5B94146ADC02D +:10BE600070DB84CD63BC1BB207F3599919DB25AF96 +:10BE7000AF5B0DBF3DA6B1BA2A35D8481DDFDB59EF +:10BE8000B1CFAE11F52D9EEC9FDAEAF3B53D81CC32 +:10BE9000E38383B1DE84D9DD5978621B69B2A7B828 +:10BEA0009938E4D9F518E53BC478147958BAFE05F9 +:10BEB000BE9034F81292A8B77A0403F4CFAA3434AF +:10BEC00009AA84E9C84EB74D5D3F8CBCC7918B4E23 +:10BED0006A8FFA4AC7A75D2A7D0E9D88876FB16C6D +:10BEE000197495D29663F36E435509E446EDBF434A +:10BEF000D91C645D8C0EB5D1803BC25C5D7F95889A +:10BF00007E130C4B14BCBEA5155AFF4D4BA09F4091 +:10BF1000D7A8F2B52019172977FD30E83CCCC21913 +:10BF2000338E7A4C34CC859326878EC2D9DE494A2B +:10BF3000360753DE2501F2070CCCCA938D99819DFB +:10BF40000A62148D97A2D4AFDA5E0B65EA6FED2A10 +:10BF50001ADE7B1EF0AD23637C73AFDF1EE0A348C7 +:10BF600063674F32B91B9C9FA83B131C039629E0C3 +:10BF7000E3A3B4F5984F1256B33E94CBB99142BFA8 +:10BF8000E7EA8186E934FA5C092C6F61AA1BD6FEC8 +:10BF9000DF824783E773AFA2BDB65DB3F834DE330B +:10BFA00004B2DCAF58423557DA86F4873D7635CA9D +:10BFB0005CDB42A643CF1AC210F471903AD109500B +:10BFC0007A83ABE594AAE6A93A267BC412A06F480F +:10BFD00047BEA7A3A3B893C4368FD9A590A6CF58C0 +:10BFE000ED24F98D1B21B36CBF1DC7F75BAF8D34FA +:10BFF000B5E6007AAFE538EC04B20F76CA61AC0260 +:10C0000013C4412B7EBEEC9ADF14D9DA17D4481E34 +:10C01000B49DE4403E657016F3980F2B3481CC2814 +:10C02000FA198CF5A8278CF1723E6792079F2802B7 +:10C030007B1B5A2B378260221E961E02402D575AB8 +:10C04000C09A909A48EB5BC6E8BFC59ED02CFAD444 +:10C0500006E1012115C740C2D1A6E5A616DC360FC0 +:10C06000F0F404D43B3DFFF31734D12366FC0C14E9 +:10C070008FCB0AA2C0CCDEE47EB60073DA40FDE2CC +:10C08000E6EC0376B61F8468798BB277A73BE1674D +:10C090002EE05B5AA6D1F342D0F2DD99149AF674E1 +:10C0A00085FD263A103E60F16600FBF8F2FC84162E +:10C0B0002287923C9CE37212A18988DD62E83A866D +:10C0C000F5BCEE314EB374B4BEB6108DC8671CB863 +:10C0D000A8BE26A744FB912B48E6F98C0A3A5EA33A +:10C0E00041D29307127A1434E5B2F63DEAA37ED228 +:10C0F000081630E3C5970C19F518DF12F37F2352A9 +:10C100000353F718CD28BA5943FFF724E370A0046E +:10C1100077B92512AC940C6D6EA7526BF22DD6AF89 +:10C1200079361281A6BDD8B31A07CEE468713E777E +:10C13000A19FDDACE1A456CE95C295B185082F0D27 +:10C140005CB9A4687DD5B0E9CAADD987F5E69C96FF +:10C15000DE426821801722E91D1D6BF0279F1D40DC +:10C16000A1B9B533C983D1842CE5EFFE66117CE714 +:10C170006449A53B78606D0E0EEEA3514668DA0562 +:10C1800013CF54C9A4E5E25F0EA4F9BFE43B9218B3 +:10C19000FC2131BE7FF72B58244ABAA47000E2225A +:10C1A000B191BB3ACE36A40F6C5A76C7640ADA8EC8 +:10C1B000A8E090E3F1672D5F0721C9E9D93A8A2801 +:10C1C000C4F47652C7CB2034637049E6731E94EFF3 +:10C1D000EE15CD5F469AE2349EB976AEF24737B699 +:10C1E000A2EAB707FD784567FFF7D8C2D4B3A967BD +:10C1F0000134FC886238A2784927302198DF501139 +:10C20000F5994D950BAA5DA4A19CF7396609F7BC79 +:10C2100078CB3BF0F312917EDA6DCD700D7230E782 +:10C220000E4511562CAAF8732014268F663A352E27 +:10C23000284B8E9687D7294385EA4A1488F7C69FEC +:10C240001B3F3D2050EE6CC1AB33BF939CAE065FED +:10C250006EC569B98530C14A1832D785D7B119285A +:10C2600006CB4F02135641140937649C828C821806 +:10C270005CA792C852AE6A2F192B32B8E5974FF6D9 +:10C28000D0ADC12509A0E7DF99B80A5102C0B7FFB8 +:10C2900078E844198122B20A593FBED7F15BA40B5A +:10C2A000EFC1DB1FC6486BE4C374F4A47590ADC442 +:10C2B000B8932010450CCFF3D64334B35930E7E29E +:10C2C000B0C9F5536E3E34F453F9E5D8C79CD9FF95 +:10C2D000753C02EDB8CD9BF680C824F8FAEE223A00 +:10C2E00067DDDDDC13668F4DF51B616C7728FE047E +:10C2F000B5E3422D29DAF3FB4AC96F0B530E29D25D +:10C300004DE9D057A9521B231E28BEFD6081F1952F +:10C310001CFAE198F261A8812E7F45324AFDE7427E +:10C32000B09417C86912068FD1AC888F9355CBE8AB +:10C330005D847B34913E0EF6E7B525F65622FC2946 +:10C34000AA2CB22C7D64F815550BB4C441AD8106FE +:10C350000C82290FCF6708CFDF9675CC416D8CC159 +:10C36000BC41445D98E04C81306626EE0E9AEDB6F5 +:10C370003334194C152C5DC0D1D601021AC0340ECD +:10C38000FFD25AF073D03144A517409AB4AE6489F5 +:10C39000EE114CBC30065DD0593813DC9E8C094937 +:10C3A0002B7255DD487B07E245C184223B4B0BA530 +:10C3B000AD60CE146BC1D02F783EF818A01266CEB7 +:10C3C000331DEEDF7B5ABCD219F4DA554C8CD8DB26 +:10C3D000CDE9A3C4B849AE67D17723ED3C0B7850C3 +:10C3E00067AB8FFCEFE91492805F7E177DD8A1F6D2 +:10C3F00012570EEDC5A42C4108F1BE1C97E924D8B4 +:10C40000C7C157912A8D619C9F05996F7C00CD6BA8 +:10C410001B52A41046DA877457AAA39B56C5E7336C +:10C4200046574858F89B1FDBDF82ECC062A383723B +:10C43000D1F4488746E5852542A3C9AB35A64DCD45 +:10C440003E99AAB2FCA8D9A4E8FC277AC2578F4823 +:10C45000459E754B42132F024FAFC1394D8D9864E5 +:10C46000CEDA0EFC4ABA2AC886168B78948E53050B +:10C47000452B97973B29D38126218C95685BC75F15 +:10C480008F193D0824EE61E5CCA2B05D79A020377C +:10C49000BF36301FC7922B6215026E6934A493CF4A +:10C4A00000F0EC6ABD45BAB4A02BDC34AECB65BF5E +:10C4B0009616AD024031E4C9B5C0ACD6EB1AA870EF +:10C4C0000F6C267B7CC354C6FEE63635F8AB196785 +:10C4D000B031C03B19C2A0C68CE66C0D4F59CDA03F +:10C4E000E58015720BD646F589FD3CCAC8C18A1E87 +:10C4F000E751733EBAE17DDC1FE98C0D9203F00732 +:10C50000F260E4763CF23203BF22D10FA1F537226C +:10C5100023F09D402A81C23F74300D10E0DACD44F3 +:10C52000738EFD35D24A0139108BF81F2E7B8F1880 +:10C53000A1579957B01C77F8E528336D644446BD80 +:10C54000E6F1BC2D0A9A77A142764C6F7BE88F39D1 +:10C55000FE5352C0545BF047234FEF81FA2710D1AE +:10C56000DE36B99A599E70D7F4358D7B3F5E6BD31A +:10C57000E13F5B24B7284B433F3CED2C40A2DD3329 +:10C580001CF775DA1B95D46410C43EB2FB9BDDD258 +:10C5900081FABF72BE2B15C48605C0B3E42FB1D497 +:10C5A0004F954C8E1DFBAB23C31D1294502BFDBA2F +:10C5B000B39025FAD5176C2558D383FAB59376DC5A +:10C5C000D9FF95A83D84E8D4A32543ECDCA0AB3E7D +:10C5D000B9AAFAD154A80E2E668ED27DCBBAFA949F +:10C5E000CBC37A675A2149B129391F521C738D9DDB +:10C5F000F82210C7865D07752A651D1845A6AD6A25 +:10C60000DB6C0BD75705DCDA67E25DEAC8B5FA26C2 +:10C6100008D06E057576718F9901BD9C3FF5434C2E +:10C620007947F42E6A2B86513FE5CCFA4E67340DDC +:10C63000A5783B89C9C101A9574BFC1ADBBF9216EB +:10C64000EFA5941AA9F52F7D421CBAFD1A46CFE436 +:10C65000893D8E1E667B03145010A39957E9D74C71 +:10C66000BD36AD714A14F89775CECABF626CCB2A3D +:10C67000BDDF002C8BC246CE65542B03215B56F8E0 +:10C680004F75F8B22E4FB3F7CD8A6F4C3351C79C1C +:10C6900076323E1209205E160E46C297BFBB67C2B5 +:10C6A0004B58ADEBA9FE35672E4DB077F4F2D2C5ED +:10C6B00057BF14239A966BDBA68F9E61380CC486F5 +:10C6C0007E0EB644F9A10218627FB363444E80180F +:10C6D0009367C83E4424800509310577E00826B3F6 +:10C6E00044E07BA7CFA79777EE914F5BC05FCDEE7D +:10C6F00019183BF5D617759BBFCFD07E0A6CEA237D +:10C70000193F789FECC82AB5511BC5745795524AFA +:10C71000541A98FE66D8B52D0947AC49BC06BB9F94 +:10C7200083513501951B98FF53A3DBDBCF74CA8F70 +:10C73000B38BF2960DE787CED8511378E4F1A0546D +:10C740008A1385EB41F39AB7F068352B5FF22DF72A +:10C7500061D7BBAAABFA9798E839D67627672CF24F +:10C76000B4F69E77CEE963BA0439C5C54860DEEDFC +:10C77000E710EA918951FA17FACAE1FE1C0C24C8A5 +:10C78000B32E420F1DEFD87DDC7FB38BD8DD2C6339 +:10C790007D98CCAD95B8B50826894D0D284D41FB47 +:10C7A00061108F8F34BFE2E55AFDDEC4C9205C3AC8 +:10C7B000359440C85BE15875CAF4D79F40BB3D0D26 +:10C7C000EBEFA0ED40BCC8B492630265BFED778C7F +:10C7D000B70A591927116D88537C047109E2663133 +:10C7E00070618474C375893B8F3A72549AE49EC415 +:10C7F00053735F2049B6E85278E438E41EF469B216 +:10C80000BDF4AF3752789B9620A755CFBFEE29C510 +:10C810003C160EECDDCC527F2CE8E14203459B91A7 +:10C82000FB9CF943683BCF510A928D2EDFAC1AD6A0 +:10C8300059FBA4D79B416240E0CA36B7BC10FFA0A9 +:10C840000BBF3371E91781101B6224836EBF69B57A +:10C85000B6A39E9D7E0E18A0E60201056813D11FA7 +:10C86000EC911EFE6407A3CC6622B6081D095A8906 +:10C87000D589DF8B7FCCBF0F607D1C8E722730FD8A +:10C88000689F1488E25493BF8007ADAC5AD5AC5072 +:10C8900040E7ED72B06D7EF22D04385A8F47457C2B +:10C8A000C7F293543BBE8D7359B8CEFA4C67182A21 +:10C8B0005F5CD99BC7F641B9984BE6A576F5B951AF +:10C8C0009BC819510C180A7E3F64996811E685C708 +:10C8D00031C4CA49E5976BB9AC85594F8DD4E43260 +:10C8E000FF67E4144FA7FCF39966CC2EAD67A43E16 +:10C8F00055A55360A70E375104B893E75020343044 +:10C90000E31660EA92ABA5E732F0A61B43EF7D2069 +:10C9100050C8731717C1FFDBF8E78C0E43EBCF81CC +:10C92000C15DB21F54522653D2A75481FCF88BAF7D +:10C9300012F85B30A1BD43783AC9D68CBE2A98A7BD +:10C94000736DC56C2A92D2A16AC5E96900519DD167 +:10C9500065E0EDFE6C5907E292012B49FB1AFDFFE1 +:10C96000B793B1D1FEE27D262228C162DC9F6E4AD8 +:10C97000AD5A4A83485D0838429929E056CD41B7FF +:10C98000E512B37739752FDE0418F2CDA3032779AA +:10C99000B41C0CE0E06847A1F22423C7407FCBE53C +:10C9A0007BAB5D0CD5A04F1055A534A73071408DE1 +:10C9B000DB40153E093C1D958E88E6DE5A2597A082 +:10C9C0001FE50E7C7BBEB60F88B41F9B937EDFAE47 +:10C9D00001BE13D2C73B0FAE994B21981B5350D8C1 +:10C9E0001412CE65A09B9A993B7A902C77A29185E0 +:10C9F000C9081948EF4D6C387C0A81A05B6A0EBAF1 +:10CA00007CE496506E0B31495F1D4001FBD75B4DB6 +:10CA100083664E4D89FB5D3A06A27AF30E7184AAB5 +:10CA20004F8B224B1C524D97778135E259643198D8 +:10CA3000ABEEDDCA43389E0053B6F03040924B480F +:10CA40008FE2675A1B34D73488866876E3AF777FE6 +:10CA5000E29351140B03F73170B01C50AE06044141 +:10CA60009446CE8F31B919D63B368C81BE115430E5 +:10CA70005B6CCAA18E874BCCE677C0D86914D428EA +:10CA8000C97193AA7B3E44A7079F61DE06C1B63BEE +:10CA9000D00B7D87164735E338515C323A5358EB5B +:10CAA0000B049839434A6E9CBDD10634BC5453F5EF +:10CAB000A48FF9C3513259EA63485D02486487CDB7 +:10CAC00017FF3312A16BB9A3F8927E07BA2EE5D8EF +:10CAD00080274A984DC0344BB213DEB4B21456DAF4 +:10CAE000EABB19D574A6AA5F0F2A15907A2C2F7469 +:10CAF00081FC884B506A498306587B2B48110407F8 +:10CB000086842B8DAE9471C946883FCF0601B2A4AE +:10CB1000E6ACF431A2289EF93C670F6C9B27A2710A +:10CB200029B17AC26AB582684735EF71235002DABB +:10CB3000A6F4BA63E2D05C5D81A2B97FE88A2A6478 +:10CB4000894C8BD9C13530B2F9025CE50C76E48AA8 +:10CB500084223A80308DD32EA5B179DD0F1B9790BA +:10CB6000584F11F9A2F621D8F259741A40E1820CFB +:10CB7000305E4B40991846531AFB9808E50AAED42C +:10CB8000639CDA26DE4F67DF8B696776DBCFF26660 +:10CB90009C7F321D8CA4C7CE16BCDE84B8E9F79FFB +:10CBA000935B1731C71CF8D66710D7493017B76B9E +:10CBB00049124AF4F1EA73BDDC83EE59575B3B87B7 +:10CBC00035197767EA6F3EAAC24FAA0EFE3A5ECBCE +:10CBD0001F316B7D9277220AC3981197BDD4784498 +:10CBE00026EFD721C4E2F9DF30C1647D7B240476CF +:10CBF000D832B70252C387E07CDE5D0CE827B093E1 +:10CC00009A3793255518A63740E7BA4DD93DF720F6 +:10CC10001950D3B2365E45A77B6308D1796AA64125 +:10CC2000F6BBDCBB6BA7A1737D5640DED7ACEEC76D +:10CC300028242A58A5A41BC098302F264FBFFDCA10 +:10CC40009272C0BE5299ECF9A42D8AEAB8E8D923B1 +:10CC50006DD7668714D3E9BCCDD2D80461BFD34B5E +:10CC6000CB5B984BC5BF750EE101CAA47C5E95AE47 +:10CC70006D1A3E8A851882D202942BAF9CA58CB285 +:10CC8000D09304C6ABD61C17899CF5679D918FE4A1 +:10CC90008EE1CE8AB294C0C3919B8A6385A06BC893 +:10CCA000B9A81102A71804BC9612E55372F59A456B +:10CCB000DD9FABEDB7746E696E1ED998DEE035C9A5 +:10CCC000A1005C986128D8C292A5D8BE9743A22241 +:10CCD0000226704E81ACF46DC4013B9407B31190F1 +:10CCE00029649175AD62F7640193FAB20D37853C02 +:10CCF000556C9AACE03A56B7C8DA42486F2A1032FF +:10CD000031AF975B496941665C56640E1FA440EDE4 +:10CD10004617990FAF78BFBDFE71FF42AD9CFE452F +:10CD2000763DD7DFB440C5478C82E607AC0E9DF850 +:10CD3000CED1E396EC72F4C51BE840F2A01CDC49AE +:10CD4000178F606FA34FC4CF24F53DA7AF30DB2E04 +:10CD50009C0216D360AAE685EB67824A0905D0914A +:10CD600054821D3392E9F9B0E58EDD1B660A026834 +:10CD7000E9411D33B1D970E1A54E5F251AAEDF53ED +:10CD8000A9D5A2E0388A1398BC2220DBFD417D3270 +:10CD9000CDC48604927E0FC19D761ECC52F96510DB +:10CDA000E20F984C6DA3DF84B24D9FE4634CD20335 +:10CDB00032AEAD1848335B08A7F0D5C12BFA33B1BA +:10CDC000AD4725B875A7E8D94362AB3B3E736EE922 +:10CDD00070FF8EE02C042FD513C791CB12DD726546 +:10CDE000A59A9FAD43AB6F0E4D759C3ACCA81C1E07 +:10CDF00068805F3A369BA6EFFB0076CEF8AC1AE16E +:10CE000051C076DB71866C770A636196E9A0211ABE +:10CE100055A10A630518A879FD81CD6BF9607930B9 +:10CE20000AB99FBFCCFAC18F74133361068B393BAB +:10CE3000D8E72F38CD2B2205B5B9AA4AC4CB98988C +:10CE4000E7788EB679EF6EBD1B750786B122116C3F +:10CE5000EF7783ADC2BE461C2F5819D62A1B9D4FB3 +:10CE6000AA8359EF33DF47E29597B0DC682FB76D9F +:10CE7000DF9271383DA28E33D54C0FFBAB76ECFEC2 +:10CE8000128517A406396196C42AD52D6697E162EA +:10CE90001AE434F5AE557C9885A0CBA6D689B58723 +:10CEA0000D5F12FCB5DC2C56E00E0C5319AC78CAA1 +:10CEB0003C87E6D691283325BE149B863A36328BC2 +:10CEC000B19BF48BC939B141C7BBF672943B81F376 +:10CED00053946253CF0A6B5466AD9CD98BE56FB205 +:10CEE0005CF4CFA3068F94B4EAEA3A083BA045E489 +:10CEF000FA8F80C13FE47BC6EA4FE02994484E3761 +:10CF0000DF9200F2E1C11514CBDA8D2376323B6358 +:10CF10008A7C1033A15D70CE65041EDA1CBC7D785E +:10CF2000C663ED55C005F06B6F6227F7F42DF2BDB7 +:10CF300016DB9B10779204C18DCBE8C1D83C502EF4 +:10CF4000B5AD6C246581BF003EFFC82AD8A9AE17D5 +:10CF50004E0EB5DBC61FD8369C79A7133D273CEF94 +:10CF6000BF884820D00FF2782D93838ADACA36F131 +:10CF7000CF95DC0C1E3E222734B711EC0F19E3B01D +:10CF800008BC3DF5CE1CFADB0A497B2CEEF8DC919F +:10CF9000F793F65389C0E1F19296E4D7DAC16C0AAF +:10CFA000CF7BC13ED421551425A80505F64056AEC9 +:10CFB000BB84D244AF4C3272C0E17BA614AF960260 +:10CFC000B5C7FC17C0B83D0492642F6678EFAAFF7E +:10CFD0007FF45790BE224AD32DD59ECF5EE11252E8 +:10CFE000E9EE8473DC63F7EF4B923723CD8707B408 +:10CFF00075CA77CCAAEF1A7BE4704038C2402A1376 +:10D00000C9A1E7B411675C5A7789C0C7F114445FBE +:10D01000DCEBE4D3A12A0B0DFF6F3711007E035C1C +:10D02000B4BE11C9E0D2F8B72F16EA333BDF22BBFA +:10D030000F22385131C20D899E9A5744602EB6E1B5 +:10D04000E9B4740C841898242467E8EDBCAD912DE4 +:10D050004574FE982221C1A01F0B932801B6B11E72 +:10D060009028CE92F127E4EB8DF47598BCCEF79220 +:10D070009BCB4BBAB0B1BB1510DF1FA29166462DFA +:10D08000677B9253789D69FD80AB81FDD62DE3B916 +:10D09000A85BC55AE7635001C21B6A909E5AF317FA +:10D0A00023919C662F8F5107B6E15B14777D948B9B +:10D0B0002FA1500FA84585B94513E675A75A3B1C0B +:10D0C000D3E5B474541DE37AE5F35264325C414510 +:10D0D0000C4C8167B68DB0073DE358F728DBB819D3 +:10D0E0002731530A91FFA08F7DFBA345D10E4E5EE1 +:10D0F000EE125D1B531010715197A62F14D3412FC0 +:10D100001441101000270119320E0A37047F0790CE +:10D110003A903A000000001E121E05BD0D33032692 +:10D1200032FE2CFFA8DEA8DE4616055A0036121C79 +:10D1300030080A1AAE07CC00CC4C460046000080EE +:10D1400001012626808000000680060C0F013612A1 +:10D1500001281982644064454500402F2B0064007B +:10D160006400D30357071E320001010001010A00C9 +:10D1700000006400D30364001B0740000100FF149B +:10D180000FE60FE6FFE6FFE6FFE6FFE6FFE6FF1429 +:10D190000AF00AF0FFF0FFF0FFF0FFF0FFF0FF00F1 +:10D1A000000000000000000000000000000000007F +:10D1B00009091414D214D296D296D296D296D29647 +:10D1C000D296140FE60FE696E696E696E696E69673 +:10D1D000E696011C46010A00F401031B0000FF61F2 +:10D1E0000D7A0DBD64D00700100A00000000000099 +:10D1F0000E000000FFFF353500000000000001D0E8 +:10D2000007FFFF06060F0000D0070103000E000E07 +:10D2100000000800000000000E000E0000230000C7 +:10D220000000000E000E0000410000000080000021 +:10D23000000000000000000080000000000000006E +:10D2400000000080000000000000000000008218C4 +:10D25000001800000F0000000082170017000028CF +:10D260000000000082180018000028000000008064 +:10D27000000000000000000000008000000000002E +:10D28000000000000080000000000000000000001E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000000000000000000000006E +:10D2C000000000000000000000000000000000005E +:10D2D000B40018023C001464021B0F00FF0F094B3E +:10D2E0000010B000B0001C1F4000000D0F0F04081C +:10D2F0000002030405060708090A0B0C0D0E0F10A7 +:10D300001112131415161718191A1B1C1D1E1FFFB6 +:10D31000FF000102030405060708001000100010BA +:10D3200000108080808080808080808080808080ED +:10D3300080808080808080808080808080808080ED +:10D3400080800010001000100010019900010203FD +:10D35000040506070882030302200120FFFFFFFFE8 +:10D36000515144449AFF0407050000020200000ADC +:10D370000A0A1E0801643C6E01CD2313461CC80135 +:10D3800048320000000030300008281E120A640CE9 +:10D390003C3C0050200173808001C800FA00041852 +:10D3A000963C1E000000000000000000000000008D +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D4300000000000000000000000000000000000EC +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA +:10D6400000000000000000000000000000000000DA +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A +:10D6C000000000000000000000000000000000005A +:10D6D000000000000000000000000000000000004A +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D710000000000000000000000000000000000009 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000000000000000C9 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000000000000C3 +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000000A3 +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD0000000000000000000000000000000000043 +:10DDE0000000000000000000000000000000000033 +:10DDF0000000000000000000000000000000000023 +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 +:10DF600000000000000000000000000000000000B1 +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 +:10DFE0000000000000000000000000000000000031 +:10DFF0000000000000000000000000000000000021 +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F000000000000000000000000000FC9922DE8B +:10E10000010100010100000000000000000000000B +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF +:10E17000000000000000000000000000000000009F +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F +:10E20000000000000000000000FFFFFFFF003F03D0 +:10E210001E060E1E371E1401824700010105640010 +:10E2200001FF1414001414010056A700B07001017E +:10E230000101E001000000000000000054443433FC +:10E2400032325F433800A9030F00030000000203CD +:10E250000000000000000000002500000000000099 +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000004F0014DB +:10E2E00006011231280D0401012900090021340022 +:10E2F000000000000000000000000000000000001E +:10E3000000000000000000000000000000000026E7 +:10E3100002031B0000FF9105AA05FFFFD0070010B4 +:10E320000A0000000000000E000000FFFF3535006D +:10E3300000000000000106D0010000B402A61B4B43 +:10E34000B01C1F000D0F0400201244701702003A89 +:10E3500000047044C841E8FB0C0C844C1680078014 +:10E36000A0881080808080808080868080828080ED +:10E3700080A0A0802000000000000000000000003D +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E00000000000000000000048470E000154003B +:10E3F000000000000000000000000000000000001D +:10E4000000000200008000010082030302200120BE +:10E41000FFFFFFFF515143439AFF04080200200908 +:10E42000878180808080C00393FF00060000000089 +:10E4300000000000000000000000000000000000DC +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000000000000000000AC +:10E47000000000000000000000000000000000009C +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E00000000028000900011A1E1D01000155004E +:10E4F000000000000000000000000000000000001C +:10E50000000A0A0A1E0801643C6E01CD2313461C52 +:10E51000C80148320000000030300008281E120AEE +:10E52000640C3C3C0050200173808001C800FA005C +:10E530000418783C1E0801340000020000000000AE +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E0000000000000000000003500010040510064 +:10E5F000000000000000000000000000000000001B +:10E60000D76F173E00100000010101100000920DAD +:10E6100000000000C8040204C80402040000000056 +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000C80402040000000000000000E8 +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA10000102EDE00000F7E00000F8E00000F9E09E +:10EA20000600FFE000000FE1330010E1DB0011E120 +:10EA3000800012E1120013E1000018E1570019E113 +:10EA40003D001AE119001BE11E001CE10A001DE156 +:10EA500050001EE1500038E16F0039E13D003AE11D +:10EA600028003BE13C003CE114003DE1C8003EE1F0 +:10EA7000C80058E1B50059E133005AE141005BE1BB +:10EA800064005CE123005DE1A0005EE1A00078E1AC +:10EA9000140079E1140088E1370089E1320098E13F +:10EAA000640099E13200A8E10400F0E1000030E2E6 +:10EAB0008C0031E2480032E2000033E2000034E230 +:10EAC000000035E2200036E2080037E2400038E27C +:10EAD000090039E200003AE2C0003BE29A003CE261 +:10EAE00063003DE2CD003EE2B9003FE2C60040E2F5 +:10EAF0005C0041E2630042E2E00043E2050044E2E0 +:10EB0000050045E2400046E2190047E2000048E205 +:10EB1000000049E200004AE210004BE210004CE223 +:10EB200010004DE210004EE210004FE2100050E2E3 +:10EB3000100051E2100052E2400053E2020054E2A1 +:10EB4000020055E2000056E2060057E2000058E2DB +:10EB5000000059E203005AE2C5005BE200005CE2FB +:10EB6000010070E2010071E2F70072E2800073E2DE +:10EB7000040074E2680075E2080076E2090077E2BA +:10EB8000100078E2000079E208007AE230007BE2CF +:10EB900000007CE200007DE200007EE200007FE2F7 +:10EBA000000080E2000081E2200082E2020083E2B5 +:10EBB000260084E2000085E2000086E20000B0E268 +:10EBC0007800B1E25700B2E28500B3E27800B4E227 +:10EBD0005000B5E20000B6E20000B7E20000B8E283 +:10EBE0000000B9E20000BAE20000BBE20300BCE2B0 +:10EBF000B600BDE20000BEE20000BFE20000C0E2DD +:10EC00000300C1E2FC00C2E20000C3E20000C4E273 +:10EC10000100C5E20100C6E20300C7E22800C8E225 +:10EC20000100C9E20100CAE20100CBE20A00CCE225 +:10EC30001000CDE20000CEE22000CFE20000D0E2E2 +:10EC40002000D1E20000D2E22000D3E20000D4E2B2 +:10EC50000000D5E20000D6E20000D7E20000D8E2D2 +:10EC60000000D9E20000DAE20000DBE20000DCE2B2 +:10EC70000000DDE20000DEE20000DFE20000E0E292 +:10EC80003F00E1E20000E2E23F00E3E20000E4E2F4 +:10EC90003F00E5E20000E6E23F00E7E20000E8E2D4 +:10ECA0003F00E9E20000EAE23F00EBE20000ECE2B4 +:10ECB0000000EDE20000F0E27000F1E20000F2E29C +:10ECC0000000F3E20000F4E20000F5E20000F6E2EA +:10ECD0000000F7E20000F8E20000F9E20200FAE2C8 +:10ECE0000800FBE23100FCE20100FDE20000FEE270 +:10ECF0000000FFE2000000E3020001E3010002E384 +:10ED0000010003E3010030E3080031E3000032E3D7 +:10ED1000000033E3000034E3000035E3700036E325 +:10ED2000000070E3650071E3010072E3640073E3C7 +:10ED3000080074E3560075E3010076E30E0077E304 +:10ED4000010078E3020079E301007AE302007BE34B +:10ED500000007CE300007DE300007EE300007FE331 +:10ED6000000080E3000081E3080082E3150083E3F4 +:10ED7000080084E3650085E3000086E3FF0087E385 +:10ED8000650088E3E70089E3E7008AE300008BE39E +:10ED900000008CE300008DE300008EE300008FE3B1 +:10EDA000000090E3000091E3000092E3000093E391 +:10EDB000000094E3000095E3000096E3000097E371 +:10EDC000000098E3000099E300009AE300009BE351 +:10EDD00000009CE300009DE300009EE300009FE331 +:10EDE0000000A0E30000A1E30000A2E30000A3E311 +:10EDF0000000A4E30000A5E30000A6E30000A7E3F1 +:10EE00000000A8E30000A9E30000AAE30000ABE3D0 +:10EE10000000ACE30000ADE30000AEE30000B0E3AF +:10EE20000200B1E32A00B2E33D00B3E35100B4E3D2 +:10EE30006100B5E36D00B6E38500B7E39500B8E384 +:10EE4000A100B9E3AB00BAE35C00BBE36600BCE33E +:10EE50007100BDE38000BEE38800BFE39200C0E321 +:10EE60009E00C1E3A800C2E3B400C3E31200C4E300 +:10EE70003400C5E34500C6E35600C7E36400C8E3B9 +:10EE80006E00C9E38300CAE39000CBE39C00CCE3AF +:10EE9000A600CDE35700CEE36200CFE36F00D0E3DE +:10EEA0008100D1E38900D2E39300D3E39F00D4E350 +:10EEB000A800D5E3B400F0E31100F1E30000F2E3B1 +:10EEC0000100F3E3FD00F4E3FE00F5E3FC00F6E3EC +:10EED0000000F7E30000F8E30100F9E3FE00FAE3C5 +:10EEE000FE00FBE3FC00FCE30000FDE30000FEE3AA +:10EEF0000300FFE3FE0000E4FB0001E4D00002E4B5 +:10EF0000000003E4000004E4000005E4000006E45F +:10EF1000000007E4FC0008E4000009E400000AE443 +:10EF200000000BE400000CE400000DE4FC000EE423 +:10EF300000000FE4000010E4000011E4000012E4FF +:10EF4000000013E4FC0014E4000015E4000016E4E3 +:10EF5000000017E4000018E4000019E4FC001AE4C3 +:10EF600000001BE400001CE400001DE400001EE49F +:10EF700000001FE4FC0020E4000021E4000022E483 +:10EF8000000023E4000024E4000025E4FC0026E463 +:10EF9000000030E4000031E4000032E4000033E41B +:10EFA000000034E4000035E4FC0036E4000037E4FF +:10EFB000000038E4000039E400003AE400003BE4DB +:10EFC000FC003CE400003DE400003EE400003FE4BF +:10EFD000000040E4000041E4FC0042E4000070E472 +:10EFE0001C0071E4FC0072E4FC0073E4FC0074E4B7 +:10EFF000000075E4000076E4000077E4000078E4A7 +:10F00000000079E400007AE400007BE400007CE486 +:10F0100000007DE400007EE400007FE4000080E466 +:10F02000000081E4000082E4000083E4000084E446 +:10F03000000085E4000086E4000087E4000088E426 +:10F04000000089E400008AE400008BE400008CE406 +:10F0500000008DE400008EE400008FE4000090E4E6 +:10F06000000091E4000092E4000093E4000094E4C6 +:10F07000000095E4000096E4000097E4000098E4A6 +:10F08000000099E400009AE40000B0E4B000B1E4AC +:10F09000F300B2E4FF00B3E4CE00B4E40000B5E452 +:10F0A0000000B6E47000B7E4E000B8E40000B9E4A2 +:10F0B0000000BAE40000BBE40000BCE40000BDE4D2 +:10F0C0000200BEE40000BFE40000C0E44000C1E470 +:10F0D0000000C2E40000C3E40000C4E40000C5E492 +:10F0E0000000C6E40000C7E40000C8E40000C9E472 +:10F0F0000000CAE40000F0E4060030E5000031E55D +:10F10000000032E53F0033E5C00034E53F0035E55F +:10F11000C00036E53F0037E5000038E5390039E545 +:10F1200039003AE534003BE534003CE5F0003DE5CC +:10F13000F0003EE5F0003FE5F00040E5010041E56C +:10F14000000042E5000043E5000044E5000045E51D +:10F15000000046E5000047E5000048E5000049E5FD +:10F1600000004AE500004BE500004CE500004DE5DD +:10F1700000004EE500004FE5000050E5000051E5BD +:10F18000000052E5000053E5000054E5000055E59D +:10F19000AD0070E55D0071E5400072E5490073E582 +:10F1A000530074E5590075E55E0076E5630077E588 +:10F1B000680078E56E0079E574007AE57E007BE50D +:10F1C0008A007CE598007DE5A8007EE5BB007FE530 +:10F1D000D00080E5FF0081E5040082E5000083E5C2 +:10F1E000040084E5040085E5420086E5000087E52B +:10F1F000690088E55A00B0E54800B1E51D00F0E57A +:10F200003300F1E55A00F2E5C900F3E53100F4E519 +:10F210000100F5E51000F6E51000F7E51000F8E54F +:10F220001900F9E51900FAE50000FBE50000FCE52E +:10F230000000FDE50000FEE50000FFE5000000E63F +:10F24000000030E60000B0E61B00B1E63B00B2E68D +:10F25000BB00B3E67700B4E67700B5E67700B6E624 +:10F26000BB00B7E6B300B8E63300B9E60000BAE683 +:10F270000000BBE66F00BCE66000BDE6E100BEE654 +:10F28000E100BFE63300C0E6BB00C1E6F200C2E623 +:10F29000FD00C3E6C600C4E60B00C5E60700F0E6C5 +:10F2A0000000F1E60000F2E60000F3E60000F4E6FC +:10F2B0000000F5E60000F6E6000030E7030031E765 +:10F2C000000032E70000B0E7F600B1E7FF00B2E768 +:10F2D0000300B3E70500B4E74100B5E72400B6E753 +:10F2E0008000B7E71F00B8E7C700B9E71F00BAE71B +:10F2F0001B00BBE70000BCE70C00BDE70700BEE752 +:10F300002000BFE70000C0E70000C1E70000C2E73F +:10F310000000C3E70000C4E70C00C5E7F000C6E743 +:10F320001F00C7E70000C8E70C00C9E70000CAE7F4 +:10F330000000CBE7AA00CCE76700CDE77E00CEE770 +:10F340005D00CFE70600D0E7000030E8200031E89C +:10F35000400073E8300074E8060075E8230076E8A2 +:10F36000650093E8000094E83F0095E8FF0096E808 +:10F370005000B3EA0000B4EA0000B5EA0000B6EAC3 +:10F380004600B7EA610073EB0F0073EC410074ECC8 +:10F39000510075EC000033ED000034ED0000EDE0AD +:10F3A000030000000000000000000000000000005A +:10F3B000000000000000000000000000000000004D +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC +:10F4300000000000000000000000000000000000CC +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B000000000000000000000000000000000004C +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F5300000000000000000000000000000000000CB +:10F5400000000000000000000000000000000000BB +:10F5500000000000000000000000000000000000AB +:10F56000000000000000000000000000000000009B +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:00000001FF diff --git a/include/linux/input/synaptics_dsx.h b/include/linux/input/synaptics_dsx.h index 56fe12edc11b..cb3fe2274674 100644 --- a/include/linux/input/synaptics_dsx.h +++ b/include/linux/input/synaptics_dsx.h @@ -42,6 +42,79 @@ #define I2C_DRIVER_NAME "synaptics_dsx_i2c" #define SPI_DRIVER_NAME "synaptics_dsx_spi" +#ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FORCE +#define PLATFORM_DRIVER_FORCE "synaptics_force" +#define I2C_DRIVER_FORCE "synaptics_dsx_force" +#define CONFIG_SYNAPTICS_TOUCH_COUNT_DUMP + +struct synaptics_dsx_panel_power_seq { + int disp_pre_on_sleep; + int disp_post_on_sleep; + int disp_pre_off_sleep; + int disp_post_off_sleep; + int lab_pre_on_sleep; + int lab_post_on_sleep; + int lab_pre_off_sleep; + int lab_post_off_sleep; + int ibb_pre_on_sleep; + int ibb_post_on_sleep; + int ibb_pre_off_sleep; + int ibb_post_off_sleep; +}; + +struct synaptics_dsx_factory_param { + union { + struct { + int tddi_short_limit_b; + int tddi_noise_limit; + + int tddi_extend_ee_short_reset_dur; + int tddi_extend_ee_short_int_dur; + int tddi_extend_ee_short_tx_on_count; + int tddi_extend_ee_short_rx_on_count; + int tddi_extend_ee_short_test_limit_part1; + int tddi_extend_ee_short_test_limit_part2; + + int tddi_open_test_int_dur_one; + int tddi_open_test_int_dur_two; + int tddi_open_test_limit_phase2_lower; + + int tddi_b7_open_test_int_dur_one; + int tddi_b7_open_test_int_dur_two; + int tddi_b7_open_test_limit_phase2_lower; + int tddi_b7_open_test_limit_phase2_upper; + + int button_count; + int abs_0d_open_factor; + int abs_0d_open_test_limit; + } __packed; + unsigned int data[18]; + }; +}; + +struct synaptics_dsx_config_info { + int chip_id; + bool chip_is_tddi; + bool open_test_b7; + bool short_test_extend; + bool is_factory_param; + const char *chip_id_name; + unsigned char *tp_ids; + const char *fw_name; +#ifdef CONFIG_SYNAPTICS_TOUCH_COUNT_DUMP + const char *clicknum_file_name; +#endif + struct synaptics_dsx_panel_power_seq panel_power_seq; + struct synaptics_dsx_factory_param *factory_param; +}; + +enum synaptics_dsx_lockdown_area { + LOCKDOWN_AREA_PRODUCT_ID = 0, + LOCKDOWN_AREA_GUEST_SERIALIZATION = 1, + LOCKDOWN_AREA_UNKNOWN = 0xFF, +}; +#endif + /* * struct synaptics_dsx_button_map - button map * @nbuttons: number of buttons @@ -77,6 +150,9 @@ struct synaptics_dsx_button_map { * @block_delay_us: delay time between two SPI transfers * @addr_delay_us: delay time after sending address word * @pwr_reg_name: pointer to name of regulator for power control + * @lab_reg_name: pointer to name of regulator for LCD lab control + * @ibb_reg_name: pointer to name of regulator for LCD ibb control + * @disp_reg_name: pointer to name of regulator for LCD vddio control * @bus_reg_name: pointer to name of regulator for bus pullup control * @cap_button_map: pointer to 0D button map * @vir_button_map: pointer to virtual button map @@ -103,11 +179,36 @@ struct synaptics_dsx_board_data { unsigned int reset_active_ms; unsigned int byte_delay_us; unsigned int block_delay_us; - unsigned int addr_delay_us; const char *pwr_reg_name; const char *bus_reg_name; struct synaptics_dsx_button_map *cap_button_map; struct synaptics_dsx_button_map *vir_button_map; +#ifndef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FORCE + unsigned int addr_delay_us; +#else + int mdss_reset; + int mdss_reset_state; + int config_array_size; + int tp_id_num; + unsigned char *tp_id_bytes; + bool cut_off_power; + bool power_ctrl; + bool panel_is_incell; + const char *lab_reg_name; + const char *ibb_reg_name; + const char *disp_reg_name; + const char *power_gpio_name; + const char *reset_gpio_name; + const char *irq_gpio_name; + const char *backup_fw_name; + const char *short_test25; + const char *short_test26; + struct synaptics_dsx_config_info *config_array; + enum synaptics_dsx_lockdown_area lockdown_area; +#ifdef CONFIG_SYNAPTICS_TOUCH_COUNT_DUMP + bool dump_click_count; +#endif +#endif }; #endif |