From 1dc1ba64d443270f2eed80e1c203e1a9aab685dc Mon Sep 17 00:00:00 2001 From: BioSehnsucht Date: Fri, 8 Sep 2017 23:20:14 -0500 Subject: [PATCH 01/31] input_text : removing disabled option per home-assistant/home-assistant-polymer#408 (#3327) --- source/_components/input_text.markdown | 5 ----- 1 file changed, 5 deletions(-) diff --git a/source/_components/input_text.markdown b/source/_components/input_text.markdown index 7e0c3694471..26ad4846a74 100644 --- a/source/_components/input_text.markdown +++ b/source/_components/input_text.markdown @@ -27,10 +27,6 @@ input_text: text3: name: Text 3 pattern: '[a-fA-F0-9]*' - test4: - name: Text 4 - initial: Can't Touch This - disabled: true ``` Configuration variables: @@ -41,4 +37,3 @@ Configuration variables: - **name** (*Optional*): Friendly name of the text input. - **initial** (*Optional*): Initial value when Home Assistant starts. Default is empty string. - **pattern** (*Optional*): Regex pattern for client side validation. Default is empty string, which is treated same as `.*`. -- **disabled** (*Optional*): If set to true, disables making changes from the UI (but not by automations / REST / etc), displaying the value grayed out to indicate it is read-only in the UI. Default is false. From 045df29481077679abbd7535bf7c16f22ebf5796 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Sat, 9 Sep 2017 09:35:19 +0200 Subject: [PATCH 02/31] Documentation of the Xiaomi Philips Light component (#3246) * Documentation for Xiaomi Philips Light component added. * HA version added. * Syntax error fixed. * Section "Retrieving the Access Token" has a central place now. * Spelling & grammar fixed. --- .../light.xiaomi_philipslight.markdown | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 source/_components/light.xiaomi_philipslight.markdown diff --git a/source/_components/light.xiaomi_philipslight.markdown b/source/_components/light.xiaomi_philipslight.markdown new file mode 100644 index 00000000000..ec4d351e25f --- /dev/null +++ b/source/_components/light.xiaomi_philipslight.markdown @@ -0,0 +1,36 @@ +--- +layout: page +title: "Xiaomi Philips Light" +description: "Instructions how to integrate your Xiaomi Philips Lights within Home Assistant." +date: 2017-08-26 08:45 +sidebar: true +comments: false +sharing: true +footer: true +logo: philips.png +ha_category: Light +ha_version: 0.53 +ha_iot_class: "Local Polling" +--- + +The `xiaomi_philipslight` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp and Xiaomi Philips LED Ceiling Lamp. + +Currently, the supported features are `on`, `off`, `set_cct` (colortemp) , `set_bright` (brightness). + +Please follow the instructions on [Retrieving the Access Token](/xiaomi/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. + +To add a Xiaomi Philips Light to your installation, add the following to your configuration.yaml file: + +```yaml +# Example configuration.yaml entries +light: + - platform: xiaomi_philipslight + name: Xiaomi Philips Smart LED Ball + host: 192.168.130.67 + token: YOUR_TOKEN +``` + +Configuration variables: +- **host** (*Required*): The IP of your light. +- **token** (*Required*): The API token of your light. +- **name** (*Optional*): The name of your light. From 7de0db1d1b683bb74c6a221827228b58afc07fc9 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Sat, 9 Sep 2017 01:36:58 -0600 Subject: [PATCH 03/31] Adds documentation for the proposed AirVisual sensor platform (#3321) * Adds documentation for the proposed AirVisual sensor platform * Fixed small typo --- source/_components/sensor.airvisual.markdown | 112 +++++++++++++++++++ source/images/supported_brands/airvisual.jpg | Bin 0 -> 17694 bytes 2 files changed, 112 insertions(+) create mode 100644 source/_components/sensor.airvisual.markdown create mode 100644 source/images/supported_brands/airvisual.jpg diff --git a/source/_components/sensor.airvisual.markdown b/source/_components/sensor.airvisual.markdown new file mode 100644 index 00000000000..98686274dcd --- /dev/null +++ b/source/_components/sensor.airvisual.markdown @@ -0,0 +1,112 @@ +--- +layout: page +title: "AirVisual" +description: "Instructions on how to use AirVisual data within Home Assistant" +date: 2017-09-06 12:15 +sidebar: true +comments: false +sharing: true +footer: true +logo: airvisual.jpg +ha_category: Health +ha_release: 0.53 +ha_iot_class: "Cloud Polling" +--- + +The `airvisual` sensor platform queries the [AirVisual](https://airvisual.com/) API for air quality +data on the nearest city to a latitude and longitude. The resulting information +creates sensors for the Air Quality Index (AQI), the human-friendly air quality +level, and the main pollutant of that area. Sensors that conform to either/both +the [U.S. and Chinese air quality standards](http://www.clm.com/publication.cfm?ID=366) can be created. + +This platform requires an AirVisual API key, which can be obtained [here](https://airvisual.com/api). Note +that the platform was designed using the "Community" package; the "Startup" +and "Enterprise" package keys should continue to function, but actual results +may vary (or not work at all). + +

+The "Community" API key is limited to 10,000 calls per month. In order to leave +a buffer, the `airvisual` platform queries the API every 10 minutes. +

+ +## {% linkable_title Configuring the Platform %} + +To enable this platform, add the following lines to your `configuration.yaml` +file: + +```yaml +sensor: + - platform: airvisual + api_key: abc123 + monitored_conditions: + - us + - cn + latitude: 42.81212 + longitude: 108.12422 + radius: 500 +``` + +Configuration variables: + +- **api_key** (*Required*): your AirVisual API key +- **monitored_conditions** (*Required*): the air quality standard(s) to use +(`us` for U.S., `cn` for Chinese) +- **latitude** (*Optional*): the latitude to monitor; if excluded, the latitude +defined in `configuration.yaml` will be used +- **longitude** (*Optional*): the longitude to monitor; if excluded, the longitude +defined in `configuration.yaml` will be used +- **radius** (*Optional*): the radius (in meters) around the latitude/longitude to +search for the nearest city; defaults to `1000` + +## {% linkable_title Sensor Types %} + +When configured, the platform will create three sensors for each configured +air quality standard: + +### Air Quality Index + +**Description:** This sensor displays a numeric air quality index (AQI), a metric +for the overall "health" of the air. + +**Example Sensor Name:** `sensor.chinese_air_quality_index` + +**Example Sensor Value:** `32` + +**Explanation:** + +AQI | Status | Description +------- | :----------------: | ---------- +0 - 50 | **Good** | Air quality is considered satisfactory, and air pollution poses little or no risk +51 - 100 | **Moderate** | Air quality is acceptable; however, for some pollutants there may be a moderate health concern for a very small number of people who are unusually sensitive to air pollution +101 - 150 | **Unhealthy for Sensitive Groups** | Members of sensitive groups may experience health effects. The general public is not likely to be affected +151 - 200 | **Unhealthy** | Everyone may begin to experience health effects; members of sensitive groups may experience more serious health effects +201 - 300 | **Very unhealthy** | Health warnings of emergency conditions. The entire population is more likely to be affected +301+ | **Hazardous** | Health alert: everyone may experience more serious health effects + +### Air Polution Level + +**Description:** This sensor displays the associated `Status` (from the above +table) for the current AQI. + +**Sample Sensor Name:** `sensor.us_air_pollution_level` + +**Example Sensor Value:** `Moderate` + +### Main Pollutant + +**Description:** This sensor displays the pollutant whose value is currently +highest. + +**Sample Sensor Name:** `sensor.us_main_pollutant` + +**Example Sensor Value:** `PM2.5` + +**Explanation:** + +Pollutant | Symbol | More Info +------- | :----------------: | ---------- +Particulate (<= 2.5 μm) | PM2.5 | [EPA: Particulate Matter (PM) Pollution ](https://www.epa.gov/pm-pollution) +Particulate (<= 10 μm) | PM10 | [EPA: Particulate Matter (PM) Pollution ](https://www.epa.gov/pm-pollution) +Ozone | O | [EPA: Ozone Pollution](https://www.epa.gov/ozone-pollution) +Sulpher Dioxide | SO2 | [EPA: Sulfur Dioxide (SO2) Pollution](https://www.epa.gov/so2-pollution) +Carbon Monoxide | CO | [EPA: Carbon Monoxide (CO) Pollution in Outdoor Air](https://www.epa.gov/co-pollution) diff --git a/source/images/supported_brands/airvisual.jpg b/source/images/supported_brands/airvisual.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddce6892ae7b2fcaf936bdb680833892ffceab87 GIT binary patch literal 17694 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 literal 0 HcmV?d00001 From 386bd3d635eee900bfc4a3e0c6b29930730d2943 Mon Sep 17 00:00:00 2001 From: runningman84 Date: Sat, 9 Sep 2017 09:39:40 +0200 Subject: [PATCH 04/31] Added docs for DWD WarnApp Sensor (#3062) * Added docs for dwdwarnapp * Updated documentation As suggested by Landrash --- source/_components/sensor.dwdwarnapp.markdown | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 source/_components/sensor.dwdwarnapp.markdown diff --git a/source/_components/sensor.dwdwarnapp.markdown b/source/_components/sensor.dwdwarnapp.markdown new file mode 100644 index 00000000000..618794ea4cb --- /dev/null +++ b/source/_components/sensor.dwdwarnapp.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "DWD Warn Weather" +description: "Instructions on how to integrate Deutsche Wetter Dienst weather warnings into Home Assistant." +date: 2017-07-26 22:00 +sidebar: true +comments: false +sharing: true +footer: true +#logo: dwdwarnapp.png +ha_category: Weather +ha_release: 0.51 +ha_iot_class: "Cloud Polling" +--- + +The `dwdwarnapp` sensor platform uses the [Deutsche Wetter Dienst (DWD)](http://www.dwd.de) as a source for current and advance warnings. + +- A name is optional but if multiple regions are used a name will be required. +- The sensor checks for new data every 15 minutes. + +To add the DWD WarnApp sensor to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: dwdwarnapp + region_name: Hansestadt Hamburg +``` + +To get the region name: +- Find your region here: `https://www.dwd.de/DE/wetter/warnungen_landkreise/warnWetter_node.html?ort=Hamburg` +- Verify if you find any warning for your region here: `https://www.dwd.de/DWD/warnungen/warnapp_landkreise/json/warnings.json?jsonp=loadWarnings` + +The warning level is between 0 (no danger) and 4 (warnings of extreme weather): +- Warnungen vor extremem Unwetter (Stufe 4) +- Unwetterwarnungen (Stufe 3) +- Warnungen vor markantem Wetter (Stufe 2) +- Wetterwarnungen (Stufe 1) + +Configuration variables: + +- **region_name** (*Optional*): The region name string as identified from the DWD website. If not given, defaults to Hansestadt Hamburg. +- **name** (*Optional*): The name you would like to give to the warnapp sensor. From 4e68ef82e87a3ac57053702c761205d03682c1dd Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Sat, 9 Sep 2017 19:38:22 +0200 Subject: [PATCH 05/31] Add HTTP Basic auth to RESTful Switch (#3258) --- source/_components/switch.rest.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/switch.rest.markdown b/source/_components/switch.rest.markdown index 6cc7d23bdd5..d9e22107b6e 100644 --- a/source/_components/switch.rest.markdown +++ b/source/_components/switch.rest.markdown @@ -29,7 +29,9 @@ Configuration variables: - **resource** (*Required*): The resource or endpoint that contains the value. - **name** (*Optional*): Name of the REST switch. - - **method** (*Optional*): HTTP method to use (`post` or `put`). Defaults to `post`. +- **method** (*Optional*): HTTP method to use (`post` or `put`). Defaults to `post`. +- **username** (*Optional*): The username for accessing the REST endpoint. +- **password** (*Optional*): The password for accessing the REST endpoint. - **body_on** (*Optional*): The body of the POST request that commands the switch to become enabled. Default is "ON". This value can be a [template](/topics/templating/). - **body_off** (*Optional*): The body of the POST request that commands the switch to become disabled. Default is "OFF". This value can also be a [template](/topics/templating/). - **is_on_template** (*Optional*): A [template](/docs/configuration/templating/#processing-incoming-data) that determines the state of the switch from the value returned by the GET request on the resource URL. This template should compute to a boolean (True or False). If the value is valid JSON, it will be available in the template as the variable `value_json`. Default is equivalent to `'{% raw %}{{ value_json == body_on }}{% endraw %}'`. This means that by default, the state of the switch is on if and only if the response to the GET request matches . From 06d57a068bf30a66ee93e9679c81153752d6c7d3 Mon Sep 17 00:00:00 2001 From: runningman84 Date: Sun, 10 Sep 2017 22:33:39 +0200 Subject: [PATCH 06/31] Renamed dwdwarnapp to dwd_weather_warnings (#3335) --- ...napp.markdown => sensor.dwd_weather_warnings.markdown} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename source/_components/{sensor.dwdwarnapp.markdown => sensor.dwd_weather_warnings.markdown} (81%) diff --git a/source/_components/sensor.dwdwarnapp.markdown b/source/_components/sensor.dwd_weather_warnings.markdown similarity index 81% rename from source/_components/sensor.dwdwarnapp.markdown rename to source/_components/sensor.dwd_weather_warnings.markdown index 618794ea4cb..5ac273a7f0a 100644 --- a/source/_components/sensor.dwdwarnapp.markdown +++ b/source/_components/sensor.dwd_weather_warnings.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "DWD Warn Weather" +title: "DWD Weather warnings" description: "Instructions on how to integrate Deutsche Wetter Dienst weather warnings into Home Assistant." date: 2017-07-26 22:00 sidebar: true @@ -13,7 +13,7 @@ ha_release: 0.51 ha_iot_class: "Cloud Polling" --- -The `dwdwarnapp` sensor platform uses the [Deutsche Wetter Dienst (DWD)](http://www.dwd.de) as a source for current and advance warnings. +The `dwd_weather_warnings` sensor platform uses the [Deutsche Wetter Dienst (DWD)](https://www.dwd.de) as a source for current and advance warnings. - A name is optional but if multiple regions are used a name will be required. - The sensor checks for new data every 15 minutes. @@ -23,7 +23,7 @@ To add the DWD WarnApp sensor to your installation, add the following to your `c ```yaml # Example configuration.yaml entry sensor: - - platform: dwdwarnapp + - platform: dwd_weather_warnings region_name: Hansestadt Hamburg ``` @@ -31,7 +31,7 @@ To get the region name: - Find your region here: `https://www.dwd.de/DE/wetter/warnungen_landkreise/warnWetter_node.html?ort=Hamburg` - Verify if you find any warning for your region here: `https://www.dwd.de/DWD/warnungen/warnapp_landkreise/json/warnings.json?jsonp=loadWarnings` -The warning level is between 0 (no danger) and 4 (warnings of extreme weather): +The warning level is between 0 (no danger) and 4 (extrem weather conditions): - Warnungen vor extremem Unwetter (Stufe 4) - Unwetterwarnungen (Stufe 3) - Warnungen vor markantem Wetter (Stufe 2) From 3d3374878ff5601cc3da00d67e2fcb2b93e14a74 Mon Sep 17 00:00:00 2001 From: Matt White Date: Mon, 11 Sep 2017 15:02:00 -0600 Subject: [PATCH 07/31] Added documentation for mqtt_statestream component (#3302) * Added documentation for mqtt_statestream component * Update 'ha_release' * Update date * Add period --- source/_components/mqtt_statestream.markdown | 37 ++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 source/_components/mqtt_statestream.markdown diff --git a/source/_components/mqtt_statestream.markdown b/source/_components/mqtt_statestream.markdown new file mode 100644 index 00000000000..1a55692411b --- /dev/null +++ b/source/_components/mqtt_statestream.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "MQTT Statestream" +description: "Instructions how to setup MQTT Statestream within Home Assistant." +date: 2017-09-11 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mqtt.png +ha_category: Other +ha_release: 0.54 +ha_iot_class: depends +--- + +The `mqtt_statestream` component publishes state changes in Home Assistant to individual MQTT topics. + +To enable MQTT Statestream in Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +mqtt_statestream: + base_topic: homeassistant/states +``` + +Configuration variables: + +- **base_topic** (*Required*): Base topic used to generate the actual topic used to publish. + +## Operation + +When any Home Assistant entity changes, this component will publish that change to MQTT. + +The topic for each entity is different, so you can easily subscribe other systems to just the entities you are interested in. +The topic will be in the form `base_topic/domain/entity`. + +For example, with the example configuration above, if an entity called 'light.master_bedroom_dimmer' is turned on, this component will publish `on` to `homeassistant/states/light/master_bedroom_dimmer`. From 2f7291914678c033b9f9d535a90dd49a886adb99 Mon Sep 17 00:00:00 2001 From: Jay Stevens Date: Wed, 13 Sep 2017 22:27:40 -0700 Subject: [PATCH 08/31] Add documentation for Todoist component (#3283) * Created Todoist component documentation. * Minor tweaks to the Todoist logo and page. * Added details about services. * Minor grammar fixes. * Update HA version. * Added documentation showing how to set new task's time via service call. --- source/_components/calendar.todoist.markdown | 136 ++++++++++++++++++ .../components/calendar/todoist-108x108.png | Bin 0 -> 8310 bytes .../components/calendar/todoist-512x512.png | Bin 0 -> 24049 bytes source/images/supported_brands/todoist.png | Bin 0 -> 40235 bytes 4 files changed, 136 insertions(+) create mode 100644 source/_components/calendar.todoist.markdown create mode 100755 source/images/components/calendar/todoist-108x108.png create mode 100755 source/images/components/calendar/todoist-512x512.png create mode 100755 source/images/supported_brands/todoist.png diff --git a/source/_components/calendar.todoist.markdown b/source/_components/calendar.todoist.markdown new file mode 100644 index 00000000000..65401ebc643 --- /dev/null +++ b/source/_components/calendar.todoist.markdown @@ -0,0 +1,136 @@ +--- +layout: page +title: "Todoist" +description: "Instructions on how to integrate Todoist into Home Assistant." +date: 2017-08-31 2:22 +sidebar: true +comments: false +sharing: true +footer: true +logo: todoist.png +ha_category: Calendar +ha_iot_class: "Cloud Polling" +ha_release: 0.54 +--- + + +This platform allows you to connect to your [Todoist Projects](https://todoist.com) and generate binary sensors. A different sensor will be created for each individual project, or you can specify "custom" projects which match against criteria you set (more on that below). These sensors will be `on` if you have a task due in that project or `off` if all the tasks in the project are completed or if the project doesn't have any tasks at all. All tasks get updated roughly every 15 minutes. + +### {% linkable_title Prerequisites %} + +You need to determine your Todoist API token. This is fairly simple to do; just go [to the Integrations section on your Todoist settings page](https://todoist.com/Users/viewPrefs?page=authorizations) and find the section labeled "API token" at the bottom of the page. Copy that token and use it in your configuration file. + +### {% linkable_title Basic Setup %} + +To integrate Todoist in Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +calendar: + - platform: todoist + token: API_token_created_from_steps_above +``` + +Configuration variables: + +- **token** (*Required*): The API token used to authorize Home Assistant to access your projects. +- **custom_projects** (*Optional*): Details on any "custom" binary sensor projects you want to create. + - **name** (*Required*): The name of your custom project. Only required if you specify that you want to create a custom project. + - **due_date_days** (*Optional*): Only include tasks due within this many days. If you don't have any tasks with a due date set, this returns nothing. + - **labels** (*Optional*): Only include tasks with at least one of these labels (i.e., this works as an `or` statement).. + - **include_projects** (*Optional*): Only include tasks in these projects. Tasks in all other projects will be ignored. + + +### {% linkable_title Custom Projects %} +Creating custom projects is super-easy and quite powerful. All you need to run the basic Todoist projects is your API token, but if you wanted, you could go even deeper. Here's an example: + +```yaml +# Example configuration.yaml entry +calendar: + - platform: todoist + token: !secret todoist_token + custom_projects: + - name: 'All Projects' + - name: 'Due Today' + due_date_days: 0 + - name: 'Due This Week' + due_date_days: 7 + - name: 'Math Homework' + labels: + - Homework + include_projects: + - Mathematical Structures II + - Calculus II +``` + +(See [here](https://home-assistant.io/docs/configuration/secrets/) for more details about what that `!secret` does -- it's not exclusive to Todoist, and can help keep your API keys and passwords a little safer!) + +As you can see, there are 4 custom projects here: + +- A project containing *all* of the tasks on this account. + +- A project containing *all* the tasks on this account that are due today. + +- A project containing *all* the tasks on this account due within the next week. + +- A project containing everything with the label "Homework", taking only 2 projects into account. + +You can mix-and-match these attributes to create all sorts of custom projects. You can even use [IFTTT](https://ifttt.com/todoist) to create a task with a certain label, then have Home Assistant do some kind of automation when a task with that label comes due. + +Home Assistant does its best to determine what task in each project is "most" important, and it's that task which has its state reported. You can access the other tasks you have due soon via the `all_tasks` array (see below). + +### {% linkable_title Sensor attributes %} + + - **offset_reached**: Not used. + + - **all_day**: `True` if the reported task doesn't have a due date. `False` if there is a due date set. + + - **message**: The title of the "most important" task coming up in this project. + + - **description**: A URL pointing to the task on the Todoist website. + + - **location**: Not used. + + - **start_time**: The last time the Todoist component got updated. Usually within the last 15 minutes. + + - **end_time**: When the task is due. + +- **all_tasks**: A list of all tasks in this project, sorted from most important to least important. + +- **priority**: The priority Todoist reports this task as having. 1 means lowest priority, 4 means highest. Note that this is the **opposite** of how things are displayed in the Todoist app! + +- **task_comments**: Any comments added to this task. + +- **task_labels**: All labels associated with this task. + +- **overdue**: Whether the reported task is past its due date. + +- **due_today**: Whether the reported task is due today. + +### {% linkable_title Services %} + +Todoist also comes with access to a service, `todoist.new_task`. This service can be used to create a new Todoist task. You can specify labels and a project, or you can leave them blank, and the task will go to your "Inbox" project. + +Here's an example JSON payload: + +```json +{ + "content": "Pick up the mail", + "project": "Errands", + "labels":"Homework,School", + "priority":3, + "due_date":"2017-09-12 14:00" +} +``` + +- **content** (*Required*): The name of the task you want to create. + +- **project** (*Optional*): The project to put the task in. + +- **labels** (*Optional*): Any labels you want to add to the task, separated by commas. + +- **priority** (*Optional*): The priority of the task, from 1-4. Again, 1 means least important, and 4 means most important. + +- **due_date** (*Optional*): When the task should be due, in either YYYY-MM-DD format or YYYY-MM-DD HH:MM format. + +Note that there's (currently) no way to mark tasks as done through Home Assistant; task names do not necessarily have to be unique, so you could find yourself in a situation where you close the wrong task. diff --git a/source/images/components/calendar/todoist-108x108.png b/source/images/components/calendar/todoist-108x108.png new file mode 100755 index 0000000000000000000000000000000000000000..c42b03442ab47e6c0b9061dbf6e5eab86c855af2 GIT binary patch literal 8310 zcmV-+Ac^0JP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000%CNkly2t+6#SQJ74MHEQbS6LMCqVqg@oh#$LiaMf# zG9rS21_eY}MbtqD;p*ja8}*7@6hRz7mav8$By0j91hOxk?yjyn@BPpL9R{SkSnR}p zKPKH(r|NgkyPwmvw@n)W02>Sutsv6LSaqfxtzw*LrfP88bl6A*v)WGx+$p7T6Om{@ zBvb$rVX-QLnGJ`a(?{I;t{A2zPK7o^#X7Jh?-X3R2YuQ!MU~5hiw&5>AOPxxuEYSC z0YRLikZnAXxR(fN0H7)w7z}0(zw*lzA^{IGnnyYAFeHyPBp*{)d|(38ePEZk5asj# zAeo^N5UHsTlU+Tk3iWA#(tiHG48yu&;$JmhQ^I715V)?!XJj`|jw@)>F!Amxul_5* z2(=&tvJ&DxNp)xoyvz|{IM)y#1G-@%KFZ-tiH%)snqm(7_1(G8s6r|r5KPkqONLF; z7CT9~+iRGh@H@QrhK&fiVFECrDz=f*G$UB@FjfHqL3t!K5?*qHg+yFzl zzC@^~OjQw?kfPdCB6HvZ1SM916U(8c7k$DJ*wC~ z{oU`Htk`t0;a6)manJsn0fH(BbtSS<>pLk$6(E9XKJk3+^|$|9OArkJ08(v8eepHu z`Nub$nKG`K?MPljgC#;ehfr@<7=fUu3Y6~sw?|j%W z{^gk~$sQSAVZRM3f|A~%Ao-1jMdXNRAIP_~uD$!Ge)7%MfvWw#LHS(I~x$B03T~Sy9YI;UN z;;i{6MO0KrOQ6mat}S@}=?>0Q$9j`t!e9<*Sak}RWQJW)KmdFRiB*X&&)lW8YSTSf zI|Tsjac?i1GgTP>Sk^O=2-SuOQAZ+Z6@XF~1{z~iQLLNZgkewRB;EI5M-T~D1jz;y=JSzv~!jr2pUkjVfvAs`4ad);;*eauS{q^f0&qU|;v5r-!y9X@(3mW*{L_Ls7FSN z-)70?c|1F--<^%BC12bkgaXNi|KfE$gkk0d03JT~pswnjCF7q~^u0T8qO)rL8oB61 zfI{R`9vr@*!H|c#TXKq+Yf6`Yo$H%5u?GtUQr55SQN+v(0Sx^Yoqy~|PQ~+2W>IO0 z&1+uWE&@RU%#4TugAT=wdJ$x^wXkNVb}g;Se&#l_qEa)MA(`vl4xEbutCg~%rC)6I z&3SEr->JH?;0WZ8r`op7j~_SnfSQ!j&&qYovXV{ZGbc6mY+m1x7^u%}dzS*{*D{9h zNa@_EMaHtPJ1fNSNO{>amxw?O5-Z}L&0go|*zHbBj)_mttN7d88rPQ}w}T)+*8g_B zfPkH|Z{=ls@}GG))s~;1Xmy`6`DwxV=+oPy|M*`w0B~4YR8`BDF0Y>b@*tM%Ur~H% zuTv2O&8EVm`)YIg1PQZFIU~f(ivTg)@Nw z`xwA~Som&X^@j`gRDUq9zsVP#;mm+dAqXKLuWxxGanj5@B{|iSoiZxQx1X9eF)1=P zr?JPB0lKdY0R;?3)Zn`}I){&IK&qPY%gegHU%sqz&g8*D_rhn$kni!JqmTV*PSPV! z-X7JdTWd>pME4#nn>@D6owK&nFH;mugcwahk+Eu%m49*oOLneJMl)yUk|u&=I>6?;X+quk$+qZ#ziLrpeS%YF=j*b-S@Tz z5Zpvz)(da%Xk#Xl9GV^M;%61QVzxb+`91$I_@cj+fsue5B zW=$HXnY!@#%z$G#n-HM5IFIv{xqGyX8!Yu}tw%O+KLa_yNh!#gU4CmjsHxI`}n15l|}^=T@qA9(zSM)yC|4uI3b z?N3%O`TSJH+*h*@${xl=fXxHw@j&LaN&?j^kv9G9EfF0$TUu@G^&TyG;V-Q3+}d0L z!w6tjOJ>A4?9fdU)N{b*#Br07NGO&jjd$;koYK)FItYgL1qeb>Ak9muBZe+b zI2A(G^CLP|wrF*{!3)z4t7(mH4UCj5tz7u-j;c=<^dD)zL6qGFSEKaf zu`kUy<48&EWaUB4lA<4qCyq{$dHcFbS$Fp^l2KATt7gOMyDHz9+JeZRKn-N#`7`YV z`=G(w<3~KtWYaoaO#8Vvu3cI7>iFBp?G`c!J7Kda@J7XZle4F8w%?rD)0&;~<(9rZ z3v&7YcJLW>zcxn9yb3@cS>xJNK4y5Dd2nwNuVhf5sUK1yr3vSg&u)vkXGk)DCbj?c zn8jyy6+icQ8}r18C;*T!K>_$+1OXBPF%Jz}5k2JLo&X{&JX?A7lFts5&V8+OgsPyv zoK8o~JRiWLXaC?j_~Qm+>=SLOE30AyO{@|T1Q86$C627lxk`Kk-LrL5V_8;m3sIo0 z22>ju3TOic>`E9lF`jH%6H9g~Z~vNOqlVp>YW5soyuw^k{mtV2?zvMt z1F(4v2@&KI2jhI5{j9xB`xCKaCmyz?HR)r`P8F{%oj$RV+`c(O5a6jp{f3tZ>}UPI z@5Ic>h+g&WjUH)U`8qDudY=ta_1NbotaoH~z17NP*f920{`Wg>*Jtl%GBfJ)IWd7% zoGZ(73P(KHoC*t4m>K33P%%UVmJH{kBUZ-TKeQJB%}S2M_4VgD<#VQXCy3w0S;WCq zoDJ`u9b1Z?d!n6U7!kqd+ZcdC1OdRuK-8eS_QVYzYa_e8m6d_J_wHIzF?B+FE;^mW zGO&I_e~nrAouAsYR$T=4K7hcF-;=VSYSBA~D;F*38R$d%J9r5O10ti7H>cH)}&u04BO8Y%Ok%7t&0>!1ElmR{Qv zAIJhB@{hxw(Y8GPwK<0rXI$1Vg8AbmGbdK)%a^y6kf;mBk4j#d@K)SoPY)1@$t|tr z1PeA5k9;UYEiX^-NeNl|7EQ^BjkLpKN<=<7a$U?lL)rs~vT_gCvc;>)XHULWK!Ahj zAt6B^N0h6<>+`p3=`DL)RB5Jc*b@85@FY^z z>n+Uwin4X9cT~=Jsf*^Wu}erqYBtpL9<)1U#IvRv8P(3p;PeA~R+rD1a-;9qq2%Ba zwEj3D;l)?iNAw<$5om4h?8FG=g+?d(c31$y!-^sRq3ZEd=HxmuJGTd5w*aov_tT-h zvZ_jG8LeX}BGOu)h}*Tdbjk$b*}V3KbGkJMSP{MYZjK)}C4p>OupPu^!GJ6!lvkO0 zHXM?s1W8>heg4TVQE828B4*6rs3oTaR}ds}+L~o_y^QgkDtc$masKk7&ORvtrc2V2 z%y1|Q7=XM!y&`$$yGMjG)>4AFYFo}~O;P%J4I{Ky7}3w0A$}PnshOP*Bu}2Lliktw zY7eAl$>-lz&7U(+dc6oVn@#{CZ3;@XNO$Ac=kKsLw>DW=_wFv4G9KRbKeQzwL%KY6 zL14^)st^<*pc^LQo*KI~YVf^{Aw=qx9)S0!!#Vkr#-%5mI+k4H3v6aH`-_;0AQQtz zuZ|yl&&?o83O?+X1+K3b7nIL=B})kMuhJ0DJ6;gj`62{?6+fxfXx*mYmAEnc z^t|Gio~yx@4egi!Z-99}1`y-W;JT^fkExSpMhH#2&XPlO=*KlhBOmHOJ~M{vP<<>Q zV9X4q)=r4)nwKWe`rAR_jO}dko~7mU=j?a?{iE)Z&A5J1xCbUkfeFKm z9rn!1n0p@R2BH`Xp+-sBcV8c)*^@fBrGLjwT}~1cGp_~EL*KhA=k%DzGZn9{`R6tV zq^2}gK^fHYrf)9XVsFuEz(2h!!XbDG7-^tUQ#gs$5q*>A99-_x5B{ zGJGL^98s{q{-wOahHq!(TeH~x%@^$?2ewt#@0bXjJ+MR}f-i`jnnVO8DOtviowD41 zONTqG*(u+)@_92I?j>Ke;owswbr;w<+f!Jusc6g-jj6Dp(ba1WBY;@O3?07FdH>LM zAhL4Gq^D-}w;L;_WcOjJ-#@AvNC8uNb2n`(9y=ma5X6--+BP9T1c+{Z^Ag5SR>`I{ zw-it1?fa%^+{hlHvcefmm{6aAoz-~<$``#?QT@TZPKxlC(gQWcb^x2{Obp0-6x zY1rS&HH^y2byd@|GxV(+QlylS^7rxkF+pug2LSeXwv@`X^ehpSzO1imQD_UVeBh;?@hQq|L{hK;!mB?@95`niJ89zaC@*{toiB4Mq}LY z7F9(>iN9vtiTrz<$uz-3hi^BC*nIT94OCaISyAH?9dhdj@L#Hed z1zl(J9nM=?H1d&#?r*+qO<*$Fzk}@e_&d{--#_zH((L!ePkAFJqJ36JSUBH_O>_5| znUf9t)t9pCIjO-Nm`XAB)?cu2Z!1{Gq2w-?#(NkG$zvAyrHqLj%U)Zg{Z$4I{^Tys!{y-kWTK#%?~%3Ij>xaPsqF? zcb2lOV*cFy)qh{qjf6k{7)BMOO1vOAFm%I&^VG5QlKTf{md<#2JsZYPmvd9sn&saV z{-Li{{rRG95V)+YNf_9LK12k!?t{-T;aTy2-A@hbdc9}u%5?yWg1MPlbY|6=VMD4b zro1r7tf`KIzvDVASHgx}QkMz^UYk~#I`6}MTGQ)(wSSR)`k~X=&l+OKrq+fb!*=Rw zudoYdA4~&w!|SXXc3+p0@lPEz%FDK0zz~)dF8FKCsX^UZh}?~>b=?fZ`mI*jFU6(^ z=!S%S$ium@J^GZAO;deG52AA6y!LAG=~!KcS5-&>JKK1wsVZu8ABce8^z8fJqgx*o zb@KOixOJZ&Q$0V~x=z}#u!MnyB@8SKEG%JQVF?NtgY@ugs7otM`u2y5PIVw)_MeGj z3PH4$!n{IW9D?9wJ}x|7UT+$52ZgDHw0I>WN{E%BxoShIroPV91t|7=Z_8_K6mo1z&soGjBfu}$q^w=2zAhM|RuXf_4aqjX07Hp5Re>#q z71&r*4Bh2f+^%Wr9{?oj^=Q{(-F4*wQ{ZE*!uRyaq6!pA6T%H2+|W@2K$oa0s;tZ` zbi4M&+3iq>!j8yqNJ~myNGyl2pmT>)2s`|zfH?p-RTZbb9{0ZT@;0Sz?;Bp}-})Ms zYeorz6cCYVc+H_cA3t)wmiy;iV(kxmIuyc=vZ}und-P0=Xel!cyCR^7@QS-ioKU-U zxYTX9-qdw(Doeb7p)>yfrQ*!B6p09uIhUCS+XTlScDaYdtG3&mHqp{##MgdThTryO zVe$cdnk04`Qhp_wzw($hhJz!a3WB_Va{K=Q0Kc$q&HXswng9R*07*qoM6N<$f{c<6 A$p8QV literal 0 HcmV?d00001 diff --git a/source/images/components/calendar/todoist-512x512.png b/source/images/components/calendar/todoist-512x512.png new file mode 100755 index 0000000000000000000000000000000000000000..a13789ee76d65f946243eb4fe476ba6f57d939e4 GIT binary patch literal 24049 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%0Ao_Jix8f&0o1vPyjw*%r}ZD85}F@ z#<&f;^}36_GR~HHL>1nyO0v zt+ygqOsn?=kl<~8jM(L(;qstDK`iWR;FjM6J|2i9QGQ_Z=eLLe7Wdftobmo8OCGhG zDaZ61@_g*~o{O0-JH&O^yc@*5pEMn*765^O0|P>YiD-gAAQDOtfZ<<_(@|$#e;Aak zz~IxCKa5}y-g(QP1~4l@XDxpitO|gO)0Y2W08{6@>ks1;Dd@E25918rKZE!K^4~%H z0r~$Yh(92o#rF@$e+QuuYyyPyH@bfs|Bm<16rYayXNv!BIfL-eT>m@F{}C^61paTi j{twvy*Fmi52C;w)6zP_88A%KPRG>SmIx1yK*3bS6bWu2k literal 0 HcmV?d00001 From d60ecab58d3da23730e0aea028f46032b8e8ad5b Mon Sep 17 00:00:00 2001 From: Ted Drain Date: Wed, 13 Sep 2017 23:53:32 -0700 Subject: [PATCH 09/31] Added log file option (#3365) --- source/_docs/tools/hass.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/tools/hass.markdown b/source/_docs/tools/hass.markdown index 29939a17f11..3ba0896f359 100644 --- a/source/_docs/tools/hass.markdown +++ b/source/_docs/tools/hass.markdown @@ -37,9 +37,9 @@ optional arguments: --log-rotate-days LOG_ROTATE_DAYS Enables daily log rotation and keeps up to the specified days + --log-file LOG_FILE Log file to write to. If not set, CONFIG/home- + assistant.log is used --runner On restart exit with code 100 --script ... Run one of the embedded scripts --daemon Run Home Assistant as daemon ``` - - From 5a8d671f9bf42625e2ed4e732e1096d8515ed725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Thu, 14 Sep 2017 05:50:52 -0400 Subject: [PATCH 10/31] rename xiaomi components --- ....markdown => binary_sensor.xiaomi_aqara.markdown} | 8 ++++---- ...r.xiaomi.markdown => cover.xiaomi_aqara.markdown} | 4 ++-- ...t.xiaomi.markdown => light.xiaomi_aqara.markdown} | 4 ++-- ...lipslight.markdown => light.xiaomi_miio.markdown} | 4 ++-- ....xiaomi.markdown => sensor.xiaomi_aqara.markdown} | 4 ++-- ....xiaomi.markdown => switch.xiaomi_aqara.markdown} | 4 ++-- ...m.xiaomi.markdown => vacuum.xiaomi_miio.markdown} | 4 ++-- .../{xiaomi.markdown => xiaomi_aqara.markdown} | 12 ++++++------ 8 files changed, 22 insertions(+), 22 deletions(-) rename source/_components/{binary_sensor.xiaomi.markdown => binary_sensor.xiaomi_aqara.markdown} (97%) rename source/_components/{cover.xiaomi.markdown => cover.xiaomi_aqara.markdown} (60%) rename source/_components/{light.xiaomi.markdown => light.xiaomi_aqara.markdown} (60%) rename source/_components/{light.xiaomi_philipslight.markdown => light.xiaomi_miio.markdown} (85%) rename source/_components/{sensor.xiaomi.markdown => sensor.xiaomi_aqara.markdown} (60%) rename source/_components/{switch.xiaomi.markdown => switch.xiaomi_aqara.markdown} (59%) rename source/_components/{vacuum.xiaomi.markdown => vacuum.xiaomi_miio.markdown} (96%) rename source/_components/{xiaomi.markdown => xiaomi_aqara.markdown} (97%) diff --git a/source/_components/binary_sensor.xiaomi.markdown b/source/_components/binary_sensor.xiaomi_aqara.markdown similarity index 97% rename from source/_components/binary_sensor.xiaomi.markdown rename to source/_components/binary_sensor.xiaomi_aqara.markdown index a63cacd9f44..d8a24ca727a 100644 --- a/source/_components/binary_sensor.xiaomi.markdown +++ b/source/_components/binary_sensor.xiaomi_aqara.markdown @@ -14,9 +14,9 @@ ha_iot_class: "Local Push" --- -The `xiaomi` binary sensor platform allows you to get data from your [Xiaomi](http://www.mi.com/en/) binary sensors. +The `xiaomi aqara` binary sensor platform allows you to get data from your [Xiaomi](http://www.mi.com/en/) binary sensors. -The requirement is that you have setup the [`xiaomi` component](/components/xiaomi/). +The requirement is that you have setup the [`xiaomi aqara` component](/components/xiaomi_aqara/). ### {% linkable_title Type of sensors supported %} @@ -118,7 +118,7 @@ The requirement is that you have setup the [`xiaomi` component](/components/xiao data: title: Fire alarm! message: Fire/Smoke detected! - - service: xiaomi.play_ringtone + - service: xiaomi_aqara.play_ringtone data: gw_mac: xxxxxxxxxxxx ringtone_id: 2 @@ -174,7 +174,7 @@ Available events are `single`, `double`, `hold`, `long_click_press` and `long_cl entity_id: binary_sensor.switch_158d000xxxxxc2 click_type: long_click_press action: - service: xiaomi.play_ringtone + service: xiaomi_aqara.play_ringtone data: gw_mac: xxxxxxxxxxxx ringtone_id: 8 diff --git a/source/_components/cover.xiaomi.markdown b/source/_components/cover.xiaomi_aqara.markdown similarity index 60% rename from source/_components/cover.xiaomi.markdown rename to source/_components/cover.xiaomi_aqara.markdown index 5c7aa9e4d70..d2bbdf5fa9d 100644 --- a/source/_components/cover.xiaomi.markdown +++ b/source/_components/cover.xiaomi_aqara.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Push" --- -The `xiaomi` cover platform allows you to get data from your [Xiaomi](http://www.mi.com/en/) covers. +The `xiaomi aqara` cover platform allows you to get data from your [Xiaomi](http://www.mi.com/en/) covers. -The requirement is that you have setup [Xiaomi](/components/xiaomi/). +The requirement is that you have setup [Xiaomi aqara](/components/xiaomi_aqara/). diff --git a/source/_components/light.xiaomi.markdown b/source/_components/light.xiaomi_aqara.markdown similarity index 60% rename from source/_components/light.xiaomi.markdown rename to source/_components/light.xiaomi_aqara.markdown index f33a907fc3d..561cf132c29 100644 --- a/source/_components/light.xiaomi.markdown +++ b/source/_components/light.xiaomi_aqara.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Push" --- -The `xiaomi` light platform allows you to get data from your [Xiaomi](http://www.mi.com/en/) lights. +The `xiaomi aqara` light platform allows you to get data from your [Xiaomi](http://www.mi.com/en/) lights. -The requirement is that you have setup [Xiaomi](/components/xiaomi/). +The requirement is that you have setup [Xiaomi aqara](/components/xiaomi_aqara/). diff --git a/source/_components/light.xiaomi_philipslight.markdown b/source/_components/light.xiaomi_miio.markdown similarity index 85% rename from source/_components/light.xiaomi_philipslight.markdown rename to source/_components/light.xiaomi_miio.markdown index ec4d351e25f..73c4aba5077 100644 --- a/source/_components/light.xiaomi_philipslight.markdown +++ b/source/_components/light.xiaomi_miio.markdown @@ -13,7 +13,7 @@ ha_version: 0.53 ha_iot_class: "Local Polling" --- -The `xiaomi_philipslight` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp and Xiaomi Philips LED Ceiling Lamp. +The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp and Xiaomi Philips LED Ceiling Lamp. Currently, the supported features are `on`, `off`, `set_cct` (colortemp) , `set_bright` (brightness). @@ -24,7 +24,7 @@ To add a Xiaomi Philips Light to your installation, add the following to your co ```yaml # Example configuration.yaml entries light: - - platform: xiaomi_philipslight + - platform: xiaomi_miio name: Xiaomi Philips Smart LED Ball host: 192.168.130.67 token: YOUR_TOKEN diff --git a/source/_components/sensor.xiaomi.markdown b/source/_components/sensor.xiaomi_aqara.markdown similarity index 60% rename from source/_components/sensor.xiaomi.markdown rename to source/_components/sensor.xiaomi_aqara.markdown index 3e9f776380f..247a9a94c9e 100644 --- a/source/_components/sensor.xiaomi.markdown +++ b/source/_components/sensor.xiaomi_aqara.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Push" --- -The `xiaomi` sensor platform allows you to get data from your [Xiaomi](http://www.mi.com/en/) sensors. +The `xiaomi aqara` sensor platform allows you to get data from your [Xiaomi](http://www.mi.com/en/) sensors. -The requirement is that you have setup [Xiaomi](/components/xiaomi/). +The requirement is that you have setup [Xiaomi aqara](/components/xiaomi_aqara/). diff --git a/source/_components/switch.xiaomi.markdown b/source/_components/switch.xiaomi_aqara.markdown similarity index 59% rename from source/_components/switch.xiaomi.markdown rename to source/_components/switch.xiaomi_aqara.markdown index f710778f911..f207229beed 100644 --- a/source/_components/switch.xiaomi.markdown +++ b/source/_components/switch.xiaomi_aqara.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Push" --- -The `xiaomi` switch platform allows you to get data from your [Xiaomi](http://www.mi.com/en/) switches. +The `xiaomi aqara` switch platform allows you to get data from your [Xiaomi aqara](http://www.mi.com/en/) switches. -The requirement is that you have setup [Xiaomi](/components/xiaomi/). +The requirement is that you have setup [Xiaomi aqara](/components/xiaomi_aqara/). diff --git a/source/_components/vacuum.xiaomi.markdown b/source/_components/vacuum.xiaomi_miio.markdown similarity index 96% rename from source/_components/vacuum.xiaomi.markdown rename to source/_components/vacuum.xiaomi_miio.markdown index 586baa0bccb..52dae266be1 100644 --- a/source/_components/vacuum.xiaomi.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -13,7 +13,7 @@ ha_release: 0.51 ha_iot_class: "Local Polling" --- -The `xiaomi` vacuum platform allows you to control the state of your [Xiaomi Mi Robot Vacuum](http://www.mi.com/roomrobot/). +The `xiaomi miio` vacuum platform allows you to control the state of your [Xiaomi Mi Robot Vacuum](http://www.mi.com/roomrobot/). Current supported features are `turn_on`, `pause`, `stop`, `return_to_home`, `turn_off` (stops goes to dock), `locate`, `clean_spot`, `set_fanspeed` and even remote control your robot. @@ -24,7 +24,7 @@ To add a vacuum to your installation, add the following to your `configuration.y ```yaml # Example configuration.yaml entry vacuum: - - platform: xiaomi + - platform: xiaomi_miio host: 192.168.1.2 token: YOUR_TOKEN ``` diff --git a/source/_components/xiaomi.markdown b/source/_components/xiaomi_aqara.markdown similarity index 97% rename from source/_components/xiaomi.markdown rename to source/_components/xiaomi_aqara.markdown index c162283ed2d..e84a74cf484 100644 --- a/source/_components/xiaomi.markdown +++ b/source/_components/xiaomi_aqara.markdown @@ -13,7 +13,7 @@ ha_release: "0.50" ha_iot_class: "Local Push" --- -The `xiaomi` platform allows you to integrate the following [Xiaomi](http://www.mi.com/en/) devices into Home Assistant. +The `xiaomi aqara` platform allows you to integrate the following [Xiaomi](http://www.mi.com/en/) devices into Home Assistant. - Temperature and Humidity Sensor (1st and 2nd generation) - Motion Sensor (1st and 2nd generation) @@ -54,7 +54,7 @@ To enable Xiaomi gateway in your installation, add the following to your `config ```yaml # You can leave mac empty if you only have one gateway. -xiaomi: +xiaomi_aqara: gateways: - mac: key: xxxxxxxxxxxxxxxx @@ -64,7 +64,7 @@ xiaomi: ```yaml # 12 characters mac can be obtained from the gateway. -xiaomi: +xiaomi_aqara: gateways: - mac: xxxxxxxxxxxx key: xxxxxxxxxxxxxxxx @@ -76,7 +76,7 @@ xiaomi: ```yaml # 12 characters MAC can be obtained from the gateway. -xiaomi: +xiaomi_aqara: interface: '192.168.0.1' gateways: - mac: xxxxxxxxxxxx @@ -110,7 +110,7 @@ Automation example entity_id: binary_sensor.switch_158d000xxxxxc2 click_type: long_click_press action: - service: xiaomi.play_ringtone + service: xiaomi_aqara.play_ringtone data: gw_mac: xxxxxxxxxxxx ringtone_id: 8 @@ -124,7 +124,7 @@ Automation example entity_id: binary_sensor.switch_158d000xxxxxc2 click_type: single action: - service: xiaomi.stop_ringtone + service: xiaomi_aqara.stop_ringtone data: gw_mac: xxxxxxxxxxxx ``` From c8f7ae7a5b387a8a3e5c1162b27cf37366382461 Mon Sep 17 00:00:00 2001 From: giangvo Date: Fri, 15 Sep 2017 01:12:37 +1000 Subject: [PATCH 11/31] Update switch.broadlink.markdown to add document for MP1 power strip (#3367) --- source/_components/switch.broadlink.markdown | 25 +++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index c40d3ebd112..323208deac3 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -31,12 +31,17 @@ Configuration variables: - **mac** (*Required*): Device MAC address. - **timeout** (*Optional*): Timeout in seconds for the connection to the device. - **friendly_name** (*Optional*): The name used to display the switch in the frontend. -- **type** (*Required for some models*): Switch type. Choose one from: `rm`, `rm2`, `rm_mini`, `rm_pro_phicomm`, `rm2_home_plus`, `rm2_home_plus_gdt`, `rm2_pro_plus`, `rm2_pro_plus2`, `rm2_pro_plus_bl`, `rm_mini_shate`, `sp1`, `sp2`, `honeywell_sp2`, `sp3`, `spmini2` or `spminiplus`. +- **type** (*Required for some models*): Switch type. Choose one from: `rm`, `rm2`, `rm_mini`, `rm_pro_phicomm`, `rm2_home_plus`, `rm2_home_plus_gdt`, `rm2_pro_plus`, `rm2_pro_plus2`, `rm2_pro_plus_bl`, `rm_mini_shate`, `sp1`, `sp2`, `honeywell_sp2`, `sp3`, `spmini2`, `spminiplus` or `mp1`. - **switches** (*Optional*): The array that contains all switches. - **identifier** (*Required*): Name of the command switch as slug. Multiple entries are possible. - **friendly_name** (*Optional*): The name used to display the switch in the frontend. - **command_on** (*Required*): Base64 encoded packet from RM device to take for on. - **command_off** (*Required*): Base64 encoded packet from RM device to take for off. +- **slots** (*Optional*): Friendly names of 4 slots of MP1 power strip. If not configured, slot name will be `switch's friendly_name + 'slot {slot_index}'`. e.g 'MP1 slot 1' + - **slot_1** (*Optional*) + - **slot_2** (*Optional*) + - **slot_3** (*Optional*) + - **slot_4** (*Optional*) Information about how to install on Windows can be found [here](https://home-assistant.io/components/sensor.broadlink/#microsoft-windows-installation) @@ -103,6 +108,24 @@ switch: friendly_name: 'Humidifier' ``` +Example config for `mp1` device: + +```yaml +switch: + - platform: broadlink + host: IP_ADDRESS + mac: 'MAC_ADDRESS' + type: mp1 + friendly_name: 'MP1' + slots: + # friendly name of slots - optional + # if not set, slot name will be switch's friendly_name + 'slot {slot_index}'. e.g 'MP1 slot 1' + slot_1: 'TV slot' + slot_2: 'Xbox slot' + slot_3: 'Fan slot' + slot_4: 'Speaker slot' +``` + ### {% linkable_title Service `send_packet` %} You can use the service broadlink/send_packet to directly send IR packets without the need to assign a switch entity for each command. From e2cb9f558df55097c0e8b320d0ae6630e6da3c98 Mon Sep 17 00:00:00 2001 From: Joe Lu Date: Fri, 15 Sep 2017 00:13:07 -0700 Subject: [PATCH 12/31] Update alarm_control_panel.manual.markdown (#3371) --- .../alarm_control_panel.manual.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/_components/alarm_control_panel.manual.markdown b/source/_components/alarm_control_panel.manual.markdown index db5de63da78..ffb15498103 100644 --- a/source/_components/alarm_control_panel.manual.markdown +++ b/source/_components/alarm_control_panel.manual.markdown @@ -28,6 +28,24 @@ Configuration variables: - **pending_time** (*Optional*): The time in seconds of the pending time before arming the alarm. Default is 60 seconds. - **trigger_time** (*Optional*): The time in seconds of the trigger time in which the alarm is firing. Default is 120 seconds. - **disarm_after_trigger** (*Optional*): If true, the alarm will automatically disarm after it has been triggered instead of returning to the previous state. +- **armed_home|armed_away|armed_night|triggered** (*Optional*): State specific settings + - **pending_time**: State specific pending time override. + +In the config example below, armed_home state will have no pending time and triggered state will have pending time of 20 second whereas armed_away state will have a default pending time of 30 seconds. + +```yaml +# Example configuration.yaml entry +alarm_control_panel: + - platform: manual + name: Home Alarm + code: 1234 + pending_time: 30 + armed_home: + pending_time: 0 + triggered: + pending_time: 20 + trigger_time: 4 +``` ## {% linkable_title Examples %} From c313a8e0f30e1c3ad7720886157da88b8072bdac Mon Sep 17 00:00:00 2001 From: Matt White Date: Sat, 16 Sep 2017 00:06:01 -0600 Subject: [PATCH 13/31] mqtt_statestream: Update docs to append state at end of topic (#3379) --- source/_components/mqtt_statestream.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/mqtt_statestream.markdown b/source/_components/mqtt_statestream.markdown index 1a55692411b..7945840415e 100644 --- a/source/_components/mqtt_statestream.markdown +++ b/source/_components/mqtt_statestream.markdown @@ -20,7 +20,7 @@ To enable MQTT Statestream in Home Assistant, add the following section to your ```yaml # Example configuration.yaml entry mqtt_statestream: - base_topic: homeassistant/states + base_topic: homeassistant ``` Configuration variables: @@ -32,6 +32,6 @@ Configuration variables: When any Home Assistant entity changes, this component will publish that change to MQTT. The topic for each entity is different, so you can easily subscribe other systems to just the entities you are interested in. -The topic will be in the form `base_topic/domain/entity`. +The topic will be in the form `base_topic/domain/entity/state`. -For example, with the example configuration above, if an entity called 'light.master_bedroom_dimmer' is turned on, this component will publish `on` to `homeassistant/states/light/master_bedroom_dimmer`. +For example, with the example configuration above, if an entity called 'light.master_bedroom_dimmer' is turned on, this component will publish `on` to `homeassistant/light/master_bedroom_dimmer/state`. From 39383a4e2768fb8d5f0b5f3f0c5129f1b65bce73 Mon Sep 17 00:00:00 2001 From: Andrey Kupreychik Date: Sat, 16 Sep 2017 15:30:34 +0700 Subject: [PATCH 14/31] Added keenetic NDMS2 docs (#3373) * Added keenetic NDMS2 docs * Added missing logo --- .../device_tracker.keenetic_ndms2.markdown | 37 ++++++++++++++++++ source/images/supported_brands/keenetic.png | Bin 0 -> 2915 bytes 2 files changed, 37 insertions(+) create mode 100644 source/_components/device_tracker.keenetic_ndms2.markdown create mode 100644 source/images/supported_brands/keenetic.png diff --git a/source/_components/device_tracker.keenetic_ndms2.markdown b/source/_components/device_tracker.keenetic_ndms2.markdown new file mode 100644 index 00000000000..3dbd197b771 --- /dev/null +++ b/source/_components/device_tracker.keenetic_ndms2.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "Keenetic NDMS2 Routers" +description: "Instructions how to integrate Keenetic NDMS2 Routers into Home Assistant." +date: 2017-09-15 15:40 +sidebar: true +comments: false +sharing: true +footer: true +logo: keenetic.png +ha_category: Presence Detection +ha_release: 0.54 +--- + +This component offers presence detection by examining devices connected to a [Keenetic](https://keenetic.net/) +Router running NDMS2 firmware. + +To use a Keenetic router in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: keenetic_ndms2 + host: !secret router_ip + username: !secret router_username + password: !secret router_password +``` + +Configuration variables: + +- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. +- **username** (*Required*): The username to login into the router (user should have read access to web interface of the router). +- **password** (*Required*): The password for the specified username. +- **interface** (*Optional*): Ihe internal name of the interface to get devices connected to. Default is 'Home'. For expert users only. + + +See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/images/supported_brands/keenetic.png b/source/images/supported_brands/keenetic.png new file mode 100644 index 0000000000000000000000000000000000000000..4a5b720018b46a9c6d6142ac1b2eb65ca91eebaf GIT binary patch literal 2915 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 Apa1{> literal 0 HcmV?d00001 From c8cdb9cb7062955be0645e10ace602fa41668084 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Sat, 16 Sep 2017 02:33:58 -0600 Subject: [PATCH 15/31] Documentation updates for AirVisual (#3370) --- source/_components/sensor.airvisual.markdown | 67 +++++++++++++++++--- 1 file changed, 58 insertions(+), 9 deletions(-) diff --git a/source/_components/sensor.airvisual.markdown b/source/_components/sensor.airvisual.markdown index 98686274dcd..69c69336d67 100644 --- a/source/_components/sensor.airvisual.markdown +++ b/source/_components/sensor.airvisual.markdown @@ -14,10 +14,11 @@ ha_iot_class: "Cloud Polling" --- The `airvisual` sensor platform queries the [AirVisual](https://airvisual.com/) API for air quality -data on the nearest city to a latitude and longitude. The resulting information -creates sensors for the Air Quality Index (AQI), the human-friendly air quality -level, and the main pollutant of that area. Sensors that conform to either/both -the [U.S. and Chinese air quality standards](http://www.clm.com/publication.cfm?ID=366) can be created. +data. Data can be collected via latitude/longitude or by city/state/country. +The resulting information creates sensors for the Air Quality Index (AQI), the +human-friendly air quality level, and the main pollutant of that area. Sensors +that conform to either/both the [U.S. and Chinese air quality standards](http://www.clm.com/publication.cfm?ID=366) can be +created. This platform requires an AirVisual API key, which can be obtained [here](https://airvisual.com/api). Note that the platform was designed using the "Community" package; the "Startup" @@ -29,10 +30,10 @@ The "Community" API key is limited to 10,000 calls per month. In order to leave a buffer, the `airvisual` platform queries the API every 10 minutes.

