From e9b51f5df7d589ed88d2ca56edc6512156430db1 Mon Sep 17 00:00:00 2001 From: James Arthur Date: Fri, 15 Nov 2024 10:50:14 +0100 Subject: [PATCH 01/22] docs: improve the docs intro a touch. --- website/docs/intro.md | 13 +++++++++++-- website/docs/quickstart.md | 9 ++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/website/docs/intro.md b/website/docs/intro.md index df69974ce8..28aef21eac 100644 --- a/website/docs/intro.md +++ b/website/docs/intro.md @@ -22,11 +22,20 @@ You don't need to be an expert in database replication or distributed systems to ## New to ElectricSQL? -Start with the [Quickstart](/docs/quickstart) to get up-and-running. +Start with the [Quickstart](/docs/quickstart) to get up-and-running. The guides on [Shapes](/docs/guides/shapes) and [Auth](/docs/guides/auth) are also good entrypoints and helpful to understand how Electric works. + +The [HTTP API](/docs/api/http) and [TypeScript Client](/docs/api/clients/typescript) docs show how to sync data. The [React](/docs/integrations/react) page illustrates how to bind these into a reactivity framework. + +The easiest way to use Electric in production is the [Electric Cloud](/product/cloud). Alternatively, the [Deployment](/docs/guides/deployment) guide covers how to self host. + +> [!warning] Looking for PGlite docs? +> If you're interested in using [PGlite](/product/pglite), it has it's own docs site at [pglite.dev/docs](https://pglite.dev/docs) ## Examples -See the [examples folder](https://github.com/electric-sql/electric/tree/main/examples) in the main GitHub repo. +There are lots of [examples](https://github.com/electric-sql/electric/tree/main/examples) in the main repo on GitHub. + +The integration docs also illustrate common patterns, e.g. using Electric with frameworks like [TanStack](/docs/integrations/tanstack) and [Phoenix](/docs/integrations/phoenix) and platforms like [Supabase](/docs/integrations/supabase) and [Cloudflare](/docs/integrations/cloudflare). ## Source code diff --git a/website/docs/quickstart.md b/website/docs/quickstart.md index 2160859702..bca6121d5b 100644 --- a/website/docs/quickstart.md +++ b/website/docs/quickstart.md @@ -5,11 +5,18 @@ description: >- outline: 2 --- +

+ Electric zap with halo +

