From 19c490bbea0faf6ec25fba46603c26088c39ce96 Mon Sep 17 00:00:00 2001
From: cofin Telemetry Sports Stok
-
-
To mitigate this, the sync_to_thread
parameter can be set to True
, which
-will result in the function being run in a thread pool. Should the function be
-non-blocking, sync_to_thread
should be set to False
instead.
If a synchronous function is non-blocking, setting sync_to_thread
to False
+will tell Litestar that the user is sure about its behavior
+and the function can be treated as non-blocking.
If a synchronous function is passed, without setting an explicit sync_to_thread
value, a warning will be raised.
Install PDM:
- -Install uv:
Run make install
to create a virtual environment
-and install the required development dependencies or run the PDM installation command manually:
pdm install
-
If you’re working on the documentation and need to build it locally, install the extra dependencies with
-make docs-install
or:
pdm install -G:docs
-
Install pre-commit:
- -Install our pre-commit hooks. by running make install
or:
pre-commit install --install-hooks
+and install the required development dependencies or run the uv sync command manually:
+
+Installing the documentation dependencies#
+uv install
@@ -1658,14 +1579,13 @@ Setting up the environment
Tip
-Many modern IDEs like PyCharm or VS Code will enable the PDM-managed virtualenv that is created in step 2
+
Many modern IDEs like PyCharm or VS Code will enable the uv-managed virtualenv that is created in step 2
for you automatically.
If your IDE / editor does not offer this functionality, then you will need to manually activate the virtualenv
yourself. Otherwise you may encounter errors or unexpected behaviour when trying to run the commands referenced
within this document.
-To activate the virtualenv manually, please consult PDM’s documentation on
-working with virtual environments.
-A simpler alternative is using the PDM plugin pdm-shell.
+To activate the virtualenv manually, please consult uv’s documentation on
+working with virtual environments.
The rest of this document will assume this environment is active wherever commands are referenced.
To run or build the docs locally, you need to first install the required dependencies:
-pdm install -G:docs
+You can serve the documentation locally with
+
+Serving the documentation locally#
+make docs-serve
-Then you can serve the documentation with our helpful Makefile targets:
-
-Serving the documentation locally#
-make docs-serve
+or build it with
+
+Serving the documentation locally#
+make docs
@@ -1808,8 +1728,8 @@ Adding examples/tests/examples that tests the aspects of the example that it demonstrates
Reference the example in the rst file with an external reference code block, e.g.
-
-An example of how to use literal includes of external files#
+
+An example of how to use literal includes of external files#
.. literalinclude:: /examples/test_thing.py
:language: python
:caption: All includes should have a descriptive caption
@@ -1833,8 +1753,8 @@ Automatically execute examplescurl command that’s being invoked. The URL is built automatically, so the
specified path can just be a path relative to the app.
In practice, this looks like the following:
-
-An example of how to use the automatic example runner#
+
+An example of how to use the automatic example runner#
from typing import Dict
from litestar import Litestar, get
@@ -1853,8 +1773,8 @@ Automatically execute examples
-An example of how to use the automatic example runner#
+
+An example of how to use the automatic example runner#
from typing import Dict
from litestar import Litestar, get
@@ -1884,16 +1804,16 @@ Automatically execute examples#
Checkout the main
branch:
-
-Checking out the main branch of the litestar
repository#
+
+Checking out the main branch of the litestar
repository#
git checkout main
Run the release preparation script:
-
-Preparing a new release#
+
+Preparing a new release#
python tools/prepare_release.py <new version number> --update-version --create-draft-release
@@ -1909,8 +1829,8 @@ Creating a New Release
Review the generated changelog entry in 2.x Changelog to ensure it looks correct.
Commit the changes to main
:
-
-Committing the changes to the main branch#
+
+Committing the changes to the main branch#
git commit -am "chore(release): prepare release vX.Y.Z"
@@ -1918,16 +1838,16 @@ Creating a New ReleaseReplace vX.Y.Z
with the actual version number.
Create a new branch for the release:
-
-Creating a new branch for the release#
+
+Creating a new branch for the release#
git checkout -b vX.Y.Z
Push the changes to a vX.Y.Z
branch:
-
-Pushing the changes to the vX.Y.Z
branch#
+
+Pushing the changes to the vX.Y.Z
branch#
git push origin vX.Y.Z
diff --git a/3803/genindex.html b/3803/genindex.html
index 5e7394cf0..b213d770c 100644
--- a/3803/genindex.html
+++ b/3803/genindex.html
@@ -46,8 +46,14 @@
-
-
+
+
+
+
+
@@ -1356,8 +1362,12 @@
- pagination
- params
- plugins
@@ -1395,6 +1405,7 @@
- memory
- redis
- registry
+- valkey
- template
@@ -1541,8 +1552,6 @@ Symbols
- **kwargs (litestar.background_tasks.BackgroundTask parameter)
- - (litestar.contrib.htmx.response.HTMXTemplate parameter)
-
- (litestar.datastructures.Cookie.to_header parameter)
- (litestar.dto.data_structures.DTOData.create_instance parameter)
@@ -1570,6 +1579,8 @@
Symbols
- (litestar.handlers.post parameter)
- (litestar.handlers.put parameter)
+
+ - (litestar.handlers.websocket_stream parameter)
- (litestar.handlers.WebsocketListenerRouteHandler parameter)
@@ -1588,6 +1599,8 @@ Symbols
- (litestar.openapi.plugins.SwaggerRenderPlugin parameter)
- (litestar.openapi.plugins.YamlRenderPlugin parameter)
+
+ - (litestar.plugins.htmx.HTMXTemplate parameter)
- (litestar.repository.abc.AbstractAsyncRepository.count parameter)
@@ -1989,10 +2002,10 @@ Symbols
_
G
- generate_field_definitions() (litestar.contrib.piccolo.PiccoloDTO class method)
- generate_session_id() (litestar.middleware.session.server_side.ServerSideSessionBackend method)
@@ -5551,16 +5652,18 @@
G
- (litestar.stores.redis.RedisStore method)
- (litestar.stores.registry.StoreRegistry method)
+
+ - (litestar.stores.valkey.ValkeyStore method)
- (litestar.testing.RequestFactory method)
- get_asyncio_executor() (in module litestar.concurrency)
- - get_config_for_model_type() (litestar.contrib.pydantic.PydanticDTO class method)
+
- get_config_for_model_type() (litestar.dto.base_dto.AbstractDTO class method)
- get_cookie_key_set() (litestar.middleware.session.client_side.ClientSideSessionBackend method)
@@ -5643,10 +5746,10 @@
G
- get_response_handler() (litestar.handlers.HTTPRouteHandler method)
-
-
+
- get_route_handlers() (litestar.controller.Controller method)
- get_schema_from_request() (litestar.openapi.OpenAPIController static method)
@@ -5699,10 +5802,10 @@
G
- get_type_hints() (litestar.typing.FieldDefinition method)
- - get_typed_init() (litestar.contrib.pydantic.PydanticDIPlugin method)
+
- get_typed_init() (litestar.plugins.DIPlugin method)
- getall() (litestar.datastructures.MutableScopeHeaders method)
@@ -5710,6 +5813,8 @@
G
- gid (litestar.types.FileInfo attribute)
- google_fonts (litestar.openapi.plugins.RedocRenderPlugin parameter)
+
+ - group_path (litestar.plugins.prometheus.PrometheusConfig attribute)
- gt (litestar.params.Body parameter)
@@ -5745,6 +5850,8 @@
G
- (litestar.handlers.post parameter)
- (litestar.handlers.put parameter)
+
+ - (litestar.handlers.websocket_stream parameter)
- (litestar.handlers.WebsocketListener attribute)
@@ -5753,6 +5860,8 @@ G
- (litestar.handlers.WebsocketRouteHandler parameter)
- (litestar.openapi.OpenAPIController attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.router.Router parameter)
@@ -5796,7 +5905,11 @@ H
- handle_client_shutdown (litestar.stores.redis.RedisStore parameter)
+
+
- handler (litestar.app.HandlerIndex attribute)
- handler_id (litestar.dto.base_dto.AbstractDTO.create_for_field_definition parameter)
@@ -5833,10 +5946,10 @@
H
- has_path() (litestar.openapi.plugins.OpenAPIRenderPlugin method)
- - has_typed_init() (litestar.contrib.pydantic.PydanticDIPlugin method)
+
- has_typed_init() (litestar.plugins.DIPlugin method)
- head (class in litestar.handlers)
@@ -5961,7 +6074,7 @@
H
- (litestar.channels.plugin.ChannelsPlugin.subscribe parameter)
- - history_restore_request (litestar.contrib.htmx.request.HTMXDetails property)
+
- history_restore_request (litestar.plugins.htmx.HTMXDetails property)
- host (litestar.datastructures.Address attribute)
@@ -5973,22 +6086,30 @@ H
- (litestar.static_files.StaticFilesConfig attribute)
- - HTMXDetails (class in litestar.contrib.htmx.request)
+
- HTMXConfig (class in litestar.plugins.htmx)
+
+ - HTMXDetails (class in litestar.plugins.htmx)
- - HTMXRequest (class in litestar.contrib.htmx.request)
+
- HTMXHeaders (class in litestar.plugins.htmx)
- - HTMXTemplate (class in litestar.contrib.htmx.response)
+
- HtmxHeaderType (class in litestar.plugins.htmx)
+
+ - HTMXPlugin (class in litestar.plugins.htmx)
+
+ - HTMXRequest (class in litestar.plugins.htmx)
+
+ - HTMXTemplate (class in litestar.plugins.htmx)
- HTTP_100_CONTINUE (in module litestar.status_codes)
+
+
-
- HTTP_200_OK (in module litestar.status_codes)
- HTTP_201_CREATED (in module litestar.status_codes)
@@ -6167,15 +6288,15 @@
H
- HTTPRouteHandler (class in litestar.handlers)
- - HTTPScope (in module litestar.types)
+
- HTTPScope (class in litestar.types)
- HTTPSendMessage (in module litestar.types)
- HTTPServerPushEvent (class in litestar.types)
- - HXLocation (class in litestar.contrib.htmx.response)
+
- HXLocation (class in litestar.plugins.htmx)
- - HXStopPolling (class in litestar.contrib.htmx.response)
+
- HXStopPolling (class in litestar.plugins.htmx)
@@ -6227,12 +6348,12 @@ I
- ImproperlyConfiguredException
- - include (litestar.contrib.pydantic.PydanticInitPlugin parameter)
+
- include (litestar.dto.config.DTOConfig attribute)
- include_compressed_body (litestar.middleware.logging.LoggingMiddlewareConfig attribute)
@@ -6263,6 +6384,8 @@
I
- (litestar.handlers.put parameter)
- (litestar.openapi.OpenAPIController attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.router.Router parameter)
@@ -6320,6 +6443,8 @@ I
- is_annotated (litestar.typing.FieldDefinition property)
- is_any (litestar.typing.FieldDefinition property)
+
+ - is_attrs_class() (in module litestar.plugins.attrs)
- is_collection (litestar.typing.FieldDefinition property)
@@ -6327,10 +6452,10 @@ I
- is_constrained (litestar.params.KwargDefinition property)
- - is_constrained_field() (litestar.contrib.pydantic.PydanticSchemaPlugin static method)
+
- is_constrained_field() (litestar.plugins.OpenAPISchemaPlugin static method)
- is_dataclass_type (litestar.typing.FieldDefinition property)
@@ -6395,12 +6520,14 @@
I
- is_plugin_supported_field() (litestar.plugins.OpenAPISchemaPlugin method)
- - is_plugin_supported_type() (litestar.contrib.pydantic.PydanticSchemaPlugin static method)
+
- is_plugin_supported_type() (litestar.plugins.attrs.AttrsSchemaPlugin static method)
- is_required (litestar.typing.FieldDefinition property)
@@ -6425,10 +6552,10 @@
I
- is_typeddict_type (litestar.typing.FieldDefinition property)
- - is_undefined_sentinel() (litestar.contrib.pydantic.PydanticSchemaPlugin static method)
+
- is_undefined_sentinel() (litestar.plugins.OpenAPISchemaPlugin static method)
- is_union (litestar.typing.FieldDefinition property)
@@ -6619,6 +6746,12 @@
K
- (litestar.stores.redis.RedisStore.get parameter)
- (litestar.stores.redis.RedisStore.set parameter)
+
+ - (litestar.stores.valkey.ValkeyStore.delete parameter)
+
+ - (litestar.stores.valkey.ValkeyStore.get parameter)
+
+ - (litestar.stores.valkey.ValkeyStore.set parameter)
- (litestar.template.TemplateEngineProtocol.register_template_callable parameter)
@@ -6655,6 +6788,8 @@ K
L
Q
- (litestar.datastructures.URL property)
+
+ - (litestar.response.Redirect parameter)
+
+ - (litestar.response.redirect.Redirect parameter)
- (litestar.testing.RequestFactory.delete parameter)
@@ -9158,9 +9407,9 @@ R
- raw (litestar.typing.FieldDefinition attribute)
- - re_swap (litestar.contrib.htmx.response.HTMXTemplate parameter)
+
- re_swap (litestar.plugins.htmx.HTMXTemplate parameter)
- - re_target (litestar.contrib.htmx.response.HTMXTemplate parameter)
+
- re_target (litestar.plugins.htmx.HTMXTemplate parameter)
- read() (litestar.datastructures.UploadFile method)
@@ -9388,11 +9637,13 @@ R
- (litestar.stores.memory.MemoryStore.get parameter)
- (litestar.stores.redis.RedisStore.get parameter)
+
+ - (litestar.stores.valkey.ValkeyStore.get parameter)
- renew_on_access (litestar.middleware.session.server_side.ServerSideSessionConfig attribute)
- - ReplaceUrl (class in litestar.contrib.htmx.response)
+
- ReplaceUrl (class in litestar.plugins.htmx)
- Request (class in litestar.connection)
@@ -9500,6 +9751,8 @@ R
- (litestar.handlers.put parameter)
- (litestar.openapi.OpenAPIController attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.router.Router parameter)
@@ -9516,6 +9769,28 @@ R
- request_log_message (litestar.middleware.logging.LoggingMiddlewareConfig attribute)
+ - request_max_body_size (litestar.app.Litestar parameter)
+
+
+ - (litestar.config.app.AppConfig attribute)
+
+ - (litestar.controller.Controller attribute)
+
+ - (litestar.handlers.HTTPRouteHandler parameter)
+
+ - (litestar.handlers.patch parameter)
+
+ - (litestar.handlers.post parameter)
+
+ - (litestar.handlers.put parameter)
+
+ - (litestar.openapi.OpenAPIController attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
+
+ - (litestar.router.Router parameter)
+
+
- request_media_type (litestar.testing.RequestFactory.patch parameter)
@@ -9546,6 +9821,8 @@ R
- (litestar.security.jwt.Token.decode parameter)
+
+
- required (litestar.datastructures.ResponseHeader attribute)
@@ -9562,8 +9839,6 @@ R
- (litestar.params.ParameterKwarg attribute)
-
-
- resolve_after_response() (litestar.handlers.HTTPRouteHandler method)
- resolve_before_request() (litestar.handlers.HTTPRouteHandler method)
@@ -9666,6 +9941,8 @@
R
- (litestar.handlers.put parameter)
- (litestar.openapi.OpenAPIController attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.router.Router parameter)
@@ -9696,6 +9973,8 @@ R
- (litestar.handlers.put parameter)
- (litestar.openapi.OpenAPIController attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.router.Router parameter)
@@ -9744,6 +10023,8 @@ R
- (litestar.handlers.put parameter)
- (litestar.openapi.OpenAPIController attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.router.Router parameter)
@@ -9818,9 +10099,9 @@ R
- (litestar.pagination.CursorPagination attribute)
- - Reswap (class in litestar.contrib.htmx.response)
+
- Reswap (class in litestar.plugins.htmx)
- - Retarget (class in litestar.contrib.htmx.response)
+
- Retarget (class in litestar.plugins.htmx)
- retrieve_cached_history() (litestar.middleware.rate_limit.RateLimitMiddleware method)
@@ -9872,12 +10153,16 @@ R
- (litestar.handlers.post parameter)
- (litestar.handlers.put parameter)
+
+ - (litestar.handlers.websocket_stream parameter)
- (litestar.handlers.WebsocketListener attribute)
- (litestar.handlers.WebsocketListenerRouteHandler parameter)
- (litestar.openapi.OpenAPIController attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.router.Router parameter)
@@ -10041,14 +10326,16 @@ S
- (litestar.params.Parameter parameter)
- - schema_creator (litestar.contrib.pydantic.PydanticSchemaPlugin.for_pydantic_model parameter)
+
- schema_creator (litestar.dto.base_dto.AbstractDTO.create_openapi_schema parameter)
- - (litestar.contrib.pydantic.PydanticSchemaPlugin.to_openapi_schema parameter)
-
- - (litestar.dto.base_dto.AbstractDTO.create_openapi_schema parameter)
+
- (litestar.plugins.attrs.AttrsSchemaPlugin.to_openapi_schema parameter)
- (litestar.plugins.OpenAPISchemaPluginProtocol.to_openapi_schema parameter)
+
+ - (litestar.plugins.pydantic.PydanticSchemaPlugin.for_pydantic_model parameter)
+
+ - (litestar.plugins.pydantic.PydanticSchemaPlugin.to_openapi_schema parameter)
- schema_else (litestar.openapi.spec.Schema attribute)
@@ -10165,6 +10452,8 @@
S
- (litestar.middleware.session.base.BaseBackendConfig attribute)
- (litestar.openapi.spec.OAuthFlow attribute)
+
+ - (litestar.plugins.prometheus.PrometheusConfig attribute)
- (litestar.security.AbstractSecurityConfig attribute)
@@ -10259,6 +10548,8 @@ S
- (litestar.openapi.spec.OpenAPI attribute)
- (litestar.openapi.spec.Operation attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.router.Router parameter)
@@ -10368,6 +10659,8 @@ S
- send_data() (litestar.connection.WebSocket method)
+
+ - send_handler (litestar.handlers.send_websocket_stream parameter)
- send_json() (litestar.connection.WebSocket method)
@@ -10403,6 +10696,8 @@
S
- (litestar.security.jwt.OAuth2PasswordBearerAuth.login parameter)
+ - send_websocket_stream() (in module litestar.handlers)
+
- send_wrapper() (litestar.connection.WebSocket method)
- SerializationException
@@ -10538,12 +10833,14 @@
S
- (litestar.stores.memory.MemoryStore method)
- (litestar.stores.redis.RedisStore method)
+
+ - (litestar.stores.valkey.ValkeyStore method)
-
-
+
- set_cached_history() (litestar.middleware.rate_limit.RateLimitMiddleware method)
- set_cookie() (litestar.response.base.Response method)
@@ -10579,6 +10876,8 @@
S
- set_rate_limit_headers (litestar.middleware.rate_limit.RateLimitConfig attribute)
+
+ - set_request_class_globally (litestar.plugins.htmx.HTMXConfig attribute)
- set_session() (litestar.connection.ASGIConnection method)
@@ -10626,6 +10925,8 @@ S
- (litestar.handlers.post parameter)
- (litestar.handlers.put parameter)
+
+ - (litestar.handlers.websocket_stream parameter)
- (litestar.handlers.WebsocketListener attribute)
@@ -10634,6 +10935,8 @@ S
- (litestar.handlers.WebsocketRouteHandler parameter)
- (litestar.openapi.OpenAPIController attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.router.Router parameter)
@@ -10652,6 +10955,8 @@ S
- (litestar.handlers.BaseRouteHandler parameter)
- (litestar.openapi.OpenAPIController attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.router.Router parameter)
@@ -10680,8 +10985,12 @@ S
- (litestar.params.DependencyKwarg attribute)
- - socket (litestar.handlers.WebsocketListenerRouteHandler.default_connection_lifespan parameter)
+
- socket (litestar.handlers.send_websocket_stream parameter)
+
+
- stale_while_revalidate (litestar.datastructures.CacheControlHeader attribute)
- standalone_preset_js_url (litestar.openapi.plugins.SwaggerRenderPlugin parameter)
@@ -10902,6 +11211,8 @@
S
- (class in litestar.response.streaming)
+ - stream (litestar.handlers.send_websocket_stream parameter)
+
- stream() (litestar.connection.Request method)
- stream_events() (litestar.channels.backends.asyncpg.AsyncPgChannelsBackend method)
@@ -10973,6 +11284,10 @@
S
- sub (litestar.security.jwt.Token attribute)
+
+ - subprocess_async_client() (in module litestar.testing)
+
+ - subprocess_sync_client() (in module litestar.testing)
- subprotocols (litestar.connection.WebSocket.accept parameter)
@@ -11110,6 +11425,8 @@
T
- (litestar.openapi.spec.OpenAPI attribute)
- (litestar.openapi.spec.Operation attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.router.Router parameter)
@@ -11120,7 +11437,7 @@ T
- (litestar.testing.create_test_client parameter)
- - target (litestar.contrib.htmx.request.HTMXDetails property)
+
- target (litestar.plugins.htmx.HTMXDetails property)
- target_type (litestar.serialization.decode_json parameter)
@@ -11282,12 +11599,14 @@
T
- to_header_list() (litestar.datastructures.Headers method)
- - to_openapi_schema() (litestar.contrib.pydantic.PydanticSchemaPlugin method)
+
- to_openapi_schema() (litestar.openapi.OpenAPIConfig method)
- to_response() (litestar.exceptions.responses.ExceptionResponseContent method)
@@ -11420,15 +11739,17 @@
T
- tracer_provider (litestar.contrib.opentelemetry.OpenTelemetryConfig attribute)
- - trigger (litestar.contrib.htmx.request.HTMXDetails property)
+
- trigger (litestar.plugins.htmx.HTMXDetails property)
+
+ - trigger_event (litestar.plugins.htmx.HTMXTemplate parameter)
- - trigger_event (litestar.contrib.htmx.response.HTMXTemplate parameter)
+
- trigger_name (litestar.plugins.htmx.HTMXDetails property)
- - trigger_name (litestar.contrib.htmx.request.HTMXDetails property)
+
- TriggerEvent (class in litestar.plugins.htmx)
- - TriggerEvent (class in litestar.contrib.htmx.response)
+
- TriggerEventType (class in litestar.plugins.htmx)
- - triggering_event (litestar.contrib.htmx.request.HTMXDetails property)
+
- triggering_event (litestar.plugins.htmx.HTMXDetails property)
- type (litestar.openapi.spec.Schema attribute)
@@ -11472,6 +11793,8 @@
T
- (litestar.handlers.WebsocketListenerRouteHandler parameter)
- (litestar.openapi.OpenAPIController attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.router.Router parameter)
@@ -11508,6 +11831,8 @@ T
- (litestar.handlers.post parameter)
- (litestar.handlers.put parameter)
+
+ - (litestar.handlers.websocket_stream parameter)
- (litestar.handlers.WebsocketListener attribute)
@@ -11516,6 +11841,8 @@ T
- (litestar.handlers.WebsocketRouteHandler parameter)
- (litestar.openapi.OpenAPIController attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.response.base.Response parameter)
@@ -11634,10 +11961,10 @@ U
- (litestar.repository.abc.AbstractSyncRepository method)
-
-
+
- url (litestar.connection.ASGIConnection property)
@@ -11652,6 +11979,8 @@ U
- (litestar.openapi.spec.Server attribute)
- (litestar.stores.redis.RedisStore.with_client parameter)
+
+ - (litestar.stores.valkey.ValkeyStore.with_client parameter)
- (litestar.testing.AsyncTestClient.websocket_connect parameter)
@@ -11692,6 +12021,8 @@ U
@@ -11704,20 +12035,22 @@ V
- validate_route_handlers() (litestar.controller.Controller method)
- - validate_strict (litestar.contrib.pydantic.PydanticInitPlugin parameter)
+
- validate_strict (litestar.plugins.pydantic.PydanticInitPlugin parameter)
- ValidationException
+
+ - valkey (litestar.stores.valkey.ValkeyStore parameter)
+
+ - ValkeyStore (class in litestar.stores.valkey)
- value (litestar.app.Litestar.register parameter)
- (litestar.connection.ASGIConnection.set_session parameter)
-
- - (litestar.contrib.pydantic.PydanticSchemaPlugin.is_plugin_supported_type parameter)
- (litestar.datastructures.Cookie attribute)
@@ -11736,10 +12069,14 @@ V
- (litestar.middleware.logging.LoggingMiddlewareConfig.__post_init__ parameter)
- (litestar.openapi.spec.Example attribute)
+
+ - (litestar.plugins.attrs.AttrsSchemaPlugin.is_plugin_supported_type parameter)
- (litestar.plugins.OpenAPISchemaPlugin.is_plugin_supported_type parameter)
- (litestar.plugins.OpenAPISchemaPluginProtocol.is_plugin_supported_type parameter)
+
+ - (litestar.plugins.pydantic.PydanticSchemaPlugin.is_plugin_supported_type parameter)
- (litestar.response.base.Response.set_cookie parameter)
@@ -11770,6 +12107,8 @@ V
- (litestar.stores.memory.MemoryStore.set parameter)
- (litestar.stores.redis.RedisStore.set parameter)
+
+ - (litestar.stores.valkey.ValkeyStore.set parameter)
@@ -11838,6 +12177,12 @@ W
- warn() (litestar.types.Logger method)
+ - warn_on_data_discard (litestar.handlers.send_websocket_stream parameter)
+
+
- warning() (litestar.types.Logger method)
- webhooks (litestar.openapi.OpenAPIConfig attribute)
@@ -11856,6 +12201,8 @@
W
- (litestar.config.app.AppConfig attribute)
- (litestar.controller.Controller attribute)
+
+ - (litestar.handlers.websocket_stream parameter)
- (litestar.handlers.WebsocketListener attribute)
@@ -11864,6 +12211,8 @@ W
- (litestar.handlers.WebsocketRouteHandler parameter)
- (litestar.openapi.OpenAPIController attribute)
+
+ - (litestar.plugins.prometheus.PrometheusController attribute)
- (litestar.router.Router parameter)
@@ -11879,6 +12228,8 @@ W
- websocket_listener (in module litestar.handlers)
+
+ - websocket_stream() (in module litestar.handlers)
- WebSocketAcceptEvent (class in litestar.types)
@@ -11910,7 +12261,7 @@ W
- - WebSocketScope (in module litestar.types)
+
- WebSocketScope (class in litestar.types)
- WebSocketSendEvent (class in litestar.types)
@@ -11919,17 +12270,29 @@ W
- WebSocketTestSession (class in litestar.testing)
- with_client() (litestar.stores.redis.RedisStore class method)
+
+
- with_namespace() (litestar.stores.base.NamespacedStore method)
- with_replacements() (litestar.datastructures.URL method)
+ - workdir (litestar.testing.subprocess_async_client parameter)
+
+
- wrap_in_error_handler() (litestar.events.EventListener static method)
- wrapped (litestar.openapi.spec.XML attribute)
diff --git a/3803/index.html b/3803/index.html
index fd0fbe289..c641b58c4 100644
--- a/3803/index.html
+++ b/3803/index.html
@@ -1360,8 +1360,12 @@
- pagination
- params
- plugins
@@ -1399,6 +1403,7 @@
- memory
- redis
- registry
+- valkey
- template
@@ -1640,12 +1645,6 @@ SponsorsTelemetry Sports
-
-
-
-
- Stok
-
We invite organizations and individuals to join our sponsorship program.
By becoming a sponsor on Polar (preferred), or other platforms like GitHub
and Open Collective, you can play a pivotal role in our project’s growth.
diff --git a/3803/migration/fastapi.html b/3803/migration/fastapi.html
index eb24c24bc..0b29e54d8 100644
--- a/3803/migration/fastapi.html
+++ b/3803/migration/fastapi.html
@@ -1361,8 +1361,12 @@
- pagination
- params
- plugins
@@ -1400,6 +1404,7 @@
- memory
- redis
- registry
+- valkey
- template
diff --git a/3803/migration/flask.html b/3803/migration/flask.html
index 513f6dc9c..a51dee3e4 100644
--- a/3803/migration/flask.html
+++ b/3803/migration/flask.html
@@ -1361,8 +1361,12 @@
- pagination
- params
- plugins
@@ -1400,6 +1404,7 @@
- memory
- redis
- registry
+- valkey
- template
diff --git a/3803/migration/index.html b/3803/migration/index.html
index d06eaab78..becbdf5fa 100644
--- a/3803/migration/index.html
+++ b/3803/migration/index.html
@@ -1357,8 +1357,12 @@
- pagination
- params
- plugins
@@ -1396,6 +1400,7 @@
- memory
- redis
- registry
+- valkey
- template
diff --git a/3803/objects.inv b/3803/objects.inv
index 4c69da7e50672008c1b59faec105f91a12cc1807..faa758c14d7b29bdd11cea9f94621ee524d3121c 100644
GIT binary patch
literal 60377
zcmV(^K-Iq^AX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkRX>?_C
zbYXG|BOq2~a&u{KZaN?eBOp|0Wgv28ZDDC{WMy(7Z)PBLXlZjGW@&6?AZc?TV{dJ6
za%FRKWn>_Ab7^j8AbM@8EAq~rzefL+1%s;7-^=EJXpV8MYu5aF5e*W<2-QC}O
zy1c*juI@g)yZu$rLcj38dppHCfxP#VFlO0p60)!TE$V;w;;H^cF#Mv(qHS3)6HXMe
zq=r`&|{q4`C(LfY?LcwXSgvFBBfmK9HFXiDHWk@<)GB4YuIo|ynve_;i$
zAWLQ*q(?B3C7~rSN}|H1;@BZ7?7rRJjGygutDBKw?3p)fFA8D6FE7^R+hys&3({m4
z?agaUg0w~Jk;X;av%+gE3U3j-Gke=tFX1fng3cn_Vz+qXLdVgLGjUOkqH!ANx6tsi^=wc^fBwT3#!P`L$-4!q2M?CqFelo{r+
z>`OljA*3h?;xc4>T#`+{B~%`c>{)ri63_#Q(>)J`_Q0Ndh(g|6xJLvTJ`QDEMEvK%
z<2L%>RX@d1<5$|kdE@4PuH0M@E`KVEFnvi-IR0x<9wD^Goxwfm^a!c7?)y20Ry;vC
z;nw310P3wBk5@;;K;XgWzIYnGdU^CG!+>jF((BwJQ1k1-xH@QwY5E1^
zE_BQ%=7*p*o-sabCLYKW$kbegTd|}%>A
zyy2RaxVRMm-|w%Q3x4S{i>EDaMc7Jlt(}l+SMyYn@SI=IAwNneokPA)K)F^wmfJYW
zpUxqj7a8*pUX@$V&r*PLn+I96W#Wguc?E9?|a
z%!9q6rbVz5)HMQjYG(c3Qd7IH+3A_|Ze_&-JG9MTrE}Mp>vZqt8y~Cx47<6kY9XiZ
zn4pABEDcKA#O5HiHLVXyTGtMNb-P6t&Bya$g|nhm>srrH3^N-IQ`fegC}k77t)YF)
zUxQR5vTUx`vEA)g?#2Jck>xSf{1GP+wU
zH~lw{89RDO>NV}TS|a4GQ1|6_Q*K?hy@8_R7C6*4890IRCIcr}UUT3Cs-MpWOqRo~
zC73M2H)s#E-5a2^nR|mQfVO`D6gP2itmHRUb-Nq~28xcyfuZ&;F7qePkK=QQJ0FCG
z^3DgLQ+bzz&``a5%j)RW<|Y@5__OqDbXZ(~>7r0ln>b$~&M-Vrmc#AvJXwTqV|ZRF
zT2aL3Du+uqVJLkDH(^wOGmg_VZbJQTNjKYfBfqz@;1x7qQwQHyztT{Z{RvZky^h;!
zr!FWYMz54nNOW5wY@;IcvsbUZ-fP~qRxl`*+Nf5W*zm&aU!97typKSjSiNjk-!i?f;+q^OIo^=kmmtLQiIqk01gc^?15e!{
zwHK}g54?IQ)zq98b9~`R?Nc$tGgYgCsDV%FPRXHxofoHXoywk;wSdbC9c$9pqlV84
zkZ@R+6RN!dAk=;Fxue@yv)W^`tJA*F7n?!(7us|#L>bsh%^bxOk6m-uD8EJ2~%ays}}~M)MH;+Q1Zb`uygsr9&p-0th(%5w!}MmV);jEKwFMTvf|ni(?+be+RH`;srL3%%mlsc@
zXEPQQ7BaJY53Ba8wDH99F*2n3NnNY5@YbJ&(
z@0p-Axk(o7hnkgKl@#M9|uuH6g6i-8CWD@eZ3X
zsJu1<0iD=s(;RyvZCw9O+PB^;%Q8i~xPH9zuI{dHe!cmGFYCp-&ySxUZV14hm#`P(
zq>dDE+vUF`(8X2%vrRs15owzrTZUVQkV<%K)3BnFr9~Wh`#+jjuAoioo5Le9^ctOUhlO6pyx2v#Iv~|EX
zjjeATj!m;@A0=MK_VtOIcs9DoENsDjsi#*)Y0}x(V~Pm4$K0rSEkXP{I0OSx=mA`6
zBY3#yw_6oe{dHjxk*1JHf%$ueYbfHC#W>nO74TM)M?4Z{_Sihz
zS&k5#aB;PHcxN?23?bGd#0Xbs^1LuT_*OpdH1??|j%gCV!olq^08pr1+I$9@iws;;
z;7eO24S`sDuX-Bj)yLF|*=sv*dW5h0H@GF_{*D2>k1>^T7tCV5XgF11XOxDli>u44
z_cz|VyN8?KZXV1m)QI@d{CXvRv$1^ZTw7zPpiocFbQkWTc>Vw$fLzFSei;`Ych92C
zx0`QMkP~ZYtCV)#N!wLvB)2B^DcF`#98%U_bu+LkYoA8l2u3$Bx4af2FgmBt%#TZ0
zP%I`|n+q0gMtjZW=GWV+0dulP50Gjsgwp${buF+Nw6ku|8W3I)h2fOIiYG9d3U!B*
z0;`2!kZMl)!`5;GH8}7QBe;A-p`C`x8IC{&jdL9dRB0+Q2bj!<-Yqxxf*T0R{cUl6
zAXaLkZt+5_djyqCyuBe7&Wq(gu=0te&7kuAky{)57S$k7H+jhS$7bplP&l-gIpTuc
z%P|$=SGLe<^O~dBQj|ZRLo|EJur;?WKE`;i%49zO#fx@cnfT9s6#Ls4_$ca){4A^L
zcedSB>-6lbXNN)A&mP!YP#~_`yhVyftscspKwfTnqbSlKjiD+*oLYC25v|+!WqB7V
zJ2-E$ja^6Ks|`e!b`>-ywuL@`YornYjBgV}(jsF9z8;Dm`cBB8!S9p{8UA`~Qv=@i
zwO~1{dRr>AbI4Gt#@1>;yNC>>E;zcQwA_MyE#T0X%s(DkM#UxU<(1=w?K3@6@vJ?7
zLiO%NyU`X>1={gDB5B3Q0;KgqWdbSzsNw2}q!lj_Lxo2pNbHED4?z|ndjjZDU4~-a;Oc&rg&e1u
zV{N&XFs;+Q1v!;x(bno2Lp3pnC%*MnUZ66)#zb8DLv`uWDiaylZ<}OI{3A;K@K;FH
zHHxT<|0Di=Y+kj!N%m2~X46<>x*k>`tz{`tE%{=}bCjjYp;^%3M5x>5Qd~PO!EDdA
zEJU?kWb-GoJC#Mcjp*AKvsb6HEXCUaq}rNpd4Fh>7OQ^a4V8Z_2}tiQV|%fWPv-S6
zy8CgL-zIsQ^ODlpOXs=glg1@i23>IyvEn-Cm(}hAQLRfVeTFz`-7Y70cT&IoP21@o
z{4eRsfFv$iACIc5KJtGaC8IV!4)stqn(FYQ%^g+jdX3sDbX_AS(5f2^x{hjUfAY_s
zuIQa5d!dn0@sZ4!R4r6?TDmqAr|FmS=uYXR5%&e4cs@Gb5kSGvH8NDz_lxX=w4EYD
zIb)9quBYV=k*OQ_LdIoLcZ3iU+FlS+RNDnw5f}S07A$5QkiD+BLW679eWKyzcl@`<
z_P3Q6(dN|5WK@SHoM8P*M!S!*_rymFd42fos%xrZwEOv;sT?ZrveHN@?HWTQU1o7E
z(kZU>Yg6D_P%M3WjzY)EgH3wp)^?JKD(tKS)~?pGcw#$dFJy%ui5B*?$o!y4GiTOK
z;ZO&(BFmopg8|NF$3#WDZt1t&Z_UbT*FP}_@Nv-MNe9naWrySGd>Ptk{HPFxxhP1#
znICys7Eggj%Q$@4>W4T}YDz83qkX8&%i@cU@f$@s1LxbQeDAsGeNSt7`|(xV5>nLG
zyzJ_oGzUj6c3z4iHyRV=J4Qi}#%n3>=Bo7wuf6cT{{Q;%ZrLggz>35R?&z?f@DhF@
z3%y;$;&8<-pk(^@?f5U;;o1rN5Us3UH!s0n9E%}B`>|ebf4{GxpA=EB_TZb#)}MU-
zpV*JZIU}#t@{JX4fAtU5VhbTWaOLi2?cku+{h*c`OFKm~GfHQ>#(ehIhEQ5tmh
zi0VgcnUWRG*V096oQI{0RzJZ?m#lp9k~Vnd-~?UX>KRPhK)th)bn#-&;`GD^O!rVY
zj7b-%cOsK6UGaP(UF_OHI@-LKWYtsDBPyQHV}#B7@-B?;y5N;<40VC(XX}`f)eqRw
zS5Q6(#~iJ28jdksWrtpUxYD^ex>%)SY_y@8XW5wZ*AKMOWv`y^q776&jm3zpbR>%|
z`Pq-7Py`uNBk7Dl_ZHZREX>mC962-37AyYyr21UkF}i9#P8eUKO0csg`~Www5EUhStHdK<0hO?bBVXG9}A6`@>Z01`F^88CwE)Rou?gj
zWf<*|quqg-I(2~cedNHZf`;z38&j#nFsZ8!LB=1ukF5D@&9t>
z+HTjPuG?1rB|3Vw^udqCHmNLx-+80T!e&>3>t^=~L}p21*ST;cTxP;^Vv}%uMr>K8
z+x3R!xxdHu@Hu60E^JzcDqWzY=Dt>`5(P?X=eyl*0t}k))X+TNt&6?T%iL>sMRjoF
zlA`|>h2+3l%^VqL-e%Bmr2{FF{(
zJSKFi?J%CYJ8~p7+@9ZCIhF}lg6ME4i*~O9+UBu-gf~v9%!M=EF3fSISc=^X#HJge
z1H~lmPvfPRS~=GgDaBo%ByUgEA(lJxMj|E@#O=**r2&+Sp53%ZKE!@~b=w7wkF#d2LYhJ;@hGwIf9X=}}A2Qj0&;zDS?&6!`X=x3)r4q%kU$aA&
z2U&DnKIYm^AqwV?LbD^MLH~}XmnQKm)h(n4KccFi>YVYVRnJ!Rr=mC#*39BICst%C
zSE;5izo21-&czz}h{{CPEBwje(cu`k$sw9fTcphz_mCvQ=tLaA`{Pa5wr;f2>jEL<
z1HXCn_sHQ^@Ms3AicA%ezT-~z$1*OW>t>Wf)yDw5cyJqnUsaC?7?w_d!3%Zo%FD{g
z9)QoPP-apZHoaRyoTh2;G)8m`Z`)A&=4_MwS>BG+Mmongr<}4q<@Iy!PPHS%E1sZd
zC#QM{r=3dIzPvcf3uwLFwh2R$f#Z};)3_#d_)~wS)@c6VxzJMDyxUT3Q_SxBjv(`A
zzfIGa>e;s%;%QK8h@Bjo^ii7S4%Ebm>r6&z|7Dygzx3eX-f9___eN>yIt{UR4Y5Yd
z5?YBitwzPCH`KLGHv!L%ofcsWYdxG|@!$)Hl$X?8}=)hDWAEU2xdy3jp@%Bk#AH+7cGQR|lb-FGc>F}hkW4e)o@gA?yl^1I
z+d%r_vBR-=^+;wvC-wLT;>d}RSS)16jEOfP=!M9Z_KcOtXS_y&?5i&pD!5U}$z_gl
z8dBd(JE2A>A$IkNGV*qv7q8@xp2X^GSdg*em)C+p!%7KTZI_&GbFoAS>)F>Lo9_HM
zY~gDzVd>GcG;Nxf2k!*a3@3C#k4VxY2s%&b4(^1&KWWi9$*j@|-9aUtXpzKgk{V&-
z${kEp&1wZd)B?786v)#V+&rhi1n!
zq)Sw@(*tiO2kw7yg&bZ(BYwANQMx63bxleptccUVq2T%sVo*7S{gt44DtmTW2;!IA
z4bh~TCm|(XsHTYf1iNp`X!4O8-Ip{AY1sJpJ}NH3>*a#m^(YdsyvrZ%MGt}RdnUTz
zWzI6HHvJM6PhQ53u^+Gl$yjuv;9@kI6{Q=GW+kacq*+0-F=i8Mn$Rm!FO2dp=rOz3$r<}XRb7JJy)nPr<*XpAu$L?<$P7*e?=l?(
zHlTh7_he&)H)`aSeHP|r+f66O8=zV0Hn?@&r9G8w@BI|LUY_B5vX&*NVC$OT`&Pc!
zlO>N3;aov^ap9$9DW=%-C90Q}ip8t5F9%zeXGm2m$`d|0CY-Err8w2R
z-Q84&RHPSMpMSYIT72rM7U>V|B@5420$p5g^J+i#>&Ls9r+vayf~`JALu`;HyJ){K
zM`X(7&$eJ<2PAHWSR8sG+ld=!)>tF&U|y+hB3nQBB3{1<;-z#go&Hn}I4?wVs<;=0
zWb!Gu5&ki%j|lT=p7T({c@0m?JFnZp6q@f<*Q6OQ^MACG)oCFuW4QtlpFTM9C}dMZG2
zbA1>w6Gqh+EC*4|HN4nY9d0^+l4+|LmC#8K$i7xva4z>VT_kUOQT1+UTpe}B+ojjU
zEl3?ch;O6NE0Zrt`jXT(Dn|-5+mj-ZVgXF!W`*pyxGq(j&0BmC`7siiRSS>^sUg^K)8{y5bmg*@7+=h9V&SmeIl3xV#dz2W__<1W
zWv9`^kX)khlYqI>(b)IhTDm-jPHu6ebH-cjH-zqQnLzrTum{%zHv!zwMhc`|ZmiYp
z+2ZZ0Gc;FhDo&LLo?R&7K(F47UOf*>D?HjSN3MJN_PbIf`N5pKFnS)kn=;jL#L5b5
zXQdHuKow6}TJE1jTq-=HHh1EnXv4a2(2W;v7olF6^_A(c!FB77T7T(v``hBo*aTjK
ztC{u1i<$Rai*gv{f>kv8`kQVG^(`;9f%=lRDbGK53AMsd@eVX-2S59=+<(?#9~*}0
zt%>hn+&|p@cKLXND9gpe&E>Us_vypGA++BgZXa)OxRv+&l|X}GdRHcOI?{sEziU%J
z%K6T^4sFk^M-}pfXJ%!rg`#AadI$e_Y?gPLNgeWieq_PQFe6>HY+&RIKh{4l4lpNR
zMWW`=f|N0P+{Ps^8cx>Ly7Sv-o_O{7^0Tfld8o2r8z~7^y;byfo;Luoq&&=(qxx*V
z4E4uX>ES3=q465I5$E&GE_Rk^YM2$%xXgQB6vvPCmkdhNf7_}MA6XdrkIgKGZW+2S
zTNUB%$db$ZTdR_c8CC_l7hTk}B;A*-itxbxQ}W;2c4k_b35->-syB^H3)6ksvE~-EZbxEjz}Ea-Q!L}Z5+K#{p%4{%iTcp@
zrG;IlDvf|Rc1;Yq7WYxnKQtV();B<`Ejc!Wb$(0&x>MV(F@&{Es(s+7=W!uc7Vv_4
zEX&f&YnBQ^iabe1RP&}f-dJw5X07U!WBbe|h!&P?hK4g@YXYQnd($-`fU{bxA+C<1
zZ|10~)DmEYJLcIyUsJmdnH|nps
ziX%}c?H>fR`*e8gBd#K_dbz61tMxJq^{NOLIl+1+3RvRzkB|3MxK&$f1Pxi?N3nf%
z4yjdc2@RFD;6Y*)jk68AuVeyvSJwpW)m@LQ=%fCORDha_+e5vjQ2bi2pAv8I0(<#w
zQi#3#;*B_FBclg{D<`QATfD3n(~JBT?glN>;tDJ?F=IWo{LGmFNy?T=BO^QyS+-iAfq!YmurA{P{}O>%25T-7O>3szR(DeI-_M?ZOO
zCU$bYMfJOY_nWYz=UcG0w_nJlb~oR
zaDy{J#`Ks8Fi~4M5db$8GMBP?)log>e6ysX7Q^b5V=^2wE=5aID}!qMqg|W@uv*Df
zoG4H5K#nDrpA_#sP@n`MKmc8YABrmO2ugw)y|Ec?Z@+DXLrTr=GWWGhkxI%06rZjhd?#b
z+K6bxR9*sWL+@L)T+eu&ed%W*5j)Dg19w#mGP)SmqJRd!JdI>SPLD)2vV1V64LOhY
zi7z%u@Dz5Yv=OSdhh*Y4D(e<6mONvu%9ynF5{Mzw+EPt0mk#eRLi%k|W3<~Pir)5JY5Zt^+=x+Pi;}L7@F47nA3d&P-^kVhHvj+&5^AgtU0i~gEdFa827FckE}t$9k_L&Zd(hyNaZEgMc
zpXa-{i2;l+CBeFn>IS)Zj=YgRE*x4z!@{8xA!xudNB4J}=B>^;ASC+98@z@%TVbDx
zH3md{wiCPQlh)J9v4_@Zk^L&NG^UjJ!d|QW@0$a`31sTY+Ioyx+`15)_G_
z3kn$v#3@)*{5;5_L5Sf%YcD3l~(Ct8o7idnF5gQ)$
z2TbB+sCzIf<21*&&p6GIh4Wl_FkbEZ5{pD3l>*UlY@axrBWHe;Q`!5*L!o@8t%Nwp
zX`6?+17;s~t!?gtP$9!(a?5l4oCReT6|Y2ebmn?i
zNM(l|D}nNG@H47vQan1|MuR(fL`@W!&|j3mB=k=t+Kk<4bdE}tvR&~`qP}8zXD(IP1B~iq*
zs*(_D?odh0ej-sxW?;DJwTAYKTF=Q{+0Q#F$&7;uayiU|j*{3Qqk*X_bi4_bmJm?=R%s_}3Jh1CJq$7OQArbbzzz_?5OJE46>0Kx{eMq(U%ZEJZ
z>i;=(6k@s1Vaz^Q81fLS`bR|ETK+K@x2%4Sj95%R!zLOLunXs>*!XF?o$WE6k%>{$)f+D=^S_RssTp*$FBl
zl9jNiFjhtaV^|3b2w=xFO!Rs}g@vv%85*}vfKhI>gvLdzLntI%9UwuTiOjSe-X)fO
zlq$o(A*zH%#HSJt7Mw~(DD!~vDsEosf
zp93l`_MF5b0?#Qhg>A=%oD*Oq5ff}mNKB+D1JPlo%tpnSG7}MC$~<6nDPiqHOBsfX
zE5}q!Q2EqUomo^VzKsYgD-JZSl!?H=ate!xEM+b#v>Y&jv8Buf1eYf`OmumQg@u;`
zG&H`PBBLB+nT?AuM^s3NIb?$TkO9a~us~CWf+I~CP0^E3
zv8K$l4>n~QG}@d7Mh0PML;?I0rmj$T`H~V$NwUBIukXlURFf*f~XpA~Aud
z%)~^V10p)~9Kcbr=KzWbJ_kTx^eJ=g!_NT?7k{2$K>?_6B8IDl=Xb2vS}lBnS(g_z
z#mBUCVi~cPbn|5`!NK&dmYVpcmeerl*V3xKswKw9;NZznt^Tf_T$-EKWA#-%vC>$p
zoR%8ZmTqsVzK+Pq)F5a|W`G3dWG1C*;lQaW1NuNTc
zX$DaHJk0t
zyb~E}J?B7@eFBxWrsLe@+ysJGjTygIL>-yA(J_~SSTmoDL#6;BYXS9fv?MIo&unN45|B=g8Kf^&Hqf&YmNqBA3~57#(%Y
z2?3qlGYt7-CBQL7ak}3}$zJ5OcTtr#``HzTaH*Lw!+AsV{r80IN>o`B4Aq
zs>7eoV@=Vuu+0Z$ZDb~HzLd8apN@p99E}nTqY9>7}_)U?OK|wI=O@PsZ-;_kX5~S{O!g=0BSzdT$&Pb~a
zKJw0J6zr?yqto4vgVAtGmdYN_Xo)7W^MfL-r+w(Ojy&uwUcF-$C52ZMUAZ2T%NPGo
z$x7B{zZXwrpOrGwP#s7>YVEqH)jX}9Zriq3o=$t&`lIQtY#P?!W|p7JP(+`u`b4aC
z+U&pj!$3*?NBq&9oLDu&f^Md$x3oBU{qAc^r)VaaF1w&OoO+n(sr>~%L`lfL&iB;*
z%8ScwF2kQ)Wn%DayPtTGH4KU{pV-+|Tq{)55$2UomenuHf!EMq{o87K9O64f$e!<
zc^MZFdoaNTH?S!MF-*+oI{*S@zLdDs6S!u(C}CJTJZ568@GPC6Z%=3eTh9qyc_|=B
z$AyT>LN`67UgJJXi!`X;yR~h!r&MgSUEmWr4+@G<=Rrje=sZly0edGec>2OZ?#|(xM%rnqR82W;p_Hu^VJXbggRV-4#AjGm_Ehs35`a-F+u&
z@{VGw9TTM4?i5$TwiY~%H>z^_
z-pqROq(85iJBnhix}rg|(tphb%+%8CL7wdtaQrG|+{M-A;hoO#(7`pR8d*|1zDfQQ
zqo`pRF?!0z&QMNy=r-avCS7x6MoD$XlV9HKgh*JI3k4v4iVMm``h_Kg(z*kqjfl<|
zxT>@KUXFxXeJ$q{+P+nwVQ=T(RZ+of^kYjQqYjPN)Hlb3Wl-(hmPKG+tE5~zIZ|y(
zLtgh&qNAO0-QIh<{jA%YmsFiMJ@HEJfjgr9o{`_Nq}AT%vmcj=^AZ4Y<+(_lmWeZo
zS9jW+p80
zT9z{^{k2L-73uOTv9;9Q_K#+d<3-13tfGh4aCr=buFLwApU=tCmNs@85B$du;wME%
z(O!bK&c-)a?}8_`)Z$Jain3roU@Lk$RDkqp9B@u
z@R9(!L#ydlvH7>!dNx=(iQ3`p%M@(sZMw
ztMUk^;7kwZRQlXTV!lLILnI=@YE
zTDEF}87HchH-gEwXSKPz(OjIY78Q=Gw|_&~p{6(#oBTdE^&c8(N|QTO(#R9wG((oN
zEb`;%Pt|2~blTlvpG`Sd$820ts@!(-no$(Gtc0Pm;U*Wj;>4*R)@hqz5nNTrl>XT(
zML#gcX`ioqelwkOx*+N+2Z1H2roW;@eF-j|_St*IT!Eyz`36c;HIvrDQkH3>{nj-~
zh~9D7%)Oqgmpi6ZciSB{wl4*vb+^5@N}wIY5lgtA5``K$59v!L9Ltee3K6m8T`5}
zp?N@TSI%mXG@H#t3p@AUCyHP&!3r;f$%HFaA&e$q;e|1pkcF4x?A2g0VGA#W_Dm|g
z1V%Hf_)@SSW5wCapgZ%bU51=x&n(kSGD%<3N;1jc+f+YWB$-YMflxOXq-e?!vX~X@
z+bBi9AXg4&l|2|IMN?jWM_a1BIDfg$lIw^5R7EPjfg*g9ZAdQHH`9QMZ>#O#(nd5z
zw9AUPE7LbwdFELWn)2l5w^dRKUOVqcUZQWxdgkAr^)%0_xhc;#X#|j2HMb=+Ga|
zshL@$5I=k1VxD0mDThgxjj|v{nKqIFnd~S*S|FqJA4y5RiRWXI1|%tnb}Eph6kLtH
zc--glgMj7v`3q!}pQI^?etwXs9IaRCZC?xaEj%OTO)b=l!QG6+KSnbd(&p3l|M`??
zd%+$5|MLEJ$!(ZquEW;c08^~kB{EG|QY<`Nb9PerK|uhn7p$_c{^1xif|7?U53=ak
z`teve|JycZp~oHIV;YgvJp0OB<;0J@FbxRsaTKs-i(@Rf`K!pT6j>TCZaQYGk)>rp
z#IJXt6K1n&sc8o8w95myDK+yG?&R~Ri-iPm-rBhtKE~xfN(h={mZseM4W8J+_m&57
zQ-x|!j*3?bvKXQWDkU!u2R|byapCU?ip#s>A@|aqCn|)S7y^Z;h$*nC*IJdj34;53
znRlBoRu-L?J)w92q7{-1c`t1Hl%`+6MV5vLjGxs2FZ>;Eit^qY@G^H2{b2!kjV;@W
zYyjzf)H}yC<28*$$c|$0NP>vvL<&Vp17_S%5|O_KtnyD=!$4FuJD*$PCI>sU=>vf6
zl^IdXsWM`4KFj?T?Efhk3{A#eM!(UM2qek
zN>0T`2N5kf5|^bDVM1b`ru&$AyA&R(4|PbZi#e#QD#H8uuRnXo
z`59V(LQT!RgMTC$mKvF=%INN*!aErs8o|6sk8!krDm)gmL!0rVxw%s;T4{f2m
zo#DYS#44-Xn%k)qWtMnk0UAwGucOzyX;%5YF5OSiQzvzt^v*omCq92ftUB&1Kl%Yt
z$LWQN*CSP%J{`8aASd+7CiMPrD@W=P=EZAF)f}2ZiT3gIBj2_ZNfz3t)2mf8z13h#
zF2%1*LO)Iu<{j&EG929_Y0JaUPjqB%eY}tbDczV?NpK3G#0%TzY4C*s-KvMiAJ`mO
zV4IPbS-6D{1FBd8UZt)52$aDY;;{<|25jWAhXJ^I$B9hgz#|908o?3h`t63fMK^C&
zp)1RGrWM;Rv@i{2rQFgc)J2=ki>wTUAC%AZI0NwkXhK(-v|m^x)m*i{NUFWCx#x!}
z%)GDuxNJBE3c6@jJ7Omy<^kHN;6L&-saKhhN@*uGc?ODJ
zZD^q!2s*6E&L5}L%2>c69)|YItH>JVP^yb}J7L<}6u%JPp7^D`tG|Y
zP#TeWISLapuQps};6U&Xmv;xZSMyR!izpn(Qy9w$HKNS^x)fbze_9(mBFsuS7!Ovp
z-HZlp!dq|6vbyBI{XGqM7oXQ$w5O6CH5>o#E4W-W6eB&&`_!
zBnyi>#3k!1JF2Uy(3tU8HL7@T3^-N4GD>Y|}7e6!?1W8J=AC
zVghdS%1CV{a0T!7%CfZ+6$oo2Y9z1DD2Cqdg?MWOOH^9Bt^&M{#1h^^l(ZW-**%v5
z4*7J3;DdiWM#-L_3NG3gZ9UvWyAiA0o8sD4Z%abfY{%pyWBMXCYY{J4h1grK))b4Q
zUDQ@ZYoXcKW1NO)Dsa}eK6Ig7cm=YjpB2zN30rNK5rS_FAD9F04c*;AGDih%kr=luv
ztf@?dcG-%kze}GwT5WqiWuEdohAPAl{j;%a;SC7c$XjF-@@^gNB9%AVbhtQ=uO-5)
z&IcZ=Bc4g}1^Yla4{jqWs=U7}36?{ETy)l>f=Wq=S0J|Dh!q38yDW>RcRX&eZ=4+p
z*+P4$n3PGg=+FA;!#ZX!z`xI9rzZ+@bx=%>rWWZJMo|+vur1^yjUgYkh5!~mN)pXk
zra{K4;mVJ5xJ1N5iztW+IQYmP-b=x{ansMkS9O(cRN
zR`2pQ8+?Ym#WGYd(F#ZhQQ)9rS^!+N>Ki8MQ5APU*MX{S0-{4y-^N;l`Yz25egQK9
zHI5qsak>uB4!p0jez0QJI0Adsfa{bkI~(%QAX1MRky1)Ame5#8t_N40_(Av|ACm-
zj!0l(dp47%@9>pD(#cQgIT4)=$QOeX-H>m0*@%ZwT{
z)P^+X1L#L)pb5DS1#Y+v6uc6y2NSql8PQx}kEV&!8#q3h-Luh|=bnsDKg(?Bg18Dy14y^yr9CXRxOteZh`eWIk&3+C%#-
zdt=w3kk+n;!YxyehP9?134QPnb=3At6SUbrrVfUEP(2pv_sU>`HqgVd{?4ZJa_k;g
z%|Sk?hUkZ3Br4L6z2^NG*jsX~LL7VP4vS1)(MaA{Q3GC26o)h9aHv>&gq^t5W2qh*fuT8YuOZ^57wt}pt<=ECBPVgANWr9fV%!JWMHCi?
zth~|=0a$d#{Lo92_!Ueg@JyR!;w;V?1vlDJP?Hops25KR+tq;YhPFg>fL10cXKnpu?mVDXt3g~9_)SWw_zJ{;-fU2DXnhZ|$T=F&$p
zK(pPw?rYmK1qa(BDwvEb_Ow1WZN!t%0JRPs_tUr;dzGqmJ1mZK31i
z5`B+8U_UPoK|UyfgV&&d5@gy07B|lP>*ELer@2xJ}4
z<9IKbe>|e1*R7wkh0S~4EOQn20-h7^UoxNEG}lO60?o_Tn?|1OzG)~}Q|8nLvov%2
zOByK;S#$dBr02x8i$On2}UVnO94`
zjP|!O)ZvIZk$$nl!rQ1elMJ6`?v7!V^LJ)UHWp+8t+IG@sm{$4+*B$f*K-@!QGX
zFE*9DB-gz8GV%VMsbaQl1Gbk2RafHPar#=F3neR>m1B
zL&*xVEakO1oZ0M)g?0yHNK6ps6uutfVJK{*APADe(ccS~yRoSg$EWlc
z%paa2U30n3#iI1$GJj2iD^biSxUWB++k$?qV1(wey?Ez&Hnzu#bcfxQSti!+alpdK
zLp0h#)61hj$%Xf<=;zbOsIQ+?>OQ+z`5u!(nW8BS&N0+6p6c@Yr#gUMyqIUs*734j%XgXn55osyacGUAFP|
zZDT}(HH|U1AMUWX4{H)*?$l6eCowP=)=zFsLp`|@E~tV}xZNlK=Ju8z4DL+35m$^t
zvy)fV5VbIIRej#hKkv#UsM^ol8OGd~JJ++_LS$|z)IyzX^I=bwmUkmygVo6PKzS1c
z1OR+MgTHOGuGt>B?AL2>Ku;hBl?T-#2Ad0DaQzGF0N!9%8vsv!Egyq}-fs0~yPp-+
zi*R1`(`tmEi|<~Xw+BkEx7)*-mx8-h+1?lS3MF&%lKB{7_hPU)>Yp!uwx9ER6u-_L
zohLtkT5xpKK`S1UDoAA?Dh=9FhcJU*H+wh*<_<)UfQ{0p$oxxm6gy`}p>H={_h^eI
zH-gwUyi=T2^Bdz<--*)&PCN`VaD}^OJ8`=UagP?nw)V!jm2LG5aEjaC>5{D<^C?i_
zZ9QG+@=K1|wAF3L^odGu6Y65uUgg*2?HP~-ELW6!Rfoy^D5+nIYj>ov!p6YcjnfyF
zd4ZoJnZPPk*x}3sxwcc5HgkPXFB2rZm@3<2=|WdGveE@A?5(7WoC_eJ^e%|NP*-*s
z(#4g>qjgUoygy^)ACC^W$S?dPNefFi_5^B~x|`yG@^=&H^h?BmK1-c
zgA+(dlJJDPM?RlD^3gnXFSLSyG4fWStq_oooMhT2=}w{ciNr}JzMzPl-wD+^@pnS}
zPsy@ZAWz<95ro7hDCh8&S;`ZvWva5{StO5!4BOn%3C$|`F`^AU6-x)IM)re01lNxS
z5M0;qAhh+pP3M7exo>u1o|+e~Km8#}LiTlGdbqyq;_Acgef8r^gFU4!WA3xGNP{#6
z<5nB5F*r@UAdV_JCA)KQ<7mOeC@Nh;o>@z&m!Q2K#lEQawa`(y>B3QOIRe?hPI;&n
zHbG9smJ&yrYLMYw5Xpb%G1@NL+c&jl2Y~ved_=380FE+)-Y#NsXjxM;GWEw^&cpvS
zE6$u3?O^T
z0vOd(mL#eQVqVBAa+hX^PNJzs*KU>y()7`s`i2KObhj#ktF>6Ex@J9AsxP|~|El{#
z5?cpqYNye1nl{>0Ue`Xubj%wbya>8>S*-y4!B#(bbrYSPsj`4-OW^J_z*qrWS(5NjuMbl6Q-1-uAt|Urck#01R7+FpniYN&=a|}PV7xlEX&S?-
zqsKyPxyACb=Ec&2QA2L~-g$H04i($;w>-A;o3#o^k*6rIqq4F75rVn
zGCF*}kpU6Ey3_W*=iE9bdR;cx@ql|T?u6xRVl4|8~6FQF*|r+ANDV#szz6@XRXFxxUYY2q7aqD
z%cP{Smg;i=tFlC#cT&x>i_H_CisI<8uK}xG>dDuWH|XND(%zGwgmLYOIjoINzDT{{
zH@rh_x7<|6Owg?JWvzrM&pr`qUjz
zt6y_Te0xXEjJ`S$$^%|=)OS>5X&keRaC~VL>Uj@&-kkofI?dkAb0E59yU_{(2cm%=
zJTc+uh(9>e4BPz(BUjDzA}mrzO56q9yOJ8`q+HeJzVx%ul~|P2u7r5)p?mGXf$nfP
zav&()IN*QHq9FHH_Z!3tJ5zc|7I%9C
z<_EQnpoRi^WWCLytdz7ij51Psyd$Wn$GeMqeDbzs6c_EzZ1AFYDz62jlPFkFcnQl@
z_eKILnZJr}T8KU4A*0xJV=PHkzoIkMR=rw$#QQpnRd#hS(d*yW#y9$&tvtZnsc6jJ
z!i0=wYwgs#r7+#>okKaV*(*DDt(&BY^Ls6mTxG32Mzl#Yx{^CqV9$>u-`TTlj{IR>
zE|QEyHA`jA=uMduGj=``=Fohd!*sbeTh2|ELv!WYRGq<0sc#NuOQ$qh10CV5wpY|{
zt9wPa@quDtbT{p?E{efkxd=^@z39kvH8-V0ltX)eS!+?b7gDgbUFY)u#C|NU
zd0ol!_7|?_dAW5jgCb7%Ys~gK4dlh9{YhmN_eenxt?HfFi8L?sNvkgTXZz*jQz62q
zic*Y4DcpVHN>{~|wL%lO6z%96rehL-FNtUDnC6k#_36Uj&P^=!7yZC5nzs!@*u~{m
zc$GnMnZG8%L-*PAW1rG6fUiAxl#CyS^a|aplzy@BA|p`HJNU^f{e4w3Zf}kcl))D-
zNyTyY-1R2D$B|l>2PxRW!Cgf+dO
z?7sRH3e$f^Uz}ze9>Ure+w(ZDWl7YTaTLoeqR{JNA+Jjm($?;TXm{_@C+DgF`8l{L
zL*qCR*E&}@OS=}rvVTZ_o2}ZJZa1s*u1;>Y)pCEUvLH)qK2Z@!)M{^tDI{mnO#
z+}}9J?Qh(t_BXCF`E`q-}A*Z!ul%zH)|rg?++{#X;7jK
zRe?4t<&n2JUVf*dy;AALitggk%O|@s2~JM8niZL&i@!8)IxUyExp1k-(y=pBsQTj{
zq9kNr*D)9GqL|H17@eZ#8S4{6TC}ETZT;YjIOrf*9M4S1!Bd%h>9((hlGCIRN6Lp$
zUOm?8z_!LS!|HT9(ju|dews~Ng>suc(UDB1$yd_}&y`M;SGP21e58T|resb^IzNR}$AwWC9Cj%0c5SQnz@JCPg2LAQYdJU<
zup^RKl`$P?NXBTSGc{%d?Zg<3?WtorYTzGpd6&;#z4{jlKDe`w@nroQ?`F)B!LG)t
z4v}GS;Bu^L5x5cdJBE#mu4O!KqvQ7@&k-j0=xg*UFKzF41p;>2Fn*kzh
zmsCyLm;{mg3>hA|ujmkYZcZZi
z6)lp;eMQry7ER>7B1+^QI*Hs@w5WVjXOa7cWzQ_z@KEXIxrvu-0{9UQ7srpmB&KLa
zBuEbju_}bSE;+~xn^l5Et+NU+V>+XNjA7>_#4jrgWg!wMn>8Z>wEQy)87s0^FDx^E
z?Oi)dA+RAFseJ5v9?&{9RG^V6GUgwwOIcCSr6RJJ12)opjlejoH2_16)qsrb+XFDx
zn;Npwy|{+MBcT~CI1XA-A?ZjCVxSczf(U3u(VY@S^s^#K(pw!wJ}XLY35BQj7NzIiww$#dsMSzuurwBLu4Bq_*JV~1fJEZrb{gf?`l<)$N)L;
zuvWFGte-P4YwNGS>nN^Kc-67G>~iz#t>Q|v9;?XX9$etZ@wx|RPVU=Kz@lfBXKJsN
z2kFs~5>qnSCPHeiwLaP3iEYYM$54H~$&hBQl7_F8{Pxw@m?e9qWg-?zs$;UTg#J)$
zC#B}t8*4bY4THhmSW9b6H&)RbUiD>!LG;>Qi8U-8+QpD^B1UHE#peZ~Js$EYZU^a|
z&)|cX+RI7-T58M1078l@CiRra+y?VC@`iZmI8HsV5)Z2MgPel_&UWp*o`~A|
zc|E538hTSMvB9%hOK+>Bv7X*mio%53tgE+GA{i;H*4JB0sjjiN6;fTAt*@i9*4~V&
zx!zu1L~YHzDVMqznytOp)6tzHv7_tFlVG$6Jw*HY5{w>Eq6WAoAEQT=Ucs)-$4IKr
zp%WNGE~!==R#;u+?K-b$8C#is|m;W^k;7V7N=UHXG~+81GiDO-DL@=DU^~
z;lYEs(eCBuWWB_wy$+GVw@--LYY|16pdHQawW!>G+|K6qa_Y%Xdo5SS!!+rsq*$G(
zOiVYMfl<-RY+yAV7$^IT2UeHZ0RkSdg4LyVORxv8V5QZwC0Jb-77~?3
zQBlv=U&POq-owwew~Wn~7q;aVo5mWTP0XjcjQ+;4Hd?ALbJ=L9ntpQ)4KLL~M12EU
zTMOTp+0_uCy<_5tC{>wb(P>N=YM%v6CShsEl`)x6&aS3@mn@
zw^AZCe1^NyV^s8###l`U-Pk^9jMXLg4PkrRV|D2rHRQhcSZVd7F;@2+M$0s5tfXE@
zyW}sWAlmB`G7#ORiaYQR(TYrEr^t+MxHCUgOuwz0$(xKER!Zu-_gl)Sjz?B98V;b9
zj`}cTC8K53t(5d^sg;!ODF7HTwG#o%v~)dNjEbITi`8^spX@zbtggOii`74uu7PKZ
zEr0_fXz$r#bzN9vlxMr7o|er^9aG+H_2GgGTYvu0F($lL2{HfORqs@dvS)=?{l$Co
zlQ3qPckqvP$ku>2+v2aaH6!S1r`4iv*)Gi(x~zd8Jk_3dmc}S($c|z=(-DzLyuz#=PYEa&Y3<`!Q<0{zOZec245J;
zvSe%@<;DCCym}PXop2SYL$|OhUF#hlv-HR^-u~6O`I5(+uXxOP{Q{c!alvWMXSMsU
zEBVbzpt@#281OO!DZqS6yxxe^1vuJzW*KONg53*`|V+^eA
z&4Df3-YnLt?e)|)71da}Y6J#y>nDUH+VzqXT=jU?Qc)|=_m7YF7G0$Kx@{NfLCutx
zVp>B7nO0G0F549XEaqYNDpn?AjDeYqIk2V4n8jL|jGhX9HYTyk0{C~f-BezxMUNaZ
zY`f)%X4MuaS+EAVNVja2%WSKrIYL9)=QI=KQ;977lvDp^4l*AQoWiSp@F%=BWqAMH
zQ@A+3XllGuhWFn+g?9nwY$sNh8380MIeRe?k+mPoM>9`FX6V;nxPb?{-pn8eS>yxB?NbVO!7H!2%LzSCxdSyNwEu*}qnND~mbx0+=
znp>n2R+*cn(pH)zwH6;wBN6o&_O+TCp;z#PQTC)ri&&2P>RxlI6_HXuM@1wsnq8Vo
z=vixU`|KZ&mFq}lEhPzQ>5!OqZH6GC9>l9F@sAM~I`IC>4RcOcjpDuOh&?l}%y}d$
zxn4v~<1`K-5~}=ZQi0~zYHmNu*r6RkNuJZml!NVE)rU{7cvo-M*vbyuR1yAoDc0OX
zeu;vUD6SH2_5b<(@v^MLk_GRuV=BQe{6MS~V4>%iVI)W@)o-d1<$0<0fOQq(eab(0
zIuM}wKhkNBc(|QQt|{0qXHUPdWNl!vK(_P`A=(c^4F{mR14)qNo@4+elWM
z6*M+K_gq#l^*}QrMmfSv%Fzrh6H-)T%7hg0V4{4p+rq*<*2?q37Lj#y0?
zEBxx{kW=u@G7XwCW?{Lm2rqF^4D1c|F6!P9#5on3f6N~Up8m|TX!lwh$5%3Zk``Y5
zW(7t9mN;n3xiY71f~3kr(B>eB@(*OW2d8-lH!)AIqBSw2MFvMwEm(b$M<1#&(V_uY
zo?Fpi()$6FK7fPqzmw3NT+m=E&nM_GDclGm7lO`x=*XH=92#f>uf&Z<(hor&2cZna
zOPPWbcrKGN()c=fJJzwJv;rn!0WO$VE(dC!K~M18xNX9OUdM68XoQg|cq!Zm!7tN9EjQ8e5y?4Ic$esFSPIM`<*vhhvr|3`-nP*lO
z?LAi~q9>lGOVy!M3Q@kQR_wx(Wjzk;cuHWx#MzVzI(;T{b)oFJ7p!n;VQNs{Dg
zwSg8va&5rJr`TkCdhjC>GCGBKiiRihBnfajPa+c)7_~ZMf=abMV?l~w34w|ldX0vP
zCVZ8~f++bqjRkEYA9q;}y;eg(5Vu-mRSfJ$FN+bZ*cfVp*K7>oM5{KYMM&psB)#@k
zTr`(xHfW$gIVU6w(aa1<3c1+YBPvK9FnI1sCX0_~%1ku3B}w3CxK7~Uc`lhxGTS8y
z(9C(A3J}bE^&({RU&|6?$q2`DVFtp4Q$s7IA)A*`)CJDYC@PAKOZ^HwbP7R39Xvy%
zri`8^(o&_FEz&Cjdd^5qooMDrRh)AENUaRuStLbKqPZkBb@FK2?YxqXE?HFUe2z&?
znr5a+OB+4kbSHFw{LrQ}?VLUdhIH>_te6AJ^L`zRy)!J+t0&8HFCt)b0!Kel6}|2j
zZ9)~rzUR&1CC$QL7;lOhW=?XBjBhd%8dNit>w?fp%XvBM{N=n3dMa~KiF{UbR-JZ&
zb3qn8*SR1Cp7xwq0?vTWia;kr*Hp0cqO)qqDbiUH`rANFoGuGc&7rEP63p~z3ZrLM
zHRa)xtZMq?^Q~&dpa=$al+m-WdfK=NSsh(u6sn_3Fikrv51z4|)k!PAZWpI7E_9HS
zZu3$!^U>jg2gx$AjNf@$noG3<=?yo`%}hMeb~7onK)o>c?S
zey`{tC&E{x$}FbV!Oy+VY7tDsuW6xYHa7pBrY$v7@UZQr#IMsvy5Eds(VoqBd01g
z^=hN3pu}2~ot)t|5|v2`l1p=^7Wxy|xx(~WBel&=Y@YojS*>8IYf8T7Yc*!PXDHv}Zv&Rg?}*qOM}y
z{E+xYQAA_7T`i5|u}I%jeq+X{2G%rbNAXp4lXq&|mBi>J8=B&2z5PO31ohWK
zTogn1JrO5mQh#xTv^b_ObC4EF`R$I?Qe=@IM}Kw;RVL3Tldf4hpiI83$wK~-*VtW|
z)II<0GFXi`%my#jf~5ezXwQn(C0w>DVi2$YzI;lnrOvY-m+1RAxrPiJ0`y;6elx{RBx89R
zKa09L#8L8v?ry60UHshhi^30{x*RuBYJ5^T3`t~28u+L`%%rBRB-mH+POnICC`_SP
zDUCWFg~aNFo)vx23Mm2P;m1*i`LAJk?wOS|CeYgFkxzMGxc@n7U=9Q(0EU9^5%)0Jwy
zaNqU42D~paF-cowY3xcA?i{X5P7jVQl;K|Lx@13ix=;iAuj_(QQcsFSN&Ob1?@D;I
z_Q!!@>qofIYWxZpQn=7_U5h68QP8b^>lYNd&}^qV-RaT9d+W-DzqhN^W;ckXbYpwT
za=Nj*>iy&6z4!L7fAy~JK0V%k`g|kMpfJxwJ>Fg2
zeb}JjKMLg4&1S>tDCSSz&E>;~e|x;dkD!A7$m{j)pD5N_@9N>^^6};x1^m&wyt=x%
z2NHksKHYutEktwn@^7@=HI-Bo6XH5
z8vA$e{_^4R_VNQ7{9oS3&mSIdy$!GC?CT5AX5=Z)Dg1=CyHu_ke2}KmOgj{pfw(
zpnyN|u2ogQ{f8Ux>iyj43~hAZTMd5q_{a&%733
zjicPMxN
z=eK-B`n36cUpqOxS6<&CZRt7v;que3H&yT4@V>KocMI&EZ~x1?`PV%k
zO)d!@@;`*r#_Q$g^8OChdw%5Z)$OJp0dLU5){j5($J)e(qLQ1&iK73+o8Z+yVfFjt
z&&~7lu5a#dKJlUJ3Rcv=RXwH(X;H|(d!O%reYm{7L0hUH|1q>wX#9Uyb-}%_f49vI
z6f6Av)7#ESz2{-m&4b6i<`35!xHbG+<&XWwTT9ifxv#@VjbC|K$)mN+-6zof{EhpP
zw>(UJ_{7PTbN%4mJUrYzpzv=iD|q{nM{U9jL_OlaamP~lz`tHT-u!;~Zxr;Wst$N)
zDc3y;{&QPetiSU&?qgOz@MpIXov9jj+JO$G@ptdH%ZJ;`Pr`}a+o58l;>yUpi^8xZy_ca}vG_!7}EYvhkzMj2$CYV1z~m+<=X
z@e&07o5)wzi8}t!u5NCBgFUprdzZhEJT}n*f4lr}d+oh@xcqn{;`R@Bm(XhAqy8Na
z%l_^Cc6;{$lOV3a|IPh*?*DP0TMWa$-2RH;^8U?z2wnkq5C0au97KKF54phB%%i_{
z@Ot3x$>js8xIcN1{Pr(@y}bRzJ)FlIRC#}fj^H(uJHa0|-h2MgHt#S0Y1lQ=tXW7k
zJL@K{_@P>AwJ_<{VJ<$2t!j^cz`{+D&c5$HrmEsDUZUcu+9J97?|
zgVpcw*_3qvYt9H-*x&tJN8=*ZvjzMK*U!%OpVKBLU1Au#0;7BA7MB;J)d+~N@hNI`O`_KDwj;s)>
zpd{5Rao1k8Qz45rEX$*%xMFp*tS%Bue%CEf&sztrzcitbY!?40zA>TCS23IhK%K^9
zfL}MDCQ!+30D)DkvnEi@LTf=+t+XzU?CBd>Yb}L#CHQ2wgUhTf{WJkDzqF!H%%QEr
zY#cL{fHy$x@l1=Z6Jafb5A2ZE2QADGmGw2NgJpBs$LhcJ0aK=`;S`5W1F*{AW{lNo
zW5y!u1D!cqX}B}Ms|4c;fC
zeA#qYm#kXu`l<)<@4DTVkSZ)iqpeF-vDjuzomOC`ux_h$xhj@apQ&a>b-AlH)Bs5N
z%#5t3u1Nb*VD*-z7sL@u3NL>ui!gmjsMH1yB!xg{prG&^-GI!-7z-7OW~x29=n7OZ
zN8K{9)h~g&SDm+%#iwuo6Jp2as1GMvX;!$HnhUFfK1lEdzf5MULzNvgL%hOxZ%$TyWk=P>Oa@J
zk`O$e7T+Jy7N;*>`pmK{3K{)vxoI0?wY&|WEamth-na?#=A^!6)tEGw{Z{?A9^lDT
zHJqXeF#xNCdB#{Bcg$F1J=ilqtHgUoShbMP0KGa2m@$bTp;7E-pko*QnG33Wz~&mg
zAwvt~1Z~PJ7PJ$hs~)|G&_F{uD70g1#Dy3k(vD#h9fIUk0z{0IN{k3nQVkPLo3U!pd8uUSGqO?ck;Y-Dhc$2K5e%b{$~ILw1A_xjKqO
zwgY7JZqKjgcW>D?TBwfpr+lRpnQHWCsWznVs-3m}_QXIV*rAdxO=ge!uNfa|k(=Us!O6VimSN_QP70cef
zF10=~sy>OcdV>_zq~d5Ng4$&L$Z~zQ%3-<2RQYgj60+Qe;R=0I2BW1G4JK!P#7mvC
z?3uea-OlhNN@-fG9JFN2ZaYzb!a7)>hz=|*3nclp%%~okQ<;@9xC;^+5meQ@ux+05
z?pk=w;oz`4I3aiDti(3VSs{Y1Jgdc{A(rIm{yZzUORL2IVo{Aq8n_W%J(UcoRsZKi
zDlfOk#uIlVNMPY+wJZn8U-&?4@7E70_HO-%XX(|CXaJ{vnuze}PssKz{TLbZcEtbg
zi8(GGNe09UBVu1fL^EoKTiG$5o)0ht+q)kR^)XHF`UP|*-El~~Ws$Wp^CW7FRGC
z(omkrA{^j-Eb;-P@iMnG(^+
zJP^T;%|kqRbRNLL<8wO{p+@C2hlLP=MP+>@G=cGz=xEz3p$SZ{OeeCuk_6iDj?e@)
zQBt5XyOIR0)s=;)jIN|XU~^?U+T==Xw8brP7P2HWkR_#kEXmAcNogHRa^qN%*~XIE
zG?wI+v2(sjpLXjVPod9tK>MW%$Ylz+
zB?{Q(2{cO+z{?V_3kTrqiz${C6Rj$SFDNEiOH8_qm}Uhr$>L!r>xPMz3{$QaCRr#<
zvPg$wd9Z_(!6b`**nvd)F4iCMu6{cjmX4$LTsmx1P+tSRvq^Y4eLd*-w
zw`!@mqE{abS=X)jqqI%xu1o@v1J!+8GsrFxwJYQdt5wTTl4>SzT?pmJG|3sMl1NCg
z(0fXAyL8l=5MZ)FQ35gbur6gk5wWVlc4@|3G`B`6Cw@MGA3QOU0xPnVwB~~JaLizH
z80%_T?m{Ndb`E4hwk?STj$)6wB(Tivuj&*jC7u;NX*IEDu^T=+M1>d%99Yk81Z`)p
zb6T|{%XsXa6n^aO__bw5+Z^_#pM|6fQ4+*uD0XS}s+BuFrC7VvfL0?fSVG(o;&i_k
z8&}XT!>RM4qo+B9Pw^UDat#oe>_%`HN-OO$8%t0`1M73
zBvs+VkbjIEG(7H)QsO&qPOD-!-@nQaw;q4+PU5&@TymR3T3rOoe^w=%Ma6YUPbyT$
zrC#UI6L+9q(A}-sFFjG#0<6+l*WwOV;t~7AkmYFWBGQ_6(n`x&P-ao_N~_^2OwFTx
zQn}fl!ZANcIq`Y}?Q^nyOF%^+3cOtuGZ&Hm+6kEU3OshD<#%T&kXII90(Vt{H(;-t
zc_218(mFBFKnG31J4wDfNV~g8xI0L-lP1}nq}OQ^>n>92?Z!bn?_WdD5IP
zT~41UCrgpjCC446#a$)D9j3x5li-fh-?WKu;*__GWH)u1+i`-MJhe@p)TT~nyGUe{
zrLd`!*K}!XHwkOfRJGG2wS)Au!^E_Ul(d^#K1nvE@LVroKFJY8{6yOy?S|2pk(Ra?O
z=Qe}y$_x7%O>`0@m!lmPr_Ki!pDmmYTz!1G`Std)uH@>?p10G0nQ#8q?<_cBHkQ9G
zW@2vISmZtTd?g#CTNJ@+dNYJnd&-umBASziC!w|Bp+?k2X(5N+PB7~;*NO_0|6
z7V19YU#c0BkG$3Td$!>>VppLx4)U0n>XXJ5|e6hx~Z@}6?gj;M)
z5#gUb1X3$`^rwAM+8tW0Af;V%+q~vHF1l}aKr-!&L&~cAt;>rVJAq=gF4_0ruO4M%
zgI`G;>7qqO9#sp1)h#V3cbv2Q`m+sRnLyb+`4(5
z-(YqX^H6Uc()cWfWocX#%YxKC=r3vb3IT1z)RYy;*bl6}%)KSMTHRFB7x!iUWPBHG
zQsSZCE=#i@BZB!IwIJh4?Ep=HV5)ERTslfKv3ivrj^fxy>nGF#VW4+Dw_Bk-uAbn<
z-Dk~1aR7HIvUno6GHDIzem|Q-RQRTym(nnTEGnX4{@iID2Ffd$!xAuA`|K^4-C8%(
z`l|ro${RA#Kt#2%EK4(+YO4U?Y8x`qKuER83oDGPu7#kh?}SSMMO5RC+iEMLR{_A)
zH)NuLh-xzqWTo$eD{X)T^AJ^*v*H8iST(km(Jh#4ffnWBb#G-u#P`9Ea)1Q$5RX#u
znlyt=t%;c`e8tIBJkqNA%p<0cbu}A&aj@K1^UHV1(pSeQWcXhP!IS^5cz2ZX|(m
zn)JR~2x>7^aqkyTj~2OF^8|o(;NRwBu2zrDQNq0M7xS55y7YtQT~y!8O}=QBuGkDt
zw9@_ZYZBaL)okeJ#9~58w76?lul2F*27-0dtQ)fE2;KUC%Ru;)#*u%=xe^=f12C4k
z*bW59>vpWB@4`UlMnEC~(!3`$yIgOFGtN!+1m4>L<*>?8R;M{EELnLogIZYbvZOJw
zVnR`&|K<{Zak4{EX^OF?IX$VNAvgf6tIhTcEy*!ORd=cf83;?5HD$9l(|>c7KR11%
zqcmbHY0gY=D5?#=t)#O&1)-}uNz*9@MqgidatgpuU1lkjVR3duw-8e>jZ#3=wN)Y2
ze~MZv!Lkpis67c$Ql0V`bwwqHnx@U@H%(E}wH}KXzFV(9v#wrz{w`v1c+GZVMtfF?%-r=51i0m?9CGeV8g!`ujvh{1@Hid(D5coRj}JdS04E`v~ZmMR_|a
z*RN+mo@E7nMdG+8AG4sd>@aGQ7f7I(gs9tB`_2%Gyh}4a28AAnAhC^YKqAE@S-t2C
zg*^DjHuORvlWJeCtlo}|qHRe6RfRNf+7jS%Y0?>pXYe+hHj71&%+79mJMkeBE%ug(
zGOSt5Bayd;*DQX>970LPN^T^}BeqvmPLLl*KHdOV=x0AeGs7?n3V3PD1ZmEuqAQI1
zaqx@a$vg6176oFbn@sG2l}FDkeg!q;1%)nDX+Oj@ZcgyqGjTCBwfa)E77gu2X8sEf
zmixOdYJoevRX>LHjEeS>asOm(x!okzj;gv-ci@EfV|B@E&O=PQ^?I3@szBNo*
zHy>S8AIYS#Sbbr2$yK+%mZeq$T9CT0egsH0ps`f54^(x@HSc@8J^^AaX-Vy&-%Z|9
zttFkR)l*X!^})*z+*olVW~(@Yt%~mWU!FjkHEUKK)6qX}uO^kmkoq*$BtIg2gDTFR`<1LO4^Fnc8lv>=wh)GK7Igeu5_
z2>;uj71lBhW>)Btk8*pKEzR$$iVaX>!DiJK|FIq)+U4>#ZEy&iR&2WkKyQGWR+Fm$
zpm>6N^OwKAeUq_c`es+g@f)#T`@6gd|99+fSu8Y)vPi|!^!x{LRUV0*1mCoO{DFU2
zY=|NH>>ED`-?Y2_*JT)S-|?TmyW&6n<*z^5Xx3kD{v3(ZL&7qsv!lzZKiR1MB-u
zmWYiXS2TaN(fnD~OpB*gIX^t4wLh2tAYKP}Q>1T-r;NAhH`R-PLOe_ZA-!^GCG_3@
zo21_rQ4zEM?=Qo{iw1X5ij~Vhh&?ic*C1wZp3?M7(*&w-y=lKy?LPNi;~o5EbXJir
zviVxetbhFr_g~|v?pAN=jc+Ho(na06>d(0tcrN=-zT1ee|D`>eLtwblp{E2-ev+`b
zA&Aeag%YE)c~oz!{#sX6^=5EgU2S(Wtmt1~^{a@?H^-K4=^o9RD`fgX4(YOEC
z|K;snm*Y5+G|~ThiabKwv}9+J6u^t5vbh)pfFk;kA_gFvb9QYEOjKn7DOOch=LI0z
zj;-~teSrP9X0tEXPjbRN?$?ZnD$WmysLb%sKaY%zjEjf6QqBz|61hAU&E|Ku&=`c2
z5~Y+lb-<`trmPM|5mXu=o9IE3(`~|QmmNvW2{=>9@GHh*m^xO9-A47ISL&~CZo2j}u`~MJ
zhs(G1?C8l4PktyNM*ROr+RQD>KsD2OboHvP`nue-)+Vo3iV2V`{46uxl|14`b!0i
z_I*KglJ@|tz{M%tGF`wcy>2#5j{#R!kI8iRqLf?sj({CsoEui2C4t4%i5!2>WKWCc
zz9usq@<6+Gy{9S&>j+zX8I;Yj5LznzfL1uJA!EKZ>1pfXD_QH;mu9&iN3R9Rg#f0S
zqzQ9=m+HlUGTw*mq?Cg=mGjO=C&9vUS0njO@7Ck^kvJU|r2Ckb@b^IdUslx$9^7Lg
zCowZQCTW+XDOa#vO<(4I+-}k!_$DQZm^G=TsdEfhp4o#gRfO)
zwc6fQhh?=Qw>B`bL!Xy!gyaUP6%xeaMjbovx;T-kT(udu&^FMfEHVZNXK|umcByyH
z%Sd@#C^Dx~(R`**#c(cM&PABUCb=1NsY!WG;*4K$sarN*G8KU&SMiGc?L*J(_#FtU
zwzaFXS7d}23U$-t10nJl=52?2A^ZbPzo7jN{L*!)mP||YApn#1nM^%FSwBn+Al=SA
z?K*k_wu5~Wz^XA5MP1anbDFa7R5(_rq8a<~IMH8yC0z7i2E;#PnT#|Db;86iy7X@9
zhhoe2Q~4>UO#MzM&f_=7O&1?{m|w^T3w>DR$%tG|UN||la~E)P1HXxd_=2*NTbQ6M
zn_mD@a`YE+^TZvmV*9uNSKoPo8w5T5;tQ|R9XLnAOa4^gVnV=Wi!!EU&1c=hfM#ej
z*#`g}<4?1Qi=v*OE02|q!HH;BU8=`TvutoM+IA4S1lLiQq^@&$1OPdy58fg^hL3VS
z$`eDv^pU5c%x5|QtTGN4buquMR?VW~L#aHHItJ(SXYJ~=Zn@QE4B_d@biWsJlSN3&AH=Y9F^5#k;REhim43w+ljtf
zwGRd9U%Cf~v#hLY^3j}VxQn`ypnn=$WeC+0EbTKvS=NM+H>~gA+-XGl;jS78F3#o27ybDU&;Qu7btBB@y`T%e
z)vD){t9*m^%|xFL?iJfrnd|Cv?&C&LPWLVRa4I0py?6%6X)5p|hEdgR$J_{6;`Yoj
zZ!ET;7**P3Lsz4wJd#XUP8#rMNDZ6n!qYn{s_u4N!wMAnxy~K2#bO&ICrZ0*pmU;J
zmQ>oDVRPL4UF5DT31KmNp+9Xk&&mn|X=SMq!eV5HKb=~J0p_(lPdc5wuX5K~LwJIV
zuY`-9oz^;&mjj3svTwPVu))rv5Gi~6otE^%h{n)qQHaP)y??>)8CywK*NORBFm&+q
zuIlfYD}}mBlSe;Km-=Pb*Q8^leKso{(ji~gDR;2Tji+)~`m@7=A2o6E>q&!ZHiQH^
zvfy`~J>+>czr%qFn^nQ`Haj|3uO2h$XRDJN(0Kq(+a2||9$}dr$GU7y9dfn8?jJqO
zmuYr}CdZOstn7rbtUcDTkvl&0f<*xC*
znYYBY%(;pMqAs5)m!0ZG=#fm#LS884SDfnTASF)~%5pXM%cTOoGqo-K^=
z;e&^}Rmv1Mk3}@R`c;b&aM`lUKuAiP&C{icji33_9OnHYgM+(zqqOE65)r`0pgmO7
zrv9R&m$K*yVXX9Htr+le+~Ag
zT&g;99Gb#qzSbVn1ez<(Y%Ld4+Pj^w1
zr-|o%$VY@c=3eaLQ)j`QY)MfRSXY;#qJF6-Kq!xZ%u<
zRnA3NTcO|!<7~B=)@JS?CeOX1g)4v8*N>#Y(=~b3tHsTJsk>E7Si)zTZy!m4r*A>%
z^cR<1JM8(qh~D#gQOcbFX%Kd%q~~AZfUnLTh{jo7K{`2`{r9s$NDo
zRJ|j80>)v)tSDrJ|BO@rVJ-}8&U4o>|fpsyjuA0~F>Hp2j*>%(%Y6`5kVt~M3*
z$1LczKlTNLdg-^-hP`-|nDSv^G8`wLD}k}&C-m#Fan;S+{ozkmEX|F&1@G2fR`RD&
zorcnK7fLys@Q>N!iXS7!6{L*fcqwYxsNFtSe-yT07*pD1f-?P9*HmGdsvU<+?h~N$
zjB2o$i!Lk{vO@}DAs1aenD-_<>k7B}0-`eDxz{Swk8KBa>Oy7?fXjBabT=!270#s~
zvV6mRTw$|?dA;Nr8;@@+3sN&}3E0=65nP=A3Z)9iuxerPz%-w&{}64jZO3ZSgd(Po-kJ@E>hQ@fyuX3
zLL4_-qa#{Itho@BIt8%rx)|YcNSgOhiK0jPf!`m7zPN9yOnTF}`iV?e(La5BPm4N;
z!}kK)8Q(<9qG_RUQooQJmvG}Xz2RVxyG(0HhgWH7VP_bf`AELnYpdO6u}M)7jM?Ln
zaog0@^W5Xq6M*O0Tb160|64|Fy6%Fc{193
z6dmFY^^l}TxBDzX)NAM6<4s3K+bmg2!@?L=J^6|?%nPw=zwFc#r0db`e4QZrjn`1_
zqyw^IQVMhWWi`iBcbGX0wmPz$=yy@2oBLLg7IR}*N^nbi4Q3lopXpzjCA<29w6$p=-{fz8R?}`MlazH_fUU
znq1SSK)Dg;;c_mzs?(`(q=Rq{bx%a=;)VDU0598cRAD2qQ-fr?D>-e$8sN)xBNtQm;z`B)`F{NDqt&bPZUpNt6vso)egsn6VV0xSOJGA
zxR6(^vgb~Uyymn@FZmSKJ17f>#?T51pJ&(077z00T~3_0oG
z?;C^o_Q)SM^SiFyv|}%?XHQ~Nl}zoed*oc^;Wj)BU%Gn4wR8-
z@bF~WL-GhYk*uvd@EK((NGvu-F!AkbJl}m^cQ;Uzk1!%ug3YpHyL?dixqi%Q1i7k|
z`FOgt!(g%Kc@NBQ>n|!qmR&(aG5HA;aEEO+yUq4W+5H(!m5qqAcP
z-}V9Ts?+>0>QP*14_XwurMwVtmb~f!e_}^;gYwVH>IMcN^MO1Zz8{gH*NG#x@7XQ#
zfL_sCE*`kYk7F!M&co8I=N_Pr1JxZ2a9rjp=b*d$-t@D`z3IZGeQ1lPh34N1S?NSl
z97yllbo}HIZRc7z1-_$|jPa`r2SfbQ
zqWkgR4q~OaZwG;Jk!W0yK?q;rVon>FZMNmX6uV*E;;Q9dtw>fLvp|)A7hg?zC--9@
zGY;;Xu<&{Nu3FsFu(Ryq_q&qypxS)lJNVr(FUT(1+f_8a9d(R^6K0UBW|!bqQJ7kI
zDsM53Yd1e+vAbB`$a6xm&v^QGDFRUs59Tdq5yi;2THH1=@Zh0C;dB>@t>G1bqbM{4
zdItS0J!<8r3R{+1o4edcJI5S9n0K#Ol(3j7TaSE{oW6tY2Xbs@DtB!*c8H*P)`ee+j9$nf&W
z)-z$0B+
zqeGl_5E1I=FFqFApLsdjBf|=vE0D)wNV~3hfNhK}hGWhF~m(%-yxQctldCN)}<`n^h$`<99H|#t6Fwp
z;b||ffp_7;b5yt5&N7Tt*;PS)CtBp6c)w(OI#PAs(5i
z?nyzMDP%NgFOXa%@D$Jq;n7wWk4!B4;&Q&yH>8q_0u?FTBMR%B<>3QW5#*}@6M6pQ
zj7p6Lwhui_2m6zkTO$9#7>*@=ca4ZOSQrS3RAzgaA!UR=6{g6d1
z0#>CuUEE+U#;kndM@g2r95-|7iUFB5YBp&mjpqi(R4n6ZdgrqjrS|leZz!gN`Rjyx
zRAc@M@LW;0wsq&3ooXRLjmz${fVl31eEXLlg
z{X_59nvs0Q31I6rlb?YYI}IoTVv;u7H+Z)35vqpYR#GgzE-D-F)ZU2PtEyL86^z!JWb2kpn>Ir_a=zw@b&!>`iwodP3vK6U|
z96120y@$y;!nuq)JNV%bIm;+Ngx68{Z5~1ew_nLK6=P}~9`U=GuBG`}RMx4&&YJ5Q
zG8k0NP}VZUGEGijkf%ahRtZX8=#r*!`0c|yvCtOD$Q<5Z>MKWG(5XKqG*T8XF5S9x
z9l8@=im1~*nz%4^gUkt_Gn3a1y=?lhdSvaZ$jkCKg(boWnMFhjK$94DEqaDx`MbyT
zICtq3qfoVd?uo(%>*NnR7gGCW1rz#u7PJVK(zewjoL|dITQr3w9uX}9Yj8#pgBQ9$
zSh=B)4{RcMYEuM#9(#^s&ob;)bA&K>7+rBIG5pe^lmKrz&@
zRV;9x7;1