-## {% linkable_title Configuring the Platform %} +## {% linkable_title Configuring the Platform via Latitude/Longitude %} -To enable this platform, add the following lines to your `configuration.yaml` -file: +To enable the platform and gather data via latitude/longitude, add the +following lines to your `configuration.yaml` file: ```yaml sensor: @@ -52,12 +53,60 @@ Configuration variables: - **monitored_conditions** (*Required*): the air quality standard(s) to use (`us` for U.S., `cn` for Chinese) - **latitude** (*Optional*): the latitude to monitor; if excluded, the latitude -defined in `configuration.yaml` will be used +defined under the `homeassistant` key in `configuration.yaml` will be used - **longitude** (*Optional*): the longitude to monitor; if excluded, the longitude -defined in `configuration.yaml` will be used +defined under the `homeassistant` key in `configuration.yaml` will be used - **radius** (*Optional*): the radius (in meters) around the latitude/longitude to search for the nearest city; defaults to `1000` +## {% linkable_title Configuring the Platform via City/State/Country %} + +To enable the platform and gather data via city/state/country, add the +following lines to your `configuration.yaml` file: + +```yaml +sensor: + - platform: airvisual + api_key: abc123 + monitored_conditions: + - us + - cn + city: southend-on-sea + state: essex + country: uk +``` + +Configuration variables: + +- **api_key** (*Required*): your AirVisual API key +- **monitored_conditions** (*Required*): the air quality standard(s) to use +(`us` for U.S., `cn` for Chinese) +- **city** (*Optional*): the city to monitor +- **state** (*Optional*): the state/region to monitor +- **country** (*Optional*): the country to monitor + +To easily determine the proper values for a particular location, use the +[AirVisual region directory](https://airvisual.com/world). Once you browse to the particular city you want, +take note of the breadcrumb title, which is of the form +`country > state/region > city`. Use this information to fill out +`configuration.yaml`. + +For example, Sao Paulo, Brazil shows a breadcrumb title of +`Brazil > Sao Paulo > Sao Paulo` – thus, the proper configuration would look +like this: + +```yaml +sensor: + - platform: airvisual + api_key: abc123 + monitored_conditions: + - us + - cn + city: sao-paulo + state: sao-paulo + country: brazil +``` + ## {% linkable_title Sensor Types %} When configured, the platform will create three sensors for each configured From 0b98e91658248a05cca76b8d9a89427a1a1f04f2 Mon Sep 17 00:00:00 2001 From: Lupin Demid Date: Sun, 17 Sep 2017 16:05:50 +0300 Subject: [PATCH 16/31] Update Yandex TTS docs (#3385) * Update tts.yandextts.markdown Updated urls and fix quote in voice list * Update tts.yandextts.markdown add more links to api key * Update tts.yandextts.markdown --- source/_components/tts.yandextts.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/tts.yandextts.markdown b/source/_components/tts.yandextts.markdown index ce94c017729..772eb277f03 100644 --- a/source/_components/tts.yandextts.markdown +++ b/source/_components/tts.yandextts.markdown @@ -26,13 +26,13 @@ tts: Configuration variables: - **api_key** (*Required*): API Key for use this service. -- **language** (*Optional*): The language to use. Defaults to `en-us`. Supported `en-EN`, `ru-RU`, `uk-UK`, `tr-TR`. +- **language** (*Optional*): The language to use. Defaults to `en-US`. Supported `en-US`, `ru-RU`, `uk-UK`, `tr-TR`. - **codec** (*Optional*): Audo codec. Default is `mp3`. Supported us `mp3`, `wav`, `opus`. -- **voice** (*Optional*): Speaker voice. Default is `zahar`. Supported female voices are `jane`, `oksana`, `alyss`, 'omazh` and male voices are `zahar` and `ermil`. +- **voice** (*Optional*): Speaker voice. Default is `zahar`. Supported female voices are `jane`, `oksana`, `alyss`, `omazh` and male voices are `zahar` and `ermil`. - **emotion** (*Optional*): Speaker emotional intonation. Default is `neutral`. Also supported are `good` (freindly) and `evil` (angry) - **speed** (*Optional*): Speech speed. Default value is `1`. Highest speed is `3` and lowest `0,1` -See on api [documentation](https://tech.yandex.com/speechkit/cloud/doc/dg/concepts/speechkit-dg-tts-docpage/) for details. N.B. english version of documentation is outdated. So you could receive api key [here](https://developer.tech.yandex.ru/) +See on api [documentation](https://tech.yandex.com/speechkit/cloud/doc/guide/concepts/tts-http-request-docpage/) for details. N.B. english version of documentation is outdated. So you could request api key [here](https://tech.yandex.com/speechkit/cloud/) by email or [here](https://developer.tech.yandex.ru/) by web A full configuration sample: From d9ae25980da01e92f1e377436625382f2db37296 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Sep 2017 15:16:18 +0200 Subject: [PATCH 17/31] Minor change --- source/_components/tts.yandextts.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/tts.yandextts.markdown b/source/_components/tts.yandextts.markdown index 772eb277f03..66f64186750 100644 --- a/source/_components/tts.yandextts.markdown +++ b/source/_components/tts.yandextts.markdown @@ -32,7 +32,7 @@ Configuration variables: - **emotion** (*Optional*): Speaker emotional intonation. Default is `neutral`. Also supported are `good` (freindly) and `evil` (angry) - **speed** (*Optional*): Speech speed. Default value is `1`. Highest speed is `3` and lowest `0,1` -See on api [documentation](https://tech.yandex.com/speechkit/cloud/doc/guide/concepts/tts-http-request-docpage/) for details. N.B. english version of documentation is outdated. So you could request api key [here](https://tech.yandex.com/speechkit/cloud/) by email or [here](https://developer.tech.yandex.ru/) by web +Please check the [API documentation](https://tech.yandex.com/speechkit/cloud/doc/guide/concepts/tts-http-request-docpage/) for details. It seems that the English version of documentation is outdated. You could request an API key [by email](https://tech.yandex.com/speechkit/cloud/) or [online](https://developer.tech.yandex.ru/). A full configuration sample: From 8c159ed440a948ed45e1b9559ff280c6c0c97774 Mon Sep 17 00:00:00 2001 From: Andy Castille Date: Mon, 18 Sep 2017 00:26:43 -0500 Subject: [PATCH 18/31] DoorBird (#3147) * Add documentation for DoorBird components * Update release to 0.52 * Update example configurations * Update doorbird.markdown * Update DoorBird release from 0.52 to 0.54 --- .../binary_sensor.doorbird.markdown | 28 ++++++++++++++ source/_components/camera.doorbird.markdown | 32 ++++++++++++++++ source/_components/doorbird.markdown | 32 ++++++++++++++++ source/_components/switch.doorbird.markdown | 35 ++++++++++++++++++ source/images/supported_brands/doorbird.png | Bin 0 -> 23637 bytes 5 files changed, 127 insertions(+) create mode 100644 source/_components/binary_sensor.doorbird.markdown create mode 100644 source/_components/camera.doorbird.markdown create mode 100644 source/_components/doorbird.markdown create mode 100644 source/_components/switch.doorbird.markdown create mode 100644 source/images/supported_brands/doorbird.png diff --git a/source/_components/binary_sensor.doorbird.markdown b/source/_components/binary_sensor.doorbird.markdown new file mode 100644 index 00000000000..b16dc68c5e9 --- /dev/null +++ b/source/_components/binary_sensor.doorbird.markdown @@ -0,0 +1,28 @@ +--- +layout: page +title: "DoorBird Binary Sensor" +description: "Instructions how to integrate DoorBird video doorbell state into Home Assistant." +date: 2017-08-06 11:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: doorbird.png +ha_category: Binary Sensor +ha_release: "0.54" +ha_iot_class: "Local Polling" +--- + +The `doorbird` binary sensor platform allows Home Assistant to monitor when your [DoorBird](http://www.doorbird.com/) doorbell rings. + +

+ You must have the [DoorBird component](/components/doorbird/) configured to use this binary sensor. +

