From 031b36da32594fa26181478bbeb484d39d29aa29 Mon Sep 17 00:00:00 2001 From: firest Date: Thu, 2 Feb 2023 20:20:52 +0800 Subject: [PATCH 01/96] feat(banned): filter out banned messages from mqueue --- apps/emqx/src/emqx_cm.erl | 20 ++++++-- apps/emqx/src/emqx_mqueue.erl | 16 ++++++- apps/emqx/src/emqx_session.erl | 4 ++ apps/emqx/test/emqx_banned_SUITE.erl | 70 ++++++++++++++++++++++++++++ 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/apps/emqx/src/emqx_cm.erl b/apps/emqx/src/emqx_cm.erl index 66e9a2aee..65f1069a6 100644 --- a/apps/emqx/src/emqx_cm.erl +++ b/apps/emqx/src/emqx_cm.erl @@ -19,6 +19,7 @@ -behaviour(gen_server). +-include("emqx.hrl"). -include("logger.hrl"). -include("types.hrl"). -include_lib("snabbkaffe/include/snabbkaffe.hrl"). @@ -296,9 +297,9 @@ open_session(false, ClientInfo = #{clientid := ClientId}, ConnInfo) -> register_channel(ClientId, Self, ConnInfo), {ok, #{ - session => Session1, + session => clean_session(Session1), present => true, - pendings => Pendings + pendings => clean_pendings(Pendings) }}; {living, ConnMod, ChanPid, Session} -> ok = emqx_session:resume(ClientInfo, Session), @@ -315,9 +316,9 @@ open_session(false, ClientInfo = #{clientid := ClientId}, ConnInfo) -> ), register_channel(ClientId, Self, ConnInfo), {ok, #{ - session => Session1, + session => clean_session(Session1), present => true, - pendings => Pendings + pendings => clean_pendings(Pendings) }}; {error, _} -> CreateSess() @@ -730,3 +731,14 @@ get_connected_client_count() -> undefined -> 0; Size -> Size end. + +clean_session(Session) -> + emqx_session:filter_queue(fun is_banned_msg/1, Session). + +clean_pendings(Pendings) -> + lists:filter(fun is_banned_msg/1, Pendings). + +is_banned_msg(#message{from = ClientId}) -> + [] =:= emqx_banned:look_up({clientid, ClientId}); +is_banned_msg({deliver, _Topic, Msg}) -> + is_banned_msg(Msg). diff --git a/apps/emqx/src/emqx_mqueue.erl b/apps/emqx/src/emqx_mqueue.erl index 494e2b33e..fbf29d754 100644 --- a/apps/emqx/src/emqx_mqueue.erl +++ b/apps/emqx/src/emqx_mqueue.erl @@ -67,7 +67,8 @@ out/1, stats/1, dropped/1, - to_list/1 + to_list/1, + filter/2 ]). -define(NO_PRIORITY_TABLE, disabled). @@ -158,6 +159,19 @@ max_len(#mqueue{max_len = MaxLen}) -> MaxLen. to_list(MQ) -> to_list(MQ, []). +-spec filter(fun((any()) -> boolean()), mqueue()) -> mqueue(). +filter(_Pred, #mqueue{len = 0} = MQ) -> + MQ; +filter(Pred, #mqueue{q = Q, len = Len, dropped = Droppend} = MQ) -> + Q2 = ?PQUEUE:filter(Pred, Q), + case ?PQUEUE:len(Q2) of + Len -> + MQ; + Len2 -> + Diff = Len - Len2, + MQ#mqueue{q = Q2, len = Len2, dropped = Droppend + Diff} + end. + to_list(MQ, Acc) -> case out(MQ) of {empty, _MQ} -> diff --git a/apps/emqx/src/emqx_session.erl b/apps/emqx/src/emqx_session.erl index 2e17190e2..54801f2de 100644 --- a/apps/emqx/src/emqx_session.erl +++ b/apps/emqx/src/emqx_session.erl @@ -82,6 +82,7 @@ deliver/3, enqueue/3, dequeue/2, + filter_queue/2, ignore_local/4, retry/2, terminate/3 @@ -529,6 +530,9 @@ dequeue(ClientInfo, Cnt, Msgs, Q) -> end end. +filter_queue(Pred, #session{mqueue = Q} = Session) -> + Session#session{mqueue = emqx_mqueue:filter(Pred, Q)}. + acc_cnt(#message{qos = ?QOS_0}, Cnt) -> Cnt; acc_cnt(_Msg, Cnt) -> Cnt - 1. diff --git a/apps/emqx/test/emqx_banned_SUITE.erl b/apps/emqx/test/emqx_banned_SUITE.erl index ed22a019a..605c1de6d 100644 --- a/apps/emqx/test/emqx_banned_SUITE.erl +++ b/apps/emqx/test/emqx_banned_SUITE.erl @@ -141,3 +141,73 @@ t_kick(_) -> snabbkaffe:stop(), emqx_banned:delete(Who), ?assertEqual(1, length(?of_kind(kick_session_due_to_banned, Trace))). + +t_session_taken(_) -> + erlang:process_flag(trap_exit, true), + Topic = <<"t/banned">>, + ClientId2 = <<"t_session_taken">>, + MsgNum = 3, + Connect = fun() -> + {ok, C} = emqtt:start_link([ + {clientid, <<"client1">>}, + {proto_ver, v5}, + {clean_start, false}, + {properties, #{'Session-Expiry-Interval' => 120}} + ]), + {ok, _} = emqtt:connect(C), + {ok, _, [0]} = emqtt:subscribe(C, Topic, []), + C + end, + + Publish = fun() -> + lists:foreach( + fun(_) -> + Msg = emqx_message:make(ClientId2, Topic, <<"payload">>), + emqx_broker:safe_publish(Msg) + end, + lists:seq(1, MsgNum) + ) + end, + + C1 = Connect(), + ok = emqtt:disconnect(C1), + + Publish(), + + C2 = Connect(), + ?assertEqual(MsgNum, length(receive_messages(MsgNum + 1))), + ok = emqtt:disconnect(C2), + + Publish(), + + Now = erlang:system_time(second), + Who = {clientid, ClientId2}, + emqx_banned:create(#{ + who => Who, + by => <<"test">>, + reason => <<"test">>, + at => Now, + until => Now + 120 + }), + + C3 = Connect(), + ?assertEqual(0, length(receive_messages(MsgNum + 1))), + emqx_banned:delete(Who), + {ok, #{}, [0]} = emqtt:unsubscribe(C3, Topic), + ok = emqtt:disconnect(C3). + +receive_messages(Count) -> + receive_messages(Count, []). +receive_messages(0, Msgs) -> + Msgs; +receive_messages(Count, Msgs) -> + receive + {publish, Msg} -> + ct:log("Msg: ~p ~n", [Msg]), + receive_messages(Count - 1, [Msg | Msgs]); + Other -> + ct:log("Other Msg: ~p~n", [Other]), + receive_messages(Count, Msgs) + after 1200 -> + Msgs + end. From 080e2b10d4dd14048d13250727c9fba4f79e1b76 Mon Sep 17 00:00:00 2001 From: firest Date: Thu, 2 Feb 2023 20:29:45 +0800 Subject: [PATCH 02/96] chore: update changes --- changes/v5.0.16/feat-9893.en.md | 1 + changes/v5.0.16/feat-9893.zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/v5.0.16/feat-9893.en.md create mode 100644 changes/v5.0.16/feat-9893.zh.md diff --git a/changes/v5.0.16/feat-9893.en.md b/changes/v5.0.16/feat-9893.en.md new file mode 100644 index 000000000..590d82a0f --- /dev/null +++ b/changes/v5.0.16/feat-9893.en.md @@ -0,0 +1 @@ +When connecting with the flag `clean_start=false`, the new session will filter out banned messages from the `mqueue` before deliver. diff --git a/changes/v5.0.16/feat-9893.zh.md b/changes/v5.0.16/feat-9893.zh.md new file mode 100644 index 000000000..30286a679 --- /dev/null +++ b/changes/v5.0.16/feat-9893.zh.md @@ -0,0 +1 @@ +当使用 `clean_start=false` 标志连接时,新会话将在传递之前从 `mqueue` 中过滤掉被封禁的消息。 From 603532dacd2b8f6be11c712a0ca3f2d0a7bb7391 Mon Sep 17 00:00:00 2001 From: Erik Timan Date: Wed, 1 Feb 2023 14:32:46 +0100 Subject: [PATCH 03/96] fix(emqx_ee_connector): log reason for failure when starting influxdb connector --- .../emqx_ee_connector/src/emqx_ee_connector_influxdb.erl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl b/lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl index 785ec5d07..7f1ceddde 100644 --- a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl +++ b/lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl @@ -234,7 +234,7 @@ do_start_client( ) -> case influxdb:start_client(ClientConfig) of {ok, Client} -> - case influxdb:is_alive(Client) of + case influxdb:is_alive(Client, true) of true -> State = #{ client => Client, @@ -249,13 +249,13 @@ do_start_client( state => redact_auth(State) }), {ok, State}; - false -> + {false, Reason} -> ?tp(influxdb_connector_start_failed, #{error => influxdb_client_not_alive}), ?SLOG(warning, #{ - msg => "starting influxdb connector failed", + msg => "starting influxdb connector failed - client is not alive", connector => InstId, client => redact_auth(Client), - reason => "client is not alive" + reason => Reason }), %% no leak _ = influxdb:stop_client(Client), From 8314c07147075581760bd18bae2c0a57d7cc4786 Mon Sep 17 00:00:00 2001 From: Erik Timan Date: Wed, 1 Feb 2023 14:34:04 +0100 Subject: [PATCH 04/96] chore: update influxdb-client-erl dep --- lib-ee/emqx_ee_connector/rebar.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib-ee/emqx_ee_connector/rebar.config b/lib-ee/emqx_ee_connector/rebar.config index 54c471f96..d758e1424 100644 --- a/lib-ee/emqx_ee_connector/rebar.config +++ b/lib-ee/emqx_ee_connector/rebar.config @@ -1,7 +1,7 @@ {erl_opts, [debug_info]}. {deps, [ {hstreamdb_erl, {git, "https://github.com/hstreamdb/hstreamdb_erl.git", {tag, "0.2.5"}}}, - {influxdb, {git, "https://github.com/emqx/influxdb-client-erl", {tag, "1.1.8"}}}, + {influxdb, {git, "https://github.com/emqx/influxdb-client-erl", {tag, "1.1.9"}}}, {tdengine, {git, "https://github.com/emqx/tdengine-client-erl", {tag, "0.1.5"}}}, {emqx, {path, "../../apps/emqx"}} ]}. From 8040fb3a29043c1f97f626e1a47034acad0e17ad Mon Sep 17 00:00:00 2001 From: Erik Timan Date: Thu, 23 Feb 2023 11:03:09 +0100 Subject: [PATCH 05/96] chore: update influxdb-client-erl dep in mix.exs --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 43b0c979f..9abcd9a3b 100644 --- a/mix.exs +++ b/mix.exs @@ -130,7 +130,7 @@ defmodule EMQXUmbrella.MixProject do defp enterprise_deps(_profile_info = %{edition_type: :enterprise}) do [ {:hstreamdb_erl, github: "hstreamdb/hstreamdb_erl", tag: "0.2.5"}, - {:influxdb, github: "emqx/influxdb-client-erl", tag: "1.1.7", override: true}, + {:influxdb, github: "emqx/influxdb-client-erl", tag: "1.1.9", override: true}, {:wolff, github: "kafka4beam/wolff", tag: "1.7.5"}, {:kafka_protocol, github: "kafka4beam/kafka_protocol", tag: "4.1.2", override: true}, {:brod_gssapi, github: "kafka4beam/brod_gssapi", tag: "v0.1.0-rc1"}, From da42c91fb23d23dab3fd36cd9440c2a4d037e1c3 Mon Sep 17 00:00:00 2001 From: Erik Timan Date: Thu, 23 Feb 2023 11:44:17 +0100 Subject: [PATCH 06/96] test(emqx_ee_bridge): check influxdb:is_alive/2 return --- lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_influxdb_SUITE.erl | 2 +- lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_influxdb_SUITE.erl b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_influxdb_SUITE.erl index bbde88cc7..a395f8a36 100644 --- a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_influxdb_SUITE.erl +++ b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_influxdb_SUITE.erl @@ -827,7 +827,7 @@ t_create_disconnected(Config) -> end), fun(Trace) -> ?assertMatch( - [#{error := influxdb_client_not_alive}], + [#{error := influxdb_client_not_alive, reason := econnrefused}], ?of_kind(influxdb_connector_start_failed, Trace) ), ok diff --git a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl b/lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl index 7f1ceddde..e78bc473c 100644 --- a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl +++ b/lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl @@ -250,7 +250,9 @@ do_start_client( }), {ok, State}; {false, Reason} -> - ?tp(influxdb_connector_start_failed, #{error => influxdb_client_not_alive}), + ?tp(influxdb_connector_start_failed, #{ + error => influxdb_client_not_alive, reason => Reason + }), ?SLOG(warning, #{ msg => "starting influxdb connector failed - client is not alive", connector => InstId, From 6614c774f8a25a11db8f15e9c8a9435cebaf8135 Mon Sep 17 00:00:00 2001 From: Erik Timan Date: Thu, 23 Feb 2023 13:52:13 +0100 Subject: [PATCH 07/96] chore: add changes --- changes/ee/feat-9881.en.md | 4 ++++ changes/ee/feat-9881.zh.md | 3 +++ 2 files changed, 7 insertions(+) create mode 100644 changes/ee/feat-9881.en.md create mode 100644 changes/ee/feat-9881.zh.md diff --git a/changes/ee/feat-9881.en.md b/changes/ee/feat-9881.en.md new file mode 100644 index 000000000..546178965 --- /dev/null +++ b/changes/ee/feat-9881.en.md @@ -0,0 +1,4 @@ +In this pull request, we have enhanced the error logs related to InfluxDB connectivity health checks. +Previously, if InfluxDB failed to pass the health checks using the specified parameters, the only message provided was "timed out waiting for it to become healthy". +With the updated implementation, the error message will be displayed in both the logs and the dashboard, enabling easier identification and resolution of the issue. + diff --git a/changes/ee/feat-9881.zh.md b/changes/ee/feat-9881.zh.md new file mode 100644 index 000000000..9746a4c0a --- /dev/null +++ b/changes/ee/feat-9881.zh.md @@ -0,0 +1,3 @@ +增强了与 InfluxDB 连接健康检查相关的错误日志。 +在此更改之前,如果使用配置的参数 InfluxDB 未能通过健康检查,用户仅能获得一个“超时”的信息。 +现在,详细的错误消息将显示在日志和控制台,从而让用户更容易地识别和解决问题。 From 44c0aae16bef9eb37006b02bef9bf7fd3a8a325a Mon Sep 17 00:00:00 2001 From: Erik Timan Date: Fri, 24 Feb 2023 11:31:57 +0100 Subject: [PATCH 08/96] fix(emqx_ee_connector): improve log message on influxdb start failures --- lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl b/lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl index e78bc473c..453f949be 100644 --- a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl +++ b/lib-ee/emqx_ee_connector/src/emqx_ee_connector_influxdb.erl @@ -254,7 +254,7 @@ do_start_client( error => influxdb_client_not_alive, reason => Reason }), ?SLOG(warning, #{ - msg => "starting influxdb connector failed - client is not alive", + msg => "failed_to_start_influxdb_connector", connector => InstId, client => redact_auth(Client), reason => Reason @@ -275,7 +275,7 @@ do_start_client( {error, Reason} -> ?tp(influxdb_connector_start_failed, #{error => Reason}), ?SLOG(warning, #{ - msg => "starting influxdb connector failed", + msg => "failed_to_start_influxdb_connector", connector => InstId, reason => Reason }), From 9bb5abf44ae151a4f3d1141d4cc7a5fbac3b4c2f Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Fri, 24 Feb 2023 15:29:20 +0100 Subject: [PATCH 09/96] fix(docker-entrypoint.sh): allow setting EMQX_NODE__NAME for docker Prior to this change EMQX_NODE__NAME is ignored by docker entrypoint script which will in turn set EQMX_NODE_NAME by resolving the node name and domain name respectively. --- changes/ce/fix-10027.en.md | 2 ++ changes/ce/fix-10027.zh.md | 2 ++ deploy/docker/README.md | 46 ++++++++++++------------------ deploy/docker/docker-entrypoint.sh | 45 +++++++++++++++-------------- 4 files changed, 46 insertions(+), 49 deletions(-) create mode 100644 changes/ce/fix-10027.en.md create mode 100644 changes/ce/fix-10027.zh.md diff --git a/changes/ce/fix-10027.en.md b/changes/ce/fix-10027.en.md new file mode 100644 index 000000000..531da1c50 --- /dev/null +++ b/changes/ce/fix-10027.en.md @@ -0,0 +1,2 @@ +Allow setting node name from `EMQX_NODE__NAME` when running in docker. +Prior to this fix, only `EMQX_NODE_NAME` is allowed. diff --git a/changes/ce/fix-10027.zh.md b/changes/ce/fix-10027.zh.md new file mode 100644 index 000000000..ee7055d6c --- /dev/null +++ b/changes/ce/fix-10027.zh.md @@ -0,0 +1,2 @@ +在 docker 中启动时,允许使用 `EMQX_NODE__NAME` 环境变量来配置节点名。 +在此修复前,只能使 `EMQX_NODE_NAME`。 diff --git a/deploy/docker/README.md b/deploy/docker/README.md index e6067a203..edd29ae75 100644 --- a/deploy/docker/README.md +++ b/deploy/docker/README.md @@ -50,48 +50,41 @@ The EMQX broker runs as Linux user `emqx` in the docker container. All EMQX Configuration in [`etc/emqx.conf`](https://github.com/emqx/emqx/blob/master/apps/emqx/etc/emqx.conf) can be configured via environment variables. -By default, the environment variables with `EMQX_` prefix are mapped to key-value pairs in configuration files. - -You can change the prefix by overriding `HOCON_ENV_OVERRIDE_PREFIX`. +The environment variables with `EMQX_` prefix are mapped to key-value pairs in configuration files. Example: ```bash -EMQX_LISTENERS__SSL__DEFAULT__ACCEPTORS <--> listeners.ssl.default.acceptors -EMQX_ZONES__DEFAULT__MQTT__MAX_PACKET_SIZE <--> zones.default.mqtt.max_packet_size +EMQX_DASHBOARD__DEFAULT_PASSWORD <--> dashboard.default_password +EMQX_NODE__COOKIE <--> node.cookie +EMQX_LISTENERS__SSL__default__ENABLE <--> listeners.ssl.default.enable ``` + Prefix `EMQX_` is removed + All upper case letters is replaced with lower case letters + `__` is replaced with `.` -If `HOCON_ENV_OVERRIDE_PREFIX=DEV_` is set: - -```bash -DEV_LISTENER__SSL__EXTERNAL__ACCEPTORS <--> listener.ssl.external.acceptors -DEV_MQTT__MAX_PACKET_SIZE <--> mqtt.max_packet_size -DEV_LISTENERS__TCP__DEFAULT__BIND <--> listeners.tcp.default.bind -``` - For example, set MQTT TCP port to 1883 ```console -$ docker run -d --name emqx -e DEV_LISTENERS__TCP__DEFAULT__BIND=1883 -p 18083:18083 -p 1883:1883 emqx/emqx:latest +$ docker run -d --name emqx -e EMQX_DASHBOARD__DEFAULT_PASSWORD=mysecret -p 18083:18083 -p 1883:1883 emqx/emqx:latest ``` -Please read more about EMQX configuration in the [official documentation](https://www.emqx.io/docs/en/v5.0/admin/cfg.html). +Please read more about EMQX configuration in the [official documentation](https://www.emqx.io/docs/en/v5.0/configuration/configuration.html) #### EMQX node name configuration -| Options | Default | Mapped | Description | -| ---------------------------| ------------------ | ------------------------- | ------------------------------------- | -| `EMQX_NAME` | container name | none | EMQX node short name | -| `EMQX_HOST` | container IP | none | EMQX node host, IP or FQDN | +A node name consists of two parts, `EMQX_NAME` part and `EMQX_HOST` part connected by a the symbol `@`. For example: `emqx@127.0.0.1`. -These environment variables are used during container startup phase only in [docker-entrypoint.sh](./docker-entrypoint.sh). +Environment variables `EMQX_NODE_NAME` or `EMQX_NODE__NAME` can be used to set a EMQX node name. +If neither of them is set, EMQX will resolve its node name from the running environment or other environment varialbes used for node discovery. -If `EMQX_NAME` and `EMQX_HOST` are set, and `EMQX_NODE_NAME` is not set, `EMQX_NODE_NAME=$EMQX_NAME@$EMQX_HOST`. -Otherwise `EMQX_NODE_NAME` is taken verbatim. +When running in docker, by default, `EMQX_NAME` and `EMQX_HOST` are resolved as below: + +| Options | Default | Description | +| -------------| --------------- | -----------------------------| +| `EMQX_NAME` | container name | EMQX node short name | +| `EMQX_HOST` | container IP | EMQX node host, IP or FQDN | ### Cluster @@ -108,8 +101,7 @@ Let's create a static node list cluster from docker-compose. emqx1: image: emqx/emqx:latest environment: - - "EMQX_NAME=emqx" - - "EMQX_HOST=node1.emqx.io" + - "EMQX_NODE_NAME=emqx@node1.emqx.io" - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static" - "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io, emqx@node2.emqx.io]" networks: @@ -120,8 +112,7 @@ Let's create a static node list cluster from docker-compose. emqx2: image: emqx/emqx:latest environment: - - "EMQX_NAME=emqx" - - "EMQX_HOST=node2.emqx.io" + - "EMQX_NODE_NAME=emqx@node2.emqx.io" - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static" - "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io, emqx@node2.emqx.io]" networks: @@ -174,8 +165,7 @@ services: image: emqx/emqx:latest restart: always environment: - EMQX_NAME: foo_emqx - EMQX_HOST: 127.0.0.1 + EMQX_NODE_NAME: foo_emqx@127.0.0.1 volumes: - vol-emqx-data:/opt/emqx/data - vol-emqx-etc:/opt/emqx/etc diff --git a/deploy/docker/docker-entrypoint.sh b/deploy/docker/docker-entrypoint.sh index 1c18ef829..1824e1ee0 100755 --- a/deploy/docker/docker-entrypoint.sh +++ b/deploy/docker/docker-entrypoint.sh @@ -18,28 +18,31 @@ LOCAL_IP=$(hostname -i | grep -oE '((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])\.){3}( export EMQX_NAME="${EMQX_NAME:-emqx}" -if [[ -z "$EMQX_HOST" ]]; then - if [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "dns" ]] && \ - [[ "$EMQX_CLUSTER__DNS__RECORD_TYPE" == "srv" ]] && \ - grep -q "$(hostname).$EMQX_CLUSTER__DNS__NAME" /etc/hosts; then - EMQX_HOST="$(hostname).$EMQX_CLUSTER__DNS__NAME" - elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \ - [[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == "dns" ]] && \ - [[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then - EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-"pod.cluster.local"} - EMQX_HOST="${LOCAL_IP//./-}.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX" - elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \ - [[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == 'hostname' ]] && \ - [[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then - EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-'svc.cluster.local'} - EMQX_HOST=$(grep -h "^$LOCAL_IP" /etc/hosts | grep -o "$(hostname).*.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX") - else - EMQX_HOST="$LOCAL_IP" +## EMQX_NODE_NAME or EMQX_NODE__NAME to indicate the full node name to be used by EMQX +## If both are set EMQX_NODE_NAME takes higher precedence than EMQX_NODE__NAME +if [[ -z "${EMQX_NODE_NAME:-}" ]] && [[ -z "${EMQX_NODE__NAME:-}" ]]; then + # No node name is provide from environment variables + # try to resolve from other settings + if [[ -z "$EMQX_HOST" ]]; then + if [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "dns" ]] && \ + [[ "$EMQX_CLUSTER__DNS__RECORD_TYPE" == "srv" ]] && \ + grep -q "$(hostname).$EMQX_CLUSTER__DNS__NAME" /etc/hosts; then + EMQX_HOST="$(hostname).$EMQX_CLUSTER__DNS__NAME" + elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \ + [[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == "dns" ]] && \ + [[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then + EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-"pod.cluster.local"} + EMQX_HOST="${LOCAL_IP//./-}.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX" + elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \ + [[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == 'hostname' ]] && \ + [[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then + EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-'svc.cluster.local'} + EMQX_HOST=$(grep -h "^$LOCAL_IP" /etc/hosts | grep -o "$(hostname).*.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX") + else + EMQX_HOST="$LOCAL_IP" + fi + export EMQX_HOST fi - export EMQX_HOST -fi - -if [[ -z "$EMQX_NODE_NAME" ]]; then export EMQX_NODE_NAME="$EMQX_NAME@$EMQX_HOST" fi From 7d762593f6bd45b4a21f63a6ca72d281f530b818 Mon Sep 17 00:00:00 2001 From: firest Date: Mon, 20 Feb 2023 12:20:27 +0800 Subject: [PATCH 10/96] fix(connector): redact the http body in error logs for security reasons --- apps/emqx_connector/src/emqx_connector_http.erl | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/apps/emqx_connector/src/emqx_connector_http.erl b/apps/emqx_connector/src/emqx_connector_http.erl index 7d91e18b9..29d5136bb 100644 --- a/apps/emqx_connector/src/emqx_connector_http.erl +++ b/apps/emqx_connector/src/emqx_connector_http.erl @@ -328,15 +328,17 @@ on_query( {ok, StatusCode, Headers} -> ?SLOG(error, #{ msg => "http connector do request, received error response", - request => redact(NRequest), + note => "the body will be redacted due to security reasons", + request => redact_request(NRequest), connector => InstId, status_code => StatusCode }), {error, #{status_code => StatusCode, headers => Headers}}; {ok, StatusCode, Headers, Body} -> ?SLOG(error, #{ - msg => "http connector do request, received error response", - request => redact(NRequest), + msg => "http connector do request, received error response.", + note => "the body will be redacted due to security reasons", + request => redact_request(NRequest), connector => InstId, status_code => StatusCode }), @@ -601,6 +603,15 @@ is_sensitive_key(_) -> redact(Data) -> emqx_misc:redact(Data, fun is_sensitive_key/1). +%% because the body may contain some sensitive data +%% and at the same time the redact function will not scan the binary data +%% and we also can't know the body format and where the sensitive data will be +%% so the easy way to keep data security is redacted the whole body +redact_request({Path, Headers}) -> + {Path, redact(Headers)}; +redact_request({Path, Headers, _Body}) -> + {Path, redact(Headers), <<"******">>}. + -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). From 2ea589648ea595a9f83e9c3ba612ede8ea5d57c4 Mon Sep 17 00:00:00 2001 From: firest Date: Mon, 20 Feb 2023 15:25:14 +0800 Subject: [PATCH 11/96] chore: update changes --- changes/ce/perf-9998.en.md | 1 + changes/ce/perf-9998.zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/ce/perf-9998.en.md create mode 100644 changes/ce/perf-9998.zh.md diff --git a/changes/ce/perf-9998.en.md b/changes/ce/perf-9998.en.md new file mode 100644 index 000000000..e9e23a25e --- /dev/null +++ b/changes/ce/perf-9998.en.md @@ -0,0 +1 @@ +Redact the HTTP request body in the authentication error logs for security reasons. diff --git a/changes/ce/perf-9998.zh.md b/changes/ce/perf-9998.zh.md new file mode 100644 index 000000000..146eb858f --- /dev/null +++ b/changes/ce/perf-9998.zh.md @@ -0,0 +1 @@ +出于安全原因,在身份验证错误日志中模糊 HTTP 请求正文。 From 6ad31f7ada7370387b4a19678abf0706e94465c6 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Wed, 22 Feb 2023 10:18:09 +0100 Subject: [PATCH 12/96] chore: add changelog for #9986 --- changes/ce/feat-9986.en.md | 1 + changes/ce/feat-9986.zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/ce/feat-9986.en.md create mode 100644 changes/ce/feat-9986.zh.md diff --git a/changes/ce/feat-9986.en.md b/changes/ce/feat-9986.en.md new file mode 100644 index 000000000..ee7a6be71 --- /dev/null +++ b/changes/ce/feat-9986.en.md @@ -0,0 +1 @@ +For helm charts, add MQTT ingress bridge; and removed stale `mgmt` references. diff --git a/changes/ce/feat-9986.zh.md b/changes/ce/feat-9986.zh.md new file mode 100644 index 000000000..a7f418587 --- /dev/null +++ b/changes/ce/feat-9986.zh.md @@ -0,0 +1 @@ +在 helm chart 中新增了 MQTT 桥接 ingress 的配置参数;并删除了旧版本遗留的 `mgmt` 配置。 From ea5116740bb8ab7681592eb5228621ddfb96fb9e Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Mon, 27 Feb 2023 10:04:45 +0100 Subject: [PATCH 13/96] chore: fix translation for #9213 --- changes/ce/feat-9213.zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changes/ce/feat-9213.zh.md b/changes/ce/feat-9213.zh.md index 509b1e01c..2c2ce8254 100644 --- a/changes/ce/feat-9213.zh.md +++ b/changes/ce/feat-9213.zh.md @@ -1 +1 @@ -在舵手图中添加吊舱干扰预算。 +在 helm chart 中增加 pod disruption budget。 From 6cdbef247cb2d4ec3342abb48b54d2e94eb60724 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Mon, 27 Feb 2023 10:05:02 +0100 Subject: [PATCH 14/96] chore: fix translation for #10011 --- changes/ee/feat-10011.zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changes/ee/feat-10011.zh.md b/changes/ee/feat-10011.zh.md index 509b1e01c..2c2ce8254 100644 --- a/changes/ee/feat-10011.zh.md +++ b/changes/ee/feat-10011.zh.md @@ -1 +1 @@ -在舵手图中添加吊舱干扰预算。 +在 helm chart 中增加 pod disruption budget。 From 7e0945153067fe3a2b20a6816462593fb80f3106 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Wed, 22 Feb 2023 13:00:29 +0100 Subject: [PATCH 15/96] ci: start building el9 (rocky linux 9) packages also upgrade runners to ubuntu22.04 where possible --- .../build_and_push_docker_images.yaml | 8 +++---- .github/workflows/build_packages.yaml | 23 +++++++++++-------- .github/workflows/build_slim_packages.yaml | 7 +++--- .github/workflows/check_deps_integrity.yaml | 4 ++-- .github/workflows/code_style_check.yaml | 4 ++-- .github/workflows/elixir_apps_check.yaml | 2 +- .github/workflows/elixir_deps_check.yaml | 4 ++-- .github/workflows/elixir_release.yml | 2 +- .github/workflows/run_emqx_app_tests.yaml | 8 +++---- .github/workflows/run_fvt_tests.yaml | 12 +++++----- .github/workflows/run_relup_tests.yaml | 4 ++-- .github/workflows/run_test_cases.yaml | 10 ++++---- 12 files changed, 45 insertions(+), 43 deletions(-) diff --git a/.github/workflows/build_and_push_docker_images.yaml b/.github/workflows/build_and_push_docker_images.yaml index c612d2d5f..e8a080808 100644 --- a/.github/workflows/build_and_push_docker_images.yaml +++ b/.github/workflows/build_and_push_docker_images.yaml @@ -23,9 +23,9 @@ on: jobs: prepare: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 # prepare source with any OTP version, no need for a matrix - container: "ghcr.io/emqx/emqx-builder/5.0-28:1.13.4-24.3.4.2-2-ubuntu20.04" + container: "ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-24.3.4.2-2-ubuntu22.04" outputs: PROFILE: ${{ steps.get_profile.outputs.PROFILE }} @@ -109,7 +109,7 @@ jobs: path: source.zip docker: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: prepare strategy: @@ -125,7 +125,7 @@ jobs: # NOTE: 'otp' and 'elixir' are to configure emqx-builder image # only support latest otp and elixir, not a matrix builder: - - 5.0-28 # update to latest + - 5.0-29 # update to latest otp: - 24.3.4.2-2 # switch to 25 once ready to release 5.1 elixir: diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index b23e2c604..ffb7ab9f3 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -22,8 +22,8 @@ on: jobs: prepare: - runs-on: ubuntu-20.04 - container: ghcr.io/emqx/emqx-builder/5.0-28:1.13.4-24.3.4.2-2-ubuntu20.04 + runs-on: ubuntu-22.04 + container: ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-24.3.4.2-2-ubuntu22.04 outputs: BUILD_PROFILE: ${{ steps.get_profile.outputs.BUILD_PROFILE }} IS_EXACT_TAG: ${{ steps.get_profile.outputs.IS_EXACT_TAG }} @@ -211,19 +211,20 @@ jobs: - ubuntu18.04 - debian11 - debian10 + - el9 - el8 - el7 - amzn2 build_machine: - aws-arm64 - - ubuntu-20.04 + - ubuntu-22.04 builder: - - 5.0-28 + - 5.0-29 elixir: - 1.13.4 exclude: - arch: arm64 - build_machine: ubuntu-20.04 + build_machine: ubuntu-22.04 - arch: amd64 build_machine: aws-arm64 include: @@ -232,7 +233,7 @@ jobs: arch: amd64 os: ubuntu22.04 build_machine: ubuntu-22.04 - builder: 5.0-28 + builder: 5.0-29 elixir: 1.13.4 release_with: elixir - profile: emqx @@ -240,7 +241,7 @@ jobs: arch: amd64 os: amzn2 build_machine: ubuntu-22.04 - builder: 5.0-28 + builder: 5.0-29 elixir: 1.13.4 release_with: elixir @@ -306,7 +307,7 @@ jobs: {"text": "Scheduled run of ${{ github.workflow }}@${{ matrix.os }} failed: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"} publish_artifacts: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: [prepare, mac, linux] if: needs.prepare.outputs.IS_EXACT_TAG && github.event_name != 'schedule' strategy: @@ -375,9 +376,11 @@ jobs: push "ubuntu/focal" "packages/$PROFILE/$PROFILE-$VERSION-ubuntu20.04-arm64.deb" push "ubuntu/jammy" "packages/$PROFILE/$PROFILE-$VERSION-ubuntu22.04-amd64.deb" push "ubuntu/jammy" "packages/$PROFILE/$PROFILE-$VERSION-ubuntu22.04-arm64.deb" + push "el/6" "packages/$PROFILE/$PROFILE-$VERSION-amzn2-amd64.rpm" + push "el/6" "packages/$PROFILE/$PROFILE-$VERSION-amzn2-arm64.rpm" push "el/7" "packages/$PROFILE/$PROFILE-$VERSION-el7-amd64.rpm" push "el/7" "packages/$PROFILE/$PROFILE-$VERSION-el7-arm64.rpm" push "el/8" "packages/$PROFILE/$PROFILE-$VERSION-el8-amd64.rpm" push "el/8" "packages/$PROFILE/$PROFILE-$VERSION-el8-arm64.rpm" - push "el/6" "packages/$PROFILE/$PROFILE-$VERSION-amzn2-amd64.rpm" - push "el/6" "packages/$PROFILE/$PROFILE-$VERSION-amzn2-arm64.rpm" + push "el/9" "packages/$PROFILE/$PROFILE-$VERSION-el9-amd64.rpm" + push "el/9" "packages/$PROFILE/$PROFILE-$VERSION-el9-arm64.rpm" diff --git a/.github/workflows/build_slim_packages.yaml b/.github/workflows/build_slim_packages.yaml index 692e4a987..900e124c6 100644 --- a/.github/workflows/build_slim_packages.yaml +++ b/.github/workflows/build_slim_packages.yaml @@ -30,12 +30,11 @@ jobs: matrix: profile: - ["emqx", "24.3.4.2-2", "el7"] - - ["emqx", "24.3.4.2-2", "ubuntu20.04"] - ["emqx", "25.1.2-2", "ubuntu22.04"] - - ["emqx-enterprise", "24.3.4.2-2", "ubuntu20.04"] - - ["emqx-enterprise", "25.1.2-2", "ubuntu22.04"] + - ["emqx-enterprise", "24.3.4.2-2", "amzn2"] + - ["emqx-enterprise", "25.1.2-2", "ubuntu20.04"] builder: - - 5.0-28 + - 5.0-29 elixir: - 1.13.4 diff --git a/.github/workflows/check_deps_integrity.yaml b/.github/workflows/check_deps_integrity.yaml index ff41a4e86..455cac4ad 100644 --- a/.github/workflows/check_deps_integrity.yaml +++ b/.github/workflows/check_deps_integrity.yaml @@ -4,8 +4,8 @@ on: [pull_request, push] jobs: check_deps_integrity: - runs-on: ubuntu-20.04 - container: ghcr.io/emqx/emqx-builder/5.0-28:1.13.4-25.1.2-2-ubuntu20.04 + runs-on: ubuntu-22.04 + container: ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-25.1.2-2-ubuntu22.04 steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/code_style_check.yaml b/.github/workflows/code_style_check.yaml index 393da4dbd..390ca8ffe 100644 --- a/.github/workflows/code_style_check.yaml +++ b/.github/workflows/code_style_check.yaml @@ -4,8 +4,8 @@ on: [pull_request] jobs: code_style_check: - runs-on: ubuntu-20.04 - container: "ghcr.io/emqx/emqx-builder/5.0-28:1.13.4-25.1.2-2-ubuntu20.04" + runs-on: ubuntu-22.04 + container: "ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-25.1.2-2-ubuntu22.04" steps: - uses: actions/checkout@v3 with: diff --git a/.github/workflows/elixir_apps_check.yaml b/.github/workflows/elixir_apps_check.yaml index 744618680..6d6597f74 100644 --- a/.github/workflows/elixir_apps_check.yaml +++ b/.github/workflows/elixir_apps_check.yaml @@ -8,7 +8,7 @@ jobs: elixir_apps_check: runs-on: ubuntu-latest # just use the latest builder - container: "ghcr.io/emqx/emqx-builder/5.0-28:1.13.4-25.1.2-2-ubuntu20.04" + container: "ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-25.1.2-2-ubuntu22.04" strategy: fail-fast: false diff --git a/.github/workflows/elixir_deps_check.yaml b/.github/workflows/elixir_deps_check.yaml index 5f5450cab..4e3af3f3f 100644 --- a/.github/workflows/elixir_deps_check.yaml +++ b/.github/workflows/elixir_deps_check.yaml @@ -6,8 +6,8 @@ on: [pull_request, push] jobs: elixir_deps_check: - runs-on: ubuntu-20.04 - container: ghcr.io/emqx/emqx-builder/5.0-28:1.13.4-25.1.2-2-ubuntu20.04 + runs-on: ubuntu-22.04 + container: ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-25.1.2-2-ubuntu22.04 steps: - name: Checkout diff --git a/.github/workflows/elixir_release.yml b/.github/workflows/elixir_release.yml index 40bb83636..5517a2abc 100644 --- a/.github/workflows/elixir_release.yml +++ b/.github/workflows/elixir_release.yml @@ -17,7 +17,7 @@ jobs: profile: - emqx - emqx-enterprise - container: ghcr.io/emqx/emqx-builder/5.0-28:1.13.4-25.1.2-2-ubuntu20.04 + container: ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-25.1.2-2-ubuntu22.04 steps: - name: Checkout uses: actions/checkout@v3 diff --git a/.github/workflows/run_emqx_app_tests.yaml b/.github/workflows/run_emqx_app_tests.yaml index cf6e1bdff..147708373 100644 --- a/.github/workflows/run_emqx_app_tests.yaml +++ b/.github/workflows/run_emqx_app_tests.yaml @@ -12,7 +12,7 @@ jobs: strategy: matrix: builder: - - 5.0-28 + - 5.0-29 otp: - 24.3.4.2-2 - 25.1.2-2 @@ -22,16 +22,16 @@ jobs: elixir: - 1.13.4 os: - - ubuntu20.04 + - ubuntu22.04 arch: - amd64 runs-on: - aws-amd64 - - ubuntu-20.04 + - ubuntu-22.04 use-self-hosted: - ${{ github.repository_owner == 'emqx' }} exclude: - - runs-on: ubuntu-20.04 + - runs-on: ubuntu-22.04 use-self-hosted: true - runs-on: aws-amd64 use-self-hosted: false diff --git a/.github/workflows/run_fvt_tests.yaml b/.github/workflows/run_fvt_tests.yaml index 4ef634d91..7256dedf8 100644 --- a/.github/workflows/run_fvt_tests.yaml +++ b/.github/workflows/run_fvt_tests.yaml @@ -14,9 +14,9 @@ on: jobs: prepare: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 # prepare source with any OTP version, no need for a matrix - container: ghcr.io/emqx/emqx-builder/5.0-28:1.13.4-24.3.4.2-2-debian11 + container: ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-24.3.4.2-2-debian11 steps: - uses: actions/checkout@v3 @@ -33,7 +33,7 @@ jobs: path: source.zip docker_test: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: prepare strategy: @@ -49,7 +49,7 @@ jobs: os: - ["debian11", "debian:11-slim"] builder: - - 5.0-28 + - 5.0-29 otp: - 24.3.4.2-2 elixir: @@ -107,7 +107,7 @@ jobs: docker exec node1.emqx.io node_dump helm_test: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: prepare strategy: @@ -122,7 +122,7 @@ jobs: os: - ["debian11", "debian:11-slim"] builder: - - 5.0-28 + - 5.0-29 otp: - 24.3.4.2-2 elixir: diff --git a/.github/workflows/run_relup_tests.yaml b/.github/workflows/run_relup_tests.yaml index 4d03878de..ca3e0e0ce 100644 --- a/.github/workflows/run_relup_tests.yaml +++ b/.github/workflows/run_relup_tests.yaml @@ -14,8 +14,8 @@ concurrency: jobs: relup_test_plan: - runs-on: ubuntu-20.04 - container: "ghcr.io/emqx/emqx-builder/5.0-28:1.13.4-24.3.4.2-2-ubuntu20.04" + runs-on: ubuntu-22.04 + container: "ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-24.3.4.2-2-ubuntu22.04" outputs: CUR_EE_VSN: ${{ steps.find-versions.outputs.CUR_EE_VSN }} OLD_VERSIONS: ${{ steps.find-versions.outputs.OLD_VERSIONS }} diff --git a/.github/workflows/run_test_cases.yaml b/.github/workflows/run_test_cases.yaml index 79998f413..8a39f3a47 100644 --- a/.github/workflows/run_test_cases.yaml +++ b/.github/workflows/run_test_cases.yaml @@ -30,12 +30,12 @@ jobs: MATRIX="$(echo "${APPS}" | jq -c ' [ (.[] | select(.profile == "emqx") | . + { - builder: "5.0-28", + builder: "5.0-29", otp: "25.1.2-2", elixir: "1.13.4" }), (.[] | select(.profile == "emqx-enterprise") | . + { - builder: "5.0-28", + builder: "5.0-29", otp: ["24.3.4.2-2", "25.1.2-2"][], elixir: "1.13.4" }) @@ -51,7 +51,7 @@ jobs: - name: Choose runner host id: runner run: | - RUNS_ON="ubuntu-20.04" + RUNS_ON="ubuntu-22.04" ${{ github.repository_owner == 'emqx' }} && RUNS_ON="aws-amd64" echo "runs-on=${RUNS_ON}" | tee -a $GITHUB_OUTPUT @@ -223,8 +223,8 @@ jobs: - eunit_and_proper - ct - ct_docker - runs-on: ubuntu-20.04 - container: "ghcr.io/emqx/emqx-builder/5.0-28:1.13.4-24.3.4.2-2-ubuntu20.04" + runs-on: ubuntu-22.04 + container: "ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-24.3.4.2-2-ubuntu22.04" steps: - uses: AutoModality/action-clean@v1 - uses: actions/download-artifact@v3 From 37cedecadb34b581f00b03b3e8be3b2822e04f51 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Wed, 22 Feb 2023 15:57:42 +0100 Subject: [PATCH 16/96] ci: do not run test workflows on push to any branch --- .github/workflows/check_deps_integrity.yaml | 5 +++-- .github/workflows/elixir_apps_check.yaml | 3 ++- .github/workflows/elixir_deps_check.yaml | 5 +++-- .github/workflows/run_fvt_tests.yaml | 5 +++-- .github/workflows/run_test_cases.yaml | 3 ++- .github/workflows/shellcheck.yaml | 5 +++-- 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/.github/workflows/check_deps_integrity.yaml b/.github/workflows/check_deps_integrity.yaml index 455cac4ad..f24e164d9 100644 --- a/.github/workflows/check_deps_integrity.yaml +++ b/.github/workflows/check_deps_integrity.yaml @@ -1,10 +1,11 @@ name: Check Rebar Dependencies -on: [pull_request, push] +on: + pull_request: jobs: check_deps_integrity: - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest container: ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-25.1.2-2-ubuntu22.04 steps: diff --git a/.github/workflows/elixir_apps_check.yaml b/.github/workflows/elixir_apps_check.yaml index 6d6597f74..a123ad93b 100644 --- a/.github/workflows/elixir_apps_check.yaml +++ b/.github/workflows/elixir_apps_check.yaml @@ -2,7 +2,8 @@ name: Check Elixir Release Applications -on: [pull_request, push] +on: + pull_request: jobs: elixir_apps_check: diff --git a/.github/workflows/elixir_deps_check.yaml b/.github/workflows/elixir_deps_check.yaml index 4e3af3f3f..348ed4931 100644 --- a/.github/workflows/elixir_deps_check.yaml +++ b/.github/workflows/elixir_deps_check.yaml @@ -2,11 +2,12 @@ name: Elixir Dependency Version Check -on: [pull_request, push] +on: + pull_request: jobs: elixir_deps_check: - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest container: ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-25.1.2-2-ubuntu22.04 steps: diff --git a/.github/workflows/run_fvt_tests.yaml b/.github/workflows/run_fvt_tests.yaml index 7256dedf8..a95fcd805 100644 --- a/.github/workflows/run_fvt_tests.yaml +++ b/.github/workflows/run_fvt_tests.yaml @@ -7,14 +7,15 @@ concurrency: on: push: branches: - - '**' + - master + - 'ci/**' tags: - v* pull_request: jobs: prepare: - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest # prepare source with any OTP version, no need for a matrix container: ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-24.3.4.2-2-debian11 diff --git a/.github/workflows/run_test_cases.yaml b/.github/workflows/run_test_cases.yaml index 8a39f3a47..c8f1eb647 100644 --- a/.github/workflows/run_test_cases.yaml +++ b/.github/workflows/run_test_cases.yaml @@ -7,7 +7,8 @@ concurrency: on: push: branches: - - '**' + - master + - 'ci/**' tags: - v* - e* diff --git a/.github/workflows/shellcheck.yaml b/.github/workflows/shellcheck.yaml index 56a6645e1..558ecf3bf 100644 --- a/.github/workflows/shellcheck.yaml +++ b/.github/workflows/shellcheck.yaml @@ -1,10 +1,11 @@ name: Shellcheck -on: [pull_request, push] +on: + pull_request: jobs: shellcheck: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - name: Checkout source code uses: actions/checkout@v3 From 88d281edcc83aab576ec989e843643e464467e61 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Wed, 22 Feb 2023 15:58:14 +0100 Subject: [PATCH 17/96] ci: fix indentation in run_test_cases.yaml --- .github/workflows/run_test_cases.yaml | 420 +++++++++++++------------- 1 file changed, 210 insertions(+), 210 deletions(-) diff --git a/.github/workflows/run_test_cases.yaml b/.github/workflows/run_test_cases.yaml index c8f1eb647..5006fe760 100644 --- a/.github/workflows/run_test_cases.yaml +++ b/.github/workflows/run_test_cases.yaml @@ -15,218 +15,218 @@ on: pull_request: jobs: - build-matrix: - runs-on: ubuntu-latest - outputs: - prepare: ${{ steps.matrix.outputs.prepare }} - host: ${{ steps.matrix.outputs.host }} - docker: ${{ steps.matrix.outputs.docker }} - runs-on: ${{ steps.runner.outputs.runs-on }} - steps: - - uses: actions/checkout@v3 - - name: Build matrix - id: matrix - run: | - APPS="$(./scripts/find-apps.sh --ci)" - MATRIX="$(echo "${APPS}" | jq -c ' - [ - (.[] | select(.profile == "emqx") | . + { - builder: "5.0-29", - otp: "25.1.2-2", - elixir: "1.13.4" - }), - (.[] | select(.profile == "emqx-enterprise") | . + { - builder: "5.0-29", - otp: ["24.3.4.2-2", "25.1.2-2"][], - elixir: "1.13.4" - }) - ] - ')" - echo "${MATRIX}" | jq - MATRIX_PREPARE="$(echo "${MATRIX}" | jq -c 'map({profile, builder, otp, elixir}) | unique')" - MATRIX_HOST="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "host"))')" - MATRIX_DOCKER="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "docker"))')" - echo "prepare=${MATRIX_PREPARE}" | tee -a $GITHUB_OUTPUT - echo "host=${MATRIX_HOST}" | tee -a $GITHUB_OUTPUT - echo "docker=${MATRIX_DOCKER}" | tee -a $GITHUB_OUTPUT - - name: Choose runner host - id: runner - run: | - RUNS_ON="ubuntu-22.04" - ${{ github.repository_owner == 'emqx' }} && RUNS_ON="aws-amd64" - echo "runs-on=${RUNS_ON}" | tee -a $GITHUB_OUTPUT + build-matrix: + runs-on: ubuntu-latest + outputs: + prepare: ${{ steps.matrix.outputs.prepare }} + host: ${{ steps.matrix.outputs.host }} + docker: ${{ steps.matrix.outputs.docker }} + runs-on: ${{ steps.runner.outputs.runs-on }} + steps: + - uses: actions/checkout@v3 + - name: Build matrix + id: matrix + run: | + APPS="$(./scripts/find-apps.sh --ci)" + MATRIX="$(echo "${APPS}" | jq -c ' + [ + (.[] | select(.profile == "emqx") | . + { + builder: "5.0-29", + otp: "25.1.2-2", + elixir: "1.13.4" + }), + (.[] | select(.profile == "emqx-enterprise") | . + { + builder: "5.0-29", + otp: ["24.3.4.2-2", "25.1.2-2"][], + elixir: "1.13.4" + }) + ] + ')" + echo "${MATRIX}" | jq + MATRIX_PREPARE="$(echo "${MATRIX}" | jq -c 'map({profile, builder, otp, elixir}) | unique')" + MATRIX_HOST="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "host"))')" + MATRIX_DOCKER="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "docker"))')" + echo "prepare=${MATRIX_PREPARE}" | tee -a $GITHUB_OUTPUT + echo "host=${MATRIX_HOST}" | tee -a $GITHUB_OUTPUT + echo "docker=${MATRIX_DOCKER}" | tee -a $GITHUB_OUTPUT + - name: Choose runner host + id: runner + run: | + RUNS_ON="ubuntu-22.04" + ${{ github.repository_owner == 'emqx' }} && RUNS_ON="aws-amd64" + echo "runs-on=${RUNS_ON}" | tee -a $GITHUB_OUTPUT - prepare: - runs-on: ${{ needs.build-matrix.outputs.runs-on }} - needs: [build-matrix] - strategy: - fail-fast: false - matrix: - include: ${{ fromJson(needs.build-matrix.outputs.prepare) }} - container: "ghcr.io/emqx/emqx-builder/${{ matrix.builder }}:${{ matrix.elixir }}-${{ matrix.otp }}-ubuntu20.04" - steps: - - uses: AutoModality/action-clean@v1 - - uses: actions/checkout@v3 - with: - path: source - - name: get_all_deps - working-directory: source - env: - PROFILE: ${{ matrix.profile }} - #DIAGNOSTIC: 1 - run: | - make ensure-rebar3 - # fetch all deps and compile - make ${{ matrix.profile }} - make static_checks - make test-compile - cd .. - zip -ryq source.zip source/* source/.[^.]* - - uses: actions/upload-artifact@v3 - with: - name: source-${{ matrix.profile }}-${{ matrix.otp }} - path: source.zip + prepare: + runs-on: ${{ needs.build-matrix.outputs.runs-on }} + needs: [build-matrix] + strategy: + fail-fast: false + matrix: + include: ${{ fromJson(needs.build-matrix.outputs.prepare) }} + container: "ghcr.io/emqx/emqx-builder/${{ matrix.builder }}:${{ matrix.elixir }}-${{ matrix.otp }}-ubuntu20.04" + steps: + - uses: AutoModality/action-clean@v1 + - uses: actions/checkout@v3 + with: + path: source + - name: get_all_deps + working-directory: source + env: + PROFILE: ${{ matrix.profile }} + #DIAGNOSTIC: 1 + run: | + make ensure-rebar3 + # fetch all deps and compile + make ${{ matrix.profile }} + make static_checks + make test-compile + cd .. + zip -ryq source.zip source/* source/.[^.]* + - uses: actions/upload-artifact@v3 + with: + name: source-${{ matrix.profile }}-${{ matrix.otp }} + path: source.zip - eunit_and_proper: - needs: - - build-matrix - - prepare - runs-on: ${{ needs.build-matrix.outputs.runs-on }} - strategy: - fail-fast: false - matrix: - include: ${{ fromJson(needs.build-matrix.outputs.prepare) }} + eunit_and_proper: + needs: + - build-matrix + - prepare + runs-on: ${{ needs.build-matrix.outputs.runs-on }} + strategy: + fail-fast: false + matrix: + include: ${{ fromJson(needs.build-matrix.outputs.prepare) }} - defaults: - run: - shell: bash - container: "ghcr.io/emqx/emqx-builder/${{ matrix.builder }}:${{ matrix.elixir }}-${{ matrix.otp }}-ubuntu20.04" + defaults: + run: + shell: bash + container: "ghcr.io/emqx/emqx-builder/${{ matrix.builder }}:${{ matrix.elixir }}-${{ matrix.otp }}-ubuntu20.04" - steps: - - uses: AutoModality/action-clean@v1 - - uses: actions/download-artifact@v3 - with: - name: source-${{ matrix.profile }}-${{ matrix.otp }} - path: . - - name: unzip source code - run: unzip -o -q source.zip - # produces eunit.coverdata - - name: eunit - env: - PROFILE: ${{ matrix.profile }} - CT_COVER_EXPORT_PREFIX: ${{ matrix.profile }}-${{ matrix.otp }} - working-directory: source - run: make eunit + steps: + - uses: AutoModality/action-clean@v1 + - uses: actions/download-artifact@v3 + with: + name: source-${{ matrix.profile }}-${{ matrix.otp }} + path: . + - name: unzip source code + run: unzip -o -q source.zip + # produces eunit.coverdata + - name: eunit + env: + PROFILE: ${{ matrix.profile }} + CT_COVER_EXPORT_PREFIX: ${{ matrix.profile }}-${{ matrix.otp }} + working-directory: source + run: make eunit - # produces proper.coverdata - - name: proper - env: - PROFILE: ${{ matrix.profile }} - CT_COVER_EXPORT_PREFIX: ${{ matrix.profile }}-${{ matrix.otp }} - working-directory: source - run: make proper + # produces proper.coverdata + - name: proper + env: + PROFILE: ${{ matrix.profile }} + CT_COVER_EXPORT_PREFIX: ${{ matrix.profile }}-${{ matrix.otp }} + working-directory: source + run: make proper - - uses: actions/upload-artifact@v3 - with: - name: coverdata - path: source/_build/test/cover + - uses: actions/upload-artifact@v3 + with: + name: coverdata + path: source/_build/test/cover - ct_docker: - needs: - - build-matrix - - prepare - runs-on: ${{ needs.build-matrix.outputs.runs-on }} - strategy: - fail-fast: false - matrix: - include: ${{ fromJson(needs.build-matrix.outputs.docker) }} + ct_docker: + needs: + - build-matrix + - prepare + runs-on: ${{ needs.build-matrix.outputs.runs-on }} + strategy: + fail-fast: false + matrix: + include: ${{ fromJson(needs.build-matrix.outputs.docker) }} - defaults: - run: - shell: bash + defaults: + run: + shell: bash - steps: - - uses: AutoModality/action-clean@v1 - - uses: actions/download-artifact@v3 - with: - name: source-${{ matrix.profile }}-${{ matrix.otp }} - path: . - - name: unzip source code - run: unzip -q source.zip - - name: run tests - working-directory: source - env: - DOCKER_CT_RUNNER_IMAGE: "ghcr.io/emqx/emqx-builder/${{ matrix.builder }}:${{ matrix.elixir }}-${{ matrix.otp }}-ubuntu20.04" - MONGO_TAG: "5" - MYSQL_TAG: "8" - PGSQL_TAG: "13" - REDIS_TAG: "7.0" - INFLUXDB_TAG: "2.5.0" - TDENGINE_TAG: "3.0.2.4" - PROFILE: ${{ matrix.profile }} - CT_COVER_EXPORT_PREFIX: ${{ matrix.profile }}-${{ matrix.otp }} - run: ./scripts/ct/run.sh --ci --app ${{ matrix.app }} - - uses: actions/upload-artifact@v3 - with: - name: coverdata - path: source/_build/test/cover - - uses: actions/upload-artifact@v3 - if: failure() - with: - name: logs-${{ matrix.profile }}-${{ matrix.prefix }}-${{ matrix.otp }} - path: source/_build/test/logs + steps: + - uses: AutoModality/action-clean@v1 + - uses: actions/download-artifact@v3 + with: + name: source-${{ matrix.profile }}-${{ matrix.otp }} + path: . + - name: unzip source code + run: unzip -q source.zip + - name: run tests + working-directory: source + env: + DOCKER_CT_RUNNER_IMAGE: "ghcr.io/emqx/emqx-builder/${{ matrix.builder }}:${{ matrix.elixir }}-${{ matrix.otp }}-ubuntu20.04" + MONGO_TAG: "5" + MYSQL_TAG: "8" + PGSQL_TAG: "13" + REDIS_TAG: "7.0" + INFLUXDB_TAG: "2.5.0" + TDENGINE_TAG: "3.0.2.4" + PROFILE: ${{ matrix.profile }} + CT_COVER_EXPORT_PREFIX: ${{ matrix.profile }}-${{ matrix.otp }} + run: ./scripts/ct/run.sh --ci --app ${{ matrix.app }} + - uses: actions/upload-artifact@v3 + with: + name: coverdata + path: source/_build/test/cover + - uses: actions/upload-artifact@v3 + if: failure() + with: + name: logs-${{ matrix.profile }}-${{ matrix.prefix }}-${{ matrix.otp }} + path: source/_build/test/logs - ct: - needs: - - build-matrix - - prepare - runs-on: ${{ needs.build-matrix.outputs.runs-on }} - strategy: - fail-fast: false - matrix: - include: ${{ fromJson(needs.build-matrix.outputs.host) }} + ct: + needs: + - build-matrix + - prepare + runs-on: ${{ needs.build-matrix.outputs.runs-on }} + strategy: + fail-fast: false + matrix: + include: ${{ fromJson(needs.build-matrix.outputs.host) }} - container: "ghcr.io/emqx/emqx-builder/${{ matrix.builder }}:${{ matrix.elixir }}-${{ matrix.otp }}-ubuntu20.04" - defaults: - run: - shell: bash + container: "ghcr.io/emqx/emqx-builder/${{ matrix.builder }}:${{ matrix.elixir }}-${{ matrix.otp }}-ubuntu20.04" + defaults: + run: + shell: bash - steps: - - uses: AutoModality/action-clean@v1 - - uses: actions/download-artifact@v3 - with: - name: source-${{ matrix.profile }}-${{ matrix.otp }} - path: . - - name: unzip source code - run: unzip -q source.zip + steps: + - uses: AutoModality/action-clean@v1 + - uses: actions/download-artifact@v3 + with: + name: source-${{ matrix.profile }}-${{ matrix.otp }} + path: . + - name: unzip source code + run: unzip -q source.zip - # produces $PROFILE-.coverdata - - name: run common test - working-directory: source - env: - PROFILE: ${{ matrix.profile }} - CT_COVER_EXPORT_PREFIX: ${{ matrix.profile }}-${{ matrix.otp }} - run: | - make "${{ matrix.app }}-ct" - - uses: actions/upload-artifact@v3 - with: - name: coverdata - path: source/_build/test/cover - if-no-files-found: warn # do not fail if no coverdata found - - uses: actions/upload-artifact@v3 - if: failure() - with: - name: logs-${{ matrix.profile }}-${{ matrix.prefix }}-${{ matrix.otp }} - path: source/_build/test/logs + # produces $PROFILE-.coverdata + - name: run common test + working-directory: source + env: + PROFILE: ${{ matrix.profile }} + CT_COVER_EXPORT_PREFIX: ${{ matrix.profile }}-${{ matrix.otp }} + run: | + make "${{ matrix.app }}-ct" + - uses: actions/upload-artifact@v3 + with: + name: coverdata + path: source/_build/test/cover + if-no-files-found: warn # do not fail if no coverdata found + - uses: actions/upload-artifact@v3 + if: failure() + with: + name: logs-${{ matrix.profile }}-${{ matrix.prefix }}-${{ matrix.otp }} + path: source/_build/test/logs - make_cover: - needs: - - eunit_and_proper - - ct - - ct_docker - runs-on: ubuntu-22.04 - container: "ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-24.3.4.2-2-ubuntu22.04" - steps: + make_cover: + needs: + - eunit_and_proper + - ct + - ct_docker + runs-on: ubuntu-22.04 + container: "ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-24.3.4.2-2-ubuntu22.04" + steps: - uses: AutoModality/action-clean@v1 - uses: actions/download-artifact@v3 with: @@ -259,15 +259,15 @@ jobs: if: failure() run: cat rebar3.crashdump - # do this in a separate job - upload_coverdata: - needs: make_cover - runs-on: ubuntu-20.04 - steps: - - name: Coveralls Finished - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - curl -v -k https://coveralls.io/webhook \ - --header "Content-Type: application/json" \ - --data "{\"repo_name\":\"$GITHUB_REPOSITORY\",\"repo_token\":\"$GITHUB_TOKEN\",\"payload\":{\"build_num\":$GITHUB_RUN_ID,\"status\":\"done\"}}" || true + # do this in a separate job + upload_coverdata: + needs: make_cover + runs-on: ubuntu-20.04 + steps: + - name: Coveralls Finished + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + curl -v -k https://coveralls.io/webhook \ + --header "Content-Type: application/json" \ + --data "{\"repo_name\":\"$GITHUB_REPOSITORY\",\"repo_token\":\"$GITHUB_TOKEN\",\"payload\":{\"build_num\":$GITHUB_RUN_ID,\"status\":\"done\"}}" || true From 9065cb74297bde94147160c3e58ad6fd965cc372 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Wed, 22 Feb 2023 16:03:40 +0100 Subject: [PATCH 18/96] ci: do not run scheduled workflows in forks --- .github/workflows/build_packages.yaml | 1 + .github/workflows/stale.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index ffb7ab9f3..d96062cb1 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -23,6 +23,7 @@ on: jobs: prepare: runs-on: ubuntu-22.04 + if: (github.repository_owner == 'emqx' && github.event_name == 'schedule') || github.event_name != 'schedule' container: ghcr.io/emqx/emqx-builder/5.0-29:1.13.4-24.3.4.2-2-ubuntu22.04 outputs: BUILD_PROFILE: ${{ steps.get_profile.outputs.BUILD_PROFILE }} diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml index 32abe1721..cf6229b13 100644 --- a/.github/workflows/stale.yaml +++ b/.github/workflows/stale.yaml @@ -11,6 +11,7 @@ on: jobs: stale: runs-on: ubuntu-latest + if: github.repository_owner == 'emqx' permissions: issues: write pull-requests: none From cac0d2f2aecaba48f85f58ffb51dbbdf84ae4f03 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Wed, 22 Feb 2023 20:14:13 +0100 Subject: [PATCH 19/96] fix(scripts): typo in run.sh --- scripts/ct/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ct/run.sh b/scripts/ct/run.sh index ba6d1f91f..612bda77a 100755 --- a/scripts/ct/run.sh +++ b/scripts/ct/run.sh @@ -17,7 +17,7 @@ help() { echo "--only-up: Only start the testbed but do not run CT" echo "--keep-up: Keep the testbed running after CT" echo "--ci: Set this flag in GitHub action to enforce no tests are skipped" - echo "--" If any, all args after '--' are passed to rebar3 ct + echo "--: If any, all args after '--' are passed to rebar3 ct" echo " otherwise it runs the entire app's CT" } From 78540fd0dfe9af8f3bc41aabea7e1f86a1a0204a Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Wed, 22 Feb 2023 20:47:41 +0100 Subject: [PATCH 20/96] chore: add changelog --- changes/ce/feat-10022.en.md | 1 + changes/ce/feat-10022.zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/ce/feat-10022.en.md create mode 100644 changes/ce/feat-10022.zh.md diff --git a/changes/ce/feat-10022.en.md b/changes/ce/feat-10022.en.md new file mode 100644 index 000000000..d5e0f4968 --- /dev/null +++ b/changes/ce/feat-10022.en.md @@ -0,0 +1 @@ +Start releasing Rocky Linux 9 (compatible with Enterprise Linux 9) packages diff --git a/changes/ce/feat-10022.zh.md b/changes/ce/feat-10022.zh.md new file mode 100644 index 000000000..9dad558a4 --- /dev/null +++ b/changes/ce/feat-10022.zh.md @@ -0,0 +1 @@ +开始发布Rocky Linux 9(与Enterprise Linux 9兼容)软件包。 From 7c4e5d429adbec0f708d31100cfd1a35c09359ef Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Thu, 23 Feb 2023 08:50:09 +0100 Subject: [PATCH 21/96] ci: build packages for macos12 --- .github/workflows/build_packages.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index d96062cb1..c97748a86 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -154,6 +154,7 @@ jobs: - 24.3.4.2-2 os: - macos-11 + - macos-12 - macos-12-arm64 runs-on: ${{ matrix.os }} steps: From 379be2b5827bec17130d23b8de73b18b3ee0c0ae Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Thu, 23 Feb 2023 08:50:24 +0100 Subject: [PATCH 22/96] chore: bump erlang-rocksdb to 1.7.2-emqx-9 --- mix.exs | 2 +- rebar.config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index 43b0c979f..a1eb12812 100644 --- a/mix.exs +++ b/mix.exs @@ -53,7 +53,7 @@ defmodule EMQXUmbrella.MixProject do {:jiffy, github: "emqx/jiffy", tag: "1.0.5", override: true}, {:cowboy, github: "emqx/cowboy", tag: "2.9.0", override: true}, {:esockd, github: "emqx/esockd", tag: "5.9.4", override: true}, - {:rocksdb, github: "emqx/erlang-rocksdb", tag: "1.7.2-emqx-7", override: true}, + {:rocksdb, github: "emqx/erlang-rocksdb", tag: "1.7.2-emqx-9", override: true}, {:ekka, github: "emqx/ekka", tag: "0.14.1", override: true}, {:gen_rpc, github: "emqx/gen_rpc", tag: "2.8.1", override: true}, {:grpc, github: "emqx/grpc-erl", tag: "0.6.7", override: true}, diff --git a/rebar.config b/rebar.config index 816118926..302f3a2f9 100644 --- a/rebar.config +++ b/rebar.config @@ -55,7 +55,7 @@ , {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.5"}}} , {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.0"}}} , {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.4"}}} - , {rocksdb, {git, "https://github.com/emqx/erlang-rocksdb", {tag, "1.7.2-emqx-7"}}} + , {rocksdb, {git, "https://github.com/emqx/erlang-rocksdb", {tag, "1.7.2-emqx-9"}}} , {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.14.1"}}} , {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.8.1"}}} , {grpc, {git, "https://github.com/emqx/grpc-erl", {tag, "0.6.7"}}} From ead29593df9a6e6d29a6b4d0d633a40b2823da04 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Thu, 23 Feb 2023 08:52:55 +0100 Subject: [PATCH 23/96] chore: update changelog --- changes/ce/feat-10022.en.md | 2 +- changes/ce/feat-10022.zh.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/changes/ce/feat-10022.en.md b/changes/ce/feat-10022.en.md index d5e0f4968..61d027aa2 100644 --- a/changes/ce/feat-10022.en.md +++ b/changes/ce/feat-10022.en.md @@ -1 +1 @@ -Start releasing Rocky Linux 9 (compatible with Enterprise Linux 9) packages +Start releasing Rocky Linux 9 (compatible with Enterprise Linux 9) and MacOS 12 packages diff --git a/changes/ce/feat-10022.zh.md b/changes/ce/feat-10022.zh.md index 9dad558a4..970704f55 100644 --- a/changes/ce/feat-10022.zh.md +++ b/changes/ce/feat-10022.zh.md @@ -1 +1 @@ -开始发布Rocky Linux 9(与Enterprise Linux 9兼容)软件包。 +开始发布Rocky Linux 9(与Enterprise Linux 9兼容)和MacOS 12软件包。 From e46922b0b6c5cea8314b1b64f2ad97481053aa7d Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Mon, 27 Feb 2023 22:13:38 +0100 Subject: [PATCH 24/96] ci(slim_packages): test elixir packages for ubuntu22.04 only --- .github/workflows/build_slim_packages.yaml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build_slim_packages.yaml b/.github/workflows/build_slim_packages.yaml index 900e124c6..9bd6b7e16 100644 --- a/.github/workflows/build_slim_packages.yaml +++ b/.github/workflows/build_slim_packages.yaml @@ -29,14 +29,14 @@ jobs: fail-fast: false matrix: profile: - - ["emqx", "24.3.4.2-2", "el7"] - - ["emqx", "25.1.2-2", "ubuntu22.04"] - - ["emqx-enterprise", "24.3.4.2-2", "amzn2"] - - ["emqx-enterprise", "25.1.2-2", "ubuntu20.04"] + - ["emqx", "24.3.4.2-2", "el7", "erlang"] + - ["emqx", "25.1.2-2", "ubuntu22.04", "elixir"] + - ["emqx-enterprise", "24.3.4.2-2", "amzn2", "erlang"] + - ["emqx-enterprise", "25.1.2-2", "ubuntu20.04", "erlang"] builder: - - 5.0-29 + - 5.0-29 elixir: - - 1.13.4 + - '1.13.4' container: "ghcr.io/emqx/emqx-builder/${{ matrix.builder }}:${{ matrix.elixir }}-${{ matrix.profile[1] }}-${{ matrix.profile[2] }}" @@ -53,18 +53,22 @@ jobs: run: | git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: build and test tgz package + if: matrix.profile[3] == 'erlang' run: | make ${EMQX_NAME}-tgz ./scripts/pkg-tests.sh ${EMQX_NAME}-tgz - name: build and test deb/rpm packages + if: matrix.profile[3] == 'erlang' run: | make ${EMQX_NAME}-pkg ./scripts/pkg-tests.sh ${EMQX_NAME}-pkg - name: build and test tgz package (Elixir) + if: matrix.profile[3] == 'elixir' run: | make ${EMQX_NAME}-elixir-tgz ./scripts/pkg-tests.sh ${EMQX_NAME}-elixir-tgz - name: build and test deb/rpm packages (Elixir) + if: matrix.profile[3] == 'elixir' run: | make ${EMQX_NAME}-elixir-pkg ./scripts/pkg-tests.sh ${EMQX_NAME}-elixir-pkg From c9f8e3ca033374d786a30afcd5c820e2d0e6de4f Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Wed, 1 Mar 2023 12:49:21 +0100 Subject: [PATCH 25/96] chore: add changelog for PR 10014 --- changes/ce/fix-10014.en.md | 1 + changes/ce/fix-10014.zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/ce/fix-10014.en.md create mode 100644 changes/ce/fix-10014.zh.md diff --git a/changes/ce/fix-10014.en.md b/changes/ce/fix-10014.en.md new file mode 100644 index 000000000..d52452bf9 --- /dev/null +++ b/changes/ce/fix-10014.en.md @@ -0,0 +1 @@ +In dashboard API for `/monitor(_current)/nodes/:node` return `404` instead of `400` if node does not exist. diff --git a/changes/ce/fix-10014.zh.md b/changes/ce/fix-10014.zh.md new file mode 100644 index 000000000..5e6a1660f --- /dev/null +++ b/changes/ce/fix-10014.zh.md @@ -0,0 +1 @@ +如果 API 查询的节点不存在,将会返回 404 而不再是 400。 From bc1750703a195f11cc2ba0490d43b14cf1a1b686 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Wed, 1 Mar 2023 12:51:13 +0100 Subject: [PATCH 26/96] chore: add changelog for PR 10013 --- changes/ce/fix-10013.en.md | 1 + changes/ce/fix-10013.zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/ce/fix-10013.en.md create mode 100644 changes/ce/fix-10013.zh.md diff --git a/changes/ce/fix-10013.en.md b/changes/ce/fix-10013.en.md new file mode 100644 index 000000000..ed7fa21eb --- /dev/null +++ b/changes/ce/fix-10013.en.md @@ -0,0 +1 @@ +Fix return type structure for error case in API schema for `/gateways/:name/clients`. diff --git a/changes/ce/fix-10013.zh.md b/changes/ce/fix-10013.zh.md new file mode 100644 index 000000000..171b79538 --- /dev/null +++ b/changes/ce/fix-10013.zh.md @@ -0,0 +1 @@ +修复 API `/gateways/:name/clients` 返回值的类型结构错误。 From a76ef2449347c1d37729cf2de80765dbc3bd08e0 Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Wed, 1 Mar 2023 14:06:23 +0100 Subject: [PATCH 27/96] docs: merge missed change logs to v5.0.18 --- changes/v5.0.18.en.md | 4 +++- changes/v5.0.18.zh.md | 3 +++ changes/v5.0.18/fix-9966.en.md | 2 -- changes/v5.0.18/fix-9966.zh.md | 2 -- 4 files changed, 6 insertions(+), 5 deletions(-) delete mode 100644 changes/v5.0.18/fix-9966.en.md delete mode 100644 changes/v5.0.18/fix-9966.zh.md diff --git a/changes/v5.0.18.en.md b/changes/v5.0.18.en.md index e6694773d..15ba9ff84 100644 --- a/changes/v5.0.18.en.md +++ b/changes/v5.0.18.en.md @@ -7,7 +7,9 @@ - [#9213](https://github.com/emqx/emqx/pull/9213) Add pod disruption budget to helm chart - [#9949](https://github.com/emqx/emqx/pull/9949) QUIC transport Multistreams support and QUIC TLS cacert support. - + +- [#9966](https://github.com/emqx/emqx/pull/9966) Add two new Erlang apps 'tools' and 'covertool' to the release. + So we can run profiling and test coverage analysis on release packages. - [#9967](https://github.com/emqx/emqx/pull/9967) New common TLS option 'hibernate_after' to reduce memory footprint per idle connecion, default: 5s. diff --git a/changes/v5.0.18.zh.md b/changes/v5.0.18.zh.md index d88c823d7..e186da913 100644 --- a/changes/v5.0.18.zh.md +++ b/changes/v5.0.18.zh.md @@ -8,6 +8,9 @@ - [#9949](https://github.com/emqx/emqx/pull/9949) QUIC 传输多流支持和 QUIC TLS cacert 支持。 +- [#9966](https://github.com/emqx/emqx/pull/9966) 在发布包中增加了2个新的 Erlang app,分别是 ‘tools’ 和 ‘covertool’。 + 这两个 app 可以用于性能和测试覆盖率的分析。 + - [#9967](https://github.com/emqx/emqx/pull/9967) 新的通用 TLS 选项 'hibernate_after', 以减少空闲连接的内存占用,默认: 5s 。 ## 修复 diff --git a/changes/v5.0.18/fix-9966.en.md b/changes/v5.0.18/fix-9966.en.md deleted file mode 100644 index cc3a0bb8f..000000000 --- a/changes/v5.0.18/fix-9966.en.md +++ /dev/null @@ -1,2 +0,0 @@ -Add two new Erlang apps 'tools' and 'covertool' to the release. -So we can run profiling and test coverage analysis on release packages. diff --git a/changes/v5.0.18/fix-9966.zh.md b/changes/v5.0.18/fix-9966.zh.md deleted file mode 100644 index df5b7cff7..000000000 --- a/changes/v5.0.18/fix-9966.zh.md +++ /dev/null @@ -1,2 +0,0 @@ -在发布包中增加了2个新的 Erlang app,分别是 ‘tools’ 和 ‘covertool’。 -这两个 app 可以用于性能和测试覆盖率的分析。 From 3f324f85bcc222a8a67bec9e0bc0cb98f4265530 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Wed, 1 Mar 2023 16:27:50 +0100 Subject: [PATCH 28/96] fix: consistently return 404 in case bridge is not found or invalid Also: fix some typos and be more verbose --- apps/emqx_bridge/src/emqx_bridge_api.erl | 59 +++++++++++-------- apps/emqx_bridge/src/emqx_bridge_resource.erl | 2 +- .../test/emqx_bridge_api_SUITE.erl | 8 +-- changes/ce/fix-10050.en.md | 1 + changes/ce/fix-10050.zh.md | 1 + 5 files changed, 41 insertions(+), 30 deletions(-) create mode 100644 changes/ce/fix-10050.en.md create mode 100644 changes/ce/fix-10050.zh.md diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index 293692ccd..b1fb84b74 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -46,17 +46,22 @@ -export([lookup_from_local_node/2]). +-define(NOT_FOUND(Reason), {404, error_msg('NOT_FOUND', Reason)}). + +-define(BRIDGE_NOT_FOUND(Type, Name), + ?NOT_FOUND( + <<"Bridge lookup failed: bridge named '", BridgeName/binary, "' of type ", + (atom_to_binary(BridgeType))/binary, " does not exist.">> + ) +). + -define(TRY_PARSE_ID(ID, EXPR), try emqx_bridge_resource:parse_bridge_id(Id) of {BridgeType, BridgeName} -> EXPR catch throw:{invalid_bridge_id, Reason} -> - {400, - error_msg( - 'INVALID_ID', - <<"Invalid bride ID, ", Reason/binary>> - )} + ?NOT_FOUND(<<"Invalid bridge ID, ", Reason/binary>>) end ). @@ -338,7 +343,7 @@ schema("/bridges/:id") -> responses => #{ 200 => get_response_body_schema(), 404 => error_schema('NOT_FOUND', "Bridge not found"), - 400 => error_schema(['BAD_REQUEST', 'INVALID_ID'], "Update bridge failed") + 400 => error_schema('BAD_REQUEST', "Update bridge failed") } }, delete => #{ @@ -348,7 +353,6 @@ schema("/bridges/:id") -> parameters => [param_path_id()], responses => #{ 204 => <<"Bridge deleted">>, - 400 => error_schema(['INVALID_ID'], "Update bridge failed"), 404 => error_schema('NOT_FOUND', "Bridge not found"), 403 => error_schema('FORBIDDEN_REQUEST', "Forbidden operation"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") @@ -379,7 +383,8 @@ schema("/bridges/:id/metrics/reset") -> parameters => [param_path_id()], responses => #{ 204 => <<"Reset success">>, - 400 => error_schema(['BAD_REQUEST'], "RPC Call Failed") + 400 => error_schema(['BAD_REQUEST'], "RPC Call Failed"), + 404 => error_schema('NOT_FOUND', "Bridge not found") } } }; @@ -395,7 +400,7 @@ schema("/bridges/:id/enable/:enable") -> responses => #{ 204 => <<"Success">>, - 400 => error_schema('INVALID_ID', "Bad bridge ID"), + 404 => error_schema('NOT_FOUND', "Bridge not found or operation invalid"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") } } @@ -413,7 +418,7 @@ schema("/bridges/:id/:operation") -> ], responses => #{ 204 => <<"Operation success">>, - 400 => error_schema('INVALID_ID', "Bad bridge ID"), + 404 => error_schema('NOT_FOUND', "Bridge not found or operation invalid"), 501 => error_schema('NOT_IMPLEMENTED', "Not Implemented"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") } @@ -433,7 +438,7 @@ schema("/nodes/:node/bridges/:id/:operation") -> ], responses => #{ 204 => <<"Operation success">>, - 400 => error_schema('INVALID_ID', "Bad bridge ID"), + 404 => error_schema('NOT_FOUND', "Bridge not found or operation invalid"), 403 => error_schema('FORBIDDEN_REQUEST', "forbidden operation"), 501 => error_schema('NOT_IMPLEMENTED', "Not Implemented"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") @@ -493,24 +498,26 @@ schema("/bridges_probe") -> {400, Error} end; {error, not_found} -> - {404, error_msg('NOT_FOUND', <<"bridge not found">>)} + ?BRIDGE_NOT_FOUND(BridgeType, BridgeName) end ); '/bridges/:id'(delete, #{bindings := #{id := Id}, query_string := Qs}) -> - AlsoDeleteActs = - case maps:get(<<"also_delete_dep_actions">>, Qs, <<"false">>) of - <<"true">> -> true; - true -> true; - _ -> false - end, ?TRY_PARSE_ID( Id, case emqx_bridge:lookup(BridgeType, BridgeName) of {ok, _} -> + AlsoDeleteActs = + case maps:get(<<"also_delete_dep_actions">>, Qs, <<"false">>) of + <<"true">> -> true; + true -> true; + _ -> false + end, case emqx_bridge:check_deps_and_remove(BridgeType, BridgeName, AlsoDeleteActs) of {ok, _} -> 204; {error, {rules_deps_on_this_bridge, RuleIds}} -> + %% [FIXME] this should be a 400 since '403' is about + %% authorization and not application logic. {403, error_msg( 'FORBIDDEN_REQUEST', @@ -522,7 +529,7 @@ schema("/bridges_probe") -> {500, error_msg('INTERNAL_ERROR', Reason)} end; {error, not_found} -> - {404, error_msg('NOT_FOUND', <<"Bridge not found">>)} + ?BRIDGE_NOT_FOUND(BridgeType, BridgeName) end ). @@ -570,7 +577,7 @@ do_lookup_from_all_nodes(BridgeType, BridgeName, SuccCode, FormatFun) -> {ok, [{ok, _} | _] = Results} -> {SuccCode, FormatFun([R || {ok, R} <- Results])}; {ok, [{error, not_found} | _]} -> - {404, error_msg('NOT_FOUND', <<"not_found">>)}; + ?BRIDGE_NOT_FOUND(BridgeType, BridgeName); {error, ErrL} -> {500, error_msg('INTERNAL_ERROR', ErrL)} end. @@ -586,13 +593,13 @@ lookup_from_local_node(BridgeType, BridgeName) -> Id, case enable_func(Enable) of invalid -> - {400, error_msg('BAD_REQUEST', <<"invalid operation">>)}; + ?NOT_FOUND(<<"Invalid operation">>); OperFunc -> case emqx_bridge:disable_enable(OperFunc, BridgeType, BridgeName) of {ok, _} -> {204}; {error, {pre_config_update, _, bridge_not_found}} -> - {404, error_msg('NOT_FOUND', <<"bridge not found">>)}; + ?BRIDGE_NOT_FOUND(BridgeType, BridgeName); {error, {_, _, timeout}} -> {503, error_msg('SERVICE_UNAVAILABLE', <<"request timeout">>)}; {error, timeout} -> @@ -611,7 +618,7 @@ lookup_from_local_node(BridgeType, BridgeName) -> Id, case operation_to_all_func(Op) of invalid -> - {400, error_msg('BAD_REQUEST', <<"invalid operation">>)}; + ?NOT_FOUND(<<"Invalid operation: ", Op/binary>>); OperFunc -> Nodes = mria_mnesia:running_nodes(), call_operation(all, OperFunc, [Nodes, BridgeType, BridgeName]) @@ -626,11 +633,13 @@ lookup_from_local_node(BridgeType, BridgeName) -> Id, case node_operation_func(Op) of invalid -> - {400, error_msg('BAD_REQUEST', <<"invalid operation">>)}; + ?NOT_FOUND(<<"Invalid operation: ", Op/binary>>); OperFunc -> ConfMap = emqx:get_config([bridges, BridgeType, BridgeName]), case maps:get(enable, ConfMap, false) of false -> + %% [FIXME] `403` is about authorization not application + %% logic. {403, error_msg( 'FORBIDDEN_REQUEST', @@ -643,7 +652,7 @@ lookup_from_local_node(BridgeType, BridgeName) -> TargetNode, BridgeType, BridgeName ]); {error, _} -> - {400, error_msg('INVALID_NODE', <<"invalid node">>)} + ?NOT_FOUND(<<"Invalid node name: ", Node/binary>>) end end end diff --git a/apps/emqx_bridge/src/emqx_bridge_resource.erl b/apps/emqx_bridge/src/emqx_bridge_resource.erl index d2ce7a9d5..53fc7df4c 100644 --- a/apps/emqx_bridge/src/emqx_bridge_resource.erl +++ b/apps/emqx_bridge/src/emqx_bridge_resource.erl @@ -79,7 +79,7 @@ parse_bridge_id(BridgeId) -> {to_type_atom(Type), validate_name(Name)}; _ -> invalid_bridge_id( - <<"should be of forst {type}:{name}, but got ", BridgeId/binary>> + <<"should be of pattern {type}:{name}, but got ", BridgeId/binary>> ) end. diff --git a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl index 5f863ed63..14a7aafb8 100644 --- a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl +++ b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl @@ -311,8 +311,8 @@ t_http_crud_apis(Config) -> ), ?assertMatch( #{ - <<"code">> := _, - <<"message">> := <<"bridge not found">> + <<"code">> := <<"NOT_FOUND">>, + <<"message">> := _ }, jsx:decode(ErrMsg2) ), @@ -320,8 +320,8 @@ t_http_crud_apis(Config) -> {ok, 404, ErrMsg3} = request(delete, uri(["bridges", BridgeID]), []), ?assertMatch( #{ - <<"code">> := _, - <<"message">> := <<"Bridge not found">> + <<"code">> := <<"NOT_FOUND">>, + <<"message">> := _ }, jsx:decode(ErrMsg3) ), diff --git a/changes/ce/fix-10050.en.md b/changes/ce/fix-10050.en.md new file mode 100644 index 000000000..c225c380d --- /dev/null +++ b/changes/ce/fix-10050.en.md @@ -0,0 +1 @@ +Ensure Bridge API returns `404` status code consistently for resources that don't exist. diff --git a/changes/ce/fix-10050.zh.md b/changes/ce/fix-10050.zh.md new file mode 100644 index 000000000..d7faf9434 --- /dev/null +++ b/changes/ce/fix-10050.zh.md @@ -0,0 +1 @@ +确保 Bridge API 对不存在的资源一致返回 `404` 状态代码。 From 76f97010bbc17004f11f9c959a6a41354bfeeb67 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 2 Mar 2023 09:14:52 +0100 Subject: [PATCH 29/96] style: change wording --- apps/emqx_bridge/src/emqx_bridge_api.erl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index b1fb84b74..2ed48b540 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -400,7 +400,7 @@ schema("/bridges/:id/enable/:enable") -> responses => #{ 204 => <<"Success">>, - 404 => error_schema('NOT_FOUND', "Bridge not found or operation invalid"), + 404 => error_schema('NOT_FOUND', "Bridge not found or invalid operation"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") } } @@ -418,7 +418,7 @@ schema("/bridges/:id/:operation") -> ], responses => #{ 204 => <<"Operation success">>, - 404 => error_schema('NOT_FOUND', "Bridge not found or operation invalid"), + 404 => error_schema('NOT_FOUND', "Bridge not found or invalid operation"), 501 => error_schema('NOT_IMPLEMENTED', "Not Implemented"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") } @@ -438,7 +438,7 @@ schema("/nodes/:node/bridges/:id/:operation") -> ], responses => #{ 204 => <<"Operation success">>, - 404 => error_schema('NOT_FOUND', "Bridge not found or operation invalid"), + 404 => error_schema('NOT_FOUND', "Bridge not found or invalid operation"), 403 => error_schema('FORBIDDEN_REQUEST', "forbidden operation"), 501 => error_schema('NOT_IMPLEMENTED', "Not Implemented"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") From 680a4362d1f89eea1d8bdaf2a10d991243e7abb9 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 2 Mar 2023 10:12:56 +0100 Subject: [PATCH 30/96] fix: match macro variables --- apps/emqx_bridge/src/emqx_bridge_api.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index 2ed48b540..8259e4ee5 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -50,8 +50,8 @@ -define(BRIDGE_NOT_FOUND(Type, Name), ?NOT_FOUND( - <<"Bridge lookup failed: bridge named '", BridgeName/binary, "' of type ", - (atom_to_binary(BridgeType))/binary, " does not exist.">> + <<"Bridge lookup failed: bridge named '", Name/binary, "' of type ", + (atom_to_binary(Type))/binary, " does not exist.">> ) ). From 4c23ab097da5cdbf8ec624c88b82f10535b14bd9 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 2 Mar 2023 09:54:29 +0100 Subject: [PATCH 31/96] fix(emqx_bridge): return 400 if operation not possible --- apps/emqx_bridge/src/emqx_bridge_api.erl | 24 +++++++++---------- .../test/emqx_bridge_api_SUITE.erl | 6 ++--- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index 8259e4ee5..708c3ac0b 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -353,8 +353,11 @@ schema("/bridges/:id") -> parameters => [param_path_id()], responses => #{ 204 => <<"Bridge deleted">>, + 400 => error_schema( + 'BAD_REQUEST', + "Can not delete bridge while active rules defined for this bridge" + ), 404 => error_schema('NOT_FOUND', "Bridge not found"), - 403 => error_schema('FORBIDDEN_REQUEST', "Forbidden operation"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") } } @@ -438,8 +441,8 @@ schema("/nodes/:node/bridges/:id/:operation") -> ], responses => #{ 204 => <<"Operation success">>, + 400 => error_schema('BAD_REQUEST', "Forbidden operation, bridge not enabled"), 404 => error_schema('NOT_FOUND', "Bridge not found or invalid operation"), - 403 => error_schema('FORBIDDEN_REQUEST', "forbidden operation"), 501 => error_schema('NOT_IMPLEMENTED', "Not Implemented"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") } @@ -516,12 +519,11 @@ schema("/bridges_probe") -> {ok, _} -> 204; {error, {rules_deps_on_this_bridge, RuleIds}} -> - %% [FIXME] this should be a 400 since '403' is about - %% authorization and not application logic. - {403, + {400, error_msg( - 'FORBIDDEN_REQUEST', - {<<"There're some rules dependent on this bridge">>, RuleIds} + 'BAD_REQUEST', + {<<"Can not delete bridge while active rules defined for this bridge">>, + RuleIds} )}; {error, timeout} -> {503, error_msg('SERVICE_UNAVAILABLE', <<"request timeout">>)}; @@ -638,12 +640,10 @@ lookup_from_local_node(BridgeType, BridgeName) -> ConfMap = emqx:get_config([bridges, BridgeType, BridgeName]), case maps:get(enable, ConfMap, false) of false -> - %% [FIXME] `403` is about authorization not application - %% logic. - {403, + {400, error_msg( - 'FORBIDDEN_REQUEST', - <<"forbidden operation: bridge disabled">> + 'BAD_REQUEST', + <<"Forbidden operation, bridge not enabled">> )}; true -> case emqx_misc:safe_to_existing_atom(Node, utf8) of diff --git a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl index 14a7aafb8..727764d73 100644 --- a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl +++ b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl @@ -403,7 +403,7 @@ t_check_dependent_actions_on_delete(Config) -> ), #{<<"id">> := RuleId} = jsx:decode(Rule), %% delete the bridge should fail because there is a rule depenents on it - {ok, 403, _} = request(delete, uri(["bridges", BridgeID]), []), + {ok, 400, _} = request(delete, uri(["bridges", BridgeID]), []), %% delete the rule first {ok, 204, <<>>} = request(delete, uri(["rules", RuleId]), []), %% then delete the bridge is OK @@ -601,9 +601,9 @@ t_enable_disable_bridges(Config) -> %% disable it again {ok, 204, <<>>} = request(put, enable_path(false, BridgeID), <<"">>), - {ok, 403, Res} = request(post, operation_path(node, restart, BridgeID), <<"">>), + {ok, 400, Res} = request(post, operation_path(node, restart, BridgeID), <<"">>), ?assertEqual( - <<"{\"code\":\"FORBIDDEN_REQUEST\",\"message\":\"forbidden operation: bridge disabled\"}">>, + <<"{\"code\":\"BAD_REQUEST\",\"message\":\"Forbidden operation, bridge not enabled\"}">>, Res ), From 39e1cf95021ee196e5b5ec108a3a08276c186899 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 2 Mar 2023 09:55:38 +0100 Subject: [PATCH 32/96] fix(emqx_bridge): let it crash instead of 400 on failed reset --- apps/emqx_bridge/src/emqx_bridge_api.erl | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index 708c3ac0b..871def0d6 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -386,7 +386,6 @@ schema("/bridges/:id/metrics/reset") -> parameters => [param_path_id()], responses => #{ 204 => <<"Reset success">>, - 400 => error_schema(['BAD_REQUEST'], "RPC Call Failed"), 404 => error_schema('NOT_FOUND', "Bridge not found") } } @@ -541,13 +540,11 @@ schema("/bridges_probe") -> '/bridges/:id/metrics/reset'(put, #{bindings := #{id := Id}}) -> ?TRY_PARSE_ID( Id, - case - emqx_bridge_resource:reset_metrics( + begin + ok = emqx_bridge_resource:reset_metrics( emqx_bridge_resource:resource_id(BridgeType, BridgeName) - ) - of - ok -> {204}; - Reason -> {400, error_msg('BAD_REQUEST', Reason)} + ), + {204} end ). From 57ea098d90f7d74f2a63ce7232f62f206873895e Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 2 Mar 2023 11:30:38 +0100 Subject: [PATCH 33/96] chore: add changelog --- changes/ce/fix-10056.en.md | 1 + changes/ce/fix-10056.zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/ce/fix-10056.en.md create mode 100644 changes/ce/fix-10056.zh.md diff --git a/changes/ce/fix-10056.en.md b/changes/ce/fix-10056.en.md new file mode 100644 index 000000000..7a119df20 --- /dev/null +++ b/changes/ce/fix-10056.en.md @@ -0,0 +1 @@ +`/bridges` API: return `400` instead of `403` in case of inconsistency in application logic either because bridge is about to be deleted but active rules still depend on it or an operation (start|stop|restart) is called but the bridge is not enabled. diff --git a/changes/ce/fix-10056.zh.md b/changes/ce/fix-10056.zh.md new file mode 100644 index 000000000..4d3317165 --- /dev/null +++ b/changes/ce/fix-10056.zh.md @@ -0,0 +1 @@ +`/bridges` API:在应用逻辑不一致的情况下,返回`400'而不是`403',因为桥即将被删除,但活动规则仍然依赖于它,或者调用了一个操作(启动|停止|重新启动),但桥没有被启用。 From 8bdef1300b60c4de1ad7466a1dcfd8dc4c427234 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 2 Mar 2023 12:16:17 +0100 Subject: [PATCH 34/96] style: fix punctuation changes/ce/fix-10056.en.md Co-authored-by: ieQu1 <99872536+ieQu1@users.noreply.github.com> --- changes/ce/fix-10056.en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changes/ce/fix-10056.en.md b/changes/ce/fix-10056.en.md index 7a119df20..ab9b980e8 100644 --- a/changes/ce/fix-10056.en.md +++ b/changes/ce/fix-10056.en.md @@ -1 +1 @@ -`/bridges` API: return `400` instead of `403` in case of inconsistency in application logic either because bridge is about to be deleted but active rules still depend on it or an operation (start|stop|restart) is called but the bridge is not enabled. +`/bridges` API: return `400` instead of `403` in case of inconsistency in the application logic either because bridge is about to be deleted, but active rules still depend on it, or an operation (start|stop|restart) is called, but the bridge is not enabled. From 67acdf088832be4f535b0b91bef7df14c68deed6 Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Tue, 17 Jan 2023 14:07:56 +0100 Subject: [PATCH 35/96] feat: add clickhouse database bridge This commit adds a Clickhouse bridge to EMQX 5. The bridge is similar to the Clickhouse bridge in the 4.4, but adds the possibility to use different formats (such as JSON) for values to be inserted. --- .ci/docker-compose-file/clickhouse/config.xml | 678 ++++++++++++++++++ .ci/docker-compose-file/clickhouse/users.xml | 110 +++ .../docker-compose-clickhouse.yaml | 16 + apps/emqx_bridge/src/emqx_bridge.app.src | 2 +- apps/emqx_bridge/src/emqx_bridge.erl | 3 +- .../emqx_connector/include/emqx_connector.hrl | 1 + .../src/emqx_resource_buffer_worker.erl | 9 + lib-ee/emqx_ee_bridge/docker-ct | 1 + .../i18n/emqx_ee_bridge_clickhouse.conf | 109 +++ lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl | 27 +- .../src/emqx_ee_bridge_clickhouse.erl | 143 ++++ .../test/emqx_ee_bridge_clickhouse_SUITE.erl | 325 +++++++++ lib-ee/emqx_ee_connector/docker-ct | 1 + .../i18n/emqx_ee_connector_clickhouse.conf | 15 + lib-ee/emqx_ee_connector/rebar.config | 1 + .../src/emqx_ee_connector.app.src | 3 +- .../src/emqx_ee_connector_clickhouse.erl | 444 ++++++++++++ .../test/ee_connector_clickhouse_SUITE.erl | 198 +++++ scripts/ct/run.sh | 3 + 19 files changed, 2082 insertions(+), 7 deletions(-) create mode 100644 .ci/docker-compose-file/clickhouse/config.xml create mode 100644 .ci/docker-compose-file/clickhouse/users.xml create mode 100644 .ci/docker-compose-file/docker-compose-clickhouse.yaml create mode 100644 lib-ee/emqx_ee_bridge/i18n/emqx_ee_bridge_clickhouse.conf create mode 100644 lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_clickhouse.erl create mode 100644 lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_clickhouse_SUITE.erl create mode 100644 lib-ee/emqx_ee_connector/i18n/emqx_ee_connector_clickhouse.conf create mode 100644 lib-ee/emqx_ee_connector/src/emqx_ee_connector_clickhouse.erl create mode 100644 lib-ee/emqx_ee_connector/test/ee_connector_clickhouse_SUITE.erl diff --git a/.ci/docker-compose-file/clickhouse/config.xml b/.ci/docker-compose-file/clickhouse/config.xml new file mode 100644 index 000000000..085f92a12 --- /dev/null +++ b/.ci/docker-compose-file/clickhouse/config.xml @@ -0,0 +1,678 @@ + + + + + + trace + /var/log/clickhouse-server/clickhouse-server.log + /var/log/clickhouse-server/clickhouse-server.err.log + 1000M + 10 + + + + + + + + + + + + + + false + + false + + + https://6f33034cfe684dd7a3ab9875e57b1c8d@o388870.ingest.sentry.io/5226277 + + + + 8123 + 9000 + 9004 + + + + + + + /etc/clickhouse-server/server.crt + /etc/clickhouse-server/server.key + + /etc/clickhouse-server/dhparam.pem + none + true + true + sslv2,sslv3 + true + + + + true + true + sslv2,sslv3 + true + + + + RejectCertificateHandler + + + + + + + + + 9009 + + + + + + + + + + + + + + + + + + + + 4096 + 3 + + + 100 + + + 0 + + + + 10000 + + + 10 + + + 4194304 + + + 0 + + + + + + 8589934592 + + + 5368709120 + + + + /var/lib/clickhouse/ + + + /var/lib/clickhouse/tmp/ + + + + + + /var/lib/clickhouse/user_files/ + + + /var/lib/clickhouse/access/ + + + /etc/clickhouse-server/users.xml + + + default + + + + + + default + + + + + + + + + true + + + + + + + + + + + + localhost + 9000 + + + + + + + + + localhost + 9000 + + + + + localhost + 9000 + + + + + + + 127.0.0.1 + 9000 + + + + + 127.0.0.2 + 9000 + + + + + + + localhost + 9440 + 1 + + + + + + + localhost + 9000 + + + + + localhost + 1 + + + + + + + + + + + + + + + + + + + + + + + + 3600 + + + + 3600 + + + 60 + + + + + + + + + + + + + system + query_log
+ + toYYYYMM(event_date) + + + + + 7500 +
+ + + + system + trace_log
+ + toYYYYMM(event_date) + 7500 +
+ + + + system + query_thread_log
+ toYYYYMM(event_date) + 7500 +
+ + + + + + + + system + metric_log
+ 7500 + 1000 +
+ + + + system + asynchronous_metric_log
+ + 60000 +
+ + + + + + + + + + + + *_dictionary.xml + + + + + + + + + + /clickhouse/task_queue/ddl + + + + + + + + + + + + + + + + click_cost + any + + 0 + 3600 + + + 86400 + 60 + + + + max + + 0 + 60 + + + 3600 + 300 + + + 86400 + 3600 + + + + + + /var/lib/clickhouse/format_schemas/ + + + + + + + +
diff --git a/.ci/docker-compose-file/clickhouse/users.xml b/.ci/docker-compose-file/clickhouse/users.xml new file mode 100644 index 000000000..ced773355 --- /dev/null +++ b/.ci/docker-compose-file/clickhouse/users.xml @@ -0,0 +1,110 @@ + + + + + + + + 10000000000 + + + 0 + + + random + + + + + 1 + + + + + + + + + public + + + + ::/0 + + + + default + + + default + + + + + + + + + + + + + + 3600 + + + 0 + 0 + 0 + 0 + 0 + + + + diff --git a/.ci/docker-compose-file/docker-compose-clickhouse.yaml b/.ci/docker-compose-file/docker-compose-clickhouse.yaml new file mode 100644 index 000000000..118f83dc1 --- /dev/null +++ b/.ci/docker-compose-file/docker-compose-clickhouse.yaml @@ -0,0 +1,16 @@ +version: '3.9' + +services: + clickhouse: + container_name: clickhouse + image: clickhouse/clickhouse-server:23.1.2.9-alpine + restart: always + volumes: + - ./clickhouse/users.xml:/etc/clickhouse-server/users.xml + - ./clickhouse/config.xml:/etc/clickhouse-server/config.d/config.xml + expose: + - "8123" + ports: + - "8123:8123" + networks: + - emqx_bridge diff --git a/apps/emqx_bridge/src/emqx_bridge.app.src b/apps/emqx_bridge/src/emqx_bridge.app.src index 0d4b552ee..0ec246320 100644 --- a/apps/emqx_bridge/src/emqx_bridge.app.src +++ b/apps/emqx_bridge/src/emqx_bridge.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_bridge, [ {description, "EMQX bridges"}, - {vsn, "0.1.11"}, + {vsn, "0.1.12"}, {registered, []}, {mod, {emqx_bridge_app, []}}, {applications, [ diff --git a/apps/emqx_bridge/src/emqx_bridge.erl b/apps/emqx_bridge/src/emqx_bridge.erl index dc0a96690..196338336 100644 --- a/apps/emqx_bridge/src/emqx_bridge.erl +++ b/apps/emqx_bridge/src/emqx_bridge.erl @@ -57,7 +57,8 @@ T == influxdb_api_v2; T == redis_single; T == redis_sentinel; - T == redis_cluster + T == redis_cluster; + T == clickhouse ). load() -> diff --git a/apps/emqx_connector/include/emqx_connector.hrl b/apps/emqx_connector/include/emqx_connector.hrl index 82c946cfc..cdb6ddd92 100644 --- a/apps/emqx_connector/include/emqx_connector.hrl +++ b/apps/emqx_connector/include/emqx_connector.hrl @@ -23,6 +23,7 @@ -define(MONGO_DEFAULT_PORT, 27017). -define(REDIS_DEFAULT_PORT, 6379). -define(PGSQL_DEFAULT_PORT, 5432). +-define(CLICKHOUSE_DEFAULT_PORT, 8123). -define(AUTO_RECONNECT_INTERVAL, 2). diff --git a/apps/emqx_resource/src/emqx_resource_buffer_worker.erl b/apps/emqx_resource/src/emqx_resource_buffer_worker.erl index a8ae4454d..6ddfb5af2 100644 --- a/apps/emqx_resource/src/emqx_resource_buffer_worker.erl +++ b/apps/emqx_resource/src/emqx_resource_buffer_worker.erl @@ -917,6 +917,15 @@ do_call_query(_QM, _Id, _Index, _Ref, _Query, _QueryOpts, _Data) -> %% return `{error, {recoverable_error, Reason}}` EXPR catch + %% For convenience and to make the code in the callbacks cleaner an + %% error exception with the two following formats are translated to the + %% corresponding return values. The receiver of the return values + %% recognizes these special return formats and use them to decided if a + %% request should be retried. + error:{unrecoverable_error, Msg} -> + {error, {unrecoverable_error, Msg}}; + error:{recoverable_error, Msg} -> + {error, {recoverable_error, Msg}}; ERR:REASON:STACKTRACE -> ?RESOURCE_ERROR(exception, #{ name => NAME, diff --git a/lib-ee/emqx_ee_bridge/docker-ct b/lib-ee/emqx_ee_bridge/docker-ct index 967faa343..91a937b5c 100644 --- a/lib-ee/emqx_ee_bridge/docker-ct +++ b/lib-ee/emqx_ee_bridge/docker-ct @@ -8,3 +8,4 @@ redis redis_cluster pgsql tdengine +clickhouse diff --git a/lib-ee/emqx_ee_bridge/i18n/emqx_ee_bridge_clickhouse.conf b/lib-ee/emqx_ee_bridge/i18n/emqx_ee_bridge_clickhouse.conf new file mode 100644 index 000000000..c38365d81 --- /dev/null +++ b/lib-ee/emqx_ee_bridge/i18n/emqx_ee_bridge_clickhouse.conf @@ -0,0 +1,109 @@ +emqx_ee_bridge_clickhouse { + + local_topic { + desc { + en: """The MQTT topic filter to be forwarded to Clickhouse. All MQTT 'PUBLISH' messages with the topic +matching the local_topic will be forwarded.
+NOTE: if this bridge is used as the action of a rule (EMQX rule engine), and also local_topic is +configured, then both the data got from the rule and the MQTT messages that match local_topic +will be forwarded. +""" + zh: """发送到 'local_topic' 的消息都会转发到 Clickhouse。
+注意:如果这个 Bridge 被用作规则(EMQX 规则引擎)的输出,同时也配置了 'local_topic' ,那么这两部分的消息都会被转发。 +""" + } + label { + en: "Local Topic" + zh: "本地 Topic" + } + } + sql_template { + desc { + en: """SQL Template. The template string can contain placeholders +for message metadata and payload field. The placeholders are inserted +without any checking and special formatting so it is important to +ensure that the inserted values are formatted and escaped correctly.""" + zh: + """SQL模板。模板字符串可以包含消息元数据和有效载荷字段的占位符。占位符 +的插入不需要任何检查和特殊格式化,因此必须确保插入的数值格式化和转义正确。模板字符串可以包含占位符 +模板字符串可以包含消息元数据和有效载荷字段的占位符。这些占位符被插入 +所以必须确保插入的值的格式正确。因此,确保插入的值格式化和转义正确是非常重要的。模板字符串可以包含占位符 +模板字符串可以包含消息元数据和有效载荷字段的占位符。这些占位符被插入 +所以必须确保插入的值的格式正确。确保插入的值被正确地格式化和转义。""" + } + label { + en: "SQL Template" + zh: "SQL 模板" + } + } + batch_value_separator { + desc { + en: """The bridge repeats what comes after the VALUES or FORMAT FormatType in the +SQL template to form a batch request. The value specified with +this parameter will be inserted between the values. The default +value ',' works for the VALUES format but other values +might be needed if you specify some other format with the +clickhouse FORMAT syntax. + +See https://clickhouse.com/docs/en/sql-reference/statements/insert-into/ and +https://clickhouse.com/docs/en/interfaces/formats#formats for more information about +the format syntax and the available formats.""" + zh: """桥接会重复 VALUES 或 FORMAT 格式类型之后的内容。中 VALUES 或 +FORMAT FormatType 后面的内容,以形成一个批处理请求。用这个参数指定的值 +这个参数指定的值将被插入到这些值之间。默认的 +默认值','适用于VALUES格式,但是如果你指定了其他的格式,可能需要其他的值。可能需要其他值,如果你用 +"clickhouse FORMAT "语法指定其他格式。语法指定其他格式。 + +参见https://clickhouse.com/docs/en/sql-reference/statements/insert-into/ 和 +https://clickhouse.com/docs/en/interfaces/formats#formats 了解更多关于 +格式语法和可用的格式。""" + } + label { + en: "Batch Value Separator" + zh: "批量值分离器" + } + } + config_enable { + desc { + en: """Enable or disable this bridge""" + zh: """启用/禁用桥接""" + } + label { + en: "Enable Or Disable Bridge" + zh: "启用/禁用桥接" + } + } + + desc_config { + desc { + en: """Configuration for an Clickhouse bridge.""" + zh: """Clickhouse 桥接配置""" + } + label: { + en: "Clickhouse Bridge Configuration" + zh: "Clickhouse 桥接配置" + } + } + + desc_type { + desc { + en: """The Bridge Type""" + zh: """Bridge 类型""" + } + label { + en: "Bridge Type" + zh: "桥接类型" + } + } + + desc_name { + desc { + en: """Bridge name.""" + zh: """桥接名字""" + } + label { + en: "Bridge Name" + zh: "桥接名字" + } + } +} diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl index 1a358fdfe..dc7ee2be6 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl +++ b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl @@ -29,7 +29,8 @@ api_schemas(Method) -> ref(emqx_ee_bridge_redis, Method ++ "_cluster"), ref(emqx_ee_bridge_timescale, Method), ref(emqx_ee_bridge_matrix, Method), - ref(emqx_ee_bridge_tdengine, Method) + ref(emqx_ee_bridge_tdengine, Method), + ref(emqx_ee_bridge_clickhouse, Method) ]. schema_modules() -> @@ -44,7 +45,8 @@ schema_modules() -> emqx_ee_bridge_pgsql, emqx_ee_bridge_timescale, emqx_ee_bridge_matrix, - emqx_ee_bridge_tdengine + emqx_ee_bridge_tdengine, + emqx_ee_bridge_clickhouse ]. examples(Method) -> @@ -75,7 +77,8 @@ resource_type(redis_cluster) -> emqx_ee_connector_redis; resource_type(pgsql) -> emqx_connector_pgsql; resource_type(timescale) -> emqx_connector_pgsql; resource_type(matrix) -> emqx_connector_pgsql; -resource_type(tdengine) -> emqx_ee_connector_tdengine. +resource_type(tdengine) -> emqx_ee_connector_tdengine; +resource_type(clickhouse) -> emqx_ee_connector_clickhouse. fields(bridges) -> [ @@ -119,7 +122,8 @@ fields(bridges) -> required => false } )} - ] ++ mongodb_structs() ++ influxdb_structs() ++ redis_structs() ++ pgsql_structs(). + ] ++ mongodb_structs() ++ influxdb_structs() ++ redis_structs() ++ pgsql_structs() ++ + clickhouse_structs(). mongodb_structs() -> [ @@ -183,3 +187,18 @@ pgsql_structs() -> {matrix, <<"Matrix">>} ] ]. + +clickhouse_structs() -> + [ + {Type, + mk( + hoconsc:map(name, ref(emqx_ee_bridge_clickhouse, "config")), + #{ + desc => <>, + required => false + } + )} + || {Type, Name} <- [ + {clickhouse, <<"Clickhouse">>} + ] + ]. diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_clickhouse.erl b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_clickhouse.erl new file mode 100644 index 000000000..9e03aca4a --- /dev/null +++ b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_clickhouse.erl @@ -0,0 +1,143 @@ +%%-------------------------------------------------------------------- +%% Copyright (c) 2023 EMQ Technologies Co., Ltd. All Rights Reserved. +%%-------------------------------------------------------------------- +-module(emqx_ee_bridge_clickhouse). + +-include_lib("emqx_bridge/include/emqx_bridge.hrl"). +-include_lib("typerefl/include/types.hrl"). +-include_lib("hocon/include/hoconsc.hrl"). +-include_lib("emqx_resource/include/emqx_resource.hrl"). + +-import(hoconsc, [mk/2, enum/1, ref/2]). + +-export([ + conn_bridge_examples/1 +]). + +-export([ + namespace/0, + roots/0, + fields/1, + desc/1 +]). + +-define(DEFAULT_SQL, + <<"INSERT INTO mqtt_test(payload, arrived) VALUES ('${payload}', ${timestamp})">> +). + +-define(DEFAULT_BATCH_VALUE_SEPARATOR, <<", ">>). + +%% ------------------------------------------------------------------------------------------------- +%% Callback used by HTTP API +%% ------------------------------------------------------------------------------------------------- + +conn_bridge_examples(Method) -> + [ + #{ + <<"clickhouse">> => #{ + summary => <<"Clickhouse Bridge">>, + value => values(Method, "clickhouse") + } + } + ]. + +values(get, Type) -> + maps:merge(values(post, Type), ?METRICS_EXAMPLE); +values(post, Type) -> + #{ + enable => true, + type => Type, + name => <<"foo">>, + server => <<"127.0.0.1:8123">>, + database => <<"mqtt">>, + pool_size => 8, + username => <<"default">>, + password => <<"public">>, + sql => ?DEFAULT_SQL, + batch_value_separator => ?DEFAULT_BATCH_VALUE_SEPARATOR, + local_topic => <<"local/topic/#">>, + resource_opts => #{ + worker_pool_size => 8, + health_check_interval => ?HEALTHCHECK_INTERVAL_RAW, + auto_restart_interval => ?AUTO_RESTART_INTERVAL_RAW, + batch_size => ?DEFAULT_BATCH_SIZE, + batch_time => ?DEFAULT_BATCH_TIME, + query_mode => async, + max_queue_bytes => ?DEFAULT_QUEUE_SIZE + } + }; +values(put, Type) -> + values(post, Type). + +%% ------------------------------------------------------------------------------------------------- +%% Hocon Schema Definitions +%% ------------------------------------------------------------------------------------------------- + +namespace() -> "bridge_clickhouse". + +roots() -> []. + +fields("config") -> + [ + {enable, mk(boolean(), #{desc => ?DESC("config_enable"), default => true})}, + {sql, + mk( + binary(), + #{desc => ?DESC("sql_template"), default => ?DEFAULT_SQL, format => <<"sql">>} + )}, + {batch_value_separator, + mk( + binary(), + #{desc => ?DESC("batch_value_separator"), default => ?DEFAULT_BATCH_VALUE_SEPARATOR} + )}, + {local_topic, + mk( + binary(), + #{desc => ?DESC("local_topic"), default => undefined} + )}, + {resource_opts, + mk( + ref(?MODULE, "creation_opts"), + #{ + required => false, + default => #{}, + desc => ?DESC(emqx_resource_schema, <<"resource_opts">>) + } + )} + ] ++ + emqx_ee_connector_clickhouse:fields(config); +fields("creation_opts") -> + Opts = emqx_resource_schema:fields("creation_opts"), + [O || {Field, _} = O <- Opts, not is_hidden_opts(Field)]; +fields("post") -> + fields("post", clickhouse); +fields("put") -> + fields("config"); +fields("get") -> + emqx_bridge_schema:status_fields() ++ fields("post"). + +fields("post", Type) -> + [type_field(Type), name_field() | fields("config")]. + +desc("config") -> + ?DESC("desc_config"); +desc(Method) when Method =:= "get"; Method =:= "put"; Method =:= "post" -> + ["Configuration for Clickhouse using `", string:to_upper(Method), "` method."]; +desc("creation_opts" = Name) -> + emqx_resource_schema:desc(Name); +desc(_) -> + undefined. + +%% ------------------------------------------------------------------------------------------------- +%% internal +%% ------------------------------------------------------------------------------------------------- +is_hidden_opts(Field) -> + lists:member(Field, [ + async_inflight_window + ]). + +type_field(Type) -> + {type, mk(enum([Type]), #{required => true, desc => ?DESC("desc_type")})}. + +name_field() -> + {name, mk(binary(), #{required => true, desc => ?DESC("desc_name")})}. diff --git a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_clickhouse_SUITE.erl b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_clickhouse_SUITE.erl new file mode 100644 index 000000000..6d4762882 --- /dev/null +++ b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_clickhouse_SUITE.erl @@ -0,0 +1,325 @@ +%%-------------------------------------------------------------------- +%% Copyright (c) 2022-2023 EMQ Technologies Co., Ltd. All Rights Reserved. +%%-------------------------------------------------------------------- + +-module(emqx_ee_bridge_clickhouse_SUITE). + +-compile(nowarn_export_all). +-compile(export_all). + +-define(CLICKHOUSE_HOST, "clickhouse"). +-define(CLICKHOUSE_RESOURCE_MOD, emqx_ee_connector_clickhouse). +-include_lib("emqx_connector/include/emqx_connector.hrl"). + +%% See comment in +%% lib-ee/emqx_ee_connector/test/ee_connector_clickhouse_SUITE.erl for how to +%% run this without bringing up the whole CI infrastucture + +%%------------------------------------------------------------------------------ +%% Common Test Setup, Teardown and Testcase List +%%------------------------------------------------------------------------------ + +init_per_suite(Config) -> + case + emqx_common_test_helpers:is_tcp_server_available(?CLICKHOUSE_HOST, ?CLICKHOUSE_DEFAULT_PORT) + of + true -> + emqx_common_test_helpers:render_and_load_app_config(emqx_conf), + ok = emqx_common_test_helpers:start_apps([emqx_conf, emqx_bridge]), + ok = emqx_connector_test_helpers:start_apps([emqx_resource]), + {ok, _} = application:ensure_all_started(emqx_connector), + {ok, _} = application:ensure_all_started(emqx_ee_connector), + {ok, _} = application:ensure_all_started(emqx_ee_bridge), + snabbkaffe:fix_ct_logging(), + %% Create the db table + Conn = start_clickhouse_connection(), + % erlang:monitor,sb + {ok, _, _} = clickhouse:query(Conn, sql_create_database(), #{}), + {ok, _, _} = clickhouse:query(Conn, sql_create_table(), []), + clickhouse:query(Conn, sql_find_key(42), []), + [{clickhouse_connection, Conn} | Config]; + false -> + case os:getenv("IS_CI") of + "yes" -> + throw(no_clickhouse); + _ -> + {skip, no_clickhouse} + end + end. + +start_clickhouse_connection() -> + %% Start clickhouse connector in sub process so that it does not go + %% down with the process that is calling init_per_suite + InitPerSuiteProcess = self(), + erlang:spawn( + fun() -> + {ok, Conn} = + clickhouse:start_link([ + {url, clickhouse_url()}, + {user, <<"default">>}, + {key, "public"}, + {pool, tmp_pool} + ]), + InitPerSuiteProcess ! {clickhouse_connection, Conn}, + Ref = erlang:monitor(process, Conn), + receive + {'DOWN', Ref, process, _, _} -> + erlang:display(helper_down), + ok + end + end + ), + receive + {clickhouse_connection, C} -> C + end. + +end_per_suite(Config) -> + ClickhouseConnection = proplists:get_value(clickhouse_connection, Config), + clickhouse:stop(ClickhouseConnection), + ok = emqx_common_test_helpers:stop_apps([emqx_conf]), + ok = emqx_connector_test_helpers:stop_apps([emqx_resource]), + _ = application:stop(emqx_connector), + _ = application:stop(emqx_ee_connector), + _ = application:stop(emqx_bridge). + +init_per_testcase(_, Config) -> + reset_table(Config), + Config. + +end_per_testcase(_, Config) -> + reset_table(Config), + ok. + +all() -> + emqx_common_test_helpers:all(?MODULE). + +%%------------------------------------------------------------------------------ +%% Helper functions for test cases +%%------------------------------------------------------------------------------ + +sql_insert_template_for_bridge() -> + "INSERT INTO mqtt_test(key, data, arrived) VALUES " + "(${key}, '${data}', ${timestamp})". + +sql_insert_template_for_bridge_json() -> + "INSERT INTO mqtt_test(key, data, arrived) FORMAT JSONCompactEachRow " + "[${key}, \\\"${data}\\\", ${timestamp}]". + +sql_create_table() -> + "CREATE TABLE IF NOT EXISTS mqtt.mqtt_test (key BIGINT, data String, arrived BIGINT) ENGINE = Memory". + +sql_find_key(Key) -> + io_lib:format("SELECT key FROM mqtt.mqtt_test WHERE key = ~p", [Key]). + +sql_find_all_keys() -> + "SELECT key FROM mqtt.mqtt_test". + +sql_drop_table() -> + "DROP TABLE IF EXISTS mqtt.mqtt_test". + +sql_create_database() -> + "CREATE DATABASE IF NOT EXISTS mqtt". + +clickhouse_url() -> + erlang:iolist_to_binary([ + <<"http://">>, + ?CLICKHOUSE_HOST, + ":", + erlang:integer_to_list(?CLICKHOUSE_DEFAULT_PORT) + ]). + +clickhouse_config(Config) -> + SQL = maps:get(sql, Config, sql_insert_template_for_bridge()), + BatchSeparator = maps:get(batch_value_separator, Config, <<", ">>), + BatchSize = maps:get(batch_size, Config, 1), + BatchTime = maps:get(batch_time_ms, Config, 0), + EnableBatch = maps:get(enable_batch, Config, true), + Name = atom_to_binary(?MODULE), + URL = clickhouse_url(), + ConfigString = + io_lib:format( + "bridges.clickhouse.~s {\n" + " enable = true\n" + " url = \"~s\"\n" + " database = \"mqtt\"\n" + " sql = \"~s\"\n" + " batch_value_separator = \"~s\"" + " resource_opts = {\n" + " enable_batch = ~w\n" + " batch_size = ~b\n" + " batch_time = ~bms\n" + " }\n" + "}\n", + [ + Name, + URL, + SQL, + BatchSeparator, + EnableBatch, + BatchSize, + BatchTime + ] + ), + ct:pal(ConfigString), + parse_and_check(ConfigString, <<"clickhouse">>, Name). + +parse_and_check(ConfigString, BridgeType, Name) -> + {ok, RawConf} = hocon:binary(ConfigString, #{format => map}), + hocon_tconf:check_plain(emqx_bridge_schema, RawConf, #{required => false, atom_key => false}), + #{<<"bridges">> := #{BridgeType := #{Name := RetConfig}}} = RawConf, + RetConfig. + +make_bridge(Config) -> + Type = <<"clickhouse">>, + Name = atom_to_binary(?MODULE), + BridgeConfig = clickhouse_config(Config), + {ok, _} = emqx_bridge:create( + Type, + Name, + BridgeConfig + ), + emqx_bridge_resource:bridge_id(Type, Name). + +delete_bridge() -> + Type = <<"clickhouse">>, + Name = atom_to_binary(?MODULE), + {ok, _} = emqx_bridge:remove(Type, Name), + ok. + +reset_table(Config) -> + ClickhouseConnection = proplists:get_value(clickhouse_connection, Config), + {ok, _, _} = clickhouse:query(ClickhouseConnection, sql_drop_table(), []), + {ok, _, _} = clickhouse:query(ClickhouseConnection, sql_create_table(), []), + ok. + +check_key_in_clickhouse(AttempsLeft, Key, Config) -> + ClickhouseConnection = proplists:get_value(clickhouse_connection, Config), + check_key_in_clickhouse(AttempsLeft, Key, none, ClickhouseConnection). + +check_key_in_clickhouse(Key, Config) -> + ClickhouseConnection = proplists:get_value(clickhouse_connection, Config), + check_key_in_clickhouse(30, Key, none, ClickhouseConnection). + +check_key_in_clickhouse(0, Key, PrevResult, _) -> + ct:fail("Expected ~p in database but got ~s", [Key, PrevResult]); +check_key_in_clickhouse(AttempsLeft, Key, _, ClickhouseConnection) -> + {ok, 200, ResultString} = clickhouse:query(ClickhouseConnection, sql_find_key(Key), []), + Expected = erlang:integer_to_binary(Key), + case iolist_to_binary(string:trim(ResultString)) of + Expected -> + ok; + SomethingElse -> + timer:sleep(100), + check_key_in_clickhouse(AttempsLeft - 1, Key, SomethingElse, ClickhouseConnection) + end. + +%%------------------------------------------------------------------------------ +%% Test Cases +%%------------------------------------------------------------------------------ + +t_make_delete_bridge(_Config) -> + make_bridge(#{}), + %% Check that the new brige is in the list of bridges + Bridges = emqx_bridge:list(), + Name = atom_to_binary(?MODULE), + IsRightName = + fun + (#{name := BName}) when BName =:= Name -> + true; + (_) -> + false + end, + true = lists:any(IsRightName, Bridges), + delete_bridge(), + BridgesAfterDelete = emqx_bridge:list(), + false = lists:any(IsRightName, BridgesAfterDelete), + ok. + +t_send_message_query(Config) -> + BridgeID = make_bridge(#{enable_batch => false}), + Key = 42, + Payload = #{key => Key, data => <<"clickhouse_data">>, timestamp => 10000}, + %% This will use the SQL template included in the bridge + emqx_bridge:send_message(BridgeID, Payload), + %% Check that the data got to the database + check_key_in_clickhouse(Key, Config), + delete_bridge(), + ok. + +t_send_simple_batch(Config) -> + send_simple_batch_helper(Config, #{}). + +t_send_simple_batch_alternative_format(Config) -> + send_simple_batch_helper( + Config, + #{ + sql => sql_insert_template_for_bridge_json(), + batch_value_separator => <<"">> + } + ). + +send_simple_batch_helper(Config, BridgeConfigExt) -> + BridgeConf = maps:merge( + #{ + batch_size => 100, + enable_batch => true + }, + BridgeConfigExt + ), + BridgeID = make_bridge(BridgeConf), + Key = 42, + Payload = #{key => Key, data => <<"clickhouse_data">>, timestamp => 10000}, + %% This will use the SQL template included in the bridge + emqx_bridge:send_message(BridgeID, Payload), + check_key_in_clickhouse(Key, Config), + delete_bridge(), + ok. + +t_heavy_batching(Config) -> + heavy_batching_helper(Config, #{}). + +t_heavy_batching_alternative_format(Config) -> + heavy_batching_helper( + Config, + #{ + sql => sql_insert_template_for_bridge_json(), + batch_value_separator => <<"">> + } + ). + +heavy_batching_helper(Config, BridgeConfigExt) -> + ClickhouseConnection = proplists:get_value(clickhouse_connection, Config), + NumberOfMessages = 10000, + BridgeConf = maps:merge( + #{ + batch_size => 743, + batch_time_ms => 50, + enable_batch => true + }, + BridgeConfigExt + ), + BridgeID = make_bridge(BridgeConf), + SendMessageKey = fun(Key) -> + Payload = #{ + key => Key, + data => <<"clickhouse_data">>, + timestamp => 10000 + }, + emqx_bridge:send_message(BridgeID, Payload) + end, + [SendMessageKey(Key) || Key <- lists:seq(1, NumberOfMessages)], + % Wait until the last message is in clickhouse + %% The delay between attempts is 100ms so 150 attempts means 15 seconds + check_key_in_clickhouse(_AttemptsToFindKey = 150, NumberOfMessages, Config), + %% In case the messages are not sent in order (could happend with multiple buffer workers) + timer:sleep(1000), + {ok, 200, ResultString1} = clickhouse:query(ClickhouseConnection, sql_find_all_keys(), []), + ResultString2 = iolist_to_binary(string:trim(ResultString1)), + KeyStrings = string:lexemes(ResultString2, "\n"), + Keys = [erlang:binary_to_integer(iolist_to_binary(K)) || K <- KeyStrings], + KeySet = maps:from_keys(Keys, true), + NumberOfMessages = maps:size(KeySet), + CheckKey = fun(Key) -> maps:get(Key, KeySet, false) end, + true = lists:all(CheckKey, lists:seq(1, NumberOfMessages)), + delete_bridge(), + ok. diff --git a/lib-ee/emqx_ee_connector/docker-ct b/lib-ee/emqx_ee_connector/docker-ct index ef579c036..3db090939 100644 --- a/lib-ee/emqx_ee_connector/docker-ct +++ b/lib-ee/emqx_ee_connector/docker-ct @@ -1,2 +1,3 @@ toxiproxy influxdb +clickhouse diff --git a/lib-ee/emqx_ee_connector/i18n/emqx_ee_connector_clickhouse.conf b/lib-ee/emqx_ee_connector/i18n/emqx_ee_connector_clickhouse.conf new file mode 100644 index 000000000..1e07c29b4 --- /dev/null +++ b/lib-ee/emqx_ee_connector/i18n/emqx_ee_connector_clickhouse.conf @@ -0,0 +1,15 @@ + +emqx_ee_connector_clickhouse { + + base_url { + desc { + en: """The HTTP URL to the Clickhouse server that you want to connect to (for example http://myhostname:8123)""" + zh: """你想连接到的Clickhouse服务器的HTTP URL(例如http://myhostname:8123)。""" + } + label: { + en: "URL to clickhouse server" + zh: "到clickhouse服务器的URL" + } + } + +} diff --git a/lib-ee/emqx_ee_connector/rebar.config b/lib-ee/emqx_ee_connector/rebar.config index d758e1424..bcf9508bf 100644 --- a/lib-ee/emqx_ee_connector/rebar.config +++ b/lib-ee/emqx_ee_connector/rebar.config @@ -3,6 +3,7 @@ {hstreamdb_erl, {git, "https://github.com/hstreamdb/hstreamdb_erl.git", {tag, "0.2.5"}}}, {influxdb, {git, "https://github.com/emqx/influxdb-client-erl", {tag, "1.1.9"}}}, {tdengine, {git, "https://github.com/emqx/tdengine-client-erl", {tag, "0.1.5"}}}, + {clickhouse, {git, "https://github.com/emqx/clickhouse-client-erl", {tag, "0.2"}}}, {emqx, {path, "../../apps/emqx"}} ]}. diff --git a/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src b/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src index 5017abd21..6c9d83bc7 100644 --- a/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src +++ b/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src @@ -9,7 +9,8 @@ influxdb, tdengine, wolff, - brod + brod, + clickhouse ]}, {env, []}, {modules, []}, diff --git a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_clickhouse.erl b/lib-ee/emqx_ee_connector/src/emqx_ee_connector_clickhouse.erl new file mode 100644 index 000000000..b1ad6c787 --- /dev/null +++ b/lib-ee/emqx_ee_connector/src/emqx_ee_connector_clickhouse.erl @@ -0,0 +1,444 @@ +%%-------------------------------------------------------------------- +%% Copyright (c) 2020-2023 EMQ Technologies Co., Ltd. All Rights Reserved. +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%%-------------------------------------------------------------------- + +-module(emqx_ee_connector_clickhouse). + +-include_lib("emqx_connector/include/emqx_connector.hrl"). +-include_lib("emqx_resource/include/emqx_resource.hrl"). +-include_lib("typerefl/include/types.hrl"). +-include_lib("emqx/include/logger.hrl"). +-include_lib("hocon/include/hoconsc.hrl"). +-include_lib("snabbkaffe/include/snabbkaffe.hrl"). + +-behaviour(emqx_resource). + +-import(hoconsc, [mk/2, enum/1, ref/2]). + +%%===================================================================== +%% Exports +%%===================================================================== + +%% Hocon config schema exports +-export([ + roots/0, + fields/1, + values/1 +]). + +%% callbacks for behaviour emqx_resource +-export([ + callback_mode/0, + on_start/2, + on_stop/2, + on_query/3, + on_batch_query/3, + on_get_status/2 +]). + +%% callbacks for ecpool +-export([connect/1]). + +%% Internal exports used to execute code with ecpool worker +-export([ + check_database_status/1, + execute_sql_in_clickhouse_server_using_connection/2 +]). + +%%===================================================================== +%% Types +%%===================================================================== + +-type url() :: emqx_http_lib:uri_map(). +-reflect_type([url/0]). +-typerefl_from_string({url/0, emqx_http_lib, uri_parse}). + +-type templates() :: + #{} + | #{ + send_message_template := term(), + extend_send_message_template := term() + }. + +-type state() :: + #{ + templates := templates(), + poolname := atom() + }. + +-type clickhouse_config() :: map(). + +%%===================================================================== +%% Configuration and default values +%%===================================================================== + +roots() -> + [{config, #{type => hoconsc:ref(?MODULE, config)}}]. + +fields(config) -> + [ + {url, + hoconsc:mk( + url(), + #{ + required => true, + validator => fun + (#{query := _Query}) -> + {error, "There must be no query in the url"}; + (_) -> + ok + end, + desc => ?DESC("base_url") + } + )} + ] ++ emqx_connector_schema_lib:relational_db_fields(). + +values(post) -> + maps:merge(values(put), #{name => <<"connector">>}); +values(get) -> + values(post); +values(put) -> + #{ + database => <<"mqtt">>, + enable => true, + pool_size => 8, + type => clickhouse, + url => <<"http://127.0.0.1:8123">> + }; +values(_) -> + #{}. + +%% =================================================================== +%% Callbacks defined in emqx_resource +%% =================================================================== + +callback_mode() -> always_sync. + +%% ------------------------------------------------------------------- +%% on_start callback and related functions +%% ------------------------------------------------------------------- + +-spec on_start(resource_id(), clickhouse_config()) -> {ok, state()} | {error, _}. + +on_start( + InstanceID, + #{ + url := URL, + database := DB, + pool_size := PoolSize + } = Config +) -> + ?SLOG(info, #{ + msg => "starting_clickhouse_connector", + connector => InstanceID, + config => emqx_misc:redact(Config) + }), + PoolName = emqx_plugin_libs_pool:pool_name(InstanceID), + Options = [ + {url, URL}, + {user, maps:get(username, Config, "default")}, + {key, emqx_secret:wrap(maps:get(password, Config, "public"))}, + {database, DB}, + {auto_reconnect, ?AUTO_RECONNECT_INTERVAL}, + {pool_size, PoolSize}, + {pool, PoolName} + ], + InitState = #{poolname => PoolName}, + try + Templates = prepare_sql_templates(Config), + State = maps:merge(InitState, #{templates => Templates}), + case emqx_plugin_libs_pool:start_pool(PoolName, ?MODULE, Options) of + ok -> + {ok, State}; + {error, Reason} -> + log_start_error(Config, Reason, none), + {error, Reason} + end + catch + _:CatchReason:Stacktrace -> + log_start_error(Config, CatchReason, Stacktrace), + {error, CatchReason} + end. + +log_start_error(Config, Reason, Stacktrace) -> + StacktraceMap = + case Stacktrace of + none -> #{}; + _ -> #{stacktrace => Stacktrace} + end, + LogMessage = + #{ + msg => "clickhouse_connector_start_failed", + error_reason => Reason, + config => emqx_misc:redact(Config) + }, + ?SLOG(info, maps:merge(LogMessage, StacktraceMap)), + ?tp( + clickhouse_connector_start_failed, + #{error => Reason} + ). + +%% Helper functions to prepare SQL tempaltes + +prepare_sql_templates(#{ + sql := Template, + batch_value_separator := Separator +}) -> + InsertTemplate = + emqx_plugin_libs_rule:preproc_tmpl(Template), + BulkExtendInsertTemplate = + prepare_sql_bulk_extend_template(Template, Separator), + #{ + send_message_template => InsertTemplate, + extend_send_message_template => BulkExtendInsertTemplate + }; +prepare_sql_templates(_) -> + %% We don't create any templates if this is a non-bridge connector + #{}. + +prepare_sql_bulk_extend_template(Template, Separator) -> + ValuesTemplate = split_clickhouse_insert_sql(Template), + %% The value part has been extracted + %% Add separator before ValuesTemplate so that one can append it + %% to an insert template + ExtendParamTemplate = iolist_to_binary([Separator, ValuesTemplate]), + emqx_plugin_libs_rule:preproc_tmpl(ExtendParamTemplate). + +%% This function is similar to emqx_plugin_libs_rule:split_insert_sql/1 but can +%% also handle Clickhouse's SQL extension for INSERT statments that allows the +%% user to specify different formats: +%% +%% https://clickhouse.com/docs/en/sql-reference/statements/insert-into/ +%% +split_clickhouse_insert_sql(SQL) -> + ErrorMsg = <<"The SQL template should be an SQL INSERT statement but it is something else.">>, + case + re:split(SQL, "(\\s+(?i:values)|(?i:format\\s+(?:[A-Za-z0-9_])+)\\s+)", [{return, binary}]) + of + [Part1, _, Part3] -> + case string:trim(Part1, leading) of + <<"insert", _/binary>> -> + Part3; + <<"INSERT", _/binary>> -> + Part3; + _ -> + erlang:error(ErrorMsg) + end; + _ -> + erlang:error(ErrorMsg) + end. + +% This is a callback for ecpool which is triggered by the call to +% emqx_plugin_libs_pool:start_pool in on_start/2 + +connect(Options) -> + URL = iolist_to_binary(emqx_http_lib:normalize(proplists:get_value(url, Options))), + User = proplists:get_value(user, Options), + Database = proplists:get_value(database, Options), + Key = emqx_secret:unwrap(proplists:get_value(key, Options)), + Pool = proplists:get_value(pool, Options), + PoolSize = proplists:get_value(pool_size, Options), + FixedOptions = [ + {url, URL}, + {database, Database}, + {user, User}, + {key, Key}, + {pool, Pool}, + {pool_size, PoolSize} + ], + case clickhouse:start_link(FixedOptions) of + {ok, _Conn} = Ok -> + Ok; + {error, Reason} -> + {error, Reason} + end. + +%% ------------------------------------------------------------------- +%% on_stop emqx_resouce callback +%% ------------------------------------------------------------------- + +-spec on_stop(resource_id(), resource_state()) -> term(). + +on_stop(ResourceID, #{poolname := PoolName}) -> + ?SLOG(info, #{ + msg => "stopping clickouse connector", + connector => ResourceID + }), + emqx_plugin_libs_pool:stop_pool(PoolName). + +%% ------------------------------------------------------------------- +%% on_get_status emqx_resouce callback and related functions +%% ------------------------------------------------------------------- + +on_get_status(_ResourceID, #{poolname := Pool} = _State) -> + case + emqx_plugin_libs_pool:health_check_ecpool_workers(Pool, fun ?MODULE:check_database_status/1) + of + true -> + connected; + false -> + connecting + end. + +check_database_status(Connection) -> + clickhouse:status(Connection). + +%% ------------------------------------------------------------------- +%% on_query emqx_resouce callback and related functions +%% ------------------------------------------------------------------- + +-spec on_query + (resource_id(), Request, resource_state()) -> query_result() when + Request :: {RequestType, Data}, + RequestType :: send_message, + Data :: map(); + (resource_id(), Request, resource_state()) -> query_result() when + Request :: {RequestType, SQL}, + RequestType :: sql | query, + SQL :: binary(). + +on_query( + ResourceID, + {RequestType, DataOrSQL}, + #{poolname := PoolName} = State +) -> + ?SLOG(debug, #{ + msg => "clickhouse connector received sql query", + connector => ResourceID, + type => RequestType, + sql => DataOrSQL, + state => State + }), + %% Have we got a query or data to fit into an SQL template? + SimplifiedRequestType = query_type(RequestType), + #{templates := Templates} = State, + SQL = get_sql(SimplifiedRequestType, Templates, DataOrSQL), + ClickhouseResult = execute_sql_in_clickhouse_server(PoolName, SQL), + transform_and_log_clickhouse_result(ClickhouseResult, ResourceID, SQL). + +get_sql(send_message, #{send_message_template := PreparedSQL}, Data) -> + emqx_plugin_libs_rule:proc_tmpl(PreparedSQL, Data); +get_sql(_, _, SQL) -> + SQL. + +query_type(sql) -> + query; +query_type(query) -> + query; +%% Data that goes to bridges use the prepared template +query_type(send_message) -> + send_message. + +%% ------------------------------------------------------------------- +%% on_batch_query emqx_resouce callback and related functions +%% ------------------------------------------------------------------- + +-spec on_batch_query(resource_id(), BatchReq, resource_state()) -> query_result() when + BatchReq :: nonempty_list({'send_message', map()}). + +on_batch_query( + ResourceID, + BatchReq, + State +) -> + %% Currently we only support batch requests with the send_message key + {Keys, ObjectsToInsert} = lists:unzip(BatchReq), + ensure_keys_are_of_type_send_message(Keys), + %% Pick out the SQL template + #{ + templates := Templates, + poolname := PoolName + } = State, + %% Create batch insert SQL statement + SQL = objects_to_sql(ObjectsToInsert, Templates), + %% Do the actual query in the database + ResultFromClickhouse = execute_sql_in_clickhouse_server(PoolName, SQL), + %% Transform the result to a better format + transform_and_log_clickhouse_result(ResultFromClickhouse, ResourceID, SQL). + +ensure_keys_are_of_type_send_message(Keys) -> + case lists:all(fun is_send_message_atom/1, Keys) of + true -> + ok; + false -> + erlang:error( + {unrecoverable_error, + <<"Unexpected type for batch message (Expected send_message)">>} + ) + end. + +is_send_message_atom(send_message) -> + true; +is_send_message_atom(_) -> + false. + +objects_to_sql( + [FirstObject | RemainingObjects] = _ObjectsToInsert, + #{ + send_message_template := InsertTemplate, + extend_send_message_template := BulkExtendInsertTemplate + } +) -> + %% Prepare INSERT-statement and the first row after VALUES + InsertStatementHead = emqx_plugin_libs_rule:proc_tmpl(InsertTemplate, FirstObject), + FormatObjectDataFunction = + fun(Object) -> + emqx_plugin_libs_rule:proc_tmpl(BulkExtendInsertTemplate, Object) + end, + InsertStatementTail = lists:map(FormatObjectDataFunction, RemainingObjects), + CompleteStatement = erlang:iolist_to_binary([InsertStatementHead, InsertStatementTail]), + CompleteStatement; +objects_to_sql(_, _) -> + erlang:error(<<"Templates for bulk insert missing.">>). + +%% ------------------------------------------------------------------- +%% Helper functions that are used by both on_query/3 and on_batch_query/3 +%% ------------------------------------------------------------------- + +%% This function is used by on_query/3 and on_batch_query/3 to send a query to +%% the database server and receive a result +execute_sql_in_clickhouse_server(PoolName, SQL) -> + ecpool:pick_and_do( + PoolName, + {?MODULE, execute_sql_in_clickhouse_server_using_connection, [SQL]}, + no_handover + ). + +execute_sql_in_clickhouse_server_using_connection(Connection, SQL) -> + clickhouse:query(Connection, SQL, []). + +%% This function transforms the result received from clickhouse to something +%% that is a little bit more readable and creates approprieate log messages +transform_and_log_clickhouse_result({ok, 200, <<"">>} = _ClickhouseResult, _, _) -> + snabbkaffe_log_return(ok), + ok; +transform_and_log_clickhouse_result({ok, 200, Data}, _, _) -> + Result = {ok, Data}, + snabbkaffe_log_return(Result), + Result; +transform_and_log_clickhouse_result(ClickhouseErrorResult, ResourceID, SQL) -> + ?SLOG(error, #{ + msg => "clickhouse connector do sql query failed", + connector => ResourceID, + sql => SQL, + reason => ClickhouseErrorResult + }), + {error, ClickhouseErrorResult}. + +snabbkaffe_log_return(_Result) -> + ?tp( + clickhouse_connector_query_return, + #{result => _Result} + ). diff --git a/lib-ee/emqx_ee_connector/test/ee_connector_clickhouse_SUITE.erl b/lib-ee/emqx_ee_connector/test/ee_connector_clickhouse_SUITE.erl new file mode 100644 index 000000000..eab1aa054 --- /dev/null +++ b/lib-ee/emqx_ee_connector/test/ee_connector_clickhouse_SUITE.erl @@ -0,0 +1,198 @@ +% %%-------------------------------------------------------------------- +% %% Copyright (c) 2020-2023 EMQ Technologies Co., Ltd. All Rights Reserved. +% %% +% %% Licensed under the Apache License, Version 2.0 (the "License"); +% %% you may not use this file except in compliance with the License. +% %% You may obtain a copy of the License at +% %% http://www.apache.org/licenses/LICENSE-2.0 +% %% +% %% Unless required by applicable law or agreed to in writing, software +% %% distributed under the License is distributed on an "AS IS" BASIS, +% %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +% %% See the License for the specific language governing permissions and +% %% limitations under the License. +% %%-------------------------------------------------------------------- + +-module(ee_connector_clickhouse_SUITE). + +-compile(nowarn_export_all). +-compile(export_all). + +-include("emqx_connector.hrl"). +-include_lib("eunit/include/eunit.hrl"). +-include_lib("emqx/include/emqx.hrl"). +-include_lib("stdlib/include/assert.hrl"). + +-define(CLICKHOUSE_HOST, "clickhouse"). +-define(CLICKHOUSE_RESOURCE_MOD, emqx_ee_connector_clickhouse). + +%% This test SUITE requires a running clickhouse instance. If you don't want to +%% bring up the whole CI infrastuctucture with the `scripts/ct/run.sh` script +%% you can create a clickhouse instance with the following command (execute it +%% from root of the EMQX directory.). You also need to set ?CLICKHOUSE_HOST and +%% ?CLICKHOUSE_PORT to appropriate values. +%% +%% docker run -d -p 18123:8123 -p19000:9000 --name some-clickhouse-server --ulimit nofile=262144:262144 -v "`pwd`/.ci/docker-compose-file/clickhouse/users.xml:/etc/clickhouse-server/users.xml" -v "`pwd`/.ci/docker-compose-file/clickhouse/config.xml:/etc/clickhouse-server/config.xml" clickhouse/clickhouse-server + +all() -> + emqx_common_test_helpers:all(?MODULE). + +groups() -> + []. + +clickhouse_url() -> + erlang:iolist_to_binary([ + <<"http://">>, + ?CLICKHOUSE_HOST, + ":", + erlang:integer_to_list(?CLICKHOUSE_DEFAULT_PORT) + ]). + +init_per_suite(Config) -> + case + emqx_common_test_helpers:is_tcp_server_available(?CLICKHOUSE_HOST, ?CLICKHOUSE_DEFAULT_PORT) + of + true -> + ok = emqx_common_test_helpers:start_apps([emqx_conf]), + ok = emqx_connector_test_helpers:start_apps([emqx_resource]), + {ok, _} = application:ensure_all_started(emqx_connector), + {ok, _} = application:ensure_all_started(emqx_ee_connector), + %% Create the db table + {ok, Conn} = + clickhouse:start_link([ + {url, clickhouse_url()}, + {user, <<"default">>}, + {key, "public"}, + {pool, tmp_pool} + ]), + {ok, _, _} = clickhouse:query(Conn, <<"CREATE DATABASE IF NOT EXISTS mqtt">>, #{}), + clickhouse:stop(Conn), + Config; + false -> + case os:getenv("IS_CI") of + "yes" -> + throw(no_clickhouse); + _ -> + {skip, no_clickhouse} + end + end. + +end_per_suite(_Config) -> + ok = emqx_common_test_helpers:stop_apps([emqx_conf]), + ok = emqx_connector_test_helpers:stop_apps([emqx_resource]), + _ = application:stop(emqx_connector). + +init_per_testcase(_, Config) -> + Config. + +end_per_testcase(_, _Config) -> + ok. + +% %%------------------------------------------------------------------------------ +% %% Testcases +% %%------------------------------------------------------------------------------ + +t_lifecycle(_Config) -> + perform_lifecycle_check( + <<"emqx_connector_clickhouse_SUITE">>, + clickhouse_config() + ). + +show(X) -> + erlang:display(X), + X. + +show(Label, What) -> + erlang:display({Label, What}), + What. + +perform_lifecycle_check(PoolName, InitialConfig) -> + {ok, #{config := CheckedConfig}} = + emqx_resource:check_config(?CLICKHOUSE_RESOURCE_MOD, InitialConfig), + {ok, #{ + state := #{poolname := ReturnedPoolName} = State, + status := InitialStatus + }} = + emqx_resource:create_local( + PoolName, + ?CONNECTOR_RESOURCE_GROUP, + ?CLICKHOUSE_RESOURCE_MOD, + CheckedConfig, + #{} + ), + ?assertEqual(InitialStatus, connected), + % Instance should match the state and status of the just started resource + {ok, ?CONNECTOR_RESOURCE_GROUP, #{ + state := State, + status := InitialStatus + }} = + emqx_resource:get_instance(PoolName), + ?assertEqual({ok, connected}, emqx_resource:health_check(PoolName)), + % % Perform query as further check that the resource is working as expected + (fun() -> + erlang:display({pool_name, PoolName}), + QueryNoParamsResWrapper = emqx_resource:query(PoolName, test_query_no_params()), + ?assertMatch({ok, _}, QueryNoParamsResWrapper), + {_, QueryNoParamsRes} = QueryNoParamsResWrapper, + ?assertMatch(<<"1">>, string:trim(QueryNoParamsRes)) + end)(), + ?assertEqual(ok, emqx_resource:stop(PoolName)), + % Resource will be listed still, but state will be changed and healthcheck will fail + % as the worker no longer exists. + {ok, ?CONNECTOR_RESOURCE_GROUP, #{ + state := State, + status := StoppedStatus + }} = + emqx_resource:get_instance(PoolName), + ?assertEqual(stopped, StoppedStatus), + ?assertEqual({error, resource_is_stopped}, emqx_resource:health_check(PoolName)), + % Resource healthcheck shortcuts things by checking ets. Go deeper by checking pool itself. + ?assertEqual({error, not_found}, ecpool:stop_sup_pool(ReturnedPoolName)), + % Can call stop/1 again on an already stopped instance + ?assertEqual(ok, emqx_resource:stop(PoolName)), + % Make sure it can be restarted and the healthchecks and queries work properly + ?assertEqual(ok, emqx_resource:restart(PoolName)), + % async restart, need to wait resource + timer:sleep(500), + {ok, ?CONNECTOR_RESOURCE_GROUP, #{status := InitialStatus}} = + emqx_resource:get_instance(PoolName), + ?assertEqual({ok, connected}, emqx_resource:health_check(PoolName)), + (fun() -> + QueryNoParamsResWrapper = + emqx_resource:query(PoolName, test_query_no_params()), + ?assertMatch({ok, _}, QueryNoParamsResWrapper), + {_, QueryNoParamsRes} = QueryNoParamsResWrapper, + ?assertMatch(<<"1">>, string:trim(QueryNoParamsRes)) + end)(), + % Stop and remove the resource in one go. + ?assertEqual(ok, emqx_resource:remove_local(PoolName)), + ?assertEqual({error, not_found}, ecpool:stop_sup_pool(ReturnedPoolName)), + % Should not even be able to get the resource data out of ets now unlike just stopping. + ?assertEqual({error, not_found}, emqx_resource:get_instance(PoolName)). + +% %%------------------------------------------------------------------------------ +% %% Helpers +% %%------------------------------------------------------------------------------ + +clickhouse_config() -> + Config = + #{ + auto_reconnect => true, + database => <<"mqtt">>, + username => <<"default">>, + password => <<"public">>, + pool_size => 8, + url => iolist_to_binary( + io_lib:format( + "http://~s:~b", + [ + ?CLICKHOUSE_HOST, + ?CLICKHOUSE_DEFAULT_PORT + ] + ) + ) + }, + #{<<"config">> => Config}. + +test_query_no_params() -> + {query, <<"SELECT 1">>}. diff --git a/scripts/ct/run.sh b/scripts/ct/run.sh index 612bda77a..40857c46b 100755 --- a/scripts/ct/run.sh +++ b/scripts/ct/run.sh @@ -161,6 +161,9 @@ for dep in ${CT_DEPS}; do ;; tdengine) FILES+=( '.ci/docker-compose-file/docker-compose-tdengine-restful.yaml' ) + ;; + clickhouse) + FILES+=( '.ci/docker-compose-file/docker-compose-clickhouse.yaml' ) ;; *) echo "unknown_ct_dependency $dep" From 96318bda1d56d8e895594cba1bbb02240e211b73 Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Mon, 20 Feb 2023 18:44:34 +0100 Subject: [PATCH 36/96] build: run run.sh tests without being asked for sudo password This commit makes it possible to run the scripts/ct/run.sh script without being asked for sudo password if one instead wants to use the run docker container with root user trick to reset owner of files. One simply has to set the environment variable EMQX_TEST_DO_NOT_RUN_SUDO. --- scripts/ct/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ct/run.sh b/scripts/ct/run.sh index 40857c46b..7e4c06c3e 100755 --- a/scripts/ct/run.sh +++ b/scripts/ct/run.sh @@ -197,7 +197,7 @@ if [[ -t 1 ]]; then fi function restore_ownership { - if ! sudo chown -R "$ORIG_UID_GID" . >/dev/null 2>&1; then + if [[ -n ${EMQX_TEST_DO_NOT_RUN_SUDO+x} ]] || ! sudo chown -R "$ORIG_UID_GID" . >/dev/null 2>&1; then docker exec -i $TTY -u root:root "$ERLANG_CONTAINER" bash -c "chown -R $ORIG_UID_GID /emqx" >/dev/null 2>&1 || true fi } From 65f4a6feabb92e2559eaf03006ff11e52fb03e8d Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Thu, 2 Mar 2023 13:02:11 +0100 Subject: [PATCH 37/96] build: fix diverged dependencies --- mix.exs | 3 ++- rebar.config | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index d72f64039..33828d11f 100644 --- a/mix.exs +++ b/mix.exs @@ -89,7 +89,8 @@ defmodule EMQXUmbrella.MixProject do {:ranch, github: "ninenines/ranch", ref: "a692f44567034dacf5efcaa24a24183788594eb7", override: true}, # in conflict by grpc and eetcd - {:gpb, "4.19.5", override: true, runtime: false} + {:gpb, "4.19.5", override: true, runtime: false}, + {:hackney, github: "benoitc/hackney", tag: "1.18.1", override: true} ] ++ umbrella_apps() ++ enterprise_apps(profile_info) ++ diff --git a/rebar.config b/rebar.config index 108a64ecf..c774a4f95 100644 --- a/rebar.config +++ b/rebar.config @@ -74,6 +74,7 @@ , {esasl, {git, "https://github.com/emqx/esasl", {tag, "0.2.0"}}} , {jose, {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.11.2"}}} , {telemetry, "1.1.0"} + , {hackney, {git, "https://github.com/benoitc/hackney", {tag, "1.18.1"}}} ]}. {xref_ignores, From 8a9984cce9e784024b557777b2872cb77c3602ec Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Wed, 1 Mar 2023 14:34:34 +0100 Subject: [PATCH 38/96] docs: add a comment in docker README.md --- deploy/docker/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/deploy/docker/README.md b/deploy/docker/README.md index edd29ae75..6a37fe979 100644 --- a/deploy/docker/README.md +++ b/deploy/docker/README.md @@ -59,6 +59,7 @@ EMQX_DASHBOARD__DEFAULT_PASSWORD <--> dashboard.default_password EMQX_NODE__COOKIE <--> node.cookie EMQX_LISTENERS__SSL__default__ENABLE <--> listeners.ssl.default.enable ``` +Note: The lowercase use of 'default' is not a typo. It is used to demonstrate that lowercase environment variables are equivalent. + Prefix `EMQX_` is removed + All upper case letters is replaced with lower case letters From c4c0c9cc7e502164ca8429e0432774b3e41282db Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Wed, 1 Mar 2023 12:29:06 +0100 Subject: [PATCH 39/96] fix(bin/emqx): no need to ping node before attach --- bin/emqx | 3 --- 1 file changed, 3 deletions(-) diff --git a/bin/emqx b/bin/emqx index b2bdded86..8c5fdf45b 100755 --- a/bin/emqx +++ b/bin/emqx @@ -1063,9 +1063,6 @@ case "${COMMAND}" in ;; attach) - assert_node_alive - - shift exec "$BINDIR/to_erl" "$PIPE_DIR" ;; From 4eb9a69df02d3de60fce3bb05e3a6d4fd7865f14 Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Wed, 1 Mar 2023 14:12:15 +0100 Subject: [PATCH 40/96] feat(bin/emqx): diagnose boot failure Prior to this change, when EMQX daemon mode failed to start it's not quite easy for users to understand what went wrong. All the know is the node did not start in time and then instructed to boot the node in 'console' mode wishing for some logs. However, the node might actuay be running, causing 'console' mode to fail with a different reason. With this change, after a filure of daemon mode boot, we issue a diagnosis. 1. if node can not be found from ps -ef, instruct the user to find information in erlang.log.N 2. if the node is found running, but not responding to pings instruct the user to check if the node name is resolvable and reachable 3. if the node is responding to pings but emqx app is not running, then it's likely a bug. so the user is advised to report a github issue. --- apps/emqx_machine/src/emqx_machine.erl | 5 ++ bin/emqx | 106 +++++++++++++++++-------- changes/ce/fix-10052.en.md | 12 +++ changes/ce/fix-10052.zh.md | 11 +++ 4 files changed, 101 insertions(+), 33 deletions(-) create mode 100644 changes/ce/fix-10052.en.md create mode 100644 changes/ce/fix-10052.zh.md diff --git a/apps/emqx_machine/src/emqx_machine.erl b/apps/emqx_machine/src/emqx_machine.erl index 9dc3fdc54..243c4bb8c 100644 --- a/apps/emqx_machine/src/emqx_machine.erl +++ b/apps/emqx_machine/src/emqx_machine.erl @@ -19,6 +19,7 @@ -export([ start/0, graceful_shutdown/0, + brutal_shutdown/0, is_ready/0, node_status/0, @@ -47,6 +48,10 @@ start() -> graceful_shutdown() -> emqx_machine_terminator:graceful_wait(). +%% only used when failed to boot +brutal_shutdown() -> + init:stop(). + set_backtrace_depth() -> {ok, Depth} = application:get_env(emqx_machine, backtrace_depth), _ = erlang:system_flag(backtrace_depth, Depth), diff --git a/bin/emqx b/bin/emqx index 8c5fdf45b..14f94f359 100755 --- a/bin/emqx +++ b/bin/emqx @@ -451,6 +451,20 @@ call_hocon() { || die "call_hocon_failed: $*" $? } +find_emqx_process() { + ## Find the running node from 'ps -ef' + ## * The grep args like '[e]mqx' but not 'emqx' is to avoid greping the grep command itself + ## * The running 'remsh' and 'nodetool' processes must be excluded + if [ -n "${EMQX_NODE__NAME:-}" ]; then + # if node name is provided, filter by node name + # shellcheck disable=SC2009 + ps -ef | $GREP '[e]mqx' | $GREP -v -E '(remsh|nodetool)' | $GREP -E "\s\-s?name\s${EMQX_NODE__NAME}" | $GREP -oE "\-[r]oot ${RUNNER_ROOT_DIR}.*" || true + else + # shellcheck disable=SC2009 + ps -ef | $GREP '[e]mqx' | $GREP -v -E '(remsh|nodetool)' | $GREP -oE "\-[r]oot ${RUNNER_ROOT_DIR}.*" || true + fi +} + ## Resolve boot configs in a batch ## This is because starting the Erlang beam with all modules loaded ## and parsing HOCON config + environment variables is a non-trivial task @@ -468,17 +482,7 @@ fi # Turn off debug as the ps output can be quite noisy set +x -## Find the running node from 'ps -ef' -## * The grep args like '[e]mqx' but not 'emqx' is to avoid greping the grep command itself -## * The running 'remsh' and 'nodetool' processes must be excluded -if [ -n "${EMQX_NODE__NAME:-}" ]; then - # if node name is provided, filter by node name - # shellcheck disable=SC2009 - PS_LINE="$(ps -ef | $GREP '[e]mqx' | $GREP -v -E '(remsh|nodetool)' | $GREP -E "\s\-s?name\s${EMQX_NODE__NAME}" | $GREP -oE "\-[r]oot ${RUNNER_ROOT_DIR}.*" || true)" -else - # shellcheck disable=SC2009 - PS_LINE="$(ps -ef | $GREP '[e]mqx' | $GREP -v -E '(remsh|nodetool)' | $GREP -oE "\-[r]oot ${RUNNER_ROOT_DIR}.*" || true)" -fi +PS_LINE="$(find_emqx_process)" logdebug "PS_LINE=$PS_LINE" RUNNING_NODES_COUNT="$(echo -e "$PS_LINE" | sed '/^\s*$/d' | wc -l)" [ "$RUNNING_NODES_COUNT" -gt 1 ] && logdebug "More than one running node found: count=$RUNNING_NODES_COUNT" @@ -927,6 +931,7 @@ case "$NAME" in NAME_TYPE='-sname' esac SHORT_NAME="$(echo "$NAME" | awk -F'@' '{print $1}')" +HOST_NAME="$(echo "$NAME" | awk -F'@' '{print $2}')" if ! (echo "$SHORT_NAME" | grep -q '^[0-9A-Za-z_\-]\+$'); then logerr "Invalid node name, should be of format '^[0-9A-Za-z_-]+$'." exit 1 @@ -969,6 +974,59 @@ if [[ "$IS_BOOT_COMMAND" == 'yes' && "$(get_boot_config 'node.db_backend')" == " fi fi +diagnose_boot_failure_and_die() { + local ps_line + ps_line="$(find_emqx_process)" + if [ -z "$ps_line" ]; then + echo "Find more information in the latest log file: ${RUNNER_LOG_DIR}/erlang.log.*" + exit 1 + fi + if ! relx_nodetool "ping" > /dev/null; then + logerr "$NAME seems to be running, but not responding to pings." + echo "Make sure '$HOST_NAME' is a resolvable and reachable hostname." + pipe_shutdown + exit 2 + fi + if ! relx_nodetool 'eval' 'true = emqx:is_running()' > /dev/null; then + logerr "$NAME node is started, but failed to complete the boot sequence in time." + echo "Please collect the logs in ${RUNNER_LOG_DIR} and report a bug to EMQX team at https://github.com/emqx/emqx/issues/new/choose" + pipe_shutdown + exit 3 + fi +} + +## Only works when started in daemon mode +pipe_shutdown() { + if [ -d "$PIPE_DIR" ]; then + echo "Shutting down $NAME from to_erl pipe." + ## can not evaluate init:stop() or erlang:halt() because the shell is restricted + echo 'emqx_machine:brutal_shutdown().' | "$BINDIR/to_erl" "$PIPE_DIR" + fi +} + +## Call nodetool to stop EMQX +nodetool_shutdown() { + # Wait for the node to completely stop... + PID="$(relx_get_pid)" + if ! relx_nodetool "stop"; then + die "Graceful shutdown failed PID=[$PID]" + fi + WAIT_TIME="${EMQX_WAIT_FOR_STOP:-120}" + if ! wait_for "$WAIT_TIME" 'is_down' "$PID"; then + msg="dangling after ${WAIT_TIME} seconds" + # also log to syslog + logger -t "${REL_NAME}[${PID}]" "STOP: $msg" + # log to user console + set +x + logerr "Stop failed, $msg" + echo "ERROR: $PID is still around" + ps -p "$PID" + exit 1 + fi + echo "ok" + logger -t "${REL_NAME}[${PID}]" "STOP: OK" +} + cd "$RUNNER_ROOT_DIR" case "${COMMAND}" in @@ -1014,33 +1072,15 @@ case "${COMMAND}" in echo "$EMQX_DESCRIPTION $REL_VSN is started successfully!" exit 0 else - echo "$EMQX_DESCRIPTION $REL_VSN failed to start in ${WAIT_TIME} seconds." - echo "Please find more information in erlang.log.N" - echo "Or run 'env DEBUG=1 $0 console' to have logs printed to console." - exit 1 + logerr "${EMQX_DESCRIPTION} ${REL_VSN} using node name '${NAME}' failed ${WAIT_TIME} probes." + diagnose_boot_failure_and_die fi ;; stop) - # Wait for the node to completely stop... - PID="$(relx_get_pid)" - if ! relx_nodetool "stop"; then - die "Graceful shutdown failed PID=[$PID]" + if ! nodetool_shutdown; then + pipe_shutdown fi - WAIT_TIME="${EMQX_WAIT_FOR_STOP:-120}" - if ! wait_for "$WAIT_TIME" 'is_down' "$PID"; then - msg="dangling after ${WAIT_TIME} seconds" - # also log to syslog - logger -t "${REL_NAME}[${PID}]" "STOP: $msg" - # log to user console - set +x - logerr "Stop failed, $msg" - echo "ERROR: $PID is still around" - ps -p "$PID" - exit 1 - fi - echo "ok" - logger -t "${REL_NAME}[${PID}]" "STOP: OK" ;; pid) diff --git a/changes/ce/fix-10052.en.md b/changes/ce/fix-10052.en.md new file mode 100644 index 000000000..f83c4d40c --- /dev/null +++ b/changes/ce/fix-10052.en.md @@ -0,0 +1,12 @@ +Improve daemon mode startup failure logs. + +Before this change, it was difficult for users to understand the reason for EMQX 'start' command failed to boot the node. +The only information they received was that the node did not start within the expected time frame, +and they were instructed to boot the node with 'console' command in the hope of obtaining some logs. +However, the node might actually be running, which could cause 'console' mode to fail for a different reason. + +With this new change, when daemon mode fails to boot, a diagnosis is issued. Here are the possible scenarios: + +* If the node cannot be found from `ps -ef`, the user is instructed to find information in log files `erlang.log.*`. +* If the node is found to be running but not responding to pings, the user is advised to check if the host name is resolvable and reachable. +* If the node is responding to pings, but the EMQX app is not running, it is likely a bug. In this case, the user is advised to report a Github issue. diff --git a/changes/ce/fix-10052.zh.md b/changes/ce/fix-10052.zh.md new file mode 100644 index 000000000..1c2eff342 --- /dev/null +++ b/changes/ce/fix-10052.zh.md @@ -0,0 +1,11 @@ +优化 EMQX daemon 模式启动启动失败的日志。 + +在进行此更改之前,当 EMQX 用 `start` 命令启动失败时,用户很难理解出错的原因。 +所知道的仅仅是节点未能在预期时间内启动,然后被指示以 `console` 式引导节点以获取一些日志。 +然而,节点实际上可能正在运行,这可能会导致 `console` 模式因不同的原因而失败。 + +此次修复后,启动脚本会发出诊断: + +* 如果无法从 `ps -ef` 中找到节点,则指示用户在 `erlang.log.*` 中查找信息。 +* 如果发现节点正在运行但不响应 ping,则建议用户检查节点主机名是否有效并可达。 +* 如果节点响应 ping 但 EMQX 应用程序未运行,则很可能是一个错误。在这种情况下,建议用户报告一个Github issue。 From 6a87b119b0f9e6322b0e76a3f395bfe053e23489 Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Fri, 3 Mar 2023 08:32:43 +0100 Subject: [PATCH 41/96] docs: add word to spellcheck dict --- scripts/spellcheck/dicts/emqx.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/spellcheck/dicts/emqx.txt b/scripts/spellcheck/dicts/emqx.txt index 107ae1f53..f922eebb9 100644 --- a/scripts/spellcheck/dicts/emqx.txt +++ b/scripts/spellcheck/dicts/emqx.txt @@ -267,3 +267,5 @@ keytab jq nif TDengine +Clickhouse +clickhouse From c24a84e3705645ff7a30e218f63b3178306f518a Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Fri, 3 Mar 2023 10:54:47 +0100 Subject: [PATCH 42/96] docs: fix spelling --- lib-ee/emqx_ee_bridge/i18n/emqx_ee_bridge_clickhouse.conf | 6 +++--- lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl | 7 ++----- scripts/spellcheck/dicts/emqx.txt | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/lib-ee/emqx_ee_bridge/i18n/emqx_ee_bridge_clickhouse.conf b/lib-ee/emqx_ee_bridge/i18n/emqx_ee_bridge_clickhouse.conf index c38365d81..6a28b371a 100644 --- a/lib-ee/emqx_ee_bridge/i18n/emqx_ee_bridge_clickhouse.conf +++ b/lib-ee/emqx_ee_bridge/i18n/emqx_ee_bridge_clickhouse.conf @@ -21,7 +21,7 @@ will be forwarded. desc { en: """SQL Template. The template string can contain placeholders for message metadata and payload field. The placeholders are inserted -without any checking and special formatting so it is important to +without any checking and special formatting, so it is important to ensure that the inserted values are formatted and escaped correctly.""" zh: """SQL模板。模板字符串可以包含消息元数据和有效载荷字段的占位符。占位符 @@ -41,7 +41,7 @@ ensure that the inserted values are formatted and escaped correctly.""" en: """The bridge repeats what comes after the VALUES or FORMAT FormatType in the SQL template to form a batch request. The value specified with this parameter will be inserted between the values. The default -value ',' works for the VALUES format but other values +value ',' works for the VALUES format, but other values might be needed if you specify some other format with the clickhouse FORMAT syntax. @@ -76,7 +76,7 @@ https://clickhouse.com/docs/en/interfaces/formats#formats 了解更多关于 desc_config { desc { - en: """Configuration for an Clickhouse bridge.""" + en: """Configuration for a Clickhouse bridge.""" zh: """Clickhouse 桥接配置""" } label: { diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl index dc7ee2be6..b7f35537e 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl +++ b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl @@ -190,15 +190,12 @@ pgsql_structs() -> clickhouse_structs() -> [ - {Type, + {clickhouse, mk( hoconsc:map(name, ref(emqx_ee_bridge_clickhouse, "config")), #{ - desc => <>, + desc => <<"Clickhouse Bridge Config">>, required => false } )} - || {Type, Name} <- [ - {clickhouse, <<"Clickhouse">>} - ] ]. diff --git a/scripts/spellcheck/dicts/emqx.txt b/scripts/spellcheck/dicts/emqx.txt index f922eebb9..5975ebd1b 100644 --- a/scripts/spellcheck/dicts/emqx.txt +++ b/scripts/spellcheck/dicts/emqx.txt @@ -267,5 +267,5 @@ keytab jq nif TDengine -Clickhouse clickhouse +FormatType From 570bf165af5c40c0a1e4d32cc8faefd42d5a11b4 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Fri, 3 Mar 2023 16:43:09 +0100 Subject: [PATCH 43/96] fix: return human readable error message for most common cases --- apps/emqx_bridge/src/emqx_bridge_api.erl | 35 ++++++-- .../test/emqx_bridge_api_SUITE.erl | 79 ++++++++++++++++++- changes/ce/fix-10066.en.md | 1 + changes/ce/fix-10066.zh.md | 1 + 4 files changed, 105 insertions(+), 11 deletions(-) create mode 100644 changes/ce/fix-10066.en.md create mode 100644 changes/ce/fix-10066.zh.md diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index 871def0d6..dbc94c943 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -420,6 +420,9 @@ schema("/bridges/:id/:operation") -> ], responses => #{ 204 => <<"Operation success">>, + 400 => error_schema( + 'BAD_REQUEST', "Problem with configuration of external service" + ), 404 => error_schema('NOT_FOUND', "Bridge not found or invalid operation"), 501 => error_schema('NOT_IMPLEMENTED', "Not Implemented"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") @@ -440,7 +443,10 @@ schema("/nodes/:node/bridges/:id/:operation") -> ], responses => #{ 204 => <<"Operation success">>, - 400 => error_schema('BAD_REQUEST', "Forbidden operation, bridge not enabled"), + 400 => error_schema( + 'BAD_REQUEST', + "Problem with configuration of external service or bridge not enabled" + ), 404 => error_schema('NOT_FOUND', "Bridge not found or invalid operation"), 501 => error_schema('NOT_IMPLEMENTED', "Not Implemented"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") @@ -555,8 +561,8 @@ schema("/bridges_probe") -> case emqx_bridge_resource:create_dry_run(ConnType, maps:remove(<<"type">>, Params)) of ok -> {204}; - {error, Error} -> - {400, error_msg('TEST_FAILED', Error)} + {error, Reason} when not is_tuple(Reason); element(1, Reason) =/= 'exit' -> + {400, error_msg('TEST_FAILED', to_hr_reason(Reason))} end; BadRequest -> BadRequest @@ -577,8 +583,8 @@ do_lookup_from_all_nodes(BridgeType, BridgeName, SuccCode, FormatFun) -> {SuccCode, FormatFun([R || {ok, R} <- Results])}; {ok, [{error, not_found} | _]} -> ?BRIDGE_NOT_FOUND(BridgeType, BridgeName); - {error, ErrL} -> - {500, error_msg('INTERNAL_ERROR', ErrL)} + {error, Reason} -> + {500, error_msg('INTERNAL_ERROR', Reason)} end. lookup_from_local_node(BridgeType, BridgeName) -> @@ -885,7 +891,7 @@ is_ok(ResL) -> ) of [] -> {ok, [Res || {ok, Res} <- ResL]}; - ErrL -> {error, ErrL} + ErrL -> hd(ErrL) end. filter_out_request_body(Conf) -> @@ -934,8 +940,8 @@ call_operation(NodeOrAll, OperFunc, Args) -> ) ) )}; - {error, Reason} -> - {500, error_msg('INTERNAL_ERROR', Reason)} + {error, Reason} when not is_tuple(Reason); element(1, Reason) =/= 'exit' -> + {400, error_msg('BAD_REQUEST', to_hr_reason(Reason))} end. maybe_try_restart(all, start_bridges_to_all_nodes, Args) -> @@ -969,6 +975,19 @@ supported_versions(start_bridge_to_node) -> [2]; supported_versions(start_bridges_to_all_nodes) -> [2]; supported_versions(_Call) -> [1, 2]. +to_hr_reason(nxdomain) -> + <<"Host not found">>; +to_hr_reason(econnrefused) -> + <<"Connection refused">>; +to_hr_reason({unauthorized_client, _}) -> + <<"Unauthorized client">>; +to_hr_reason({not_authorized, _}) -> + <<"Not authorized">>; +to_hr_reason({malformed_username_or_password, _}) -> + <<"Malformed username or password">>; +to_hr_reason(Reason) -> + Reason. + redact(Term) -> emqx_misc:redact(Term). diff --git a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl index 727764d73..02d0b7cd8 100644 --- a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl +++ b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl @@ -73,7 +73,7 @@ init_per_suite(Config) -> _ = application:stop(emqx_resource), _ = application:stop(emqx_connector), ok = emqx_mgmt_api_test_util:init_suite( - [emqx_rule_engine, emqx_bridge] + [emqx_rule_engine, emqx_bridge, emqx_authn] ), ok = emqx_common_test_helpers:load_config( emqx_rule_engine_schema, @@ -83,7 +83,8 @@ init_per_suite(Config) -> Config. end_per_suite(_Config) -> - emqx_mgmt_api_test_util:end_suite([emqx_rule_engine, emqx_bridge]), + emqx_mgmt_api_test_util:end_suite([emqx_rule_engine, emqx_bridge, emqx_authn]), + mria:clear_table(emqx_authn_mnesia), ok. init_per_testcase(t_broken_bpapi_vsn, Config) -> @@ -720,11 +721,83 @@ t_bridges_probe(Config) -> ?assertMatch( #{ <<"code">> := <<"TEST_FAILED">>, - <<"message">> := <<"econnrefused">> + <<"message">> := <<"Connection refused">> }, jsx:decode(ConnRefused) ), + {ok, 400, HostNotFound} = request( + post, + uri(["bridges_probe"]), + ?MQTT_BRIDGE(<<"nohost:2883">>) + ), + ?assertMatch( + #{ + <<"code">> := <<"TEST_FAILED">>, + <<"message">> := <<"Host not found">> + }, + jsx:decode(HostNotFound) + ), + + AuthnConfig = #{ + <<"mechanism">> => <<"password_based">>, + <<"backend">> => <<"built_in_database">>, + <<"user_id_type">> => <<"username">> + }, + Chain = 'mqtt:global', + emqx:update_config( + [authentication], + {create_authenticator, Chain, AuthnConfig} + ), + User = #{user_id => <<"u">>, password => <<"p">>}, + AuthenticatorID = <<"password_based:built_in_database">>, + {ok, _} = emqx_authentication:add_user( + Chain, + AuthenticatorID, + User + ), + + {ok, 400, Unauthorized} = request( + post, + uri(["bridges_probe"]), + ?MQTT_BRIDGE(<<"127.0.0.1:1883">>)#{<<"proto_ver">> => <<"v4">>} + ), + ?assertMatch( + #{ + <<"code">> := <<"TEST_FAILED">>, + <<"message">> := <<"Unauthorized client">> + }, + jsx:decode(Unauthorized) + ), + + {ok, 400, Malformed} = request( + post, + uri(["bridges_probe"]), + ?MQTT_BRIDGE(<<"127.0.0.1:1883">>)#{ + <<"proto_ver">> => <<"v4">>, <<"password">> => <<"mySecret">>, <<"username">> => <<"u">> + } + ), + ?assertMatch( + #{ + <<"code">> := <<"TEST_FAILED">>, + <<"message">> := <<"Malformed username or password">> + }, + jsx:decode(Malformed) + ), + + {ok, 400, NotAuthorized} = request( + post, + uri(["bridges_probe"]), + ?MQTT_BRIDGE(<<"127.0.0.1:1883">>) + ), + ?assertMatch( + #{ + <<"code">> := <<"TEST_FAILED">>, + <<"message">> := <<"Not authorized">> + }, + jsx:decode(NotAuthorized) + ), + {ok, 400, BadReq} = request( post, uri(["bridges_probe"]), diff --git a/changes/ce/fix-10066.en.md b/changes/ce/fix-10066.en.md new file mode 100644 index 000000000..2d23ad5b9 --- /dev/null +++ b/changes/ce/fix-10066.en.md @@ -0,0 +1 @@ +Return human readable error message for `/briges_probe` and `[/node/:node]/bridges/:id/:operation` API calls and set HTTP status code to `400` instead of `500`. diff --git a/changes/ce/fix-10066.zh.md b/changes/ce/fix-10066.zh.md new file mode 100644 index 000000000..c72f21ff1 --- /dev/null +++ b/changes/ce/fix-10066.zh.md @@ -0,0 +1 @@ +为 `/briges_probe` 和 `[/node/:node]/bridges/:id/:operation` 的 API 调用返回人类可读的错误信息,并将 HTTP 状态代码设置为 `400` 而不是 `500`。 From 0a70f676a953a946503a22560721eecda7cace53 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Fri, 3 Mar 2023 16:16:23 +0100 Subject: [PATCH 44/96] ci: release packages for raspbian --- .github/workflows/build_packages.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index c97748a86..73a2ece7a 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -213,6 +213,8 @@ jobs: - ubuntu18.04 - debian11 - debian10 + - raspbian10 + - raspbian9 - el9 - el8 - el7 @@ -229,6 +231,10 @@ jobs: build_machine: ubuntu-22.04 - arch: amd64 build_machine: aws-arm64 + - arch: amd64 + os: raspbian9 + - arch: amd64 + os: raspbian10 include: - profile: emqx otp: 25.1.2-2 @@ -372,6 +378,8 @@ jobs: push "debian/buster" "packages/$PROFILE/$PROFILE-$VERSION-debian10-arm64.deb" push "debian/bullseye" "packages/$PROFILE/$PROFILE-$VERSION-debian11-amd64.deb" push "debian/bullseye" "packages/$PROFILE/$PROFILE-$VERSION-debian11-arm64.deb" + push "raspbian/stretch" "packages/$PROFILE/$PROFILE-$VERSION-raspbian9-arm64.deb" + push "raspbian/buster" "packages/$PROFILE/$PROFILE-$VERSION-raspbian10-arm64.deb" push "ubuntu/bionic" "packages/$PROFILE/$PROFILE-$VERSION-ubuntu18.04-amd64.deb" push "ubuntu/bionic" "packages/$PROFILE/$PROFILE-$VERSION-ubuntu18.04-arm64.deb" push "ubuntu/focal" "packages/$PROFILE/$PROFILE-$VERSION-ubuntu20.04-amd64.deb" From f498a3538bb1a3f58278542929f9335f7f8983f5 Mon Sep 17 00:00:00 2001 From: Zhongwen Deng Date: Thu, 2 Mar 2023 14:55:02 +0800 Subject: [PATCH 45/96] fix: update max_awaiting_rel in session --- apps/emqx/src/emqx_cm.erl | 4 +++- apps/emqx/src/emqx_session.erl | 14 +++++++------- apps/emqx/test/emqx_channel_SUITE.erl | 8 +++++++- apps/emqx/test/emqx_connection_SUITE.erl | 5 ++++- apps/emqx/test/emqx_session_SUITE.erl | 15 +++++++++++++-- apps/emqx/test/emqx_ws_connection_SUITE.erl | 5 ++++- apps/emqx_gateway/src/mqttsn/emqx_sn_channel.erl | 7 ++++++- 7 files changed, 44 insertions(+), 14 deletions(-) diff --git a/apps/emqx/src/emqx_cm.erl b/apps/emqx/src/emqx_cm.erl index 77bc44eeb..a26d35969 100644 --- a/apps/emqx/src/emqx_cm.erl +++ b/apps/emqx/src/emqx_cm.erl @@ -67,7 +67,8 @@ %% Test/debug interface -export([ all_channels/0, - all_client_ids/0 + all_client_ids/0, + get_session_confs/2 ]). %% gen_server callbacks @@ -355,6 +356,7 @@ get_session_confs(#{zone := Zone, clientid := ClientId}, #{ max_inflight => MaxInflight, retry_interval => get_mqtt_conf(Zone, retry_interval), await_rel_timeout => get_mqtt_conf(Zone, await_rel_timeout), + max_awaiting_rel => get_mqtt_conf(Zone, max_awaiting_rel), mqueue => mqueue_confs(Zone), %% TODO: Add conf for allowing/disallowing persistent sessions. %% Note that the connection info is already enriched to have diff --git a/apps/emqx/src/emqx_session.erl b/apps/emqx/src/emqx_session.erl index 2e17190e2..b3a8ecebc 100644 --- a/apps/emqx/src/emqx_session.erl +++ b/apps/emqx/src/emqx_session.erl @@ -200,7 +200,7 @@ -spec init(options()) -> session(). init(Opts) -> - MaxInflight = maps:get(max_inflight, Opts, 1), + MaxInflight = maps:get(max_inflight, Opts), QueueOpts = maps:merge( #{ max_len => 1000, @@ -211,17 +211,17 @@ init(Opts) -> #session{ id = emqx_guid:gen(), clientid = maps:get(clientid, Opts, <<>>), - is_persistent = maps:get(is_persistent, Opts, false), - max_subscriptions = maps:get(max_subscriptions, Opts, infinity), + is_persistent = maps:get(is_persistent, Opts), + max_subscriptions = maps:get(max_subscriptions, Opts), subscriptions = #{}, - upgrade_qos = maps:get(upgrade_qos, Opts, false), + upgrade_qos = maps:get(upgrade_qos, Opts), inflight = emqx_inflight:new(MaxInflight), mqueue = emqx_mqueue:init(QueueOpts), next_pkt_id = 1, - retry_interval = maps:get(retry_interval, Opts, 30000), + retry_interval = maps:get(retry_interval, Opts), awaiting_rel = #{}, - max_awaiting_rel = maps:get(max_awaiting_rel, Opts, 100), - await_rel_timeout = maps:get(await_rel_timeout, Opts, 300000), + max_awaiting_rel = maps:get(max_awaiting_rel, Opts), + await_rel_timeout = maps:get(await_rel_timeout, Opts), created_at = erlang:system_time(millisecond) }. diff --git a/apps/emqx/test/emqx_channel_SUITE.erl b/apps/emqx/test/emqx_channel_SUITE.erl index c6610c0e2..c3f27269b 100644 --- a/apps/emqx/test/emqx_channel_SUITE.erl +++ b/apps/emqx/test/emqx_channel_SUITE.erl @@ -1236,11 +1236,17 @@ connpkt(Props) -> session() -> session(#{}). session(InitFields) when is_map(InitFields) -> + Conf = emqx_cm:get_session_confs( + #{zone => default, clientid => <<"fake-test">>}, #{ + receive_maximum => 0, expiry_interval => 0 + } + ), + Session = emqx_session:init(Conf), maps:fold( fun(Field, Value, Session) -> emqx_session:set_field(Field, Value, Session) end, - emqx_session:init(#{max_inflight => 0}), + Session, InitFields ). diff --git a/apps/emqx/test/emqx_connection_SUITE.erl b/apps/emqx/test/emqx_connection_SUITE.erl index 23ddf4008..cc9e03168 100644 --- a/apps/emqx/test/emqx_connection_SUITE.erl +++ b/apps/emqx/test/emqx_connection_SUITE.erl @@ -673,7 +673,10 @@ channel(InitFields) -> peercert => undefined, mountpoint => undefined }, - Session = emqx_session:init(#{max_inflight => 0}), + Conf = emqx_cm:get_session_confs(ClientInfo, #{ + receive_maximum => 0, expiry_interval => 1000 + }), + Session = emqx_session:init(Conf), maps:fold( fun(Field, Value, Channel) -> emqx_channel:set_field(Field, Value, Channel) diff --git a/apps/emqx/test/emqx_session_SUITE.erl b/apps/emqx/test/emqx_session_SUITE.erl index ecc9794d1..95d94707c 100644 --- a/apps/emqx/test/emqx_session_SUITE.erl +++ b/apps/emqx/test/emqx_session_SUITE.erl @@ -63,7 +63,12 @@ end_per_testcase(_TestCase, Config) -> %%-------------------------------------------------------------------- t_session_init(_) -> - Session = emqx_session:init(#{max_inflight => 64}), + Conf = emqx_cm:get_session_confs( + #{zone => default, clientid => <<"fake-test">>}, #{ + receive_maximum => 64, expiry_interval => 0 + } + ), + Session = emqx_session:init(Conf), ?assertEqual(#{}, emqx_session:info(subscriptions, Session)), ?assertEqual(0, emqx_session:info(subscriptions_cnt, Session)), ?assertEqual(infinity, emqx_session:info(subscriptions_max, Session)), @@ -459,11 +464,17 @@ mqueue(Opts) -> session() -> session(#{}). session(InitFields) when is_map(InitFields) -> + Conf = emqx_cm:get_session_confs( + #{zone => default, clientid => <<"fake-test">>}, #{ + receive_maximum => 0, expiry_interval => 0 + } + ), + Session = emqx_session:init(Conf), maps:fold( fun(Field, Value, Session) -> emqx_session:set_field(Field, Value, Session) end, - emqx_session:init(#{max_inflight => 0}), + Session, InitFields ). diff --git a/apps/emqx/test/emqx_ws_connection_SUITE.erl b/apps/emqx/test/emqx_ws_connection_SUITE.erl index 787491c4b..de8b1c9af 100644 --- a/apps/emqx/test/emqx_ws_connection_SUITE.erl +++ b/apps/emqx/test/emqx_ws_connection_SUITE.erl @@ -612,7 +612,10 @@ channel(InitFields) -> peercert => undefined, mountpoint => undefined }, - Session = emqx_session:init(#{max_inflight => 0}), + Conf = emqx_cm:get_session_confs(ClientInfo, #{ + receive_maximum => 0, expiry_interval => 0 + }), + Session = emqx_session:init(Conf), maps:fold( fun(Field, Value, Channel) -> emqx_channel:set_field(Field, Value, Channel) diff --git a/apps/emqx_gateway/src/mqttsn/emqx_sn_channel.erl b/apps/emqx_gateway/src/mqttsn/emqx_sn_channel.erl index 29dce90ee..23d07113c 100644 --- a/apps/emqx_gateway/src/mqttsn/emqx_sn_channel.erl +++ b/apps/emqx_gateway/src/mqttsn/emqx_sn_channel.erl @@ -389,7 +389,12 @@ process_connect( clientinfo = ClientInfo } ) -> - SessFun = fun(_, _) -> emqx_session:init(#{max_inflight => 1}) end, + SessFun = fun(ClientInfoT, _) -> + Conf = emqx_cm:get_session_confs( + ClientInfoT, #{receive_maximum => 1, expiry_interval => 0} + ), + emqx_session:init(Conf) + end, case emqx_gateway_ctx:open_session( Ctx, From d0ea7f46475ae0a716827bd214179e9ae90a8d6e Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Mon, 6 Mar 2023 11:05:53 +0100 Subject: [PATCH 46/96] fix(emqx_authz): check if type param matches type in body --- apps/emqx_authz/src/emqx_authz_api_sources.erl | 4 +++- .../test/emqx_authz_api_sources_SUITE.erl | 14 ++++++++++++++ changes/ce/fix-10074.en.md | 1 + changes/ce/fix-10074.zh.md | 1 + 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 changes/ce/fix-10074.en.md create mode 100644 changes/ce/fix-10074.zh.md diff --git a/apps/emqx_authz/src/emqx_authz_api_sources.erl b/apps/emqx_authz/src/emqx_authz_api_sources.erl index c692154b1..fffb4bee4 100644 --- a/apps/emqx_authz/src/emqx_authz_api_sources.erl +++ b/apps/emqx_authz/src/emqx_authz_api_sources.erl @@ -262,8 +262,10 @@ source(get, #{bindings := #{type := Type}}) -> end; source(put, #{bindings := #{type := <<"file">>}, body := #{<<"type">> := <<"file">>} = Body}) -> update_authz_file(Body); -source(put, #{bindings := #{type := Type}, body := Body}) -> +source(put, #{bindings := #{type := Type}, body := #{<<"type">> := Type} = Body}) -> update_config({?CMD_REPLACE, Type}, Body); +source(put, #{bindings := #{type := _Type}, body := #{<<"type">> := _OtherType}}) -> + {400, #{code => <<"BAD_REQUEST">>, message => <<"Type mismatch">>}}; source(delete, #{bindings := #{type := Type}}) -> update_config({?CMD_DELETE, Type}, #{}). diff --git a/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl b/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl index 76b025716..f2761412a 100644 --- a/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl +++ b/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl @@ -332,6 +332,7 @@ t_api(_) -> uri(["authorization", "sources", "postgresql"]), ?SOURCE4#{<<"server">> := <<"fake">>} ), + {ok, 204, _} = request( put, uri(["authorization", "sources", "redis"]), @@ -343,6 +344,19 @@ t_api(_) -> } ), + {ok, 400, TypeMismatch} = request( + put, + uri(["authorization", "sources", "file"]), + #{<<"type">> => <<"built_in_database">>, <<"enable">> => false} + ), + ?assertMatch( + #{ + <<"code">> := <<"BAD_REQUEST">>, + <<"message">> := <<"Type mismatch", _/binary>> + }, + jiffy:decode(TypeMismatch, [return_maps]) + ), + lists:foreach( fun(#{<<"type">> := Type}) -> {ok, 204, _} = request( diff --git a/changes/ce/fix-10074.en.md b/changes/ce/fix-10074.en.md new file mode 100644 index 000000000..49c52b948 --- /dev/null +++ b/changes/ce/fix-10074.en.md @@ -0,0 +1 @@ +Check if type in `PUT /authorization/sources/:type` matches `type` given in body of request. diff --git a/changes/ce/fix-10074.zh.md b/changes/ce/fix-10074.zh.md new file mode 100644 index 000000000..930840cdf --- /dev/null +++ b/changes/ce/fix-10074.zh.md @@ -0,0 +1 @@ +检查 `PUT /authorization/sources/:type` 中的类型是否与请求正文中的 `type` 相符。 From 8fbb948b6f9d03df903469b81a3e41681e0b2338 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Fri, 3 Mar 2023 17:51:48 -0300 Subject: [PATCH 47/96] test: fix flaky mqtt bridge test Sometimes, this test fails because the metrics are still in the inflight phase. --- .../test/emqx_bridge_mqtt_SUITE.erl | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/apps/emqx_bridge/test/emqx_bridge_mqtt_SUITE.erl b/apps/emqx_bridge/test/emqx_bridge_mqtt_SUITE.erl index 1bb477dad..e2c9382db 100644 --- a/apps/emqx_bridge/test/emqx_bridge_mqtt_SUITE.erl +++ b/apps/emqx_bridge/test/emqx_bridge_mqtt_SUITE.erl @@ -359,9 +359,13 @@ t_mqtt_conn_bridge_egress(_) -> ?assertMatch(<>, Msg#message.from), %% verify the metrics of the bridge - ?assertMetrics( - #{<<"matched">> := 1, <<"success">> := 1, <<"failed">> := 0}, - BridgeIDEgress + ?retry( + _Interval = 200, + _Attempts = 5, + ?assertMetrics( + #{<<"matched">> := 1, <<"success">> := 1, <<"failed">> := 0}, + BridgeIDEgress + ) ), %% delete the bridge @@ -402,9 +406,13 @@ t_mqtt_conn_bridge_egress_no_payload_template(_) -> ?assertMatch(#{<<"payload">> := Payload}, jsx:decode(Msg#message.payload)), %% verify the metrics of the bridge - ?assertMetrics( - #{<<"matched">> := 1, <<"success">> := 1, <<"failed">> := 0}, - BridgeIDEgress + ?retry( + _Interval = 200, + _Attempts = 5, + ?assertMetrics( + #{<<"matched">> := 1, <<"success">> := 1, <<"failed">> := 0}, + BridgeIDEgress + ) ), %% delete the bridge From 7c65f6f9a970455ba376a67a819e1929a74103b5 Mon Sep 17 00:00:00 2001 From: William Yang Date: Fri, 24 Feb 2023 11:51:14 +0100 Subject: [PATCH 48/96] fix: i18n desc of broker_shared_subscription_strategy --- apps/emqx/i18n/emqx_schema_i18n.conf | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/emqx/i18n/emqx_schema_i18n.conf b/apps/emqx/i18n/emqx_schema_i18n.conf index a3aebe796..b57698327 100644 --- a/apps/emqx/i18n/emqx_schema_i18n.conf +++ b/apps/emqx/i18n/emqx_schema_i18n.conf @@ -1070,14 +1070,20 @@ Supported configurations are the following: en: """Dispatch strategy for shared subscription. - `random`: dispatch the message to a random selected subscriber - `round_robin`: select the subscribers in a round-robin manner + - `round_robin_per_group`: select the subscribers in round-robin fashion within each shared subscriber group + - `local`: select random local subscriber otherwise select random cluster-wide - `sticky`: always use the last selected subscriber to dispatch, until the subscriber disconnects. - - `hash`: select the subscribers by the hash of `clientIds`""" + - `hash_clientid`: select the subscribers by hashing the `clientIds` + - `hash_topic`: select the subscribers by hashing the source topic""" zh: """共享订阅消息派发策略。 - `random`:随机挑选一个共享订阅者派发; - `round_robin`:使用 round-robin 策略派发; + - `round_robin_per_group`: 在共享组内循环选择下一个成员; + - `local`: 选择随机的本地成员,否则选择随机的集群范围内成员; - `sticky`:总是使用上次选中的订阅者派发,直到它断开连接; - - `hash`:使用发送者的 Client ID 进行 Hash 来选择订阅者。""" + - `hash_clientid`:使用发送者的 Client ID 进行 Hash 来选择订阅者; + - `hash_topic`: 使用源主题进行 Hash 来选择订阅者。""" } } From 1912027eb54d2c2e8ae4202985d65e8c6d4e2af6 Mon Sep 17 00:00:00 2001 From: William Yang Date: Mon, 6 Mar 2023 16:25:53 +0100 Subject: [PATCH 49/96] docs: changelogs --- changes/ce/fix-10079.en.md | 1 + changes/ce/fix-10079.zh.md | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 changes/ce/fix-10079.en.md create mode 100644 changes/ce/fix-10079.zh.md diff --git a/changes/ce/fix-10079.en.md b/changes/ce/fix-10079.en.md new file mode 100644 index 000000000..440351753 --- /dev/null +++ b/changes/ce/fix-10079.en.md @@ -0,0 +1 @@ +Fix description of `shared_subscription_strategy`. diff --git a/changes/ce/fix-10079.zh.md b/changes/ce/fix-10079.zh.md new file mode 100644 index 000000000..ca2ab9173 --- /dev/null +++ b/changes/ce/fix-10079.zh.md @@ -0,0 +1,2 @@ +修正对 `shared_subscription_strategy` 的描述。 + From 00bfc66e91bdd57a0f74c7f7b94554093157e7f9 Mon Sep 17 00:00:00 2001 From: Zhongwen Deng Date: Tue, 7 Mar 2023 10:53:16 +0800 Subject: [PATCH 50/96] chore: add changelog for mqtt.max_awaiting_rel --- changes/ce/fix-10055.en.md | 1 + changes/ce/fix-10055.zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/ce/fix-10055.en.md create mode 100644 changes/ce/fix-10055.zh.md diff --git a/changes/ce/fix-10055.en.md b/changes/ce/fix-10055.en.md new file mode 100644 index 000000000..4ffaae195 --- /dev/null +++ b/changes/ce/fix-10055.en.md @@ -0,0 +1 @@ +Fix `mqtt.max_awaiting_rel` change does not work. diff --git a/changes/ce/fix-10055.zh.md b/changes/ce/fix-10055.zh.md new file mode 100644 index 000000000..4da371c51 --- /dev/null +++ b/changes/ce/fix-10055.zh.md @@ -0,0 +1 @@ +修复 `mqtt.max_awaiting_rel` 更新不生效问题。 From a7605fba946c06e610071d48f5976828b42765c3 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Tue, 7 Mar 2023 11:32:03 +0100 Subject: [PATCH 51/96] test(emqx_authz): use snabbkaffe:retry instead of timer:sleep also use emqx_json rather than jiffy or jsx directly --- .../test/emqx_authz_api_sources_SUITE.erl | 102 +++++++++++------- 1 file changed, 61 insertions(+), 41 deletions(-) diff --git a/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl b/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl index f2761412a..cf7039133 100644 --- a/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl +++ b/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl @@ -21,7 +21,6 @@ -import(emqx_mgmt_api_test_util, [request/3, uri/1]). -include_lib("eunit/include/eunit.hrl"). --include_lib("common_test/include/ct.hrl"). -include_lib("emqx/include/emqx_placeholder.hrl"). -define(MONGO_SINGLE_HOST, "mongo"). @@ -183,7 +182,7 @@ t_api(_) -> {ok, 404, ErrResult} = request(get, uri(["authorization", "sources", "http"]), []), ?assertMatch( #{<<"code">> := <<"NOT_FOUND">>, <<"message">> := <<"Not found: http">>}, - jsx:decode(ErrResult) + emqx_json:decode(ErrResult, [return_maps]) ), [ @@ -215,7 +214,9 @@ t_api(_) -> ?SOURCE1#{<<"enable">> := false} ), {ok, 200, Result3} = request(get, uri(["authorization", "sources", "http"]), []), - ?assertMatch(#{<<"type">> := <<"http">>, <<"enable">> := false}, jsx:decode(Result3)), + ?assertMatch( + #{<<"type">> := <<"http">>, <<"enable">> := false}, emqx_json:decode(Result3, [return_maps]) + ), Keyfile = emqx_common_test_helpers:app_path( emqx, @@ -252,7 +253,7 @@ t_api(_) -> <<"total">> := 0, <<"nomatch">> := 0 } - } = jiffy:decode(Status4, [return_maps]), + } = emqx_json:decode(Status4, [return_maps]), ?assertMatch( #{ <<"type">> := <<"mongodb">>, @@ -264,7 +265,7 @@ t_api(_) -> <<"verify">> := <<"verify_none">> } }, - jsx:decode(Result4) + emqx_json:decode(Result4, [return_maps]) ), {ok, Cacert} = file:read_file(Cacertfile), @@ -296,7 +297,7 @@ t_api(_) -> <<"verify">> := <<"verify_none">> } }, - jsx:decode(Result5) + emqx_json:decode(Result5, [return_maps]) ), {ok, 200, Status5_1} = request(get, uri(["authorization", "sources", "mongodb", "status"]), []), @@ -307,7 +308,7 @@ t_api(_) -> <<"total">> := 0, <<"nomatch">> := 0 } - } = jiffy:decode(Status5_1, [return_maps]), + } = emqx_json:decode(Status5_1, [return_maps]), #{ ssl := #{ @@ -354,7 +355,7 @@ t_api(_) -> <<"code">> := <<"BAD_REQUEST">>, <<"message">> := <<"Type mismatch", _/binary>> }, - jiffy:decode(TypeMismatch, [return_maps]) + emqx_json:decode(TypeMismatch, [return_maps]) ), lists:foreach( @@ -382,7 +383,6 @@ t_api(_) -> ] ), emqtt:connect(Client), - timer:sleep(50), emqtt:publish( Client, @@ -392,17 +392,24 @@ t_api(_) -> [{qos, 1}] ), - {ok, 200, Status5} = request(get, uri(["authorization", "sources", "file", "status"]), []), - #{ - <<"metrics">> := #{ - <<"allow">> := 1, - <<"deny">> := 0, - <<"total">> := 1, - <<"nomatch">> := 0 - } - } = jiffy:decode(Status5, [return_maps]), + snabbkaffe:retry( + 10, + 3, + fun() -> + {ok, 200, Status5} = request( + get, uri(["authorization", "sources", "file", "status"]), [] + ), + #{ + <<"metrics">> := #{ + <<"allow">> := 1, + <<"deny">> := 0, + <<"total">> := 1, + <<"nomatch">> := 0 + } + } = emqx_json:decode(Status5, [return_maps]) + end + ), - timer:sleep(50), emqtt:publish( Client, <<"t2">>, @@ -411,17 +418,24 @@ t_api(_) -> [{qos, 1}] ), - {ok, 200, Status6} = request(get, uri(["authorization", "sources", "file", "status"]), []), - #{ - <<"metrics">> := #{ - <<"allow">> := 2, - <<"deny">> := 0, - <<"total">> := 2, - <<"nomatch">> := 0 - } - } = jiffy:decode(Status6, [return_maps]), + snabbkaffe:retry( + 10, + 3, + fun() -> + {ok, 200, Status6} = request( + get, uri(["authorization", "sources", "file", "status"]), [] + ), + #{ + <<"metrics">> := #{ + <<"allow">> := 2, + <<"deny">> := 0, + <<"total">> := 2, + <<"nomatch">> := 0 + } + } = emqx_json:decode(Status6, [return_maps]) + end + ), - timer:sleep(50), emqtt:publish( Client, <<"t3">>, @@ -430,17 +444,23 @@ t_api(_) -> [{qos, 1}] ), - timer:sleep(50), - {ok, 200, Status7} = request(get, uri(["authorization", "sources", "file", "status"]), []), - #{ - <<"metrics">> := #{ - <<"allow">> := 3, - <<"deny">> := 0, - <<"total">> := 3, - <<"nomatch">> := 0 - } - } = jiffy:decode(Status7, [return_maps]), - + snabbkaffe:retry( + 10, + 3, + fun() -> + {ok, 200, Status7} = request( + get, uri(["authorization", "sources", "file", "status"]), [] + ), + #{ + <<"metrics">> := #{ + <<"allow">> := 3, + <<"deny">> := 0, + <<"total">> := 3, + <<"nomatch">> := 0 + } + } = emqx_json:decode(Status7, [return_maps]) + end + ), ok. t_move_source(_) -> @@ -564,7 +584,7 @@ t_aggregate_metrics(_) -> ). get_sources(Result) -> - maps:get(<<"sources">>, jsx:decode(Result), []). + maps:get(<<"sources">>, emqx_json:decode(Result, [return_maps])). data_dir() -> emqx:data_dir(). From b54f444263b8dfa0e8c32aecfdba62ff39958950 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Tue, 7 Mar 2023 13:48:22 +0100 Subject: [PATCH 52/96] fix(emqx_authz): return `404` for requests on non existent source --- .../emqx_authz/src/emqx_authz_api_sources.erl | 165 ++++++++++-------- .../test/emqx_authz_api_sources_SUITE.erl | 39 ++++- 2 files changed, 130 insertions(+), 74 deletions(-) diff --git a/apps/emqx_authz/src/emqx_authz_api_sources.erl b/apps/emqx_authz/src/emqx_authz_api_sources.erl index fffb4bee4..f3b8d0f48 100644 --- a/apps/emqx_authz/src/emqx_authz_api_sources.erl +++ b/apps/emqx_authz/src/emqx_authz_api_sources.erl @@ -47,7 +47,7 @@ -export([ sources/2, source/2, - move_source/2, + source_move/2, aggregate_metrics/1 ]). @@ -164,7 +164,7 @@ schema("/authorization/sources/:type/status") -> }; schema("/authorization/sources/:type/move") -> #{ - 'operationId' => move_source, + 'operationId' => source_move, post => #{ description => ?DESC(authorization_sources_type_move_post), @@ -230,8 +230,6 @@ sources(get, _) -> get_raw_sources() ), {200, #{sources => Sources}}; -sources(post, #{body := #{<<"type">> := <<"file">>} = Body}) -> - create_authz_file(Body); sources(post, #{body := Body}) -> update_config(?CMD_PREPEND, Body). @@ -240,77 +238,99 @@ source(Method, #{bindings := #{type := Type} = Bindings} = Req) when -> source(Method, Req#{bindings => Bindings#{type => atom_to_binary(Type, utf8)}}); source(get, #{bindings := #{type := Type}}) -> - case get_raw_source(Type) of - [] -> - {404, #{code => <<"NOT_FOUND">>, message => <<"Not found: ", Type/binary>>}}; - [#{<<"type">> := <<"file">>, <<"enable">> := Enable, <<"path">> := Path}] -> - case file:read_file(Path) of - {ok, Rules} -> - {200, #{ - type => file, - enable => Enable, - rules => Rules - }}; - {error, Reason} -> - {500, #{ - code => <<"INTERNAL_ERROR">>, - message => bin(Reason) - }} - end; - [Source] -> - {200, Source} - end; -source(put, #{bindings := #{type := <<"file">>}, body := #{<<"type">> := <<"file">>} = Body}) -> - update_authz_file(Body); + with_source( + Type, + fun + (#{<<"type">> := <<"file">>, <<"enable">> := Enable, <<"path">> := Path}) -> + case file:read_file(Path) of + {ok, Rules} -> + {200, #{ + type => file, + enable => Enable, + rules => Rules + }}; + {error, Reason} -> + {500, #{ + code => <<"INTERNAL_ERROR">>, + message => bin(Reason) + }} + end; + (Source) -> + {200, Source} + end + ); source(put, #{bindings := #{type := Type}, body := #{<<"type">> := Type} = Body}) -> - update_config({?CMD_REPLACE, Type}, Body); -source(put, #{bindings := #{type := _Type}, body := #{<<"type">> := _OtherType}}) -> - {400, #{code => <<"BAD_REQUEST">>, message => <<"Type mismatch">>}}; + with_source( + Type, + fun(_) -> + update_config({?CMD_REPLACE, Type}, Body) + end + ); +source(put, #{bindings := #{type := Type}, body := #{<<"type">> := _OtherType}}) -> + with_source( + Type, + fun(_) -> + {400, #{code => <<"BAD_REQUEST">>, message => <<"Type mismatch">>}} + end + ); source(delete, #{bindings := #{type := Type}}) -> - update_config({?CMD_DELETE, Type}, #{}). + with_source( + Type, + fun(_) -> + update_config({?CMD_DELETE, Type}, #{}) + end + ). source_status(get, #{bindings := #{type := Type}}) -> - lookup_from_all_nodes(Type). + with_source( + atom_to_binary(Type, utf8), + fun(_) -> lookup_from_all_nodes(Type) end + ). -move_source(Method, #{bindings := #{type := Type} = Bindings} = Req) when +source_move(Method, #{bindings := #{type := Type} = Bindings} = Req) when is_atom(Type) -> - move_source(Method, Req#{bindings => Bindings#{type => atom_to_binary(Type, utf8)}}); -move_source(post, #{bindings := #{type := Type}, body := #{<<"position">> := Position}}) -> - case parse_position(Position) of - {ok, NPosition} -> - try emqx_authz:move(Type, NPosition) of - {ok, _} -> - {204}; - {error, {not_found_source, _Type}} -> - {404, #{ - code => <<"NOT_FOUND">>, - message => <<"source ", Type/binary, " not found">> - }}; - {error, {emqx_conf_schema, _}} -> - {400, #{ - code => <<"BAD_REQUEST">>, - message => <<"BAD_SCHEMA">> - }}; + source_move(Method, Req#{bindings => Bindings#{type => atom_to_binary(Type, utf8)}}); +source_move(post, #{bindings := #{type := Type}, body := #{<<"position">> := Position}}) -> + with_source( + Type, + fun(_Source) -> + case parse_position(Position) of + {ok, NPosition} -> + try emqx_authz:move(Type, NPosition) of + {ok, _} -> + {204}; + {error, {not_found_source, _Type}} -> + {404, #{ + code => <<"NOT_FOUND">>, + message => <<"source ", Type/binary, " not found">> + }}; + {error, {emqx_conf_schema, _}} -> + {400, #{ + code => <<"BAD_REQUEST">>, + message => <<"BAD_SCHEMA">> + }}; + {error, Reason} -> + {400, #{ + code => <<"BAD_REQUEST">>, + message => bin(Reason) + }} + catch + error:{unknown_authz_source_type, Unknown} -> + NUnknown = bin(Unknown), + {400, #{ + code => <<"BAD_REQUEST">>, + message => <<"Unknown authz Source Type: ", NUnknown/binary>> + }} + end; {error, Reason} -> {400, #{ code => <<"BAD_REQUEST">>, message => bin(Reason) }} - catch - error:{unknown_authz_source_type, Unknown} -> - NUnknown = bin(Unknown), - {400, #{ - code => <<"BAD_REQUEST">>, - message => <<"Unknown authz Source Type: ", NUnknown/binary>> - }} - end; - {error, Reason} -> - {400, #{ - code => <<"BAD_REQUEST">>, - message => bin(Reason) - }} - end. + end + end + ). %%-------------------------------------------------------------------- %% Internal functions @@ -486,6 +506,15 @@ get_raw_source(Type) -> get_raw_sources() ). +-spec with_source(binary(), fun((map()) -> term())) -> term(). +with_source(Type, ContF) -> + case get_raw_source(Type) of + [] -> + {404, #{code => <<"NOT_FOUND">>, message => <<"Not found: ", Type/binary>>}}; + [Source] -> + ContF(Source) + end. + update_config(Cmd, Sources) -> case emqx_authz:update(Cmd, Sources) of {ok, _} -> @@ -630,13 +659,3 @@ status_metrics_example() -> } } }. - -create_authz_file(Body) -> - do_update_authz_file(?CMD_PREPEND, Body). - -update_authz_file(Body) -> - do_update_authz_file({?CMD_REPLACE, <<"file">>}, Body). - -do_update_authz_file(Cmd, Body) -> - %% API update will placed in `authz` subdirectory inside EMQX's `data_dir` - update_config(Cmd, Body). diff --git a/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl b/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl index cf7039133..411399d64 100644 --- a/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl +++ b/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl @@ -372,6 +372,43 @@ t_api(_) -> ?assertEqual([], get_sources(Result6)), ?assertEqual([], emqx:get_config([authorization, sources])), + lists:foreach( + fun(#{<<"type">> := Type}) -> + {ok, 404, _} = request( + get, + uri(["authorization", "sources", binary_to_list(Type), "status"]), + [] + ), + {ok, 404, _} = request( + post, + uri(["authorization", "sources", binary_to_list(Type), "move"]), + #{<<"position">> => <<"front">>} + ), + {ok, 404, _} = request( + get, + uri(["authorization", "sources", binary_to_list(Type)]), + [] + ), + {ok, 404, _} = request( + delete, + uri(["authorization", "sources", binary_to_list(Type)]), + [] + ) + end, + Sources + ), + + {ok, 404, _TypeMismatch2} = request( + put, + uri(["authorization", "sources", "file"]), + #{<<"type">> => <<"built_in_database">>, <<"enable">> => false} + ), + {ok, 404, _} = request( + put, + uri(["authorization", "sources", "built_in_database"]), + #{<<"type">> => <<"built_in_database">>, <<"enable">> => false} + ), + {ok, 204, _} = request(post, uri(["authorization", "sources"]), ?SOURCE6), {ok, Client} = emqtt:start_link( @@ -463,7 +500,7 @@ t_api(_) -> ), ok. -t_move_source(_) -> +t_source_move(_) -> {ok, _} = emqx_authz:update(replace, [?SOURCE1, ?SOURCE2, ?SOURCE3, ?SOURCE4, ?SOURCE5]), ?assertMatch( [ From e1054be3194e947049aa51fa1c535a6c6d381494 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Tue, 7 Mar 2023 13:56:22 +0100 Subject: [PATCH 53/96] chore: add changelog --- changes/ce/fix-10085.en.md | 1 + changes/ce/fix-10085.zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/ce/fix-10085.en.md create mode 100644 changes/ce/fix-10085.zh.md diff --git a/changes/ce/fix-10085.en.md b/changes/ce/fix-10085.en.md new file mode 100644 index 000000000..e539a04b4 --- /dev/null +++ b/changes/ce/fix-10085.en.md @@ -0,0 +1 @@ +Consistently return `404` for all requests on non existent source in `/authorization/sources/:source[/*]`. diff --git a/changes/ce/fix-10085.zh.md b/changes/ce/fix-10085.zh.md new file mode 100644 index 000000000..3e2d809d4 --- /dev/null +++ b/changes/ce/fix-10085.zh.md @@ -0,0 +1 @@ +对 `/authorization/sources/:source[/*] `中不存在的来源的所有请求一致地返回 `404`。 From 71cb3be1d0176c756925dabac34a0a42053f0369 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Tue, 7 Mar 2023 15:12:51 +0100 Subject: [PATCH 54/96] chore: fix translation --- changes/ce/fix-10085.zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changes/ce/fix-10085.zh.md b/changes/ce/fix-10085.zh.md index 3e2d809d4..059680efa 100644 --- a/changes/ce/fix-10085.zh.md +++ b/changes/ce/fix-10085.zh.md @@ -1 +1 @@ -对 `/authorization/sources/:source[/*] `中不存在的来源的所有请求一致地返回 `404`。 +如果向 `/authorization/sources/:source[/*]` 请求的 `source` 不存在,将一致地返回 `404`。 From b8b1a7802578134b24e8a13aa6e0ee9dc3ce79d0 Mon Sep 17 00:00:00 2001 From: firest Date: Tue, 7 Mar 2023 16:33:04 +0800 Subject: [PATCH 55/96] feat(bridges): integrate the DynamoDB into data bridges --- apps/emqx_bridge/src/emqx_bridge.erl | 7 +- .../i18n/emqx_ee_bridge_dynamo.conf | 72 ++++ lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl | 17 +- .../src/emqx_ee_bridge_dynamo.erl | 122 +++++++ .../i18n/emqx_ee_connector_dynamo.conf | 14 + lib-ee/emqx_ee_connector/rebar.config | 1 + .../src/emqx_ee_connector.app.src | 3 +- .../src/emqx_ee_connector_dynamo.erl | 345 ++++++++++++++++++ 8 files changed, 576 insertions(+), 5 deletions(-) create mode 100644 lib-ee/emqx_ee_bridge/i18n/emqx_ee_bridge_dynamo.conf create mode 100644 lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_dynamo.erl create mode 100644 lib-ee/emqx_ee_connector/i18n/emqx_ee_connector_dynamo.conf create mode 100644 lib-ee/emqx_ee_connector/src/emqx_ee_connector_dynamo.erl diff --git a/apps/emqx_bridge/src/emqx_bridge.erl b/apps/emqx_bridge/src/emqx_bridge.erl index 196338336..ddf24d380 100644 --- a/apps/emqx_bridge/src/emqx_bridge.erl +++ b/apps/emqx_bridge/src/emqx_bridge.erl @@ -58,7 +58,12 @@ T == redis_single; T == redis_sentinel; T == redis_cluster; - T == clickhouse + T == clickhouse; + T == pgsql; + T == timescale; + T == matrix; + T == tdengine; + T == dynamo ). load() -> diff --git a/lib-ee/emqx_ee_bridge/i18n/emqx_ee_bridge_dynamo.conf b/lib-ee/emqx_ee_bridge/i18n/emqx_ee_bridge_dynamo.conf new file mode 100644 index 000000000..664b13174 --- /dev/null +++ b/lib-ee/emqx_ee_bridge/i18n/emqx_ee_bridge_dynamo.conf @@ -0,0 +1,72 @@ +emqx_ee_bridge_dynamo { + + local_topic { + desc { + en: """The MQTT topic filter to be forwarded to DynamoDB. All MQTT `PUBLISH` messages with the topic +matching the `local_topic` will be forwarded.
+NOTE: if this bridge is used as the action of a rule (EMQX rule engine), and also `local_topic` is +configured, then both the data got from the rule and the MQTT messages that match `local_topic` +will be forwarded.""" + zh: """发送到 'local_topic' 的消息都会转发到 DynamoDB。
+注意:如果这个 Bridge 被用作规则(EMQX 规则引擎)的输出,同时也配置了 'local_topic' ,那么这两部分的消息都会被转发。""" + } + label { + en: "Local Topic" + zh: "本地 Topic" + } + } + + template { + desc { + en: """Template, the default value is empty. When this value is empty the whole message will be stored in the database""" + zh: """模板, 默认为空,为空时将会将整个消息存入数据库""" + } + label { + en: "Template" + zh: "模板" + } + } + config_enable { + desc { + en: """Enable or disable this bridge""" + zh: """启用/禁用桥接""" + } + label { + en: "Enable Or Disable Bridge" + zh: "启用/禁用桥接" + } + } + + desc_config { + desc { + en: """Configuration for an DynamoDB bridge.""" + zh: """DynamoDB 桥接配置""" + } + label: { + en: "DynamoDB Bridge Configuration" + zh: "DynamoDB 桥接配置" + } + } + + desc_type { + desc { + en: """The Bridge Type""" + zh: """Bridge 类型""" + } + label { + en: "Bridge Type" + zh: "桥接类型" + } + } + + desc_name { + desc { + en: """Bridge name.""" + zh: """桥接名字""" + } + label { + en: "Bridge Name" + zh: "桥接名字" + } + } +} diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl index b7f35537e..b5c656291 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl +++ b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl @@ -30,7 +30,8 @@ api_schemas(Method) -> ref(emqx_ee_bridge_timescale, Method), ref(emqx_ee_bridge_matrix, Method), ref(emqx_ee_bridge_tdengine, Method), - ref(emqx_ee_bridge_clickhouse, Method) + ref(emqx_ee_bridge_clickhouse, Method), + ref(emqx_ee_bridge_dynamo, Method) ]. schema_modules() -> @@ -46,7 +47,8 @@ schema_modules() -> emqx_ee_bridge_timescale, emqx_ee_bridge_matrix, emqx_ee_bridge_tdengine, - emqx_ee_bridge_clickhouse + emqx_ee_bridge_clickhouse, + emqx_ee_bridge_dynamo ]. examples(Method) -> @@ -78,7 +80,8 @@ resource_type(pgsql) -> emqx_connector_pgsql; resource_type(timescale) -> emqx_connector_pgsql; resource_type(matrix) -> emqx_connector_pgsql; resource_type(tdengine) -> emqx_ee_connector_tdengine; -resource_type(clickhouse) -> emqx_ee_connector_clickhouse. +resource_type(clickhouse) -> emqx_ee_connector_clickhouse; +resource_type(dynamo) -> emqx_ee_connector_dynamo. fields(bridges) -> [ @@ -121,6 +124,14 @@ fields(bridges) -> desc => <<"TDengine Bridge Config">>, required => false } + )}, + {dynamo, + mk( + hoconsc:map(name, ref(emqx_ee_bridge_dynamo, "config")), + #{ + desc => <<"Dynamo Bridge Config">>, + required => false + } )} ] ++ mongodb_structs() ++ influxdb_structs() ++ redis_structs() ++ pgsql_structs() ++ clickhouse_structs(). diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_dynamo.erl b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_dynamo.erl new file mode 100644 index 000000000..066b873ce --- /dev/null +++ b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_dynamo.erl @@ -0,0 +1,122 @@ +%%-------------------------------------------------------------------- +%% Copyright (c) 2022 EMQ Technologies Co., Ltd. All Rights Reserved. +%%-------------------------------------------------------------------- +-module(emqx_ee_bridge_dynamo). + +-include_lib("typerefl/include/types.hrl"). +-include_lib("hocon/include/hoconsc.hrl"). +-include_lib("emqx_bridge/include/emqx_bridge.hrl"). +-include_lib("emqx_resource/include/emqx_resource.hrl"). + +-import(hoconsc, [mk/2, enum/1, ref/2]). + +-export([ + conn_bridge_examples/1, + values/1 +]). + +-export([ + namespace/0, + roots/0, + fields/1, + desc/1 +]). + +-define(DEFAULT_TEMPLATE, <<>>). + +%% ------------------------------------------------------------------------------------------------- +%% api + +conn_bridge_examples(Method) -> + [ + #{ + <<"dynamo">> => #{ + summary => <<"DynamoDB Bridge">>, + value => values(Method) + } + } + ]. + +values(get) -> + maps:merge(values(post), ?METRICS_EXAMPLE); +values(post) -> + #{ + enable => true, + type => dynamo, + name => <<"foo">>, + url => <<"http://127.0.0.1:8000">>, + database => <<"mqtt">>, + pool_size => 8, + username => <<"root">>, + password => <<"public">>, + template => ?DEFAULT_TEMPLATE, + local_topic => <<"local/topic/#">>, + resource_opts => #{ + worker_pool_size => 8, + health_check_interval => ?HEALTHCHECK_INTERVAL_RAW, + auto_restart_interval => ?AUTO_RESTART_INTERVAL_RAW, + batch_size => ?DEFAULT_BATCH_SIZE, + batch_time => ?DEFAULT_BATCH_TIME, + query_mode => sync, + max_queue_bytes => ?DEFAULT_QUEUE_SIZE + } + }; +values(put) -> + values(post). + +%% ------------------------------------------------------------------------------------------------- +%% Hocon Schema Definitions +namespace() -> "bridge_dynamo". + +roots() -> []. + +fields("config") -> + [ + {enable, mk(boolean(), #{desc => ?DESC("config_enable"), default => true})}, + {template, + mk( + binary(), + #{desc => ?DESC("template"), default => ?DEFAULT_TEMPLATE} + )}, + {local_topic, + mk( + binary(), + #{desc => ?DESC("local_topic"), default => undefined} + )}, + {resource_opts, + mk( + ref(?MODULE, "creation_opts"), + #{ + required => false, + default => #{}, + desc => ?DESC(emqx_resource_schema, <<"resource_opts">>) + } + )} + ] ++ + (emqx_ee_connector_dynamo:fields(config) -- + emqx_connector_schema_lib:prepare_statement_fields()); +fields("creation_opts") -> + emqx_resource_schema:fields("creation_opts"); +fields("post") -> + [type_field(), name_field() | fields("config")]; +fields("put") -> + fields("config"); +fields("get") -> + emqx_bridge_schema:status_fields() ++ fields("post"). + +desc("config") -> + ?DESC("desc_config"); +desc(Method) when Method =:= "get"; Method =:= "put"; Method =:= "post" -> + ["Configuration for PostgreSQL using `", string:to_upper(Method), "` method."]; +desc("creation_opts" = Name) -> + emqx_resource_schema:desc(Name); +desc(_) -> + undefined. + +%% ------------------------------------------------------------------------------------------------- + +type_field() -> + {type, mk(enum([dynamo]), #{required => true, desc => ?DESC("desc_type")})}. + +name_field() -> + {name, mk(binary(), #{required => true, desc => ?DESC("desc_name")})}. diff --git a/lib-ee/emqx_ee_connector/i18n/emqx_ee_connector_dynamo.conf b/lib-ee/emqx_ee_connector/i18n/emqx_ee_connector_dynamo.conf new file mode 100644 index 000000000..e1fc11e03 --- /dev/null +++ b/lib-ee/emqx_ee_connector/i18n/emqx_ee_connector_dynamo.conf @@ -0,0 +1,14 @@ +emqx_ee_connector_dynamo { + + url { + desc { + en: """The url of DynamoDB endpoint.
""" + zh: """DynamoDB 的地址。
""" + } + label: { + en: "DynamoDB Endpoint" + zh: "DynamoDB 地址" + } + } + +} diff --git a/lib-ee/emqx_ee_connector/rebar.config b/lib-ee/emqx_ee_connector/rebar.config index bcf9508bf..76f6ccfba 100644 --- a/lib-ee/emqx_ee_connector/rebar.config +++ b/lib-ee/emqx_ee_connector/rebar.config @@ -4,6 +4,7 @@ {influxdb, {git, "https://github.com/emqx/influxdb-client-erl", {tag, "1.1.9"}}}, {tdengine, {git, "https://github.com/emqx/tdengine-client-erl", {tag, "0.1.5"}}}, {clickhouse, {git, "https://github.com/emqx/clickhouse-client-erl", {tag, "0.2"}}}, + {erlcloud, {git, "https://github.com/emqx/erlcloud.git", {tag,"3.5.16-emqx-1"}}}, {emqx, {path, "../../apps/emqx"}} ]}. diff --git a/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src b/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src index 6c9d83bc7..5fcb83baa 100644 --- a/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src +++ b/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src @@ -10,7 +10,8 @@ tdengine, wolff, brod, - clickhouse + clickhouse, + erlcloud ]}, {env, []}, {modules, []}, diff --git a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_dynamo.erl b/lib-ee/emqx_ee_connector/src/emqx_ee_connector_dynamo.erl new file mode 100644 index 000000000..957706f6a --- /dev/null +++ b/lib-ee/emqx_ee_connector/src/emqx_ee_connector_dynamo.erl @@ -0,0 +1,345 @@ +%%-------------------------------------------------------------------- +%% Copyright (c) 2023 EMQ Technologies Co., Ltd. All Rights Reserved. +%%-------------------------------------------------------------------- + +-module(emqx_ee_connector_dynamo). + +-behaviour(emqx_resource). + +-include_lib("emqx_resource/include/emqx_resource.hrl"). +-include_lib("typerefl/include/types.hrl"). +-include_lib("emqx/include/logger.hrl"). +-include_lib("snabbkaffe/include/snabbkaffe.hrl"). +-include_lib("hocon/include/hoconsc.hrl"). + +-export([roots/0, fields/1]). + +%% `emqx_resource' API +-export([ + callback_mode/0, + is_buffer_supported/0, + on_start/2, + on_stop/2, + on_query/3, + on_batch_query/3, + on_query_async/4, + on_batch_query_async/4, + on_get_status/2 +]). + +-export([ + connect/1, + do_get_status/1, + do_async_reply/2, + worker_do_query/4, + worker_do_get_status/1 +]). + +-import(hoconsc, [mk/2, enum/1, ref/2]). + +-define(DYNAMO_HOST_OPTIONS, #{ + default_port => 8000 +}). + +-ifdef(TEST). +-export([execute/2]). +-endif. + +%%===================================================================== +%% Hocon schema +roots() -> + [{config, #{type => hoconsc:ref(?MODULE, config)}}]. + +fields(config) -> + [ + {url, mk(binary(), #{required => true, desc => ?DESC("url")})} + | add_default_username( + emqx_connector_schema_lib:relational_db_fields() + ) + ]. + +add_default_username(Fields) -> + lists:map( + fun + ({username, OrigUsernameFn}) -> + {username, add_default_fn(OrigUsernameFn, <<"root">>)}; + (Field) -> + Field + end, + Fields + ). + +add_default_fn(OrigFn, Default) -> + fun + (default) -> Default; + (Field) -> OrigFn(Field) + end. + +%%======================================================================================== +%% `emqx_resource' API +%%======================================================================================== + +callback_mode() -> async_if_possible. + +is_buffer_supported() -> false. + +on_start( + InstanceId, + #{ + url := Url, + username := Username, + password := Password, + database := Database, + pool_size := PoolSize + } = Config +) -> + ?SLOG(info, #{ + msg => "starting_dynamo_connector", + connector => InstanceId, + config => emqx_misc:redact(Config) + }), + + {Schema, Server} = get_host_schema(to_str(Url)), + {Host, Port} = emqx_schema:parse_server(Server, ?DYNAMO_HOST_OPTIONS), + + Options = [ + {config, #{ + host => Host, + port => Port, + username => to_str(Username), + password => to_str(Password), + schema => Schema + }}, + {pool_size, PoolSize} + ], + + Templates = parse_template(Config), + State = #{ + poolname => InstanceId, + database => Database, + templates => Templates + }, + case emqx_plugin_libs_pool:start_pool(InstanceId, ?MODULE, Options) of + ok -> + {ok, State}; + Error -> + Error + end. + +on_stop(InstanceId, #{poolname := PoolName} = _State) -> + ?SLOG(info, #{ + msg => "stopping_dynamo_connector", + connector => InstanceId + }), + emqx_plugin_libs_pool:stop_pool(PoolName). + +on_query(InstanceId, Query, State) -> + do_query(InstanceId, Query, handover, State). + +on_query_async(InstanceId, Query, Reply, State) -> + do_query( + InstanceId, + Query, + {handover_async, {?MODULE, do_async_reply, [Reply]}}, + State + ). + +%% we only support batch insert +on_batch_query(InstanceId, [{send_message, _} | _] = Query, State) -> + do_query(InstanceId, Query, handover, State); +on_batch_query(_InstanceId, Query, _State) -> + {error, {unrecoverable_error, {invalid_request, Query}}}. + +%% we only support batch insert +on_batch_query_async(InstanceId, [{send_message, _} | _] = Query, Reply, State) -> + do_query( + InstanceId, + Query, + {handover_async, {?MODULE, do_async_reply, [Reply]}}, + State + ); +on_batch_query_async(_InstanceId, Query, _Reply, _State) -> + {error, {unrecoverable_error, {invalid_request, Query}}}. + +on_get_status(_InstanceId, #{poolname := Pool}) -> + Health = emqx_plugin_libs_pool:health_check_ecpool_workers(Pool, fun ?MODULE:do_get_status/1), + status_result(Health). + +do_get_status(Conn) -> + %% because the dynamodb driver connection process is the ecpool worker self + %% so we must call the checker function inside the worker + ListTables = ecpool_worker:exec(Conn, {?MODULE, worker_do_get_status, []}, infinity), + case ListTables of + {ok, _} -> true; + _ -> false + end. + +worker_do_get_status(_) -> + erlcloud_ddb2:list_tables(). + +status_result(_Status = true) -> connected; +status_result(_Status = false) -> connecting. + +%%======================================================================================== +%% Helper fns +%%======================================================================================== + +do_query( + InstanceId, + Query, + ApplyMode, + #{poolname := PoolName, templates := Templates, database := Database} = State +) -> + ?TRACE( + "QUERY", + "dynamo_connector_received", + #{connector => InstanceId, query => Query, state => State} + ), + Result = ecpool:pick_and_do( + PoolName, + {?MODULE, worker_do_query, [Database, Query, Templates]}, + ApplyMode + ), + + case Result of + {error, Reason} -> + ?tp( + dynamo_connector_query_return, + #{error => Reason} + ), + ?SLOG(error, #{ + msg => "dynamo_connector_do_query_failed", + connector => InstanceId, + query => Query, + reason => Reason + }), + Result; + _ -> + ?tp( + dynamo_connector_query_return, + #{result => Result} + ), + Result + end. + +worker_do_query(_Client, Database, Query0, Templates) -> + try + Query = apply_template(Query0, Templates), + execute(Query, Database) + catch + _Type:Reason -> + {error, {unrecoverable_error, {invalid_request, Reason}}} + end. + +%% some simple query commands for authn/authz or test +execute({insert_item, Msg}, Database) -> + Item = convert_to_item(Msg), + erlcloud_ddb2:put_item(Database, Item); +execute({delete_item, Key}, Database) -> + erlcloud_ddb2:delete_item(Database, Key); +execute({get_item, Key}, Database) -> + erlcloud_ddb2:get_item(Database, Key); +%% commands for data bridge query or batch query +execute({send_message, Msg}, Database) -> + Item = convert_to_item(Msg), + erlcloud_ddb2:put_item(Database, Item); +execute([{put, _} | _] = Msgs, Database) -> + %% type of batch_write_item argument :: batch_write_item_request_items() + %% batch_write_item_request_items() :: maybe_list(batch_write_item_request_item()) + %% batch_write_item_request_item() :: {table_name(), list(batch_write_item_request())} + %% batch_write_item_request() :: {put, item()} | {delete, key()} + erlcloud_ddb2:batch_write_item({Database, Msgs}). + +connect(Opts) -> + #{ + username := Username, + password := Password, + host := Host, + port := Port, + schema := Schema + } = proplists:get_value(config, Opts), + erlcloud_ddb2:configure(Username, Password, Host, Port, Schema), + + %% The dynamodb driver uses caller process as its connection process + %% so at here, the connection process is the ecpool worker self + {ok, self()}. + +parse_template(Config) -> + Templates = + case maps:get(template, Config, undefined) of + undefined -> #{}; + <<>> -> #{}; + Template -> #{send_message => Template} + end, + + parse_template(maps:to_list(Templates), #{}). + +parse_template([{Key, H} | T], Templates) -> + ParamsTks = emqx_plugin_libs_rule:preproc_tmpl(H), + parse_template( + T, + Templates#{Key => ParamsTks} + ); +parse_template([], Templates) -> + Templates. + +to_str(List) when is_list(List) -> + List; +to_str(Bin) when is_binary(Bin) -> + erlang:binary_to_list(Bin). + +get_host_schema("http://" ++ Server) -> + {"http://", Server}; +get_host_schema("https://" ++ Server) -> + {"https://", Server}; +get_host_schema(Server) -> + {"http://", Server}. + +apply_template({Key, Msg} = Req, Templates) -> + case maps:get(Key, Templates, undefined) of + undefined -> + Req; + Template -> + {Key, emqx_plugin_libs_rule:proc_tmpl(Template, Msg)} + end; +%% now there is no batch delete, so +%% 1. we can simply replace the `send_message` to `put` +%% 2. convert the message to in_item() here, not at the time when calling `batch_write_items`, +%% so we can reduce some list map cost +apply_template([{send_message, _Msg} | _] = Msgs, Templates) -> + lists:map( + fun(Req) -> + {_, Msg} = apply_template(Req, Templates), + {put, convert_to_item(Msg)} + end, + Msgs + ). + +convert_to_item(Msg) when is_map(Msg), map_size(Msg) > 0 -> + maps:fold( + fun + (_K, <<>>, AccIn) -> + AccIn; + (K, V, AccIn) -> + [{convert2binary(K), convert2binary(V)} | AccIn] + end, + [], + Msg + ); +convert_to_item(MsgBin) when is_binary(MsgBin) -> + Msg = emqx_json:decode(MsgBin), + convert_to_item(Msg); +convert_to_item(Item) -> + erlang:throw({invalid_item, Item}). + +convert2binary(Value) when is_atom(Value) -> + erlang:atom_to_binary(Value, utf8); +convert2binary(Value) when is_binary(Value); is_number(Value) -> + Value; +convert2binary(Value) when is_list(Value) -> + unicode:characters_to_binary(Value); +convert2binary(Value) when is_map(Value) -> + emqx_json:encode(Value). + +do_async_reply(Result, {ReplyFun, [Context]}) -> + ReplyFun(Context, Result). From bfc2920a5521e62a1fa24e0d0cbbd66038c0b3c1 Mon Sep 17 00:00:00 2001 From: firest Date: Mon, 6 Mar 2023 10:51:27 +0800 Subject: [PATCH 56/96] feat(bridges): introduce DynamoDB definition files from v4 --- .../emqx_ee_bridge/priv/dynamo/mqtt_acked.json | 15 +++++++++++++++ .../emqx_ee_bridge/priv/dynamo/mqtt_client.json | 13 +++++++++++++ .../priv/dynamo/mqtt_clientid_msg_map.json | 13 +++++++++++++ lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_msg.json | 13 +++++++++++++ .../emqx_ee_bridge/priv/dynamo/mqtt_retain.json | 13 +++++++++++++ lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_sub.json | 16 ++++++++++++++++ .../priv/dynamo/mqtt_topic_msg_map.json | 13 +++++++++++++ 7 files changed, 96 insertions(+) create mode 100644 lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_acked.json create mode 100644 lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_client.json create mode 100644 lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_clientid_msg_map.json create mode 100644 lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_msg.json create mode 100644 lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_retain.json create mode 100644 lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_sub.json create mode 100644 lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_topic_msg_map.json diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_acked.json b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_acked.json new file mode 100644 index 000000000..6ede088a4 --- /dev/null +++ b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_acked.json @@ -0,0 +1,15 @@ +{ + "TableName": "mqtt_acked", + "KeySchema": [ + { "AttributeName": "topic", "KeyType": "HASH" }, + { "AttributeName": "clientid", "KeyType": "RANGE" } + ], + "AttributeDefinitions": [ + { "AttributeName": "topic", "AttributeType": "S" }, + { "AttributeName": "clientid", "AttributeType": "S" } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + } +} diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_client.json b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_client.json new file mode 100644 index 000000000..ce1b7d267 --- /dev/null +++ b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_client.json @@ -0,0 +1,13 @@ +{ + "TableName": "mqtt_client", + "KeySchema": [ + { "AttributeName": "clientid", "KeyType": "HASH" } + ], + "AttributeDefinitions": [ + { "AttributeName": "clientid", "AttributeType": "S" } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + } +} diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_clientid_msg_map.json b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_clientid_msg_map.json new file mode 100644 index 000000000..fd703c664 --- /dev/null +++ b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_clientid_msg_map.json @@ -0,0 +1,13 @@ +{ + "TableName": "mqtt_clientid_msg_map", + "KeySchema": [ + { "AttributeName": "clientid", "KeyType": "HASH" } + ], + "AttributeDefinitions": [ + { "AttributeName": "clientid", "AttributeType": "S" } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + } +} diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_msg.json b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_msg.json new file mode 100644 index 000000000..ad94b8f72 --- /dev/null +++ b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_msg.json @@ -0,0 +1,13 @@ +{ + "TableName": "mqtt_msg", + "KeySchema": [ + { "AttributeName": "id", "KeyType": "HASH" } + ], + "AttributeDefinitions": [ + { "AttributeName": "id", "AttributeType": "S" } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + } +} diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_retain.json b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_retain.json new file mode 100644 index 000000000..2a0af2e86 --- /dev/null +++ b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_retain.json @@ -0,0 +1,13 @@ +{ + "TableName": "mqtt_retain", + "KeySchema": [ + { "AttributeName": "topic", "KeyType": "HASH" } + ], + "AttributeDefinitions": [ + { "AttributeName": "topic", "AttributeType": "S" } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + } +} diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_sub.json b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_sub.json new file mode 100644 index 000000000..9a559f048 --- /dev/null +++ b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_sub.json @@ -0,0 +1,16 @@ +{ + "TableName": "mqtt_sub", + "KeySchema": [ + { "AttributeName": "clientid", "KeyType": "HASH" }, + { "AttributeName": "topic", "KeyType": "RANGE" } + ], + "AttributeDefinitions": [ + { "AttributeName": "clientid", "AttributeType": "S" }, + { "AttributeName": "topic", "AttributeType": "S" } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + } +} + diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_topic_msg_map.json b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_topic_msg_map.json new file mode 100644 index 000000000..effd4b4b9 --- /dev/null +++ b/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_topic_msg_map.json @@ -0,0 +1,13 @@ +{ + "TableName": "mqtt_topic_msg_map", + "KeySchema": [ + { "AttributeName": "topic", "KeyType": "HASH" } + ], + "AttributeDefinitions": [ + { "AttributeName": "topic", "AttributeType": "S" } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + } +} From 984dd3446d55a7f5cb54c0e897b1f3ac3b5b1e9d Mon Sep 17 00:00:00 2001 From: firest Date: Tue, 7 Mar 2023 16:33:36 +0800 Subject: [PATCH 57/96] test(bridges): add test suite for DynamoDB --- .ci/docker-compose-file/.env | 1 + .../docker-compose-dynamo.yaml | 15 + .../docker-compose-toxiproxy.yaml | 1 + .ci/docker-compose-file/toxiproxy.json | 6 + lib-ee/emqx_ee_bridge/docker-ct | 1 + .../test/emqx_ee_bridge_dynamo_SUITE.erl | 422 ++++++++++++++++++ scripts/ct/run.sh | 3 + 7 files changed, 449 insertions(+) create mode 100644 .ci/docker-compose-file/docker-compose-dynamo.yaml create mode 100644 lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_dynamo_SUITE.erl diff --git a/.ci/docker-compose-file/.env b/.ci/docker-compose-file/.env index e3beb1bc7..397c44854 100644 --- a/.ci/docker-compose-file/.env +++ b/.ci/docker-compose-file/.env @@ -5,5 +5,6 @@ PGSQL_TAG=13 LDAP_TAG=2.4.50 INFLUXDB_TAG=2.5.0 TDENGINE_TAG=3.0.2.4 +DYNAMO_TAG=1.21.0 TARGET=emqx/emqx diff --git a/.ci/docker-compose-file/docker-compose-dynamo.yaml b/.ci/docker-compose-file/docker-compose-dynamo.yaml new file mode 100644 index 000000000..926d6287c --- /dev/null +++ b/.ci/docker-compose-file/docker-compose-dynamo.yaml @@ -0,0 +1,15 @@ +version: '3.9' + +services: + dynamodb-local: + container_name: dynamo + image: amazon/dynamodb-local:${DYNAMO_TAG} + restart: always + ports: + - "8000:8000" + environment: + AWS_ACCESS_KEY_ID: root + AWS_SECRET_ACCESS_KEY: public + AWS_DEFAULT_REGION: us-west-2 + networks: + - emqx_bridge diff --git a/.ci/docker-compose-file/docker-compose-toxiproxy.yaml b/.ci/docker-compose-file/docker-compose-toxiproxy.yaml index 3f526978e..3dd30af52 100644 --- a/.ci/docker-compose-file/docker-compose-toxiproxy.yaml +++ b/.ci/docker-compose-file/docker-compose-toxiproxy.yaml @@ -18,6 +18,7 @@ services: - 15432:5432 - 15433:5433 - 16041:6041 + - 18000:8000 command: - "-host=0.0.0.0" - "-config=/config/toxiproxy.json" diff --git a/.ci/docker-compose-file/toxiproxy.json b/.ci/docker-compose-file/toxiproxy.json index e26134ec8..6188eab17 100644 --- a/.ci/docker-compose-file/toxiproxy.json +++ b/.ci/docker-compose-file/toxiproxy.json @@ -47,5 +47,11 @@ "listen": "0.0.0.0:6041", "upstream": "tdengine:6041", "enabled": true + }, + { + "name": "dynamo", + "listen": "0.0.0.0:8000", + "upstream": "dynamo:8000", + "enabled": true } ] diff --git a/lib-ee/emqx_ee_bridge/docker-ct b/lib-ee/emqx_ee_bridge/docker-ct index 91a937b5c..ac1728ad2 100644 --- a/lib-ee/emqx_ee_bridge/docker-ct +++ b/lib-ee/emqx_ee_bridge/docker-ct @@ -9,3 +9,4 @@ redis_cluster pgsql tdengine clickhouse +dynamo diff --git a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_dynamo_SUITE.erl b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_dynamo_SUITE.erl new file mode 100644 index 000000000..26666c6d8 --- /dev/null +++ b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_dynamo_SUITE.erl @@ -0,0 +1,422 @@ +%%-------------------------------------------------------------------- +%% Copyright (c) 2022-2023 EMQ Technologies Co., Ltd. All Rights Reserved. +%%-------------------------------------------------------------------- + +-module(emqx_ee_bridge_dynamo_SUITE). + +-compile(nowarn_export_all). +-compile(export_all). + +-include_lib("eunit/include/eunit.hrl"). +-include_lib("common_test/include/ct.hrl"). +-include_lib("snabbkaffe/include/snabbkaffe.hrl"). + +% DB defaults +-define(TABLE, "mqtt"). +-define(TABLE_BIN, to_bin(?TABLE)). +-define(USERNAME, "root"). +-define(PASSWORD, "public"). +-define(HOST, "dynamo"). +-define(PORT, 8000). +-define(SCHEMA, "http://"). +-define(BATCH_SIZE, 10). +-define(PAYLOAD, <<"HELLO">>). + +-define(GET_CONFIG(KEY__, CFG__), proplists:get_value(KEY__, CFG__)). + +%%------------------------------------------------------------------------------ +%% CT boilerplate +%%------------------------------------------------------------------------------ + +all() -> + [ + {group, with_batch}, + {group, without_batch}, + {group, flaky} + ]. + +groups() -> + TCs0 = emqx_common_test_helpers:all(?MODULE), + + %% due to the poorly implemented driver or other reasons + %% if we mix these cases with others, this suite will become flaky. + Flaky = [t_get_status, t_write_failure, t_write_timeout], + TCs = TCs0 -- Flaky, + + [ + {with_batch, TCs}, + {without_batch, TCs}, + {flaky, Flaky} + ]. + +init_per_group(with_batch, Config0) -> + Config = [{batch_size, ?BATCH_SIZE} | Config0], + common_init(Config); +init_per_group(without_batch, Config0) -> + Config = [{batch_size, 1} | Config0], + common_init(Config); +init_per_group(flaky, Config0) -> + Config = [{batch_size, 1} | Config0], + common_init(Config); +init_per_group(_Group, Config) -> + Config. + +end_per_group(Group, Config) when Group =:= with_batch; Group =:= without_batch -> + ProxyHost = ?config(proxy_host, Config), + ProxyPort = ?config(proxy_port, Config), + emqx_common_test_helpers:reset_proxy(ProxyHost, ProxyPort), + ok; +end_per_group(Group, Config) when Group =:= flaky -> + ProxyHost = ?config(proxy_host, Config), + ProxyPort = ?config(proxy_port, Config), + emqx_common_test_helpers:reset_proxy(ProxyHost, ProxyPort), + timer:sleep(1000), + ok; +end_per_group(_Group, _Config) -> + ok. + +init_per_suite(Config) -> + Config. + +end_per_suite(_Config) -> + emqx_mgmt_api_test_util:end_suite(), + ok = emqx_common_test_helpers:stop_apps([emqx_bridge, emqx_conf]), + ok. + +init_per_testcase(_Testcase, Config) -> + create_table(Config), + Config. + +end_per_testcase(_Testcase, Config) -> + ProxyHost = ?config(proxy_host, Config), + ProxyPort = ?config(proxy_port, Config), + emqx_common_test_helpers:reset_proxy(ProxyHost, ProxyPort), + ok = snabbkaffe:stop(), + delete_table(Config), + delete_bridge(Config), + ok. + +%%------------------------------------------------------------------------------ +%% Helper fns +%%------------------------------------------------------------------------------ + +common_init(ConfigT) -> + Host = os:getenv("DYNAMO_HOST", "toxiproxy"), + Port = list_to_integer(os:getenv("DYNAMO_PORT", "8000")), + + Config0 = [ + {host, Host}, + {port, Port}, + {query_mode, sync}, + {proxy_name, "dynamo"} + | ConfigT + ], + + BridgeType = proplists:get_value(bridge_type, Config0, <<"dynamo">>), + case emqx_common_test_helpers:is_tcp_server_available(Host, Port) of + true -> + % Setup toxiproxy + ProxyHost = os:getenv("PROXY_HOST", "toxiproxy"), + ProxyPort = list_to_integer(os:getenv("PROXY_PORT", "8474")), + emqx_common_test_helpers:reset_proxy(ProxyHost, ProxyPort), + % Ensure EE bridge module is loaded + _ = application:load(emqx_ee_bridge), + _ = emqx_ee_bridge:module_info(), + ok = emqx_common_test_helpers:start_apps([emqx_conf, emqx_bridge]), + emqx_mgmt_api_test_util:init_suite(), + % setup dynamo + setup_dynamo(Config0), + {Name, TDConf} = dynamo_config(BridgeType, Config0), + Config = + [ + {dynamo_config, TDConf}, + {dynamo_bridge_type, BridgeType}, + {dynamo_name, Name}, + {proxy_host, ProxyHost}, + {proxy_port, ProxyPort} + | Config0 + ], + Config; + false -> + case os:getenv("IS_CI") of + "yes" -> + throw(no_dynamo); + _ -> + {skip, no_dynamo} + end + end. + +dynamo_config(BridgeType, Config) -> + Port = integer_to_list(?GET_CONFIG(port, Config)), + Url = "http://" ++ ?GET_CONFIG(host, Config) ++ ":" ++ Port, + Name = atom_to_binary(?MODULE), + BatchSize = ?GET_CONFIG(batch_size, Config), + QueryMode = ?GET_CONFIG(query_mode, Config), + ConfigString = + io_lib:format( + "bridges.~s.~s {\n" + " enable = true\n" + " url = ~p\n" + " database = ~p\n" + " username = ~p\n" + " password = ~p\n" + " resource_opts = {\n" + " request_timeout = 500ms\n" + " batch_size = ~b\n" + " query_mode = ~s\n" + " }\n" + "}", + [ + BridgeType, + Name, + Url, + ?TABLE, + ?USERNAME, + ?PASSWORD, + BatchSize, + QueryMode + ] + ), + {Name, parse_and_check(ConfigString, BridgeType, Name)}. + +parse_and_check(ConfigString, BridgeType, Name) -> + {ok, RawConf} = hocon:binary(ConfigString, #{format => map}), + hocon_tconf:check_plain(emqx_bridge_schema, RawConf, #{required => false, atom_key => false}), + #{<<"bridges">> := #{BridgeType := #{Name := Config}}} = RawConf, + Config. + +create_bridge(Config) -> + BridgeType = ?config(dynamo_bridge_type, Config), + Name = ?config(dynamo_name, Config), + TDConfig = ?config(dynamo_config, Config), + emqx_bridge:create(BridgeType, Name, TDConfig). + +delete_bridge(Config) -> + BridgeType = ?config(dynamo_bridge_type, Config), + Name = ?config(dynamo_name, Config), + emqx_bridge:remove(BridgeType, Name). + +create_bridge_http(Params) -> + Path = emqx_mgmt_api_test_util:api_path(["bridges"]), + AuthHeader = emqx_mgmt_api_test_util:auth_header_(), + case emqx_mgmt_api_test_util:request_api(post, Path, "", AuthHeader, Params) of + {ok, Res} -> {ok, emqx_json:decode(Res, [return_maps])}; + Error -> Error + end. + +send_message(Config, Payload) -> + Name = ?config(dynamo_name, Config), + BridgeType = ?config(dynamo_bridge_type, Config), + BridgeID = emqx_bridge_resource:bridge_id(BridgeType, Name), + emqx_bridge:send_message(BridgeID, Payload). + +query_resource(Config, Request) -> + Name = ?config(dynamo_name, Config), + BridgeType = ?config(dynamo_bridge_type, Config), + ResourceID = emqx_bridge_resource:resource_id(BridgeType, Name), + emqx_resource:query(ResourceID, Request, #{timeout => 1_000}). + +%% create a table, use the lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_msg.json as template +create_table(Config) -> + directly_setup_dynamo(), + delete_table(Config), + ?assertMatch( + {ok, _}, + erlcloud_ddb2:create_table( + ?TABLE_BIN, + [{<<"id">>, s}], + <<"id">>, + [{provisioned_throughput, {5, 5}}] + ) + ). + +delete_table(_Config) -> + erlcloud_ddb2:delete_table(?TABLE_BIN). + +setup_dynamo(Config) -> + Host = ?GET_CONFIG(host, Config), + Port = ?GET_CONFIG(port, Config), + erlcloud_ddb2:configure(?USERNAME, ?PASSWORD, Host, Port, ?SCHEMA). + +directly_setup_dynamo() -> + erlcloud_ddb2:configure(?USERNAME, ?PASSWORD, ?HOST, ?PORT, ?SCHEMA). + +directly_query(Query) -> + directly_setup_dynamo(), + emqx_ee_connector_dynamo:execute(Query, ?TABLE_BIN). + +directly_get_payload(Key) -> + case directly_query({get_item, {<<"id">>, Key}}) of + {ok, Values} -> + proplists:get_value(<<"payload">>, Values, {error, {invalid_item, Values}}); + Error -> + Error + end. + +%%------------------------------------------------------------------------------ +%% Testcases +%%------------------------------------------------------------------------------ + +t_setup_via_config_and_publish(Config) -> + ?assertNotEqual(undefined, get(aws_config)), + create_table(Config), + ?assertMatch( + {ok, _}, + create_bridge(Config) + ), + MsgId = emqx_misc:gen_id(), + SentData = #{id => MsgId, payload => ?PAYLOAD}, + ?check_trace( + begin + ?wait_async_action( + ?assertMatch( + {ok, _}, send_message(Config, SentData) + ), + #{?snk_kind := dynamo_connector_query_return}, + 10_000 + ), + ?assertMatch( + ?PAYLOAD, + directly_get_payload(MsgId) + ), + ok + end, + fun(Trace0) -> + Trace = ?of_kind(dynamo_connector_query_return, Trace0), + ?assertMatch([#{result := {ok, _}}], Trace), + ok + end + ), + ok. + +t_setup_via_http_api_and_publish(Config) -> + BridgeType = ?config(dynamo_bridge_type, Config), + Name = ?config(dynamo_name, Config), + PgsqlConfig0 = ?config(dynamo_config, Config), + PgsqlConfig = PgsqlConfig0#{ + <<"name">> => Name, + <<"type">> => BridgeType + }, + ?assertMatch( + {ok, _}, + create_bridge_http(PgsqlConfig) + ), + MsgId = emqx_misc:gen_id(), + SentData = #{id => MsgId, payload => ?PAYLOAD}, + ?check_trace( + begin + ?wait_async_action( + ?assertMatch( + {ok, _}, send_message(Config, SentData) + ), + #{?snk_kind := dynamo_connector_query_return}, + 10_000 + ), + ?assertMatch( + ?PAYLOAD, + directly_get_payload(MsgId) + ), + ok + end, + fun(Trace0) -> + Trace = ?of_kind(dynamo_connector_query_return, Trace0), + ?assertMatch([#{result := {ok, _}}], Trace), + ok + end + ), + ok. + +t_get_status(Config) -> + ?assertMatch( + {ok, _}, + create_bridge(Config) + ), + + ProxyPort = ?config(proxy_port, Config), + ProxyHost = ?config(proxy_host, Config), + ProxyName = ?config(proxy_name, Config), + + Name = ?config(dynamo_name, Config), + BridgeType = ?config(dynamo_bridge_type, Config), + ResourceID = emqx_bridge_resource:resource_id(BridgeType, Name), + + ?assertEqual({ok, connected}, emqx_resource_manager:health_check(ResourceID)), + emqx_common_test_helpers:with_failure(down, ProxyName, ProxyHost, ProxyPort, fun() -> + case emqx_resource_manager:health_check(ResourceID) of + {ok, Status} when Status =:= disconnected orelse Status =:= connecting -> + ok; + {error, timeout} -> + ok; + Other -> + ?assert( + false, lists:flatten(io_lib:format("invalid health check result:~p~n", [Other])) + ) + end + end), + ok. + +t_write_failure(Config) -> + ProxyName = ?config(proxy_name, Config), + ProxyPort = ?config(proxy_port, Config), + ProxyHost = ?config(proxy_host, Config), + {ok, _} = create_bridge(Config), + SentData = #{id => emqx_misc:gen_id(), payload => ?PAYLOAD}, + emqx_common_test_helpers:with_failure(down, ProxyName, ProxyHost, ProxyPort, fun() -> + ?assertMatch( + {error, {resource_error, #{reason := timeout}}}, send_message(Config, SentData) + ) + end), + ok. + +t_write_timeout(Config) -> + ProxyName = ?config(proxy_name, Config), + ProxyPort = ?config(proxy_port, Config), + ProxyHost = ?config(proxy_host, Config), + {ok, _} = create_bridge(Config), + SentData = #{id => emqx_misc:gen_id(), payload => ?PAYLOAD}, + emqx_common_test_helpers:with_failure(timeout, ProxyName, ProxyHost, ProxyPort, fun() -> + ?assertMatch( + {error, {resource_error, #{reason := timeout}}}, + query_resource(Config, {send_message, SentData}) + ) + end), + ok. + +t_simple_query(Config) -> + ?assertMatch( + {ok, _}, + create_bridge(Config) + ), + Request = {get_item, {<<"id">>, <<"not_exists">>}}, + Result = query_resource(Config, Request), + case ?GET_CONFIG(batch_size, Config) of + ?BATCH_SIZE -> + ?assertMatch({error, {unrecoverable_error, {invalid_request, _}}}, Result); + 1 -> + ?assertMatch({ok, []}, Result) + end, + ok. + +t_missing_data(Config) -> + ?assertMatch( + {ok, _}, + create_bridge(Config) + ), + Result = send_message(Config, #{}), + ?assertMatch({error, {unrecoverable_error, {invalid_request, _}}}, Result), + ok. + +t_bad_parameter(Config) -> + ?assertMatch( + {ok, _}, + create_bridge(Config) + ), + Request = {insert_item, bad_parameter}, + Result = query_resource(Config, Request), + ?assertMatch({error, {unrecoverable_error, {invalid_request, _}}}, Result), + ok. + +to_bin(List) when is_list(List) -> + unicode:characters_to_binary(List, utf8); +to_bin(Bin) when is_binary(Bin) -> + Bin. diff --git a/scripts/ct/run.sh b/scripts/ct/run.sh index 7e4c06c3e..b3c424ea1 100755 --- a/scripts/ct/run.sh +++ b/scripts/ct/run.sh @@ -165,6 +165,9 @@ for dep in ${CT_DEPS}; do clickhouse) FILES+=( '.ci/docker-compose-file/docker-compose-clickhouse.yaml' ) ;; + dynamo) + FILES+=( '.ci/docker-compose-file/docker-compose-dynamo.yaml' ) + ;; *) echo "unknown_ct_dependency $dep" exit 1 From 4ee42bfd1f3ec35695985f945eb0088266995415 Mon Sep 17 00:00:00 2001 From: firest Date: Tue, 7 Mar 2023 17:05:11 +0800 Subject: [PATCH 58/96] chore: update changes --- changes/ee/feat-10083.en.md | 1 + changes/ee/feat-10083.zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/ee/feat-10083.en.md create mode 100644 changes/ee/feat-10083.zh.md diff --git a/changes/ee/feat-10083.en.md b/changes/ee/feat-10083.en.md new file mode 100644 index 000000000..635549d5e --- /dev/null +++ b/changes/ee/feat-10083.en.md @@ -0,0 +1 @@ +Integrate `DynamoDB` into `bridges` as a new backend. diff --git a/changes/ee/feat-10083.zh.md b/changes/ee/feat-10083.zh.md new file mode 100644 index 000000000..061e2e416 --- /dev/null +++ b/changes/ee/feat-10083.zh.md @@ -0,0 +1 @@ +在 `桥接` 中集成 `DynamoDB`。 From 3463cd0d371b0f645fee059d13bc15ee19803cf4 Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Thu, 9 Mar 2023 09:30:25 +0100 Subject: [PATCH 59/96] refactor: generate document related artifacts to _build/docgen --- apps/emqx_conf/src/emqx_conf.erl | 3 +-- build | 3 ++- rebar.config.erl | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/emqx_conf/src/emqx_conf.erl b/apps/emqx_conf/src/emqx_conf.erl index 00648db31..3da9f0457 100644 --- a/apps/emqx_conf/src/emqx_conf.erl +++ b/apps/emqx_conf/src/emqx_conf.erl @@ -146,8 +146,7 @@ dump_schema(Dir, SchemaModule, I18nFile) -> fun(Lang) -> gen_config_md(Dir, I18nFile, SchemaModule, Lang), gen_api_schema_json(Dir, I18nFile, Lang), - ExampleDir = filename:join(filename:dirname(filename:dirname(I18nFile)), "etc"), - gen_example_conf(ExampleDir, I18nFile, SchemaModule, Lang) + gen_example_conf(Dir, I18nFile, SchemaModule, Lang) end, [en, zh] ), diff --git a/build b/build index de00aba6c..d473f84df 100755 --- a/build +++ b/build @@ -112,9 +112,10 @@ make_docs() { SCHEMA_MODULE='emqx_conf_schema' ;; esac + mkdir -p _build/docgen # shellcheck disable=SC2086 erl -noshell -pa $libs_dir1 $libs_dir2 $libs_dir3 -eval \ - "Dir = filename:join([apps, emqx_dashboard, priv, www, static]), \ + "Dir = filename:join(['_build', docgen]), \ I18nFile = filename:join([apps, emqx_dashboard, priv, 'i18n.conf']), \ ok = emqx_conf:dump_schema(Dir, $SCHEMA_MODULE, I18nFile), \ halt(0)." diff --git a/rebar.config.erl b/rebar.config.erl index 9d9b0f874..c64f3dda2 100644 --- a/rebar.config.erl +++ b/rebar.config.erl @@ -462,7 +462,7 @@ etc_overlay(ReleaseType, Edition) -> [ {mkdir, "etc/"}, {copy, "{{base_dir}}/lib/emqx/etc/certs", "etc/"}, - {copy, "apps/emqx_dashboard/etc/emqx.conf.en.example", "etc/emqx-example.conf"} + {copy, "_build/docgen/emqx.conf.en.example", "etc/emqx.conf.example"} ] ++ lists:map( fun From 1264254f23543095f2efb4c71ab16576c79b989b Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Thu, 9 Mar 2023 14:26:47 +0100 Subject: [PATCH 60/96] build: release hot config and bridge schema json files --- build | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build b/build index d473f84df..f18d41ef6 100755 --- a/build +++ b/build @@ -112,13 +112,15 @@ make_docs() { SCHEMA_MODULE='emqx_conf_schema' ;; esac - mkdir -p _build/docgen + mkdir -p _build/docgen apps/emqx_dashboard/priv/www/static/ # shellcheck disable=SC2086 erl -noshell -pa $libs_dir1 $libs_dir2 $libs_dir3 -eval \ "Dir = filename:join(['_build', docgen]), \ I18nFile = filename:join([apps, emqx_dashboard, priv, 'i18n.conf']), \ ok = emqx_conf:dump_schema(Dir, $SCHEMA_MODULE, I18nFile), \ halt(0)." + cp _build/docgen/bridge-api-*.json apps/emqx_dashboard/priv/www/static/ + cp _build/docgen/hot-config-schema-*.json apps/emqx_dashboard/priv/www/static/ } assert_no_compile_time_only_deps() { From aa57ea9ee120eb7db6ac90ba822e0fe76bf7808d Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Wed, 8 Mar 2023 18:06:36 +0100 Subject: [PATCH 61/96] fix: mongodb authz crash This fixes a crash with an error in the log file (see below) that happened when the MongoDB authorization module queried the database. The reason is that the collection name that was sent to the mongodb connection was an atom. This is fixed by making sure it is not an atom. 2023-03-08T17:16:34.215523+01:00 [error] msg: query_mongo_error, mfa: emqx_authz_mongodb:authorize/4, line: 95, peername: 127.0.0.1:53212, clientid: client123, collection: mqtt_acl, filter: #{username => <<"emqx_u">>}, reason: {resource_error,#{msg => #{error => {error,{error_cannot_parse_response,{op_msg_response,#{<<"code">> => 73,<<"codeName">> => <<"InvalidNamespace">>,<<"errmsg">> => <<"Failed to parse namespace element">>,<<"ok">> => 0.0}}}},id => <<"emqx_authz_mongodb:3">>,name => call_query,request => {find,mqtt_acl,#{username => <<"emqx_u">>},#{}},stacktrace => [{mc_connection_man,reply,1,[{file,"mc_connection_man.erl"},{line,123}], ...]}, reason => exception}}, resource_id: <<"emqx_authz_mongodb:3">> Fixes: https://github.com/emqx/emqx/issues/9783 --- apps/emqx_authz/src/emqx_authz_schema.erl | 2 +- changes/ce/fix-10098.en.md | 1 + changes/ce/fix-10098.zh.md | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 changes/ce/fix-10098.en.md create mode 100644 changes/ce/fix-10098.zh.md diff --git a/apps/emqx_authz/src/emqx_authz_schema.erl b/apps/emqx_authz/src/emqx_authz_schema.erl index e68ab3a50..b15d4abd4 100644 --- a/apps/emqx_authz/src/emqx_authz_schema.erl +++ b/apps/emqx_authz/src/emqx_authz_schema.erl @@ -240,7 +240,7 @@ http_common_fields() -> mongo_common_fields() -> [ {collection, - ?HOCON(atom(), #{ + ?HOCON(binary(), #{ required => true, desc => ?DESC(collection) })}, diff --git a/changes/ce/fix-10098.en.md b/changes/ce/fix-10098.en.md new file mode 100644 index 000000000..61058da0a --- /dev/null +++ b/changes/ce/fix-10098.en.md @@ -0,0 +1 @@ +A crash with an error in the log file that happened when the MongoDB authorization module queried the database has been fixed. diff --git a/changes/ce/fix-10098.zh.md b/changes/ce/fix-10098.zh.md new file mode 100644 index 000000000..6b6d86159 --- /dev/null +++ b/changes/ce/fix-10098.zh.md @@ -0,0 +1 @@ +当MongoDB授权模块查询数据库时,在日志文件中发生的崩溃与错误已经被修复。 From ab4b3dd60aa413e61208dc1c6c6a9c799d806ad8 Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Thu, 9 Mar 2023 15:33:13 +0100 Subject: [PATCH 62/96] build: generate docs per profile --- build | 15 ++++++++------- mix.exs | 6 ++++-- rebar.config.erl | 6 +++++- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/build b/build index f18d41ef6..76298f1ab 100755 --- a/build +++ b/build @@ -92,7 +92,7 @@ log() { } make_docs() { - local libs_dir1 libs_dir2 libs_dir3 + local libs_dir1 libs_dir2 libs_dir3 docdir dashboard_www_static libs_dir1="$("$FIND" "_build/$PROFILE/lib/" -maxdepth 2 -name ebin -type d)" if [ -d "_build/default/lib/" ]; then libs_dir2="$("$FIND" "_build/default/lib/" -maxdepth 2 -name ebin -type d)" @@ -112,15 +112,16 @@ make_docs() { SCHEMA_MODULE='emqx_conf_schema' ;; esac - mkdir -p _build/docgen apps/emqx_dashboard/priv/www/static/ + docdir="_build/docgen/$PROFILE" + dashboard_www_static='apps/emqx_dashboard/priv/www/static/' + mkdir -p "$docdir" "$dashboard_www_static" # shellcheck disable=SC2086 erl -noshell -pa $libs_dir1 $libs_dir2 $libs_dir3 -eval \ - "Dir = filename:join(['_build', docgen]), \ - I18nFile = filename:join([apps, emqx_dashboard, priv, 'i18n.conf']), \ - ok = emqx_conf:dump_schema(Dir, $SCHEMA_MODULE, I18nFile), \ + "I18nFile = filename:join([apps, emqx_dashboard, priv, 'i18n.conf']), \ + ok = emqx_conf:dump_schema('$docdir', $SCHEMA_MODULE, I18nFile), \ halt(0)." - cp _build/docgen/bridge-api-*.json apps/emqx_dashboard/priv/www/static/ - cp _build/docgen/hot-config-schema-*.json apps/emqx_dashboard/priv/www/static/ + cp "$docdir"/bridge-api-*.json "$dashboard_www_static" + cp "$docdir"/hot-config-schema-*.json "$dashboard_www_static" } assert_no_compile_time_only_deps() { diff --git a/mix.exs b/mix.exs index 33828d11f..4153b1074 100644 --- a/mix.exs +++ b/mix.exs @@ -373,9 +373,11 @@ defmodule EMQXUmbrella.MixProject do Path.join(etc, "certs") ) + profile = System.get_env("MIX_ENV") + Mix.Generator.copy_file( - "apps/emqx_dashboard/etc/emqx.conf.en.example", - Path.join(etc, "emqx-example.conf"), + "_build/docgen/#{profile}/emqx.conf.en.example", + Path.join(etc, "emqx.conf.example"), force: overwrite? ) diff --git a/rebar.config.erl b/rebar.config.erl index c64f3dda2..bf6d8cee0 100644 --- a/rebar.config.erl +++ b/rebar.config.erl @@ -462,7 +462,8 @@ etc_overlay(ReleaseType, Edition) -> [ {mkdir, "etc/"}, {copy, "{{base_dir}}/lib/emqx/etc/certs", "etc/"}, - {copy, "_build/docgen/emqx.conf.en.example", "etc/emqx.conf.example"} + {copy, "_build/docgen/" ++ name(Edition) ++ "/emqx.conf.en.example", + "etc/emqx.conf.example"} ] ++ lists:map( fun @@ -598,3 +599,6 @@ list_dir(Dir) -> false -> [] end. + +name(ce) -> "emqx"; +name(ee) -> "emqx-enterprise". From cba0287439c1142ecde4cf83e596d8fdb91caa72 Mon Sep 17 00:00:00 2001 From: Ilya Averyanov Date: Wed, 8 Mar 2023 21:37:36 +0200 Subject: [PATCH 63/96] fix(mqtt): fix channel crash for slow clients with enhanced authn --- apps/emqx/src/emqx_channel.erl | 2 ++ .../emqx_enhanced_authn_scram_mnesia.erl | 10 +++--- ...emqx_enhanced_authn_scram_mnesia_SUITE.erl | 34 +++++++++++++++++-- changes/ce/fix-10100.en.md | 1 + changes/ce/fix-10100.zh.md | 1 + 5 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 changes/ce/fix-10100.en.md create mode 100644 changes/ce/fix-10100.zh.md diff --git a/apps/emqx/src/emqx_channel.erl b/apps/emqx/src/emqx_channel.erl index e82adc786..9acad4d57 100644 --- a/apps/emqx/src/emqx_channel.erl +++ b/apps/emqx/src/emqx_channel.erl @@ -224,6 +224,8 @@ set_session(Session, Channel = #channel{conninfo = ConnInfo, clientinfo = Client Channel#channel{session = Session1}. -spec stats(channel()) -> emqx_types:stats(). +stats(#channel{session = undefined}) -> + emqx_pd:get_counters(?CHANNEL_METRICS); stats(#channel{session = Session}) -> lists:append(emqx_session:stats(Session), emqx_pd:get_counters(?CHANNEL_METRICS)). diff --git a/apps/emqx_authn/src/enhanced_authn/emqx_enhanced_authn_scram_mnesia.erl b/apps/emqx_authn/src/enhanced_authn/emqx_enhanced_authn_scram_mnesia.erl index 6ce59d4f9..84f2c9525 100644 --- a/apps/emqx_authn/src/enhanced_authn/emqx_enhanced_authn_scram_mnesia.erl +++ b/apps/emqx_authn/src/enhanced_authn/emqx_enhanced_authn_scram_mnesia.erl @@ -168,7 +168,7 @@ authenticate( }, State ) -> - case ensure_auth_method(AuthMethod, State) of + case ensure_auth_method(AuthMethod, AuthData, State) of true -> case AuthCache of #{next_step := client_final} -> @@ -304,11 +304,13 @@ run_fuzzy_filter( %% Internal functions %%------------------------------------------------------------------------------ -ensure_auth_method(<<"SCRAM-SHA-256">>, #{algorithm := sha256}) -> +ensure_auth_method(_AuthMethod, undefined, _State) -> + false; +ensure_auth_method(<<"SCRAM-SHA-256">>, _AuthData, #{algorithm := sha256}) -> true; -ensure_auth_method(<<"SCRAM-SHA-512">>, #{algorithm := sha512}) -> +ensure_auth_method(<<"SCRAM-SHA-512">>, _AuthData, #{algorithm := sha512}) -> true; -ensure_auth_method(_, _) -> +ensure_auth_method(_AuthMethod, _AuthData, _State) -> false. check_client_first_message(Bin, _Cache, #{iteration_count := IterationCount} = State) -> diff --git a/apps/emqx_authn/test/emqx_enhanced_authn_scram_mnesia_SUITE.erl b/apps/emqx_authn/test/emqx_enhanced_authn_scram_mnesia_SUITE.erl index b143903b5..f52e895cc 100644 --- a/apps/emqx_authn/test/emqx_enhanced_authn_scram_mnesia_SUITE.erl +++ b/apps/emqx_authn/test/emqx_enhanced_authn_scram_mnesia_SUITE.erl @@ -20,6 +20,7 @@ -compile(nowarn_export_all). -include_lib("eunit/include/eunit.hrl"). +-include_lib("common_test/include/ct.hrl"). -include_lib("emqx/include/emqx_mqtt.hrl"). -include("emqx_authn.hrl"). @@ -37,9 +38,11 @@ all() -> init_per_suite(Config) -> _ = application:load(emqx_conf), ok = emqx_common_test_helpers:start_apps([emqx_authn]), - Config. + IdleTimeout = emqx_config:get([mqtt, idle_timeout]), + [{idle_timeout, IdleTimeout} | Config]. -end_per_suite(_Config) -> +end_per_suite(Config) -> + ok = emqx_config:put([mqtt, idle_timeout], ?config(idle_timeout, Config)), ok = emqx_common_test_helpers:stop_apps([emqx_authn]). init_per_testcase(_Case, Config) -> @@ -99,6 +102,8 @@ t_authenticate(_Config) -> init_auth(Username, Password, Algorithm), + ok = emqx_config:put([mqtt, idle_timeout], 500), + {ok, Pid} = emqx_authn_mqtt_test_client:start_link("127.0.0.1", 1883), ClientFirstMessage = esasl_scram:client_first_message(Username), @@ -115,6 +120,9 @@ t_authenticate(_Config) -> ok = emqx_authn_mqtt_test_client:send(Pid, ConnectPacket), + %% Intentional sleep to trigger idle timeout for the connection not yet authenticated + ok = ct:sleep(1000), + ?AUTH_PACKET( ?RC_CONTINUE_AUTHENTICATION, #{'Authentication-Data' := ServerFirstMessage} @@ -150,6 +158,28 @@ t_authenticate(_Config) -> ServerFinalMessage, ClientCache#{algorithm => Algorithm} ). +t_authenticate_bad_props(_Config) -> + Algorithm = sha512, + Username = <<"u">>, + Password = <<"p">>, + + init_auth(Username, Password, Algorithm), + + {ok, Pid} = emqx_authn_mqtt_test_client:start_link("127.0.0.1", 1883), + + ConnectPacket = ?CONNECT_PACKET( + #mqtt_packet_connect{ + proto_ver = ?MQTT_PROTO_V5, + properties = #{ + 'Authentication-Method' => <<"SCRAM-SHA-512">> + } + } + ), + + ok = emqx_authn_mqtt_test_client:send(Pid, ConnectPacket), + + ?CONNACK_PACKET(?RC_NOT_AUTHORIZED) = receive_packet(). + t_authenticate_bad_username(_Config) -> Algorithm = sha512, Username = <<"u">>, diff --git a/changes/ce/fix-10100.en.md b/changes/ce/fix-10100.en.md new file mode 100644 index 000000000..002fb6f08 --- /dev/null +++ b/changes/ce/fix-10100.en.md @@ -0,0 +1 @@ +Fix channel crash for slow clients with enhanced authentication. diff --git a/changes/ce/fix-10100.zh.md b/changes/ce/fix-10100.zh.md new file mode 100644 index 000000000..6adb5e7e1 --- /dev/null +++ b/changes/ce/fix-10100.zh.md @@ -0,0 +1 @@ +修复响应较慢的客户端在使用增强认证时可能出现崩溃的问题。 From b02eb2104ce773a51d7ea9e5f6a936da8f289f37 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Fri, 10 Mar 2023 08:56:17 +0100 Subject: [PATCH 64/96] chore: update information about 5.0 series release branch --- scripts/rel/cut.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/rel/cut.sh b/scripts/rel/cut.sh index b12c86519..19a03a98d 100755 --- a/scripts/rel/cut.sh +++ b/scripts/rel/cut.sh @@ -35,11 +35,10 @@ options: in addition to regular : one -NOTE: For 5.0 series the current working branch must be 'release-50' for opensource edition - and 'release-e50' for enterprise edition. +NOTE: For 5.0 series the current working branch must be 'release-50' --.--[ master ]---------------------------.-----------.--- \\ / - \`---[release-50]----(v5.0.12 | e5.0.0) + \`---[release-50]----(v5.0.20 | e5.0.1) EOF } From a86d06f043c9959349750dcb8b59859e6fefb7d2 Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Fri, 10 Mar 2023 16:42:56 +0300 Subject: [PATCH 65/96] chore: bump app versions following last merge-back --- apps/emqx/src/emqx.app.src | 2 +- apps/emqx_authn/src/emqx_authn.app.src | 2 +- apps/emqx_bridge/src/emqx_bridge.app.src | 2 +- apps/emqx_connector/src/emqx_connector.app.src | 2 +- apps/emqx_resource/src/emqx_resource.app.src | 2 +- lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src | 2 +- lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/emqx/src/emqx.app.src b/apps/emqx/src/emqx.app.src index e195107ed..d2831b74d 100644 --- a/apps/emqx/src/emqx.app.src +++ b/apps/emqx/src/emqx.app.src @@ -3,7 +3,7 @@ {id, "emqx"}, {description, "EMQX Core"}, % strict semver, bump manually! - {vsn, "5.0.19"}, + {vsn, "5.0.20"}, {modules, []}, {registered, []}, {applications, [ diff --git a/apps/emqx_authn/src/emqx_authn.app.src b/apps/emqx_authn/src/emqx_authn.app.src index 7fbdf787a..6a3ffbdb4 100644 --- a/apps/emqx_authn/src/emqx_authn.app.src +++ b/apps/emqx_authn/src/emqx_authn.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_authn, [ {description, "EMQX Authentication"}, - {vsn, "0.1.14"}, + {vsn, "0.1.15"}, {modules, []}, {registered, [emqx_authn_sup, emqx_authn_registry]}, {applications, [kernel, stdlib, emqx_resource, emqx_connector, ehttpc, epgsql, mysql, jose]}, diff --git a/apps/emqx_bridge/src/emqx_bridge.app.src b/apps/emqx_bridge/src/emqx_bridge.app.src index 0ec246320..37ec1266a 100644 --- a/apps/emqx_bridge/src/emqx_bridge.app.src +++ b/apps/emqx_bridge/src/emqx_bridge.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_bridge, [ {description, "EMQX bridges"}, - {vsn, "0.1.12"}, + {vsn, "0.1.13"}, {registered, []}, {mod, {emqx_bridge_app, []}}, {applications, [ diff --git a/apps/emqx_connector/src/emqx_connector.app.src b/apps/emqx_connector/src/emqx_connector.app.src index f0d51a9ce..4f7ff0f25 100644 --- a/apps/emqx_connector/src/emqx_connector.app.src +++ b/apps/emqx_connector/src/emqx_connector.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_connector, [ {description, "EMQX Data Integration Connectors"}, - {vsn, "0.1.16"}, + {vsn, "0.1.17"}, {registered, []}, {mod, {emqx_connector_app, []}}, {applications, [ diff --git a/apps/emqx_resource/src/emqx_resource.app.src b/apps/emqx_resource/src/emqx_resource.app.src index 0cc013099..7be1bcb1c 100644 --- a/apps/emqx_resource/src/emqx_resource.app.src +++ b/apps/emqx_resource/src/emqx_resource.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_resource, [ {description, "Manager for all external resources"}, - {vsn, "0.1.9"}, + {vsn, "0.1.10"}, {registered, []}, {mod, {emqx_resource_app, []}}, {applications, [ diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src index 05d893a79..ac181b251 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src +++ b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src @@ -1,6 +1,6 @@ {application, emqx_ee_bridge, [ {description, "EMQX Enterprise data bridges"}, - {vsn, "0.1.6"}, + {vsn, "0.1.7"}, {registered, []}, {applications, [ kernel, diff --git a/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src b/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src index 6f6bc57c8..6f40f7158 100644 --- a/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src +++ b/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src @@ -1,6 +1,6 @@ {application, emqx_ee_connector, [ {description, "EMQX Enterprise connectors"}, - {vsn, "0.1.6"}, + {vsn, "0.1.7"}, {registered, []}, {applications, [ kernel, From 225cbab9cede26c7b86bbd574b334cd04e8fc785 Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Wed, 8 Mar 2023 12:31:48 +0300 Subject: [PATCH 66/96] ci(mysql): drop outdated config options Also make them look as recommended in the documentation. --- .../docker-compose-mysql-tcp.yaml | 13 ++++++------- .../docker-compose-mysql-tls.yaml | 5 ++--- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/.ci/docker-compose-file/docker-compose-mysql-tcp.yaml b/.ci/docker-compose-file/docker-compose-mysql-tcp.yaml index 8a4c498df..0c7e45f01 100644 --- a/.ci/docker-compose-file/docker-compose-mysql-tcp.yaml +++ b/.ci/docker-compose-file/docker-compose-mysql-tcp.yaml @@ -13,10 +13,9 @@ services: networks: - emqx_bridge command: - --bind-address "::" - --character-set-server=utf8mb4 - --collation-server=utf8mb4_general_ci - --explicit_defaults_for_timestamp=true - --lower_case_table_names=1 - --max_allowed_packet=128M - --skip-symbolic-links + - --bind-address=0.0.0.0 + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_general_ci + - --lower-case-table-names=1 + - --max-allowed-packet=128M + - --skip-symbolic-links diff --git a/.ci/docker-compose-file/docker-compose-mysql-tls.yaml b/.ci/docker-compose-file/docker-compose-mysql-tls.yaml index 47d9ecd83..67dbec808 100644 --- a/.ci/docker-compose-file/docker-compose-mysql-tls.yaml +++ b/.ci/docker-compose-file/docker-compose-mysql-tls.yaml @@ -23,9 +23,8 @@ services: - --port=3306 - --character-set-server=utf8mb4 - --collation-server=utf8mb4_general_ci - - --explicit_defaults_for_timestamp=true - - --lower_case_table_names=1 - - --max_allowed_packet=128M + - --lower-case-table-names=1 + - --max-allowed-packet=128M - --ssl-ca=/etc/certs/ca-cert.pem - --ssl-cert=/etc/certs/server-cert.pem - --ssl-key=/etc/certs/server-key.pem From fc37d9b3cd3e42f4e880efe14bcf8f76905f5291 Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Wed, 8 Mar 2023 12:49:11 +0300 Subject: [PATCH 67/96] fix(mysql): be explicit that batch queries are parameterless So that mysql client won't attempt to prepare them automatically, thus trashing the server's prepared statements table and making interaction overall heavier. --- .../docker-compose-mysql-tcp.yaml | 3 + .../docker-compose-mysql-tls.yaml | 3 + .../src/emqx_connector_mysql.erl | 16 ++--- .../test/emqx_ee_bridge_mysql_SUITE.erl | 65 +++++++++++++++---- 4 files changed, 66 insertions(+), 21 deletions(-) diff --git a/.ci/docker-compose-file/docker-compose-mysql-tcp.yaml b/.ci/docker-compose-file/docker-compose-mysql-tcp.yaml index 0c7e45f01..4578ff94f 100644 --- a/.ci/docker-compose-file/docker-compose-mysql-tcp.yaml +++ b/.ci/docker-compose-file/docker-compose-mysql-tcp.yaml @@ -18,4 +18,7 @@ services: - --collation-server=utf8mb4_general_ci - --lower-case-table-names=1 - --max-allowed-packet=128M + # Severely limit maximum number of prepared statements the server must permit + # so that we hit potential resource exhaustion earlier in tests. + - --max-prepared-stmt-count=64 - --skip-symbolic-links diff --git a/.ci/docker-compose-file/docker-compose-mysql-tls.yaml b/.ci/docker-compose-file/docker-compose-mysql-tls.yaml index 67dbec808..83fd4658c 100644 --- a/.ci/docker-compose-file/docker-compose-mysql-tls.yaml +++ b/.ci/docker-compose-file/docker-compose-mysql-tls.yaml @@ -25,6 +25,9 @@ services: - --collation-server=utf8mb4_general_ci - --lower-case-table-names=1 - --max-allowed-packet=128M + # Severely limit maximum number of prepared statements the server must permit + # so that we hit potential resource exhaustion earlier in tests. + - --max-prepared-stmt-count=64 - --ssl-ca=/etc/certs/ca-cert.pem - --ssl-cert=/etc/certs/server-cert.pem - --ssl-key=/etc/certs/server-key.pem diff --git a/apps/emqx_connector/src/emqx_connector_mysql.erl b/apps/emqx_connector/src/emqx_connector_mysql.erl index e06d6a9d7..ce669c33f 100644 --- a/apps/emqx_connector/src/emqx_connector_mysql.erl +++ b/apps/emqx_connector/src/emqx_connector_mysql.erl @@ -392,13 +392,13 @@ proc_sql_params(TypeOrKey, SQLOrData, Params, #{params_tokens := ParamsTokens}) on_batch_insert(InstId, BatchReqs, InsertPart, Tokens, State) -> SQL = emqx_plugin_libs_rule:proc_batch_sql(BatchReqs, InsertPart, Tokens), - on_sql_query(InstId, query, SQL, [], default_timeout, State). + on_sql_query(InstId, query, SQL, no_params, default_timeout, State). on_sql_query( InstId, SQLFunc, SQLOrKey, - Data, + Params, Timeout, #{poolname := PoolName} = State ) -> @@ -409,9 +409,9 @@ on_sql_query( {ok, Conn} -> ?tp( mysql_connector_send_query, - #{sql_func => SQLFunc, sql_or_key => SQLOrKey, data => Data} + #{sql_func => SQLFunc, sql_or_key => SQLOrKey, data => Params} ), - do_sql_query(SQLFunc, Conn, SQLOrKey, Data, Timeout, LogMeta); + do_sql_query(SQLFunc, Conn, SQLOrKey, Params, Timeout, LogMeta); {error, disconnected} -> ?SLOG( error, @@ -423,8 +423,8 @@ on_sql_query( {error, {recoverable_error, disconnected}} end. -do_sql_query(SQLFunc, Conn, SQLOrKey, Data, Timeout, LogMeta) -> - try mysql:SQLFunc(Conn, SQLOrKey, Data, Timeout) of +do_sql_query(SQLFunc, Conn, SQLOrKey, Params, Timeout, LogMeta) -> + try mysql:SQLFunc(Conn, SQLOrKey, Params, no_filtermap_fun, Timeout) of {error, disconnected} -> ?SLOG( error, @@ -466,7 +466,7 @@ do_sql_query(SQLFunc, Conn, SQLOrKey, Data, Timeout, LogMeta) -> error:badarg -> ?SLOG( error, - LogMeta#{msg => "mysql_connector_invalid_params", params => Data} + LogMeta#{msg => "mysql_connector_invalid_params", params => Params} ), - {error, {unrecoverable_error, {invalid_params, Data}}} + {error, {unrecoverable_error, {invalid_params, Params}}} end. diff --git a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_mysql_SUITE.erl b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_mysql_SUITE.erl index fec85c874..2d3c52312 100644 --- a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_mysql_SUITE.erl +++ b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_mysql_SUITE.erl @@ -28,6 +28,9 @@ -define(MYSQL_DATABASE, "mqtt"). -define(MYSQL_USERNAME, "root"). -define(MYSQL_PASSWORD, "public"). +-define(MYSQL_POOL_SIZE, 4). + +-define(WORKER_POOL_SIZE, 4). %%------------------------------------------------------------------------------ %% CT boilerplate @@ -168,11 +171,13 @@ mysql_config(BridgeType, Config) -> " database = ~p\n" " username = ~p\n" " password = ~p\n" + " pool_size = ~b\n" " sql = ~p\n" " resource_opts = {\n" " request_timeout = 500ms\n" " batch_size = ~b\n" " query_mode = ~s\n" + " worker_pool_size = ~b\n" " }\n" " ssl = {\n" " enable = ~w\n" @@ -185,9 +190,11 @@ mysql_config(BridgeType, Config) -> ?MYSQL_DATABASE, ?MYSQL_USERNAME, ?MYSQL_PASSWORD, + ?MYSQL_POOL_SIZE, ?SQL_BRIDGE, BatchSize, QueryMode, + ?WORKER_POOL_SIZE, TlsEnabled ] ), @@ -265,27 +272,26 @@ connect_direct_mysql(Config) -> {ok, Pid} = mysql:start_link(Opts ++ SslOpts), Pid. +query_direct_mysql(Config, Query) -> + Pid = connect_direct_mysql(Config), + try + mysql:query(Pid, Query) + after + mysql:stop(Pid) + end. + % These funs connect and then stop the mysql connection connect_and_create_table(Config) -> - DirectPid = connect_direct_mysql(Config), - ok = mysql:query(DirectPid, ?SQL_CREATE_TABLE), - mysql:stop(DirectPid). + query_direct_mysql(Config, ?SQL_CREATE_TABLE). connect_and_drop_table(Config) -> - DirectPid = connect_direct_mysql(Config), - ok = mysql:query(DirectPid, ?SQL_DROP_TABLE), - mysql:stop(DirectPid). + query_direct_mysql(Config, ?SQL_DROP_TABLE). connect_and_clear_table(Config) -> - DirectPid = connect_direct_mysql(Config), - ok = mysql:query(DirectPid, ?SQL_DELETE), - mysql:stop(DirectPid). + query_direct_mysql(Config, ?SQL_DELETE). connect_and_get_payload(Config) -> - DirectPid = connect_direct_mysql(Config), - Result = mysql:query(DirectPid, ?SQL_SELECT), - mysql:stop(DirectPid), - Result. + query_direct_mysql(Config, ?SQL_SELECT). %%------------------------------------------------------------------------------ %% Testcases @@ -505,6 +511,39 @@ t_bad_sql_parameter(Config) -> end, ok. +t_workload_fits_prepared_statement_limit(Config) -> + N = 50, + ?assertMatch( + {ok, _}, + create_bridge(Config) + ), + Results = lists:append( + emqx_misc:pmap( + fun(_) -> + [ + begin + Payload = integer_to_binary(erlang:unique_integer()), + Timestamp = erlang:system_time(millisecond), + send_message(Config, #{payload => Payload, timestamp => Timestamp}) + end + || _ <- lists:seq(1, N) + ] + end, + lists:seq(1, ?WORKER_POOL_SIZE * ?MYSQL_POOL_SIZE), + _Timeout = 10_000 + ) + ), + ?assertEqual( + [], + [R || R <- Results, R /= ok] + ), + {ok, _, [[_Var, Count]]} = + query_direct_mysql(Config, "SHOW GLOBAL STATUS LIKE 'Prepared_stmt_count'"), + ?assertEqual( + ?MYSQL_POOL_SIZE, + binary_to_integer(Count) + ). + t_unprepared_statement_query(Config) -> ?assertMatch( {ok, _}, From 0a7f6c7d035c4ab9bb7fa4e17233f0009aedcb36 Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Wed, 8 Mar 2023 13:24:09 +0300 Subject: [PATCH 68/96] fix(mysql): ensure proper escaping in batch inserts Also hexencode non-utf8 binaries. This is essentially an heuristic. We don't know column types in runtime, and there's no simple way to find them out. Since we're already doing full binary scan during escaping it should be cheap to bail out on non-utf8 strings and hexencode them instead. Also introduce separate function to highlight that this escaping is MySQL-specific. --- .../src/emqx_connector_mysql.erl | 8 +- .../emqx_plugin_libs/src/emqx_placeholder.erl | 110 ++++++++++++++---- .../src/emqx_plugin_libs_rule.erl | 4 +- .../test/emqx_placeholder_SUITE.erl | 18 ++- .../test/emqx_ee_bridge_mysql_SUITE.erl | 11 ++ .../test/emqx_ee_bridge_pgsql_SUITE.erl | 7 ++ 6 files changed, 128 insertions(+), 30 deletions(-) diff --git a/apps/emqx_connector/src/emqx_connector_mysql.erl b/apps/emqx_connector/src/emqx_connector_mysql.erl index ce669c33f..68ec59894 100644 --- a/apps/emqx_connector/src/emqx_connector_mysql.erl +++ b/apps/emqx_connector/src/emqx_connector_mysql.erl @@ -391,8 +391,12 @@ proc_sql_params(TypeOrKey, SQLOrData, Params, #{params_tokens := ParamsTokens}) end. on_batch_insert(InstId, BatchReqs, InsertPart, Tokens, State) -> - SQL = emqx_plugin_libs_rule:proc_batch_sql(BatchReqs, InsertPart, Tokens), - on_sql_query(InstId, query, SQL, no_params, default_timeout, State). + ValuesPart = lists:join($,, [ + emqx_placeholder:proc_param_str(Tokens, Msg, fun emqx_placeholder:quote_mysql/1) + || {_, Msg} <- BatchReqs + ]), + Query = [InsertPart, <<" values ">> | ValuesPart], + on_sql_query(InstId, query, Query, no_params, default_timeout, State). on_sql_query( InstId, diff --git a/apps/emqx_plugin_libs/src/emqx_placeholder.erl b/apps/emqx_plugin_libs/src/emqx_placeholder.erl index 3e98fa149..1f93c1d3e 100644 --- a/apps/emqx_plugin_libs/src/emqx_placeholder.erl +++ b/apps/emqx_plugin_libs/src/emqx_placeholder.erl @@ -30,6 +30,7 @@ proc_sql/2, proc_sql_param_str/2, proc_cql_param_str/2, + proc_param_str/3, preproc_tmpl_deep/1, preproc_tmpl_deep/2, proc_tmpl_deep/2, @@ -39,6 +40,12 @@ sql_data/1 ]). +-export([ + quote_sql/1, + quote_cql/1, + quote_mysql/1 +]). + -include_lib("emqx/include/emqx_placeholder.hrl"). -define(EX_PLACE_HOLDER, "(\\$\\{[a-zA-Z0-9\\._]+\\})"). @@ -83,6 +90,8 @@ | {tmpl, tmpl_token()} | {value, term()}. +-dialyzer({no_improper_lists, [quote_mysql/1, escape_mysql/4, escape_prepend/4]}). + %%------------------------------------------------------------------------------ %% APIs %%------------------------------------------------------------------------------ @@ -162,12 +171,22 @@ proc_sql(Tokens, Data) -> -spec proc_sql_param_str(tmpl_token(), map()) -> binary(). proc_sql_param_str(Tokens, Data) -> + % NOTE + % This is a bit misleading: currently, escaping logic in `quote_sql/1` likely + % won't work with pgsql since it does not support C-style escapes by default. + % https://www.postgresql.org/docs/14/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS proc_param_str(Tokens, Data, fun quote_sql/1). -spec proc_cql_param_str(tmpl_token(), map()) -> binary(). proc_cql_param_str(Tokens, Data) -> proc_param_str(Tokens, Data, fun quote_cql/1). +-spec proc_param_str(tmpl_token(), map(), fun((_Value) -> iodata())) -> binary(). +proc_param_str(Tokens, Data, Quote) -> + iolist_to_binary( + proc_tmpl(Tokens, Data, #{return => rawlist, var_trans => Quote}) + ). + -spec preproc_tmpl_deep(term()) -> deep_template(). preproc_tmpl_deep(Data) -> preproc_tmpl_deep(Data, #{process_keys => true}). @@ -226,15 +245,29 @@ sql_data(Map) when is_map(Map) -> emqx_json:encode(Map). -spec bin(term()) -> binary(). bin(Val) -> emqx_plugin_libs_rule:bin(Val). +-spec quote_sql(_Value) -> iolist(). +quote_sql(Str) -> + quote_escape(Str, fun escape_sql/1). + +-spec quote_cql(_Value) -> iolist(). +quote_cql(Str) -> + quote_escape(Str, fun escape_cql/1). + +-spec quote_mysql(_Value) -> iolist(). +quote_mysql(Str) when is_binary(Str) -> + try + escape_mysql(Str) + catch + throw:invalid_utf8 -> + [<<"0x">> | binary:encode_hex(Str)] + end; +quote_mysql(Str) -> + quote_escape(Str, fun escape_mysql/1). + %%------------------------------------------------------------------------------ %% Internal functions %%------------------------------------------------------------------------------ -proc_param_str(Tokens, Data, Quote) -> - iolist_to_binary( - proc_tmpl(Tokens, Data, #{return => rawlist, var_trans => Quote}) - ). - get_phld_var(Phld, Data) -> emqx_rule_maps:nested_get(Phld, Data). @@ -312,21 +345,56 @@ unwrap(<<"\"${", Val/binary>>, _StripDoubleQuote = true) -> unwrap(<<"${", Val/binary>>, _StripDoubleQuote) -> binary:part(Val, {0, byte_size(Val) - 1}). -quote_sql(Str) -> - quote(Str, <<"\\\\'">>). - -quote_cql(Str) -> - quote(Str, <<"''">>). - -quote(Str, ReplaceWith) when - is_list(Str); - is_binary(Str); - is_atom(Str); - is_map(Str) --> - [$', escape_apo(bin(Str), ReplaceWith), $']; -quote(Val, _) -> +-spec quote_escape(_Value, fun((binary()) -> iodata())) -> iodata(). +quote_escape(Str, EscapeFun) when is_binary(Str) -> + EscapeFun(Str); +quote_escape(Str, EscapeFun) when is_list(Str) -> + case unicode:characters_to_binary(Str) of + Bin when is_binary(Bin) -> + EscapeFun(Bin); + Otherwise -> + error(Otherwise) + end; +quote_escape(Str, EscapeFun) when is_atom(Str) orelse is_map(Str) -> + EscapeFun(bin(Str)); +quote_escape(Val, _EscapeFun) -> bin(Val). -escape_apo(Str, ReplaceWith) -> - re:replace(Str, <<"'">>, ReplaceWith, [{return, binary}, global]). +-spec escape_sql(binary()) -> iolist(). +escape_sql(S) -> + ES = binary:replace(S, [<<"\\">>, <<"'">>], <<"\\">>, [global, {insert_replaced, 1}]), + [$', ES, $']. + +-spec escape_cql(binary()) -> iolist(). +escape_cql(S) -> + ES = binary:replace(S, <<"'">>, <<"'">>, [global, {insert_replaced, 1}]), + [$', ES, $']. + +-spec escape_mysql(binary()) -> iolist(). +escape_mysql(S0) -> + % https://dev.mysql.com/doc/refman/8.0/en/string-literals.html + [$', escape_mysql(S0, 0, 0, S0), $']. + +%% NOTE +%% This thing looks more complicated than needed because it's optimized for as few +%% intermediate memory (re)allocations as possible. +escape_mysql(<<$', Rest/binary>>, I, Run, Src) -> + escape_prepend(I, Run, Src, [<<"\\'">> | escape_mysql(Rest, I + Run + 1, 0, Src)]); +escape_mysql(<<$\\, Rest/binary>>, I, Run, Src) -> + escape_prepend(I, Run, Src, [<<"\\\\">> | escape_mysql(Rest, I + Run + 1, 0, Src)]); +escape_mysql(<<0, Rest/binary>>, I, Run, Src) -> + escape_prepend(I, Run, Src, [<<"\\0">> | escape_mysql(Rest, I + Run + 1, 0, Src)]); +escape_mysql(<<_/utf8, Rest/binary>> = S, I, Run, Src) -> + CWidth = byte_size(S) - byte_size(Rest), + escape_mysql(Rest, I, Run + CWidth, Src); +escape_mysql(<<>>, 0, _, Src) -> + Src; +escape_mysql(<<>>, I, Run, Src) -> + binary:part(Src, I, Run); +escape_mysql(_, _I, _Run, _Src) -> + throw(invalid_utf8). + +escape_prepend(_RunI, 0, _Src, Tail) -> + Tail; +escape_prepend(I, Run, Src, Tail) -> + [binary:part(Src, I, Run) | Tail]. diff --git a/apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl b/apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl index a60c94a7b..24ddacb58 100644 --- a/apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl +++ b/apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl @@ -172,8 +172,8 @@ detect_sql_type(SQL) -> ) -> InsertSQL :: binary(). proc_batch_sql(BatchReqs, InsertPart, Tokens) -> ValuesPart = erlang:iolist_to_binary( - lists:join(", ", [ - emqx_plugin_libs_rule:proc_sql_param_str(Tokens, Msg) + lists:join($,, [ + proc_sql_param_str(Tokens, Msg) || {_, Msg} <- BatchReqs ]) ), diff --git a/apps/emqx_plugin_libs/test/emqx_placeholder_SUITE.erl b/apps/emqx_plugin_libs/test/emqx_placeholder_SUITE.erl index 6baaaefc6..fc431e80c 100644 --- a/apps/emqx_plugin_libs/test/emqx_placeholder_SUITE.erl +++ b/apps/emqx_plugin_libs/test/emqx_placeholder_SUITE.erl @@ -105,19 +105,27 @@ t_preproc_sql3(_) -> emqx_placeholder:proc_sql_param_str(ParamsTokens, Selected) ). -t_preproc_sql4(_) -> +t_preproc_mysql1(_) -> %% with apostrophes %% https://github.com/emqx/emqx/issues/4135 Selected = #{ a => <<"1''2">>, b => 1, c => 1.0, - d => #{d1 => <<"someone's phone">>} + d => #{d1 => <<"someone's phone">>}, + e => <<$\\, 0, "💩"/utf8>>, + f => <<"non-utf8", 16#DCC900:24>>, + g => "utf8's cool 🐸" }, - ParamsTokens = emqx_placeholder:preproc_tmpl(<<"a:${a},b:${b},c:${c},d:${d}">>), + ParamsTokens = emqx_placeholder:preproc_tmpl( + <<"a:${a},b:${b},c:${c},d:${d},e:${e},f:${f},g:${g}">> + ), ?assertEqual( - <<"a:'1\\'\\'2',b:1,c:1.0,d:'{\"d1\":\"someone\\'s phone\"}'">>, - emqx_placeholder:proc_sql_param_str(ParamsTokens, Selected) + << + "a:'1\\'\\'2',b:1,c:1.0,d:'{\"d1\":\"someone\\'s phone\"}'," + "e:'\\\\\\0💩',f:0x6E6F6E2D75746638DCC900,g:'utf8\\'s cool 🐸'"/utf8 + >>, + emqx_placeholder:proc_param_str(ParamsTokens, Selected, fun emqx_placeholder:quote_mysql/1) ). t_preproc_sql5(_) -> diff --git a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_mysql_SUITE.erl b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_mysql_SUITE.erl index 2d3c52312..93e9e6fee 100644 --- a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_mysql_SUITE.erl +++ b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_mysql_SUITE.erl @@ -511,6 +511,17 @@ t_bad_sql_parameter(Config) -> end, ok. +t_nasty_sql_string(Config) -> + ?assertMatch({ok, _}, create_bridge(Config)), + Payload = list_to_binary(lists:seq(0, 255)), + Message = #{payload => Payload, timestamp => erlang:system_time(millisecond)}, + Result = send_message(Config, Message), + ?assertEqual(ok, Result), + ?assertMatch( + {ok, [<<"payload">>], [[Payload]]}, + connect_and_get_payload(Config) + ). + t_workload_fits_prepared_statement_limit(Config) -> N = 50, ?assertMatch( diff --git a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_pgsql_SUITE.erl b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_pgsql_SUITE.erl index 6fbb9689f..10359a128 100644 --- a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_pgsql_SUITE.erl +++ b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_pgsql_SUITE.erl @@ -510,3 +510,10 @@ t_bad_sql_parameter(Config) -> ) end, ok. + +t_nasty_sql_string(Config) -> + ?assertMatch({ok, _}, create_bridge(Config)), + Payload = list_to_binary(lists:seq(1, 127)), + Message = #{payload => Payload, timestamp => erlang:system_time(millisecond)}, + ?assertEqual({ok, 1}, send_message(Config, Message)), + ?assertEqual(Payload, connect_and_get_payload(Config)). From 781942cc4f707a5db2f20fdb6ca6f6b6d4b50c97 Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Thu, 9 Mar 2023 13:56:22 +0300 Subject: [PATCH 69/96] chore: drop unused macrodefs --- apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl | 5 ----- 1 file changed, 5 deletions(-) diff --git a/apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl b/apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl index 24ddacb58..d1a821895 100644 --- a/apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl +++ b/apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl @@ -68,11 +68,6 @@ -compile({no_auto_import, [float/1]}). --define(EX_PLACE_HOLDER, "(\\$\\{[a-zA-Z0-9\\._]+\\})"). - -%% Space and CRLF --define(EX_WITHE_CHARS, "\\s"). - -type uri_string() :: iodata(). -type tmpl_token() :: list({var, binary()} | {str, binary()}). From e571b602b8df5d057b4d75650f5c5423d8013a8f Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Wed, 8 Mar 2023 19:30:15 +0300 Subject: [PATCH 70/96] chore: bump app versions + add changelog Bump `emqx_plugin_libs` app version to 4.3.7. --- apps/emqx_plugin_libs/src/emqx_plugin_libs.app.src | 2 +- changes/ee/fix-10095.en.md | 3 +++ changes/ee/fix-10095.zh.md | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 changes/ee/fix-10095.en.md create mode 100644 changes/ee/fix-10095.zh.md diff --git a/apps/emqx_plugin_libs/src/emqx_plugin_libs.app.src b/apps/emqx_plugin_libs/src/emqx_plugin_libs.app.src index 7acf7433b..605fdb346 100644 --- a/apps/emqx_plugin_libs/src/emqx_plugin_libs.app.src +++ b/apps/emqx_plugin_libs/src/emqx_plugin_libs.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_plugin_libs, [ {description, "EMQX Plugin utility libs"}, - {vsn, "4.3.6"}, + {vsn, "4.3.7"}, {modules, []}, {applications, [kernel, stdlib]}, {env, []} diff --git a/changes/ee/fix-10095.en.md b/changes/ee/fix-10095.en.md new file mode 100644 index 000000000..49c588345 --- /dev/null +++ b/changes/ee/fix-10095.en.md @@ -0,0 +1,3 @@ +Stop MySQL client from bombarding server repeatedly with unnecessary `PREPARE` queries on every batch, trashing the server and exhausting its internal limits. This was happening when the MySQL bridge was in the batch mode. + +Ensure safer and more careful escaping of strings and binaries in batch insert queries when the MySQL bridge is in the batch mode. diff --git a/changes/ee/fix-10095.zh.md b/changes/ee/fix-10095.zh.md new file mode 100644 index 000000000..5a62ccfca --- /dev/null +++ b/changes/ee/fix-10095.zh.md @@ -0,0 +1 @@ +优化 MySQL 桥接在批量模式下能更高效的使用预处理语句 ,减少了对 MySQL 服务器的查询压力, 并确保对 SQL 语句进行更安全和谨慎的转义。 From f7c0d2947800b1e74e45102a2fa65c24e7c63ad2 Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Thu, 9 Mar 2023 14:04:32 +0300 Subject: [PATCH 71/96] test(tde): add testcase for a nasty string in SQL query Similar to what we have in mysql and pgqsl testsuites. --- .../test/emqx_ee_bridge_tdengine_SUITE.erl | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_tdengine_SUITE.erl b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_tdengine_SUITE.erl index 4c17ba1a1..3b580ec61 100644 --- a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_tdengine_SUITE.erl +++ b/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_tdengine_SUITE.erl @@ -426,6 +426,32 @@ t_bad_sql_parameter(Config) -> end, ok. +t_nasty_sql_string(Config) -> + ?assertMatch( + {ok, _}, + create_bridge(Config) + ), + % NOTE + % Column `payload` has BINARY type, so we would certainly like to test it + % with `lists:seq(1, 127)`, but: + % 1. There's no way to insert zero byte in an SQL string, seems that TDengine's + % parser[1] has no escaping sequence for it so a zero byte probably confuses + % interpreter somewhere down the line. + % 2. Bytes > 127 come back as U+FFFDs (i.e. replacement characters) in UTF-8 for + % some reason. + % + % [1]: https://github.com/taosdata/TDengine/blob/066cb34a/source/libs/parser/src/parUtil.c#L279-L301 + Payload = list_to_binary(lists:seq(1, 127)), + Message = #{payload => Payload, timestamp => erlang:system_time(millisecond)}, + ?assertMatch( + {ok, #{<<"code">> := 0, <<"rows">> := 1}}, + send_message(Config, Message) + ), + ?assertEqual( + Payload, + connect_and_get_payload(Config) + ). + to_bin(List) when is_list(List) -> unicode:characters_to_binary(List, utf8); to_bin(Bin) when is_binary(Bin) -> From e3595f2e798676276633f1aa21d40e76c4764145 Mon Sep 17 00:00:00 2001 From: ieQu1 <99872536+ieQu1@users.noreply.github.com> Date: Fri, 10 Mar 2023 22:45:02 +0100 Subject: [PATCH 72/96] chore(mria): Bump version to 0.4.0 --- apps/emqx/rebar.config | 2 +- apps/emqx/src/emqx_sys.erl | 2 +- .../emqx_persistent_session.erl | 2 +- apps/emqx/test/props/prop_emqx_sys.erl | 6 +-- apps/emqx_authn/src/emqx_authn_api.erl | 2 +- .../emqx_authz/src/emqx_authz_api_sources.erl | 2 +- apps/emqx_bridge/src/emqx_bridge_api.erl | 6 +-- apps/emqx_conf/src/emqx_cluster_rpc.erl | 4 +- apps/emqx_conf/src/emqx_conf.app.src | 2 +- apps/emqx_conf/src/emqx_conf_cli.erl | 6 +-- .../emqx_conf/test/emqx_cluster_rpc_SUITE.erl | 6 +-- .../emqx_dashboard/src/emqx_dashboard.app.src | 2 +- .../src/emqx_dashboard_monitor.erl | 4 +- apps/emqx_exhook/src/emqx_exhook.app.src | 2 +- apps/emqx_exhook/src/emqx_exhook_api.erl | 2 +- .../src/emqx_gateway_api_listeners.erl | 2 +- apps/emqx_gateway/src/emqx_gateway_cm.erl | 2 +- apps/emqx_gateway/src/emqx_gateway_http.erl | 2 +- .../src/emqx_management.app.src | 2 +- apps/emqx_management/src/emqx_mgmt.erl | 38 +++++++++---------- apps/emqx_management/src/emqx_mgmt_api.erl | 2 +- .../src/emqx_mgmt_api_cluster.erl | 2 +- .../src/emqx_mgmt_api_configs.erl | 2 +- .../src/emqx_mgmt_api_listeners.erl | 2 +- .../src/emqx_mgmt_api_metrics.erl | 2 +- .../src/emqx_mgmt_api_stats.erl | 2 +- .../src/emqx_mgmt_api_trace.erl | 10 ++--- apps/emqx_management/test/emqx_mgmt_SUITE.erl | 10 ++--- .../test/emqx_mgmt_api_SUITE.erl | 6 +-- .../test/emqx_mgmt_api_configs_SUITE.erl | 4 +- .../test/emqx_mgmt_api_listeners_SUITE.erl | 4 +- apps/emqx_modules/src/emqx_modules.app.src | 2 +- apps/emqx_modules/src/emqx_telemetry.erl | 2 +- .../src/emqx_topic_metrics_api.erl | 8 ++-- .../test/emqx_telemetry_SUITE.erl | 2 +- .../src/emqx_prometheus.app.src | 2 +- apps/emqx_prometheus/src/emqx_prometheus.erl | 3 +- apps/emqx_retainer/src/emqx_retainer.app.src | 2 +- .../src/emqx_retainer_mnesia.erl | 4 +- .../src/emqx_rule_engine.app.src | 2 +- .../src/emqx_rule_engine_api.erl | 2 +- .../emqx_slow_subs/src/emqx_slow_subs.app.src | 2 +- .../emqx_slow_subs/src/emqx_slow_subs_api.erl | 2 +- apps/emqx_statsd/src/emqx_statsd.app.src | 2 +- apps/emqx_statsd/src/emqx_statsd.erl | 6 +-- changes/ce/fix-10118.en.md | 4 ++ changes/ce/fix-10118.zh.md | 4 ++ lib-ee/emqx_license/src/emqx_license.app.src | 2 +- .../src/emqx_license_resources.erl | 2 +- mix.exs | 2 +- rebar.config | 2 +- 51 files changed, 104 insertions(+), 95 deletions(-) create mode 100644 changes/ce/fix-10118.en.md create mode 100644 changes/ce/fix-10118.zh.md diff --git a/apps/emqx/rebar.config b/apps/emqx/rebar.config index 0ecbbfc1a..2ce97c13d 100644 --- a/apps/emqx/rebar.config +++ b/apps/emqx/rebar.config @@ -27,7 +27,7 @@ {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.5"}}}, {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.0"}}}, {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.4"}}}, - {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.14.3"}}}, + {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.14.4"}}}, {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.8.1"}}}, {hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.36.0"}}}, {pbkdf2, {git, "https://github.com/emqx/erlang-pbkdf2.git", {tag, "2.0.4"}}}, diff --git a/apps/emqx/src/emqx_sys.erl b/apps/emqx/src/emqx_sys.erl index 81b27d727..a5f14e32a 100644 --- a/apps/emqx/src/emqx_sys.erl +++ b/apps/emqx/src/emqx_sys.erl @@ -211,7 +211,7 @@ handle_info({timeout, TRef, heartbeat}, State = #state{heartbeat = TRef}) -> handle_info({timeout, TRef, tick}, State = #state{ticker = TRef, sysdescr = Descr}) -> publish_any(version, version()), publish_any(sysdescr, Descr), - publish_any(brokers, mria_mnesia:running_nodes()), + publish_any(brokers, mria:running_nodes()), publish_any(stats, emqx_stats:getstats()), publish_any(metrics, emqx_metrics:all()), {noreply, tick(State), hibernate}; diff --git a/apps/emqx/src/persistent_session/emqx_persistent_session.erl b/apps/emqx/src/persistent_session/emqx_persistent_session.erl index c1100cfdb..68f783283 100644 --- a/apps/emqx/src/persistent_session/emqx_persistent_session.erl +++ b/apps/emqx/src/persistent_session/emqx_persistent_session.erl @@ -303,7 +303,7 @@ resume(ClientInfo = #{clientid := ClientID}, ConnInfo, Session) -> %% 3. Notify writers that we are resuming. %% They will buffer new messages. ?tp(ps_notify_writers, #{sid => SessionID}), - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), NodeMarkers = resume_begin(Nodes, SessionID), ?tp(ps_node_markers, #{sid => SessionID, markers => NodeMarkers}), diff --git a/apps/emqx/test/props/prop_emqx_sys.erl b/apps/emqx/test/props/prop_emqx_sys.erl index 5e6c56341..505d729a7 100644 --- a/apps/emqx/test/props/prop_emqx_sys.erl +++ b/apps/emqx/test/props/prop_emqx_sys.erl @@ -30,7 +30,7 @@ emqx_metrics, emqx_stats, emqx_broker, - mria_mnesia, + mria, emqx_hooks, emqx_config_handler ]). @@ -109,8 +109,8 @@ do_mock(emqx_broker) -> ); do_mock(emqx_stats) -> meck:expect(emqx_stats, getstats, fun() -> [0] end); -do_mock(mria_mnesia) -> - meck:expect(mria_mnesia, running_nodes, fun() -> [node()] end); +do_mock(mria) -> + meck:expect(mria, running_nodes, fun() -> [node()] end); do_mock(emqx_metrics) -> meck:expect(emqx_metrics, all, fun() -> [{hello, 3}] end); do_mock(emqx_hooks) -> diff --git a/apps/emqx_authn/src/emqx_authn_api.erl b/apps/emqx_authn/src/emqx_authn_api.erl index 7e1c613d3..0a7f67f5a 100644 --- a/apps/emqx_authn/src/emqx_authn_api.erl +++ b/apps/emqx_authn/src/emqx_authn_api.erl @@ -881,7 +881,7 @@ lookup_from_local_node(ChainName, AuthenticatorID) -> end. lookup_from_all_nodes(ChainName, AuthenticatorID) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), LookupResult = emqx_authn_proto_v1:lookup_from_all_nodes(Nodes, ChainName, AuthenticatorID), case is_ok(LookupResult) of {ok, ResList} -> diff --git a/apps/emqx_authz/src/emqx_authz_api_sources.erl b/apps/emqx_authz/src/emqx_authz_api_sources.erl index f3b8d0f48..58fa471fc 100644 --- a/apps/emqx_authz/src/emqx_authz_api_sources.erl +++ b/apps/emqx_authz/src/emqx_authz_api_sources.erl @@ -356,7 +356,7 @@ lookup_from_local_node(Type) -> end. lookup_from_all_nodes(Type) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), case is_ok(emqx_authz_proto_v1:lookup_from_all_nodes(Nodes, Type)) of {ok, ResList} -> {StatusMap, MetricsMap, ResourceMetricsMap, ErrorMap} = make_result_map(ResList), diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index e46ebb5a1..ff55976d0 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -486,7 +486,7 @@ schema("/bridges_probe") -> {200, zip_bridges([ [format_resp(Data, Node) || Data <- emqx_bridge_proto_v1:list_bridges(Node)] - || Node <- mria_mnesia:running_nodes() + || Node <- mria:running_nodes() ])}. '/bridges/:id'(get, #{bindings := #{id := Id}}) -> @@ -590,7 +590,7 @@ lookup_from_all_nodes_metrics(BridgeType, BridgeName, SuccCode) -> do_lookup_from_all_nodes(BridgeType, BridgeName, SuccCode, FormatFun). do_lookup_from_all_nodes(BridgeType, BridgeName, SuccCode, FormatFun) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), case is_ok(emqx_bridge_proto_v1:lookup_from_all_nodes(Nodes, BridgeType, BridgeName)) of {ok, [{ok, _} | _] = Results} -> {SuccCode, FormatFun([R || {ok, R} <- Results])}; @@ -638,7 +638,7 @@ lookup_from_local_node(BridgeType, BridgeName) -> invalid -> ?NOT_FOUND(<<"Invalid operation: ", Op/binary>>); OperFunc -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), call_operation(all, OperFunc, [Nodes, BridgeType, BridgeName]) end ). diff --git a/apps/emqx_conf/src/emqx_cluster_rpc.erl b/apps/emqx_conf/src/emqx_cluster_rpc.erl index c285e09b8..b2f06f35a 100644 --- a/apps/emqx_conf/src/emqx_cluster_rpc.erl +++ b/apps/emqx_conf/src/emqx_cluster_rpc.erl @@ -512,7 +512,7 @@ do_alarm(Fun, Res, #{tnx_id := Id} = Meta) -> wait_for_all_nodes_commit(TnxId, Delay, Remain) -> Lagging = lagging_nodes(TnxId), - Stopped = Lagging -- mria_mnesia:running_nodes(), + Stopped = Lagging -- mria:running_nodes(), case Lagging -- Stopped of [] when Stopped =:= [] -> ok; @@ -537,7 +537,7 @@ wait_for_nodes_commit(RequiredSyncs, TnxId, Delay, Remain) -> [] -> ok; Lagging -> - Stopped = Lagging -- mria_mnesia:running_nodes(), + Stopped = Lagging -- mria:running_nodes(), case Stopped of [] -> {peers_lagging, Lagging}; _ -> {stopped_nodes, Stopped} diff --git a/apps/emqx_conf/src/emqx_conf.app.src b/apps/emqx_conf/src/emqx_conf.app.src index 1d04dc362..fbbffba1f 100644 --- a/apps/emqx_conf/src/emqx_conf.app.src +++ b/apps/emqx_conf/src/emqx_conf.app.src @@ -1,6 +1,6 @@ {application, emqx_conf, [ {description, "EMQX configuration management"}, - {vsn, "0.1.13"}, + {vsn, "0.1.14"}, {registered, []}, {mod, {emqx_conf_app, []}}, {applications, [kernel, stdlib, emqx_ctl]}, diff --git a/apps/emqx_conf/src/emqx_conf_cli.erl b/apps/emqx_conf/src/emqx_conf_cli.erl index 5c2fd9e18..8e109a1e6 100644 --- a/apps/emqx_conf/src/emqx_conf_cli.erl +++ b/apps/emqx_conf/src/emqx_conf_cli.erl @@ -33,7 +33,7 @@ admins(["status"]) -> status(); admins(["skip"]) -> status(), - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), lists:foreach(fun emqx_cluster_rpc:skip_failed_commit/1, Nodes), status(); admins(["skip", Node0]) -> @@ -46,13 +46,13 @@ admins(["tnxid", TnxId0]) -> emqx_ctl:print("~p~n", [emqx_cluster_rpc:query(TnxId)]); admins(["fast_forward"]) -> status(), - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), TnxId = emqx_cluster_rpc:latest_tnx_id(), lists:foreach(fun(N) -> emqx_cluster_rpc:fast_forward_to_commit(N, TnxId) end, Nodes), status(); admins(["fast_forward", ToTnxId]) -> status(), - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), TnxId = list_to_integer(ToTnxId), lists:foreach(fun(N) -> emqx_cluster_rpc:fast_forward_to_commit(N, TnxId) end, Nodes), status(); diff --git a/apps/emqx_conf/test/emqx_cluster_rpc_SUITE.erl b/apps/emqx_conf/test/emqx_cluster_rpc_SUITE.erl index 4c449f580..f7d3c76fd 100644 --- a/apps/emqx_conf/test/emqx_cluster_rpc_SUITE.erl +++ b/apps/emqx_conf/test/emqx_cluster_rpc_SUITE.erl @@ -48,14 +48,14 @@ init_per_suite(Config) -> meck:new(emqx_alarm, [non_strict, passthrough, no_link]), meck:expect(emqx_alarm, activate, 3, ok), meck:expect(emqx_alarm, deactivate, 3, ok), - meck:new(mria_mnesia, [non_strict, passthrough, no_link]), - meck:expect(mria_mnesia, running_nodes, 0, [?NODE1, {node(), ?NODE2}, {node(), ?NODE3}]), + meck:new(mria, [non_strict, passthrough, no_link]), + meck:expect(mria, running_nodes, 0, [?NODE1, {node(), ?NODE2}, {node(), ?NODE3}]), Config. end_per_suite(_Config) -> ekka:stop(), mria:stop(), - meck:unload(mria_mnesia), + meck:unload(mria), mria_mnesia:delete_schema(), meck:unload(emqx_alarm), ok. diff --git a/apps/emqx_dashboard/src/emqx_dashboard.app.src b/apps/emqx_dashboard/src/emqx_dashboard.app.src index 44260cbe1..3970d76e4 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard.app.src +++ b/apps/emqx_dashboard/src/emqx_dashboard.app.src @@ -2,7 +2,7 @@ {application, emqx_dashboard, [ {description, "EMQX Web Dashboard"}, % strict semver, bump manually! - {vsn, "5.0.14"}, + {vsn, "5.0.15"}, {modules, []}, {registered, [emqx_dashboard_sup]}, {applications, [kernel, stdlib, mnesia, minirest, emqx, emqx_ctl]}, diff --git a/apps/emqx_dashboard/src/emqx_dashboard_monitor.erl b/apps/emqx_dashboard/src/emqx_dashboard_monitor.erl index 23ac4f35e..019feff51 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_monitor.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_monitor.erl @@ -126,7 +126,7 @@ current_rate() -> (_Node, Error) -> Error end, - case lists:foldl(Fun, #{}, mria_mnesia:cluster_nodes(running)) of + case lists:foldl(Fun, #{}, mria:cluster_nodes(running)) of {badrpc, Reason} -> {badrpc, Reason}; Rate -> @@ -205,7 +205,7 @@ do_call(Request) -> gen_server:call(?MODULE, Request, 5000). do_sample(all, Time) -> - do_sample(mria_mnesia:cluster_nodes(running), Time, #{}); + do_sample(mria:cluster_nodes(running), Time, #{}); do_sample(Node, Time) when Node == node() -> MS = match_spec(Time), internal_format(ets:select(?TAB, MS)); diff --git a/apps/emqx_exhook/src/emqx_exhook.app.src b/apps/emqx_exhook/src/emqx_exhook.app.src index 04e0a57db..8ca15a907 100644 --- a/apps/emqx_exhook/src/emqx_exhook.app.src +++ b/apps/emqx_exhook/src/emqx_exhook.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_exhook, [ {description, "EMQX Extension for Hook"}, - {vsn, "5.0.10"}, + {vsn, "5.0.11"}, {modules, []}, {registered, []}, {mod, {emqx_exhook_app, []}}, diff --git a/apps/emqx_exhook/src/emqx_exhook_api.erl b/apps/emqx_exhook/src/emqx_exhook_api.erl index bcfc68269..aa5d1897f 100644 --- a/apps/emqx_exhook/src/emqx_exhook_api.erl +++ b/apps/emqx_exhook/src/emqx_exhook_api.erl @@ -471,7 +471,7 @@ fill_server_hooks_info([], _Name, _Default, MetricsL) -> -spec call_cluster(fun(([node()]) -> emqx_rpc:erpc_multicall(A))) -> [{node(), A | {error, _Err}}]. call_cluster(Fun) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), Ret = Fun(Nodes), lists:zip(Nodes, lists:map(fun emqx_rpc:unwrap_erpc/1, Ret)). diff --git a/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl b/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl index 1b4f2e0ac..43c8156d6 100644 --- a/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl +++ b/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl @@ -283,7 +283,7 @@ get_cluster_listeners_info(GwName) -> ). listeners_cluster_status(Listeners) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), case emqx_gateway_api_listeners_proto_v1:listeners_cluster_status(Nodes, Listeners) of {Results, []} -> Results; diff --git a/apps/emqx_gateway/src/emqx_gateway_cm.erl b/apps/emqx_gateway/src/emqx_gateway_cm.erl index 4719b1da8..599493d97 100644 --- a/apps/emqx_gateway/src/emqx_gateway_cm.erl +++ b/apps/emqx_gateway/src/emqx_gateway_cm.erl @@ -214,7 +214,7 @@ get_chan_info(GwName, ClientId, ChanPid) -> -spec lookup_by_clientid(gateway_name(), emqx_types:clientid()) -> [pid()]. lookup_by_clientid(GwName, ClientId) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), case emqx_gateway_cm_proto_v1:lookup_by_clientid( Nodes, GwName, ClientId diff --git a/apps/emqx_gateway/src/emqx_gateway_http.erl b/apps/emqx_gateway/src/emqx_gateway_http.erl index d80e3433f..a0155a126 100644 --- a/apps/emqx_gateway/src/emqx_gateway_http.erl +++ b/apps/emqx_gateway/src/emqx_gateway_http.erl @@ -148,7 +148,7 @@ gateway_status(GwName) -> end. cluster_gateway_status(GwName) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), case emqx_gateway_http_proto_v1:get_cluster_status(Nodes, GwName) of {Results, []} -> Results; diff --git a/apps/emqx_management/src/emqx_management.app.src b/apps/emqx_management/src/emqx_management.app.src index 08de7b670..966358f47 100644 --- a/apps/emqx_management/src/emqx_management.app.src +++ b/apps/emqx_management/src/emqx_management.app.src @@ -2,7 +2,7 @@ {application, emqx_management, [ {description, "EMQX Management API and CLI"}, % strict semver, bump manually! - {vsn, "5.0.15"}, + {vsn, "5.0.16"}, {modules, []}, {registered, [emqx_management_sup]}, {applications, [kernel, stdlib, emqx_plugins, minirest, emqx, emqx_ctl]}, diff --git a/apps/emqx_management/src/emqx_mgmt.erl b/apps/emqx_management/src/emqx_mgmt.erl index dfe1ff310..5ba12646f 100644 --- a/apps/emqx_management/src/emqx_mgmt.erl +++ b/apps/emqx_management/src/emqx_mgmt.erl @@ -112,8 +112,8 @@ %%-------------------------------------------------------------------- list_nodes() -> - Running = mria_mnesia:cluster_nodes(running), - Stopped = mria_mnesia:cluster_nodes(stopped), + Running = mria:cluster_nodes(running), + Stopped = mria:cluster_nodes(stopped), DownNodes = lists:map(fun stopped_node_info/1, Stopped), [{Node, Info} || #{node := Node} = Info <- node_info(Running)] ++ DownNodes. @@ -199,7 +199,7 @@ vm_stats() -> %%-------------------------------------------------------------------- list_brokers() -> - Running = mria_mnesia:running_nodes(), + Running = mria:running_nodes(), [{Node, Broker} || #{node := Node} = Broker <- broker_info(Running)]. lookup_broker(Node) -> @@ -223,7 +223,7 @@ broker_info(Nodes) -> %%-------------------------------------------------------------------- get_metrics() -> - nodes_info_count([get_metrics(Node) || Node <- mria_mnesia:running_nodes()]). + nodes_info_count([get_metrics(Node) || Node <- mria:running_nodes()]). get_metrics(Node) -> unwrap_rpc(emqx_proto_v1:get_metrics(Node)). @@ -243,7 +243,7 @@ get_stats() -> Stats = get_stats(Node), delete_keys(Stats, GlobalStatsKeys) end - || Node <- mria_mnesia:running_nodes() + || Node <- mria:running_nodes() ]), GlobalStats = maps:with(GlobalStatsKeys, maps:from_list(get_stats(node()))), maps:merge(CountStats, GlobalStats). @@ -275,12 +275,12 @@ nodes_info_count(PropList) -> lookup_client({clientid, ClientId}, FormatFun) -> lists:append([ lookup_client(Node, {clientid, ClientId}, FormatFun) - || Node <- mria_mnesia:running_nodes() + || Node <- mria:running_nodes() ]); lookup_client({username, Username}, FormatFun) -> lists:append([ lookup_client(Node, {username, Username}, FormatFun) - || Node <- mria_mnesia:running_nodes() + || Node <- mria:running_nodes() ]). lookup_client(Node, Key, FormatFun) -> @@ -307,7 +307,7 @@ kickout_client(ClientId) -> [] -> {error, not_found}; _ -> - Results = [kickout_client(Node, ClientId) || Node <- mria_mnesia:running_nodes()], + Results = [kickout_client(Node, ClientId) || Node <- mria:running_nodes()], check_results(Results) end. @@ -322,7 +322,7 @@ list_client_subscriptions(ClientId) -> [] -> {error, not_found}; _ -> - Results = [client_subscriptions(Node, ClientId) || Node <- mria_mnesia:running_nodes()], + Results = [client_subscriptions(Node, ClientId) || Node <- mria:running_nodes()], Filter = fun ({error, _}) -> @@ -340,18 +340,18 @@ client_subscriptions(Node, ClientId) -> {Node, unwrap_rpc(emqx_broker_proto_v1:list_client_subscriptions(Node, ClientId))}. clean_authz_cache(ClientId) -> - Results = [clean_authz_cache(Node, ClientId) || Node <- mria_mnesia:running_nodes()], + Results = [clean_authz_cache(Node, ClientId) || Node <- mria:running_nodes()], check_results(Results). clean_authz_cache(Node, ClientId) -> unwrap_rpc(emqx_proto_v1:clean_authz_cache(Node, ClientId)). clean_authz_cache_all() -> - Results = [{Node, clean_authz_cache_all(Node)} || Node <- mria_mnesia:running_nodes()], + Results = [{Node, clean_authz_cache_all(Node)} || Node <- mria:running_nodes()], wrap_results(Results). clean_pem_cache_all() -> - Results = [{Node, clean_pem_cache_all(Node)} || Node <- mria_mnesia:running_nodes()], + Results = [{Node, clean_pem_cache_all(Node)} || Node <- mria:running_nodes()], wrap_results(Results). wrap_results(Results) -> @@ -379,7 +379,7 @@ set_keepalive(_ClientId, _Interval) -> %% @private call_client(ClientId, Req) -> - Results = [call_client(Node, ClientId, Req) || Node <- mria_mnesia:running_nodes()], + Results = [call_client(Node, ClientId, Req) || Node <- mria:running_nodes()], Expected = lists:filter( fun ({error, _}) -> false; @@ -428,7 +428,7 @@ list_subscriptions(Node) -> list_subscriptions_via_topic(Topic, FormatFun) -> lists:append([ list_subscriptions_via_topic(Node, Topic, FormatFun) - || Node <- mria_mnesia:running_nodes() + || Node <- mria:running_nodes() ]). list_subscriptions_via_topic(Node, Topic, _FormatFun = {M, F}) -> @@ -442,7 +442,7 @@ list_subscriptions_via_topic(Node, Topic, _FormatFun = {M, F}) -> %%-------------------------------------------------------------------- subscribe(ClientId, TopicTables) -> - subscribe(mria_mnesia:running_nodes(), ClientId, TopicTables). + subscribe(mria:running_nodes(), ClientId, TopicTables). subscribe([Node | Nodes], ClientId, TopicTables) -> case unwrap_rpc(emqx_management_proto_v3:subscribe(Node, ClientId, TopicTables)) of @@ -467,7 +467,7 @@ publish(Msg) -> -spec unsubscribe(emqx_types:clientid(), emqx_types:topic()) -> {unsubscribe, _} | {error, channel_not_found}. unsubscribe(ClientId, Topic) -> - unsubscribe(mria_mnesia:running_nodes(), ClientId, Topic). + unsubscribe(mria:running_nodes(), ClientId, Topic). -spec unsubscribe([node()], emqx_types:clientid(), emqx_types:topic()) -> {unsubscribe, _} | {error, channel_not_found}. @@ -490,7 +490,7 @@ do_unsubscribe(ClientId, Topic) -> -spec unsubscribe_batch(emqx_types:clientid(), [emqx_types:topic()]) -> {unsubscribe, _} | {error, channel_not_found}. unsubscribe_batch(ClientId, Topics) -> - unsubscribe_batch(mria_mnesia:running_nodes(), ClientId, Topics). + unsubscribe_batch(mria:running_nodes(), ClientId, Topics). -spec unsubscribe_batch([node()], emqx_types:clientid(), [emqx_types:topic()]) -> {unsubscribe_batch, _} | {error, channel_not_found}. @@ -515,7 +515,7 @@ do_unsubscribe_batch(ClientId, Topics) -> %%-------------------------------------------------------------------- get_alarms(Type) -> - [{Node, get_alarms(Node, Type)} || Node <- mria_mnesia:running_nodes()]. + [{Node, get_alarms(Node, Type)} || Node <- mria:running_nodes()]. get_alarms(Node, Type) -> add_duration_field(unwrap_rpc(emqx_proto_v1:get_alarms(Node, Type))). @@ -524,7 +524,7 @@ deactivate(Node, Name) -> unwrap_rpc(emqx_proto_v1:deactivate_alarm(Node, Name)). delete_all_deactivated_alarms() -> - [delete_all_deactivated_alarms(Node) || Node <- mria_mnesia:running_nodes()]. + [delete_all_deactivated_alarms(Node) || Node <- mria:running_nodes()]. delete_all_deactivated_alarms(Node) -> unwrap_rpc(emqx_proto_v1:delete_all_deactivated_alarms(Node)). diff --git a/apps/emqx_management/src/emqx_mgmt_api.erl b/apps/emqx_management/src/emqx_mgmt_api.erl index a0a40533d..c77752f7d 100644 --- a/apps/emqx_management/src/emqx_mgmt_api.erl +++ b/apps/emqx_management/src/emqx_mgmt_api.erl @@ -163,7 +163,7 @@ cluster_query(Tab, QString, QSchema, MsFun, FmtFun) -> {error, page_limit_invalid}; Meta -> {_CodCnt, NQString} = parse_qstring(QString, QSchema), - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), ResultAcc = init_query_result(), QueryState = init_query_state(Tab, NQString, MsFun, Meta), NResultAcc = do_cluster_query( diff --git a/apps/emqx_management/src/emqx_mgmt_api_cluster.erl b/apps/emqx_management/src/emqx_mgmt_api_cluster.erl index 37e94200e..68bb6c81d 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_cluster.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_cluster.erl @@ -101,7 +101,7 @@ cluster_info(get, _) -> ClusterName = application:get_env(ekka, cluster_name, emqxcl), Info = #{ name => ClusterName, - nodes => mria_mnesia:running_nodes(), + nodes => mria:running_nodes(), self => node() }, {200, Info}. diff --git a/apps/emqx_management/src/emqx_mgmt_api_configs.erl b/apps/emqx_management/src/emqx_mgmt_api_configs.erl index d9cdf6477..de93a1071 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_configs.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_configs.erl @@ -279,7 +279,7 @@ configs(get, Params, _Req) -> QS = maps:get(query_string, Params, #{}), Node = maps:get(<<"node">>, QS, node()), case - lists:member(Node, mria_mnesia:running_nodes()) andalso + lists:member(Node, mria:running_nodes()) andalso emqx_management_proto_v2:get_full_config(Node) of false -> diff --git a/apps/emqx_management/src/emqx_mgmt_api_listeners.erl b/apps/emqx_management/src/emqx_mgmt_api_listeners.erl index 7bf68ee4d..c126cfe19 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_listeners.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_listeners.erl @@ -483,7 +483,7 @@ err_msg_str(Reason) -> io_lib:format("~p", [Reason]). list_listeners() -> - [list_listeners(Node) || Node <- mria_mnesia:running_nodes()]. + [list_listeners(Node) || Node <- mria:running_nodes()]. list_listeners(Node) -> wrap_rpc(emqx_management_proto_v2:list_listeners(Node)). diff --git a/apps/emqx_management/src/emqx_mgmt_api_metrics.erl b/apps/emqx_management/src/emqx_mgmt_api_metrics.erl index 72b616fae..1c5c8f62a 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_metrics.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_metrics.erl @@ -59,7 +59,7 @@ metrics(get, #{query_string := Qs}) -> maps:from_list( emqx_mgmt:get_metrics(Node) ++ [{node, Node}] ) - || Node <- mria_mnesia:running_nodes() + || Node <- mria:running_nodes() ], {200, Data} end. diff --git a/apps/emqx_management/src/emqx_mgmt_api_stats.erl b/apps/emqx_management/src/emqx_mgmt_api_stats.erl index 19bb3e737..1d3c0e21b 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_stats.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_stats.erl @@ -129,7 +129,7 @@ list(get, #{query_string := Qs}) -> _ -> Data = [ maps:from_list(emqx_mgmt:get_stats(Node) ++ [{node, Node}]) - || Node <- mria_mnesia:running_nodes() + || Node <- mria:running_nodes() ], {200, Data} end. diff --git a/apps/emqx_management/src/emqx_mgmt_api_trace.erl b/apps/emqx_management/src/emqx_mgmt_api_trace.erl index 38ce9dcf2..b93839b0b 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_trace.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_trace.erl @@ -376,7 +376,7 @@ trace(get, _Params) -> fun(#{start_at := A}, #{start_at := B}) -> A > B end, emqx_trace:format(List0) ), - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), TraceSize = wrap_rpc(emqx_mgmt_trace_proto_v2:get_trace_size(Nodes)), AllFileSize = lists:foldl(fun(F, Acc) -> maps:merge(Acc, F) end, #{}, TraceSize), Now = erlang:system_time(second), @@ -445,7 +445,7 @@ format_trace(Trace0) -> LogSize = lists:foldl( fun(Node, Acc) -> Acc#{Node => 0} end, #{}, - mria_mnesia:running_nodes() + mria:running_nodes() ), Trace2 = maps:without([enable, filter], Trace1), Trace2#{ @@ -541,13 +541,13 @@ group_trace_file(ZipDir, TraceLog, TraceFiles) -> ). collect_trace_file(undefined, TraceLog) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), wrap_rpc(emqx_mgmt_trace_proto_v2:trace_file(Nodes, TraceLog)); collect_trace_file(Node, TraceLog) -> wrap_rpc(emqx_mgmt_trace_proto_v2:trace_file([Node], TraceLog)). collect_trace_file_detail(TraceLog) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), wrap_rpc(emqx_mgmt_trace_proto_v2:trace_file_detail(Nodes, TraceLog)). wrap_rpc({GoodRes, BadNodes}) -> @@ -677,7 +677,7 @@ parse_node(Query, Default) -> {ok, Default}; {ok, NodeBin} -> Node = binary_to_existing_atom(NodeBin), - true = lists:member(Node, mria_mnesia:running_nodes()), + true = lists:member(Node, mria:running_nodes()), {ok, Node} end catch diff --git a/apps/emqx_management/test/emqx_mgmt_SUITE.erl b/apps/emqx_management/test/emqx_mgmt_SUITE.erl index 4619905cb..71b51b67c 100644 --- a/apps/emqx_management/test/emqx_mgmt_SUITE.erl +++ b/apps/emqx_management/test/emqx_mgmt_SUITE.erl @@ -36,16 +36,16 @@ end_per_suite(_) -> emqx_mgmt_api_test_util:end_suite([emqx_management, emqx_conf]). init_per_testcase(TestCase, Config) -> - meck:expect(mria_mnesia, running_nodes, 0, [node()]), + meck:expect(mria, running_nodes, 0, [node()]), emqx_common_test_helpers:init_per_testcase(?MODULE, TestCase, Config). end_per_testcase(TestCase, Config) -> - meck:unload(mria_mnesia), + meck:unload(mria), emqx_common_test_helpers:end_per_testcase(?MODULE, TestCase, Config). t_list_nodes(init, Config) -> meck:expect( - mria_mnesia, + mria, cluster_nodes, fun (running) -> [node()]; @@ -125,7 +125,7 @@ t_lookup_client(_Config) -> emqx_mgmt:lookup_client({username, <<"user1">>}, ?FORMATFUN) ), ?assertEqual([], emqx_mgmt:lookup_client({clientid, <<"notfound">>}, ?FORMATFUN)), - meck:expect(mria_mnesia, running_nodes, 0, [node(), 'fake@nonode']), + meck:expect(mria, running_nodes, 0, [node(), 'fake@nonode']), ?assertMatch( [_ | {error, nodedown}], emqx_mgmt:lookup_client({clientid, <<"client1">>}, ?FORMATFUN) ). @@ -188,7 +188,7 @@ t_clean_cache(_Config) -> {error, _}, emqx_mgmt:clean_pem_cache_all() ), - meck:expect(mria_mnesia, running_nodes, 0, [node(), 'fake@nonode']), + meck:expect(mria, running_nodes, 0, [node(), 'fake@nonode']), ?assertMatch( {error, [{'fake@nonode', {error, _}}]}, emqx_mgmt:clean_authz_cache_all() diff --git a/apps/emqx_management/test/emqx_mgmt_api_SUITE.erl b/apps/emqx_management/test/emqx_mgmt_api_SUITE.erl index 4d0262e6a..bacec718d 100644 --- a/apps/emqx_management/test/emqx_mgmt_api_SUITE.erl +++ b/apps/emqx_management/test/emqx_mgmt_api_SUITE.erl @@ -179,14 +179,14 @@ t_bad_rpc(_) -> ClientLs1 = [start_emqtt_client(node(), I, 1883) || I <- lists:seq(1, 10)], Path = emqx_mgmt_api_test_util:api_path(["clients?limit=2&page=2"]), try - meck:expect(mria_mnesia, running_nodes, 0, ['fake@nohost']), + meck:expect(mria, running_nodes, 0, ['fake@nohost']), {error, {_, 500, _}} = emqx_mgmt_api_test_util:request_api(get, Path), %% good cop, bad cop - meck:expect(mria_mnesia, running_nodes, 0, [node(), 'fake@nohost']), + meck:expect(mria, running_nodes, 0, [node(), 'fake@nohost']), {error, {_, 500, _}} = emqx_mgmt_api_test_util:request_api(get, Path) after _ = lists:foreach(fun(C) -> emqtt:disconnect(C) end, ClientLs1), - meck:unload(mria_mnesia), + meck:unload(mria), emqx_mgmt_api_test_util:end_suite() end. diff --git a/apps/emqx_management/test/emqx_mgmt_api_configs_SUITE.erl b/apps/emqx_management/test/emqx_mgmt_api_configs_SUITE.erl index d26f4480b..2d24bce99 100644 --- a/apps/emqx_management/test/emqx_mgmt_api_configs_SUITE.erl +++ b/apps/emqx_management/test/emqx_mgmt_api_configs_SUITE.erl @@ -212,7 +212,7 @@ t_dashboard(_Config) -> t_configs_node({'init', Config}) -> Node = node(), - meck:expect(mria_mnesia, running_nodes, fun() -> [Node, bad_node, other_node] end), + meck:expect(mria, running_nodes, fun() -> [Node, bad_node, other_node] end), meck:expect( emqx_management_proto_v2, get_full_config, @@ -224,7 +224,7 @@ t_configs_node({'init', Config}) -> ), Config; t_configs_node({'end', _}) -> - meck:unload([mria_mnesia, emqx_management_proto_v2]); + meck:unload([mria, emqx_management_proto_v2]); t_configs_node(_) -> Node = atom_to_list(node()), diff --git a/apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl b/apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl index 0e212d52f..3238588e2 100644 --- a/apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl +++ b/apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl @@ -168,8 +168,8 @@ t_api_listeners_list_not_ready(Config) when is_list(Config) -> L3 = get_tcp_listeners(Node2), Comment = #{ - node1 => rpc:call(Node1, mria_mnesia, running_nodes, []), - node2 => rpc:call(Node2, mria_mnesia, running_nodes, []) + node1 => rpc:call(Node1, mria, running_nodes, []), + node2 => rpc:call(Node2, mria, running_nodes, []) }, ?assert(length(L1) > length(L2), Comment), diff --git a/apps/emqx_modules/src/emqx_modules.app.src b/apps/emqx_modules/src/emqx_modules.app.src index 60d36d673..4a9cb6723 100644 --- a/apps/emqx_modules/src/emqx_modules.app.src +++ b/apps/emqx_modules/src/emqx_modules.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_modules, [ {description, "EMQX Modules"}, - {vsn, "5.0.10"}, + {vsn, "5.0.11"}, {modules, []}, {applications, [kernel, stdlib, emqx, emqx_ctl]}, {mod, {emqx_modules_app, []}}, diff --git a/apps/emqx_modules/src/emqx_telemetry.erl b/apps/emqx_modules/src/emqx_telemetry.erl index 16fef8d34..6d5c772f0 100644 --- a/apps/emqx_modules/src/emqx_telemetry.erl +++ b/apps/emqx_modules/src/emqx_telemetry.erl @@ -266,7 +266,7 @@ uptime() -> element(1, erlang:statistics(wall_clock)). nodes_uuid() -> - Nodes = lists:delete(node(), mria_mnesia:running_nodes()), + Nodes = lists:delete(node(), mria:running_nodes()), lists:foldl( fun(Node, Acc) -> case emqx_telemetry_proto_v1:get_node_uuid(Node) of diff --git a/apps/emqx_modules/src/emqx_topic_metrics_api.erl b/apps/emqx_modules/src/emqx_topic_metrics_api.erl index ef3c2be69..50b586228 100644 --- a/apps/emqx_modules/src/emqx_topic_metrics_api.erl +++ b/apps/emqx_modules/src/emqx_topic_metrics_api.erl @@ -321,7 +321,7 @@ operate_topic_metrics(delete, #{bindings := #{topic := Topic}}) -> %%-------------------------------------------------------------------- cluster_accumulation_metrics() -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), case emqx_topic_metrics_proto_v1:metrics(Nodes) of {SuccResList, []} -> {ok, accumulate_nodes_metrics(SuccResList)}; @@ -330,7 +330,7 @@ cluster_accumulation_metrics() -> end. cluster_accumulation_metrics(Topic) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), case emqx_topic_metrics_proto_v1:metrics(Nodes, Topic) of {SuccResList, []} -> case @@ -422,12 +422,12 @@ do_accumulation_metrics(MetricsIn, {MetricsAcc, _}) -> ). reset() -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), _ = emqx_topic_metrics_proto_v1:reset(Nodes), ok. reset(Topic) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), case emqx_topic_metrics_proto_v1:reset(Nodes, Topic) of {SuccResList, []} -> case diff --git a/apps/emqx_modules/test/emqx_telemetry_SUITE.erl b/apps/emqx_modules/test/emqx_telemetry_SUITE.erl index 8c6a43e47..cee255e77 100644 --- a/apps/emqx_modules/test/emqx_telemetry_SUITE.erl +++ b/apps/emqx_modules/test/emqx_telemetry_SUITE.erl @@ -856,7 +856,7 @@ stop_slave(Node) -> %emqx_cluster_rpc:fast_forward_to_commit(Node, 100), rpc:call(Node, ?MODULE, leave_cluster, []), ok = slave:stop(Node), - ?assertEqual([node()], mria_mnesia:running_nodes()), + ?assertEqual([node()], mria:running_nodes()), ?assertEqual([], nodes()), _ = application:stop(mria), ok = application:start(mria). diff --git a/apps/emqx_prometheus/src/emqx_prometheus.app.src b/apps/emqx_prometheus/src/emqx_prometheus.app.src index 6970ba777..07ae38d75 100644 --- a/apps/emqx_prometheus/src/emqx_prometheus.app.src +++ b/apps/emqx_prometheus/src/emqx_prometheus.app.src @@ -2,7 +2,7 @@ {application, emqx_prometheus, [ {description, "Prometheus for EMQX"}, % strict semver, bump manually! - {vsn, "5.0.6"}, + {vsn, "5.0.7"}, {modules, []}, {registered, [emqx_prometheus_sup]}, {applications, [kernel, stdlib, prometheus, emqx, emqx_management]}, diff --git a/apps/emqx_prometheus/src/emqx_prometheus.erl b/apps/emqx_prometheus/src/emqx_prometheus.erl index 62e6f1d9a..60d52f58b 100644 --- a/apps/emqx_prometheus/src/emqx_prometheus.erl +++ b/apps/emqx_prometheus/src/emqx_prometheus.erl @@ -599,7 +599,8 @@ emqx_cluster() -> ]. emqx_cluster_data() -> - #{running_nodes := Running, stopped_nodes := Stopped} = mria_mnesia:cluster_info(), + Running = mria:cluster_nodes(running), + Stopped = mria:cluster_nodes(stopped), [ {nodes_running, length(Running)}, {nodes_stopped, length(Stopped)} diff --git a/apps/emqx_retainer/src/emqx_retainer.app.src b/apps/emqx_retainer/src/emqx_retainer.app.src index 8bdae6d7f..11013cdd3 100644 --- a/apps/emqx_retainer/src/emqx_retainer.app.src +++ b/apps/emqx_retainer/src/emqx_retainer.app.src @@ -2,7 +2,7 @@ {application, emqx_retainer, [ {description, "EMQX Retainer"}, % strict semver, bump manually! - {vsn, "5.0.10"}, + {vsn, "5.0.11"}, {modules, []}, {registered, [emqx_retainer_sup]}, {applications, [kernel, stdlib, emqx, emqx_ctl]}, diff --git a/apps/emqx_retainer/src/emqx_retainer_mnesia.erl b/apps/emqx_retainer/src/emqx_retainer_mnesia.erl index cadb9110f..2137d49f2 100644 --- a/apps/emqx_retainer/src/emqx_retainer_mnesia.erl +++ b/apps/emqx_retainer/src/emqx_retainer_mnesia.erl @@ -626,7 +626,7 @@ do_reindex_batch(QC, Done) -> {Status, Done + length(Topics)}. wait_dispatch_complete(Timeout) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), {Results, []} = emqx_retainer_proto_v2:wait_dispatch_complete(Nodes, Timeout), lists:all( fun(Result) -> Result =:= ok end, @@ -649,7 +649,7 @@ active_indices() -> {dirty_indices(read), dirty_indices(write)}. are_indices_updated(Indices) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), case emqx_retainer_proto_v2:active_mnesia_indices(Nodes) of {Results, []} -> lists:all( diff --git a/apps/emqx_rule_engine/src/emqx_rule_engine.app.src b/apps/emqx_rule_engine/src/emqx_rule_engine.app.src index 4c924b824..1681297ec 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_engine.app.src +++ b/apps/emqx_rule_engine/src/emqx_rule_engine.app.src @@ -2,7 +2,7 @@ {application, emqx_rule_engine, [ {description, "EMQX Rule Engine"}, % strict semver, bump manually! - {vsn, "5.0.10"}, + {vsn, "5.0.11"}, {modules, []}, {registered, [emqx_rule_engine_sup, emqx_rule_engine]}, {applications, [kernel, stdlib, rulesql, getopt, emqx_ctl]}, diff --git a/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl b/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl index 62e1553d2..30de3e8e8 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl @@ -529,7 +529,7 @@ get_rule_metrics(Id) -> end, [ Format(Node, emqx_plugin_libs_proto_v1:get_metrics(Node, rule_metrics, Id)) - || Node <- mria_mnesia:running_nodes() + || Node <- mria:running_nodes() ]. aggregate_metrics(AllMetrics) -> diff --git a/apps/emqx_slow_subs/src/emqx_slow_subs.app.src b/apps/emqx_slow_subs/src/emqx_slow_subs.app.src index 170a4bb02..7d3fc341d 100644 --- a/apps/emqx_slow_subs/src/emqx_slow_subs.app.src +++ b/apps/emqx_slow_subs/src/emqx_slow_subs.app.src @@ -1,7 +1,7 @@ {application, emqx_slow_subs, [ {description, "EMQX Slow Subscribers Statistics"}, % strict semver, bump manually! - {vsn, "1.0.3"}, + {vsn, "1.0.4"}, {modules, []}, {registered, [emqx_slow_subs_sup]}, {applications, [kernel, stdlib, emqx]}, diff --git a/apps/emqx_slow_subs/src/emqx_slow_subs_api.erl b/apps/emqx_slow_subs/src/emqx_slow_subs_api.erl index 8ebdd50c3..311bcf62e 100644 --- a/apps/emqx_slow_subs/src/emqx_slow_subs_api.erl +++ b/apps/emqx_slow_subs/src/emqx_slow_subs_api.erl @@ -147,5 +147,5 @@ settings(put, #{body := Body}) -> end. rpc_call(Fun) -> - Nodes = mria_mnesia:running_nodes(), + Nodes = mria:running_nodes(), Fun(Nodes). diff --git a/apps/emqx_statsd/src/emqx_statsd.app.src b/apps/emqx_statsd/src/emqx_statsd.app.src index 67825162e..9d40c6857 100644 --- a/apps/emqx_statsd/src/emqx_statsd.app.src +++ b/apps/emqx_statsd/src/emqx_statsd.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_statsd, [ {description, "EMQX Statsd"}, - {vsn, "5.0.6"}, + {vsn, "5.0.7"}, {registered, []}, {mod, {emqx_statsd_app, []}}, {applications, [ diff --git a/apps/emqx_statsd/src/emqx_statsd.erl b/apps/emqx_statsd/src/emqx_statsd.erl index 75c15fa9e..c2e1819ac 100644 --- a/apps/emqx_statsd/src/emqx_statsd.erl +++ b/apps/emqx_statsd/src/emqx_statsd.erl @@ -53,9 +53,9 @@ -define(SAMPLE_TIMEOUT, sample_timeout). %% Remove after 5.1.x -start() -> check_multicall_result(emqx_statsd_proto_v1:start(mria_mnesia:running_nodes())). -stop() -> check_multicall_result(emqx_statsd_proto_v1:stop(mria_mnesia:running_nodes())). -restart() -> check_multicall_result(emqx_statsd_proto_v1:restart(mria_mnesia:running_nodes())). +start() -> check_multicall_result(emqx_statsd_proto_v1:start(mria:running_nodes())). +stop() -> check_multicall_result(emqx_statsd_proto_v1:stop(mria:running_nodes())). +restart() -> check_multicall_result(emqx_statsd_proto_v1:restart(mria:running_nodes())). do_start() -> emqx_statsd_sup:ensure_child_started(?APP). diff --git a/changes/ce/fix-10118.en.md b/changes/ce/fix-10118.en.md new file mode 100644 index 000000000..dd6b5129f --- /dev/null +++ b/changes/ce/fix-10118.en.md @@ -0,0 +1,4 @@ +Fix problems related to manual joining of EMQX replicant nodes to the cluster. +Previously, manually joining and then leaving the cluster rendered replicant node unable to start EMQX again and required a node restart. + +[Mria PR](https://github.com/emqx/mria/pull/128) diff --git a/changes/ce/fix-10118.zh.md b/changes/ce/fix-10118.zh.md new file mode 100644 index 000000000..4334a5bba --- /dev/null +++ b/changes/ce/fix-10118.zh.md @@ -0,0 +1,4 @@ +修复与手动加入 EMQX `replicant` 节点到集群有关的问题。 +以前,手动加入然后离开集群会使 `replicant` 节点无法再次启动 EMQX,需要重新启动节点。 + +[Mria PR](https://github.com/emqx/mria/pull/128) diff --git a/lib-ee/emqx_license/src/emqx_license.app.src b/lib-ee/emqx_license/src/emqx_license.app.src index fdc701369..7a569c402 100644 --- a/lib-ee/emqx_license/src/emqx_license.app.src +++ b/lib-ee/emqx_license/src/emqx_license.app.src @@ -1,6 +1,6 @@ {application, emqx_license, [ {description, "EMQX License"}, - {vsn, "5.0.6"}, + {vsn, "5.0.7"}, {modules, []}, {registered, [emqx_license_sup]}, {applications, [kernel, stdlib, emqx_ctl]}, diff --git a/lib-ee/emqx_license/src/emqx_license_resources.erl b/lib-ee/emqx_license/src/emqx_license_resources.erl index 3f353064b..2cc62b8a3 100644 --- a/lib-ee/emqx_license/src/emqx_license_resources.erl +++ b/lib-ee/emqx_license/src/emqx_license_resources.erl @@ -127,7 +127,7 @@ ensure_timer(#{check_peer_interval := CheckInterval} = State) -> State#{timer => erlang:send_after(CheckInterval, self(), update_resources)}. remote_connection_count() -> - Nodes = mria_mnesia:running_nodes() -- [node()], + Nodes = mria:running_nodes() -- [node()], Results = emqx_license_proto_v2:remote_connection_counts(Nodes), Counts = [Count || {ok, Count} <- Results], lists:sum(Counts). diff --git a/mix.exs b/mix.exs index 26411e983..158d46af4 100644 --- a/mix.exs +++ b/mix.exs @@ -54,7 +54,7 @@ defmodule EMQXUmbrella.MixProject do {:cowboy, github: "emqx/cowboy", tag: "2.9.0", override: true}, {:esockd, github: "emqx/esockd", tag: "5.9.4", override: true}, {:rocksdb, github: "emqx/erlang-rocksdb", tag: "1.7.2-emqx-9", override: true}, - {:ekka, github: "emqx/ekka", tag: "0.14.3", override: true}, + {:ekka, github: "emqx/ekka", tag: "0.14.4", override: true}, {:gen_rpc, github: "emqx/gen_rpc", tag: "2.8.1", override: true}, {:grpc, github: "emqx/grpc-erl", tag: "0.6.7", override: true}, {:minirest, github: "emqx/minirest", tag: "1.3.8", override: true}, diff --git a/rebar.config b/rebar.config index 6309f9233..7d6d0e404 100644 --- a/rebar.config +++ b/rebar.config @@ -56,7 +56,7 @@ , {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.0"}}} , {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.4"}}} , {rocksdb, {git, "https://github.com/emqx/erlang-rocksdb", {tag, "1.7.2-emqx-9"}}} - , {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.14.3"}}} + , {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.14.4"}}} , {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.8.1"}}} , {grpc, {git, "https://github.com/emqx/grpc-erl", {tag, "0.6.7"}}} , {minirest, {git, "https://github.com/emqx/minirest", {tag, "1.3.8"}}} From e31f4d609162e983911e539c046a1f151d7d5593 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Wed, 8 Mar 2023 15:37:23 +0100 Subject: [PATCH 73/96] refactor(emqx_bridge): add BAD_REQUEST macro and minor cleanups --- apps/emqx_bridge/src/emqx_bridge_api.erl | 52 ++++++++++-------------- 1 file changed, 21 insertions(+), 31 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index ff55976d0..a65990443 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -46,6 +46,8 @@ -export([lookup_from_local_node/2]). +-define(BAD_REQUEST(Reason), {400, error_msg('BAD_REQUEST', Reason)}). + -define(NOT_FOUND(Reason), {404, error_msg('NOT_FOUND', Reason)}). -define(BRIDGE_NOT_FOUND(Type, Name), @@ -477,9 +479,11 @@ schema("/bridges_probe") -> {ok, _} -> {400, error_msg('ALREADY_EXISTS', <<"bridge already exists">>)}; {error, not_found} -> - case ensure_bridge_created(BridgeType, BridgeName, Conf) of - ok -> lookup_from_all_nodes(BridgeType, BridgeName, 201); - {error, Error} -> {400, Error} + case emqx_bridge:create(BridgeType, BridgeName, Conf) of + {ok, _} -> + lookup_from_all_nodes(BridgeType, BridgeName, 201); + {error, Reason} -> + ?BAD_REQUEST(Reason) end end; '/bridges'(get, _Params) -> @@ -499,11 +503,11 @@ schema("/bridges_probe") -> {ok, _} -> RawConf = emqx:get_raw_config([bridges, BridgeType, BridgeName], #{}), Conf = deobfuscate(Conf1, RawConf), - case ensure_bridge_created(BridgeType, BridgeName, Conf) of - ok -> + case emqx_bridge:create(BridgeType, BridgeName, Conf) of + {ok, _} -> lookup_from_all_nodes(BridgeType, BridgeName, 200); - {error, Error} -> - {400, Error} + {error, Reason} -> + ?BAD_REQUEST(Reason) end; {error, not_found} -> ?BRIDGE_NOT_FOUND(BridgeType, BridgeName) @@ -524,12 +528,10 @@ schema("/bridges_probe") -> {ok, _} -> 204; {error, {rules_deps_on_this_bridge, RuleIds}} -> - {400, - error_msg( - 'BAD_REQUEST', - {<<"Can not delete bridge while active rules defined for this bridge">>, - RuleIds} - )}; + ?BAD_REQUEST( + {<<"Can not delete bridge while active rules defined for this bridge">>, + RuleIds} + ); {error, timeout} -> {503, error_msg('SERVICE_UNAVAILABLE', <<"request timeout">>)}; {error, Reason} -> @@ -561,7 +563,7 @@ schema("/bridges_probe") -> Params1 = maybe_deobfuscate_bridge_probe(Params), case emqx_bridge_resource:create_dry_run(ConnType, maps:remove(<<"type">>, Params1)) of ok -> - {204}; + 204; {error, Reason} when not is_tuple(Reason); element(1, Reason) =/= 'exit' -> {400, error_msg('TEST_FAILED', to_hr_reason(Reason))} end; @@ -615,7 +617,7 @@ lookup_from_local_node(BridgeType, BridgeName) -> OperFunc -> case emqx_bridge:disable_enable(OperFunc, BridgeType, BridgeName) of {ok, _} -> - {204}; + 204; {error, {pre_config_update, _, bridge_not_found}} -> ?BRIDGE_NOT_FOUND(BridgeType, BridgeName); {error, {_, _, timeout}} -> @@ -656,11 +658,7 @@ lookup_from_local_node(BridgeType, BridgeName) -> ConfMap = emqx:get_config([bridges, BridgeType, BridgeName]), case maps:get(enable, ConfMap, false) of false -> - {400, - error_msg( - 'BAD_REQUEST', - <<"Forbidden operation, bridge not enabled">> - )}; + ?BAD_REQUEST(<<"Forbidden operation, bridge not enabled">>); true -> case emqx_misc:safe_to_existing_atom(Node, utf8) of {ok, TargetNode} -> @@ -688,12 +686,6 @@ enable_func(<<"true">>) -> enable; enable_func(<<"false">>) -> disable; enable_func(_) -> invalid. -ensure_bridge_created(BridgeType, BridgeName, Conf) -> - case emqx_bridge:create(BridgeType, BridgeName, Conf) of - {ok, _} -> ok; - {error, Reason} -> {error, error_msg('BAD_REQUEST', Reason)} - end. - zip_bridges([BridgesFirstNode | _] = BridgesAllNodes) -> lists:foldl( fun(#{type := Type, name := Name}, Acc) -> @@ -932,10 +924,8 @@ bin(S) when is_binary(S) -> call_operation(NodeOrAll, OperFunc, Args) -> case is_ok(do_bpapi_call(NodeOrAll, OperFunc, Args)) of - ok -> - {204}; - {ok, _} -> - {204}; + Ok when Ok =:= ok; is_tuple(Ok), element(1, Ok) =:= ok -> + 204; {error, not_implemented} -> %% Should only happen if we call `start` on a node that is %% still on an older bpapi version that doesn't support it. @@ -954,7 +944,7 @@ call_operation(NodeOrAll, OperFunc, Args) -> ) )}; {error, Reason} when not is_tuple(Reason); element(1, Reason) =/= 'exit' -> - {400, error_msg('BAD_REQUEST', to_hr_reason(Reason))} + ?BAD_REQUEST(to_hr_reason(Reason)) end. maybe_try_restart(all, start_bridges_to_all_nodes, Args) -> From fb3d101b3a4815b36d63fed4d31a225c785d5b43 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Wed, 8 Mar 2023 16:32:30 +0100 Subject: [PATCH 74/96] refactor(emqx_bridge): fix var names --- apps/emqx_bridge/src/emqx_bridge_api.erl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index a65990443..779f9e93d 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -50,10 +50,10 @@ -define(NOT_FOUND(Reason), {404, error_msg('NOT_FOUND', Reason)}). --define(BRIDGE_NOT_FOUND(Type, Name), +-define(BRIDGE_NOT_FOUND(BridgeType, BridgeName), ?NOT_FOUND( - <<"Bridge lookup failed: bridge named '", Name/binary, "' of type ", - (atom_to_binary(Type))/binary, " does not exist.">> + <<"Bridge lookup failed: bridge named '", BridgeName/binary, "' of type ", + (atom_to_binary(BridgeType))/binary, " does not exist.">> ) ). From 80b81748dfcca1b862874971bd958d2d142474ae Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Wed, 8 Mar 2023 16:34:19 +0100 Subject: [PATCH 75/96] fix(emqx_bridge): handle bridge not found in call_operation --- apps/emqx_bridge/src/emqx_bridge_api.erl | 6 +- .../test/emqx_bridge_api_SUITE.erl | 75 ++++++++++--------- 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index 779f9e93d..6ad116cd3 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -922,7 +922,7 @@ bin(S) when is_atom(S) -> bin(S) when is_binary(S) -> S. -call_operation(NodeOrAll, OperFunc, Args) -> +call_operation(NodeOrAll, OperFunc, Args = [_Nodes, BridgeType, BridgeName]) -> case is_ok(do_bpapi_call(NodeOrAll, OperFunc, Args)) of Ok when Ok =:= ok; is_tuple(Ok), element(1, Ok) =:= ok -> 204; @@ -943,6 +943,8 @@ call_operation(NodeOrAll, OperFunc, Args) -> ) ) )}; + {error, not_found} -> + ?BRIDGE_NOT_FOUND(BridgeType, BridgeName); {error, Reason} when not is_tuple(Reason); element(1, Reason) =/= 'exit' -> ?BAD_REQUEST(to_hr_reason(Reason)) end. @@ -952,7 +954,7 @@ maybe_try_restart(all, start_bridges_to_all_nodes, Args) -> maybe_try_restart(Node, start_bridge_to_node, Args) -> call_operation(Node, restart_bridge_to_node, Args); maybe_try_restart(_, _, _) -> - {501}. + 501. do_bpapi_call(all, Call, Args) -> maybe_unwrap( diff --git a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl index d30a9bff8..8feb2bcc6 100644 --- a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl +++ b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl @@ -214,7 +214,7 @@ t_http_crud_apis(Config) -> <<"status">> := _, <<"node_status">> := [_ | _], <<"url">> := URL1 - } = jsx:decode(Bridge), + } = emqx_json:decode(Bridge, [return_maps]), BridgeID = emqx_bridge_resource:bridge_id(?BRIDGE_TYPE, Name), %% send an message to emqx and the message should be forwarded to the HTTP server @@ -251,7 +251,7 @@ t_http_crud_apis(Config) -> <<"node_status">> := [_ | _], <<"url">> := URL2 }, - jsx:decode(Bridge2) + emqx_json:decode(Bridge2, [return_maps]) ), %% list all bridges again, assert Bridge2 is in it @@ -269,7 +269,7 @@ t_http_crud_apis(Config) -> <<"url">> := URL2 } ], - jsx:decode(Bridge2Str) + emqx_json:decode(Bridge2Str, [return_maps]) ), %% get the bridge by id @@ -283,7 +283,7 @@ t_http_crud_apis(Config) -> <<"node_status">> := [_ | _], <<"url">> := URL2 }, - jsx:decode(Bridge3Str) + emqx_json:decode(Bridge3Str, [return_maps]) ), %% send an message to emqx again, check the path has been changed @@ -315,7 +315,7 @@ t_http_crud_apis(Config) -> <<"code">> := <<"NOT_FOUND">>, <<"message">> := _ }, - jsx:decode(ErrMsg2) + emqx_json:decode(ErrMsg2, [return_maps]) ), %% Deleting a non-existing bridge should result in an error {ok, 404, ErrMsg3} = request(delete, uri(["bridges", BridgeID]), []), @@ -324,7 +324,7 @@ t_http_crud_apis(Config) -> <<"code">> := <<"NOT_FOUND">>, <<"message">> := _ }, - jsx:decode(ErrMsg3) + emqx_json:decode(ErrMsg3, [return_maps]) ), ok. @@ -402,7 +402,7 @@ t_check_dependent_actions_on_delete(Config) -> <<"sql">> => <<"SELECT * from \"t\"">> } ), - #{<<"id">> := RuleId} = jsx:decode(Rule), + #{<<"id">> := RuleId} = emqx_json:decode(Rule, [return_maps]), %% delete the bridge should fail because there is a rule depenents on it {ok, 400, _} = request(delete, uri(["bridges", BridgeID]), []), %% delete the rule first @@ -437,7 +437,7 @@ t_cascade_delete_actions(Config) -> <<"sql">> => <<"SELECT * from \"t\"">> } ), - #{<<"id">> := RuleId} = jsx:decode(Rule), + #{<<"id">> := RuleId} = emqx_json:decode(Rule, [return_maps]), %% delete the bridge will also delete the actions from the rules {ok, 204, _} = request(delete, uri(["bridges", BridgeID]) ++ "?also_delete_dep_actions", []), {ok, 200, <<"[]">>} = request(get, uri(["bridges"]), []), @@ -446,7 +446,7 @@ t_cascade_delete_actions(Config) -> #{ <<"actions">> := [] }, - jsx:decode(Rule1) + emqx_json:decode(Rule1, [return_maps]) ), {ok, 204, <<>>} = request(delete, uri(["rules", RuleId]), []), ok. @@ -511,34 +511,39 @@ do_start_stop_bridges(Type, Config) -> <<"status">> := <<"connected">>, <<"node_status">> := [_ | _], <<"url">> := URL1 - } = jsx:decode(Bridge), + } = emqx_json:decode(Bridge, [return_maps]), BridgeID = emqx_bridge_resource:bridge_id(?BRIDGE_TYPE, Name), %% stop it {ok, 204, <<>>} = request(post, operation_path(Type, stop, BridgeID), <<"">>), {ok, 200, Bridge2} = request(get, uri(["bridges", BridgeID]), []), - ?assertMatch(#{<<"status">> := <<"stopped">>}, jsx:decode(Bridge2)), + ?assertMatch(#{<<"status">> := <<"stopped">>}, emqx_json:decode(Bridge2, [return_maps])), %% start again {ok, 204, <<>>} = request(post, operation_path(Type, start, BridgeID), <<"">>), {ok, 200, Bridge3} = request(get, uri(["bridges", BridgeID]), []), - ?assertMatch(#{<<"status">> := <<"connected">>}, jsx:decode(Bridge3)), + ?assertMatch(#{<<"status">> := <<"connected">>}, emqx_json:decode(Bridge3, [return_maps])), %% start a started bridge {ok, 204, <<>>} = request(post, operation_path(Type, start, BridgeID), <<"">>), {ok, 200, Bridge3_1} = request(get, uri(["bridges", BridgeID]), []), - ?assertMatch(#{<<"status">> := <<"connected">>}, jsx:decode(Bridge3_1)), + ?assertMatch(#{<<"status">> := <<"connected">>}, emqx_json:decode(Bridge3_1, [return_maps])), %% restart an already started bridge {ok, 204, <<>>} = request(post, operation_path(Type, restart, BridgeID), <<"">>), {ok, 200, Bridge3} = request(get, uri(["bridges", BridgeID]), []), - ?assertMatch(#{<<"status">> := <<"connected">>}, jsx:decode(Bridge3)), + ?assertMatch(#{<<"status">> := <<"connected">>}, emqx_json:decode(Bridge3, [return_maps])), %% stop it again {ok, 204, <<>>} = request(post, operation_path(Type, stop, BridgeID), <<"">>), %% restart a stopped bridge {ok, 204, <<>>} = request(post, operation_path(Type, restart, BridgeID), <<"">>), {ok, 200, Bridge4} = request(get, uri(["bridges", BridgeID]), []), - ?assertMatch(#{<<"status">> := <<"connected">>}, jsx:decode(Bridge4)), + ?assertMatch(#{<<"status">> := <<"connected">>}, emqx_json:decode(Bridge4, [return_maps])), %% delete the bridge {ok, 204, <<>>} = request(delete, uri(["bridges", BridgeID]), []), {ok, 200, <<"[]">>} = request(get, uri(["bridges"]), []), + %% Fail parse-id check + {ok, 404, _} = request(post, operation_path(Type, start, <<"wreckbook_fugazi">>), <<"">>), + %% Looks ok but doesn't exist + {ok, 404, _} = request(post, operation_path(Type, start, <<"webhook:cptn_hook">>), <<"">>), + %% Create broken bridge {ListenPort, Sock} = listen_on_random_port(), %% Connecting to this endpoint should always timeout @@ -556,7 +561,7 @@ do_start_stop_bridges(Type, Config) -> <<"server">> := BadServer, <<"status">> := <<"connecting">>, <<"node_status">> := [_ | _] - } = jsx:decode(BadBridge1), + } = emqx_json:decode(BadBridge1, [return_maps]), BadBridgeID = emqx_bridge_resource:bridge_id(?BRIDGE_TYPE_MQTT, BadName), ?assertMatch( {ok, SC, _} when SC == 500 orelse SC == 503, @@ -585,24 +590,24 @@ t_enable_disable_bridges(Config) -> <<"status">> := <<"connected">>, <<"node_status">> := [_ | _], <<"url">> := URL1 - } = jsx:decode(Bridge), + } = emqx_json:decode(Bridge, [return_maps]), BridgeID = emqx_bridge_resource:bridge_id(?BRIDGE_TYPE, Name), %% disable it {ok, 204, <<>>} = request(put, enable_path(false, BridgeID), <<"">>), {ok, 200, Bridge2} = request(get, uri(["bridges", BridgeID]), []), - ?assertMatch(#{<<"status">> := <<"stopped">>}, jsx:decode(Bridge2)), + ?assertMatch(#{<<"status">> := <<"stopped">>}, emqx_json:decode(Bridge2, [return_maps])), %% enable again {ok, 204, <<>>} = request(put, enable_path(true, BridgeID), <<"">>), {ok, 200, Bridge3} = request(get, uri(["bridges", BridgeID]), []), - ?assertMatch(#{<<"status">> := <<"connected">>}, jsx:decode(Bridge3)), + ?assertMatch(#{<<"status">> := <<"connected">>}, emqx_json:decode(Bridge3, [return_maps])), %% enable an already started bridge {ok, 204, <<>>} = request(put, enable_path(true, BridgeID), <<"">>), {ok, 200, Bridge3} = request(get, uri(["bridges", BridgeID]), []), - ?assertMatch(#{<<"status">> := <<"connected">>}, jsx:decode(Bridge3)), + ?assertMatch(#{<<"status">> := <<"connected">>}, emqx_json:decode(Bridge3, [return_maps])), %% disable it again {ok, 204, <<>>} = request(put, enable_path(false, BridgeID), <<"">>), - {ok, 400, Res} = request(post, operation_path(node, restart, BridgeID), <<"">>), + {ok, 400, Res} = request(post, operation_path(node, start, BridgeID), <<"">>), ?assertEqual( <<"{\"code\":\"BAD_REQUEST\",\"message\":\"Forbidden operation, bridge not enabled\"}">>, Res @@ -611,7 +616,7 @@ t_enable_disable_bridges(Config) -> %% enable a stopped bridge {ok, 204, <<>>} = request(put, enable_path(true, BridgeID), <<"">>), {ok, 200, Bridge4} = request(get, uri(["bridges", BridgeID]), []), - ?assertMatch(#{<<"status">> := <<"connected">>}, jsx:decode(Bridge4)), + ?assertMatch(#{<<"status">> := <<"connected">>}, emqx_json:decode(Bridge4, [return_maps])), %% delete the bridge {ok, 204, <<>>} = request(delete, uri(["bridges", BridgeID]), []), {ok, 200, <<"[]">>} = request(get, uri(["bridges"]), []). @@ -636,7 +641,7 @@ t_reset_bridges(Config) -> <<"status">> := <<"connected">>, <<"node_status">> := [_ | _], <<"url">> := URL1 - } = jsx:decode(Bridge), + } = emqx_json:decode(Bridge, [return_maps]), BridgeID = emqx_bridge_resource:bridge_id(?BRIDGE_TYPE, Name), {ok, 204, <<>>} = request(put, uri(["bridges", BridgeID, "metrics/reset"]), []), @@ -704,7 +709,7 @@ t_bridges_probe(Config) -> <<"code">> := <<"TEST_FAILED">>, <<"message">> := _ }, - jsx:decode(NxDomain) + emqx_json:decode(NxDomain, [return_maps]) ), {ok, 204, _} = request( @@ -723,7 +728,7 @@ t_bridges_probe(Config) -> <<"code">> := <<"TEST_FAILED">>, <<"message">> := <<"Connection refused">> }, - jsx:decode(ConnRefused) + emqx_json:decode(ConnRefused, [return_maps]) ), {ok, 400, HostNotFound} = request( @@ -736,7 +741,7 @@ t_bridges_probe(Config) -> <<"code">> := <<"TEST_FAILED">>, <<"message">> := <<"Host not found">> }, - jsx:decode(HostNotFound) + emqx_json:decode(HostNotFound, [return_maps]) ), AuthnConfig = #{ @@ -767,7 +772,7 @@ t_bridges_probe(Config) -> <<"code">> := <<"TEST_FAILED">>, <<"message">> := <<"Unauthorized client">> }, - jsx:decode(Unauthorized) + emqx_json:decode(Unauthorized, [return_maps]) ), {ok, 400, Malformed} = request( @@ -782,7 +787,7 @@ t_bridges_probe(Config) -> <<"code">> := <<"TEST_FAILED">>, <<"message">> := <<"Malformed username or password">> }, - jsx:decode(Malformed) + emqx_json:decode(Malformed, [return_maps]) ), {ok, 400, NotAuthorized} = request( @@ -795,7 +800,7 @@ t_bridges_probe(Config) -> <<"code">> := <<"TEST_FAILED">>, <<"message">> := <<"Not authorized">> }, - jsx:decode(NotAuthorized) + emqx_json:decode(NotAuthorized, [return_maps]) ), {ok, 400, BadReq} = request( @@ -803,7 +808,7 @@ t_bridges_probe(Config) -> uri(["bridges_probe"]), ?BRIDGE(<<"bad_bridge">>, <<"unknown_type">>) ), - ?assertMatch(#{<<"code">> := <<"BAD_REQUEST">>}, jsx:decode(BadReq)), + ?assertMatch(#{<<"code">> := <<"BAD_REQUEST">>}, emqx_json:decode(BadReq, [return_maps])), ok. t_metrics(Config) -> @@ -829,7 +834,7 @@ t_metrics(Config) -> <<"status">> := _, <<"node_status">> := [_ | _], <<"url">> := URL1 - } = jsx:decode(Bridge), + } = emqx_json:decode(Bridge, [return_maps]), BridgeID = emqx_bridge_resource:bridge_id(?BRIDGE_TYPE, Name), @@ -840,12 +845,12 @@ t_metrics(Config) -> <<"metrics">> := #{<<"success">> := 0}, <<"node_metrics">> := [_ | _] }, - jsx:decode(Bridge1Str) + emqx_json:decode(Bridge1Str, [return_maps]) ), %% check that the bridge doesn't contain metrics anymore {ok, 200, Bridge2Str} = request(get, uri(["bridges", BridgeID]), []), - Decoded = jsx:decode(Bridge2Str), + Decoded = emqx_json:decode(Bridge2Str, [return_maps]), ?assertNot(maps:is_key(<<"metrics">>, Decoded)), ?assertNot(maps:is_key(<<"node_metrics">>, Decoded)), @@ -875,7 +880,7 @@ t_metrics(Config) -> <<"metrics">> := #{<<"success">> := _}, <<"node_metrics">> := [_ | _] }, - jsx:decode(Bridge3Str) + emqx_json:decode(Bridge3Str, [return_maps]) ), %% check for non-empty metrics when listing all bridges @@ -887,7 +892,7 @@ t_metrics(Config) -> <<"node_metrics">> := [_ | _] } ], - jsx:decode(BridgesStr) + emqx_json:decode(BridgesStr, [return_maps]) ), ok. From a325133391e8662d9f4f4c52b3cecd04ad1ad4f5 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Wed, 8 Mar 2023 16:33:09 +0100 Subject: [PATCH 76/96] fix(emqx_bridge): don't crash checking if bridge enabled --- apps/emqx_bridge/src/emqx_bridge_api.erl | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index 6ad116cd3..1ae984ea4 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -655,8 +655,7 @@ lookup_from_local_node(BridgeType, BridgeName) -> invalid -> ?NOT_FOUND(<<"Invalid operation: ", Op/binary>>); OperFunc -> - ConfMap = emqx:get_config([bridges, BridgeType, BridgeName]), - case maps:get(enable, ConfMap, false) of + try is_enabled_bridge(BridgeType, BridgeName) of false -> ?BAD_REQUEST(<<"Forbidden operation, bridge not enabled">>); true -> @@ -668,10 +667,22 @@ lookup_from_local_node(BridgeType, BridgeName) -> {error, _} -> ?NOT_FOUND(<<"Invalid node name: ", Node/binary>>) end + catch + throw:not_found -> + ?BRIDGE_NOT_FOUND(BridgeType, BridgeName) end end ). +is_enabled_bridge(BridgeType, BridgeName) -> + try emqx:get_config([bridges, BridgeType, BridgeName]) of + ConfMap -> + maps:get(enable, ConfMap, false) + catch + error:{config_not_found, _} -> + throw(not_found) + end. + node_operation_func(<<"restart">>) -> restart_bridge_to_node; node_operation_func(<<"start">>) -> start_bridge_to_node; node_operation_func(<<"stop">>) -> stop_bridge_to_node; From 1bcc5623ed8c65b95f0072020901ce53c534b137 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Wed, 8 Mar 2023 16:50:41 +0100 Subject: [PATCH 77/96] fix(emqx_bridge): check if bridge enabled before calling op --- apps/emqx_bridge/src/emqx_bridge_api.erl | 18 +++++++++++++++--- .../emqx_bridge/test/emqx_bridge_api_SUITE.erl | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index 1ae984ea4..54e8dea07 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -48,6 +48,10 @@ -define(BAD_REQUEST(Reason), {400, error_msg('BAD_REQUEST', Reason)}). +-define(BRIDGE_NOT_ENABLED, + ?BAD_REQUEST(<<"Forbidden operation, bridge not enabled">>) +). + -define(NOT_FOUND(Reason), {404, error_msg('NOT_FOUND', Reason)}). -define(BRIDGE_NOT_FOUND(BridgeType, BridgeName), @@ -640,8 +644,16 @@ lookup_from_local_node(BridgeType, BridgeName) -> invalid -> ?NOT_FOUND(<<"Invalid operation: ", Op/binary>>); OperFunc -> - Nodes = mria:running_nodes(), - call_operation(all, OperFunc, [Nodes, BridgeType, BridgeName]) + try is_enabled_bridge(BridgeType, BridgeName) of + false -> + ?BRIDGE_NOT_ENABLED; + true -> + Nodes = mria:running_nodes(), + call_operation(all, OperFunc, [Nodes, BridgeType, BridgeName]) + catch + throw:not_found -> + ?BRIDGE_NOT_FOUND(BridgeType, BridgeName) + end end ). @@ -657,7 +669,7 @@ lookup_from_local_node(BridgeType, BridgeName) -> OperFunc -> try is_enabled_bridge(BridgeType, BridgeName) of false -> - ?BAD_REQUEST(<<"Forbidden operation, bridge not enabled">>); + ?BRIDGE_NOT_ENABLED; true -> case emqx_misc:safe_to_existing_atom(Node, utf8) of {ok, TargetNode} -> diff --git a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl index 8feb2bcc6..68e612cb3 100644 --- a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl +++ b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl @@ -612,6 +612,7 @@ t_enable_disable_bridges(Config) -> <<"{\"code\":\"BAD_REQUEST\",\"message\":\"Forbidden operation, bridge not enabled\"}">>, Res ), + {ok, 400, Res} = request(post, operation_path(cluster, start, BridgeID), <<"">>), %% enable a stopped bridge {ok, 204, <<>>} = request(put, enable_path(true, BridgeID), <<"">>), From cf73aacd7bff083c19bf8e86245a743910fce06f Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 9 Mar 2023 09:52:07 +0100 Subject: [PATCH 78/96] chore: add changelog --- changes/ce/fix-10107.en.md | 9 +++++++++ changes/ce/fix-10107.zh.md | 8 ++++++++ 2 files changed, 17 insertions(+) create mode 100644 changes/ce/fix-10107.en.md create mode 100644 changes/ce/fix-10107.zh.md diff --git a/changes/ce/fix-10107.en.md b/changes/ce/fix-10107.en.md new file mode 100644 index 000000000..ee972faf3 --- /dev/null +++ b/changes/ce/fix-10107.en.md @@ -0,0 +1,9 @@ +For operations on `bridges API` if `bridge-id` is unknown we now return `404` +instead of `400`. Also a bug was fixed that caused a crash if that was a node +operation. Additionally we now also check if the given bridge is enabled when +doing the cluster operation `start` . Affected endpoints: + * [cluster] `/bridges/:id/:operation`, + * [node] `/nodes/:node/bridges/:id/:operation`, where `operation` is one of +`[start|stop|restart]`. +Moreover, for a node operation, we check if node name is in our cluster and +return `404` instead of `501`. diff --git a/changes/ce/fix-10107.zh.md b/changes/ce/fix-10107.zh.md new file mode 100644 index 000000000..71695096e --- /dev/null +++ b/changes/ce/fix-10107.zh.md @@ -0,0 +1,8 @@ +现在对桥接的 API 进行调用时,如果 `bridge-id` 不存在,将会返回 `404`,而不再是`400`。 +然后,还修复了这种情况下,在节点级别上进行 API 调用时,可能导致崩溃的问题。 +另外,在启动某个桥接时,会先检查指定桥接是否已启用。 +受影响的接口有: + * [cluster] `/bridges/:id/:operation`, + * [node] `/nodes/:node/bridges/:id/:operation`, +其中 `operation` 是 `[start|stop|restart]` 之一。 +此外,对于节点操作,我们将检查节点是否存在于集群中,如果不在,则会返回`404`,而不再是`501`。 From 7124600a71c78514ca599e0a96841ac6914f54f8 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 9 Mar 2023 10:22:21 +0100 Subject: [PATCH 79/96] docs(emqx_bridge): add `start` as operation to bridge --- apps/emqx_bridge/src/emqx_bridge_api.erl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index 54e8dea07..525cec0b8 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -104,11 +104,11 @@ get_response_body_schema() -> param_path_operation_cluster() -> {operation, mk( - enum([stop, restart]), + enum([start, stop, restart]), #{ in => path, required => true, - example => <<"restart">>, + example => <<"start">>, desc => ?DESC("desc_param_path_operation_cluster") } )}. @@ -116,11 +116,11 @@ param_path_operation_cluster() -> param_path_operation_on_node() -> {operation, mk( - enum([stop, restart]), + enum([start, stop, restart]), #{ in => path, required => true, - example => <<"stop">>, + example => <<"start">>, desc => ?DESC("desc_param_path_operation_on_node") } )}. From 71ec77a2f27bafa3110cc6d819b56ab418305001 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 9 Mar 2023 15:12:45 +0100 Subject: [PATCH 80/96] fix(emqx_bridge): for node operation check if node is part of cluster This fixes the case where we returned `501 NOT IMPLEMENTED` in the past. --- apps/emqx_bridge/src/emqx_bridge_api.erl | 11 +++++++++-- apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl | 12 ++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index 525cec0b8..fed24d660 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -453,7 +453,7 @@ schema("/nodes/:node/bridges/:id/:operation") -> 'BAD_REQUEST', "Problem with configuration of external service or bridge not enabled" ), - 404 => error_schema('NOT_FOUND', "Bridge not found or invalid operation"), + 404 => error_schema('NOT_FOUND', "Bridge or node not found or invalid operation"), 501 => error_schema('NOT_IMPLEMENTED', "Not Implemented"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") } @@ -968,6 +968,8 @@ call_operation(NodeOrAll, OperFunc, Args = [_Nodes, BridgeType, BridgeName]) -> )}; {error, not_found} -> ?BRIDGE_NOT_FOUND(BridgeType, BridgeName); + {error, {node_not_found, Node}} -> + ?NOT_FOUND(<<"Node not found: ", (atom_to_binary(Node))/binary>>); {error, Reason} when not is_tuple(Reason); element(1, Reason) =/= 'exit' -> ?BAD_REQUEST(to_hr_reason(Reason)) end. @@ -984,7 +986,12 @@ do_bpapi_call(all, Call, Args) -> do_bpapi_call_vsn(emqx_bpapi:supported_version(emqx_bridge), Call, Args) ); do_bpapi_call(Node, Call, Args) -> - do_bpapi_call_vsn(emqx_bpapi:supported_version(Node, emqx_bridge), Call, Args). + case lists:member(Node, mria:running_nodes()) of + true -> + do_bpapi_call_vsn(emqx_bpapi:supported_version(Node, emqx_bridge), Call, Args); + false -> + {error, {node_not_found, Node}} + end. do_bpapi_call_vsn(SupportedVersion, Call, Args) -> case lists:member(SupportedVersion, supported_versions(Call)) of diff --git a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl index 68e612cb3..f56bbec8e 100644 --- a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl +++ b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl @@ -486,6 +486,18 @@ t_old_bpapi_vsn(Config) -> ok. t_start_stop_bridges_node(Config) -> + {ok, 404, _} = + request( + post, + uri(["nodes", "thisbetterbenotanatomyet", "bridges", "webhook:foo", start]), + <<"">> + ), + {ok, 404, _} = + request( + post, + uri(["nodes", "undefined", "bridges", "webhook:foo", start]), + <<"">> + ), do_start_stop_bridges(node, Config). t_start_stop_bridges_cluster(Config) -> From dba95ec0facdc3dfa2af9502d6fc6fe42da5bb1a Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 9 Mar 2023 15:20:11 +0100 Subject: [PATCH 81/96] style(emqx_bridge): fix wording --- apps/emqx_bridge/src/emqx_bridge_api.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index fed24d660..5cf92582a 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -361,7 +361,7 @@ schema("/bridges/:id") -> 204 => <<"Bridge deleted">>, 400 => error_schema( 'BAD_REQUEST', - "Can not delete bridge while active rules defined for this bridge" + "Cannot delete bridge while active rules are defined for this bridge" ), 404 => error_schema('NOT_FOUND', "Bridge not found"), 503 => error_schema('SERVICE_UNAVAILABLE', "Service unavailable") @@ -533,7 +533,7 @@ schema("/bridges_probe") -> 204; {error, {rules_deps_on_this_bridge, RuleIds}} -> ?BAD_REQUEST( - {<<"Can not delete bridge while active rules defined for this bridge">>, + {<<"Cannot delete bridge while active rules are defined for this bridge">>, RuleIds} ); {error, timeout} -> From 478601ee4113e8f661fddaa7172eb488aea5650b Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 9 Mar 2023 15:17:32 +0100 Subject: [PATCH 82/96] fix(emqx_bridge): remove unreachable code paths --- apps/emqx_bridge/src/emqx_bridge_api.erl | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl index 5cf92582a..30671b2bb 100644 --- a/apps/emqx_bridge/src/emqx_bridge_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_api.erl @@ -478,17 +478,13 @@ schema("/bridges_probe") -> }. '/bridges'(post, #{body := #{<<"type">> := BridgeType, <<"name">> := BridgeName} = Conf0}) -> - Conf = filter_out_request_body(Conf0), case emqx_bridge:lookup(BridgeType, BridgeName) of {ok, _} -> {400, error_msg('ALREADY_EXISTS', <<"bridge already exists">>)}; {error, not_found} -> - case emqx_bridge:create(BridgeType, BridgeName, Conf) of - {ok, _} -> - lookup_from_all_nodes(BridgeType, BridgeName, 201); - {error, Reason} -> - ?BAD_REQUEST(Reason) - end + Conf = filter_out_request_body(Conf0), + {ok, _} = emqx_bridge:create(BridgeType, BridgeName, Conf), + lookup_from_all_nodes(BridgeType, BridgeName, 201) end; '/bridges'(get, _Params) -> {200, @@ -507,12 +503,8 @@ schema("/bridges_probe") -> {ok, _} -> RawConf = emqx:get_raw_config([bridges, BridgeType, BridgeName], #{}), Conf = deobfuscate(Conf1, RawConf), - case emqx_bridge:create(BridgeType, BridgeName, Conf) of - {ok, _} -> - lookup_from_all_nodes(BridgeType, BridgeName, 200); - {error, Reason} -> - ?BAD_REQUEST(Reason) - end; + {ok, _} = emqx_bridge:create(BridgeType, BridgeName, Conf), + lookup_from_all_nodes(BridgeType, BridgeName, 200); {error, not_found} -> ?BRIDGE_NOT_FOUND(BridgeType, BridgeName) end From c1adf0de1f99fc797710497e6db892597148369a Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 9 Mar 2023 15:17:47 +0100 Subject: [PATCH 83/96] test(emqx_bridge): increase coverage by adding common edge cases --- .../test/emqx_bridge_api_SUITE.erl | 52 +++++++++++++++++-- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl index f56bbec8e..8b388a771 100644 --- a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl +++ b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl @@ -196,6 +196,9 @@ t_http_crud_apis(Config) -> %% assert we there's no bridges at first {ok, 200, <<"[]">>} = request(get, uri(["bridges"]), []), + {ok, 404, _} = request(get, uri(["bridges", "foo"]), []), + {ok, 404, _} = request(get, uri(["bridges", "webhook:foo"]), []), + %% then we add a webhook bridge, using POST %% POST /bridges/ will create a bridge URL1 = ?URL(Port, "path1"), @@ -317,6 +320,17 @@ t_http_crud_apis(Config) -> }, emqx_json:decode(ErrMsg2, [return_maps]) ), + + %% try delete bad bridge id + {ok, 404, BadId} = request(delete, uri(["bridges", "foo"]), []), + ?assertMatch( + #{ + <<"code">> := <<"NOT_FOUND">>, + <<"message">> := <<"Invalid bridge ID", _/binary>> + }, + emqx_json:decode(BadId, [return_maps]) + ), + %% Deleting a non-existing bridge should result in an error {ok, 404, ErrMsg3} = request(delete, uri(["bridges", BridgeID]), []), ?assertMatch( @@ -403,13 +417,16 @@ t_check_dependent_actions_on_delete(Config) -> } ), #{<<"id">> := RuleId} = emqx_json:decode(Rule, [return_maps]), - %% delete the bridge should fail because there is a rule depenents on it - {ok, 400, _} = request(delete, uri(["bridges", BridgeID]), []), + %% deleting the bridge should fail because there is a rule that depends on it + {ok, 400, _} = request( + delete, uri(["bridges", BridgeID]) ++ "?also_delete_dep_actions=false", [] + ), %% delete the rule first {ok, 204, <<>>} = request(delete, uri(["rules", RuleId]), []), %% then delete the bridge is OK {ok, 204, <<>>} = request(delete, uri(["bridges", BridgeID]), []), {ok, 200, <<"[]">>} = request(get, uri(["bridges"]), []), + ok. t_cascade_delete_actions(Config) -> @@ -439,7 +456,9 @@ t_cascade_delete_actions(Config) -> ), #{<<"id">> := RuleId} = emqx_json:decode(Rule, [return_maps]), %% delete the bridge will also delete the actions from the rules - {ok, 204, _} = request(delete, uri(["bridges", BridgeID]) ++ "?also_delete_dep_actions", []), + {ok, 204, _} = request( + delete, uri(["bridges", BridgeID]) ++ "?also_delete_dep_actions=true", [] + ), {ok, 200, <<"[]">>} = request(get, uri(["bridges"]), []), {ok, 200, Rule1} = request(get, uri(["rules", RuleId]), []), ?assertMatch( @@ -449,6 +468,25 @@ t_cascade_delete_actions(Config) -> emqx_json:decode(Rule1, [return_maps]) ), {ok, 204, <<>>} = request(delete, uri(["rules", RuleId]), []), + + {ok, 201, _} = request( + post, + uri(["bridges"]), + ?HTTP_BRIDGE(URL1, ?BRIDGE_TYPE, Name) + ), + {ok, 201, _} = request( + post, + uri(["rules"]), + #{ + <<"name">> => <<"t_http_crud_apis">>, + <<"enable">> => true, + <<"actions">> => [BridgeID], + <<"sql">> => <<"SELECT * from \"t\"">> + } + ), + + {ok, 204, _} = request(delete, uri(["bridges", BridgeID]) ++ "?also_delete_dep_actions", []), + {ok, 200, <<"[]">>} = request(get, uri(["bridges"]), []), ok. t_broken_bpapi_vsn(Config) -> @@ -547,6 +585,9 @@ do_start_stop_bridges(Type, Config) -> {ok, 204, <<>>} = request(post, operation_path(Type, restart, BridgeID), <<"">>), {ok, 200, Bridge4} = request(get, uri(["bridges", BridgeID]), []), ?assertMatch(#{<<"status">> := <<"connected">>}, emqx_json:decode(Bridge4, [return_maps])), + + {ok, 404, _} = request(post, operation_path(Type, invalidop, BridgeID), <<"">>), + %% delete the bridge {ok, 204, <<>>} = request(delete, uri(["bridges", BridgeID]), []), {ok, 200, <<"[]">>} = request(get, uri(["bridges"]), []), @@ -619,6 +660,11 @@ t_enable_disable_bridges(Config) -> %% disable it again {ok, 204, <<>>} = request(put, enable_path(false, BridgeID), <<"">>), + %% bad param + {ok, 404, _} = request(put, enable_path(foo, BridgeID), <<"">>), + {ok, 404, _} = request(put, enable_path(true, "foo"), <<"">>), + {ok, 404, _} = request(put, enable_path(true, "webhook:foo"), <<"">>), + {ok, 400, Res} = request(post, operation_path(node, start, BridgeID), <<"">>), ?assertEqual( <<"{\"code\":\"BAD_REQUEST\",\"message\":\"Forbidden operation, bridge not enabled\"}">>, From 18c3b9bb1cd21720f61807b68662fe22138250e2 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Mon, 13 Mar 2023 11:14:59 +0100 Subject: [PATCH 84/96] style: fix wording --- changes/ce/fix-10107.en.md | 2 +- changes/ce/fix-10107.zh.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/changes/ce/fix-10107.en.md b/changes/ce/fix-10107.en.md index ee972faf3..1bcbbad60 100644 --- a/changes/ce/fix-10107.en.md +++ b/changes/ce/fix-10107.en.md @@ -5,5 +5,5 @@ doing the cluster operation `start` . Affected endpoints: * [cluster] `/bridges/:id/:operation`, * [node] `/nodes/:node/bridges/:id/:operation`, where `operation` is one of `[start|stop|restart]`. -Moreover, for a node operation, we check if node name is in our cluster and +Moreover, for a node operation, EMQX checks if node name is in our cluster and return `404` instead of `501`. diff --git a/changes/ce/fix-10107.zh.md b/changes/ce/fix-10107.zh.md index 71695096e..e541a834f 100644 --- a/changes/ce/fix-10107.zh.md +++ b/changes/ce/fix-10107.zh.md @@ -5,4 +5,4 @@ * [cluster] `/bridges/:id/:operation`, * [node] `/nodes/:node/bridges/:id/:operation`, 其中 `operation` 是 `[start|stop|restart]` 之一。 -此外,对于节点操作,我们将检查节点是否存在于集群中,如果不在,则会返回`404`,而不再是`501`。 +此外,对于节点操作,EMQX 将检查节点是否存在于集群中,如果不在,则会返回`404`,而不再是`501`。 From 1cf01197bb9f51405c1c4365a97c56ec430ff73a Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Mon, 13 Mar 2023 14:21:51 +0100 Subject: [PATCH 85/96] fix: increase heartbeat time to avoid extreme MongoDB logging Our MongoDB driver creates a new temporary connection, for every active connection, to just do a single heartbeat test. There is configurable delay between every heartbeat test. When the user has an EMQX cluster with a MongoDB bridge (to a MongoDB replica set), there will be a lot of connections. Furthermore, as MongoDB creates a log entry every time a new connection is created, the log will be flooded with info about new connection. One user have reported more than 1MB of log data in a 10 minute period. This commit tries to fix this by increasing the default delay between heartbeats. A better fix would be to change the MongoDB driver so that it does not create a new connection just to do a heartbeat check, but this is more complicated so we leave this to the future. We might also swap out the current MongoDB driver to something better. Fixes: https://github.com/emqx/emqx/issues/9851 --- apps/emqx_connector/i18n/emqx_connector_mongo.conf | 4 ++-- apps/emqx_connector/src/emqx_connector_mongo.erl | 8 +++++++- changes/ce/fix-10124.en.md | 1 + changes/ce/fix-10124.zh.md | 1 + 4 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 changes/ce/fix-10124.en.md create mode 100644 changes/ce/fix-10124.zh.md diff --git a/apps/emqx_connector/i18n/emqx_connector_mongo.conf b/apps/emqx_connector/i18n/emqx_connector_mongo.conf index 1f00083a4..6a2511ec8 100644 --- a/apps/emqx_connector/i18n/emqx_connector_mongo.conf +++ b/apps/emqx_connector/i18n/emqx_connector_mongo.conf @@ -177,8 +177,8 @@ The MongoDB default port 27017 is used if `[:Port]` is not specified.""" heartbeat_period { desc { - en: "Controls when the driver checks the state of the MongoDB deployment. Specify the interval between checks, counted from the end of the previous check until the beginning of the next one." - zh: "控制驱动程序何时检查MongoDB部署的状态。指定检查的间隔时间,从上一次检查结束到下一次检查开始计算。" + en: "Controls when the driver checks the state of the MongoDB deployment. Specify the interval between checks, counted from the end of the previous check until the beginning of the next one. If the number of connections is increased (which will happen, for example, if you increase the pool size), you may need to increase this period as well to avoid creating too many log entries in the MongoDB log file." + zh: "控制驱动程序何时检查MongoDB部署的状态。指定检查的间隔时间,从上一次检查结束到下一次检查开始计算。如果连接数增加(例如,如果你增加池子的大小,就会发生这种情况),你可能也需要增加这个周期,以避免在MongoDB日志文件中创建太多的日志条目。" } label { en: "Heartbeat period" diff --git a/apps/emqx_connector/src/emqx_connector_mongo.erl b/apps/emqx_connector/src/emqx_connector_mongo.erl index 1b0bcf94d..8804ebaf2 100644 --- a/apps/emqx_connector/src/emqx_connector_mongo.erl +++ b/apps/emqx_connector/src/emqx_connector_mongo.erl @@ -106,7 +106,7 @@ fields(topology) -> {socket_timeout_ms, duration("socket_timeout")}, {server_selection_timeout_ms, duration("server_selection_timeout")}, {wait_queue_timeout_ms, duration("wait_queue_timeout")}, - {heartbeat_frequency_ms, duration("heartbeat_period")}, + {heartbeat_frequency_ms, fun heartbeat_frequency_ms/1}, {min_heartbeat_frequency_ms, duration("min_heartbeat_period")} ]. @@ -407,6 +407,12 @@ duration(Desc) -> desc => ?DESC(Desc) }. +heartbeat_frequency_ms(type) -> emqx_schema:duration_ms(); +heartbeat_frequency_ms(desc) -> ?DESC("heartbeat_period"); +heartbeat_frequency_ms(default) -> 200000; +heartbeat_frequency_ms(validator) -> [?MIN(1)]; +heartbeat_frequency_ms(_) -> undefined. + max_overflow(type) -> non_neg_integer(); max_overflow(desc) -> ?DESC("max_overflow"); max_overflow(default) -> 0; diff --git a/changes/ce/fix-10124.en.md b/changes/ce/fix-10124.en.md new file mode 100644 index 000000000..1a4aca3d9 --- /dev/null +++ b/changes/ce/fix-10124.en.md @@ -0,0 +1 @@ +The default heartbeat period for MongoDB has been increased to reduce the risk of too excessive logging to the MongoDB log file. diff --git a/changes/ce/fix-10124.zh.md b/changes/ce/fix-10124.zh.md new file mode 100644 index 000000000..7605f2da3 --- /dev/null +++ b/changes/ce/fix-10124.zh.md @@ -0,0 +1 @@ +增加了MongoDB的默认心跳周期,以减少对MongoDB日志文件的过多记录的风险。 From 75ce870cbed0d8f7533d5abc763b2334830f1595 Mon Sep 17 00:00:00 2001 From: Thomas Schmid Date: Mon, 13 Mar 2023 15:36:43 +0100 Subject: [PATCH 86/96] fix(helm-charts): fix for multiple service annotations Fix to support adding multiple service annotations --- deploy/charts/emqx-enterprise/templates/service-monitor.yaml | 2 +- deploy/charts/emqx-enterprise/templates/service.yaml | 2 +- deploy/charts/emqx/templates/service-monitor.yaml | 2 +- deploy/charts/emqx/templates/service.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deploy/charts/emqx-enterprise/templates/service-monitor.yaml b/deploy/charts/emqx-enterprise/templates/service-monitor.yaml index 3d97ab351..b37798a59 100644 --- a/deploy/charts/emqx-enterprise/templates/service-monitor.yaml +++ b/deploy/charts/emqx-enterprise/templates/service-monitor.yaml @@ -11,7 +11,7 @@ metadata: app.kubernetes.io/managed-by: {{ .Release.Service }} {{- if .Values.service.annotations }} annotations: - {{ toYaml .Values.service.annotations | indent 4 }} + {{- toYaml .Values.service.annotations | nindent 4 }} {{- end }} spec: endpoints: diff --git a/deploy/charts/emqx-enterprise/templates/service.yaml b/deploy/charts/emqx-enterprise/templates/service.yaml index 233e69b10..401746a51 100644 --- a/deploy/charts/emqx-enterprise/templates/service.yaml +++ b/deploy/charts/emqx-enterprise/templates/service.yaml @@ -10,7 +10,7 @@ metadata: app.kubernetes.io/managed-by: {{ .Release.Service }} {{- if .Values.service.annotations }} annotations: -{{ toYaml .Values.service.annotations | indent 4 }} + {{- toYaml .Values.service.annotations | nindent 4 }} {{- end }} spec: type: {{ .Values.service.type }} diff --git a/deploy/charts/emqx/templates/service-monitor.yaml b/deploy/charts/emqx/templates/service-monitor.yaml index 3d97ab351..b37798a59 100644 --- a/deploy/charts/emqx/templates/service-monitor.yaml +++ b/deploy/charts/emqx/templates/service-monitor.yaml @@ -11,7 +11,7 @@ metadata: app.kubernetes.io/managed-by: {{ .Release.Service }} {{- if .Values.service.annotations }} annotations: - {{ toYaml .Values.service.annotations | indent 4 }} + {{- toYaml .Values.service.annotations | nindent 4 }} {{- end }} spec: endpoints: diff --git a/deploy/charts/emqx/templates/service.yaml b/deploy/charts/emqx/templates/service.yaml index 233e69b10..401746a51 100644 --- a/deploy/charts/emqx/templates/service.yaml +++ b/deploy/charts/emqx/templates/service.yaml @@ -10,7 +10,7 @@ metadata: app.kubernetes.io/managed-by: {{ .Release.Service }} {{- if .Values.service.annotations }} annotations: -{{ toYaml .Values.service.annotations | indent 4 }} + {{- toYaml .Values.service.annotations | nindent 4 }} {{- end }} spec: type: {{ .Values.service.type }} From 25c28eab8174389aaba3251e5c2775b90040ed66 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Mon, 13 Mar 2023 14:11:39 -0300 Subject: [PATCH 87/96] chore: remove committed rebar3 binary We already set up our custom rebar3 binary in CI, so this doesn't need to be committed. It is also outdated with our currently used version. --- apps/emqx/rebar3 | Bin 1019824 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 apps/emqx/rebar3 diff --git a/apps/emqx/rebar3 b/apps/emqx/rebar3 deleted file mode 100755 index edb85b3c9ce6f8c013f1b57c2e348c5e96e270d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1019824 zcmaI7Ly#^^)TLWCPuaF@pR#S+wr$(CZQC|a*~VM$ukXDPH~vBQAY{pApHNTk&&&dvx}jzg(-vS|GxkK z*Yt)C4z>!i*29c&y>IGJ`LauT?zAzk;Y)*FuzVAdX&GBhjj2OW-*?X9g{IAdfQWc@Yrv)o>sV$Ci? z?3;ayczv*Pt<6Bzuj2E?G;{AhEEGWVZTxt-611WLt7sW zZ4aE)+;xD&YvUz~7=B_x$TTTQQoyxI4A=&A;dqyZAXJ3LKRH@WY#!n!(h^5{QeY8~ z5;_bK>Fq)c$oA(w+k$r6?%lHPUBAy8lvKu*id2P{h4D5M7gf;agjnl9#oiK?A%;kjq9$|OU3g3BUWoUilqwo-CKk1 zCC4kf-c{To?e)yeS`M0AWkr7`b$ia7A66RJIlwg3Wg;c+rhk{t zMRMEC3459q9X_{z%Wt_^ohok^VO^yb}d_dDdu?s*A&aOYg_(pjF!38yO|*UIGkR}mb>|u zD}@hh&t_V|uI0FxqhIdQmj^f3s*y0OTe{@-nJ6_AJJ*WUGI4sth`A7z@3%AWRJiP3 ztr665oY~(GZ#be;zmTu-S$8dZxsxZ@=nN0hY(4Y;8ICwa*SsE*{T@ir&Wv}@r4BTQ z_`006s$L${()Wh-*{es06TR2st0HS%WNf^t?f{)l+j@e&HAodZ>Z&GI%zP6l1rcP| zs(n4plc^9yRWCq8;_L2M=$rGe<%<0P8QP6>L56Wx_%0O@`N_WPp3v!CcHI>2okXXm zC?0TcRdC~XuVvN z3J(aZagyYFQ`x?_>%uz-H0BbyVk8ssSj@%QN2Nrxo0AMkR}dlK(AlJrK}2D;Mr#Kd zQNiHZ{csEq+${U;u1&ehuU(93I2xjvzxGP(f2ey^>$}PAl&QA^SRss%=Exv+< zmRo+sTi?U)etk7(l+^X+;j4=Oz%!5y4=i|oW#EKumZR9N;wnsdCpgFPn)tP6LtSz^ z@JuiB_S(O9Q)V&EU$sAD+h%EOW8*T}UV@P(q1QCxCmkLG-+jIYW?^;AxZ#_bfrG`u zD${13D?xiR+3-;xqgxQQX;;I6jXluGtPmicx4k)PU=UFJW~13C@y;4q-X#MoU#7oMEd%{J?47fe zO~FNl!-mxZ{0go8SGNoI+zjH!Tn`fo5t9^^j+pM4YYvCI;7(9{)%b0(n5$Us>OsvE zkHW^0t1AqxcRtP*8pQ^j(jwTh?(pvagcqvCin#S4bz+aWk*PdB$_aP z7&3@_prjM;JD3XEAJVU+iDK;^J#gVTF0lIzRcy>eh<19m}DMC3J}CR1ajO_a86V#*;x?0(i{SXE}tUhC*zSA8^n zQ8Gw(;h=O_tpx+Kpsy53rlvw# z%#f@lCK;198%ON}^}o>SZXshl9*Je|W7w2e^rDr+81X9qHCyzO(7JfjjW=^MoliD*nh zQw($>o*c?<)rU`u$V^oaiqwChJ?KN>$Wqf-`*2{SPfwi#3}Q#68nedT4}50aQ+&X_ z+=%5T>T>*XJr9dW1&gBXQ>gy}sQSFaqNYn6T}Fs^6f1Vg9}nlT4H+g zP&E>hFP|80q)Bc+$aG~0E6%4YrODtlfygE|7&XJ-R&4um&Z<2x$WqUEz zJaTs%^)SL&OyBTfsz{}OijC`Re8S&%9*~LZhHB^He7B3;FLlTSrN1NB%s=Gx6P;2; z-^@2$9O>BL=p}vyu4<}>$#4@N>9gApdrTT1pZlBEk!T8R^gUn>-NG}f2k#10hl{h| z$xHRx^j2APcDU(7y(yjs_XF`>y8wF!(`ZA`GOh|*-aDLZ*JiPfqJCe4y`RZN@r zujD(Dli%NCwNYQ}`PuYfmFPY2CZ0;-)D)p%-$}=ycGZFvItB{98=$`lfTc;g zFpTIV8l$kJ&6^Y;NLd`N2%ej`k#^M$U~1lwG+6p#!wZ-$ zi`pzL9l|-8J+Oai6|s1Usj&r`h_j$qFgO)nDs>JjTt;y(i(G^84H-D#Ge}RD-*c2?moc}SU(qzQ-acHgBqC+5M>S;3 zp%d5O!Zen@oKTRI2+5g#t$f7fzq0&jQhFgo(Z2_(8LDzEg6|vC6v@sRbpr7LyGW^v zl(#_SiXn2tV%ygUnHNIl+O7x4DWj*MVyAM``M)&uTYXk1^?S*or!{h4*K_0hqhhHF zin)%5TFYuxUWYg+i+CxTSu#HZj4S%~vyh@GrJ`k)Xvbt$$aqo_%e^?Z|Jdo?DnOA; z9`V08DiD}66Y7!-+nOWeR^Agp((%cAd_h|{5JZhn!k-Yw`VT-&hI!{dclJWrG1NIq zBXM-0U{{FCE81%yn`dC{Ub%;|RIHm<=!Gj)Y*Mn6H+ROEj=9qThI@bE56i<*fs#toFn%f~Z#inOB$>fNw;M(+k`4qp2Bd zXl+JT?>ylPIFS=8R%_nT#n5sIcQ%GDri7|Tu5&80n^!InS5Z+PWysN=izWa@bHtP@ zZXU4yMEj8wxw#Y7(%(|~gH69k-CJHN{XikpR65puWx`iq7azdk6=Lyoo;<+d4U$YW zs*OZkj0ulWUJ)Hxei!8<8knFJy+KNP%L8lbJz(X%0IosFV*7zOloRy-QeH&9H%A!= z0R8r~2uWS~XQ)@0t$bPJh_KGRFKQq&;GDQ8R6L772&1SMavZzx^WE%w<6_4J5nhLI z9Ke344nYy$H^qC8t6$)nB*0|!ofQlLBlR$Yp}x-WN74@^=x_83vB(p8XOlYERB;Zjnxpft6XX*n)NytGd;4$ga9%{sur=Tc z+*f^NU}Tu0?v`jnq8aA|2k56&0tR=Fnv4Q2V#Cn zS5vD)lwSBOfAi3q)zV*9_C;R{t={@e8egE!$~WT%)&5{hq~93#t)9=mVX)chY5yk- zsF8Q-=x#SN^eIWL> zCil>$22;{g{9qcNueE$;TZ(x4m-LWIe`(w1z9k84t38$UIe94p&{Rz}s-98yzyKL* z3Yjv<>!>i9gBy z@)>lJ4)a{I%qLgSC>3=L=U9|fx;WuJC??M-q9UR4fk&6m7~_NKoD0vkFX}+oWi<9c zWDDr>XM;W#Yc`RqoZtVz29bQ)U;n4z6x4v;2{bFA&Yk6=L^Vi}t|( zNID#K4s>T;OmcKs#AdRUyymhhE~n(gg|Gl!a)wNXtj8R?8pXj}+@LZR8%M>Tx7W`^V9^9}qXDUMYY|I^q-V z*UX3%N%s6DKr!n6y+0T9;`b0Z)_*n6NYHU8&N@sRMZkL_|& zjP{^RZDZ*lAXyE3O2#%&l6*M+&%oe4a?D>Q5O#UsF_}%%07d3$u-P{|2z;eCN#gGLu-RT51p7pz%W~ zCm>=7nO!8ZiI3PPzLtF8Q5yhy(>`H8&<)q>SN_iELSU9a^!$QdaU=eq90z(q#Q!A* z;{^upR~InwkECZqo*4lE;_?0Q2=YS+eiG2rvHrosF;wSQ><1j*cK}F+k;KW?j_m*N z!l$Y49?1TNKMMpUBwgn7{-A5{fpc{*e@7~K;K!FvpPkzam{@(uGoZZrKLD61^C3?1 zbsy^gzW4tZ)cyYEszSSI4BoC+zk%FSI3dNC&U}m#~MT~$? zLWks#q8yWx!hj4#McG*+O$I?85O+o0*3rl}1r+HxP0;VYey+>R+FfnGt+jjJ z$@_o5=<9#0udYaIC-RD)rjP@{V>|H|NN69mk}aVtrncRCM4$deZfeOK*TzX4I+BO) z88K>)P4xWIjB0^@XCrJEoo+hy*IrC8I4~zs%`rJRBR;_f2n~g@N?WNA>md(0;1t8c`oB~_GB!(n=vx7PL6#vA$i_y7a|6?o?=txp({@S++3(b(J~e@%CT@hJs4Lcb)0f4BUVegW~x zCXhzO2}GC{6by8Y>SKD4PF>3k={nmk?5apPB?94xmK2UFf{n&4}2Mn6yMK&?*wI1G8|)=%o{$yFNhZo&d_5=3+~h5IjN>87{^@kVQ#g=E=8>Wy)J!()Mnj0X zNs?QZm>;)pvsQ#a>Tf zR!XKc=E%zrpTxR#$LcSqz(0`}2u0<+HsBwGOU=v6pH8G3Hu&(NRPv!=&bLRV*FO0@@6_Up-k8Ex9d2K&L>ZxTBI?g%Pq=Eh!gtZV+l0rYi)+ST2?J z%$kk621lAF1MN3!HZsrS0Q>WlqcWBadDZ$1ObGVnuh^MGpDWrwaUFFHy;{E%FB};X z_1qh%AAYDZSX4c`#8z>EGpurb_|W=UiX+7eiPHnUOPsmnYVm|90gg8zWH{x9&{AJM z0I6-uX!YS2OziOkWNiuR$9iwIQH(G*Jqve%ZY3mD<|4hQRk2)acEJuaxXlRt>^Xig zz&G#!s529X;E)-cHZI{9Uel_(akwJN;uasdk-NHju6 zu`u*_$e-KOv>amAn@UfIT*@2{k7`b~`agwT#h&S?ULzsQJ>vt`LKYAsJA+3c+fpGYOfB1pc}JyP-Zq9_xa{pTsw2f(HjY^VCJ*{ zGzcpY8zvMdHTQDXkcJpwWxPKIV}#Wp#e_H-EE*`nD)Whf-XH!l z9=s;MHtmCC~J^l+Ah}|8Ye5EvY1TrkcwWJ`4BGgPj!*c>kGU{O*QL8(6C} zc$f)))iczx#Vq4@u_MNeGt4mmP#cSe3qK>qRrYWTW^d?=8e5wRJq1K22;@&32Jw9E zqTOc<1Hj5KPH`~z6E8yFH)HJQU*Vo&3%@;}8=U1w&&g>uSg?E9{w1!GxL>M0D{J&g``)4`9+%td1G{he~}6;~Ba_^1SYwwnx$z^nWA4WU-adWW@SzVu2 zYr8uiJIh_$ZRRsi!}HId(>JSqfRW?3bc9D2UvjJI$XS{?wp05L@zT%YOTVu@*{8T+ zqAL0_wk}XM=^xepSw6`_~a}y<~4D% zTe1z*?E311)EhFnpxG0r=cF1;Ph4CiobV9c^s z|AbsNmtdu zbn47c#^1mw@Je}`jD*|=hyHKw7O)P&$ zz!y+ERA)b~-_O|oS>*P)ZsS9__x4@2veq#Z>b$=Nkg=t=(rC0pzO^9uIPWOxXytiq zceRMM!B6%#5PhjzdyjsrxoN#WU-7#;nX}LGahl!8cSFZWWpIC;?BTgK+LD%b^;!r^ zQB4(|S9AXTIqGhDKe{>OIfQr+dAK_id&oaDbIk5g-XXh1e~a)Q^*tnd=Ol6YYPktvEjVbqksD~m0O zk|~`>G>;tI^EWLq)dbBmwnu0!Y1IT?Q+zF%WAf7k^gX~whCNAsf_zD;EdlhHkV`l& zDft-3DauEBE}{9DmrI;JLHZcGQ_e1-yGvBuD+Iro#!LKLZ?}@-l0Nr*_xaWf@tdDd z`L6VB)%SzYH-cY^TVcB(S8Zz+2&b#q1l+ zw^vUhE)nI}`l0^!jL>nXALxHRevA2{0zLmXOJDzo2VnkJjZK|gEX^$cUpCDKUrEGg__i7sEo>_}o6ljRxr#%IBw4B}B8qL#?b^g&!g{jG-Ys@9H2ubH z5W0zxk8zVTWMnJSym2}LUmFIQk6KUfXWBgzl)?TS-U`2HNyT)>B8;}QxoSNFNO~@Y z>^q43%k$vHC!}V0Cy93mXVh9BINbHq%@3*dW=+Iq(b{sW+%$x0*xDivY;ZmDgcrV2 z6po24KJ^*e0^4dCpn4r&F6;t>Ph~wg{#gj%#h?P1{>j$=pH5L4m+*hq0|RyZx3K8oY;_axQh#lAVHEw|e$PA&>u&yd}&Wn3Pd=!GE#B`{wPHi5Wzy%aP9#t zSSiDST0{(_pez-Lkcw%M2rWot1q8JFGYeS}ToQ2qI~folsZ=rYn_aT}clF_M;kzA~ z45Qs&@r41?U+BBNydUUy8S~e2rr+S3Aod$0rT^fYXa4u`SHF1T^E;m6*I%#WceU|% zIpCMq;b-~$*Yn$&vPywL7pMUnF~I0~iou*7@;f$jX&lF0e;*t+4~12~CK)BjudZ!Q zj;V!_$;*&ce+R`C)nH?rlp(fhAV9uvou<>8=ZEZN6y8C2?9uxmYtI>lwwetR*$wu zeVKVzvaijiM!+?|rEQxN1jw;v+TFz*9M=yW-G1l%fRRZ|4u~x3)|nSoiE9`!q~iVx zx5I_hv)4PhK3p5x*$GcS(ib|a46tW_jLbuZ=IE`x&AO_b%{}vBF*CH*2}0g~b^yn7 zi!gX^6s&3EC$+nJVtlq`ZraCNQJDwPNwaHooz zGXFBSXt~bj&4LULhUxLgdkTWa16!FXWGQK>=A@H3wqW5!bYr_)iI3oZa> zu%1){{z)m%Zl*k6l<;*$k%>{UPN8%WWUM&Qyh1Q0YF)JCP#O!!u_;j_-SSQi#_Y)4 z>>D<&bA9?Dr`7)*Tunf z7S_7UTmCy6UW*?NA2#pJdR*}P6Ix&&PletS?}JE{#TCO*eS)qI?D#h#C*nJ#v1v|p z+nwfvT)ltH_2j)sDMGro2-AqTHs{Qjcuv)nq1q_@YTBlfLI(RD)jMwqMVyDJ8tW;j z%j$2!G@ZWp_(%eqXG$f!@RyqY@~%1>DoXegD(8?&mcEJ-0ecMp$;T*?k@sgdoe_al za_?lMwHP4arb+8F+nwUT*}Bl3SUcHu@5Y{68Y>ZKw zQ*h(;%|f3Fga#tTDW25mo2kP)bhZ5(`5*4P?2+BUY11oQcFXl5DOC}u{Hd9SCI{J= zUZLBMPzXZz+K{#+Y~JmfN>;Hzy{Yqx#=8Y9%dqNQpRZ7WO~es#EVcoaVj=OXPtpnD zY4?i-k1!j@edLIk+4Sdp%pWr*RFFG4Mwb-EzaS?n4y=4z#}OZ7U;8_=Ki5`Natc`t zV%$zw+3qmK5Mg+2Q@)b=3>don9i9wyD58RY)fXsM-7z4bfWKrMH>t&hQsH1lQ>Xm@ zmZG$md)p$WZ-5jGsbU-ER|3RWfK2*R3U?)lTy>Fqcn@`F^$wmrjwt^lU0YR_OoR7?J=0TcO|mB zmcn{vlkV0tAXiBhVx8)iJ^<|lF*zcK-&Dwbc?cqV>IM>{oaZYgzC#I&aSGOdl$rcD z#UP|hS779%TXuxH2OdgTl?Wk~C;U5*=Nw|}Crn!|`#?Jpw%xZ*mc#RlaANtXCQd>f zoNJmt344v-S+6a(K)A@(No$O@_?l-F5N{~E_3}+JQh6F=77Y&1ocP@2j3m#NM2ULi z$6^&rv|1x$pA-;8%@jk^K2S*}%prCyV`5W8b%PaG03BtFc} zA9NfEYMh-eVb2Ytnjz*u-o>OJamz$2$)y(Mj$%6ZXi? zoNNy^fmlxKD@q+R1PnfSpN@Y9!b~HZYDt8uRqv1J4VR*70gX~!r*|RTj;V0Nb7do4eJy_*eVNu~M>?aPqG^z!VuCXRyy43sKsF1;o0 zH-BEN%YzAeuGlK;WDGoF3cU?G-B(zE$9?uVM49hab%jz{?K|>jo&C`d(s9%{b)Z?N zp2FrRz5zWv&%O7K!uUlBihq^4V_|VG+y^I#uF=j@-1z_xJ|DZdn+SGHZGT6a%&sZ) z;EpkXh(1$5H9|~;Y?ur>8p29oe-u>zvEZ=lz?8rxmlMNf%i*~d!A3x%yWRNEJLR#e zOGIqyW>yyb`ueIewx=>_#u8z#BEUzwP#3`Wox5j$DuMG{2}3xFTpD+fM2}x$TxKMiPM8PNRvwUz7~U zf;_Zo-_cQgq4*bt5By)Wl$FVZs$s9kf(5F992kcw;LU-Y0&&!tE!6pgEmT%+{<8*< znWk-g;0jv2Py4f0wk>VA)F4cF?AKQ_y+k42saF;3eglq$)k4@XC2x-KnRQw-OgAQT zw~34=O5-a;ET^S$xH$6K+UBHmoWGVuH~EoA%|xmk^UB6$>U#B8p|74qH%Lp?q;=Q)IU4YsVx@Y0Lc>6EVP z3K8F~SVY>S8vPeszIIp2FeXAOjQ*gyi7G7BUTUc^kI`5>dck&6OXX2eyAoOGw6DmS(-mR?*k3;rUM+LPzM zG?+J&vCP+T6l38F;KtEjdrYrG;@b?&Z@bQ`@VMhWu%$t%=Igs*E8wpGf}SeF=WnK`T8BCZY5LsB(sfibRQIPnF(a#Q_xzS`cqW#eu#hAo&V)=Ie$Z%WpKy_PZ+? z2TLou9-9_hWk0r%@A9!mT!9CPFtdtaGec;xyq_X=3uZChVsLxm@$u@7;VvH7IidsF z1%u0F7GLK?VJ6tHlPbK(K!~>Vrkp>#w5)KU0wwJFu$<&v<0$(3Ix9a|zanzf*d$~I zkjbOWgX|PPSBt8Cq)H?gg)O|~mR_LJl7Sb@KAG49AVdL38^Ayks_DC5$K{t)`3b<# zBeK>=r7z_E@u8^7z+ow)vd7<*fN9cW_|!iKDRpN*;rw>-+(TU2-i=jNSFKUHL2Qk@ zX!i$DW`PcIVLDo>rQN|TjUCUaq)Tt6CHDldv%JW#zS2xSTc}ciLXPAa{9?i+c;dDaRT^a7P3$hT8l7sJ*Y?J5iIoGm_{VlE5`W2|)<{ zF(nuKm%{0~qw5=_O92CkjC1xFsxtEyp;$!6)L|hok%wr(j4Sw0b;YFqG4H7X0&TKKLIC z0O~&cmS#vD1yDA_(R)xN&27{o>m93|g&xo=Dmx58E5o#K4S`D2ogAo@MIw%oUiRxE z7-Gc5!omVFNb2=oQiHiNcL=qok*jgWiAz~T9r1f9y=AMB)s|eo&|9bB{!QH-qTBJT ziK*S}BhhMvUPp-_@V{C&O@@2kqP494uED?fk#k#pZm4+oHDtFsWL?j}6QFm?0gmXQ z>G4sVa(vCz###H_rmj2Kt1s^RHc(&*c83v@mk4Rbl?4$K{9~3#cC7DGPqcFjE&H7|g7raR$FX*bi>FW0z?Ea6jYO(PqA8zTB ze6|7?+8{Ie&b2bX`U>yW~qw?3eDC*H^05dO+< z1~=ih#IcD|SApWSnqD3nN1&!D21C>~J8m>6hklbw`8GP&_blyME#2~pfBLoP9^$TX z5B3sLUOh#RTj_~PY?P|y+~zP5=j2OloKl92jp&rfM^V~6l0x53Uu3_PalUUtFScYa zs$1@>T|yDM0#{k8XYXX45nz|P#&|U5Lw}E*f2#AQ{u_^x;N$zi9EuXD<>idM8Z%PT}UHQx!pZomi<4 zNC+p=I&;ONCJ%5AU_8rWfOa&}L(jdgB45gB6aiZakN9@&akrN(_kfL*Rq`g0An1yG ztH>P0z>=iLl|xqyT@D(N3+swa_}o^35Y?m6BRq@HWlys+#e6;$P&TK-C2)HqV!~ zRGI^en9I{)TU*4 zi*yvbxlni}?ic*6NV|tVWi^|luvGikJLvLXW`H${E1au`M5*#lW@c&X)i=d<*!bQZ zS)s=8|&_ zwNTw8Lub?8(|u^pzCCfar%$}y-iLvb=K*Yeat9TI7bi`BpqYJVgLyHw>=Dqg5fKi7 z*)P{iWT-^LnSYBZ;6|X*0 z(ap~?VT<8@j00)u_p%??GxQzs1ya_Cwx>Xpk+&~8|0Zc+Je!xpd=`0Zl;;)|$YWD% z?e1h{!hbd!Y>;)5ezm^aC2x2BPk11|9Q>d{jlQs&Fc9CYa<(x-`R0{&U&S)E8C4Y)}Gs3Nc6$u<8v|g_9k;E z^5Z~a2v6gM$yG1Vu8r8sma#XVZ8vBA#+I@eGCq)J%NC%EKc+yQ_Ow1ZS8bm8THf`; ziSu+K1Q71V>3vNv^&e{_+tb3z!u(5`W$IBt5V^Q_o0Wm*6;CC9k4|1j!aF)U$-xBM zm{>9L2I84y8>#a4I4`N!uX=vfVDAD*w(zwSn9&S$Q4$>`WYqfV>f(JjHglaOB;!_M z&rniTjZ5avTYjerFer%ulNqIi>HxrpPw(|hpxESjKB~bLeFIdDGe9K1RaIXss_wZ3 zPVSmNG%ncVMAgRL_z$R4kVM1~MjI-wCDX%QGb~c+rjQ%4kN1@qx*9#vo2RjXFB-^w z-q~oJIu{hs_!@*oss|VT^xF+0LHWMK23yWimU4lkf&t3-J_u#DOpV}54LDua`Yz5B z^-p26=-H|q@&M75NHVN$!4ooq@c%^widz7aq_nS#akINvk zEke56?_f99^!^SXkt18Ew6h?u4eVnb+AC8|Q#8zK4UIBu#|HKxi9>rPj+48*Ei;n8 zvexyDM|hF*%5jXG{oAsdU~QOSC82%wBgSiAN`f?LJ@5IG=9hydZVIm)CN^>31Fgi3$aLo_IgLf8fo#d+o z|EI}bY2QcM=13N=<>>HlJs0<16fbeijy`B*Hx6?Li6tVDX6WGl2ARPG zSfF8O?u?f@(Q|sg3z~i;vzH8`hOS3%v#JNb;Sr7(=uvg+DIUFE)n+?v!i=nF{IFK6 zd-Uoof1NTl4xRsl5R&rRr_^QbAE5wN=c6^FZ{i26mFz?v3Qkqmo8ZrxI}G$)SJ}E3 zBGdli6XA~#wj6Ogc+9rF=Vl&gr{*n{NDd@H5^TguomqhQek-3~ptd)q6S^*tIuOm) zp?hc$^E5w@0zO)VxL`o+ABLNb&uPPY`wsi39-7tD*W8J>YtefKro{DD3RI(>fT}NL zELt8^JygAs=Q-A_v}0kx&{)vxD&-cAk`p>Izm@M&F>Xe^zak7XL?uIqkN2jH3d&E$ zB%j*EGN$1V0W|)MhB>i!376z?VZTs~A^>lM-Bf_X1uyHjIzB?L*Ji8NomMjft!hi2 zw=;}kLUAU;M52i)_tLQ=edpl_@h2)c{}p&wd()4M^~ZgaIKle`znwBY;hNx8I^=H` zh)?jm`(MZB7uU5054eXrGz8|?C{afHFdsjG*GUMv%j+SO1 z5d6YiU)Dh}Nk=7#so3tM>IAZ^g#@rS9v#p*9w^t&bVCu}2!j>9WHuj14(MSjtIq!p zX_dm#&TDHgsbU3t?oY6?&$foW07m&FO^`L=o$C{DvqlJ`Nz|yql3ISf*Vx9k>N7%#Aw8DeqT$)y5y%?K!i$!1cSccO zw@I6nWW-rJXeT~4xx0C$3>>A{?)kQ{Hx-9A`#g6bY?;j|#~z%7#V1od4Fj9Vm@>f6HJk zy}W*35FHfC6Ux^aJYm@aN{yMPzXL#ZjuW1B(O=JYT(y<~qOov~Cfc3j>(ib+^HRCB z*7V&|chvQY#E`DSEv;Bqd+|`hVuViDZy()AlLSNWFYzeNItMpnkNeLUSj4EAo@GZI z5$)Fh;*WkRnVYsk4ZBL&=9i%wX}3pQ#N9*Zm(+6kfNok6#RxwtaK4osI!Lxw&7UP1 zV$$-0BWIt_=8}A{{siJZ#00IAj0Ma`fnh zv$N^@b=&qGGZGi&A-5ufY2GLb#QYpcYD6XvvR{zAs@;V3nV9w8vWO_t z^==Ej))LAwe&y9W^ulV_*Mz#o?+U5OIJ0@SiWt0#nmcmJS+Nr z*GlQARrQqsk{%y}t#nR&fG0Oa9a)dFYBZ2bvaoANrM=Tu-NDt*g^FGiE{Zk39e5qy zw*BbBLy~Uz;oK_FJbI!6E+&zO48LM>7&BG#B-}hG`F7o@XRT$uw7QK6utm;V&hfFy zmV^O5$a;#!Bb$KP$V24Jv8F^y$ISy6E)R^>vOH3Jat}mSflPL$RWQp}Cv6sRvfi$$ z<-y`Qr<4t8YMBl0p!~VE8avuk!|~IUAEBgHx3fm&0{{F?zD(BM=c7~#K1a(OeaQpX zZWVX<1zkSR}dVi9OWRvli`LP9~DwLmT5k&zrXxU=cK2!Q3K2v8uQd)mhEd$!NFU3#Vzm z-iu>datW5J22i`vR!K*T;p@|xbSW&Q`O7-hDJPXXeMmA13sNd&w4Sz-xty(5x5qKU zuhWD~QrjbIf)nr6zYivc^~cv6AhuczIKv*C&Jj^KJQ(OCa4Nb<{_=>Gh(UDb*$t%Aod zJ?kA>cqe(v#c@z{qW#c$VIv4Icyi97D$P#5EB*=HEL{lCLfU4^`Ko(nZKU~XJ3_6~XtEfo zNP*TQ2vYwoDcVi{Vo;klk;Xn|4<|YHI{IhBQ)Y=5rY^>KeHHj9xcfNieFqCBSGjxW zwIEjhmYUF7r=F@s+uhK4qyt^LMqJjRY-G8BD5eocoXWDw=x8WfLPu?!tzrci+GpZ9 zKflZQ(KGx9mJebvxZQ?d56yh(XgAhSh5Hf(ouMU#&&XYzUv{aRcxqOc?Yw}^83mZA zC8!DLWW5Wxa3odJ=oO?V<+xAxfuuy=inl$)J%G&07ER?6K+ibNzO%(jQw(Lb^3t%8riS zjg-u|c7)z=g7EOa05U+$zqqTX5fxOLmtZP+7^-;)hz%enNTib2_iK665@)p;1Y{NY zakR;=O=6`jFUOUDNifrkozs==8Q%$KZkoZ5l&@EaPXf;(aDKSUCZVG2DCBCM-74UrNV7O-k^^0$Jv0zX4co|6dkWzc6=!(UAWWG zY~8+Ij;~K8w2Z6Dzo!I;@4O#C0i4)IBGW)+PEUXE5kX4}5ncow)D>@@oND^b@Xc1Z z#(mP_IiIh%X|nY0VWVmQK@U@+&8Wh3h#F_lN8?FJ1cIXm*UXZTsMhV@92%oEj$*}Z zR2={;2xvB=HSBdECNLH!qzqde)~{1uAe8{`MWGn%g$&nwizauZBbjjEu!-uDnDMTD z>_eq|s|Zn^#}fo$Y+LPBO)Z?3-y&g7Wgb1Zty=*WWMqqz1J?^>FzS;(etu-O($3tE zsp;+0BQ0HB6cE?=G%g`sieyG@QJ}wESHOU;98Aa_*L~FNGMnmm07P;6Gdq2 zEHi`L%tKme3l>wHQlI8p=C#f?JW2ZH;>G}RjRA345PuE5(Uk7MrWdlQ2qE~xX5MLS zN$vTY=x=a@B!qN!bxpu5&H$ioQrBXYIXS|xTZoG;?9b!Rk#K}()I3e}Vt>J@jacbG zctXQoEBA}}yqeC`-^Ihle!m_>0wDSk7sM8`wKcUeCi)IMB1L0+XLG~nz@W6yuggQA zsIX#6ia$aS3M{`+m5qt%H@W(A^1tpu{~(Ti?&wf#7OwYBsEM`L7vLc!k$KyxKf1Fb z`rdLzAB*)J|FXkXXe>bEkmn@OGmqbyyR@%KZ2rY=T&#t|eziSkHg$Gh%9O5-T97ef zZh$ew#8UXjeusew3x@5Uw-fkb|LTbKk)Azte3W3zpP9d_=j*ljoPZzkyEwKf5Wolo zU?HdA2-Rb^lqKg#ycg+C-2E!a27Q8rRiEw#iv0xJy5dvK@Eb^$3q5SwdX@!SA`k%R z>*|(#J=mb*G$@Niv+Rx9^>`yso%o_vH@e8c&4e*h?bpL+RWh>=sRIe6PI;TpCV}*1 z5^%paiGHh62QvOpL{R1BNc{f}lVJXLnZ!R_+8}(z9L!7|mK(4#)K9D?5PG1JNh1~5 zhc8Xp=1n1QZ@ZB_n?E=#f+iYXaq1Nmaa8Ta@L2jf6DvRjOhDO&=77SxH3oQ73cF=X zDMGiHRDRFnQVUo{xzJIEc#Tw@r zNG^Xtc4VYLCRa%KX>aJG^U;x?%|#%V;$G8c8g*IHlt1am0uTM#VURuTKbzS;8AYE) z?JiL-Anm1@!kO*Q{srz2Gu!`{!D=isoU>~WeMC6aqM=kAy{2V%bujd-XyW;<|bd-UHJdeb>MDp?x|o)s<;zuKue zZlm*=9zgGRchgpf2_wE8lHQwcxl%P)2l{#OYfO`|(Uq2T#h#amPU>7!7vI1*YG%dB zmWW5F@>Lk2fkFUEZ5My?W*DJZY>}hJF1X1Uj$aQnF%-mS_!&JZUSvcqv90GYJ+uVBT~0_s!pXKo!jRrQyt zRGd)X1xM||$wMPKg-EwWUVHFNlZX?(SUR+96|Np)e$6CWSt0o)V$YGQd>4nr!DkY1 zMK0J+!p)6Rkwo9u?F?B))W|BKx*sR8=Zs;`XiAgh6_($hphEJ&Ldpx6xQ3Kzbt_HS zT3u870w@PBz0Wl{GUhRTpscPES)Nm8;nuWbMiV)cDGm4iOp9jW$02faMP*8@wL!L_ z5dB+%#_^#OjN7Rq>6N&`>5bJ32&EPJOsTqfK$-98GR~5`1Njc)fV!flZ|C$w_-|y`XSl#N-6+WW>XD?Kl$cU3oW|D5sJN{K00VzSn zc8riOlN>rdW~q273h@!UX2-Y|4({OmGTz4Avua;P{l)Y)ACpTn^jxr%>%E}j$Hp&t zOhM80p|5@2E{+rnvOh)xhdcDRI4}90w@+ zkb)F00%=;uygkX=$K~Gd7p4@6vdq3H2xxP;woESPlNZTDE*cIzfiXMdljCqFGa$eu zVz;)CX@pMycvqly(Qum~i`AM4vYT6x4tc_6NjAwD)EVzDH|Z-{qHCZ^+iGPL0%dcG zs-(M2*JElpH5SVLA(QCqt-F7E4uLO_T-O#HiMj&Pv5-nI&^I)NV*K#0~Qgi$US=UY10i9a-zf^A`CCc9vqZqV13((@X`vKe`7P&vo(_Tr`3H#Y zl@f!4KVlvaZN~e${@;XH#(x)L8UGTo4agwj1e>`o>D)^n68IVui}`tS@BOadFhTge zzPya^zTNxOWk>OV^%YbsL4qobL%E~>GjseCZU5{N5ntN zbalChgtfMesbkMpMpr>rWifv7>+D#iFS546MyQ|nqQDUW<*jlnNT8}f^rqM@fqF>V z<1tH6Jn`oWp+QfAu32-Bpm&-}YLEvr>ImYjFM zn)FEA6wy9&n?hYOQ|0HcDj7x#O6h=3Wu8s(6MQzB()qbcL~E z*yX_1gKu^TA9~Lo7!U%n5H@ z5`pe%W(F*CHqF}L{bUpjp@3tdXIa4X_8Gwry8=@N?1Vo42dd5nVQN+19jL_7;dJdano{A+gl9Z=XbJ_8`er%&@W^jJHW79|&wz>$ZT9<^c-<+O$FnArX z%_iHyqMyuZsaP-#HNClw3@oTt*ZFF(zMOk$B>Zki-k;c{51H?LRO}>!ijaKq zvD_qanH5p%l!(^gKDMQF_)a4u-q)WxS<+L(zK(Oe(PhZ(-kd9r{n&=XSk!A@@4Z_{ zvMvY8*ON+3zk#5c^;GK!uructiA$S(YXaSzQ%XN){%=K7YFdc2f{TKE9w99Ko%15; zoqWCe_zQ+|5|=E27He3&HezoD1gX<6_24HNrwmg_<28VM#p_N-!bU!hrJgKgm9edx zNxhapW255Y#UD+JCg1UStxr?$F?>yq;k(YLo15>2QILUQk&N};*}f1q3!iO=A(x@u zE*7z5XYpH49KRL0mq#u1QVnK>kML)+!srC2M@Nml5)e-~=#5e-*qlIEgXYs*#<<(l zOL?$RtG!ak+*Zum`g;jPPo5)xEFvMor{)53@ z7LdAkp&`tyOSGsC^ORr4?N6MzNmf$KOfx`}5)m6CTYCp%qhHU$fua)rDDz9*U*mw^$tWiD>y`j^04snKz{$eF%<|*d z#rGsD2Q#zAzq>jAV45VoFW1qBXphx4|D~libi++DAEVe(iR_d7>&$E zKVSICj!MQYM?afE@`VVe%rBqD)AFQD*+V#mC-LAj8?wcofV_UH8&V~GF1^#Cuj21a%dU|U@%}mc68w9I{^Lt zE?)pezq#hp%x=x@09-^w_p)0AuHno_g#=j{KS>9I8lQkt@(yVYYYA#SSJVwJ@k67h zdDABrA||NEGzpM~kQKB_ZL8GRkvK2I=hpJrg76^yxSSR5yYh}tJ*s?OsUb=!a(-VC z41RLz{!dQb@`uGCi0rh2`ZIS28jJ5dipc-brAz<1H4hdQ^GBEbVI!3S+pk-+U{GOx zEAeY4=+BwoEsBMa>6cjbcfbB~^1t|Lf92d0A@>{xO|Fm720eJL;Gw?MiNMnO)rt2V zYVy4EZxV=OMk}!O-hVONR~2H}+Yma@SM!KADvw5dB)N>M(Kj1>BEy9aacpD)8|O19 zyyB1`dtMys{mRu4Y5+yfTF`_+rrC{3Mgb=b$EOk77s0D1tj$Q87*EJ-j+ZB_x5i{9 zCasYXqPKm+nhBza;JW#+EWhbPyPu)l_-Cxp)h$G~i-SDE7n64M9=mPvt=5Vg;+_#m zkQ|RDH7@#IYX=cLWpxFY=ZTUikkQQ?-FUUhff=%_TE=6wTe8(~Zk3aew3mm?`%R#pR6>>Pqk!UfRwnti+Ih#1Q0Zbu*ErOV7hY;pjM z)ij8VV+Y#tJ?E|enGRYmSQYI4!%6hI4Qvfmt-cAgMKuJMagut+XV&|Vi&T*~$ia5L zFePbD_*q;*;6PcQd}hh7m%y_q)uo*|H4m-}bLagLCmvS;$k%~m%;Fb=)<$Tw?rN{5 zq@W~v6OC{T5!`q$Y9j{KDl!B`+-wknv9*+{jT=5hq%WcF!`n8|FPYkW3`edHKnnxH zw)1z3O^%($q5Qy3zyvvuX2?S&UHRK7oqu6?zq10*k4N3e+ufMMo9+MXJz%Ps^Sdo2 ze_G&AyuUyB@!rIJqQXd42Ut$5`Ht3jz{*lZ-m5(^*IDC~Qq2;cU{8>+37bX?haKGx zrIZ=R_Rf(FX3|i?nA?nm9z*IT$+9v+ZJS4NT5)jFYW*H)SJF~@Y#XEnksm!xSVK`xv zv&qf(qChy-AT8wDk-3cW%SxhnGM`eDPI2(Sw2IJAUDw@zCdioc#eL-K<7mr5!SNRsUlrO>blOEJ>Qtpz}o8Q8R^WH<14~SvP3Y~642HY-|axR<_DIAKzC9GeVh`G7U zC}|Q_kg*SmXvpRWix13KrS_r+Kwr*ENOTxC?clt&$tn5bw=%Gv9>m01T#)|RC9&BcP*4AX z5Rg*P(mmlSP?Lax){-3t(+Xkg^l&fa02HA<2BbXi8!br1O;(PG)sgH4dU(kOYp_JJEzqiF z$Etie<4^+ryHo;Xgq!y0aH55BQQu2^!%!ECn+(wxtoy#vd{=Es3NbPVdCXM+q8 ziog>kTByQ9;%iv&<_nZ<8u7+gQkA($zmlw7Q=3p65y`oHl7x+J-v-gM6VRD{C&x*G zMln>w?ck^^2I=O@Spq;6-UbVMmxM|#h}f*ylYTd{g}1_U^L7?OlF+m$1%S6q`)LU) zQPrgHQ7c^K!sVYF8~zy^*Ltnfn=>qzO&1V8z?%m?dI)N7~f+ob+lpld|jy$FnoJ_5W}^kb-&Jq>h+*9 z9!k3yB3tjOMdK%@E-`ZN<}Zfd%;=QCCe9+O3dY)abO>E{3v-CAg{DK9to7&ilVx)_w5I(OJuX|};hkJHAL$vZfA@D9^PAV*rZoisL@OIEdXEg$dt5~AersPY6~tlg z^-2&1l5){OQJx$;=~>}A9eOQv6XW4lB{g!Hn$8NZcZ7Yj}muQ3h7>NPr>ZRqn z()#h%6WqgjiEt!Erl!L5%?p!Z0<|Wv8n9#_)+6X+*iuEsUSR)TXI_vctu zj~JkI$KY;~kFvDcx;R%Obzgzwbj(&d8i-@M#F@wF*tnB8Iu;&ZS+q&w?cOiA9l5|ImJ6 zzSGX?P^Xz@$?pV-=YJhapZ8UNM=8~>DE*hz2n*nMYUDZjKis;1AVoxMO67WrNZGP< zsUk6ll1PkRF1bhH4@1@Fy(Vjkl4u6Q6-!ckOP4rsoCU=?KzSG%p{RCf5ccp{6VZ}U z!BBuZbmZu$ArgCv1#+pi55l`kB=Km-yM%NNdf)fvTx{wOQp9f}&;hW^3N{r55_h{@ zFwsN2H}cP!@~1WanH2f4{%^Z`sE%BqH>O{evWYF5) zy}LI8nR*Qmt8LHMQw9PcY-@qt0Fd2!TKg!&r1JT|GjE&Z*XFkt&V)xp(-vuaZG47= zGP9oaG`G=R-L^1(RwC<9N@V#-iS+(rl^(R|Qy4x>see==|8rgcL>~Wu!FVl7spE$an>5!SbjizD)CM|9l`?Ttkh?iDym*7G3K98(JVCx{ zfxMy`diOdTk!yhY0hyfj;I5@tk9WZnYo?}j%E=Yfo@9`#oA8u&o4)iWi?%^t^u7{w z_CU|w1WJ#*R~v#QnEf@ zd40v!LOc)fM(drlarg6+)&p|E#A@eTW-zX@e#3i0^_>jXFssD3~{ArE=DPOp30t3Q*9e9g4H!#2#!Zv*SYf+cTN3`MN%x%72xkWJ474+6n8xy^h6xjg-aarvtsUdy~(^UZ6~sXIbni(iH!^jcR=g(Y5z&w{z#$(MM~26)(Y zsmXCluBY=2!89hiT8sh8{-`j_G|1|C!HYOgGj~B@^$~(43FE*{9f!%y4Ynb~8&N@= z_k-1Zo-qA{Y@@x}R48iVgYesLbK$r)8Ev#VnllzamAdTfGdD=EDH%b#6w#xfk8HwJ zVSP4bYdUfa^=LV597*iq~HDn9wZJBn}FABi+Ooi*?w%riM(##1% z>aC|GL%-2?zTlgGlI!f{bJUk{>w5{k}Z> z#8V4ldLkoZA_aPBdPYhB`S$=c9Kqj8{f1TJ-=NBf2|)kBV1&OF6cG}j z`*rb}3Bbb0#LUF}EKry@pEqbTvNLf2o~NS!yPN-)Uxg99hFqUr;_Uos6;bKb!I0Xo zLaZ;}^7uiQ`J0gZJ`Qs%BW8|c&vY^HPE8!2MdmTWwPOnZ)Jsqw2tWS4>WyOgVtjuJ z%eN~xn6WhTedPqzS=hic$wde7jXlbQl%A7NGtPw6=)wG)%N!!ePUC6CENdS|1{Cm{ z#k}B~TKnKG9aJ$iyo6#2mAU$?g~7@)N;8V3Loxl|<%8)c_=FRnkRxNy!M%CIC@gUB zsj>?1)OVb=H;p)*_gIiyj^gZS^tC>O0kM*-cV{M_H&KMo(2MzGg8_f$*f&*q8i=ZU z+{0(&HPfC9M>2i6TBGjV`=qg?_y(5hDxL#*GHVOV|Nj60AphS<;TuIlkt533H@hSldmUzM^L<}l`3N&z zuTMb*cAVM%oktww75LZhwmsx_0kdMz>%|_%6*Q@i3EQ69Y5Lvs1om^Yv z(Ol7bO-bIh1L_-&q`29yoL84UxAS~%ni=2+!SDnN%wOandG6{U^N>2o-*KYgf5Si{ z{B9>t0}bPE1)s&*b77*V0mt-vUVIO)J}-)W=LOrdZu~#;8h<4)i-~NyUgQ~&CB`@p zaCrGlzU@pm22c3f34=5PQhuBr-yb|sMM)zF#|y(JppoUY967j_eq_c}U>;`{0qcvP zlEa6yOiPaD$B;Z_B>GjUbcsuej*%wS?`+}4-05qeCdPtxcQVLsL87y;={PW4V-;zu z>DvZ<4KdQXdGoqPu5m{mIH%kQS?ApSPcI6&Z$_&gy)3BiDe(rX_o=_A+8EW1ccNP( zw9_Mq4(NQ9e>g=je0utR!mMQSD|D+1Ydg6g zR1XHNFp)~BFtW?3b{&41jwN3>(Dp=g$#Y1M-{$6dAv=j*A!WNIXALSL6pR+jE z>uS_o&Kde%mM(mQz*W!(nXi?+t6G|oH+JiVUX=Yo^cK-5eE~W`@^Ts2>8?9>m&amW z9=s-}sHh>jJh_Iq*X6;i+2?*)1utPT7|p{|3qmBLY)oWMF?tZ)sEGC812NvrDRF#> zQ@O8amiAwoL&}!A@B1eBzQxl4WbN_Ii01lqxxR<$jHHL=bf6lg_J?mYdgVD3@6d=T z`&`nPeRy<4UtV=r=La$O?diZbv(lD{b_Rkt`Q#ju-J+LmnR?r}y!;9l#^C9(iK+j2 z8M>5cpdGqk+)KE-1|Z2%R(gb$2I)uhsVM`iVsT9rvwTeZ&$zkpK+JEGkkyvXoAD-v z2zxsMU{LcrZvJV3|I9(XERifY?uOHKt^v;pAl|W!1Bm(>u2u*sGxu@QWXEFK&rtJj z8gm)}Ve=?yxC?KzWbAqiuitLxhlVZ#-yAJp@5d#7suC4EpE4**d|)(1Ggpg&DT6&> zC+(M$ueYoV7a%kNeXiVZLs|WJ#?>YjK;psadEDXp|(|T z4G#;3`%;e1ySCpQ2g672TNvR!?u)+b7GNCn50h&BN~%!N>zsNnQswFaI3Zt_hhDkP z?XEM^-JJ;B5LLAgU2!CItd9pGwjR?uygh!1bH*|9)`VwDs@xWA>gmgry$P*w9F??juasjN$;6__G zuIRzBCD6`1=z;BfADsa`L10`QMU7VWqQidc-WBW z-1#6h(O9u`DzZ~m1z9b@jIt|EA}tnB;oilHHkeM3F@o)ch4U!QdFjuYNBWqpXiQ3QAk^^$aY2{fr@L|B2=ZC1q#EmWr6ia68ettEWx9Vk)K>2q*{c;{r(?k?4OepiDN)qHqBq^Dqlbs*4 zWO3%(oKdU?qufNxg+bJ4_5bLS5@!oqW1gL^LqM$Cy>K!OsNHVbeU{*)1-1+)mcG!>N$}( z#Y|HAdHO@UCqMfRbe#Nroe5l&#GMUKq!?A~8Of5qX<_VV1gUOeh^Qn?RLKSlt0SGb zR}uK$H7%L;pT{blKMC%sk=z+MIbDO{>RQ4pcKg*KDA|F5=bcqxfW9<o`iHEZ0PKR_41VqjZtSsHh{Zsrr=a zKt~?Dlo7kpEX58$H+x8 zd}GLo8A&xPbgT$xjjmWCE_!ou&ncH!zg8B>5$#?aDbCekhB#>WJo*_xoPwy3r~sdW zAReEhf{3)7sDdh>=osjj z{+9kr$Hc_O^u!kbH@?GPQN6hwl;b`J2j`R{23QU-PsMLFI+0ERi2NQ(M%+QZhj#jK z>7h%ER3NglUFi3!3jX~k=2a5qUv`BwS$necX+;~bn- z?>DV#KXKTcT0|#64hwsrwVySm!_S14f!C_Rk3ho+=WlV>w|MlXFlFi{u=6>h4pGKC zQ$*wA%*8q38Jmp4wyezHLYgJ7582!1(t03z*U1Bfw8RyX;Ent9`cCmWd=JuIt#pFi zVQ`Ee;w2v$8bl+&QmilAoS+%|hUqTXH;>b%-ocMi9%4E*Y_cg{UuR+07kL9o`0iAC zLDn||GHGEi$)&FLB_u4kbm{wSzcO~4l{RCsm~I|V))L+OhX;g zuAx+)vtsG`8+{u~z-CiKBB^I1F3OtCt5eVwVm*3N5;S`Mj7K1Lq{d{)bLslmHUt#| zlu;w(9X98*XHUDnI12>rV3YZM~I4#4H{9xNqo zgwdKEt56znwymsj%#tbO6+rDIn;Vr2RqxZE;^)p}a1)}rg2EG0@HCUAJMr=4cVIQN zC;i&V#3adJWYfH&%N*h+aq5ALmUOhvxsaGGBe#m-hOhpkHK{kUMW z+WW8a$kvmBkd9W3QJOd}Mp;&H3XCekw(-o4zKKXVB=UbGx27@cz4I71q9Ygz0P-~Q zgW*4KVT|s=*pnXcw3CFk3Hu<@^dal@<(&|gFKnpiW{5|PCvL5;YiMCg_q0lXgp;x zS)z@Oo(aH8&&2c{`Wff|e;fY4dC`Bx4nH~q7>b(ACzGfUS^Ve1-4nbgt#%$$Wa7A^ z;*|Jj(chBzhezK6W3$7r8?e@eHSY%9gc23g+=Gtaz2pIOS)~@)oP}p$7Cod8E0zruz^GUY>>GNoryI?gB;! zAHt+s0&ns|@s(5ERzQt|snQa3^AYM5qrBj#Nm(6McJAk;5H}=|2|)T*SHHoRhRpUW z$P97751@GakI5=^MJRa%6EM(jzk_PYE5Kx4o?N7|-palD41Ks4#rvip zt|?}E%$u=R$OR4;C`M@Q>zA7YY1H3gtszfuNI(zg5~qR&(>42{9E`AX-@jC)k%DLK zgg&BdEm1>UYt$Ua403{?5V2QF*~4DRz}w#~W)rdjVK{?=bPdS4Riuxpz$as~o~qvq zu6#nAMRTuV8d{67<=mdU>yQLF)e}NKL?wJooNT3|Y6b7?W@CeWWhgcFvy^m~IcnXN z-EOH7Lk+Qf@#?iiVcPvEY-3r&Tv3ntO-xf+aeV?OC`O||Pke)*9cxv7Ry@~xch7cw zd5OToQ)q=a*_dg9JlK$v7&vYPxbn~aQj4c_^h$dMH+wZ{C`SBtXI_&PbOPUUBT!E) z35#Qmu1oLWA*@KKy->j+E5q(&+B4$AM{Dna($rojw}HI5=;+KK(8`9-dQLun+51HP zx}LD6_-BU1!zotFV|4~Hind;HgF?}z}`0Mb$?L2=)=w{y~w7p9Fa;)bk!5MfXZ^iskK$5Pb3x?d;sqIdPmte+Zc8;H4T+O#C2^u^ zM*4U$a7j<{U><1j9CJ!ITAhBFPMfC&*9Ymb`x4tMAsQzgB-gjFYwCMF#Hdbi9FQN} zA_8S;_XK)9+cD}Yem%g;1K1Gp4f{ckH5l!x!J{|27&1ZvtmAe%q-t25lw}f?1 zX9J6x1akw!hE9Q61F%(`hA&fDhu)t>BGAYPMXiyG+<^jER{0Wv-X0H3^niyQo4-^(R(0G@kifm8ZWJ}n?9 z02P4Zmx_rve^gAgGqka`H+8VKbEUCxbotSP%fj(L?27S-M&@)Q@{%g6?1U1NvQqw9 z{B6}QVE5bIzu}E$=&uj0Tsx=&r(kV7XD?m)p$CryouN7@)SnZ>=-j zgERBm!C};zsm=gxncywa*umnO8PMVRdx(BeW7!w%e|Is}i<$(!ouar2vs+j_5~g1B zN@Fwx4tA!*+2?^il_=eAMB!}AI$LSxpo@jdP^DEF2;-FLcHf;&v$F${E8Zt4KDa|w z!)@EkhH=Mly<%;xUgc;iZc``qI6lEHY~LS*#xOFsZo#aYdvh_@L$1JF=$g^0Se@kqpr?PfMEjRsW|g}u*HVX7(uLvI zV^uQa*{HZ&B>zJHj@^+F#~6K#X3o8716*nfM7EwTHTpy0_b719tQ|7TkpmP_j96d! zVpFxyX|4rDlN{cczp&nTp;l2$QT)(57GFERCT0L;r6bwGFZJj$Pc(p8JsZzvQFa1X zl+Vj~htUD|r-VDUKZor6G@wBt zf$>@Dx>;NOt)?v!!jBDq%T)S%>pJFN%5?oQ{I5*?@5Go*6o;@#=g7l8bcDEz7q|zC_YQe!Sa*y2wB?drEAlinS(S!wQZ<@Ng%<*4H&3TmP(-0vb-Zltbmv}pV5o!J;L zWDXM1+B61bQDiz^`;_T{eezjgvm!6YxuwzgXWEbj{34i>2fgfuRzqv^PRUAlsb>L} z%3D6aNqb`t#Xo8Bd{sJjq!Ld%v!CV}6;3&7q}WBZK~`u3B@B1WqKf!PofJzZMIp^3 z$)E;82eju1B*pQGJr?nOzlu;AK9XI2P-@7ggxEs-R7t40xhSGML+R{hE77+aD5t5s z=I2xk;KrxhUioe)kIHF+2f50b`{H(F~q*n@_+X37S}G!f~B*R00O|@+w`V>La%UX|5JdV=o1YB z!3SD>7oCGz7k)ztmKRfkk!Yf8ce|D~c8BGn^Fbh~yZ+PDA*mooC$Xtj@i+TD6xX#> z5A0E|QD(#RiA1ng03OpO9M3FF@QH=-J+UzIzu&%zc&301DEO@amuq#BrVy5YOkMn! z|IPIOb9eBssa9!x26d{KgqV-3Y|=rZ5v zD^lKpcBwCj?e<+qInAj{Z%FKdF-s05mvF&EQASUJq3e{eym5W!<6El6vI;wt_CZ3< zX-^=n?!~ywrQ+)J#0SxLUs%2jc$R6zNs1)%l;Npa2F1-W*2`fCM3uK$ylkj-soNXd zWamVb*LxH@b#G;QS%}EEac1D4N5usssz&xe|E4K$$&eJpmSbM*3U_|^3STiw8vdZn zcP+zwPH?j6SUd2LlZq{1o@e>MPI2Egr*vWIZFwWs$hT!_CZ|#OYZqKIW?3OpUG*>N zqsQ5b9&d?5tZA#eNBwCi?_p&TEbg>1n=w7R%QzB&>7pN@mCuta84=_bELEn4$1W9B<)X! zd{A``hxZp3@&~#-L0V1~AQbMasUfLQ6~q$971m^pAtny3Jgs>qsC`t)jRvFG;$Go6 zkUlK!fBdIAKK?3<I2@tu=l6bz_q9UY;5sf!%#KHmHcd z9!StTS7%^+5!b})p1;QmMClROooXUU7PQeSgl3Un7jh@PUllqHt{dX79V8>Mn#=2F z@8d(#xsnM(E~~V}K*msZ*^Z`|GmP@(u>kp4hR9AD&-`K*JKI~oFy&;cvHI=na;g3b zTnBB|OWD1YTdM3=Q-#!|7=jfaE2V5<+f{^SOu+`_2df^;`G)yCJtW}Y+PS)^4r__Q zm829V+Pl83J|AkR2ZyP2(5UaV4$6wkKQFpzGiE=>K-R;l%V_1QApdBbg?OrhfG!UT zz^umzzD#XN0FB6jJi~r^=2fq3VvT1Qf`IL5%pg_yA7$rhggKMvo3xvk@lF&}?+qV^ zi?gPpCu5Q+)CWf$4LJI60dK69vzhpAZorF?)yg)UuI4U3@7LBQ00YaTu z@zngXa8lmqx%h#GOz;Z=ve;CNcz{7p-LBT+X0v94cm{x-ZBmzR-b2soX(R> zu2k@KZXEo9X-hz;112*C+@vaV$Cw*|Tf-Mb`oK|{CCiBm>tNb za@{yxcq3vAi2oYvqGcVNBijxLFv=1%YE;3V-7viLZ@3!wI(cCcZZ4I;Wq|Drea?-&o7VPa!xAXHO(D-ooiAbw{V zN<3vz6Uha5VSXbD7q9NiO1P{&akJ@@j~Rj>+ejoH zCCt59#-Duq4zg4#*^#{y+AP?`>5VX&p+z`f1cz7h;CW5H%UE2^u^P_lNO@jzrE#a%F&xXG8tMaTa_TxCUtftI<=kcP##z!SeB+<&6~ZMf zor4##NuG0bu^qP)V05%nR_z4QAkiToB}7Mw2olJf+8l(qBYY*WD?o0imsO~#1u+#> zR{weAb?2DkX~5;D7y)M^-S&oEzS#s99Z)MVyRy7-k4A*_01M2J233aZ{ZCP?Ck?-; zqyVoO6AmzD?gPWd=vDAH1^-7W;`n8$3(Egem{&+jQh{1dK=O~p4h@6ACx9o%C#r_` z$F65NdhVn_&-UHV_q`MLb90WrRsH=hP5xJ$q|w&fO(MX`s}ISty~hI!C?S#xhOh}C znYR$5E->giMak@L+dU#QIwGG~Q}xvXGfkZ=DsCYJ?h8~Rl_C}~w3RKkDdqdw4yyOS z@7D>YK-*QmISU^|aytk#mN14(vN{<@l=oQ!7*uREsxQo~rhsMYkvuKLazw}R(7!gf zlcO2tFFzbDK}F&3U>Ha9BP41|1Dd(91gjBdO?Y3o^WN?_qq=QFM;fYg&Lzt&)U>1v zjdJb3e+kkaU+E+vi4e~beVgh9pS03S$RvmZqVZ5ukdj0^uXRSy#dfhtK{MHd`^loH z8_Nv%r5No*cSivuiKbEB1PJ~OS{>MhRFZW;v4rgIs0>=Sa~~Tdm1s15Qb7|cs%yDg z_jb-FRYPGWKdr)DCg`N5&0)Nr6frQi8k27Xjb9bRD5dt!DmK2=CM8ev-`Yw-j0WPE z*?QbeR)5K}^>Oc%5{}Qibb6OV7Wu{7%11uWQoCN{rt^mR1C8ioeSBvacvVV}%C~(? ztYvDO^@M0ZR`5o%Vgc!l_+eCO=&e4nDs=(V(m(=3^VV>0+W5hd7MxfV7>Ryq!yFSe zc%zdcRf%$>$2oZHtPe=MW)8UMwA+~S4d#x#kYiD~EB~O0EyNd{7BjCSy7qQC4z&g9 zBwGTwe^`s2>&h_vY_35GApgZwg#EMY#UHITXpF2Z9cT>gX$@@j?P-5!*#VCdTR9_? zI_^r9HB3n*$PR&dcVUAv>; zTSJ)ZN|w`lGr>Cl)95ORJ!>k9zb3F|h1r5wDG4 zsO24$4RNL`mk510@{9;cjUgk~oQnj84P_w?WmO)w*=`1f{d18|oSJgK=5l<}KB{Dh ze}z`pZ`g{qmXo`9i*_^FjFiIW#@IN?cXvx4LQzK<0B!2W+BzIU18q|pP7?hU=K`1# zYHlVW#cH(x9g7`56b6U46m)0F$n&BB4;FMc{>E2uifuI$NOLxE+aulBzAKsHsyH-@ z{q+%Jvm9J-00030{{R3W|KDQr3toS0PeIcd<&pi7YnivwSXM6tQf_8A2+_XmMT|=d zg`aS2nhiAG5!R*LCIOSHsi;wJ+)P=*k(72=F*eg*!@RsT%vs=I@gw*$vuMX~uX&2s z;>1ZfPj+>Kxvy$4y{K*HiT7i(|B z?N`D_p^@ESWoZ(6X^%oLt|$9z5r}ymA5e<=#dHE_8;=0an+ogo{z)p{MM$Bt?9w8a zp|w@dSZw`-#pX{~EdNI@C0~Tm@(JDz)i?U9P5Qo}K>vuw(tjo%hIMmjnGBLnLX zTm9dM|NSTYOHFc@$o~8_%UMb~r7{^-VC!Pt3TsrD73a2crpuLMXZFK|nbjqbG}*$k zNr1(hnA!^c``3u(ZMYMAbSe0r;|!dQA{R@pD^>N6h$r~T;vFFYwx(i6Mi!BtoHlKx z=XwD|9NG)1re8t zmJHQmBC(?Y(!kkDn5A)~L{-Zq&C6~kxEqX*oLiN9iR6N)|5d(Pjs!2RP*ze+KD(?{ z07trqT|VMV7u7>cddE{E}kzJIqzYRVi$)ERY$4srZaxibqNgQKIXp z5n^@iyJbo{eW@hgP;ZZ*I*Fg)xg%kFS2>|m%2oiqhl;QC?nDMob$?`4^-E(v@=-uq zq`&v&=9l+Ti>N7jn1aVfaT9N?JNGz_a7PDc%1BQN%lpdiJv@_d30~|!&Ux*Sc2N0(|6@-yzFeek%Iv;2l8cbN!GloXk`}v~5&cIa#l1~6lv08- zVq+vjTXq8wW_fWN$XQpphy7IAd3TQ`WFR!Hv+hkBw(e0Vli*rH@^4wd`NJkZ#ivdu z)ljU)VR(y_Nw9&B3<>AT#Zfla-<3`<$a`#IOIl86RrK;(Z}XBeY2=XAfrsyeGeqqW zX57i7x>^WLS0h)&TY09y#Ix7SQS;2GuiZg(`acjAy_HmG1bE`W{BV2D?ohEyM#7PI5zT{>R*#nN&2tDp?-SH?J-x(!MqvQ`$$;up^b6n#%l)C+ zfj_Bs4km_H_H=K)dybwEkVC}K!otwXR3DE|U)R9U^63v04 zj-Kw9rTl&Pf9FE}ir;iz7xG{Rf8*qQp~)4+T>hTjmD5P=$dV0M6r;Ls)Ju|3zAg%A z1Brs{1Kr7cpbfHvGJL)f-1&PCM0H?4_=a-rq_tB-KW|Ae?v;{{J6S>IbRUmH$Iuw+ z7X-~1&q2J2$e=)w~Mjec1)*R3I z?1;G*O1kGJ!gnu-4pvH*Ww&W zh|2Q<-cMV-4h>!+PUMQN^*ow8k(KqJCh0R()m<$ytEXUo^}PKz z#J<&)OUkV8H-Ee&QS@3wp^7^}MU=uE!;(~R_&xJQTpBRDgMc8!P3i^hm$aM5ppzsF zJKmkc{8^}s(Eqf3>sQdRMKu+(?v>RhZGfO+OB~pO?9lvpGvQ!W+LQoN6Jk^^; zVb+AunzrZ*Y^kOZI;FdQyT@M>gQB>Y1%sG5uj>h~qGE4g*Sjkiu~>LY!qej#Rv{0; z;8U)I)VeLJ@i_%bT0B)r9^{MkC9KY#B){VBTTFcXNlf-3=hOPA6O-N>wTD~k^S1sA zLCg_W1PYcA*PQANNQ-v?F^|FVq%J;@#v4Ko3K4U#rt4zok`ACxi{>!SIAOD*ySUAa zaCa(p{SBGkC-L>;&+Fvo7&e|nx-st3p!CGBf<%<@)k0=%V$fH~ksT!%-Nt9uj1#x^ z`e8>XpjZ@6 zZmk^YCf>aTZJ577v3l=+fkoE$jbvyRD@rL}+nW7F^RP=WbObzYPLXsrCL$LK1TXxF zki=|}J46T6g(c}SNaR3Q4duX>{XTqo*1RE(&(17>Z0R}c@l)PXJ~!0v88N2dI=<<* z0bYudeqwp{c;$s8x>AIPqpthT zfVVIz0k%|rLJd363@E`+ue#OREdPRv|B$}47C*hU`B|r&dD1B-o}LMff7Irk855Hx zhVQ3m`BtQb82;tgbp!kSi17Y3-$vq>vgC?Zrf!A~)_?9&{XI16k2D%2oM!-awEXvK zc>Ix-1B!(C^T6+MT!sdCQicxB)^_GUyo&^A@K4zJ+#8G;z{>D!D16?)$o$KO|37@q zzk>Fb8<*?tX>S;Vv;fR_17jWnb{t1wkE1&cb#&%4Zl`ebJ#9zVU8d%`%9lpW)PmLfQ98ZVCHq%Y9n;fpV{B9so4G z6GE3;5svq#Lk(kr>O)`%I!%5|by~*D!UstrC%IY352ayx5p0UmY$y#C`e~1K{{giB z9m;F76xcwzGI=6Gns2ABu|ABm!`=TIdUx?iJG zhf2$vBcOgW^zTIwjapvlC5Z_lv9_53(PGQIiY$(=$wSicd2I>j5Ro@*#68WpU4hOyBAo&NbdZ`yPT9e)=te1n-gK3p{Toqk8#mKKd= z#z1bqa=6Qe86HTa_}8?{$=GTQN+V3{<=QrqS{vjigk*NAwZ)xbMkH9yR3uJJp=9}{ znKv94giG%b9Qva`mEP}sY!seCOn61Gku4f)u~Qc--bkH0&k!o{;mxBOXAic)=Nh`r z51eiV%Fqjkx)_5eBlgbvxq;RavaBIYr;l02!eAY%K;p*UvQ1>v;MpAKf~gA0g3k zJ1$hG`LG*tHe_TvQ9~&nwEL?w7}MkE=2sph-LDJt)bEam%hD>*AO*Xkv+Pj63D;&q zQ=NQT7BGP@)8;sK(!U!5qx#UZ4p-CAN)-9*1a*3Xb-O3HQTrLx%N?Q#exNu(KV7#` zs|~zQy|_8E`Hvca?4M!tXW?=v7+i5XT{CNET|7}Yz2~0hZWgBcZcl{wdDD0B{27N2 z3Ii{%#wR2y_dSW~2?&42nLH75HUJAF1H*Uk=&!^7iBtZS*R-ygTc$vKn73v`cPDaNZXW6-5V%v7$b@?{{L0!HDcf>aMQ2FQMFMef}G$@5)Xf=aF7uGUo zgxc4dJ0-_`zw?^b*k6M#s;XlI62>qlS!QtCd#;dWvAiQ`O(22~Js4pE| zi-I36gX-0EualXW(!HHVUYN}YlvUWz+t}}amr0Drau+cI!|1=p=~L+}C6E`S9blZr zwOy^DTg$!hP)F9C4PI6=Fc40Gc$9G13CQiIaJxH`B*aW&V9cbsD1_#j(p($$&sazA z)DD@!!`ZN}dltQhC()~U61}vatjehZPtM`^U7%3aH6g}jXZt^j-Tz*f0scRl9x&29 zlPD$tfZ^E^#K87rNC#k```>JO@crxjmAHOJt-}%{qL@jj7+A--^I$znyr^VLlp?Kv zrRhFF92?||Ok##f*Hoa6k5Bm-UMfTFq(W`eb%vgha!r0HNl?RGy0p11Pz+i;L9O6Y zx&5Q+Y~L=CRTEGhq^LAJ4|}qqVwog}GIIzroeo0G|*X zx$Rg3;kSMtZK*5kl{WuUdxNGr{s_~{DJN{twETMI5Lsip*{Op1I0asN(96B^{Rc9B zXPz`d%*t9W@7LfGG}2eoP$;l1MglCJgaWQzya5*yCruZHvS_@)ha*A+E9jX#n(h>HHbc@E_0yCip&PeXaGJgBuPb z_H>n<-R84hx%qz|{M$G25U@F-(>{gHd;DtX=G z(l#;aMUjAmOU{O-A=7|ZC6ZA3?)b2zFd(vEX+HuNO)m`ECiZ3HPNO} zovGp>XFab(qBr$zJT(QV)x1Si%%p0V67Lc^^l6z`1uYf=j?OHCbhhh+_ql zH{O$})TdX3xAFHZ=2(607v*6l4H^=EqZuRKUd4N*7P) z>CH;t^l6>{drHI~4lfuO0ioyC?@E79eWnMnKK(KPSO9c?t9S5o_&;{uzs!!&G#^Ib z!F{PZ{Zf*p0`4G@G6EUX=a7geYJdE4 z0<$7Brw-F*GRU++ZHDz+Z;?3ErR{pxvtFY=PFg#kx&hC8)O_gz_T0DbywZpUf$TCt z%{?9^5*VG@!pe(H1e+g0SXVOvhdv^{JaLY=RMqW9Fff2z1Q!b)=lY5~W)FO0iW!h~G{08sbn#^sLnO zta*jJz(*!`IOa}`N`s*}3E@^Nf`P>8o#xCrOz6U4yk)(CfZJ%-r1TqCGV8A`P>`o_ zp*QC8^>P@yTdRGk(_pg@0eyp{Vr{E~AcxSEskvl znj@F=7UHu8&h-l&xmRRlppQrLMnHLDj3`EL?;&%`(v2~!`Jm0gkWwN8Y+qK>h6ful zkUJ?Pzq%&9t>k&XIs%J%2EZt7BhbX0Y$JXtxfYG#m6XBxCT3uYSJc8gaP|dz7rh)4 zoYHmPlEF5CF5$3h&a4$ zkwz6{#|iKOdrz>ZS~`zTL(m!C5Ei&<)ND_vjc=guEpm~`iN+P%C&Gu#+o<*Mpv0Ed zH>#D6ZXkp(kNUpurFThaQnbfT_GfTtX3`xISDlcqStN~XJKhzs!O#$(g26$RnEmav^}ytilC2Ex&U@(oR@BhvR{$nwCSSN7+&osPx`n>Y$xtENH7 zhl6wC;l-GCr1;w%hrvg;srKDzo;`8*Pgr#G^z#0J%CJBmLS4y$o_=J;-rxKwqs6D~ z&tV9Eqzod#3R->7#-hR#wbG~ggP}kp;mR8t;yuUW82;E#V`b<-Yhh@tYeDT`XlH5v ztgQSv5QhKTy`q&;ZZT-Vo2)%EFb70YLYI22uR{#D84I zmKsk`;76RrAI&G27`{isvHTb^JrDmMxWa$Of9H?XKh|i;=e}++wy&sd1cE_yt{!YE zyiwojadHaMosoH|J{<~%9w04`U&xO^Z0JoD3WIYG;r(Yr1?u#7FqXo2FZ!Dn(Ymgm zxA=uuu*&3H-nx>723qYsz9u5I?ZU{HCa zpR2Sd1*Nd;W~As(?Ly$M{LshDyuE=0amssllG_lKNwIQFXrTgI%*^4m49~Efr>EY9 z+u&DM(eH$2PY1ApRMbxhk8Jjfe&WbqzEki}Zav<$>U6DShgMvdNkpMX(x7!w>gbHE zI#t^wP0k>i?Kv1rA@ii_w9hTq*W=`=cqY%nUgu{Aa>J>WwRU~-Zg}inu_cgb3(C|$FANq=PwG63&r`u# z11%+77N0FYPMu5~NwgB!A*+^Tjme`2eq3^lhsWd7!4WrB{E-7u1!B9F>%fgl>dr5I1cuWz zP{BUezBA@g7NG=L0r>N`mleTTUJicAqO*%q?ja)9p@Nss>W$fxdSmniBT_$&6HvhX z-atUWf`p?&Z=W8g|E9#K%V3ml}VfuYrR*9RR1fb54H;QwtKo{XcOg{l5? zz@Nj_~t?$iBc_gjM4Z@D5LcZJQN?ns?BPkBN(+{CEp zD8jjvEP|= zFLhpD>0lgQE*+V&irQv4W^!>lEX*ks0~-MwR07SJymP}F!F&HfW;`EN>SSw65fR-1 zi52ku z)RK0b-JzxSl?bT%eK$qsr9GiP0w(azzXUfMwyWu%^ZDl%Y~P#5#_V_HjK9wLo!%mR zy98DK>OE_zq~_HYT!I3+uSlRmSdl@}XSIhQ;BJ+?qzXa>!a6f-JmoE5Jw5;c0RR60 z03iS0)Jez%$3ZKFD8~nk3?Hb@rP(XUF?BoSO&mxwE`~Gw_gGa7LCrdHm%aLDcTqurv2azm}`LsK-YFPE9_ajomUO%k~zGY5DLC+y!|gw8?5 z@qFeXw8R*vAVQyeSA}}yVpXUzPB__%bZAHHrCDKbGv)=B0O?Qet&4rD^=My`xe;8C zWsBUiOy`BTxMrF1ac4Kf(M6(Ih$DHV?IoI~Br+#TGP=x*Ev*~i z20luChFgOtxYc=rTakZ++rBq7zk^$`zsA3xo@!7eoWJ9rfVHKiq1|`W&+o97mF|zS z%fAf&ThH~EwUK4emwA%7rWk}ytYvk5D+{F~je|A)=j4}Q$mV8`AIstd?2>M3G~b4F z@UPLyIE?$iz8y}%FBVuYDb)(FI)e=TU9NeAr*KO-Q02@ zO%DhXN7YjPB;R=nk`O+pN7+V%s~5h~RZlK1>cSbL6GZSWX`Z>SGkc0k0mzui%DxRm z;ZD5r-4;|&=zV4`uhxfu#?Zy2F;{eg310kj+0}`U5h+~a1N*i<90!2Zor~L)k3a4s1@^xIN++cj`;5k zm!gzL?uzqt(mti#$d!k-1l~ka5<(F=aa=L1^#h%m-iT+fN;P}Nu=#^uy|M9p09V_p zC>ci^I%V1t6@?g3>gT$HNAn2f=s@a}jO>?&WBG!c1!uORM>EI-ChJPoN6dPDE1n;$ zkvg#f%N8K!@OD}?u#-m$MnmqL>q^e|WG|=WUX&4o?2Ipn9qH@t@?#RVcH`hK&S`^; zPCMPC{nk-y<{<;LLn|KMCu56a2v9dgZ!aOK`22Gm?zPL$kZTMEl=`#uS{XO(?(irqGE^gj|$g_41sfrFR6^(0FHZK~bGaF61+#l(V?YX#ODJr1(;4&X1gAC1G z8LDUhC7?ZggWf)Q3>Nw|*S(d0heV+-g4yYJKnq(IMSuB0{OubjbX^=$vSBTSBjV-_ zh^QO#*)kJ|wOAmPBN`e{dAYD!4e-67#-vc0*jZoi6n8!jIuL$QlMxCh zl1A;C4xqd_U*CCl;yR~-?RMm&Y0AYN_Ae2qTizBP=CCu4sk+Y}%A7H^9qzxDr0dl= zpFasqT^CvJ>1MeDL%4NRHKG$HpLa^e`r=!5l-wYD6-1b98mGs(rRdE(s{rzN(x5pq zMQHt5&|gg5@F*B&>2*HdAX*-AHS7)WarVSHP@h9Y7KKQJ;R4d9bz)SH{nkKrR6GUQ z7%_QJ=mX6GhC{u3!CqSRMU_l%w(Z;52c*{@4!L5*_#LLYoK@|IBZXQOS&wda-_!3U zsJtLpX6+hkw(MtMH-j?e$?V&+iwx5bAZ)SZj8BhS6_qH;ZlJ(SW%hA7?AjGtCsBRl zh%@IHEIW+gpQfubsCkn>AQ_Rkz2SAK-c&X`Am(GP1$`#F=0N$ylQe%WNmS}O&wGIw z9!p;@q@TgqoD;#Xr*yes7$qY77@Wm6M*rLy ziJt!F5J1nW_CI*$zXINkUeDkgB60Q!20tb$(}P9G+zr_RVoKL~2(H!ljsEX?-sKK# z_tVJd_7maUD;n8qQg!Q?yr`S&lp|pc%AMih{m?ngGn^PxrSMuMUU6FHA)qu@-%BI# zGGd!F+88w&1e9uV#>nAt$@sBDH(XyDKE)ChKyp+(fs2rN)9r;~>H{i#h+`6NmnB(A z($i?6Z8`ICyaFkru=GsJ)R6>@n~xIT>uabcI9Qs%CvqstZxq}CgPeZsH~p~l-AU`s zE_@75Yi+ceTe*ocFvv@*x2ayNCS#Q!-15iiT0BEkNCm1I8QxFkCn9SkZ%@KI&VA!c zOyDjeUWkmQDR+m_KG82^xk+&}l^`P_o}WHNv=LO?Sh3e)xxlxGieOUfpCsI$Y;Scb z;U`lu$`i7*0hvX(5m)%886Xxo>NOx(@=C1+Pd1!3NH~G5eYCNiADA~u1RvTwf8suV zdc0LAO>`CdLneU~>sSXTpxGvp%5i9{J4}{?D;C0lMAxIC%P{hFD*jl}J*pjOWJ^le zww8Q)L)wvV(^~Vo9iKXW?4%$|?Dz^Ko8}H-Q8M;`WdT&cyAa=2e(;%7R$u%1K=m!o z$#m{~j`VZTs+$uJBnObkrmU@7AXlspMtngUI?5ktAU`$UCy(ai@^&>1sX-}bnR92p`R2d(*-x{(x~jUH-K*ZNT2*T;lPzLjO|XFue^!JA zrC~?*S0BaUG?F$>i@CHhrHMYaUwp@AJ#};$25^pWW`iqo`<($^JF(N zMR0k)e5nz*FMX}N?juAFwIQIk7F%Z=nS^W^U-oX)=p-?zwRUIC^ZEu!7*%}8`~}ZW zh?AwXw}3Ra0a$P`zwcWyI6NwU*vpB9376nE!@0YXpEXE`0hI|eJSM();499OHlrwt z=LmJI`rtr|OW;a@VXS{GxM1_nta9deo+-6-A&msi*(VC%o@<%gJJXaF#X3Hmeb&r_ zIz55+3BJH;zrdTt`bY4p{A>7oHkbW|KY~BU-_LF*6`nBtPoJURTt>4nJZlu_p0P_$ zNB`Y!{D1S>e+A!Gx-5A(tJ_y<$_Hj$IWoI`6xBmw3}+RZ=dit4oN_pUFN{7}a+ZEf z8}c>;Ck-&NW=pq^BM<_uI4bQ`O`}*&xnt{z&A&u5MBjNW`T|;QbbE;5$mv$Pa?zCT zH0z;`WAjiYzLy)v>IF^4Vt2K<<(Rh(Lh-~qBV}*2dZ%cuo1tZH--9p~`bbC{!W+gR z5^LIV8?xv*RYG%vT61u|gFO0?=!Nz#X1Y$p1CpGzTe8WYTiLhewJHp7Ad0~sqrh}2f1%n?cfVS2Yvz~Tr`j=i9ASDRMVD>jxY%sfG#{BmYLLoM@TOo=JI3JqpWYx52GjLOagy*F7iV1~gf z3z3OkVbbP(VkLu5w+QMGI(VhG2`pV68f94AeRiz$X}R@khj!GgpWV7+Ix8jF%m^< zj)X^GUM{FDjDJ?|o{ig4XYytcj6+(T~__SBKOXmz2UfLq75@yrG>NI8bbT7I>_$RWwMSkzh!6~)=IO1aC|UI67r(YWou5Csbgy8jv)R@ zOMRdGwNh1!QcGBz6uf<#h%2W|KqiMB!N)srPp`$Uk_VFxE1HVEaO3q?#_!%kd{}yr zX!i+yuhcGtSDu0kbj_$B`dVnJ{WK#E2#&tn`aF%${eAsC+a!b!82-H$XBl1l#Bo^O z=}wKe8|08xzq8l%gZLGrFGeu!E#%y+XYy%Ql4&QX*b%Q5GR=4q0-wbsArJ^ukN(n< ztmFJU)2f0SK$gb1eF`(f_@MV`&1>@0ntVl9+OoID;q?e-HEw?;IFhast7MH!P` zzM89!Wu3-}zRGLVf4#+N&L$%MVsVoUk*w97QEh(})dLCBWR`0-?T*U6ssnkN5O_h= z5{k>|HOw-77;3%9j!)7%IM)t-2?Y=|7BQJ=<*XpP$@Es7H?uwF^?^i|T2VRPeyVSI zo5uu-O^{m0Un$ii(koRl>n%nIoWAO&1o@S-! zNYPKE1lweZ)p&Ew*{O8|v@H|*%F7kskd#LGd0Ld<2{kx0-heqjjKZ~)MOR6vn-so6 zItE*R75ilNyQxv>pNrR_kTAb5#F8^MwD@IR_Z@4pjI>BJ2;VgUkbf)n^C0kV5B`{{ ze4_2|o!_w1(9<$JM}qs$U-2JI9SRG=#@)KBx9zcx<6oyk)lIwNM6-z~W1Z^IQnkB~ zJ-p0UtF9Z0-w~Wrx*2yg=g(>n&}V?eby+&#pwH}1mB_K=jb-ud$MHQFPZNy}cpm`G z<|k&5o~j%p5w8vAFZQnvT{*YOMUwZy2k-^NNR};@Cw#`zmH*x~AT7X_F=D^PLJ#c+ z2;Q~$>)ZRJb$7)6BR9RtK~Un5w{sag8tRfzJ}IgW6%& z$-#<)1X<>*BFlx^Wk>+}on7ny*+XOauZzjQa>ak_MzEpBc{0L`7&e`n6$1-6rz~lU z6&wO}K)15d|2kN)Lve)f#y0axpYIW;1E9*n7WT0he+xaQXwI6uV5)H>6#HM51o;Zr zQo)9G9?x4yi`!QEevWM4>E9WFiU80E0^tKJMrURq<&6SYYKrc(=RSLfv5$?E56IsgjsC;@;+%sJ_zHMt=wv;jht$n|c5d_=- zihQUza;(n1j$b`;H5KfzXd$ zD0>kff?h`IdsZL>XEj&s8@%lStQ~lAk<$w8k%gXWozapCd>{kD3JmQ6@kH!Ssx$vTTtV9vU;b@q2QoK~! zM|-^pPXdBU4`Oj7D1C^t@bJrM$KvP7${AN?G6YKDdDfn0HjEn0ycYM=Y+b%OhqFR< z%Bbsg%dtaLyhsSH^WUp8^Wr#5AJ5DbN0 z$PD@;%X2r=KX{m>Jffzex5$Ju=H(mo*%&V18&pmuI{~*#v+WL@E;gr$Ka_*UG2$w! z)IW}V<*a{I_eFlGZwHZ0qD(xvUM;Dn9*=XtlYpVjgWbpgP+$j8Qb;bDUhC?8s~mHr zE&n-Pr`*Xx(Sx0&aj$8pR?Ko&FZ9Y9UD;3!yNpw;VaPG(+Xv_|V>nE>b7B%xdh;s_ z;Tv22Ef3gSgGzEYI$vFdpe~q>7@Q@=KKS7HZw-G1>RZ2`9e{sl}}#55HUL8 zwFaZafy2HHmE1Y3aC1Ou2Z-XaZs(?;g&L?nLk))OyGW@+s@{|0)kmt2%UiZ3gzQuR zZHx+b5Tc(%m0o&AGi}R6!=974V@aSj_aE|;jJ5G<@)QaPTqN!&2Bb;jD#{md-P`HD zu9Vh?*jD1B=6@+(b4o0%d;@|LGesgKCjG8zxz(xu&Jbm-U(pu_PIqQc=fjMq0`(N9oPt19Kl=L(p1;sez&$1k(0q@CoRO>(93+BG&PnK5i{b7$C@uCYBwd)$LkGg)WOe zEHPSVp^(1E8r9w)X|l{VB*s_YUc!c=Ho|20EM}m5 zmT|t*up&ULkSvWb{85e6bge?_9Q+u7dP+H9P?k4#|3Y~7SdUl1Ele3Gc1b7oW8<+3 znVoNLa(!ekH2BJ85R)C<3|U7-1=MPacqi7(-G*_ku+Y2LS>DByx&l^RVUJYwA4(%! zYpnvyxG+X}$UfcmMK-A?5?sn|D|O=r(()e%V$b%3bMTvB=c6yXbE1CM`8p6;aQ}?? z#V5>vdcu7B56p`feH~cPwOqx$lKi9!?4SB~nD_gws|G$=Od5>u>_il{(bu-qx51Op zw$L@ww|(0EX^8@k1TLp-W?*TfNBfcn{X0Jq_@yMI1f-rjisHuR#&-I8zZ5x01V8fr zn(@y)(tp7C|4Z)kuK*vlD<3@p`L?nIhG?mKRKU;_e>xKd`;*BT# z+m>`In|f`}{x@)F`J5XSAlk=|2=Toa{#=kZTxwrqwi#UJkWF_|s{Jy&T^!1-BWDlq zVQx~)ZdNM1FOWUHwsz&cmhw#Wti3bjw`qX}my9o?hP2tRbAYlI_X8!oQ@ISQD{$_{8h#1MttSQe;hc17AmL8vVwn@ro& zYOFJ>=oNmE@CaE7n4m+OH#%v}bXm=y^tS1RxW6^cUfv3-|LUhlo~7F{zCh1xdNyh` z9A1QXx+Cb;rj&3;{E3#;l|oR77Ky z(6w2voR_<=fiKFmvEeZ(azb3XA3*cg+GqM6(#j$zKX4{qf3k&860*okxtJxLjGbrp zvB8?OUCk0s1ZGj67Ig+7$Lc*y#=`<9GFEh|V!dPY&8SUr3u~i}(IKs8okv42YvF(} zdh|`^n4WT3xgtgjR0clJ~Ja1afZ*|Td@AdXu3G7)lD?p1VCCIq@Y zw0?o>AYuK>k7RzGn2%$WIwv`<5K#$+p~!&4Mqnno`1ZhFfx#B4`bEtMMa*5!D zeFlav!km>V!IF1gQp}|S&c1g)0u~!MUDz!IEDV2ODA-Dixgq+DIW4hNcRDNfyb(&voUii&uSf{nzwn+ zD{5aa#bu2ExG=@S5>{WzEFeJR+#=(veQq+(u3Qyqs#s&YBYxOpz}a$h=n2|Ny(rZ9 znFS5hOIS&VBZRxly|-2FZN27@F`>C*?RD6#Y?AM@W-ZL1J_ftp;GK7EZVkf}3`Rv) zy7?W}A{!gPdhZO6^ik!>c;a_3%K3qbsi&7VVQShv1OELJ;3J;^|0BKxJZLheVp=#p z-8w6HOTMGM+8+V0^ZUN>5BnoXBxnI+L*s7|QbjFve|c_2f`4ABtM`=k%`c{|r8zDB zH|OZ*u_=OX9EZmo0>DA z9I|k-xIJkoxgM?Qg^H-k3O40NF;*X|KG-Lk*wVcphZlgSUhzH$_uaN*H@9A=g2p_? zo9@TM)+MJJIn^Kt67Mc21#}U%WrUYV0Fv3 zr%s}y+0r-{0X7ARgX)q5Fep9R-`7lNn;+26b+5bu0T^<}itUWJ!mp}AsBiK-n+~;l z#j90Rsf#WU`_e(jo+IEI+?(P3;vlmvSXmii zyH=8tI$rx_mlDk|?*8UUUIawdEqLhz+U@}xR04<U!cU)P~$U9}>#2 z;H3Tx%uU*J?uBNpXkAg5otaqxVH{ViHvs z&|NJ}i9f(15`_MH@7Cgyx_{5F~vG+Fqa4NN;S-3g5{b=j)*+1pK%c*|&M^SCf0m!v8tWEZeAqDBY=>Dd>R z4M8rxgxY-MTiL@|c)YXYDSC7JB$*+|v*H+4(!AE3+!9uV{?KBJ?7 zU9f>r&J4`bP{C8ER-D^{OvRaGBBua9K)}C1Cw>BF{YWgN8S`FP3}(g9z@ti)cZ_}W zg8c$Sckkq*Jb+9_Fh&1})6n#O00?^ZNV#ZW`FV6=UG=s$+=L&%j`Yh-%-B?n%*K?; z}DZ8PxHJoW^k&T;o#)#$&2=p95gC3U8awG;$ajJ9FTsiv?|dr})$UpAr#| z2Io5w(SFtVon<%uUqbo6a0~xHQMZ&o*A(0UbqnQ*KXKaHYI{zv{<4{2f4L{Qc`WwJ z>ChO|2W?duA&)ew^y6?{XtYCctIJVeY961IU2a};_R`55WMw9&RAByNcqB8M<+8y1 zOw(Ha5yM5oM_{b%b*_K4l~*r_I4E#~&BufrI6y$^HQAuhkSfEPx@R@V?ViJJ?a zekrVqrK!0WR|q8)Q$%+2P93(5o!$m5~MZf{s@!`<98A|8REMf`E) z$TzbcEkm;Rmarna2eeE3hUn8l?i}4AVxD`g3zTRp6`Hn=6m&?e?+p2T3C{!#84m;7 zt|Kb6p&4?@@Wg$47OolB9OhQ?_?mhJUif=5*%7JCo53I}Gq#+GF4f`oSHlQXa3;QP zQfsQ6!dpw!loLW(FiJi>rSG8&vEO@B07K2Jtr^XTNIj+S=ONJau?Q z1^$l_|6jU|e}H+6o#qk&{iERqZl&9>O2t9}Do~WO6R1acyYyNeSxo~E+^t1SL1(C; z9y!R=Fm<50Lgi&3l`pXruwg7>!J<9QJ-{sBnhNtC5Ekp68e@WZaLNwwGZ{puRLe|f zX5_5@s6+*ZM#loyJX1dDiSltzBIWT@oMN!pW>^jP4GG&i%abnN z{E_nil}Gv4r2jA7#$VBXZino(EH{&lXkZM(`LziSt-M!ysXTA3@Jd|4RJj*bBjl+4 zeNe7D(ai<{G-Y!v8WepSh6FEIBtQ$a1pEVd?GBa&fdZ|5e9I)-1dh)6!oHbwD7PTF+^L`#n?D5u^rpZ8xrqnhYmABUH+*9Y{kPl=h*~fE< z<-n5>TJ>kqnUyU;LAW%-oq5zc^kt|(jshw>?;tty1*n}HxIvoLG6L2x%Volc4`1C} zKbW7gxfO+M8phIw{adsj=@e^BR5)u`&}u96Xn9*3&y@d1zbfBoKai^sy3xmLVN9BD zk8r}_&ty4~+T+B6Z5)>sZA{H#mh28P6_i^^%N*Q~KU8cs9Dt~hM~iQ5);i%IcUmRRxF#dTgmZAi|rnf2%MJVWfgFI zYUS~OkIUMn-Yzo_b$S+okTy*^Hs~y%xuuX1AlaIYl3WIp@BE3?5Hj^;G7wq*g3IG{ zcHwagaKIFLy2GWM2lwe^f`e`%b5%sK)iq5R7F6@T$3*Ps1C z(b3V+F@3YqWcY3JKX|3T(wbBc!onMd?<2?O(@{XaW%4u<@2$3EBSemR#PG}=C^@cn zNOjo@!7MhVUATdg6EE-1ed){*EdE%sLcAGCuspC3T9R#n>cgI=_l7R$78RAn zUXW+5|-s7U4lqa$W~wxxarpc#+9%qok17}`&im{E@r`t zGr&-3Bp(o$rsP?RNwVqp?cdE)4Z}%o0*{}d#ABL9b^}Gm7y#i{3NMEwiFq|DMAT-z zZl9qyocHL;uK^J_5Wd}3YP^Czb)~Fqw<7Q4(V=1&Fn^|ApD z%u^LAvvGEN0gSI-R=P&G_pw|Av|$dQmi)ZXn&0>S~+@)0jJGANMe>I2>Z;|@Xz z!H6Q~azBkZJh0#J=f_ag+Kwu&Kr=1RNU7MXFI1&~tl%Iw_FnF7qS8kv{atQY2VNcv zbz@6N5B-xVvsLkh|JM4+9<;IMf_)(VGfc2Vb;?M*#@UoVdOG~3HDS=6ds~Ybpdhi7 z%}6WMlml+ltf{TDn|lkzT**;aeM6q=33Qp$Ul3F8VohcoVY?<9IX~UXwpH(7^41G~ zMSXjZEp3bIOO|mj1!M)f@FJd-yKFX>vRlW8{yr2Q?E#w^tCETOQ>;yY^3#zMBi*rD zykHdVBoF_Dn*NUtw?iLjP=~U$d+d<5Oi!{=_JJReLi9E#J0^C0Z$-!9C7cZoitaDM zXmPBNOBa_7k;LDjXgAl-MLAkyywhqrRm!bRfx3zyP#|r818B~k2s4G9tZVps>=TDitL?p?gE69ui>LIVMzzUN;* zXBZ_D;JhPAh6jnVZU@6%%$RI^o4=7j<>`~U5=xmu7f$#76p({}BAx#ub!P%AIE(9@ z1^^%KIUR|!kMEbQ(+(NLb|@SWLTLG1@z+}rXhYrdi6oD#l*s@9HSnh zExmh?J@Z!{uxKwPMdHV-qfg;jxfo2a+&`TWlrHY{L0gV)YHAp>k?eNjw{7lJ`v>2z0%i&i$4RcfFc8t>bsz1#sE`~#XQ@n zNbNjeWW2MTfb781(u~l@JSbvW;vH1L>A?oZchK4Fr)z6>D(WL%*5=ou#a!$k8fLu! zZ*vb+tGhL{C}=avnRoHn(hKNbK@UM-Po{;dH;X46cfT}pJ(SDaLuSlg8TLwt7P-Z` z_}nJea5EihE!K-$`oNo1?W2C?`}QPPk$;4|G_+Wut?O15aETBVhroj3ns@4K02w?iSOKxe__D#@=(U_i#Y7Q)N5VGEhM_`lvPB6-fkK`j z*cc((!hyaz1p>k;yVQXB1w)th<|Ba07qv1%EkE1OoA8yyWz*43NFC6ttn)RjinYaz zMK<{CK8!oGD=zpJ4RkNuvFV~v#B^*%HyksYrx7q601aQP@q` zzNG{TeuYf*wT%y`jij$9V%37hU5;w&D4{x5*U0lLZf1=^z>O9z!UtwT}Oo?OQ!8&vD$F3vv# zZPbbvH$Q}j^~bA&>cEIKnW|<^`>$l`ea(rzL? zgDK>+YQe+M&M{-Th&)D;_jIZ<6X4WsJaOg+OK*C?_>Y zoNT`P-qb+2_A@6SBKer|pn$-BF)!@>F$*qjYNjSeSkkzA0|s_&8{5yQYQkXhq5v*R zh!v10e)p9P^!6q(ScuzN8kX3e{kVjKzS`+H-U44WOLY{8l4KK(WOgz=;@P%e<08z< zdA;&WD`tdWAkZ}F)`*uoqXUAV$yPdr0i3q!sdO`T?Yv|X9MZPX5P#pTQML=K5z=-w zyn2)gi%EYhkNyDHdg9@0%D-Wiu%K>V1)~h^heF6Y^LeF^1a3y8w>ppDlAc*5Ryf`D z13HT3;|#K%kLU!XA^rj!qplVi!A51Q&#+(K(rdUKLs^Ta*M4r7VzxWoT+&p@&H`aL{=L&r62RZ0$SSNgO-_&nStSNp#7fw4_@i7K%3Dj4IjRDX2w$k zlH%7$JFrN#iBJf_fvM23qeO#ERMUClw;cLvt%GyLdt0hhIKb>sRkTBFx+&r?pv2QV z$^VcOI8hdGf-$XR{#35tfMcoz2ymWglDz;(s5}R2J<2^cdSKn^X?v_FCpZb)j>f^dnhZe~f& z$%z}+nKy0+j4K=Ll400~E_%cdSB?-<+tg0VpV*^t3X|bvLpjb;4lh(&?*1A{uoWn1 zy%d#b=913Inc$}Jr4`jEL!%6e@Jg+uoX5yPvLfiM#h?Q}@L>587shOG*&kYHWhE+F<69Qi-Z0y3DFU z;MIG+Zw3x2IwFr5QU zkK-87DrM-;K#P8(YJbP&(yQs%JFqgU*@@W2qdrAf)L=3@je;VSK$yE7sfwN`zER4T z?M=%RIJ|e;1rjF`0@xb{II2ny7AIt2hb?u~QP)@lqdlbSF-z?j8iz$eXk_ZA=wL;U z^spwCN9c%t^D=a|MZbTP`=TFh@u0W49fX=n=(VvyCuYRMA=l)<`!)wiVwgf#AgsbM zc1@`EcWj(`Yi;>dk}VQlpU8U%(8sz z6Utm3$bF(scHOH_eRB|qI{HvlLxd;%(Co9N2OsK zDXY%cHNyF3?JI^a_H>r?5brH7a%am-ze={Q0gzVy(Q${_%W_+_9>TLGabI(P-t zQ3y$<-lVqJfm-@}8L zxvoadt5Yh@BNhGCLRFrRB8l(J({RBkI1p<>;F7b5PV>TMTvp%I>BZ^B`hFA}#-b() zpx4^!eAeu_K0(&;2{)SGLHk0Deo*I?W;NX(;mYv~WzZ$0kOG3=fJ*z#Pa6Xx%Xhc#G|!G|f3BDNpPl`$^l!0#?D3Wq?9}X|dFSMe zt)u8ATt#!&5*b`Cg&UibR?Z%VxP*6I;yx0EGhP%z-+AAgci8BVw(Of8>;w)n};mkJEAJxTo?2E}`JxA>vNs`Wr^%=Ymzf%7f54 z9*^I%Dr;uPFk8U?d&d0Mee0jrcwVQ7jR%52^Bgn_>YK;t3Mya_K)}D#?EQ)Aj>M5+ z;k}4I1#jvrF0e?guFw)F`3BrZ*GX{J%^NP)Do)9xbi$VSb5pgG<9nXGmCTq-NdJ-( zyfJ6M7N;wWPeil~Ab@!vP?9=H7e7hC4Wa8kCc?o+ncAbS;op5C=@qWe8&$Hg_V}S^(@sBWTfPd$s(ffD8{&W2&Bs76Mm7McaBQdvq_CTm_V`XD(tB)tAZ{uLBt8a@Z zY_20hi~H?~gFr!}{;lv2uRQwCb!drc2){QwEO{z;DZm`BxYy(wxWC+_jC`npeBX+7{kAH&W07#Rkf$PF6n0 z2`*Ie%t9rAIq zFF)SxxpbQqT1)K@IyGyR_by+|4YqpF=UTk?Ic2!PFWwKg$>7dercpidmoSM{B_tF+b*=P=hE=JxK~#wyM7;br)oCSy;PC4*b5 zh}60Y>+Gjgr?hl`E?^Ce5P_`e-hZnv(WZ>Y1mK*JL0}p>eWpFp@M_Ro?9bXVEpV1L z6t3N_4O5T#SBbP6f`YYoZ%2ol()Wv_Fj&fq+)yOW>$1agFT%eF6z1>Z$Ch#d=%5Ck z0)4pCCfue^rg1T4(s3;XA@o(!UtgdM-XWG_){)a}o(I$+&&ngU-ex24=&;0&wZanv zXIR;PMDg1CFzfP3)!q%%g3$8eu~iVL8=cEM!{V;KoN`-|ZuL z5aym`^~gG?Z~tp9CqEsFe$5UiT|1?A5p?K8)`Og(m$l9+VJIn|kYT>KfGhSA_<&Mz zBomWxqE{F4yY=-I>qWq3x20gF(k#r6VNe%we7>dka@ZU$#gGCe4M)nf`1l+$QHsVJ z>p+DsfiI+icIpL+}}0ns^7F0`M(7mga+faFx9rv{uwF|5}H|%O5VOJ-9{Tv zkWUzo&)CekJKfkEPhQ{jIU1FTv6;S&F`k1yo`|uFxxU@E6fbpm8Z|8m4bk^Dh5dX6 z!>1F-eP1GOs%`6RX@Mu9Z)2+OV*D%a0yOT=a{p|}J3S3O&GY0ME5ma%XS(Mk{g34T zoBz~b4Zqeexnn?OaQt-SHC&)B(ZPMnJj&g!rh-j#b@^Ev-&}R}=ml}UrWQ)w1e+jX~5TM}fY~FY-ns%MtOEA5?jOp!Lw&Yh#Aj zJ|h{7Ks%p|N0Ak4W+2Ma*kXi7tc8MSbvB8e?&G2q91{=a2wh_moK(Z|e|SaI(EUnn z3hP>3ucb3agDjt$^m91QB!x6+w!+-t4y#;yLRzT2P6$cGm3x@mW>1;{pMtmWPL)!a z!4@go#V`%}MpJ=?$!yDQNmBCUw zVcfl_`V}$|f{ZCR^>t^deKSA*mV&&I&701(>at}Hnd3nuH$YEcSaq5AX-Lp@)Vbnc zS*@5X;|8dq1r)jmZq$LYS7!7=RjL6Y3u_^T(H>8tcqqa%h1h5lwh-=ynnd3Q-!+bD zCt2#7ZFdfG*^53z+KiL8bRvjuflL=lus5-c$~;&Y|Bt8M5Ca|4b~gL8i-$iwHJ@vLA2@> z{F@{D--Nc=Sf~;mOObb0yCJ1`7?PaWm6ZSIJ*Pjd@lWD%{T!cxGP7Ms)C;Z)+7m_8 zIm+&0eS(kCKR;6j%i+QyKU5zdD|TCjj1+M?l1u@KoK)rO;us@{hLTP+mVku#*pxwiFDV{yJ)%~WfC;(^ASCAPl}jH&ws^!cxw6Hz z_i(Gcr0pv;As>gNjl>nuc2dnJJj||u1XcmDaIgD?Ef6x%(qnA| zQ_e)dfKcXzYqP3s);$*QzQTibx5fUqa1jFsZrTiNe*z5;TND* zL#*5mExD71B!K>TauZtYZv37K!OgKRJIGkYarq~rE^L&88{gh>*QCx{r8uaB@=G6w z)7VI?Jc?fR6dKN%mjEHGv!N2_E4>)Bl;ceiVG%Z>AD``wn6ks4>I98+c^rugtVAJK zCoCS*%0!e}zCatM+v;!Y<1f9Z4*y)fevxp4h>Q2BJs;YyJMw~^DvqS`RjYXMLFGhn z|AG?|91cXPc?3W@(0s=Yu8Rvqm)Le7MSOZt$UU>BCff*$vj3ZMYp9w}XI4__bVwT& z`HEZf^ZbLp3}<9r`{oxECmp5^^S2&NejF2WA0=9?*96D!2@PS8>~BZ)4GB`qDj>!o z9 zMtbflf{W~6l(h*ORx)FPQ9LYvEphj`)%dU(5pUS~COk|JT#-e=n1P8CN#sOoebN9Y zXY^&g1{3{M4Ok00;Ju@-G=Sh`sQNBpv&RGD+L5$tAx#*@Bt*E8p?VufJi1&HxlZ?h zhD}Fr+|&Y9Mh&hp@ZtWt^k-;}(~@&Js#C1XBQsW3TQAf;*$TqpRj$P)4&jU@#^Ch? zqmb6EHk;##o7^MBqq_w3LK25XvN!N}Sd*Tpj#NjMURR<`a-dD>M!i#g_Nd%JDj`>B z!c*d(CxV>0Bsdcaw3pd%CayJrS3CN#LMOu{CS#eZnKgBFlj)I9sYp!a+=4>sK3W`d z;sdbuXBw?b`%qV~QJynpl)T=w)cz;{00960001EW-vhzQ6(ZNzWH`Sl*XW?kl*+$_ zx5`PU-%H=Lgz`GaDG%KBoe&d<|B^FfZ|p1fiflB-EnD0gHRY4}eRzFWmod-u z>KY1WcB_zN)kezt!zvlXcsX*FsZ&JwMJb>r#OT*LQ{2Y+K6OHGxPTXM3+Cm!+<+u!P!OqwPd+%uFd6Cw8@nO?eabVWkUHSbYyMvW_^dX%T&w2>q z0O#=DEW_PK``J^d*@l_B5=RXj3zmVs0T`OBRFSC*G808$;4}06jwzSl3Q8+SHUSEfgLJ#aJ?@6%LWvaDYQ0T3r1oO!RFydSQa-c-n)OfDL{l#?i-1+Rv;a zfssV^@~EXF7uUwfdaSqE4Iiv{dP%X`y57p&=<1K1W5J?cn))kApigbWgy*KJMlCuJ zNpts5+|Jdf)Xr>=&Fx}@pjeBP*6)8(4xEZ?L#>|MD^b>#@5A~q&@r&qh$kMw788`4 zG1NBs#XiSA&iw5&Kn0%w%KHRR^6vlzf^Pk1VGQLJf8*Cyo>x?nSCWdK_os;_6cYFk zuF+!Ay!@`%N0L{3!rX7y|NijrNJqm&$NaRh(9{3YchNF_A20teT=K6dTLHSzcM#fT z5sZHlE|Fpli7RV$WbU03-#sfXDJVL~!&i&QV21J0E{9gr4=DbSpB_?fA|*7uzQK8c za@yo9+@R~25)eFks(K7)Mf!_ExdH6ps<75;N;+0XSvE4CYgg1B^ah<7VdAKfQw&6j zQr*i*ZhKAg(@YvHij0Ijl$PUr45ridDE^3>ff;yGQSpUT*jZPidnmOWGnv|#2v?w%*!KvnV>I9&$txfv zNftM<3ZhJKKSl`#s%<4SSm&Z(^t;(33|ZMpQ6*zX3EaOW%Xnz=H|e`kgHl@TdE?Mm zOfY8)mwTZC6vQo+M&Ny%WhY0$DMxCIZ5B@VN)LcUSDQ&PTd1Dfy_%}TJTfabYh-lZ zdk35WBW|w&zlhu;kEJ!7Tnyj98MnH#7Q%3OW(r*BoML{PfLUwsT^(Eo++JU-XPZJ4 zsLLoPO1tGU#Ct%WSq97@p4`)hWW(u%DE53`r&y94l^55Pb~OMX94igT;kzq^VP=NW z^w{n76Nk}#tq^Um$U!ZEOw&%9+bEh<+odCTt*is8B&H?HAqIQ&JSjpsHi3>CKLCunJ23gM)(ev&jW18Uuw43o^c%&Pv;_#lH!w*e&Th&NT)}gpAHBCZ&EU@vhBx$_l4c_~BkGm45ZCu}km;KIFWyv8@eE zE5pP4kkU>Z#@Q^NlP#9sTtD36QHDcqvIpqTivE)Q3RhTDpK{&7Tr8(o;8)&B;_Fw| zt)V%`3WAMj4lN1==^6=y#a!rFWpJjFfp)T5HR!nF-ES`Jy~u1x5FU(YWRv-8Ed$5-7;S?m3sQ$hqsjLZ>FB>0M+ zF43T*HE8DS`zj_mgM9&=9=*{BLD>MOA2j@eCSV`iL(-w;_e;sd-WT!bc7k59pzG-lRiz`h3 zQ6PIIX&JXxehJ0Rm=VFUsSi5b1Rdv7#2jifyaB;k!x8{_FWVSnmlzzXD970?yqF0kf9OkAuLip$asa<$ONGo-q~ZHdPE9 zVR26fT=e5u7Rsd@gf-TqAd>GkiN^J6AQt2uYF&XXSi`BVFHlC0%HfXPid9**5Aps? zZ+t*Zeot^PeY_SkJXbuI1v$!0Cfs=7E5vlmqMRPS1KzBSSpG>sKlAV=_H#m}-Us&8 zOk!}6;{G7J#}^S^ZS8UT=f{U{j9O9yJ87$VKJSixVQEU)9QT~sQc8BanL39}wvXEU zAWMzmF@8C$f^qi&?8~ie!J9;orR%RXA=25BIzguaL^nQs9RWAfROA#Y)-HM`v!q(O zFbgB1mtnY(L3C)>w)_nfDlz`rGi&yc`_2Xqfl}57AjC6}DlRcwjc?F+;414HFPEhj zSF20d5v;U)#rQ1}@!H9)A=~x86Vn@L@JS+iY23kHP=Y&LZqbsebnZC@K0o9S!onHyWY=C#o^GIp@EeXaXb3#Ipzu+cVlc`i#! zt!raPgZt}jfc{87&St4=YxVPVzv=u=1k`M-Fq6h8e0jV7Zi{Is6oe z4ex2wfBMV+^w;Jo<eqY14hm(|!6r2e5d`lYL4Z0l54sYxb1JdpZ~Y)93Be9@*2r z;Zu&qw>sLt%E>?d)qOf@`BcO5sl?H@Jm>{ z0c>e#e*H#(s6>Av1ZMh%#}PdWONQBpiDQ2Ne2zoCc#@+Nt}kvN&bSOnv| zgm%4HyhQCn)HUS-de^3yAPs>q0I0eDYjbVdC^82TjanSZ2W;SeU@Y0BWoo z{i04t0rNHKCkQIclRjipyh1&JN9q~-A~Ojs9t=@_dENQ-p$`UIQUWfjb0+U7d8R$T z0+K4d>N^sNa^ube80{jrMPOR?$KXmm#t6oot~d(kOrdCp`NV0k!2#1U{a$T-J)aR1 z1mFv|O4vSsi)IjZVMoPK;<^L?JCz*+U6yFmV)`>Dul%AN)lC4djNCUBmys(JbaU!O0J#;b+9w^#52Cqd}erv*c8*P&1Y8ca;&skL2HxKKm=N~2}|~J zi9!*)-m7F~HHuDjERN?N(IUJ`!^k^cQ&?-?ABFMVM61to%UxC=20I>V4^ZQoAByEx zSY_;O@NKP8A9nEpv^fsg*2FHW_3I&7+3rZ%!vPXbrzkKlR2@AObo5LhO`=n$*zi5> zPB3^KhljoNsgrcJ;_Jhl`|wzL1QfE8O#1&v-do4TwWRC9IDz02T!SV^Sb0fN)G zySrO(f@>fIceen+gL{DB4#6Ehi0qx&lbOt!JLleWe%~L^tGZTGMX!3Edad4xRN#^(a zy79f1B=>D^hXIMM4Vo|<=gvTRTp{s@7fXz9UFj+j_GT30OQZi|CTX-xA|vfcYwf5_-jy` zqn*BQw@qVuZ>{9veN`YV`?<|c%xSH_`32|9of~fYR05b2w<#aQCSOxCIF-;Tt^Qbn zMz#o-e)6VK(uaN=p8DqUP)0DC*GgE|VV3W-W+XpKffHp2V`bb5 zy&m3xK+~b-^C;|cl;|d-F=8HvPkfY zaJNhg@q!mKw_S3L#&17rJKCm!w4BBnWO0D#u2fsW$m^SPAQ-}O*r0-}m`GuqivOe& z7zMc^_=urxrtT4Nthk&Re!HHv9&R-`Z9CjxE^%-onC}!KI)swa+>{-6-QFF{8sVsQ zy{QjtE>*kyy@7Uh8N^=CT0mWr0q@&&Ehq-EYfTxBzr~X^c(yGMslG50dWx@&A zqL0$bIW!jhyT8(=$e=W>)`1M&J{Hp{80)X{+biXyN<_H#H<3J47LOs$rT* zsSLR@AG|`Dqs}jeSkt5J6h%ICi^{O^mRa(oc5t{tESh7K5+M;M{!FKqqvLtClUe0c z%P%*h<(l>ciE(cWPiGc8>0Gadg)2rH4J&mO>tW9HN@KE;E;i+9LbXu}u1~a;_mN(P zc3|^=@>SPI=&Nd+kZE({vtB_fp@7n_6sU9LU5q5G(hHoMLLdsuDRer0N`BkxEWdblVe=8XNXY;>d#NP#FBp&!NTGi9m05T$) z+#m*8_kUV}7pausHpT}?QXN)&zR z*PjXErmRJT8D*SfIME$m9KhP#!<3PHQM`md0jG|xHpO1sfvJzb%urqx>?jS_G97D* znqY~NeVdpM(T~2PZN$9$$hGFAC1%%v&Nu9XHDjPO##TvaR5-3OUokO@Cd(n-^e{C% zt+8BQvq5eM`?IDl?6O6)FU{^B`mD8{2%X zc<4-{PyJ_kQvqqN@6VBx9`Nua?_a(?%llV`hikt3U-b7sLdp*p_fM5dhU@!+xPRke zNl*!J2@3K2A*0#>ZGaAz-@NT+#GzPmh({9-m>$;_X~|qKuuCcd(blTv7t%OWI~{zPhlxEq86Gw1G*kQJQS@#2hDWVBp-&_!h5KKbb-JMDz5P%snw2h-WxSrDVQpTUvwSY#iiONkrBGF2!H z$Li$~DwoX5Iqf{-IuaF?<%V4lRthCIZ%2}XkCGRd3jC}g&0Iy)tHs6(p{4H8pZ(!^ zJ}>?>v)_d1Q8YfIFd<1>j$DK|_P#8Su?Ci>POyOeH;$mlHlMe3QJU5`r>0!-Sz$2)I zp*hOiFqAKdBls-LJ(bhmtJX>9wIQ069&3DyH8*AJ=G_}VAF*3O4+->RTwA+QL8{Vn zXrV1dg75snBG~ue$diA@A~!Q=9qE91q9%NPw(A1Dr(&NE{QjOrM!&O2AHcgC;O&*+ zk>M8L@}J?5e~Uf@GWarh0=WJy`uJzu;h8WC=w8T4aVK)|vigXIVjP4Pr!5FtSiT96 zNtS(YFy#>rsIsElTr%!DvYI7C4;X^~(p(5?@AuIoU88p2?SrNraPsAC_R<4)K;Lr*_`TY*{XMmVqSr-+?Jf_9WN+})vh|wy zU#+|LKO0en=!gM?-;j;Pr|=^j%gz=Ev@td}wlxLXn%dj`9FHaRmr$&S2u~Z}4<{BK zCg8~*qrreafw3|*=Cw7Y0RjQUn1~N4wdnv1-+!w;yzyWZrepaLh5G+!YQH0=Zo<}` z&z%wl&`xnjf_qnw;qL4rbQ;QZx1LTFWCH13wj(fP;-_F;qq6kOy22!BoLllCuZ>^E zh3j6_S?#vVxevvxnQa3k78~7L?yOw!v)ff?NJDZT_MpVqzb|M;RM&6W8YUiy~ zdS-vhm7{MuA+!FGw+L~LezY+JMd5W%@D&oCl*fPvfigUimH#QBFTrU&0mQ2<#~`MT zyDjO=P$?cg9Km+MF;a)#n(#?{aRdEK%>A6Jk5 zxPtjRE7<*0ay?yXg@1=7QX{33eOuH}W-^YLHoKzN8IdWg91~y5+Dbxf(5Qf>6W21- z^(>x^$DN`AiI>Qvqoh>c5pywqN?Buhj#(2gPgXIb^V!O~u-FipRHi$J94OSNtSomB zK^~=1A5QFX^+sh$Vj5wA5E5SMBa~VWE9{*3I_#1_K5P?Acqo}JZi_lfDR{A9dR(0=K}az+&lOt4 z0;ynkYti2*fMKn9(bGNfL+nz7Oxv(jl^| z-@Yxr^M6e+I>XPw==5w%%>NUE(HVYA3QhJgUv!BrNs2$aI25`!O_Pk*)?5#K;s3nt z6r`+~oTP{+1s8HUI%st)Uo{m2u`C>5%_si+%QGq^@CniO&upx_hc7vK1RG7nEcK$IRhU!pZyd6!jHsH-^=ySH2YzD>Y zOB?JnVszY~C{s^^)pirFQj(*E0HL58EKmDD0)jFeSX&bHI^bt2#cu6U0}P(Uenke` zC@}V1Pge)FEQ0uI*5az}7(2YQy2@4UR9fZX&)b^nk|z=0ZGt!cm6L>Qt&OJv7l%E3v=OI)P z4^+qW{Us7hNFnfhg!2>TeadmH(o;@Ltm)=lA>UAq*7b^<_8y+D7uAXKG(M?mGe6#f zDcL!yT8B)_#Sc-Cn~3r5w~INgo5>}Gv~yPT;N|v_AVUUNEb{PmiGVPTpNyUl zh?yi+>?3ilZCeg^6N~iq4}#J~Ph&08$4 z|7}fE06jB+m7evhO2GJY^FKb`?<}})W?PiyR&a-k&e15x$OEv3+ycuC6hi=n##1OcWq4D_TXBFsYfRlj^ z7Doyx%&4`Narql-YAf#b4;>-PUnm|QJG{;e4OA*;N4>7$CTEEtUVba{Y+t*9tA?!| z0aPSW14U+5;8G=X_ae0!S%gd-^>u;9laNvtT$NOzyP$aHmWEzvSIa=X$su}^2@Ny2 zg9;0_B~v;YHV|^OdDhk)EQ0`)jZ~W_sQU6<`7F3MK7d_6OuXabmv>gEAlqdp3@#EA zO6QQ_62_$`6%@=b(K_U8rA!|mFhb8_uuXoVa5X(iKcZ=q!FYyr)Ze?YePdcclax;F zV*xQH4;n+w6>#lwy|B-ZmutFTNBH5aDI+iLCT}g6WU4=m(QN4{?KBEDQJqqh<>M%4 zEVv@xpvP8AE+Yt2MxqTqsBB0tHm9CJe?XaiF+0Mcgd_rqZm8>lsh2Cv1B0MQuh{~x z>q5TowJ|#_0j0*GMmqEe#c|9MMmB+~8?SvKObDR-VN}1s;HXtIKBc{5zunC=l-=30 zLTr$0DL6d?AmLw^5=-Lz%H1?y$O!TI(7_CDpK)!kn67#Eke=?GHsXtSuQD4U-xy>K z;y9H1>6b~e$+rUPzl2GEl~&jM6NdSdQABD7?p7`L&dYabr4cSjOCvZ<+y9l&Y!Jey zd`u9L?|F5#_m`L?CwU5&7$a*lEgdeOJjoGdq1udmf5>?bn?B{e+Mqr|N|lqRWKBYU z+Wq*j(d0a)upIimR{CszcgVYD6U#+0q<*?duZD*1sVoG2m94Ck_xW__BZMY9*TkR{ zg8{W(`1$?FZ#WO1REVTrk9ZMv^bLtv@n!bI z0?+Zi!U9$UCSD<2D^O`~Jki0<;udfnVAEDKIXMg_12ys$&0^T-fru(cW<=)R8WO-F z0FQ};yOZNmIp(ui?8|80?$H}C?_W7*erJ@r+oX|TB?w=Q!1QSmPNN}1F1F9($u=@= zcC=8pr1f-TPolhvFsSdu!yH8$v^=xN>ie3IvyjLQR&>IT}7mP3j-YHLtxZP}`*2gKD&G zLDhv#@2X4qzsRukzhYPhRsh3K4EweDA0O{`3_IDSdDaF!=6EGQbbNebys}3RI-4Cp zu%ZfIzi#g<|B$5$U9tAlWEdk5kT zwgBMKIIVBB$MX6~T7mY(=s{|-x3zPmpsW!|tX6FW@&P5EPBvfPQ|9ru1A18` zY0u+;m>s{-h(?K)m!Q(nT%XWFVqtT(Y_A^6ZJl&;|BG(?#M)nEZley3x#)y<>xFF~l;YPkAR_U0J29S-$drajAI)q<+sydodvBlqv zWrJuLooAh|RM;`b&GP7YwSr?+beMH(WPb}J^LRC_n{8s(>8PLJYAk#*PK*eq2urr(4}SOCgS!@pAZ#6N036XBf@l&LuUjPUUvQX4t;U! zyTY?!7pd(r=q1rJ;)v3mbd!$}<>lJP*~CLnw`0{@jOP$rcvT8bRb{8M6BjLR!$FgqJu9*0&hYcI6MBN zHN2-AneVnK9D<^1!V8j7X4A8-gRl(MzuKmR{&uqRSTzyo9}!1)h;1FduDeQIzP;c!I9s6BOLrhid<2Pl=5t}| z4A(pTEW%Ejfw%P&2!S$uQ(%ivu>=p49X*s+u8`l=}A-{?gFAotIs+v+c^Nu5Jg_(+KY z9$Rmh>m!5`8UDmSzwG{n{m0|Q-3=3#dkUsZTIut~h%mG}s*D*C_4a*l>JrE;J5lu` zZfWQ)^UjKxL1Lzt)jam(S}^eg8Mn>6a4%7m&SQLfDK|BFlvP4mna_lHB zC&v0)CF%W)uH6rUo{A^gpI?1(QzCvvS?!&@Xf92K<7K#0M3@ezt23T(C$LN1HlsoL z%%7(axEFv386K&%u$O+^vWIu|dc`yHxt|jff|;1YKDs(kSX`r|{)*iOZ{U-30)NNyUz5iGOn(A^m?9kl0PfpS zUq~rqGaU=MrvRdFf(JIAo}G@_{jyh}v7+Ilp#?B7FtIYx1K5~Ze)9eNxar|oF3`g6 zhyC?usfP~0Mo<4OrRdjC;GdfRcPH~Zktpv&#~aEVs{K{W&QjTIOF52oShb$_qO7p* zaWgPIqpAYyczNdVj0hh2j#J|YWt_iKer28r79IIyTLEf*#ojD^UY4_C8&8;R}h(k=H!}P0uC5JK>|ImAs)S`W#Y3T&WC<2vB?#BS1ON zChU|Acv?U3#T`|pRb#~0R8+E~Al*w%oxQ0ikC?}coIxF-CIn6cn&nZS*@%k>u^>}t ze?Lvc+_T*pcLR7W9XVnpoMqwVWv(G6-K5zPv~Kmx{$QL%0NHg$GJ$uV2m!=)Hd{1Q zdg5ry=$4FZ3f66WAU-GXG#it|Hvnl}k^3#X1Br|`QRgxu*m+E>2w}tR7{aJg-CT!@ zpU<*_qVwEr%E%#fGEH?O_pZPBJ}L5H0ye+SnRvoRXc-dpCD6M(i*4|X^A7Xs!+~0; z>JnI?YxIybnvAN@DV!#SR_O+h(BNQ6vgMWEsH0k(Wnrve+FoO;_$%?4b3vjdIw2id zX{4!TCO1i}%6Z6^Y^e0^s(}@PNen1>mpD5mcq8m1zw2OCQ!f;!hPiy%=RFUVK53wZ;I{uQ};89+wv-KQF&sWDC=*e@qxV@9JB7x2zmq zgS^QRc39S?k(%>Z^7(W*=1En$#IFtv%TEQdcc(iU>;@mXvRcLVfPpa&{c}qDu9fm- z{8$EOQh$8tMbJ+;C z(w5VQ3@jmc-Z^-*m_EtauIjpuR-}E7Ois$;Bq?W7der|y1MR>>6#ec!bah!cV#G^X z;R>!6(AP5Ms){1qjIK`R$}u#yTLu(P19)gH8Lwz*YH1=4(L(w+tK6>4QsLe##y|M; zm;gQyboU&N^<66k`KyrR9rv^NB2Om>;QuDRaEJoU%zzfgdW3v>I{HBK`wJZleL{Jl zEl|fs&xlaW;$DQYvwz@2+poSdnm;os{K)PAj>__1`6~~!`rze%u;qW{`G-?;bPSAa zOka7P?rRplZ_WR)^ZuO}m#+Y_Op|*Waj88;9mjo6^-NKEpw3Sx_JzzVuFw^MBm3ZR zxs`U7k&qxMXZ#wJIRPi}km$8Z(Q(8ac1l5}TIf?FJf#6vxi4WPbp9p2J?@*1CA-+J zsTda(sjRYyxoXZ)UL`EWxubMfRb()!oND`WozEBIHMZ&T!Dg()b}Zn!lUTyf4w$ti z$f$hMhMbPz5%qH90E-vT$x)!Ewwf??Uze(~xHs<|5z6ta`R>Qm8>1iSrlu#d`DE7E z(S(k5K6a)3(hWPq)v;?iCtu*QfbHK7F%FtYk1fa}xbm zg5{)JA2saY^ypuP2d;j1{{;iQ1ODX$zPVBSH>f(|PtzXdP_9m)LOk8$BL#>&bmK$Z zKd}r>0HhB%jiJrg7oa@=$_Ii5sQ>NN(#8+~>HV$O`&+N~_g?RBy}ywD2=<-%7F{iP z%EJO!_{F7hS@6RR>PftNWKa-^TEPJ^4V5Mxu0xS)ayM@UqouQCg&YrUUCMD`gwUp0iI7rca zvy=YwzErWwFJNzOtiX3eh~5;V28gvY*fs}p*o9&Ukx4#@^1U^5ACS^BygUL&iFbku zFEiYY;Au{m0XwOHp*@leTzJ+O=LXte$n4URW$SYGs;w$16RrFeLpuCE@h1aUza}9J zC@#+4I!DG=y<3Akbll59%U)un-3e8xNr_UWoaf>o$@+8YY!budleG`hpW40jr+m*I z+~2jWz2{upV?^_4Z*>bHj^;W*|BgtG{^mRt9S4Bz8zAZV41pGU#yW%oI`_hqj)e}P zKJZWHx}LEmA%(PqP9Qs`0Mt8;&TO#Gq4+WvliLiYlm zosQk#jqzjRK-(W_Y`{^WgaoMh1O&b*hX6VN3q8Y+niF(ioAlqkkN>~?R(?l<6~tXK zO9}jOK_b4qr+64gzP2Rza!0R2+M{dlcq1XL0=0WU@~dKjSj6ZU?*+^Z1e4$)xY;b< zNVvSys|gWIoz{!;Gx$t_SkJ#~5pjk_9%H;0g^;aP~Rkv)avDbDOmu zq>j~HFrPSKZRUC74~td%b_&Lx->PG4zYn3C@huARYq(m}*lLNLFGG>*c(AWAcOBSV@ylmQa}nzbfhxwr)^5e)sD0-riBo= zfleZU&38eoOs!b_dTL;rIii^C{+6Fo8+lSw+5&4`bRKOwKK8UKaG9GWjf=7;L~7!_XusAvBm(+~<+nw#5O{H(eP@O{hS#|B`c zzyARM7}&msZ2r{z?;iel3^9bxCSN9BQQxWR)1e_>%q{@*lIS{&Z=7XLn8?)+d#m|n z85Z|!A%RPx_*7$usEV&(pw7b~z4?NhnK6T-?UW8#$S#IU#jEooII(xNz+|jyhA$GS zZDN8y_8gSwhoYe5V2V4P12YNHRa;}=CgRy+ROI`Q2Ns@;A z5H+kR(-RmZzaf)eb|?@QkrfXW8J^H>!`h&Coy`hLrcibve*`4Ypn<pfM$P$TPLPot+y3fTrI=y;^BsYZuibdP&k+--SPx)#I0ygh$M^5QTuJt9!NNMB zvaT49?#HnF3;J8Qd#YxS>VvgRdd1_?TwXzU&IsA~SR=5H^jqdtWDaMbn+=nlmLq-B4+#G5@T;bdKm&mX<~I{?ur}I zZ3$2FLtbNoj1l|ECJn4Wb&1MLT_d-eo9qz3j6&V!=P-ecUraz7k|~urZ$VfFpPC&= zzpJ(rMlp-pV;tW}idq+Jj-<007Xv#5TRkS&cAJh@%D>wQxkwbbV^RZq2hkUz9%xM& z)s$1|0^gK$qVg03nh1kOoNX9V>~UT-i}xFiuy+ia-V|WJ+%J-H!2OYw8YPa*8<^*&s*mPcg^VKLfEtIjkk(DygiDe?W7~YZ@d&{AOgx0LaJ=)gd=0q*AY!HH%%(?fcx)i>roH zpR(xXed5oezE{9y+gxk8ae9;?LTTlbi}IB>+wO|;UjzcGz0VSauCY`&o?EVn9489h z;vJkPWC!7~;J$qI*?}}k_B=!JPB7Bp=?MLY_5!Gu>#LTdBKK%rFm=jNrtFv`0ex+a z@=N+V4u}#dUXzQi<^88OrhTi3p{($Gu-CVUuhRi^b7u0ui%{=o;zisS;Pp{B!O(wV z@V6lQ6Qm}r>SW>bp=yURE{eWbn9Glta_fJ!2Xc-(a?LCR*9XEqQZylyjczXGs*aPOb-K!V|jW_qSj ze!Kk~a@tH|ZD@bg#2^iw!rx`X2c!@`55`!Tf7D10vsp2zMUbyvteLRh_~l-$mk@TFJy!luFRcP5B-ScixK;;+&I=v zdPQ{FUCu|NAqZ*-{T7)OpLFrgbA;G_TKE7Xxv(>HH>SX!*>k9iN9@a)(0PHSOI`>h zo*d=;uo_XW&@c9}5pe5@zz})0JAxKP0A2Ec!IparHr!+IyMY-TLa_C(DD?OV1hSHU z1o5I`DOni10PQRZ6@hw24~ZfTje!rgT)v<8pofKTZ~l+g|BpWgj*9jD#vf(5rGa*i zmNuq8oIk8|0DAg|BdK3APtdb{1?jiu|MU6%4#Ue=?%6i=@4xh*1)i9KN-tXQLf4y< zYj~ciQ&*^U$!Qhj(C6v|R$Cwji~ztA&L@pkGBMdSO!S>UfT|X9(uuRWjX;b@P;3xt zaX@GFOWDpI70YxfkE`Xy2VWi)7>zv*P$eIPA#W_Su<^wO*era`+8kN5v&U+Bmgb7C z2!S&xz*eM0(Yb`(aNN35%qqsv@8F-#CNz?hc8C%tckZ@A?RiqDwf!W$jC#1fKZ@T` zlC&q1)pGVr|5XHjf-3j8w)7e##jcn$szkl$EbWEOC|mC>!4#v-NhR+f9ccT`JTf(g z20^XtuqIZX@jNsGMXzk!MV?}xVt}kr{)O1T$&Y=nd`7 z!?8H?sS}r%Ch@(@wfa0Z;Pbj<24!nHp8i!BTod+8cpK9h^7=rP<&GvUneON9D6; z)bSXf*%TW^M;*vhlc=F`dv@4H3TD%j9+QJHQI_$>tzT@UCINz@o!3s{_G-EQurxzAfJJOv5ooHb^TKW%1`eS z%GvVQDBg)T1j^+e~XCLiJ3{j=MHka6;_2wNKYKbtax^)FwnhT<>lHCK5LSb~K) zKUj;z0X~qz_jFG4eHoaCp$V7e!tVX0;5>luUwK47Qk%h{{^Ak+yb9<549q{Rg0Id0 z#1Oyp>vfiDy_ni^J!YEO%EV|eLN421 z-4G%JiNsQa!lx}kWlEG1wR*8RN@~F$P60CspCn7>)t4;)$9>0?o+CLg_Q<4q-o15A zn!aS67gRxCJrC=i7F~jWLXL;u?dwlkQ~yqhuOFOPf;uWZbS=2VplkE)`6g%K%t%H1 zqESllxeJK${IOD;*;T#%oNnmCV@LXJ-F~v9;zLJ$tE`V;zmR%^RggV>~y659s zjS46jDTykS297#JbkH=UVyT#idq>Z$!>a1ppv4@o_i3UdA;YO@9bNYYT9_J=rY>yr zs1Aoz_9&#uv|dFT!O+&8e}dYiN#d5v8z%06&0`fctGKvxF9=XsuAlICa;z8F67@Wt zYJO^t-!jZ>_TuHiUJjNb_6hii!`fn46KBP!sKiqDxo7lS2jLWcAa@Ra8#K6@Fm-Lh zQO$U{648GBCrOZmE3`OrhL#Nh5#f?x96Wu%bi22 z4S%JbrM4R8!VyoCod^}=0_Bm(r-Taievj9`g~wO7U4@DilCCuSO5s*5ZVCOICwAsv=3_?3n7lvPz?MiuWaC zo_9kuMh$vn&;0sP?uUiKkIOG6YPjd?kG2_kr?R|HoOo!*-&{{;jcGz4U=-c*eOWEH zxfJwa;NPHrai$!m%Tv!^ngaLIg9b?UQb7i!+{q&oK9M@S7B3>Jqx4352#^!e4WXOg zvCA~?lCX=wsu@iiWA!FK#WK$w70=_tBhfNV!)>`oq?>D`rt*|gDI;vQk5uLpp(@o= zk)RgegS@T96$gVw8*1b0y$WL@a`$09%vX%UVv311H(~EAA8H5=h}lT)L1fQ!sm=W2 zBz$?zLc1E`ceHQ|F`a3YK})g(69+XO*Skm(zwLG!1KF@^yGcE4&o;SEGCL)$CGaY3 z2#u{p$x1X)g|0GXPy97_Jb*wOY7gh>t+)15Y!O}mH~mL3Ye0V0va)MtKMo>`kI*<^Nyx}I%qdGty?sQIX-wN z>j3NG?t+o26wjYX2Q#OQ91aQaSc?!IPDPvP!dQWf59=VQ!Wl$^F6TYZPU8z`gcvf7 z?|$aRc+;{El|A>O)1Qm`)omK(=jvJ*BP?7@fd|Q0_MS>5@9Bo|JDs}8K(OJCB~t%Y zJQn;{xbDxCygzf@cOlZ)!tiHCz1K$>|I|dkHUC4S{7zJ@^y_E9pfQa#Gu4sL*v=kw zj+I=E^-Anh(ia52GSpv!T7JnQc1oM<=Z8;ysGSOs?)URwq8h|cyJaq5aAXpkVv5J+ zV%~5;m>L(!G%*gHzHVSIc2*ldp0I96ihOFCR1;(u2#2p#mqvYApz!=tg9CSr4xTD} zY5^u#PG9g^hr2h$jeTs+&?J94f0H{zh5$mj%_;naOS^?fcH|QopIjOm3qM4*mC9S3 zz+LJ~*S#><<$Qx+tUkVrIYDNf!6irGZuisUXm945S;hk!k0ZDzO_k`sA{A(Yk@b|B z_ZC^am8CASNV0Yv-M`50^)HC3!7AlXT;9IFnV3#aW_+JgNslI#m$R_boY#CVFdN14 zv67xfRtcL)+CjjYa6iUT8r_N}u)Ph>{8L{Q`52Y*u)G4h;D~K^2M#1qO*cAak1w2V zcAarcm1rE)Wm3OZpKYLLw`5lWTr@8u5!CAwFq^p;s46PsBhd{!P{CVOrGe!!n;Je@ zg{d@C1cCjGE){5RUh^VeZO(iIB;z<)w7H!nr=IzD{gj*d{|Wcg)of3>{+A1wC=V<*r?&sfLoZ$QQTHEi$? zP(3vNL!xEn(kD8K=(Tm-s3H3Ud9N3}3dRT6{MD{ig9Pn(>4-;~#x?P;7`QJVF ze0lqkOeWjFo2f*wUJ)M`Ko3k^3Bj4}mpgUL2Zd10-V&a4e8knnxJHuG*jN80Q2nr@z9>9~Kp1F+zk|IQtAC^qLyab-a?&%0BX2E#Nael>BXW;aQom}= z1X!AyG_WeR7-xa9^vOXBNE$RdhJF=9)l;HG*f@>^xBUlD9o>U!{~lD6|HzNw{rYbg z`gfbzDz5b~xDS*cccC&Gi4qmO@1+W}!#(!=DO{ zO8@6=e;ncbi}e%ur)`Chno#724}=Xs2LSwV-m?5$hwOjw)PINjaX9vlXBW~-C(T$1 zS`k4CWduBZgXx5*=9KK+i0+(crVgxn)6Cj$lQmz0c$L$tdY%SekO~B>8{^0)MJ`$| zPf^25Tb_1{O;;abD;GbnwnN(!^)hEB_>R!yg-bi;LboyR<5LFfIxmQ1<$U@zGB+wjekSZ!S zcYWR;Q_RgkI-A`*ziN+>rXC)=mSI6;yUaA4bUOK?_pp#KeY{oRJQ#wQfPb}_ZG--n z4qsu;%pBAF|;tvMqR=Y!7EHR1**%sj zR8v1YMGDaGvC11Ms-d)U-r}6mBTc_CssZd+UD=1!m}?uB<9F9>PQA4R3pIq7B2%%R zA-rxAmklqYsDHry;yv!??s4Dw4{`tMzY{$40Khl!Q2u$_|1sSE$IbY+$HsTtz^_kV zU4xZbs;7%ir#dfX)qv|LW44P_Pxf*#(F6;eWf~{XhhX2J5~fs&Inq-q-_-4d%@JSP zd?MFL*gIA8+p)l^3#R(yr#^0XWvbN~{02!rSXk+})*g4wb49UO;#|o_1q|yP!&-G4 zp90#hGgY+NtnxUg^hlq@Il6U6SkrUSTtQN|WPsqYUITmT)wMIoYaP2mG9O;OqjDP) zEcnFUF$DX5maEX#4&yR4MB&O4#AWkCBZ%f>0fLjexK=f8D-A5P9%#q1+9Qo*-`; z;Mw7Bl&$+V^J4+DI{B|qj;wk~Dg$mAo5+zw;N#CW<^UP1xkwRXuB!p_KI83JsXglf zqe<#YdPo47+#1#J2WpErLh)$Oo!SsXSGpxbny@%Z_scLYX}yE_`1ur4@O_;F$b^rnY$bP$?M)15$@0SB2{hmFPQB#Ni$Cj zAZa|=(DR>N$%aPw8$VRI2k*H@dFMUKi~b?Xeg7@YV1F$Yd5;-n5lcZGeSK#dJxlZN zK%oQBegg`Hh$Z3I&i`{{|BsmE@6g<0t^4TUQkC%xrw23p%uDRWCb2JSZYQAtD2Ly{ zn!i{&`PQi)j&w%ltkvr-deAaRZfNPf<4YM@RRHmN0hY4qk{9&#(GzHKgX)Rk(Ud~n~(tmY7O6VLg_?bTRlkiA>&Zy{nigx%=jk3bBFyTgsmnZuAVYevg) zwJTXK!NNX{&Iv=$!*XwHxOKZ-l|EOECz`)A0+?2+tP1>PZwY@>RFxyI2{uxNub1?hbn>S^X#ix_= zsC^1Z9wEZR370iA&yfovOUb=1HqzBLS<(wu7R)OAF;cmvNo1U(m?pF!w!M4{lEA2| zkdCJ!yC7_NcWp>B^3!+H3XD(^RX)5zVTZ|S61;&zXK71bq0ioB-I&rpqVhny2HQ#> zxPvyrm?e&6rFID)Ry;6X)?(;&;c|st?)B7STV1lR?{vUq_(=7IR|%Mp@UsYN8iR+pOC^92qe_Ax3K|Q*b&|@ zejA{zEuoGb;kPibd*$>&S=D)f3+?w_${zs?kf<l5aKA)5QXxlA_QfZ*#26-eCo+Lw2!gT`8Yrht%p6r(4*T`tQ zdgr~bgI-`H?h1h?cyI>b2Zc2sM)|!0GERX=y4TQQs8PDWVv+!|S*l#}LEXtFE)XJA z4{mT6swg=yIQXiG=EhpN-lV4!2*~y{G@7|2yxtoKBe+VDD-N}4B2Tw&H7#_HG}xHb zV23Xqe;+>HotoNaJ~Y%Kx3YZR&dOXok!QbF;wPXH6AfnqJM8@?Cujx5>~}sKNi4LV<}&m**XEjvul4=$IP-d-=KbzW zH%zfPJF_bIuR>wCwI0cL>2{1kTDNrQubgN4Zg8U{zr`P8mZG&j4W~Hu%|{*4X^UzQ zZDoAL7bYP&Ym9Oy8=FGtt7^OJmU(z^Gj}F7D)1shS+AFiYn4e^brYeNu>ZM43?<@^ z^nTwG^`rd3m5%^W_b*_ea6i#w9ZYWu{_Ln3yJ_*R;(>Y$6cddmz**rzX@K{H z*DvqM^e)fwF8N=E9G{;U?XNoq*S9!WW&k6A{(E7AhghjU17LB#=M%KDG&9z7{>$Wl zl_=jU$kS>*nqnFkfIgUL)~3mZ^1`ow6;pT$TY(JYOxh2Yi3`c>S$KNTrJ3b`HUtY7OQvtf zYHgfMadz2OH2RX?1&+%|gWOJ=q;t|CQhN<4J6 z=H@(jo!5zp!n4*u!N9*M1nXvg7~o9X>4W7C6YN&5=nzyq-*(i$XfaDS5mTI)u}^AZ z`#M;iodz`szoj)gmJw%}ye1UilK*aflOoDY_IRd3wG;9qvdyPCAbs>S)ZN) zdAzrZ6Gx{2gQ)N_=skXod7{+kfTxaA!V=Err(wJ7p4!Mx$D7H;7nggq8+B%*nuiw5QUuG5x%! zer^8m`-gtFtCoQDS+P9#QWIx4bBcA(_QWPQWg2gq?SmJz;U+7Ol&{z0pm<^Vroucn z_h?QZPU-Y?{g9a0OLI~8Lp9~1x7lIKsyn@jVg@~y>McR&B$sx8KZ)fsa)l!|VLTI& zX~m;yD;oVXzi5RCgwn{6kmbN|sL`fKgr&qxoB)KGB-n<>IpK*k(#sL`y-a)7%znIIUq{o{rSmEXJM{e*z6k5$!{80N%f=Q<_5DO+_~kKEh%^Tc?JG{zCB z7Vasuu7hX29i^Md#>GdlX-A3~gV&p04QGGjruhJ$Gwyj$XL;q38)aGzIAV3BcG96Q z%egjx%6^WZ%tBjb0@Jiw8m_f|rjb>n(LjZtHXi#@%!@WY1y1rN?+-&+E@VagTz=%JRFboI<#X>bEo{|q zxq3>q33`dg>2A$b<6q$LW!Gt$WLa!>H|d1FM=c+sKwY5X(S4&(*jdk5MmhQjb|G)b zJW!wYJsL7*3B_>G`V)_$EPi`Td)DJpuRbFZxT8yOAIhQo465)8EB7DA^>HiUZ1Z`$ zON@(KNId=E!hC?hionIfKwDX4m$&n{H;=I4jloXUN{S@7T{$Vvt$ZtK4jm? ze%T_+-n1XVT1M-MFV@}&LsQW4RDN}TA=x@1X7VSL)x)1P&oW2V_1gm#uGouAigq{@hHJ))bdl6u({YcRn6SBm`-9khLx7+XB3;bIbx{ z1+w0p#lLeMeQR*CuxtK5jQl&o85nbag-Tpj9Q+;!WKrF9Pn^XrarzQX>rLfmp&NK~ zSof;~HM`F)Z7vCi_5}=LQ(1B8SUkC#lrabh51;f-Q70@N#JgeMbw^RoC-*Wam|$$kBTUH~#CKf_G(n2guW%a& z+(RBR5P%a~wPBW{mDN)obH(PqlbzXrF}fgGzu)3_qG36Nud)?|{aWUAiH+F$J>j9{ z;Nn-q7TGOwQ828Uc|q$j>^X+oIP!a|d1sIWbqsd3j~Es_5N8QcKP-@uz_`FbRt@Z? zUUW1mAO_Q3jy7$t&J=b_nqw@@?w#OAeDtuLgn0Kc1do;hic-#HO)8wAk2h@`_0^fv zD7cVjlv{hmknB(?PG{m;xm>saZtQrq;ky62FH`}fcU1d~PabNr0@4`r`Q*sDy*FXM z%av9d>hlU{iS_-bI6IOBxOYK-Cjh@gfL|5NwO;UPz z(a44zCvWjB%brb~#ClcO9SYW>xCW&s7SNDMipY3M@f?eL)*?MoaxF{5T zOG}x(B88{CnLVDOm_%xxT_U9h&1|g@*oE+j3EvNGK+)-9TN7sxee%<;Vko1*m7s_N zbb{!_6Fzxx9{fTQ33-=copnEQvXILJufVDJ@^@yUQZ=(594I$qeN+n?d<8P|`Q+@o z)O&Kq-*C|kPQYa4NlkBM5Bl43#HaBtCXuabJV%;|<=p$Kp;?>SZ*C<@4bE<)uNDT$ z<22PQGp%~{X~B1jafE9^mk}|=OTcROf;#l&wd9Av1Ng&WT}%FpyF)rEJG`IHYozr4 zYEUWtESE(9Lbno_TiEGlof;b$|21IQnpEOO?Xb1CF#$PTH*fq1H^|{&;b3J0aB%$* z5(&7;pa^9Dv&!gg^FMLR-*LpNB+Dn;r|0{5>`Oj!GfUmdlU@yI{SdmfqVzoq7B#O3 zb!gLE(Fx2o)GO;rMb;uvHx{*uAmf;i(bo(oS?su`p^)sJ@hf?w!Y&#?Yj3qD*mTnQ zcht=&Rdw>cDCd;Xezh;lfkOGLy*tq5>r=&}>dijpQAUj@cLez)b7hE9j+C8?Gpqn4 zPLhE*PM=9X#`T`2B>}ce(<1?sk+CD8Azec@R9hGUQasJU&-VAItl}N9;`1GXW=C3!A18 zY8zpz&?3dJ7DkB2@i_PJqia5uIQ4BCgBaJ{@-cx%gKODtZsZelu zSxG+zo#_Ub`}*dbXMaqM=@A}IJkN#X)QD>mkfixOlAca#xlx!VC8_h&;@4;LMdYQK zx*Ig%US@Rpo8gT!=r3>?Q!_CsB|i7AOl3duc^U2aShME6{c+hRO0;rjteGpuGzmM& zHj%{_;Il_QW3Oh@v{>SJuhrqP=j`HsMDvzGl;wB2S1PV)778b+|?goAMDS z7*}{8_P(D659KCE4mK8^;0-~tK11zmmBMQ0elVUT+z_2aWRw&?oe1L!G|S?I;q?s@ zH{hmtc~2}Kd!6t!4)EfRBX$9PJHIeV!2gNN1-y`7RZoaqo zL%A$veJ;ea`NB|{8dNpe`|6Rr>%jTT9+v%0E#o8(7QCH87MICYv4#$Gdfz5~3v18x zvGR-VcljH}be<#2T*UtOuV_G(=Q!9sOm>0m^;c&FlC8!pFHWce^JqklNvpar(a_(b zVKH#yz$EtmBw8VwU687ld(MbH#*$R8 zM;SvtnSs76GkHPkAm3!RYcwFS$fP)n3Uv#SH5P=R**&d_F<;p&k3vGNi#%5wwKL&o zyD+Li34LfKe=H|$5;bx)iby3ab*U8CCsOGPH8kvPEWLKHn730c*FjITSyv6p>uK3f zIV!bJg9HY$A-v+MaY8 zv9Dfm65ABW zjS=L{pjQ{PPz4zP(wc}f_!rYtGTk{^jlmTTbclYwj( z2HEtV3hf{A6?D^5L|)RciVEf6@_pFmt+Fr5Z<3MK#gRIyY3YxQ>&?tAv*&1G^JTLv ziHPfH#QnJAta3~V9$8ENUe;5sFY_!P>jfyt+FAj_8-Xt~@n$>P=$aVxu7#uIEjb`U zfnEQAlRZ*_%loTEAoo4c2N4tZ)@!WthqqW%_*$z`X8oZ`}Szn=@(R<57?Jp!CL|@i~XF};wzGjkL z*7uiKR(^)$CuwUnZ#?qhm?0n4pC9RdMe<|=Rxp~|3tmiLmq@r}=}`+qW)j`AB(udZ znnbQ_m`Qn5l;GqZIrYJI1gY?rH8tlbJy>5Fn9Y^f0lpaH&aWAbjf%X8y2_jbKb z%-wXub7ZR}RdbvY$QkRcfOtFSKJy@d-2YKvZuFk4&r>FG%8CbyXGUoe3oG;YT7G%B zOK7%3vGlSZY4>xIs<`xvBrtg4vRcgGU|Lw#SC$)&P0e786$J=m$NT%J;q4BlG665e zJY1J5t*vYz>7KB1i+4X+Yf`r=y}(G?QR!n`qqJ&DFgl-8F*AKA5YRZpPS!nOb~!lH zrBeDPCVXp8MxnsUOiTtb|FCIry2yG6DQ)>Lvp# z2@fyTXt2;AFGH~FfB`dB^QT!go5jFS(C`mhX{YQ5#|#xg#2@041Ax=D^{*r!3F_Ts z4MPF=Lm^z_?BKgwyUSY?N?uYB|DRR>kx~Pqf13d)SR^mWuI_v`g<^9OEjsx^H(1N}p(9kg%85s1;@TURDCr#oAUdyFpNuKC~bkiWz9)@k&iQTa^pRPmC?`B3aa5%pAG6iu9IeBAw`eLLgz7#fX%<(l)EwYj)S;|C#-5O|S z-Ms8jqh)~bEyh32np0DOO!k14x=KCg45#eTc%z7B^rW10)YDMdU5rj7r zcHSh#_dJhPtjYCW-`^Pb)Twya)hD+O4LT^(m7X%^=I{WnvO5P``@uFU!(Rdiip19e_by{kxSrSME`=#?5Es` zzwB`D*4V}ZVEFxgqJAL~21ZbHnI_)UdJ4S0;J-qqO^k=?Z=ZSV)+idYSJ1Y5uuGQG zGCr;YbMi@K2Vj*`TJmbYGW<*s(ZNDsn@PxTsJY|e@* zR&_HWT>;(+Mspq()+&&_U+C)j611~=C!xl{Y5UqoDnsqSJ#TN4+O{vx$|odwG5A~M}q|ePh5}UN)s`POk%P%KzY9{RD@QfyYOxW!tQNa#fbfV2q_UYl? zfIm5-yXrIBZZC3>zwJ#TK}fr6>b>!4sr{pT8IOKW81uc%4ko#bfvth{UxM7fpL4!D zO!Yk)6BF}W+8EFuiNKkTdk3Ek zQ-h5J+vnry1D-lJVUj!_lott#Cf{TtI7o!Afvy*mcgZDfEjf@!@KP*4hDH`wkg)qo zE1+@?HN`jyB9ggxHpE*6Ok=n1kAN8ii#LG(1CYe@H^QkE8dCdYK&+TFGi2W1t)>Re<4FH?L+bi$6?uqSky|`e6%m_6D%EoE{K`S8yKQS3 z?L9%yglkl7=BVC&bX|FZ6a_CmZ{(qAo&-Vmv{hMS%ZvSWzw#>|zsqUMvCrrqsTNN+ zzZ9I=CkLt^7Y?)FDLHFkS)qQ|(esUT5)J4MO1YBDVnkkZ35b`kPlAo0#Y~UHj}oSl z7W%ZXK_SLHmrMSx8S>x;b!^wD16-pH?-q3sknjHrJINopP4*8W!$g*{u{O25evvBL z{1EkyiTl&_KS&ICm&uMD$bS7|1>OV!vfMV=*jZS(HUIZ+^gB?MU2!#RnLtRd=G867 zd=ZLv`?AvNb_vn?i879e{A4D`-u!Y>5Pp0DbmhX{xLj>Uty-5#(-OgwcxYS;dE z2yQOzpDUj`Hx(iV;_9Gn+blmzMAv)Fm#_UGKoGOgOHX@-(@Dslk+Hyh!>hVLZq=ON4oj+$v4sKogt0+HUf`()-7RDIL@F zN4fqU69d9|6yT0rY7wYSOs09HP@FRvh-0{9OVP=0Y&L;X5Tva4HrT|nV{MOobpu7a z=tiwDu+|Ks%Ftr60u^8ECE18)habMOQaD5B!N!*8eoGRd#VCyNQPETwlb`HaLU^gX zXJ_?!@w<8&=HzGAOGGOpgbXBND;I6Cxf$p0=u{knvsI=zUNag~tvRvz=*H+>;&H`LF*{?~36?knh{wMGKJEvl=#-@!^ zseo)oePdY`;@X$#SI=~!>$%bVCo7efc$dMXEQV&5VMNhWOR=ah%E{k@Jr?aLX zlQnHMklOt^x}+bv-h`)5+wF3{yo$4wbHP}HUP66Mw&|49bAn^jx3l4J+%!Gu{orID zg37R^bkboyBD9OtXR3AEG5{7S)vAw^=DO6WyayyK)S16Qi1i+CPr=LKV@H8P9Rj$6 zbgI#lGAL>RH6BCSLXR3iR`;(W6r$B2$qu=1$ z6o6}|jp=Zk-jdnJg_Y_71`XG^(#8AwMhEMi5eyXxX9=Jq<%Y{Ay?Dsj!SGeVm`aqV@9RR4q5}Ap|zOqS7v7 zE2T$hFz=VTmN@vNrjw3m6#6i3k?8VDqi(*e=b2J%JHn!VB;JxjgzN5buSz4F%CUO7 z-kb3G!xnGQ_-o;9pjuBW3WST`(e>3mym*L~1C85?MB#H3|1pC=scl|dxILD#jwEtR zZ^(lzH9Ikzn@57s>dRY?jF`8yB`-_VUX&TK8M0%_V)3X2GzCY+74;p#QmMYdQOA(+ zckRcT#`ULW)FCBttGFDu#lcAom}2L?Qr2-I#OcLU8RP=Iir2HCaT8wE=;cV`MX_yBTS*a@n#Dmc`#Wf+ z&%tWJJ@(3+j3S%9z#=W}5?>VD1glY6>pF#QawCXjJIvBrl`$QuL~pF)Ps84&7Q3kS)#MoKQGhrx-zU>)<0XP{pI3la0js2)t4BOz33>#cT94ZS z3V}2y*(A~}eW?gB2dKwBqJf-7N)hgbwioV?Zff6jOIQWk>dYL1$533z14_J?X^b{M z8uR5e4zL284HGZ9Z+R>39ir6rrQIz#?n3BZSt#X!I6&d6-jV+u2Ua7lt619I- zZhT3aHmUvLvWNuEI6uN!t(=&bR-Y+^>V0V?NuRL<>2q5jz6Gh-B$emfE^7oUFL45$ zleL&%;A01!ng<=H7MC2b6_+#=L0;Gd^Q(F~L#11O5z+x;d&!jQl(`-XS^D4AZ;f67c{TSG?OX|F^Q$W1;e<_LVH0Eo@ZFop zBB3MfvZ_+l(23FFeTobiYWMOP+|LYX9gwglE&5`h)J(?g(N>6UlsldnvY*v-7gRYcTmbg1F@y3DWN&`s1GsY!e6RnDiSzvp(x390 z0C@mhw;h1AMszo>Ku*%1hqzYBBy8+S4Q@lh+(E{qP7WYa8*3{!;PryIHI?}O82o!x z)7!k>q>A?Dj}7eI{!xa&8+DKE?gSI?CUNig;J2G&yIg++zy1Hym;DF1*@_>!dn(Tu zr=u`xPwAG$@n3>(;LGr1LCT)#(~wRFgqfeI_NC$Js?i%Sz??+M@Rpn~>tVm3850gwSm0I=5&j{*rn0EHF3K1L8+7WKrkd&t*f zTndlD1D^>%^~WZxm5r$l)3uIeeiQ8QZTHpL;oG&Fk^U4FwK%a~KNVT8)iX&)hq(Ir z?yOhW|C9{Q3=9B*0GN;=;Zf^ra(O%ySt`EZ2vmwCWpI8V%HKm2NHJXY&XXNx@U3}k z4Dzg%ln4<@sR#rREQ4Q)n}Yih0XBw)Mb_?wMh%fNL#o}|mvoEw=nXvVMive`){%K+ zN*Rl%g6Zd(&~B)@^_r@iuECgl2Sy=+9%HgvOfpE67i$;;UsqY)g#SF z3W|67PhuxyQUcsJ9^rFE_MWU82i4`-oqud?ntA&GtgfHYq41@-T_OoLUyT@S#(R{r z2Qocmi*yFjEaV3My&)vlk)C=uq)K8VwhHRotAwj>+&(>;Lg}g%kMCgEOvAnJ0mkVr z%<8(#x^jp{;1j~oc5?h#WM#cQ#4t<`Om?w%e$7dYMVN=!&f5GnqLT#N$g9!&iNizZ zO+uE&k?IdFFwxxtKkBNUuw}!6AEHsg;L6PG6SrIV=ec^3k7+uzlpucR>A0u^2{nAQZkd* z=rHYzGfQG@wM$D`T3huRkgU%y@u4P4b=P=xkw)3R(d$MzB8?cC-54BN63q&4yiC8k9@?3N zh%H;=2UR`~GZp)w5iNEBD`O`Nl z39`Ax?>BUF12}KN3;2USf9mj0u*(5pyTvZ!AD{Ra_>$%K%E5o{qyGb{$F6?=6%t!? zz3f8>C%WP8XaI+@m$*8jOq7QzFORhzHbjSF(GV50*DI;Umx@M&^ki_JX&h6Cmm}1@ zkAMJLszV)}{KkgDy10*44A~#%MZ@y=WTj$>6nCf>-{~{8lKr~@=-7Jf>Pl+oR5j(0 z<`>}kXKmXN)SC{rqmicqc`QM1Q;^*oAZct((Ihq-` zID+nI>CeJ5zqTAn#mt?}Zw`ok=NLpx=0Eu9$C3WYGNA;J-!7ATw;%Xpk^JD>Wc@wU z{$Kk-zoXWgb{dBB*(t4gSC4yHE+&4j1zJ2S4vT2g*z(PQc3iB6Yln6wZq+5A{KANd zXnjUOkvFB5EFBcD8HDH87B37kRvc=`6VXNS^m-ad)U6PpACdQS$nkgy%hcMGX(a}?pOtld&+FskMFLevoxW73StiM^);L*3 ztxO9J6f&8brffZ-pV}dl)=och-||so_fE2mijSvx9rt3pOsFHf>(qBh=SXvI&@s43 zzzR|2RcqWJK8*bak~Ww5OQ?4(R)bn6pUpDnsIa9%bGJ%PQ!H7et(TyfsOY#Z zoKeQU*c4M*?89M0*tHN-+P)7P4(Z`P|a93(*(YR73Rj2Ykz0r4E2a4b2WdGQN~g9dFH$gm@r?esN!|J7Xh&Mh$f zF@bSg%VxWx(nl3XFSe{2c0=BzzqsPwcxW(&P~4*}r|$vnLhar@1*^FsBJ!H$u8n61>6?zj?)gkv6v5` zfDGFQrqqlCq0C5LAi~{q8NEHw**5;*D%(A4rP?#Cyf_%%A!KATZPmT7)cU-+*0#em zG>?5eKdt&}dDkxR>}k{CIb2`t$T?l&zl)Z%DKG%orln61-lvF$!EmHg^yL>nF_<|R zz~tHzoIhPsm((iWKsqtpRDz2@N)AVZ|Kc$jyr(L#;B6`jux= zXg1;GYz68DFgklp19VsqA<=g%hE-NZnmP0nd|wzCS!v;VFA60PKSS;!qqPmadPi+# zr4L0VujcKw+nyk`@SJGgHVRrVv@rdk>(lm#knm$eE~1Apy^xYhr1%#eXox6=70zny zdM<4O(%>rmDO8Zol$u0!vtiqA>kYNMg3WTY!agu%7Ed~dPoRmsHbjC~3n%_($%=a1 zUOmZ`ha@7Lvz!HLB?t%td>DVlON_mkLl1pD++AC!#c3>+rEJP8WhMbS;9m7%AJMtj2K z8QcSrHG|{=LJ>ob`}(yOhvN(#nJ5wkHq3(V;b;4!dF%`qb`$kym?~3GI)!>CF>y5Q zUp_Yn?{TjV05|iB63$J)>!i}Y*t-mX2=PQl9%6#imJvc0*zq&ipqzcRgu)10Bk*u8 z>R31kRw^9{@wK#|*Us~=ucJ)E2%dd>L7Wc;2Zu}VuMO0Z2xmkMPIsIZKOYyWb}uz! z46aEfU+%pBGUN16@2Nk=2YhtK8;366wHUYwkRiR>?jePN#<7L?>+u)f9{{AR@O_U2 z0Tb?~5}k^)q&yHGfP0G_wC|Tll@%0JzZZAm0B{1>fSlKuV!JKg_-FI~ZSda#=s9bX zcR!WPlls{@+IywyG4Dsn$BdiD;@^*#1se!i=&PHl20m!9P=$cLT1-!)uh4;wmg%PT z**(91=C=Q`d=E{9GA6=g;A!ZyO3i$*t+r-~Pg)Kh47mP&x`qt75TM%D-uqzQJr|Iy z>c}5g&IWbF-*LTVZ>Z@U&hV2dU8@1tCW_We?Wr!G4JG>!1LyC12*?-Ri1Dvbqm}-s zHCckjg>o4!r9{x-I3kMT#GOkeM7!5Qr4*1vg4nL$Kr#HRg;bE6(`h&&Pd}S z^3uC0;^lGFoO5j59=|0c8DeH^!Cwspo@x;I!S^Q@Ilk2I(R!o)q{iv%JqY+&4IBG- z^UpxxccEPEAvLWyZeL2*+Cr)34QMC`>w&OP9CZXStvQZ%ieZmiuvSrnEB2oWyv%`r zlP@*0G;6#WS3gu~FKQd{r8|%hv(!5-U0o&q%(g2Q1^6Z1RA(!ROINSfK|U1QbRo+b z&5*QB%{);QjQhdKrz%Z(X))DDdLjWgM_}pz{?Jv|AWHepqy4QQN$twUWH8+|n9-KZ zzd}j(=Xzrl0J7V?MFLSXCu>tP7XwmNkQKT`d_+0vf_JC2w<^7^Vb3Fqv;^a?;`xFW2h*@nn>ydz-M*KAiMlTwI4#KWa&2 z=KG?=igv!!(!*-bE{dX*6w+w7=c?hb;=D>7(LvEbcxL{&qXtUcT@|dNP35G1bNQ4n zA2?caNv3SvTV%TD1PhaZ<)_w1vj!fG+i77p*#H0l|Nj60AphScd!F#f%Nw1wTI92# z72dlccryVXs}tgA!}3C-S@>cSauH!-o78ZD$uELJ?rv3u;Bljw{BYQXXyA;sEY438 zk!#)4&SBA9(QTHaUpAvs5jfJX6Q&5KE|P`3PlT~RsI`!E2A%K>MH}McdmzxhB^V7L zCVR=y-gaeR_T2Q|3)crxgQn|ioll-qn5<;RII*RaaNG}1OK8g6c@tiJN)@K9*}xo0 z^4N{CSlO&QkbT7@$_Rz(!32KIh8t%wd8X=Js&ET{*$?uD80m9^>A`XwHN1F-8aI=R zpomN!0O^~&`Yx=vVW3RuVZoq)0A>K=O@>VPJGbpMq+ns7P3a-8by_U(s;-v^4?RC= zxgsTg!BgohBAi0|o8Y?sG<q7sBLf9TL1ZX$I~=cn!n^D1MT_C1#=_5J;c zdO=Y9DTmIJs3;-Q5d7_3nhyRtZd57{Get+W3?vONO@847DrLAONd{~n{zN;hTHgzd z`s5?MfS_i(&S@(@bY}#Fs&@b6&)fWGXFH4~vup?cR*^=I+myHoU zF+gSaNUz{FM>NzIBISs#Jm>ht2q#0-*q*L^x?OlL$DwHI)Ov{(O3$p6CgkIEXH3S& z)>RAkN~6VRc+<@rTQb{<;iv}j#4C*WD}V&{I31J**h+lgXvr8QS*8c`K`WyO$_Th= z7X(#`5bNOiMx11FVm;|fspu#U88FeROvSXiV%#AQ897^n#1fW~WEnELUZXaq z%ZMspvhjE|Zqdy-m-GWpvFv>Nh&iMj$%VB;{NLl*MF@w9ZF)b_dfFI;xm9e{E%~vQ zAk(lS%6~f{YhDAbyL^7-!76a#<<9$qs>?WH90Y=k>BCc+hJiMsIxFKCpQE)Ntx3)b z5tR7?0vpdz)m|LyWp^{CQ=WF@0=_U_*J63204Opz)2IV~>0zy})o)P)0>=eNgFegf z-_Q6;j{yH*+wT-T<3{r-yxBRs7E572MY*8{l`=~GUH!oW;M^)DsG@F$*OKo>!~bT! z{!u#s6X(x&NbeG;-3ZEC^#{mubKc~8P#f@v=KtH^zf*rs`&(ME6iqO%_Qu?HC=Q+z zynGV0kKs^+Uy3%Hkq2_rbP-VUdU!HN(J=l|?@=}9g9&LA>tlq9N8(L z98CE>dgJto7>pq-m?PfRaoV=`D5uZlr4k-LNd%&4f6QZSo#1&~L-<0!LqZn(Sh~Vn zB7E2}Di;Z2@YBU+bfcxop^q3?y9pK6{dqJ15p0s+gA>cf=;t0tg)Cjv&r>MJtBzg z;d_DFTW;CDlKkblh_G1vl2?%C1W1Ttn?_W{J~ac4&Ve5(PP|~BiF=PN*0yhjH@tnC zXL?_G;yGxKTh1sa)-7HcRdqh#MfON^v5G_Y>np&HCsgB<7)iXI9X$DSYk_S-Ncl_x zQiF3p&K=zg1o3B+o49JjIotZ_MJKC~T6A47`dFEa$#Ny}*qH`B;CfQ;9<@FMV#uTS zlP%Sv$AV_-ibA;t)ozelc8%1h*GP@|9w&D>w+fCrAobUHhHJg&Pu)gB`G;DrVrJ%# z-E17q9ll!^kVtUf6c|%$gIhNjfP;k_$PQ!$+$1Dm`LX#w9QAj|>^IvVc=xWB&57Ed zc&DyyTYH)MBf6x)a-JuSs}R|mewJpx(Q;39Qrs2ZV{?k-`-Y$AS2&nsVVk6ePd|}p`Kbq$n;}_52BNA)l#;Cu;P;c5LWrsjTS*@QiS&1O>!M zaZafFsVbml>NbrS4kK|?ytU8K3E(;<4714__q(FZ=gxQ@!7Sb(vjyPS^v{q;@bOZZ zJEo3OqYeB(c|!a|lY0&wV0;TC9e|eaFFWLN6>$8|rp^C{#r0Qtfer(&A1nnPd@2GC zesc*7_E&%nf+UW!I}xc|&Ns;VaM*!*P&hu5xbd#djDz3XnnW&qcLbH}v2LNV(ICd@ zF8z$n2hK}Oh?lQ<1;{OD448bz?fK^c%fxa*_>riS86yDzj}(nLuf8TEI=Nidybq>4 zpun-Dm5?J9xNcqxDXvs^?9_YJe=>2@ZOEs3UFS zt09KxSHoXJgwQ9@DPBl*kd+kBGJeHAt&+cg1kfV8K#yf>6W;a6Om@0TPV7i}#Jv4N zV)Dh>^o?&3^7tCC``3W|o>xkk-~Q#1C5fM?*ZwH2>SEg8(l&ZR{OD z#^1N1ATdd9``iuuBbky)3V(N3uzx!+$^l?yWBZ<}>ZZxfesf^-zv*FrCuLqM)Pkk+ zbIgAkk+!fzlP1}jx?j_G%Hl^SnkbisPeFz)zOdR)sHCP<5&xd^>b~XH_;wrp{8Od- zlP28;+WHXv$Ak7Byp0F)Ah@)*1s3?7;4d7CCQrKO-?kJ))TbIWg6HLrKNyGRk1ao~ zgR?WPwB0AP^gii!$)t4fSVM|jp5|Cijet%?{3s5Df7Jyx``JDxsWdTU_{qx#0|#Vh zlgPPybw+vFKJl1<{al*a=_>}c(Ab*NQJ!jo)-?*vT@G6>E7d5sfhUrFT!6eQr&{2EQ2r>{rN_&Ambl zv9A5nDOxRcNZUcgGypGrmHCaj8qm5GhL@eg$aL=_$=h$-A`2+5g0Hg~*6(Dz6lO!B+;#6?AabFPf_TCe*D z`&|De&-o8Fx*#Pzn4Jdvv4hT?)?#tSpBbhe3n(MP3<`t!BrhXS@)3bUec~UDf=@)v=+2tW`@_$D%3(`O)@z1lxtwaxZ)CieUddbn&WQ0t+7D zEN8>+Jbz;YWFa2o=EbrjDhUCinpBOzI9ltW)vb zB>bU}#%;Ot?+fn#7tioJ=2&a-jsraIn|g8|u|;BVi6&`b;maAu7$2)cEfjN$UF3Rp z1G&C{p3Wfrl|RzGG$lm>>ah6<10DQ13{*yhJW(CoVYWEZZHFN)1{i91cl*z0iY%vH z@nhzB6obOmZ`LMAI7Y&GP9u$0ur$m+B9Hl4zHfwFSFl)5F*28eZezM)ZP-fIFh4cL zuZTBD62l&|uM%vr@Y<2`iRyk}gL0&Md5E@&qk|)-+G|nkXOVF!i&j==h$oc5%({Ory zpB}xi1Vl4SK;%^;kuQz?7{2xA;wJ+PoP$lur_6+u(hnCiRSN-&<$k~Tm2WM_Z_!>k z;yI$h!grSAwN=Pu4RUm_v2t*@P5N{! zu$P{8B$lj{7R1n>q0KrhFkUn18oaKc9rNz0Gl`|v<71-Kd;JLY1MN;FdeY&XhfPOu z=z)q$t-fwW1?>zwgAJSb81?ePj+O$AC5~sS7!;m=ZI~M_njOD;9*+Dm_}c<2kXf#@ zv$p8KR11fxRbfK?_?xCy3-*U(3sc=6&R-Yk%T=l6{ny&eOBtc zrwWxaR?^ztXy`J9K;bAQw}s?0u<_j55~@pN!D6E3F{Mt#f|)X|T{T5Y zXplran*w80dEYo0{^*le&<1v}4wCEP_!zBF4+iBk3Z=?kP=CG?7f%3w5kH6v#7FB9 zeR9~G1wti&60$Z)4$X&uw=4f9E~Ib8#SQHWzW9!6d=Io4pj|lMr5fwDJ&@kGGRBo_(52x$IN_4ii8=fxV8B zMAp@O<^Y20O`>xAo-LI|2B~S!r!Nue21jwuUV?#9YR})Vmrd*+<3B9YJdYu)jQ_As zIBuG(1BKFt7*K>8&;-E9>1D-+ZbCkP3GKW(B@=bQhMV6{TACecm9}f?EaD>^vce-8pS1BR$Ga=t)UqHaby-jEGyY;Q1ah;p+*GXn-@MoFP+Q5)G*xD$ zW)5Swj%h|&t1$J3O!9PJpDQd3a;tS)S3(7TPWxE%{bzA{hz~%6Njg@!!Iz#0oZhI- zEGf%G$(7MB=LWcv4rd82ls=mE4OU8WT4Ni!v`aFmF)tS6FET9ML8QMog3FNj;iRxLF2A>{7)~Eq9||qWEenTj zqom=CN}Ri&81yCnxO886E;WU}Fqi;|o%Kw%5DEsH5a_#Gif7s7F*!5%g_U&TxYdG{ z(GTjpN_#vbe?^;UwM4{8*JIpems_=Y00HkFMyfP(sO(oo!x4wgXm`;&)Mf(w(g2u$ z*mzhFP%y+$V4`5c|FYFsDF)Rg>@5{AE6)wFvlHmPF*s20?MToyju`>hT7C{q4plJ4 z4>)%CHdlYTi&Z2=g}*`eU$Qlg2;hXg3UpPFU8dYCNRSbga3FW_Jo{HGEgr>V>BrUt z&V|aiafkC9Zup1kfOFP9qb$HiiDTE45!01dKXV!+ks35P;uE5dOR>85iBbXyw^q4u zwlFq!h;z(llLn4Q9-oA#_>ng5kegt{TJab)MJ6@sBl8PM@0#JLi1>Co1yOTHXH(fB z*vJit&-Kf7qV=+jSlM6ZsFB-?BpqRr0ETS5264_Eh>`Z5Xv5(YmW%l8eW1b982&4WrT$%D z-Ng?Bd!B0DF zfFf4P0%ord@!1w%gy22&rS2J?>#$i|$mxp3$uUNk6>A|r**r5^Fe!5`u*=`!NHBAE zDX88=VfJ%hskaZ_&9jWyL!BMd5Nx(@5u?mlb*TMZsm?4yomt}845oY_`&PwM5|JYa z#iRr-8HY{1)8w=7>PK7Em+?zXwAdOU%`g7f04&1NfO7`*^-@RHz5DBDIUyoV(aL`l zz^eZafB_#BWR@TCDBEk*7v+QSie4!3x@=``k7a8wiGw_lUumt_D%K=GV^v7Mj1q>$ za7ge*q9FU)g65--rfGkif>O5AZ$**Z;hX`aM%!q{WrpTx0cO zYKteC>ixAxc`wxIDzZxQ@u^W$nc%8+znTxF62M2T7H8id;9&EhtaX)3#4UiKCT=iR z=FrnOozCcmc0}AXr5J^~2;HiP@L2{Nae9C4W0_&h5(5CNKEW=GvR#Z`37yCunMlB> z79Fr47*PW((?{kaB%7C;CJcx3a*j-)UFrTm>fSmok7Vl>4(=Y@-QmGqgS)#s1c%_k zCAb6v1b6q~9ta*FxLa^{3-UpdnaRv#X3jnDdC&ds9}hpOyP9gA?zL*~U3;%G#IgaM zxa^Y3dRxKvE_{tb5;v9ReVtj;9`HWHqpd#qV5^TlfVlBHfH7u1rINkeY?L5W`#A8N zOX5$q`u|>uE$e@|#Fph(4q^W-=*0R!D6Id5dgA~7Kl_h%2ni%4r5j7C9&F);B$v#b zM-#U&P9ycw9VPIUDrA;X04n*}QArO&ur|>qRbj4RRpe#8a&1MeWYt}yCxq(m!LwNt z162JXJ-Fh-cq&aXw z#|O=i7I9$VHs6=ZisHdu>Rj8vBEwuhMY2Jxj=R|q1Y?{XOp({2s7VbN)jY^~Da>yl zQ49YZ9{dXvilArFUO`79k zq>21JLyJdlBYEI9f(LGc{LXF6GUKWQ<9oZ}r}Tqtv($gwk_X^Z@V{MA#rm&SUHq1G z^7E>TU#N?L?XRfo|DpfoA7%2=55IV;k0p0!52a+NJ3t`{!@|*6n;ltdikXS4v)#Zj zVZL|v8bG9tW5!wEk%r2{8L8`yX9cbe9wX5OZyOMbjSUAju-Va=M+&EStK}bs=myv9 zXhLtnp1v}!B(#GIkp|IVv%hsK14DVn>z@vElw5R);~AX2nK5N&43{PEzTY%Lqz6~8 znX=e$Bd-ZlmQcAxw*|Us5VSzuGbz(9WrR0B6r|Q5A=_sLfs2zO(KSvVJ>X$ykMp6; zbcgY_H%2RVCZH{;Rq-V?)M;2sG=98=LjM93Yqs;0dyt&aIIlIO`43ZxQgMj`TLis}R+O3Ow4UDj4FnGn0ea^J+E(Y3 z{Z)^H$08a%Y60)91$j-zjz&WQ{`hBUBj^;A9{q+h4xFHdx@LDGuk*WNe%G~PL>rz+ zY*(kyPPQsS4F5IOCp(4&iS=7|OrVVdJ?+3(LWTsXK7)dz6MQsIqlU@q^O3pB@ac2{ z7j$u=Lru3#C+9Hwo}SUvKBDi*0sDD~+H8?p9Mr3zhwkAjVP=nBjQ0accszJ9M!y(A z#nl$K<~69ChL&YB*PR)ECjk35wJbkuoc%8rr2GPF#=nB~|K7;|1j3d&RQLNakC&z; zen##+f{L_@=l+lc`V&Cv7Rf?LWd}~Tah`+vfJQezUEpRQlfHe_aGMN3a&tyNYAol8 z%Bv>~LsR<}Z-A%wK*GMfu-e$JQ$_u=&i8E11%1+#4NU$c3U~Cb48|1M4`qu2{I$Lb6i!B^LkE%y!cRA_GUD5A!#+C z<>m60Pf3l<%_RKH5_35mmh;AE$btz30*0T4D#UrPP;I?)w{}u>o#^nU!Q9}}87i83;9Oy=dlZnPtxc8snNz^6mW0wO*4Uo8Ds}fu0ir#Qxq+xXAC(ny(dQ#mvfd|#+2<6SU6i= zZ5pMfx?BV4Z^~H9di^xP>^ldI2HP%xgUhhM}^f(9|tB(Vc*}~yP$eUFQ z8f)nun+Qa>8e8g*N&M{qU$Eu}Am)7E4o4Pyj9#gcUh?l`V4sQoFtI5*n>#psHID^E ze_5{sLBaU#u%fx;gMszC(n?ka03!>4or#f|^()qXX#VF0`lodK&Z8i&Q5S{__TI~m z#Ai+27foy%GIkA;kvR^yTGk1rAgZP8Y|rS?dGLD%%@EsNN-;sG5wB@n{mwV*&FYnp zL51=-u5Lg>@s2X3$*=U?8*0}wQEGPdd50}Ot$(@J*~5L8n$Dt`5z~Jt9&;A}4aU1Z z4YMNKI2Xru6TQXALi7orQ-(Ysr5rVuaYi3bR9a84G)8pOPeV>^DQ39XU zv{7u;uZC?$jI#{EG!h+R6SVKZf+1+Et>!A$&fV0gt|nSS(A}60U;%p;wI8>B{Ly!J zIzwXjyi#&aIAGn%vac0uK_`O|exM%=)hP?KORw^fK)L7^AT6;)KOfw`p2AI+ zeHy!fz1+{sp}m7kjLH{*FsW`JpQXbe+pmhZB|FX>h%@+!3+Qz3X(DEkil=61AO~u6 zHX;oaqqknw>o%$y444$paPebA39qYh5qiv+ti(LB;>IxUb@(Pxh&c!OBU>YS$g6jv zxByF`ZA!L)7&DV5KlVES00960001EW-**nWQMp6>FFJZP1-aMc0!K+0_Qz-bjuO45 zol2!*MvGyetjlqiAtE915|iz=q^5E%M3M0w0BJy$zdy;R2A;gnB<6>4n3c@kZ~zZ$ zPv2@+FBZ98r@tJsOBS)J??eq}cLfm^JLuG&gxn9}APTI6Lr{BmVOJnVce_1-|K0N_ zelXhpPZDI&(?7Pa3e<3Fa`g+RG~>KaxDHhNU4H9NJBWaPRlVc`@Bp~Lq4WYAfz*K> z{xE!@$JhH;=j3M@{SI9|OXMT82upE*mA3+3ax}WS z2Koho7UmeRj^Y#A{@Vfy7&dApaw-HCUCk8cYSDAiNGt`MxJ_6&dZ|ko^OwIX~?+oOds@M9reMHdP~6Gilvh4IX>_D3hRl z*a_(|Bu5yFI~b6gEM?W;JBj{MO?0rH<8WdIMfMR|3qIfaa7c>_9RWw{4kS;AVoJSe zKK4FUM7U-EeRs~fK>AE6SkT+_Y-39)DA?eJy3zW!*CBxG@U^$kQGsMk3ug>ec>N(w zMmkwv=J6ulyjmLbUVGA9cp?LyYUy_5$+ z+g0)54U7@yc~n9iW=cJ+8hmg(1;Yqfrk_dsU;EE0(44@NJHtG0MWVNNNu!(MUB_V4 zpt8T3F^GzZ>%&jps^X^ZKLJ8%)fj58hSqDIuTC^ltV@4WWwS!&938e~fC!w%jF3GZ z!z91Z65inNrpIkDn?}96umHqoExjfe*#E9GY7{UrI1BtK#X-&y2#DK!oqmKgb7U6Z_S6jy2z5QWE_}6 zpZQojXp%B^t8?ER&rA7Y!!yr7t&Eg8N1&Uh2~MsL1Ox$613%8e#h|s!{;4^9&Kd~3 zO9UB(;2{Kz0Rf^ZhsbpS$N(t2o5=xzUv-#-N<{RNn+Pr6g;(hvD`wU&!w>$(B2G~#P zFSqnQ4h+hNbjvYVFH3l0(3`8*@EG|}fA;fVCkl#qxwH?Qs9%S7T1Wi~8O{Ga!)x|8 z47v4OihLa;uT?b7V|G8ZH?lwZyo+8?H`na}5jFJjK6S7prLSK6GjKDRZVLo4<{mIjAh>P7AU` zrZ%=kRbap(8M0v@mctK|jU?`H6fne5&VM@3yCg3+bc791fsZNo4Vd!lCo*cHts@;* z%B%z5E{Vw|NpBCVmO!x(9ioF#iBswyd^>CLF1K=405Xu=`NASy&=Q7yaPoy5W6b+S zY5V}Fs3Pd@KnFbubJ~R*mr3v$i&RNoXHEhXBB0?` zvs6R9=Pc4NRt*_EZLgQSh^v%K>`7%ru13%f%8lBAQn&ijEfU~|ru2^K#p_lDm)Tj+ zPJ66nFML!s8?su6%Svx;K$d{H08ZD~Rsusn6wr8{>CxSg5Srdm@XxAsE0BNO#Hq{Etk|_lrgdGzzwmxv9CMz9qpU zgX%jzE`g%a{>isp zEZd5ggY;8s_H4ZsnT2 zjTdX>4gGpnUg>X3>ig^}Jg?7Ok;I}%6U$14oq>wrMW@4?Cs@?%q6#UZYql-<0E0yu zgP3{q_jg|?SD_< zA+I9aoyP8Zc3Cp&#eFBLUO@1l>pUO6+$=1bB=jd*1$g@uCTyIoe%*YM9Z>0U1lpgc z)rCfQ;dq-vB-0)72N8Xf9kFmd6R_s{Q6#GfgjS=s25w&F%v!A7t=}%m%-25QthN;| zJ6_uXKKcY4irF8_sUy~jfv1M4iwCT62zyjfQZT0;7;3#0eHPevU2novsIEDm8U2iBn$zW z`M?hj;PSj2L=!Mn)RP?}L%k%lrdPel>mx6tL$7!k!;Rl(4FehhF-utky`SRC!t$sR3ex)ksSgj3D)|m6;9@N@3mE>SNEp}SQV~+; zKSIj#uY$Laum58N=WAu+Z;}j;3iU=0ryivl9=ZL8oaSGz5HmM5BM@+Kcww(^ZD>p& ztn#N=GT^tM6T=V9|MK1Z6Iirqh*^p3^RkGXl2-q zYIrEm>KHAv1p!n**O1;(dLtjXa=gj}M)DvxseM)Ja@+@<&t3#=^uE{Bb8c}!r&d~U2 zho7Js2MauYZZbKI`;`eeq$=Soq39)*X<;h{qZ2=(YJ13u+cc7K1j}{mjc|49v=oD6 zUG(NNnuscw!P(D>u67e^gt0&~%0X{QjLt($1{RXpKISu5m?shUq`DAM+dliOEXtsd zd7$=Q5kGrCUq~xaQY$s2AUn)%&TyD{!WI1o* zOFW{v>H*DV4``16j%G-%C6y>ak&28L7QO1x-G5p$*Z-g5=eM1Pe!b$yGNgY2!vBR^ z_$S=1a4jR*FXU&BW~mm+Wk$j{NA+gr>?04p(FB4b7yx>mCj+Qeym;1W{zNrpC7ftJ z2%P_k57giwwqNVwM=m>&l?jt>uqr2Vv`F__1jlC3grn;KT1ZCjlYTW^5Q1E%wZ5Y-q9USN!W%4`u`A-6bv z%XBFYsTVq?`;ODUHKR~M>Lu@xtgfY#PP!ypbm|<@y4B!QtO$$#yN^{*jnKO_DN`9+ zkN2-fVFbsDY6Tc)V8;$Fea0KZ)%dEhH^nJ3ZD$xj=PxSJj-{YwAoBMlcyy}0vZ6Z5 z$p0xyQ& z=IRQWMS^i7N$uZ8TR+}?ciN7x)?a6p?B=+UKv{%T{n<7>aQCE1pIeUi0P6zB5@gFq!ydEf9W8TfOZpk(Q#iLapA$PrOG< z;VaDRsuV+(u;eY4&vtM);i`wWP`nBM(Yja&ot<8MW?7h*s-9JGh*J*yf^M@@Roqga z5Mvy)#D$xN)BAbeP8sUct*PMldUnf|Xv>g$qk3mjRX`gyN!Ie*)}p9K^*a(sFu*Qt zGfb;+t6Y7-$xZ?ga!Jptt^{V?aA@wXt?{@xtA$70Ha_6C_5rtPza*<|EUlqWiQGl5 z>D^!-0yzGNTjT#JXnxbq`}K;iQ=YLAfw<7WjNSjzZTu5{OW;ulSD$%nRRo>X>Rs6( z=akNo#l9*$9Xuo8pit9;z4V?bK#gP6=dP}x@DB-@OM`~>LwAdeDh}CjRn%her#eSS zU}SX~SeWO|&pfdBLU^p8znDfaiN8`YeTQK*f~=`~rG~-MB>FLf_3F9TSUEdyJ9bAH z)ASTQ#vKJhRi58OhqX|fKFb@lJN4vHC#%V$Oi4KEdl>tfRK4MdD3&f4jm!oVU!*+_^pr$S`;7JL?CEiIh8Lv)FNsR|fJ6e%DO`IhW>!_v zJ3VpW%iqQ1s#G;s#_tv89oBxx=ZixdzR!5G1F4JQEc@=p|mw{G3G%t@Z z<;1E7;dl7`X@{TSHxs^Tab@rDv%Q0xQEcmly~z~gs^ANQ(x9E=@#zJXsF8^J4QT(6n+pLKe~UnDtx8ov}arl@O7(!U26%JGIY|EzQVXUFt+GE3jHQRl z45_r6e7qrY{_4bID`!zklrFQz^3ODaBkzl)!90zyOGvY5_a?Q}f zTuAZ7Rti_VyNo8q$|ScY+{m+1obtjh$&B{`QJ=yCDCasmQ~eB+6%( zT)IZsr%!7Ik?-$8yDv|AWEhotyR7=^`9TP=RmFNUU&$w)H!uO=AD@#q)`BJNHbxgf zLm&gk%Me5z-oxRo2yl(^b8dud&zP(NmqREdXu(G?CBM&&`=X3#EfrBJiO}56F0B*k zk8ASrgWj8W3L0R+5piw_?a|zE#Fg-;uJ3w1+9e2oCe$=Aa4V;> zVFX2irU@$4%J$!h3OKPG+&^(*6=qE85(&^=At}fEEcPZrRWw%F4MCtnh~%XG4(oaA ztK0V6nb&$cJ`#xp$zmp$)lXcN5b9{?C7TMgHTAs0f^wD=45?bCxB~c5@9=7j`94U_ zcvicyP-fA&CFl`loxUWOq1}Gx$i0P-&4hr6)Pw>wu?9cdT8*5!EKJ-s0BNmX8(ie~ znFMcL8)5^WfOp8WXQLQkMJ{P(ElH&X49Pru>9lH^MV8E$$@pI4gAWD+qDrCv0WI`> z9lrBOYmQpF!Rn-B^o#Id?*vb)enlCbvh&LLfcW|uW$=2E{mCwNJVR_`uDE5j;^RgC zaot3EIAzUs_E|bU`z^76{zgiaNIZ7s`jg5|Kq9e>_OVz7GVC036jYQ_Gzhoo+IX+= zQmy36UD44h7~Yc9VaF%%JI(SXZ3{GQ9Ts;7b1-?=B8z&n$+_xsFNn<@URPe-0FR2U z+YKTD?~{l5-xmwRp=kLrE|KO0(s-OAKc>>50DM6a9%$*}`<}>u%%=vJ{oY6+1rUET zQg9R<_3cf}jV+A`l#C6{tZgi9OwE7Ylb8_z_-3?F{?_eVZY$&8i|c*WhGApkVEDRh z|6}vNcqhI<1b?=e;2td|$Zxurj6HW-cDbMdC9p_Fi-Xb!Js=oCd>KVwxO3AEJ2Ga* zrmU$IqrQ-2^ZFmAZtCu?kqezs zdz;M3i`c_;0B&sJmV}AHb8jcl4WQF);c<4T)CRZgAXa%x9Y7X?lLuV2$_G~l>FQg@ z%Cnt3%2L&2-gh>TvUzJ1j_%E5ts|kG*oznRE(NP?+!}?2SZ6Uwm*-&O!s-1sZ=(ww zj-cst(5cIb8Jo~!p>&`kU?7kzpAP_^_dl>#t8VS5!Fl|^Q%&XKxk<$L@CC0n06sC_ zEFzx}fKQP3Py1w8W?TIC9OD9tZG4q zD-_l21$`ynK(~&?lwVLr{DC+NuQRxSnn7!XS{<}0-)_}Bp$UGk(zX2nj}-ruPnmP7 zpIc*Q_Zc&K#55BB=?x8)G^$sgfi@lK=o1(MEL^iI^t#jL&^-$Ed1K&yGx?7m9^0T{Ex(=U!KD%x(YXIHoZpK0S-&g`O|4TR&reF7asxur~`_Jnx* zGx9S^O;O1CFaZl=@ccExLV7iK!$iBQ>^abJfZKO&etYhk&{P3onu!WG zpRU#=xV^E)O*3RggE5wfX8Bbih4xw4puw{s0b87H%v>Hp97Fr_$v48iN{0=D?uA zY^<WCTx@ zNQK)pJ8E_Fv{x1x{aC~>cf6@>6YjBZHY96cQvSwC+46MrS5)P83%;2g$cyzf|G=txhikfPsOHf%%&%HVfdP31DGjV|YxW|Np~H{!?5g zfdsD^^Hr^`}>%j&Ki= znrp>ABc8)8@{RP?6e?$nH2}{psMDcpa;2cX6rE(-)|GZbW^Kfu%_dKD*{W~6@b<)95i;^=zI2wv17)Kgb2;v(sh8A5#NMAww% zA@VfDB%D`p>NW}2ET>!N95Y?lserd_Yi#V=;0dz z)%y;FwCOP@OY%S(1P>O(_aYr2+&?k}$B!C<;tY?`v9A~dSG2J)|}lYRZ6`9Jy7|AfjYbP1M}zC*Y--9p!BY&T-f&0gNLEL_Vr`KAS} zAUM)tHjJX<0%qALpzSQMZ~dR$XyM)mS8bwWe2mup68w3)RYuzbn{4!j>)yKmXVtY5 z%Fa_xij5q1e^&FVTOFt7EZW4;C>dgkml%deN?c?qPMYz8mG`BGGQ0B}aWa13UK`^4 zJs*H7l{8Fnd2X(@xS>;h>TC~zLRX2EJbFqmqwt=*u^&?!(kE`({*nS5_o=4dj?)~H z58>UiVE3ytzJ&a|2Am~3y8|^`_%Eai^0uGRXkDuT2*xXh)dKF4%Jhi_q$e=sj5ai-!^3Nm1W;A3P6>)@60N zn61Lb+&-;Dy4AN6YNe>+#BHs5wwcyC#{g+po)SL6EXo+wWlVCBF5v;{5XoVK9%f(N zEZO6B>F(D-A(ITXZOT_^3X0wFbmnqHoFsY}*Wy~AmmY!;NRv^#yaplvcJkd=44tb)#>_N=-9F}p#Tfxp$Y?!#BTJe#&Di}$!?t))>Jcb9 zkCD#@pa}kzsV(=z+bkjXgQBsb@H1KIZ+SA0N=Ls4&cLAH{W?KCv$3*zVg1YG^BA*y zCcy9&KTH4s0RR6003iS0kC`|CW<~(>*TkG3oBsPe5$}m7!}Cw3NQ>iFZP`z2INzmk#gjeD%4iZ-x0fOY1Ocg?%e3H_shE^~ z6wvOelBQA?DZ-z@TjA%K{rIvz#ygp99`=n<${f*!QRt%n0&1)RYWhosUdepI-mZ$h z{*E}kPY8!awwH_j(w@5$*G1FKUP{L~TdvpB6HX))4&Pw)nEChHyp`@Co@h1~plSR$ ziGp4=t(mC_LhSd5`V$0y0x>iGg8ar+S#8%Uuxj)wJ(QiU811D`qZW5xT9T|otOGKX=4nm6VDDb%?mr0jij>`_cO`t*);85tC zpH6~5cnwrqN!Mp4NFr!iUd74#acf4b6SaTq3IZWUPCR6uAzrt4i>;7L-8ep$v9~IX zm(xJ)gLsJnyj>1sA$?b{(=&b)6jPo|B~rxxBhKUL>sfJ?#@xF+0hW%XSNgrLx))gy zi4xSe%O$?3pgC9EyFe5O3i7X~e#uB<`nAl9nStZsC)4*OzsDwkm6=)NKQ+uhEiVkH3Zf|`uP2O- zO7Gw8b*DY!kT9;=M0>?N3#T6KI22O{%3lI3$xzf39&I*70FMQTvnZEbUHxjSvHU?LN*=S z0e0)>NW^^mA~n?wrNExv6U`Z#8SMyb?kwJ!FTQK@$6A$OOg15`gTp8?_pK7J%u=}> zgw1lG$~zT}DPM%~j8GSpfx>{Ds{1qe1kIc1o6Vk~sRUE8=||t@mddpCKQ)eJlZ*jB z03Gg0el-i@?o(F5L)B@_=~A;l=Up)}nwZSF|6JpFRe0_AVDkHx97%e#ic~W$aGTPX zX_pJT1C)6QS)|YC4~}%nmS0I<>R3-sKefhWGSB1k4}RULsEm>!@4|ms*PFTT-k>1p zm-=)MOhH3kB`^Lag%6r?YECv99;Im^E_*RFv86bP>D58CPZ@R>kz&tz_kR4-@(&&^ z3O$E|*3NqVxm#3D1bb>g=z!N-SfNV}hSL@?vEnlCN+be0vxopUP?lD{5#*+#1|;;fnTHl%o0A! z-x7^|rU5<^0H4wCCT)w_6A-{-T<`U-*~Y*CpFk`hKLKmkZ)LwG1de9rzgImpw6S(@ zGbmXN=E6j|h?seQgL0-rv!>i{ zdU$w+@XLu_9+$SBB6()gIV2I)Mr*qLS~7_RLq(Ju`K&)uFnO-C2K!`dap29qwqFx? z*C*%a2v#KYl5UoH5O4ZE`=^z>3dJo#3)eJ3pGG?k^&XkOtaR$QVMi&1T@W;bQ=RasAK3hJ##|m6PH`bZD_R% z-GlC+=Ou3<&d64+Z3V5Fb{SILU$?LJnq%>_J(nS}+AmU*?ivlVGG$MtfzfMThi`60?(jbr5fdK=5&4$Ni&bm{Os*fAVI1>Ro;mGR_MKS~AEZWKS zkvS~!tZ$iApQ%zEd&PQ^O|=HD0D0zd8N3nT3s(DJ45s}uOF{jw%usIOTA~~+%%68&2J?M-aTe1NJs$FE zIBIv!Y9aW&vE7?cIFQ@qR!y|xnAz<+SC5jNvJ15S*^i{uYxrN@rme^ia4N!zt;09> zzH@pLCcp&Vbj-uA=~Xc~d_g*A+77R;_o|BbQ~piX3~u?S3Sy;2 zAt$RnfvNUNq8deXzfM zH+Wc)xR%-aZ1sT-Oq20%Qi)&sW=r|3WPEBc)s2J5B1hUsLv(KvmXN9h9Vt2(zlD__ zl(T?jxQd>EjWp5%>EH|{;Ij@l<>8#Td#U-VSLe%s{#+=N^QaIb3zPw93>xB8D!J$v zF2c{3JGh$P13cvbpOQb%QGdbTSpEi0Vp2?`pkw>P=OCS!BA;TP|BkFSXOA2ctJ#M-lexWIaD=BZGyj7B$kod}rS)k^_Q4t{m+0(rNn* zvo|`y+=ky}_zgtejIK1DX{G<|w9t*SoX@()yIwdLd&Ns92nYeuH?Uupe92xbhusn3 z>lu6KZje=7Fh(WFjj`D&pT`ioT*SFvU(%8VnWzAqbJ<*&6cE))`Sc@>Eh-K$JSEf( z`@%C-#`EZ#RPcv5+E>0n=cCfRly)=hvWyqv9W86cme1u^F?U#P2OUFD0r zUY5bvBc*%PTI?|o*N_>oV+FxpZr;+3MtMO*Q{hf{Y6bWuma{|hZRuRGK&N;Ia{$PwXu1G=DZyq%9CLqXd4OM_PX<*e7Z10iG@Q0&8llW^W>?_6>?gQUVk za>hmCk7*F=o0N#!faJ`drJhzESY7VU9DS}hSd5NTqJkl9C&TPiKm;=$_eI=(&+zea zX9lpb2mT&@@G|PY@i!=Eja=v-8Qkk%eha@Zg2JHS{9UFI!((mO*O!&_4=?NAgvJ>F zOb`AEJJYw+C&tGn+xO=G{TuwJNI|Q9b(~^@>dp1BDGVppB9gaJ+`CUrAKiw|Dc{hM zDDji9Utk5ysY&%`lMBWVr}>3+tb&7RKFN{CvjufrX&>V(nk?ahzyOQ5^()>sna032 z3prE8N@zISbK>!sUWm2el0VroJPFDWkU0zC_H0ZY z8`h5V z+h6Tu8xs?Uhp*cB(Ng|1?fL>?ee(@`fsh^=a1S4--`oQrfX^3z&)ARdK{u99r-HGi z`8T8A`e#P}5B9!+D}nxlFJY^1@A&YWgTo7}pLz`sA8P`ATiXZcK;OX9n84xTtdYLG z5rLzzz1717)<%zRhmrX=4fcnN9-I>z0>j_EQMTWG2nU+4{eO2~e|ACW07O6d7id56 zFX#-cewc?sC9U>GDeJ*8cR4r;4&(hT`VSTXKBeCmICB9$S>8YGli}l^?c?)*9c8}X z$mx$oU_S{Tg^WF|zB_#zlZQE$?P-q@Ic?^lKr(M?!{OFhsKc|ORxWLu;IF@l{n;D? ze(;N^T)NEtAqjqS<=`3l%`UxSp@TaJkE8WETIx;?U1zHbxg51YLyII1x3ZQ1E=h|o zfvEPlkf$4(+2TuSd0Q7%Tqe9*;KXFukI-PU-Hj31FRmr5D!e10RO*wl^zO9VC*9_d zT!tsK+iS;57!yG_Lk5&cIT(E0QHbOlL@YBJQ?EfS#mO8aM;vwr0GaFC>O?`8@n`V2 z+XFG#Xq^fe+k}G^N9+DRYYhc~6vxjrw2@Pa@uu_Fpe^#e(t{|6j)SGgc0a7FyA87v zhe$ZGUOldXvObXdgE7UK(<&Jb)L5H|z$k9_OOdoS*~@Gnp_ZO1y+wxZaI0j} zTbT(~J|R*&S(qC-@C(cgi&6-mNXp!_5k*D)^z4T#=nv_e|TI!Jgr|I*4OpThwIWA0|9@!@-f{1ch~)dIv`bU zfDe;4@3XHb+`ELl2W2}yoIg<;$gOF5DsBeqw7I^oy$g(>HxVv}AxkC$^m)BJXTP<{ zQAwcn_6E7GTUO&VSP#rguNF+=g zhtGpfYzGT1f~7yv;vBMMQ-%s!P~^8%JGiMSGPVXi$DZR}(m?G>ojy_*0}vX6Snh5S zI_xHaWGu0jq@!X)UN-;_=Ft=&qR@=3L6Q{_#p_*0={SyMzEx~KE-+ilw0=KnS&@a1 z+PY)5p>kY${F$1a6UwLhdB9`~?H(UiZKdJLnE{ROn8gzTxg!q0w74zSHwj;5Gi)Dh zLdys0Q2HzC5dD27!e0r0{Z^*+>v3gkb0=eahp%Gf-<^790Mo;V<=2f4erW#Z2Kpzr zzDh}8RjOb!!Dbx<{(% zGtW^$UeR>`x;8)IMz*3xttghP*vF`sc{4ZXbkEf?qzlq^ z!?oEWf_*>3|6bwZ?lb3wg)__WO!$rth6O`6UIRBa#l&-^u0qYpOd4#=flT1@B=u&t z=YiE$z712`y(&!wtZKKsm?wL%WCgF;FJ;@ciNJ^Bx0g%0l$U&{Df~FEPu&USpR_2j z4}LUp%|G=~SsC_&5|!7KvlyBc!_wxx=s!2Uusn*p1mZWwUfn%NbUC)$YDCx%Kr(uN%5gAKa^lhiR^1QeJFX7shDw?SpCYN%Dwxy zEcXFQeS1RBim|!To{LF9ZQ{eY^_Qxa}JEMVW4iSqJwHtUzeG%W+WJ?>Lcc0}sm)zAF2!ygNDe&UFmw09AoOfS({>uwH}mY0)C zQ(tnaCGnH6Y4jJNiQiYfaAnG%x3WcNj=nSXjNDCH)A21(#;2bflZQaQD@Nm`Vd*lw znM2%x%PJi982B_yFHhI`RAXTibD6hmAe(Z7&c6^G;Nqm@K#`!%zVrmnU{vrWVOl8< zXW00)GaLpr8oVy+@(oorfMjUN5Y}A{>n^cD5V<1y)WdA0XS0lEyVtX{k%|Wnb&ff% z2E#Gm0-^ieDN5(6<{tD&cDxkT9=#=UFwYUWZJ`B-0%00|zNy^ti3a}SBJug0i_Ch0 ztTLzK=Y!+Zv~G_nwK7Vg_`0R$Xu5KzT~(x^14^NjtpGPY!&PmjVDxE*!kLK^3>N#L zAZmI;Vt;M_Fh14vS2u~#6lCU!W0CPfEfM2l71>SbDq7lU zk@-u%(5Ug$Qz?)x`I3Yee*!l>60hVu!-HJAgm(Z5UVIf0w3Rtm=81vqcdLRfKsQe5 z`!eyA;oPoZhz5u}2duuZQcQ;GAnmn+d>preLxhSHI)57!#cHU9nBwg2M`h)suFI`V z8mZh*WV)VZ8d5X(xyLv(o~6KOBPzr6s*0kUF^{DCK)7IL52P#iSEMWauW{k`v@j49 z)Sq(UKT__0XqbN@++0-U^sKHW{IC>4xykkxYR&5G)Qo9+wdN<-Qmy*EPjQ8Pi@I>V zCwO)clR3+*NG_Y~fKtKFJaqBe;g$RR-l_viG5Y~xaeG8;;inRB?M-+~;@Xzbo-85a zQ!~I%#wv{pGNm));t4y=%l2Wg?FOK_VM5-FcPAen7tkRV#H{nE@f4t$anrvb#PFhU z&RNz+ug%@M#7mrYus(&(B(&V0DGZ1)DLZ$2?mN>!1j&LhBzVMfZL#l3O*+7dv}#r6 zQ0atQGF<6mij~cQBM)P$;&;og4L3M{*hu{bf5Dwm;TE^C8a$(tP$y?1&dlpDF?CKD zl6PYS3XUaq-djd7ezF=$h`3niu$hzR^3so*|kSA-ven#<*WuqX$V zY#5A{Hj5tXYs=O_lKNJ3LZeS6-#pkJKiYEEGZnj}8{c7`Mi$ff*6TGtBHhU09(O7o z1+O_7(+Br|iEw8c=?cqX>t2z`J8D^hjJ8chx=s9!aDUq2Um#otm-X)I#kyGjUc1hG zmR%9t_W>sqYJuf2HxZQ_kwVHvM*dpn1;cOIxv$soS=NL;d%MP(WjA)F@hmfc1c-zx zQOD&RT<|6O-?FR^F?7vYwB}6`LoO%ibZ9_2737vV)7R=X3yD}9#NRu_wMT5e{&LGu z`@nWc!byN5tXCZEvfO!3#=CEdth|YAb6}UWK`DX1^ruIE@|fuGlp9Y`YY|}Isei$Z zI-S%j;iujANjFv+JUt?9QYJ9diIFN^G4mLSYnY_QX5sGI1y69)CButiyQM$ z5g7S1{NXWVNQ(Ln+B?k~ozj$S`a8uOw5D`u6K7BS0x|}?oH}2w)=HWjfC%fE*T5>g ziSgIT&8p7krJf#`!WJz&7MhX00@*x#+Ru05w=mqU^tpBunoT;CKpg~tnL*RjjD){f z+AHzlgxtg=u-Gj6etKOI2O(6;+!&gy2amZ!Ti$)LAQ?P^b$&cJwrP5m7FGw!5;EQ+ zi^t>jJzvJtyrF9Co!MEOPN&6J_07UyaoD9dA{J6*VxI>~5k@?B)-97|eJtFJiW_;y zH~O9EKIDnDYegaS_wZe>GcJc?+hngtOkGimg$z2}(LAOwsXbb_4}8S^jc`GLnN|Ks zxq|;17ycG||MmFqclTiguzbz+`_8vNHvc1I{FB2vGk{?TxIIND#!~UrT;#T7U$v`s zi5_dpn3B58e^vvsB~1tc`D#Xu-h_j)8O$X#g?$sO*22>+d%aUHxBS3+HJAb+m2_gy z@1!I*x;vp)5QF7uN=br944rJ>QP8t?v^Z5-xr1O@Z#UJF<9*%dBTvHXpI$yiWtnah z$#S>viEiyxrv5k_&znqUG_W}6hiTU*vpzQNUV!;gd7)=_M2B5*O-nY6_D+tN^~Pkq zKO&n0^GR(SFh?{D{2e>pCtR?%=hD132>)MoR~;7B*6vA3!C@Gh0Tj_8XK0W{8YG1y z-Q6G((jg!zAdMnOmvl-=w@65LN~v_+AE3&C`jxi1nILt=X#|F4&xf+zWcRu(7+5GT^AE=OQvk=pHCJm(! zh+O2WSQ7lXP)Azb$TxS4l6recG{u(d3sZZ>1xZjJ#7nJ9T0K-KqE6<(T-A4=Wu*Uh zeD85s?Saj33opmV64WT&inNIUUUnDGC*sjLX_TRiX>HgIg|Q+CE!_b5n>VN4u9Skr zG4xk7W$kxS`C0-Mut!0~H5T#n&F_?qGiOc0O5@(*mRImoy5>oilqbxQmu4?SzO8TZ z&K=#p^9%>YeBgBawZ_^rg)%x2QXW^Dsr~ZEhsA0cR&b`e42#wa3?_d=jVIA903;^3e&M38wHGPaS)@Q=vzFB!X&Bsdvy<@VhYYnJ|9?2aGEN9lID5w`oI2>S3 zmu>|SGdZQdMBNws-O?AaJg=g1c~F82%5h;$gr1o;4KA*otMh-%8UQB?5i`3Ua|Va395@gUYngmbKgJ|?mHZ^ayj8M}yHr}GWW$SZP;Tz`j|_KQ zb@=|&nsxTilixt0hTinRJ)4>2_m4}fZ~v%D|0ZyxLFyY$Vez*Kdi&?30g3OOiA0jueTJAjY^rRMcnRU z`{2{N(cYJbN~*;4*yy{3)xH^t?iTkHifBg{Kludd?cjFMAco7Cf7imFiLkE&CPBI7 zW{b6($Tn}@54I7@X(ee}j*mmo2A*2GX#r#;NQ*!UE^SI9wTV&rW^uzw%Ug58!83sS z+_m{N-a>W?&$Fu1AwAprWSBC2)mb^OXnRlH-A7zk-mO7z*ZYjHepGYxR{oN}-bgb8 z*fEkIe~}$@xO(cm?kkxt=dqctE*Z(Fg&NDFAUM@ktk;7mT$$iK7OH*kn`&{fOWp`p z80X^+PjbVLyDHY~MYTtF^KEYXssT^H?yAK+XUxP6XC`(yGlBn3&$7A#VMP%bJ{0c) z!dQa(`WG9opb(4(N_~Ms^51$z9PJHkE#Vuol9JqSrFJfhyCVaM|9YRW00030{{grU zNATb|GA}a@vYmyevvRVW7Z1DI{O5nr&nTg6mxN{ED*_4w*VF^GHHvC;+^&*?TczC- z@c@?SREV@|#H$*~>WDRDlG)Inc?&t!!DvXNsz-r@^C)A~ad~?!2PXrVFI+I!TDfIY zmVb#k$-cccOli4U3)e9*PJjm|M<+`YKQ!rCvZ>tIP~3xj)S^^8YfQUR3UuncC z6cScZqtzwgvc|?vGw+M+88zwluYSdF#j-Co#JHr?J=BU^`~Velq67b;n4?-o#UNmDQtzi;z4C?*o^ zU@@#{dqXp`r)8G+nV$FCOq*nfXcs^mMk*-t><;f_xOB0 zG}z8w^>#ioBQ23JByqC{zjU;!{FLwR30yCeZUsiW5Es~DDG{q{BoXgt+1y7Vi8)X2 zXqAasr&w#dz;*OXr|q2W#l|}5V{Ewaur^!kkVJ?=DL*8QUsSqj6Br_tQ^=jK&7qzg z%-M4@dHNYBBa$jMLD;Lykx3{65?r__2it;xn;rDq(MII|@?$m|)rC(DNB(Y6#uQm1N*)bIju!0ESI!(kUj?BPh_m@0hPs)JJbkXDAfxJ36#Gw2bJq(&_N<% z;608EyBI>8rEg|wXsl!P`JaHx?q!V!bY$QTRyB$kW2^5!LNYOTqa5AU8mQ3*!y%RNXH+++`3G1r zdZsmKzr6VZrA|QoASp+Sc9QxFcbNb zjl#5#bW(4wx8;G3bdyZ7P@Rn8t!=9VFtNtNX=vMruKa7!zX;Fz-kRC}G;z3*9!|aU zA#~gu?Fe1sk-bV#PL?0d#!XzV8Om(E=fgvvVv^%xmnuzSe&Y>HDr-RQ;nADv*rI#1XQC}O^FU4L&p zLc$NXovpr2OgtyGhcV&O>Vaybo81S&>g72;GmN0QvOPj=tN=lY+$S9OP@nb@JHv~g zgaduSEx^XapT_n3Y^1=3nn&`#P|- zT{ZadSr*#ULfE$f+&(BsB-_L<`FIP(P(2_Y#2ezWqr1s-ji*ZY6941|6p6|^?Tc9z zpz_vEHC<&P_V_FgFowHD@XK{aboWxA4XaZq9lHI)A_F+$)_;4&;Ya9fN&ok8RkAnj zPU+07w8P5(fW4`hnRR-~BvdQHmMyugP$QnmIr$(^0*VX*H& z$j36f9iw@)=sF4Y6u!l$Al?W4P6fGFlg+n2FSLpI7hxs@aZ!#yAdDs}#1bFi=yH{> z=4X^D#}hYOh%7Bj2$xz_So3tqhqHZu@gDsVt9=f0&h-I^dl>{oJ*BMwGO>aQgu1|2 z9O-^lIC4KNG`dtaFLTK_CEPEsAGAifqLCMU64J*~!iR`g+P2iMZ~36|0*d0b8%||Y zvw6M+8o^0Ej zb4P(u$w!(xc(}C~BMb*paxQtbF%60NA~G zGGM4O7-Tk6d^`Zeo!u&l(yI$K*vjCLEde&wkBaELv&2`ED4Ql7B&a9p*l}J3#k=2q zBY#mw>;y;%u{ab`Jt}3G?zCQ(CJCO3Ym%-_Cp(UFR{c|r9B+XClwrQyS{JY>?_Q=g zTes;3n*hV1KVh2MiDD&UjLVHuOJF7|=>)ycjBN$k@=ox3d--gYm){v2+=kvZN@AZ> zbdT|n4QCEIAW>6oX|f?vru)BMlj|xV0!`Pf5M31+*PF$>d7Pjn0v5WqjYm@u| z@In?5^T^2ZX(ZzbgqWS7EKbY5;v{_s4GLu1toGcMjCqQ$Q^UT2#6qrhsr^zqKsC=S zwC7`yAYr%f+Ot*Q{$_TXSKEgf&o9Xi9N-=>Ne<}9rRU#2%%(wyiaBFnIcrq(^L#O_+wIU)zY@@ zvA{FM?=KFX<-yWVX(2}S3J81nB0Bt;As2pT5NG;Dvi1JK=xDDGq#xGxyuc+u4|Pav zWC#y0+`d;LJsTdD3MQcqy2)R>aW*{*pZa)L<`|L}1tT7_7Jt~)L{5d-@Kcm{)OtJP zo&fa}#jlua%-njvh05Re9IsO+*FJNfrK8c=TfI=p;dHkyKb=uNbx9UCNEcX`7lKp( zmuK{fR*g1*@wr{s zZS@y7LEFpyrsZF0WO{z(P+qoA83J;j!8J79BoC|O=J&o=RY1tRoeC^pe_jS`(?ru; zWj4%eCADU32*`pAv5f4^_u;} zkB;4}Ph6so3BQ+rS~Sz9*xou`xhia~3is9JhP;)Vy^3z8fwwpD{c6^D z>0zG(&X^&AD?GP=C;VG*E`n?oL1Qs+-$T6G1k+Y&FDLR(b+-oTf<0(0kOcuAo0f|0 zTAL$cV2eSXsry`>y^)rZf2_rlbYch@%y5>twHuA4MVZH)THVG2`$Zx1^rKy z8ej|Z=bx}s#CCN=IiA!gm~GemCXisMxSdco(7Su5WbPuOIXGr~&K`mhTp*B`Oqm zluft5gP+Y_9v6Tkno&@vvY9FHHe6e-*DjkjV%b_DZFx9Q{*ul4(=-O=b9~H8eB@#c zIC${TkuVQTW12R`Emz}sam{?92V;S5zQKC;oxGqEK_hJY6MS^1_#~A6pl%rr*jhee z=76g{Xd1YTIW+L!ly;7q+Pl}R^7#pt66%yJaF>yrhvr#)aGQg>E(dQ;4l{d9NBuJT zzoN~zjIp~&j(h$gZ~nxBOIb&1GBe9{O9GnQB@p@a?3S$QEr*;|3d2b!H)50&gH4Pm zw1XYG9GBG9!vppc7l<53-IK`0g7&1P7s%5{_)BHD_h!5$Wi{;NXsIF(x|e<(!lqpf z_p1L=yhJo+e8yiHtSCQORd4gtzx^%?#JjTrmPJuQaK(fbyZt+Jm|KZ>|D z#*$UZ#$w(LJsp%5vMsU^6olUhkggrt%gda~mgDw|o|&+9TwK-6a|UAtzpLvH}n>GPnHo(GRi!HUWS&F*W*Qu5W2)X0PwcXaay}>SUvD zXyokTWN7T7Z)|U3`rn}-cJ_9r|DF0f{@vkX>SSwaXX)%>Y5d<;Kob)H1bGz&eI^Ed zK{*k9K_PjyUoIpWOFPrwE%?9f|2;6j1MvSQ4gHV^caTVssF2tI3evzJD8FkE0Jp9~ zN&pqBODn&#V!&UPpnCM56lP?^70)?;hYKFKp4Dc0iNEG zL*+8f$=lXW;^d9X@zlE-as(2QLgVSW%P(Y|xNoRas z24FXdH9S(5OQ|_yoq_TP0t$gBaAd*qtC2Qhma)uHSLa39*#Y>!Hvp3OVtk7P0FaIa0095L zH(+FHXxozErlP$5Ji18GJ`jT92^;*&3`GzxV6h;o0Cv_51|h0|nH^40t};&$nXHIN z!=gAMI2^_W6&`4W35tsgI*RyYXh?HIvIPx%@nY8P=c~D%>pXkXdBf?o>+sAgZGOW# zf)Op0@hh>Gl=9C$q~E{}C}~u5B)qtEw9I7hS8;UHDFZJP zF(;P>EjKe01s^jPaaNLWM9e%`tjy#eM}&fzl!}Xtx0DM?>>w)Wfk8S3Cb3Jv{y=*{ zpms5GyE9zySo$GMLb1CYSQ^}0sdFJyQXydMKMAPR`!;KYcw%xYtRPKSB$x5@c6nk3KZD776Fy9F)iUF= zeG{%EvAspeLvtCR7tAF{5w~^n2x#eOzQi<0fRe zefVSsz9##Y0wh9V{jV&3LInB7k|vHYIsCHugDT%F5jdg!i4@*Q5Z;)u0+pzjG3Ng; zOFQb(fhU>*yJa*>V}0N2(~4qd8|@fPwf^^-0w6QzM!qf=x{_ z0Hg#9>RD1rOhG3du-kd&Zm~R4@+)krZ9rs=jg7%AxUjhC0*;jqN)UB5Qd?yv(9Db^ z7s6M!5R$^sL8*rmO&$%v9b!nw16v?U?-NPS{M!%vbnfT4H1H=vVF|?75F&$P2;|o= zq(Ws0z}HYB{ipK<)^H{QXbI5QkRn5B@>y@CC~#XtR|eVU#N1IKCeWY)uIfoR5fIXb zQL9&~5>+WR%GAND4i+FR#5IU}yMeE`SGXA)F+d-OC>$`7L`)+TA(Uh`w2n#H9@v>n zF*FA&5Jw&M8E<96We$=kL_Dc7Bwd*X8PnaF$)C44LZ-1qX%LB|8SYAmei8%EgEWzleUr8(vkqVdwq`{J8jhWW=D$wU+UP(0jmC5AebMj4i zrX_>KoC9t8_(7V9L8n4w29;whG!l8RxFi^6L&+uT(Il#YB&vxds*xnBnIx*AB&w+- zXmCl?U`f<)Nm2oks(xQcq$*IPDp;f{V5CkQ5?4@(YC3lbPmRPtj$?!-q*?ND$W>6L zeIf7*Cq^LZK7Uk-LLFa5b0QtcBdDl$_<xggT%{Qc)gM1FDL(UFj#p*|AP3 z!(A}{tSHoVr{D>7aE~5`KT!rSDb%&6=m~UykItjs7zS7sXEdhB5o$x6Vuro3{%ugK z>P$(Rh~x)BHK#&Qgd1>D&FK;469uA{3z$dvheEh0_TPH|N=oJD69e(8)C*DML*Foj zJq|Oz$y|TlNc%@4nD`UDc?^lf6GoyOC%^|rD-?6Y4Ir3A6P0)*M-m{TP|g;4gJcv+ znBt`nj=_jlKAa*1PAQ7yiI*Xm1Q4}&xBv>KQYht#4?;8wAsXY!5?GK%vK-I<^3o_4 zbH+)S1h41ISO+K~v_hF~Ku1S1XeXc1FklT_DwKBi6(g9%q2cMKqe3!P8?5M*7*4BV z{jU)>#580QkDnM23d89$aTbn+W(|e1g2A>4kTdvj2Gh=iUVGN*Pdx!^?OZmfat7bb z22UOO{wc@y{AsZ}{ZZa#(9mIrL0^R}8vZl*`csKb_9MMbAW0lD2vj z!K`i22;nT4@dlJ6oK8JKgO<)Su%%$u-iLzFie;(>ErV!yO`+Z1myB>6z;ppx8qFZ@ zD1)&G&w%YB9e6LGmCs`$evbrhZ@$+(g(9I=a1GLRdlh|X3#NSAQ6IOb3l;_r%qP=N zkK^L~hH<+<3cl030-<-tpm)ebGj4AeA5B_=%0u#x;|l@rAT6Os?Y8keHJi#J%0B{d z5SSQX5D@uII}ai{_z{%L(Llq1fdR6ZeolhuB_E)O=wPAG1VLX=|JnZFUizJ*EN0-z z9RL}WEbO*LLjP7Xs2cjCjnxp5w?nTPHB;O>wC@L;fV;JU&3(;%osHP3|KLcezsff~ zzV5a>UJu!&_tYPHy;GJg3x{{7p|@6rHWF8q&Tsc>=jab_1okBEKMnPda+yE&pPx~e z=-}3M2?3b`T1G>)D@p5KpTKt!hRikK_P;Vc-pa9GEw6)co#(aY8K4_vGd`kD!ze|n zo3>qM)7vEi2H6t*T2t|?3-PQ<2@k+R5O+NneT{)&51lK2Th)YJ=K|;pbQ8EJXA)em>@iJ0#vJ#)>IF?P`>1aGHUGsn4bqB|H<}=u`+(o;S<6}DwT=Lh#J#XT-v61VnA71Vv&YI3Dm z3IzL%;`&kRK<&DDVJ|S-+ufXtCDuia<~E`&Jwn}=SIvuyt9d9I&*{xIu<*V-c#ih! z=OU)r0WMyLCaR@{&bG}zb5VkMJ=XKl+~eCvwX|XQI!*V|pIX~*$46fej4#|f*>9H9 z+h!aNqijE`dAq|Fs_x;S(=a~Y*BxoCd?8sCCzwRoZGyHa&PAB6l{_^cYqpnV{^aJ~ zr5}7$uVNfWH;G)Tu`L{->-H#On`tuL-QPVb3g0=UjnTlt&$zK@(~n$)Tzs@qB)SMM!|$X1)GocsG}t8&r3GKw7W$Cexp2Kyc{N;% znDdvO>>P)tYaE<4a~&;~-oy9)v;7y)Y-$>~OQ(Z%p z??(8%pqqnmbL!MQV=Q{#$Dhg;CbO>J?5CuOMj|!8ZnBrTE z@~&?g>ZCg=W<1>MKO!_%zxSh05PM zJ3qzSTAb9Equ(X4;_mmFtwRV!*5N1?V!P=^J>}CTZa}}NgfB?rHaU48F^^jCE?2N* zaR_E)mZSI{EXSX~cN2B|+`Mz)k?gi;RfDE)4i^X^wOU=(lpESWrpEgEf?4^w6~6FA#iPh~gS zbK{quvp06)7ji$wO0J_f2+TKlD~30(hy^EGv(41~KKE2l>E9f@s`%?{td$}%Inj;k zI6V%p(w0%hqsg+Y^XTMrH7`t^`c)qXu%lD8$ZnoHb-YzozF8%4+k()uj25Ylxb3rQ zKSO5X$#wo+ZL&deuj}PZC?0(Ys2yqi#vBlC{Df|wc>5Q2R9Z3B+_9*hj?0v1dtLeB z{zlNhwv=9#txA2SA~>HKFSxzo$h zzWYPS_kL96<0>0tB>QU0Sfsf%qu1D!-grO0-Oxm?hwf6&$Jun@6%qd=-W$)Q+SX$p z{imX|f`sxj@_jX_G9O<6#O9jKObXY zrz|j{Gqp|miMoVOPg-^ox3b3X{k?!8+7V(ehZB9`H1cU#QofW>y9tMs8U)3y4U6*@ zudxZ&^yepxWbV_1-9}-A5V1zk>tHoSXqFTQ>ZPqKl3m(mo|C`VHG!%-K=nn#v_7{F ztx2C9ZN|VC-@1dNtnVSFGEcYFAM&?p+K69#m6w~}z9t;@ttVe&_^jS@{12jCO?DSv ziw(6Mw+(=Ey&P=$ANz~vUH#7IAxU1PR!(55JEV#1H$aLSQl{^qzH8oc7b4+yH?x{h z!14x3;P>JssE|ZrMr#4quRfX9T(O3DIRiWse#Vv|fN;#aX3m_VO_8_Ir1QY59&Q+e z)QsR%9>U4TDGT(0BIc&9xi|bv$%V{+{t5zl$vq4efo%0quLVe59XO@&!*XnNdv(6O z;HGeXyBc}^Awu5OeN|ae-tC}NkM0gp^?)SD@=kdfdyB^?4U_A->Hx>Hedzt&81P-fS)(9%MyECJLKCNbfY90BalEQ`~L%9S4U8`|!sDwn$uaiUe7!QAR8;3>4 zR^97;`d*|@7p(MRHw}ZsbzD`ohO|b8XX?o=O&(uUwMsAz(;-25Q^9Y=&x@?UqFt>@ zL%Z{E=>N)jj?^_`JqTfz?N&DUWjat~xtT*!-ZjiwJO|6|BN8U2> zn3W70%3B^+h+|LP5d;X1$@co-%kp&3VLGy@O-H9{jnS zu3YE65p@mHsDGTdGp#V|@<>a=%ie0-Dqh8*+;uVw%xxRVl(HJfYpr@}WnY!hGt<0B zimt}-M^B|U?kqTkVmflT>7?xwhW&BnCcN)KiOuSOGsIzSu(8B)fhwX1R(q<1vi&6? z_2!kL(-wU4{$!#iAXS_BD-{g4cr}04dyXCbadeB|8O=?rH~Mt2O|Os<-qGzbZ6te3 z(FH53nj%_r|1+p5w`lvgM>1h>ysn5Zs<~uOKUWXSWyP~q_S-U-;nZH(7=EeL#>%BJ zTJLg(En}u5s=KJmB~rZ)Jd1`pTj=OYW+iqVS!=j|pO+r~l1I|R(&2p8I^Y;`KH<1y zSvyGtU&11FD23|}(gB-h1@yNKADDid?I~{~u~6cRc`Si+t06pfn%Q_QiQJ#pFP&5y zFZ}hl*tmvGDNTIe+AhuJ@4=O+xe`mFbJo2KHuPZ2cQz(7;XI<1QwfajH7bY!C};3q z7Ko!~BFIZ>CWyeJVw;x*J>yCQ4vb!ixSX}vGxekLeX ze8+m`EQhQW>(8w17&JegkMfDuXNzQ@K5<)ss|!(i(Jd_IaI6wbx+;a!A_GYyTCJLP z_O%i^hR5fYyRp!{qRunJupZd7_GD7#zEd91ZyUQb+!(G=t?K94mZ5v+ylz$2wL9qi zw0WH=-Gwp7ONb%bzIg4*sPZV}B|6=CkfLe2_ByX5{Nz}Edg2+3A>>CbHtlxy9rB}0 z&Mm`Ov({8t#SMwbrtJot+=G#%D@T>pGXQ2+5le177xcm(1dgzUbdQQS7 zg$C>*u2Q&uE@6&S*Cx!&8zy$fN>|bO*4=fopfG36__^!9KvfL~lP0ftW3dZty%s;V zuv=NG?0W>UekQ*ZBTn7dJMMN@YHAn0zGMC9Z=T9btAzX-U`vuOu0819P9j%vGI5=C z?wi_vVJrE{ar;SHzV5%d|wO zT!oyTH{-rOb~|BQYxNcX{5fJDk;}@stT<*bNdK0P^8yWPdQG;Nb1_2W3;em!Ams>G zAS52cXbi3mafm0Pwox>}~+JMdpnGx8Yvn+=`59Z2u zJ;ibP_T!=Y1pi-ftP03tVT$?}ER+HO_zyJv|L~yxf2btge+XH&Cb&cLFy1Vm_w4qY z*-44p0^rl@EnUnY@HFB8Wh4P2w$;Ru(xFsWXRyc;dJIKF;aa^|gF1>=%t$2cu-^O{ zb)@O>bXUg9?vHQ4=4D#^OM1JZU+2eFZ`wAEPUBQcax;acZ;o37d(T!*a&j|(uh-3$ zy=^#nA>qmniuJ8{V8W^1orU_|O^s~7MjwQzR!3k!Xsm}N(Y^y*QpQf*+gp2e%vzwRax?KnhUS>nvBDaHMLk{C6bLMQuq0dRpRjd_fOy}Jx9r(uk zlX0ar)=S(SHlWT{k5-VqAy^$550pX?PZOtWDk%sQ^t^lI10dbLtuPrE|?|NqveA4Xv=D zt4O$A5`A+_M99~PN}0OFN)t>?qAF<69MT1eH`PhPYlA8b^ORx09W{tUvmE}az=S!h zQG{w6YFu2P3|?g_f@yxjukF4dM;V`lLuWXL!bt}`S|Q} zWCkAm;gD0E+F)L(2JW23!eFJ&pQfoir9Wg)k9!5X8)7*cN_R3EEiVFyy5PM?5KSs; z(&WjSbD6fc>WgC*2&EBXM)5>k))U;;L)_L=+}1NI?3OX4k4p#%p7bEA+RF&upRw5` zOQwasVh%pA5yfW=>D5c&*SOpr&Lc?LXH<%xl3E0W8Y5&8kC%M19WHW4MGZwk?LaBw zKqbqDYjRp^!<`)y{#g$=@XjiaeW-}%l!C~qL;$8%zalfE8k(?$IXncdjzmY+GC-b{ z(;L(23ZEO$efM9^$<6u8wRvftk0BIwsYY$sqEn4_0|&1aD5Mx|pj9ck46c+CFnc-L z@oE$vHwa1V{NOVR7BXH2IQxOXWvkLukMS_%Fh5)tbZ3shg=_Jo?P9)%agcZ&G%u`- za0xwLg60gpJxlgkxYbYOjaUFT92x)#1g)faq`^D0&m3S0U%>oFcHRZTH|dWPIf)lK zN{AE%fT}=y=JMUT0>~E4*onUp9Kn)IH1aTf5Kbl3Zr+@x=ho2EU&vDrxFYIJYZGiv zvD)+rL`}nx1ZrjcZGA2dS<%BK;#O;=XSuRVWX2Niyf;;3M(sVA&< zvD^fDmh=Ph6qqlnXc z5ac67WeV8nl*Zh7*jJQ?e>>u}BS$yWr> zro@#E3UEYqA;nt{v?NEh%WrinZ!Z_ek*CK{=l}JQ9U<*qVm*w@6bQ=7B}r)RF+fFg z6i6Kuj~F4R#naw^&C!2?=@7IdyTlR{ZNiJKP^3$xy2K(Bt&$@ul+X}xRWjm^Bhe~l zO53>@=@Jh@I+|5GnwLA8zkgOa9n+|2DfZ%Z7a}W!D*P4Cf`KA=#TrTg@G15TgnT-h z$5b*_DVR$!iQcdmi-AhDq0;F>_%x!W4_^@&>EaJWr6TQ>l)T*o^#DB!mm#|cUOBl2 z;6r?G7=++klq~T&whYlG#G5tL#wsA-(((cNk+R4LM$#Jfd_fAN$*-@kG67IZpt#|* z!ck%s;411VYn$Gf%DYC9I&5svo6KG^N>?Od1k04*1H4JbdU2$-6cOgch3`2+=R7ZY zDyG!Ljr`=J5NXo#LHZSul8HF90+~QYB^Y4)8-9?rS^HKT`(~ho;-pQCMTr^?SXCc-l3O+wYepwD6c;^YR6!3FmX;?MJJ-`aZ z&PbSUSS9P>1I=Qdt_(o zy#wVaD=7$y|47BmG1i))-ZFdm&-phG_DGbdmhAhpxv9*snNspRk1#Pjk06~~DO__y z*s8xmQh-5LsspI+qY9Kxn1!7o1a#sv%?Dr=z=4oc;=G~8ZlI=|rr8=krx@fB6i_$( zDP_K!$_F6}j2G(59#dii(cyu?x+Y<%4!=|pRrBN_P2#*=K_+A|I;zziQz<)i@B<+y z?=W2=3+M8PZn;;TJI@ockg@I&bs5eGauW=im$lGwy>fpk)kTu1+(!C~P@UO_E{m;x z`+zq#*&X~W@sM&rIhO!ugEKw*TZB)AP~F*(lPH zC=wV9)f$9MUA+}}d$BL)gCKeqG9PN?@x*f45K|=3f zCRKp#;3T^Hg)E(`(t?x3mK&U3n|j&1E&EoI*j_nMa%kY;bS;qB8?s4giRCm5wR4ImHk%%ISG$6ui5W!qx$E#yrM;t!r;x~%7rpRX(;~SCJm*v3v^%n~6UEexYT{ajXTbgdk!%;_ z=n7Ma{VWm>2zCej*d3$TGmuqSr|rH>u!B(O23s7FsBH_r-IUq;9f0CckYPwTc&EW!JMLP`2yH5xjk=KF{zc7r(g`qHv{5D6t zuN#m25i!U11aD0(*U$VxTo61C@x5GF?*?9QB2Lo+v2c{O7Ebgr*ca3FT<0-b`+VXp zDSjr8=uxt2NitDhQ{sJhQ7tmDhtuTfY!HE$*hks*X;!YMBPR5z7R(;O+Zx0BLi(7U zIs@95@f){bP-|#W#sVi7nB5QAwF|iCnU7;ud@jKUN_N=1I>$Z??9ADMq6gqi48lk5 zWl8LI>f~RQx@MUBkB6_$V#gbFytW?UV~AuoLwbj}YurUb%BQHpmvnGX`s;rDZPzM< zc57cM?Vh1F#BU~}?LfHE=45aWjUL>+j|*dg_7JgPk2i_?uv5n1yhL3rbxl++SaB=T z`^H~Mh9P}$*j~ZYi~T7VeBD6v9z((m&^E2dSb@jVoNwSyS_y^Cd{vLExi*?Otm*+q{O=#7NCXp3CQb2 z-sJWgqr|U#ccD)~AmjwE^T!>i`}~02`uVw61drrdbgh%sfi}0y1^knEry@M(=pJ^! zfw)Lx(ra~Wpv--K!1|x?j}?-0F>-{D?ASuoZ*pTGen=gQHN6a=ufK_MehBZK!k^X1At7aw`XIhGXBwhHUGjx1);rlqE# zHj3)O;R90!mu8_9sA3@$1<{4Nx@lV!QWaGaB?Y2wqUUNG&0kc@wl_aBoLhd*e>!`2 zz4=aaD9RRo)AF*U>m{1BCr79kdbl_85M(M zmk6woS`do;%g0Hqh(JAQ0)yVUfmFYEgZ;oEBD8W}$Ic}9g8ldd3l$y#C6JqjO*{Ln zFazM{=$^}WiWR#BZ19`lQL!q%6XL7CAqV_GNP=?R;i!&~!TwUb!mMqr*#YA8q4mKC ztm`cGBA`|Ih1}}*k%dhoMgoS#3#2Sw+XPi_97UWIDD?!A#**`Cff;PMi7X(78^lov zFa#?$DoTOE%qiw`On{*QLs&XhGTR`;t}SAeC4 zFopC9+YoBJakD`nq6PvG3e-ntUrLx0e9*VW&*uY;08ar^7;_a$NeJB{{DxM!cNHcU8 z!~M=R1eqsaBUnMG{z*G9a7*WealOOJ_Z`pYAxA2V9|s{H%8rlL0NAAMPiO%02q8@W zv_0qp3jQ=Eg+K)Evjyn~n~^x)y$}5~-pP&!=`)4s4<*jnFH&T{ihv9y`=)p0Aj}Zh zCxOT%AveBn8&9~iZCe*u!)Gy z!2o8P_qUK>NvvQtL4p;Ri-zn6WDGGt#wxMn94whhNt78tyVYypAGA}g-& zB!|GGIumBXiSO@M^}SOZ6` zxNq4fhXtZ6zHl6KUJye-^9D!2f~#S2x|b5v&1Gav4NB@bAV39`?Kj6H;>2bi>lwQd z9gPWvNZ?PmN5bsiAOqprZ`KO1JkaNl04jrGkivS!UBn2L0T;Sz!|>(}@qnlgkxOT8 zyk8#UFFJ+-l;sd=}BZLkKKzJs6KcI%7S;5Nms6QqYkY9EF-YC>UJVCw*A_(}` z#h(CvS0j_pmqmK)>}CUmUIm0Z28D%x2soF~B%iF3CdDRX3DH`l0%-m-Xh8kYHt``M z!1A9?OUnouQ2uK96fTzpg_Byf(KvzV6I!)^E3yMNCXr$#!ErFVDHK{HH*Qm7<$V(9 ze&kImBtRyq(EW&h@SnX~j_nd8W2Pt|;zpz3lcp$O^*T=e^F~u<*KrGxJ{TrNJY9@z zV*bxauuwdBChUlTMWc`Sn$i)3BE*geI1f293DHA9Kztyh6Djh6Tc6UYaajf=cAVw1 z-qn*D1q5)`!0i;_KmFzV6BS866HRZMBKX?5>TFA&uq!&G`0 zD~$~b1Y=A%z@a%RKopA$_eY;cUam_(&U?T2nbcea1WpJGBx+7=NNBmlhnalwNaewA z?(gEEig|QO~JU|Mton9lV<0!(v(b9{+Gxp{zPLw3A>H9(RFDTe+! zLN=j3-}sNJn{z5E*k9$kz~2N)Lkr`O1{9j0>rSk|w18zn8%AjBahRpIBMgn8Kvaw| z@qQ_o;6egy&^3_Rget<$n`H!4#2{`VI*^lzOCVKcfPSM4U95CS4-Ilkk)s+Q?9Te9 zWrOW0*4lq9ED9uO`n{^Fg zM05hAsnLKuH>1eQT?ihiJw?DcD))T*9n>vm1uP7n$UVi8=YstNH%uMw0r~^w+oLFe z?g178p=3o=jvt#vw8+r6c5GQqbK7Iea#;S-LF#}_TwOf18Xa-e>RumH z=Z71XAEk#B)8iX{-s()T@+h?L@1yPRrzA`{>D{lLg0=#pTgmI3sL(btoQEwoTT7oq zy~L9)npFU@&?U_(Z{p%hchmm%U$tQUt)VlF5E=Hlv@&5ja!h)k| z%kC7-IHO|%bE@F+?I>&uy(He3WjTAkcZH&oe^y?rMB9^Tt|7IQwNdX%8*?XFztm}d@(DXYft;(I$}=hT1TE8M-SLUQ4Ve%dX9aZ18lCCSO- zA)8=cVYQXuyGtjga#gdeIuSG;uCA{cmHJU9qQooXRar{TG~Su$rHkmJ8oLucH$PKL ziS6@X9jyp&7-i0>m9my|ok-Uu-o>60RJspGZ?Ti1cd=F{eQyor8i@+YUYdT2O24mOOOj^U~}Ie z%ifY~X%+733}fo0`ynXIBYOLszpv0$yjo**?@IA7_Iw;>opGOphJD;m+5hOR-f?K# z@cQder)q+o;okNU_)lDQ#TP!*o=IHIS*r2eC`trK^D6?`1Qo5SZg$2NKeCX)jOmz=VZr;E)9{3_ULE-gtS>z9F1kqWJ(4Y2Tr#(CC#T+x71nd{~t7 zRJqn4X4(U>_*|(8G2a;88qwEREvvH*1D}LuSt`fUYrSpGgy&WJ*S`+DH}C6lZH+yA z(=zNoT`bewudbTHB!py>$u>W6<4yZ*Ssv|UHoo5tIo>@?3@6YiEPEKUr_He>mgP!PIkO%HUo zTzqCpA+=z@l$^t^Ho2;KXsbric;D5&dl;5)%V{RG3th~`1*WTq1Wj0L>7$0*7 z--H*WSzS-8^v)8OwmFsbSl1dGyMZ_+g6$y^|9?iT*a*V9E) zM4l-XYT#W@7iOhov)k9%)KUGtx={F>8lFiPDMga%!nRnNV~(vfGTtpu(t(|%RX)zp zQMlR{lO}iZDO@mvJ+t2dLv;LT8n3ecJb=ev99LhlXIUYb$z9a+R0xuYVVR$!-OjEP z_QY?|Rege2KLh$IROLCJJuM;}8cyiOaN!ZN#1|3%RBR1h~sxC{gq-?HW9 z9&X>o`r~T+uVvA428(funLzBJW9Hn@q$zw#)(F&lQ?J+w82z+TM98ef#m#k_1$|?& z%?uL$BjNn>;o8fPI>>h8MUn-jCXdx~!#{P5EZdm~pH2OyhT*W|LjQ1h4mepb5L2#QgCTmso7- zWN*n~>q%2L<*TFv`#&|(dd%)cBjQZu=@#}|@~wI4{37h#5~nC0OTsx|vh-aKa*cyJ z&pBhI!q7k+Bv4OScPel~?Lto)URM2DPF;T+ObO1M5Un>l!oYDt)brCL4u3$dYwj^s zdZ%t-=c(ln&Okt^9dzN=BkCwd4v_Soq{jwa$MXqa2HwW#Cc}d% zCSC28qiZibGPO~#tOuo9DuIQNk~$tdHCBsN-(FWi)eB2jqa!`9(Pzq@gjcI%(DpO8 zvSO@7(Lkl&(Uds&lF`DlrkiQ`GlBSRBt`R&;D#z4&^cn&*s4iB0{SoscbI3pj25#TaVjiOIRx&(Oew7b+z8O zUwFYzWc}UjrC}{LU%OL_Wo2%&Osg?n|5G{d$ZVFH;+(2#OV}n#z3WrMPRd(Z#lC;0 zJhFE&mVaq$?iE!_Ej{2C#t?F2%kKE7k{fGnf4j>lH~u6NOz53F;e0P0mzTHj)?D>T z_VLch=I1Sk%xFO7^(H)%R|N6Y1UQMQ%3` zr^db4w-?AO>aJ;X?Q_vyO-&Q|vw5jg^r6MO+gW;2yAA)ZnE_`($~>1?4wzKZV+5EF*zP*uBV7b%S*i1 zOwlQiQLgOpacIr|VeA}&M2W&QTefZ6wr$(CZR?d^*|u%lwr$%rue)b4-J70>TxDeB z;%@TZKhJl*tA7@Bx+9bdgX3p`&Ip#9=2XHNW*aXldtJ*$Dmq^Dw(+4*(!8IRaOdt8 zQTpxTOTC$OTG_W)*u|}sgD|!xiwt-e6tGvhhj=P+Qrju@j(es@p|o%}wk$^JvLj}C zqZBj0r4fytD%cFPkw##5xz!7v?|(&_o^U>>^b}#1+|Li_s%FQ$RC{SO)m?cP9n)Sb zI;cjMx3ip$NsrLQonbn0LkY;PFA}Jp+P>u5HjY>rDJ)v&^p~*`#oe`1I981ZU8)f| zSV&75>Bk!dqf=6DGg39r?v{yJy}0PvSNAIQ&SJpV1)ATralg@BK3UIGCv$vWuYVJ) zQ3>&#Gg>7t&#kXvevY2}+P_^ca#LI?8+Kx1G{-E?P&UlE1<%o+`jic60=o*@^j+FjFiwmu)fWJu^X zRc?8(y3-3v8xG$`woUBoXUHkKWopfh&I{xVQSL5 zhv#hNs7<_th#aT#x=P(9xmP1tIIooRL{!Usi^@(Wx~cDaY=hkbGKYGbYI7n5()xS| z@2BK~@xQWubVSqRf1z0M)17%*{hcHkC#WS45YK*HI$^oaL9)Jy;?g}a7y8?1#&_Ph zmxFG(nV!Iu71g@^(bu(#KS@%q;#*lM>Q@AI+CHzlf~fiP*H8%09py|SKg^&+33J7OVscbd7fhD zwNlPqXmbFiTZo!@p?X`&(P7J->>hC4q?}<^6OKn!f}?-XhWJWyLU^46G#Oi<*CMP7@%Jj} zrY#I)TKz}D_vQkz#$`RbgMF?;YM8F#5rz7SlJd~7qB|YeMZGev!Ai%pR@cNEmX2no z5X-BAxQ?z-8K+<&Vx!CA*$Mx$CFHK=!TD+hP|;ImL)tt$!Pz9R!LhFBDtV;+9q70L ztT_MQr#AJ0IyMC<$XSU^?fuzr&J(9>#Y#a*J(0x6d*^ZW% zL`vLgO%AF+w>GZw=n}?LV@IWfrF5-Z;ST}PpF|Zr-ZLiG+3HuP0@(8ul47-8%jvl- zGv~{rj$N0PZ?rdq42DUMm^Zoj(EurPBNkEr)BG7s!|LIc@S&i>6+PJvwiL=)5t+u* zw$4N97?2y7)IelUnU{TlZO6dB%2x+JgV#`T7<=Cfg3z*-vdhpOHBS8Hv(*Y;#XoWh z$FjrHi=e~yQ@I*jxkrwP9`9?B>{9ed^!SN*ISNnri^c=}uv3Njq(SL-x$5jAKmQRK z`~4MF^5$5)#y=r9uBUX~xN;pM47Y?sp0ErVpU7|BcrqJ|B|WZ75QcjsBh<1^AJ99M z;#4K#j1>u^3{{szIYyA>{Pg|&e)O)nbmpD?-g@=b%{~3$8B1%2{Su|D*;)-QvzAJ2 z8q>82!7~go#A6C>zNx=Ai`eqbrO;|3?KG8xGzc}-qPffUH zO7vsMIrYtG%RTMaUt*YOI!WFu7!A_b71{B;pKjiCD-n#M3p?j{@P3k?Cok6S6@wRnVNKMio=jWk|z)opqr zI@RwHd9wssxGKf~m2XqUF+4&pO-lRx^U=P~Pqb(_dC%AzR}lugseSuNjXaAZu-->S z)2opSUB`9NdU|4hehZNf(9Vdqt6ZEQLNY&`!8Hr)3^6SDB9)yHiEgOLmUt6XxqFUn zPRpP9ch_0&zMDsc9Ho#2*{Xb`ct%N%ma)}+Mw(XV5$`egbFf=b@NJ55{$#Q1xGi|* z6MygdL=^lLjC4Q4R7`$We5v8^#}#wa6|;oHa`-;jqwmibRWawv8IXpPdKyz>7H3PA zB%)krkoXs=SFSOtDE)wGRq7@a(>_w2^UvjV66^Z#cCDJqjfecoZYZ96k=s0IJ&V8m zvh3oKUJSn5$@{FxB|=whhvvWZh2yeao}v}owEnXh$Yc1xuyc&be0BZWxi8epryrl@ zAxT0}s(p&E>IA8=ai;n{$;-f@3(u|xRjqjyn{_(?fSDhRo4Y#uH~vvPJ{)t2ZdbY4ZR<9_3W5&A`ESzS{viB5Ks zw+1sIuf=J!9loUAX6}{86E_jyC+A zIv>5eBF8(3p^eF5GDq;qb(vmeW?gL8X5*@3Da8N9ZiB4G>a`6fA~ayyq8 zkbpr{uM))ob7c z$H?OmuCPjn`xJ9So63$(Q+)}Y<(ebBGn799k!LM!F+}(RzN7vZ%cnkZ-+61sfsFCyYpShu7x(W8#3VdI`W3e^9hMml+q%-f-rU5>cfTdj~VnU5s@?P#-J#C zWr#OyzNvP9Nv0?UU31;> z<;2T2oG3fcU5Ek+ji^yn-_y~NC8?*k2wDee`5GZZJ1@t%vMTshfY|_}>F7}oZP&G; z^4;guS!cR7GPHf=PnK;Z{RMhn5GtcGGVQW50Lm-$O$|5Q4Ts%fZ5%c2keI`P8yz-o z73qb`4)qY3o2<;Ekabq$7jHm-UMTrOn1)Bu1I%D}$=%k&2>5I5DXPHNBgO#qh~346 zC(nX??ELG&r{m+te35YAZQG}S9P@XhRpkCICSRDUb~9(-zs|L>VbCyn@jK0hy`8-b z@s}`#AJM(wvufS%FB~lij#^OZ^^<@-FkIFb@%u=92v=WbL6s%-4?Z6Reyq478b%+d zugL8Adb(G!DV9jHPf$0zYvuM7y~4h;9PhfyTt9J8jR!p-IX|+qo{PLr%a0dh1)QZy4f7$qg-yDRv>-LWoHl_IK@02duF>B5dQMVOB;LRj(y}8D+PR;Tfz>fHC z^{J_)0jaG7a~%XiZn-+u)%|7Xr0fn}%{+Th3N9-i64{;`rW0JsB8BXJ=v$NvzeylV zD96(B&jSbA2`QgVNZNV;*O8uyz`OejOA z}u~Yy~rW?h|VzyniT}hdh$N0^~X|Rav9Du*l1UO6K#Yu+<$8p?a=@1910Qo$K z$25FyJu!0-1U2MB1qR`rs1{S82h2tza!rCr;4g$OhN-@b7!01$%n&>?1RndnMwPJaHJ>*}C zU&ckhlbYJ|KygE{^I-2??OjuJuq?Q+g*`S&??YXCL0otQN@cC3a2x~($4C(#b+*A^3tfl`4bAnki;7ZTk&9lBgToOEMO(1OH7cUA zE9uH#hr#rGF`qQ`f$8u6xd5|+aud$`Sgca9!ntE!jnXP8pZ{19VI^MUiFu(Ww7ADi zDBU1kYTgSv;)rXbpkZHr&X~848f>xSaOJVS6?`eVD6eY8Q6Ul#j3KNPpZVP`lQ2Wu z|C^FC)#IOQMfESw&SzM{7XuVUc*_v1GKRO-W>Qd=TDk9Z(>zK8&gIV7k=!7{KaUcv=} z83I@46CYWISX60n_9{OtTtf02{lC+{Uk{T`F#p5=sXzb#ME^nmx>)EtnHriH8rhis zUroUObLT&V0Wp7N?FI=DLSH#Sjbdz6FG_Sn{7xD+a;pb{5-`_EiZA#KA@1|TQJ zGr_hdrUQUxOkL&Yy^>$|ZF# zFoQUgQxH&YSiJvr-}RBBQg~PN7hL+HJrT-_Lj5{Ej8W$v(3ybtZ}sGQ(z&BNm6)~V z)j%iKL*3@6Qj4|iE9IB4t9S2j&1o`o>h5wUyP-9%46!NS$^0MY_ z?8X)e3>&N5H&9XMrHFx5KT<{_MDR|EN=08SA@VmbDL{p)fJ#J#=gz1Z6}=oj%ipal z#}$VZzRJbz=l$esmvfi%S93bnhtn;9;Dv{o!{=&=(fB|zh+vl(qM(x1bZW?z^{*TW zvlUPBEE*Cev0j!UGp3aEt^-P% z%%S;xP{n8z>9j(+lHxKYZLc*|tvRw-cEzQqF2zyQ2%9+lPUXphHiW&WZEzM~$+J&+ zUCiXbmguqqvz6L3CTr8mpq3VNL9~o9Y-2uJj7mWn+sd0=f$L&N#fc9qX|PnF^nCJ! z`9p`BplOT>4tkkN)ue@Jp$32HjBxtG^ZF1=QF2~Kr@Oio5e>_H%;<#UlWXT(I+ zG*m$XvFQ;9`bp!GaWoSWP{jS=7G`PrBt-~7T7}c~Ug^}S0~F)52*HMO7=lQ35Kx5* zX~U%wT{Q8aMGj4znzMh7f;98qyd!k>O+t7{NQvSrPk@H~NfIx!Xp9vUNCJHpb@Dyf z!^hmQMM6mMl|%pqk0649YY+PHnUeda)C_#7>nP>NSiF?!w;5<~&UohB*t{x=uO+ z9wS`tP2<>u67b|if)PD&B&Qg7;qF0PqSsKzj$ed9^t(C2EGqr1SE^xD38-Sssw@JT;`2-fG2$Z( z$530bB!wm77;;^$f#>Tt2W5@Vwsv!>+3+_90yrYG2z7Tm}_Sz8Xy})gja&J``2#~U|`7;%nHnFXEjd@PW$(7nfn46Z7i4KY6d80MgcOA*Jf#=Llp)z({pQU&>VB zBzagU1UW+(l+daYgjBZ-^X$t@79JS(X*WaY9mjyIlb8pPqK7k%;TGysBUW2JK84km zTh}fyrN5CzIW?<(T2ciGZfbQpmNELn$DwXWsNV!M1;eZIl+|plB$_?&aH;bvrV$1G^Ry|_UBW4#;lqT6eJxNdiKfg zEu&yQiBS6;E`}lv<_R@iplV>1P-$*F+(bv$uW5p*EC>b$FOkBhHg#&Hc^WV0tzCCiR@nMf@ly>vm z)M9eym>hDHqG6BTXWHTz$FRjdzu9b=kD6Uou8weSVsz4Z+u*ETF=CtB4!+UVacQ#~ z>pRXYNly1+)dqf_e=RQ^9c@!GTxXYe8Y3ekuXe5)4~e(x#e5O0JRC`Xy}cUI`*z_( zHS;v`OvH`Q4KtlJCl-4yEp^3vJ+(8NqubFFT?ezr(ri2Q{(NxWFaPRkbvgUq!9e-mq;_-Oe~SM; ztVT$DxrJ7E?MoU~-yaaNR5)!>BO}7ejvNFq&^4aU58! zo^4LwkNdMVQCS-eVy~K+7mhkB-&M^&l-B!yb9%(AKD2Wd+&I`5z2=1;LxTwnS0I;9 zBkKB!@-Cyxr!>iQ!2bY~N?{h#7m|Kv{X*Bxo`mIyZ{!^-r7LM|Z=v`l$u_Qet262^ zC|}^@^H>@A!v8F;LjS&*30^BWX$4Py9W%c9eSR&Y`~6b0y9Ru|?EZKhj)>Kjp1!xf zwBmI=tmlf9zuNyCM!wb7-h9uZ=YC||X0H?Te{_CC$)9x2e09}4216IN#{FKc)AKk! z51D5~Jnts6!R=B`{Tl$dKAm4tTJCZGMfQJlj&rmB{+8eMs_`s5>>F-yc-gJIW&OQ# zae)}f3Gq*L&?Ii*Q_ggrXarw}@J{>Y@ebjgAaaZNM)J<$?awjFH8Z{f`9yuue4)uS zNUWNesna)iZ5h%t=>l%r>Yn18^-I%@TD{{CQnokA*LB-QchDm%Dm&tq zRJUJ0U1!JsB9&=Xa9zB={(fKhXZB}zuDttHsttp;*z79pEM7mp?>@f!+_n@?9F8ZL zmQ2rQCF3wRwhQsGFUQNWYZhmv&&ESK=YobXQfAJkn08voog}u~_~BD(rdR2#&)oG=_F1QKy}&fyu5Md@!qVS{}c$qrA{gXuKCS?@pv0b}tV+(;e18&^P-aV{ zPpSeCui-8?Pp3qs8kW{@(!iC5D?c3;v~}&8NYRx`Z&_9g*9e^m^=ZgD0JOoGRK0S9 zH@KZdL+{^5Ugz1WZ!?iadC^wYZ(jEIs<))kyfaiLoh9n?L$LL)SCP1-#y{)caV2JJo1Lxp=_j3@luAPZ9@Qebo3_onU)1u?`tkG=&4hAnjBW zV4KiyGS=j@0s>t+N|cFDt@0``$$BDVBA^WQ!{Dqm+#&_LK2Ts(oFx;JN!rO6?$h*5 z8U@*qp&Z&Y4EKO(&GjgwLa2K`Wr16Hq)bztxDsfTuhOzm4O4Hl3ISiY zR1-#|Iu>WjY_z-46AS5VwG@O+>oGC>Bu7fpKr3rDc}UwOCzb4j*8xs8+E{*XB1^k2 z>)>9(LuaEmV4|a@GX9`4Zv_UD>mzSq4`yi)<gXSBr zV3Q`>_gLIgTe6x)gtUVh#(S8CZYE{k8ah1osPi8*xSL!v; zX9F4dh?#hO)ojFZapw*U$H=v{4vYo9s3$Q#>s9lYDXjqov3;AtFpI8o@SqRy0_N-0 zrk+TKg4xI!#omI;1|qJ~?}>N?mzkh(>JEx?Cx)^8)31xMugwCg)?rc7t#`LKe{W*^ z=F7%#b2*5`==^=?*085q(bFJ(YBxX13EM0;wyE*n2kXTN&0PaVi!ofWUPFp76O0N( zW}@HjUwxDA|zFkn;^ z^_H>>JeYICBG7{tATNE&@}~%LdJ_piRFrEtOYq@l16NhtO1N;H&|n4)+V(8f(bhVx zi+Iw!h=An=F11PA1{84W{)-DP?i$B2CLA4bsODIsP~nurJud|v@AkXOUQv%V!qosH zR1HzC^NG4GHhFciD5vmI^nHV9^_4&EGlWzTb^&RZ-e**f$SE7bwa~`MbR&a37Ua69 z$=q53$K$<-59$o>9VB2VcN(nlUk9cft1Aavd+`iME<)|t-WKK#$Y@7f2*YGr(c->; zQ0`_jg- zKKAu)<)}7uSmQbYA62P=6ihER6A7;-x0OjbDn<>7@*<*#8#y|X6qgEhQ*K1H2(L~r zJOgQtUfziHI;~i97cJK2Tox(@R;?nx>CjR>K?jO>TgYsP*rzPD9U*g{PZxBt(NP+% zh-#7Uh)AG!NZ@Z1#AD2mdj1h$vuL7U!Y=T&5Pd4a>`)|NZHNN6KP&8j!QhVjP*uyTSGQ;t=-50b zbIf^(5Pp!YLL2~faFkckgBS0E{9xz_Gd){H7SnnmF|r7@H4+F%_O3C)VRNnX_r`57 ztQ4?w8qkMM)n-(8SpkJ278&?w9d?iTE5$8}TC)st$45Q&?g zHr(!GC5WfJ@r$@VggY0j>QD_NIXPd+BYSPKu;M8T(cp(4c)?ry2@-4l(@nI!!snaw zGD&^bx9Wm01snK8EzIWzn9W`kXdrP_*a~GL@X8hpw|?~cSIsm-U#WnwUi#RYm;>R3 z0Vezjh*%+xkeV)1z;2mXP!|S&-iNF5I`bO~(n}rBs>SQ{Z*^pe+9nlWtKhY5Ue7e4 zZ=D@;RcAMzai=ib;SpNa)meV00`#URE8PbIF=@s8_5KdSHXQhcOKDdq9Hhx9&-P50 zurHPK>|Fo{&I#4_fa*fBU`(Y-<+1{KH!)SMf{UvHaFZtmyGnPzY5j4h=GDtk3rso9Bq1jnd<7!!+HHIrJ2(eP;C3NacPeCO zD(XZIrdO)K%iWV40cK8{2Z!)&mT9;aYt?|F{#acnd zRhS?r%U(t<*z2ajWb)&Z32vUS3LD`{!;vjVFD`O`a7(ULk_el!4YY1T{goI~ zf7tdxA>2A(eXF32Rcx%#6$Nr9?OH*Z*Ngu^pZT<@PJw0kRS5q^qY^pps7t@MtrvX{ zQ$d$bA*R|BX3?md)j0QAngGp?EXGC}-K~o|=4h%h9tL=;Z+x!n7{U>JKeG3!1=|}J zS|Yv~vN6WUR=qH(I;2Uiup6L#syqRwE*{*4kOqI;;XW?bIl@?ou-l;reC#8Jtn2$s z-p+;5Rp0_HmT$!IlrT*`6mt_rJP^F`U-ozIzp&C7*yBp`92a4)`O?H4;o?n4@tp)G zb`kaKATl>*!Bt}L3@6|ij}tJo&_!1{N30(V+@5RP>-6!Fc3EzsSEmKHh6ShRDy|yW z`H5}tIu*y;I+K)jrq`#20Bg6zaP9b7yWo-H z?JMwk$A(v)0LxF9et5PjW6K2);5x)mHBP(EW5EQHK}U=?vxx2uWRh%Ji@`FwN5qR7 zh0Imj(@k+>WWG9ja;3+LUJ3+pmksAknJdS~H#d27aUGqQ$7Lg`_>2R~DU;A7rUn{V zf$H&y;W$P@Q7j3Mf9yU;dUa3E_X#F|wu$G3;mO$y%kM*i)Lc9?606_ptbpx+?W`TO zIhQ2i@e`)os_`yM!sBc?Usl2cx=gbMSHtc7-YCcTRF4^T`V}r1m}($##R%j_&Il3h zVF7ZT#we1;1agTVpUMfa$u)MD=KIBv{=tJFzOl~*rRL|%K%N=P2Kc^e1hWP>=wppl z#Sw-&lHw|De5967$a?5g(6gK*F`3Vv;Ti~xaNPQ5`J;~5IOwcfVEq@>w2SEDkq$

ATB1>p3gpY|6ef0jAzXIR?Q=-6O>t=h z#2Wt_uM7(mPm(V6spIYFg^lK>q@~*cyyP<*B{+(BLgoU>K@KUdaW8eR*up>>y38Xe zI1A|hVa^FjwDCeftX9?mC<-H09|A%50_fy%df;*k@n~3-?1PfovHGAI>6GIlZy>x? zbvPxP1`M5r^Z0f;j)eHuUM75I4d(#~=Z%i<-H|*^AGqOV*d5TDRLbU;+L99YXY#cyY@K=>0^_Kg{Fka61^96@DxbrwV z;)x3**?hqHDf`S?<2ur(EIdchsA~|JxIQCC@?V_9{RB|;nEd1nz5veiNX3|?>d=V8 z#D`gY7nM^4g;fA9EK}t}I55l6f2aCo$W%|>C**YqUqxSQGTH+5#U0KQU4HWrFeF9y->!OZ!`~o8?X_NuC-?~1!7Fb9E*#wWI0NH&H4Ztx zNOMW+klpY_2AgI9KNxLbqSaSlfOTHS6+&hkvN!K=oFIKO#0Pk-FqW4*PPFAgNM4K; z=1_rhrd488MWKq`5*`FikBr8us0dE$r3H+GY(uyqQBl3V%v_=7Sg zZ+~7;-OiJf9gz|%xKFFl+2CR!twpvtIW@VHyN^EGuvy&{a#+{a6g zjsjkTm6*DW9}t&Q<0s`6Yd%w6H4)(?{qS^34*>XWeIp`(Ur&jjs?48_P8a{sab3%M zOCPesVBkVqR9$1gW4)|g$fH%p59yH)eMW`gNy{!v|3%qf5V}A6cwT_7&!Hh31#v^j zJt#G{nZ=U~@?{n>g}J47c)wlWEIV$!!<(n>9-m)7Jl}(>PjNu+w&dSD9D^`Th(YXm zBaaaFRdIfF@w?|O?5DkbCq8hWyutNw6MghRuE5~GfwGEKs(8sNA8hs}F#E-z9sCzg z1H);c|7xIpYQ#Mj<3#5-u-AzN3DBPm>mjuRzbM6ir(k}Zv+2Qg^?!y5EB8a)_a^B( z&QpoJxVI?pcgBCz+@o9NByCjA(EHw*#C``nzB8F&E11uue`_XNnaBJ&xCm~E#D5k8 z-+JBVdL#LA?b~!Vrhf!FT?-<1!xGo*hK$4$UR$+W><5s#y74Okp_Q}ayy}KE)IB(= zH3Bny#|C?mDz^vC?<%`|rD3zGkMU@O-IuRcJ$x{#)e2`jGJKZ?4L@O7KV@@hyEWKX z*OpJe$?86MzW}QQzhJB!?&O@msKorpf6|S-ren3!>jup_X!LNf za+F%V)ao_Ve%!IsxPBLYXHd4jNXr(&f#&~5oNtr06KJjOogp)O^j!u%!w7FurqN%cA!PL63 zxAnWZwfDn#*O~A1)wlQd)$`=F=W&V~X7Gp+hB?e3#38BgoktU=kHJbhB1h(qybMuA zrEwHA2tJc^2#Lp%ETJys!W9HNLsMEqhMzoSPs-PR0H`7rIjii2z`+tCo&?$?QCn=($pA&QWf%*e<$yTGr($S>^6V!TaL& zpT|o44@{KKOv{#}PP>-g?s2|KA4j!!G0(pXJPOGzRjgvmyo60^gL7PrwjzjI^Q%nm z4izEV<-_-r4)ZiKTF0DJQVZwj5mva4h|=9FJj%5x&hnWYls>oxhb7BbO68VQ-19ay z`^!gJD342qhQ+-#`MxIIV)+y@?IT?Fl|2qDqh_yqw{G8oOgDt4!6RAEWVU+6++eRu zX+t~9T;A8m&C|7qU4B(msS%^8CvhCG&t^-V?3UCxN@^7)YWHd?R}_vdbWrsZ6A7jG zidXdT7ClZSC8y;rCmNIMp@~A|tefUpS|*n}ZBnIkU2lP>KSA9!4VBPgR8U|o6@I?k z>7RF**m5a!qU@!uc)m$i`H>cK*`{x5zV4W}La+N$%|iO@$hLp)=Z52Ejw4SWuy(f= zqiSrME}iI)OLKU#lk_Ds_P#Ce5?Ky2x}GSUlU48U zqm*M=##r?-U-+PK<1wp$Y*J~)77u2memhJ@!wS_L=&9kO7Hi|Y_fK9;Ji@*zqE4>0 zw>j6f*7e26wWq)Pi4dW2w7nm1pEkRklxXZVF7~p$OLoi8^kS#qv3p_CK)(1kIJp`Q z`d1UlCe%&v9CY=L%3nEZZ#_=yid*Cp&o`(_ucB0+@429Zan|vbd`tjv34?#9Hu=r3 zFtQuz1_ZepWkZ0MYRM_iY*vvT%KdZVrN3_>Fq=*#2hb|kU&q8UIAtXAn?peux8XPG z!#>tSEVMea`wIQI2%}GwA^TPAi9nQS39E{!bhXm2@t!v z5zm=&yp+{iFE`ziMsdAbwx>NMZK_6<6j9nsKI!k$;@NyGEPG#vP}kFiet#{P zGfl=T>qKc&=HN<82cc#yLP` z=YdLz3s^S_aAyWME#hK1;7<#w=|tS0`i9T`@US~9a+p1IHBjpMyA%h~gG+kN-D zd$-g5hDQ>+)ux&(B6-oaX5~iBa!wH8!x%*HDZOi9XFuZX-ctM27JuUw zc1G3{h;O8529t@Y^y$$QNQSD(>`Ti~k%NrX&Tti0C~>|6kR~> zB)zCnfgle;Y{Wc;4dDL!caDIJ%yW1c@Q)(aiAXKUhZ2$&8Ad`F?_goRg1{5VGoZhM zj196-1{Or<%kTh#0f!M|!o|ImgPdhNX#xf$mT^C({NQ}rDzpQbzsnkVY#_A$L>f5) zsw@?@}J8M==b}99IgHML0|YbdiMzK3LL2p1hMV zkaj`R`??^SsI?22tq(jQFW4k=Ac4rfmX#^a(R6njNbe=SNVE=19R_aD`8}!HA7n z90gnWZYC4Qa!W`e#hFKnA&} z{P<$v8+k4Z7`p!sc}V5a7!Y7gl)sTayKpduSt=WCNDbExJeBV%bmap@Gx(-rV#_Js zTQb;u@OrwsF`ikVB^@;hoFiXS3nrGo_^YS^1YlyPT?YZeWwDjqi<@He1ej15mujSD zALw|+I;RWJ;FzLtB$!R6$ylZ6!lpS}{g#@BX5iZ{APhxnhOuFom&2BrgnEUiiMFJG zQk2}03GO#ov!#zegiO{P;vqov`@%&#*VRwWLdXN!$_$|aS;>n;=mGASx7dU`+8Oa+ z19QO_LRU=!5th=>C1SEU;yqEL_L8lkrghQ>+9ek>8f1%-HE{`A(2>1svAsVUE9J#X z0uB`^;UY^1HOQnc*6p*}tXQm}(Dj{AolRr0E#@^^tj*oQEdH|;STDPr$!HcHD_5N; z!}!=l-7{LgC6&GHg=m%TD|Z0kZ$KcMVhM4)PoP7@sScJ3Vdq4?yHG8=PzB0;8@V*F zxKyaP+`UvLw%SYD;8QW{65FG;KLROn=L%+L2;wqW=tK*) zgb8+&_2W1R9Jl~`)Uz;H=NZ)Id$@&Um#^39W=`5LcXBY(;n;Cur&Oz>MrvWOm)w_D zV&LiF!Q>KSNTuNj^EL(*Io}<^FiwRaEN~jM391U*4U~{{P@Bju1hQBYZ$!sAiqPRZ z#S~_w=_Kg=)i?l%LNgtgd6;X@Lt()bJq>J71zsruwa$bWTWD|G_Xs#Wj^J2EbR5uZ z+3R8;B@)8)j1bv*(Bnk9b|Tq8Cbvi5NS0_j8XG!~aUy{tL<)Ud9>3@ZD=Lb*- z6ygS$KQjzby@Ie&O|%4Y$V(-JZNSrokS~;mp_ymqjaIf^h{dHxi+k(C#m9<^Keyh1 zk^RNgW`LCe!kj$ulU4+M;gedjQ+<&YOj)2sIioXz;%MhZ3o~79mWixIuD$F%vflf*bc@a1|DZq# z#JX;_*%3&m1&KtLrY|$*%y2f*;~@SvND@FpDsEPyrjD2sH4;3IT{HVUBn+2%HBp^`Kg%bHZK+qjWaB@@^Y??%nOK@9HXM?Fnq#_e=0SMXbw^1Wt zqlIIPhapVWMjax<9FSeeyq*$+nFnNrA>aZmSnPM9M$nBCzLE-yht7j4kPbT|Ik)3p z3?%f*s{s%}7qD?;@P!h&JwWI&foP{FC-5?jpe5NhH}_%~T4@7-*yfRZKH>3e@I{$S`yGib-6<6E3~d0R-g|Sq{8RIyl|Y_2mkKBS904oP7J)A-&(o0(bx&w@hJtK zLy6<#ze##|v&J17dkSuc?w8ncaq%6CeA_eXlH2tmad*}D`*BX(`?(xS&WHK=etLzv zIUQAd#Kv{5(^5^R@xEbbzc)Vb-*Nwb`7_B*ub*gVBe44OwEF?yb`)BzUlgtL>f^(dr~U8eH43}w=}&1r`R^6>^|$=-cl~)fb-ngEyyL8H zThAr8F8nUV&x>@ou{yu+1>?T{6Mk`)?&JO+{H}vvo87|u)LWU~!RAJKdn}JtXY-Fy z?=U@%W&dAX@I&@Lt3OHKE0^c@QE1dyT_$Kueh#;~D{(rSGhGYRUEX=a{d#C0uh8{hzm5vE!*+48oqRrdZ(FwIyWeM5AN9K*ulvufN9U$XZ{L14 zZsWEe(Ma{aS}zgLJ9GH$XI)QEp8Ox0V^L>$mG``6pPrs|KK^#5W3%)7U8S;j$m4Wg zc@EyMBAZWi#`%04=ic_T9@YCu1l7c&pDsK~^}JAVGJ`BsA4&4FDL-+bb0_oJaVPa) z^BYO+LN-XAw^BH_?Lsstp05VCCH24->7J`oT}mEfTB&`Yk*?nRJyj>51hyPG0LO>Coda}1z!lOLb}yuK zf$u=a6?@GmKJ$Ab@PhCK=8gUV;|+=}urDw^yPb1%0UDk^JcD#W$`+E(XZ8>DKpgr7 z{_iOMICa>A(?1k{?q5IR{|Ab1V`y&bq;F(sY;9_1@?R%RHD4PXan#*z&QG`5*72?D zb#!jWhL;>;_Mf)qS^aurCO&_gM_Z&)s-`8r-RkS+Rrk?ty*gn*OR0sV1Oru~X`w!` zV`&5`b%YQV0Z5P~ejwRuF@!)VNLykMkV;8F$PkalR!BJzrJubbcjnva+wNU&d$Sue zhut5uu={Q-?6d7fYrHEHj8%p~hHF$vXD5=%;lz7JVQj_&WGy!nnw+#1CCS#Dh3SI( zw!e#8W^A>nm>Y!C0$Lk=hv!!^TP%Q?5~U;0kn%*fMU7ewV{i&cvnDXSi0scU6U_PP z#99{$^)X}Z3yVH{$x9>8NhwcgXAdQIRg^=RjEls~_ggOYDXa(Okm|nO+_{Sl)=p+T z$E#k;|Y=wK%!&^Vf&MS zV-oUfq@IHFFt%dS={;a5$o>yu?-(OW0A`7{t=qP3 z+qP}nwr%%q+qSLSwr$(qo}KsdGLyHnsY+E+NhS58@|{oTobUSN(ej0)x`zprOi0e{ z@(8fQ{8tPf&}s^aq9l2;Dj9Pt3z16m2~4#WBnyjRVyu*rd9S~t2OSBr7*3zTsgwX) zO;!P-p2UPxF`|T@!9a!cZO^tbkVJ4^OW>0*O3ct^&`cpSK;rP>al@#tpcM>ME|z6z z5soJU?P{^l6q-$36(QnMTGsw5nk@9;?&6rq#xA{-aQ|qPqpj2x)o%?V!fmA-nF0gV zZu5vMj3_Y?bO?vdY`WC#UEu!_QVy{E#j#vE{K0f?I-t~K3Whu<6BD`TZa|J3T0BV@ zkH_2K1oYX%A*LBc5ak(Ng>fKwh7hPO(j#6mX~5GEvK4`l4)wE)@uXiK1PQ5*&dv@7 zkC!5*6jdD|l5odGQxxu_g)d8l(Tj}6Pjnfgfz;vx)&4a!yXxs%UDukqTLhWW~Z#!R%EFnT&f0JS{8sTpQu1bM_hxB z|0{`*t$SxczG^eIlY7W5!)VmHsHJ*(=D%^atA*-;UQe~WFPm^w*9-!6(n{L~v>iX- z2$)-huqGp%{wfj}xQr54V2vWYNCJ|8EEKIy2QrL*WxyW@pe#Z&q%#Z9gEWw$X(!MI z6>&7)0(H^Xyy=>95#qSkxlJaqi1X~rNFH2;vVO4}D8GmMl#0j}KVAf-f&EMlg2Y`G zF8|g5^$H{=4sSRBL)k=d9)I2vbAiu%uSyGXL@3-Z92vo`*(a>>2jEDb>U5$-S71>g z69m3~(=+NpXdn}R4;ESwHn9s4hB?tL{1`JjLefu~xSGL%9L7V)KEb`x7%>7(lA*AZ&_!AJ+F{rJ$)PLB0WnTD+ zP+R*^(2dk(?--(;YTG3}>qAUE8<$|9=mD%r&l3i!h7IwRVcUcy05m3byZ$*=gA$px zvuak_q@}9Y;82E!n2Hw@92wa^;>ciny5z&?ZLUYgUj{MTvgg(IwLj1jTN)$eZCfF`k49iKJm!6OHE(v8LKdor`{TH9l<~VT+`RSOf1On9H+17;u=^q>o6F;K zd{Ek|xAXX#r2BP$+uFk&a$y%z(>>SvlYpgCo8CEjvi*_duj<;}$d!%m>Ur(zDS5Hw zsdqIj`{kS~D4Pr1U6LMhw^s@qndMA^;Y^-Z0F^l~85P#M;l-u>oZha-5-j%g?4pF+ z7iW=lC*;YQ+ialU_L2BE<9s6l6WpjA2VSA=BtCVjpU5zS;@muvwRyE=0E^ZQZRmVK zT8B7IMp$&@z9S);U9KQJKTbrIPmlaKR%j5It|Q~Fey7{_`%}_HXt0!aS+%Ka_SrD^ zV!arPPTbGO`e3K^#)t4Vs@z7;Q|sgTs=Z@$24$(s!+qsG_IJw#SZn&)n%XFp_C$@- zHz}Rh^Nh>~FKdm+4JYo}`zi+P>wUi2Pxn{CzPRHp33^}byXAFa_9X1%J;0TXd)9z` z@bg6IMu%i;3P5jk<>60Hy4?xa8*WeL&Y;~%=c~^r!Vkm`!8Zf%SlokBSAVH{Qtr{o zYvHHE_rj;d_u@~r+z;4)O<)v-&1V#U4XdMn&7CR#@6B;rJ0}CD|0EF>r^r}u3L}q> zK9gRok(RGan?B4D%eGh)uoBA>k_*dc6-_11Hsymr3Pc@Lb!(a7Y&3K$XhAB^0infH z(xy}bC9o?5AQLlqeze)5xTW%(3%2Jq zgVY=SyPpTr&)q}T&7G~ZyqOCX;d`_GmwR! zRF0_=M5-wa;h?G2Vs!~BINFI>w803`iKJs75>mimxuW=D4s*6>e6wPCJ7zf`63VGpvlC?th_W1p zPC4q$*cr{eap0HFnUz-X(WjJWS2I^yK(kBpOGBG0CBn@}5f>7)k`dGzA|sfE!nm>w z1)l$NM;Ol_gCXA8cRTB|7cqis+r=**f!4aI?JZ2=dX?BDD$C*n9wpRJGJz@0s!ymUX(z(W}fVQPR z3OQ`R>iw4{Aw3@t1KRYp&(n0QmDIFS(=6_xjB(G{(}T(qygmXAVVAJ5kxqEzQi@KFmlmBnI|skf}+HQlT0W>%EypCIvO{ zn~AwhQQ})yF|a?QV#W|XzbK2NL#cjScS1Kcc!PFQ)B7-G2I(s7esFSQx4n6ejoszl z+3WLoUWg}KpXuh?P5E=@xS}VQ>t6h}aYVNBGyHk@@&H`QS99@kHqeO0#HP#Xc>8`y zL}UJSF~7X$rF-|pl`F^7%9w`X=Vbldi3e5$#C5+8KA+CF;w!DE^_LUM zByP|GW>D*NPh~AEI()+c{Cb4(y1)AsfH(Yii02CvcR=KhD0iUYjYzkPc4tv#fOB%2 z{)Lr6R8y#?$U2mQvYQ+Q~ci})BneAE>^R%#xld`<&)iax_I(-t3Tk3sO2b? z$!zMGPHzzo>4`~lADf@1rcpK`a=nz=U#*|oYG)QnW)3RHC#bL>#ICR><`)l%@Nbg4 z&EE6r*F4zEJ2$e)_4)*tnI&yrc#?s zmkCX0WvNk|v}9^8NHvl4$gi?ea<{FhI#UuQF|(A(s7Z6K*JhlwVdA~4LTS_r*Z2Bm zGDkOhmMdA&-F*OIawJSQo9!yRmPpb`^Qy#)Bn2%XS#W!0| z2zsIh%0fe*4O@hF1_D>m+$BdU)mf5eQ`L2(lEjJfsvS$q=>0<>`1nATT$2R6_)CHF zcWIJhlnI5-geB5(C#2(E`KluDDFBk$?k;+Ec;VhRvf&WbUg1qaLmC1SHKK|?qRFy6 z`Zi0N$TtE{#L$qlpY$=9m$EV9D42X+0-9lfiZZ)G6`6U8u3QKT4^IS&eWX97Kh{w2 zcj_-GUzK9L=ixaf$uK~N;1i_wCr1sDAwjo!Jo+|Nvi7b*Q_p!r(=hlW+_&{z0H(1p zADu3?0KF~>0Zd7++qQA1?-Fa7lBlb8-gbNJ@L9tu`j$?(Go)e#+*nr^jMW8^qUMjQ zq5#96Y=i0znhI&h-HIdsu;zj%S|WGvJ_;857R?KPX#VqBPpyDQhVA1fR&JSdV(7)c zsVejjBQ=wN6R;?^;{037{5VaUynoF>uYM=b#{C@}Eq+u^^g*)V96otpR* z4^{wp5NRPdcjNlQm34}ih~F~k*eYm%T&8~F&o&7cI0n282MPv-X;{7*9|(;cy8)?i z_)P$cNGK{#2-;rvupa@?-HRLLM|bv(!y?GKnulWv@?|V`J-T0?89gfeGtG1H{w3Ty zvFw+9f@OY*8CHq^XGOhQDi9M%B{LDo<-Jcg5vWrF%DbV+Ur4c!qTFGoqp0sX5eQDA zZxJlzG8C1IdG`ttygx6Iu}K51DP4Rxe~HwqTPF#hOM`29kX!*(0lNadeujltx!)6{ zzgrpHO$o=j?AlKG_X@`e?|6{ovLsNT*`UJ3AxunhO3aP>D-~{Aexn_q3sz zBRJ$dGx!-1bzMgNG$|wmdq7auAjWGsB*gU(swMKWE>em5HJrA}>C8X>R;>3%td~-t zuQi$Xq@#n`Lix38O_M$T4YGFCwZF!>X4ukZJbz`o_|_!>f}53{RwL)0CH9EIeweKi z_fE%z9ZQ8AOO+fCXk(nY(2)P^l|-+?QY=M^Q=-=>g}JHLZOZr4E1VK` zkJ_S8U50aCMt3Fj;Ci^f{2Pq@2d`y|QQ`czbW3cO5n4P>1kgUXU`s5aPjivOH^mjN zGGKQpYRyJl*N9B!i`zE=LyP?2qf-ACNT^<)_C7Xf6qi0D+QV^_6pd+U+kYZ9mc^0`Km#nQB`JDTs*_FBZM@8 zJDECFzk@eo|HeOD^p~JFh}aW&1ne2U<9{J(ySif6&wmEl#b6Gm^ks+uOYYzBloIW)I>*%3;Wv9v&LZu!>S-mk+@JhroZo^`$zLIHoBC%rzd}@hjkevpM?@i6CcA?Zg$=VLt1+M9!GE2Yri@9@bIXn z`?6M^&FcLoNZc1@QX)Mn&c=}Hk>WPg%dLTo7qd^bbIv0$JxMuPbjDB`6kcg1)u2q9 z;xl78`EY*O%7Hy%n(eJeZMW!O16 zQ~fq~#l)ZA$M;iq-Ct7hPKiJ7e7+y=7g#txK6;%_hr0(Z zn@XDiZjnNp^lSq>Q!@5u?Zj?5oqaloy1TlEirS%6_R!ktmG)_EbPiFQDA$xPDz@of zZ$HzBB47V4H<*zvOOpTw0KorsccJ;e=LXJ>2DVP7c8>pPGFh!8WxXhho^$8UR##+P zr^b&bA0_`sfc0VuEI?kRi*-%KpFg87WM%(pnsnR!sv0jI|IXZ;idGz=EdGz-pH0Ge z!u+f@fMP|eJ98ogd;$;^k{S;D-M)Z3L;Vo;!#?rclT5#!n^wP>&$X#93IIarqiboq zk*y9)0D6)Bsg=$AE}6vwO?vU|W|ajB4cFr0ignpR&u6a@%L)Tw8^wCd-AjfR3DR%NF;llZo`(A$C`vGSyBNFl9`-@g>m(2$npC|hAcMeIIQ zmmj71{fG>PWJbCOu^!&=UBD~+3Mfxq1PI_Vui4<%bx{yEWOWp#RoGv!(Vt`pZdmOd zDC%eNAgfPEAx?@K>hEC`%u0lTUJSlOD!Q&{n~JDlhv>XwZ?v$8EVO2fxuJk;RBRO_ znQAPi~Qn>N8p23HQsf(v763Yg1bsvt-Dd_dN~;1+k) zyZ_!au)FwvJUpubK->}$dQK9;4=cGo`yMn5Tgcwh(hEX0VbJO;e!TiO#7NH~F+@PB z2;$5#)gaKd>7RXi_@A>3VQ%kzDHyatbXhjw%NG^{hQL-JkUoDaJ4jzuxnj&o9c1cZ z>_}6n)jo{Kc4QiYT(r$X{skVzmllQDXnfRnLxMmCs>j8Ir%C=FnX-f zEShQtv%=%3c(yPvz&K;=6}ZQ+7<|SdWWe=Mle zH;s*?LNVXKTrn}8mYBMW+)p<-la@H<#d4;aSs9~~Gkw(^mS*+_J*%XvcGS?9Em%C- z96{pFv!ZY( z>r>9NDypPIX_oWX$%Am?_xmj;?cXEU&+|D=yY>8h(3zReWPN_3#SscuZB9lkkadai zM#SH;1kdKzUDLF;>9!c66l&UP>T&^ytdOgXL#HZKrOHgyS4$}jHjh6WUhXIEVVVXp z+vH`oC`6p;&N-rDDag?Uj`w6JSp?=*`oM1eUwjJke z=XEJDAPn>d^W>SooIHF1L_sf><{#ptAcv}mj+mg1H#lIMAfhnq1(1m7Ll&9G>62D^ z|6x~>$)~q$0>EYmP|olMbNbUh3@BYD#t#N*)x%0={R%V0yr&6dv0mx^$my2VL1R5& ze6NyTu0cCGYzNII`V$Te&>Gz08q)GLkX3h(#vcwzD1)r7^>@!ARfd6O>JTz@(3eMa zE_^XmCslPVcv4Y=HRg*YVJ;BAr5??MwCvJsbtl{+lC=3i&Y-+IshgH$C&gGmx}kTE zf`TNRF-nO#oFa4(?@tG+sUq3Zsf5U{%GH!%YLW)JUdiN6v<0SAIW;VQs?6>L%p03w zbiF&5Ea9x}3!7|!aab>k1QJ|JoH*bS7#MVpE zqMVff_@E*m@!vq~d~)o$BH-CnU(}n?F(8DO55l80i$Hh$d~@mJwKqepzmmYobLqF# ziDq>$ph|kuBj(v5Cg|bgm?*--XeRc!{(F7l%;BR*w|Noe=7srj|>taaOLV!p-cv(6gU5ojyr&Dwp2AOmB6?`U>=c{z8cM4FJM%1<+1y2oxB8u z^gRdRK-iljoI~6S(6hYK?S1A0_(4!NikY#aJ7ouX-3t9M!A(`QSf;~UhJ#;#2Qff7 z3kmcvqaWz=G?~#LzlI*m#95{GUDxO?Nfjq5P}*d+2HWwtkumsvf2OUqTE)m!!Rv6$ zcRvs2dYkRcXLN+%Iu#41S*k{V$ew{aXdYjh4_b6| z)Cb1?_P??1x!87k3qHT?C(JV`s4rWZ{zK-3(rrg+WJ}-W^3*5lsd=EPB)xI6BrlwD3j!NGK zq3}rTy`a8cMsr_$dpsoOMLZ?=6vhw?4nf9}k`4_VBeO`&#yIXt6iK3tBdC)wH3;Mo z!usaqXyc=dQ<#6^eDNRg{wrbyTxH2W{Pw=Xf4fX%zldexXzga;X!0L|c{X;oPX8%O zXkw&i;N)ayq-Sm67M7CAu)pp_tDuy{0v&E`24A`EZ%tv)drqDLJfA`&7JaeuHd zk_ZfD1Vc_|_V9hELn7VFbvYXt>G_BbwNARqge`tJ$%tVWg z=|YDo*Qz``2y{a>t{U0bq5)D}q@{y$v%RiM;BD#x%y4d!ixx@fS&@_JnmkZN@r3C1 z4KnouKq?A}ez}N~VDZ|oz)q}W*?DkPno4dpjv{b}#57}+$^X7&t z@&I9yJ&CG18N=APr~+b#2yX^Vlx+cDz+XVNF{nbsq;eR*=HN7L)(D?#e)@j5WQP;x z)D8wjqlJQ6tOxa7krL$05wS!&12&{X64P;<)!6hTTgW2BN$aC4a&d`>YjW|3o(j#O z>;lW&{b{P4brc3gl_cR~?MtY#w~A*HH>jqXb~25<2@t2s`>QV0r3h6QQy)cg?e;j5 zfZTlnf_18ha`EvMBGF-8$kO0sahL0kMmodLgDs~jdmY0zdy=6AoPu?@EvbItK)G9H z9r3-Qa8P2#tX*BB5U+TARY5@;&8Y&fDA}l}Ha87}KQm054U*(QJj5Ca&%2JF27ZJX zAqGxQv}mFDfPtxMf=>v-FOb4P6OjDj{8g*Szdqy0;J(EZ5q)C*c2&WuhVNdpIPdr5 zXGl7<0}{Y}EbR~l=lPi`5`dj$xij>eNDs1kYGn27H))bEWCEB7u>8z!!Ni-8c@Lw6 zqNgOIm_^`bTJ^$epnZVe0DJ&muCtA3fT+OeGkUFkc)GiKVEQ~ijx&0VYdJwnnvMPl zdD{nSUaUT6T%Poa%&Pe<0dYQNdJ9Z$E{pxtQs z9uCtPF!@E70=e_kO)4=<@I6Z@G?(Y3g<42QM_R0z9Qk2XSQum=Wy?}wAKCBiEVXu8 zYR;LYmsJ$DhdYyS-^W8!LpsTAxKx))V+z$b zTN>^j%{3NM+6s;j8?J|3Y?$HLjse#c7c?5xgDaS;Qjz>Nv8Vo>n}}2&ReMZ!oi75h z!cbSn7Eb--555xVMX`pX2U*zQOj*@+`8flWP-ACt`0l@Pw)l)K*D7JL&+jauZ0{g) zJ-5?d;e9)u511;lf2~bM()s!{-a-5tQjnT$Ee{eE`5lMUD{V8&#ob;ww-duVC!=;$^xdGvb{_x5)|D^F7 z63ZeQ1Fwm5iYGcJ;1tDOl6w6^z##P+qcRRQmdHW=KI!`YZ-g4~ZJg8j-XrukSr6)}Bwv`R?9r?{Fph63PTI84;^EE1H%~j^>p#`dz&4CE(C9;{6#LL%l zUj><~O|BKsKGPgA6W^!IQn_6(Jv%eM;_x@!of8{RZ~d~dm0t#O#G7cW@YZ|mO@RmO z&7x8xiS5eNnR3t_uG-?!X4r-4k7YtL7a8$Wc(t^DA(f)iRWb|?VMp(R^SKz`#d|1= zVbK;;h$5^5?&iHoZ?MO(+JnbV;y9rT-waug=wk{*@i8VWN1HC^gVSe*QA1@(tMQ0T zd0DgOkVZgcj~hLR9?Fgvqpbzyi1ch2b0(b^}csUePrjREEpTt=WGBSFI)8tSZ zHKW%wQkN%J3+@#0oX&6VV~}0+`dTN|8hYt<&y9*i&gLyqN3d5i$@MAdRS}ALDwy)}0jU5E03zKgOS$j*_wDOT!$-8>A3&(8t{LLKCH`ATcW~Oq4W)>*{D>%z8;Wp7aLOycF)~M3- zI3C^?YiCK;DK6d7x`n%|+GQ`)ouUWw}|kmHGsRUR0Y~<W5G*DHgxvwBQt3F4_!2hE}RvBmgJ&C%;JK#Y1TiO+u$;Y-SCkiCjmX>k0 zUBEacb5DKvS@|z0|KnZC0h(nVa)1WQV(S{>sNx1&o#Jau=#{&g4SKt)rZ(9;(K!64 zmdFdwBTcw*2vparBVv(Ah%OjI>u41Bt2<6jqJE~Z6)p8pAmqJei+Y=$KKaU3R$@EU zjX-Adw8*v(l)nq6GjGu$7anRdIH#?0QCP=hpjyMQeKigYBVe4Pn7JWozzU%#ZqiXb z9)wb_G?xLvScm}@b9}k-J_UMLsv^B+4YHSykvifqu8~-Ou75p_ifBF4Sp+zTGh&=m zS#q20fp6Zikk^%|B$Vyd+vW%&aAuVo8LZO)O7-_pet`p6!25WfE?n6 z`=8l_^3pm$qAt?F5Vkq+f|+9LfN6$P*atePyD$-%ok?7BLskG(KrQvsJC;jG(Ud@A zu^3~%F7f_dZ?ap#16BY^0ZssL=i%02`>+0>@fYIgwTCZ&s5gf7pEym)A3wszljMsjKyjmK8H*39VQ-8gTtL)b*&>}chfjdr_w zyS4Y=s9icNF4GOam`Im2gClS`Fkr-uF5JCl&t($br9Y$j5lqTzlS|h~xO#srYkj8k zZH4Pq=VrW}yVWvx-Q^fP+ta3fGCYBtSl;jIWpNrJs*b(e2InGhb7d+e--cAk|KF^2) zSJ(o^YTZp1wm*(*cH8UX!j{zA^m;a10T#m4hem|L>j-cr2&sW2P znH@jJqvYGd^eNMoX*xdXcRE`rakEuX6(c-k(fs~aA_H;C@HY9hHlU%L}Dq~_@qMz z#|-bJETWS!lzX0gZjbaX!J35Jc#eBckEqYY&(KYho5YuYABRHs3Rr}6@ll5xhggRa z_vCN$KaH82egOZqmfFc%c}g8FQ!udnuV7~lA{RXV+I2iRQR(!b2=o%Ls4~S?|e*sZhQTDOs&QF zSQ@|(-1k3TE|QgADv2Q=#u5dCtv3m_=xal)nyRu{+lVxV8(^wz%tO0oa#0^ec~}+8 zG>&^14VP-9TD(y=nj*W=or!LD`~`K;s9pDZrSW1zw0WN}VX`|Q#RrI9KTkA$(;=vS za2sg5FTtDKIJR8a+ZR zo1Ig(vI1~6DxSX9WQl5S0OQhReW@~cZ5bA0GF1@z#|7eJT;{-`Pu5q~hkcw7nx0oC z(JqsYf*1?bLs%A(!A-Ezv3RB=A@etGN!Ufe8PPX17@Ixzy)2GFAvr|yT!P^rvdS~( zgD-k_gIv1Ffakji!{6N|%FyXp-kZZu>ijrKNR3tU7}1(=)x*dxg!X-z3WB-v*YtB` zOoF#W8t@b`<2_4ePz={Bm$*kpr0rj%)oMGl_OFF#RZM14vSU%&F$FTUpll^Ay_!}L zpZyoRLBNxO&zF)1K*>V68gQ?!8Gy=ge0exbKR%UD&!zMjVgONCMTaK(v|hJJ4mSb0 z4#`uHJxh!!IS&UIR?yVAUB>27XbS*gxgjE-E&3?5fEEoA4 zDKLaR*%b}u2IqTcg?du`%6bY9~uY>~l z(rE(EuKq0E8$uk!(1CU=guzO;+pSRHzmQzF&OC|w&3iK z#=5_28;2Z^KWQGly--#^TJ3;r*+nM#!m_H%H_?yN=#uwBV%{e3@}>cL{nrKnM|R;W zzL0Nl8MKQ}M9e)F7!KF}SJCG{H&aw3bO=)>@{%FceJ4qWvfd(?dLalXRyz=5Glq7+ zf03VT1+U6Ua^R?g9gRm2X+N1fPT1n!HXa=$0-7B)e=LFHc>KUc&LJcML^vIx9e-A0 z6iCNey3dF{!CO142poj_dRL&V1*?L`Ilg45T{svQ^+Xx4bkjeKh?xeA6R>zIPYk;Y zjhQEp!!v%HYr)4CdE}%I1nmG-TGKuc^v1H^OOxKJ|B6Q4wm%(evILH>Re+ksX*Ue5Kt(10j>LNDlC2P?}_k>y9 z)uu6i;z-r8J+l~^?`;JR@#pcqHmG(=cTM%>jZN3*84KPPOqQ?J>X8X=huk(Lrn29u zJ4$Hpt#1OsT-XyNKgrZ!E+($TdLz)_2gxMotg1A82wJ7^8XczlIq-ehD&b`$=*HIT z4zFe=O_B*7eS$u%ycX@v^9OXQ;=IHG?rpyQPQ76|9R;h5Qg3ktGGASI@?Wjxl4MUF zO5^izq^gbVWy8Jb9FNDfJ&O=s-&;}$Q^)k#i9E4xGt}Lsq6{6{frt%<9@WNOLl1IT z(nms9u?h6?Ii>N@L`KG|*wU$JzBZMmjLs|3xuo{2D$8$@%@qds1CKI-rANx}m$E;< zqp3isvFB@u+gVL>!~2*DsguX3AE|Z*XMmWAWy#l<{r+)geEe|zJg3Dunj)}O@!|&{#%(koPX_D&3n+fghQEPuX&Tn;YoA1K!;9iOh&r|FB zYp!)*PD%*6mGAWfz9!q_Ud->~z~yH!Dt%#R%lF{^HqXcFd4Jq+ry5J{=a}cYd&lSc z*8QxHtG4UsyLG$gd*zJpN6G!^cR3q$Cf2r(4e*_^!%L(;^bMFOfgFR3!ZBDn-pDxA z_#YvM2rgkRiH9PwiDS;Hag28kw0V{okfq9>2ce6`SR`I+kUye?>LWmnu6ePYYNd^X*rjp75Jwb zh>&rUT)1b>nIb`KB3DaYJmASmT{%{lI$fcV&L%S^Y$xDsrHV0YeFm7eSb0`~yhK1v zidH`Ve9JST?*up`DVZxH$2mnk7)cAe=dM|-!Q35>$y8BwF^JLZpFy&P8@B%JEUIc9 z;Vj_YnK5f3#+<%CVg}UW&fgFSyVj! zGkt_PMKZe-JkLfEAd`ZlNt!;3(-eLjUYb;Ie5TC2gJm`~FYr>*UMlz^DOVm(HI-?p ztO(_(Yb`6O$g*akJII{RLvk_Sq|BKrGrkv$D2Mhm=IK7)(Q$|8HoLfqK0_HZ74vfq z&%BO_xm#==1|EgLg{B;mRS9BEUk~$< z4*ETWmCr&0(b~esVuv2p8qITKJ%SZ=5yVBoUMN#kG{%2HKvaXM?@xd(5a9(HSGZbJ zW5JGXcou$a2tLUl@qe}tLZ)RT@~v}IpdDvC14$4DK)CxR!a~|pj9a23#}1y5NEE_D z=zHR()R`BNEN~9SLju~v;bZ7TeX-~VeW{4Y2qt9YUX(Ms|LSpvqOp+rWYN|9X^194 z$G7t?PduJgV`)StQ4YZB*kEwM4ynl|X`mi#B|F1IfHh*#bJhcn{=@jQEs(yeG#(+L z`GvplyQ9e@3lSf5Pb3lBq!mC7cRMJg8GuNuCgj{B?*f0kAFaD-1nx4wPH>o}3I~<> z65+)Z2gvr+Ezl)A_X9|1?O3-1n4XR5(~&OR`*_HwYibW@7kpMzINk_|0xSZHmfMs8 z=+L#xQUkZZV4Yw=8fcqqBCi=+<_v8gFbWqTeIlmpE>8&{s}6XkZ=H5_|A%VhC78}t zfZgD+Ghq{HO8z?=zAgglkgN|rHw2ggzrXMTb$7h4S}HG2(ZBt(){_=T`A#!LCF?V0 zvxwpufbu3ov%tv)!%6{=iEHq5o4aOwC(K13?r@h9@BYc)rT_{D9GiN@O)a!cokqnWwB90VI&X!}TC!k6)B~=rY^%+8|E&VMs zt!{iVh2UqNnT8WDhO2DI?2%9bu&`JWq6Be0V!`>e^g-}*=$)P3eTJoem|x zcZ+(LlZ5?%Jr{>Ai=DAzF}G|^CtHCzGKXs&qW6jRgz06XxGml;qt6z*eT<`U1lY@u z#WkllSh#N2x=V<2X)&)Vvq$~7mv_r0my~IHxkT5tB~+oyypq4rA$iq4UqU;+k4Iyr zvdUle6L(*C-`~$HlGxrCGC9TEY~+=igw-(kqx+yV(5M+L&Z6K+qWM6U`i2a`$P^@2 z7!;JF1NO8Nn%fLADan6bx;7h4Qb2fK&j<|H5rNC{C4Lpe_qMGGF{~oT94ImuGk4{L zkg(}CNZ8T$EpdJ3U(v+ma!Reg-(^?ka0?T=#9i(#(n9MNTeP>t|14e#XkY;js}xml5_ zU1GVe*7&)&>FxHgoq)F6`M&0EZ7;PtxLZgQ^HF)P&EM|zq9a^Pm*3qKr7QgC9e%T$3Howptr>K3;K>Qox+TOOnz)1d zB-f1)a!1jP>bw=D-jiXER8sHP;116noH@{OXWI@ka)*XHF#DOo&X4H*Z`BinD}g>G z0RVu%5CFjM?f*E5GB$AjPjJdo*Re-ZOI7VO>CAi%SdL?0C2*c6{!Ze@2PF;?nn>In zLNbH}LQFKUp0mXwX(1s_&qX)oo&$Ie#se2%%t&8nDJyw)P#WaD98{%gtSR@&(1E&v zZ)}ENd^f=>jm&uAd3kQ836RcmNm(rIwDa3>>vekHqf0H~2a=$0Dq>rR)Drq?s($Wzi>AKbVa>kFGVl^)WcCg)zMq=J$u)N0aMl;aoh^bPcx~4Af&^2 z!R!ZUJTi7x_zz~5y!HZ2zplq>o#*2wPBbtm?{ZLOnsY}GYz6L@eyu~+ONf5gZv^-a zEoRUxUh`v+lM1I@*QY+$H2Bdn^s*k_w5eY3mX8l@N07Kb&b$GmAe>gabNp^j?vwe0 zpxmg;ypm0PmdPl1)(7zSb=4wX05rY8Xk=|oySsJ!R$KE7R)O^jYo( zXVVGg_YbM>j0HNYaSQw#Yuqqr#owQ8&1KYbe);H$*^*^ z$mTRki^M`cj zJ)*5Ku+1rGh>Ln3hnWM5=(=FYK#;l_te>nov{<{FBp^XJFYRnyb8X0=^_#|uapKE*JitlFPMso5%2i|R(u zRe4twbfe0cGC12|9kOy5qfa$5YjlNO0@Ej%7Qm}`S$B05(u=1~&T{F_5da>O?D7JL z&xM3v=gx~DuSKX2alS;Nx>o*v1;`WV zRkFEZkr!s36D{%1Kgq^x+x>8Y# z4LfyxJAU^z(CEk-$u@lZOP0dU2k!-*i9+GL&a_GB^#zQ~oFE)CjUZAHMi94Hu>d+Y zg^7^lGh1={o7dx%$iv*gBV4&@0m7=(A-|mz%fPZ!dT055M^h%-p(xySkUyQ871-Km ze(k+z;Yq^mLJ7byu@LQ@gWx#8cT6BsVH6nE$PdDKGJ%$zK}^eXsGtdX=C^46AxVxB^{e-5~b1BkIGE*G;cz!BishZAm&^WuV9g!?N(tS zIm1A*g&<`2Sh@EG^x9g60X}aH=&%oh@jQ1|g%ph=!ixUIvb^D1!Rurgtc=^*IG|mN zOAXjk4!m>pEB*P`4eeJJUm&60Mn+*v05Iy*Z6Amf>$NK!yPGrlXA?j8+oc_${%*vxMph(|=gA^&}L2O7^|APo2QpB%s38|0~&jAPd4Z0ssUK`m6m66+g} z$p0ejoq|LGx@^s|ZQIr<+qP}nwr$&|Y}>X^*|vG>pYEB6+Ydc2nU5Kf5t*@b=UVG) zSt_$9o@SkMnkvp~gneX@x&uu$45Ep_Hv)eRM&^C)BX0uEF2&tVqI*TWN-VQT`%FNW zJ&<(Fbe7zi;IjK8xj^u;VjEB2?jd=4Kz1iH$3f;-V0*3)Xb2}uJr>Bm z;@}$+PZ&>agwL)+6neP?7gSmimjc^kx`C*%?=^te%;EOSoyP7;R+sdc3F+*SuYs*A z@`!pC~cA1f}fg<TPf&Lk@3h< z+%8RSg{GnNXX@fNk9<}ys0k#pRtTmPIrm#FXw#8ll%qUO079_|?K{3?EQ%F))`<5( zX=v8b1$XK}LPjx3-zB-M7soXeriq3ahHzL#TLFBttX90Km+YRTY96C{f~#JFdle-$ z-U%nXgma^~!{yB20*jij!%E>5<{A){t94LN@!G-c1cm*C{A>OMJ3$Z z1`Ml{GFz$K1Bv*_M0PHtyig4DNIJ~wGpdf?YNjajpa1!VKM48C5cZae6jq}`2C*w5 z?_WqlRMEz8AGeMwD{9>=dmm!ce@gI_59DbE!`-oeD#8rb4%@mDjO?}U1AN9{g!H0* z?A;8(@7@dxyn^3Rd={nq^M#Y|>Ivh1t9&BhMd1(jM)2I;?Bl({&qM!EdhY%$?^BX} zH9^Q-;Cvcb9P5YRwwWIymLCZ78-^?)_)I{vWBZ&(kOMJ@_-fLk3Lg!;4W`|fn;=T{ z$oLARq>ohKHnOty(11BuKkwz2?!%PyK|5$ZZ)Z>D7m`Y2KVWCy_X7w3@bivH{Yz&ao0)KjaToB_X$(f zHWv%CO36&*^KIH6Ia5{;?Q*PyzM_*JLu>x?HYn+j_l#W@}@c=5?}0~X9&fj z9YrzP-iG@RZ69k{>K_;ruhNJtc;boY=rpJP^5K<*y&wf}H41SZII}+tZxoBnRBp|o zUbO_MT%p^LXz0zC$Rxvd_41Ro)t|mm(}v*BUlnktDxhTjlhbclAWPmarh#H>JAD}P6#+~)h63dD53)m+^MQG8Pzuf#B%n{r|XWH&~03BIhI zDRu=Ln)z4^g&Ue(n>f^d$(CFj{U-h4zmp7ioNl8IH2MH60~~sr2LbEE9yiRw0Ic#q z1(!1XmCHvol^=tc?;Wr?zPKOUQ@)Y>ou@^p(J`^+_slkH425dm=2+f}<<)*vlY2ko zxq9FE{N5DNR@MZ`)`e45dW|GitgQ`!HqA3>txlEMo{W|O>8MX;o5h(Xl^nG!Q(b!S z^i}O|_TNWofBwN&GHu;G`QL`5bFA#*3E2uO`#>tLf|`EFip$^*F!J~0oVIqblcovT zaw~h;Mlf=f>Jt{tUjeS=iQb-L_=?*54I#B(rX|nT&~ymmvgd}>QckI+oEw5m+257L ztqPX4NuA7YZ_VZTlKDGJ09@7{*z;#Eux3#9rH5D7n(!Na`OXwRA(I>nqO5nA6qk|7 zX?bdU6{P@X%j3$-DclNBNUX&hJD$OxvhEi?;L-&Mr8i*fi$;67?itj?h3~zU1xv-L zn>0h+UKA1@+Ui;@nVnWxZ{r}QQ$IUf|HiMxL#?+}^TgFm@d???;zcRdswA?rO9HOi z|4d|7|JKurkrNS4?1N}G5%5sykd%@;MnuaC11|XzN^g{FrIuH`^m>lzTLhFYSATkk zP3Q1GcwOusedxC@t9j?v$7!0`ay_AYmS>G*{k`tB`QXL);x2UqFhEM#?s%Voo$%b;m)!JH@?aqj%)9!GWnPiOK8Z9MO z)alC6s_L~bg>InUBx8-;;BXIEI4-f$UKHO()kTbX%vE#eM)G^z=Pu*R3+j=Aw&jlK zBZz|NNbm9Mt|C6e3YAnb&}i^q!Touq4?D*?d&6Z#EXZ#)MpAD5f({3h}%8A!PBBZZFyMjMc5-Nhlx%`M6UsHrmF`B z+qiKCt49Xgt+@lW!o?h|ZYgXbdy=x^#F)#uVB-+W1dHI6>DD!cwh@vK5Si887@#4D%6h#NYL*>2_WHAZ5LyRkjBEM zyiqe;#StH#^YRVDF6UxTJtg&cBfsLY4d%;%QsTp@CXW}dtrPAJ<>$J8*D8yA^P|4? zm;Z3`iwH2R&IYO;Ic59=3gn564HGD5x#HPZ!wo$R^XsWG?DT?8f4F7*BntSEFGrm8 zTDqCtt6@HpVrIV8ZeGE3oYy9m|6Nq`O;Rv=7n=iFHU8!ds(C~9mO=VV5?K9$>>-2v zJ~NA2sq?vFgI!GjMrG+|WBS1j>bWC-O|8+}>wBVxQO&jkuiE+4ui1HP^p&$|JFMG8O-;C*M9Q~boesMw^Lx)!4Etd=EP)<)+lp?)T|K^Xq%ei z-x==r779EzF{v_}s+u6RYEK1N&E(g9hv4`z&A_C1=oWx0;$Sh~AY_6wni5)SN@TrS z&{u-MKJBDQr(ZZ+{_A0|n+VQ?0&cWxn^pjVK?Y`s;n@i@8Kgq*jS%WPc?}jizz>7i zIw=nY!x4b-`p<*{T6KKvpNTqR6`UK)0Klj$3s8c1IK-rn!2*Xn*Z~sQNypz(91L^x z_%ZuVVQR=ARH>>o)B@!0LP*Y}RpWq}{pK~LdSi5wb%PF4p`|O+a)?p|m?;3Wd01dJ zm`%r_8O!|1P^5DMJv7sHm%kdegmja%n5asBiB_neWp0I5f>Z@kC7`IOJSp0@`DPG1 zK*AV@4#Sx$y;*z<5CYpD_Ms#h8vaAG*kj=GWvv>*^ zL7QL7OFLL%KE}o(L=_DiI=B~Hg|2{9&kzZI@5T2vu=!g{ClbO7i2h2_J7Z8I%R+CoZP?#SQ z2)H0LZSH_}0g1vQX~7GWeADf6-!$zr+H>FAxT0U!XGovhp+1~KknZHGNsEd^D_#CQ z?*)W42rR7gRKG=J(1a$g>z8};=9#obG=|qiry0e#HyU$%D2w;7rt-^(nH!IUOuvRl z-q?)*Avwip1R?hXn@l(2G3WX0WYpE4I#{r$;eyS?A%xJVf`c0cHUMIRh>RzWlI>pH zWkE0yJ`6ep?JDai1W91b;x-4C&j_HR6C`(^6Sa>_bl}dK*?+}2qUgC;b>}wfkz%Y< z;Do?{*V92A3c8^|FnZ3%2NVKgkQN_;w2pb-iRA#)EClBPsYTjb7LGO%q#Sj2Fk)oY zpAr#@>X)EokH8L1GIC%t8j`*|m@0x4zsnaT$bl$MTCj(b<^?5_ zE9QgIqF3(wD^D2({)Lgvz+Pf#O_)K;s6*-QNRw+gsATn<&sTkk8O8K^B0PmO#4lSmzOn28s4(_&Bp_D|A2 z74RRlJ*!bJoPt|Ic_&~rIX@tRoIk98hCdAeGDID)H~|4RKM^1t{02ySBB2`G2wdVM zVo>PKz>JUk2qJeQz^r6{qm;cZY_3tCN4>i(*Nh(q`r0k`$R$W>M6d}MfOMZUfCR`C zP`q@XH2@P}JAfiYILv(&PQWMtV}v>kelkEQ0BQ1FT>v-aIuw7wJ|+NGph!StMEQMzEP-+u!L&idz{Y)n zxc3{-g%qnEPOY)G`RLa7*+n$Z+~B{7vg8nTi1^e72QI_1#&PJWsUag5`yuYQ>ivnh z^t9w)5`So*X=7LGu?0a%77k9I^KJ4?k;*A$25r|iZB;`XVaTT8_|$N}6L`=jDLHgW@sFdwVnJvuSSf*x2#Q)@gmz!2`pg9r0wkh?G*Pmpv$ zf%WE-UfkS6FPBUNaq}C2X8yrYv+#E8JE2?#|8D&teJu`eG6ke)`Z^x9&u(^ z0R%CEF{*hv?MsDZlMF%{_H@?Aok?GPuikBswFZ9*0b%QvEpu94MH4K`($IkANdmMd zVY!#AefUAdfr=?eFJed9z{Tn;ug5M3k;kd-A7o({4GOa|6f?gpqQHZeSvbTJyCT~N zllQ`TBK&r<_&oUI9!RDZIg(pZFE_tyfs(XQY<0P4*H0MxApz^M+$5Uu{W8TFIbIjA zl6JZUMjPoE{}yaS%mrjR`6XxP{Tb869C?>uX7^d= z==C~K95wooz~HeOdxYrVFl!StnbBcbyJ}El?dxz+PFdzU{WawL(-cRH?Z|eub9?rY zw)0q=W^)qOiT}xc6*4t`V>g4N}$NBC3Sl`4fg3YX(8{^EJR zhh2%Cdya{e<9QG!*Bjye9wj4IGt|`c>0q(ZqLvpfrd4@Wgr)+6n`7s0SmZEaVzo5J zqg69PSMf^me6OLm+`zWe^F7{wMQw^rw~gRb=mg__K2Ip35fzsgcMa*WyAFJ0#06c1 zziG$K+Q=|*H(lyd!;|;*_TeObL3NT?KDHtzb{KrKcDs9^bsv`vLH{`f%1`Qc(Q;^Ui#UBX_#Y55susHO?ovli%2XfIWvJb(%47XWp>OE_Je+e9t;Cf8QATSeYl3)K zkQs?3A-G_=%h%(RrV$P3A!0DrSD)85E;jKu{d*W&%LNjW(?smRv0`J{k-*;o;o*fmz0 zo9U+1&o&xoEj4$bzB(|loG_EoM9=r-Nq?MYm<}^f;f}1z>^FIJWfe`&T0BTM<}bYl z{U#5%#_tt$Ww z(}w^vND(~VgrH%^Oc*d_ObD(rZ_y!5XIV^US&C*^(zzu2a>~n7 zM0Z|_cV6V{DL_9iWM}RVW)U9x^Wo(CKdftH%s}9dzn0(IUoqhSDzvaL`Y*F@j)tZY#d#ucTiiO&>}+Hfe_;7m>_g1T5XeJVd+`@=8S{a<`rJ2m%Q|E`fd`L zs)Pqa(a>CvK~X=r)rbCJLHa9!h4>N~S+hh;W;%ssg+1d;PlfFL>S4l>ai0wd&X+i0QNUYWRn%zOupP;|3$NGmQS@Vh-+9<1v zaL>cl$=6QN==Ochg_MI13Y#qp9EU|u+4?x0^}%Wzl(Jf$tRY3An60k!yoI1%?N_$@ z@@87xRxKg_ylZlXALYGhbEs}PLx@@%AyQ1KO!!HN=>ItJ6G{eihDfBRfuZCh{V5FB z501WF2nHIFVh@Q1M=4>0{y@uT0^n$O5#Z$j5TS5j8f&8KYdrT5X98q|IUaviLZC_X zz`_QjCN)$~@v)4OM(c*b@9Tk0H3%|6FsWPV5MX|FbkCt#c&#)JNoyI{1=ENMR;iO& z@i;>Vg&=CjQV{i*m$kiBtjlInj3}RjO3FUBQV2?vZV9<(u9qW$3#RAke3Rknov{fiG}#Z!hk|N1s5sP zf(L`C1O`WiTk*T=hZXzAP$j#$o8UsgC)!M`R`Sa~C$o<0Sk?hf@S7`Y<-@d_X?rbo zMt_|}m#LK}D+VaLyUO9w8G6BkW6+f<3W759L|cqqv)|C8-=czkr+~Iq0IV`x9@T!J zAA`s3ESk|avN2s&gHbI<*HVw^D9JZg$O~+hU z_qUJFzh6}^>V1*q{u~d7btZb*>b5(bR9~d|;lAF{-=1NM=@sB78F%o5S#g<%%&D7lAOzV`Z3Qt^asw`uz{UfKY&p!NTu_ zMe_fXQDFRgVOiMO8aR6VcSeDYHHrvE?iPLrXe6vliMYLb1)gJ!G<(4`4@UL-yQ!g+k81^mz<@%T85 zC5XcCLdF@IDE$NY=&UZbo1O>m2W}7MkL?C>O*Ek09Aukv9Tlr;4-A01xZvHD&JA&^e$2QmFgnrLWPMzDEevPtZ@k7 zu1DgQ3_d!I=**n~zj2QLID2$dT5JXebhdVHe!t7YW3Fh)Jl0h!d_Iel$Vpj^O zJBX&TM{@EYjtGi##8>4->|R93soX;*@|t7o$UO}FQyL!>llaIP)NfJBXdDfRy9u!( z#8#NJ(F`$D?%PAH&6I7oy!5|U;> zZS?Zt5!ammjW&L&08vkVl*t9?kTUcKOxO7=YV;r=&Syk@F@qQ?Qx%I6BazE@BF;Rg zn9TJyZL8USnEr=hG&S*ijLcEM!pEe=j9XwKV#zf^hMZW<1%sJROcRV#lqdd15rL~} ziBfk{Oe$e^Y>NdFD~K1K#%dGvZzeRtUf_QEdbWz+Ui+40EtUle_f^k2-jGNcl0_)C z>K@-?zG(MG6?7T0m8qY47JTrs(K|Y=Y`t`F=#;ga$vRoFn5k8uJ!O;B+kA~x6rhrF z)VKARKg*BCiWp&AzM)U_zCRx@yH^Y*o@BkB87(sCVxi_fd;yKgo}G}DXjpK=DW z{5Ti7q?sz<)g@6B>!}WE|5bY3bqbMP?fp0xAlDR?Rk4kMjiu*EnNg)xxori=Z1;hBE%&ug;s6~@ z%}{4^2dhnB(5%$*9d&f)cfhE4QkM)*FjWu=DQiE{^FR?cn&og zd@LL;-;br)a#C4)(aj|_^pwSI?xu&m$p_|MmY6KP`|i4zX3dv_&&^)!wB67B7UIpu zN@+{|T@u&HbaTxg80S`1?TpR$Ba_GX5LkGT#Fsoi--D5BW-;H$?_2VR^_u3{1TNuk zrSMq+`;WiQy~LqmNY-I;{jwB;B$pu?Yw&CXIGaGN0|u{1o1l6D9_&y%fd{ub?00;f zV10W3x81NL;-~gM!NA^F|9c&0`v1B)ax^^bQPezda`C3S*vbn^@DRjtV2Oca5U_AJ z)h=+HAPGtOw2L@AMTw_HW?=}h8`Z)7y{?(`kNC0*xKnFsZC9>U@O1fIW>!DhQl&&5 zuwM-QC4sy1q?Ra|fOchFcWG(4_u;V<4oagUr|R+0^BcY4+J4z?65hG)R~0CycYSib zKBs}JMFx3k3?wk_Hl@iHFOiA!U{aw#+Z>y1niAhk4OLnfo=L&3Wum1vYmZVLuaXpA z0A0kLJR&bQ8Ie>ablEKSpiYw`29U`dzP%I2f|)1b9{iRT2B48GBQ#4bNf}*t13x@| zBCk@O|BPnO9@A+2Wyu}M8p~8tSsY1vxG|58MW>c4D?GK!7+2&p9N*0oU9{&_#Ch6h9g-dD4!M_{Bg7t0-xhE3uS}dk zvwz9QJ-92(7>}Z^(D!Pr*Z6BaFP*vK%oE{Utj^MSU9U}b0csSz%iIY17y^!uE+EgA z%3t=<@Ed$~Go$LzVy=lP2Q^=m8%!JccXC80l~MpmB}1H%_1w}jGeq!Iq)k3jFgQ@r zR^Q$8w2J}4l!Wy>MAwi^kugaP8X2^l45!|(2mps#FqOHjihB|izG-9%FYO8u#CocV zff^aJbrP}+iFKviV*xkD_&~8qzkQF8f>nW`<$?mi8YXkPsgEQLGOdA9oa|skjNUID z&`EXwfdjgA@J@S`J7#%dBRlpF9_#>?b#973E=8&1x;+gpCF)eBDTGg&h|YtKM{5&X z5cHS?i((yHThH4zZ*!AFmdEr<(^5hE3BSW;?1$yXO{GO=ZRt}_roIy!j-){OH|nND zr2KaVkSD5nN;$)@N~bVlv!#GRrW)c3ycBjQX|)v6(r#Uc0&Wd6n3|Z^aK3>=b08Jg zNO3nDgH0z%Y+Zikv!VQyTQ;w0FwM;ihfs1nsoNSBLCbKnL1d1N7lgw3oFhT{Bxv;)dereDF<@;cqJ2k@bRJ zo$5>GfP0k>YVI0aw*)+V!?@*`z(}?Dv%>G3$5?j?8ecfZv;N?j;ET=}pq&y5o54R-%*@KGBTm+CPK zH-sl>_GQAWZzOk>2bwgw{RQ57*=-K%_<>*#Q?h9rj(!ES1?;2ENJLlLwcTWE=1Zg` zZnUWaAa(+l*+BYCOnbQ5a#n1BM zcV(wfCDnH&^|uv<1;`KDt)5mjztCnh_pV9}xCt;d%dTa@s>Z!(LRC=G#F%26tY*-? zs;pc7hB3HPEDvu!N^CtPEnL(;YB`XMg+Js@=~) zSTNAwKm@ZQHDZ@GepvUwP4;Im0O#-onO#(%+C4arJP^v8!9iehv3ur*c5a+72X?rF z`E@=@e3bF;`*{On=-ru|M0oK`yUs$$Zr`*f4PS8*a2Ry!0iowKP)#hrA0;T|-sS3X zu}Me4s`ve@2EUea;RgDp@!@kDaM(e@-B=8E zWk+rSbZWy$MlsfbZ9n{RYqRJ29ltcH_@dkdHWHbMBo4azyn`&jdc7U$8uepLjxg4t z89oHk^r-QZE(!60vdatte3t~fM^ndFY%IuFtuSWrH7Mq_DyFTB6E-5qA@tD47}`*& zS+D=OP2!5p%Jwx7UpZBn%hR%z_Ko?9pA(R%Sf}FmJL3KAbkL&vit_%fJwoP7knJeKpE!{jrAu3Lw+9Oe3O7IZBv5kQ_BsulSv;zOrHejbpncO zV?=NB-&AamlXD%DGa!{)Z$-*R(bJ~lqDLL~SQ8F66#Oh(9iJ7KH!KU@Z5y0HY;@a% z{E!aw#xuw>Iiw&U(dW$Tyx2+(E|8hT>4btz4ylNVy75uzM_PIjVK)L`gt|=IrN+?x z?K=s8NkHim^i)lvm$*`38|n<*jdB5mT7jGgV_zjIx5v>7;A2GGa-Dd%LIaF|3EvAg zGwPSeq^H*s>N^ioqaCjHi=*het4+{L_JCdHvwY!68glKHyfbwz_bB^T+9c{J7ESmE z>S?|vt|3A_R>UY)11iu5DPp0FM}eVtfqc8$Vh}rw>ElFtVnzl6x`!YllUT%S143Tj z?x^5KF`x2Xuoah9G?^Hny6>?$LAnWAacRh7Ztz3#MX=hhPCN&zy{> zh=(?(o8u1CK5~RLXM7Ryg*?Fr&^*7@neljBZil^>$%Y4N<~+Rmd|^D~YV-axhb30! z5{t9Kb%@O#=fKA4&BkG9<1lpYe7l9yh+ZD|0B<;nQ}4=te(tu^{4ZgU;N%4emg5i{ zhaH~dRR}Jdc#{`~W#Ge~RRLV~_n@6u?7HLJlWe@?HoagmngWZkk7&#s%#z55f4~Ai z+2c9g?0@1B1brChXmRvHn=_x((_3+nJy*p{A{K=_l-nJ1Utd7Y9Bk7cctfA)XyflX zW*3NLkFG1a_Z~yI9Xq3)C|n;gHMu>dG_=9n0U_qotm+)RL0wmqZwHYM9;vnKiR2#N zQ+rpBjlMlha+`|qf+>SO2FmklA*GeQKBTp84<8lboJe`Yi_pp0Z=O&+<$Ie|un(E+ z@OqH4GC4ByGCA^mrMlm(dvHCSQ&YBlH~+IHdg8LVGwD6K=llMCBeZ!X%DO89=Y5Nk z1Iy!3@^+s+Q$Fe80KUH-z&aZ*`qz+C)FzMm9|_4*^>P2&wBxDGd;C0n8{Hr1-=XUU8NZwwwqLpR zp6)Cgo$2B9I=jqkG@Ie&@H)5*8-F>q$j4~)06L}ESzzW5Yo9LS2j|cO*_eIfp5vV{ zq8r4)KY+K#iEfNKh||x=9%YB-*nw#Be{ct%LBGx(_naxJp14z>cj_r^RBzJP`DS+& z#c>%1J##0t;xk6w6SJeTqU&ZyS$`V=ukHLfDIy;o>1Z`6fZw-damVnj&?>Jm)yGGC&xbBMDY>ppgU&V> zQfM-%cp#`G)gRd$TvVdWxsAkzoS@jTmMANtB~9%^WSFt1PL~u=ZmxP~@z%xr*P2Er zG7GiWByZ6U2A4ZTdpt7ZU|{1%D3tcok4QDZR{Au8%weaN7mka5CAaH-6P<0wxmoq) z)1*9T?t5k?(?}|F=7*vh_uoq=bFE!zQSI06L>HSa-#-RQpOfb1;g(z_F^iuR8KX4U zu7@wH+3vT=G_lO*F7mC{XExK-shg)Bm$MHp_^#UTi}#n`SS=my*Q}kNmsLGJ&ugup zCw#s~JiPOrmvbvS9nFTi*R1V`L;1mKx0#>8+LT&vcTbs*^j}6W-`8Wxi{Gons+b?b z&*$(U!ycECM!JMUkNwF>L*LDZ=7ucSsj1~0-G-RkqCiI)++xrp0*_!4iwu52*{Q`l z=sQMEvDq2NJBv?f4?q24rE{cikzUbG@lN4R$xabpsoh-O0$-7zke|R#iJ#O@Y>(Ja zM30=^0{m(3V%%x%ncsrk8NRc`%Q^F-Ww+?d1?)SK&f>|b)RU@DMvtgorQHhKxz^*8 zXWDl4%lW@2fiHhwalWe2$F|%#u_s2JTJ*<4U&XvRsrPu^Dz>v}7NNL#2ToBX=f|J! ztRLwA`&mA<3d}U{+pV*rA&gm_(ze&&J2JED_8pELw^<%$FSi3|txm+qLol$9)<>^@ zd7=(ypA|7X&Cd+Z(=$_GJvc^l2Qq8I%8wMtFXy^=B&eM&72`@-tTOGd67}02 zorOyGJZ;(K9*mYCJ4Pm1_SY%l5~Gbyq;x5avN|w>6E`Qis?lXKnX00@VI;*aYY16$v(CK|&}c#3k#52|82|m#B&v{uGLL z|8u|}o&XSajGl<~1Q1K0ff=Rn)#6dP7t46(MuW0uNBB}kG-Y>4M&9Z7Df8L4SjX&B zr1WBS#Y)#RR1Fu8WEd3<@JgKqU?ZGTlYmr#tH5Q-I)c(W=mFI;=vRw3-jlQjL{@_<8LZdMI55&OjK4DNM48KH|9UDAQ2fBP#LjiB!aC} z2cvDFpejlvSYbxoP?(3X1xB_?QWQYI&cFbzf~+GWn~<;&Maarf2Ulm-pIlXCJHQfA zbkIQyU_ibghHzN#fUBWl4Uf=RYYmBr;kN*kq(;t4T*xM<(TB)aB?-5&L}5-&o`KpY ze&HWeYLkRiI|g+i6&J{dZQAgvRNLoeFppgVh8?KbEO;K1whnzTa*2fPU%1p28Co4$LH$mbOG&aqkh;B?-PHE}z_WUHhxbI+86hJWH!{hEf4 zvH8KDQ|+sL=fk@(!NR_B`7t^9Y)w@evP%B(=f1cQyB7e~ZXtQWswk+|m>nByz=q>tNq?ogaApP2hh)0zrrA!9Pb)K^1tQ_l_c1zqV)W%}w@%8mxMimU`pJZmb5>e8U z10i>SpjD@5$4W9oXCEe=9F!CPoC}GDW^M;4t;|z0n@;|=UuB{d;B=IWWU`7S>N1Mcg5g6Kn|^P%-sfUsO1_86QvTVDHP^Dch^t}9^mcwU0V z6TiNiy*7-(_}Ef-xW3alerU#X-Y$h7(D{0o9Rd6tO{-f?2Ya?iJoYp0jIwHTv$!1Z zj=hTN(QEhK;`pj+ZE&Ntd0lN!OD^uKx2-BU;j1@2PiA-c*n2;o;(R~u1dUI`9Y;UR z=lLVNATjF($*~Sxb>LmiC6DjYZ*2PT62=B2xl5ohtztvX1 z{|8bL2O;d9@%Mju>X!@szlF`1Svc#tI@$jB9ccC6nbK=HohEm#W>Py0O;qQhu2KTU zP#HZK5zWbx2_VLuTRFC6IXPQ1GxrFFnfp<~5RtWrf%=9-7@*R^(OB4k_!tn0;i3t< zSpze;pE;U$UKgAJT7TrZQUd8{r7=^p&g*a$;OpX(1c{gXfCT$Ls)yv4D=*RlltHmr_sWJZ|deXH9 z%b5M*YT1lR4qOSaTOBp0V#^!@3!XL(Xn2;*jD(ndia>qxOD}l=qnqZE>OX}4MP7hi zzQWSx2D@m_%pq$Ea3)P*Yf7_uG24z;S_fw`OTZHPg0L5uKRWVP@I$em%kwISuxltF zrnZ$6KNOrLD~%AJ3xj6nZG~WW*f&8c{e_%dmccL(Lo5t4Po7C4ZI&303>FgK=gdC6 zO22UBe3d6ZYCtxw*sUv6ymbDcRIDow2E=l00D_fl%o~NBHNtEVP^A*aiw{Lr8JR)g zKjH3&6_7PU27qptQ7(8WOr$E`n^$ZYvT_^Wai&)}xnKTRi^pq=fXV%m=hh_P9Y(;mERYyN70 z$uZjJ8XLh9*#DCgwJgaWxG^lqqFz|;)dv%ou}uk8w4_L(d>BqTCxrOOfVkwk z(H}7!s}9wZNI{+|95lR8tytIA#)SZv3RbMIklOLz=^Lca`u5d}j4eD@n!7w)epSd9T&y?Z$fx z`S@^O&rr)`)V9Za5zdA}tAuiC{55yZu5?3#%r&DPzJ5hET6HZo%<9Lyyb)_R*_hc9^KVSNwdy@p#qrJ%Y1`wCJhAyy@TwOFQtU58lWf$DCW<>HS~SEYxLYQ-CbCsxm&) z&Z}wT8@m&X@o^k&#z+dxxhswu7(nCc-JF$2BdkzWZ5fZg-F_eUrMdn;^jQQoa`^lS z8`&x4G3|>bD_Mfg45*d{rB%^dSkaNrSQSib>e5%eG4s>^!SotADE*jZPo~p@8E9vKkMo;wyPr$V+p(();d{>ixd$@LMl@9_Dhz+tU6s-m}!f*({^4X_~b0$s&V%*Wa-|wK+Xw>S~&UA45PSK?^}OEI+X(Z(RUyVPS#)=|v$qAI7U3 zDOX4km?{X`oLsFe`HyRHUDbO*_w_jUW6P<>i9MU^%P!gmgut6TZ5Gb#Dgp)|f2fW| z^eC`Yvt`+MzK}9aXauGV+qJ-$y#tBv@1;=|TugFgrU>y83oNr@VT-nHVX5j;8L{g+ z%kv*K*x`9|fn}+Yhs7m2ZdWka5*?pP^9wANOn zU`V(m*Tcvl?^&`Y51~1l2NH8Pf3RB)bjjS`A5=xqQd~st6$%X__yK#J)Y>}?>J1CROnm0b) zKIt62r^YAF&7VhH$lUY7^eM)#TJ3>H`i>&PygxKt}G-xhVi(uXSWs3ciaElwGzSS$osD^yaKoven6b6G`~O{Nvh ziEXcxMpU}|$tLZkGiLm!n3dBlyEfolHO{g!RW%xUGx1HfP)*U}aBp<*HZX2JeDkSC zVvHMUy*3iXdgh0CxP1AXZK>6CIXm0#2k6DrrVDD*I`z)q2`Ljm3O?lDon6Y-niw3Zsj}@VB{ttgg57Zad*!yP^ByD;j?Q+_67f zQ^6lVL2duM5WPUP23#Dq*#9DegCf5E2QMp#On%kv_q=}omWuydnP}%|{2y`8f0c>< zrAEwK=lPEs@%ri>b{_~{#tF~OA1x~LQlU@zOfmrpKND~A3g^`&W$^4lk3*B4fE96tNGEg>970^Sn_h_vinUBf6P^>0z9K z^!;e<@PC?ba(t5j?2@G%6UdTDOD#SY4`R8q?(X#^TauUFW$V#XxFT`&B-@%tbLfQ9 zPBz6Ga7H9&u(9y9FjX*W97}5)(^Oh&W?ZGCJ!`RB&FG(3Z(y{anJ!7=rIjp2$M{e( z7rj}3nc&z@35&MkCO1r31HPH_aHS8(I!@5qq?yUk=Ji8viD!J6<3}WRW3;ESZ=gyX z#fa1FJ5_Omg~`AI1MC!<9rkY%DQ}c33*_EL&w=F&lZ0>%i$^2AlTaXQB)GFnhhiEC z1|FdD6CD6ba3-61p{xIm12uFP;9eZPuL2NGho-N)8AI1dguZ2DmmA45+C$1Ht7mM} z>>o9rCvS~19-qDi{nvSBvi8VyOQa2Nw*b=vv`rwz^3ADX@_+dH##m9JCfj4%wr$(C z?y>H%ZQHhO+qP}nHs1X*FPY5zm}F;ny3_wU)wR~Hs5A?+$CeS~^0Z-( zEg;FMzIcuY)Q1U2Wo|C!U3dM0mfJ-fu#Kg zYK3p&c@sXG$Ew;!rLp5YldcqcBtx>C@)}gHQUa%|AllX1vr+%t6&OW#;2%n`onEL? zC97yqMZIQgYoA=};N019CPPup9ai#8d+fHI(Wl%klm4)hwzYt)dah0HzR^#?WclRH zg3az67`U=3mp{IZBy2sCvRX=e*gKD1s^>M#4tkB#Y&E{~;yf`Nn&*Z_Zs<(u?_fN8 z*juu=yNovq+X>c(OdXY}p91E#9crk+XHU1KmterwF}Lj743BNmo8y$PicX&!>TN}4taApEh<#EJAK?C5{tqT2WM4bBc=7H$WAZjRh1TY z7FPD9bFvS(WPi~CvclelWDL8=$r{q`PaW6kuq0_!E!V3Hj70H3W^sgIm8SFnzytC(47;;g6{IjgLhoiiAJ5$ke zySEVIVtqONIyRkK+DN5_)%*SuTf}^6Y{o0C{7p`j_~Xvi{q^-yy!^O&)5VU*=MuR6 z_H>w`@F<{f`MxkG-8ys&zrBX<-tBDsTFcMZ;pMQOxa-@7#KBk*<=xiOytQ(01ve!d z!**>&zw;H|`?g&P-nj^VquuHG`mLqzbNzX5`}W*PJ~NLm#eRkjqYM11E`47EamI)u z$hZ`qBLJ>QA5qB15)@NlWCnsOZbacf5+A~_posN1{@#}i?0?&TTrVhK-~Ds=8)F0j zApSqVhTVUo4KEEyFYM*?RWq@d#<{?H@tA9pAj-oPFwtoa;yyS?9xWFX2#`P-_?Wc_ zl1ZorW0Lfw6ot?tYpGZaprloyL?Lr?=}wfCYtdG7O5Rp2kK67)EuM|rR<9Q~F0G%x zJ7fQn()Xu((fiG<=k9aUcgAH1kbge15ptn=>`E;@9LUBEBnZ&$&6sH^y40{{cZsPK zX`!ypROp4{@Z!)3QgsZdFpWX0hgN*-2yMvgUn@mziRBU{S^_t;wTUOX6RcF%pqX~etB9lbzzd}Y$($Q!He7ASY+W4cl& zeRD->Bq{C4SlPMOLu;$41Lubo^~xEsN??{3_Bh4qMrGu&JIBaG@;R2F0(>&nx(ucE z63-e4u!hIdmNOWxD6sxL%K&# zw{F&~I@)CvM~U<>FX8br=VwH*QhES;=~HM}D_Q|Vid#$4Y!W(pNqF-{evT>#X+clF z8N*SB95$N{r95({?%3+Ab+GHlwea9>Vih!Mp^i;$71&&0g(d!{}Fl_orw%gljf zsp__qO$8ia%5XMBh^kN4o(#a>+js#1?BUZW6Dj63=bq~If<<#jau)RsH&<3fM4M8= ztg^a~Q>0aNAR%_Bk~7yJoA5GnnC`{1D3=%MRfMl;!$w^hCrIhct<13F=X#Bu4!Ns& zNG4)n($NL9A_x~%Yir4KcNwjeL^s#wL(?<&68%KHSJkJfxE#X*!e_}dcRY`r)`~gV zIOLuj^dq6VOFAv?@+UiGZqif$J6031t&)-e0@lP5OPki}rEbb>6e?>%GeG-NZ8#U+ z0D7H)`=H~n84?(a%p*${lkvko$Y{~vRI5C7yX^Aav9i-84i+ zag3a^RxC}Aqj3FI<(3f-Z_8DSD)}A&1UpNuX&nN`RL#PLxH`EU7#D9?q?J!3HnS^j zcPN5Awk9bJGRRSN*EgQ=I0*hA5^lqd0VXJUs6nW8ukP~tRf!cylChcCwHiAZ15s%5 zAV5Sl2&w*Ki51i<55(OMZ)x4q`c)|tK(Ln8=8OlRbO#4#WiXORuudPy?m)yvk^|)) zN^~G6f8%Wdq1oU9V(|zz3mUR@EP(!h6^Xw2xgnW|)ci#5s>Xaqs~)Al+6_7S>TSqS zy1R4XiRw~1eQc5|(q?AP*qZE?RuT<-0Rg^`=@!*!&GWzF)#U4%5@!KhLHNy)tS<4! zmkz~NizLqSCHbPFx()l=rgcG#XN4&8@m(bCB)wEx}xDQ?2wvYwDAX1H&HO=Q@aqg6=fo&w-+K<_Bv7 zpw)?bxSdy9ElW{#!3Xu<{BPitOHt;P6>*A<(Z$O1>#6-$2Q52A z*VJ%hu7fJ;zX=^1@Bx|QjK|2jkp&|$>2^hHCBUElnd_{=t+}Y;_X-)QOSd476qGmW z41QsOlk!}|wTBqn4@+8yL%E|P-De>3om=gzbGwl2#c=vRr5SMzJcw*0Ts?Dd*8tF@ z%lHB0u1d8)7T|{U#7Ol;D77f~o`sqxv|qnOP1df`FTX$Y8p6xlo+x8UXS(PQKxkIr z2(S)qfl8zi2BpMupFs?M3Qx*=fG0BY zWiL%hTgg~E{%MGhVn-Om!C`Pc6$bVPbnMH4i%&@h>@;|JGC!cDCx-)IOKbqY;(fA# zZ=;^F33LycBC?IWhgk=8<(6|BGv$(!hh;31vBnu0IG5hMMlbtTI3S_C99c|q?#WGG zEHELoa5Od#H)*pF<7B}wPLL2X6XFOn%_c!(cwJj@c_i78(>?oR!Ewg(Ey?&doJ+2R z&fyGc$(O5?%h3^Rmw25G_#xHE3biMUO3c48+9#1(Owtv%M9(Dc zo}kE?7BFWwvQZ?^O3>d3DyxxESAkQ(tWC*}8eQBZMc+mmNNsJ<{otPtYqKh0cl7D3*bVR z%&>cI@|4xZ5}&s+AzFB|n4mIPcnZc=IIv1N)vy-&X`-}bX`2#6yG^#c>0Sinl?bCf!b>y4Hq%M=qyxL zxq({i_(nTkI%T&c0Q5|C%7mrrRgkZ_xK+Z1bqgaHyLIpZE{g;gcELRxsrG6cRMCRa zui_4)NE;YnZ!Dzs<*pN98<^!BZm!5PbNY5}ZS%|DK9BPpjzcj+5&Io*s>~+;{br|L z2&~9lpH2H;Z1a9yV_3V^M73b_E`}TC(VAb)==S{c3cW2nU62}sdwOWKxT@jvD1g)f zw;hRx4PEM4G4P1Ka4i6}N>hydk{tZ9@fCIx_s@=OjJJx=Z$j#lHoDDA-pl@2gW$Ka z?(gL_0d-0~21^;bWVFjsbh@=#I_X4c1lk1P43*VtU>8`z;<7txnC^`+!%w-2<`#If z8Q%f=JVJgUYBLC;0~GVZi3{n zSXa*!@Xr>vCM4ZUqh6mrgC_o>pgJ$BAaO>8Afs#zFsB;A^x+rsMM-Kh+#+AML5i|> z{$>0jV1-4TB6|y*VekduEqAdC;#b%V@b#=R!2`Y9JL?zE1-nxOz;B*TM>dMhn6-9g zOjRl`EI%b{5ESQ;l|Au^<^>QOH~8@n$pa@m>(7AQ6NFgYe*?ecr44v`?l<^}W4;sR#PngD zR$xqL27FkQcrGnKUKdeX!nGeOT=(C}RF2nKSrdl*sSEry9?JG_YwE4!w#dDCy;N+=aSoHr(RsifYeR{}{+r zg%)8J4fQ37LLq)@2cJp}I}4pV~{_j<$3MA+@em z=jWWd71rE3-RGwq;Eq>mE&CiQC81W_br))Qr*6dhWGRqLe#bm3p50BTih}BfvUfu= z&P}cgSglkXl!tws)htX&#o3ql)VjNkarbwM;?G`T>>1@@<~msi)0s$^Yw<&i3;w6krrWA&0U>ZM(;RKApVM5hJYO7ctTFtIR z;D50a_9{yg_bM%X+g5T1^sbM|Szem?Jow1hujAqZHfqV=9#eM9a`;Dj^EY1?Zqb`S z`;J?cDB&M%FA6&fp;nG}Lso2I9#8G~;DVnwu|CNl&INi&*Ec1o20pKizPJ%c1MnIk zqaQla;B1zJX6L>g9YwGnZr99}e^;_YtkxcJbJuX28E&&#_U9`9yJf9+!;-Wr#Mtt-dT9I+Yy!rd}=92ZKJNHsYbo2C#GF<62Z{hU2Kj$HS z0ih1SJFZi?QOo!Y=HU(nZeR2F!ShIBeJR#;5cojnVih#z-jJieH5vjzf<|(O-sGKW z1I*3eAK(=QuzStUd`cG9zns#3Wk|b>Z`bfMj4z+$zN3zU*K$eUVrjQ1le1iN2+1WJ z&UD|wnEIGiiNwg4kFy4TiLhwx*a2TtiN8embgd42 zVs5~{Yy?UaEq&4JMZs&J)iSQcIty9a zJWIDJTms1&Yi>GS#Z{BPx{YrEZ(-bi2@hKC3Z}Y!hJSXlO%i#f_$d)-HjV>6Nnxn% zO!X)EWA0M*Po+De=`{v*8_`LjC0%U`kSy$l{r6_dAL4+0bi!N1i4r4%Y@P4*Q# zSQk6IP$10*gLXw^@~I-XQm%SXzr6W;81y$@f^7DAz*x2A4F+lbz{*WSq*E?3U&S-o zYXrmApfcRGuvs)~gy78r^K;xf@giH#_mw7ZW%p@e`T6s{aI7w)L!0_vn(yQ4!HlU@ zh$(R|k>+_J%$2Z>dG8sDoU4eg1ACfcb~qNn2ECtnq#GXf|6rzw-Z}e@*YW%NlM?2JdWW3+KeB;HhX*paw&R zi_O92S+uQN@<({mY9);+(~x=*WzLg!t7eqD+1M23Y?MQ|d0CBG$ug#S!KMb{|pI3HoR#AJ;*Geestoyl$uAB9H%{s~ zNb~YK`K61hdP2>7wSve^b*E1vBmWjKy_g^oFUcO`x!ca4Gt0JHvpPZj;4^7mKOcx4 zbCicI&ll`q%fI{C<7uDc-_e44BOG@!Ok~kn@+*t8apd{*?f<+0_S>g$Vuo;}@Z=vT zZ+U@cks^C|Y+*jIawNrfrEZ)db}B>aPjE92u`Ghq)YkWdx#5#N6PkCBk1j;IY+0{z zzv%~Om&eHWa4E)e1$Co5Ound&g4;?kdy(7$Zw90E{CV(atw-qLXVm}p3>d>a*hH~k zjxGHO;enpDx^N;)H_~mt{CL1{{>M6sZ8#ty%HNe^r=7&b~%1@JytxzP_P)HeIsgN zKBg5v$qY;Get*#MU?YZ*jdsLzYEQBg=GyS$Z2QwSGadc>{CxBAQL8CmVVV0kzEgCb+BYim_^SFPR5pC> zBz1-E*?nV^_Zo2{%0;jE^t50^ncHPSx^pJ0ty_-gyC_NZ~DXFYiJMWQ+B>Bw72{jw$Lu@huYk0zI6L1*_^B2 z3*WWt#$i*fIsM{KF|YJz(hJ$O_(ovUty%5-PXX^T%2X$nql{<73*t2EHSq>_lb%`Z zoJR?(_CIw<=zq8LX0VG~rK~cSDJvH$Tc@RG(m#-EC`YApsb3%(s1NY}t{iK|OZ-r5 zkne(ZqYOU$YlUaGz?CCu-TKK=cb%rZ9}iKM{ZtB$uo|2*$*dX?+AE@v9}l-hLQluL z?B`{ax5SvI6TD>k^uKD-L(O<}upq|S94V9O7Xb*V1+-6|;6C@7$<2C4Kjo&LZt)MR z=E`JU&u+b=j|i_qa?2b3Zn7hx^iH2&1V>W1xjoUpZ^>5dJ)7dZRYRyTI-)9&Z|_BrBm5Ra`c zZ&=&1QuDucgI2CaI$Di);9q|jsIV)&ZoJl&|JgT@a5pohdtMp2gy@*; z)@SmBz@LWmgp)s_h|&P2%#eyhG9?{iq=yg!o^c142dXGn?!&qQnk6MK*ZBG3>nT7uY~E|cWF?sL`EAX zu2HpwXB)<@k?){<4kOyD;2_^dybgyR5Zeo7A@w4O9snv5I1FhR9Iw8s`b57zuD-$b zMB47pKI%O>e}VS+k3NE|%+A!$uK#h#!Zi_JBU~A6so!M?tTx5gVAtwLYmhtnTU`~- z+PH3o_6h2lW}h;Y@Q0|ev7aU>_z#^Hod(@EzG@l8@Bb2AqHau29sDN|CV}#Q7YrQ? z|GUva!`lkm6tj0yC!v$Z*7d%9dgEzun$uZ_etKArKg(%z*yg~e#3suH{~BxaRQh75 zUfK5v7>w#NLakq+sH{&=6dE{xKp;56n}ATP<=cO#qI|JPGK^6XK`2ZS4Afet@3xz} zR5v4^kfytR^>*~}lehQPJ=Zg<-+OQy=5U1w_}lYy61;^823sG)B-`w)aM+2gGPS+S zzF;RUgD%&CCxa?l4y*Ldq26#Qw%CC*5Sx9%utxz8ms;f^9jq`-`grtmQamykS(_@+ zU=dc-sKRaw;e6$=Tzhy=dR-nP`gp*MPKzqiXm}uLxw6z(>e(n*n`{)gkOXU3WgJ6R zRjxs_ls|d;@m$Ctf?dvJQiv;cfxOYEbV!OXd*V2%-XU?B+GI2~#oZzdJn+UNVs#oU z27;XubGE9o)3GYyR)za`#+|$)UGDh53GJGs2?iK)j0j0g4 zxo^Z4>NlnFm&bGbweaHS@hUm2 z%5XE%zmegN!_*=gX|Ts+#6aZlE?gp7@hdDTo??-L$i0YnYg-wb64uggJ-fF^gae{z zV-KW~NWM!@N*}hALZbQVU$RSWew9ChHYO^L8S3Nl4EB!QX7-enq8ySjc6g)%<@pe$ zqTq+xR&->eNg5Pr&WsFuY^APtRdq`|I;R~s2El))qeip#d5v|_ng-;kPs8nCOslO~ zP0uzwr=*>0cJ;3xOvVexzc>o-BT`Z>RsX@cVAPXjuGP-7CRPa%)8OQjNaq?dNZ`sQ zt~0?A4TI))tPxFy7L#!C1&&vapSzPyp2d9oh7&cG9A;an3J{c7%DuacEsd@fw!Au_ zPRgb^!6|Bk1JHRFx}7UP^>NrxcaF*Q0B9eI1aYjra>W|F-MW74K11!iBQoEQADXt{GV5cSv$D!4xC@W*o+}O8vvqrA!;5xrmBpccb zR?t@39TU3^tME|dxFmo-wJ?@9aVNpHiqtO5Paj=gBXd*H-ppYPA z-5v_i_8c|5RsYUSKtkPQLwzRQ!ne@Lv;doul`91>6d3XV)&s--7KCky_&J4yG>b?? zYMyza;+C#ZPLo(W@u5YN+7wC)?4A){5D~R((1rNp)Hv5ystuL=RYmQ@0nbdKB`drj z?iV%g8XY+U6|#etfDzXFxC#b)S_gM{ zYM(|?+hb}10u^cXKVzfQCAGLeT%xd16C&L_;!C$GOx^d<4xyml!YBBaVvuPPp+A=& zB8C);B`H!O+2=%-ENhGpdTEmSc;?G~Y8}9S=)=J@4hAn;t$`W&8ze^QLdJ&e=`m+i zTq2m<*nqOE5O^%2kP!p#ade@L&^VZOX{(m_NM1py&_1o^4nB633ODJ9>51uze=UgKxp5JEXK z`e68pE2F+H;|l1wDpUd-$s~%9Heiu?A!oJuu2%-fp<-z>6xs%7A^Y05ks+30Xr$l= z)(3Ycp34m=oZH!#z~`C?w38-Fjey}vm(Z=cpqiLU)VQ!bR&`oD zR`uawtk#*IeQ!a^o{$La%le{p^}GfPty{lmO0wyS$K`31b=X<#2;`%!8PxhJ+!b2c zB`%W>yipaz2Cl*+)QnlLftN)L-!RZ0X-slqh8!%f_=fUttB`df9O2TJ*)E?BG{877 z4k1!BYwUwlC}(545OzE=P;-MQ>nMzdvvx8o6voEgnDS_5wy7TCzH8oiqj{@f%c_>E zW`p0{*y{KE4t1Ngd<>&}%b%tqIS@8*z%YMAB;BbhA4}t<$l5B4anqzW$4U4EOA-oY zk;@-nj5MC%Jr^XbH)!S3)0=Yut@q^sV3uROE29MQtHXkzC{z+~OIrC0gVY!_bR`KO z1THczF4iv6=#oKphP2R$&8`CdoHo$i1XP%crj9Pq*1^kSZ_28M@f>d)P?#w-@s&BV zv1D#t@DGrB4{~Of)KOBB$}d{U-=d(_1T6s;lmn!J78^fXqco8Pz8G(yunk1AwpDwi z8OKp9ltq(lslz(QgZOvGc{oMlhki`I$BdR;|& zd9ewQwYNtaD~W~7U);2{qK^m3ImYgF5F=a@I1bn{g*Zv9uxAaR&dC|r^;uy-wy1>2#3p~hL%&Kif2 z44Ww64FjN_r)U`AwQIB58FB*;C`2Or3nHGrqDoP84=t34n&bvcS&R{_nOC=7j7nNMw0<8D|VQ5e>}r+?KyXm)zfN{ z^>PU&r^!a2kH|8dPS5H6!5MPmGO}9G%<;`SV=KL(7wpoyXe+FBpik#|weZ8#)QJ<5 zWLdbVckon+<6f%gy&%7>Pb%;J!eMlo^^QElv-#HF%)h_BKc$XC2ZOttNE^%HXiZLk zHg3$6C?oZ5Ij&QFw4=_ws&`UrIvcFlKJ}DiooD=l;?(hj8LCCAR{ibL0I{~A_^evL1rb$-RWXD0snIj6?qdG6lI_5C@QvSPO9@*(Bhu3cm~ zdvrE7-vKj-OMiTh&PLC;xG#I!N&lthC zvXCWvA$rQ}eW^*YLT*b{=9qcLm*r%X>b**L45P5vVIFHzj>*49N%0m-R=uHJMtuZB zTGipWMw@N>FN!0%lBkgiy^JhiGF|1(`A3^)gFCPKIL5MfPi*_FQguE^zmrh{3Wj&rC&c&@Q=L#OjYhu>vTK}sY zzi+PF(}N>=%I_0>uB~U*Xa6zn@!rd5Oqeiwi|o`*&(BqHscz4Gva$Ye=2qnH@6AF= zGH~>&N$&RJoYuqbpzQ}&t_HW)WuULu={vD$@9Qgn&zzf^@!8%gy?!`JE}E!g?2A&Mb2)KXUV-~d+&7bMDIxN%I&l3o3~G|-m@+8><_-?FZlnQ zPhdEW+ANl=cid)s?r@&IcAjpz-ZqE2TxrhQJ9`EO z`d|AG*zk|u*V^H%#x#qt)K23pJE*R^(ba~te<-fZrjs9zt2C!b4=*YkG9^l#K+g-2 zaplO2Iyx>Vrf7iCKD-Ziv#F4pJZ9oFsK`rK0_~BPKyAvfueOs}To6*5TwM%ncj8esRuf8$ z>`s4kB16xXEMZP^C$tZnkU@w9yH|Np$Wp9iJ)^ToK?_wr=%`|mGJ(P2(F(B7%cN+JF$}L`AaB9;w#pmX5QG6kKsX#F)?uj5?Fzo~k=a%1Z{H zb=`p|_j*1^7xoH74hpKE@KjR#HW7~VY_Cf&6vJVc{F#3!_smD>Kwj%uaoJK$*hOH` z$mE__)vnA$(m8Fpj^gZ3qs)s^GOmitKf(JC$O<5p{Cq5V&eEUZMy8TBMgmc_hJjW+2n}zN0f4YB6}ZpRPVw1N{NPVd69j_JFfv z6$P5329t@vb5)M|IkrT^lHb^+jKyrph$#g^9s%$Kz1>y~X3&X5LV}O<7$qQd<#|N6)3kr|PHhGDBr)AByP>Bnsi0eOf1P>Ie zW7ION}lZCcj(?qiMO+ zNR`Fkjg@~*pGKi&mIfDfD@QT(-_-(gOD-9qf_{wLM;wGa<4)fK;qf!JX#eUF?CY>?%lQ=HDGB?(up)25Vju z%HsN;_n21xD4M}9dQd@C3*>L29Fz{;EgD#95MaAE?UxAI8VA3qGbv#d;^9_+E0doV?MD{zYRzd2PJgX@@GFHc$1ERCBEx~qaqAbX}KeLxX8!v_y#foR1<>;4m zb@;2}A1>>SS7zRKsET9ztvb|oRyQeFgXA%>Me0DLA-ES^jKT9!3&6aEQ-Oet1G2(a~fL>NkeNZ*~P~WXMM?##SA$p(#q0=;@W#+z7_({fEnu;7#{ z^E)aH6As%cMV^APK&(6p>#QehUjzDvvoTPj1D5t{Yezy!jn!v$6R=<*4$0nkFs5zH(}5Po_+lo$4yX80Zv%2 zgmPiap^Zx^RA7{V=A}V--`OW_m97XsxL%xBvkM)h31IcWubTfvTRpRJ5V#~{jCTk*8S1G_|N+dEfV&)=rLO85Q1Ta5XM+c9dTEn8#vEU@Rj5bCR z%aYP8iEI6bi|s*Rdp~YgZJTY6O%)Q$X$-QByb4Oc@h>^ZXz)&mvc zy89@!_(l{?>3DehIFwkp#YZ}+bF=tD5Xb$?5D&{&Z+Hi(BL7K;qp(uj%tP#oFvy@a#PYey^h)lAmfE> zV0_RYvhCKH5{n-=%|J2$rbTiED+APY$PSs-4c8Ri&C_X8##@*^JD9#Nn7ozKuV@&%NODXNC>e4DB&HQod|hmefqf9^bmmxb8US@OYUs zy=2ancj8-nb&KnEw&q_e9vtfNE)VPY&OV&jkqH`QF*$774COGlDZW#%g!*SPxG8=6 zm|4Pn>zXy>#|l`o9pTPl!MbBNsfKi6Zb%8k2?~dF(I`;Nd9~!qC{7bDf{^1(m;NEA zb?A-m`B>k4OT5)#*6UV4<$wQqax#<>SGi%OXtLEaE)Vn|(nC^>c zKX3arrF{p^PZzxBL0eATVuWMFGJy?;!d zX<|X;!^+CU(sH)m|JnUk^*V^v+u6%@(eZv?l*jix9lq>;{q67l81t`n*s^1)2Aqv; zAD&e-!h2xb3iPzchugDu1G()hbVHBXW9-7-jd?xbzT@k{-wlU9porP$z#GNN8TjJ` za(c(;g)_TfyZ3o7`9<)<#TVV{k3Rr^D1O&^|9XG;CjLhG#qz`WL+OLYADTN#zo&Pg zx371|ewX=X{RRHz>4n)F`5W~cP`eL*=ltcWo?N-{*PhlFk zZueJ_GUk)~f07c*1t>o~L;!#+0ssK2|6`KrzetImoq>bn|K}!2e;}=})je|d;|{Ph zjAA*GjHUTT@HSFt7qKFfXx?$c6Gj@0|Fn?c-wP@pg%u1<@^}r8SIj65%PNg>vK_9) zA3Wo&8*14`m^5nGUSgSN8g}{{d*6-1jAkWLlJc^AHw@WnT9Y5>~k?~|mh&!B8$)GxykBN|>%aJZ%R@ETj z{v$6ZA6; z?BBupdl|CY`Z^5?vvRBcoSCBL;q^Or+EmCx4r2!_aI8hm^BSNfQDXDBX>^Bhrz~7v z^|=9eJ9HZHg;S_Q0J?z;;&wBpgxO7p4CV~UzxyO90K_g_2{9J?B3vce&pbW|Yn-DR zWSG($iQ!FZh|?sITe$0+VQ`=o8G~`BL)y9fYGz zojjT|BQepaWk|LBiUn<*auJ6z$U+D0>R9@H^H2JN=X(w^IfvA1zZJVJjFfb%$c4;? z)5lFoD&@X>nJazdK=3XCHfmg>f~IeMul`vLs)(kmgd|%8t*JdpD>1mRvOy(H4*`xA z@{3L?`_ugMTUat#k`uK2AX0TgZU~wihU!MNl6Y+&nfsb4ThnFUvc*+-|9(V(K81%x z7N12v&!jhOd;SlLWt;-bKKlFR76{FyP+E*L&&|3|d~NyN^F?K|)IPG!V&$N1qsV0Q zur5x8;o`!~a=aNtr0^yQP@vZHPMQX=f;o%@KzF5RB{*9KchK;2k<4eoD3rXT$!_?sTY8Tc!`>HzTXKdPo3)r%C1RSlt}wbgFuNcQJ#*LhwIhy+AH zu-u=y*=G6S=E^2`8S)si{iqW1g07_cDk1oSAunF9h+17jD#=C8my(KJs02(k4P1t`PG(8K!7g9GzW`Ori6^tgMwXg2ZOJM| zP(ek6&c}~Z4#Y!5P#t2EObBS?69cxXGUz~R7i6$#V{@1RooTXL3D;3asf$m-;CJl} zG7W}44~2T%<>P%S$a|H+yY++TBN@VE);dS5v)SM_!iJdPjd1nPO!Cx3*u*PxtBey1 ziL6pq3}7@q=S5QPE(Z!;t$^V!`)f@Ss$lEHP=?Xau$`H4`cb=MSx3wQ?XAv30jL4i zar!{}iQ!g*2!II0>;mdX#{7GR<+8Oj!OCo-Xl^RBqckHa1u#H*pl#9Lz7*g{N#H1m z1uFBZ6(k;FB&d7DxInsQ5FE;cPC7ivfl>o0w2E`oqQ4zstRey+R6jAUM|Ya84!X5v z0KGQIy;V`Tyq6CD@0;!h2D9N-1M1VZbyO#Bj<=y+Sicja>(2}MwSm@A5lcx`wKly}{r19lkfj1{@Q z5{1NM5b+!l*ctwj5H`6$tp>%YUwmqW4s+eHmlOaJ*dpIST53_uEz}lhaM}zBEN4lI z$1tu5h&r40@2w8x#n?)D(cGA8V8T}r3USKh!YmxL0uCx4CGLvi({hOJ8*L0vaSS(v zUF#j!Kx(mC%FsMGU=kJrhGjD44RQxpjLBBc4-$K((-_wQ*OLhs8?XiqhXOoAvJ@~Y zcbqY2WvDF$eJ4b)TNH&4UTP#nH7=?IOazP@Q_&2dbQ57Hj^k|-rh7!4TqP7H^$_lx zF6)HBN-+qe%Koc3NybEhl%oX23WQO8WOlMac~~1XTJ?h_6I$WALCe-_t!XhWfwmm& ztQ3_CfrdO|(Wq_qV)<#zZ%AncLT*fcyqH#dBl&tTK9yQoB4d3ZIT>Il8>zA$(blo0Xajr&)>k>;k8 z4&#S3;9F}^_Jxc46mTRM-xaZ2pa`#0wAv-`aUsYvP%Ao{(L|WfYtQI_$?}vA=5>Pk zj}T06ZeA}Q2W%XDykN_K$^M|z5#=Bpna(GD3 z=zvst)^N_bT<9}Vtk)b!9KZt;%YZaiZ(fm}KpfCB#ltbwOV7*!4BNlh}LzPXq*7v6)fu)t>E z1!Egqd{WAVey;oBY-jWzLd^!!Hl4s27~bh1H<{+(IShP>X?;^q2?ofC zROo9fi`OYUlNxSwU3E}@+|ZWKIhWchD{lK0$O$nJ?0HP9DC^Lm>1sY zl~Ef34t0$INPRK1I>5gvVB>N)87C=kVlaYH7p#HPw`>4GGHE%69bF#el`yJ$W?Cqb zWycKfV}?`dh*5$eX4FIc1@qoy`G5|CFi)#8CNS|?WcRMfk-+z`$ZsW)F~Ik5W;Z9pf&lWPF|fc!h-kUjDTltw})BAm^9=<5J|0XkT|2taXp~vh(UVAj-+0d zL3(9sNIxms{ZlThL-2`SS?-!c;E_K?5A-2_uO3KdNIwbs>6K32(r$r4@`3_sUj2gj zp@W^oysk zsP@Srzu8PzOd$CM9eDJu`u`w*!cJ7RBl*SbsT(Y5-8u&OM>APBhKxdf!(vR*zGC#- zE16xTI>he1{qU7B z{1~l^55a#s<--0^nxnp4**cr|wYseD^Nk(mZ_jR`txpE!UB6AlX%t(^8n)7=X>1z% zrW53VTJ*a9ZA4PU|DASzY5JxS3qzBcS>D*L0@Z(OOsA zdR?n`C9`>@Txfc^q#3W8l_H7r`p|FUvf#tOrf>?rr8i-3?F6h4e6yU~gFEKQqz8LM z>$l(V`2F?M%OIn(gunN{sjRNon-iz%zmA8%ZF*B*BVAYHzl?BILxPW`evn6<+DbXc zxWuPC zv+-JeC34zs*0FQaA)fvchMy6G<@NiJzcm{qI@xUFtZkVXocxjYl&RQYq`A%WV zixp|sXmg;eJeG!z{#{zeeAcLsjLkN`rm+A^%P7IdzUeeE@@UDB7{@Z&(kRKGVI@V* zi_xa>Adg$_TacvyRi>*YTKXtuh;U`nj5H-~y^|+r^#P&2$uOcXlTjZ3>>D0_>esLX zTNXOAkx7a$me`~-Jwe)s(-!El`rTL|!$m71xmj7{UIK1({ z*=XSZcuBjUW7_rgw=O7u7?5oF*@%l=^}g}v_?Q^w@8()?*keAK!T%OiJ-(+qEv@xm zb3Y;<=xy?C+4=cA57z%)rSJWkA4l(bh^Ftk;o)2I|JVJ(@9R4~F_5NvdLZlyf7AQu z&VOqEx!6b>7zxY&^{U?MbxOYb^CvFvEA0EC7B5_GE=@w1c7cWU<&Dd9rEPjptwFCP zv)b@tE#(r+4YxC4dy1|4?K-cKhi0j6avim5tj5guQp*jvGxDjCsWSz({;O(4u7R>; zjBlE6uxIGEQY-w6_!;ek_qpf?@IR#_xD&i^fPxqS`?kAsIsyd>5^gp5`6pmWUvH_h zX6sXHuHdAxl@PQA_sBS*5TUWpVrXOiU&wJzn!gS5DsJD6PueSQ z5;%HZ5<+6U^d(8i=PjulBuz+HJO(>#2moMpa018OFb9YEYEP4hsWRF|McH5By5}AuB*9`NQuX3t zq@``BsYx|2A#V+eoFGCLeb`Yj-1Jzn^=v~M7B>W&cHAcweySqKg~x3Y0ckrRAjX9h z9>Pd&gBAJ`Rc_+KRUr5&;*^4#)=EY@m(D-O#8};0MoUWTiEPkxRnYWRpkh0Iy*fkm zpnmmIjW@OIr|*NU-5-7_E5;f}eH%>WxV~#m5KK_%Ii8Gjtre*bQ7S=5I0ad9kj$Yh zm^gG-Q68kaZ#k-$ArU2H%6K8%A0E{pnNTS4Ip^C#SSMMR@h^UwaFfp}j%&*@QXW+j z33UiV{Ip9Y{;V7TH55o{g4AzChI7lF;&YtHo1DtS2s#EJzw;CO8);Lc;1qxB6^pq%Z|V(^S<&lFaMAXGB)RBbLg_}Rq%%GeWft+p zl<1+XO+vAJwZ<`mbgB}uJ#D%u&jxUO@&rXX+x|HndXC71?u-DhU!I34!W}n4M`YP3 z!HZYrS&@SE?ir}stR8BQpE$7xM<)4XYisHay6Im14Jrq|6-M>NN)+C`}KyVphsQsT~ zY=EoseQ%kel6)1tV8NTKGyNC&UfE% zg=MWffHCoH$r=Oyi#Y}t4Y7qs%xm*if0-wxc~cvJ5(q&+ z1OcxEp!6DW4WOA(T5II*?pcC<`qugIid8}!UjgnC_~!BONxO~6Wwe?K)KAbnwKMK= z(F!><{!9Vr$f#?yRpAJF2-or_=_;v_TVob(1b4H3j^Qa z21kE(<;!Lk$KHfz%4+J)H6~mGmvg7jgFeeVZk2gwutzvI{u z6B%~LG^Sp#5Qe+;U84*OYPh3FsZa656Oi&|F5U&wTl0kbBflQ^(XBW}A86NU4@pVg zU+*AmZX4f0$2TD#CSm7N97mNJNjjR2z3rd1w)#J(es0RLV`=4gjT>D+{{>WV^r81DyLrYJWE$&lF?3A56DlD|eyV4+49j@BCrqiA?eUn>{GK z!{H12588u%C;f`!2dzJ(e)sVT{Auii@aF*71LJ0}^Ue+DyZ3a=@qZVabk|A^g8oY3 z8vIIY{=zx{rcO5QhEArxLLIiY_IA$nrbd=_^rpuDukw11vaSS*B1#Xlx_ge!Wk+-% zMYE*=S$k!w89zg32i-zTMmc6=XCt$Ej;otnPR0|skO(yb6A8YN?7}%AO_Ud-Z-mz^ zDFyzeD1=Xa1Vk0YM?&3omGzs2?tj#8b8fP|Pq&;a4$ zq`$aUIB5a2I_4O0RJ@9`lTO`clYnyc=$aNb1Zaz3LMx2uCWA$Cu%e(9BE?a|Y9w&9 zyLwZv_+(iqAfhph`)2_JJ~7G}5J{9Mz|5cEh-gB?4H&J!=7%;k%H5k9t8M5+mtl26 zXCfF`)6&R9trG*(mrd9?f^SLMjcMg$YEt;e6i-7H5*=b}0Fwn|BWPyNL1~h*t1Sis zETaQAwc{%cR$-0=q%j~nf+@mlT4<72Lj)~mDwX2baiPqg+5lw+%wGr#*fv| z{|Lq>-jG&mO!1c=Cqn2Jjf@!b|#Ve=x@qD&q}K!fT983-D!j0F4@ z*{tu}Zy?&dCFHZyhIj5|Os=NFNYfg8)G&}ZaKM2cXAz?0njlC{AqXIGBBT-Pz=P(a zB@a@G9j6kS6gpJ>vtQUSmel!Do{4li4Dc8yx`AKVEZ+Uf~1ZRFdr*j%(PzWc~nVtaq5ak4m@*7&|(G|p7r zcJIS{h|7(I!^y|b%E;2ma!$|D43Nj$mX?rv#WWKu&}4PZE1F&;dH`qXpsG*4S9?GKl5#lcG?4t-<1LIZx~Vhe}>Tij4L`r z2M1rJeyc$SnC=(qm|3!d%NA{TQ-+mAFz#d|9Bo+agj&Y$ zG8)Cxr*HWB=7rlRpC3AFvJuzq;Zn|8>+V#w^4PwjG}`~q*)dN%Sk?d449ks-Ohe>XScR9XMWOwOF^p zxzDT!Z4BEgHGcqZlQo%QVXp%Pg$rhpU7xTzN?peE!luL)1cs}_B`Do6zrQdCm(T- z^>+UQ8FULcrscZgW~JJxk-=wxiXLywi_wg`TH)QGOs$~=DI#Uw++xPBg#7Ny#Z zQwtijrP^Bc&u?}t6(6ZQVQT)A0HUsJ`aw`$T2psNTRNwxxP0JdaXtJz2h+kN zEODNx5}kGYfJSiKVq)hO#c|_066gAh*S<*%gV`8O>?fusznlvbA@N^Cs@!YuQxifl zvcMDcYucfAi&-U$6EqbC}Xpk;%RG=avM>NaGnpPu?$%H>P(1__W@(A1f zla2)VT*vL{ORN74m+ijkdo zKw8lx@)kTfgk&g+0XzfGuq3TX>ssA4mlgS-d#6838zp8<5vdu62_DkJtDD- zjKvJryBCn)+Ry?v04Wj_*_C$OBlxK&MogClWE&Wl1MFr{1(JYeW*70;@B5y*kV{1*1}dFYiTDB3ecl*^w(a7hJyvC~%i z#>04EdD4TqLSpG@;y+ephHQ`w)~F^;H(?rN0%wcBkuGN;?xh30KvY*`>^+zzvXdW# z&BqvlbdY!)nPT69{uZXFVVGduhi;n)s<5%A0AwDt!#=(jmZd95YWxcdEnsBD%{I`) zJ?R4RfIRN%j!?(F$K{ELze8V*I|u5;2eSmV z1XL6diB~0HM4()%)hp;V9B!j++Bfbn!T}fD_n3zIU@eek|8;4-8xme+bO~!IcbKXb zL||Ro#n_N6pvO7q6lcM4UXidU3c;b!5iih#yZKDKE=%DU#4V6j{|DZqFC@-!4Q>hl zLNegakN*qt(JXVu6%() z+u#23rxhFi9#^q-r7W$=bAROrD5K+gchKw=-2s8gar4p-+fE*Ta`0vrzWZ^?{H9e( znDOlZ`%jC$q^)|7RPzS;tp7Dhyz#UwvVkK1Vb19={9r<>+D{GqR6%2%a6#J62Hrd1*>niO zy0&*D4dfLSdeZOKEG=o9)|@CebC)4{R^sRm(}+Pn$kC+wRHJE_%t=08sWwxLL_=V| z%jt(*bt+)lY^X0d^WWI-DJ2CyIlffKM4%2N0ulrWwHND#FA#ZG)wU>; zdHgYDM=$zUY+gokFUw6wWH#SyZKMjnV5=AP`4_EH4wPObP8dhA3wq?WNALOM!}P#^ zG&3i+|H~5~wfPm={a0E$fDQnF@;{l^{~DnGvwHcjRtG10b0<^h|F-jR(R_19R!>zc zpI9k6FrT0^Yz#$7?gKHTAR;wLRnR~qA_?e^520BTqQVB%RB9rLM-U>2ZcGaKtK6M2 zBQwj#D>G~IOq!IDTWxO0m9*>pPCquz`S9WM(w#_42vMq|`m*i5>)zYhr9SaZJlYZ} zq&*W`@`Age&RJuQVUzPBON&gMBZrB2Xk*QoJ&Bdt>?fMjJmTqc)Kn;eD^Sqv={XS>jw&9I@= zeZIo=xm`JfCZ)ly!-q|mJXmbxUH}ta+F3feyl#`T zJd@_cB0mU}V)wd3vEog=EM%DwV+XWTCTjItqZXBRs!9*;lk@~cGi&i=HMn?t=?d9O zY~KB_7^}}S49>cClhq!Ys zMhf5RLOE#cCRvpHQrDCQf4f)(cH%D2uTQ(wU32EdsDEXRot15uTzHjOkyf1|?bWRa z7~MPotw)moj@Io|q-VJVUd*6PtPUN324g*JQ(dFD)=Wfj*GC8dZk|x_lC56ti8$0Z zc`_riDFzIp_2o0Xc&|r0ioS;Me7@e8t7Sb^vA)<`V_BQay{P*r#r(v~t0X@{noa_& zwMZpUhR7C6ah8(c_X#1X-|NVN=+j4J;|DBBy~0}gcpKZ z0d#loG+(DH48w5?}StUatiugEX~^DmXK(68WW_%O_5y!PO;S$-ig`$5O3FuS^!~ z7|Ry(DYJ%FH=Cei_Mnrd>v}ItEm%c6>hF_T*SSeI&4wulp8kGLr8=PT{E{s&UTaq^PERvSiyijJuA#ZdnGoku)VkQTHtUvJ{v7p*Q7O(=&VK)X z%Z6UvJZ(}BXLB(wZ5a$q>vL!I3*=qPJ{@8ARX#J0RLX-MMUxfiGYc`v&j-xvtb?r@ z%r3-BEi`2+wpwRw)4?m+4(zb2>f)8U?`a*X(ugnn7QYpRa(CQ*1*1O?(g5$dyr@uW zrIp>33w@;@sS#(5)nXQ|vwzKd8UX_x<_ERe$)pSm@(4dI@?=>}`7?Kk(p_!XhyO7} zT6S26v@J|W@AqqG9+kQ`PN}@}RhjjO&bGqW1>$7R50BQ{LS0>1>P(2yxy4e%8#~bm zM?uVbP091{2@Eum`NXn}P`%odJwvGx<*GgFD=6ltXtW?PgGb}y-ZWbg}oZ>x2KUqwt$s?#pHhy|+MIdE5rr+I$4hN~tD~ zU@9wNR0ZEf_!tp{VlzAznI8Mh17Gt!DI_akkSHjW*_3nAB^IrlZ;K3uuE12P;JSiF z9>7FlNb=KU8sDAKM4IUVs5M+)Bx>A1>huFehI_W+W+YphK;2dPEZAlNa-|KY1!$2a zs}$uN`c-uM2Z0`Xq#dAzOBZZ0_6Zg(a-0+M z9?D|)Cyr|(cu37^8x4g7hYt}z0`$k&c)LgrcCpuP17f=Mh=;avdlEUHmM5XKhtTRM zAvROO#%jbU#@z(E?P$viJ{UL=KRY46J+yG&psscEO#n}5ApT3Uk>R7M{^M{h9symXaL51FFeMpTQBlwpu=Hz>}}RJ8&O-xLxBJ zm_{0se1=LwLS`VINGdE)Rv{*!uV zvXQT1CEkNbqGiF~@i5j-8+~s**m>}_r z?g6$~wjOz?GmC9#O_Trw`lCl=%wyqBv!N zC8MjDO)aAXYF1f2=-$X(s6oWUKV$Rpxq$XZLejAO_AV%<9h zg!AjKydfXoKfh74KeJnQR7Aj#fjo!!Ad6qgJ+i~>uC5>-l_Glz4E zYlxn32->^jEtkekkvTRCdWhg?6lD3YA!EiwI%5q!pez;u76ABw7V z3SldiDJF}`bt(N&OgX2>9|`?*43Po*N4<3svR#l5JYJ9mJfL)7BZ{UL`(7~Z2%HgG zp>@HudmNBpgr87U)Z>K`Q^r$0j~$irVDMTd=9Y;0N`_=@A0Q(|F58_we$CoZs{ zU@?VBvL@>O#i!g1RI(n)xXHqD63|n}f!yDmLF*E>Fkyk9-}EizS1rdkQ#G)eMRy0> zyI~4smt;qjC+~5VoglPuf@8)fVaBInItVp!p?~wAGs7R@0(t(vhq$0#tzm=}33%xy zPBvmONPsy7Z155lgaEW4PJmt@1B>_BA)hxGG>+IQ=Q?+&?LNo4vQ35e*KaTtKGhT= z#6Z^b!D%W^7|CLyE>tCx0%-y*{t?t6s-K;pC*-P3VpQhQvT5dQd5r*3ZzlW>2|~dK zky76tl&8FmjQx}}wTa*_CWy{W7DnZKRLSPgQP~?R{Ac;b2DhzTli@t-Kp?9qgqN33 zG=-aoEiOU5fik+Tl|A2g_IEay^rjSr4fRx0*^zt>Wj&wrWy)suHMufw9+Ph{HOo%Q z&G#=cPvt?rv)W~^P3RiO8Ho-tAs@fU>H@+~*;F9sXwZ(7OeHuj4;2@^1^-ne7y}M? z_7)HS_SW=2llYf)XAG`DtNRmAJn}E^}#W3sQWf*PKQrRq^ zZY*hD|Fw5DL+0rDUhDy9A&(LBQ^Pk!4Y4HG1-EoErHRBHtbg4O>F@o_eBOv&e*jO{ zIp`~(?&12PnzAwN&Ub;opoRQb%;^Px966NFU11%E1RnSyL!%EUGzZZXm2ul5uKE|Y zNVEhg$X&Ni)6g4~%xp1%OBGFU{XObxH|Ju0MMrh6!)(kgQ4CLx&i|G@m z4L4C8mu!_NRzk8E*+8pjX2GObyY&CKrn`n}uI{_S_F0OTeO#(?JcHm^54|}zX@x}! z&pI!O(9DbI2?IkGSPr3WNyRn;nvZ^ z$eqdGJ-jb|f_|a+D;k~_SPCz?c?rD=K}F6MDQ*s&J;3gd2km0l&0*gHOdo+>en-$t zh7;rbvS;r z?g+Qe?5&yI;~LzZgKo>+cYfE@5&e$ii>@5nU7l>C`sDr6)KUHJ(L21MzC2!;HQlh- z5mfHw=Eyf&Ba_$>t<`o`M|Yy#;t?>>zyZFYg)4LP(_9SyCyn5}|A67+Z%F@_YuhI3 zChleUPMj2Y(Bf|kf?mqN$#+3s@Fj3ULmEOheCFvFyv!F5j8bx$g@KXu!{D26LtS`p zVV(3`5wKsFE$rput2j$do%&J1h|H+W`%c0xK-%GFR7b!kXq9g@Y&&s+zBLiJ#Fr=p zpWWgHSu>qT#7jcMT5%6~Qz&Y?cNf)Rm_4LcIK+>N zosf#PrRWd=k4H0fEaM* zqoCbieybGTap9y_P#kK-NcVZ9!9!5E?eYghrg~t8< zYB4O^l!q|dk|S9v2W;6si~c$WPiiHU&X4mXPSMb^I5hVoYa1`ug{ zQAk<14qRoZY0l>Mya+gWlCS(_R>odukcj85rW5>J0JpCp+CQL#=9PZJ)?% zRmeaQu4&o`uf6ZJXol`Vd3Jk4H6gUGPC)Hhc7QEamd7 z1>WZ04Z7Cnn*X}EnlmMd@b5(K@b6{r(BFaF{=ohBT?D#q+Vx}3-9e4;wR$y&8&B~4 zA;)`ilH)z~vjw@WYP_{>Ps(I9B12xM5ymUhOV|O~sePG@Zvb9GKL)Ru;_?IWBx_!8 zJ*Lv(f7z(NZ*fl*N0t|%-*H?krN4h!mzqygZdvlmc}BhT$mL`?E~+YPz9tBZkFUS) z5wf`Y;`7|ga1VyZe+7vNaL4fW0m0HU(i+_z{Bh2=+;q6b&U}fWcjfCw6zVlc$ccbN3Pg%`c1$h-q zmI?7hIuI;K3)R{x`5rQHOjtog9A%dRsK=^Y00N^Q01~kJRj3ZCP_&E{R0IW8R68L^ zjWX5BH@J|9D(WEmeZRqP@7}OiVQ~-ADW^nPu_}$DpH|)!k?5g!;q`m8)+Hu zD63*sBJ9jq#Y~7vGD$d)Hh~f+)HX2^9?x7!yrbP&8J?05E5R`8R%QF`1F7oUIEay) z;Aa7eCv+Zx83uQ`%$OZ%1L%B+O?|j4qHwY;8C$wZHSx!$9kIG2)5pxT&LR6CBaZ#gk0E!yHh6WDp2 zT|@7NQ8l$;KN*=$NYZbeg&w4Tv2- znrRLMiL&t1mgG&uF^G_+mE03o(tl-qe+RQTweLKV_KZOEhiW8*fO%Uq0yfdaVU{a>#>MP!(qU?;*Sv zxO#fR*Lm<2?1T+uIi(3oIMJHqBv=urQDPa-Up*&LmAL4daB{0iS8cRflguK@ zdg5l9b5^<+R~5SB^>)wNAN}B`k$<~lOQZ?hm`=lKBIx(tw609&^juTw_2>C!Vfp;E z7W2MmJLRzY;?H#~wdb?;TIMn;Xy&3MH`P{baGV;ySFh~4V&#|7-r3Trw=c|cSlY|4 zk~6-%#j~b$nMFmS7rtl8){Bgx!K|^m8>vX#7!|s{mImirZOc+TKe888P>mi!PUUjW zcLCRpiNS5c3rY*P)1eRfIiZ@<+x={;rat>IZ)y&n#1uVIIOPIRsjpnOGC!2q?pH;(fyI;v=x<1>IzcTJt$?Ti^~ z6dR8_1nt#b&uX%D;As*$u3g6i%l5=gcl-|{4Lk$U}mz5iXpLKBVq_b$4)4b;w>d>ysjZz#()Od8<+85lV?fVi z>hn|WoEaH;=Y$~}>oH8V)C*gi@^WWf(#X z|Js_1%;y!hwq5_SsLb=^MjyKkuUg?mbk@`sQRj5XQ+oHj_$yo0PWk6P$IaP(Q@qt> zT<8?GkC7Z_Xe^9NWTMF2pAYP`bvyZyb=4izwo7QvIrh_3E6*?!jn6ew=u)nl$QPcH zrm}}P`}K<6_LGP64yw{uV|DiC)2F9xYtMqa1NXs}*d0`a#?I;!nOL{M$gB4|ZW+Ub zZ8;5B)jw@ZyXM{&!+RBuCBo6~5LLalyPmxiL}NV@Cw0!k=eoNKnWP^ngE=<`Z#tFm z)<|e0=x?dLTQ9Hm!;_xOzh0OUeylFe!m;IV7)cMRhp6JAE8nZ%?z#5%aN2qe?Ja#@ zeaGa=_qF)tP$TI0EZpMYoXi)yZLBH07HGv=&lK`k?MtI>kp@;n*JWf8;KY2DW6j9zOPzQU$&wNXojk(A`VUHTb%E-z1@Tgh?kz1vS) z%jz0VWyCIu=J`1zbq>Ml?)0lM8Hgmh4Q8$F&$f79bagqNgi4&fp0EYgK4_5rB}U5MUSuH)qWpO(Pfmm0G!4E#Ym3bX zQ~h~<^c8%G1+kXd5vB@!Ap333H3e=Vk3TValALh+VLHMvg3g*!`ISo)YX~6<{8;-< zyskqPXMQ=m5czm~_B6+WAVrpNKQ$PVuHV}S(l6X$1{hDbH^qd>4~IKTzm79Jl&7rj z=ljiqF0frCh1sjgOSAgAl=u>R61;McAA9ZDK`)P38R=!GFO5X0_&L;3C=8NdxcsV7erypa;ez0#(rY^o=9n)vbw6 zMXZ)1!)5?&WBNob=PFa2iDEX^BuxL3QEg#lmBlQJQS8p(qn763=cY@T?fc$Dsr+jkui##gTGTOWIv=f$R*CsFZinFn3vvO$xL;eQ6fGH35&_@;- zAEj%pyW!I4J>y`aA+B0haacI&=lQOy+)+-G2;zn<<@1F}vXXc%s^q#q<5NZF7GM1Vjh$RHh#*??>+2q7IdPl&>4$!~f z`W1V44U~2cNz(_udJfC>);HOR{W1`44V!=H&m3wB2LyN#I$XaY2aY&FxE}}B=pILQ z03ZiwFarp%BbQ%Lo)Lv#*gi&}Rg4(y%pgXLC@vNQVr+WIcpHGS10!93aT`pUF;~qH zy#uP50a?u;JtMX=13G&lWN$yu)TpdRglHRRs}bb&kgi5lrz5;y^hX^|?aNlaarmC))4P+|K{$9jg)MAR4R-o@?oR4kI+Wkkjvd{SsVRk;V5PQW#f;K-xm*V+#7KSzM^(pWOz@Ryh51^|Hm ze;)xOQ$yPj4Qr2IJKz-$k`Ikn4&pzF@zCQTh#>K@WC=nvQ9=O(@xNv+)e^?q zznHJ&45$R-kb-b~dYE+h0#bgHi~FYRnOo!|xCDsNI&?BchNZOoclE*sly@FLm6;Vn~Enpo3OG^_VgP17Y^ z3Y1&P+C0QZwrpB<3cvo8+NEQs#^fd4n#jZ*zY6W~lJ73Ly0@8&Sj#PTB@mR1>* zhjpcy>#;afstg<0J#z4|gc6_fbx^;~Bbj;v9Z=>X}g1f0e zuvqJks00CD#ZDL!x#{DV=9^j*9XZaUq-Yya;JsuvP0X=xt7@Rz=FWCIj;6ANP_JH2 z`71j$>Z|7HH*VYRJ4TmLk@AzEo^3vbl0sAT7eTLM9H#c~ZIucoN8uYBOrh1!RGV@J z#<);6b5YD*x+Y0$>w>1;8WUy;=W8G7em;Olb>DR=6;JDoZntRN_>2AQJ0&|HpSJ^v zUr>5Q$KQ3;Qcw&1jLJl~wN}5i$J%#w{gie}TQ^#aEJ_pe#fFesv02@PcI>4C_Q68k zjW%QwNYp%|%K9u(6>lLQZm9ZLs+>l;2mc~pPyb1?kaL71;N~twXib>q&&Ny9Xwg;# zTe(Ht%93MG0Y(;DWft0nZ6={gt+7Y!N8V-`7WTX9bc`*FH(RDy@7a8)6;v&iOs%nJ zY|eh{IhYGKi*EftagM_BqFn{0ETr?2kR3A&p_e#NTk_-Ojs>CRNcEREuMl;3kDPt9 z!6bM$j1HzQatfD}o(Z}3@**ROq%1O$Ua0Szx4b2n#tTVgmYKimhd-MiiA=$9PAV)J zLXi<<7--=R5IJ`xe2$@bo5(PE3i=+`A$DC0wbplQksh;=ZHnqHTX!fjx}0Y?p*_h? z68~W;1$)n|8TFleU641R^yu7M1MYp*@|FpMA`n~JYap2ooYaX zPN4|urVDB?R9j*&)7WZkTK$u>SK78J8;6z5Id~`^8ySvXKVf1=Em1sWaP>k(v%sc< z<|QHGIuK4=DjS1~c+7Xkv07lqGrx-sdx(hq6KEp2N@go0wdR21pYBzmv;q4gAuQ#V#nr;zJolDE zQWz|K+W7o(*&ruOFolyGMwYfYL#s1c{la44JHD&!URyl^{lz0q>M!s?6F(Uln?%AK z={%%Q!0A0@N+FOksC{681j>1K4W$z%ohPA~Hz$q*)XO*%;G#GJuux9|=D79%E0}FEU>-yFbT%QH0tK`o z9zmIgtYvG>Fd%W62q29JSj81W^P!I(w>T`8Sf=3~C`#yuSOWMi3G3dUOycL>rH~Y~ zb_!*wY-pE~vd}qgK(}%GMhwr0ZwFE(!a7WFf&W&vO&SEW_uo+F z#>M%vgq9K#_gGW)~ckQcP-9chOxjqc9;U zqr9(11faw`77Mt%S)wZQD?!yK)G1NZWo7At&ku)rzv^E}LxU#bT7yj@G&OAvJM2>0 zXXauuIJbrLhk4xVUq!;FC?|t~DTl425ccu`g~b<6;3UC|3LB8%Vdi8oOa&PWXOcN4&`LjWkK*E=kRpsv9NpYG;2sC}v#iSeB{iR?5}{icR0vor2r z+HV?Ze5DDZgSw(w7TNz+l1v_SSkED!n9&1-H0;4?h3%aEx*^K1SH)*42yb-QX6Q1Z z>!xmgYhBka=-NfPJn??h!r^EaGP^5nw29&Vv=$Pm8W4=C5f4&g<4E0>7VBu3-wgPq zWLSgAP(t@&=e1WV>=tqxKI6oL>buLe<|c*R8s#@4t7Oe>4(o+A7oZ~E9^xWkgLAPftNF+L6p#!t6kn`=RZET~8eO0eJ#g_XK_+1uw;^%yUMwJgsy*xt(~ zm^JK#R|3Hz5>U02L7@mDT&8=qVC6Gdf5(}uubj#H?b7)q$o!HlFF+KqkCZq`j z#0iU6som$Wt3lHR5BJCT0nkjkG=T1Yg&nZahhLLRkNPj=2jSbD{&oB=zs2u{kB1a? zkSDtiDTN(s*9_Uc4#&q0^89u^;x`rM zpTj00&kmofpNG>JpSJjYr2jsN{(C;-_bTijENn?Q>8`1Jg?}Ri4z_5YD(pV+5o8ZL zY$yD>48Biw^83}~art{v{+^P*pUPjRh4}+$0t&kyI!NFH=lGb0p$_VN-eEUDP&Wik zck%}@th-InZ5F%D61PF6dI-(A3VX0F?4i1_Wz_kC!)}DI7^3}fj6Z^CKRz4nhZXjS zg+9D}eCaTv`zRv*7$S~+>rr^xtZ_$SkGWqjDQw35dR}3V*HwMdVK+f~52PQ7@h2et z=~?MV6!wILKBPY_G5RDlJf*NF+dOVQZbr1fipK9_0afkrK;Bc0xmz&jpqV%Kv|C-j zZHcG3-pCy&g(pL8jGWcbMJ%jZ6kXf*NS*G#X`ti}fF{w&* zx5-R?#bLKYbT8<>+RdLs;nuNsp3_^qaPD*+f6i@=I&27(mxJ>8ZvLXAyokS`w_5mZ zjp?)WFStg(80AORdd$A&uwn3C0p6Fo`8VslUzfZugSVG|Lt$SJ^OyD3OBMDFR}`ZE zvMcJFQU0}tsDE-;2BHMQ|IfnTXX4=dErtDy!*#!WNm=1N{hPp_z;8=tI>M)zsVFNm5 z@$W?13?cM*U0oz7cd`+jx?V-|cj`u5bt7k0H(FQs9jJ>pr}%dj_KL&CNF6qd@3vVf zq01+l2yF*+CQ5@V?`q4t+T_gzX9hDktr;|F@Hgv|XVkf;uJhj+Nv!ETkNpfA)hwm4Ph!GqVz;126VbA2BXs!f>eW7KkVi|05~HmZT%5Q zp70u7+bLv0Ro=YiX7C!ZgEu%ZEwC8(5hFEPSF&+af8M>Q%a!*7$liux`JWEk55KO2 zUq2*#szE{v?)378cL18AE>7raiXEUw6!*~#gH7~k=1cL{v4Vc&u!AHAXn4Jw|5$HJ zrTX;r0KG&-=_A@jsFv`#pt%i!hyWF^8_qzL#&p_(Twfwjl)eI}4hSI`} zh_vgQd#>cKL(6f89U@|!0yX*4mv}w|FozuWIl7i2I^HHTp@IdBp~xKLkE8rYdN=?;wlIan{;wAD476+pMc4fD`;{DJx=}9VfVt_?eP3(G5!YX?HdbU zdT>O*QT7)&%69S-@=k9h%p^NcPqcO+4XwN6{&k|0|D2w4izaG*Vewzb zJNYjm$$edu)$%^zd5LzMo{iWluxuedLw6svW~In{|FV<+DniWiQHPihOXgGmhQHme@Nn{x*{T zw)?h9$p>ZvSfgLSxV{qk$jk{0xe|u6h3Wu9QKIU>WZUbn&DB{Ti~UI z`8E_#`+J8y3jNn$fxgqt|DfXR-KSzzsj~i=!24rZQh%OT%xBR5o7`AUdSr#NY1mB| ze;j4-lNf&&M!l;N+8ahEOfMPkgG2E14^jSmwSMK&<(2DQ@RBiqbl4YR%nlgyUN`@f zii!bag7n(Uj<~|#hw%5$BK$oF|5KFzaiQ?{!ArtFaM%+Nel5cP=NSJ0az6O`*VDhq z*VDfeH0p_ck`jv|Z0PiDq-0UqQa`Eu#ieb$mI51;=D&vdDO!<2U?eg-d`de$H&BOF zYiIp2wNCS)!=8ePDVX@T82=C^en=)-Fj1H>{*m5;e}mqtyZJ{Z!Pj(Ogr7!E{zuRf z$9MfDI?2|kb3HG8GlN8bgk(Y4#}4}vlwF6QA+8@o*~hBUZpoX3dx>!F_6Zg=RryXE z#3j;U&$Rp>00030|AbZtSQA;-&X52@2?P?Qh!_Y$5C#GX7(iqo6sZCMlqM}muOSqX z)m7XD%UZB7h;^lipxD8-h`=HuV#Bs}nu-10$$M+F8bmj@Oo zOzIGy`kL%Wrn4}3Pk}6F3xh|VLMT~{jM90i0uxZ70G&J&o`J!83uI|1!Fx@ZZ7d6EU zMB0zj!r%iG8nS>E`F#h<-<~w!`HF`6x(K8TQYBEm1_>=9L+~36J_rgH$b{e_6yl;X z0#t@2=SzJD!EZ76SA5AAg5U9}pXiQsA*k4UE=c)MfowX;Rio3G=`KQn0Ht%$82Xgg zdu3l=lCOP0Lnq3t5MV#7+eX;p=D3~2*Dp{9Fi-O z>?Y$zf#8oe)X!vFAWSDRiQz=1fkL4eTqRFqg1;+eX)uEV!ZTgS3>F?9M4|{#9$6NU zKq2@OkNTF*rw$90X};hV>BjBwTylF%52tpkNZ*|~p76gx)QNNO@Bz$`rI>>x3SUL() z(*X~d7D31X9#nH;=obZ|Z=Kx5Hu5CyU= z5d1K>_+fzKL%E>)PRavI2Iy}VXk}tU3LlXb(3rlC0wLK&$YM!TWXl4L3zr3gkf#)K zJnA@^hsfi!F!&UH1Z;U_8s~cor>7s+Y3XsXVGKUw!GhQdfEPF_wju_f1$7HUA+{19 zp@J3_2u%=W0Z0h&W1&JKma+*#6)1!O6CsTm=_rh$yTow0Q^`_I5LL2*J|Cgc57Gs8 z0z_2<1@%<{^;Ln`D#{!bC4&h7NHL^L8>R}P1`49~-vw!u7KDYrl0jFJWkC!M#8$<( zr!i4LknSS*9-4*^1u4@hnrdKoJS}w$J_phY2N~1(h=z3HAczLtj*e(Z$uR)AnGhQs z`3#mLiz_feW^fhqQ2`58C;+F+1r2CO1~IfC_6$4#IBz%D2owXE1F>gL8L$Zh4Gcc- z0fK5`@C7_5sHGMknGN<82-%3XK*7-nnWYdSkm4vdqNA`vV2{j#*xCRK6gc>*4PXFp z1jL>N>We3c3RzRz>zE+31#~J|Jz3wgMY($gDTJABl@5RxPU8@i}Th~2;oXG;H|H)f@_cH zL2M?#T%5O_f(_RM$AGuq-|b1Cs**m@iZWniH~sHyK^~VuhynYX%ty?~$~2mkR0kk6hl6m)c4UO3fqp_v6?G5RIbK2h{54XPV1FRu7_@s5D9OSgFR*>Lbnug>5}S{afJYLj z3?Ee|V)t-mgfv+WdA^1cC-&DZPfsdeIJ~DA%>42R2b`$Ol!kG!2P#)rlJ3D?akzyK% zwhw$13?a4?25$m8ri0!Q@DXRS3WtLaeV{Fn^+oCUe-jj9hzY>lF#rn`4s`$@Dqyr2 zuu!f67~#@J0t<)$k3k_=JM$11Jh02Z0&kiM?25tJAaDjKgBu@N^iLVGK^fd=D9y#K zp7Kux7V!{Qd@pwlmH@X*Pyr7<;`y%%NI(TVa8Cy1pX@z(h!^hY^)C{VDH7gTB-l(0 zHuF&??#NBBV#GoG@OJdW+tC-a<6?-t7`2>Y;tRf__ytr{$N%diyPa?YH}jS}Z8gO9 z1MYac`D4Cd+iZ}UkdFjO$EFPuNVf&z>qG~Gn$8i}AOT=}1w!lqQzTHJsG&?lrNfrb;cm}X-!&Bk&X=1#-BX;^6*o(6fy7S3 zafC096Q*%aoEA5ETHNGmdL;s90g>R?B^N(y(sttflBWD1TLR;+eDEif*l!GoE3wB} zASh|7H%=3n0;Hb6IIlVal3Q+h;Fbu_D;!3vQ1Z^4@9XQRr&?m{pMFe#eC9&;Ir`p-J*IoSYm^U| ze|xc4HZ3VMewEE%f8?iL)65rbd_1I-eY$r}b4JQvLG#%vw@R6RPm?VetB| z$?n@KK34dDzGwM%#g)AzaZ~NbqsJRm&Et1gpC7urVus@z%!oETmRFe5bvMfh44EYLtqo| zj3SN^pE1jb{qg%APT)BN2E74k5g7NSgJ&3_S0Z{7@3jdaONd?p8IuBuetJh>yr+hM z2nqWEAby0t4~Q?}`vS;f0zU@gL)bq6;!WVYK)eXwn*_$~ZvgQia0?K3g2QhF#(ggm zcL>Lg#Qnf+P6BZtd@Fz~B=7+s_5|JwWC4LOAhraD5+F7N-Ux(G*c1V=CU7ATgs{m0 zVoK=oSztow@v}7|Fg{xh37+^F&LuE@RxH8>pKp2u#_P%?P2Foe*V&}0yX`<=c_NQl zq^X&K_l7pHCx^f|A2T3Ygs(9WO~RK&Jn>qoIA&$xy}Ed9NmZ(f%}r0s%!-IgPX2Brj*k+hga^!5ix*z{C_xS#>S*&ibNz$sZtc14ir&Y|Jr~qT}q1hB!Yq{@^8u{a?$E<&6h8}mJiBsD89{cl=$ z`5+KWNs^inlO~Fd05PSygd~!_xi~Y%JR(|>kSsD6#V(JMBxji?Cq$da#b$wung52kr`*zt)!o1*hkh zUoXfj4Y-TtNCMMLWl}e`RoC5QJH{XU#Zh)lS^r?NjDEw8v)_UQk|j&50`H<5I%bAx z>KrUut+cy(ahR^YwqcRy#!xTUmTJF&;=$^8Yo5=-?Rnd7zArz2>5veDQkO5c+_lJH z=8f8Hx_xK|F9^b*PH*QL;Y<<t?8gzo!pdcW^hq;q>jRXJ<|<79X%L zxn@&wdEE{s(iI- z|IUY%$xn>451cty>7=(S<5TtV%DGF@J95LUBf2`<85WLx$b+$sK^>pZl5X4cZlBx} zX7uc9Xlc^@cQ;dAyrD-87QM61e%)BI6&fgvZ@29m&#n33?^bEEcf|scec$!Brm^c^ z)pJkynd}w58)}dJTrR4xX)q7k_kwrp;=94lBSpf6FD=!4NcuXy9cPa0xIOO-_O zqr#fXlEsvgZ#7Hbu&dYI|4hdg`Q;}&GOrddRX;aKs*gv)lSlzJflo>E^uzN=8f%X^ z&}yGvo8vsRkfs>+(#~z+d-IHKH%b#duV=6Ca!>5at(raZ&Hea^n=OvHFPNv>MC&Ad zx&2JT{5#7YFSuGe%V#RIKl*Q)Cv(HB zt5heRzO+(}qB+-+Lf1MNw9vfdP0^@!^s}6zmiM$ybMB-uCsJ`w-!EO6A!=9oZ!Mk+ zKdezpx%=cuKu}(b@wr#YkmPf*?S;bT9(!u-quVzqwn{A<_WpE5`S2jGR^RH>0Of|b zO4Pqotyr_tgjRje)_QT=*ecZzPaXOl?2SVAVqLMHxEuny#-uHoi(arDnk>SL(w81@v6I@s4 z$@gsSF$asIqbZDzv7V3-`4)2{$KY?5)SCp>f*HL_47Zjh=GIh{$YF_fZ`d^*b&Z|* zHR1>UHu~fj&!N)a!+n<^epZ3!;6NxR-AU%s-kd*772cMAv|&;qeEry(k{lM(DBLTJ=G67 z!prQ_7W_UGkraSn@5#OqPTHx0> z8D@Xu?7623VZC8bf3AR@c+~tBlHt3C8kq2O?D^9UPme^0-<@aA-e7CHEF-JoVzbgF z>mpm*$ko^KmK~Dp`;fPnt*7yPY&d%2S+7Oz9nID|Y=>cOyY4Zi5A{l3!@sW?Wkeb2 z71nLdkZdbDQnInZ_Nt6^NoPYyR0vY@^SE&dRnjGr*-%0q{4{2Rr#O^@3#V~%%mAh(r*2sbv}x&B~Farcs> zz?{bWePIj>2I==Z@%;gTao!!BuRCXsH?HutytmOUHy@%g4^T#pqk*&q%*B;nT`zQS-%$G7HXacw_T zj`@2FxA+Zwi!8S3<8_XnYJaZfx_I-0GL;8qy2G6C;sf=SYwIh^^5?n8zIe_q)pgU1 zKM1Yv9#db_ziY7F^filgE90>0aQeGgQG4vym2O%K*0u&(F4I*#7xt~UGdjwLXOn*O znu1Tb?(^-EPKVQRo^u1sDmFNl7rN;kkTa7H`rv3dfz<_I-b4N<gl|onr{!ZlTAHDb#f2u zermbvp{}DP|7g>}GwUS|yVa~_Y0c*>;+o9SuKGPl=R%#+@)Rpk(83*e#_P_U`)$*T z86R@|bP+=5A7w-f^aGx48QN;hv{X|%`2sun>`%k4 ziIYWsCAQ{qUphx34v&OA!TJoIg)RQ39<-Akv{S$K^QiH<`>M*J2Va)tF7Srt4((4| z6mAR8>JBRD`ADk2)Uu_~Kwtder%v%)(NVo>izUwejha}J?`E~5{bgGln|V;*{f*UH z;q=zAPx)Bt7SgZhmH7``R$sVA>J6W%cHUX-0azy4thGyJR@=ob3)Q!Yr)d(zYOuZcaaQ^wX2ToQ0%wqtE4Bsa`5N@b!grcH4)k4mGZ+ zyxOOq?9`=ZoZ(n|NH+BaI$3DG#CPtAG(GzZX8I?an4e|L@ZU8{~qBem4ZjIdH(!|{0wAM6QF8I#QYVE?GWE5Bb;Ju>Ps|pTnS{|u3|E2!X z^)7~7vtO<^-1pY$-F^H}+8h@|IUEvTTn#->G`>>fF-P_gZT%c6sa6X5UH;i3pKB++*C;v?X)TkCSioyGGi+ zu26h%kKTT1*_V;c;f1{cp5gUgCbbmu{EN%xtSq-!F!SXK=h~{XUgugmycf;9E4gQ9 z)%hm1DB%fn$>#aASj|e^p@!!{fBcrJe5!0sq0^&v{hTe;o-!JeK}vy;5+(ROTC^D=`8e_g6)-XSxqLuX@4 zD`Mq#?)=COYr7XNw|-ap?)r@yhS!RBnOCj5n(1F^`m^yWo3cg1iOiU&H3O0(oZ!^% zw#?(4(fo$O?FAJc`5R`$r#bEwv%U-|W^6d#oI7%|*?-Y7PMSrKrb>K}=IgIB#>UpF zZc?=fidv9Ov>~a_h$ecJXQ@*OD?rcay}c^ad4ANkd=`9dF)ww4(G%CwX5~MY!_|*S8SRtv78LB* zIvH3v8Tgq0IWXpe(l4lP?zU65+NW&I;t$S?l9-MrY7QTH`DMv)=@M^A3T76*=$X#h zhnvhp4tkx^79G6XyWD;8v7Zt{1Zvq-*DqF)vimTr4-;2z>G<U#y_3wm$UpFz>!b z*1-^RQm<8wtFGKP{non68+IxstWx~x%9f8oO5OBPtpE>ye(JhAA6cxd(O;NQLV4n zYiX97qjV#lDPGWjudP($M8nLNpKLc?d&3y4ij7?6wmO*lw&eN|d+(jkKc0&Z-W$~; zsH@$4wQe9JIPFfyis~I-Qi^|oSZgeMu2kqH(EaN+W1F|1(KSgS2R)QK`9A;v0RR60 z03iS0(l!vKsi6m9rRklLI3XmBukJVadj{b$Vk1=S#(2q%T(KLCirokmyRj`%?=#tO z0vrXL}}JhNj&371r_}CJ61g5!>-@ ztn9nZcD$R|@ou9XLrTT~*aYpgDJHpz+i8>0PMe_iHYr%Z0U)Yx6XXG|VN%~FArdxW z4c>z_c#m0wd}J-T$hjw|q`AuOg(|x@=KWr-vU`mxyBE@f<4xk<8<(<>3Q+vL3j7=X zz7>3lBlX_Pw~Cw5R*@g@I(1~fxLMpUZpQn?I@Dv_FK#yP7b{E??rYeLs9Cs@+ALm4 z?Jo)b*n&Lt$A(SrkICf~83)^q%J{LU3^pTbwp?C4Y;yn*mJj38;)e~JwTJmx(8K&J z=wW^arJAB!c}NMK7Kg-jvLc7GTjD_366<=4!qienE?Z7Js>GS0D%U?4yxU@}Y~#SY&9o`r2AGRB#oHV-fNhFXknzW;VIRYr zjK^q^q#A0|c$4uM;KFD4F>w#|n7q@_%Ge&y-7X&kZeJy*$Pg({ZLo>lZ^Wv6I#%V= zZsHp}!19^773ppXNGzng-X?kZGvbpOf2ypBrxro{0xNV|x1W z8Ioq65gvUJ#+de7&%koCRXT6}6)GYsAevK8lG3llisDzeqNqnb#%%a2b45{Mnvg`< zjHp@2@xKx)ihq|${JTg3w06G{w7z60GhQNP#!H4W<0XrRUJ^CLW<<@FGGj-#T?9nP z4x9*g7-Dq?kJTMKR(J4N-9ck@2Tz1MC|Km^(%vqV_JrMqQ$>Jrmze5y;Z%pm3pl^aaF@EvawWM7?^brX^tACv%=+ z+lu$_dhh8+9s=sY3Fmw4QL*>h5>>{xrOI~Avvg~lGdd)Z^Ci1zS`Xb*?% zJsh(4gcVU-HS7UCw+APrJ#^=}hZhZdbUlEohCM>nu!mO-duY`F@8Ca^+yVrEcvlqnPUaY&lFqsSM)Rha7tD{-S!$5m*x(8Y)gzV*J*vrkZ zH%b}&2R@(EB=&g(uRi0Svqy_QM~_5*j(&3!iM}tUu+LN{?jtqeKA}z&#@O#x_hI$! zqky>2jqX;(aT( z!Om5_IxTjVVx3SYpQr>~@K8k@5xkYcV{qg^Xdhg9PK|!l{_!iEHxCz0?>u{1}ob{?nk2!$kqNuF~ zQaXSnkD!g~vfkqx7ZZm=&aStcbsQ3%4V4S4&Bk;BJ2E#2v|6N713(-!lgjB$Xc(>zAtMXr`W{ zr8@|(1M#MYeaFaKHs7rBZ6;rKnsOPD)1zfhj|QB!qScQk-OIQ6j@LZWa6c0C zqAL<2(}~PLCz=g(qL>O!6s>cjXq^)U>zoJ<-i2oH6GX3B()0kNkO4+S9blGifGFDl zQMLi1Yy%>^kblWJFRE;u3HG-;vR|7+WlVI=P^msUEgeSy76FMaJ=|Gnof?RG$h123-41D#r znG!uRh77fedzSBVWcqGcfOuVzdj%qYmy7(}c-Kehm~-RFXz0ntxI5WW$uJuGmtRko zUE*Z9emPl;hm*y4IN4OcoWiwzily8;6^%UAsH9UZN@6tro{L-@ zrS=J1(|EOd8ad|=+u%{ZZu=g$&QQeEP@{E*T6WPxF-8t$ z8Xro}|HYNXTY#`nz{sI4xd#Xug*-4+G~!Uvh(pbH0=oMQp?*07-wb$7^l~6*jPD1c z2JxulOhoNWOYw9jFNw~Sizj)c_0j-O3)wzX$a!bFm2VI5>)xeTkG7K2$(jOWJt->#`#U4P2JwqKWz^a~+GG2RwL)3$Zo+F(EdjdtbpTq5Pj!Rxk z6EunsLF>LzT#KXdDx;X%Mu}=0WmFsM0fa=gjS|&1N=OQ-Eyc=2A8^h^Je=E&Hw6Xb z{6*s0O252)5E+vq@2Byaohqi@(OkWwA*s>6q>f7(nV_T1f}V#2J+GUBo+m7FUbqO6 zVvIi<)Xrnzv@wcQ8ZZahIX{kf4xbYcd>UT-A|dDm6M{~#A?O4)!Ww zB8S9@74$-P4imY@+7K+LOp7*Ce#oB=M3*X~r2VWG&<0qA5Nb(6(otiT_pVB<|;x|kyP!xXdarht70=IkQ2?Y#(|e1i6= z@KBPHna+KBI-ERR0@3M$?@YJ)&Lv2NmvrBEE)kZx#C#rnDMQms;mk`Jlc4i5NS5KL zgUeCj2El)97K5o{0#gTrX^MlFLm-n*7oYub?11PPk#v71awKiCYXsY<4P<(XNj6$Hf($!kC%yF}8zFKoR zSh?h^1?=xL9KBkw6GPOv1^A@IBEbL67XrIZq)-$E8^-Q|8 zo@v}#XA!lmWow<~JBF;hwU$R#+*)UuKC?nlWbxLTXswOANSp0iCWnUR_V>UsCr45a zWh4P?O9*VOzx$C;w`4-yQbp7)*-*D+K;4oZJWEE@-JgjZb<5pU4R(QY6eO{0l^Nca z1=lKzcw3h6wk$__S;X5i2i7u+et=w^9Jyv=d1fNFAcp?}YZ0{&IrT#1dkd{Ue+foJzkrdp^ow{tTm-(*E$r}?VAU;QuD!%1ubm7V zy*iAHG;Hp!<7{0APnkJeOEFtZ8Cy#Y`{AYfWAAvJfvJCC+Wi;Pvo^~R>&q3Z_ zLfi&1Hyg2OeJ|y9Zjq7d77?j#u_Dz96ap)d zr>>}oR4XbV)vX*7ZnY!TDy+Iy3=&pJNVQ5rs#Qi%Sk2j5Z9u9(O?N@UcSVGy4eeSk z)LJamS|-$5!5{QnL`N1n^W|1Ll6?;$SY{nwW*u8*UARnqm$44MYd>i4m!+7yj$rP( zkP{;RdgdkT8R7;EZ@>(1U<_|C;Qt1~%LeoaBj)FB#?RfR46q5g#3oAy*u-&tlbiwM zkrgt)rb-#$M<@f}D5bAF2*%4G|0ChW2N*PeWX9$U zu-z}%=6>cz_iI-rcMqzqR~j5(3umhj1k@LMxMMwtgn!Wggr5G>OiAG9 zp{S2L#KXuT!Y!ec?;kd~!o#+F|8NCUKMcLZ++B{?hm_GT|JcMHdZKrSEjh{-Ds3IH z))pZnZ(%O7MR1WV#6?IS|0R@f>_?EXAF*uE9}yOf-dRY*c$DMFqiR4?Ht!U>Ac05C zoc#n%|B0LEql=}qV$UbTJnkn3X0~!>wg&%()3=&g`8PEA-`qs+kQFg3{>{M1PdOt$ zjZ+1r@KZA{+tB=NZlZ6<3;LuaAhylG&SRV%{l3ALT){zA-D75EwxikG6%2;VcvKiG z+YPKd&RKapF1;Xy$00N1DZMA)K>cFCv4uIA;@QEwXF{HzK+C9MJ#u=OE}j^_PXw!> z^6E)M?ny-MNfm_}Ej4)M8S^F6Tcd(b z`4{ak!5t7!Xgg$vuyS@VX~~Q5;tKy|>4|vNNFNV>IX=)1`1V@ce9!ti309TC#GMkg zot)ZEk=o9-M5-%O`a0=Vb%BYmNYq~8)Ls#(z0#(p-KQ?je#Q^55HmY@EcP+ydl}(4X(sDL?yn_ z79ix;NwKO0Ong(K_9mzHrbz8g<#PGL*GaAlI`CT(wYNC6w?t}hsc0>fLOK zM#O*c`Trr#{|_bI5Gf+wW)TrR^B`@h-Zn+V+ZFF<-lqE|IJa-Ukk7Ptl)KVm8@|yQux#oS> z%-?^a`TwbZds#{cB-s1vgCQa}?{RM4llLa?nYno%&41rb^jF;EyWz|7NbG<&z3I0W$I5fVAtZQ$rbX7dlFLeGDnAFA{s9zKfdUmnYUK(S1J z#3zOGA57u=hl=6+2V*$@p<+1y!5+?kG%-(q2k}QCqW{Qr{6`_K{%DElKbrmFPskR3 z>c%f6|0FE_Cxd(J;SRe;4(dIO#ULSktUB@q{DZrX5yg)yhxx|_{yyRSeIkeXCno;> zEb#YdMDfo)f3|@Cvw^=)nf5=G!s}B@c!9U{@%Y+{;)`fesvq~7!fUUse%x!SANShB z<})KtSWTZXg??r^7x^3x{M>Xd@;TDt=hkzP&%<+(xQ^Ku7e|olK16k2h2xQZ@HoLv z$9^t>2uY6cSLO)7T_s2OtH}}mYIB6YnjGP;c1QS|fhT&r@;AC+_#1smu-Di|egpJ3 zSGbr9H2ptF)Bn@`B>q1UQNrXGZ0HweeEt$G|7G`=|1zY>t({CFYa1vER@W0ntLqM< z)pe(6b#Ip0>d90E-pGx05iQ>I)#?d`SLb+L6N`lzMW@|=s)BpYVTh~4!o~ei z1f&i#uW}e(g%a#jD(lE9y8hSJ#iV+qWI_I00X_1z@Mmf=5~{c%=L@0^M$V zFhKVoQ0Odobe8q5H{-M$$r8^v(&QOOVa<^GEqN5P*->Vj9mQ=1x_VFW7@zF(4Nw$% z4tjl@o@IKrgHx0o@o0R@mPBuWOCGJ1k}c4t+Ll7G-6=D{k0uM^8a8=!TcY>1<SR_Q&%WvAc2~{F zvj->i5R=&&$Qxi=|8b-`z?TaAYP8DEIYeW;aJ-p;<1qttt?uCFKnXXiIc^R#;pRY$o7J?_hMNPW_nSoD?(s%2 z2Odb&L6(z017s!z)n_C{I;^NY(2m+nBZ#p40(QuZkx7~a2AYzKM#Y$0;m2PBClc6tgZ*F-J#0 zP;+a_D(IDW$x~rgL1zo}wRxn=z}u;2-cH55Q8v1haL$wxP7Q~{GffHSOq_6PXs0dV zoLMp9uos$nb4&^6Ok2W{NtqJPnWls@%$PBTv6qUW^@p+b)r6kD`IscbY?6qSs`c+> zj5LHNl65~xjW}fuGo`HI)KPFy4rh)(-0b+n&5l3Z?D)gEN(47nX}CHJje<9!Gr+ zL-aV`r2u>5%-%oF3|nbMzi>M(^=<^d8@qI2fY0 z1mY7Aa}x-26A&j8445{do0!I^RRZw|X4_3LTYQ2Q#3#_9G(i6$G*bcXD@bod`w1f2 zPeN!twn!` zVVYuNVlmT_oeS=OrwPy7B&W3{>MqivoY6oCQ0v7@!FNI?r>m6ZFEuukpHZHPLSQ-y z0sU6UoHvLav`mi}ZpCX|0!Lk<${(!+VI}lVNj8lT#OGqFGv8smk z#~}uDX9^g_p+<3xMsWlQL7yr791?z54^41rlbh)0TP)*3DU-Qoe=O7)or!FXyXpdB z5ir)z$mBCc$G1HtR43@Y3FsXcQ1D$R$>tb2Y-5b(Z59+jk4aq^ZP4hh3x95j9}P{S zWioa>XAtulf_a&?L{$T!W>+v>J5n%oU|cC?DmXAEXmHq!*(o#DqPPVPZINx-f&#q7 z>1n0F)eXwf7P$b)p#sF94yh2ynF^6yr9vdfU`O_Hlv zlZY%CYm%I?CdpZAlJ<%U#zEN5+_0S~3U``3vAyy|cOHdC-WnR{s5Z}dih(~L)iYqU z=|e!Ag}Pj3Zl*oM_hNZ|iU7bPufYTD!SXb>=bZ%Vm(0~+HdjrQ;efe1m})vizYfE< zgA5hkysDe&>$JV0nk4?A=IhpLyCH+sUj{$ zx*}`MhNEUHU>={DgH02M$ZYZ!D&1hV<7~=!Ts6;;s^+4or_zS7=F{7e+7aBry5fgQh zR<2RjMfeXo&uElIW}_@7Dp-t!T`a0#u|)-oBTwcf`*o;fmouaE8;|Qu75jCSUWBK7 zy=71xLDw~k1UYzccRRRSa6f2}0KuIc+}+*X-QC^YgS!*lEx3Pqp6|Us-dlC=RPUNS z-8Da^rh4z`HLLfM(#VeKMp+zajBMYUGGb&sypLnb&$)iF8tq*kn6~bde8E=oF@D0H zm3~|%5F9u_ebl9-GgDa1!QbN9Xszt@zlI&%kAmN^c4TULK-uludEu5kTZh+1$@-AQ z7nOynVm8s#qXX;o_@;Js{%BESuVUr|dx8J;A86Ke`WD`qNYnogodaLxzF#1xX<@UO zWyCPlM{4d<_mOk6Mr=_2+^3!;=MM9;O&Fu(9-;=^!MDDvk6+mPtsg|LA24|=S6J_f zbP(d=Gy-fs?hhT7{Z={&0i7FvG3hj*x&zs0Yi*Lbyy%TXboz*#gWxgf>D&(Q{Em{M_1$^c~5 z)aoZ>1}9|<@z%cm^6|iPXnsas+A=7_Nw=cHTC;9W%3nSH&uycY^ku7RXIwTe1UNbOK8Xj?iYB!U=@gcRBS!{JEe9!O!+RN~N+9hF^ zIkEbjkd;&L^=f)K-Sx}IYlD5OU8IlQQwaNAZqT}A#g{wihOTu+FgM6J-svplEsvS%j7+vGh#op6RkowpHAK@U zKcK8_>kemHc@J#&t+LD^%6CVX4_g0q${#!V&x53>AHz`VNy&Hj1)dTxly*Zh*7^O4 zctD}(`mRNAobGI8h1Mj2Luhaz@v_pZl+~3f3|@o~*Y;LTT3~ylseWguj9+tSYRBS^s4MK+<9_pIqEX z(KOrk{h9rX?TOJ5q+KKs4&#vscqq*{mi1RrxM3>vyV$&jaaZpV;BwMXu?`WnP9gcKG8;0cutpuw*@}EiZT%PBwm1 zA0{30QM}xoiYOlEUw9Yg7i{urdk6MCX0r_%9?vVr^@#@*s&`($r%l7t5_rRwyiZs+ zWiwmCWn1ka@Y4a zV8u1D>1|FROs_WdJ4AjS(HRFF(f$3%%z8X}V5jG|d4x(w%RU0^xY2IkDiM{7h2GV+ zdUo3@xDrdkx;4MT5YjTUSoP?mCgRZPA0Wbq=$3{i`BsYnm>uChy#12jC0ZUKdeAuD zA`nI&5!qJ!J$qP4wAkl6;J!)gTnAP|lYG$Iq1n z+Y)vg3&gpOy||8}u>0&^{2e3mUvsYYNF`$Wl&P>DTs}V}7A_HF+!#C8$GN@PGB3G% zWqmiuG4Mo-^v?<{%1Vlsa*-S<@GSbeV50Z6@d06ejeafwsU|dquO^k_AzZ|$h9#=6 z)DtUfy;}z5O)n@=H|hxz@`(=XiBsgya%yjlh#$qOF8kO+`fuh7UG~w}^dDQ>q;5W9 z`v+aV*EUeprGqx`=skUu-ePPw1ars-1pc))xPe{+bmv;qnJuBUHX@=nVcf2Xy`ZJ7 z;CCIudqY!CdBi_2T3@OiUnxY+Y~*KN*28CBwCEc@mJq6JGFl6Qrq=yGJ15_ctj2t{ zuydT;2?Wo?e^HMKPgfK>I(@IdFLx_{Jo%vw-xXE)#FZA5^PYrXj=a(p@vdg7?rP46 z3{~4v!8lv7qrCj-I);br$rJdZ18=k7OW_}Oa;(*W|LAp!^z1^`#llt2R5EiNt-t1y z3f_*BdyW3J=8_8*DS$`0`tB6a?NT5}Y}j!#C0{9C^qRa`EWECBa?9)fWh1BVV$%As zqobovV4cy*&KAk%*S1=nBIXHT$!amA*a{2#N$l(}%x_F8>D>4Il49rk0R{EA)Ua4m zj9dsE37#|7T=t2J?e3Lj5AO?6`1p33kHg)!K|6Zv>&LpipgVWPN1ArnC1fnQ znpByu)C4manq_p_@x|q9=wrdKf|S|~GOg=ukqtaC2EinHw&HBvQi@a{)YObdjWCqT z2d1jMy--!{q<#XM0scAcE5nNUm;;qR*9{`NBO4SH+m+wI%_f7$w==djJG zQx)?Z?l6nOzUx@}9>6l+D?8b`X4!iRWOj*+kYK||>rinlQlRM`!&)#&FY-1S^9PSe z!`xG*#^w+Ov_je3p_@wU&QdGfod!)d9c2hQq>oOscR+({?IE7nbuTiR9Myj6|C@NOCIA zQBqo=e`Q5^9fI0hGXGvcF2{#vFy}{3-8YXfAg;07`<=6w1f}rUk<@*S*(sOuwNLv2 ze}|9SiN)w#-|~FM1eMyTT#D|h$ZDTWv8Cu*@xe)Da#Yl;TMqv<@|*$tM>C2~1Ctf> z9Zw@Ni*f~Lw?2gveEkAh5~EY-uQIVOcBp{CC_KSH>|Y_m!FfukeKoVFT8e}+QtHDKu`=+ZjaxS@ zwuiF+tX(6mm13{!jJC7=;fEv7->88&o6<1O$s!aQ<|@fn>b4!*ECTmNgrmDMo0+}R z1#Z>hc30EpOeG6WGiq#^`dgm>KA{XLJ})a-R@*PDp@e?>f}$It$4l{RA&F^R(X}^r z;wIeh)bpdI}MaVZI01Yv)GC2E(blz27QFJxohg8IlPa`66FzVjnuX=Pf zHm#rE|IQvR|2!5vA8DONMb~on5s0DyocZj3f~P>!q|a z03GhBt*=Cf8(IkaRmYZtP!`FFL3yJtKQFqe(`AI_={_D#l<0R5`R1GobD0gRte0%_ zLdz(wd6~^na(|WAe3FwFq0+FO^!c8+38C3P&-xAmnbA+7R`2(7ODU(gEKMyIW*Yuy zIZ7@Y=E;}AbHJfG1%z_Exq`T(Lgn>aC@~s31sjsS5u9qg0feR&@>O1sTh8RSAtppt zQ1}(8%(hbZX#(r`4N(Ch^y-RV(mrmen)-mpaE@im_k=GZ+d8sYg&W`A{x*T)6C&f0 z42|G^#DDQhkw;zb0XzzdSmsfUiF9)$i*CcpB4bln*B*5FCjpjBoBY!?9Nt(%DS;`l z74|1MKfPJ#OK;XcGYpIa zaaMh(U8?Khd>6?8GJwFz0emSikal_&`iS(%iC93;og=IwEkETLOWoW-JS7{q6PNfm z8T2@Bv*6))&Am$oH(R!0Te4$Ou(0>fZY$*Ygf~=Td@=4zmWIs^2R-1o9W5hktiXC6 z*fjyu{teUlL(e~L6W~g+qH^~w`8X_&b>lNFtSl~W#Gu% zVpeT=BSTIl`Ye*4!06uFxY?wwx2a{t3niv0xK(&=mBXnT{ej!I7c!iOF zqvErVjXenl{0K$2;d)OlwWPmvxL-g&6wS+32J^VF+kEloXxLi@#yU>qyqnkH|916i ze4i$j*+VO`YbGT&+qcWKms&^7qsjuW%0dUq$hTFjXaZGwy#ETPmf44~FLHjYFmNJY z6cq-ZsNPofam+WH<8P_`XdwE{5v(__@j>-Pz!;rNh#Y7a!Zq0}hA~!4w8pW=1wg-| zb^?b4k9h_aJ)>B)Pv+i1IP%d)7DogF1l-!aXfKUXLfwM

Tk#xz4jQ-9{ErOF>NVrUA`op~hV+&R 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�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

Sy-U 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

R$%2x;y6?N!q;C=^ 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

*3zhV{(x)5c;H85G55icSflAQ6%D&Uhf*y z@{}pb4b_5_n8!4Uym}8{@@+ILX0;NmgR&e&-e<_3cqPBT3@hH$g&oi*ZhR;q@uNd>Hn5u%GRMK$

6XFTKYwKTFqBU=g}*A<68A~42QbW#7;6{bDp zke`$0kUg_;qClwNgps#vd+W#gvYXwY51ydIJs~dbt&?4v*p}9@!YeEXZK6Tako~11 zAVS!DwMwM@1{%wyAM% zT6Nwyz6DB2an2REBDZ%`vM`pudh6U1z3j1TkDqnov8)rL#P+cohZ6zhVZ@&;s}V<7 z=rMIe6W(1Cyc7k{cc5GA)Oqs%xea9$RaD!><`I{$EVk(l< zkuyTsI^mZ@{nl3(I419kmd)}$fSu>eW{Zt*ot)Q?4^M>-U_!YU0+AYB8&R+ z7n`~+UsAPM?=buH6Wy_UX=A`5OkQF( z{fa$rlmSYan~{s7Cz&evs}EOM2KD8+YV3O7xp%AFu^QnlQt4OUjs_31$qu_G_L@iP zDUVd_Ik%mNvP@Nq@>C&@>p96G<2|_p46;AQ-lHGtsmlmHXX#uo@$-$QhtL5F+IBaA zw^<@`zgpF|t7Iike&u#vSMxN_l8>#kKl#V}O)k6rY&Rco1h+o>jegqq?|VU#9XZ~~ zTMh;ry$$`S3Z0`7Ve#Q;@t01MUO8sF+#7H5^Ubrqk6~4>wXCUm?QT0w z7g%AYUEOxOW#g4jd7hVVHD-C=Ur);or+Ph4du7$R^*my+-hOw=PoF8hF+L5iC9}Gp zuOYX}GoGgNK!M&rZIfuY5&HU3u#~`mY@^i&-9ijGjoUM5}`*3*NMoAMTW8 zQJanH%t=^gY-tm)#VF>~r0 z=ym?l=lj2gO+TF&sA22+XWB{nPDPGiq!TW4;%0{9L*epGg*64X=XG<-d}9YQF^v(g z)%9Vi+uw0Fdf?pKr+%y7Y`Yzvzh&EenA?g!HlF+Ale2h=|JoAQgG=ATy&ndP-N(D@ zFIm5wo38@1A9;QaABIPLUbnSy=_xD&AAC*8UzY2ylDVH}cNwifcDP=jd83=Sdd?Id zLvp*`Eb1S__d%~)pMA3zJHOhNf2%z(NmoY^t!aG-q<_An-v=Qo<}Eel(iXrvqG`*d z%&BxF?24|L#o6X!oT;`&-R8HQ`Toq4vzSN2E)vVkQ%}!to)dUx=jOXDC_T}B=y<|) zr~P2~_-8(aJsEsJ@W|24MLjWmu=_;nmd?(dp3$8>ItTWM>lN0{sh#u9wVrK0;e60N zVSfAjiu=j^rv2oRTF_1xA;`>2GS`+`rfhImOIEH}HVtc5tCrC$rdr8tKvj!e&T%$3 zYu2`?Xq8p3x>|NN@oebQRQ<6O(iE05m!K&*ZX()HxK2M=nTz=SAGU^IgwHM*|Lkq6 zAOQgI|945i$yv|E*}~fCzmx$PRUd0?H3UB|yV=&;tC&~YSzf;*qa>$;xW-wltm68` zzn4z4X~?52?ZhN1C6B|cW_sSOUfVics35}%@<}a}41Wr$Ac$$E`Q+oZC=q}|)(TlD zg(VfJ#3^j95P5~M3JVFLhz)lB;4SJExxA!#a49x^kJS#%Z~D+j$3?$*TkKw7*?!A9`QWJ`%NB_-S(N2ooK7Of7a?q@^-GCk1-PFiuXK zJB3WD%*Wn#;x81U+BPw21Af%3>>x~s%CsjxfnJ&^BNRd^mD5eC6QM+NO%S@4BKuc+ zC!ezpEay=Ylg-^jVOAD-$ys;uJf$hSbLKDH0sc^GKR0O80~g#GP?Z6Q)*T4jcr@~M zBv%n+y;6ixLPEK6fH4W-1|n4s2?Th;82SA7nnF~%rmB?E9yN0}cZ*)=tan=(ENkTjI6vTI8`WJZwQlXf3bHtMCa_&w@ z#^npB+#KE5R5cU^lo>%1qD7sVkNCxjP#gH3angHyo6wPv!7$wepkFu|x@;X?V|cAm z8^DoF9WDa`qJ#gR;HyerftFf96@!f00WNwy(ANr&dAyS#7&H*1gH^`tzs&lzeYI&A zw8pc%{uniq@i~FtEE4*m7Wg6i71x*Y#x%t+d8bx&M{t1e;%s_I=YZn(5Eno`X-BnD zZjcmnW&C-GhZF|H6RXj0l?N2#Amh?dk$f<~N0#~69jhCy_>Me=Z5>d-*%T6MCm?yu z#l$A@K-u&#E1p@;j~kc`a1?5kgQ>ApRECP)>-g$*S9z9oV@@{@GVTY-s1q^Tzn-22~f{5^a>t zJAdqB;iq&bY@23PgJT)W52e|BN8O4NIdf@T1CBo+yoihv%$s6!yFNR}GN_^PF5;VD zW6&ekx!&(qy>)o^Af<1qou^FC+yA=S{c4CVj>E*bj5J?EM54 z^`Jlvbw_9IrIjyNYa&MhtJnR0f-222q&@XejIVvL(9*f`sq@`0ulrZ#J;tv0ZO)9( z&-AW7v@fZ4_fgpIw{f)S`}QRD=VAIzf~w8<`!IAJZtJk~d3T}HPW$6p9Nv{Guk&>u7_QV$ar?>jO8q%EZ1d-HXWpjQv)1?C^>ca}+!gkWC|PSI z$EI^LO_hHt4hkULk)}sMJ zE)$c7KGXli)u)epT-)1bI;=Oh_chS_nBIkaHqNr6ptKBz<&<5~WOyQsZm~V1&`o5Qo0eHX9&`iB)wLa%Lt#Vgiwu`R~bY0HZl8nx$Ye#Cb|CqtGn9a6I znh&85`2jtmHN~?^G^8du=?gu)F8C%{&O?NP%`yK;h8;dt=X$N?>(>oye?k<0VKEGIomE; z6O4fLO(@8xb`!65v%vnCzyQW|k;*1Yl*DpD{WapOy~6s&b7zl6HEG?xd8o(s6w)cv zWT5^+4r8TrTdZ+R z3;%dfGL<&&<%S(vE@GdUs|WMpwJuuI+A4PMns3CzxXxrM{C{MBM0Ic z7h#7(lCMNXn?~>tq;Ee|O(~Jy)zT@No75b5XsH+IQjS%{;bR9(k)d z^{qdefIWO(E0DmrND^FVAp(?hX(@zZF#=-#?ukVRh}?r*H;fl)WsLM3GO9hxqu5WDBc^j~&SE4=>1LIv}wEFaGBG zh4f*FFXWag*v%PWE0zJ*5cKy6qzEu$!s{nYpj*&W_F<DbARZQHhO+qRwT*tTukwr$(yjyv~uRac*?^ROP~TFB_A%^}wLh*7e|CQigM)vH!=*bk>3y3SDlPm*5o7E=4>k8PDyX}EV_ag> z-ZSdOn|Xr>P$Orbk3p5_z~I4Cq4xi`TylLSx`gr_XMQDr+yFL!^y z7|G%w|8W!t87JHU1Fij|bC$k%X#e;l!P<%1#5i>xP|)?l5)peeNjX3Xjfs3tFD1`mQ%f+?AMPl$v~ zZ1A*B)jo-Oilqyg)#X_ocg!*5wCsxv^dx~yq`|;JI8Wf-f#`xsx`ld4Xv+hd!6gb0aALM(j*72^l>-+wP%jKV2bG@&HqY4zX z%tA8SEwpPo?(L64t5eI`@pN!somAZyi!WojrADmIEIFMH_V}hlzTjF)77`+zX0+X! z?61vf5g)!7KE8kZ!B!-Z!R3v5I_Ml+SG+%uDHrQ}u)Yr_x+_k-UCoc4tJXJvb}=V% zlHFL>oa{91Znz$7W{+pT9|SMeCx+7f&!p_|xObj(`h{-RvP<7Pj;ena%Vb+2#;vl% z`7oFcJmg9+XW4MzF|vBwJ9g8>bLz^x+iytyyYR7+^RmX}p)58LO_YjQTm9~}TCOxZ z*8BSXanmwhd;9lwdg@<5lNs-N_@5HtmeAaDsOu?q>dB@?qSu{*_3_Snd9F*3H{afX z(dy8xp-!z+fV%!uf}jWdI@q1H)Q0x2wpb4D8nfQZOiV=hb4O3(&tyC0q6>a}22qts zsP7&%ke(^liV`p`C^q+s@oiq@h>VZWa!`ay#s;PaOMZpq#o+GeP|12*i>oo7_x61v zE9HB;AC;|L$B(1#gGCn;NV*2I88^M1$*)!h*99-ehFj&G`k=whTG?)G4h7AJ@9pQ_ z#@n}d*>Dw|I55c`J)^7Nu8i;9?3WGE3KqDnuZ#KhFI0$g=Y23*PULY=kGaeFYB?v0 z>yN&x=SF9d8||O(Pymy?`NyJ{Z$MWHD}!8pr8Q;NXr2C&MvN=Tl?l@Z4QtlS!IK8L zhRQW=SC-BYp9q~vC~ID=Fo7O$O4=yGH~a#DS6Z@B<0BwMtm z<@-2JJHLB2`;Y(B&YCb*{`gp&A2dhKkD4*2hyP3%7ZG{x)ol77gH30sShaHMF2XjP zPeQob^v1hn+D<+fW^JFV=jhpK%?l4KZ;rKe{`N@w)f={>yG+xfH&hp)iHf(w2j=^# zT>|GiuVt55w>D@hEkfg$Ex8gi1r{s3099SgVVuH24&t$Fhs+mSwQ3w2uiwh6FI~@G zY?1?O_}ZI)eb|#)c-pa~-t=+70?|49^y#P*G@VTQwxa$v&u|UTu6rBJ(bnke@m3<` zQid!klq3W9{;zR>GtYyz_~;=Utqm`p`EgstQJI29k(VU@OU&28$FjUQGGX7L~)HZ9W*KZO~_4wB-pJ@TlfwkCZ@sW6048) zj#IAiMNLDHZn7;SxC4mPvCjQG6VT_ZJp|k%%()vdkU{%33(t9RGW*M&6Z>u3kQ<1A zxiHoS-zJ20U8jZZ@K^iPsPv#^2$;SnA-^@uYmn<0KM$bzrYqCM4jZ;kT726LggCsL z_g(jFgs`wJeM$4?0av!N_HyveX#b2cj0$!RPHhQqFeQQ4E1{0Q=x7OpRA> zuC)oleNQZMaN6*6Y1|bYt~;Jygo^VG*Z^1l$}+5f=a!5*&*r6`bSXF`#9zY2f+j#P z#E0TGg_pZfVib&ol_D^tgdf-D#@nt}dHISz@YVkO z+14#qtm^URgxe~!uY{FigdaEA`<|WW%&)g$3TuB9$H+l+r(sbft9&dJ=ju;aGjzzx zJH~BC^D(a>aV3CCUpyn#UbRD?b>R>E6iov>lW#qvqg}#aopgT1RksOd1U(;%-6`Gc zXcio{p_-$nF%zr`oD^`a?_Fn}HL)4O>S7Z4_Et#^QeFA%gAmara!|NEUHjXk{7K%z%qfu%m=QIO9Sj>$j0-onLOut}W>;!}WEhA7wy{q81%Drnykr znKs4B9P|8$1vIUynb`0mLF;!ZtLJSok}kL}+;Kaq!q7d3EZG@2?Cnj{224`!i|Ue` zi8vwx>_^RH3B~4ychat#&)75rG<*$g$>x=TAuyVD-B|61XNLA{$XiHXHh>l}9kPnN z=0oHAtdrjrZcO?$~dZ|Gc>_7F#Y>E!eEqX#WM%s#VA3QDx z<=I90wbAyrK8eCx7tq_go3c$jJo53y+a+hE@XWMRa-&c2MW~Ba81{lw#lOu6iFv&$ z;@VGRV}{TTZb@6}^s907zwf-(wS!>QWC%ubN0_8q`p!5!DovJ@+wn;yCG^I`ZWXbbYZ zSD3hAYL1RgPX+gjY;WS{97>gcJ%3jSo2$GLA9S`Q5Su#-d&#AAMs^l=x}aG|vrA8$ zo7S7`+-;d>7W8nbIo%u2!LdzSD;-$a>Ya3+a6iw>+P#l_x*oDnHP?xYHT`VuycD9(pd=3 z_HGt`#CF0F3wgyId~e>gC314J&7P7KTCEg%#1aj?3YxsYX=bZQUL$nKP5^9xme0*x zWqBH%8k)@XL%Yf$_}vz>-9u`q-~|04vfeg6tg%qx_BLS_Z)|wz3R)2mwxu+ zu^+2S=J~MMn{;O^Nqg0fmZN5lm)&I;mVf3rH%tn(ze+2*lyNEPzMMSb)mXC2RFB&p zwIiT@)Uy9T26Sp9I*G;JQi`7A9ehNTd_$*}1_O!3;F(67(4x80CX0qpL3dduc`R%1 z2NR}Rd260V8t9IrJuDKxD7@TY&Z2l~;+AUS3Qg_~@7^vv7?-Aym7~g-@6TGM&(PUo z;poO6;ss^!2*RdF6Y)fH>gJtwrX7D|_>B=ll;CSIF^B1CR?$YnRu7ush&uYPm~x`~ zj;rOn!FqC0X`i3d1idZWh^zG}<2Qr08$isvxzx9lS#6O>EIRsfntC;k_;3~{`oO>2 zIV_BK?>hPMK1TpM^+#Hn>@Tci;~L2=ab3z%#!8M?}wi#y{P zj}Xad#;g+%CsR~MyTmIWr`vM4xo^>XDC~O@n1(iP7$sYN z1{;?56Y^(Jv`6;PI%Mz?S)&mS0IUC8L;pp?&RHH-iv&^tN?V#l(A?4mE3_Xpkt zlTX9tH_*(xBR8#ulR4I9EFLxLMWX+-C4(7t?Z5L9dgt}ue_cpS>lU5Tem9U_27&)| zP9oL{0X3MH`!!J|QOE#7P_vPg5JdxPutZ1hB7rCA>ATAaUVLe^rpE!0bQk_)M6nW&Bh5H#38? zzvv5bQ=CSJO466pQn(+OE(kc>vW%4krYS<+ZQAyveir)2lKyj6L~ za|dVJh|N_0bu-4I{tF}&rybV}eg~$avbs2r(2P4r7Q^@Rn~>}QItIM87p=DRSS=+5<~*%Ps!$UZRJ-v9C4?VHiBhx zR^EW``u2;tl332}K}g22nC)}np5CnqRV6K-+IOfufg3oR2;?;kSiSmfgcRJ^Y{?A* zFyZCV^<@utCB{CyK0xfgQJZ~mgXR|*lDVMitFzbMB(CjbimTS^b-g~3&oJNe#I5n> zaFNRKERnR}t>^(_gYWV1`~h1jIH)kGSE9IjG@x|LK9rST5!J_Qef%0K3rhv z!s07Zrc1VN@bv1~+K5oJm9U67K9&7(U3m{lZt8Mt9LMPro8##6A)*)X(c?uX zA{TDsG9IkiTD%Cx%P9(V|D&Qvc08b%Br{TD?0(D84)VI**2+rIKe@9IKt>n?%QHWq z>%+yWab4WA*W3uf@~0BrU4}gQin7}Lek4)5{4N0Jf1uhq1AD^F{s3ZLS%V!EJgWYRHf?g9$XhApnW zZ%oskgftoQt-c3x9%fbU%9(tgDFv@NNCi2@VR=m=Hx{H;+HOiU zgC6eU{@(Vq^(0_2!xp%olsLj;hmK8(@OR8|J8wFu8G|#4GF531w5HU1Pe*Rxb=oQq z77y$};O9Hci+$y(3w$p-8N`Y|GF|%xJ<3Swah0scY>+G8H?SWea)$uRideO72tT_4<@4 zsY#3{(3`n%Xb9)7mAax#XDrlRM7kA_=MK$vC@-6T_SBlZ+v2?If$frU%&n-8iRNmGC-u5f zS1GYBRqxqFTf_Hv|HTA~BLHZRxQz`YG{_h2sF{GrlVZg+g)`4jO_>PQoM5VmEKRYX zOP~3`H`25n60GuJ&l>l+Kw$6UqdGBNh&kS5mFtrA)kGqzi$Zx5*P9rOi3OfNgeK9t zABC(#axgr3&i+fG&oO6KO<9wi@&!reh1W(Yex-S#n)60?_)fu?tUEqT`$A{NIoc#U zw94Z3TL_V+fz~s;f&lpji6VO= zF}o^8PR&((n|qs0Ao#~rK@jdE%7)p2`H2AKKx5-}R)2gHd4P-TEz=FxIc$7+ir*zd zywv_+PQwR|S?afu%75MV&Jp(^XqcOr9x1Y=tO~k{Cp4Eb)YE5Z3G40?UhPKmqB8Xj zQWJWHr>FGO*A{<{iq&Yd=9a;{crCKEmEKag^oP{A`_>v7hn@-t%r9;CWHRW zm$MlaqwbTWY&J&)t4x9J{GVaNPH6h6=~4!DxEz~DrqF{P3G7uSajIo)c?@A9#?alW zK06&R!SGtRlF4p=%77Lw8R^9dLk@W1GUhmpmw5~`? z1^@PT2@I0RfN>GcFA-0P?q?MAxjKmmX&WmJ$U!qvtrL=Cw2$RjdalHIE;5Lu zQz_Q5kgOlLo6`lNj;9Rqe0VqDO=v$+2m2}*$uU$D5JDS$8EY~R9Q=-hHqFIm5_llX zP=1%G@$gbxo53HuvJMk>77tt^u1Gghf)$qXKlzvRmkiK)=2EOXvO9Q~*EJ#Y$aJC{Vxg@s zPS0h?5LsQFf9H8FPA+XMGP$@9yh~T*^ByvWhW8#Whg;Na7h8ep@jCvuTwNV zDFJMcbkPnySeG$X3c54uG;EFsV$|K~cg@CM!MQtva&xc|B#}{q*tTRpt1*PyQ0Z^l z=Lcj*Ey~%&+*q0cOU~(q8+d$imHRHx7ev`FCTvTzmHl&3Vb8R@N{2{TM8Lv%4|XTe z8H<6N4q)k|FWU=*#SJp%5{f&e1u<`0p;@OqsShx!ONSTK%_3XhuKT8JbN3y%A0tN- zz0ULQ1rG!_x&uwvjuddxgmpD2XinC)MzAfs(-Exo_eQ~h(1T^14!HqL>%`O?_Zh!Y z8qt-EqI7O6n2PPv0+z%f$7FDo*@6axx5mu=@E`CsmhgvN!1l@;uyRD@D&*KZOkM_9YE-mJYYtzajj%nkWXEC^~I9BxJty9*t=Ye*k05|wQ|&02w<8w8(o z9BSdgEzg}kuQTXw;$Hy+ktXJx(vGoS$caW>pu00gTtV2ULPIFvOSAe;DhWu6TS|%> z@Kg*DP8dwrdnoFyQchTcF!}n%!b;QxQ!M>&Mvs9m^-5tZE0o;r1$xb0s zQdoy(-7`!R=I#X19V0m1l>9i%EKGC0(u{)_`a8Ki>TuQQgRx+xQ1!XJANL<(;uA}##LtsUpO^`P2PFlySpyMJRb2PTnc&*pxZ9)N~EtI zSwUA^!FB&i>aJV%W9PBcj)RNZ_TuYUbo@J9f{kc}ZJohd(bOLyUAM-*r0i!s&2jXb z!n95#p*tXclEBwtMHlF%i*v-l2)2cIKc12L+_j}pvT97IR>6=&wtI#iVj)%X1*~K@ zqK#%TeNkqSG#GyF`+3L)89vuVmNP2}G z%DSj2K`k+Vk|bRj{DA7(tAzrDAEyyh4UbA4D{7(wEdNz$Y&Y1!HSb1MzYy!{IKJb5 zHuzkr0XbsmG#TuJ74j|9;AVjevW2?wir{mDRX49`vTM6-v&*oiYp`up+i=r-+XB~k zTd%tLih1Sw`|73NIdD7vPIyQIjo&6HBqghR1ly#;cSZNGa^-c-Qy5|CwSTdhQlod4 zd>O-9q!_krIFT6!<)|)=#EidPd0#J$bI46N3H~+Cr^Mio>EAHF?`7PV6F#a_q z>Jyu2bakVW!Ld02+(ysZX4-Q6yVYgW#}BlY1p=Go;lrP=8_%!w$rs*r@q++e=(bm? z1yb1qoxzJ8L5P}7=zg9P+^$65F!)QTfsVnH247o?f?E^6iMeNBY};b6i21I0#^Py% z!i*2q;2}&hM!(UF50H^p@#zK&21~Qyvsa9k&N94mZD>hx7ATUJIuKz6yV_q16|_QjN}6pmnVjvXLYo`mwD|m;VUAAZ0^c^@Ff=0p3*rhy+PhwTx;Lo3=p;8GRp8A1sax85&osEv zKaQ%dh_32B4Qtd8N+3dwm~M2g)bGABImsMlU_~3|99SBxoTQB@0Z4G1N?vF{uIX5* zFPf5W20$aet%+PO(VGjx8}se*dH==A7YGC7s32evr4oN7VC~TIicQ)oyM}}K7FvvS zAb>3?=&wYMU(j>i_cS3f>&mF;IFZOaIP=K#0)Z3j(7ZmHJM< zaKN$7I1Yp_Dh^ijo@)#AF;`BI%z4#Uj)w39&v<3tL!fI*CFY)>KIY?2DmN&??EWJ# zjzdN4D}W)HfK4yMzG&c=*26dYBlq0b9Hm(`sH)A%8eaddFm=d0i}7(zPYz=q;TD9d zf)b1G4SnJ0bKNkKSU%^BYgLM=c`W4bPl+w2pgAxvIrg5E|0iCC= z;H(*a-gJ;Y8s0}5@s(3sGgx#(@m`< z(t8@#@LQM{n*oF&6yzT7(rTvzHzB0DEH>H{HWoh>brskV+@;4#$p}u6VhCm7un=!tmwuc-q38?P0uaQUT=GJ3{~q);J@-yE4- z6{Pf{CwMzUx}wW#Bjt2COjIKNlc%h*Nd@K#jk?`F^?~KrR*}PznLH|HR-It9uIb%_ z^<3!HMWF`tKu@Jfqidj=cn?+77CFoeVs$_RarOjb$5JsB;JDkONzDdnTPPm8e|?`y zrIY-ufW#XE`ZgIy#|D;R#jes5Bp49M>p46cyYsWgzvOea+B;|M1lq-2uqtYhKtpN%}^~+D=!aCj{9c;46I?}VqW2!e?6b4ty zEA(y9H96`e6ewzyx|Mw*jk*gcvcFNa4M1JYVjz%#ub>eLYLyby<$=!z`6Ra~?S-A6 zKVkuu#Q*kW2|GIbc{di$A;+!sCoNd~W$ucWO#ZaU^^j#{YfoWpjnFHDbRm+%1Ga*f zJz;hF$=wzm0UCZmLTDsID@MdM`(Li^-y@S4k(#HgLc_lK(24VPzrM`{Lfq9-9_V5J zL;8yAY_Eh=Gr3b{JrfJMRFh=KH6Jjj)Bz^q4MqTV?1xkTi+h#Fndk~xu(X44>D9zJ zzuq(U-cC}rOMnGKYy#|6?-i}uQg}p=i%f=IbuM!5fBxz0QOl6)l)$FsH< z7=Z$*!J{sW$7>qLp9QWexQ7Pc=Jl$AzY(`GOaBjkTs6-P$ul(NsfORKy1)HsaIO=h z+iMAIS>LyrB7$rHVhsiv77wX`0<881CB*=<9CO?$?jFVXN&^cd4&kZj5)q?0&cUxg zP?ynBb3`{`RbXUwjKnKYR+*A8>YX$m@zs}|KAYb_=EL%K7cY1Wxu`<^0U_-b*7=7P z;n5TOhzP%}g>?=5%>nFBBp>{+ICai3-&?54K-vBD5iz&_a(c>yIA8uMK}? zH4PJj;k|2KdO8S?^TmQaNCCz1i=f+cqpwJTvwE)q31y*$Unyr1$ku@9EW~N>gpF0Ux`VbMz{rs5_@BVM#=8ZUG{akh zAlRKyN#2sG3QjO69MNJ%5;C@qt`j4J+xQFBKAJy)_3%8R52P?`^xoFA>|4@d@WE0Y zV+uq0;m*MVOazG>08nPdZ?B5ru_Z<)tW`LuZ4H0?_Ll zQ3Or=nx6SfMGBliCj$+P=pM$j>=Q%&Hc1$2t#&nzpwAg+-_W3Voz?%y|4LO*_$sra z%VmtdF0iXwaced}&Y1&68aehmU`9smv@H$C_LLqTilYQuW`&p%3NR@MI8o=N>)#nk z<#T||NyBTfrK^-qK~BtBze2dc@&bzEC|RC4tnaxqIuka*3y;2TgpryDYLOJGkM^hR zqFF66Xswoff{Z_)tHjJowC7c;yBt!>iA8tEgQLqnf8Ig$m&`}fYIn-*y|p1pQ?gXi zU}f=#dN1pYDkx!u>Lw#_1|~|pTO_av z#RX5%b1)POwb2+RP-Pq*PfIdi%zl2Wo^j%loblQx^`i+~df|zBhHV=T9ti^X& zV6vb@GJu?kZxqgqz^QrwPg8LhU4MizdnVJSZLRLNov8)rvQyS##Qqj)4{`Ef+>&L`e(H0MmF9H4< zANiPGz>cL@ER6K_MRwfL4LcD@z=H+c6yg`V<@rE|;VWcqL-%?aRt^cW-F0Lgtd_OZ zrX7J8I7A#@fR_gaY?PGDctWoo-%FMBrRLPB8s*yn`Z4DzEl;99EX&7y@C9a;kv|3d zoSlITlohN|B5=cq>)hH)JrAJjP)At@3#cEj37DIVY(4El0wQ1gn_vyk{1V8~C^dyq zG}SK1m}OG=QTRCfyD6xc=@s|I<^<=zN*2+IPdT@vzW44hzZ5pP6t=lsHojb*SgF*% z#17OGX(=(F5>Hob8HsF}Id6HkguvH2m0ZEYbo1j_O-ftTOLwX^hT{Y;aMGns!@G{X zKll#&WeiUAcBeE0Gfq>HEPh(soFK5}GA(SQD>85v*rA z;$k5JLu#fLRNKy4VvKlmL=;nT;V2WyC>o>iF~-ECAVR4WftHA?i0{|4uad#n4<4V{ z*QYF}9j6(uTdx>=2+jcfFh5z&j zTt?4=9R*RlBOhacRWrS-##|Wa7%fL!s-r4BtEaPxxx{?Z!fY6npYPbkYz4KK@`!i*Cz$yCiRxwfm`;Z;7@_QFuB^!Z#7t`QV-0_dZ4o(^~Z)%R7P^WSznvdQr ztt~r(Rxw`__q#zU-by#+j(RN)kK6s%hj?R7##e%~wisUWX5M(CuTG!zqp|j%kmEO8b7B^k;8EtotQr$tNmJT$a}9ONJKB79ym%N)I^7Y=E_k~)RQt>_V# zo2V|$DQ{s+K`9+YS*d=HCbI{rUAFVVrdNMKYUp0*yaltn3!B-$jHI>*D*>&4HuJs# zM_opE1|5Rk*lUPRG99;C+u*8r&+Xr_uv_^~{2jMe&&;0XYF)O2)XvOY6muVYg|nAe zWwXA4TvP+OoIG(Zs${Y3-<_5;y4jANI??}ZCf>4tah@P)mC|l;Y7crFJ~ACVK|M9L zbvVAOENN(uWcgyapr%5Wt{P@-2c?{fr;}}z(V^a14>;3NMDP$L9#><-Ct_S^q1N#6 z|7~0e)VP;&HWP!ZzhB>>YBls)NCF+Oi%f+pv=nRAmUVfl{86I29(tbMK?=e3v0tuk zC#|XKh@kGgYiqh+41fOvn7Ff{!!Cb+wfyMv$eG?TKttEgXunYlRaFjsbzY864rc73C$w4aI1*n1}b9td&mSa=n; z6AbPYzOBC+7}Jwz#PvD}>kvNsM44;Mwt74;_Bh+X1mipPQ7NN(Sm2o|0;~W0vV6KD zhXRIYMWqMJSB@a)#a(Or8ArN%U zDf2~?VXHc=B(?#fjOKmg*5@lBFD*G^8y%YSssmGdezeVb?cHG={G#W?`5fUE%osaC zs9<*$OhY2Elb(LUX2k8RN@;!dHC=sr%3jLu?47{cvd+BAO66`fPO^QZv5tVy7)>o% zb$~P5s!)_lTCK|Bn30fo5SNOn*u5W9vz`^!y-Y^KS;X=u>*vBoFE zg>1f0mJMYv66(u5BtGHG7n&}+;fHRzvKl5`Q_d6ESX`5nWOj5^T*}6uh3jo4Q))_? zAH_8t&9-93CZFLfR4FjtFNU@v^JEQH_FJT(&y7y2JzOSCU+%gW@0pRc{3m7QI+BKw zf6i&~id1~MI|leJOChe?H1!JFw|Zrd^D+n1^H(y&V5Y6MRMo6Ry=38EEpH&-7%sPi z1lSOjc>k$-T?8!!%-S;DLPY;NDCu9lxP4;3QfQeKn|&SjU7d%1jOq{_dEd-1!Rc!F zvF^W;uPpk+8V_e33|TXKepQUE2quzA(t!ZIdR5yNr6J4JPi z6!VfpW0j3GC%^Qy83e3Mw>(}olG1VUHskcp@qKpL#0fqrynbaBxNUlZ|Yyq7K(_1Q5J2C{oA@NdQ_haba6{`I5dC9HxS?G1;>FdLPuZuQSa zVQ;yFH_m~T9MXfq?h{_8JbPAsBKgOU@}d+MSJLVMS;LA^zt2*Gs@}*C_^64I ztneSKQ*1}q7M{qgXCKV3tDn-i##^ALy4!9Vrys|W-AE%7qNLZr>^0ZOsOvS?#;9F| z*`c5MEzQ7QjZGEC6(Y0KI%n(28Qse|8ZNtPk(nF*UIV`HwVdqsH4REwo~xT?pbz8M zM!mSnH#+M6maFeph_C#$90ymotkCat#sY=hnCtZK#5qSWQ!B#LUic7(#>V;}FE-3g zCLfS@bhp&~K%a&zyl@}Rg4k&jKbSvHn?_j2+qMa5+9#-M$A`*i(2Wn znCYkSJwExKdu9JJk6fN%&Eohv-S9m%%+Oy@xwCMdBX88sbG#6{F3Vh21h?7}w_RN% zUiNwr}IG5?`3>H}K`O~-+18E{?s zWyb+`?g1PPD6oUQ*#klCA!h{=wgHgH!xY=2&(OpV$ml8b{>@I{( z7tA~SzJJMtKsu607Kl0$O6Qs#F}6kN%#pVFy^A)^;M)?7=d_+--y*RKgq}I5i<3`K z-J(?HDBa?dXBwU{s0&6<>@;~SPYl(ibZ1iUA-;Lj3HafPSmo74vWuLn65Aw7YOp} z3-?dpoZ+%1O6Sg)vR~%-$>#L1`9$Q!FH30|@=BJXUUNChd4$aUWMzS#?trg*oXY*S zcOXzi{m@+o$Wg%#d(ejlATVIyXMb4rp;L~4+l6itFdx#A5+xnewFxpMP{WBL$FLC} z{{H9Kf6|oJW-Ax~fc0l`8y{w_bdbq*}Tc=|I*bHXqsJ|yL;-Bv-|kgr1HJ^q^!pT(RN7b8&97y;-r?EnsQ0P}OZZKViXJ zJzsb{Ve%`wMO}dDlx?+{tXaJ_oWZVjBDJ=%>&vjb3-g$yMnA-+PPUwf)HEqYtVwCk zDy&o%Z8v0i(GZ_5JF2$WK7kG?SCE;juk;L5P;gr0C``kmx^M~Bt}g(e)|QC1^lU#d z)r`@st0+Nbt=7T`VkTm<)kGN`Gollk#}xDP+||YM*Ys;Ua+0aY%29(BRUiw|n158! zQj=23C`_IBeyWI3sIreKMvaab+%Itw1oPmNMBJxTu_7d+Qm>7D1!Awk&2hmSOC{T^4m4kdt(u6`YoSe(c`GMVe zOD6Rzye5HO@Z$#q2eEjKgW0K0-%jtJeakKSe(Xy%1qUG&dGnD9{E`YxV2ngHis+-A zs|m_W;D@FUWriwR=vStsDM6GBK`0P7V^|8=dd%XM%j_PD56(Px{nl$ov*;+i`Ba1V zT9}q4cuY!>YY%Jvl4ARnjt!`d|z$>_yG3T;iZ2RHPfkZKnS)=82Q%K~pfh>oD$ z6PWnVln9-OA2|vio4aCM{uT;#cn8(<&v6*JHA)%9 z5=MCFLA+{8ERuvQ8Bjn%e16glLb#p5+lrPXXc85ViPrUkK$tvPlh`3FK1H&uKxR0y zd?UZkvBIVf*u=SsdXG>zK`I7;ch<3*yC!)Q^+49}VzjlRf*d z{{1=Ey4)%pHZH`CLo&JZm&-vQs;GZY%#|5j4_mp9r zc%snUZpX71>vN@-<>YxOnO9nDub0+M+TP@!lW4o_&aSrzPr<+XR4^kGySKfU8b3U8 zUe;ST?5tH>rxD6b2y^JnIt=F_ERc_-Ol05RNAXB@8DEvG*_{o?`x256Sa)ARcDqs4 zXqLhipSid4G1*xlgL^!t{xd!|sF8uO?!$Fc6eYG!ZWWzw32zT;ZGbBm+Nj@nxgG|K zN`E1;Q?M37f8u=~@7?}WIlk57qe(N1W>v^5obaMML+@@;qvjC-ap+2+Ik4r1ynm&Sr?>s2+{-VW`yy& z7wwMpO}G=)y64-4VmIivPq*KB55MCtb|>3~wL41x1Nxu!t{lG6y7*UIob@X%{;#wb zQwwX8|Bv?Ktq$ppHQc`HX<}92KCn@_wHl%#&F@ekOjwTuV?`A+fOBP!*Fap0gP_4k z#Q`oRK4@|iSCyHdHw!<-b7q*OU|Dt4rpOO#9fSomt@ z5hbR1UZO)YmY2u)^vK6VOrDK7v9`^v0{Ao=T|)T`4?pcY0`b1PNbs1yUs z+WzcX!Kb6EMJ0f%5^ZA_l!y7I1qFlbxNg|0ldF^Ix}ZU>D48swUXG2=ByL$Ftg7-_ z^hmO)=L&Wet|)&YWeEbUNQl9^)2#Z=ZJgS0?#s2TgFS{1hX#v0*=_gujw@S7Yq^ydVBVO0vPjDIjIAhpfVeb`BEd@0=ThlhkgY(_3y_Oy zQF0PR($%%E-oV>!{pPaP;q{Fk!(bV%mb_Wp3}rR?w&l@vT{iv`(@i&f208m-3RV`* zepQ7hN#EWnop5c@h^r!TXAh73mD!^GH(_myDGUaR(!x}L^K<34l&G#a3g zU6L8*Bf?tMh*0v1K?zH-e@@Pps5TrVGEc7E2C_6u?nmq7sS)YlNJH@oJ@vL-IYB*V9!82@?W2*Y zFiW7a`KwyG>O!fOfDDR`f0@af3jWhabGuAyd3A;DNG>alj*W->I_h6d6<75N+u$Y3 zLnEPeqIUxG+%-iNyd_wZzty4%o<4C5Wp6|Ohpux75-nP`ZP~VM+qP}nwr$(CU8ii@ zwoch~%J>!Ux9*GkB35fPR%b`-%$PZIjz0m7SVEhsXSYkKz((MAWR{Zyh5FSCwRZs1 z|Jo|UsGdPu=w^syns@9k)Q~!_48{7&7-X-2S5$-zU5Uf4;9vj1+Zoh* zh8WSofyCHCEj1#61CPd;@u}*Lnz!G?-eG!yzi|u-n>qYJWm)zDZXq0CnQ%-RYlKVa z4EO`yq~qS;)$x!FQU>1QtH>v-TlZj@T)VHs$GP55PGwV6Ez~+-F1RCEfI>s!SdM)2 zWVlTUm0g3``>c=(g|yEO=pU8p*qRB&x)PHk7tG+1Aq!57WgZdCGL2$Gl;Z?aVYVU` z%k@fPb51BC*&qpM+xN*Ua1jQWNkjO`%P=`oAUSw%Bh`Oau76#S8gmgO3yUGsER-Sp zh`k;2z*+K+Q~7RF0hicpcvMgb$+lB}|CR#h*YpMpGDU!0q~HU0Cb={Onhhw6EojE} z2o_Q#7&a(^Vx+ihK*#P0?35eM>{B;5*dGZRwYNb{Wjy`o|B90`^$vr7m7iMi13|Adt0QNf4Z||4Gp41>V;STpKe8a#vi{9P> z4Z@vcX_F*x2o1_C*bWk+c-!90uvn8xABdmUPKkLU?XdlZ#Nh#^kD@b)PHmHz?(96^ z*+gO;P|okp8;eY^ju^3sGVm8rC*rO>YXB^l!;OSsPSgYDO?Z>0u0I~Ay7ESI`1~Ts z6%q3_0>-D0ZcQfou6X4b4T?x{tlu6r2qT;XD;^9jR@wj@)VXYmTXjCL zYGX#Cq!&}y3?xQxGJW9g2;~oqWVlPK3<9md#TU(NdUdLc7Tvm# z#xpo|2W*vC;RQ>SF30*|x)Rzz_j$my!WgXzarX$mO@vc4(^^vIR?sxBnBka)AoSl` z2EvM2eel7NK#J^*!FW{-Xagv2v@5Vmi9z8;M!qdz37vNuzN_Z;%VxF*OinCG$ES5; zuv6^`Ujkhs$#jXuuTC9g%S#G({BY-$YE465hNuWy(7~F?v{KR5)Udc9c(rIbfD%+1 z3N+jKpivMVSw>Al4P>Jv0hvv5mqNX|hGo_u)+vS>L5x+E2RqnMgV^b=RES@zg0^KX z;D>3Gk!!*uSIJ|N!!9J0^yJQo!=w%8Roikq2rh7fAgTo@8tsi=^ftWYeB({8K3yE} z3xs|t7t zG)E;JK)4k#ZK^t+hQ`+W6 z;K1S@NEM6Xj4g+DBYGf&G@YxszG&k5QX?`M8BD{hKOU6?#Ls3Po>Pg1n|WxhcW}kK z68g)uJ#=MK`Hymbb80Y-q$(jh!`w?S8aRl_u?k<%>aRKB+-$v0$LS?5?I%uXZYU*` zszyCDur7m@Acgg3r%oPOx(d*lj$1!-IQwJsz*#p`@#9ndg*y18T;*Pt@P#|uIDyJv z1Ua7wAi9xUxh%MQXTz4k*+e|vbRZ0MaP=dM{6H&YQ7Wark=bCr?A2H!>eD zA}1ErE-on_#XtK1(xP{BN$U0zQk>q)tUhq6VRcfb3|qo3kikq77meO^EQi|%-mg4T zumiK@m53&uIc}{i z;$ezo5t_T6{3ihnBkYow?pO7 zDf)DQAUc&VWb}Ad- z)|2@(952L{T<+~AU6^1txLd6OIgm-g0<2L38>AYLZ*zf*5n@^n>fjZ`86Ret-&oSQ z?1{N-a&1gMN$@@y!*r3?(z3qAZ9S<|-U+fyCT}o}lo{Z?sZoJ7@A(-7Av1ltbubDC zw$Bz&d%_k^ZPaJh0X8HAC_C3KYHAO-2zJ3*V&YFI*2rDTiL!lHhtk2ieiteYUCLYM z&K>$PI@n=#NH@sWobdCNVe*Nx^QO~IlsJw_*fHkyZn1``0C&K$U}T5RGXk5insJ1_ z-D{eIMJhuvO=FPMewAXd<%CvI6&Vy{&I z9gDmLnTfz&&_0~G41IL#D+o)#k!?~z)&dRlxFtfW47XTMK5fu!<1JqikG4U&(j@a& z&m4WgPPYZ4upVo9Kw6=+TWg-z?G}gb zm0c>$k$Yf+7<%aLV@Wn;sq^=BZkD%Ek6o(n`51e)i+(Xr&M&uRyfX|9wQbo|;636E zmxb1Fe|NY8cb6qXunD{sQ}_j3ZvrQD2V6gU4f5bYKVIQNcgUMR#nvD(p4snnA4+2v zwk4C?M@MOcbKH0*%qp4k?SP&S3H|t$U{BKIu&PK?=1;W$nMDO)Ytdv37&&Ys439In z2{+hEjJ+c4{Zn-s_>&wQ;Ll&8V0Im%#Bu|K84KT!!xaV(an~)5c{di0n_Zkaad~w8Cj8m~%Tj`c~}n zZSKAC95ILo`>=Cm(ZiB|OGkP>;O*UzMY|x5fCsEgG>gA>j}KhS*!1u9&W0ThECy%8 z>-SR4+Bb|Q%)K4bDLkEE58+CVLNCa7FXcJ1G3*-gitZ}C@uzmu`^K(-#`dqbBFIY| zU66Mr#7!yDs|mQjl%f2hCX1j0{J$}~lH;K(yqq_(lniac{Yt5!M)a78BY9{ydXl>E zVS9CwUG_l%JUcCH;yGY0pW#F9AlN_`V2S)dMu&MElo#Bl4^Y{Fa3fgA8yv3;Jk z;e2(%pgPt8w@G?1?sKbp9{=?Nhjltn+*_>PW%rKw4D{_6_!9i(<|l_TLG2^h|i-lT;#xQ&l)skO?`3F|u|)5%K%`J)#QZ=}3lj6A>MO#hIUPm8CQwD=0n zSBXhK)d`R8hMEtux~VmJ+*c1Rx$K9kos^874NDCz6ZP> zdBwhSD$E>c+VDQ`9^K1Jr(1-9=RxSHuvhrA#v@+qy*Kf}(+BrLfIOYsq`Qp0ix8hX zPprXo@wf8hQTfuOTfi6J&>nS5!palY@mN@apFb`~?r`U$FQ$ZkV2++;nf?IgzDno& ze1&ac+T^nA{d8l*0Y5dzuiJ#2egI0hJ%aie3AA%ZdftqK{A$d!pC3?L{Hq!02Gfj> zZ{cTZe??#8D?mRTSpK=|Uf?hOzRUO%p~Vm)qP+UPm)6~Ut8 z@ErSHcLy923U@X(pFAqR4=YtHe_)2?4*?7DO>7}`6c6f+dESay_yt+k9(77}RUXs> zw0|<*kso^juOF)I&sU|;11739fBH}Cb8jXyj%zQp>IITRP+ z3Kj_XsG00rT9r>gA$RZrqW63?jGge1d>kcNM=bP`)jU&j-*SC;Aapbuz* z+g&x>#kL91b}%I`zfku(^kZg1`-^E7UV-2sUEfj>-&YAh7$ zFnI?2k~Z`!8anj-M{0BuHn^4QYR`b!4Q$|T&$?Jq#UGQcCHA&+vyZwpJ^yIKJ3?y9 z=No%H+$^E@r~7ub4s7RXWn(3;hl)o=ofDITlWBj-CIy?h;D3yOZ==? zeDRy;(3{iv1BEGjR~Oe;)fcvRDRmKSUxf9uWY=SRg!ewEk8E#%O41+x-vQDu5?l>ZMMWI#x(t!R0>wm;*i8ZH z36iK9D2S~|0x&8;EV*IHMz#PuOH>67G*MJjC+N_^2qZlK6BD(l!b1d^6)KoO7z8C9 zF;WVFg~KkPN(S-gKHqt+@8`MpBPeZ?; zTEB3i&aTFg80{=l6%>?<>-dA-o4ffE;UgoiF|JEMv|ucMsCvHrfE2+ettjPgJQx{i zLYshWIaffSK&qcy03<608nOj5UxFc0AXFgTfXTXC-k{&*-FEy_8KR8oi#X`K`-h+9 zFHD^N@T*LaW=$>R0C`TgGX{82N6b>U8O}})vNK;f8g-d6Um)^Q8uHjpFxJ?I!Cd4~ z|KYq&oQ(Tn3}kF`#*zM@%Z1}X%!*Rkl8#+Y_f3rV;<=%*=$41$#ly*RSCXd%9putE z2AIQVb*9|g>6PqPV2;iJjz7iH5X2zoJ@NW2ijv%qF^4h6R3&L#vidA0GAMa^4l;k_ zk)qRPnUm3I!ygyDRR^9+PA@R=x#Q*bz@@p^>3r#iNM^FP9KK`!eN27+(C!y!U8xRl zt{rh7>A`YD8#Bgt%yN1B^1gD2MT~lK3Byl)kck+4VhNK^gus}4Uyy~ETapM9UrI6v zLoYx(8^q5nIS!3gau?sn4ozQ=#ppQ!(j;36?>CqVFABKRBF>5@2crmx$o%l}~ za&vIBqpa)MUMf6FCrE0*yzWx#_V$|iZx^DQE_r_#zA&xX>(Ci}4S2|wpfz;kH?%`9 z_?l3Xq(iT8S4N+DJdtjX-K29>rOCZVJFB?$K4&X+JQ}P1sgrjMMVG1dL}Sx)tN7K` z+-Q+g!t?#xyO!4Kmg=mQxb=ybx{+`!^E#%JMn8PiZTU-!wr>$NiJSY4yTv?8;=u09pr<}Bmk zobT-?d3oJImQ@>w!-Ji#S#cUU)@rC3DmUAl%GYvXYRmhw(XUoK;x1SJtk>?Yx4NcJ z&*J6M=yEsys4ut0UB&np;3ec`rgsHa*r{o8oiwx-z5~S0PSqqsx*|O1+7cqpj!Ji{ zqsy_ntG=p~j)lQal+7yG4xjsH9a6E7FV4xUD za@xN|RG$D&mOi^y`%$hpSh0SVsan6Fp`O;GC7|EDc1>@dmU;%)m)7RVekK+Iw$p%= z8ZPbVXt8_!1*!d~mL9$%(`V-KWRbWR|7WOu+`dQwW%YdodyjWBeQ%~p_)Fe?bPgva5{)F&mP`5WxZxT&ThClMk%h>ug2nYv zVJz>Jb}qhkwnNjtkHM%=zx@1oQ*OzyH8b@mt-t?hfM#TFcjAkV?j9fdg{QOYQsCiV z>nbKRl4z0Gmf2P!zCMp67VL6c#C3M~YWAK4cS8D^lZmzb`B7;6X|~E|2xWoB1c$0b|%`3pw5tv6&-re8Ke^!X0RWrkm-0qs#N$oceA|15G9 zzM(n9$q9&J%u=%r>JiJX(`s5CFP}`g_e%E5cbk|GAJLYZIwU91un>ZF4oPLGRDW6ml&?~8r9msSdsW?6#&NOr^g;OHP%+$kEO z@TJsDDZ7Q=yI$8Jc9v|K(97iB4*kjA)<6E2Tcpo&l%gtptGW6GY{~p53di)-P~YcL zvS(E9pt{0q zip-rMenPetz^+Af%duVyyieE{;_?f~EFog^(h8uw^WeY?A(RZj%L2G$fe0-N)K6GF zfOs;Y9R{#&2GGy@AhQh^Is!0u`+$56Kt6_~G~oPq;i?T-KmtI52tb7hFop<#3kaZ& z1puVKFyiqLobgZ|iU1*sFr{_Ku0o*R(4jltoPcBn@P7_qvxA%*@aX$cI-&aeTr9%i zpWt@F^xL6yXJLFEAYTjs^!x4}u=WNpj}1_({SeTNY^%Q>IRO6<^Zkx>m~7+z-{3|b zZ2u_Q2GTzxZ0mSk2JGE1-p2IZNZzPL2A)u6J(L(SWr-8P&x`q z1<^sHG{DPsZLFxS&s$wR{aFrdmT-UndN=HTGqE@kTV*QnKm&->Zr7rrv=TKxkjFfniqn}8q zFyP2!u6(?w8!Dn@dpez6%xP7&kEqxC0u0IvJtqy(RY3abrA$2A;2G zC2F?P$Du%vBHIg@kEKaU9O|UgDsBWRPjZ!L)F>f?53g{YDAHfy6iaS2;D8SL(>0N? zoLOqa7Dif0d?P8w?E@J(@p+d3sju$lJ&pbh{`4J3BPtX(NriGwqV?BU0klcb2M;?gH0d3thxnrxXRQF*Yx1f9veGnnjP9K6> z=AvJJXehBoMjj<519*=r1*ay79|cmHbArJJGOQGC`6ikg3sWFy@kloN@PI}%Q70lz zVg6PcgxF9xJ>^c~KsKy>lX+84z8nM$BW~tgQiR|Sl2ST~@J=r*k{+9w(LkL6MuAb? zJ%B)v1C0Ag3A;yA5urYVjlxievxkfniC~XQLCl@F5aC2Vh62>{EAfOw5L_S-p6U1> z^58;Vl&s^e&K8DO$U zk)m~odz%7~lV&d8!uAw!x6tI^;9X>SvBnNb4f5g%5j*!1Vn}gdd{$Ad(KhBq!gCi; zm>g5J^6!7b+yJ&H1Cup;_B8T$Vz|_uE@+JL$)3Rl#-MI+a~<1sO2^|oxZ)5^1#{M? zkPG8YM3NIkrN+-uD3t8jcOc-xiN$y5^?s)JNYX4*dcM1qd3T%I9bR><3MfgRctjWb zE@=;HQ_VH~+#IW6q`a3+rjJO8QuLUhyCMTcsw6W`C?Txryz-qIX=|*R|8mX_B{@y^ zL0`wBGzu_>vrqVdw_+A@8P2-D!X@+AqUivO6XmgADRxhh>f>qJ?KuxL73~Mg+#P;XpcpxI%LihdK}O)|)-r7f zh!Q4dkGZW2@8QbpMh;BAfRgu=)&`H!qgdvS7fNBo3wVk#SQYolU^dNAzgCJac?c%Q zZUTR5#@VXVFsn7fl+%>HrpF7(1VIgu7hETT%$Mm2z(lhtdTJ{-%@B3<9f@oK|AvAc zxNsVmRf$qR`_@+^FF-_@M->(~&n8Gs6WIY|MNPq{5W`-1rmeLH=?o7ZQ-EGpWEF#5TUu0WL5nOz&mj)vr-LQC=g(!C^$gZz>HPA zk5{~J4%nkvG&RYCDE1+a2gc4`hh&W9Fi@-+r^h47AABI>xF;gO@C}ZX2FuiVBdYW( zo1b1P4(uA59whsIra3^GNM!`w7E9I~_K=4CREM3007C6AXQBYv2Ei)y7_addkKqlO z&Waul3hU5}D4jOJgQtoC=@UjNRy4rdMh~=gMIV7g_f!9 zo1I%m^EzLcc99rkCcs@ou;^5jIA{j8B!U~wurp8; zjTL%C=;EYYacQ=*?9?jWA6Z;dp*35uRD~2JP@$U=LtT^!FbS0phnlDqXeuMj1XMD{ zQo_|h%0KmDfVjaHpx>SYF>B8!E#5#tgyS$jhk|6Sj5J|OA$0R8x|S&}P0O@J#6i2- z-eB9T)T87ej`^z+2Em*%RRljR6px1YvXb+UYtwBJqHo%h^fDQ|a!3RRXH%tI7 zRX<$Jcs0@De8zN74S>f!Z6FC~e93-cO3nP6v4MxFyA-DI#%d{ANa5L9>FYv~ zjvmqhXC&)?D2ScdOZ!-V{_Wc{;P;kLq-)ZWITW_zhzMGW6`&GbE0wDO5!IMuTZDY5 zGHt@V(}e=ry1vtGFui)ZV>jUM%+(OTnXBfm9ZVVF>Y&k1V|igVrwLdKY&dQLBj_Dk z)K<*BYK4c>9EBE&i)jn$P{Z_y;SLX7JJ{E@G5a;;nS8d_+(XK62l`YMe&YNlzK2{B zWDc3)PX~+s5nM@?P?w(q_hT3EGl*!tNLaunFaxz9JqSWhe_1CyBCPmRp1)`TRO#2~ zo9Sq7S){JDjNaM=qX!@G2$ZP@Z%_~359C(1G~3w#I!FO*m<};YO`dPK_~ysbSJ0{vnN#8vIMnVcpivj5uP0gCLB` zyz`)Q;8q&FDnQq}QFE@uzqo%xfcBozEgNjhBy>jEz`6dRAj$%s3iCQR0DGxF1adj{ z(q{b5eZaakT;RZujO$LRX*dz?A@zLM_8exmXw={FXhU0s}-Ki0HslNiyj~CW$D;>H)wA@muki-pm09q=u)@ zcc)=b#0h6nwcm%?mkDq6!9Gy|FXC;m9*m!T*A4)NL&tW1->VKOQ643_uOiUD3wd=r z`{__8zZAWjhcZ(+9mCLD*= ziXqhee#16k+Q64w1I>;5#2H8X5Io*y>@6316>#BKL3?S=hVWw2?~ncp^HmozT(;*~ zc>wa?O5s(zvKV=wDtW`Ev^illG^+r^OOgv_3R}aj^|GK(&LDiElNtVY@`Y)5^1x68 zKcLBnNGFUuYyUFwevspN))}29cusJ`i5+8nifgncOP;_>MKglrhhqRWG>?g9uH0Hu z1nm$%*xY5Dkh~An5R-*Rf)8BgOeB7EKSo7&iM*Ho5GvmLuj@`T0=~zaq9#3^L0Wk6s>Qox<31A!L?3 z)p?uEPZtYjmK+bA;+eT1GON$~?+(l(&rJ`)7ST;V9=)8v4$dLF8<@}P7RJ$Lv1Zmh z{p`XuF58&vqp1dG?=V|#re}B47+}oK`nilTW8WpSE9)J|8Gk`r-#)fce|KT)mA^gn zX;z|598NA9M9}YIIRH|C#$vRB}!^XXSF*QT;4Td0Xeb-Aujc?fyLT z>$R^3;O(%Vr{7ptx3xX%cXu8U`jv6M9CkSWIn8VC`7*l>JngOFbT93=`G|-6NXxa7 z#Nk)s@_gMx^Z%fDFZ|}0{b8y*IQOjYioeRsY4*5T=;LWHe+iLyrQUFz ze_Aqq`CLjb6Ykr*&_It0iL_9xqTp9a`mpDna}UYeeA|=n_V*c`LWidMd5CndSr_(3 z<8$86O|B>JZT}g$IFVoF@!8r){BgW7_qBiGRde9l_x?Mi{HO&Vt8qVst{Of0^L9sW zEbUGU<7edk>@>7;oxT*vGe4<#dE9Stv|(I@v-%!8CUc1 z&DQI=pw@ZZ1-#*pv&3WOwsegy$A9z1)zObp%YpKIniQ@!vMZzZ^L^Pk^CfB>|6TTa zyoUehOFzF6@>n(j#O`o_5{uhh$^)|;3^JTTOgm{Zhol7V_uGn+)y2{@BRVU)%a69&Lwd3=C za)+Fkn|?9-PsjR)2dVv8_(j#eg#2N>TXu=BjQ+Uy;-4Mec(uSOO}wpVVTEz~!CGQ( znkhXC9Q5~F>7swWhHD@@PiEK8XK8e*_lx=!cXsPU`@PMD$KI8|N2BkI>}{Wi|7s(z zJD*o9zk-(cQ)~E+=}VrhtP8g^{cYaQ8t7Eq=g?7_y4(!3j?H`7nn~y5;xut_Il6!T z-apUp#$o)BEer{=NX`s2R$@FkU7`@b|CuM^^Xdc3b9 zPglTw+fL}bma^n;WaqRQ3Yc#BocEX8Ki7Unqr`pL+HW`7wajw8^Oo(+c3-W^vGuX; z%e7wbp5~94Mb_EqC1o}rU)1z%INWTe*O&CYzLw6fx{jT`TgKMCoce)uG8!}8?eAaF zw;$iHyWxAklQMLij?0?!$)2yk1yOjK%5ImxZ_h{axt`gYcX~D|Q;xUg^1F`<++s)N z*bmpvW4INz&TJ}qJZ|g%e*R~;B{~nSpkj&we%F<7^a-k522PA3!+{b0LQH~^*f07E z#3Bu2=x@?7@Vr_CMH30JR09hIjJ66;B*SHh7$bofCV)gBfnl4#5v33Yx?3KtaI zTa@!;j0*)r-j7~N}KBGQ3lnr;s z-b~{=$R+39ZNRLWmeq;W!^TjvYGGE&DlL@P)NFcmKYaBb4<`t}T%A?^Vpy~&}5pIDgbce&tkt{~go>7&nYemLJMeT`_dNS;0J{Qie1F`2^D-WkU|aAS7Z z@h1;RtgKp|aUmvR!mJ2`mn<35{3+9gOeS5@B<_NV2f5-S&Ml6hV}V5P*;3)aw{_OlM$z{YL?Ikfzs76i!<+a_sPo2;O5)7aVv9`h%Er4 zPml_!x*0@vqsFYnzHy0AN`HA{UQE0ar~O};<9n#mesNPspKUXxEtVK%D9Xhr3O$6B zAeEGgFUtHi)XlGqsvl`v)q9~Vol1$rKkXY`>)hl{;YNoiSGHkX5?v!Tk98x&zl+bX zBdX1Zy+M&pLQrcAfw?&b0qNGE-PZ?^!4E*~Uj<@@?t=MA zAVe615Te`>0wwMw0&pZH0)eC;B*LLKI0A8wg<_S*$G~49@Qa~V+C$_W0MQ-cP8B1a zmJ87G3*lg2ab_$AOZd&ql#-n}4<97=Hypn+^GlD2WgeYSMDYHz5m61vl1T0e|IiK(1!hM5&wh>byfO z@>w{7{SlX4m4Hl^41*%)cRPt3&KCEURA;TyP&U=$hNmVdm5d_2d`pKD&&Q-{=_7@ivaqDY{Ogjxt zV8C6mrb=@yb>)wVLT!k$)<#yMA^5Ry7b;=(5Q(0Bz?fjyjm21S@rB;b3`FU$S)IH{ z_)5manL>H!N|4_Lm}l2$7cK9%9mq1>=21DIy|~mFo**3h6;m1PND8&6xc=$zWR;Ex z$fAxURb=ALna2P>o5aygf)!Qf%$~#s(G3U0Ar-srNQf>4&ng)v5{aG^XNnM(qMIu) zR-6)7uLjBpnPb5Hosp0^XNO$}pfD#@Zt7U8thq2DK{Dzdrp>MrHYSn1P&iSLhd{*a zz|35cnfV)6NuyaT3Gya$m{4Mgo2Yy(p|qJe*-A_+;1dDjW42CMiIm92!pVZJB(%+_ z3Y1$V`$A|Nw{GHa9~AB1IajZjI#?21FkhL#ehlwuCuufh_JcS4oDEW^$!zWHFS9-* zSJc4~q!n3%P!Au)1kX((lpupbp~zTn!P^(^MQ|_WLlH@h3fLGqC;iE{7&VOI}81!$iNe9aPjbWgWm-k|EuKt4MV(oqb@D zuQ#Ie4b=9RsoqRAEq$6aVyH_74~$ABa1@r9)f0U^yE{7_j+ur&yBnr!1!;m58dqTBGxDtCn;-0OS8iK z4J$E$0kTCYtOrU^hrwVAUFF$RQX)070WH&~R5+U`O2+eGo>7wdjYJm(qdB0X|O8c3%yma7_e7J7;9eFc51 z0q0W2k5*y1sL`iKdBq@w!Tc~aayrvTxbX?BVyZMU)`A=fn^$Ch7|bxbJ?&&|k$?)s zGQkXk%fOI2mw|Q}H;G$CWG;5?7@II4`vjYCSr3CVMm;p8mSMTfQc*Ok!F9!-;H>Q} zSdae~D0Y#Jr(~|-mpc(4jEw{F+DDx1DRD?xU0)K)aCxptXIIf3^n4Pl_db7yGc%Z5 zYD5YE$Z>fCa3^D#JQ+mF4M@~)c3!ILm3|^^y5U8~S-Z|A{jBi}8z45N2g;(!b_t+2 zW!CdgruaQJpo`{>IzTo}mU-V!TK<|{+sn#1p7aCoM)jdbKf!hYauPVX!OKoNwQuGk zcy-z8+_F|xO%6-F@fZp^2X)NuobysoM4d_Ac_%=j2ig23-=_fE){#yw$v>MFiR+{h z-_zzRk=2_;wzV%P%rW7B^pV)^Gmd~erxnEiQ1`=zhZ_w(;Y?i`IyCt|hl zMQeCls{Q9?7d%@$zpt77NCgiLN0?qckLBgH|6{|R`^|oDBtAX<#h)JcqrY$RdtNQS zd{BKm{-4#-G-zxup`JB4oACsxDSN&{$owLkd-=4?mw%y@B z7k#+=w+|BHXuEI6fx)-%KL^EYT%Gz}uTQ?Az~Oh%_2hr^T)4lz?v~8WeckLr=MX0{PZcvWz>K?)9wwTy|+!d+-#%DS%b93qGm39z20>z{!-C zoyOA)5W0WPgJh+r$Nc@WxL<@Wu+f3{d|Mlzd+H3W0*v1kTxcNm2}PSh9#7(PigZ1l z7;*z&UO;>#P-rV3oauKdxOrf(181KAYV9AGsmC(xj*~KT0}AZJQP+9g+H0^-d4QrP$Jtsr^W- zxtkswf+m17y1M#S)E%>^Str)I8XDaZRcFI)0ku8&!b%IE~f3_nPFb& zh8Wmq*`B`J5w|LDV==whlAXz8rX6U~<4;}TLQ0?i^x!Q%mfj2bncEN~%aMee4Q(Pa)geRRReZLZLIGH$+DzNkN9?A?WbLP%rgW~GL zo=KX-9C+}Vsn(H5hJ2C!k)fgTrAd@Qq*kgMC^^8DGJQX)JeN%%C^87#OO-71Y;qc~ zgCj^gJCDhm^*;2paM^{E-qIN-SLQVD<~Kf`g7xKKE*h&jQb6e#PW!MZjdJTQ7JJZ& zj1CC}+2#Uaa|xPCl;dm`W6DKO#ze{hIFm0s8s%%Vm6MSQXATZc!ILgS#=J~Gt*s9J zsrH;o14j;ZQGiV|IRYawM^8D9r>Qe2(P2^5Y7I)Hi8XKL%E_|f=|k2ZQADHRVpae0 zD*Hu>!gD%rs35&3%IXCVT8C1lO%qY26`SxGUnK`E$teT>Ypb|Z38v#Mg$F(i9r$rC zNDqx#HV4iDJmg|ah(dRI@7`ArbI?Qkn`@2XhS*MD34?`N{;@gi)D|Dm%Md znW(u+G>v_%Pli+>AGGfttdNN-oov3bgtOAj{JI0_;NF?)V8hrqP-n4LxK8-6q zy;byys}=QDEE78~EGdrg>?5hVg^Pn2@DwnO=@f|-w2RK>I868+g}476rwv*}4>?Yv zCQat9Kx6m}=^UrmZNJpq`IH1QN-YU0#ZcF)6i=|@r189a0j7jg%{;`vv&SBB z=%K9#?Cp|rT#kB5J4)#!VL+$CH%)Yse+e`dP3GA0Pen2#@8D+1rLH(1i7-^7n;?+R zBgQi%Tqd|9=!W!I648OuqG^z>BZP}ask4Nc65%T~6TD?f0w;Y8e1F{`gPG&;$G`+2 zbuiD=rf6?tp-eX%2*R;oBAoQle$bre_H&lMRGLM1hXxw<1)T_5W|}PSXcM-%5t)Rh!Z(GsC`Us) z!&~=<9F4jT)LC6rQyTt9kyOH3mo@RoFzFnlgx)r#HIpK$28#e{)sPVF+JxjJRiTtsdPtR%ESi-HV3pDmDPv)P0;-d+ z5fw|!8p@rHY^RYs8k)o|px!a2>ii{G-IlHy=ENUG*+#`!Ta_&ul|-ZEObIX+X@Qa) zgbR*0PYM-uaw^0TLQ6$d8Y}iGb4?ZdA}$4(phF;d;w%Zr$kUbzFi`abAH)ZJiz2V^ zdVCbL86-hNzz|)771u&(kwdD&L~GEdzo8-up<5Zhj&u}`XzcToL1f+Z4Sd;o|60ZGVQ@69bO;&B{FtgJ0XAqGqC7%P(CsG2;l$S|p=1sX z(;~43>ri1Atzm*w3F$P|1UcK7#V2H1P-3fJnYtW(ktzVXXb4#ylE}2~ zj23W!3h=_PI~GAbPSxGACgM2+m6C~PfRa&n0{;XS7$YB7@exgp=!h=mBIIQBT`7*0 z7Pj6!BC^D*?{VFe6PwX4R<)5{HD! zS?BIbPTQNeL~LKUzjD<4Mtyb1chH^0NnZXbBqwxL?eal66c^7r7D8j~%Bf®oCG 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

T}s>9O-TLrV%I2!Be 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 >`t9J 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�t9DXkYlaO3&^IgEaO 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%0A~x*!%k%+_&qw%nj+) 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%0A>~Q z<90M`qX9ztN5*q;$&EB-#+ajKLT?-OpQ?-e5eHv#Wyu?7c?5Yj{mX`D77F_}GK!twB!h8OmAk2PjocJ%DK5A57Luq(XMN7`^ne$4 zi;sMpNi=}6wvhTS?Y*PX;D}YV+a>MDYDDTtgHohnE&Xw3H;u!*317wX+_rkslp1Af z4#>zj8S1x*Sk;7B30im7!}de)@~!)K0*`XCKSPg#oGdhl`S=E$>_hz-aIDKbbHjde zf0Gt^e`9(1P2)!(;KztTP^zGHv#{zW;23@w6Wb0FW3CdfF05BUuJN<7uY=O=Sd zj`K|%&8rF#rx&0?2{Nru?dLta&ars~PE|8C&UPjQO=!2q<|wwZiLJUu5cXO?lN<0%T-C0u*_CLgj?z2{Zw{MAul+9-De>Z>BDBG2 z`Iyp9`9U2byAk$sEU_z~j6F+bxXm7B*9wecEp$5zlxJC(M!oq9yaF_0y_iY^edWvA zB99-|-uq(=E%Qi@BkE4%@SPwjhS6iv(TCCVkCgRK39&0<@`V|IoE1G_o1_tc^lDMu z8AkBwOreK0CboxzBmGWgof&a+wwNbtb6a%JDI3g7aTJ^z1g#M{!)#U3LVa4ipxikx zVn=2B7R(YM5nbd%0Ukv8k}^+K~V`F#K5=;nR`A%aIy_g#{Jd(d;EGbv=BSVJ_P#QHpFJ-T;bxy2S6sut zBdv)njc(C!8)kN&7PMu6C2hos|K5O@02RBUJx&f(_*}iyn6^LX$5CrNM zuq>KY_0+qn(RNB^#5`MY>=gSNmlP?~?y6i=K~{I#8+FeSnRlIS2ghFc0}pjEBf9R;Gc8=( z?+g}uq!unDRmN0n5;xJfW5b16G7Dbq#OZQ!vTSo+O5*jDYybX<-7Ih=EF>%>GXJKL z#~;;fsEwmrw@nuT6Xbg{5Z8>3d2t_w@-n5LCrWxrkd;&?jvdP~ar#7h<8*g}aZlJi ze99J{XC8EHu$OiCB(`s?OtSnG4eK^|`j~7ZkKoL;!h(GjZ3Z@bL1&2Lw5o#yeMT6b zpc%6^-_{W7WYVTIx2K0RRqY*6NbMz4&|5eIw*+g=3c-b3^vfE^ucCiMdjf}ida?pl zSBmxCA!FKAylcU;N0av`LI-`c?FyGG6L%iFZXhB~9%NYnbQ3yaQImBT)|G1$>XX|cP>^YMbe%FKkQ z|Lh`&-W07WT2t0y@9n=idA)I-kXN2cwsr13cUy{RXP_$;@w6Mk5k~aIufrxBHXQx% z#onn-eCNXA2`eaY-2~Zc_=Im?6ZxDkocxG;g}++~GZMWtHRS)6Gw_P}$$s91|4l~C zl?Q#q-*^pGIgM)6DJmn>q41)ngk~}6(E@ymU);jLJs?KI@Xq>U$rA+c^a*TuTN1Vf z1}5FRThN)7H-p-s+}mEO8Hc_Q`1{pS3yM|;n&QJ))oQ0GV`aK9x$v4ZweY4l1^Dgu z0P{`%Ad{CKls}Dw)b5eOFxddgJc9^(+}6*O8qqlX{qMw&61e&jWjq`zm+DlOpkL21 zcZ|#Pt76xWdIqh->d5sQKKhH6+Lb!V}$XE3fHne{o=eUHDPzYO-rDrU9G zx|xN*-CAma?K{U&T*K|b5dO3=be{5d2u~3Ehg~WhFAAT+FqZ;&@QfYCs&8cjG^YJ$ zI-GaYl~Kp&r%x+=yHf-WdXns^I=b$Ujqhe{g#5V$t7glBVhdOKjWdf9E~_gAA(>jT zc|avCE2(B68)I4dU<@F|9Ft(U=Tv4AGOZM(9n-cU>3M^?f=XbtkqMP*_o|W|atDR8 zr<(r`$nMn@QJF`_;b1mnZg>j@L;6rBmHq%nFQrQF8o=T20U3Zl&x42Dbi`lj77f^! zDAGekzzRp-2z3@%zZ~jR7NC)pJ{egTW;Lt@17Y~d(*MlCUsk2J3xJ~us&xgV*K{f~ z1KDfHU)DVmFtZ^|4fJ0MYJ;|uqAJ9Ob~d_G9HSFZNngAKM%FV7?-tebav8>7Yph(m z5d-6P`g)4LMAAbFmo{vO^UfqRs3>+|1TG8DLo}D@hN{dBlgxwF$7hD@P5^!rLo&uo zGRA8%4=kUs;prJI)NnKsPeZTWy1HAis(&iJX_sI;JG8nRf?luE zPGtzT5s_a?Rl1W2EswJp?-G&2+=fKlfE@ zH1+WqtM4z(p1-~W&uUs+{4twCBuA{n$Ldb|sC&kVP6{Rd834cs zdo`Q&5WPgKq&*zub1uM?Un4h+ozJqI3bz`@ZNZBcg&}&zP?!dmlFQ?P)5y+ClNPKc zM{r;!dD@rHMeiXY=j#CeY+zkeSO7;KK1@-)AL{5GAOw zs#)3x3Fpv!yPGp!{6=)F0iVg0i&1HWxQ5q|Kjaf#fBqXbMrkWpM;LT)#vFM%(xY^Q z$@Z;YXnpBgSOVQxO*Jz{G7gvEfdSY;cfu1AA!6t^;{uw^O8-d+$M)-D>FB_;-F?I_ z@=8n%8+#Gebub&a&99*S#66pn2KLZ!P#0iO)ctBQlFqC8wR20W7TH$SdwWQbc@Jea zL)02t$LyMfqGNq9z`Rq(nn6@TSNXTQH^D~LqZqmF1FTiRvxh#~gKCGlkIPB~^e_)O z#nWe|ez%^>nl}Lj+l1l+Z;DiSXuqrSAUxC~JSJbAY~^uzQh9C&{^Aytqt5AmguS~W7v%RnA+I6tE% z->GGo>YI1Ir?x)>iul2K>B@NNI*W2%>zCMz(!C*5YO+wKo8Cv;) zyzV1`h9^)?0x7lUcr%sSIS0Bpja-Ud$9p7?nSpl)JWMGK-X9w|~IJ$fRSYGRT&tWZpj0dzE z3PyE8XOAdo_a9Yyes}t3ZMi@nsxp(U2=y$Y49wntbqw3cXXpnwkiys*_LW>KHdN-^QSL!5?F0;_pt7{P z6L;Vh6R}{yVCYvPpY)7WLNGU#`RH0F@gNrv%W8*sC~vZl`U9|eS;-OY%Rf*p{ryGG z;h9L|05;jmVfe#^;4KGw@TT4lGX7il1eW^j!}+%GL}2h+)>X_lXO0YP2~{OC$&P1Lp%(erY|nG<_8R=sWmoKo9#2#`-!sNil}GU-1cO-!h9O8o$+!=6qjk_(i9=M6OJSxD zTnaK0Y~=K+M3bt+25jP$4d|BJQWk7OlWLS6M*fBGpc<7ybJs)#O%X22J{yA!PtWEh zD|s_|(ak~cpDxJnpR5@zT;P|k4%>eJU02Fk1JWBuf$-4R8kT8Og<$8iTGB9I*l z=nowHtx)gHP1hQW@|!o)n#alw-;TOB4Z?wM4#(U+xpSmLO18-za+c5t(G2WDgOFBx zvy5J^VRrU);qi0WQ6+k;nknwJHsdv2-K(QT1Kmi|YpYDh@zn<7jI(P|4SwUR8&gnF zz4?Tc+`GpaSb~aCH>tkIylVqnmzT?!cDmX7R^*$iIx4LL(!+cklhbEP+HH>fj`}mW zPr92)HARJW1`0XwyX3UQNInon7bQ&pIZg!pZb5!=``*0;E);{$kbkg7W!8#0~wQb)^x`@>Kp~6awZ8Bl&>8TO4j)PZu&ZS z_WuGc9$cx&+*oQ#0Cfjxd_5<1^gD+dUNK1>iZkPNm#^J|c(eZZ z9b6~P0_wE{*T!LH1qVdt+0?fNKAn>XIV*G8d|Nn1V3isg6!50)q^13j+TMFzb2GoW z%XmqNfB#Z{Es8C=dYXT3Jd`l=cXAABc}#i+L54*50lx8E{;HHeMnf{`77;V=)2d zHr)VCCSofeyuneoQJnE=R<;<6a3;E$Fl5bKdEj0Hy(1r+)Q`C;#m&{`y$!g~o%aOZ zWH-znd3Egvd;j|V-5uD=6$~2G0aB}XkaWXe)xmci6igV2BpBvNTOoQ6eS(pW1br?yqj*c~LwzvZVKQ$rT;&wt2g#Hq*GND*? zSaL0!e^J)$1gag-+I61TZ6ex9)8Q#Y^p3+&>m@fZ*m*sr0(@Jb!s>v+<`!$4pt~J? z&Cm0F#w};KWnHAulUj3_PGA{XLx8F@a3JpGqC{5JnXvU@6CLvOg@GcfTmJR(vFf1t zbj%_ykrSJw{(^%RRM#K!RH_EZL0W$)_W~EJiMjC}+B9bm>c{G*(jw2MJ(0M_1pOa8 zc=rtn+8Uz|=i!Okm~nP+#)eiwNZ!AYMx4+%Z6Wl%aQyFz06YO2eK9$5ca{+7zjWae zw5`_{INnhi>3ePP>}kG(WI}}>3-Jf47ZNjM$weU!gjw7iJj;u3?tIum+lj{>* zTmUBEjk?)m_=6ABk_V@_2p+>SH+6Y**RCj1bV``?wABWc#@vI#it5u6QS~V@2pnaR zM5-OkE;W$UKE7&OY#mrL>qLepq`nnGY8|0aVCelQGr zSxIiDC^%r3GH}~9z1sBJ*ACwnq`l}r5U+ZB4F^zNnLrG&)r;Ra*9iP%EyDd}C-LX5 zwb7YGpM?~8>5KoXtV$ z)j7tA59RQ6BUp|{@r6m;f-~HjNxS4_)PpF;2M2yh84L=a+5*n(FiV_z3j2uYa_@Ak zD_~RG)RV?Hy!+7H2b_Y(z`XvAKPka)di@ehdeQt0h$?_hs#GFE;8udk%Q38L5ObP4 z&TYg5Ps+xF8RUg|ycP`RM|ohP@BvEVlbK#Ro0ukIVlB3z#FI_HW@?=YvJ z{VE{6V{xxo^c*Bk{(b#z^NgFszI>aJ;J{{$q`qwBOAVGZR%T8|dog$Sr>jyLlhXWg zwkpeijf)6FGmqvFZA*_J^Gimf)$*0?Q=YV6DbU_u?6PW;GBt^!2Z-Kb`m7Js@Gzq%Tc5Ic~NQ?B)yN_xl5&a7Ip-n{0&U3l|bVqQQOttp+&!5fm~)iU-KHtICl70i1` z)-NSNKGq$Q@r)EVQC<2o+XCOzNIB!eTW3LKHc}b1D~#hXLN5>Ly=ll#^cW;|Ni+W+ zcQ6mPUgqz56d6V?Tad;wfC*NV`{aI4iUw0xWmOp$NQgigfiA%)z4_=2@Vy=FH?~4( zuNm7#RcJ;P{lao;iLHa0n8bK*&a=#nzk=G(D!JBb1@`K z@ctvQ!L(@91pDZHnU+eZUhCZYPJC(E*P;O44UaKCt?%*SPP{Vpu z{jrzz5bRnWI)`@1o@NjrdkaPvF3kD+7qjW4mII}KUWitBs6v)O!oJs$e(n=#(wZi| z@qy2kx4Z>EZIBmx&Ik;E?eTc+$}#6jI%lUQGy#mt z`j-s5VQiaowKNtb`<{TH;zu&J?^f;PoMyq*5DO%sM&>SyIXrRTuB9c(LSu5J@+02N z<`mXwm-0YKqjOCULpK3e%#dA9Z=KphKVyxtT;c$xrpwpf`0?u(q!jv5ADr!OeYYaG zfbVqY(wsq3_~11@%k@Q{Q?k`&y%Xzw#w{56ed~kf>z<+8EtR!S4}rUI^c*(d7QB_7$rrIr<78PIeyTD?MBdq#<~M|g;>U=TZBNo%z`G_@A2E6MfyaGU6%Hg7 zQj;N;`Mj?Wm2EDH54i|KHStVlV~QmFlfm|AK9S~!JIQ;aF{i4<^==E=hIp~Vu!5Fo z`K1^2@vlP`R$|SOuD*0ZNl0ZqO4NUlsdzt8OmfKBiY3D#l)o9S2&&bCvbV^ZVxQ6nmzc8{x3a@HNnX@ zzwsj-IqOWRJ4q*uXldRB^xpVb)c29S_x+cZfzka}#op}Uhg$#f;m69r`Jq?h`p@B) z^r_PNO@Tq~PJEgI_`=aVmVH+A+fUF1dM|5~UrO2JqD%|=jIoZc0yARSl8ngtL2~AI z{bb7opB;7erfl1<(g(UcAP z12V&l*Q8Ak4J-7}2N9%TSK$vG3n&7RN$$WA-}($c)&sJ`p-FA+fND$wO;dEYxt6V4 z>D9(E_zXs<8NdXO$oo+(J;5sDZ_U;|HL$8vqx5(|C~ZlP1GO`-2v#XeI3aVJ)*{oD z&LX)y-D=JW%2Ybo)R*75Ide8w0*u97zU{-9hN+l_Cph_-c1OxcCFU~Dmi#PDOSp%W z^Jnd;yys5&H&qsJlVa4jfbqnk8Mh~$c{hZ-_r+;d5w}RssNm;BQ#!brXZ?B3F~`1QM{88X^VC>`Lk(bG3WzR@(JQ@91*O<UCUKMa2$U#SV=*Tj!f2c0*sP-W&1y znt=}a0ewOsFYKF4tJk9U~4*13;&z$c@_4u=w;)WxJw%m8(IK9m;+ zKegkS>@2mj#6YwZ5lXvQ-2ryUj~R12|DJj9TH;H1;UAj}7na!&Jd;U6yUM@Rtb@4Q%BdGh- zcedIE*q(2{*k+{KShL0pyTNdtSZOh> z+K}jK^(mcMMfPe~5cXy03n}tS9%gSKO?!WF#-OwUMDwAWok0Qtcb4GnR_3Zwg_xs$ z)3<5zPAwq!_hL#dU`Z3M881;(Cp(G6^yR2=qqyR{@+?i&if=u%X7%zGp6tWr>$|T& z?X&=}K!O87Qtch14R|ty`Dx*)ts9E;l%M2OMI-}Xs8g|p zN{KkR@{g=Ls>)0S&Q+D4*h&0%&%B=fqEnRQJKbzhKdBy@>g1EZ16m272 zVt$ z7Tnr_a`9)s6$*(sCISMW60hmFAVw(p%F}khg8jtHc`&XdCjCHizi3%kze&{oL@IWm zQS(|l)S=50DnwE{W2@0|4IJgOXQ)Oh9j)KLSvts;4n1;5nJGI-B%d4Fx8jd>Z=HI^ zQPHPtc7JgO&nH~8vY-xK7XM* z-Y|OcBR+TuUiXMqo+i?|L|L$nh$WbxuVk8UU~yr**8d@ihEtohRrD{C@x>Qfug7DJ zV%Rh%@A_MT$*PxpE&h3`8d@OuuWAH7Zsoa*xboCKs_GOXj&2IP1AK$+9)adH(DsQE zYRog4=Vh;~&L68QG+M(q;(E$D-4|UcHjTiKMC6N(Viv!nG=C-Kiy~nnwenQL|6kRX zPD_8RMIp+XWA$^#2zihEncIvv_hRH|2cw_iIQSm9xsSvGOQD5lg1KhOx-Oee`@M$z z5SCSnGVdw8c27}^V;2h-aqPIFPx>6H>igoHs&mq#4u@~Ml~TBiv-DD*L@K4?xw4T< zh5W!oRcXv?s;7~sxTR~3rln|3@m}U)%*96tFUDbeQoWz9-<@#9yzv6q62v@6Mh_Th zgsYHnd21}qX<8w@$9U_bnc+7}Pvaf zg>L(WCn$WU4ys_E)}dE<1$iREr|%AamUGY7@`J8?myU{2GQ&d=Q`c5JD>-`8;jW|_ zZIk4RqZAK0cZRlNzT~#GcwbgX2j`@BTcgn0mBjWYO1d5Usx6=FajQ$~qq>*ZFm3v! zxkHS(2u{`b7&&wG`Y8+0XEGD7rk-$VB}~7QM}22}x^FrbFVYVkPOez!ShQTSw(ij6 zn)Wzj?(!)9)2V~pp#8q4M6v*t5wGaO$|G|`F?pQzd#eh#Sf$-~<#dL}*b2$CW8CDX8b^rY)%#@u z-Sbh-otSfDK01dyAak3dDT5oyIPfIME&FI1)*N8YmhliiFq~@lXa^ei(?{1s9!*%c z&$NqhduB)4ECnXS8QORT$7nE^u&k!txQb)ZJZ5(aKe)OV+KWqpTDaSeGx4aAmBFbe zoKo7#9*~VJFz)E;K_oZcrrn_uL=fj@j4DGDVzjlld{7H%WYR}m+MZ%`bM7E$8s$q? z#uh~jVsy&;hd^T;0NZM%0^JH*`m7rID@JV+)8_Nh|LU1bSkD}*Y0VfOfH7!NJB$4B zV(n8IAA~XRa;3LtjLKuInIDKtqhu40YTJZXD+#F^*<1uAfc5!lYdOh;zG`~4;aD}o z!F4MEU`BpGnfbxK1weY3inSnUtOiC`IW&eQ<;VY-tKO?dN0y9<)-JDc_siiKkjL6L z?I%Q%-sEFZ0O*2$o(uiPJFt$*hX|wp>}YC*sFLICRqOUo&g@!ZTH0GgXw$KeX2g@E z8f1(Ct2mY&>YyoA`Nx!Quql7f`$ugMab@M7Te1;F0%>QHq}s3R^-W&&MiMot6^~-= zVzPa2w5-xG^Y6F`G?x7%4(Ddq6RsYgu(YyD%$~vI{2fME6nt~#s*^e^Jg=8I`jXl+ z()9qe0H5h!TAT};#_U-#<;|Tzuxq);E6uATwaK-lc!)0$OCnBKuLtjJ$t8|l;;r80 zZHdw2JFPfmaH=S$*S<;XonhsD&VF5d8LZGCMf{lCRZ0I4ebj7R7 zTh^ZhPSSe<()9>4zT)2W9G;!_{a_mo=7ak#*8|s@e5O>N3HR9ZGhi%1k*YyqM)XD| z?E-rEZ|$OzOD8|!+6&r8WqAN`sv|4enW^qhxA5#n z3B0%09)h#%9GxJJ-Tmj@;Qsg!{X6X&G9Ot}~tC%O1=?iMet-Qepumb>y zxpk{}>eN-{m2xA!33*$R+{{UHJBw}tv<531Q{;|-;Ayf+tHY&dv=ZAQn{2`Mjgogq zl5CP4We^{^DeUBTvgn;ahy&rS6uCP3WM$m2i?m&8G{Z)ME9l0 zueAovu+!vzqYjszF-qJTa=$C9mX$HoJg14A%L|s@kBh=7^CG|+1gr;A zr9g9580iWi8zZZbN?*|y&6Yvjv0;b5H@(p>}wa6oKiu}=SaOFI| z4-D-CL)*rXhb8ZiN%Dw0h8y`4?()Ii!xnjlyYLKm;Su4&BmG=Z_H^OV9Z%dKwp*x?4 z?rf91?Md=^Va(@Z%oofXicJi6XGfauD<3D*Sf!(rofaJ+c{_Vnc{GMq9$rOtWd->% zF`Rs*oJ77>CXsIxLcUe<s=9@;@uhnXEE+aZkB*nTuZmI+(nEyw>!K7J1#h^Jep8f=hg28RZ;R3ikRB?e z-xZ}TkRB$a-xs9>QbS08C`uIL1AeRSKPn+SE~g6^RO-I_kS ze2N|s>P8B>hZS^3_0gRS-6KQY0fnk#IcoP*euHv49jKg4%alqQRi38%D34J^@&~4A z%&x;_#dIfQmqaqQs%31QucI7gn8Cc!3skk8+cB~c!^p-BZf^?gS=^p3Vc+XGS-aHE z8a97*0$v>zWYdrGeI+)}SSNc&V?j3|*y061T=PVTZ4RPJ{yx1_ll@gsg7}zFRq3UA zY=700A+8No_pPBZIbk?Kj!waglyEFoOZN-wyk9Yir$Qku6!vFc9p+*cFb)ta9SIN^~S=pYbrdnbIjVDZcpyX>9 zW7Of|A4nS?NVkhty1KFx`}T~h%IJ*D8xsNl`UW=@E{+LX%Y8P%)Qr$N~f7ApIuu|Y@=VqOMW z8VRt$XVy43;;au)%YN_(?gUq=x}8^)s-3aP^E(&me8r8%%WA2e+axnVyX>G zZSTn;wkP>)9w~8+LN3n$c2-~yFANDvhX+ibYFp<6@!;aY1z0QQQ681-$hi8V>>_}5 z04yJXO$S($0MmQG_FlsdsOE&~p~Z%ECZwK_9@e)JHVdiIx8;o&(kd|zW>70fgpA=lxu`gW=jyksL#^DpQ~ zbf<*mkL)$oTQSvJ`jT}f#K(tZP4rT2>#sTs;(VxD!@S9Gr3SZ06ef37FuA9Q$vujB zCqUr{1aoAX+Tdm~;HCj?B0-~3v1GWVqDfb2PtzoFmb6>dc84!^k*|(`K)mL1VBd%R z6GbLQTNqt$&?K6|C~75+q(>?D(4!^aD&SZg$Hu}L916&g@4=Z3oRb93QU4G1IZ!`Y zs2|M}WFyqWgHTTqq1uQ*ON=g-Y%WHeDn=w#N6%`d1*~~^GgZ7fhVi|#g^$g#PKC@$ zCaO^)`L#j{)D&OF1uyjIM9EJxZyMeljeORnX+3IRFI(zze%gT2t2WBdN$+NDm$w!p zs|5xr44x(o*2BRjRpaZ8Y2!7?KMu75q77SPy69M0SMCK6A2c5eOnRi`k1dXv!bgll z>&A#AMmSxxLDt(afPVwZCBH%Z%iyaDm1CfSsoV%R8^wtT9>9S{%@NJ25%q60oImu(Z>SyFjy|p9EO>Cbh@!FR(VTy$h4cVs-)G%%Qg!3k;F0)s6DgDo)F zQi!|-23z)wyyd41o(=djgu#}g!4cdbVdicaOvB*B@FdEc9vq+t|0+^+Qn3E5p_8;+ zbU0Q#{4~((;O~IEP~-P{JN`!1=xFe85~PcQ10L_psICLIm6^L>q7Jvmr)eHB<#|l1 z)^Yi&h;2!8V5J~(b8^ZcGIS*Pj*k9zNuwocVz z-t15(4*S8=p2zWiJ2PK^m2oJ=85W(+!H=c{+WPTc*aC24SoY+5GUEa>$**Q0t58oL% z4R00}XT>T$D;6w$-bdbfGo}`QU_Y)IzK6tB& z`4AlX`in8fL$K%KKTxwkJugj{AhabSfn9WorYlpzaxV$XeLgc6L%j)^_*tw($5WZU z0DqMMSoH|x3z)eGDjrC9VVW)j;<5k{U-4!5b}qAZOgtp63g1r|-_ImJA<0G0(fD#l z#soNvp99mSe2P^WPTY2qm<+DdC=X~IwF9$eDVlaLla>`Tw1{Wu=ggc6%gwO7JWW@? z@`{4x6|lU*=Do-b&2~73?YM@cxlV^R5Xh3hqKG$@_T^a#jewn7%BFEPjTKqL(i(k&2yGFElZ-Hp>*A}C% zT^us(hLCZ;V&*_-Oo9eW({(VkPApz6x{fbe*Ht=+R=PHE zJY6gKYs10o!ofGP=nf2S!{D1zv@4ty>oF_ViyaRhz=-u=gvR%Q8(i*sOm7XA-|qG} z|MW$7V6S$Q+8X?z9m&PB8uFzBeZ4rRxJmN6lJrJyZ-a<7xJGmCx>^LY^QmNdNs zzTY8Rd>hE=C+m64T|^@DU$tD&-gWX=HD8EXE0Jsol&_Dlhws# zG_#sQju~ChB4J%ZgdJ-SEv4L6h+5mY?Qbzi)@?}$A(ymrzf?kU$u$(xMK`4Uo_EeO z>)8MQ*XQ&0e&;*S``q5=edjrcRt#sY>}iHF>}RbQG9NHW3&nP>qhyrfpq4vC_oo@9 zCzrx_!BFTJks3az;e#4J$n=TaVZBsl<)KrH)H;0#%_?N|U;!MQ;+Ww>UN zo`>khgV1#?myMN~1sTq=RAv@bW|pNgb1an^q*KeFI@e%zvO)UB!?;|^ki{41b;^*f z;jWPl%EA2p!sqt}Ah0-L7-h)SayP+ZP-r4|i!V?%3<^|ZDNrXil&q70Vp*8Xmu38% z%vGu}S1AeOriQzXRSFhwp{2#VrQ2Us=`ZFg%`-{U!TLmq_l}mki}B_|y!n=R^C8}R zOT72~6>s!c@jjpo`Fy;0D8pS1mq+5ghh9YUUfc%+7DFK32U@NG<9+zQ7LU@R>3^V!jqwh zUV9oTx({un96}V_8x{AK<=#_! zmUFcZ+gwArYO8B7Msd}yQ()F|)s&%{EE1Zc3^nGk6%cH#Ic$R7TM{J*U9F>4dJiL| zw^j|aRHBp6r4JUDK2nAcyh|U=E`1^{eKNaL2QJltOLgE<9k^6S8S3~&^_1Zgzo?$2 zF$|J{!h zo20=|AX8;j9IZ7rGT$~Ed@(tM%sK=)8;COlbA0PBTdCM(ip`= zQ)AN_P&5q`HBlL*v}w%{IEYl76uxR|@?Q?${Q%!txfz?$e$u&oyAjt6-LN+KuK)=H zNZ2GAo6{;+JxVl3i54dRSdf?w5;8ZVE$E0u30st~Gx^7X#E&4sxEbXj(HSM=DACd+ zwF8M6AYrdHI%2R6{|?p;g0&Y0>%a$VPsKTEj4g?#R_0)T0!6J=#y0;1+lHY7WjAn?fVc4KdbHpOl(?TF`E5HtdwT_6} z!{~sRtnGw4iM*45{|0$y7%s>Y+zkee^6rR zF0i#wuy&ci&p3h1N?c3$cmZCG@+5En5#;R;l-U4dqX3%(coVMO0wY0y6H$iXKhXz* zcc2VeyHg;uTOhMX;Qv0so~9r^4C9C(CnrQ-*M>#r4C?tC##uqUnSvP4A-3#0jcd;f z^jr}5b5oG#TY}u)K}>wOC)lG00{H>~eu^@${$Ql9X)R*nLNCB>$anpsTU-hAb6!SF&g3)XWiXG&n6hE`piNSvI^<&!llYb+CNkta z^hZ1!G4XvC3`}SfGAHp22k% zeme3p)M?=j$lIWO3;zT1R_LRJ$2&mM1pTw{lQEyK2_@hs@$2a)BECMw$Oj`&>RT${ z$Dtl_W||80j79zo=E%a2;p3rCi}?GPLVh&LpWy55ANi5UlRVl8_z}qO74hfY!Uyqr zp|^|hE=PVS%9Hy@CXgS3{Cd9r{^7qvejUtq0)8OskA|5M==VpS+^uo}?~C!yhqAn%2G0!93}v*__ep5(8+fY%~Vey=(Rcn{=Bo)iMU7xE-e9R>Wi$m>P? z@2Z8@AWz~}3V1d0Bn~G5?~eH-adZ~s(+A}vMf~rxSw3KTIMh{>b}o3rqbOP z-%aZ7)pbo}!;^(0ziaNPbjj}KKp)#ZramHl-^t6)D<}8{hS!CsZSkGKOgHvgrn&Dp zqbOx%LU^m1{2{Bi|FJi6^n~7>Gwp8d${n~h$+rE$(8X{3$Lu(~?DH>k%X3O|I^>Ti zx)o46_V&JQGi8tM-}YGI;i*MOk{|6JzfkITd|sY+a^rMARe~zlnGL zT%?`3JNN1#wQSefw}X;`Cr3PuXnym)cIdT$v){fMWs_QYbzL(LMW~B|9UXYs zefi$Xs+LBH!j}QnTc+(si5R^YElP%lRQUV$*hE@xgBHA->;hUQq^JO@ybWe*@HV2 z)ocIQ+O~_m;`{Lv?hp9(MDO1k#qY^a`pf3h@|FXZdu?9h^&nt$^BCpMz_z{Cf4dzQ>!5Zcuxsyr&QAx+osP*BarxD9_!OI|f~ zR5vx(=d|vcZmesxahq;^i^kz0KJ#K`|530)Srz(xA!PncLSNZ)xAtG1DsUQLm8ffA>>n`$?~3oI3>uWo zTo{+y>cQ2=`>xJ+IFj+(&BLA@++FhSB%XI_m(^sYP5kvuidpWyzX$7=oVbuDqLwH2m4XdwGMp>?zw5U|dbLRd!0Abg-oM*Xgl|x}E2|VpPdT1Gm;MsdgJ5{l+bA z`RuCt-AUQgH^gYI$6PnAc~?3mZJqDnf#r^$qW{y7aI4m#cg0+PYHqiZog0^*iGMc! zWYmIJ`J2|Z?{~5NtMH=lsQOloG|&1^>X>|4eIZYG$jZ3hf3<1A*^>>sOYcWSHgdQ$ z)+6|G)F)?otKfczhQ%f9vkrJZ&TzDNLMtE$jcQ=Ip9DgMy?RE10 zmu=U{avq*_>+|TvIXBJ5k)ab)*AERy32kW`YTHH|eqvL=_`ZwWZ+Ycvdq0{OVA1yeRy5va2*sQ{x_ahfa`wf15AwDWu zpR#Jk3}=1wm(xzq4UG9vR1PhULgqmWnk51KjY+f4_2 zonI~XyOy)0?9TgRZyn;A4xjn#c1`UzX+Y`HF15amrhPCT8)zEnRz7p-4BOKDt4%$# zpZ+~({ApuQ{+YEa9ETgGl{8N|RGYGYOpjW9pqJJ9jv31*Z~A$1?4ofi=t^5|*>_R7 z8FW>a{mIw+Y@+Yg%O8zaj0?1iGF(nhc=9PS_S=u`Z*0GC;Fr3>(WzFO>QuWdNn*SRWa+r_FwHbaE;!t z&2X1)n)0&sofvPmYJQ921grXFkIbL!Zfpsf_sYeq%4SDJ`@bV5AFce|TNiOfWIw{5 z{;jE7%()gv_g!1^p?u^}-6A)-q9E9}{-)E&`VK?tpWk{Fvt(g<+2^YA*uPe9ZJ05! z{6(ZZ{V_E_lepR0{<7}%+C0xQuf4WqJ@l${Z0<7Y^{9FFv-h9b^``%{UL_-P7V1YF z|G9EdOYaV=GA}t>TPOV4eMG^nMe{SB_U_yLbA!i;ws{@26V;QmygkSFvH#q-AfwJf z6fi54{C<;Xf<0gN+|&%j_Fwnh!aiHrTMPSXVGm7BMNEI)Lks(6Dg=8hc%Gvsq6|Fq zQ4^5Q1w0=4>tFZQ!hTxVLks(6VXsVmk84u_k3#<7*L}0FR~Gii)NtezzV45OJ+ZJ4 zrUKBG5%6I2Cl2r+l z&$pzm+9G}lQyawaoJ+OlZHcb{ZiW0MnCy`!&+jb}9{?;znIxF-SyQ|lCOecN^?>iY z#M=NjN0}`!;kz>NMwsw^CMdI#wAlQ^r^> z5YHCzkHD}-OrC!}BTvq51M=iteiE6VO~vF))S*sN%kL4B`mIL0qy{Tc52>9J#AKh} zASV0y8ugQR4#j-!iMt~vJlUTj)KB*0g~Ms!5<20LzIP>yt}%J zYts=E{uInt5U0U>88La6b`ddo$959+lXr1xsE54&JC2yV7d(bCgKYT!4--1D`P^@kN(DBln`eJ|pv@bDxoV(Vw4@csVon8KIY6_Rk2u z%<%6$xL>s4GZ-%!?Ps`NeAQ<-U$oLQ94}h_8TOa_zdlSa{=YtqFPi@uI>3Kl|N1~) z=AnOv>?H$!>HBYHQZaXT*MI9F|E7eqhBpTQJ>4At^WcaLSitI9Qr!U+Y_5qTLYbB~ zY;B>kj+W1Bl>f;C|K*WAEnMAfoE+@{h`g+vtZ)9~IXSyOTWfy_=DPiJb+jg{!^o^A9q$vH<|Hqe7GcKxA$2FQ;u@>FSd6 z?85G(ZzACkXF!p;fq^8FiMjN$qU_T=ZfsC2p*5%%7CUu5n3$v7bahTcMc+tkjeEN? zr_z+r98nUd&Qx^DE4B>9XfBp+?rh2_;OQYdBEsr^wj}vPy~$%Di}G9Pvd+zH|FS!e zNJT>S+(zkg7wi6XMoEz?hnkw=0zR{^53`nrhR4QLsKy+l8Y@wq8rg_vahOJGdfHgY zJc&lc6%&EoebHAQOE*oCk?b^^(bPYCwQ7F|&Q{64R-|VpvvQ{nhly9FR8EXm|6%0G zAPn7C)YK?#H|E~Ae}#M^p5Uc6c=IJ(yr#TQUNK%r!+}e;MO|%_CxyTT^pQhGAF9ir z;97j>i5k#KLWk;I1L3onkEOe+!?No2@|x|RgU6p1L8B8 z#e{X5KDK$v`)w_kh83hKxnVIDdKrvS?N#Cv^LFmB8KV~Rdr9Yua!(2+>`W_?3rKUE zr^QL#ZUGI`9j6L4mMwPi-u}g1Jxt4Wr}?&S-d|IqJl9QTI{B+JoZ{+_bVG3%`kkuP|0`PJx<(D_GIv=1 z9_mTcBt}FN9%c)R5R2VG`6wl6%3uoGb%xL^)ty4ySmF(OqPkz7Rq8Ktt14_OHUdV^ z8hyFwNZ*J^-!dL-@T<60775L+X~xW|p`!#w6`J!1cSm5PZJU5|cbj;3n_n9qeu-D) ztloo)qir=#p+-oBl-c_Dr}rBV(9s8IW|8{&%#P<1|N2f~^#Giv2D4okCNc`eeJI5} zeG$vbn4p}^VqN@Xozr4n6$poyE$s{agq2%q#`Pi9jq*pqDQ)<}2fq7GZ2#OSq_b~Q zXznC~t>omMeA*8x^>)y!5Wag8$h`?@WPActjkU8V9l9tD6FKH|drcjgm!&P2p0)#yEE_gs&t1vD-6n^?z-Ij zsa>`2S4!;~X$_ztg9m0@=Tp!tS;%OL#l-OZBFelR-*P1bQPew>FU%=lS0oWs-*+@} ze1deUs`;~K=HS44Jvs1i+0dkxl+?%LzncZdpQ2jC+s*Pwwzey4p74C-10dtCiUA-Mk!G67qMylPm{}`S zxRtSJdE&7cJkB$8@`8_R!ytiq71Fi^WYT)KC>^5%knD^?=>2IVkN&Jkbe%*tUT3t3 zbDX_u33Lkxk$9kab^NqK%g>cR=^QMGP{`P0}twLK@l7_ayFNf2S zCu3^GFah=WZ*FF@QWfJiE}0F}wqqG1Ux;-j3M}Pq+GcoXU}ZE2Qeg;ECR^}M0uoYT z62WtSVJ-ah_tvAHT;}pkaj4C4sO4cKad7BaA8fy#-k6QG3z{7tN45=2T{3E6g0J3= zdXR(BjE8WV6&x6@M48nQ?W6lM1Oc%5hvRHYCwu6tJ6T9kvbY>wiAAAsHzQZtTs{e& z04hUpx1(R+kyCO1rFI5(ZAPcrE6N`kVB#sjWok&RLa(ZlI*S?ENKb8FOH1d?(7i&l zrO*B>;6$CMEU$)q*thhNbB{GmUtR0Bnnxro@r3FR!lZ-&By#}H#kTX|Dadi8WY~l> zid%pnE+OHsjmgGL{;1z)V6qfUNdf>7OeTDo`Xd73lO z$C>M+=nu7lY7g#4bSQ9w&;WC2tqyU@Qi8N*j>Y|mOhcyxOUcrB56h_V$f8vc_3Efc zP=-N^htGqaeSNcyxY`5D!FR@ODf@*25B2_x^j!6<#3CBSMNJXLkC?mMx^p2h#0 zbC!n7fR#4M&0gD)IXr@#vXz`~T{&HLz#D~Da2Z{87VqOpMJa1`Z;^YmH4{dKd-1NY zGkS#)mV*Y7ZF0oc9uV!9YH`qSn3xFD$gUhurio>^X9mgkgnB0X2Ac5))QCF;;oEWi z@EHZ3FP5L_im7p04$-w5NtwflU!Aw-!o^)BnYSd_^S?<~zm*>ZQh z5`dz7D#WQsN#Js;=5mXf4#Yct9m4f4i0g56BXk)aCl}yW18~!D=I45C5%ubIFJB(^ z0db?&fhhbI(g}HF=dBTJX+*Of_dq%Ez^vf_jWa2{NcQjeft_^j@?YhKyW+4_KY7E! zlJkSGwFyq`eL>lummefKYewELG9H+fePPqy^Xp)n55AG}qQt-guN0m%5z-0~MWJzz7uU<uDZUyoLXS9eCx)G^$6 z?^Mo7t!m{MGHv*As#5)=&z-_x(vU=o&SQAaIE2o7&sO2lwm_>ARio{-xnJxOQz^p~ z;G6P7x>&{yWl{cGhB$%ibD&!FGK^hMLgDSDAgT+bGk)DS??tud|WEEC+*ZiO>) zqgHpPP{UxrT6j(4OCC894(h43fS2(d8zWb^%K)A|=gyuMS`>K3iep~mU2s{I?p#^86WnxvX+Aq&Umvbn? zQwpG@Dk)AYwfJtpc#E87gqXZqnsCY3UT0WDHORGFySJosJ4LWfw!8{V@V*W;!U#2r z{aD^uy38;Esx3=PQ;acL(t<8&MFdyw*H-b2w0|CM|BP5d_vbUfB6h_}6x+;>+RPp! zwuYOwe?F3KX z?krj0EE#(&Mx}JkESWejw1ii*gg2DhaZ}ZaUA`?yt}Q6Mn(n$EU{1as0v6MJ)z+=#Jzz;cgAXj&a7Q1f5SHFN)+34%{StvcmRt)n& zNiohe1Y!K#cyP_SVs)Qxg&cS_C$Do092r=9IkB0OIzWP_Uqxl`uk^%8jb#(W|0JG%biURIY3Zx*>O!4r{FA){@!jct2U%T1_ z;jR5~C+{V4Y<*<;!B?^}G7T5n^<=IYqylG((c|UBg+e)zT(bVu6L2};pLyCjNN;m| zv@8QXbHc?-<~`e$bsKOA57ZbM{249clw$M!FyZ&yPHQGo7wA%0E~rDXr|c{gKHi;FZhYuq}#wpTfNjAe5xB8UCT$FjV;B! zhR%JB@SEEDLHuHcD=hGd2of;Y1nqY?QO0D<(3(~t|dVl*{quQtn%I@^e5E3{Jay-gtya$vvx&e=v)|V7h`vT>$_e;|h!7`Z_xjY+N>&lrI)b)3Y zHfpXiZVv3S#baL2P7u!qo<*U_}M{3dG8Rvy^U?a|3C#@Sz3+J;A{|kiPreO)cguvTn>kv!tY_`RF*ht)gE=265Cnw3{XfrfAF^M?xqmnfxrJm1EBi*U84+tGfABO)7;tUc4# z0>pJe8YvE2vkqGg4k8qw&57)8hJ2V*2=-PJy2XsKr9Z|8;23=Ff|GX=mgO+l&@D|4 z=+gS(R5p;->K!S=H%-14oiA{jt>0|s_4pedA*~9{fB$)sH*Nj1ligS_0gtnH-o^2x zNhI@knkSJ?3&U1rUG5?3EbkTzW8^3Yy=*Yrr_PLi;N9mrjuJI*bph}qUy(ZTNk=bM zAgV14|I@2Jj9iQJ``7lXE9O}4E14X1r+tU}mzEGAWHKfW^o639qM z*Q0iIG33!o zg~j7nrytoCDY%67-1}LNM-66|x<4HXYCETENRw{LEh8uHuIXt13c0o68m`o?G-%du z1-YIbQyRoxDiH#u&*fC7DpT^41-$*CfJU95Nr@G`R_)m8 zvgQc|PR^L{Mor@=l>F_Tf|^FeQLcW&gWK^(cbv&C5?c+6P$ycfh^_}5br%$(#V4`u z$L0-`FiBi6Rzh2-3p`>43$EE=)&|Yi1|O~cB+emC(v&H_>?AjvZ%)M;XE0;Hf$tiS zKQ3z7#Rw%j+;AbOo99qi=R7Lp2sI1)x@MjaeQJM`W>Z#?d22d)3yPEBU|)3=0Mwq$ zSGPT62m9V8;(vN*#iD}z5#@ z21{T2eOyMSXusxddSa>V?~$x&wAMSP<<-7=MA^o04%c_SbqM!v7C3c0Ri1F(mToJi;@8)NA`2lO@>`XI{M7o?(>{Fq=FFpwrX^C&2e zT+4kWDr1@p0b}99|6>0kIy<&2+kMKOJ%rU$Hs4cihqY6wp`SEfCk4l;$YIi@vz#`F zs5Ai7d8CppmOHE|Mb8M; z(ve9NIMuY{6unsjC<0#CjThkaRk2z(WEUm$s2{!Hp=R7mBWc|Bn4_*pJ7kju%wGzU z#&b4~Cp40JRI-&9q1#k_s>3SOVFe27q@!)z#Gd2|P={(_nh?p#5Ss2^*5(TZ1<$v{ zy(#LEf_G7rJ;j@52?zs|z9hnZX1PD}kf6#>kY$#c=&+^WPvJjMsNjuuV4+Kj8LzU~ zQf6jAauUnO7Mc9nv+)-ERA}4+^S2J7XWII1@h5`#d04TN@97uJVdZr(Bzc$0PT0S+ zM%_X*r%WXv6rd5abnToJ~m~nB_aY zK^|YY(uB6+BO(VP)=YNE;}L{~j~i7*Utwe1BugLtEOrq|67ZpIyp}mXOsp-CcCCtu z`7tarH1+S>B#n#EWMoR4^2Xz@`2}+VIYe@>w+`?i+aJ5jJxzZ{W;L1Md-c#Sx~04s z4t3qBw?Uvs5tfUYP{DDH505MWDzXbo({RRD;%65~4oO8P#qxyh6Q^YlfEoJJgZ*P{ zIEi(6ZJ;Dht`s$SOIkjS6k#I*rtP9P3w=)12^dPIaS&8{DN!I*UgI~pn z!t>|6DnV3;LR1E^_KMT?ip!Tf?sC_VO2NUQq7F7I|C*q_nq%a3uYMDqjvejIK!;_| zN_7ebvk*zX#c+oGIip3FRP;D8mGI!mZ&@t0#VXB8cTjPwJCM9X6SoD?u6aHKEX6;}Ne6gu<@TXsQ+R66Ig zVX(KpDJ<@|A*l6|QX=6VH>sZlS)X~%ifK-M&f$}I+@~lFwJbu)g-_I!pGf5dy&b*> zmoA7#!-iABR7;xzD55S$u$%uC^>C@r*))5{Xm_865OGx%qbq({xsOA!cv%Zyxd=gv zsVvyF(*(6e^<2z4RR${tP12_mHeE)#=NcK%tRBeS2@0K_EB7YR>_AKvzYbL8&|Gsz z+;&AI0ce3MwbDU#KC!9}npGc1+$Gh+G-I&|TR`6WHYCUO$NgpC>#|VW3fv_1I_^%i zooz+^5HJ5~E%>CHzSkjh}+y14S<>FL!KB zmG!VwchQM;CQCZyxor8%Q!{KY3ZMIN#49QkEs2pVg+G~cUWV#KiVNM>h|+Rg`pw1iu<*$d>80q4)H zIZAG~f0CooD>wrYSN_I+0O-_?ZD_aLWr80zLgy|vI*+w#mw+|+Queqb_uxpm18c0)$Nn9*DI>2s5YazxOTRlYED z7_#t`i(%rIp>XbP0O>Kyb7mOySJbG ztM*Q|UP-jzLRJpP-zj^HP6;F@ax_7w{TN_+_cWCCsPy_tq@nEU{!x?wia>S0c~8Wq zBg+=l{KY^m+z7_TVe`b0xsy}dsbmtAvkfoOhwx#TC_Vj}VYw>VYgeY%0fJjF;G|?W zl)axMG)C*YOveL|zu`LjW>=!j{8b~p?49Mh+#f2NiT?rs0RR6003iS0adQSF`xB^d zWFq!TEcQw+_DUx9N)W0<@|Cn}JJ+UO#WprTR|Xa!P&PzY8iwdfSoRyK_6%0-8Lrwh zOtokH%_~;x8QQJ2DT)eszUPg9(85!ecC8Q(6w4j7UsO-y3*_Q!pug-)6o>7(P ztF%BX`j`Yws;{HUBTT0bN!`V4_FNrGS1^U^dVjciPA~r ziE6L=>Ncx;oM`;IXBesTdenKnia5JiE~N>D^}Zb?5^o?9Zzv47#DHYp@J%m~c@vS* zg&h5L0HX1x0u)xurVS%Y~+!$QA`gTE2W2xKq8{( z+iWzx9d#V~4r2UHg!J!l>E98hf2Wf4?^H-`@1yJ@U*vdSknnxJ>UcjKbOJ7#-`^MV z$ouYasWbJ3d=h%JP=do@4Kp98<6is>hJ(Q5H=T}#q@?HlA3)R(K+*^}eSkQ95Ez|( zQWsJnE6)!h&WB-g37C9{n0y#aTPlMv9v}MFMl3#pC?9z?MLa%2JU$8(u_Y!S1ztg1 zKE^KoIB>B9^J#r7Jpj@`ot5xA@*lft3CaC2lKbO8Zk;ok+#mbi#zJl4qjHllZEj-I z<|ZNBH}Pq6lW%Yg<7#gb)!rm$<4>4+pBP^o`IL{gPsO~Wpq-~?tXxyt{TzdSP+9bs zJ3PyLjsjj@Lw(NV{M;W0!UAeD^6q9N+-AkyU6czKDmME>rA+q)e>$j3QIaok_@urJ z#wn(8?Gb+4&b_f+_M42!{8p(0ThnYu4rU&X#n2=sdN>xNrqR9Nq6oS;hAL6S z&`cLof2XEpb7gS*O;YT?ke0P zpqTnAo-d#a>oK&j)fmR;cDg$v5}lKR&dFc_;rC8*os(=~ph52D%WwfVmPGO8q#GYlSBfTjmA}5!9l!6UaYMYS8b!> zs;w!m+A#^+nc}LQF|IlYVs{93_&(tdJgz$Mxa!~;h{8w$!*fjsBxr|-VCf*mT1V8q zV?_6kzWY%B9Z>%rA`;*ZQ3|%1$!h=905C;M!-%??43*_U?<}U*o6_<#YCiYKm?-i=C7+HOLcLngjc;{ zUFzzB=m<_mVqLK@yRtP>SGBNojswONoC5&T=AQ~cccTJr8mYbWO%f++^ieNUylZg! zfn?hq%eFhuYP-`XRStxl#JF@|pIz!Rc}x8+HnE4~2||qN4(SM=&(JM1gtys(!_LL=QRgs_o`?Ts|q+q{v9?advvx44lpVD98^ zWDJiNG)^d~yjAID^s;;BrX?{)H`n>#S!)cJK65c}o>5Fv?spoXblu2{!y4cvMFK?M zWAT9Ed)5vo_CB{m!%)>E)*TV<-u$5N4g`ZRI>UAsMe1(Jub9Vra0B4)eN6`L$qn2S8@MMo za8HX>anLYq-ky?qdkR|g6t(Dy0tK>;tnd=s525eZd;{+%h_;_7+J0gT?-wk%iHUo0 z6T|9xFX6-KF6Dv2-Hl)bAK08u@QptRZ(E-&mGo}PsWAf8IgqK`pQ#M5w#E8W zm1Tga=>RVD09RAMO}Z}^J1E-EVj0iaL2OxiP`FVKBsi#2fN*scZwvd{KB54kdQ1ehO{Gqa%hw`ahVYV}>cPJP6 z(C`dQh>OG7u1!AfKb&nN4!5M^e%BO-BZ)Z=cChFZgK>N~`XLEFhzl>3UW@SpkuhA9 zF*b-fe-O9iAS=8_0$}VZx(2eDcTlit6YO;)ve%K7?R8|p7AkclR_aKp8&&Ga@SF__ z0Ok;a%``hQ)Qs5uC~o(ou!u)75s%^`9>tFWkFxlsF%9ItI7*QCs6b-F)1RY|IgW}r zwF?B1+&UPM8C=<|gGILv#x@%)b)z;LEVy;B(XE4hBUNG>tIU@BWw0?oj^+V!H0F9V zQ}$@i^=KX-M@xH|qon{jS_qJ%qXsLg;u$-pvR980y?P8*^cbldRrDCH=rNL_#|Szd zWAwrh?u8*(xFKwFF@y^@gbO!BSmO?nLS%^KnIVD}Ln;kjR3lZR8;9mF49xFNdSZUBo3}clUa*rHq440v<5@2#33Of!Jyf&1MCnV%B z{^V^KGXF4h#WvmMu&ev+{e97d6~-vTYhmK+Cb3b>+M~o5Dl{0paRNR}s~chM$k=H3 z9u2)>%}{+__`Ymlhtc#ZH{v@65*y>2MdV9SEASnI?tUYtVh|Qc zLe2uC&$}oxmR=O0t_f>OhH*ERjYeHXl3b_MFghH^!r@5h#Ry_->l7o zNHO$^c5Iwg)zNv`i0sZ2(S54R1v&eTv-~TD7)W&;XR&wNGz=tRx@$a17~;IlW$YyO zOh-Xl3=s`89#b11uw{`s9ugdHIpwNNwQY5~`)0;}gOYwpL$t>P!5$M>s7w$-Z-V9D z(-KHb1XfGL9MrZA1@|BT?n%2e9oIL%z4wJwuD)vRn{<7!_WI_BqmChi;@*Y$p&jP!j;#)(a@IpLV8-J zF((ztz{n3c(8t+dXa-a=05}x?v{?212}HMpdiQ^g?6K+Iy-^Wnphu z#%2Z~3uw%oQPtY{xXRvow4uAh#|6(&``p&m1J)>2*k#T9Hw)D^OM=CqmKcnjSz zlMUvX@?f6n4Q8}hC}NKz*>N5&H7EO*gw$E$aaIyCV@b^Z8q>e^2nnhvVatHBFsjNt zc*^pqk})fUS(!Pg%(X4+G81rE2{UaYV%*pqTQ>@}Zsgn>1zR_Ywr&(`-AHC3V)9vR zi8f39Io^f`Vt&hPzl9QM68zT0z0oB5t%*+}8q>+}ki7<`{W>L5cYv4}mCe)6iS+1# zMPPAd6=R-kVtKO3oF|)Dp2YESHo`u;Iq`9}5Fcmr_&8gLkF%v!%Gq$05*lzW_tadq zeRgM9!C!O1sl2D$T#_W`QfhLNoNG#wb6Jv{%aY_=IZ4iylH^<=BIbtPC*gdK5YFdt zBb_6M^Eo`6&ym9U92m|3m`KBzL}s3csLpFn49yc_XdaKDc|r`$lVWI|w9=gyony`w z?0GJ?=eg3J>)g;F+#d5$|M|_a$9%ya^SM3d3-*{V*<-$BkNLzN%p&JAxy~2lI^UBE zEX~g+?c_?*`IhjC!TCaFLcUnQeX&4}Z5guzJZAFhxk!C{xfck!F0g_(KZ>GFvUw zBZm@Lr~`#qYau}()>3ZiEY@(7hmfR4ih8EfVaqh0tFu`4zKq!_{4!yft{1a(y;x4yi~V%X>~kTr&xMlTFQf*#khfLpIR>AXaBx9mk8mcVZ*XD_>zSN(uwF2o)a(O zPq^{3QS^n6*rgG#q+M!(axX!D^ns1oWf4!vFZ0z9cce=os{S~}$g*9JpGGf1td?kW zayG;;Vp%I1p^asioNq^IKSW|ydsQ5xv04}HTBW>Qv@v7!L5|qv!lP3&>dyLUXQO3X z>E`!|D`_hT;C%Hf-7q~{TqH)T z@j9@Ek+`~2I>WpQ#nV+No~}}h)xs<_g=8%|?F~w{k-bXD;8z9q9#=qtgyIQDBsDboZY^d+>01DTEAMNZhFYF52ju zEe_1jOsqTlOib)1Zw3RsZweC*>--1Q`44n*162NivJxZoM?~n4-qZ*B|1r#1tnNq1)vBkBrIEIOKjC;?5LX##aH$ zVE1Lo1=Kl|x!4$ttjGjAqOxz(ykBnL2@x&c0E8oF4W_OT>ek925WJB#v z|L9XtXgL>ixvbD~CfjnCu7DP&1WlXP<-(F@dAQr-+Wnb5`2Dlu?wErB@xEUMh$gw4 zo8)fUBr;}KS~k+4``y0a;`Ney&}=Qg7k3YHiRzU&Sx-?QlJ60o?f7`qynkU7|Kd}G zL+399Bd*p5w3D-B5SGdJqM7AhGPB%^ta+~`e9&4$>1RrP#`khr?)6obEO=jFnSi?f zgcPjK2c^A_Vn!{f?(;22V6I_^Aop`Yz;~gzB==KPCP{cYcRxFwyI*qZ{RG1?B#0y0 z?kOS#@5918DSo;t_AuK8JuIYzhyCRvhDjHpT(XZKV?Bb5^@v*3&aj(GcBWV}ow0ue zu&>VM%XY2p!ZR%hTErIYQ6a57%9Dlu)RCGE8f_D%&+SpcCJNSKBzP98aQB3gnvc1xL5w^mX4JoP)&I_RpMQ7tAuRsEQrAC}U&a*5 z6O;}jv&T8J$EB6xZ*FSejZ{y?%>pe591mOHw``NXg`U(WL+e+KaH~i%@8Q^pX&1 ztKi9|9BHd~q^*MN6p0qcQ@}(5@Ro4GdHrgLxmphkB?>Yn`ihH2@v6XTnfY@Fh8>aJ zSNo#F)V><0_SKf~(8TFjhivi+Y=1@4;}s;?E0Jf)uTUGl64;QqXAKL6HL#!l*h@Mz zJ_?9`2?4Pdnb(bo-3ZIIfw*DTTgy~f>#wmTq`(Yo!vmU1#70xVkUD$?e=V(30!@JsT)~LRUK33A8YA`^H`#04WUqN91D<>h8{#!X26&x{wO$Zw zJrip^7i&EiYdt@6U2pldf(f;e(sc6%@)!EtOYDuP%8_qa#)8|iH~Hl9re!L)t($~` z+p!G{af6}Yc5DM;wISlggALq-3cZznbEhFw%+ynMBc%=SM!|s_nFBX+2X5rtH?ni@ zjn26@cHc&m``$)&cpH&^JIZ};yIdsiy~Dltj@f(fxP%CecNyNhCg;72IK3O;ymz_z z-ZeSzU6b?P7o5kw9TR(>JCA=PMq`;-gJ^7(eictB8VSZ%tCHioSMl<^IBW}%)OuqccSHhJ|6WSlP$zb~S^`bCsizvN#1((KhQ z4PIp*gNd0w1{2$Ycx{RB>K1O-EhevSF?scC!K+_0uYS$F`ZeeNHNK&P`#TROu`9ne zx$=LJMgA8t`QIp4{;$tRa^=6dEB|eF<-dJWgvvJz^Ba>Z(PwQmn$eZtaASUBa^*KB zSAHkB@;m0r@3=(w+%r&ZN#~vc7J92G4u3)J`~~s(Ma5y+6o_d-#^Xj8>L!O0A(CK-34;UU=$k?s z&E&v%f}1d5aG=9ZbYMzwV2U{~#T}U9-1WC~$dwxhrmx&!7p6=utcF(AXYoCuM}$SnMK?CoD8AX9?9B1I@AJUAk^B^Q1g*!sI?bE4Uq(z zbl{=Xp+cy2hzPZgjB!U(sG%?KXf$J}b>z)P$Y$?#}Olj`QY3?f0+|@bC6iDtyNp|5RyND#a zkVTplV_hRwjB)+}nfUG^r`^5TN8+$YL=^AI8SE)C*wf275`(=W81V0<#P=2%?2TT* z5Zv%PN_rn5rS8Mo?E|k!_=86SCuv|E#brX^XOD6Gjg@#emczS|dtw^kUUVTqR{)fj zyMr{?T_rnR96MJkplpIZlj2|*UV74PiQw8b=#TD8aeDl|l!nGt_fS{2SfNWRcos;z zq*TJs;0pA*+ZuTlZQ^|wY&5mfBWRP0TM zkp6&&el{-Ywm)LOe}r!Pb7}Y2CFs3M`^+)>2VD6>@A$!1Rj2UFvOzUfspNe8U>1@3 zTL5mwHbr~cHkUlB*HamgFIY^%j&ywm_GBKj+S31P4Y%xsTEo<$(UCg-2 z?g%XL5yBL51PjL_xV%Sr^41Yxiy;&emQqH741#EbLNiJFQ`|`X2Z8rza73We{P82z zICUaIBlD0r((^Wn2w2=CuB+LP$1e=UQN4MMu~Wvf(&a*fQ!!Wlk@oA_#tA8UJu@B_ z!3V2=qi}Vm_+UP!2h*E#8UpIjpkaJ09$oVIJ(ij0SUi65=4vRi$WSEQP^)T}V7bS> zdW3ik4R}a1;4rp88YZpHhC9ZfDR%^8HbRBfC@H-jhsYflkzSAEt~gG-^=`m4*de_7pQx zdrhh6Ji>y5cPxrGRJA)k*2|fin#~97Sj+r)Ek2HoS8*?Ok~m(+GhVvj^RPyFwKoA# zoDeZ&C-8wdK_0R)W~aa!Y5&P46mmi!q&x^Gqd7<(g_D`;ll`elNWG}$dK@p4Pl@*4 zDVF)3di+%8y;CLcohEwkbjIuS2=ASND4r4Fy)(E^&XBz)W9|@okH3ki5h9&eZyO)*vM0 z2Fw5QF9x!YerRAQI{q?3d?rMksai%iO)Q|>;BizpQscB$b7Nrcz{V^GQqqpJ5ou7P zkk{rlEHD{a0ipq3R4H}@JP;_-uNTlbU|0V&jp~z2wnb)*qBdzw&B(l1YEL)gQhQN! z9OL>S6w;Wb{^|oiZKxqGQxqq&D2nSW5VGu<*KDTdY+1b7fto@#n}Y&k4mr4)gWNbr zJh+(?b(dYYLYd%U%p80eGY1BQfCJe4ZFL^Ng?R=q9KwZtU(H?83`*Hlnn5*+Q#s|oNerLepxRRLE1G+(as^!aV0ic~CeMRcG7nw} z&v!icU5P{gN*4N8g8f-o(HFG< z>H9jDD@|3`3(4_%p3JY8C-3Xon6rQZ3CC;6pudthz zL#*Y>e#6{|K=xmbxGXo=e|aVQFBj||R$P%_Krr`-A_S!CI7G+<%iV{11SCC>x(lg! zmy&&2HdlrVOi$ChDrtHblj1H{iXgVV7`jW(1BG%0F%0Y6yQo#}3jK#)BGoN!fe;}R zJY-evS}GLFdV*G&K;;_$`++&{q4$bp9~=zEd2P00030{{R3W|KH1qKN4XArt2eAS83cnLV84hwb7x8 z?>EtzYX#Ugc`Kb2Sn(B1(iN(CqHZQYemt~7Iv!HMwquKyeisDfd2&wl80_(w`8BAcm?vm9z7;<>?WW z>AL10nHJKl{y3uixcAG7+|cdfpF1RG}jN0#1T2Fw?&vCBYYbL*Ny_3rLC=e$A}#f|NmDsN`Z+ z^dt_8p2T0Ys@kP_3Pz84gaRn>RV*Uq4dg1OhOTNdO5qb&(h)*j=)+Pc@zpA5Myg%K z9NTiJK;xnsCK|J)v$1I?aAU3(q*xtDf%(G{CGl6RsvRaM#cj(Z#Vcfki|Uu?{=x=V zL96u!R}l_Gg<0YiyqA3i8v%#d8p3}K;ystvFu=z8A~$#9!sBomU~NSB2+ZuUh(^q}uNCB4OJ(>K{9=?iRge*<8D<^JFzaCdbL)r@}RIeqzfdz56Xwo%U(2?o}Usf398*r3w5InGfiN%BFLuGsSMymH} zviL38_=oJ6?L%pDRY3YdBL{J!T`G?w!0OSNn(1m^EIyOi1d%r>(~Ry9E=6s^k+F$+ zSM`YF&#*Zl(_Kl*E%HQ16Efd_`UH#iiEx(k2@B*;_!03ZdZe%mP@k|1P@fntKz$0) zKJ^SDX-^R&wf{7Hi5)*u{0v1qs-qGAEcz17XO4fxBj(Rp=KEYaFyD-rZ$`{F2ZhFz z+z#_3WWL!AE)3z3y;+Ft%~E7<29Ygk^o5YxzToF0Us$|$qz0y(ul|VNqKq^2o1uP@g#ASj_LtD?NTh8LX`AIfbPX2~ z+t`EIZP@s@g(&34+jgWLs*@1kZa#|NUg^y(W0+fkc8GfhQ6a!C+&B7;WQ3qS-Q3&(0L{ zS@(@QU*m+y%DP3ga*|m&X|i%swsN&4fA=@R3Kt|=f~iK(vlZ8~l@LoB2xcsnlM`)W z7IITEHFH~d)bG&=HG^5U@}f zI~1nY>5r$R?Kx#TUkYwgU^;R-Otgn+?cI-$IC?;q=#_qrwPQ`u2G@qu4H@^?H%6#& zJGJ-hgtqC44v0Yq^TTS6DIMJ?tmvbgL9hwDXz*iJhd;u7Un1Gueq#VrNWrXHIlyaWM!meMUR`j0n(+6sRCA zW{}uLP>>fmNbDk~Z3RwD&Nz!^u3=|PwKJ#M8B>*TeNLS{P87yf>|BSRdndYt36kgf zt}HgYlDi+j86d>h?n2Vv6Rq3CbF{>sY$)%k&udxU(p3@CEWz(-kvmdAqP?g=_GYa1 zmNMkteC6mMx+_PAPb-|Aeg{#1r;MOzs?l8<6`r%WIAIw4j)lSR%!ewBLDaE=L&!f= zX+e)N%yKkGHVop2Dz0o4BE8z2*asr*6WZ)RlzI2Tj}zQpfu^ckqEwhxqQI6#I|ptw z%8W)4fx1DwZfan8cxYarNN!L_aowHg=I)lMKtiGiFaQnPeT6*6%Nr#271lcYT7HRA zzMW6>B)08|$n}(LtAK5awk{@I6FxKr{Cb-F_}h5Jh1W_QWdGhD_FylF)=P<^oin6} zzlQ2!g_h(M6m-{CI$`Pg-KH(!i5*Bay-<+!b~yMSsZ~FrC3+J}^hOMHodwOB0+UV^ z8!oD9YFBD1l?#PjDXrhcg(m0?OdxK!_7@_H*Jw!WPv7U(kVJZ%F4iOLNe+AsQ|G*B73fh*jXI)TJx zKdehXu1h~=;ePH7KqzxRB6B}Vg3H{`969}>BBvjW9MtVVZ+(e19Dp?(z}XF88V=wZ z4j>v1pd`443fM+viL|BG7mc}cFvCLxt|x4*o@E!O7D^26tt+si1EB^3Rp(LJsbII} zhWfzp>`3F_*W@%L!8UjUiRJ^5Gy|RVMRL(VXJRiqTR(AhAH*Z|AU*@ZwpN;nOOVhy znByO8zMihz+)XAiAF7FxIFujS97^oKI`9Zkz>Ycsa@ncHOtA@Xg&~$X+z$;Mi39R5 zMB^}a4B3KUW8qnEKFKLyn{vT9I4I^bIcCVi!gYvvta1ciVYiUt;0V5d!Btoitl~<7 zS6tDclq*Ud0UHZ(BnBb-3?lX!giJ9=a_%6Vdj~#A8HDKwiYv zFy}=JafBTy%xOn*x<|6yr;EF!9kRl@3{`MR93=!DpmbDdej?mphC4XiwFgHm0oS96 zbB;z*94$HLXyc4{v^XOM;dcx+*)iN?$4I9R#{}}jwbwCx=X)&M3mz*T^$ms8hpPE# zJc?daM#lXG41~(c=-%8wL!An8nOxJ^Hdk?I`4OD_2o~iE((2@}ezy?n$0G{IJA=Khu~gPyUQJKWHn98g8VAxO zqK;(vBXP{*GIAOT2~r%MAjaVdb$IR=MdD=?B0Nfpmr=$6HHr@?Ads%*GG3S+ z#&Uy-Z$Bl*GP{k{*HN{drL;Z{DLRfQIu1!bPAo&H!ELlcc6~aVpH|=+D})`iz-j%~ zUAAo3lpBlUEr7&Hyz@!8a=dV$JRT}LUfJ(tq|?fGmPh>GT z(e%`7Vz7*b=qCputD&*%G!2|2Ma*RJhJ9kPyH*EddNQOxSx1SGFi)YHoC?W9xlgr( zFJyYT=rnBj(|9gA&2*$JJ#GYn@KKs8Qt)qonD#;4FTm^aRF4*b+$6vxvPh&qLh zrzvDSO+nI55y#UM^LUz4>5=UeA(p4`Se`=16Ka`VRCy=ec*sGz1>6@*Ov%K=*q&mF z?KHDy+7#PqF}BYNV;crd25Xq%fsio;jf`swnhXz`jJP4GReC!l8swR#mRUmeNRG&5 zYQ+r%-X-I+|LOeILD-hG{rT1BG(F%Xg-n+FA}ftoPZoSEQsQgnC%Q^ zkQuy;xr>@Z0^|_=oOc>9P3gzYk(11ki!?{QFoNni<$8&7J=qg->(x^trW(qSmSB=R zqKcn`4Z!H+u8Y&S~sS1g^Xoe zT&+3YGF*&;Cc$-0+;vUT9-+y&0BSN#5@$2(oK3s|;GWe4Pt21pq{t^j^SE^L=&2s` z!MVf-=c2CXN!6rh?hzeP8}lj#C-w34YGhAtu5fUK^E}aAPc~45NQdv5F#&B$YZD0 zjZk(+Hd%;lqOdwBZL~?WhxFlBut)-wsBjCpRtsHu(LMIW1&H+pBzi7DqFkW<)-q6F zd;NsRkq&PZea07rii(4HkuZoC@j<+Zon9zNOHFm8;wsi4ODu-yi&X*~l_{0=t&OZ) z9hG$m=&R5QG(=)8*8IxZdhEmt5zd8*6MXGNOA22v(FoLC7jmawNEExA6FNlC7wWGj$GpANX(Sbiq3~iJnK=I zqY^jg6(kJBm!A?>u;{#k8}15jUIl8chPe=&S5!!gxL{U-70gQL(p3|RHO^fR3~s5* zqdL!CkR4GqERENuRIk4=Q`=~l*lUftohoxB5E&)Rs}P^75TC1*1#$)Foe1wDKVowg zH{(^IVq$9iy)Z<7ANVI={Ck!ff3J@MMi8Z3U>3cIu7NPAzy*luEUb>>W87X*kGgdS=a~W<9M-Nz1-aMl!(bq2K@F2YfvA>06@>`HNw@9m+ zTPm+=Zt*k~$L*hl82A&9fj_Zv`=^Ranp+|It<6}{&<>TCG`9vz8l=E&Jn`Jd6u6Ch z?lwOrFbroMVn9~xEpfZy({Tw@n=P>{ItMS~Ie1wR+)Ro)S^qnoV{~xFcBhmwmVs+AD;Y1WtGx30tG>z9 zkjwIA%3odC03FsJsrLYq`T=SQ z+*$F!)E|Th4|<`4q<;``dyp9OLB#z*lQACz%SbrCK1g45b0EX|6A7^W9-L7XSAzkD z?SuG~`XMCqLquj&94+yXN#=(PGC#y*eu&Hb5Rv&IPv#0ZNoSZt%^pHW;1A&x_Anb) z5Bn|*<$ajR8z5nramV!t3#CVlOM^#)93SZUDD3&DH}HW{j{;#I1)GRwcgO9a8qzA` zDK%aDx6{+5nqs!0EbkkhV*3WwH8r-e+|XDiP`?%(0rQLgPvIvI)p#sE4N;#~a%(L# zI*MjggG-~e()Z7TWB3+?h{q3eS_zR>DiV`2#cXD34!;wdKvlUkUORo@Kg-8u>{c4s zJp+-RQS8PQZTEZ>v3mxw(|8R&9wGQFB>1dC9IZc_SS}Qs5W!~=L4~(Ny^oi!2W1dK z!p}j%&nbUTa3TbU_;dWIK%zVR`GH7JXYm- zzTSJ@bo+n!h}|F=~kJ1waUx^r0!K90$<_BN2tJAVzt`D zIJBG^Y<@Wql%ZD#ehKNWX4BtllrTs`n3_PtD+brTf?NxjuHnOJ4L0T)Zp<}Oh_0b1 zZM+Z_19OcOm}?BuuOWd69J2=K@-Oa~e<7j%6}}zpxm<-r4WAzV6~34iQh$|Ge-%+z z2s?Px1MhR%uS&Gna@wdmm`3R2(RM%DEE8Xg-Y5%btwXfdshyfT1*FB-nAee2DC;d; zNLd$g;XoG}%NNpCLGcT2yZI8Y3l|z>hFcHO*6XSgj?B)6HniM&HfYwP#Sd7uuAfm= z-PfD@;C}55r2QL2`!|p-Z%Bt08dzws`O)(mSZX-P7}=zArH12#1Mv-RTGg+mov$fa z^e{_{)L5Q&7#b^Yi2J}dg|+dUoYkA`#6d$wSn#kUFyaPcL{yb5u|c137APn+tx#0X zXPIJy!-n{B!;Gr^di2=)+)``xzw6Vz{l&7icc#4exwF;3*5{TR`nEz2)I&ts)A>WvM2LRCb{7u^{}%+z1~_M)$5^jmG!>5A$pK?2VD%s)F3U>I6%l?^YhtDe8L8irm;WMKdKEr0<$1-2Qa}4<| z*B5NKei3z%^GmG4mwY-!755TfMy$1Tc|Cm!59@|H!0@!=w^40XC^w|1HfD2{Oj&&U zW{cqMEu8!oi(l~DV!R}_#aEHW=vM-_uUHQL%D;~v5d6yWpFs-TzJjV#j$aELzh)f2 zrf&dzZPe}SP!t|{-_T<%Ir_d~(f3VM^nHtB;#(xnw~;qzRcot27Rc}0$lJ5u2}b*l zQ~%CH{X4uF1P_*>BHvMB##^+6p75aSdqnGdtE$7SOfG9hoG*S)HmukJKQR0s43%Sk z6a(RBE`b{g3Bu@S{)p#iYiqsg@dO@c4+>G~D3%=29CQvbIwnj$HFI=%-uwuV3#eU(= z{6%u+FU@f#Dm@;3X}ZR>O_Gy$H#vTr z?080?qT{zkI(|Dh!gknuJDp#)3mFnhn5=>lCaWq-sBz2^CR;H47IH#M#&|kQCPEX7 zGg>mi$g3_b#z~r?TM``A~uyhxr*GVdjwYtV_B=`QhPrXS>$ zG^v(E;wG7DoCc93#qd%lUMa*Y6=52W1h-6E@x)Sga9c(;sADM|1|(q}%49q5gNKde zDP0m3qts}o!i^kLD%_~Bq6;@B+wql+3yTqX(QtJD=qrQtsaX;h!c4Z0u5qT@>UTu_I~tFgks2L^1AGk(d?5uzCpjpj8+6G|AhUY|rxUhqCni)UYTHh<=$ZqW zNC5iV8aXl2c7&KaTE;ST3^CG0s@;7=3KrtYosdsrWx1)rX25(QFTHt_+y!Co z(!A*1g+{?HK@<>6bmo@m9BqltW=nL2EIU`QL}$qo8mONxNtW0ZVeZ;IOYBN5v8%}v zyKzhGCcYBojn*!Bw02>8ykr;EuBB=cFyj={Xs0gvd6uJLc%TbK@D=OgjRA}xxrug* zbW<1KO<dAc9lTL{}*_7DRVJ7CXp5|QElM#&=Bt4~E)-xij?}sq= zYnIXW6OGo38x7aFO!i_%>qU*$iy5sKbGJvlHzwYj$5?MU?e*qquXlt=dwVkhVGfPh zn|5f~kg1vBe@qJ*R}OH4P5LY7FFR43y(xAdd%y*`kI*TDrF?&~4o0 zKzx5Ic@U<35SQX0lQC68wO2(H8So(LS6&G*sjD3t%DN;E!6F^PMLNVJ(jf+s4iS7h zMEkT5y#XD(|~0i!et%8DmEsEPy`@{JBdjQp*};*Kg8pRp;%Yv;3P?O9qO`% zo*0U?8_M$GQ1Tf&2Y~b8P`XAKs^1yUmP)vIyau-%nl08e=FqvMgFY!+%9j1AR7t!O z8-`^Z#$+63u}{-EF#U1BIs#P6AmYO@@!`S9^ZN|9*jIctEH<$}fmDwvlt<*P{y29I zN0Bhx|0KsfGkSvkk86(o zk0Y!j?SC9R*?}F8XOVck?1bad58{N8kibaA%NxD@!Fq5cy<(#we#|!$ZvX}RSpuGh zoB)WOz=)k74963^5RvBW6WNO6L}^AEi^Fg%%Q0hV9vtiDK^QAzk!y!(ZayW}|I1AD_3nc#t9Qh<` zDl+y|%lOI7@@W=2E%09)RR z*aq|2Ci9`1#K~z9=9|WiGEFw0jG4#;+0h&6)0)$*8CGXHn5{mIrSm`TQ3X(zKdwQ%4-U)PFPHIrGe&d;QzX*SE2|Ef=$p}JI$VnQDlWC4!qXo(Kck~~05(f}=?0ZQ~M zbN$NVF|ns$BSLMAQn1miU?Wwqkt*0IE7%w)2s2(IL1Ag55t)D)VKz6y>?k9k%B9IU zQAU_!Ho_do2;r7M{f_nNLox7{U=C?^k_wn&XnSD8ibODoN70;U6Q0dYc(!ap7k@4? z=v*@V=ORLL#o<3Ua`?|R4F9=!_|L5{{LkTPof9$q=ON5_QGqef92oQH=$J=G$2@s- z%#$29FKYOo%k?`qD)Q$e)cH{g&NnMKpDH+?DmY(OaK1SF=Mxk*{O6O{WoB5wq+g)s z%QO@p46+3T5sSV+R~-~&Um!VWfv|W&%Z-IBvKLBp7E&n|VwKsVa}ij1xfk2WTQSK+ zY)!EUojH5PUxeiidr2@x3B%&_8Hj?l84@l?Xq#LzC%Kp}`xe7xpM)vFd`^o6X%`F9 zE+*2lFuRbEzECphg#-gXx%@9E)pMtU(EXIdar4xGZ+#V3$F9_;NIJTS~

#z49WJAZ<+AXo7#j;!QcW(2I>cMz5XGJGbj64X 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 g=b$gDoxt zIoORG$?A;D93%7a7Gxnd0+I^~=WP&=IwDqTVBjlI(6vg`?O~n@t5T_zTxrFWe?}tf z&?4&O;<5tzw7YNqD89I&^9*HOusaVtR23cn0?T&=$#)Gx&gs*!$xErsR%QeyVj$uilsMTXoaFJ=JC zpT;gMMS@OJbYNj#r~N)?j7i0XnILEzMXU1vXqx&j#BeK>;X=33A1iY&8EWN+$4l4< zY#O0@Rgbwr2UXWGBO2I^qL6ffj}(xJ5Ut5>_os|k!ViAwQ-{7$Yd#~~`1@uXDzftS^T%OQ3DX~R>z zYig6I8O~i8H~l zZ3%enEp#V!!~O~x2A@Fe*(;NZrKUdN%NY2fcO1^D27U?#l%AuIF?&qDi|8rZF{zX~ z#(sHM!k55YuLO2_dqW9k`eHI^eH(Gs_)d}oiS$E;KE^^UucdnQ=B zixQ5vY8Y-zvQvzixnIZ3dp(Nx(J|&CdCfyHJspil!f}itGv8RCi}g9cBrW#n7A)!u zm324Ddz0lt?UZw9f{M{a!$f8~Hc5%~OcE=~EVREAMkfnMN#Tua?LF0I?LQb^ygfz8 z%}!wrTnCvh^b|`u$|y2h=8qKnLMK0&{5ZF_NV+s=f_Qt*+Ad#^dgGe(>rN((h$u26 zu$P`_CNNt^V7^pHKsoH6o@fSkCZs|cNeA{M&!V3e1;yNe7+PgVlt+ookD5bY*j-#I z!2CkgV(}9gedI}b0Im+!ihHjrI4yFk0k+?U4=p*n80@CxSCF}bb-|R8RF$8iIMO^y zP}g$S7W^)Mu&3)ChoT!cWN%PAHVk5F*fUn(3k(OSUApYP=e)e`hw%wDe;lJ0VRCf= z6P^jflhfrUfLpt#F+&7O5woYUcH_xqFUA*At@*kl);*+z_Du6 zPQt6u$UC^FNmrnPbV)J~v2&&3VD@p-hq-DS#~owksDmic=E>1Q!Wg9>#N!e0Sh!*usIAo*PygK5j8Gbx^l`K>X8~01Nqs2o2%?G;l~1T4 zIx9y8(hQAc&TV9jjE%Bdl4UgIy)}RG(UKiLnBteT+VSCj8r@Cm=WIM0vE&3voxo4x zTg8F_7_D=TV=&l{{QvwGUrRzEt7Nh)vK zKntJ)umLy#?B6t{C_n-r_03c&0+ax%02P2HzzB%<|Brn2Fc5;STS4zcfPBrC7U8V&O) zlHn)BugipuUVZ_+S%Z&ou=zb6&{v0CAb95@iOvX0sHH`U6cjJApvfB(0YnNmvS0El zcUy=V1BFDW2*q9*#t5Q_WGRSx8DV&9>i2w&3{GtdOSE4o-9_7L1sX6sc`M;ijI3J2 z3#u&Wssx9bKwLRFAqJz|Tu4mMXbcolz+CSEE+UD=9y3Mc`p9HbJ^j4S8>!c^(Q8$;492vcDxbPf`G4${O8sthg-j=t)J4P39Fe> z)jyi-Sd67wOOCe?Fl{I)@>?ees3wI_xQbLV0Uf;;xd7UHad2OQj@g!0-`WTnGjQI> zR8eR>dhoPhaPGxJ3s(w6Txjt-Ce_lZQfdg+0)hhHPQ)Q68WrfT8n7 zh2O1E7X~;VI${Gub#X#d5~>OkQ18%sms2sG&`yZ}?;r!3f|>?PNuvkQ%@mGcX@off z5D`&OdYU1~jIIio{YzxJ%ZZlivVUt=zjh62I_H3v+I)!c5r?9S>|>$aG*9JY$|K_f zSy8(pDvj_i8gV)wE{GK6iI`NNA8_c(kndw?c#Es(=cV^ z?r5NRH;AN)|A4_cVYYakAHp+8gPX!7x}0JEA6+ua9n~v3t(g&ud`viCsXhh4zv@+ zbX%XrV(=wrUjKs2aY4{}-H}Ul&!@qskRkO~sC48p>Xfm3gyWg9e3dSfYBEEgU{*@a z4sON8v&!T*=zsh8dE{U=KRDrv73f{7nL53L@BU%r`=fqM*s_O6sYCSZcbklkk8sJ> zUTtSZrRgLCIqOV5^*%oi3U`5sPM!qSxTl<}q*_z$;)@iR(=qS-^Y({kWbQ$0HTzBu z=Ii2UOV3hSP4gp;Y7%;?Ex?jqJu7{2SA6tatUkcKQfFua>>TrQ6+7&Tw)kl6EEQFc zB)OCjbmdUPI8|~ohQh5GF!qC-}qHb|vGKk-)Fm_oo7Fhvl z#X4Z1n;#BQLdMT@bz8L-xWQUlT&zyc&w*8i^?0xdRwYyxWeIEUkNcFyMY!|!oM`nP zFCT8qa&!4%=J|W1^R|epBruonOie?fdD=}UGLp{ocb8|Spfk)n_GOG*y6bvmQR}69 z1rA%XW=Mryl2~GeyDFvg95LDD9heffjwct5-Ih1sU>(KF!jUydWm@VuJ^;t6x@BSn ze?#fkS-|@;cxvlS9CM3MW(CgZWL=LJS=p3wjda&Z1% zl;fz`xpioFaEt{^dV|T$?qr0T%O3#eIUY6ko;#}+Icg0Ccbnm}w>y=`7ec&~_yswd zo_^$K>%58Qulh2dblG?fi|j#L?zEH3KcCJ=Z_7XZ*hnYjKi9tusHWMPe=rq!8fS;L z|CRC%rJu*vlg_8rsi`1w->2OoKKY&g*gD#2?Nn#_=9!Uo%(m+!}`U*j}BHemf*U=M<#q%v4H zLyA8uQ;x;v{Lea1;VP!V%enH+6U?-^$&An;ggcw$k&nHE&y!P~M6Dhg+@m^Cq(t#{ zmJEiBt*66~m&RDwd36^?7KXc7*%tqAjjxG_FM2hXl)LA3VYl<#i@D4hwa9d`Mg|XW zQl{}z**i(I`{$(TRJ9|!+HAc$=t3vb5lhH}?+tT!E4SPk9L4K)G}|lf_1%#(bJA6v z(}%a@aSJO3892KvPbvIUn{r=&ed~JXww0d}S3j2&x7R=7`FNbd+m_ITd1^x-)I_!U zBABn>Jbjy+)NX%dMRs(x9aJ^IFPpq6ag7 zgKZf-gYSQ3 z?igb**O(czSVF0kN~t7mLZww3l_iBz5|Sh&OR118LaEUIopi4`$9MRD_c=H9JoEE@ z@BS?_b2aID1nY7s%x3w^$iYFat2YjPUvt+WR(W^XfxM`#o`!-0Q3a-*Znvf^aJxUH z^&9KS70D6Chcw2F&npQjzT`jIm|0_cO}S8k)uOg2A+5%Rz3@lm9ZN1Z&luu>^^qW8I#I2qo*se^FqU^vcvWmo<8|tcT~rIs?%i$ zN6)+$Mc?n8YVkXH@R7sy1)jAX5nfHP#j~bWuUeTR{rur%*XPO??~Dun;^ModJ}vz7 z$yf6>P(_7s@GqfzSd@*XzY)*=!s$p_oeUeAGePqG&%}*R>myT9; zmOK7t`NvZfKd$xlz|u1-3xeD3RLYFidARkKaR#N}RAs87iQm|HVfo=V7U+L{@$yI5 zmQ4wV2djB!mh0bYhb~p_oUhm5*s0T3?0;JKwY$C5JvYm`Y+|QUw}JQK+NYD6yy~C1 z7*zP_`?no!sg=pl@~SE`4YH)Bp4;*C>9HRR*4|ow(tp8%dG&ffO5g4d{Web^-#NSH zeTs?k^7$n^C2e`FO*Ox=ejWA=usL|6J>i~1Uh3QMY=u*vxv$G^ESK##>f6D*cwkva zb=%rBX~*@)4zuh0)~MNh4*%qL)OL-f(o@0lT1D3znoqAT({9bKOwhOTOsOfe-PiEr zRL7y1%;`o`@6Vj-lJvDONKCOIBartH;s)p`2e=f3%a9 zSrSmT`EzDg(dO~h{Ofu44UY}1Z+AbvS#;l`wq)}n*>O4tmbPq?pOg1j=)J>&xo22R z2KC#t(beTwEZ5aLls};8DLq%XVz?z_nwubrBB&@i*RJ*|z(vJ}&lo-F)z+pTk%QwX z%PzQ>Zw@KG)AX^~+!u30?VHI3K%qG^u zS~+bB<;MA{5VL7VQf@b$d%15!o6VC|GsQwK2VXSON;F#WJuIT3`=?x&*aV}}+*4Dm z&n}hnwM*-&IzIosv_-ahvAEv2#2;T;sXtUMZ#1_09=6&sacJt}xmuCxiJR;awo$eT zLOQH;TH>Vg7BfCt(4TMg>4>S|JH2ynx#X?5>+yT~5yP;Z=_7UJ_G9wDel1APul^;0|H7s1lAp7ggD`By5O@Y&oeKC2 zX3yGmt?wGSwMvn%Ur&$MZMvE1SUqXi$OqT8)hFkhY%mzJS)tfE*gsD@Bji?2Q-ieh zMVpu)<)^tJS67YOyYIYf_}LTFEzSoG+Pj-=rN7GT!IP(#j+Ae2H}Cpr^y~!tGduOC zf7;Jel@Y#Pbu#dUi>i+d<_aQD>N%T^+{cCNwpPf40 zH{Mjt(n7uR-B<0~x^L;XS@XoqI3`0@x;9^tI)pV-X9aRqX}04I2Ih~{Ha#;k&*HJ` z5*726L)HbZQQE7pYwei*Lp1Uw#74X_yP3M*)I(BZI!9{kL7T~k&6rgE$wXE!qHf1cjINIgSz&^3=I$OwRb13*%_;=Dkm5H!`61sNfqx! zS^5*Udj(DkQ56sCKDu;AVD!dIgIVKaY?D^+a@eV<9O%1fj>FU$n&$eCGDhj`JNJ*| z`#N3O8PXODrNvVBz2c3M&z!)NK2)1DWU`swhB@=Qly|7un!G=qF}p2!m$Ij(#2(BP zOTu)qgN?j7&OYxBZIDbC8#idAV#r4S!jU#@hrBzsRR#UM|A1hsgh5PDv1LZ-C6&t4 z_KQYVCsP-U=Q)QCtG5}HzU&{S^R3ta%=Q|)^|P+wjF+puqrwMWzLFcryf$;ZqRc1e zJ*7zzpAzCCpJe!`zO!@n9v(jCiejcrW{mW{(^?-&R8-%d8?5XqH+rpH^x<;-CJH6N zFz(^=1$Jv<{6jngl3z${34A3}Vqqc46mxnaYK|6!G_oj67|ILh&ZL*mn*2DhLn=d~lW7zbTd7~?-Cjv3*;_n@fy<#h}N9xqQ4QGd0d^@mFBR2j?kBU}SGiS^R zUs=%Nwtk(PJ!AE%h7D1fU*lc43I^9-eS7rm;kjdm8UP>YEgxy0lICI7b>Y0#^S@a?<{H%mjdHg)jF|x0FueISr+r4}HF2;O%b|vDP{L3LL{)sc5R&q4OC9=|i z-(~qM`P<%^C0lux84;OJA9Nl*y!+&`Rx1Us*1~sXD^uc^7g^Zbx8+QROH#K4QdM7` zvp;8VWfTvdxA?%td51=P^3ODF({-cf)KAI2@JXg9)mBd>a%+3%qeQQ9A6mK$a_U_y zJ;v%3uc%DCYEqQ&WI?@3tn{$ zG18B9iJea`v@8BftNB|qsoSHPQW?pv+oq$2eP~kM`qiby>^Zl(HEf=DJGLGe`}*(!FWFYR>Bp4j9I|t$t+)68 z7{0}GYwL$EU#gxx+IhBOcdSj*h=jkF3tJhqo(dYsAh!K&R+&ugSvQD%8@rhqs(2SmP~$V9(VTecDZF1F6tFpu}Od0;f4@XCL0gq3mxzcs$jtrJg@87kl z91f9{Zh87=IzVFJO9v<7K$C&q``SJ%M>^G=2($E;!`cAS052VfgH4=-VKh3I&v0h+ zkpBDyCDII9jLFX%VptM9ia3gu3JC=z40gG=un1lr1H!=ev&is$A%@YM|H$Et5|^2>Ho5oZ@YC^8;uwwZO5xI}PE<$c9}|oI3u-zM@{VG|puur~xqzKT#)r`Z z@hCL5JBLc+Q+Td)W>4=!6qn0VJh2b#tqTp5@JlOu$Aa+#;+?4sCY#0dK`O#4-DUL{ zFkZ)a3p~^Ockab>fKL?0$$WPo#Vb-llqg11%6}c=^V9_Cte+ zWiWfb6qYETo~Md~I;7EnMHmKuh>Qe3a-tKJkH$^Y7az<8t2Bd34dy~d!kc;Ly?&4kKE;#ALOM>^>I?=SBDw(t#aEE8 z56OwbI6+IebDC|j7qB`(O1y+uGRb*tu9Fj)sT&Jy$2UVp$by121*b+@4mpuSE~3V* z6UQ=SFl>n&5g1lO4&*wLO4y#YrFab_1_wAi$4hv;l^n>UyL-~nDa@@vI)DPF@DY=U zRY41rAWdOCKnjP-<&kiGH*A$^0&lb)PIU0XQRG}cmD%%gL&Owu|Hje`DexT!us295 zGQ|EO$B}vBoMf%44PqE30YvBzM27hUG8#UaqdFRw(5hkz_+kW<6+E>{8K?pl#D=gY zQTfnh{V4~~471%CR3^ohPURq@CVj{c_0J$-E66Lns?a-vrjk*KzY8U8_?-?JFYxsM zZDQF@oz_2>!)3d0={$5$)+v;Q=7EfRLEN#uvcgY(3nefYI-kwq_f*23pHZUeHPEc0 zsh~tp3{$`{wk|?4P#v$m)Qz(%z`my7F>wDxWUM|ffx#R+8BYJ1;orX^EigFc=h8dy zdM-=}Pb#}aO5&j=mipwUH5*)m3HfD$h(s8cbGaW9YI@dHif>Lr1vZ8F!Y5Nf0Xd2S z>SrS-8PL+cc^|0iEjTb z%3&Zm{0m9mV&F&}@ZeXrd*Po%G{e>ZmqT%*qsxAI{o4yEuz(VlLA=#6f0D6aq2mV4 zJyN!l-&;TZ0$wNZ@G0j(_W(Q!+lxh#yZy%TRii-jPM~?bl!L@2NoLHYGwD$P~KYNw}$=%_70^7%nV2dZ|4B_MGqu;Q338 zi2*RWf`kVB6%YD-^klO%bO*nJb?gU7M|jP#F)4)RxO5ljdP(x)#tq?NI{`Ed(ktFQ zwhuzXNK*b$!|1G2P|z+x2Y^p(#v@Q5aDGQB$##o?eY;Wuwp;c93$K4UO(Kg&b*58( zM-$mzll6|(g|!e$24jf3Rcp=hG+|vrRoWK%bWaIrx`)8T@NEctNnZlGfDBjHjFSY$ z8t??XqA%F>Wl$hTv(PKZOI0_S1`vnBe2OoK?>Q(CNg>)Bz*d_9{m>l9^dOSRSRp`S zI20!akH#iz{VSagR^>v>v_Z_^?Vq@xgvVexquU2Dy+hYyVHq(F{0Z;jX=h1T!edKx zxYRA~e7*}-P4fXbMP!;7cJVd><_LA?_l_VWRdjk@ta(v=F7yCNeLUSg9RU>XE|Rj& zI&Z&_0jv&9q7~kk_QRq$QPG<-45eiiw_zvXEkqCAs@3iN@#q|M(*HOnar9;|XTCm> zS1L6KmurNv^Pk>?0g24|(`717v_K100FZqZgqYI+`Ex0kh+t)Th@>tFcv}LU; z>&KpkS$g+rKI@E_mF0*lmVT6&Z8w5F961PWo(tÐ3CejF;+9IAb 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 YK(0ui05@-8l)- Date: Mon, 13 Mar 2023 12:08:19 +0800 Subject: [PATCH 88/96] fix: don't allow empty string in server_port schema --- apps/emqx/src/emqx_schema.erl | 34 ++++++------ apps/emqx_statsd/test/emqx_statsd_SUITE.erl | 58 ++++++++++++++++++++- 2 files changed, 73 insertions(+), 19 deletions(-) diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index a673fa898..914ad40a1 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -2608,7 +2608,7 @@ non_empty_string(_) -> {error, invalid_string}. servers_sc(Meta0, ParseOpts) -> %% if this filed has a default value %% then it is not NOT required - %% NOTE: maps:is_key is not the solution beause #{default => undefined} is legit + %% NOTE: maps:is_key is not the solution because #{default => undefined} is legit HasDefault = (maps:get(default, Meta0, undefined) =/= undefined), Required = maps:get(required, Meta0, not HasDefault), Meta = #{ @@ -2661,17 +2661,18 @@ normalize_host_port_str(Str) -> %% NOTE: Validator is called after converter. servers_validator(Opts, Required) -> fun(Str0) -> - Str = str(Str0), - case Str =:= "" orelse Str =:= "undefined" of - true when Required -> - %% it's a required field - %% but value is set to an empty string (from environment override) - %% or when the filed is not set in config file + case str(Str0) of + "" -> + %% Empty string is not allowed even if the field is not required + %% remove field from config if it's empty + throw("cannot_be_empty"); + "undefined" when Required -> + %% when the filed is not set in config file %% NOTE: assuming nobody is going to name their server "undefined" throw("cannot_be_empty"); - true -> + "undefined" -> ok; - _ -> + Str -> %% it's valid as long as it can be parsed _ = parse_servers(Str, Opts), ok @@ -2816,20 +2817,17 @@ is_port_number(Port) -> end. parse_port(Port) -> - try - P = list_to_integer(string:strip(Port)), - true = (P > 0), - true = (P =< 65535), - P - catch - _:_ -> - throw("bad_port_number") + case string:to_integer(string:strip(Port)) of + {P, ""} when P < 0 -> throw("port_number_too_small"); + {P, ""} when P > 65535 -> throw("port_number_too_large"); + {P, ""} -> P; + _ -> throw("bad_port_number") end. quic_feature_toggle(Desc) -> sc( %% true, false are for user facing - %% 0, 1 are for internal represtation + %% 0, 1 are for internal representation typerefl:alias("boolean", typerefl:union([true, false, 0, 1])), #{ desc => Desc, diff --git a/apps/emqx_statsd/test/emqx_statsd_SUITE.erl b/apps/emqx_statsd/test/emqx_statsd_SUITE.erl index a203ef7d5..bcc710050 100644 --- a/apps/emqx_statsd/test/emqx_statsd_SUITE.erl +++ b/apps/emqx_statsd/test/emqx_statsd_SUITE.erl @@ -33,6 +33,26 @@ "tags {\"t1\" = \"good\", test = 100}\n" "}\n" >>). +-define(BAD_CONF, << + "\n" + "statsd {\n" + "enable = true\n" + "flush_time_interval = 4s\n" + "sample_time_interval = 4s\n" + "server = \"\"\n" + "tags {\"t1\" = \"good\", test = 100}\n" + "}\n" +>>). + +-define(DEFAULT_CONF, << + "\n" + "statsd {\n" + "enable = true\n" + "flush_time_interval = 4s\n" + "sample_time_interval = 4s\n" + "tags {\"t1\" = \"good\", test = 100}\n" + "}\n" +>>). init_per_suite(Config) -> emqx_common_test_helpers:start_apps( @@ -55,6 +75,33 @@ set_special_configs(_) -> all() -> emqx_common_test_helpers:all(?MODULE). +t_server_validator(_) -> + Server0 = emqx_conf:get_raw([statsd, server]), + ?assertThrow( + #{ + kind := validation_error, + path := "statsd.server", + reason := "cannot_be_empty", + value := "" + }, + emqx_common_test_helpers:load_config(emqx_statsd_schema, ?BAD_CONF, #{ + raw_with_default => true + }) + ), + %% default + ok = emqx_common_test_helpers:load_config(emqx_statsd_schema, ?DEFAULT_CONF, #{ + raw_with_default => true + }), + undefined = emqx_conf:get_raw([statsd, server], undefined), + ?assertMatch("127.0.0.1:8125", emqx_conf:get([statsd, server])), + %% recover + ok = emqx_common_test_helpers:load_config(emqx_statsd_schema, ?BASE_CONF, #{ + raw_with_default => true + }), + Server2 = emqx_conf:get_raw([statsd, server]), + ?assertMatch(Server0, Server2), + ok. + t_statsd(_) -> {ok, Socket} = gen_udp:open(8126, [{active, true}]), receive @@ -137,7 +184,16 @@ t_config_update(_) -> ?assertNotEqual(OldPid, NewPid) after {ok, _} = emqx_statsd_config:update(OldRawConf) - end. + end, + %% bad server url + BadRawConf = OldRawConf#{<<"server">> := <<"">>}, + {error, #{ + kind := validation_error, + path := "statsd.server", + reason := "cannot_be_empty", + value := "" + }} = emqx_statsd_config:update(BadRawConf), + ok. request(Method) -> request(Method, []). From ee2847dcd916c56135bf5c1c996a6f77102d402f Mon Sep 17 00:00:00 2001 From: Zhongwen Deng Date: Mon, 13 Mar 2023 14:33:51 +0800 Subject: [PATCH 89/96] test: make schema test happy --- apps/emqx/src/emqx_schema.erl | 2 +- apps/emqx/test/emqx_channel_SUITE.erl | 4 ++-- apps/emqx/test/emqx_schema_tests.erl | 5 +++-- apps/emqx/test/emqx_session_SUITE.erl | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index 914ad40a1..1894d7fb5 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -2664,7 +2664,7 @@ servers_validator(Opts, Required) -> case str(Str0) of "" -> %% Empty string is not allowed even if the field is not required - %% remove field from config if it's empty + %% we should remove field from config if it's empty throw("cannot_be_empty"); "undefined" when Required -> %% when the filed is not set in config file diff --git a/apps/emqx/test/emqx_channel_SUITE.erl b/apps/emqx/test/emqx_channel_SUITE.erl index c3f27269b..6dd389350 100644 --- a/apps/emqx/test/emqx_channel_SUITE.erl +++ b/apps/emqx/test/emqx_channel_SUITE.erl @@ -1243,8 +1243,8 @@ session(InitFields) when is_map(InitFields) -> ), Session = emqx_session:init(Conf), maps:fold( - fun(Field, Value, Session) -> - emqx_session:set_field(Field, Value, Session) + fun(Field, Value, SessionAcc) -> + emqx_session:set_field(Field, Value, SessionAcc) end, Session, InitFields diff --git a/apps/emqx/test/emqx_schema_tests.erl b/apps/emqx/test/emqx_schema_tests.erl index e1ac1874f..a0d264662 100644 --- a/apps/emqx/test/emqx_schema_tests.erl +++ b/apps/emqx/test/emqx_schema_tests.erl @@ -455,10 +455,11 @@ servers_validator_test() -> NotRequired = emqx_schema:servers_validator(#{}, false), ?assertThrow("cannot_be_empty", Required("")), ?assertThrow("cannot_be_empty", Required(<<>>)), + ?assertThrow("cannot_be_empty", NotRequired("")), + ?assertThrow("cannot_be_empty", NotRequired(<<>>)), ?assertThrow("cannot_be_empty", Required(undefined)), - ?assertEqual(ok, NotRequired("")), - ?assertEqual(ok, NotRequired(<<>>)), ?assertEqual(ok, NotRequired(undefined)), + ?assertEqual(ok, NotRequired("undefined")), ok. converter_invalid_input_test() -> diff --git a/apps/emqx/test/emqx_session_SUITE.erl b/apps/emqx/test/emqx_session_SUITE.erl index 95d94707c..21d8f0a2a 100644 --- a/apps/emqx/test/emqx_session_SUITE.erl +++ b/apps/emqx/test/emqx_session_SUITE.erl @@ -471,8 +471,8 @@ session(InitFields) when is_map(InitFields) -> ), Session = emqx_session:init(Conf), maps:fold( - fun(Field, Value, Session) -> - emqx_session:set_field(Field, Value, Session) + fun(Field, Value, SessionAcc) -> + emqx_session:set_field(Field, Value, SessionAcc) end, Session, InitFields From cec399c60252f771e130521a621689318d3daf72 Mon Sep 17 00:00:00 2001 From: Zhongwen Deng Date: Mon, 13 Mar 2023 14:44:49 +0800 Subject: [PATCH 90/96] chore: add changelog for statsd.server --- changes/ce/fix-10119.en.md | 1 + changes/ce/fix-10119.zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/ce/fix-10119.en.md create mode 100644 changes/ce/fix-10119.zh.md diff --git a/changes/ce/fix-10119.en.md b/changes/ce/fix-10119.en.md new file mode 100644 index 000000000..c88363869 --- /dev/null +++ b/changes/ce/fix-10119.en.md @@ -0,0 +1 @@ +Fix crash when `statsd.server` is empty diff --git a/changes/ce/fix-10119.zh.md b/changes/ce/fix-10119.zh.md new file mode 100644 index 000000000..31b233c04 --- /dev/null +++ b/changes/ce/fix-10119.zh.md @@ -0,0 +1 @@ +修复 `statsd.server` 为空时启动崩溃的问题 From 80205d970496f262bf977783d42c5646ca602fbf Mon Sep 17 00:00:00 2001 From: Zhongwen Deng Date: Tue, 14 Mar 2023 10:54:05 +0800 Subject: [PATCH 91/96] chore: apply code review --- apps/emqx/src/emqx_schema.erl | 2 +- changes/ce/fix-10119.en.md | 2 +- changes/ce/fix-10119.zh.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index 1894d7fb5..6f935f1e5 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -2818,7 +2818,7 @@ is_port_number(Port) -> parse_port(Port) -> case string:to_integer(string:strip(Port)) of - {P, ""} when P < 0 -> throw("port_number_too_small"); + {P, ""} when P < 0 -> throw("port_number_must_be_positive"); {P, ""} when P > 65535 -> throw("port_number_too_large"); {P, ""} -> P; _ -> throw("bad_port_number") diff --git a/changes/ce/fix-10119.en.md b/changes/ce/fix-10119.en.md index c88363869..c23a9dcdb 100644 --- a/changes/ce/fix-10119.en.md +++ b/changes/ce/fix-10119.en.md @@ -1 +1 @@ -Fix crash when `statsd.server` is empty +Fix crash when `statsd.server` is set to an empty string. diff --git a/changes/ce/fix-10119.zh.md b/changes/ce/fix-10119.zh.md index 31b233c04..c77b99025 100644 --- a/changes/ce/fix-10119.zh.md +++ b/changes/ce/fix-10119.zh.md @@ -1 +1 @@ -修复 `statsd.server` 为空时启动崩溃的问题 +修复 `statsd.server` 配置为空字符串时启动崩溃的问题。 From 0738444da9ed1491db0e5f582aae8c2ae65b1b38 Mon Sep 17 00:00:00 2001 From: Zhongwen Deng Date: Tue, 14 Mar 2023 15:39:50 +0800 Subject: [PATCH 92/96] fix: stop port apps when emqx_machine_terminator shutdown --- apps/emqx_machine/src/emqx_machine_boot.erl | 15 +++++++++++++++ apps/emqx_machine/src/emqx_machine_terminator.erl | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/emqx_machine/src/emqx_machine_boot.erl b/apps/emqx_machine/src/emqx_machine_boot.erl index 4b3e5ea7d..82b3d602f 100644 --- a/apps/emqx_machine/src/emqx_machine_boot.erl +++ b/apps/emqx_machine/src/emqx_machine_boot.erl @@ -21,6 +21,7 @@ -export([stop_apps/0, ensure_apps_started/0]). -export([sorted_reboot_apps/0]). -export([start_autocluster/0]). +-export([stop_port_apps/0]). -dialyzer({no_match, [basic_reboot_apps/0]}). @@ -61,6 +62,20 @@ stop_apps() -> _ = emqx_alarm_handler:unload(), lists:foreach(fun stop_one_app/1, lists:reverse(sorted_reboot_apps())). +%% Those port apps are terminated after the main apps +%% Don't need to stop when reboot. +stop_port_apps() -> + Loaded = application:loaded_applications(), + lists:foreach( + fun(App) -> + case lists:keymember(App, 1, Loaded) of + true -> stop_one_app(App); + false -> ok + end + end, + [os_mon, jq] + ). + stop_one_app(App) -> ?SLOG(debug, #{msg => "stopping_app", app => App}), try diff --git a/apps/emqx_machine/src/emqx_machine_terminator.erl b/apps/emqx_machine/src/emqx_machine_terminator.erl index 314b8c705..7120cc19b 100644 --- a/apps/emqx_machine/src/emqx_machine_terminator.erl +++ b/apps/emqx_machine/src/emqx_machine_terminator.erl @@ -87,7 +87,8 @@ handle_cast(_Cast, State) -> handle_call(?DO_IT, _From, State) -> try - emqx_machine_boot:stop_apps() + emqx_machine_boot:stop_apps(), + emqx_machine_boot:stop_port_apps() catch C:E:St -> Apps = [element(1, A) || A <- application:which_applications()], From 4b46c35e74fa7f8ab2c093a9095b7e4f5891278f Mon Sep 17 00:00:00 2001 From: Zhongwen Deng Date: Tue, 14 Mar 2023 15:53:32 +0800 Subject: [PATCH 93/96] chore: add changelog --- changes/ce/fix-10132.en.md | 1 + changes/ce/fix-10132.zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/ce/fix-10132.en.md create mode 100644 changes/ce/fix-10132.zh.md diff --git a/changes/ce/fix-10132.en.md b/changes/ce/fix-10132.en.md new file mode 100644 index 000000000..ceb617d11 --- /dev/null +++ b/changes/ce/fix-10132.en.md @@ -0,0 +1 @@ +Fix `systemctl stop emqx` command not stopping jq, os_mon application properly, generating some error logs. diff --git a/changes/ce/fix-10132.zh.md b/changes/ce/fix-10132.zh.md new file mode 100644 index 000000000..36811e1bf --- /dev/null +++ b/changes/ce/fix-10132.zh.md @@ -0,0 +1 @@ +修复`systemctl stop emqx` 命令没有正常停止 jq, os_mon 组件,产生一些错误日志。 From 907c2ed4239c62c9ce951b2be52396f2880e3ebe Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Tue, 14 Mar 2023 08:54:54 +0100 Subject: [PATCH 94/96] ci: fix schema.json path in spellcheck step --- .github/workflows/build_slim_packages.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_slim_packages.yaml b/.github/workflows/build_slim_packages.yaml index 273b63b8f..e18a1319e 100644 --- a/.github/workflows/build_slim_packages.yaml +++ b/.github/workflows/build_slim_packages.yaml @@ -82,7 +82,7 @@ jobs: name: "${{ matrix.profile[0] }}_schema_dump" path: | scripts/spellcheck - _build/${{ matrix.profile[0] }}/lib/emqx_dashboard/priv/www/static/schema.json + _build/docgen/${{ matrix.profile[0] }}/schema.json windows: runs-on: windows-2019 @@ -218,4 +218,4 @@ jobs: path: /tmp/ - name: Run spellcheck run: | - bash /tmp/scripts/spellcheck/spellcheck.sh /tmp/_build/${{ matrix.profile }}/lib/emqx_dashboard/priv/www/static/schema.json + bash /tmp/scripts/spellcheck/spellcheck.sh /tmp/_build/docgen/${{ matrix.profile }}/schema.json From 27d03770fee138f79881a58c4fa96778a88a9cd6 Mon Sep 17 00:00:00 2001 From: Kinplemelon Date: Fri, 10 Mar 2023 17:08:29 +0800 Subject: [PATCH 95/96] chore: upgrade dashboard to v1.1.9 for ce --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2f7ab5244..998175eea 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ export EMQX_DEFAULT_BUILDER = ghcr.io/emqx/emqx-builder/5.0-28:1.13.4-24.3.4.2-2 export EMQX_DEFAULT_RUNNER = debian:11-slim export OTP_VSN ?= $(shell $(CURDIR)/scripts/get-otp-vsn.sh) export ELIXIR_VSN ?= $(shell $(CURDIR)/scripts/get-elixir-vsn.sh) -export EMQX_DASHBOARD_VERSION ?= v1.1.8 +export EMQX_DASHBOARD_VERSION ?= v1.1.9 export EMQX_EE_DASHBOARD_VERSION ?= e1.0.4 export EMQX_REL_FORM ?= tgz export QUICER_DOWNLOAD_FROM_RELEASE = 1 From beef7bb0e7f20314e588dbc7d91536ecb06bff10 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Tue, 14 Mar 2023 10:39:56 +0100 Subject: [PATCH 96/96] chore: bump vsn e5.0.2-alpha.1 --- apps/emqx/include/emqx_release.hrl | 2 +- deploy/charts/emqx-enterprise/Chart.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/emqx/include/emqx_release.hrl b/apps/emqx/include/emqx_release.hrl index a79389ecb..cdf2eefa7 100644 --- a/apps/emqx/include/emqx_release.hrl +++ b/apps/emqx/include/emqx_release.hrl @@ -35,7 +35,7 @@ -define(EMQX_RELEASE_CE, "5.0.20"). %% Enterprise edition --define(EMQX_RELEASE_EE, "5.0.1"). +-define(EMQX_RELEASE_EE, "5.0.2-alpha.1"). %% the HTTP API version -define(EMQX_API_VERSION, "5.0"). diff --git a/deploy/charts/emqx-enterprise/Chart.yaml b/deploy/charts/emqx-enterprise/Chart.yaml index 8474a00b0..4b5382090 100644 --- a/deploy/charts/emqx-enterprise/Chart.yaml +++ b/deploy/charts/emqx-enterprise/Chart.yaml @@ -14,8 +14,8 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. -version: 5.0.1 +version: 5.0.2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. -appVersion: 5.0.1 +appVersion: 5.0.2