From dd2672af6f1a04cfb1b82653ed617af0a838d4c4 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Mon, 30 May 2016 20:18:27 +0900 Subject: [PATCH 01/16] sensor-hal-emul: add udev rules for sensor device node - update permission/smack rules Change-Id: I5ef165c6c75eeb05bebd87548499b63143622567 Signed-off-by: kibak.yoon --- packaging/99-sensor.rules | 13 +++++++++++++ packaging/sensor-hal-emul.spec | 6 ++++++ 2 files changed, 19 insertions(+) create mode 100644 packaging/99-sensor.rules diff --git a/packaging/99-sensor.rules b/packaging/99-sensor.rules new file mode 100644 index 0000000..3d07132 --- /dev/null +++ b/packaging/99-sensor.rules @@ -0,0 +1,13 @@ +SUBSYSTEM!="input", GOTO="sensor_rules_end" +ENV{ID_INPUT_TOUCHPAD}=="1", GOTO="sensor_rules_end" +ENV{ID_INPUT_TOUCHSCREEN}=="1", GOTO="sensor_rules_end" +ENV{ID_INPUT_KEY}=="1", GOTO="sensor_rules_end" +ENV{ID_INPUT_KEYPAD}=="1", GOTO="sensor_rules_end" +ENV{ID_INPUT_KEYBOARD}=="1", GOTO="sensor_rules_end" +ENV{ID_INPUT_MOUSE}=="1", GOTO="sensor_rules_end" +ENV{ID_INPUT_JOYSTICK}=="1", GOTO="sensor_rules_end" + +SUBSYSTEM=="input", ACTION=="add", RUN+="/bin/chown sensor:input %S/%p/enable %S/%p/poll_delay" +SUBSYSTEM=="input", ACTION=="add", RUN+="/bin/chsmack -a * %S/%p/enable %S/%p/poll_delay" + +LABEL="sensor_rules_end" diff --git a/packaging/sensor-hal-emul.spec b/packaging/sensor-hal-emul.spec index 93552a7..fce0681 100644 --- a/packaging/sensor-hal-emul.spec +++ b/packaging/sensor-hal-emul.spec @@ -5,6 +5,7 @@ Release: 0 Group: Service/Sensor License: Apache-2.0 Source0: %{name}-%{version}.tar.gz +Source1: 99-sensor.rules ExcludeArch: %{arm} aarch64 @@ -34,6 +35,10 @@ make %{?jobs:-j%jobs} rm -rf %{buildroot} %make_install +mkdir -p %{buildroot}%{_libdir}/udev/rules.d + +install -m 0644 %SOURCE1 %{buildroot}%{_libdir}/udev/rules.d + %post /sbin/ldconfig @@ -43,5 +48,6 @@ rm -rf %{buildroot} %files %attr(0644,root,root)/usr/etc/sensor.xml %manifest packaging/%{name}.manifest +%{_libdir}/udev/rules.d/99-sensor.rules %{_libdir}/sensor/*.so %{_datadir}/license/sensor-hal-emul -- 2.7.4 From d7fab82ff15f1a70f032aa436787c3a99d0fa2ee Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Fri, 17 Jun 2016 09:52:04 +0900 Subject: [PATCH 02/16] Rename the rpm to sensor-hal-emulator Change-Id: I371825541c708c24c584b5b63751d3a27cd2d6ba Signed-off-by: Mu-Woong Lee --- CMakeLists.txt | 2 +- packaging/{sensor-hal-emul.manifest => sensor-hal-emulator.manifest} | 0 packaging/{sensor-hal-emul.spec => sensor-hal-emulator.spec} | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) rename packaging/{sensor-hal-emul.manifest => sensor-hal-emulator.manifest} (100%) rename packaging/{sensor-hal-emul.spec => sensor-hal-emulator.spec} (94%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d31095..c460f9e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) -PROJECT(sensor-hal-emul CXX) +PROJECT(sensor-hal-emulator CXX) INCLUDE(GNUInstallDirs) SET(ACCEL "ON") diff --git a/packaging/sensor-hal-emul.manifest b/packaging/sensor-hal-emulator.manifest similarity index 100% rename from packaging/sensor-hal-emul.manifest rename to packaging/sensor-hal-emulator.manifest diff --git a/packaging/sensor-hal-emul.spec b/packaging/sensor-hal-emulator.spec similarity index 94% rename from packaging/sensor-hal-emul.spec rename to packaging/sensor-hal-emulator.spec index fce0681..b756bd8 100644 --- a/packaging/sensor-hal-emul.spec +++ b/packaging/sensor-hal-emulator.spec @@ -1,4 +1,4 @@ -Name: sensor-hal-emul +Name: sensor-hal-emulator Summary: Emulator Sensor HAL Version: 1.0.0 Release: 0 @@ -50,4 +50,4 @@ install -m 0644 %SOURCE1 %{buildroot}%{_libdir}/udev/rules.d %manifest packaging/%{name}.manifest %{_libdir}/udev/rules.d/99-sensor.rules %{_libdir}/sensor/*.so -%{_datadir}/license/sensor-hal-emul +%{_datadir}/license/sensor-hal-emulator -- 2.7.4 From 3db07aadcc980d820e400a0ff4c42320f3740e8c Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Fri, 17 Jun 2016 09:52:04 +0900 Subject: [PATCH 03/16] Rename the rpm to sensor-hal-emulator Change-Id: I371825541c708c24c584b5b63751d3a27cd2d6ba Signed-off-by: Mu-Woong Lee --- CMakeLists.txt | 2 +- packaging/{sensor-hal-emul.manifest => sensor-hal-emulator.manifest} | 0 packaging/{sensor-hal-emul.spec => sensor-hal-emulator.spec} | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) rename packaging/{sensor-hal-emul.manifest => sensor-hal-emulator.manifest} (100%) rename packaging/{sensor-hal-emul.spec => sensor-hal-emulator.spec} (94%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d31095..c460f9e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) -PROJECT(sensor-hal-emul CXX) +PROJECT(sensor-hal-emulator CXX) INCLUDE(GNUInstallDirs) SET(ACCEL "ON") diff --git a/packaging/sensor-hal-emul.manifest b/packaging/sensor-hal-emulator.manifest similarity index 100% rename from packaging/sensor-hal-emul.manifest rename to packaging/sensor-hal-emulator.manifest diff --git a/packaging/sensor-hal-emul.spec b/packaging/sensor-hal-emulator.spec similarity index 94% rename from packaging/sensor-hal-emul.spec rename to packaging/sensor-hal-emulator.spec index fce0681..b756bd8 100644 --- a/packaging/sensor-hal-emul.spec +++ b/packaging/sensor-hal-emulator.spec @@ -1,4 +1,4 @@ -Name: sensor-hal-emul +Name: sensor-hal-emulator Summary: Emulator Sensor HAL Version: 1.0.0 Release: 0 @@ -50,4 +50,4 @@ install -m 0644 %SOURCE1 %{buildroot}%{_libdir}/udev/rules.d %manifest packaging/%{name}.manifest %{_libdir}/udev/rules.d/99-sensor.rules %{_libdir}/sensor/*.so -%{_datadir}/license/sensor-hal-emul +%{_datadir}/license/sensor-hal-emulator -- 2.7.4 From 074061833a717746017c33ab0574f1b0115dd28b Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 28 Jun 2016 19:00:25 +0900 Subject: [PATCH 04/16] sensor-hal: include missing header files for monotonic timestamp - for using monotonic timestamp, "linux/input.h" has to be included. Change-Id: I21246e7c95a56c5b524c6d17320a9ab67b50e351 Signed-off-by: kibak.yoon --- src/util.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/util.cpp b/src/util.cpp index 8b95cdb..a54149c 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -18,10 +18,12 @@ #include #include #include -#include +#include +#include #include #include #include +#include using std::ifstream; using std::ofstream; -- 2.7.4 From 81bdfef14f843739154c1f8f5473761102f0a08c Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 29 Jun 2016 16:36:46 +0900 Subject: [PATCH 05/16] sensor-hal-emul: remove useless config-related xml file - remove sensor.xml.in - remove useless dependencies - move sensor device configurations from xml to source code directly Change-Id: I6b88f28582d64f4014c0eb46ae00857ecbe5b99e Signed-off-by: kibak.yoon --- CMakeLists.txt | 5 +- packaging/sensor-hal-emulator.spec | 5 - sensor.xml.in | 615 --------------------------- src/accel/accel_device.cpp | 92 +--- src/accel/accel_device.h | 7 - src/create.cpp | 50 --- src/geomag/geomag_device.cpp | 151 +++---- src/geomag/geomag_device.h | 9 - src/gyro/gyro_device.cpp | 129 ++---- src/gyro/gyro_device.h | 7 - src/gyro_uncal/gyro_uncal_device.cpp | 170 +++----- src/gyro_uncal/gyro_uncal_device.h | 9 - src/hrm/hrm_device.cpp | 64 +-- src/hrm/hrm_device.h | 5 - src/hrm_raw/hrm_raw_data_reader.cpp | 47 -- src/hrm_raw/hrm_raw_data_reader.h | 34 -- src/hrm_raw/hrm_raw_data_reader_standard.cpp | 78 ---- src/hrm_raw/hrm_raw_data_reader_standard.h | 29 -- src/hrm_raw/hrm_raw_device.cpp | 308 -------------- src/hrm_raw/hrm_raw_device.h | 69 --- src/light/light_device.cpp | 172 ++------ src/light/light_device.h | 6 - src/pressure/pressure_device.cpp | 131 ++---- src/pressure/pressure_device.h | 11 - src/proxi/proxi_device.cpp | 60 +-- src/proxi/proxi_device.h | 4 - src/sensor_config.cpp | 317 -------------- src/sensor_config.h | 103 ----- src/ultraviolet/uv_device.cpp | 111 ++--- src/ultraviolet/uv_device.h | 9 +- src/util.cpp | 54 --- src/util.h | 1 - 32 files changed, 298 insertions(+), 2564 deletions(-) delete mode 100644 sensor.xml.in delete mode 100644 src/hrm_raw/hrm_raw_data_reader.cpp delete mode 100644 src/hrm_raw/hrm_raw_data_reader.h delete mode 100644 src/hrm_raw/hrm_raw_data_reader_standard.cpp delete mode 100644 src/hrm_raw/hrm_raw_data_reader_standard.h delete mode 100644 src/hrm_raw/hrm_raw_device.cpp delete mode 100644 src/hrm_raw/hrm_raw_device.h delete mode 100644 src/sensor_config.cpp delete mode 100644 src/sensor_config.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c460f9e..81fdd9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,7 +34,7 @@ MESSAGE("FLAGS: ${CMAKE_EXE_LINKER_FLAGS}") #ADD_DEFINITIONS(-Wall -g -D_DEBUG) INCLUDE(FindPkgConfig) -PKG_CHECK_MODULES(HAL_PKGS REQUIRED dlog glib-2.0 gio-2.0 gobject-2.0 vconf libxml-2.0) +PKG_CHECK_MODULES(HAL_PKGS REQUIRED dlog) FOREACH(flag ${HAL_PKGS_CFLAGS}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") @@ -154,8 +154,5 @@ MESSAGE("Sources: ${SRCS}") ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS}) TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${HAL_PKGS_LDFLAGS}) -CONFIGURE_FILE(sensor.xml.in sensor.xml @ONLY) - INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.APLv2 DESTINATION share/license RENAME ${PROJECT_NAME}) INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR}/sensor) -INSTALL(FILES sensor.xml DESTINATION etc) diff --git a/packaging/sensor-hal-emulator.spec b/packaging/sensor-hal-emulator.spec index b756bd8..f869e3a 100644 --- a/packaging/sensor-hal-emulator.spec +++ b/packaging/sensor-hal-emulator.spec @@ -11,10 +11,6 @@ ExcludeArch: %{arm} aarch64 BuildRequires: cmake BuildRequires: pkgconfig(dlog) -BuildRequires: pkgconfig(glib-2.0) -BuildRequires: pkgconfig(gio-2.0) -BuildRequires: pkgconfig(libxml-2.0) -BuildRequires: pkgconfig(vconf) BuildRequires: sensor-hal-devel %description @@ -46,7 +42,6 @@ install -m 0644 %SOURCE1 %{buildroot}%{_libdir}/udev/rules.d /sbin/ldconfig %files -%attr(0644,root,root)/usr/etc/sensor.xml %manifest packaging/%{name}.manifest %{_libdir}/udev/rules.d/99-sensor.rules %{_libdir}/sensor/*.so diff --git a/sensor.xml.in b/sensor.xml.in deleted file mode 100644 index 47230d7..0000000 --- a/sensor.xml.in +++ /dev/null @@ -1,615 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/accel/accel_device.cpp b/src/accel/accel_device.cpp index e1229af..e3b0b4c 100644 --- a/src/accel/accel_device.cpp +++ b/src/accel/accel_device.cpp @@ -27,22 +27,14 @@ #include #include #include -#include -#include "accel_device.h" - -#define GRAVITY 9.80665 -#define G_TO_MG 1000 -#define RAW_DATA_TO_G_UNIT(X) (((float)(X))/((float)G_TO_MG)) -#define RAW_DATA_TO_METRE_PER_SECOND_SQUARED_UNIT(X) (GRAVITY * (RAW_DATA_TO_G_UNIT(X))) -#define MIN_RANGE(RES) (-((1 << (RES))/2)) -#define MAX_RANGE(RES) (((1 << (RES))/2)-1) +#include "accel_device.h" -#define MODEL_NAME "UNKNOWN" -#define VENDOR "UNKNOWN" -#define RESOLUTION 0 -#define RAW_DATA_UNIT 0 -#define MIN_INTERVAL 0 +#define MODEL_NAME "maru_sensor_accel_1" +#define VENDOR "Tizen_SDK" +#define RESOLUTION 16 +#define RAW_DATA_UNIT 0.061 +#define MIN_INTERVAL 1 #define MAX_BATCH_COUNT 0 #define SENSOR_NAME "SENSOR_ACCELEROMETER" @@ -51,6 +43,14 @@ #define INPUT_NAME "accelerometer_sensor" #define ACCEL_SENSORHUB_POLL_NODE_NAME "accel_poll_delay" +#define GRAVITY 9.80665 +#define G_TO_MG 1000 +#define RAW_DATA_TO_G_UNIT(X) (((float)(X))/((float)G_TO_MG)) +#define RAW_DATA_TO_METRE_PER_SECOND_SQUARED_UNIT(X) (GRAVITY * (RAW_DATA_TO_G_UNIT(X))) + +#define MIN_RANGE(RES) (-((1 << (RES))/2)) +#define MAX_RANGE(RES) (((1 << (RES))/2)-1) + static sensor_info_t sensor_info = { id: 0x1, name: SENSOR_NAME, @@ -76,16 +76,10 @@ accel_device::accel_device() , m_sensorhub_controlled(false) { const std::string sensorhub_interval_node_name = ACCEL_SENSORHUB_POLL_NODE_NAME; - config::sensor_config &config = config::sensor_config::get_instance(); node_info_query query; node_info info; - if (!util::find_model_id(SENSOR_TYPE_ACCEL, m_model_id)) { - _E("Failed to find model id"); - throw ENXIO; - } - query.sensorhub_controlled = m_sensorhub_controlled = util::is_sensorhub_controlled(sensorhub_interval_node_name); query.sensor_type = SENSOR_TYPE_ACCEL; query.key = INPUT_NAME; @@ -104,41 +98,6 @@ accel_device::accel_device() m_enable_node = info.enable_node_path; m_interval_node = info.interval_node_path; - if (!config.get(SENSOR_TYPE_ACCEL, m_model_id, ELEMENT_VENDOR, m_vendor)) { - _E("[VENDOR] is empty"); - throw ENXIO; - } - - _I("m_vendor = %s", m_vendor.c_str()); - - if (!config.get(SENSOR_TYPE_ACCEL, m_model_id, ELEMENT_NAME, m_chip_name)) { - _E("[NAME] is empty"); - throw ENXIO; - } - - _I("m_chip_name = %s",m_chip_name.c_str()); - - long resolution; - - if (!config.get(SENSOR_TYPE_ACCEL, m_model_id, ELEMENT_RESOLUTION, resolution)) { - _E("[RESOLUTION] is empty"); - throw ENXIO; - } - - m_resolution = (int)resolution; - - _I("m_resolution = %d",m_resolution); - - double raw_data_unit; - - if (!config.get(SENSOR_TYPE_ACCEL, m_model_id, ELEMENT_RAW_DATA_UNIT, raw_data_unit)) { - _E("[RAW_DATA_UNIT] is empty"); - throw ENXIO; - } - - m_raw_data_unit = (float)(raw_data_unit); - _I("m_raw_data_unit = %f", m_raw_data_unit); - m_node_handle = open(m_data_node.c_str(), O_RDONLY); if (m_node_handle < 0) { @@ -165,7 +124,7 @@ accel_device::accel_device() }; } - _I("accel_sensor is created!"); + _I("accel_device is created!"); } accel_device::~accel_device() @@ -173,23 +132,16 @@ accel_device::~accel_device() close(m_node_handle); m_node_handle = -1; - _I("accel_sensor is destroyed!"); + _I("accel_device is destroyed!"); } -int accel_device::get_poll_fd() +int accel_device::get_poll_fd(void) { return m_node_handle; } int accel_device::get_sensors(const sensor_info_t **sensors) { - sensor_info.model_name = m_chip_name.c_str(); - sensor_info.vendor = m_vendor.c_str(); - sensor_info.min_range = MIN_RANGE(m_resolution) * RAW_DATA_TO_METRE_PER_SECOND_SQUARED_UNIT(m_raw_data_unit); - sensor_info.max_range = MAX_RANGE(m_resolution) * RAW_DATA_TO_METRE_PER_SECOND_SQUARED_UNIT(m_raw_data_unit); - sensor_info.resolution = RAW_DATA_TO_METRE_PER_SECOND_SQUARED_UNIT(m_raw_data_unit); - sensor_info.min_interval = 1; - sensor_info.max_batch_count = 0; *sensors = &sensor_info; return 1; @@ -368,7 +320,6 @@ int accel_device::read_fd(uint32_t **ids) int accel_device::get_data(uint32_t id, sensor_data_t **data, int *length) { - int remains = 1; sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); retvm_if(!sensor_data, -ENOMEM, "Memory allocation failed"); @@ -385,13 +336,12 @@ int accel_device::get_data(uint32_t id, sensor_data_t **data, int *length) *data = sensor_data; *length = sizeof(sensor_data_t); - return --remains; + return 0; } void accel_device::raw_to_base(sensor_data_t *data) { - data->value_count = 3; - data->values[0] = RAW_DATA_TO_METRE_PER_SECOND_SQUARED_UNIT(data->values[0] * m_raw_data_unit); - data->values[1] = RAW_DATA_TO_METRE_PER_SECOND_SQUARED_UNIT(data->values[1] * m_raw_data_unit); - data->values[2] = RAW_DATA_TO_METRE_PER_SECOND_SQUARED_UNIT(data->values[2] * m_raw_data_unit); + data->values[0] = RAW_DATA_TO_METRE_PER_SECOND_SQUARED_UNIT(data->values[0] * RAW_DATA_UNIT); + data->values[1] = RAW_DATA_TO_METRE_PER_SECOND_SQUARED_UNIT(data->values[1] * RAW_DATA_UNIT); + data->values[2] = RAW_DATA_TO_METRE_PER_SECOND_SQUARED_UNIT(data->values[2] * RAW_DATA_UNIT); } diff --git a/src/accel/accel_device.h b/src/accel/accel_device.h index da406d2..36c958d 100644 --- a/src/accel/accel_device.h +++ b/src/accel/accel_device.h @@ -53,13 +53,6 @@ private: std::string m_enable_node; std::string m_interval_node; - std::string m_model_id; - std::string m_vendor; - std::string m_chip_name; - - int m_resolution; - float m_raw_data_unit; - std::function update_value; std::vector event_ids; diff --git a/src/create.cpp b/src/create.cpp index db4f176..17341e9 100644 --- a/src/create.cpp +++ b/src/create.cpp @@ -19,39 +19,14 @@ #include #include -#ifdef ENABLE_ACCEL #include "accel/accel_device.h" -#endif -#ifdef ENABLE_GYRO #include "gyro/gyro_device.h" -#endif -#ifdef ENABLE_GYRO_UNCAL -#include "gyro_uncal/gyro_uncal_device.h" -#endif -#ifdef ENABLE_GEOMAG #include "geomag/geomag_device.h" -#endif -#ifdef ENABLE_PRESSURE #include "pressure/pressure_device.h" -#endif -#ifdef ENABLE_UV #include "ultraviolet/uv_device.h" -#endif -#ifdef ENABLE_LIGHT #include "light/light_device.h" -#endif -#ifdef ENABLE_PROXIMITY #include "proxi/proxi_device.h" -#endif -#ifdef ENABLE_HRM_RAW -#include "hrm_raw/hrm_raw_device.h" -#endif -#ifdef ENABLE_HRM #include "hrm/hrm_device.h" -#endif -#ifdef ENABLE_SENSORHUB -#include "sensorhub/sensorhub.h" -#endif static std::vector devs; @@ -74,39 +49,14 @@ void create_sensor(const char *name) extern "C" int create(sensor_device_t **devices) { -#ifdef ENABLE_ACCEL create_sensor("Accelerometer"); -#endif -#ifdef ENABLE_GYRO create_sensor("Gyroscope"); -#endif -#ifdef ENABLE_GYRO_UNCAL - create_sensor("Gyroscope Uncal"); -#endif -#ifdef ENABLE_GEOMAG create_sensor("Geomagnetic"); -#endif -#ifdef ENABLE_PRESSURE create_sensor("Pressure"); -#endif -#ifdef ENABLE_UV create_sensor("Ultra Violet"); -#endif -#ifdef ENABLE_LIGHT create_sensor("Light"); -#endif -#ifdef ENABLE_PROXIMITY create_sensor("Proximity"); -#endif -#ifdef ENABLE_HRM_RAW - create_sensor("HRM Raw"); -#endif -#ifdef ENABLE_HRM create_sensor("HRM"); -#endif -#ifdef ENABLE_SENSORHUB - create_sensor("Sensorhub"); -#endif *devices = &devs[0]; return devs.size(); diff --git a/src/geomag/geomag_device.cpp b/src/geomag/geomag_device.cpp index c4a562a..a0f626e 100644 --- a/src/geomag/geomag_device.cpp +++ b/src/geomag/geomag_device.cpp @@ -27,9 +27,18 @@ #include #include #include -#include + #include "geomag_device.h" +#define MODEL_NAME "maru_sensor_geo_1" +#define VENDOR "Tizen_SDK" +#define RESOLUTION 14 +#define RAW_DATA_UNIT 0.6 +#define MIN_RANGE -2000 +#define MAX_RANGE 2000 +#define MIN_INTERVAL 1 +#define MAX_BATCH_COUNT 0 + #define SENSOR_NAME "SENSOR_GEOMAGNETIC" #define SENSOR_TYPE_MAGNETIC "MAGNETIC" @@ -41,13 +50,13 @@ static sensor_info_t sensor_info = { name: SENSOR_NAME, type: SENSOR_DEVICE_GEOMAGNETIC, event_type: (SENSOR_DEVICE_GEOMAGNETIC << SENSOR_EVENT_SHIFT) | RAW_DATA_EVENT, - model_name: UNKNOWN_NAME, - vendor: UNKNOWN_NAME, - min_range: 0, - max_range: 0, - resolution: 0, - min_interval: 0, - max_batch_count: 0, + model_name: MODEL_NAME, + vendor: VENDOR, + min_range: MIN_RANGE, + max_range: MAX_RANGE, + resolution: RAW_DATA_UNIT, + min_interval: MIN_INTERVAL, + max_batch_count: MAX_BATCH_COUNT, wakeup_supported: false }; @@ -62,17 +71,10 @@ geomag_device::geomag_device() , m_sensorhub_controlled(false) { const std::string sensorhub_interval_node_name = GEOMAG_SENSORHUB_POLL_NODE_NAME; - config::sensor_config &config = config::sensor_config::get_instance(); node_info_query query; node_info info; - if (!util::find_model_id(SENSOR_TYPE_MAGNETIC, m_model_id)) { - _E("Failed to find model id"); - throw ENXIO; - - } - query.sensorhub_controlled = m_sensorhub_controlled = util::is_sensorhub_controlled(sensorhub_interval_node_name); query.sensor_type = SENSOR_TYPE_MAGNETIC; query.key = INPUT_NAME; @@ -91,54 +93,10 @@ geomag_device::geomag_device() m_enable_node = info.enable_node_path; m_interval_node = info.interval_node_path; - if (!config.get(SENSOR_TYPE_MAGNETIC, m_model_id, ELEMENT_VENDOR, m_vendor)) { - _E("[VENDOR] is empty\n"); - throw ENXIO; - } - - _I("m_vendor = %s", m_vendor.c_str()); - - if (!config.get(SENSOR_TYPE_MAGNETIC, m_model_id, ELEMENT_NAME, m_chip_name)) { - _E("[NAME] is empty\n"); - throw ENXIO; - } - - _I("m_chip_name = %s\n",m_chip_name.c_str()); - - double min_range; - - if (!config.get(SENSOR_TYPE_MAGNETIC, m_model_id, ELEMENT_MIN_RANGE, min_range)) { - _E("[MIN_RANGE] is empty\n"); - throw ENXIO; - } - - m_min_range = (float)min_range; - _I("m_min_range = %f\n",m_min_range); - - double max_range; - - if (!config.get(SENSOR_TYPE_MAGNETIC, m_model_id, ELEMENT_MAX_RANGE, max_range)) { - _E("[MAX_RANGE] is empty\n"); - throw ENXIO; - } - - m_max_range = (float)max_range; - _I("m_max_range = %f\n",m_max_range); - - double raw_data_unit; - - if (!config.get(SENSOR_TYPE_MAGNETIC, m_model_id, ELEMENT_RAW_DATA_UNIT, raw_data_unit)) { - _E("[RAW_DATA_UNIT] is empty\n"); - throw ENXIO; - } - - m_raw_data_unit = (float)(raw_data_unit); - _I("m_raw_data_unit = %f\n", m_raw_data_unit); - m_node_handle = open(m_data_node.c_str(), O_RDONLY); if (m_node_handle < 0) { - _ERRNO(errno, _E, "geomag handle open fail for geomag device"); + _ERRNO(errno, _E, "Failed to open geomags handle"); throw ENXIO; } @@ -161,7 +119,7 @@ geomag_device::geomag_device() }; } - _I("geomag_device is created!\n"); + _I("geomag_device is created!"); } geomag_device::~geomag_device() @@ -169,7 +127,7 @@ geomag_device::~geomag_device() close(m_node_handle); m_node_handle = -1; - _I("geomag_sensor is destroyed!\n"); + _I("geomag_sensor is destroyed!"); } int geomag_device::get_poll_fd(void) @@ -179,13 +137,6 @@ int geomag_device::get_poll_fd(void) int geomag_device::get_sensors(const sensor_info_t **sensors) { - sensor_info.model_name = m_chip_name.c_str(); - sensor_info.vendor = m_vendor.c_str(); - sensor_info.min_range = m_min_range; - sensor_info.max_range = m_max_range; - sensor_info.resolution = m_raw_data_unit; - sensor_info.min_interval = 1; - sensor_info.max_batch_count = 0; *sensors = &sensor_info; return 1; @@ -197,7 +148,7 @@ bool geomag_device::enable(uint32_t id) set_interval(id, m_polling_interval); m_fired_time = 0; - INFO("Enable geomagnetic sensor"); + _I("Enable geomagnetic sensor"); return true; } @@ -205,7 +156,7 @@ bool geomag_device::disable(uint32_t id) { util::set_enable_node(m_enable_node, m_sensorhub_controlled, false, SENSORHUB_GEOMAGNETIC_ENABLE_BIT); - INFO("Disable geomagnetic sensor"); + _I("Disable geomagnetic sensor"); return true; } @@ -216,11 +167,11 @@ bool geomag_device::set_interval(uint32_t id, unsigned long val) polling_interval_ns = ((unsigned long long)(val) * 1000llu * 1000llu); if (!util::set_node_value(m_interval_node, polling_interval_ns)) { - ERR("Failed to set polling resource: %s\n", m_interval_node.c_str()); + _E("Failed to set polling resource: %s", m_interval_node.c_str()); return false; } - INFO("Interval is changed from %dms to %dms", m_polling_interval, val); + _I("Interval is changed from %dms to %dms", m_polling_interval, val); m_polling_interval = val; return true; } @@ -242,7 +193,7 @@ bool geomag_device::update_value_input_event(void) while ((syn == false) && (read_input_cnt < INPUT_MAX_BEFORE_SYN)) { int len = read(m_node_handle, &geo_input, sizeof(geo_input)); if (len != sizeof(geo_input)) { - _E("geo_file read fail, read_len = %d\n",len); + _E("geo_file read fail, read_len = %d",len); return false; } @@ -250,26 +201,26 @@ bool geomag_device::update_value_input_event(void) if (geo_input.type == EV_REL) { switch (geo_input.code) { - case REL_RX: - geo_raw[0] = (int)geo_input.value; - x = true; - break; - case REL_RY: - geo_raw[1] = (int)geo_input.value; - y = true; - break; - case REL_RZ: - geo_raw[2] = (int)geo_input.value; - z = true; - break; - case REL_HWHEEL: - geo_raw[3] = (int)geo_input.value; - hdst = true; - break; - default: - _E("geo_input event[type = %d, code = %d] is unknown.", geo_input.type, geo_input.code); - return false; - break; + case REL_RX: + geo_raw[0] = (int)geo_input.value; + x = true; + break; + case REL_RY: + geo_raw[1] = (int)geo_input.value; + y = true; + break; + case REL_RZ: + geo_raw[2] = (int)geo_input.value; + z = true; + break; + case REL_HWHEEL: + geo_raw[3] = (int)geo_input.value; + hdst = true; + break; + default: + _E("geo_input event[type = %d, code = %d] is unknown.", geo_input.type, geo_input.code); + return false; + break; } } else if (geo_input.type == EV_SYN) { syn = true; @@ -301,7 +252,6 @@ bool geomag_device::update_value_input_event(void) return true; } - bool geomag_device::update_value_iio(void) { struct { @@ -359,7 +309,7 @@ bool geomag_device::update_value_iio(void) int geomag_device::read_fd(uint32_t **ids) { if (!update_value()) { - DBG("Failed to update value"); + _D("Failed to update value"); return false; } @@ -373,7 +323,6 @@ int geomag_device::read_fd(uint32_t **ids) int geomag_device::get_data(uint32_t id, sensor_data_t **data, int *length) { - int remains = 1; sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); retvm_if(!sensor_data, -ENOMEM, "Memory allocation failed"); @@ -391,12 +340,12 @@ int geomag_device::get_data(uint32_t id, sensor_data_t **data, int *length) *data = sensor_data; *length = sizeof(sensor_data_t); - return --remains; + return 0; } void geomag_device::raw_to_base(sensor_data_t *data) { - data->values[0] = data->values[0] * m_raw_data_unit; - data->values[1] = data->values[1] * m_raw_data_unit; - data->values[2] = data->values[2] * m_raw_data_unit; + data->values[0] = data->values[0] * RAW_DATA_UNIT; + data->values[1] = data->values[1] * RAW_DATA_UNIT; + data->values[2] = data->values[2] * RAW_DATA_UNIT; } diff --git a/src/geomag/geomag_device.h b/src/geomag/geomag_device.h index 70d4d9a..ccd7142 100644 --- a/src/geomag/geomag_device.h +++ b/src/geomag/geomag_device.h @@ -54,15 +54,6 @@ private: std::string m_enable_node; std::string m_interval_node; - std::string m_model_id; - std::string m_vendor; - std::string m_chip_name; - - int m_resolution; - float m_min_range; - float m_max_range; - float m_raw_data_unit; - long a_x; long a_y; long a_z; diff --git a/src/gyro/gyro_device.cpp b/src/gyro/gyro_device.cpp index d8146ab..b618d47 100644 --- a/src/gyro/gyro_device.cpp +++ b/src/gyro/gyro_device.cpp @@ -27,13 +27,15 @@ #include #include #include -#include + #include "gyro_device.h" -#define DPS_TO_MDPS 1000 -#define RAW_DATA_TO_DPS_UNIT(X) ((float)(X)/((float)DPS_TO_MDPS)) -#define MIN_RANGE(RES) (-((1 << (RES))/2)) -#define MAX_RANGE(RES) (((1 << (RES))/2)-1) +#define MODEL_NAME "maru_sensor_gyro_1" +#define VENDOR "Tizen_SDK" +#define RESOLUTION 16 +#define RAW_DATA_UNIT 1000 +#define MIN_INTERVAL 1 +#define MAX_BATCH_COUNT 0 #define SENSOR_NAME "SENSOR_GYROSCOPE" #define SENSOR_TYPE_GYRO "GYRO" @@ -41,18 +43,23 @@ #define INPUT_NAME "gyro_sensor" #define GYRO_SENSORHUB_POLL_NODE_NAME "gyro_poll_delay" +#define DPS_TO_MDPS 1000 +#define RAW_DATA_TO_DPS_UNIT(X) ((float)(X)/((float)DPS_TO_MDPS)) +#define MIN_RANGE(RES) (-((1 << (RES))/2)) +#define MAX_RANGE(RES) (((1 << (RES))/2)-1) + static sensor_info_t sensor_info = { id: 0x1, name: SENSOR_NAME, type: SENSOR_DEVICE_GYROSCOPE, event_type: (SENSOR_DEVICE_GYROSCOPE << SENSOR_EVENT_SHIFT) | RAW_DATA_EVENT, - model_name: UNKNOWN_NAME, - vendor: UNKNOWN_NAME, - min_range: 0, - max_range: 0, - resolution: 0, - min_interval: 0, - max_batch_count: 0, + model_name: MODEL_NAME, + vendor: VENDOR, + min_range: MIN_RANGE(RESOLUTION) * RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT), + max_range: MAX_RANGE(RESOLUTION) * RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT), + resolution: RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT), + min_interval: MIN_INTERVAL, + max_batch_count: MAX_BATCH_COUNT, wakeup_supported: false }; @@ -66,16 +73,10 @@ gyro_device::gyro_device() , m_sensorhub_controlled(false) { const std::string sensorhub_interval_node_name = GYRO_SENSORHUB_POLL_NODE_NAME; - config::sensor_config &config = config::sensor_config::get_instance(); node_info_query query; node_info info; - if (!util::find_model_id(SENSOR_TYPE_GYRO, m_model_id)) { - _E("Failed to find model id"); - throw ENXIO; - } - query.sensorhub_controlled = m_sensorhub_controlled = util::is_sensorhub_controlled(sensorhub_interval_node_name); query.sensor_type = SENSOR_TYPE_GYRO; query.key = INPUT_NAME; @@ -94,44 +95,10 @@ gyro_device::gyro_device() m_enable_node = info.enable_node_path; m_interval_node = info.interval_node_path; - if (!config.get(SENSOR_TYPE_GYRO, m_model_id, ELEMENT_VENDOR, m_vendor)) { - _E("[VENDOR] is empty"); - throw ENXIO; - } - - _I("m_vendor = %s", m_vendor.c_str()); - - if (!config.get(SENSOR_TYPE_GYRO, m_model_id, ELEMENT_NAME, m_chip_name)) { - _E("[NAME] is empty"); - throw ENXIO; - } - - _I("m_chip_name = %s",m_chip_name.c_str()); - - long resolution; - - if (!config.get(SENSOR_TYPE_GYRO, m_model_id, ELEMENT_RESOLUTION, resolution)) { - _E("[RESOLUTION] is empty"); - throw ENXIO; - } - - m_resolution = (int)resolution; - _I("m_resolution = %d",m_resolution); - - double raw_data_unit; - - if (!config.get(SENSOR_TYPE_GYRO, m_model_id, ELEMENT_RAW_DATA_UNIT, raw_data_unit)) { - _E("[RAW_DATA_UNIT] is empty"); - throw ENXIO; - } - - m_raw_data_unit = (float)(raw_data_unit); - _I("m_raw_data_unit = %f", m_raw_data_unit); - m_node_handle = open(m_data_node.c_str(), O_RDONLY); if (m_node_handle < 0) { - _ERRNO(errno, _E, "gyro handle open fail for gyro device"); + _ERRNO(errno, _E, "Failed to open gyro handle"); throw ENXIO; } @@ -154,8 +121,7 @@ gyro_device::gyro_device() }; } - _I("RAW_DATA_TO_DPS_UNIT(m_raw_data_unit) = [%f]",RAW_DATA_TO_DPS_UNIT(m_raw_data_unit)); - _I("gyro_sensor is created!"); + _I("gyro_device is created!"); } gyro_device::~gyro_device() @@ -163,7 +129,7 @@ gyro_device::~gyro_device() close(m_node_handle); m_node_handle = -1; - _I("gyro_sensor is destroyed!"); + _I("gyro_device is destroyed!"); } int gyro_device::get_poll_fd(void) @@ -173,13 +139,6 @@ int gyro_device::get_poll_fd(void) int gyro_device::get_sensors(const sensor_info_t **sensors) { - sensor_info.model_name = m_chip_name.c_str(); - sensor_info.vendor = m_vendor.c_str(); - sensor_info.min_range = MIN_RANGE(m_resolution) * RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - sensor_info.max_range = MAX_RANGE(m_resolution) * RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - sensor_info.resolution = RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - sensor_info.min_interval = 1; - sensor_info.max_batch_count = 0; *sensors = &sensor_info; return 1; @@ -236,7 +195,7 @@ bool gyro_device::update_value_input_event(void) while ((syn == false) && (read_input_cnt < INPUT_MAX_BEFORE_SYN)) { int len = read(m_node_handle, &gyro_input, sizeof(gyro_input)); if (len != sizeof(gyro_input)) { - _E("gyro_file read fail, read_len = %d",len); + _E("gyro_file read fail, read_len = %d", len); return false; } @@ -244,22 +203,22 @@ bool gyro_device::update_value_input_event(void) if (gyro_input.type == EV_REL) { switch (gyro_input.code) { - case REL_RX: - gyro_raw[0] = (int)gyro_input.value; - x = true; - break; - case REL_RY: - gyro_raw[1] = (int)gyro_input.value; - y = true; - break; - case REL_RZ: - gyro_raw[2] = (int)gyro_input.value; - z = true; - break; - default: - _E("gyro_input event[type = %d, code = %d] is unknown.", gyro_input.type, gyro_input.code); - return false; - break; + case REL_RX: + gyro_raw[0] = (int)gyro_input.value; + x = true; + break; + case REL_RY: + gyro_raw[1] = (int)gyro_input.value; + y = true; + break; + case REL_RZ: + gyro_raw[2] = (int)gyro_input.value; + z = true; + break; + default: + _E("gyro_input event[type = %d, code = %d] is unknown.", gyro_input.type, gyro_input.code); + return false; + break; } } else if (gyro_input.type == EV_SYN) { syn = true; @@ -358,7 +317,6 @@ int gyro_device::read_fd(uint32_t **ids) int gyro_device::get_data(uint32_t id, sensor_data_t **data, int *length) { - int remains = 1; sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); retvm_if(!sensor_data, -ENOMEM, "Memory allocation failed"); @@ -375,13 +333,12 @@ int gyro_device::get_data(uint32_t id, sensor_data_t **data, int *length) *data = sensor_data; *length = sizeof(sensor_data_t); - return --remains; + return 0; } void gyro_device::raw_to_base(sensor_data_t *data) { - data->value_count = 3; - data->values[0] = data->values[0] * RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - data->values[1] = data->values[1] * RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - data->values[2] = data->values[2] * RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); + data->values[0] = data->values[0] * RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT); + data->values[1] = data->values[1] * RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT); + data->values[2] = data->values[2] * RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT); } diff --git a/src/gyro/gyro_device.h b/src/gyro/gyro_device.h index 69a5169..f2abfb0 100644 --- a/src/gyro/gyro_device.h +++ b/src/gyro/gyro_device.h @@ -52,13 +52,6 @@ private: std::string m_enable_node; std::string m_interval_node; - std::string m_model_id; - std::string m_vendor; - std::string m_chip_name; - - int m_resolution; - float m_raw_data_unit; - std::function update_value; std::vector event_ids; diff --git a/src/gyro_uncal/gyro_uncal_device.cpp b/src/gyro_uncal/gyro_uncal_device.cpp index 7564714..b692f04 100644 --- a/src/gyro_uncal/gyro_uncal_device.cpp +++ b/src/gyro_uncal/gyro_uncal_device.cpp @@ -27,13 +27,15 @@ #include #include #include -#include + #include "gyro_uncal_device.h" -#define DPS_TO_MDPS 1000 -#define RAW_DATA_TO_DPS_UNIT(X) ((float)(X)/((float)DPS_TO_MDPS)) -#define MIN_RANGE(RES) (-((1 << (RES))/2)) -#define MAX_RANGE(RES) (((1 << (RES))/2)-1) +#define MODEL_NAME "maru_sensor_gyro_1" +#define VENDOR "Tizen_SDK" +#define RESOLUTION 16 +#define RAW_DATA_UNIT 1000 +#define MIN_INTERVAL 1 +#define MAX_BATCH_COUNT 0 #define SENSOR_NAME "SENSOR_GYROSCOPE_UNCALIBRATED" #define SENSOR_TYPE_GYRO_UNCAL "GYRO" @@ -41,18 +43,23 @@ #define INPUT_NAME "uncal_gyro_sensor" #define GYRO_UNCAL_SENSORHUB_POLL_NODE_NAME "uncal_gyro_poll_delay" +#define DPS_TO_MDPS 1000 +#define RAW_DATA_TO_DPS_UNIT(X) ((float)(X)/((float)DPS_TO_MDPS)) +#define MIN_RANGE(RES) (-((1 << (RES))/2)) +#define MAX_RANGE(RES) (((1 << (RES))/2)-1) + static sensor_info_t sensor_info = { id: 0x1, name: SENSOR_NAME, type: SENSOR_DEVICE_GYROSCOPE_UNCAL, event_type: (SENSOR_DEVICE_GYROSCOPE_UNCAL << SENSOR_EVENT_SHIFT) | RAW_DATA_EVENT, - model_name: UNKNOWN_NAME, - vendor: UNKNOWN_NAME, - min_range: 0, - max_range: 0, - resolution: 0, - min_interval: 0, - max_batch_count: 0, + model_name: MODEL_NAME, + vendor: VENDOR, + min_range: MIN_RANGE(RESOLUTION) * RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT), + max_range: MAX_RANGE(RESOLUTION) * RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT), + resolution: RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT), + min_interval: MIN_INTERVAL, + max_batch_count: MAX_BATCH_COUNT, wakeup_supported: false }; @@ -69,16 +76,10 @@ gyro_uncal_device::gyro_uncal_device() , m_sensorhub_controlled(false) { const std::string sensorhub_interval_node_name = GYRO_UNCAL_SENSORHUB_POLL_NODE_NAME; - config::sensor_config &config = config::sensor_config::get_instance(); node_info_query query; node_info info; - if (!util::find_model_id(SENSOR_TYPE_GYRO_UNCAL, m_model_id)) { - _E("Failed to find model id"); - throw ENXIO; - } - query.sensorhub_controlled = m_sensorhub_controlled = util::is_sensorhub_controlled(sensorhub_interval_node_name); query.sensor_type = SENSOR_TYPE_GYRO_UNCAL; query.key = INPUT_NAME; @@ -97,56 +98,6 @@ gyro_uncal_device::gyro_uncal_device() m_enable_node = info.enable_node_path; m_interval_node = info.interval_node_path; - if (!config.get(SENSOR_TYPE_GYRO_UNCAL, m_model_id, ELEMENT_VENDOR, m_vendor)) { - _E("[VENDOR] is empty"); - throw ENXIO; - } - - _I("m_vendor = %s", m_vendor.c_str()); - - if (!config.get(SENSOR_TYPE_GYRO_UNCAL, m_model_id, ELEMENT_NAME, m_chip_name)) { - _E("[NAME] is empty"); - throw ENXIO; - } - - _I("m_chip_name = %s",m_chip_name.c_str()); - - long resolution; - - if (!config.get(SENSOR_TYPE_GYRO_UNCAL, m_model_id, ELEMENT_RESOLUTION, resolution)) { - _E("[RESOLUTION] is empty"); - throw ENXIO; - } - - m_resolution = (int)resolution; - _I("m_resolution = %d",m_resolution); - - double raw_data_unit; - - if (!config.get(SENSOR_TYPE_GYRO_UNCAL, m_model_id, ELEMENT_RAW_DATA_UNIT, raw_data_unit)) { - _E("[RAW_DATA_UNIT] is empty"); - throw ENXIO; - } - - m_raw_data_unit = (float)(raw_data_unit); - _I("m_raw_data_unit = %f",m_raw_data_unit); - - double min_range; - - if (!config.get(SENSOR_TYPE_GYRO_UNCAL, m_model_id, ELEMENT_MIN_RANGE, min_range)) - min_range = MIN_RANGE(m_resolution)* RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - - m_min_range = (float)min_range; - _I("m_min_range = %f",m_min_range); - - double max_range; - - if (!config.get(SENSOR_TYPE_GYRO_UNCAL, m_model_id, ELEMENT_MAX_RANGE, max_range)) - max_range = MAX_RANGE(m_resolution)* RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - - m_max_range = (float)max_range; - _I("m_max_range = %f",m_max_range); - m_node_handle = open(m_data_node.c_str(), O_RDONLY); if (m_node_handle < 0) { @@ -163,7 +114,6 @@ gyro_uncal_device::gyro_uncal_device() }; } - _I("RAW_DATA_TO_DPS_UNIT(m_raw_data_unit) = [%f]",RAW_DATA_TO_DPS_UNIT(m_raw_data_unit)); _I("gyro_uncal_device is created!"); } @@ -182,13 +132,6 @@ int gyro_uncal_device::get_poll_fd(void) int gyro_uncal_device::get_sensors(const sensor_info_t **sensors) { - sensor_info.model_name = m_chip_name.c_str(); - sensor_info.vendor = m_vendor.c_str(); - sensor_info.min_range = MIN_RANGE(m_resolution) * RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - sensor_info.max_range = MAX_RANGE(m_resolution) * RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - sensor_info.resolution = RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - sensor_info.min_interval = 1; - sensor_info.max_batch_count = 0; *sensors = &sensor_info; return 1; @@ -200,7 +143,7 @@ bool gyro_uncal_device::enable(uint32_t id) set_interval(id, m_polling_interval); m_fired_time = 0; - INFO("Enable gyroscope uncalibration sensor"); + _I("Enable gyroscope uncalibration sensor"); return true; } @@ -208,7 +151,7 @@ bool gyro_uncal_device::disable(uint32_t id) { util::set_enable_node(m_enable_node, m_sensorhub_controlled, false, SENSORHUB_GYRO_UNCALIB_ENABLE_BIT); - INFO("Disable gyroscope uncalibration sensor"); + _I("Disable gyroscope uncalibration sensor"); return true; } @@ -253,34 +196,34 @@ bool gyro_uncal_device::update_value_input_event(void) if (gyro_uncal_input.type == EV_REL) { switch (gyro_uncal_input.code) { - case REL_RX: - gyro_uncal_raw[0] = (int)gyro_uncal_input.value; - x = true; - break; - case REL_RY: - gyro_uncal_raw[1] = (int)gyro_uncal_input.value; - y = true; - break; - case REL_RZ: - gyro_uncal_raw[2] = (int)gyro_uncal_input.value; - z = true; - break; - case REL_HWHEEL: - gyro_uncal_raw[3] = (int)gyro_uncal_input.value; - x_offset = true; - break; - case REL_DIAL: - gyro_uncal_raw[4] = (int)gyro_uncal_input.value; - y_offset = true; - break; - case REL_WHEEL: - gyro_uncal_raw[5] = (int)gyro_uncal_input.value; - z_offset= true; - break; - default: - _E("gyro_uncal_input event[type = %d, code = %d] is unknown.", gyro_uncal_input.type, gyro_uncal_input.code); - return false; - break; + case REL_RX: + gyro_uncal_raw[0] = (int)gyro_uncal_input.value; + x = true; + break; + case REL_RY: + gyro_uncal_raw[1] = (int)gyro_uncal_input.value; + y = true; + break; + case REL_RZ: + gyro_uncal_raw[2] = (int)gyro_uncal_input.value; + z = true; + break; + case REL_HWHEEL: + gyro_uncal_raw[3] = (int)gyro_uncal_input.value; + x_offset = true; + break; + case REL_DIAL: + gyro_uncal_raw[4] = (int)gyro_uncal_input.value; + y_offset = true; + break; + case REL_WHEEL: + gyro_uncal_raw[5] = (int)gyro_uncal_input.value; + z_offset= true; + break; + default: + _E("gyro_uncal_input event[type = %d, code = %d] is unknown.", gyro_uncal_input.type, gyro_uncal_input.code); + return false; + break; } } else if (gyro_uncal_input.type == EV_SYN) { syn = true; @@ -333,7 +276,6 @@ int gyro_uncal_device::read_fd(uint32_t **ids) int gyro_uncal_device::get_data(uint32_t id, sensor_data_t **data, int *length) { - int remains = 1; sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); retvm_if(!sensor_data, -ENOMEM, "Memory allocation failed"); @@ -353,15 +295,15 @@ int gyro_uncal_device::get_data(uint32_t id, sensor_data_t **data, int *length) *data = sensor_data; *length = sizeof(sensor_data_t); - return --remains; + return 0; } void gyro_uncal_device::raw_to_base(sensor_data_t *data) { - data->values[0] = data->values[0] * RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - data->values[1] = data->values[1] * RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - data->values[2] = data->values[2] * RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - data->values[3] = data->values[3] * RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - data->values[4] = data->values[4] * RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); - data->values[5] = data->values[5] * RAW_DATA_TO_DPS_UNIT(m_raw_data_unit); + data->values[0] = data->values[0] * RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT); + data->values[1] = data->values[1] * RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT); + data->values[2] = data->values[2] * RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT); + data->values[3] = data->values[3] * RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT); + data->values[4] = data->values[4] * RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT); + data->values[5] = data->values[5] * RAW_DATA_TO_DPS_UNIT(RAW_DATA_UNIT); } diff --git a/src/gyro_uncal/gyro_uncal_device.h b/src/gyro_uncal/gyro_uncal_device.h index 66a8a4e..557b561 100644 --- a/src/gyro_uncal/gyro_uncal_device.h +++ b/src/gyro_uncal/gyro_uncal_device.h @@ -56,15 +56,6 @@ private: std::string m_enable_node; std::string m_interval_node; - std::string m_model_id; - std::string m_vendor; - std::string m_chip_name; - - int m_resolution; - float m_raw_data_unit; - float m_min_range; - float m_max_range; - std::function update_value; std::vector event_ids; diff --git a/src/hrm/hrm_device.cpp b/src/hrm/hrm_device.cpp index a04c209..41ab0c3 100644 --- a/src/hrm/hrm_device.cpp +++ b/src/hrm/hrm_device.cpp @@ -27,9 +27,18 @@ #include #include #include -#include + #include "hrm_device.h" +#define MODEL_NAME "maru_sensor_hrm_1" +#define VENDOR "Tizen_SDK" +#define MIN_RANGE 0 +#define MAX_RANGE 1000 +#define RESOLUTION 1 +#define RAW_DATA_UNIT 0.1 +#define MIN_INTERVAL 1 +#define MAX_BATCH_COUNT 0 + #define SENSOR_NAME "SENSOR_HRM" #define SENSOR_TYPE_HRM "HRM" @@ -43,13 +52,13 @@ static sensor_info_t sensor_info = { name: SENSOR_NAME, type: SENSOR_DEVICE_HRM, event_type: (SENSOR_DEVICE_HRM << SENSOR_EVENT_SHIFT) | RAW_DATA_EVENT, - model_name: UNKNOWN_NAME, - vendor: UNKNOWN_NAME, - min_range: 0, - max_range: 1, - resolution: 1, - min_interval: 1, - max_batch_count: 0, + model_name: MODEL_NAME, + vendor: VENDOR, + min_range: MIN_RANGE, + max_range: MAX_RANGE, + resolution: RAW_DATA_UNIT, + min_interval: MIN_INTERVAL, + max_batch_count: MAX_BATCH_COUNT, wakeup_supported: false }; @@ -59,25 +68,16 @@ hrm_device::hrm_device() , m_spo2(0) , m_peek_to_peek(0) , m_snr(0.0f) -, m_raw_data_unit(DEFAULT_RAW_DATA_UNIT) , m_polling_interval(1000) , m_fired_time(0) , m_interval_supported(false) , m_sensorhub_controlled(false) { - double raw_data_unit = DEFAULT_RAW_DATA_UNIT; - const std::string sensorhub_interval_node_name = HRM_SENSORHUB_POLL_NODE_NAME; - config::sensor_config &config = config::sensor_config::get_instance(); node_info_query query; node_info info; - if (!util::find_model_id(SENSOR_TYPE_HRM, m_model_id)) { - _E("Failed to find model id"); - throw ENXIO; - } - query.sensorhub_controlled = m_sensorhub_controlled = util::is_sensorhub_controlled(sensorhub_interval_node_name); query.sensor_type = SENSOR_TYPE_HRM; query.key = INPUT_NAME; @@ -99,27 +99,6 @@ hrm_device::hrm_device() if (access(m_interval_node.c_str(), F_OK) == 0) m_interval_supported = true; - if (!config.get(SENSOR_TYPE_HRM, m_model_id, ELEMENT_VENDOR, m_vendor)) { - _E("[VENDOR] is empty"); - throw ENXIO; - } - - _I("m_vendor = %s", m_vendor.c_str()); - - if (!config.get(SENSOR_TYPE_HRM, m_model_id, ELEMENT_NAME, m_chip_name)) { - _E("[NAME] is empty"); - throw ENXIO; - } - - _I("m_chip_name = %s",m_chip_name.c_str()); - - if (!config.get(SENSOR_TYPE_HRM, m_model_id, ELEMENT_RAW_DATA_UNIT, raw_data_unit)) { - _I("[RAW_DATA_UNIT] is empty"); - } - - m_raw_data_unit = (float)(raw_data_unit); - _I("m_raw_data_unit = %f", m_raw_data_unit); - m_node_handle = open(m_data_node.c_str(), O_RDONLY); if (m_node_handle < 0) { @@ -155,8 +134,6 @@ int hrm_device::get_poll_fd(void) int hrm_device::get_sensors(const sensor_info_t **sensors) { - sensor_info.model_name = m_chip_name.c_str(); - sensor_info.vendor = m_vendor.c_str(); *sensors = &sensor_info; return 1; @@ -247,7 +224,7 @@ bool hrm_device::update_value_input_event(void) } } - if ((hrm_raw[0] * m_raw_data_unit) > HR_MAX) { + if (hrm_raw[0] * RAW_DATA_UNIT > HR_MAX) { _E("Drop abnormal HR: %d", hrm_raw[0]); return false; } @@ -278,7 +255,6 @@ int hrm_device::read_fd(uint32_t **ids) int hrm_device::get_data(uint32_t id, sensor_data_t **data, int *length) { - int remains = 1; sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); retvm_if(!sensor_data, -ENOMEM, "Memory allocation failed"); @@ -296,10 +272,10 @@ int hrm_device::get_data(uint32_t id, sensor_data_t **data, int *length) *data = sensor_data; *length = sizeof(sensor_data_t); - return --remains; + return 0; } void hrm_device::raw_to_base(sensor_data_t *data) { - data->values[0] = data->values[0] * m_raw_data_unit; + data->values[0] = data->values[0] * RAW_DATA_UNIT; } diff --git a/src/hrm/hrm_device.h b/src/hrm/hrm_device.h index 324924b..693648c 100644 --- a/src/hrm/hrm_device.h +++ b/src/hrm/hrm_device.h @@ -45,7 +45,6 @@ private: int m_spo2; int m_peek_to_peek; float m_snr; - float m_raw_data_unit; unsigned long m_polling_interval; unsigned long long m_fired_time; bool m_interval_supported; @@ -56,10 +55,6 @@ private: std::string m_enable_node; std::string m_interval_node; - std::string m_model_id; - std::string m_vendor; - std::string m_chip_name; - std::function update_value; std::vector event_ids; diff --git a/src/hrm_raw/hrm_raw_data_reader.cpp b/src/hrm_raw/hrm_raw_data_reader.cpp deleted file mode 100644 index 3bb0682..0000000 --- a/src/hrm_raw/hrm_raw_data_reader.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include "hrm_raw_data_reader.h" - -hrm_raw_data_reader::hrm_raw_data_reader() -{ -} -hrm_raw_data_reader::~hrm_raw_data_reader() -{ -} - -bool hrm_raw_data_reader::open(void) -{ - return true; -} - -bool hrm_raw_data_reader::close(void) -{ - return true; -} - - -bool hrm_raw_data_reader::start(void) -{ - return true; -} - -bool hrm_raw_data_reader::stop(void) -{ - return true; -} diff --git a/src/hrm_raw/hrm_raw_data_reader.h b/src/hrm_raw/hrm_raw_data_reader.h deleted file mode 100644 index d515783..0000000 --- a/src/hrm_raw/hrm_raw_data_reader.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#ifndef _HRM_RAW_DATA_READER_H_ -#define _HRM_RAW_DATA_READER_H_ - -#include -#include - -class hrm_raw_data_reader { -public: - hrm_raw_data_reader(); - virtual ~hrm_raw_data_reader(); - - virtual bool open(void); - virtual bool close(void); - virtual bool start(void); - virtual bool stop(void); - virtual bool get_data(int handle, sensor_data_t &data) = 0; -}; -#endif /* _HRM_RAW_DATA_READER_ */ diff --git a/src/hrm_raw/hrm_raw_data_reader_standard.cpp b/src/hrm_raw/hrm_raw_data_reader_standard.cpp deleted file mode 100644 index 205579e..0000000 --- a/src/hrm_raw/hrm_raw_data_reader_standard.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include -#include -#include "hrm_raw_data_reader_standard.h" - -#define INPUT_MAX_BEFORE_SYN 20 -#define INPUT_EVENT_BIAS 1 -#define INPUT_VALUE_COUNT 10 - -hrm_raw_data_reader_standard::hrm_raw_data_reader_standard() -{ -} - -hrm_raw_data_reader_standard::~hrm_raw_data_reader_standard() -{ -} - -bool hrm_raw_data_reader_standard::get_data(int handle, sensor_data_t &data) -{ - bool syn = false; - int read_input_cnt = 0; - int index = 0; - struct input_event hrm_raw_input; - - while ((syn == false) && (read_input_cnt < INPUT_MAX_BEFORE_SYN)) { - int len = read(handle, &hrm_raw_input, sizeof(hrm_raw_input)); - if (len != sizeof(hrm_raw_input)) { - _E("hrm_raw_file read fail, read_len = %d", len); - return false; - } - - ++read_input_cnt; - - if (hrm_raw_input.type == EV_REL) { - index = hrm_raw_input.code - REL_X; - - /* Check an avaiable value REL_X(0x00) ~ REL_MISC(0x09) */ - if (index >= INPUT_VALUE_COUNT) { - _E("hrm_raw_input event[type = %d, code = %d] is unknown.", hrm_raw_input.type, index); - return false; - } - data.values[index] = (unsigned int)hrm_raw_input.value - INPUT_EVENT_BIAS; - - } else if (hrm_raw_input.type == EV_SYN) { - syn = true; - data.timestamp = util::get_timestamp(&hrm_raw_input.time); - data.value_count = INPUT_VALUE_COUNT; - } else { - _E("hrm_raw_input event[type = %d, code = %d] is unknown.", hrm_raw_input.type, hrm_raw_input.code); - return false; - } - } - - if (!syn) { - _E("EV_SYN didn't come until %d inputs had come", read_input_cnt); - return false; - } - return true; -} diff --git a/src/hrm_raw/hrm_raw_data_reader_standard.h b/src/hrm_raw/hrm_raw_data_reader_standard.h deleted file mode 100644 index caa556a..0000000 --- a/src/hrm_raw/hrm_raw_data_reader_standard.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "hrm_raw_data_reader.h" - -#ifndef _HRM_RAW_DATA_READER_STANDARD_H_ -#define _HRM_RAW_DATA_READER_STANDARD_H_ - -class hrm_raw_data_reader_standard : public hrm_raw_data_reader { -public: - hrm_raw_data_reader_standard(); - ~hrm_raw_data_reader_standard(); - - virtual bool get_data(int handle, sensor_data_t &data); -}; -#endif /* _HRM_RAW_DATA_READER_STANDARD_H_ */ diff --git a/src/hrm_raw/hrm_raw_device.cpp b/src/hrm_raw/hrm_raw_device.cpp deleted file mode 100644 index 6f1d47f..0000000 --- a/src/hrm_raw/hrm_raw_device.cpp +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "hrm_raw_data_reader_standard.h" -#include "hrm_raw_device.h" - -#define SENSOR_NAME "SENSOR_HRM_RAW" -#define SENSOR_TYPE_HRM_RAW "HRM_RAW" - -#define INPUT_NAME "hrm_raw_sensor" -#define HRM_SENSORHUB_POLL_NODE_NAME "hrm_poll_delay" - -#define INDEX_HRM_RAW 0x1 -#define INDEX_HRM_LED_GREEN 0x2 - -#define ELEMENT_READER "READER" -#define POLL_1HZ_MS 1000 - -static sensor_info_t sensor_info[] = { - { - id: INDEX_HRM_RAW, - name: SENSOR_NAME, - type: SENSOR_DEVICE_HRM_RAW, - event_type: (SENSOR_DEVICE_HRM_RAW << SENSOR_EVENT_SHIFT) | RAW_DATA_EVENT, - model_name: UNKNOWN_NAME, - vendor: UNKNOWN_NAME, - min_range: 0, - max_range: 1, - resolution: 1, - min_interval: 1, - max_batch_count: 0, - wakeup_supported: false - }, - { - id: INDEX_HRM_LED_GREEN, - name: "HRM LED GREEN SENSOR", - type: SENSOR_DEVICE_HRM_LED_GREEN, - event_type: (SENSOR_DEVICE_HRM_LED_GREEN << SENSOR_EVENT_SHIFT) | RAW_DATA_EVENT, - model_name: UNKNOWN_NAME, - vendor: UNKNOWN_NAME, - min_range: 0, - max_range: 1, - resolution: 1, - min_interval: 1, - max_batch_count: 0, - wakeup_supported: false - } -}; - -hrm_raw_device::hrm_raw_device() -: m_node_handle(-1) -, m_polling_interval(POLL_1HZ_MS) -, m_raw_interval(POLL_1HZ_MS) -, m_led_green_interval(POLL_1HZ_MS) -, m_interval_supported(false) -, m_sensorhub_controlled(false) -, m_enable(0) -, m_reader(NULL) -{ - const std::string sensorhub_interval_node_name = HRM_SENSORHUB_POLL_NODE_NAME; - config::sensor_config &config = config::sensor_config::get_instance(); - - node_info_query query; - node_info info; - - if (!util::find_model_id(SENSOR_TYPE_HRM_RAW, m_model_id)) { - _E("Failed to find model id"); - throw ENXIO; - } - - query.sensorhub_controlled = m_sensorhub_controlled = util::is_sensorhub_controlled(sensorhub_interval_node_name); - query.sensor_type = SENSOR_TYPE_HRM_RAW; - query.key = INPUT_NAME; - query.iio_enable_node_name = "hrm_raw_enable"; - query.sensorhub_interval_node_name = sensorhub_interval_node_name; - - if (!util::get_node_info(query, info)) { - _E("Failed to get node info"); - throw ENXIO; - } - - util::show_node_info(info); - - m_method = info.method; - m_data_node = info.data_node_path; - m_enable_node = info.enable_node_path; - m_interval_node = info.interval_node_path; - - if (access(m_interval_node.c_str(), F_OK) == 0) - m_interval_supported = true; - - if (!config.get(SENSOR_TYPE_HRM_RAW, m_model_id, ELEMENT_VENDOR, m_vendor)) { - _E("[VENDOR] is empty"); - throw ENXIO; - } - - _I("m_vendor = %s", m_vendor.c_str()); - - if (!config.get(SENSOR_TYPE_HRM_RAW, m_model_id, ELEMENT_NAME, m_chip_name)) { - _E("[NAME] is empty"); - throw ENXIO; - } - - _I("m_chip_name = %s",m_chip_name.c_str()); - - std::string reader; - - if (!config.get(SENSOR_TYPE_HRM_RAW, m_model_id, ELEMENT_READER, reader)) { - _E("[READER] is empty"); - throw ENXIO; - } - - _I("reader = %s", reader.c_str()); - - m_node_handle = open(m_data_node.c_str(), O_RDONLY); - - if (m_node_handle < 0) { - _ERRNO(errno, _E, "hrm raw handle open fail for hrm raw sensor"); - throw ENXIO; - } - - if (m_method != INPUT_EVENT_METHOD) - throw ENXIO; - - if (!util::set_monotonic_clock(m_node_handle)) - throw ENXIO; - - m_reader = get_reader(reader); - - if (!m_reader) { - _E("Not supported HRM sensor: %s", m_model_id.c_str()); - throw ENXIO; - } - - if (!m_reader->open()) - throw ENXIO; - - _I("hrm_raw_device is created!"); -} - -hrm_raw_device::~hrm_raw_device() -{ - delete m_reader; - close(m_node_handle); - m_node_handle = -1; - - _I("hrm_raw_device is destroyed!"); -} - -int hrm_raw_device::get_poll_fd() -{ - return m_node_handle; -} - -int hrm_raw_device::get_sensors(const sensor_info_t **sensors) -{ - int size = ARRAY_SIZE(sensor_info); - - for (int i = 0; i < size; ++i) { - sensor_info[i].model_name = m_chip_name.c_str(); - sensor_info[i].vendor = m_vendor.c_str(); - } - - *sensors = sensor_info; - - return size; -} - -bool hrm_raw_device::enable(uint32_t id) -{ - ++m_enable; - - if (m_enable > 1) - return true; - - util::set_enable_node(m_enable_node, m_sensorhub_controlled, true, SENSORHUB_HRM_RAW_ENABLE_BIT); - if (m_interval_supported) - set_interval(id, m_polling_interval); - - m_data.timestamp = 0; - - m_reader->start(); - _I("Enable HRM Raw sensor"); - return true; -} - -bool hrm_raw_device::disable(uint32_t id) -{ - --m_enable; - - if (m_enable > 0) - return true; - - util::set_enable_node(m_enable_node, m_sensorhub_controlled, false, SENSORHUB_HRM_RAW_ENABLE_BIT); - - m_reader->stop(); - m_enable = 0; - _I("Disable HRM Raw sensor"); - return true; -} - -bool hrm_raw_device::set_interval(uint32_t id, unsigned long val) -{ - unsigned long interval = 100; - unsigned long long polling_interval_ns; - - if (!m_interval_supported) - return true; - - if (id == INDEX_HRM_LED_GREEN) - interval = (val > m_raw_interval)?m_raw_interval:val; - else - interval = (val > m_led_green_interval)?m_led_green_interval:val; - - polling_interval_ns = ((unsigned long long)(interval) * 1000llu * 1000llu); - - if (!util::set_node_value(m_interval_node, polling_interval_ns)) { - _E("Failed to set polling resource: %s", m_interval_node.c_str()); - return false; - } - - _I("Interval is changed from %dms to %dms", m_polling_interval, interval); - m_polling_interval = interval; - - if (id == INDEX_HRM_LED_GREEN) - m_led_green_interval = val; - else - m_raw_interval = val; - - return true; -} - -int hrm_raw_device::read_fd(uint32_t **ids) -{ - if (!m_reader->get_data(m_node_handle, m_data)) { - _D("Failed to update value"); - return false; - } - - int size = ARRAY_SIZE(sensor_info); - - event_ids.clear(); - - for (int i = 0; i < size; ++i) - event_ids.push_back(sensor_info[i].id); - - *ids = &event_ids[0]; - - return event_ids.size(); -} - -int hrm_raw_device::get_data(uint32_t id, sensor_data_t **data, int *length) -{ - int remains = 1; - sensor_data_t *sensor_data; - sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); - retvm_if(!sensor_data, -ENOMEM, "Memory allocation failed"); - - sensor_data->accuracy = SENSOR_ACCURACY_GOOD; - sensor_data->timestamp = m_data.timestamp; - - if (id == INDEX_HRM_LED_GREEN) { - sensor_data->value_count = 1; - sensor_data->values[0] = m_data.values[5]; - } else { - sensor_data->value_count = m_data.value_count; - memcpy(sensor_data->values, m_data.values, m_data.value_count * sizeof(m_data.values[0])); - } - - *data = sensor_data; - *length = sizeof(sensor_data_t); - - return --remains; -} - -hrm_raw_data_reader* hrm_raw_device::get_reader(const std::string& reader) -{ - return new(std::nothrow) hrm_raw_data_reader_standard(); -} diff --git a/src/hrm_raw/hrm_raw_device.h b/src/hrm_raw/hrm_raw_device.h deleted file mode 100644 index 6dfa7d3..0000000 --- a/src/hrm_raw/hrm_raw_device.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifndef _HRM_RAW_DEVICE_H_ -#define _HRM_RAW_DEVICE_H_ - -#include -#include -#include -#include -#include "hrm_raw_data_reader.h" - -class hrm_raw_device : public sensor_device { -public: - hrm_raw_device(); - virtual ~hrm_raw_device(); - - int get_poll_fd(void); - int get_sensors(const sensor_info_t **sensors); - - bool enable(uint32_t id); - bool disable(uint32_t id); - - bool set_interval(uint32_t id, unsigned long val); - - int read_fd(uint32_t **ids); - int get_data(uint32_t id, sensor_data_t **data, int *length); - -private: - int m_node_handle; - sensor_data_t m_data; - unsigned long m_polling_interval; - unsigned long m_raw_interval; - unsigned long m_led_green_interval; - - bool m_interval_supported; - bool m_sensorhub_controlled; - int m_enable; - - hrm_raw_data_reader *m_reader; - - int m_method; - std::string m_data_node; - std::string m_enable_node; - std::string m_interval_node; - - std::string m_model_id; - std::string m_vendor; - std::string m_chip_name; - - std::vector event_ids; - - hrm_raw_data_reader* get_reader(const std::string& reader); -}; -#endif /* _HRM_RAW_DEVICE_H_ */ diff --git a/src/light/light_device.cpp b/src/light/light_device.cpp index 4a22bab..ffd3ce3 100644 --- a/src/light/light_device.cpp +++ b/src/light/light_device.cpp @@ -29,35 +29,38 @@ #include #include #include -#include + #include "light_device.h" -#define BIAS 1 +#define MODEL_NAME "maru_sensor_light_1" +#define VENDOR "Tizen_SDK" +#define MIN_RANGE 0 +#define MAX_RANGE 65536 +#define RESOLUTION 1 +#define RAW_DATA_UNIT 1 +#define MIN_INTERVAL 1 +#define MAX_BATCH_COUNT 0 #define SENSOR_NAME "SENSOR_LIGHT" - -/* ADC value received from Kernel */ -#define MODEL_ID_CAPELLA "CM36686" - #define SENSOR_TYPE_LIGHT "LIGHT" #define INPUT_NAME "light_sensor" #define LIGHT_SENSORHUB_POLL_NODE_NAME "light_poll_delay" -const static int light_level[] = {0, 1, 165, 288, 497, 869, 1532, 2692, 4692, 8280, 21428, 65535, 137852}; +#define BIAS 1 static sensor_info_t sensor_info = { id: 0x1, name: SENSOR_NAME, type: SENSOR_DEVICE_LIGHT, event_type: (SENSOR_DEVICE_LIGHT << SENSOR_EVENT_SHIFT) | RAW_DATA_EVENT, - model_name: UNKNOWN_NAME, - vendor: UNKNOWN_NAME, - min_range: 0, - max_range: 65536, - resolution: 1, - min_interval: 1, - max_batch_count: 0, + model_name: MODEL_NAME, + vendor: VENDOR, + min_range: MIN_RANGE, + max_range: MAX_RANGE, + resolution: RAW_DATA_UNIT, + min_interval: MIN_INTERVAL, + max_batch_count: MAX_BATCH_COUNT, wakeup_supported: false }; @@ -69,16 +72,10 @@ light_device::light_device() , m_sensorhub_controlled(false) { const std::string sensorhub_interval_node_name = LIGHT_SENSORHUB_POLL_NODE_NAME; - config::sensor_config &config = config::sensor_config::get_instance(); node_info_query query; node_info info; - if (!util::find_model_id(SENSOR_TYPE_LIGHT, m_model_id)) { - _E("Failed to find model id"); - throw ENXIO; - } - query.sensorhub_controlled = m_sensorhub_controlled = util::is_sensorhub_controlled(sensorhub_interval_node_name); query.sensor_type = SENSOR_TYPE_LIGHT; query.key = INPUT_NAME; @@ -97,20 +94,6 @@ light_device::light_device() m_enable_node = info.enable_node_path; m_interval_node = info.interval_node_path; - if (!config.get(SENSOR_TYPE_LIGHT, m_model_id, ELEMENT_VENDOR, m_vendor)) { - _E("[VENDOR] is empty"); - throw ENXIO; - } - - _I("m_vendor = %s", m_vendor.c_str()); - - if (!config.get(SENSOR_TYPE_LIGHT, m_model_id, ELEMENT_NAME, m_chip_name)) { - _E("[NAME] is empty"); - throw ENXIO; - } - - _I("m_chip_name = %s",m_chip_name.c_str()); - m_node_handle = open(m_data_node.c_str(), O_RDONLY); if (m_node_handle < 0) { @@ -118,20 +101,15 @@ light_device::light_device() throw ENXIO; } - if (m_method == INPUT_EVENT_METHOD) { - if (!util::set_monotonic_clock(m_node_handle)) - throw ENXIO; - - if (m_chip_name == MODEL_ID_CAPELLA) { - update_value = [=]() { - return this->update_value_adc(); - }; - } else { - update_value = [=]() { - return this->update_value_lux(); - }; - } - } + if (m_method != INPUT_EVENT_METHOD) + throw ENXIO; + + if (!util::set_monotonic_clock(m_node_handle)) + throw ENXIO; + + update_value = [=]() { + return this->update_value_lux(); + }; _I("light_device is created!"); } @@ -144,15 +122,13 @@ light_device::~light_device() _I("light_device is destroyed!"); } -int light_device::get_poll_fd() +int light_device::get_poll_fd(void) { return m_node_handle; } int light_device::get_sensors(const sensor_info_t **sensors) { - sensor_info.model_name = m_chip_name.c_str(); - sensor_info.vendor = m_vendor.c_str(); *sensors = &sensor_info; return 1; @@ -172,7 +148,7 @@ bool light_device::disable(uint32_t id) { util::set_enable_node(m_enable_node, m_sensorhub_controlled, false, SENSORHUB_LIGHT_ENABLE_BIT); - INFO("Disable light sensor"); + _I("Disable light sensor"); return true; } @@ -192,81 +168,6 @@ bool light_device::set_interval(uint32_t id, unsigned long val) return true; } -bool light_device::update_value_adc(void) -{ - int light_raw[2] = {0,}; - int als = -1; - int w = -1; - int lux = -1; - float i_cf = 0.0f; - bool adc, white; - int read_input_cnt = 0; - const int INPUT_MAX_BEFORE_SYN = 10; - unsigned long long fired_time = 0; - bool syn = false; - - adc = white = false; - - struct input_event light_input; - _D("light event detection!"); - - while ((syn == false) && (read_input_cnt < INPUT_MAX_BEFORE_SYN)) { - int len = read(m_node_handle, &light_input, sizeof(light_input)); - if (len != sizeof(light_input)) { - _E("light_file read fail, read_len = %d",len); - return false; - } - - ++read_input_cnt; - - if (light_input.type == EV_REL) { - switch (light_input.code) { - case REL_DIAL: - light_raw[0] = (int)light_input.value - BIAS; - adc = true; - break; - case REL_WHEEL: - light_raw[1] = (int)light_input.value - BIAS; - white = true; - break; - default: - _E("light_input event[type = %d, code = %d] is unknown.", light_input.type, light_input.code); - return false; - break; - } - } else if (light_input.type == EV_SYN) { - syn = true; - fired_time = util::get_timestamp(&light_input.time); - } else { - _E("light_input event[type = %d, code = %d] is unknown.", light_input.type, light_input.code); - return false; - } - } - - if (syn == false) { - _E("EV_SYN didn't come until %d inputs had come", read_input_cnt); - return false; - } - - if (adc && white) { - als = light_raw[0]; - w = (light_raw[1])? light_raw[1] : 1; - i_cf = als / (float) w; - if (i_cf >= 0.33f) { - lux = 0.6985f * pow(als, 0.9943f); - } else { - lux = 0.25f * pow(als, 1.0552f); - } - } - - _D("update_value_lux, lux : %d", lux); - - m_fired_time = fired_time; - m_lux = lux; - - return true; -} - bool light_device::update_value_lux(void) { int lux = -1; @@ -302,7 +203,7 @@ bool light_device::update_value_lux(void) int light_device::read_fd(uint32_t **ids) { if (!update_value()) { - DBG("Failed to update value"); + _D("Failed to update value"); return false; } @@ -316,7 +217,6 @@ int light_device::read_fd(uint32_t **ids) int light_device::get_data(uint32_t id, sensor_data_t **data, int *length) { - int remains = 1; sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); retvm_if(!sensor_data, -ENOMEM, "Memory allocation failed"); @@ -329,17 +229,5 @@ int light_device::get_data(uint32_t id, sensor_data_t **data, int *length) *data = sensor_data; *length = sizeof(sensor_data_t); - return --remains; -} - -int light_device::adc_to_light_level(int adc) -{ - int level_cnt = ARRAY_SIZE(light_level) - 1; - - for (int i = 0; i < level_cnt; ++i) { - if (adc >= light_level[i] && adc < light_level[i + 1]) - return i; - } - - return -1; + return 0; } diff --git a/src/light/light_device.h b/src/light/light_device.h index 4a1a71c..24f4bca 100644 --- a/src/light/light_device.h +++ b/src/light/light_device.h @@ -51,16 +51,10 @@ private: std::string m_data_node; std::string m_interval_node; - std::string m_model_id; - std::string m_vendor; - std::string m_chip_name; - std::function update_value; std::vector event_ids; - bool update_value_adc(void); bool update_value_lux(void); - int adc_to_light_level(int adc); }; #endif /* _LIGHT_DEVICE_H_ */ diff --git a/src/pressure/pressure_device.cpp b/src/pressure/pressure_device.cpp index c662636..ebcd6ba 100644 --- a/src/pressure/pressure_device.cpp +++ b/src/pressure/pressure_device.cpp @@ -28,19 +28,26 @@ #include #include #include -#include #include "pressure_device.h" #define SEA_LEVEL_RESOLUTION 0.01 #define SEA_LEVEL_PRESSURE 101325.0 #define SEA_LEVEL_EPSILON 0.00001 +#define MODEL_NAME "maru_sensor_pressure_1" +#define VENDOR "Tizen_SDK" +#define RESOLUTION 1 +#define RAW_DATA_UNIT 0.0193 +#define MIN_INTERVAL 1 +#define MIN_RANGE 260 +#define MAX_RANGE 1260 +#define TEMPERATURE_RESOLUTION 0.05 +#define TEMPERATURE_OFFSET 0 +#define MAX_BATCH_COUNT 0 + #define SENSOR_NAME "SENSOR_PRESSURE" #define SENSOR_TYPE_PRESSURE "PRESSURE" -#define ELEMENT_TEMPERATURE_RESOLUTION "TEMPERATURE_RESOLUTION" -#define ELEMENT_TEMPERATURE_OFFSET "TEMPERATURE_OFFSET" - #define INPUT_NAME "pressure_sensor" #define PRESSURE_SENSORHUB_POLL_NODE_NAME "pressure_poll_delay" @@ -49,40 +56,30 @@ static sensor_info_t sensor_info = { name: SENSOR_NAME, type: SENSOR_DEVICE_PRESSURE, event_type: (SENSOR_DEVICE_PRESSURE << SENSOR_EVENT_SHIFT) | RAW_DATA_EVENT, - model_name: UNKNOWN_NAME, - vendor: UNKNOWN_NAME, - min_range: 0, - max_range: 0, - resolution: 0, - min_interval: 0, - max_batch_count: 0, + model_name: MODEL_NAME, + vendor: VENDOR, + min_range: MIN_RANGE, + max_range: MAX_RANGE, + resolution: RAW_DATA_UNIT, + min_interval: MIN_INTERVAL, + max_batch_count: MAX_BATCH_COUNT, wakeup_supported: false }; pressure_device::pressure_device() : m_node_handle(-1) , m_pressure(0) -, m_resolution(0) , m_temperature(0) , m_sea_level_pressure(SEA_LEVEL_PRESSURE) -, m_temperature_resolution(0) -, m_temperature_offset(0) , m_polling_interval(1000) , m_fired_time(0) , m_sensorhub_controlled(false) { const std::string sensorhub_interval_node_name = PRESSURE_SENSORHUB_POLL_NODE_NAME; - config::sensor_config &config = config::sensor_config::get_instance(); node_info_query query; node_info info; - if (!util::find_model_id(SENSOR_TYPE_PRESSURE, m_model_id)) { - _E("Failed to find model id"); - throw ENXIO; - - } - query.sensorhub_controlled = m_sensorhub_controlled = util::is_sensorhub_controlled(sensorhub_interval_node_name); query.sensor_type = SENSOR_TYPE_PRESSURE; query.key = INPUT_NAME; @@ -101,69 +98,6 @@ pressure_device::pressure_device() m_enable_node = info.enable_node_path; m_interval_node = info.interval_node_path; - if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_VENDOR, m_vendor)) { - _E("[VENDOR] is empty\n"); - throw ENXIO; - } - - _I("m_vendor = %s", m_vendor.c_str()); - - if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_NAME, m_chip_name)) { - _E("[NAME] is empty\n"); - throw ENXIO; - } - - _I("m_chip_name = %s", m_chip_name.c_str()); - - double min_range; - - if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_MIN_RANGE, min_range)) { - _E("[MIN_RANGE] is empty\n"); - throw ENXIO; - } - - m_min_range = (float)min_range; - _I("m_min_range = %f\n",m_min_range); - - double max_range; - - if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_MAX_RANGE, max_range)) { - _E("[MAX_RANGE] is empty\n"); - throw ENXIO; - } - - m_max_range = (float)max_range; - _I("m_max_range = %f\n",m_max_range); - - double raw_data_unit; - - if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_RAW_DATA_UNIT, raw_data_unit)) { - _E("[RAW_DATA_UNIT] is empty\n"); - throw ENXIO; - } - - m_raw_data_unit = (float)(raw_data_unit); - _I("m_raw_data_unit = %f\n", m_raw_data_unit); - - double temperature_resolution; - if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_TEMPERATURE_RESOLUTION, temperature_resolution)) { - ERR("[TEMPERATURE_RESOLUTION] is empty\n"); - throw ENXIO; - } - - m_temperature_resolution = (float)temperature_resolution; - INFO("m_temperature_resolution = %f\n", m_temperature_resolution); - - double temperature_offset; - - if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_TEMPERATURE_OFFSET, temperature_offset)) { - ERR("[TEMPERATURE_OFFSET] is empty\n"); - throw ENXIO; - } - - m_temperature_offset = (float)temperature_offset; - INFO("m_temperature_offset = %f\n", m_temperature_offset); - m_node_handle = open(m_data_node.c_str(), O_RDONLY); if (m_node_handle < 0) { @@ -180,7 +114,7 @@ pressure_device::pressure_device() }; } - _I("pressure_device is created!\n"); + _I("pressure_device is created!"); } pressure_device::~pressure_device() @@ -188,7 +122,7 @@ pressure_device::~pressure_device() close(m_node_handle); m_node_handle = -1; - _I("pressure_device is destroyed!\n"); + _I("pressure_device is destroyed!"); } int pressure_device::get_poll_fd(void) @@ -198,13 +132,6 @@ int pressure_device::get_poll_fd(void) int pressure_device::get_sensors(const sensor_info_t **sensors) { - sensor_info.model_name = m_chip_name.c_str(); - sensor_info.vendor = m_vendor.c_str(); - sensor_info.min_range = m_min_range; - sensor_info.max_range = m_max_range; - sensor_info.resolution = m_raw_data_unit; - sensor_info.min_interval = 1; - sensor_info.max_batch_count = 0; *sensors = &sensor_info; return 1; @@ -216,7 +143,7 @@ bool pressure_device::enable(uint32_t id) set_interval(id, m_polling_interval); m_fired_time = 0; - INFO("Enable pressure sensor"); + _I("Enable pressure sensor"); return true; } @@ -224,9 +151,8 @@ bool pressure_device::disable(uint32_t id) { util::set_enable_node(m_enable_node, m_sensorhub_controlled, false, SENSORHUB_PRESSURE_ENABLE_BIT); - INFO("Disable pressure sensor"); + _I("Disable pressure sensor"); return true; - } bool pressure_device::set_interval(uint32_t id, unsigned long val) @@ -236,11 +162,11 @@ bool pressure_device::set_interval(uint32_t id, unsigned long val) polling_interval_ns = ((unsigned long long)(val) * 1000llu * 1000llu); if (!util::set_node_value(m_interval_node, polling_interval_ns)) { - ERR("Failed to set polling resource: %s\n", m_interval_node.c_str()); + _E("Failed to set polling resource: %s", m_interval_node.c_str()); return false; } - INFO("Interval is changed from %dms to %dms", m_polling_interval, val); + _I("Interval is changed from %dms to %dms", m_polling_interval, val); m_polling_interval = val; return true; } @@ -318,7 +244,7 @@ bool pressure_device::update_value_input_event(void) int pressure_device::read_fd(uint32_t **ids) { if (!update_value()) { - DBG("Failed to update value"); + _D("Failed to update value"); return false; } @@ -332,7 +258,6 @@ int pressure_device::read_fd(uint32_t **ids) int pressure_device::get_data(uint32_t id, sensor_data_t **data, int *length) { - int remains = 1; sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); retvm_if(!sensor_data, -ENOMEM, "Memory allocation failed"); @@ -349,15 +274,15 @@ int pressure_device::get_data(uint32_t id, sensor_data_t **data, int *length) *data = sensor_data; *length = sizeof(sensor_data_t); - return --remains; + return 0; } void pressure_device::raw_to_base(sensor_data_t *data) { - data->values[0] = data->values[0] * m_raw_data_unit; + data->values[0] = data->values[0] * RAW_DATA_UNIT; m_sea_level_pressure = data->values[1] * SEA_LEVEL_RESOLUTION; data->values[1] = pressure_to_altitude(data->values[0]); - data->values[2] = data->values[2] * m_temperature_resolution + m_temperature_offset; + data->values[2] = data->values[2] * TEMPERATURE_RESOLUTION + TEMPERATURE_OFFSET; } float pressure_device::pressure_to_altitude(float pressure) diff --git a/src/pressure/pressure_device.h b/src/pressure/pressure_device.h index 27f08bc..b377b1a 100644 --- a/src/pressure/pressure_device.h +++ b/src/pressure/pressure_device.h @@ -42,11 +42,8 @@ public: private: int m_node_handle; int m_pressure; - int m_resolution; int m_temperature; float m_sea_level_pressure; - float m_temperature_resolution; - float m_temperature_offset; unsigned long m_polling_interval; unsigned long long m_fired_time; bool m_sensorhub_controlled; @@ -56,14 +53,6 @@ private: std::string m_enable_node; std::string m_interval_node; - std::string m_model_id; - std::string m_vendor; - std::string m_chip_name; - - float m_min_range; - float m_max_range; - float m_raw_data_unit; - std::function update_value; std::vector event_ids; diff --git a/src/proxi/proxi_device.cpp b/src/proxi/proxi_device.cpp index 6b46117..569fa4e 100644 --- a/src/proxi/proxi_device.cpp +++ b/src/proxi/proxi_device.cpp @@ -27,14 +27,15 @@ #include #include #include -#include + #include "proxi_device.h" -#define MODEL_NAME "UNKNOWN" -#define VENDOR "UNKNOWN" +#define MODEL_NAME "maru_sensor_proxi_1" +#define VENDOR "Tizen_SDK" #define MIN_RANGE 0 #define MAX_RANGE 5 #define RESOLUTION 1 +#define RAW_DATA_UNIT 1 #define MIN_INTERVAL 1 #define MAX_BATCH_COUNT 0 @@ -55,7 +56,7 @@ static sensor_info_t sensor_info = { vendor: VENDOR, min_range: MIN_RANGE, max_range: MAX_RANGE, - resolution: RESOLUTION, + resolution: RAW_DATA_UNIT, min_interval: MIN_INTERVAL, max_batch_count: MAX_BATCH_COUNT, wakeup_supported: false @@ -68,17 +69,10 @@ proxi_device::proxi_device() , m_sensorhub_controlled(false) { const std::string sensorhub_interval_node_name = PROXI_SENSORHUB_POLL_NODE_NAME; - config::sensor_config &config = config::sensor_config::get_instance(); node_info_query query; node_info info; - if (!util::find_model_id(SENSOR_TYPE_PROXI, m_model_id)) { - _E("Failed to find model id"); - throw ENXIO; - - } - query.sensorhub_controlled = m_sensorhub_controlled = util::is_sensorhub_controlled(sensorhub_interval_node_name); query.sensor_type = SENSOR_TYPE_PROXI; query.key = INPUT_NAME; @@ -96,20 +90,6 @@ proxi_device::proxi_device() m_data_node = info.data_node_path; m_enable_node = info.enable_node_path; - if (!config.get(SENSOR_TYPE_PROXI, m_model_id, ELEMENT_VENDOR, m_vendor)) { - _E("[VENDOR] is empty"); - throw ENXIO; - } - - _I("m_vendor = %s", m_vendor.c_str()); - - if (!config.get(SENSOR_TYPE_PROXI, m_model_id, ELEMENT_NAME, m_chip_name)) { - _E("[NAME] is empty"); - throw ENXIO; - } - - _I("m_chip_name = %s",m_chip_name.c_str()); - m_node_handle = open(m_data_node.c_str(), O_RDONLY); if (m_node_handle < 0) { @@ -117,16 +97,17 @@ proxi_device::proxi_device() throw ENXIO; } - if (m_method == INPUT_EVENT_METHOD) { - if (!util::set_monotonic_clock(m_node_handle)) - throw ENXIO; + if (m_method != INPUT_EVENT_METHOD) + throw ENXIO; - update_value = [=]() { - return this->update_value_input_event(); - }; - } + if (!util::set_monotonic_clock(m_node_handle)) + throw ENXIO; + + update_value = [=]() { + return this->update_value_input_event(); + }; - _I("Proxi_sensor_hal is created!"); + _I("Proxi_device is created!"); } proxi_device::~proxi_device() @@ -134,7 +115,7 @@ proxi_device::~proxi_device() close(m_node_handle); m_node_handle = -1; - _I("Proxi_sensor_hal is destroyed!"); + _I("Proxi_device is destroyed!"); } int proxi_device::get_poll_fd(void) @@ -144,8 +125,6 @@ int proxi_device::get_poll_fd(void) int proxi_device::get_sensors(const sensor_info_t **sensors) { - sensor_info.model_name = m_chip_name.c_str(); - sensor_info.vendor = m_vendor.c_str(); *sensors = &sensor_info; return 1; @@ -156,7 +135,7 @@ bool proxi_device::enable(uint32_t id) util::set_enable_node(m_enable_node, m_sensorhub_controlled, true, SENSORHUB_PROXIMITY_ENABLE_BIT); m_fired_time = 0; - INFO("Enable proxi sensor"); + _I("Enable proxi sensor"); return true; } @@ -164,7 +143,7 @@ bool proxi_device::disable(uint32_t id) { util::set_enable_node(m_enable_node, m_sensorhub_controlled, false, SENSORHUB_PROXIMITY_ENABLE_BIT); - INFO("Disable proxi sensor"); + _I("Disable proxi sensor"); return true; } @@ -198,7 +177,7 @@ bool proxi_device::update_value_input_event(void) int proxi_device::read_fd(uint32_t **ids) { if (!update_value()) { - DBG("Failed to update value"); + _D("Failed to update value"); return false; } @@ -212,7 +191,6 @@ int proxi_device::read_fd(uint32_t **ids) int proxi_device::get_data(uint32_t id, sensor_data_t **data, int *length) { - int remains = 1; sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); retvm_if(!sensor_data, -ENOMEM, "Memory allocation failed"); @@ -225,5 +203,5 @@ int proxi_device::get_data(uint32_t id, sensor_data_t **data, int *length) *data = sensor_data; *length = sizeof(sensor_data_t); - return --remains; + return 0; } diff --git a/src/proxi/proxi_device.h b/src/proxi/proxi_device.h index 93f9e9a..2ddb5e4 100644 --- a/src/proxi/proxi_device.h +++ b/src/proxi/proxi_device.h @@ -53,10 +53,6 @@ private: std::string m_data_node; std::string m_enable_node; - std::string m_model_id; - std::string m_vendor; - std::string m_chip_name; - std::function update_value; std::vector event_ids; diff --git a/src/sensor_config.cpp b/src/sensor_config.cpp deleted file mode 100644 index d8b7c28..0000000 --- a/src/sensor_config.cpp +++ /dev/null @@ -1,317 +0,0 @@ -/* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace config; -using std::ifstream; -using std::string; -using std::istringstream; - -#define ROOT_ELEMENT "SENSOR" -#define TEXT_ELEMENT "text" -#define MODEL_ID_ATTR "id" -#define DEFAULT_ATTR "value" - -sensor_config::sensor_config() -{ -} - -sensor_config& sensor_config::get_instance(void) -{ - static bool load_done = false; - static sensor_config inst; - - if (load_done) - return inst; - - inst.load_config(); - inst.get_device_id(); - if (!inst.m_device_id.empty()) - _I("Device ID = %s", inst.m_device_id.c_str()); - else - _E("Failed to get Device ID"); - load_done = true; - - return inst; -} - -bool sensor_config::load_config(const string& config_path) -{ - xmlDocPtr doc; - xmlNodePtr cur; - - _D("sensor_config::load_config(\"%s\") is called!\n",config_path.c_str()); - - doc = xmlParseFile(config_path.c_str()); - - if (doc == NULL) { - _E("There is no %s\n",config_path.c_str()); - return false; - } - - cur = xmlDocGetRootElement(doc); - if(cur == NULL) { - _E("There is no root element in %s\n",config_path.c_str()); - xmlFreeDoc(doc); - return false; - } - - if(xmlStrcmp(cur->name, (const xmlChar *)ROOT_ELEMENT)) { - _E("Wrong type document: there is no [%s] root element in %s\n",ROOT_ELEMENT,config_path.c_str()); - xmlFreeDoc(doc); - return false; - } - - xmlNodePtr model_list_node_ptr; - xmlNodePtr model_node_ptr; - xmlNodePtr element_node_ptr; - xmlAttrPtr attr_ptr; - char* prop = NULL; - - model_list_node_ptr = cur->xmlChildrenNode; - - while (model_list_node_ptr != NULL) { - //skip garbage element, [text] - if (!xmlStrcmp(model_list_node_ptr->name,(const xmlChar *)TEXT_ELEMENT)) { - model_list_node_ptr = model_list_node_ptr->next; - continue; - } - - //insert Model_list to config map - m_sensor_config[(const char*)model_list_node_ptr->name]; - _D("<%s>\n",(const char*)model_list_node_ptr->name); - - model_node_ptr = model_list_node_ptr->xmlChildrenNode; - while (model_node_ptr != NULL){ - //skip garbage element, [text] - if (!xmlStrcmp(model_node_ptr->name,(const xmlChar *)TEXT_ELEMENT)) { - model_node_ptr = model_node_ptr->next; - continue; - } - - - string model_id; - prop = (char*)xmlGetProp(model_node_ptr,(const xmlChar*)MODEL_ID_ATTR); - model_id = prop; - free(prop); - - //insert Model to Model_list - m_sensor_config[(const char*)model_list_node_ptr->name][model_id]; - _D("<%s id=\"%s\">\n",(const char*)model_list_node_ptr->name,model_id.c_str()); - - element_node_ptr = model_node_ptr->xmlChildrenNode; - while (element_node_ptr != NULL) { - //skip garbage element, [text] - if (!xmlStrcmp(element_node_ptr->name,(const xmlChar *)TEXT_ELEMENT)) { - element_node_ptr = element_node_ptr->next; - continue; - } - - //insert Element to Model - m_sensor_config[(const char*)model_list_node_ptr->name][model_id][(const char*)element_node_ptr->name]; - _D("<%s id=\"%s\"><%s>\n",(const char*)model_list_node_ptr->name,model_id.c_str(),(const char*)element_node_ptr->name); - - attr_ptr = element_node_ptr->properties; - while (attr_ptr != NULL) { - - string key,value; - key = (const char*)attr_ptr->name; - prop = (char*)xmlGetProp(element_node_ptr,attr_ptr->name); - value = prop; - free(prop); - - //insert attribute to Element - m_sensor_config[(const char*)model_list_node_ptr->name][model_id][(const char*)element_node_ptr->name][key]=value; - _D("<%s id=\"%s\"><%s \"%s\"=\"%s\">\n",(const char*)model_list_node_ptr->name,model_id.c_str(),(const char*)element_node_ptr->name,key.c_str(),value.c_str()); - attr_ptr = attr_ptr->next; - } - - - element_node_ptr = element_node_ptr->next; - } - - _D("\n"); - model_node_ptr = model_node_ptr->next; - } - - _D("\n"); - model_list_node_ptr = model_list_node_ptr->next; - } - - xmlFreeDoc(doc); - return true; -} - - -bool sensor_config::get(const string& sensor_type,const string& model_id, const string& element, const string& attr, string& value) -{ - auto it_model_list = m_sensor_config.find(sensor_type); - - if (it_model_list == m_sensor_config.end()) { - _E("There is no <%s> element\n",sensor_type.c_str()); - return false; - } - - auto it_model = it_model_list->second.find(model_id); - - if (it_model == it_model_list->second.end()) { - _E("There is no <%s id=\"%s\"> element\n",sensor_type.c_str(),model_id.c_str()); - return false; - } - - auto it_element = it_model->second.find(element); - - if (it_element == it_model->second.end()) { - _D("There is no <%s id=\"%s\"><%s> element\n",sensor_type.c_str(),model_id.c_str(),element.c_str()); - return false; - } - - auto it_attr = it_element->second.find(attr); - - if (it_attr == it_element->second.end()) { - _D("There is no <%s id=\"%s\"><%s \"%s\">\n",sensor_type.c_str(),model_id.c_str(),element.c_str(),attr.c_str()); - return false; - } - - value = it_attr->second; - - return true; -} - -bool sensor_config::get(const string& sensor_type, const string& model_id, const string& element, const string& attr, double& value) -{ - string str_value; - - if (get(sensor_type,model_id,element,attr,str_value) == false) - return false; - - istringstream convert(str_value); - - if ( !(convert >> value)) - value = 0; - - return true; -} - -bool sensor_config::get(const string& sensor_type, const string& model_id, const string& element, const string& attr, long& value) -{ - string str_value; - - if (get(sensor_type,model_id,element,attr,str_value) == false) - return false; - - istringstream convert(str_value); - - if ( !(convert >> value)) - value = 0; - - return true; -} - -bool sensor_config::get(const string& sensor_type, const string& model_id, const string& element, string& value) -{ - if (get(sensor_type, model_id, element, m_device_id, value)) - return true; - - if (get(sensor_type, model_id, element, DEFAULT_ATTR, value)) - return true; - - return false; -} - -bool sensor_config::get(const string& sensor_type, const string& model_id, const string& element, double& value) -{ - if (get(sensor_type, model_id, element, m_device_id, value)) - return true; - - if (get(sensor_type, model_id, element, DEFAULT_ATTR, value)) - return true; - - return false; -} - -bool sensor_config::get(const string& sensor_type, const string& model_id, const string& element, long& value) -{ - if (get(sensor_type, model_id, element, m_device_id, value)) - return true; - - if (get(sensor_type, model_id, element, DEFAULT_ATTR, value)) - return true; - - return false; -} - -bool sensor_config::is_supported(const string& sensor_type,const string& model_id) -{ - auto it_model_list = m_sensor_config.find(sensor_type); - - if (it_model_list == m_sensor_config.end()) - return false; - - auto it_model = it_model_list->second.find(model_id); - - if (it_model == it_model_list->second.end()) - return false; - - return true; -} - -bool sensor_config::get_device_id(void) -{ - const string INFO_INI_PATH = "/etc/info.ini"; - const string START_DELIMETER = "Model="; - const string END_DELIMETER = ";"; - string line; - ifstream in_file; - std::size_t start_pos, end_pos; - bool ret = false; - - in_file.open(INFO_INI_PATH); - - if (!in_file.is_open()) - return false; - - while (!in_file.eof()) { - getline(in_file, line); - start_pos = line.find(START_DELIMETER); - - if (start_pos == std::string::npos) - continue; - - start_pos = start_pos + START_DELIMETER.size(); - end_pos = line.find(END_DELIMETER, start_pos); - - if (end_pos == std::string::npos) - continue; - - m_device_id = line.substr(start_pos, end_pos - start_pos); - ret = true; - break; - } - - in_file.close(); - - return ret; -} diff --git a/src/sensor_config.h b/src/sensor_config.h deleted file mode 100644 index eadc8b9..0000000 --- a/src/sensor_config.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifndef _SENSOR_CONFIG_H_ -#define _SENSOR_CONFIG_H_ - -#include -#include -#include - -#define CONFIG_FILE_PATH "/usr/etc/sensor.xml" - -#define ELEMENT_NAME "NAME" -#define ELEMENT_VENDOR "VENDOR" -#define ELEMENT_RAW_DATA_UNIT "RAW_DATA_UNIT" -#define ELEMENT_RESOLUTION "RESOLUTION" -#define ATTR_VALUE "value" -#define ELEMENT_MIN_RANGE "MIN_RANGE" -#define ELEMENT_MAX_RANGE "MAX_RANGE" - -typedef std::unordered_map Element; -/* -* an Element is a group of attributes -* -* -* "value" -> "LSM330DLC" -* -*/ - -typedef std::unordered_map Model; -/* -* a Model is a group of elements to consist of specific vendor's one sensor configuration -* -* -* -* -* -* -> -* -*/ - -typedef std::unordered_map Model_list; -/* -* a Model_list is a group of Model -* -* -* -* -* -* "lsm330dlc_accel" -> -* -*/ - -typedef std::unordered_map Sensor_config; -/* -* a SensorConfig represents sensors.xml -* -* -* -* -* "ACCEL" -> Model_list -* -*/ - -namespace config { - class sensor_config { - private: - sensor_config(); - sensor_config(sensor_config const&) {}; - sensor_config& operator=(sensor_config const&); - bool load_config(const std::string& config_path = CONFIG_FILE_PATH); - Sensor_config m_sensor_config; - std::string m_device_id; - public: - static sensor_config& get_instance(void); - - bool get(const std::string& sensor_type, const std::string& model_id, const std::string& element, const std::string& attr, std::string& value); - bool get(const std::string& sensor_type, const std::string& model_id, const std::string& element, const std::string& attr, double& value); - bool get(const std::string& sensor_type, const std::string& model_id, const std::string& element, const std::string& attr, long& value); - - bool get(const std::string& sensor_type, const std::string& model_id, const std::string& element, std::string& value); - bool get(const std::string& sensor_type, const std::string& model_id, const std::string& element, double& value); - bool get(const std::string& sensor_type, const std::string& model_id, const std::string& element, long& value); - - bool is_supported(const std::string &sensor_type, const std::string &model_id); - bool get_device_id(void); - }; -} -#endif /* _SENSOR_CONFIG_H_ */ diff --git a/src/ultraviolet/uv_device.cpp b/src/ultraviolet/uv_device.cpp index eec4f78..dd75cc2 100644 --- a/src/ultraviolet/uv_device.cpp +++ b/src/ultraviolet/uv_device.cpp @@ -27,15 +27,24 @@ #include #include #include -#include + #include "uv_device.h" -#define UNKNOWN_NAME "UNKNOWN" -#define SENSOR_NAME "ULTRAVIOLET_SENSOR" +#define MODEL_NAME "maru_sensor_uv_1" +#define VENDOR "Tizen_SDK" +#define MIN_RANGE 0 +#define MAX_RANGE 15 +#define RESOLUTION 1 +#define RAW_DATA_UNIT 0.1 +#define MIN_INTERVAL 1 +#define MAX_BATCH_COUNT 0 +#define SENSOR_NAME "ULTRAVIOLET_SENSOR" #define SENSOR_TYPE_ULTRAVIOLET "ULTRAVIOLET" -#define UV_SENSORHUB_POLL_NODE_NAME "uv_poll_dealy" + #define INPUT_NAME "uv_sensor" +#define UV_SENSORHUB_POLL_NODE_NAME "uv_poll_dealy" + #define IIO_ENABLE_NAME "uv_enable" #define BIAS 1 @@ -45,39 +54,28 @@ static sensor_info_t sensor_info = { name: SENSOR_NAME, type: SENSOR_DEVICE_ULTRAVIOLET, event_type: (SENSOR_DEVICE_ULTRAVIOLET << SENSOR_EVENT_SHIFT) | RAW_DATA_EVENT, - model_name: UNKNOWN_NAME, - vendor: UNKNOWN_NAME, - min_range: 0, - max_range: 0, - resolution: 0, - min_interval: 0, - max_batch_count: 0, + model_name: MODEL_NAME, + vendor: VENDOR, + min_range: MIN_RANGE, + max_range: MAX_RANGE, + resolution: RAW_DATA_UNIT, + min_interval: MIN_INTERVAL, + max_batch_count: MAX_BATCH_COUNT, wakeup_supported: false }; -std::vector uv_device::event_ids; - uv_device::uv_device() : m_node_handle(-1) , m_ultraviolet(0) , m_polling_interval(1000) , m_fired_time(0) -, m_raw_data_unit(0) -, m_min_range(0) -, m_max_range(0) , m_sensorhub_controlled(false) { const std::string sensorhub_interval_node_name = UV_SENSORHUB_POLL_NODE_NAME; - config::sensor_config &config = config::sensor_config::get_instance(); node_info_query query; node_info info; - if (!util::find_model_id(SENSOR_TYPE_ULTRAVIOLET, m_model_id)) { - _E("Failed to find model id"); - throw ENXIO; - } - query.sensorhub_controlled = m_sensorhub_controlled = util::is_sensorhub_controlled(sensorhub_interval_node_name); query.sensor_type = SENSOR_TYPE_ULTRAVIOLET; query.key = INPUT_NAME; @@ -96,67 +94,24 @@ uv_device::uv_device() m_enable_node = info.enable_node_path; m_interval_node = info.interval_node_path; - if (!config.get(SENSOR_TYPE_ULTRAVIOLET, m_model_id, ELEMENT_VENDOR, m_vendor)) { - _E("[VENDOR] is empty"); - throw ENXIO; - } - - _I("m_vendor = %s", m_vendor.c_str()); - - if (!config.get(SENSOR_TYPE_ULTRAVIOLET, m_model_id, ELEMENT_NAME, m_chip_name)) { - _E("[NAME] is empty"); - throw ENXIO; - } - - _I("m_chip_name = %s",m_chip_name.c_str()); - - double min_range; - - if (!config.get(SENSOR_TYPE_ULTRAVIOLET, m_model_id, ELEMENT_MIN_RANGE, min_range)) { - ERR("[MIN_RANGE] is empty\n"); - throw ENXIO; - } - - m_min_range = (float)min_range; - INFO("m_min_range = %f\n",m_min_range); - - double max_range; + m_node_handle = open(m_data_node.c_str(), O_RDONLY); - if (!config.get(SENSOR_TYPE_ULTRAVIOLET, m_model_id, ELEMENT_MAX_RANGE, max_range)) { - ERR("[MAX_RANGE] is empty\n"); + if (m_node_handle < 0) { + _ERRNO(errno, _E, "uv handle open fail for uv device"); throw ENXIO; } - m_max_range = (float)max_range; - INFO("m_max_range = %f\n",m_max_range); - - double raw_data_unit; - - if (!config.get(SENSOR_TYPE_ULTRAVIOLET, m_model_id, ELEMENT_RAW_DATA_UNIT, raw_data_unit)) { - _E("[RAW_DATA_UNIT] is empty"); + if (m_method != INPUT_EVENT_METHOD) throw ENXIO; - } - - m_raw_data_unit = (float)(raw_data_unit); - _I("m_raw_data_unit = %f", m_raw_data_unit); - - m_node_handle = open(m_data_node.c_str(), O_RDONLY); - if (m_node_handle < 0) { - _ERRNO(errno, _E, "uv handle open fail for uv processor"); + if (!util::set_monotonic_clock(m_node_handle)) throw ENXIO; - } - - if (m_method == INPUT_EVENT_METHOD) { - if (!util::set_monotonic_clock(m_node_handle)) - throw ENXIO; - } update_value = [=]() { return this->update_value_input_event(); }; - _I("uv_sensor is created!"); + _I("uv_device is created!"); } uv_device::~uv_device() @@ -167,20 +122,13 @@ uv_device::~uv_device() _I("uv_sensor is destroyed!"); } -int uv_device::get_poll_fd() +int uv_device::get_poll_fd(void) { return m_node_handle; } int uv_device::get_sensors(const sensor_info_t **sensors) { - sensor_info.model_name = m_chip_name.c_str(); - sensor_info.vendor = m_vendor.c_str(); - sensor_info.min_range = m_min_range; - sensor_info.max_range = m_max_range; - sensor_info.resolution = m_raw_data_unit; - sensor_info.min_interval = 1; - sensor_info.max_batch_count = 0; *sensors = &sensor_info; return 1; @@ -280,7 +228,6 @@ int uv_device::read_fd(uint32_t **ids) int uv_device::get_data(uint32_t id, sensor_data_t **data, int *length) { - int remains = 1; sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); retvm_if(!sensor_data, -ENOMEM, "Memory allocation failed"); @@ -295,10 +242,10 @@ int uv_device::get_data(uint32_t id, sensor_data_t **data, int *length) *data = sensor_data; *length = sizeof(sensor_data_t); - return --remains; + return 0; } void uv_device::raw_to_base(sensor_data_t *data) { - data->values[0] = data->values[0] * m_raw_data_unit; + data->values[0] = data->values[0] * RAW_DATA_UNIT; } diff --git a/src/ultraviolet/uv_device.h b/src/ultraviolet/uv_device.h index 31106d5..85f5a4e 100644 --- a/src/ultraviolet/uv_device.h +++ b/src/ultraviolet/uv_device.h @@ -44,9 +44,6 @@ private: int m_ultraviolet; unsigned long m_polling_interval; unsigned long long m_fired_time; - float m_raw_data_unit; - float m_min_range; - float m_max_range; bool m_sensorhub_controlled; int m_method; @@ -54,13 +51,9 @@ private: std::string m_enable_node; std::string m_interval_node; - std::string m_model_id; - std::string m_vendor; - std::string m_chip_name; - std::function update_value; - static std::vector event_ids; + std::vector event_ids; bool update_value_input_event(void); diff --git a/src/util.cpp b/src/util.cpp index a54149c..345b8b4 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include using std::ifstream; @@ -227,59 +226,6 @@ bool util::set_monotonic_clock(int fd) return true; } -bool util::find_model_id(const string &sensor_type, string &model_id) -{ - std::string dir_path = "/sys/class/sensors/"; - std::string name_node, name; - std::string d_name; - DIR *dir = NULL; - struct dirent dir_entry; - struct dirent *result = NULL; - int error; - bool find = false; - - dir = opendir(dir_path.c_str()); - if (!dir) { - _D("Failed to open dir: %s", dir_path.c_str()); - return false; - } - - while (true) { - error = readdir_r(dir, &dir_entry, &result); - - if (error != 0) - continue; - - if (result == NULL) - break; - - d_name = std::string(dir_entry.d_name); - - if ((d_name == ".") || (d_name == "..") || (dir_entry.d_ino == 0)) - continue; - - name_node = dir_path + d_name + string("/name"); - - ifstream infile(name_node.c_str()); - - if (!infile) - continue; - - infile >> name; - - if (!config::sensor_config::get_instance().is_supported(sensor_type, name)) - continue; - - model_id = name; - find = true; - break; - } - - closedir(dir); - - return find; -} - bool util::set_enable_node(const string &node_path, bool sensorhub_controlled, bool enable, int enable_bit) { int prev_status, status; diff --git a/src/util.h b/src/util.h index 5c13a85..d799b22 100644 --- a/src/util.h +++ b/src/util.h @@ -53,7 +53,6 @@ typedef struct { namespace util { bool set_monotonic_clock(int fd); - bool find_model_id(const std::string &sensor_type, std::string &model_id); bool set_enable_node(const std::string &node_path, bool sensorhub_controlled, bool enable, int enable_bit = 0); unsigned long long get_timestamp(void); -- 2.7.4 From cbdc8ae066a326ab1f6939ca9908e771fcda21de Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Thu, 30 Jun 2016 11:34:42 +0900 Subject: [PATCH 06/16] sensor-hal: emul: version 1.0.3 Change-Id: I1bd6069c651f9ae7e1d75b61801c88ebb79bb7b0 Signed-off-by: kibak.yoon --- packaging/sensor-hal-emulator.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/sensor-hal-emulator.spec b/packaging/sensor-hal-emulator.spec index f869e3a..716780b 100644 --- a/packaging/sensor-hal-emulator.spec +++ b/packaging/sensor-hal-emulator.spec @@ -1,6 +1,6 @@ Name: sensor-hal-emulator Summary: Emulator Sensor HAL -Version: 1.0.0 +Version: 1.0.3 Release: 0 Group: Service/Sensor License: Apache-2.0 -- 2.7.4 From 529880d7bec292b5cb35fa51d7ce9bb1a038baa0 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Mon, 31 Oct 2016 14:54:44 +0900 Subject: [PATCH 07/16] sensor-hal-emul: change libdir to the hard coded path(/usr/lib) for udev udev uses the fixed path(/usr/lib/udev/rules.d) regardless of 32/64bit platform. Change-Id: I90733781729e404fbe639de50ad5718f7da9d74a Signed-off-by: kibak.yoon --- packaging/sensor-hal-emulator.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packaging/sensor-hal-emulator.spec b/packaging/sensor-hal-emulator.spec index 716780b..53cb2a6 100644 --- a/packaging/sensor-hal-emulator.spec +++ b/packaging/sensor-hal-emulator.spec @@ -31,9 +31,9 @@ make %{?jobs:-j%jobs} rm -rf %{buildroot} %make_install -mkdir -p %{buildroot}%{_libdir}/udev/rules.d +mkdir -p %{buildroot}/usr/lib/udev/rules.d -install -m 0644 %SOURCE1 %{buildroot}%{_libdir}/udev/rules.d +install -m 0644 %SOURCE1 %{buildroot}/usr/lib/udev/rules.d %post /sbin/ldconfig @@ -43,6 +43,6 @@ install -m 0644 %SOURCE1 %{buildroot}%{_libdir}/udev/rules.d %files %manifest packaging/%{name}.manifest -%{_libdir}/udev/rules.d/99-sensor.rules +/usr/lib/udev/rules.d/99-sensor.rules %{_libdir}/sensor/*.so %{_datadir}/license/sensor-hal-emulator -- 2.7.4 From 6d4080e3537e72dbe0565a6d635ed1871868a985 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Thu, 23 Feb 2017 15:27:31 +0900 Subject: [PATCH 08/16] sensor: modify sensor udev rule - the node providing the specific event(e.g., HWHEEL, WHEEL) is assumed to be INPUT_KEY by systemd. - so this patch modify the rule so that it is not skipped. - systemd udev patch :- https://lists.freedesktop.org/archives/systemd-devel/2015-April/030662.html Change-Id: I88e707d410a92cfb893e7a1a55f26e56224ee7d0 Signed-off-by: kibak.yoon --- packaging/99-sensor.rules | 1 - 1 file changed, 1 deletion(-) diff --git a/packaging/99-sensor.rules b/packaging/99-sensor.rules index 3d07132..b7479c6 100644 --- a/packaging/99-sensor.rules +++ b/packaging/99-sensor.rules @@ -1,7 +1,6 @@ SUBSYSTEM!="input", GOTO="sensor_rules_end" ENV{ID_INPUT_TOUCHPAD}=="1", GOTO="sensor_rules_end" ENV{ID_INPUT_TOUCHSCREEN}=="1", GOTO="sensor_rules_end" -ENV{ID_INPUT_KEY}=="1", GOTO="sensor_rules_end" ENV{ID_INPUT_KEYPAD}=="1", GOTO="sensor_rules_end" ENV{ID_INPUT_KEYBOARD}=="1", GOTO="sensor_rules_end" ENV{ID_INPUT_MOUSE}=="1", GOTO="sensor_rules_end" -- 2.7.4 From d984fa14ec2e2d4b590f0939a7d36b522cd88007 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 13 Dec 2016 18:39:07 +0900 Subject: [PATCH 09/16] sensor-hal: emul: enable pedometer sensor Change-Id: I7fc17769f3ee7ef259115f48868400621c3811c8 Signed-off-by: kibak.yoon --- CMakeLists.txt | 3 ++- packaging/99-sensorhub.rules | 9 +++++++++ packaging/sensor-hal-emulator.spec | 13 ++++++++++++- src/sensorhub/CMakeLists.txt | 8 ++++++++ src/sensorhub/libsensorhub-hal.i586.so | Bin 0 -> 109764 bytes src/sensorhub/libsensorhub-hal.x86_64.so | Bin 0 -> 112240 bytes 6 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 packaging/99-sensorhub.rules create mode 100644 src/sensorhub/CMakeLists.txt create mode 100755 src/sensorhub/libsensorhub-hal.i586.so create mode 100755 src/sensorhub/libsensorhub-hal.x86_64.so diff --git a/CMakeLists.txt b/CMakeLists.txt index 81fdd9a..67ac67d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ SET(TEMP_HUMIDITY "OFF") SET(ULTRAVIOLET "ON") SET(DUST "OFF") SET(GSR "OFF") -SET(SENSORHUB "OFF") +SET(SENSORHUB "ON") # Common Options SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2 -omit-frame-pointer -std=gnu++0x") @@ -148,6 +148,7 @@ ENDIF() IF("${SENSORHUB}" STREQUAL "ON") FILE(GLOB_RECURSE SRCS ${SRCS} src/sensorhub/*.cpp) ADD_DEFINITIONS(-DENABLE_SENSORHUB) +ADD_SUBDIRECTORY(src/sensorhub) ENDIF() MESSAGE("Sources: ${SRCS}") diff --git a/packaging/99-sensorhub.rules b/packaging/99-sensorhub.rules new file mode 100644 index 0000000..0a6d476 --- /dev/null +++ b/packaging/99-sensorhub.rules @@ -0,0 +1,9 @@ +SUBSYSTEMS=="sensors", DEVPATH=="*ssp_sensor*", \ +RUN+="/bin/sh -c '/bin/chown :input %S/%p/enable %S/%p/set_cal_data %S/%p/*_poll_delay'" + +SUBSYSTEMS=="sensors", DEVPATH=="*ssp_sensor*", \ +RUN+="/bin/sh -c '/bin/chsmack -a \* %S/%p/enable %S/%p/set_cal_data %S/%p/*_poll_delay'" + +DEVPATH=="/devices/virtual/ssp_sensorhub/ssp_sensorhub", \ +ENV{DEVNAME}=="/dev/ssp_sensorhub", GROUP="input", SECLABEL{smack}="*" + diff --git a/packaging/sensor-hal-emulator.spec b/packaging/sensor-hal-emulator.spec index 53cb2a6..3651ce0 100644 --- a/packaging/sensor-hal-emulator.spec +++ b/packaging/sensor-hal-emulator.spec @@ -6,6 +6,7 @@ Group: Service/Sensor License: Apache-2.0 Source0: %{name}-%{version}.tar.gz Source1: 99-sensor.rules +Source2: 99-sensorhub.rules ExcludeArch: %{arm} aarch64 @@ -13,6 +14,14 @@ BuildRequires: cmake BuildRequires: pkgconfig(dlog) BuildRequires: sensor-hal-devel +%ifarch %ix86 +%define _arch x86 +%endif + +%ifarch %ix86_64 +%define _arch x86_64 +%endif + %description Emulator Sensor HAL @@ -24,7 +33,7 @@ export CXXFLAGS+=" -Wextra -Wcast-align -Wcast-qual -Wshadow -Wwrite-strings -Ws export CXXFLAGS+=" -Wnon-virtual-dtor -Wno-c++0x-compat -Wno-unused-parameter -Wno-empty-body" export CXXFLAGS+=" -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-strict-aliasing" export CXXFLAGS+=" -fno-unroll-loops -fsigned-char -fstrict-overflow" -cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} +cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DBUILD_ARCH=%{_arch} make %{?jobs:-j%jobs} %install @@ -34,6 +43,7 @@ rm -rf %{buildroot} mkdir -p %{buildroot}/usr/lib/udev/rules.d install -m 0644 %SOURCE1 %{buildroot}/usr/lib/udev/rules.d +install -m 0644 %SOURCE2 %{buildroot}/usr/lib/udev/rules.d %post /sbin/ldconfig @@ -44,5 +54,6 @@ install -m 0644 %SOURCE1 %{buildroot}/usr/lib/udev/rules.d %files %manifest packaging/%{name}.manifest /usr/lib/udev/rules.d/99-sensor.rules +/usr/lib/udev/rules.d/99-sensorhub.rules %{_libdir}/sensor/*.so %{_datadir}/license/sensor-hal-emulator diff --git a/src/sensorhub/CMakeLists.txt b/src/sensorhub/CMakeLists.txt new file mode 100644 index 0000000..01c0254 --- /dev/null +++ b/src/sensorhub/CMakeLists.txt @@ -0,0 +1,8 @@ +IF("${BUILD_ARCH}" STREQUAL "x86") + INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/libsensorhub-hal.i586.so DESTINATION ${CMAKE_INSTALL_LIBDIR}/sensor) +ENDIF() + +IF("${BUILD_ARCH}" STREQUAL "x86_64") + INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/libsensorhub-hal.x86_64.so DESTINATION ${CMAKE_INSTALL_LIBDIR}/sensor) +ENDIF() + diff --git a/src/sensorhub/libsensorhub-hal.i586.so b/src/sensorhub/libsensorhub-hal.i586.so new file mode 100755 index 0000000000000000000000000000000000000000..d053f64e3684886c4bbafed3b101004431ab0951 GIT binary patch literal 109764 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 MrI+clA)1f>2a=&_m;e9( literal 0 HcmV?d00001 diff --git a/src/sensorhub/libsensorhub-hal.x86_64.so b/src/sensorhub/libsensorhub-hal.x86_64.so new file mode 100755 index 0000000000000000000000000000000000000000..b3dac4e0fbe4c4c1eda1a39d713498ba7accc9d8 GIT binary patch literal 112240 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 L-w?n&;8yy7#)Su| literal 0 HcmV?d00001 -- 2.7.4 From edb6ea50d7821f156b9f53818dd79cd4034ab728 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 22 Mar 2017 13:27:51 +0900 Subject: [PATCH 10/16] sensor-hal: emul: update the license macro and date Change-Id: Ie94ad5884ffbc86f17fa0f04231609b63c9be1ab Signed-off-by: kibak.yoon --- CMakeLists.txt | 1 - LICENSE.APLv2 | 2 +- packaging/sensor-hal-emulator.spec | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 67ac67d..16741d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -155,5 +155,4 @@ MESSAGE("Sources: ${SRCS}") ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS}) TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${HAL_PKGS_LDFLAGS}) -INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.APLv2 DESTINATION share/license RENAME ${PROJECT_NAME}) INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR}/sensor) diff --git a/LICENSE.APLv2 b/LICENSE.APLv2 index 6b17abb..bbb021e 100644 --- a/LICENSE.APLv2 +++ b/LICENSE.APLv2 @@ -1,4 +1,4 @@ -Copyright (c) 2015 - 2016 Samsung Electronics Co., Ltd. All rights reserved. +Copyright (c) 2015 - 2017 Samsung Electronics Co., Ltd. All rights reserved. Apache License Version 2.0, January 2004 diff --git a/packaging/sensor-hal-emulator.spec b/packaging/sensor-hal-emulator.spec index 3651ce0..b372632 100644 --- a/packaging/sensor-hal-emulator.spec +++ b/packaging/sensor-hal-emulator.spec @@ -56,4 +56,4 @@ install -m 0644 %SOURCE2 %{buildroot}/usr/lib/udev/rules.d /usr/lib/udev/rules.d/99-sensor.rules /usr/lib/udev/rules.d/99-sensorhub.rules %{_libdir}/sensor/*.so -%{_datadir}/license/sensor-hal-emulator +%license LICENSE.APLv2 -- 2.7.4 From 3859db699fa7dcf8f39d96a16217ccaec9525652 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Fri, 19 May 2017 18:33:33 +0900 Subject: [PATCH 11/16] sensor-hal: emul: remove key-related tags from sensor input devices Change-Id: Ib497fcefee4b28eddc01778043713d40b4a58e3d Signed-off-by: kibak.yoon --- packaging/99-sensor.rules | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/packaging/99-sensor.rules b/packaging/99-sensor.rules index b7479c6..3799e36 100644 --- a/packaging/99-sensor.rules +++ b/packaging/99-sensor.rules @@ -1,12 +1,13 @@ SUBSYSTEM!="input", GOTO="sensor_rules_end" -ENV{ID_INPUT_TOUCHPAD}=="1", GOTO="sensor_rules_end" -ENV{ID_INPUT_TOUCHSCREEN}=="1", GOTO="sensor_rules_end" -ENV{ID_INPUT_KEYPAD}=="1", GOTO="sensor_rules_end" -ENV{ID_INPUT_KEYBOARD}=="1", GOTO="sensor_rules_end" -ENV{ID_INPUT_MOUSE}=="1", GOTO="sensor_rules_end" -ENV{ID_INPUT_JOYSTICK}=="1", GOTO="sensor_rules_end" +ATTRS{poll_delay}!="", ENV{ID_INPUT_KEY}="" +ATTRS{poll_delay}!="", ENV{ID_INPUT_KEYPAD}="" +ATTRS{poll_delay}!="", ENV{ID_INPUT_KEYBOARD}="" +ATTRS{poll_delay}!="", ENV{ID_INPUT_TOUCHPAD}="" +ATTRS{poll_delay}!="", ENV{ID_INPUT_TOUCHSCREEN}="" +ATTRS{poll_delay}!="", ENV{ID_INPUT_MOUSE}="" +ATTRS{poll_delay}!="", ENV{ID_INPUT_JOYSTICK}="" -SUBSYSTEM=="input", ACTION=="add", RUN+="/bin/chown sensor:input %S/%p/enable %S/%p/poll_delay" -SUBSYSTEM=="input", ACTION=="add", RUN+="/bin/chsmack -a * %S/%p/enable %S/%p/poll_delay" +ATTRS{poll_delay}!="", ACTION=="add", RUN+="/bin/chown sensor:input %S/%p/enable %S/%p/poll_delay" +ATTRS{poll_delay}!="", ACTION=="add", RUN+="/bin/chsmack -a * %S/%p/enable %S/%p/poll_delay" LABEL="sensor_rules_end" -- 2.7.4 From a6025191a511dca6474120032574458f5faf685f Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Thu, 20 Jul 2017 18:11:33 +0900 Subject: [PATCH 12/16] sensor: lib: rebuild so libraries with toolchain ABI update base repo : http://download.tizen.org/snapshots/tizen/base/tizen-base_20170711.1 Change-Id: If0e6fadbfd0a8a75ff89e70eeb30175dabeac706 Signed-off-by: kibak.yoon --- src/sensorhub/libsensorhub-hal.i586.so | Bin 109764 -> 108664 bytes src/sensorhub/libsensorhub-hal.x86_64.so | Bin 112240 -> 114192 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/sensorhub/libsensorhub-hal.i586.so b/src/sensorhub/libsensorhub-hal.i586.so index d053f64e3684886c4bbafed3b101004431ab0951..8b48fec6060a621488799510caa000d91e5a7882 100755 GIT binary patch literal 108664 zcmeEv4PaGe{r|ZzaO(6v7%J*;w4qT=B%4Y(i|njXE+IuB`F}p&=Q;PDdv}NATmAa~uAY6* z_j&z3-?!)WJbXJadA!f(Gu&Taqpv}%X_;YU0(Rf4;xdg?;}~O*afXp1@osv;13&P| z(~n59A@SqZ`HXQ7s%K??!$>>EFaRXJ55VlZe8%jbswWv$@L_y{eg*({pEQK=apSW8 z6fBrsfxP-jL&bdD_$v{QXH%3*TKk3G= zg*GKsoImZJ=Sr_TZTrG!k3qtrc&bX62k=y=AmatVoA7)Nc_-?yK^lG;@Gd+a z)zvWy+yQVd^6@td&pCL15bzQ_JMlE(NyNk7i8>wMAHvfI_&Y>me!l@eS%+Py^Sle3 zdJ1zfet_o*9luUPg74#b7SH)e_axvTofogh0z9waS&gSZ!cPI5iswssUcy6#Ovm#z zyq>1>oej7R_!vBo;dvVme?t(S3D_!_Vf-HOSe+*c@LnBGa2D{3HJ$|M=y!q*`u%DR zFVJOt5%}|X_TzaN&mZy74t@d1-!%#tm4K-T?*_a_hkZqtF<8T!5#Frh_5!|&XT8S9 z1FpbhYy3;db5OsZg!dF(#?KJ;4?Jt}48U_A9{2Y?UjB*auXuj!25LA8FbB^tJg?*N zqr9)`GWP)w;NkCVJYU80GM+!+X~E{Wwqj zN&0=PCycM3_u$h!??XNB?(1m0BgGzFy(MS9;$0S{Q@Jq9y{)#WO=kd^q!0+kz zRe*QnsmHTWhq>T~c$w)U9(V%YQ#Aflz|-+$X?&}OzXtp{p7ZhiNQZq+LxP}wzf!{~ zfOU9AX#ATRmTP#6hTqVTpr3w!0B{eUbd9?p0WZVxY}WyQb0Yxn#PeH?|4GB=G+YDt zJ3PBJUIh3Qo(??sbeI?X zMI&F(m9+u?A3P;^IOZCt!yAED7OpNu8WLHkdCeqYDm2?tUIX3_^SJxCA#SYG28(0heX`WD8&0(#va`8U|( zV44077;ys(<64x%`W_hxeqi80zr*|oVLWY6TJ|@LUpgLbukgwE;cVkXhz;Xxc;&H%c$7;NBoIPQQnn4gSN!-|AF#$JgORzY<$j0>F=gyykQ)d8No^aayaVj zmz4f8f4#?$n7+l+UgA%If7uum+=X|h?*sm|P4*ezMLOc!Pep|OvHa>JjBUTG#uIGs z-(%Wy59m+Ad?FcXsUNLbIx_(4dkYRH`3|Mm%s+YvAO5e zAAbe<+#l)PF~r4KKITB@fPW7~?4>ge<-zH>{2dx2k6l@YvFiq(^h@OL_3%H9sNdC> zSD?S$(BDT;HtD|z{vsRl1{(!`0qw0rdntdm|16Z}{z%VSkNpr|bb%YI=>0wlYV*kB z#F+TUJo4^1@^ld`^CJ#UF^Y~lR_pKOvJ|FT)pXQT! zHp~BdmM#o{e=@8?M0_F%+6ybFEp0KYh1VE*H?@S=arKlfM{Q{_Dd{mHt@Cw(*1 zw^RO@_`;1y{*})>#leG-HFEF82P88ePzEfjCt^DEN?9AbF#-@yfy~y z%k~)%xx~K!SQk>`Rm%U5;8z;>4YwlxZUgFTKz*kOexmW9ANI34Vy}HrejWM`ik92(RQsG|*A)feM;78rl7<=pXuRPT)O^sJ>kDy48yfOZD<`C!$`iCmSvAp-e4{!Ou zLA~7=EZu{6(&GpHb(jFIK)ac~%+r4A*IVFED)iw*UEXUk_FM<~rw{iT-_-FpqW&z{ zOO?iVQr^RS#uSa;1p9S=q<@{KKH_g>z$ZW-UHP2?`rRMnzY6|$pgg)E(yL8Pk}!TP z^kau-ymcK5(m%#8K>tyKc(^&ykJDr1vj_g${W1N;D6awIA7qpI8sKlbXZmEVf&8=R zpLT;snt$xaA1uco{7%L!YB~hp@mu&89sj_W;g27~Iuh)N^gjke=^pBnwG!f=@2B#r z{IJ&;efsNIq{sNsZGX!E*xMSc2fz-PKR=S)NX7d!B|Wq3KXHO#6g`H@@Jq%l{tswhI_z&2aHc=qLm$h#DaO98gZ<2czPjVH zju`#e8I%6FG4P+zSE>!`-+~Tl?p=}o@@p~js7OLW{bT)SKp(v0sru6)uMLs>yWkJJ z^OHpCzy2}*q4D1F_veiPG403w$F#R) zIP~KSKGA!&cPAaK{;|Bzf&QwyvBsI8_^~mj{z34sjo&kjAL{tGvM|r}@Vf-|nGFAT z0?K0fPa)p@k^aZvU*?|YleJ66x5FPMd*)xq41qqtzb{5w#vi8sV=>W{&$-~Ifq2r& z_~GDZ_p54cm-yB2*Is==R~G)U{_n)#SEIZp&`+^)KCuS%HDbI>HDh_p`ar%bBJ)j) z?Sub$O~+RPdiDA17!RbP{{k73e;4GD4SBfz*@@tr`y)N05I;A`XZ!{V%lg`5;#*_J zAIHS#M<3AV{#f23)bE|Y9v_qc1CP9!J{9drhkt$s@2r0c(l?Co88cwF#HWpeKFx@X z?{9?s+#mBVg#CEuyHm5=SmwvtD-1pR(TKlFi9{QzcwYv7d*>(LijmLyv%sGRBje2* zpfB0bhewc?^!*X~oSxz{W`YmIx5w~@Ysy~#^$$<|q;D7al?8bX(dEs6qBZS=57+ol ziN6Ftsqwo}URKC3pf*xpNsPSih^c?A$6i^V6=RQ!so46*_>;hYZ~w1dp`@VBd)Q;7 z0>2mfoR0pe8{_qF0B8M|qJL{d`IliHK>REkp8hfaTHtlJMf#5+pl^W3 z-mk^Dq5;CLL0a-7k%a3X`86X(UTu(9_Aa$I!TOB6ylWShF3PJ2=9dTa@{GLVMa4lQ zZvlXjHz{{YUO{1b;kCsT!NT&~DPv1Y7Zv8_&nqcZaq(mF<}b--0r@4x-$cU87UxaV zC5$b}uc#=jF!HXNniCwhxNv^3w0u(b;+*_RIq7+Uz_=lS#fU2?$tH-OBtw$KjmsFB zHzludVOdH3{KC9>`SY*O%dcEA=`txguy|bA6}f2MRf}%C&RAHuaAE0U&~{bE(D~(s z`N6`xio!(|ASPp&dMT=$hn6oco?jSPoPGIxlG8J4tPms3ore}K%A21boL^*A1j`G{ z%S+4i%E8=%lG1DQ%F2rufvJ+Ra8ZFymp6UUjm5yG6;@O(1TlHnE?JUSR#;w9O4bE$ z%3GXnDC%@p(7A-dxhi*3PH<%5lKF*Y!Q#?I5&&skHTCkG;6?L;H@R^8Dgp1#RFfYF#FTbRubiRmj*!C_l)nbkxn=$m-!k`vUUU7k|5hIFADe#fuPwv~g8y8p+b~(BjC=%Y}c)8J;%{_SS3qhLKaN_|5)!(fZ~C51XS0>Y-ET`sB`=C$7W`4vI!gO5s8BPIW<9H%2er%-(D zqQJDvmEdxMLo!`rN-KkTr3>=P^A}xPn73eI5Tf~}=FL&qMI5psT!Vk>#h#Rl)2zvz z;nlgL&#qY?=Eu?J{CHHSE6t=Srsqw}uP6$#znhQJk-Wo4!1!NLLzb3RgEJVM5_ zpQYFOuNPhq$MjjbqJNFE;%z1zg}0g1o41+NySI_3_}&J^{V(x0|3&=#EOe5CbBw1) z97&~O2k)MN{Zx#!dl_Yq>0QwzD!!tjxR0-B@t2CYQuNV1E?9*Br(uG^ValgiLjlUq z&Gq&R?mClNi0ge>O3hU{*^Hj3{_FWsyIv=VEGK=0+3RqO_9|{#G(V877g2JGF;m0B z>=G;?&JRv12n43(6i<`2*pJ>|caHoi$z&P@@@WdZgyqL@ro_vcPpe^4@uyX|Hk40# zkn+FMU&V3c|Hl`smJG>&GbmnEQHbrP%0#xqyt}zD=GU7|IKBax><^OTMbQ+w! z%(p(_p-)_&@c)Z$f2NN1{~M!#PssC~Q+Z_wXU$)A~C@IB(Lv^h1Bd+xtOBR-7=a*L$j>n-jBI8QuPbdsdD=iHM zN(vVi;`Am0bAshO%Ynt%lEOs{K$7h8QhmB3yjFUY$7`Tk+!vSQs)6gS4@?@i3g_Yx|430+jUZPr2 z_2kH(hyBVUq}K;HF|%{eU1mihtDrvSe9Ro12;HazyoA**p4N0g|)ZSg1w#q?GsoVL*i_$JUvoeS?N+T;ECY-M>4VEs#nMlw!|N20&QCvDdh?Us9%7Ws> z1;s;Ii%KsiTZ1@?1i>yWgIpy?9)!)nUejd{XY}HHS>2VAh79GVvm9#XS!P&Au)MUS zBrt7c_&q{qCYvwepslj-BU&fVHhYihmVU@F zT{#}9kMw?6+Nn9EB^8i}D2sd6@rapRMOJLMh%GE!#4~p4+}B6j-kNN`#ENpS5Z zX;Uc`S}nIux``VMrLyyq6D%v~{RnRFb|WWo<&Z6m4NE9vWMHkx9x7+xc#gP)r?Nj9 zBc|bSAPL86???6oaHS{$-a77~Z?$9g@lP3(O5Je!;;{Ck;Tac&u{D`-i*CKy3Z7vu-?1KHW(4+@Cq1+$Bdh4RsXw52C6 zQ62K;2k~LUyh?uX5iAcBXU`Y28zNh$`glt{oO$vP9i4z@-V^d zLGq+)jaNwT63oazM_0j9s%Q$kCm}vg8E(P?d@*qCkrG}c1-dCzbOCO!t$OY5%!o7rn$+|(apPR9m9$2o~j1|_!&?S3UYJeG#80; zftA_3iehxbIC7rH4`o!}r3&zT`lHB4a2#1?451?7gPy{2 zbZUWxy`&O#o5v4=@=EY|#3Gz0K4Q{{W}@gou@Y?$k}g_MQi(&$ayGvw*M>tg@JW?x zKO=dRxv-!V1DC>b&HE!;5E~pX7X|7y9uJ8}liX`-@m*QGQa;4{#n0kePrTR|_tJy8 zu6vrNzW0h(M8t{4ixpLf7ZG-saU)%a880$Q;PDcKole}yBeBEv67sE$_yDDJ@e0bo zmjHA<=$qgZF^Z)3IYM&nsYL&ET0Mp>T~LsJlX2}r4p`NoKfcC|P!(42!U z{vnk{JG1zT?25P-1M)`0)x_h3@)fF&=$WQL&ywXK-cKBYn7M?Gcla z!HyB1EtKRf(BH%L(x>%I=yfBC0#%ywffeX!d+E7)^aR65gvus!IpmMy`d-$7CY>HM6%+m4Le> zL$JISYwjvmjK=+l)tgzXjP|5*d`=u-Y%yByQ6ssyBe09~=s=rjMbA-$Dhi_rtf#?` zWM>~qP25z|qKKBUI7o!|bU*l2r7~<%oUrHt8V-WS9i8PwRU(d671+a-kUjDBD(s2l zN2`USBV^ZpIeu=}H^-07xQNSLaEe?<;@psuDFS=e)oX@F1 zK|Vjy=U3#5O7TTGzI^AG=+uecIhZk0bVliYxO#Cj@!LEEDhpLC$uGyZN+08 zE#%x0S0He6fZzK^f@SRogKAl><-sSNe$sW}4{EQAGv(zM^_~MrldzV}FK|n+>WU7K zod^N~__`HFhr;EOfuU~M;#4F>FO2c5<%9*|GDgooBAr;+O{L9=@lY?KtwC^QV}eefByMI zhY`JYKJF?ZmO-ox9UwZ4aL)NE9oBq;ybcB(1!j`Pa5se<;Gz4Phh-qdai0s*S}9+w z<10n^CCF<`7&|s^D5#h)dD5k0^M>FJFSDjh9)kDG3x`G`GA;_I$qc_`3=h8!z0ebU z;ZPMmYZeO6yl{vvMxz-cqGB^LjIpz3jky%3D=!>+p{_IUGQYj<(nd=zTW%o>w~|2aGT<>lAjc-&}eFp)8Rg}&7~zm{qd65Et$}zG$|b8wn(L7yrS5Lnu+n@ zomHyT6Y%E!??l{CPn;>-|B~g+rH19Pj7aN=ssH*(sp>E9M|9IL#qqcwPNn2u_hG)1 zb#AwmKH+?B2vbuE$4guK>T*;Y)W4a-+fh|&)*0d0G04*oxfsH0znDf*Sl2 zxq8ya*n<1Ec-IxKwKB5LyXkoTOCe`YP+`f%#V7Dq|MP(J$C4U!`c&W@)?`0!bvM$( z@%@cgb$l7(>um=hwU0#vk$;NVx=L>$KQLpjJ7as;cjx#oB z-2C=nZ?w z|I;^L-AhTx`=kkZZ#&^^rn|{73J9xk-zeb@=p!KvFGzR{?nEW*#+|Z+0}Z2!uoHIy z5*~*;vI(y=j8%lV=dO+rm(Hyw{4?&JBZNh+BWyK{2Exbi@9q$O5%=B_UV%G23IB+@ zw+V4~-xk94__u!um*T!!!nbg3E+H&1lkEWPAbtzEF zIPSkoCM<$J68;AF^*!t}`U4Im{*Ym$65`(45rlsMUkOWa4=~fgU2lV4`vA*`_XocS zVMt2|lff^-Q^7C7v%xRIFB!&4Lfq%OiVzq0)e$ZLzX%tCUxYVUxar+ zo`gRD-w5x2YV&Ng_+|B&w#!Yo(X*?Oodzs&w+gr zo(sJvOoM(Co(DfeI0$-9I2d|Pi2Er^2rq#A2yq{1kZ>sEM|ctBM>q`fBODI-5#pZ5 zm4vu|a}^=(fvh9MeT=IKFM<3BvmighF_0hOSjdlX9OOqh9`Ylc0QnJ4g8T?CgZv0D zhdvTch8zi}LXL#fAVmYx^yC8qU2FRcAUdW&DN02|^{g6N51CT%A|3LnPKY{!S zAB6k~e+u~%HbVY{k3jx}8zFzfO^`p~&me!o&5%Fg6OcdQlaN2*Q;`O z8OWdTS;(L8Imn-|8S*FG2Kf{I9P%f80rDsO1>{foOUR$_SCBv9i;zFzPRO6|Wyqhf z9r7o91@b3+4e}@a9pn#tKj!z4KVb*tPxuDpPxuGOpKuT4PxvRupU{E)3I7856Yhol z3I7WD6aF3YCwv?7CwvF;Cp-Z86TS!e6TT1m6CQ;83I7TC6Mg{s6CQ^A2@Ri-O9+QN zixB_N#%#g_pD~xPpU)^DM1NL9h<~`Dgz$KuQAU{LGlGOCpuZzL(Pu0rJOy{s6XGAe zt0lx8#w!VNSN$r&(|txAA^NM;gt&uuEg|m4Uq^U0#-@b08+HTXx%fAF2yyZ3gM_#P zx{(lfKW`-bs?XR=nC>%jYW5~N2T#C12Ge}`*L{Xnv*YmL!=a{NKj+Qka8v8H#H*W) z!;d9EK!@)|wsrtbZ4931Bf%Qvq|uQ#QCSQQScPvsl*!u z=WEd*;&pt7=L$|zi?$Qb7CcD2jd+&eB)zDe zc)H+AiFXiB6}*bLLp)jVTH@Wr4Z&9uKR~?upKSjs;;;s^U+_BO&~~(6@YTeVi8l$p zmN>K*?H7C<@l@gsf;SMyr~vI3d;@W4C)zLg{lrHQFBAMh;#tJ!3f@S3BJpg&Hxkb# zo+bEZ;w3&FB;CqQT5uYnKMOCz& zc(&mCiMJ8Y5}cwdYA2p9_#xsQ#8U+~@LJ>$PZk^w4e}>$2%bp%0P*gFY(E?sB& z-xvEQUPZh^@ND8MiMI)ke*^>aC*CCZEaGd4Hwr$RcmweU!RHdcpLm_%1;iVPR|#H3 zd^7Pf!ApoY5uYn~8S(AJvjq|O1y)3s^C?`9pcG?*Ank0ZV0}T z_yOYG?}_~r$4VC3FL)hs{xc$-ZGx{Ro=m(+@U_GT5^ofI9r0A+4T3iiA4I%P@D0S% ziB}1JKk*U7%LIRrcoy-wf;SSMNIYBcjl{EwX9>QU_$=b-f^Q){mw2k+O~i|cCkwuf zIRCksPDAkR#Fr57J|Ol_yoz{-;BCZL5^ocH7x6mcO@g-*UrW4E@ZH24h&Kq{LHvH= zb%O69-blPkaEJJ2;$?#GCEi4QuHfCow-e76d_VCv;#qxQyJG*ujRfEwf+rJCB;F?Y0OHBSn*<+7d?4{g!BdE*5^oSZ zmG~gyb%Li6PbXd__#omVh?fa|0r4#2a|KT)K9P8~;F-j;iDwBug7_@r>4J|YK9_i^ z;910rh$jm^j(8byL-2{jmk{rMN9>-#|Q_c$MJy6CXjmOz;PZXAz$(cq8$N#Ipt8NIaW(mf)L-&mx{K zI7g8S>JHz#MMDmH7jO_Gzv&rG=ASZl=43qYyn&3>%^5>{M$O&zyo*~5Z^X$dT_uN0Vk^)=BY3cWLDIQ_8>Qr%LE5_78ea)@TF?$7ao zncHu3O;bY6f%NjfTFa|g;J(&`wA5s2MuHjG=uAR47iuzFgV(U0gHU>NpOb*bVm$f=d%199pYUV(FgAkxSl-53P!#R4dK-zk`kK5s z&Gz!9$5}QK4X~Hj@O@lbvb}t*dP}mGw>^CLaO=3VfnP@!7K(TIcb7mg7-l$cfv7Ii z3^ZDSjVNby8tZdzf|^=^M%MT%wAjn-1$8ce-h={Fw-ls%`P0xlf6^2M!k@utYJ@+( z0EYJOL8V9H&mNE(&7a|6{w&e_p*=?NXYJ2E9)ErfhWF&pH=y>KKR<=2qxoZ{q(y0{ zgL$V>{oE)_6YcNp0N3qXevQ9_x7Qr#zxXukmhGS&Q^X|ban0U=W>VVWw&$De;CY6< zciuK)HEN^GtnY^1glL(f+p+c^$-n9Ta_Mi#m=_*dP+1km(+=NA!Z4M=OQ(~YtMiOyC` zkE)wbLP?eZDiW!HPlMN9vuFC6y(7$Jhpc6Z=A8Xz*EMHUk z@n1(Rm-v^j0g0`F4iI;^>qL7aRu~0`3pT7k2dlZS8;a6m9b?UehVB{soE1p263uR3 zTdcZ+#FiBXU>eK(8idOYKuP!mWaMZv1A9evC|M`sb}bd`$jt=?M% zQqfW}X%VDQ-Le;hcC;RLEQS@@1w8~$3hxE{56(0V=?0ENWP;UJU`5t>!+q*Le!Tq@WqTAb!cgsFGcZqy|luThq5uQ`c%|`&(#e zGB{u_HV#jtR~|UV(*~Uy1-MP^wNaT-RkKRx3#g;>D`-LINc<7|a;^nOtDAp@B`f-m znv^YQ5~NnPA9UP78A7wnWUGc6q5{O`2DibxG+UWoj|P48KORVOJ56Pe6QPSvAE{&- zDhcg`vO*orz^=;EL(d0Kv1=R>iYgz1j75*kUl0Cm&0)W}Y|o9ER$y1nVIK@`yT6vb zTj+4*cxa(jxyu}%(2@YV_F9zvIFcBMgp#AdHVlkPGQEvG{xaI*lsy)(sflKP^F8zB zn)edT)(Zc=4XDOS?7C0ozu#9m`Q28u*QmVU-BxIt5&WIizos>zrX``KGr^p2sOy)M zzyI+*D}9o)vzYw!{|t%x)U@=e>Fl$>obW-{bE-U~n=pRT$_aI=iI&E(EBy-Cz{P5cj7zGB~%W5=ea(WXTI~CukzTM zZOLZ))#&tFj=@5rekXkkS}{-oMMxEVwd;*Kq6|nt-r%;b4zx2Zx}BAo=8G9kTRZ#I z{Gso@pLE@+=x+frOMI7gy`=r4D)%paP;^%-^i-Gomjo2u^^EfyQ0ul2%425_G?VS@ zwAL(03)YyGNGe*hk`%z;sOpl|Ecz4#4kR$MQ(Ci9`PPz^X1MBv@dfxb!`V3kUapmU zTedwLCW$c^r&&}}I|aCD=i;xu=Hy1ahm!by+gW(`I6ynZB+hKCIob6==BdAc=|Uy) z&cF6;=OK^1CKZ33p-gD6Vx*lW32Wt@f9*A2V#3=7G2wAc7}~(dgLeIF`ic-&{>;!i z{Do468ki-tgJA>G%+NT#)Mw&vi)1sL;a$+uyO$zsYhVX?VA)L65@<780xuf&*hF*v zAOu)ksQt!8KdqH3Cw;KcD_Zm(%dHA5u94((z9x|Gle zyf}4#LoRu>q&#ep02fGEz^WXBg7U-m?5^mD@WVsGvmKRcVTT3 zt{k+KSoCCI*xRJI4C&cXk4sBZzQt0?0?M8JXj9FB!~W1ysO+6k87k{jd6i~k)_!Ya zzljJ6z2mR_2b@aP%_&CZDwcK7c^^%+`dirpH)9jP7*$US{k1GW0)%Oq7!>)RY3jTR zq1qm$ZHDF;o9^7>D4tzMFC7wbmnB$PiK?MiJ;eqlwM9gSS1megMH7myX+mPkFd~S_ zDAWp(sjOluxNWUi)pQK2;a4IW1cA9S`$c!`8x;0bS(@LUN`@r18s_!NvES+Sg!QREpA(s}_?6!<>;~)o(`XP?I$^&76^H)k_sKkPdyVVTM?XDfMQ&X0B&a zICD#aM@d`!wVTiY#oLmq zTu^7(!r2hnU|yMGj=>m8_%$X?3sx9ot3Y8-=g-Lk5e{fhqWz=&LN{64c^`{{ir6a# zH%hY*Z?DMWJCz5D@>^-P%z4a~&goEnXFwZ8Bg_>KskrfhXs~ccnUE-oHDiCqJLalW zcd(*OZTt%!(v-}Dag1s3pFq_8i0yjPZ0UO0JKT`|lk>LYQW{toCLggN_#cY4~hJ=yRlY)Q9K=But z2fX$lNVc*PMvYIbd>(5MQ#yj@K(v^$?Y72?;#-K9Db2l9fGHiJrpg9u*&Y;g^)==J z48UAQC|Ear^D)K#R!&L>$)q${O-ilGBq?`7g7X)6k?Q8Jodr42yBtFXybKY_YKQoq zcNZs6g>#{HzeBBP%-J#n{sLNVV(=L?qkJyG;J6Q=t#EdR(e=8QB0YY(^{ZfC3%0Z| z^t_;ES(48Tz@2dC4KrJ(2!mv3SRk>cX`oDH6RnAft!m7M;d%*lpf#|Eg=0F}b&8DF z!4#j>*Gvo@Hs1?gW{m-_tmCfO->T7AK!*GVS&B9d!POyq31ujNBireY+IOw;$6 zNz2XmDu3Q}LY?==Y{sa-?%?s(oOZJ27hnwoA@OuGJ3$x^w%6%#DGKUb!oCHA&a#2- zV6t*|=P(9VvIxxO7W{!JlCeerx+e^9`cuW1wL>)yI)A}CmG5nM4n5w?apqhIhSlQ? z8u<0^(YK*kocu)e?VIq&)y*%Yc=c_;AA8ZaU&0}LTz#7XB};`~*_Hd9e_~!x-8_Yr z%RmZ>Kow7L#D53&*X&I|bziooC)YHkFhVJQq7wummX7z=H`#?SS{fT(GMXX|LhJWW zFMzn-#8J4o`n?jPx&K)G?h@7fnEJi^^=SP*k4B^Q`#87|>i5ZTu3`ONc0L%k31RD%Wsu7wk8$ODfA@c|e2-^4Kd%3}?|0Gi9S{3;<@;qg3d(l~WFD69 z`oUn>Zw7v-d^5fMW#%W@Usg~hkD|Y%d?D4zbQsh3I6L5ttD93mxmC&Wr?qULIlV*r zPVG6qDIEfqbUMU&_-k?E&9J6~9ms$*b28SwhVEwldzj{Ve=SaZ8Ba>jjKx=W?NeB0 zg4Lg0%&gxFsc5|({J(ocDhA*j`mqn51PQ`P6n{4DL~tbmMs)`QAMpIx|L4M`Roc%^^ic8;2#1d^Wp2^(l&d2?W7 zDKN#ZNqQ85=c;DS0~~vDucu~Ys_wet!ehkfM!laHZ)fA<$+r>qS1bakOFz%-)ZM9~x&$1~U#&ePD4GJ&WnzsL)amfSv`9nDQi-kAxifde0 z?uzABD5?pV)qL`Zd!?RA9;d{;FQYn% z44cVmWUJ2MOn%jk=i22yXUFeRIf_+n^b|{}Mp|0A+s$T$dT(#5v{q=&L3Z=G&Kn8D zZmp2WiW@`DyChOVktElXq^AVdQK-_M&Y7NsR1(=_a=J*FTUH*Dc&AHxzPyC)1e=L! zR}p&`Tg^ZdJdI;u3{~B7^GWbplVu~y3~YlVDzr}JN)zTHu)1b5u!YWQHuQC$8Q2VU z8(>f1;1)h>8$hCSI%ueE3Z9GY!@{AGwQ_0no(4Jswcl&c*GaL0C>a%Dn=Kb!a{3m4By0LM01PUdqzC&k)pGidQPVdDS3!&`1KXTn zJAB^bfo(E*au(xsIue+zOmdu(^faVksr#IEkn3`(H-G*ndgbbtg5*!dpZ^)8^zP3e zfKkNp=gl9%pa1kF6!o9v&;N;*|C{{zIW&|{z@PtxbIpI%pHF`gmB;nxU6giQf9|7~ z_+d0TBDIUp@pCioIWx0-=>j5=;d-dO07^76T zJcDmWK9>I;4yJs3|NUYIT6k3cyOnAf?Y}qf^!o3|@ikJc|NbsgDE~bWoC^EzBl0H| zBvrTEb==404`lc8`SZx@N6jBJHHJT{p=pu+?M`g2$MUBfDHMMWfW036V88jA&tv+0 z=dr!4H;e$6KJI!F=Gvdmdg%|^z>AN&-Z1Q!EF`jC`Z5`;*OQ)vaJk;_92^S9OHX3L zWXKfH8T2`DZEhkL9VTPJn^SiThIUxv2VfMEY|X%${T@5eCIgfiJaox1iajG)#wcUy z8gTGqZ$j0wHUlf(82Dh37%61Djtbw96azALa(#TdOaLd~tVpt*B!?!jr<#z6dHNZc zydEQnIRcD0JU+=Bp(of_E4Ricn#Y(oCtAlK=?PXATl0TGzTPhJ#SU+ zkTI}x;SLZrA;q2<-W(bIYlbA)Gn24gf;DO;biRZ@sFJm82iB8655)NqX$8s!W|M{p z`fms0)OsaXu|S&hIt;VA`K$P(%_>X8;=(ZOSItPVr>0pKk9+}}F$2<^9lt_BGZO5n zNp8rK2;tJg2Tmj2a5iQK#hsO44^U@Ea8L#-`R^xMBPyoh)JX8ys3RbW-UA|iae9QA zmtnPEAI*@18kS+-IB;aQ+77x5wYaP93+mo&rMxT8)MrS}P-kT-&xtxivJ&N9Hlgb^ z@1c>GqfU&ph3(CwKh9~;pHzI{{899$F9mZ%{W<9uOcAX=(2$R(KiKy;g8uyNc}#UN z_J@u%Q;@FW$STF(pNG4+ zMbAZK9SZ9}qak=_RV!LF6$gBhuo+{WrY4>vU+~x7OE-WZm{4{SG}b(^b-YYRTgE3E zc3Fy<4GJ);pPZZ`e^YCogO&~~-`ko1v19iMsVDdNyL=|hrF(3hh6u=5U&kSK7 zka3v=YD(21EyCnfmVwmn!eUT~eI_&o{zOi{x%)*6{BJe+PadD>KW%)n|CFpG|LIu+ zI;UWqrFa}|pO?VJRX5+(*R{{DV*df#?-$cB_t7;(8RpsGvog%n@dm?usaM1N#!(vP zl%9rpL)b7Mc_Ct$;q`!{vd`*|W}g%Bjeox?e3<)D>~p?Y-;wmWmQdvh3209ttK33Y%(_{6{nz9=pk(=09 zJaKlSJrNuIDol{+4mwY6W4P@7{u+F7u7a9NKRQO)moo{RcR3zyueZTxRyV(nPs&w) z>b2Jj78_-+H=uN7uh-)3)3;Y2YH>T#&%|EW`eCna_|X2N*z04U_Q?I|l~l0Lwm-e= zxv;&?r}{+or}rQvY_F?Z$n7wDa2Ll#y zh>z1Cv3PO-D+M^uc`WkEyNWG>t48crf9-M%SM4>j)pd}5k|$2;N7I$a1_Z}l$5Tu7 zb_8Q^$~4r4L($flB-SthLH^qBVfPEixt>PGPy#~iz!tR$(siajXJU;Xs1jR}g=bX@ zkjawdI1RUn1&NMef`MvRLsOvx+f{P7Bd+3xxSxU<5s!u54btg-4mz(;1(N#PfgR@C zYIj83-J_hy34^!~$1>B!BzKIGV$|ULAylKQ$ddLP0>>)P?)*tVTx%ldf=D+5E%{5j zZ$n&!ZpL}&-n~`PZOgtD_^p=8L%E=w%UQF?ofX3#(V3*s7D+3oq}IbW=*C-|zGxK) z=eAt3CE4(nh$3Y7hQ%?RoaA+W_6)GhG<#DJ!Ok}*G2ybgsRRL5c4BC!zjheN=F*ky z0XZ998bzGY8O$XS2aG(WUq4DC(1#02M+>oQaS#j`AYJo#QM(s}+MR z#YSpMQ9`$S8ux1qRIJFlfF_iMLj1LV#4y3eXM?gs z+qn?tuDu%OKZw^`Y0d zP&-bcB9WB^^^%uZcK?ED!eY@G9}j0FJw-x-Xvo3Vz)B9+S^}%^B|rmT%|I=VccYG$ zzy=`ebcJR72F;m6N^Q{`*eZsA;c;iOGF9gbWT>W5CRa-KWL_iqLG5XAPD3%A)xiVX zqEj?{8NOnfrh#m9UV0LVQRBDB2&Fz{i8$2?!YKS5{?Lp6Jbd^Gpocqm;!XQq74Q!R zxbska3u3@+_CXYmU{6_zv8|eha(p|z)|Bmj40AESUBm%_Fnqv+>93|HL%#N{+ZdvMJEhfs`=xGSyy@{3wdy9_@U**qE5q0E8tOCPOEw^#H$q$B<- zT+1`hN-arLyr>GsAF+bZ9if8b(F_p&1T2ax;w_`~;@EC)F+U@C~PDK&N)m{f{s2hG(yZui68` z?Pm0k*NP#GAD|6_wJm9z)%mhvCnYJozNTTAo5x(BIF8m0|fFmz(na zJW@)ZpvCPxg;HCVvnjsLA>gF;Teh?qh2g7CX)aC*I1ht$bl5(m15M7i#W1!ZjWh0N z$f~~gM+MgMIwo1F#(hPI>-;4Ig75CEv_Lg%%^wM!K~6CjNbT3;sI4hA~*TE=2+E zaXpC*AJ-cbKCag;X?DR<+%GKk=atqHoY(7MxGA4=;Y$hgX;x@W*l*hMmC>rGZ{XB0 zN`GC&@2X%#&UsYsyEdQ_+ulX`Fjlg+;l&=CWUhaZA#(V^9-9h-lj)T+1fsVjk^bTf zqb-*8Dr|K#cW+cA{gWk4$3B=0!4jM=ZB%{--<)8qN@_9Y-G?qP!4d|@_g*aPMA)_Z zm=WjU-e8#_vKMK&n-CIK!YAAaKiMLf&#D({_x19b;c}S2I(EipT5^JpUgb{@qpj*Q zPGEngJCU=9azc$sBcB<58SM+R*m_!6yd{do>f1KY;Wi4JwfGy+vpp_^Mutq4+XiwjB3R?QPRr8Wj_qE~-_eoE=Y%>6FG z>SM0fRyj;U^-)Bd>X;yPT7Q=YvS;an=CU9~y<(hH^8)oiLc6|aws!r@b-fBY$=O(4 z+4|aF4BihibB5UhTiH!p`GqN8?Ai5I@Ae%(Wv3XL zjCbdXgB&}Up&%ndYne1OQU2E9FJo2%TK!ujP8I}ai|U!7xrp%BW~1-2LQC;(KP`o9 zYR9`N-v--C)k4{fRkjkE;TNqL=EU0fpj9JeRf9)iumFjHCVcLwve95Nmw76C_N{9`9UK5JGRp@e_ zhZZXmEfGVcA@ZGSE^C6(>-pMGpdK9Gyo6v&tAs*86pJOPt%gE^~`E-+Rg$t zF$63y5BOenu6>WO%v+-B)H^Lw#X^wR=A7WNIGsVizWq4IpLQCc{T4uy?H(paEG&d ze;Q^>=K++C*;y}~7=o0&apE+_DSl$gzZSJQr{H2|9TcUucFkbuH^@q`YvdbR2w)9D zlsi-7Nz6Lh-oXfKj zH4&exY&Mhi(e4&}l&RMWkYdhetG*0XjofP5hajsbu-{|&15>uxnWv2Wm47*JF0^d6 zXES3)*<4HW2SP#SY4I=TIu@7gxO6Uia_lpI09CYc(@NzIp^FsRNM}yjAr$QrirVZc zJ7S39QWqzbHhD!)@jsYnj1rmnYk3mDtXE0e=qg2EGV`>i@4`(SB&>D>QrVIU(>rqt z!r7`;+=780Jx5>%+=iaxKlT&U$2Exo$m<5)#XwoB9wlo9ZuoKuCnrY9`lK7aNWxi* zE!zgp(+AW^W8qW?r=r2`(UL8}Q_XP6#^$I7y2YKv@W|TC<5HJDv)E={m6!x{7)HO&dsgq6rQa=W#jw&t&W72S}m)KL*GPcn0GOnsM`ljN`E zMQBR$y~zC82Pkta78xkXW%~ah5R2>foOP}d)^B7h*V$`s<4e1<_HDM3p1^G-b|fgh z2+MWndEtEs^t70_YaLySQ|!yqq{S(0@#DxBX>p>oI0cswvBha-PO7vx&0qUZT9)W~ zFD?G%{cJJT)4VO-%s|n5d(KAtwr3zqd(B1>?M5{Bfxo-W#SlaM4R+np)YwKRIG6k= zy194vH1s$Ewl2-IugbJ98;$m|v7N{jX)Lb%f_O7^V@I1gBc!pT{k1gXBQ~}J+8#D( zf9)-YK%Fd@wj!dl0x0ww=LeOG5P@QcT5o(nYU?Re`mSzsJ#D&kE5@sO_!wg{TVOKV zI`6_jPsfKBS=kXO1`ItNZ9f=RJWu*pXrQviXixeZY9`it z4mwxU38^Jw+Cb&QT|XnLO`@`)>wcoTAE>+?bE1~6dJ>U~)XHxBwZ(W>s(mdSdzP^crrtJ z-k0%2Lm(lGmuA%LO?Q5eK|po$g)9vhas>9nN~I%i4e*v>ZiP8raBq+D;)KbY@lQB- zRx4{(#TnQ&(F>p>vDNpVnBilB#BYznx7!^LvNCWBWctcBenv0t8-Zn7JJ8`=A>`bR zd!(?S`;76z_eUWo7r=#>Wrv&(AZ@ez2?q}S-Gv=kfJ`JC_n5!^p0E3)_htJiiM&L; z&NUsWa6yNS(o~acL!UO63kz0J$ROH`$@0XY)ixa zu4>wd3X+!ic}R5Lbfpuvl*P z4lrTM*uLerR~J484z$~MCIdQ`?1hNsGhm!2rmK~85@!~;WG~xdE>lChkuL^s@($=Y zi1QBWWVL#O>dy8#ul-PF(rU#8gENc*R^EkbrfqR@_RSJ9GqKBXdMP@_~wh1b7|MP21TmH@;xwE@(KJ=_c>H1 zI_VhRR5w?>ihMJ;B_DbVGO@;|a=N)nUPthCu)JpT6@xY;D8j`2TI<#-AdvJFYy8qD zF(TsLo4dIJHA~rCfqZxwXx9viBiw7r_=sjhuuc}Jt=X1JH4eAe8eia96W@Hp5zE}s zqs++S_#f|qqnH3jx%>Z`{R;l;wsz<)(N_+00$)-g$djkK!VHc&!2Dp5rOkOWo$;BbNKsBa~aia-T)V=C#J~ z{RM02iCRv@-FEJW_a{%eS$3oG{?3hJ07dH1V&|<7$dC>2Bnb1wXye3m?qI*}sEhmMko7=GHI7nP~OF zU#t!=A3epzcgf;UEiW17HF~lD6OXbl!gRt5y}Ut?U%cvsk_m<7BaOStD=Sq+T6o**>TbsO>HlI^cgK5HcQOBQ*LS}L zA*k_$}e*jV4kS{H>Y$aXaj)Q>9>a`&ztJ z-CMv6X8#Ve_gK~4FG45lyYBU_>T3U+1xJtjG0>YPIuD>@t!{n~n-ePoe@1xn%D|gu zx3lw2PF*qYhBT{|{n^+I9Wa9ZtSJLt>Zn@wCNFfJvj5$-v$s=aII~J4Kf#R&*_H3L{BF3CuDe|SP`$SVIk11|EW+>z_aDCmY~(iqj_foJq4b_k zV^Z}tDwMkTL;7XcZw#j>WZrW`zwsMT()kLN==`c!zwrPhM8m%wT-4Nh_Jvq1{S37w z?rzX!pqSaGF?$ccv4!H7P~|tAd*3*GxZi7-Yr}K!W^{fjl*r4Mai(HUGQPlrN!T|h zniu0!X)G>wCdk{j{x*0LQ(?r2Im7u# zgbx-N0C7D8K6pEHeI6j=HJkwE-VbhR+ce^zV3UD5t6MWcr@5))5bD{)e?1B_h>!z} zG~RYOT}o&-P#9X0)_-n0LN^K6cgB01NOkjeI=fRL*NlYzk!dQA^YO>yvQpwPy@3NN4 zb}X49j#n9t?2no@{enfv-mxt^mXw*D#_aYEYEmc_@6OF|ROZ|2>?QGAUk5d^KR&9S ziLriX%wY;e z-0WdaF4;;X4niW*U9fwP2EJknrF)Q#Wnc6~X{NvSugGSvn9MjGbG(jG`&ncvT^6tC zwCfvzVcU=u*C+A)wp`|{XNbM#3ciQ-gXzwlzsD<%Hd>pgF?OhqS-7->6&?g|6VZ7a z-q2dVnprok#a|ry!`2>NESt&ggi~;~6)&=uKJxEa=w{BX{(#NYBW=d{mzPk>Z4xlb zCP`RsCzYmc;O|H&z`r7gi9*cZ+X67Druf(2PL_*YMQq_U`2pm-h?>jt!giXoE$$?G zyI>+}_6i-Bsw4BL5N*X@do^e=>s1<8+}WhKezN4-1x}mw4Dr`aVOphbO3=7p_6UMb zUX6-{*O6uWLw7Jt_!A<3T&36};Ut4XNd)xt&P?c>T!)-1+F?o7rUV4Iqx$+(AZ{Pc z{&v%BrYXbNJW{8Z09~Pbd=mQhg`3eQBy%Xss7* zQs*^pVT&Z4B`uXBYH}id5XzC8uq|mQA`(?X(RnVtIh9)Lxj>Arc|F^x90RSJ*FC)? zH9E8J40p|ySEzJ$Xs%AJ7^xEGKp4&<6l>L!yVQQ{`dIaJx3XTd6ZGnoDPt79n=C1_u!{F=JsT*5ogJ%~uxZ>L659&~%mUx6;=@;cuIbv&=9>l4imiAm`a zX;P{_?LoaY{gAY(afk3ilswM0%yYoN&O<24{r)d{y+?}lpDq_rb?yfBEh1h}#a;`X z0&iZWPDnqXdH~lVr_tU-l}3fwiMrumlW?|2xezz}90^aCaQ5hK_;C#PZi*=dI}Qrw zo?FJ30g4<5&6eJqgjL%lfX(l`BSO0TE2P?RM8>;O7n4t8a%F%=cjdXOuivn|`g%2; zR&V-x7xbt%ZEXh~7{ADU&7QMJ^j##c2DNn7(wSmy`hMY3l>ZaWVILYTg&h(;SHitg z*eKyWrLa!IdrF}e;ndQD&T+7FH9XMTCt46>N2A2>T>KVdu=KK;kytX4iMos0ZRPs! zpp}{Mkmhq;n@y~xckRSpJgATD2li81n;6r{KHu3NMArh&Xhi_S-Zl}}DGclU1ArP< za=q64^$ce*#=X@o`+p84nz9Q=0+Qe;3#~I`VPwvpjMuP$tIpEnvsc+?Hf@q+-zi)D zQ?QaN=K$1}(VPuV@MT0|&+yh8H!{^M{598Kz=mL7u~~no#P4M-wQGH;8ZP&VtoqJF zi|jdDOl--?hW`3=%W%7cvpaBTR*TFduG-Yd_j|njJ`JYNs1b6ykgn| zNef0BQ?`t>Q}FIz{s;zb)|4Hiq+$L5)~J6mQa)qxFTVy++}T&BqPe>dhHhO20@sgY zIqOH`uO^eVk<8~Xt~6~%$cTdJFrtvfYV|RlJF1Y~7B)^<_&#S43YHxi^2-f8MFR1` z3)$`len3;JpN$awa~$|^h6+=N@Y$T3qkv1eiv`)iEpxuqM;hj(Bm?lu_(>+)B`s+MKh)N~DyRl045@4m&SJ8lBc#qw$Fo z|M5RIx{AZUnR*}liZpYk>|@VN^Ve1~=EEB8W23oy&z89@-U};Nd)c!5h&fQQY7FK; zX?%m?&bke0aGGFmf-8wkJ1^6|0(;6fnnTh~71H#s^A)4bnX>CV6Df{68qyXB6;xlv zacg}N-|t+x5flX0LBDc$lFlqr6yZCKr3c^t5<NU?G1LdSX6Thq`4)%HMhWDd$w-w190W$%mUrq5_4ve zG`GZGdlzFqthwK(-g86P>!Lyo)LX(SkeaK03niRQ!aqmh37^jJN_=H?5qp$IpFecB zXS^cgIwr^TO^#7R31EieqQhnw(cktO^klc_@gT@=mVa4T@BiSu0REA=336Uw0{+<% z8Z6oxM? zDL*$(`tPF8j-jW(oKPg`OX8%L!wF&fqsOQE=u(hPRO9NHc(q^IdZ4#>bw1(}@-|+6 zIlqVT?_@IaLY!)?iz#2_FCh!!<=6C$Vw2r*zj&qaUhnQ(sBJqsm$HZ;&rd|hZ_)AJ zW)tJYuha3{*n~LoOLhFiAU}DQ2|NeNYV&WG?R>n@s^<-2q)L-`xS-A73~EuirsAJ^R>3j$orY zoev+-?MAEF$ByP;Fz$dZgE1f0>3op{#j%nTBwX~68!L(W(rlTyrlGkU-rTetd839m zDHxU6S72Oqrlzh%hMVz5UQZp(aC1c!*&ZZ&^*EYCF#FcWH-Z8^j^4occBkZdHiTw~ zzD>Lw&k*(O_!FHz%i_skRgXb+rgZ$Hd+Yc!{j~@5_%c~q8E+8R?`T?i&$mgs@?dPA z>%mNf_cExK@m;%f<94^vA2zri_O$H>@PE zL83xUA6E+qiV&3Yh@b|@3uwRq0b&IL^mla?u*^B;SRbv%h0t(42h-%_*oWRos2(lKHt} z+P}h%eT*-1AJawc*j=!2%G(AZW#srIk~Lzyw1;0k(@lJcy?Yz1 z=E(MLZg=*wX76545=AUu+RI-D)GSVr`X8OAb)C~3VUv&No=JH`)X`z&+gfbbu&Hm>nIf96RYvKAxZ$rgHW8Y_C31cWybQ^ z-wS|Tb?3s2Pp*Esb43DqEK4CaA8FvDm=$)<6M%B^ub%*XKmhXD|B3*- z8IL%h3P9YXglCpDlAzlDfJGvP)8>rfa*V!D;4u-yiFU^1YJM||6gj|7!n0h;Z*j96 z>;&K%4!lM5JnjqtaOQu*GLhFR!n?)uH~2Q4XZv~vl;E0G&-RUkfbDlH_=B4Wp2xer z>Sws<%;#pA9``2v>YE6*@L9^ES43dthMP6qjKCA-%9sH&Jn}PU$o&G$hWiC}!-ni; zzW`Un^!)-`@$8@CM1b5cAl~QhCbw}3X3Saw%k?08)j1eEW85T}Jm=+EOTq>B3y>h5 zwIrgxUw|R@s`W^x?-yW-ZubkYFexhE_}?sN!6Y6&eZv`TZMhATC4!8ggn#?}Vqbv! zuT;Amwjyh}FF@`H(Dwo?M;@LHYsBvs!1!0}LV(y8z-9{B7f?kg?h81KtS`1NpccS^ zeE}6r8Qd4ZID2&_gihZVKm-E&0&4Iw+AV-qjvATw(AZmbScB7f`xmZAYLiYt^ z(*FK-`vNE*#>TZ*J&6I-7$H6Os<+uxYbA`nFF;7wTFR5&tPHVNy%A_utwC|LIc#5m zu|d1akU`kKfTJRejWWhf`sj_nPlOW^VP60N{a+U&H*H@4MNZ!ruz?&L*cX5) z@a?mqAHVg!fVFHGPw4lIp&5j*i6zN9P-ij1&|-)z5oKURE|u(@y{t0d|tH{oWgwptYbu+l9vSc1q|2LRH-zeDnuF- zHx9y%1Ek0S=gLX=@fLekI_yyIT7mAj{dBaz5c%~fq6o#Z6T(|xcC_8Cqs~OpA?yBv z*!sFZTQPLqU(gAe-i9JNzCza@*q^Ge|1$%xTV!Kc{}=T@x)z8_$3B1r*8hd}5o%sv z|EGq+Har0Nw#!&HGrB?i;-kt4@0cF6+awt^$l&@v@Y9y8ua#ygPeJsVdoK=o$YgZ}m44up&D*DH5snQ$C`j7Vy)S_59- z`MXR&+pErUsDgv}+^ogphVo#(D2fO3zhJaj?e~aXT~IUvw1p_L_%WhW(Zz3a2`fb9 z=-rUc-=wqnj_U?N*KfNogrp-!d~vUlKTeYSy5o;gU~|JNbO?83AiD_b>}#}Au7nxZ zBAUz8@iq+XK))&XeF#k=I&{6=slsHthwj4=Eq)_fQS8GAwc|tfRjd!?N1+_nQph6g z*Z2b}){%=ief$NH4D8~c2uw(*o54lo8z4))elx8{xKD0s{KmI-FU!Gny08@d6)Zy<4LD9xiZ^b({2C&T z&GLd0q`Bm;T=uFGKjVH7gCwFe4D1J?Oor?SStASf`xc?LV*UW@Vw%0i_OodpPe+HO zeL5X2xe+Xbo96yag^Leo_{2Db0?~?Gi0WNH)&Cam^267I7P6mdsqK77>gI5JVhy=s zJL{wGwjoNm!-bi1=cm6E5FH*-7QR%0qi+1y_ABf6703F-LNE_!uC=ki5BzD{IF|bP zZ*e1mID!prsvyQNi1LYWd3IQC9N~z9lPdV!x&PiTJV4N@Pxvl&tH`6vzDIaW(f241Davmw zdN%OLnMZ7Q@$>YUyc5HR2`KS>K40jy7-9n0hbf-5;wA!Ynh;lHwCML?v?DYBIA)_A zyg!Zr?e+^Eyw|S2xC#*3fh)!^?YISZws_Ds%w*vuFfk~m>{ta|2c7{xi@`t1rU!m30x|d}c6#8S z5Gb#vkQ-+F33UecaZjPOrY$=VGd|8l~6yO6O-a9%h?h1Ul*hSv9Xb^vV2Mu7Ap$laeN)QuOPa?iAfyB5Tf9| zmo|~%L%7=a4^z{@`_YFXt11MzR(?|yCec4&5_KF$kT(A)a)C9Y-=%@|c)}hE z)yc$MB-QT6kn@}+bc812%*DOOPXCrVBChloOr=4cN~RWo3WHJk=6-}j8v5m^f+~F zMJ9n+K=eljr6NC=Df%{4>r^pbS3|=(Zz5`zjx~70zd}T1$V$vMt*R9{iRL| z2#47F1_g6>f~#?WcU+fV`vFKvt5(*2F1c{Jwg47#g@)kIi`Bk5kG03Lw6XR-L!i9w zha3Dv%YoU%yviYRiq^;${~>nV+lh#8Ev!~?G9Y!NZ|+Fnl(AlMMfvE1*d+xNg9v{` z`6(Oey>l#@YXkZ%EeFrsn{h=M2{;#+vI?g4bI_fD%I(H!Fea^PUW`?#Qb$#006Npr@^)4?^+_4?n5PrP~r$}fjRlA?4uLwV1`+WmBksEOs{qohFPa^11;)S_k z(LH=D+rA0uIu9~J7vdu_;#o$t86xcN8-b1Z3NWmxL_B+A2Q&rkn>pIEZtqO@&w?pb z+4OtdXy`hQ4{h7LtG6H(KG5WeqrQ9$g5qk9$6X9!|Ap&#Ki-6KjYw3=YY@xN!b0-8 zL?X<8M$=ZyK_dDw)C+-YFluLPHEB0M%)s~0AXxbR8M5%+VZ+q`J+&JjFmLa3ZA5pY zU-*y^yiwV87Cj)?0r#18$_@$lnRUr0{n`u2u;Fq6e?Oprobg?C+;?FtKUy;%UTu2U7?fmNioexC7@WSn!2n=;P>nMs-kb+-JVUAQb?Riw^ zS1_l~#gVMgEy>wn(;x>2Iabd|`n5Ca(JL#Sf9gVn{82gA*HJ5eh(n8W?5`%7T@5`( z@7eh&C}mII)1=wy^?aYx#PNlGDl_M;Gxc=?uKQ9TGMFbD*hIR&gzGowLNM0__PC` z1N6L$eS>9*p4O9_036CTTqg_7b}h6QvhDo+7E}4qE#~r@w^*Fb;^R@S7K^LH;>kGM zxsCQ>Ysyj9tn)dop7y%v)S5JhFYRjFggB|Q+5RfNIAwOVm|Y#_d{4%?&bm;73i{cm zdnd=@bgFlJg2z;Gzr)nOVc@otIL9i)BFf9_Z(>`=C!lIzc}TIKX6I>+*I?7Rc| za*^P}aDDkD6k=u5cowDUOOZ&|mp361_2q{sILLkE7a%%PA6}k<#6#3Ji@Z*+;fEeh z)VHL35e1QJN%_*$l5!Han>$D77p&NPGfwDL`Ury(d^=$Bsl1!S1sdhquI7;-rkLOI zxyHPT8w6jI);_L{d>*e-&90PB5!I|biu9mgu=7e3lN-^ zMoxk*s8cf}-XDLr7@W7-tInW&h&pYTFYR$&r5=dR;OmEY{jCkJcs~85z0c%!{Nx?7 z*I5$nb?G-+T!z>ymG@GF2P_ zMBJBJaE~wTa~r?3|Kt#30D_%kGcREz%0W~!qE2X0O9$9@B`4aLp{wf>Pa`u-T6%+6 z^nI`WnMBmn?*0bU-GZ-i;G>7imMEqy?@K|~_Dh_!$GPO)?X2>fa33<8p#=0zvA3pW zAidJsgK7vhj|*aw0&@IhFX23s+mYrj2Wpkr(*SVDSdGDqjWN(Bkx3Z{@&%|kQV;B9 z2)tPj?9D);H`c#x2AXMdduv)Oc4I1@Gz(>Ymd&#)p~DJmF0h`!`W*+ucU%d!!L|>+ zpWu58-gmJ3>-Y;S%K(4*Z+aSf>R$A&kknbcDrqP`dJBad?|mTFmti8;%{Vlq&DC|4 z{o(%siFJ3+}x{DB))u@=dgiXc%v=n|+1KMm{w9t@1BC@7iB&V~ra9Z2kSR zqDSH3F|MWy$RY7b``wMctR5p!-K;&RGNi>`muVN-w2l6t{0sZ5g7(Y-8A-xi_b!u( z)LDCc89jXydohDPsr|xmxOn0$d@qJ6` z%M}N40hhWcMQnYvZx7azq9tSrdCpA`a-^jWd>NO5t$Xxgm2|dFO|q|i0t_6= z+FQxeU~Ps<*0xtU@$8+W+?dB$fBH0PY$;@^Ldftz*pdW%N5Ru2uh-Zn_C3J{0ryr=m2@nJ z0P5=@yM;B;7LZ2`PKabC;IwxklF4}AO_A)}7?8&q{-=KpfjrEc2q}-1$5#PI)SF}c z<$#4e`lgyj@3H%eD0Yz1pPB7-%SW5sm}I#JK`u4k{>U^u_+oeaVjmv8*Hd0&Uo{Q^ zy5!oX>ypbYn%)h}7G}tb3@QuO$n$r>L;OkN&tP_GoL+=s@gx-y9#gjRBXc5rE5mO> z2jiVV=6JJUa&ug7vgI};o)YJ2Yizd+Y4gr_-Djy}2->jElzyhRAy71Hyr~(UIkgN) z;14ci^HBb$B=Tn@e{SZ_SSHNA|%V*ayGc*{jz0hj0Aieih4TFnyY7 zk4v?be^LM5S~PFq;cv=3L_xCq|^cVpHTlyI3+k%3hY#<7y)uB z1f+`~o(V^g_TPGDUwbCB z-K?B0JmotG1?kE1YfwdK>+2>!>13VILYAQ6ubXfjA)>NKwE|pl-GmdP=d42DUIa`T zYj@v8ff9V-eSjR{v#j)_)Mz1stta~85lY6+tX{6md!LyD{JB#i$~iu>R@qF6ld_KS z=!`XJPt%@`M3jY(lTo}wfe$~Q4?#C~tW<(`B-u00ml*O{eX@*A_`66zV-g0Izf_73P1F>-J< z$MMoYIhy@a*ByHKuH%DY6Jj6@J5d;nvHnp4nQGpcD8J^t9cpewLu;BeK+_yb#R^jt zu4i;LM2$&_d*D8MU3@fzJ2p71s`$9Q;_C{8*_>l4zHV@)R(##=>|g8mQXhm2;>CVi z|34;24*xI%`tF@Tef-zMjOg4Ic$Xui7xX&m^i0HTf?*8d&x5w9Y}#JK0mQ#v@}|aN z91&HM@`X1wz9!{MeC)C&<)k;2qxjo)vJ2-R-Z$f4`cPtBI;y`Pu{}9tdF)QCOzjB{ zENa@yXXAoVlDJkISF|z@akSyOT1=Ph!0DE;bYVQe5}7xz`t89D9^6gn>lelM1<(cAVvYj5ueZN;f2zRmGe~=7)2*TSWktjfHj{(dX!zY9 zir>fx_?@^Ye!VY--(-Q`hN=+y)kD5PKinS}uhS1-@s5*ZbO6n*CMoL}Ce}lx7~99w#mC3vd4xHD_J9D| z8hxJ*#XI(U;r#+izHs|P;L-k}_-5T9==;Nn^o`fpp#Eqmf?YcW5it#JP+S)!Y%d@v zy9n(TWFh~9g+?NSa$5qyriHhf9hB!}YZ_L)F|tVGtOPuM$4g9Z_3&0#0HQUmpNtTOMk@>r z{6Ti8ArtY!8~8c|`(Vxi-@|4sdWMz>zzg?spTzX9|M4_7ohL2MUWE^+VPzm5;bLCi z;{PEOtgm`GD!*g2%o$$~3@}vnah(EzPan#Qfx{;JUY$s`A8Q=n)el2#p6*y zne1>yS$GO5run>LjGe&U$Q=iQr=gmhSV?2oD;C*K`d>iRa4$zNU;_h0#X$uJw1`$9 z3%@{-tw3$0tiKJ<7WP|uA9NU5`u~E4_M{xaMTepu=uO3ShjUX{+!3H94rWOEHLO4N ze+AyGY?|~SnbqR8582z;Wp-X=YAB7l6)k+by&BX0m`88N)Ti3nTboD6J2`^|q9&J* zNAWG*9$s7(kaBd$9?b1wGs+25o73#EVSMN}myhx#Uyj`YN8S6KeFUZgL0_swkn>&b zp8qwqc$S8C)~pEchr!iAGmen4{MSK6cxN18cAa%2PP-el%hH?`jqPUeTL;!rg7aUx zy@A!dKBAuUR{-nrmNDaP&L4T_;G5*$7^l@^Ly)V%;=!+2NDSDks0mNXu;8g++Rk=e z(+B%^F{_piK>v&2*2*UJ0gM!PEyF69jbAxpwsP)X>+W};t#}bGdm>sr8T>5#=r&Kv z0jJZ4>K^o@v?1Kp&=0#NI&YBr%Nvb_4U*bRZsYu289SKX^q;~-zH55A_A2D~zCuI6-Y#$$xqdAy!CG8@dHBN5bNKN+TXi^~Tjh{+IE z&L|Fdfaf}&(#a(BW0q#W;nIGS0`xI%f%W6BKyP2!)V7?AC(O2gp&F1CTptn#ZW3SG z)+z#@{0$WjbE6IoIa%_Jjp5=?bA5U+dmJPu53E{a}>q7{8*Q2 zwm4#g{^Z>eb;@Sk&goz{x4t>yc}pevYx5t_#eUBqg~S=0apYsAvW zM;MDFhvFAuRCEh)6b;Z(3bKJ8#H`nBt^q?!JYe(R2Z63^dJ_gDu8;j!*jB{@2w=-< zcK!|Hr0o2Wva`J%k<_=RJ!uK{hq*G~TYD5?oqYoGJEX<5$9;N5J~!xo8^?kLuE)Hp`Q%pABTFaY#OVV@4N~t-Okd9VQGWsZLtsu zgm%mcv>&lD$j9JN)S&iY=5sYNAj3b9vYKsLo$h&h9Wp{U&xyZfC z3Dmgb<2j#eJ#gDCP<3Yj1e?Tyh`KWof_Jo%GZbBPjSxs9DLlR^0=u*D>yHBZKG#=F z1Kq}trLzx{`wVxMqxAaWxp_SZoW$O+_`gS z-o1M7zzY01KlL>30^_TV9dXZ8R6sE&H~Q`{+mqj|X;d0rhogMsP1y2=?0jyCj#E4z z5(Siq=YNRjMdG;zzb)qB_<|@NaDLoPaBcU4*G+iT-r_%cGb@1ae~L_bMeu$Qu;LA7 zHLSdE#T!TQpg0@yUE*n&v(D>g0jzx182By71_uR181o;YADzHx9(f2-X*1a*QQ+6WHBv zBJ4~nq!6p&_%aionVa3s5w7Rm5e<;a(|aJ8PFsF!50u@CSCccUr3X6mYh=yk_Z4mz zGL>qx*Vs|+4(8~4Z5SbVM?Yv_A0;7T?KQtcWPK8T4669`2s&w;Mp_tIFCrrtiD=*u z`|vt2l>XUr^nWX^-l>AZvO?S{VXwL#mDktX^eVVMHEZ>(>WAn+|IQksj-Ogwt(J~+ zn8PQF`CO4un-_u_hg4&cl<0*IsaD>CR|6_31qpyL+^Fz-}z=KtYq+-74_( zxpt!7_}&D!%Ki;jvnHt8ehIEB@=L_*wNIeAO(*hOm7$K7Br{NI6GpOqm*wU(utcm7 zRSYV|0?&< zNIq({Ky>U?yBKkR+e)^8j1Pf~l0Wln?d}TkCPl6a&zi`&K8`y1TnE2?iFOr6y&N5d zDZk(cpCVPfHnifPum2lxL`Q$HK?~Y)nduH;MN6sp)C}3~C?RVarQlu!)Gq@W#M(0& z3Fbqj!XB#=ls8ySdc*1J+P{K@%YD^?J>MBA$j*i*!=l;!F*3;i3Vgvlw+QCx*!3TD z;=6um)Qy_GB|iG?cim3ecn{Os_<|CsX%GzPNuO&Om5ckpH?#tTrRQ$Lb7zjekFRPc zXzyPPw(??oBiR3Cyw?vzwOL~vo&(}0~PnL0{`O6dD`cRZ7_w& z)u~`JSC_KF<3W_j8aaV*xkQrVEl`5&ICl(EuVv8&rfjpjyMP6ybF=(0d?5`TwQh$fi^o7PFq9yGTjj7d@hnRY(o-*IJ-321L) zig5tO0RGBb$pP;cLiuIHy7w=O@&6q>;}Rd$tM7lo8Yb)l2AKmA!s~~68K)w4gD2}h zLybD0(Jf#x{=`S;{ZXRy=_oxi|4qCY|Lr0FeRdLD@Lw{q57G}v2hERI zq8v5dQlYbz#(`B(c;vv9VH`L#j02AVE)oZx3+2E-{|P=k_^tSG^)NkS10SXYT1k*A zj1O~J&u`0zeQ(n9_mU596MV>AcW8xtA3og0<`Ecx4@dM@6eItcAgq;5Q-2zf|9*VI znteB&%0t8WI1MkAPc@Xj(!bwSqwE(*|fU=0B_VI07k!?7jJSB z(%paugOWUpk(V!*%Hq%1I{n5r#3Bf5;+`|qSWfT}zJlmE*m&-$#?PA839W;1hqMsHoF_jAH~t24EX<1!U|w(pQ3>DshNus|Z3i6N*yJec{YLdF zSx}%Hw=4l?%#nz>Z4&Gu5>GoX#e2ux+XVLb;tMJ`qG5N>Ks9}?HA0d}PuY|BwjW^i z-KlFC8Iw)jIR> z^*v&lVe8~=zNA-he;4%0UEoH=BrBjJCZ zyT#`g9XJi*X!7{%A#(U!h1T$1u1`8UWTSu}19t8~L6{E1^ZDP_j8x@S=T+JNK12;w zY()3z-N4qCM{K6Y`Cc0UHuROndsdSlJMIUBww@s1FldsXE=K!aA+#s$Y)45DZY}dW zX&>6)!QltU$Mx5VF`-Z!_NrUSNuISVSSk`)CmkB;BwvBpAn2KlG$TMPSx(;%qQK zLw&wMS(sVU>QfJRyXTJpHPq)MGYQB^czrgaJ{@w%N_$QWKiO_O4#{L8V$hG3hX{0Z zp$PW7l14i}A*@_(2qD(pa&&YdaXE~#JNhEKdNBdeEuPC!bmuFQ?RSysSP|nasxa#? zBiHd9GV@1WN~?|irJS#aD#Egie;@R4Wm7^9-hw-}IGB9^CY=4@D6%=HkL@*^z#1I$ zQY^%T6Dnb08*$X|<3wuXenK;!XXDSHT&;%S2+OK`dHp=8P%doMuRotuz?rqQ`0K#5 z5*G{Jb*sMZS~mT%H9=e5?tUCa87%eMi`wTuABe1liD9sdax{dsDuxldftY?&NrXAX(4%g9`JXoY+qyJ&MD)6Qo=kc9e~7erW?I~P{knaEL?Ivv;-OIqvQ33H!% z!Q7Xf-*CDP_y1=wvK4b}vyiR72s1^xB`Q(*_95&9i{=s1ys7>jhl@ z;Ckum8i4AX! z{;R4Qu#RYVe}+te;pi0X{r-s0X;=((mbNO8H^sX&&hPvYcxomNGR9-6f}73KFe>4p zx(q)0mc^A_#)EY{Llj&Wg`CMLN4tAH^3f+1w}@v7kMnJ;JGbJi@fMz`OFP^78k$w? zaor@S!%Z9RrKqRRm9$5QHn{Ox`2@Qm^uQ)(+_X&`=gqiX28xO8t{wL^HU7UG7`fC$%Oc4wdjtRK=Z=fU~~}1Ow;y(#~~YRWGpmA8fC{`cf>6i^`_ib3wIK zvF7YW$yzJ1>DXTz*NFVlY?D3LBZ0%pZ}8k8_T==$<(YZd$5v(#>Y~!y{?)EZ+yGBiNC7Bd6}mxwDAO8d;&;p zn30fJ4EKM6N`O7y;T-Omt0|6Rvqc4X#8>?~SVkzp>eo>bsAsXQU=#T#v;f`;$}KvO zg;9(}W<|*OJoyvzokKaIe-V8t_CL%9adB>;gc~~XWj$>NgKswp!1BBq@xYSC#4d1= zhTKgkVsuOS--A=bx_sb>uy?$}J1t@K9%ny@_>i{7E=xhfbI(5etf!B@{}AHX%KU}6 z2T|1eFW2z|;%685WfQ*=$b@b5Ip^T8^8wh7t8E$`N_N_Er|NxgMotT94zJ)y|cu&HBP*Mj_3Xd^&jr|X_JL&05v*6?2 z+?N#Vi5)-{=U+xF(h{`YT%M(Io~77>tZn7Or#qZ6#Pv&5or#1}6j>%AU1;+d&)dHY zJEXG743srx2=c9i`X(7SGp`8hPo&rQ2Ri|ZMHah%g7(3Npeqaw4Q~FS*pW12#tf^y znr0eK_MQMiI%DPhZOYL^1ZtJ9{vpb3@!Iiq*jbh#Z{hBply>Je7^6-;g2Qe&4vC|7 z-gvVo-h|ybuCBz=TcBF-iAc9PscbsYV-`*@9e)D z#!F?>Gj~g>e6RgkOA-V=lXah4isB#`*iu|Rc}JiTs8V|=`Effo-S?YrN&?UuraUM?TAm=5>0I*B%uJvIXB5uydsW$A!W_{3K`F~G^iB_G_jy$n>5nuXpJ#Yj| zu9)8wtLZb2_?w_|fFRJor4~U%@!t7Y*eN6ScUS>j3sgFK@j+Y1*alEjXg8n@(2@1$7wo8_lQpK)f7nH5+1 z6VDf&cFAv;;S*dKJ0^p0qypgHabAIRrI&igVf%K-zE~f)Y`Vn>cBwJH>zPt zJ*-Tk-0P3r-UBc@FI;Lz@`xwwkT;#q6XsVW^SQ9?F^}-3A47!N1|CaIm zC|87de;tXm=fmkidvZM*9~mmbd?Y0@EWvD%AMU?_zQO%BNF$d{ysMc;!Y5h8Vk)#6 zx*mPu4)so`zlyvLo7?9a*#tHfgU}ZPwt2IBGR!RaYp-PgK0w@~qgM#!Yxg1Shjy)O zx&}xD`}bk!9;k*|K-_NochCd-y)0fu8-KC;6uh(Lvp&!@sKSQlOqq~emW^K2GDk1Tr~ zc#Hcxc?J*q7Z$t!W!N~de}G?}_g1k{<$`fy^UnfE4QV^PZcFPUmmW5Gzlt4C}0mgj^F1cW}Y?`qUn=&=1^ zD5|;xmKbY}5m~U+&xY1F!qS}=3U|btosalAvdpiY?mrBxr?Tm~sboHze-)x3?>2vv z2=2?^X4^eY!xt4V&Ko{|L3u%8?(ou*#qweNj7jOq!^`rD%8E;GSTw)zh7rROhb0a# zE6o|6Q<^v5nKvw_q(m85c8gLmam`Qs);G=H)t^#SRI97>CTjf&E?uIe9}J zdCPM0N}L77MN9@PyGdW>EX^w|EiTP29XzBvm~P5&3?5i^&%oR{LzL+$Q>NdAHkE+c z5)+iUV18LaPBw}tC|Y>SE!mT^bBc@bR-WT@6qOeiI*N*&jwSO83v!j=dCnYcNy{%D zR!~%+OfJsNE4)=16P7_)`2wWY>XMyZQe5U3ymV1P<%anPcGn<)n;rQ9;=ax0My# zpEr0&SgfLaXZp*U5bgYeg`yckX_UDruQZRP7Zp3k4lKLPkyn_vIIqZw8U7G@hru}t za&Nt6VA(YWc#xqyulqy;%X%sxQ+PWX^DQj~HMQ~`1w{@f35TCmT3ocy;k>UT&yic4 zQ%+QG0m*`uxMyJ597m*_hL@L>ibj$o8MbV3VJNoAg6|xYk{!3A=&}z1>`LOnUs>^!oqB@<^201)Qyr@hMFxd21^$g734Ua1&i}giNz(3 z{Nhqael7(i6dxz~X3C88bks43gCuX+@UpTJO^$|#CQF|0oDX)(%@f#%a9K*x`~`)1 z-9%=V7A#ztR~n23Z9`H|DstwPf(;E2A@SqO^Yf8D??Q!WFok(V3!RIC8HMB%YzOi} zjSV*P!AsM2s*B}IFa z$SY-NyF%!#?EKQapOxno<=m%0kCBAKbIMCg!4lcpyRrEs3(1ghM8fDDtRv|l5;_*= zITsb@3YMV^l`Se>n$6lnBJzuctYiyr%q}WlEM*5VVA^b%kn%$LF(eW10cJ!z2%0S` zEWpHjfNisL3X5~@)%1DxguA9>retM)4;hqPyr_J^aHvja-ZEzd-8lgb<8K0gN%+0Jwv?)thk~iVGsB1aG2YyNE0FA=Wc}aZ$Ogpl=gA| zjrP>*5~6d0tt~YHIW8CaxwQDcyxglp^ zi9&D*=Fc<><~w1(6vE1bhLPQfAt4BJfwTd3`wr=-Ysiw0{Lb&4qYEI$wxsNc*Hn!y?d3z$+v^fD(mwej(|1AFMc`Rbd&2z$VM!An%05 z-x~1`_FAdaLF-WKRoRb5gwzAWam*<$FU&2v*6GMED9UwQJFx6ptz!={K-go4;=34w z8JL$WPnyp(|Fq6QS}j3)5KR}Jm^@`j92$KWt=%B;GzBR8P!1=<>rhy{&>_Z89BP8p zfq~@wLTJh`S)i2?M%$E0Q!=Mr?I_K2qSt0Cg~dmbv%p9)4EB7v&d-g6b4Zy5#W~Kf z!AY=85g8o0hLsnDE5k?%!_-?GhNcmNZv(2KbkmS4&J~}7=wICxR5fY6r<}YU6@DJ zS~?%?CACusjL1(wT_D#m+;!b8j8(^A4mfWem^;*wLxGCGb15^kr{6sV(kz502Udxr zya?ks)K3afnPU;E&xmj$iDsgKTO2M_tXxR7LX+yeC4>jmyeMCxrIwZ!IH55^=o91_ z5i2{6AeWS2@~O8=0gI@)IlU-F0z(0!n z{cT7$=u%b9fIkv`F8pNpRq%8Bs_Hhr$E)gb_-o+D;*`w+%#kOh~+9(y&3*C_)hrAm?_`Fclbx(AI0=(+$BhlS>ts0&6wS;fbYaq|LgEG zv1%NLSuP8f#FOCL-@SAT1Uhq%dhH^p2%p}0UA9)Ah;3ua84u0We z)UUUql)&!?-wA&x{59CBGaG*MRM3O(Gtmz4Ehr&MvKa=nCP+z{o-vU2= z0m_G8m5X-4o~bnpRdp=#{7m?5@Ylfaf}gtu_*@2f`04OR zK8JRL-~0mL;a9y3{NY<(0iD6e2jJJh-?j~W2|sf?+7{Qjg41W#n)gSHs2KX2L$X%!p{59}v z;cwfG{P^CWswdz#H>zsl4*-W1hk5X;;ID$;41XK^1Mm;P&uj+0u0+0nM85Dh?M1%y z-%{1b;5YvX< zKTR<$x0$YtwODv05=AK>my-DPIkgRXL+Ncx?HzlEJ;rHSrriF6G1uKV;2Odt!6jUx zszcx_<9gfN=JCC($*!n*P2>KEtdyY$reQW1FrOGWTbg=V#{IFk zWn7FXlVGO%Gtvb{J)ZpCXhpeF$14$W1K{=|zuV2=_ul|Zz1;L_%UqXrWt4e#FwfK& zQ5Qeb9EefX@$dui<6KcoH9Q>%jzzr_Evh;#0F&Iyn&OHwr%E8G5hW2Y?;sxwVem&9 zB_nJv!k~tOd8df#%lad}9`SwQ2g*)$S*KT9fNN$D*R&XABtX^xZVURO4@2@>8RfE= zQ+hUyYZa6o7c(jFoFeJQvn(0CpjV9P%*g@~<~tkl6^OqP{f_0g5E`9s<5xyiTe4i% zsL>YW*`k#IY$UCDTV)OUvn*r2sV>Wu>Zk|xrem9=1Fj()ZhSTI&S17g)kR zXR(T zp{KcUIcEVIH%Kd|pPuHzGB4cDpaK$h|Iis9q`rdg<`0nN}XC~6{vJ47L{KRSgpe%Qwm@p{&P*B!Dg*8qO+4H{l{y^QYb zPQ3OaP4h5ST}ZsXfgvT@g*u?xf_@KrKRd`XlO(-XK`$$?*S{@ZLjm6octNk-hBCTo z6XG=wX^vnlAn5g+o~CwDwVR_q- z2KArK`u{vweRec#msJ?&)ZPaBI1<0SWheseG63+e1HS$2IW-y20sa#G&2n8$DshN9 z3b=W<2m5S>bs;Rn5XSOjQNJXFecOKedE}9pq^j3IFIu7vbrf>M{`5Ap0qgP9LF|W# z&)^BF`X+V5zhRW8Yj%@J2kwY+M;X$=Dw63EfL}wJs+J*)qcHg4F6Lbm2>l{dX+vyhOm&B3*!AWgk?b6Lc_f0o-GNyEgy_{sG!ksx8x3 zMlBDRb8Mq|fIR}(DkCiH!va*0T^ie-{L%#+lQ9-dpuA*-*X=Hd@ooc2?ua2CuM^*C zs=5F?7NCX1cf9~+0h$bF0oIub*5^mEP6@y*W0tD+Hu9s)KPQm? zgc$QezD!_YDT4Q#QP$urj7M13A2BG?+ew#~X~weBM4B$7iN8m)8S0VdPK_t1FIGmO z{^NoI1N};x4F!HBNOK3$TGklK(d%@j%|NqpqE7RWW>p?OP6B#cwi?omTNyQ>+A;%7 zloxGCl?-^&;xYJ{#TYZex4aiI-C&~@fJzhT+Tf?(ud3H#F2Hg&G#%_;6!%h3Lve!F zSvOlO_+h20{)N1Ly`jBy8ZI%4$el59NV5-V{`p8y&S{&sBkTym(6t2HK@Lq62g88Z zKEw~>v))b^7cA1o1?1rYfH?%1+l?^N{>|6rhx#KOa3=s)5r9K~4_?0;6_ngzo~dOk z^xbm6C)Iv?c+RKP0{)MI{HeEH)+~-A?hmpD+l=^dek<{p7*87Efsa$eCpjjF59=9= z`In7=A7_M@^<1RalQbO(xV?Y_+i5gIzoyZY`D7x#9`VBi@xU{^CrNO3Oe#Hz-*Uh; z0M2ZbuR#A;5v&l#H{^)~z$cwKr(OzpOHsU5HfSvL-!#a`!y&9hT-uSQ@K>sOs}UE_ zV6jF6G92q<<6IKp&}{|t)#}9f!H9QWAbuj^a}nPipDjXsCgN`lWz*#^3zbjRseQZK;NPclVE2-^{yt7;jZ1F|gj^?U(N){Ev<5bLh9;GNP7rhbr*bi3X_Hc*Y5d{xGe%$@&;A?z*wHd zjp8T=b+8Z!YXNK*V4vjk(|Z2k1v!>pt%I|j8xURiYs~2w^Ofy)kKTL^#Q6bN1-L;* zIPk+91OLTh9EJkj>iCVUS7`ez z4Uhoiw!mBg(`-bVRo@{E>2LsPx{&6#cn&ScoD?Vs2nGrQ7}LdKp0;G8sy=sqy0kz# zBZ7cqdnF^CAL*VrFWrhjGU^$YQ3BZ6PpRs!jj*uACb=v{J@p1d8JSHjlH~wLx^F?c zW~BQ*bmx5ZM9f=%M!h)`ib3z^gx;iW^?|@s&a+I6q3rgH2Q22aKMBDz@|+#{kaOA1 zfS+oF2Y(eIXNn!nFrgDl0CyH}97_lA(8q*z1~fo0;;|9%$1#Wgp)p^;qnqH^t}w`P z&Ghr{1KbQ6cg^0oajv4ucEGD*GCma<*qwl{f|9Mn~uDWoe!HA;I}&=3!sIr<3#(z7}5U$z8PyE%Z&8~KeFG@x&hJN3WjY7+f>{|2SB~;0{MPp$oCGB zZzAB2Z@+lHS%6E%n#vzA4QcmFb=fj)xu zs|WnZ-C??Vfv~a0={A-FaP5E_3%JpE4%82HDA9B}^Ro0)lq|rc7-680FuxmMC-MZ> zfhqtu!$>QR`&LHX3E7$%lr7l?vjM-gK~--v<}3MhvCgLC_bR~c1)R_w`dHXJUKonB z3*r%PYgE;j@od=+t5a_$D1oUQ8_f-t4Alv9Tko&OiE-jlq_08xyF>7hZDCGlZz?q( zX%UBMH(mz%V$-l&}>mu>}0L1j< z-@yFT-7-CSZ;Mv`5=Uf+o_o^|kR@ioTu+Bm0JS4M~m=FEjZ2eEP@{+}RpoenIVm)Y6Dy&x3raWP_zG74U z+yeyz)}9Mhc)(=++N7)|E;9M=MDo)j`JY7cKa1p;szq{SzPJ12;W=Ko&QJc(6h9H= z{?z&xlWCpV`lMNT)<~0(_*G`>FU`tEW4vmzKKPs@pn5UbCkL9Y^sv>RH(6gdn*{CO zHCqpw$p(RD0KP_?E>`A!rjj3fU@5$9wqkS1i{zxwqpD0TeU(b<6@QOY&R8el`HN`l z!*<2pW60BS%4(Z+ZJhF^&H8wp@>koCR=aZQ5-WZiVkRT}gIGTQC)T1J%7<8;T9fskQOdKXd(aP=t#3ssuSKPcmi*CQOx9mVD;~4; zRjcxpd1^(pvL?#9!KyrLwc`0@>l6WY&1_`yh-qh3n@wqow&HiUjlZieL3r~ed<0ue zUT3nt9H%sztS{M>LndoooN~f!{UA>H+`{nxSo!?dXg+@vZFR>fO*TG%X0xt|Q(o@L z=OaC>zl~EW;*c#e?9EMJ)2-)B%A+JdLVmQ*WW^4yhs@UBTa_owQ;%7dUqo4bR^^<< zisz@T$r9{uChPiWrPgfSZB@3Ir=GJazlpN`&Z?}lTJgM71B<;0x!!4=udI-{r!Rp2 zf$62Frg-HUtMylxD!Zbs55+5QUt&GmSNZA^Ygb=obup8I zQ+6v-b;MZ_{>#2Hzge^3FSovbsq(nV`qZV$PP27?U*&j|b$4IoQHym$UuB!c`r)OD zYUT4Y(blK>Dkpn*On7Rv)+E0 z;*YXEe!1edSgS5q_FI2t!i%Se_3_J;1K_30m2)=hmzOCmJ^6g1r}f=3*u(m9f8`%Nt$*#W{4&OR zu)p$L%+$^OlqX`XPh6q6do%Wrc0NDc*NX7>`&yCqi_7`@R6peXTz^LH>o1F$KCi~~ zuQ*EdLw%HeX6wl~f@RV7&@>E0Ze;|_9=#_O8R2?9ABVt z`=xR-GRCx(p!+#hE#9<{a-$Zrj1%y0%TtuE;R|~aVgJAW&3=KcB>#?q=BMGJ%M|5u zxIu8E;8Njc!sWv)fvbjF2e%on4z306Alxyy({RyFq=y>>HwrElZYEql+!DBIxOH%w z;p*U8;10qagF6iuU5@l{gWyKNrNYgG%ZFP6R}HrgZZljRTnpSmxMOgq;i54pxEyW} z+$gwIxS4SIa7*B-;nu-zhO2{XfjbCy4DK{s^irgU8w58BE){MjTt3_qxN5j{aGT-k z;9B4g!X1M<4Hvx(>EQ;!je<*sn+cZ>w*;;lZXMiaxH`BNxPx%V;7-Fu!}PfvZV=ok zxKy~AaQSdc;Hu%)!EJ`CgKL312zLzbG+gxkNDns%ZWLT9+)TK9xFvAaaO>bU!_~pH zz#W7;26q}R`sYXwHwbPNTq@j5xO})JaMf_@;5Nh6!L`60ggXXz8ZLS{(!&jc8wHmN zHxn)&ZV6m9+&Z|;aCLAka0lUz!JUSSMqhF{+#tA7aH()J;qu{@z*WPogM0nuAn%fc zal}M!z30^(!^(<><>oCYhur=`U3rBvOq{0~R$46mvPC#@>YTp-;rHRpdO?md499@- zhAk{AA13YsxdC@P3|p9!gR_LZy(1g2I5IpeZxK$R^NjnjMf1xRDZ_BOtN?ID34=qcqvgenU;)Vo~M0?ic{M&ff0H_BXb!9xr zOvmxG{ztvbKh8fyc%P2t>3@1({RskeIND@%13uEBWIxEaSq3=vv2^i4umD|pXmF%o7hvde41jvM z&l%ummzfm00VJ^Yr`IPMZIaTPqb9gqWpiqGjn(EZZ-iw`o4Yo z{#P&Oo;x#V&YW}R%$d1!C(FE(@{*F04CmL^=xY#b`MzP~02ZxLX*ouQ(cc(k3^Y!a zbSFRImQ_h|^&^sIsPsmZ)7RLe45JHIf1Tb3u=#ul<0|m5F;^PFnt3 z{-WHfB*VETp<-T6`V~k=_HIAY2YZrl0AOES)~HRaE>$|unfX1AX72rDox8OS9dVW5h|HXw5#eEi@U4o0h0l2c{4z{4--vRH% zwL#-I1D=j+ILdqr7yCyJu3K=O3;dUW{O!iI43`JbPQ=Auo`$#M{s*`&13rZb_zl7R zgMhYR_y>3H{|(&t)%R;~pN;$90R9=*F#R02#$a5}<2nw{#^L%lu35nU zh>O3U<2oJBPQ^71_x%C+8x44oz8?iR7tbEY)ro61t~^}M@9X*|2l-Cc_ak*#C(n_> zqmMMB&Uai~{?s`9v!bW=Qs8)`ogJ5chQ`kWJS{HGjh>(pM=ZnLiAQih5_u-Y<@+}9 znflpR)>wCDC;~Im@{kznFaU;t}Agpf~yTzF0L@HYFzViy@cyET+ia-?;Zu@-xpo?D{%iVt}9&6 z9>e`GjlT-`TYX;)I7r_&X?Q;1-*6p;>tS4H;rbt3{7uF6OtkHU>t}s5 zJP9xv*9C+~pN@;aS_O<|z<=s{H+a=CKs;oh`3*ad{t-7v8pfXclZ+JHpN^5s_f_cb z=NLOt&o>c8ojw#X0|o=~bt3Q+&V^nf47QDU7H)D;K2?|BLFV+2^k<)d@(qT;{z-Zn zas13W&oC+yu=RJ>59YxGfV2`p5cm&UP@> z-q+9$=g0KvF!(u_CmDCZ@sR)Lk9Sg4{_jG8^;aiJOvv=UG$Q>&Q;bkteZ$#l^pEt1 z^>r}BD7f7Ye!5;W4Eh4Le`#F)rI2S!ev-sitnW4GBWp^M0U-R9!{{3kTrh@Y`fwO? z*Y6Eul}>+cFk&DCpqn-RO;`Qo=XN;ZrfEqM%d-9#QGXho9%B*W@5Z%f5a>HUmTv_8 zMpOgkYN2C5bRBX-s7TVW{`skaOzu*Gs10D8K$d!0nT5S0S=%-}{=43kmXq2ya@mmM} zcQ;1+$2q_&5#YY6^PlDFk0;>S$+%{HPf77a^s3unKMVr*X?ZlUqv{{|Pmk+QXP@b$ zs`gzC{kKd_GS=WR`LBk3b3)n5q!aIezi2{0{VSAZ{L9`LL%3q_cg^arXCGoWJ@l+T;9K|6Qop`4N8%6{USQNyb6a zzXI)G;Bg}W@s)tNHEJATeYGxorF}FEhkV8+8SBuGng6V0Jk&qZf0+7%|KJ$N^s^!8 zTrhtJaMG(r`8G`6inTmS(SCRT9)^zM_79hghP-Ddi7z9)4A9R&{fjmIbnxN)SpNls z9E|m2t`KLBe~Yu%WpU}Pz|&q-^9}L~@kf3cxO*P1Tsp^{${Hgw{)~xhPYe7>*Huw}@)Owm98B2mM>)#p@i_bN z4uQO{NRrrv=@-G@*I@kQT#oq7?1->;iiQ2*ZPWA{T%y;r1XS_TF^<%N;QJw!!asJ^kFx~#+Xn(7ReN|>88Ef_Uad$2Xy2hilVW=PD z`xSUhd6mLGoFChNANu2*+d&ieOkafwV#edq@$K$7dt1!*p}!uF{A|zWY}gydYnl!5 z`51rxIWI}Z8OrBJ@XuKo4>%7beGl5#g#3>G7#L^&6QGYYj3?xm^gJ$mBfnGn;~)Ja zJ{t5J8>9C9?YQ=O$S>j_hn|J{+TX+4)i)LWpMu|f*LWH@8S=j`YQL{v41QhlO@EZj ze|yhDw%H!;- zg7$+&!V|T=H=`rf&rC9&M1IQGfc#pp(6Spi`MDb9ogeGJ9PQ0;+2f{^SpAsSjrTGc-bhEd<9)^y0v36QVzBfS8w+?wckREYlN z{Fwec+A{+F18hPb1B~FQ@L#`(&L8fJ>z{LASXmfvk3xRd_efm(-+^Crekb7OKpcMF zDd6YfsDHmD&i;-@f3C#%=S5l4e;fL%guPx4obs<70{en}Kc>^4gT9;}+fxDm-sbY} z3t?ZCurHX6(ED3l|1A0j?BUl@|2PKxr9FbRX7J7W{sMnB_7T;HG~=sA9y^-;vA%C0 zzHxrU&jg-}cxNT<$^Ql5$N5nnlj7PpG2KaJew2s3wM>uBpPohi&X4H@z|XBpGQNU) z+V2?1$KC(F3Vr+p{?1A77uTQH#`))oaq`=X@up@uLK-NT{QnL8zw)FcnXeOn5bc`- z`yPb)iJyY@)x$qH`CZ-0Tm z$%j8gF{$ruc3l0VJkEz=-SO>4jK^)TPsblt$H{X!65R1_McnwB4u9{S4~@lm$pv1R ztki#hoWK63=7oU#ypbC#pFSv`i}>cS_=kIR{yNx4 z+RtDUFhSbme2n|fkM$MC(R&y6(dDw&<t%h+5>LtCC;^a3G{<{*v8P}MY zeq)^c=A&OW)vI?o)Zc}mSA)Un>lm7tzZ31Rbd4{I;BQ*sPiJU)SGwx^Ciqzc+#Rp4 z1ix)B;T?k7WE}eQ9E=xmt1@0}hoh;1vhDy*e%1k2)7(5TD?Y@b?<@ z74@g-#xtb9I@;a__>*>*|Nd=U`+th|WFX$)G?DH78_H)q6fOTmT>k6O|C(I=_cqvX zu50`{GfrRo`+>0jQC~YCS9gDTIN3>M{a7D!jVILq)Mzr~fp-OQ_O>j}9tyvP{rx(mED^_WVQ+$Ps3rL`#tn>zCoVd_8Ra3aEtf0EOxZ3bt zHD#KA_`>2se?`@V{DspBCQQrndA(zYco!nAs4Sl#ah7b!k}xfMq;ImXctK@ZL1D3P zZb9L7zJkEw35v9L;n>RWOh@ysDql3;SWvuRLB&Gwmbj9{geD4)Q9{{63#*C?{KdZN z;__;=BYU{IDGAJl&=!^!7JC=wUtY*cx+h&G?GQ=Lg>cG!g$4e?5~JE*Ra{k7QRSpuJu(`m6k&vlC!wHNayp-C|^_xY-(|JU;*0UyLRznUuAJsbp@sFU*cPsrOSZ9 z#Z>53(>@Y5wdBeLjClRmCDmyU15iR#s6ciW^>7Q9iHq+U%i9 zAU=g&rnJinN1$=V{({o7Az8lss?r6;zN+Gqg6a}qWkp$O;galZR9IfT*zcQro!>j3 zTxwR3e;QSc7FHEk!e}e13a%|CH&c43RNG79)a;?x7W=ibe5FO&w5p*TC@$JkSlfuw zifXj7x>&bj`bCFepVTz<8I5#j4G_!qDA=vs16=n}rgyxl&6)Q5`o1rX~9py-J=Tua}dLTV! z_f3G%zJmt~DvF9li-&9Cu)?z9f+{Zx50Szk;D-gXEX)QEsRPKI3`52jmR9?uLYmz) z|Ao+IS!p>^kT*^pVzu6>WJ~Kqt7E!vI(*Nx3w=|k&7CkU$2V=5Z#smDJ5_6S4qRCg zn>1f6(cNFr#L23|h}(2rlT$@+Vns_Us^K9}32o^}ijbcKLKv$|T&N^4jBb*koq*18 z^wxs1VqF>!A||fgF!~&Hk6uu%8jdbly{MoPGNc0sBg5Ujzp$X%uf6sW8KACrntw=+ zL#86&_f^dERTY$9TkM;+zz>n%pxb-|b{cJnt9z7|U)zISD|^sQjg#HsN@=E|!aiJq z&&OMqV^0xx36YP7oAh%8R{nMZ+A(FC4=$PszH)Rl`1zd5g3_u9&>RgbP+n2RLA=Pf zprCRBp5^$W{~|{YJujZ1*NrH?K2T8R^H&IpQ5n5(+E5?TyxwWUebYwxP@VH|3`Xqk zPrZEVoisO_zzc>aD@Hj`3U?D=QT`#>m8Hdn#fwU-i#a-=D+UVvK0k&cf1nawd%|~E z=d>$)6DA0q{Am+?dH|P^u&P+b9i@o>D)CG_67fuoh-YHFc-Xc7Edu$Xmh#1IVk%4# zMlmI76yqGDK&u^R^>4I^f2RnJOz%+z9v$gL=SOfPh(=2&7Qhay()62wn zGut?yH^z@3>@F_DbS=BuFD^gFH)YxcU-k&!V32t|8Dw71 z1}RC24HD$Oph2p5{qtDjf3?hFtgVN6d-f1a?WzNnl@(R~;v$)a!0WMZe|DdFEN`=gkWtH^}2q8L)u6CBDGc68&YGVut{`TyVTeyn_NgYgpvc^_ho#*dkS;IA zVuV`p_0HFeOT7ic|NA7U*D;+1vCkF){FjVZUq}XOo^#}q;KFV98P0!n==deb=gW~& zH`)E?&ja1EOYGF0MeH6@kHm2&T08xJeE!|*$bbcbn2}+eYh-W@40uahP$}=yj$pk5 z?~t(0q5eILH^@d-1bnhqJ8-8!m(eP5gtaShc!Pj zG`t@94>Po>dS3mRmm&`%50{Ne%l}iS)xBC1Cgw5LH2O=hro+h1Wk(`6yk`3kvl#7~ z5|6Ce*<}^j45GGtsHyhi1!egKRn^6Lcxi6{8Cy{}uGl}dqQdVjD_&5H?JamX&0odE zTihWnzpA2=dtu6oxlzS6b>~}nV_sFU(8&V?E#~NfmmydT;6%n>P|n>rdP~f;fr2V* zS1G(cP+Enp1@b~sJ*&bZH}-hMJS&)sB`D>JBX7uaCSWHd}^bR5Gk#y_D(G|xND)Pw8~%>K<@Y9^r`y7!ioiz1y#kE7xB%zA-e>a5y{yX zmX=rI9r*&h{KT?*Y5BYgC(22bq(hvXfWNdXdt@~vfqh;T{)%$!p8(my>%65#X+@zQ zGh<(%sB~db=}^|9^2^2;KX&Fob_*&YIw|3UJo&K4eEAnLd0~OfwuRD=pVl(iHT78X~_*rzzjsV>0=BfdJ87JH|TjNC`r$YJy3IqD7+ z3nlJua&N$?ILrndS*y{Tbq<$z%Cw5IYRHf5M>gE_TF6-f#ev8ZHJwDkMhUd-| zf=;u$w`hsfSHW#=YIZ(h2^T^tWYuPxzp||7jW5{SA{$+}wFQPH@A9MK8!E3Oc7enm05j}&U>|qhihxLf6 zC2?kuJwop_;~uF}*?EW^c^6_!1TBtR$y9n|A?L^o=zf%dSY-D|f;6_pz3op`AMLN* zICBgn0j;rmCrE;%;mU~APLTxZ7Z#OP)5?0xFoKdUD)1M0^YbGc_K5rZ`K87J+0-X( z=`KrDhq48JEQZbva37?<%3GRWC`LRaD?y*Hq8q}yyJ(WC_;OVy0sDHlT>?oWCI9jW z!}Ntd@zRNi^sK?`Y&cu&L8&T6Q@F=Vm`^~%$ykJaa@Y2jahMQva$rvyTrRgrLWbCR zik{_%|5BSK9eyLuaX~>jb~9FGcN@0o`=dg0vSnfDaLhVR68YUt4-9Z)Z8r|4PfO5T zWS*X=`|$b9DTs+MXf7_8Te>hCa~)rGDFzfQuKT!+RC#Gdz_lY*v5&_IbeTPbhJ<~t z#Z_?M-UU765_6l&eX_nXY$qzm`^{dnMlBPhy`@UE-B=nnuPlIf)3Q|8U1}G?GO)?i z=|3a6N42=90z+_dm6m<)J%|lXREi39cODmuN0Qy$*Alz3L{tvr{Sp^(dQYO%IQP;` zxQ=_8tF}QWA`x|>iBiQB5+y|3Wx_ksl@(uULB29%quEbVqCj`p_d9I6I<>sFB(2VzIHp7KUVn)!)>wYafWvC+FR zM*Md#?TqB%$`yeIyh0c+d zns~TUL)>2#O%j(P&q%u?RCShv@)H`+@52ftDhLKnsf{a8~*Gz1gCZ zYibPBGF<_Sh*@LZHlM}DtJrvwFj$?IpyafeN@Vy^m2~UHQcpJuva(bez&6E&rB#0H ztVgyfiETVGDkM%;>p;B}*JDKD(#|-MI5m417o*^yxwa&W5uE75Kb99(E|G;QB6??K zViL*)NONVv$j$z)Pt7F3nFaMAfFW6x{L)REiF`vRlTv(1lC+Mu1aH$P^q3UWxr&Mx1Qr)pMaP4lh6C4FsmsLA zJ2(zT;+XE)dzfZVpXv7Jnly!*;4wyk!$u66!pI_g{ZR^i6}tk{?o9POA}Kw@q|5v^ z;!2~e%KSFL^Oz>+07DOPv8~o=@vU}>I8mF6eVr7Uy13kkVm$lEM?@?;j_^&Li|-AK zIpxL*Ggs32abWbZESX_0BI~t$1FQ2-m>=2PG(W*g0YATUy$R(Wu zz>B@#=wTo(UnCB7Xp0At96boewFDNCz9X2(7f;T>7ICR+froYTL*X6V{%t%&e&R z|Gf1L8A9{Z-+JS_181Y!gd_XBjLpEC|2*e&6SM~(fI7ViYdZz}GF=(|kf?1VR;`9q z-099|<@ly;WR!xETLIQOtBU6ql=1b`+#dQSOm^xt+1dPM_s||?L=!sfCwLR1GMWh6 zg|xn~jAC7J)PKgh;^^~4ONDT!?qxIA@CEPO&7q19>h`q95vg0wo?W#QQ+2O1I}2~T z)Uv#qdZXFh2peUkbNPM$;OdIOSw!&Sa|n?kM5_Hoh3B42bU4v#3k!YK#IlL$7mJaS zg(@GGVf{Sw01*ckcS;d!7BhrF95fdzvqn?j(9-(q-bfj_F ztXZSSV9U_pp@VfTPR?vsT1=rKF(i4yMIVEIvBCL|_kAK*GSd11>yN9iL5%4~Mbi0{ zB~x%phN3`<4lU;A{W1Ef9-~=au+BRdbY@l0+=EXvz5J4&A<}P30mzMUDSbC(Prt zPo+3mU&+bz<8U31i~q3>hptnzs@Ex}@-t^VJ*OOVs*ALoatbPKI;kFrJo=?Dt(iyez+W3%z2`uJ7xM9_m9RIJkSr0?!j4kOK{@M2}a*B>RDQ8DUQBM zGmZt$A0_vU&d+088gBnFRC}UvlFsk{YAKF_@faBzA0XwAH_p@ePbB}*#&C@*`u&AI zd8j^(<@*_QdwlPq=iIU&!SBjj1+gcmbk1J0Tv+>3S*;!v<6 z4J!$s#@}AiaIuCrYFMLTorWVw7x`CexJtw2O#cP`1_9yuumeJzKemE!6Y>+{OsCa^ zIJ;{NVGi_4h_j%Y2=B+=H6g?~Sj~i=K(B=3p;yAW_!~Nei*Ozl;YTB8&X39>+yMSH%pt@%P!|)< z!MTNm199FJ;bzE@a3A_R;d;Z!SPjnvSVsI0kSpO|VfTbMZ*DE&-QfR0GGR6~LhJ2*=0{ST-&J&%5=OAayChTJva|m(P zSP>ySVhJHUeHkGfP9@>dkTW3;16xd(igWA;;h}2?;n3>{aWL6(!V_VqggCRUo^Sy4 zLwGXml<*XsOHcS!_zgmwO}3iwRM;)y*P%zk4A?E<>9AYEGhnxbnXp?z=&^m?gx`hU z39mwbA^aZxUIC#G{)n&uc0yPLy%H9~{}9fD{~^2<{fMvxew1)N{+6T*M2B}9L2B3udm6W#^=6W#;;6Rv{(3Gape34aRx z6W#~?6E;HsgbzXggbzdigpWY~glnLG!pES0!Y1gS@K?}3;jf{8!pEV1!gbI;;d!snrX!WW@`!rw#x zgfBt=gfBz?gs(vVgnxwo33o&Pgs(yWgs(&Ygl|CqgzeBj;a{MC!Z)FR!ndG*!ndJ+ z!grv5LL2%g{2TO7_%8HM_;=`^unYPpd=L63d>{HJ{1EylJOKR@ehmE+{tNmi{1o~p zJOup{CM6k-gnbYn5cb92A0WgZ?^;WEY?9GLh(GqVju3xXs+sWkBx3`iC&_3bJR!;0 zN{I7gcM#%S+!qLOeqkHo*OH7~gadJ&G9eDV+(Y<{B%_@Wf2?dT;ps_+O?XC)1 z;_qia1}1`AQ?70`oZq3xlW}|K!4&=A(1UQ;@)z=qj&>9~^k5osCU>+64hL zjgoxgxq`E3$t>bof?rI04)F}ZbBUJ_PZNAB@k-)`;3QqLn0VKxc<|sP;x)wE1!q+y z%ZaxMKAm_y@fN{Zb;(NNO@hxR-blPr@HxcS5U&@!h@iyYQf|K=<-Nds5zma%5@eILhh}*=|1g|6BMcfd4Iq?I;yFOw2ZzXQP zP&(QLuP4qwPt?&S_zL1_#9IVkNgPoI+AsJj;u*vn1#cvd)9ulI!B-PUl#liczJ@q@ z1==t8TH>&Fv|sQh;;?G8U+{Ir^NHsQ-b{QJ@hrhN5T8RlL+}>jCB)MN-%7laxFI-2 zTe6sV*Fm=b1>!Zt+XbhnOO_LF6MPr(dg3jDQ}iV(i8l$phj=6LM#0;OuOVJ9_+H{o z#A^hnYD$`kR|>w5cnk44f>Tu`JBa5CzMps-@m#^Fx{}?*vjjg#yq$Q4;0A6>Y~pEx zCll`?ZU~-2`~dN;f3f{=pwK_Uy^eOl(}<@KZxb97A?TlYi{RBQ@aw+KFq_)6kU zg3l)2NW4+-ImFixuNSwzCHO(&?Zh(#H=x=Qn|PYw$;7*e8-k}0KR~?eL+Ss-v6_bV3!X+ig?O9b z1Bj;)ZxKA5cslVW!3Pr0Al@i=2Ju0}>jlpwo<+Py@Ik~!5U&*cJmR^;=Lnufd_3`d z!E=b`6VDZV1o2tKvjo4G_#EOHg69%1A)Y4qSmKq$4Z+6~UrfB~1L^<7YlycCo=spzMS|0;$8og{!iTK2fSVI zdg3X>+XP=hJdJpZ;46uz6K@iH74Zz>je<84A4I%f@YTe#h}Q_dhWH5Lm4dG&o=bd= z;7!EG6VDfX9r1kPxq>$npG7=N@D0T05YG_2g?I_^G{LtLuOw~=zJvH;;$8ct{}Znv z-Y$3>@#VzZ1m8uxo_LGkyNRzP-X!=Q;*G=`1#c(5hIqZ;dxgOJRyCDkWRB6pUpx! znf4(lBwB?TTuZ|K%w!V$iV#d=gWVK`-zy=)f57e4wtibk-e|7qy9b3_XPxek!nPW~msX07pKyq+Pa`5A< zsxD@!LA(@Y&k9~cwnYM4$tZG^|AVc*@#^pSu4%P`+c)Fs*vtV|&{TJ6R|cYS&ie3n#W=*ns_Z=&v%(i=+PlCDP0Axtm{!CRL+7I^^ZGS6*0edj`@1^|^sk{B(i?n}*)Bg9}?GJDHLhXkx60{#m zllFrbw%;6>8EX&Wx2D^B1k%%umz```yH zhzXTpC^MJ~?0`L#JHqdo-geaEU#S$YB@3ERJhUIl1kUT;PAkNsWK(-$w6+QM)Vaex2Q$#l zqqY7!Gw3-Q+L$>+pJ;#lKVU*`O?e#rI0@W&>NxKYe%!|s`Uh_8Owcm3tk7N*foDoF z*ksx`+;j?hd8oxxhb2co%dmodpB7%=>1M#I;Tb&LR&}R69fX=0zA(dHQ=LIj^~XUp#`iyFC6}U-OW4iOGto;uw_rWkur3baUxR*g zA9NS~IQVf&cw2aTb-@Q)k^_@I*wQC(!3SHC0w;#MVl2&CXly&mh<_-4a^Ci%U@qJH zpqT&J&Q~M;j*pp;45I!=J9n>13S@q`oda6nybrg-h>So^_@(R?^t|9-`~Kt6jvK%% z>j9UGlO}e)tnF6O|63na(YYPzn(p6{LArC3{Ra#V6tTPg@GfXS)@OTdKf2(5L;EpM z$G0Cn7VXD6b+7G*>HjyhA7&iieso{7AM5qKwjX`&zoGpwW7YoVW6-BKD5r<7IS>vU zGy^I2JMd_Te+FV)%1c2qK&k?WeQUnGJ&&V`xN|FyuGM}5RuMdq6wXWbf5ZM6Bgg(` za4&jhuq8E|H_*K1fEiF@?Do8LmbLQIJ6|UQ@JEQgYxmuX@Y}ACdY{ItX1KL*s1AXF zYap~jJMbX9Jset2D3gd2)WDH!g_`*ctbG4ndg0R|&o}V-jTn)U=99FuB55tIw9AmD zc(yjaz~`aW_?P^Lw&KPL%|>%T1b#2H0uSuDHVf3@>2@#Ie2s11He4?m!4~k&+-7i( zr0!zsb}tut0l2d*dw)2av;XM?5{N(C2EPd)2-941lMvV2S6I~`o1cH&9Tro6MQ z^^_=UBNdJ+C%=t0g{Uese?Jl!CWNPFreZEJ9pmk9{zmgUw<{^LWlVb6cq>@8BJ)2rO zuETRZZe)L8ikxUJ`Dg+rIPV9(rK`%{pY*XgW&mQm;ErUnX`lahG~|5-jynD`Mf%Gd zZbe&qQi&N{g9^n=sGDeoZ-{OvK34zIKBNWP-C3c;gDyFZYVea`i8J|9j- z)Oj5J!}2yy=w(<;?N;_}HKko>m<^)kiTjgwAgY$S!omiOiMn=_KPfZSZeb5ol7#Z> z`l2?|qUoH|W=_~Y@;T2fKL>rW#P!-GqzVnFK8LCo55n|d%RsjM+t8NTKrdod?H{#X zHTq+4N4qjQ`mh2e$L^ZG407u@8`F+Ws=T!0W#(CY&{~A0rGw#5I}Vaw@Wg|i zFNL?6GB!o3^3-LLs%pY_X*mOk2M0MrPjChAVB})2FwMPxp){hdzz>&ahE}2W&)C0B zbefLG$o00)O}JhGRT+xafY$MjB*i?UlsFda@tE^-%m@C8&QjYtctDbYsQ{t^&e?-C zXa=21e={%B%HKcgP7d<$kIGGL8_2Z0y%g@9Y=C=ut>$Bq%2V$4DSfF zEZbmt-w{C%$h5Bn)y_v{K5mXbXf2^dg?Dtm>cs29-x%TVNBFz$hvjcb)Q$GH^28PF z$CySo&x71!+0^SEJ@L8D#pf^I1fLHk;?ohQnqLUNcfeX}TmOuGb(riALYGxDEcukCpVy%>l|=p|7U1F?Zp0xkvt6+PVf=t>fZ zrTV{aXJC>O&Pz!+|Jt6H!J<}PM&}-^5#}Y+cEwKoDb|d4?A4SH`sQqy6XleQamZeV zf3OU(9F_1{J<{}g4(#REF!S2hPq9BHwtY{bX)!IMmaRNll>HP0KTGqb!2jsxeZwBj zsaW^sDgC+H_j>2o618v(TXuj#TddoY@dny>5B@nu^DR z`_9AqoEb>9_n;fswhl^@#ku4rghSrF{<&tFIWcqOx4;SkAGTGh;Wx?~GE-RL&nln^Sy4Tg7ks*Jev4L3u2{t}hfTJ)RR z)&tlzhGoAmU0&s{e~I!+5>_V*t8wyL2)#g?-Q{&J1o=hfH4_WQ8CXfR0{iWy=!CVc z&tkJ33=q0W;lz&-Q!>4xcYknSGOGKQIU|iD3lf-(Q-b}kM$Ypj`djMf>TiQTH-D3;u%&zL z7vLjmThqy3U;rG7TW9(7eCWp1nWqjLL@^r>y-BuY^u!eV;@!xzRPrGD#pX%F?Ej>6 zX{2)UhaNi}`lo*7O;U>W9o1X$N4Pu!=G>3%+Nb=}i}(U>ah?Q4+smV<)GB z3P^)b^!wD{wiIPS$@Z@?@`K7*()Ba6d6`~`4qm|^(3E5q?~nK++-rZN;~2aNa9*{6 z_Q2*x(Olf5Tfu%C;ZDc$wcRHw+{0pa+6H;%EM~*doB6H|*^=#}UqfgZC9mTTZ`vko z2{xW#HZ%>(u7xB zQoBzke38|g(0Ryi$-itAqz#Z}dItcc!o35a)20F>v+rU!4MTXC`G+!5FmQpX2sp8# zC-g(i**s53YVB6mB{Fu_2dq#QigA%eBIeK>VqCn)z>WR)SD@0T>u|dri!JzV^X|g+ z2g4eNH5cYJgY}Z?UTo3JEau{5yxn0bGe0G~k@cA4_Js+RAzF?){j@B9>H46`vl=b3Cbghb>av}zKwY(EzPE-!X z$-h|anN6~2swLD|^)`FLF4D_j3YTY~(M4ngJws$dz3}1tyYVp1oVx#mv1tSPc|vzn zu+sWCVFX(uVyHpc2=A))$SlGWY8DDHqB2921gpD@v5KQKbE7D2gDB0l)G-H{HR~u+ z1GYPE#C#3w|6pH@-`jKf62a)W0$KUoiSq|Pi3id7i08IhEEp2Gqup5Zv0MHKdZRTx z%uBebg7cD>NJr1c{pZHh`IhiRt?}I;NZE@?=PP{dBC?CKKdK`dh#zY2N-; zKi(!oFe9(1x4??1_~T<(JN)s9sDQ3a`Qrg?G?K&kuPqgF$WUFyn~*@gV5o zv-;y*^c+Xvk6&QE&*hI#ghW1vKYkQmh2ni2#_Fs$#*SCd!k^Z*o`es}j&QtM3~hc^ z`K+Tpk3c>HX(^veKJUY=d=B}TkPGE=Cn|R26T6@5XE4y()_;D2aBy65B)kiJ-8?Fa z&OqgN_beJA+kQ}#A~lIUUNdP&byr0 zgb?dXd=;c8<&&_iWO>`|KccJEww}Qj-82A0ewsOx3-_t!Oj*c6lx@vSV<=$%PSmzH z?A?P|aLv+o!&A2z^u~MYT1ifQ_;5G-kTc*d@9YE$^5z|%4N)zCt-|0wSZYP;Syo}<<6MjcD{fCwU_o032L zFgyeEy>xTwfbe3@_^edf4TKk~$tjpXpO4kOrRm|L1P_nk^4Ze#LwTv;5qkd26||^- z&r309q=);2XQr5aP&&=bWs{bsV^I$6yckWgW~PJ(q;x(ZdIQ^PH&ppVy_tg%|(H{kqwOwn>zeKdfMFd#L1RBdYnzqNfGGk<$ z>Kc8S*{zk0jtlbCab_7+g}lzX&!vdvv^Lb&vQ5_)sE^JM{_n_t&|&2t-qA4(8i4`u<;$ z|7q}Ru>TKwkblx$aV*gYuJ>-A4{Q3UeS=_(^hJDxXsfD-p zLkoEWBf~-9d=688qF2En?)L<@rH|}Vu4W~^d*~J)IrF0Uc;`u%qd5%*-nk|c@3`KZ zJDoH(zL_oYO`H88JYH?xgesiNbKUa!~iCb1e@;*3B4U7^3BJ)H)FXR&YyX z;F{Q?(#B&qfwN(Q@f^zyMwOZE*Q7_|1)AjO*2S zC$V%d+u8@-$3hTH`mzuUA+#|wvv659`xy#q7wE&bJMU3lCT2e1^q1|3tZG}o!p0n? zzigz}?6tpqA7kWyY=1c(OP>GB`pcv6f$T3Y(*U;Fd!PUs=n9Vgk^Zs}E5kkYm#?89 z(-QTUPdA{yEJ23D_m?|iP2Ky;WX;YDu+wXQDMF8~ZEeCSINkcot6-wn{&D~ee)0Y? z2G#W1Up60cfB6Z#Lv8Du?;gItSmL028(%I*bn+kDU;g|QZRda0`0{=Db@rDB!8-cO zS`IVlFGY+&BK>8!s3r0E@;A(Udg?DPBF&xv%7^bSg)q17{pIVLoio8sul*$lV?=Fh zO=p7s@-s5n+xW5uRe$mR@@uf#YkxUG983K8qQ8Gwg~*7Tn9AT7u>S+6VPQ1{qt=bh zID#Dn_;TG?Vw}-t=b|1PW45iqdKn8+rEfyxR(faYdm`Hj;Z<7xe6;|p4 zU+=hxyy*Q7dAHyu9eU3}c}gyKVOUFADwZ<`gIqu=qF-g?%095RukZT3(m z@clKz0Sxqt%|`oN3~4m*$6*y%+fz+yb~kC45D0r$*cZq!p}tZ8@g}s;Y2H?m?=E-q zgz0+Syq3Vp9m)6@LFC(FBIa%J)cu1WP*A=tu68}OUboBJYzEemALOQdv9`~!zvPZQiF^y!XggiF7OAkkgB~-wB7D1xKkRp*Y$)aLx8xsEZz0+b$RIKAq?VNHQNm6 zQZ82c_Lz$(2K!p@?da0ySxQKZ4Diu}(@zq?ck3qv}9u zBh@y!#q$1M|Lc+Hf7Pd86?$?Q**{DYjkRO3@m;tlG4l>Yc*5AQq37_08;D& zB<0J{II2)C?*54xQi+4aB$f);3z&+e{C32eHCTAPNuh=2cugBxDYds6Li>|Cq zK6KnCEK_gJXv5=3Z$Vf0)OijfNj^Z}_Int>oiGi!JE>8&;J^DXRiW+)xu{Tih|r%U z1-&8ay+UK;nfS*a!xm!qZ$%gDehz8Iwu?JGOmDN(u2&(>jJ2wAETF}y4lI=f2d>wD`8NTP3awt6hVCT=Gw=c#h z?JD?-7^NNfSkvM2q*h2EQd1n_|gSjY< z9Vo*yF^H3~ykH3s8-D#X+k|X0~^jk*_;;Ms7PwphWI*anZ$K1p&m+Rtxbi`pZdwF6fi* zW2N)0;%!qCqN8(vMVi<&8sXa$;*mMAW9LM95^Y;xDq0>bQTIz4Lr}yfpRyFksN{C0 zdRI8@J@9MrvlP#;&F(|{DR`@n8`=73c~4zQY+qbf?<(KS@=_uqq`MHUOwSxh_Y&Qi zn9)3y>pik5^5~7IE^brg$_?@?HM$k@Q%FRII4|QCn-xdUYWqiN4s4#(E6oy3Q=N}O zM;@i#7^NOi)L)~G_kT*ZV#2Q6)#UYB&1Fw3)}z(fV-(3-NHQu(|K%~7IQW4Rb#N!M zT@K}U*mx#8gZL?(Y&r^@&ctkvRgQ!^?x!Fetn+c*M;4=xcTbIQ~(#BPM>*MzM*QeZTG9%#r>}+nMcoj0d%l=cKrgbRy%aC9Q;a zR4ueq*D_l4)SW0d>(93FDYyX7LP4~^F(i+yW z`i9xy(NdpRV{CgdET60vo0kk=W0&sD#`fJ7I>H8WYv1;Bs9A4ki}|EmwilCDZ=ZB? zdvQDHVs8Pq7t5#E*nMg7`$YXwE;s%r`jlI?7oUh;V?K_F-60Dv&*d{ze4S;j=QpKj zw)&de-UE9zgF#_Y4vBW*xLLY zgV}kYs=lknMqc(OGer4;B63O@3|IGq!EJ&isjr+-iEQ;v@YQ+TC(d?1=+<(+5Vt=B z%W69-0#F<)gQ}umHeZF&B_cj^qlj-q;%}O%G!CRc0X=LfC!_ebpm?aLH!!JoD@{RO zNJsjUYJkyk5#`M9dery6A{g%UelGU=?#Xmze+6CpD-Dn^_O?3GI0IdP)@ag!s1pOW znOE+27(Ph}r4H3d8^w6!vuiT^HaY_fPhnx|mQ?K;T7cYk{sIf_n`z|oK0CZ^nmrBH zU)y>gzN)C*cO#k=b1;I~hNWn?M~Zw48dw>Ii^Y@F6rseh3|%a4A8^ zqQg;QHC$fU$hbotfUsV&;{)^18d4AK#=l`P6TP8?yGq4wlyR`sXKGPT{Q6qvFzvy$b;ZZJ~gMidmpWX*B9qxT_0H`d78Y-SMIKd zSO#`|S?>u=0#~(LX$E55Di}btoE@Fma2JB-wh!1E$1u?H)npMZ|0fvkc$JCp!&e*% z=W`$Xi`gGYnCc2&JaykfB{3n)C=nJFM9YPF*=tBFlN}1{1^SC}Pu(BDvlAy=!7$~v zGm&MvSd3;#moGtibYFU$jwF&{zmz!ugPVK0(Rm*k6Vb_V(RmShgie3?f@aeNpaR`= z|90kVcwDpsqxS8ajNGS6Xa?)SW zXk#{U((dgrEKl{T?r96ObI7KL0R@_PG}kZ82HK%L4!JrT!8y3>_F1{S6ukXGRh~u| zDetK(C7TV>!TN$m$9I9-!|Dw~t*>@JpY2t2wA$7)Ux5j_wlf9JbngZTjEj9I7uo+4 znGeUzpO>||-Yk|vw4J|p)&ZRvt!w_=Z9~n4Eb*h*`7yr_r~O6d)3UFxe#VoH-sD`> zsA~>b-u?D5(wvzvPj%W2dovexwtIOpu7rDMgMN5RQxbaAq~<@<{`ALM_`0hqfxWbB zLVnSNEX4XT5h77nq<7|Onosl`9C!SpzPIN-!wNW!+SaFcfeZ92M2W(X9K>ax@c`5| zd2h4v+})!-T+kl={pLeBMDT=6qV-3jbbJWddN49qmUC3|Nl!hIR+F{}g*Siu8I z=E?RCA3{s9?yQHK>)3EvaW>PeDXBOV5E1?O{UhHCPu>;C#t1M#oEG*K+U=+rs}lIu z18MMt=F+F-|o)f^0IxukZbF_NBoXs$AiJA{%R!j!LkRI zd)rt-FOrv|2=?H%b^g%#{*B*@V8w-}N;vi%p4>J8OE7p_-FZu*xcCyZn88F623qP@ zeP4@XoHF1*YFo>&Q4o666PGG zV;yB8lrXTlnp)R026T$_1X{0()p}fq7;rzF($)+)f0ptRs@H=mZh9a%`byk?#L|3i-O|El5Bw{mAH@ zOnO|Eanrjl0lgXBgs9pa$KSU5KyPRqz0w5qE;=%L3rX(}pD25h^SLI07G%!bZZe#WeuXIUqdnwa^tQuHt{7-+SKFZD&dZ8UuK4XH zheY{yQ)UM%`Vn`6J4tiC+1yC4Y3>8r$V7?@lJKHdWr80P5{-&qzVoe@>8G5M&=L|_qb+MWD?z2 zW>i8a$S3mgq?&mmx>0ip4(RsdaC^}i)kAEjI)tVBj4B0LBQkR)C?Yf0r<1W06ffvG zGpYb)RKqBXz{J|Ev;(!pSG~7$=2I7gIq`cUS~by3FrWGabma&dyY&`yUH5znU4mY0 z6r`q^Ra0lqs=~LPq(oBZ$RL*8AH$ol@Tc&nfOniY0b6dc5 zTnM`Q8F}W6nRIqK28lSOmtZ}fCuY2Z+OGcI@;00p4L>UMpTr@S2BLvp=+}UL=TDve zx@yq`{o9hRWxtI8sJ3+o)=96nWM$`_c3=t`j1m# zap&XViwEa?yq^1erF$`Dy(m8~x|l*droW@l{gIQZ-=S-ocS?WX$ZmpX))=S1k8%3@ zPhe}hzw3dx0p+^)cO6o!gkrgf!tpV75k>fN7Ew+I)kuHe%l54zxaqd{}ZtHXy;$UM)%bDk7d_z1Zb`ohqDo;T=MT4a0LCKRQk#eR2r(p5X&wVD#K08ip~Z+ zz(JS%7k%Ff)^C(MtdTVG8P`bsxUp}AZK^e#@cJe^kl|xBvxL^jziaU?juqoQjP87N zN^ArPtpM(+`!oKEfE8k~aHt;tTA>!Xzm@mOznhXk9?TFQD?4U!lKb>0Bo}ziv`B<& zJ8vQ+GuM-EYvVfp8+x93)k!iU+1J1VhgoYqS)r3Ie4LK<9fwJW7Sr%XT!)QS1nk9)8M&9&y&${KKDwD%|H^giu^} z5*fQ3+D}2s9VMhK{@%5I_$=37)H13_HBtOW#<;B|GT)7?7ve8(#GQnh0!FRSeOimu z$)&9OJ=7iLU(d5~JZQJ_?<1q`WNOlHe+rA27m(5NdcTIJj<57KX&I(~+OBc$OCIvu5{tXlL~hI;6g-ltdktY&)&dTrEf zFAx&#s35_6oI7aK4Pvd%%dltAP(vSU+-)p(?CUx7yN;i-T@lqVTy|7bB?qnk73s@G z16slOS^%xHzm7hM(1oh$*c3wpf4?-2hQ9|IuihS|kxv>C6Gg}pN5k6#jRqHu(_J+D z!#8OYQ|)*ij3#Qw3|INzAdh*29JGp)M?US`?m{{iQM=K^jx&fmXO46@i_qc;q4RQx z2X8JwFdDbuTmg15`vZ*ScvX@x?KMfG*>*3tNz!P&-P0aG8b|nf>>`|(Q8D&PXjpfj zZQ8Mkop464&b;o?IDWwncoEu&_hVbb+ve4G?y{FGfl*;5$x$=Hf~Rf(a#=EB+oyt! zj$|p-@d>oS+#ESwx!Ym3m*OGE7Dt2O04!bhGi2ss!R7PU)X?`Sdc#AFI1VdgcvJI4wiuvp-(76zPguY9| z3$0{gXspg+1)aE43l_}2gm#-DQnc2uVm=1Rh#>4_D$CvyW-=2b^rUJrpoXp4xao`I zi5Px92CI_r^C8?QR!qr23c4n4FGX!bZ$X04yiPKS=aJ|Ac}G>H#YOd6Vwd;9BbXh=|MT5KXUfy2Cb$KApZ>5LzWZPanTz$HUAQt2orH2pJd(Fsk5 zSgr||(c$7Ja+8B)FcD;(9!{WYRHM(uJ`GWNu_nJ%?*~>NOhN zzvuUCd^tQ=TLsAFBODBGp{l*=4LrU0RtmAhYT!Q%h5-Rg5 zq($QQh`#WZc_cVe@$-lO0uAL~bo_l2L@Iw4IHIp;khis4`3Jg{zm(-oJdT!k-m_I; zkdyg~s{0CLvO>3jQ^!{NuiTt3GvT42E{9<1~*=eXGxyA zd%>EDUFAu~kdM$XC(iDykKA_j2MbYb1TiV`Bu@w3Bn!A)mBl!t-+o%j%gj18h|5y& zF!&)b9P^GU!ES_CLTp_N`Ij}MNRv2>xm+km|^(6&L6rEnF~6deJ|LyrFtGJvZ;*hEX%? zWPZn&fLM3sFM(RI_RkodEwCv zk8j>|95}+aiVW~0WJjYoN}5@Sf|0hK4TN(W`LQR&zp`L@Ycyt@Osr007oA86unKE^ z3I3Jv_F~?!jnRE6@BaYY$vMDQ@DCeRv%o-#wf;s`%5Gy0X%}g5N%1k5va3a^wG8FG zsrn?V8<|7)sFTl`vRh+O0qMZw-m#| zl~Mg5TvNO8FbC2xCh`qzo`xU;H`rRmZ^v;L6JqXoMxMEL8`#y~hge<46x#BMEQ^Yl zbPmRcS@2s0nx7T=9{vSk`1v)le%=O;J^K08qG2kjmIBeN8Cv^6w-QZ?D+BJl4am&ZW@coP!>PlVld&fj2rN1qNq$2M5 zeHxHAam5cW>7`=v%_}$#MFcin1hzs~yjTRr4r<{fF>(5+IO3I;^iuKpy;UqO`P7(- z-^GVD_Yoy`nGHNApqL#Cm#J@#aJe|X+_f}o;Olkje zh1C@wgj;^~UuZu1A3ZD%jC#Ssu2N@=g*2j0mR?S~P#^Tovk+u>maZC%x>`9<0B?#% zuqzIuWyF~ISC**;?9qK`4?bCSy$aWX*7>p+BJNpS>>j$<-8Z@09@9fC@J{yVRqRIQ z`~TWI7wD*}tMT7SW*|Uhf<{HfIw~kALTHf^0Zo7;paCOq>jMHwAQh4{nE|wbNhd+3 zag?f1TG7&q6qQ;Z6eB7If(fFZ2Bj3OwNcSdj8zniL6Q0Y_PLL_cM|aNegE}e|FyoX zb#m^Uv-jEi?6c24`#kQsmIN-7R#sONh^I5QtNfB{1LW5hS-i=T+Xv*=JhjHF3{&9c z&}WfdFWW8e4lG|S^3h?RRhYXBNuGreTkrf5yJfCF#o4JbM%#w7>J^_Oh0oriM20^q z3Fb(2P;7%`3F6vVtw?PX2x_PgF)~tkYnF(}vg#dapQ$BOLyWYh>Ai*3)I)voCyAkg(qN0nUYH!4C!OuFd?4xtYgf3PdNs4q3z<=>-Qt*N@VQ2omwHh z#O#zJ->gheogwRE?SNRTMOUNW$kw)E^S0#crqdYP@?gKUiDdNLsF-pOVvQo|r4K)m zpjb-X%h0|2NWPFiVRH;t49W|iqDIB4-f|a){Cd%9g4(~RMpmTFhM@CDdMVqy%OQU; z3gSk;fG2xg+Dh_IDq~^N&OpAL3pZ$=W}}@U3Z`gJF?3OAuacI{>YVoY6VX-;^J53? z%M|TqqnY*`rDSX8bqN;V*-Vd1zN48Qf?n%yNmlEL%5ma?3s^S5@I>e#itwYTN$VYl zZT(H)bcfw&VdKn9wLmtBjWf<6g_TEOL5rX%G;%#~;Q+HY$!@*mGk$HsfnsUbgf}2L zq%1S6fl_Ydi&(kl`y#FDV9PuW;jR8%C*JW_v8rR-41Vcm8>P&*CDT&xw-`5KZkz60 zZ&c_q&Qoa{daBZOhIDY|in`bC2Ns$^QNwik3~tI48|(L0RJ zb*LP)kR)47|F{#XvlZ1C(_*v4v}_jiEXlOchjyU4p##;Wf_A4QTg>jk&O4c1qy#lw zC>hLV3)(D)gzGw>?N(^2*$p(Wpgrk8yRQS<=^fDa{|q#ZWU)J@esCY|o1fXM`!3Fa zlkdex$ai#&JEWw1lCAM2R_|vz;9t}Mf1==@;=s4W{rk9?f%ne79q@Y!{z;wVS9GAi zwu1$Jr40NUl4JZ^^cQuY|Bmz^XZ;0#x4pl|>VI(u`Y(JEk3UiHA0;_P-_n~J@SjFU z^fODc;QG|(@%TLje;vs&e2f3-cofd|^B#=Hf29=sb_ab6|IZ!hf6{^e9fH5VbNWB) zK!3x(VCz|3r0b zl{uBcm9aFktAtWklPvwgs{h>`=+Em|f5E(_^ZMsN*(rbZ33iA6OceZqj`~~ezo-L# z7X4GaORTGG4)zk{A(F9649;7fFub zTXOmh{-v|N8)y(&S~2Lh&Ij)yVPK#qZ;S_sK-;JqMe4nFV0S#s8I*hdb$Zi087q&e`u?m+KcI*N_no}0is zNzxp6O&#d9w8rbfYC(OGq ze76Z|1<9Sr_u3A8|AvON$*D?^Yb4E4-`_*m*{;;nW0a~N;h63yvslWsO6lP!bAp4@r~~g@qfREL%7M0Vt}bb^ z{q`Ml*6aoOZMDe7;uP4Rhd6S_O0EUF%aJ$Jkyk0sjRo01j^+(A6kECC!myK?Ri}1I z0=Ka6uAXGKdkW4@r27KEvmVnE`3zr6q@6*6#S~l02a=)|zztmeHlfHXq{|fiuA6is z@-iW3^cUmbek&mHa zGU=_}2ad>RKdG%R8U+|NP}HAS;42MUSA{7RJA$7H4(NtY|AMdTmxe5s#*OB}i z3>nIp*!CN$xq=X09g#CK7XYVU3q?sg=F)Lu-|4gA=ddYvGu z`$Kw%ZfK9}P)I#N((h5J4JssFKkp*u@%8KBfcPblWA~n{ocfq6^gb_O_vI?x$gQe~ zm+oY_?#d+YmgpYb*%vCJcj4f2_9@MaMeMgee!ZQ7)&AunAb8@!9!*cP?O)0nQ1gb7 zjW-JaeffU(4Gj+ZQM7>fKfewAX{;$ii~ZC8d}sRo?evYSXg-hpLJ@!E4oyBIp2Bjt zeyw5Tmf3P@)jyFVI-#bgB_r6Fve6yrx4kvt(1W#8lS2u-nA)UCj$A48c`YBC;l7U2D|0n81?y7pDq1nHRYv=ndIltKnhbM05 zdQ{GAXOqR4zMibuyAk$`dw+)Z4F~s1KVcpmxhEerjcIU9W6gr}c;(bOrWt%6(CkE% z&qwZM>*Gk`vh%!K@)Eq;G7@jt-jd{fs=izE)(@p4)pt$b?#n^ zR3n)uIEyWu5i9oQhdLlE)Hb>TeK#fq(l)yNn`-$+i#yop4z{|vSgdWW^k-G?wlym` zD3-k<#~02ym&=UCx4rCr3gCobV?wYsp(vDhtZkc9;8TO`-9qm#8opw?`Y_|`@776$ zzSxmQGx!s3XgIv%W%aI1;PWB%hj%1$htC)LRYx%1Pp?DVaq^~1OylrcZ6Kv~bf1u` z@)n=#jQW0?@hCm28>){d`jeYR_kj{!?8Y0okDpT74oiEnSz$GPXTR;al5gnCkk{xY zsgZD@H0&F{M1^F7g!g}BcZBtHKLR#wtX%@=*W}1_h4lbfrhVQFKbC!-H$8?M)A#cf zQi+fX9L1Q_1{IQNpMM0B*yoEO9Mg8O?=U*ld=&|)$~)`(3WV+RD628+U|nO@r-^j& z#;ng=jai4dAl^SjzYB<-9-ey8tkUDtivx_PWsc%~qDIKHVVipsiZM-^J)#1jFDGw?i z4yKCFp!&ZIQ%XWj*(ndx?oHXLnJVfHi*osWs7q6}(ul@vpB9r?jFvnJJ>K^Uel!r{ zM;}7ZBEO+a^8K$B5T1HqKy$FYXJ|r;_l`eME|z~MiX2&v<>D}9BX^*aN;fU?eo{|( zv35cW(QBcpE#58eUfwNBdbzo9C)jf9A@4=?-YsK$xej@IWv2?bnUW|ey(I-B%=?pFdRe_D_EEXp#`a2*+?Vy-W+Qi6Unx>b%ZOZy z3^@!SIrM3wzY`8LW#=I`t*MLj*YGV~lZ9@AG*Ey|>fLSB_e%y4H~P%n9yaQV2DwH3 z&C-&kv@{(_7syGHGSr^ZQ&NVTDe_}vWGVu0%1&kpUkh> z?>Fc@zf~Xj-Zk$_k@n3>jXaN8t!n6T8%?$}Ib6mESW^ZZ47Q)+y~9JRnvMIA8uT#A z-s=A#3=qS4?jiNr-YvO5j!GNtO5Ydw)ccgk_C;ZHdnASW?IP?r;FS z9p*DotJLtguBw13dI8PpuSfx^>7)?70MUpSDIgeEKySrC_wcxrhSZPtZt&U8;p6W;j)w=^_ku+Q@pB(X0A{BlvQJ`Qg8{cNh1RHnRiBTuTmgO z&6Fb529&y>$6cv$uW3r<6uhNymO}LPZX4URm$bXIU`FIURw;yxI2oVvASL}9R!%=f zU?@bul%7fPCySh$hr}4N2($oKcL8*TP(l52N*qlkP5 zhq>MH%%(7~LMk<@GHKskB`%26F?dQxa{pU^?G0~!1FdjI)Q??3OE{io_9TpJFd zi;0ZfjC)+w@InwXG0l~}!y8^e=fQA>mnDRjR%5@0xa8{)(@70RQ@wXil#N>7Fm%0 zKf1-v`P^pCrLSg=6SUgEdK0kS06ZKIm@9yx%rr=SVFDiwWe(-{kx=GvqAx?4BZH9mq7SVA%V6AV>iS6K)J_LAUR|i#DgDiUZ(Hrub*yZ;cC_||ik_{ys)Esb>uzyq zlt0;D?%#inVXUg*2bJ`~r74rug-OX=%eicnF@23}r@P<_UeT11JOyguaVdQGa^z{D zk-dUD+`%uWlz+xoxI&qI>Lj-@)8}gITC`FTb<93=;veaLl}TSsi}X)P%2%?o6)$() zipu8nk*@mw)#3s+<>(Gtj!&yx=90-kus(4_R?5+gi1+fXGQ!HF zIz06g)78$t3O9Dgka{kxRUb?m#xku)BW*!k9d zZuKoJ8e9g0NFG(k?_M4G;>V`nt*`Ic=eM%n^WXU`@`_Bu!>?-i!%~?5`P5uytxSN# zDMvy`C5gj!?!M7U?z$`B%ziUzqdBcOt3f@nS~O69I?ig*Ei5r2a4A$Ys|TXxtw;0c z(JN)HrS2^?{r%uaYCY@;MxLsMV@nXMns3SEs;9IIaU)orPZ{+27UN)2W9r<^;v7Fpy&*-SF^ zvX#9t?ynVgBR4RItZI1Z=MG*YNE2QM)=ubc@|q0a4wn1UNRPRc((C;G!O3sq_u}_P zz4cj1q&LOdf4KV8EyDd=H;a)CSmLUN&u$U>q?+>79K<8i&QVQtfnI|%4Xt&4&{oZl z>!v#S?bV4Mulz>&K003HE0cI@jnK42dfb_Qw6aB3)o>}y+w{XvNyywMi(OI$T`_vc zl-l(7N}PNj?L^Mcek0$9$HnV~$+j^b+4VVH@mnLez{K=`w@*iYsis|zKkS6x zgWt$+_IKeo#5h^i@Ylr-ep4-eJL!L^F}CXtIQjicC;SfFsrsU6-#Y1ct5HXNWO~pP z?D6&CjY-09KPSHhlz@Eo4j7%(KgOZHFILCLk?nH*^Y`NOE+>2z`^gY`EVC~aQ@+U%^g=?8EnhUo{4 z%aQ?Sr0zNnq8zo)zycbNQYPCCLLyc=PYlDiI}64W6L-ce^w3!LKYQ|zx2R*I@lvW{ z8;wi&DQ}Z^VaWS7M4Dh`sLoUp&u)(N$;?rCGrtgm_ep^)hbuYjYwCR8LV7pnmYQ12 zk-oFTbkxVlL-?Xq4gc{Y>8`bl+@Y+N0ga)9+uIZT<>6#4eOFV~fuoeO=%y-`Frrs1 znzOwnamZ^-7PAfnrn8e!n-pqx9rTxQb-mz&{3%;Mfj~`t*#ASfzo%GVcI3-P!xit~ zz}V@bMQ+!Q(DY8m5r~Oq2^1PJh+Zo!?WpZau~{G+)B<;fK4k|NI{r1r=Ukq>5Ijvz zVDr*4EykBATOwbJD7r$nwM2ZH-=&LeFZtl@G|`e$m!@v0gp^Wf7m6o3=5^k}3nzGGEG zSvf5j8x;Qxy0GiNN``Sw^jo=ka^;OXnkQ9hTzsB%s29X^@S+mp(xnkz+*{IB|8U%c z+fauhM7Iv2dVsQ!e-|}-S~?a#4Qs*^{XMRF`t{fPr#Fl)7)1m0>fL9mfvta~$SgFM zo?g|k=4TX-OA|;AMiabuJOwp2mb_c0xkkGDOOEXhOdpvLm|T}6GFQ_jWrQB;MCRA( zX{O9+Qkb>AO;G|vk!vqU7HC2*u{{V{uIWOilC({d?32ZnE1LU$eQcNCQ~9MQ@LC+S zkAfV~YCa}hJ$=+6FLOSI(2||}nbsHjrrp|o1wxZHP}WKBFWl!Xd%*N=HWSal$*yWB zEJI{9^`AJdnd5#d5~wkbsq$0rqcFMj`~~Sde`z6;4;a@R4(0Um-tiS_;Z+AnYwKn8 z-vN!T9W{rS6{(r17z%W1)lOg{lf>4jM?SZ?zwRZlZS%5iowUV5XIUl*g!$G0+w0u=5rjIuHra5VLBHy1v zms#$81U@Mf=`p~Z>xzo%{U3j5#VZ_r+>DnJiX2o0~KApI_4> zW3H2hbtXJAAiEZJQ#ZV2CMyqD_i?*)|oU}lYVKmq1itk)@5bQF%ADz z`Fk=nq82zPLPb}QShZW6Wye)}l9Ze6RyWVsf4P_Hgpps<6{;HEn@>i~ z^&iLeKU$%VNk*r440d@K!H@{MG=}>joDTE-VVI z`Uw7NR|#*S8sW8WaB)dls3s!G-C5ZSS4EE4eC_}bn!mm%sGbJ-w{WIRkg05MD$AYN z2*yYg`=^+a+=tVJs<7DTPNOA+9Opm{+}nSw1l8zWF`GJuSFIquu1nU{mEso&DBUx( zY8I)HcVLmrdw8s=UpAPlfTRfH&9p)_5__wED+)NYuM$|~AbhpsFrqYfXhIa7UqMnu%SxHT~)ZQ|k z-WqY4s&xhwfmLTR(`XoVw0fTj8)bGPN2BD%#dzYIPwjqC6tj zNDncackh?x(A4w`cp<4A2)bVz`7v`E=l?T!RyEu^7iivnW+^|b*<3_FAO}@a#|7Kx zcyD_N>GN{5bmmK>Gfzkjr;ZOV$xC!j>+%`c#pCr>|A40Aa;_$hMR|ii0sHU{x3?x; zJ#frQPJqzl-kKi7L33jMf{m>lkNpaN?Vhxz3f&I|1o^FnUKeOWX* zVrgpN&bk$FXH%kI>k8u-zb87C2)n_^&_}hD;d$4fnZoiV*evccx0wVf-kivYUFxc} z%EjXG`XutHZXu)XA8I|t(4!_dUB_E3S8=!Pm2+Sl5#uiqqpqJtE4?+9>X+W-s(CiL zT=3n*LyxppfJnQVdmavZ7yDXRXLYV~Xs6UQvTmqpUd}@O8fnYLt}FF9z3SK>CeXLl zwStaba1+3FixC5b;3;%QY~6Om7Mr@ zjhuIE%cmW^)jN=NWI`ILJ8Ct~7kX>zNU7^*RJ2yX#!S9Lp$>Equ2tX2Wj~_Hviqpb zb*UE@1fj<}Ne#AZ%WeyirHa<&l_YH0z7CR0wfSx;Y=)ZcYWO9*;n-6#H8NTDith&Q zQ|E=l2f%q=13(og7MCfyDk<`7VM#r*2v}I#9nyX323ResL=$tV)NtwE1qTYnoV1%J zSb9%xU!Sy@A)QFh56$vx6TaBr$}oj%C8a)X5HW;j^IO+#rTm!2bTaSwY=~KC+e496 ztoTWDOMA24(ia~;lF4{e)exSIvCB)Yd2Mlz$S3Fs2Vgm4S9ithMux`Crcuzi(2ixnIGx)otl4yKzoi~do%`6SbNac(6Y1Gt ztI2G7mSwes5=oq%E&eWg_RqnlN+>;Jrx`tyQlB=6d>=jgrBx_;cFCDe17p{>Jq$Tj z4QJ2lRNpQ=VJ*LP6ImMlY0?B;$!BC^h=R1YqnZ7t*>(z4~b2JwgzB$w_%`L}=WH&jY2i88p6IRKOMx=zRbK_&V7td#eHW4l9_!}4 z^JI!KxXw#z{R$6+@lu8iJ{keK?!!H`N{SW7{y0Nq70%Jz2wE{?}wZ>v`V}>y(7s;d`Ngu6Ia!Vj1ZwfC` z8a{!B*Jl$-(ycx!Tx5K2R(kn1X$ycI^&Kek(^rj5e@6z}_y(UgK*{jdqsUO_vu^hZ z>-84HTlFKT?fA*a&Ldd`cA0oINPMq4v1TIIkf&6sYOmdMdp2-5$G)|9?Yd=_A7m> zwL$d)(_1q9bH4s3o-6xDk=yY#SpS^CuhC^DNg3N`d2|< zkOtYLtD`&8k6slH*2_=b$GX92hse+S(zjBAU*gYKQn9*O6azA=LgG{($5<^k7H*84 zCx?Ia(+eq3@!_T%)1O~|fwa@&m3ANfK1kVobk$!&dvu>%clmdPmHVXXq~_vge` z#7&9H)oy)Qj3Y1j=`(Xx`ZXskeM-m1Gy7}gPxLmmqt-fEI^RSFjF@i96aGB@R4sdd zuldhlzm~0(sVPkf@*-4I2LHr6U^>x&*yO~M;SaKGks8^K<6YHo(ln)C%wJRBRW?qg zgVK|qI8QXhEARU0uZ{{i!Pn2r$$svws)Uy~>SSzCi0NYP+w~$u5L^OHR_=rceHSHe zYav#i9B!A*!NID$pHp5s+~{XU1MS}1KcR^2k#pGCsyV@QoYaamtt^wzAUD02~!)6>QxqJI}( z2yHUoh08hGR!6gnY$Nwzh8Pxe@O=DACI4ZWuO|J86@BLmnPOv%QyLvs*j_lFc2=tk zGo&=*J;TDyik&3Y)mYajbw2rrinC=9VrQ7fuY6{$jF#`98P zal32tQrU}_F}*~LyMC185X|uo%0FXEzh?QI#i$+atDV#*y_xe_6Ov`K)LmTv$iojm z9O}g(V5JXqza}YPb?;92>mxhI{~Rd%T`c@9N(nY4rGMe?AAg^CwtikMI%%NP_6Fgq zDbyI?tJHmrE!bG;djD7Tr+oUqD*vTxm^VcI{ndC;%Z2>xvCAS0Hl(L$(<0eajsy`j z8_{0`{$Vd!+Mn_wm#UJgC`q;kmL`Q4@xG%dnplpmbYkS%Pu7W$C6=xyYd}h((QB|+ z2ZYoE7+{fSIL95@PG&6^>l&Avt`Mnn&U{e{Z@h@iLW?+a+?1n~Hk9M@_mBeK{eeK~ zUwGGx%mdHaJj&i0=Y@a45MI^rN*={o=Y=n)8;clMOIe+mI|JWw{wv&Io0=M`R}X zvufncPR_&2C{G$Wa_TBmZEF40C@t`W>R%>aZ7=LjBteb;`q4n^Xq6f_o zz{l0Eg$@QTOg~bdC6*+uDFfGAG%d+69DKPuT;?|HKV;I&lKnrDUY9|OvN#EiD-Y1mOVJGpM{`%*J^y24||-WwkJc=MY!n)Ls@TmtDgf;>bJXMna-)V`bu#I z*#(-qH*)7$qJn!zFkWu=E`MBLGdNmO$Ajk0YV?l%RMumyvy&B;#pXm(41bD;(y9uVZLazVxeMa z?Zo67-dJw--^WEJHP$#&D{sR2Ppd6U88IzoQHeS58s`hA?ya4=U+yeZ2kP*_lEwH( zricZcaDX$3l+KOQS^N232p5&r(76%ce#<_f&-2a@wrOhq*k|&h7jFhs2^rhUr%&L z(nTCo_ad*h$5&FAysa?Pbezoom5aTIM6ssae{v-?%Jz-O?(41oJzP_pRNmamJ(U44 zg##YJFVo6-5y=;@BS?RjADx8Ojuq$jcnm0*X&aIm{Ho>?C2e zK0FOWQY2cD+_&MI?`Qa?`y1l(mDAdok?eZR<$d&^DMq`#&^+X8o##h{GyLCiG5>cR zDT1KfT@hlQJ60_1GdVIBlUmjABslt3Pwm};qr+#o)n>08HjVAns9EAUv>gwuEd7^g zgqk#8r9Uy3SfM}JR&^pPPZ$40wu{W_*!`1t84ao$2El~QKS8y`QXXan@wom8^5FcL zyH+#ii&T-MP+pSIp?>`EZplc#f$7+)dK+nBLbspz^X-w@ivFWH4*GChT_5NkqsJ$8EhK#(} ze7WXE%{|0<{sWc~`=8BLZ0)6D*+YQ?Lk^GRHkaLu$!F9bZXP(XDXWDHZ3R{?Cuzmh zcj#6V!xLKc?R;4vkwZo3c+n}yeLL^>z35Md*56j-BrA1`t$qgz?3S;=vUlNNBNa6_ z9$D*%X~Zm%KyKeYPhTg@#g->J*^4Zqy*dB5GIA22F=a8<10qi`X{u^Sq^k7TNGnRB zu}PT}`JGB{%OZVe(sd0|)xq;h7ZeW8pB*TkUog15Y=QnTdg}Pxv4blLODamsFPWD= z|B@kt(gvjst|*@~cusj?zQ1tLoU$^lU&Ups|d{I zQCpZlKTzl-KV@EFd7-bk!dFsC1-fg+1=`?1MY$?fr!Z*og85FIv8wLA@ne0Xz|reG zb7om-g|GjjdBt<)Npbyd35W#!^NK4jxxAwImcsr6;&Q)7JLwF~oKsp-R6JKTmyfeiJ#>GN4vzq`HBlho!778yl(|xURvrm%k>qPAOK2_D}Q=PR-4AN?>fhKc6NqC{$|eAevQ@KYM=RaWbcr7tftrSRTtATyb;7;5qa2 zD=LhxRWVo_G)NmVac4EHI!VK8ayXZUXG||8oxV|S4zscwIzVB>10{-Ipx+*#)9BaGMvceKyL2-FUQ45S%mkL^UL1{^;zqF)y zj?Z7bppdp)Q06NtE%y}_NawfLMeha3yQ0i60)yikeSC?(u$;~wYbGaeqm_Jpx_o0m z4mB`fbg3T)CRRt$&(75;1|zlnCKxG4wUTc^p?_X!ff9k(7^O<_iepomig~4rW=iRF zgrZW_BUIzgED0TGN^-6E$d4bu3F?UjWC-zS0mZQ9M zNM*tON|QS3*@VIcrR6vK^5?^Rz6@5rA~mvopRqE=m-RGrL4HX-9dOXRI6aKDy+OK= zW))Ttstm)lRk6P~e?G%Qxsr3fpT0Xg;4hSsOSMt~hDs|at`M7~83tj1yV$)(NYiJ{J0-V|TeteDjcy0^= z-+?!=F``z!qVm!O^cWkpk`VtKx%KP$rOQPaDG_$Mk+$j*eA*jP)gR9|{p0dSb^3?zQ117M*MWVNK~F}yP9e?2c)gob8kk>Da-rW>R9sTv zyRcuyg~p(4_-FC(SBr-etC(S6iqse*Q>l3P`K5DxYEB^2EW}_cijzTSI&ICE;$S=Wk)ndm_;b)KE}i3#n*haVs?697EskCcu7a7!9KY`} z-vZ`Ic$?BBYLaPV)!EAo3`;b=(mBe%jknbX9M0oB>6F+{5z@KmBFN+DozPZ5ss|5L zk2CS}WHyI%(6>}<-TPrYRd zU^qfLQfy9uSmTjZl~n7id3*c_f}8DN%g`+Gj7xc0&ygoBZExc;))`D+%xqAxzy)!Q z+-cfzRYLoQ9H(09(4D0*;;52{LTLX`LqjcYOL-fdz#N0*mpTW$~#X zz|r&HMN1^NU|H-0-sB{i%`zgPU*$ZO zmRpXzZP3pv23}9TUJhOw@g|AAoXsYl)hilJ1Me~7#l-c*^%9>|;eKgKeSfiCc)*5ZANQ7a>mL5JDfmFPL{pG@3_T z&x!78;uhXSkk1urLn(*2nYa%J37UriN4%0(ekzGmE`xvhJt7)yk>8`>pB2}~h%<;& zGN>nU3-Lzcj4{+x(#HaaT+6bf(XqrCImnB6)+FRfTsb8g9Z5UPnoj+Ro38_(c-{5X zpE%=&Xw=Q2q{oQUi1TiYMrRSPoEeSYL)?;&+$Fyt8vUHOzAzdc*o)uufFt%511E7s zG%D|ouDg{5;FHP!eKb0hxSn_l@j>Fn#A$zsM%PI`akKn>0Qggo&wA(+uOpsCe2{pB zq(2D1#2LiR#IrUa5A^3T;xgic#A{@Q{g23*IE8pWv5&Z&couP=Q>hPe25~d-JmPg5 zIcGqe@=!GTEb+mIX&>UWM}bE#TOOyKiDx|#jowb2_9S{ooU%C@?SDGu6OSWKBc4Z` zLA-)Ek9Z^TEaF|n+Fy{Hwm$;rdeY$c=a;am$`) zbUyK{*U$%I-y6~BPU8B%Q-9)v#C>>!E$uDpPh3enkGSO@v>&nWZS+jiiCc)%{z?7V z)mllMOWaKCCr)cYe~2rIUzXqR(9XnV#6BPC@6xX%eh;}3=N+J55vROQ{fL`C01hAQ zv47FN#I+IHmv|-dI^uQ2^^#BALR?R*od+JVkGO?6gIH@tPlxi3)cM+$2 z2tCOsPB|YwiPMPli1UcGHuOc}kI-9UQDOOW-7-mYElF~nmF#xQ>z6*#5Vv*@JK2?D zM|vh@_e{Rh+r#f(tX*;Dh>L#M_dJ2gAe1FVqXUSw%$`X#38PQ)r4Bqlqo}%wXaogHIpH$<%vuVl+C* zf*E^~Co7nkkgWrWJko$kqZ~|gteh-WRmE2x`7H_2=oowc=;et)_s<(L8+DlsCr{q( zZ0{b8er1Qt4tl07ci)z{B*y*N9(mmx8k=_KFmo3 zMW?AV948&ohn?U&3(j3U$N17^m9WSrs;nMpvMD$881OQ1eQcfvd3OKYq(|FW{qx!w zkB0sYb<>~0`9Abopx0v3^L{fu;c-3mMxGgs7V~V?Z=Ce01UiS&tH$Vclb$Ft*$>WQ zaK0;#f}4sT_}2Hp%>}m}x*2Chqkp5Hxqrk!XzIy$qdh)%wukLkPLG7Cwx7D*rNB#b zpJ;S0<+}gP0Bn{w#wc%@4Q0HpLu0{7J~tXYTX=ZihBKbd5cJHvEwL!priR`v2B#ey zMQ5iC=LB@bZytJqLFZW;&I#zWfaAN+z`6IEaip)V$L~(=AB{HfY}Mb?&!5GrGL~^l z^kppYn}9ze^}oubq3g7=AERA1p-oWsBMDox_#(z&a4Z@|naPDDVv72Z27$=TCmOE{Q;537i_9KJNSx%hJ+Cp&L%#W_W)S%;a z;vA38aB$keQT6#3j<4z`C$7(YaQZS2QuX<}6X$qz)`3$G&e`ai`$-drvBuPuDIQzn zXZ09KefEO0X-qVFy2$zq8xEcE8W}r^?ah<$r`UjhWskn#ugBR~!aJd3dA4*@`4me` z>!*B=mx0^(<*^g`9wOfY;6`TQrwczdHhzr0o_KbGtqxcA7z)lBa3VR;=uKjW7Ta(} ziya!npnQfMDN|fV>ASO-qxy2A(U*9(csKiQd92=a6RkfWD}k>E{?`^fZHS*R5l3O6 z=_imUu+IWJbVA&?K*L=xGQHLEDit3xS6&S4TB}^~50pKecw3@v9L9)AbORwkBlTB4)x22ajp?C@jywxaH8@An758B#wWiFJj^v^v z8C`6OrF2AO@i}<8`O)aoWbk};T81n>Pja9MPJdw6Ea3B5=YccZhGXjRWIL&`J@6v6 zkHGQY2@cN|Z@Npa`AAA;U88{fL5}=j;yh!HAbl|nm@;6lu)}04{VX!oQ}liYa4UeT zwBVRaFfW=$P4t#Ym}V5K^m7I9`@aKx9q|2EMx!rSp9P?r^qxz)_j0Noei1NUk#Z`IkU*mBmc)% zK73B;E+V+LN47-JA#Vk6^ME_quG{oa)Q$10GFG9i9yi78<5;DuL&4p2_*nEP<+x8Z zbpd&szRMjB^-=O@2dDR4(P)mvSJp|MYZYIaJ*KMoDw98{M}O9=h66v!f~Ov1mnSah zu21SjnMEFXz~uqQuxH2vJ`8zCzO031oFIQC`Dx@IPe&gk-$(urt@34z3ntDsl*vc> zUSLK7GsuF0SLV8QJ#GhP955%+W2v{?4KNG1?e?-JF(=M76bE}Iwr?D8Nq0x1`F1#6 zUlPWd3PYagq952?VBfa4_0>jSf5Pr-jaRxoP5jYe;F*2ObP*}a6TW6GG>Lv(j6@Gk@3<$2IjTvfOyW4bdL>D)a?Y@uo zU7jsCUB|97Rm?}$Uf}uwcYz%aTlW)NA87}sKQNcX!Q>k-LZc7OF%+0b?J(KPS+{a8 zv(_w_wM}Vg)YoT#6TB(lZ36ERJD%P?Iad3CmuFTEIMJiq!Rvc}H2Sz5&-9gUjcHwW zkA&&gnh>x;a~HT9!QJ4%RlEi)UdMIhRTcn!zx!@@(r&}STLa$jJJMTX(ZeVTZw0{i zSr?7o-x0RNf{l}-$YU*d)!=Mzbh;9k8MYad1|j6+5*8xH{kvSqyHh z?jH!vjpT16{}y{beG!rg#U?@Wgw9@Ij{^HaN7zD3->#zn;YgSZtE&B()@d3fP1ggazC+^ zo2}-beS2%#eD;;TsoY%Pb^^DV^%uRZkq46{HP1iSF28Igk0roQd4@GQ`+UjNyNH7g zHNV{?jeV1Z(W(;C zr<2HEL;iz2yKkl8Vtq_sGq^rRd3=wAYhpferkacH2S2Gk8ok!Rhu#(mxiawRtLGvM zH_MbGfxXlYd!v$TPLJGJ9~=nW6yO~84m%_5n=m$3ru5etz^(xHDtnm*?6MfBvL~{C zxCz*ec39I+-yZ`OULONCZTpGsiL~2(;Kl*h-QI5ISeo#7OnCT70-wZEbpIXS&h`uZ zaNyg4-@$XNZ46o5Z_{1FM$ZF&O#?T1+2PGGV2TZXOpjX~zknBdvS-?xJ<_Kf^)dDy z5`XHlS7BsJx0Any{9eMa*|#R>x=xnX zn{CAt=r82i{a;AIq`^Eap-eYK0#`{na*6skjgK3F>kS;! z_*hxS_$d7DB0q_IM&nrim9hFn$ZwCY?>IeQXeY7vE%^`I@%8b1x;18I_DCqP#!P(- zls)w_=pM4;O_q&artLPLReT{#F6UyfkGoh4wZkJ5`5C=8-F3kaJrB7OM|%F~^4#lU z68!fB&r6ByaCu%$)ZR=a;eNLyBxtUs+EQ?2{uCi_aqU%kWY71!+f!TN^8BZ#wk^T) zc2DhKg6GYi+Ak74xA)W@NSu4DhxV3R{{Jn>!~c(xJTIK2ZS1x$fgfKbQ^0LKB^_SQ zb)}xm?~;?(yAoe^dG@%pzY9b3KcOps(R=&3&JdVUp7k!*f|ED65}RF~zq+)4Isv~` zSyB0riV9u+ z27vXBN!PUBxjbLH*sIi&{+sCWC93+Kc{ydz^86{$RhQ^_E-~@_M9+tb+UL?TmSjXO z@o+HC=LGh-9dJ>X=Ql1jOY5}k|2sGV*H6#+GraD1d2UP99uir-k}!E?PwkP!ULT&M zRk{1|yu~J#q-aldnelO|wxO%%U#VJMS05=GlO(+%$@6co>yUc> zYxieRGwO`b0jwHnv;v{i!V{X}h5;xF{JKL16RXTL}L z#O0~+XjKX0cX+f96FmQRYj3+fJXd-~t7aZFnL_-xyPoT+{U*VKd3`HkBF|4HdY(_x z-bj2hksn`n1!ilKheycv9Kx>*&+ihnt%hElzs=>@<FaxeeUwC@@UHw#=qv#jwE=#c55HIJv^^8I7+^d@`rhHwIX8Z-6++( z!?nV7$0^za37&tQtTiXx!1K05&#F_jpxe`aiuS16^Xw_wnl7HVPS&<{@$3htOU^G( z)}HQq!7qAg;cfzRM|Te?@AmM3`bTYJCjgrlcxuOxZcB)YG= zz-;Xy&oB4z{JFRG%1It_AMidUh5qg|tnIs}OD^@=nwU9r|K(bP%d;gzOu?NQ+HVs) ze;Xr0sT-r+o9KCbjP|EQ&!5Ix=8LRL_H> zwL_;$?(3%spKYgkwvN)mr+ePMOndWmNjZADXGMl~e{av7BeV~COUhThJx9{D$Qgq5 z)5r7v&Umo`CqK8@-8B`K%fe3Rmf+BJljOBlT=NNt^Q_@Pc?IFbpeo`mpexIcOsdA1-+brLVj|cbv zGW|rnoha{rg6HFvf4ubXN>g-Yai*>_HAZ}w5&zzZ|7^t16U$ueGvZ|8RCHP9ZZmFl zX)Mj4@Ggxhx;lT$QiYbvZ<)u*99lwem!>h;Xzp_~O_tLN*kF}C)@Sg|n4YM4w@jLH z*SnYuF&73nm00GpGPk<^r~32eLQS@Kxbs|7$K6F1$D+~FDFrf;MN5UoLE`#+P5Y8q z%`Zv&|K+dl4+zTmn}&>w2nz|z39AVk2wMn^gnfh$2!{z>ex_-s5iTGMBV-e%5sC;4 z3Cjtq2^$Do2#th&gbxUZ30=y;CtN@nM#v^iBNP!95|$HI6E+aG5E=>l2pUstHeni}h_H~b zoUod(fv|7Z8RKvI)}&MTCWf<%HFQ4TLR(M#4VA2ZY0fElPeqQH%3(;$3{_&i`_jZ$pr=SJvDZ2pNYmcMHVVk-qsY_o)1&N-=tE7Al` z!hC|*XMq!&En!`%o+m9RFe!wm34$wdV&f%OZYWG z?7BRQZI>{MLWG|1EwTJn5nx;4$k-r3#s;%Ifs--fWdm+Bv5X}WWQ-9ws-(&jxJCkG z)EFgWoP_iFZT^{bn@KR?GJuhw-YYQxQ-}rjJsVs-dN1ME?;1cv0w;gd31)dRrbEl7T$&23X_|i~+@&_S z-m6`jgokAyH~vhx|L|M<1SS7U=x^s)=nH?dfEi0z$+P+AGaharmh#L$ffIkr{1dwJXUbUr MrI+clA)1f>2a=&_m;e9( diff --git a/src/sensorhub/libsensorhub-hal.x86_64.so b/src/sensorhub/libsensorhub-hal.x86_64.so index b3dac4e0fbe4c4c1eda1a39d713498ba7accc9d8..5182ca267b852c5ae8d3d42d9939944a4073588b 100755 GIT binary patch literal 114192 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 L-w?n&;8yy7#)Su| -- 2.7.4 From e6cbf0ff65588c28c9aa8c8f04c67f338af9d73e Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 12 Sep 2017 12:16:51 +0900 Subject: [PATCH 13/16] sensor: hal: emul: fix coding rule violations Change-Id: I2bad9fe102fa444afbbebf190772ac6902d68fe6 Signed-off-by: kibak.yoon --- src/accel/accel_device.cpp | 6 +++--- src/accel/accel_device.h | 2 +- src/geomag/geomag_device.cpp | 4 ++-- src/geomag/geomag_device.h | 2 +- src/gyro/gyro_device.cpp | 4 ++-- src/gyro/gyro_device.h | 2 +- src/gyro_uncal/gyro_uncal_device.cpp | 14 +++++++------- src/gyro_uncal/gyro_uncal_device.h | 2 +- src/hrm/hrm_device.cpp | 2 +- src/hrm/hrm_device.h | 2 +- src/light/light_device.h | 2 +- src/pressure/pressure_device.cpp | 4 ++-- src/pressure/pressure_device.h | 2 +- src/proxi/proxi_device.cpp | 2 +- src/proxi/proxi_device.h | 2 +- src/sensor_log.h | 4 ++-- src/ultraviolet/uv_device.h | 2 +- src/util.cpp | 1 - 18 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/accel/accel_device.cpp b/src/accel/accel_device.cpp index e3b0b4c..7d3fef3 100644 --- a/src/accel/accel_device.cpp +++ b/src/accel/accel_device.cpp @@ -183,8 +183,8 @@ bool accel_device::set_interval(uint32_t id, unsigned long val) bool accel_device::update_value_input_event(void) { - int accel_raw[3] = {0,}; - bool x,y,z; + int accel_raw[3] = {0, }; + bool x, y, z; int read_input_cnt = 0; const int INPUT_MAX_BEFORE_SYN = 10; unsigned long long fired_time = 0; @@ -198,7 +198,7 @@ bool accel_device::update_value_input_event(void) while ((syn == false) && (read_input_cnt < INPUT_MAX_BEFORE_SYN)) { int len = read(m_node_handle, &accel_input, sizeof(accel_input)); if (len != sizeof(accel_input)) { - _E("accel_file read fail, read_len = %d",len); + _E("accel_file read fail, read_len = %d", len); return false; } diff --git a/src/accel/accel_device.h b/src/accel/accel_device.h index 36c958d..6c4b02b 100644 --- a/src/accel/accel_device.h +++ b/src/accel/accel_device.h @@ -53,7 +53,7 @@ private: std::string m_enable_node; std::string m_interval_node; - std::function update_value; + std::function update_value; std::vector event_ids; diff --git a/src/geomag/geomag_device.cpp b/src/geomag/geomag_device.cpp index a0f626e..de45ea6 100644 --- a/src/geomag/geomag_device.cpp +++ b/src/geomag/geomag_device.cpp @@ -178,7 +178,7 @@ bool geomag_device::set_interval(uint32_t id, unsigned long val) bool geomag_device::update_value_input_event(void) { - int geo_raw[4] = {0,}; + int geo_raw[4] = {0, }; bool x, y, z, hdst; int read_input_cnt = 0; const int INPUT_MAX_BEFORE_SYN = 10; @@ -193,7 +193,7 @@ bool geomag_device::update_value_input_event(void) while ((syn == false) && (read_input_cnt < INPUT_MAX_BEFORE_SYN)) { int len = read(m_node_handle, &geo_input, sizeof(geo_input)); if (len != sizeof(geo_input)) { - _E("geo_file read fail, read_len = %d",len); + _E("geo_file read fail, read_len = %d", len); return false; } diff --git a/src/geomag/geomag_device.h b/src/geomag/geomag_device.h index ccd7142..eba671f 100644 --- a/src/geomag/geomag_device.h +++ b/src/geomag/geomag_device.h @@ -58,7 +58,7 @@ private: long a_y; long a_z; - std::function update_value; + std::function update_value; std::vector event_ids; diff --git a/src/gyro/gyro_device.cpp b/src/gyro/gyro_device.cpp index b618d47..a5be86b 100644 --- a/src/gyro/gyro_device.cpp +++ b/src/gyro/gyro_device.cpp @@ -180,8 +180,8 @@ bool gyro_device::set_interval(uint32_t id, unsigned long val) bool gyro_device::update_value_input_event(void) { - int gyro_raw[3] = {0,}; - bool x,y,z; + int gyro_raw[3] = {0, }; + bool x, y, z; int read_input_cnt = 0; const int INPUT_MAX_BEFORE_SYN = 10; unsigned long long fired_time = 0; diff --git a/src/gyro/gyro_device.h b/src/gyro/gyro_device.h index f2abfb0..994c1b2 100644 --- a/src/gyro/gyro_device.h +++ b/src/gyro/gyro_device.h @@ -52,7 +52,7 @@ private: std::string m_enable_node; std::string m_interval_node; - std::function update_value; + std::function update_value; std::vector event_ids; diff --git a/src/gyro_uncal/gyro_uncal_device.cpp b/src/gyro_uncal/gyro_uncal_device.cpp index b692f04..fde7c7c 100644 --- a/src/gyro_uncal/gyro_uncal_device.cpp +++ b/src/gyro_uncal/gyro_uncal_device.cpp @@ -173,8 +173,8 @@ bool gyro_uncal_device::set_interval(uint32_t id, unsigned long val) bool gyro_uncal_device::update_value_input_event(void) { - int gyro_uncal_raw[6] = {0,}; - bool x,y,z,x_offset,y_offset,z_offset; + int gyro_uncal_raw[6] = {0, }; + bool x, y, z, x_offset, y_offset, z_offset; int read_input_cnt = 0; const int INPUT_MAX_BEFORE_SYN = 10; unsigned long long fired_time = 0; @@ -188,7 +188,7 @@ bool gyro_uncal_device::update_value_input_event(void) while ((syn == false) && (read_input_cnt < INPUT_MAX_BEFORE_SYN)) { int len = read(m_node_handle, &gyro_uncal_input, sizeof(gyro_uncal_input)); if (len != sizeof(gyro_uncal_input)) { - _E("gyro_file read fail, read_len = %d",len); + _E("gyro_file read fail, read_len = %d", len); return false; } @@ -218,7 +218,7 @@ bool gyro_uncal_device::update_value_input_event(void) break; case REL_WHEEL: gyro_uncal_raw[5] = (int)gyro_uncal_input.value; - z_offset= true; + z_offset = true; break; default: _E("gyro_uncal_input event[type = %d, code = %d] is unknown.", gyro_uncal_input.type, gyro_uncal_input.code); @@ -246,11 +246,11 @@ bool gyro_uncal_device::update_value_input_event(void) if (z) m_z = gyro_uncal_raw[2]; if (x_offset) - m_x_offset= gyro_uncal_raw[3]; + m_x_offset = gyro_uncal_raw[3]; if (y_offset) - m_y_offset= gyro_uncal_raw[4]; + m_y_offset = gyro_uncal_raw[4]; if (z_offset) - m_z_offset= gyro_uncal_raw[5]; + m_z_offset = gyro_uncal_raw[5]; m_fired_time = fired_time; diff --git a/src/gyro_uncal/gyro_uncal_device.h b/src/gyro_uncal/gyro_uncal_device.h index 557b561..8f0b30d 100644 --- a/src/gyro_uncal/gyro_uncal_device.h +++ b/src/gyro_uncal/gyro_uncal_device.h @@ -56,7 +56,7 @@ private: std::string m_enable_node; std::string m_interval_node; - std::function update_value; + std::function update_value; std::vector event_ids; diff --git a/src/hrm/hrm_device.cpp b/src/hrm/hrm_device.cpp index 41ab0c3..39087ae 100644 --- a/src/hrm/hrm_device.cpp +++ b/src/hrm/hrm_device.cpp @@ -181,7 +181,7 @@ bool hrm_device::update_value_input_event(void) { const float SNR_SIG_FIGS = 10000.0f; const int HR_MAX = 300; - int hrm_raw[4] = {0,}; + int hrm_raw[4] = {0, }; unsigned long long fired_time = 0; int read_input_cnt = 0; const int INPUT_MAX_BEFORE_SYN = 10; diff --git a/src/hrm/hrm_device.h b/src/hrm/hrm_device.h index 693648c..6600f05 100644 --- a/src/hrm/hrm_device.h +++ b/src/hrm/hrm_device.h @@ -55,7 +55,7 @@ private: std::string m_enable_node; std::string m_interval_node; - std::function update_value; + std::function update_value; std::vector event_ids; diff --git a/src/light/light_device.h b/src/light/light_device.h index 24f4bca..1a8e916 100644 --- a/src/light/light_device.h +++ b/src/light/light_device.h @@ -51,7 +51,7 @@ private: std::string m_data_node; std::string m_interval_node; - std::function update_value; + std::function update_value; std::vector event_ids; diff --git a/src/pressure/pressure_device.cpp b/src/pressure/pressure_device.cpp index ebcd6ba..806c604 100644 --- a/src/pressure/pressure_device.cpp +++ b/src/pressure/pressure_device.cpp @@ -173,7 +173,7 @@ bool pressure_device::set_interval(uint32_t id, unsigned long val) bool pressure_device::update_value_input_event(void) { - int pressure_raw[3] = {0,}; + int pressure_raw[3] = {0, }; bool pressure = false; bool sea_level = false; bool temperature = false; @@ -188,7 +188,7 @@ bool pressure_device::update_value_input_event(void) while ((syn == false) && (read_input_cnt < INPUT_MAX_BEFORE_SYN)) { int len = read(m_node_handle, &pressure_event, sizeof(pressure_event)); if (len != sizeof(pressure_event)) { - _E("pressure_file read fail, read_len = %d\n",len); + _E("pressure_file read fail, read_len = %d\n", len); return false; } diff --git a/src/pressure/pressure_device.h b/src/pressure/pressure_device.h index b377b1a..c46b320 100644 --- a/src/pressure/pressure_device.h +++ b/src/pressure/pressure_device.h @@ -53,7 +53,7 @@ private: std::string m_enable_node; std::string m_interval_node; - std::function update_value; + std::function update_value; std::vector event_ids; diff --git a/src/proxi/proxi_device.cpp b/src/proxi/proxi_device.cpp index 569fa4e..72936b9 100644 --- a/src/proxi/proxi_device.cpp +++ b/src/proxi/proxi_device.cpp @@ -164,7 +164,7 @@ bool proxi_device::update_value_input_event(void) return false; if (proxi_event.value != PROXIMITY_NODE_STATE_FAR && proxi_event.value != PROXIMITY_NODE_STATE_NEAR) { - _E("PROXIMITY_STATE Unknown: %d",proxi_event.value); + _E("PROXIMITY_STATE Unknown: %d", proxi_event.value); return false; } diff --git a/src/proxi/proxi_device.h b/src/proxi/proxi_device.h index 2ddb5e4..f9cf22b 100644 --- a/src/proxi/proxi_device.h +++ b/src/proxi/proxi_device.h @@ -53,7 +53,7 @@ private: std::string m_data_node; std::string m_enable_node; - std::function update_value; + std::function update_value; std::vector event_ids; diff --git a/src/sensor_log.h b/src/sensor_log.h index 8e593e2..ac9e8c2 100644 --- a/src/sensor_log.h +++ b/src/sensor_log.h @@ -29,12 +29,12 @@ #endif #define LOG_TAG "SENSOR" -#define LOG_DUMP(fp, fmt, arg...) do { if (fp) fprintf(fp, fmt, ##arg); else _E(fmt, ##arg); } while(0) +#define LOG_DUMP(fp, fmt, arg...) do { if (fp) fprintf(fp, fmt, ##arg); else _E(fmt, ##arg); } while (0) #ifdef _DEBUG #define DBG SLOGD #else -#define DBG(...) do{} while(0) +#define DBG(...) do { } while (0) #endif #define ERR SLOGE diff --git a/src/ultraviolet/uv_device.h b/src/ultraviolet/uv_device.h index 85f5a4e..635ff82 100644 --- a/src/ultraviolet/uv_device.h +++ b/src/ultraviolet/uv_device.h @@ -51,7 +51,7 @@ private: std::string m_enable_node; std::string m_interval_node; - std::function update_value; + std::function update_value; std::vector event_ids; diff --git a/src/util.cpp b/src/util.cpp index 345b8b4..86d572d 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -163,7 +163,6 @@ static bool get_input_method(const string &key, int &method, string &device_num) bool find = false; for (int i = 0; i < input_info_len; ++i) { - prefix_size = input_info[i].prefix.size(); dir = opendir(input_info[i].dir_path.c_str()); -- 2.7.4 From 73feb7426777af256bb7c8b04e408b4676d024a2 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 12 Sep 2017 12:22:00 +0900 Subject: [PATCH 14/16] sensor: hal: emul: change readdir_r to readdir - it should be changed because readdir_r() is deprecated function - there is no thread issue because it guarantees that it runs in one thread. Change-Id: Ie5a7694936c6d1f8093e8cd5513dfb236c173ea7 Signed-off-by: kibak.yoon --- src/util.cpp | 46 ++++++++++++++-------------------------------- 1 file changed, 14 insertions(+), 32 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index 86d572d..a75ff25 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -15,15 +15,17 @@ * */ +#include + #include #include #include #include #include -#include -#include #include +#include "sensor_log.h" + using std::ifstream; using std::ofstream; using std::fstream; @@ -35,30 +37,20 @@ static bool get_event_num(const string &input_path, string &event_num) { const string event_prefix = PREFIX_EVENT; DIR *dir = NULL; - struct dirent dir_entry; - struct dirent *result = NULL; + struct dirent *entry; std::string node_name; - int error; bool find = false; dir = opendir(input_path.c_str()); - if (!dir) { - ERR("Failed to open dir: %s", input_path.c_str()); - return false; - } + retvm_if(!dir, false, "Failed to open directory[%s]", input_path.c_str()); int prefix_size = event_prefix.size(); while (true) { - error = readdir_r(dir, &dir_entry, &result); - - if (error != 0) - continue; - - if (result == NULL) - break; + entry = readdir(dir); + if (!entry) break; - node_name = std::string(dir_entry.d_name); + node_name = std::string(entry->d_name); if (node_name.compare(0, prefix_size, event_prefix) != 0) continue; @@ -157,32 +149,22 @@ static bool get_input_method(const string &key, int &method, string &device_num) std::string name_node, name; std::string d_name; DIR *dir = NULL; - struct dirent dir_entry; - struct dirent *result = NULL; - int error; + struct dirent *entry; bool find = false; for (int i = 0; i < input_info_len; ++i) { prefix_size = input_info[i].prefix.size(); dir = opendir(input_info[i].dir_path.c_str()); - if (!dir) { - ERR("Failed to open dir: %s", input_info[i].dir_path.c_str()); - return false; - } + retvm_if(!dir, false, "Failed to open directory[%s]", input_info[i].dir_path.c_str()); find = false; while (true) { - error = readdir_r(dir, &dir_entry, &result); - - if (error != 0) - continue; - - if (result == NULL) - break; + entry = readdir(dir); + if (!entry) break; - d_name = std::string(dir_entry.d_name); + d_name = std::string(entry->d_name); if (d_name.compare(0, prefix_size, input_info[i].prefix) != 0) continue; -- 2.7.4 From 844f41581943bdc05072fcd84b2e5d4d2f19046d Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 12 Sep 2017 12:24:37 +0900 Subject: [PATCH 15/16] sensor: hal: emul: clean package spec file - version 1.0.4 - fix group name - clean %build section - clean %install section - use macro for /usr/lib directory Change-Id: I5c95399fe77df95d09bf149cacce05d2f8e40995 Signed-off-by: kibak.yoon --- packaging/sensor-hal-emulator.spec | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/packaging/sensor-hal-emulator.spec b/packaging/sensor-hal-emulator.spec index b372632..71074ec 100644 --- a/packaging/sensor-hal-emulator.spec +++ b/packaging/sensor-hal-emulator.spec @@ -1,8 +1,8 @@ Name: sensor-hal-emulator Summary: Emulator Sensor HAL -Version: 1.0.3 +Version: 1.0.4 Release: 0 -Group: Service/Sensor +Group: Service Framework / Sensor License: Apache-2.0 Source0: %{name}-%{version}.tar.gz Source1: 99-sensor.rules @@ -29,21 +29,16 @@ Emulator Sensor HAL %setup -q %build -export CXXFLAGS+=" -Wextra -Wcast-align -Wcast-qual -Wshadow -Wwrite-strings -Wswitch-default" -export CXXFLAGS+=" -Wnon-virtual-dtor -Wno-c++0x-compat -Wno-unused-parameter -Wno-empty-body" -export CXXFLAGS+=" -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-strict-aliasing" -export CXXFLAGS+=" -fno-unroll-loops -fsigned-char -fstrict-overflow" -cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DBUILD_ARCH=%{_arch} -make %{?jobs:-j%jobs} +%cmake . -DBUILD_ARCH=%{_arch} +make %{?_smp_mflags} %install -rm -rf %{buildroot} %make_install -mkdir -p %{buildroot}/usr/lib/udev/rules.d +mkdir -p %{buildroot}%{_libdir}/udev/rules.d -install -m 0644 %SOURCE1 %{buildroot}/usr/lib/udev/rules.d -install -m 0644 %SOURCE2 %{buildroot}/usr/lib/udev/rules.d +install -m 0644 %SOURCE1 %{buildroot}%{_libdir}/udev/rules.d +install -m 0644 %SOURCE2 %{buildroot}%{_libdir}/udev/rules.d %post /sbin/ldconfig @@ -53,7 +48,7 @@ install -m 0644 %SOURCE2 %{buildroot}/usr/lib/udev/rules.d %files %manifest packaging/%{name}.manifest -/usr/lib/udev/rules.d/99-sensor.rules -/usr/lib/udev/rules.d/99-sensorhub.rules +%{_libdir}/udev/rules.d/99-sensor.rules +%{_libdir}/udev/rules.d/99-sensorhub.rules %{_libdir}/sensor/*.so %license LICENSE.APLv2 -- 2.7.4 From e94ca9a101e9ae2ed2f08303156ca98c015199e9 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 25 Oct 2017 00:29:28 +0900 Subject: [PATCH 16/16] sensor-hal-emulator: hot fix to get data from pedometer Change-Id: I8ef694dbd85c4b7f043174589d476c61ade428cd Signed-off-by: kibak.yoon --- src/sensorhub/libsensorhub-hal.i586.so | Bin 108664 -> 112764 bytes src/sensorhub/libsensorhub-hal.x86_64.so | Bin 114192 -> 114200 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/sensorhub/libsensorhub-hal.i586.so b/src/sensorhub/libsensorhub-hal.i586.so index 8b48fec6060a621488799510caa000d91e5a7882..eb249e6d8087d9f506e1365e327ba00a522f6103 100755 GIT binary patch delta 25062 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 WogCN==v})PKQCBk4j82_`~LuZVdK^S delta 24126 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 delta 24369 zcmZ`>34DxK*MIIvB8fy263Ij&lgNh1f*>T!5Hg7%c0!1?C~c^HX;K6uQsGuFYDv9X zO0+>W){32$Hr0iew++>Hrf5SqR6F1Q+~*mF_xIhOJLmk*IrrXk_wzgxv+j{w8U6+N z88<328C9axtZvc4^SAX(!r#`fo*d80SFc|cKI0`-^elC8RSUZCOtz}fo_)6LgIixT z{rr{MJ98t=CmM{L_%7+|qi{0vK=5rr&#Hyw=O-G!O{2}B{}_A_@<*DC$UDgUkY7fA z9yuPlC2T4Ei~OUa6e{0?`7iRT$dtw*zmNO?c?Gf?3Y-R|^fU4?$*CVY=o*3b)+((B zIs&*a@<`15^vL9qcXkQ7{3X_u3BjiSq{UDM0u@~ey%OA)k_*`Y{$H6uA_6vMN&Eb_eq!auCm}7g#93F(-F|o%j;y zA~f6|d^q@npo5VwAb)_Y&8%Vt??`WfX${-I90HBTL-whYERoS*Al*l94CNe9j(iB2 z(rYS_pKI{BAGsCm-UE#Rb)4M(HQb&dB0 zAA(GJWjFGl$Ysds$Xk#d>2ENxFuV;~?ht~0qw&2#laQ|>H-udhGNs>MWaM^B3~lELsx;jf_xd7 z(ir47C8sENd6H-2LJv%h9g=pM^e2rT*61S8#>n?H+ywRuz~9jDub>Y#-a%{{(-gLp z&LjT^c|5WYWc@$`Rb6vs2Y?&0BP|Eh0LuBGLy`R%deV%$Hwa?=d3b}si0o84slAlM zZfX@NDp96mxkNyoKY-^pi0;=gMKvoJuId|U4ZN&VQn0 zK`qp375-U+z<}z{Rk1@`*8`u@7(5 za4`FTPiok~ujpO1rXgB|-_uli^h4`3B{}@FhA}CPyQqzqr>YeWQi)OndAJgw)b0$I zrGvCOdN~^6Nj@9gBx<7o;Nji3ORgnk8zB%3YIBG^%nXL$!BA2q$^C zU*PCB{-05Q2P>I|r>3J?>ZVp(L#?ZI+R}FHuYa@wDc9CWnP$J5TIuA9Ig~4Cgj$

>wLA^Nl$r`kggpq9bV9=qb`3q-`VH|)?Eq` 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 -- 2.7.4