+ +To enable the binary sensor, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: doorbird +``` diff --git a/source/_components/camera.doorbird.markdown b/source/_components/camera.doorbird.markdown new file mode 100644 index 00000000000..55fcb419f8c --- /dev/null +++ b/source/_components/camera.doorbird.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "DoorBird Camera" +description: "Instructions how to integrate DoorBird video doorbell images into Home Assistant." +date: 2017-08-06 11:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: doorbird.png +ha_category: Camera +ha_release: "0.54" +ha_iot_class: "Local Polling" +--- + +The `doorbird` implementation allows you to view the live video and saved images from your [DoorBird](http://www.doorbird.com/) device in Home Assistant. + +

+ You must have the [DoorBird component](/components/doorbird/) configured to use this camera. +

+ +To enable the camera, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +camera: + - platform: doorbird +``` + +Configuration variables: + +- **last_visitor** (*Optional*): Adds a second camera that shows the last picture taken when someone rang the doorbell. Default is `false`. diff --git a/source/_components/doorbird.markdown b/source/_components/doorbird.markdown new file mode 100644 index 00000000000..0b7f1e4120a --- /dev/null +++ b/source/_components/doorbird.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "DoorBird" +description: "Instructions on how to integrate your DoorBird video doorbell with Home Assistant." +date: 2017-08-06 11:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: doorbird.png +ha_category: Hub +ha_release: "0.54" +ha_iot_class: "Local Polling" +--- + +The `doorbird` implementation allows you to integrate your [DoorBird](http://www.doorbird.com/) device in Home Assistant. + +To connect your device, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +doorbird: + host: IP_OR_HOSTNAME + username: abcdef0001 + password: xxxxxxxxxx +``` + +Configuration variables: + +- **host** (*Required*): The LAN IP address or hostname of your device. You can find this by going to the [DoorBird Online check](http://www.doorbird.com/checkonline) and entering the information from the paper that was included in the box. +- **username** (*Required*): The username of a non-administrator user account on the device. +- **password** (*Required*): The password for the user specified. diff --git a/source/_components/switch.doorbird.markdown b/source/_components/switch.doorbird.markdown new file mode 100644 index 00000000000..fc2497f9179 --- /dev/null +++ b/source/_components/switch.doorbird.markdown @@ -0,0 +1,35 @@ +--- +layout: page +title: "DoorBird Switch" +description: "Instructions how to integrate DoorBird video doorbell relays into Home Assistant." +date: 2017-08-06 11:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: doorbird.png +ha_category: Switch +ha_release: "0.54" +ha_iot_class: "Local Push" +--- + +The `doorbird` switch platform allows you to power relays in your [DoorBird](http://www.doorbird.com/) video doorbell device. + +

+ You must have the [DoorBird component](/components/doorbird/) configured to use this switch. +

+ +To enable this switch, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: doorbird + switches: + - light_on + - open_door +``` + +Configuration variables: + +- **switches** (*Required*): A list of switches to include. Possible entries are `light_on` for control of the IR array and `open_door` for control of an electronic door strike or alarm. diff --git a/source/images/supported_brands/doorbird.png b/source/images/supported_brands/doorbird.png new file mode 100644 index 0000000000000000000000000000000000000000..64078a710b818eba521768a0f1c1ff61e355f385 GIT binary patch literal 23637 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

%W%zVUF5g% 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 MZ>CqP^E~eV02*vk)c^nh literal 0 HcmV?d00001 From 4d43b63d7651102b90e52e68c1bd23ce3bb7271a Mon Sep 17 00:00:00 2001 From: Mister Wil <1091741+MisterWil@users.noreply.github.com> Date: Mon, 18 Sep 2017 12:59:37 -0700 Subject: [PATCH 19/31] Abode services, events, lights, cameras, automations, quick actions. (#3315) * Added services, events, and camera. * Finished adding new documentation. --- source/_components/abode.markdown | 85 +++++++++++++++++-- .../_components/binary_sensor.abode.markdown | 4 +- source/_components/camera.abode.markdown | 20 +++++ source/_components/light.abode.markdown | 20 +++++ source/_components/switch.abode.markdown | 4 +- 5 files changed, 123 insertions(+), 10 deletions(-) create mode 100644 source/_components/camera.abode.markdown create mode 100644 source/_components/light.abode.markdown diff --git a/source/_components/abode.markdown b/source/_components/abode.markdown index 092ca11cdc7..fc5d5d9beea 100644 --- a/source/_components/abode.markdown +++ b/source/_components/abode.markdown @@ -19,22 +19,91 @@ Please visit the [Abode website](https://goabode.com/) for further information a There is currently support for the following device types within Home Assistant: -- [Alarm Control Panel](/components/alarm_control_panel.abode/): Reports on current alarm status and can be used to arm/disarm the system -- [Binary Sensor](/components/binary_sensor.abode/): Reports on `Door Contacts` (open or closed), `Motion Camera` (motion detected or not), `Water Sensors` (detected or not), `Keypad` (online or not), `Glass Break` (online or not), `Status Display` (online or not) -- [Cover](/components/cover.abode/): Reports on `Secure Barriers` (open or closed) and can be used to open/close the cover -- [Lock](/components/cover.abode/): Reports on `Door Locks` (locked or unlocked) and can be used to lock/unlock the door -- [Switch](/components/switch.abode/): Reports on `Power Switch Sensors` (on or off) and can be used to turn the power switch sensor on/off +- [Alarm Control Panel](/components/alarm_control_panel.abode/): Reports on the current alarm status and can be used to arm and disarm the system. +- [Binary Sensor](/components/binary_sensor.abode/): Reports on `Quick Actions`, `Door Contacts`, `Connectivity` sensors (remotes, keypads, and status indicators), `Moisture` sensors, and `Motion` or `Occupancy` sensors. +- [Camera](/components/camera.abode/): Reports on `Camera` devices and will download and show the latest captured still image. +- [Cover](/components/cover.abode/): Reports on `Secure Barriers` and can be used to open and close the cover. +- [Lock](/components/cover.abode/): Reports on `Door Locks` and can be used to lock and unlock the door. +- [Light](/components/light.abode/): Reports on `Dimmer` lights and can be used to dim, change color, or turn the light on and off. +- [Switch](/components/switch.abode/): Reports on `Power Switch` devices and can be used to turn the power switch on and off. Also reports on `Automations` set up in the Abode system and allows you to activate or deactivate them. -An `abode` section must be present in the `configuration.yaml` file and contain the following options as required: +## {% linkable_title Configuration %} + +To use Abode devices in your installation, add the following `abode` section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry abode: username: abode_username password: abode_password + name: Abode Alarm System + polling: False + exclude: + - 'ZW:0000000034' + - 'RF:00000011' + lights: + - 'ZW:0000000022' ``` Configuration variables: -- **username** (*Required*): Username for the Abode account. -- **password** (*Required*): Password for Abode account. +- **username** (*Required*): Username for your Abode account. +- **password** (*Required*): Password for your Abode account. +- **name** (*Optional*): The name for your alarm controller. +- **polling** (*Optional*): Enable polling if cloud push updating is less reliable. Will update the devices once every 30 seconds. Defaults to False. +- **exclude** (*Optional*): A list of devices to exclude from Home Assistant by their Abode `device_id`, found within the component attributes. +- **lights** (*Optional*): A list of switch devices that Home Assistant should treat as lights by the switches Abode `device_id`, found within the component attributes. + +## {% linkable_title Events %} + +There are a number of events that can be triggered from Abode. They are grouped into the below events: + +- **abode_alarm**: Fired when an alarm event is triggered from Abode. This includes Smoke, CO, Panic, and Burglar alarms. +- **abode_alarm_end**: Fired when an alarm end event is triggered from Abode. +- **abode_automation**: Fired when an Automation is triggered from Abode. +- **abode_panel_fault**: Fired when there is a fault with the Abode hub. This includes events like loss of power, low battery, tamper switches, polling failures, and signal interference. +- **abode_panel_restore**: Fired when the panel fault is restored. + +All events have the fields: + +Field | Description +----- | ----------- +`device_id` | The Abode device ID of the event. +`device_name` | The Abode device name of the event. +`device_type` | The Abode device type of the event. +`event_code` | The event code of the event. +`event_name` | The name of the event. +`event_type` | The type of the event. +`event_utc` | The UTC timestamp of the event. +`user_name` | The Abode user that triggered the event, if applicable. +`date` | The date of the event in the format `MM/DD/YYYY`. +`time` | The time of the event in the format `HH:MM AM`. + +There is a unique list of known event_codes that can be found [here](https://github.com/MisterWil/abodepy/files/1262019/timeline_events.txt). + +## {% linkable_title Services %} + +### {% linkable_title Service `change_setting` %} + +Change settings on your Abode system. For a full list of settings and valid values, consult the [AbodePy settings section](https://github.com/MisterWil/abodepy/blob/master/README.rst#settings). + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `setting` | No | The setting you wish to change. +| `value` | No | The value you wish to change the setting to. + +### {% linkable_title Service `capture_image` %} + +Request a new still image from your Abode IR camera. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | No | String or list of strings that point at `entity_id`s of Abode cameras. + +### {% linkable_title Service `trigger_quick_action` %} + +Trigger a quick action automation on your Abode system. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | No | String or list of strings that point at `entity_id`s of binary_sensors that represent your Abode quick actions. \ No newline at end of file diff --git a/source/_components/binary_sensor.abode.markdown b/source/_components/binary_sensor.abode.markdown index ba50026fb1c..14e8e14533a 100644 --- a/source/_components/binary_sensor.abode.markdown +++ b/source/_components/binary_sensor.abode.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Cloud Push" The `abode` security control panel platform allows you to control your [Abode](https://goabode.com/) alarms. -This component will automatically add `Door Contact`, `Motion Camera`, `Water Sensor`, `Keypad`, `Glass Break`, and `Status Display` binary sensors that are configured in your Abode account. +This component will add `Door Contacts`, `Connectivity` sensors (remotes, keypads, and status indicators), `Moisture` sensors, and `Motion` or `Occupancy` sensors. + +This component will also list all Abode `Quick Actions` that are set up. You can trigger these quick actions by passing the `entity_id` of your quick action binary sensor to the [trigger_quick_action service](/components/abode/#trigger_quick_action). The requirement is that you have setup your [Abode hub](/components/abode/). diff --git a/source/_components/camera.abode.markdown b/source/_components/camera.abode.markdown new file mode 100644 index 00000000000..9a08123e1a3 --- /dev/null +++ b/source/_components/camera.abode.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Abode Camera" +description: "Instructions how to integrate Abode cameras into Home Assistant." +date: 2017-08-26 13:28 +sidebar: true +comments: false +sharing: true +footer: true +logo: abode.jpg +ha_release: 0.52 +ha_category: Camera +ha_iot_class: "Cloud Push" +--- + +The `abode` security control panel platform allows you to control your [Abode](https://goabode.com/) alarms. + +This component will automatically add `Cameras` configured in your Abode account. You can request a new still image capture by passing the `entity_id` of your cameras to the [capture_image service](/components/abode/#capture_image). + +The requirement is that you have setup your [Abode hub](/components/abode/). diff --git a/source/_components/light.abode.markdown b/source/_components/light.abode.markdown new file mode 100644 index 00000000000..16ff896d84e --- /dev/null +++ b/source/_components/light.abode.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Abode Light" +description: "Instructions how to integrate Abode lights into Home Assistant." +date: 2017-08-26 13:28 +sidebar: true +comments: false +sharing: true +footer: true +logo: abode.jpg +ha_release: 0.52 +ha_category: Cover +ha_iot_class: "Cloud Push" +--- + +The `abode` security control panel platform allows you to control your [Abode](https://goabode.com/) alarms. + +This component will automatically add `Lights` configured in your Abode account. You can reclassify `Switches` to show up within Home Assistant as lights by listing the Abode device ID in your [configuration](/components/abode/#configuration). + +The requirement is that you have setup your [Abode hub](/components/abode/). diff --git a/source/_components/switch.abode.markdown b/source/_components/switch.abode.markdown index d0fd60e809e..8979b0e2866 100644 --- a/source/_components/switch.abode.markdown +++ b/source/_components/switch.abode.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Cloud Push" The `abode` security control panel platform allows you to control your [Abode](https://goabode.com/) alarms. -This component will automatically add `Power Switch Sensors` configured in your Abode account. +This component will automatically add `Power Switches` configured in your Abode account. You can reclassify switches to show up within Home Assistant as `Lights` by listing the Abode device ID in your [configuration](/components/abode/#configuration). + +This component will also list all Abode `Automations` that are set up within the Abode system, allowing you to activate and deactivate the automations. The requirement is that you have setup your [Abode hub](/components/abode/). From e189ff1ef6b57c151b6ecd0eacabcd679d54b344 Mon Sep 17 00:00:00 2001 From: Kane610 Date: Tue, 19 Sep 2017 16:30:37 +0200 Subject: [PATCH 20/31] How to configure custom HTTP port for Axis devices (#3307) --- source/_components/axis.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/axis.markdown b/source/_components/axis.markdown index a312625a730..77e5aeb940d 100644 --- a/source/_components/axis.markdown +++ b/source/_components/axis.markdown @@ -57,6 +57,7 @@ Configuration variables: - **username** (*Optional*): The username to your Axis device. Default 'root'. - **password** (*Optional*): The password to your Axis device. Default 'pass'. - **trigger_time** (*Optional*): Minimum time (in seconds) a sensor should keep its positive value. Default 0. +- **http_port** (*Optional*): Configure port web server of device is accessible from. Default 80. - **location** (*Optional*): Physical location of your Axis device. Default not set. - **include** (*Required*): This cannot be empty else there would be no use adding the device at all. - **camera**: Stream MJPEG video to Home Assistant. From fe8a5878ef0b1b6bacaa9b7b183220f5893311d7 Mon Sep 17 00:00:00 2001 From: Tor Magnus Date: Tue, 19 Sep 2017 16:37:43 +0200 Subject: [PATCH 21/31] Update manual to reflect change in module (#3372) --- source/_components/sensor.onewire.markdown | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/source/_components/sensor.onewire.markdown b/source/_components/sensor.onewire.markdown index 038bbb6c075..4ec2ca7565e 100644 --- a/source/_components/sensor.onewire.markdown +++ b/source/_components/sensor.onewire.markdown @@ -2,7 +2,7 @@ layout: page title: "One wire Sensor" description: "Instructions how to integrate One wire (1-wire) sensors into Home Assistant." -date: 2016-01-17 07:15 +date: 2017-09-15 10:10 sidebar: true comments: false sharing: true @@ -22,9 +22,25 @@ Supported devices: - [DS1822](https://datasheets.maximintegrated.com/en/ds/DS1822.pdf) - [DS1825](https://datasheets.maximintegrated.com/en/ds/DS1825.pdf) - [DS28EA00](https://datasheets.maximintegrated.com/en/ds/DS28EA00.pdf) temperature sensors +- [DS2406/TAI-8570] (https://datasheets.maximintegrated.com/en/ds/DS2406.pdf) Temperature and pressure sensor made by AAG +- [DS2438/B1-R1-A] (https://datasheets.maximintegrated.com/en/ds/DS2438.pdf) Temperature, pressure and humidity sensor by AAG The 1-Wire bus can be connected directly to the IO pins of Raspberry Pi or using dedicated interface adapter (e.g [DS9490R](https://datasheets.maximintegrated.com/en/ds/DS9490-DS9490R.pdf)). When an interface adapter is used, sensors can be accessed on Linux hosts via [owfs 1-Wire file system](http://owfs.org/). When using an interface adapter and the owfs, the 'mount_dir' option must be configured to correspond a directory, where owfs device tree has been mounted. If you are using Raspberry Pi and IO pin connected bus setup, don't use the 'mount_dir' option. +

+This component has been modified to work with devices with multiple sensors which will cause a discontinuity in recorded values. Existing devices will receive a new ID and therefore show up as new devices. +If you wish to maintain continuity it can be resolved in the database by renaming the old devices to the new names. + +Connect to your database using the instructions from https://home-assistant.io/docs/backend/database/ +Check the names of sensors: +SELECT entity_id, COUNT(*) as count FROM states GROUP BY entity_id ORDER BY count DESC LIMIT 10; +Alter the names of sensors using the following examples: +UPDATE states SET entity_id='sensor._temperature' WHERE entity_id LIKE 'sensor.%' AND attributes LIKE '%\u00b0C%'; +UPDATE states SET entity_id='sensor._pressure' WHERE entity_id LIKE 'sensor.%' AND attributes LIKE '%mb%'; +UPDATE states SET entity_id='sensor._humidity' WHERE entity_id LIKE 'sensor.%' AND attributes LIKE '%%%' ESCAPE ''; +Remember to replace with the actual name of the sensor as seen in the SELECT query. +

+ To enable One wire sensors in your installation, add the following to your `configuration.yaml` file: ```yaml From 2270f929e54e32bb1cfcad7eff395a13e86185aa Mon Sep 17 00:00:00 2001 From: Garret Heaton Date: Tue, 19 Sep 2017 07:40:13 -0700 Subject: [PATCH 22/31] Note that Netgear Orbi uses port 80 for its API (#3364) --- source/_components/device_tracker.netgear.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/device_tracker.netgear.markdown b/source/_components/device_tracker.netgear.markdown index 351e001b2ea..eda955e0342 100644 --- a/source/_components/device_tracker.netgear.markdown +++ b/source/_components/device_tracker.netgear.markdown @@ -36,5 +36,6 @@ Configuration variables: List of models that are known to use port 80: - Nighthawk X4S - AC2600 (R7800) +- Orbi See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. From 7cd587a1df5ab54e32827948a3691dffd51b7507 Mon Sep 17 00:00:00 2001 From: Andrew Cockburn Date: Tue, 19 Sep 2017 11:54:13 -0400 Subject: [PATCH 23/31] Update appdaemon.markdown --- source/_docs/ecosystem/appdaemon.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/appdaemon.markdown b/source/_docs/ecosystem/appdaemon.markdown index a0aa90daf57..cfa7ddc50d6 100755 --- a/source/_docs/ecosystem/appdaemon.markdown +++ b/source/_docs/ecosystem/appdaemon.markdown @@ -35,7 +35,7 @@ The best way to show what AppDaemon does is through a few simple examples. Let's start with a simple App to turn a light on every night at sunset and off every morning at sunrise. Every App when first started will have its `initialize()` function called, which gives it a chance to register a callback for AppDaemons's scheduler for a specific time. In this case, we are using `run_at_sunrise()` and `run_at_sunset()` to register two separate callbacks. The argument `0` is the number of seconds offset from sunrise or sunset and can be negative or positive. For complex intervals, it can be convenient to use Python's `datetime.timedelta` class for calculations. When sunrise or sunset occurs, the appropriate callback function, `sunrise_cb()` or `sunset_cb()`, is called, which then makes a call to Home Assistant to turn the porch light on or off by activating a scene. The variables `args["on_scene"]` and `args["off_scene"]` are passed through from the configuration of this particular App, and the same code could be reused to activate completely different scenes in a different version of the App. ```python -import homeassistant.appapi as appapi +import appdaemon.appapi as appapi class OutsideLights(appapi.AppDaemon): From 0e6a9fbbae6844e9d3fd58be25cff843d2068875 Mon Sep 17 00:00:00 2001 From: Andrew Cockburn Date: Tue, 19 Sep 2017 11:55:06 -0400 Subject: [PATCH 24/31] Update tutorial.markdown --- source/_docs/ecosystem/appdaemon/tutorial.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/appdaemon/tutorial.markdown b/source/_docs/ecosystem/appdaemon/tutorial.markdown index 18f25c5b1b6..8ce668ec7c5 100755 --- a/source/_docs/ecosystem/appdaemon/tutorial.markdown +++ b/source/_docs/ecosystem/appdaemon/tutorial.markdown @@ -69,7 +69,7 @@ This is also fairly easy to achieve with Home Assistant automations, but we are Our next example is to turn on a light when motion is detected and it is dark, and turn it off after a period of time. This time, the `initialize()` function registers a callback on a state change (of the motion sensor) rather than a specific time. We tell AppDaemon that we are only interested in state changesd where the motion detector comes on by adding an additional parameter to the callback registration - `new = "on"`. When the motion is detected, the callack function `motion()` is called, and we check whether or not the sun has set using a built-in convenience function: `sun_down()`. Next, we turn the light on with `turn_on()`, then set a timer using `run_in()` to turn the light off after 60 seconds, which is another call to the scheduler to execute in a set time from now, which results in `AppDaemon` calling `light_off()` 60 seconds later using the `turn_off()` call to actually turn the light off. This is still pretty simple in code terms: ```python -import homeassistant.appapi as appapi +import appdaemon.appapi as appapi class FlashyMotionLights(appapi.AppDaemon): From 6ad0942d10fda61173b170758b90766410a0e3f8 Mon Sep 17 00:00:00 2001 From: Mister Wil <1091741+MisterWil@users.noreply.github.com> Date: Tue, 19 Sep 2017 08:59:33 -0700 Subject: [PATCH 25/31] Corrected Abode Camera and Light release versions (#3405) --- source/_components/camera.abode.markdown | 2 +- source/_components/light.abode.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/camera.abode.markdown b/source/_components/camera.abode.markdown index 9a08123e1a3..a95b6d2fcfb 100644 --- a/source/_components/camera.abode.markdown +++ b/source/_components/camera.abode.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: abode.jpg -ha_release: 0.52 +ha_release: 0.54 ha_category: Camera ha_iot_class: "Cloud Push" --- diff --git a/source/_components/light.abode.markdown b/source/_components/light.abode.markdown index 16ff896d84e..88e1ca7e1b1 100644 --- a/source/_components/light.abode.markdown +++ b/source/_components/light.abode.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: abode.jpg -ha_release: 0.52 +ha_release: 0.54 ha_category: Cover ha_iot_class: "Cloud Push" --- From 12a456ee00dfff190d2d2b9aebc2aa1dc197cef4 Mon Sep 17 00:00:00 2001 From: c-soft Date: Fri, 22 Sep 2017 06:36:36 +0200 Subject: [PATCH 26/31] Added first version of docs for Satel Integra alarm (#3328) * Added first version of docs for Satel Integra alarm * Update alarm_control_panel.satel_integra.markdown * Update binary_sensor.satel_integra.markdown * Update satel_integra.markdown --- ...alarm_control_panel.satel_integra.markdown | 20 +++++ .../binary_sensor.satel_integra.markdown | 20 +++++ source/_components/satel_integra.markdown | 79 ++++++++++++++++++ source/images/supported_brands/satel.jpg | Bin 0 -> 26817 bytes 4 files changed, 119 insertions(+) create mode 100644 source/_components/alarm_control_panel.satel_integra.markdown create mode 100644 source/_components/binary_sensor.satel_integra.markdown create mode 100644 source/_components/satel_integra.markdown create mode 100644 source/images/supported_brands/satel.jpg diff --git a/source/_components/alarm_control_panel.satel_integra.markdown b/source/_components/alarm_control_panel.satel_integra.markdown new file mode 100644 index 00000000000..77752ae7d0b --- /dev/null +++ b/source/_components/alarm_control_panel.satel_integra.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Satel Integra Alarm Control Panel" +description: "Instructions how to setup the Satel Integra control panel within Home Assistant." +date: 2017-09-07 13:28 +sidebar: true +comments: false +sharing: true +footer: true +logo: satel.jpg +ha_category: Alarm +ha_release: 0.54 +ha_iot_class: "Local Push" +--- + + +The `satel_integra` alarm control panel platform allows you to control your [SatelIntegra](http://www.satel.pl/en/) alarms. + +The requirement is that you have setup your [SatelIntegra hub](/components/satel_integra/). + diff --git a/source/_components/binary_sensor.satel_integra.markdown b/source/_components/binary_sensor.satel_integra.markdown new file mode 100644 index 00000000000..84744aaa9e2 --- /dev/null +++ b/source/_components/binary_sensor.satel_integra.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Satel Integra Binary Sensor" +description: "Instructions how to integrate Satel Integra binary sensors into Home Assistant." +date: 2017-09-07 13:28 +sidebar: true +comments: false +sharing: true +footer: true +logo: satel.jpg +ha_category: Binary Sensor +ha_release: 0.54 +ha_iot_class: "Local Push" +--- + +The `satel_integra` binary sensor allows you to monitor your [SatelIntegra](http://www.satel.pl/en/) alarm zones (inputs). + +Check the [type/class](/components/binary_sensor/) list for a possible visualization of your zone. + +The requirement is that you have setup your [SatelIntegra hub](/components/satel_integra/). diff --git a/source/_components/satel_integra.markdown b/source/_components/satel_integra.markdown new file mode 100644 index 00000000000..7953b1695c5 --- /dev/null +++ b/source/_components/satel_integra.markdown @@ -0,0 +1,79 @@ +--- +layout: page +title: "Satel Integra Alarm" +description: "Instructions on how to integrate a Satel Integra alarm panel with Home Assistant using an ETHM network extension from Satel." +date: 2017-09-07 13:28 +sidebar: true +comments: false +sharing: true +footer: true +logo: satel.jpg +ha_category: Hub +ha_release: 0.54 +ha_iot_class: "Local Push" +--- + +The `satel_integra` component will allow Home Assistant users who own a Satel Integra alarm panel to leverage their alarm system and its sensors to provide Home Assistant with information about their homes. Connectivity between Home Assistant and the alarm is accomplished through a ETHM extension module that must be installed in the alarm. + +There is currently support for the following device types within Home Assistant: + +- [Binary Sensor](/components/binary_sensor.satel_integra/): Reports on zone statuses +- [Alarm Control Panel](/components/alarm_control_panel.satel_integra/): Reports on alarm status, and can be used to arm/disarm the system + +The module communicates via Satel's open TCP protocol published on their website. It subscribes for new events coming from alarm system and reacts to them immediately. + +**IMPORTANT:** The library currently doesn't support encrypted connection to your alarm, so you need **to turn off encryption for integration protocol**. In Polish: "koduj integracje" must be unchecked. You will find this setting in your DLOADX program. + +A `satel_integra` section must be present in the `configuration.yaml` file and contain the following options as required: + +```yaml +# Example configuration.yaml entry +satel_integra: + host: 192.168.1.100 + port: 7094 + partition: 1 + arm_home_mode: 1 + + zones: + 01: + name: 'Bedroom' + type: 'motion' + 02: + name: 'Hall' + type: 'motion' + 30: + name: 'Kitchen - smoke' + type: 'smoke' + 113: + name: 'Entry door' + type: 'opening' + +``` + +Configuration variables: + +- **host** (*Required*): The IP address of the Satel Integra ETHM module on your home network, if using socket type. Default: `localhost` +- **port** (*Optional*): The port on which the ETHM module listens for clients using integration protocol. Default: `7094` +- **partition** (*Optional*): The partition to operate on. Integra can support multiple partitions, this platform only supports one. Default: `1` +- **arm_home_mode** (*Optional*): The mode in which arm Satel Integra when 'arm home' is used. Possible options are `1`,`2` or `3`, default being `1`. For more information on what are the differences between them, please refer to Satel Integra manual. +- **zones** (*Optional*): This module does not discover currently which zones are actually in use, so it will only monitor the ones defined in the config. For each zone, a proper ID mus be given as well as it's name (does not need to match the one specified in Satel Integra alarm). For more information on the available zone types, take a look at the [Binary Sensor](/components/binary_sensor.alarmdecoder/) docs. *Note: If no zones are specified, Home Assistant will not load any binary_sensor components.* + +List of all zone IDs can be taken from DloadX program. + +Having configured the zones, you can use them for automation, such as to react on the movement in your bedroom. +For example: + +```yaml + alias: Flick the input switch when movement in bedroom detected + trigger: + platform: state + entity_id: 'binary_sensor.bedroom' + to: 'on' + action: + service: input_boolean.turn_on + data: + entity_id: input_boolean.movement_detected + +``` + +Enjoy! diff --git a/source/images/supported_brands/satel.jpg b/source/images/supported_brands/satel.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c47cdcc0e9ce49dff78bd1fe2acd836590f65be GIT binary patch literal 26817 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 Q_ZLAlE?-kCP_+#HABU@4F8}}l literal 0 HcmV?d00001 From 3a69a04bd844992fc45108b078c2fa5ae11372c9 Mon Sep 17 00:00:00 2001 From: nilzen Date: Fri, 22 Sep 2017 06:37:11 +0200 Subject: [PATCH 27/31] Sensor Worx Landroid (#3362) * Sensor Worx Landroid * Fix spelling * Rename to match module name * Use new component name --- .../_components/sensor.worxlandroid.markdown | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 source/_components/sensor.worxlandroid.markdown diff --git a/source/_components/sensor.worxlandroid.markdown b/source/_components/sensor.worxlandroid.markdown new file mode 100644 index 00000000000..98b699b9ab8 --- /dev/null +++ b/source/_components/sensor.worxlandroid.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Worx Landroid" +description: "Instructions how to integrate Worx Landroid WG796E.1 or WG797E as sensors within Home Assistant." +date: 2017-09-12 13:23 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: DIY +ha_release: 0.54 +logo: home-assistant.png +ha_iot_class: "Local Polling" +--- + +The `worxlandroid` sensor platform allows you to get the current state, battery level and error status Worx Landroid WG796E.1 or WG797E. + +To use your Worx Landroid mower in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: worxlandroid + host: 192.168.0.10 + pin: 1234 +``` + +Configuration variables: + +- **host** (*Required*): The ip address or host name of the mower. +- **pin** (*Required*): The pin code for the mower. +- **allow_unreachable** (*Optional*): This will allow the mower to be outside of wifi range without raising an error (default: True). From 1c43059f4d4bac991fd4c8e65ad93c7625af97f8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 22 Sep 2017 06:38:14 +0200 Subject: [PATCH 28/31] Add config var and update details (#3241) * Add config var and update details * Add API requests limit --- .../_components/sensor.swiss_public_transport.markdown | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/_components/sensor.swiss_public_transport.markdown b/source/_components/sensor.swiss_public_transport.markdown index d352afc0006..bb4a265bc3a 100644 --- a/source/_components/sensor.swiss_public_transport.markdown +++ b/source/_components/sensor.swiss_public_transport.markdown @@ -14,13 +14,13 @@ ha_release: pre 0.7 --- -The `swiss_public_transport` sensor will give you the next two departure times from a given location to another one in Switzerland. +The `swiss_public_transport` sensor will give you the next three departure times from a given location to another one in Switzerland. -The [Stationboard](http://transport.opendata.ch/examples/stationboard.html) website can help to determine the exact name of the start and the end station. With the station names it's necessary to search for the ID of those stations: +The [Swiss public transport API](http://transport.opendata.ch/) only allows 1000 requests per 24 hours. -http://transport.opendata.ch/v1/locations?query=[Station name] +The [Stationboard](http://transport.opendata.ch/examples/stationboard.html) website can help to determine the exact name of the start and the end station. -If the score is 100 ("score":"100" in the response), it is a perfect match. Then add the data to your `configuration.yaml` file as shown in the example: +Then add the data to your `configuration.yaml` file as shown in the example: ```yaml # Example configuration.yaml entry @@ -34,5 +34,6 @@ Configuration variables: - **from** (*Required*): The ID of the station of the start station. - **to** (*Required*): The ID of the station of the end station. +- **name** (*Optional*): The name of the sensor. Defaults to 'Next Departure'. The public timetables are coming from [Swiss public transport](http://transport.opendata.ch). From 28b5ca9b5e538d357de0cfa79c9df6df6c88c9bc Mon Sep 17 00:00:00 2001 From: John Boiles Date: Thu, 21 Sep 2017 21:39:06 -0700 Subject: [PATCH 29/31] MQTT Vacuum docs (#3354) * MQTT Vacuum docs * Add logo for MQTT Vacuum * PR fixes * Change the state handling to a set of customizable bools * Add info about an example protocol * RIP Defaults --- source/_components/vacuum.mqtt.markdown | 137 ++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 source/_components/vacuum.mqtt.markdown diff --git a/source/_components/vacuum.mqtt.markdown b/source/_components/vacuum.mqtt.markdown new file mode 100644 index 00000000000..c8b45ff6119 --- /dev/null +++ b/source/_components/vacuum.mqtt.markdown @@ -0,0 +1,137 @@ +--- +layout: page +title: "MQTT" +description: "Instructions how to integrate your MQTT enabled Vacuum within Home Assistant." +date: 2017-09-11 20:26 +sidebar: true +comments: false +sharing: true +footer: true +logo: mqtt.png +ha_category: Vacuum +ha_release: 0.54 +--- + +The `mqtt` component allows you to control your MQTT-enabled vacuum. + +To add your MQTT vacuum to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +vacuum: + - platform: mqtt + name: "MQTT Vacuum" + supported_features: + - turn_on + - turn_off + - pause + - stop + - return_home + - battery + - status + - locate + - clean_spot + - fan_speed + - send_command + command_topic: "vacuum/command" + battery_level_topic: "vacuum/state" + battery_level_template: "{{ value_json.battery_level }}" + charging_topic: "vacuum/state" + charging_template: "{{ value_json.charging }}" + cleaning_topic: "vacuum/state" + cleaning_template: "{{ value_json.cleaning }}" + docked_topic: "vacuum/state" + docked_template: "{{ value_json.docked }}" + fan_speed_topic: "vacuum/state" + fan_speed_template: "{{ value_json.fan_speed }}" + set_fan_speed_topic: "vacuum/set_fan_speed" + fan_speed_list: + - min + - medium + - high + - max + send_command_topic: 'vacuum/send_command' +``` + +Basic Configuration variables: + +- **name** (*Optional*): The name of the vacuum. Defaults to `MQTT Vacuum`. +- **supported_features** (*Optional*): List of features that the vacuum supports (possible values are `turn_on`, `turn_off`, `pause`, `stop`, `return_home`, `battery`, `status`, `locate`, `clean_spot`, `fan_speed`, `send_command`). Defaults to `turn_on`, `turn_off`, `stop`, `return_home`, `status`, `battery`, `clean_spot`. +- **command_topic** (*Optional*): The MQTT topic to publish commands to control the vacuum. + +Advanced Configuration variables: + +- **qos** (*Optional*): The maximum QoS level of the state topic. Defaults to `0`. Will also be used when publishing messages. +- **retain** (*Optional*): If the published message should have the retain flag on or not. Defaults to `false`. +- **payload_turn_on** (*Optional*): The payload to send to the `command_topic` to begin the cleaning cycle. Defaults to `turn_on`. +- **payload_turn_off** (*Optional*): The payload to send to the `command_topic` to turn the vacuum off. Defaults to `turn_off`. +- **payload_return_to_base** (*Optional*): The payload to send to the `command_topic` to tell the vacuum to return to base. Defaults to `return_to_base`. +- **payload_stop** (*Optional*): The payload to send to the `command_topic` to stop the vacuum. Defaults to `stop`. +- **payload_clean_spot** (*Optional*): The payload to send to the `command_topic` to begin a spot cleaning cycle. Defaults to `clean_spot`. +- **payload_locate** (*Optional*): The payload to send to the `command_topic` to locate the vacuum (typically plays a song). Defaults to `locate`. +- **payload_start_pause** (*Optional*): The payload to send to the `command_topic` to start or pause the vacuum. Defaults to `start_pause`. +- **battery_level_topic** (*Optional*): The MQTT topic subscribed to receive battery level values from the vacuum. +- **battery_level_template** (*Optional*): Defines a [template](/topics/templating/) to define the battery level of the vacuum. +- **charging_topic** (*Optional*): The MQTT topic subscribed to receive charging state values from the vacuum. +- **charging_template** (*Optional*): Defines a [template](/topics/templating/) to define the charging state of the vacuum. +- **cleaning_topic** (*Optional*): The MQTT topic subscribed to receive cleaning state values from the vacuum. +- **cleaning_template** (*Optional*): Defines a [template](/topics/templating/) to define the cleaning state of the vacuum. +- **docked_topic** (*Optional*): The MQTT topic subscribed to receive docked state values from the vacuum. +- **docked_template** (*Optional*): Defines a [template](/topics/templating/) to define the docked state of the vacuum. +- **fan_speed_topic** (*Optional*): The MQTT topic subscribed to receive fan speed values from the vacuum. +- **fan_speed_template** (*Optional*): Defines a [template](/topics/templating/) to define the fan speed of the vacuum. +- **set_fan_speed_topic** (*Optional*): The MQTT topic to publish commands to control the vacuum's fan speed. +- **fan_speed_list** (*Optional*): List of possible fan speeds for the vacuum. +- **send_command_topic** (*Optional*): The MQTT topic to publish custom commands to the vacuum. + +### {% linkable_title Default MQTT Protocol %} + +The above configuration for this component expects an MQTT protocol like the following. + +#### Basic Commands + +MQTT topic: `vacuum/command` + +Possible MQTT payloads: +- `turn_on` - Begin cleaning +- `turn_off` - Turn the Vacuum off +- `return_to_base` - Return to base/dock +- `stop` - Stop the Vacuum +- `clean_spot` - Initialize a spot cleaning cycle +- `locate` - Locate the vacuum (typically by playing a song) +- `start_pause` - Toggle the vacuum between cleaning and stopping + +#### Set Fan Speed + +MQTT topic: `vacuum/set_fan_speed` + +Possible MQTT payloads: +- `min` - Minimum fan speed +- `medium` - Medium fan speed +- `high` - High fan speed +- `max` - Max fan speed + +#### Send Custom Command + +MQTT topic: `vacuum/send_command` + +MQTT payload for `send_command` can be an arbitrary value handled by the vacuum's MQTT-enabled firmware. + +#### Status/Sensor Updates + +MQTT topic: `vacuum/state` + +MQTT payload: +```json +{ + "battery_level": 61, + "docked": true, + "cleaning": false, + "charging": true, + "fan_speed": "off" +} +``` + +### {% linkable_title Retrofitting a non-wifi Roomba with an ESP8266 %} + +- [This repo](https://github.com/johnboiles/esp-roomba-mqtt) has MQTT client firmware for retrofitting your old Roomba. From e0aef27a8ae9af5a27e85278c5279423f847f039 Mon Sep 17 00:00:00 2001 From: Marcel Holle Date: Fri, 22 Sep 2017 06:40:15 +0200 Subject: [PATCH 30/31] Telnet switch docs (#3165) * Added telnet switch docs. * Update switch.telnet.markdown * Added port to Telnet switch docs. * Optimistic attriute in Telnet switch removed. * friendly_name -> name * Updated release. --- source/_components/switch.telnet.markdown | 45 +++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 source/_components/switch.telnet.markdown diff --git a/source/_components/switch.telnet.markdown b/source/_components/switch.telnet.markdown new file mode 100644 index 00000000000..ed27c55a92c --- /dev/null +++ b/source/_components/switch.telnet.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "Telnet Switch" +description: "Instructions how to integrate telnet switches into Home Assistant." +date: 2017-08-10 19:19 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Switch +ha_release: 0.54 +ha_iot_class: "Local Polling" +--- + + +The `telnet` switch platform allows you to control devices with telnet commands. + +To enable this switch, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + platform: telnet + switches: + projector: + resource: "host_or_ip" + port: 4002 + command_on: "PWR ON" + command_off: "PWR OFF" + command_state: "PWR?" + value_template: '{{ value == "PWR=01" }}' +``` + +Configuration variables: + +- **switches** (*Required*): The array that contains all switches. + - **identifier** (*Required*): Name of the switch as slug. Multiple entries are possible. + - **resource** (*Required*): Host or IP of the device. + - **port** (*Optional*): Port to connect to. Default is 23 if not defined. + - **command_on** (*Required*): Command to turn device on. + - **command_off** (*Required*): Command to turn device off. + - **command_state** (*Required*): Command to determine the state of the switch. If not defined the switch will assume successful state changes. + - **value_template** (*Required*): The template evaluating to `true` will indicate the switch is on. + - **name** (*Optional*): The name used to display the switch in the frontend. From 45c1dee8df92118b15f7b25cedbc1d8e61a365f4 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 22 Sep 2017 23:06:14 -0700 Subject: [PATCH 31/31] Release blog post 0.54 --- _config.yml | 8 +- source/_components/light.abode.markdown | 2 +- .../_components/sensor.worxlandroid.markdown | 1 - source/_components/switch.telnet.markdown | 3 +- source/_components/vacuum.mqtt.markdown | 2 +- source/_posts/2017-09-23-release-54.markdown | 355 ++++++++++++++++++ .../images/blog/2017-09-0.54/components.png | Bin 0 -> 102146 bytes 7 files changed, 362 insertions(+), 9 deletions(-) create mode 100644 source/_posts/2017-09-23-release-54.markdown create mode 100644 source/images/blog/2017-09-0.54/components.png diff --git a/_config.yml b/_config.yml index 220f016d3fe..daebb5427a8 100644 --- a/_config.yml +++ b/_config.yml @@ -139,12 +139,12 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 53 -current_patch_version: 1 -date_released: 2017-09-12 +current_minor_version: 54 +current_patch_version: 0 +date_released: 2017-09-23 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0531---september-11" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): diff --git a/source/_components/light.abode.markdown b/source/_components/light.abode.markdown index 88e1ca7e1b1..bb6d597deef 100644 --- a/source/_components/light.abode.markdown +++ b/source/_components/light.abode.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: abode.jpg ha_release: 0.54 -ha_category: Cover +ha_category: Light ha_iot_class: "Cloud Push" --- diff --git a/source/_components/sensor.worxlandroid.markdown b/source/_components/sensor.worxlandroid.markdown index 98b699b9ab8..abe0fbb14ce 100644 --- a/source/_components/sensor.worxlandroid.markdown +++ b/source/_components/sensor.worxlandroid.markdown @@ -9,7 +9,6 @@ sharing: true footer: true ha_category: DIY ha_release: 0.54 -logo: home-assistant.png ha_iot_class: "Local Polling" --- diff --git a/source/_components/switch.telnet.markdown b/source/_components/switch.telnet.markdown index ed27c55a92c..e20b2262ade 100644 --- a/source/_components/switch.telnet.markdown +++ b/source/_components/switch.telnet.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -logo: home-assistant.png ha_category: Switch ha_release: 0.54 ha_iot_class: "Local Polling" @@ -29,7 +28,7 @@ switch: command_on: "PWR ON" command_off: "PWR OFF" command_state: "PWR?" - value_template: '{{ value == "PWR=01" }}' + value_template: '{% raw %}{{ value == "PWR=01" }}{% endraw %}' ``` Configuration variables: diff --git a/source/_components/vacuum.mqtt.markdown b/source/_components/vacuum.mqtt.markdown index c8b45ff6119..34f98401703 100644 --- a/source/_components/vacuum.mqtt.markdown +++ b/source/_components/vacuum.mqtt.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "MQTT" +title: "MQTT Vacuum" description: "Instructions how to integrate your MQTT enabled Vacuum within Home Assistant." date: 2017-09-11 20:26 sidebar: true diff --git a/source/_posts/2017-09-23-release-54.markdown b/source/_posts/2017-09-23-release-54.markdown new file mode 100644 index 00000000000..97fb51ea0c8 --- /dev/null +++ b/source/_posts/2017-09-23-release-54.markdown @@ -0,0 +1,355 @@ +--- +layout: post +title: "0.54: Todoist, DoorBird, Abode cameras" +description: "4 years of Home Assistant is celebrated with another great release." +date: 2017-09-23 00:11:05 +date_formatted: "September 23, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2017-09-0.54/components.png +--- + +
+ +We're approaching the end of September and that means that it was our birthday! We are now officially 4 years old and are getting more amazing with every release. This release too will include some great new stuff and tons of bugfixes. Included is a bug fix by [@fanthos] that should fix the frontend in some browsers. If you had issues with your browser before, make sure to check out this release. + +This release we've started the work to make our Xiaomi integrations more robust. This meant that we've had to rename the components to make it more clear which of the Xiaomi protocols are being used. We have some developers working on making this very affordable home automation solution a first class citizen in the Home Assistant ecosystem, stay tuned for more integrations! + +Another cool thing in this release is the new [`mqtt_statestream`][mqtt_statestream docs] component to export state changes to MQTT. Each entity will be exported on their own topic which makes it very easy to subscribe to individual entity updates. + +## {% linkable_title New Platforms %} + +- Added mqtt_statestream component ([@mw-white] - [#9286]) ([mqtt_statestream docs]) (new-platform) +- Add support for Todoist platform ([@Jay2645] - [#9236]) ([calendar.todoist docs]) (new-platform) +- DoorBird Component ([@Klikini] - [#9281]) ([doorbird docs]) ([binary_sensor.doorbird docs]) ([camera.doorbird docs]) ([switch.doorbird docs]) (new-platform) +- Basic MQTT vacuum support ([@johnboiles] - [#9386]) ([vacuum docs]) ([vacuum.mqtt docs]) (new-platform) +- Added Zyxel Keenetic NDMS2 based routers support for device tracking ([@foxel] - [#9315]) ([device_tracker.keenetic_ndms2 docs]) (new-platform) +- Telnet switch ([@multiholle] - [#8913]) ([switch.telnet docs]) (new-platform) +- Abode services, events, lights, cameras, automations, quick actions. ([@MisterWil] - [#9310]) ([abode docs]) ([alarm_control_panel.abode docs]) ([binary_sensor.abode docs]) ([camera.abode docs]) ([cover.abode docs]) ([light.abode docs]) ([lock.abode docs]) ([switch.abode docs]) (new-platform) +- Added satel_integra alarm panel and binary sensor platform ([@c-soft] - [#9336]) ([satel_integra docs]) ([alarm_control_panel.satel_integra docs]) ([binary_sensor.satel_integra docs]) (new-platform) +- Worx Landroid sensor ([@nilzen] - [#9416]) ([sensor.worxlandroid docs]) (new-platform) + +## {% linkable_title If you need help... %} +...don't hesitate to use our very active [forums][forum] or join us for a little [chat][discord]. The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} +Experiencing issues introduced by this release? Please report them in our [issue tracker][issue]. Make sure to fill in all fields of the issue template. + + + +## {% linkable_title Breaking Changes %} + +- Sensor - OneWire: This update changes the names of the sensors from `` to ` ` ([@tcastberg] - [#9404]) ([sensor.onewire docs]) (breaking change) +- Renamed Xiaomi platforms to include their protocol names. xiaomi -> xiaomi_aqara, xiaomi_aqara.switch, xiaomi_aqara.light, xiaomi_aqara.binary_sensor, ... and vacuum.xiaomi, xiaomi_philipslight -> xiaomi_miio, vacuum.xiaomi_miio, light.xiaomi_miio ([@danielhiversen] - [#9426]) (breaking change) +- Swiss Public Transport sensor: All times handled by the Swiss Public Transport sensor are now in ISO 8601 format. Please update your templates sensors and automations. ([@fabaff] - [#9129]) ([sensor.swiss_public_transport docs]) (breaking change) +- iOS: All category identifiers need to be lowercase. If you do not update, it will break actionable notifications to IOS devices sent by scripts/automations. ([@rbflurry] - [#9427]) (breaking change) +- Fitbit: Put endpoints behind `/api` like the other oauth-using components ([@happyleavesaoc] - [#9460]) ([sensor.fitbit docs]) (breaking change) +- Version 0.53 introduced a bug in the HomeMatic component which breaks the usage of system variables on the CCU / Homegear. This has not been fixed yet. If you are using these variables in your automations you should skip updates until the bug has been resolved. Upgrading is safe however if you only interact with devices. + +## {% linkable_title All changes %} + +- Add HTTP Basic auth to RESTful Switch ([@amelchio] - [#9162]) ([switch.rest docs]) +- Bump pywebpush and pyJWT versions ([@fanaticDavid] - [#9355]) ([notify.html5 docs]) +- Add /usr/sbin to PATH ([@morberg] - [#9364]) +- Add polling interval service and setting available through zwave node entity panel ([@turbokongen] - [#9056]) ([zwave docs]) +- Round off probability to 2 decimals. ([@arsaboo] - [#9365]) ([binary_sensor.bayesian docs]) +- Added mqtt_statestream component ([@mw-white] - [#9286]) ([mqtt_statestream docs]) (new-platform) +- typo in waypoint import topic preventing waypoint import ([@diplix] - [#9338]) ([device_tracker.owntracks docs]) +- Cleanup and simplitfy the async state update ([@pvizeli] - [#9390]) +- Update cloud auth ([@balloob] - [#9357]) +- Allow multiple observations of same entity ([@jlmcgehee21] - [#9391]) ([binary_sensor.bayesian docs]) +- Break up Alexa per functionality ([@balloob] - [#9400]) ([alexa docs]) +- Upgrade psutil to 5.3.1 ([@fabaff] - [#9403]) ([sensor.systemmonitor docs]) +- fix mopar sensor ([@happyleavesaoc] - [#9389]) ([sensor.mopar docs]) +- Support specifying no Apple TVs ([@postlund] - [#9394]) ([apple_tv docs]) +- Update netdisco to 1.2.0 ([@balloob] - [#9408]) +- components/xiaomi: Add initial discovery using NetDisco. ([@pfalcon] - [#9283]) +- Fix copy&paste mistake ([@tinloaf] - [#9378]) +- Added log-file command line flag ([@TD22057] - [#9422]) +- Add LC_CTYPE to environment variables in macOS ([@morberg] - [#9227]) +- Added more devices and types to onewire ([@tcastberg] - [#9404]) ([sensor.onewire docs]) (breaking change) +- Bump uvcclient to 0.10.1 to work with beta NVR releases ([@antonym] - [#9423]) ([camera.uvc docs]) +- full RGB support for users of tradfri GW ([@spektren] - [#9411]) ([light.tradfri docs]) +- Add support for Todoist platform ([@Jay2645] - [#9236]) ([calendar.todoist docs]) (new-platform) +- Fix artwork bug in Apple TV ([@postlund] - [#9415]) ([media_player.apple_tv docs]) +- Bump python-mirobo for improved device support and introduce API changes. ([@syssi] - [#9424]) +- MPD small improvements ([@pdanilew] - [#9301]) ([media_player.mpd docs]) +- update broadlink.py to add support for MP1 switch ([@giangvo] - [#9222]) ([switch.broadlink docs]) +- Fix displaying of friendly_name for light template component ([@rollbrettler] - [#9413]) ([light.template docs]) +- Improve Python script ([@doudz] - [#9417]) ([python_script docs]) +- Add manual alarm_control_panel pending time per state ([@snjoetw] - [#9264]) ([alarm_control_panel.manual docs]) +- Rename xiaomi #9425 ([@danielhiversen] - [#9426]) (breaking change) +- Bump version of aioautomatic ([@armills] - [#9435]) ([device_tracker.automatic docs]) +- Fix russound_rio for python 3.4 ([@wickerwaka] - [#9428]) ([media_player.russound_rio docs]) +- Basic MQTT vacuum support ([@johnboiles] - [#9386]) ([vacuum docs]) ([vacuum.mqtt docs]) (new-platform) +- Optimaze vacuum mqtt platform ([@pvizeli] - [#9439]) ([vacuum.mqtt docs]) +- Polymer access to log file broken when using new log file command line ([@TD22057] - [#9437]) +- Allow empty hostnames when detecting devices with the aruba device_tracker. ([@michaelarnauts] - [#9440]) ([device_tracker.aruba docs]) +- mqtt_statestream: Update to append 'state' to topic for future use with mqtt discovery ([@mw-white] - [#9446]) ([mqtt_statestream docs]) +- Fix for DTE Energy Bridge returning the wrong units from time to time ([@kylehendricks] - [#9246]) ([sensor.dte_energy_bridge docs]) +- Refactor Swiss Public Transport sensor ([@fabaff] - [#9129]) ([sensor.swiss_public_transport docs]) (breaking change) +- Added Zyxel Keenetic NDMS2 based routers support for device tracking ([@foxel] - [#9315]) ([device_tracker.keenetic_ndms2 docs]) (new-platform) +- Add city/state/country options and fix bugs for airvisual ([@bachya] - [#9436]) ([sensor.airvisual docs]) +- Fix emulated hue warning message ([@astone123] - [#9452]) ([emulated_hue docs]) +- Alexa smart home native support ([@pvizeli] - [#9443]) +- fix for Twitter notifications without media ([@MikeChristianson] - [#9448]) +- Load WebComponent polyfill on header. ([@fanthos] - [#9438]) +- Fix issue 5728: Emulated Hue UPnP crashes on special characters. ([@SqyD] - [#9453]) +- Ios notify camera fix ([@rbflurry] - [#9427]) (breaking change) +- Adds MQTT Fan Discovery ([@hufman] - [#9463]) +- Upgrade sqlalchemy to 1.1.14 ([@fabaff] - [#9458]) +- Upgrade uber_rides to 0.6.0 ([@fabaff] - [#9457]) ([sensor.uber docs]) +- Upgrade youtube_dl to 2017.9.15 ([@fabaff] - [#9456]) +- DoorBird Component ([@Klikini] - [#9281]) ([doorbird docs]) ([binary_sensor.doorbird docs]) ([camera.doorbird docs]) ([switch.doorbird docs]) (new-platform) +- Fix recorder does not vacuum SQLite DB on purge ([@milanvo] - [#9469]) +- fitbit fixes ([@happyleavesaoc] - [#9460]) ([sensor.fitbit docs]) (breaking change) +- Fix typo in services.yaml ([@mika] - [#9475]) +- Upgrade pyasn1 to 0.3.5 and pyasn1-modules to 0.1.4 ([@fabaff] - [#9474]) ([notify.xmpp docs]) +- Xiaomi Gateway: Allow static configuration of a gateway without discovery ([@syssi] - [#9464]) ([xiaomi_aqara docs]) +- Added support for the DTE Energy Bridge v2 ([@Blender3D] - [#9431]) ([sensor.dte_energy_bridge docs]) +- Telnet switch ([@multiholle] - [#8913]) ([switch.telnet docs]) (new-platform) +- Abode services, events, lights, cameras, automations, quick actions. ([@MisterWil] - [#9310]) ([abode docs]) ([alarm_control_panel.abode docs]) ([binary_sensor.abode docs]) ([camera.abode docs]) ([cover.abode docs]) ([light.abode docs]) ([lock.abode docs]) ([switch.abode docs]) (new-platform) +- Added satel_integra alarm panel and binary sensor platform ([@c-soft] - [#9336]) ([satel_integra docs]) ([alarm_control_panel.satel_integra docs]) ([binary_sensor.satel_integra docs]) (new-platform) +- Worx Landroid sensor ([@nilzen] - [#9416]) ([sensor.worxlandroid docs]) (new-platform) +- Fix universal media_player mute ([@colindunn] - [#9462]) ([media_player.universal docs]) +- Small improvement of KNX Covers ([@Julius2342] - [#9476]) +- Upgrade async_timeout to 1.4.0 ([@fabaff] - [#9488]) +- Bump version of abodepy ([@MisterWil] - [#9491]) ([abode docs]) +- Upgrade coinmarketcap to 4.1.1 ([@fabaff] - [#9490]) ([sensor.coinmarketcap docs]) +- Upgrade blockchain to 1.4.0 ([@fabaff] - [#9489]) +- Solve Recorder component failing when using Axis component ([@Kane610] - [#9293]) ([axis docs]) ([camera.axis docs]) +- switch to pypi for xiaomi gw ([@danielhiversen] - [#9498]) ([xiaomi_aqara docs]) +- renamed add_devices to async_add_devices according to hass naming scheme ([@Julius2342] - [#9485]) ([binary_sensor.knx docs]) ([climate.knx docs]) ([light.knx docs]) ([sensor.knx docs]) ([switch.knx docs]) +- Revert "renamed add_devices to async_add_devices according to hass naming scheme (#9485)" ([@pvizeli] - [#9503]) ([alarm_control_panel.spc docs]) ([binary_sensor.knx docs]) ([binary_sensor.spc docs]) ([climate.knx docs]) ([light.knx docs]) ([sensor.citybikes docs]) ([sensor.knx docs]) ([sensor.worxlandroid docs]) ([switch.knx docs]) +- LIFX: fix multi-zone color restore after effects ([@amelchio] - [#9492]) ([light.lifx docs]) +- renamed add_devices to async_add_devices according to hass naming scheme (second try after failed #9485) ([@Julius2342] - [#9505]) ([alarm_control_panel.spc docs]) ([binary_sensor.knx docs]) ([binary_sensor.spc docs]) ([climate.knx docs]) ([light.knx docs]) ([sensor.citybikes docs]) ([sensor.knx docs]) ([sensor.worxlandroid docs]) ([switch.knx docs]) +- Xiaomi pycryptodome ([@danielhiversen] - [#9511]) ([xiaomi_aqara docs]) +- Bumped pyhomematic, additional device support ([@danielperna84] - [#9506]) ([homematic docs]) ([sensor.homematic docs]) +- abode: Bump abodepy dependency to 0.11.7 ([@vickyg3] - [#9504]) ([abode docs]) +- abode: Set device_type in state attributes ([@vickyg3] - [#9515]) ([abode docs]) +- update xiaomi aqara lib ([@danielhiversen] - [#9520]) ([xiaomi_aqara docs]) +- added services.yaml integration for input_boolean ([@skalavala] - [#9519]) ([input_boolean docs]) +- Add reload service to python_script ([@doudz] - [#9512]) ([python_script docs]) +- MQTT Binary Sensor - Add availability_topic for online/offline status ([@marthoc] - [#9507]) ([binary_sensor.mqtt docs]) +- Fix typo within cover/knx https://github.com/XKNX/xknx/issues/64 ([@Julius2342] - [#9527]) ([cover.knx docs]) +- LIFX: improve performance of setting multi-zone lights to a single color ([@amelchio] - [#9526]) ([light.lifx docs]) + +[#8913]: https://github.com/home-assistant/home-assistant/pull/8913 +[#9056]: https://github.com/home-assistant/home-assistant/pull/9056 +[#9129]: https://github.com/home-assistant/home-assistant/pull/9129 +[#9162]: https://github.com/home-assistant/home-assistant/pull/9162 +[#9222]: https://github.com/home-assistant/home-assistant/pull/9222 +[#9227]: https://github.com/home-assistant/home-assistant/pull/9227 +[#9236]: https://github.com/home-assistant/home-assistant/pull/9236 +[#9246]: https://github.com/home-assistant/home-assistant/pull/9246 +[#9264]: https://github.com/home-assistant/home-assistant/pull/9264 +[#9281]: https://github.com/home-assistant/home-assistant/pull/9281 +[#9283]: https://github.com/home-assistant/home-assistant/pull/9283 +[#9286]: https://github.com/home-assistant/home-assistant/pull/9286 +[#9293]: https://github.com/home-assistant/home-assistant/pull/9293 +[#9301]: https://github.com/home-assistant/home-assistant/pull/9301 +[#9310]: https://github.com/home-assistant/home-assistant/pull/9310 +[#9315]: https://github.com/home-assistant/home-assistant/pull/9315 +[#9336]: https://github.com/home-assistant/home-assistant/pull/9336 +[#9338]: https://github.com/home-assistant/home-assistant/pull/9338 +[#9355]: https://github.com/home-assistant/home-assistant/pull/9355 +[#9357]: https://github.com/home-assistant/home-assistant/pull/9357 +[#9364]: https://github.com/home-assistant/home-assistant/pull/9364 +[#9365]: https://github.com/home-assistant/home-assistant/pull/9365 +[#9378]: https://github.com/home-assistant/home-assistant/pull/9378 +[#9386]: https://github.com/home-assistant/home-assistant/pull/9386 +[#9389]: https://github.com/home-assistant/home-assistant/pull/9389 +[#9390]: https://github.com/home-assistant/home-assistant/pull/9390 +[#9391]: https://github.com/home-assistant/home-assistant/pull/9391 +[#9394]: https://github.com/home-assistant/home-assistant/pull/9394 +[#9400]: https://github.com/home-assistant/home-assistant/pull/9400 +[#9403]: https://github.com/home-assistant/home-assistant/pull/9403 +[#9404]: https://github.com/home-assistant/home-assistant/pull/9404 +[#9408]: https://github.com/home-assistant/home-assistant/pull/9408 +[#9411]: https://github.com/home-assistant/home-assistant/pull/9411 +[#9413]: https://github.com/home-assistant/home-assistant/pull/9413 +[#9415]: https://github.com/home-assistant/home-assistant/pull/9415 +[#9416]: https://github.com/home-assistant/home-assistant/pull/9416 +[#9417]: https://github.com/home-assistant/home-assistant/pull/9417 +[#9422]: https://github.com/home-assistant/home-assistant/pull/9422 +[#9423]: https://github.com/home-assistant/home-assistant/pull/9423 +[#9424]: https://github.com/home-assistant/home-assistant/pull/9424 +[#9426]: https://github.com/home-assistant/home-assistant/pull/9426 +[#9427]: https://github.com/home-assistant/home-assistant/pull/9427 +[#9428]: https://github.com/home-assistant/home-assistant/pull/9428 +[#9431]: https://github.com/home-assistant/home-assistant/pull/9431 +[#9435]: https://github.com/home-assistant/home-assistant/pull/9435 +[#9436]: https://github.com/home-assistant/home-assistant/pull/9436 +[#9437]: https://github.com/home-assistant/home-assistant/pull/9437 +[#9438]: https://github.com/home-assistant/home-assistant/pull/9438 +[#9439]: https://github.com/home-assistant/home-assistant/pull/9439 +[#9440]: https://github.com/home-assistant/home-assistant/pull/9440 +[#9443]: https://github.com/home-assistant/home-assistant/pull/9443 +[#9446]: https://github.com/home-assistant/home-assistant/pull/9446 +[#9448]: https://github.com/home-assistant/home-assistant/pull/9448 +[#9452]: https://github.com/home-assistant/home-assistant/pull/9452 +[#9453]: https://github.com/home-assistant/home-assistant/pull/9453 +[#9456]: https://github.com/home-assistant/home-assistant/pull/9456 +[#9457]: https://github.com/home-assistant/home-assistant/pull/9457 +[#9458]: https://github.com/home-assistant/home-assistant/pull/9458 +[#9460]: https://github.com/home-assistant/home-assistant/pull/9460 +[#9462]: https://github.com/home-assistant/home-assistant/pull/9462 +[#9463]: https://github.com/home-assistant/home-assistant/pull/9463 +[#9464]: https://github.com/home-assistant/home-assistant/pull/9464 +[#9469]: https://github.com/home-assistant/home-assistant/pull/9469 +[#9474]: https://github.com/home-assistant/home-assistant/pull/9474 +[#9475]: https://github.com/home-assistant/home-assistant/pull/9475 +[#9476]: https://github.com/home-assistant/home-assistant/pull/9476 +[#9485]: https://github.com/home-assistant/home-assistant/pull/9485 +[#9488]: https://github.com/home-assistant/home-assistant/pull/9488 +[#9489]: https://github.com/home-assistant/home-assistant/pull/9489 +[#9490]: https://github.com/home-assistant/home-assistant/pull/9490 +[#9491]: https://github.com/home-assistant/home-assistant/pull/9491 +[#9492]: https://github.com/home-assistant/home-assistant/pull/9492 +[#9498]: https://github.com/home-assistant/home-assistant/pull/9498 +[#9503]: https://github.com/home-assistant/home-assistant/pull/9503 +[#9504]: https://github.com/home-assistant/home-assistant/pull/9504 +[#9505]: https://github.com/home-assistant/home-assistant/pull/9505 +[#9506]: https://github.com/home-assistant/home-assistant/pull/9506 +[#9507]: https://github.com/home-assistant/home-assistant/pull/9507 +[#9511]: https://github.com/home-assistant/home-assistant/pull/9511 +[#9512]: https://github.com/home-assistant/home-assistant/pull/9512 +[#9515]: https://github.com/home-assistant/home-assistant/pull/9515 +[#9519]: https://github.com/home-assistant/home-assistant/pull/9519 +[#9520]: https://github.com/home-assistant/home-assistant/pull/9520 +[#9526]: https://github.com/home-assistant/home-assistant/pull/9526 +[#9527]: https://github.com/home-assistant/home-assistant/pull/9527 +[@MisterWil]: https://github.com/MisterWil +[@pdanilew]: https://github.com/pdanilew +[@marthoc]: https://github.com/marthoc +[@spektren]: https://github.com/spektren +[@Blender3D]: https://github.com/Blender3D +[@Jay2645]: https://github.com/Jay2645 +[@Julius2342]: https://github.com/Julius2342 +[@Kane610]: https://github.com/Kane610 +[@Klikini]: https://github.com/Klikini +[@MikeChristianson]: https://github.com/MikeChristianson +[@SqyD]: https://github.com/SqyD +[@TD22057]: https://github.com/TD22057 +[@amelchio]: https://github.com/amelchio +[@antonym]: https://github.com/antonym +[@armills]: https://github.com/armills +[@arsaboo]: https://github.com/arsaboo +[@astone123]: https://github.com/astone123 +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@c-soft]: https://github.com/c-soft +[@colindunn]: https://github.com/colindunn +[@danielhiversen]: https://github.com/danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@diplix]: https://github.com/diplix +[@doudz]: https://github.com/doudz +[@fabaff]: https://github.com/fabaff +[@fanaticDavid]: https://github.com/fanaticDavid +[@fanthos]: https://github.com/fanthos +[@foxel]: https://github.com/foxel +[@giangvo]: https://github.com/giangvo +[@happyleavesaoc]: https://github.com/happyleavesaoc +[@hufman]: https://github.com/hufman +[@jlmcgehee21]: https://github.com/jlmcgehee21 +[@johnboiles]: https://github.com/johnboiles +[@kylehendricks]: https://github.com/kylehendricks +[@michaelarnauts]: https://github.com/michaelarnauts +[@mika]: https://github.com/mika +[@milanvo]: https://github.com/milanvo +[@morberg]: https://github.com/morberg +[@multiholle]: https://github.com/multiholle +[@mw-white]: https://github.com/mw-white +[@nilzen]: https://github.com/nilzen +[@pfalcon]: https://github.com/pfalcon +[@postlund]: https://github.com/postlund +[@pvizeli]: https://github.com/pvizeli +[@rbflurry]: https://github.com/rbflurry +[@rollbrettler]: https://github.com/rollbrettler +[@skalavala]: https://github.com/skalavala +[@snjoetw]: https://github.com/snjoetw +[@syssi]: https://github.com/syssi +[@tcastberg]: https://github.com/tcastberg +[@tinloaf]: https://github.com/tinloaf +[@turbokongen]: https://github.com/turbokongen +[@vickyg3]: https://github.com/vickyg3 +[@wickerwaka]: https://github.com/wickerwaka +[abode docs]: /components/abode/ +[alarm_control_panel.abode docs]: /components/alarm_control_panel.abode/ +[alarm_control_panel.manual docs]: /components/alarm_control_panel.manual/ +[alarm_control_panel.satel_integra docs]: /components/alarm_control_panel.satel_integra/ +[alarm_control_panel.spc docs]: /components/alarm_control_panel.spc/ +[alexa docs]: /components/alexa/ +[api docs]: /components/api/ +[apple_tv docs]: /components/apple_tv/ +[axis docs]: /components/axis/ +[binary_sensor.abode docs]: /components/binary_sensor.abode/ +[binary_sensor.bayesian docs]: /components/binary_sensor.bayesian/ +[binary_sensor.doorbird docs]: /components/binary_sensor.doorbird/ +[binary_sensor.knx docs]: /components/binary_sensor.knx/ +[binary_sensor.mqtt docs]: /components/binary_sensor.mqtt/ +[binary_sensor.satel_integra docs]: /components/binary_sensor.satel_integra/ +[binary_sensor.spc docs]: /components/binary_sensor.spc/ +[calendar.todoist docs]: /components/calendar.todoist/ +[camera.abode docs]: /components/camera.abode/ +[camera.axis docs]: /components/camera.axis/ +[camera.doorbird docs]: /components/camera.doorbird/ +[camera.uvc docs]: /components/camera.uvc/ +[climate.knx docs]: /components/climate.knx/ +[config.zwave docs]: /components/config.zwave/ +[cover.abode docs]: /components/cover.abode/ +[cover.knx docs]: /components/cover.knx/ +[device_tracker.aruba docs]: /components/device_tracker.aruba/ +[device_tracker.automatic docs]: /components/device_tracker.automatic/ +[device_tracker.keenetic_ndms2 docs]: /components/device_tracker.keenetic_ndms2/ +[device_tracker.owntracks docs]: /components/device_tracker.owntracks/ +[doorbird docs]: /components/doorbird/ +[emulated_hue docs]: /components/emulated_hue/ +[homematic docs]: /components/homematic/ +[input_boolean docs]: /components/input_boolean/ +[light.abode docs]: /components/light.abode/ +[light.knx docs]: /components/light.knx/ +[light.lifx docs]: /components/light.lifx/ +[light.template docs]: /components/light.template/ +[light.tradfri docs]: /components/light.tradfri/ +[light.xiaomi_philipslight docs]: /components/light.xiaomi_philipslight/ +[lock.abode docs]: /components/lock.abode/ +[media_player.apple_tv docs]: /components/media_player.apple_tv/ +[media_player.mpd docs]: /components/media_player.mpd/ +[media_player.russound_rio docs]: /components/media_player.russound_rio/ +[media_player.universal docs]: /components/media_player.universal/ +[mqtt_statestream docs]: /components/mqtt_statestream/ +[notify.html5 docs]: /components/notify.html5/ +[notify.xmpp docs]: /components/notify.xmpp/ +[python_script docs]: /components/python_script/ +[satel_integra docs]: /components/satel_integra/ +[sensor.airvisual docs]: /components/sensor.airvisual/ +[sensor.citybikes docs]: /components/sensor.citybikes/ +[sensor.coinmarketcap docs]: /components/sensor.coinmarketcap/ +[sensor.dte_energy_bridge docs]: /components/sensor.dte_energy_bridge/ +[sensor.fitbit docs]: /components/sensor.fitbit/ +[sensor.homematic docs]: /components/sensor.homematic/ +[sensor.knx docs]: /components/sensor.knx/ +[sensor.mopar docs]: /components/sensor.mopar/ +[sensor.onewire docs]: /components/sensor.onewire/ +[sensor.swiss_public_transport docs]: /components/sensor.swiss_public_transport/ +[sensor.systemmonitor docs]: /components/sensor.systemmonitor/ +[sensor.uber docs]: /components/sensor.uber/ +[sensor.worxlandroid docs]: /components/sensor.worxlandroid/ +[switch.abode docs]: /components/switch.abode/ +[switch.broadlink docs]: /components/switch.broadlink/ +[switch.doorbird docs]: /components/switch.doorbird/ +[switch.knx docs]: /components/switch.knx/ +[switch.rest docs]: /components/switch.rest/ +[switch.telnet docs]: /components/switch.telnet/ +[vacuum docs]: /components/vacuum/ +[vacuum.mqtt docs]: /components/vacuum.mqtt/ +[vacuum.xiaomi docs]: /components/vacuum.xiaomi/ +[xiaomi docs]: /components/xiaomi/ +[xiaomi_aqara docs]: /components/xiaomi_aqara/ +[zwave docs]: /components/zwave/ +[forum]: https://community.home-assistant.io/ +[issue]: https://github.com/home-assistant/home-assistant/issues +[discord]: https://discord.gg/c5DvZ4e diff --git a/source/images/blog/2017-09-0.54/components.png b/source/images/blog/2017-09-0.54/components.png new file mode 100644 index 0000000000000000000000000000000000000000..4e217aa3ded80fa0e1c20613d8eda4c1225ca8fe GIT binary patch literal 102146 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%0APX%s zEjDiiC+nZQf0{`;W{bl7~&qGA?SJ40d{-vjZv&p|D zS=#-NSsw<{{e45nKub^ezq~(4x&QWZ%9=PEn5zhzSQuE^eaPTtXJp|1XZ(M?`M1RX zpj7=gB?~L-e^UO(oByHYru%Eae;D*HwEpS+fQuK7o9=(1=Y@;tR-Xq0;|G%v7WnB5 z{-+Hl9&f;81>Y-|qr{(th;ejouyQ+yQFM=RF?I1Ti z&lTHPgCV6n;i*{ikUZfSbYd{yK@KCGs!oVh$UCph{czAy={Sd6hkeFhimM5h1G2XXWQE*>YRRLTr) z8g&#Qy&B5k&=9ulg864`WOv7ELi!w(-;-=ez;xEt9_oFy} z1qp@nTfrnfG@`uo=0!9NBY+F(i2tP#-}-3yphWT4GvwhG!*;{0Jlvy1`8xbn;39v*iabHY5n$GJv`({yV-H5wBry$H4WX(}&89O~`;9k;Uof zhkI{PEcqTVRNjS3ZKo}?y8v*qG;{TjAz#)2^v3=Z$qafL5B^;w=8$lgRYc(g<~z?q zS}QmZft`nIYTQd3vg6cX~&a~~WVyM1PYC1njH(XFBTfEfs7{_=a}uRWi9`K|h+^>1qE zg}VQUtE;C{(bBRCG9llbY6$7X6Lvzu>_F@YX*{Dgo9K!2ch`RqM~8Yx5EKV5T7Bq# z2oJ#%K^Q+5FbgHUHRe0RVV;GEj@2j%hmcQNwM)CuhFFh{LSp$2gexHAgLl*1ok7CEUTl0JRi)M}Hds4_Q-QNGeDOK5s-iJ7QijHP;_( z!Jwui2*Fb;qW%9Dl?VUfe!w>s#(z}%3K5Q!@(BZ1XqwRQ`LC|P4*~ze zWRl>oF`DAiUT_U|{~fEyU%o?y&weI-Qfl~rLR<&%`HN3&-X}Cv$q!3(0C_@LY&$|$ zS9w$`cOMz?;rlE$y^nUdWqg^_$B1ZHAM+g{HTk$=;EL7%l`Q|HPN%g{r}&t43(-9O z|C=w!hiDL@rcY2w2LF{!K3jp_F`z9+kusitl=#maoc#8o`3)@Xi1~j>>p=h~X6ZQ% zRdM?-i?d_^Uy6^=G!mEo@1*@`1>%0F5x9a;b@!iQ{?VR46PaFq=366m&3~iB_7}hg zs$ZuJ|5*h7a`)jSj9w^QO>_}QS-hJ6aX)6obApJ+dCbYl8CXlhR(+M0hSy*$kl?lp ziPVg6qO?9(QfB^tq2nXx?QLQzIw;~l`I7nmjNS0Q86zic+=z$F`Xu3X)IchJuDD=`}5d+S$ru;&7Ok__M%b?WD;f-Y8hWh&E`FYlb_4P9~H8q{d zaS5j6++*ARaGS@+M_M|%1q^ibMusPgp?||8`so7~(SC<3G9%)=V!vf6snd^|_$mS> z{dqUPsc9)L<>iGtCed9+Yk2s3TyKE8&mq4%4i1ic#`gBFq}0^ZGW;3we+AJ$z|y~b zfXVbyA+d}}XulSIWO#Z%=3EZbG7+89A1GQGLP0+0WME(*;oI$j@r~SlV#M!a*JV#y zY`|e*c6Rr;Vy)%21QFcF6 z&AU+F`@oi71;B4ePgq)7dhf}wx3{NROLdXNT9rJ1GG0e{&f-yQ(R2o?t0ZR|NH~bH z(YvLW^L|138?t}Tjw{(eDB{u)(Irk$uo@huKo2PS;rU! z;Q#6LyPTYEHN!StMkButqNbURmA0h~S7mK86M_X1>s1p>c^v#&qpwC1)h`8E@*F4u`AKkJm`yLe{|KN!7>GM1eEfwjHQkR?eH8|a zfSno!VjIf>`aa8Tx*RgO{#or^%r+wiFMMz9GJAk$cptw6qDT)U+W; z(>&%?Q#~%g5bG_F#YwHdW3`G@QUjd~#hIALA}=Rt5oM_>6bq3>VoFygMXR#@W3j7n zr?_+!vg)Ug)|YWW7KZ?nUm#f-johbji^Cn9}s75+7{ZFbZ(`Q!(ot_G@OFg}E)8846BCDdYSsRcRNKN`=2>a9W*(<}Be_`pns*#qCTg zS6w#o;4BFYbWkT4prwFDGfjc;tL(P7op@-TpN81|`K+;xAz3If4 zfUI!^Tw9hC8TE&(Hk`7%o4QwG8a_}fXUt;3-3jb!^}Y9?v+-$gymFRIyQj55_nd?i z>(pJlOZC+2y+i=+g274S@y`Q?m_UsN6I;2vxET!g!RH@y4NY`-#Yyj~ab{Tf$Pe#M zbIx^@&e3Mo+yA6^Bg4mB(8SQFR{W9O)_y4bl07imARWg*>(JbH)|3nuadCtgmhjYH?!!qoq1ChxJUDxLQ0E zc=5gukMEN;9CQjeU0leGfwU)Y28)OuLp)%$5B`d@p7>;z9n#Q;{Lo`W1 zI_D;jo>9@XyAS8~9`B!At(n^4emh!_U2!fRi`D_uy*<0p-r%7BYZ*(w`nRC1Rz}xN zd=&U;B5yhb9JpF$!mmlPPuopoPI7{j{snA;*i6&!Zd)oQ##e3c{4EgRn@o_p%PLyC zIt9JjFq(;$}KF; zZkFuMPS@OCmbuz^2z+5uQaD|z)!8eD6~|Lf3#34Yq5g8l3X6C3qp5@&29J&AiH4ST z4mHiV;?k`LN9QEue@Ied%0aS+_!)A4EYow0U2KKBlBp9G21}+C(Ici900=IeX^kIy zjO-WBr0df@?)Mfyj312iy#gPYX8p~8>D6{0@x56f@Ui}owkvi!GxqZTYIyg7$2l{^ zRJg4^CHk4Vl&hzE_R`m4vji6zX0&yM7J6beZrX|R%sdBUl17xJKZjdAX9IL?yV4!= zR*Rd7qgvY~!?tU@0dAg>I9YDBkqFB;$09;Kh0-K>5@w6ctR_A`PyjD(f-SD5Ld`o{ zO}|D852~FJ=icg-l~zoKYhPu>#q??9 zo;cNLL!NZ}GbKX)wU~brm-IlCPD`t^)kn{23;%f_jNSFM$KuJ>FiJ%IlMoOd!dOmR zuiySDQbX=%@z$iQ$Z@TO^&~? z)}N`7^uz$w?cWIHdrm92j!rLv5nLWuwPsd2`3{nSom_rkAe6H;U*ExwfODA2x{tZ| z6qTJ=pr(O_B1Tj8Dl*Ai4amr-y02dNBf~xj>8q`q^gL;ntIIvWkd<(3{_CC6-1zfQ_Q`&o4`{xB7a=O2uX+*teZ*F312LTd2(gd7Xw}Fw*w53om-nzg0|uRq z@@!!5@peCn(+!F3ccAA%5R^llg~b1)&ZMgKbq5NOcu_p)E|5Uz$G`4zl+DyU&d)cz zEKbHGM{l`eVPUi=mMS+5DHI$U-9HD|oDC;XSw62=we*WhCz2z%D3_^ZR~7UUJ4oRy z^-R;U9XV&l4X3i(#Hv^8SK(H|BDtgC>btr<-IzFSc7i9Fn-Rbn`WCjfu9mBJtXJX& zmRTQ7lQ!55AX?4iTD}ODQ?ObrGdJiTO>4=3eO>I>Nau7I){|3HJ7zUsJ+#SM+jN)K z)9&P$omnZkX5Zi2Ye^_odb;e`mycK}uIdm0S8vu%`IC=ISd*9c^GliC$LjH|Sy8+7 z(9wKj>mup11+jLqJE2hfCN8Mlo~)8qt8o+YXwCj`lh8>CO*zSw_NdupG)XE@f)&kt zra;>1`e4FIGKt0x9*g$p?0EYfkvdi2Im5>%#r^W?MIrXTYDtplHWd6NhOHszl5c4>fcYMJTVv^tKrlj z6+AB`kiEL;5}S}fOguSlJ5$b6W-AU8KF7FdAaySKd% zdb!~6+1~zA`u6;?UFgZjK_ovvT_WyKZh?X_(~@-OL%f1KR9<*D%{mPHEodwqgDIIG zDT@VFDe{_i+J{sBkCU;nTIm^ zk$GrsaB-F}4!(GUZHd&2`EKmYDZUR$-C^!~`zSXoiLk0dNZS5F?3Pwp(%7D`iTfmk zgN3fqgfZG4N>P@89!pt))p2PSDtwnIwj4z zdMQ*>`a;|S#z5+g_w{>W)A|vo%At*K*Ca)W=t;q!sV_l$%Gw@tuNRL5huDgFy}V@o z1u0BM&58R#tK|(FXA*<35d?HE7cgga%GxK>^Xr&n*PJF-By4*9pV{o@sTWEdPuFS& zJdQfr51)}U1|Xo>d}iIRLcTE?WEla0V_4{rw}7MtwWAD7V3~ zeO`R76{XMoT^SQnEctjtYMtJEA2aB=U&pMTTxa&i>X9@|a2M=T#G!Z2?@m|Nk~$vp zX%|A=_lAQ^F1Gt5XQQTT`vTvDwC?|`pCX1@XRv#Ar~6F)RDN#vgT0j{yZwY zyQVl+YC9t0Yt^)e$)>pgWp^}{=6Y|4I|f+o^$_}!!mgXivg{#REE}mbk(RXKp~&Z*e-e;o+b7$s#{}EEeJ` zuM12W=EV#Tn!hTmt&x@+%x0yAJm*U6Zs~iJrc&3Ve%~|?M&9b$_(>08YnwSfEp2y_ z2ho9S)T+L!O^pMO0$ytJivaoHGPF^tGlBGax3qd~?^VJxYZ2;i`+Ai_ZIcCTL+SfN4Sg#avak(hTp4O3}7NR@B-z!2Qz zwf8#2g6^QQUCx$_)|A^{48}&aZy>0aLx^H*pj6Jn;6YVl(O#;&-mlWv`(ttZZHpGG z_F;6}y&*fMC#7c*3)<&aFR$P;dbr-FAOn2!MSfN{jrO2l5m=> z%?&0Z0&V%)tO$}$*(YXoXm4WbSa-&5F!62zCj1#6QBLoLNvaI0{^>hCr`b|>MR;PW z&)X4XxTGtTr3`S^WfGaz|D?vKlZm=C)y(ZwG1cZ}7($gOF>va%wl^-R()rC`y?o*7F&B03R+9CJ9ve^Y0fZ% zDvk~=Vil+fhcDT0&WFcpR0To%hs&y&rflKWpW^UcTyj`H1h0HU3uQW>b(^t zoHG(ZM{uw|mcEl%^wLyg_=IgL!z#Zl)pTI6e)%HFcV`e_Yq|3Khp?g<<|*Id`f}6A zeE=3;y97L`a2`cqj(eyqCXHNy)FY4$9$k1FT6amj0E*YP@(Aw-+MbP{LQqZJG-_rTyWMH6pN=XwdSG=R*~xFr;iFO4Hi}^hJ<9-Y^rSoN_m*{r8y)wfOlPIquOb8-o`M-FT3q_f66iKuDL=jBejln{4o#7ApZ##)*~ia9IJ3@EE}9Qb^*}Q_nVGp3K|_s6HWLHA`p6mGZcc9 zKoxO`h6{U~V^2ePB37Mv2$+3}b{adyOcf&aHD5>T?=<4~{+=y>?Q#MtvXT86hY~%0 zjFx!`K`|v6;-m~pXL`~2r>NAf;9zE)6 z`)N%dkmg}woIq28>yV?-HM;3nI9|<~I4KEY5K$Ev10K%XPsV%gHZT|l7hz49SVvY3 z&V7VnX=DVEe;j=VrHQs#(*;YVP1bmgG_zPPZ3o17leJDqPynEeNS#{=X{N{9o?9b$ z8Vj@}?^uou+<%;kD%fw|s5a={es7Q`V|$>~rA^@M=NB~LgHH^+YQ(QBtyrixzxDhP zANCu|2FWu&F-Oxwf>YCm0(IGBSZGl;*$_obn-zn!U#VTNnE_mH#EJrdW^uY4$(kOK zD5_+Eqn9fpFm?4CNPR*&7o0_ZS0EX$PJDNDs(|_>YM}*<6De2f?ps`YgXzFy|H;`B z6M|N1jgs8r@mzhR6!bTldO8mQFoBotK6u^>@fU6=d1g9yU+*E0u&npK_b0mh*K^Ma zGvjU!WRMuX+icrAB!PHrD3!4+lQF5`M8+w;=f-oaK50DK2GQ<>eESMIGIX`z6-izJ zS;m-G5KvK~)Gnw$GP*&X?37%NcQ}pwmk`0pF=HH#I0V#L(?JFX3TV?Z4pyVNx6y|` z^3hnFdq9DO15%ZcWkeZzTgW@fIS0Ym|IBN1Z5@x+llpD#Ifr~B-Dy4F@ctQe9HxDhx?&$bHzmlp^tL_XK)%q>Oi!S-P$NC@Q{vl zr`C;xOQic71{1TlA54e-i|I6c*w{!-ugy^nrUfkp97N2QS4E&rurhKPO}TPmnbK?D z+i>ie7kJuqoy;miKX>nDSlZwAQ-UJ=aW3Q~5Tp=rX))gP9kvx(>*)!<_N~9ybknun z1=cc)%_7kVQ)Hz`2>U4#i_$h%N4kX=Pc0wut2XRlU(1_)|RUZ~JOf#wQk zgS-EuTt1I ziiie(-DyvzJROiKHxS0%em$oKHXCtwh1wl1p}en(de3XQ zZ+{j(9w5X0Y1h;bKRWa^gf5Lq%#$*T=PkM8fJsv!0|v^rR>ZxKcmD7@#wtZ3cd1gj z?YZ0gGY^VnInzsl<;$FJBIFp-E|o&gIGeUt&sYkRayv_cW#Fih0-EriFa2i_PJgy7 z4ddtR>@||g;!B*nA6=QRcmqxc>u%?EBP@>k-!=SNSGi>>2JIHsoJOonQV1X)5jY;k z8#>kyaF>10C*PlL-j%%lFZC7EQKo!~Z-kq=062e<}7sGZ8&)q-_>)EhQyP1?3c1I6~`TE zKugAa*20iJ!O{gW%<2Y?qsWKQ5UtEF!w0CgJ(38z<-)yW-@c(fxynf~!uRgSzo2Ez zjt6LnLU^qH0LwBPesmEBb<&$B}Klg+{ z7g5;}@m@`Lp&QEOOFL{0ZRM)UV~n&~yGE=O#4`_lRamzWg<52m1w}6*Xamo8x)}q% zla4f&-J9xqQps#J9VAKOLT`V(l(AfcUi8*62?6(TC==^^rLzf-!LC(tu}1gj@M@q} zIMPT}++B|fcOAnKg1|wyIC;$TUZaC+F=1nU&wh{ZRQ+M2Wl5N}YrXCr{qj}I5_zoM zaaM^Y%itChEQ}HcJ@qiU$nVb5(l|9mStgx-0M$Qws}9=V%N8b)x8NC}wmKJfdk7wb zv8qwVckZcu8PO<;Lu`yg&n}x15{iSW-vTFRM>LqyAE~=w_Ya#gn2dfX$;YYru(b^f znhtu&*+O~}AcF?@UbgbA@rS$f{=b z3of@9HS{b{uuLT$4L7(y!m-J{1suuid(LY<_cg^aU&dpdz}!Q4s>tx&#*dC`#cPjJ ztP!O9f07@Oha_;lLFvd3_ZBEh-GHLx$BnCm&aO25{CZyazJfL%ZB%P1t-z#KY2M&@ zX{vC8hi{#dzE-VU?$nC_q1*7M>T6oab^w4A<`{?M1;s!J5=IXOM#A;vz!XTMNJSy+_T`t{alp_Uydl6R`Sm8g@svSbuiy>j zFLq3(yAhttNmnq76)`~%?4W zvKvq~oj=n_a`ix$k`Fta#}X{GDZsZa5fkbX*BZk}Va{jb>sf`P5zt1% z!C5C`#)!zoXzl zJg!f78Y?;hIgn$3f6DF7ac^+EwdJ_|A)TD=K+q~b5hvKswK2zB*W5s-DIvToAi8~v zB?+e+imjG{7lZUw%R za-EW#{2Y>G=_kmaYq2S^c!~{+z0pO3_$q?BJ*6Ui8nf0uImERmKf^v~XjUI}R>Njee4+mC_BSHn(AxR!`k=ijci+QH!%-RfQ zqP%8zJZ!b93!nj1&!1&H6J``R^BkfOCHw@wYm0Q7OATz*Hke4KW~T5d6&S_Lk7u%r zdl{dqpd{Z@B=?E!CpurV5~z>e_g#P0MvHk_ujpD}AW}fJHl(QG~-<Jq(C5L$#n+>)Zdc2WP-k6XKmE- z+~Vi1^Rzg&6t-U?q}X~ao8dtCbiaJI_yJ_e&-?=4Xt^?@{gr$MLv`{jGckhaN zq2+;ywR)ng@u}7qSy7PEzEo>Kw7{%dT5*7#1YjKfs-TMQj3aKjHMXM8^NY3}0*kLPVHRw#D&U8h3oeTP?mEt#B$nd?fz}C%QhgjJXVvv8~r)> zyS=;*B%ou>0X>w3_AG|Gc z^Yv^e^Fdft5K=DZ1$Y=_x0IL=GHdKxRe4k`#XS>4GJJ^x>wnK1ZV?_5?b8^7_v1Ku zAYW2AorE7E>}UUq&!_-@tl@16RF~ig1|abp0>d^sT`IS+Jdog3I@wR4x#BvykmSV` zSeRlBOXhI|P|hosFrHSVof=m88F#TzynrECaaU3)r6~FLy>(A@5E4<;`aNyRr%siFWBvoSKXKzE)T%_2Qv`%)b?9FjPNM zYtsaAb97|yRp|q6FuHrXbU(%1t{FyPX9PUkFXVOuUdhW;hc~ z!Gjxa`(I|H>4*yDtnOUF2EQ1-(7v~@aD;(&`V$kL=*M;ugeixYUeBQd97NTBQVNjQ zrd*8OHp6g_9D0Us2x$pQ%cL-K2u1#B2@{EBpz2kIhjD8cQ-{rc;!%2|?usv!liGF( zfPO#lb2x(+!(GKrDbO8Gb|@Rw@<_^sf@;+J?vt7i2KAO9sr=iruMJLZ6X}S{LS0E~ z^IRE#oGE3}%FHU+Pw^{me!Ys>8IT1&CTxnVX2a_xL8dIG4+@zaaZ5?LiSqpOt?tvv zv%7t%^~8XB-y)VEUZI;OJsJHjg7!x!xKRg8ZcG?>m1fvdODlN3M z^kjYBez6ZZoS*%|kRBxj?o-#V(lRb6l$?!AVIJY)u(+m&OY@B;PZj11SO#Ean=sZ^hBSi-`~BK^-uE|%fGvL4Cg zh4sNuc9qnRfCZepmJ_(1_VY^|^DYMfZy2yc2k7i}QeM756?#8p0zmli483YACad*s(^ps)kixr9><+>V5gXOs3wlemTKI;=*<@s=Fhy8X*9{}7F@sh zD>g&(64I(SnBT%nqhgyk&v)c#8k_iLAz=rncDqPNj4I5KN`W=B-6m=m)ry}qsI;&bGPzK74mBq`o#z~Zlff?6blLU0S?$MZB3-}9 zG&%BXIF`GyUL{qV0QLlBs7gyz1{$Hz%I^jwb`%jrng}fSxlfU~Cc~^Xnae+O^0vrF zZnIi3x3*y;-fRPaN`wq#DBVli&5O7212Yz|w|{brW3=x-F1GouC=k)}dx>Qzsx|DP zDVBwxrMUK;KyU$W6ghU$1peTDL#I@f8&Io_0z;KKy7!w2Tf4H2v4#7h<7*v0GI4qd zLhkH@qzW%`gc#>-p1wRFQBdHv8F-=gu_tCs*apO4Nm$nF*Yn;k(K*Q7P;ETKl@`1G$#=+!b)q!{@psW?4ceW~J;hwVj{7 zj9-hHe8`{_Q=O8@aK~L*WSi2@yv!ohd-mqku`(u$&eXk7STHg@D=XH#yMj7{lfN$^ z_D3)y7+L!EbrY14P`O!^jQwkHpp9M&$EI7Wrm-M@^y7}wQ21C8yYGCSa7{n%e7P+X zi{Bq@m9{_F<87n7d>6Pm&)nwuzRy_pdCoGLZRWZ)oQIX%yj3KsJxtW zuWt$$wS+o}z4=E+A`|innUVdhCmfqj8VBOLdHp4G*sA6Oe_+d^df71Lg``wkkJXS! z{g_4k1+Fu$z@lV^ItUefYyu7ehFB7ZJ{&h$+L|{h94*-L8b$a7>FKuHh*YsDnELxQ zgH#(+4SNfhgY5Z^679M5NQGcIygmp{&?V+K%2wwdpc_Wy3OBByoy7b&msc1I>$+(@ znpRL)ffyYA2{dW_8x!T$c!tO18)1S`=pkx=c~aU9o!J_enzP9L&IlH$?NRw2?YTV& zdCEWRj6wvDtULH*Ef(lG!a1CHNFfBOVTvl`6^l)MVy1vIMwX)u&{U311D!Voj-A4729y~OtG?rpGrDWsJWY45|_h8FlHZ>wSgpN z3q!tIQ4N-etW1!hn|k-j<)|vc_oXor*E!k|<`R_6yWSx9LUGjlDa8OO-W>6t zfJlSt*L!$GN`h)EGQNZSY~7eqf;5Yt@&MohsnP0<3O z7{ZNbd9sjyrfHXS(Hr5Ow9T3tU2qAgeM1TecO=TY1s{NzH?NTB%g zUTcRdcd62+RO<{Qnz(4+K$197qTP}D{8l)VQlU_&C-I)H z#lx?6@I*ncO=@^I3Vg5rE5vB6GY^{~vb|`|IvMk_8$hNe=plyBV}M=2FSHD*(HB=q z{2d4Xb7LbzlyKoV(xce>Fp1patyY_z{>LivTGCth zxguFd`Yfl_{>H~)<>j1FzjLfF#H!cESIbr@J;s!)Ji$(#?t|GQJIjR%j|zdi6AQ7Z z7Wc94cyvki9x40%d(#8Ly%Cxz(>^%DwG!3H`9yLOGgFVd6=VRw-;M6YFpOh@wLEVe z!YA277nAI9it4Sx#56?&5=qm{4r_0tv)7)aw@>nL&1tw7MmKIWvS4sG9Q(;S)ow&4 zu~UU`OnMR-_>h}VXm2C2-8b6;`ji2m#@HrIk-j60=e9RC=9xX}P2~%1R=@c!xIqqC zQ$az*;V);2l1*rHW|AUEO{*T=+esjP4Z{agFq$x#Z&c{K(#;}7-&IyO9HGs)6nF18 z(*V3n)z$@E9~hj%6e{rgfV6^iw%-|K9&EV*3LXYs)O)xqM0k4WBDg_P` zRkU!GG7^$IeqG;sFP9CN!>b+EQZ_dvVHRpjrP{o><@u~7?zUiGH~t%Y&-e0y z06P8VpQU|NGtjaZ7TA^Im813g;>)_EYvflwi|r^X1yNZ2_7KHVurLMJfIUKNpG zyKFcXoit7rZnEM)kfCIo{DQMa{_r)Zw`C9Trn1&Lj9AF8jqG)Ba+<8OhX>T4hky3=zw$$eOq>t<=U3| zxvC4&jojHS>6t?XvOk|%PG=obU)tI|r97qKerAmvroUx!%x&_LZ2)VdSKEr&iM#P< z^Ey+f9dn9NH0LuWqq;2j#uV`HX(2o~eG-ijQ9B=|TqcCu8RtTU0aaaT4n6%5Cg9h3 zqFYfj&~TlZ2B*yqysm1?acEp9gHx{2pKhy=W4iszM%Vdz2shrPdwilgfqa8aDbH8{Z~ zxVt;SArRc%gG=KO+=5GR3Bldn-QC^Yp@GwR|L=@*uJ`r6sxi7pty;BY&Q(*MiT@d6 znFS46NtF~c7t%0nQ&F720(euQS=}S}l=bKlEyF|8vH#q+33skkWHB!tB9||j3k;KO zNE{{^e5Al}%V?<;bbXT2Il%`jA3+n28>ge+iQLrM3FhM`W?5^dUYctBgZ#~s(<2Y( z!e?%mf=3F`js%}OBmp;_8K1@3-YC^*&#Cd_F zdx1Nr@Xh(uobfo4aWIQvFIgkkl`Xu9mJDJx0371hj+56osp+tqm>xR}NAwaTRZzQG zb~wxA%=GLc(;K)D3`-Ylh0$o9mvu}cXq-E;N|l(iA2#_kZ9mqZY=iS4P#~@%NI7~*z(7{kYmL2Rv~ zQF+U;V+q3c(;y}Xd?S*3PbFB%K^}Br_PzHA3j9VX-#+x$gnodY&EPE4edmZC_qix+vLW4ku|mjsm;r2q8(`p=3#2N^UBXvWkp5wl}L^UwWk3C(W{_rCKNO%MtD z9K;cDqqn%s&A7gIe|y@fjSF8>GGS;C_`bVexWev^=vHuW@uqtotIrT}7|>l;%i%PS zrZBahVvccqy+8Rj>XJZ4`Xz2zTwi(2X@_*UjJm*NdkKoWgKe?;X}|U+d%36!;%Svs z1XTi6{E8t-c9k3!E^cW9))82HonL~z{e`?GC59YAH!%*y=ufI(e`nZEk8cVT+%A`PCud_ z@F}>Cd?qT6X|(QQ+-_Cf{C5WPX44l$PmcL;It)Bt@nCezrE{w7nF1dN4hqX z!ag;umGm>bd2SaFP7TbFhtE7>IY+F2te3j}p8Gt6d;Z!J@8vFr9NKSe5s``ewQFyg zx4;C3!$UlNm5E#0B<97j}x>W~uzZV;c{qokPqU_cEA+4$1)zBG4?tMWVPT1NO>lAA1x_^iS9X zF3jC0Y)J$;nx@Xv_t$mNQ zx-pn=*%TgJwq9?Bb=SZ$#i-wMJeN)ipD`}dx8Sb(Bo>};4+V;@-voUg&lg_}FE0e! zSab^qmIEr5XVrd-`>e@~D;orKmt{AW*z3Xssh1{O>!pWaqEm#Pp3TdgmpDJ8tGy*H zHZ++OPe>YRseg9(p}$9bUS4soTHo685l8<$wO@B!`Bft8vuex&)|X#;J|!Gn_tG&h z^)?&b?mlScwY|LvkTN_*qMrD=(~=8be`zcHup3Zgo=~e@N{;QqB zQ231wAwbJ8mZYY2K_c|@VQoX_ToCraC`Yu(G`lK2%{r1VoU3uf!miYghl+Nh_Bb9K z8`epl!s33Jm_+pzQK$gOoa;w>9c81#%8|v1lLWdNRu6Z$rBtZm+Q6A0^*8LCLgkY8-49XGcb+`gUw$n z1obJz6Dfc`07{YO4j|~6Qr=%sh@;e$q*I=t@Yj-9W{D4e+2(3}+&(12n`QGK;Ve?5 zmVJRAq?#eVQnET6-omVneVh4f@!Q&clbtG?C8xRgRQ9of*oJO!(>?N7H%=;$oEzAl zX@3!zfwNN#7>rkSLiaBd#`#fq(KA9J7i)jqHjwuhhHUA62l4nYFGM}(Nk*>y3qF=Xw(c!(kjf{HqK=Ua=xY7^uG>z-h9OA~9C#JgVV$HX<0#H$ls`ExyBh;?3FXk z=eJ)aoy8k>vIslCV8-4KNxNRr7KCtUJKxyo;8ztd?pVIN>DVAsFEZC2Jc1-@wGD@Y zq=m>ki9&0+u1R>k$0Vk3j-M$+(u*X*)M3*9HOo?a_LoxKI1JZt)8Q)&z`FZQZjN4G z+oX_~0cScuFJE0tFdqLodJ8fPh!O#ClS+q%iHInP@F;o}_SJ9jg7b>vBW(9ql4GM;>1B`hT#%O> z6RoY*)t5UGDHI0*Q_&Kb=0o?Hw&Yw+Is;|Mh0#<}@qy z|H}ekE(-Ttrna&|_a91G`FfI7DI4v+?%L{oKhAj3ME<#Y0h!wMY2^yRuGr^}>@Rcr z7yaC$$VQpfUNq+n-`+Gw_R4arKKe>Z&TeIHk<`q3&vp<^P>pjlKZl)SS8*+@PjSS*^ z`Gu#G*9HB%Td3zb)z0XqUo5^|0dS|EQQq(~_*qLpS!8Jv2QtIe`J&_SbEESsD#8`~ zYMSwt2=pNWYv8BK-t5w<)p30JmyxNtz6rCk z(wVm^vF$1~SroJF#oH75$|m>q4<;qw9oNEFR7fvy(AD}sw{UFYASbWKl|P5mG}s#I zEY&MS!I{5JHv``;;B5M;{4KL`3nFrDZJC`IgB_H?B}dXcy=vN`>Ql1Ne)FR7IFPYg z_rl$ffv-6Keo6qWJm0)@qKr$FB}~i@b&kq}34-|5z}GG@D5E@{EwKD)G`UIgfPSXg z+c}!d^o;K&SnIG$5&#bo`!9tWtCr&CHG<;u;`#2CGK3ruD34U;9*Phno}=x9H+dHG+!x>WEuaiX+fSvmRUm*I#-LR5c6PpQimw)JlyKtfeN43^<0xdQ!yvTFCwh^ z!4kf8G!lG4jtn|&Q&`2e!9g-Mqc}{C{fJyOCYSo|G6$C5jTO5L!3mu?K?mmPFE!vW zutxdpVYWpPo{`MpPpQxJIL&PdDVW}37^%~m@!!k0>h!7VKJSyW-@1?(J3TNlw&25N z$QaPvvvkcwhTVy5v^)$O+)4xuW9^$s8(SnN$D8PDb-boMo4m2#v;n7B1Z^bE@`LW= zfhehM1Lj#{Oq+~;8Cqg8hj2MzgL;v#MG_c(PWa`95pq zdX-TSuJPkVe7G`0E+?n5xhaK|skytPIhJls#@hv# z^z`e97D-Q^wB<)AAKM?w9}G6gfe|tGry6?%c`+U zVYT!VO#Z25wnMwGf;Ev*ptg&2h@{qlm2Ym<)2Cj9yt7kd z0=8QxfrA;bc1xOTb7$ z+0`0a80xebEZQoVNBV5E(cro3xb!``F7C&cBQKgs-j~jo>Nhz#Msc#6O5ZutA+h6& zQPbk)&Q}l92`gF zeu{9zu$c5rG%1?PESc{L2q_kQYAb7M)QoeCf#Ct^YeX^M9f++mN3PNS!ZNo?UGiWR zAj_xbT0iOL3FtD%GBcO*oRxFl*Ih5k?WTS?TfX(un0R@R&lVb=%-r~s0^K8kWLlwD zEr40+Y1o_pNqdq>(4jeFE${*W>>P67k#Y+5j1S9q2F zenb0$UN(_A%{}rd_F7wf;&;U>ngO$rr46|OfnUI{;+oV$-SXS}jkGd^0zbaCZ+*Pk zLR8L@27g^X1WBE~6^B`;wqRHjS$xa^zZ6sXi3J}VXU2{*y3!W}EPqjJ>5Xu7>rm+s z_96vz1Pt#3pCihDaXB>y5^#jw>Bfbx^odzxbgO@cGNsIsNwzca3KiK?n_Xv!kO>F$ z0-Iv(=gAX8QAscZcxMzmq`Z4&U>L!{JoKk^|bOWU15jW%7d0-U0;%h;)G)|3@N zU%DLnZDJYu5v+X!KsjT;`fC9yz};GCCE-g6A4%0#1!9QA_q#4Ra)#jF)G&PM6KtFS zF^vi|J4>90OI)}(LVLbC4gs{`chkQ^55Z!R>g-==es}r4>uJCF z-Q9kq7ZVL^S*p_i{q2u%47A2$XR^Gx%TN;h# z<=Jy;@8euiP`i2|;=3J+)N6UhJV<7Y(;Y6C^3M_6%QYsN*hFucZ?M_J%C7#5xh+RF zsLOrQ_Z#Q@&3pM3o2o>!h_~X8NMM*f^9HC*&%|MuXuRWam?XEZW=2oYL%Ei(=DRu} zBR*6bx?z=cP}iAGd*+a5xDor9?IKS+VX!S`AeFgQu&;ie)>SKAMQgfwyKWr|O(dr8 zwdHT_T2Gm7xP}q5!|@ZG$5aqWs-Uz#k|~^M%wYiTi&Y4#Fhwo9zE~2X&Bz$hd2@XD z4MOo)@pmPu^g|lJ=9?W2-jx^;jqPCgx1Tp4o?H{qgPq#?wx+?!4$%UQ%OP={+P2Z*Vx`tt2WZ1D(iA?wunk62C1PYC(viZaXxo;OLDJxm&IG^MCzI0%h zE|$4IhM89B%USmnpRaDdH0aQzbi~`ASaR$P3N5^+aHUl zIEmBuLsFGBtb58B6Ow@LA59EsS2UGtb^p`ACUod@sd*&qFOV3*O5 zoy;QVv!me$&-c}xru?*;C>z!$P|(IAsn^L-}{{L~ln zQxt|Hqk*G7)^e|$6+&IPH`YaR$SOso@IELlMuc|85nT5;4ZRCs9 zrU5qJQpJR^FiOIH^~gJ%GzxIzLIGOzhZYzpn1#YnsO7$6V?+(-ODF6kY*ff{fTW54gBo&Bq-zo`A#PKhX&|G zia7@lCy^R-R7f3@U%r*V7(J?jw~w6gtqcXu3h{n$RCG6*Wo#1%t~9At)g! zYKj@`i8~63Oh*yyg45@k28Z}mtBx+rbDoG+I!Djs=(cJf{{6&z5=b7c*Oqf6hHFC! zv0x3MY-x@HS4I@`Gr0a!UUN%F`$U^%v0B?up)ehWgY_cQyhn!Zl{4pPW-nt63tU(Y+8Xz5QGz_<0q^54xHrxHx3TZ{Kku&)vykcg(pIP5so9=;XC=r7Hf@C z(R4x*Dun`KXR09-vRuLEsjUgUaa&Gb7~tS_r!M>U*hE4iRr9{2CXMJ`6i#~o4;;Ur z$4*VzOr01fh|K3lQSpzBq7U=(PC1^<7~xuG!4y!a{_42f&r;ubphovTBQ*tI8u7Zp~JETpK?gnZ&jn4xVm_3~F`eKH?!a=@){cO0+CD$6nK8y*z zq9X@%d4vckJzuQ|@qUEM|NLoHPL2!byuFbadvN#;zj6L1378Ti20P}Qlai9&@2-#; z4XS&vLS2fS+e<=^EKdtz=yA)jsj}}>)|nUHLu3jYoOgVH?ucg$VYiQK;(#fnaRHkheV(K`WwTq>G-ps7X=+VvAt@RkEga&2c)bCIM ze;+t@P>JWH0Iu>v`_Pw53+k2<2m!;gusMd+^@zM_Cj6hxi&+?Z*@JW#*WQc>|4PX4 zcpqe%OHH1dsaBvDe2O^|PNfY_u^jTIXcVYDx zDVIUJdvuNEd!EK`znm)2$ZU2uceqQV^n8PGIc9rmDG$H|HdVd^5+^WkJJ0e1v?I$Qlz#38xelLf0oz?@%jlv35}%9lguAH!hOT+Ie%1 zBSsHHV15JpPrb7xIoN#^PjJtFw#9ioka%2)D$S+Jd^SJ%kzF4kb+p;PMF`ZgIlqg6w#DrAEq}?X7_?n0Y0Z~oHz@Cg~`Adc> zLSy)a6U>Ofh5UP?vR5>;7Hi{OO9fULpomc&Df)2kmhx4%Z~;<~h&CQ7t6=YNVx^JC zo$$-Y!d=MyP3#HLY=ze}Ah*{l8F5KTgEIIlEb>)13{?Cyjxm;l6|+r^EjKR|Mss+k zbog7WNLMI z;$7A82GP1Xe1v%h8T@)}tt38+k6pV$BGn;p1!l3j`fG_SM}hVC4kCDWavUSCcrSfR zB-et4!&s`9d@LV!)!V++h1o~t@3a*6?mWV0hwej!G1Ut0peXr(rqAk5D-SEJQx|>V z+nIAWQ!jeI4uFpxZ$fii&lA5pk5I#+zR_v+fc}n1;JrI?OWmuXda8{g-77N=PIa)S z!Fc_q>U-_lxZ5}V8&t!1j}{;~({^=iCq~br*Y{JYL82o`do*~`kg`G$>S^75QxLEJ znT?b%jz|bv_G#)$tKQ3Xz&M#fkGwOU3O^QY4}ua|0X@5ennjb&4@U@EA&MQ{R4BOy zjCY~t7oyntR?VO}FD%{!9sx{SgtGqnl&}Pj1`Hp_&TBxR1Lqh8pnV zOATV(4d)__V~rsWPDXC6jR%j(}Wj0JHFqh8dPZbd8l#7t}Aw^`+62p)oYS zB6K0nuvsHyV>!M0zessOZV2PwWh@1(>rqiXNsCoB5q-S1O_7vfIL44=yX&H-rUA&g zf#pXBUpMO}vaC!C_0kOF7x;b7XOn+KH zi`spi#(ON4+jpQaAXq?dwy=)Z$+y%BzMWTMM*fu&CWxM&D-Xy(=g`>grY6qC&Lw`e z9phBW6553|dV$pvG1RZN4KIx|TrE1{S#>*`)5b|@BaO*FF;27l_Jxh?xdP0csO)I& z_mkcV5hzb;#)H`{=o!2abeuvu0nG6f)I7|yEn84L)#Q*4R%1-6QMORSlBN||hRWeE zT@{dis&&4pTy5|vHjsl4gxOA|FFyJtm-43r)m@DG6Fe&MLvWd5FpR2LFz-t@>q2)L zO*CN9>?1&&9G1~O9A}$STU)?xxnUjY9B^WHZnuH#o(tI0TFw^NW|7maH*VHZRzH3X zx7xgDfAwiiMTQ!rio|((>Ds%B&wtkq23}=Q>fHAu9kxa~{SjhR!5j+A4ar*ap$vJ2yDE)5&ga1fz>yjqJG(af;sddWjf9Yvq;^VEhuppd1Uc z`15&1|BtufU{<@(8Y5+?*5ctqG@(E;y7HKN~<{uM2qq_y|tZBxWSQY7j2_?9n&uS<-PJs#h zg67;djCqFknU}8oYd#HxB`tdTBMILg?ukS`gg#lo+d<>TgQ>;*jhVi(5Lvf(N>5o$ z6)k1BTa7Yp@J?N30BgTkK9rT{EW{U48R@H^VL9busj)OCW$INJFHPoVd!x6#Df({S z5`0|c2B)Ked*{L)GBy`u_daWWS5=qH!3DCS>R|Ba4l4Z}{Ys4U-`l7aWyRcPXbMLSgF7FJ8K->cjBH4GXYAUE7zE*56=gFZ50%M?=z93DU-^{J;1L z-1!yBXRrj7rVNBn9o?4F`H-N}_X!s{-k~A?j|_*2aRls*?OV{v0OQiS(1-j*!eJ!I z^T~L~MZC$dMA;O4V=x--05$|emDFW-W6iycMmQl?>Dik{F~0>$-iP%RpjeA^EH#*9 zo-B;UtT4^V;N#$42G984y2t*gPK@vrQEXi#!NGKQ0Jb$VgO|O50**rc0!WY<>ebV3 zIk~Ci#ReR-V@D?Gu2(}Cl~#r%cGo;e97AZqN4f6nr_>|zNGMq5*8J}0*95W0YQ>&` z>VXlKlx6UuYhCFJ?KHWU5wHpwu4CuX^m zKA0y~q||OSlbP3)D6`B%SVj7C3c{?btuDtk4)BjK*`sU@z2A_bR2UNYPaveL@)+;X zP!=G|*;T)wC^Y$bIbS+TtHQYx1m8NHe{xWC&u!6+`B*IYWTT8dN}zOxcti7?12y>O zI{Cxdd|YN@a{K+k^>3R72IU395HsGCuspWx9P9x2znj;l3fKEoY%r3Zg3YRHXXPM2tf}?wqm!!f$ZYRTRI2B&OpS(9&rVN(eGe1 zKztm!GA>=Z;&T(*=7n2Y_Ov_5_{ik%7YuWgXHRr!D9nS?GeE4&oVtu*e0CVml^`EU z8*R#vOltggw&=2@!q6lu^S4igm_@lzzW$S@CR zWGSp2!A{O;X+w$=M_ecOPC$K+{8|-iiD*TvzPi$q@)nmfHZKv-8L-pEugx5b(0ZR)|W(bvb4O=(Py| zsCK4yzpCt|Dq`}@b_i+}LkE*i6J>IJwj2L3p26VFi+`hg@qK9JztI(gAdAL#U2x^0 zH@bbQ#?ns+aDxg!$^B@lV*^SLQC*5X+sG#jt5CL)Q=@hU=R|i!7!0gwu~Risgf)6Y z66CfO6fC_CaL8y5FvAOD!5lUP2?Yv@dCLDhug*^`&Q0r{Lkjf-%s+zzf=Yf*E!TzL zv^kc|ppV>2WGTwh2U0_;24th{!8!#VV@F~cOZB(#K1FWH^}6N|1$)%V2j~9G*(wfv zh@P8G3h*%fn%EEJYZwxadmbWF6#_yJgHRQP2$6ZE?4+tsbCc{NoB2bTFZY*xB@%7i zWu5<@HnXX`dV@5>G%KdQva~Eqv06oNz-&~`)htPQv4R%`&`F#fF)pUOT>Avr8Zm_l zPr7G+R(cyIITS|$yU*gy~L)`M7cRK?9)Hz4nq9Wbkx6bcxA(qP${!f_nf<0A;)nKhibs* z5^n>Ws8_fJ3|w5bsOO@}~}#RIT;~&q&+~1eK^^+#YU^pM9Q|kQ$5zCl6=*TNUALA{|#s zqNK%oPs5~tOvJeL)6p@zA+N9kNlCYMYn>zt;EKI~Ujvmd*attR#{QIqx4Tf!3{2Bp zhni-Sh1`}NygXlWvp(j!{^e|;vn+ZM5lvYXxpcIJau3M_Km1K@|MP20K zh^|$8$8yJuJNJpz@LXe!5E_sH@b}_Ou&@5ilJ? zkQAYN-IHpS7V)53G>n4iG2hLuh5p02gJ*yOs`v3+kZ8Jw>mQ#xOdMhxvzAakqD?ls zK<3!G<*pa$3h?u*kkXEKioEz8^d<_?F>6ZR@3@M>NL;U51~L46Gm$FE(SYYq&lfG{ z8kc7q5miEdzhVssn$_d@_bILk6()Yx+knUm6OpXQv~kRJC}m(x%>u))1Fzfue)S__ z3tI3ugi0LbO_YWymkkcX*#JFsBT7gC+~vtf2t?s&KOzA51dy4pUqVS?CB%BIh`T@6 zbmt}B!Dr(Q=@v-{T5241(rFx>(#0Y@TMeG2%~GvN8IEoy5Y;%Zt0jQ9Pl5tk-paI>7bFe2hRQ26H>t^B%^j0NshQ?`b)cF!25$$KPZ!?4KwhiAY6= z8cqM>Ov;FW;hQo|Ul*kQ$sHCbfQ6`t$$_96q9+@%U-2XSCh7@FFj6h)SS)yjzd#=Y zd?dOCDUr()AJb&wutDFb-R18Nui({a>R`&ogIFS!`8$A_H1KmF;rRFP@>3Fqzdq4O zWyw5oiJ($@&DP}92Z)TtqYK%Xw>t2@k}09Ha-dk+OeJ4uTmpeh*83D8^*>3!1J-ki z-wk)rUIEYwuRb63etbnE>mOGK&3(C#rF`|Swlt+|84K7%{K|W#61)%6S%O3#>=TUmRnu= z*$}_@>pyg9@27tN_xlme*8f1g=um*fW`qE4R6rmTN$^Bm;MH-+e&3j%E-lKSxNk!u zhAMj1vw}Xe`Cv?Kwty(OV$0I6Ki^@cgfacdbbveOdqBVxVtK>(3XcQ@g_2~yXCN$y5I=m_<_J5nR*LoGWx=(L=dslyThB z2mbYjR0*=yW0h1hz(1tTwq&zWbTeFEI=F2eF&o7QcGWW}i7m49+j8Qj6&>D4*rv(# z3y=MOEbM@Ie=y5F-Z7~x`ae*+sYnhDWL@zte#H3?cY{%daRb`&?yt{l;0Oa50t}5t z>8F@5f)%RpjT!Rs$8MrLTD$nFO_Sc2RI+-#>)Bf3$U`JB0H~AOvvz;j1$l33&n^yu z5E7L%)Y9e3Dsb)pN&^_yk%M`sb^2PTDgQUHc#s@$mYP$1dwUW{GE!fQ700pO8C2gq z#`{?=MyhNHg!sCZLg5BD-Fj=f7ij+z?Qmh>enUb%DgK@)(`AwLC_W)Vy*EvdCPKBV z<@zV>yD-9pchQMCILP{ALwp*}NuYk3eK^+E{-c@iks7ufVK|lJF#aJRV|D6{AUTzit|NZ#yK4jj1`tJX|>;HpqX`+;szs27c>4Z>I+CAJ5qz$4t6STc;~cKk~gn*Mn~s8*QH4 zb-wg#;DtdBqnIsp-tjVD*#ZKA?Bh7Nxm&?V!bbabzVGVl^XE^F%Re5@v>x}F{dnz2 z5Rs7Hn)rU~NHjWbi!~beN7(N&m~6&VNU!C`3Z1~2oZ&0(zBo2ZEyQ$Cbk#m5f#Jx} z#QY0_*L_$OIXR?uWZsV#u9E_{QM>xt0-iOmN7BM8=bx3lcK{p1>Xu=@Jft%jiiKgzSfU&{n576XC<^w@pU0qX64O^r2JYA#L zz4dop-L>+wh6b+3`KsNW9S6LYu{kX1~`)KW9%*&x-o`d7mS3k`u0ERz-wjRsn)K@|)n1*T_d^r75`yr=%qA=nPQkfJ%dPZY$IHtL zs%z8k$$Tks3X|RmkMn{2V0REae}zG(@2rpSbBbTHICtm=gMM3+IJbp1GUeQ>010Rd zp5KL{X#7@j`_WnW(Yb@s@6p}Qy>~@LO>OpiwGArSkH(iuy$)w@QC7Rz;Z?Buc;%LJlE7jd$!>awMAyLFG z-hdDSt=_}n?cKh2mkUqSsgKp8%qaiLV5}pF)y!;c{Bgx37@FF;_NpZGyqB}qdwk+m z{0Od3_RQit_yv-Z9E(_z?$rCF*TyADp$4tdMapskiYwK0W z;rXdHk~6QHcFx^?JjH(Sn1G2Jo1g>k*0~hEWS?Ea%_Ap)dSVa`{sna@dF%Vd<-7fg zv&CfA`j4%yfX}NqD?CJv#{=k1$Rx9Klz%K;UF);;5XQdYuAgtTuh!mFG28C4Gq;rV zT#zj%Cnl~Nv)e-!I zEb;NQ^Zit@pvy+Ir=v>2J(`Ck8sRtq{rRRH+9;?F+u%@LXW&1MGE}x7k4XJj>=ez8-ajmj7Rhv zoOHZ89`MV!h@$4}p1g(nJ;D3YEe2F4G~DvKo+P%ORL`1HO)&~&VC zB1Z}0cidUPx9DY651HD1{Ncg(JEac}Sxb)FEnn~!S}k=K&t9m|J4Kg4PvvshI4d}J znmIwXsZE)316M$zAP&%~HE-U0ZQncQ?p!ens|2HQ{@;3;xaL81LO^ZlVMRENb~HpRL02A7lRD*aHg4fW{54QC3#G znMmf2ql>oNi7V%Cwn4HCePl_Nh9|JcqAZ=$;jFuI1~0!%&Q5KN*Al6lR;_B39kbu> zir+l?Bu2BrLXh98pk?0#zNmUgB5e&ShD7*cop>gz?6(1E2ltIk1|b-+wmL5LTe8%$ z;L}!62Py!~ z#4#%iy=5}!I6Lj)`UP5wG7eo;%R?z!bDCs0RePOXZdKnvaG@yEXX zUZXP-o@G8c+wBUS9eOn9yT1O#Z67?ht;#V?ZGphh*qr@xO}_!j%^<5-6S(-o_exeY z4>kB&tkGmfIiaImlDYAA7ONS`&PY)Nzd|t4`2|Eq@|uQn=;h2<^?K;#$P7LvZOFnj zW%v5vRi@xe!vM@NNxY88LN%aQ&xN0Ygu^UuH$AyxiTMvkx0mY%N@lT?e{cG zB;tnX=ptPxmogE%+`bNJss@|uYp+9OZQPy>$qZUMo37V4W?2b$m0Rtw-Cg7%k9aro zAYwvcW+2+6PthaorP+$e-}3T%ZODzrA!X6mVgBrw8LE|_O!R>yFf!EbRJ`SO=6u&v z`cLQMhWD#LT5oDP(|9UtuZ`bl?=x0m>bLXF_wrY;l6;QZEgV~G)1bT))IV_Vd|iK< zwBL-sml^Ubxxs!VV-dX&gM;O#-hMn^9W)wjdXV$vIQtG>f+j90Z%+mkd_UecKi=%!VwR|l z<>+(C(wKcGvO&YyF8syq?d{^+_A8({vRM|tD1k&0p(p;KaE5cw><`dk!n4@B%PLre zbSh?Lj|(L^a}K%28K8N9G~>HqQLu%BJ7O;=JltbJ6}y=8&>(RmYP_BY{rH(vVl^&{JE3{14Cemj6&C_|tY zmswx_0A=688%}kwGArxLK;jj!c;#2<%TmWx50a39wLvx2A?P1sys@_U<=yXL1Nv*l zZqw_zr0yBHh5rzQC?%#Ljx&yII40G!Q=A>_>Mx)ziClvV(0263;y)zZKMsN74KEB>0!cborB-YP&Yj%=&&8mvpO$K9P0|hVdb6{IxmV)gK;yo{=C{(@ z3cc2e$OW=npM{BP{r(*sJ_12VgA;QgjthDF18-?`4hcE7CH@TP8{Z_Z0g%;T;op&G zWR_%u#xD(G;c$xKY54B-xUKBsC)RcJXBD)kI~M}o+3)Y*vk$0^hiA&QeC^fX&NC8{-ji; zJ$R@eeZAVD?laKnQr$DVGU)>aeUH1MwCtScc+agDEv4c@c`IW?l-FI=qEsidZo#ZE zYG*{EgTYKABM^i5&@l5OpV{f863_6Zari9e7qh~xz6vp33^Pb}=vP;buvaM*Q>}cC zCc(nr84$+d6icNoU5B5Y^to_8zqmIeS1BW&ovZ;wfIAwCAiq0VKb_+NGVR~hU&zx0 z8$G9sm2SxtA1z>9VMyc}bzkO}QzHgjm%6M~)_o5#`uT)B~~&|@Bjo47r#YYyCP5kAGotp(Yi2lL8@Zpk#b zc2;69jRhbP8PU<~pV^XMi0fr#<+z1b@ajP(zWZGP(C3yIuIROYP&YN6!o`|?2p7>9 zTW1uU-jpA>L@w*lu93@8c5(llE>rV1+zmLHrl5bTIWyATkdkQTa)E#D13UKWuCOJ`!9D7a)FGW1Mcm{HWvn(*MajpM;|HEpY)nQ{I^ls?;y1F^xw{|o+_A;IQ zoQqO~<{skf%2l*;?YrsocpRDR&q6qR3aHXE>Gr=?OGB;{QL#e9E>HMM3 zG^e}Pu?C(YAb2xQ9@M24#JUAu%e4R?EX5fNv`8x+%Wc;zoK)n; zZuhtOZLiP0^)B2K+wgS?dU;G#$rpZUzO#1Tw06F>J_D3grBh5nT78naP`ftGloiwna!@K{co?OV8}m`=$nKn=w+)p$l`phNTH#bImgm&qP@@fcI@9^P~HV zk;&{!O*Ch#@6&cDKRB+#uzAz|39(jSh+t5Fn-O(4O<<>{kj5rF_TiV4+dco+&s-HH z+^#!WZw!8N!bOr=3B|10aR&$t3jEp~iJKmXTF{BbJ_C^$n~ z2|Jll$r9f+GcqIr$Nu5>2ryV4`5erq&)tt;tqGFtKuy*MCf-k+2djB=`(O`3JiDaM zNdjaBkLee+IQoLqAqS#8V`yJ)&WY+1M*1=QJ%tBUNxhYICuWCT5V%w8nhj z?ibxPRr>?^1yn#Qm2c^M7;!OqNI$}d4x~NGWI|U~R<1&rfugv3NYDXVhK5+oJzxZM z3DV*0WfgkNc)DrTA<3|OS#nyB+8E=(m+Xbr!6lX>s>XR>vT0p{J8TClK>$m6v_RJPUheGlRsFx zdU$o(EHP*!VR2+@A*OmrK;0xRnwep(63%IW&rJ};K3$lXYM+S$tR?+J8ewo^BI5E; zzm|PO{^Y4$vZae!B+3jCfySo@b~^fg1|YSOw+d_)ZlY0$wHavwe?AvFWY&hIRf8)j z{SI;Q)i7WQTR+z3n`)W#eW-n#A&i@!j%^Qu*kqhuItp|ez*KZ!>SJAx9es1_#a(ib z>3>oZyidGg(vaf{>%)f>UAU`r_K9hnx%0r1YF-By@n(2a?aZGFb%NSdAv9JZAy8YN{1~8pCBBs2=3O;CV zEThLH{$bY?jogYhwxIdJ$M&VPBIDoZy^a;j#;pYU2!8`P6QS?O9uQrWX_gF10Cz&; z>OhXvz+noN8Mm^z$-5+wGrLeCJAKk*)6hw05jPlN1wydJ$~0WRIsI zI&l!Hw~_y+jozj6JAhO7B|dK;S|dKfTg{#RQV%#Y^i{*J;*GiTBtE$65%8A-SGi6-aC36YsBa; zqZz-eC4+2J&SR$Zog)#0$WdkaSTN4@<04&r2VAx!|DZc#E7=yz-r7j#&;wY0qSIa( zhJ>o$O3O-LH;Q{$cGkcpmv4ffIYla;!~iK#1kWd}_JdF?UHDsKMKP zg3S2!mMt08tjcMr-69rdNQ?nh<}J5UOtWZhNU<~^82H+2kmfZYD+ zj_8?P>*4dv1D=?ILsjS?C=|IhqX-PRR46g8t0-dr2E*hUEQf>I)GITop{DR6IKLAq zjvd;8xvA<%3@$7N^fAXt&7pcutNeS+OA}F?l4E&nF$J##R&(R2E*5Vn40b6hCY{2` z;ZPr!8YrHwDpqKsP=?&_Wpr~V#yIL)J3wC3OroUw!%%FD$UJFR6SlJgBO3bvfIvP~ zlci{=;(SP2M;`H<&F>8HZD+rXHA$&1;m|fPv`AN8Y;K)C{gRX_)+FcdetA~tcV7AW)H=m@s5fW8L!;-?a(wA`1wJyb4ZJok~)j0OKzR;Z( z)ap-rTUL$DguV^TXoyYyf0+BqsJNPDYn%asg#d$VAovj6Em+Xt9wayf2n4smoe|P67l7?mD=`cX+P6x%XY`{{H?jYdCXGpRTU%+Eul?TBH`ssEmm2n+)C%sRfN7 z;~5EyAZtEaHASbopxZa>o0Uv>rk~^RhH7X@!jvtOe5-I`I4*8h1_4SA!@R~mD@g*O zULQ7X3X?s{`CiVE%FT1~Xd@t`XTY7pcd>A%xJT;X8pl6;>3Rj3kHyCcpv=0;Q9=cg zRv|i_8H??IR`2pFiA#5Tmr95}yiGlhlk_t1%iN*}$aNK*^=I>499ed|{0e&h{GZ!r zp4@$JO{5!>h(A$8gpDMOYf=Uv-8Gx=2lFp>UZhz@>EBM^77-wgSIu-P(#0b;0os4nZ`FS=G>M^Vp~I z<9aiPkoVJ$XNj3)$ilml`T6#xd}D{Ji?jvXxd8D@O`IcMXO`qXS|T^5smf;b!*;Zj z--~b00|H6|OotMXxt}Mp@W##Ty(PZDGNoog5PWgF`~n?@X0skjdE0X2#Wp6g_-TlR zasP!ob~XxC0NlviHRGcW^NEXbSGpKnjTH)ZO%AA3T8l-?6yAPMy;ejGK&yT^yi2)3h=GGMNlkf9^TiYy z#N?Na%yAFFr?*yI{bL^*oaM}pOiY6?97m;`kLU;53`$zk5|QbvutuV|rOaB5L?&J} zbl&Q~-Nr<^Qr2FQ-x^Edn_kdvw}HY%LR2*^qS&PfqJInLN)Eq%-o|t`G|9999-}T? z<7gUGoJErFyZVwyvU);Ng;NOq<3`XDv3Au!Gp>)c-S)k#qWujb9w-37Z!mfoI?}Pz zv=OOeW~jn2WAb@05gU)wmVizKw>ICn@$YrU`n;k3yb9i(cZ=beWleb9$>JHAJIv|T z5Ub+}UkLn1JW2Ua1Uj{bM>xUl#F7pRSzB5YFLLJJ7z#zLbmrM)%W7KGDU3?2ZNG;F zN)16i=QblsX2CbXGyH_ucS}OfHK%gLYZnBAiRyks?Y#DM8POb<5D<~!QB*Pc!OjUq z_!D|K${44(W-d#?55d4ObQ1 zE(51&bJup3&$h$m)2%D}u%JW=4UdF-24J)Zi2yL2NH?(*dE~CilJw`(ky*z{9qcJYs$pss5+n zt2Q*(*67*t!(<&&L*1*zC7&>s0hz3 zjr7~y(dD_(VKj|TY~iCdaa^eE=qSPgCT3N;N99<$ zz8QJNddGSK+)*bIkB*Bgc$-s%lQ;9`XWyW;RECqBUjo#m%p&pHjc=Io*iootCn$-4O5- zQqN|4YK%VE2MCMOThMHy9Hw1k(h^V3A6T%;Vw`te3Eyhw4Kd+8cXKIsShymc>Fus^ zkt0%Kzh~qwkeTZBNHec+B;Ebd{9m;IE?|btI&L<@^R5TXZ7PFG4?lG|=dL}OMMRt* zY*~AOXG?)~ORm>2LHJ%*Q{-8jQOm~$-o^ajeNf2iBlL{98Xj1ZR z>D?}+pL+07tCpLEL6Ab4@W=2->{n{R-!Yjn$SuhNNLqG<Az!ARt(QevUdDf1C>&llDr%grvksA~mH)an`%lc2^g1kl@y zp--dAAKkw331jdV^LV8Tn^G_rQvF)63LHX-G$eg3oE(?+NI)`{_hHSqLZ9)TQO_^K zr;{g&zY9q;dUYTvgKeaJaAHT=^59Rr9Z$hRgh^}upU+rd)Cb>sNmos7W=!B;p}R&N zo-hTT?1W!h>ds5YTm&j!x)|gt3z$ye+?q8gtAe=NjzGK!$)FFoFQ^-pW6=_qoRCPN zAoxNGT(I{paLJVBi=>2n5z&`Tb5ojaHeQ4%Uz%m$|Nr$N`ipv5T;UgYB;hcwJrXIr zbo;+P-ioycrl=^N@c!42|NBrXY?Dc6qw*$(h6>jjct5d-qe=(WGz?LV4R5BJ63QlIBEfc*V#|2*LpGCZNxTd{$) zfA!}-U-AF$mZ1zo%>Q~n(ML(crB<&MAVj{@HJ&Yjp;1{-K*y|8{c6E=Ez+nv1Q&Vj z8c{ln=c#u*%9nyZ}a)I z?#fi=gOgUdq1emVi|QL*Kp1DoC}*nz|2-JKPrwBQn>5B@iv7WK222v+VHL~9iWD8qdjuy+^PB%r#lLlGz8`Yv6ZW11o*iFvv6A}{2%|=p0 zTkHNf>w>v$v@EQxG3M*+uu-u{L4}Ix=$}7-HUf;f(O?{dgNnDoOHln~6{97HE$DB} z{1pW^{P2b9x8rKG;7JHSPCXEc?*ewe{16%4+uK7NTlGczeYP{DP7_f66{~yex=;9` z!v5~c0bicAnf{uZy9~&6}hm!kl zsO>IXa%#;aTBu;h@$r}Dd-d$C1l^BlnRn~->g8@g7^o|Ph(nEXP58V+48ioKldu(M zG(%{fRj6&-3z!`{_uR1Oe=E8&7w84Y!Ca-OoPn+%L2u`i>IMVQv7hz)t^<|A#wBtm zCD0W!`cHUtS1|U>kmXcCanO1Y$;S{17hY*t1E7(={7JBJt)55(d=y8jnKx<=+7AV3 zo)4#)njQ45!Dc~sSmc65bw@3ii?C27Pil&d`K1Tvt0|HDsk@p?HPom1EG^*5@b`Q! zLPwhZpGOE$ zgBpV*g@`BC1_m7P!B^6P@=R8TZZbewY zh!;mW!&Lqr@o{q;!}lbeK;1ON6tYgG$1^4KLo)x1&8f<=;U`H3nP+-&FTZa53UB*- z4nKeqDe{SoGeAE!M~H;u2!UP9+tuM&(J5toHyvuDq_5cGseYG~S)s92@~spdWSNxd zRwRtHaQFRYu3K*XuZ2Ujj0(2kIEGw}|6MiIXQ2+3Jmx7iQU)^!;tqi88vD#|f0SZf zIx!C-1Bu5!s})97z_B(zY!IOEr%H?et>eo0pk+EDRW{x4c7dH3U~5^3l8No0vx7?noNtqf z_*_k8OWy>iz;Vml%-mwJWe63$;?iIcnl`g*g&93ldBZD%-v%BBHNM4v+V1DuHfHAj zA)mOOO-Og8+O-lDD5j^JH!kfVKTR{_aUr?CEzJ!zLOmB<7QUFW*q*VqviC`BX223~ z|30M}4l3b50I=VBuM-HXiPVRTJ{KRyi6_D7_1<#vrY|p3;Qz8X5KE7^X_k(R#C=g= zBtq<{a9>mArO=XXB!219cIn|BHI0fH6}&6jJ~CF4OV<42Z(FM-gkV8eTEB|ULSLFW z;cnO|=?c)Px`3m=&jlY&2bs!>%=|s-^*6~l;JX}&$p=?`L+5x}k0Y-%f=_1;IBzGF z>GU9v8}A=XgX>)xOe7Q*Bz!KLmJVQoUTaM6ufsm>ht}2dQsS(LjUds?8*)aiZM6gg z*0v?MWo!TM@z0cK=gz3^x%_U#E|rPNHer~BzjAptrGz>>4eB;}1S6zst%~}>e%N`* z>B~4q4Q*ut6qk3G!+L%2V*MxHo5|)sf@#Th_K@bi=d9_pl>Xsn1V6-`bieAR(%*gIAkYVZ`sT&Y&~_;Kq&|``A?v@@rvx4z>@t zO%G^^CW(JDNufAQ-Fh8>b)EyB0D4kBtKYETMpR4l}!m#0GJX z?4QXS){a`roY!S0j^l1CAfbM^qFNE8 z>lu5cm~5#RqlqruX#{65Zf_x)#ad9zc=c7J-U9St0tc`2&+TtX|37%ne}P29Wh%o0 z^Ze=Ng{$=ZaGsh&&})Yq5J&u5CdHXCrfA>POm%WqrHQ{r_&SKO!wiNk#KnLmoUcPYgjU>HXspVs>!Mx973Gr+e_Ah(Rm>kV)q(fv`e zSsR+kDa!ZtcEc; zEi1DemT6bfadL770DatEF8=lnL({-5zeLRKp_jyNdl;UMa+o$v&`sr6R+ZTZdN?85 z^j0ty*<`hA;@P_c9bWe{3)ii57X%L6JRax$S^Hn=nt`}9QWkMPbnAjzJT8MS0bhY1 zqtfH@qt_z<&Oja)`)IngHWPyHI_Dy`;SMlr{_X>=6_q!pyq0%#>pu5J5W$}oir;4*0o4ebbCyN`oVWwFvb032Tlgdg<}izh zl4z~)Tw6f|&b%cfVAV?s4zC`-IA!c*b=Vw9Ej&JnSr0gJ&2|FkmbF}@oPZ%~c5U~y zDGJ9Uy&stFM>d;Uy>2h;cYiXBM7t!gz0cUf=&$2g1kQJv<`YB}R5mfmoyKTHppYP& zG6FLHP>MTDzafCw))|J+#L4;@;FKk{`h|k4F&(uA*YSs+mWi zPTymszOXwQbeJiRqgf^afC`(I^hQnJvWz~{^R?*gB(%c`0PmLcfI(_2^XDZ)6+eSw zds03l<5#ogw>(urM1%nhN@ek$W!)C{&%v6ZjsQm9-ACHhK%v^GJP{8eas~XcJs2y` zwgMV<^J}jI7^_mfR0Hh0K7lTV>_2OjDklByswL} z)lKV<;sI%ybQo3J*`%DR%Y9`T&GH$IrPwVuftAwUV_!4{_EY*(@g`l!gWImeY41nf zZr;nWDX8oKz_e7P$4s6bMwjOWJXo12ntS6NEut)VZFrOnG$rwD2h26EF`>&>u?FZz zU*eL#hc=b--jwN$nSM?Cg>HJ*|!C10;%5f0fqoVeU*|T zJbPlHhJ$1A1~lN0Eu573d0BY43s4~SETgQfmsD89FHmp-Vt!*D!0`peRpZcx^!Zk` zQ{KRWMZR0YSRX4*O4epX_a7BsjWCn5YAqAw~ z9<{v>WY!h!i-<=B)|Vm!B;z?mlQ+HvNm5DHB)4gJ`*TqPf7aPJk@)Rr^j&IFsa^_U zM~V8pp(ID`xe?)bjNs`-5Jz^nKFn1Youy3wR@SQ1HU;89$^edAeBbs61Va%HebY%{59&7?vr0nTi{#0___1 zPCKFlt^Q;o^LiqdmVc6Hm0<@$WH1CZ!y*~C^kd@=-7m&d);mxqwW9LdjzBb{)HKO2 z#^T9nCRJu)9um68G)h{5{V_rB2E$PLTb{yf~+AtQCNHN^Q2%S?8=$RB(a#c=d5IP(Y(kCdovP&(;@m2@Qxi%5dFknpiZuO$%UJz z(cr{jStjv;hA|LvR*-eyg}_~lEg!}u>rB#N5sP5tAy0J;`DZ?@w@7q2 zU?$I*NH@tWX!e#sq;s#?j)KLC5Z!C`$2avWB$!hXaBmtdo`dr9y6T7&;FjD^OsL~L zK%jLac|JeF9bD8_D4Mz}+@SB5cj!l=?(#vsB7@<-i7xvu0Uu}PY#{g!G8XP{B&yHO zLqiTusgvAQ)W?YeEld1H%U?D&Gi_GV9)B3mNOR0KP zL#rcjPDoe$Jf6k5YP65Knfc-S4bemkepN~k8;%y$W*NqXqDuv~-{NS5ysp9qiFOB$ zyFJ;|T`Aw=)B>Ren%RmpVpvQxq7w=+QY5>Q*s&v!*S*1e5?L?)-1Dh0VhT8{B;V9u zNHZWrq*a){IjO?~fE~4_d>zaY9HTsAuf4mJaKiF)ao4ez>~*b;FJGlbdZYs7L)%x& zH4-S`PdUZe7op}b7RxDDus2?>;qFu?d}oSf*s{cTLHW*3ktY`wOcvgqIQH4oj2kX-=5{7fi5Y zg&Z;dw*djR`#hmV+=K}=>b}ygAeUd43-*3nLy9 zFZ%NQpa&`Yl5quJ0{9}GEkUukURMW39OxHc!?6gz5?bF|AItr$wFNuVXpEVSlii`b zey6#96IF^m)A%SMtgJ^`dH-X1V_u-tWPa(6p;qA$_L()I)r}Um@3A?~$wV-34+k|4 ztM~9|7FNL&%}VZIb;qcUf=A)V^Yc_0M`1)-0qrES?j(zWnnp$^c4NXqIaa7P*mhNZ#CJYmCLqgdYyUSCegnI{xXF7bwGJbpv z>KI0H-su(1I^lw%h@0<5K}&&kAqEET$umVR z!+vB8<+tV>?{BA{E%<8jLaXTG(xb{01G3L#W$5t1YCyXy&f-fSBpf=^5vLlaW<*Q& z7>r10TgaZGH?M3MVka*AoWujcqWc~T3tq+$NUE?sR+*8t7gekbhmu7ZD?kbX;koHc z+gt7CD~oC@VHSeXS4^AsaRXQRS3)9o(Z1GJb88dyrAZEk?@>`EpF(zvgGmQQ%j3rm z#Bj0g&yW%Qw291|v<%HxdI;bDL=NT-Ij|TL5O@toWw?HOGQ?(0G~PTLfl$R6Xht6a zW6$-Uw+!L%pOsgnbjC3j3<8!yVBU+hZwHW7y$#YA;C|q4O=byX1+RVa4z7*}5^a;u z>Iev|{twZN-n1zoJZB?!aXnrYhzjfiwmy|?Zg@%?9TG{y&>$y}c@RGHxO9@3ZdY9b zucwEcY~hQ7G;U*f;X9OTVPGp1Kd`IOR*3C(%_-Q068kEmVHFH7hWrENS{d6l228PP z?A=F;);zuzEm8`GMx&8_XQ6J7rPQO2pj6A!XFw)QfD>Jk!HzB)XD)wjfB}yMKg=nz zj4&1ic~Rz5@C+tUjq70la%7!zLn;fPtt$u#y^wC_;_5jr9xP;z^LK@4fwPK)iDZgY zj^+JO)^GO8#>RTvl_C9LUpi$`i>qXXVoS$W^wdam&uGUGD){)?Vp*yJx^YOXpVB#R zw?A%<83z`QKma&|8L9mQ82o>vC!Pgvfi%Lcbb2@gitC1LjRI520hxCYX(!y{m_ zLxYGk(n6n%jsOCr^U3T?6d)tx(P14s_clQ~Vel|Sy*0E5J63D6;Wz0=LJ=ZMI=w}1 zvy3mvRyjTrJzhkPS`n@$lNi&ngKs_87!`}!JRAxfAM0fK zaK_Hmx-ZGsPAgXjoYop=VnHRRJ?5yhYjj;^8Sx za7K^BpNk6|@~EWcst~tYEwz}QONNbbnhRWJ5f8d94QKIa`@03;j6`G$w zr#+G}QWgeI+$e%WT98xFSHO^?5FjXuuvYVsH*1Z*x9}PYO!D3YVr)U8=A3T=iDTWh zWLDF}1c zzSGxk?NL@iql|_$m`~-F9YkoGfFJ#$e#2Ci>Ts>#R{$}g4daA-Mi7niJqU6UnMIkm zyhqUp=LON}aKuQP_bQ|c3Zo!{LPLG0qM^SJ4FK|=3MfuaqMwKDrxumr+oZrBKYpkO zq0pf~QIyD7$H8yCosdva5a^0T@o>~&Q)7HiIm-6LDj*^tjroijh&ny{esM9!j}R}F zrAM5TYNtbmql05`RT1;W(tID>SLG=3G;)s;aN@>LM-Cp2m0r%*4uY!!nCw6Awn5MI zkc=Cb&rFst5X%4#kUCQ1TZz|PTnXT35$p`5`8!rqR~}KKOHy#|zBpYmnP|L$R;CVa zhn#shZ@rgr!C(;YJs5njU*m+tN`SC2{>3?k82v-1oag#NDVs*Nkp2_MRYa0cT9J{V zn9AqY!KDDi`R)V|ry(WKtYLN4%p`8T7AQ_ag5Scb5=>yC$f^PTkNZ9%MX<)HybZUO zUUVQaNbJBG%Cpcn(m`&5N!brL%l!aHjl?xeh3QYON=QbZ=cOJi!MD z1ou^ZeYX>hFhx?4+YdmS;Q(Q|iaafZhm^_@K~6YU5!cJ$OqW8qhtem#wMB{unT?t2 z-f}oFZp6*(bGTaolm-P0L5gW#W@POY9GYYXTzp~}<_bcm>!;j|+j)wGw6uV1`b>9RK-;{S9vJKP!_mD?*P& z2s&5AZ_t(*_WO@gOYk42#Ke`o%ImDU#Nbs(|441h9#YhMCI z8P2lfc(pBWg@Ar`uJ zwX()#i~e7&0K*#y#Ai)AHe&vf@W1W>MsMyZoj#}2J@oH+e^V;Jf7P~k`|v;7d1|$Y z`zbkAOK^PhZ~Yb3eu~c$=#l>uuKXXbSb_-zkV}3@HVginAe0G!_-q_VJCo ze|M|>OQo^L|9HO}J_Ifc3*uP~iwsE)E+num+oZJe4n;F1tk1T;jm$)~Yg5rtrpjg6K_D#H~0(-Wh)^TNcr`G;( zzhRuNEy_CPYme;CE#dU(XLBP8%TrXc@u}QN{7J^x#*bn~8L}Z!{qvZg>Fz2b zyV~W7#S1?UM&-zgt>=H&j?aC1oo2(A-!@e^8ld{4P&~ET_8?@%Nb6u6((Ig+5e?>} zeny58n{P**2 zDp)tGlniiM7f1y0B}Vy^72eyNv^&^}5_6XTZzw2u0<-jB!7?O!O)s_N|SlsO^oSl&;r1)}K5_EKQ;BtkIX z1127P?#J$Oi09RKp8BWixy8UgBbi&Qamb_jKgL23Ratj3gdH_V+-JwBj5T=$e@2s* zBA|G>P|rR?@7fCrYJB&}XM4GMJoZBdli$z1Jjf~AqlM{g+v%5Ss5|%+zb|skD56gu zOs26=&8+v@#pPRPK^N`1D*&8}%w=M^+hPlX3JXVK;Im(gfWvd*HhX^r`u z^P~Z)Ga0%7&k_G@b3Sv75VP|QNcoZqNI-Hkyr8M7=s;qJd^kjbR9-dm&MX}X5F-e za|Wb?CW=ON_K_i7hi-3A#rNaD0KL)uZ7I{4CxFRdI}ZH8q>tVJok=1AVY6IoGb~bG z@RN&)Z>5;Vn=SaU;)Ygy+yU1!r3;FP+Buru1Vpfhx`23~gucE$n4h!Hj!-U-Fyp*L z*<`rCIDsR3$Ko3tTh%RfeHyOR@pllbt?iZs2{9ZlColCr<w8()}S~()Aon#ko*lS9>${V|FLzGX4Y1o3e*h+`CQawMe zX&sEony*%)8HIq<^l`0Lx1Eg&E3A-S~kxk3TA7oWFQis#CjN#T zZoL7Jov)!rEBL39MU8KVe0xKhuW)gaS}$Eho&{f0$Re?}%twmkr9Mxa%O?r);n4d9NOogSH{vH~KLgDct}7D;h_s1EF0x;0kn zT1^+W+7eT*mgJZX-eMQ5xB*oH)U6$_H-Oon17mWnx{@YnkYE*z3*#_O=FUiT8IbJtdt>5Wk1blfiAKw`6fyq|e_q;Z?sW7% zXNuS}rQ!>-xwDEAOk%+|lX2b?jF;@EVCqh+4O!HHis{Yiai?ZUOlS^#?ZS=vy;6a$?TOsA zSLzOn)-)jMFnfo}>uN|)VVCwVC`h7r&UfJr2zAtw)X3IR1S@oa5F=3v#G%P%CReD4 zKE;I4?O^1dsz{0%*{35}gu7z4I}2enpZ@9a2gMJh@{MeQnO6L*m)8$;=00NU&UX{k zwhQ%|#3y?7A9{J;wP4E0FTLr{*_U_&E+Wxq+R2kBrQVtEDc!&iNVyll4x&Mg3X;vK zVThMTRxO{a-fUrIe?%Kq;gt=pX4Yy<+O%CNrxCo3Gxk= z9CBP=W*;yycU?g(3y!`&xnD_{*X(bP|IG6t>prWA?|kgiHsTp=NLtW~?IA^prw`(u zkJxXBRi0sIK+!mUK^&W0j?e_0_s4%9a+oVJJ$9NuPe~O%`S_`<#qtw@7u_OdvP?R+ ztrb9r!+**OtG9iG-spdaI~|^jjwInJF@uBuv`}AR1QgFPI$Yp8aE%RD53+ijC>%0x zdb1dWNzxUH*N2ZtaP;2m{Fl*Wo-FlQ4G;1fS%BCLtHE%AeDe2{6d?NA6 zLD+BOWuiPbfJ5Apggi8UTb{irXrcS5EC$vdmKsHG-*PgPpjsDG+{tbwh(qu9!ell~ z>@~bFpkb%i$CHBNlY%iw3RV1~;iafD?PPL_F@(sjo(y2DF@CdStuGw~`X zZIk(n1_4n^8LBsiAYEPEt_&fM&fQ;jjH&}VNK+w%?qy7u*P{ReR3(~dI%<`x;a(t- z>EPrD#^wp&S#+gozP}LI{RDnCZcN7a=}ppUCT^?E8*eu;pFaADs5B7szR&qD&8}>T zV0GneyR2e9w-dGct&FCCI1S@KSr>9D#|F@LEYN`8kNKAYc8%EmJR+Ew&);?XjKwyPDGEK<^V z)fc9AiKg^~s4f&}O?8JDL#6LYgW^_@F=MOrbtQ=tKZ`N0JAGBE=#x^5xq5%sVZGAy zcnQj|cyjEbN~j0^fenZ2ZF*0<#880qfoC&ujJEWq?f{PIep3VyZm^WNt+9I(di z1A%*C+d|=?Ax3PA!x~)=$(SCDjKHr8fwbf-^P!+hQjUbUh_N_qm#jEl@St#Qs!;^_GqzV*}Ir~64^#v4k$FOMzR3}1bYrXnvWnBqw^IS(y zhv~;W4!Bf_TV4cy(4z562oq8TY7FHJ^XpVPjc=gmByaEECVQ8$8PwHgJWC3@U#A~q z;s#Odz+st>85<|)%E@gFfNaWT-<#=UZdw7{kLN3!AGv5uauv#z+QM9_h&Wi$c>Xx$ zCP^ydt(2&9N|qIOLD%|}s_}R^D))cswiFakM4?IN_=8g?_5AyVw3M|tG5NgXiZ0~H zX$vfj$p}6qw=O(~cCUWQA)3vLx5_%+vZ!Zk@kdH(#fsH5jg<>z`=Xq^hG&W)t zwt0`##ZTFZ@c}n;By`8FHEE@7zq<}&V_x}bWy|*i;484;F28hpJw(n_hntY(e1uIU+23+-;AnPLWyP3tu1OGBK{_R{&5V?JTbwk zBi;$exYllooPb5=#pY-_$zjXoJ@wChP|{s?{7Ndj-J+m=A&19>&7VP}1FF4L3#J8u z)b;`4uwP(zg`#(i-{j|!6^R;$mZe&8zrE&@o|QGEnGQ^9@Hmj4a1DLjlI)iqRnMiF z;o_3$s;|hcnTR46AjhKMrz&+-lFL=ZH0eq9Elp+59z@E!V;_)1CNUzFjwUb0^ttOE zDF3{dtt{}t0?cl!)uEW!tpD(ylgOj?5F7Qw7~w@E!^^aI#iq|)rS_{@atssUz1faO z^KO)$kMA?F?81l4O2d(nFa@U~iFg?GUfaFZavw1@8sNg{Q9liUeDt%KrH#0$=!)D0 z8HRtqcH4_Tw=!^6J2YYp_Kn5=DwdkWpqRl+r{{7R1~FMYgYeE6ga+l9EK&Zbq8?w) zj^vWsa>!1^#i>uwbF{4AdDv6e+LeDL1C*(dn~aq(KOXq%64H0vApIWesI@`z57hjH zv>i*s&7}Rg?NC=pOwEmfFm_3n8=ajB5{7?|++w$-aSr_$s$xGB7hdeVBm8iMv)dA6 z0zK@Q?fUuK5`-AQj_?|ddmwoj5le>HxTej1q3zN4aLeIr``rN#VTRLv#DGvzFHjQ= zEjKB(eDI~TuD#v#_v95IIaW;WN@h#7aqfyY$g1h~<3M`3=hHkx0=D0d{GuTS*>{xb ze<3t2Pg~P(h`xM{X%*(Yf*^?F8XXioUh* z{?xaikM+HRh{G)Jc~ejj0hjffgsdAA(Y9XwTVYypOpe>-N$qyEJzrN^3B1X4AX20< zw;p)ZMv&pPo}crK_gd6f8l6tAOc#6@D|tV&=#~#zr>O=}4mvIqiO3S9vSg5zww{N< zD#m=2t3^}0Vwb$=nvd`1v&Akl#llrz`SxYEU|Q8W&m$h;IaY_tdhE<3Ybc#iikz%E zf2%%DIG^uIaH$O+k4t|&mvAk&6%>6p>2<;`D;P3+d)-QBnLp2y8U50l=hL-gs_u<6 zUL5($^Z5!(&DpyPZp*1oof0=WvtaDIJN@CZi|VXQB}Q;*f_At_bI`~q*_=daQ%Gl}O{q2t&}e0E_>r!1>Az-xUarwc z;MtkccMGIEtF%S^jGZ#DO7=rTZ(92%Gyyed`dxXp;MVA`;M&|AR-2eeQQc$hG9udK zgeyXnYHzjl!(Zak(TFqq&`MqT@s#e^d5a0(7Z}}3FK=5o_XSe+cVfdLl)DY+_Ssdx z$9~01{aWcVTvh4t>UhdDJl4!P8k6(rW_x6%V{Czm#4=3aZ38OJsE>!HuJo>4I$C$b zYS2rgQB#gCjwO$G@(bR~scQ$UjZ2st2G_&7D>@FRf?~~`nDG~k1Zv=Etgq|I_=&5q zH4~Mv<)nBizDpD%w%^)c5U2vC3b|V=BEFuXc5deaWwTq!A49XDRT4 z&bEuq+6u$N&q|oc*RLLOHyC=`)OZ+&+cH%J$G=kc@6T4K-V(chMvg6=2K*6C4uVHE zJ=bFNxn6X2>AHok%Z4}mW4gLt z{g#hKexxxy0wbZzM}dGH6dwpQRzgrK*FzU%%(S1^jk|MPnk(bvM_A~Nk3PfSg751w zUBfk{EL0?;$NbY^hwAE}K4O6b!kM?ru4LMT#%e zs@-u&6GBQ5DLqYnr{ka`n65277Qxm-Bw*xp)z7v> zNPZRQ(V2vnTOBdyEfYg@9y*nK-y4?j>_>M|#rdlKK}@;rTB%=wMO^kudrbLB1D8=n zl7&J#UxVTGbNR~SU9CinJ+vDFQ!jh7+H$IgW=|%$ z`rvcIH|Gpz%NFVs8EAqD1tjG}NkHGk;jn`zgB$+@gP zBthWWs*RyEvA(~^iyjkLj*3%Fhua`*CSytAJ&qq%;3@p1%mCJ}(az+{%B5kOP-lag zqw*z8QzL~jz*Xsbs)$oydDL8`_$OtmR7iXJ`$^)bvKeV$V>$@$^Qs@<^V6Ak3%yR& z%fOBOmXM%22{ZqoOo|6jS48>ly@)(=YK-w>9x>_8u%JLDM^@i2$4Vpf&Z17uOr>*| z1#t=8*{L9{$khwCNAGvH1H)Hp#}OL3;l#6GePKAu$PqU;3VNij{AUs`j{?wGkYUaa zwBh`}!Do|0TS0XOf3k?bR#TQcs!|sXH=Y6K02ThZZNT8y8A3ZQWLq2<-~I4eaN3;t zizkj+7&62VaX3@(p|V;6K9xn*w*yM!D7r?4>f!03nz8HL6@h-Ynaz-Z1s5gy1J=OPjrrg zr=3M*fns1Jk&MsMz5^vBbI*qJ?Jpx53~UcT$ICU$cKq@A@I!CuTczif6}{8wn~`*? z($0e*iTbiUqg|u8hW5b`4cafcpb6d;G~yJg=C6~-ZjynT7if<G zT~r9Zd^4Q-#LqcI9KE?Y)rdxCCV8IILBzJnyVe&C9DYOXJ1!;}!mc?MLOUo;?b>fi z4YNm?7_-#NL*=L{e-zE_O{Vk1B(bBO-4-Z$6f2h%e({MKo+Z-hg`lTwAH9Jlg8x<+ zNn((T#z(bm#*woeHzV7Tojrm;+??XKDEf@_19w^9TlmUvzZfUFmn43sZfE&YL!+!m1EMz*g(nkNio(TfCT$w&t_=br>8IK>u+w3>`R)LahuuCvnOyhkANtfC2 z;)TfLLmKn$$TXdpXVG2?;SyT71~Z68-CzAx?4&NT(aLJ@^C23^?C7aF;fHI~H{&9B zz2Rumr%0g<+!AZOyQ2zi&RMrXiY${!qS-&2d7d=E8K zF6J-CqqI$f*v&cmYOI$uRI9%8#bB?wa84?l4$zcXxO9JKz7-t-5ty=4oE~obKLxuk~BY znaR;)jp?-me_Nzsvi2#q7N-DO6znoEd7iFq?=R52~rc?xVs9#ALUkRyn5Pe6-g;UMNMhJ!v5KvZa-Q#9N+IYLq z%aKT((*-=$PwE=6&3m_t2dBRV9>PfYUEIHItNr~6uXih@NV}1khUr>`OPG1YqpM1( z`>o2ywFCLwIn8p(EB{IL&xcYfpLP5fN@P$aoR|CPqw*HTpHAlX*Ik*bM7MUDoWe*n z@9Vd)HfzETeAwRzQ`9^FSb+^}&t&W_uZMW2>dHdVY~`!+;z<9igu&8*$UBKD;W`Oo zIu7oJa3zDHvzEtF*iwJd%>rALk@KXwm=4B8UdUl9QsqhzAE^g1sf+h&^4B;YFr@`m ztWr%+dg7UK<;zuhZ93cdeENRM=OdTb=iEtwfIuNRkEALrBfrn*U9~IDz)vdvO>J|45Hx>*Gk3e z^}lsw-ca?w&WTFncaOF^OvjNvj`?=3EURd&Bi#GY??bgP!{AKq2I`mM_7Q-mn?EH znVw7Kb?2rPRt^gP_!9HBJDa8Fe@7C`VNuDG5K9dG5OW6ahoQey{&#RfzL5 zztF-d%22eiSoPsTxYR3HE@{cJ&c8s+!VjZl2MV4}%ToW0Mk>*lJX6}67XAq{zNuiH zeAGyVLq~3eDgwR1fP*pDJbYaNVMcvQ-%!1f$!kS$4;Y1!B1k^VLBvyv>`fGWP+ruc zhLesaE|u_#R~&|bIVgARuWopwv%-;ePbs}UtfavRel4g2hi9bF3aMA!mn8YY;xt$3 zJKn@!f-&jmh?uE3lF40{8_fRLur1?J8IVUKevwVoRzKFUU<^-l(OSlRk?Q)cxJ*`N zx2yQZA?2Pk_^Kq(CwOU+>Xh?i1YhQR=j424UL1Gcwcpr{3yihMXf>7a>I7>2arXdE5H z0!8r$*JhV^QB+=*U5ZW;M_MR91A*&cSt5L3Uu=;vqAq0UZx#*G($P1TaTkBFYBD$Q zH8uZ;YH8#*ZhRN?fb?{vWnyEQ_!je_^!SlVeRR|ziHxJfe_lmwm$@zIbJpq-)X|*5 z9pKAawBBz+^r+suY5nFBr0_@r+%p9{BnOFi9-^u|PNAG~VfzfkAx?GkJJB(#40sU_ ztaSQ4{xVDFZ%6!KYsCs>jcKhq1Va(MrV-CPpzOW{kPXoj)dZWoT6z>AELM`zlj_^9 zRrc*3RI{=$)N(DifhHlzyC3PoTlhY68uod|QzMJ#Y4Ifaa(a~Y2GT{idws~qaTtsG zs@cYU4xx*W%EWBGr_*P~qe?ceED#S$To`0Z4U`zMlzMWp8ck(wb^9AX4rQ2aM5PrJ zHAtJmz}V%2yZ)otDCH62_Bjr?K~ki1=dzdtU}tKo`L4Mx41-@0fnzAv9L*EC?)6F* zQ5X`B`IS?Lk(TEQv|Eb*{`8+gq=@Qc(tLs*P{VywuB+(e9V7( zs%S9Ze4BYB+UhK40GwmmHO9bh%g<&t7jFKhp0`|&-)1*m(TsNYQVehsY8kB>H5Arp zIqoEB%-JU)aQ)Dm-&tD_&z4%0e2jW&-zel%@uw|h|4s-1A0pl`BX4YGx`}f#2JU5B zNf%>dpgu#vz%E@Xb5)37hZ@c>5M*@JYRHzQ7L6t1+swy>#!CiB-Cipu2Q`>{PbwO{ zX+Gp~?!FELvMo$4$2m`Mh}?#(xKxTwZXQG7 zj(ClRe!IME6A{qqcnAI2jJ?L16R@*f>#Ef$rbj|~u~}75FJeef zN2k(($Y~E2bGXLrY~JAnzKZ$ZzZqE!x%^IqAbkHuWqZ#S8@61v+vGd=<@P)fJ#CON zv*xDu%aq@%G7rtm&FcH+3z)j=mi-tu2A>T9g(@uOW9B1hu)|rG#5KPUpWKpWv5^UGWY9YWDNyO*-P+PpoeT=(H>n;R)arFFAE_N%85<4A)IWnPeMa?3EM zZGGer$-<-2ZmsZ4$Z;D6JCjapT_%6-Lo;~QeV@%cqz!=y;k<;r=c zXatts>XzMEkQv_yQwABay3_F0)Aqxxh05m`%O)t3{ok)$5cyfZQ2utXb?0%sx%^cyi@RZd|Hf`_tE6*7-C_*(~_kk zC>$UF)?=&J3oXKdVuE6cCOV?f2)yff42*PAi~nsUgwAk9$L)R<2KJHvSB*f)blPCC*JRF%E&pJpx%;!9_d>EHlxghe%QrWQc1DVu8Xkt|ol$5{`v3 zS|=+v^{Ksx*6viBN(TT%2<7DsX?+n|daU$$zD_a6d?@&k!R{_!{S5jWfCuG>z`vIr zYt*6c)I?+GQ()K=nts9J7ZFP!H(NI+GfA05WU=bm=ei>c`^Pv9%3wCCsnjdK(;8~9 zD4LHNEaLHxza%>YQP>hGkVriEdAo0>)o##d5(QANa9t4Ce^}ur+?p(`Y9|9xPrw`K zKRo`)@>iHRClT6ql+?d19=mapy~OUTB%1Evb>=yYV(7QYQKKxmv7< zjU{#%cn(VL4ez`!tfRRUp_GFFPW*tDLDjjdov7hecAY#T!534)S@ET+MTer`cR9z#oT7HbOw=(jDGO>{l|L z^&b#BTff>_Y`TrVhC0EjNe3d8WvcrXQ-C~YT5b>f?A#o^9YVHFV|&s1$o*-Y{91v% z=^Xt)0w0+`URLj@J)}3(8iJDWDsXc8##52acj1~d(E5Eey;TS2ifRh{PoFI{tE3-K z&V#(YxDl>WzX8Q*g2$UzW@E;cYiBSDanQ^VqW%lftL1`2GsdKj8n@Q*fCqwpe@hTP z208`aapZ|tL$q-OZZ^W-QFzHCi75yT>7X;)0}Vxcagep;@HCAi!c5bgm@axkOMa7~ zg-H2En68bGvHs~bvtQLxVkTYn5zFQb8e*pckvWYy2mKkK7<3hks!R!+p+-Xt>=&>v zvG8}0`7z1K$yR54H=ofWthP5=(#Vo}YZ)2&`x}?*bG}&F_lX2Gc5=77GC>M;w?w`qQ3hPs}Wf)eu~;*=-wnc^p;1QlWeX7_!u2{OtPFzZn(zRj2`XtY6DayT{n9#n3Hk z>tWP8A@=I9mR0&zUyxS;T(ukrVUz3|pseLvWejUq-g+?91dF6e7l}Z@SQfwJ|65_sjb0(+yb1zTy|=&&+R=lGC5bu(u*>e(RXeqfT`-Z>$MrjF(L> zEM@8!IMc@KXCM%bg(w6S`b6c3>r{Wr#jj1Ud%ARERK?IO?69fHLs_@(;7!0S!*0YO9b+!7O=KM`-B&>t z!3gmNQ}=B}Cewx`B$oXa5w&K}Lc~l@6`sPc^@XTwm7LQ~+rU#WXb~~rergkLtYR#i z0=l7~aTW%>8Y8sQ_C@uF&`?miJeO9TNk*%&ZbdT1%FGIf?mDZ?9YCJDdqR5K8mv5?R z;FLVU?`Eev^G&r!<3V>i*GoTs& zdl@hufd5q<+wV%}yl;>s9Nt^Ty-NGZeE2k0 zc$Li~ifRLMqg3_<#x=7O-UIfWU82HWCGY?hUh~MHcIW-sC4s5X5o_r(C5mQ(9oq+b z*ZlQFY{}0EtgNVxB-*55E6Yx`hD6(W!A9STd&l zf}*|!6ABF@%`y5sDE=bpq(-c$74(mY#?soEypi&y2OLO4-u zY7?4F_KelzeZvvkd#J9#*UmI2~wUJ41Pwu%khPX!<>c> zSv2Jw4gWb_WM1wLAs2{@FB7op5oX>vfWp$O==%5(1V{qLdIFT6}_-z^#Q`Rp$ta48}-AN*{YRZW?n--g^{& zadzrAO*yO@W)fkbT=R9Z+17c?8U_wS#*Bi}amllqsL+4y=DxQ{ON99)k)141-&$_D zGv4aaOwkcCXGBj#8fj8ewU~rX??7-qKR~Y5OsvJyg;GcWI+E{1Z?P_)KN?-L37n2O zdRt2N&7&5Pdi?X|+%QTQj)hGsyLq&6-^*&RD)CGEW=kb|g5V*lV>eFZ)b(#5C){wb zVW0%4Q$etz{6Araarav%-hYK)4L@}uzye`;cM!Oe(>U3zgVR~Hh6|cUyi^?wLPVkp z35zHUR!#|hR&F;ja+3HFs~iP|`bq6?+zZ{_Zsi`ZquC8aLyX&S)Dt);QgLb@sFlo? znl4efvj?NH$GN8ncG>ZCiy_HSRS_8B3S%T+(_N(YM`sPcwA!uSJg8j%tuS>U>rkb&-2W%Pf9%jh+9!K; z0|RPnrTvIctxc*q18e}4aR?@YQ;>srj^xnK=hyEcaHE$XKYhQ`#ZQkTQ5G|z;D_?B z>@3)J3V*&(iz7`rHPaHU`SK90dw-L|=mET%sfv5CQz7FRiH>!lBRhF5h33R1f0BT& zvLyOtLXnja?0jlor#QbjO28%Ez;#WRHiAZ_Y9No=alnfyyZrLa8Jd~Sq9gbo{r2A$OXjw5-I+KonS`%RAjXNWoO4&39E zI)Vx8$$)0;@2vCAvzK2KAy2DPS|dSPBt8^J?wniy-YKjC{yk^VvQq~ekyoQNe{$c19KpxS;()ed8A&9Vg^9mG3AVl90^ zwpE>nx>={Y6I%M@0zviZjr%5+_egk1H$iVK@jCAp-xsL)BkC?%U@N*eH|=L!BM>J>=Ct9*t>cLs-NqTp7*1|W)c{uBVAq{wqJ$EDfnxhTwLmYFMHK1^k5Nv#T$ zadT+FH2V4FwT6+9?K|*^W?%lrX<7Tam8(<)YWc1snG_A(1h zBUCO~0N>k3WbqW~`v^7IUoZrt9Ur%)X*o$_Tk&g^N7ti{FgBGU?!pdlPO(!#<#}Qz zNXkA|XcOWTDdMWkg!JK#Q1`Z1AZR6zxp_ksHR*@G#E7i(rKW*)nIu*9(M%RnQTpy@ z96XEmOfs8%=nV`DX#bmm0f{kw;;JfrYLULq+-M}eGQ#XtO_O+Rhx%^zAgW7x%D-Wv zZ6NrRLJD%tr|FBZmswAxMW z8^rvE=gf`wo}8>*Q)TnDDRj_mYOPP~FI^voDmPiA6?uUer2;mH->9{~A)PSDJklnf z_tz@^#bR|Ev_E+TNKn$$AYIf5oOosQu-}n8g~86Kb()Qu8n-1Mq;+8nHFDjyqo!c|0Pxk z$883^sfv{Gpf%&2O?41FbgxXu{_k`X9Q)t)DD1LFL@-K_2w~Wrh#boxaave&*?4Gl z$Zb{P3FT;RW<=tz=7^sDxz0|s%eSf6c9fpj3!wn% z43>aX;W|l}AjjIYg5{Ji7tEBC&BG*@lDUU?|ZXm zO(>{5(K|E*E{aPbquy1W#BW^?=D!PxKl^~6!?-9mgJ-#c(t!Fq9<)zop?um)av(Lh z5|?{qovR33uET`1gA@Li%e0AGs5^}puR|Tk5|neE$-bhBqK5*K zQwc!C#lyrHI6x4WhE!PgDG6(NJ@&Dk!jG$RDVNaoe3d}~O3b5d3Kq7-0|R~l7;h0b z5a!M>=cJ5|SV$=~S`+VeWiTzN>f&&)jJRhqX!{YD$(f!o`_{N~TNIe_1A&k)lO(oQ$zV}$e~ zlE^^b!VY62o)Hkll^c-EQ{B=q+Q@SQXr9%o&D2<&X-{tLK;k7g8W*f}u9%+8U^Cn@ zsGV|dF}1i5`{w=S3S+ejGdnJd_bOLMrn?sE=7&JdU6J@>!E8s<&TXp_^d~El?_h-5 zpy2xed8ZVwFwKBlGHbiO+vC}q`RaqaimgZlniNzmk^y}_adTVvyo$I*D-ft&WSg9} zfOgVz&G-5;mOb&2?~fVe|f440QW3ukKZpBate;HL^a z9e?*^(CgQv7Ko|`dR%7@+g>w##o6YLcOK?58`!PB%OWn-I>rm+umUg5nD@h+JK%9E z2T`>!neCHTJxzK3tvGxnvCK+v>W_}0 zQWb6#09Zb4XYsk#jue`A&rDC3zT9(gW+`z){_JtxZlzIvo-wHsMFwV`U4?1sa!oXb zd=k?4hY>Z`G8=e(oxG0}PLEoIK>^6)b75W-X72~Ily!*CPChkOT&xs#_ zXFSX&A|Q`~>%Vn4weL_~Lm7!3qZTY;j6;E#FV`1}W`f2JAp0t0syEg*bv$$&R8Bwi zrO5QGFCwNZxvn&VGW~l68TfKShffD@t#~sYU7L{8XIL{3y1Kr3Xl0T4fqlGI8NPiHH9}S7NhJNM--^s z%UR2i)UKm)O*HgcBhJ45xI0hLL?Y;pM{!StEvrj9K!I*?W#m28^*UwVd&a$v`8@h} zw> zJzahtrTn(3CO+Z1^L(RAm~Koqg(*ruXZPx~h<;{9QP||Bx}D8xFAI(ZjKi+ApD%q@ zcw-Y0)jH%XKkM4A*WY=ur;9n*1(``rRqw87r_yA2>7RQL2$Pr~SN z5#Q-?o)B#a9rDEXR`qEv91=8|4q*`Lu+n?V!l_Wrkeu-z$}}4F4pc*A+G=?q3p0-| z66_$5J>~Q8?vS3*-tdlz5)@VZ>wJ@46=5FL3$gr1XNs31izXeX_AqVRB6nw|Ns_q> z%)nZ4*gCYTl(z8$yB7f<{@EsSEFxz{y8>6w#oK~C zm@t@^Ko*Z9Rr-pjF_@=>%7+%sEu(2byFG=e252uANA*=aO2I@6Gu-T63Dusn7j$mb zBOnoix)hWn4ny<>sMfgMoc4-pp_DMf8!o+0@Vk+T;3sXpK|+I~fGVQnWtc zF}(RF;P^1Jby}uC&ysx|bI2JpvBq5y(Y_Rza+I?IK}c43ty3lG5{~M(Gt^cyiRF@`}MG4Yx`sZ?P25D;qla99dDjcbU2mW z&#n2g;y_G1`GEUu9Vaul(pLuLF{60jC-Tb+o!)6aq^MmJ|E?Kz^kc{}Bq+*!S_r1Rfyreg&-Vs0NirpTE>*pA zWDfRnuJ7E~@vSNC4*lO6R~*fIuGxgU-LOzDw{E0LTvU0e_q&O=DItz|+N6#EZq_D( z$Cm(jnXTVBR`617KF=Eq?*gSgtqZj@H|>xrng^-oGWpHZ$IMIuH!4&zDcuC2bMR5| zeqN2fn#jh6`hZor3vSYanM^g5cw}(1rZ|U z!3AZw;=%l$+Q=&E-KL6P*xThZ{xtoDa~tT%v8F_GmJ)DzF)=zRwA~V5w@FnsuX3$x zeKn(R-6E1%ju)-;8f0sh4?wVbb3TRgp99VPkercbU- zb_;}qkWG2luEI3*X_->=yQq_W-=YQ|e_ev3(EB514I!RhL}}6`hRyP=6Y_!pr1_s| z)ccSUMv4EREWORoZo7Qzuns&(ci+dFu`cYtB2RS35_V5g1I_}&^!KBt@|g06;Z;bF z`%^da71Z`-ikq>ZcI;*^1Fk;x&7TCsj_VtUNp?P`%q^qZ*EKx$wv+91F1;L|Uq1H| z_Ra>ggA-xd^J=35h}+_)WE4`^W?mQjRypEu~JG%eq zvgVHFB^4{~+LT8WJSr>-3z(3;EPoYx%y%gPd!wPi(z*De>7(Az$O}2qFA; zd~*El2@y(JEVX@lEr>ebB*+ z4^eH(z0g7NxE}~dHherCEh@h{d!K;;OIuOJh5J>AIn0>r9*&ZWcdzOv;q%zqw&zK5 z3SoUbKcCoPv)gev!_g=2 z_!3)9TnpUp^0h7GK|{idwGBHklko~G%!p%I(LOTBAxup&P-pu@>{db3UO!vdA(hGO zHNHh@ta&YxOY_I6XSw>QWkI9~MT9w>;YM~ptmR-I-h`W@UAD%?E{O72Uh@dzf*A+} zKywW$oGRcxpqka*WsCZ3DWAB(i5^GhC^LNR+st>?&}m_>mGS0#%;}BtQ**1E_@$jT zrHXm+b9tT4zD{=BO}OsdkLw9gQ>tp7ZFNpIpx-2za;*+B<4Z^%==}2_ghE6{#koLH(eyb6Lh=SeASu!#?VK}T+!xj^ zN>qy$Q**X^(uZ3NqYWVJ<5cd8#Z+R!&#I(mHAq6!)7u0O#2WgL$SVA{tS(a3w#nQQu_#1$+SRX%4(-4=z9OtYkW{O3vKYA1wH;$N zSkb>Miz4Tb6xCoKf9F$Qu3G`z>;XYZ!2JM%xxvTl+1AOQHbEPY=RFU_tqAwne-=n7 zV@Mhu54jF&@EaKW%N_Q8SbqpjhKYW~lZE{G1i1+@#9POcrQvO7Sd-Bcy9Bpz7LnEYt0oa<|VR1)-BzpaV3E^dw%%XljIBocy@PsnPus2E@eF? z6uq>xu(4WC-+l#dWO03WxtU+=_Vrqlb`kD%Hi_Cxh8s(_3yYgTO$+cf^lJjz;l(&T z_B4L7zS5+h6X5Xx7Kh_=0+1U9i){b<}WaM`v;lrGMyQq9=fw0Vp6A>A4tt^zL76y%q$y`ziW)ER$!j zzMJor3J?H22B0;n$xL~fLb;(n#_Y`|ey zYX-JV`DCkyTD7e9)AFy%tE!^BOFusQ_QmP7#`XKq-17{wa^53P$~?qI**^bK^yVb0 zAJS)roW+jsWarE|Sq3Z3oC0nW&ki@{oo4GTCg7xt79JP$&u5o;UZ%{2>M|+F_-@qS zML}d?YjXb`iy&eAJ^L*$R@dWMp2O@RmaAMf`m1p^H@G~I>%vbZag5`Cp+&vuo^N** zj=7VN@pV+HU#|H#HsUp?tK7TWNIMLx{nn$ivoOzK=Rb$K@pqCbn=RMUGFLFhJO?g4 zru&GULhlk$pCgUzDn^uLtyRV%YKB#=08w8y`m1`s7|-j7E>LHr-i(PFJ%G-P&cl#; zIoQ=|zZ!wsu{?BhxeIAg_sKJFARrqPTn_8q>Ja`i{B)Zk2#6zr0og64@T)#4J7{^E z=P$W-zO4kp0D?|$>mM!0)4Hzupa;YI*EGN^3*y0gJwtEflwKH(mJ6w@EP}-G^r|uL z&O*|^f6&qHzf%YTP1Ar@3T+mOn(ixktmIncC)K~GcDHLR_zIjmCo z3)3Y~8n!Y(@Q~8=^A`)7!`kt?z3;>Sr5SiYg35b&4>F0Psy)^8vtSn*A;j;S+R^G3 zK;zSXc(T`hJ3dN}Nle4gigM!d_bUb#BZeNT$KK+fMSE%Kf?kcmv<5_NG#Img^`{>R zIPWhnU;C~&rg(TxONOAvg>;`<4c@Cvg}P{$@}zmaQ{_~ zVDsF6_W%7LkCEulFdt3D|Ih6Wf3M-~5CYktieEI@&k+E>(p=yra1+%Fw~rKz*yY#oQFr9+5KpQahF?cAnJ zaK{xytxuPz6`6QHlmL|-8;2aebOV5Cjl#zKt!}CY!dKlf>whsU3L(J!>m>YWBJ67T z<9&%sy>Nm&)wcHB#6!FGUx@!i8$tlY5&4&2U(Z)Rw;KB_ins9B0#)g>q%B_7|;rnucehg1)+VPAitgn-&jj$R0b(gN#Qt2dOwGTP1vt z5)3%e6#SasMePxhY_C!DW z@okq!)9FVkRp&3{(+N*NZE)RLs!4QMRA7=z#rBE_M}xiJ3qNad4tI^v?5TMqRS;8w|BU12@YlSdZkhMM#klwy?@5Vayfl^-sVe5mr2>CJZnMqOVnG=L}b#qmLAt3srX{zqs6FZbn(S_QO7K*K*P>Om&wg8g}jug=z9yy~ZN zQQI0Mbj&(xCaEr$ehcCw0Ap+Dl0?aN!8iEq9X0H%V|r}29Oxrh&zDDgu0lh4WCJ7T zYi)U-L%w=E9~EhH_e+jl*3=xZSxp-ycg$h&VF|ROXU*7j$D>5Li>HwkXa(*&Y)o(O z8NY4{;;%m{KCp<8oo{q<6RmbK%jvLCWK-*?t3Qpn{bbJ@h)j^?QZ}ywig|3ASo6Xb z(PnGP7a}|FOBYJHEqb6O?tuGbdq!|{_En)^``&8kHMiol#Iq{!=v2)W8dw?U8)z)0 zu!x{!2de)*s+_Y>ZZy^qi_%t9VhwhBtTm2bB?~gOaMz6@xh#1xhf2&~x(j2r#rFUf zfnSb)Elo^+0UEgbE!G<8EH;?M;B!WRhj1%Vku*jl;8YNTS#1OLh^?J`2JJbbnOpwHb48Y-o(f+mq{u zX7SrbvzI+Ulps5wt{^!=$2zOQklXQO=7}#rey_fJPPC}x+ zOr3EQxYsJAtSu;EV?_1O`6pN(fDj&pqb`cx6iX%|`VTR|>q*;~^Js|VD|GE)AgA<~ z@Ln^}iUmPQifXAjLV7+JbZ$OnmU=Hwz{bE+sDvwr5e6aafUYGI{vpTeBjHWj?qH@; z6cq4!4Y?4HD1fDXy&P1TPB6B@``sa{|z@ z3vKWLG>Z{&((G2{-dKw{$2cS;eiH(2+Q?IpM#?sw=``qLqU=76QG~VLy-8kW%mqsk z6S91h@pcSO3}$iLZ}`)(v@u?DybTn(x8u&e@pDMM&>J2cHf!w^(K>WkuQk7?-g}Q^ zKi9m8U408!mObI_XBjZp^;LS!6`7ODM=f!(z zfq&T6oC8PaiW9X}zOhZkjdQ6nhCm=FyR)NP&(fME08=;|mzuy9Jf7>e+ z=w-@ekp^e}T!F|k$5r#6^jSV-BMKjpxNdeIMt<$I#p8xB%4mK?A$G(tnRr-30;#4w z{J3mAc|A*qJ7{i&T2CR?qBWz5Y{4x^;ARvEpf1c)&fd*-7UPYFGTVDs>@=Zw<~>{0 z)y2%E(o}EisviKe83vx@-3r1S{maWWkDFD^vaR26;>V4kw#E zY_O&I8_Sq-keqU_Txu^m6P#eyIRMl_Dj|aH2^E|jGXuwRwfGxIm}o#kqdzOQ>&ZE| zWY+qdurv7>7DhzqaP zUXbL*0j)6YY8f!GX3P$-dyG2)BNkO6j4UuUyz1}AwZ|{h>ag{ZV0Zz(Lkc0?O&L(6 zo{-NTJvR!_66D9;ehan_vnL&k_iA)Gig$qYnzXB8P`wJCsE8D3hO8H|El5Hc9Ua^` zCwv|m?rPxL`Xf?;BA7cDvFjIQs_|2X*T+r;SZMqpbHco{Hk zkT!hS<>2I{N$Ty)>i3(Lfn&BN1tvA79XO7YU2CRTqF65Nd~*8-bCZU3ih$}d8(G;Jft3c+yIdYa0qfa5_Wsir zr&Fky21jP(zs$+a=S(O2O~)E>15+F)$LgbYwJFHzex!tbI~8BoJ!(X8F>q1=3!8?pWAZuOyL^Hb{|J(nq1 z<*-68?BQY+zR!twdm||!kj%6H0_vJfG&oxIle~n7Bw=*P{|R38B~0Cjn2^)H=$caN z3>y9rHX3phFoL8OH?b-q8EZ7(E)!=}%;G{rjtMQ+#GBortf><*+(F3TkWt`iH^FEm znQ`iGjzmyjWeSI#gglG|Tk5$EWMBgtb&9w&s+d^ewnKw}=#YK(weYLqkqYokf|Bn) zt0uBLt~D+Na#%p$D`o3RkJ3$xJ}H-;F)v!-UnP0$qtCwI8W+*-&7gW&#xtXwc!(=>-R47fk>fmG z#(6i%g1PYUFILx!yS@FrEr*X!j;9EE$=l`;f#sjDjN?=Me=w+{J^_|fGh}Ubkq148 z=S>b%h$kAN)S~}D_ow$fM~r>bG94f^iMzkxMHl1_!ac9K9LF;j#F3BoS_A+QZ&r;m z`A1XJY{>G=wOlwOg>p35P+4NLj7pbzWLM@J?Puw!c(1#b#;o;@9#_g#d~?jMk!sW;paI*3soS=J z6e;_#-haYzVZ2<8cn34ShUmNASXzj-5q1c*;jz#em7o?BzsE)oZ z%1xi6<8-245d()F*r{sTxmLxpmjGC#-v7LzkYsA1o8@+#wy$67|7P}ae*OL1dD204 z^0W5g3Fj8@TQ^u|-6_eH(whau0bn9Pj&Z`Y8QB|o+a>wRM>yXQ+q?m}Ifj97oTtlm zTiA}rT+DSlJR73wma!>zDl{E+Iee{h#^;KAn+Z4(P_Sn1hvtckY^^w~3dgc=S|3Qh zz{~NH{6&hVy;g2UX8gL`Vte1aVA4cgXY|kOaRS{4A$5B}sDoYZycR*Z*_NSUiQEM4 z3oz_DIGCknY(Kc>vc*Hu+V9=<`1*oE|Ky@s7>+L*!$}1(RipW(8 zUBcj91bHY37x%?`>%$|5aEz=SLJVrZ(BeCqls_~O*d0({~J&szfO)ZK%Q@}lidW{Wa5W;Ncg|A)P| z?24lc+D3x}3GRag*WeC81HlOrlHl&a-Q9yr@C>d&LU6a>F2UUf2@J#F1USuoKlZ+B zogZ-4dDiL=&@|m!YS-RXb=6g>-{Q@JU3N^|f;G)Z1S!OAc4XWtsubx6A~6}H6@$M_ zOi$LblP0Ml0>6n1#Jf|9B`7;Wv#alTl#-zoik$G^Z1<(IAcOHYoJV9q5s$R_4uLikzKIzD&vV7bRvB6IY?0S)A53SbZH+@*wGUU0 z2n&dN0iWCyH7ZJ)=kyY$dzs7@-)12D^Q74>wK?hRZ+SLBr(9F0nVa*G|G1f$Gqjur zcHfMoRg=88YpH>+T%n|KzEL6OVJ_6)PiW_Pw)M6izSBZ9n;y2~XRbMyEmz{*?!h&O3eX7sRzQ@v;Z(D45S(m+B7Gr~0D=;JiFO6l`{R2#H2%3dvX`1yElhLM;~J}30)Ax}Gsg}L#oZ6NpV&65~wFU-M?eTG<10;+iA9lDnqOty^ z=rB{On>nF%37nF`))IvqKJ7*rvO8mn4bn;7TqdSzCH0*n=v=|3C*KWu2c`eiE^{{U z^iOLXmFcB&-udxbN*ZSkzqou*cIOQ4q_0OcV5aeN%^r)SHSP~yO4uLHxgO|xkd*ZI zQ!?zw%h%V_R}>Gi-GOfqT6cVoh2?a5P?5rI27XY#0EOHigkJy&^yztNSljPrxgdkW z&9X6Nq`bv)(kRl2c7JaKe`LSzCSQH+le2MDQRa2#VSVZUO&dkv(-NlqiA>oqH<$H$ ze>FqF9@*aM34Vk1Dn8P!d39b!9Wn}ljG6*!uJdxBRpr9hA2R0B1k-WOZ$u=W;9azASjG4t=g zACuGoKwT0#gAcvTojh2g($?(RuxJ3^a3U9``lbFRljJiO@_yKeh07`1HMbs4#iBqa z^u;c2kgX`bTR-(q^_s>Qh~GN*J|v|iYmRX!go)?st?V12Pxp!Ca~Uc5#w(N~1g4Y@ND>Ncx9l9qNrQQS(KojSlng zk>5%pPoohI$MmdQ4_IZPMFyfpcKxDOTa5f3<@Bz+=${+Fy?-xBB)kOm8A(Civ{#6< z)c;&+*@0~yeT!D{XhK0ceyV1(*Dt64c`NYZx4E0>v*kT=r-HK2J_k#(cT$mQXb{9l zzM}cB|7J!0tnKujNVYrzZI%qd>+|R1xKi=|c=f*@phhGDKB|GoVNQ&IhxMb~ysdt! zynKFf5$4eW|F+q*9Y^l2?BU_jblkAqlh$!wbei*clhb_f;Iq8kgC)3v8=ocYVqq@= zd4vQ!KqhBrQCLC(UW)X@3a)|dJ8t%_A#D<8 ziSeOVZ4j}|^6ynI?Ck71gol4An!i_4Qj)xUm&wPXsZvH{2GzFwMzpJ7EN(Ulk$Ak( znmhdc-SqwioIW7n*v1e;RpQgEfaa?7b$Ku3G;gi~9;HaG%aAAJVFlSz*~F&9R@duQfLxfcmr&aGTCcn+ykkc$R5Pc#rdih&~E6RRX~v z#tzDvY5ris=k*ynhU8Hp5bT?*MTUBU&z>AzGQgV7v*ne<6XRw>J*0)Ce$qC6zR?|$ zp`j|qpX$+r&V-pP2#z=Bai}>CNyEGY@@ZIBu-42f#R!}quZZ!&*x#V}kD%tw? zBmDOxXpi{X>lV0|#6fl`QZJEp!#mM;%knoY2-EWKA%o&r>b8cr# z&Kigwa=-5Wsht?Nd#HlmRvF>wX#F%($Spb_F??{ohD$ucn;u_6J>_hp=v94ue6A-W z#0eXhBg7jPrt!~e;{Dj{0j>u7YZ%odtZhzC=dJa9?#H?nQ!8_YhW@=*uj|fsl2v8n zzd8sSlZ}hQM~#LRJIm3>Z8|6610Z$->|NVTxYHc_`T_2uv*PMefd%+ZN z#xyWXt16}%PCU!m#Cbf$DM-u0@@$2S zW+XGsi<-*G$=NR6m*w1+o&JSS4760~HBWm$*x%J))ww5&-%iD&2)&AutR%QTFOhiZ z|9BN3@hKU)xBho*9oc3j1{%U&zS~hP0q2z<0E|W0(Djq8*X7nhBlVt+Sq z9yUtX6QxM`--iufEX94mz9Tfw zTz#s>yhIfIqVw>%iK-o&s^$jD&@tu&1U8^{lsl-+DMBhhbw$<@Ci3iVhA|gu68lZ;q zYv(O<>CIenilJDB&;_lpUp}XPZ4Knn)Z@yXWr^zY#0Py>2FL*X#&Z>XN)F~^NJv_W z+M#~X=rqMN9ZY00k8+x1Et16#A@m)9-O^OxqOk18CU4;R$~IeObS zker;AA~(EJ1w^0@`!MMpP~%zOc0<{H?DhTmjA^6VnmRtpgn632fXO_}gyhH^ZZL!P z8c(CZ4+veIGzW5LD)W5_SikZ!R9RO%neo0rSGFoZq1bzc1^6(X4wax(<0cCox4*0V zA7cIh%jy9t8p7y>Nf{SG>CH^WYy0?%NgVHCNA-a|gP}35G2G1lhmn2H&zP_&ifyJ} z)U+>MM!CCNfXMF(J`#%Q9^kf&W^eWUP!TQPmFolRBQfm&m@;_VZV$g3ueEsvIY}!Z zv;YdsisC2zl$h~lpV=$NqAFs2Hpkl;`*7@a<>1^dgXragDQr#8`=F@V33|b2vh5ja${<{xEn;w%s$_lX0*Uuy+PC|DH-`^sz<+S?haj-Jk!g%hp1c zWlgr)mByomsrVl0uD`ma;3?iq&iQM`7syoz!jX@**D3$dar(!5Yq5fU>T@iu2jrWF z?BZV}iBlx6HMildcH=)-=+z$6N*~5siEt=xBRp=)O2A)ug5M2tt?4_M!P-3QH;#UG zHP$M3d_M`3@^4+q;J5k2AdpC9^Mdx_(f1b`P`)Z6NRw7q*b4hB`3Tb z!FOi2n3mv|3%rVi1c%a`$jbf9=L>yejKS$V#puNKQB3GOz3aal_Q3LrpPqpC`6N@= zj0oPq2B_j?;A2b8ECv%pl>>*1St`&5J?~W#%_96HmC80YbFg>lH4Q+`Wt$77ywiA!*R36^QD4txXJ~fI%S(fsywC@n0Cz= z^tgxhRPqa&Y`+(-ZG-0xTF_^x*6xgFRAHL_yPD4T;s?5xg8a}4c;@>I?jmv1wJ&WQ z(U($Y;{X7m$*%BW-Jqd4#RXDFA`0~l^BR>-s(JIP%uBSIvwcMoSi6p475P_;I*zofaX;3Zqxtqo+JQ9Qj_B#Y_3jnXk<`j3@K=P zypDey{4VGhb?<+3<2xi)OTxSN__XEBp6wUl_+Vt?Ub(C?2D*49`-PD*?V2;CT}}-z zD1kLOtGYu!e)f;M?-%Sy9GTEUZGcr|Vu-tqrq-KTvT@0L_5zLr0XeL!UYs_@ezaFn z)dCV}yuT9^hCHJD@92L2o)~ip|07Qhks|#%oMzTMIG%W@-n8B_u?x1=_!R!qf$Dn2 zpSOSOL2->;BFF9d@YiHtk7gh>#%-uZb`U{gE$yL-aX0vRbd)&>IkXofGk#+kaA{f7 zwj(^sHRh+AbP-(ShOYAU`J7nM4v4crhQy68+~3f3N~ZVF z^ZsIffIBrsWV$g!)Z*Ig;av66RZCcp*LUhok{jQyD7;qUuD16~LzO%nw~=XGvop?Q z{n6Pi+w7%cB~uR0(HjCcTu3OUipZRK?UDXYS)sv-ZhuB^7iMjYSE#dZ!aI%u&yxg+ zAxM-PScJEQr}HMOQ`na3uJTItbNfuyu9dw~GR;1aesRXN8AE2It7NnXlrfGM3`Q-* z-ABR^#l3Q>z4_6Cu#FS1ebF3`K{e2`J>$RbceUC~4&5c(gGbciBboCJTze(=grE`z zSyc)!R1ZjOh2aQw-nZZmcTh0|A=rh$=BZvO(TRs~Ece$HIWG`z2i6-S_R2&C2pkf7pVIB8w0Gs) zEI7B7$T~1m%j})u(SD@g+fbY1w|>{Yp4B*^^FeVAnq>&97CkKjz%7KNp6g&G|iHK=tul6|yF_z|{F|pFRvy zoV{~*IKSxzFEUIUQE5nl+OZ&9{GxRC(OPf_QL)=LGo&0)Wyd zFfdbC0p!Xu?=&nNwbGb*9qna+lX|4u@V!pOvWY!aaL{qpwIe3GBRH+djbM293PPKa zV^hn4+-#aeRoLTaALBwvzWr5%(W?Vypi02Z^Es2p^s7SEXzrgGT(xn(297$|;x=fl zq|Wr!SI!}vqD~F#UE<|_k%JfVdA2I4$1l{*^jRRQie&HjUTJB9SKMX-ch82%1(P7I zH#rrpIXNCvz@#%X4ty(vD}X~hNN_50=ngVorBE@yHZX*24*WiHrX9hdEpo=ec&uu_ zTmmT&>IVb;S-XLMV1_2I^9MxSVArnhB1}-P^F3C5ygfd%(bf#0YQyZb zCkrm48&KywvM0$nWh>D88GCQvbnUY>?>O+%V+S;Sn#hKM6Osb~s?0}09EAtm&jZb* zd)Mz**LTmJGz2y$>&-pH`_*r!q?i};Wt~0>lh$qi3V!|M_Q?Y+6i&?_tlM8eF|I({ z!z~T{5U!zT+C%Q+s($PVALDfMD0abJSl_U4)P9cF{{S;euavR`^rSdJnbQmrP-;6a zDjj0UNvTykWmM0(|IVt-^6velS(M&u-R2SI0{N$%xOoPcbN{A{2Q6BmfU za@b!uf&wPmmb?xZTPK+4^?Y{gg$ezdipJTxQb`~`fJl@`OfR;P7rGH0M#YVwu2}SeueVlslLt}H9|1LDdyuZ z)xU2IjzOJD^i#a!LUeKU#-ny;cl)SP%M-7E`P!p$ z+Ch`8?#m;tZR7^cY~tJYinKR+js2BE7IAieRPO|MEqaTSB5!Vr;eVM%Ohl95<}ojB zqVi?8mTf4<+hB5UGZ?fK%RXG+Q^m$3^cA7Sdn$H$x4#vSFpO<|jr#u%YcYEKAx z+s2@U@tSHoQY>#oU4qI32}*TWLlxb+7}1fPQh?mE(dbqdZTht>JL*UFk03-(q0v{d zIG9uo)xNu|!hQI3s0ztt=1EijS4-Yd=M=pk^SP)F+K*#^q( zqL3s;JOD-@x26mx1|pqSwB!%syp_v3B9wb>t5Jdw+)e9BY=q5YlmaMcz1b<{0Bp-B zQj1lJL*y!fWa2A@)J(@NyF=8~l&E#L4tMaF3?b@@u@Kk7W&Fc_yz@X>YtP7m;`0G& zdaoM=5Uwbvf^l!{mMp7O=9>q!7n(v^JxH>?6}X>f1=*eKgYoGJs9322E!lO4^wmN5 z={+qxyLR*OOH69-GCrLA&NoW*97nS@V2!c_zlMQN{k?FLbsgIIKjAI@;i*gVi1tX! zC8J-{A6HN3Dphl~D&5p)0T^S_Hs(s?yix@XO|UbR!WX)vyp zx)%jWe`0AQgwwrqRQoR?O((@6B6TXgAym_6m zvQNW>*y75=?e}ax=r7pHx`&KEaL;(pcsI!S1clAhK81Bv>$Hv9nyTK+l_F)%`ThGQ z`gl&rLP26g+DnEEiJtapvf$~Eh~RyD(cI44@111qmx-9d28yDX0T-G9{Kcrt&vA(* zDnAtAqu_u+;@F{i#T|dA5ckkIU$EB=%T_3_E8OmiNGFH8`xE-z~^U*9*jEoxU`{Ty%?KPy{&?UK?5&}j!@YDfZhtI z@k0>b?Lp{v;5n0rQu)8fRy~K>RmmMRpIGu1f3>ITG0{i|CI8;)DgS} z0eMp`yQ#WcRP3gqXB#=f1bv#45Fs~f$(~RX@E@Nu=$(iqTi?v^|DKU6TQAY`5r1H|?Q0|CD77O}nGukUn z&z>HFG}HRg?)DW_9=FR!)q|y2?uQdqZ%3Xl=QZ|*ey%0LYxH&sc@Xswy4#Z*^OwEV zKDDodU7%0jM~oq#lCU zjdZd~lXTXwI6&$ig+ACTBEyBflPLJJ7A|^@?UygapPs zD3%)|gMtZ1=AdANWZ0Bto6RfE}T%>^s z6t%^#gn>-dtAA*~_pR^51K>U5vDm%eUHyz8B|nWY zPJLIDuP1+_H!0kFBA((+6(QrvJBBiy*VsS1AS+UHFkfoZg%fn7W0Cb6m2AF@nt0+} zo{P*O!%FX)W^$)RJsgtQTxw(24H@c9B6*!_C(~|;p%b<9Zi~?vCQ5M~bG2NUdu|L} zp*%>6?(6X`#Sp_ib-Svt+bhO4T(q^mFAv|s^m#$siEWfrxsgBe_?a`f3fnLgoLj3& zQo~>oJ<#w-2%G^0ff7f@1{d4YMD3)s1SgxG)2y~+%qvZQdsh`gs@#kG$}^H&9^ zcPMDoU(~b?R1o+bL^s)rGWAFbRp#MVQ9yZ@6gdZYbUpnKC>5pVxQf{pgQM_Odyx&4 z+IZF?gD`XZYUl8Q{B|J*<6Jz~(9o54!&!jsN@kUSMc+0fUd(I{0z4&YRT6B8oLsI& zrCbs`zw((FaN>_Re9|Rn;xCkyFAqY3{jyRoRH+XX7`l{de*Mby9gyb>%-^|%kKcXc zvl`qc5cmmBy}pF4_>`Y7?+(O5cy8>9-z<@yG+XO+Jj!uzi3;TiMI z%)~Ycl~UfGvtFF|C6hJ>R?gbXZ}w*(V^Hgg>EpIHw{!bcHu#M~GnlPf=Rz@c(dx*} zcotWmQMf-izO65a3TD7j8>DgK_a-Wr!eXy@H||p}p98X=<;d|RpULz7bc7;=-ssT$ zkRH`<>OI!08#p-FipW%6_#w{i<}-$Dm_j=ExY%f*$J_!wEv?O_*ke~{K^7&-3-szQ zX4@(ts9qCc_Yz5|LB5`0!b*E)dwf+Y4Fy8;X zz=`USUM%pzuE;zGO7McOEXhGLvxJ-2Ipu-n($4?!Zk@^|(BP~a$Dd1p?X~opF(P-u z8XSD}*00YE&6Oye=oA}XDMLm5q6)qTg7kaW@R7Y_s$_G;#&;gWs;~0}6;sk+x0h>~ z&3yjNT8WKSJ7(|;UHGPW;NmiUaW0I8#ATWAUT?+aa#_x0L6qO0LMcbCPeoKV-& zgqA>7X4~CI&s{^sxn?*SqNqzX#%&Ns%H@^JK=fU3`Is&z+HC^1mj`lhA5DJGMjY_d z7H;&*G$XzTS##>A5RRL&N>v)$z}9`w|~j2=kMfaNdGOziG53Ev20Q}a!X^;hPJK3R z+6~y`k~D_eE`Eq7?xMQT!?IJn8GUoGDB~xn)&ZoR!5lZmh_B`fqz9^TcEh#;ft;J4 zE%()qHnMp6mO%z{2FxB3!45}Nl+~PGm=NYmJBu6{9`>PM-h;n{QQE8Kp6T;Q%!7e^ z(acfO*tqSB(<1)-9Y!}*kq8Lf+_~db)wg2~5mAtRG-9pFlXKDs-<)wttxL#8PC=b?F(q&ZQOiDe?O=MuN&9 z@nXbyGs*b;Pf`9s~x(H`k!PZipddjW#W#qomRs2pc-ub5U|!cVr+yXJMa; z4LhM)K~iM|ZD}DrzSC^jxo0vf_i+=&QEK~C7g)6FA!_8Au>V4?$256wt6y54)YCCL zs$Gk_>Dm0=$&S|Gq=YRT!lkV`v5nM$(JOZ6&u)_}x!F!psoYb`H7)YagEzn)7RXZ^ z?!nFe@s(lHM2We~~rm+EMi%XvnBQ?+GWEJFnK;8ADf!G&TCwf_Eb4$B6n|K=~Hr+hXFY`cupmnAu7|#Amb@-UaWeHB3JRK!Oqje@aT8M_EEW{2?CB6K-cW z6+6o^+P+uG1GSY}XOP4b_Xl>egBwP}rK_sh#*8Y@!Dhbp=N)amL)?za+Ci4cpZ3`X zCD!E5rd#v16z?A5Wd~T;a=`3sSrI<^%=0hc)!Ma;9yte_L6*bXcW!Y-2G-64<|diq zhs)DojH>60W3YN$!tV*@W$W*>1e%Vnskcl9!s6f0mA?2|fAakHR|`gRd}2UCWKS5^ z8zJr{x59`f!fU#EoHVvX$x?~nm>Nmz5cr6ggg)PXT!fmE_=+tPOe*(TN|vJ>uX~hb zEXkr_OWpR+$bHx3*3H{zADpY|c%tp#N1^12g`Rmc_!s@TyS*XQs+aM_RkH+dviK-x zhBF429l!NPSO)v-uaYuI$BpXm`dz~OMKzJxVUV~JtC)70auuDrIy#L4I*miCb@mq6 zDJCsvf?QQ((eI>_m#(l)y)dYQj(>x?IJ9+S#@oL!n!9xG(mRn#)WOw9>LfWKY_E*@ z=w@4_7Yiv3pf`+)NV*C=H~z(G*mz;5Zo+lX3w zi+l{T_s^~-E|C0`95PIn5g3!1NXioNp8%65^obB|(?&4HR=QEYz;+_bpU+BZ4*j=r zZkQWFdYLNP<^brU9P>k8)PI3e0?|IiKQpyp`=Uva-3dh2L0g&J{KWUHac*-7frmBV zL588yj6n}oHmX7^eX|6_vSmF zi2u*ED)s~tgMul3lexLN{(|!h9;pkJZ@BUN=Tkx4c!Op5$x&fBw83OSAP`zIc2NY3m>nY z5GMzUc2h88Ank_|sGtGR-7_{P1ybDx+bA!gf$1Wp-tv#%x5SahfnXJh#dtR9lS8Oo z3KfSE^C_aA4sewi2;TzGIL93{QP?knf3k_{W>heMK*Y#5E6Dh_f6_#u`%gF$Ps;=U z7MuC1YZW?FMpZC{ip2dnm-%qYij%9pA3&C2nn4lbD=F{<4BuO9u+x1aN-+_fOICT! z0u^fOoees!(3k@P+++X{D|2L^CZ*eJd3m|_DZ&;fyqBJinz7AeHm^#dVNfAodO^%-D%xUx&nDQAJ@WTO^QyMtnNg z*uk&oGR7}#idqmEN`lshkmm$oBv8g{%!ZPhaG=;XpkHz}=)n=*G(W7~dpN((7&}cS|-;j1iIyS?`Jvw-SJY!PW%aY9yS-iMz8!1vxwFJ5y-40(b zHc0)vLG&8ACZjK@$CAWDtE2Wp`QhE-iE}8A5Cj0I5I==TC+Ft&`cOm#03?i$i-8HI z5I=b5)Jg{V^A|~$Roa^qCRY8=BCpY$t&W%K)gc@AoP6#{=GN`v=!2zYy?2VN43))& zz`$_1qvz>@hS66i=eR(x+`bY_k{>{-_IHhN%E_by$w2r`mg+o7QFEi3hJO4F{nKZMLs&SEWB8{1y0S^j+Hy6pPm>W;{zBe%qVZ`; zl=xrJWMkrYVZJ(F0?{bM5Zgld%r?rrZg$fO@T9jrjE$I^ZxQ0 zOyVw6a0EI-?4uVJh;Tm5^`!N+sVAT;93LOotI@*&)1(gVIAbgp0B0~YU1Y@r;;(ar z85?46|1Ox%;fBnU3V$tL_7rD7iU-a#x2+{LMPEnq`|3{%;+`?De8POgVk~(S0WA@Q zj!S80(>0rY6Ws+1QdR^2N1Sq%Kn^Pq|Jw7|s?xT!wVzRm@Qo0hy)`=>ae%%6Z=iEy zljf#1&S|q>`ZueNaS%uJD^cY|;4IZ2B+0)%Z_@G{!rb6M!J%Cus)%ehOTjQH2j>Iv z(zoPsr#|odMNnD6%rGQ=*ioItusX$Ma5}8#_WNTqLPtvXhJJqHB*R+;07>kQHrYpr zgJJNAmi*_A{$;5}OuaN|SMLZ&B#i+X-Laq_DT> zuyVTy<$2SHkFSW~)%Lr7nuJQ``EL03zJIDRvp{HMk;L~W@i@laXlGbqfwDuHm7p!% zE#wrgaxNj^C@-YmBy&ZAq(dT5Zk|wqdmM3*R-S>(5inuGS z#aZ@Wwr$juJvY^DL0WQW%x28=f@_|p6lR)LxYQI!KrrQHuXw=Ch+*972T*!64`5<< zZb!k-N&wm5>OfAwiYeRl`y~V`wQ8$%W$C30c`vESr}G9j=(**`L?OCu&%9lfX7D9X zgWElUhMo`|1;$$(j}{d(M5D~NJhY91?Iq0Q74_klur=Bn|I_6w4OQsLD`EVaeJZ?C zUBs`$$dX(nRIkxY|3(ff;t;*(N%39D4LAe`it@X8N26zrBBwL6GqW%gFe5Xwzr{J@ zpm)WCD{!d`sF}2d5z8>J)40mlE#M!=oYoJ6gE_Kn07O-ekeb(JpjG5MA!wJsmq zcC}AF$mEJ^hN;w05RzNK%ugJ|cqh5&K}VoF;R(9FKApi>5oDfuoLp`-Px~NhJW;SC&V#hPrSIZy98pkPHtLbL}|mtkt;` z@6HGSyG1{>T9k4wcc?^BKV$BRWvt($+Xc|||Gv03(F@7=Px>=XHA^s_Ou5%V&O6e= zUgZYdM9hGefg=wmV(spf-C%rt4y^V#w4nEA#_8(Pd+$*x63NQdfN!8n8_|<;Pd}i$ ztYQ)k9p1D* zo|PzK5>>3ngj*l2+B-zLp#-bhrr*+LAvK&ugLY#jzpe!7{sBfmUuJkoo5r5OFm0=D6k+1#AieEPtN%VU! zjYNi{$oWTwbDy;CBeLg}ey&j=mmrpNHrW5{?j+gh}Cj~kO!U$3{M}rKL z^81?*66qL6UA+rp<_7U8S1^V2vskkr#=hyoA~Hkl$4ut_8JEqRN-zB-ampRfitT9> z+&bOrY1Qn21(v`_?wahq+7FfghBlb2`L!BTka_Khh>cF0Kla5dog|k(2E#W79KNM9~;+fG-X@FK_o$= zq!)@c-_P3qq+zniDlE(7as%z>>-U@c_@yh6RxJv12tKPuBWRGMGuefRzDq`F5czh zlk$veYzOzJ z=CaOW8FEKJV`F8ycEdQEZ+BW|26;c@Qa?b{Cq+|g9j=h-0U0X|Kt#iOghyHqNj?jc z>f1$D8cMhYAn0MVYF`3Juv3$$isY?x0Qn~a=3l;CT^h|2KlzyZ01Rv+foNRl(C!da z(^8N8%tU~VEQ!Y30N8btkm)6o_@0`i#uDUgCU1`-=3smw{Q0$ri239PMZFuD+&J{f zt{^=l?C*uB^PJi|zZ9O1!)o%9X9Wq7{y_gfNCB%)O4~~|mYk279WY|bcl3sVu1`Kg zPQVz9C^X(qJJuif?KF!_o&s`qo&iGUjSYOdUn(~RGjAnZeVfUtw?DuJcq=uc0;2sS zeIvs>gY>_xN}#8{Ni58B0|s6Z9T?uJQU!N%f#=z|{hb$sp?0aMPdDA`hix z%(6#_q$V?B0S)yHH`(XcvdC|{p1eovf`9-Ff3XB4_n$tmI4amHRVjtjTU+TPzok}? zJfl;Pewu)<_{xVcz`GOFdBNvy_Wx=B{p+d;;wF&i|GY1i|BnaD8c=LFyE_W3y34?a z4znbMf97S2Uc6HPhz2o3S#N0JXIWVpeQJ;B!*ZGzYP{Mf1B3hj z@N)&BOG?U)AvY5Vbv<2OBl`nu5KxHwyD9{b_kayCGE zfr}srIHE^6rhSkD)>b%e!oe{*YNw0OzP5)UXrY5Yw7dIIFTlmcO4!2QN&>zz>DAqr z=e2Zh#F2ZLQu!W`*r&^g0M&`K6|!3a2h5O&79?=yXL?2J zrR(?m%XKt-s^7>Mzqx+4%HXagllhMMAFBiOQn)=5H;crGSBL2-qnzt^tw$} z??y+vlck$-<{vMf`}@4d-)X&h5mcC!N~uGoLj%=@|Iw8cpeyL!+aK(JuH4cm92{YV z0QR@zzM46Sydck!0r5;%SL6V8+k^Mu2k$sMrAn1>%!>(3oe7~ zXRy89ER)D>|AUz8<}2*~HIMZNC@G zyWg3SdOXtYdEoTpI2XTod*NvE_xw`!xkOz5UWdb>*xRVp}@;o$kNdGJO+ua-m z;eQoRxnyn+rwq|}Deb?Lu1F9GPN*;}w36jzm>}j-nwgH-uA?$MgR1 z)1B&lwaRU!KkH2yK<~QlWs~lDNSfFCpabEos7wC|w;c5(Te-6UE!41Mb~H1Q(<2m= zBSLZ4zCK`ah6b&Qj2+dopX+vo1^GFI&+)`&cAta@R2|ez-hUI38mY6+J8G36)QPG7 zXJZ3QBtYG2v|h>b6CmJONg}>WUSi)l6P~jx=aiL*UL90B6w}tMB|b{}?KJ0=2k%iT z2nxdY-$>1ph8EytmhAnu!t}hX;XqwqAZ>wO7n2I$M5GG4^lqTr^y}=P4P^ODqqvc_+Q>#A-^? z(Brb-_)pLQF!F&W>Rw6L;{i={L{yGhbh~iNvztnq^qXjuUhgLvLoyAy_3^eF9mPB{ zu~-FNXIOm(;kLBhZf-iV4!9J zUbjB=Y6p+ngd{I}IZi~pPD_xpzn_999-&`xz}hlg!A3PM+2XSE^7FpGr~bazo&v9@ zx71x!N$6bBi1edPb*S{w2^NyYP7K2)4cS7i$a$vvSK%KMe+YRIFOPYlQzKKaB3>(|tnHsVGyKHWe#GHFIO66f#s89Imj59r}z)m^)y6!B)`abI*KV`9L^aB&KM0s zs=@f!Ns5SSXEF|!qY~)zZ*`N{$*IGg z5h)0o^jim%Vn&IS#(c`8*KdB~a#DRy2X9-o$GlePsQ1@3-*_vEwvsS|$>hiev&UhUnZl^!#9#-YCipyx|>lK4G?>GO_sRHv4*Jml+ ztlti9`)z;ACmT#YE?gPr@JpY;Y)Qm(||4}sO!OTlyBazkW8wX(eBgJttqhBl;UPQeC03XYT&5g{-gb6 z?IWvTrm?#cUz>?w{bk&wnK|@vjy-R2c!Xj_;t%(}-^sxbXl>4m_KB+aHG+Q1sgDkm zZSt#EZDih*K3vLPkh>nUXy@<&%dT;pl8$%e(sxIYWp2Nz+IpzVqdfw$d)Qu8Szc7B z#VTq~H*|&A+t8b1^t#OOMGOtuFQda6ui*Sf%dR%n%jJ`iTzwzDuJGR~d=t37@0on< zU>rl(a0So77Q1KF{>n>3V0#v%OI?>2wm7cOO%` z?U}O|O7pvOw|-L8$9}(MwC&}dU3Y1BuhVI2R)tD+#EFAH`*=Z!afs8j-_@}bN9G*E zh;)gJLss1-J$d;wq4y~3TQx*Xe5!2|I)hQiMXF0}&%KT`Fis5JVbfNoR+D-)aWP1M=BvDWGOdD5gwR0*SIFi<$A2!LaW@oi8R&vyLGc@((g{tj&}M) zh-!>5+I6mRv(HNOQv5dLR$%_R#@XK!r8T|-2#V(#BT`}`DNC2Phj4}Tgo z$-tmP=9A>=HpV*b!WwYI$%K0Zk9iwBf28&e;vPE}!(X*?ch_~FMp86gcAmw*lWu1R zQzKnMSvBEq_J@BkE2GnvJPD5!=Y$zv{q>Xt9q|r5piw)XiZn)a%p1f}W>wj&C&J0J zEk+u9079w=B*DjOQuK)kfATaQtL-2(95JhHjm+17$i}|&EVj(^FE)YBco>-%($h|S zI$!cs+s5G_L!dqn!o2$iQQMBidUxZK)&uq9SyUl-bsW0(Yk6^w8{Y*pyU%0X;&mOu zr-?o}U?3(a_q!#WSO^GMO}6pg6Z2#mVcLyohBiPSX~=)hnyvlFn4-4%StBH-F_vr! zSr?Kb<;o(alCZg->I%q`tGPuwxL1acFEY zeRB@S8izJ|Srf|?wG8yvpRZhf6PjXF$rvIrBwbRK;Kfdb`W%E!+89K0Gw~{CF8zsr z1G8|%Ee+)6u31ha#miW0Uvv^7F3kNMQ_*0~Dm7B0Egj(*4O69u+q=@+Y16=>442rumde!^(ieyx`UNMqKvU-by~ zU21uY;Zvi6liP64=KTY6t*)%CMzO2=8{=|AkA?a%}=eV}@g+G7+#tm0BXcB|d7}mBP>RLBm^@di=$F zTN7tzJ1z2n9OOtjFeXKE9Cq$fz41j(X}^fonf+>Wk(ei>ByZ@N6P2;SztTj&3#zeA|jHq zz=US&7`*oe-F~w50sUyrV%xU^Ub$aM)8^8)miM#Fr>^G(#*D+i=29jt0E8&Ek9b7~ zxFGhCPu;n4JN(8JHUq=##a-9+YeaN@lp2o-I0l^QR`Ei|yaXZx46?tQKgJqjuFetJ zIS#~ui2k4UzA`GxuU{LG7`kETF6pk3?vM^e8l+ofM(K{Bq>+#YMM^?pq#07W1f&~* zArugh_vZhcbKY~FZ|~Q49TscW8unf6d++_*`*&UYx~lhYc7tbJmnn=+abCB6vLYc! zZJwRqs;>IPtEO^Luc<&2FxmW5>g-K+e{XBTVaFcQ9fd(xIAs@Y{=r|*%`!O9xxsD! zle7I-J-O#U#T?Lrjh@n+ z5m`Uf>|1+kan57+Ppc33{gMc8C2Uc9`yD z)J*J?3W3~?a`e$lXv)YtTY949vgc=i#hT{1rbdhYNj9+RzrJt8%a05afksT5t$ajQw#P;F%j?A$i4$CVg^%n?Mus7~B#qg4OC@mFnIL=Z~o%fH;Con3qX zkmAHs?0auE)Pd+@+t~gD)57lWm#0<2u1~J_oGh|hu6w!``7plYk1ez}%`R4RJYM+T zaT2xb&(evW7J)753DVQ8bVdFZdRYm~WqR20V?)suOPl`A@rgCUynP4ZRkNxI$}w1q zQVs^=M34U1&`XN$^%~j7?ph_p&U&SO$M!hY+s?6V&*eODMKa$xbYD-|BaK`9#SbKu z-}fM|8^1$jgCvNYY$|knT`r%xyXzap_?NIThr$BwQZVSo{8o{7c;Ap;r{J1!i3<{r z;knlPpb*=6d7rUqzw!TP{WZYW$^7RCK-pV$2MZlG92azRj$2RnE6>Saf&ujf8tL0w z_xSk0JV}n1sYATwuJYN#Q3_Z=V{(*#Jcy_PG47){JNZ5(F1;^nx5BJ=di-8LCa}5qp^5)Z}Ls~n6 zK41|$w+Otj6dn<`#LW1Qz?lF9&V^Q{_lfs))LUcmbvww$Gdma`Z~S>Q;e(@-k#i3T zdthSCVv9l~DoRiC&~i$2%Gq0y6{mpx0FC1r~p<&}1Ia#&i5f0H5-!$g4=~<$1@Qy<|p8435UPEiukM{Ll>4(LB8z z1J%Np9}w%2h$;6jOqp*95!&Tr-Eze9mw7gp!%|)eFl){y0nN=E+J`MOQ+bdy!SB}i{~;gZU4O3&0c4m6a_uI_^XAb>*-Ea8Mj82O&Ed~TCHF&;_HnL4k2Azs`@%E!Fw5x1P~BHT^0oF|pk2NB+u7-WpI^&6po z`(a1qp!?-Z0xE@UxBYM&tYoqRIz4{B?P#94C;2%}TxvF-3}j5Rq^$PRrvPDjGq{GU z?#n;|n^33zQDwWw1w0ZLqpNRUH!L%c+G869J4ndCz0YO>zZ<&DciN)MO%qr5%l>y0 zxY>q@W}Kp>&q`40V{jU=86ARiL4vMlje+|Pz&^ncm%-omLZ~@+q{5Ryh{QK4+{6ys zs!!sL6w=h#cp=|ZRCrVETEyWg;SjL7iWEK@eX>u_uf`W6yxfZN|4J;lrgrL+oAaCM z`riXAVc6`U)R8%d2KztiswA+_G#W+1%KQfn{{dfs;#bVTxXyS~T%!m)ohL{LX@8nA z_w@Wz*>-AO*iVzkK6QUF=)CMU9CDqq_DrgL8I1G(>DoYo`fX@yp~>6IAs{_K5++P$ zgU~eUCyptoC?v?qm$-u`GH7ycdk>OCd@goSpV%5kmNnK&OE(HwdhUQ}5!MFMLwx_t z0|3&YI*?#J{6RjW0X#z&uF&&HXDgLOyUBr+!DQb|%}DRxSLT6q9r$xWbXK&;bfE$H zS7AxU7tPomA+3S`3Qr|^K(21WsYdjE-Pk#R$@h@j?*r!F^nZ0Z;8TliJUjOdw9)9_ zleqUBhhMU#fBris5$Koc>_EM+GamjAIv^0@{qJXUw?tLJ|9ZXu^~nKThbK;5_FwPd zzi#WA4|MjY9m?+k0O6k%?SFhKXad*KTAz6QAIZA^%sD>g0&Y8doU;F~Y}r3e=>8u1 zZ-DFk@8kb}RQq=wUq6LrmP##puN@sFEUrHewdA8?S0j6q2Rb3wi*0LbdlSh`I*%6S z&Wt&*ek734);4CXcMH3oKAd=cywoQ8<2Ybc$6{~M(mKR+My(SBMrX6Zgoly}VK9)^ z8BUQhT8m-)k3Xx~i~|Lty8#1-qW@O%jt#@qRi=9*;eVdc2_ldI3b1d9z6AYy$qSWE zEnRhJ;KYBs@%=Gjit3$O-`=gTw2b|GNfOAsY7dkwNc&$;`mc)$?E(cf=dzo>Y5uKb zoHXo8*6QO)-=Y_wO>{LDLWIv(r=Z7uZ-imH=+Q#hcGzs8x5sl=*F%K=p{CUpy2Wcv z15m9B3QoU$Q)#@a4Y_r@yk5Cud@Q|{KAp~yY0iq+H>t&|4gU4PXoahoX*vK<&4{^| zNwdxOpWTziOb-Fnz@unHpGSU^SgbzYYExhn$^qpC{r>I}D9|{r^vLA;d`d5d`s=Q$ zEpX%^Pmo|-@5(C9Kk{mJ3H-C#&E;b0e!E36(fln-B7pLWobFsuH;6zM0}r?}VA7NmPAzN$hSk&7xvv5vfY{HYHP-Kr*M}{~Pk#TbT4j0cP*(o! z+iO%8PEU;7d69&fMd7mloMlhQ-?PF3Mvb96RE#|Rz*)Q*qPPO`(T(B96GFy)`ODRa z*HjWokkbKFL)O>os)l>o)6HpChfW7TE)=@?d(lCBHny_T?+S=Vt(kTFG0B$jcv>_K zZ(`DAh~+YtgZFCb@BFUYdO`a}ae8uhS7S`%g(|{-fVW&gpy3sCV1Z*e&wH`h|4VTd;4Ts#humEo z#asXcnbP#luOaJkT;0^|s3>nh?xOr1RYD&&UMh>1|o&(}#fI9TP}f;ETgV+C2~P=BJZ9Z&Jt2mLN`b9?2r5 zsd>>3b-CCHz`$wUfvEOv%;x~Qqjv9vGVXOn9^ukuJ@Xv|MQz8(-`LJSf9uh`o*>95 z08r+8OOIL)YBu{6c`gCzC*dS22`5#baPVbu{kbx1cu|$wQY@bq`-8!kLpccyN6flu zR`xCn6|TZS-&Gvp-z&FA0XP&ipdy!zM9Ih3w|~e(4$NR1JUhMQdIa~Ik9+W~FS}9O zk{vLe_zCEKfEC*~ZrI1>h4-HWXH3k*dBmZTrQ<0mxag>}p)0s&C(rNkL!7>^E75($ zVH-;{$N)Zsy9jEN5%6BzC{Z$R7_JmCfz)T@N=QO8OiXcCZnh=WpQ-vt1L9cZ5iIN& zl52IT-Fr3yU-1}2{!A4bN|Hu{WC1?tuXs{uGzDVAR-+H&tEHj*r8fYR(Epw1 zz9nocqlfdYyGZ!S#I{@QR|)ZmI-+%`rg~2PcK0}^Gr$@2YGCzY#KLyO&XQuJTlm^X zWq}FdOMdj*+*Q^pKTl)MS?sA*+uh%5BPJ><=vrt$fi3op1OHwV6ZB>0=BVtkj!6$+ zon4DPZM@?)R#!5KNRbOD*UO%?T_3dxiYK=Ue;!!v(!5*( zT48#PH6VN&h9bHI-OM;(Vxyxk`*Djv?NJZOJgWj2?Bi2D=ApJx^k;~K6mn*QWOzs3 z=}8>l#N#9z9adw(mL*>v*)#JTxA;j_OBBgw%4r*YQQ>a|MD5;~3JGEl5Qfz$a70S^ zpU4Tes5eCY31guxh+zr%HDg8$)><$ay@Ot)HRnr4zDl8S#%aL5K&z$o`|yRh*y;pF z@+g3pG5bt=;eoXpqiB-?Gu~w4rJak4V!aQ*^OjiG^-u{zkTQARX@OPHzmi7%QVZOr zHHh`<#<^LKyn2x@c6AKs2>*yZPZcgZ@Co;1BZ_^&KdP>|V>jZ?HfltZYVD}X`z_Y@ zv!0KTc=7sly4))X+KJP&Np&};DgO)_F0e#K&dMFQJo6M8HoXcPtaT}D5807jap|3( zItK=W_oQ64Wr03NMU2yA->PQZXV$3PB!iGXzy$&;q6I@RH)V7 z#tQr?Ci-P$ag;AqaeL3*HM$ZOE1Nfa+T19PoTBnDE<9+BlJDgDyn`aVjDZc9r#N2QMd zo^(RvrtQ*1^k+0}HawF(TE||JxlBiu2ik0}(u`U+lI7bSbA8`VOL%eZ&`8`lBd-8& zB+aphW1I++F*`AWa$%$&0~*LVd18eKe1TE8gCdzU(vEP(e1GN`iTWWpoz2X_Q9?zV)GsJU+L3hsm zZ!6EN@BWw>a6zla?&bOL5xxY!S3>U2mkr;}pZ<+c5Tm#?e&wxRQ}i{D{Fp*sbva>Z z1tb@nr<7CDWql~H5$+y|DE_^lotJSq%Ynv zI&WdU9c^Pj9Ayx595?N0u}q_*rjfs~ejy4qk`C%Z)K zxei%m9lKCfikr`Pxu5-2nkw4xH#IsB3XpYN{9tS`>NiRM*gn5GS)JI|O%6d#mn6AA zyLLyUTy@Rk60z;u9wlBC`7fWgHeW2iuJEAWbunD~bk(i*LjHrcubmq8*3vVBg z-I5Rn@8y~@ZH0aT8-(fYTmTNrjq$WatJUBESvtEwk;f{~h!l>~@rTQ`)AGPhhsM?9 z$y3j}L$8pxL?<#T=ufk{0nOL3_3XiY74h>l=uX4CP$>CL)VS;k!M;*+c#I+nALh9$ z*bsRdTgdSGXZ@PR${$m$F(yWCh$EjGW|xsM&P^ni@xlq2gA9UmJz}$hu%u7kOVTkG z)TVAlI>9vI|P8^=qRf(Q@47nr?RI3EBrA*f8Us+tvHH90_i=b7C2n%alKTTv~NR}r`nuBtIR z_AA{Z_S{cYS1a(AQ?L^ z?pDhIjww4Vc9(6ItOO;b{Me{NI!0bx0s*3!ezK_^9ugW}vhr zIQbzlWAUpx>;&toAM0r-n?$cs9)_*n46XzblylGGZqNN@^%quqXOQCn0oqi8&&gEbU$IAR@h@XBU^1hRIH7oAFV~CZ2Gfd#yJ5)80x#qU|1DhK<nThq*C1>@i&t*qpLO}5djYtoE* zR_G0V`x-FhDyM1g*hkSfa5taA?ZW1%toMPwyy*dG~K4@DwgFuHkoI<7l7Xs9yw5qF#x6x+&Mx)ZASv_`!7xz@HHUuOjrBjx zKMr(iIG^mlY|ts7-HUdm=frQVTYvwVPi#dIHHE*d<2iVH*h})Y#8)T{#K{= zQIYATrB9@4oo;ljq3f0U#{W&2g6&D-3D}2mS&gZ2oow%lN@G+u7w-a>O^BMrCMmYP zr&l&*Crh~JHN*P%XjHqx02)+<1%?YY8$d(cofGx;bj_0qZ?|83J?4N#`UQrwJbcia z*9;YdCLaMCP4>QyJ_Gz)Tnb}}AqT&f*#g+GH5=LC z8pzI(40?g}+-R_dnH6j+_EnXv8CCX;EI-<2%=^IZq9d1o3VZi7F z$RL^7i|km!q(SDua@A6%FDA6aQ8W-(h3Va3IVK3x^Z!uYbt`C@!oY>e9Mgq;2@CDc zPo)MqIpx&{ifToq(-Z_uo)Fou;cKWVwfpqQnjODF8h*Iow%-Nj1J*;Y_p2((FFa)~ zSD1=iu2?Z!qkYJgZF4TsN|mOE=a8@Ac2VI0fRYG%1ZH4Nlsw6$aJfd2n+Y)!rl8T4 zWm1?5f1FqLH|Zyp$Ib-L+EP4$9?r8BkreKyB(3C8M$&0(Bw~B zvEG2w;yGe0RX^oQJV&+`f#&xG)a}*yA8QWs_)GWXyeiDN9d!Y&2TZ5H)DHh|^L6%2UBoGLJsZf`zl052fC%nIPvs$R@6IO(m>c~}C zeU>I{cqhmm^L>0M5`81(^Q~!Qn8FbD$OTsR}K!d3x zim8!pd%AOj87i=BcS(?GzrD~+FAC5V(f zi^z6b@{o(W)U9aV3XE%SWThxF)nas6OWX?F=(F}9DO9CeZ_kQ*{Ua$Wb82>PUR&nk z#PiJXxl$`565)(X44VEykvZ{{f>dDnyj*f?hVptkf!UA|sv0gJYwlYg-2DvKsU%r? z!Yup9HijXSf_`?qe*@!_BeRGPNf-!UP#&U10w)Q0I6}Ft0;Tt~03AP;eV#{l38Y-Y z+L=@E#SSCUs&fvhcAfhUoXxoy=k~F58R3tT!mG`<|8y}RZ)gSrzE`hMqcGP3z$bBAY z5yC;`aTqG|3+OoXDW-H?4PsouJ=m;~DlnV)5pl9ly@_(B;e!gkYa1eCxKRm|*(B4k zCtglrgJ;kckTE4Xk2v=O5V!2lI%Oj>T&^vdUg)fLo*($((-W#hKT0*mnZ6rD;4jv) zu7hIlH;~|GbKgbU*IZCf3B+&ANnjNY0H=uSbeMmcvR7HnFWhG|!}0;=mnn@e_