+ # Quickstart Let's get you up-and-running with Electric and real-time sync of your Postgres data. -First we'll setup Electric and show you how to use the low-level HTTP API directly. Then we'll create a simple React app using our higher-level TypeScript client. +First we'll setup Electric and show you how to use the low-level [HTTP API](/docs/api/http) directly. Then we'll create a simple React app using our higher-level [React hooks](http://localhost:5173/docs/integrations/react#useshape). ## Setup From d1af25a5f2ba742fef2d9a0e83afab7f10366ee0 Mon Sep 17 00:00:00 2001 From: James Arthur Date: Fri, 15 Nov 2024 11:10:40 +0100 Subject: [PATCH 02/22] docs: standardise on US spelling of "authorization" with a "z". --- examples/gatekeeper-auth/README.md | 20 +++++++++---------- .../api/lib/api_web/authenticator.ex | 2 +- .../plugs/auth/authorise_shape_access.ex | 8 ++++---- .../lib/api_web/plugs/auth/verify_token.ex | 2 +- .../gatekeeper-auth/api/lib/api_web/router.ex | 4 ++-- .../api/test/api_web/authenticator_test.exs | 4 ++-- .../api/test/api_web/gatekeeper_test.exs | 2 +- .../api/test/api_web/integration_test.exs | 2 +- examples/gatekeeper-auth/docs/NOTES.md | 8 ++++---- ...2023-09-20-introducing-electricsql-v0.6.md | 2 +- website/docs/guides/auth.md | 4 ++-- website/docs/integrations/cloudflare.md | 2 +- website/docs/integrations/phoenix.md | 2 +- 13 files changed, 31 insertions(+), 31 deletions(-) diff --git a/examples/gatekeeper-auth/README.md b/examples/gatekeeper-auth/README.md index 2b94c4c5b3..5f7cce8094 100644 --- a/examples/gatekeeper-auth/README.md +++ b/examples/gatekeeper-auth/README.md @@ -19,10 +19,10 @@ There are two steps to the gatekeeper pattern: 1. first a client posts authentication credentials to a gatekeeper endpoint to generate an auth token 2. the client then makes requests to Electric via an authorising proxy that validates the auth token against the shape request -The auth token can be *shape-scoped* (i.e.: can include a claim containing the shape definition). This allows the proxy to authorise a shape request by comparing the shape claim signed into the token with the [shape defined in the request parameters](https://electric-sql.com/docs/quickstart#http-api). This allows you to: +The auth token can be *shape-scoped* (i.e.: can include a claim containing the shape definition). This allows the proxy to authorize a shape request by comparing the shape claim signed into the token with the [shape defined in the request parameters](https://electric-sql.com/docs/quickstart#http-api). This allows you to: -- keep your main authorisation logic in your API (in the gatekeeper endpoint) where it's natural to do things like query the database and call external authorisation services; and to -- run your authorisation logic *once* when generating a token, rather than on the "hot path" of every shape request in your authorising proxy +- keep your main authorization logic in your API (in the gatekeeper endpoint) where it's natural to do things like query the database and call external authorization services; and to +- run your authorization logic *once* when generating a token, rather than on the "hot path" of every shape request in your authorising proxy ### Implementation @@ -232,7 +232,7 @@ Copy the auth token and set it to an env var: export AUTH_TOKEN="" ``` -An unauthorised request to Caddy will get a 401: +An unauthorized request to Caddy will get a 401: ```console $ curl -sv "http://localhost:8080/v1/shape?table=items&offset=-1" @@ -242,7 +242,7 @@ $ curl -sv "http://localhost:8080/v1/shape?table=items&offset=-1" ... ``` -An authorised request for the correct shape will succeed: +An authorized request for the correct shape will succeed: ```console $ curl -sv --header "Authorization: Bearer ${AUTH_TOKEN}" \ @@ -252,7 +252,7 @@ $ curl -sv --header "Authorization: Bearer ${AUTH_TOKEN}" \ ... ``` -Caddy validates the shape request against the shape definition signed into the auth token. So an authorised request *for the wrong shape* will fail: +Caddy validates the shape request against the shape definition signed into the auth token. So an authorized request *for the wrong shape* will fail: ```console $ curl -sv --header "Authorization: Bearer ${AUTH_TOKEN}" \ @@ -266,7 +266,7 @@ Take a look at the [`./caddy/Caddyfile`](./caddy/Caddyfile) for more details. ### 3. Edge function as proxy -Electric is [designed to run behind a CDN](https://electric-sql.com/docs/api/http#caching). This makes sync faster and more scalable. However, it means that if you want to authorise access to the Electric API using a proxy, you need to run that proxy in-front-of the CDN. +Electric is [designed to run behind a CDN](https://electric-sql.com/docs/api/http#caching). This makes sync faster and more scalable. However, it means that if you want to authorize access to the Electric API using a proxy, you need to run that proxy in-front-of the CDN. You can do this with a centralised cloud proxy, such as an API endpoint deployed as part of a backend web service. Or a reverse-proxy like Caddy that's deployed next to your Electric service. However, running these in front of a CDN from a central location reduces the benefit of the CDN — adding latency and introducing a bottleneck. @@ -299,7 +299,7 @@ Copy the auth token and set it to an env var: export AUTH_TOKEN="" ``` -An unauthorised request to the edge-function proxy will get a 401: +An unauthorized request to the edge-function proxy will get a 401: ```console $ curl -sv "http://localhost:8000/v1/shape?table=items&offset=-1" @@ -308,7 +308,7 @@ $ curl -sv "http://localhost:8000/v1/shape?table=items&offset=-1" ... ``` -An authorised request for the correct shape will succeed: +An authorized request for the correct shape will succeed: ```console $ curl -sv --header "Authorization: Bearer ${AUTH_TOKEN}" \ @@ -318,7 +318,7 @@ $ curl -sv --header "Authorization: Bearer ${AUTH_TOKEN}" \ ... ``` -An authorised request for the wrong shape will fail: +An authorized request for the wrong shape will fail: ```console $ curl -sv --header "Authorization: Bearer ${AUTH_TOKEN}" \ diff --git a/examples/gatekeeper-auth/api/lib/api_web/authenticator.ex b/examples/gatekeeper-auth/api/lib/api_web/authenticator.ex index a0dacc1ecd..ff24471cb1 100644 --- a/examples/gatekeeper-auth/api/lib/api_web/authenticator.ex +++ b/examples/gatekeeper-auth/api/lib/api_web/authenticator.ex @@ -17,7 +17,7 @@ defmodule ApiWeb.Authenticator do request end - def authorise(shape, request_headers) do + def authorize(shape, request_headers) do header_map = Enum.into(request_headers, %{}) header_key = String.downcase(@header_name) diff --git a/examples/gatekeeper-auth/api/lib/api_web/plugs/auth/authorise_shape_access.ex b/examples/gatekeeper-auth/api/lib/api_web/plugs/auth/authorise_shape_access.ex index c42e0d441c..3d96c5ade6 100644 --- a/examples/gatekeeper-auth/api/lib/api_web/plugs/auth/authorise_shape_access.ex +++ b/examples/gatekeeper-auth/api/lib/api_web/plugs/auth/authorise_shape_access.ex @@ -1,4 +1,4 @@ -defmodule ApiWeb.Plugs.Auth.AuthoriseShapeAccess do +defmodule ApiWeb.Plugs.Auth.AuthorizeShapeAccess do @moduledoc """ This plug allows the dummy user to access any shape. @@ -11,7 +11,7 @@ defmodule ApiWeb.Plugs.Auth.AuthoriseShapeAccess do def init(opts), do: opts def call(%{assigns: %{current_user: user, shape: shape}} = conn, _opts) do - case is_authorised(user, shape) do + case is_authorized(user, shape) do true -> conn @@ -22,9 +22,9 @@ defmodule ApiWeb.Plugs.Auth.AuthoriseShapeAccess do end end - defp is_authorised(:dummy, _) do + defp is_authorized(:dummy, _) do true end - defp is_authorised(_, _), do: false + defp is_authorized(_, _), do: false end diff --git a/examples/gatekeeper-auth/api/lib/api_web/plugs/auth/verify_token.ex b/examples/gatekeeper-auth/api/lib/api_web/plugs/auth/verify_token.ex index 2760efc005..e95f7233eb 100644 --- a/examples/gatekeeper-auth/api/lib/api_web/plugs/auth/verify_token.ex +++ b/examples/gatekeeper-auth/api/lib/api_web/plugs/auth/verify_token.ex @@ -15,7 +15,7 @@ defmodule ApiWeb.Plugs.Auth.VerifyToken do def init(opts), do: opts def call(%{assigns: %{shape: shape}, req_headers: headers} = conn, _opts) do - case Authenticator.authorise(shape, headers) do + case Authenticator.authorize(shape, headers) do {:error, message} when message in [:invalid, :missing] -> conn |> send_resp(401, "Unauthorized") diff --git a/examples/gatekeeper-auth/api/lib/api_web/router.ex b/examples/gatekeeper-auth/api/lib/api_web/router.ex index 7aecf1a3f0..da6c11858f 100644 --- a/examples/gatekeeper-auth/api/lib/api_web/router.ex +++ b/examples/gatekeeper-auth/api/lib/api_web/router.ex @@ -9,7 +9,7 @@ defmodule ApiWeb.Router do plug AssignShape plug Auth.AuthenticateUser - plug Auth.AuthoriseShapeAccess + plug Auth.AuthorizeShapeAccess end pipeline :proxy do @@ -22,7 +22,7 @@ defmodule ApiWeb.Router do pipe_through :api # The gatekeeper endpoint at `POST /gatekeeper/:table` authenticates the user, - # authorises the shape access, generates a shape-scoped auth token and returns + # authorizes the shape access, generates a shape-scoped auth token and returns # this along with other config that an Electric client can use to stream the # shape directly from Electric. scope "/gatekeeper" do diff --git a/examples/gatekeeper-auth/api/test/api_web/authenticator_test.exs b/examples/gatekeeper-auth/api/test/api_web/authenticator_test.exs index 4f19a2a3dd..a856f663d2 100644 --- a/examples/gatekeeper-auth/api/test/api_web/authenticator_test.exs +++ b/examples/gatekeeper-auth/api/test/api_web/authenticator_test.exs @@ -16,7 +16,7 @@ defmodule ApiWeb.AuthenticatorTest do {:ok, shape} = Shape.from(%{"table" => "foo"}) headers = Authenticator.authenticate_shape(shape, nil) - assert Authenticator.authorise(shape, headers) + assert Authenticator.authorize(shape, headers) end test "validate token with params" do @@ -27,7 +27,7 @@ defmodule ApiWeb.AuthenticatorTest do }) headers = Authenticator.authenticate_shape(shape, nil) - assert Authenticator.authorise(shape, headers) + assert Authenticator.authorize(shape, headers) end end end diff --git a/examples/gatekeeper-auth/api/test/api_web/gatekeeper_test.exs b/examples/gatekeeper-auth/api/test/api_web/gatekeeper_test.exs index 67df0fdfe0..a1d8aa9855 100644 --- a/examples/gatekeeper-auth/api/test/api_web/gatekeeper_test.exs +++ b/examples/gatekeeper-auth/api/test/api_web/gatekeeper_test.exs @@ -54,7 +54,7 @@ defmodule ApiWeb.GatekeeperTest do {:ok, shape} = Shape.from(%{"table" => table}) - assert Authenticator.authorise(shape, headers) + assert Authenticator.authorize(shape, headers) end end end diff --git a/examples/gatekeeper-auth/api/test/api_web/integration_test.exs b/examples/gatekeeper-auth/api/test/api_web/integration_test.exs index 59fa7237e0..dc26a647cc 100644 --- a/examples/gatekeeper-auth/api/test/api_web/integration_test.exs +++ b/examples/gatekeeper-auth/api/test/api_web/integration_test.exs @@ -17,7 +17,7 @@ defmodule ApiWeb.IntegrationTest do |> post("/gatekeeper/#{table}", where: where) |> json_response(200) - # Make an authorised shape request. + # Make an authorized shape request. assert [] = conn |> put_req_header("authorization", auth_header) diff --git a/examples/gatekeeper-auth/docs/NOTES.md b/examples/gatekeeper-auth/docs/NOTES.md index 39da05e4ae..f2ceba13cf 100644 --- a/examples/gatekeeper-auth/docs/NOTES.md +++ b/examples/gatekeeper-auth/docs/NOTES.md @@ -1,12 +1,12 @@ ### Seperating the concerns -With the [proxy auth pattern](https://electric-sql.com/docs/guides/auth#proxy), the proxy performs authorisation logic on the shape request path. Performing this logic can be expensive. You may not want to query the database or call an external service every time you make a shape request [1]. It can also be a security concern. Do you want your database exposed to your edge worker? +With the [proxy auth pattern](https://electric-sql.com/docs/guides/auth#proxy), the proxy performs authorization logic on the shape request path. Performing this logic can be expensive. You may not want to query the database or call an external service every time you make a shape request [1]. It can also be a security concern. Do you want your database exposed to your edge worker? The gatekeeper pattern avoids these concerns by separating the steps of: -1. running authorisation logic to determine whether a user should be able to access a shape +1. running authorization logic to determine whether a user should be able to access a shape 2. authorising a shape request to Electric -Specifically, the gatekeeper endpoint is designed to perform authorisation logic *once* when generating the shape-scoped token. The proxy endpoint can then authorise multiple shape requests by validating the token against the shape definition in the request, without needing to know or do anything else. +Specifically, the gatekeeper endpoint is designed to perform authorization logic *once* when generating the shape-scoped token. The proxy endpoint can then authorize multiple shape requests by validating the token against the shape definition in the request, without needing to know or do anything else. -[1] Proxies can mitigate this in a number of ways, for example with some kind of local cache of client credentials against authorisation state. +[1] Proxies can mitigate this in a number of ways, for example with some kind of local cache of client credentials against authorization state. diff --git a/website/blog/posts/2023-09-20-introducing-electricsql-v0.6.md b/website/blog/posts/2023-09-20-introducing-electricsql-v0.6.md index 3c232df83f..f6c0b84889 100644 --- a/website/blog/posts/2023-09-20-introducing-electricsql-v0.6.md +++ b/website/blog/posts/2023-09-20-introducing-electricsql-v0.6.md @@ -66,7 +66,7 @@ In fact, one way of understanding ElectricSQL is "GraphQL in SQL". Because why w ### Postgres-centric migrations -Electric replicates data into and out of Postgres using standard built-in logical replication. This allows Postgres to be used as the source of both the [DDL schema for the local-apps](https://legacy.electric-sql.com/docs/usage/data-modelling/migrations) and the [DDLX rules](https://legacy.electric-sql.com/docs/api/ddlx) that authorise data access: +Electric replicates data into and out of Postgres using standard built-in logical replication. This allows Postgres to be used as the source of both the [DDL schema for the local-apps](https://legacy.electric-sql.com/docs/usage/data-modelling/migrations) and the [DDLX rules](https://legacy.electric-sql.com/docs/api/ddlx) that authorize data access: ```sql -- Define and evolve your DDL schema as normal. diff --git a/website/docs/guides/auth.md b/website/docs/guides/auth.md index 730ee99d52..f9acfc555e 100644 --- a/website/docs/guides/auth.md +++ b/website/docs/guides/auth.md @@ -17,9 +17,9 @@ Electric [syncs data over HTTP](/docs/api/http). This means that (unlike other s ## Recommended pattern -The main pattern we recommend is to authorise at the [Shape](/docs/guides/shapes) level. +The main pattern we recommend is to authorize at the [Shape](/docs/guides/shapes) level. -So when you make a request to sync a shape, route it via your API, validate the user credentials and shape parameters, and then only proxy the data through if authorised. +So when you make a request to sync a shape, route it via your API, validate the user credentials and shape parameters, and then only proxy the data through if authorized.
diff --git a/website/docs/integrations/cloudflare.md b/website/docs/integrations/cloudflare.md index 86569eab2a..aa85d7a0ca 100644 --- a/website/docs/integrations/cloudflare.md +++ b/website/docs/integrations/cloudflare.md @@ -33,7 +33,7 @@ Electric's [HTTP API caching](/docs/api/http#caching) will work out of the box. ### Workers -You can also use [Cloudflare Workers](https://workers.cloudflare.com) in front of the CDN to handle concerns like authorisation and routing. +You can also use [Cloudflare Workers](https://workers.cloudflare.com) in front of the CDN to handle concerns like authorization and routing. #### Auth example diff --git a/website/docs/integrations/phoenix.md b/website/docs/integrations/phoenix.md index 28f8f0a4e9..13039420dc 100644 --- a/website/docs/integrations/phoenix.md +++ b/website/docs/integrations/phoenix.md @@ -51,7 +51,7 @@ defmodule MyAppWeb.Router do end ``` -Because the shape is defined in your Router, it can use Plug middleware for authorisation. See [Parameter-based shapes](https://hexdocs.pm/electric_phoenix/0.1.0-dev-2/Electric.Phoenix.Gateway.Plug.html#module-parameter-based-shapes) for more details. +Because the shape is defined in your Router, it can use Plug middleware for authorization. See [Parameter-based shapes](https://hexdocs.pm/electric_phoenix/0.1.0-dev-2/Electric.Phoenix.Gateway.Plug.html#module-parameter-based-shapes) for more details. ### LiveView sync From 8137b92b243c117e603e4f737f217bcb1d13b2bd Mon Sep 17 00:00:00 2001 From: James Arthur Date: Fri, 15 Nov 2024 15:56:26 +0100 Subject: [PATCH 03/22] examples: rename `auth` to `proxy-auth`. --- examples/auth/README.md | 29 --------------- examples/{auth => proxy-auth}/.eslintignore | 0 examples/{auth => proxy-auth}/.eslintrc.cjs | 0 examples/{auth => proxy-auth}/.gitignore | 0 examples/{auth => proxy-auth}/.prettierrc | 0 examples/proxy-auth/README.md | 35 ++++++++++++++++++ examples/{auth => proxy-auth}/app/App.css | 0 examples/{auth => proxy-auth}/app/Example.css | 0 examples/{auth => proxy-auth}/app/layout.tsx | 0 examples/{auth => proxy-auth}/app/page.tsx | 0 .../app/shape-proxy/route.ts | 0 examples/{auth => proxy-auth}/app/style.css | 0 .../001-create-users-table-with-examples.sql | 0 examples/{auth => proxy-auth}/index.html | 0 examples/{auth => proxy-auth}/package.json | 6 +-- .../{auth => proxy-auth}/public/favicon.ico | Bin examples/{auth => proxy-auth}/public/logo.svg | 0 .../{auth => proxy-auth}/public/robots.txt | 0 examples/{auth => proxy-auth}/tsconfig.json | 0 pnpm-lock.yaml | 2 +- 20 files changed, 39 insertions(+), 33 deletions(-) delete mode 100644 examples/auth/README.md rename examples/{auth => proxy-auth}/.eslintignore (100%) rename examples/{auth => proxy-auth}/.eslintrc.cjs (100%) rename examples/{auth => proxy-auth}/.gitignore (100%) rename examples/{auth => proxy-auth}/.prettierrc (100%) create mode 100644 examples/proxy-auth/README.md rename examples/{auth => proxy-auth}/app/App.css (100%) rename examples/{auth => proxy-auth}/app/Example.css (100%) rename examples/{auth => proxy-auth}/app/layout.tsx (100%) rename examples/{auth => proxy-auth}/app/page.tsx (100%) rename examples/{auth => proxy-auth}/app/shape-proxy/route.ts (100%) rename examples/{auth => proxy-auth}/app/style.css (100%) rename examples/{auth => proxy-auth}/db/migrations/001-create-users-table-with-examples.sql (100%) rename examples/{auth => proxy-auth}/index.html (100%) rename examples/{auth => proxy-auth}/package.json (80%) rename examples/{auth => proxy-auth}/public/favicon.ico (100%) rename examples/{auth => proxy-auth}/public/logo.svg (100%) rename examples/{auth => proxy-auth}/public/robots.txt (100%) rename examples/{auth => proxy-auth}/tsconfig.json (100%) diff --git a/examples/auth/README.md b/examples/auth/README.md deleted file mode 100644 index 49a89e6ebb..0000000000 --- a/examples/auth/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Auth example - -Example showing how an API can proxy shape requests and authenticate the client -and either deny access, give full access, or modify the shape request (in this -case, by adding a where clause) so the client sees only data they have permission -to see. - -https://github.com/user-attachments/assets/eab62c23-513c-4ed8-a6fa-249b761f8667 - -## Setup - -1. Make sure you've installed all dependencies for the monorepo and built packages - -From the root directory: - -- `pnpm i` -- `pnpm run -r build` - -2. Start the docker containers - -`pnpm run backend:up` - -3. Start the dev server - -`pnpm run dev` - -4. When done, tear down the backend containers so you can run other examples - -`pnpm run backend:down` diff --git a/examples/auth/.eslintignore b/examples/proxy-auth/.eslintignore similarity index 100% rename from examples/auth/.eslintignore rename to examples/proxy-auth/.eslintignore diff --git a/examples/auth/.eslintrc.cjs b/examples/proxy-auth/.eslintrc.cjs similarity index 100% rename from examples/auth/.eslintrc.cjs rename to examples/proxy-auth/.eslintrc.cjs diff --git a/examples/auth/.gitignore b/examples/proxy-auth/.gitignore similarity index 100% rename from examples/auth/.gitignore rename to examples/proxy-auth/.gitignore diff --git a/examples/auth/.prettierrc b/examples/proxy-auth/.prettierrc similarity index 100% rename from examples/auth/.prettierrc rename to examples/proxy-auth/.prettierrc diff --git a/examples/proxy-auth/README.md b/examples/proxy-auth/README.md new file mode 100644 index 0000000000..4c691dcc36 --- /dev/null +++ b/examples/proxy-auth/README.md @@ -0,0 +1,35 @@ +# Electric - Proxy auth example + +This example implements the [proxy auth](https://electric-sql.com/docs/guides/auth#gatekeeper-auth) pattern for [securing access](https://electric-sql.com/docs/guides/auth) to the [Electric sync service](https://electric-sql.com/product/sync). + +It demonstrates how an API can proxy and authorise shape requests, by either: + +- denying access +- allowing full access; or +- modifying the shape request (in this case, by adding a where clause) so the client only sees data they have permission to see + +https://github.com/user-attachments/assets/eab62c23-513c-4ed8-a6fa-249b761f8667 + +> [!TIP] +> You can see an alternative pattern for auth in the [gatekeeper-auth](../gatekeeper-auth) example. + +## Setup + +1. Make sure you've installed all dependencies for the monorepo and built packages + +From the root directory: + +- `pnpm i` +- `pnpm run -r build` + +2. Start the docker containers + +`pnpm run backend:up` + +3. Start the dev server + +`pnpm run dev` + +4. When done, tear down the backend containers so you can run other examples + +`pnpm run backend:down` diff --git a/examples/auth/app/App.css b/examples/proxy-auth/app/App.css similarity index 100% rename from examples/auth/app/App.css rename to examples/proxy-auth/app/App.css diff --git a/examples/auth/app/Example.css b/examples/proxy-auth/app/Example.css similarity index 100% rename from examples/auth/app/Example.css rename to examples/proxy-auth/app/Example.css diff --git a/examples/auth/app/layout.tsx b/examples/proxy-auth/app/layout.tsx similarity index 100% rename from examples/auth/app/layout.tsx rename to examples/proxy-auth/app/layout.tsx diff --git a/examples/auth/app/page.tsx b/examples/proxy-auth/app/page.tsx similarity index 100% rename from examples/auth/app/page.tsx rename to examples/proxy-auth/app/page.tsx diff --git a/examples/auth/app/shape-proxy/route.ts b/examples/proxy-auth/app/shape-proxy/route.ts similarity index 100% rename from examples/auth/app/shape-proxy/route.ts rename to examples/proxy-auth/app/shape-proxy/route.ts diff --git a/examples/auth/app/style.css b/examples/proxy-auth/app/style.css similarity index 100% rename from examples/auth/app/style.css rename to examples/proxy-auth/app/style.css diff --git a/examples/auth/db/migrations/001-create-users-table-with-examples.sql b/examples/proxy-auth/db/migrations/001-create-users-table-with-examples.sql similarity index 100% rename from examples/auth/db/migrations/001-create-users-table-with-examples.sql rename to examples/proxy-auth/db/migrations/001-create-users-table-with-examples.sql diff --git a/examples/auth/index.html b/examples/proxy-auth/index.html similarity index 100% rename from examples/auth/index.html rename to examples/proxy-auth/index.html diff --git a/examples/auth/package.json b/examples/proxy-auth/package.json similarity index 80% rename from examples/auth/package.json rename to examples/proxy-auth/package.json index e8886ef969..e4d198f7fb 100644 --- a/examples/auth/package.json +++ b/examples/proxy-auth/package.json @@ -1,13 +1,13 @@ { - "name": "@electric-examples/auth-example", + "name": "@electric-examples/proxy-auth", "private": true, "version": "0.0.1", "author": "ElectricSQL", "license": "Apache-2.0", "type": "module", "scripts": { - "backend:up": "PROJECT_NAME=auth-example pnpm -C ../../ run example-backend:up && pnpm db:migrate", - "backend:down": "PROJECT_NAME=auth-example pnpm -C ../../ run example-backend:down", + "backend:up": "PROJECT_NAME=proxy-auth pnpm -C ../../ run example-backend:up && pnpm db:migrate", + "backend:down": "PROJECT_NAME=proxy-auth pnpm -C ../../ run example-backend:down", "db:migrate": "dotenv -e ../../.env.dev -- pnpm exec pg-migrations apply --directory ./db/migrations", "dev": "next dev --turbo -p 5173", "start": "next start", diff --git a/examples/auth/public/favicon.ico b/examples/proxy-auth/public/favicon.ico similarity index 100% rename from examples/auth/public/favicon.ico rename to examples/proxy-auth/public/favicon.ico diff --git a/examples/auth/public/logo.svg b/examples/proxy-auth/public/logo.svg similarity index 100% rename from examples/auth/public/logo.svg rename to examples/proxy-auth/public/logo.svg diff --git a/examples/auth/public/robots.txt b/examples/proxy-auth/public/robots.txt similarity index 100% rename from examples/auth/public/robots.txt rename to examples/proxy-auth/public/robots.txt diff --git a/examples/auth/tsconfig.json b/examples/proxy-auth/tsconfig.json similarity index 100% rename from examples/auth/tsconfig.json rename to examples/proxy-auth/tsconfig.json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 677653673a..1845520e35 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,7 +15,7 @@ importers: specifier: ^7.4.2 version: 7.4.2 - examples/auth: + examples/proxy-auth: dependencies: '@electric-sql/client': specifier: workspace:* From 8aee583e9e9e72d12003434826981c02d90f0a5f Mon Sep 17 00:00:00 2001 From: James Arthur Date: Fri, 15 Nov 2024 15:57:35 +0100 Subject: [PATCH 04/22] docs: update auth guide. --- examples/gatekeeper-auth/README.md | 6 +- examples/gatekeeper-auth/docs/NOTES.md | 2 +- examples/gatekeeper-auth/package.json | 2 +- website/docs/guides/auth.md | 172 +++++++++++++----- website/public/img/icons/auth.svg | 9 + .../docs/guides/auth/authorizing-proxy.jpg | Bin 0 -> 186890 bytes .../docs/guides/auth/authorizing-proxy.png | Bin 0 -> 37741 bytes .../docs/guides/auth/authorizing-proxy.sm.png | Bin 0 -> 38647 bytes .../docs/guides/auth/gatekeeper-flow.dark.png | Bin 0 -> 76138 bytes .../img/docs/guides/auth/gatekeeper-flow.jpg | Bin 0 -> 216435 bytes .../img/docs/guides/auth/gatekeeper-flow.png | Bin 0 -> 67196 bytes 11 files changed, 146 insertions(+), 45 deletions(-) create mode 100644 website/public/img/icons/auth.svg create mode 100644 website/static/img/docs/guides/auth/authorizing-proxy.jpg create mode 100644 website/static/img/docs/guides/auth/authorizing-proxy.png create mode 100644 website/static/img/docs/guides/auth/authorizing-proxy.sm.png create mode 100644 website/static/img/docs/guides/auth/gatekeeper-flow.dark.png create mode 100644 website/static/img/docs/guides/auth/gatekeeper-flow.jpg create mode 100644 website/static/img/docs/guides/auth/gatekeeper-flow.png diff --git a/examples/gatekeeper-auth/README.md b/examples/gatekeeper-auth/README.md index 5f7cce8094..35457155ec 100644 --- a/examples/gatekeeper-auth/README.md +++ b/examples/gatekeeper-auth/README.md @@ -1,7 +1,7 @@ -# Electric Gatekeeper Auth Example +# Electric - Gatekeeper auth example -This example demonstrates a number of ways of implementing the [Gatekeeper auth pattern](https://electric-sql.com/docs/guides/auth#gatekeeper) for securing access to the [Electric sync service](https://electric-sql.com/product/sync). +This example demonstrates a number of ways of implementing the [gatekeeper auth](https://electric-sql.com/docs/guides/auth#gatekeeper-auth) pattern for [securing access](https://electric-sql.com/docs/guides/auth) to the [Electric sync service](https://electric-sql.com/product/sync). It includes: @@ -11,6 +11,8 @@ It includes: - [`./caddy`](./caddy) a Caddy web server as a reverse proxy - [`./edge`](./edge) an edge function that you can run in front of a CDN +> [!TIP] +> You can see an alternative pattern for auth in the [proxy-auth](../proxy-auth) example. ## How it works diff --git a/examples/gatekeeper-auth/docs/NOTES.md b/examples/gatekeeper-auth/docs/NOTES.md index f2ceba13cf..ff4d18f8a1 100644 --- a/examples/gatekeeper-auth/docs/NOTES.md +++ b/examples/gatekeeper-auth/docs/NOTES.md @@ -1,6 +1,6 @@ ### Seperating the concerns -With the [proxy auth pattern](https://electric-sql.com/docs/guides/auth#proxy), the proxy performs authorization logic on the shape request path. Performing this logic can be expensive. You may not want to query the database or call an external service every time you make a shape request [1]. It can also be a security concern. Do you want your database exposed to your edge worker? +With the [proxy auth pattern](https://electric-sql.com/docs/guides/auth#proxy-auth), the proxy performs authorization logic on the shape request path. Performing this logic can be expensive. You may not want to query the database or call an external service every time you make a shape request [1]. It can also be a security concern. Do you want your database exposed to your edge worker? The gatekeeper pattern avoids these concerns by separating the steps of: diff --git a/examples/gatekeeper-auth/package.json b/examples/gatekeeper-auth/package.json index 74811f78f6..fc5a7ef1a9 100644 --- a/examples/gatekeeper-auth/package.json +++ b/examples/gatekeeper-auth/package.json @@ -1,5 +1,5 @@ { - "name": "@electric-examples/gatekeeper-auth-example", + "name": "@electric-examples/gatekeeper-auth", "private": true, "version": "0.0.1" } diff --git a/website/docs/guides/auth.md b/website/docs/guides/auth.md index f9acfc555e..e9851e2690 100644 --- a/website/docs/guides/auth.md +++ b/website/docs/guides/auth.md @@ -1,51 +1,92 @@ --- title: Auth - Guide description: >- - How to authenticate users and authorize data access with Electric. -outline: deep + How to do authentication and authorization with Electric. +outline: [2, 3] --- + + # Auth -How to authenticate users and authorize data access. + +
-Electric [syncs data over HTTP](/docs/api/http). This means that (unlike other sync engines where you have to use their specific APIs for auth) with Electric you can authenticate and authorize data access the same way you do for normal web resources like API endpoints. +How to do auth with Electric. -## Recommended pattern +Including examples for [proxy](#proxy-auth) and [gatekeeper](#gatekeeper-auth) auth. -The main pattern we recommend is to authorize at the [Shape](/docs/guides/shapes) level. +
-So when you make a request to sync a shape, route it via your API, validate the user credentials and shape parameters, and then only proxy the data through if authorized. +## It's all HTTP -
- - - Illustration of the proxied auth flow - -
+The golden rule with Electric is that it's [all just HTTP](/docs/api/http). -For example, you could implement with the following steps: +So when it comes to auth, you can use existing primitives, such as your API, middleware and external authorization services. -1. add an `Authorization` header to your [`GET /shape` request](/docs/api/http#syncing-shapes) -2. use the header to check that the client exists and has access to the requested data -3. if not, return a `401` or `403` status to tell the client it doesn't have access -4. if the client does have access, proxy the request to Electric and stream the response back to the client -### Using the Typescript client +### Shapes are resources + +With Electric, you sync data using [Shapes](/docs/guides/shapes) and shapes are just resources. + +You access them by making a request to `GET /v1/shape`, with the [shape definition](/docs/guides/shapes#defining-shapes) in the query string (`?table=items`, etc.). You can authorise access to them exactly the same way you would any other web resource. + +### Requests can be proxied + +When you make a request to Electric, you can route it through an HTTP proxy or middleware stack. This allows you to authorise the request before it reaches Electric. -When using the [Typescript client](/docs/api/clients/typescript), you can pass a `fetchWrapper` to the Electric client which adds your `Authorization` header when Electric requests shape data. + + + Illustration of an authorzing proxy + -#### Sample code +You can proxy the request in your cloud, or at the edge, [in-front of a CDN](#cdn-proxy). Your auth logic can query your database, or call an external service. It's all completely up-to-you. -In the client: +### Rules are optional + +You *don't* have to codify your auth logic into a database rule system. There's no need to use database rules to secure a sync engine when it runs over standard HTTP. + +## Patterns + +The two patterns we recommend and describe below, with code and examples, are: + +- [proxy auth](#proxy-auth) — authorising Shape requests using a proxy +- [gatekeeper auth](#gatekeeper-auth) — using your API to generate shape-scoped access tokens + +### Proxy auth + +> [!Warning] GitHub example +> See the [proxy-auth example](https://github.com/electric-sql/electric/tree/main/examples/proxy-auth) on GitHub for an example that implements this pattern. + +The simplest pattern is to authorise Shape requests using a reverse-proxy. + +The proxy can be your API, or a seperate proxy service or edge-function. When you make a request to sync a shape, route it via your API/proxy, validate the user credentials and shape parameters, and then only proxy the data through if authorized. + +For example: + +1. add an `Authorization` header to your [`GET /v1/shape`](/docs/api/http#syncing-shapes) request +2. use the header to check that the client exists and has access to the shape +3. if not, return a `401` or `403` status to tell the client it doesn't have access +4. if the client does have access, proxy the request to Electric and stream the response back to the client + +#### Example + +When using the [Typescript client](/docs/api/clients/typescript), you can pass in [`headers` option](/docs/api/clients/typescript#options) to add an `Authorization` header. ```tsx const usersShape = (): ShapeStreamOptions => { @@ -120,26 +161,75 @@ export async function GET( } ``` -### Integrating external auth services +### Gatekeeper auth + +> [!Warning] GitHub example +> See the [gatekeeper-auth example](https://github.com/electric-sql/electric/tree/main/examples/proxy-auth) on GitHub for an example that implements this pattern. + +The Gatekeeper pattern works as follows: + +1. post to a gatekeeper endpoint in your API to generate a shape-scoped auth token +2. make shape requests to Electric via an authorising proxy that validates the auth token against the request parameters + +The auth token should include a claim containing the shape definition. This allows the proxy to authorize the shape request by comparing the shape claim signed into the token with the [shape defined in the request parameters](/docs/quickstart#http-api). + +This keeps your main auth logic: + +- in your API (in the gatekeeper endpoint) where it's natural to do things like query the database and call external services +- running *once* when generating a token, rather than on the "hot path" of every shape request in your authorising proxy + +#### Example + +The [GitHub example](https://github.com/electric-sql/electric/tree/main/examples/gatekeeper-auth) provides an [`./api`](https://github.com/electric-sql/electric/tree/main/examples/gatekeeper-auth/api) service for generating auth tokens and three options for validating those auth tokens when proxying requests to Electric: + +1. [`./api`](https://github.com/electric-sql/electric/tree/main/examples/gatekeeper-auth/api) the API itself +2. [`./caddy`](https://github.com/electric-sql/electric/tree/main/examples/gatekeeper-auth/caddy) a Caddy web server as a reverse proxy +3. [`./edge`](https://github.com/electric-sql/electric/tree/main/examples/gatekeeper-auth/edge) an edge function that you can run in front of a CDN + +The API is an [Elixir/Phoenix](/docs/integrations/phoenix) web application that [exposes](https://github.com/electric-sql/electric/blog/main/examples/gatekeeper-auth/api/lib/api_web/router.ex) two endpoints: -Note that with this pattern, if you need it to, the auth endpoint that proxies the request to the Electric shape API can call out to a seperate auth service. So if you need to integrate an external auth system, you can. +1. a gatekeeper endpoint at `POST /gatekeeper/:table` +2. a proxy endpoint at `GET /proxy/v1/shape`
- - - Illustration of the proxied auth flow with an external auth service + Illustration of the gatekeeper request flow
-## Alternative auth modes +##### Gatekeeper endpoint + +1. the user makes a `POST` request to `POST /gatekeeper/:table` with some authentication credentials and a shape definition in the request parameters; the gatekeeper is then responsible for authorising the user's access to the shape +2. if access is granted, the gatekeeper generates a shape-scoped auth token and returns it to the client +3. the client can then use the auth token when connecting to the Electric HTTP API, via the proxy endpoint + +##### Proxy endpoint + +4. the proxy validates the JWT and verifies that the shape claim in the token matches the shape being requested; if so it sends the request on to Electric +5. Electric then handles the request as normal +6. sending a response back *through the proxy* to the client + +The client can then process the data and make additional requests using the same token (step 3). If the token expires or is rejected, the client starts again (step 1). + +> [!Tip] Interactive walkthrough +> See [How to run](https://github.com/electric-sql/electric/blob/main/examples/gatekeeper-auth/README.md#how-to-run) on GitHub for an interactive walkthrough of the three different gatekeeper-auth example proxy options. + +## Notes + +### External services + +Both proxy and gatekeeper patterns work well with external auth services. + +If you're using an external authentication service, such as [Auth0](https://auth0.com), to generate user credentials, for example, to generate a JWT, you just need to make sure that you can decode the JWT in your proxy or gatekeeper endpoint. + +If you're using an external authorization service to authorize a user's access to a shape, then you can call this whereever you run your authorization logic. For proxy auth this is the proxy. For gatekeeper auth this is the gatekeeper endpoint. + +Note that if you're using a distributed auth service to ensure consistent distributed auth, such as [Authzed](https://authzed.com/), then this works best with the proxy auth pattern. This is because you explicitly *want* to authorize the user each shape request, as opposed to the gatekeeper generating a token that can potentially become stale. -We have a GitHub Discussions label for [auth feature requests](https://github.com/electric-sql/electric/discussions?discussions_q=label%3Aauth). This includes: +### CDN <-> Proxy -- [RLS support](https://github.com/electric-sql/electric/discussions/1587) -- [Token-based auth](https://github.com/electric-sql/electric/discussions/1674) +If you're deploying Electric [behind a CDN](/docs/guides/deployment#caching-proxy), then it's best to run your authorising proxy at the edge, between your CDN and your user. Both proxy and gatekeeper patterns work well for this. -If you would like or need alternative strategies for auth, please upvote and/or contribute to the discussions there. +The gatekeeper pattern is ideal because it minimises the logic that your proxy needs to perform at the edge and minimises the network and database access that you need to provide to your edge worker. See the [edge function](https://github.com/electric-sql/electric/tree/main/examples/gatekeeper-auth/edge) proxy option in the gatekeeper example for an example designed to run at the edge on [Supabase Edge Functions](/docs/integrations/supabase). \ No newline at end of file diff --git a/website/public/img/icons/auth.svg b/website/public/img/icons/auth.svg new file mode 100644 index 0000000000..849e2a31a2 --- /dev/null +++ b/website/public/img/icons/auth.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/website/static/img/docs/guides/auth/authorizing-proxy.jpg b/website/static/img/docs/guides/auth/authorizing-proxy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f24869e3c36042f3358f1310803640bb6b3c5c5 GIT binary patch literal 186890 zcmeEv2_TgF-v47M(PD{8WE7GlC0mhcLn=v%P>mvzkYp?75g|*7lF~9ok}Q**k|A3u z30cQ7c3EdE<6&l=`Tv}A-}k+@bnbi4d+z(*bN@5vOid5-Jiq0;f4`sakKM?oKtlWU z4D=u_E(p2>{)5;Z&^=vGds_%HG=$be5VQcA&ov+70iU=aZt#c5Up|8`aIJ*q{c;_G zOt~cf^Yclrb^rDILG}>uUw#MN^OqNR3b@zo^Jf3%c>>%Yek3wHpg*Amk>Ac^3`R@%O zyYTEnNO%FS_CjwSt~C(1Fc*(77rO+)fTz#n`sMY@*T5fK+&sMV=JPG!7gz{>AxjA2 z=HlVu=H;0;Z}u@1YQNUi zH#9aicXW1j_w@Gle;c5UjZaL{r;zEH*?EEW{B>I3&tGTu-MoasytsLJd3gC|=f%bC zF*|W#-g&Dx&llNg%y-IV=^B-*3q*HCJWVU&m)UZdDt7u}wZJl2)ebq@?9_gl*?(_h ze!pvG|2eV$nim<`4TyC1#SQ-F<>uz*1%u}W+cj_YHJ@+(FE75oy!d~43CzA0{^yGg zZo&n=$-~1l5B$Gq0pEf}|L}|53dk~--3%?_0SqC`BMf076kQh^0&(7)HTZX>0rr<) zX`I>~#)dMdhUyrauq_)Z-p$FI2_KZMQgjyk9!j`KVa_nOb3&k+((Xg zt;yFwrLM3c-a0lE7f97WMPtm^kZi+P0vqCc#D*$!;Fc;jlpBId41C>~%Eyp`i>qKt z3~Ay*+k7_k?)E-5)E$HE=p#`LaWk6EJaC6WJUnIy-&`ejveJWx75?MTFx2sOWG#^; zsd1G=eO5!7UP~%p60$vJPYE_8V5rE3BG1lwFEv#2lJQW(1#IK^Tnkk__q`mL z7y9FxQYmm+A5(h@1;W3h^3cE;U1MN))yu zhwX99+xkD=gh(rn4Yz%B6)h+Hu$q|IcxCmKm(XO4An7*`8=9Z&MIR=6QwU2 zW|GaOO+cYncKcWi&L1-cIHPu19Bv@Z+~|V9y4WXz>>3Ww{5$MDXAZwlhW##{spaqt zhu(f4z5P3^+wbC;uN^)}= zzmM;K7tb_sc!oo7zmMMj9oFr4@yuVqqklxK8I#xks+=h?$Z*29lQQZbFb*)+)#q=G z^>jTJ)2V3uvb9xTJGR->PoLkx?xNV97Zn;RY2-(5_R0?lBG+!C0$OZnH_;EKY8_!i zJty!%-Wo^*O_0*gT)E1DCeyLx?UfFk@UiGkxNkWk%_sKQ(C!CR81cx47Ob^7zo{ZJ z!A}>KCsD`P5VCHRCCPV#4N+t3u+wYeO!?XfIoMxER*1`}j|U?&10zd8T=iqx6raYQ zXf@E@)qB)WL&44Ny!e6Cm+l#xS|7dHDMKwQxPhcFPU9OeQrhYTi;)hRQ3-xajmS=w z=5w#Jh9|gn-yWvnABOjy| zoVq4!WlHN;*9xWhv$7ZNW_zqYvM(&oRdH1wInxghz@OI*u#`B`#5P2p4e?|dp+_6W zS=0o22`g2H2XV}opkg}-*O}tav;%E3YqA{3D;C}G{d_tnN+=Do>5>=wHrMo{?qM$D zTfkyC6NmE{T=*)B=;19ioCUQvr=wEJ!80{5%EL{Tw(!2`f|mHYN3YJPyiRQXRP63P z%o|?3az>*wXE>N~+}o4djA(QPm12dFs=WrhAMIZbG~|5YU%vXdu8ZOmEB>M~J%_&a z4xa>DMjNfs#gnWYtaE$QpdsryUew{FWVQCzWJ4FR7j;e}agU816?e*9%gV?Th&^&f z;{LJW&#ljv()pOX4A{`TRcz>KLlG8P^%5RSB@spgu-Wp%E>ujhBc=T+8xm#eQz}7xJKSdiPRsxnK0?4Ciav`IZ-p7Xg zePG9`#)b6DUrF|akeP-cHPVu^tz=k4{q>cg-UUqrc-nEv7W~OfoeD~%FbSeg);DHV8{JPwDw93MHcndWSEO&56yd%@NBQ&dwd=w&=I zR$K0+^z7NNLtOJi>1Ai8Ht82$(&y@end<-%?Txqn-(!H7ah@qH`ij4-HF=7DxfZr3 z1gvZbQZ-uQu=Kd@IW@~SFZ%9S?)$R0L+Sj;t`||_dcCGvt~vI+EU>*ok?`#9xlxT! zzH%h9}}oH;auuWUP{kJXdPKp=W@XiybSH}tw{d6wMXlS z&QC-(?#d16G}}?Q)ITh&;q#G(dw;ALgt6@c@GSLFuz}XLC#pn5jtk0}K?61qs zVm;1mZ?@~u1IxX%IHsgQ*y4ui$iUW~Wi^>1n)@xaZoQP#GtP^;*)rU`6Ke&R$P#9^ zZ{kOIE^AEzldNirh40A1T!mw7u87Z-eO^Iku@APU$4+^vt`BgW4Ve+m0l6c@7|>9}zE6U0u}(0e(Liru`I78X_S5ep#1v0gOKNYpTE5xt zeQ#bzdIo$-;&nPa@VQat{)r>Qwx`}`x%=sN-0+d0S^gq`wLKlZC1}O70@&`Etlyc; zIyVP$KX2%*)HS(LUpDblx@6SGqttr&Mm&Z#|7EFjMu#S!qqSH8HR6)9k0tBZ=7xMd zm*ZhvwJtmANyIygrj`KX^(r?$CA;@I)$lWT(ABcP?%tO{3W2!un6ydk?iYO|8TH@$Q-Q+RKR)PL??A8dTb z>5O%bmisNEMhuN#es=qUaJ*m^?m&E3yhh;yQFN973*p5%{&+qnAV7cBpj)5nV@y-7 zSaU_Z68~g67Q0M((LIKrbl{ zo|LR-ZjGyS7W-0@I`ZuCYS;Be5_eu_WG{Mdc2vv!p3~>nClQD>PLFB&ivSLnlEBSp zUYHfY;@|kC?>nlUu%ORyt?5?0o+@`~5tpXs`%3Q~Lyir=u>m+X0LKRSqg)}54ZyJh zI5q&s2H?a2IB@_@9DoxC;KTtqaR5#nfD;Gc|I7od~G(1(lCNz_9|O>q>n5H@sHaH&Jvvib=k-?6F}ZI<5}a#CFB4mK*E zX(^>)!a30^Gj7@N`nq>hFlB^)1VA)6i1OcHSRy%{Y=|kuLr()pA){b3{Cb+w9Vyvt z1Gl&PEI;N_^1nECrU#!K(2uZ=>3*NKPSbv2fJE@K5k4wSSM(@ktSkBtzs;5*L8g{3y!qj=M^SK%qs~S?S7B%{UX|PRT@*d z5^cs(J`<*MNsPOsDW!b}-wOuAb0CR=I$=bWfePq%R4u^`(%a;z?g?^tl-FhFkVqmG z#{18QRVL^P*_O?pI$CAQ6T`Hd6HO&{n+OKD2Mgd;V*Sy0ahiTPcEx~&BhzsaeQG5d zzu|CMmxFA?+agm_K3<`ntL)9M(pvH0V8$X%EF}ugBr?SWOYrNyVC~*i${z@SCq({u z#WksAKkq)L7~KG&o%2ePt9rI}sQc!>lH1ArN;E?ZXkA_5g{z#pO4_-#?UFnd55Ecj zaJOr3L2laJy<-yAADsF>z{uTyg4{QMEQ%r@tR4jc$o46Acyp>GPbwb zZ?nM*1-4m|AD!$xw#MXA&4zV;3pUEx!U|RVne%$Ct{3c$zf5{(6poR^LxUbtYZ2kD z?UqFrQ7!lbIV*K1OT*IjZ;_?;d+42c&&S)Pwgc7!qxumyQB1=!SNZ_EM~2!Lq&&%R zUW#a$L{==nV`R)%^_eXOlzU`nJ&CT5;u|~^`_>TACnZ?$?KMw!PE7c1*YqF0WMn4 zhU{_3ddzjE@e_QNN6f+dm}{$Z?$Z0ra_=s<)2bROAnms>*ql(|`p%Kd%W9whbmB=O z^>$ZzImUNeYk6=1uV8nzq-HZzAgB{7dKQz>+I#!Ce#ZjGp0{~*BXWLn8is4$ zU6=OjG_@OhNPV#5D9h3>YEqc|)xV(bFtf-Db>ySfc=1KZ@3ns7C-OGj0d#@u=z}73_lD&Pv0d zi7p$26<*sf6Wz(XTqFZ~r|()b_gG;R-}vFTxDNU9@S9l3?M?Vn?*+8SDU_6bBiOZ; zH`dH_mYK`EcMO+%6Q|P60S-Tf04SFZczOilS{yyY$_Zw!O8jtUVTDr4 z=x9m$ox^0AE%w!W#M7?6t#hsO?Ino=FzAoSP@BP7u&5xJ4V7M&YY+4`rd5?~yZZo^ z*uDL287XnUXj*Rb2U+I}N29J5@e1i%JlLe8MXVtq@_bAYA|0qSzo$re=}Nw#DX(YW zB9L7YUd~Q#SAwmA4Quzlid`U`8+D(VpuP6X^1Hk*urW~sY=~b++uH@l|oE!4fcL`zfYqc=2ONQp0e* z5oP$`{&gpf9i3sk+@09FP2vv@hDcY2EgngFoXn?&RLzYERg?!PIlt@pc2u!?BXdh< z_)YxgubE_|S$udzjkWJs{Ef1D1DPv+$;nF=Nc(O3+QiY~94*e#;v6l`(c&B}&e7r= zEza@9Ilef@7yp;^#jA0#pvwzWWSkxcZ2a4x3y32dTGX^S6nx@ySX|mpPF*Br-7-zG z%LzKC^DTZ%mi)%X+WFI91mW}RC!nFe@6X=Yi&zTTdD>99D4YQt@o%BV#K~jCG0DGBkQ!&VJ&=>{4o5M4Vm@Y-C*cgFbALga>#}i7#PHP{~6W* z_X?XX$P`&#-k#OKT-w(;Iz08%^Id~}8e&c#vQM|nk30$6HtD}Ofg;lwmJv-+iYkPMnh z2aZl)Dhe(=CnbS4=Q!-IdUe9kk^aDrL9OiBHXWgH>3rgdf|{F^HX5?-IhU^Jp?~E! zA03?2JO2_Jsw`zgEm>?R?;I*O$T$r+TPsxwM0x^4$GiEjc4T*79V61SjlS5}G|;pT z=ghLwPmiDZT`dX!z@t2*Ku0lw2b~E_MHo2_Q^N)@)ayQRLxg71nFm8y`!a7r=FpgT zi))7akUJ4e91b0tjqlGNz29?#oMXqMMe0x|6H+y+62zDXYYxtevrRvfjGXH~*BbvP zYcrb^3jr+zHHID7kZTYcx6F;Xzkv?^!Rvs8QZRxbaQcRjRdzLX&@|iQ1BlJ3pNc$U z&PUGQ?%-%Y7AZK|XL=Jmn!8>__dqreQV|=ne)fDO=pTJ6PMFZSff_!E{|ZwN!-yfN zt;fyenU$LU8Gw@f$SfUXm-WkVXv+0exX zv?tM^>9}C$$v=ZEdEzP9SygHj05`+bWNpJ2p3aPOttrYnMQ&<2&5nf8VvRe4y?a`# z(-U$5+f^GiE=2jg7{*{n3_ze(9SEEAfj|s(@MHx7f!{D+aPx?Fdj`2U3v;PvTEww6 zeREE)+xx1%6Thj%@!jx`CkFlG@U1i33&F;Y8A9y^|KigOl8-eGsA=|1OxJ(UtG*f}KoMFw7sbJ`j zQiALrkv@V#OW7+qUXD|)VXk2z)QZ{T*!`5@N)Wxu#i4DcnN|sE%e?tQw2y{%6s#!i zJGP?isKP~aLk-O3XVN3LLz@rQJ6K-EECTh`*;q&1j0hVVyIc%TYB&o@?$6_!NfUCQ zYyV^r=v?10c}CZRwU6KquZBy$((G8=9iRYEfW*v2P2dhPCY#9Oho`rn0_U8l!r$G^ zVJ1B`JkeyN7+sqXitS$xLY}@y!QndPW8k2OC5@~sxPL$R-k>0A5QnZxW1M3{U!vL2 z?RpIJHm)v8)CW8kLsQc>XG1%3VJ0_`4Q<5UX-C}4hm+XQE*xrf3?4JYP=~|GX6Q8% z^YJS%>KHWnMclv<2KXGD*jY6*56p`q22Z;%XU``1?@SkSIH5I&X=t9cmo@H zavY0tf#TR`Ooj9J0}TIeAheSPsYji*RhNb1*J#`S4Dve~}qU zSZ9r=HA73UHruP#=Vgsyfla80cf`Swiz9pjE)O4XB@U(*fI{=xf{PDPNG;j|PZYF0 z_tex=dR_%zLn9v=#@Kl-$`KBH^3)<_+r@Kg8}IbSHor9`+QrwJ^;h+%hpZ#2qOCs- zE)8nWqrjrx2Wg)}spLXB$*Denx5vC254CEr>Ycs1A+qf<>o@jUseBT(lf7Db(QOhQ z0>hF2NVP`GDgjR5ppfYutAxXwd@NR)x$6L79)y954zZ#BdvK2#P+i>>*pBjcP|QEG z7BhXc2A)i&3g$4(qM=uf31H_4y zvEh@u`Iuvj1~#+?!}$_tAvhGlVU0hzj7Vl)nH9jBX`i#GtQ}y}VJ+|NI)~YdD z-`T7ea->~CMZMv$O7f8|>4;wh@NnO(00!{FvPx$lfR{E@h)oZlU3cWpa=p*$$wQ!^ z#8x^sWF7SVn^-f7$TSQUQ&K*RE*N5=`gWnX@vxW)3Q4HJw9rQx4; ztvcE^&vgB6M|pcbUi{gH;RL3{Q#Pb<8_{AzE=1Pm0nx{W-s1qt7{I!R7sHpeQ;kQ1 z;f&}a2`@)&#V7ku(=Svi9-ztf5*$6Nr*H00kNaE^AME(VNw%9%xssI$Du6My8+w>$l+9_(JqO zmbw>*!8hQjMubpOPFq0N!V^;E9d_ij=O3KL47^wm&PYA=U{D5DmxvIf#|++%Eh!oo z5-cD1z3C#fkwp1C80v}bh-FT5TX{O>NqZ-;Qf^O(i>omYHv9wGiDz|nzT-3NV(0lv<<^R_1jk+49BRvo=jiV|yQT zU2uP$w20z+Q4!F>^($BkFdZiLlEyM(fsgc#^hNm>kn=hk0;uCO4meK}P0l#GhVcT8 z()`YwYvR|{#Gn0;5?@W8{*>2*+K_01c1$rgga$81O)uflW1#Lshz=J4JX(JQ++(K; zh%EqqUME(`hJ=H*vLS*hi3$vvu~VO`#(`h_!wABWpbS)i4Y8p;fKU~;0e^6VB1`>6 z94fQKl@00G!;~$+x+#7{=-ofZqcGo($85&YSf8mU*@t@908h{km~%l|*iX^u>LI|3 z025rj1{_QG89eKw0Jc-A3Q=T3ED>d9azBaria6068;*o+tzu5c19!U$xYJAA;rq(W z-A#asVKx*C<`?w{)b!jHg-f;*sK8g8k;P4$SHsh%aNn|YF|-w~gz0fGQZ51;S}O^j zse+qhhU?~72~zF35NzkBKJ0jJG|GcT4{ZGh)*B4x)MvP_Qkgj)X5MqnV19tVpIqEr zOTdNHn0k z|4KY9jISf5l@DVWLd-qsh%w`krz^1x^fi1a?$BvKiP>B-ZA0YG{(!ohe|et%ulu;JNAlo2j(#0@Y?6kMO;4(Q;Dn zGf?ym^ro|7+(PD2)+Ox9nH@mw@!W@7lv&#kus+3xC^lj%f3Q=(w_E=w|0V{)6flgj zGk8@tl!IX@=MeLfItYjYmU$m{13O&KhV~B+Zfoa#D^ABtg3+1ZWui@&g;J0F<9kj`yD?@bCASqUPVB-BKn7K&0xGuE|(w2dT3 zETt3Z?*oJ~WriOZOt=xTCr8T;{vwD=^^~+&^1g z61c}2aAf!m1`sqY9c<`D=_6QVk`)8WidUj*5I&HIpgQ#pyF77tU6=A`41Q;L&n9Zw zPWq^z1=+&;nLlH?E-sugA`li~qU4LJyoe2XGUp2aJxiY@3Qn1(L=ylqNtA#tbw+I8 zpU0s>TF0C=qOBLK#-;iy8Qb%fIj zDaD0mVL`8*Y5nj*97BYO1zY~{GDD|e6EIdUz!lnfZa`VlU_DssmJLmlOv4zs07T_P zN$OUBic-0L%Uk%L{tVOiZEnFo14OHT3f!~0Z7~~4+xQVU$Cu+_m7}aHh3#XjLA)_& z(w5c;^uSD7fT;0~xyB)Nm4Xe$is=AX!X7}sUeVN_c94dX+%xkT^S;)%+h@b1MQtX; z`%69aDjs*{qW~^urHsh+4eJ9#T%HYGBctN!62K6@wxnJHxO&G|XqV@WUFq$w4U4hLmyAboMCYJ{y`6#ufX(7co??b|%?l zR#r2v6FUmB184c~=OCMZGA2%Jc4)jO*-#9Sw--pPd}8so@AZh@awKV{AFnoX6(lkF zRA$qlGnel(?(2%0y@F%@skkQ`@Hb{*1Kkx&Kn70O8JsiD)vOo`uofVIy%HveqtWDg zw*vmlTZWih!SFJ`-oFaL%(%;sJpkhigp*hQ44Z{BLyHJw-T>A(biNup(J{~a=?|Bj z15nlNX1zx|^k;0Ub;TG4-{vCLKk^!;*OB1`^xxQQhqkl~OEy${ZE`HY2RGMMyiy3N z%EI+}rMCh`IwmrgRVBs%D>uI%uCPIu0MY3HY@o{lc)7VlNf@dN%zSRtwVYK1Pn0J# zbe_OB!$qY)ao@*=;il$+(MS<+!IzYL0fAf1^|(Lk+8l=9cUt7{z|-c5nhgmK`2*?> zpiK?CfxoAbHw>Ttlbf=thw#gM-mE--cT_f-(3EXFupBN}5-YiL{WL85pj~H?j12-h?u@cpWUTF>IAseQL&KzHX<174GRK&lAuka_u6LWk8PF{hNSK#CoIC+KtTr_&@d){!9%SI5kL|8YE6$fm4Gt zcPS{xSNMBvjX8LQKODR8C&eoy`oPxl%?2;dnaJe}FUojdbW}f49y0TDz+^QHJ?&`K zy#xz+8&M~3kR=y9uRGs$(I+aNZ{o$Hz2%+m3kkc8j}xzXyHUcgue7iC=1XoKbhjEF zca*>BIsWan`YA%$>zB`J&31?$wIq|3)IXotZG7Kxm~!~@$gY-=lA zjq`pfb3Fb$r>lwwv8CFhGWCwCjKD)h@{cte6W{YKDx}=@)bU5U1 z9H`!0#T&XNuuxNuAEMk;a8+!kI9BVLy?K-MD(mjd%+bIFN8Y@-_3~w$+`Y#TPo&|d z4aUcx2X~QpkeH!wsARpP+QNXtJ<^Z2u2?6%^xEkQ{F00YGXqsRAgI4nmv7siLtqk= z%V36t8i}Q8gj;7;2cRwAU+Zinb{W;7b`O*qLG9tyIjfOz*#xRn5U9JQjIzo|6Xh?= zeyzKGjR9r1{-mjuvt_qW4TiWtxjiUp2bH{=;TG`Wz-6Cb3wb4RzhJ^ao$du3YxB2B zBzjjPfKvQZ&!zZDn`Y4D%6}W&3vebQvq+6B0Mhtvh!$iv3yt740l--ok^_$M5Iead zV;1<8fkR|)B{&Fy(ZwySRMo{E7FihuMuu z{>&>(*-=sBBfqOA9rr&tS7)}x?_VF%T|t3GCjQQW64?5Lxv|w{m^lz1q~Hvrsb+9I zZglUb6@ZcorT;s{$iMS-XIQv%(iiKU{+ZCXHA<4iaGK7fnWcb^6yt~M9Dc+dy^ z`R+~WI5!P5;o_YPJcX<9)Z-_~t6p8A{Z8~@#pIpU;V{>an|9)^qdU@1>v0A->O z+84;sa)K$_a<02YQomVTRIhbeziz{rhSuuPi=$Tj)4tGMu^Ap*UlTwfX&@iEU@`#} z*qP)h|ITba+T36gUTh(|mDSj^DW{@K+wh|KN2|ycOMJOH`|gLmx_6}(=^i3g%?z9| z^-kLT=&LrsYRr=bK(DvVgSphnJ2|NGvE%#dFKo)LIWOEewBgw^VG6g{!_3s>N!bn~ zN;2r;bk-}UOnC-yjK(j&}6JNu}Qz9e8`@P(M1%fBh8!6 zcbUF@ePp3rPm^(P%ihb8l~X(A&&@M_7cz4*pQ*8^=AqAX^@Ao?2KJm)>d8aB2vXQn zIAom$bLsLEL7kbsUHj6rBbIIV*!4Oh#sBtL^3B+-*1WXfxTB{pXxNFdmcd0*FeSB_ zIP3-xEsJ^>y4v6eW3Kd3c(ev#=# zedf~W&d=C>aW<3{N9;(VE3&TXsNvgAD%E?7QxA5&Ya88_ZJBt3StYQdwZz(fZ@g^x zgtQB;C4nhMK#f1r>;Q_0VX+PMCQ+INr!_IbSo-`RHnh()<1_V3iS3>IV#gAU z*LqLCgp2Yq)I&--JZjHk7LN;dgv{)K$K+lM))%wrzns$kKWlcZlT^)Ehmm`B~ENehJ_H19W5*M_Plx6rlfqFmw6*VEa z=xe6Co>l#AUFq?Zngb)1Z|>MQJzd2mcU7LT4SWHQuQ9>blhVLPoo(kV^%7oM+#~u? zbsEkOJ8y-2zKrRe&_8p^qWj)VO`^%XP^6>bHJUQ$QuE+VSPnLvgeZTLM+MYU?9i(* z9%wLe54g`Nv~FAb(0#_~Hhd*Uv?+5KQ-1M=&arrH%Yj>ImbL@>qx@$NYM$;lco#BG zM3noO&m4da^2+uRXw2aNK*D|{=!a(FI|ouAE*s-#?ck$PZgKEo&PCm*F*VC8d#`(k zIc_O=+8`NyQ%^f)`dn(t26q|p{g+)Es7lkgok12iVnD$ zooZfyAvEZPnV{vS4MEV`87HSt#lcjDdp?oJsCE}(5$NRg$-AuJA#xiGkBDI2)D}Z8v^l8CO zV;8%kr4QO!is{4=?tDBzM_xFYTqQ`I)w_D%UAQgHpBF< z`m~$gjDB{mxo6;8vs`j?v|yx6@WMQv+X07+xCu%9m)nCzN&`uDN@3men^aUC{l9eh zYIgdn^d~L58|^V=+}K!BYqVwFo*m}*gA1W02J%nD;!`|bOLQcoq-kQ;>IJ1MlB+Xq z!Vj%j6atn0X#7kNmwK;2iYY{X`!*d~bb#7+nO$`>`hIfK){gAl77f9*b~_@^=;_s5 z-1p|Vs@BXMUNC$VndlqYqQ30 zSu0^4hUPE2X(kghe)%_hHvO%giYs~h1I#YoX}0mxZ(yT|jhH4rlz(B@X!9V-KTh+Y zGrr`Xa)@hWZeX~pHYv3kC}T6u$9>(%hP+qp(eyhyh8k!T>}=FI&4sXjhQ<7Q*Ky?K zOz~D1XFjGXjv#$NaB+^TU=*B{j`x>YOA2nD5aeQ-BZ*WZ!w3}%3eFM)%G%K~E55IB zc{=sYYBU7R=uU|>Qx}qk(6*J&ror5V4F=OEvUtsDYFld8wcarYo zeF_+);JCayo=jkxrYQr^`ONtoV#Xly0JJsmA)*TS^F;xo#>csT7qdgcn-87wCR8j4V+{uEw1bNM-+X0GPC##Hg2c{&R6iB00JTOpQjQ3eK z=pkj<;??ZBY`dRop0kxhk7nqBgG&x0N3s~5uJuSP9IG_z&|U&q;>RbLClRAlFFwSz zd&V6M99h0O-^fGYb*|?6BL%y8ig@i*A4axbr3L*xtB~}h9Z|$GcT&7lt=W*wLk)lrmOX{-EJ4frL8pWa*Xbg_O?S2B658+|@m#d8 z5&mw^2icH~-iXLZjh7^TZ4T)R`t9PxP0~fs4b7Fw$E# zss#04dm1KvX!>*m+^4&?fXCsDHQ^|g<==F$7~MX4I{U_O&--pJX)fA_T_4*> zcQD`EZ43w2BT{#J{z7m|M=TpMh zymic6xab`z?Q6RLs&0?X7W5tdw9+iB$#HUic#qJ)g|&wdggI&mrRrgCYMj1UH$$V^ z(MyBqHQ>4G%-zV0IM=XZVE^Lbv1Ve2 zVRaa}-`;qO8P2PK1Z@pom9FRc|(ND{W zDwI%d-5~B1Z>lLFmn&x}pYj%7hzd~?u6uiRRw@^wB3TZtX6CseHT9y5no6zfUAj|t zR($oOY8)y+>@*UDi$DiE%C&kpeabi0RLSgUZHl+dc^cLB?ufe2;jUHs4@6ovYoF@I z9a?{;QSc7<-EUP*<$IBDjMYpHRsmkBxDT`-QKeb7?t3EAd@}U~eN1c7jkM#uM~lkr z)R^LCGh5-J)l9PvBC_6@DFkSOegp}+m_A^k7SMieU zSVQ{UP=+p|$rlq=g1-EM-qz>qEeibI)S|vBO~pNK1Kmb-1_pM{7)upioG=^0F@?J5 zlE`Wh4w%o%vPBls*w8ScadUr8bl1?91#;t0BIg-BjAQ2B>b9=QH9|I24f#-m=%TE* z`TC5l-isM#Oqtgw;;&Wvq#J9KQynACRXPp{=iSt#m=t95j1`0o>qwqe*HJ)%o*>po zTIr5@^frF=hw2~B962v_;esdeTLZdq81Szr>lT*s0Cerw7N*J5FQRp5O~YhhS}wz< zxkdht(zECuW06xi>-ywFHuAkEP#rPM_^LwEWLFZPZQij9^ND6(2qwY5fs%A>F67V9-9sb5h>kChJiO{zSZXfpti}a2a`s6M4!%u6cj7Dic z*KrCg$OGTI2l!+=iE@jSB|j|eK$D?UkWj}C%*x%*cb?0x@${=YV4HQ*;IYD@<>Gkr z7N->^IbWBWz@CB~Rp^52FWad{+pl&6>eJt2@2E5k^D$R}8Op0s!_h)B?2M_ycn+N# z@uB8)=rbh+JFtNSp2?jlh}JIJjh@tKcln#$Ms~{|zj`l!eL+u)@2Y`Kt-7!|j(U`Y z$k4%b=V`ODw7EKADTf;!Mu9p4U*gfPZ$s^xZ6o(byX9o7%)hZfS4lQCIn9rxxQya_ z2wQ0iI(6!}-w8o>oCJ=66=$_9E4ov>&r(|BNcd&LoVh4Jz= zFZs9vOBE{>lzf?+W8ZF}G!#_@<1#U&+ZR%ZMZ;?iT}#?zb1f~kj-|aekocM=@bbwr zkJDnJ%T9|f#gUDMCV|K*K}$&)Iq&2UAm!&NA=m9*hsa$iy-DA$sGnim9d}}Xu&p!| zb7{x;*d zJsmr(G*sR{N#DGFz%SAYzsnd$BvAJlHAYj2!z_lgK9#4d55&!1VGQ2B#h$*mQ~3c` zxZP)C6nC%NItC4s21?Zw;_X!M-e49#9WG@hk@;KK*~D=-#H5rmLm_!?%vvI_gpRDld|2W$gRA! z`PH(<4^HPvtP0iSQpr1o0B3pL2rB|hiD5(Odk71?w=%fSnOX$K!K@V4Yo#pzm-`+Y zH5Pp6Q+~9*@ZdDvH<84*wR!VoIa4eHU68?8i7&%a4So3N$%u-Z8_keac3aYKVAwWC z@ybH&C;B}Km`xIRr|sXgw78hJjd9g>OkqnpNH6)Fz}MphwCy{M$bIEhPpo;3+lnWz zLQXi+X$L$nik`q+`k-sJ zp+eJbdN*QC8|~72=!RY7i8~t7JE9i0@BI^%#``6?8+oaU)3foZ9JojYYira< z1o2jCH2pZDwDAclPD{y-RvSCfl3bf~V!+kHpyz$s^Dn2vgl}DF+OElOupMIU0Q-N9 zL`lU`jc{Zh`o>xvUi33w8n+6G89ka^aMLCu@2V>D#GL2-$$=H&_t(K2)^NMuRm$PP zma4&ru+$6S{Q52Q17HN_nQDkDQ0Gl=vv#_5UKxDj@D#q3!=Jt)?$SEmy+{1YN&A2u z>c<1576!J#A_~h3t5$jMV#UE(*i7y1N&07;=?k-Rj1*F8O!5vm-)%A4DtRdR7N&wF z#>&BeCQzN_hgLJxncLu-v$AVdX$RtV<-TrUlxt#XJb5SA=`W?*i&gf!xSs}8@?NOt zLbns~g||7_mQkRdfJ2P&Zzxb^`7&)Ty?H+sU+^^k9Eq&H@PeqY*w>36woq(Dk~TQ0 z2+H`mN@J_uh0v9o7gCH$a82P|cEJUZw?*c%lWVAtTJC!6O}MyhcX6D{>#d?edLzk# zmsu)cUV30&k~*8Md9Pul;m8P($ zNltixf>*1?^=|=d1~Pq2i8O}%M`vm|{Vpvai+H^!7~8GU>70J@RFFuf(Ejt+QyMc* zZCC6gh5`%rJZ7k&(uN7xNM=5_0X}wR#@L(>*b$S#N7vnz*zIcEYJ9eV#;_HBSEy8m7 zFG3Do?~++P&9{C2=Fc!;+q03sPAPIypX4_-*3O>>BM6^g|7}QV-$735^T!C_x<7O3 z^Z)Y>6=Kt+3`ewe<*psqjc0t^qMze1B*2|G@!8d6>x)!-DUgMt zmRXmGUsL&%O4x3`w#HF^PwM3D{WkcU)i_@uwx)5Qwdt2|pwO?Xz%)^~xX0TSoVB$* z0pS1!+(;z`YuYU~TK@3V*VS7uu1(-SY3fuT>TEN) z{apw%jui=0;&j%s;&rx=nH#_6Z=N5;OEuJZAUP@{sBm$d{@#Y>7*YIzJ0l zYC5k>XSPKKn29MW=vk=O)GMWifrxQN@2HRw1xTZu~}4YUy@el17pPGc3oz+QR0l8u9s0^ z)%6_QavdR0kIpm0=}r4nn&XT2gqa`8{rqJwZ|7T!7!Nb;WTz#mONC7qp0K!ZJJhnN zv}qv!3&>i0wu&Wfz&gRmI{6T+t+SN5_ZGw}&Js5u=oD>I>D8-xE`7`TSXoDLr2yHq z^NX(fSNiN{NTM|`^(%=lx^q>fZ>@8Rlho&4S-H4z>mxqZw?EgLi&Dmx=p9sXJ$kz5 z{o@33uhgo(+zo+2BB$4p7axsZ{)w0})Z%>UQ6}t@N}L46C>9u@pXFu5s8zE~L=O5>CSknZ~-F zb~EpOdhZ_(2r{b>`|+YFg6rB{hd-l#34U$}f?b)9Z_SnO`HyR6G*HwvkH!ki8of%$ zBr(;Luf;hddIhWZ%0_&#vKVlAGA^$SH=Yw|WhJDbuF@RCR&8{bqf~HLdT{ZX9~ioI%bIk}~5_*`s6Cv|eC>l}GHt z&_UwS-yM%d6ib%lrCE_~n%dS+_m;+{y@^tCTX0o-?X)`ilPE0i`2p>_JgrBjgQxg) zdLFE1V&ct_`kJbddybP^nSOjLSanr*^}n4|l5AfU7!ns!Tw&;T0$vDPim$(YGg5zY zkl_gz?Z6A*-?a;j=9_dWBF^4Mvib}yeFL*$jl5{p%Z^?5Ivj8dydfz>;70eB9VGcIw{o{k>9UoyYfJn{RLDA|~L4;39DP0R?P2 z#@ke_J?x7vWzaHv@pgL3r5v-3n!MLfdD(cB@08J7qC@Q@r4SoE=t~e8#(eM1&RpIK z0jXIF$I{QOj4H%sw(ZR$=f2>wJ`f>k9l-neScW>zthD#uy(1+i-3g1&Pr+0+bSv-7 zVS_B23k0euJgu)>N?^=~htCd9kAcNJi|wZ1L2|NjC5EM7f!-leo|5>PFs+KNhy+oi zJI(~r6Rx|FF>CAFKiyQ`%q%(Ybz4O*pXcKyG3HrN#I>Lf?BjXr!?ELtS)s>Do5&l< z^)vPNg-~%xZaNEIiim`Z~^W}#J&KVp>(Lo9uYK}$)j2IaF`{q@3 zeI>-@mTl*#iJQNfE{WEtdDUNVSY74=s<2O)F9y}K0o$kpOi`=+LrVyq*u^JStgvDw zoJfn9jj>eH3fl8$y&juuTmVVj!LmS+%!Td$ZlD zxsH6h$FrB6v4?;zQ~;r=Fk}!!#pu`4Sx-nd;ftT=VXvpq9hP3HnB zSBLkWox;2|y1wZsX05WI#OH0QIY1xdTu)gj8|b@sz=+0j)TsD4h*8;2fijMvB!(}s z2T*S!cnF1+0RrxX=Gvpk1IA870~Ka1>D!f;VSu(;yWa24&5AHNlU0(cl9u-2xXXtR zVyr`^Eoyr48$<$*<-U2l@>T!ZxECPDHTvMUYTEyd9bn;ISgNDOPy{%`2Y8zEq-s#v z!R$8otJK)mti;eoPxGs8TiqY(wB15vxu{J9F;_V2#}pYiWu@qBGL#BtL;SVJ9i|#w z{R;FV65`_Xyt()BnkO8$iMnHD7m`R*q(1~Q3#YT$bNmQGpy`djn;E_CmUm#v!(*iz z_7A38G%a(Jj!=;FhyWNe2qO12mssw5ttzHC;yU7Pjj7>yP8Jm~QTyQ>AQ zsazwUgj`EK6PS`!3|Y8%8(<+_B3`jyz3t#tnr)q%XGNIw+i)SA^yKM*jGX*QmN;`8 zE1pDY2*37tYfZsg?=5er1;NCASEbVU)`Ca)$l~>qNpTDD3sTw<%>;^(Kh{YQk;4-h zN0}0jw_oyz}snw zaQ~pim@~3996j9LWyIk7hMCb7y9_f|zV(`y!xR&KdZ!~*TO)A|BSH?)u$)>6T=cnF zZsa!Dt`H8zP4k)O$*DCiedo?Ueww? zb{4k~9;s+a{HkmYE;8_bf9d7FeTc?GUK0!&F)v~Qm= z_ByEu1a>v3dp^!w$c9dCBcZnpPd0%29plDQ5-jjnkiSHeb-rK-Sn3|->3vg$puP4Y zL6)!*Y(k*AV~1V3NC5<{0u1_5hx@BdEd>cy>#0vZb^3DbyJ_u_$u9T*nxp{X6Ptduxt zu1~2F{)Q@3Q(9v1iSb6ODl=)T(sfl2NNp7k(ldqp8$oz?4=74mT~W$dNyxA(nM24NyE27LnT1tkNFjtMc0!b4XAWhX$B=o-Op=Yg4clVxy?U3!|n)SuT)$N4u_AuVY$hM|cUUtC)v4A92alu6 zbE3T3$`qjKT|`-0bIKdDyweYkm%Om8KJ~TpUi*zA{tzC$C%*weJ`R%fmCrB_37T3> z4>joXcGlHz|M6YC8WMKj+*RBoHSM^?A}FVXA64ID&)%>YA8qZ?WzD^Z zUG*<^i-rTo-bH}gOFRcuPpXp;wzprqx!lZ$@45Euvx^!zDzX!tX*?()v75PV^sJP&8MkZc-IA7VpfPkBwUs=d|7cUoe| z4=3MGv5VpNuaB!bX?Wm>QKJ1b&a+V(bts~<1~prXgTh;eUSPX7N%Sm{f$GdYsUMnS z6V|35qX`&+H?G2iMB<6=tJDmZdi>_r^eRo%=@*^idoU|7u)HsFEo>UILm_S<31u8! zjN9X;efXj+!V^*sc?RBo6Wleq``l`Uvqkm%+}%h?$^O{$-=}L8k46e4^vCn4DvDvx z!s0}m8MkE)l94J9ce-gNTan}<7c8B1%+$@tD@76> zc%mx@m21lgt|mpTNSZc}z857&_nYxvc>DT#DWA&&_d}Nsk5?RV7jmQ%5O=LLgCEZ7 z4=*8XU}A>&kNH{F5nBrVhRoQ=cd$&pg+DXs?x&FBdqywCz2ZC;d)LWA1IT1T@r=k< z>_NO!EPOIH6j2WJ7{FSPq$5A+XLowY5E*xDF9}Bnh#2HD@v-wljrX*2Z(b%1(lMps=YjjMh% zZSYCvSkjl%=ELn@PeliuN_+NY;hn?MgEJt0pz<}5UN)&PfV1PzqRTHH-be_I=PmN*#!+H zfm?dJ{d4py2e{SH%)p~rumi%J5tQ%vRl*Psz0@ZyDt6jhjdL{I4U!t?{jmqq^O=w@ z1s4a2Sl#DTxtJOORc>q1aw6>&vFM`jlEq?ls>31LLfrAXTh;jLwL5NiSm-5^$1n+G#G3`DSHxqgv-&pJr3Kmf&N1dy#mpHryfy z!UibCkOzQ9KR~fxgo;s-vZth!=t;8KVJ^0}dq$m{xwQ5)igz{0CC|0;?y3-$`^H1< zG$lAt_oJs`qmc99*^E_q8m3zXmp@7R?2Hp$bAA{b&T#M2xVV03=J2fN!-;nUMuI6- zXcusOxTzdk$fh(6#Rdt=(w;zdQ>Zlygc%x^HU#tqafsA+#RstL|55(4i&hHNrJ>h7 zpe;#g#RC60;IAQ1prZRHjm1G){Q+GJhyvc0$+96T*TT%|@>Ygl{g6fxY)&RP7F&Lb zw}$LTG;*yF_(G%yL*6_!-YqcnLtrC4Y3HwCm6NY`|EvH0XFDhT5Tb`mNJi5bGL|aN z!Q~{xkBnA0>vVsx(sd!fbf6GB=Pzu>$$8y`=%1|PYQ|{clyDLkVnr8p?86* z5fD8fFC~`Pv77F2_i8Xg{t+O z^Ru4$xiUX^^48#-A1l%>5|+J4`)QTq)G= zqCw7Ra@?Gj#AIQ+`&%yC=K(!S->W8PTS-r(%`+obZdAH?IU4QR zX6z`Y!Gcvqq`FV4K(Z-+t@LF5ce}{=pZV%v@5z6!ayPs1@%;v|pJ(BGyrt8|#o#al z%rgv8BNjfD`~<|3n0ivOS$8xLGYO+vw|I-B;TQ7m2Oea_{lW_ z9f$SHTqoY7m-DI4cP2Dk2xq^jYt`c3LetNF(b;wHi0)`0yVU?|FeFT2?q)_>kv%5v z`${%Jgb<4{r@ft|%&zlf%eN%n34{)NNO|f<${aFk9xyO|pY?n$Ui)6L1tAc8m^FeT z1@)kN(L_#Z0T^G6YQIt9J!CB|`=F>K1H#mcS z#+3b{JK~Jr0Z+5TRKRUGf;t}A<;iLjreuH2o6|A-l(sgFFosUihmS+lv}Ryftxchw zJ&^tY6{Kc$AfuaGIS0;Ns|JLK_)d_>Nr@IZQz;hMVFjCFOu zZChQ#6>Ua62t#8jyI+e6l)+8&QVL2iZ zmo$AouzN^e9w$$%pmOGr-;oAEoWUd=Ar_>m)3&R?HJ?3tLvPKQEptm zP9BvF$*{00OLET_`ReoG^rLz8Y@XMhJ3ZCMrIKZFj^;lg?cBv<5l>f)T92h+I?$1U zg1@U7>Xg05Ty85?=AUb`tM70-h1L6bt7}A9o-XbcqgtRX?&{FWB*Bwn<_D4A!#<;< z%}E!K7bc1nHIYa5U2VeMClu)9yN`tA$hTE__hZFP9J)y@kNjRGNQe6;%}hV7(;6G? zqew2Us;`w-VNynZ5JvTvM#Ue(86@#~>^>#>cT^2hShC zKB+X@*<}mkSvMnoi04y;&zBhExbibU+3YrxQ8DK=CNye4;m>6nyT1+6Ic%L;ozu}e zifP}T|B+VdIxrXe^E@5^n^VP;YZv@@kI8w;yEcq=h!FvxZd#^w=iZB!3 zId8N7u-83-r-^oS;Q~`nP1j8+T1Y3J7jh8P*X|3J_@=5fnsrY}%}oX3 zba>_3Y)e-Huo^0d>!pr{qj{pEm2?kZ4{0b{?bvcru>Se2!uJMl+F_%G!V9&%^J7Hn zK+i1>=X#-8PrH1o!>65Dix6EIgR(suy?i1VpaHBK01R1ST|2!27 ziyE&+lqrD9Uc2lO$Mb7#{9Gx*AImk4eiY&45M_v}^0sRoi_VWtnT0s+ReDIWo~M@& z3wZHG=TYXNCAF?>oOIB-dHdj&n`^|6&1;ndUe$_`%Tg;gQRb2R@@r+dzS8Mw;pQf% zx|a<|Po^sxbTQM?^^aXGZ;*_?LHJm&1QDk&2A_7h(@7?-W~>h~-9*JV7YHL1dSvh* zmS0Jdgq=}-Z>ee*rgGJp2}`!AXj8}$J)AIwUsii>?ibnuITiI2Y}QP^cU{rAQ*0*u zm{aYj4yQbW?Rt#(NHB9CH<5z?UM!1S1d82dlx5%HEc>{MHi_8iUd`ddHV@?Ke*f7M ztOeGcovfgS{zurG%rwC^YuME+{)+#G!(O~9baUzD%kB~W+AZFD=ZaWF=g~q zv^>|2A7ot;WMyYtJltv3kyFjzqVqPXB8W?4^LWnBRQm#sQLpOA6&uiuffapP*BbX- zcm~v-<&i-l-$n}@G5sX6>|9@6;(V{e^Bb4nwFTwJDYRe`JOur4MffQ!hImb%$8WaD zWRhOxf)zhyY`sDse=}obKx@sucGr_#Yv>8d2HR(sV}vK>U)}AZQtC8YPUfY%H#@Kf z@tJxW+$f2%sOabvA8}f3Uw(g;Rs^KTSyYj~j>w|u#Q(6Z=Ze$sG!@VfCrkk}=>cd6 zNkiT&jwF z)cL;C+cjFiP`NWp?#i*s@ki_Bb5pMz=;fJdblYNomec%U7r6i07_Roef3pXk6-rC9CbTy4c{7AHxCxOk+g?kqgg(lwPZNac0%~+xi zo+G$rk~y+ZKRR{ja_K{MK1pF6&559zVa=m%#?ObghYZw2@^@i=fUtLOA2pCTwER0c z=_ZL1d`TLvSrdEW7c?s?JQJj1^F-pW@GDIveSE~;8YNC$$<4@nxU)`?4b&OJPXQe! z(e%nEQdNh)9dXR^Q?K`#{roFli-8>uiM*Ky!v_8OFedClPz~bJbT1|J4n(D%# z%F(o>^dy#`Hytkb9lh@qD-q`cJ1Y4cjt(>%f4EfJvi-D2)#4k+I1Uyas^dqESXaw%hIz85jS1*uY6Rs$zS|=QO<|6xHRe!@pyEi?cfYmvMeC&5g4-&9hT*Eo?)8?5<2BWN z7ArT-l$Dg*?cTRnMPIhYpZ(tC$sccOfY2cXFwS+Xz{-at2U&PVzZjw5L2jUQwxcKWlMO$1^(Ss9gMaeKjf5``FN(n4AY zTgTI#S=t1aqkT(C^+j8azuYx-+KZgYqeOtmG=%ETL+&cDObk69A$+DPO ziZe2tDv{37M-?SMCP=u>sn>k^oO(XYHtC326ZdV6z)Ewzi!ThbQj7m z0xX99$pd&$*co2L{a8TQ{b+eg!W0l#)LlLT`x7Y!v4*|Kp~WZJdL+SC*@LNCh5d4u zZP)~KpH9!->feuk<@AvNWWN7V7)(#O1IF!dni>584E|jMTM;NT4ROMKR%OJB(9*?C z7ro68RTmfj&U1wUV(Je{xPI)Cr3?VpxUL*UG*}(glBBAVxHLnj^&{qYJsll8;Ad3R zv9IE)0OSLSF6mb9qEdn2>USabUtnGT_wVArZz=?&$L${{%W$+V)Xr1$A+V+P2#$IH zHzWNZ5DixQO7IZh-s%F2kx5ai$Vj-Bfi23FxLHt^)2@ler&-AVqN|z8ZR0sR%rOfh zp!fe{C8a(3!z>7sKg9qHFo?vb0iG3pHyq56Y5KBofN&4(m;sD8R)h_1$s>d!o#qzCdE3@XsELM>i@-<_)P zTtMe}y;O7*rK51Z8rmL&>KIh^wor_qIwPuNKD@>EO6U-8u*j$N@L7pLc@0K zvPUF>T-~1^(%vbLg7b$Smq^rCH{KR+U$uRy<$t_yr&6+HTMSIE-}0c(le;#hLu-!G zvhcUrj`-<=wre3Sm)AAI((-Wy)2bqGMuk7tU3j0srx7{HfBw|bi0>6teq~A^Ts_UW ztd1>$p5P{+y;L>MvR8(cBM$ExxU_MHlulM&Ia3w;2{9*l(vS-xkv7jMr~&{ zpo%aAw<+uaa~NNTX9|=74I8|k$bKFujJ07Uw&sYDTAxLzGd{b-VA?w^|I_$vz_y+< zqq)}ocsH|}WH(a>`x@t4>yGxpd!V|Z$u*mFI^gb#Q8c-Up|2?7-5lzhEs%kH_@48N zE<*zYR>?pAlyw-iee@JGw2Ej#wlrf}8U8l6d2k) zZs`|-K5CDUwjIcA`o_#e(4Q7ECMxIE}!)+Pvh4ZB^8+*9+Y@kcS!ii z3|vTirec)Vhzi8t5X^yr-qR6l#DJh$0N z3adeM2KVFd=o&IOgf7?-pT&+fkOyHa%C6wfs-a~bl8)RNv*qxvHUW`}q4>;Nth`8g^W&VY*bdvHByqSLGWzI<&>WI`xH}%ZtcaVmR(y$D73q1!V(s zsNh52HR7O&Yg(wt!gzdlL?Z~yolU9S&h_bsRYZv`k%4CloRT`evnX0F<-WBS2#eBr zqIr9KW#vJ@Acg?!&z@M?Cp2)5C=S9j#iK9>2V3fY)N#?!8$A5I-|NR3W15{}iOib} z)}o|4wpab_d>L`B!KiCZhCqxM=)o0L9ad?#Hh`SBwwWh%Z=8KoiP;U$)?>Joc(bT# zMD`4!yo{yt9;=aW^}ZVCxQ_VE8U1L##DmzQxge+R14svkXs#cL7IaZXG^^V0MWXmiaa%1;b_o?Kfgz!{tb5+1#1 zBhy|lMbZAUyj;TaETva_dVi34oiSE;;0Wc|^SnZhEsEI&`fXEm>OzO9d$@6%I1H+J%NS`rW4uA^$4LRVwPQftoB z-a@z0@JT!<$eYm%C5Z*y{o!ye!6m8UwN>k2i4Jd<%RGCWf};PK&Vy~d@)Ptniysid zn?JjM>c~V4LUH1G1p}*jR$lmL+kxF16kHt+R**&v^k=#$Opcfxlf+Fll@mo?uL9FQ zBDk3k-Hhc@6RZHjleyl_$mtoG`>wgo*D=%PZ{kG8dUSXg!a5;N@WKIG1PiY&FH%kg zDvd6DVfsu~{dy0;*vMwl`s1DR@BYKfOKJ_{im#C#>omOTcRk60*?`fq!IC>H& z(U1I@KmUE~7adw3zA%Is3QkQ@I0^WTh4-fG$1#0wR6%FJ#IqCKXpem`JDvmL+wr)i z3BVV{v2#$-d2%tosi%S8^7}u;3BQm1_q0XfS=ih;McD<_Nu!-WZ5o<-Vv^YTY#2{H z;`8B~6|HKj?z?jLOY(g`pUjn1%rV{Sa`p4nuFAvIrGLmsb9{@1&yOKSIz$^}7TUSp z?@Tihr@jLgY|L$2SGq2i5)Cx&PYiIIX8AcEf&ah8`0M}dZH_SA$<%{rL>m|Si;jR2 zMPg)WdxzHNe;c`9bn$s00HQFq{i4f^_Ph-W2jul%(?nY+@)8^df#yes zq=?AUq!C})s!A1V}*K098cv3;p-ZPHaA6&PUplb3p- zn|uWflidQcrwuumEB5J0{GhTl@0oOz{^Puc#~DxjB6D%R32_>U@@rO9sV!*Yo>KA* z@RPpeGjP+CuF-Vz)1&?PlFb(uybfiC`?1wW#*QkeH|*YfX*XU8Kb2e~TSJUpcDptG zQs=>4>ZLuM`5(K6)@B`h9>^bAiM$C!TZ*YPvjN~qLFkko@%F}&MQ2)PLG~*biQ=~V z$KD*<{pE{REgfruIjW?kRvH%lo=mdQBk|T2+>_L4OuZR@$0ml_^bJU^;pl6j(U%e%y_)YJx~4O2xE=zhQn zGQx_}X)l*621L_W+%I5D#6&LcgxJ|^?yh+N-Xw;4u%|{axGO0gedqd;kd&l{1h(<0 zhHdz1sEST{)8>cxJO?b%624N?Glk}DI(+)}+Q?XO`E4)8@o*|s<-FPri(;cUy7`0K zRJffP*`yNrN3MSE)f9NZF~IzRd`pjS=6G;R9Jc>m1kqV6hEdbFK-y`@B-^Cj+VrU} zVup1#?SM+%2oH%6IV1UMHT*33z>USDgQr}qZ0^P1e15N$^8CQFGj*bZxRAK=PZ3SlM?1hEKvEgb|F?`tauw`Qak0-mEi}c-vF9lK#dM@M2Zb97x&~P=P zt5b_6vqfy1zJTh$dYkL`bPL%`Mw05Rv46#et#iPqFw_*^r|5}dfcp=NYe9Qi2b7ES~QUK0%(ItoSc-yT%aX{?PWn(9%zyOVVpQ1t9QmKx#UUlW`f&539$lU z0kJ*`#jcW?yk3gyK@amIy7aY^n?C{jd_kKER%}T3FS?eNhS;~+)MfDveKPQ`2^WcS zv;aI36aNOa%7s*;^qZhHhkG15zvzIS)ow(EK)kmH&`$beTL#1eLeuU3O&nq1X7GH$ zr*!rCt+i+6ibX1AG!59H!Gbq5P}y!;pLI+!JuTN~SS^(P8#3mtMPw0)mpd2rh-Z-_?CAiECNzb60GZvi9>_+d~p6FU+QA zrjj~GMCV3hrL(E^c(faSDs{5tb4z0dT<}&mcQG~P6K`vIUvr$=>4YzPWzU>3W@|k> z`+5d{F|Xm%CCb&{?iy~A2m)ljPfM2s4M!U9U6QO9&wO>ujH_si9c`9aq8+QD^AbzMIK@G7(+Ch+p9d&5V)TWiy zC_?oGyRQ|Q(VjPvvu3{|{aEj`3R;@mT!eHRaj_G zlvrpBO<-UF7i-qU?#)NP=x%Ex=IE&m6zHe{A9Glyr`+=Eo&h~q%qeQ1xxs;1n%%Oc zK`(Hm$G_fH>FTjiGS zqyuKKN}vKO0c*_2W;DEy2leo~TUy25J7KFE?=b#sQQ_0wA;AI}7!U z{-T?oo{mLS|Kt$p>m4OQc?dwXhUdWIe{h;G%-c+3)HLUyZu5|aX zRDKXCYJhk+IU*dr&5joiRu1j}e#(@P0tU~MhOH4m>d^<#)AoLs!J?dB?gX@AV)(oH zNtIHPmfON2sfl?x>Lk|Ylm}j9`Z-5!>JFX^aL0ss7+l`Q{xJ|>?Gw*r#s{$l;J)Op z#BQ_!ev_Qp`}dmV{bwBqnCAmLFpdOc3P6YJZv3LVgNi^`_%`apCc*oQ`vW!ZyFj$; zTiM&mZ3Q9*W7|8A?$wXINirRNFF==L})eZ*L z0+sA^J4AGqqY2^=YoSBHOI-Nl5#;!fH{BmmV;WQieT1zU_^mR~45pz0MUD8ALqKcG z{Xb(WU=~Ng zILWkbtVqv~PO)Y2c{Eu${!trc|Wl4LyrjL@R+OuYb=|t;O2}cAA^Uv-&BrLlg#=VPX z=qHM>57R!C>K;=@H&5&()>JBKa_fDVuvCnDTKdp6jY*j-#&HQF72J;^-osJ3@#J`7 zQ1^pU7kxe0EoXe*E}`LTr<)HcE*k5U?mr((`*GD}OuiM}y~$m9jqAp@Z`L=oe0_y= zB=SKER*5fqS|V#&%DSq51CfIX_ZLn0G3lU{Qa5~J=re#CbmF;i=>*e)}t`kI}-@p{CbV82*yzl`%TupYOMM1W!!xZp_ z9zoH9>ceVlGTAf!$WnK@wa1( z7qNSTk6CrT9-U$nHA1_67)C!liuHJ?4;{@^*`%ohN!Ta#){ z2F_h}C3FbolZ)d#m^sKoKIC`qH~roI)m6gd^Z%~}_@CiRh6o%4kW@2-k+zmWfXuKB zS5tz1Sf4KIAp{=`s^+_!v?`K}9Vs{X`GgH*_X;OV zR{pIM&i|=S;eVweA6oXM9#|lQNG8MuX`Un&;in&}NOORohWIR6p)7Fef^{BQwv>Vy ziKXgfM6_{k_s+GYjj7ylxeFpH-2lc1hy?XIY)S(`9CJhCXhb+LX$7Ob>jYjS%b>R- z2vx>kuf|q)oL}sIlt5rD(*8$R{>LN#dpP(1mEL2&9Ga-+2Fo2&^cT?|9bFJitq;rU8}$)DUx*3u z;wpm$Yd`hPW3JnlH04&5u_45aYzH6l6TJi{Pbs@iw?x^TT}(exn%+ErsqT)e@SQ9= za(fYOor4yIh%aG@+GtoTJtdcFYJRhVC{^T}>3r#W$Y8vGQi3*D-upbJuNqdRDyGpnMQR5;BO?TX#SSK#v@|38z z=f1xKyA25r82)rlnpu0zCEJDn=Vp%=pGFoK(ElWs661zJG_^6C6aWv46VgFM&Ir<) zb`ZTmpECit{=FG54sxwt{cRB}ADVFdE%YO0X;T$pKMc6^%T%*pboVs?Y2FzfYzl5F z3%jPJat<2Sxe8)fnI3>BwK0Lj3kOmykKLeq3n*z63?fb57{WWcMPN!EaoT7RCt^lR za+PEUGnAfD8!BVOjm7T!M=xQtfC3AeDgh=)8-Q*&0;q6(aPWY$X~2&#H`(fHW%)xZ zvWj7B3LFwWiuq;-j-FJxVl6(k3SV%pO^pqQrZTMgNpph)vd~fDc&2!{&$;p;xicMy zj>H%%71th!o*l&7qHXZ-(S_d;UN!AS-~oyTtlu#DxPoN$$dpqgprFmn_2P&pqlDhA zG;5i*`TIkCrb+rbVfTLe$G;*aQV^9Jg)o6f-y=lS4^t7Q?y|bvG9wqZqSAH>U%bXPm~yuI`MR+G^%tVdt%at$ zwNBr2hd^7La2[^PQp4lhT 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 literal 0 HcmV?d00001 diff --git a/website/static/img/docs/guides/auth/authorizing-proxy.png b/website/static/img/docs/guides/auth/authorizing-proxy.png new file mode 100644 index 0000000000000000000000000000000000000000..9b5f2289860f0acb52511380d7b8c11660b40f0d GIT binary patch literal 37741 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 literal 0 HcmV?d00001 diff --git a/website/static/img/docs/guides/auth/authorizing-proxy.sm.png b/website/static/img/docs/guides/auth/authorizing-proxy.sm.png new file mode 100644 index 0000000000000000000000000000000000000000..f23ce0397c4019f4e2bc0d0467f9de0a191fb1e4 GIT binary patch literal 38647 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

