From 637926dcbb6b607fb91eed9be2f8a7169c7729c3 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 10 Nov 2023 13:58:25 +0200 Subject: [PATCH 01/46] Initial draft on frontends management --- docs/administration/frontends-management.md | 71 +++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 docs/administration/frontends-management.md diff --git a/docs/administration/frontends-management.md b/docs/administration/frontends-management.md new file mode 100644 index 000000000..a311a326e --- /dev/null +++ b/docs/administration/frontends-management.md @@ -0,0 +1,71 @@ +# Managing installed frontends + +Pleroma lets you install multiple frontends including multiple versions of same frontend. Right now it's only possible to switch which frontend is the default, but in the future it would be possible for user to select which frontend they prefer to use. + +As of 2.6.0 there are two ways of managing frontends - through PleromaFE's Admin Dashboard (preferred, easier method) or through AdminFE (clunky but also works on versions older than 2.6.0). + +!!! note + Managing frontends through UI requires [in-database configuration](../configuration/howto_database_config.md) to be enabled (default on newer instances but might be off on older ones). + +## How it works + +When installing frontends, it creates a folder in [static directory](../configuration/static_dir.md) that follows this pattern: `/frontends/${front-end name}/${front-end version}/`, puts contents of the built frontend in there. Then when accessing the server backend checks what front-end name and version are set to be default and serves index.html and assets from appropriate path. + +!!! warning + + If you've been putting your frontend build directly into static dir as an antiquated way of serving custom frontend, this system will not work and will still serve the custom index.html you put in there. You can still serve custom frontend builds if you put your build into `/frontends/$name/$version` instead and set the "default frontend" fields appropriately. + +Currently, there is no backup system, i.e. when installing `master` version it _will_ overwrite installed `master` version, for now if you want to keep previous version you should back it up manually, i.e. running `cp -r ./frontends/pleroma-fe/master ./frontends/pleroma-fe/master_old` in your static dir. + +## Managing front-ends through Admin Dashboard + +Open up Admin Dashboard (gauge icon in top bar, same as where link to AdminFE was), switch to "Front-ends" tab. +IMAGE HERE +This page is designed to be self-explanatory and easy to use, while avoiding issues and pitfalls of AdminFE, but it's also early in development, everything is subject to change. + +!!! bug + As of PleromaFE 2.6.0 there is no feedback on whether frontend is installing, installed or failed to install, this will be fixed in PleromaFE 2.6.1. + +!!! warning + This goes without saying, but if you set default frontend to anything except >2.6.0 version of PleromaFE you'll lose the access to Admin Dashboard and will have to use AdminFE to get it back. See below on how to use AdminFE. + +### Limitations + +Currently the list of available for install frontends is essentially hard-coded in backend's configuration, each providing only one version, with exception for PleromaFE which overrides 'pleroma-fe' to also include `develop` version. There is no way to manually install build with a URL (coming soon) nor add more available frontends to the repository (it's broken). + +There is also no way to tell if there is an update available or not, for now you should watch for [announcements](https://pleroma.social/announcements/) of new PleromaFE stable releases to see if there is new stable version. For `develop` version it's up to you whether you want to follow the development process or just reinstall it periodically hoping for new stuff. + +## Using AdminFE to manage frontends + +Access AdminFE either directly by going to `/pleroma/admin` of your instance or by opening Admin Dashboard and clicking the link below +IMAGE HERE + +Go to Settings -> Frontend. + +### Installing front-ends + +At the very top of the page there's a list of available frontends and button to install custom front-end + +!!! tip + Remember to click "Submit" in bottom right corner to save your changes! + +!!! bug + **Available Frontends** section lets you _install_ frontends but **NOT** update/reinstall them. It's only useful for installing a frontend once. + +Due to aforementioned bug, preferred way of installing frontends in AdminFE is by clicking the "Install another frontend" +IMAGE HERE +and filling in the fields. Unfortunately AdminFE does not provide the raw data necessary for you to fill those fields, so your best bet is to see what backend returns in browser's devtools or refer to the [source code](https://git.pleroma.social/pleroma/pleroma/-/blob/develop/config/config.exs?ref_type=heads#L742-791). For the most part, only **Name**, **Ref** (i.e. version) and **Build URL** fields are required, although some frontends might also require **Build Directory** to work. + +For pleroma-fe you can use either `master` or `develop` refs, or potentially any ref in GitLab that has artifacts for `build` job, but that's outside scope of this document. + +### Selecting default frontend + +Scroll page waaaaay down, search for "Frontends" section, subtitled "Installed frontends management", change the name and reference of the "Primary" frontend. +IMAGE HERE + + +!!! danger + If you change "Admin" frontend name/reference you risk losing access to AdminFE as well. + +!!! warning + Don't put anything into the "Available" section as it will break the list of available frontends completely, including the "add another frontend" button. If you accidentally put something in there, click the trashbin icon next to "Available" to reset it and restore the frontends list. From fe776d8b3396eb7a0d6bacb29c73b5cd77119f25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Mon, 13 Nov 2023 14:15:19 +0100 Subject: [PATCH 02/46] Fix GenerateUnsetUserKeys migration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- changelog.d/generate-unset-user-keys-migration.skip | 0 .../20220905011454_generate_unset_user_keys.exs | 10 +++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 changelog.d/generate-unset-user-keys-migration.skip diff --git a/changelog.d/generate-unset-user-keys-migration.skip b/changelog.d/generate-unset-user-keys-migration.skip new file mode 100644 index 000000000..e69de29bb diff --git a/priv/repo/migrations/20220905011454_generate_unset_user_keys.exs b/priv/repo/migrations/20220905011454_generate_unset_user_keys.exs index 43bc7100b..580c38841 100644 --- a/priv/repo/migrations/20220905011454_generate_unset_user_keys.exs +++ b/priv/repo/migrations/20220905011454_generate_unset_user_keys.exs @@ -2,12 +2,20 @@ # Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only +defmodule User do + use Ecto.Schema + + schema "users" do + field(:keys, :string) + field(:local, :boolean, default: true) + end +end + defmodule Pleroma.Repo.Migrations.GenerateUnsetUserKeys do use Ecto.Migration import Ecto.Query alias Pleroma.Keys alias Pleroma.Repo - alias Pleroma.User def change do query = From 66cb3294ed942d461cabc32881e2a10ebfd182af Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 2 Nov 2022 22:49:55 -0400 Subject: [PATCH 03/46] Switch to PromEx for prometheus metrics Recommending use of the separate HTTP server for exposing the metrics and securing it externally on your firewall or reverse proxy. It will listen on port 4021 by default. --- changelog.d/promex.add | 1 + config/config.exs | 26 +++++-- lib/pleroma/application.ex | 25 +------ lib/pleroma/config/transfer_task.ex | 3 +- lib/pleroma/prom_ex.ex | 49 +++++++++++++ lib/pleroma/repo.ex | 2 - lib/pleroma/web/endpoint.ex | 41 ----------- mix.exs | 15 +--- mix.lock | 9 +-- .../web/endpoint/metrics_exporter_test.exs | 69 ------------------- 10 files changed, 79 insertions(+), 161 deletions(-) create mode 100644 changelog.d/promex.add create mode 100644 lib/pleroma/prom_ex.ex delete mode 100644 test/pleroma/web/endpoint/metrics_exporter_test.exs diff --git a/changelog.d/promex.add b/changelog.d/promex.add new file mode 100644 index 000000000..1daaf7e4e --- /dev/null +++ b/changelog.d/promex.add @@ -0,0 +1 @@ +Add PromEx to replace the prometheus library diff --git a/config/config.exs b/config/config.exs index f2c137872..e2fc12480 100644 --- a/config/config.exs +++ b/config/config.exs @@ -648,12 +648,26 @@ config :pleroma, Pleroma.Emails.UserEmail, config :pleroma, Pleroma.Emails.NewUsersDigestEmail, enabled: false -config :prometheus, Pleroma.Web.Endpoint.MetricsExporter, - enabled: false, - auth: false, - ip_whitelist: [], - path: "/api/pleroma/app_metrics", - format: :text +config :pleroma, Pleroma.PromEx, + disabled: false, + manual_metrics_start_delay: :no_delay, + drop_metrics_groups: [], + grafana: [ + host: System.get_env("GRAFANA_HOST", "http://localhost:3000"), + auth_token: System.get_env("GRAFANA_TOKEN"), + upload_dashboards_on_start: false, + folder_name: "BEAM", + annotate_app_lifecycle: true + ], + metrics_server: [ + port: 4021, + path: "/metrics", + protocol: :http, + pool_size: 5, + cowboy_opts: [], + auth_strategy: :none + ], + datasource: "Prometheus" config :pleroma, Pleroma.ScheduledActivity, daily_user_limit: 25, diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 7bbc132f1..52cd6e9a9 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -54,7 +54,6 @@ defmodule Pleroma.Application do Config.DeprecationWarnings.warn() Pleroma.Web.Plugs.HTTPSecurityPlug.warn_if_disabled() Pleroma.ApplicationRequirements.verify!() - setup_instrumenters() load_custom_modules() Pleroma.Docs.JSON.compile() limiters_setup() @@ -91,6 +90,7 @@ defmodule Pleroma.Application do # Define workers and child supervisors to be supervised children = [ + Pleroma.PromEx, Pleroma.Repo, Config.TransferTask, Pleroma.Emoji, @@ -170,29 +170,6 @@ defmodule Pleroma.Application do end end - defp setup_instrumenters do - require Prometheus.Registry - - if Application.get_env(:prometheus, Pleroma.Repo.Instrumenter) do - :ok = - :telemetry.attach( - "prometheus-ecto", - [:pleroma, :repo, :query], - &Pleroma.Repo.Instrumenter.handle_event/4, - %{} - ) - - Pleroma.Repo.Instrumenter.setup() - end - - Pleroma.Web.Endpoint.MetricsExporter.setup() - Pleroma.Web.Endpoint.PipelineInstrumenter.setup() - - # Note: disabled until prometheus-phx is integrated into prometheus-phoenix: - # Pleroma.Web.Endpoint.Instrumenter.setup() - PrometheusPhx.setup() - end - defp cachex_children do [ build_cachex("used_captcha", ttl_interval: seconds_valid_interval()), diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex index 44a984019..6fd05b0e0 100644 --- a/lib/pleroma/config/transfer_task.ex +++ b/lib/pleroma/config/transfer_task.ex @@ -55,8 +55,7 @@ defmodule Pleroma.Config.TransferTask do started_applications = Application.started_applications() - # TODO: some problem with prometheus after restart! - reject = [nil, :prometheus, :postgrex] + reject = [nil, :postgrex] reject = if restart_pleroma? do diff --git a/lib/pleroma/prom_ex.ex b/lib/pleroma/prom_ex.ex new file mode 100644 index 000000000..6608708b7 --- /dev/null +++ b/lib/pleroma/prom_ex.ex @@ -0,0 +1,49 @@ +defmodule Pleroma.PromEx do + use PromEx, otp_app: :pleroma + + alias PromEx.Plugins + + @impl true + def plugins do + [ + # PromEx built in plugins + Plugins.Application, + Plugins.Beam, + {Plugins.Phoenix, router: Pleroma.Web.Router, endpoint: Pleroma.Web.Endpoint}, + Plugins.Ecto, + Plugins.Oban + # Plugins.PhoenixLiveView, + # Plugins.Absinthe, + # Plugins.Broadway, + + # Add your own PromEx metrics plugins + # Pleroma.Users.PromExPlugin + ] + end + + @impl true + def dashboard_assigns do + [ + datasource_id: Pleroma.Config.get([Pleroma.PromEx, :datasource]), + default_selected_interval: "30s" + ] + end + + @impl true + def dashboards do + [ + # PromEx built in Grafana dashboards + {:prom_ex, "application.json"}, + {:prom_ex, "beam.json"}, + {:prom_ex, "phoenix.json"}, + {:prom_ex, "ecto.json"}, + {:prom_ex, "oban.json"} + # {:prom_ex, "phoenix_live_view.json"}, + # {:prom_ex, "absinthe.json"}, + # {:prom_ex, "broadway.json"}, + + # Add your dashboard definitions here with the format: {:otp_app, "path_in_priv"} + # {:pleroma, "/grafana_dashboards/user_metrics.json"} + ] + end +end diff --git a/lib/pleroma/repo.ex b/lib/pleroma/repo.ex index 515b0c1ff..a50a59b3b 100644 --- a/lib/pleroma/repo.ex +++ b/lib/pleroma/repo.ex @@ -11,8 +11,6 @@ defmodule Pleroma.Repo do import Ecto.Query require Logger - defmodule Instrumenter, do: use(Prometheus.EctoInstrumenter) - @doc """ Dynamically loads the repository url from the DATABASE_URL environment variable. diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index 65dd72c49..307fa069e 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -151,47 +151,6 @@ defmodule Pleroma.Web.Endpoint do plug(Pleroma.Web.Plugs.RemoteIp) - defmodule Instrumenter do - use Prometheus.PhoenixInstrumenter - end - - defmodule PipelineInstrumenter do - use Prometheus.PlugPipelineInstrumenter - end - - defmodule MetricsExporter do - use Prometheus.PlugExporter - end - - defmodule MetricsExporterCaller do - @behaviour Plug - - def init(opts), do: opts - - def call(conn, opts) do - prometheus_config = Application.get_env(:prometheus, MetricsExporter, []) - ip_whitelist = List.wrap(prometheus_config[:ip_whitelist]) - - cond do - !prometheus_config[:enabled] -> - conn - - ip_whitelist != [] and - !Enum.find(ip_whitelist, fn ip -> - Pleroma.Helpers.InetHelper.parse_address(ip) == {:ok, conn.remote_ip} - end) -> - conn - - true -> - MetricsExporter.call(conn, opts) - end - end - end - - plug(PipelineInstrumenter) - - plug(MetricsExporterCaller) - plug(Pleroma.Web.Router) @doc """ diff --git a/mix.exs b/mix.exs index 4fd2df2d0..119431125 100644 --- a/mix.exs +++ b/mix.exs @@ -140,7 +140,7 @@ defmodule Pleroma.Mixfile do {:castore, "~> 0.1"}, {:cowlib, "~> 2.9", override: true}, {:gun, "~> 2.0.0-rc.1", override: true}, - {:finch, "~> 0.10.0"}, + {:finch, "~> 0.15"}, {:jason, "~> 1.2"}, {:mogrify, "~> 0.9.1"}, {:ex_aws, "~> 2.1.6"}, @@ -163,18 +163,7 @@ defmodule Pleroma.Mixfile do {:http_signatures, "~> 0.1.1"}, {:telemetry, "~> 1.0.0", override: true}, {:poolboy, "~> 1.5"}, - {:prometheus, "~> 4.6"}, - {:prometheus_ex, - git: "https://github.com/lanodan/prometheus.ex.git", - branch: "fix/elixir-1.14", - override: true}, - {:prometheus_plugs, "~> 1.1"}, - {:prometheus_phoenix, "~> 1.3"}, - # Note: once `prometheus_phx` is integrated into `prometheus_phoenix`, remove the former: - {:prometheus_phx, - git: "https://git.pleroma.social/pleroma/elixir-libraries/prometheus-phx.git", - branch: "no-logging"}, - {:prometheus_ecto, "~> 1.4"}, + {:prom_ex, "~> 1.9"}, {:recon, "~> 2.5"}, {:joken, "~> 2.0"}, {:pot, "~> 1.0"}, diff --git a/mix.lock b/mix.lock index 7922a8eb1..fed53d130 100644 --- a/mix.lock +++ b/mix.lock @@ -46,7 +46,7 @@ "fast_html": {:hex, :fast_html, "2.0.5", "c61760340606c1077ff1f196f17834056cb1dd3d5cb92a9f2cabf28bc6221c3c", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}], "hexpm", "605f4f4829443c14127694ebabb681778712ceecb4470ec32aa31012330e6506"}, "fast_sanitize": {:hex, :fast_sanitize, "0.2.3", "67b93dfb34e302bef49fec3aaab74951e0f0602fd9fa99085987af05bd91c7a5", [:mix], [{:fast_html, "~> 2.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "e8ad286d10d0386e15d67d0ee125245ebcfbc7d7290b08712ba9013c8c5e56e2"}, "file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"}, - "finch": {:hex, :finch, "0.10.2", "9ad27d68270d879f73f26604bb2e573d40f29bf0e907064a9a337f90a16a0312", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dd8b11b282072cec2ef30852283949c248bd5d2820c88d8acc89402b81db7550"}, + "finch": {:hex, :finch, "0.16.0", "40733f02c89f94a112518071c0a91fe86069560f5dbdb39f9150042f44dcfb1a", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.6 or ~> 1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f660174c4d519e5fec629016054d60edd822cdfe2b7270836739ac2f97735ec5"}, "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, "floki": {:hex, :floki, "0.34.3", "5e2dcaec5d7c228ce5b1d3501502e308b2d79eb655e4191751a1fe491c37feac", [:mix], [], "hexpm", "9577440eea5b97924b4bf3c7ea55f7b8b6dce589f9b28b096cc294a8dc342341"}, "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, @@ -77,11 +77,12 @@ "mock": {:hex, :mock, "0.3.8", "7046a306b71db2488ef54395eeb74df0a7f335a7caca4a3d3875d1fc81c884dd", [:mix], [{:meck, "~> 0.9.2", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "7fa82364c97617d79bb7d15571193fc0c4fe5afd0c932cef09426b3ee6fe2022"}, "mogrify": {:hex, :mogrify, "0.9.3", "238c782f00271dace01369ad35ae2e9dd020feee3443b9299ea5ea6bed559841", [:mix], [], "hexpm", "0189b1e1de27455f2b9ae8cf88239cefd23d38de9276eb5add7159aea51731e6"}, "mox": {:hex, :mox, "1.0.2", "dc2057289ac478b35760ba74165b4b3f402f68803dd5aecd3bfd19c183815d64", [:mix], [], "hexpm", "f9864921b3aaf763c8741b5b8e6f908f44566f1e427b2630e89e9a73b981fef2"}, - "nimble_options": {:hex, :nimble_options, "0.4.0", "c89babbab52221a24b8d1ff9e7d838be70f0d871be823165c94dd3418eea728f", [:mix], [], "hexpm", "e6701c1af326a11eea9634a3b1c62b475339ace9456c1a23ec3bc9a847bca02d"}, + "nimble_options": {:hex, :nimble_options, "1.0.2", "92098a74df0072ff37d0c12ace58574d26880e522c22801437151a159392270e", [:mix], [], "hexpm", "fd12a8db2021036ce12a309f26f564ec367373265b53e25403f0ee697380f1b8"}, "nimble_parsec": {:hex, :nimble_parsec, "0.6.0", "32111b3bf39137144abd7ba1cce0914533b2d16ef35e8abc5ec8be6122944263", [:mix], [], "hexpm", "27eac315a94909d4dc68bc07a4a83e06c8379237c5ea528a9acff4ca1c873c52"}, "nimble_pool": {:hex, :nimble_pool, "0.2.6", "91f2f4c357da4c4a0a548286c84a3a28004f68f05609b4534526871a22053cde", [:mix], [], "hexpm", "1c715055095d3f2705c4e236c18b618420a35490da94149ff8b580a2144f653f"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "2.13.6", "a0cb1bce3bd393770512231fb5a3695fa19fd3af10d7575bf73f837aee7abf43", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3c1c5eb16f377b3cbbf2ea14be24d20e3d91285af9d1ac86260b7c2af5464887"}, + "octo_fetch": {:hex, :octo_fetch, "0.3.0", "89ff501d2ac0448556ff1931634a538fe6d6cd358ba827ce1747e6a42a46efbf", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "c07e44f2214ab153743b7b3182f380798d0b294b1f283811c1e30cff64096d3d"}, "open_api_spex": {:hex, :open_api_spex, "3.17.3", "ada8e352eb786050dd639db2439d3316e92f3798eb2abd051f55bb9af825b37e", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:ymlr, "~> 2.0 or ~> 3.0", [hex: :ymlr, repo: "hexpm", optional: true]}], "hexpm", "165db21a85ca83cffc8e7c8890f35b354eddda8255de7404a2848ed652b9f0fe"}, "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "1.2.1", "9cbe354b58121075bd20eb83076900a3832324b7dd171a6895fab57b6bb2752c", [:mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}], "hexpm", "d3b40a4a4630f0b442f19eca891fcfeeee4c40871936fed2f68e1c4faa30481f"}, @@ -103,7 +104,7 @@ "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, "postgrex": {:hex, :postgrex, "0.17.3", "c92cda8de2033a7585dae8c61b1d420a1a1322421df84da9a82a6764580c503d", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "946cf46935a4fdca7a81448be76ba3503cff082df42c6ec1ff16a4bdfbfb098d"}, "pot": {:hex, :pot, "1.0.2", "13abb849139fdc04ab8154986abbcb63bdee5de6ed2ba7e1713527e33df923dd", [:rebar3], [], "hexpm", "78fe127f5a4f5f919d6ea5a2a671827bd53eb9d37e5b4128c0ad3df99856c2e0"}, - "prom_ex": {:hex, :prom_ex, "1.7.1", "39331ee3fe6f9a8587d8208bf9274a253bb80281700e127dd18786cda5e08c37", [:mix], [{:absinthe, ">= 1.6.0", [hex: :absinthe, repo: "hexpm", optional: true]}, {:broadway, ">= 1.0.2", [hex: :broadway, repo: "hexpm", optional: true]}, {:ecto, ">= 3.5.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:finch, "~> 0.10.2", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, ">= 2.4.0", [hex: :oban, repo: "hexpm", optional: true]}, {:phoenix, ">= 1.5.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, ">= 0.14.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, ">= 1.12.1", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.5.1", [hex: :plug_cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6.1", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.0.2", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}, {:telemetry_poller, "~> 1.0.0", [hex: :telemetry_poller, repo: "hexpm", optional: false]}], "hexpm", "4c978872b88a929833925a0f4d0561824804c671fdd04581e765509ed0a6ed08"}, + "prom_ex": {:hex, :prom_ex, "1.9.0", "63e6dda6c05cdeec1f26c48443dcc38ffd2118b3665ae8d2bd0e5b79f2aea03e", [:mix], [{:absinthe, ">= 1.6.0", [hex: :absinthe, repo: "hexpm", optional: true]}, {:broadway, ">= 1.0.2", [hex: :broadway, repo: "hexpm", optional: true]}, {:ecto, ">= 3.5.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:finch, "~> 0.15", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, ">= 2.4.0", [hex: :oban, repo: "hexpm", optional: true]}, {:octo_fetch, "~> 0.3", [hex: :octo_fetch, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.5.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, ">= 0.14.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, ">= 1.12.1", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.5", [hex: :plug_cowboy, repo: "hexpm", optional: false]}, {:telemetry, ">= 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.0", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}, {:telemetry_poller, "~> 1.0", [hex: :telemetry_poller, repo: "hexpm", optional: false]}], "hexpm", "01f3d4f69ec93068219e686cc65e58a29c42bea5429a8ff4e2121f19db178ee6"}, "prometheus": {:hex, :prometheus, "4.10.0", "792adbf0130ff61b5fa8826f013772af24b6e57b984445c8d602c8a0355704a1", [:mix, :rebar3], [{:quantile_estimator, "~> 0.2.1", [hex: :quantile_estimator, repo: "hexpm", optional: false]}], "hexpm", "2a99bb6dce85e238c7236fde6b0064f9834dc420ddbd962aac4ea2a3c3d59384"}, "prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "8d66289f77f913b37eda81fd287340c17e61a447549deb28efc254532b2bed82"}, "prometheus_ex": {:git, "https://github.com/lanodan/prometheus.ex.git", "31f7fbe4b71b79ba27efc2a5085746c4011ceb8f", [branch: "fix/elixir-1.14"]}, @@ -123,7 +124,7 @@ "table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"}, "telemetry": {:hex, :telemetry, "1.0.0", "0f453a102cdf13d506b7c0ab158324c337c41f1cc7548f0bc0e130bbf0ae9452", [:rebar3], [], "hexpm", "73bc09fa59b4a0284efb4624335583c528e07ec9ae76aca96ea0673850aec57a"}, "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"}, - "telemetry_metrics_prometheus_core": {:hex, :telemetry_metrics_prometheus_core, "1.0.2", "c98b1c580de637bfeac00db41b9fb91fb4c3548ee3d512a8ed7299172312eaf3", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "48351a0d56f80e38c997b44232b1043e0a081670d16766eee920e6254175b730"}, + "telemetry_metrics_prometheus_core": {:hex, :telemetry_metrics_prometheus_core, "1.1.0", "4e15f6d7dbedb3a4e3aed2262b7e1407f166fcb9c30ca3f96635dfbbef99965c", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "0dd10e7fe8070095df063798f82709b0a1224c31b8baf6278b423898d591a069"}, "telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"}, "tesla": {:hex, :tesla, "1.4.4", "bb89aa0c9745190930366f6a2ac612cdf2d0e4d7fff449861baa7875afd797b2", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.3", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "d5503a49f9dec1b287567ea8712d085947e247cb11b06bc54adb05bfde466457"}, "timex": {:hex, :timex, "3.7.7", "3ed093cae596a410759104d878ad7b38e78b7c2151c6190340835515d4a46b8a", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "0ec4b09f25fe311321f9fc04144a7e3affe48eb29481d7a5583849b6c4dfa0a7"}, diff --git a/test/pleroma/web/endpoint/metrics_exporter_test.exs b/test/pleroma/web/endpoint/metrics_exporter_test.exs deleted file mode 100644 index ad236d4cb..000000000 --- a/test/pleroma/web/endpoint/metrics_exporter_test.exs +++ /dev/null @@ -1,69 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2022 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.Endpoint.MetricsExporterTest do - # Modifies AppEnv, has to stay synchronous - use Pleroma.Web.ConnCase - - alias Pleroma.Web.Endpoint.MetricsExporter - - defp config do - Application.get_env(:prometheus, MetricsExporter) - end - - describe "with default config" do - test "does NOT expose app metrics", %{conn: conn} do - conn - |> get(config()[:path]) - |> json_response(404) - end - end - - describe "when enabled" do - setup do - initial_config = config() - on_exit(fn -> Application.put_env(:prometheus, MetricsExporter, initial_config) end) - - Application.put_env( - :prometheus, - MetricsExporter, - Keyword.put(initial_config, :enabled, true) - ) - end - - test "serves app metrics", %{conn: conn} do - conn = get(conn, config()[:path]) - assert response = response(conn, 200) - - for metric <- [ - "http_requests_total", - "http_request_duration_microseconds", - "phoenix_controller_call_duration", - "telemetry_scrape_duration", - "erlang_vm_memory_atom_bytes_total" - ] do - assert response =~ ~r/#{metric}/ - end - end - - test "when IP whitelist configured, " <> - "serves app metrics only if client IP is whitelisted", - %{conn: conn} do - Application.put_env( - :prometheus, - MetricsExporter, - Keyword.put(config(), :ip_whitelist, ["127.127.127.127", {1, 1, 1, 1}, '255.255.255.255']) - ) - - conn - |> get(config()[:path]) - |> json_response(404) - - conn - |> Map.put(:remote_ip, {127, 127, 127, 127}) - |> get(config()[:path]) - |> response(200) - end - end -end From 1db10744f72bb3679e5ae51da5cc3acc24bb2972 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 8 Nov 2023 09:15:06 -0500 Subject: [PATCH 04/46] Use the "change" type --- changelog.d/promex.add | 1 - changelog.d/promex.change | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 changelog.d/promex.add create mode 100644 changelog.d/promex.change diff --git a/changelog.d/promex.add b/changelog.d/promex.add deleted file mode 100644 index 1daaf7e4e..000000000 --- a/changelog.d/promex.add +++ /dev/null @@ -1 +0,0 @@ -Add PromEx to replace the prometheus library diff --git a/changelog.d/promex.change b/changelog.d/promex.change new file mode 100644 index 000000000..6c1571c54 --- /dev/null +++ b/changelog.d/promex.change @@ -0,0 +1 @@ +Change the prometheus library to PromEx. From 13baba90f6deb27b0d6301a705db753cc32bb141 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 9 Nov 2022 13:45:57 -0500 Subject: [PATCH 05/46] Replace ImageMagick with Vips for Media Preview Proxy --- Dockerfile | 4 +- lib/pleroma/helpers/media_helper.ex | 57 +++++++---------------------- mix.exs | 1 + mix.lock | 1 + 4 files changed, 17 insertions(+), 46 deletions(-) diff --git a/Dockerfile b/Dockerfile index d2a3e3573..aba6ebbf1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ COPY . . ENV MIX_ENV=prod -RUN apk add git gcc g++ musl-dev make cmake file-dev &&\ +RUN apk add git gcc g++ musl-dev make cmake file-dev vips &&\ echo "import Config" > config/prod.secret.exs &&\ mix local.hex --force &&\ mix local.rebar --force &&\ @@ -37,7 +37,7 @@ ARG HOME=/opt/pleroma ARG DATA=/var/lib/pleroma RUN apk update &&\ - apk add exiftool ffmpeg imagemagick libmagic ncurses postgresql-client &&\ + apk add exiftool ffmpeg vips libmagic ncurses postgresql-client &&\ adduser --system --shell /bin/false --home ${HOME} pleroma &&\ mkdir -p ${DATA}/uploads &&\ mkdir -p ${DATA}/static &&\ diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 24c845fcd..07dfea55b 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -8,11 +8,12 @@ defmodule Pleroma.Helpers.MediaHelper do """ alias Pleroma.HTTP + alias Vix.Vips.Operation require Logger def missing_dependencies do - Enum.reduce([imagemagick: "convert", ffmpeg: "ffmpeg"], [], fn {sym, executable}, acc -> + Enum.reduce([ffmpeg: "ffmpeg"], [], fn {sym, executable}, acc -> if Pleroma.Utils.command_available?(executable) do acc else @@ -22,54 +23,22 @@ defmodule Pleroma.Helpers.MediaHelper do end def image_resize(url, options) do - with executable when is_binary(executable) <- System.find_executable("convert"), - {:ok, args} <- prepare_image_resize_args(options), - {:ok, env} <- HTTP.get(url, [], pool: :media), - {:ok, fifo_path} <- mkfifo() do - args = List.flatten([fifo_path, args]) - run_fifo(fifo_path, env, executable, args) + with {:ok, env} <- HTTP.get(url, [], pool: :media), + {:ok, resized} <- + Operation.thumbnail_buffer(env.body, options.max_width, + height: options.max_height, + size: :VIPS_SIZE_DOWN + ) do + if options[:format] == "png" do + Operation.pngsave_buffer(resized, Q: options[:quality]) + else + Operation.jpegsave_buffer(resized, Q: options[:quality], interlace: true) + end else - nil -> {:error, {:convert, :command_not_found}} {:error, _} = error -> error end end - defp prepare_image_resize_args( - %{max_width: max_width, max_height: max_height, format: "png"} = options - ) do - quality = options[:quality] || 85 - resize = Enum.join([max_width, "x", max_height, ">"]) - - args = [ - "-resize", - resize, - "-quality", - to_string(quality), - "png:-" - ] - - {:ok, args} - end - - defp prepare_image_resize_args(%{max_width: max_width, max_height: max_height} = options) do - quality = options[:quality] || 85 - resize = Enum.join([max_width, "x", max_height, ">"]) - - args = [ - "-interlace", - "Plane", - "-resize", - resize, - "-quality", - to_string(quality), - "jpg:-" - ] - - {:ok, args} - end - - defp prepare_image_resize_args(_), do: {:error, :missing_options} - # Note: video thumbnail is intentionally not resized (always has original dimensions) def video_framegrab(url) do with executable when is_binary(executable) <- System.find_executable("ffmpeg"), diff --git a/mix.exs b/mix.exs index 4fd2df2d0..fad81575a 100644 --- a/mix.exs +++ b/mix.exs @@ -193,6 +193,7 @@ defmodule Pleroma.Mixfile do {:eblurhash, "~> 1.2.2"}, {:open_api_spex, "~> 3.16"}, {:ecto_psql_extras, "~> 0.6"}, + {:vix, "~> 0.14.0"}, ## dev & test {:ex_doc, "~> 0.22", only: :dev, runtime: false}, diff --git a/mix.lock b/mix.lock index 7922a8eb1..fdc966c63 100644 --- a/mix.lock +++ b/mix.lock @@ -132,6 +132,7 @@ "ueberauth": {:hex, :ueberauth, "0.10.5", "806adb703df87e55b5615cf365e809f84c20c68aa8c08ff8a416a5a6644c4b02", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "3efd1f31d490a125c7ed453b926f7c31d78b97b8a854c755f5c40064bf3ac9e1"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, + "vix": {:hex, :vix, "0.14.0", "f84eaf28191514d385829580db4e1c971e75ecfa771538a40159c18d88340049", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:kino, "~> 0.7", [hex: :kino, repo: "hexpm", optional: true]}], "hexpm", "964003b93351b51d0a5b80d80b3d568da4546e6ecbb1ee0bd0fb0a5c8d6e8cc9"}, "web_push_encryption": {:hex, :web_push_encryption, "0.3.1", "76d0e7375142dfee67391e7690e89f92578889cbcf2879377900b5620ee4708d", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.11.1", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "4f82b2e57622fb9337559058e8797cb0df7e7c9790793bdc4e40bc895f70e2a2"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, "websock_adapter": {:hex, :websock_adapter, "0.5.5", "9dfeee8269b27e958a65b3e235b7e447769f66b5b5925385f5a569269164a210", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "4b977ba4a01918acbf77045ff88de7f6972c2a009213c515a445c48f224ffce9"}, From 481b6ac0d5c610e840fc4b88a357efa28f510ab8 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 10 Nov 2022 11:07:49 -0500 Subject: [PATCH 06/46] Add Pleroma.Upload.Filter.HeifToJpeg based on vips --- CHANGELOG.md | 1 + lib/pleroma/upload/filter/heif_to_jpeg.ex | 36 +++++++++++++++++ test/fixtures/image.heic | Bin 0 -> 41465 bytes .../upload/filter/heif_to_jpeg_test.exs | 38 ++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 lib/pleroma/upload/filter/heif_to_jpeg.ex create mode 100644 test/fixtures/image.heic create mode 100644 test/pleroma/upload/filter/heif_to_jpeg_test.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index 394eb5179..7ced3b678 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -150,6 +150,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Added move account API - Enable remote users to interact with posts - Possibility to discover users like `user@example.org`, while Pleroma is working on `pleroma.example.org`. Additional configuration required. +- Added Pleroma.Upload.Filter.HeifToJpeg to automate converting .heic files from Apple devices to JPEGs which can be viewed in browsers. ### Fixed - Subscription(Bell) Notifications: Don't create from Pipeline Ingested replies diff --git a/lib/pleroma/upload/filter/heif_to_jpeg.ex b/lib/pleroma/upload/filter/heif_to_jpeg.ex new file mode 100644 index 000000000..a2095ba01 --- /dev/null +++ b/lib/pleroma/upload/filter/heif_to_jpeg.ex @@ -0,0 +1,36 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Upload.Filter.HeifToJpeg do + @behaviour Pleroma.Upload.Filter + alias Pleroma.Upload + alias Vix.Vips.Operation + + @type conversion :: action :: String.t() | {action :: String.t(), opts :: String.t()} + @type conversions :: conversion() | [conversion()] + + @spec filter(Pleroma.Upload.t()) :: {:ok, :atom} | {:error, String.t()} + def filter(%Pleroma.Upload{content_type: "image/avif"} = upload), do: apply_filter(upload) + def filter(%Pleroma.Upload{content_type: "image/heic"} = upload), do: apply_filter(upload) + def filter(%Pleroma.Upload{content_type: "image/heif"} = upload), do: apply_filter(upload) + + def filter(_), do: {:ok, :noop} + + defp apply_filter(%Pleroma.Upload{name: name, path: path, tempfile: tempfile} = upload) do + ext = String.split(path, ".") |> List.last() + + try do + name = name |> String.replace_suffix(ext, "jpg") + path = path |> String.replace_suffix(ext, "jpg") + {:ok, {vixdata, _vixflags}} = Operation.heifload(tempfile) + {:ok, jpegdata} = Operation.jpegsave_buffer(vixdata) + :ok = File.write(tempfile, jpegdata) + + {:ok, :filtered, %Upload{upload | name: name, path: path, content_type: "image/jpeg"}} + rescue + e in ErlangError -> + {:error, "#{__MODULE__}: #{inspect(e)}"} + end + end +end diff --git a/test/fixtures/image.heic b/test/fixtures/image.heic new file mode 100644 index 0000000000000000000000000000000000000000..efd119a0ea5f9c59d225e2f1ba7269bfe1802d0b GIT binary patch literal 41465 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𝔫oF3jt+&)oY$;m6 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 JuE~EV$w1k)iqQZ7 literal 0 HcmV?d00001 diff --git a/test/pleroma/upload/filter/heif_to_jpeg_test.exs b/test/pleroma/upload/filter/heif_to_jpeg_test.exs new file mode 100644 index 000000000..7627d18ce --- /dev/null +++ b/test/pleroma/upload/filter/heif_to_jpeg_test.exs @@ -0,0 +1,38 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Upload.Filter.HeifToJpegTest do + use Pleroma.DataCase, async: true + alias Pleroma.Upload.Filter + + test "apply HeicToJpeg filter" do + File.cp!( + "test/fixtures/image.heic", + "test/fixtures/heictmp" + ) + + upload = %Pleroma.Upload{ + name: "image.heic", + content_type: "image/heic", + path: Path.absname("test/fixtures/image.heic"), + tempfile: Path.absname("test/fixtures/heictmp") + } + + {:ok, :filtered, result} = Filter.HeifToJpeg.filter(upload) + + assert result.content_type == "image/jpeg" + assert result.name == "image.jpg" + assert String.ends_with?(result.path, "jpg") + + assert {:ok, + %Majic.Result{ + content: + "JPEG image data, JFIF standard 1.02, resolution (DPI), density 96x96, segment length 16, progressive, precision 8, 1024x768, components 3", + encoding: "binary", + mime_type: "image/jpeg" + }} == Majic.perform(result.path, pool: Pleroma.MajicPool) + + on_exit(fn -> File.rm!("test/fixtures/heictmp") end) + end +end From 577ade75cffaa8bfc1926879435312684354ccda Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 7 Nov 2023 16:31:35 -0500 Subject: [PATCH 07/46] Override elixir_make version --- mix.exs | 3 ++- mix.lock | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mix.exs b/mix.exs index fad81575a..4e4ce35f8 100644 --- a/mix.exs +++ b/mix.exs @@ -193,7 +193,8 @@ defmodule Pleroma.Mixfile do {:eblurhash, "~> 1.2.2"}, {:open_api_spex, "~> 3.16"}, {:ecto_psql_extras, "~> 0.6"}, - {:vix, "~> 0.14.0"}, + {:vix, "~> 0.23.1"}, + {:elixir_make, "~> 0.7.7", override: true}, ## dev & test {:ex_doc, "~> 0.22", only: :dev, runtime: false}, diff --git a/mix.lock b/mix.lock index fdc966c63..1f4eb3dd1 100644 --- a/mix.lock +++ b/mix.lock @@ -9,6 +9,7 @@ "calendar": {:hex, :calendar, "1.0.0", "f52073a708528482ec33d0a171954ca610fe2bd28f1e871f247dc7f1565fa807", [:mix], [{:tzdata, "~> 0.5.20 or ~> 0.1.201603 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "990e9581920c82912a5ee50e62ff5ef96da6b15949a2ee4734f935fdef0f0a6f"}, "captcha": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", "e0f16822d578866e186a0974d65ad58cddc1e2ab", [ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"]}, "castore": {:hex, :castore, "0.1.22", "4127549e411bedd012ca3a308dede574f43819fe9394254ca55ab4895abfa1a2", [:mix], [], "hexpm", "c17576df47eb5aa1ee40cc4134316a99f5cad3e215d5c77b8dd3cfef12a22cac"}, + "cc_precompiler": {:hex, :cc_precompiler, "0.1.8", "933a5f4da3b19ee56539a076076ce4d7716d64efc8db46fd066996a7e46e2bfd", [:mix], [{:elixir_make, "~> 0.7.3", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "176bdf4366956e456bf761b54ad70bc4103d0269ca9558fd7cee93d1b3f116db"}, "certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, "comeonin": {:hex, :comeonin, "5.3.3", "2c564dac95a35650e9b6acfe6d2952083d8a08e4a89b93a481acb552b325892e", [:mix], [], "hexpm", "3e38c9c2cb080828116597ca8807bb482618a315bfafd98c90bc22a821cc84df"}, @@ -33,7 +34,7 @@ "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.14", "7a20cfe913b0476542b43870e67386461258734896035e3f284039fd18bd4c4c", [:mix], [{:ecto_sql, "~> 3.7", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "22f5f98592dd597db9416fcef00effae0787669fdcb6faf447e982b553798e98"}, "ecto_sql": {:hex, :ecto_sql, "3.10.2", "6b98b46534b5c2f8b8b5f03f126e75e2a73c64f3c071149d32987a5378b0fdbd", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "68c018debca57cb9235e3889affdaec7a10616a4e3a80c99fa1d01fdafaa9007"}, "eimp": {:hex, :eimp, "1.0.14", "fc297f0c7e2700457a95a60c7010a5f1dcb768a083b6d53f49cd94ab95a28f22", [:rebar3], [{:p1_utils, "1.0.18", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "501133f3112079b92d9e22da8b88bf4f0e13d4d67ae9c15c42c30bd25ceb83b6"}, - "elixir_make": {:hex, :elixir_make, "0.6.3", "bc07d53221216838d79e03a8019d0839786703129599e9619f4ab74c8c096eac", [:mix], [], "hexpm", "f5cbd651c5678bcaabdbb7857658ee106b12509cd976c2c2fca99688e1daf716"}, + "elixir_make": {:hex, :elixir_make, "0.7.7", "7128c60c2476019ed978210c245badf08b03dbec4f24d05790ef791da11aa17c", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "5bc19fff950fad52bbe5f211b12db9ec82c6b34a9647da0c2224b8b8464c7e6c"}, "esbuild": {:hex, :esbuild, "0.5.0", "d5bb08ff049d7880ee3609ed5c4b864bd2f46445ea40b16b4acead724fb4c4a3", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "f183a0b332d963c4cfaf585477695ea59eef9a6f2204fdd0efa00e099694ffe5"}, "eternal": {:hex, :eternal, "1.2.2", "d1641c86368de99375b98d183042dd6c2b234262b8d08dfd72b9eeaafc2a1abd", [:mix], [], "hexpm", "2c9fe32b9c3726703ba5e1d43a1d255a4f3f2d8f8f9bc19f094c7cb1a7a9e782"}, "ex_aws": {:hex, :ex_aws, "2.1.9", "dc4865ecc20a05190a34a0ac5213e3e5e2b0a75a0c2835e923ae7bfeac5e3c31", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "3e6c776703c9076001fbe1f7c049535f042cb2afa0d2cbd3b47cbc4e92ac0d10"}, @@ -132,7 +133,7 @@ "ueberauth": {:hex, :ueberauth, "0.10.5", "806adb703df87e55b5615cf365e809f84c20c68aa8c08ff8a416a5a6644c4b02", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "3efd1f31d490a125c7ed453b926f7c31d78b97b8a854c755f5c40064bf3ac9e1"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, - "vix": {:hex, :vix, "0.14.0", "f84eaf28191514d385829580db4e1c971e75ecfa771538a40159c18d88340049", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:kino, "~> 0.7", [hex: :kino, repo: "hexpm", optional: true]}], "hexpm", "964003b93351b51d0a5b80d80b3d568da4546e6ecbb1ee0bd0fb0a5c8d6e8cc9"}, + "vix": {:hex, :vix, "0.23.1", "f0cacb0334a0b4d12fbd7d8b14c78e27bb3cb47c977f5f9abc66162499d03160", [:make, :mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:cc_precompiler, "~> 0.1.4 or ~> 0.2", [hex: :cc_precompiler, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.7.3 or ~> 0.8", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:kino, "~> 0.7", [hex: :kino, repo: "hexpm", optional: true]}], "hexpm", "394d757017392fcbc594fe59fb8f9a7051c18c6fd42859513d7e0e1dfe429f53"}, "web_push_encryption": {:hex, :web_push_encryption, "0.3.1", "76d0e7375142dfee67391e7690e89f92578889cbcf2879377900b5620ee4708d", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.11.1", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "4f82b2e57622fb9337559058e8797cb0df7e7c9790793bdc4e40bc895f70e2a2"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, "websock_adapter": {:hex, :websock_adapter, "0.5.5", "9dfeee8269b27e958a65b3e235b7e447769f66b5b5925385f5a569269164a210", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "4b977ba4a01918acbf77045ff88de7f6972c2a009213c515a445c48f224ffce9"}, From a4b6e5613fe02fac1a0ec80b8fd6940d2b22f85d Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 7 Nov 2023 22:03:20 +0000 Subject: [PATCH 08/46] Revert "Add Pleroma.Upload.Filter.HeifToJpeg based on vips" This reverts commit 31d4448ee61b4afac6aa23f8c0287d13aed411a1. This functionality is not reliably working with vips/vix due to codec patent junk --- CHANGELOG.md | 1 - lib/pleroma/upload/filter/heif_to_jpeg.ex | 36 ----------------- test/fixtures/image.heic | Bin 41465 -> 0 bytes .../upload/filter/heif_to_jpeg_test.exs | 38 ------------------ 4 files changed, 75 deletions(-) delete mode 100644 lib/pleroma/upload/filter/heif_to_jpeg.ex delete mode 100644 test/fixtures/image.heic delete mode 100644 test/pleroma/upload/filter/heif_to_jpeg_test.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ced3b678..394eb5179 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -150,7 +150,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Added move account API - Enable remote users to interact with posts - Possibility to discover users like `user@example.org`, while Pleroma is working on `pleroma.example.org`. Additional configuration required. -- Added Pleroma.Upload.Filter.HeifToJpeg to automate converting .heic files from Apple devices to JPEGs which can be viewed in browsers. ### Fixed - Subscription(Bell) Notifications: Don't create from Pipeline Ingested replies diff --git a/lib/pleroma/upload/filter/heif_to_jpeg.ex b/lib/pleroma/upload/filter/heif_to_jpeg.ex deleted file mode 100644 index a2095ba01..000000000 --- a/lib/pleroma/upload/filter/heif_to_jpeg.ex +++ /dev/null @@ -1,36 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2022 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Upload.Filter.HeifToJpeg do - @behaviour Pleroma.Upload.Filter - alias Pleroma.Upload - alias Vix.Vips.Operation - - @type conversion :: action :: String.t() | {action :: String.t(), opts :: String.t()} - @type conversions :: conversion() | [conversion()] - - @spec filter(Pleroma.Upload.t()) :: {:ok, :atom} | {:error, String.t()} - def filter(%Pleroma.Upload{content_type: "image/avif"} = upload), do: apply_filter(upload) - def filter(%Pleroma.Upload{content_type: "image/heic"} = upload), do: apply_filter(upload) - def filter(%Pleroma.Upload{content_type: "image/heif"} = upload), do: apply_filter(upload) - - def filter(_), do: {:ok, :noop} - - defp apply_filter(%Pleroma.Upload{name: name, path: path, tempfile: tempfile} = upload) do - ext = String.split(path, ".") |> List.last() - - try do - name = name |> String.replace_suffix(ext, "jpg") - path = path |> String.replace_suffix(ext, "jpg") - {:ok, {vixdata, _vixflags}} = Operation.heifload(tempfile) - {:ok, jpegdata} = Operation.jpegsave_buffer(vixdata) - :ok = File.write(tempfile, jpegdata) - - {:ok, :filtered, %Upload{upload | name: name, path: path, content_type: "image/jpeg"}} - rescue - e in ErlangError -> - {:error, "#{__MODULE__}: #{inspect(e)}"} - end - end -end diff --git a/test/fixtures/image.heic b/test/fixtures/image.heic deleted file mode 100644 index efd119a0ea5f9c59d225e2f1ba7269bfe1802d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41465 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𝔫oF3jt+&)oY$;m6 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 JuE~EV$w1k)iqQZ7 diff --git a/test/pleroma/upload/filter/heif_to_jpeg_test.exs b/test/pleroma/upload/filter/heif_to_jpeg_test.exs deleted file mode 100644 index 7627d18ce..000000000 --- a/test/pleroma/upload/filter/heif_to_jpeg_test.exs +++ /dev/null @@ -1,38 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Upload.Filter.HeifToJpegTest do - use Pleroma.DataCase, async: true - alias Pleroma.Upload.Filter - - test "apply HeicToJpeg filter" do - File.cp!( - "test/fixtures/image.heic", - "test/fixtures/heictmp" - ) - - upload = %Pleroma.Upload{ - name: "image.heic", - content_type: "image/heic", - path: Path.absname("test/fixtures/image.heic"), - tempfile: Path.absname("test/fixtures/heictmp") - } - - {:ok, :filtered, result} = Filter.HeifToJpeg.filter(upload) - - assert result.content_type == "image/jpeg" - assert result.name == "image.jpg" - assert String.ends_with?(result.path, "jpg") - - assert {:ok, - %Majic.Result{ - content: - "JPEG image data, JFIF standard 1.02, resolution (DPI), density 96x96, segment length 16, progressive, precision 8, 1024x768, components 3", - encoding: "binary", - mime_type: "image/jpeg" - }} == Majic.perform(result.path, pool: Pleroma.MajicPool) - - on_exit(fn -> File.rm!("test/fixtures/heictmp") end) - end -end From ce42dac331e49dd5ab8c8bca248ee11916804186 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 8 Nov 2023 09:17:32 -0500 Subject: [PATCH 09/46] Change mediaproxy previews to use vips to generate thumbnails instead of ImageMagick --- changelog.d/mediaproxy_preview.change | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/mediaproxy_preview.change diff --git a/changelog.d/mediaproxy_preview.change b/changelog.d/mediaproxy_preview.change new file mode 100644 index 000000000..ee18cd34b --- /dev/null +++ b/changelog.d/mediaproxy_preview.change @@ -0,0 +1 @@ +Change mediaproxy previews to use vips to generate thumbnails instead of ImageMagick From 2b6ae571bb8b1f641fbc9ea6f793f5677ad44041 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 29 Aug 2023 20:02:59 +0200 Subject: [PATCH 10/46] mix: cherry-pick eblurhash latest git for system-CFLAGS --- mix.exs | 4 +++- mix.lock | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index 4fd2df2d0..635e10e7e 100644 --- a/mix.exs +++ b/mix.exs @@ -190,7 +190,9 @@ defmodule Pleroma.Mixfile do ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"}, {:restarter, path: "./restarter"}, {:majic, "~> 1.0"}, - {:eblurhash, "~> 1.2.2"}, + {:eblurhash, + git: "https://github.com/zotonic/eblurhash.git", + ref: "bc37ceb426ef021ee9927fb249bb93f7059194ab"}, {:open_api_spex, "~> 3.16"}, {:ecto_psql_extras, "~> 0.6"}, diff --git a/mix.lock b/mix.lock index 7922a8eb1..b0a0728f7 100644 --- a/mix.lock +++ b/mix.lock @@ -27,7 +27,7 @@ "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, "earmark": {:hex, :earmark, "1.4.22", "ea3e45c6359446dc308be0a64ce82a03260d973de7d0625a762e6d352ff57958", [:mix], [{:earmark_parser, "~> 1.4.23", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "1caf5145665a42fd76d5317286b0c171861fb1c04f86ab103dde76868814fdfb"}, "earmark_parser": {:hex, :earmark_parser, "1.4.32", "fa739a0ecfa34493de19426681b23f6814573faee95dfd4b4aafe15a7b5b32c6", [:mix], [], "hexpm", "b8b0dd77d60373e77a3d7e8afa598f325e49e8663a51bcc2b88ef41838cca755"}, - "eblurhash": {:hex, :eblurhash, "1.2.2", "7da4255aaea984b31bb71155f673257353b0e0554d0d30dcf859547e74602582", [:rebar3], [], "hexpm", "8c20ca00904de023a835a9dcb7b7762fed32264c85a80c3cafa85288e405044c"}, + "eblurhash": {:git, "https://github.com/zotonic/eblurhash.git", "bc37ceb426ef021ee9927fb249bb93f7059194ab", [ref: "bc37ceb426ef021ee9927fb249bb93f7059194ab"]}, "ecto": {:hex, :ecto, "3.10.3", "eb2ae2eecd210b4eb8bece1217b297ad4ff824b4384c0e3fdd28aaf96edd6135", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "44bec74e2364d491d70f7e42cd0d690922659d329f6465e89feb8a34e8cd3433"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.14", "7a20cfe913b0476542b43870e67386461258734896035e3f284039fd18bd4c4c", [:mix], [{:ecto_sql, "~> 3.7", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "22f5f98592dd597db9416fcef00effae0787669fdcb6faf447e982b553798e98"}, From 5f85067a95e43b39120c5d73bfe25f40326b8577 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 29 Aug 2023 20:27:09 +0200 Subject: [PATCH 11/46] mix: Bump elixir-captcha for system-CFLAGS --- mix.exs | 2 +- mix.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index 635e10e7e..313d86b9c 100644 --- a/mix.exs +++ b/mix.exs @@ -187,7 +187,7 @@ defmodule Pleroma.Mixfile do ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"}, {:captcha, git: "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", - ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"}, + ref: "90f6ce7672f70f56708792a98d98bd05176c9176"}, {:restarter, path: "./restarter"}, {:majic, "~> 1.0"}, {:eblurhash, diff --git a/mix.lock b/mix.lock index b0a0728f7..442a2a2f1 100644 --- a/mix.lock +++ b/mix.lock @@ -7,7 +7,7 @@ "bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"}, "cachex": {:hex, :cachex, "3.6.0", "14a1bfbeee060dd9bec25a5b6f4e4691e3670ebda28c8ba2884b12fe30b36bf8", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "ebf24e373883bc8e0c8d894a63bbe102ae13d918f790121f5cfe6e485cc8e2e2"}, "calendar": {:hex, :calendar, "1.0.0", "f52073a708528482ec33d0a171954ca610fe2bd28f1e871f247dc7f1565fa807", [:mix], [{:tzdata, "~> 0.5.20 or ~> 0.1.201603 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "990e9581920c82912a5ee50e62ff5ef96da6b15949a2ee4734f935fdef0f0a6f"}, - "captcha": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", "e0f16822d578866e186a0974d65ad58cddc1e2ab", [ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"]}, + "captcha": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", "90f6ce7672f70f56708792a98d98bd05176c9176", [ref: "90f6ce7672f70f56708792a98d98bd05176c9176"]}, "castore": {:hex, :castore, "0.1.22", "4127549e411bedd012ca3a308dede574f43819fe9394254ca55ab4895abfa1a2", [:mix], [], "hexpm", "c17576df47eb5aa1ee40cc4134316a99f5cad3e215d5c77b8dd3cfef12a22cac"}, "certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, From 4472ab1fe92e193cfb4c6388453483ce11b20ff9 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 29 Aug 2023 20:29:28 +0200 Subject: [PATCH 12/46] changelog.d/system-cflags.fix: New entry --- changelog.d/system-cflags.fix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/system-cflags.fix diff --git a/changelog.d/system-cflags.fix b/changelog.d/system-cflags.fix new file mode 100644 index 000000000..84de5ad57 --- /dev/null +++ b/changelog.d/system-cflags.fix @@ -0,0 +1 @@ +- Fix eblurhash and elixir-captcha not using system cflags From 3831d310091fe975893972185baa592789194952 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Fri, 1 Sep 2023 19:32:59 +0200 Subject: [PATCH 13/46] docs: Put a max version on erlang and elixir Closes: https://git.pleroma.social/pleroma/pleroma/-/issues/3194 --- changelog.d/docs-max-elixir-erlang.change | 1 + docs/installation/generic_dependencies.include | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 changelog.d/docs-max-elixir-erlang.change diff --git a/changelog.d/docs-max-elixir-erlang.change b/changelog.d/docs-max-elixir-erlang.change new file mode 100644 index 000000000..a58b7fc17 --- /dev/null +++ b/changelog.d/docs-max-elixir-erlang.change @@ -0,0 +1 @@ +- Document maximum supported version of Erlang & Elixir diff --git a/docs/installation/generic_dependencies.include b/docs/installation/generic_dependencies.include index dcaacfdfd..dbe6fe49d 100644 --- a/docs/installation/generic_dependencies.include +++ b/docs/installation/generic_dependencies.include @@ -1,8 +1,8 @@ ## Required dependencies -* PostgreSQL 9.6+ -* Elixir 1.10+ -* Erlang OTP 22.2+ +* PostgreSQL >=9.6 +* Elixir >=1.11.0 <1.15 +* Erlang OTP >=22.2.0 <26 * git * file / libmagic * gcc (clang might also work) From 19519d6c969196f2b1d9283168060a751068472d Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Fri, 1 Sep 2023 19:33:27 +0200 Subject: [PATCH 14/46] docs: clang is also supported --- docs/installation/generic_dependencies.include | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation/generic_dependencies.include b/docs/installation/generic_dependencies.include index dbe6fe49d..3365a36a8 100644 --- a/docs/installation/generic_dependencies.include +++ b/docs/installation/generic_dependencies.include @@ -5,7 +5,7 @@ * Erlang OTP >=22.2.0 <26 * git * file / libmagic -* gcc (clang might also work) +* gcc or clang * GNU make * CMake From 66f5ae0c5a0ab57dc6bf3f52bbf976128259800f Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 8 Aug 2023 19:08:59 +0200 Subject: [PATCH 15/46] router: Make /federation_status publicly available --- changelog.d/federation_status-access.change | 1 + lib/pleroma/web/router.ex | 7 ++++++- .../pleroma_api/controllers/instances_controller_test.exs | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 changelog.d/federation_status-access.change diff --git a/changelog.d/federation_status-access.change b/changelog.d/federation_status-access.change new file mode 100644 index 000000000..952254476 --- /dev/null +++ b/changelog.d/federation_status-access.change @@ -0,0 +1 @@ +- Make `/api/v1/pleroma/federation_status` publicly available diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 9abad65b0..eb8576b02 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -224,6 +224,12 @@ defmodule Pleroma.Web.Router do post("/remote_interaction", UtilController, :remote_interaction) end + scope "/api/v1/pleroma", Pleroma.Web.PleromaAPI do + pipe_through(:pleroma_api) + + get("/federation_status", InstancesController, :show) + end + scope "/api/v1/pleroma", Pleroma.Web do pipe_through(:pleroma_api) post("/uploader_callback/:upload_path", UploaderController, :callback) @@ -604,7 +610,6 @@ defmodule Pleroma.Web.Router do scope "/api/v1/pleroma", Pleroma.Web.PleromaAPI do pipe_through(:api) get("/accounts/:id/scrobbles", ScrobbleController, :index) - get("/federation_status", InstancesController, :show) end scope "/api/v2/pleroma", Pleroma.Web.PleromaAPI do diff --git a/test/pleroma/web/pleroma_api/controllers/instances_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/instances_controller_test.exs index 365d26ab1..02afeda67 100644 --- a/test/pleroma/web/pleroma_api/controllers/instances_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/instances_controller_test.exs @@ -26,6 +26,8 @@ defmodule Pleroma.Web.PleromaApi.InstancesControllerTest do constant_unreachable: constant_unreachable, constant: constant } do + clear_config([:instance, :public], false) + constant_host = URI.parse(constant).host assert conn From a5aa8ea79603e22541de04c26293dc87bd2f2ed8 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sun, 29 Oct 2023 18:58:57 +0200 Subject: [PATCH 16/46] Add support for configuring a favicon and embed PWA manifest in server-generated-meta --- changelog.d/favicon.add | 1 + config/config.exs | 3 +++ config/description.exs | 6 +++++ .../web/fallback/redirect_controller.ex | 26 ++++++++++++++++--- 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 changelog.d/favicon.add diff --git a/changelog.d/favicon.add b/changelog.d/favicon.add new file mode 100644 index 000000000..cf12395e7 --- /dev/null +++ b/changelog.d/favicon.add @@ -0,0 +1 @@ +Add support for configuring favicon, embed favicon and PWA manifest in server-generated meta diff --git a/config/config.exs b/config/config.exs index f2c137872..247e1f25a 100644 --- a/config/config.exs +++ b/config/config.exs @@ -171,6 +171,7 @@ config :pleroma, :instance, short_description: "", background_image: "/images/city.jpg", instance_thumbnail: "/instance/thumbnail.jpeg", + favicon: "/favicon.png", limit: 5_000, description_limit: 5_000, remote_limit: 100_000, @@ -346,6 +347,8 @@ config :pleroma, :manifest, icons: [ %{ src: "/static/logo.svg", + sizes: "144x144", + purpose: "any", type: "image/svg+xml" } ], diff --git a/config/description.exs b/config/description.exs index b152981c4..27e7f7e9b 100644 --- a/config/description.exs +++ b/config/description.exs @@ -987,6 +987,12 @@ config :pleroma, :config_description, [ "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance.", suggestions: ["/instance/thumbnail.jpeg"] }, + %{ + key: :favicon, + type: {:string, :image}, + description: "Favicon of the instance", + suggestions: ["/favicon.png"] + }, %{ key: :show_reactions, type: :boolean, diff --git a/lib/pleroma/web/fallback/redirect_controller.ex b/lib/pleroma/web/fallback/redirect_controller.ex index 1a86f7a53..005a5da8b 100644 --- a/lib/pleroma/web/fallback/redirect_controller.ex +++ b/lib/pleroma/web/fallback/redirect_controller.ex @@ -18,9 +18,22 @@ defmodule Pleroma.Web.Fallback.RedirectController do end def redirector(conn, _params, code \\ 200) do + {:ok, index_content} = File.read(index_file_path()) + + title = "#{Pleroma.Config.get([:instance, :name])}" + favicon = "" + manifest = "" + + response = + index_content + |> String.replace( + "", + title <> favicon <> manifest + ) + conn |> put_resp_content_type("text/html") - |> send_file(code, index_file_path()) + |> send_resp(code, response) end def redirector_with_meta(conn, %{"maybe_nickname_or_id" => maybe_nickname_or_id} = params) do @@ -38,10 +51,15 @@ defmodule Pleroma.Web.Fallback.RedirectController do tags = build_tags(conn, params) preloads = preload_data(conn, params) title = "#{Pleroma.Config.get([:instance, :name])}" + favicon = "" + manifest = "" response = index_content - |> String.replace("", tags <> preloads <> title) + |> String.replace( + "", + tags <> preloads <> title <> favicon <> manifest + ) conn |> put_resp_content_type("text/html") @@ -56,10 +74,12 @@ defmodule Pleroma.Web.Fallback.RedirectController do {:ok, index_content} = File.read(index_file_path()) preloads = preload_data(conn, params) title = "#{Pleroma.Config.get([:instance, :name])}" + favicon = "" + manifest = "" response = index_content - |> String.replace("", preloads <> title) + |> String.replace("", preloads <> title <> favicon <> manifest) conn |> put_resp_content_type("text/html") From 5d3e145dc4090dc5709a649ee5d646b637da252e Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 14 Nov 2023 11:01:02 +0100 Subject: [PATCH 17/46] RedirectController: Unify server-generated-meta insertion code --- .../web/fallback/redirect_controller.ex | 33 ++++++++----------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/lib/pleroma/web/fallback/redirect_controller.ex b/lib/pleroma/web/fallback/redirect_controller.ex index 005a5da8b..4a0885fab 100644 --- a/lib/pleroma/web/fallback/redirect_controller.ex +++ b/lib/pleroma/web/fallback/redirect_controller.ex @@ -17,19 +17,24 @@ defmodule Pleroma.Web.Fallback.RedirectController do |> json(%{error: "Not implemented"}) end - def redirector(conn, _params, code \\ 200) do - {:ok, index_content} = File.read(index_file_path()) - + def add_generated_metadata(page_content, extra \\ "") do title = "#{Pleroma.Config.get([:instance, :name])}" favicon = "" manifest = "" + page_content + |> String.replace( + "", + title <> favicon <> manifest <> extra + ) + end + + def redirector(conn, _params, code \\ 200) do + {:ok, index_content} = File.read(index_file_path()) + response = index_content - |> String.replace( - "", - title <> favicon <> manifest - ) + |> add_generated_metadata() conn |> put_resp_content_type("text/html") @@ -47,19 +52,12 @@ defmodule Pleroma.Web.Fallback.RedirectController do def redirector_with_meta(conn, params) do {:ok, index_content} = File.read(index_file_path()) - tags = build_tags(conn, params) preloads = preload_data(conn, params) - title = "#{Pleroma.Config.get([:instance, :name])}" - favicon = "" - manifest = "" response = index_content - |> String.replace( - "", - tags <> preloads <> title <> favicon <> manifest - ) + |> add_generated_metadata(tags <> preloads) conn |> put_resp_content_type("text/html") @@ -73,13 +71,10 @@ defmodule Pleroma.Web.Fallback.RedirectController do def redirector_with_preload(conn, params) do {:ok, index_content} = File.read(index_file_path()) preloads = preload_data(conn, params) - title = "#{Pleroma.Config.get([:instance, :name])}" - favicon = "" - manifest = "" response = index_content - |> String.replace("", preloads <> title <> favicon <> manifest) + |> add_generated_metadata(preloads) conn |> put_resp_content_type("text/html") From 2a58596aef655bb5e347cbb12290700f35ad64e5 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 15 Nov 2023 09:04:41 +0100 Subject: [PATCH 18/46] Fix tests for Add support for configuring a favicon and embed PWA manifest in server-generated-meta --- test/pleroma/web/fallback_test.exs | 41 ++++++++----------- .../web/o_status/o_status_controller_test.exs | 2 +- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/test/pleroma/web/fallback_test.exs b/test/pleroma/web/fallback_test.exs index 6d11d4f37..ed34d6490 100644 --- a/test/pleroma/web/fallback_test.exs +++ b/test/pleroma/web/fallback_test.exs @@ -6,20 +6,6 @@ defmodule Pleroma.Web.FallbackTest do use Pleroma.Web.ConnCase import Pleroma.Factory - describe "neither preloaded data nor metadata attached to" do - test "GET /registration/:token", %{conn: conn} do - response = get(conn, "/registration/foo") - - assert html_response(response, 200) =~ "" - end - - test "GET /*path", %{conn: conn} do - assert conn - |> get("/foo") - |> html_response(200) =~ "" - end - end - test "GET /*path adds a title", %{conn: conn} do clear_config([:instance, :name], "a cool title") @@ -29,21 +15,28 @@ defmodule Pleroma.Web.FallbackTest do end describe "preloaded data and metadata attached to" do - test "GET /:maybe_nickname_or_id", %{conn: conn} do + test "GET /:maybe_nickname_or_id with existing user", %{conn: conn} do + clear_config([:instance, :name], "a cool title") + user = insert(:user) + + resp = get(conn, "/#{user.nickname}") + + assert html_response(resp, 200) =~ "a cool title" + refute html_response(resp, 200) =~ "" + assert html_response(resp, 200) =~ "initial-results" + end + + test "GET /:maybe_nickname_or_id with missing user", %{conn: conn} do clear_config([:instance, :name], "a cool title") - user = insert(:user) - user_missing = get(conn, "/foo") - user_present = get(conn, "/#{user.nickname}") + resp = get(conn, "/foo") - assert html_response(user_missing, 200) =~ "" - refute html_response(user_present, 200) =~ "" - assert html_response(user_present, 200) =~ "initial-results" - assert html_response(user_present, 200) =~ "a cool title" + assert html_response(resp, 200) =~ "a cool title" + refute html_response(resp, 200) =~ "initial-results" end test "GET /*path", %{conn: conn} do - assert conn + refute conn |> get("/foo") |> html_response(200) =~ "" @@ -65,10 +58,12 @@ defmodule Pleroma.Web.FallbackTest do end test "GET /main/all", %{conn: conn} do + clear_config([:instance, :name], "a cool title") public_page = get(conn, "/main/all") refute html_response(public_page, 200) =~ "" assert html_response(public_page, 200) =~ "initial-results" + assert html_response(public_page, 200) =~ "a cool title" end end diff --git a/test/pleroma/web/o_status/o_status_controller_test.exs b/test/pleroma/web/o_status/o_status_controller_test.exs index 36e581f5e..3e8fcd956 100644 --- a/test/pleroma/web/o_status/o_status_controller_test.exs +++ b/test/pleroma/web/o_status/o_status_controller_test.exs @@ -196,7 +196,7 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do |> get("/notice/#{like_activity.id}") |> response(200) - assert resp =~ "" + refute resp =~ ~r( Date: Thu, 16 Nov 2023 17:04:47 -0500 Subject: [PATCH 19/46] Upload.Filter.AnalyzeMetadata: Blurhash with a Rust NIF, and use Vix to retrieve image metadata --- lib/pleroma/upload/filter/analyze_metadata.ex | 36 ++++++++++++++----- mix.exs | 4 +-- mix.lock | 7 ++-- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/lib/pleroma/upload/filter/analyze_metadata.ex b/lib/pleroma/upload/filter/analyze_metadata.ex index 9a76a998b..15dec5564 100644 --- a/lib/pleroma/upload/filter/analyze_metadata.ex +++ b/lib/pleroma/upload/filter/analyze_metadata.ex @@ -8,22 +8,23 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do """ require Logger + alias Vix.Vips.Image + alias Vix.Vips.Operation + @behaviour Pleroma.Upload.Filter @spec filter(Pleroma.Upload.t()) :: {:ok, :filtered, Pleroma.Upload.t()} | {:ok, :noop} | {:error, String.t()} def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _} = upload) do try do - image = - file - |> Mogrify.open() - |> Mogrify.verbose() + {:ok, image} = Image.new_from_file(file) + {width, height} = {Image.width(image), Image.height(image)} upload = upload - |> Map.put(:width, image.width) - |> Map.put(:height, image.height) - |> Map.put(:blurhash, get_blurhash(file)) + |> Map.put(:width, width) + |> Map.put(:height, height) + |> Map.put(:blurhash, get_blurhash(image)) {:ok, :filtered, upload} rescue @@ -53,7 +54,7 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do def filter(_), do: {:ok, :noop} defp get_blurhash(file) do - with {:ok, blurhash} <- :eblurhash.magick(file) do + with {:ok, blurhash} <- vips_blurhash(file) do blurhash else _ -> nil @@ -80,4 +81,23 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do {:error, _} = error -> error end end + + defp vips_blurhash(image = %Vix.Vips.Image{}) do + {:ok, resized_image} = Operation.thumbnail_image(image, 20) + {height, width} = {Image.height(resized_image), Image.width(resized_image)} + max = max(height, width) + {x, y} = {max(round(width * 5 / max), 1), max(round(height * 5 / max), 1)} + + {:ok, rgba} = + if Image.has_alpha?(resized_image) do + Image.to_list(resized_image) + else + Operation.bandjoin_const!(resized_image, [255]) + |> Image.to_list() + end + + rgba = List.flatten(rgba) + + Blurhash.encode(x, y, width, height, rgba) + end end diff --git a/mix.exs b/mix.exs index 4e4ce35f8..61768b71d 100644 --- a/mix.exs +++ b/mix.exs @@ -190,11 +190,11 @@ defmodule Pleroma.Mixfile do ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"}, {:restarter, path: "./restarter"}, {:majic, "~> 1.0"}, - {:eblurhash, "~> 1.2.2"}, {:open_api_spex, "~> 3.16"}, {:ecto_psql_extras, "~> 0.6"}, - {:vix, "~> 0.23.1"}, + {:vix, "~> 0.25.0"}, {:elixir_make, "~> 0.7.7", override: true}, + {:blurhash, git: "https://git.feld.me/feld/blurhash.git", ref: "master"}, ## dev & test {:ex_doc, "~> 0.22", only: :dev, runtime: false}, diff --git a/mix.lock b/mix.lock index 1f4eb3dd1..dac911a56 100644 --- a/mix.lock +++ b/mix.lock @@ -4,12 +4,13 @@ "bbcode_pleroma": {:hex, :bbcode_pleroma, "0.2.0", "d36f5bca6e2f62261c45be30fa9b92725c0655ad45c99025cb1c3e28e25803ef", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "19851074419a5fedb4ef49e1f01b30df504bb5dbb6d6adfc135238063bebd1c3"}, "bcrypt_elixir": {:hex, :bcrypt_elixir, "2.3.1", "5114d780459a04f2b4aeef52307de23de961b69e13a5cd98a911e39fda13f420", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "42182d5f46764def15bf9af83739e3bf4ad22661b1c34fc3e88558efced07279"}, "benchee": {:hex, :benchee, "1.1.0", "f3a43817209a92a1fade36ef36b86e1052627fd8934a8b937ac9ab3a76c43062", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}], "hexpm", "7da57d545003165a012b587077f6ba90b89210fd88074ce3c60ce239eb5e6d93"}, + "blurhash": {:git, "https://git.feld.me/feld/blurhash.git", "4cf6e61c9b0824581bdfef10e392fee8caacccec", [ref: "master"]}, "bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"}, "cachex": {:hex, :cachex, "3.6.0", "14a1bfbeee060dd9bec25a5b6f4e4691e3670ebda28c8ba2884b12fe30b36bf8", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "ebf24e373883bc8e0c8d894a63bbe102ae13d918f790121f5cfe6e485cc8e2e2"}, "calendar": {:hex, :calendar, "1.0.0", "f52073a708528482ec33d0a171954ca610fe2bd28f1e871f247dc7f1565fa807", [:mix], [{:tzdata, "~> 0.5.20 or ~> 0.1.201603 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "990e9581920c82912a5ee50e62ff5ef96da6b15949a2ee4734f935fdef0f0a6f"}, "captcha": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", "e0f16822d578866e186a0974d65ad58cddc1e2ab", [ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"]}, "castore": {:hex, :castore, "0.1.22", "4127549e411bedd012ca3a308dede574f43819fe9394254ca55ab4895abfa1a2", [:mix], [], "hexpm", "c17576df47eb5aa1ee40cc4134316a99f5cad3e215d5c77b8dd3cfef12a22cac"}, - "cc_precompiler": {:hex, :cc_precompiler, "0.1.8", "933a5f4da3b19ee56539a076076ce4d7716d64efc8db46fd066996a7e46e2bfd", [:mix], [{:elixir_make, "~> 0.7.3", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "176bdf4366956e456bf761b54ad70bc4103d0269ca9558fd7cee93d1b3f116db"}, + "cc_precompiler": {:hex, :cc_precompiler, "0.1.9", "e8d3364f310da6ce6463c3dd20cf90ae7bbecbf6c5203b98bf9b48035592649b", [:mix], [{:elixir_make, "~> 0.7", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "9dcab3d0f3038621f1601f13539e7a9ee99843862e66ad62827b0c42b2f58a54"}, "certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, "comeonin": {:hex, :comeonin, "5.3.3", "2c564dac95a35650e9b6acfe6d2952083d8a08e4a89b93a481acb552b325892e", [:mix], [], "hexpm", "3e38c9c2cb080828116597ca8807bb482618a315bfafd98c90bc22a821cc84df"}, @@ -115,6 +116,7 @@ "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, "recon": {:hex, :recon, "2.5.3", "739107b9050ea683c30e96de050bc59248fd27ec147696f79a8797ff9fa17153", [:mix, :rebar3], [], "hexpm", "6c6683f46fd4a1dfd98404b9f78dcabc7fcd8826613a89dcb984727a8c3099d7"}, "remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8", [ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"]}, + "rustler": {:hex, :rustler, "0.30.0", "cefc49922132b072853fa9b0ca4dc2ffcb452f68fb73b779042b02d545e097fb", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:toml, "~> 0.6", [hex: :toml, repo: "hexpm", optional: false]}], "hexpm", "9ef1abb6a7dda35c47cfc649e6a5a61663af6cf842a55814a554a84607dee389"}, "sleeplocks": {:hex, :sleeplocks, "1.1.2", "d45aa1c5513da48c888715e3381211c859af34bee9b8290490e10c90bb6ff0ca", [:rebar3], [], "hexpm", "9fe5d048c5b781d6305c1a3a0f40bb3dfc06f49bf40571f3d2d0c57eaa7f59a5"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"}, "statistex": {:hex, :statistex, "1.0.0", "f3dc93f3c0c6c92e5f291704cf62b99b553253d7969e9a5fa713e5481cd858a5", [:mix], [], "hexpm", "ff9d8bee7035028ab4742ff52fc80a2aa35cece833cf5319009b52f1b5a86c27"}, @@ -128,12 +130,13 @@ "telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"}, "tesla": {:hex, :tesla, "1.4.4", "bb89aa0c9745190930366f6a2ac612cdf2d0e4d7fff449861baa7875afd797b2", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.3", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "d5503a49f9dec1b287567ea8712d085947e247cb11b06bc54adb05bfde466457"}, "timex": {:hex, :timex, "3.7.7", "3ed093cae596a410759104d878ad7b38e78b7c2151c6190340835515d4a46b8a", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "0ec4b09f25fe311321f9fc04144a7e3affe48eb29481d7a5583849b6c4dfa0a7"}, + "toml": {:hex, :toml, "0.7.0", "fbcd773caa937d0c7a02c301a1feea25612720ac3fa1ccb8bfd9d30d822911de", [:mix], [], "hexpm", "0690246a2478c1defd100b0c9b89b4ea280a22be9a7b313a8a058a2408a2fa70"}, "trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bd4fde4c15f3e993a999e019d64347489b91b7a9096af68b2bdadd192afa693f"}, "tzdata": {:hex, :tzdata, "1.0.5", "69f1ee029a49afa04ad77801febaf69385f3d3e3d1e4b56b9469025677b89a28", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "55519aa2a99e5d2095c1e61cc74c9be69688f8ab75c27da724eb8279ff402a5a"}, "ueberauth": {:hex, :ueberauth, "0.10.5", "806adb703df87e55b5615cf365e809f84c20c68aa8c08ff8a416a5a6644c4b02", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "3efd1f31d490a125c7ed453b926f7c31d78b97b8a854c755f5c40064bf3ac9e1"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, - "vix": {:hex, :vix, "0.23.1", "f0cacb0334a0b4d12fbd7d8b14c78e27bb3cb47c977f5f9abc66162499d03160", [:make, :mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:cc_precompiler, "~> 0.1.4 or ~> 0.2", [hex: :cc_precompiler, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.7.3 or ~> 0.8", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:kino, "~> 0.7", [hex: :kino, repo: "hexpm", optional: true]}], "hexpm", "394d757017392fcbc594fe59fb8f9a7051c18c6fd42859513d7e0e1dfe429f53"}, + "vix": {:hex, :vix, "0.25.0", "b294ca3140c0357b262d86e9966949949844282b81923bb990668c1ee5a35337", [:make, :mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:cc_precompiler, "~> 0.1.4 or ~> 0.2", [hex: :cc_precompiler, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.7.3 or ~> 0.8", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:kino, "~> 0.7", [hex: :kino, repo: "hexpm", optional: true]}], "hexpm", "be09c96982978bc2d0c501a73e0b65ba58ec94c1afb94e3617029d6ce7ae8c3f"}, "web_push_encryption": {:hex, :web_push_encryption, "0.3.1", "76d0e7375142dfee67391e7690e89f92578889cbcf2879377900b5620ee4708d", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.11.1", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "4f82b2e57622fb9337559058e8797cb0df7e7c9790793bdc4e40bc895f70e2a2"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, "websock_adapter": {:hex, :websock_adapter, "0.5.5", "9dfeee8269b27e958a65b3e235b7e447769f66b5b5925385f5a569269164a210", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "4b977ba4a01918acbf77045ff88de7f6972c2a009213c515a445c48f224ffce9"}, From 88cc7e6a0431385b5fce292179c7eb05e64e3a24 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 17 Nov 2023 11:06:31 -0500 Subject: [PATCH 20/46] Resize images to 100 pixels before hashing --- lib/pleroma/upload/filter/analyze_metadata.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/upload/filter/analyze_metadata.ex b/lib/pleroma/upload/filter/analyze_metadata.ex index 15dec5564..99d1ec5bc 100644 --- a/lib/pleroma/upload/filter/analyze_metadata.ex +++ b/lib/pleroma/upload/filter/analyze_metadata.ex @@ -83,7 +83,7 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do end defp vips_blurhash(image = %Vix.Vips.Image{}) do - {:ok, resized_image} = Operation.thumbnail_image(image, 20) + {:ok, resized_image} = Operation.thumbnail_image(image, 100) {height, width} = {Image.height(resized_image), Image.width(resized_image)} max = max(height, width) {x, y} = {max(round(width * 5 / max), 1), max(round(height * 5 / max), 1)} From 9511212e32649116783e202d58ec06f362d05157 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 17 Nov 2023 11:06:50 -0500 Subject: [PATCH 21/46] Fetch the library from the Pleroma repository --- mix.exs | 4 +++- mix.lock | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index 61768b71d..024105f0e 100644 --- a/mix.exs +++ b/mix.exs @@ -194,7 +194,9 @@ defmodule Pleroma.Mixfile do {:ecto_psql_extras, "~> 0.6"}, {:vix, "~> 0.25.0"}, {:elixir_make, "~> 0.7.7", override: true}, - {:blurhash, git: "https://git.feld.me/feld/blurhash.git", ref: "master"}, + {:blurhash, + git: "https://git.pleroma.social/pleroma/elixir-libraries/blurhash.git", + ref: "61cfc428df3f266bdd20f181d188c6f59da34814"}, ## dev & test {:ex_doc, "~> 0.22", only: :dev, runtime: false}, diff --git a/mix.lock b/mix.lock index dac911a56..0399a981f 100644 --- a/mix.lock +++ b/mix.lock @@ -4,7 +4,7 @@ "bbcode_pleroma": {:hex, :bbcode_pleroma, "0.2.0", "d36f5bca6e2f62261c45be30fa9b92725c0655ad45c99025cb1c3e28e25803ef", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "19851074419a5fedb4ef49e1f01b30df504bb5dbb6d6adfc135238063bebd1c3"}, "bcrypt_elixir": {:hex, :bcrypt_elixir, "2.3.1", "5114d780459a04f2b4aeef52307de23de961b69e13a5cd98a911e39fda13f420", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "42182d5f46764def15bf9af83739e3bf4ad22661b1c34fc3e88558efced07279"}, "benchee": {:hex, :benchee, "1.1.0", "f3a43817209a92a1fade36ef36b86e1052627fd8934a8b937ac9ab3a76c43062", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}], "hexpm", "7da57d545003165a012b587077f6ba90b89210fd88074ce3c60ce239eb5e6d93"}, - "blurhash": {:git, "https://git.feld.me/feld/blurhash.git", "4cf6e61c9b0824581bdfef10e392fee8caacccec", [ref: "master"]}, + "blurhash": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/blurhash.git", "61cfc428df3f266bdd20f181d188c6f59da34814", [ref: "61cfc428df3f266bdd20f181d188c6f59da34814"]}, "bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"}, "cachex": {:hex, :cachex, "3.6.0", "14a1bfbeee060dd9bec25a5b6f4e4691e3670ebda28c8ba2884b12fe30b36bf8", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "ebf24e373883bc8e0c8d894a63bbe102ae13d918f790121f5cfe6e485cc8e2e2"}, "calendar": {:hex, :calendar, "1.0.0", "f52073a708528482ec33d0a171954ca610fe2bd28f1e871f247dc7f1565fa807", [:mix], [{:tzdata, "~> 0.5.20 or ~> 0.1.201603 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "990e9581920c82912a5ee50e62ff5ef96da6b15949a2ee4734f935fdef0f0a6f"}, From 7988c62f6d926729fdbd0a2181f94f409c7aed02 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 17 Nov 2023 11:21:46 -0500 Subject: [PATCH 22/46] Update changelogs --- changelog.d/blurhash.change | 1 + changelog.d/{mediaproxy_preview.change => vips.change} | 0 2 files changed, 1 insertion(+) create mode 100644 changelog.d/blurhash.change rename changelog.d/{mediaproxy_preview.change => vips.change} (100%) diff --git a/changelog.d/blurhash.change b/changelog.d/blurhash.change new file mode 100644 index 000000000..428a74d7a --- /dev/null +++ b/changelog.d/blurhash.change @@ -0,0 +1 @@ +Replace eblurhash with a Rust NIF blurhash. This also removes a dependency on ImageMagick. diff --git a/changelog.d/mediaproxy_preview.change b/changelog.d/vips.change similarity index 100% rename from changelog.d/mediaproxy_preview.change rename to changelog.d/vips.change From 8208777b067d5af382c4675451fcadd547e808f4 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 17 Nov 2023 11:32:56 -0500 Subject: [PATCH 23/46] Rust is required for blurhash --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index aba6ebbf1..734bb2991 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ COPY . . ENV MIX_ENV=prod -RUN apk add git gcc g++ musl-dev make cmake file-dev vips &&\ +RUN apk add git gcc g++ musl-dev make cmake file-dev vips rust &&\ echo "import Config" > config/prod.secret.exs &&\ mix local.hex --force &&\ mix local.rebar --force &&\ From cf5ef1d75fab406275ab07fa8d52a819d90431b8 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 17 Nov 2023 11:37:51 -0500 Subject: [PATCH 24/46] Vix has pre-built NIFs for the following triples: aarch64-apple-darwin aarch64-linux-gnu aarch64-linux-musl armv7l-linux-gnueabihf x86_64-apple-darwin x86_64-linux-gnu x86_64-linux-musl aarch64-apple-darwin aarch64-linux-gnu aarch64-linux-musl armv7l-linux-gnueabihf x86_64-apple-darwin x86_64-linux-gnu x86_64-linux-musl --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 734bb2991..13d8a85ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ COPY . . ENV MIX_ENV=prod -RUN apk add git gcc g++ musl-dev make cmake file-dev vips rust &&\ +RUN apk add git gcc g++ musl-dev make cmake file-dev rust &&\ echo "import Config" > config/prod.secret.exs &&\ mix local.hex --force &&\ mix local.rebar --force &&\ From be39146ecc6d55191f8ed3ec9cd3e113d8ee5e21 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 17 Nov 2023 11:44:33 -0500 Subject: [PATCH 25/46] Update docs to include dependencies on rust and vips where appropriate --- docs/installation/alpine_linux_en.md | 2 +- docs/installation/arch_linux_en.md | 1 + docs/installation/debian_based_en.md | 2 +- docs/installation/debian_based_jp.md | 1 + docs/installation/freebsd_en.md | 3 ++- 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/installation/alpine_linux_en.md b/docs/installation/alpine_linux_en.md index 7154bca48..9794833a3 100644 --- a/docs/installation/alpine_linux_en.md +++ b/docs/installation/alpine_linux_en.md @@ -28,7 +28,7 @@ sudo apk upgrade * Install some tools, which are needed later: ```shell -sudo apk add git build-base cmake file-dev +sudo apk add git build-base cmake file-dev rust ``` ### Install Elixir and Erlang diff --git a/docs/installation/arch_linux_en.md b/docs/installation/arch_linux_en.md index f7d722ef9..dbfbf6bf8 100644 --- a/docs/installation/arch_linux_en.md +++ b/docs/installation/arch_linux_en.md @@ -14,6 +14,7 @@ This guide will assume that you have administrative rights, either as root or a * `base-devel` * `cmake` * `file` +* `rust` #### Optional packages used in this guide diff --git a/docs/installation/debian_based_en.md b/docs/installation/debian_based_en.md index b61e4addd..44c93e1ef 100644 --- a/docs/installation/debian_based_en.md +++ b/docs/installation/debian_based_en.md @@ -20,7 +20,7 @@ sudo apt full-upgrade * Install some of the above mentioned programs: ```shell -sudo apt install git build-essential postgresql postgresql-contrib cmake libmagic-dev +sudo apt install git build-essential postgresql postgresql-contrib cmake libmagic-dev rust ``` ### Install Elixir and Erlang diff --git a/docs/installation/debian_based_jp.md b/docs/installation/debian_based_jp.md index 1424ad7f4..43902c987 100644 --- a/docs/installation/debian_based_jp.md +++ b/docs/installation/debian_based_jp.md @@ -21,6 +21,7 @@ Note: This article is potentially outdated because at this time we may not have - `build-essential` - `cmake` - `libmagic-dev` +- `rust` #### このガイドで利用している追加パッケージ diff --git a/docs/installation/freebsd_en.md b/docs/installation/freebsd_en.md index 50ed30d74..b88853dd1 100644 --- a/docs/installation/freebsd_en.md +++ b/docs/installation/freebsd_en.md @@ -9,7 +9,7 @@ This document was written for FreeBSD 12.1, but should be work on future release This assumes the target system has `pkg(8)`. ``` -# pkg install elixir postgresql12-server postgresql12-client postgresql12-contrib git-lite sudo nginx gmake acme.sh cmake +# pkg install elixir postgresql12-server postgresql12-client postgresql12-contrib git-lite sudo nginx gmake acme.sh cmake rust vips ``` Copy the rc.d scripts to the right directory: @@ -41,6 +41,7 @@ Create a user for Pleroma: ``` # pw add user pleroma -m # echo 'export LC_ALL="en_US.UTF-8"' >> /home/pleroma/.profile +# echo 'export VIX_COMPILATION_MODE=PLATFORM_PROVIDED_LIBVIPS' >> /home/pleroma/.profile # su -l pleroma ``` From 2112e8b5e443a969725f85745b50886335806437 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sun, 19 Nov 2023 10:30:49 +0200 Subject: [PATCH 26/46] update, add images --- docs/administration/frontends-management.md | 18 +++++++++--------- docs/assets/admin_dash_location.png | Bin 0 -> 8698 bytes docs/assets/frontends_tab.png | Bin 0 -> 148269 bytes docs/assets/old_adminfe_link.png | Bin 0 -> 15143 bytes docs/assets/primary_frontend_section.png | Bin 0 -> 26498 bytes docs/assets/way_to_install_frontends.png | Bin 0 -> 130193 bytes 6 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 docs/assets/admin_dash_location.png create mode 100644 docs/assets/frontends_tab.png create mode 100644 docs/assets/old_adminfe_link.png create mode 100644 docs/assets/primary_frontend_section.png create mode 100644 docs/assets/way_to_install_frontends.png diff --git a/docs/administration/frontends-management.md b/docs/administration/frontends-management.md index a311a326e..f982c4bca 100644 --- a/docs/administration/frontends-management.md +++ b/docs/administration/frontends-management.md @@ -19,13 +19,12 @@ Currently, there is no backup system, i.e. when installing `master` version it _ ## Managing front-ends through Admin Dashboard -Open up Admin Dashboard (gauge icon in top bar, same as where link to AdminFE was), switch to "Front-ends" tab. -IMAGE HERE +Open up Admin Dashboard (gauge icon in top bar, same as where link to AdminFE was),__ +![location of Admin Dashboard icon](../assets/admin_dash_location.png) +switch to "Front-ends" tab. +![screenshot of Front-ends tab](../assets/frontends_tab.png) This page is designed to be self-explanatory and easy to use, while avoiding issues and pitfalls of AdminFE, but it's also early in development, everything is subject to change. -!!! bug - As of PleromaFE 2.6.0 there is no feedback on whether frontend is installing, installed or failed to install, this will be fixed in PleromaFE 2.6.1. - !!! warning This goes without saying, but if you set default frontend to anything except >2.6.0 version of PleromaFE you'll lose the access to Admin Dashboard and will have to use AdminFE to get it back. See below on how to use AdminFE. @@ -37,8 +36,9 @@ There is also no way to tell if there is an update available or not, for now you ## Using AdminFE to manage frontends -Access AdminFE either directly by going to `/pleroma/admin` of your instance or by opening Admin Dashboard and clicking the link below -IMAGE HERE +Access AdminFE either directly by going to `/pleroma/admin` of your instance or by opening Admin Dashboard and clicking the link at the bottom of the window +![link to open old AdminFE](../assets/old_adminfe_link.png) + Go to Settings -> Frontend. @@ -53,7 +53,7 @@ At the very top of the page there's a list of available frontends and button to **Available Frontends** section lets you _install_ frontends but **NOT** update/reinstall them. It's only useful for installing a frontend once. Due to aforementioned bug, preferred way of installing frontends in AdminFE is by clicking the "Install another frontend" -IMAGE HERE +![screenshot of admin-fe with instructions on how to install a frontend](../assets/way_to_install_frontends.png) and filling in the fields. Unfortunately AdminFE does not provide the raw data necessary for you to fill those fields, so your best bet is to see what backend returns in browser's devtools or refer to the [source code](https://git.pleroma.social/pleroma/pleroma/-/blob/develop/config/config.exs?ref_type=heads#L742-791). For the most part, only **Name**, **Ref** (i.e. version) and **Build URL** fields are required, although some frontends might also require **Build Directory** to work. For pleroma-fe you can use either `master` or `develop` refs, or potentially any ref in GitLab that has artifacts for `build` job, but that's outside scope of this document. @@ -61,7 +61,7 @@ For pleroma-fe you can use either `master` or `develop` refs, or potentially any ### Selecting default frontend Scroll page waaaaay down, search for "Frontends" section, subtitled "Installed frontends management", change the name and reference of the "Primary" frontend. -IMAGE HERE +![screenshot of admin-fe with instructions on how to install a frontend](../assets/primary_frontend_section.png) !!! danger diff --git a/docs/assets/admin_dash_location.png b/docs/assets/admin_dash_location.png new file mode 100644 index 0000000000000000000000000000000000000000..4e1d110e7fa58474f4c0806973658cd5aa9f2ac3 GIT binary patch literal 8698 zcmb_?Wmr_vxBh@2B{6izAR`?zfJiCbC?HZwNrOXocQ-?WNJ)1|3Ihm3Nem%fL#H&t z9e@8X|9hY3e!CxLWlQVGcy8@Gi$DTmRq{3 zv_BPP-`c>VOlgh)%V|DkQ}zi2Ffm6AtTm2#kL@s_mii7&F)(MbaT8F2GNzXc&PNj6 z5-4x~u4T_i!o@Zr%IM8FdF4pWGRSqYB1d9TB>KXrnJ6aamN*xPGTQvLVwksZLDcO%9vjIy(iByCvQ4{xbT{kZGVgWUQ?+`YcB@|4m>L z$h$H#!Buw?+#==+jvg$?pYgl2*M1+!CTUYD``&Fr?{CgL53Z2zx$A>Q-b`O#sp5yi z^+B+AEX5QW8nGvBS_KW)A0_{4+s9Dt(up!unsry2%sOT`(rZeSyvy|3oLu#GLDem! zDV=T)lY2ks$W2#2hPwp49oUTKp}R7Qb+jO{BGk7vZt5|B_0u=YMSw5@O{4!!K~bb* zd%yXIy-Q3~*_)YB>KkiQ2&I6`6p$soSD71eiKDyM(9)QOF;GYZ4Bi$2>2^-^GgtA zHAVwbNMA%aNslfk0P~Y^BQA!%brWjB$Knb<{%J`@Vv>K`DsSiHc+e4-wu3L??#hp7 zKtN|z^NrtVR7BBt#TAW#>XX`10rF!b1Cf(HBoQt*5eru4+z&OA^@~(stR5o2Wt9%v z9}$tTmCPDjPU`itD&=l;)>Tr%i4f1HvM6V)$#u;-7R8ZnJFJWOd=PJ8{$-(yGzH&? zW&i*~`Pw6+kg!6(43YOV>}qz3x;G9{B7A#H!Lb@G4YP zA*<}*5xWmtB4#1EBFoR~D82@}6|0I|KEpQnWF%0W<;u|DS14 z3uRG5)m{?9{KQ$$Hd422pevVtwLWqW9XJiUxzSWBavEKN&gYn>l3Xc0x{RSzx?oJR zRYklw$ojKe?Kmi5cG2|Z)fnB&YfUZh`_5f(kn6Lg9Gd*ID#n+>ZlsY53zbU6nlbT< zD>tdHxj?YpV+~92)!MeXMd8Mb*zF63*wycGwUQ~h_T4s{K{@iOK}sg1jKk(vTbs^P z9DPUj`&$NtJm0=>M|;dIy|uHll?9skh}VAeglHn8|{8X^-!^&EE!MYqISX(9^DiLW5jEq?=}0UMC?dW8r+02bPYQGnVF`?EbD@ z2mSh0D~E@hp7vvVn_5)E09dO%iXxSnvKgV$7e03KHCw_w5oanA%B>FS=BQ|=GkKhS zJ+yGyr~Aksc*I;rkw?QItvp#^=H;$D*5RCyp3SSKPp&nov^QEo?%T20{`ZH(ANvE) z(!}ufJx2e)vsMS|0M-HZREsV)@pCxNT(dhdU_BDA^ZMY(xzqp4)0v)jF^Q1}nojr^ zgI;ehw-ucG1{9b0*Z?tRiAcfm5jF|b+Cp65hpuT*!GMP2{TlN+o?wj~ha$$g^x4{` zv)xIZPlK(PR8?i~S?|?P5Wb}z2^WZ~dm!%~7p+gxpy%i%@$m@M-(N5GYv$c`-d)?* zBh)R<)#*$whq6IL1oCcUUbM+mPqL{roJpj4?L|;FYW*6Vu*)a?8o$p@vY(8MUfjil z2D8GkaD%C&ATq8W0QcfY+n zK0om!UEXtbjhU~*DWqJc7tqiInVg>(W<6RMNL(*bED;P%(-pcnSnNH_ai=Q6TPez8 z;6W>OSy*yC`-fWLtLt6bg?b^RBY2Ca8hQhZM+@fjJ5##Y=j0tg`!|kJO3qeAu-1w^ zKo?>&#APfl&>GT}b)q*qGj+cE+i-f;?0^ zYYimbH|^nxsTW3xpKsut=5<|PE_2;({R>h&!>mSoQASDbU3Zz@Qzri#R!?_MbX3i7 zF48Pm&;usln{}VF-^-T2k-SakZjSl>3BhAbyd(JC$%9IO`zC=nI!9po>krDo_>bd9 zs2)Y4b&o8Ok`^afkoLQ}Lu4N@F)u9)cXsp*^g4~bFLp|21YP|OdvQCV#F&@4659Vl z8TH2EiT-p*VGR+zs9V$t-kBYrA^mU(RUPz*5uI9T`|?$66>OSp{~XAAG>bz$d0vzU z^WQUMpaoM#Pt5#QLpx_jHH_fzCYNp_?qd1q2*du8=Vefp4mYj&@{+{$>G`>vbH4v) zaZoYEgZ&>)-c0|l(kw%`9Ebfvx(|I}djLTE{{C{jc{*kNXRVg_?Lz#{?|C_HS~fCL}-|uqp>A$P-$|JEBN}wI}1rfK|)XZAUcjHIp+?O#SBhh)Q`k<=MU*l zhAof;|Mg{MBF5)ImWJV{KSrE*2UvG#0DjugipL?2bSa&lP}Ln@>DTO+&A5F9f3iE5 z4tww%FKWaDm=|>;Tc8k1%55vpg_| z-7KrH%wAW^w^IL1>$*@)&)Al5&i)jcQ%ahT3tv}bQy9`p zhZbRBSuB=MbT1~Fl?)Z9o{n@qEM@xuBt8-asQj2`R^||#cLWj&*r}SNo%(b=5a;>R z1o#ruay@mi@45T!^?8Y1Mf3;>7*8F+Ix^R4YpA9(X2Q1amdmn_ zc~X^D0prw9jz-%Axq#HA0ZzOd`h8J~sVxqJ+J}8`QT#StgwPiott#pMEJPs%WH!Mb z`$w1bZjgMsvl>O_L2PSlOo;UPY~bI2z=~>lg9b(~;bF4Vsbr>=(r1z{xVp_ljx7p< zXqgCxn5vZOVAL9_DUJ9uoWfvDwm5n*A8y6Q7l$T3 zrWf}nttuH~3L47RO>S>8Q)Fr$hg#%+Uer|OQ>(RN5O-*=|_Li@M==!ZnH&)EhBSu#6CBFE}@z}LYuMNwXhwcl&98$TUc zTQ=D{#xzfP!-~fV3FKty(kzNN-Xk^3g~$_}`0^TKC=xkIb%N07_39Y5D5wCDM#DJV zVEEfemp*fgF30L@^ff!GCxx`%8=uC3)$YRC?!3;hIu^5juXrg2jbj$e!QMkl?zLZO z-PHI}?OVA4kAP&x6q;W;wdTym0}O&9SNQzuU6Q5@pdMl1oBeKXlo04 z;V|`?BPUC&Wn4<}WsV6No&F(DiiHWf__=pJtc#lKKVec-J1O6>&aH;7^%cXuwn|PX zB>8$@l0?hX{ z8&MVJ7^M)@un6|U$<$M$4uPMm-{o@;7hi)>i6fp^T+F;tp%zDBFnv+wfoAT|F1kZh z;-4pZ3k$vRYX=)XOk-Lb;{I>V3_r{7oZ=f-{6LrH%5vi!%^KKGPX1*&XK{gAPD-Vh zIjg(l4)-JJ>Xt3SE@tYFB$uHucHA>GKIb-bKl&W9oXcotE8P1K=g!ZgYWI#WpDkC? z8RnrPi1vdrF@>IVs5XfCpmQKE*2qj=`QAf|YTohq&Uhr5EybIqiioh@a%NFZ(8ItW z6S}9@t|R+dph&uomh4oT(X%9jpV|psdC`I3QO+VZ!aqEz+aE2a`Bu95sY0?VcUSX; z?-n=J4bEBe(bhj~_xYOvMWt!$5_RRO9(PVb#)KP=4V}3(Bku66RJhLX3MXkk-psuf z+~IYw=KVu_I-wB{Yux^fQz2F_zr80!F!yhlFwJS;p}}v)J9N%G91ggDYmwR2>KFOm z?EFsth^Q`CzfMI<(FiK?yUC5hHS}W(guhy)ksRxoc!uxv4R}yNtoc;anE5_rW_%d8Lj6@TXjF2@0Wtp2D1TYmg<6;l+{lg6JPVn+IUu=7-iuOn1E@t_qw~ZCPGxyT2XeF~QY;InC^d*xjg}#a~X0cut zd9;C)7ntGsry$tQJI{JiRvuSU$SX%-Qt*Z5V*|kjujGwif1Y$niAw7$N;aFQ_=Ss0 z=^ijtglR`n09EAJ2_LBw`p^CfEf+HCbV|H+=BOuFM(_|PaI)@neerPP&bR6A*z^H(;A$MZh%U2Q&b3Ux|`Ge7jqXSUKN z1;xGpg6xOZs||#YrSwJCUXqerFJ7spRlQ5JF~-T#D+?k5uP{_WzslY2Yp9>CmO3_& z&{x{N!tsQCH|*9-=w?!Vau!-!4zcQcu=|YC5V89~I3tb+H*?d-PURTL2}4_*%1@}t z`a*jd9%_~HXpn>GX~}GwlGAfqv*E~;Y%K{l^rpf34}OI9=77mY0m;_dtRGfSXs|x1(#x)vJ3M>{rAXXG2VC=A2>-}rBI%Bzsnz}U274ZL zn|d1x!=a`#@(3y7%#Q4KUHt;tW`pb#b`Avofy6(1=4oVu9{?QK8PwK`tNx91$ff zb1b0|_>-wg8;EYMC}eOGq*q>$VkmN0y*gVe#X8E(*!Z>KlK6!iCNQws_g$W7TEwv? zKZAxP=u4$zLC;Dlm|DBI^1L=l7g$@tj>!s+Ba1O5oGk3dz9>w-8yY5ex19WAA?R|& zcs}&3n4E(nBax^#PQ_o1$I|vIeVOfsHYAMcyCf!-yljuJs}PuI?bd=jqH={RngWR6 zH2&@%%3n*$%5Aa!%|W{yNgJZKuZJZ?fH#m4GH~`enuMJ}m+|!%VS2@;+0X)>R1+$j zrV32Z^0!7EPZ0&y@xX729OKGa;A$CfQyoBq4sHyaSqS`-Af_o&k#G^FcT$5{NBd86 zP=0!VG;6B7^7)~6LwSpD z3?B2wlgP72g%1%JBPZVIXPg^GpXz?bMlauHdWJg`YBBvQ>zNt$CpF_|D|+0pDD;A< z)#dE@M+BAPuFBd#*F5x*w3s+bA-J*dS;dgz3GR2soi+k=;m3n($sm=WCk0oZ(jUYT z^PufB{IByTYQLl6c(G?5mmpa&17+9NNcxJZR?@BEtNh1v0$Hnb(M%h`-x9qa_={Wfk5L| z?Bd-r>n7Z}`on;8r*!A1iC!Aw zj5ZanW+x>}UfwwWTo=DPQCE*Ia?v#em635ev77J7<@sLJ>g5V<$1ZQ-^e<@mn8fl=?3N!EA_^{jy=Ht7E{H1a))b(O zjtp#p^Yf<4=z zN%u$@adLRhar8_XNkMv{t`19HYnqkzwK9V`VZ-ulV z3~XanJe~@~EGz)Vy?T)p;o#`Xb49wN5`vkMfkhPseDM?07StdKAXgIC^iW+D2-bKk zM-(WF4O6Gy`0&ERwl${~R2Rojq!dG|A2IPdMc9ym09=L_GX8={_G{AoOR61wajBrR zV8fvw2%D5=ukb>IX9&Q{TKjS7W8ja^mBJjwE%+rwf^cbGVW znWb5I32_a_`*VPp^%LLu3&iMI662z^F%NJX03omN5~&y)aOeH97p0w>X}u}0SkN=ly|hd?G#Z!uY7`he=KGk~EG z9aPibIY5O9xe^)p@!E=Jc&#ayP{lJ;eFCp=p(X02YS~WuY=k(7 zr$}@Sv(8M8@{5x~mxXbQs7bw&XGmgwcNNAv0@W)|e^pF#m-^$`I|uG>PeFH| ziYJuvfxK2GPq3FoFxSjk_Cz;Q*ncmDA{CiZ0HN}@_FiuE%vXoXOdL*% zbwaqz%5;0|lvMHTcu1cmfLPi(B;GN+us<>(zEQE%!H^`bhXTJr_Qo|LMqyNA&6d?2 zW)SSDia8Lw;+^Z+Y88lAGj=x2)$My})}@naQLFp;QL&{3HACxYtnK@Z++1A&7DtV2 zpAN`~Y3;&eMUKb;gV~zWF^lqz!n?ZyYjUv*^-%}wKt=47t5x;y!7 zf*!6BfruI9WS;UEbfqe*dq}&0fqAknnkbV7$yv=JCuEvqzU#(RwF$$(e3{yu^@kz9 zq9V-Sp~=j5wbIf_rK;8wJmwF45^qk9W~N&sd!?jwGTSX`1<=Bru2RXKYK89g^5zMm zcy$i+r%gXKIF(yf{#6(0{YTfcWhe_cm`CLNZiX@Hld=}zEs6g&%Je~qx}83O=C)~P zwp$^y0=n(Npx@2sP7k@>SN>8rc$0#I6TL3(u4tymm;PpOjG8WwU7{WAiR$$(Ess7a zkl{;X)Nc-n^>399>>cQQwtH|Id2 zE+_JU&dNo*y@TTX&bVxpqpwFua>?@3oK{x}dbE+X+l;a3m{gS>E;#M`d+;6D^Art6 zgJWna`#i>c(8iEfNnEe|y>!}#TcfLDLv!P4T==kV7@Do6v=|c-5`0@^lGt$?d$m+h78|F$KvQ^ z@CQ4@n#rKn;N+35GYN->4z#%|KWmd!)zyK~@}9@{-kw(nmuEezd1uJhXe&tD;oPV* zjuCT~pmYn`UzdmNSu`yC(gbs6tCmhMJ{&e zruu;qaby=jOCjMWZ~g>&)v##g_*hpNcg>H;1NKM%!H(19mc= zR_DIx3shM8v86`W>SMlh5@{pga7|mQd(a+;O#Fp4pq|U2_AxnxSD)MBLggdTo*MU& z9T1P2j!!u88Mv54^No?wz|@~7Rbsc66Z&I&Tkx!`7M}yJx0%Sy+7qk;`%1uzIN71O zfD#@2u}f9SM?UJIW;2W7N0=R&z+A$)iOo1 z@3lfTJcYQDc*fPrHWszc1jtZ@9o?^7-(8ZhV8!hv@YK*sqjOi0S@zOy85XYxFzkE| zAB)drUi-d*Ia82eIEsjlAPI7pxD(#pHKq4Ia7D8-?3Fw7bs4vA%UVub+=+@<0XRo( zX*g)6`z4qm+{)z|I%1Q=DR=|P$j-9RGg#08C8=lOzc+e6Fg2w*_}0p<0*5(OovLU? z9;8a)L)<3soU6bo)EmwBSKME9q#oltl6LvBw6v5%LRL*J#BNlV8l4d|odTIsFe2H3 zGhfr!W_*QBZWmsJgs$-Q5qb%?C@yTu_!NT6sqi(I-PmSo&UH;sb2!3Oj~nffC-E^~ zedN%syvz)goT0q3GQY%@fVE)#)AK&0v@LpQwtjtd0t2U1D}uGIIyqko<4D*}$HcMC zj#Db&nl$mib&2gyUYOynKWEdjPAWA8K1$EbHIXr}m8`;$_sPtn&B)FbUVfCw(co4{ z?y@|c@$fN(pK@+viaZykMHMX|WL`xvF{>-3pv{9Qxvd&;asAAx_K_4?75wp=^k**M z;HJ2G=RKHsp*dRNQfjz+<=yj)C$X`F=*$i#2{Nl5S?q2{t1LK39tp>?uXObK-o)>* zIUgiJX(DqtJFfmb)xu`pW%K@2jA_lDcz>(%j4Dyu$=!&ru~8^nV#dfPko586>WSvY z@bG0fDQLSZ5eLKJVr$2@TUS#j+Oe~_rpBzuK@LzNZkzkkNNl12E!|$^K-S==I!{Ca z`VB-R{Ase*WV`DjsLkznr`(`U{3UMCVORtOoiO(O0xB5+4k#?7mrU-w^uw{SmTAs_$LR z%A(s@Xiqe1zoGRtXq&6I#i0|MZ*@9&`AoetkhA8wGTKeMySv*vyPs50@;5kD{6a!9 zrlv`4FGXr?2i&~cn!hw`ZJ#8^#PAxA7#r5^WY8S$F2EOk4R&V7`}^)+r%X)snHp|0 zz2fMDZ)iLGl}tuWFr#=cCVwq)>%aFypBVV^?<_z+a)~!-5b{2}D(h&`{nzYlclTy_ zOiWxdVsjSxyRVAD7hUYW{-T%gi#mbNr(-6ZiG!b&SVL_G2ON`1A;Is%l%1+fu)bj9 zs*Rq(&X1<(P(%9VsR^01k61{g0{|xXtovVMkbM4j(X-f|e1=VX?ofM?%W-Ne^hfv&}KoMgEz~z2C{ZX6d`@kqaf!o&h%{ zLan8MCo%9x`I9FfdDNP8xmCLL(FX;JKxh)?e>RB!P7wUx-9Y3>UrQ`<_W!@;Q$$p+ zeK5Jtv{j7+^L33{h~BcVoI{bb0$;sN?ZQQf_ee#G)Ou9b{<=-AE>et(m64^2(B?z0aY&w0+d&z;wO9p65GrbwrM`L?93z+YLhClW)t- zGQbk~r{5QyT(^$X_%9|aQ##12wZR?>r*ZBF|Jb9x0_U9A+Q)X- z8!jkY>v#6V9{h-A`|wDB2(@2WQWV2Ohq>T~rLt$K4G)gfpnzv2);<)4v2$>6T(E2g zA6p<}8B``Oz0-}1942Su2=4RsjMqE!fWGRzt51I|hnhP}X^PeS_4{SA2Dig&mkw-Y zOkpWka`({G1mQzXFPc2A4$fP|j9BsEsR^1v50 zF5TUtH!ED2iy~Y+;K`5PgkHa?+K(LY0;}st#<6#vL`{%q*gHF-e~pV3mVUR{PucSH z@=32GpHEn z|NY{{7cmDTqsfo*R*aKA+j05&x~6I#>U=Lg&^XQ1v(TF`#aA~s_bG+pfwD|H6jNwnwN*9R#=0tQZd9^9 zJF!DV!$>QETF?4Ha?LkJZQ+)kJYHI4> z;JBI=m~F%e8OPeaEHJscwPA&YJ)SYBgc%MOJb(G}A6<36hNA}+ueS(~YJGkV)nrFf zdA(2lP+>WoF<1qN!M?B*?^A85(9%LVgy_fHGP4tw(He6Yz(|sQ$(w0*sfbFhqX-d}R zjw>h?(u6{JoVT{Fm9?aVwW#{wFmHTx3iqL%zGPE?gZI)QBZTkp;2`nay~e7ClI*vs zs2J*FU@w6wxSvCi2~Rkm*qvqzWJ~zo0=rCyfCH8XU;`6}8EOS$5ZIk$uO>3GNaeP> z$^AOIF90FFL*~=o@9CkJwY5gr;1Q$lLf%q$ zXaV{JhrfxWs-{N|!b`d8nOl9_a6tSLB)4zV(P^8#d?yk)lyqx`%teNt@qP%7Ybvd^ z*!VrEPp#MD`I!&9R#kTs2u#(>hD%;v-V=L-tW;4}w!Se)P7J&+!Z88nA=lbt`Omcy zQAxYproRcSlJzz-@OFJkcQc^52m??!Vy(|V+U6*RA*QpW->QT|RwX$~4x8fS#L3AAdM5u-0bh@3zRii-6ij4h!X-H87R|XQsD8$gj}`(H+>Y%vaPLTQ z)&3qw-Kwn{`(ZZA>*Tto%2Gj>ZO$p>mT$)(+(kmnsBUu?vyXNjXanr6SSE>q_C)4Q4M?>RrNSI9C`F79wXQn|`T^r(jsal{#vz(iV*wTumU=7(D zpx=g)93A*1qHUR)tk_gGU}E<1<}b77QcuX&`@oKR{Py5W$oyiiFGZk!d*gY8rGU$% zWxHo>tj{EM?e<3t7Wd?e@QwFOLOpLGW}(U)Y7TA$U#+#vzKYVLA4@*}`H+c>G4ybN z&@0R_n$m!6<1Aso!k_ICCX3@{5VhvLLY~A{?&LXNdQ`jk{V`F7DOcfUDANmrR)G&? zFL}&{`lFN0B{H>KCqEV)PFwLcV3WITb9@z2+@1OSS0bmd!~M;ZL|$jPtgu~ID3zsJ zD8r3O1F2EL-wB!w6~vUY9+M8yXZPC5_i7(KM1=AiL|Ku-XZ7}Pod(e2{dTZI6XKm@ zt2O3a4wLb@%@(xn@*A)fP1;p7XF#L93=N91u}y#h2&A12O3AqtO|{f1*47;gLy*pI zl25o|d%gT)4s$&n_l_8yX&w1tUQ7?8C*civvS*9@sBAd88`_K>)+26bk?(FIwd4^@HhtWOT1Ps zp?w6un>_hhM9C#EqrK7fUMgJ*t6!URcz7xZZCM<3IBn7(J%CF~DP+XG{Ykvf$CAd1 z8bQGVF{7Q0vgUXsk-;Uayb@^dwh=9YY?36jlAEekFo|#Xx<7Uy>g)Itj%gR=F6><_ z{%T2skZ}POksq1wAxXb;GLJ4yBxgT$1tst?T^g4itt910mat+?#l|c+XqlMbFNsr) zR@k#cRxFDUVuEy268!cb939QpT!#kTU6Z?s2}9F`X={1OY8{YG;&q%RTuN492Y91z zjb9>y5!GB|_ZD}4QP4B98w|`JIF(hSm?)`Zm>df_h|tNT!SGOIeSN63XC2Z4gNWSU z$#)`y&%Q|rX-kVG7fWh(o$<#S9XSj z5s`e9E>mUUBCHVNP@&MX_PLtUx`~{3R&Bmy>Ew%#NeiCMIDTXm402tP2PvwL^wvwT zSf_Ws`>qg_77^ro#XuRR+6Lit`Z<7e)Y~Qyc_vxd9qC11fowX>cb#c>BTRpxSelU9 z@|~%9Vya@my!PT#U|6pth_<$v$Dkz)YspI37Ishu_z-)8Y%UW*-?xhsjL(L5%K~ZR zEp~pLB5I`R2P@%T<*vSOx-iLolV)V;OgvcdHp=;M-rTY{f3K3x1u%pJN~uH)U^R(N_Fn?)+arEpr~frXWAqkXzdFLR8e zQvzMhZ^GXM=!iqhP|rt#H*S8fWEToDG4U%CA@^=U;4AJ)(4!3a1)p1*k{D8NPR%6~ zRKVL8%BqnQ>;fj*)QvAfT=<$j^3xGau(* z5G6a-W84$@sS(N)05kjOk`q6=wP>s_%sd`@d&KM`tGjs~yJFXk4RY@s4ohfonF6&2 zdwR#G5A!&$w^!TpBJB)g%jvChsiu{*T*fUML&KbeIh|%0S#F0}@CZKr!NOn9uirN@ z6=#-^-AkI(?hxTCQ7CCaj1)@%m2I~Yo1|wnG}#OBTTf{8}(dpkZ(iAvJO z?Bs_b5`HWT+;nVPa@sBGsN7EIH)3LDXNYmL!!c!%7<(BROWqbX-zGZm(vlHbj*o+6 z?}u0ag6Bl+({V+*ZAf4OyOZ$y+69nv+MT?l9b3j28a4G z=AlyH!ASi`WXM<7w8vhNp+`!X^>?>RILBNG-Krmd4W3-C&!g|Ns$vhbVTzj*ZNHkP z-i1{>(8 zjTEmIK10Q5wiv6%aM^_T>h7eo&bbNNBOTXd_hI*~UBvM*F78PW|VUj9!V$0H^UA6&U^ALhl4d4g$x8}mC4C5h-IF(pIJU}zMa#h&w~Vgo^rR?U5p4PXjaky zZRHF2HmdlG+a*0jf7&lp57s?-m&asa@*G5Q_+UokM zC&?%0etYb+7en5sDo!86Puk~>DB7`>una3UN*`Le8@LA8b?*|>L9#&1N?_T3;CidT zH;Zj|Ss%-u=hh)b*<4wg$pe1$rEk92J>hhhovEuJo?60bK8qDa+>$UXD^VpCWEjO8 z?)L%1b!kd5*3?Cggy@k+p)BUqC6;DoeS7<^SM+$WN#fXg((#J!b)9)&CJYx5t0s`x|r~p+@$bfXL2R##yVniLMtb! zsXql@y0vK$)q<}yY|0Rmp-NdB7!fp5{hK8rs^x|t3sdugE%(QhLV3%293Q{YCZFu* z!t{OFJ4-`tk%q0y0ko`$B4f$82z$=tRMiAKO<_aQx zlNp)UphjWd2}e-qeg211R|sWd9;&_|;ipn1qyu$>ZF1D&W1-otjC7AFg(O{DSP=N=zXpJDnJD$&cB$YDRo2H^1G@%x-i?xU1QTT3_&w z*gmlv`XUx!a6X5Q*W7^L$fwfmX?lAp?!o|(fOH7h>9;KbuA^ql_k@+OC@MZ`mkbFv z%bKTGlH)xs8E0n+JG&&b$vsN@v}_@MBO?(-n$pB{!z@hHOv=p6=vZO`8R->yqI6OS zF|g}OAeEqv*_ctr;S=5F3wQj4xTuKOaQG!i#o(Q^8;pUvJ+94 zdKV&u=J1@v-bEOl;H-@wg4N_BjZ=9n;_!`Y*mkx>G|O@wS=&D)d{)ox4%+dy`M>aO za12{Q+p&3uF3oI#XR+hN~%H7Hs(T*$qqDBQ~Sou?r5 zc(jtHq%J6)^S)3ca%G}B+*2xUx}wCXabCXL8R&I!7g79T-lAb~$|A3fXkj7dPQqER zW0(Vz3Ahjl53CBbY?N#{(q2Su&1&_|A-iuV2trvjV!Vh32;0=DF?Y^kwx%jd&VtjV zghe>fbo|s)at+7^76Uw_K@0(kDD17bef#Mx_-<(V-d-5!q0|in)RJ)wsTBNGNgj70 zPhp>Pd;q3Gndq2ae}G7x*6PBd)xt^2ZrlA1YJd71f6~fodO(5JC-^phukgBsh{bfu zKMgg{vsW-f0(n|wqx{DMiLBf+oqciB_GkMbtn2@$RCO6Ye+p~xXaYXM~G!;NT2pg zam+Uk3jH8!Le5^qtxu$6CdJ0O-4K}#+L&02lE*zKb1_B-ipLV5xXa<7Q1G{O(%@01$~LCN@N<8x0!eW; z-Rk#T%sWZV!sgjgzi*ayXZ>{BUozP6<7S-lTMRLtA*_u~eeM)_dQY-vzcmq=|{|xVfFoD0#c776K=jd)*f#Zs2s2tJlw^ju9oW zU#17Au$bbxB{(aLs^&`#ER(}(CD=_tNnNIEebGxR5nzpk?5k<-j@CI`4v9j(zFMV# zd5Dr>t*z3r{NXKxw=n6r6JhOig@wtdj??Wx>UjeW(Q{5>3H~sV=YxaP1)^T3{7Kz+ zW5fVl==$oi?6npxGOtZHos>XUQe^BVsf1B%MIb^jUVT5lzSoccl$S>{OL;c}04c67 z_eNissW2> zSGg#`%X>^-Qs}pT*9{t3FlJNC$iJ8NrJy#7+QZ-B$#wN>klZT9iWtPUMyku+RUNHa zv_Miu)AOeYD+_-_{(Ecq6pqhOWel@;O8qI-7ai5X&lf=SfqL(}8r?QMHtS)5P(qw! zO(xRpZgw6KSv4x}m3eQSeDy#(gw+&?vuNG=7xw{0_uH!32?!MT z@AjbwumS1m>0e8~ci2`Y^c}_uJpkq)=G!xv)u=*E>Th|~mq<8UDDSlxGz>O4$p@ zZn-=t-d$`znhrW~lUpl`Vg20-Eon*uAj%r2Nh*|r?XzszjExdAWU`jLmcG8v`@pI# zx<7l9_<2iUL)x{QKwTJ#Np9Hw{JkL~8s*bIG<)#1;72k=VPWAt*aQ1v3M-kv%AF(z zU4Ee8F>Lom-cR{Q3u|ZF7ul-Xd$GZKXK!z-FEePw?Zaa8raIjnT zYPk|bZ*`1f3ryaU_1Pa6@=x|L_2pfGd2kf)^G4N3Reu=sMXvuB{or5d5fsU}m9 z_QOA~v(}yCaiPF=XlYZDkEs{K?B!*P?h8XiL#f&07caQjPWP{vG|w_S>|A$GR)lR2 z?g5>J)z!^c{q?a^`x#L=H8E_Gk){5ZJ2`GHXFV&R;|ZU@E=Rsmva!J6T`N_O!w;#V zcFPaG-RE1~+Oq0B%93k7XMp)_cN8+WdX1VOy!3_8vWoDqfPR5S>;zvLfFG-<@Otk! zEM7*j*`4U3=wj~v**Q@Ye$$FK<6;GFlllssv;L=~4VA8QmT9i#z z*|nTft|MvtUyJUoNK(qZt4^6!YzhT7a5;%Ig$z<=ZuSx>AQ=>TT5t5Sbh4}Gg(I&J zA9{MHG1DQLrz2W*6gfINf>~=hp+}WK((GW+#5A#d_qB+Xz1r-?#H-6$bB`@qA@pSw zYe8;hblys4_sNQ2eojs%_+q~W`MR%sB&q-O{cXD4UBxr@4>UAW*w$Q6AFS(94nby< zJx=c9xH%8=^Oyd=a3yD4SD2XTwTw$E__33&P|*_0OF7i*miO`8LAztg9;TFJD+!&`gruq3VyE1Pd7h5#gUO|7%TVC z($k;HOdAGlUouI98?xP@KVB2S11tiVxdPi+C8em%o^s&cFf?ax-cHmJsW%|+cqd+N z_qNvgrS$r1N66@hRCjb#X+dsoa;jOtT}IVEp2->xUm2wo1L8OyZ|wUiQk|vNN)F+2dK!bHc>wI%s?tg@b~WzRn^ribSv-FQ3cHAkt!J9`@Vpvlf05&;fe6Vre_2q8uz z%LI1#q0K$-+*9}!!jSp43j37iJXt=uEp?T4uKTn8?@0&bqa|x+`q3>xam47(>($K| zG&QrgEfNhk9fx`xFDqX0eIF@`-@D(_3qO6QzPho2t~5WkRnm&244RWS@tdz}MDLNF z)Lxyl0pf=o5AxKlHdcNu{<@6SD!uo{y~7vQ87p~C1z3a2*=5WALT{<6Z%h4^<>hWl zhJknYiQL6hw9`~0O;-SSs(IskRM3em@GBQ%L1kt1wM)xWr{$BnZV+;CwCh;uid`Ka z?(AZNHUtIWTYTAQ_1R+)4=Ffrs!gTG09sr#*R=+A?f!WI=3RvJ}UT9T6!VpVmZpc7D z2pUQw1G;ud`t~=c6ZbAG0#5*E5oYGPPsMr=$0*J5G@egD073sqB3a-D8K}slDUM0u zvi4dr>Ap~MW*)(s&PZ_a=3Me2lh~`QpwsyvT6{tf3_4E(;*Mc5PEauLuzhBw93TL+ z*!X}EJUu=4y3krUWs5}-1iqls5);##^dN&;H!)X?4fkIU@+$%-6l1+%=W-ftNkt!A z%P!@*rm}*I`H@^Q`p_QmHRv-1Isy5DIb=AJ9vR0#aMLs@8;s`mvGrqzGG$-_TG$0P zsmh>QR!TC9dpckB`0XsNJCi(vES?)e3SF@{Oh8A?YQ^Po{Oh^l>{EKXOoh~>q=kEm z$=%Bz6spKGNGNM?>g%D9rRo=r=jpQ4=6ZU{Dk{<+XqL1uRKhY*@a_T)kVQLEl2i=W z5@fpoiZ`2T&b<=dVE7?Q{U_itP%vhspP9;Fa%Hy}heB|q5UDipKctjd@BZWG=jXev z;&UYPYiI)L2rja`Y?RJa085lM){q1zCA~`O#&6yko}Shfrg#WdRh8o%`ke)3HlKRv zr9!y-GhBoFk-53K977unpU8JFv^oXskM(wGoc9Add5EcTv941ECQ0Y{4*i#VKX$V7 zax3{1CUCaEY!HTPqj8+|m9Dha_}o~;4-5DKxOspX)udvOcuIx`5Z!a; zT0h6p$?t^w1WIuO5;z%>Z0;Nr$(2GM=%z{9af=mbSt6^t8~5KupX^DtC|YQ}4GGW8 z&SU+L3m|#cE9pCg?^1U{&6%tQ^S31c7a6HSRe73sboKSyW7(P&6nf@mEkK-4Pz{U! z{PA3iTP~k6D4WmHZ7y7Nq;6;ZoNMKxuv_5R|!c3cT!{T{u%{z&;T5?z_jW zN#B|7#YEbJ%2dd+fJi-ouv&G-ywbALMdT5iPRpM!7GPa3lR7k{d+?4E$+wpSOIymh zQ}BT9`CA^A6bv!GSpKuPC8^V9D)W+_YZZ058+0%Uj)7M;YQj zG&FQjGLxZxR&dpXyH{*jn+R|nG%|%#I!LvIy1oN0HHj3}fenE9`>80w{$|LNzt^jo z3@#7$@f1F=lie&bYq0EM<;hBb;Z=+O&J+n^4G0L3JKQAQ-NXfiSK&AP*cSD%hhcxE zd?8Q2?rOf%px&Cw4v5r>=NIOH_7Vbq-p~{2Aa}GV1_*y4^b_Ja7O)d^+y20EI-k%I zz=s$sThsJ|o)vyCo{u>xz{NzHUrF3=xeIT+AUfaTQEYp2YNT-7?C86@G-}x7au-PdY=J-VUu@s8 z1G2Lslj^usGgF3AMn?g~Ms!QvN$FK)OXIE<#I~b%bF407{oB)&%<2Rn$XzF>fTHp! zeETb#JEnm4r0|<{mB>SZQsIGf4{zh%>HWZSbH#W&7X5iHe4<-3J}!kacMu`bDfMO` zttJeKDG~JP!@1ohlrR*jCs^l7%xC8Jp{B;$jQXvE>We&xmdII z2z8XLmKF8)QRhY2tX$W}!MkbhJ@~J`eII*28VLtdWVhZ_7c{U_=wF7z($GO%z@3i4 zefcOADl+x;OXA}H#1IbAd)H1~jk;6B;nnu;s;MbaAfsuc{=u4uovw+AGI$51^)VSI zOj~ZHo`YHTzFoXMDE_&EwUUQ@aHm1&reAS zt#Y$^EVA_et)9Mq;#2N5fFyEt=`G|F#Me3F zx9|7I%RM9=N5QYKuqJ@I;x@1#_ED}J!+qRdAk_TtePs92o`||^+5;ovw*KO!#(|t; zQ2;fC;e&CtEncb_L{OJo%X)vrS-buZv*&urU_6?oI-aS#BwkR(xYK*WpTm>A7nF)| zJ7)xIGgG>DV%~kLmR_|%e;ff774Q2ei`(jDQ1D%ldMf|I`?qLPLFqR{grFoK?~Gv; zPXag^5-x#aFrmNlNC=Z(KuX@*0#d)ojI+rV;68 z)%jdo`A5EJfYjnrFR6G?}ajR)&bUltppR<+4vSfxX$?yjdP zc!>_@XSPL`7Fll`v1t2JTA1rngQ~^FwIlzEq)Wu66-Yud-mYXmA9q5U8U=l_+MXX8 zPy+ZtOZ~-@zDE)I@GC?oWcR};j)Ch0bJE)>=Nt0D8rF&`H~fzrLTr?=;x0IwVpTZ~F^mL03CO;qMkva#`fPZvQfx<;nL z>m&K-zjgJ~V{Y-bCarBDIB%)CjzJfT2sZ3?Z?T$jbcAg8Dw<6AvWx$IVd8&z>quOD z|5v3@LVp9!XHpV9(9hvvraV;y&g?0@)*lKBFr>5@8Eh9rtpfQ{KF;4<9UMz1M?r?9 zZ?wK8l-MT5N~CZX7*V=xq~^kDvOF0`eci`9)W<7**a89^-o4X_VU!N77}Ajdk3aU& z(t7ahHZw*J+}g?TuR<}4Az2_yx@2lh%;4;gVJj#Ow*K`YRfB6qY!MrajDzfMtFx?z)kc6%L z$WF6p{rEYkDdIn~iK|%I~hNj zbaeOMMLc>}O*@NvZfe>)R*uFrDmOk+T=PtCiiO%cIwRD-nMF+3G;U>;&#IFFPGQhIu*<}oajyr{$gAR!H%)GqBH%7sq z3K}w;xTCWVNiUs7I#2Pg{@a9IpJ{P@*OjeW0DodAZ7hme8!jlf*`S@6oZKze8bJZc zPnr|q?CJ3c?d6H!f140jDhqBA@cU%I59n-kU1aYqzIJ7}UNJpWmw zADIF6O+=9&#ed4Kr7g_9leC7WV#kP%$3W4(8XtvWni zkf&U*oh$F4<913wYZZJ zqc#NpDq?59R^WR&{IYH3fK>yc8*)};X&QtZ#yVd)^0l%N+w#!W)m6@9w^TZVS=#du zZP$l?wPaDMZvSYKWT(_c1M{Ob(~5x|bM8dzih6NStR?!vy6t!uD31pxC#myRuIlU~ zwx$0wpdxa}&!FJ5OH-f23dj(Z+AR|qix|YI;7!28E*2(M)l>})PpbO*G7t*^96dSo z;NYN=hdL?e(}lzTBs$--aoZK!M7d1(50Y7!g?)OGrdLW%%~4<^a;wb1L#5VO0`9mTb_eFxOMBS=$5TXeX#wq|*Cc>y3L&-F}{+xG44?b#DGUInnB_JecD zC=8;jx4Un=4OivPQn1h`{;O1pwRiF8g_LSaN#8x)ZB%yMKDX%XBqTcyOmQ;zX*r`} zF8Q)^2CzGa#(%46X$g%xrCif8_e8&a|IQ%t3Lo%+;ZYklbKBAhhto|Yago&ud3kxi zM&m!#*GKNX>w!=u=2pC(&e-Mr^SH#%9rSXjyII?JGSqZUbp8QrX*KF8c3YFoqLRAv zNm;!hoJo^DPM!O5PoF*os`$@^aH%&^@J>!RwyuEsc;uBZ5v2uLWc6{gR=~v#|KwN0 zDJ*`tq0Am%7b^bE5V{idboBZ@x>3^)3cu64PlMX-H0mwMnjCLF)Qmei2yj0r6rnE_ zZcBiA=aAwWIC+A@F*Eq8y|{p2w7`)^14odWf1_IW9VuT0zcyZLwF=v5q*9g~RxW;G zf{|Mzy)V-1`@(n>7qJ9<_93F5>aN6Uy6eGwu#`G?R(>Vm{;p}Xz~w$v7JOJ~UGZ~h zf*Ga2{(-~lFwU5Q@UHD2nEySR23fMSeXN0f`SFR#3rFlld4+`ZK61tnFfm6~M+@KyJDDZEa!&mmn z>G+rp!N}0?Fb=)WSI(uSCF@GVp|$N*Z#>w_yf5pg89WYAIgKoT67%N6%0Y~N%b}^6 z|4FsUpS&b7*}})G=M7DxEb?eq{x_!@9&m^CDmrJ z<=50|v$l46p;a0S5L*nQK7)+xp%y=c&%~#n#^l;-h>{$0zg^>M9+e^w_Q$8 zhjtfnO--kFzueh5_dvb<8v?r~O)8oK6z7!!ReYr-8hP&^zK>oFg-lUXoUU~5UgPW~ z4So!jcF&^iXpRS2d^(aBrQm2D#id=I>~}nrj!60x81$u_;UC?Y;g++y2N70cXCNd@ z>gF5?KAe`n(UvoUCE8|Bz;->7z68+2<37zGDy{7mRiCLmGrUK?Qo$Gex;)vqtpSvB zeL+{7bm!wyie1un0y$s4e55?jj!%5H;>Q7G!~1c)LbjI<9t_eIAxR6bWMpK=E4*Y; z#gN3#R7Dk;$`7DM}I9X&HaOD`o?BooTpaR zRIAtoowo<&6cs&SB!nM&NaB?RqPZ3JPlEWnWZwhGa!LJy=(B9eRG^}Rz&?Mii_kYS z?k)}72lWdG5G*MkUt(SRU+9A{0FZk=ZFdzCNp%;p z8l`6#Lp*w4vicnm&lps5EBrCCu7u~>W&^T;uBQF6c0JR{7`qa>nVFwEe zsT`2QBRxO*Je!D-dzRsIpSm;tZsL;!jXWIyX$F8J3Ha4RMWQD!UFUw(0rfpv?c$!W za23D@f4tM%+Y6b6mMrCv4)pRRR<6dJ_%B$oeg5(V&fZl2?cMP5zq4H8j1v-YWpjiAzkqkBCDXr1@l; zO?hn&7ccwlpnzn#x?ZM3IvTYYGrY2kmJLeRuW!M&tW29=OTI63YiFRO9jUbBP9Ds* zT*Nib=>G9LkMu`;czyvMzz!zDHj7x^@n*`n^E?W{*e#^?l_cU=U879dlHHi$H_4m3teyXuf zbL&3*XuFnUE|B8M+LdVFCOx2P753+6tdNiLP$p78dgdNLSjWG36rQ@3lae)FB44ux zoU4hB^RHw>DWYiy3W|!}YXvM=`L8dd2FI5qo}D-g@$xQfDIVbT^!6Ioy(S0FT>vwZ z=uvbW{AYO}t)r(=>}0fgpM@YK#Iylh1{92QzN~bxAVD_&D`;*bd~G=YHa;QDZ&`Yz zWcJO@nMS%WELsTQf3%@P^VAJ01Mym*PQEi^f2FEBhQpqwQErENY36%DE}8j6*lUjy zG*UF#x&bcYb|~hW=bBCvCaswbxeAGjl|?3?3qLozv}RB)>snaAy8?WkWkBy27Z;zS zM_c+&W0}5|e2WVuV!K3R>F@~^0($Ajn(V+2wq&MwFt@HS<1JPrF>Aj@^gMPWR@`)K6POO2H|cpNkX$5@m(h+7A;8gQPx zYTY*}#gS^{BcLcKVorN>NDn`oAtIuo2TqKjkxV6ahd`_DVuNU5+#TQL7>(Tz!ColI z)wQ-~zMm^dEfH&2b01n#xKRpsDe5#}Xr2uUbWH zW@XOY!zo8TeHEaEBl)t}a_O6RpRAVz2r$E#y*L6Zvgj}vIY_AS{ON6aP}#^{pNEjL z-7!keO6fN9n+9wx<@Jr`(^$|>UKk(-rgd9zq&$g_O`#5E>7#4r|DPx`U65QD)aFQ zzT=_kY5~6ln{Nl2t9<47G%R1-s`xYZ#*%;}^zl4mVZMiwY_ULGLVV>z61DSAb3P9E zwZ16;Ku`Gv;|P2+N>ye@q zLLd{$H)_;8!VU}gDW-l@BS2%-v=bG0ss6H5zOk48Pjr74{+61;e?g$6vXXQbwctyP zjAhZ(RVVGvS-4FYRxMFaaq@f*%GkB*RoF{HVf(2S1fRJDOj z(@9ty+V`XP^zmWyDw{VLZ)w5A1elwrO9Bn5C$g;dd)q>w=Py1qTszIB}`&_0KOm6n6U(0O=M?Ahx2dVW#g zw2uW4dq_w@OExwZCi?kSHl2b#QNMpy@g|=M)au${TbMZnKRiu*R?rR5n`X=29x_R| zU4_M$9ruaB0p+522ymFh#eY{-RUwhr2P3I`Hx7;tclXU_j1y|CMqMtkFmt*u5u$1Q zsFq_8t^#T#GFY6AV&+|Ak9fi%)*E5D>GL713% zgeq%vEWm~v=Z}|b&h#PBx?5OWJkM7f7`N0C6lpDrP@&6I1%pdBs&5J-(4+yg1=Y@q zc5#J7bNMZoq(GK{-JGe6avCWB`r>qi2#VlQ{gV3-jhyRMbxnqZ;yoI>Zk*x>kxS{s zYWDlZ%nM(qz0HTyY?$u&pzwu-S3uVvz61B>t5iJZ*oL4J zCLl1Tsv%5`t`nf9QByp)I{oEI)KyP^_Nld=LgEwUovV!kMY}e5d0(bT>|TXvN%P*` zJ)zmStcGJm%cT^I|2p>&-Q<-LR%Y2~1+~U+OPy{{y1y!dtkEd=4$pclRj8*0O_)56 zbNY1e!>b@D5zy$g1sW8XsduSy4i@YOTRRsCltGw_zBKVLpnkaKKfTtplstQ6xVzAM z-rrw~8SpVduI)dwQ4U}+oVA;6wlxc~qQNR2-+(ek;@)sh=yU;%y<7)S=_j~;DYR(tA9c|*MZli1`b0M4GCA}4k%<-+Q(^v(F z&Jp7in$*GZ8lJy`;1IQDjz*&|G$#S_+0svxWCHa%1fMWP@#0*K;rhfQa3vxJZ3rH9 zl~a%bB%6Jp)jUK^^2d=YFMhhsOwU0fDg1NnS6_2Le+<3$=+0Zh-t0h_xT9pn`PvHU z(7)t6LZE4T)0HzM1QH(%@OH|<=3;>2_;UTn&C^7L)Q*({z59#E|L#zi-v`1}`(~OLs25<#og7|J>X^Ok2_0S;6n=#dG$rI?V;lD-o&x1D=-24)3fD^q z5{k?x>L>v+(D`aygT2#hTYy$^5sF7b_V0S;Ay$V*K(7YCyO#3w&57nVJM4xgYOgCVn26QA`%ksa%~jRZh#g0qpQA#kzXEY<+_(LjaI@zPG1tCH>s&}k(;v|5;Lu~toKYQ=iu zE`OpG_Y0H9c9Sqj#b1p~aO01QZ|VyKT!5ILHJ+W20`)A`cWz!)EiY*>mkd!+`ZX=p z%r|SGL=Xg!k?as_1-w%1U@*yF6uIlU4{$$L(is5AXs12?gL^p({*Su(=Lq{BBTUZx zUl)!?ntO_@@evAmYW4r!d?O&`D_~br=R>Ix=SfNXKfJxIoFb%C+--|9R z{+jc(?!(o^(uEwhjSt`{{-J!$NJj%F{Xf?V^#d|J8J}*k?5$z(Uj|<#jf>^uUSsoa zqgR*dXRLlP+ILkk%^Nd7-l2O>h!3cOV*&6XtzjnsXsD64UY(#7ttZ~Aov)bs?1w1& z)1i?u`IX_v&P(A=`Hp-Uz9jcd&2e0+68Jgz^aeZOm zAxKd~Y(_1nvSG&xy)2-emOQ9>wfV@zA2AeK3?6QQz93BOjZe5{f0#sGC_x##^86qSYwydF`PH|>er^Kk;`3SMxdyckOi_Vnxw_Qrk%N*Ixf=)Yx zi6ta-@->*XKD7vqmZ%EvY+NyLQ(fXH_lCIZe9{~GUiNSB6xVO(s0&zO1#6v#&r)VT z$;YUl$KgS6%S1}t07 z2GdrdenY+B^cUjX!WVbLt24YYYmF-55vu#!W1oM0)20bdU=PaIWb6%#(Xb6He`9Da z_zyQ~9?gp`)Em^4%)Yu`ZPdRhM7w&~Y*>*gwjzi@I+pIO9q@ikf2aG@5kZ%&)8Zn~ zJ}1hH@@1$fPuy!qzA!K}WPH5F+bd(;yI5pYn^ySIpuI3v$IZ7qVAL!wQ|blh?@Eu& z9}K|%m*Gf%-WL&}n)Cc#p=o8L|Za`yI*2LDi$+T=`t)~ znzp;t*1;@yAp0T=H%-xw+oeP>vO6MG&ut}29`+f?|sg>R$wAjydC9ah}Q+O-OMHGvX&r$+Dy=_}Ryv}^kHQ!$8e&a?kgvyH8m#!4?Yc^j-KVsKL5b;o)WEtH}#wp83I9^q?q6W z$z%~xs=yj3+gMf@$q}BPe*N_osdF5N)Q!e#>Dp%RBYJE!JN)V#5`N|yEFASI zv{l=3c@#G#ir*@zla}> z4gR!0hIoF-^pXP2)D`{_ndX=3Lk|4$B{2bgCvCNy&(=bpopf;R7HZLo?bgU*jN@bHW@jN5AI~Yoai;Wd)=v`e zZaFnqq%$+K(ca8YHCz#t%3&TY{MVk^TlM_4(y)q&-ziQC&$JmSn|;MdGb8|ni`+! znhSVna9Tau@~nu$$TQr*<#32!xJBMYP_<)GfW2^ucsub+%TQPNbE^yT-MO(}MFS)l z`JzDelqn#_MN%r2M;wQxy|*_!q3Wp2@m{YXVdTcfc&uE7w7!8;8rtr#z5KE(h0X3m z2m90G_Bc_p3OTbq6ZcpRXI$-{(cF2pQ zaBj$_)!OEDZfNL^?qPLYWdtPhh`7ecLJ*XT<7-shpW^}|jyKQ}$!vXtTySJ$WT|#T zMdybj816y&(UvEpQG)R;Tm$S_%qWpUL{Fz5J)qIjG2>Uy2}8%SI$f*H!eSofT)vbk z?NV#wnA96JA0{OBQ&MQTxkZE3<)Z#$5S;^MlrlrfQ3B&H4NPNW%2l+(a{WiiJD0=H zeh!+`h0OvKy1Yy3jJXQF2)4F5db*Z$=kzMJ`y_QGGG~Ra`Chy{);{PgeEDt|Q!+%P zTgM6ns;nxvm)Oi273Jl+-U`GXrVEOL+28F06W$)r zh*`{+H1~oRzI36xB|>?rH;OFGGM$_heV!K=#|He3pJxLX9Ll{w1A7ISPa0kztE**| z%}eJH42~)M+L2Uuvc9>wauG}4HaZ#()@?LZ-4quWw|g-9HMnC2=Ip|vlaYDL72eWW z&Z{`n-pk(nIs8=d>r<|rQIVIL{zR>Kt#esrrQUeS55`;-9KUw2e9e_R%PWJC4(yIt zn`g(ls(vl^PG~YrFDgXDzwaYe-j(FHuc=a0=v{Q-r_1DBodLx|o{rPHg)is~qg zZ)&}wBaCCR3(rvB0>PkqNJGj#`9%x3VU1d!mZ7vh%Q%` z=o}vHp|TP#IF&!4-+W$fd*xn7agT|DH9%Fb56Fw)r7){p$SFjZOEUl&ro zfkwvXYDtFXiK@Pvq>ewi*w&;{sgbv9_-Ojby+_|%qN-lMYz;~b0TH9ON$izvgOkzK z2~|pET1+iJpw4#}vGqv>58IctH{y|MtB!@#dGh~6ME^Pyf|m!aj>LLP%Y{*L_ehIHJ6iz6zyf})6spoU?y z+9v|5Hu_F<_8!%Z=Eq0#@6A0UKO)B&E01QoK*@B%8d8_Tz{I3EcXMQ8XlJ54FxUV$ zU9;8Ph7GaS6C-3LgSg`}7p*#eAre(6SgGUJDAnmOQm!%(sQA@V&!NlSLr%U?CQiIi z_2QekwlFa%M*;N!ZJ1DZpMn(+bwH%pKsh9?yLhiOfKusLH|Ff)ITr$b) z>uaA+5QDw)k6!8_2(GujK-945RW;(i0$r1UOB%JGq z**jKY$q&u%1v2!jB+d^elHS!_TCbijv9htz8*RVWb7k~K;Yk*E{RD-vun^1aKtL*y zqB+o6xW2VDmMIP08Gn5AK`AjC!rpVGv^ZSLo=A1xVX-5ev7jT4xt(LWPA_S8bQr zERI;R`u$Lh_vJi^j6ZlnaP>QOky7Q)1bl6sj~DH^A9q!X)Iz=u))&XonbJSrnqkBg z8!6|><-hGGm0j98I>U_P-m`|>obPsmHY4_?M}JzZUfFNDVKMB)4FOR&<_gsJI z!IOxXbnKS{gX4Dx&+S;8#3p-qzb~!eJxDoJIz9ONy1V<^bNn&UI)lFy%9Mjz3>o(h zrb1afC3yi9dxl+>iUE$NQfP~QxJ9r9rEIwT=Qt=@qix=|G82L3gDef7b&>6lc zTBBZc{jm%v!|P1V)6#9AAcRAFL)``rZAecnOMgnjWWE;K9UN`8Ytn21crw~{EbA{= zI9d}ao`teN-G25Ng%a%xQhcjh3C^=OA4!^0-5VQf8LVf~7gLxc;IL8fm7)3v`mdH7 z;A7+B=&TQ&t*orHg3@~6Q7j)-<;SFCZL!qP|GQLj?gX@%u-2aSlB91t;DzES%tNJ+UD7E&L~ zRj#`ADTK*QJD#*%cCKx0we8v@`1#j-l5)ofXWg0h878_|9VPMrmqpJhutq)_R2BYd z(6=XThYg@~8q3yYxH;b!0O|gL(`r7~7?Jk~Pi<$ih7hOf@I3+jTOJK_0VMoD?=1e( zDBeH2<68aQX$1?_U+t2Z^&Yv8=u=a9h1Y!kT%8?TE+(DQ6@46Z<~C->mvHn=s4`=4 zncM=4L9aclBY=X_-&Ni;ES4iT`dgS!BJn1H9Dks-ecWrs^M>Ji!BQ-aJL1YIWDy$6 z`Y8~f?@R>!NvJxzuN7xBQw+K63`z5kA$7y$?ySD#e(D&k^=&a_QoLP6? zK^kvt;r;6c`<7^$)WyKg-=57QB~t|2Nriyw{3&>nkLibp$4jWMJb+k2 zTH84Cqqf4>f@z<9P(or_A-6fs8uMqJjS5TgT-8x{ME*<@*qp5`i^*&nt^-L|PLTaY zw@?tDL9~+7+HjW_Gr@Ix$A!!*;L4rzz%BZ?$YmqWUuWl#l(~*BUpSYUzo1s(%3xzO zk$SdwP~*%bHf2OY%Hmtl>RQ=QYqR=E09G`nc(OuFsn(fkiTcK0;@w=i(E`a!@~B>| zEtvQ>Ypgkltgf*cjG3WDu&XZ?~yE{Jn7 zkJ}FK1Ie9nez|a%YZL0;ZywY_T_WRiwEX;V4-S;_VkL+5p^;m)4zFmhHzGE&e@nw9 zAgNFfH)b^vrJ;S@kin*lyZO+CXA~6K&!9!rZM9_R;V;oZRD`{C9glPaz4?~1A}d6p ztu^m!2KyYs?c(Gw=^$`E^Ni^ZRepYcMf0>wOc^r#c2CuqOx}8TX*gWsY^5~~$0gn{ zmkBWm@mbf3_DlSEd}Cwd1xRjc&(iTvGRUf#VJ+SB8)IcB;jBqU!)bR7*T)E1eMa+8 zP~qgNmJ&47+D#6$VRaVB)>RgQ_V`+_$7%tm_DH@^`zrN8?$>s<0^9pAA^WX^k?IW7+IT!tY!cv`jv~>y{-8#T*n( zj^LA*x2;iESwF=UuM)@-sX__NlF75MwOUVjq@HRRKte`H)eABzm?`m&&}Y1*Wg~{c z)F*{KKj=UKPqd3pR?oJck3FE{>&xas4!hFQQqbrKm!}dugT9MB9|TkUGsU9j`wtV2>bejEyjk0W z+t(mT-!(ih68s`lEJ3a3!i^uNdgg9>;Y_wrS6?*sRTQLi!#U(g5e$eivss#9gb$P(`^DphSxetKF+>285y!95!&aS^<3JnWU``BSKZS_GO0*`~EiZn$g$3GxGZ zs~a5?C403FZ*=>))a2!vMY2d9MJe#XLY^W}npPN!9f&~*xrL@pon~`Z2;QGB zrI6!oLi;wRXAM3U7*)JArlh=Sn1R+vp-@y&**QHE9!d(2tVH%1Oh(D#A0z3%F+k{& zNLm4RZ4Y_g7lD|0Um7aT@PYyp?zkK7r_2W~-F&S}On0uY3rTee-9hE8dKpzhg;sIRGZ$d{B)KEYJ77 z`7omoEpjCl9qsMU5fQB+CZ;Cmc%0g6X1fn?0}gwu1v_QS(s`)a*(CF1Ca=@Je#d>T zja@GBVEPqoepH;v&Yrd7|nStapZ<7xoOSp<_740l|%Ma z@^!^r(Q`NlLr&`}IjN&W`1^xc7mk*B#m}_bZ0f8I*r9J5ge_8ea)y#=#@NjIFR-i& zsr+Q}RvlOPQYV9|RmKa|&}a{5S2v`wDJlB|YlHAO&l48SAtAjO*q4(pTp!O~IHBBS zBC^;%8gUiVLzd0%xEjg;b$|ArkndmftVDV+N78{d z{t9SiOX_Ofvg_77ba5m|dq6%He?v9Nd3^YIZI>;H*LD1<;d<>D{`3?b2$)e&4RvL@ zU9JzTGN&p(Q zUG7=Y&=wM|Nz)3`CNp3Ws>XUo!s777S6pRKmt2~nLAwrOH=!?b^Uzezww$i~EISrE zP~s$cG)toaAn?G3bY)SHWQ3a)Z*J4`Sl}d?dWLA4 z=jRjiy;*`aS6%}N)JPr?oD03JZKZ%6xnilKr&&L8l(M*y(X95+r(ro%NtefW^9yQ9 zK%i$?H49JC;62L@!lq9R(LB|v3oxXNFDztY5%Ga0HCj5x?whtL3lp(1x5mr)v@i=g zFlo@3M13-@{#QPqnl4l9J7#6kG5ObRiK1Qg)YFWG_iQ+#V9u6lt;CeuX!09Q6;f?g z)6Hr3SCkRWle`rjXUXspM84m6ps8|EZVbXj?+)N$sL(4;dJabqLV)R?8 zJbR%0dq1j(KeE)(R%@UXfaoMCq%(4AQ%i>e6oj}Y17fba@5^H$B+o)aWBWTzo!Ff3 zP6kFEDPJ0gh!RE^BY-l+*7{@=!&C7)24bNKGa)gP_>t2o2(8oTm3Sk7bkQDqNSQ8w zB;7YLH5|?5_Pn|51WL0m?g$x*uj?Bd7%F?F#`-F& zK|Wx1h=nBtI1$sO`c0szSQW|1882~tXJV4+T=!)xMc;qj@c(mY=zJ!(iIP`(}kOU+TOH0eod2(E*oq0r;sE0h3 zH7n9Js6U`wsWd8rn}*bey%Q3Q7e#pB4^%irMF-k~3f-8N|(nyv-P{<1sMYlDhZkp}+Mc4JlWmENQyMP|F zE=w-X@TEs~1gs{vAZc~o<}r#Q-N1^9ucg|`Tzj`Zr~ON-SWb!20wghO>+70Wfod!I zqoTD(^a4spJIRyf^V!uZRe!kuC`(PhTWxBeS$xai7+!sgqOv9okwp_{2^o#eL%=J9 zN5easOtOa!O3uV&Hl1vPmfl;uCu;b9ny3mkY=@&b<%Cv8=YrO%+Ik$y0Z;bq4|XDR;8vj|7I|p>G%O`6fgq4IH_>BW_*_Nri})pX6>U z8ch`hi$!NlRZWeIKzV)p;S7lXeS<7TsGuEM2Oe@iUL20)1i`|schiVnMtm6Ut1w0BC#>J zU_Wj&Aher5Wxfe?)|EB2tZ6trHx2wunY^N=<@C={}ph;Z>Uvz?${U{jMrbip}EB)o2!wTwHnfR!Ssvj zW6;GNE!fvlps+H)P}4s+F}=Ewn$y3vB*Y~ z`%7?|?|%u_tpR}xXh~*EBaG54o3mD1hg`s|%$270YUA(3*csVCGMdQk1nGRY6-0s_ zaD=Yc_cWk}7nJKqGFxcWK7U{maEOAE>>HYbv$nQgaQT_x$rX%@JpVDR&X;bgvW#Nr zZi2$`0n0kkh^wgJr@vp8*+G0YfVex!pg(DxW4Xt)Yt9ima*Y zZ}N`wgNNa-J%X@)4Nc$CRC3IU_sgpx*1bo2p7#A324KpR} zZglx^z>M6<>2pTRPv$g|ZzuCTGcuq}m6IHEjIVHLBlyY?H^DcAI@cf6Gc50d-0R_PhDB1Sm(OkQnr!Qdmx=X`CT;(IVY1pKkzFQie0?p^a?0v zFb~4=0Jn*~lf&u7_6jgA#)2S)?+7!1^m%3Pq^YOZ2|SXOjh&Y56;GSJ#WXdX#<)vt zQT!)1wIPKC^?s=WZ6yjp_%d{C3ZKA$J(Vkk(W zJCXL*)(*UZk_>%wo}S9?hhoKU-tqep=i`fBIFVFxwz(qzrn3V#^ zOIv1$?mqjy!xa{2Fpq-p`3m1oyg)wJU#%Wt`)%pDSxA_YGJUOfFswRUA5kg=uK!f{kw$kWR@nI7Fj$2`c;U4l~=hE7} zU8k0*uI@kgm1tPX&{dUyR7W2gjU>t<9#`VCtZ=lP2WBw@EIU)m{L_Ao;dM*kb}fFb zFDWl)+GX_?9OB?}!{ZhJO9yH*aqxfO5T4}Fpts|?kCIKPGCMraxyiM`9jD@87NJ=~ z#cLb9OHZVJp(Zw@{Run4IGZA~yZWqo3j+F-r}4__=r-2MxCirXJ*^Na1? zc}b@GCNxx3r8+|#up08;Upx9I#L%_263$d=qr97|$^!c36HzgN!yJ*2APB6w{-o>I z<=l_{(J9z$-`|V) z!A~JjYWz;u(vl`a2f`G5!>I`+9N4XIsBe=$K;M)Yv}_R(6PI7QZx+^t*kN=AV)=Vt zPs#|YPboJ#a%K1;>8*$UaMye3t-Dmb5g^Ia**{*L?bBH_wgMi;!Da^v)`p&^CwstE z`RiW9AO@ILKwI4GI~d(Lcxigxyng4DA+{xQ;~6LuV=Shm8ooM+qJ7GDn^&RV0z|)y z+0(rv-#m4uSnM$p>*Hbb{ps=)VoG@itz$?ujk-HH!IOxbnVL(8dB|Izygc~p5W}C9 z-$v+xbdv<$er0)?*VdL9$f`<>MoC5ZmP&(`+EqEfjdd->2E>F#CH1?Kp#yQ*fnpHV z-QTO#ccE5Gqk!dPI#VgjQ2A+Yl6rfgoDvWr`-^s=E^sK=R9^{!m1G`Mr1LQETWAnC z)6_{3LceUNhKRV;IiMm2nz2OOchxbW-L3q6=Zkoly8RUghLQRYhiu1aPfO7sLQ?*{ z<84NWY}?u45aG>SR9IX`f6W=z^rbj=96LOaF;Ndm%K#L$5JR2pLwEUoqwsHW@6c75 zIr>fZmE3oLtA&2(+vsdy+|P^#e@`{Sz%1&FnrG+JGToAMy!Aj;ROFcz>`*kSK*%CM z$!kc^jC>!7V=YQv7ATmIg5dG~1^5~23NLOV0x=r6eK-Q}9#XlS$sr7~0Y}-|1zlB? zubzMU=VwI&$PrI3`Rk|EZ9d>YJ~YMm_ve`e@fV*Bzf?W@=Xcd@(^Y<~RB`_2#h>gC z)xT}HKWDJEMnGrtdHwIV@p#WENK;_N`;07#BC^+6?$@(6gMZ!zygV6=q0N0ufS?7a zP-yUER=TmVv07TE&W+_1cXqKVB1oS9`3z{9A}gS9ib>_k<$k3=h`dgfH-31YmZ&(# zh6CI1+qu5s%IJ{l4V7{ype1}pT6vnEPMv^09&B2sKze0|{x#k8{q^qC4n#$e8{F{N z%&@5cI@|hhG{3DNe$V~d(PjPM<0+t|>E6F+?K1>;UKs!gf&WeyI6Bj4OoKvCkK~ym z1l|guG@g!6qz%v!u)xCpYuz@sJLHiKgo(VDs9$N&yn4Q}p>1gB7bB?Kwk(*)=`u;X z?HAR>`5^x6-sPV&^U`15$i;o-<@OU~w_#8zP}J6iMI`hAQT0h%0c-^1DQS=dI|ZO* zyNNU{a^=c1y@(PSh$`6waG>A52{vSMax(BOb11BhF=1G&1rt>w4>CS=ZLSuz`Y{_2 zCP2R#1gscMePhx2fw?D!WVsmvTEM{a2tvEnqf)B@ShL02jD(9nQ|ei23DMOxwNg^4 z>zfB0K(eY)JLXNpSwg6q?d2S(HRSCo{Zz8Gc*hLn0 z*2HYYQNZq#1r6aRsE2wU)9jB)r4H<-o4Bx-d*ZzA_%&=bcXxaEcQ)s&89qqq08#{= zcyJQyK(;A|%~|E|-z0&x}y-z_Jy`qQOOJR(`BPgd{;+UAf7oGSY7yc(Qb z6d)t9S*@Z2SSrm?h_*c24bnV*xkOAu6Vj5=xfd-RsTt!=60{4U_24gBpPfHH zgF}93-6`Kf%687(=1kT}8PAsu0Bn{_#~5@Cr*A+^ahb!dL|IuG6mUwghpRA=b|=z2 zlHLK8OZ8<#fAqULo31Qo8fNpko=_;4JjIcq$VjnuutA zt68$iYJc4j!hL@Q4NySXZ(Z3FCbN|h_-+pqx%U)*?O0B1S!>ZfNhIhXT_ZD1EIDQ) zn=mt&Rmr=kr4;X|ch?T_a49(xfKG$GJQ|>By6^a9lklR!DyXthdAL@W;ep)>H%i1? zaKpcTwE6?Ewf3i-+?jAHt*(2SKtA%z@`eG;5EQLz|BJWdg>AhRIMcv}s&S|R&=Des zii$)MTUUeE?F}N$c%!MYv&%0F&_V`8yA0(qY;A+iVRs_WJ1UD9fd~_07yoqDtc3$>rJR`4Xlg z$UjYwHeSrs31cPdrVp&n{o4)>P7d^E89nXoouyZGUxEAfWhr?fPc@GKWWc+Jm~4V| z;nVR98RAKk>DK6jI*ae$Qw66ap2NYE9W8$V|L7q`qR*S64xr}n*vOa7=j3R4DmicV zSWNZLE*9qNVt4`3k-NRw3j}#cu53Omz-2A%tTzCa4YtNdol~%tj|Koy{sdwI15TOA zy!WwDrDHZo1>{%stsvwBAz|?~ApX_o+tXRk>ICERbkvHgT%UE*0UiMx=;blRUI0cj zV`WR_LD9Yx9@zaL_PES7nAp$^Trc3P1_mF@0p-^8f!*;LU{Lx)vR`2>cL9#z=`sMK zZ+kQk+QxWdy*Pu^y|w-Y@)sl10Txk(V^E5XR)6Ap;*X*zlASN_*#XDoYlk6OYvdO6vO0r%A?tr^?~G0sUF1iG;vC2Yj3bC?OjhA~REYdx~6m037|ZDW>_)Pa#eU1)YUW)9!UEdiru!CvJ3L z`~W1ih<%HXhR$JD%=Ko&4p8fsw}Wc7N4Kwm6Zr!w{?DktU(i}{Mpw_!5Gf%;fUH|e zM^_z!o?g6%k!CRm z#{f)oK<8rvjvQ25Qe@}=FHV!A29aSmm`2C=LK&48l$$mL7<}^}oAw20Pmu#ERr7N~qMr#rv~k zx^!)GDJiLDV2ptX|Gb#d%-y>q1Ec3}@PJ=b0TmBh99&#L*AoHO8K4KxL4^n0?k{*pVREq{|RzfN8YxSQu$wjIk&dI@6pfz&0J~gBm8_NPc@|05KE5aYdvR4W!Y+P z#h&8|U8!aF2Adob^7?w5uS*ATvbe>bck8fKvl=%h{$piTJBZQ%8T9w!Q8?&eeQUcF zxOC{*Kvw@Q-Ug*(#ipmH2h_~am>59`iI2dUX#rdkP<5L7`(L7=i7%uk6&9MYyHB&; z{|WE00^e~6is_#2Zbl>Zuk{oWk%?k@^3i78z`dKVc0fb4K5J!^jLrcMz1@2litd3D zS2xI$qX33LX~l?hBRwlEWI60wqsBJr$NeG^>#)XDJx_5-I=^V4d_+V4HnMX`33sZi7EdYy?A0q1SJjPSB=#g-)0-=ce`SQ1 z_TF3FQ{$f^CIZQDJrZ5*t&*nt5_$L(ecYyEdFjYd%J#JHf(XQHsU`rhW;UcQIk(LVHeh`}MC1k#;d4A6F_L7>=wQb*bU8)@$;d6j8mjQSUi1 ztVIVrSI5GYjW-zp=q2zHI~7x3&&c1?vq3!;IOCT%!wnr(m6gx%xW60rtlu<=hNnDk z*PopszVw8UsS@2gU8c%*O@Y{k0;W#F!O7?6Go%c~7x6$vPV1<1nB>x(fgL!RUohO; z-Q7OHFDrc7?x5Uni;0>2Zd%UB6sftDMjtb1oSgkJyizIVhc580T7Sn`@0@lT12x14 zXdV&3uLRm??@-f2nnH_geE6iK$8%X(G~l83^igsnarPs&xrD3P_bXv`@(DXA-&yL% za@D|UBd%i zdif_!?~m{8xvLf`K<)|1+4!gWo9f%!=Tns@zNzh@593NAa;JFLB~VJ!#nzK<e(mznGHu_vsI@2Il%{cawG46{^EmjIMhm`Ckuoqi*Qt3{l2FR z`Bbz2;+L)G-YFkxUsz!SVc%%2tt+H=+1 zua~%YK?Z%`6S)bhu&Wz;2FrPaLre!Dsv%BliT|NG8I^jjM-kPP2s;DW>-gki6zTaD zE3ih7wTqJ5_3X-?T=j)sM$tyXJn*mIaGSpdNZpx}#{ znc?{f_xvvfuzjJ{l(moEaN-U_-EjUDP`{L!oxCTh6D;q>m)0>kXAd?)2)n?@LhRk) zoE#ED`$R_^?4Mm)JMi@Lw{%}(KB|zk4Gcs9`UNaQ;9@ae6eZnJIX0*{)6CTWDiS{T zh%~jiLmkkcupcY6TX@h03>gI(2DM#_*Ub*q=T)SUP97%?!Ar%X|jku6U!Q`0dp>Fy13`9xs!#X1zK)`flDV;*Vf!=bvmlYJU; z_~W|(ZXcOqNqdJ)Lrc&;3N*3QF#yK&U!wzqn?{PPeF}w?rTA`^s1f08R(C|jm1duw z0LyPT`!Y?+7C^B8k6loAJNWAJaz8*MYxUv&i+q9l&`wj(ExmUspy4}PJC;WBRrK{- z?x3vV62VB$%uSn_T6}S%TJMvn1e6@xN?XqE?&Yf<29u?V;_k%cK~M-jg|9#-W7ghh z#DKTfz0WrF>49|j_Ud)&pJ9Q{1YaWFJt~SA+=HxuP2#w~9nQM_bJ-?W{I(z9#%w^9 z0x*>MxNAk(@Ajc7oLjBhs=vC2I~*m&Xct;jh+jpLY#jawb%E&Nn)2HUWp9}<-|@u( zT9H@1K{Z+EN&@L%;0yPO%vT{1%#+(~ZA{|v#bGfo)w$j!Aoq5weFNC!!D(qgy4R}j zz51)OZ(-dyaZZeLoC57`{d6?6$NM|VuP3KEEnDTRR(I$;_op02QT|{TJuyFx8dW{C zHUFp%G_jx;ex5eJ&}bb4n7uRr0r$tTA%PhMz;8W?h@d9)>4EuML9lNDqQr`Z`1gP7 z7%RF8ctc&1bA`(=ZiT%6NE@GCd0~qG-{MB%)93snM0h>2(!F2d@yahp(xvJAKmIvokK^_)8_lA6H*jl~Hnz_gqaZ0Xs(PWH zHGosiRcAnf_SpkkNLYAnI10{dD@qBt7VP-!j*fQ1?0~jccSl_ z{T#oG+Hf^fzO$!HyM9TlIZ1F5ilvseW@6X<3C%~4sXw*NO#=Zd6 zoZNRixaIi{DbO82=r)^0i*?5Ys@XZXP7PaswLE}7y+&Ox#ynh27sf%wO~w59w^Ro9 zw^LkPTzE{3!c`Nt-eyM?449eg)}e=h&QPT7#^(6!MBquZQ`Pm5rYbN+@(j$D&j+1P z=xiOfz`efrbGYM^$P=HI4ZYFdY(zQP*szcJaVjEVxuSC}N5`g1 zd`>R{9t|3?zQw`dn?FWt`{&2R-%q~6w=#^C8w-Lf2dFgx8IfG*5peOh?ZbXG4`%s!BMPyU;kUMJ`Yx$m8SX#W0dLms0_ z=Odr?UjM@aOeC_}z#dVk%b~z$TV?sTFVySCz62x20FssfGgGRniI&zjS%9~HTDO%j zI&kT@PB);2aF(#p3nxI$gNjdnwa^1!}(>$sx1frZe*(h5WVe)Um*Z zNQ{#I^!|mU)_@PSbLqF&XH812wc>L>gKMC`$OIC8JxlU(b6J%D&>r?4LP8|TP|xm| zercebks4IIuZZ4#Xo|6D8jpq@0$Vub`l{Uu zOE|ESv?OAW0b}(2-@;>S%hkg^2Xo=%ZG-9kCFC6c;tfFjXpom1PP7eX*H@tJZz~JI zG#3VtEVM5h@vj{h^&w9KHz1Q^%{Q@3PRhT;KPxhe??l=?QLbaYy0+KW)fE=dBLV4e zpW_O#%8aMqoF=5V_S$s5))Uw~SoEnhUp*NM-9M@!J&j=km|g~qUMr3942$F7qBjSN z=Yy_Mvoq15_Bh<$!EqQ=Bfor~Ya1K$fw{m3Zo409PHtaF+@`&C2J8ZWnYi(JTle8| zfdUp~n-4@V@L2BopLHER)N_7*L6r3RPt%@KODsU7`#>Yv0!UMn`5Wj+KqCEJUpW1Y zhNkI0GyC-F_4O4uX=_tgG`=mGo8(#c(o|Ohn9X(HlqCUf?-SPx9P_Z~=wLAtLL$~s z!-%DZ98o;^bOQ;@onVLoP=Bh4Nd`0f7@I?J zKdjjl>~(c?!ZoB)FF6Pa%iFi)<5VT&!(J<4AUwSl5Phu9&}%J*dZWPe2cCZ%ln}C? z{;JvS&MlVA8XP~tS5g|5E|YI*^*wWjGU!_Cq6_H4qA``*cR-M*yN$>LBfJ=tl#~D! zambQ}26{ZAyN8EI>z~PjYVcG@Lc)jwllu|v05Bc;lSbc7Y>Wh{^!M*|0HXrpU>JZ3 zdg6}|Q1GkG&ewB7GG)j?@y0s`?9ea~Iu-^(*5Q;L*+o7ImuZT2pdc&Zi+{*8dIjR4 zqSAdz!!2@1x&egsu1?j_mr>;N`ww1Ti%uBN^H3dQirhyzJaWlA5QJ!+jlyKYlckU~ zT=IUVND5t~*$D4*0Yrn9=;x0xgYcX>cYQ7)@`5mBceoyfMwMNf22~a zSFH=42N_%-1k0ne6i7>!feG{x{W`}3?S+m0m2AY>}t*J z5%NvfPlE4BoPX-+|cQ z5d~6CF|ypv+%l6wLqkuR&w6|g`z#;;d+WxN9@MvpS2O=~5g?(Fk^RZ{a1~r{D-Wj& z#cBRJ(fZr=L}+vOeOM1Y@!hqtnk2?rA&I2Aa}gXoFBaKB?0W`!Mzzzvnn;)@u`Ce3 zFes)cx$3pN1$9@4elc&4sFV;H7{r&$-xVL&{YuA7FA%*3^Gra%T(AQ575eAe)9Vrl z1dQ-(O|+%EGCwYR4lSa1*R<3O4mJs^7jieD3p89r{svh9w9B_6`8Q zsOuFJ|tX{e;e#otZ*JZZ(b%F-;5aLQv5nGC$2$;gZRq(*#xx;q{?>d!VAR zmf^(t7%Cp8JqT;nZx|Z$8cp3vTZ`ciJuG= zN>vl)8YLquTLCub1*Pxf9i^bjNM=?RxJ0o$Zuf)+7hwiie}$y0Bl`x0tauH$9ng|#L&*7imHHqW|t($Nea zr(?nW{;Dd8VBn^YI%t$%l9K(5omK?Hv2^r|?G=d(RyDwI8#7ov*dQ1F$93*|38Jg_ zy@tI_nbT{r*ar->Y`2cZr4TDp+I8=Q2k_h%@!6#iFw%?x{&ND+(913+N08r0zE}iE zKL)@@v(}eL&N8rdcBAZ0ArcZ2>d<3@4OXf-Aya9t>RG4aU>ZM9 zv}w=(El)-QY{Bq%crBhQ=Fl5x)niAr0xik72+}>ai1Z%oVA=wAGhmkS|^BRtG-C%xa%>AEW7YMKq1I z&ssU5Wj>@`{aF=<3sUc2$h5&;#=t_w$8E(FDDq8@ zZLw^DQYy#N(-F)x1PLJRN>@oxNA8GFQ86y`JaSu7ERn80K>Z*hA=Wh2<$T!0$>BT~6>v8IVlUNUOaKc9+j4WBA9SG>-%H$9 z;2q5ld7OpHN#e1u^(C-FM4~$MBlL|lFcnqJ7EjlXQ`|3ijb(vAm=Yt5F;qNCJ zWzI-(-p(>87LP4_`y$cJt@DXYeT}5_6!DUz1EC~iGWin)57(G_5_rCTrF0rD+)0_4 zI^YAt`jCV~MD(@}8%8_MEA^L-Kp6tV$H!M|bI7}eve-2|918p)>C+k8-SUvXR?Mp^ zLG#P_8FmF??|7@gTcQ`O#^H$t?#|&oOe#%G$ zgKO-;cVxAHMIM~OnGwOwg20ckM5WvcxTRdFMGP<_G^keHKbcfV$3)jMmO)Uo!C1aW z85Q@1U$ETb#OmhHX-ka>whTJ?ox|ZX4!fhZ1c!3S!1Tr4-O)7sJVj&HX2rw9~b=27=_5*mxqgP z@5N7_@jOEGhHl@a6umns+V_i#Bey&`=_nIVyF4sk_D$Jds^b_O)CDH2YQ1xiY184# zt@);=rdbh#W!m2zo*6AObL)8fmpKkaJuOYy?Gq?|L*QzZOOcP!Rar&~z<(~Kqo)%L zd-Vb7?+y6;lf5>2*S)1y|5?qi^ObK3sM^}v$((zpR5$+r)fcM__O#$#B5c_FAI9D~ zD$8~27e*0~Rsksi6{SN-X%VGMQd+tMq#G={TUw+9q`OPHySt^k;mqgV?_PVKKh8J4 zG1k~??6p|<#C^?c&R@+2tR<@|dS$1%E``7&JFvUJj|YJ0ktJHP>c1hWX*)}F^wEh4 zZ4;AMsxbz)bBZIL0*XNMBzHd0Kd^rE50P!8>cM}bRQ4Wn(SqXQ7$qD%Ue{`BYIm8V z{TP@%Rib;e?o$1OMci(fpk?B}K`nyz_;GSDDG`ECf9G&zok!fhMARPehhgyFh{EkJ zJ0%j5l0S>W@FMRo6OoXF#>9Y|K+6kBC|Z&V8}DC_6XJj87{gMP!h*khLv)U?u<#%1 zC!%4Cbn>b9tZ}NurAUVL*DIPFlx)I;jUyPeJBDrjjHkO2HT5T&cLP0~*_F1dkzuCrrW>A0G@;2V6umNkg=g;CRcGz?l2zB2!&hI>^dtOe=W z+Q3{&Iz2Im9f?xp{e!J(9}>mtyn>=9DoJ(6c1RQU6c1IB&Zi~*^QJZ*Aw#iAje7ul zNkl^A@|=0$<#+QFXiai(*j^UU4I+^JW7RENaed4z8E zUv>^LdsReaTls1(EeTku+#1>s)!?7qdcRty8E(zg2>%!6w#NGDzOlIli;MLLETdq)6%+r@8>s!0C(&~J_DT93r|TQIpn%O*LY7T8um#iE z3#$W*w#N;%k0=+KA`>PX^jM2Tg;2?gg zT$@%p8{QH+^U9VI4xYTO@v|F(_NjtR!n+$o-+-Ei91S(AwIF_<-jpYpve-Gkm$L4sh&-uNGsp&)1hn;{5{+s#ws?S zU@temO7X8q-`Pyva`tcId$s-|LL8YagMeRJ>8PyBj5=4x^s9&3Xw5<7zU9%xa9mHO z&~=Wl1XBF|K{Rh)KVnfk@BiDM`XEEGnoe7$vD{&aduRUJH;}Lr5fS|m?c)tWea2BZ z=*C1-%#9hrLS{`WVjTVupOg~M8Xx^`|NDP`Pv1C&Ehj0cn|UKq3B0w_kIbN?mpNZQ zD!sg!x~r<9qT=9GrfZ>f4^LMY`l4$dN5L4$f8Ow&Z>9co*H`>v1&>jRxg|)VzWRfr zT?dj+Kpf-kC-IP;9uvzy1^wT&1N?^$9Yj=5R|M|H1O4(;B7F9*tyaP}57WkguGb5n z{;4$&t2VJxZj?Xg={Mo+~i%GLQ5I##VXr%~Fsq*4rhEe@rH9CcuIoL0Y)5W&NOXM}o-5GdF z;mX7}ABLg+=W_V6W6@D)IXe_~gGC`)e9^PHU-aLfA-t{wJ#QbjUoQ_xly)*(u@?0V zQb3YH8*uN|BU}nxiq0Iy_2TR8(IU^{4)^!XioUB8eD z2|{p!HPnXX+uQE8x(nztUu$+4^#5}AfKM3lBQUr1(>(I}vNd8KB1x63xKHKs+!TXU z`T9>uK$c3r!wp?woYbl;Kekh~Hx=%F9e_xjIu6}4-l;V|4Z=KeIC*cJx5G?y)raJ! zQt7WX%ort%Zt+=Jk@L2rGhR>b-^W+S<4!ox1Yu!eJ(D#I3CXOh>;2Ws$^Ipn5S}*U zULL`0rTwMS8Dtpb^66E+K+*<_`GKe^n_1_vgmP#|$Rm}%OBFUBg5U*fb!xpc|II z`^?}YrVhAowVN5(#VKVO$vQU_MqoL41!4!JuJt>GgDQF%iog0JK9LOeD}0f4U_mZt zTaAaj!re-|UwC#GgDUXAcAP+b&@Xojz}GYJ5-Gq}pTO&QmOJ^vsjPBsh{(uH-{U&| z;g*2IlYpCb(6e@S&Tl#{&S?sg9CVAy$gJeLON)N>P?nt8yV6peY_Wt{0FnJbKWsjm zvPiYEI@1!(XZtwW6K6g$QJ}32Bi_MvskqD0gYeCpV~kt3JVn3y{Q(JaRDpgia~$>A`z?MTqF9Q*4eeZ8ydX5+G@?zoOjKaF zwPkZ}Yw(V@C=MA{dmHOY@tX2=kvC~gsY>+~q1ktlH=N5o@ok)bkslk6OE@0c4E~GS~pUYZr0V*fg-zOSdkrZY{}Lls7-&XR(M0qo7Mb*%BB^HzL8NYoM&KC$kV8(5Fp)US~joK z-UTDa>5`QB@81kyw&7vVQf?Y=_f645;dHSmgvA8$u`eL_1EirwLqBQZN||)u@jk5m zFwoY+T@3rUiz&h1_3N`pP(t4JF{OHqQ+$7F+`9^+8fkv0$B4nXA%TCWZJ>s)vJWJ) z!h!LBLOrys8;?0;8WQ@;g?Pjx^PX~3MaDZHt(@X>=kDdmM0W-F_@G}podOSu4M_}Q z(n_-{6m`S#&fWojVN@d$wA3PQXIG?=*&q)nBrKYvu)F%?R$VdRzDf;{{c5p0e0f=Z)S;2Vk4-!%V-)u`cgbY&7ouJQ>^u>)TKcMF0hBmX1qU zvAAJ0l12cR%FpmHO6a&IcdEOF$tr#PWRTu3_6j;E*yuJcZ(?nYkggP@zNL|SVF^+L zyG<0f!#hSy-8}XViNw}5!yjf@ftRaKH>DO1O8lw8{K=!7%T)QIb=xbbz`CdAfy7G! zW|`$~SQB03lNgea&|NpDi_|Ko|F*vPfe_kp`j;%sHVhQ%p12WnTzoT%^}>zRtP#hH z-%KHGdM7q(qTqMWE2S5M-afeU7+}j%UeW+ex$T8g1-N+2h&4ocg58cy!1A{bPN0RPoWUq3EQiv8?IMo>cvdhJjShVD3?T0rL{Ge#_i>j6Fc@)&5OnQ-(H&P?*ArVB77`)|d=fFM2~oZ!IFJ3xTu&fxY^-^oGCSG>A!RmIiYweP)$*<+n zw1sKXdI#P?-;c@-R$n3PLQ4Y?8qT=ja6;MG+$0*zC2STJ9DuLGBDQTR;ArsKCwgk85;V%qMrjZ77UG+#UFO(<3w6>U%@+d9ETxzX&*E}r=~#*Q%LE`du<2SF3Ed|~->N;UYF*yIn$_i_ z``_V=w!NWs$BRYUrytA^dUnV}oZrvAFB(Qj?|RfTxU2ion!e{OKn)$ETq4!i+@FZ$ zj+&{dQufTPmj(vQm@WD0=5@a_@NT15w_I%BhZsWfr?~c>?rfj1^ik1puA_A&_LTan zZ&FcFskd4RG7=DwQDV0%8>B72+Zq_~;yZU+*)7DJnsmebBr_6tuyysQ(v7DMx*%GW zf?JKSShL%|O){Q6$iGt(rq!dT67vJ8l+Zj;0p6z66}z{)Q-2G^%j)n<3h}VEH_cei zA8^@i^1TFf1%|4A^O5`o>fJT0pV!9!)&h)&z};#++e*pkZtMQM1AK(Yy5*4K#?aO1sH!aHG;di~4=pXAVcdA2{ZBd;i!}mz>yOT0i*mLLc*Dzl* zs1|(r_UCnbl(qIoOQWn|##p%_g-Fn4;~yD;`o<}#72#atWYpKMg)Jwp134JfEQc8( z-jwQKi!V)*sN-i-2m0+{UhEM=4M#FkxwA!~x2y6>2V6}1bd_@DWU=sNe&=*1fkEul zu21gXJw$dHH-yqP4|Xc7G_z8VSTRWwoj-@)sC`Nzl`ItIiA^M6hu^oa1DuoEul-C! z>)RDAEhop~7s)`)!IY2|K=SNpK^tit^-Bg`^Za{@o^kA0AOFB4$1qRHiv!)7OE+Vv zaC9q{rM4~P!{(#@)zxHSEdd5FUHHfTygn4Pi~if6L`ImazA(af4#^v{g?*HoPB@`$ zdY#{SanR75hb<->F1>3jnG4EH*@z%mg4ebYW0?-#HNCd;PCW(g~9&d~p|NtJURhzAL{iAm-YkF@#j znjLXvx&A&2W8yPD`K-xZf* zjK4n?L~|j+beA+bw2gilCz?$a5Q9!gr>ADd$J@W5N8l4#<&n-oX!GaTQZ~->>4XTR zyrQBXRi<257wZ<84#rLbNDA5WO#?f(A3yf9==Ovx+LDdYrfM|Ya<~2aYIa+|xsz|V z$C%NIPA@KMCh^`7tcRH%40gV1ZuSVqmB)TP;ael+<1t_rfe`U`fBEn_j#ui`ifR1f zB5xnEG#eV=J5gj3%71_4XvDPcNXmUAPvh4bfNr}J55D-x6<7F@`cOp z0zV;wPRGE2N=ozh-ULJ>(8*aEJv_<{q$65sfa`(p72@Me)>Af| zWHUM)lyD7HaSyGf-K zh@})>9>VmLw9xSI-^Ueu+#FV6TKxEL-1OhfEU=Uo#KukrcEKPD36|ac5$i>@yFu5N zU0|Fto+)9sa@@lGJ=q>5L>0Ds>?6;Mj=2J_z4D0sefP-BUGfaa02l4wswlL2jvOd};21t|h?P%8ObndG5&-WWUP5qy*co%NzK&R&kX4~!~c%=79PF~37V z)-|-wd3soitg!d7CHZHXrpLv)rbF@4pLm;m*sBuJ{nDTdcqHUmUQVnO8QH&h9Rn5P z)zILb46<9KU%h&~6xU&OHo3nw`Gc#zM)H-;y<-ag29TNfDd)Ux z%3=w5+ZV^>?gJqZI=W_W;9moxxjs30-)rLP2KS86_B0wBp6b+IrTmYowzY;-`fRJ0PG(s>#lq4%nRc3%Sgvnu8P}viqNR;VrvVIjJnsU( zsB<|yI$CT*dK01x|BUzFLyR=fEsV88jy=?#w_02~I4Rt!J1#NLeLOR9b+A2vEQ4#m z8BlZZA~4YB>5~I;A=HCZ$u+r?=_BfAG~du1ZN7F(fKR`3cIe=BrPoM^`J6T?Ua<1_r^(M2|qU$zA(gY!ogrOoeYNI!uszdiuw7}Bj^k3W(kkK zD!3iy@E?9t(Eh7YtQr9EYOYQ;$*)eWfS)z#N!{)7yvk5exp2K;i|4NDNi(YrO-PW2 z#F%FsEc1UdSh+aoQhnu0MG0&)%E?H%*1~Y#glMU>k>@;NbT221>MzL3^))B(4)k$M zddu|e#kaHoQrY&lw<``k%l6d4aKRbK#J0j&FI!sa`RWy9n}ZB9%HhE;QFZmI?qGr5 z2iB131RETDeS6G3g`NoE4PRXNb=$k5c>P^gJK70rP^S>>P;gs$XwNA{xlAS&jqMZ} zM4;Yr_rcH8_|u{4+={9i@n&Jv6vJOMD@I-ChwXSf4?V*;$#1Y^R*dbsRqs70cZg~U zX}ho*401E8y6uGDF;sWEpH(3@*YbzKp~=PWIr*2H$i(~~h+2Xu+*1kJ8{EI=7qczK zE2R~sbr>tyU|E&lplWVL1QMejuCJzqkrEjtk}st}5{u;72A*^Re+vw=Vv^#ovOTwJ zhRN_wE#y;DR@FPBV~wXpLni*{v|%)1%E(8w6VA-<6!_Ss$(%{@;NGaK2vCDUlW}v& zRFm(HUMn>3a7vScZH78pJ3Fn*KLEyn5U?U;D(^OIOC!O&31ss8reZXNEX&syPh!eU z`_aAacjaf)V9oXN@v#hPpIqLoEW4h)%NWCI*WUBkr&EARYh^%LR7!0+c!hICI*WV8dy*hngk3H8l zl<$Q!1qx%~7(m+tRBpauVaR~qENxYvL*?r)vP6bY=BbqC23&<>j^~%9`%ffHM#smE z1SEnM;MXm?p7TK_MiPX@xs0wM_YXus6iwh}<nu4mU4l76VXRytFbLezkddk5cQ+yK3OB|jYt@; zoIc$6AzaD#W~>E8g=1nVYvfet>M>%LspIEEphWeJA|Iy8sYlGOxt1bIQ8K8lq}y{Wn5$u<2CjP^*YL=<;f4&;5m6&}r+7zy5&1PR|`29@@R8Cc}34;$!nMIuj1; z2ezKI)MHr_m-<=(S+AR8hK&vQSM$$o`(MD5Zah(9_F1c(>h`PY7*6BY;^K5}_BY>V z6o^Vltei<{!HDuuN?b{4y2TxO7dY7ZP2bF=TQr$Qi{^^6mg+^(L_r}J8Lv)&m zI}_>ZhM>aX-V;{JufRB6Als<*`O%&0JdREESavosQ4QH&9vs_`<8~&8egVc@o%b^d zoe3Pzd(d-I6fzn52L`Mealy?_lMoSARAh7Ws}SH8KERaS4S5SN?L5VuKZg3^@ZU-) zS}?;GN2MasM^Mrk$tX_}VyR->9*Iu{A~S^n_csUCNn zi`1%pn~Iu`FTNTLr|`H=`!@rl@w-|aYJkI2 z8CqmM9WLa4^~S`+B!5JE>@?4H#6rDtci!}-R+Hp~NDvuV!V{pqkD$U{x4u}6CiHxW z?*#?Cfr<1EzT`{UXDreFP)%2_w5ii%NLv1^C9aGu@d%s^=JPveP8is0I*43uaJ zv0B?VR|#(kS|BtrAmzBIFsv=sn|EJYKoY9MeNMD6atSJ8RO}u6S!G-D#IDSrlz7i3S}}sYd!5{${mZx zjLj`~ym*53KWd6h#lzv#gjgtm0B0GG|GJSX!DXyvvF1*F2c~BTj{mbQ{XUCpkDPzM={< zzOGR>e+ju++)Hzw+h&`jga!Ld987_L&O`P=007p*A5PxH*8D2yaMtelVArTF7nuIo zsyq&!t(z!LqrWN7zlfhHbYy?YIx6Hpr+y|nfHDY|CJ&dV+jj_rHP+s37yur6WAoSI z960P_%&UP8y*TU<17-1B+Ljl67l8Z(KHw9UNo2BF8`U(l;^|fY<#yC|JFX*qc{P6_ zMXrdOfisAl?-4sAHs}x&zO6~$Q-T3QXJOv9;UHwDhR^nh_wxMU#{k;)!j@7(Q^yDh zG#(`qNZ{*J5E_he7iZ!T6Er5b$bd2BmY0bEzgD^4BN!D4DlCx>a;Z}=RJUUUOeMP< zC%L(}A#h551sm@N@naVIWj%hQWAglb%W~=0-(!CcGnUhK+X~k235qA`vegz?E&V;z z5nvKL9>u~yPlZeO1sAu`N-WaO-tX5|1rUzVy5eK~F;|ux^5HgL_src5fhzCidAL5m zrS$n<&oc@B1MvV8MOhj-TdJQ7FqWsvi3tmP+THBToYuUs-YeqhO0i7#aVQ}hJ195E zQWvu~dU@oSLNkK)V}^^yndp_Gg-l?glbcW?pL)_m{Sum`L));VH8LHV5iI85tgH>KWkU{|GWei3&^Vuyyq-aTDK&K(RS`HM!U9oIBpiKkF zDj2991T`>TqmZjw^!ZOsBjDJ506zG&K>PM7RPx9vFz@P*yp&`kpypnC?T(^75ZG z>$1v-bc-JIaOcRCYL|+?MJ_ACkUurS{HdF4dd1k`+mWIjTp_e-X>8z5rI|iOP0&Co zkF=g^?53DqT>YfHBo1qNBB()oq056A#;HO_07FS*Ssx`ruLm!JmtHYND(gOQmXRy+ zO_QJA4TFaNm zs`K*~7wF&NNYOmOhsGX@crXewZWi8K1f_fN$TtV+Pj47AZ=%CR(q)+F|6aCMbDTvU z1nMRuztUJ+nySVIR%g;h0-tIX9nU^O7;irD^L>Br_#iumGf8tZ#%6Og!DD|#t~-?h zu)$&eY9>jtBNkAkJOGI`qRi=@mxMDdee<(c0cU5&@l0oOoL`|$NR&9xI&)i|rd))Z zc%m6_!$BO142azK;=G@wZ?LFTXL2rSB+4vDCnD|-hKUkei8N^$zK_qV`bpo1JhJj$wHT44ns@dava zo9%I~9-rIRbU77IIh)FvXx{OQu37spD=Yb)mwh7)>Z%P&dnO+Qvo3BgMyN9 zW@~CWyOXG=zcd}&0%KnWUQ2(8EhhZtpEk6Re`^--wK~3JH{;pL5D4f)e#<^vE0p=A z-UfMzJir^Yjaa9#TCF~O$?7HZ{v*w$vwb=|zGaFZA-E=CFjwAB%`ImCXHi_WBv(`c zB#R@oXI1ph{kh7=kF_X1xvl(wAsw2-wUI0ycnIr2h6E65??5^j;4Q4T>xI@#_7%eS z&Zt`Dvf5CTDN)0P+E0*QNJH74k;jfv zv8Ld6>Xe}$v0T1rdO(W+&GreI(nLy`TrQg=krMa=-UD$715~*5c$}Mn6+XN);h+b; zl2i-J*@!44faf*gVTRd^npJyz1#UF~j$tJiK6_Lay~(|O!%fdF7aj`^tMbn_#Yl)f zbKuU}+0CoJbqjTW$X-A^48L^?SYRm$$kHFi`a9w`ILKyxI-|Y2H^l6})YH>f8z`Sz zK%FR)_$Nu=D#~<(lg0%OF7%lIHw^%-$Zc!Xk}M)~;<(QN%RM8v+g9KXg7};^t?Rf! z&!*<4yLX8_!jgsZYZ`iY#!5CO3vp$Fd=ak+v~9Ogy$b9a4K_VwwD+hqGW4c7X9h|Q zIpJ6Z0RIMD&*WZZW3Ka&L|E-0V=a%%@dAsJ%V@NRR?j1e?B%U$G?&Y%AZ|R~DPTtb zq&z_gQ?JKRh>V!_)Jlz-*Q^Qms$YzVm@id7)8_yN<|+L!%P%eFNQM|0Jw1GYf#)uo zI>PN4TYe>dea}<$e>o808s?_CTox7}+T21iEbj9jSz z731pU(kg;{_TJP~!pe%J^kOT|WU9HU#o?#pPlTA1f8*c=f^8aY1rha&D=u44K4)B$ zf$|7u5uN!CYDfzyIGIaVL=4pc=l9mi-~#*t3b%!EY%QG2-Kg#^Ywf>z7aM#(91A5X zIkFMLP;q@!kcsXuec5*0*$H7gmDuES_zsZAGsEU5k-1kYB-yrG^ZJOwuH~K>EL;t% zc6?#B*aH~~gn-7Y4CFHi6UesP6I}QVQLR^)7k3NA7P_@65Sjod zsn_q+Z6!2)tu;`(yy6bHgb!)yn;g{}{92YlhxC2_@aEa^R{e%C9-=xLJKQ2I-I!f{ z-i6#ZiMTgFxx(*o&4+rpEd{8_+}z#YnzcS43qkha$%W=||1=77b)=F92%;wFkw?oM z5Nh5W!^2F~Y=e4S3F6*#YRE2Z>KqJj(Uv)NTNB@`A}^09tb$rd-L2n&zkYaQ)ja?> zJy81o?S{RtplE!||LF68A#+~gr;)p7kt3WDSi~Wg7~&IZCJF1m5)Uzg+dk46OY2oF zldDfSzdR4ZiuUo4O3HPSWYmn~71r9li%YY+QOy4Ldi0y+zjUHa#)CjPL%fsQ-whq( z!FyM(&}Y5bU%B_dDhfbVv1F9F0DTY*WkoXSboJEk9Q&*^;(hz__CEsNwXW%B0cdx9 z!i!5&bSXJ+QZ&z#k_3GI?EiNQ$059UX|`OpL6@EH)miE8V=nfutfdJ*L^~W{ui(FA zS>GC-v#|UOPez9L)g-vxfpB@nhE?SOBSwB{X=A#n2m;G@Bj+1N$fX_$3BN1)k{q=q zUm1!wrRMNMNl4)pofq>Y`XNepC!khbIs+zS9FJVJ?Okt`R8!*KG~ zIy5v)rPLBrIfvll(4%2}1h`|kXe59`tvPkeIEsjaA4WNR_=@#F+S4E26ZedD_w(S( zscS*3D_otTnWnt|m}>4?{`6FE@x`A6{o ztyNoM5sN}45S`PUrT>p!tbs=eG{_*3^YGvTUZ%dW`ex}R^1Gcznf@o+MYIbo^Q-S$ z!d3QD-ZB>(cd?kCOdGWMvXAG@QDFa2SwMXl_T1sm=!1+I4Txf01QL_gpuy(n&*aoT zC&a{tCvf>qjCFZ$br;Y0fM-RDks4%XlI!=oY#IRVhv8czWT*5cq`j_=%ezq_w9fSp)fAmiCL|*z;w=* zjoX_*b#?c9coB>EsH*g1I7|>a1~=96K%i{;SCtzY8sf0CB3T?3-}U$V4r{DQ&8e4Q zZP$*3Ho9Lm`3$V2^lkqR?sfh>Q5Lbds5d(`S=zKF#Y_!`EC^-OJfDKI2>C5GCNq&S zLz&O^{Z4-=sBlF(lzte?_Y(W#zb7cEGw$Ls`uem2cqi<2^wg(bc%jmWV5v5LI&&V zkcw5~P1Us>%PJp*5tw}mr&(1^#F~IC@2@$PKq&b%0*tv=CPfi%*};> znuHPCEjfkX6kk-z*_jlLu0r|Y!)LEaF6129$8VqAwJm#iyGe`QtS{T1pxr8PIqVtF`NbH^j!+^bN+pOX*sw9_ zcl4G<;c7!3dvJwCt7 z1Yu}(&Wy3oO-A4I6LWgN)wtHt6>+A3p$l z%@2u|ql=vZIws8;j88x@#11p*4h)0mB+bN&0654OBd+veZL840BiI@6K*6L5o_Z`8 zgocf63Z8KqHjKUn_JbgT4!Xaq-xEaQN2akq9 zlG{L^ZVPzeF!(jN<+_`Qg(!s@C?9j#EYg7P2krep}{Afm_p+ZIkt z>Vu#S8}aGLietF8yrB#*V7Af#G_T-7M8qcT^Gzc~GR5>@&rE;^sXyP96e@K&2+KQ^ za$CTqG9|F_4Xj|iPWPH)65Z#nzD|-p*~7!Xhw%wo-Y3iDFpKo%NYR5xB{T+dtY;<= zk(XsBw~&Cg|MUHAKZGWP z|JvlU=4p})8DPOL;5z`l(fG+18u0|R|Ch3dyhlkX@?d)k6zf?KDE&sR;0s6#K_x>7 z(n&kBJ}kVQkM_wRoQZzEV)|-(YUC=QYVm4 zT`-#ps2q@ebro~Q*PK6Rh60Ar#Xo%M&xomJK0D_gu$;z8Rit!xL{(3%8_CE_{5fT*8EIJ;% z9-#j_AmfSHC!8o9lTtOltQ2=OoVBrx88%L76^$^-j%n$jD zVq%bH@%#hmVg`SI?tIyNNLmW#{x)W9LdU#*mYAp{UH|Ums!OoA)cyvgvp+c(ls|E< z(Fw?s3IiARe$&M^CSUhEhs&BvZCW@S{i(XnAWR8@81>OsqEAd@~2$qi6`G~ zf%5X1#SvRWg6IC`&(tSRsN{f#0E9mvBbpYzpr`v|T~4*r{1+wH&mf?&ezG%MMV^|) z>5quy`2{@=`57K)eV7w-{G*=*EV@+8N|Onoa+dD>o+*p?5nKuJT+QB(kn@X642I66 zkl^Xtkcj*P^5px>T2g?T!{ofQF!vQ50|$VgSkS>CgeP-<4@nWl1Pgl!R9xbq$bEvJ zkNLOes~38;a}X_FbAi#W)y*$jF8vXak=>9GYCK+c1Ci-PNr{ZWUcx*Nx$NgyfOUh4 z5&=4qJ&@MKVA2)GK)lv7{R^UHX7$c4HMdaq^`7E5OuS~d&YG_x?`njt=cZD$VfifC zn}e!%(0U+H6~xBT@DySySs)qVq`*`6yE-IiW9_p#6JoLgBd6&|;z-RV_-{3MiXre* z14g+8rTU0DAyl0YI==@TSYgDu;Fl73F?v_aq$`X~$-(p)D&+&dBV6cuZsFQ<#*=!3JO->iO=j0Tpd@mP z2m`b|(?OYvVS^T?SSkkISGfyPg};4K4^8%ucL!WJ9Pi^C*>xuJzy!~~boJE>A-)q5 z;zCT9-a)7=rkc~(BFqbmtG8bQgZD%j(XKk#Uk8JJbhh)x12%J){cEbbdG(SnNmt$cX3(Usg`Z6NDiFUl+ z1?L4l$XoB_Ov1tDlF+6q`zWZ8B$R%qf+`<|>Dz$SfQTVonV1#}x%>t|$o=nM77AFe z8!rKh0U#t;SEIY%6oe%s6HL+PK_mak?KCNOgS+6FZ|DjuRZwGneF7Y!kJod$?d9S6 zgL#5wFQOn=eCB41um;qq$ZS;^AcMdajzu;YBqKoHT{^?8Kf1d6Tm6CzlCpG1rjb)p zsxH)%aAD(vfpmNw6n2QpL+PE|=tVN~4g%;&*JD7&f4Dw4AEVw4mq?O=!86d^0YKn;9ghS`AB<}3G4LAnct|Lp zI@JdOoA(T2(b8nD{ClWO&6^Lk_4NL9wk^QM;>FlE5}+`tgGYgc{TC*0E(L63mfR#6 zf|Wm*fPo{@k1dl$ZU$$_5u7@l3OFB=O)DG$iVy;G9&9;Nsu9g^#cI^~W9o3P$S27~d+>)Ym|^wbtz*wxn{iB*q0yE6tvP72|Hc z@-_|Xcg_0ZII=ItYOI+B(|bZ8Rit+f z!d5?eU%5JKPn6{|fl`MH*js8oN~n=teRW|_{vcHxX?3QQ5NXEZ!e=pDVID8^UGWi` zq?DxXx)DvP_#4Y5JA8Wl3NP7=Mv*`rZA6AGnXPdRe^-8K;ZmzW%MAyoMR`3vgM7Dv z`>>5!R9p;Ji)QN?t~{I1sINF?{}z?b1I$uw5DIK^g(yZ6SYT>6<|`xG(K_4CF2!l= zK64)l;&*4)=DNX(m_5RpVM{Myo{}1t5RxH*+~pQbt_A?8Fz?|LFCZ{?LXw|6d1}q} z%-f9T2&l6R?|uw^=fK*a_=isqQ3dM_(J_Nk9G7;px_o777L%E4`r=`{&;rf9EO(J9 zcJB|f_O>qFUA2zUyi-HSyDJZgL@1GI=;(&Ck0(7OApDUfPs?J8+dm*+Z8C#TBoI|@ zpi$dwManbTT0#KCTIY7*%#4o%AoF_&rzlr>fIxAjvt!2hG+z? z%k!h(XKx>1V?Bmt+WiGAfhedq?%+Ac_vYP(-CL(CCt@JY((K~3-7X*Cl8eaCzYEjB z(3StwmA_?%!n^y;?Ce*?N5=ylY7r&MzVY$dOxgB9=J*5zcrHh;s*hW~%FeiM%@m+8 zx>TJ)K6JN6739F)CuGu?8<{#co?8fzvF>8uoazko{$=#4krLj?qN>pgdVx#dO&)gK zx8v(VsdSJcb;o$p>kMK}7vrD$dCT-3{O;3C))mI3W)?^sGUYI8pIpRO${qV8o}qKn z8`Ck#L)J1OCebq+1@Z<_aVmz#q3(f+bpun_LPApK<0bLVDtp~%>SZ<&2mX=}v&Ch_ zc4y{(*K<}@p=>4Vy+LEdK2l}RqpdOQRPm-Y>y>pEDe)l%&zWuO{;X&;$J5hWD2Y$` zD8m3M0+l9ZqFXsevFg;U*=Ntogz2v8R~j88(VzVT)JoneC`cL`(~1P5=;-NvtBfW6 zXg_n~AuGKf^3?!R-iv2jrcUGLz+uxEK+{X z58M8#PCPvyMVG!6PX&MQSNDsk9ns4q6?^OI+d=$|zI!pI+uxjXwGu1ogSS1<*uw=K zc8aFFi({PGDd~ACRb@h8*Qe9*h9~6Ob7Ep3c?U@JcE~HFy!;;>l%{TWsk-@(<7DL| zrDR!}ox?sX$1;+iGkoVJqC{cTflUxhG+VfGqf1IkTwmhJC)I4>B%1p6{+qovK^^Vg z!_FU-Y49OIKv(Cd`+|Ed1SQ`iA#ba@a(zMUg4#RT`}E1vb=Ab`>X^GO%W>0<`fuK# z^yOQg6d&}ZvcEQRc!GlBQB}C882A7izI`He9|+!@`nz@~@%y*hL}oaGDG^!{h*)Z3 zmq<7S+91Tb>bj|VUiy2#%$hSQ4VXmO?U)|rwi9&yw;DBbN*4bn{wbiLp-GAMs?>BE8e=HRj%ka~&=<7Mron&u zPW3yoEssd1lVMv{|C5&ksu$DkYK8c~n_33O_wv$6JWZdZ^Gdn-^-DCbB?FM3ddD?i zKc$_!y_bDP7lC2H+~c$vgqBouJ~@#^j5HT&=AFr47y~&TWY+NmhCS=#H9cBYuZ-T^ zQW@jY(_c|=o#4~f(P`)(xo@>^a6{{2hNOCU;67uF_14AH>S04D^?Ei~ZZ+&t<@Vfx zrFf4RS1|kz+$cKQ+llyeXdq4fotml+*ogD<)1rJK6C1UWy`r?ZvRE_Y)@@^< zZGyk@!_elh$A2Bye6FN)yzKV$3B#*x+l@nqmw0!MRgDfc&DbG`?gksdXH}TX0Q6me z5{V=g%dPwVy{y?u*VsNGG24&at-~pGX1IoXyQbu0lnlpC*-J~%*{$O2LL0Z;>U)gz4Z>_WRJMQx{xUUa~8=anV zMpw@&La05`$wl(9ZAYfbV5{)4yIG=`zC;G(N_)Ivce$RQ=e``BruPcEX#9z?k5CEF z^TdModTrjmbqN*J&?5zjem3XHN$~hPSdU={<2Z*VL7#d!X1Tb$Y&m<}c;R+(8{S!m zvJkB6WJEGkJH1OnE(rOx#%shU=f!Y)-GOg*UG;eD&!qZ(-4D5;tCyLnX8HYcS?n6@ zrn(bl&pRTSs2C}~ZV#J1q37}1+ru!BPD~lGQlByV3(38?)fYEgWa4zzOX4RPXkKP} z$|$Y25Q1~OEG<@lr27HS-PhaXQ!kw7?wxY7j|jSo_H|tvv?yfLhOx^SiW=Ixw$RhED8A< z)#CfVuCE;Kn2gu5ry3uZA5Dgv3u!MQ2iuXlo#~_PqKh4@Pkr@Z?iMtEU$>O?=;CBQ z*GW)%+XG!!Sl7fvT-6EH3K?0WqNH;ZHY-h4*k$hFKu(0Ly1I2w3F21iI~pG7=Pzv! zhV>fn_Wnw|;Nr@28&Jw=X_8k}72Zym`p#iowZ$h!oAKxAlm28i!Y@4uKr7-IQi}{L z<3#-0W_RQ{K9A$IpS!o6ec=yZC5!F+3!rsHMJ09Ck2KWF?~l)#8L$5P;U2WB{aGzy zvTEO3L3@hb->oheb!-9xNRkgJ=eZ_tM9dsh0$%>_B~XNQX`Tk{t=zr`-JsOF*LvBE z#K)mURxcfR@d*fZO|vq@a@yO)A&cCGa6xbZc0e7?QCE!UNALyv`mzhWpy$7OrMxSv z=t|xIB`@;+kXll4-vULrH6c?-Y?Mf%=9Eu0c@UWRJ`1MbkTNZj%NQ({R@OJx&zNXY zBoRCyB8?Rd%Y@8IoducNyj_S@wzJaf{Zu2F$oqMIUMCP0)pE&%MkdGsLqY;mwR8_g zkr|}he%?Qe6Pfi>Q^O-7?%q$D@l}Y`@mS`W3A&t2m3Ic+(5XoTRrj~Z1B2q4iNRV6 z=7Iw2gPSpJOQ`R@ujg`dGAAPTQsvs?0%`O5+%Eg{WdC}gV?g$J->EXJ;+AWcxO4m! zn4k!mwIUdXCW(fHM|6}Lxh(XJ+YTKrHAN2b$L_&}my@KGAl*&7j@gY3#DU$^BA(IWnB4+-8Xmy4a{HOgcJ~Yn)P^K&Z?+V?*n8-1VJhwzq60i*B%M70ZUTJ0Zdpfe>DnXq6Kr^XEziX52fX7HhL8%>1&Y_Xvvkcmt zBz2~iy!MamW=|twKfGoxiRrr9Op-}LX6ABV1;vQpj!~H+8U5{sT5$zQ2IyKrwX&Le zep>P)FVDN^0IT|-qIWoykdWSn6AfO#9|b$XApd?F`l6D8{(uk}*jdg)O_(aDm|b#a z7b-7jX=nAPsvS82+%M!?If_qioA_5EHAMdHGBtggYPacQyu{UJy8g>CLYKkI0PDEumFKcy`lj|ijR4vjTHs= zu(l>AQkkR^`D9+nv6ymvNK-z}!6F}(DP@42+i6m9&>!a5Z$(B#gxSVMlbhQ=AQe}; zp>pUF(Xn)}IYibwLkL3+WNf9l#wvk2A{ri74UhII^)S_Oma3c;Jt;QEgEQRBex(Cx zvhlwad09gyKXr2pq1r;M7cbxBwu#!`J!iV1US|(ym0`rAWNet!zqfaAtGA2c?K`0! zbQxUE>TSmb;R+@V3BY{8_&c>;)K1Q?xQ}GBHLAJIKAE`w#(~Yd{f6L4)Y-YwLl2KP zRTm8(V01(jhryjBo6X73U=JO{l(VKD-?ED5DQ@XX&Cpw8eEU3K9UEP@xyW#BxSSHv zA)h(ypV4DFT*p5hGRd+4wK@?9hBRY1F=3_Ug^TOEqW7A`#=&O?f4f^Ks?;`Gn*V)XLT#c^Q>1wQs5c+A)!C>{pu7o!tvb9&?`2mS!1<7`1dJ*ISLe9ZPBu%?A&omG%k_0`u0;C>-X@lef9W$>#;;fB zgp4O!J>l_oTxu%670>S%5Wp@K7Z0N9!|60=+Ic6{*ZT7zwwY7s<%}kz(Z;Thu9uaU z^|mf6aSrEsi^3@*W_8lb{(PHsUQ^TJSj||4_#F4De)jVv5x>nd_+7BVQM-B2@bp3e zp@2KbHiMA_?fQhd+Sz6$gF3Me7Hvi{x;R*FNm^O&Z&h%rYxIPiS=rg8fNrDsidYdf zDywUb^7`2i3kyjpDO=s34FN218 zrJNQ|<%K&(4P(s0>iZxIzhx|vURb)Jppl!`(C`?Z1AyBH4r9tm4ZAgFVM6ES)PGFA z6@wPThlVq^{I_9)Sbq1TbraZpAALpLS!$tpmgi2t zu_$4DKfb5tD)RrZ_SR8d?pyaLh>d`Vw17xScS)*%bV;YQw9<`ADAL^}-Q6kOol;6l zch_%y_j%77_ulvS*BxVzJB%_Aum;oxv!-_KNTeeJrmyo7~`?+;tIOpt&4 zRrBd$x1yh`6M163iinq5?_uRlC6~Q4h7a$cvtQ@95^em8iP$c=8&8g&aNT6VC$6ZH zdvVh44&&;)hl^N}vAmzZf4@I8G^ARiQ!;ze1!-CXaMjnvT*ggn46(AntN*>H*!uv9 zJ!^HsVyfy6d}HV(@o<^GZ^UWXZS$ybTUs}JdA}((ZzuLfC+_%`aT{334sVhQdFUV- z(imwY=nYQ0WFRysZ=B=u=v)Uf38Ms79N}vy=X>oOR?H29c_6%fgHv^1)zU>x%`0ec z@8Pl6zWjXG)S9uN;*L(gTdx`V>)UAW_B@$071Ce^Z2xC_;`*{>L2qB(9k>XXY<2`8 z0y^-OTvJ)$hkCU-C0xDa9q-%>>U~_pk8sY~kZD#sz|6 z3A*-59D=@ra7V%Y-~0yiDiQRq{-dVumFBJbnwJOr1t({0E2ELiyUR5sU~tpgCDWk0 z!J4A7JFEUFebi6wzMzoO9qrd%m?jFB2I?M(w z^9vB^rD$`hahnSL?tG_}AOJCU>!ax!W`EgL-{NaUS{G9`Z2kJ`UxrN^!6@wQXPT^& zJ9UCZQg@ARRh7=Sdp(wGGz7ENar|B)9AnU}LM2?h7h2GfyHPbb@c-IHL^z-}*K%=< z*&jULey6J|sc%CEt0*-`0sVz54jk=~9IxB_ghP=-tn3m5ZSf_cnkj`|xjGFN$jCH3duH0h z$?)zma1tBS`|4$PClxm*ieGLYo?o9z-XwqQ=>&F(E9)}Kg?7z>H*e3FY+@4gfu5&d ziGk|H@|k8YH6yQ<)A8RnUu&acSg;3eRH%VCAD?)+gJ~zLY|f$X*B&Q}`|&*Gdb8aH zC^3H|0he=PrA1tI!l=u8d-D|s-iNn4KqTBo@&{DOBEax*5mUwM$oejMte`8A`fFj1U@Mtn6D_OnGTMEQNiBhEPQ(J}`s^ZK$=0?A4Pu zf9CRYbNw&`uD)~vC)bw4h|pDt7~;U*T{v!bU){^oY>4i}YG+xm>ICK<`lt3ZT2iNG zkCwx|zt(2@FF(IZ%fTBE@25`n@+IQHpS6lkcUsmv16HD(^QbSsvbr#Z0=|0?Nj; z^{0468gvlj+P9#X?F~zx01|GZ&dK8X=fe8$f@et8z#Ykei z(tlWnsm(p&`?nSV#HhS!OE|j5hJOB4hBS(K>2^wCVG+UFsrd3qbo9*=q7As8;Wz&F z-ueD};CxwOnbqN=XNUB;JtQE`I(GX{`>j8_m=Qr@KG|_EiRwO>=zsS2x<^zSZ@fGm zCBe)&;0^DQzNvLKrY$19L;tslC50|JuNfd=JzhCPT1k0N9X<}mDwYg3$P}1hqikQV zl+bYhOVS2^_iXohrPx-V^r8B^hPn7Fqqh~x-hBx!{18#mi@a5uev#C7hPpz6mI82j zh((`53W$!v+gm?3zkUDQK8|&H4uL*4;25W}xAk?Xwd~i$B~3v5UETe$%^~5#;x*qu zFqc@KvL#IOH5tuNwuf?6A|^LQfhPLJx-e{@lI7T`#PMJ`=GyZ=?L&)qmJgM2euHdm z-LipEQ-N{cP%1-;)?G`ZRH$0i0qOR^dT+@>!cTBW#o#}SL%wtpc+~#d+25tYB6Q1s zK~AZRchF+$Sm2^#u3cKR_8wupg5$3DoQc}Q%Z?|HQkCm~;c zlM($9opGm^mk-#pAj7Hx2vU^Lx{@-siZ`1q_efn-FlJd=!geYMOym`o-BGP$%lq*| z*El2r|7~JgZf+ca-=esD3O8gDDA{tC8&m94OjiPK`VsWScCTrDJm8Aq)p^iKon)>SBoAR_&^ND z!q1%+>Rzb|A0Otv0CXF(aRNe9+I&w>iQ@YhF>JSADn_fS{*eF8yaGCP7_tRe_7=S7 z6`w0tAa;H#p^qF5XyFbre-sj$sTaX|N>A?r;96>@?a*`$K4viU(BfBVm6l7#hljfs zlv0mO-hqll#o;kvOO2O2#Oxpm3yU=UaeK}OLfgUE^jIxRVQ*ZZ-NL}ZQ}mxlbqs=< z6O>oiYa);T>zSEYdEOj@>=HN%ZmonZPhp|AYD%tdLN6Z@qkG&rA_LMOsPHa?!M5&@ zdQ9$hqleLiYt?%8h=v+!~rG~4{slBL+~Auc=&gyP|G)`C3NMBwPv$ZoA1}3no&R@ z7!=~<5!~$kZmJR!uxH473jEEwg4Ant%a1^MZkDgGq6E_7F|GLmwCy%1`AL0_XWcY8 zV><)r2`7rpsTwZbqCmBT$z;N{Ws#3ZfFBZ(@bl*!hV_Mh;nw-c(mpbDXF6*o3p=Kh zH*CFPpp$~UU51(09F0LQQSeyaBSE+LTwJ^o(E7Y7yO7w(g6_AW5EsS*SNT>x!(&|9 zN{1x^^@{CO;G|%%(3(;T@AXQ+CQO;l8@@!wWz_t$LR4eBvJ$tF@n?A2*I(eW=|BwY zgRSu^IXUKb=>*-W0KQV=rT!Yr`up$mL*er+US7M10Je4*@D--qSuVd8xH6G%D`l-Y#v{sG_ElUfX2T&bJXNE z#zwn$uYmQ2&_noDBnbp=3uu${(D!uq_LBWQP_^6Q7F1QmU$`N{ycI2nbWwVx4l=hc z*i6}Iw3*#*S?jyuPODz3rSG?TB?{8)gi`sXmAQkVu2khm zGJlk>=va6*>lcy5zysG52pEk1LW9Y4)a!`)+S(I(xcm?u*+=A*U6W;G6Lz4A%%+OI z!pA~_HB|^_D%@CR zC5ew;y|iKe-z#Mj0KkU`pFJeFdZ(6=T8BYAvU2}85U3hxp%*IVFjACqxScM@^%9B2 zjxFL3`-*;|oHO&kV*{vfMQFentdIZ~=4}%Zspd5Z&x=@S_cMeW0;GXn7Md^ix_qq> z8M+;Vg3AqixAPgKREu1wApm*__)FXE@u7U9Ax|Xeds@aeYnV7$mo_=I46Zg-*08aX zX%He3#d=Fc0|SGy^4Z?F>-%%Ahxgj0<8<2-E+6CK!Vs_NtV-!8V7cFIdXv1&Gn@!| zS$oyxn|pCUo3DWyo_`w&D74zMAygnlqY>;#l&^Eng6RYG#=XgkQb+SDNW39Jn zB_s^{qq;(b8F%~ckRYJ_Y6ntu^dqy0Qm>O1{plGEM2BXP&rrMn^9@p1WTc*@sYGMu zAD1#GdH^FI{G9?r?{q9|qHf?6df*!fxE!;CjYB73O9X56)Z{JzPpw^D z^2$0R>ER^Ns*|NhmRUJZ-mk8EfaD868W?du{V*8|>XN<5@tn@i-V^|w>7qEXlE&_T zDegK=dV@yT1bVGg+j0KAz5QLw)ovaMttAjl)t0$XBvHSKtSgJ6*me0JwPy*jLi;5`@?T z1bQGMSR7^qazBTfK}l9iOBw_zz`28l2ey>T#TW~R*;RB)sy+fwI&LHdHhXm--?on5 zeW1||2A21ive`Y~h+u)AqWwB2<|CY!SVnIk@Z*1%pzzp_oY!V2;Iqe_cnWb?&h!CD z1YZPV8tL^74IpU1%e@=(E7sJJj~V&LPVU+ro)k!|ymr&Gdv zpO~5~K0Eh^2VbX&1cZu$#B~=9P-S>0R?8Q{@HnGHxM|{P&d+I|(+MTZ{vFFwOuV$p zSa7beP(~jyPzSe7_Fh@C|A)wkGgM|>$!%Ix0<=(}aLf;Ow0RdOyURG}v#sJsZ_K&} zL6iU{lT+mupZpSbjP)~Ms31U!3>?s56}9;hOKZ9D=Zu>Tgi&=;=W3N8hs(F_B!@4F z87vuqu>bSRpJ5T5HSPOD7m-`PTK!DBn!r2M z!^48&RWI~<>z9H%Nd|_7zV|)e3?w1D0z(y}bv)D%czf?x(`hA}EhPmz8j`&-E~ts} zx=~_cM`Fk+Gyc{w(9uv*r#Z#snUmGAWleBhR^Aa7z7Gc%tWT%BjcvL?o0W+BzTXz> z!Yd4^Pu3F`$`VpKsoCv2^ZYB6SwW&UylyTlC->6E?1>w_Yxd&E%JSMPCA;#imyZOK zWf6YbK0fIz&7)=1AYk$o7Fpdxg14TLloVu0yydiN9}*Omdz_@Ek!!43R$PpPkW3w{ zPR1`u;9@zfu|aJMD-8=@)A_@TaB;63U(|jn#|Qu;m{?d|c|WkWW(Ac0aBp^X-?g?* zRHA>tR`E_pZ|_34qAAi2IO)K!R}N{+>|Hguv7qdOBlGpZYD|07xdZ1g;WE;PCAG|a zqpuZ_h8NbA`r2<46Q+83r+oqjZPt~t6`V9HAVcE5@I9r7n9a)2bg6h|CZ+*ftnnAl zSI<0dAB;-mZY|_efUNuk+SwEFd&n~=64|Ug^Vo41oKj&yUWDv zH0!L;s)h~!>}5-;i5jPZ`y8U8lN>5=L3$oh`fPb|agF%>mbZolOk@u?qX$3RGU*lxhI?R2a<48Rku%0;S#FY)XJS9DM^=EJ~a+Kh=7O) zHWU4n$aIQGLVzi)zS^1|rP*lXD)IkTni(%MzZ3G#p^TYz^Z-5BZES}3w|GCrRGYtQ zxec>1K0Y+)WYEuqMJh8{pOM$bIIb<##XA>ir;Z!Hp4mS1Fns^A{m2~o{Zv=rz|LJ@ zVPHiz&J|DqT0PLy9KXqPd?V&^I5QYcz*0@!mi;}U7y)~6mHCq3=w&v&jFa8=D}b`H z7jIO3Ms96ATZ(!m_v2WNkWfV3O@ZS7B2-|QyR5zq*6p6{k$(oUV#cDO5c&T7u|lS$ z6q(`EP}0b5Qy0NZYN>(9;ONT^NG=TwfD_ zU`grZ2xi4Owlmk-qG04TY?oVmq6vE*cvg~p+;VNou5tQrmg@WM` z;{;>>kn!hCz54$fs|_1J(lEn)P7BmXe{Z>jcB2(C6==8KdQbCldc!QO^M!D0%$+Rg z376-WazfJnrWb_LFct`A$?KSFx(b*W2ZpDmQG5?k$I$%cTEK^M{N;#L+NoDXeeT6k z(mJ1(e^JrZp>ilg{4YK5YE#Z(`-oY(rk-pwcPxQ6^*pkhIjlRa6QdQlw1X>&CC`6bZkj{LtGyHcjUAiUDU2-{sjB(dtX3@VJogpbT7A zB>s_?OSk*MezZ{Dsom(Q#KflCpZdjG1%1bO%SlINA7Z_FXFmXWEML?4?W2vg*Kn`4g>7J$7dxz9~W-^)=5pDhiatf&f zJS4u@6pKr9x%MeB{GLzO zCCpU6)3NC5{LMNfjMUOfg}^|l&P>~0k??#3t)5H*(eVR-GZ1bCyT~brYS<)peSHC? zmQ&SZ0%T%I&Dr-+eIe|;sd)yCmR913=mG_NP?mWG&?3{Nc0O1yc}=nw7M1J5xL=y( z_`L`B+dz~Ux!emTcUS-p;Lt~9aAK?cUn$|!fq2;W`)xmN0qTPT<9k3#-^1g(0m47Y zrIVAUAI~5-7x4(dBqJzmntqQqe?sOYOGfaIl7hN*T0`T#{@Y`VHg^)V)Jm0~w2Xae z=BDm0uC)kq*sk0kd^mrU=K5XUxqi3P==Ol*MHH~@l~vVDdTS*vSBb|T?Q0Z^o|Rn> zBqGYXcUzKbY{%)~K>>Y4c*r9PsJtMn{UHu!C$MRMN0Nzvcd=O?@&OD1f#pWp)TCqiA_v<|w0+7Hmsii%71L7bMUVDI+Z z@B3KGO*}rA=l+C~1L@%c1+`p}NyA1^^r!ojU|CgZa6U=4&N!;9V#}+(FNh_x=(ZIJ zJp=SrtAlx{AYO-GL-NVFq=#D4b}7BB9Ms;T?{6adY5!6i%?AnJ&i~4Z%RYKCHq+~6B!b@DIfx863Lrn;z(upS-4zoT z6Hb<8(wB9IVsGc*gWhh_si&tf((mDER4lAexYxzSx*vTyo>OgF^wFc>MqCGPR5$HM z!+-oJ7_NC^1oxz{jT!Il+bk}%u{wJXZ6w?#3=9o+XR4)o5?NnY|4jz4{!~=q-Q5aa z<|M`}&Y?<%dq;|+u%7)e@W4KUsDXt4i+>qA%K5QQOCc$Mg)ky5Py!!u@j4~H@o==j zUgqp@i&|AS@SV`#!hrm zHBA!vwEpp4u3E|GT|JQ!-AVakYpcoQscp7n3lZPt3gSohTYR5>qa6`0NgA|*j=p&jny#{`oqDY9V*J$9E&{j-wd(Y+n*H^!qwk@j;g{s^fx zO2f4epji7Wyn*130gB4{t0QN%^K<5v(=0l7Q)WOyXirmPfG969Yo(Hm=89-V)y{pe zf!BRb;+mhsHd&(0iq!-VV-z6UG>X&!pStYqu8@<@#(dRWgFc-9dYK1WgP(g9+8LFZ zQDCmK(_K)JK5%i6Gm7|>Rje602FAkBIZ%C(1_Yp<#-XOFB{X#WM!t;V zw0;47vP(t1)2XY#u>=f-APflf)`TEd_9cX~#FkqugyXL0g1^k3P&GY?+g=)*M7%~l z!K+B=%~PoPt4sd}r=NQ}Df;K)3(2UvpA4IW`u$Nn))Ibk9u%znn)8{G|Kr4#{j@vOG~Ym!4U~^6ctaWb&aN?*ymi@{>{_i z{*(F>pr-kTO1*yMPo)RoR?nK&i5ES>s4}!5KIMT3o_9C^ zm?l)otv+{VhYWB905N+2bk{&d!^QrWm%@eVNS4(<8TG`mXC89Xffh2i@G@Za8^rWk7$0!8?4Lql5!u5Y>NK*jsJP5yYNtD zFgN@dbaH8(NU7;*5}{iVL~PBGf9kzzjRS)8Foyrkx_jv9{7M0R^IGqpr?Hb6_Vkk{`;R6S3qYA0yWQ^>m_y0m_?F%qSi^p!9PnOI@~K(;%x#E2|_po zGH+0}_ZBrih0FW3vg1y#5iMe101j}!Cmc7Sjp*p=(>c#~y_v|}UinGR&)M)Xl0e>d z1Xwfe?c!c5AJYD1W@grzpU7C9Eo1dJ%kAv#UTMi1h9r|j0JxA4#X#b+mf6KBByq)j z%8|eVh=<#5@9~t~#$aCeXc~1%V(csHZ9^E>isQBQuB~;Mu|fiIUjh;CC!ok6AOu*4 zM|h8Wz|d#g_!h8i|5`U+K3szYRiA|^_c>!I1J+tnuH=3r9}qndY0yznbA-TRp*^g< z?t3I}nYue@G#BK)PYI%bgI}rlqGF=gh?`(YVD(oP3ht8Cti};39FEX&8UCDJfnluQ zjXx3b2XKq@`uax5s@R-=yt1s_d#0t80LW~3X4E?H6s@2TGuAinjX{e=e$L3)K06li zNv`?S>I{=iVrl()>2yFPh+i zgudT={PmWowB>ST2b$VrRr{rq6%@Mw#9iC_uQ)>tf#$uT8vJex3aOKECP?KR84-$k zAP5@Jz57y2f)-l*HAh$J>KyOi2_V$V%Qc5^Fd*-=yI;4pPx->ByH>W?{Xid1HL2sX zjv_%Ib^T#72!vI#G>S0jhcnBu{0W3|rN*26ATW>|FqVq*?8&9u*ffh~(|ORaH7g@+ z!I0#mR|xzH$fc0E2pmFIGWdLfZ-l|BWGMCFra#%p8HJJvX=i=Q6(NhQ3`Rq;D=!CU zC2P>afH)6X6sE?Qnejm=@E_k2D3O%b0YL^4oDqFc6a!Is*O&zfoalxwNwBfh4eqfW zn}`5FldmgC3j)+xzM4N9i=yIdXo#sxTWl1h*6CSHx(I|`PqeG}Sb`N(cPc|HpfXv+5M}}Fme}N|bHZZgC+sWk%0|r9r z>{ic@1fAbQ03iLS!P3-+Rrz%jSfG%SQmbzNw;08gpARv2@&l~ua|t*{7L8Ai();D`(8h~ zc>eSF^Sow9G5)eu^cKwoGpJArI)5P{VTsV~%*;wWb#H0Y!jG{{X~>j-0|6+)rn_vr- zU^-J{r`uJs00H8ErnWiPmi{Y0jrg|Wmv)Ky4&ScN&H&U!z_d76+9eT=WBgv3`U1QH zTq)U$`Gn>&U*>g%{jqU^mo6~-ujG_XY8A0O%K*wYEzpFh$r$&^1j=L=hUVn*Az9%m9d& z%#9%?gLsoj_6?<}p0UJW2%O5t2t!xjU;xLgqeYhx0lSHijt(j8Th$V`xAC;M1+fZu zQu?n0qlYPrY<9ar`4;zpzZrtC9CgO5VHOuWPfnnoLqG_KJrAC*liXDoSPmhY&gi1b z)c-zGpH3SMP1u^OR(|FQidLBz*(OqqQk%YSqpa0Nf!(^+-c z&?PW*kmjp$*!l+HwP1SnY{cZU`wVzvuxrvE46(-t6)-@7@8EwzZuM~8c<12DZNAo4 zkYKU`E~^LApV`UK%NDTgTTsOqTg`vPAWLYklOd1^d%o}a#LRby&1o4bl2 z%;5qM#l4gf4g7jw``Xc|a(DInlFQLyMO@7Xv1%2gG3&Q~hf4@M^d%GP1glT9_4bc* zxa^*N1K&jnT)wdE2pLx=+m$rO5(md!_0%+@>D`K-kVQjMe;$M2=n+Atnsj#qZK*@49zfNLNp7<7zv*VT73;XxL z(tf?`>-P#w?>81ZKn?DAy~(LkK98ka(2jyoM(*udt`+=t-_Y8|cVE1Mk`)I=}bV;d;N`h8@2B|`O zB%hlLhJoJe%g)_FCG=AB%>rfa0icxurmR$z6`UHoatcQ=S3d^}l1dv2p-3gf)4Xav zv?TU`;U{o$qDsVTJkmU0yK+oKJ06M3n8m z$x?VkjGrcv69^&X)wZji<_jXJ&mTjj=82dBDog7Y6PFG)ywlhy$m(k%CGZfY9hK)a z(j%2@RbKvwGN=C34snPglJ21cYN4V;3|-9h#z|7@Ef$i3dK!agstwT?9h``Ph&nX~ z8{)A*iChE(t`EdxaayE){5_xp1D-iA(^NLaw#?NB|CD0^n!=_#JChYgiNr zBr+ZXARKbDS=iY0mk&A*HfC?V#lk|EJ{3CVXeEtgB)EKeiE;+~mW-+@_pXl^+@YL< z%;UC>kn0UiGMy%mZDUVQSQw%4#-#f<){1+EFF+hvZL`t17oHgM4>xoVtDRp8lmW*2 zdQwnyfuogS`_^SO;TeD>%^6j=gzjfvtD%&?*M>YneHIYU+geWKY_o1>YuvT5l0E=p zu2x7@lZhuS*yEa!)|?y9dd+h~1f#vV7n?mOEUamE&TV{sPa|@(sJK`kMBuO{2*CB@ z{(WBrqy)b@tP6#e^<{`cfPrT)Zirm6G_GD@a6B}C@wvA~b(!bVYH*U~p3Rfht5^6y zuLd(QU<*$6LpLAsz2)UCk?ifIG5(In;u`X`*O0ihw0uNHpcjs++z|b+{Iypg<@sPK z`Iv#g=n-Ej%wC+hjpE)+c(DAH#C6rlW|2J2);DwwAvq2b03k=#z^}rgj;Q+G+T&oh+AxBf5Dg z@>%9-qzKn?k9_G(*nYibBGe z!ryNZKL7IlK5x>~r!xbdcZh|8AKmpSefTsLOZ53FX)2X{MT5Z6R!B{$MB|E_`@WlF zNbJw4rKr#?B=}8#f_eY1DpKYw~M-0 zK7Az5EbfXK3Mj*wmBMGW!UJE!TdI`LXkz&I@A!O^?~;@VG=%{W?|}+?88E5#@u_Mr z*L3#v#IiS=^VadWEn6bOPA=AZ`4xlP>HznGQHvwG@3)8jY4e%=~#7o?m8X*{SMf<{Z?D?X}c!nRCcL#czis4>{!8{ zk!Wk-XE%)`qXoB#HKQ-rVu1^ch<0BVpTec%R(_n3Yg?#KLcnVETu9{Yh#zQQPZKt0rH5F_Se&n!@%ZNS3twDcR>D#vA6z4Zi+Yep|;;tqMadEE{4v4_+#oON>ZRHZh?~*V~IE68eDuA%_b7EkT z^|l)vX%6;-u`nuNgVRvpSrCBF90smdC9V}1fd8^(YDZ48roYoOZ6;3i;Ns!g?JTB9 z%`hrFTenS3<^N%tf!-6#gPPQYeRFxLdAdW#1CP^$i~kO~_3Smq^fV2t^Dljn5_SBr z7kH+f@-k)c_u`@uXcJHDnkk_XLW*KCB!7LozA=FByz&vA5QULZx(spun{5W&pYz9# zVG)MBj=&`Z^iJ750_(iRdwNk!cI0`9&JlIz7`umO+pD8>sMdzkOW+-NbLOr{2>Gn~ z1tmUybncZCpK&0`+kyb9{pG$_W1Sl_?wLFN&vpMMUES2EZQ2Xh{y-rFh3y zOZ$XDEiVGN1tz_&n{LyGSjsm%3X6(#4t7XuOLowf8!j0Fhli12YL1wAYs;mbJ@CZiaKQgk#M`6`KkU=WLs>fuw|{d$L+(3T3f0=!4<|snaGTN zQD02c#Nqp+A>}FgLLUneeY(BX{xFq4nB%Ox+?OEYAoLjVvms=1wdr(mWo3W2i_!6d zD}GD!1#_YM+$&Sru(bU$lgTe22--c5wiYLJS2cXsu;K_3N7W(|G*~pq-ERGH(QmWX zRb$HtIYMD1KoP?p%!@iqt&R34apzQArk`*hp(gR-U&52tHZ0QDUyf5QR7cU)PD2Li z{$<2wWsS1Vp9^J`>JR+;b4q*HK1as>dqgEhl7G%g%CTHIy$!XbRJg7U$jQen6n-VE z7srdMVR*#FX}I*C50_crDc?RK6%ZhiweYM#mFFs1 zszoSk#|VSH4d)lj=ze)p0{@63^Mr+LwcZee#GuH?{te^MsN*3?3op-*Bd)qv4Xa|^ z_$U&4PJKPprN)PJgzgg}P?t;95iq;%ISk*52HQY9xr!7==byYv1*&h}3y~*naKdEQ z-tV8Um2%aZJt`f@#SkCE!J)FmaUC6;0a5~t=(S?lvHO3OIczWVe=6>d0n8A`IoFZ% zaK5e;hHI8`K>T(e2{v9^u{}=lNnN1h4pZO!Lbc^Ku^$olgG7(7aB_XBamG%Ue&P#o z|83iKhvIj$8t6o)80+7D%_vi9nF|JkC6!T@%H4T^Uq^4VIROTKs$e`0u}e zJ7}#9ce>*6>D;#UkbL_TBN^_1*`Yefi%nf7o{BvJ^A3vN^Vn9_*7RKh)&SJDZlOjb z(DtYnqepDKeiLx@g{~WZ13zV4I!dy)tE}zC>-YwzpwZO7PIkAJ(bh5R3pqsU-fJ(+ z1;eu`IN4Tr7>>LLFS=ngMVWZA=tdkk5*zL`4fz^gQpjSdVM70x(P`~_QRA&BiX7b z6agrGNVy$5R=Ooj`NhX)Q)DQqY}J%64(V2%(UoaQ}|ES9mFE=Lts`fGg9WN!k0d7em9W;!lL1 zQygNV&Z)LR>GjR0uD!X^0b;yG3=JcM+l?JXX?*B;j)J12h24P3>OavnH=Z<%AgZ31 zQzKaCFjMOK3Q2$!I;@UWjt^LJ-qWpDZq1YsBI>H^fd<5ShPCJHg08EXX_fS{?uBSb z%eIkA)%DYWbBy^NZigs?ZUHKWRQY`M0n+bC`SE+Purn)jsZ(G8WVAyKED4 zy?C+H+rWXpe{oXKuyEZ@ady1vua?J9+9IG0&RjLF=pQ(bh$~(-bJ-p}Ib3rfs0gQ6 zq0ts_r>UtP=#ikF6LfsF4O=jJUt9otsZ+os?k#;IqmARIe$_X8a1En#^U0oM8Uj}AO-I=q}M&4NFy2>ck2I22%+C?nv;YrZ1aMspMRk@ zZ-7ay{Jpf5)%V?JT$D$|{rtmmaGHT=9<8x#o%2594;A{_*kYrpV@hM#x^vR;>|>P? zZ^TV#a>jB~tPGUZI4ng<(xu-2nel_c3MMFNmGV@LSad&EWxgNAk~B2r2qFLT_wOet zCG70Vg`#@h4^9f&8tMo*pRpeXi%sw}A{^g2jN_PvO3AS&iEVjJbu5kA4`b71j-RFc z=YvMz9?kQqD!aB{=t_Tow`a?3)oG019=%lpxO@#f)!bj$=VTH@k(lz@a&&6p7YCVc;U&AYS9zV zM^w?3512Q8Y$QOG$OEG8Z;6eMJlASS+}Ip32CDRUU_`hbckZHlu?8(%cX{dr$~s_l z2@2ZK{7H+e939&V?Pbef+S#GQyatlPSpKa>^Ag`^P=UobvU7;h_6(g8aAXEvlSKN- zBnWoG?tLG_u9#kOa11q{S?xrP3;Va<>dE938IQA4X*VmyN}eW4=(^?N|KNIXiXl@k z6Dv^V=TrAJJRBR0b;}%hUJf2I*>7K=e0kmU7Z&`=E5uNR>)l-D1 z)*}sdx9(wM@9&4OlkWL`V@WJkaCCGW$yfAU4W&XfKDl{${_RE^EuCa`SUL?^-KOKA1W!NN9K}{*4{X~NX+P$Wn_&yM&xgnvc{O}E5TAg#rz*EN zol7c)ZGLD;a1T}Z5LPrM4yJ1A1@(Gm{@WUy6^6&2>mKsS$|@g3@m5#yYb#Eqq!W&o zM0V)mr_!=$!toa{CzGhR(}+7!zD@;qyz%~Y34-NlJLXN|O@iBzlDU&joC-YP^5c1A zq5KNH+~~(4Fs#Oa1h^P8T8TbIL~tma3Q#AoAB_*fC^|fNW!koHChw^-&cC-?8Add1 z|KWq@QVjHRV@@g|0=JnBrPNtjO1{-;v-S4&V#9q;o#oRz=OccrI6sL-a7_8(<62q` zG1;(8aEWh-22L8*r}3$zHFP~f-8i$9w`LAwN!zH{=+zyp;fuhV_D_r?XQBC(ie_Oa zjlO%&N5(~7M#{Bia{sFBs2KhjqT*n-A7jI*-%nm`@d`W8m#P|2uyEMl6W^-rfDl?` zWn4S+nfD?2Az{ykMn}^|x;}q51E)`eI><9@>B+*9;xCcU`Djazcg4<1+r9Xzk*OeA zQ$q)mT_&ccVpEr}tH06H_sZIDC{?k5FBCZg>1TJ>2Cvk`$E9jSuy5IX7@l`7w5Lze zyqPm=9aHidfqv(v$5}&Tg6o|s8;T&+S{sz+r6qRiE4RGV{PdZ7hrtIc7-nC z-hVX1KV3yA5tttzb-ngvga&&&e{Qi|Qy`j`h;fxOHqco^YnksG;od;d_0HnCO+dXR zvPaXL&Z^y)AM0{)P-+%IAqsI>PpP@1;nXSI{*AfcNoThz{*)wNMe4e~E}F&dfwXkM zw7-wR%IqbD_f6cDDx<_ddE?s48&#-~EE3qhy4u0wQa@eVdps;VRxckscaXaDK*dfH z&-*@m;BTi8QXy6rspGfJPEp$p_-EVCYp)|p>Cp`QxnG|m&Vd)DmU?H=;)}wBO`B~oc7(#VyTB)pxSP&v6c37>T3Tz5FiMbV?JI4nT=~_u$cRe{e9m*M)*gju&iIiqYGU7 z+H8&h+G7ta_3A)5T0yMCAl6-*#xuKkfS6WxYGeCKfA zs1enbW;(}QsoZK%=dW!w7py}_LET?nE9e!t@szaa;C|?Lv%ns@rNzpr6(r>XY@#2T zrCL$`GMnEWU;N!zR9L*H>R4tveE-dxJ7c+uzgh^Q=90o&KImD#`zFdX&33dg>jk|Q zrMXCsqAlkYnm8Wg^HZf?nU>q+wUG+e7{QdhRPeKx&zFPTHofj21fs zA8&s?SqOcUn;Z@A=`qtg?}D-pR2F~ael6&lMkXqlZMcG*>_dTk>mpBhA0CCgJV|uF z?qln1es1n6w&NofvEy7tEGnvY`Pg?VO%Kh3wKDA*)D$sdIQL)CY|B1kD?D9eY(X#k>~n7~ z+GOAGxOk~@ODl1jswzj}v1B%HL%d}fwnSr#YPV&&ct+l5_qPqDB+Cl`NE1u(Zo4R5 zJcbi|7;dk)1JW+ItKmO8KM<@3jYqOPemK4XEzfl<2Q!)+d+8rGHpb`Dj>oId=Hv<( z;E%SnQ>m23cQrp`m;rnBYTK=jTi3p4U$L==m#ZS$mMM$rurSm7mXl!jDrcSwseX+~ z@pv7akqh<{$`*TFQOCwP|9RWrTcDQB9@uGtASX?p*y1@JVD z-EN4Wp17@p89b6J7k>w1LCP&dB!!~$%ln3=tr>U0=Ceb|p#6%2KbM&yjhs1F?-rhFUdhmDrYgm|q#Vk$bGBkuub>9g`vz;Etpg`$FN=6n6Sp^Gd z`KNC`yyo7U(_O8)|Mbk_LD4ZWg1iFi?Tw01n3&f@=!*8wNL8zRSeON`<-9XCWUTn! z$}M#!elJWlJEbZtme)&DqPh>O8gOW7+=xJ`A%ei##A|+5B4r%cv>O z$^bA-8Iv`#zBt;etbnwp!#XPr!jVL{S>KF$HjDnUmbXzuWqQSPV&y>+#&GCiI;xkaduegz#RnE z!%feAM6p>su5zs6_4CbuJdRS!eT^baVgi3}_H~Y8lT()Eo|rDq^#&?lmhXU^Fzc<| zM6#Ik`I%RYs`myh!>KHrPUXVQN5^+Lf9~!w)ON#Efp1a>2HS|hbp^E%0YX*9wTbGkL|yHlC___TYaS!$LxjG5dVyd zGZOyqOt$kXfR8fc=U39f0QkFKsUIcrSZ_3Zl2F+HVARv0Ly3to+gpprV}dtjf2qIG zzBFkRv+zgD>zymlS;+K#w1wHrJAMQlo&bSI3*EQ?l;Y*(+1^<m6blAEtK8a@2{{c z7*$|*OAC)Db9o<{Or>MnZ?!yhzJBRdU_{e3bdmL3qAOxA;my_e+}x3lVs!j_@%PEY zJ(V(q@RQm7bY)p+2~F|!3O{$rQjn3Z3cgahkA&S3LW=kDRme*kQXvTDtH1DGxSs8| zY`AR8R?OjYJv+b}{e{|eO;t>1z1b$^WV6|mRU#aVrqST&yWCq_X|tr}gL{sxSm(qJ znQDq_K?+%cLk`EyGWY`p7(`QLIMmuNo;_5|Ye6s-hDsIpJ&{yD(Dv z6AEi-@yiX`pExYx8YGAw6TNr^jRu&28?Ln!fzjlL1*N;DW9D>238l5rAWke;2Y~}T ztAn8SkL{Mi)Asnq#pkbC=(WqkFqCp>SlUX%>oZp2qx}ISGtu>c`2SG$7C>3Q&)X;= zAR!=Og5%*z%w*mxWZ?L5ltK_UU(1d=s}S8ma9#&T?> zaTZc5bvG$mSG0=^A^%aR-iVXJY$tHa+ADn3lYQ%xI2ZkWzQWGmt`89JiA|0Jiat5&1k;59K?jUobaLJkmy5SwwkPaYrBMz!Riydo<@!SpsNGn{(>#ugOJ`gZ0D;k8 zn0Q&wWyUxlJ0K`2wFu~%Yp?SR(c415cmCyiW4Fb^NPBkiVh%^~s5;9HyC^+`H_R&E z4PUIZOK31EXTsh?NV`o;oI&=2WKS#6kU0!tJ0&7Xw?(OPWp4+_=25e?Ke96`;s{#Zp;-v zU}8$L^SJyYVE;_p=+p5npOYX%xVnFy`ynB&8L_Muz`q~#=KpiB5kbs1@F_cbRoA8q zFzk$FV5)uOgs#>Di{W%fo=-Lm?#{FKtNl$)(qJ-G+?L2eq2W@$!JiT=Hk|PUJtcz* z#m`y9|CdHi84ky4+YOvsgfnNq>saLVZi)=6(tf?0pY|uvydZY)^J>w_{`zD;DF@?q zxg@iS+GPm@a}w=SwX#tgZ^6lC02Rw-Q+7RYLjLBZPFvpw;b5E?e_Ed(7%zw|x7iCj zK4q{7M0-LnS)@|#(t+{p*^kSvU^KStp3ln)pC-k9@Rd^D3u9gm_rOSz4Nxyq!dB+D*#)qtNE_ZS3=nQfYu)b}p>aQN%G;psK$d9rzdTxz6_lpKw4{7LgnK_4$dC zO+jCfUZ&=?C&y+l{XL>1Xowf=J{6Hx9vFiPIq8)(-^#aKO!yxGcHuOjXSr!9n#rF8!)_3%(HOzq*~# zn1W8EU3uDWPi-YXozTGOI!GC>;jq!(h_<;tI`K;CjRQX*4rPT*w!&;RDt1vZJgAbc z$P%nhX6BM!m)dF)QA#~&{F-YiJeaLliCI$I93w%vRfzZe`?IaO!<9(HXWXH19IBnC zNV(ZtR^}F>B1+f0`i0-V3^zq3Z)UkyQrlOBvF(jN!72?AN14!b*7x_rMR-O9(?^9~ za2Oss(*OH$z>W0`Qy@!MBA~yb_mm>|7#^-f5Lw7^D3C6Vr^4udhIB{rnb)px_!o}I z!l(HZ@`*QJFk=47<5c(lXFPxZl@ovB=S6_2^G01q$7zVIfQCj*l$J=Esh2}#Re(i) zjZVSn<@$9c`V9;v#wAWe`lsRH;mTf<))W7FDa1q0*+?^y45Ht7XU3pegt&m;Q>8qi3HDM)=)F{O#QO~k0g@e!v2-}L39yVtLt z9jv=7lEp`%k(j_MX<2(s*8yFNNeJr=)C8mL|ZRljKRG zB;SU9@M`ab?$3|f2wmS(@?I>ww{Jxz#d$pHruf{ShsJ>o-D&eL>5sZnfJ4}6++}pS z|HtSu0#-{ghYN3LjT$-H(}6!{?}=J$#ElEg^{bd*Hq02BjD68`PomMgt5@Ii?vW`F zMLx@ThzhgRJ65b51<~X$$c%t5yibntgg#{J1nF>7z#vuQ(^#6vi=-9xL^^CwpP*lZ z!YNr?Op5c3n5XlQ*Qd#`HA_qC* zq{>YiYU(yOg%5%HuRuo6fIo$}NF_j4SOdV3Ck12oe<$6D?vPxQKvIg#-hcjaD_wq$ zC4(cz=8-=ZiXkP85_%MdsFxj4ha z1Ucut?45_j3vJjR{*KTdfTSGUba^`ziJEcM{87@{Tl9f3pX3!$+^>ASZrgJ(l7$=E zGlJV>(DnlT>&JFJf1hn(T{E-Zb|AY#|P6Ql^h-B z>ngMnJ&6B5kY}o80i6eC@k_2f(_r5$)cpLgZS3l=(90{B*B00yIW}47=97&{CbzmE z;JU%VSj#{!Qm;K5dE4VA38Sw>U3_RE11afe5ho*0^T}LMLeJGH;K|dGn8n;K)o8 zWW~|bwKU}(1d~a?c?1P6>PNIhfO~=WNeBxEUPu-4tMldGz%~MtS>Q)vEDG!^nBse= zXY(qPF_1R~z`Gr8=#UX518r-2Yn_GamtQPqgCqwA1ZCw`Om*<<+;GDqBD#OGHNBYS zuW&Y7!{~H=5JuHM^yK1XclyS;%^DUGB&5yHJb<{ixdeI2PLmtU{VC5cY8@sv?7{=} z#a}kKD02Xz`QV6?g3pbR{vzHKG64v3Mr~?Egg3Y>6sJd?Kv2aO5O~c~q}>M1)+TE8 z zc6B+`dq*DK>I_a-4J(F{RGSq`<|NM^#%n61tKOm*`BT1v0O*<8Vv3K zGf^Iv)#YjU3rY~SrZA5fEn(7cItwJu3Sm^+RUHSZrQJzFelznK89_iAHtY=yYV~?W{vbv*JRi$2}H(0q9vgPh*ZZwxc4W)qFQ!|tGwK@>0 zO870)zuq&_qNQx(FA6<%`2Emsie`QMfQFhgs(j@lWQmG?Wng$fZkc&@(9X`TSJOy6 zG7sG_WsXLI@vRWH&-P%>7;&RS95SZC5}O*2dvnRVYw=|qxKi}pUr86Pi^S6AG{+el zNQlu%tkOuVCCSGQsY*bhm^P2=6wOqnNk?r+5~5jUjHafuO{W2IpKIWeuo|XL{ZN8{ zEC2M-G4QnxMh^=6ySCVjU_#92Hc*?vD}FPwuEuluIRpge5?#3UPJiumZZU$}m{Idq zky6mtelc99Vq^eCC!CfAi+uT1p$P}%MlmdaoV6*y_J=0Qr@6g8? z6k0-ut}m^P{=f3TUV4livr|ucuFgTn>!Af_mRU+zX~T)1moT)aunT~|U zQxP0CH9B&uvI=z;5CwwXbMFB=0nwCaC7YTsg}0&760iWqdj6bspdkZ({Sy)@HjpL; zK7be=RjUB@oX+L+)-K=USvO(;deRKRMMTKRw~2?5j|hA*^NmsO-!dK`N<3YAS)g2B z_XauQ<+s9Pw;P~;fJntpj?hJ=#SMPb_E?OH(cZm`tU5l_PP$%u)4cKet^WE%`R>UC z2Xar5f-w%=KQDkO)!X_u*5>MohTkEYL?nW!1N;O~$bJ{UFJT@x_qYpVm zNOcTA%FWqg(_H9mfqc;(0`2AD7&F8ig@%SALdBB41YiXUq3g89N8pehqaes9k~;Ws zvqQ+x+4Y5lu)$22zn3(5= zsw6@#R_u6`oja53Rxe!7x2W113;y@xus1UI(lY{kFy4oa)iJCI<3*@a)bWt+<=viZankiT%xyc_?4|k z!Hd78q7G)S6DNw(_DY_is>MDD$WTYV!=bJwmiN>oE8QwD zJ?f=aXDUA0lVhu?@-6%ib7%2P-s1?K2A7~uRG#~e>F{+|SJx;LxwBL{8ZHXJ6ZdCH zp@|m48X|#~8%VFk&J7;h-up=a#w~dd`zHV-QHF%#1!MDC9U%^L7WaVU^yN#J6Sqk_ zCrkZg-4?zFGKqw=WGmax`vIX8S;j}K)yl=vmRgjs!J!__I4U*OyP|@-4IS_9&tW1U zM@a&Q4TOh)4H=`(Z8p?cWXqmE#y~QyTB5l!FHB;fFgVg%)VP977Ic9n*EF!Bbf=RuOc0XXy8P=8LqxpceuGSJZ1*8XfQ(W({L$rB^Ld; zEJwZ4$$R=6t5k0x0S7x@wFGc0gNhjRsgkwN-_Oe6i`x2O@8C*ZOzgF&5XxlTEf;A%NJuGEjnqxr*aGa{Y3Aar4ZWbio$wU3CKr)8tz>_nqYWIpeKLU8%w-@aUU+s&ybcxtRE9s zFwoRq0y$SjMFrR<57V`&fH}Gc5IJI#-e2eW-FSv9E*_vzWdS>=rlu!E-9-$2a&nS5 zMj-ZUPY)z0rxJ4WjDhe8NVo$Kh5gg6p2Mrb9o}}jRrz_nprS)VkP(MS!P)r)_{!;H z>rRbt@qj*eysVuRyfn01(S~_)Fzrhpb70O&RnV_;2=mhDW03tNQBq{r!qT^U zUy&faS~EzoagoS7zb943QCIkm{009$HBa&s`7wK!T|r z`#@)I2s#4Zz4P^b95zgu)E5Vm-R>7r+Vac&0|PCS-K9fHhQ0qM?I%NlL8d1;CAlw` z^+#Zo@iF*nCd*^-Ak?d&sqyAV--nX#mRxE3`A`uAG^<3iztkCr;<1c^e}~yUhVz`r zYbGhGN3e3i#^HQUs=@du>X0u5${1j6b;~I1YHDiQ6F2PGOOFulP}G;!E<*a>YrsE? zBF6^H_)LkbKamGLdhUdtB?J_GZl4ja4(C4x8G#urhN*F{e>Q%m^BwCQ4&PIz81lFh z^qX!>(U66PYfU;A`v#|G9`IRcBw8WA3vTFNdKEKZh8(8PF3rE-Q?-5y&Yy5DQnx@3X?J3*c4f20V z4n&tlAn6wu|CMytU}0;f5xn}iGt98(0Rdv zl`e0!F*zXN!rte{a;eLqEq@(EMb-8hi9nnGxK)?yx!!jy0OWbIhvwl@~8MIr6GE zq9PL1Xj}@a*Raa7XYxNvsiK@%cbI~Y*B`y3Z*6P)3&G+&+GHzNlhFl&OvfeeQ?1*F zfmgJ9f~e6L+Wxx@KL0nni7dKDVo6pr5@##sx28m7@OXS@!Bb2c1AS+cC6)Zd`7B#0 zS*FL#iumvH3Lrg)xS4JwRo1bjhs)dxy>lf-OvDL0kj^f&CdgNxCW!Y>7MF|Of&Jreq}04RSV zfilL$Ge+f^k4oK>6XfpC57C~!cgEiGX+%XzbY{pnjW`|J1(R%RYlo2L;Qpja{fes5 zjfn;aNEc9_C~5uTRq5Qz_?Q^wh`ApC4(aL1B;Ah34tw8Pr*h?gj4#W)~;gky(`Sd9yapQy9HM|7t^Lz#3Z?>#Rk5w z?O(PKfS7cY)9g~Gc-yv>I?K9bL9F5vC0ZbTildQ%0hC_pL|)FlJY?5+^?XoH{?tS3 z8^=hbV8#CVA`}j)dFJn)v8Wp@q1h7Vttb&PIC04R#E#va~~P&LY?F0`=}^t9v+_h zp}f4EOoC|aUWg??3G8V@ZK~3NwJ{)-Z@3^ebq7F=w$gaI^^WfD?vA5+;Vf|+mf@T8 z;#(|6!^hwJa#>Ts^M??de)rRB>Bib>rGL({{91Kn6g}bIY}*f6fABps0q$^x>G$-0yTRDWIV2HBM;@SqQK6NiL^0vHHD9XM?#bU-cgeK4cP`^WOTpKRLDM~fB%%gb*yr5(~z zKP59NhhHg`sKh{0Vx)1yjzZ`Vn}0Tq{HD??=g|39FqItiCc-6e5=ZbW89GZlq;_fc5~s`MOiE?|eeDdUkOcM|hKEqk z;OV^+VEsE?EyhSw@CHGdp{}v96xd_dYZ|R9KW~=jJg)f}{_yaaA{*-Ya43i3Rt4D2 zFKy_6>gU9Jpm$Q194bLC=uM}mZy^J3ljk;AuARmU+=%2yE8=OX zv#UeJ+*VC{FH5tCU*(T!)DygbvXT#TZa1JT0TQf(B-$msp}6wj+;!nuh{ON_M4RkR z5H~Ra2n3M+G@0BwAoy%deOahdG!8Lg$j^r=BiK>mflo<^V?j7h4#UG}c{C8H4!%HE z{4-UTW=De3N5>82YVQV{)O$g*;#Gwk8Nb@HAVKdJAgd$0imsN_H!U43fRr23^X(uBT`bH0z#zX*681!o!PI2gG>3S z^Vd$6TID_qh}e5WQ490y#z+AF_kJv(O-xLHF-a{FIJ92)WwJMUrPOh!E%wvu38v)S zAPWQM(N!VW4UW%Tax9OU)FKCqSy|zpt?HA+hcM-mOWknQ%SQ-3Iu{l4>G{zf=n=Hh zV%O-oQNH#Fe|>?=O6mX6*S5Tp#j{Qo@GV>Wd@&>S9o=F`_SR@6J|co!x4v}svE=%m z$gv&NoP;1KS4Rg`{lb6q?DK3dVjbS>+1gm=n_fnA{HoT;X+n<44#Sndk4_Ua+${2) z7)O&n3y1$M!yUrA_X58nLlSX*trYxK7iB!)r9TDv*jE<^E-%^tl{=rK@s<6K9I1eL zm+3LyDwldVyW?yo7fX1A0ht=2mK%{@RciQz!6fXQwjYecV=>#ZRN(nz+wY$|wdlP_ z+pVxdE1qR>bRJ-aGWiuQ>uK9?CPKMZZCgkrbt6V7m!v z@&63)3Q1D@9RVZe(3;sbnsDIxKT+^jFX{wC&Sb_k%E-;H77)zLi1FXY&Tq*^4vpik zo)OAt;23_iQb|`Ri2jB-%D6-;(c_x(j^^I~_SaT&9Q(BCqc=a|+`&nIb_;sG=>PKC ztx|ZBKJr$Q{(t||V(SjCd2J+#xg)O(Pvna1u-hVHks>*1TL1g|dx7$`(nlbB$kv?1 z(I8=(RVY6Zf9E9`De^tz`#8-j?!pxbk4FE(KNQ21c~K?b;#oESGsjTb!bNVz4PE6c zvaRIPBVT4b!+sI@E+&J)TT(P9lAg3vWUYFrXQ~GaoK7grw}wV1x^DMDX98{Rf6Q8| zc4AD7dLWL7g3H}!fw=N()R-_-Lw!5c7|CHgXL@kf85bk>O_lbVXN$_5%l^klJ$3z| zVEjs0O&drJr$QLP7r69ocRtZXH)2TM?irfxSLR~>pTouM9%}I_3?r2!;b&o+s{d+6Gv{IO{C)$}V}3k$!P3L+I1 zNo`cq7y|BeR>J2xIV!pqIjlmqNX;!jaN%_kuuM#fj7Ou`GlKtakXG&R;VQ4;E-!V3 zHE|aCA5y0`fp4h0k0PHRjf+!MINH-|VB+^{#q4usW$SD|ku@5A3ekV%=iuX#3W>xY z52y)9PpOc|)V|-#H(30Nb{8rYUZeZvJfLsItG$7KXQ4b8|Oto>(yf>GI; z_(U6S5dNh{__Xnwfkc2TdI}F7Q$?f^l;~cSBD6V_%uu^LIm>Aqz6lIl(BFTLqCoTq zjgY7`^W(%p#gSIc_utRuZ$2Ybl7Cqo6M9|YTJ{m8`in^+&Xo&&9w|o&6ig=up}8=o zNxOkQ*|`*B*&P=g4S#Gx(r6BKWIk{2J9WEX`(8-(Wtz&y1{>Xdhc9~l9{fY0lKc`Q zc^-?%zj%=YXNDD3?#mT&+ry!(6k=08cih!l#iaDnMAX-|Rf^nn~$ zn;K?ssmiCv3*)!5d~?0mezT{H*}iRQlr+5A3qOEY=IMyNy{0J(;-Q8Thb~ASo6}5a|m;DonW2u=Aj5jjxT z&6Q9Q+wh;gs7@J1GQk;rFVVluLfTL-fhX5QcM@yb)|7-$mGb?w)>pAa!qN9cJaliK z_&pEo{`Z*P@kx`h^7g3E=g9N5-J0?$;$kMhe{%#AcOq6%i~-4~1wYng^A5$or{G?D zgqXOlJ`);NYsB?Ri(7&5@wtJ9-i87xc#JupV?q>k5^uuC*X%^D-(y^ly&UIoX_qf< z%zUdyjO2c{zaVVYkQnba>aw_$N9wfa5ZEoA(%HrJvtotHxILV==I2Z~K{;ZbV6GJ8 zf8~9q7kLtqHtYACkQj}A7Y*}T+q+icTtnSyo>+@p?9}htbVW1n#u{ds(4N8&-v^ah zB<;DR_Wv?zD%D-gZ8x_e7AO&r61;EE zWAURWD8_7}K|q-O^*>8+zeWC?`~(d}>HGMBUM>r1DOiA!vd_{?#H62@v3o-=%_bFK zVqQA?_v(E8Ea$Xbim_&EgyE4Q$X)s(*=}G{?1%Ae-8?fB>7W7vofzVbY3g&-FruE6KD<;#gi+v3s=2 zNvE(Ev{U>&A?*hH+o8jtNKw)D#W$FgQMhz`!x4Ffvq1x>`17P%Sp5 zGNLP4r-#i-U^@hol%AAm|3#MX}jFaOSR?j zWKrv!-nwD9d5)$rmPb;XTfSXFi=^T5&3V6Wm*etmu>|Mj&9yyZW>EPFwHGRX+$5VA zWHDW8$d+qPK5HHK`gexb?9>+%caD%Sljg3pP~GE?Y_BRz?=-OT$0c%qVs{-#L)sTC z;H=wqCM=#)9uj$sgQML zGNE;;}KV2N3~G|^)EEn$fZMGhhS)^EB0cDbD@CFofaNW~W4rG1n@lIntA zGTzoSM>W7ZclAEk1o1iZ=|uq7*iw(&@#8DO!55|QT5w&L6FNijDk!Nhd}diMyxhOi7?Aq2 z?&`Ar`;0~5+~)|kE_W$YQ!JSzt{|p5`$??jzO!4sW%2BGJl-Nmy=4j8i)?UVa{vBb zZaa4S_MH)=W=zIpPh3vp!TH{juBbW-0jXHlm4*zemwApXQ>iYJGv`d1e2J&Of2|d2 zG!Tz`c~$Mia4WAbT{B5>+vyNDlE-T5{jD&wmKAM}w%|DsGV78xIu{DCS@cYY{`J2M zjFENJh#x&tbK`fRz$RwVHQVH=r^I_axZXEPRvy1S^31ksLuYBdqMp~D4>|^dcn0fc z`2)GLkPztU#xCKwP0y}QyD+is?T9W|<4 zw$z_FrrJI^PafT^jx7HnrTg+_A(lF{4#}{N2U(=>n1q(sTkc#QzpeMGVm20A>KJXPS*QE1621zoJ==wce4R|26 z@L41>uT~pS=3dphJ=eR5;td7<4!__kiHJ(^>s=BJ6GE1jlls6^CzN5=c0VocM$(~d zZ?}zQ+3)d!r?v_NFcG0lh!r@$L}E$gH9YM@Em&x@J(#LKBImK}T(W(cWTxb}};A}}fXChd^(6uXqozIXJD7AazvbhSkqGU=Njy{@!`#y#)- z4}N###GRX`4Q^#yOhp+@^LXookB$-|wa#C6_&vHXRlu61(!X9kE88C!9c?f?lKi3~ zsr+S>#R00z#B*hSWmF8BSbe2>e?u`A#nBevVXW*oU^CWHZ_@22~ z$Vt$o-SW-r*YZ`0um*)sUg*8NAMrv@A>ZV-?3iD)!AfV0TfuUh% zj2|DSyvYGj)8BdrZhQU9YB3>AAfLwHH33mNjN_ z9uf@Q-3Eq658b{d*{r#IQI{|>^1p`h_mwX(L?f=(7K2-i{!{Wz5J@TXUH(LGLw%;_ ze^fL7{t-riLeM>`ke^G&X+O{H213K0p`;9&4}O_5+UasN6km*V$h11-&}XIOEn%;d;_PWaMW3`(I!M_GxxK8XJ5g};!l)}%{4 zceTygz*ggxKaz5|<)vux_|YRv17si>^FP~LjASxz^Ou23`;$t3Yi|GR#ohJM;*R3_ zSsRm>Z}ld(VvDTBl#vj}bl&=%#dKvH{n9JSJMQui31L^k9w<>#O4o_Cwehzb^Zq76@a z#=Zz_`j(0N;L+fzb$N!@BeFIyM7 zFI{X&d&=QlXje62|E^~P{{(Vh0>59E@U~I}l4Vyy z^U7@x)Yr%IpQ{8uz&l$U?;c^;J*jd1DTDa*CuQ3=0ItgkyHH(}G;oww|MifMlb%VF z_m;_f8Lg7~hgz-XPdPwtnS+w zZDiJq+=6HAZO0eL59Cr>#HockxMXS_9^H!5-Cm0?S;)HvHwyC)~oks%8 z4_0coPpYKU^1@rW1B3K(jU;)zoV;pg0uQdG%QGrBL0f6P()jT?%D$yIjb?7ug9l8U zQTNlro_~nrIBt`>9?1h;l>dBB8y znz7Xv=F-$}X{D_{NW*(HKVh`rbjV2Q`jd6jbAPhEyGIH7z(fr;4aCH0wqLxxaku-o zp{kZpQ-5L`$zr1%GwVO6{6XxES_RnxWEt^{4Ec#3=e0!K+w{q?=!wMwSEfBDytL(0 zsi~hCziv424-hO^$0VwuYI|7fmEj{z3-n-I2BGg}U>lRE#t|GX|OK@9?k4 zdn(!6knQ6H$6*m{_FwjNVg1kL~2+k0d#PC-@#diqt~LVC!RSF@Emh5W6FYlvIZ2ld}! zQ+tH$$P-SSAuj3O&Sp&XiOLZY@1jTCJIVKOo~U+Yk?`rFV8UacJ<7e{`C!u2FDXs@ z_oEA+^++vo+WbVR^%CDv5748<8tNuK&^k)}hRr4Op`jV`{tIgeo&L_&JHA#jR+3s> z9d+W^rBPy}yz(bGg!AtM6|k&*P+8;1qeB!UME=K+ZVr|a^?X6f8+l^wgF-LQ_mnu3 z5X;Yh`O8y!R$qjV^RMTII^`OAuW^ynTk`)@!m|EB?$62Zt&nbl9~w_M&Md;95h1_S z)fbzA^Vg=qP~JZ+ae6O`q&aT0dGf&w*Q;#fRimh`xcQ0|9cCPHkt6^jS6qq3^BRnP z_~IxsadXV@RnHR4`%PGp=zC9!3K%|TRiG8Vn`=nS&3eznE&r2oGe!RTy-Nw4w!4pL z$+Yjj%eBw5jKN>n&L)(cL|lfe1#ThYFbxZDR5X~<<1L8Bao(%k8M@`UC1ytStX%V3 zvk$)LdDg4g=jx_dlqGTJC{#VMx37s(q!K2gPpYjsY5a4uyyuvZT|q8A>IuBzC6-@x zVIzY}SS`u+0G7JR=ROtLT0X@{Ixa&uL*OL9Fg~qYM~X^H&z?lEu`42G>t)X4Kf_!@ zTr5+MbVVC&hlBJV|5`5lHx~elL){yHfvT74`U2iH-RXgL=6@D0l)f?u9W`_7=nIGS zJL8`fh7HGZdVgxAQqe4(?_0(q7w>0ozv8E$h>@79 zo0$8r%Mq~zSx>rkM7morf|Br7{X-2WR};k)6bPW^9;SevP_*;fUzCAQ#6rDFZ%AtJ z=YbPJ`Q?frC7zt{Dbj3hazgw;l|XW3+uX)FlZ)L-5ijinYzVRyDM*JhALFmrZsN?| z3Awpi>p#BO@p~s6R7=&>`Ns;z?+OSc?eE(ohRisy;m8T${HZ30HMl?*aWbd98#X2Z zk>iW=ImVR6Uj=+$$OLX#Z)e{MqZ1Io_Bz|Fj~Tc#-L<6pY*GLAZYR?q?SrkV$XLv<;wbJ&M_k$A=bCj3zKs}8;;kN z%MXmGh)u^oAucQ4Ih#4H#l}Oy0w(R?i`aVb6xL!&9WPucJr8r*e_c2}jLYE|cr)%F zkm|&0DZE}AYC#g_smKoTCqa6tdB>;r!lwT0d`_pO8oC#fy97A?dTVzE-*kPM^XMuo zB*>9EI&^)CDSkh&`-&5G*Fw}_=k{JZLw0U9#jqhme*J~>Spyz;uhH>t?MzlFy_{Qv zetluf+H$mbJHVWTh|DUd-T<^IFU|2BaY+GZrH>GfFYG z4Ev{`3r^#Gm13?O&9ol7yW_<@qBo9A zP7h>L(VNA6=N8J@^&b_@rp{$1X(Yz)D|}4a_ON=tbuTdfW@J<(Dd!zXKntm+$_4l7e4|Rn1h5#4p-_;r>fa`HRsqIvmDP$`)fYQu~E9Oqajd} zW@KK7egmgBjLzRt!RVjPTvA+&joYN145Y_ZFE)zvWoafUj57&0d5uOBqR%+7^e1t* ztn9HHOwci_)e7>2!BoW7NK=Ldc=Kw@LGz!l5J88K^WJ2aX~w+V_&vk?{c^t&FdQbz zs-$n)?)_|0xtS)nRW%$jjg!Bldv!>~?#yq?nM`HBoZ%-SB+ew~KbmzQ@8YrQsk9Jq zItY3Dbvh+&o5A(Wd6=-)K`2VBi%aJqu_3OgaB+8ra@It?gjGU9YyEqE8$=uNLUzQn zb;%O_x5rN2w9_vSXnW>~Zop0j7u zhoGF??1#r2^~2@3ri`Q{2U4ZQqGO%&a>sc5 z_F~Bl)JcnlTm}WCIfWMX;e?ufONM~RvMEQ{s-81mVAD0;;WzK_R!=X15ZWh|?)lu` zr#rjpRW*x^0SQeyH(|%%rOgeJZ{ZkCAKsZc+P+oVjMO~7NcY*|4EKkV@k6_17Nq1) z7lREP@4b(NzLxeU4S%tr=8{=VoyK_RJY_XwGuIY;evZA_uozoCph+-U*`J@6+>SV= z5qYV`0N&X@Du1k&kf7mYiFdj6Ew5&2;7WhWs%d2R-QuBo>~7_2lj7<>1cX5XTb}QX zwOvvQPWN-g4om^rNV0RaUuo$|TWaY_&4Attfl(;i>*QMmxB<@VC#q_n->}D;L`45u zIz@h)8NIMMjj?@!Cv4Z{j>mcI8&-36n6%^4Fi|OkD0zmzl@mJRKwzLbBq?2)9a0H9 zXXcF;m*Qfc2i$O+Gu`V(oQ}I!s<-CpOkOpyLVXfyvV{X2C4_+n1VfR_V)*@okg&-u zLpd(zDV%}e0rF&bb$R)AFoxA9oo2^I=bmIvgTCj-d(SMZmp>6Gc8)ltytb^5JrbrE zNI4Sr(IqWiccxu3Ft%H)aChEZ^0fJ_i6`G=c?b4G{mu8 z8-r!h6j0|(z07AEk9_M7m+O+AUB-Cs?0g-p zIrgzb%Bz%6TTylHsT+VLQc-y@*dR#nBD3ZPXL<8O&@fksk<9IpdbL|B#afD+jm*yO z>c``e9KC9>&kLf|cVP>k=>4f$vWzSHUQ+n?pi1tZTrg|ZCabW>T}yVboL#5!NIJkk zxC7PtNp?q9k9(j=;(!Dl~4Jhkmx-0%F&92EkOZ#(8&b++%qhVmkKeWsxa& zS$Ua+gbXbOrs6Lq8VcOZ-?Bw0G8le0CjMUDk-55RJOEGkJE$H_j-)b}wtr-I6Wp~! z;<22Ph8xmU`BVGu%D`L89y`0LQs=$z6C)ur76M-fdKP{~$r`Mc5kaptGA}BR)E7zL zi}XfF%$!?y5MqTzHPcA(Tn_wnl+c`}x15dBBQ0c(s(B0Vv*m@@r(Xt&kV8NS%C$2L z+^T>8Sx=1^G}&b0`F{)>GU>_1Aih5)nF7TdskV4zCwSzAl+;q5HXWx;&;C1xqlQ_6 z3Mdf6 z)-;H&v-FAk&ks!z@RCsm@P0NCv!UrM8W}&nRq?ojC@NRBZ3|B)@j;Vps@OEa*-lu^ zUa1A343qVSOv-k)j17M{jRqV|*$s@4WTSk#M~slRk2%?PUw=Vwg`=3SmgQnz`>euL zrEAHt6p>z#PUa{YO&W-Lo!VTs#5CEcj}dFQ^QX52@h0w+Q8{<04Bo5LYL3;56H%I#9O`YDcXjU;||M5faHRO$G9Dy8mqG0I6(#QY|z1@ho%!co41`f zscukpfN?o=)s9t_W$0MvHk&N9Bl*0wp)hqC;~=!P_4Z}vobg~FkDT|iOwwn8Ca?b2 zmAhRtCxSbDQULSI)3^617xXqz(lY)|Y-*ZghZrp>*KD;`R?-wJKR=&_mNp_e@)`Vx zHBMIdiBR31<4gJQFa;h72}(gq-T_X0TExYKVe}&n`_alD%jB_&TNy*CkHnWI2(>O-?J27A;Jnk z+;-LbnR~0Q&#hF7)%$)Ke(J4d;nOQ!ld^Pzf$ zgC`*|zab|l2R$=mP+bHQBjbH)>X6pV%<2QB%JS4e7){Obx!sy`?8r&H?yC8Zvb+uJ z8NtkHMi!O|h2G7*vjhQ8CTU{^6b5 znM?DKVOGg4`_9BkoswC7q2}oD=b7srY`^E(*)*!hGc%g<_-E5Adr`58qGGKcjLf?c z5n8AFv|$168|BX=8T{RM$)H-T`Ol-h#oZnO)(=Otd}k$m@``14`TyEtMoj~~tFW9wD}P;*D}v$?lcyuM-HBj zK@`e*Qk4fickK=d8bc15)dr=G3z#D`{ZGQ%<>TnfL?$SRJ4b1bjxbIu%n9@A_B6B= zV*#3v4qFlz5MaXXEWH0<`&G?~#~yZkf~LFBl>U?e{yjZ~j%b@zhqIgm^9r@y^|_3c)r3?O`G$u^Jjnb+Q7~HJaLFPMj zDndNgz9TCb&21nRjHI#a4N>{ANKfrVvAkS9o?G)e$|FEsB6fqPJgXzQXbg0c-J+Lq23krV9l2=o;mXJC37)=ao6qDTV!Ait&{35 z$fxg#h>Ci0=X%CwMO66L>nEq7eZ;=bf>*CzZNG1U9vvM1%+=>sV?(j_ykR(#X8Whb zeedx;h23&SY29v??}s*+9TQ|EkF5r1)SO*qD`ST}H0fo>H(XRSDn?2Sf7Imtv=!$! z(^=ecbtSv|fRPbJ@KX&YQJ|u5mYQ?YDgSKkDAFMQJ$?y>Kh)f}v^uttK83kQ&~W6h zWoeyFgyZwwb2k>x545MHG<8VXTLgC)+9g$09{}Smd`p;>Jmvd$@0a&Ib60<73u9YM zfkL72r-~JK+4BQsRYz4yqrqIPsqEaiO?v?n$^*yq#=7^vsu>_#0)1+TvVtNxU)*7(*!aM;e}j+!>EXWFZk7=%0< zb85{gS7(;$eFqFAM_0w=2(@ru(=q^5ENsiV5%4F|>Qa`yl>x0`Uj-^VV=Ew*SaCkG z^TkpNO}nCubk+8@_RZ4A0IZ`}n6Tdks^a0gEv9t9H6x?eWm{MGE}3@^kMHw1t2=bY zM@P$WHG$ihT;2!9zf8GVEk2QYurx^39et{n_0R4&&3v;YD9 z)eHJ&4I1bc$#a0H_R?ZCug5JmwUJ8=YX5CK9_=@}9*CPYnC!GD(Um@wTg`7-SR@`e zVO(s~%NuS79$taX1e_3wFR`WlCKJLQ0n8CQUP2U|_A5z6p4w@X+Sm!I+?PppD&;N| zbLPM(AXZR~n=78qU8+zSo2ZsqSMAHz2!PHPTdmbX%l1DE?D?s!)zf#P)^)nr@T}t` z*)4Y?VtbQsi2t%mOls9NcwpuFq$Q92<$mq=`>DhUf#<%0H7q|?_x>Ezj!jy=tXP*D zII6Cj6ibcbS;cpZ?+-KQrn+H5E5H;7RX@IkCW+7Lyr0Ov67OlEIl=R4;Bj5`MkEnn zSD3mS6@*Wz)B)IlgkGq_kd#>P(2R_)bfbRpAo%N7DMQr<5EELfHt1a4}%oX>MpS8m9hdfXB^fu?7$Q{gMj0d=*S7`7)i!W6I>nz zo)7NLuMcX94nEd9dlV!cQwE*~1bseA32xUDkVqs^dQXY`=jQg#`Rt36F=rPc<_#M{ zAf=y}o#`j6_bi@Oe5o>{fqV7hJW1b4awmVp7~R~3kcz__YNZe2>Gz!59#o5;E;mX-b-^m@>jh+Y_-d<_rxHF@ZI zs>=q#rGU|d4cv^wFV4x&+*;gkq;5BnttwOS~jSzQkPsHSX1z84o zl8v)lub0O9Y~pV6*=-&BApr|+#-efaMQ-RXWDC8A@GVd9;tm36_Jz+&Aq!tu)dsM! zNlL61nO#pEu7fp4+`lMiqgtb`HIuN22-#3V=jX+$l{nBf!7=D{$3OrVlgNG54SXSAtOOlVaJ%PxULH7|NN?32_G8iEHf1opLIo- z^PAe5O?pvW(E*v7?)1UQl}}HV!#~OW6*+hkd@dqOaAoAwa9Rx1&o|toyn=&b1GHHZ z^V@UPtA+}7uel}!`R{VD{q8ld!U@&YUgGu2O(tBIeQ^BSoR>Wmwjs#lwAPXd6D;M6 z4W3W@89&vh=}$%ta0{8@{*v22hq%36+`h(Ct@0W7lK-=BAU@-GBpvdC+rNG77V4mDd4nP)h6>^`;*IOJXjk1{xtnu8y-#lK zbt}l0-*}Ys{_+Vt2B=J*AC-7-l4K`kx1+EKP(A< zr<~_)!qA*py{mecC8O?-UK*t%f32JrVDjdDw3lwQlNZ^*UykBGv`X(lk2EL-EhsP( zg|XGy8#sUEU%`+vPUR`VOnQQb`{`0>;T`V(DtVU~F{Zr(kTiGhw)+jPV~+k{YkJ?Y zY)t^&r)ly{dN}GSauC9k><|CV+dQT6A%4ps#!B2khW&Q7#Ko;hBN5X7*FyFk6QpNtgd(Y8tq#Jl#vc@=nOP)vX zuT|cI%Th^r2_xJ@>*2M|;+IQHUQY*8RXqMp|5?m|&d9v}(o?NZECh7Kg+1yT{1bOL zn(BQAZsn6ihKq4)Uw@=qeCgkxKjXb<&AilitB2&<6ISBHHnRG8%VYzP&GL0!VPwV0 zH@VTvfhPSwG~};lOeu`gjQcoVzs6{*nY)%lUowPZO4xZlDt;AN%7hAf{%*q<<$n(h+oHKQmKVL?0F3ILI9RnLs z$UTEtwfU*t^7~4Ury>mbCc+~BI|;H)g~oJRL`^-y=x+>$Bs_L`{=3+YVka>6PZN_^ z_>RrC2tMl-Poljpeqa2h?|%kKmnrK0RyOHrP~c1VG_57xQZ23boVWh>z6*SM%76jO z%*%9Xs`$Pz!~d{~7ueBhiK~>Arc<^~tT^b>SmR$%d)?y2a;40WCb1FLJx^{b9$8gu z>86mcUM76~EMPpmZ~Ks*C8WXicnz*%j5d}^zhnzdgqT8Z+8zI2s&cs~N$;kRrwlhh zR8F-yy?u|K6g97SPC)D$-$*4coxfbk&c=rLMB(#y$K#O%wTj#!u3z6uTE%=1cgnjd zEX`Vt8vFClzhvnQb|T0zjbmQi`Ct%zhu#6jKQ)F6f+lF@<(1D(OJ1EBk8XLO(c+m! zd!;QeRq`tl!ezYsom9tVB1z~I=_#UR{6>o$QzK6awN#oDQ^0QEVq2v2BrRsc$Smew z{ffw`=P&{Bp+?XRbu8Sw|GO#Ec?8rV+FxJAWg00KCd7GmpK&+j>)aC&l*sB|tL21+xoG&L?O1r;qGhwf6-doA!Mf z#Tt77MamCP{Vbf%#@&egyhXB`mQ8?rEg9RHl83gr0{_+@FZe!Z9uf%wol(+us2u;! zjFHoIjsO6zp#eu5`oUN?%FCE#3E7|9_&W* zeZuchxzmz&D%x!9`ezNDNWq2{ve-A%Q^F8E#c-Nv9d#)9sE}xrV}|RZm}Jz}*}^ZO zC&<_T`9WY0OO4vha4i594^Fr)s!lJA0EmS9^J>;I+_@ML>W+i~fd&YP0#pfK0N6>g z6ak=5_Nt+YXSyGh&I;3`dnl#-_J2r)PJ&O&;!lRMWz z9z59Y(@)OaGwhc<-e&v%U2)v}-#xu9`>0KSVR>XycejEKm3?r@y|Topz)DGjk=0zy zZ-IY*s^;{(RgKzV+W~>{U}gC&h42OUp`?QG{EyK;3m#5?5L01pHPYO~_kfbrPq6oH zY^2k0nZ0Q{zn<2#oNjT##C56JbX&T2?r>H$-(iO|-fdpfcq00ZhXE5R{aUSQDv>_^ zE>&R9#YpX#;1nh)i;9Hn6WS<>W&X1vbd*0Fq2UzbZGZx*__un_#!h;O*1D04zx}$C zW%K+f&gKWDPS))#Een_3*8BOlHqTHHI-q79&|w14Zrt|v?2n83y3fuy^%UuG9l%}I zgHx+q;m9;zWu0=+viN9!^a{wg{UCN`+e|YOmz8buANa zKzZqgE~5J6JipxX@0Oj}q!*#MN{i>MwPca^K*6&7*mr`%Y`_!9s_PF2f%zYbOF;60 z+A8+|tn_Tu>RuV~$%e#qplKw-b8gv<+SZ;r z^6#9hwE@RL7E`A?{5t1r6W>RnckP8F0Pn6H6eFT@x2C;cfiw{KRw3Ew52Nd8t~HJb zC_?9hBL8a6sNthfVDG6@+jBQL3kSwJ^cES*|K@;KpXx(dWY{HjuD&9i}f=FMAT z^lQIQenv2l4ixt^(!GZ^+t#r7ba%qlYRM07%GPmvkD18S;i&V*cUR)xpg8NdFEt)V z3AxEn*4@O#WdxUY7&xu=)m)=E0&s6|?R2IXNW~xDfaKZ6SqpknlD{+dnFp1v@yei* zdXo5?GSJEpXMP3u+duWO(SYZ$+fP3yN9wDeQC>Izx|EWVeV{^w@UBR!ccFY2!;jR; zWKs|`JMu4;vFk@lR((Y23fM@ZY{!oSEL?~W&s-6|d*jlSq;GI(L%iqfyWdyZ(K*`n zt!xrK_7y2m#lRm~Fw&r=1+;HaBCBIJs%U0=e{e>(lY#NU%&&{8kDB+S^`~c2Q43G^ zp<*j2bKk@;^y-C2f(H8yK~@DCmYHD7^^+Lo8e0L>3IdADc!<2N>#sR(o<_MR-V#M7 zG0zhmY4-)`>0?mRl#BD-hrn48NOIxa1eq_z`iQye=s6w+NQ{YxVi=!0s*G44WbDF$^~D*GD! zN8_ek;^JFeD_BN?2nL2NXUv<8w~S_2Esen;dfi`goY3Toam<#oH&_UH6Nx!z?Tymup_4;6FL zBxE=r8@&!ng~v8TLS80qtm-jU&7oBJ1x*fSO^Wi4=>m6X^d$g!g=?)Wk`x@*fL) zDh__Q#mi4mX}$1HJb^5q0vU%-sv9uUD1JL8cjNg-N1KdSHI$HFqXkl{o)W9p>sHy%dCY5-MIm(Dd5bF0QWd^u)!e1-p~L#8^bAdwbFV5oprHLv{!j`7 zJO@=Ec!AYPe_kf@IxD(qCbbhSlE;XdDf;pBY5aJGM$T3GGXD4-N88&3V>`qbZ@bdD zWz6+H_j0fIDWY_=c)bMqpkX#%=Xva@fP{3HNvZete(x$jiP0jEsUS>>(!X~Ia=E@xeo=ceO~!!>AXk*D(mv>iAt_<;4F5Ts)qolT(0`BJT@Gg6 z3u91kQFkh3FHDLEE)2KQc=vySL*o$+x_bjn;M}%k_u@cIZbKoX-p}KYLC*u9{Jm@{ z2M#ksz2N|t16qcX?VH9|w(7q8M|t`gca+1z;p?wm^sKhjRbGl^gSBoJ?^NA)DeQ+` z5%w3!!N8{_i!K-5%s#@l;E*c~puqc9H8<=F9`#2_h8qv5=Fi&%c!_57a^s-!Hq zb7zWop;?skDL=*nS7VG?ec4gZDN~`VVG%#yv5OZ~vXj$zBv!dv3O43bssQ*G7(-p> z^h+y{iOzh7cog;D-~cyI%KnX2&Y3@pmaF#n%G>3sTsBIMI1@noL=#Dp}@ zdT01(Q7LjD%`&LOd|j!jOxt`BX-)kArP;hYX%2tz2H>xdjqPOz=3TT)w0K4miJ{Vp zde5{2VWU~R{wE^wh7`Wcce-!O$LGinUzT3R_T=Vg;J_^``n^@DK1W7+_iua=Xpb6} zx5#@XSK46;0}iv_h=|URNG4Bi#`|#8I#g{Bg=t1cGJqFKMJi`$c=w)yH_B0;A-MYK zsqr|q_Ue9|kIFwT{aV?Jwus2rw7(Z&cK&hlxA5uzCn}(k`Bxk_lW)F9Qd6-r5OX~Q z%8a)*^#%zFmoe+#(>sF`)U@SWM0~?4&+$nTPwajL!G$$yjISd>3AF2-=zqE-R519( z4hyyUr);Z;{5DemN06vJK-jdpwfUPphIou zMsH}O?gmwChtIp^R9kHc2gY<{>*V=$FIHydy^vy7(hV=Gh$6F4I zi)*PVn`{KqWePH>=tKPn(`+6J9vR~RdMzGMQhKdcfpc6zZkZs$xa zM$@{5oKRW=31X+2n)UwvaaD)Pa!lH(y+#5x!lJ zEB0pJtFD-PYzyaALzO02&`fxDVMnQdGOOdX*Uj!MsKWb{kC=)e_%fzoED=miNz2vn(9qD$Jv$*b@FSUPr}&}%hNRq%p691eTfHoG3Xv=s4(wjz+}`6( z``1ZH8$*z_qEJYx;&@v!e{_9KYPjXFjQ(p(%=3#PZt z@6AottA4(b9P>mde^>ps87(7YsD-RRhe(i606UbChjbCP%?~>a3{13b)3@lk$o%>n z$L+=>syK7RrJ?>ee7ByWZAs_m$TeB3lX3jt>2^qovZ6N;GHOoqsoYc^#AFeh-6!%0 z=Z@{=h)LGNk%v6FPD+ek4KunA?HA7&!p@bm*T^pcr{r@3OFh6K`jp>nTjYF}VlQXKW5Q`I zDf>m2Qj^K{nq<@4+}z&34#paWELfBrWybgnFUOP`C!1J4)TZQk3(gtpQzO$b^qes?C8UABpupq^gSxyy`Q5AC(;z&25N=zb|lOZehIE;aak-hZ6bhO%w`}Dsix|jOM^=Rhrr2bW_UB&1*B|j0;yw#?Eq-D6BRuDGcuwI? z;l;3i591@W&$qvL-jg0Gal&`&eglE;ezKM`)rNF@2V@um9qPxjglwnZLwoz{>%7#_ zVNufr)#p#2*tWxIVLxEA9<60x)|0MONn(`oTRZgiImP>~6oVL*t<; zi33U9QLHdcWPb*F=d~+%dW~7LhPznkB#zto1KSfK8T;w`%8qQ+9_GHc_VPRZu;x@0=qY}@fz4yVhD z7014kK0$u-oo2QA>y^09tb6jcrwb<%I~8iokQ3fEc67~QdpN?|*MF*XTEu?2>?FXHLcgjer>$L%Ul~$W+e5R zv=%U{t~Y|-W^9y@QX?3+)LUR4~k9YjYJNzY=b^Ms<9rd6wGKlpjWt&qGQ z=MfXS%qMR)q|?gFBdeYZiQ3xAr0V9p2>B5}?tuKr|M-utY5AWAPenvB8I5cd zto;+WXG42Z9-SctKb~Bia32IY_>*?UoaE+ThivA=NuQdUUUgoZTlDlnu%_5|)1El* zjLZ6$gSsJ#GY%}Gx~aHk|M=jqSFa#P^)X1M{KhO>T{xuQH!i2|-cEbM!G&KNsIOrk zHo8IG1*wPSM_#M$9eEfRR=NKDhFXVT8mf=}-1$>|Q78IbY{r}$uj1$--@yX2aeTXcRxdthTvaIE0p(r~*b2F0%5;_jRfI z6i@du1qBX`1HQcAdF-p(UJ5Fjp>~FKL|5?f7YAM)u>YCA_*LS!Sea)a@cLK9c)Fb| zs&BCXzF=dU6ZIW_e*bg*1dA7E=p=)m`d_K8Xs^&~z8*TI{=QpnT{UjKJm$eQ5!LLX zL!Bye!dWbB+5#tG+ljp3LK52IrTBq+^!tMGzwm_`#*=B%9C|MwhgV@fuv!*Fe<3ZY z-yCoZYgcxn+5Z^@sfwkD-Prc{N3B-knK-te3->dw;- zmlEofjxaDt7T9snBRa*(nByE4J}Diob(&?3v4oju>JD0&tO)D73POXtZ*LZ5-1TFe ztXCVyF#HTp4}NOu?&-Y~y-c<%6ytQUbHC~NMCV$?&hl76&BY8|DdNht&QLTobMd zw{}Hi(op!ScBIn}1@Ji{DY0mfeWx?D`|%g_ll2oW8Hk^ed-Ra9 z+@!sAYMrsB`uzo*i`k0TvhZT%>yX*yj0m2J3geM#5_cGpN|C7mbHufD_5{F$8=IO= z!#Beq<7lw^ra@F+EPpz5mvxN;U-H5@EYr9uaCIV#!tK<@AQ~n9b$TYWwi8Jqiy5v41`L31-MPc@!xVq6ge-o)+lu>=&*sT58bWFrQ;m2e{w5R{ zZ)_3~m*hKi`5cmg#vt!lFa=C?U^U#e3wPFwM$?EQn>`hcp z8C-H2SBQY(wztR9V!SLYj7JK)=w%(kZpMK7mSFP0=#R?HiVCcqXP%#f<#WaDOikkt zeq=#c$3GuORWzi#uk6&`9--T|LXg@a6E(*uoKSdx{nBxbN^9vL>Xk}_*7u;*p&6n_6cc5Yo&<3U-rygyt< z7B`t-)xC@JN54dMs761*uA+m(D7u~`LQVAj3+#LMv=V8_=T%!@D`P2GGG->9MxxVG zO@>G^^9RA!9(T*+4WG};%iQ+ZuyHIull!%QCkKs9G~?N>kr z)`z{vXHE-wg^oqv%OhKV1nNwETD0g2izoyE^u22Kj1FFrIpw4&ckfeO=)Uvwa8@?A z*7z1GR6-07^Z4I9VB?dwJ(}NFP^oS9yeHTTzhu;`@LklT*a*=GgJS)SPemT#AgAnX ztKxz1uSSj?g2&=T;45kMm37nosKM$0K3k-gj2P1=qz0HwC3(+0j?RWVZ{dduYDjOT0 zws#0RU(B+V@X&9^9+f268#O zSC;lpd4?TtVf5(Lc#kVAHTI}W1VMk)&!3Fil%niwX-~kXc?8a%WC+wE-k!cVWLZ%d zcZrJ&k+iIMb=uU_h>e|p^D8werElkaCP&-LFp#(=6pB7q*zmE@1(P*DONaNl>124` za%a9wXcL}2DHgY>Z(1cB80=|IyWw$4OT8U5ManCGuauHW@6``I_VzZHkdQD`!&k62 zU7VXczTD9$BGS%GCd&O4k^&l!abwEAT?|hcrKT<2-*M+2q`^G0Le6Oq;?`+gTT zt2OaPuQWf>+ZUR&%8ZmrFO>gLw?95oa$h+U$Xbd1o;`7SsL}-sS;s~l)Ai%Al3F9` z3DuD16Qt)NU!Q%+@qR&4d$`~P7W@;bcoza`6xq#tMvS;*%xPMA9xY;en0R~yVk~K> z;tM`G2Gs9)ms_zdSEp7h*SjAQ71ko|5{UJ-zCz#PsQ#MxXoAeMXZPrLdGXx8w_*P& z-_yHfT)XwVulVfUJ3U9N5yRffyNQXk#<_2Wv$xfl2emZG6vo+JKmRt~9fB{k4R22xgq1lQL&t!N#*se%ZDvdB*dJAe480k^%z zUj&(|E7w|*n1tZ}De9G7?gU@;d?#$G9<3G<_?VPLhm-8M_f#RAS+iXwJSV7m^{05O5M;BFo(Q8xn%)g6Mb5=7j0; zka1{uc%hxV@>%CESld`AV8sjXNK8;eYlgUvEFSCt_9}*vV4y1vK8;4D^W9|A8_!<9ewUi;s#J#4|LV2c&teL<%{I3`aL?tGm6u%Rm5vIX4`z{L zyt~g(n+Nc|=DCan*12P&;rxu5L4R-|!J?qXxJgm4Dg19O0PRP#5E{3mxKn3Yp|0r2 z<7G0Osx3zi*FWO$ZcXPi0jMRE$IAU$Z#Ipo`A75Swv{X@L^g7kDObxi3_~@C2H%V6ANQV6o5FO>{y!Ka_m#<}S%A zyK=C9lObEV#!KmkfKRVVy%UX8s!b>9nA_mG^Y&5V$2A2z%?(-P)VdE1>v23EHcoL7 ztToq|EiC4U7_P}UsQED-*l(x{dw9ax?klpeUqMc_qiVyg4c2*^6>p78fV3gmt)YbY zhFu}Oo#v)w=p*rN*tdUTXa6L@O}A}tkbsi%!>GwNcvQnBPI<@@?sFz&L6%QOf^$QD z4CbThev7$z9*3=xD}rc&nH?N(NubP*-eM7I1%T#fR2iabTqD`>d!d!n#0N1Bv*>y& zSwWn7XrFg@R3Eai()a0cSbTf~ORt{!atpe9CbF~RlKnYs3<>S0I`J+uw8oqdA!k+l z^bOHj(ao7zWZjHM)$^~KFWd6!kW&W~MdS{vFR2eVX3te>9`KQt6gbZtqA&=I#kelO zW94&nR6=w#V$S6H_tfHGtH5HOPg~8Kh9$n8rm(o7qA)0`yLV4mPmz=*$muF1_d}zj z*~xfpdsQ8iiOPU=KKYK?r*n}ym%T*${;=Gh!rtOFBo2*rd5~XXrlM&J-$7tBc*OBdyLH)}baOBn;+#zm}|1 zyJ>c_uMR3F3txsCqn zu@r7V<4I%SzD0+6Jg-Wo<^E=h@%INhy1m#5zNT0MtzsQ#u7B+;oQXta z^?P+*_G|Igdc^PZ_q}BWBxF2iy_sEFew(t_2^*|qhKxxmIVJ9Ja>m24a=}Qa(7|&5 z79TrgdesnBzIeXMypW8@*xu$YRTWrs3)10@hA|d<8 zA*qhQx#>&-e9Gp!Y~7=!ObSo(J~j-hNgQ=(Ok;IcJN=R+ z@MhE3`7DbnX&Ipke4=#cA2e2^1my1*3;m9Jv!0Vd6yDa+J&knmJ35U?fM`PhMXat)aCeui)vf5qQ#w&+5qfYu#E??nP+!Cnf11%fX%1aOr#_h`M~9 zQq+a-edyB5%CD#%r=DUrA;-iYh)Z@Nrhcq4r@vX;uRc3(g|xl6xdEo~eP6#0H?dD}^FwJ1N=zFoTSNfdK=cwCguV??S?>{!gZ|T1?!ea_y-j=l#7PxYfN$ z4s=(tt*oL6(M$?p)*XI}HIR zT5Abc$st|3_f8vOn=aX2I>3BXcvxQ36;xbyQoXw}SQtFu{W%>UMYQMX5xMBs_UiK<)*r{a?g}RCvH>TBkUE+( z0>T6$0Y}Txo+ki_08rBkxgaeQeZ_`(&r#pK!h$l79m~H;ZUdK6%{z_pdq3T&_ajyO zjkQeToA1ME-j|)EeE#HhETyER@|$+$~FyOt(E($gi_U}RtLK;xL15SF^dpYpOZW9+h8qk+WtWR7AR zljufD4BDIU#~O%`H4Al-gKvn0X1t78W1dm{nWJX^P6mJs%qV;AM8N$38Rd(S?6{Lt3bsk1kN>wMfF^jH;{ zboU`ojwX#4PG#&~OzHOSwb`0Zl=*}T7T7pG+}zQMxI9nkPD4ZkAJ7tRaTgsN(RWU^ zag3My`e6rp?`720yyLIA{Qz*HM_5G z%96^~>_3+3fNt>%XKdOg=H0%@Y_ z_3n_tSZH)WZM!~^{GU~zZuc~A7W>MTw3HN2aDytXSL#9c+TPx^)2<{ZCjnxGp>=?#*` z4`Pz{8JO+@HIl{`cdckswHC3<&zp~snWeG2#1|=)1&8#g3x&svGZc>Z&&&U>OZxx+ zrqC(FBA_N+iBtTKJ09E0dgA$kGkG_-<( zN1~#hy}8mxI8F5nAtI=i0*{s0pKHe2+LTk~mmzY#ENriQA0TarP+hju{>Zjczi+jU zSsN)LdkGfypKsvJgRKHxrs!_dRU1rCYrWH54DD3lftVz?Zmxf^^*S)ywS63>bxs@z z7umJ0^`_7E3w2wZMdz_fuEB;G?`xn!^_-&&Uj+-IY|MgXnIg)S$B?B!TnAIr=`Pco zJ6g&(dZ%0TK(DVPteb7wnGQ~7Jh3L8)pW&kpVaT32`HPyTKTh&x)*&IQ7Xd|lRb)l zpQfhX+HQ<5Cae>1W|71Qur>>+i>`b**{FMc_-Ob;|FV3U+%xGkuhWtQ) z_M3osZnM*3jc0wXmg7A^i@v6-pF#9_kr>R(-2Kpy5Xt02`==rw3Wklr?#QXB%_QVJ zEuEoDcT+9lF~*8{=-np70$_G-9G_!4x-nQnKn`yjJeEtLK11u;*uyXlVz6Y%KliI zxUCG{w3gQ8%a^}|#jPi#K22qg_(4UG(J8akPn6X!0m0HWG8Xi2W(l)rmS;7w-OkV# z(404@Yv5|b6RhX9<2Cvlg!nk%1K>1m%I-r3I~^BS(AZe@?ep=l<^E(oG|oLCA+yblZw~YY`?m`f1PbPsjL5tE&1tYZ)^4BT&OJ`r`}e(z zi_d^V353)yP_@mC4cVhesNiv=pZ5|l zJMN2Ec5%ZAe}ogl>EO>S5Eh495tEtK)6{_3f=p#sCc$B(Jrf3(-jQeko^%^@i@^>9{@AUYLu7skbDpfSWIMHB0i-R~>0 z77{{~KUyI&7u8ebe5jN+AG6`6jr6E}pCIKrT7^^J=VNxsyniaOT+I}~Nd0(Qw)9(^!)*z!(|n>ud-v{LVp5Xn%p@B#V7z>;1Q_(w`7n)^ zKIFb7r_}O;yYeTG)_y#3PuCTekzod0H3UwyINnm7pUFB#HblxXd(mm_9}oPK z04fAen343FNywX>o+YR94WXbymd9Q6b#-WG$OV+v1FBAbhOU6u@o-opds4P&8@@v5 z6R$|9rIm;vCL@!7`Eu!IFI26vr#?cuh>AH@DuaZC%EO~r%21{=Wr1oi=b9}42_2xr z?%)&w>~{rZEps_sy^N1MMxbKJzN;xYO>45wANsawP$NMG89>{C`8_YGZ}4@;Y%JW! zo%NSLL5sH_vb41HF(Bvy)k3OLkSR)S;I#keHVkj-%UiQfk3xjVuolIm-DfhqJ-ko= z5WQ*~H2^>iF|QL*vOBD#$NQt4%k8{;WgPGrqMYQ<^pDIJ7K==q?rjuTl6d#MqK`A@ z_tKiOtWYk0$AIza6O_EU>JExPr=6&@_G%12gtxEnoeT&0jq2um0S4qWSoOf+e1CF*9g&u|%-8KxHq?bz&x)xn2SXX4y;OzcoXbYzFewB1+}2!1|6ij6~&sM*^o z(4Cd*_POBH&1#fxY!*8%x$RS2<_SD&phTI#z-O58WzZac=nHrzl=yPFQ|>Qr+WhuF z)OYk7)tsFzQe$5NVGT+UQ|+)wRjz^|OLW2}5VX2*#*gZokga%wrJ6S$@<#&obb^l?K{|J7uQg?gH+i>Q0bN z9*$a=Pr736evO=}2xh*9jZ#sJjh4XiFyXvA9D#t;si@su9H7A$%1zY|Av#Aa4UZF1 zy%pg_jRpWnfz1;ORvsnf`SM!F7bssVhHq^e$n6Fgvq*=lXhRNH% z$!9Row=;Kf7(YH-Xu}6uSOB3FvQ^3&s-zU);A-z~PX&)2CENvE27!`X)i@ZFP>G2@p^b0Q#= z=}EJZ1YQHD9%?LBpG`so&83~IHN#c{>Q@on-0SZ)a8I*^7Pls_K$u?*6?Nkl7`ITQ^0amU|i?V1FDcWPb3Xo}KxL ziuv1}a1&tgZi5IE45Ch%Q*{3Z=#c~C7$)Z5lt^v6o;!?KZ-kr_Hmn*qng44u;cgM&jxz=Hob7OJeQ!kMF!iBZ{l10Dn+xN%?-=7p8fGqamasxkP-Q7+_d$SKGRFgzm zdsDg^oUB@{c?Zw#;T9a$8w#ihjrr%jVfj|-sP z2=LpN?DrQzs|utT1Pwp(V{%&!OD=787BA0}ohZfjta9J0I}_4y+`j^ac-ExLurAwI zX}nvs*HFQJspiZY`3synh!t3IHXaoZ8#i;jM+oQ5R-WMCP^h;*`sf@&`ZXfc|i1pLGqXUwUU#e9eh> zpzqB17R#({%tSrPiP3bs=xt#6UJp@+;PIMdZtdxH=v1V4+KK!c5+f;U&pqXEthxW7 zWyId3k&mBuK@dV0a>v%X79_w#-@-_G@N`2iKynrqH6?s3O2 z^ykBq-?5qX!#G8}0|PyPwgR0XgtA$HjFN7?nM?GV4=1_c8)Yf!^0^Lg-?U``6TtWy z9p<3~O2DdKPjQU{{)Hg_V_r=bhaj6(ig7JTTw%a^Urp>FCW6ExuKK)9aEy&LnHdTG z@Oc4vltIf2K3nt}2ag)f*=-=$%~sv7m`MUwkl@_Ys>dxoEjBD*@YM^@3cD6Kr&cuY={HAnQ`P}6UKfmiU(Ov0i;Dh?kM9C_V1n}* z6~jlak;La%6P6phCGh)v_ikceUWtf^xL+#dE|-oB2nyg7*) zvDw4gNH%9 zy6dS<#I+0GgHed`&v*>--}&2s9Rc~~|IN4NPl%9=5PZqisFdG>8OMKyS`JCxtEmd) z5D@i0U$)3h%w~_;{~17qzc46_F#0{EH#T=QOiZ`mgaiTXdm6dWyqsepjWH>!qd6kq^O_ka!jR z^@Vla0ycK+8at>G|NRLVnOgSD9Wh@Owo~{ei3CrYIi!#DuTQG~ zUHAKtX?k8KEHQCFYiCwor{Cfh;)|P>*;Zltf6w>A5pxhJ7&uTHwijUx=wBiu6TeWh z`kUqsQh1Z5;{TajZs6Np30Nye`5hSvR!-dsc9TBz>Sq~MhE|` zl(={r`24DH!0@_}MRvp3;Q!v1GJj7opek(XiD)tl`^TJEJYvInjy)`A!s3J7t<+T( z4>J=JvrXN?AF03$2SIFbbMU>%Fq+9RCccxuYlpPFFflPASlm**D*n0ZUfGWS_Fxq) zZg)+d#Mv?+1FwI+_Bfw8&?kQXuhsZWgkbswoJRlp%)~JLYG@N%Ens;3ujMJ%6D_v^ z)+^*7wz*1UGJhd}->q#X`VI_>Q%n+m$6(87{M_d+lq;AP5f0a?%AekU1=htLlba0i z`GKvwXO^saHV1iCEP+34139*vj7pW~=K?J}5ZNaGXqA3t-2&mw5D6ipmPwlb4R{T? zoZXySCN%X=Kc9{b(EDNuPGXDqY5By1tB8ZR)w6e?+n>GbV}Fqf8lQYir}=Gh#K z(n6!|uT}x+<_(ykKJF5PHf{?%)3L2-Pf!18{y4S?qF(~D_tlU-B68W;{@Tz6E;dY= z-u}n648ff^?4BQ&4c3VUhw$!@x#DvkAWHa!#J&Jx_3IopS0yc5UqE)NuWd>Q4!lf| z{PBl?X)XC*OQRdfY5giS2q6JNHyb&Noy=-}qUtAq`!)a%k3i5;pqztA#!y?7v`>-{ z9Ru^Tp;r1x;|IuunZE$27;bC14)NbIhM1tE{8I}8j>~x>?OR*(pwQ4(NcwTKkq;o& zQ0Tls~w;K6_9!@wbE+k|1v`nnx13}CL2 z@m-C6ArP4Sdm5UvEuQ@g`P!96J5XbPn=av#xI58*P$#`S98a9LA^@_Ra1nfuyfq8F zaWUdUvjDvU@IMufz;^;LI6ztgIoTl)RFm;%D4HWB8Bc)!_ew~F*ZvydXwhr8#R3Z5 zkGE@P3zklGn8Xu+Sf~G*Xg!(K{V*E2`RdCN(K+>eH82vhHDhRShALL8YBen{bC^f{ z_^@F&RWdD4kCC4U2O#?UCG~?mj{wXAz`w04x-~G?dwoZSa)%kmYX$KA zD6+rtfSM`z%a?Nao9ee^0KegZY1;k|ej_qdM#G%$eS>3Eg&79`07!skm2YB#++>3e zfedpjxx5}{CHVVH2Q_6i)7c@-3*HrIhQz}kk?vMDR|rTDhkx>Xw4iJmNfH6Yo{RGZ zAAmJSf~D~FIq?(7;;fpkph3w9I7X4l?;G5w+`l2QK}>|9;5>fF&f5uxFor603} zjxs88Uqbw4-?4@2J=J4d(UyC}OR2F2zonTFh^hQZiPAn%{3+|>Or_In2>unIXM#I0 zK08($S-%GiyR!IrOU4(BFUk z!h|4+0Xs@qM2Rtu(`}gdcpG>lf{rZP=&0)d_u=l9L6v1D8{7>NSUHpm|__G?N14$CV1}o7v~8B;now?*}mHuyO$} zatenENhY}}K+1EwH&S(BncDjuYYueBd;4j>T@{cN&Bg2u)#xlT{D6kRcb4Ok4q5(V z4mmVo00t0X&p)?B-Jz4<1nJ^`JV!wWEDtaffZE_ftET=S8P&*Zl+BNye4EnP)dhba z9+Uk7JJz`#(zLfyQ?#|UYf42z3-!}s<{el9tgIxD?);@&NMrdlH}zU7b{oN7r^+>^ z!F|O~;kLC`O(~>zj*srHnq7N;=P5F&r#= zS$`J>sm3)p$mG!8)tJ6$1=1n$%=^+%po_hgtbKKt5B836)Iu;|ESwEp^8;V5rttmn z$4@MiUh_Q1(yPhWxi?hGy@x>gX5A1x*lw_cPUWPP14L2QA>^5&1M{%o^ly8914^8{ zf`&xeB52g**DRS$v&Vzs!ST?IcK-e`AQ*bdW%n<=g4`rf>&`Zej3-_CuDh+-*7Xh* zKGrHj;>$l*c`(-$0LD&#t0m1!n$F|^IVvb5tSvrO`m;6Dv(a&LW@g?MRJfN>b@ny7 z>y9sFQvi*~CjnVm1qEz3M(MKeut-XDDgvj7!5QDvR8l@4H`Tm*iSQFH%i@;>%lXsH zw?2k63|RrsR6EWOPDg`BbUn+-w?p*gB@GEyE%)94!5R&ki+}TUJ-Q=EguoRp+Sh|+aN2t8Q2xPK40l&Y-X;5u7jub&DLk)p$Hg0_ ziUSeQj5hZi+?nlg0XuG@IPr5;0iuNaHq7$ej8Y-R%HTF&XFIWYw(lRz)FtMKhwV;P zVY%GGN~Cayl^Ts86#=Wd?IzV_&ykJ%@!r9~472UP|=G&C?@|com&wj5iHmU;dO^t!G6RR&H82ewkj>oX@lRZbQG93jviiBxgSNfF(Y1FWJx(#XsLkhF-5GMIS2 zyvtBGXt))DUUXVe0IB`k&Q1!Z{lYIG;qfm`5b&Gz17T|JzJvmPJ0fnf#kap}$xl_( zF%K`&u#M9ENqP{LyfIS+^G(}|#nST9@#DU!{8wYMd3^0Y-BgTI%^kTi`xS0coW;tN z<9d0Xiam}|5K0sma{CXP!hC$#$d%AebCsTu#4N;IN2fw_O+Qy*! z@-e53fw}-Gf(55$K%i`^y$o9qDJVVb0==ME*dG{@{f}7YHcz1^agAJNqm7J!^dmR1xN~`jE1G7wq4^(J{1e7B~L)Vs?>6fnWSI?(nHCD{=I_fSuTn zI@q=t-r%oeHu_!PLRxp3F-QzV83)_9`u{(d3h1sPFFNvSi_`Yu>ZxAFnhGJJc8h*Y z$i?r{%Vui9E|kSmFO&RV8|7ANdY}RtC$HeujtVOk>Ee$ZfBiUnWQ{yZqA4aK70kbp zi2v1XJWr9EGH9i~FU^Q!vWLPMdg*^8Fe<>|_aj5E))ukSrI%4f=qHa5czF%#C6`AE z%!1DQXafJX({-1uoa62N*>lb~n_jEux-Bpb*1Jx@UV7Y#YSnxW1k9@?uYE$g{e(;a;bj_A0PFDaJk z`(BVSyxYA;JDJ5}@t7|#%`g?jVIcV%8=Ko(a)7=vcPB>=`AWIMfIR}qmcwPr?#|A#IgajWba-rA;>g!U{5&a-7ENXJr1t*uXZ=SKn2UOZ<`>gA@z%Z@&G4zo>E zlcfg{a*8-$0KHiH6bktGU~B^u;)lM*7}fmzrr|p0Cc0R&1p{Ws$wvC)vneiD-FCP7 z?I&;MO5I0S>R`F_?s(?JA*13RVVwqY5bIeFg)u+Lewwzo(wIa+*6e|@*A!!mZ?)DR z9dZuVV^;O*@==AXCeD;tv7=Fa01dv2zCIogdGc_TWlMjRjS8PwV`+33TG}_j2$iNB z@$HDvfki*nEy%2t^b5G;QC`A*4vVdIY5v@aRj9_xc-qls^}b z69ux#s~!Gh;6!CFj9$p>QE9Y?UG{t?2gwp1QHPsVb34y#iFBiy5>`pmK}Z7A=4Q1W z=Cou4fP4xUYb?^hn@7J#`h=E0x|N}#X4#e;g=k_O(AHOS_Dj+Y!%RUdq0IUA3sCVQ zajuotD^B3OpD+fpTs>e0iCe3VK;}7}(v*MEP)l`cQ{KGsNifNAIuA_xtX0 z51kmhvwYnJ;HrbcF&v?b@5x+gbj_gQ(WL|RG4X+ch{MXDecwvC;IVeUI&z{=KGCY> zIZ|CzqsMg~;?WqyV|!lN;7j_(q4?pPE`Z63{wjWtV}rFgDJ+j%0Sf`hti-e={4v5hqf zzOs&u+ff|o@V(*WjEmc$zRF5+M&h^ceFOM&wuZwA180h6fk8or6OtTEN2g*g2Yp61 zZoI~%DBnQ>bTZnL8tJ+6Mv{vJ*`0_m(oY!F4<)rng zNVO%hwD~sX0tUX1(>`vAul|+-9z?eBG*8W?#}j?++1KeNgf`5~$RxahK~W#yP+e0u z)l=Dla5R(ntJ_~v9U6`7BSScF<_H{8uQ?x`F!62x7MF6sArI~o*fdbS0RhaO3;4mo z2aR`I@4~k?qZaDOua{hCzcUJ~jIshO_sChane)YIuB;>txfT8}`StQprgZ4~No3KN zF10A}&AuMew`}yucv>l+#ZBIa5l$IR3~{VD*2VKYQyt^cvmD>20u2>ip#bX>10ux(Djlxpz3)c z;lk*YtKi%2LMfHbw-(hc1H|G0CkHX zxRQCQ!5|K_89}>14-f{s(D)hO@KDA6{^J2@U4eRSXSN9m>T-_~Fqa@OD=^Tep!eWE z_PjwXZ9E-*-|&EkixuQ1wATL0K)nrmW;(3j;kB&xhqwi2lgeyQ}VR zAJTW1bmC&QTRH5S^{q?^fo?%69$kh(h+$`U_svK0Iy4F+i!WT8laPwRY0Xz-fXhG^v46>>ZjCj%c%)vm>8JjMc<WuL$j17Vt!H5_fgFi}QKVJl4Ozv*eFlJB7V2gRT{u;8ea{P(JK#6ID+!G^dkBzQ zO7)Mx6$zZkAD?Y;)vFKRu+Sy~wHzB>#)u`pUmmHtRca>F)i{8{^(cSJ23DQl*O*nu z28b}dyoRL)9F`qHS-8Ja5r8I*&|LO{?3cA?4jK~*nQ8a%NU>+RQe zdtMvt_D_PgXb3nAW}<#=IW1U0+#SUtAgG6ZzW4d>oOVBh*8vc)7iAoi&y8P|i`MSU zN;8aV7zXdI+@R_mk6OoY3Z?d{PQ*Ah8BkyMU04wL3z+2loRs~2RRxezr#IwifQQk! zZ`Bf^lroAV7`S{g7)3P_cx+#%QfEja&!4zTYqn7K!o}tG8}UcEbV?vd6qQ)g;txWa zw);ZOGnAU2O<`9T1@Xv0u3^~Tr%gQzfGPu=j?hM3PT+|K(DccmVc74@f3nqRIJ6gS z%HNv!=JR6g(fkx^vNj(5`k43Q&Bb}CHFxqKi$zR8qyW;F9+$(yYW2^ZO$2q#`Y`hSXVX7Zs!xOGQvi-@Hq=zjK(Zd<~C5Vf%}MhRg1 zuN~$(1zWS!r!}~I)6(7mx;ay{10oi95MXaT-*wj)7W8*qFLy46*Sg3dZLPkT*R?g}>Y)A|fIP$oijC+72+UKK%$SNXsS(%-t zVHSt_+9MCDZ5)6W;Hz2wQBWWZ|0f<)!^)!rm@f(nfI(^Si-J`TF27Y0y|k4@r2!?@ zzbGUfO!8_6zd=oc_e(Co2jn-+hhQU{jPJcYs<(Le?6O9%EaYJmbS-)SE^4OMrLfeq zu9YIEy}kXR+Q+96(R)k|-gS09_vAbGrolZ8U2?6P)hmzm z73T^$kDSqs570o|MkXhBvYn&ol zX~3Fk014t?!X*)b%_7qp&0u;32Spe_Re?k2QO{L8-v@|0ELhf*S~k@?l&R1)AMWIR z&dAJgkJ?qFoa*lB8mqE{Uv7TekgSc%pbOGo);#5!c3CP~FBt9FtM!_PMjd9!L{`I3 z&mml%yvL!GZ+Wr&L_{DNm)PEo);Ux^tadSidT`HGG=e^$ey!L$Z1Ls4Ixc;$F^ZdH*(KY{AjT0K2 z=2)z$A{Nl@g#(q=b`@SKi2ezl+dGj9@c^WR^%_s?x+Hmbwuu%1g4+&HfpqBYQ_pkc zLLC;&ou)+e4d*XHwv7}XOA1ED)UE*~C~&8wN!@m|=Bk?meQ8eLO%?S0C5v6Nulvk5 z^iImrjT!hzlb1Wv1F4@Ihf%qME4`zZeRjgBQZaB4Ad}i70%;nw@bR2j#E zo-Txajet!Nlg$`BkPNcEFMevNL>El52;Ms+SV>fGWjd){+%f1twC^}!u-F-8;w3aD zEHF%4eI)My?jwUqY_VV}afiYf2lgR2iY`Dkw_jR^89N}UcITOrcrquhNzR}AL=lT} z(6d+*A$)F3r(G2zotqqou)oiBPVK;1n`LEX*=UKMosC+3xX=Y^;G6C|;CTD3gvgPi zX2~7~z+->MaDV2HM2~LzHx|J9C&*rR)PrgN9=M#>teDNoXJ55&n0V!me0&b>Mj<*m@o@TJc;Ng6 zX3HM*0hWKo#*W~z7%}f{5xI9Df%Goa!xDO0(~cs7&z@00fE{GrmA04M0299L^l(Me zFar+b%-78kpo9tkW_UiA2((pb;X`c!`ZaB$^{_5DK zJJyNICL}g3Yw^_rY22A6D!)_47TNr(_3I+FhLm(4_{ZHKgb@YMFMjQLMu4_t2M?Tb zZ`Iwh5y=?n66Sp}Xm$*O{+{_lL2aHRwODs|S; zvwrYi`?37G(6jk2x3pA!S_+73Qy+O<1T7y{cr`=L9Jiy|X!xgdUn@i=GT)m@8lqBK z_2bgB;eEz(kj*+RrDE3ZH-7sN?|kW(D=xm+1N7KX7U+G^jSkFv%sT##YDfvbEqr-Y z@F#{L8P0-Hure<%51)Ev$~s@?gT1!kN~f?dT>a4}jvr(*^n5^27&^_hs$ilps@H(2{x}fWeRugPorOo!!Fc?FV(Q-;RU2lL_mF|*LS7}@`A+HMM&$C9LQ%FYy_?n_YJNA zy~?$j)5d>dVyQf)DdmEBhvT2PKQOeinCG1Ikx{k?%S?Gvd=!Y@#%OMWpXi!{OJzAVn$=6A}_C$6en- zNEtJRl;r>EN`BRPPnOM%5r?QuH-QlHR<0_t=J=-*f_ILK8!ELWGB5tlyG{apRFp0X z&>`#Odc#c@Xc2X6=zNUp-7qZfq%jvhJEF0#%)S{(#>?E8s6A`ta+Ra?z^f~)bE0jASE4*-g?nwnUZdqr(de`DNv)99_0*PkX%4)ixZ{6fHq} z{CUddp`Q%m-VINGzVfi?&2Kd1Yl=`p;|V^nH%L--M2(cJNmR#vtEkz)@3FQWR79pW zpvA!l-a|t#1q2v^Lr~Lr%+}i8K`!`~{B39VRK(HSPQ%k^&4qeWZ9WGFKQ*tWjjbxx z^2anQo*Bb*NuL6`Wt)tHYxf#cG^-KS_4y~N63}FPGSM%Q+!`%xxQQNey(4thQ0OT= zD4nR5b)YkhR&4m-ZqPSmR(bx3!9^q+a_PE3QK#dvWd_U`3}lrlPNSV<5~TY;mX5ymU?bb~ayg+0XW&T+gN$8m zLQ-dJp{lt;N}P@9dsPEkYTgac)G^;$&7+fc&vAL2;sPmOnF?6{1-K4aGrtpd=TWOw z^R)SL1jAaiY|rP+XJf;fCKS`@BD3eOQu8i&z9d^3GR&?*KHPduUI8@RPB%fR4udZz z8g(s`J(B_p%_~amK_#Se#dTSnW7{BqU7eLT+}%GGli`N%sGZA1<{%>q&H#M4YwgiU z+In^}*53A`(9Fh@t`Aq=h&PYg4(s+SuAqwI?TNnDkiL1>E7%}9`C^9s)>7-)l>&+V zaJ>i5Y9&7($z-{fyGd=b%aFO!K^u3(tNFJ_ybIL3$>4SG^km~0eCf|WqYrp_mW!7< z#Fnj27I}-4?TH4Qh&NWRy{{-=Olr4n`LBg_iqVe1~e!X)6SC(heZ=v zju&qEQK|!uHcV8h+hST0*8#b|lok3bIW9BgqY^G&vxMb8*F9wI-&}YldTcW~iP&PL zH00xvQx0xD(Q=PvSVEIZ8jWt*Yu)I*??QE2A^Uz!dD%R`^S9K(Lyue#f?Rsq!(K|R z!Hw9GgbHn`1OLwIgE-k z(q21ST6un^Jiw);(2v#8Fj{L!Cx-OZ*=?B6Qzdcj z-cmDha;w_g!dQg`w{W(zEeZPRzGY}oy{bo<>SqD<0(%*Ktb?V*WE>N?5%Xh}E@oGz zjz+{NU`TfpU|cU1HD?2MpHsp_aAsO(Ut_eJv)Qm|E75UlB5_l`Hf>5`v#$-u1(eR1 z2h4ki`d#beZ(5C;dcRD2&aaXtd71uTRTT>VvT|awJ4OAN)Iyr4p;23>O-ou=kEG0d zPLUrFAzz{%GUwjnT583^{?<23t-O&{p8zTt+DU6JrLdlZ;sa}-CcK@?X-IaXr;(S^ zLGOy+NbE0klI|bMmK$J2aM>0GN|Ta6-)Q&bKb)O~(aj}ESqdOdUzm$ZI5QE{`89Hx z;e=ElpcNgBGv~uOp&S8?YiEcxrYow|kk(MO{c*znq+a{Y@&L!#O%GCS<5$c>LS>^B ztW>)V6%0Q0sa0_MOf*<w>39!FAiU zsr~#e+9b*ky=CN6R~D^r0lQ#vTOQnRYHk5TT6{R*G*&Pk>R)d+HyJXzF2;boY9M{6Eluj4^P$-0;7_Di>o-953)L!H>G9llbqz}y0GbZvZ zJ)pYfC&pZ2Iq%(()-Di2Uio{M`c>*h*=&`I#nchk!L?G8S*6;b${!M_#IDZ!Ywh5H zOq*%-vr0t?+(^#^}z zb0(<=X0+a4qh+{iyj;&^)Rpd*C7cZ1+{NHCQQ`9^q8z*;Ei_RGL0k{scxUNysczq~ z(sa*g0B+M~KKCSMdEB2-Rz?efDZFm-j4@XHpFt>|Q+(@k{p3BU9o3GcP1mt`^|w?L zMyqyH&-N@twP|0bYv81=TG`H$Xd=cYmEoJZD=J1hyCu<#e;*oJ&WL{Ms(tF+HJ0E* z(;y|5zQ5CY<}DHDZ}r}v3}FOpWhm;`2Ia;Bp7s0}i2Ty{Z3~KS&Q?ciUy?{sx3HNu zSKC5U&X8!GoEvW4Sd;h4S2gAfxvm@eQh6JEXrmID?&iMPA_d1cxhrR{wR0vh;$(ZZM$^4LD4N=nJpO4>QKmD<>bBo zUCxArXcO}>Wf zN#N~XIon;CUXgNl-!+NFHM!%7SLuOM5(LEXihwQm1{k+|B=9F9Cvz9h#SvbrCg2PY zIdSa6t>q=D25A_~>}?~95gXguTjTjWZbkj}Ktwddwr*BO65cPOmM@k|mj=QZN4B;v zO`4C-XEwASEWcoP-RCr{xx+XViprBSv@1{Li_;f$`<~u$(5lvKGu>C7xtQ(=9=~MD zwJ87(2ilRyVXA2~uESCi$Fh7%( z2XUmmy3SJ>DK<}-Q8%z5Z;KtnxjXfC)amHc(4NAou`VKikt7*_qm$g*IiE#o*IA9B z$y^a3l0CUZrn753*>Vk3lf2=hji_nS^clz;&7gDKm?eSY)FjnDpgo?`*4U$LF>iU{ z3#aOQxE~EJRycor=t8@uVt+-}-~LhxN+rIw%-D|my5*iczUT1wS4*wLb&>1??l^Uj zz$iALrtdGUmwdKtPYKPGxO1e3uQ*rzW56G^ZS{t3W{)T5ZA4D$8MjndYs1uy84JL% zt-TvLTIphpfqvz~&4yfr>P*$er=-%p{+jX4<%x|P+UxDp2t1j+Gi&|S7${={w3|9u z3ip#m*Xk^TReQ4q?lhEuaNM(ni>@X82x6m$3yN z#GDesew=$mu@tbzU$|D+Hcv63$1dCO<=y*$$I^7g#{#ILx!vb2)5&3E()tRPVnT&Y zF9Qzk1j{o0=b+_cmt-0!^E@VBXdSzRYYVlgxl?ocdxmT&4zX~Y+db?U2WCmyd(BoJ zUA#}ic_>i1^Fls*%%OGc@tp;-GlP`auy-4Mx!QKVu6lHsLz?f2`wnlwNw*tUYdjtLqMZ!KrWaQ;=9M?zKD298+;Be(Q%AM5vld zIW4(c%bQR-xO!H`MIXYB(j+v|ubA`(qtWIu_cFhEANIIqVCuqr`J~#`yTwU2Xq+)8 zHa40n{>4JVa52o>-x67ejP@T)`N51fBp7<G@x;r`^S9Hv+k_s z@P!?^(wFj%XSgi)kKc6?VKq5wFE3p}ckD1c<|fvsUKGD~aEXHyGDBJ({fT%dsP8%B zU z8)tv~$+Sz1$@5Omk+`>Qa}<9jo$Q%lifttiYxs{Ou3(Y`^BV-5O86gi>~sQ3XRku6 zodNuX#U_Z9y01g^*Jo!1Y>IwQWH!vGdwkr0w~&+PDLJG4VOb)Yzc(g=jozXD*7ynT zV?v8}UfG+w>f#Y{We2iO!__`%&tm61Y1?z*7BW~6crAz&w@<-NzKiA0n=dkKso`eU zjaH{^_#oBHevG22BluE^w|DufoA)eO>S)fjapyujB%?x~T*&9aQfpxO4(G9tsCuB` zU8GB6U~Ue>MRdGEbl|u>U$L>iDJ2LtvN(Q*4h7cR*@w;`2SO&erT`HWrVzja?Lcjb z4co%8lrDhVatrfhtYJK!M%bprLQ8v5v^Ukr{yrcgDtVj4b%o?CTfg#d`NKRNr6A3_ z&j6(ohq_d&rQvEj2H;3vk}QF@achI!H0;sS&=PV&iTs{@YK4)Kg7HtrtHgVwG_EYH`YXr`iHbMud(W`PnZjO{8`F6g36O_9pSYZ zXWJNw#@sb`Vf9zZakMy5E_6=9ATh~eNt;&qXRFJ`t{4%|Xt})wq zw5W+43iilp7b@DAf8_W26aY6b~-o6t`GJjDrkJ%f@?! zj8~Fa>*cBv&4)L==pbaz5HU#2oJ0&yipjfn2$-zVh zv}^>*eG+Ui{^TWo3adrXUKC~1hh)Z8Yvd-=dE98Ihr+H(q>1Adfnf++*|HutBV{G5 z1q5G*ZV+6ni-c-$m!c8+n{3s!E$gz_ppp|O1jkXPjy{(2*Uk2s>6b1<3djaUjZWKV zi!8nboA&G?Fr|fyj4bJno3tT^R-TlUSOyEuNh-su0Zt(TWxGNuj9`o+=y>|zaz9_j z@~awdp`+o+&57lOiF^detN#>eN7oz^wB|-=o+et^vu7JtcphVr63+#t(C^Feu_rZK z?Ac8l9I7@yzG*;xsxyG$$Tb+vGo%BJitH~6)Ui&IYr!RwkYWmMQa>={0@VfKfyDpP zxO@H@Iju*;A&=m-KxRVu!pFR1tKAA)a(^`agE%qwd8jbL38Qv9eUpTVnNoM~Px#Ca zH32LjXKntWM@7GUkLyu~*1M{92_L2D?Vlt>DEoTbKl%&CK`65jC&E$BA(0r3_ggZT|G-HAI{P~mpE zU@+4-0yrYuXU&@1Xa_(FKpY9nR#SZT{e}MQh+6og1KD!&6LVp$B)9J#s~KTXM@mTU zpBI$UFAY%!Ns%aeQ0Ppl!!e22&3;4rs7d^ui?tDj4IG>CL~iBp*`nr`;(9_w=0VR1 zPM(xt(CB%-onyce`s6f%$V7(EpFmnm0|$F1(%4c z&>L2q9}KECCtkPkj7nA-4RFT|SV}~xPZ;Wd$+4RGv&(?<_6<-%)`%Q=*;nS zKeI_pOScJH+kr1hp0-&+=DaHcqxtszP6zB_J-8^pfC5SdFWlr3vLf4fxjIQd(PCClLU2lTTcYCZf`9C)gx+V z?nAqe5YOqxQ+<%He@dL$3kc|p zIDGs%0|E>9c&7`4rac?~9t~{^IW|MzQl zOf1~NJa3CSqtEbQlb&@_wR~6)qLn5ZN87|ru_tL`M*@K{DCp$1VYT5jnIq|-0q9!g zW8(Bb9k`P^UyGq`rYsO4>vSxUFPs8shl8ryN3Vx3t@CCU?V$$E>?ih92i%<=QJyQq zU+0ryGIct4EX$Es zdU*zGKhz+L_~X$vk3zL%^=#2ZVdCd+!nLKyX~0fbh5kv1_bqvQzA^_!;^B2bKH{lW z#(r8JO@X+;xWn%>YVM1CDe*Q`-W+FEG2Q~bTm?2=mbarMgi6YM3MdN{me}gX8&)mD zcPIkspe@W<<0ncfqj9ob|1ovo>2TVK5;LPi<)lB1_k32*@NrmjOq+skCKzDQ+)5wk(3pQK5NbiFp%JALxa?t#di#$KiiQ zR#XI~?v`;|5SJP_{Z!Aod-)fq9!}OS%@<>b;$GQJgHVNL#G^&zAHHRaiRrS{VUl5s zmPYd`xIiav=+DtyXkaf)T!_$nW>bAcTitShJx(EOY~r3QUvCWLgjWd?pF!bb6x~(y z;ks@Wlu_qt9{ggE(T0I1)vs zi_geE{sGh*Ma^fj>|MI>+AA6@)j7QZi4G|2n0M#dB-G2;%7B?|pxuJ<*J}OB1cIqb z0yM4J_zX;{`Ri@#fqgqKJ2_=AxoFrmWKuu~L8K~|+_olC0|q7lQ{dqjg0P`w3kNSx;h`s#5=gFdyNfejq ztb~*K>70UXe`OU;@K4ja^v4Bd6lJhk{Be<85vVEcJIKLBG6-KUvIWPF=UA^hbU-^L zvz0TC4koetr7YG%|1CD7GL%Xbob>INu8{K#4{>uuTG-qkmgP8Yn=ggKO?5gVcECE8 za_54KLOkWcu-^T0_FHq@-3uU==iM-p(29Qv#+)|Gnwc~cHy+VJ)6rp%+x4xEG9Yy~ z6&2u981mICU$v!_Nid@9#STgDL6^ef4L4>DapHp(;_$)sKSG2R5|Ksz2eAMofYasg zs}J~p3Pfx$#0_~3O^{!$VNyyb4=*XG!qis)G}2J4_6Q;!E*LaVEE zu)bC$XWom51n+$6B%gWC=4})bD9;h@zI0d)vDP;6F^Quz#RbeqYxC)u|7KE#pJ_i zIQ*8v;q}U))a{dc>DiK)ylSJl-*R35;}TbY{E(q#6H0WB`M;o&h&O-)Iv$Jbc2C;@jswDXAXj+Ox>$3bN|gez45eu%a^&`lI{V?tfJ%kZ(1ib; zJE#iZ^HOGSx=_ek2E8YIyWGBu#?a%Q&wuq$i_(|#+1?m;7i{t3cMuFx1I+9x)Hh%+N+4qY>73f zFaR}OYf+d9S#E4Bp4pE5y~$E_o|vuCQQf*yiszF7*n%v8tmgKbRLI#Ge_Gp)qL{%{ z3Mj#dT=(m&^2@D3XPMBw<#jy9OYHx>Fk)C{ALj zsp4hfT+~Au>@KII3~Ino4WBgQSh45coh_yX>)L4b*XF}^pOMR*pE3kl+nI@mi9veA zb5!#XX$L_G0hfnus>U`mt0pmkLF(ppeKuL{MI-qTsBYO9j#D^w_IIbe@oLI#0+^iH zMDPc1vRb*vl&JU>6xf?DPn9;>^*H7gtTnvwIB0VN2xZ!FBln@lh>v~S+MYtsA#OJJ zy%^2<;K2g*8w@OxE~HY4Z{t%I@1{z+0A#uk6yy*)Jm-hqQ{ZD327lb-f}78HOa8(gF$mz41{+^{8g3+`oh*DU9nCR7@<%0o z`ModeY(pO{eV?1LkvB4+Cv+X)dTPM~f2-W^@3CzOm8IlWn3YZRQFJ5Q{LFOt@Td+b#x-Z>}P`bi8o@EF<#s949Dhzy+Vc1j3c}owj3PXT_%<0| zs8D(^`H7!BAGb)N5mAXWjW1@b8%x5!VK5|C8!dA2Z$lnReE1Ot&m zCe3^Po-rjE61&K*1PL<}P#a<;kp39J2oT^5-V<$uE}7dY;lv)KE`Uq~8QyugI&Ggs zN;n=%zR&@1JYX$6*03F9nFoN#Z^4xU|DM}^Kp%Na^Wj(5fHHKM=eQv$0ZaHT|Dzyy z0PrlR%=`1l0BD}B>m$#<19wNh4aif!O;`+n0ZIk1$^AcdeRnk6TlYQ@B%&ocVIl=l z6QV>7f+Ttkqekzdj^0ZUL`3gI52B0`Wkm17=%YmMy&L6w=HB1C-uIv1U3aa!mNl-= zoX8-UobwTGITr$2GkMzAfEm7P$a-;g-BNQjFw9<2{cE0cTc)_-e}DHrg340=>oxVO*ZySlsf&~jMG zBi+7NR25EVtiU%B8~g<@ePA>c0s*Rq5(C>;3t?0oy8WR4f6zG_WJ=b*{i9kS=i##SMSPKp{Mi~%JiIR`*PhuT z=k7zmnHLVahjCva8@l{}{cO4QlI73|1S`XPS`f&wH%IDvbb^+ARHSbGZg(rPzXu4= zk$_&tH7_=st$Lj+c5v3hdb;DNq8pb|>St{2v3nCVgs#ln;$-s0Fm zYxD`23IGkl_2@a~3q(U5an!mdj=+U>sLfOa=?%u3IWlMC(ed zm6bW<@dRy*H6FgN{9B!4`b?Lm#P}vQZEp~9G>o5!lAJg+COUqt5KeV;F>Oo)<04EI zzXNN6DHibzSVJY#>B2{oe1CaHU>9X&sJLZmHk4_?GxD);$%$C&t%ayqDBrS?&O_&l zD>z=CBByYV6S|BIw}KzvtAowOyM=>>zRd}kFBs#&8SY)DN z$5-`YwT%4TJHi*%O6f$&RRXc!!>ad19ftKfl#8Lt zt~GUze|PWZolYDQhJ_urwvD=kL1bUfIqB$FKX@!a?F(XLB!leSv3C1CAhrVjhJfcH z3v-VuSs>~AT+z_!!Hw{Va+^GnD)(u;_Nix|OHwBfR=RncW~*(&vi>fubtTXRlfBR5 z)6+}KSIR`XMe8e>BaY8>I(gYC+3<;9R@-!_Dhw4$@#JX+;T_4Jf}eOF~Ri*4I* zCVk=Q^_0C(F7YG#b=``VgoH4VVQ5|aa%{lPw(xOZ8H^~}MPaK`QchKxBsbsyt^Dat zv5%j?BbPfmq^_%fDy5SF+Q?cH6AF7RT{3HvwK%~0AVt)X(l@3cZU(l*0V6#ycQA9{v zZS1OvpIsZkp@WuiP4=Oe4_bM%J;oGj>gsr|atB9jKa3YjsaEYw1px0P$stON<81Ga zY4)J`>YpkiM6sp?B!XJVQXl~T5O_Q+obIf#0+-<2GA|yhDwR}~w z?_!Ze6{<2j>j`3Q|2i_=ruKzc+bqs9oX{1fn8S!zt|;*fhS4p`Yo5!hrDwB?mgy1W}sL zJ)~+6p|HXe7^0#=$>6emi&b}dt(Kqg&I%57TZ(|u2xpLhoMJlu#g96|1T$JT;kf+a z8MRJ7xrEO43tA$PI_KYGV<8jzKHE^aowVt#R2-kNDqLK=eK3>wB`vWlPrv`M5HnSH zTX$;p%YZ7s-_ryAlbOH!|V#l&i+@_yAv+_|+|TIKk6 zC(VpDf|djZ6NFjIgdF!Kq@%^*NgiN_4d zld|r=C8|>jW*e;0^ZI+Av02#IDz2xa3olH(!8l6&#kmmSDk|LGNP2Ezp|5NBMdP&v zXWhv*?4|52`{F;}YBJl1A`B&pxeZjN#B*-M-k=sQ9ycXovGw)$r-9Rw1Lu_DxPENL z5(=+-br`FU%6Lj=8 zS+nwx--BJax5`#rUbmCC-nojao5Hi+rUOs1K=pn`P3!SIuSb9B=D0~6L?$PvDl%xD zeC-G{Ovi)if=Rs$A-EZc{?zYm#Pa4ROB>Gg;9Oae;a=*@Y(mM2vwfz^u!_)IB-x6F zFwA)Z+g%er>NY5iW>MzldG6`uDWE4>4A1>6{pf&_(`2SO=k)v(DE89X(g+bKDw2qv z8RlAn%OH~y-Q>7aGI({c%)ZktLW>hkacPWM%_j`21O220|#Xss#BcD-8baNR9?TcQs1j)5}xB=6_a(&AJuPP-GU z^*_a_hQvZbqIlZ%!$ws3MVs&#*>;{K?YVBVbu>42Lkrz-;IjbZGc zrQ5Jk=@bKM}@3eY*l4hW#mhAAeO%SThQtr&5Xa^z@w8h8Z9b z)Qju#a&8a}`!1w_E79%t(u+HY>_;+DckkVQ?W&otTCW^%^YGkoh^Meb%#qUu%FCP^ zSDY=bO#U^B-mIN}HhVC?VBxC^Q(%ot{s@6a+s!blu%|c4>B9`gb5ydG&&DYsYEBvE zuLiR;B%aY-{)F=Sz7@p0(8ITzevO{tIqP8b0~ZdJ0>s2-8D{yX%U>2l`HUi3Gy=o2 zJ}$047p%0B1REOoK-5?qzUei+qfr$5%ig*0^I=`#9&fiki;-2wv&~X|yB=wpCLk|VeHcu^_!4-XXu5~zU`Pkmb4c5&z99gjB9u~7D8CI;weJUW=p{Ev4xG?QF^6|$NEU40`Es-RsW4x z^&x`5n#naMJ*Uk-abSw{C5P=I3z*IU1LepfGk&yQ&j!EkeD2_*XUTn!V^?xCPUnku zYEJt1f-}UF!;;H8#xe(w*mOnGQG; zf6p`9J^O68iPoq)H@SL9n3ID^fP4HA?FK9+JAMJ4yL&6g_eYWh+}VSw#ZD7GNaB4R z&t}`UwOw3XE_2v&U+&jlgzDb1Pb?bWx06&kvcYdUk4Roc72(sP;2*YvzaLcDph*~( zJ6;}8gFP#Wcl>1OH7if!W!jJmO2enL;gk>MN0$DT* z3G$(*AgA1$x3Y6Mh~VD^2zh>cyC2}-#&YrJEsir{$Ey9b1ikBIp5 zQjLPGVfo+zq4(L5MvCifeu$T0P|NsWXF%T*_KkY zh2`{q>KE&U=eJ9@^4~1t4`agT*A>hO$}}$s(&`c~=8#^{^H-rYqcc#YQ?6a|pCDrw zR1!8`{;&2+TZOw{A>j{OO~S#Yr?~Dv&$C#bXvzzc=Mcuyz6u!mA!%YSQ#_QV!UoXm ze~56MGji+XG@i=~yn0G#w6djDNsGtsaHd7Ez= zG+1K^PlJT~Gm9k|EBtnwf3eXk6Y(5AfAs)$kbRUBDZ=9EpD$G$y6sYz21LulPFAuDHTlY{QJjRV{MPqj!H7`Jp7-ZQS=+LyAbJ; zYW-KgsHVNE7c@khY!wZNVxp+rwR@b^;B{i>e<=kAjyczFj_ zg|Z#Tgf!z(P9jTRl;q5}m&0 zCx}dzA)beUHQe&or(SWFjs8HZjg<870IXt#l#E^~y>a zW^q4kb9mL*)XNIf@qzSPm{M!%u1JUV?&M6h5WH&t`}c`FP2XUWC~)J8VQif z-u}kUcn=VxdG`ctiBCPvr^&X)28fv-n((;qecHEoPgdgS?3z$0R6!adoy)HNTsTiL z-K3pgObPgEHvF=m;&veivxA-@8!{Meh)$3_86OK^%2o84u3#0uLErh~Cca;XhejlK zDQTN8+Ij>$_yYcXF_4bB|861pw(!Bw#xYfE676^?e{~dHPr6U>GN>FuQT^Py^TCYg zkz1PghjLYSiG$pT!8NCP^k5$FB>MBq#BuwV*L_=C+Y4^H=oWSG4Z0mJzhKL`tw;vz z^MCTNg>(RkHaE9!p?ZO}+n~A{NN0PG^EY?oYiw*w@OKV!3W~eHy`wWT!0j*-?Yai9 z-WCi?ZFPh53ZM{JC z7%_I}w%?&&^mekGNK9X!3GpoSH_kbTx$VP>WD6YHO{41At6HigmsY+pF|mpf@p9X z!ehJ1f>Av1Z|m7wfvpXviJ*zUsLp)&lc{S(%Wv5f5GDVRiwoi_Df1QRNzBErqytOa zc3@*Q;C(e~@94PD9^Eqjr804C*3&L(XU4-zENhU|>9)Fy@ENgTNXI8?dz(vpXj0ZSZZhtBt$td_Ep(666h}JYnUY(%bnvXH3kX z;39B9jThi&mhO2I;PyjzRO7Vr-Mi*5Xh8u#DSEyma0e>`cxXw=SdVejMtu9G#!y$d zcF+pEtCf`A07{awC}?~V?z&j80z?rVYC(^K&ct_29O!BrjTA2$DR$^pCdoIro;ly#{!3%+eN~9Uf(8ffW70I+9tQ&y3jpS*03~*0CX&5Ojo*6m9Fg(osqHiB z!o>?T`mD?iMeMEnbNs0u||2zh-FXNNXQ{?2ct@4NgyZ+Mzt>8iLBPIq& zAvbh@#c@LRln%<;KWYD|VgL(^QzO;S>Gaa5gG1Hq!Br>1SgxTN!Bp8$u%<5odQj-d z$%)-ceP@F9iIDE=84wALs^%BF{`G~dpa4`spMXRWGeaYy{GpPDMtcR9Vx~{}>tMpw zo^j3rtcqNnDx;_ST4lhk&gqcP#o0bE7J@VzN}az}18@cl z`|67G2`M$HZ{s-M4UOLeV^p#4mMTv(($gUZ$?71pzh@njQjfK)N)Ii49}gC%{%l6g zWpmOfN+_3JfICqRgAseY^~KRu#Wg0qEJ^%U%`J+eu;1FfdYuQY(T2tD5O6MezZ4S& zk;YE}l0=S)tQh*jF^u14s#6qR*}N@+witfqH~Ac%GH;-*^C!B^(B!hc4_rp2xjSzF zQPZwM_(tkF@ZN)fx*kxc_FLUoEphQ2G~ zS`5hfa&V~uS-6pAdwin^0lIP7h!T! zjjZ$|;{X{zRFvkG+i6^NcvkN=^b)z4T9-Pfk@zu#Zr_hB9pF>x6V~n8EApUf+uc8G zHG~hksY!zz&`vZ zBTi_sZur-GIAVRNJ8ItRy)?AEZ!+vk(@tGCl!`{c1Un|;Fiknrfg~4^#geba3P_h* zw~4_uND2@I2zb{9Rv=a)8x{!T@M2;?w=fsqY8(?90CjwbugRwne;H0~px>(~Z`S z4pif*wR}1=$TmRt22jT0hSi*_;j(Y!g>YHE#a^Om%p^XsA=~UqDagZd`4v|ZE2)~z z^OHv186Ove0H$?%m8bvg8|~_JHXRQ7XxZAG2^0=~;+JTFk)EzDlc77M+z#W;hdVKE z0Huy6`P3qB00^Z+^L`m5$A0AIjQ}EJ+#4O;TR(uLjz(_%CAK8qQJz)a@!>|yrx8QO zM?B$u+Asr-bWvIc%I;xUoOVmyR?%mNy5Z?*h2N4d^*`o&980fZS_nf%o|CyWjJ}|LFxd zMk8xXHd)fVH^tu(;_*GU0b(CBE7>qTSfR(VwVcel5ksB| zx6Fa!T|7^0NVU(%Xl1Z)L(%duf&I(9W0Jg@rYgbxkyT3sqG(!@3`k^22$Kj4cER7= zvX3pW@X$rN1Gvap96qhb7DgePcsJE2!Ad!TVmZa(KUkOZX_pnnKhQWn4HJw1ABrCn z_}?PHzWhNZh;0v%qRDf#_x}0x{B`$qUj&wq*#CY`YDSRW*|G!ctHyte4#)dKc&`9o z^Pg@UD+M*id*&(3CA;ZfWerIqL2~?tis+mvR?hl6r2!Zq2VhJAdj?|iQb;~ zlVOgIP3;4BE$@1kh0R$Sn;a;3SZ!*qCBrr;RvW*S>-_^ur6MW1@uL zXqrD$6g>&Eik{}zmoq|_Ot0venM``veMyV{y1HGx3 zMEa3j_3tbvpT_g_Z-Kj{T%Su3_l6nx>Q_y;sfZQ-FEM(=C}=TK)`kqKAY+R zgd%-EC^6V($11!ltET~d2W(*zK8z7P7G@755xr{8IX=650TTtZU&)-Tgfh9F*TQtS z?>i|F8yei577An_#(=Cl05FdYKxGM?pS_#+xhot$MSgzJG^>vx2ilkqiwFiKbS3PErG8u2Dn5^LmiH0{d(vX{O#v@0oEJSn*kUjiO&KJzwgZz~>o zYJ1L%A?9x4-K^0-573J`ko$i5Vi121oOi+4L^*Py%C!a$7o+|kG$7;&4*Rd9xd)Ev zdyjexgWcfzH%;iirGV8~E(N5XHxb;7^jDtDWB}Ck%D(tGyUks|hxYE- z``Is^FM@)J=4%0ORx)zsIH(+rWo))m^9{3E6^k`cDCblK8I%TxInZ&&cumOm`7kpH zhIKF`H65qcx!SFpnZs$Nqp06`HV6=04HVphXFUYwyOPRR2zoM*`{6N_HyBG8<>~kr zJM0>r!cqmjf?;A8Hv@kECBNo(666xBvg)z(xoQK{3^wq*XJUQm57_vc;YItV7u{geHfdG8M|gQbyMF2bz_j>uO8@ zUIYx7dG>&Wj5Req4bs`-`EMNa$$UnjF?NN!qxq5ZIXnxL3uQ1uENVhL6{N!4+}yU( z!92+H>Vg&6;7}%tth|q7zit7c707U?MVqpNQc*_|aBTO%r7AfJz-|VH?I}mJE6@iE zov?Ocy=Jbj7sh7c|IFW*P}U0PbI2CYMN#D%;I>!v(hS9j2?!SVLdj0I24dMYJ?*#Og5WOiEzX$9 z$S5!{2KHYJxZsh>J9t>>IoP;9Bp@<1aJ|3MX@F-lZcT#X(Zy&K26ir8(A;IjSyM39$-m*NM5dC|z zS-${)u+C53I&n154#c-^>rVLWJ_8C-C2a~04hN@e@n_)X!q4T}K$Z&}bd`~?$Y$^~ zQ}v!rqq#V%_4S+1Q&Us<6gJvF;YesFE8_v zte2^i)h1^UA7vFo?QhS{Gzl>MJfN4RVvXj7ZNjT~g{`fXOZtY!ge@T$5|G6J3w;z` zdK^K=G+r$(oIXE)uQ6F91n{bf@#!94fk7Cs`g-kTd@}(5SSm;5`9iW*NuK&fwb*-% zmezKy*ZmM;W}zG^a0jS{MlUWcIdX4(vjRP;oU-=LmM8=ZxCI9H5VZgR0+q(i@Ounm z(V&AP2gEYW)s$XZ+7$OPUU#?k%Us?v7s-1V{0369;kJKUOi#E$LFiVLkccM5@@xhI0*A+0CobnHGWjd3hpF%8qd<+MkyMve(?je({Mq( zx99z|G<7rn`@&9(S;Y;Q%7zEL`FYxV@0sJ`(~5N_pru^P*3x+Co-bqI8!?-E=_{N~ z;PsB_x#Ll=V!9sym9P-;KCN`myw8lMac&#cZohJxj6LqNON#lWr(9yNnJHD@SukpRMo1}KhYK=^YTu9BV~ zuZx4G5pXAh8yhyBfPkFg3#2)GwMg$XIPA=Ozm2llosqBbF~_!bDbJk(YRUMmTCSzUbcla%&tO0(hy~597{2s4=`!HE+vgp*_+i zU&~^iY~X8J^cpRt#H~4rrMWGiNV!VH%Gwr4IP>N6TMz|%@nEadLVNfu=myu}u$1!I9+|1T=EANl$}EH5qd|FEaL3jYi6 zQvUxq@_*Urg?}q$+;i7**!kt>t&v{%YPr+Sm#SV5x6i89?F*7_F4p{c<7f2_Ru2(~ zm;Jn+%IwJwJa#i99hk+x<_Btj5zde)fGpT+t$3|37a7j0O3b3*C6KN(E@slzjU}an zsb(CnaiL4^U>Dm}=wT_*T0+yz+KH-A?<^*gbFyN>i_Y^4Cx*>4hZ}+<{2o7GMZYdC zE?7dK*A2iiz2bv@;pKQwOT_5j-5<01G-#pl7-AmhD^v7dP7Mi&AHz%$Yu#kof1nAQxEL`LBjHpD5t4@*1$f~O&n{VaFoO;i_^hcdd}L1W^a z>;^6PPmlV+uep4+Le{ctX0cTKzWL@e*Evd$A4V z;%f6siGmj2!2J<64}Ba+>VkPEHJ&U4WFasE*LZ1Hk6-pI9LZy5r3)XSd?)&|k+;X- zI0gqDunL!fw@zucmGYl%80;LP-FD(5evG@NEUDVgot3^HDiJ3St7W=V|E(xCcb*kI_HoxhNs%x{a^)Rd^=JoNWu;ozy@e-aS2Y%{L}t-|zdJTWYTT7aiBvs+ilP9PtJRRs6=#cMIm$UTTKXg^YQ1+i-e-PwO^4OVN+bD6a^!eaz@^iR&$pK&AY<4W zD!;uXC+#Iq+D|<^9G>xpKdl(spYgh!_$d}K=A$X=nnA)g!!U55U%Du#aF-{Ynm}My z#`((AN*JvD7j>oP2$5vc#SJN_1|#GuskLyLS*Hl)Y);)5xPd}~JtCzHByhWA4*1IW zpWyg*K7d@gS_uz$!u>y_(hXIKlLw?-`tiJ!Ils=u!b}xIWG7x>PqZCG?#`Qi#6^IUUi5uedi~&9*gw!$rc+ zz%b*N#<6hgXiQnj+8CU)dNJ6e#IrUEgf|7R8yHT#^7!Y3Sc3@lIaWxu=A@sU{&v6w2GdEmpcolqGo0g29R+Et9HvZkTOUALW?tD9&y`xA6H%k!k$hetR6M&G5! zY>v`?0QP@!LFA~L^2qRc7SASF2t4;zoi|^m{ceD8O4~gf%+eDW0G6QKF+pJe-84Ab zCR1;;cCmmabA%`gMHIp;?zKb}9b^BU%blwTm1N=3PS_p12fT@D&6McQ;qaw$4Nn@_ z;h&D4!YLW&-X*bvAZ_>EeOS@UZ*fw|=gOYXK41aJV%7+qa|rGm#>WGP^IO+!smaNn z6LdJ@Z=1cyt>c6FHoN!O2He`WcK3|cqL}28_L%c32$T!{R)hwG66_i6pI8Z`#K}t( z8(?<+xw81w{<1Ktmhw)txG3SyS@SrrEg8L1e95Qkj3RrwCW%Mi)4= z<=*h_g*QoFvkL z)PkdLPD4_=cI+aJJ`8;j)vXD-mz_A=d&5-NMMQDnG$sOVgS_aYWK;g#`1!4MH;!uj z*E}v0<1uMrkz6({+_qkApP$lO&0W1WG`8Mlj(-S#rS_A{{;uB-*c*zC$rpGHnZ0Qb zKN>~lPWgBVHERBfXnQM@Pj|QJn-H3GbwS-Gx$$6CYunvNIToECIbmq>s?Ige_O0n@ zk65;Pk*m8Lzi5pQR*U|5;x{MlkgDve+sa@!99_T{1dQ@}asT>lpm+{KGe0K@hmftE zC3O3gqR!#QZT$;!+BHEb&G&xs6=PoE{>HC>`on2frN7IfeP^pzep4rN_xLsy;j>5_ zNz~r)0G;a*nim|1c-Z!u%;l=Va>=wJBF{{ji}j0EjI@KtwT7p_!06n;l>GGS2zR7e z<9WD|nd9w)ljSq8dA1uasjo*pQA9O=@<({x|2Y)p;5K@`JUU6MDdd39eo>7W6`As3 z<~#s|igx*;+{#`#i?jG;(B|nbNdx{h4W|fKXH?V=8#K-}^!>0>R>3~wl)zmP6hm_+ zmy8HqB^8@|47{EeCBKwX0Xd%q14}*&EnM~qr@%eCzJ(K;j!ndXD)QRN{i$++^`q&? z4Wd@5oA>DF&7z#G$t7QZA=&Ah?i_8&dl{XEi9fGj4s^;mpD5GgqIj1}gqmi)5z3je zB@?F^f@eIm(T|VrP0bYTUm_Ugl}Vjf}T3Gmj4r#C63nsDj=m zIh?z!eQQ0H4(@|*OftPjX6fC8^vWBKl#pY7!Tsd6s8&r7<z4wXwwKBFS>sweCgd&Jn9v$C`GTU)HyYvx=c5r=E=7RgJerDdC0k3~gQEhTJ=*d|ZjuDU;w91D+5voDr<4AsYdvi2RVpv;86Tf|Sv zvFaixq>;2E#3qVoJBH7a1Y%T;OI0;R+YU9)R&G?`)?r=Li(oxV>TQ+5eQqK5-tf_l z-9MH}1x+12^w;}>BWG4C_IR*2e~UUo%8d{1@pV*_~CSuD`vcZV07S)(iR(6tXHt zLh8ySX!FkIlmKK5j?21JY#F2XT!m+cVx^dhE%0=0(}#=oxnRSlMvAu5rtrG@-V?;U z9`@(l?szqskv8@5EAcws@TJS!ms&M@q#zu<(Tm2$O*m*aUm?@^F_qX%zr$`|U1}=q zEopYqAOg~7A3nm?umyLM8qD?D)mE(;SdCqa$0&rBttYYOfMZ;DqBx1mUz|itlAH7+$mVw#7EE*E?0>Qq};Us_a2b#ICN)Ql+6t{Nm84?RmA8JQiSw2g`6N*5N1kg3;gJ$6q-Nf?8;URvn|oQVrqU)QK5bOaB(P#+zQPy9zT@ta z(83c_k4(ocQonAleHa4qsXnVvRogMVA1G(4d6yun^N>AOZTb3x2+t36qqU4?j^VCX z8?na;(#7pN_f-|?w*=hdz(LQ_C@@!H{)`T;T#5+|pgx~hOzG`}6>|pGG@q>rD;0dC z-8(*Za)gTgl|TiJ?nS%ST1~7zt0>e)PCicWfAVM`&fP%vtbBfM`=WbuE?0czkNCM= z%|CA>oJd`Wh+Tv2i8R^9aoS=`khX64fKc*pLpV5*g{g@Yf43~`4z3GoIEKUDim{IOAAX1J??WqVAOt=v(IRYrI#xCk3;vV{scc~JWhCrD*_!Z zgQUxX6ql;8SEc4h5MdX3ne}%r4)CjhU5Tz0B(zW=YT0>njZQ=AgWWqkP{!d!K(`KS z?=Y4Sj$EE>(>fq6&7mD`J!9=s9}G70aO0L3Yj*fGRwu1EIgCc=LImXI_EQbspgGw{HiG#>$-h zFY8?wN<@WU{Q!FC(g?wjeUH^#R!h_cWNeME;d%+OM)ZJPdU+IZQgU1&o)db~5m0o$2YG zRXR$>S&PoUP|a-KHd=d3|7IbvYixYrOkPCie09>DH%YaZ;1ptdx^eTyeC~Su4oiNampVd&gD>7GN)34@RiWr+)gWUIe|3 z0(~`SNE$#p>x-8~o7#VP@#!|>pAMv`7s4nT3NYPoc`Fa~5xVY#7rAW33y(r?AFY6u z3=O|!e03i1s&6u=HO^kn%isZk|GpgRKzfV+&sey0S*F5s-`T1s$XxHo)kjuuojyTy zlSh|F8##*P@$;3Yy@n$Q7gttf1`#&(s=C=-%~sVXx!z9C_6Ei4-L<(uB9P^OZ(F*$ z+GBzWjUrxd({}%=#Fmhtghj&Je1OqYQwqz}rmp)P5-5 zsONdf1;Z6^XQFDz{7grde2-#Nwk3g7wB83RnPkEx4XE?p=OU?QO_!8U?*iT3^=IpM zoYoCcqczQ!CsX~cw_!qUVEC&exwP?>aiC+!SD>KOf2jc!B;pehF89sUPTK2*MWa(? z1{^@8cWOT(I?4OVw0&XhU>Z`FShtOZrOz=d?x{v9CJMtz+lIQ(%dU)Q6_r6LKq<4o z%iL3I^olJQX7Q;mIqtKt$iWz7zM?G_`NE?rKcMQOt}BFW$&!*M_45ciXKo ze?XW7f!gCN&Uog+qQQ!{E=24y0zaf`WsR=x9&N@Wef{p-fIPRkObcYG{7T_q4OpSu^pJK7hh>HMXBCEam8V1j! zQ>Ea>Q=`~{xiuP}{mxI3!Z1gEi3_JyS^4|#`sQayD1|t}sP8gJgKm8Eb6?OGGF_ut z-@rBo#mXn6leAc?HB$ys2z2_KsD7hILeCe?>*-BeF3)53sOq;Jt~OzSg^EgC59?zd8Y_V+2nxhu^Hkws4mm2@@>0b0@2eg{8%+-(>P;NHpM|F$=LDCTCU zW=4r{Aq;2l_5*$?eu zjtYC=UM$B}hn<1JCq0)bF#r4h?y=bQ$5A&|cXVBFV9gI#bcm|X?oO_#et*d^8qEwA zMsx4jRqx7{7je}mJLJ;_@S>D*igaumqE-lyc&nF-)x^A9yF~z*6y=8sFXL}=6` zn1j*uE#*uxm18Ew}Y zDP2q#=pzf<`9hbnJhYB2STD@QmXthdBWVC%6gaZ09n84Ph4y);YNCP_|Ood^R>c9;%^FOYR00N-)N0uHg_ftL(eF` z7rHkI%YCPrlrzHX%y1W`3RdG5s=M0QbJ~aVwI`~l58r9z$OS#pM5a<^5xOBS}5lumAiNAcM>fcDvt~*a$Bk{h#f&=P`d|?mrG*M@@KS z@}EP!f6V&#)!S$PYzK?b`X&5(KrA-&-hU5g5cU5K{p9`s*Mjs$>Gg%Cx+u&WQT)5+ z=UkiR)nf9bZ&5upwNE(yef5b%6o)bXe;3*$IQ99z%Zn_t_H{$@q4@vYvyE@l#*kDF zy)61)|CcvIk>o#-(iWWo&6}c9WdHCA1?8P$rm0g*LpYvjD#hx5Z}~$RvD1Pt7|>Ao zdbC?63&zH&_-C;P$|8gGQ*BR}SZ;i%OkzTcnS)lck?rjXwQRWgQX1m~u3V!2jU=o* zJ%!km7+FNr&c?>sX5yNbxIVf znlNB<>70W~%3eY&wY8Jy*P$!M@d~M%pP^8Ty5pTE&Xd!bblAis*P{Q4aV%m2b!oR7E|lII<4@Uf+pW1-3?|=5<6I)gySF&S!pgs1H_YUHekpj7J8wVT z7nVs!#mXXh^=e$(TkK@ThwSeSu|_<+Ts7A2`ow&&0;dZbljz`@9U>+l85Nt@a{tDq zd9FB|k0IF=Apnl|DpSz5((l?Pk}J1Au?xH(6`e{cxUET7!y;PF_RExl6^;LlP|HX1 zdDC#F>ER6-QTfhK8vM0&F}T5^f6ql{Pgt3HQ3gDo`>b-{dZBKyL{--<@b2sit>&ma zECjND`+$dB$iwXcWX4VWWaaUAGV8a@_Ui9OtP*fOMipUuYFAx*DRAjm8;d9cZZ|U< zT{nm}>-B?+Uzoq>f@YfRaL7_?X-<5seE7t|Y*))CpS8r2YAw1)|NQ=Oa7nXvW#mv% znnI1Sv*UtYLaFjx1%s_#5#q2Vt$;jhC!j+gG z@x-w1>hGMq35SLfhHNActeYet`r!OvZ<8D8kL& zzV+ELv*Oyle3}w8PuP5=P~ZBLQ(_t6hU2T$aVC6A^k%#e6DGXgJDkAh{<7(6d0Aij z6uxcSI80rB&2_0e3Aq#N9CB6C`qaHd6gM-%zHnZBk2|84xc7GAcwMq~@{ysni(q};< z%o3D1<)NX0wytgl?zN)w&$`RN4Rwi>ANXXG>Is#E$OUc5QbLB;qmAPzZ34edSE7Y2$*ziueDcR{9{HynN;nd?7UFVM4 zxs4Ma1r+*8NmD}BTKi;2gwvwU4qq%J^;%dTK4(CVL#IS5j%rfNJDHW6U2cD@LMu-W zzoPOcO^o|)Kn<(Wu0AAlp;2+)4me&Y@#yzwL#+-$k=W~ zs#EXxh7A*rjRUvr=Z2-HDoF!#gIxz1DB!p_8hV6OL_w{a;i+DqrKHRBU3v0~^Rbh* zGKX#GgjJjGQ+W(`xg$KYphryBnnJtymWa|cC-)ob8B)=jRm%jcqO>`dMC-E&JVwI3 zh8w~hxzu3zdal_O4q;Q}kA6A+bWZl^Do+-9!87D^PQPT|Io=f`(~Q@APzwvU{Q!A2 z*xvSm5p{f@NpandfeAS`N>ZP=X>Q6czf0N4DYv;A$n!?I?jphFm!IS)?!yOb#9>o8*r87FWAcPh>YmPiM%MH1XS;4$kPF zKYsH#=lEO+&gwDpSWf8BZE30Zhw_eTm$Wo}NgkHBN#*&un@xkw1NIzQ5k)6_>-jEI z-D_?S)*P9{KkY=R5+Xj7sK5NC>O6$bH#6ArrMU3l z-B@szFnRJRk?DPoih0HwI_QFNESSv3pP9GpG7ee!FnbduMD+u-|a^ zber1>gNgmso0tOT`mgqe;`)-M14BdI-JIKQ%e!aqo5yi&>QWa)G0)f0s46xR3noh4 zG3ABNUb@%v&N$7Ef*8jN8tzgp7#o_JB9y9U30fw8$g>^Jo9x^{9%y8|w6kS!JZ8=4 zy^F1(F+H&DEZ{Z|AKb*>yEzrj2omiVT76{$bAO5}d`YYs`un)o&{yxKqpz~^xBc2? zuD+~XW^tpR>fIrsuI&u@Wnp127NORyAZ;X77;nFftSr;M_c?u!s>QsmhX#YZFaj<0 zdK*uU-)bt*bFn(iy|@@-!IlroH)y?mRGeB8GCu20sR7DJ_346Y{z&uy$LXGuxa<@)mV=aXnVDNmx?|nyz;LUiY42 zMdS~EnK!}>ZnVP^#xX{$!vhxU%g*frH@AEOI>IbBJ1@U8(K6rm3BMfU_nxw&tUt9X z_B~1Sg5@TvKf|cmoLMIR85h`M1$zo7zM;F<*ibj9{lmprjwCL7O0J1n)Uvy z9|MfcFRl9-7>$|R$E@pgsusNzLkE&IveVvdnFpp}F5&Ose zo>Yf%rd5p=6(*^FAvR6lIJB3YeSXt8Xt}NbCAOllCHSI-i8p zp5|=VT&d!IC>q>d6B~c)y@h{!c`d!e#B971A1!$K2fM3#B{l6jszjw^@gnXnvU6E~ z4V}GaH3}r;>5Un<~{KL_L+l{J@_bB@_EWl=bpzH{B2Ec8l(&6(+N& zlwK?F2`d$w##_?8+HIV@nr)(UFCkEv{=)YfQs7Nm&AM^d*q?to!ubL~Q^`en*?MOv zJ?MfjwixGn7Y}L{L2vir&CGUxfxkj-X{KWR+izCFvNh?-u=TXg)i|#>V_R5{YQgyT#Ke{e z%#yW6&;2FSrWz{9cu$P4cFR6h1LU|rwG-5KsZXC?f`#Wz^Fg2hAbvPiW)JGeg~h1G zUftRF#tC0>)1{P;Lub*<>G4$_w3vpTJ{oPWJ}5F$j?#OF1q6gcwbQ2(Oox($`e>gdrZwBeika zYlf1F`{qJ0ahgKQZiu*8$WZDeQ}B8Ts+7R*OnfGE$4kT6XQc7$e08+q9)KKn_p6St zh9;lY?6y2}+k!cJm73u4=1a~vZ+69p&qfF|_|Ya-_X(#8UmMaiXzf-Wu zoW*nYRq->YbE&>9CrW}!YTdGykXC(M&}}1fb!SfkyZF&S=5W4kRfUPEkz?8130=hI zFUOCPq3i2#-^kAO^&leniu}BAOqkCNu9T%GVOB43N-Maczw2aY_N%S7$ad4;=nh)6 zk84l-jDL($o=?EG%VXRv+vQSyYy}OEhuzHvH%F=_+?^(+kZgo(`KsZ6?4N~%W?fI4e-g{Lh#m==G5 zcK5O)N8y2Hw)=ndIHFR1is_3`UP<*(V~n*>>>LL)!2`Osj|a!*L{v;rLo-imSzu-Ap8KH# zMB2%`%pOxut375t0Cb}$k8&1j!6GU6UD+Kz>{Gl5!ex4=h<^|2%A-}EmB-6>c3o@t zo9C4@OHveI?z<7LHCJ&>#;rL;Bct4O|>2T~zDAe*EG!NWh;iRmL zpc{r8x~*0j|AEh`4ya7ON3ybY|4toJm<{K_A zlXm8mWWcC$=eC_TGIr{%bwWGlg>K40n&5lOTd3aTS3P(01su#}Z>p7DTIUrAi)SX} zXz!e5nWS|+1A3SfC5ri2MZ$H3rV*D*^|XyzY!I{2f? z_m7fByA6HaV^iwSK7reyx$gs7MKLXbI{_pwpIrmcjdvvNH^5VuzAHq?RDzx$yQE1> zLV_+O#YLq^8#0>MOLupf3@%215?8la?c1c$OBOn^U~4je{FD~Vl7_(9y+6x`2a|C< zptZnXSzmUjx38T+a&mH6!n*#_=Fs1fDZJ@bcKrr?nSlBI+{y-jZBGOngB?@o>CCol zDgD`q

Y+_;$iu8!WMDmjQ4=x6myGCXzo{=*ttIDq(P{J39{;^GPTKVhWmHE$?<3 z!0nXtKG~uAn_WQ{WyE?|(SBzlEy;96HsyYLT;x^W`1Q@YTub^suiJj_q5Db}&Ea~r zN=1H6;L#=5?a>||!{#DN~%#0qWhXM#pWS3m4(|!B{AT3|WG#L4!)BcNhKg zg!1HH-TAx38|>Y}Y3=rB`-RO`BNExDWM^XstFdeiLc(cy&T|ijf~9V&@X3_?5AKi(8p=H-9yA*%p+szg!V< zrB?OpyAmA%(!pjR-i!{FX&*6(MyCN6o2SEz{gSB&=zHz3lzSYc^m69)EJ%D^VrzIP zL1yM!!{a>U=NspL8579F8d;xu^CP026aVL!{r-2~UrPA>NxTdOwdtDuX(CGX0iJ1h z;Y(1H(1OI;vkSOg9ZZW%^vm7mI88&90os*?#<|(7PUDOo#$}7oCQNrUGe%C{y7#Ke|xXn0N}n@ofTfIV2M?#^hR4HxSE9J@^}nB28_$adRpJPz2QeW znGdarWsD_T7*t7F3qC_@_FNp&##;o~#Lo)7#LFI&r=-Zjyk zaJjtkA;&=rK}Xk@ZvIVC|8g#F=gq_CEZjkvyZj`qUc?3C#gLlxiyI$A><>1ZLd0?r zl;P0cUh5DRM$A?D<@~&6z(oSLAFL1k+_?6yC*-pg)eR)vIcG@$b8U$%ix@|aA&@Z4 zQMX3~aX*&qcu4q7KAR~d%L`xmZw}|!!R7b#KB~|*)!gaN*f70CpHfw!WHk$z-Ak{{ z{@E}?j?@uODk&{(386*TtlrfFG$g2G7@W=6T$cP#z)*6SF6x;+#vtHbuWe}(`{aDi za57L&Df%e%=4rN0GyqXz z1n9Sh!+y_j5>C8|Ntr=J%9mKv`<`uc+xAmbT2P-wL_Wzcx!mQdxYV%JUeG|g-P)EQ zNP>fscsODb*W{o{bxEg4R`mIc4bLPLqs$}nem*GLr2Z3m^jGd62{HE8`v+moS^M&_ zV=HebtDzIl?>3$jJ`~4vTE4^%Y7NU8+JA44$>q5 z5xUs-Em0mi=3=*6v3*S>t`pD^U(0fU6XYuJv;|J4<7OGQBtDtWOSq9V)HD}F6z?q; zW%P-77o`m) z5HuV@qp)G(%5!+(1qkN*T%BD^FX$mq48WJ>EBmDU^Q7`KW2_sNhhX|we~^+?O8V1_ z>Cma?G}sZcuhbaT7!SceBjcQyglKVDZSTCKp!t0|)@G^xs1I1EqR*d?4GnHrwUquw zxPXiWd4zRSOh-pEJUAEv_7h^pNs%L}bA9aK;tV2JG8mEz6FlOkeH{xIhB|fTJZ#Z( zmJd}i7)rVf6yK}e7h&c(lj%?84zet6_z@ecGIzD1By@RFp(D)-2CY4+ zJ1TW`5=I|;deBK7xHTj@9EE6kjv9YKtdd1^P@?_p+}^bx#yat69iHY`eLk;eYc4v! z-Hs-On_10XSFuw`A9LPCA-vG^Mx_k!NM`#R@01tMaOa3LXvZ3yPJc%*eC<#EvJt~P zAu?pel`+2kHc2L_j~F z2=K5}-F2u9#!N1VJ$JL>dQ;MPJ|1lB6Ro{`iN8OKm&ifc04XZGc?|JZc>d=qew;D`=Rrx##;q|e(TBZd}AxG01FI( zLRm*$0M7UvCIyM^3+k|(Vq@QsPO`DieW-`6AC9dJ41EmVzPNf)IB9{)_-tfR;9z|V z|69|H5Ay{{mq4i#?{v?$y{C7wXUl6Jk4Z)(EDs8kU#W=F#`j1zCAe|*rot$yEPdTt zsj0)4m$K+v7?v*y_TCk^-`wh0;s^AKdpDuQ{H>%ZU7EZns9 znHJw9F!oCC)F!p&Mhm3TC#~7uTDoupLwoF>*i(ID`7sz5$GH7VfHONEPAV|lw97>9 z@fkg?*_ZYmGTYoyS6H%h59U6zy2%*d3}z?cxjK*TO`=qPm_5F^;e_ykJzfvzBm7)- z<$)(4b$6gAF|;1|1vQ_qZ5Q7ZqC2(}9AVK(d*YGm&R&mIaFI z{C=ky$J;`Mf(*1>AsArL9m)yg+dJFMuher1EH;qGo59>7NU8hlHO8fohTj8L@7uDr zsN|Df&r}h>ld?2iyXv@I?1N!tC7gF&A0WCt54l&FmZdHwGiX}@HFVs&M5JEtBWmX1 z_Dn1d9t2-+wTfg!;YgB+N2U;mpcX5XKC4Y>)+kLMZe$PZ$XOfEBTVOXmwN13LvbR^ zg8S-{S3d-O$}_hD(?P0bqZX0))xNP>+hoAcVvf@fmt66a1vZgl} z`fA@RbZT^4Z=gIe6!l}G!bw<22uI?%-gf1*xs}DzqJ*b!hnBafQXYEeyAWft#(cH@ zNj36fr{@UA5|*TD{Ck#%&12;;Z8#Mfl<8qn?AZPpyUz|WZ8({zxw=>h=Nc@ecy+r3 zCn%}#N9vWH^Z@eUoIg{pbUl3}H;G+cU4Xjgl3!8^R?lx%cQ?W&k4@ogPeWH(o6-)f zN+DgHw5CpM@8qs8lOt!4D?KwS=cq({NV`?r(^y;)(F&^(jx!ypnYdb|plB=B;~3LB zF=fLu)+l0v=Oq&=BGRTrrv1bs%f95v971Vmy1SI8$MtlO?3`L^0|i`|oP@*kgJ3b= zp^u^a?l8&U@sst!u1Y$?rMsk`<3<)Rv0tmU)akq2#Ey{2+~;FUG;;}X;%WL z*W013;2;sqW;Ql2s0AY;O=*Cq!j2I1wQPYr2Q!?twqTXBhTeCB3f5Qb z51Zf;KvnJCBoCjodMP9nxs^B-+^B~32A}jX?XRbh@#$aBCwCD810x@NY;a5}&`ZX{ z`VwV4JtaO^8=X&Jhye1-C@VK(c=My2T+8xdAO=GKlNaa=J(;kC6lC=a(|ijD2nbii z=VADi7KnoY!c%c%$?V^SeLID-k-lfCwhr!>cRVqoa2n;d^`gNN>G1 z6yAA$MgEftqY0ete(W7 zuhn)Ha6xIH{`akD*)-W<((Vu_t^iK z@{^UyC#&DV4KihurPC=-(^lfvVLXgHO%{xA{fX1&vv+DNZ;$R0 z6cDo9$>yc@LbKX=JlNT}c0#ipVs9wH?sAex&DVAl>s@7(OZz?Tsd@pww-b)Fi)zVD zhm=KS(k{9vwY0ctB>%y_NZp6}ySfWCXQ%d$^< z^4@KU2wh~4VatHb?dfTA5?&CdP%?i5Asq{K!gA+|IC+UiS{*D|$ePDghAa}kzCK)1 zpQK5rE>r0ujyk%Y{1&f5(vkr`>^6(F@$JKyjQYvJsF4q!VwNVAMvqO1^c?M(K&by1 zty0jKzB#(Q9{Ipouv-F#njLLQhoSE;hnS13MHJH;tM*NKD7)(n^hUV37Edq#_VtJI z?2-2~%a|zT?W-MRLoGJWK-&=c_1z0rGe61Fd8bl>4~&~_?@NXw?+$Dphi2;St}oyQ zF|fYyi>3~YP8{-7O{{shXkeH10kj&VQOtSO58g~o@dK!SMXLrvFtZ3&zwmd}0mY&& zT=3{=(k+rOGQ9D|5=_ z##Hq4M1-Gk1QM<}j^o;5pN5cfI`EiOB(SI!8nhi`Xt{5Sf%)40+Ft3N2Z!N=@Tu|f z?^;b%eyiw@Z{1Onrxj+2yWbq?isnYGKOmO<$h_)=hKsnT8Dw2gh>yUidN^w>E^6 zH^f!=`q4n@#iO@(4Hc4Q>IoeB0{2wAO0jy-Xrc@vs!(W}+?Hud&Qg;MOerWawBh&K z#4kY0iDmgzvFI%+w~G$_I63_cVQtfVU&w0*;SCNJjW-) zZhPP2?0J%}k8dD(1-2^)O`G8JW_wS88JFXifZP8I?^(USs`2&Z0%gkw=Q};CPE)(r zE0I)hT~1!J4GqWJ&wQqA*r&A7ak74$;^)LuoxwifYu#~@zp}n|ufFvzN}(ADpIrj_ zX%aBFj;3j$_gxcRh1s;6Ns1FPI(lp?VSI|y(xJf7v~DyRacMTUE%Urc!E8GeF7Lk_?h{l6>H6V6Zpb4*VCR125p)h zjQ++DQrGQ;FsF6_Ms{`PnK-NM<>UL#2(ZTjE-D-cOSwszs{HAFG#a{f+wepn;I;JH zy9;<6CwMj3u$XrdVpLdVti|k?%(ZSba4_>*Bd6IiN0=ekfMHpt_ITRF9P?j^oy=F2d|ii z_e)a?w|4(@q&@1tQMEgyzj-4QwuZQLTa1a&x=cCLa_qpzU@r>qm0g{CBfq*kuhqZN z&=>^7tGcthBO5|6f|gdbzXQ&pk&)4-M7h|?R3j53ACf0QR532~n#hP#gZ4)pi;8qh zNUy9dCM`)cv@eu?0GWZaop7Trld~y;hGL+2@$k^TEujxK7vzNEAM*p>dg82xhaG6p z85%Uw4P&^L>CRKTPA*ej-M!B}KN3oYpx-NLKjQyH70Q5^0Sd`uXKDw&`j0?-W9|akflEh#VEYWDWS$(5?|PayK%F&=y`)6sN1n41QqZj(LpT!-6QQ$=<4c0l!Y z?^e$YY)kT}rK%s{acjF`b8FQjec9!AJsfdlIXJNOdAebRvG03Aubx0M<8k~FUrb+m zkPDnl9mwOI_d3eBa8nr7yrXW@aXEK0+zXJR#OxNYn(FW3;`?Y__L&xIiF9z3^@)Jt zVE^v=)%?{S%JpLN)j^xZTK0DeDx_xrFW5-;bG=Fo5Zc~F`0MZmrazAsU1}v8Q?&5)P&0$@9Q>(2*_=AR< zVy>-Kb<H4gNA@vO8#s(ZEZ+f?2`-?s=urM6#}SQ>)!LYj&QrXImgHcgI(V%!fdYd7$} z{hWStzUg?k)K=y`J zA2K-)ym&L%p3vIWva^e3l+NQVSR9gq%6K<5_*#7g{F$+PP3uB4@9JmU2^?wd*J;@8 z-My?>3f2RKVXgzF!|io@z#vo^G)fxmH#}*c3xiQ-O8#nH%xZ8DCNbB@AT#4MsB%7i z^oGK}Z~2qbr}sAvGdA++wHYexWYT=;D0Uzn@CjFdVS|i80qf}MW~Ze1#T)j3=+>Ym zgqxX_MGg!WP{YG?ptQBc+ZJ2L3Y;+=CRGMiw9!9!9>H{ipcZhng8U+g+ecStYYJY` za$=1r2w=FYic+TPP(Le!N}Kr_gR@FQxBT~S7f?s-`RYARC~U1P09_noQ4#$!IuaZs z^-al)@1G#H&ZCP67zexHP@<-$`7J6g_kIDcukO8N^C{1VuTRQ6j^vvRK{qEaRPo9q z_Q?$bWOj2}svBSCP2-dI>&UF|4@cqd&W%A_C$&fiCaYd)^ajY2d3ei#HyR{-r zS#iUSGX6n-&Va?p;?xmfjm1d<462*A4tn>!BUA(!CqZY3o5V>Hkg=Xl3xzHnULIUD zxWRnxO_58!%IfYkXMzV;8(sIdTAueal(?t*eXImxz>TC~tuyjYYUqdJziv=-A6K(1 zdc!*kCRvhzN#~qpLE-|G4HA?gJI@RgDb@^h(82&%jX#4mLd_gI!Uz`&E>zu|3 z36(Q_r+9*9RqXcs-do+qx?vR;L&u-kb#S)NtNH%1Y=9gbVzuc-Y6>LY&rP9s9|f|c z9^3y=R2;|{CNs1tpNJFPe@X|wfaW?n_@+FsNPMUuRh$MR+pMG~8%}k$8XtYEqIxgZ zGLM-rVH=wtSEHe$-#4*>D1Z3p+f{8-#3cS-ms9@J2L)YGI`Q>g{9 z4cjL8G%PAOeO1;i75fnZ3JR?GYv#7EZh7N>Y^I&*{NF#B^Mni2z9+XNJw@H?>J~2< z*MGYqqNtEfZ&-qlB-Xs{ENwT23!M*wZ;KCZQn#|DP&UaQm2-nv=7|zagVI7XH*htX z)Op+^fn}WhSGf4YLleV1^jL>@U%jvAy17sW1|T`v*9o`@dTf9UwS*x;rD>f1*bT#AZ{H$GS%0V-((v8F*Umv~M5a>C|~ z+S=9rE>HoVJJu(Bl+Oeu;}9KOKCuT`$#TKBpOgto;JDDxmsKX-pPVrGPR?(db4;LG z4wsqAteG1pe(8*C2jC4T6~0)|)^UcEj`&If;ScP0rF?%xNd8$8T4gci=8{WA7(=LB zx7N1}76OGEsLH1je}wQL|E`I8$?H6ihj^0YG7E__meQzQJ#!SV;W*z2&$mtjTc^?r zx&MiU*Av&>%cD{k1ZlwRo!R6Mf~|G6XV)I&Am9_|0N?B5a3KE>#M_dnKfVyFK97t1z2(WaUqMkNIVKngw-h&}r1F zPIML%+lW|ez5UX5&cnW*=12%!dYQlj+Z&E0biFdqQ(yN{T2>zzhO)AAGNBAiMMYM# zzXQg8BL*%jOep2WJ^1#04(!w5TM0tWZ06?qR`gT-Kz1vorCW5Uo&0S`WK8fgWA!`U zGh$&EEI=Fq&0)udzx_%I$Sk-_jzj3|VAn%nL;RXUAKD^Dl-vU*V5{lc0=PG+uniXI z*bqBR`rTRRpT|dzPIH*<&3;qU{Av|G4~ewxm@iACWADXfuwRaBLhrr31gHRsXDRCJ zgWIQGWnMH$>%B?Rvf6@BD4W5A0+-d)d*GyvKl%^KNF@AeU3BIX4D~rkrR8!Dc!f$!U3e@LCTnZ2V0A5JJ%i+CItc4B z>V`ls?}wk<6uvMZejuBw5+U_76VYTFqxBxGth@rkB}Zwa%aD+bQxA=)sme3& zofuAD^ps3PAgtV(hKVX7u{>I`uYsbY$(UtvTU^+ zjYA-iRQ#p0t2|qa%*t~A&?!<2vLw5j*@qfZh7}efy^TW-2-R^Uy|)_)J~Q}RTifbQ z_Ks$gr(|5Lch?obMPXtqNsmOvZHwKvAAvkksKUq3uYPt)ySv!_PTN}$wC|uxU)k5isC|B=QXiG5&UXR`2$ zkI|1L{pa@$dw1_0#y7b&<#-j%@1z{q+(iT5+MlQm75=s*&w7v!<*BQiP||omm^#Z* zRSiVrhkgNwi-+{>Che;ZinY207Z3iDuzlrmB=bL)U%g<3i3@Vmf>dW|(GtLID ze#GB<1Jm7f&D&fi3N;jnuu6dd08~m~%z9V<9H=RZN}5C(X#Uf9wUmESm%KBKaZLY- zl8>8>^2C2z4%M)434;xjF!C5eGt)CO)6JUY4+J)!I*WZX5L}~rDfR$gz~`U_<}||n zNky}#Tb8U#M%K8u^l8?l)hi9WkCkd~Nn|&iruamlP=G}~qmb#{oZ&@1TXzzI(W`uG z3*;0^*c|a?p(qC8ve~3Uaem-Qw6S@<#&f5w!kCsE3nxBp2(3379+n>9`KWWI3%i`0 zrVc&4jZ7!Oy|ju{Lw(NL?BA0;sx@gf8zG?OB3Z+Viq*>jeRnY!ImK7^yo2)gop<$H7hG?05NIR1wcLEHBx|%yi{n!l6Ushl@Nlyh9V_p za9TeCYpYNN*j^+Wf>N9HOvL%Dttm35s^=2%1>7kU7Y%YW(51>^x8xF1JdS0zWNsbaJ`khjX^RSV&X}OZtgA3K-oCGRESW~y&9Qz*}zA!ba2Q^$fOa%iRr?B`c<7#V_*ksnmLIx z0mz036!EYTdJGjyyeiKv(Vjnxeg9rysSx%T;e;2PcOmjA5JD1IxK&MqfWB< zMJ0*Ta_tc7O)o@^JF(AVw~FNXJ88YrNT3x0^H)5ZIWnkHjEDBXa%sA?g1$4SiAQQZ zxMvpypcottH6T_08%j7a7yiavP$MG0diSH;P$E5Q08hmv);nOD9Q*S(5+{g|V{HXX zq+~ccA-aF0>)8Vu{6FTKP7n+deCdB7dC(gze%J3MzO;A9ASv{dTXPx=`i6mXOD!bN^FGtmVUU`A$ik zLMm@4pI>h{lU+ya~lg5!t@;;fNw-XU)U^ z{8B2Vb=Mo z>3Qkr=qhpMcVZ}3Ppp9SYVMVBGM%yp>%f%NVAls(%rS_ zu6;ee-#7o>Gka#wzyCRg<$0d>3c9DNKz924X%q@Yrg-PpeH02G4~4?x zKScuF<-n;l?i5bPS@tQ%`kh~BC_*VvqtW;>MmwC_{-e&OW)R%LOP zc6o4Po0Dk#KY2XQ`Tiqod=_lYVE{#oj5;gjzY&x}4#i)Vnlu-Q{fQs!i)Zn;$qxC2TAV z1dNVeKru5)2g;M>a)^q)DLq;zpPM@;eeeUn$j*(-kZ(6OH;PX{BS|$qd|U1ydZJnF z$Ct-m$Yj}-YSTU*5|Ll=`L6tl`{8Jf*K(RhCM_~_44t=nMgp?=2cpi}TWas4qT2Ua z(0UoXA|fBWh=!+__a3BplCmYbllrkKpjmCVnZIgRv5c2Dj)-gsOB~o>Dfs*xK5Pd~zIf^u)~UXZZsKURn}EeuL*jwlmXcAB&-{ z?Af{{Pue4Gvh+(6A9-y_*d+xinky>_h7jjT>^qB8U=X%nPe zKPt_rI?wk$%gDIw#(-GJ?!sk)14Tx1&Ny*9zK66lG)>j`%Z_rjdzL-+40STEXTC}m z51AHQ{U#Xw_2mKXiv5!HOvqRIrkKWC1qIe;i!n?rzUTd73a15~{xG_ghnbDqOAKN{ z7KDX_i2crsnhb6hqvLYC`C`Q%kI@;f{eGXTlkX_HIj?^^PBXh~{;Slh{vcSu7Q>sY zqiQC_y1S#*r7|HT`MUUnp(@HfFGk*W&^>YgK*MOB zYqd?=F(b>%HZmibj#GD)>E+&%G1QtLKYMYoGoiLPRGDNL$~19weVf*j2XPr+S$%5z zn6JzeQr+mu6#-m95(SIHZ;f0WKM!9zmiU@;1UE{8k$m33g~lbf;&dDzgRk82{h_eS zzIQPBkDG@~1AJjNTwlI4Ha9!%+sJrq&8b&yPA`D><{g$=o%`#?xv9c|TmQa&Pl-h-6OoqI= z$~`&yPkTS&wQ_MidGh4P$~@soPb30_)wbutE%)+N3Q$X8&y+gTe!Yv&Lq{DxG5fso~`r# z($Zx{TFBzB(FrMI@P?3IFFM}F#{6f(<=>nBt1^N`iT z!eX&EzoBr4VxZDZK%jc#y?Oq@^+%<)?83s>LT#{-HoRAUjwXkDo2le@QT>s8kLV@r zFSrdlC?v0u5Hp-y8mT>g{}NR$Ld&Q78A&GhRd+pUTT(@R_MD%;c%gXr?nQR?SFc}_ z;;Od|&Wk*~=IJSwgx=#yS4;XXqViQUyY1uk7duD$%Y9&g4h|0SQZB()m#f07y|xRC z>Q7jUG0=v*dSq7}p_(A&QKQcqK*7QxCKlPzp?q*~P&O6$=;=TSA4(yV*>rDX?uohi zgJMgKZw(DH21{%3(C~Nf>b|`qk@Q%*r1ABk@j!_UMCq{T=oTe`>c-@o0nu{4HD3J{ zu1jri#D`DS&HhZ88?L?z!+=Cxptt(Wr`IuZc4?`pF=-aDFcjet zSRAZ~iqqJ)SJRwH-X?IFRD!A#SljgWh_4;|-HLtB%KdJkH1G(x-MOTi^T1Qt!0mP zCU6$5EiHlyuj!3(eTB_%i?r8P*6yzdYBBI|r`oOBnBn-dbi;;9n+r?Eb$Ev1dJ6cGQXh?EW`>96uAl=R-QU*B1s zfIG~rt+RG_CPL#@S67kY!;W{H6E=&6-{p=E3U?c+)uOq$xR8&=n?gEQCz|8ncQBf1 zFuqRH_DE!f#o{`>=f9+P9PV!;pC0dGd^>j6XOQ3L=H{j!sL7bxj?@e}OC?N~IZSle z)$D?EVWnLcqa__D?`*pjxUZTxtxdL?xw@8E#HLAlZCS6Ugvwq~DYV9-XMeCdO}2!Y z-MH}_J}dXxcU>=^NfdT+a#D(S4QMb%_CeZbuZRn5VJg%g|L`Ovv>Q*KUPg&p{<^@$ zMeNtoa_23h6Yzsezf45VctJuU zS~FW0?_R#i?O1WUt`eJpJBo^9khY8LMwtDOls}S61$n2?tP|C<|I**T`?Df--DXUz zsMWNr3E7Vln@7B~J)gAT^NZ<~pXWNY^yK!pm(%qtUFrRwB_**iU3GP?O)FZb|L8c? z*4WsHx(9&)Jo3x^)Zl#&N5?BDm-%1DFgRQxr%IgI)W#e(M-?3|XNP~{M8?A}XJ8U1 zjdoVXHgH1>e&8mSzrWtTapMH+3lgEa60YLsupMsB|8{aAv>qsVvyf9sp85OqwQbx` zUyVgoFLthaV z#_aO$wp|Hbcgw5)?OQ)X8`5-$hWhJv2(80p3ss$HLShn^px}?gvQanm%II|%)^%4` zF@IzGy$y@`p4{alRVbSWb3=lIFLH7c*>@&^B^EyYdC{%6K^psP(i9w>);bX?XOQtGePzX-TPvpn>{~i>@ak+#Obm``2OfKHct|3~6KPD3 zYaSaL`<$9elL7hWwMnkfWmQG2m+bZH*I)5#ca8{kX~lZz(T30oOoL}i?@oqmXKRwP z$acip)y(xRGQtC^wuik)8N@n#hQ58^df+$Wc4PzV>2Ux4`~7_={YFa$YKW|E>-b`J!>=u3Aq!T@(S48( z6?iBwPx$laPnc&xVWCd7rzrFcRaMfMv{${>VvOWO#a2CpdSf_Pj@~6#@b19iV3UPE z*{FDFkAfeR34gL5fq$LfcB_FQnmm3yw3+%lO@#r>ahmyV1Z2?w7PR(w0YT2FdA{~w z`)4SQKL|)s+n+;{DBNk%`kq~zm-g$!FW+Rg2l2~X|4d_&Fh5fihTJ?o=2D|hojQdq zX$pjY@4dP7*Nl?gDOyo=b=QtoLwzY37~10{odi|F#ccX1si|KW(@U?^;dev}z0k8ecqB{oX7w)`j= z&y6~>LLuXC1o5hz#>U2^^n!I0OkKG!0*E#NZo?h{uo>PyKIKrx(XGv&(Fhg$>Q zt4(x%3l;ulWo7ph)ZsHKNtOg+%5vqV=4N3i5Z=Fkzp}cT42v}AxsaXM3D3UOru=Vc z;Hktrq&@uq9z6iN`maL}|GzwBVnN5Ay`XRL3H&$U)Y{qJFlK*ZbmDP6rY8!O$#VUf z<_Y|4=3H=hDys4|dPu&Bue5@THhAxMU&+@deg5Lasl2_3<(ZJs&;^3PhOtYW;-S`F z5qfM~LZ;$4Rd(^FpA2VI<7W|G+82QKf#kHW=?y`S0X-r6W9qv>w40fzrX+GKG*wqqbQ6eGNdra zrQiyV3v9x1!irxWhP>t8{CWHd-Z?fiqvU<#ir@3U@Q|K*PIM)HpOd4c4@b;wTbS=< z)FcV%3TK7mrF6`t$C%d5EL!AgT%|eDl<%TH$fstkgq%UGoh00Oz{MR81IBRw^R|WH zQ+O70I@-M7Pa5Lid!P5?0!#%~1M^i0ijhN7^i%p}-<^E(2*j*fPF7ybA-<#7{`vmH zGINJ8P2YVcMMZNw_-Hf@C+=P(p>@ms6ii9r@{=c~rmMXZDW@ZL_xAzhF}0mXv+3t9 z>1E`645r~(D;=;)_1vWY*Dy#laX0-s&6-Vw?lKa7h>B7;Qh6t4eemq+{s`VR>%|$p zo+VurX+vF4>1-br{b*>DiBVynzz#(dU=-PpiU}?V^Mt%0q7Yib&h6~%{3w4w6#8e> zS?Y^k`5Cv3r6nDg)=3OogP^n}vJsPa@8j&KVx7gvLPB4)tWaXOQTOlP-4!O#sJ%*t|mW>n230qu4c2&Dse0o5u>RT1e^fK6B|t z*|~IVeQfapF$vjJGSM<8J9~tr(_;sTgbkbvgZQw$466Apllj)5_FKl?lX7x$x+PD$ zWbldL)%ktaq{q#7AkL{&LOW#gQ_C6m>)G#-oUuq|apBSBLzIN)hL!>Iu^L>`*&Aih za(oIg+54(AKC_jKttB(}S+D#m?B%<7@i{961&8a=4S#ZvABE@rETEAtd1S{WhC&f& zA4<8-|1ziMQjzNQs*U+_x9(`$@kDmUl;sStZ zG(aUT2EaF1=O5Mko8I}eJZ6}n)Fn}yQ>RalkJweKm}$~(lQPyp^{-Rt%5?quvq8~O z)q?}Q!vqq^#KE{&eq~kvrXync;DwcN9Y>3z=PKCT}KwLX3hbvpRTAC$|%3ge^jq0 zn@7eLM_$HH%HOg!Ajp(iE4NKiL037{1(T5Qk$TqbPmv;2_Z?1nKSFu-EmP4YZqB1d+pYlZ`lLH00ii6*lf>Sl|Qkt%) z>r(%lCX;0Sfs!2Jf7~s5!wVC|70?hAsy1im_@s0IYVCRvl||P|bC-N?Z(a#TRm}MP z!ht1lJniIyA3yGS9xiR&Fx3*zFr4*JH!=B&2is44`t&89c6nt{EuAM%2vA~iZ$?Lr z-iJTfna|AiSU#k1kkV(XEm-Qyd5eBrtUH8lX zXIBGv^V$*BUO_xr8Kv)rjJMBWa5cx+edurKQ2iwqD%rZCeZ@Ro8V-p{^*%m679%-) zBk0n|&bZR?nHhxz&1~s7WW0AI;X!^$xdM{q9t3-5eM5dcj}^DN3l*KLEUkBNIr~#} zN5}OQo}2sa*PDWA@Olee7?O>Xd37pYx3rw<;z%+b*kUTO?E5xBQ@b!&PMuk+-|#k} zvMf!->I6Q%bll&;O1g{%ln7AcY04EWNhUTmffI0yjTygu`O;n^p+E6=Q(MUlrIE{! zN_rInKlc~eBDSKvF{MSi!QiP&Wz% zMrUR)adyhwTcN*@VD|ZdYun59*)z>}b8MdJ%-Q|i`e)DZq}MktBX(puGwK{`K!t+Z z1;N%Z!#=&%eH(iNHm6ZYIM9mbFa;#>ye|vQ4S2p-}uoLu|IZgS2h0bMUhMIAX#9(%3b1<3E3cJ5Yh-a7B~KDqEouD|)BySq>#{KH+i@g>2+(GD^$ zN7M508>s(27r!%EK0o83e%Vl6e*JnVgBP?HHIdef$YnUL^_(ApMxcW znLIy{ZLli$cVRCYQ2j&2OuA`x3_U|O>egrH|0j9|nZ?+i|GHo5*8lxT@f?DyezW$Z7?3xCbx2`_C*M^6Ix{}#vf@A-d>AEPbdVp#3&U2do8@8kATb3+SawpC-ED1ZZ_=_>tH;!58|MBHBLFD~0oto)); z=-+(R(DU56bJDWoT#(7%Av}zv(052~5KH@H02{VoMQJZk1Hn z)>40g+X(tC%T-nTJAwc}y`19F%=bOUi&qUNVkry#{)PcBZ*`w#$FjBO5(ftrEv^lxc>8Q*pM zYZ2F?4wHMj5~L{4oavY$p$&_Qn$b})fZ7JVV1wS9Gsm6(k@P29x4`z0kQTkljzS-y zQPx0p#>X@27F*W?ag=swM>vwBqqL3dd0f~REyEcJ_zP;<7YOv^yKAIC0kUb`~s}Taw>+55b9Ds@>dH0wN+|VCH@%`&>0hI#8={#awPj{;aJ zWaam)`?z^JMnGdK? zKoA;jZqERdwN`hyZ9-3&uEuGPslyv|wNi@}wRzq!Hrl&N4S>34_R-tCJi)!~1*L^Q zeC4Uloq*otJ88x5`y5*jRTzZ)wrmn4wXHgmLd$wbzkc0u!v@OPS3r}^EV~Uq1GMSV zrI)hR$KNU9#L8Vik-f;u;-KHqVqF-X9f11z$8~sa zwLtN4UX*4GX}VEep#_$5J;h%O|HntP%o){6{@HB3FK3R?>!P})mO;6>0$PScezUXO z2aX$BZieh&e0H_^HoU60ou_Llyzj{ zdd~&f!6W!^XuG1aLujcQ^gktlVHOk%Y(E!{iy?v^EXyaux-7`4jKr-!Jmx z-?<}k6HNT3zl>%Elu` zY`9J7djEnQEjQ5}W#yNd4DNp;bj!)hbgXqfJyBQpwx&};<&0OglvcO5-6%Tyiabc5 znD}H+T_L^KLJ0vP++aUSfns!GVFGPU4{t6D=%?TP@{Pb==Iz&e&lFgg#<`DG>Jvuf z9-+$|WL(MKtgbtexwM(n6Fz(PtZIAY_$)WZja!!4aKx$BaiSD+aJBH>5AK7{fitx_ zwZ?4iH9GYfRL37x6Z%nA2W|ChzR5Sm?+;r(-95=>gxh!M>oLC8z1Ry zH9T8$c{=hIs{TC7O}AIyr)NUN?FQ0BA(S6?%YcCL_Vrf) zB~nt>tx|KIj+jZ3`CFKTqzt}9H3*iiccCYzrfB+GJ8Mf1BC`i}jsjE~(KYY>qjJT$ zrcQxtkoCABwy-^X90+l2eY!S%Ww|u%T?C8Z(Fvq#{#`nw3ZJl zHTjT+Fssk0wW9-8LTI9}&wFL;n8q>+BS>1|vh+<$sfI&RGG=kn8i|jAEB4#b#|0Vp zSl_28_%@lfbFi_6e@XJb3-J*6jzpCZmqQnQoho;()zx$d3C66Wt*Zvia$^GJmmk4a zOx|_D^}cJ@4*&kL;uWg)LluLDqFpvjNpcdubTjRlB(;WY@ZDJ_nWdk?>S)ykz(t$bR%|D@GU&6k><6 zaguTAi5_?m4<_Wv&WUZXV$5uz`S0w|aq_TObSG{2XfTxNj_XSgW)yRlMH+J!--95| zB+tmxG~D(*en;^ts%Bg9+6bWN;N*shice8nHUJ!U9ix~V79OtDdH%PD<0Q53oDTip zLh_BV0r@e#%gO!Ss0Y8Y^?w(Z{Q_x=`{JrP$O5{2914*@a_73~&$p&x5B!7>G!{u(mYEQ8%@u(4Vc%ZsX1Ry zMC1#sjCt8Ptu;De%x1LLm$-4&c6mJne(y^jU7UK;1zMf^4<6{0+A;wtx0zMJ%OvYf zj}`Hlcq1-InsQJ7?%mUdzK5c~eepazQXr!jM1@R+PIbc)sTZ25fObG8^XMVerHg%q z0j=Sj)aTCWWOU6rA0=bT(TAQ8i*9ztippg2OJ@GQ3sitMyy(q&QSOJO#tnq?zcUq_ zot=}{#`Rt=@0$dLgrs<^Pm`V(2?XX@x9I6u-(bg=Vdj=DqY?696QNtizsb^spjpdu1p3d{YQgp;hCZs3%{49)#!_G~1#1MSF zrL~!LCd}~~$b!0a4drC_7ljdmKwCT7T(rEryaOT*kQHOjQb9pMW6y|~F8~@ehfSx3 zFy2>a4&*;lN8sTT=2`b$IYUiNOhWP)n8%&{{qU%$W{@xRReOn}erIZ#kJdc{48grB zW#P^sa3g`Cq0NG%IW>Ehd)vzxK*gf3y72=`^qN8ZEpYJffl5Mw>?~T^;|lPWh;ecz zx}WfS`I3M`Em0ZROyGt{nWR2Ithu6s87y}Sdj0yd+w$;hW|>&va;fR)6wJ&xYHDh5 zvJ}9R!5j1XtR)guVF9m$!USQp5p_h{2d<5!fhen-a{sCJD1yH!$EK+?HZ?iS|Kh?`t#_HEmwrZ*HjIMS0~{y;vK5F>?z+2|HFI+50woy( zq8i}TfpR`!6w3ia{A@Q;15@`0(*9j^bRc%_Gm!GY<&4G)>a6VZw-+Ij4X0^k#4{01 z3NSHqz4>f)Cp)olVZO(@8EFHsjyk;MlqMjnpo+Ah5<$bg} zvk0QBfQIWpIM0pL`X<->${_S)-?GHTlK9PQ|2>qmz@xuMFbS;o-{O-LTv;8!g55H5Q#*lC|~qbkj^RUV|ba zzn_JMQdrgKH%0Qr36j28$f*qz>nWNDKi)_AaUG)*9@#D5UZ>3twk8rZKAm5-v7-mxTabwBIG?1nf=NZIT&~M-YE&U@Kc+ z#t+KTEpDj^hKA35I>y``*7u7+wG@g|E%C{CW6;5Z;qgT%;~oy=z5g@u9=+d<#qMrk z)g*oPMA9togUo=C?EJ&YnrAJk57#vB@W-APwfs@z<2Butu%L6Yt}TKGahijjRp1gq z$kW=L3POq1Rbxz|3_@_eJ||3w6#6&k<;P*n4?!3or&bgr9_$y+YqPJUlEvKH5jZ3;f|> zmNu2&P^Fu&N#m*Qm=_0QH%wy^pL=_I_m|}t7mYP#_GBwHo;m2o|DtWP2fJBBI-)fax{T&nvU2qw6WRoW`*hCpG z$4=3nA737D%D*|UFio?ObUT01RJwQ_=pg82y~OsI1gK`Vn?3maYlik)rB zR&ZCc^CBNXyI1t|=eO#_>#GAF*Dbn>&T+nFnd!|>Nz{;FBA0Sr>~Iozo4U;8Yd$vP zH1w=_%$~B;il~8wK@ouM9qaER-S;1y+np@@RWr~1$Gh~5U!i$;^i?m8Z3^aZSj<}v zcJ`PueRc{eUW);Z?gCQNM^V9#O9%Qk8stA^Y68<7kZ`pm-)-4e{<(U)#FOGfI zgh1M2z7f5;alAit>y~_Eua-JM>=u8r&VemBMcII$4(uGVfc^CWK{fWnt!&-mUUNYeKQUHhZm3cmR9C`YTZ^k%)6;QwW{rVVJ9~R3`PxrG zVL?nxjN5}fg9gjbm>!`rGSt}s_7Ea{!L9N2U3@$#qQxo0RV)Bqk8)lfPFMnwsxVFr z3=c$&L7>27Mj09!Le_J>K4FO`<+^ys$moKstn9B`!=yrUeTLC)RW)@G2rLZueFeLO zHWBqOh<5RE`H zoPQ@bI0_!cDCHao`XcpAO+FN)W%aZaYY5);7z_nqbFM!?B(i-k8BjIqGiSbmQ_li1 z>*G~N!wu7!OiVu+AyT~?JP+(4B26q`0GQxuf6E_%fPyS?FH6y%Blm*m3Xwn8gOhC{-HxZ4$Tg-HG#&OPaL^gVwb8|IDJcAvrdpyx74B? zBX?M%Oq(h)kn<^Wsvt}0c3++?S+0urtJMjE$=;uaWxjbl?zVjg_z73tnlP9oXv5Bn zSvLwOphvz>UNx*-$XQm^c9)YM7Iufzye?3{4{Z4)0^fK;EYh8v}Ib&b2~W*9-NZq@?7=VjuQ! z_@XZd8POi~Ndf{vqdF9bLz^HX>t)~oKJ?z5iUQfMF+Cy3dS89loUyxu;-zhu#H_o0 z#dddt*cF{j5|yRN1J&TG?`i4j>G)*J*853TgJZzN;E#l9o6gb-5|zF+#K6BOx+UK7w20^smIL$0To;#Yj_HMjv)>Obf`}-VFD3u&B?U zg0c~$N!#o1i!8AI!8=Q{!4XkCZXgmVx)KqT{zRb`0imRL6Qi;g(Xj^Z6091cxEFXAn0Cni}g`76gK zV&Ss4f$cM`ik+Rkv!1wxg#hdr>Vo7hFVWW0RLfY>(B|esrGMzz^#3rVId2>BiVnv26Y(s&mVZP&(IIiTkNf%k#j1}EOql&H`u_SOf@|orJE8Jf%`m4KZ zt6J=HXINm<4wik7Cm>rwDGiz~kPZml+p^JCzq_{tw!;9>ok`PaP`W+_>+bNw!|&RU zyX=_HMR3rnTWr|`*%AXH)78yGpDncnsR+pDv8*@!!4jbpb4g~4PNkuus<$Z}l81-M zWS(wi@rnl17+(3Do*p&V;%f21)wAv5g$sVrPhu|n9nm#eq6K?)_QU_mEf&;jyQ z4=6|Sb+Z`(vK1fkF1*K}29O6>^|MM`MSEc|QlCdeXk=u4PI&(w#M24u{UkBR>?*nD z$0w(j1x?M&D%^^oaa4c70moe%_F6{d?b}Vo57LxZ z-Cc}LV2^t$Fn#V(|qmIOTYTSvS#>})_jtsXCCP4 z_Dha6I&n%}y*h9xartsa@8$*HS)?rpsd6vB44aKx2C*b4$luA??0*1^%X8TCYNi%n zv*n?TG@n6{AK=SBruuDBS&z08DszgUc+7ZIdp!o1=)^j}e|ezd;rlqR!M09yyk|&%lUe~h?w$l1A-VcT8ryuLj;qG9@=?8j->~IDu6&A^Qq$UBH z)&63ufF=_ztXS6P%^mMrAE*RVLGurd5+pHe5apeda?UUp4paJS9S}MB3F)nLYSBK) zOu-u)&LCQSWlRs6?mXz6Zpc-o{)RvbxWtPgTOuQXnTYLLsD1RB{a1}24Po8|V|s)%^i;EVO*zw z!`MgAO!zJ2Tx||z5peMA66ZVl%HRKfsja?dj$V*OEYiafQ*+qEDHk~rwU7t!fty^K zMFGGC7!JBiz_~%bJ(1%gcf1~Hx?6J(stFUo31QTLQ^VrmBulw-?j@fv?}}#??*Z<8 zbd!ZWn zJ&jW45ueJ_et&HG0V5h||Cv#Y@L$zZ()0Kc5lQ8Y`rzvH=*;?xZr$O8VwxPa92-Gu? zqF$j3eEoWIYrxKYxXJ@p0J#Y{ixJ7Ia|2Lt3YEU2cC z-lEPAFR>HlzEV#VBWgtp4NSctDUz>M#D^w9W{YUXK{_;($`7#h_z59}pdo@9+spM_*9L)`2#(%EJka(5>rdUU%8vd}cXx z>oHeMPlGTP5;?Qiq7Z1CyCh?mzJLpMB*`T~BXZ?Q%R4{~GFY;`;j~2^J_T~x0@Ulb zpd|71VLo2099M`mBDA-68`Cj$k<#AK->2?#U%a{>R}c!?Dh;)$I@Z58|x zlhe#H9^19Y$x2bSde{;f2*t>AA>#p3^L=QW^xJl+Rs0%FPgiYSUfFsvAFy;R(4Mr> zkv!HZ9%n#M_@PqYd>@+4nv(#Vg~I70q^s;1`e4eSIp|5se!S%ZwYyHCSw6I^paX=n zL1T$tI6S=`4ghno5COOM1NFH5=OlmJyLD?YzH4Ne@B;|iL3-N`_Vr+zm3FO1NtI{6 zYbA;GN|tqxsUB(6LRHzrqhJqS$8xOw1*$L;P=R5jw+EeYDU%SeQ^8;m<;;B?0@U9j zj^x*$ufh1F-i-i%GWv2%qr)!{weWMfcKq_@l#~E}M6C&Ph#n5neKhju-P=yo2EC|Fa{#R{uWA+x1^kLj0GG4FBhm`+uK1Uftw<7lKI)S8}{ds3UeY&B9aj zuk7PPj4?gIN!_5=r|RdIXLR&0HvBS}V>iXLPBnhH^ojc=)p^FiCKGotC^kU6Dx8kJ zB!iXj?h`TjDj&gh>N1cQtHiAYgu28OWNTS}PaN+y0CSPow|GnI?M4=NWDapzBPd&L zyug?FH}~;l^cwu-U))EUh2^Qg5^23Fv?1!#3#v5#Ugv)g{XcQ;8j%`vO-)U$4im9J zw~YSw?S{uhaZsYlr2XU+KivhAGekcXPHOUwo$&ZBDTtUdeXwRy8^4k#F2_T z5iv2ue!itS8*@HUO@FL}&%cSxeEHA4q7Sph@k|rZYYwsE+rJ}c1hhN0n6AQsIeJh5 z5*V5H@{3syD(mV>k)3xJ+{kC$SfpxMqsi1Rbd^EzXy%wrr12eW59CU??2*ePm+Sr`t*rR9D#YGWku5yoZXNps!ENqDl-@g<3Rqt;Vx(*S7(qnZc z1M^~=ViXEcJY{SoTE8M5pNOpmgGu*rGEDTfrLU3gROUp7*bLN!tHhO%O=O<>w-(@C zSWHl590P@{gx~&N-0~9(0Ohbp{{`icj&mk&m!uMlFH+W@13OdKUg?9Ib8#m zS-mj^D3ix(YZGctLiD84vK#7*jEvExMpXM-Oemv1J03)HDdR=3hKZ7g{;`$LuZVLLAgrUmpm^30RQ7X;ELM(>5bpb9AR!80*Y z9i5*3{(A1gZgb#_PK^mob7=F^fmevhHjX@iRXiy1W+#73j(YOh+@6D!Us6>V`JD>nvw^BKRsRKDvH;g!My zL3&c_fg0d*=n}n6E=w_i05RWa%mfS}O$)<3c-Qn39V72*Y{I{H?_OZ`8$M{oZszvD(1yXcIpJ0|g-;fJpHAW( z4WZoKSFZ8h;hvbCZK(@j{;MD^vKR_Z`Pn?%n}4(1`JdRaoGO34ZZ(=34!@LIwq|G< zq@jJ>Q2d59q|vgM#G<03wQb8grrKLkyn1KbzTHml_tY;Te^LLDuhjadp4T_S5)2?f zlFqYvk%R!@E0UaGWMX>S`-9q#ka-gi{82nrN%_P_i^4RNh{a&EdTtd#9h4xK`S{qc zUX9aIsP!*z%-kQk3qds9%gy)u+qhemt~RrS`D|`OE}W{WZ()Z=7Z+bwS64^YfNS%e zDyvkpBbR3!Uve8sZ(wr!QEX-IN#II!fsGAc4MW(EmP#NuWMQ#6SJ&R2Iam-7Ky>b0 z+OpKYJW%V+bH7&V=ATvN0#W?zS1j6^FX^kM!BHSHE@#xss@?PO#(v#>DPPk2?LzG4 zvyX4W5lWw3m5NLTy!{HZeM9}_k!+q9gfctLo^2GmHr7WH#RcN0PoMNt*FUV&j)`m+ zo?2F~l}%Boy>A;5muXc#_2_zTkMMkwfY9Vv{VgWRwwgmCol;}Aa1QT4^)ChUKW3eM zJ60SW9L(B2uL42lH2G9SDJmNYG2hWExZghQ%URec!#|IB7o3f}T!JJ2#_gT`iX6KW zRn>9!Zb`!+Hd!55i|F?h$dyO^$}ddOXpeOF@KD#*z6DXJSY*2Dd`ve3DItjI6f-0F zAj*DztIuRJYTKHrezQ*GcDgmo(C=rJJ_%COikZK5Ec5PdnX3U(wX;!(*)<(LAuT=s z*vd*t)s|ePy4vD*0lVs3)en*9zeYs*D8q2Wdq!c{PP!5+@g&v5`1Yu9^}7zcj#pxIblg2XyMa*O@MMB-VM#73`asQT zBI$5ZbHJ_Z7;OyySmDTK%FmXVGIwih>x^Zbe8AO%z>pBm>07*nFP^z9h=YG0HOv4A z3nv(ETUc-j!2_u2)UNr>F`Pga<<#o7sjw+ia+M;>~22ws; z6x+H4F?k#(TWvAeOJZ&g{c_O6y-8zdDJC^pp%25=%LEr>$9N&I{-~*DS?VuIhV!p* zPBwU*4n0#>e+m?C<>_`Ti9XX@8=f*;TwfN4N?GidIS5=SP|Dbs00&(I=|EUON?=H6 z`s0ABr_OI)AtxuloT^=I#qR7Dg!iTx|yK-+QOl5v2W=>8kuqjDOYITF8z_=5Erd&X$hUnz+KLdCT?9O;%7Y zvDflXluq#kNjZMl-y5+y{c&;e>7Ohv1~FTc-QeG6X=#443BFsO;kP$DM(^wvPd(ib zx)H_ucr&(GugX1$N|c40Xts znp4nQ*)E8@RwHNs+F{^;f=Y9|R4R7@y@2hz9Vf*i%i&(fO)|i+f(>$ehM#BYR3?U} ztF8}UWu@if;pXR0d)s&R>zr`Sw_H%Ddbq#S;r_dI4wad6(S@Gt=8ZP3Pes;-i6)Q~ z*VNRcSMi}GXJ`yckk%^}Cxe0%3Ep_T$Y4_dP0QHq&!_Oc1S&JCOnl*|k;eocn@_6L zsc2#|veL%KskN)ziE9n3UWSKLyKT+aPuyhT+YUu*n7ZvS|H&D+CNIwc72Hb8==DJl zbG7y-{{(+AEv!&F0iL*yia_AM>Ol?oi!#xfzn_1K47+gcpSkPGKS%u?Jgen7;uC+P z>B|h$OQ-(13%PKV13TwT|7MLS`tPTWoyH>Ea1wsXGV{`@vR20VzVL7@qjKGU9>;Kz zGZz)$xfPk2{T}Xga&x-KCli+y@9n{M;qUFX^eO6L5#egOo?$s-rqI8@$1T( zaUL?{MjPv0yV^4hPVwl&Q_0C~T$x zF(}p3XM^+gQy^`L%;XWZ9h3kZQ&CB2;6S85jb%DAR|ff~sSGA0v0%0iqJ#@Il&d-@fr`;pr91W=?owDl2T7yOZWv zrhV2tm+Q+VC13jpyqrz(9aIYr2|2f2KVbId=;$jps%?I}P%Uj`^#if@UMr}z^aAd; zU9pgq?CWE^dcMi)G3T#f)TsQ1u)53|$0#i^Ie8i=fKc>ra?P7?fb4AQu-7I%5Y_H}|v_u;~;4 zN3eq+1weJH1vteI8w97WdU;)b4-O5*$olLhS(1ncoBD3AuUGQ5nQ{RLPR1Z+kCCAv zdQ|$rXZW=ES2Za~$$Zmwd7zVDzj^a!YFc-uf%pN``btw#<#J=cGlcXjcB9mua7gZ6 zvBhnEd652gii7p&Eb)n>6HqGx89p&L*V+_9hk)IXrQqbW{bH{WDpt&<4Oq=`_tlF^ zk-Pvthl28JeQO{sofEzR3{C`m>RCX(GvKB_DN@|H;q>AY5&&LK27DV1?!T7t+RAfT z&?F_qS5;L-{s8^`@hAiw1>6%*fCeyB(1~BU%Y_g+h|Ukx8OSuGq+;PzMxy6D zmx+mqc8#~>$&)9cYzOH{qrTgasmH8iR>bzf?m9d>6u(?# zW0J~q8%L&{YvmLrU}y$kzyT-cl^$)cHnRu=0*RKkz z0|^FNw^XGl04!gnq&!Z=Z*PNg5A-v1uFJ!n5M#2l<(y|Jb8>Quz#ep$_}SQAI81zB zJ=`8i>G^N9U3ol}`P&u~KaEM#OcNQ*jK-GmD@);ErcftKj)UwTxA`DSEhgpJjLd}&TJ)4g0* z7eR|)H8nu9UKqq3kxdsLS?09R#p}PhZCY!|GG=fT?hg%1})zK zJiB7M%3QP`2%8WHLu&%YpAvp8^PwwWzLddO0aDKkluenY%>tr21nZru6{u)qV?#8y zHHSi=0NZi;OM1`PlNcdF|1vZ*MBEqn44S`^!Nk^#{eP7-tdl`>V_727x*5>Sd7j$< zPq73*@#*I>34CXu8%6wRgj-QbUl61JKAYO5$Cz+SjwrWLry+FYNf=Z zl?e+k2?dPZFp}<>+0_3q?$RXz?BB{@nDmChuvE!{yEkuc{XyCOImn-X?}!Tt3)>4{ z8oaxNKS+wUzJV5Hm3%EXYN5$KUN;*}uia9<`@Z$NdUR z!J^{r!?0|7H;uF!4ripk+H-rMxk3of$jA^wFxhQeuF8J0645t23<*+;V)Fso{IqTa ztFpn?>~i|lOU+>_n5drQZv2w8pk``QfHVF%x z<9#+KD+EG8GXF$KIv;yYqtWOPvd}er2J(|A(2DEV&9-VQYG_#DK9HDoBKak?ou)#7 zGQsR|v;fyqnwCdLfy{tRDId{`oBazR7;Lco< z6iQWaW#k}aJM4l@hfj4yN>t!Bf$yFPdk_0ItXYYR2x9Tz#F^khXcSh!AbOxV zNt7O?5@tA#aX#2UZCAA&mVSN@iPi7Wi>zf_J6Gpe_;D2UVvb>gR54=Ay(9``$`&55 zhEkM~d7tL0nUa)rkI;nq41)W*hrnxTY+yy;QT1>bS(v#+OUHgW?78Zgv zEx@x#gBJ`0bBTBsNF5FrFI+h0J&T^OxnYhuKnepcTlt703UuRUjOkOb6sr<9bMqUU z@BMj?V>YZZU~`L{Uny@rqEaEH^2 z?GaxV3b1N3JPK|tjpBiA^+3!j`SrKzuB?XgwaB!+)@yrw z{~&JPe8RLq_&d3R@)jNDsX@VQTW69v6)u%EHFFgguQMTDCN=j7xV*-akQCHWoZn{ZA zaqnIW1=pH{NQ6Fe!OU8Vt)3NQV){B$S9$%Y_K^FKAfS~2eCwdt!5Cs0Sah7Za_cp~ zEldT9hJ}Uk35tlpP&IZ}%Vjp3{T|szXX#B0(!xhB7kNMwqJ4h-ypA?l3c;>NG<9Zv zak06h<2(H@PS*A7&a5rv1v>%b8#_7@p=E$bcz@u;_b^j9kk|2cWTeq8JL1oj6l>;; z5^OdMvUMW>uLN!bwSap~%+B_`F~hNUa3HLR_(0?Tg?cSOZtMj#(cz^WiXBBA0Ma{fl|k-GqOdkdP3!{~A^l$y*C1H17xzgx_LE zhedj1F94L{@E!w0LjpJf@wbf!5J>r38ACMA4nSyy*G|RRgNHWgb_@t`>MiFB7;q4{ zf!Ia54rb!@ z;p$pCNJ&ZA+N7&{8oIj|1ey5<1vNpZs52?xA72Q_iWWukYdqcCOrezDVw;+m?kIfPrl-Jt;ne{GaE% z4#|`>g@kJCB$2j7UyAtx&8JFGP~e#}XCA*QA&s?Kt(xpv1dIO}^3M~Vo>v`9nnAk* z(4Ouutf^NYKSH~;&}S5`#x+t+SFRdRNpSdq;{YSEbR?vh<>cmdnscVf{xdmC~ zv7&92+2e5+f;&$2a(b_4de>|=Nnd{bQjgEhuHSQXyk~tgr(!n8ktD<^_ck)DDJYTB z3W<(f6M8e{h}ujdJUrcLwuw&o33P6Q8Xarf*#m5p9ik&QRz^c$qNOG z1p$%VITSL_nwmT&QO3Stv7WNoUq^?|uP?dP2Wm+IRild+?LRxsjz7NJ>y< zLJd{@-YWK-4NEY?)z!qz%x$2`kFx-HvAR~6!@(eD6l=~L*iyz{( zr{3Ih%PN@bzleHli@10}-DV9jk!|NS&vvuYgXa&NW{0ZC=MU+Td>wm|14VOdTlAF5 zb$F#`Ro#kfT^TGn6_t{w)l{QEmQQPABYmJWCr4&^d08y3$uqf5i!dKNdUOl0*eddh znpf|2V&n?=)`t5C;}9dGbJmNiPpAo~T{KZ(eI+QkRZ7ZKUq9L^TirVtvU5&!sj=k< zlt#HgGn~@QOv#|2ASm1fM*43hCME_oL|^fKVteZ`Ratf816Lg#9eHKt?&RIHjrPtp z+f$`2N_w1TQ?)YVaf6hX>6)_;GodUMhb#vFQ|U@6Z25G2bn#wMQIUUOVaK>)`IzU! z?jS~o+)K+YJrThJ7yWG}-7E)V3O#WOr(at0?zolAbael+dCJXqNjYtK>4ch?JW^+6 z-L+zq<)5z>XG#jjj4z3ck9!SNB}16&-k%;~O|snh6Lh=KHzXz}|7n^hqpfZC#o+>@ z#Mfkn;;OrJW^04fzE`h!=_X^XxzQRjq|Bm^N~er@#z)-FiKs^Gw70conUyuDRMrVq(w1wUi6}W?*1Y1d%n$7XI7? zyS`5e>fKETG#LrJD7oJrJ2`{0Aj%ftFAuXTh*#zNeY&fvt2gAHdpMdon6ca;tEs7p zqOK7_3eV)H&sJmmDSe^`U`na+*~G-85%I$#D;eRBEeWpB$S$fl-6*gcB_0$R7+LbF z9yc5BuT%jxpo0)Z`=AVkHG!v;O(46O>?t7*sM_h*eDv>86NOf*B^S{uKQ?QssF*zx zMA6c<{!_~;$F7@{D)@u?xf2_^*4ioYPGN*JdNZ^uj)qgJ`gTtgm=$m?~z-MfpQzA4YWA4tNS z)N?e*MD-Ddp$V!TmAEufTBJw+9yoo3f7epZHP;rlTQRq@+{~&=@Ae6a2i>pMm8`8b z`T4_2A-d;gCHwz+%iB(4x?5Y?*{M<)Rot1rk0$!WF18ih@sX7HMLYp!;V8uo8KGIf z9uM&9eelO#H$~luN-D}Q+9}=orKJjIXoCiLkM->b?F*oz_ifOw7>F3SnOL?L2mf0c zr>2gwVoAZPI^UPj6Ka_XwYBER5vzbZMyBHiHYt(Qjv8FVHp&H(MNZh03hnQPh_%!T$qkSiosSrwWY2h9oinwEYyu~(@ z^n~&ib-p?I#?6~gF=_RCXlQ8M%p5MPqhqiA3Lz8@LDo|*99+>63azVu8dtF=GBOe= z&kr5A$7;^E^rCbdcLdO-eg;7p6?d^WV$y$}3Yxuykn5Frc7ugM*>!LF`t zb&h6~o9=wX@DKMza7f5L^t7IxR$J@(byoUY&xlH32?Ec+K_H0&X{kfMsBy;#E8bch z8$|dY-!-^;#?S8#6zPxWnUAnti5VF!5McA|!;vP!>UR!ZSRQJN-@(3+6$rCZn6aJl z_rHra4@PLdQzg~)L&8Vja5NB~$0pq|afc&sQGmyB6Yvw@gg(Hu^fjj{C1pFhNb>Xt zOeVdm>ewSU2T?ptyc94VljnoM^C&)-ue#-IaIhSDNvfpd@s}>WuCVdcR(J1lu8TT0 z>4x^K;dt;TzW9R%{JAxlaQi(^K*G)r81XXcxZ)9$WudQ#*8%fmsypKB_eHhtIlK{q zbf^rW45{)T*#wk2!vB!bc~8aWEH6f&uS^?TV;>%2=j`Tb^lU>1X^*z{)j4u*J08Ys zx~FE4SO2xP)Ay?KFFkv9B>4p&BQuYFe~`bo+C>6QVl)LzGp`l5`Mtz9Co(tGU01TR zvwsL59UXl)GI9||9&`KHcgdW#V|RvaCYupAyH`TMuVJG!YrT1rFVdqMo+GfB;n^XR z9>=UF0hb|S{`^8N+gWV~T&dq8tv($1CVIP5_zn1bH6=(VP&Pp;>#bW%$0M8VbxD{; z-{B~Dq2l7*gs>1;z)DDjPo-gX4-Ui!T)(-sH6CN2=RryGQ*Y(bW2Hhb;Z*3Z{4JBT zXN{JLc>`P7Lg4am5%p7?B41qp`G8_=tA=%nBgrw0tB$WmMmvwJ07>2Fg@p=ZTW`oK zo$;-U>?$|o80Hwpg-lhC@mV-CF|pQ~t@r9{m0F0&zCyqLHV^~MtWyEwrV-~bm2%=n z;brE`M1YoI{Esituk5SvmOzh-7)j)G{Lz9astP-7+?0j3;OohGorPW()L2cRsW9Mj z5;2*OM`E_RoHgUf##)IP*iQ{SU33A7i#*k@LSbG%!`juQ{D^V|5@8szHbMliuzUB& z#qEx-ImUr(A79^B=-)2Cjg>wV9E?9t5sTe)QQJWj4|%4UCy-Todwbu!dGi>31QBQE zCqaOU?c1AS5=%@OVP5NC-WQiEE$A1buu15Wvw-eT6kgrV2nd{-=;-JjmD-}BqHqrv zC!E3OLOYz~cWLV#Arzjt=_pD?h*-qXn1NgX%RA)FlixZQKR+0VGm6!1OtWO)(w%qV(+Zx>JDhl>XQ;co zf^#lyvTahi^la(!sZo(REy>`3zYq2YMRw`lr%RDSRegtQ{iA;U8yg8SdOskFFjSsS zV$d(W0}^pTDzeq`ToYqRi6Tf?_BGGW&Jr;njh7<-P^$MG3v!p&Rzm;a7o#xWJh=|@ zeBv-*?9b;0c~$b{$)43ajm2-KC}p2s`&{T}D*Gfi+>LLXPaM|=y|zw4DnAJod$fD# zAxx#yeIvj$4(ywe1?Bh5iKw~>r7;RmQ1X96*^8cUsj=+3tWQtga8#qk#Q(V9f3u>R zEnKb7Yr6#VD?J?sl%fnIuTIK!{PDkWqyLbK^}_!Urkeloe_Q{rMB)GE2Un##jVQfe V**c8ikLvIpHZVPS|99u}{{_8~DC__L literal 0 HcmV?d00001 diff --git a/docs/assets/way_to_install_frontends.png b/docs/assets/way_to_install_frontends.png new file mode 100644 index 0000000000000000000000000000000000000000..a90ff2b5dc113e2cb7398d8983607539546c13f0 GIT binary patch literal 130193 zcmd43Wl&sQ&@~DPfk1EwZox@#cSvw2xVyW%1b252VQ_bM3-0b790vD$c2x6jwau5(uAmHSC4-LHX*_T-sc!0GL zRkeqJK6nW#Klq^Yf?}Q_zWHx<1J+YtsdEUmf(l>h+#!#I7 zju~kqaB8K&Xa>46#B(6@y8VPkF4=*_e1bZ~Nl9F>eK;^18~oSt8?rv{=Z`e4QIu9Q!tGWR;ag#Kd5o;D1d}Zm6KA zjR;esccDZ?t7!|Qc8_8hqcU^{@}TO<+QQ0cy2JJ(9+`Vm!3bJfmexWs2Y%-=4T%5y zzQMmgP1DkR^tM9Hn4GemQ>w1x6mMihv6jObAVAt*-~fR@>$dEb*sPpQc=Hyl#4+y) zqG0Nmfa#WQ_T#4%rAP1DyO@yuE^H_V{Skt^K@a6#F==usQ@Z^mql9kjrx}5;Pikt| zKR3gZ+b=Xt&y4v-kC*e1qQ9@&>ZigSy5SHLpD69*#0slLhZuz$G#3F_C^&T<9#W`v9SKF?7F{yYAE*kRhz|1_G zZ+>c$4%d}>74=;cad5oLS`#U$iCwZgOsQ@2L2BVD7#!@`vD5uhOuX&5B`!vc6R{32 zELK>YO-dC)(5qNtodumuIe$zF;|VG)CfQ#3_TqrFpsG5XZ*9L=Me*;_3Fg3aiaeO{ zo9xUuGXkMT`rF1Q*|nC&%ELHq4ST^Z$KdzD2f)tUHvB9}zwU%UKtNz-hJsbTYxtxg z5S0q2g_ShYjsJ^OuzP+O3oKZ$qrbuV{tWyW;^-gf0|CSubTlZ$ka70rVG_>=X z83s^WY={77Z2F0z!An`XyMwVC^K`T<%1;3^;`+SX;N#^)7=^iaE@u32p3Qmoo~M#! zk_hX;fgxB<9w{L`daR3v`7G|E0wO;D13aTta-rI`KC}yZv9r6z(&9AfYn7+>H2qBQxx>N5(q1PpDbv( ztb)YEW9ROtgZ$n8$1HjiD&f9OoXdp^x8{df8tP)J4EV5Q+Z$3N9GP zYJ%%uPI2MPaa=m={$X6Xc;VcpOq`XtU|GcXgM$6cGfuT z%b6F3{Kr-?0wo0oFf*&9l9CoIj_C>JvGb0|8BsV`Y-2{%y21!=6j_DSJs84_ygIa- z-8e3~BsO;;{l9&E92#!-;?dllCeNx4jwBOJtr zY_Q2R>7S_0UZVKTz6$*Nz}=s~)qmnJ8NuuKg#%Y7qoW&B`dVk{9V5c9;wmUB%E@nb9M|aMK~o(0yrGKmJJ<*!tV{d{ zHk(j>Uw3bD&H_B=-+T(p>oLjNAx4MWw5vV3i;vCprI?6VvFawcsCImEtFm9*aA@4z zZPc_%hlOToyMn4S-f$p84msjXIF()W^e6w9oGpJ<75Tog=2TQvbYaD?^C(9La~f6| zjPCX5t(E(m^`-s!RISOV&RRw`qBJ<6$!(#2&&$;Ih^(!NkgfC9ho9&0LfK|Bmsc2R zgp3Ngt1Sn;y`A@@QgW(?d89#2oqhcasESE$f2tL2pDM(k7$sEvvud?1?uO_zr{Z=n zo9QH}me-x3d1FA5mK&8-*lHq;`h1n)2mSs?%c8#t;CGCvgd$4H*G`%2nbNVF%2H%I1yEPcN*ezw1)Eom~k-~Q_M~k_~ZOV)={JIgyV6J>Y*x? zWe`zILStpe`wO)^Szh(Y`~u@{VZTvm=;+E7TYsjG-R-7XH(W28H}0mI|4UepP!@#+ zU8gr&i2gPK-6b^ejGI_zZW=B;vdSqkMcqE8)*1ubaGV@>Al^g~(`}pifdO%tpC=|v-1*TXo1S=12})#Zhn;n_kOQ{pYwuD9Spj8n1Lyz7*_S&hlD;DbE3=e%!y z;dmXe0uSKclH8FKWDalyKG!u&fcTon1;SQeM0KLjU(nfpue5yu8NFGYLmNN*_-ICp zhe(xAt-gOsV$O{a5*o9NZSY)r&b=vEiyk7QFu=K(d&U8C6eiao^h z2XJ%HOOn0_d~M>sqXJUq?UX({wKqL6pD^$ZrHYjl{i>fUQ zJ?`4&kR2UAK{ZvTUZkk{tFbKT=!xs+4K|H<$sH}d#dmJIdb3vZeRapV9@hgNkI&HX z-Rnyc3GufX+XkTMl!*qn&$6e+=AFV8thnkQBo?ZyJ|*nrN{!i9;8&niuyFWDEs2*H zLcHljZo7w;ivxI=O(h74iz|ws8(pe(`!^#1&9cV#F1k>W%0}iqL zN*9X*Lj1W=2j;Q(QVQNQGT^oz*w! zDY3k~x=8ExwBGQA3kXpenXO+JW7)U4F!%FZ>2o;jDoRW-Wfrw_IXWxnOdHXBBzE>Ppq47+YD?G24FcV=t=bF#z|GVI=FN%#*EVWep#AMD46N)809ivNhZwVdf$juQ?R+8^V{W> z_qL3awEf3U_p;ZXu)FEmZ;qxoPScr^FAvgY^D!1mL(nJ~Z8rtYU9-Sy3-FqMbF@#WAq|>{%d`}%>iQIU zCZxhYd4J!3AvR_jyIpSATitHXvc@OY{dp~ zbp@$ciKSlu5!^xIO@t9Pk!vr)>0~nY^0eg&M7TiQKGt@d%4O9W!?xx{h<4`2<8gjf zFZJaoHvyZMH&3?g`yW)NQe+rm#~z&jW)@GVOi~&Zf2Z z__=sS@$cmh-qP)pT=wG23?AUf$CFs&ZN-}7OVNJb#Iduh8j$u#0Zmf}!XHQVZ*2_S ztmSpC{TO?{SszqTcvIO_<13o4(3Iu!xq7ap_bd~ZdKpi5`HY|;+>JL?vuDd$dVOK8 zJ#Tc6goGwSr2#9=a__#dk9U!aRS{zS(k1NxW(e{F=x1frbp3@g+_#OOjDVena|ph zp7{<1Afn^qq^7H8Z0tLg2wWfOF862Rygc3QyL-N*aJUo5^QB<0$r#8GxNf7E7tR2S zzWASPa{Ik8(@*6G(tAhTu7dCV`dHBIPa|}q;*v%yfmaTEZV)ri&|NX_8%_5$Y(^pk ziBW#Vyq{9S+(Jq*K&h*UeH>f+ThL7Y=XS{MX*(NR^k&AF0SgCQl3|+Pnxzc zBKOy#q|)lw&s{_%BrF$W_v{*NI5KV@o3%p|)8hdaFzzj4DN(5nR5S-Sf+s(G6csDB zTy0tSC$2*=-L#pc4vk|n-m5q z5JlFx)oIgE*-H%J|5WR5F0s$Djb(?2!0ps$>e31e;czey*}O8^uoYBkFyIl1YmZuN zBtxOp@Xq>ISl~T9!ZR{33R3b(^WPPDbIuh<&O{0Ee|F-(``I+(K?y`ycb&{zK*JKS zT_ly0cwaajp7DCJJaJjIZQzXZUMM8es)y)e!Q+ib#dHUqO@6V4usI6OPIq~%Y&ioT z#wRF8XJiQ3i8FpoP_+0$t#?>=oX)o)NiO4>r82zjYd=QH!jfQ|W44&-VbQEJRh8YR3%=YfyJ8n)FFP?7{1~(*PdFdBE#9AJ==Cff=fM zShdP2OZ~!*QJ&+crDM?r7&yKu=o^FJ_waS`( zFUv0~Qx}f=%Q5z2ynd1Ri~6Yyz`*xfk$Ce!H6^Bzc#Vl3JpZAFWBtI)d|sm>WYm?X zg6q1~$wc{4?@iz6ikmGlL)@=WwK{ZV)WR>u(?57ER%;?xpI~&WmsHg?hQO9H(@B_i zqd!JLxyI4)si9K~RhpAXit0=A^q%{Zxrs5F*Idy}mn9P(EbiDliZspDr=$LH!W9l9 zMs*m+9Mh_tPo;S;P7U0G-w;NGky=4D79KOrTHbRxQDi*%64lstq_RY0f7=m8ofOsR zDbRz{>DUUNlSpz31gi6KEoNiLlX0J%WIB6C;*q8uN{2;0bY{N_E5P8CWcHM#h9-K< z<+KFTJR(dzdoTF~hoy4KV%9GG>lSV0zj=&cBs=bGIT=a5rbj6#a1?Nf84vhNI#|$+ zg<8@$({ZHbxKsW!LM*qwD8aoZS-ZSHbrsByd9cj_e19<>;HtGhl@-+ZrZ%~mtNxQ2 zZByi$Jg}n5$)A&xzCn&iDWNMgoM^Hn^gqJmQY zq~%P*6WRRmt)hG>N~mB;Tb+OEAmfoVW})dmh@wICiv3S?Ccp2{XzHe#(}}$VVti}{ z2hj<`;-DAIf0`J$8=%G5smau`oLAS3xpnq{<>f%PY-L=%P%6Li0VOomMZWrvY<*_a zAWrDpMs#eaS@gM>ZKri4VTkv4#n^lvM6As#U`k7Y|B`-D+zYqXcm?ISjcbSqo+fwa zVImd$-V=woh2PUmY5_`q%xB3b~E^TXKvDFS3HY{RctD5?T@MuQmt# zkdsTLEDy|xlv_U(@k5;8l!%pVy@~g%>W@#XX%V9tP4wr#Xs2gqqtnw-*;Z$-AL4ob zRWk2RYla4N`RANGE?2lMvf(&$8w-lTmF3)n%%4yrP$GIoZ5H-369mx@{vi+&u^Az$JF?rV+lXl% zn<2%>BFkqsJCDZwU!n_AF><1fmXOwjqyqP<@q4CfuR5N z<)9!NA>P`sOmdAnR3?l{#IPO)3&iw=Coya{uF>Ju*^TZ{rGFJ7yuhxHcM2X(Oxdxy za5*5wVHJPb0lCk-%_%lQZH~7Uzy6(`ZF+^~Kc?@#gS8p-QOq!TENKXp{u?=P6~iy3 zWHCxy%k5tO>(v@g@$3GL=c}B5uOcY;|CYD`xo!Jr3bQF{pl;98{hyqulBvJxVw<8* zmnQgkC(3)M+oS5S+si2#)kZtAG*-)BWo3~%^ucq7WPr1?T4`diS?3>R--3TVEm#fv z{fdyEARW`kUvcQ*S2YQ9N;R@q+Sl3Y>_|i@W(YPcGoK?G)q8 z4d6C;&Zn!x$qe21vM?hegr3tip{CZf2YnE6u&Cb@+96RVu4*R|u{jaVOi$B09w?Z*M*XGEnAW>pABl}+@{}6>z3}crczW5f$I!93`StLLVGXp%F z?OaMq%ChsCXEQ<$gm5I@z}n06P2OQok08J`BCf8k)v7c!S}n<3r!8@x1OkDWCSquZ zn1UiGhC~EBE`ao1LBXIk00`>y2xR$Q?#8zI0Ko~vnQ^r%;6vln^%4X8+vXK%U0vPf z$BQw(cGHsuO`L+2+9C(op98rAFE>rVB?%R0Q^tFW*Ta=o&jAk5t>X~@tuUQ=>vdn<}> zx9PA5Yef4+#~pPN^WdZqMu zCB=;&YB0*U2VUB?_h(Lzx=DOk*lQDhC^lk#xWebaY!NsJ*4Af7E1g1u6)__?K_n^J zA;;c&5j^<4rZU8rym1z7GYw^~iU?5}jmi;xaB#3$cI@=PD>K>*D54w(1v!6!;c;+q z%xZ7nP(XY_`bC{iY$+=*HemZrDjRdgp23-c8mM0<86;#WuBUVz}t@>KT>Nn zMDJyJXUg#2`Nzh_8acB-`!rXZPLb0#ZpW@%kA(^nTdXuCl&aT*_w%z}ZFyeq{S+2P z*EY|o_`0ySe=^`{#X_&}uWWkDRj;4woZQz}G;i4&q+co*<*f;ToYbqE)xf1LDffEw`It?kiq<4xHE=cA(njZ$!vC!1|`vYGE%sv0(>9m;9=#SQBQr zA8V(3dwee(l`7$BR!vk^&l??wSAFl~SXfxNfoY)WqAd1)I@E?IRs)SUbiL}lm`b|GNtwTF73(UmyjR(!%)7EdL{WQQg2hJY0o;~Ut!AEUvf-F zdPBf-C4WB(ITppgGuLSJ3kmRq`miV4{3k_I{p|?WDuHn{_a9;Spd_6QYO~#^cTAJ> zw4~WLccj;C$nJWGF^k_khO~ZW+h9Nhu1JB$)z2JoA~r5j%YNrOb*_a>qepX}xy9bU zz)yv5>~khgI^R4C=s5Rp0ciemkl4n*Iiaj`141iPk(e14Vd(Zc3TXsIJ|dK*KmYhz zU_r)W|Kd-Q`(c0U#b0;c)cFoG-rMeN%%UYJQX8!GjeKRJT=2A2uG5CRe<&_rl3~W3 z^_#T34Kp?@V>Rarjsnd~BpkRl=#H4ll;>DgtEBiq`96-Y`0VZBUF(C0GOv z+SBbvIc8DWmTlf*YPo!p&zH8W^gRe_0LW{zi?W;EWjjWsps46qO-(!)YMWP~I(**Vt(*^yxe_UihHwHwh=u_Bw_HeXX+vIDyTmeIK z$X5yLgV;Lwi)>7xy48LY^S-1{Jt85~7;@lij(C}jU>=5`>5X=aR4aBgn|ea&yZ$-( z^M#QHJD3>ebsPw8&Hh*bFJ`;XF|h;28|rs(`}&0aDGRtiwzKOu2M=U=_v*jjkG>Nu zVvTkke9@g>nWk~~3G7;!F3+eMqlbfF3LHrbV5(-@A=H%Ee@NO8Jrw>nRt+JF?S@+! z_*pzJU1op_6ZtABmhlJ^%9$Eub;3;Um;=^^}T&&aQ(dX00l;!HTk zbAt!O7#0(2rc-%RCF=FGW!HVU);*;SZ?HHWC;`X6*K#qczuw`a;j$3`(378jBuAhu zB|6*O?K9o{ZV3g^s?(C?ve(1$!v;DPaKLr1aVT z<11Pg=mHVCD^I5y{m3M2Kn|6OH-nkenV@H7H0o5C%J-wgZS0J0a`m^W!=i61br2kf zw0f4Fru#lBFqhdCso&!P<|Af#2gT|Ynmf(5(Iq@-i=G+869J z3VdTF!gSM>0`+@qy-u8OxkH8b*IvJ_3`^bkqL^U}hP2$oQDIjT)is>*d67Xyv&J-G zcrk!DkOJ5MaBj4KtFA>vix5_=GJusxq&7VWm@d=g8s)x_ENikG%$Z_JqheCLGT z%m@(u;5fHVS=O)gO&7|im1%oFIc9o*2Ug17aHcPNzdYf2Kc3sx0;|;KZYQZ;C7>2y z2DcllM=?0$n}?NspcH6T`El&<3Vgd2)z6~07ROJ7?A)3kO~u3%=j;1sa&l4)%JZ)f z6()|Pk%Wrm1Oy(^Ru9^o-fK6fsg35o6^@1RS~KgRr?)`Ff!mX1x{2c7vd3nnI4-kT z4xLTsVZeo8!XZESVpSya)H{!g(|;s}Z$g>A!VHaE`lTy#8ZwRTZTCs!p}nE-n;x7Z zTT*AD`J>F)MQkv$W`7sfb>A3F+YVg}?+H=^7lA~D34xFAzLfe|34Bn{_E)y`L3}*S zXY4vnKK7{lw5x&$7B4F%JX$<4{E&C%n|15&!ge9oN4Q+ePmM2b&P6NNe5MOJJ^!pW z;y?2rwvnQ?Sk<8?(wm>-97g{}DO4`kdJP!>uJ*~#bPGkmWmU=Vp`xYT?ZwpI22O*^ zKNFIv%poT$&HW=O9MwCMOKqMHY7+cggFknHIOX@)n02Mpsf`|19|3Mf6d_-m5Rsy$ zCcbm4!9Z+-dH&P@Ren0E^3s0Ilr#wy6>OIE=~vfst=7#t(YBja_i#Lp*e_)bz5w6G zK)!`uw_)~@7#X#Clu&w&ML;w{2cb5kjvY2G3?%1#vQOEM#T01sXABUd>5!nvhPcH5 z85HyRJ8Nq+rlXwO5hkaV>2RheN_t%P#S?>6a>2Ay>0s+tAKgM#HGAgSl7J`7&+20P zT$r0D^lzN=zZ--FHjKN&A~Z5EK&61?SnQakU!0s4I^ZEvF~?&_%uMp7qlU5n_uvsx^}^EWT!$;r$A)~>%ndgQtSlyY#W_~77RsQ@vIf}S3+^Rg|>>-j~g zWE}`#i~!URr!X0pOH~;UCwIO&tmQ^~AXZkF_XKK^BStKPBO|qm*Cu!1oghb|nOgHX zov%X@+Ivutfrkjw>VC6&Jm5OAVmCx1naRyjrakj`cag%^ zey)I2J~vdM+l>X(^NllI$w`F6=Z|Ok{`P5o;d1Tg^06>lBFDdsHv@r)!XOh&%4!Ym zL!{vfIS5R*#7zg5SXM$x*@ zf-lM{0}b#UPTj~)-6eS6fND{$=jRn@xw3S~Tcs9pYFWtf>5C#3;x=N76LgErn!KCe zQ;yU|zvqf>E<~&IP0AFxtuQxiNNK~x&zi)<&uVTBAD;bGe|{3B#OvIOJbhbDwIqc(bz1P=>qH;4QuDpU*s_?<4L}tkoYLSlNj4F#3$la*@>$GaJ#<79rKs z{qfHK%WO2`QPTV}71pSroXBHp%>)wLioS3+DMAZkcSC~3b z3)y0RfcHTtHnOdS0ivqe)(Bq;RA#&J19;1Yk&b=7-n^#ZQ!WtL_~>@Wq>9M357FzR zSiq_#!dOvhv;~S@8Oa5%MvkQUeA&aAjC>%h;845rA~1D&88~Q$uF`S;B2CoKXMQ0`s_F_u@RM*1n(2?j=B5%KdoSBIr^b(1}8E9ajh)z!CS51G)KFi9gcCwIzyO-(7$-%MU|LxOjDb1bG>l-spyT^C0R8FU(-$Iz0J+CJ~dYyzX zw;}{?f3h1mvb^r8dV70o%;ykI7NC~t;UhVAlN%OSk4|cuxsQ^rP-MCg1IaWy5dW+kvbIOyve{kDC^I>qXaFnuIbZ&7Hx_}NbFlOv`p1zV zC7;I+8&Rk4+dOxQe<-Hh-PMXqb7bvmtxRR0I3O8G0ckDZ)ssY}AQjhm0E}@BG_K>* zlK|1-FSov&2sSKMJs-QSo#KJav(JIu65VyDXXPpI{M~ga^U7`F_sRVgjjHg}&t=dJkMdCKH<f zER2TK{U4aZ$NT#8s1;wa8E2$ePB7bcI$wZ_z(+@kEQ$tC+K$z=F_Lje1dy30q?T*B z;oGve*&tB-MmKb|nG|n=Vsm2gNMZ$gO0lw!e;&$&#-sg)xbfwY(HPfeiTkpd52)w8 zq5yy%bexuFT$`txEm%z7^*L90K}$grD0((r9}L}1X=nXv`4wwk))Ft1@7cS27bYqu zz1d`5rZfFpcQ|=vzD3f2qJC+_4~h5p!Ax-qcjGxO3v(d#P!gRr90&+jD5=A>i<$su z>j_QA_ikWdV0O|dY*wTj;R*`v8M*w(4-gR{ z-r(|)Rh&=d9Tr&k69^;+maa`!T&Y7Guz46@TW)J#K?8ZA$`C|y47AzqqfaV_cLgFO z04wA2r^M9uGMx$T(6!)GswIyhy#_smk6CN877j@T?f#QDv=PM#o-T^Zj#o!(-A8M0 zWuNz@Z1pGZ8J$`7R3LzDV1y1FU=qTsRkgL*^!(ELJKv-0B;F$7KvQ)%Nro+5zz*0|o!@n({+ySzcE4<*Jd?S>Dea zfN1!Mk1q>wy>gnGBYG)?n+tvrYCks4VtW2j=rm^4vwDkrA1UQ^5yIAbY zqyV}o35g%z`tug^q|)98d~5bR704bZkQrXWO&aR`Gm(SM<2I*Fdv|xo{d76?dX5-% zZ4bnK{7Vx4{mB+|O&Ckq{uW1+jKYn>_%Rqm{aRAzxyrGGZr=W4*R!y+bgL0ln~a7g zA;--jN94vz!)f5|*263F>4wzI%&fFNdajmft1q43P3`me?N`U{zP=rAzUdmewvGD` z<;i*(y4l@w<9%>K$=dj>%0f!Y<>6G=lr%P`vrNVqP`lg8k;yx+9-`HIOrF>-S0D53 z9ipV62}}DTk_kiL^5fkH9Obj)%VDN5o4pL@z8NQD8T9Q_+xp0@X7C;ladVf~)a>>Zl2ENMp~@_@I%#<#?~CH_x#4{zwbGJy!ayr;3LlVPHQv}X zOwJo{-AkXChG=C;wf0`rs7MeYc=_Pzb_LR2TV19<7dINs?4Op&(@kYq&ANwO8%>@% zI?*&5&g_ph{Ic)uKzM(1*uB!;l#ukol#)<9rB4qp6AW`7DT!-f%F!!3{_i{a}!+n%V#bu@Oj*fRReo@;z=KX*f&>k&==!&pxt#471tFui2{evrGd+Bb%#)q-Y(}p5<|50}(MQs^)#{ zsa$&s4_>|x7&Mk94ZtHi@En+*-Sd9JsAd=(KkEFc1&5VFd5W^u>qR3b zosm?QaD1-BF}|1dU%!ZzO4WK_X|@}Q51yYLFR!2=c%wTA&~nDX3S8}LV}RBAOH`|q z8T6qK=gO^dsz=|sfCngC0gtO%V}g?9)nqPnmuCN+@{m{1_)(FT_PY(CemsSzC544 zfM?aMdsnNyz|Rg6<3N4&Cv-Qs}0ZL=nOMzhxt&@@z1 zBH5yalxw&{N=`ansqbEAz4o=et#x2vRPQ3O6zHt?x+qq^bK1o-8chv@-FDm;?7iVJ zGa5-5>nWzye`O2x_L!EkjK=fDtn*XM7XeSAjtuAJ;jlO@{inVWQkT{m>!hK`&DgxT zPa@<%iw2OtWAk}=gb@gJ>O?P88#B3IA2r;cXn36WE(6N#ETatfIh6h0s9|sDN2yxC zaoODO=d-1Kv_4z!eB77uu1dsaF+g!;X>zh_|wsPvpVz^i5poti_4i7Q+wG(@>n`YB&zT5iqUehroqiV zgUfjrs4#5Rx3A3T*z69cxO+tf;O4o&JI;kk)`FKlfq(A4x(e})Z_QvUZ#++FehMz8FTQR!(t~#ge)Q*KBt4u zMpwWxAe25nti9xAXJ2XGEG#U%iY$+tnCr7&A+K_nd0As167OvX=W>_pUPeDq zO%Roni**cMvTBY17%XyfQtnXp15h%4wJZ1ipAFB)KfrGyy1JiU?&sP|1f+oS9iX_i zboPXxl?u?jz6}7}N&CyQ(h~1izg>3T#q|ojuK{{w*%E zQ8OV>PyZUy(DJOF}eg*_TN2b4I6fDFH|q=Xc3j9RU3w!I&fZ2+p;a%z5EbQ)uYKrb$<_3HA`cPA<;sturw zhx9t`<;N_aZ>L}o`Sk5oul@4V_71S}7%DT}9ib|9`#()JpFrAXJo z|7(i_2PshNpQd$7wOJ6iT#NH${9j!G0&}6;KW~7p5)KVbK!t9(npI!+xEN7TP*4d{ z2ZBZzpp-qxD?@_*Iy0scKpTNU=6!rEH8>|97*3=Lrltc*eufjytLUBO0fq&Hrk@~? zzbvJoogL%xQoS)SRg%f{J{O~0NI?Q?sDC%TFZ$LUg&g?+KVF9y9QgOF9^*%h!BltwGY`BRdCcVe@Ksbh ziC2Hdweb*SS1Tf|La}A*H&{S4vHT!I;v!g zZ{rmbTLD0FutNVR3)GZ<*1y2C(qmO!=u*lM_205SudEtV4`) zZ(X*w%@XFwQuZ8iTwrk-)i|2ehlV=IswxV-s!z)e>GJ# zlt-RHhL1_f6xT{ZWX~vl5e2q*P|nx+RfT@`?WAW-`zojRMw6?ag68V?eJa35%eBwV z^?xms?R2Mu0SA+{Oum;Z*pr4QrK;-c5_t%ht&w^_0?s@n*OCH?Veg^dcK11cbrDzbxoz_3w(V!m;d_3C4UhVNFtZQ7U640A&8t#0XKMQW=}1 z?U?~Yh$nZ)nh?v*FWov=w;sIY?JNOH*3BHxd8egX)rs=b1Ty7XB9PJX@xODEGz6`z zq^DrOHtfS`acf4;z5&U3V)ZTDWi4PvV3)z0h}IIVyRjGJ)3)xMg6saMc4xM5m;a0Zm=zXU$!laUW3u#k|pBBR==h6hbjc?tr*BG<>eQy*BsL&cZ|;zvgCKEiEk< zS639g zr*|fxP@X`)yKkhYpF)QbNT<(S7V9kEPJ4L-Md2B4M1^7Vm_eD(S#?Ak{{$+Kl3qtB zqv;&oFduk-wX~#DO=arMn$w}7WBsn$X|LG3@qEo4u&_Fw^iQ*;(rmmmD`RKOXR{|v z*lo^`FV<4bnGDBFsCV)Whe9GEasZAWAD1P-b0+-y6^LTu=?xdkdgOCy$* z(Q;q^A@%jcrFycd?#YrQ28j`Q@oKT|<3t4hgwWPV&tQ*<7EJohdIk4ru!r*=5!~Os z@)4pn1D__9wQpepvTT|yMe@;hmv|q0A(>%o_u$*mu2lR5Jze_`zEKU*_Mgb5N@3;o z6uKh<<7O=JNlDe_)_5BW96O9VJ3B57&68C^l#z(n5GFM^ zqnYi3cH*265pO(AF>u0>zdf!D$Y1*-e|!H43Id&^G^5E@e);e-rII0 zh7{_hr|l`a_h(2toiL}2dl7TLM+c1n!+c>=LgLJbMu_BFVvWR!DX|AB-)jw#$~nI9H7WMTW!9uakSrw8*5XrtaVc>O~mJNKK~60 zaHBZMm|(zdRX;%^gYr*Wza>6$2dyN!7+<=Y5Ce;OiDPAWk&e zD_g0tTncpWTNW}AeV^qCCd7I7uF`(b%ISEu`+_NRH|NEJe~e(|?skd}5JB{(e{Tp1 zI;_uj`X#@NY8bwJ^ipdI=aZ&jxX9geJzc4PZ#tP=zvhXQQ>lRMQ{y_MlUu& z3<;0E#AMpM87S6r3Lf1DL)7W90nuQek%3Y=$v>$TX2($TPAWXn)yoMij`I zSYKb~FHWQZJdfhFVX5)h$)o$|Au}9Y*Q%Bbpb=A1QWEj-2xv|RE?B%GVcB(0*2BZY z#>NKFhc^HoK+TH&8IL>Op2bL905sx*^75!$*(97IA=lJ=zkl>-6sR8|J5kAZ}_PRL+c< zt%F0y(vV-vZ&Zqz80qfE88C#!TwRuBLPK>c9gc|elU#Hbmsi>Y&|7E3&>^CZv6#O(PY3Q^)KBk zBN^CZJQ2dh*$p87`ZZS>&4lo9_)8}@Adhpg0HYmP0F8qQ-<7VuGl=(&jz(TyI=p%F zWC?zHdYpG6v$4Ok0eftU0|7b0R91NeVeEVAUUK zX=!B1hAEoCQT6q)*7?=NmH2FOrl!~g1a6LYAAuPcmpH^^uLZXBXIo;CkqO(`UHoR) zj&nJ{b93k7tTPXQ9wI&nipl`?GYczXgTal_>B0jEbAUeMQivf~uN78Q&;UhvI(Pv< zC8}N9@TF+3bkeLgevXOgvp@0+U)+yrZG|+YkrW0`xNEC63-;5lU&qn0NIObdQkQ*fNOOh9%p(- zz_!9S9GExbWK{@dw4+68vMLJ0=l-N>K>?`i*08b9w!3->PD+xV3I$`hU%b6!K78uQ z+G=_STGq_4Dc;Sq9EsKz%^VIYn*z2*rV#S@y>n+NSuP$eRj~36gC1&62%&|yKJL27 z8aC`Jxnool{|l&2N4FuxIG-E=Bmvx+0J}xl(c1_<{YpV0;)}~d%*KZ4?Cgw(kKdS_ zZh;m(`1^Oy+#Jjc1Yc-q=uHAS5XXx8Soc2S(HUvck z#vKg)P%*be)k#@FZC6%bd}p2zm&5Z;C}GVK6r;H4fa4QR)71 zFHI`86v}#nE`1^E{I>|y+U@y$j9rY3W?q-@TC1Q9{wmITr!Q!qShTwz|6qq_vC0dJ z!vdu6>+52zrNHH3`2uLh7!+P#kGVIRxd(`~y4$}uprD~-^{7A5p3qm?+HybtA%S?^ zqLuJvZoEa6>G9EHp-rEH@1@H3?sPcE)Pxcces}tXB$98>Tmatt;H~iu_}3m|V=jG0 z-m~z5+(4{O_2tW+o*iTRQyq?eVGQ7W-|+)9f9u$5eY9MgmdVp(|J)_ybiCO8=l`MZ zE8Mc&ny*1bL=hBJLIe@%ly0y9N$G9@>FyQCTob&$v zhL7tyULKW)``&x@o|!dk*7Q-L{~jvCn>;<>=W|+r8u6onQR9rgtu2PgbMfxQOP6d} z7p^~h*384pTV#tO**(ra**P)|&3|1}lcf0sDe~~}@Jy|(Nzb$?0C_AvGE#BS;#Yu7 zIwgbxVPVw2R@R=&_I&#E3C%eB-e=L2&t7#xIqEgh3te$Db8}4)5l$^lKZ@TRpv#ZxbPZod|3yFvx^yjdhC33v~+lKM4#Vf#9mQxDWrv_$aGEgec*Y* z+w+k(W%nuBv%4`LteE}SrDOaxx~Z%97Ne~|H{XxAKYg>6fF+~&EfNlzruMz+UAe=x zhs|ilS+n~SM>$8ed1&%9bZksBf%LA)&9MN8!P6xdWzd31cwf)V=${F0SOoo$e;miL zFr1$Jy|1sxd4GT|bgS|EGl7HCj#nk>Bc<5J+q2QS%F;rrn-sdS_vh!Ao~O&)2qLwi z$;-?0Hk8ir5_}j%CCoH?LVkOCcCBl3x{;{2js;Dt%8{CiGm53|)bIP3`|2g8ZSct$ zz1hZ2A!PhNI#rCOXO_QP_*yj#wGj3zot3+Cwy1o5;=iAxR+U7k?HZMy?E1R!V601J z@-)UoR*Hs$9R_4{D`|6>YXqRr4{B z1dBdV4P2-`{BHMacoVuWHJh#J9h8yqurYPcKfX zt|m>)vmH=y;2^mceplUY{qdD|>D~H_OiH3+B^KkF*ruGAUdhw< z*+SBu?`{&A|cg5G=h&;4yrn%-Xj@*Oo{myhM!u)W(~Ue2Q= z^VN)u;#OZ8@zU@m=G4@bzE|QE3C*DlW!Zs92Is;2R$1EDr2h-H7(q`~;6P@1`J05X zcCkt$hA+31Ah00+;GCx>nKg! zT^q+BG&Y_gkS*L@oQ%}*bv;-Wt(y?s+}ylJ$sSR1r_}oN&HRmW_B2^a>h;UxDSURk zf*4|AVsV_;rax~T*c`Un+-BAmP1YVK?#<^WTeqAe+5S~)z|DW~D^KG^ga#Jg%f_Q+ zU%77ALtWa{8eMF0lwqR_q2*nH7Z>D_Fd`#LIeWhA_we#diZl5Oe>^UKQ!i^%hh@Uu zcQw`G)r6JS>E^^t)l9r=LOc=>rNNXEO&vs{I?IRg_8HabH%CIZS^SDz*$3EOn$Z5~ z8ETv>4R?=nw$lE|rmq1nw3VKp=wZ9o+{K&V_Nx-boo%5KHeie0w03H2X^AhJJh=`x zR?^wfOG|PAZzVHs{Jzh3op6XdRVL5skFK_Tv%1rrihZ!-Mefo4HZX>kJF34}L&fvh z1v7^EtGudWQ}u6^L%lvWxRLOQrg{SS{R^gMS;U_|PqDG4q!#A$>3?qg{JFG3Np)81 zey*w_XEc_okhab^&V)>F%CfIXR)Dn6$#I!H%~kMTa4D9}&M)Q3;KT0-outt-Wh^wT zw^ylbcNk^KkJg8BIfY8U%^bYX858KH)=AUqpl)hTE~M*!AvB>q#+Md zIcr1k>%$%z9pF2K^u2mH{)0(?bM4`6mOr-&1fChJlxltKGJ^1e*ZDVV;{B0gxJzB_ zSH3rVY)pV|bniy7P`k6oY>D^ztfyzFI*oYj)&}?Dr%_7tH~ISeQYv=vDpMllyL@+ZvdA#@jD@TCM8LEpf{7el_$567rA7X!V63+@e?83MH;b4;{aAt8u#7JA&q zv!dUo`_HRHe88u4If{}?hKpMuZ|=z1O-1c0Jtg~9a&oKep;+aLQf5u5h0XBUPIpf} zuLNE(_wUbfe>BNiM}=bD{u{j_zZ~*crg=wR`gP0hHL0)R8^vO3bZ0l!q*wY~5Q2Or zc%G`+eWAX8{4H5{uF}`#Qi~SL{q<1vPip-y*2x@b>hd%tJ$($%jf!KzQD`UaS*@79 zpAvoas-)DQ90CTzuTctEsL)E(EAxI+jiB+DY=zcaY+RNTq9>)(_DeS#rhNW5pEvfj zc6ZAW=HF*x2!&{yS(!P)0rgswX_Vmq9y7aQq23#g|E%Idj{P9}I18?QH7nyCEx!_cf%Z zMlg>#D%*Qy&sAWILCnm>#g+c**K}i}nT^HtIrPJ$;}78`*r}-I?O&?KkkJ3;j zs_l>2iHbfidjF{&?f75~vmTBRj~7L3ALV-e@Gv%9BtL>`Bew9yvIppx7-si1u%>_i z_RbIGmeaZq9^xWe-3Gt-5c7>UejJa|`){DAKKy8S)I`dcGoZpA9X-9W;u{e`DOl++ zooNyZFAyl2($LdG$nC_r)zafEz9YZ3j-JJ#D6@*i^&3qz2@lq6`6ih(ziXwezufO6{wPH)lO!|aPaZ?> z5JV-~oy6Z0*dzGXw?xdxbNfQ*hK}cwf<8rk6YmdJrq$N9B$!s*qH^}Rr?{uz~s!3JkEsrPD zC1>83R=*YKT}bG8E5_7eJWMn}668W`K5F+O@gHd8@99dfTJVm9h&r!3WO+`Vmv}>Z~Xk&n5Ws{J=IKlg|-CR}bKo9@^ z-2v*Iih!o{ote_JCJp6$JPU2}z4q@iR6*I0-$qe!4$Ph2d>jy; zQtGy)(+rpT`}e_PKiMBAYO>tA`dLK`n`~T!+kjk!^6Vu(yHS@h#QL{aQHsQLO7YXV zObr>t#R~*pY|j&!5PS1NGp51XzVd$4+D_RR+eQJ-$MovlCz(tC{EV;v{S43XZz_oo z@_a4aaM?UZq>QAJzgv_Y7fn}REu=#d-L!UFzT9~e*TmP1W}?J9Y(&Cq?AW5n8=UKE zC*?gze|ceQVdep)T$41ojW!0_`|KSe)?uN1cfxiQE>l>3J01%>r{@UA*x<}2Xx3?g z#IV9)Q{?_=+5P&_Yl$d-$BH&7b!9R*Hbr27YV6B=f#XF_6Cc1!oO*q3Qk8I&5dv5C zv1>a$shk%=t8N)wXP3$u-Fy{ehQBX!C%yJy=1!L`E82BJ!u0k`duhtlrrGZt7rm7e@BOv%zrQpEKR~DZ$Lf*)w^4X5@;5X6=O~OR;)j95 zp*Txh=yvme7b-d3z93P*}w<7CA z%N2qre5{y=Bhugd!l)-MQ>Hd=e@(dFIN7UtNXPTNGDBSt@?ww2%>R9~r_kal2KHoS z)idF7l5ZxGO3&IJdI6S=Jf!+=YP-o*wcSM z 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 f^PjEcJ^Ozc&@59T-Umur>2A)Q`_KLxlrop9 literal 0 HcmV?d00001 From 6513f54f736b2d298536a4487427d9169f9c8eac Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sun, 19 Nov 2023 10:32:39 +0200 Subject: [PATCH 27/46] changelog --- changelog.d/frontend-management.add | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/frontend-management.add diff --git a/changelog.d/frontend-management.add b/changelog.d/frontend-management.add new file mode 100644 index 000000000..b85cddd96 --- /dev/null +++ b/changelog.d/frontend-management.add @@ -0,0 +1 @@ +[docs] add frontends management documentation From 510a7b64f1354d4313ab565d557f422b7e059432 Mon Sep 17 00:00:00 2001 From: NEETzsche Date: Wed, 15 Nov 2023 00:43:58 -0700 Subject: [PATCH 28/46] Add optional URL value for scrobbles --- changelog.d/scrobble-url.add | 1 + .../operations/pleroma_scrobble_operation.ex | 6 +++++- lib/pleroma/web/common_api/activity_draft.ex | 2 +- lib/pleroma/web/pleroma_api/views/scrobble_view.ex | 1 + .../controllers/scrobble_controller_test.exs | 12 ++++++++---- 5 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 changelog.d/scrobble-url.add diff --git a/changelog.d/scrobble-url.add b/changelog.d/scrobble-url.add new file mode 100644 index 000000000..24bdeed89 --- /dev/null +++ b/changelog.d/scrobble-url.add @@ -0,0 +1 @@ +Adds the capability to add a URL to a scrobble (optional field) diff --git a/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex index ca40da930..68c586b73 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex @@ -59,6 +59,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do album: %Schema{type: :string, description: "The album of the media playing"}, artist: %Schema{type: :string, description: "The artist of the media playing"}, length: %Schema{type: :integer, description: "The length of the media playing"}, + url: %Schema{type: :string, description: "A URL referencing the media playing"}, visibility: %Schema{ allOf: [VisibilityScope], default: "public", @@ -69,7 +70,8 @@ defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do "title" => "Some Title", "artist" => "Some Artist", "album" => "Some Album", - "length" => 180_000 + "length" => 180_000, + "url" => "https://www.last.fm/music/Some+Artist/_/Some+Title" } } end @@ -83,6 +85,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do title: %Schema{type: :string, description: "The title of the media playing"}, album: %Schema{type: :string, description: "The album of the media playing"}, artist: %Schema{type: :string, description: "The artist of the media playing"}, + url: %Schema{type: :string, description: "A URL referencing the media playing"}, length: %Schema{ type: :integer, description: "The length of the media playing", @@ -97,6 +100,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do "artist" => "Some Artist", "album" => "Some Album", "length" => 180_000, + "url" => "https://www.last.fm/music/Some+Artist/_/Some+Title", "created_at" => "2019-09-28T12:40:45.000Z" } } diff --git a/lib/pleroma/web/common_api/activity_draft.ex b/lib/pleroma/web/common_api/activity_draft.ex index ca1329284..00cbacbb4 100644 --- a/lib/pleroma/web/common_api/activity_draft.ex +++ b/lib/pleroma/web/common_api/activity_draft.ex @@ -83,7 +83,7 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do defp listen_object(draft) do object = draft.params - |> Map.take([:album, :artist, :title, :length]) + |> Map.take([:album, :artist, :title, :length, :url]) |> Map.new(fn {key, value} -> {to_string(key), value} end) |> Map.put("type", "Audio") |> Map.put("to", draft.to) diff --git a/lib/pleroma/web/pleroma_api/views/scrobble_view.ex b/lib/pleroma/web/pleroma_api/views/scrobble_view.ex index a5985fb2a..7a983f8b5 100644 --- a/lib/pleroma/web/pleroma_api/views/scrobble_view.ex +++ b/lib/pleroma/web/pleroma_api/views/scrobble_view.ex @@ -27,6 +27,7 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleView do title: object.data["title"] |> HTML.strip_tags(), artist: object.data["artist"] |> HTML.strip_tags(), album: object.data["album"] |> HTML.strip_tags(), + url: object.data["url"], length: object.data["length"] } end diff --git a/test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs index 908ce962d..df12a05ce 100644 --- a/test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs @@ -18,7 +18,8 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleControllerTest do "title" => "lain radio episode 1", "artist" => "lain", "album" => "lain radio", - "length" => "180000" + "length" => "180000", + "url" => "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+1" }) assert %{"title" => "lain radio episode 1"} = json_response_and_validate_schema(conn, 200) @@ -33,21 +34,24 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleControllerTest do CommonAPI.listen(user, %{ title: "lain radio episode 1", artist: "lain", - album: "lain radio" + album: "lain radio", + url: "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+1" }) {:ok, _activity} = CommonAPI.listen(user, %{ title: "lain radio episode 2", artist: "lain", - album: "lain radio" + album: "lain radio", + url: "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+2" }) {:ok, _activity} = CommonAPI.listen(user, %{ title: "lain radio episode 3", artist: "lain", - album: "lain radio" + album: "lain radio", + url: "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+3" }) conn = get(conn, "/api/v1/pleroma/accounts/#{user.id}/scrobbles") From 299c548b124377e51f6c089bc0df31b2989be3ef Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Thu, 23 Nov 2023 16:15:53 -0500 Subject: [PATCH 29/46] Prevent a blurhash failure from breaking all metadata collection --- lib/pleroma/upload/filter/analyze_metadata.ex | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/lib/pleroma/upload/filter/analyze_metadata.ex b/lib/pleroma/upload/filter/analyze_metadata.ex index 99d1ec5bc..92b80b1b1 100644 --- a/lib/pleroma/upload/filter/analyze_metadata.ex +++ b/lib/pleroma/upload/filter/analyze_metadata.ex @@ -83,21 +83,23 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do end defp vips_blurhash(image = %Vix.Vips.Image{}) do - {:ok, resized_image} = Operation.thumbnail_image(image, 100) - {height, width} = {Image.height(resized_image), Image.width(resized_image)} - max = max(height, width) - {x, y} = {max(round(width * 5 / max), 1), max(round(height * 5 / max), 1)} + with {:ok, resized_image} <- Operation.thumbnail_image(image, 100), + {height, width} <- {Image.height(resized_image), Image.width(resized_image)}, + max <- max(height, width), + {x, y} <- {max(round(width * 5 / max), 1), max(round(height * 5 / max), 1)} do + {:ok, rgba} = + if Image.has_alpha?(resized_image) do + Image.to_list(resized_image) + else + Operation.bandjoin_const!(resized_image, [255]) + |> Image.to_list() + end - {:ok, rgba} = - if Image.has_alpha?(resized_image) do - Image.to_list(resized_image) - else - Operation.bandjoin_const!(resized_image, [255]) - |> Image.to_list() - end + rgba = List.flatten(rgba) - rgba = List.flatten(rgba) - - Blurhash.encode(x, y, width, height, rgba) + Blurhash.encode(x, y, width, height, rgba) + else + _ -> nil + end end end From 5a3b81d92ef532769a11d4374424665f6d97a08f Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Mon, 27 Nov 2023 17:55:16 +0400 Subject: [PATCH 30/46] ActivityPub.UtilsTest: Add failing test for strip_report_status_data --- test/pleroma/web/activity_pub/utils_test.exs | 31 ++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/test/pleroma/web/activity_pub/utils_test.exs b/test/pleroma/web/activity_pub/utils_test.exs index 3f93c872b..05bff1e1c 100644 --- a/test/pleroma/web/activity_pub/utils_test.exs +++ b/test/pleroma/web/activity_pub/utils_test.exs @@ -16,6 +16,37 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do require Pleroma.Constants + describe "strip_report_status_data/1" do + test "does not break on issues with the reported activites" do + reporter = insert(:user) + target_account = insert(:user) + {:ok, activity} = CommonAPI.post(target_account, %{status: "foobar"}) + context = Utils.generate_context_id() + content = "foobar" + + res = + Utils.make_flag_data( + %{ + actor: reporter, + context: context, + account: target_account, + statuses: [%{"id" => activity.data["id"]}], + content: content + }, + %{} + ) + + res = + res + |> Map.put("object", res["object"] ++ [nil, 1, 5, "123"]) + + {:ok, activity} = Pleroma.Web.ActivityPub.ActivityPub.insert(res) + + Utils.strip_report_status_data(activity) + |> IO.inspect() + end + end + describe "fetch the latest Follow" do test "fetches the latest Follow activity" do %Activity{data: %{"type" => "Follow"}} = activity = insert(:follow_activity) From 27df2c0ce6c214f36db742af702fc239f80764a7 Mon Sep 17 00:00:00 2001 From: NEETzsche Date: Mon, 27 Nov 2023 03:34:31 -0700 Subject: [PATCH 31/46] Fix #strip_report_status_data --- changelog.d/anonymous-exception-else.fix | 1 + lib/pleroma/web/activity_pub/utils.ex | 1 + 2 files changed, 2 insertions(+) create mode 100644 changelog.d/anonymous-exception-else.fix diff --git a/changelog.d/anonymous-exception-else.fix b/changelog.d/anonymous-exception-else.fix new file mode 100644 index 000000000..38d5d1be5 --- /dev/null +++ b/changelog.d/anonymous-exception-else.fix @@ -0,0 +1 @@ +Fix #strip_report_status_data diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 437220077..073ccd615 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -855,6 +855,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do Enum.map(reported_activities, fn act when is_map(act) -> act["id"] act when is_binary(act) -> act + _other -> nil end) new_data = put_in(activity.data, ["object"], [actor | stripped_activities]) From 4ef56c5b65a4d1e7e90a87f1a1a507df523a4b4b Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Mon, 27 Nov 2023 18:44:11 +0400 Subject: [PATCH 32/46] ActivityPub.Utils: Only treat object ids as valid while stripping --- lib/pleroma/web/activity_pub/utils.ex | 10 ++++++---- test/pleroma/web/activity_pub/utils_test.exs | 10 +++++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 073ccd615..b32f19740 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do alias Ecto.UUID alias Pleroma.Activity alias Pleroma.Config + alias Pleroma.EctoType.ActivityPub.ObjectValidators.ObjectID alias Pleroma.Maps alias Pleroma.Notification alias Pleroma.Object @@ -852,10 +853,11 @@ defmodule Pleroma.Web.ActivityPub.Utils do [actor | reported_activities] = activity.data["object"] stripped_activities = - Enum.map(reported_activities, fn - act when is_map(act) -> act["id"] - act when is_binary(act) -> act - _other -> nil + Enum.reduce(reported_activities, [], fn act, acc -> + case ObjectID.cast(act) do + {:ok, act} -> [act | acc] + _ -> acc + end end) new_data = put_in(activity.data, ["object"], [actor | stripped_activities]) diff --git a/test/pleroma/web/activity_pub/utils_test.exs b/test/pleroma/web/activity_pub/utils_test.exs index 05bff1e1c..9ca21f5d9 100644 --- a/test/pleroma/web/activity_pub/utils_test.exs +++ b/test/pleroma/web/activity_pub/utils_test.exs @@ -23,6 +23,7 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do {:ok, activity} = CommonAPI.post(target_account, %{status: "foobar"}) context = Utils.generate_context_id() content = "foobar" + post_id = activity.data["id"] res = Utils.make_flag_data( @@ -30,7 +31,7 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do actor: reporter, context: context, account: target_account, - statuses: [%{"id" => activity.data["id"]}], + statuses: [%{"id" => post_id}], content: content }, %{} @@ -42,8 +43,11 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do {:ok, activity} = Pleroma.Web.ActivityPub.ActivityPub.insert(res) - Utils.strip_report_status_data(activity) - |> IO.inspect() + [user_id, object | _] = activity.data["object"] + + {:ok, stripped} = Utils.strip_report_status_data(activity) + + assert stripped.data["object"] == [user_id, object["id"]] end end From 03db495e1d88f34bef8d556b0f88806c3260d403 Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Tue, 28 Nov 2023 12:23:41 +0400 Subject: [PATCH 33/46] AnalyzeMetadata: Switch to rinpatch_blurhash --- lib/pleroma/upload/filter/analyze_metadata.ex | 14 +++++++------- mix.exs | 6 ++---- mix.lock | 4 ++-- test/fixtures/png_with_transparency.png | Bin 0 -> 84250 bytes .../upload/filter/analyze_metadata_test.exs | 14 ++++++++++++++ 5 files changed, 25 insertions(+), 13 deletions(-) create mode 100644 test/fixtures/png_with_transparency.png diff --git a/lib/pleroma/upload/filter/analyze_metadata.ex b/lib/pleroma/upload/filter/analyze_metadata.ex index 92b80b1b1..710fd02d2 100644 --- a/lib/pleroma/upload/filter/analyze_metadata.ex +++ b/lib/pleroma/upload/filter/analyze_metadata.ex @@ -87,17 +87,17 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do {height, width} <- {Image.height(resized_image), Image.width(resized_image)}, max <- max(height, width), {x, y} <- {max(round(width * 5 / max), 1), max(round(height * 5 / max), 1)} do - {:ok, rgba} = + {:ok, rgb} = if Image.has_alpha?(resized_image) do - Image.to_list(resized_image) + # remove alpha channel + resized_image + |> Operation.extract_band!(0, n: 3) + |> Image.write_to_binary() else - Operation.bandjoin_const!(resized_image, [255]) - |> Image.to_list() + Image.write_to_binary(resized_image) end - rgba = List.flatten(rgba) - - Blurhash.encode(x, y, width, height, rgba) + Blurhash.encode(rgb, width, height, x, y) else _ -> nil end diff --git a/mix.exs b/mix.exs index 3a31ae3ab..e5e77c0f7 100644 --- a/mix.exs +++ b/mix.exs @@ -142,7 +142,7 @@ defmodule Pleroma.Mixfile do {:gun, "~> 2.0.0-rc.1", override: true}, {:finch, "~> 0.10.0"}, {:jason, "~> 1.2"}, - {:mogrify, "~> 0.9.1"}, + {:mogrify, "~> 0.8.0"}, {:ex_aws, "~> 2.1.6"}, {:ex_aws_s3, "~> 2.0"}, {:sweet_xml, "~> 0.7.2"}, @@ -194,9 +194,7 @@ defmodule Pleroma.Mixfile do {:ecto_psql_extras, "~> 0.6"}, {:vix, "~> 0.25.0"}, {:elixir_make, "~> 0.7.7", override: true}, - {:blurhash, - git: "https://git.pleroma.social/pleroma/elixir-libraries/blurhash.git", - ref: "61cfc428df3f266bdd20f181d188c6f59da34814"}, + {:blurhash, "~> 0.1.0", hex: :rinpatch_blurhash}, ## dev & test {:ex_doc, "~> 0.22", only: :dev, runtime: false}, diff --git a/mix.lock b/mix.lock index 7fa316971..c7d65ffe2 100644 --- a/mix.lock +++ b/mix.lock @@ -4,7 +4,7 @@ "bbcode_pleroma": {:hex, :bbcode_pleroma, "0.2.0", "d36f5bca6e2f62261c45be30fa9b92725c0655ad45c99025cb1c3e28e25803ef", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "19851074419a5fedb4ef49e1f01b30df504bb5dbb6d6adfc135238063bebd1c3"}, "bcrypt_elixir": {:hex, :bcrypt_elixir, "2.3.1", "5114d780459a04f2b4aeef52307de23de961b69e13a5cd98a911e39fda13f420", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "42182d5f46764def15bf9af83739e3bf4ad22661b1c34fc3e88558efced07279"}, "benchee": {:hex, :benchee, "1.1.0", "f3a43817209a92a1fade36ef36b86e1052627fd8934a8b937ac9ab3a76c43062", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}], "hexpm", "7da57d545003165a012b587077f6ba90b89210fd88074ce3c60ce239eb5e6d93"}, - "blurhash": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/blurhash.git", "61cfc428df3f266bdd20f181d188c6f59da34814", [ref: "61cfc428df3f266bdd20f181d188c6f59da34814"]}, + "blurhash": {:hex, :rinpatch_blurhash, "0.1.0", "01a888b0f5f1f382ab52e4396f01831cbe8486ea5828604c90f4dac533d39a4b", [:mix], [{:mogrify, "~> 0.8.0", [hex: :mogrify, repo: "hexpm", optional: true]}], "hexpm", "19911a5dcbb0acb9710169a72f702bce6cb048822b12de566ccd82b2cc42b907"}, "bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"}, "cachex": {:hex, :cachex, "3.6.0", "14a1bfbeee060dd9bec25a5b6f4e4691e3670ebda28c8ba2884b12fe30b36bf8", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "ebf24e373883bc8e0c8d894a63bbe102ae13d918f790121f5cfe6e485cc8e2e2"}, "calendar": {:hex, :calendar, "1.0.0", "f52073a708528482ec33d0a171954ca610fe2bd28f1e871f247dc7f1565fa807", [:mix], [{:tzdata, "~> 0.5.20 or ~> 0.1.201603 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "990e9581920c82912a5ee50e62ff5ef96da6b15949a2ee4734f935fdef0f0a6f"}, @@ -77,7 +77,7 @@ "mint": {:hex, :mint, "1.5.1", "8db5239e56738552d85af398798c80648db0e90f343c8469f6c6d8898944fb6f", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "4a63e1e76a7c3956abd2c72f370a0d0aecddc3976dea5c27eccbecfa5e7d5b1e"}, "mochiweb": {:hex, :mochiweb, "2.18.0", "eb55f1db3e6e960fac4e6db4e2db9ec3602cc9f30b86cd1481d56545c3145d2e", [:rebar3], [], "hexpm"}, "mock": {:hex, :mock, "0.3.8", "7046a306b71db2488ef54395eeb74df0a7f335a7caca4a3d3875d1fc81c884dd", [:mix], [{:meck, "~> 0.9.2", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "7fa82364c97617d79bb7d15571193fc0c4fe5afd0c932cef09426b3ee6fe2022"}, - "mogrify": {:hex, :mogrify, "0.9.3", "238c782f00271dace01369ad35ae2e9dd020feee3443b9299ea5ea6bed559841", [:mix], [], "hexpm", "0189b1e1de27455f2b9ae8cf88239cefd23d38de9276eb5add7159aea51731e6"}, + "mogrify": {:hex, :mogrify, "0.8.0", "3506f3ca3f7b95a155f3b4ef803b5db176f5a0633723e3fe85e0d6399e3b11c8", [:mix], [], "hexpm", "2278d245f07056ea3b586e98801e933695147066fa4cf563f552c1b4f0ff8ad9"}, "mox": {:hex, :mox, "1.0.2", "dc2057289ac478b35760ba74165b4b3f402f68803dd5aecd3bfd19c183815d64", [:mix], [], "hexpm", "f9864921b3aaf763c8741b5b8e6f908f44566f1e427b2630e89e9a73b981fef2"}, "nimble_options": {:hex, :nimble_options, "0.4.0", "c89babbab52221a24b8d1ff9e7d838be70f0d871be823165c94dd3418eea728f", [:mix], [], "hexpm", "e6701c1af326a11eea9634a3b1c62b475339ace9456c1a23ec3bc9a847bca02d"}, "nimble_parsec": {:hex, :nimble_parsec, "0.6.0", "32111b3bf39137144abd7ba1cce0914533b2d16ef35e8abc5ec8be6122944263", [:mix], [], "hexpm", "27eac315a94909d4dc68bc07a4a83e06c8379237c5ea528a9acff4ca1c873c52"}, diff --git a/test/fixtures/png_with_transparency.png b/test/fixtures/png_with_transparency.png new file mode 100644 index 0000000000000000000000000000000000000000..7963149dbeabb5a9da0fe62408aca4578d0d73f1 GIT binary patch literal 84250 zcma%BRZtvVxZGtIcMA>+1PSg0UnFR7cX#`N;I_Dg0Kr`n+})kv8r)riyW8bH-1qx1 zRZ~-^YUb2@Uw5DWIzmZ73LS+Q1pok`%ScP8002Pf|6WK4?@z{J^Gg5#2tY`|{&REjmZP5hrmKZj&b#60(dm1etX+vESaC*9SIxH(o`1u@E z`*ilU=i}l)%ki)%GP~(c2Lrcs-N(hhf8IAU%3F&77BECm1WiiQP>W29L%ST~$8B_( zp1^0%1MU$?o-%E1qGMg`gtmGrBrhQmChsgm8p>gbA{=FDqyKVcunAAbqJXrxqx)(P z4O&s*M6UU2s>69K@kPa39>Uf`zCRY5#iymRgqz+1TBE<7_}jGbxO(|Lp1(du2*u2s zlYW_m?!)bheXU_+bv}UG_^!zh%tCd$>e~&Aq_iT??QQ zE#@G)o+?6uNFZZnS+f<)#){GqWJE&y#t9bTB#>eOzxcWsfd)HlQe6=;6!O^-Dn;9eCflBS9H?nRi!i1=(&h&;T2RG;qVaswsQP(R^`B2Jy4fhr|;Y3N+nDrYE7X=+@f}g?{I~RxE3yN0K8zSwExO43SWyH8G}? zNVqOs$BeZ!f=@g81TYGO6DPt`0T6;M$oh@gKr%sC^6V0cSl67th@diJ)+wT9m)tp$ zfN&%Uw4bjCNMPfweBAG5JsW{EsX9$!M$qalT1Fz7)KS_okNNALK{2Gh$K7-jq=NsM zP3Rl)HN15=ex*|$3H*f`g<3qO?+KJ602nT)aH;J8CY}?M?b`C*`rZAne_h-V=<6Sl zENGpQrCbX-B4ZQ1_7QWDJ{AOg&jEO-L$Ad_WVm=Bju%ej$xeI_1H8zUF5H-ER2~8w zd!R8K9h9s0{0V6j(tY){8)1d%AM%s6XbfP&2L;aO>OlE}#diJ!TMo_`kA0Bk2=Ps& zH0`05i`ygA*TUj1g3itNXoTV^Q7T&aHd7lQZ)T(g{!^j63(ukt@Y#%j7fRmEH==va zX}buWk8xOg*h7`luwUS4@tTgV(p!_vDS_v&;Wrtcln(j;ibGam|A=eS7mF4SgwrI7 zppv!#`8*2r`t<+`FjV8vyR7o8Nj0U3Vdh>CI6Ng{0;EU!d90xaQMZ;!V_yyQJ9N`) zq;qu3o3T3>K=I$Y9>@a&i4m#?8wPOg|VVJrDh4l5Wp2hmv{o>=iJE4y8+1FivNEh)xUcg-!a3LQqJeyQGngY3O(EzLbAUD{kA*!`wJ{nL;xbt6;#HNXKSHZe@3;0tt|rAZTeZU%&3oUpHxYBGYeC1bwcZ{mh8 zmzz?rrt?8>=f&dhXys`osU;;q=(Z~u#{$R_QTe7_{k8HK-uO(O;{N1^uE9(H@*{21 z@%hWJ&Svh{IWrU}P1GD0rHvJS0}XenEp6IKJsy_a9Mk0JopzTIK|P^Y92%G{Krlye zQ(SFKZ%q^#pD#T5@%j@C-I5Aj(;y^A2aP9T{Oqoay|)wv3G>|h1|6%eB(s~u84U|s zfI)C$vhVIive&WFEabqRHh^0+SbtXq6s0ikgt2mc4()+uPv#JML8YM^L>7ZkLDZra zRf}-iw*C%I#ORgQBgVJ$hsxLPFt^f=X;S?t%$&z9vl&wF|8L(=ZxYpbMt2jjeZGBP zq;l0`o3T=_!~W^$S>-^C>T|8RhCIz5WYg1+lSQEN;J-PCLZIfQs-O>l(GF00ByM z^cpwR+$2#*=$pi)*3^$Cp^9@+H~LK*01G@9OrRCKSN~Z&E{Tp2B}#J*i(~T_-k^gC zW@=}M!VH0VS^Hn(nwpQ!d++>D4-h-PP3ZeS3p}aeEI)|ZLJvv?_5UhgYH@OF0DMx-seE6{Ue|#SOFgQ#4QbgZ4Kzb>@U>8H6a* zcb7Ti1k#hUa@h3s0PRsILDHwLfM%;191Bh^&^C_;#Ij;VKb)6X6vQBrvg=sl1ow8# zDvAoHe)^B1t5H`pGP> zwFU*I@zrXSaWu<<%T$t6IUGlF6zvo8CL&3FdU61Nl~d6?ekd?m(V@?kljF1n8{ zD1VE=u~E-~yd>$AVgZ+NU7r;NKAXR)nUR*lljaN`x+`q0Amv|$kZtXhCYMb7Jpf)3a66%1C1xT2^Hg<+DOj(pgV^b0!-o~PK+qUO*_*AAj1D1 zPhD4=gGo{b;7ax>@D8{J@*Q zK36nGjR|yBWNQ9Y=$x5@fpQQY7MjPow@|oJp2dbqR>LVdaHtqu^eI6|Y=}hdr}z!K(?X9d;eS&sB-keth>wXQ#5m_F7$c@!yoRrb z{~HX`#5aPMC^Q|^5Zz?{g_2W@yjYH6*CyCb6{Dn0ES7)_wl{YmkD(;NIl=m^F4B2O zNqDXTMc_O{)KQA4-VP1Ev;tI$@zu{|W{;NG_@KKW#NB#i5SuvjBH0?r_!AA-&#Dzs zL{C`)EZDT`$<7(!@~Z(<|E1W4g-II~(f)R&3XLse9{hxbq6QKhq7Lq8U|D|n(u)#b zq`b`Sa$Q{Mx7oPDfJ_H znmHaiG%QcSvJfR?BpOU4!Ks+|48GNmeC+l9^Oh7Z^CC~rjc=!zw;#*<1-S?%Cyf>| zseO|2+Tq=HpYVY%dU5~;fY*z&>-|<^+fksd-@%*jNa)e}eMj!>h~WpcaN!A13bG1t z44jf~oWa*y^aMqRu544X;5IQp)qxDCV36>$FokG#Sk63%Z(2Qr?biXAY0MDb*E{ueu4mtw7MCQ!{aKjjYNo3!BRS7 z*I#&kCLiv6?@n%Z&`N(jU?^H4x?arV{$NW514DFCn6B=|>`wC;a)?oeQo$17P1PjC z*wWH-WEpue8T)T>WrcJm+mSP}b*vUt^}B0pf$E*ezX~}%`(0d?&l|LFhAw-j&ORR$ zQp6OT){-8k8mFp|4Tp)ANtmxzE-t$c;|DTWUkB78njXQp&w;9Z~xxJ zf{TVtWFjRyUfN4gS~UD*oS}K|G!28WrsC&#>7i2;wdA%HDnrejB8jR$-98BuTT7^V z6FL=$1RJXdo5HX16CF^8j%u(aSY+on7ak-lBA1XJ{lL}yuUeo7!(R=nqaw5uHPYzE zb8p|+{bR@=v0jrZne!BR(yCNg#CS+Ba4{iVfi70w{LnfZJ3o|k(JU4a=oc_0-2^dL z!lvdYqfSjOULD{;im98fKf^8o<{pwr{zDBW-$-p1vt|1!bA5fWy8e3P{kGNVXMD!{ zc7eo2QWsTqBzy%*U;#aMhr3#S0{sKBwY{2G>iS->zHOEZti8S(lIt}es`ubhivhlR z9cVKG_i&9^fEL7E*BKIOIN>2YcG3lb*;)AZAwLRnKi1;-WhX1ljTA@-(y7i9FeZt8 zOMp|@@x$4;LrUoP@t^^=;sp}5WCU*})}uzyBjZY0Vr53=nmDkc!Zg{x{#AkOuQ_82 zq;O_%Q=_iP8ozSVd73Bt04onggZZ-}Gmav$(X2wpkj24pzr;}O{#BCof1&Tfw&f); zHMjV;>QdIt5a%UJ9p}Zu%Wh>2RIOEYtg`&}fNxvrdve3by8KDkW!l9O<5a`ixFA#u zZ?n~zA$|OGT6f)2O21CVE7;!-JbvjA}z&g(SV_xiyJI{0P zmmZ&74O8>cbML6WI+(hQc))KH{kp>v9W+V+O3@h6WAg_b7(Md65FCTCP&Sd$FoT>a zFh%AG%Fx9a0e{3qvUETK-K4Pqg{fG`H<(GN9FVz}iK0q>;tLSmM5KO^(=g<0e!(XR z)pX2Sz8muw3>s&xL=9g5{Y`!2Og>U!v>n2Je`)xl<_t|59rb^4#q~S5S{#De8|p$}abWNr6K}Vrk&JO) zcmYn41SKg->`Wb<>}SFpZhUbMC>tRY609U&NnmPN;*HRAs9mHCuk)jwv+95$hMENBStHMBJOnCYnXvb6qk zB{1K9+>p(DhiQ;ocw2vn%P1yfJW3OKLIdqRZi}OroKmxrr^6x-faBoDYW#5_BM(B! z@jaofPS6!44Qok@{vJgmOP%`Xz!mF94fhdpgd@xG967Bg{WSAaYR~Go z;8bjJP-J4Y3sxXGu#yQX{JytQjA?1nM&Fjo{{jYA|IGYI5#mhVX;Fc6d|8h8!8!~l zouF~xEjXCg5C?82k4p+*sH^84-&OU zo@o0vyMd)615KN+*@E0I9)>-3nYk*7O(O`|0pEx=IC0(E9av$n^KY-~r+U6)V~&hB zwbK_M=1+)$*BP>zc3bTth^X%9Eu&vilv!K2#6E!yZV=V~5G7M$pWgn)|O&b82X8 z8_DoJn}Aa-_dL1tLS{+W@0ARw#I7qJwWi{n)UUTR*#HFN9y>tDWf+>S_b-#Fp3Iq&zc z6kw6NnA1Am#JCU9NAPek*?)ZJE>SM$z8Js%j_f8~=bo3@c|4vp|!0xjPC1NzJ>j#TzIP_qNv|KM^(X)ar&14HAx%w$1oM`ai zvxwb0;~CxBO6qf}j6PWLRUM!?W_B!oPH@;$qF5r5)PbmuKk}9ki*Ci!mCGgfR})vOwJNC;G!}YgD6{${`;30aH~7f}JJ%SM-z7 zb5vO8jO2rKU?K9hlKDNnuc$tV07|f0UJlO7$Ct?D;`UqN3DFOXrnyxvQ zFIm(u58(j2Pii33Zp6m!ljb?D)pA{6L@;{-TN$NXO0y^xN>En!cUm5O&x^qp`{^+9 z`(bOMM#7U1TP#>C5Pg82)=G1SFrb&9^Wi1AZ7W&$rWTjr*drUtHXirMTDmSRDs`IO z0#{Pr3Q%|DBfD6>Jtpn=&5TM2XtwWFMxopA7sgj9&Jk!p;Wx|Mv>@!X>!6TBC3*A> z^{-uEo2gS$|LOWxBK)u^ux(PVSFchOIzNF5F9AK!Q~N+&iW-E{Z0nmYw%w+GLwfs< zzZUN>rKSLlDN=~fpYFkXWME&6d2^;F6O)C=UdNa(lH$L65c>~{37v-1g07Yx-p4n0+ ziJn9YU_smGbD5*jLuiDp|KT>To#$ALf76sm8)&atrg$?#i>4ZYmkw!T41Am{E#k#;@BxK{s$bWT zwb~QLCZ{nlivdSe5?;}OSEb~4={~6x?*vKC2@vH}gE=)yYkvyVFW>zoj(J{>z0Kw- zqPUPE(|Sx^d!%Zt!Ip+angDQRqP~Wec7rZ|>Ty$&`L_S|wwAA3>0L>Ykc6ehb}cB+ zX)?-%Z=s7)9tSJ)SPDeUyYg|^cRne1$X5Lsm?76S6?Ga|)AwM#G>)Q%!T6CnOAhjb zk=Qj-0!Dx%Yf33G`M310tOkqr7nTFiU3n~qf4?59<3lYqU3ZTULw2QZVXg7YFCzTI z*csfxPzmZ!o4M0R|5@3P3p~CFu%vsSG}`F}rO!p1<}tjV3RC8nlk&edRecPLP5e2A z>Fkvda6?hI6l5GEcHez|UNXj8vGO|nb8-9WZi3Wriu?;r?MkcNq$~k|(@A~pRpo8) zKJo0aytMJH5c5se)x)F^!Vp9xd!V0e%N(*;@JCOM@)Ncd1V*)*b7hMkxw@ddl+qp1 zK;G|yyrlz&q%%WNHC?8XR%`ah1*eJ;dxh#Gn{93-XW^uoxpTaf29daZhvWbUWE7;vPriK3l^7 zfUAK;KZZmTedBQm0P!{JwqyKVM?}5%{KVOLv#Egq&VO}CL=+9(4C<+Jx0>EbY&2Nm zY}xt~L3f&-SRQH~sGqp-lLcTiRNMxTe5d5>R@2L2-F1otMgkdUbYm_>Ngh|7iA{=*X28H z84{LX43rJ)-(>AhGJ6vojI+05SzgYVPJ~V6h=uO}V20{00EkgNa5>3D4a`n`+fkUn z>rHO42Z9xt zDX!*D=|t5CC36vk7kYNLLvodYK4gaX3B`XE`~VsC9ZNzV`#w^YD>U-g+k%kdGMoA0 z>t!o#j-5}%-Jg%wR60fJ$Ww#{aH%EXWnexje-`E_aPwu!)FK4K6c`tF^-vSq)!$+TT{8Lxl|&EafXPV z+k{0-y)?MyD;>qbH`H)f?AvPcr7f9jhNsxXc1-R}0W}3TRvFJvpd58iIlyC(?E3lc+d!qm`fY*XeZK75!Vj~gb~)sC zYlk^5#g@ayg4d$2Ow-K6i=tztK`qY3Ow8XRdZdQ-Z(1}eBh!M{QELBbW<2irB~w$szr_@uH6=W>P<+M;}&Bl%lqlz3QSjx zi5~Zn8K!fUqz?*hTZd@6Zjp-_y`5zkJfq!M7Vwuq1)Pty@A-<&AX)&WjkNe);d^EW$^(Uh@e0> zW=Bj|?rw6s^GUtPRhS5OmEEdtghXHT<4?0uDHIoGNoEZz8rjkh%?x<-!NXnbDM%6%jpTm%vC*&>6+sw#71kGv#wf;l9o%FV(OTgCp{YvFfO282S$%} zV@7c$e=}z3q;&aqJH7&tG5;P&YihGYaG|pFAV=edng7cIgpSdkpZq3qD&Pwyp`(CP zMpL*24e7(?;o827N}PxETpINJu=Qa&0bz`>7aZQUW35=jdt(l>bp;y(RCUAa1A+lc z&4O$#_6H5gHxuNGPuDAd+nLQ;hnkG;eg%XMsJ-YuT@%nB|k%`<2P%vXgt$vhdRE;B&H{H#&m*v6<`TTQ9KOeVTro4^_ zj?HDR@`S*AD~~L6`CF?V4{e2=Y&*KTmWMoT7F-a%XurjF&_d=k4;fb@+br`O9E$Dl z2sjD#o%6)+ci-KR4(|0baI*jY>&x8E2Px{z^)xphIu<^U%Nk`qv1|-)nHLx$1tOh; z+u{%tWBuMNc4Ok$wQR8LxbZu@J!r^>eDZcU5$F^fENTzRF};BV=mYt8@|D;^6e zP1~y&rraY;ycT6zUI0LE$@G^Ri{xBx!J#YHunc1V2?1(6v5}Ohxz>RGF^m7^kMGs! z@NI4K=$y_z2(a`6p#*&W5+m@`XxPDUf747Wa&b{PpAB{6PkI)HtLe~@S@`YJb>3av$bRtRI?G?f-bS<5h);o~vkxdXK)3JhjlNX5JK-`i zpZV7y#)SE**(Epn%k7xGW^BP$54?M`NyiH59c}wI*Mk^ILy8ePLm6H|f>A2WJgQI; zb9?i5X|?$fWz_As4O{$x=!FoV57vpWq%rVbNCoUYx4XezmV(^*$%B;o{>Os27Qb;w z3T$}sfOhF=M{M&3Kn=1 zm-ZoV;oJJhAb`#!fRHs!&eAC}9T9+L_;!`;b5mmL@MeUSG`B$Qi8E9r71dlI!7Mu& zsZH_Uw6W&8LS{QaPNazq;j=Q5*YnK3xV~95)~tx`xs#BIT(sZ6n@g>LfJjObi}a_s zY-=q&aLDbmy$ANM??GSKPsBW#KkoQ^*ldr#9SPy;^IEt+Vek%f&J)J!M&^iU>zeW<7-bWpr8)?c&S88i_8iS(mtu-luvk{ybL2LjHn<|$CDv%O$ga<80 zVI%V&8I+r`1KW^Cjv&*}_5Gu@?#$EhvA6fr#BrN>R!sB!m132a+?|)DUtzC))|>;6 ztfR4Lw00ThB3NN{OhS@>@W0avdIGv_-PH8xn$9uCpI10F`PXE~n1SHqyo%dwvo5xt zR4?T9rACaPe5CYbGKDJ|Ppt4x1TYAug+OKKxD6j-?i+Qa0W@uoDl80Ww%F(Gm#s9B z4ZxE2g+~T>8W^7aSt{*s)N|jPiNB+W*(+Fai7>2#-21>8l{~@`zO2q)>)jrf?-~M> zsHnJ1x!z6%#{5O5H~7p*gtCs>f>Hfmb{1j-ZJHyn6+tsWAPDJrK(tzKUdB;w z(DOittJWNE%n!Nfputn=Wxy|Q(G<8R0#SD|^uS%{<}auIJ~{kxu7JYA*al5^dgHm) zA^N`5bTn;L_JCldQffvPigqKZx-;ACMN|#9!-FrVf$z};omuzuaXHy^VQ1SjL^+^F z?CKJn)rml=;D77gJ75@p9fJ?c73{Vw8U>cyJ*!LS?ziJ2!p+tEkeP+0P8FyUMQ<@$ z&vidb9r7pRAZ;u^cDlW$U&4BT&DhPG@ro55XL<<9L0lqDYQSRyPkN=!sO#uv6P{{6 zCTWyzV-TpX8;DD%S)oe+7ycy_R=u4AvgN7YK0=V82=SXoT}`4_U^6S%XWdixeWVg3rqpKdiV$ntX16;4CLiF*pTsL>hPC z>qkic*Jc!nsA`7oq#G1*^^igZ+&$f%W(rl?hQgWZ>JK1tB(Vk6gCaHZj3%GU!)0$p zVW+!}z3T|V)a;G#rypDPQ31@-H}G)V*;GNhzD&sBDj|Z3<5sa z2-VKZ3=A?eRqrnp+-U&BpU72Xza69_yI)D71QHc!L)@=w862EENq~H%uEdzy9XyVW z4m=g{>K!E+n6;{OJdot1`ejw0667SWLi^bSC3*8XOOhN~<7>s-MWaUxw2rF4xZtoD zrZ45%{WS4mN*G&ZW5u5!o>=E%&@wkJ93lHg>#ti=<~ULo$OHTEX8cv3?PJl`h!Kxw zG?i-ASpSi=8Tnkf?iRPNFV3g%FToJH2{L=Hui#<8>!sz~?AF|tld#6*^)v4o#4cl1 z`Z4Z@^X#>CA0$tJ-oMS(QUL_U-jO83x9-lzkhO?eN4!AU!1uV7#V_Ayo1YS#8qyg* zK$p%9?kmFcaR}*8gJCZFU)Lof`~a&|9IXKu=m4|-2Nhuzi^VwE`Im} z8Bc05KOJsaZncuN_uQq>JWZN<8d@U?f=P(Z;STDc(P*=3yUgG4L*#c-xfint z-Lhh`8v!6jHlg+JBbsCqG*Pj?AQQm9t1v6LH61JATwtuUahcS+=SnCMMW^5qjHYT7hG^QK1zs)?`!)4t& z)cX(5^7nEbBm~J3s>jUAxeg#Y>=vm@0dq~=8!=h$GV(^V^DM@{#M18aMhpVcI_K<< zPLg0`UydS?kwLLFNN}()=_M7cK4vy295jV#Y;G{k4wEwQlinB1N}A9y?-TuaPcq!p zj??3tnQmsj&oH-r2ou3QqUe6jH=`jwQ~#l&B*e_q_Mx7h!Q-0G7l|*J46S_6oO1ix zGgy0XLS}D4c4>twOF<|;hf}5YsPt*iCuvWlR%N~l%2B3d=E-3@`ypx|=7;IsUu3;T zC(M%kK^!pi1q<{P0sctz7bX#|S#VYljU2UIn)LY~J4LO$C4fCU@&`j1AqrYdY>g-& z%kV(A^Eq-JZJc8H?)tgf*R^eMX7jyWy#Z0L$(pyv9=ioot;l#fi395UvRQ<$17Ycg zf;^QLIii!}QcZEH-i+dM$%Z!_iXDyaKD$To5ztt_<}s~_n|BPfqCDrEDjwVKQPFV5 zfL(!5a64e@B!Po$W}-&LDsP=<`Dn`6^gj|POR|7RqjwV}4RZ-bZ*+8{HP~Bit24|Y zsKzH3EACYuT5c2#EGHM28RsjPj7i_mDD9Wh62w&Gx-NPaVueL&+(o_cqxBu-^SWb@ z*#I{)L&l^+oZ)1)cfWOP4*tLa@TAE>BVhqX=yj!0S-56NSb0^>kpAc)q_6@Z(v({i zS5X5po}fVCkZ3?G62l8gD6icapU1>L`Oh((U;=Dhp9-K7w6q9BzYl*1id6`!r{9TqmP-|^UD`1~DHO-i#(0}DRzy5VL_ zi~#cWjG6c%R6Cb&y;3zQ5^HXV)eY;UEtq%viH(hF0r;leV)|{#^5|%7yRvJS~Qlt ze7!b7>1pz7Q#AYrPzD)Qv)q1XK; zy3z~uQ+jqyO0f@dwq}9NY>4<__yF?O@E9^-5bv~ zw@cI}*XwMjk;zUYRaf2)K5wCv?1K*veRNehfrl&dYY)4}4-H|i4CWVcotk{hLd}kX z)1AMq+dqZK7iVZetL2+dKO-Q8I3@pmIww{Hv`@@#9{36RI)gPUyouX)lPv749poW? zXb_5>O4ynn$Fvqm(Rg_ZsaHK@AR5t1g36GBr-bduJZbJrKPVtI_`N#?YA#APW=_4c z?8Y+e(saE=gL2+TlkwsHp$nmPIN07xQWmY-6VB-s1t?*5%02zrTW(C?754b{iggW~ zoTHe$xguG=nD)OuUCXyUgZzrk38+YAJNzkDo{uF5Un`%@GVH@L!$$C$`EtgAvW&9Y zZ&qHwVr#q)jZ7FyVdJ&;8!(6R;BZkRck)8n)B*)O@s*;ug%phkHiER48!-uP&$JEceN3;pZnlc&PMa;~hyIQ>#Wyx&Bsd?qJS^!n z?!n-T`~jBWH+PiI+XDao`z|zRx!Wd;84-}i0BjgjbOMd2e+W7RT5EG9whc|Y-yo25 z`n8v8yJ$2L!4*UaItPekrlWZ$S2UXrD86BLT#m3lfk*z(RwE1(tUPY+#{nNFlh*%= zJmhv9HCCed1&>O8YbFa%<$B_@Q({Zhy!I@A^K^U>9V!w9L5wtFubH%4pNH@KAIG~B z)7Pxa+aqs8cjg9I6)rd26{hAMK15jVl0LZxY%r70jkLa~s1L z+=XG&JksZ}^Dmx9%(nbwUV(j>(s|St9dnHrz($Phq5wvHg3Y`9UTjkgzzWqyig~jj%~SXb4gw znzIniEB_<+L~WMD+$@Lud=OXUkb6r#9r2q=}PrfFoz5wAghanPksC8RDd))kSBPd z`OnW0zh~S=bjO8PgNdsWjrz!_Qn~lgglpJvD6Mmnu(^venGS7Zsm;UCD^u2*b+3+t z{%_co{~_$SjJQB<;f*K*jN<>3ujg^w@L{Xu zHU`zW?{nr9-_X(&q0Sk&*5o56b9;0e@FR+>xzC#Giks%z&bOeI4U?3^Vr)A z+&&}tVS4<7!RR35Tx#-08S9{dMR3py=KPC7AFY{ z#CKPt(;HrEF)?rM+M_tEwI52pYGyWz}+G z;Ll?A3N~4^#QUU#`?@uxxjn787EEta z6?focE7?^h7dke=u@F_1Z^u1LPBzGnJx!NMVh=dtkKeUF9O_%_KGt9K9<14{`@L_P zW=MARja*6RPT_=7E<5rF2}MY&c<{3j?1G@IE%#d7^WoQ?x23xvWC; z*DRO9U1KN#5>#c;6-#Yy&KpMClj4?pd&Jf852$e9Y*fH?&g^XNydBD1`%&7kw~uK1 zqFmmJC3_SaF5cJ8eq;Zw3eewIvtDM#xsFRZe_DEV4NtMk{5ld6E~@sRT9w;}Blk@= zyqC_SfmB4EyiYam()OL@gs`3Gr#ZTi2)#74*qW@o?N9qP94|2T9r%iqq{Zab$%ag;csutli@;8a~8s$CPTB#(b=mh(lH2N zVKtnuG3zr(`^n5%!===wP=H9a|MP;F=&jUX&lK-=jvb3Vzr6{f+H%0EVC}uN)@kdf z`MJKa>1Ip7hSs6EL-h=RF#V?G*0UAKYFRQ8mbdOgY;j8eLnX>FEA)z?i=!O<{vJF#amDB zVtzC>Pv76AJPw}gn3Z{z{ud-qM>i|Ra{KMI*DgR9B}_Pm?eb#&cFlP+*c}w^12Gl% zI-Lk4=kjKg#InUR{!-+@<^0#9_%3(Ef7`2*qpJH#kZMW_#PjQT^4Ievk2}4)l=odb z6KPWZsTt+iloLxxI)%G*ZpQk_33U!wQ@t~2UF*WT$^4wLDBMEliRz@51dx}>e8QxS zwv5@~V#DmWo7K3bR;w6fx*>ia@QNlDdnS%#Sc@KOifFCrv)ZctucV`&sP{O-r@L$X z;luFGt?j`b{P1zcT){!!Uh7XHB`8N}G9@j>eSIT#qq>>Gp7shUuj2N8nE5bu3Na|!HQN5O~pK1OS zR~3BoRJ4gDw&t0r!gshR@1XCcI}&xB`jz#O*mUH5*&JHR`Oo5`ycM#s>5~* z9bG;tFN|zkwf!zvOiAX#F3X(XhDXXvnN@kSnDm#0=;>H81o2dM-UreMkn83#8KD4K zLMD6i#ZnR5Cq};y+fCN0aI%Z7GTrj)K`JQI^*C;1#J#!|9^j73nolU{=-66gz)LKw zuW)M2gpzo0id$2=E}yvxwj$yauelJRjjm5#-~&~xkgU+0V#&{H#kU&%Teltcio$;P z5v$(Leu4YUxIPWQNe55vHW%@#*Hz6#|AYtza3OkNhFirC$|@)l$5{y4DqWSy60uOU z>DuSpX%sH>D_dF=8JkTS*ouo~Hv1uwldf|?0=}u){G^+2Zd;@=xWDB;5kJQV$F1A$ ziQk9Z#@X>-^qo~>nG-o?htw$5e~#HV#$k1OzMb4p<$ebm)(T;Vp39nts}ND4ae=On zgG-Us#y1Uyq1i$yKC=hy%ZrmO{_z0X-Z3{Yn_uuL0 z6(hGhEf)8a09PK{CMRq0yPjQV2}Hb$lodzamE#v(DQf{%`e44zEd1!P>#aZEFe?`C z@ni#>x@kdv7Hq+3ptu3iZZA{9AvI$v_;tDS8dud6TLh0|4@|se-U>%mVo61qwm_Nx z89(=DF2R3yuT!o4m1SdDep_o#F|)DkT~~3)!UXRgxzTkmuX@E&ji3jyiOPJA}F?uWDj96XcDsM5fO6bdmY&3rNpK|5`k%QlucBLOkj#;RW4@h zo0|lbhabWBBtD(QHMv9_?WHF*L)%QUzBpYm?gd1(Eq-31EH~%1PBU5i52=96PB75s z-*2Vt;)Ts6-!L&Vg&|a#5=y=#W1cw_4HWMfbd$a=(uOj@H1(vFhHgM3z!kj13X;G- z#kiM1!$C=AO8+8+e6eug_o6lGG94CtaEXKlgrC}vo>cu|>_0N4^T5qYvBJjdYIFx$ zPtEG{90g~~1L_VPSz$DtcWJ{X;_B7xuC;9bbNew&=j?TiQ5v4Pd0AGL)*Xy+a$<@q zy?g!J_Z4Y>D9ObNAlkECHMC@DBuDSaMGYr z;4?lv!KFgBXH%rWu25azr&lMe3;K}iQ}e@E6-$;;IvN*P7>WajhN|{3{e)!nIo_(T z;is*12FG(IiOoWFNwnnG6nn1&!HkjTp_%MKj3@*obha<-+dqT0Jr+Y0jq@CZCu*2o zsR1?!u~Ij=a%y6dGhBqBeo?lXnf=P#Q6OieuT;8E<)m0<=&)F1ohj7Y`lJ#~{r^n1 z3P`+p{I8BM*Zt4KYiz?#+}!rjk%ZF$R*EJhP0sne594I{0*pXO4!X_JQAHFZ>kc`N z?GSSxu_tOG+9I=l1aEV)^xs0C2dO{P(>jN!>Xw3*4kYQk0>5lAef+M+TIA}mOi^In z=KoLCV}HZ&*B18@5yfYzgG*x~=?{G^`!n%aBK{N0=YO7^W0k$X6oXlrY;Os`urq;@ z%GNZ%C)Hu=itkm_41y(8&%0asu4BT;Cl3wz`(kY-Enhwo6e6XC)Clx*U%0r^2GTzm z0e<29%dCUPLQCpW>10U!JfM;0o{}zBb(UC9H-_n$-Q!)s7of{KVf2eN)C?kvbTi1P zCL8l{2RYXM0|Mqg2|0%1yI&CEt%R}_RsHKedLMcSrmwOMEBB5v;D(EP5BA|$>fj&S zqaAJIFm&)OM(5@^A)CUhc<~$YpvYNzK=oTK93ILmQ!*FYk7jTcPvy(_eGJOU{2GXi zSYh4n`pPZ;_I`AaW#t$MY+--58=t5WQb{}b={#cq@^}>BE2(-Fg6uoV*z%GS#DAuh ztcmbO+Hd{fEa^s|kx@^yPngu++SY3~p1mHt+sE^U!hNp$n_{56-B1)l>V>7+(4zlAkPo3{>aPPjuq! zz>-hTg2G?cE7{;u@0M;o+%pwLT5u41a0{dvXmG*gqljgs2F0MkBF(>{jKHlhKZ|-< zl4GMNK>+6d-b>OrG>hA!Et`(R*PC^@si9rsQVdO=(@Z?k+*Q82Xa@BUXe@?&Vb!mM zVTIzOykAalx&B4Y{50?Yzy}v9T$`%D;jyF%nve%@r!~ifbRD8~p+mHgyKFh55}pZ{ zB^8a=M*$c-kI*bw5g4Kf?UN-5!0QbH4}oilHmz*C(n)P*8|B9h|J!X)y$5g{AD*a^ETlPS5#i*v!LjFRfZc0?)m1v2Y@y3dan^Z7sxb!1hgPYTY*J%*)KLA`n zqraA&{H%%stoIJ!_s4z03-7{6+jyQi-b1shW?pp60v$M|CR&6i5 z7x!JIEVS@gi|2{hy0-}z2N7hzzDT^RpzK=qpj>C~jKflBHa8Un6)VW5UL}$mWpnxH z@9FlG%$RKmd~077+g8*t(HFrN5=;A=xO(*&y!G;9xMXxd2h(>FxJRo_U@I zguzgW!lMU9aLtbcU>rv8}p138)$H{IS$YIdP7UGET(8b4 z5D;Y_Dp8QJgkS|yQmevsNe@mfE8Vnlik6ShY5WJB6t{^{5_Zur%mR~zj{H6@ zt~_FD;s{wbKu%9_!U~c%j97ptG-U}NefW)dyuMOfe1j51sbq{ETJ@#CGCy)UFH+`} zf>}{ga^x_n4l7vNYwPCWvP1{s3T_)|c|}&)Ru{Kar%oxN7FnsAqyTr^{!H`I>CUnN z)~$k_w`8fHjFm3qdzKGoWf8OygJpv0ImX@-A+BCmLtiO7tK1U`Yes6ge*I}&zy1tn zTOLl=0yLTg;cF%@0#7??ClYf_AM>>UuiW~$R*2k@gxpujfI0vWbHij1DDFe&Nf_;|>#i z-Yvt6w$txJ1b}`3O8`tZetqz_OC@ocW=IC?%$yz>kfQ?YljfARlPrSt0k!c(J^ zaKtF#h#bcuwFLX*O6->_@no_ZPs&N0QT+fbtnm-wr-n@YP=dZYWdUe;yHWx>YP z0Zu$Ke%mekgi&V%42bDq1;StMzY4#$>vqIm1zxEFQ3~OeE1+@(UJwGM077WBNzeV| zZYtl0&-s<-(P+`MZNT+CN--bz_p?>TGrh+8@T%tN8aP>q@E9%Lw2Y(ew;tZ3Z0G@xOlTQ@Cd1llmw= zSKI-B0H6$1ZveuLP9(>V5{v^ggLvOpZ^pq|pGn3b#gJ1q`1Lx<9Kja~QYuvYLww}* z58$fh|BS};gS&p^Bhw%KZ~wD)KY%IdV=kUob@X+KRoX3C5s#!}2oNLXO6zXE@>>`nx|J}&WhY}^g*?^jo{(OBQ zdO^K61Kx!5ggAFs-#)eszj@Df*gxB!-Ay8)rsfee>nI_HfJBl2+txSnu{*wqiu@OK z=ERwQzv9M|AKtrP9)bqJI?jIDFe-MCoYE<1|XyQQmFrgAAo#cpG8Z;0EY7<3amFPBfHVFGr~n^k&{Pp zop8sv&!nt2^%Ka}kS&q}x83$xs^bEjdvSpZTW!-5;8?<|1cm(q4O%M&r8M(XQUf6; zF=Q*kp2PaMgR3uWX_qR_*k9_rEF{(p&EST0Cy;mncApwR+%jsck~lWki!~#suw~gH zU98b0a)uG}M~K1lv^I*6-Y`|i%F12ZGlS)o8oqvbC1UBB0a>fVs+EAE1Rg1niZM0k zWA#{sHRGqLQa&-cb#rj?ul}z7R3h=eseALF%Z}?l?05PuZ~6AwXMkBT7z}m{!37ja zfFLPK)?&+%=+G4@C0mYmF_N>W$`zH9s;F!ykyA>%sq{x&Dan$peJ!n&DN-WMUEDx| zAa)FZ+2`Bed-wLqAKmBl>HFR{7yvU=e1SLLd*}9Yy8HC6&*{_480ns$zZO&YW&xmF zd%5d>dSvk6UHi*N(xT=FeogxA1^m>!?aucB-a7?F#P0%rGJ)Ki^H@GS#@@R(F*q>6 z+;D_mnFf~(z~VnMLCw;Prjdn1(p6v-xHRSm;o8}e!JTmE&|r3RNFFpJZUU*Vt{ucb z{pz=4otKi=w>OC37xw+SxO;%eT*#eR&dRHMwb_(briS7to3@j-Ge*|c(f}O4L zlMf8dq??E7{O+n}=5URvk4ZDrRJ&o6TjKyTWt!4*yKxO)RD_))t}ao`)o@h_a9BS` z1%X@HMT5A$u?4p+crw9cdyJ2L$>aDz#;IExIA_5xoaQ51;jo(E;S(?7fg@M&_?2C_ zwAlxh1zKi&_2u38_PaliVK1&aAQ?z0ld-TfYZLIRKzRTJ2d22z&w%dX#Y;FkT*pUW zJdBACyHUtFP`?cK)NGGYxE4+0abb0UNA9|Wx_Ft6-a0;YV7Ghfcm8nnBB1kue=Uoo zZx#TG2YB~SJT!R6;l=6<$3@O)9V{677Vu33xrUOd+ggBg(JXeE=Epurdo}RbePRoX zM@Q)GZh#^IQ{Fjd4E2JB+CxoT+oK5iU-N^y^bSy3@atwi6&E=eBeJ1pG7_IzE)4v_ zvv0?rUb+WVg>`;KuLoE4KvfMYg4Y*RDBuE!_f=2^3~Yc+$O6b-O(CO&3Q)p;A4kt7 zr}&Wf@!gIm=yM)kXqu3TJ1d+uk8S!|9s_<^{@r}D0U*Wg{?>3dzggfNx3D?q;Hm;t zI`Ftb(XZf2g6r1^XSgw3RfLS%792c+_^Zb~&fMPOmOc3#VDi|q(r;Z{$J=kafETys zaCUPMEi=|P3+(N!;(^1@=v;D=KQpLmC9H=Z#opN3HV=j)kE2VMFqxG2{Du8!z1q}p zWdR;HpwS4fU|iZB;K3tTaA?kFO=AJUUf*Ns=r&ePZlhXm;VRbM zTe=@aej6<<`{;X`5s$Rv=W!^#gXl&k4HC@_dANuUi6*A5tPL}>Zyd~H;ZHQdJg$!4 z*lv6H@h^TiwrDkphnTJK)nLocu-ZK9QIUm1OZnrkMY?j81KBl!P1;P zamvs9zS!HsJ5Ica;n3p~&+Wrx+~V2u3;4FXK96Bhoyojq?1AOt)ejPwjIG}XkjcridggMEo#v`Y$0R9>Ddw%bO_tjg!_S;)u+1kc7 z{+dkTn*o3Y;(Z-=?=22}-~EI4E|l(|?)LD>)NMN;=UWQepwe9M_L`+H>nMDR0LkKxLRpxwJ-jX|=$^ z_l(i2lI18zT3L`H^5~Tf?mKV+hj(q_OD`_snF~Yg>0iZzN1n-Kh;m^yG!OVIK(QM{ z<#Zlk)Wrl39(WFqT{wsr))(RB_ATc?C4rhTFdk#v65ew10+t4=0ADHg?RQ5v*Z6aP z{?YM8go~9dx_(`ro2daVz42gm`2BYd9vwKhS3yiXxs3rmadb3Ytxq&XrzY`mslmz} zTj=j=;Hs#TSVw|U=dBh7AP(Y;o#yhA6XZJP1~qQfOpJD?&JCkYsV)@luJB%*8!?M+ zIEBW}aafSJA^hrO4*&Nv@5Qt2!Em@izaQrPz`=C7Rz&2voeyINv*h#^C@US6xdXK4tz6Ibg*d8M$8 z%nnvCnxo+%=Q(P`1_%kHhf|P4xFE?9zV;GfdC=g&+X7}J$A|z^o6#J3oZfc@C-<)6 zV^1#Og^P1|nB*c+)F+R90eIbm!B!U$X(gzDGvcruQ28dWjD{kvbrCtf;?i`zpf zOjvtZ5DIFry#?HR=n{_aUj?=2L9U%Ub+W8~?KihSb9Ify6#lv{i@6y9D0lU)yzNkR z{5x(NyxTD?iRZR$oYDS_xf=no^#tEKaO>jV0DM*7WA}+oEF9m0>-jh*7CzI!B%ZBl zu$rRn0BSQqa)-Dfc*o&EMzDc=v^D%iJb);l!ho35_TCZOQBp~PPhUNbfAjo%(AIPD zh^s-^@ljQ9MFF@7fEr0m`_6%zF!PF>1rL7(7&`eUv)9n5!>7~>BTHNBg$>!%LkCCF zATbNAXFS#stijb1HNI#WEIBWJH%?A8tQ!85Z-ctsddiMk%+ixVf|9(+Dcw;{yl4E? zQx1n##<=s=G14XIX&-M+3mW2)UF&%G)H!_Uu|24;h5K%OJ`GS1nU&ok9hzSc%ck6N zNDmwwBSs@!>aF2{Jul!RFPy~sqz5qIW!+obpdB|D6caph_c^d%1MvnH7U|&W6Xp3| z{MD@|5ga08d>ysGS9=ro^`_|nxW(EH3(&kcI@-9tvu%Q-BhW~H2j_=Vx{vqF40lbi z=dN}1_l=?Jb~&ztlDV>&xm>+S(y>`IJP|_9X*RA67klc=^w`AZ*m>n-3eVpU-0JRME@!G?9 z%B62PI-M9C-^+;~-ZRjK_}-^?a!n`4zv0Bpc!^FtB9A4H_?J1x0XzXDKZ6#u!rKpS<9~kN z6L@j`7I;r8SA=wmkI0{bF#v)GkG}@;mqB6iE{NNZ2R9%N8#`{>brv5u^Fb_@+p!D| zjVsW&3Z4j`d~zkEUG5j4oqy+}{qH(^`=I#iLtry>#Vhx*02t(@HZYOj^PhX&o&Q1_VQT z*66b;1!*$&cS^cz%BJN77HC<*C$5uuYcw#?aMIdB?3mtqGsI6n{kO2@mQf6bdeRG( zvIC}2ezP^W=FBzZJL25g0a)I7m2; zQ!6i_ZAyIV++lcjaiDC0$ru~!9^ZB5N%RLE{nu~LPbvW+6C=>V@Al1Jl+U*pCX=Y(Aiy^avI#(3KQRgoRdfs02E64Zo zZ^xe0f4e9IL=7gPq^74laLPM&K1t8!E$dk_S~pGo4y}6&cX?c69RSw|m+CWxH}ol_ zW~33qgaNd@b;<{b2WxnI?X1JfaEvo2Hql)i9qO+&v@|a`H$a#wX|IN@bLL6+QzOZa z&I@iKoV2tAz1Yd-8)>I^y@>TuAD=&eODF=j;PC_)kMO|Zb2z?#70e@m*8m3g?{#}F zocEvm(>!?>IDmJQx zAv8`-1DMU$pa?w7GQkZ9Sg|Z+P*5=G*~Zp9goYHi!;3s}5)7+mA~X|@Be=!Csh_f* zCX>@lpU7y8rgiwl$KrkrROj73z*di0$R{N1bCUsD+5Fm?q zQ!2J^Ytc>TW{8QEC7I=&bJ+co06l4<$uVTZPibpru*$K9Q=4cW9Y(U>3DTy+m-zxQ7a--fV-c8Fj}-t^~2Yk-8X1ZDxit{=L4?u`cr<^AH!NZ=P89UZSP5wLV< z8@o?!fNGyqe@zl zS<+1pN#D3S9^hx6{$^aL_oL_!!+zg*yPK?Z)$kE%Qa4SSrfobe?-X@b$OIPM?w|PV zc7FrHSv>n~8cgg`p$x1$DNp6eG&8+CY@#HM5J)kU5owI%$@N0#HYm2EVEyN(ebfiZcAi5Oh%0nOhMyu6&` zG;@M*s1>F8OQ7Zg)CnSv5rjq0gy1AOwdXl};K4t^uxbETz*C9K>ovAUE~Mv{bZV)t zY0r=T;M_MZ%#+muZ>mG&W}3idpJ?baFRuZ=Ms|J>T*26X`v&H2*^bBc#7-lR5u$9I zje^wG1=6K0Q5eOfwZYIab4ilyq{o!fv$>e`)bs^%n)G|0c$JY~(&GqniRTzMUJxZ- zT4oM=s5#Mwt7DwO^YJ>%VE%>^UQ(yZ>OsFF2MIr;Bl~VVjviFgA!nsw;w7N#=C73! zK0Y?U6xhu8cnd(1_EhB~fo_KfzeBn(<+fJj6ez=#z00dd+S}ZzH=UjV@_OLRA(ZHZ zbPr|9hk!7}5pVY^`a=}`0l4hp=Rdd~UwXC&AUQ<7i&hA5?+`F|KrJA- zqSo{(WGf!ogPZ4qCa9)x%s1u*1VDV`_+R0B@BIks5rR@U}4(epbA>-%JGu&g}x-?4_?zL8eAn6eghR3SGb zW*87{$4RDWdKlz=GLMDEQKdJ6OfkL{cFn^)8dvy;EGU00^Mhi&Mw)_~vY{Fv830Hl zaC|)CH31AVxY1r_ymRt-%oitelkC9!7r4@Iz}9La2QPt*cbY#(l+7?F zya{g30^EdyT)lu_Fj+)vuiY4b|A7zU(W8$8MTymM4_jl3`IcZBXdZQ+j{T26Hvd+H zxxhYdvKDw#P2hrQ*tX*3b!o{<{99CveRr&*UKs;Oo9q*!%yM|Vg406QGG%dtlnJmf zNNrTr$b<%?xd~u))6?lf>$I2_6vX^8nkc0(G#0>{;RKPnBI!V$^(e9NhQkBnCvaQ) zBFHS3O?`=SB`0>`^x>(G?d((G(1{asnNBbL7C=dHcgk1N%4xI0&U_Edpv?ePSYBbu zo8rQJC#B_KwJgYgYZzEQ^E_bVcgvLVH(l>gnU0rOl@+M&q38{OdVmi-whMpsnPntY zXXN(~&2o&$I|Am907WnLDO+M{8z;DIDAf95Ziy6Is`t=q*@X#OQnx)bSx^aMf>d;O?uaSH^;Mka>sj ze{%g#IU_)3tyUC_>)GKER=&bsji~8`q#!1*;-Pl(9rA!o5SuwZvNXzRg1xQR)H8>N zXpU?&D4~H=6XZ>TABC#`zWefTV~9~miO2w-Jv394zwX>$`U+;#9c;&lozi=$ja>0! z(INz3qIo3*aNt?ur0k>xRiR343KLNHv;bj&-GHl&mZsoz!3JlVq3@)h_>+@tYX%t3WXx=HWfF5hBMC*fG*gG7xz_LF8^#=Hv-#&t;U#>xvPMuGV zkpz0lX<=x^5WILe>>ZC*iA=o&Yl~vv5E*ZP_AG!Vn6z<$w0MUJEf_6`8yw&B0)G0N zeg|afb(UV?;7d@#(xkI|GkDQ$n369f0$#*P0?)*Uv_RbUV7YOmtO-T^#0JTcuOoZ{~E&^6vo zzkj9B*PjRN@TN<7z5LG#&ojPXZ`^Cei-yIH`RT*y?d&Bq*UM0vI^j4Ed+7?J=O%dD zotNQU^va@z_0r1X=-gStkye4J1x+?o=7WEPRi0D17=#8yeSoTHuf+7CrkU1QG7cu zD{{Nj8Ghj;m;I;LQ7<=12#r)t(J~m5cO9B(loZI)X2fNM-b54I*8s0Y-_-0$r0s%d z8L@SAqyU1NG$fqOE}vYsBVjWBr+1NzS4(W25A%LCPjG7cYxvOe+p+0}ojThIV7OC1 zv_p7HyI%R@>GqhB_O(F7{=HTjv%_7RCo;5a#oj60wLtT=3=ccUF*2IbOw6blsH}R1 zZ(BU^e2sUUzKDIxTSz-W>~fd@PIhikX#lA1gWC;IJBeL@GuaHB2(1NS3>3=&`~>i# znHE4YPBanYjsxegYiFvDh!|*Tb|6uafxT(xjJ4S@B4sCM2#P(_lSxh|VH*je3GCntV54K$Y zRW;hRVc?a+&VtX^rYBw-Vz0&LwIKY}JyO%Joaaulujjd*ve@6R9M9|!X~WsoKS+yJf*LJcw4)vS)-Cua;g z=iw+$N(evXgHt7`&&6$r%Paryzu$bUX|aK@F7SqLkGoj_7#2d`w(>0%Xwiq$BC-Fr zwnefv001BWNkl({utF!cH$ZTfiySmRltuCE+3%bg6B>^Fsw9Zd*Kaw#3`+xQJW#Y=oS2y-mIty1R2k=LB655MmrnVPU}x>Uk4+ z5XI{<&Dx%jUgS^q49gZL?MwjxfkYb&$bI_LlTSYJRC@_w58e$wD(mI~;PGAGQj%K$ zfW5~yFn@SU!7QB%O8R|D#A0Pt@_x;R~Sc%9Lx zOXvoSgF1EI@2EN2gYpg+Mxj3%%6d~a> z7pl_H1(*y_%=${OdeSux zdg)ULpkt@56%2EM7q1X*-@l4GZoQI$n}APFGh5`;SpuLaK$EQipwgOJHO4VQ9FE9x zb5V9<9;Q0-d}AI0jJyrziOM~Ia_^G6{Ifr|@fkqP;2Y`;xzPYvB4~h10Cs=h(cSOe zvuCon_w-u0sE90#prci#P6SvXpMEkQ2no#+BdrT}WN1bLXUC2ITE~d(c#!f;_raNt z5fX!vW`{Fno2I3`m<$HS4r^z7$_dG6YEBQ{?XTb)wm*q)7=IE++ZV9gU&bz6#u8T1 zr)?BywP+r0hQ^VMGlFTCSZ^ZywnhvLWa(M0W+%y&PA;IrnntSOOzY8{@-zgyy5;Fw z3Av_~kU3Aaqn;@jK+>En=Xt&8!8Ha56zIDAf%Uosl_$1ZQsScPHJ+~1SRT(9k6JwW zLWS>n=hNWseqAK+%a78s+M$o4iT!rR6?{q%@@|u67vAZ!Ir^j zK#*l|p)Ps@TK?ld+WwDcU-nlKJi<40fAEc7U*lq$}VG@)CcGD2mp(Tt{&21_i17dSX=gPuShsHh%Wio-Gf|}0>CZUx)ckm8p;1(BM zYs#T6bS_Y^H+BR$pUrQlND8XV3QnQ!f);n%=oy@BpF&erXzDUtR8tl3WxTYeCU8mE zu6mdhHGJVPDJrz3LsOKPP>Hdt(NKvIYK&cp^|p@-oAWrgF^8+$b9mwE5-x2oVp8FR(?2$HPk1ifEoHq7>1Z0tXdu; zQ%NlpN*pauAj+jp8TgrjHLUG34IB%sP6Csi=4Q@Z3?k^0AV}M0wmE6}^>GEbsKU`` zbst}Tc{l#xQ~UAF55Axd500Q?ogm^MNxMimg{z0)dIK1bI;$P>dLb~_Uj?X+muW>> zAORZ;$WRWB3La*zEp>+?h0B<4e@aWcqPvNFUDc7L`&e8Dhd&)B_OY|QvUuD@E zcf*_^H_`-_gHZRr|HRUr|L76^;lz zfM1GxEeDE(^NB{e1{iXk;qU;aX*A1OVubx#apUXJ;q;lPih(p+=3paVI_>#iy1JPJG5>%=wBUxbyPw^L^E(`IZt~kiGtZ7L;|80-Hwpk{?r&jluQ>Rx-ZTHb$B%BGk-7=smjhwwtYM^1juEXI z?FZ8JB`z62oT3@oxh^LN+4PdxnL9kXaT9+tofb&Wkwi14d#$@jNaY7xmnw|c(#_V& zAEn;{ZWO`I5i9t)BD_NcLj4fH=JL4innab?B+CH^V>x;QkCV4GC;>e6YzZ(hKRSoC zxm$2${@81gtN&j-vvBJ_i-&=BYa8vxCMH`WtgU(c&4->xQFQMP5r;?6_$&zKJ4P7f z9B48IyiCg&#|@BZ@F0``m8LHw%P8~(>A#$4JVw}Al0dbp{QPIXy7HNifAr#W0M>B> zy}>tPFR+-teE^I9_@TLn?zw&ZFkBAMX(43zB?Cft#5YrNxmq8?ci&qJ!72xK13M5J zlsl1S(|XFROWPr?50kgnA|c7w@I^2zKqmGnOHX%#NWKCtl$Te`YG%Ms5-X$}7-no` z+6oc{%aeX*h92t6ErZMjLueS>0@M(=0k~nH1-JpI0eAxNB!+83xL%L(u6J$Wwj+(U z_r5D%Of0^RPu`|kv!!xoe{I}un4R+I)*aH`@tJwe`tXeRSz~t6o0Zm1>F>mg$x|wb z0FVRq`(W?z@h{BdQ;#hm9g&s5&n}RjK1$0c`6~)wI0%Zb$gboSQVcXV1Y8Y7S=YtT zk_UY77^mZaLR>0f=Wv-BMd95$AKCv+Aa}!0h`CV!SOb{9by)2C?l-x=Ti3iyGk{0t zZbLhT#v-|0EDIL`Nf_y@-BCEB*>E%~Tu$sRH%NJ;%AblWaz#=W4%&JwlgtfD`phO= zOvldWfenpPz9AX$6xz552cyaih}L7y-_%?YoA743C-H}1vBb2g1<+8SO&C03&;()J zoh0z1aiom_ieN|$0MB^SnGvcoWIotF59h}U^3vA&z55@}pvTUgz2|OPfE+5&O%oax zdD@+PlFZt0NH@@N7IHQ(M#fdH6{AerHvCi_UG^UTu>e8k`l6!q{S*Yv^7zRgNq`6(-xxa~^(fJ5;CJ%AC_%%m{Q!%M5fhgNB#|*|=ilQlileT8y02Ot>g)DV&_Ff;7^}{2mMqvipJ~Ipv|L zO~o~%sii5H#Q{Xpm3b}$ZerF$4!5)wndJe!mJ;!LOcE`y1rW7AYA9%Y5eNfVQqUkL z9KuZ)G$9f>$KWO$b5E`S ziW7?Uu6i4TpM8keiguJpuP*)U7wPN-IB-cbV6*>1JIk} z18;iEfd>(=Mzp}!{k&cP6w`P4zq!A6>fLv`?^b<@0hT2lNO%~QXCx2+LcIvU5R=x4 zEH|-Qo?wAp3Ba+ktd19)O_Z$;;21F9Rls>3*9vFK1_s!N#uEOCDS!s2wNVz-;$W%Z z44E{BEPXLFoeSiYhiaZ_4lzj{X9GyCMQXtkNU)6=^JRcM1#PZj1AI}#8#55i;Xq>r zM5Q$ZZWt@49>)B>TjSLv3~t-$v-Nz^_R~S8$WbJ|Q%$ z)HJ=+j}a=HMwYMTnT=(`S{{nW^`~@%E@7bg3Qe@0yzC(yDbG3I#L55RbXQWvsw!4cL6I2$B{wi$Kh?;xL=~v;2ilM=b?FYoYUj z0(#W2&IeMHJ{-^Mp#Ci=PQ4%1+yaOgEgYJL!4;#^W*kXbiU30BBoTP-1=0ojfv{@|D+va&JH`ADlbom!ueQ zu0Xl6jA~^W#ljr^=rgxsYtumhnIjldEQ5j(hj}^;rvM%jrhXj(iq)diWm#Ylp99<} zQ19&~y}(?)69h3|j_IkYq3QLjF^(MEIJNkO?>vU21-@=G`1K@EMn)EY?2Yxw(+B9= zBt4dzH_whV22|zc^fO-u5dTCK--3W`XmsSjW|V{&ip+N2Q8G$2o~Cgp9HfJ!`%taC zQ->F6+^o-Wnm0-58JcuLPH|J;G`%?M(9o1p`5}X?KIDa$6k0TP_8c7^96=Bf2%&R* z96uSY+y%b-2Z4G8{b3Iv!kSyeqy^yR#NbqR`C;5(oklc(V;fl;-!{C&H+G~HcnUae zTvL@i7H-f-xv~piT|JD?J-r)2(nMQLgHzD#Sxj} zWl}Kq+F+f3j*t4RzJlU>@{t{SjT9qAysjxTeU(@$2zd82bmOFC*E%L0=9n}6q~1-A{_ zjVGUD(d4MDExIw$U4W2Xrx8Qb+3*5(Fe(n(7a{2`%2Zex}SQ`FlfV-W2D*WV1ZzX;~W^qC+B(#&D~DQWuzTI!?s-|`fCb^n3E z@rMp=KK^It5HKh%9DHrhYX!hEX1@6Td#aNschftGLKh?>Mk0KA2q;;a09QgTI}a8U z(BEmDQFoUHnY2uDm_f_p3XJVUg94N`#13&~0WzC#B9Lsu#Xw9jr)fx4aUM5<)pUAd zpW6-`!HtqB64E5qT$8dv$hEMj39=nL(x@w&?p32T`6_@iK>a!3zP}IN_vXlRi)J!G z>nglh9tN1<*~9s`0-IqFJrzS_VTzW4Q7TGKHX}urj-Y+cw2s4e(468WeP{1M&SA2# z3BR^xMqUQ{27Y5h^Jd?|^?PVn*DxN9;Cel{eji1@2fNSPKJC^v;!R;_*VchHdHCc6ra~ zQ+WK(9!Jmu<+SM6^t=`TbTQ-kqf4~!AHKEzyN<9N$}q#>0aL!HZKx)srl`?+$aF4A zFY6BiLWbfgEb8s{n}ii9F6>BeKyAl7qCm$4?RHUhT15UsSv(LmK}{iUQVnH}v^I{= zYygE#I7^dy$VwM0(OFHJa-lN4o`C4Ik+`hKIEjX;PAIJ_%9Hf0*(P9QVC5+IP2UIF z`vB}d)A4v4&lbnA=9WVOo^_F|LTLvHy6tUBJN>*;+)h7(tr8O;O()RQ5-OWVyS5JM z_4M3GbBRfmGhLemzrBreejel;crpnl@%koseu!dW0e&(G;hh7OrQX5OtZjfNlO(s} z(GGP$02=Vb!#53zvY1_7094ngb}ggr*Jv(Z0Zm5u{4*!Ts+5Hhxa@yL_%&2Un5Sq=?wP^A8?=s{Z2P zH@@vE@aF(7A(_FiNeg@}0H}+efASmZ2X@cV8zOH8a9DvZ6eI+Y-3>BO>rRmPUQ8k} z{uG3yVMQa0k7!W3xjmy{I-C+DJ)W9s3<@}P!lg2V^rF*%X7Hk;X96vv8R?mIe^TPC zY}BEdxMJFBhYyvhf|Um9q`q{gz5-}-Y6}4aFy#0zCF|}LNjGv_&w*~a7kKb{fw=?F zNo`{AWQ6T8@VGmTw&;Z|M=`F5YF7`M1$4Z_ccc4SC2hyJ87-FCix<}sn$1n1X;I7# z;mUG~7vHw<;|Zu~K>dDbU*AdB=IGmSl5$zXkH;~PN3*^OhJ)YQ1h)-{98i}ihI8S9 zqh5`6GRdY~W|t@aDhqJihQS51>rd*Z=nsJvfZH+rcpHE4se}0bTd&48mytlcv~s71 zfMApZGZ(45lN^E;*ra*A&~FLg7eRD5ge%Sfnyp69D0NQnb%ino-`K?94yAtw6zU5z|KG;##lrPXMkmxr`!D9<% zOHr~kOcJqCAPuuqI7>6ROa9ipOmS0T($-Z{(9k(N@(PkNr;*M7nS2G*viZNM^wOLa zlLwUs&0xbtfs%Xql6o_(7)GkjwZ!_>=?cwHha&|G9xQ>5y$O8Vqrkp{cXqt7 zj>pFb@oae_>Z4~QsG=}T<(Qa=Ca~1%& zMYFbQgrEg)x8Ttv2rSF}x>DRUPC7D-g$bMR0wA{ z6vW{%r3rRuBHNJ8%BezZGb$)VnlV8&UsIV@Z~)}@j<5-r@z*IwM5yE#>3~VpO2w45 zW_ALUptel`p03wR!Y%2u=WGJl&Nr5o*Mw%xH@v5yJpn0z2slVYvme zvjzYTo2mo9F zC@8ELuyrwd4m8)sK0x5&QK0x$P8#O*jOj3dX+;e|YWn*ZZYTmxQHP7tFJN_s^l z2T2MqQjs2VT1%>25$ecuZvfhVD`?j)U~w5dsKYT=t^pMUpaqu|sOp1Y=@w$pru8S5|R$V*oc-gNjn;Dq~-a-_6JsUviWcCt#*w0T)p* zI2;MizK^m&NSYpN9fkzj(HQNZr%^}|wzvI0{9q9XDqB@}SW56-lJCwvky&Ry8TfB&za#eaHy3^$kq zReexVA#8G&#!2lee-l&(z-m+Jw0n4XGbD7nPON81$7;*#VSq3W4+S9up_F%e8BKLG2a@wZ zXe^y4jg%VBFrUI9ldX(~gdek=8)>_t0$xa~^P^x(-6zeGP1)GclEXv5@x^o7_{pDp z7Ju}a4NyGes&S`h1B^D?%Bm%5svX1QJuRF=WZ zT82B7!!-iYkq~bO%m!Ts{MJ^g+@es~B>+^#bi8_YvbM+?R0tW}gzc0w6)TP0i7z{v z%kMl1Gm{8z+W_{%0jR11kQWZ0cU+SOXOo<9J|Kp;e#**1>9K$D65ts9TkksqavuSEIVt*8Yk}7b zfa3X`|A8~riGvIDu+@TW#|3O7bTqPDv~n7E<4!*_ogf0dWW$-)Z| z51=@B0&X}2`n8Sqp16E zy*^x7g(V)d4nv)Z1RV*umOvm41ew}=jfmt5P%j*V$=-vC0yL=Mx3=P9VV`jYAgPp& z;Ho;yHtYvB*VWo=r&#EOu~jgOmVM>f>3N3V+z5P8m-8g(JQ~4oZ-K`nxcPZdSpcrU zb60lZ{H1y9-E}3?>XS1f(i8-Z69mwCY5_|w2{bWI7#}r2=T&0_0IuE*qCW+5V-%lU z{-J5-gVM3(3jt(%%lGvT-Lq%(!spK7HF|@u2LM(3+daVY_dZa4Q&nKuc5D$o8QBv^ z<+D6W;~6w1*rhKCT$95i3A$8^(HGM0kVH}-%<|1~*YJ{nETd7EmbgyfVE}Iy2%3g8 zZUF7O*1QkGB_L=_gqZGNvBBEKI&r~(>km;JxeL|NyWj?M;p9_<5nF)HYL*!xU16i`;S100!lNsf(|{I%PWoU*180YKr|BKTrK51F5Ey9JKz;)p?*`^rHll;z z>ONrnDKp?ES!St0bwH+?JF;>Sel&vX4fYI9yyN8Ph0i^K*SIb2dI7KoFnj=%Kx@C_ z!Q#L@``kAWh1))@38-@d7LcOMXS7TdIyADh_(rro0X+kP$!TH2WuRoWo{m-}jc9;T z)0>rtIaWP)mKaerAUNg7khxLt3}=Y|PscH$v^2P@CwRUEE*itJH;3}Bhv9Y|0IJG# zl?V);l~<+7h@Lr(a}czb0d?<;ef;S){PSOa7QgWqm*J@hCU4yb)dNu31Bx0D0Hidq zgi$`Vl|n+d@fERndU5nDWp9Q8)IGUgng+}q zJgh#YPh|x+7zUt$3`joWR2tCPuxc66I?z#$Q@#o~+$qy^IoY>LY&SMQML6@1n+7B| z%ca^5_2L2H4romnm9ks3~5s zLtLwK%_>_rt_Wt#w-|Vo{T7Yyqd0yBG+avISmyUQowLWB&X$WcE6_@cfNaW}YFV_u z(YV2%f9gDb_E(?5Cm&x&%LQCjMZgQDFV%H0gCqD!LIQeutD1_=>O2QK3tnl)DS3Re z#*%Ob4Q;NSloK!Uh3gMML}=F6!Q*g)nyYKLxgkIV&&abQf}5KQn&V`g%1Jgag9erh ztJ)Kw%b2?R`3##Gnd}RR8`5ppS3~`?k7Ga_+(C#3F@^!hIXwQ-BDS^*^s2DdG1P9n z4@9yjq<$GIzN^UC(vc(e$r4tfj!gkFA}}w2`VRmbf1(NpYu^xVV_T~h%;@z;=oKSu zp#;joUB%*|#dh`VYXZPmvY8zMy3YTDGt~pjeH`lsVCo1T%ZR{M0(34*!!qL5$xgU# zhfpmbyz2_E(z3jasbL4vj$8>YbotDuk~pTvi5H>CiNrF}NjM0!NB%_9;xwn0XezVW zfG>hHMU!+KFt=v{xBFJm!fs=onEI5qkoy*-2_y}z-Uxmo{CYf6TI2WB^Q-u&fAbi= z=YRbIKK9r;JXOKT(I3JMhM@i&TyFqZ^?{-Us0bZU#93wH+8@@65J1l3iFTmxv;n)} zW~B8Bd246y_fak_!S#osc6<`+Rlk=1=_RC}zIPdq7dbdK-Ra6aQd z6A0o?IAnZrGXYOVCO%SlVK9z#kH55n%~7ETyoLeP1Qq$S)!mU($wTGJT(`zpgWX#k z;>MjrE_%<(8)RpuC0z$4X6G%05|OGrQ@>MN|(BO#0q!#W&gjuGyr*P*4K z(=^d?8L4bCShM7wnuTMTWy{u%P7qFBEeJ^JQCTq+GqO&Z7gDDL)XN^d!91F{F3mHC z{U)}vuq}6-!!v0olPGzG$+XA%#u&fz;TQ4GfB7jqbAAk_p!K<`9~J{wy|C7=sz9y` znjg8a@gtkNLQ)x~hOzW$>&9@DP4;CWf+AzdGs5W{Aa~!)cx>3BM6s|Cw!5`Hc+I__ zfYI8deR?&Dxdk-qt3cDne2je)t3iz=6{jSSnTDlxW_cIzNG=fJCs!Ohg`KMNTjVo zkzx)3C3(#G3-H@>;FeMCyXy?deH`rNu8`~20 zxJ8V)n;z@EtGQ!@RLET6F}JdgRfy(k?5;G78t{{oiZ~k-2pqTG`4~K`3w!qY4g7Dv z@C1JSFV17s5U8r*iaLN^-3OIDP*uT|b?`X50=hoTQzs7#2%O}HvlgELOt~z90O;9s z$U)ZjQd`bEH3Kpst_&<@1$B@IawrxSfJxl*>rI_f{+kFuZ-9bv*%(1)BVS zmV;^bIK&h5SCQipna?~>p9aQXii|SUlus1}G1&p2a31r$Z7{b$+rkZ(PLwN07Mn{? zzv^T1cQS#qt1kbqZ|pzH%!?U6Mgsz5G&Y`19r3zeObV#(Vazd7@Jsbd;W&J693HSj zGlM3h9m^;LkP@bWPWT2AFCp(pgQ0noN2Ci)@LmPhI5$FBJ2cgnP24G(i3<}~c@DJR z`19yZp2?V3!%^#v^D@Tzkvn~ZWg@5kdTgwZ@Jqk@93K9WkKy0_**T2b5>yXR)N^oy zh4AUm!S$obTb5xNM&aVfpV~i|POK)Bnz80|Z(%Fv&;0FJke1F7*z<6#eYl&R(tIbJ z#O=s~D{4@G7zQdUBMN>gJ%CX32PhX8!`vvxX%ghqC^AQjSnui5Dh4#1+{3|{X&PiB z#U*Vw2_sG{o0f^oGQ}YhP9PNc{4;w1L@OX(i69n)+^IsQQFYY^2N2eA%F(Uo0hmV1gsvk6LhE?4 zxEm4OChX8UX#&t|4s|4sg2glP&pHRCDBZj`XESLNmMlP$2vFw+k`RbCl4!`oc^Nrp zI7>{vR```>Mpzae;^0!^0_HbAnl_>v9z(ub+8kT7ykR-SZ~WO=eAiEX8o%=4^Vn<( zxVn#GFhnt!hZ_WqkLp2K@=^oV3M!Iuf*9>@+6fZotW;C#ks9UqclbGcm-SL6cEj zV8o=sk~o_@^hGC}<)x#=bZK@?q&3lH4(kfL14K9bDYn?usrj2VB~QgYexSslCVc7HiFqZKTV7z1ztycC z&R-p1Za7j+)@t7(&spCW2Zg0+xYWATjw8^yq+Jsr3&xolsBQIvs$1T`5*t@59>W%kRyFU53$*VdfbrwqM{2u}HZ#dxINJLJ}GY`G0GPlhQ zP1{O!1nTSq(4d%Ler0sF#h1 zJY$p;S{65q;$i6l>yG~E5jN5U1f`oqGj`a18s+%qE^cIBb%rp~|MCl$@O?k?1^m*V zzl`;9&|F+^80YxrQB=Y7l|v1pO&{j@BvDGKPvL^)v)fs_9iD~1&dV-r&O(hD*gFGa zay|^(c>qScdI{~u8vJMreiUwZ<0&xeX3tr9L4d1!C>EB&;R`u(O_!m|6x+gb_G)Gt zQE2ZxQsV#o!6iI;f1R!8oXSpkCBoWvjSFji6O2<{*~ic&jL59FX)~f155WYHi>HBCX9n*CfHi>Ok3U!)o3H7# zbXp5a0y_5A!6^?YC*F0=M4TX;pigGcv@gN*E6i|iBI!G-xsJ$DdEu6;yixu{$J!gLbz z&d{6*OWwZc=t(rcHBIESwi|}SIR!p{CwFvfIOZhFV&cJp$KwzWE-dlkPC4Q_R$U^~ zntb&=;OYU&#oeH)-zhtH(zCyjKxB%xLmCmFUcT61|1QQa{Ny5j@LPKrlr!qDWz!!W z)Ex0xQ6WZf=>3Qk0z z>eWGRsvgS4-MF&7IDhK)xjR>u=v7^rIV(U3pzjFt?>Sc9TR99x%Muo(#A$+_vdT&z z8Q#eX@Z6-0!lRWf?`DKcb*x}v2h)ruX_29c#%l6Xkh6IhKBmLbG>wwZYRz29r^_F8 z`O9iEy{*FFdz}5B%Gw@h|@HrQqSMY81U8 zivC>C{HlIf>QaDl0v~QPYK1gx2Z00>{xLIlNbbiRgbUSS}4bb7) zc6esM4d=raxXCuC>VbN-7nZ{oHCr~rcSf68r!#08 zH_^^tZLzl5peS1W4}YhJ5B%*Kb=k=y)`6^P-5S@pvOb8`6V$4p7%6#uMOjD-lnKdu zn*cO{W3X5P;K}i6*~RG5q@?P!Dn8O4cG^hr0RTWQOvf+-RA75j`N7J;LwDX@F5`6o zpqRh)kp)`3V~@Lwh-#7hDbvBy?5j{lz-S59WXr;Fo@Qtd8;(u*j>Cgz&>~M6P4L+p zt;O`8Jnj^iArJ60O*OG(swU?KX3%ChMlxFBK}JrciC|h9jJd8IqeXA?v#4=SimnJh zZW+J(`8B-%Up<50`>Qof5Vo%s{kXiPKd#$KYU+>AN;lwgE~1*tP=$QJRDxSxB%5?8PSSL?V9Zb(OnuHnt-KftO8)vAj|^> ztuHKt={QE{D98;X1^}`Sxa$Nlf}ldVH7d$yHV?kx-n%Qi9Og9x;PCbpx9jKvol2vk zsG_WeSDFznt3_qPCnJZ?!6RvXNr$6{WXx;D`ta>XcAUn zyQULoDT^#1Pgm11fFtYpkUF3R3W>}%aiif`(iAPe@Y@?`*VoXjU4fsBr^2b&Sy^?3 zUJ~U;n`qasfa8()L0PGQ_&$|CRF;+z9Kg|xZVGwgL{u6p4~WO(udi)mZG8mh20#Pm z2LIjPA$KvQoK*u1ZQCN<9n(U< zFaTl?Tpvvei|I2qUjXo47W9N?G%4NF7k1CT|J#SR1DMBkt_Pe2fHi>rLxHxTIDy2hJ`=(j^!Ab-rJju$;i6!vmzSXnhAn)mrWHqxjAjZ)v2(FRHI1#| ztfrO4#g6&Pqob8k(UKcKWim5dMvFq)jjNhM*MY)jA$8<;`z-3MuYic~`1uw;^6QuI z|9oNt>ysj^Q|ra$Exq{wd}S}};dKr)s}U7j1OB@2YeWzK1AV5PeN8 z&~?7+`oHfwRox3_m-?vbtiIFvBVq@~i0~x(Sz5##qEqOsqHTGEZBsluT);>&d52Qx zJ2ygQPwxaVIvE3c5_1+8YLeKp2oRd+&|#pHN94%ViFJY?(IgyGPNNxdWo+oim2lnN zCT*w#X$RsK)wvJhKm64i-uEA_;=|8*__7D;4|O*OMH7$88YmpdfS(+NGzAP|HfaY* zADJ(*I~Sy~NH+G{@RHt6z^N5&JGjYb3Ix-Ri1f}+r`b*4(tP^u`h$1?s>fvQ3Yyi6 z;L%p}2%EgT2PR|qjWx6zt0?-za3C!Rt!K1bYv9QkfQR4SMC&~~b7Bhu0f`p;A{;-~ z&ymx#x+RVH?rYC)N5@0>5H%R~Tl|ynXFPZ+7S4-85NSp}bYYn8HI(&#KJEmuju8U&jsvJu9;w&Gz8iR&OeSbISAn(#H)FKh zn|SKnlIzXYC%)sG`ulL5^MKu#C4l~N5A%EH=)MSPw(BSL&(he?jP)r1qUJCgP0`XM z>Cl4NHaXQn1gH$Cv8F`{I5p2%PK&NFmj=_B;Y>dXV8)%e*0~W1J=?jlgJT3~a1Z%* zog3GP%OFu$7YpJEO%9 zXFb|{_i4UQ!(y7YBPgMhXQatCv-CkqQ?xQ|2^%*LlYdNJ0H}^@|JcKCZ(*`}5$*rS z+?xhlmK^6{U)H(%+q(PpGSkzuV+PA$Fdztk1i+mFNr@6ghztg3(Xzv~Xv+vWLXMCf zw0_ufC_kU)bXK&%921~Ztgd#3m9*ZtPJoKxu^ zRk_r;=XE!x!J%(V&%G~C)|OTEWmaZYoxPigJ2w&M2Z*yNn!Rn*yEhT%Q^eVRx)6am z1(Cqu*dQM4rU-P^Pl}n%w^vxkPA(+CA0r3}aM{(>e59;%NeqYAF3*v!o39mUh#G9J zH~6KWZ*bqq9{L+6(c3tV-o|nCH#Tvtxi^<9I}wufFg^ncWANyNxs!yCJAx$NE&L1v>F<>U;(xMqswTKz*=-=3p0KpxNKXtCxn8sy8_Df%gnf z;|>APuaRZ>JNVF>ddJrXbW)~*%si=xH%*mR@a6xvj*lU4Qns}6{}xS9kzvmSWCZLK zXgLokS0~R`^3^JAGF7osj9jH%KExQtsMSQ-_ z%ICzbqRW%{2adgf-@f@6crZrjPtv`8ynI1n5j0m2%X8_@7R@cyL?%z5s+u_@w}P0nTv^|o&aedK(q<2)i$1c5e6CvDcGMZlv?bJ}E?<`glDHgX-#X^8k+ zFO=5ibLHsp@?hxsq)g3EEK|o9%@j}Rx`H4U5kqeG5+8d$D(a!uvVv*{%}t;szMR(+ ztJiR10)#=juaEM5eN;I*_wVUaEOgVDL{Z~*{t@yz=n6dd|J=B#pCz& znFZKNTa2|be{Y4Ul@)r)3Zx8ly?i33KSXS5#AboW5m6SX8sv+Gg&Lb0@n9E3Aw`!( z8Hn5pS#e3@oG)CPz_8^#AVCJ%)^hPWBgO?%5M-g&AajEd7WgYad=>9`Xb($z z&tXHsm(`x$)}nLES%Q#e*&jO02$I=+s3SLO(Vaq{(r zURw4dwtrzTLKsef7!eQlfRN5f>s4tk&vI1zb~2iSy>v}h=$Y(c0Azx*@1=a; z6t%LkmVrDk=5t_ocLCXGoW4^)1c(^+YJB9+UdEAe3hX4~Kj7xRI}Jhs=pD7RGzLb; z%gLg$lez2rHPgb#b%go-%73o2s(W4Dw6sWQB4KY@>Da0UD+t30>KfSH8P^ZpUp<67 zycs6AZvnv3yH12hh$(=9-+8J2+Q*-(pJTA?2h@oPk5$lshxQ2-OS&|`X_=25O=U<5 zl10!W=T#hvODc-xYujGh z;K%v5__4fy%fGI(%o`4z*wxwiimf+Aeq5ZSAU*NHW!mUuAcMnOfz2XWf>jTpKh%Mx zmQM>^J&l_hJlhB5v(&;zExt~gC{i7}nU7q#GM0(3XaX)>n9|l6-wljG{N95;?8V0zxmi>GQh|3^|`6u;?EII|` zamo>(XljK(Xd1%qL0=jRGz(ONF+zWc3tOwb-h|%r;C+?f3UgZvP|Urw?%{FbNuY`F7}IY29^BA2f}sT(@crPducFTGqY5D} zX$g5d4ASdAsd9xlS!yAU21cA8KwqKRvi3aRQhvghH-8$<2Dz?0h)_qu^_$5Ln1H4( zKrjJKjsNIJui(h&Ahm}AwhxBpf(e7gqy8#rd}YVuF8}}_07*naR9wegn$v9a zT9vigxKvGG0S|WhNnpeUK{$e{6;MB2KPvNxU~Zyh0m^MK3>uEn%x4ILF|O^d1Of)X z@R!DS6bWuyfW05Szgi7}&eV+Q-~ZD5^NR-4cbyFDWrvmH!~XDJ+`)GU4Q-k@RQ|ctIV~$Bx`O4qKp%4XIA5AWHt%06Ew!>Htqv`Idy9uX zAF{1n_yS#fc)1QseDHO0&!Vl1Io3$;-<{;QulYK+w(0nKAzOh_tj0Vz-8X@Yya2Zh z7V{VK^7dGioj@q{^P(YKxsm*TKw1im6_@;R$qIb*-UIyXd(S~`QQDaeZCq6oq`i3t zoQwdhKL{x*S$*aTQ|x!kVGa|Nr#_O8)ULyl(;*oIX##|!+P`86CSefjCSYq<_FAS1 z8pdf8_qE*#0KyNvckm#-O$%@Up!c6Y*?$1c;rva0`d7Xo8{LX)F%b~=b#baLfM^A|PY>J2#wV#~_}h(;UqYW$TS zJd1nQcEAkmPKUOYYA^wFjq=!91MaVbC!22h4W0YGPql4WfdxFef*@_$0E{)A1K!YJ zW-MkEb`JXL!-?}LLOx-$I~{S=|6dP@ke_L%zxtH z-Y5`F{GLBGZP|l>OiFQvnpRl44vSiRnP`4JqZ=@iauqZOKn71{o|k;(To!H_^GfTm z`pl~0rMhUfxgCt~G%I|GFGtY?3^hLi&77AgkFwmZAc(Lh+VTE25F4{%Tso14F5%li zAeM_)@tIP9qJQoM>IGh;kgco(BLNEczzP{si4Y6b4rB1IWb}T7l1kh6ya#(Vz^3aK|?R zy$uu}c}&30&cI$z%B(>)0x+KwK)~v1xaZ_%@JrxB0T9A;dWFK#F+F~1pP&7WXY1z) znElZGy*EkuQV|x=0kqLdWAoWC#A)wn?d!0FW=+@jiZ{)CKzX8)+vCT1LZKr-q4~)q zN1o)4FK1Jh;b`cf`MTg%fecT>;e7ri2)h7^YCl#$yW;=~tbV=FU>Ii!0MikJG- z(JCmvUW!0juADCbV4bY;Lh<72EimF@0dS+yY;plQsXyts z25hz9f;mm@hlo;+NMj-*;9!>lPDkR17GPe0XpRJavII@b;{V`BFXR4=Eld{!n|oCs zDQMvXC^?WZJ_=qrSw_G`k$dB(nt;RD1w0y9z{8@zOQ%D|_ZptK?OGHG7q^C>^!`Ht zggD@5L|by27sy$Pd9W?fgfAyIOp~y@fgh7wdb)X#v>s_y~TNPET;olFew|QufinVF~ zHvk|fKQ79(-sDnN1z)M&%vLWs+kJuJZ*Jvc<(BQvidg{OrQ$=&;NrECT4y#cM#mfg z0ilO5TtOr6;ANEM2#`zukpay0bc~m2+Kf(x>}~8*D?jrcdmSTnBoMau33anTzn_-t z{`7^Qw9p>DZ-Ea!aTW)QUIH>gz742>Sh048Us_4f`n}-2tDt6_Ex-T(?>t_u zPI_4XyPuzZwqevi^H_g#R6*_mZw;SJ^Lu~bf0jddi6-NVT71Pa$av-1(!{tE8mD?L z^L0%$8+!n3+lAXt1{@Lu@w5zn-Y+WPSJGS%q>~27RpR8UfO0B&c zvMdo~$fu)ma*-qc!^re1Isi36wO)(oFCnDV3 zBh+=;1_P9vp~V_Yz*M6@4EV(#c@7o1fExkO4a_wt`wk(#z}^6KgSE7s;ts719 zZ88Z!#o{Z2AhoND(AIO)*pyoSoVz^ETZsr1D)iP*fcgV8dt0F9005ys!0OQ>K>+Yj zAD~Ca_~1rZ-<#vb-#gpfs0hcNIvF0S(#;AEg_C4-;Oa;#{a5}Nkc`HHCVXxJNda33CH@+XTwUl8K2u&+qdclRkF>!8BgG_d(|lSSmbOX1 zW3b7YwVwfAng!lU622Sr32F|In=R!1E(K_41EUGS9b3}I>pXN2<3UJT%4V@?Z3JA3 zXngM1oP$rLgF+*KSwh8x;G(~*E~T~UE9mQ~Y2CQ&Y>$W2whY7yY-(^lL;ItAOpuoV zaq(QraP^QmrQ9M@*CHS6W5=6GH+F!!X>3fAy^}-0DD_7Y@Pm)`@qx3i6w7ak(%RYO z{6Zy8=aYHm2r%0O?_9AyXQaMj0JI9Cp0!&pBq3|Je2WE`_=W)WLA-!ixl*TdS0=XS zx@k~vUjZQ?&i2s9G_^NiePunY<2F%X|1dth5!SzYwfPDI@x++In~#O#l;7N~ckwxd zKa5sPETDzpY^JiOdA?!}7@Vj%jLd2I|?=Dqy~Nlx;~KK3f3)!u*7d8 zzV*y61X=sk!N`)8mS}B@-dUF(h!6Rg<#ITWG4rjmD(cW#j<0t$P?_2DuJm06dTwsX z#oP0ybQ3+g^s$u>VSB$q)A*w>O)EbxpH&s!@s0yJ&VyM;!FfWkC@HQII1AM2QXy4MkJoz|YZ& zE3$HWmb9WOU?)MO!fyO)elAeDbYdje-O}bkDJALAIMOS_iU0*1P56+2l$rpZ2k@c- z&jTn17X%3^kIwwsCs6cyvBdF*+xMp`Gs;M?x*L2$6TRqndtg81J93fEPu4GgPGnTCADeIDG(zpK4mmYoz3ihP(1T$Y#6fB}}1OA?~v zPcOGD6T19VK+&-{pI(+()gNJ(PNHrSh!Ll^r%}uS7;ZpZgX6+zu>l=939kBCxn@g` zZ3&E6CqDl|b|PT&3}_%1suB<>ot~TA0}FUa5JZ;14Bh{zK@fLhq_>_IA_kD#JAG{L z4v=myO4`{lmvMBs1t86-htE`E0Uip15*>*EV%?zr)o;wt0yuVhB}@htotC3e4(7BY zZbd5s9vN{Y+6&n9kY$lrg_hO<9a||&0RR#KIX-8(0nnFI>6BzxK*7(;HlM3sXJEuF zfICf_~z=*sp{JAau)+^gQ1rUDh!D^FW0g#j@6+mz}E&s0o1E3vZ zRo{mjU)nY8OaWWwwrSoXbn~FxDq}^dQOJ(w`C7%xxV19arM0D}_$mro1P*rk*ts#p z^kyIXyFDxxq=gU|2vRTB&W}X+r}dlhPnx%3w;H=jM~rEKM~64?*0t++*V;vV?~#jm zV&fVHAu5PUonM)5;M{xz>P9FI09$(sftVDK_Fn+SonRcHYh%&Q#pGU|s71sxr?njb z4rtx7)b|zazOGjOuFSTNLoKZKSaQp;;t{vnA-}s6frv=zMF_(Qc(#XF&n%6~$jMaZ zg0@mLvM+~AF!1$j%?)*%UCw#{__CdI04$*O4cFw zGnYhyGoS`!3$QUuFjV066Dhyx9%y_5KrdT%C00n=JWR-QjSkbKm|H}^<*gxZ?hhd5 zkad6har)Sv%JA4m@KNB-j{sm?>7)LYugt!Mbe}%H`($<6cYL{pKzwfKq(S?L!R@ie zZ10ps)_hzHsnikD*NXjYW#odF0wXYsft_%?(5+lY^Yx=c_)_MnM(o;)We{Wr<_CT3 zTpQy0yOiGDMQHhWlWjzjd~T|xPBTR zyY?2Wg(*(;ckt84U%(F?KZnOxw{UcjCgC6N-Gd8@BfuaOZU;a4Q@529!nN9-`%aQ` zv9bgt8!e0uewCkfgttU&B9<~QHVG)W$pms*ld>|Dp^)n*ig&5MrJZhkvUPzjt8A#c zx(e1RIm@YO5Mz_UCd)tpKBtxbSNvoB77JC1)cKPCu&U(pNMWFmO`Pq6>je&aW5k$` zzGcwUeWm$Zz%R)vTZ*GqaDSXOY{w?akA2z*xulh|GUfd4Um^mpZKn60tegh&_80Ru zIv>m2k#0`u$1-c6*bSY3v707mW=xyyo|}pUA*clU^df5-rs|M2-ft1O<|E z);fUNR^JlM8xl$r&BR)s$i!=32BVo*xb(^jcCQaHJ*c!@2wCf@wI>sVR9VRP6|CSN z^OM-?t>o8J=GQVxnizrDfMZ0%4Q@0eY|Yp3KfQVq|J(WR!n@Wk;V+zc0Ux^OTln1e zL)hmLDgu4^bL z5JGQ=gBc-4hHkpny*RAAdio;f^PymXDqyk!G->asDmh*Lx>Fp?&{x2zFA~7YQDFRd zu2n}jv^q+KEGnr7=O{85?rNH?HIJQ$@rvR z3~mdAmPRaz8pf3Adtx|bDa>}q8yZULrh&%|W=cwxi zz!CLM4Qw{ag45F}xm?JLw{jkA+g)h&NCNc6`Tuka3~T)~KiMpe93ZLIf&Q6n)NDH| zkkrsg-_D3(l!iv=mr8^fUw>&GECCRaLAFkxxc@pPgF4HFfZm;3fB_bw3hy~pt&V#% z0w_m$1nAf%p@Km-jmhAvo93*MHciVlP?KW110J46veML#Oozg+m&b7lXp)~BUc%?g zB}tone0w(rxb(^@_IL9YJt5017eF#V;r|B6EzN}YB2Vx|oJQym5&C0i0lH3CjhuZj zF-7oVvjD|9UAoB;dlV38h!A=JsuC7-8Rem`{1jlKD3pG9kdb9(>7z4w6-BmiNdeI< z;g%kD*3W@KC!hVIJoZXRKfK+NUaZzuZt0I0!HXG~=1KPR1H}2XBS%}}8IS=o-BhH= zw;{_MQCYQx7K^`GXl@^%e#aU+yAc!xv?SmWHFX&TVdLu$@={%bAXyRUb`A%Y&iW%T zI7U!40cZl?CiI0z&XO?@6e*C0kyHi|(%!{d`JO$u1|nO{c%}8W`>$a#taW=Br9I3Z z{5;M9C@nx?=smO^)`tND?QjuSD*$mQP5X^*P1CX1qNz~IOm*q&+n*DVARJr1MGz$O zw?WV>va(M8*pAfQ`{`s*Upc#itJ&%kpPtnxTYs*Mw5yU0Xgxp@@XcluuhCIZZ-~$v z0M#hJTt^Vq&qx`F>3y(OuMciAAm%+^p|Y1A$rc{=4tVeIY<+Cra*Mb9?dl^RQQL)y zb?fq^IGO*g#8@WXIxk6(s1lg;>p5zQ14y`H+Hh)@XEFyF59$d*YnVJ zcGat!r>>K7Ol7eHtu#^Ow_gPasBslQ?9vKfR=&z7pvsmH5AVs6pP>wbIKxK)&lIUy zf@!ic1-Ci`o<6&t$FnHq)Xs5#fpgV&Ag(;aTM@WE16~G~XM^Ioe z=bK-^I#Ca^tjb2WXn@m~P9V3%9RX=FUh;IOd0OS#y>Fi1(Yo-Y4T^;+!LCDF+79KI zE$iLL(~ew3W}<;zw!U1Szlh9Cp|ZWgdsu%u0)a4_$^Cy^EPs<5 zFgh5PXJXk!*Mszfh3+i6w!W7Kh>P#G9n~J;FiyF&^QWv> zSqu$mfSm^7);|e!piJX@(#ktn2WS;?>8e$%rF}a8?m+nb^Xo6Jf~f~k&@m;^^S9oA z4fh=1Z6|e6l+(C0=Us@+GR%fTt zso-<8*rJ7Uj);8AGP34@0U_i_TLiAWwt}rILj^I#0RU+ydkJdZ8q_qouPs252Jkr? zO>ZI#J%B1zGv>AtAE_x0l}s*>DA)#4??=tTlwgQWZVv{MU#`CsR2p=pRlE|s<#)FX0El`Bqa(=z^gz>| z+e%}ryIOe$fTiIleGr|pvCAxyFDyq`Nod+w0F3F3lMfKme;rHUe37bp5ycNEe2^eW zlj@iLr^{izPED4@y;J$7mMPLD2jcUCTkgtE1W#j~$Kq~c4yruA@Z3gn2W6S1I!9E* z`1$XD)>g$L{4^el3t!rwwgngf^iGV!L?(O+UZjD~vZcdm)-IZLG<`>CrW0&b6)pg3 z^PwYci;r%@r|c5MNyPn|18iN%mY*zda|T_@UbFsC{ImUl9w-@G7$+ZxC<(SoOMBHx z?CM<1HYr;z|KTr;YNT1raou!X!Z%Z^HNHMY|x ztuWsoHmF(lih4yr86f<&lRU;sB?dH2zGb-xg7`>q2A;4Aj`@Y|0OY7z$}TU9$?`yK zkpdsnM04P${o#PFn}Br|kpm0SHHjG*Yk;3&J5o2^7mTzcCqiOLGs4Wv-i7@JZa5pc_lyR{&02C|M~ObEvLT18e8sd-N_K2Q5hs?=O;Y6qVV|`R_JtJ za*tS(Z0x%Bve4Me*(K9SN~nhG;Kd$L&kE4=<>Gd<;&0cO&a_;}YYAZUv)K%wm`{Q* zV3u9ZLuivnLHo}F&29m7ltI?4$9&${S(0K!Ccqwn2FH*tU!6gs+oc6a1<;i*M)$NF zU}3_w8-2WdX(g?WhzeQ#&=cqI(5aj1LbI`HTl)_CbOu4z`!o`?k>OqL=%dyMYSTnO zKvC7#LDMYBEQOXbMD7p$6w6_Dv^HNmt+N`~WhQ)Em&cgRD&3KypqKM6XriSR^Z;bP zoLPmEmR@Ct^|n7P<8DDZt1%lm&Ro50|p#67;;~Rsf+`MovR70Rxf@a_h0| z?e#gb`?k6lo#%dWQOQH{BNY8yC`(^#t6V+d<4a_?7WhxA&Y=hDO%NBeC5f$&`9@KU>&fY?NEowum4jT)QRSv~Ylfcv|^;v21C38!%@zmb-_TB-n_ zxWPuJz+6FI$eu1gFe|UL_VVbFi%Xp4C!6#|_LpxA@bcv~0F}#!Q3b|-_ybR)U*$jy zNN>zx#=a9S-6S6MDu(; zzf3S(XGKy5p`KOP-bz;1aXsNAd{$G2+2i(X#G}`x2=jb(PeH&*i#zG&p|-RZQ`fr37Hi(;htUSOzXrkr=?bhx zss`J95@W!YyXKotza?k_fE(@Y-~Z!d;4naNL8JB20)OKtzmzU!5GrTWjexkoK3b>T z+Mg~95WPSH0Tr1u0w&bzw=SCN$L|QODElxPm%~H(#PD%*v*aU36Mv^oFa}{Ut8lQ_ z&!^GEs*4%aoDZ*M>Dk6;xFxVPfXL^UXz%Qw#~1527vQd7(QU@KdE4p)a(vvPd8~p6 zsDrPNRmX%~>OU^O+3GIJs8C*A(FktQT@-}nnaATIDHnZRl%sWZZ7pz-JKLYiWw$ct zQg+N}rZ>U!UC5q0y=u!1zyiqf(z56a*IsKIS$=JPvAmXokS6FpHTgZn0)B2OEK6H8 z7HVMf80f|qAUib^b)|^d^wo1>`xN#TLQtZweY;^O>4P=>Mehd}kTFXjIexrz{bz#csZXdBG1Y*6^fE*Zt(#G>tk2c7$)|EUD z3;;o->E1s+hkw4akG;5(kJPyucl$?OQUCxT07*naRLoncqYMFSr3j*>7Q9?Jr8TRj zlnv<FZi;Ft6%Waq6-J))V>a$f^N-H^}$6RjLNex0V5PZ2E`L)X@%_INi z1}fJx#OYRg->>$)n+)xso&$7iljEZfz9PS(Ql#N@0v9U?A}K?`7b z1{}T$st@#;S&GuW%H9C&~b3ly0 z$M-McOYvAbQyHoy0k`2M6~&I`TggWA;NgC!dCvt+Ax|w0H^&HiO<-BZGOc^Sv>MQ^ z^C1fG@a(!gk>(@w>TP*Nz)N|yJ)28PTAwEni1jRiAC~h zrL4M?cw6z^Ev+*Gco0&Q@G5BU^`|c#Z-b z%~uHL2V@+j1N_AJX?$_-F`(*$IY6SrW*CUJ^OIZkV2kFuhDC$>wCsE?PF`Y=D9vrV z;CARMJt5DhKwD#V!`bmc2DxTP|0*QJB6cpf9TmP-(*P#E8_PsiN4)6eQ? z0cw&Jm)gE;Nop{HYJe(Wd>XWWR*ez)VSdTXA33{%0AUdF=8-%|f`Xgxh*sC=UrTc6;$v^; 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 oyK;GoTyxiJ;h$K4O)YybcN literal 0 HcmV?d00001 diff --git a/test/pleroma/upload/filter/analyze_metadata_test.exs b/test/pleroma/upload/filter/analyze_metadata_test.exs index b800a4a43..e4ac673b2 100644 --- a/test/pleroma/upload/filter/analyze_metadata_test.exs +++ b/test/pleroma/upload/filter/analyze_metadata_test.exs @@ -20,6 +20,20 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadataTest do assert meta.blurhash end + test "it blurhashes images with an alpha component" do + upload = %Pleroma.Upload{ + name: "an… image.jpg", + content_type: "image/jpeg", + path: Path.absname("test/fixtures/png_with_transparency.png"), + tempfile: Path.absname("test/fixtures/png_with_transparency.png") + } + + {:ok, :filtered, meta} = AnalyzeMetadata.filter(upload) + + assert %{width: 320, height: 320} = meta + assert meta.blurhash == "eXJi-E:SwCEm5rCmn$+YWYn+15K#5A$xxCi{SiV]s*W:Efa#s.jE-T" + end + test "adds the dimensions for videos" do upload = %Pleroma.Upload{ name: "coolvideo.mp4", From b3214be32f83541626b198b86ee065b92862f4cf Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Tue, 28 Nov 2023 12:33:54 +0400 Subject: [PATCH 34/46] AnayzeMetadata: Fix error case that would never match --- lib/pleroma/upload/filter/analyze_metadata.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/upload/filter/analyze_metadata.ex b/lib/pleroma/upload/filter/analyze_metadata.ex index 710fd02d2..ef75d73d3 100644 --- a/lib/pleroma/upload/filter/analyze_metadata.ex +++ b/lib/pleroma/upload/filter/analyze_metadata.ex @@ -78,7 +78,7 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do %{width: width, height: height} else nil -> {:error, {:ffprobe, :command_not_found}} - {:error, _} = error -> error + error -> {:error, error} end end From da26964d2be8183d22596d64aa0db5e9b3b96888 Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Tue, 28 Nov 2023 12:39:22 +0400 Subject: [PATCH 35/46] Changelog: Adjust blurhash change --- changelog.d/blurhash.change | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.d/blurhash.change b/changelog.d/blurhash.change index 428a74d7a..c45e3058a 100644 --- a/changelog.d/blurhash.change +++ b/changelog.d/blurhash.change @@ -1 +1 @@ -Replace eblurhash with a Rust NIF blurhash. This also removes a dependency on ImageMagick. +Replace eblurhash with a rinpatch_blurhash. This also removes a dependency on ImageMagick. From ccc2adee4111367d67646f6f2828e03b861dd393 Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Tue, 28 Nov 2023 13:13:43 +0400 Subject: [PATCH 36/46] Linting --- lib/pleroma/upload/filter/analyze_metadata.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/upload/filter/analyze_metadata.ex b/lib/pleroma/upload/filter/analyze_metadata.ex index ef75d73d3..e510ae3e6 100644 --- a/lib/pleroma/upload/filter/analyze_metadata.ex +++ b/lib/pleroma/upload/filter/analyze_metadata.ex @@ -82,7 +82,7 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do end end - defp vips_blurhash(image = %Vix.Vips.Image{}) do + defp vips_blurhash(%Vix.Vips.Image{} = image) do with {:ok, resized_image} <- Operation.thumbnail_image(image, 100), {height, width} <- {Image.height(resized_image), Image.width(resized_image)}, max <- max(height, width), From 10525ac7f8ed4e3882a21d6cb3f1a7acfabc0674 Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Tue, 28 Nov 2023 15:21:34 +0400 Subject: [PATCH 37/46] Docs: Remove rust references --- changelog.d/blurhash.change | 2 +- docs/installation/alpine_linux_en.md | 2 +- docs/installation/arch_linux_en.md | 1 - docs/installation/debian_based_en.md | 2 +- docs/installation/debian_based_jp.md | 1 - docs/installation/freebsd_en.md | 2 +- 6 files changed, 4 insertions(+), 6 deletions(-) diff --git a/changelog.d/blurhash.change b/changelog.d/blurhash.change index c45e3058a..4276eb164 100644 --- a/changelog.d/blurhash.change +++ b/changelog.d/blurhash.change @@ -1 +1 @@ -Replace eblurhash with a rinpatch_blurhash. This also removes a dependency on ImageMagick. +Replace eblurhash with rinpatch_blurhash. This also removes a dependency on ImageMagick. diff --git a/docs/installation/alpine_linux_en.md b/docs/installation/alpine_linux_en.md index 9794833a3..7154bca48 100644 --- a/docs/installation/alpine_linux_en.md +++ b/docs/installation/alpine_linux_en.md @@ -28,7 +28,7 @@ sudo apk upgrade * Install some tools, which are needed later: ```shell -sudo apk add git build-base cmake file-dev rust +sudo apk add git build-base cmake file-dev ``` ### Install Elixir and Erlang diff --git a/docs/installation/arch_linux_en.md b/docs/installation/arch_linux_en.md index dbfbf6bf8..f7d722ef9 100644 --- a/docs/installation/arch_linux_en.md +++ b/docs/installation/arch_linux_en.md @@ -14,7 +14,6 @@ This guide will assume that you have administrative rights, either as root or a * `base-devel` * `cmake` * `file` -* `rust` #### Optional packages used in this guide diff --git a/docs/installation/debian_based_en.md b/docs/installation/debian_based_en.md index 44c93e1ef..b61e4addd 100644 --- a/docs/installation/debian_based_en.md +++ b/docs/installation/debian_based_en.md @@ -20,7 +20,7 @@ sudo apt full-upgrade * Install some of the above mentioned programs: ```shell -sudo apt install git build-essential postgresql postgresql-contrib cmake libmagic-dev rust +sudo apt install git build-essential postgresql postgresql-contrib cmake libmagic-dev ``` ### Install Elixir and Erlang diff --git a/docs/installation/debian_based_jp.md b/docs/installation/debian_based_jp.md index 43902c987..1424ad7f4 100644 --- a/docs/installation/debian_based_jp.md +++ b/docs/installation/debian_based_jp.md @@ -21,7 +21,6 @@ Note: This article is potentially outdated because at this time we may not have - `build-essential` - `cmake` - `libmagic-dev` -- `rust` #### このガイドで利用している追加パッケージ diff --git a/docs/installation/freebsd_en.md b/docs/installation/freebsd_en.md index b88853dd1..02513daf2 100644 --- a/docs/installation/freebsd_en.md +++ b/docs/installation/freebsd_en.md @@ -9,7 +9,7 @@ This document was written for FreeBSD 12.1, but should be work on future release This assumes the target system has `pkg(8)`. ``` -# pkg install elixir postgresql12-server postgresql12-client postgresql12-contrib git-lite sudo nginx gmake acme.sh cmake rust vips +# pkg install elixir postgresql12-server postgresql12-client postgresql12-contrib git-lite sudo nginx gmake acme.sh cmake vips ``` Copy the rc.d scripts to the right directory: From e216603477e2c393a586f7eb0bc8183e73bf4cd7 Mon Sep 17 00:00:00 2001 From: NEETzsche Date: Wed, 29 Nov 2023 07:55:44 -0700 Subject: [PATCH 38/46] Change url to externalLink as requested by hj here: https://shigusegubu.club/notice/AcIjZjackKAt6e522a --- .../web/api_spec/operations/pleroma_scrobble_operation.ex | 8 ++++---- lib/pleroma/web/common_api/activity_draft.ex | 2 +- lib/pleroma/web/pleroma_api/views/scrobble_view.ex | 2 +- .../pleroma_api/controllers/scrobble_controller_test.exs | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex index 68c586b73..141b60533 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex @@ -59,7 +59,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do album: %Schema{type: :string, description: "The album of the media playing"}, artist: %Schema{type: :string, description: "The artist of the media playing"}, length: %Schema{type: :integer, description: "The length of the media playing"}, - url: %Schema{type: :string, description: "A URL referencing the media playing"}, + externalLink: %Schema{type: :string, description: "A URL referencing the media playing"}, visibility: %Schema{ allOf: [VisibilityScope], default: "public", @@ -71,7 +71,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do "artist" => "Some Artist", "album" => "Some Album", "length" => 180_000, - "url" => "https://www.last.fm/music/Some+Artist/_/Some+Title" + "externalLink" => "https://www.last.fm/music/Some+Artist/_/Some+Title" } } end @@ -85,7 +85,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do title: %Schema{type: :string, description: "The title of the media playing"}, album: %Schema{type: :string, description: "The album of the media playing"}, artist: %Schema{type: :string, description: "The artist of the media playing"}, - url: %Schema{type: :string, description: "A URL referencing the media playing"}, + externalLink: %Schema{type: :string, description: "A URL referencing the media playing"}, length: %Schema{ type: :integer, description: "The length of the media playing", @@ -100,7 +100,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do "artist" => "Some Artist", "album" => "Some Album", "length" => 180_000, - "url" => "https://www.last.fm/music/Some+Artist/_/Some+Title", + "externalLink" => "https://www.last.fm/music/Some+Artist/_/Some+Title", "created_at" => "2019-09-28T12:40:45.000Z" } } diff --git a/lib/pleroma/web/common_api/activity_draft.ex b/lib/pleroma/web/common_api/activity_draft.ex index 00cbacbb4..8910ad5b8 100644 --- a/lib/pleroma/web/common_api/activity_draft.ex +++ b/lib/pleroma/web/common_api/activity_draft.ex @@ -83,7 +83,7 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do defp listen_object(draft) do object = draft.params - |> Map.take([:album, :artist, :title, :length, :url]) + |> Map.take([:album, :artist, :title, :length, :externalLink]) |> Map.new(fn {key, value} -> {to_string(key), value} end) |> Map.put("type", "Audio") |> Map.put("to", draft.to) diff --git a/lib/pleroma/web/pleroma_api/views/scrobble_view.ex b/lib/pleroma/web/pleroma_api/views/scrobble_view.ex index 7a983f8b5..edf0a2390 100644 --- a/lib/pleroma/web/pleroma_api/views/scrobble_view.ex +++ b/lib/pleroma/web/pleroma_api/views/scrobble_view.ex @@ -27,7 +27,7 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleView do title: object.data["title"] |> HTML.strip_tags(), artist: object.data["artist"] |> HTML.strip_tags(), album: object.data["album"] |> HTML.strip_tags(), - url: object.data["url"], + externalLink: object.data["externalLink"], length: object.data["length"] } end diff --git a/test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs index df12a05ce..be94a02ad 100644 --- a/test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs @@ -19,7 +19,7 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleControllerTest do "artist" => "lain", "album" => "lain radio", "length" => "180000", - "url" => "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+1" + "externalLink" => "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+1" }) assert %{"title" => "lain radio episode 1"} = json_response_and_validate_schema(conn, 200) @@ -35,7 +35,7 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleControllerTest do title: "lain radio episode 1", artist: "lain", album: "lain radio", - url: "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+1" + externalLink: "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+1" }) {:ok, _activity} = @@ -43,7 +43,7 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleControllerTest do title: "lain radio episode 2", artist: "lain", album: "lain radio", - url: "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+2" + externalLink: "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+2" }) {:ok, _activity} = @@ -51,7 +51,7 @@ defmodule Pleroma.Web.PleromaAPI.ScrobbleControllerTest do title: "lain radio episode 3", artist: "lain", album: "lain radio", - url: "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+3" + externalLink: "https://www.last.fm/music/lain/lain+radio/lain+radio+episode+3" }) conn = get(conn, "/api/v1/pleroma/accounts/#{user.id}/scrobbles") From cd6adef4715cc42aa9a0cc8246fca8259eca9d9f Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Wed, 29 Nov 2023 19:42:40 +0400 Subject: [PATCH 39/46] Add changelog --- changelog.d/doc-fix.skip | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 changelog.d/doc-fix.skip diff --git a/changelog.d/doc-fix.skip b/changelog.d/doc-fix.skip new file mode 100644 index 000000000..e69de29bb From 15a8acbd6cc6ecc89b49956acfeba49d02270c1d Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Thu, 30 Nov 2023 09:40:17 +0400 Subject: [PATCH 40/46] MRF, Docs.Generator: Ensure code is loaded before checking it --- lib/pleroma/docs/generator.ex | 2 ++ lib/pleroma/web/activity_pub/mrf.ex | 3 +++ 2 files changed, 5 insertions(+) diff --git a/lib/pleroma/docs/generator.ex b/lib/pleroma/docs/generator.ex index 6508f1947..456a8fd54 100644 --- a/lib/pleroma/docs/generator.ex +++ b/lib/pleroma/docs/generator.ex @@ -17,6 +17,8 @@ defmodule Pleroma.Docs.Generator do # This shouldn't be needed as all modules are expected to have module_info/1, # but in test enviroments some transient modules `:elixir_compiler_XX` # are loaded for some reason (where XX is a random integer). + Code.ensure_loaded(module) + if function_exported?(module, :module_info, 1) do module.module_info(:attributes) |> Keyword.get_values(:behaviour) diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index ff9f84497..a0deac300 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -54,6 +54,8 @@ defmodule Pleroma.Web.ActivityPub.MRF do @required_description_keys [:key, :related_policy] def filter_one(policy, message) do + Code.ensure_loaded(policy) + should_plug_history? = if function_exported?(policy, :history_awareness, 0) do policy.history_awareness() @@ -188,6 +190,7 @@ defmodule Pleroma.Web.ActivityPub.MRF do def config_descriptions(policies) do Enum.reduce(policies, @mrf_config_descriptions, fn policy, acc -> + Code.ensure_loaded(policy) if function_exported?(policy, :config_description, 0) do description = @default_description From 265d8749b1683f58f902cb82529d762617adc1c6 Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Thu, 30 Nov 2023 09:40:29 +0400 Subject: [PATCH 41/46] Gitlab CI: Make it work for a local runner --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ff3308e31..10a843af2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,7 +6,7 @@ variables: &global_variables POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres DB_HOST: postgres - DB_PORT: 5432 + DB_PORT: "5432" MIX_ENV: test workflow: From 30084b7332e4a5985d866d94328fba1bc08475ec Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Thu, 30 Nov 2023 09:55:04 +0400 Subject: [PATCH 42/46] Add changelog. --- changelog.d/loading-order-test-fix.skip | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 changelog.d/loading-order-test-fix.skip diff --git a/changelog.d/loading-order-test-fix.skip b/changelog.d/loading-order-test-fix.skip new file mode 100644 index 000000000..e69de29bb From eb6be30602f95cf86aef465229dacbdcb92c3c58 Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Thu, 30 Nov 2023 10:05:00 +0400 Subject: [PATCH 43/46] Linting --- lib/pleroma/web/activity_pub/mrf.ex | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index a0deac300..69054e25b 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -191,6 +191,7 @@ defmodule Pleroma.Web.ActivityPub.MRF do def config_descriptions(policies) do Enum.reduce(policies, @mrf_config_descriptions, fn policy, acc -> Code.ensure_loaded(policy) + if function_exported?(policy, :config_description, 0) do description = @default_description From d99e139c6bec91150a10b68c032019a163eccf04 Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Thu, 30 Nov 2023 13:54:07 +0400 Subject: [PATCH 44/46] CI: Remove test coverage --- .gitlab-ci.yml | 8 +------- mix.exs | 1 - 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 10a843af2..1edfc02ea 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -125,13 +125,7 @@ unit-testing: script: - mix ecto.create - mix ecto.migrate - - mix test --cover --preload-modules - coverage: '/^Line total: ([^ ]*%)$/' - artifacts: - reports: - coverage_report: - coverage_format: cobertura - path: coverage.xml + - mix test --preload-modules unit-testing-erratic: extends: diff --git a/mix.exs b/mix.exs index 99074b433..85371c645 100644 --- a/mix.exs +++ b/mix.exs @@ -190,7 +190,6 @@ defmodule Pleroma.Mixfile do {:ex_machina, "~> 2.4", only: :test}, {:credo, "~> 1.6", only: [:dev, :test], runtime: false}, {:mock, "~> 0.3.5", only: :test}, - {:covertool, "~> 2.0", only: :test}, {:hackney, "~> 1.18.0", override: true}, {:mox, "~> 1.0", only: :test}, {:websockex, "~> 0.4.3", only: :test}, From 5dce39d17f7aede05f6326fbe3514bd9431f832c Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Sun, 3 Dec 2023 10:17:24 +0400 Subject: [PATCH 45/46] Revert "CI: Remove test coverage" This reverts commit d99e139c6bec91150a10b68c032019a163eccf04. --- .gitlab-ci.yml | 8 +++++++- mix.exs | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1edfc02ea..10a843af2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -125,7 +125,13 @@ unit-testing: script: - mix ecto.create - mix ecto.migrate - - mix test --preload-modules + - mix test --cover --preload-modules + coverage: '/^Line total: ([^ ]*%)$/' + artifacts: + reports: + coverage_report: + coverage_format: cobertura + path: coverage.xml unit-testing-erratic: extends: diff --git a/mix.exs b/mix.exs index 85371c645..99074b433 100644 --- a/mix.exs +++ b/mix.exs @@ -190,6 +190,7 @@ defmodule Pleroma.Mixfile do {:ex_machina, "~> 2.4", only: :test}, {:credo, "~> 1.6", only: [:dev, :test], runtime: false}, {:mock, "~> 0.3.5", only: :test}, + {:covertool, "~> 2.0", only: :test}, {:hackney, "~> 1.18.0", override: true}, {:mox, "~> 1.0", only: :test}, {:websockex, "~> 0.4.3", only: :test}, From 1ad0d94d6f1f11c848f277877cc14b3a47a7ae95 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 5 Dec 2023 16:35:41 -0500 Subject: [PATCH 46/46] Change set_reachable/1 to an upsert --- changelog.d/reachability.change | 1 + lib/pleroma/instances/instance.ex | 10 +++------- test/pleroma/instances/instance_test.exs | 8 -------- 3 files changed, 4 insertions(+), 15 deletions(-) create mode 100644 changelog.d/reachability.change diff --git a/changelog.d/reachability.change b/changelog.d/reachability.change new file mode 100644 index 000000000..06f63272b --- /dev/null +++ b/changelog.d/reachability.change @@ -0,0 +1 @@ +Reduce the reachability timestamp update to a single upsert query diff --git a/lib/pleroma/instances/instance.ex b/lib/pleroma/instances/instance.ex index 9756c66dc..101e5dc88 100644 --- a/lib/pleroma/instances/instance.ex +++ b/lib/pleroma/instances/instance.ex @@ -97,13 +97,9 @@ defmodule Pleroma.Instances.Instance do def reachable?(url_or_host) when is_binary(url_or_host), do: true def set_reachable(url_or_host) when is_binary(url_or_host) do - with host <- host(url_or_host), - %Instance{} = existing_record <- Repo.get_by(Instance, %{host: host}) do - {:ok, _instance} = - existing_record - |> changeset(%{unreachable_since: nil}) - |> Repo.update() - end + %Instance{host: host(url_or_host)} + |> changeset(%{unreachable_since: nil}) + |> Repo.insert(on_conflict: {:replace, [:unreachable_since]}, conflict_target: :host) end def set_reachable(_), do: {:error, nil} diff --git a/test/pleroma/instances/instance_test.exs b/test/pleroma/instances/instance_test.exs index a769f9362..6a718be21 100644 --- a/test/pleroma/instances/instance_test.exs +++ b/test/pleroma/instances/instance_test.exs @@ -31,14 +31,6 @@ defmodule Pleroma.Instances.InstanceTest do assert {:ok, instance} = Instance.set_reachable(instance.host) refute instance.unreachable_since end - - test "does NOT create an Instance record in case of no existing matching record" do - host = "domain.org" - assert nil == Instance.set_reachable(host) - - assert [] = Repo.all(Ecto.Query.from(i in Instance)) - assert Instance.reachable?(host) - end end describe "set_unreachable/1" do