c6|GK$Pl9ICQjdP~amSM6$2U3(^T!t?c-_J9I+&R4?@)Z8uCv%;5|Te5$c zvO15Oo-}FB{hWHQJ9j;2kR3;bFueh3So+hm$ocI5dKVkqT4rb$jo%K(gq>Id`FxNu zbQ`*+EM%qIFfy!!VxeN%!dIPgz}$zUA+(FQ`QEVfDQBfNg`IhAytlA5|G39Pzs+p=DwZ4KKe+87++uT|zlG#(CHunD!0 zC_E0$j)*U+HGz^dq5+H}OYFXx{`ln4A^RTlH#njke^!{3T9I7G+g6Xzbt?POaBaml zd-6zr(FdZsbOV_!f1=E&CM`Ikyc7!mo>!=Ii{&ZLGbJ`C7Kj+!JGxBmc?E9JMFsHb zQJd+F5Vsv&;DsaNHd9oaH6{UAF_N-f>oV1xp6j# zT-MPJ`9sR%wQ|h&RCtTmG97RIA?(u$WyT)e@g=ppT4=U^hX9L&DTl_>Vfk8YJ)Dzj zk}c73RHZ)gGEp$pJG-Lr4-gaD83vyDXw^N2QswqRxgmu?O! z_640gjWKPEZDQNop~dNsa@LXPiP|aVT#F!k-)-$c2h+aWY;?xU>0wus(jg56vLS7wAY#(5EGR) z-~5O4jer+cLIQ~^j*mdFx1Y)`jqj{Eh;PGihKExsh`%E1RmMmE2{wd%f30!v)0p~kE(h!!s(?| z9uxb9jl8vb*XN1;lV>7}hiA8OQoCyD)RghXhnoo_wVy|uDhDVWvpUlAE@YoRj}OfM z)79d#(4@C>=C#q-Z4xwg472K}ne#a~))704RtzEP^@9E#9uwXWXNsU@yE0vY8pyBV zPDoAo=c(#>o#fM=o&x0LrBk`RHJA75hodmNzlW8+!3=3?j=fPDYST|V(CwWm$~=lOu`$sV_+ae?EA{3|Ph7lG#PO(b@X$@zu}M!BHt+?14mNWdYH1F6;EIf zf?&IN&u!UWCRg25{cw7;tw^q+;FWZBV*9o>u`5h#f0fo06f1K2vMlXHPr!Nhl-hqE zhnKtFmtdJK)$S6=jdW5pzp;?w#vk%AX}>8rDA>zwQL`~839S%nM^R<%bP8G3H$Du0 zbWFZ?Qry{b>hsM!4m-Bo%Pf_ew>~qt&*Dw81>(`C=igih)w7dhcd!aLC$ooPtlG8B zybt~=&R1m?mD3}J3$K@U@IG+aFZ|O7miwR&S&#*pf`TpnTIX*_(9wm7AAcy}VXz0) z64<}jfs;ZQBH>M}iPDx4lKND=74)0vTi}9sb$&_rX$flHLSG0YYcGWt-`U0xrU2CP zWVO-*YPzb8=OK6zA>u3>SU2(jCBe4h&CivTBNB?}yyaF;WhQRQO%tQK>1tRKfcQcO zDT3a#5I#w$3vy=N7TxkEocarKmiW9=Vwz<-Xegy{CCk$@UG?RMsZxHiKik?M{#S@T z=lh_~jy|FrG8`(UQ~PuqE)Qy~x^8RqoNCB>q1lzp5&B!-MLh*=;0)P4ViEx z)&6$YhmZNJjN)yKj@T)=wHzXWasVW_<@gQi!a={u&qA-X)(j#Hl>9)=O8l!+d0=X& za{MFxcAsz!3>!w}7xuxz%DPY%lpUfYa0J(DhxJHxDRB4v+-$ZBY?^rKKzFH{)8APO zy?FPcQyZxrxoyC7Q~M*Fqok_D`m#qb^<>o#wH18sFLnzqZTtw0T{hYX!N9JncrZ!D z*{Pe!nifD4%~7is+`e*6P-$yGMACkh17KUbNuB1VTD`5{9?n*3E3GhZaVzu>?$Z1w zYszc@6$f1Cr_8v=g(BOu$oT$&w9I7Lbmvc^NeAi}r^9__<$b>2<&&AC%4_?7;bi{_ zX}LxN)7#u1-T`y}6R|QT1fqmVTgg!}0IL1x!N5}h8wpHZU0?S6u>4QN?O%oZ;+WOb z#)nC*^8f8%;LLZ=0eq|KJ7GXT;ypa~Uxf-YBz1;HO|tuc|1WlTUl^9lVpCTBTyp7$ z`2Ril{!9~P0CW4_f8c-L!2dR(|L0B|^mFW9dxc2;2IW2W=%Un+DdgtF`yTvNX9{{@ z+>{c$J(9ClS(1b|CU^a_@>HfC=x`Acow!_iBuP^1vEf`gYQw8c(=Y&de5~eQ(*yL= zFYrzvEArMM89)Ttn(*z&Tz#MiIZ?6UEzmDqZmR&^>j*z4U@_Tl{L63bkz`Bm>Z=&cu&bET ze9vumHlZ=dS)@nvcTSjTrsd1;#@F5Wf_cq=2#SQ|eE2x~ii(*N<{vm(Ao^tUSYH6& z=uHV5q}>_wVL~SWLcL*C$+Ql>8u~rKa6k+UV1FVup7BRz-QJ6Y909IjsC!r&FusxJ zYnnFH2XOxn5^?#)d3(I<)J))Wn>Iuge$Q~+#t5Q9Q z9FB7y22gUc8ekERnl{qIO5%AC?I?nwX0uLWqjPU-u@(l1g<4S&Pyp^fugpVkeiZe-+m2e@))U{4SpWn7wg5)U@+-H``|m%zSql5va5}`Byo%eH zB>Y(Bl4?=*7$JI(=SSTr(jsr}z0C?>+d1qV%!}FkF+jLs>DVFIyqA#yz;-saSK;eE zfW=T0z%t+xMvn{yY}N$a0mPAqAs%b)xc&O54sZ_RRK<+iyhq4J!c@2)<=w-nZxl+e zgoF|oJ=^&Cn&<7}ssJ-n7tK9`2PE$*nYKRxZ-fgy+AZB5aBks#vS1Z_wH1f!0U)Dn zqu2Lw<}Y*Tqz~W;!_lR{A)<%16}6Hidz6j50shsu-NWh8{DBcLF#rVgGPeoCI@NXw z8O@VMSJrq8zkBlO`8`L1ov|wq5=k=JRjbmtcDa#E4EU0Ti1c`_#{1S_$qQV%3&_2n)S zw~Q;{M*&`W0wj|!e}8wX_-)WJcwaYcotMa0gP&*TdrHtl6j-`Yp{$+YNNXFOK2-gr z7H`=}k`opiwtXx8pRn-G%V^a0z0^w;9|1Ky2*SY)UT14mg@peB-=z~;7q{Pc<`cGs zxZ8U5Cb-E+IH}4OEYg90v69$+!ZF zY7+w~9*AbI{dk?l9ncEd=&en$O$h?uk@ylfF1UW+kjo^xF_XnaN=O&K6e3iQu_Z%{ z;PQO;9p<0Xrth-(*fgsZjzxfG8}Y(jm0ONPi?9)Bv*jLtTe|Uh*&U<(%-uB~MA)97 zfr`TP$&|)462etws+)x#f>clR?eIt;i!%_Fhj;4HWaCN7d` znV?$+oQ5JIpfAl4anveGNvY8Ri-8wGl=s}6hY|H(?*TPmgUCvY^fS=DLTXqg(*}V@ zSpkqy=VDZP?aZ}iFKxgSPYj9Hmt1%+wrOTzQ2Z`YVu8EKD}qph8-awumL-7^;gq!V z1IC>VUynR^E)p*M_bg@FcUWjBCG#XPm9m)r5@at=T*bfh%jXwqUB&Z(V_`u3}qGu4!(QkU_0vGl=VkE3Xkw z=)u$fMGKV5{3dHH2EHv^SX+I<*{LPO$% zl+^{K(kI#Y{lN$IcIK5T84!lmwesbQ<}|_ z+;TtmFk+~9bjqI-<|3j#QsEEOvUMvqf9yT zDYiUDQZ^0&nv#$rNWoSS-PShjB|8>&m@_aB8tm4F@D}lM3-#0c>74#uy)uBv4N-Pu zhsOpV4qd>2*83*`Egr+_DS{6A0@pxQ(Uw3tGFPMqS1%$4#ZQOy8&%c_xQ8YN5kC`9 z`zh4gylRwC9E6HvkJl?okpXonz8l;kY%7f8V)x7F*xzrc3cATAPQ?;dI%7}@dy5v^ z(n_O1rqCS3{8}hjIL`*tc2eHnB0Amk<4idEpFFGri?n}wc_F$ft}U))=|+S)*=Zf#+U?*P7P`DdR!Ai!-V=SyeiYg z(j%Ne<^N1NPDyO4jJu6k5RHa1B;4ROl0cU3S_ z+<<*|smPbIga$wD8}+l?6241DktVINpvcn6K29QGmpIWBzt;lRB@IWolSwRK87DGb z3ID`BMhw6s(5c=S!bnF!iW?z1nxzqnsJ1MLsotoE>(d!_p6LO+Txk7i>K}%&S zQ0ac55+QKDM}2AkIwWv!wTf55L6LanU;c`D zJU(VO$LI1%R6*F%frw;lAA}+JpW%%>%o7=HYX3Ql!%*0PyVM`?XlHBsWBxQt8E zE{AS~Ol+BvBpMnhI`6c3%cvl6n&(Bhbch5(-zV zxrz=#gm^DHrIs%24~xxT zgO1m7q>q*XULR+%d6qOL=*0$$3(rHBM>^Ou$zI@1rbl$)?X7Y5u^l-3!DToU)8d54 z1omeT1;}&LK{^!Q(?O(^vn?l8hz7Z zmdptUOt?Z235lMKI1m3GVMwT+_eUKqFGfQ(WWU5)ejLY+T68>ve zs*n`yiMfhnXyc1sW?7q_d9clLsDBD$(uWd;Gp=XB`6JG{1R9|lO(?|^+zUd|Rj3R<21DGK}jDd^fV l?Y`*06SVJJ02;;}&bpVbwvZ96EE@2msrp!@M#(1p{{X4rSTX