KT>6^vRam9YodR zCS7tmnB>WqPR!*f*bL|~8)WNl;`@kS_=$5-?w1Dc>!?P^J&ss%c^*zrPcK~;wAtlt zvtoeXgHje+3=|bR_0Tz3GPQoHrGXUg?L5Ir5*{08evOxyOw)5f$XhjP54q8wgKX(X) z3inkV`27k<)&Q3smHq%E1^n$r8jh}HCe&@8YxLx4x6GM`9GvIqBF{%neG*NjN&{v; z^z6{|sjv@)lEWs(jE(+l<>H~P+LVvWpU_^(0>yAs%Xa!hD*`IYr`<2HqjVCn3c!=m zF(H|qZX<3$?r(1vH|2Wg9e>~ouC9KgN)UVvp4{-vfP&Cl?ysIHIm-s5K26oRWv!XN zT&Dc#X3d6WiWX2zh{RQ$IG=RGlb&j)Yv^d}Ar9RHO}{{}vX)DOs9I$AR(j z&(^@11>kNfwD0=1PnUIH!iH+J2SL~h;?eaqWX?GFd&r>0awlRw0PVor_W$}eNYOoL zpEybJMg>|QgC(SsB*)i&4;^^(OMG1ll!1stnMz9GREeaWpx3u%EpSwsO8?eSp)u7Q zI(jk7QWam~plvqqqKSbVwe2ZSCxf4$(AK|9Hj52(kp1IDuO*d~eUvy75t7Ku7H$9#rkTQ`-VKD9np0sxmj$SM@)YNX_d zJ_2cXAltCx7ydZqT_xlmFdMu*C(|i-19AX#z?1L@OF?wTm4JuO;2A8kBS|baC1COg z*bSr{pRAQ<|Q|CBkv2ajM)7cWf zqKZIXDrkiP?1PKBx_T5eN2vmI8#lAN{$JXo2{<^-c8en0txllZ6}~lis%?+_4bdXs zQH>@Iz*q~y9rbP+U!=Z&U|$e3DF(jbf;Bq&@pB(y?{camD5_1sf?JGL{C@Bi;^M3- z=3&8RwGL(!qeb#xBNX_M{G+yRZl});Rb@_@-zIyq+lZ8nhQQ-$>*6R~s;kYES=te# h|G)n+&V?W`+rVgSBMua1?gIZ^zp8m9`_i4q{{s$*-xvS@ literal 0 HcmV?d00001 diff --git a/website/static/img/docs/guides/auth/gatekeeper-flow.dark.png b/website/static/img/docs/guides/auth/gatekeeper-flow.dark.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd42d8854db5f446260c822af78d33eba5c6ef6 GIT binary patch literal 76138 zcmeFZcTkgC7d}dtB7#a$P(UnnP!y0JRHR7n9TY+d5PGk{g9W51MWrerq1Vv63Ifu5 z2N4iLkrp7dyQ9GIobTM3J9B65{pZIFki6ONes@`W?Psm$*?F#_BtuEgK#qrpM=2+J zPYn-`C<70VV4su(TnXXZ{Q~~sJE_Us!OLm8FbCd*Lv`fL6&3L~!D~`H5_}RoLR=9% z0`TX|;cI;GngNga*L6HREqun~*GBm4f0uu1g-3K)#vJ^|{e**GaQESV!X*5^YfK_I zDovD;M0oU?U>|qesp0qr@Q=)1R@Vs+kM1h&7hg{8%1_W03M&mAXB|Za5mP%`-iKy( zkD$Enw)VKY@Wk9jz)M@G^FtPQTN}8Oh`TuJuM#5QHSRJWE6cAU&er0rI*KYRckLXZ zEP}k(d9Sldkh8F`h&h^>i>TeZe|S51C(df=>})T>$LHqe#_M*I*Ur&`?}o6jFyD24 zK7M{4P=d$F1Md9Lod@o8`FABp_1uFxnL1k8J6qYoS#b3}d}Qb1EY8Y`d(iRE?{+#{ zng9JHxYJ>`KnMA7pYYw_z0P-BH@H;{cU43U>SSl*f~#H=Zsjb&FZQeOzc2s&wBL6r zJ6b_OdvUi(+&H}D&ujlKf7i~|-Vy5Lgexy_SpLsz|1Pg$Y3FPQ#@f-!R1WS8bp$sb zKJBQ1|Mw*h>k{L`4c8yT_j_)BT?LaPK`zF3Jkb*5J>>K3cz6&zxqDI??)VF%C*o+P z_ZnAbe@y>SBc3z7N8^Q;|A`@lGHYN}h{4)MuIHYOs_Ao{x97Zqlb*k2XQxxSaat-_ zWA0+;Sm-ICgXQHF^Fp_UjnN98M2{*abJv+S76~5h`Jy|+vmOn?*NCVgc=-S4&;J>N z|6>P-%OHqWr_2$Gc|yrpo~4J%kjg**V4&1yu)x#0FUv~*j-cRWe>?(G7JrB^v3Yxf zq1R}+ONf(`lYaWMEJwPJaPY~mkHMcSF|{8QV@d4BDz_8MI}Niv!V_0-C1$TbDK@_0 zz4a5;i88A3^^uu2j!1+*8!L90YQWd48Efv`wd)+_^z!)rC8GDEXNE+K7G_153HL}m zf)$z$i$Q#>ftRM$o9MOGSD&(7o0@nlRfu2=hb7JJHSL%{R)3Yar zcK7~T5?Tt?E{lA8)G!tmK?H$RV!qOeTSrD){Anis4$1ErE!m9~v? zz{(`P8|17B3=++AT^#cIoUW7R^#Y~^_svkTUUKh!?s#OL2n8CXYA>6u;Tpp&OB4Kz z$I0^r_ga=Yc={==&bFRFH#kTR=WOTeZDzw??m#UpW(Ue2eIOfhePi1%QOGE0Q(FAG z(&oB!y`$)E_pmXpi?SC-{R}*70AKz+sJ%N)V|G#&r*diz(R05{b)}-5*+` zf1K&zS%whjNT?WDHyNmhL>XyRD{s81xhBHg@`stx&>_2W{1}WgUcn#bQgNmFciklC z-K(|_Z!Sj9U=~L!+!7gQdVOPJ9@zvzvU4PQs_o`tMl>g@^Jlt0C}yT2hKC1q)bfjC zirUIA>z%(kZ7TY^Rq5;|i4oWZ6mv}doT5*|eg>#gaK3QYnmD7a>s!w5*Fkcv(bqK> zoIXIbZi?SawfY)DtE1c5zFELj&f1vyrCLjw(W0ecsprv~6GcLPi`Ll#EjOVYx6ixo zakuX;9Gl}kqGs>QX9sVdq99+|l^3eooTe9eSQkJ{=(V|2m0bGX3 z^7cS~PMx?R0p5dDMJxqyt}#V<B z(L8)_%|0B{I<(~XOl|*eq+jYZU;AtYag(#;q`vpuxv;sy?V+Co7?zk=czM&j@5}6N z466LZZM7+7ctQWPaKfU6x(6l-y*RYN+G`q0ppZ6iG^11{p~PDyP~uf#JA{c?GF|HN z`FgJ^RCq3qs!RAl&!crbtR;2&yxzXXS_$;0)Ox7ure@!rJ=k=9-*SzH$R|vHm2&Hk zUG76?het4d8fRtY>B0h8MeyqfDr(`)tMk_^WlO_agLgJGr}fduQ_;#o>f*LcN~VpW z+3y%DYPi~0CPiY=E_YjPMpx!x?m6%mVZ9+krmn~ zR?E;cREc?E7KUH~n74iL2{pbk^Y+^3QZl}*aOT;4H@b&lr?^JzD;rE{=~ob-g1I$~ z&%bN8E<9MUq)yVZ;KS1wB-mRp%D2(8JKOApT7vGIZQFL0|Jcbmu|DMcokIWB)9hJq zqkX9(WYNr}l8WG@V4Azu*l$>a_0b-C#oq2aZ?qK|y7*WlqmhKi54n9WHK*L6a7Ady z%8#W(aO2ZTGWf0JUP9d)&l0rXUhkR z=Qe0s#|oh+a<7INh2IY1N?C37!@c!4dy1t731z6SoxXOQ+jO_F266AE{Wzz86s~%= zQfU-;Mas~!WAm*0bB3cDi}`vmh_}o+X5H#~HBwdx0?rm&={Sk;Z1xiK*0)bQ3zCSt zLyP*~+HmJwBH!I=x7SyVn9?*e7IodHAxW?9L+8WV#ZVsOaYu5Xx0}k9%F+uV=dnxW-)#4IPQS&$>CvH!#wSwK zHre0Zc3I~#HjxvOVsyDi?90lt_=e+L&sA<2Cu?%%HyZFv``GBqLb`eqlCV9PK_3YDvHcD!%8e)@hOUHP57Nqw#?&g+}QW+YDZ+ ziDST?yl5+zSR$#O#L36)_a*#N1!`&RC#rdn&4Bl_7;oaTh`D|$U!*se)kU{zy@-oB zaMy>ysd=2V!bZ{<$}qc4)~Wj;3@$!qfpj+P#3AooqKgBkY?#i#+nH@f%NGW#lbPKo z5a@c_NrUX}`>^ej?cBm!H1&D*`aRyUdV$7j?%eIjMeg4&7YxPp8Dv3@AC}hnZuf@> z=EuU({Z;N;N@^%8=mbI*;16L~L{+ z#q{je-+LPe8};6s?DkSj9|5OGsYc(~=4E-hV&^tB3MO=rtAF#HgCMt}IaUTO=p&iTjJE55y@ zo9mEy=km^_oW>BLv90%NlcS3$W`j{W?!?w)wm06rr4CabooJo=NABUTsgXlvPP1|KJC>sj zdZ>B_X~QU#4wnJnk*735?6%u5w&zDQf2rQbqAS={1Tvqk`hM8hr)MO-X*02+zag?a zvNsuXAzOv|vxK&tdcw`9w7}@#xAHEzXWH90kwH2wXmoGAWf+U5bZDB7twCDHCjzPI zYI;@SSMTTb-B(1jZ{Ov3fX_)m@4k7};y6TYA~jpTGo4pbUn_m7|!K9M|+ zN=9srT8vi1i*n(&>4v8YMtia3eTuUgMLKFOpvO%-hj zy14dYxawK+5UpYEotB7bt<`lQ$!2ETeY>jA?;J&T-%~O13?3^rfqD9q2Yq>e9iiz@ zQc3cJni&T*k={x2LIK)Vc)gpC1dOTLyGc%DtEYvA_;lW@Il0tzn}V1`ifWBkNIS{8 ztRacK&^vAE#N+k%U-AX(U*yl|gGEPYEsj3K&UX=R&PorH=KJE};@tF6FjQITnnued zG=E=>J(IZH@{Q~@!xkF$H#zHDp%+Ds!0-*;Z^^9fP{n5PRqE&Gf-dF|is$qw&85k^ zXvX+ib^J7a--rbJn~lo0`)Du{-lx`_@V2z^O25RrU`N{;W=Bv*3LKXp%Od4oK=B*vGPg1wJ(>$A_oXE?LD@` zN>5e%yqFa`nMmJen!DI<3B)BQiWM68J(tN(gOS?s?U$&ho7YY&gYwZm|7oCtCJFZRnoxNwq=GC_mkO%p;3t z`fah0+1ZMv8wBF`TQ;o{&AG~isQ13co5X$CVdX<7#M}n8H!r;)-tVJu*_QEj4gB2; z?ZJY!rgFk3-BXy9sh`s82AeW&)8mA#{T>JWo{Y!P8p2A`a|R|0sjM4DHAKsI(h^uRF4QhQ3_0v4Tqs;xXHo zs@kZNIwhcu&5vf*EbAM6m_gub99d$3x%&Y59f@WOCREs-7(K1$L)iZ1yf!Wzb=bW0! z`ZJ=s6Hy15LvG1>Bvt2@+uhJZ$lA8&4Dbo{iyzB7Q5`oV`^xb>zm4t&UC3qKc{0n~ zrkU$y2D{5qnTuA@c3NXL8Q$Qb4la^$vo`5Ymaz`lSoO`I@T<8 zDsnf)$GB4Y3#2z@>efr`7Aap;EyI* zX_*vgX;{pW*yAY<>-^rJuIf*8Nq@tZR15O>bPNfE6Z%ZbYY| z>boBG?Z4G`r9Sa+VkEf&r`N*jbjv|*t-R53 zj)m-3>^oUDs5s%ZTqPtclykQT9`KU6gmWaPOkgcBZLyzMCod`1Me^CuOwpL{d2c-- z4GDMJDjtJA#n*eDjBoUcEF&_tblEIFCl-x=`0|9AZei;{qik=%Jg1}Bv8HDN-KVzj zFm+lraAD;O8fkloM#41+=(5z3=CAlfU(7X=Jh}Knwa#P6H8`QeD{lr<2Jcq#q1$P< za-j#%Gn$;Lq58r0!3XA)wyxsWuR_Ij8GS!^3wqav?kbcqEO-a=G)}D>#!Sz_k$taR_uZ0N(zEw7SRtZj47Z`^Xy80AqZZA@XFH0sB6qaHq* z3>k7OTSDaMmfBCQ^br^QbUj1?05qLvGnq0(MrpE*I=lAr`HC;j-F|-Wi=>f-XhMki zY3s_6drXN1ha0LUeh9s8D~W7Ly9!EdsGVemcd=|>)^^{*PRM6$v&%hnU(P>uv?j$n zYH!;pVk!!1>@w=5z>$}-bCprFWzgmNT@R-B8`%#Eo{!~tC7Qb~F6bd&%ybU_jdPCj zIJjh6k}N_8k->Vi5dSCxEqeoz@&g<5$XtW|=+YnQX%>6}qKq^C@)1XS)6v4gnFExb zMMcx~CgzXwN7#y5)*phfILDUc9dz&b+OuST%E~d2pL?s7GP7^>)PXzU{hy6HF8E&+ z{-10A|565BcUZW1+TLGai-?UCt#@r{Yh%(29UUY_kdxVfR3wUgOQ8uD0;`-tu#gH` zm#l3_>^~HCwV)^Byi)6PFK}z%{E>aJtFf38YLe3seNY4GxfcTLtGNM`Wb^|7pmX$Q zYWuNGp7@4Gno{N;ph?A{;$r$X@mgBUUj!pES0<(3$sbx`I30mN*EjClWJGEjChI>s z;RAUOIrO|TLLj|l1|HK<@U5Sdn%elGFaESxvePUoQPf)G(n-z)9v&X>mS~>T76o1+ z>Sv@j*|2m{cQmwKsX`e^&;Cfs7g{pB&tj ze(W^=E|ksM_Js0Atms?iyEN-d_~lpAAX$VpCkNx ze8R5~oM%Kfx3*q<$RU?Qc=TKZ&6x=a)<9l5P3hl{M?{`MMyR1eOreDZ1y8=y3*8F+ ztVVNKpP4`2=IQhH5yFRoHZ}4L;)SiM=GCDKH2*uAz!BmTXi9hG9s9vQI-A4~=2r8A zVB>K{*ab)t5 zS}fU#*k36m(7^dzzJU{DX2z-JdhjzuQm?2j0T6U5s#HSvO}ATEc{~ESFSfp1V?U4A zVZsDW>>Vg;ZEXu0UkRD!|iM4ax!)`cTzW>4=8yor^-I@HfVy#Vd zbZN9=^m3Tkw|-;CrmIWUJ4?ae^8>3eLoJ3*tpYhp@ghqxHM^<98vhvYEQgXm;!*WfpQenL^z)5J`smzaNhf0R-Fnzx=49d4!c$V}g65u? zAIW?8ad#Js&J80yBBZ zpfM|lkS^YR22gof(<`f-~&A^tom~dt6iRy;ZBU_!(}00cbPLf#+ZWwC$y0Uu%b+^WeeN9lr)#QSO4qzST+6GBgG( z#Nsac`j#1=1op>eW@N#%QI+R5q<4L;+sCaAL3pBEHTiy7TB7ez)y`4{9P9_tA!N8^ z&mzx)bA~++=zilZ-0J*xCHy6Vlaka>J3A2`jY##JZ=k8f3|Y5z)g0_C-|oDfw&c6t zQttDxB>M7foKtAUkN3d@A^6VjAq)c7kY1Bq_G=VhhicKLpvYXvn~JGWQE&SNP*X*AZmxeXm!6;3m9rGU@%g*B zRBe3=jt}90D({HSrM&XCW@nUBsw&#Z51DEFKUq>rOa@%yzn_IBvlo>R-dfkf%?7-pueRPp?U#YlVpoTyuB;j2;jOD?^+XyUbxN6pMz zYnuyM5K&6)i^d6pwtCrWw2*5=-`Gv29)w&F?g}}7vw=sqAO+Gy*Mpk-{z@6c^C3$h z3RPUtl(3&xqnmbuq!f(HXWf`u=7X(9CDR&V#${W;`AQ@P%Er`+~60vG+#YA;9tVNJy_u>IC8hQ{Iw`!-M%^dWARqS36=hlbmMT z95^=9B=@XLTr`I=V*9HDm7d0s-Xpp-HpGD`dB5c8usy6^m&z%lj65mg{6odY2$ey8 zt4*^5_<=`jQJB}?xkgcS={8C*${*u)8%8@x3$Ll!RUuLvk3nAJjp3sPHS;eAl_i^U ze`{+7sdHrT z5D~H~wn_3*Op+`fzS`yFv2N(T*7T+tzQzP^oYYCH^y_=_JT`nz6DVP3VvezOEPYhi z#^K#68wA)&rj&ItL&D5`Jr%+u<6+?-)CBpXoNUI1F}j6quw#95jJkEbf>8h#DY`l0 zH0scJQTy9%aav(yIZye)?yRIBMw&9d(U+DZ*yqr*v%DkdG}Y`Bxc;t(<~YF<$sHbv z$N*gNko#%fwb}M|AP(T#=9Z6`Dw|DkvWRzy_L_}%laHwQraJ>57KLh3hWh6R$wWuP zVTNB$qQ!sv>F=x;@P`U4H!cThcNBYW%*SUx^H`hF%uC4_HZ(Q->x7>kVX?%;YLj0N zrsqKql1$2|f+$$YA7P7~Dyd(AweJa%mmF`}3JDydo; zE&{db!^O7xVr}{I&9c+w+GOWW{06`*0z}^0QpA}JsrOyd4@nhLmT)}+x${WC4R6Mx z2Rc3RKFrXZ8p&ZCL>CkmGAp(gCiOi(^DDH13F`>&sho8=6B!ISL;6D;bE&Fv>@|_* zJ90VRq-eJT6ek+IFfzUrdW<~T^`$eG}RC?%ck9nJnn9IHLe!eP|+Mo z2!2F&lGI}@u#q{ae^8K1=Tgbk;_0vP^D~|W+rCetT2xxWZ}TyWh9q@wjBei=&+1dR zZqPCWX4!`~zo^z_Qa3o@5{Py{V!M4hmdoOhBLURIdX}^(|?n7fiSdXQWw|pwi z;q1!(ut@ZAO`_Af z8h78(w)$HTmv^9Z_fFdPjPs~N${FE}j~;Ss1Zzu_>$Xcu7lrDSGUAxDU{R4KkYhv^ ztgz7hIIo$e6rUx!RGJ**-t0T@?(Wlau%?B3eWvRJDP*Fnh>nsf2qH3_{%U&KB!;Y~ z3C>zA>60%cqgbqh4nrb*qGpcpA_S)>^QgkUd?8Paf#dT+JQcCDi=wW#_ktMOSq(Rr zMn}&oi=B3*Eq&*l6rJ=i#XdyWso1E;@Ik$3Z+9Xp$FGJ5I-v3jm}!k|L>ZuNllG(vSOPUyS+mdP zsN3V^>YW^eoona=k9keh^5=d7C&ew_9h2*Q3ijB!G?~P^QM{R6i8~90?IU2@vy{rvo!7IM2Z*&;%PRG@`+f2_=PtQ6Cb6Gg z5BL@x_H}i2;mcKMedg-M|Fba+0Uy^M_%&?p7~O%(5KJC9v$fTs_#@*ER}P0(D!kop-Xz zK+C1|T{pgG)Gn^vAhmCbY;oiQ}%-81& z2NmOcypC~GVUlCBg?ldWx@V^^2LMhCdNe|-G>EE|c;MHh{q zJ?hHDKt^4iHJjkYt9D<9&Z&G~bC8krgc3PocjvU1oyp(f`xi3=$nhIy$9^<)eQas` zwq5dISN?#&V#(1c=g4wcVb2L6GA*mXaZ0@*<<4YBpSSp8zBAkYoRE4 z_ARHeZA$kA?&v?@fqB$SNr$MfKV zHr}*801eY}RF$$Jag^-wlG8BX@#ZKl=J|pAsbYJu3Nz#(hzn^s_VDIN4&sa?Ev0>w z9&s7i8Grdz+wtluNc9OO_u6>3F%LL!!%ErFyEct%7 z{7j+KhlAk47e)EWcid-l8|tF$%+SvBvMPnYeo;&LLFcQG7Fs1wWm5Y1a#5^P!OD~k zc?)}bLbSHjbs_6MZhf=At^HR93V9C^c}}5-+SyVYb+-x3{dm`CqWeb`6c8$0;u3TOig|+9a{26e-Z)d!l{bHA; z_s&H$Q&gwolOw&5{T-<3t8?N7W{qgQ8R;tZ5Y3+KTREB*b*kk() zLHbt05;I^L7MOV%QTV>O!(B^aS$uQkEQhFA!&&USqxglE5?(_QrfaFv8t1m7q@^));zGiSYHZDiuZF zKuUgU90}Pb&kJt%)aYkQQrZ@EhOxJPmUZ6-CUbTa8e=%qFMV*+wBh7|+GzH|T(r`t zq4#;ZlYMxzN`@5iBo{Ut^P?3Qibi;ht4H?sH*3OZl5;%TFeP*0cTYKZo z90W5{8;*|dLgtIZC_8f2La(5>Pio~FUF1-%Oa3CrINXe(EXkbKGMQ2h+<9uM5twUh zki}QC+Z7fFRbDIHxEj@2XrX*SO*ptcWtk-+X&y(Q?du0pAfpa@f|-r)rGp8)zCCpR z+I8Xbg=Bf2n-mN5h9oTqJF!T4iU#CMi9eOXq$!n<=yFzpu9($RSk|$25~%k4d%o&c zQrXm9lw$hXXWB{gUvIXrBQB$^1fAD8F9bJ8;QdPL zJMv;f9;7=e|8i1c{l+`?W;|&svdC;zx~cHSjKXeh*SewuQ_w!Z@7BY zUjz*`U_%J#pK~7T?Ec1^Z&(2RayEy5_HVp>+?W)9&={IhS&h?wtmnfHe<4CJys>|o z-*$sEz#+e{@QC}NW|#BddG_+Jf#V%8QW?j;4Gs=IZjos)I(%~Y93a@tu*P_^VTWCR zekKWR{0C`t)Oy^blN3PDn?FgL{~L;eLWp}f`YV!q`ae2H8Yu_n_)Y1Tf6#JAO<)I{ z%=4G22LDwlKN*hL5)yLzE0y0W;@H!NgK6JAf1DJ1ei|9^`q8VJo~*2_OWUXmZ+B6t zPeApMX$p-@tyUm;`zl~N)FS{N84$4Q`jlp0255;KfN*nw4loD6R9|>*@+;fIegRmI zy?zPYC0598%#^7L#}vXr6bo;9c@;;}@UpS7%{)hoi_Lgyv8w2Tq0@-I)p!&JDxCc? z0BABp%QhV0MoP^6rMm$7pdSSFC7WYjJ3Zwt)-^fO!F0axVble7yQuqrxh@QxW;cmK zfr#6pDL`9r8N}A^B47VB9hMMaP^q1tziX(;C&}0BrbW_3@x=HOCy2Pre^&?5hQSVI z@v>Z9dJ@?EiMYDH5O1vdRr;bFA}xx1;cM?m7Xh&+-GDb>SSX@- z4a-Y$QEv3v*xj4;iZTe;S=EZk-V&sa*k!T!jfA{XPxvCDlC;;I_2$ zT-VG^*a#YSQk$@<3Q)Z%keI&Bjp8lXzCfubp`D#AxL9_=`p>0;hxkqhR{Kc*)1gcL z5C-yrSL@s?&^q?m<%;EM3HDx)`*`2x`X)fNoA$4_?@W4}p>H3`ZEMq^2+@BIHXcHQ z22>NI9U^ksA0kg`$zsp!UjT_DPN`1P-6H~E@owUt>p#;0 zofa_>Nx~JTnP-@Mm0Vu2bL2#7k(kGa5BqyN%P+u${=+Wti8!xOXQCjV<<0DfKpxu! z(6J{tyYF2+@UsV}gz5mB7YW=DyO8t#}6QmWD!M!bWJlzVm5)CHn@u&+h)&irdME&;cFre6LXX(Tt$;Np`9#l4&O z(j>nly?9z7Q9>LY%vWvy5YWB4J?3Yp}`cm+E zNOYC^y~~UB--6tHUpmZ+*q-}(-yh%xY*|sL898m9?ErnERUrKIt_c+aW!=A| zUTCgJp|f|-DxAM3q^-!LjzH*PJ&};ds+kbrA0>@Z%?(RR2Ach>Dhn*o{3cZRZe8shU7Q*OCW4>7zUMXhl^SUS-H4SSY$4SGCA2WQ!r9!wlKrcRy_dTr&d+Pxn6 zgo@c{v4PQUAsM3J7yoUayluVLyGEyu>v9Li1nfMz!E`*1T-rI#0PA-J(Q>i2z{n=J zZ3hcJ&m9CP54F1TZ2(umqn)O75fJyb{Yg@UX)AH8>EM`S8wqEGFh@3aD$aObK4aq0|vhd@l)LKIdl0>FzixJ6E&!f|Xt;Sf1vnr^!1j9-hY ziq1Pd0^_-i^j9=aT_T@wR%1zfH4{(Vp_Kkrd0nIbc8TqWjL}_e4EDK{b}zk5gnqVj@e`&*wBbep<-Wa@~a})Af8@o$u9xG<|?cel6g3k4o*+>g{Q@>j#qX zVylVGMbGjvOf&LqBMu9`)CAt6!07yZ;31|;=T(_ml1lfj?_mbnOA5>DYdk}bp8pTm z%6Xdofp#KiI?G|^|0vP-+kbpH32@RIhj`%!|M2U-Vdoq%e=$0d#D^(nUHd8dQ8HeQ z+@3iiGA2;|*!&JL*D^L&5QK4XgGhgaNmRFB3pEQ`dFWI{#qW0 zH)_?M#0#bcAC9I2H4q4$dPajdd{6p`8cAn*G4o$;_V-()GZ?ifr8fLytNLT~9s$T2 zlv*!Bq|_Zoar9jP|62`09w&L6`+kA?pMLfC&_{!3>N>An#+@T=70YK_6q8SJ-{rr$^S>4SM|=NiRDXmn|F1t_(Ij?sa+1-J z@5QQvt?gIU|5mEu5m<5jo>9Go3v5U0gNzo;=)1~e{_Z@t3eV&Ac=i7f%Tdd+f(ey# zzJVnFkI1YEY;^qF^G^RI&pSibBm2Hwg_el_KEyP(sISTQgP9YcjM<+;sEJ}x!`mP< zVvaU-b3Hyu2)cl{f`eaw(Fby-*3^RSmns7&P-504)!V2MpUBLh&|dAl`P&x}5Y2C| zIgY~!oc<#T{y*0r1cr;CveDAE z-3lyxeC@!)Uu|s*>Xu?zAs8;PQ{I)j{STp{MmeN`B%{aB%pld;3352#vJ_x1?E1#< zc;;|LhyR6>*>z1+Jbv}lQ|0PWF?>+$&lpx#4gurPwdM>tT2z0uEZh|gYuD0C$2ug2e&;DPFL=>F`gXbC(dG=pfN}Oq^spGbn38D}45 zV;BBR(H)gbA_c9HuFd-wsQvZKBu8SH#?s`=SxYJE7Y`DKRL&mF=vCZ|&cRf*k1rrz zP-=ja`BX}&6vt_gBp4BhdwY|>pDI9YbSmIyT#E(+DACl?k_kkzkTbdanvxD4Pp>OL}6n>Z$fIza6~XVr=pFL;no*`*IIcD%XE!4UA++}cDe|t2_@sC5y1K^E|pH50ywKumP!8yVCX6qi-&Q?^+y1r90Az(J5Uh9 zOMqyEVA~z%;8P0y1C)JeUoa$@^hk-cKfbk`Q^w3I)dGZS0NaEa*3C1_9^o|fDhj#_P0#?k*b%O zYv()OJ+4@3U^EP45+CV!clRU?rqSC?9f^CtKhvfG*PCZt2%>fJ9tvgNG zjY})b9$=}>rhx4Vw`JE5Mj=eP+^cIjAa=_EDo>2WkWvLo{d}6fFk6EAqtG!g+#NVjpP>KrM%xf92Ds*k)O?|m%P=&>DD^<&ve$aR}e7*%?$aZJ`E|5 zccJh`=oOefKTu0q(b&ZTcC)2Mi@r`)0#&(+=Kcbm)_DumT}gb(Qn>sFy2r3%wqo)L zBP+Uo_p9j%75nrH^aPsN2c{X}{(7&AyS>IT$yug#sjUF~_u#8qSF_(;X*@CCK;OS9 zwo^AzcY^sOPGdW+zV=w_Ks9_JoIIXL^caQwa(gS(Ab%|H!toQDp<8Hr~ ztAx)8lWGZK6|zu~dE`W#Q`<^5;Rl5`XSj_j2WAVkw6OIw-ar|MXecD-Eu9FMcy>AT zC*u0>W_}}6aHRIu>q=gC%Ad#!RKJ?b8RM@PqSe1Mv?#B?u&0QhDHhU7k8E+SAD_*F z_5qG`S-)y1KWdeR+e{jVGBa~)BG+p^J#C~f zTYvAhcCnMr{S*~k{un_+lb5!co>}CxpJ>vn-OV==okMw`faR$M8x^y~P ze*{OK^r$tD0@ZDV$Y06}!v)Y_=94;xgnK4)bR7ig&>MT_Qw?cj(g$|(%b~*`uNN$E zWW6o_K^AZp+`vOht4xfQVoWm2p0%M(o z^3Cnf0QZ;Uw4Z##mwOjc;w$Y0nwWJ?7byn@yaC16*X!DOru^{uHj<@5{ZBaR0l#lq-uFS@ey^ z=aw_T@dbSBcWW z7uj6i0uo>bIe>W92nj*@O_bk0x50EpIYEv7HN;SX!0SxZJs*+PFPD9EVNlwER|GOI z&P^Ko0VxQg`nL3H;PxBswxr41jjra`UG|{YqvRopn|}H2yLQ#v*O10FzJX&cN@6RY zOu(0nfbTA$*i~0M0Ez|@KR`|<*imAQm~GhCu%xgCoJJi z1kcGevH_B_BfeCg_VkQJ1UPI-lmW!Rxw7G$yI!FQfQ%iD;8U9KqF0E!edDF^sA7P+ zvbaEj;p|+@My7AlN;>OyLl`r2k?pW+nD;~9nf%A>rB}uRAyNCyujOe}Ao~hl#yu8J zMj$oGwQl4Ja-R3c7?a1XZ9P5*(bm->2)Q(>l^RZTaVMEWIdwKHpR>u59Bs3Bi1pK? zcKlNg_xrLTLXorVK1q&l;G0*P-6J2I2YQz29S^wX26&CMa}Hu{a34Ls*k>qM6; zr}Wc?ZU7aW{yWnjX1n`fKP}*2)0lDXt${vgll!w#)OoS;4`_uMi5X9+pZDtw`HsyK zi#?0Xcm^|H(APw8&NWO2(@an3^!gD37(P{1z-p1+{!I$=CX3e@(SXe8@EQjv9F~^P zua8{>67DpJt{=8LkyR=SNOWiiw8jqDa;vd0of%u&8z#m_gTX>e{O#r$OU?ujVYH3m z4$W(9NY`fh%3euOnF5arLsa2y*Tc{YK}2e4BR*cPYr46e7OVB08tA4sD!`^Zr1*wE z6`~5}!00=wVK10l+iVhuB~Q8?Y!Bp{dfahB)?GLReEfGNJB3?c&g zs<-Na?7k&EP)nb(r@E&3twzM^z|mnGYT2tt_>6b%j&8pM>TS8KRQ5a7>?0Y#wLA<$IXycDl_4Uyqqr*`Tv zF1k{M1JOa{{C%igKzDpB+Pg!Xw%fgPE3D0ELVBGf`Uon|69cv0s4hNJ8eJz@w!-pQ zmEk!g7SQ>l05g1Ztpox1c7Zch7Y960jru6)`bB~{M`T%#8+k2msE?l1>#sINW!y2` zxy9RX7Avs%oThaD7hxr9gKX<=FPrg$xLjh*?+byzq5QAi4RCqHk zNAI)R#Fhi5yn1(hZ^;b~^hpllS^!9VTy?A`KK$+xkm|Wc+VNgqy9}h2hi~n~rs^0T zG-IEJ$Hcfrk!bI!>uz55n<2H_EmZH}nU4P|Y}!VH_(W=XvhL}vnTe3+9Pw)EnkHaU z7kfhdRMV7JmId7E$=J5=hdxU6;OuJ?9MAt0pW$S|__kSiFXW)(#Pubaq@&;r!Xiv; zsjB&-97!>u<}+8Oo&L0;^tM54VxQu-CrF!YPfD z%*EV_B@rRV@3I!qc^MA3ZbhLoz$J(>NiVD32Ufl-G8+7K)bujf@m6+=4o67A;Y*|s zJ{t}L$hMyb{G(+5*~fYuIxaa~=cd_IG%qj=|GokF2r>Eb>FnH1udIv+&5^S^^7^e{ zbblSM!0pINQ!3>k|5;YpCek7fuwE+9dxdQPBP1>4X7kJet{RWFvfw|)OdP!7`GyC# zuJnfQS_>7WSf5+YL0r8Uws;sqs@%Z$Y160QodQ|_$4#K>imJG7Exyqvx?Fnql<*a` zhKp_^lg04Sc@jzn8eMwcf$oE1yK$y!?*82%t{l=$FTn$*E8eX~>y}#93%8o0HkeqqL&{*=KLK=7G>;Rc0Vam?ZXioXx;E=lHFZ zvP(Ntehroxj6^^RNOelyB!@|e=w{p%2L%yoWICIYiktc~0M4`K;i-6B6F2*86^C41 z(3|lAf!L&x?=}>7?uvVl6yu3wNg~UrUH?wc$SNWL<8UJSo1vE%EJ;t#CCsfXGRBAi z(<8aF)16eguk93X7&ue2-D($5vpda)k;ba#l-C0!yGUD7fz%>A~rN)x?SZuAg+YXFsVXS{e;Ld{IGTO(HH&n6yDF`w42!4)q&6(dQ$dS4{M~Jf=0LsawVEkd+JH)%I!-baH7uTA%nm3Gz z_(7jBkm4;24%g({=#);4D_cY##)e(e%%A|$xAAMl!KqQAEA5knqPIBWb}f-+{6R@( zCqdcS;Sa&82MN@Z0I?TKZ9giy-lrL_NB9}8C6sQ!Jq{{e8Vl)*IXT!W>R08gc4cpY zq6UYuh!hE@)$xMFW3{{MxvJS2J9Zd>iNR`+EMAyP)}qP*(Tw!cUEgi}QV^@2p)a*) zi;^mtp-IjJ8HTxcRTr;@5Dg$4*n=H38*G>_r9?S5fqrUrfAVEagk(_UJfZzlAt3%8 zDWvQ(TxRKa*QhrY-9vCfQvhxgwpNc6pitt2NUIXX4EBIq7^BH7JqXCh%{dsV@7JFn zKjLmn17@6q>$rERaXOPuX9950@{EVYq^ZWU+<1J-x6kRBMu0w6Wo?+3@B!M*Y$pFeZvwyMdzFWLTW4Db=cn0 zgah~v9q{uci(er1G;hT2@-)O}^#n9ZuY29uIR3++UwL|!9OzAF!j%mcdxYQ6jBV{xE%29s263R z0>>Bffd#ewKHD7q5a@DgBl51PIazAYO>izcM`c;Z7oYK1>sByZ+yJ3srCEs703bGw zRTFo&7kkxY)&*Xy$qR-N3);>*K4x=y<-PSR>sgck0lAQ(qY#=Rr~wFiCQ=J&t>8OnBppwAKARI;eCR~O9AzVz7%aU^dp26q%fb+iiR<_lwo3lz4a*Qz9 zuqqlsLX{~~aI%dh*dCQx6Xgt#FWAfET!%{%JeC`n38FVe9z_&O!{Kh4M#X@VvBeR& zAOi}3#y7ucQ4UZmJqW1;jPR&Up$nUZS}Fry+tL7o;AeU92=xQS)k(%3J7($YpBi6z z{CF$HPFZTz%QfE7STO=Y5;20pc=oyLR+?_lr)`0$pDc!kr>xq^9yElYo_jKKo`T)`_jzdpNv%R9AY77H*V1Mf*Y57~N8RI2Cj}3HSp`nG z)E|iCSxPrDsg_RK<3e>I#STDxQ{mVt)-*HY?W2FZZluIEwlK%%i<`zqK)ap^V?tJH zM9@|A3$jOmLAdZMMdX+a2vL7A2)5Vk@i9HIVfWb#uNRKgr2!M;Zr_3y!SVP*FhqQo z$8wAznR^buxmdY$JS;QCUYE91-vXOJ|^ozYBwBN*LEPlMIeGsdWZ%7{%(QC zu;_V_Bs@?-9piNahIhNlCO&f%wVx{R!yL0Bbdla~tH3O$aasVXw&+5_8*Z8&d9{Jr z)&n-Bg4v*082X8vnklI7L@?^**Q;w3{if7s;wMY_d=Un8XF6u%$c6wYBeBZU23Y(;HCT#y31wPZa~#3*-h?o(F9S9 zT6q0UC!#j`lW)xQQfG{*UIF{g053gcpa>`ektzxosXx5I zJvT8|0BPquuX}2=jqFz=TYKt65bH=>M@#Jgk@}+env| zBUpKspL6Kt*WZuGK?~I^-aTvOB^5C=06F0q9MMI;txu~G$S247`^z~jpxR!vvb;R$ zPaA%fECLO=air4c-|88~QGY;N!Da^bvT>lCbL%d3!*Tv8i1%0oXd_N(RBnVpEIaVxB#og zWnP0EAnpJb)=`;;l_elZO-me|n>HVvcLo}H2rnK3DAeXFg>0KwO}cn~E3fX^c9;MTwbxHAlvYx4;Zi!LT!miYTP$*w?G-L<|(+pGDDGs(?s$tYmr z2gG;cTYUhK90Y0&MGbp67C?Yjy9f5GWTF@K8Zrkk?uNT76;)ML&U&TtxvqBzF2yx~ zX0l!0y6HHv>R5~&$DNxckCYmT4i;o*rWfoOxX0WnuO3)P9?%g0QRzHC;{}*} zmL`qz!6Btclr8tje%wUHn$PMX}STs6^J*TS-=%H46ipjnSO0ECS|z2^j;SfIqn zgWllvzV4$IdRax+a$jN+lAZZ%>}CKEpf3iMw)AoeZU|s!Az>psEO#W+Zh`UViX$3Z ztx;k`Om2lY`3dU*X5I6eoj6I-97B@WzsIJPy1@jH{Ya68KmpvqYxYxhB_x)c8_14j zzl_5^m{wj>g1Jm$?0_Y$6pc*{5H3T4C&Q1RQpF~}5PNg3pT#C~R#;euQ?nnd{0Lg0 zUwrq0$NFnxox2Hr7uB&;6EKyM;>ZW&)yU4VKbh^%e3__kf-{nuV=SFYsq6KCCEvzK zYp&{I49!=?Sc<%I^z>~<9O(!C{xbKGw+MjwUY<)|d=*3;40+r$y0WeQ>LTOdH1$T} z;3$#w-0?+4vvTnXK}<}36}z64mMhucT0-*Q?K65q~cV!bcn z^$7xVT?>diZ-TO*0mv=9+pyC~C@}TOZQI~g;r|Enq=qq=FMYL-;>bwvF#Xqz<#bTo z8cBwMQQ)0R61XG35w$3LC8C@NA#?GkB-4_ zF4YPT(Eaah8|*9DtO0UHz6zV&%A^SWMSWw+O0m?1Vmxi+!Z{>D=L-3;%eTD(NV!vv69 zeRV%|fUe>BDUaLl9|lq|9^;UEdgjDAemMbY2+uEz9=Iz9W{s@nr{q_sKWL8Hu_>eLL#;|3R_ zwXbQv*$HyW?|k4JjamL!O>iCs+T|eJ(Q3aTu?ysYY>Y7k{Tcv)(sSBzc9xnxbB;^dpx{IIDk9T5{w zu>HPypCiaMWDbWajc?LuKa$l28#dhfUNFh~AR3ra1p+R8)u862c)CigRw@u?8Zu&M zUWZFxnGu5N%{Cgfo-eZb(?W+3mRPJdm1%sB(CzpH-9Iag*SriU2dsY8EFSEyA3 z3`tzh=)p9=O)s!$OS;t%2=l(4tu2cwA<;H5fVPQ`(>pfT0Bx9|kWJLnzH@@4z|bUJ zR!)Z8)h_apCWBD#4|$bdWfoC;lK=qqybdS7VCekxAdhHaZDag5SnhM#xd#AkyDgxT zR|k^XcHIs>Ww3h&-JHvx?d$<4Y}_uhSC3tZ=j+FCG_DK)Mdd(tS^?M;66;e8Hvp9F zI3QOZWLvH>Dr)el$f{R%sy4HWy)uGx#HOavG18}J%?6h0qmg7SqBhL8rrZFO4oGV9 zh_gy$k^Fn14b}YY<69$V)a!1Jz7#P#4>_DKFysvzXFMPmU0`gs%3WS0zmtmk&h3G- ziW@Dm3Wrt1`OB3zmfS3kJ>$nqqZ(;Hlp~qF@MfL1Sh4q+6I<;ayroK)b_aHgx)C`0sn~GO6O+SX5%9(P`3d2wmRyjEzHFCZHeQ-`6 z$gD-E`HTAkxs+6Fvt&crtt;|B5sMl6aH;oHSgmz~z(Jvn>@k0RAk(K3bpH|S{_}A9$Izm63xIY(TW$Q7O%Ni#Q)pY0ft zWBS|hkg~x@7(8XA<-eGWAOkoHLK$x(<(&WUC(o|PQb|F3EGw=eozZa{kP|FfS)yq0xw*-%ura8sn)0}}s!3$jLky|x#w(my_Sr$q6DJaD-A?^pVNHTMBgnbGvre@y8l1Hdwjq>=bf&iE6+GGyedCnW*@ zxY2Sj7vRh;e{&Q1Gx&%3ki0H(Y3&E)ghVuRBIo`qEB+r`O#kuNBm(BI`KW<}?A}sR z86=%m|3<>y`!kMssLaEzqm*v_RqsD$Fp3Eq+REKk{$G5&^rF zyY?8^yR$okW-TQdsEnTXagjtUI&)xuK5Nu^Rn7z#+iC?6fhGdWtHDB0M4Nl&KnK#- z1@+fg0xlQ(8b*2>^&r;yT6bHDY*Wp}qYEUNtEsM!EU$fyM@KbHknFBPkCQRh<1%Fj zQtp4WF+9jPq>7vcBvt$>P+o1hkc}2nlQvDoq{9||Lzz|%z`;XHt32tAhR!1_W2L%# z`f3$Aj)TSV*>(MBph3~KTFnrFv`T^>qs0W7{BS7G zL5G^ZM&>;w)_ya)W_0S&v+TU|EvZZ6ol#a5HBnN9Ab#xxfD4}UWAKIFTTselSsPuB z+Dtv*OI^aHQhyxnqo4YH<%alN+kCslaChYw`>Cr z0fxo_b!jmviCsIPI)90jL1v9TVR)5qKf_c31A}#vbh=VDwKi&)6Injx-Jjx-4b-}A zG~$DRBa2oSSRI2%OW8>at=4RQxRtP}vfuZL{B5oSzJYwu#9fejcl5XYFovN+Zt!ES|}spv)7_)-ubduC$D(uv`yi>?xD-7 zlp^81Hqog<&Bd7o&jv2jZFc`uGd21$lt76!BcQFcfadHn7&-6PF|u|aN@T2u_ba)a zJZ2ol)p{R~tPIHo)Fg~-7z*T` zD$EI-r0=bGhpHP@cK>KG$4Kdka@X@=v7qg#0BzlhvkTu+$Bx`C8`zS_6dP6hfMZgM znrZ-PU_~*&T--;_-AQaKuE`FICmvuGCVll+*qZm4{&;b6q$8s@@j6}7jQ6F&kVfAD z5dzwArn|W{jtb@#Jb*8~q>s35sM5inlQj5c#P!ui@gilGyO9|uU-%t{6E^zF8}Y^$ zEDcPC<+n#&Y;E-;1?MHtKIl)-FWeQoBh=V&!-#JZzqd)X;bB5PO|3= zx?u%+eO}Hz8vKf#_+tLCK)LLqhot@II%=Gp1;P1|9NaS|DN@3&`+^Y?-(NC_$Fl_G z$4rVCC+tVyS~U~RexFgYS13@Q=Tb~MpPJr=5A_ceY{b+mT7|?-=%Xn;c|UStPTtur zWDxS;G}r(YA@l%S*I;q=Qm#@!*$ZmA^BF0JHjko3 z|B^A)lx-Dop<~Of*Bdgoum9Tc?5td>y#(XRqYPwOWl3dA)XXbp>r1b}8Kv)}P@ITQ z$uk=^Y-uYVBNmMjVoKgpXHCt#YTJq1ovxBbeenq98nv!GA0w@}rB<@8#dq^8P1tar z$_z}Vf&F)Q@`Ndm6&3ZB4u0@`W^{zLJ}iF3>g{3)a$?Z;;Cc2?2=uSU0nlh2IbYPcX3F<8i= zC(rUV(r~3scFIY;ucGkH160XJ@>}rqxa7I&#z}O7uF1ERlaSJ!+0@3p-qGgwZSk;@ zc~9v(*0M4l@(@fsTXVe9AfUody)9t`P|JLu#f0441zfTaEnwGh5LcAvS$3ru>w|i| zgqaZj7-ePSjsEHIvU5s0zU|>r&KGcX4h|j%e%V$#=cW)3&tKc+0bkDJ` zDsdjzFT+y#@1uK8s||A+J<@7Zo+|b2tNF|rTCeEX+vCr zImuwdf>%h1EU77(9_v4h0~(Wd%*V3jis^~`UYrq8bN=E&rGDAXEmi7tvnKGV0k#tN ztf(qLqiuQ}ZY`PWTsv5x8Bx#CKUfj#p}*#$-m7MXR~^-Al2q{4Hyj6&4ceICOWVC` zPp}Kozr%6AlVtrDD-4R`9U@_Yfyqn62gw^&>02)9t6M4}rHmIW9zWf(je9b&+&o%>i0rT}I2=JftO>SlXn^ zUd^LjylcScZ<0-&)BS8<&JKqdZxfzAKXnUMk~P`SUKCPMiF16Eu4FL-VEwD_|#YEzmnE#V=Z0uHKr z{a z=L?}ZLv!i%)+x+Uw|I=c)bVOb44z7b2)57#P5>Vk7w92k2gRyCf-<#=NCznpPCav& zVCWN4llx61@|o-R>4FC}@3K#PE^-@rq99MHVPFanj~WI=>>GCcc%+NFxL^<_uDqrEchau0$6lw8JO-@XwT6X%nW_m z1(wTdZS|@*=?8tZACKO_N887cqPTNLvg5_$@)P(ca^^2`feC>07*fQ~$La>OmVi)TVKI9hF@v zf!TTzH^aXmab=EWqP;dvqTpHu0tJ(nzD(cVrhON;)>nJE2xHsnzr^ZjwJ}wCBJJkj zF>2#3_X5+h=9!bTvu;`&cVffebnzA#>Z*QN%jGW?VFk?9u8_l!!PZ%z~gFXKZM46=DuhH*P&raI!a{j5zI-p&y z4Z1Fb0gsButOhBuYSs*1F(zsany04jG*~N@_<0jcdtJBeVeaz>B4E+;R#iS9Hg_Cn z&-M=LVA3bIMoJR3s$QF`jaI6!#us%+#Eie$Iu?0m8#634s_@NT=cwwmPKed`R53xX zf0pINc<Sp!A+Kr zkS3HyxX0)wBRu{R$cFq#{7?mB?K9LZ2f{C%UF1! z-&l6FEaJ7+NR?EWp6i7!^xL7B1AQ7kQyG#MuWw6R&b@n^a1J|>T)g`}&caVzg%in0 ze&IJ?JNSOh<&Y1zlwouL8LujV60~*0?c$C6r3F2$t4eY#o;+<5)LPZqOT^XUdG`+O z4uoY#DYXZY9en}xyK+UtDI@_iL#F(oWIT9j;W z>Wy-^j|^mL-z|w!z{hLoe$T;rpA8?GthT@2`>kj^&OU*(xaSXla5YciM=FK~&8Ayb z+Ggr$XgSVOO)Oi_*Wh=3tw3;}jw$aKZ$;ek%oOl0#=zH~YWMP5j`tS#em9U6kMZl~_c?A5Wu)rO{N=$hu>PdPwFI9!qNt=I;uk>eaw znobtn=_PMI8tE6`LF>b4pF zpRV`Yk9+_Qq4E_%#tDjRu-WrV%5d{X#WjLxcMF|2A#x->b)GfZ`i*{Mai&Y*l5dbU z->X6|z^)m(vMtgh-N8svz@nasYV(jc-4w`P0QEO5`QlbRK3_&eK>;vcLO`zA`bu+d z-}NcTXix!facAZm(|!lg_hmDv`HgF;0$O=k9b4h7S~&)~=_q=|KV<%+R4Ao4j$cqD zOvmpzLtc~d9NhwEMZT`#z5#?B;sJ7|uNQlJ53#x^$6*#*9Z;Nc2mg}lu4B$$ zLPX%$gVe0OonN?HPVxev)@X1s!gNs6Yv@kIewX&#YprrvF;2G8B`rbpio>3^`6%2Z zK2uf07AJEgMG4CnO(OhIQ+`+zgc+SvCFvb|^kvoXy0}SS!~z`g=}LOq48gk$4v|70c54_=tekKcOI=H`Yi>8n0}B|+04;J1^gO-uc#WuR;cgTBH@I5X6b5|2w}(pr z58Wd_Z`&O20ycb&@E7^fyI&m%6M}i5(Fvr&UXeM{351=;bc!+P!1xP$9vcAie@c#l z2}w>>P@x!CXaUCnE-&oK-1DU4-!sYYD0sEA&>h3%X}w+b{CsJtz3|9zj$aC7V**Vt|j4qEHRhtMcjTMdbA_k zPg-O=in542ZKk3GXZK$`u$TUvf8IXnC)uwQ4A|MovX2+fa)TMWEbjPEMhP_Gk&WbF zwk7B_KEAp2Zn>{E!k4Oi-@g|>;KBpMxoNH$y*I~5-vS)EAco$A@s;zWmEU?5stbnb zz(dR&_X-jmh7f2y$JgdenrK!u2C4gXZv9zfilJbEP{@Vt8MpsqEaT(Hx-`}c>2Ydv_mjOuj3D<$B(E%V=fw7bA(cenTfx`7$PROTR*Sql3izrJHnEQKX zCtafGshJsXV)r!w>U}%5fYL;KDh8{^y^hGqbytq;Gg=#57%e4Y%sNKbLT0Du=a>Za zY(9YM^9_Ly)t;`9wz?9O_OEpoLRMCQ9JC1ZAUk*mH90?|! zDaQpbI*=pO#SaGr|5||5()|=Jw1J%EdUjr^zvJ4fNZ@nA^WAI2eYraMZ!&=sfe52` zx>f(n5z9B!al}lpg9X}qHd3B@RtMSaQfWY0D{(9>5};wB-JcppN) zkHW(7wND$zE{{2dvtGIrnz#rY6e@vmJ1$!S=!G3ioX%$f&2b$CmndWobAadZksHJhmou`8YXkfshjBFc@{uwm-aezqcke?{=MUBTg#?lIq)>K_34Z+|N$^a}0*~LL}f=sNB zk2oK_GBcms`Vy$K)+S4&b^*`x&jPlEVsKxsBcMbrb-0er>&M&OA!G0LNMJB97xyXI zuI@hBua;b(FRXi~H6WMl5;YOo_EU1mZd5L`mGp8LLoHvrCCEPFV`EKPJP$7=V9c23s^Z_G^?rZ7^-j`}rCZ3d! zEb1y(oZirM+P(RwfHcpbxGsy1TGUBMzVcbtu;i($Vc~Eiq2U#X0xm+yjRdocdM(olZ-Y-Of;0g2sx{Dc5XLK3-E)jGvKpQ-S3>=Cbc4crSWr)#u0Ez) z|7G?J8Vt!~m7w|J->t&$7^QMOWS-8M4oP+PT9M~SxGz0_<{4v(1DNdh3@i1FYb6d4 zC~3IQegi<|SjL8|`KM2#zxItZs_Dw@Ylf?4N&*Wb#_ki0uA{c476kAnMfBnCfUm$L z{}_;U=t2NzC6Kr;oM!SxMNgu<6UH+pKN5K&_lNWT-n=6+?_(@B;e*FMe@^8y>0d>^ z+U{JuhVj@22EiH8o0!ct4_XPFN&F_BI|b(SWbCP^Y)XYav#l^?4vU1# zx#Sam6{|l3Fc+Ll=wA1$TMdl4jxPY~O62)B!1TXr$!P>%-y?=VvTLzpL${h7#7@w~ zydcLc&Z6FZFy2mmX*8Qvk|@=k3o?=|4-^j7G9yP;u2I8UNDdBq#j|9H;v8(j``Wd5 zLg;zEHjLTk{IKxi1Mb$Z1=$+|FlK|#s$vri>766{;|I%U53cSXYrdny)HHSc&#dP> z+&mKkA6@i;3o%R|>6&oZ)O>k(vyA$c{NfW_p1TFr`A9?IYaB-qxOsxxkm+L>riR&_ zs9USC;d_hMCN-|ZfSf*yh`~fc@A=-&oAbSeKya41N{wqb73q(|lHAM8dg=nx9{3 zTsMX{_VK-(49lvd zDMjR}4lc2y3o)l$ue#PexjDh8hzi2}sJ1k7Ze}gA8SV*5ekmL;S$yA3;OM3vGFfRU z?Gmd~c=|SA0Ae`t1rfPYoNk3Z8$jD8a(aAIyh%}dV@w9pna&G~dKjvw+xjA?*3@7q z`-O^Y`l0N5@r^7Mtnc}vAQKX_lEuU#VcXzc7M+=WDPl9ddV`w ztII!``pbLW9~``X0A@ z5|(vfwzA0ZUar>GPRj}lV3Hy_)S5TFe#%%Awn2vh8NAoAqu7F-gY>87SJAIGGQJu~ zY?F3O2TCk|LAQoO9Id7L8NVNocP@{6X@2#e2w*lk&Z{^Q!Wyr0j`qaGa|J+dp!#B> zdz8T$->tw-OY>^;C8b|{uNH@w?;J0R%DszmU8;3MLS}!Sq6!T;dS-JOOKt!Rqj!8h z<=pSkNu_xXKcZf)I$~Dj~ZioT+(tR5_f0ZL!>rzo(dKKmZ>y-wb)0nD>+PTg23+DB;e7W zj6UCTtxt^D62lg84v4RRMc^F0u)eo$YN_dfHBf%-ZTb}iE$aT%;e}oc;3d5Xifbx7 zUw{a3Dp+zwF>wl5afE-U5)h7L`>21n+CqgrGegqpMm@dkUOp*%l;)g8Qfmw$!+u!V z?k#AEV0^2FZ2tk!bZ9YL93AvsJ6jLo3iOTJTO5>-*%q6wb{Lg2jzzjWT@Hvx>3MD# z{n9UiX!8-xwM{fybK(IFL)Dhf<;2^}eV35*Cd)6*^&2>YGhF4kDPa7^;VW0Re)U!a zJ6cZ*g|a}oxymm zyT=28BGfJ7Uh8;9uSV@nf}H631NERV&hHkQw>lI&-n^NmsU(#j``k@d}dK^F(mB5!^ z1Tt*{G}|sH#So2%0>(!HbYH+$PsK&5Ji!$vkHh7sF~3M3~hzHh_--oy(BD)$jsvJe%pE!H2pBUR}eIB z<}L{$GanxSovDab z#NAz{n6w+OA)G*ju)bbeW{XE&w@sbAzd`VHI@5X-$_zb31G}mLsibDS?FW(xN&Ogt zS|ER2L#J-}MX=21nVGF^rn0T`93C3#BeQM}k)#~0hO*-mmrCJZGod9g#%BCRB9j$$ zJnOYYa?QJ*Ge+9xj+LxiplN0q$OnJ2XhOZM%nd~^0OZBK2VpZLblML`*ck1aI&om^ z%s~?<+JJJPz%wRtF?nL+9*i5inQKLu6S@L8ul=GUw}W9GknlaiY{6kPPEYk-Y2n3Z zv|wfP-2)Bm(pA4)DEq>wB=j3>hrv)>Gm-x3hB@hR;O>rfKif*9eq~9RQS)663Qpyy@2!hKp1iS&;R>BQZpI z&Sa`BLTb%?oGg-xpC>ZY%DA1&{kCK4kzG`vVW+a^Nm4x;P1C zPrbc?gbK*YO_zIm+(&;U*N2ZdlvMB`*2kaJSrgE=E6PO>oN965oqS1L9#SamA>^8_rn80U8>X2Pyn#m_{>q151b^8LGxT9=O>Sd9)lMUKDeh1kjIJkg~K zEW+!+$|&VqWSk`|zn*X&ws;viVwo*2PG7saA2F!hd=JGZ;pI!LxYPZHrJ>sAuYKcJ z?y8t~pZe9fE}5q51!dF^P2!Qa52=owfwjEy&okZy8$N87zxY~H_ryW1GSpj-%HaGP z-x{g7PFG%n&`NQ#BiprHoQY&W!M7#!yyB4eUA-hFW5Tf7+;-tht$+@~n-cg)inO&_ z{?bl{X8HlhCOncj(L;#>>ARz8((Kzeh8O-YY%>Irr=tbs;#25~R)4v_fhu?YP)8{iGN;*>aAg&`-E6o| z+q3u+5@(Qy{D4Oso-4;xhPR>ljFpQR_-aGo@}<1)73lFCvP4@4;0UVgY5S38lpk1} zbQ;Kv=o)3gzRf8eF&&ePYY#9gwXc`H<)V9eSNdv>S{%2uj4w3COi=UPjd052^2Kf0 z8ggU}gUBj0Y_f?IfLp@cNAVmSM;`(lf9YgoiZ^^Q~;W{T{SkN^UZJ9u2 zZR?%dq^*5J2sWJhLe{Du>j9dQlCQTgVbw|=)|9^6bkhx@mzWnK)~2xA$kzk|bm{Um zXyuu7kcXk{?!Dj(=FNwFjVvbW?ycmu$OplzC5}^bCUw1+LS41aj^qqnjehfh;iqm` z^ZM)({3kF+$kr<9@089)GK2hj5B##=`vIg5T4>?>x!E7mf?M`WovLW3eqPaYg-w|) z{s3@^qRyPjlnClyXw!O{oEjr*MS+8B=bXf9ndq%~BAli_$kJb-obAid#1iGUjnNC4 zCXLTenC6M*O^TLC)}rFf4r5!#g=MCC^i-3S3JwJ@AwNvrFoY3%>CZ9Yx$tRt!ABabav1LY%q_`mi=T&?w!PeAa`p%A6cj+39I$q82$)RJ zDc|r8i!)e;tz9ioGx~hFo*54qW9u@3k!I0MLfN@lAOsff33*5zCEWM%?&eqH6P~wY zWZwW&Q^GMF*>9k$dE0vJVG(q!w716((0vMl6yPMDhT6tnFR28^vjmXZMZs`E3`090 z|7UY=uYjTWMa}&30A+Z4GJt8VAkAf?)-uG5IPucht59NYvxD5UMEX!C_K|EJz-2#! z9XjY_FaAXV(M%$E;z&HdjtJ;(Xy6yims3`M*B9iz*Gq~&2Tz!~%P$$fk_AJqa|)O$ z1$M21uJZJq(%bW&Unrbfmb=`KT5Y0~Viq)-@A3wbv(NUges$W}w0D=mZywY(bVl2Q zzVsA$n;%<`rm(V=ppHLiv^v0asBlgcK&jrRAnOH!wUyeLVvf&XBFsN{3>jtR%pF>7 z>$~6wuUI;`@OsYZE4()U4w?|KuUs(ay| z>Qg6^%KpZE^hV_T#bJpK*iklY1;9#oJPSa;QNBxGU#H|`tOl8W&{I4ey32Y1$8UdY zY1zI!NCGt1T!l1=XWP~v-mK*p=edoz&;P2}X-1>A)90uB)UgBwHy#NU1VEY8phIT2`CFmPEsHI^ydi&iCbwtO!758|WaRh-n{i-uQ=eEHpBuw6wM>}{ z^-2spIf!q74C~IWf=!18^b15ZXMLN@t=%0tm|6c=PA93AT=$E+zR`v*(}7BUjytOm zO!6UBnK^MDQK-6NW}GM#a`WUdY)@t<(uU02$hn6&EV^x6XpRu^+?YSHRf}p&6|qGK zWnZ^)vk3w$xgXze86VnnD9`|AE?d8*_ALsB7;@=s<}p`EoJqF}-_MN11cQzTPDMwV zMSysE(Hg;TP$pDivK1Zdjl7lf$l#(1N4Fo`8e{1?X*RxOYQpJJzTS0%<<1xWPILzHk`Hw$OUcvLjPbS{YXH9Y4{Zh z9~)|Gmw@ftE3afDjl3TnrNQ!k*2T-jGVkVkgSKIBLD+jzM^-tRp$=1IuKr@U9X}f9_*Encpp%a~F{oeypB%^;SjW zkvR;kI{BNWuq*rlqmO_&qBn;wEl=C1KjO;;aAG>0G-LhjLD=KWAz)&q6_X(YZOEP=tZK5mG ziMgiBF5;5I^s!*aOv*MIVRdLfy4n+zf<}uUA+T4*cgWFN&)x+e5oz-J7Ib;1YB;lZ z(}1_?dgFNxWU4FK)hiTh?mD0*5WDVMR=3OS*yBP2&tP&j>A1JBs&J6csh}>x`;?Ba z%RtJIU0Q(qoR0M+DO860mGk#+{szxDGGO%=Wi=Ab!{QB6&q*YnNerfbU~H9M1OJKW z|9LW%X6=EeuXEHq|8P?Jfdeu-Kdwe$6hs-Byfqf+^cNHD(j?d1KKY^erX*`9W7JYiV|#2jM%=T>5I?lGPq8jFkR6h&w|&JtUAr@!`XhG~Wu zE4ly;ac!X^T39}vt~nlKB0n(vkX%HSEx!^Jbtd#qb@J;KHD~C?X^yM=ybxEX*WSvP z;zbe@RYTl1S3z#LI*3cFcwq)6HQ}%`E_$+$`(>@jdf|kjKq1I*e@eQpb9?E%@s65q z$`)qrzus0DEAHWnCz}VJf{QZgYr|g|l2%5CHLvwo_3&~`_0cD4vWu%Cn&M)_E1;d& zedQJq#z)+gCCuAu&~488u1K$|4JwlnXd+aletv#n%`1OVdqFYXq^fY`0VkvQm|f+< zq?2R&aQL+a;&|)P4Y4%6*DnYTTqSeF9d8wxWI*`7-NkBl+2oI;iz5hz`j(O0lgL=b zlC~C49llE?V|uRe@HerMyD2@iI5LMa>RiU2SI?CB4*Ff|$KpVD`K3x;ulj`ZoP%t{ zyaPxb;SZQ|QmgI4<#=&w>z((R>K0qNj%A?vSl8gA0%AP7@6H8L!dmayru=kjy+R#= z$!c3xbYefINVVRqYbql>VWpVyYkye*m+OGR`K+f5mAM`4kYl*-Ty86dRsOE9Y5l`I zu4_5@>yH`jv_D+Py30FvZA{#ubj~3ER=^T-YYfk9Q+n6gwL`0g`Tf`e=@grh&K7(} z554*luu{)bJh;$}z-8TdJ#n`sE9(Z*DPf>Aa>06T!Jxeqgqh_fPd`Z?OV3bG)sBDN zN8xblQ;)XA(@GSRo3@qw=~lY#M5z%kg6P6#sD@1H?Npb7J$U7Yz~QLVAgUEBFJMNh zJZJH6JelJEH6QMjkm}_A^LFJt@rr*=v zx^_?tz!RD#hZS?>K1$Y444n4#d7EV)>)$vK*GVoupb!oVcvD*ZIRci!AIeZI`Jz`| z>^exjz1fW#7OFm;S`0Pz)i7m851cCpNiR&=w!Qt`KJ7CCJ*Nf9(H@K^T2ZoO({*!BGf}{ELr7g zh*W;ioaSo9rKi)hXIF6Q&R!#O2O8{_Z|+Cs zSEG@#*C}u=0d*b}8fe*gFNyWkuiMW9U1>4mlas)k_%1qH0IKE3i;Hf)<&{!tqh*^l zdtV-Wm!JnBQ;=V4c@(!p8h^0*t5tNIvh7-3Oz@B=vg4{!c1G;^hgBC8M>l~6r}cYs-~$GZBrYG< zi3mk%i;(ulJNe~_4Rv6=Ngv$K6 ztj?p6gbUj30eeDa3y#A~1+AZvCrKF2VMThfb^2**RK^1o22eJXTS=4+KrsSvdKj~R z@9%oIU&K+$He?@GDdS~O_+KNNWb=!_qYEERPTT0dxRK#oK_)IzY%JbM+Avzx?@Qxa zk0f6G3x^Gblj9yrNlqCU-;8uTzqHy8oL@mD!sF#-=_ZnKQUoKY7`4_o#fkp)AQo_B z_RWx}0|#knbgk@p4fZ^PkhjVEuyA1v9m$d``W#@Egd5rBF#aBsqnwAMUQZ{()!%&I zcoBC;bgfJk8UeoH3M`R29V3K7?B!qG1lHnT8w= zJ2BGn_Zm+$h_8pMNe|PW6wTAwj&e%R%&i&8)-B{3ciLVk-M$Jz!BFRE=?)09VUrku zO0GVJz_j`7HmFMWqBAraK!wcGXBgzt2Ef(xBgh_34s+q%K-Y;)_mjRm%P-a^t=<7@ z%ua#ADfjnXs|UegJ^5<}23|2GaoZhecoh5F{<>RPG^mq+o291I3FXaNH+vfg+BY(6 zWz7Mc4C@VGif>uBdq9r9YIB!NI5Tn`)SmwrTW=i})%Ly*3xbpiN-2n7&>$)e0)qvT zLo!7q%@;+=YW8eC@DQNbV)OW0z(Y-uC3zv{I2i&$GI-fIWV(l&t7Xi z&;8s{1!0K@lVNf&9B~2Lq%$*T(Aun(Xh5!5H^M5BQF07elDCEc5AhLCeBLr}rgepKddD)rq}YA| zlbHPBy^+(ac!|d!#|i-Mu?+fISKvwM3iO0-z^^`C4)=Dl9999bb03VW+&VT&Ccwa;gzt#2oS{8B`b&M_orx|09*s?P ztfIM`xD#E%@q_4`9ng?9s2YJyXt#9v%2%>;ybP>2r@LFT=1|PUtR%speg_*_jks%gD}Ph9pF_` zFkKH8TC5wLU*sooZPICbW+M;2mGEw+_tWKS5^BAU_&d zp01%ke0-|+Yn5-|x(%{l7yZ>X26&#b8?tLLeJ^${Gtl{UjHVH7-P_onASv9p0M;{Mwflz=mAFWPHfz{ z@|LO$lh|kjU|xwItM$7Kyx#=-_Qlp9wvffdwN=|Xz(;OALn4#=Am@r(Q_#(c0%Fz| zht}xBv-1dPH!zC$C>nE@<2hOG3NK!9ILX%?!1q;PaZ~_!r`JRtSd;?0nG&GlspZu@ z+JZFwc2ZZXmH45U%k>+Zl-uGQQ!|mU?yg9Na8dfO17K`D5fv8^uq}(&u1jN0YB?}b)1Vj zdtl9Wa^fq|?vf*st~~bWm$suw7I59lt)%+63ze?V?0qDFgS~H2Jfp+``0pVDj@cr6+{K8dgoogHM;Qru{Hz7Q$w6m>>J|S?|C)Yznfts zQ72v)w$>>NZE#uvL3w+$ry*b2IRMyqkm6odVxJXr=t%VM0vu{~N3Zxul;{J<{i$j^ zkY*U-%5bT~yvvDLb*u%p&_vgbuQzg3MF0|RV%UZ=9BkwLB^*a8g4AIEe1fRoiyU_=tj!kIzJ>%y-H_ZQx!C|`I{sIK8 zp>H{MjP{*i&U;-A1xIJESIEnYOpdY`fv{HyBP6HpH(pD0@1Plugb1=QNh+RqPT@(8 z%%68x+XB=+U?Sqy$*I3DuSzUL@D`>H9<3S{8}-PMd|0&c=DnV8+oBYPSucy7yLPhV z^ZHo9^J_JL!gzFtUGvEGeKXc5s-vW@7~sw|OrD)~T7$q~@X5WECf-*!xI7L|=mnZ* z7B4Wh;l)*?Nklz2+&QWMC;GySDMrh}likYK1q{n_FIO=m$BePTeA-;LP<6zhfdb|J zoAvEAAVg$0tjouw^BoD&c}3q9nl#h8q{RtoqhZ&`FsWYEZaXRVfi)(7RvKL4vL;`DHe|nG=+u{DvQFR=Os0$F1dVe@e0Q=u z#iK)l&sYTqv=G+poh0czkK=TdUL`P7PM-wsOO&b4!AVg1U87S&X#{VU#m&5fq%#w*2fisHAEjvAqmWQj& zmK4bqK0EJcP__k@$>=sE&Rp8M11dcJ6xbJ_axQCdKQ>x(4*f&>Z^ej8Ajf=Op-=p> z8`Jw_=DTp`FjGk|;_u(U>gHeIl$7BN_aU>v=iCqfd7W}xq|2*hG* zR>E$>GxOB z{D2Qrb^4*q-zI>AjuTaf5olNYju5$lWQ_RxQNd%(33-m+gt;A--QVfq&T=_A==)?RPLRC4t``bgK zEnc3h?#shS;GUtNm#sZ7M$pl*1ErQ#E->blr@l{}ari(`UQRm#{I6CmCQ=Wd4#>Z#O}?4uM&igO6^=D9B@*gRI|IK~_z9(9qwZ@{xe=j9n-4 zeccFBRNJ?hhRdgriq0Qg#287ZBBpwUpWT_kDUnz0(pkGxkkAtegd8PKC z#t>w7NCUR&@P(jr;W}wbQMb_TAF{1o`%Z`t7b?yBwAbdX*HEV`f84M-tVXXZ!o<;E zC<;IWF@;Y8VgyE(|HKGRWGo_&##uy>QxU$+Rgjq)0Q0va$4c`Gj4FzMdy#?@2b9la zyH7xUr`Ddn8|t%DU+XljlnjKb6Bv2dfEnT!Ax9bhQ#{%Jqi@&ol^zq3X(LZ=P3O6oSm2NaTJ1!Au{so zmRfrItk;woXbFDl?V;Zb1l23wag_>?lf}H11Ua&L%_h2g7vC5J6C@i0MArgf;}ybi z0o1;1nL0-|AbV~km&D!P6vk4vl<^hPp`d?VFw8XQNC4j`6=h^7EOxhFC|P+jvxU!8 z^uxxmvwAXMam@Ou4E2X&Bl*6gj&v6c+E@6x2=%&@HO7mKrdq_W#+MPO$!xKoqRX<< z9U+$)uxOV%FMuG9q+ZPu0h3Gooz%cj%HN+Dob3pZ(m~eNzPO$(y0q65 zSKcrSxk2{*v}#cOhM+cop7Z)flCafVRw!(7ETAfw^tO`fQEOv$Ut}PP4PIv3 ziK_Od2=Y=&s~v=H9DD`q^UrEC&jouxFbHA!>BNMRQk1McGVlE)ha3v8F9*l|VCX{- zkwC$okPR{#*+l6#s*0D&DJf0jbW#kL&ZM4DQ!nwh@ ze!Hka{Edy?Z5QA_c+XgMN4`z(d2jHkmyCs*VWXFt9(jQLZU+05^vwFNujqYDTZ!>R zpjT+np<*+n*Q4=ARL-ZzC+ztd)av3?3PHHIe4>=A)PjF>exH|D3aK9ZypOEG%0V|U zirwS=z13erC`yrDHYz|x5eofx1#)~?Z8oA%h9FXK6QT<@pfG9+HyV893zqLCk6dbY(i=*F@A zgzr}Q{=~3s7eHEa?b{iOTSGWz=V+!L!-IjVcb(#%3L;qxfeh4}(T8*xtg_yp)RCSs zX>a>4q4U=Lj8tcRKXNA4_HMUhscKS040_Fg{r8nM`WgR!JK$LeBQSG32{}PBD8K?( z*@KJI9igT?dDNz$nsg5pvP((3rgNl;^hR$fGP_ZWF*xqSd~6F-Fm-2nrkN;Jse#El zUQ7Fv$jJS~pXJ&?drb?g#JOs}+);cOi~GW7xvj;L&Wq@DOqhozFW7F|p;kTv>_-j6 zz&2`W^YV@XtWkNQ+Ln^C=aYI%Y#C9z7stEv$cIZmLjKT>2*$BQ2ALdu8CCQWB{Z}r zwKhOc*5wd?Y-BNuCcw#`YBI%Wj%nhIM8tS3_GDH2RviSbiP9k%a}Tx5cdi+`()AUf4vX_IduFi;FE!qxbhWYpcLUWC8I=YGTI$ znP3T!WNYGO<*sy#-v4-VsGQePRKB-H%MDvYH0WJ_9@FaJ?ABdck(Zx6!U)Ot!C) zCdcIYr3*!I0JvcQIU>|1rRkhR`51y0eTn6M}6d+h7o2lZ4^3+KBPlCE1QrAm$g z240DF3Xi9&f!dH3r9ueHbc8XAplYRlsx;L%pAQhh=N$#hT*?F8b#qo_IBmGLeASX2 z;w)es1$7^S&M)Lw%&@ov2Emr>Nvt^zLSvvXf{vsY0}z*DA?H`s(b7!|5KuV+1*HJ* z+GO#yOwNo%w>ZKHX7sar(8m-eTQ?r&7tR-XtalH^_c(eAsw$^WXM&SUdffkL0(sgO z3^b)B}pI=|CFHlQ8{N zG$E6cR>USYqG=)I1qcW$ADHhoUT2U8mF}s+eg<&P@hGBz7ud3U?T+zfUPZ>tpUF98 zk-j|nI_FIu-OzaMMx&zoQ9UbA8}UA$lv)<6BZ#_`cP}~r*ON5e3G~9jB{=LGMVf#F zVDp*`YVkK1H3DUayAxG9>k?Li6w#P3PJ2`Nk={Q@e z0EQy-pzQHjUPplJ-44_S|LzRpXXHkJR(~-cM9)F712=e}fz}RS_FQUP3OFJ*44^st zE|k1)CGfghjyAM^T(a7Me4RWfKr*UO(G^~SS+dg#QErJZlkd;ZokFFok;o_vUnb~-Q1OQXS2js5Q z+#3Vk;X4a-=9$;rrt0FQ>vJig27>PeYUDk~X?sM!!}!+O{w# zpdWSMYJ%_V{Q0LI54cEqoBHLQ{vg#q8Xz8XJKn1H8yc#1T$%o|8tSa^se{zIPhXP& zv9*4co82XH>(K6RhK>soY3UD~WwB+HTxtnt=4}>+9F``cj=y3m%s6k5C!#Eti70}q zK5yarBpI(`)Vlpz^wRUL6&k9?7?q6G9UGCi}9vgI<$i8llhQ zPqina4A=p#Vq<{Z(|q1Ao9wr|?svZ9`d_Bw1pqpn{-VeQ9y&Er-8PO&2i_dfD0RCm zYhA-uQZ3>G@ejcIU3eO{lj`Cr>?nBW^poxB_xya6J*r^1&Aslbbu8?yHK?v;6}xUH z@>yk>WM7=_Y~*Av?5m4=g3#=36TmA<=h}fhV{WgwA1eeR!im~oFLm2J>Tb@;=OW^{ zVfd;rN09lc!j%fgC!oYiu+N=Z5b*(iXUkwJPb>b*%xmm6Ev|G0aG+k@|N2*d$_XkR zorgECgJ(vYc@D$~`;jIS?H_vO^58brT$Ak^ zfGM%(?1BQdh{&GBK9hG40ZFF9#xcQXg}>+oN5JZmqPGBmL39DAb_J+G?*!`NB)tIE zy3u7lm@-Vn^9I*u#g22wZM2hN%SYEQew#91w*Pl70rH*Y7Q@7%SsT-AxF_!_qf zIFA>NqHMeY(%HC_!q<2A`)>x{)akCxnV$*dWZC00p}~h<08TAaauMJ#1v2Q_&Mz!v zN_wz*TEF-nsdMP2H--;>fm}xSl)E8L$om?V6rHHyJU19%&_iCza8c`?%er-dJAO2m zJgo)}M}{wZs-(YC7NB2?6+mTpqjiLf0Nq!kIFr#6G}Ra2eqx9Rj!0l-KEc<>D}d^} zwF$PUEpzo3T1(jiG^YCFt&K!)bcV?N^udhivIS@7&oc@+S7j@~H;tP((~gSRC6u$g z#eFUS*u*jvE+vWw2+#OBaoTH!c+L@^(;ethPKQpMC1>Q@krM1~|t;#R5j}GmEBWe0R5C;un;b&iv~5 zZLpI3v@9R+^Xege8qdo!nd~3N{SJ0a9D(kSoSG|YD*;oh0d*0_KU=k$@uT&4n5?)XJ=+;7%9sf+n<3O_aa|v}2WfM7yo$YG;S<>7{Ojwm)r@8Wp z;}LjVVt2rcOL-sWgDYm+8!VKB7ILtr^$6S02Q zJA;&&!Z2uOdhfn^&?Gk>++u~3=JvorjD7TWpPC1SXTLmZCTZX2<6v`9fpz{ipuc1r z$98QZ)||rT!ukSvWzK@5pDu-d+l;|PQKGoijyw!;tp!f)&sq)AY1E1vcRpK?>q#$RR~T$YW{C-lpuE!Y(T!<56%~*R{cN&AjB=0dV?Fe zf1CVKT%zYf78t%Ppd_}yV5S6+P8ZYFlb0h1;vZgCnts^C9mEKH}RFagMPQPjP0ry;xwN%eQ zFu9g2AQrL5XsUk8UG$5157=PX3walwtNC#9?VpV&!-f!{Af=!#O-dg*B zY(%a@l5s`9RXkzRYzQ%?_Upw@Dx2(z(+;lYv4j$*CY>^0?bdrGsZTC=lYy9qea^^ z+JkN}qKeqx2l2hc%DZPLrp?tO&*_gV`6z!f@!jSOU%b{EtyI;kB}(#``qOp?B2PEc z^}hY2V{AK66AWsi*qw1<9>el|+c~~J+k2iwi^b%dVzkq&G2ySY~8*YJqmJc#v zpBtK@$LP!5DKAj1ycy-M95P1V?kA zT3P4r_Sy(EkD5l0wyu+;MFf?tz3Td9pMYHTH?21Ez> zdFKhrysHQCxR32YjL34ZaK}&l4go*=)SQ@0kmt;KjID6C5`Xg3)Gyf3zT(?}lynj& z>!LG8)~sO~(48g#UD^$38Dq3c%*UP$$tnxRq*FZF;*KzQ*VZ9jP%c-m5h03M9&7!AA8L*lkPV z&rVZwOH(%8Zxs@sKhepiC z{6l}Nsk=TPtQW%FJ*f1#(Zo|_8KiJOILW~QuT179u}vwNzg=(eV`L6JMl;4Fh*iB%9*)Yl27nM=OXS@qb})5-RvJMe1GZ6mT1pV zs7)NTv<=B-@NJiHC0k{LM?}~eSeLg=o1@Kn=4~uA?$LaoeBrt^xNKc*YNry$f0P3+2!uph_TY`_zX^;a&yE9 zsT?~CwuT%oL(%H8nsgLaS4*`xhak0gu(5npEqh`2U~3?4lZ)f^X&9VAgy&i#b{p7bQe-;cwsedcwQyQtKTlsHkN$y|J4x(4Z6TlrUD6z82S}>Qz1$W=YmSiE< zs;`>pgle7Ot6hMAp!#E3*)s!4Pe(FD8?@I{a|rb80mGNyq%blJBcA)Q?&G)xhx~B1 zxV0f83!hJ+dl_v+N5fsCm21+C><;*bR8tFEVBGAv*A%Rtjh>xFc2pqtkS9ppr39sZNk455U^9f4doK!P-FR>J3AOGjBr4rw3f8a&Try=J$9x@VyS<`S`1j^vMtKwXLK&)MvJ^VxEsA5Mx?6z5Ce_)E`BcS&sSqc&ahc@u235k8L%9 zQD?{;jglqKU9ytD#A?xXKPNU``p3&l-V`gkPru)7WtDJ5t$2?hy}qdK;BI@ zEgX@ohda9qCJ1I#oHX_WjX)i}WuSz7ab~Ezi^+EV%Zm4`bkTlx?m_-1URgzpoOm9% z1>3drmi1MRN)`hfCpKwjbwbt4Y8EPgo}u|@P%MkaEcVI)KhA~RjmKwr)&j03@*mHA zj^8uF@3|#PU+A*z>nS6|ZNp;i^cK?pWR<=*rR;z zJ~|kI@pTV{4&VFbNtg<}a< z9|Y1~MEJMFogLiHeU(D2Tup2o;>i~?_F6*wy4<1(e$LiAPiuEuMbCI77mXTEGpdy#J}gAyiJ*K0Z<0%{z)f)r23Os4m4^^F;V$ zTURe3dduQ)dUDb>zw4U?e$)!vj>=|)th+n*iygJWNG>WWq}jLNn3D&>8QJ0aVR)C` z>qv#9jMbqw*PHqgLkDAJl56&qw65mT+W?}xjCMg@Bi3D{)qtMWT9xF=*l~g52GxLE zp_URjBb-Ckr}^$nsJ#_Gw&Dqz3yCY}0RVX-wz7D}G}?jYGD7fNj!r69XpKYGvxtRn z0H7S#Lqt>o9a;~+jWHYZnmDC@c>Yb56b!N42=!5I((kMSbO$N z=H!>I>5nNdaQ}8K>L9);1~jID<`)b2&d?rrsG-U^VRdPnH*+qxF(yPYGu;AW=l$9l zdg;sbq;zs=RFKjl<&=SQg?Vp(k(tkle9-;Y4RH-|v*T@38}>HG#`@w|z(laN;1fQ2 z-bd;iSBWY0mQkaDfg>{Oo4PbqD=a6w1c7;3$- zLIag3(OBEBpNj#eIZ6?bo8o{~X&Dkk(A_(@HGfoyDfONhB4dFmvsmpr1Xb_UgQ&W431qfa)X&!c!oVb5;$;heePQFw~x?G%oy@PliQYwTU#$U2y{+Y`1KY(D1HiW-{a(Mk^~T$}qDBS=gj zwBZ~QWmo8lg}r`aw%zXEEwLRVwxSV|-&0M{B%)i-i}O4Zz1z7f z>soTP%*iz8VGSX$#p{M!y*VHI*>2WWJ**aqZ1J&e#~GI2XX|r*)E5sqa%yio{&rfp zn&GnwopH`5z*@scSiapSV{D@AX1rmE?4D_6NphyjDw`Oawm(M%C_wF|WIg&2Purzl z^o633=(Zoirsyi|HysE+L)`{}0rT0y{fO*iz2Qso^HQwWx&y6n2`eDHFO(pu>v4bQ z@kW5}cSK&66(GZw9jrdh^Znt;?yD}BnpAvBme7#t%RRwEc2U5w`wnvjXvoS>@S2L= zZQyuM{>__1W$c73OxI$_GH-JzC%?Qes_Elk zSmGGLcvsvqT&s7L_kF6coXuPgEVT$4(! zch+Xl!==^09tj$F_o=*B7P6-@TZi8X-!|m90=HOdILN{1C+q35VKwQ!@>b+?bjwH$=Ae^!6m<>ajnAqtd z&i6(SRhvm&f3VqbNmzB9lYYi~kyH%%K{TawJQABw{C0Vgi+^z_RMw_LTy0u#=hU1{ zkxj>Mep#e{&Dj0!Sxnk?M`T=|c(+vs;VDKR9rnc+&yv-s(Vv`1`x4>b7EXAO;i2Ty zKY#yWy~rL#0B!MrWa%hHt8GOq(UHB@m}}p4dLJhg;g?5vfD#;*8x}e~^R29jjee-9 zgE_za1|OoXBQP+!=lt!Pv&9YBs-k)2Y?I|_#YRh0S$SPqZ6}K`0JBQV=2%l_!`(pN z8sKLr6sJ6tm2$k}Kv`Oqpns@G=fd*B=1;;uw29MeCm%lw82LO_E$NWF7&0lSX^e8c zdVb^Al=!N8Hw};eJVYL0k1QU?l-CgQ>XarPi;L;Wc_#JYA1_$p$wlqHfA%pSZb3lc zw2~^ysqkf{p6V5??T?SofK~rC>!$rB_RO3Mrn5(lqvWO8gM0PDXrB!jsV+YZDBL1= zt~?8<=yx-;+R>)!--gBK=`Cc}4O0=GjC~U)A4aWx&bRseVf!0FLNAr}0-SNask8kL z)fQe3vj`wsELqPx={zW(n0^Z{9@GuWH2ZlHC;2HPHv@L(C!m6F*W~2_4AQuWlZ3(0t_*MLPk&HYAF1du*Re;^ zjX$j63CMov>p8^+W~yL%bc_zpP9r8Y#G_0Lg5fWPz&Gs}TVEIm%ZDtKy$@uyU>Yy9 z2Jmpl-P5J1M|9PsZ)`G8C3{lo2jPKhn0jtO7T^M>EO=NxdhXDXp=N2)fqmqrBh-rD zr8WXu(q%xH*htY#cecoJbqCCwol_DDq50JX<3yu|yN&1Md_P};M|EgDFaf!*1^%rf z^Iz|^G9(mFyk^%{Ej-Z5`{6;TzS86)_^#vV7Lh0VFJNNK3DZpG;H@6H6s$4XU)-9?EmfF;t{U$1g?xuxjumtQ&QBmmD6fS`VyLv3Y z_LX^6;YqMwj8IA_K3u7KGL^{!j=gucUT$}Swjku3Wbq7b&S~)<8%~!|LWMyB({t+y zhgyJaN{HpU1O|+LD3=0KednmatMk$xId@MVhsGWFl8arm8vJL%uZzIP9@MM*5qrmh z=K$?gt>}7L#dp0&`;O8rgid%1qn^&%#Y2*v)S`@xc$2TQ7$qCQuP4RyZZ^q zAFL`dS1-Wfk`pXoUV8s3pd6q8pMVMoBxmI)s0}!CbBN+b1eOWlrdlflA8+wH4{4{* zh$6L7BY z9C;{4+-*lCR>~FW*k|lc&azv-Vz%iC=o?@2AIw6U_CTnKS^~dEeFZpQ^lw}(_^v$Z zybTReIuR>rh6I&ZIz_s!ogZ{N!FejIB7QfM`MH4)W{$^~x4bo!ol!rQ7nv+bMg=r{ ziNn$m&kS~fGPA2Zp89Dm+*5w64d1Y08K2{jGY%dNTFAWy#^$wVcI}&gR2(}Q5QmsM z0?)TC_L*Pl2BUoV&FOs`a;c5-{cqG0KCtsW%*}47*8N78j&Z1K{xTMK>^3DP%d-mv zn%9n!HUoVRt%#=H7vIXKsC<}?YM%s{mF|Vs1GJn6-rE3Er8+7~v$0|(UBF4BJ>azs zbgd4KVDfnk(y92_U4jq(_QHcZ-(i1AY*F|90g_z~eoi#(xnX~-?-;&oTmA*cxf?r% zaK6ut5NUmLd$aa{%?L1F0*KhP0(GhR)PC8Cn(uGq^zWdQRvxCakgpqieCojy&q*rC zuRrU)jl7W=eL|{FQyIPZg^R4_bfJ)t@{`{qS8%HuXfm1ZDEkPpr@4goSZ%PeC1c8U ze&(3$@xgo1`XRK_aqRD|&jDEi>SXrQBD1Dr3v-{5d0Cu%=MI$T6{z8^_FLSlCyOt< zTY^PZ`z@~6)%lZ9`Drzsa}G9fkXu+D zC7c>M09gC_j((wXJCzTrBM=(;tlvv)*jb{L-7;N_`DyU|%|Xd~Sk&k@6%YEZO$R?^ zk1A6tqnEPTO5+!tX#PSuRj_FuCo>oJ=-h+Y(S_axO3|jX*&_NWUFhPlISfM+F_{XZ zQuzJuX|NwNj|^8hzuDX9ZLO6OEAQy^G10=EswCj)#SwmIS9n5(02@yN`^-bVZR1uv zRR9aQnhZgEb0Ubn5<~-VE`ol$^Ai|^NQrJbXFs2UFdNJ>OcuiUi*MHF%y|}Qs;(6w z?cO0d`>A$s$zfkRnwgdDCy)t*Bo6L(JhYl`qX3&rjE_T$ z1t0}Ibr1h3^+Nr9O*^`xmWxCzS|ihm7d%nXJ{gO|$CdF&PYGqQ0a`U0gRI!_gRryv zF$7lSadz^B1f+)qjS}RfwqZ6*{P~*wgF}Fnn~z#cpq3DD)Vbgx)XQmFFKBK8Lq{aI z<~qoaXGe@`EraWO41tJMpb!2%JM=x+8LI-G!FnTTTp!xFLF%qv##h-abO zrOx{vs2h!W>~u`e{?n~0m-!!<^=686+x(7?lfotUHtn#oyOciE!<@QLUyVgrkS)+{ zb%**+iP;a&VHC7`WUv7hS_;!OIN+!gKYXy`cOX=jj1{9k+UP@E|Ah`$liPEt9l1-I zAm>+OlE1_PiS^i@uRwHQU3w)|VnWD~N1`7!6B!Z+RU6AALjwfh15wgRCVEy);(3VJ zAaK3zD|ax-s43cQ_FZsjqZn-rVV%X)#us1-kSoQcz)#oTL#mJ{$Mb(~1jjpi5}Q7I zUT*H$)IV#0;~g^zp3bPP)%D_sFb36{H(OW|@-X z9-)r{>1l2e`D~{Pe^$w_xaO4z3nJ(9xD((JHR}Qyc0n&>9x*$K-m}v`aP&Ob?%w*b zxicePJKr}{mOYPpdUDmz#?{yi!1=hyKBC^6#9QbOq&bpj?t^f?KuEAv)VEP?+efpL zskv6&|Hv07(l2$h{Nxxk+VE59SBMH(XP)UT%i%&SCPb@~w*>;Qv1tR?u(+RIJv9^L z@xb?O`kK*Pijo0qQs4$6}_~g1^ z%k~b>aw0Bwa+Vz!1j{O-#P7hECpmu-t%F1K-{qVlBHSwLX^MsGseAmzf=Tik{BceJeqJm zW%eU+8nQ?kNmc-3gJAE_j0v|%WVW1C_z}XVdGHz6EjExcpCt}+kY6j*A@8Wb-2_KI zfso7%YF#!1$?)-sY@MP#>x{%1f%ztD)Tu`AFsCFd=i2pFr3G%8tZGY~bg zNUh6tU#GQAxw28h^@yCBsLV%E?+59h&LtPsiS`*y=9cUOw-s~m{5Z9Dp*9$oCC5F$ zT~CbLOT(_{JP~k)D4kj)J{@nfZ%}}ciEEOFdTlx$3z9wB*&}Ifk@q!w>rVV?Cz}Ok z^gEMh0ZZCJ?Q#%HJoPsRn}K2r)AmdeC4;NhJ*oO8;!(4s**1IX^X14McNB5@)uP{- z=+zxQ_RZ+LbiZFK#?e|ktW8-W36F^HL)H26Pfee;z0~@0{f4*_{SVC#>3Cd$BqnYDS%usm4kTTs7A%pwpj+)AOQl2V zYJu%V3GKCda30!zm;$0cry)kE>6h$n*Kq9CoR^ai#A1 z-zN|h1?}KiK$bnA`TJjPYomZjH+c>xI0E@e%p^*?%fj0LpV$uX4h+B=%`ttLSo%EzQKUK>UQ?>qI$CcyUxthxyz97PY?0(Eo^trn=I?&+Hi%|-y6^z3Nt^d!}56cg7Wr* z8NR=F|G&2fKemm@9dtaTl)8*4qp*wPX_oL!jj@vS4K+imW5{b_@oY>{dac( z(fCjC1y6vKMIEzu^AD9*56E#Mi_;ZS|9&G5d=W}(6;678|Ky!v0KK!9XUAdg2IXxn zaA!r5rQHt$<<3%;BC!ht$4}0}|K1(YsIrjFrDPvFqx*j@707rgwY9a6mq)fpesr@n zx6!tK*{qkcQCI=G%D>8)-@PtWH6+6jh=I)3oRE$&oi{s5VJEcF_9LE(kL9GC4zpMf zZvjvhUg`Q=x2ESfkTP#lFLV0(p{K!rzw!Tf?YV&OBbVkQEI}Uh&#r*-@~M}$y|tH_ zfcp0DwP>E^5fWn8sxaG$JZZ`eu9V{;DKWtXNH(0g`O&^|}(}_yO zBLJoU`2`p%`)bnBibE;U#nWA(32t{Hjf){on7L|Q;0>VAb{(m5cZYgGb@0+__)1VM z%$6Cq1#H-Lz3c)9^HK8LR%rGofcV)u0}6naI0|l{Ctd{7i`E)mD+p`(d&@cAlb#?> z%DoqFtf0A7N2*@!Nm#W8G&x65_r2sK&ja*vL8?*^*fPdbdO*GV4LUT<2!%dJ!Icq^C;070^tuYv4?TI$+hy~qKPUB z7!B80hGDNzN04WDZY<6lls?k1JJ@2RCKc56e^i5O*NQ9XqY*Jlb$w%JZw)N8lz}9- z>`vPWv8-b{Z$Py0Qs%f0?Q~ucsflm?aRMBf*B2_TKl2HQQ!zYr1F$IB%ojS@beY+| zmg@h>K%nd3u_Vbk0k!#Cr65@3x6&E-ZWDb|kd;E@NzrqgJ;&Px+jUV^W$hqx=Y|*1 zIjp$>UT%meo1r3Jht)Q5Rk->(qb9Cd`5D=Id5OTy^7tsj5MX1?@0oCTvi=Yv<2xg2yfz=__i^x!*nvu7bSK;{2a63g1tBgN z1(=`NQ@pcLWGH~SrZYOL|9Aa?xm>@ZC)2xP)5!Ln&6Sm>n!r{!YhIRVA!t>b{6jkL z8BrZ+)sob`_ZXKWcyJJVkrEB#6RJz@OsW8}_pgMCf6~j}x8ov-E7|fA;TkS6eDYA*Au+frF!joM_s7nA^utS{E1C z!4`Y#NWjO_U5cJiFh`ABWV;|wnr~|O+x!fF43hk#0Eg&3(bQcdJXg8h5bkcj8MH88 zLnU^%+)ew#hlB+-{`J@=uJ^Z(1YBe;-2a%{a{o+Z@t|fjV2vd&c9iiQA-ob((Kbbf zBNY*G{eS=^Y0%Uh+VWK&sE|0JHFx>^CGkUNlWm4aKz32G{rP+!STsLQ!%bTVz<8rC z_%*E(h%D#tDl5)*Pw~ev8;D<18MOETf@sng&f#;G+aP%)3IkGWqKNb}`~N+}VArrB z#aTs)VoTyQqxq!8X`yFVkRwgSRukSTB^*kgW?KRDJ#U<%<<)?u^8_DUL*v@;byV$I z_ldZ$iS$q6&Q3X`-!N|oUxC{O;YwFAwQ<<&O0Ob2| zNsVb*{TJNrKX(PNse97^`lF?gv2$R!P+P(MYAI+?(gvbM@JW9A9_22)K1i!om0UAt zSMz1JQ4cHjVCtt@V2f1pG$2Ps+dK^^6-Ok-tM}kr7L<|2#BhVy^&`3${b8wO>#<8a zky_;>UrjW@4hk$rSQliO!dK9?Um<_rEdY+}-EZrl+U#fup)Tz;@OX;|zscwzRdDc<41akVTfg7LuyS$OJN7Y60YQ-%V zHk^FQkSPfpkbqmuksA!^wD*8h!@CO!j(&TPchnIGzMOU^h;A1z#^}bZ#PkfvE#J`I zMqF*}0gH3iWlZ*}MLi^_q5!G#*-PaeEaa({%`^1mDFQsA#_a@e&15YTUBVAYstz{+ z3w6E?yD^ctKOphXwCAP&k>?$hH>OTkd;=cL(I%erX-64eo=r6*rUwdpJ*x349*-I+ zE~8kR?G%cacF#8~Hh)zTrxy)@r-r&H9KxW=Ew6VhP+jW#Np%l!=~*_=fe9U!z3CxZ zeriRS8Xqq!w#cDj+)#0Q0|6X!Cn66jeVh981bXb9MUvCjW23Ejctmdn~`l}xVpF3Q^l#!pn)t>gNJN2m=P~kVU>nv&05*h2}(_m^s?Ou4C zJ6y@j+)*^d8Q)h>4tuY4mFIyyUb~8yDW-T_`$eyAV(;J;gE2S_`ZIj92-db%dP6}p zWrn9;%pCv;LopMs5|9B=v%dfJTf}FeI+^ziIDh@hoRQ(4T*sF2=?T}i1CIxz zg12Mhk6fxxyi!<$!m@abNp!*yNcRk->qC*t#+I8MJ^8r!kv34K zbYTV2-?gUh{_mFl`+`y9WUZ~OcXce0F7*~~kN@rc|JB{U9|Hw{`=A~_oX8&FP#%6S z|L>>e0Ong1nF)tlcqKzqK#JetT{0YWZyEXbn%m4TZP|6UGiF}@{g7}zQn2-y@vWr! zWDV1A{(Jfv0)g`R<`e3v!&c_C5{xaSj6eH$#6NQdlp@(9qTXfN*S7yvzyH3cv@4(- z(z$cz+pTD&JrZZX|8DBxPp~3NsLRP-q|NbG9Y7g`?PjA;*Hqb6Cl>GwKKL2& zCX*V1#O(~qY`4Wn{K_*~9LFfl`A|Z8qEby3pb<%moUf38P#7LAu-ScEFKxE@Kn;J( zgW=Zl-0tzRbDSU1v0r%!)3NuFlqS7L&X6hvXH`?F3^rd=q_5#acbmX~BB zou>rpqhG3l0&4!;ml{eAjsOQAyrBd~R~IR6J(4Qm7$fRjH)_}D^Gk3g48IyK;lt>F z*VU`0@2Y>l6j(I*qnbnuxEiFV|NVT#Kqd|phYuz!judhU6l=fL|7Vm8eHR?$0jmrf z510?X{QudF0z}9`FZRMvX{}Ik<@^AP4h!!BR#DEw{vXWs?<;rWL!J8n+PmtvsMdC^ zBO|4tNNj0E1px&Ekq|~f0YSPO1wm3ti5W@(Wm8fLjtmV$cS+ea(v55#I+SkCvoQ8| zo$ve!XaBITxrAZXyz5=>Q+J$_(J(Z2R1{FZ#vNi!AVLl+b#q+Ap6~a^|Gp@sKiWhs zApaQ86|>E-yl~9rzkb6DV+vdF`lyOS;;)~Dp790;pPAG`yW-}LuKzwHRdi6LOAhV% z{UxVkze|=r71e(p)I;}`zz<4 zxBa`fy{)OGFDYxNsQd^`w)VA`_`iN-eYf3%9E2yt(s7QgKcSF+zBdv9I`|Kf)#gKt zKluXb9@PmVWykM}|NY8T9_jYEY zE=B+MMG=z7(o{55L&9T!S!#NVQ)bq+JC*)&fd<3W({Or(xeW~P|GExSxi9bd@&4`q zo-psgoc8Hk9+k2EVQ?=*>R>3RXFAxK;)b>IfjhQ!O_T^70mV@VUT<#oHZdYXiW| zo&(`DT^mVFmngzqB-q*Wh%y1IS(=kovw>&4w@4c16b`$>Ks96EJf zX>O|{{w!?3XxnP2udg~uBfllYZ_3>yW?|qTYJqeBi*U(ZS*_&^y4>ER&TK{xRhm4V$-?48!&qQ3eI0g8Z@Ek834x7NVkD=uNkg#sDBn=gF@%??-|h3 zk*pp@+#l~YJ|F3x1Jj^c80*~Ev^bawU$P$y*huGfJu0np2%YQrvCwNG2~V!3vF1hE zOP?5`JLwW0!F6*s%wCFu6S5ko2o_OcK#?m<%tf%My33x_NSp*PyhS3pX9`L|01;lu zSlYKGb#5TTR6}98a|$0>Zc+AR*#T%u$!a6{`ctBo26o9;b=k8WD~6=)3Sk5j*}UZ4 z7729Ssq7gA3i`jj&=CMEv|HUA_x+3qElFDt>)T#Jh#(;5FdL1q8?-|$!Ak^T4&|>@ zP5~i8^21z`XS3LxI0zSl)()b^KL~irDPE0z3^C>HtS7?IaOzXQ@d%Q>^;%duHw z7kkCMSPb~C1JF4GqzZm>9N3fmizK_?pq&l&yiFPB4&*^U5qP&frZHrSCgaOj$|D-*4&qIs<+bq z9!e~~`{oCg^jbB#QqtF^xc7sdnuA2OB31`YWMkmrWH`Vs-jh=x&XdN#^B04A7N?CM zP>qd&Q$>jkJU5m?z=iCM6VWib`$@~*kO6mnkVW6FOmErJBQ-t3RKlfq1P1w1VIW@3 zR+}$AKfMu=yO$JzTIJ+>!>?@1^Tt1_g+Jp)yYu=3`)Zu&#+R`59!dmAff16mUw+&M zG4cyIgi;Ry38shE&A{_@o8j7PmuwAYR2h#kaliWa;hpX7YRS%b0?Q?WV8mAqkc{lW zN|&6n(U_k67~1`l)x68=(bb#DMw;yVoKj|^fl?XNv$ja4{ee(BypLW`{%b*Q{H%|? zv{aqLpf#m(Fo8c|Mb+1niOGSTN5*ujorifWejs#bOy3c!ep=8`9k3n}n&Fl0!qz=s zY|BWD=6H-=oG7?SeR@H#Oe@`W`2y9dSztuDfcj9e)lAOCtFGmj%$Y{tQ6zC1-`WP5 zzXw*?ld&a;=zd<}o4eWTUQWvrL!jQNS9;&%&GLN?JrO|sRfhp+_4G%2 z*qA=Ga`2}j!7-UV-nSVD1In37XO-481&R9J1TluD!n?A1h&6#v`lKaRJKZ_b&L>U0 zDnXZrZT{UGv!~jedK$|bv4YC2b;2!bf~R``I`4~2DwD$awua?;8WF2XYI-lKix|vz zV1KXPxtMP>Z8zadEAf3w-9b=U@UpTp-*aRxEqwc3Ko9P=`BC5fp0vtl)d7-wSU9I5 zxS03g4wy|1A-`&!t5yNy_M0v-ouh}rS zsJvj=v*#4Qob*-oweur?Q5V*?atBQ_iAmt90Zp;rlI~Eyz(AY``kkK#t#VC-gjzkU zplZtPkH-%aSZiH!hlmkP=LO-$pWuMr#VxqmWJU_n8ehhgw3RZ@L280x1tqcd2zJC~{WqDkCW^Mw^;iy5U zkG_8nlx8S@2F_j)xxX%cbN51}EWS{s`=lZA=EnYF=FEC&O*&FQ1Ut8w2Bg8CnuiUF zw{ap$Kd#W$ANF|Jbs{vwUaDA& zy$NU!x616pRTCXDq3HC?qhA}m;^gdhX&a{I!m{~UwGIHA%4`{xYjvViX9^l z=T@SzE>u6bNY^j0{oFCi!5}#8$lq*FZ+O|i>-LPE*bK@OupM!SbLq3k07)pZmtU9_ zC^}9bI1xGMzw2otSmxK4SJ!V-EsGmpCFW9w7bk6TA_!~knL}b)Hgfo+RO~jhjBX^(X&I*OyztR6d9G5!-=$Q&IV#3N z3ixhU1yjjd=;F}fK5E5=a7aqz>S~T`FX7EASi_7SWJd`=1bF z{B}vfhqplKWl9ZB*jjd780{=IBC^o`aY;TJElFb!C4;j2k zT)fJDrDswVt2X?<8zM8PUS63;T5Iib+usoM&dxj{U5xNTIgTztSaV_Sc{2lr$}FIp z9EAt&OFfjW9EG=ZO#Q?9bApDEM&}#Y0wAk8T789Y7FhQgDdi?__owd7CT1zQph>MJc;?LUquYvCQfop6e^|{baqU@!MZZ0F72!@dH{fmAN7+L zA9Pw+t;R5GOaw5_R&6R-G zdkRE{kLziLD%x*XEKV(~M{!ZTf93Jb5Ke_*{}&z~?(-W^eA`wdu4ace+52t=Z)Rt=!O^IH3rw1w02>=3xn;CH&y*V0oNu4*xxEml zSet?oil@;lw$@qcQ)C`4RNB&O>^xVklE6XiYwhvd&DSx5C>=f-i|>@(kbso9F5Gn) zbm~5-uQR+d3sSm{Ku}6!x#H&drg*(dHkDOn*y=v(uSELZ?1_wF-dsd=5vsh`{G zJG^6{dD?3$>WJ%nYh}@A{#g@g1R|B(Ck$slDIm8lZom11by^;TDZDac=h;u5-H})B zKJu99r4V^zSHw+`<9glyi2tlZqz&Lbeg-asosrR=8r*3h-Z2YViapHE7aN}*DFu7L z<{fga;sInCL%n%}i0uvRF_tW5Q@t8uA);p;Ac$5Nc|uxN3TLoZKX*981@mS{pc8Va zRlZ%&ZkM>OrPMyv{#I8l#y{5P)%WALeGR`#pwJjhal>I|%1)z)V4J$zU57_k{?jM0 z;2H!3B32k&DIP7ocrB|L{OOwqYv8YvsSeqme+e36rmrEki`Ko29nnPvF?}%fa1b7P zc;`*Af?u9^4^X56Uw%NK zuNbl21k<55HUJS8(R`s}kF6JPtf*SqNn2UvP!sXP?%tcWBLvp4S6b|n{&w-ioZ54#=qwnhVoQ9UX^Q$lv&`M(Pkb#Bp8>* z8^4q-Dyq{iS*^yrV?9{Dgu;jH=-hgndB~;cvzvOsT>7;}7T0Tp=VXgVH^_s^o$s9^ zy?8xph+%t4+q!f3R->lKHLmS4a4lW?8w9pL&jM-n$>1Xf@#>AixpFBQk#~r_Y2MO{ zvyVs=*tw9_72NENsJe@ZtizlTpP3)w1EUC#gwc7VEtMu)N3&d{ifhN*Qydcux?evW%Xz*FJqaPk^5oK>!Hnj_w9js;! zm;3*3n#u)~A4kdGpIhoEp!$rj!Ry@txpJqt9-(c$LW-_L)-Tw^i;lD$|MqK^Q6< z8KyBOQ3w@l8YMla^!|Y} z+3M8XW9ASI&iWX%cI#>7qN?;dXGDRvzrLl6*jbe2qruI0#cqSUKicW{(^!r?jhbHy z>#BysZz00{8Bp*{@tcVzs|J5sWM=&hz%ZgjF3qOzqWQk8*I+m;_r!g1e56~?1yyX6 zqINn8xipP6!j0YmVw0H_^SRrPsHwwC2J8d%s&Uw2Mf`pCseSTxQRmTdhRW59Mv=Bh zAcQ}TIhomAl^9851VwqU=%{7#gwb3r-LJ#5LyFUi6ab19AB=|9iTQJ@t8zujgDX`l zSE?rgz3N0f$5vft*f0^nHR-gM<`;&;n+RvMu(lTwu(6;C4RWrm4hnCatWS)nDT=($ zp|&#Ro>mTFO4hdJ>A^($2(3&WwNW1t=z%I`>PIOZZJwf{=W;>ZTI8~1V&aXp6_bAy zb=;O9tail7*{HTN;{_h4cx&1R$}?KAyBSaYMiiJjgvk1a8c?g(h+b{#a<9l77~@-Os$ccVStMZ(`#zmd-tc(6*}}DbZC-Wo za`-kBYA;PA@%-kO2*}hBdA-hhDiiTHqn093ku6k^7JvUxpfbOBSLZgZYEk@ow@|ed zg&%eiaDULuHfItYIu}WKfKevny=<+4E8!XTzZ=^q?zoLFz#2A3dwN?l3Tk9sYzkjhzAxc?HP4}ve&xZQPrO)N+< z%3j(;+<(>l+2nZ=h1@xfBcGhhMluVUsleru!(!3c$ToNWE%;@zrA-*!Afe3$IF!ob z`?wm1sn8yNyx$8tQ5Y!lJvG@aR*efp=0H#PJ0jpFOt8E%_+0W>w))?wUVdZe@z&bv zIgq!)8$$y|0(xVdcAk8&ar~=smv&ywJ7qtnX4(&CTAqEHjDLxPfMlD*S-q8HZ%!ZZ zt?1&W{kl%YIE%QZw!(>CIGiC=S$%r9TqrfPiyH0;Id`42 zL^n=D=t`!auAN;uc-5|ROw~_iSQ2}9Ld5ln6li;u8dgz93*Su}>2u0L!2PJ1t%#R! z_$MdB#10%fM$Gr>qD)}9qqzw;Bb<(y2@p%rW zEPf=;@B@~I^p#Ov{#$f;GY7*Hek8%V4}*cRulc6|!>y)~v+aHGTslq92dl!kuNwWw z7mj(VmWzrV3zhT+_s`2L$qB`BMF(D5{?$<`ucPy#K+(T5L_TN(Ky3BBpLB(86&u`Q zvFg(wTZcZ7*cPpH)<$P!3#eyyxxKb2^zcjkyQ}Pi7&LYip%?!xB08Ka^cj4CoEJPY z9yV}9J?7cH&YMluj4Tp%d7vI7Be{N7ne)?eb#KvA4nP(lG<>k|$_q>?YlYE)d{Op+#8ixjTMpo_4bkwS$8+O(1dp;+YpGNwj!ODTQ|ivQ`Vj-0>^;6Kb-ziUF|qmi@(5o5}mv8Npz^|zPa6!SGBqtf!Sml~0X^=Z;E(-@<&qACSxvMd0=+YksUT^aLKgbxn7 zW9D50ALa>#8d%jJer>_?nxUxo>Sj9#Eo07UihKfLbKHl|BB$yiqv~3%4$Ga0^HE}y zrUAGbX=MkpU6u`&b?BlT))sO>m!b~FF>8;#1@;#0qU2M`vFFfRzW<&aqR~@RrkhKR15tXD;jlW1QB%*vJ>OQ5ZiD9PHR;Znqc zZS|2}_WdkjY@>ZcNWQ+Fym(%HMx6MW;iboXT`j`8_Z;YRiX2j<-FELDW50Z=4;HJY zFt}o7%XV)%@D;RJdU+41gKM+!vdaRHxyX;4QV6Il{+!E?C^ptYxATxT=2P=MZ-EVW z>XyU%v#kdqqnh$nD@Jbq`qmkNOOsJ2skM7Wg2C{;$H{s)<{7%%y2cl&$(GamN~8_e z4z#ejJ<9ny1|}{gx>2<*RSWnpKtnkovHE2nN9NON+s*A4XVq$wywX<=sl~wFXd}C` z;sfdMRgr6U_1dnd!p-UrM{rTi?#teDLAvbN4sG&-ZGjhS44s}$9(a;E`pK-O=LMHE zxmF1z0O31FTXR2mg+#go+vlZ^&QXKL^?Z@r@B9+{G_ohdpnBe0wU4%zOA{Ms9k=hwoX?a0Z{ztgb+YBp9fU>l-fJU9x z)YvuRTIP(Kb6k|nlGa$Pi0%`_fcj&FNuyD=Gjkan%`!aq9m{bFo^zp6H21Piv7_2Hf1jUH z`tWSYyuh@MF7@tZiF*zYna%NH;CDFW@+Fg*!xpH9^Kx7DJ%^r|MT+&EHtH5)Zw;CL z41`Pi@iq&?@7>XBH91 z-BqEw$~QGuhk93+vRW-by}AvCN8fAHLF;Q^<&K%Bc~o@FsfG>6n#OkS&dfOjND8M_ z@ygQZBx^DFo;>QVGwhL|vfkM2FFWJe6{qfzIy>>r0no9{`<2r~5si&>#z?gV8JA8C zt+kqn814-capRObKFd66dLR=}f|IamkYS#;GN<0K9K4Qp;gNYXcYc(DK6($yZ}Un{ z0*$)Hd9-Deux7)Zr8}=HQSxsWxfbcMWjH;_53#+p^F$%RX&GYYK+kK}0$Sx>Su-Jp zKB4EC4p%Y-B0MKOrA9k)IWi9OT;3~`=P>D6=i+6HcaL)!a;>^xKlN?EC(rWi)GUm2 zbQf&6R&@y7qH0=kip^B9nx*;oz-y?8oyE3rPiTv6I_w`w5Nhi$F&T+8NT473p0mdMvCjDS30-G?t*4-v zd|ZXm)})pqK5?T@;gVZir#P`syc>@3-3b%anI8wtq76n{Ot@&+oqJ3qaxdL}M`84~ zA*NmDh>=wn)BYCAhL%Vz!-;aBT_fproOPkZLYk7qnbu`cT&Mt9+aaU2<{!`>7p3;= zweXQ)eeg&O61^?iCyXZw-EW%Jf4Cq|5}gKwMjgcT6D}q;7t#4Y@X{j3U6FWoaVMp8 zs_lqu(EvegE^Sqcf)IE69mll;qfby~>;G7%>T2K@?_4;beR8&zkIbGYG)Ga{=Fpzb z^NV;Jzr?TUqsrFrBnA_Pqw4iJvb|9youX<=B<=o>qDM=mmmNB zdU7pG&Ax(ZYW4MGvASVDh0nTb`j4Kz`JzW!~GH=hFF8HyX#u zA{CXFs&3a;V_u+U_#&&4Si?L$vd1?ZH(wo`j$bhf8aB7Tc`p`g-dpBJ!=`Jq<5(ST zS#gRK@NNvk%;&`76~(i~yV*WAr{#y96Ydn5J+E*r$ANas=dgctQ$>>y3HsCzN@cMNKmVqSlE!ZlAAMd5LVFsmGe-FlkbN0z{x zMr?XyLqQ+ug|_jO-Cd{C-Q@4&YRh|LO~d0mPZ;-E}`J<=#BU~=fZM-zhG zgBguF-18(}4bcsiU>>}A9iCH}h%(yAKhr6eIa0NlycuevdLbd)vgdIp1$|J>o5$3F zr*i7fyS3jE7Liv-r}O|d>GYXThCl1(Bu=vZ&5c=bgN1Q&2mG;fzv{2LMQbIcwZ<%QDlZ5Q>zvjMJy z>{peJzzTki;W0EnIUwYzXC~C5q8A4rIQ;(6zrO^1EG~f5CAg}aA}Z}jpNC4;_|{(1 zeXjJE&xLgVqx$>L{a*kLXvzacePn@)( z{#ORz-ydaC{-l5u9l7yEIxI^i`Pgxzpqd5J@9xN-mBA3ae*)_a-5mFs#gCt50Wc5@ zVEyR_+mFBfeL;V|pRxj~De!c`<4`R?m;48a=|7ff4=NbLUD$HhG%bz;-SHA`rEkD5}w$?^p6|H~18M#bZJpl3anX>-=2o)yfk7+Xrwl!OS zp!a2m2opwU)kV1f+^atq?1kw=0d7=7U0vMtw9Pr1fB){kuRcA&n8t3W*KgHUmMvRD)US1(+Pxs_!m2?-kfbi@t zfd%@5lZ{MJ6YYL4%m~zRJe%gyG!ERY2wCZ07Z{Cu5?Zqesx(cl1|ZdP7<-hJIgFh;p$ArDQ~X9j?Z04M*6|@VP0ql7@L!v2Oh}8fj068KlmjMrZ(fn$jkBh^mg|uiDza|*fH2goPlsD`2lt5@bV1cY3@D9y8z3ttc}tPm~KxE zQGzx^IIV)t{rYDp6(=+20%z^Ci$;4B(J=z~Nj0DUxvz8U2O|JW+;m!AUFo(m7)n8q z)ggbKyR9e0H66eC?%8~=)Qj&qLUt+Lc4KGM^eMchy^kC*n%_m}O2EVk=C^YO^1+Fm zp_4mF(JvpbU(1Uj%LbTEm=I5yzpk`!lElNRZg2ukMVich2dT+nUe3aq;mXtlxbVTV z71MO`h?!*+5GKyFi=yrCT5j;8-A654i%)i1$0V){zt*#>bb5lire`HmMG&rpHeZnc zfupx;FCoJQPE}Zd<4dIl_63lRT~G~9vjy37s_S0N8jt5sd?JU%;M~h6I}1ey;v^w~ zP+Dw(J_}TwqKvwaG2gI6Ob0g==2rLSg(gWgnQs@=6DJ+mzWL4zvFSHXQK~X5v~$hv z?pJt}Si{PBNdX;MJr^!`KYjXi#Cd(IC(5kAs5rIzT=VWNMNvbprM<*5H z@~c`?((ZQ9pV5m+F|mn0(I5A_r>a~I3w3j)*WNsg&VoI?qUlZ3jZ4arXfZ_u5PO0` z+fxNxoWJi)7XczY5Du;1LwgwlGE~^s55$}bnZ`r)<&FMc%`X+ zrWD~aS;vbdT>ZUP=y8-h<@)#y@W*iT?4{$yDd*wB9`iyxP>wsW1}qq#L*rn(VVBLs z5jqL&211H!r={HKJ!VbIr*zv!pMVDTtE9s>QmtXMt?B+0;NUl939nyoey;CNcN%Y^ zD>t(RN4&{nke9Msu=-#oC^H2r_3CHXK=vt1z#M=F#}D^F|J=iW)P#I&L?0`4vcmTa z)lF>X!8`)uj&f>}mHOFCBM>-vuI$C`*VlG)dCvya6)eQ?4z1v?hj_4im&7&_+o~I; zhmLs@r`_x?k+sp~Ub{8cj2~n&@(AmCFs<*oSE&8Lq%iNL`d2}P=IK`5*>Xxmj>I@C zU%TSeGFpWu81u)VbXdaKYi@#N?jtXs9+M!V?0|r<&U3hf^E>*``5Au6cU*ZI6>+r9 z)2A~gJIRwO7=oT78Zcs4q?>LS7JsFupad~~@4|?+nZ~M%l0lL)$a8VzYWNI?PJ4_ zOH>@}9RS0cREb3W;VSGM2fgh0I}R27MN}A_g39!p;Uq~{uu2Ip+|lp<^lSEem;#^! zZ=@1f!_d;ZyYw3dPFosfk&^&g1)Y{$Gl<5t8a3Z6k`p87h@09481R+(4|WWI%Er~_ z!N4YRs<$9ji7{dlM%UJ^(APQu{sI$Y+GYpSLxf7aI@HS)2cgT@0dc6MYl;(Z{tke! zNJOD0LVK+*?g0D`+k?;_=@T$*91kBqSDAl=ktUn=l-=Mfwf92tk@K<@`UGVQIL5VV! zGAC8^N!30dEE>4f%a(0Wafz`o<|hG0?pl7IjwXv01lBs577IKY&!3jWET0Xd=REo< znvz}*2!>18>rNAG?=3HNE{PN>u88YxH036dTId5}@?aEr)RIvI!PmtWzWU9|eg=2u zJ`{DY1+)>YDSbZ1K=Kf^$lSMs-f2`3>8-tLwJ}%dbJtT;jgp6`zAU!AR^#QF_)Pr5Gr4#Um>7c>1BR0(I&7x#ozULh`_om#vNjjcq z8b?cVvspNgjwc+8vZD65c153xIZRL$dot!=$2Eb1lW^ExjEhLj7yn{0&Vs+o> w@~?mRHwpd!SO32xf0FJ0y&1gem{xZ#SWfN>`z!s)9{5l0x}tRUHDjOu0dk&uG5`Po literal 0 HcmV?d00001 diff --git a/website/static/img/docs/guides/auth/gatekeeper-flow.jpg b/website/static/img/docs/guides/auth/gatekeeper-flow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c8b730d80c437257974d9d3cad0e9edf0ee32969 GIT binary patch literal 216435 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�Mg3%@LXlrPq8V&^}bx~*+}ICQ-)XCHVL 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 Date: Fri, 15 Nov 2024 18:04:09 +0100 Subject: [PATCH 05/22] example: increase proxy controller timeout. --- .../api/lib/api_web/controllers/proxy_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/gatekeeper-auth/api/lib/api_web/controllers/proxy_controller.ex b/examples/gatekeeper-auth/api/lib/api_web/controllers/proxy_controller.ex index b6ddfc2c5c..8bfbeb1cf2 100644 --- a/examples/gatekeeper-auth/api/lib/api_web/controllers/proxy_controller.ex +++ b/examples/gatekeeper-auth/api/lib/api_web/controllers/proxy_controller.ex @@ -14,7 +14,7 @@ defmodule ApiWeb.ProxyController do defp proxy_request(%{req_headers: headers} = conn) do conn |> build_url() - |> Req.get!(headers: headers, into: :self) + |> Req.get!(headers: headers, into: :self, receive_timeout: 30_000) end defp build_url(%{path_info: [_prefix | segments], query_string: query}) do From d0cab79e5dcd0d6df4f9fb898d71efa83ddac100 Mon Sep 17 00:00:00 2001 From: James Arthur Date: Fri, 15 Nov 2024 18:04:35 +0100 Subject: [PATCH 06/22] example: fix local proxy URL. --- examples/gatekeeper-auth/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/gatekeeper-auth/docker-compose.yaml b/examples/gatekeeper-auth/docker-compose.yaml index d5346baa35..59f85001ca 100644 --- a/examples/gatekeeper-auth/docker-compose.yaml +++ b/examples/gatekeeper-auth/docker-compose.yaml @@ -34,7 +34,7 @@ services: AUTH_SECRET: "NFL5*0Bc#9U6E@tnmC&E7SUN6GwHfLmY" DATABASE_URL: "postgresql://postgres:password@postgres:5432/electric?sslmode=disable" ELECTRIC_URL: "http://electric:3000" - ELECTRIC_PROXY_URL: "${ELECTRIC_PROXY_URL:-http://localhost:3000/proxy}" + ELECTRIC_PROXY_URL: "${ELECTRIC_PROXY_URL:-http://localhost:4000/proxy}" PHX_HOST: "localhost" PHX_PORT: 4000 PHX_SCHEME: "http" From 514dedd7281efd4aa320b15b793f23e78c9bdfcc Mon Sep 17 00:00:00 2001 From: James Arthur Date: Fri, 15 Nov 2024 18:34:09 +0100 Subject: [PATCH 07/22] example: add gatekeeper client. --- examples/gatekeeper-auth/client/README.md | 14 + examples/gatekeeper-auth/client/index.ts | 54 ++++ examples/gatekeeper-auth/package.json | 17 +- examples/gatekeeper-auth/tsconfig.json | 21 ++ pnpm-lock.yaml | 345 ++++++++++++++++++---- 5 files changed, 392 insertions(+), 59 deletions(-) create mode 100644 examples/gatekeeper-auth/client/README.md create mode 100644 examples/gatekeeper-auth/client/index.ts create mode 100644 examples/gatekeeper-auth/tsconfig.json diff --git a/examples/gatekeeper-auth/client/README.md b/examples/gatekeeper-auth/client/README.md new file mode 100644 index 0000000000..1f8758d3aa --- /dev/null +++ b/examples/gatekeeper-auth/client/README.md @@ -0,0 +1,14 @@ + +# Gatekeeper client + +This is a little client app that syncs a shape from Electric using the gatekeeper pattern. + +I.e.: if first fetches config, including an auth token, from the gatekeeper. Then it uses the config to connect to Electric via the authorizing proxy. + +Note that it will use whichever proxy the API is configured to use (by connecting to the proxy using the url in the gatekeeper response). + +## Run locally + +```shell +npx tsx index.ts +``` diff --git a/examples/gatekeeper-auth/client/index.ts b/examples/gatekeeper-auth/client/index.ts new file mode 100644 index 0000000000..91d4502932 --- /dev/null +++ b/examples/gatekeeper-auth/client/index.ts @@ -0,0 +1,54 @@ +import { Shape, ShapeStream } from '@electric-sql/client' + +const API_URL = process.env.API_URL || "http://localhost:4000" + +interface Definition { + table: string, + where?: string, + columns?: string +} + +async function fetchShapeOptions(definition: Definition, offset: string) { + const { table, ...params} = definition + + const qs = new URLSearchParams({offset, ...params}).toString() + const url = `${API_URL}/gatekeeper/${table}?${qs}` + + const resp = await fetch(url, {method: "POST"}) + return await resp.json() +} + +async function sync(definition: Definition, offset: string = '-1') { + console.log('sync: ', offset) + + const options = await fetchShapeOptions(definition, offset) + const stream = new ShapeStream(options) + const shape = new Shape(stream) + + let lastOffset = offset + + stream.subscribe( + (messages) => { + messages.forEach((message) => { + if ('offset' in message) { + lastOffset = message.offset! + } + }) + }, + async (error) => { + if ('status' in error) { + console.warn('fetch error: ', error.status) + } + + shape.unsubscribeAll() + + await sync(definition, lastOffset) + } + ) + + shape.subscribe(async ({ rows }) => { + console.log('num rows: ', rows ? rows.length : 0) + }) +} + +await sync({table: 'items'}) diff --git a/examples/gatekeeper-auth/package.json b/examples/gatekeeper-auth/package.json index fc5a7ef1a9..50be436a43 100644 --- a/examples/gatekeeper-auth/package.json +++ b/examples/gatekeeper-auth/package.json @@ -1,5 +1,20 @@ { "name": "@electric-examples/gatekeeper-auth", "private": true, - "version": "0.0.1" + "version": "0.0.1", + "author": "ElectricSQL", + "license": "Apache-2.0", + "type": "module", + "scripts": { + "client": "npx tsx client/index.ts", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@electric-sql/client": "workspace:*" + }, + "devDependencies": { + "@types/node": "^20.14.10", + "tsx": "^4.19.2", + "typescript": "^5.6.3" + } } diff --git a/examples/gatekeeper-auth/tsconfig.json b/examples/gatekeeper-auth/tsconfig.json new file mode 100644 index 0000000000..5c1b7e6402 --- /dev/null +++ b/examples/gatekeeper-auth/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["client"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1845520e35..fdb0654129 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -112,7 +112,24 @@ importers: specifier: ^5.3.4 version: 5.4.10(@types/node@20.17.6) - examples/gatekeeper-auth: {} + examples/gatekeeper-auth: + dependencies: + '@electric-sql/client': + specifier: workspace:* + version: link:../../packages/typescript-client + devDependencies: + '@types/node': + specifier: ^20.14.10 + version: 20.14.11 + eslint: + specifier: ^8.57.1 + version: 8.57.1 + tsx: + specifier: ^4.19.2 + version: 4.19.2 + typescript: + specifier: ^5.6.3 + version: 5.6.3 examples/linearlite: dependencies: @@ -371,6 +388,64 @@ importers: specifier: ^5.3.4 version: 5.4.10(@types/node@20.17.6) + examples/proxy-auth: + dependencies: + '@electric-sql/client': + specifier: workspace:* + version: link:../../packages/typescript-client + '@electric-sql/react': + specifier: workspace:* + version: link:../../packages/react-hooks + next: + specifier: ^14.2.5 + version: 14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + pg: + specifier: ^8.12.0 + version: 8.12.0 + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + uuid: + specifier: ^10.0.0 + version: 10.0.0 + zod: + specifier: ^3.23.8 + version: 3.23.8 + devDependencies: + '@databases/pg-migrations': + specifier: ^5.0.3 + version: 5.0.3(typescript@5.5.3) + '@types/pg': + specifier: ^8.11.6 + version: 8.11.6 + '@types/react': + specifier: ^18.3.3 + version: 18.3.3 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.0 + '@types/uuid': + specifier: '*' + version: 10.0.0 + '@vitejs/plugin-react': + specifier: ^4.3.1 + version: 4.3.1(vite@5.3.4(@types/node@20.14.11)) + dotenv: + specifier: ^16.4.5 + version: 16.4.5 + eslint: + specifier: ^8.57.0 + version: 8.57.0 + typescript: + specifier: ^5.5.3 + version: 5.5.3 + vite: + specifier: ^5.3.4 + version: 5.3.4(@types/node@20.14.11) + examples/redis-sync: dependencies: '@electric-sql/client': @@ -419,7 +494,7 @@ importers: version: 0.3.4 tsup: specifier: ^8.0.1 - version: 8.3.5(@swc/core@1.9.1)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.6.0) + version: 8.2.0(@swc/core@1.7.0(@swc/helpers@0.5.5))(jiti@1.21.6)(postcss@8.4.45)(tsx@4.19.1)(typescript@5.5.3)(yaml@2.5.1) tsx: specifier: ^4.19.1 version: 4.19.2 @@ -797,10 +872,10 @@ importers: version: 3.1.7 vitepress: specifier: ^1.3.1 - version: 1.5.0(@algolia/client-search@5.13.0)(@types/node@20.17.6)(@types/react@18.3.12)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3) + version: 1.3.4(@algolia/client-search@4.24.0)(@types/node@20.14.11)(@types/react@18.3.3)(postcss@8.4.45)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.1)(typescript@5.6.3) vue-tweet: specifier: ^2.3.1 - version: 2.3.1(vue@3.5.12(typescript@5.6.3)) + version: 2.3.1(vue@3.5.3(typescript@5.6.3)) yaml: specifier: ^2.5.0 version: 2.6.0 @@ -1909,6 +1984,10 @@ packages: resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@exodus/schemasafe@1.3.0': resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} @@ -1953,6 +2032,11 @@ packages: engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} @@ -4750,6 +4834,12 @@ packages: deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -7620,8 +7710,13 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - turbo-stream@2.4.0: - resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + engines: {node: '>=18.0.0'} + hasBin: true + + turbo-stream@2.2.0: + resolution: {integrity: sha512-FKFg7A0To1VU4CH9YmSMON5QphK0BXjSoiC7D9yMh+mEEbXLUP9qJ4hEt1qcjKtzncs1OpcnjZO8NgrlVbZH+g==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -7660,6 +7755,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} @@ -8313,7 +8413,7 @@ snapshots: '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.3.7 + debug: 4.3.6(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -8500,8 +8600,27 @@ snapshots: '@babel/types@7.26.0': dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.0 + '@babel/parser': 7.25.3 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 + debug: 4.3.6(supports-color@5.5.0) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.24.9': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@babel/types@7.25.2': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 '@capsizecss/core@4.1.2': dependencies: @@ -9147,7 +9266,12 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.0': {} '@eslint/eslintrc@2.1.4': dependencies: @@ -9165,6 +9289,8 @@ snapshots: '@eslint/js@8.57.1': {} + '@eslint/js@8.57.1': {} + '@exodus/schemasafe@1.3.0': {} '@faker-js/faker@8.4.1': {} @@ -9211,6 +9337,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.6(supports-color@5.5.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/object-schema@2.0.3': {} @@ -11199,10 +11333,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.1.4(vite@5.4.10(@types/node@20.17.6))(vue@3.5.12(typescript@5.6.3))': + '@vitejs/plugin-vue@5.1.3(vite@5.4.3(@types/node@20.14.11))(vue@3.5.3(typescript@5.6.3))': dependencies: - vite: 5.4.10(@types/node@20.17.6) - vue: 3.5.12(typescript@5.6.3) + vite: 5.4.3(@types/node@20.14.11) + vue: 3.5.3(typescript@5.6.3) '@vitest/expect@2.1.4': dependencies: @@ -11308,29 +11442,29 @@ snapshots: '@vue/shared': 3.5.12 csstype: 3.1.3 - '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3))': + '@vue/server-renderer@3.5.3(vue@3.5.3(typescript@5.6.3))': dependencies: - '@vue/compiler-ssr': 3.5.12 - '@vue/shared': 3.5.12 - vue: 3.5.12(typescript@5.6.3) + '@vue/compiler-ssr': 3.5.3 + '@vue/shared': 3.5.3 + vue: 3.5.3(typescript@5.6.3) '@vue/shared@3.5.12': {} - '@vueuse/core@11.2.0(vue@3.5.12(typescript@5.6.3))': + '@vueuse/core@11.0.3(vue@3.5.3(typescript@5.6.3))': dependencies: '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 11.2.0 - '@vueuse/shared': 11.2.0(vue@3.5.12(typescript@5.6.3)) - vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + '@vueuse/metadata': 11.0.3 + '@vueuse/shared': 11.0.3(vue@3.5.3(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.3(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/integrations@11.2.0(focus-trap@7.6.0)(vue@3.5.12(typescript@5.6.3))': + '@vueuse/integrations@11.0.3(focus-trap@7.5.4)(vue@3.5.3(typescript@5.6.3))': dependencies: - '@vueuse/core': 11.2.0(vue@3.5.12(typescript@5.6.3)) - '@vueuse/shared': 11.2.0(vue@3.5.12(typescript@5.6.3)) - vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + '@vueuse/core': 11.0.3(vue@3.5.3(typescript@5.6.3)) + '@vueuse/shared': 11.0.3(vue@3.5.3(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.3(typescript@5.6.3)) optionalDependencies: focus-trap: 7.6.0 transitivePeerDependencies: @@ -11339,9 +11473,9 @@ snapshots: '@vueuse/metadata@11.2.0': {} - '@vueuse/shared@11.2.0(vue@3.5.12(typescript@5.6.3))': + '@vueuse/shared@11.0.3(vue@3.5.3(typescript@5.6.3))': dependencies: - vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.3(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -11926,9 +12060,9 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.7(supports-color@5.5.0): + debug@4.3.6(supports-color@5.5.0): dependencies: - ms: 2.1.3 + ms: 2.1.2 optionalDependencies: supports-color: 5.5.0 @@ -12529,6 +12663,49 @@ snapshots: transitivePeerDependencies: - supports-color + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.11.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.6(supports-color@5.5.0) + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + espree@9.6.1: dependencies: acorn: 8.14.0 @@ -14508,7 +14685,16 @@ snapshots: tsx: 4.19.2 yaml: 2.6.0 - postcss-modules-extract-imports@3.1.0(postcss@8.4.47): + postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.45)(tsx@4.19.2)(yaml@2.5.1): + dependencies: + lilconfig: 3.1.2 + optionalDependencies: + jiti: 1.21.6 + postcss: 8.4.45 + tsx: 4.19.2 + yaml: 2.5.1 + + postcss-modules-extract-imports@3.1.0(postcss@8.4.39): dependencies: postcss: 8.4.47 @@ -15771,7 +15957,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.3.5(@swc/core@1.9.1)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.6.0): + tsup@8.2.0(@swc/core@1.7.0(@swc/helpers@0.5.5))(jiti@1.21.6)(postcss@8.4.45)(tsx@4.19.1)(typescript@5.5.3)(yaml@2.5.1): dependencies: bundle-require: 5.0.0(esbuild@0.24.0) cac: 6.7.14 @@ -15799,14 +15985,48 @@ snapshots: - tsx - yaml - tsx@4.19.2: + tsup@8.2.0(@swc/core@1.7.0(@swc/helpers@0.5.5))(jiti@1.21.6)(postcss@8.4.45)(tsx@4.19.2)(typescript@5.5.3)(yaml@2.5.1): + dependencies: + bundle-require: 5.0.0(esbuild@0.23.0) + cac: 6.7.14 + chokidar: 3.6.0 + consola: 3.2.3 + debug: 4.3.6(supports-color@5.5.0) + esbuild: 0.23.0 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.45)(tsx@4.19.2)(yaml@2.5.1) + resolve-from: 5.0.0 + rollup: 4.21.0 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tree-kill: 1.2.2 + optionalDependencies: + '@swc/core': 1.7.0(@swc/helpers@0.5.5) + postcss: 8.4.45 + typescript: 5.5.3 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + + tsx@4.19.1: dependencies: esbuild: 0.23.1 get-tsconfig: 4.8.1 optionalDependencies: fsevents: 2.3.3 - turbo-stream@2.4.0: {} + tsx@4.19.2: + dependencies: + esbuild: 0.23.0 + get-tsconfig: 4.8.1 + optionalDependencies: + fsevents: 2.3.3 + + turbo-stream@2.2.0: {} type-check@0.4.0: dependencies: @@ -15855,6 +16075,8 @@ snapshots: typescript@5.6.3: {} + typescript@5.6.3: {} + uc.micro@2.1.0: {} ufo@1.5.4: {} @@ -16128,24 +16350,31 @@ snapshots: vitepress@1.5.0(@algolia/client-search@5.13.0)(@types/node@20.17.6)(@types/react@18.3.12)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3): dependencies: - '@docsearch/css': 3.7.0 - '@docsearch/js': 3.7.0(@algolia/client-search@5.13.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2) - '@iconify-json/simple-icons': 1.2.11 - '@shikijs/core': 1.22.2 - '@shikijs/transformers': 1.22.2 - '@shikijs/types': 1.22.2 + esbuild: 0.21.5 + postcss: 8.4.45 + rollup: 4.21.0 + optionalDependencies: + '@types/node': 20.14.11 + fsevents: 2.3.3 + + vitepress@1.3.4(@algolia/client-search@4.24.0)(@types/node@20.14.11)(@types/react@18.3.3)(postcss@8.4.45)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.1)(typescript@5.6.3): + dependencies: + '@docsearch/css': 3.6.1 + '@docsearch/js': 3.6.1(@algolia/client-search@4.24.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.1) + '@shikijs/core': 1.16.2 + '@shikijs/transformers': 1.16.2 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.1.4(vite@5.4.10(@types/node@20.17.6))(vue@3.5.12(typescript@5.6.3)) - '@vue/devtools-api': 7.6.3 - '@vue/shared': 3.5.12 - '@vueuse/core': 11.2.0(vue@3.5.12(typescript@5.6.3)) - '@vueuse/integrations': 11.2.0(focus-trap@7.6.0)(vue@3.5.12(typescript@5.6.3)) - focus-trap: 7.6.0 + '@vitejs/plugin-vue': 5.1.3(vite@5.4.3(@types/node@20.14.11))(vue@3.5.3(typescript@5.6.3)) + '@vue/devtools-api': 7.4.4 + '@vue/shared': 3.5.3 + '@vueuse/core': 11.0.3(vue@3.5.3(typescript@5.6.3)) + '@vueuse/integrations': 11.0.3(focus-trap@7.5.4)(vue@3.5.3(typescript@5.6.3)) + focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 7.1.0 - shiki: 1.22.2 - vite: 5.4.10(@types/node@20.17.6) - vue: 3.5.12(typescript@5.6.3) + shiki: 1.16.2 + vite: 5.4.3(@types/node@20.14.11) + vue: 3.5.3(typescript@5.6.3) optionalDependencies: postcss: 8.4.47 transitivePeerDependencies: @@ -16212,21 +16441,21 @@ snapshots: - supports-color - terser - vue-demi@0.14.10(vue@3.5.12(typescript@5.6.3)): + vue-demi@0.14.10(vue@3.5.3(typescript@5.6.3)): dependencies: - vue: 3.5.12(typescript@5.6.3) + vue: 3.5.3(typescript@5.6.3) - vue-tweet@2.3.1(vue@3.5.12(typescript@5.6.3)): + vue-tweet@2.3.1(vue@3.5.3(typescript@5.6.3)): dependencies: - vue: 3.5.12(typescript@5.6.3) + vue: 3.5.3(typescript@5.6.3) - vue@3.5.12(typescript@5.6.3): + vue@3.5.3(typescript@5.6.3): dependencies: - '@vue/compiler-dom': 3.5.12 - '@vue/compiler-sfc': 3.5.12 - '@vue/runtime-dom': 3.5.12 - '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@5.6.3)) - '@vue/shared': 3.5.12 + '@vue/compiler-dom': 3.5.3 + '@vue/compiler-sfc': 3.5.3 + '@vue/runtime-dom': 3.5.3 + '@vue/server-renderer': 3.5.3(vue@3.5.3(typescript@5.6.3)) + '@vue/shared': 3.5.3 optionalDependencies: typescript: 5.6.3 From 5ed4b31315beb5bd6bf740c3148e7bf1a2b634e2 Mon Sep 17 00:00:00 2001 From: James Arthur Date: Fri, 15 Nov 2024 18:34:42 +0100 Subject: [PATCH 08/22] example: typecheck the edge worker. --- examples/gatekeeper-auth/edge/index.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/examples/gatekeeper-auth/edge/index.ts b/examples/gatekeeper-auth/edge/index.ts index 25e7e5ee02..c3efa4853e 100644 --- a/examples/gatekeeper-auth/edge/index.ts +++ b/examples/gatekeeper-auth/edge/index.ts @@ -3,17 +3,24 @@ import jwt from 'jsonwebtoken' const AUTH_SECRET = Deno.env.get("AUTH_SECRET") || "NFL5*0Bc#9U6E@tnmC&E7SUN6GwHfLmY" const ELECTRIC_URL = Deno.env.get("ELECTRIC_URL") || "http://localhost:3000" +interface ShapeDefinition { + table: string + columns?: string + namespace?: string + where?: string +} + /** * Match `GET /v1/shape` requests. */ -function isGetShapeRequest(method, path) { +function isGetShapeRequest(method: string, path: string) { return method === 'GET' && path.endsWith('/v1/shape') } /** * Allow requests with a valid JWT in the auth header. */ -function verifyAuthHeader(headers) { +function verifyAuthHeader(headers: Headers) { const auth_header = headers.get("Authorization") if (auth_header === null) { @@ -38,7 +45,7 @@ function verifyAuthHeader(headers) { * Allow requests where the signed `shape` definition in the JWT claims * matches the shape definition in the request `params`. */ -function matchesDefinition(shape, params) { +function matchesDefinition(shape: ShapeDefinition, params: URLSearchParams) { if (shape === null || !shape.hasOwnProperty('table')) { return false } From 18744a85c938677efd4196b642582a93c8e843ad Mon Sep 17 00:00:00 2001 From: James Arthur Date: Fri, 15 Nov 2024 18:51:05 +0100 Subject: [PATCH 09/22] pnpm: update lockfile. --- pnpm-lock.yaml | 76 -------------------------------------------------- 1 file changed, 76 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fdb0654129..618a564146 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -121,9 +121,6 @@ importers: '@types/node': specifier: ^20.14.10 version: 20.14.11 - eslint: - specifier: ^8.57.1 - version: 8.57.1 tsx: specifier: ^4.19.2 version: 4.19.2 @@ -1984,10 +1981,6 @@ packages: resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@exodus/schemasafe@1.3.0': resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} @@ -2032,11 +2025,6 @@ packages: engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} @@ -4834,12 +4822,6 @@ packages: deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -9266,11 +9248,6 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': - dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.0': {} '@eslint/eslintrc@2.1.4': @@ -9289,8 +9266,6 @@ snapshots: '@eslint/js@8.57.1': {} - '@eslint/js@8.57.1': {} - '@exodus/schemasafe@1.3.0': {} '@faker-js/faker@8.4.1': {} @@ -9337,14 +9312,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@humanwhocodes/config-array@0.13.0': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.6(supports-color@5.5.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/object-schema@2.0.3': {} @@ -12663,49 +12630,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@8.57.1: - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.11.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.6(supports-color@5.5.0) - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - espree@9.6.1: dependencies: acorn: 8.14.0 From 23ba7106bbb3d3f5e958fbc6c2ae544204996f03 Mon Sep 17 00:00:00 2001 From: James Arthur Date: Mon, 18 Nov 2024 18:00:28 +0100 Subject: [PATCH 10/22] docs: include client code in the gatekeeper example. --- examples/gatekeeper-auth/README.md | 5 +++++ website/docs/guides/auth.md | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/examples/gatekeeper-auth/README.md b/examples/gatekeeper-auth/README.md index 35457155ec..840aa64281 100644 --- a/examples/gatekeeper-auth/README.md +++ b/examples/gatekeeper-auth/README.md @@ -330,6 +330,11 @@ $ curl -sv --header "Authorization: Bearer ${AUTH_TOKEN}" \ ... ``` +### Example client + +See the [./client](./client) folder for an example that uses the [Typescript client]() with gatekeeper and proxy endpoints. + + ## More information See the [Auth guide](https://electric-sql.com/docs/guides/auth). diff --git a/website/docs/guides/auth.md b/website/docs/guides/auth.md index e9851e2690..5e88b886fc 100644 --- a/website/docs/guides/auth.md +++ b/website/docs/guides/auth.md @@ -86,7 +86,7 @@ For example: #### Example -When using the [Typescript client](/docs/api/clients/typescript), you can pass in [`headers` option](/docs/api/clients/typescript#options) to add an `Authorization` header. +When using the [Typescript client](/docs/api/clients/typescript), you can pass in a [`headers` option](/docs/api/clients/typescript#options) to add an `Authorization` header. ```tsx const usersShape = (): ShapeStreamOptions => { @@ -178,7 +178,7 @@ This keeps your main auth logic: - in your API (in the gatekeeper endpoint) where it's natural to do things like query the database and call external services - running *once* when generating a token, rather than on the "hot path" of every shape request in your authorising proxy -#### Example +#### Implementation The [GitHub example](https://github.com/electric-sql/electric/tree/main/examples/gatekeeper-auth) provides an [`./api`](https://github.com/electric-sql/electric/tree/main/examples/gatekeeper-auth/api) service for generating auth tokens and three options for validating those auth tokens when proxying requests to Electric: @@ -216,6 +216,12 @@ The client can then process the data and make additional requests using the same > [!Tip] Interactive walkthrough > See [How to run](https://github.com/electric-sql/electric/blob/main/examples/gatekeeper-auth/README.md#how-to-run) on GitHub for an interactive walkthrough of the three different gatekeeper-auth example proxy options. +#### Example + +See the [./client](https://github.com/electric-sql/electric/tree/main/examples/gatekeeper-auth/client) for an example using the [Typescript client]() with gatekeeper and proxy endpoints: + +<<< @../../examples/gatekeeper-auth/client/index.ts{typescript} + ## Notes ### External services From 4f3a51288df7bde19c0d8cb07fa4cff71b4e3b28 Mon Sep 17 00:00:00 2001 From: James Arthur Date: Mon, 18 Nov 2024 19:56:07 +0100 Subject: [PATCH 11/22] pnpm: remove duplicate lockfile section. This was a rebase artefact. --- pnpm-lock.yaml | 58 -------------------------------------------------- 1 file changed, 58 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 618a564146..16a38c8264 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,64 +15,6 @@ importers: specifier: ^7.4.2 version: 7.4.2 - examples/proxy-auth: - dependencies: - '@electric-sql/client': - specifier: workspace:* - version: link:../../packages/typescript-client - '@electric-sql/react': - specifier: workspace:* - version: link:../../packages/react-hooks - next: - specifier: ^14.2.5 - version: 14.2.17(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - pg: - specifier: ^8.12.0 - version: 8.13.1 - react: - specifier: ^18.3.1 - version: 18.3.1 - react-dom: - specifier: ^18.3.1 - version: 18.3.1(react@18.3.1) - uuid: - specifier: ^10.0.0 - version: 10.0.0 - zod: - specifier: ^3.23.8 - version: 3.23.8 - devDependencies: - '@databases/pg-migrations': - specifier: ^5.0.3 - version: 5.0.3(typescript@5.6.3) - '@types/pg': - specifier: ^8.11.6 - version: 8.11.10 - '@types/react': - specifier: ^18.3.3 - version: 18.3.12 - '@types/react-dom': - specifier: ^18.3.0 - version: 18.3.1 - '@types/uuid': - specifier: '*' - version: 10.0.0 - '@vitejs/plugin-react': - specifier: ^4.3.1 - version: 4.3.3(vite@5.4.10(@types/node@20.17.6)) - dotenv: - specifier: ^16.4.5 - version: 16.4.5 - eslint: - specifier: ^8.57.0 - version: 8.57.1 - typescript: - specifier: ^5.5.3 - version: 5.6.3 - vite: - specifier: ^5.3.4 - version: 5.4.10(@types/node@20.17.6) - examples/bash-client: {} examples/basic-example: From a2a9bd10def2349ec4310d5e984d510c52532ba9 Mon Sep 17 00:00:00 2001 From: James Arthur Date: Mon, 18 Nov 2024 20:00:30 +0100 Subject: [PATCH 12/22] pnpm: update lockfile. --- pnpm-lock.yaml | 251 ++++++++++++++++--------------------------------- 1 file changed, 82 insertions(+), 169 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16a38c8264..27d5d77da2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,7 +62,7 @@ importers: devDependencies: '@types/node': specifier: ^20.14.10 - version: 20.14.11 + version: 20.17.6 tsx: specifier: ^4.19.2 version: 4.19.2 @@ -276,7 +276,7 @@ importers: version: link:../../packages/react-hooks next: specifier: ^14.2.5 - version: 14.2.17(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1) pg: specifier: ^8.12.0 version: 8.13.1 @@ -337,10 +337,10 @@ importers: version: link:../../packages/react-hooks next: specifier: ^14.2.5 - version: 14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1) pg: specifier: ^8.12.0 - version: 8.12.0 + version: 8.13.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -356,34 +356,34 @@ importers: devDependencies: '@databases/pg-migrations': specifier: ^5.0.3 - version: 5.0.3(typescript@5.5.3) + version: 5.0.3(typescript@5.6.3) '@types/pg': specifier: ^8.11.6 - version: 8.11.6 + version: 8.11.10 '@types/react': specifier: ^18.3.3 - version: 18.3.3 + version: 18.3.12 '@types/react-dom': specifier: ^18.3.0 - version: 18.3.0 + version: 18.3.1 '@types/uuid': specifier: '*' version: 10.0.0 '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.1(vite@5.3.4(@types/node@20.14.11)) + version: 4.3.3(vite@5.4.10(@types/node@20.17.6)) dotenv: specifier: ^16.4.5 version: 16.4.5 eslint: specifier: ^8.57.0 - version: 8.57.0 + version: 8.57.1 typescript: specifier: ^5.5.3 - version: 5.5.3 + version: 5.6.3 vite: specifier: ^5.3.4 - version: 5.3.4(@types/node@20.14.11) + version: 5.4.10(@types/node@20.17.6) examples/redis-sync: dependencies: @@ -433,7 +433,7 @@ importers: version: 0.3.4 tsup: specifier: ^8.0.1 - version: 8.2.0(@swc/core@1.7.0(@swc/helpers@0.5.5))(jiti@1.21.6)(postcss@8.4.45)(tsx@4.19.1)(typescript@5.5.3)(yaml@2.5.1) + version: 8.3.5(@swc/core@1.9.1(@swc/helpers@0.5.5))(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.6.0) tsx: specifier: ^4.19.1 version: 4.19.2 @@ -730,7 +730,7 @@ importers: version: 0.3.4 tsup: specifier: ^8.0.1 - version: 8.3.5(@swc/core@1.9.1)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.1(@swc/helpers@0.5.5))(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.6.0) typescript: specifier: ^5.5.2 version: 5.6.3 @@ -790,7 +790,7 @@ importers: version: 0.3.4 tsup: specifier: ^8.0.1 - version: 8.3.5(@swc/core@1.9.1)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.1(@swc/helpers@0.5.5))(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.6.0) typescript: specifier: ^5.5.2 version: 5.6.3 @@ -811,10 +811,10 @@ importers: version: 3.1.7 vitepress: specifier: ^1.3.1 - version: 1.3.4(@algolia/client-search@4.24.0)(@types/node@20.14.11)(@types/react@18.3.3)(postcss@8.4.45)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.1)(typescript@5.6.3) + version: 1.5.0(@algolia/client-search@5.13.0)(@types/node@20.17.6)(@types/react@18.3.12)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3) vue-tweet: specifier: ^2.3.1 - version: 2.3.1(vue@3.5.3(typescript@5.6.3)) + version: 2.3.1(vue@3.5.12(typescript@5.6.3)) yaml: specifier: ^2.5.0 version: 2.6.0 @@ -7631,16 +7631,16 @@ packages: tsx@4.19.2: resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.1 engines: {node: '>=18.0.0'} hasBin: true + optionalDependencies: + fsevents: 2.3.3 - tsx@4.19.2: - resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} - engines: {node: '>=18.0.0'} - hasBin: true - - turbo-stream@2.2.0: - resolution: {integrity: sha512-FKFg7A0To1VU4CH9YmSMON5QphK0BXjSoiC7D9yMh+mEEbXLUP9qJ4hEt1qcjKtzncs1OpcnjZO8NgrlVbZH+g==} + turbo-stream@2.4.0: + resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -7679,11 +7679,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} - hasBin: true - uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} @@ -8337,7 +8332,7 @@ snapshots: '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.7(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -8517,34 +8512,15 @@ snapshots: '@babel/parser': 7.26.2 '@babel/template': 7.25.9 '@babel/types': 7.26.0 - debug: 4.3.7 + debug: 4.3.7(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color '@babel/types@7.26.0': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/parser': 7.25.3 - '@babel/template': 7.25.0 - '@babel/types': 7.25.2 - debug: 4.3.6(supports-color@5.5.0) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.24.9': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@babel/types@7.25.2': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 '@capsizecss/core@4.1.2': dependencies: @@ -9190,12 +9166,12 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.0': {} + '@eslint-community/regexpp@4.12.1': {} '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.7 + debug: 4.3.7(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -9249,7 +9225,7 @@ snapshots: '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7 + debug: 4.3.7(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -11242,10 +11218,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.1.3(vite@5.4.3(@types/node@20.14.11))(vue@3.5.3(typescript@5.6.3))': + '@vitejs/plugin-vue@5.1.4(vite@5.4.10(@types/node@20.17.6))(vue@3.5.12(typescript@5.6.3))': dependencies: - vite: 5.4.3(@types/node@20.14.11) - vue: 3.5.3(typescript@5.6.3) + vite: 5.4.10(@types/node@20.17.6) + vue: 3.5.12(typescript@5.6.3) '@vitest/expect@2.1.4': dependencies: @@ -11351,29 +11327,29 @@ snapshots: '@vue/shared': 3.5.12 csstype: 3.1.3 - '@vue/server-renderer@3.5.3(vue@3.5.3(typescript@5.6.3))': + '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3))': dependencies: - '@vue/compiler-ssr': 3.5.3 - '@vue/shared': 3.5.3 - vue: 3.5.3(typescript@5.6.3) + '@vue/compiler-ssr': 3.5.12 + '@vue/shared': 3.5.12 + vue: 3.5.12(typescript@5.6.3) '@vue/shared@3.5.12': {} - '@vueuse/core@11.0.3(vue@3.5.3(typescript@5.6.3))': + '@vueuse/core@11.2.0(vue@3.5.12(typescript@5.6.3))': dependencies: '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 11.0.3 - '@vueuse/shared': 11.0.3(vue@3.5.3(typescript@5.6.3)) - vue-demi: 0.14.10(vue@3.5.3(typescript@5.6.3)) + '@vueuse/metadata': 11.2.0 + '@vueuse/shared': 11.2.0(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/integrations@11.0.3(focus-trap@7.5.4)(vue@3.5.3(typescript@5.6.3))': + '@vueuse/integrations@11.2.0(focus-trap@7.6.0)(vue@3.5.12(typescript@5.6.3))': dependencies: - '@vueuse/core': 11.0.3(vue@3.5.3(typescript@5.6.3)) - '@vueuse/shared': 11.0.3(vue@3.5.3(typescript@5.6.3)) - vue-demi: 0.14.10(vue@3.5.3(typescript@5.6.3)) + '@vueuse/core': 11.2.0(vue@3.5.12(typescript@5.6.3)) + '@vueuse/shared': 11.2.0(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) optionalDependencies: focus-trap: 7.6.0 transitivePeerDependencies: @@ -11382,9 +11358,9 @@ snapshots: '@vueuse/metadata@11.2.0': {} - '@vueuse/shared@11.0.3(vue@3.5.3(typescript@5.6.3))': + '@vueuse/shared@11.2.0(vue@3.5.12(typescript@5.6.3))': dependencies: - vue-demi: 0.14.10(vue@3.5.3(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -11965,13 +11941,9 @@ snapshots: dependencies: ms: 2.0.0 - debug@4.3.7: + debug@4.3.7(supports-color@5.5.0): dependencies: ms: 2.1.3 - - debug@4.3.6(supports-color@5.5.0): - dependencies: - ms: 2.1.2 optionalDependencies: supports-color: 5.5.0 @@ -12542,7 +12514,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.7 + debug: 4.3.7(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -14094,7 +14066,7 @@ snapshots: neo-async@2.6.2: {} - next@14.2.17(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.17 '@swc/helpers': 0.5.5 @@ -14104,7 +14076,7 @@ snapshots: postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(@babel/core@7.26.0)(react@18.3.1) + styled-jsx: 5.1.1(react@18.3.1) optionalDependencies: '@next/swc-darwin-arm64': 14.2.17 '@next/swc-darwin-x64': 14.2.17 @@ -14551,16 +14523,7 @@ snapshots: tsx: 4.19.2 yaml: 2.6.0 - postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.45)(tsx@4.19.2)(yaml@2.5.1): - dependencies: - lilconfig: 3.1.2 - optionalDependencies: - jiti: 1.21.6 - postcss: 8.4.45 - tsx: 4.19.2 - yaml: 2.5.1 - - postcss-modules-extract-imports@3.1.0(postcss@8.4.39): + postcss-modules-extract-imports@3.1.0(postcss@8.4.47): dependencies: postcss: 8.4.47 @@ -15596,12 +15559,10 @@ snapshots: stylis: 4.3.2 tslib: 2.6.2 - styled-jsx@5.1.1(@babel/core@7.26.0)(react@18.3.1): + styled-jsx@5.1.1(react@18.3.1): dependencies: client-only: 0.0.1 react: 18.3.1 - optionalDependencies: - '@babel/core': 7.26.0 stylis@4.3.2: {} @@ -15823,7 +15784,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.2.0(@swc/core@1.7.0(@swc/helpers@0.5.5))(jiti@1.21.6)(postcss@8.4.45)(tsx@4.19.1)(typescript@5.5.3)(yaml@2.5.1): + tsup@8.3.5(@swc/core@1.9.1(@swc/helpers@0.5.5))(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.6.0): dependencies: bundle-require: 5.0.0(esbuild@0.24.0) cac: 6.7.14 @@ -15851,48 +15812,9 @@ snapshots: - tsx - yaml - tsup@8.2.0(@swc/core@1.7.0(@swc/helpers@0.5.5))(jiti@1.21.6)(postcss@8.4.45)(tsx@4.19.2)(typescript@5.5.3)(yaml@2.5.1): - dependencies: - bundle-require: 5.0.0(esbuild@0.23.0) - cac: 6.7.14 - chokidar: 3.6.0 - consola: 3.2.3 - debug: 4.3.6(supports-color@5.5.0) - esbuild: 0.23.0 - execa: 5.1.1 - globby: 11.1.0 - joycon: 3.1.1 - postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.45)(tsx@4.19.2)(yaml@2.5.1) - resolve-from: 5.0.0 - rollup: 4.21.0 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tree-kill: 1.2.2 - optionalDependencies: - '@swc/core': 1.7.0(@swc/helpers@0.5.5) - postcss: 8.4.45 - typescript: 5.5.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - - tsx@4.19.1: - dependencies: - esbuild: 0.23.1 - get-tsconfig: 4.8.1 - optionalDependencies: - fsevents: 2.3.3 - - tsx@4.19.2: - dependencies: - esbuild: 0.23.0 - get-tsconfig: 4.8.1 - optionalDependencies: - fsevents: 2.3.3 + tsx@4.19.2: {} - turbo-stream@2.2.0: {} + turbo-stream@2.4.0: {} type-check@0.4.0: dependencies: @@ -15941,8 +15863,6 @@ snapshots: typescript@5.6.3: {} - typescript@5.6.3: {} - uc.micro@2.1.0: {} ufo@1.5.4: {} @@ -16216,31 +16136,24 @@ snapshots: vitepress@1.5.0(@algolia/client-search@5.13.0)(@types/node@20.17.6)(@types/react@18.3.12)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3): dependencies: - esbuild: 0.21.5 - postcss: 8.4.45 - rollup: 4.21.0 - optionalDependencies: - '@types/node': 20.14.11 - fsevents: 2.3.3 - - vitepress@1.3.4(@algolia/client-search@4.24.0)(@types/node@20.14.11)(@types/react@18.3.3)(postcss@8.4.45)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.1)(typescript@5.6.3): - dependencies: - '@docsearch/css': 3.6.1 - '@docsearch/js': 3.6.1(@algolia/client-search@4.24.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.1) - '@shikijs/core': 1.16.2 - '@shikijs/transformers': 1.16.2 + '@docsearch/css': 3.7.0 + '@docsearch/js': 3.7.0(@algolia/client-search@5.13.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2) + '@iconify-json/simple-icons': 1.2.11 + '@shikijs/core': 1.22.2 + '@shikijs/transformers': 1.22.2 + '@shikijs/types': 1.22.2 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.1.3(vite@5.4.3(@types/node@20.14.11))(vue@3.5.3(typescript@5.6.3)) - '@vue/devtools-api': 7.4.4 - '@vue/shared': 3.5.3 - '@vueuse/core': 11.0.3(vue@3.5.3(typescript@5.6.3)) - '@vueuse/integrations': 11.0.3(focus-trap@7.5.4)(vue@3.5.3(typescript@5.6.3)) - focus-trap: 7.5.4 + '@vitejs/plugin-vue': 5.1.4(vite@5.4.10(@types/node@20.17.6))(vue@3.5.12(typescript@5.6.3)) + '@vue/devtools-api': 7.6.3 + '@vue/shared': 3.5.12 + '@vueuse/core': 11.2.0(vue@3.5.12(typescript@5.6.3)) + '@vueuse/integrations': 11.2.0(focus-trap@7.6.0)(vue@3.5.12(typescript@5.6.3)) + focus-trap: 7.6.0 mark.js: 8.11.1 minisearch: 7.1.0 - shiki: 1.16.2 - vite: 5.4.3(@types/node@20.14.11) - vue: 3.5.3(typescript@5.6.3) + shiki: 1.22.2 + vite: 5.4.10(@types/node@20.17.6) + vue: 3.5.12(typescript@5.6.3) optionalDependencies: postcss: 8.4.47 transitivePeerDependencies: @@ -16307,21 +16220,21 @@ snapshots: - supports-color - terser - vue-demi@0.14.10(vue@3.5.3(typescript@5.6.3)): + vue-demi@0.14.10(vue@3.5.12(typescript@5.6.3)): dependencies: - vue: 3.5.3(typescript@5.6.3) + vue: 3.5.12(typescript@5.6.3) - vue-tweet@2.3.1(vue@3.5.3(typescript@5.6.3)): + vue-tweet@2.3.1(vue@3.5.12(typescript@5.6.3)): dependencies: - vue: 3.5.3(typescript@5.6.3) + vue: 3.5.12(typescript@5.6.3) - vue@3.5.3(typescript@5.6.3): + vue@3.5.12(typescript@5.6.3): dependencies: - '@vue/compiler-dom': 3.5.3 - '@vue/compiler-sfc': 3.5.3 - '@vue/runtime-dom': 3.5.3 - '@vue/server-renderer': 3.5.3(vue@3.5.3(typescript@5.6.3)) - '@vue/shared': 3.5.3 + '@vue/compiler-dom': 3.5.12 + '@vue/compiler-sfc': 3.5.12 + '@vue/runtime-dom': 3.5.12 + '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@5.6.3)) + '@vue/shared': 3.5.12 optionalDependencies: typescript: 5.6.3 From 14775439d23f0004fc965b0e823a39870b526409 Mon Sep 17 00:00:00 2001 From: James Arthur Date: Mon, 18 Nov 2024 20:20:30 +0100 Subject: [PATCH 13/22] docs: fix hyperlink. --- website/docs/guides/auth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/auth.md b/website/docs/guides/auth.md index 5e88b886fc..e947a32f17 100644 --- a/website/docs/guides/auth.md +++ b/website/docs/guides/auth.md @@ -218,7 +218,7 @@ The client can then process the data and make additional requests using the same #### Example -See the [./client](https://github.com/electric-sql/electric/tree/main/examples/gatekeeper-auth/client) for an example using the [Typescript client]() with gatekeeper and proxy endpoints: +See the [./client](https://github.com/electric-sql/electric/tree/main/examples/gatekeeper-auth/client) for an example using the [Typescript client](/docs/api/clients/typescript) with gatekeeper and proxy endpoints: <<< @../../examples/gatekeeper-auth/client/index.ts{typescript} From 3939c8e6114ed1b8347a7b1f01f5373385d207f0 Mon Sep 17 00:00:00 2001 From: James Arthur Date: Tue, 19 Nov 2024 11:36:48 +0100 Subject: [PATCH 14/22] client: rename `shapeHandle` ShapeStreamOption to `handle`. --- packages/typescript-client/src/client.ts | 21 ++++++++++----------- packages/typescript-client/src/shape.ts | 4 ++++ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/typescript-client/src/client.ts b/packages/typescript-client/src/client.ts index fb90ae75cd..861700e349 100644 --- a/packages/typescript-client/src/client.ts +++ b/packages/typescript-client/src/client.ts @@ -106,6 +106,7 @@ export interface ShapeStreamOptions { * usage and so is not recommended. */ replica?: Replica + /** * The "offset" on the shape log. This is typically not set as the ShapeStream * will handle this automatically. A common scenario where you might pass an offset @@ -115,12 +116,12 @@ export interface ShapeStreamOptions { * so it knows at what point in the shape to catch you up from. */ offset?: Offset + /** * Similar to `offset`, this isn't typically used unless you're maintaining * a cache of the shape log. */ - shapeHandle?: string - backoffOptions?: BackoffOptions + handle?: string /** * HTTP headers to attach to requests made by the client. @@ -141,8 +142,10 @@ export interface ShapeStreamOptions { * shape and stop, pass false. */ subscribe?: boolean + signal?: AbortSignal fetchClient?: typeof fetch + backoffOptions?: BackoffOptions parser?: Parser } @@ -240,7 +243,7 @@ export class ShapeStream = Row> this.options = { subscribe: true, ...options } this.#lastOffset = this.options.offset ?? `-1` this.#liveCacheBuster = `` - this.#shapeHandle = this.options.shapeHandle + this.#shapeHandle = this.options.handle this.#databaseId = this.options.databaseId this.#messageParser = new MessageParser(options.parser) this.#replica = this.options.replica @@ -516,10 +519,10 @@ export class ShapeStream = Row> * Resets the state of the stream, optionally with a provided * shape handle */ - #reset(shapeHandle?: string) { + #reset(handle?: string) { this.#lastOffset = `-1` this.#liveCacheBuster = `` - this.#shapeHandle = shapeHandle + this.#shapeHandle = handle this.#isUpToDate = false this.#connected = false this.#schema = undefined @@ -536,13 +539,9 @@ function validateOptions(options: Partial>): void { ) } - if ( - options.offset !== undefined && - options.offset !== `-1` && - !options.shapeHandle - ) { + if (options.offset !== undefined && options.offset !== `-1` && !options.handle) { throw new Error( - `shapeHandle is required if this isn't an initial fetch (i.e. offset > -1)` + `handle is required if this isn't an initial fetch (i.e. offset > -1)` ) } diff --git a/packages/typescript-client/src/shape.ts b/packages/typescript-client/src/shape.ts index f47622cbac..fc1d95d7c2 100644 --- a/packages/typescript-client/src/shape.ts +++ b/packages/typescript-client/src/shape.ts @@ -74,6 +74,10 @@ export class Shape = Row> { return this.#stream.lastOffset } + get handle(): string { + return this.#stream.shapeHandle + } + get rows(): Promise { return this.value.then((v) => Array.from(v.values())) } From d65ec3bf31a9e448f59e8bec34cf45dd4d4c82e7 Mon Sep 17 00:00:00 2001 From: James Arthur Date: Tue, 19 Nov 2024 11:37:17 +0100 Subject: [PATCH 15/22] examples: update gatekeeper client to use the new API. --- examples/gatekeeper-auth/client/index.ts | 66 ++++++++++++------------ 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/examples/gatekeeper-auth/client/index.ts b/examples/gatekeeper-auth/client/index.ts index 91d4502932..f3932ca65e 100644 --- a/examples/gatekeeper-auth/client/index.ts +++ b/examples/gatekeeper-auth/client/index.ts @@ -8,47 +8,47 @@ interface Definition { columns?: string } -async function fetchShapeOptions(definition: Definition, offset: string) { - const { table, ...params} = definition - - const qs = new URLSearchParams({offset, ...params}).toString() - const url = `${API_URL}/gatekeeper/${table}?${qs}` - - const resp = await fetch(url, {method: "POST"}) - return await resp.json() -} - -async function sync(definition: Definition, offset: string = '-1') { +/* + * Fetch the shape options and start syncing. When new data is recieved, + * log the number of rows. When an auth token expires, reconnect. + */ +async function sync(definition: Definition, handle: string, offset: string = '-1') { console.log('sync: ', offset) - const options = await fetchShapeOptions(definition, offset) - const stream = new ShapeStream(options) + const options = await fetchShapeOptions(definition) + const stream = new ShapeStream({...options, handle: handle, offset: offset}) const shape = new Shape(stream) - let lastOffset = offset - - stream.subscribe( - (messages) => { - messages.forEach((message) => { - if ('offset' in message) { - lastOffset = message.offset! - } - }) - }, - async (error) => { - if ('status' in error) { - console.warn('fetch error: ', error.status) - } + shape.subscribe(async ({ rows }) => { + if (shape.error && 'status' in shape.error) { + const status = shape.error.status + console.warn('fetch error: ', status) - shape.unsubscribeAll() + if (status === 401 || status === 403) { + shape.unsubscribeAll() - await sync(definition, lastOffset) + return await sync(definition, shape.handle, shape.lastOffset) + } + } + else { + console.log('num rows: ', rows ? rows.length : 0) } - ) - - shape.subscribe(async ({ rows }) => { - console.log('num rows: ', rows ? rows.length : 0) }) } +/* + * Make a request to the gatekeeper endpoint to get the proxy url and + * auth headers to connect to/with. + */ +async function fetchShapeOptions(definition: Definition) { + const { table, ...params} = definition + + const qs = new URLSearchParams(params).toString() + const url = `${API_URL}/gatekeeper/${table}${qs ? '?' : ''}${qs}` + + const resp = await fetch(url, {method: "POST"}) + return await resp.json() +} + +// Start syncing. await sync({table: 'items'}) From 228ee471b2d490833b2de38f59c6a4f91c496f38 Mon Sep 17 00:00:00 2001 From: James Arthur Date: Tue, 19 Nov 2024 11:41:45 +0100 Subject: [PATCH 16/22] client: format. --- packages/typescript-client/src/client.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/typescript-client/src/client.ts b/packages/typescript-client/src/client.ts index 861700e349..d8c0228c09 100644 --- a/packages/typescript-client/src/client.ts +++ b/packages/typescript-client/src/client.ts @@ -539,7 +539,11 @@ function validateOptions(options: Partial>): void { ) } - if (options.offset !== undefined && options.offset !== `-1` && !options.handle) { + if ( + options.offset !== undefined && + options.offset !== `-1` && + !options.handle + ) { throw new Error( `handle is required if this isn't an initial fetch (i.e. offset > -1)` ) From c76743d56d62e073c400b7c22396fd9322d4897e Mon Sep 17 00:00:00 2001 From: James Arthur Date: Tue, 19 Nov 2024 11:54:35 +0100 Subject: [PATCH 17/22] client tests: carry through the shapeHandle -> handle rename. --- packages/react-hooks/test/support/test-context.ts | 12 ++++++------ .../typescript-client/test/integration.test.ts | 8 ++++---- .../typescript-client/test/support/test-context.ts | 14 +++++++------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/react-hooks/test/support/test-context.ts b/packages/react-hooks/test/support/test-context.ts index 815f47224a..7c23a9977c 100644 --- a/packages/react-hooks/test/support/test-context.ts +++ b/packages/react-hooks/test/support/test-context.ts @@ -10,10 +10,10 @@ export type GeneratedIssueRow = { id?: string; title: string } export type UpdateIssueFn = (row: IssueRow) => Promise> export type DeleteIssueFn = (row: IssueRow) => Promise> export type InsertIssuesFn = (...rows: GeneratedIssueRow[]) => Promise -export type ClearIssuesShapeFn = (shapeHandle?: string) => Promise +export type ClearIssuesShapeFn = (handle?: string) => Promise export type ClearShapeFn = ( table: string, - shapeHandle?: string + handle?: string ) => Promise export const testWithDbClient = test.extend<{ @@ -38,10 +38,10 @@ export const testWithDbClient = test.extend<{ baseUrl: async ({}, use) => use(inject(`baseUrl`)), pgSchema: async ({}, use) => use(inject(`testPgSchema`)), clearShape: async ({}, use) => { - use(async (table: string, shapeHandle?: string) => { + use(async (table: string, handle?: string) => { const baseUrl = inject(`baseUrl`) const resp = await fetch( - `${baseUrl}/v1/shape?table=${table}${shapeHandle ? `&handle=${shapeHandle}` : ``}`, + `${baseUrl}/v1/shape?table=${table}${handle ? `&handle=${handle}` : ``}`, { method: `DELETE`, } @@ -54,7 +54,7 @@ export const testWithDbClient = test.extend<{ ) ) throw new Error( - `Could not delete shape ${table} with handle ${shapeHandle}` + `Could not delete shape ${table} with handle ${handle}` ) } }) @@ -118,6 +118,6 @@ export const testWithIssuesTable = testWithDbClient.extend<{ }), clearIssuesShape: async ({ clearShape, issuesTableUrl }, use) => { - use((shapeHandle?: string) => clearShape(issuesTableUrl, shapeHandle)) + use((handle?: string) => clearShape(issuesTableUrl, handle)) }, }) diff --git a/packages/typescript-client/test/integration.test.ts b/packages/typescript-client/test/integration.test.ts index f6b2c2b50c..af2e79bb7e 100644 --- a/packages/typescript-client/test/integration.test.ts +++ b/packages/typescript-client/test/integration.test.ts @@ -533,7 +533,7 @@ describe(`HTTP Sync`, () => { subscribe: false, signal: newAborter.signal, offset: lastOffset, - shapeHandle: issueStream.shapeHandle, + handle: issueStream.shapeHandle, }) await h.forEachMessage(newIssueStream, newAborter, (res, msg, nth) => { @@ -675,7 +675,7 @@ describe(`HTTP Sync`, () => { } }) - await clearShape(issuesTableUrl, { shapeHandle: issueStream.shapeHandle! }) + await clearShape(issuesTableUrl, { handle: issueStream.shapeHandle! }) expect(shapeData).toEqual( new Map([[`${issuesTableKey}/"${id1}"`, { id: id1, title: `foo1` }]]) @@ -795,7 +795,7 @@ describe(`HTTP Sync`, () => { subscribe: false, signal: newAborter.signal, offset: lastOffset, - shapeHandle: issueStream.shapeHandle, + handle: issueStream.shapeHandle, fetchClient: fetchWrapper, }) @@ -841,7 +841,7 @@ describe(`HTTP Sync`, () => { url: `${BASE_URL}/v1/shape`, table: issuesTableUrl, subscribe: true, - shapeHandle: issueStream.shapeHandle, + handle: issueStream.shapeHandle, where: `1=1`, }) diff --git a/packages/typescript-client/test/support/test-context.ts b/packages/typescript-client/test/support/test-context.ts index 39d76f152a..d346d03bc7 100644 --- a/packages/typescript-client/test/support/test-context.ts +++ b/packages/typescript-client/test/support/test-context.ts @@ -14,10 +14,10 @@ export type GeneratedIssueRow = { id?: string; title: string } export type UpdateIssueFn = (row: IssueRow) => Promise> export type DeleteIssueFn = (row: IssueRow) => Promise> export type InsertIssuesFn = (...rows: GeneratedIssueRow[]) => Promise -export type ClearIssuesShapeFn = (shapeHandle?: string) => Promise +export type ClearIssuesShapeFn = (handle?: string) => Promise export type ClearShapeFn = ( table: string, - options?: { shapeHandle?: string; databaseId?: string } + options?: { handle?: string; databaseId?: string } ) => Promise export const testWithDbClient = test.extend<{ @@ -47,7 +47,7 @@ export const testWithDbClient = test.extend<{ table: string, options: { databaseId?: string - shapeHandle?: string + handle?: string } = {} ) => { const baseUrl = inject(`baseUrl`) @@ -59,8 +59,8 @@ export const testWithDbClient = test.extend<{ url.searchParams.set(DATABASE_ID_QUERY_PARAM, options.databaseId) - if (options.shapeHandle) { - url.searchParams.set(SHAPE_HANDLE_QUERY_PARAM, options.shapeHandle) + if (options.handle) { + url.searchParams.set(SHAPE_HANDLE_QUERY_PARAM, options.handle) } const resp = await fetch(url.toString(), { method: `DELETE` }) @@ -69,7 +69,7 @@ export const testWithDbClient = test.extend<{ await FetchError.fromResponse(resp, `DELETE ${url.toString()}`) ) throw new Error( - `Could not delete shape ${table} with ID ${options.shapeHandle}` + `Could not delete shape ${table} with ID ${options.handle}` ) } } @@ -156,7 +156,7 @@ export const testWithIssuesTable = testWithDbClient.extend<{ }), clearIssuesShape: async ({ clearShape, issuesTableUrl }, use) => { - use((shapeHandle?: string) => clearShape(issuesTableUrl, { shapeHandle })) + use((handle?: string) => clearShape(issuesTableUrl, { handle })) }, }) From c7a20d595a113e5cb740a17767ca82e85f702e8a Mon Sep 17 00:00:00 2001 From: James Arthur Date: Tue, 19 Nov 2024 11:54:47 +0100 Subject: [PATCH 18/22] client: document how to run the tests. --- packages/typescript-client/README.md | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/packages/typescript-client/README.md b/packages/typescript-client/README.md index ac48eabfd7..42877ac4c5 100644 --- a/packages/typescript-client/README.md +++ b/packages/typescript-client/README.md @@ -94,3 +94,34 @@ shape.subscribe(({ rows }) => { ``` See the [Docs](https://electric-sql.com) and [Examples](https://electric-sql.com/examples/basic) for more information. + +## Develop + +Install the pnpm workspace at the repo root: + +```shell +pnpm install +``` + +Build the package: + +```shell +cd packages/typescript-client +pnpm build +``` + +## Test + +In one terminal, start the backend running: + +```shell +cd ../sync-service +mix deps.get +mix stop_dev && mix compile && mix start_dev && ies -S mix +``` + +Then in this folder: + +```shell +pnpm test +``` From 3b9b59a7c5f0a7d79044ca4d0dc66b8ee0e535ec Mon Sep 17 00:00:00 2001 From: James Arthur Date: Tue, 19 Nov 2024 11:56:11 +0100 Subject: [PATCH 19/22] client: fix type. --- packages/typescript-client/src/shape.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/typescript-client/src/shape.ts b/packages/typescript-client/src/shape.ts index fc1d95d7c2..225837dd74 100644 --- a/packages/typescript-client/src/shape.ts +++ b/packages/typescript-client/src/shape.ts @@ -74,7 +74,7 @@ export class Shape = Row> { return this.#stream.lastOffset } - get handle(): string { + get handle(): string | undefined { return this.#stream.shapeHandle } From 027f13e70dc037433b302b411d59e030d6c66ea3 Mon Sep 17 00:00:00 2001 From: James Arthur Date: Tue, 19 Nov 2024 11:56:34 +0100 Subject: [PATCH 20/22] release: add changeset. --- .changeset/thirty-starfishes-shake.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/thirty-starfishes-shake.md diff --git a/.changeset/thirty-starfishes-shake.md b/.changeset/thirty-starfishes-shake.md new file mode 100644 index 0000000000..785bf5762e --- /dev/null +++ b/.changeset/thirty-starfishes-shake.md @@ -0,0 +1,5 @@ +--- +"@electric-sql/client": patch +--- + +Exposed `shape.handle` getter on `Shape` and rename `shapeHandle` to `handle` in the `ShapeStreamOptions`. From ba775fad9efbd7ee93bc0ee21bea8cf0a245098b Mon Sep 17 00:00:00 2001 From: James Arthur Date: Tue, 19 Nov 2024 11:57:56 +0100 Subject: [PATCH 21/22] example: handle is optional. --- examples/gatekeeper-auth/client/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/gatekeeper-auth/client/index.ts b/examples/gatekeeper-auth/client/index.ts index f3932ca65e..9eb416b654 100644 --- a/examples/gatekeeper-auth/client/index.ts +++ b/examples/gatekeeper-auth/client/index.ts @@ -12,7 +12,7 @@ interface Definition { * Fetch the shape options and start syncing. When new data is recieved, * log the number of rows. When an auth token expires, reconnect. */ -async function sync(definition: Definition, handle: string, offset: string = '-1') { +async function sync(definition: Definition, handle?: string, offset: string = '-1') { console.log('sync: ', offset) const options = await fetchShapeOptions(definition) From 15d9c0cd093ea93a189a3ffc18444a94eeef0707 Mon Sep 17 00:00:00 2001 From: James Arthur Date: Tue, 19 Nov 2024 12:01:26 +0100 Subject: [PATCH 22/22] react-hooks: format. --- packages/react-hooks/test/support/test-context.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/react-hooks/test/support/test-context.ts b/packages/react-hooks/test/support/test-context.ts index 7c23a9977c..7e5df67e0a 100644 --- a/packages/react-hooks/test/support/test-context.ts +++ b/packages/react-hooks/test/support/test-context.ts @@ -11,10 +11,7 @@ export type UpdateIssueFn = (row: IssueRow) => Promise> export type DeleteIssueFn = (row: IssueRow) => Promise> export type InsertIssuesFn = (...rows: GeneratedIssueRow[]) => Promise export type ClearIssuesShapeFn = (handle?: string) => Promise -export type ClearShapeFn = ( - table: string, - handle?: string -) => Promise +export type ClearShapeFn = (table: string, handle?: string) => Promise export const testWithDbClient = test.extend<{ dbClient: Client @@ -53,9 +50,7 @@ export const testWithDbClient = test.extend<{ `DELETE ${baseUrl}/v1/shape?table=${table}` ) ) - throw new Error( - `Could not delete shape ${table} with handle ${handle}` - ) + throw new Error(`Could not delete shape ${table} with handle ${handle}`) } }) },