From 24ad90239fba8776f4567a01e948196ee100aeac Mon Sep 17 00:00:00 2001 From: Mo Sohani Date: Tue, 29 Oct 2024 10:14:04 -0400 Subject: [PATCH 01/31] 3224 removed PII from logs --- tdrs-backend/tdpservice/parsers/fields.py | 2 +- tdrs-backend/tdpservice/parsers/validators/category3.py | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/tdrs-backend/tdpservice/parsers/fields.py b/tdrs-backend/tdpservice/parsers/fields.py index d26c27bb4..3a534e14a 100644 --- a/tdrs-backend/tdpservice/parsers/fields.py +++ b/tdrs-backend/tdpservice/parsers/fields.py @@ -53,7 +53,7 @@ def parse_value(self, line): value = int(value) return value except ValueError: - logger.error(f"Error parsing field value: {value} to integer.") + logger.error(f"Error parsing field {self.name} value to integer.") return None case "string": return value diff --git a/tdrs-backend/tdpservice/parsers/validators/category3.py b/tdrs-backend/tdpservice/parsers/validators/category3.py index 89f9547c8..3aa81a30e 100644 --- a/tdrs-backend/tdpservice/parsers/validators/category3.py +++ b/tdrs-backend/tdpservice/parsers/validators/category3.py @@ -380,13 +380,11 @@ def validate(record, row_schema): vals = { "WORK_ELIGIBLE_INDICATOR": WORK_ELIGIBLE_INDICATOR, "RELATIONSHIP_HOH": RELATIONSHIP_HOH, - "DOB": DOB } logger.debug( "Caught exception in validator: validate__WORK_ELIGIBLE_INDICATOR__HOH__AGE. " + f"With field values: {vals}." ) - logger.debug(f'Exception: {e}') # Per conversation with Alex on 03/26/2024, returning the true case during exception handling to avoid # confusing the STTs. return true_case From ec396bd0e8acab58c554c8152862cc6d61e5c4d4 Mon Sep 17 00:00:00 2001 From: Mo Sohani Date: Tue, 29 Oct 2024 10:29:59 -0400 Subject: [PATCH 02/31] Removed PII --- tdrs-backend/tdpservice/parsers/util.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tdrs-backend/tdpservice/parsers/util.py b/tdrs-backend/tdpservice/parsers/util.py index 69a53dadd..571261221 100644 --- a/tdrs-backend/tdpservice/parsers/util.py +++ b/tdrs-backend/tdpservice/parsers/util.py @@ -284,13 +284,12 @@ def remove_case_due_to_errors(self, should_remove, case_hash): def generate_t1_t4_hashes(line, record): """Return hashes for duplicate and partial duplicate detection for T1 & T4 records.""" - logger.debug(f"Partial Hash Field Values: {record.RecordType} {str(record.RPT_MONTH_YEAR)} {record.CASE_NUMBER}") + logger.debug(f"Partial Hash Field Values: for T1/T4: {record.RecordType} {str(record.RPT_MONTH_YEAR)} ") return hash(line), hash(record.RecordType + str(record.RPT_MONTH_YEAR or '') + str(record.CASE_NUMBER or '')) def generate_t2_t3_t5_hashes(line, record): """Return hashes for duplicate and partial duplicate detection for T2 & T3 & T5 records.""" - logger.debug(f"Partial Hash Field Values: {record.RecordType} {str(record.RPT_MONTH_YEAR)} {record.CASE_NUMBER} " + - f"{str(record.FAMILY_AFFILIATION)} {record.DATE_OF_BIRTH} {record.SSN}") + logger.debug(f"Partial Hash Field Values: for T2/T3/T5: {record.RecordType} {str(record.RPT_MONTH_YEAR)} ") return hash(line), hash(record.RecordType + str(record.RPT_MONTH_YEAR or '') + str(record.CASE_NUMBER or '') + str(record.FAMILY_AFFILIATION or '') + str(record.DATE_OF_BIRTH or '') + str(record.SSN or '')) From d69b552fb815559a64b9244e6d485ac5c244376f Mon Sep 17 00:00:00 2001 From: Mo Sohani Date: Tue, 29 Oct 2024 11:02:31 -0400 Subject: [PATCH 03/31] linting --- tdrs-backend/tdpservice/parsers/validators/category3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdrs-backend/tdpservice/parsers/validators/category3.py b/tdrs-backend/tdpservice/parsers/validators/category3.py index 3aa81a30e..d8ed34e76 100644 --- a/tdrs-backend/tdpservice/parsers/validators/category3.py +++ b/tdrs-backend/tdpservice/parsers/validators/category3.py @@ -376,7 +376,7 @@ def validate(record, row_schema): return true_case else: return true_case - except Exception as e: + except Exception: vals = { "WORK_ELIGIBLE_INDICATOR": WORK_ELIGIBLE_INDICATOR, "RELATIONSHIP_HOH": RELATIONSHIP_HOH, From b019471cd378f806b4429b1cac4c98c6e8c6f3e8 Mon Sep 17 00:00:00 2001 From: Mo Sohani Date: Thu, 7 Nov 2024 10:56:25 -0500 Subject: [PATCH 04/31] 3224 added an extra security layer to transform function --- tdrs-backend/tdpservice/parsers/fields.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tdrs-backend/tdpservice/parsers/fields.py b/tdrs-backend/tdpservice/parsers/fields.py index 3a534e14a..11872d2bb 100644 --- a/tdrs-backend/tdpservice/parsers/fields.py +++ b/tdrs-backend/tdpservice/parsers/fields.py @@ -83,4 +83,8 @@ def __init__(self, transform_func, item, name, friendly_name, type, startIndex, def parse_value(self, line): """Parse and transform the value for a field given a line, startIndex, endIndex, and field type.""" value = super().parse_value(line) - return self.transform_func(value, **self.kwargs) + try: + return_value = self.transform_func(value, **self.kwargs) + return return_value + except Exception: + raise ValueError(f"Error transforming field value for field: {self.name}.") From 24f3884a28d3aeae3c3ee25becb30ddd93398b50 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 12 Nov 2024 15:44:03 -0500 Subject: [PATCH 05/31] - Update networking in deploy.sh - Update .ini to use internal domain - Add nginx config for proxying prod Grafana --- tdrs-backend/plg/deploy.sh | 11 +++--- tdrs-backend/plg/grafana/custom.ini | 2 +- tdrs-backend/plg/grafana/manifest.yml | 4 +-- tdrs-frontend/nginx/cloud.gov/locations.conf | 36 ++++++++++++++++++++ 4 files changed, 46 insertions(+), 7 deletions(-) diff --git a/tdrs-backend/plg/deploy.sh b/tdrs-backend/plg/deploy.sh index 11adaebdd..65b90c416 100755 --- a/tdrs-backend/plg/deploy.sh +++ b/tdrs-backend/plg/deploy.sh @@ -19,6 +19,7 @@ deploy_pg_exporter() { cp manifest.yml $MANIFEST APP_NAME="pg-exporter-$1" + EXPORTER_SPACE=$(cf target | grep -Eo "tanf(.*)") yq eval -i ".applications[0].name = \"$APP_NAME\"" $MANIFEST yq eval -i ".applications[0].env.DATA_SOURCE_NAME = \"$2\"" $MANIFEST @@ -27,9 +28,10 @@ deploy_pg_exporter() { cf push --no-route -f $MANIFEST -t 180 --strategy rolling cf map-route $APP_NAME apps.internal --hostname $APP_NAME - # Add policy to allow prometheus to talk to pg-exporter + # Add policy to allow prometheus to talk to pg-exporter regardless of environment # TODO: this logic needs to be updated to allow routing accross spaces based on where we want PLG to live. - cf add-network-policy prometheus $APP_NAME -s "tanf-dev" --protocol tcp --port 9187 + cf target -o hhs-acf-ofa -s tanf-prod + cf add-network-policy prometheus $APP_NAME -s "$EXPORTER_SPACE" --protocol tcp --port 9187 rm $MANIFEST popd } @@ -47,9 +49,9 @@ deploy_grafana() { yq eval -i ".applications[0].services[0] = \"$1\"" $MANIFEST cf push --no-route -f $MANIFEST -t 180 --strategy rolling - # cf map-route $APP_NAME apps.internal --hostname $APP_NAME + cf map-route $APP_NAME apps.internal --hostname $APP_NAME # Give Grafana a public route for now. Might be able to swap to internal route later. - cf map-route "$APP_NAME" app.cloud.gov --hostname "${APP_NAME}" + # cf map-route "$APP_NAME" app.cloud.gov --hostname "${APP_NAME}" # Add policy to allow grafana to talk to prometheus and loki cf add-network-policy $APP_NAME prometheus --protocol tcp --port 8080 @@ -97,6 +99,7 @@ while getopts ":hap:u:d:" option; do DB_SERVICE_NAME=$OPTARG;; \?) # Invalid option echo "Error: Invalid option" + help exit;; esac done diff --git a/tdrs-backend/plg/grafana/custom.ini b/tdrs-backend/plg/grafana/custom.ini index 7d8be7d57..f6a9f81e1 100644 --- a/tdrs-backend/plg/grafana/custom.ini +++ b/tdrs-backend/plg/grafana/custom.ini @@ -40,7 +40,7 @@ http_addr = http_port = 8080 # The public facing domain name used to access grafana from a browser -domain = app.cloud.gov +domain = apps.internal # Redirect to correct domain if host header does not match domain # Prevents DNS rebinding attacks diff --git a/tdrs-backend/plg/grafana/manifest.yml b/tdrs-backend/plg/grafana/manifest.yml index 2f796535f..1d6be5f3a 100644 --- a/tdrs-backend/plg/grafana/manifest.yml +++ b/tdrs-backend/plg/grafana/manifest.yml @@ -5,12 +5,12 @@ applications: disk_quota: 2G instances: 1 env: - GF_PATHS_PROVISIONING: "/conf/provisioning" + GF_PATHS_PROVISIONING: "conf/provisioning" GF_PATHS_CONFIG: "/home/vcap/app/custom.ini" GF_PATHS_HOME: "/home/vcap/app/grafana-v11.2.0" GF_PATHS_DATA: "/home/vcap/app/data" GF_PATHS_LOGS: "/home/vcap/app/logs" - GF_PATHS_PLUGINS: "/conf/provisioning/plugins" + GF_PATHS_PLUGINS: "conf/provisioning/plugins" GF_SERVER_HTTP_PORT: 8080 GF_DATABASE_TYPE: postgres GF_DATABASE_SSL_MODE: require diff --git a/tdrs-frontend/nginx/cloud.gov/locations.conf b/tdrs-frontend/nginx/cloud.gov/locations.conf index 592063439..83b964bfc 100644 --- a/tdrs-frontend/nginx/cloud.gov/locations.conf +++ b/tdrs-frontend/nginx/cloud.gov/locations.conf @@ -60,6 +60,42 @@ location = /kibana_auth_check { send_timeout 900; } +location /grafana/ { + auth_request /grafana_auth_check; + auth_request_set $auth_status $upstream_status; + + set $grafana http://grafana.apps.internal:8080$request_uri; + proxy_pass $grafana; + proxy_set_header Host $host:3000; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto https; + + proxy_connect_timeout 300; + proxy_read_timeout 300; + proxy_send_timeout 300; + send_timeout 900; + proxy_buffer_size 4k; +} + +location = /grafana_auth_check { + internal; + set $endpoint http://{{env "BACKEND_HOST"}}.apps.internal::8080/grafana_auth_check/; + proxy_pass $endpoint$1$is_args$args; + proxy_set_header Host $host:3000; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto https; + proxy_set_header Content-Length ""; + proxy_set_header X-Original-URI $request_uri; + + proxy_connect_timeout 300; + proxy_read_timeout 300; + proxy_send_timeout 300; + send_timeout 900; + proxy_pass_header x-csrftoken; +} + if ($request_method ~ ^(TRACE|OPTION)$) { return 405; } From 269b59e53d49d26caaab5bcfa21161b5f0a7be53 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 12 Nov 2024 15:45:36 -0500 Subject: [PATCH 06/31] - add missing arg for grafana deploy --- tdrs-backend/plg/deploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdrs-backend/plg/deploy.sh b/tdrs-backend/plg/deploy.sh index 65b90c416..9676a6966 100755 --- a/tdrs-backend/plg/deploy.sh +++ b/tdrs-backend/plg/deploy.sh @@ -116,7 +116,7 @@ fi if [ "$DEPLOY" == "plg" ]; then deploy_prometheus deploy_loki - deploy_grafana + deploy_grafana $DB_SERVICE_NAME fi if [ "$DEPLOY" == "pg-exporter" ]; then if [ "$DB_URI" == "" ]; then From b40c243dabae3c3ce3b26b7a460b423e2d5dec61 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 12 Nov 2024 16:01:11 -0500 Subject: [PATCH 07/31] - Update deploy script networking to test in dev initially --- scripts/deploy-backend.sh | 9 ++++++++- scripts/deploy-frontend.sh | 1 - 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/deploy-backend.sh b/scripts/deploy-backend.sh index 3cf5f1030..6347b4070 100755 --- a/scripts/deploy-backend.sh +++ b/scripts/deploy-backend.sh @@ -123,7 +123,14 @@ update_plg_networking() { cf target -o hhs-acf-ofa -s "$CF_SPACE" # Promtial needs to send logs to Loki - cf add-network-policy "$CGAPPNAME_BACKEND" loki -s "tanf-dev" --protocol tcp --port 8080 + cf add-network-policy "$CGAPPNAME_BACKEND" loki -s "tanf-prod" --protocol tcp --port 8080 + + # Add network policy allowing Grafana to talk to the backend and to allow the backend to talk to Grafana + # TODO: to avoid having to target the prod space, move the network policies from grafana to an app to plg/deploy.sh + # TODO: make sure netpols tunnel to grafana in poduction after dev testing + # cf add-network-policy "$CGAPPNAME_BACKEND" "grafana" --protocol tcp --port 8080 + cf add-network-policy "$CGAPPNAME_FRONTEND" "grafana" --protocol tcp --port 8080 + cf add-network-policy "grafana" "$CGAPPNAME_FRONTEND" --protocol tcp --port 80 } update_backend() diff --git a/scripts/deploy-frontend.sh b/scripts/deploy-frontend.sh index fd7206929..ddb0bcdea 100755 --- a/scripts/deploy-frontend.sh +++ b/scripts/deploy-frontend.sh @@ -13,7 +13,6 @@ CF_SPACE=${5} ENVIRONMENT=${6} env=${CF_SPACE#"tanf-"} -frontend_app_name=$(echo $CGHOSTNAME_FRONTEND | cut -d"-" -f3) # Update the Kibana name to include the environment KIBANA_BASE_URL="${CGAPPNAME_KIBANA}-${env}.apps.internal" From 94c6e0df7dbbb31cd45821e7a110ae891d98469a Mon Sep 17 00:00:00 2001 From: Jan Timpe Date: Wed, 13 Nov 2024 09:56:26 -0500 Subject: [PATCH 08/31] first draft memo --- .../parsing-log-per-file.md | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md diff --git a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md new file mode 100644 index 000000000..211d3d478 --- /dev/null +++ b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md @@ -0,0 +1,142 @@ +# Parsing log per file upload + +**Audience**: TDP Software Engineers
+**Subject**: Parsing log per file upload
+**Date**: November 4, 2024
+ +## Summary +This technical memorandum discusses the implementation of features to bring more visibility into system behavior during file parsing. This includes: +* Generating a storing a file for logs generated during the parsing run. The log file should be stored in s3 associated to the submitted data file. +* ~~Generating the parsing error report "in-band" with parsing and the log file. This should also be stored in s3 and associated to the submitted data file.~~ should be considered, but is out of scope for this memo. + +This memo provides a suggested implementation, including describing some refactoring of the parsing process to bring some modularity to the new features. + +## Background (Optional) +TDP currently uses python's `logging` utility to capture debug messages sent by the application to the terminal. These logs are captured by Cloud.gov, Prometheus, and Sentry. + +* These logs possibly leak sensitive data +* Hard to dig back through logs to file errors associated with a particular upload +* No visibility into differences in logs between parse runs for the same file + +## Out of Scope +Call out what is out of scope for this technical memorandum and should be considered in a different technical memorandum. +* Generating the parsing error report "in-band" with parsing and the log file. +* Efficiency - must write logs to file on disk and upload to s3 at the end of the parser run. this will have a memory impact as well as increase the run time of the parsing process. + +## Method/Design +This section should contain sub sections that provide general implementation details surrounding key components required to implement the feature. + +* utilize python `logging` to write to a file - https://docs.python.org/3/howto/logging.html#logging-to-a-file + * will this have side effects with `logger` used in other places of the app? + * if doesn't work, custom function to open a new file per parse run, write logs as lines in file. + - logging to two files w/ different settings - https://stackoverflow.com/questions/11232230/logging-to-two-files-with-different-settings + * logger doesn't gzip or compress the files (could potentially override or write custom `logging.FileHandler` to do this) + +* upload file to s3, provide link saved w/ datafile + * where should file link live? DataFileSummary, ReparseFileMeta, other? + * alternatively, could (potentially) stream the file creation to s3 with `smart_open` - https://github.com/piskvorky/smart_open/tree/develop + +### 1. Set up a logger instance before parse begins + +* `tdpservice.scheduling.parser_task` + * Move `logger = logging.getLogger(__name__)` out of the global (module) context and into a setup function + ```python + def setup_logger(name, filename): + handler = logging.FileHandler(filename) + logger = logging.getLogger(name) + logger.addHandler(handler) + logger.setLevel(logging.INFO) # the min level this will accept logs at + return logger, handler + ``` + * Call the new setup function at the beginning of `parse`, close the file handler at the end + ```python + def parse(data_file_id, reparse_id=None): + # ... docstrings, start of function + logger_name = f'parse-datafile-{data_file_id}-{timestamp}' + logger, handler = setup_logger(logger_name, f'{logger_name}.log') + logger.info(logger_name) + + # ... existing parser code inside the try/except + + handler.close() + # ... end of function + ``` + * Use the method-scoped `logger` instance throughout the parse routine by passing it down through the function calls + ```python + # `tdpservice.scheduling.parser_task.parse` + errors = parse_datafile(data_file, dfs, logger) + send_data_submitted_email(dfs, recipients, logger) + log_parser_exception( + data_file, + f"Encountered Database exception in parser_task.py: \n{e}", + "error", + logger + ) + log_parser_exception( + data_file, + (f"Uncaught exception while parsing datafile: {data_file.pk}! Please review the logs to " + f"see if manual intervention is required. Exception: \n{e}"), + "critical", + logger + ) + # `tdpservice.parser.parse.parse_datafile` + # remove the module-scoped logger - logger = logging.getLogger(__name__) + def parse_datafile(datafile, dfs, logger): # accept a logger instance in the function params + # this function needs to be passed to every function that uses a logger + bulk_create_errors({} , 1, flush=True, logger) # there are many, many of these + # ... etc etc etc + ``` + * Add s3 upload to `tdpservice.scheduling.parser_task.parse` + ```python + # similar to `tdpservice.search_indexes.tasks.export_queryset_to_s3_csv` + from botocore.exceptions import ClientError + from tdpservice.data_files.s3_client import S3Client + + def parse(data_file_id, reparse_id=None): + logger_name = f'parse-datafile-{data_file_id}-{timestamp}' + logger, handler = setup_logger(logger_name, f'{logger_name}.log') + logger.info(logger_name) + + # ... everything else + + handler.close() + s3 = S3Client() + try: + s3.client.upload_file(local_filename, settings.AWS_S3_DATAFILES_BUCKET_NAME, f'parsing_logs/{logger_name}.log') + except ClientError as e: + logger.error('log upload to s3 failed') # this would get logged to the file unless a new logger instance is created. should also create LogEntry here. + ``` + * Create a `ReparseFileMeta` model for every parse run + * Rename the reparse meta models to `ParseMeta` and `ParseFileMeta` + * Rename the `DataFile` `reparses` to `parses` + * Remove `file.reparses.add(meta_model)` from `tdpservice.search_indexes.management.commands.clean_and_reparse._handle_datafiles` + ```python + # `tdpservice.scheduling.parser_task.parse` + file_meta = None + + if reparse_id: + file_meta = ReparseFileMeta.objects.get(data_file_id=data_file_id, reparse_meta_id=reparse_id) + else: + file.reparses.add(meta_model) + file.save() + + file_meta.started_at = timezone.now() + file_meta.save() + ``` + * Add a new field to `ParseFileMeta` to store the s3 logs url + ```python + # end of `tdpservice.scheduling.parser_task.parse` + handler.close() + s3 = S3Client() + try: + s3.client.upload_file(local_filename, settings.AWS_S3_DATAFILES_BUCKET_NAME, f'parsing_logs/{logger_name}.log') + file_meta.logs_uri = f'parsing_logs/{logger_name}.log' + file_meta.save() + # .... the rest + ``` + +## Affected Systems +provide a list of systems this feature will depend on/change. + +## Use and Test cases to consider +provide a list of use cases and test cases to be considered when the feature is being implemented. From 6fd3a9b532c96cd99dec65aeab470ee8e67b4db5 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Wed, 13 Nov 2024 10:11:35 -0500 Subject: [PATCH 09/31] - remove prod tunnel - turn off tests --- .circleci/build-and-test/workflows.yml | 112 ++++++++++++------------- scripts/deploy-backend.sh | 2 +- 2 files changed, 57 insertions(+), 57 deletions(-) diff --git a/.circleci/build-and-test/workflows.yml b/.circleci/build-and-test/workflows.yml index 99d7c4fff..1081c40e7 100644 --- a/.circleci/build-and-test/workflows.yml +++ b/.circleci/build-and-test/workflows.yml @@ -3,15 +3,15 @@ when: << pipeline.parameters.build_and_test_all >> jobs: - secrets-check - - test-backend: - requires: - - secrets-check - - test-frontend: - requires: - - secrets-check - - test-e2e: - requires: - - secrets-check + # - test-backend: + # requires: + # - secrets-check + # - test-frontend: + # requires: + # - secrets-check + # - test-e2e: + # requires: + # - secrets-check ci-build-and-test-all: jobs: @@ -22,52 +22,52 @@ - main - master - /^release.*/ - - test-backend: - filters: - branches: - only: - - main - - master - - /^release.*/ - requires: - - secrets-check - - test-frontend: - filters: - branches: - only: - - main - - master - - /^release.*/ - requires: - - secrets-check - - test-e2e: - filters: - branches: - only: - - main - - master - - /^release.*/ - requires: - - secrets-check - - make_erd: # from ../util folder - filters: - branches: - only: - - develop - - master + # - test-backend: + # filters: + # branches: + # only: + # - main + # - master + # - /^release.*/ + # requires: + # - secrets-check + # - test-frontend: + # filters: + # branches: + # only: + # - main + # - master + # - /^release.*/ + # requires: + # - secrets-check + # - test-e2e: + # filters: + # branches: + # only: + # - main + # - master + # - /^release.*/ + # requires: + # - secrets-check + # - make_erd: # from ../util folder + # filters: + # branches: + # only: + # - develop + # - master - build-and-test-backend: - when: << pipeline.parameters.build_and_test_backend >> - jobs: - - secrets-check - - test-backend: - requires: - - secrets-check + # build-and-test-backend: + # when: << pipeline.parameters.build_and_test_backend >> + # jobs: + # - secrets-check + # - test-backend: + # requires: + # - secrets-check - build-and-test-frontend: - when: << pipeline.parameters.build_and_test_frontend >> - jobs: - - secrets-check - - test-frontend: - requires: - - secrets-check + # build-and-test-frontend: + # when: << pipeline.parameters.build_and_test_frontend >> + # jobs: + # - secrets-check + # - test-frontend: + # requires: + # - secrets-check diff --git a/scripts/deploy-backend.sh b/scripts/deploy-backend.sh index 6347b4070..ea5b607b2 100755 --- a/scripts/deploy-backend.sh +++ b/scripts/deploy-backend.sh @@ -123,7 +123,7 @@ update_plg_networking() { cf target -o hhs-acf-ofa -s "$CF_SPACE" # Promtial needs to send logs to Loki - cf add-network-policy "$CGAPPNAME_BACKEND" loki -s "tanf-prod" --protocol tcp --port 8080 + cf add-network-policy "$CGAPPNAME_BACKEND" loki --protocol tcp --port 8080 # Add network policy allowing Grafana to talk to the backend and to allow the backend to talk to Grafana # TODO: to avoid having to target the prod space, move the network policies from grafana to an app to plg/deploy.sh From f9e3b7aebaff8250016918aa3476ac2abb472edb Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Wed, 13 Nov 2024 11:16:33 -0500 Subject: [PATCH 10/31] - fix domain - fix location error --- tdrs-backend/plg/grafana/custom.ini | 2 +- tdrs-frontend/nginx/cloud.gov/locations.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tdrs-backend/plg/grafana/custom.ini b/tdrs-backend/plg/grafana/custom.ini index f6a9f81e1..ff2b035a5 100644 --- a/tdrs-backend/plg/grafana/custom.ini +++ b/tdrs-backend/plg/grafana/custom.ini @@ -40,7 +40,7 @@ http_addr = http_port = 8080 # The public facing domain name used to access grafana from a browser -domain = apps.internal +domain = grafana.apps.internal # Redirect to correct domain if host header does not match domain # Prevents DNS rebinding attacks diff --git a/tdrs-frontend/nginx/cloud.gov/locations.conf b/tdrs-frontend/nginx/cloud.gov/locations.conf index 83b964bfc..37bd413e2 100644 --- a/tdrs-frontend/nginx/cloud.gov/locations.conf +++ b/tdrs-frontend/nginx/cloud.gov/locations.conf @@ -80,7 +80,7 @@ location /grafana/ { location = /grafana_auth_check { internal; - set $endpoint http://{{env "BACKEND_HOST"}}.apps.internal::8080/grafana_auth_check/; + set $endpoint http://{{env "BACKEND_HOST"}}.apps.internal:8080/grafana_auth_check/; proxy_pass $endpoint$1$is_args$args; proxy_set_header Host $host:3000; proxy_set_header X-Real-IP $remote_addr; From 4e50d9d9227c30dffe59cbf5cb7f6cfd5852dc3c Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Wed, 13 Nov 2024 15:20:16 -0500 Subject: [PATCH 11/31] - Remove prod networking from deploy-backend.sh - update plg/deploy.sh to handle all prod based networking since net-pols are persistent - Remove unnecessary scrape config from prometheus config --- scripts/deploy-backend.sh | 20 ++++--------- tdrs-backend/plg/deploy.sh | 33 ++++++++++++++++++++-- tdrs-backend/plg/prometheus/prometheus.yml | 4 --- 3 files changed, 35 insertions(+), 22 deletions(-) diff --git a/scripts/deploy-backend.sh b/scripts/deploy-backend.sh index ea5b607b2..5b5fcb243 100755 --- a/scripts/deploy-backend.sh +++ b/scripts/deploy-backend.sh @@ -116,21 +116,11 @@ prepare_promtail() { } update_plg_networking() { - # Need to switch the space after deploy since we're not always in dev space to handle specific networking from dev - # PLG apps to the correct backend app. - cf target -o hhs-acf-ofa -s tanf-dev - cf add-network-policy prometheus "$CGAPPNAME_BACKEND" -s "$CF_SPACE" --protocol tcp --port 8080 - cf target -o hhs-acf-ofa -s "$CF_SPACE" - - # Promtial needs to send logs to Loki - cf add-network-policy "$CGAPPNAME_BACKEND" loki --protocol tcp --port 8080 - - # Add network policy allowing Grafana to talk to the backend and to allow the backend to talk to Grafana - # TODO: to avoid having to target the prod space, move the network policies from grafana to an app to plg/deploy.sh - # TODO: make sure netpols tunnel to grafana in poduction after dev testing - # cf add-network-policy "$CGAPPNAME_BACKEND" "grafana" --protocol tcp --port 8080 - cf add-network-policy "$CGAPPNAME_FRONTEND" "grafana" --protocol tcp --port 8080 - cf add-network-policy "grafana" "$CGAPPNAME_FRONTEND" --protocol tcp --port 80 + # Promtail needs to send logs to Loki + cf add-network-policy "$CGAPPNAME_BACKEND" loki -s tanf-prod --protocol tcp --port 8080 + + # Add network policy allowing frontend to talk to Grafana + cf add-network-policy "$CGAPPNAME_FRONTEND" "grafana" -s tanf-prod --protocol tcp --port 8080 } update_backend() diff --git a/tdrs-backend/plg/deploy.sh b/tdrs-backend/plg/deploy.sh index 9676a6966..b69a678fd 100755 --- a/tdrs-backend/plg/deploy.sh +++ b/tdrs-backend/plg/deploy.sh @@ -1,13 +1,21 @@ #!/bin/bash set -e +DEV_BACKEND_APPS = ("tdp-backend-raft" "tdp-backend-qasp" "tdp-backend-a11y") +STAGING_BACKEND_APPS = ("tdp-backend-develop" "tdp-backend-staging") +PROD_BACKEND = "tdp-backend-prod" + +DEV_FRONTEND_APPS = ("tdp-frontend-raft" "tdp-frontend-qasp" "tdp-frontend-a11y") +STAGING_FRONTEND_APPS = ("tdp-frontend-develop" "tdp-frontend-staging") +PROD_FRONTEND = "tdp-frontend-prod" + help() { echo "Deploy the PLG stack or a Postgres exporter to the Cloud Foundry space you're currently authenticated in." echo "Syntax: deploy.sh [-h|a|p|u|d]" echo "Options:" echo "h Print this help message." echo "a Deploy the entire PLG stack." - echo "p Deploy a postgres exporter. Requires -u and -d" + echo "p Deploy a postgres exporter, expects the environment name (dev, staging, prod) to be passed with switch. Requires -u and -d" echo "u Requires -p. The database URI the exporter should connect with." echo "d The Cloud Foundry service name of the RDS instance. Should be included with all deployments." echo @@ -32,6 +40,7 @@ deploy_pg_exporter() { # TODO: this logic needs to be updated to allow routing accross spaces based on where we want PLG to live. cf target -o hhs-acf-ofa -s tanf-prod cf add-network-policy prometheus $APP_NAME -s "$EXPORTER_SPACE" --protocol tcp --port 9187 + cf target -o hhs-acf-ofa -s "$EXPORTER_SPACE" rm $MANIFEST popd } @@ -50,12 +59,20 @@ deploy_grafana() { cf push --no-route -f $MANIFEST -t 180 --strategy rolling cf map-route $APP_NAME apps.internal --hostname $APP_NAME - # Give Grafana a public route for now. Might be able to swap to internal route later. - # cf map-route "$APP_NAME" app.cloud.gov --hostname "${APP_NAME}" # Add policy to allow grafana to talk to prometheus and loki cf add-network-policy $APP_NAME prometheus --protocol tcp --port 8080 cf add-network-policy $APP_NAME loki --protocol tcp --port 8080 + + # Add network policies to allow grafana to talk to all frontend apps in all environments + for app in ${DEV_FRONTEND_APPS[@]}; do + cf add-network-policy "grafana" "$app" -s "tanf-dev" --protocol tcp --port 80 + done + for app in ${STAGING_FRONTEND_APPS[@]}; do + cf add-network-policy "grafana" "$app" -s "tanf-staging" --protocol tcp --port 80 + done + cf add-network-policy "grafana" "$PROD_FRONTEND" --protocol tcp --port 80 + rm $DATASOURCES rm $MANIFEST popd @@ -65,6 +82,16 @@ deploy_prometheus() { pushd prometheus cf push --no-route -f manifest.yml -t 180 --strategy rolling cf map-route prometheus apps.internal --hostname prometheus + + # Add network policies to allow prometheus to talk to all backend apps in all environments + for app in ${DEV_BACKEND_APPS[@]}; do + cf add-network-policy prometheus "$app" -s "tanf-dev" --protocol tcp --port 8080 + done + for app in ${STAGING_BACKEND_APPS[@]}; do + cf add-network-policy prometheus "$app" -s "tanf-staging" --protocol tcp --port 8080 + done + cf add-network-policy prometheus "$PROD_BACKEND" --protocol tcp --port 8080 + popd } diff --git a/tdrs-backend/plg/prometheus/prometheus.yml b/tdrs-backend/plg/prometheus/prometheus.yml index a8afaaa38..8052ff189 100644 --- a/tdrs-backend/plg/prometheus/prometheus.yml +++ b/tdrs-backend/plg/prometheus/prometheus.yml @@ -45,10 +45,6 @@ scrape_configs: static_configs: - targets: ["tdp-backend-prod.apps.internal:8080"] - - job_name: "celery-exporter-raft" - static_configs: - - targets: ["celery-exporter-raft.apps.internal:9540"] - - job_name: postgres-dev static_configs: - targets: ["pg-exporter-dev.apps.internal:9187"] From 6e5632e5ce19ccb8ea4ff2c20974fc65f9d61191 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Thu, 14 Nov 2024 10:11:20 -0500 Subject: [PATCH 12/31] - Updated syntax errors in script - Gave loki 1GB memory --- tdrs-backend/plg/deploy.sh | 26 +++++++++++++------------- tdrs-backend/plg/loki/manifest.yml | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/tdrs-backend/plg/deploy.sh b/tdrs-backend/plg/deploy.sh index b69a678fd..9c269f915 100755 --- a/tdrs-backend/plg/deploy.sh +++ b/tdrs-backend/plg/deploy.sh @@ -1,13 +1,13 @@ #!/bin/bash set -e -DEV_BACKEND_APPS = ("tdp-backend-raft" "tdp-backend-qasp" "tdp-backend-a11y") -STAGING_BACKEND_APPS = ("tdp-backend-develop" "tdp-backend-staging") -PROD_BACKEND = "tdp-backend-prod" +DEV_BACKEND_APPS=("tdp-backend-raft" "tdp-backend-qasp" "tdp-backend-a11y") +STAGING_BACKEND_APPS=("tdp-backend-develop" "tdp-backend-staging") +PROD_BACKEND="tdp-backend-prod" -DEV_FRONTEND_APPS = ("tdp-frontend-raft" "tdp-frontend-qasp" "tdp-frontend-a11y") -STAGING_FRONTEND_APPS = ("tdp-frontend-develop" "tdp-frontend-staging") -PROD_FRONTEND = "tdp-frontend-prod" +DEV_FRONTEND_APPS=("tdp-frontend-raft" "tdp-frontend-qasp" "tdp-frontend-a11y") +STAGING_FRONTEND_APPS=("tdp-frontend-develop" "tdp-frontend-staging") +PROD_FRONTEND="tdp-frontend-prod" help() { echo "Deploy the PLG stack or a Postgres exporter to the Cloud Foundry space you're currently authenticated in." @@ -66,12 +66,12 @@ deploy_grafana() { # Add network policies to allow grafana to talk to all frontend apps in all environments for app in ${DEV_FRONTEND_APPS[@]}; do - cf add-network-policy "grafana" "$app" -s "tanf-dev" --protocol tcp --port 80 + cf add-network-policy "grafana" $app -s "tanf-dev" --protocol tcp --port 80 done for app in ${STAGING_FRONTEND_APPS[@]}; do - cf add-network-policy "grafana" "$app" -s "tanf-staging" --protocol tcp --port 80 + cf add-network-policy "grafana" $app -s "tanf-staging" --protocol tcp --port 80 done - cf add-network-policy "grafana" "$PROD_FRONTEND" --protocol tcp --port 80 + cf add-network-policy "grafana" $PROD_FRONTEND --protocol tcp --port 80 rm $DATASOURCES rm $MANIFEST @@ -85,12 +85,12 @@ deploy_prometheus() { # Add network policies to allow prometheus to talk to all backend apps in all environments for app in ${DEV_BACKEND_APPS[@]}; do - cf add-network-policy prometheus "$app" -s "tanf-dev" --protocol tcp --port 8080 + cf add-network-policy prometheus $app -s "tanf-dev" --protocol tcp --port 8080 done for app in ${STAGING_BACKEND_APPS[@]}; do - cf add-network-policy prometheus "$app" -s "tanf-staging" --protocol tcp --port 8080 + cf add-network-policy prometheus $app -s "tanf-staging" --protocol tcp --port 8080 done - cf add-network-policy prometheus "$PROD_BACKEND" --protocol tcp --port 8080 + cf add-network-policy prometheus $PROD_BACKEND --protocol tcp --port 8080 popd } @@ -137,7 +137,7 @@ if [ "$#" -eq 0 ]; then fi pushd "$(dirname "$0")" -if [ "$DB_URI" == "" ] || [ "$DB_SERVICE_NAME" == "" ]; then +if [ "$DB_SERVICE_NAME" == "" ]; then err_help_exit "Error: you must include a database service name." fi if [ "$DEPLOY" == "plg" ]; then diff --git a/tdrs-backend/plg/loki/manifest.yml b/tdrs-backend/plg/loki/manifest.yml index ab0d5d532..3f747daf4 100644 --- a/tdrs-backend/plg/loki/manifest.yml +++ b/tdrs-backend/plg/loki/manifest.yml @@ -1,7 +1,7 @@ version: 1 applications: - name: loki - memory: 512M + memory: 1G disk_quota: 7G instances: 1 command: | From 57ad0ccb1217cb39101c1e5b3ac31be6da6d0f29 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Thu, 14 Nov 2024 12:28:34 -0500 Subject: [PATCH 13/31] - update comment - remove todo --- tdrs-backend/plg/deploy.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tdrs-backend/plg/deploy.sh b/tdrs-backend/plg/deploy.sh index 9c269f915..01c62c6a7 100755 --- a/tdrs-backend/plg/deploy.sh +++ b/tdrs-backend/plg/deploy.sh @@ -15,7 +15,7 @@ help() { echo "Options:" echo "h Print this help message." echo "a Deploy the entire PLG stack." - echo "p Deploy a postgres exporter, expects the environment name (dev, staging, prod) to be passed with switch. Requires -u and -d" + echo "p Deploy a postgres exporter, expects the environment name (dev, staging, production) to be passed with switch. Requires -u and -d" echo "u Requires -p. The database URI the exporter should connect with." echo "d The Cloud Foundry service name of the RDS instance. Should be included with all deployments." echo @@ -37,7 +37,6 @@ deploy_pg_exporter() { cf map-route $APP_NAME apps.internal --hostname $APP_NAME # Add policy to allow prometheus to talk to pg-exporter regardless of environment - # TODO: this logic needs to be updated to allow routing accross spaces based on where we want PLG to live. cf target -o hhs-acf-ofa -s tanf-prod cf add-network-policy prometheus $APP_NAME -s "$EXPORTER_SPACE" --protocol tcp --port 9187 cf target -o hhs-acf-ofa -s "$EXPORTER_SPACE" From e36ddf90b7be19cbc18f309264261b8bf4da98de Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Thu, 14 Nov 2024 12:37:27 -0500 Subject: [PATCH 14/31] - Update grafana session settings --- tdrs-backend/plg/grafana/custom.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tdrs-backend/plg/grafana/custom.ini b/tdrs-backend/plg/grafana/custom.ini index ff2b035a5..fef040207 100644 --- a/tdrs-backend/plg/grafana/custom.ini +++ b/tdrs-backend/plg/grafana/custom.ini @@ -553,10 +553,10 @@ login_cookie_name = grafana_session disable_login = false # The maximum lifetime (duration) an authenticated user can be inactive before being required to login at next visit. Default is 7 days (7d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month). The lifetime resets at each successful token rotation (token_rotation_interval_minutes). -login_maximum_inactive_lifetime_duration = +login_maximum_inactive_lifetime_duration = 30m # The maximum lifetime (duration) an authenticated user can be logged in since login time before being required to login. Default is 30 days (30d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month). -login_maximum_lifetime_duration = +login_maximum_lifetime_duration = 1d # How often should auth tokens be rotated for authenticated users when being active. The default is each 10 minutes. token_rotation_interval_minutes = 10 From 08a8604294c64a3b7c8ded835919cfc52dd5a441 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Thu, 14 Nov 2024 12:40:40 -0500 Subject: [PATCH 15/31] - remove very annoying log messages --- tdrs-backend/tdpservice/users/api/authorization_check.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tdrs-backend/tdpservice/users/api/authorization_check.py b/tdrs-backend/tdpservice/users/api/authorization_check.py index 60da3a17b..c070027dc 100644 --- a/tdrs-backend/tdpservice/users/api/authorization_check.py +++ b/tdrs-backend/tdpservice/users/api/authorization_check.py @@ -66,10 +66,9 @@ def get(self, request, *args, **kwargs): user_in_valid_group = user.is_ofa_sys_admin or user.is_digit_team if (user.hhs_id is not None and user_in_valid_group) or settings.BYPASS_OFA_AUTH: - logger.debug(f"User: {user} has correct authentication credentials. Allowing access to Kibana.") return HttpResponse(status=200) else: - logger.debug(f"User: {user} has incorrect authentication credentials. Not allowing access to Kibana.") + logger.warning(f"User: {user} has incorrect authentication credentials. Not allowing access to Kibana.") return HttpResponse(status=401) class GrafanaAuthorizationCheck(APIView): @@ -86,8 +85,7 @@ def get(self, request, *args, **kwargs): user_in_valid_group = user.is_ofa_sys_admin or user.is_developer if user_in_valid_group: - logger.debug(f"User: {user} has correct authentication credentials. Allowing access to Grafana.") return HttpResponse(status=200) else: - logger.debug(f"User: {user} has incorrect authentication credentials. Not allowing access to Grafana.") + logger.warning(f"User: {user} has incorrect authentication credentials. Not allowing access to Grafana.") return HttpResponse(status=401) From b3f57ad42a875018dbde2f0e98bc75c795bcae17 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Thu, 14 Nov 2024 13:05:19 -0500 Subject: [PATCH 16/31] - Move all PLG networking to plg deploy script --- scripts/deploy-backend.sh | 11 ----------- tdrs-backend/plg/deploy.sh | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/scripts/deploy-backend.sh b/scripts/deploy-backend.sh index 5b5fcb243..c416e595c 100755 --- a/scripts/deploy-backend.sh +++ b/scripts/deploy-backend.sh @@ -115,14 +115,6 @@ prepare_promtail() { popd } -update_plg_networking() { - # Promtail needs to send logs to Loki - cf add-network-policy "$CGAPPNAME_BACKEND" loki -s tanf-prod --protocol tcp --port 8080 - - # Add network policy allowing frontend to talk to Grafana - cf add-network-policy "$CGAPPNAME_FRONTEND" "grafana" -s tanf-prod --protocol tcp --port 8080 -} - update_backend() { cd tdrs-backend || exit @@ -161,9 +153,6 @@ update_backend() # Add network policy to allow frontend to access backend cf add-network-policy "$CGAPPNAME_FRONTEND" "$CGAPPNAME_BACKEND" --protocol tcp --port 8080 - # Add PLG routing - update_plg_networking - if [ "$CF_SPACE" = "tanf-prod" ]; then # Add network policy to allow backend to access tanf-prod services cf add-network-policy "$CGAPPNAME_BACKEND" clamav-rest --protocol tcp --port 9000 diff --git a/tdrs-backend/plg/deploy.sh b/tdrs-backend/plg/deploy.sh index 01c62c6a7..c411f5457 100755 --- a/tdrs-backend/plg/deploy.sh +++ b/tdrs-backend/plg/deploy.sh @@ -101,6 +101,25 @@ deploy_loki() { popd } +setup_extra_net_pols() { + # Add network policies to allow frontend/backend to talk to grafana/loki + cf target -o hhs-acf-ofa -s tanf-dev + for i in ${!DEV_BACKEND_APPS[@]}; do + cf add-network-policy ${DEV_FRONTEND_APPS[$i]} grafana -s tanf-prod --protocol tcp --port 8080 + cf add-network-policy ${DEV_BACKEND_APPS[$i]} loki -s tanf-prod --protocol tcp --port 8080 + done + + cf target -o hhs-acf-ofa -s tanf-staging + for i in ${!STAGING_BACKEND_APPS[@]}; do + cf add-network-policy ${STAGING_FRONTEND_APPS[$i]} grafana -s tanf-prod --protocol tcp --port 8080 + cf add-network-policy ${STAGING_BACKEND_APPS[$i]} loki -s tanf-prod --protocol tcp --port 8080 + done + + cf target -o hhs-acf-ofa -s tanf-prod + cf add-network-policy $PROD_FRONTEND grafana -s tanf-prod --protocol tcp --port 8080 + cf add-network-policy $PROD_BACKEND loki -s tanf-prod --protocol tcp --port 8080 +} + err_help_exit() { echo $1 echo @@ -143,6 +162,7 @@ if [ "$DEPLOY" == "plg" ]; then deploy_prometheus deploy_loki deploy_grafana $DB_SERVICE_NAME + setup_extra_net_pols fi if [ "$DEPLOY" == "pg-exporter" ]; then if [ "$DB_URI" == "" ]; then From 44d0923db4b7f68b76731afa2def198eeb6ef970 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Thu, 14 Nov 2024 14:50:41 -0500 Subject: [PATCH 17/31] - re add tests --- .circleci/build-and-test/workflows.yml | 112 ++++++++++++------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/.circleci/build-and-test/workflows.yml b/.circleci/build-and-test/workflows.yml index 1081c40e7..99d7c4fff 100644 --- a/.circleci/build-and-test/workflows.yml +++ b/.circleci/build-and-test/workflows.yml @@ -3,15 +3,15 @@ when: << pipeline.parameters.build_and_test_all >> jobs: - secrets-check - # - test-backend: - # requires: - # - secrets-check - # - test-frontend: - # requires: - # - secrets-check - # - test-e2e: - # requires: - # - secrets-check + - test-backend: + requires: + - secrets-check + - test-frontend: + requires: + - secrets-check + - test-e2e: + requires: + - secrets-check ci-build-and-test-all: jobs: @@ -22,52 +22,52 @@ - main - master - /^release.*/ - # - test-backend: - # filters: - # branches: - # only: - # - main - # - master - # - /^release.*/ - # requires: - # - secrets-check - # - test-frontend: - # filters: - # branches: - # only: - # - main - # - master - # - /^release.*/ - # requires: - # - secrets-check - # - test-e2e: - # filters: - # branches: - # only: - # - main - # - master - # - /^release.*/ - # requires: - # - secrets-check - # - make_erd: # from ../util folder - # filters: - # branches: - # only: - # - develop - # - master + - test-backend: + filters: + branches: + only: + - main + - master + - /^release.*/ + requires: + - secrets-check + - test-frontend: + filters: + branches: + only: + - main + - master + - /^release.*/ + requires: + - secrets-check + - test-e2e: + filters: + branches: + only: + - main + - master + - /^release.*/ + requires: + - secrets-check + - make_erd: # from ../util folder + filters: + branches: + only: + - develop + - master - # build-and-test-backend: - # when: << pipeline.parameters.build_and_test_backend >> - # jobs: - # - secrets-check - # - test-backend: - # requires: - # - secrets-check + build-and-test-backend: + when: << pipeline.parameters.build_and_test_backend >> + jobs: + - secrets-check + - test-backend: + requires: + - secrets-check - # build-and-test-frontend: - # when: << pipeline.parameters.build_and_test_frontend >> - # jobs: - # - secrets-check - # - test-frontend: - # requires: - # - secrets-check + build-and-test-frontend: + when: << pipeline.parameters.build_and_test_frontend >> + jobs: + - secrets-check + - test-frontend: + requires: + - secrets-check From a6f7352560259a101e02c2f652fbd0b4a359b83b Mon Sep 17 00:00:00 2001 From: Jan Timpe Date: Fri, 15 Nov 2024 09:45:44 -0500 Subject: [PATCH 18/31] wip singleton class, migrations --- .../parsing-log-per-file.md | 48 ++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md index 211d3d478..28be008b0 100644 --- a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md +++ b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md @@ -86,7 +86,50 @@ This section should contain sub sections that provide general implementation det bulk_create_errors({} , 1, flush=True, logger) # there are many, many of these # ... etc etc etc ``` + * Or, create some sort of singleton class so that downstream functions can access the per-parse logger + ```python + import logging + + def setup_logger(name, filename): + handler = logging.FileHandler(filename) + logger = logging.getLogger(name) + logger.addHandler(handler) + logger.setLevel(logging.INFO) # the min level this will accept logs at + return logger, handler + + class ParseLogContextHandler: + """Caches an instance of logger for use throughout the parse routine.""" + + def __init__(self, logger_instance): + self.logger_instance = None + self.handler_instance = None + + def set_logger_instance(self, logger_name): + """Creates and caches a new instance of logger.""" + logger, handler = setup_logger(logger_name, f'{logger_name}.log') + self.logger_instance = logger + self.handler_instance = handler + + def get_logger_instance(self): + """Returns the cached instance of logger.""" + return self.logger_instance + + def clear_logger_instance(self): + """Closes and clears the parse logger instance.""" + self.handler_instance.close() + # upload to s3 + + # in settings + PARSE_LOG_CONTEXT_HANDLER = ParseLogContextHandler() + + # in parser functions + settings.PARSE_LOG_CONTEXT_MANAGER.set_logger_instance(f'parse-log-{data_file_id}') + logger = settings.PARSE_LOG_CONTEXT_MANAGER.get_logger_instance() + ``` + * memoized factory function * Add s3 upload to `tdpservice.scheduling.parser_task.parse` + * upload alongside submitted file + * include reparse id if applicable ```python # similar to `tdpservice.search_indexes.tasks.export_queryset_to_s3_csv` from botocore.exceptions import ClientError @@ -106,10 +149,11 @@ This section should contain sub sections that provide general implementation det except ClientError as e: logger.error('log upload to s3 failed') # this would get logged to the file unless a new logger instance is created. should also create LogEntry here. ``` - * Create a `ReparseFileMeta` model for every parse run - * Rename the reparse meta models to `ParseMeta` and `ParseFileMeta` + * (optional or later step) - Create a `ReparseFileMeta` model for every parse run + * Rename the reparse meta models to `ParseMeta` and `ParseFileMeta` (migration is possible) * Rename the `DataFile` `reparses` to `parses` * Remove `file.reparses.add(meta_model)` from `tdpservice.search_indexes.management.commands.clean_and_reparse._handle_datafiles` + * would this require a custom/large migration? could create a separate model ```python # `tdpservice.scheduling.parser_task.parse` file_meta = None From 743d580b35e4d942b866bc28e7b17e781cd23a64 Mon Sep 17 00:00:00 2001 From: Jan Timpe Date: Mon, 18 Nov 2024 12:19:21 -0500 Subject: [PATCH 19/31] finalize memo --- .../parsing-log-per-file.md | 398 ++++++++++++------ 1 file changed, 262 insertions(+), 136 deletions(-) diff --git a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md index 28be008b0..2ae17845f 100644 --- a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md +++ b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md @@ -7,11 +7,10 @@ ## Summary This technical memorandum discusses the implementation of features to bring more visibility into system behavior during file parsing. This includes: * Generating a storing a file for logs generated during the parsing run. The log file should be stored in s3 associated to the submitted data file. -* ~~Generating the parsing error report "in-band" with parsing and the log file. This should also be stored in s3 and associated to the submitted data file.~~ should be considered, but is out of scope for this memo. This memo provides a suggested implementation, including describing some refactoring of the parsing process to bring some modularity to the new features. -## Background (Optional) +## Background TDP currently uses python's `logging` utility to capture debug messages sent by the application to the terminal. These logs are captured by Cloud.gov, Prometheus, and Sentry. * These logs possibly leak sensitive data @@ -20,167 +19,294 @@ TDP currently uses python's `logging` utility to capture debug messages sent by ## Out of Scope Call out what is out of scope for this technical memorandum and should be considered in a different technical memorandum. -* Generating the parsing error report "in-band" with parsing and the log file. -* Efficiency - must write logs to file on disk and upload to s3 at the end of the parser run. this will have a memory impact as well as increase the run time of the parsing process. +* Efficiency - must write logs to file on disk and upload to s3 at the end of the parser run. + * This will have a memory impact and a disk space impact, as well as increase the run time of the parsing process (network upload). + * The singleton solution explored here will additionally increase memory utilization. + * Some mitigation techniques are mentioned, but not implemented. +* Association of the parse log file with a model in the Django Admin Console. + * An MVP of this feature only includes uploading the resulting file to s3, alongside the datafile submission. + * An exploration of this was done in Method/Design Step 6, but is out of scope for this work. ## Method/Design -This section should contain sub sections that provide general implementation details surrounding key components required to implement the feature. -* utilize python `logging` to write to a file - https://docs.python.org/3/howto/logging.html#logging-to-a-file - * will this have side effects with `logger` used in other places of the app? - * if doesn't work, custom function to open a new file per parse run, write logs as lines in file. - - logging to two files w/ different settings - https://stackoverflow.com/questions/11232230/logging-to-two-files-with-different-settings - * logger doesn't gzip or compress the files (could potentially override or write custom `logging.FileHandler` to do this) +In general, this solution requires two simple parts: -* upload file to s3, provide link saved w/ datafile - * where should file link live? DataFileSummary, ReparseFileMeta, other? - * alternatively, could (potentially) stream the file creation to s3 with `smart_open` - https://github.com/piskvorky/smart_open/tree/develop - -### 1. Set up a logger instance before parse begins - -* `tdpservice.scheduling.parser_task` - * Move `logger = logging.getLogger(__name__)` out of the global (module) context and into a setup function - ```python - def setup_logger(name, filename): - handler = logging.FileHandler(filename) - logger = logging.getLogger(name) - logger.addHandler(handler) - logger.setLevel(logging.INFO) # the min level this will accept logs at - return logger, handler - ``` - * Call the new setup function at the beginning of `parse`, close the file handler at the end - ```python - def parse(data_file_id, reparse_id=None): - # ... docstrings, start of function - logger_name = f'parse-datafile-{data_file_id}-{timestamp}' - logger, handler = setup_logger(logger_name, f'{logger_name}.log') - logger.info(logger_name) - - # ... existing parser code inside the try/except - - handler.close() - # ... end of function - ``` - * Use the method-scoped `logger` instance throughout the parse routine by passing it down through the function calls - ```python - # `tdpservice.scheduling.parser_task.parse` - errors = parse_datafile(data_file, dfs, logger) - send_data_submitted_email(dfs, recipients, logger) - log_parser_exception( - data_file, - f"Encountered Database exception in parser_task.py: \n{e}", - "error", - logger - ) - log_parser_exception( - data_file, - (f"Uncaught exception while parsing datafile: {data_file.pk}! Please review the logs to " - f"see if manual intervention is required. Exception: \n{e}"), - "critical", - logger - ) - # `tdpservice.parser.parse.parse_datafile` - # remove the module-scoped logger - logger = logging.getLogger(__name__) - def parse_datafile(datafile, dfs, logger): # accept a logger instance in the function params - # this function needs to be passed to every function that uses a logger - bulk_create_errors({} , 1, flush=True, logger) # there are many, many of these - # ... etc etc etc - ``` - * Or, create some sort of singleton class so that downstream functions can access the per-parse logger +1. Captures the log output during parsing of a datafile and write it to a file on disk + * This solution utilizes the `FileHandler` already included as part of python's `logging` utility, which we use extensively throughout TDP (including throughout the parser). `FileHandler` allows log output to be written to a file on disk + * [Documentation](https://docs.python.org/3/howto/logging.html#logging-to-a-file) + * Example: ```python import logging + def setup_logger(name, filename): handler = logging.FileHandler(filename) logger = logging.getLogger(name) logger.addHandler(handler) - logger.setLevel(logging.INFO) # the min level this will accept logs at + logger.setLevel(logging.INFO) return logger, handler - class ParseLogContextHandler: - """Caches an instance of logger for use throughout the parse routine.""" - def __init__(self, logger_instance): - self.logger_instance = None - self.handler_instance = None + logger, handler = setup_logger('test123', 'test123.log') + logger.info('test123') + logger.warning('asdddddddd3') + logger.error('asdfasdf') + handler.close() + ``` + * This step can be accomplished using a custom-built file logger. However, since `logging` is already used extensively throughout the project, we chose to extend this existing functionality rather than have to replace it for a single use-case. + * This comes with the drawback that `logging.FileHandler` doesn't compress the resulting file by default. We could potentially address this by overriding or creating a custom version of `logging.FileHandler`. - def set_logger_instance(self, logger_name): - """Creates and caches a new instance of logger.""" - logger, handler = setup_logger(logger_name, f'{logger_name}.log') - self.logger_instance = logger - self.handler_instance = handler +2. Upload the resulting file to s3 once parsing completes + * Once parsing completes and a file containing logs is written to disk, we can use existing tooling in our application to upload the resulting file to s3. An example of this is already implemented in `tdpservice.search_indexes.tasks.export_queryset_to_s3_csv` + * Example + ```python + from botocore.exceptions import ClientError + from tdpservice.data_files.s3_client import S3Client - def get_logger_instance(self): - """Returns the cached instance of logger.""" - return self.logger_instance + s3 = S3Client() + try: + s3.client.upload_file(local_filename, settings.AWS_S3_DATAFILES_BUCKET_NAME, s3_file_path) + except ClientError as e: + logger.error('upload to s3 failed') + ``` + * This simply uploads a local file to s3, using the `boto` library. + * To limit disk usage, we could potentially write logs to s3 on-the-fly as parsing happens using the `smart_open` library. + * https://github.com/piskvorky/smart_open/tree/develop + * This would incur additional network timing/cost as parsing runs, as logs would need to be transmitted to s3 many times during the parse execution, rather than once after. - def clear_logger_instance(self): - """Closes and clears the parse logger instance.""" - self.handler_instance.close() - # upload to s3 - # in settings - PARSE_LOG_CONTEXT_HANDLER = ParseLogContextHandler() +The biggest complicating factor to implementing this feature is allowing functions in multiple modules throughout the app to access the same instance of the logger. In general, instances of `logging` are scoped to the module-level (file-level) via a call to `logging.getLogger(__name__)` (where `__name__` is the module name). This allows all functions within a module to access the same logger instance. In our case, however, an instance of `logging` needs to be scoped to an individual run of the parsing engine: a logger instance is created when a file starts parsing, is used by functions in multiple modules throughout the app, then is destroyed once parsing is completed and the file is transferred to s3. This means a module-scoping of `logging` won't work, and leaves us with a couple options: +* Create a logger instance that gets passed through function parameters to other areas of the parser (functional approach) + ```python + # `tdpservice.scheduling.parser_task.parse` + logger = setup_logger('parse-log', 'parse-log-123.log') + errors = parse_datafile(data_file, dfs, logger) + # `logger` also needs to be passed by `parse_datafile()` to other funcs + ``` + * This requires a lot of passing of variables, creating the opportunity to miss a module or function +* Create a global (singleton) class that holds on to instances of `logging` so that other functions can access them. + ```python + class ParseLogContextManager: + """Caches an instance of logger for use throughout the parse routine.""" - # in parser functions - settings.PARSE_LOG_CONTEXT_MANAGER.set_logger_instance(f'parse-log-{data_file_id}') - logger = settings.PARSE_LOG_CONTEXT_MANAGER.get_logger_instance() - ``` - * memoized factory function - * Add s3 upload to `tdpservice.scheduling.parser_task.parse` - * upload alongside submitted file - * include reparse id if applicable - ```python - # similar to `tdpservice.search_indexes.tasks.export_queryset_to_s3_csv` - from botocore.exceptions import ClientError - from tdpservice.data_files.s3_client import S3Client + def __init__(self, logger_instance): + self.logger_instance = None + self.handler_instance = None - def parse(data_file_id, reparse_id=None): - logger_name = f'parse-datafile-{data_file_id}-{timestamp}' + def set_logger_instance(self, logger_name): + """Creates and caches a new instance of logger.""" logger, handler = setup_logger(logger_name, f'{logger_name}.log') - logger.info(logger_name) + self.logger_instance = logger + self.handler_instance = handler - # ... everything else + def get_logger_instance(self): + """Returns the cached instance of logger.""" + return self.logger_instance - handler.close() - s3 = S3Client() - try: - s3.client.upload_file(local_filename, settings.AWS_S3_DATAFILES_BUCKET_NAME, f'parsing_logs/{logger_name}.log') - except ClientError as e: - logger.error('log upload to s3 failed') # this would get logged to the file unless a new logger instance is created. should also create LogEntry here. - ``` - * (optional or later step) - Create a `ReparseFileMeta` model for every parse run - * Rename the reparse meta models to `ParseMeta` and `ParseFileMeta` (migration is possible) - * Rename the `DataFile` `reparses` to `parses` - * Remove `file.reparses.add(meta_model)` from `tdpservice.search_indexes.management.commands.clean_and_reparse._handle_datafiles` - * would this require a custom/large migration? could create a separate model - ```python - # `tdpservice.scheduling.parser_task.parse` - file_meta = None + def clear_logger_instance(self): + """Closes and clears the parse logger instance.""" + self.handler_instance.close() + # upload to s3 + ``` + * This is easier to implement as it doesn't require modifying every function call in the parser + * This likely has a higher memory impact, though, as an instance of this class will be present in memory for every instance of the application + * More work has to be done to ensure thread-safety if we ever increase the number of worker threads (which could theoretically share an instance of the singleton for multiple concurrent parse runs). This "memoization" is included as part of the implementation details below - if reparse_id: - file_meta = ReparseFileMeta.objects.get(data_file_id=data_file_id, reparse_meta_id=reparse_id) - else: - file.reparses.add(meta_model) - file.save() +The remainder of this memo will focus on the singleton design pattern as the solution to implement. - file_meta.started_at = timezone.now() - file_meta.save() - ``` +### 1. Create the singleton class and initialize an instance in `settings` + +In `tdpservice.parsers.parse_log_context_manager` (or similar), create the new singleton class + +```python +import logging + +def setup_logger(name, filename): + pass + + +class ParseLogContextManager: + """Caches an instance of logger for use throughout the parse routine.""" + + def __init__(self, logger_instance): + self.loggers = {} +``` + +In `settings.common`, intialize an instance of the singleton. Settings is used because Django already ensures there is only one instance of the settings object per application - it's already a singleton! + +```python +from tdpservice.parsers.parse_log_context_manager import ParseLogContextManager + +PARSE_LOG_CONTEXT_MANAGER = ParseLogContextManager() +``` + + +### 2. Initialize a new logger in `parser_task` + +In `tdpservice.scheduling.parser_task`, import settings +```python +from django.conf import settings +``` + +Then create a new logger instance at the beginning of the `parse` function +```python +settings.PARSE_LOG_CONTEXT_MANAGER.create_logger_instance(datafile_id, reparse_id) +``` + +At the end of the `parse` function, close the instance +```python +settings.PARSE_LOG_CONTEXT_MANAGER.clear_logger_instance(datafile_id, reparse_id) +``` + + +### 3. Implement the remainder of `ParseLogContextManager` + +Now, in `tdpservice.parsers.parse_log_context_manager`, we need to implement `ParseLogContextManager`'s remaining methods +```python +class ParseLogContextManager: + """Caches an instance of logger for use throughout the parse routine.""" + + def __init__(self, logger_instance): + self.loggers = {} + + # can utilize this to avoid having to pass both params every time + # (also accept `logger_name` as the param in functions below) + def _get_logger_name(self, datafile_id, reparse_id): + if reparse_id is None: + return f"parse-log-{datafile_id}" + return f"parse-log-{datafile_id}-{reparse_id}" + + # this implements the memoization technique to store one + # instance of logger per datafile_id/reparse_id + def set_logger_instance(self, datafile_id, reparse_id): + """Creates and caches a new instance of logger.""" + logger_name = self._get_logger_name(datafile_id, reparse_id) + logger, handler = setup_logger(logger_name, f'{logger_name}.log') + + self.loggers[logger_name] = { + 'logger': logger, + 'handler': handler + } + + def get_logger_instance(self, datafile_id, reparse_id): + """Returns the cached instance of logger.""" + logger_name = self._get_logger_name(datafile_id, reparse_id) + return self.loggers[logger_name].['logger'] + + def clear_logger_instance(self, datafile_id, reparse_id): + """Closes and clears the parse logger instance.""" + logger_name = self._get_logger_name(datafile_id, reparse_id) + self.loggers[logger_name].['handler'].close() + # upload to s3 +``` + +`setup_logger` can be implemented like so: +```python +def setup_logger(name, filename): + handler = logging.FileHandler(filename) + logger = logging.getLogger(name) + logger.addHandler(handler) + logger.setLevel(logging.DEBUG) # the min level this will accept logs at + return logger, handler +``` + + +### 4. Use `ParseLogContextManager` throughout the parser + +Currently, modules in `tdpservice.parsers` use `logging` scoped at the module level, with a line like this at the top of the file: +```python +logger = logging.getLogger(__name__) +``` +REMOVE this line. + + +Then, import settings +```python +from django.conf import settings +``` + +Then, INSIDE a function definition (with access to `datafile_id` and `reparse_id`), get the logger from the new singleton class +```python +logger = settings.PARSE_LOG_CONTEXT_MANAGER.get_logger_instance(datafile_id, reparse_id) +``` + +This instance of `logger` can be used the same as the previous instance. This change needs to be made in every module and function where logs should be written to the parse log file. This includes +* `tdpservice.scheduling.parser_task` +* `tdpservice.parsers.parse` +* `tdpservice.parsers.case_consistency_validator` +* `tdpservice.parsers.duplicate_manager` +* `tdpservice.parsers.fields` +* `tdpservice.parsers.row_schema` +* `tdpservice.parsers.util` + + +### 5. Implement the s3 upload + +The s3 upload can be implemented with the following simple code: +```python +from botocore.exceptions import ClientError +from tdpservice.data_files.s3_client import S3Client + +s3 = S3Client() +try: + s3.client.upload_file(local_filename, settings.AWS_S3_DATAFILES_BUCKET_NAME, s3_file_path) +except ClientError as e: + logger.error('upload to s3 failed') +``` + +This just needs to be placed where it makes the most sense. Make sure `handler.close()` has been called (such as is done in `ParseLogContextManager.clear_logger_context`). + +### 6. (Optional) Associate logs to a submission in the Django Admin Console + +To associate the uploaded log file with a submission in the admin console, we can +1. Add the s3 url to the existing `DataFile` or `DataFileSummary` models + * These get wiped out with every reparse, so we would be unable to see log differences between parses of the same submission. +2. Modify `ReparseFileMeta` to be created for every parse run (not just reparses), effectively creating a `ParseFileMeta` + * Addresses reparses wiping out previous logs + * Allows us to track all reparse meta stats for regular parse runs as well + * Requires substantial modification of the reparse command and the parser routine, as well as numerous migrations. +3. Create a new model solely for storing the s3 url of parser logs. + * Easier implementation + * Would have to manually correlate with `ReparseMeta` and `ReparseFileMeta` for reparse visibility. + + +A light exploration of option 2 above was done for this technical memorandum, simply to prove the migrations were allowed. The implementation steps below are incomplete and untested +* Rename the reparse meta models to `ParseMeta` and `ParseFileMeta` (migration is possible) +* Rename the `DataFile` `reparses` to `parses` +* Remove `file.reparses.add(meta_model)` from `tdpservice.search_indexes.management.commands.clean_and_reparse._handle_datafiles` and modify `tdpservice.scheduling.parser_task.parse` to create the meta model instead. + ```python + # `tdpservice.scheduling.parser_task.parse` + file_meta = None + + if reparse_id: + file_meta = ReparseFileMeta.objects.get(data_file_id=data_file_id, reparse_meta_id=reparse_id) + else: + file.reparses.add(meta_model) + file.save() + + file_meta.started_at = timezone.now() + file_meta.save() + ``` * Add a new field to `ParseFileMeta` to store the s3 logs url - ```python - # end of `tdpservice.scheduling.parser_task.parse` - handler.close() - s3 = S3Client() - try: - s3.client.upload_file(local_filename, settings.AWS_S3_DATAFILES_BUCKET_NAME, f'parsing_logs/{logger_name}.log') - file_meta.logs_uri = f'parsing_logs/{logger_name}.log' - file_meta.save() - # .... the rest - ``` + ```python + # end of `tdpservice.scheduling.parser_task.parse` + handler.close() + s3 = S3Client() + try: + s3.client.upload_file(local_filename, settings.AWS_S3_DATAFILES_BUCKET_NAME, f'parsing_logs/{logger_name}.log') + file_meta.logs_uri = f'parsing_logs/{logger_name}.log' + file_meta.save() + # .... the rest + ``` ## Affected Systems -provide a list of systems this feature will depend on/change. +* Parser routine - everything from the celery task to every called function needs access to `datafile_id` and `reparse_id` (or the generated `logger_name`) so that relevant functions can access the parser context +* Settings - will store a new singleton (global class; has a memory impact) +* Application server will be storing temporary/intermediary log file before it is uploaded to s3 ## Use and Test cases to consider -provide a list of use cases and test cases to be considered when the feature is being implemented. +* Ensure all types of parser errors are logged to the file + * every level (debug, info, error) + * every class (parser task, parser, case consistency, duplicate management, row schema, fields, transform fields) + * parser exceptions (handled and unhandled) +* Test large file uploads with many errors. Test concurrent uploads of large files. \ No newline at end of file From 181e6714bebc8b04ee15657a7131e00d53185aaf Mon Sep 17 00:00:00 2001 From: Jan Timpe Date: Mon, 18 Nov 2024 12:22:24 -0500 Subject: [PATCH 20/31] cleanup --- .../tech-memos/parsing-log-per-file/parsing-log-per-file.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md index 2ae17845f..39c124ca1 100644 --- a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md +++ b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md @@ -6,9 +6,9 @@ ## Summary This technical memorandum discusses the implementation of features to bring more visibility into system behavior during file parsing. This includes: -* Generating a storing a file for logs generated during the parsing run. The log file should be stored in s3 associated to the submitted data file. +* Generating a storing a file for logs generated during the parsing run. The log file should be stored in s3, alongside the submitted datafile. -This memo provides a suggested implementation, including describing some refactoring of the parsing process to bring some modularity to the new features. +This memo discussed various proposed implementations and the benefits/drawbacks of each, then provides a suggested implementation taking these factors into consideration. ## Background TDP currently uses python's `logging` utility to capture debug messages sent by the application to the terminal. These logs are captured by Cloud.gov, Prometheus, and Sentry. From 2b515d9750d8690a869c81526c36cd4e1903c194 Mon Sep 17 00:00:00 2001 From: jtimpe <111305129+jtimpe@users.noreply.github.com> Date: Tue, 19 Nov 2024 08:43:43 -0500 Subject: [PATCH 21/31] Update docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md Co-authored-by: Eric Lipe <125676261+elipe17@users.noreply.github.com> --- .../tech-memos/parsing-log-per-file/parsing-log-per-file.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md index 39c124ca1..a8edd79f2 100644 --- a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md +++ b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md @@ -6,7 +6,7 @@ ## Summary This technical memorandum discusses the implementation of features to bring more visibility into system behavior during file parsing. This includes: -* Generating a storing a file for logs generated during the parsing run. The log file should be stored in s3, alongside the submitted datafile. +* Generating and storing a file for logs generated during the parsing run. The log file should be stored in s3, alongside the submitted datafile. This memo discussed various proposed implementations and the benefits/drawbacks of each, then provides a suggested implementation taking these factors into consideration. From 85a17108cc24e890d1e8a7795cf72457b2c0da01 Mon Sep 17 00:00:00 2001 From: jtimpe <111305129+jtimpe@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:35:19 -0500 Subject: [PATCH 22/31] Update docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md Co-authored-by: Eric Lipe <125676261+elipe17@users.noreply.github.com> --- .../tech-memos/parsing-log-per-file/parsing-log-per-file.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md index a8edd79f2..58976d04b 100644 --- a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md +++ b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md @@ -31,7 +31,7 @@ Call out what is out of scope for this technical memorandum and should be consid In general, this solution requires two simple parts: -1. Captures the log output during parsing of a datafile and write it to a file on disk +1. Capture the log output during parsing of a datafile and write it to a file on disk * This solution utilizes the `FileHandler` already included as part of python's `logging` utility, which we use extensively throughout TDP (including throughout the parser). `FileHandler` allows log output to be written to a file on disk * [Documentation](https://docs.python.org/3/howto/logging.html#logging-to-a-file) * Example: From 96f45d4c9b702be3522c2776134050c450772429 Mon Sep 17 00:00:00 2001 From: jtimpe <111305129+jtimpe@users.noreply.github.com> Date: Tue, 19 Nov 2024 10:26:25 -0500 Subject: [PATCH 23/31] Update docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md Co-authored-by: Eric Lipe <125676261+elipe17@users.noreply.github.com> --- .../tech-memos/parsing-log-per-file/parsing-log-per-file.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md index 58976d04b..5a0deddf8 100644 --- a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md +++ b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md @@ -8,7 +8,7 @@ This technical memorandum discusses the implementation of features to bring more visibility into system behavior during file parsing. This includes: * Generating and storing a file for logs generated during the parsing run. The log file should be stored in s3, alongside the submitted datafile. -This memo discussed various proposed implementations and the benefits/drawbacks of each, then provides a suggested implementation taking these factors into consideration. +This memo discusses various implementations and the benefits/drawbacks of each, then provides a suggested implementation taking these factors into consideration. ## Background TDP currently uses python's `logging` utility to capture debug messages sent by the application to the terminal. These logs are captured by Cloud.gov, Prometheus, and Sentry. From 2b07c68b9be9b03b1d4d2c840b36782dbce6c36e Mon Sep 17 00:00:00 2001 From: Jan Timpe Date: Tue, 19 Nov 2024 15:55:44 -0500 Subject: [PATCH 24/31] add s3 explanation --- .../tech-memos/parsing-log-per-file/parsing-log-per-file.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md index 5a0deddf8..5aac5cb82 100644 --- a/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md +++ b/docs/Technical-Documentation/tech-memos/parsing-log-per-file/parsing-log-per-file.md @@ -56,7 +56,10 @@ In general, this solution requires two simple parts: * This step can be accomplished using a custom-built file logger. However, since `logging` is already used extensively throughout the project, we chose to extend this existing functionality rather than have to replace it for a single use-case. * This comes with the drawback that `logging.FileHandler` doesn't compress the resulting file by default. We could potentially address this by overriding or creating a custom version of `logging.FileHandler`. -2. Upload the resulting file to s3 once parsing completes +2. Persist the resulting file once parsing completes + * s3 is a popular file storage location, already in use throughout our application. + * s3 provides familiarity for end users, as well as allowing them to access log files alongside the datafile for which they are associated. + * s3 has a 5TB file limit; large datafiles and log files, as well as frequent reparsing, increase our usage. We may consider implementing an infrequent-access tier bucket for log files if they aren't expected to be downloaded often. * Once parsing completes and a file containing logs is written to disk, we can use existing tooling in our application to upload the resulting file to s3. An example of this is already implemented in `tdpservice.search_indexes.tasks.export_queryset_to_s3_csv` * Example ```python From c23098542e66475c585e72b51678966a276d3bb2 Mon Sep 17 00:00:00 2001 From: Andrew <84722778+andrew-jameson@users.noreply.github.com> Date: Fri, 22 Nov 2024 09:24:08 -0500 Subject: [PATCH 25/31] transparent background (#3312) --- docs/Security-Compliance/diagram.png | Bin 219996 -> 222916 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/Security-Compliance/diagram.png b/docs/Security-Compliance/diagram.png index 95f10ed10ae421c0ab0f1959159e30a6eefd334f..6f367531b7c293d6c33e5ef38475d91b4cac3e30 100644 GIT binary patch delta 149437 zcmZU5bwE_z_BJgcFhjS)0MgykGL(Qck^&=0Bi(QSiIHxUR6x30KtW0b5fG(ILX_^1 z`VRNX`+9%he@Ex+v-e)>S!+KlHq#A+T?2$w$LM6D0wOE|0xSZ2mOd5=S<6mka-%i{PLETYEK-A2D`Ni)t9FQk7_)YXHw^PX z?;oqIVAl%hG@&QG3?k2a8GxA-SVvwPSK*DB)b@nDw%v6e=W3C)<2gK7;7=5_O;Jef zTF2x8^xBS0bj&n9I68T4#WFg2lB@%1k^$4rq`4n7NqWK1By%xTQqU`CQco4MHgDwt zMv^Q6c3Lhox*^b?p4N(n218Rp$mx1NT%Wn&PWBB0XC4s2!wZcM%~jU&)eC_{ej$-V zR9RpWaFUBNxlb`qQ*Yw|ZNZgPR zJRKC@g0%>GZJuvhPMmE~;7PK*L=UDR%*%Bxv5m&KxdYtr?D^1AGbz3tRTGRUF?Q3# zYJw{YgX|?5Hk&LuzGl#W9>21}iYxDxL9t!25Xy}G6Z}ERwBbuB3Cvx0NFO$}_#ZO; z{r1(sq6b02DBshbLVNu@i?vrZ(Nx9|Iy}V^rMgH?Hk*%thEiYS>siSN;Qvn5%Gxg5 z<#*WXhK}LW2@!voc!umQF0d6S_{E(X{EV48*D*^mN%W>mz{$G7_42M)s@aBy2|YMU z(D*haaFgB6Qt^VFw;>dMnDRvYo4PxU%-3^$ZdFun=jdAM?N43mPOCKT|CnRE4&0V2Fm?I4uMUr>P9Jw~gQh_44cV zzY@GGpKaKuG|@+k{;vkW*&?v1P-1Ey2u!)>ZOj>0E&A&Z?|-Ov$l(r-DwQ%|_`e!x z(f~DZ>R?!th4C4iLVW5cg~;#D7n+?fnkPQCk6dpAxSpmR6XPaAGU$`>_-*G$5+>FK zpJ0dWpM~YiXNJk_$m);nEXF1!W_lV@_qhJA*thFIDQHCP1!Cii(V)hgQ!4EHR%qb< zq1TiAnd7G%xFQB$EmlWoOJkGaeOkF2n!xy`P;6RGEqN6aldAg{VF#T5vyT}(KFF|X znq7-r>i2N&5giA5dZhM8TIENUAN}z8KQ_Ylk_a6KzWVdVC_E?VK(mWR=f0-)&}RYc_eR7D zWob_|#yev3|HrC8ojL-z;Pw<{PSm*fG{UOuzaz1f}0q*=MrP%?@>sHt$LP ze-dv6B|ez37mJN+z~i0ncJK2~VyHW+%`luEK8_Zx1)5v`f`h4Be$}p9A4Np{Zq!3m z3ccF(Uauv#N@)(jaxbKJpV9ot>42*=+#qh)#ByVDhRQ{mIcVjnsBMdm5mwW2FObHu z(5n2;@Sg^tGGiqkaH{vyiuLZqR!lG|dXiDNK37Z;BY8aCDiO009Haj`_~8HSd0rL7 znSXJk-nhQ8l2;M%dNp;#H<5H~dqs(xzSH-Q!}*VGf~Hxe6Vx^|f!8x)$~s??z?drB zTy0b0Eo^N+n~D9Pn}*pw{EqQyE0Y4?^~IO-^uqy*iSG&0D)eSnVTd! z^qmbl=i@q|{U4?NV}G)|pj`I9B+=MMuy;9ox})AkWj4Du_s57(o%aH$Dy8~B7XOd>y){#1*o@uCdpa?_G zrNb)HH#Me zi#pxnk6dPh4tTN9{^j-OpI+g&YUJRHrPA1TZ%a5XlDqKx&+hPz?PxTmXWl(8yk7lf zS}Y^gxFszmcrjwZDsKL zrZk!CH9$P&neO6V`tTN`l^{K2zK;6FkT>4naMOi>O2^J>=MdvD*Jw`whIM0!T&A-g z%tFjz9fiSvA3&32=CIs>z(?iWSi4S(8MT@m@j&g6?dQA2L0r}!&=P&#>nb&@vfRNg z!(%hv#(2JezYdcCdnEbqZ;)+YiSx~q1y|*IC^qaslncJ(>#a6-K`5=g!oi{wz zPyaG0cR08{R{CH41HCWslf1B$zXzkJcw0wn~FedbYN)6q$xPdEAclEzIBIdqW+M6*>F13c|>y1dk*ix7lI5;8ke3)yQ%M)i(?3NN05@D{!YLf){j6omqngI{)$# z8zXQ<1ucV(99tFJxxR=}v5}C{>BI+qgSsa*DFciz4(+xkX>#s(Md$pgV6n3OOL})G z=F_Y}HZz<4n1+5KHi1r5G23}HdNiB1Up8McW_5e-s8h!8sJMn2=P5cNuoc_B1H>)v z{}S{Z8=jlHRpWs0Y#3gx2Mz1?GWK8JmF5C>79nA#s@_OPzYtk0a5Cj2ey@vu+5V%E zy$5-)@}6J1#cG`jE(ZgaVXDh=ANi+r@f)P9YOa262;9B?$nK&CoEVO|MtKjs*{ z`I@mgRq6$3w9af1E_jOc_O71pTMsej0QP2jx#lfU)b3Ox>7peA%4t6vq3jA*j`%Qz>!n%a8Zx@_WJxAAn?znyI#6D(xUlMyMK zLox6k3XEC(s!_ltBv8npa2%*i;h~S!=!xr|my?Il#^|s8T(NGCeo~m{V##Fk)>r+F z=VEwFA8tZI9uV<8;RA#AW}}rGhVQ#+f)5(EzFRk!6B7;Q{p-cHeb57a4o{S1&(X4J z-oBSboDYW7(^MF|)20~FH=2DEFt#+<_B`meI_=_y=uyn_#ASGYGwd)r!~fq(~7feoNz zQEM4+riV_=vE)Fu^b=Ov zc3h9LeVQUm9@YA#x6cg%w=^V272Y_V|M;dno{ok`V$^6Grq_1eJ!E-O|go;G)zG=hd&aZov{> zj@_+31lxCyR``FuB~BKW?qXE5|8yD{OoEa;akriZM)K>$AwD&357uYvSv6qVU&R}+ z;4_Hz znIzegV;hEPH{jJw;jlZ+1L`AQlQY1r+v+DbN7^!jcX9&5Nm%Zg4=0{LrhZ0-nRO$J zLFl}3GTm|h@VQSI$(=Z-U(qr7Z4KaO_T<})3xteSn0?St4b%)tw9ek>7<4x~mosnq z3peXmZnfp3ckpej24s=;;O#enUGA5%d?pO!)J$yF9rI7DdC3PtT@5YBlIZaPg=j3O zM6241)Y|ik=ead5osV1hJ2<^pX5M+9ef%(#Ye>5+#c$Q)3WWB)5VTIVCgSdQ_*!y+`s}-`5(`~;tK@Ybi;;molyX-iUJIROPH(D5Xc)l*vS&7{d zoT1O^6ZlJ>?pF(FUI+9=@bOSjqYZ@QB!&06&G8ZYGxw&9KFD^7ux2a#i+EXd@L&xc z43-9i;GeZ-<#mz4y@X`o%J;@=U;VW&9+34cU?3=7-33V_$2wVne(_+TOP{ZB((JR( zhK=Dj{-#cBFYy5Iwe+92^}jfQ51vUo7#~2sCibJJ^e@n|%{ziW&TgX5&PjpvVtTPp z`w0n1t|CJIJ`4UKS5e?^+R2bPuLO|AP|DR%{e5(KUxiH(?|meQuc#742zZht1NkK= z&2z6vZIyO_KK9uAZ|*DG4Nj;#E$&-lbbuQ5L;G55Ga{|hF|FCg$<*jLmHMl%K~X{B z73Ika;#( zwyUi>)7i3c)Li3`s({V{flBl%qqKyWyX3u4K0ATU5|jN`ZU#;;kRxAJGQxBlU0Kg&%Q5 z&~8S>#SM~Je5j6^C}qYBr%;t?<7axg&PVNyFN<$^vbdCAzqgA8_vqWGe7Cg^Lwk!x zmc%&lku8D$crJ#v@|(?&Z>&Q+31fd8S`qulFV;5__2VeozUUVNlzOwg?Z?zXYGa>=lda6?dMv%BOZJ@24(Vqp_lm#>uNLzj^ah>do(ge34q*OlW0TKt6x`a!>pak>aBHG4&nPQ9kE;xf?`W z8e{&2)#zdPOW+poB<0B;fBhd=3SQCd5xvQZqIy|GT@e`JQpYo-F}7jNe|p~~T!|Vh zRj3Oz#K2)@ttd8S$~}03)^JPNM6k*Tk>LXG5_{g%><8j`f@BGBx4zVqR`@}Sd^BmD=E}XP zH}#0OqGh;lE9l1A1l&tq9%Fv0dqZGW?Y@Z{E!v}coN`uGl5}|yca8gzb2{Acl5USn z)hP{!DNnsAsh-Ix03Ht{<0?gr=k~b$ZSvR2oSCr>Bbauni|)ia*P@}}U2c^gUNpPq zr%lP3O$EsUDT=Am;8Z%bzKFFXzI(jCPpw%VQ=i8g2ODdOPj6=`z-kl{mz-{RR+#2u zaT6NVr!fCITIv#pFDa*5?n}kj0gsDGP(ls|70jwf@`(lgHLWmULSSh&kvSzHy2uM= zJK!dcuByvoDDW9`2%}w2mLVsz$un_NBAHMZYd4zYJBU8=|3P0eh(2|XG*3=@55k0S z$A?K)KCZ6i#^Z8SnAt&H}L2A1G^O-Q%-HAR^CDHo#k+RmD@wx zKe<_*pL1fHBvhECTK-BXMNhkgjA1>-(GxkoVflb3tWy*tVVymZnOmsbRJ&X*16-_3 zIw+2(Bq-Tf{un;3QL==2UUajldiCfD^yLvu9iC@3Poo(RZuUyU`@fW?1}h)nXnEn} zjlb##&>!?G8wSQ<>>{4tTHTm?_v6XNA%(qDT#)U5)RNcpKk1qIfGbbDg_%udfUPy|&Y-GHtbi@Ljg^UIEchhP(dlgm6*7#dpn}j;aP*lu|n2Dh)Hx(a^1+5cY z7TicaH%(nqxZzci72guxyR%R7f*8w`u!sq>6ur1Dr>#yo+9WvI3$ymKdh5foPv?nT z=Wxc;`-Z!ITu)$MeEFH#**{(GZjX#bg<<`^k(m~xh(y=V`Dq{m2v{fMqE%z_ivNv1 zS@eyoyx@H^+vb9AOh#MinuEE}3`>=4-VnSUqm*zhi@=&4CA6dE>{`7;QE4CNsph~}IvO0O1VE>!sER5IGrpebTKUK~cSyM(;jvq^hlb9Wb>pXgFIg z_w?}ngLo}rozHgy-N%}vu)pOi);@k+Q%P1zf@I6iOx~YL$zA;f9M!YHI*8dNBovG5 znO}4gXBac~?<6vp-=As>V^VfdTzvMobva*E7>;Q7h_WeqZ=uMX0UcOktNnqi#)E_- zoys8F{Rol}F_Iv%(Yk48L^ShvHj)Er%rfeKNk`BVP_a8PfrsV#lMJZ+5FqD!+|tI* z4SxbudHrp32E2t;NIt{~54GG2m5%#+>g`x?>aC`|icPXAeu#@Txj};`Rx31gY0QEz zH)|zK`1QX5+fW?%?)g58G4hJ1Sii?X_j?+zuTJ~QsZ!ROS-SThex$AE`Jz3=G;%b{`t-X zoS5wW6xWHLgN0M>;!mL&&%H_h-7Xq-Cb)tHvRl0RufZkhc}CH2=#}V?yb_47eWZpS zfeXl(KtsrM-<5yIm4^yT@|R)$J2)u&itN4d3aEE9PN;orn=~yG@GW@bGZRF+R>j1k zrKd>(w|bNwPRH)>6&x+y^|!d3bFMTsQDgb!ifE;_a%`2VCGgWM;+JHKhQyzFuyar) z5Qf_TP9vp#AEHun{}NsmIFitdq4Z%8_#jR5217wT!SHZ~tZ?jx3wZ;s0={u*N}hrV z%Yf_OHXF}$m6Qm%0LAsQQiI+`%fbRhMGo(P2s4DmP*||#_AuJyyM5f%nF(aC3%dbh<93``Hh4r8&Zj}EIr=O7+svG;FEnE^}}F335|_Q`{%y(Cuo zyQ!ZnH~BwS%+%0lH6JwK4`?C+26JZZk|p5zLyje;(~ohOcyO#-uGK)sb0rbfABi|R zXepN$)YR+L^QjlSyiGwB+3R}t8aOx3bIkv4OIBsrE}wT7zmyn+kY5z*b%AC+8kB(b zzIXW@P$WgQX4596A)|!Du2e|)BesPf5fR-P*sXjV`LKX+xIfQzeBs=3B{$MN90p2d zSvt$ET)d{J;14@*-Q=Yr7;g`UjFNr-O1&lN=GzLCMs`3*dF7!}(l!pH|HYoH!WHTM zN?jHib%lLgZHaD!4350l35-ZA)Hr@qk$f2|{PTdD^QxMbgZ~^3I(ax_fl(B-~>|>G-Zd!H2Ir!9&Y#i!p7q^5rn2?WF_HuJnnLDGKu1Y6MUe2_sdYc-V_q zpt+bgSeSuH1Vy1tog?p*g~3T684XVeyneCa$88ytYr0S&OL&zcwYp@7@UJ$>XPo!$Y7hH&^!}RWq1EApMZ88fRn7gpg6vH+4@4WCl$qjo)cK z$LWBC!`}frY&9u=7F>zDO;Gn>+()MoOl!GtR;J@OirneSE*8))d}$ywRKwM;MPHz^ zt6|2k?q@quR_z+OY?BnyL8+=?tXPlQ6ZcS5*Lc;iMnX+(>tTI6rGeuPBV(|=d~uzd z0r!7npdboRi#F9`1}h!l!|^9lB;e?ddhUtr_oc%q*4=o_P)&01#&(04)2pF=6FY|F zJ4PwPulqC8%mM-eM6$^}G+mmANAx|bf8g;IOavkZ-gY*N-v$N1FB)UIy#6yDqp{{7 z_i1@Bst67yV)8AOa3fU!S* zfz^w`%5juBELX@Viy^A^=zCU7r4a+EuIF6GLzLm%nRe;Xx66?kRM4?PY%@|wa=X%~ zI-xO5n?hrqlTm{*@3H=vP?KU%n^5z=uCtTdgWa&uC)rXc^83Y)&g^=5HA;ZIJ{)Dt zVW#}*5DT75Wq;sxRQF=niqqb908hi~mFkw)>NJ1j8SO^MFr&x~#uGUcvS@G?)f^!T z#s5af+otG^{u8^V_Zv)rxm~R5UIOwf3=b1-mW9@iSbYV{vJxHLw0Ve3JVakI_fxxX zCCIf@EH7z*p_zRuCKx67Dpj=umoij9K|L8v`t>eo1UYvkO zvzUNsPpYG{6yYyr2}vo(o&?#YxZ@OD0%Cu;Q_ zoxCms#;cj2!uF%>qO}Fagd7MM39TT;-aE5-cbMyn>A_BC?i)Ko1l^2b&ua@5-oy({ zW)R_X7Sk6aowR@AqkZmnUee#2W^)eom{8NBmePX$B1btrox+KhSX5!*z&I`HYq{}_ zs|?%k{Xhbst@8KCnZw0a{R6Es1AetkKD>Zgf5NxEZ5T2#GV9~-NHKr65vwF_gZcCE zmZMwK9%ETz0l#m0ZYm>AZ%i^uNYFmT@kd$7Tt?Q@UUY%EB&||UbxTXj`Lx$<3t+BP zQMMZGtj-2cnu_dcQ++9)?~+0Ei8pg3C2y>o_24UDS!&oP@IF2P0;ly<`dzj-;Xt~m z+~dauUt+yZ2}6f%>Wq%6w)xy(U&?%R{CAcS{vv@Sj|Vax#|8^B6j5SAraf8TpOQ{p zx=u!$YLICZ{5eNqS42sg^fxIO__s;d+h{2d+;)j)?&p@W*qWrZqoYUK1W4;p0>@V;*lLWPXZ!+d% zj>h|?V$ziMJdLeJ{+~~ez@`|qjVaHN=R|HBtHS$!r&9hxo>+aUoKf$ehQE}1+On;i z#+rPZUhv7}jVpOh^eL_u_Y^yN)H1+`kx=@elEdl+QT2~!xCRT0W9I8%CJ)LiCnx9q zWL~0gKi#U0tI_C4g|tl*BO#mjsHd*7tv!wa=!n>wk{Rjx7OcG36VsxaC^QmGjN2GZ z#Q%*+KtTIUa>bB&qUR1Mml#dSfBHbyK(joy{CQ&4o5-ioTh8-Mb?IZsXu42+?J z;+2%6cfTKVAPj2UcX;*JE*#P*lZ6ooH21@G@jBb#(O0Z$EMSGiLV0sPO@t!Glu$O5 zqQRkmZAh2FE7ruNXv7RwT$2OC)F93i*(6s4>2UXZZEuR7`7SaS~;@e&s~~9 zKmQc0oJHfsUKu63G-j5{`CjQl*0T3T_3^I{EPY>-B}%4)?-NU|YQnUKXy8!7E$vZh zAE10JcDltMksXsz&v61!!l&Y4zLWf8hCFQM=Ok81u; zY<8ha39lma@(?$1Y+qE z>w{_uO6(XRE(*PQsj`Uu%bZf+L9V4TN?>yFXF}f3v#vaF(cTL0d~icna!{wyjKWEQqnG^Md&tgI;qhiG+J~F7BRo!i zmIGbQ@vE&WSdVty2ndVVmZT?Vcqhi;SlgvxCxDJhMl?yoe} z!j;~<5~n}9ADAAPpPo=dC>Ub*Rz6SZ>W(d{_Z5Mcknde`z=BW&@UAft{8d3SZpmC88cBGyfxJPk&< z#i5v(5ScA`TMr$dz~K2{_rer9HQ|7r(@jM>T)s$rM5IyFQb9y;Fly_nykGMwTs+thqqWoiPizKxWGIB0Ko@f+r%~>!-uAZe8)<~;3?YG1Tl|N)Z_Bl< zv=|yh>E!l}5$KMtm{L zBLjJa&{Q_NAOM2vWLyH|ya^OO#CQ_u`&nN_C#}}{#2_d#;k$^k0OW)D9$7@rptSLy za=`XghD$?bPdfXm(~H`gccy!i27VX|8NLf!h*Z#Hfr&WIQKa!!d;}{@e#i9b0)jj| zTkt|B+`DQRMA1Ll+zY916wEslLI zIApk^q2-W=th7f#@BI86I+4$RKU1vOp}s%QIrz)#POWBlTRO3L2kBw(AOnjH@+poV zy1)0px@uT>X05`R5XVpN{&5aLN+475PRdCw1s7`8M{VkXS^ zdC6ii6v#UyNceow1xx70KDJ+y2ZuH8hP@hNdGNIpy?YSjoR9p znkxT^d!Mooq<&nAeX#TTlqGnpnxDzZS7Y6z*5;%Cl|xY;Z=N{|yck>iRvM+j8Xbnq zaJYU!fCM;A`?uvx*k+$h>^`)TFdNzV8T(VZ zV4iGcWD1A*;q()&cW32&sqe-rO+Q3ewsm*mC7FA{;EEC6Y`FZwqp@1>uvjAK@&t7S zo8Ejwi{0ryGT={uJ9%YS+ZGI7CPwzw&(rN*~;a zlR2#0J&K~#c0O4BCOKF+j_-BQJg2pp>iYAb&)$H(ZFFCCSH1Fy>U8MZ*hsbcEHQ*J zg6hrgF_XAe29bSmuiK!^Q(`2}_s@3-wJsWV_197ZrRam@g8Terc(UW(0+&xg7QzO| zcs{jpJXk){dZai%OECb|k|9xwy;b#w_%u3BXOxiLE+&2& zt@FoVaA;^Ke2lKzq9lsj0yQJ?38lyfseZ%h1HV2{^|2f-Y80gKZSI1+;&$`L7x#V; zU-<_4Y2$%4l-L)BCs=Tu+rTrBH|aIkJSrrjI-2-kLwkVs4#>Hr=P`R14IYekn?JU< zogJo|ac;#?M>NSSg4E&_QQQk98{G;MywZi#ygB2og)uA6g5%wtt3JdP$(i6KB4kDe>810$hXnD)5_ zcbU_gXg3o(U`y%S_B;H<9||L1I@nmJ?o}R?{cwXp>oc!bE|xTn1V**I5^``hi|1Ul z*=4b3hD9aac4g2k!6Ll4b=n-^{v1~n5np3;_A6Jj+peBqs=nv5=dSy;$Mn~1e{I&_ zKNP2~p8eV+ya3WKqvAzSJ3#a+v~W zf;jJv-m8NE_xhaEPyIRnohUTUm|sj{7#>XysH8yP2B2 zkzM+X&g00{tpfE7MXDIZ>Z$0r5d*JKZ?U8HHlBMXwRty=_9rxK|I?UP#{ve*#^>FW z6yQTX8{*mZSXN|THzzUjEp3tdg9d#qts~| z+3X*pJQM=s%wAy;f`{|Ry|VHtstEAteYs_P4#K2shg4Z(P!^Pd*?(WuKjuypr?{{Wurk%hk-ThS3Z`d zk{)DCh|MQ+6lNNiJ!ifM1m^Te?wgTdlrS&9kpf-rL(^vIFbeK1g#jaBSi!tdq)j-f zb!^lAoDC}mRBOP-SkYH(7yVIZaz;ob*jI%sR(YMxZ0DN)!fWjQI%w?53BM(nHbsB1 z4hS)=7WHVsW3ePg3;Mm`km^hf@^;=!% zakh7fpkgdTsx^(eMX>TwTC>H_{1NOfjtdqJ4hIw0#jz9-*kS~XtO>qLe`fsTZMP(x zxkiP_iczO}z8F_aEuygC)ALQ%QCaABAf8IN79{V>R@DrB=?8#$SJm*b`+acGdi)37%XzVxxbp441P(nJ2Mhm+vV!{C91@;mJR}E?LcKtZ>1iX_LT??l z)&pV3_iMenFG42gE3oyt&()X^`1pu|`x&95TIEA+TWD5N@h=zTo&(}*oL0Ju{Xew& z;AJOc5a`PKbUnG$!}Zr{)KDcYCPayTsa@do58lkD)wcp7Q#ke6qZ-nQM%I9{3)aBX z#RoU3>7uarD09s&8;A2&qHMmtd?79g9rL~efgVj)+Y=Dc--%|uwT7QJjJmDPv@>%w z#}-v{KU-jU`BG7WUkXsr9ed3rkclU6VoIsu@43TpojohkXkRvK_&SCd?JWfP&N0Hv zI74KySC_Ot6doIWliy=sUE)WR%Q?gt1Ill-xb|WMrf318RL%I~yIogaD`S%pkb^?C zs{5mVK}H@@@ES$RVY-eUK-TQ0XNoLdMU|vikmmu~zHO5qT8m2R$7C+{ncV%0o@(E! z9;l=e7O6~=Mh{%4ED9Zv@*~w=$ zo#@0__)T{7P|~>P(zQa}qVIn+wifd>a{!Aj0jgY3|#Y!@p7LR9pNDVS#S1j)4e`&2^pI`&LwEl93zgnh*L5T|6= zb$>(#sKD{At|TEaM~)CQU3O5Aw-bK*i?TTcD9ARr&sptJPV^w0sQ?N?3Zca4=%I;o z>jl3A(5Bx6qMBsD1aOYYRHc_2On@wis`z_}e5iA2IoW8>$6?q>R2_Sei(Z}q(e+vQ z`>NMq>*C<;C_iN9g><8cW5LUAy}h`6XG^HQlILre$Byy2cfQb$SVfkQ&H-boL8KC& zy~|&LO^w37v(Nv#>o%C>o3|CSROD2-KrKgDOb&+pIpa!zeTcFt;cCD7Zhzm1T} zT8SBEJp3BBQexJQO;G0BoB)2s)@3&C&sW^QuiV)(&#`B?`pT|$eL7Lf9^ol3M`+be zh4mNGi$8&8_$C!g$1tPx!Sj~-Y8re6s_>=*74z?Z%wX;+2cL0XF{dvG83w)Lkbr$2 z0-xZ{u0}vL3z>_hJF2)@0bA(M(?HI{ zn`!EE_|=-QA?BmOX~jOEX1#=--2LN^K1G$prQtzx@bd^ieA*Wl;`b1l#=2~Ym;QdO zCiEyU1I~nAZF}0VBzY>yHXjreDW3q=EkbQ>q<5+QQ@M~$z+gDtyZTi52yc-V$%hk6*GZLoIs*-1L1SITclf-_@T72p0>cUa2`3T zpi5Y0SJ4bss6!N=k%{bfzRK$l-!Eq(#Z7nd5{-6F|P4G4j zm`K0>iPl^9WxQ#+o$HvIYO8glQt~= zMlew0l-`zb#F_ClgaqYK*J^ z6TjzXR6rzcWafVb!-zDjm)zl=JI^M zXD2ChGB2>|pV~dr8_@IVtEE7FY7@IP$ly;w9V6g;doB7~Gxoh;<+PEMBgC=GlkK-u zWh8GHHAkB%8uX7aA`9d!UE`J(rfUNR2Z=WsF#XLQLWI{jw( zJjJ8{Cd%>CXE6<9+v)($G5zgl#3EZlUkLIP#5lSnOb1&2_;P>!cKf!b<1#VY&4-jw?-Zmd4A9~wDqLVML?AIGPqab z^4-(d?5Zw&=djVQ5A&iS>}dw~*;TQ~Ze<>$kq)ZqV$k&GRmpY;=#}RS3+@Ak zXy7#hGAK&YU{!9J65wBWG&x}#53`udI)$_{QRzI%iF~;13oNtOUu6F-GAM%=%<-Gz zA%4$HYT&W*Q1e<`gq?`xcrX+)-Di@;uVRO2DZa|gdA3y=7$p}%o+biI=rqH#fInPoX~y4D1Bkp_B=q#aH?}cwktjD zc{(Y;&Mgu;%)ydC?Zi+5tf;RS2loy5>^ROjSpp2IV=J0vJF zig4!{h~K_XMJbjEUG(z~VjRYbRoK5}h#Am{tlwV5E}>w9L-6=RLGg+os|5D(?jSkt zHDt!%tB_aK^=M1d{dUg&@om~v$IwI%PMnS0^zuAoYb z3hx2w5b_DZdPN(pwcudxH<|L}_Pc6>(4$*swvxWd8|ZD0fj$@sdDKcN#bQWA)bkLx z{fazr&t^HNG)$baLT&F(`W}C3;T!yQwQ1bYF2+@s&1x=>7Xkr_p^TKY4?_Vt0q=9S z*Dntch__Lb$g#=2jbC7pA}o)Xp$aehP1?)Kk=D|KdY(So^VvfYfm`#t&Av;&nT~LQ zRDU{Omhh4Qic7O}=%e5-1=GeB%tcs+=MEIfJ-B1mVfLyMh92drPX*Im;ulj#R z=B0G&sx#f~BFj(&L_-X=>*RKDe)#&@^+o>*N0ul3@XO$2)S7wO+}DrHk2ct{y#Gzy zyWo>x$+3xx72CqcE9dt^+Qa`{$3TXtXr)+IO3LfA#S2@|cPr?@%c2{w>24x?>3#(pu2@?b##r_F!jPirg~ZY^%eMV4A`4|T*~%BPh)kx@ ziE&+P(sXQ5ooTR^(zQ^4v_y%KRI=nwy>jZ~;cL7x8=Ln_R51W0tk~7evT=8kJ*x7; z;9Ln{DWe8_C2<&T6>(v3j>7oqvxyL00jgVEF+J~Nc8mw+l5LfyDxDs9elRo%;AbEJ z)P!?5!3usZeM2n84gv-*==I+}*~b{;{N4+31cXkEHcq3Xl2{L-^areiD^F_QUK8r^ z+wHuZ4dOdo<+x&0D9c`I?;rDm0A%WWdczF4@yDKTkvbHj!j3I|#}%DTdE@kt3HjeH z&+Kk3)L`}K7djZpBZb_=BX@IS;FT<~AfIM|Xvh!`# z&v(bZnC>{HJbC*rT=_z&zDiiZfly(Z9_79|+A==K<=wEs_J{r+U3i@o!@pv_p|S04%~@a zr2a5mg^=G{OJptvHr-wqY33K1gD0frgqM!F(aUdGdS6kHWl6)>wDU70b$HR{uyt7E z)om)J&}%}=ja#%yNy+`PI+laNSpcHt(l4YVEQ|xc-I`l4^gIN*JSbhsmPX!C5K*3m z6c_$b0Am)t`KAuAuPZ;A_aW1~3IK!;aMtc#-#?X=1D(gQ!%tN(firfhGZ2hw2l*X8 zW26>+>eTj~r}i|ANL8Oq_+qqBrQXx4(fb%{*BMq>EpTuo$-?PXW^Li%LL1CWW7M!x z?T~R$-akkd+FHEoZr-GLd~%J2rmI8|Cz)Y5;EUA&$0tET@a_w1YJklpw@YvpoAgm7 zIZ*x2f#9gajGcdO(@9=6H0=Fo&65Bl=q8;9jaE?#4+s?>CEx7wu1mOiSF&#)!;muG z%FwfZfOc_l$7hc10cB~kX_?8aEX8$!fNGk& z^Ebrf>9Pm=SG?zhLJ-kEA;8vUcaJ0!fIw8i6@yU%UE&MU3r0E+of6$*$q~y6vzGzN z4%f{DZ55&XHxXa=GOKR?K@fOHF-=kGu%xn)9bMq6a{_lf5MQ%hKR7!2reP>K+@H+` z3$>g~4b4VXAwuEsaR`%G*WA;PkmO-{c<-@!4@hKCO^S2?oa^JKPeO5$(B;Uys$wxZ zMx?#Q?mriv*Fn~gtfU%za8*t|ID*=PC@NBfNlBSfyn2eug6Or_0E_)7Erx<(A!J_^ zt~_F#k%&LUa%dmR4FVs&;`$C(vrDSm51StBjMyuxf?sXrivRz) zVqPP6Rqwj$TMrt*0O41I%a4#{3?b~7$D&5sMd9+Ofj(@Q0loyW4@3SW&}A}p|AxB)3?4#Mjq{8O53cBGP{9cABSnv} z)qUn|hQ$a+Kr3HVPy(W1%mu@Y3(}y+!o9w?n{{x5ENVs4-ceu?tz1YC9PU6@?H%rhnER!YIWi=jk8=;V56mxa%`lBw0wI*UcsEqd(9TzV(nA>65q{w z%#O~^4=vR`09QJO0=@wbTp`cF;9$rP-uB>m*m|7Htg>ZgZ7oU(9PRB%;LOvb znW5pvGyg)^*w}PWYcXKsz!mdcsDi#&SXgYhVkX~0OTI}!;HPOq0L(u@^FTYsG$5s+ znS7X-uQs<%*kGiA5zy29G3mF$ogi2yIF(F}A2Cbb5 zT2<#lHaYsV6~ITeN)yxb0B3E z{SE#hhN3HnZ{!z#aNRK4u6>1*8`n4~R-oj4D9NburM{}FYV}QUcOaTDm(x-Ddvk-U z#_{tSuEx(YR*Fk(XkWN0pi!@Z)H)VO0<*0fD5=tEze`S$X0aRbLPSraS~9TD~<*YhuBw|&U$_USJB=Z8X6iXpm?31zyH~kw+p=d`vTl<`kPlD zRM1w`f>B)kI%+zW+S=M(Ka(GU$~m$%OXc4706oOJ3#_X1Kfrdpsy~B&{GvMb5PYgu z>MtBrS5@V-7oyRKqPJpJ@l{UDUs_*ZCuULkeG9ERNiACzk(lpyIhDY4TS!RgxUE=l z%+Wwsk8At1Y1pQ9aB#4)W;~X%-3i?57$ydWo%Q3#(pdAVXqN;81Q|a@vO0R!u6Pem zb3)9Y7QLUqL-0Q~TgGqD_R4nMkeJ!IU06^c%?Y}aaUs4&vg+HY=kLB?wco&b`aNP= z7%|yb|@&hKi2*_D$4!~ABAZN!5L8L8bG=mL=c7+krI&Z5~M`>1_2qG zL0Up-kPxJ#m6YyIX^`$d_dJh2-``p9`^PzJoqt%u8t>Sjo!7qhp2vS$!BPvTgf9^I zLj@Y{;f%4Eh)z!S6!rs!+wZOz6OKKj9>4q%%tYSZx^*jTom-ZsjN>9ZCr9WuA>oWk z(KKj_wxAn$Oixb_+|wmf{pcqLdJ5~TOdXYf6~-?LoL1l4yCs#-V?~$I+TFX<7vn!_!NKj~Zwo@VTWU1a1=Qe+#}j=OOXt-vki+^%3Sd zY864BuLXb_v{OMvM7VHi%pb)_N6pJ0MEN~MCx+Z2FSUN_o?02*gR;1fFF+kC*rIqI z{?}CzfPe6&I%EZb<@Br0=iuB~GH4_jAr7WYe}PX_*1AfIo{9n9#iqSX7mU02QG)uE zpd%0bH7(G^lK1C=&*pQ?j$#`8X{Cn5{fXbFsFf?}0G2C0c&A+IE=%xEFHm<1GBl{$VauK#gzYj;5neJUQ0djE3Nt_Onp7O}tCFGvUJ^ZS2vAbx)bC~`T? zzoOFDJk-(yTcGycy}y&*O`vh$(%$j`*}nr;jb&QkgFisYDdU5V;va?TLn#zE2%d`u zk|icfU)~3g!VsOOFC0hQq?~m&>H0uR%)XOc?g!CyblQoY>rl2 zen38C4UIwFp+DLWM3*JCOW;AF_qvtV*VlD;UeU`D-E`1@ORcRm?UqkB-cC6qGT6xv z1N)3h$tQoJSDp-bU9ofj3dcC9UhC*8w7_N77$8$dpQ#%)NN|V1ogE?yw#!kp&}`*| zwy!faza~~|Ob1(769x7NYQYL(e=pG~k>9I$X3TRR0|%Biyi$)kO0W{1MVZXiBV$5+ z&S*bsG>R40c<{Gj*lb>|rWX_`og3Z9+Q@3ls77?_JIrO|JIp&ixt2ZwV}j7+1xly{arAL#h`NkH-{ z$<8q)0wk914n>9Wf-SSoE4XO7>gkU~bbL(c9f{#O!hcGhK#PSMc%Zr1!^DViGU_nqwBO+%LBRNAmip9UosZ+@HIrNfxqnvz*Mh&>orRq% zMG=riVYo3%QgU=gi|P}jX4I(=Sy?%zAa4^w$uEtkF-v($WcrBe-P2SWc+sTbz>QKewra=>awQQ4fEF#=m;BlSacC$3f zu&Z^YIQ z6CuT_kD^{#0Yy)e*858({xT@-8bJmnihr%v+&*8s)A(2u=yE%CpO$CQ$hj@{XczIp z;uTjK81sL6$o#Rm|3*PR_}Tbtk$=7+kZFmp{byFhS{;0_j<>Xp^7-o7yIp;azm9~j zb3qOnHHwsTfhnnpfgJO!4*{thY8i06m#UNDzOU-T)MyE{F_7Eb5>c49Vt_c87T$x} z5(vfp(B3`$&Kbpwp1?SPDR1=^_CUhA;X`#=P|8=?ZsPUNKb@xvj*eybJ zqW&GvM#kdqp}gcXKffvrBnk7=PbZ&C7(_(K>Wy}SxcVLjeUf>{Zuj=(Q=MQGefHfE zC9l)I`*4X7=|B-M#qQs+Q7w2n_t|H6+t1hiI>;)Hm4Avv82o$D@~iJIGii_8kE7@q z8LYGy=bdQsw$$@90Hc?{odI&j;LF7Jyry)^0UWRg*CU{}`S3lqi6-0I zvtA9RR}?j3nDwqNDU&L|g_o6;#jf-H0@5SW1M`iZXpBOjQ`^O-N5Yphjr!yguwn_| z8iU4q3NL}%NDi!1zOXrn3OS62Cm2?jCVoD6TbTf=nj3rCziuA5+mAwXBn~r}CwH&Y zK1FAfsZNKUbTB}o297dpK;qbGG3algdgTG3w>~*7%7HvCLeS@QGQlA0d%r#_sHn&| z?>|Q53!L47#tPJlV`vxae+T!wB+YSwg#1F?n_Fp~m*n7bhxT~3>Pspd7#FjJ|DQOk zMZg0<)Lx(D3nyGxdqKkmQzEQVKQDH*HZUdLdZ48!XF1A<^iD z$S(si^$nr4KfBBNQBk<(&8J|B`5YwP^N^ZU!5E=lRJdu#H4Nz4K;YB)qJORaChPzfykpT4}8ac@cIN;umiBX z(-Ys3lBQMXbJG-S5YIi*LI+)*j?Ws~#vBEr-RdTcnz_X647_BHEgl&oUI=qZ=GGV> zzc*T+Jy2y~GtK8rJNVTc>r7eX%vYu5(wB%tSl`jdh##!?S(UT=-hrXmz4$Bmqc{1@ zpXwtIwNa14^D)8eT}L`~wtl|@+EM9FL56pizW4hCZ@1Q0k+!F%Q^UtV@jQ0beKPKd z4qe7{GCDG*Qv3;zE4@VrEY!boUgQ~O)4OfbeEoRisIIxR zgz$3!puu12c*1n}jhTumjC^;#+ss`k<8In3ve2N~p)V`DTH!mc>_W7)kz?^G@LwNB z`n`U#GJW(om>oR*{Yg*F*GL0$?apH2bqjV&oY? zy~fCYj7mqdKo~gjc!<5D^l#4mXY-WZRs#(Yd^UZ_mWv8Xa1{~As z_wr@d`@@ReboHle`6Zv#s^Q+b3!yUod_cXD&et1#oMcte@GYMLSY0)3 zfvat|)vo>k^Q!)bR!`~BEq;e5t@0qKpYL#i!H{iz`qn;%WlxgY$As~x?tjRep>gAQRzMrLedt%9BACb` zY4M-`wPYBWdvd)U1{)4Ua7#%8bk$j1{KqoK$u_NPQIatw^GJ~Jd%UXKa_#igHDJblV2C=u*0ori~OKPw84#7nku@pnRN2U8~Zf{uLnq8|I5)T=*AfQmhmljJHSvQSG6tm&1m!c z)LORHC<=azlS=DI#5q#L`4X*>)Mh<6;Ps#0st7BX*rs9~CUr?rArSfOB(!W%P4r&K zBu;iaKl6yZFvBoa(|v~JQtLh@*VH%q3#y)9DU`6u3vpmYIn>{4nz3)eNN8&Ay_(gS z^iIcF#*AC%0br1%sR|6=DFEAGWo6pRVJx(|QI4lGay+Drp;H3;$(J; z%Azw~O%9QWfxHAoKK^O?=6dax6S&ssHm%^@sE6m##9}%$LD;a@c0xSqFLY)`Uxmu6 z4{{y)9uXd#{nP25>rL|yKfLYgJr7;J1or{WXO=QR#9bMWf6x5fk$rLY-B<$nQ@U|M z<|Qw=qz*%1(`1N1EQ;OpK@AVGgc}#^gy7M(laTzi(ly5ODz<=ytC5`?l|S%1g)#FHe9-k})UmXDXLT-q@*Dt4~It8jdZRRHd0JEiD1tUbn$MOJ6*b zh7=}7jufMl6|vB($>>JmWIYsBa5=em;0%SPs~wYoN41$12cTElLWQ_{Si_i;YdU#U%?g1o^q#qhW@^Uz!K$&qrU{W1IQd~{Y8#pOf-#3I#6~ulh^FoQ zH6_n-n2mz6%3>@z;pM|GAh7)pt4td;Mw*?I*5zylPVqb`{jhW?c}h9=CLfWz!-lPk z!-&^u4TL8E5Ak?I%?!sv^SqSl!ucGTnh`?@U!NTenOmrhVAl@v7|Zr%6r5oqnHz6N zwSHj4=5xojQ$4${agQLQVNyUpiOYpUkR(n96C!wp+iTR*Hahm1tt3olI(MBkcyBBz zh0{lt+?1l{vt(+^VG-;0rVj{If3^5|x8Ki?6@Y-~y*!xob;vOY*-vK_deD#FJCpDY zA{O8g8(q_Fif1LERUmpx@k6QkUf-#6=i!H(?uUDtR^e0< z9DM@GAk`Z+wFd5LdmMQC7w+xbnsPdqdtOvx567=_#;m*rNvdW&fiMrag86&7PU#%e z?;6mIL?Ts{B;Fa-!q>1L^t`r~C&dzAPhTQdaPy`KVUoGGep-5In3WTp{`yZN58H(7iN)&jL;*8v)6GQB;uh^7@A;8Mul~=bLFJQF5)m{>#05O738an8wRl`;6tf)niB5RTcjfplm2U~~0C-Bh zu45>Jo{D?-9s)5y0haeTy!g%KTgBr_$8iZ>tW&>G1c5L_sDb5^;KbuH_W||W6wzOc zgLSkQx8(>43^Yevi^$>zFGe1%$Z8eUU+?A8ep-~FjxDlp6>2mc?g(^BUtN#;Q8`ng zFO&79CPY??gyjA1ixS};i&el#b7ViqeoEGC?aQ6GAQP}%5l8KeT51TEiYpW_v9lx- z{y$lJCH^icr(U-A>lg_xA%;fo!$PHX*8DhcP|c;#u| zNS(zj-z!fg<4=_`PuBA_zY$k5y%g5o8vbSmYEfmRsn5UsKR*nIyP*GfXc^HMuqA*K z8FfDc8QM8}a4o`7lB#c<|4atGyo>#t_=_MoHuo&;CD;bQrM>;9M*nBUMA5Zdb%iY+ z{K;cPS*2V9L%|EYHBK@Ux?j5tT?DKjDZz{?ZBq&S@pUEj&kNZ?z5wEo`~e=eH&Ktw z?*6;@c~*K!eQ%i&pZx>wilR8c%_l=7+_e)<=WuV8^efRfz+&m?(VI8p$fS|_KbLHrYe_FF z3>qzutA)8U%a|`rF3gM{aq+R79^;0NJg3LH`%KSn^ZDnB;-ZSlR@)*14Vq`HsHp3ExDY4-KvHO6}af zuQ0=bbMKjYQpV6-j(ac_NofO4IB^6Ka^f>Y@z_jiiXENlBbK_dRFHzLhwUpRDLfX` zA7Z82A=YY$rDav!X$baU`4>d0dSM-%t%3g1GASI!OAKWxJz(M1<0~?ICUBUX2RWg~cr5;RiJ#HONGDFl z5kJHD_m=%8SjqQbKka!nKEdBciQ^&`e0S~;B~se*mzJvU1FLj z^-cE$GfpD9&NmmPoZ{rr&Sy-wZ&Qf?A_H$=*KsE$2(qM7PaMNSU#BS6@F%n(ze-z0 zUd?#8`&?{#si+qSM7yw<9JSY-Xm#u^2`;9k~Qt!AH zoBTnhR%J-p#s)4DL1z8SJZWX6L^^}{8_{1b0pmdGh#Tq+{D(=N(E~A_Ig^?Hy;HO& zMvt$F+p-)V2JE?hIipxi2$54lO5RHwZWt6+JvWg*Qu^0O07qg7- zTlAgVP2=IE?oPkMI*wL;1#OTz?kB%@dU`DC?zj|ytQ1d8b$9Fjip=+ZenB32xvN0M zJCFNNa>e5%@TOAUkhap4?3!<%J26g>0A`R?a=Q6#-sN;7xy01_W>3dyEwrs_(P&Py z3h$zDoEhfuwDM^ix6ma<)tyFaN$T?!SX4!17V5Wu zPOCgsia?riFE)OB;Z0X$&X6T>+=D%3+fARJKn9fFd5W~^dz!WItmnMfEz_5crPa=B zaUu>QPVPJXCp^VB)omwzhHr#IKZmIyji68%Ox=*;LVfXqx%d%uS#VkB^>{(sm^Ha< z#-pdlsnbh$nJ_GF-kd~*Q?58>LTomUa<_7wM&5n?a{grm*${a--+`mce;fopb$OmG zP^MZ|sg2SoS8DWoFoSkO`R9N1>mwF1bN>?Q%5g{VC`{Qcx64tn>`3axd(IH<+Ov2V zobhNWp&7u#F*cF)>?UYZ?B?&=@8xby8U(UieGJv}zNSoF0JQSCr@*rNtq+O2ck zgk{6~vX2@&CA3#g}3lbPikZ9u#gr~975ov=8#=|WxMB%3{2rZ zO*Q1J_gBvd2=a(2Sx7^~6AfRU@JZ`p|FVxYA(CqjBNZiOd%BO(S%m$E_fe+!kJvvB z;gz$&iCLp5#5YF=O(vQ3rt{)P!zwG|vT%_T={;@VuZSW6S6&VuvSKo4?5F#wSRsd} zj$^?(!oD*!Ghtt%Pe!RKaU@TdZn@h}*&zi;p=>d|`%YW!&`-|EH|2qW9X&?V;kCju z5riZ{^XGlVukONn>bKq4DwG|jTq%_*{<_zn7wj1aQDjug68;%2hv$0a&pOp! zd9AuhjZa?lqxO7_9t1e+G|ch#Yf7C%e!6yl-mH-k+mxIo(iv z_4~#2d23N#cL}^wxYh|lFlyu%%tkA1t&YpD-8ao{VYyVxfJ{JE$y2B(Lt!#q?=sl* zgRXOcESiw4d4hYw`*RYO`O! z>es6c-qaJ*?^l!)ZvRv|pr93#Ga2j?`NZfP6_Bu;;8mRRJl2)gGXSOJbRcCPPVASZ z@>l0s{JEI>ZPm0yorMR6yf3Dqj4GsmWK1qp2kSH z_gz|@+jl&Yy$$diecxQY*&F@-N_OyN7G!g!-;zVp)uV(2_5+@!uryX74r>g>Mc#NS zCx>4|58Ka0R@e!degX1rAmmNnC-q*%i7O59!)Cr`sbK^Qa0`4B8nOeeaK@l#l%T(l zMgxrlPipYNzpfYM?Gs3>7sh9PNLyN!cJn~-klh2-KWWx$t-QL8zSfmDUt82N(Ze{d zYmXX5EP7bSS6+st5Rv?X^wN4ix_-FdNB0bl=%`o&nq(tBTr8>r;TKiYwD}S+HCkv+ z7mG7-kG7AI{T_W{y^~N{Y5D|MT79EGex1~Os5P{=QK@axVT^c#d;REqCox7eTN@Xu z7-s{aUB|m>Qn)yBGl;s+C@y6G?()P_gtW`oSEuusmu7ys@r6DXlp)Z@K8^#=K2%5@ zL+K-+3VlXDm|Lkw`uVTfv=dwJg^g}!I_Sm2O8MXl<*rM`%4~ZL1fhvg#d`|y?(#Rx ziAf~uW-2`tnt^Pv_VpYMQ=?&$^(qPbw+nQ?zeHdT-m#A6g0o)0X0%xO_gMKjM{uD~ z^)iQBqqjC-n>#;2w(+};qf@JO9boReARMONV!R=t{lrDXW%7V*qy8Tu=RpR7|Ato3 zsp4V1xcWiG&ZW;f@P$VMLnNsC;k}P-o;V@*O(GIlVB&5k?2TbN;(NoX$9}4sh;pm& z-kK_A0;KylXx9^Xus%akd0T>+tir>&G!{9w=XJp;c)@}xg}~5vX}G(A@9M8sbv^iy zmDpykM!OnD{RcmMB^sx^NWnG@A=v3d~0kj|l#!pQ?1xO|1Oed?L;T*huD>$udh1#SjHT zMSG-V?dwO=qdl@=0-Vx7bs)mfL7_RM{&-tlZDH{Fsn1gcM?{KS@R&P2Hfb;`zakZJf(pBlENJP+^x0CVSUhvRRFwu zM@|E_=pFYAs_&C2Wb04pV>VpLPrgOmqjI>bv>*g$^u@cAB zokn!Gq`u_d|h_y}Vt+QWk^2{}PP;P2As1aAJw8Y*AuDqeKb- zrjYzf;~C=sU5G;b_@iGIN*)t2vFV`$sX-`L)4`|Pacs$aNcTWrQ!4|Gi)4sr&?Yg> z`WlGHDy`-NS1mpmV0rFat;W)GPyhAYP5}#Yn;q_!ejbbEX4SgaZonCLm#661j=idnD-6YsME3zCPPHcm+4Ojo46M~A@2xgh*-^t>NJ>% zHl$wJcTb4qD#FjM4%8~YzAQOe>X^+ik*(hTx=As25JNh|pSzguanpjvkH)Rp=!Xgk z+#3yua&qJ&4ApR74EZ|`Yg)GybPx*MuVe!i7HuBypxlOB3NbmO9|U`cJNl3b3VE6hR6F79HC!==t=U zOY61=YV6_@Ds@USDmayn^v&9p;Rq_xd4-1$Hx}Badch2)(=B$PNM`mebtOXy?bX77 zh~+%MTkX=4ij+Lb^c`=lg*E=)QZY%IJa@GJd(y{ib`;)GFG;H~8wt zZ$$93)5;`&Y1c&1>&3AO4)`og_^qYtz{0F-BE{I_p)Il@IWEI`keO0ATA4Gm^BH0z zl_#Aw6BPrvp?oFIEH|IyPZ?5h{1#_Jw=kFkd{4tYhX|s^oSEkSKke)A9OG zW{1i`6##MSgX7fTiHqLII)HhA<>t$cKV|UD_^%jia=|Q4UPFhRh3)bOZ(D@g@u5lG zo;<}(3C{*8VemkIO6cGW1N^Psm`PJVz58LNSYhLNQ>?^X(ba9&TwG{Ihs%`hR>tUP z)(#l7`p>Y+-zlu}k3qo`{I_cGAI0Mt8a{uK6EWw-U{r3(0B}t*kRB7|zG6w9HhmPCX1E#ld3!%_Bv(&<%W>4>$!EgJmRiB#}Dq{ z8{*q-gImgb3L^}s?Q6iiz>Q6{XY)w4*$_1<8BcuNKJR+7F2a041$l9umZI6&t$z2@ z<4^={=>}6LAONM`hKVa9T!-=a%ZP-pm@1!!4CC5t#E@7mm6L0K?2y=I6-afWD#1s- zLzEqNOpHnrRRn>rLoNGJ@Y|%?qHW`UKF^QXIz+1OE5bW-mfC*cIGJj%LgIy(gk@hW zDL?1LuYzrilf)BDWy46{Pp@pRIB(cpo&Z?jbQ5F5prcc7Ys8{Lr*dNR7BTFrx$7oBq+ecmPflqKGbx}f&YH0>@UeJ0DjambTv{uN2iM_Y<`$SOz(#CAI? zX_gKScVK)Uvxpx%PGU2?=qFw?z7eVNfnjP740k@F((oX}_01E!!)IW+2t0KZ2jMBCU^y(|UKT-0PY5NLE8KUnU^U7vvns0REBe-vbVJrh5J01LXEC25zgw+ta0U)YXh9G4}!OILAN* zjF;yHkdO#SNb9g}`<@(3-Sdf>R%A|&U<#X-QDI(-go*8rJjZeU=>^3LJ3=IuFHc1X z@mdbbCk{mn*!&gQ+9Fmm1coi!jWkVGG$_URagXw+ufL5_)^FV~#ywUhaW@xux_cxV)VkrC4kd?(4+aVEB4v;_EW}mp?AAFay#h2c2Gb8$t)}Gc+0kKTr=B`&Xr1WuL*jo|_gS1^E z8%rpsI|ILFc0cFcU9GUlt`cnJ+4=Gox+^tEW7%4F15aJl-~U-#f;HLc)4iZUWD!h* z;|PC3+gMsRRnpnry`+lyG_@I62pB7JKgz6(gnAhn`aZ5OOJSuEnhPhyRa7i(tGusZ zZ&#qg<|i;F|0WWm=r+R!KYkGZBoHx84Gf0Yt3ZUDa%w~OTE1i7uI)94_yNv*CM(~F!0UQxX?b31nM)}dpF0#E7*F4As z^#~H&G{WSp!Cvdq&J)hx#txMc8eC2B4(hl7&fz3bY^Y0&E1$MuPf7rmX=-}UA z1x7FzTq^Hjr+`h{4K}Gu6`rg2x1;n9dSgxw9^9wGZ2N3TGP{%c#&CvZFpyjivD?f; zesjLeNr9u! zD&%;RRaen`kk!DF>ReO?7t;c`!@i|zuu+s)`g4Uo9liA-Vi055Q zs$f@ImCqD$gYF5x(@VSYrf@76Ph4LTi6S1-YW}+Jfh0idW#eYQ@)D3<@@hGy#3UdT zFDdjriK|c<=k3_!z{Bxs0WLd|?UHA^OnC18|i*8N^4NT$$ka|%L?Q3~}ONj_+t zzkjPkSMRxJ=^;P(%kyC5H#gaJ3(#LIqdg}XNKZUtMvL6yp(iHy{tmp@${ty{zDO%g@C{&g64DOKZOLAAY9^B+ukNR@~DP7K6`bCX8`#bK0Ih zu@>R&T%Md2{4D>3J>m_#sy-K z3`JeY9Y&!oK^DEkKoh5 zTMe}fA-pu#4lY+8qR&h;q_J>-H&C;eh0D7cY77R#{M5RCHLmXgkEiK(|9x!QCQCGDVr4GBC(S@_f_91fazq^-wzmH+ zq3QJ<5^6)xbXV5ES5SJ=NWY?&xVE}%k$r0+od4kkaOx4Scl-5tmLlf)2%%UIV#jKi zb}XLr8(+Mp;dSgB+TjT3IqN!3uJGD#)8`sJpv;x*@X!v#{eA`wc%-Lyyx*4@#$S2-`Q&XAJn%!b>S^}m#p&S{gi044^}Ql3w8FJ))d<>STya% zNKLM2o0Pk{;xFBY1I_O6EuHm?JT-io+`V>*!TLjtu|dJs@OpR$)4LJwRcLVB$-E7W zXC4qRlcX@I(W@&owFp{d=XPCWwv&c42iz<7F_z5djsfG-gDh+IQ(-KsQcyst)>~0t zDUOqmHfOzT-cP*}z{qwBoYTM00Dt-f~Uv>FNZ2yc%4} zn^6l^m249EbVSVsPsaCpwOwk5phE{3^&3_nCHq*d_!uBMo+`&8^n)^S+$P&j0%Mcn zpN1+@X$ELIsb(WDG!cwXRrT2Xx226sSfCL^>s)%7e*%SnnsO7^Wbu9ys0UhbeU+Nh z6P8mvs6+H&Vv$}|3^j!gr3aWxZ~(RD5tl;Tjq~^NQ@=Oa*mWtT1IYq5>dDj;)&6AM z89-0AI*Xv^PTcMDHCp6D!%98g!#u$Z|?{=@v)#TO@Hj z-HPB<3`0hb$W}Y!>MmImFc0<6K2IYetRiuQ4HM+92>YVYGU(05;p*Nb02q!V!D!fadvYt!M< zBtjm_4J^2C`$NG>IX~a^by3MU5FD~B@q7z$`q>hST=AVf$*O*1jyU`Tg&7%$UHYhUgJ+|#40_*61u(hwL5Z z5F3LPEI88GhAMHR0QdZi++Nqk_T8Ge)Z^AVN{zL;e9;`NDjMQ@c&Yp^?Tk!gNMKtZ zzTzW~_l9cYq_m;ND?fnP!X$Ukg~Vm}aDKXpL4_r?_8%t?LPg|Q>JQ+i;xXN8O2&6U^*Zzi z@AFX*<0m5ev_UhxTuyuLpMKgu8NOHy>hAJ)rAAngk<-3gdU)ke=yd6&0~0bo?Na-V z#sX_<)6{-iwVD|AjPs$<A$Zb2fv8S4V}*!d@a3(IF1icsq+h*OYk!H~tY78o*Y zB`Zpa6Snvy*i zv0(A`VI6@RJKONR<`EOnPlGZM8Py#vjQU_H&9@zISF&NSEI~dtxfcxoz({}kY58=~ zeDoM!0;}EnWrGGw@sUJ7KF_fETY}xI0eKm`Lwk%=PU&AZVPr^U)tvRIzE8!5e*-^= zZzq7|_3T<6Ufc0!=`4PhO)@28VX&og4hXRLHzT<1j3c{FERs4@&6Q43RuM&g3^1))Q^R38DC=%)>jMgXZhKdX}iD}8`3L7p-6g| zEZP%>45C7#_}`rs^?%?u@H#`Fyw+{Ra}KmHQWd0v00rhBqn~1>gz4w;kuo6MnorKe zCaq2{_o&(@&^6PBUvVp1=zksAUwELjt-$2K-xBq&U{LN77~OTJJ^RVhArQqSC3s*p z@&WM-ePe>rVu?9SJ;R0{Y|Bm1*=PQTJq!HPDWC!s8@vKwg#x4Hz8wkIl-?wlDnrSzO$W2R7-TJ4(A$Va#)CZ#iqOI|@3yX#1&z?eWsZlIC}Wz!Xy9 zLW<52ADVjG`0Jub6gWm)qOjBepB%5ex|*DvY$PP-GuMM{)oM^iK-QnuesWQERN4DW zCQ!qmR&7#AP|W#gE8vse`ZHv$`nS6gBVWrsPL+H5Dgr9)MGP51TH@D9{m{RS$wNyN z^mefAmRT`T30z5{$zzHPl@&6Z+g94o;m&)a0qDE5XsVC_cHSYPQ||_iN{5+bN}^yU zH!tu@;dMhex+=HE>I`>;ZxK?I=T{sL-fzM}dnGs3`H;4hV-x(wHI*fwsme{NcF~98 z;urOB(DMj^k$T8sO&{clkSJ98Dm?KYvSbGF;k*Ihib6F7sSxdDbh{=m2Oajn-EYN^pB)`};L(#T@W&t;@+4bL3i?*{hEyu^e%gR~ z-&>pMqJfdm936U2zb7a?J!B3{D-fUbsbo(wf^>vPg^d#Pny2=yUetJj z)8O9klH_&c1s_p_I3q6%?d`WDz-gNs9G-5cl&}ciJ3qZGyr(LezFp6CUot`^ZqKu! z1)%9`H@+J}o5nM)v(Rn32Wv|d9biccL!Z9W1S&)m*JMoKJ1zPc$OHQ0K@1uN^aHbJkC+&b_HK-DK`+Ykb!c;ujn<9|9L?TJVqw?{)4+TI3$nM z%c!Mk>h|`^n9|>DynOwIMj3?WmOPSvbZe8FJ>WTTLc8sk?a&#X)l(hDn9)eA*6)-K1w%*SE~T^&5Cdsw=e1p0dJ;Vu%yfYKfXZJ(MNp`B#Rg zi0NDNzs5CFjd|RK_$4>?+}nbh7f!-?gDovAe8_I&s2Z;Tya!c?wVim2pYH0rM~^Lg zOQO!lNt-bFd_i$swNycOGcnTdv8d6PGS3hgl?E`Y4 z*p%t6X%o3{Ovo*UQ(9~JRz^uX>xjd1yFe(%r8_WxjIT6H_9fj)7pm4gUJJp#MSMVu zMj_Lb*?eVrJlXloGWk<2dNOv~riodvQDa@pHUZ_R#@HG@G^*XD9@Mhm2WL1q0gsXN zD)>;#W2}Jhsomc3b2|VV8!e!e&4sYgB{8@^GBR>YJn}2w`6^Xc83wO(R^fGda=Mj; z#SH0foMm#4zA_HhWQuPYCk=PzSMn6dv85Qh6RiU~T#lqIk#}_}?7isG8bRfA<{>M5 zk07!1ogzDc^53K(o}w9_c{ezHH{LZwn~MU;Mh=fEIX1&VcZLZ~1MzGYA1_1p>_?0WDdQPlC)Rt!)YrN93A9+Tkg_Y=Q05ezPi;Dbi!t(Du7A9H>|Am6ZRPr1gDLjHH?_AN+d*{el z;_w>if+$H-;^o_Ra`zeD-mo@a0Bey3hftu6+=y~za|q#JCc|A~V8|9EdbE*)l_71O zX`!1tSxJqy8+2D1{6@9VC@zZ?D6_Hz~z%I>pZ3>+Xj?cTTw9T!eSxiEhbFx}z(68uAI} zeg9)&S39FsWBK)>NUw0&*RMC=R~ZbWAsGUgmaT%vHmNnVwV9!?K3RflV7oBNk9;1b zD(`nhdKD~vsr))*&UU=i8L~e(=$gOyKMtn6!WWVC4Y3Bp%oa5e7%}WC^k>2?=D)iBN)w%JlmLqbAV8>}9l0 zSD(0YU?LUJFs@rF$duQ0TBGxz1%ly=iO&dyR0F8aOg(BzR;)(rtITDMrbG;0{la=V zMPnb12l@)F=g*%L_4W47lIaD&Jxx~tlpbpOm=A@5i!Rr=;`}6MtI>r)A`a(*g$z-+h;;bn;T7n-;F58wlQeg5#G-cEstrEbZNI} z_tv@I?&^z5;{ldMVCQl^FM2&%yca+ucqx#$9^_U*aj`HoLe^w|wxH9&md?)+q#@7N zOB3*sG_|kAoS35TqF4DU@U64)`GGs3L&L|1%oqn3XGsI1jTRZ;rm87Un~{v{GFkOt z1hM@9R!V;>dWbw7FTL|=tiD@b3Zl>8t2gj-=pripw<>>{5vI3q9ponp#hwq{FJlr8 z?@ixl$GBJd0RH3g(A=qXJ4yE&5K+B4UaLsok*7cKmNRHw5L_2k4sp6pE*o41k!XTM zn@oBuS{_cluNj9)yd(r%E>u)(>kn&cl|FvP<8gVxLzc23(mR+2K_8^xM&;1J;0Z{U zq3e%-Td>`!C&mk=58GTd^>97?B4ASw!c2c6&w6g0K}7* z|F$Tgtc%Zpm^Md08mv>}sIe5PVuHDDICmi@yARtd)9<{-ml~n+N@`kY%*2jjn0JKb z5KlOw88l^+6*_@#cC^Z^LkGzU!1`kf6(3%cHB7(3(qp~e?7>sfpd?@Fps(zl3`HNo zwIh9W``mjmY>Uh*F4<^y+GxYPaZ;}yfK6NBo#J8@yx$M#j$~#zN?2pTu3^dPa8k~8 z6!$O%rS7jv)$&9;@0%C$j1$yD$Ny6`WjYgp9wrRm2+(|YTr#yWQ|;@cXvP`jp3?k4 zg~He^`(*0N{t??*eT9qF+SSQii9LSp;WyjO(Zh(Y_^s#@d72m1QHyvZ3bqkbv(#^n zYD)?ehLo0HuUAQ05wQccS^7#+Yw>I#ea{n2`PKV0!Q65NDOHB8wK&$Fd>1;gpaevZ z&(&TrekdRjZ=n2?@fu#U_&(d^Z`t2pk4n61PSjmdjODCksWv07svbU;64*yN~PL=7=kC%KNOpPN=wHe zNP*jvOw5^83((Ticu3QykluIVn6Wrao9~s}zIX=iRyeqV@7NR@&_P5}5YC)kY!0uC zeooWkVm-xn^qV#d&j)k!sOpNx82(KjXof;k)w$3*%DTmt~vi5q0|Skh_vAstLG)hsI>1Q z-Tmz-^3Zg5{ySxI?O5g39D2tWj!oE9WmnRfN#mSRY`0FSz5P`2@tJo(!1wtxG$Npk zW3vE$QBY7IHbLg{9?S%Y>zNx2c*riF7@Dn|gyhlkcMa6JaCX)7RBmm-55qjko!xv= zrI3QRwRT0`v8b31B^;aQ>^}JD#l%xnf3^;r{urLX;`oD)Xbk2N*t?2(HcIA5Smu&y#Lqymmv_YGJ(=!+3x zVNixBw6y!6F}_^4MN7a?_zc+R4g1n(4Ea2o1Kxh0e`whtG`Zau4_Fvb;9?mv!S0|T zF^TxoW#L~lW!)N$S0pLS_QB7xf-hzQBgQKwX(EI%ga0wWS+zW^J2T$G;N?_h-Q1lf z0`OEj9Yr|oI^tLe+MO7G{jdu^Q@zr+g}a|#U6%+l!KvCkI(JTPSZaC!614^k-HTf3 z7N-=|kToM%IKa_`udsv*y~?hv6te4xrk{E_bsxFMf+qS_JMvfk|3%kVKt;KB;Ub`f z2s5OlFm!iH2?Go*C830*NJ$A&Lo;-DDIyI5(hVXl2r7+q3n<;(7tcBW|DSu;WwB-v zGvD{d-p}6q*?Yeqy}YlueMBlaFSWXeb#Qnr@UtH9{N=ZcOG>D=4?K2$pLoF(#r8Gn z2sNJUv6Buw|L|?|%bk(IMCmYWo)6-Sdzw(jxExl-Z;|Y>8&^m^sne_1f!kl@|06(1 z=^;i)y4ZV}+|_Nf=+t_H~8- zEQ(yk7&JvKKCz96z0{>NTM>=gGq~`+a;931`}xyWwE9`JG7O$_;tcZ$PGxjmxqlGC zB|#YJ8wy7O;=mK$!n4PH;d4bbRWl2LGQ{2+_!)aJ`u%&Py0Y?F!8`2qJP{;###3`i zvr!J-&oC_cAQWzFnftcOKpEW^eNFgtpB_diY^&ZBx4sC^ngG%K56db|a9t}CVyCB` zWxs#BxhJOkh8OxA=$2}byr2j9^t)zx{2y{-_G>w8f^!GZSUzxUely__nR3jyM>y<% ziU^xUX``G@Ncpdjp{SO=fgvRdu)Jg6@AZ4t&+go_oDw?oYVo=Dn4vJj(Ds4V$4P=> zY^E*CdnZ}Aw*s_oc(GGFbqZV*!GgrX{ia#bnJGRyK5vfEe>QbEaO#qnZ_yI9*tD^C z!iOp-EA$S-g@&gFz!{hsB^LHh>}hi-gk>1m;P5&seWWon1NU9LQNrO9O@0OnPQJ0l z-(I3r_zs8e;)`iTg(Fl}mRXOCTg?3|^zY2lik)ms$ONu_Od$+>MS~q=r;rbY*;(bg z9SWdtiTViplxnIoz$8b7sFd8kJ;NE7&2=yCi8#cKC9uCoHr=uWRZN8bHXIrC*_ZsslU91YdR-^JcUaOrI9{_wuzA~qtCmA~!x`~Bq9-gJ zjS9oW+Q4Aar@FdYL2)UV*Annk<_1ZEoHYf{BOp-gT|eOU)8Ga%ESQo&FLEVi7J^p- z0hN%1Iibm>7#@R2%dpgM#-OUf< z=XX}-x%;GJAmml^kAQ35uD53EY*Wi^5Lv-t^Uyg1Ag!+n4@);w)6U*WV14df6B%b0 z+qwcXi1O7z0JB`3U@T#P!oDN>74#v68mY?10TP}#yJnLbbNXBAA=O8AC^&C4jS#kN zGlG1~l}LAOBmTp_OMtSU{jBDnqwIxcWrL1X3N1_bto29vQhy>>KBr^7%g@&xQ+V!m z-(YO9{Imc&G-TT)jFw8r04sJU{n(g-mRTD z!9Lz5Ai3|uOTfr(=!Z15x^9k6zYuA{ZaaP^rTOd-9p>?dWDo|=?dtOxmZ_@gUQFdE z6t1yTZl5p(CU+*vJ;fsk0TCcWSYc? z)g%mFg?hf@IqD+!kFLgDm$>PhPPTl+*4EbknH(R#nD-UlRbe*;wyZ`_H(7SF#~T<3 z)a*_&kzQJJt~4M3AM=BUqp_J%+Re6j&)&eerLD+G@XGM{i}4zXA0TqIT0#0u)jAw0 z5`z;{`ja?~M7QK7dkZ;JQ&V@~;hjP+$rGjC8zi|t3~3L0NtLLC1z@o@6oIKGqe~09 zYaQ{sA^$U6zrRq@#!S6TvETzH2+o*@ay=5bAyBtsDvu{xq* zwap5r&!OLq4t>|1fIG211^M(WvUdnp&4zZ%G=@I9y_ zJ)qV{^>VmM-G~i-x>U27b3e`(JQS)6?*m719euZ=>nuR(%94_jS)$l)%!()9nFCSj zkG|T@>yW@$k>yn%X=G^=THvTgA&AM@HMRMCxF|xU{Ea%e?s{As1 zwd1)kO7(M=igW|}M1D7o>iJ&@pM^7M4>0a8_i-ACqv{WRcoerD92qDF4^C+cEG9-} zb(ZHK2?|{KYT_M{_|uv$9ckv>AIgyHz5?pU1)R4nC3)-CJ}ve-(v<4)I6tersN2#( zRV8Lzw>d~_0#(B1B7rGN2u#-LUa#u+L*H2J_%+9719-Ir?Savsj1MzW52wd(%$HQ6 zD)VeZ_?H)X(E*LY5qs2IBKthPiC_{w&A(1j+;bnwTKy`c$NnYt1w?*27e^8Z+SY3TU^kYyzqqBfa zx`5(HYa*d$MUaFs$JxiB8*!&lbuJVH#g^XoRo*+Wm@p667F~{<_SByg9Z&`rPQQ%$ zPw#z?7sF0I42EVZ3MiSxnhn(XjMp3G5a5~Zu25RGP)IEf*cek~#I9(U&pX7)UL|-I zg+(EyT4uh8hIfU8?qEDaM_tJ-4IpFpsX{?w5uv8>du)D=)K?yD5J^qc(p0pTd#Bzx z{2u1<&STPnu#CV|urzc+D{uO87LE7GIK>Bu@){r9#qTgP84&!b5)lpQ&D!e_!PujO z96tR;k0~~dvzMqN{Q0!1(D9Bq(R@lVdxV<@!%c-H)jG9}JES_(JbM;y-pGoQ!zXUq z2@uIr_t{IeLAudR%!cT8-Piz!z+OcMd&z)RF0mkA_8XGefu{Jc$_ks->xP_GNR0^# zA0zJG>{3DNZ*qOJcgs$;dQ1KBQcA-I)}NdV9noedM2l{Z?Nd%nv@SeY6KI6?VZOt7 zK5=+6O88|{l_o2NB8!gd+wI5}n^Z)XD%RSt&toj3orCYcg!0Q0+K%|wtTf*fMm%P- zPhoW>u|SSf8*9!^?IlE~>OJg?=#srV`CZ?WDdz|TmtQWh_wm6N=`_y9zvJJq#%xdu zdj|cUb(p*6^(TYKi#g~%9q)`HLEo!ow@(56Yql*{j|>JSb*k}@8EH?SlZHVGrS8t( zLc3SDMP=3pM_U>&+?Qyp2Zeb~D_n5_G+BjuJZ3(&NcwQnqp6i|-UIL<3g&a#_>=k! zERCllK7c<9?!MctkF(G?-fnily6U_X*aJe%yrlu}-<*~$A9jONqXoR?jjAHrYL&ti z2B#OCZat!$Q^!M|=Uy)LnWYngxRxx5cX-M~+|0L_{J0X8veNa5D7p z|3iPn`ybfsr7VgYTQcfzBk{iwFf_m}Px>;oyr_u=3wf+hV!zRTdBk(Y_e9yvlP_Z= zZ$&F~Zj!3|G{Ntt`LA1|b*Z7cj|Q?`)hcDzYf<^5E><-6xSA|ga>ases^R|j%mUlu}!)hPfZhy_W%hrm33+UJY2iy?NH zWBOplpG_8C=2>?*Waa#o}GTpsf*P6MD3#DHRKvm7qo)NIi{U;{+tR1oFNzA_{( z{8HC>g=F?tR~6X&=&;$XcIR;9gSKT7CcA`^_`76?TzTcaLJSABfc)~xXI)xnPmpI% z>_ukoCzFTha-@jXKR|uC{wS__378*D86S~9xl=D=-XF=Y+wZx37fqRMV7erStTKJ8 z_RTF71`DQ|U<42*;nZhOm(R&z`7!+Y$EJ{#cj;*X6j?Y{9-sV)NLQa+xG-3$%^bAi;PT;#KvZfEd~qOoQmb8)AF4UKVF2)#XS)_b( z=j~XqU_*)6DDYk;xs`;uI!ub8Kv9yFY7FNLGfC!OC%<=D+_rP>@g57?`%UOY1+0>` zN=HQCf}<5t$Kd3NK1wUEFC$*(iSw?0KdUA>3AZ{@(S*>B$4Ov#KaE9^D>tFm0=36v zw?xD~fAg{;phIfzyL*(GDH;roax!f(D4vk-y`rSxbxBcC zp8}i=oh6puFTGLNB7Sp)x)2h32XriczNeLG#7tyjiS+r?wYv?S)V5Ro^2?QLe97~+iBNtWw zR&r#~Lf5v(M%39jo z66peD_LjP5WD1gfnB)L?6po@oA9TUfjg#fBzv#1OHBxu?2AphWS>Y1yV0cLoJisbBO4o$`ky)4cv&X3S5Q$i) zxK%jw#pt*JE9Yk{d}^6CEfdMgg^zQ)?fJ+W^l$$Z6JVWj(dB$_Q$U%tg8k>VS481u z>3RwC4({HiX)Sz~)Wa6bJZoDsyAs%wvG7UdSYg>e^+;&HVolRmy_ZKYzmI?3(S1LU z(yG*E+>8WPcs}v1u@L)W@+K-(4U%TM4*O)q8febCkT4*Zctsy$we+6Lnk z3sGR#ksYro*&>ARBQ+zm%MiFxtuktcy*!PV2L0r%F!?JWi>A875O*{xbsX{x28Hh{ zgOA;B^GC+V+boM~vy44G!oC%-mvW+w z_I62+yT9_1b_WaH?{?@~G>n83&}Wz^-W4~=?44;4K}xlS@b781&Ps{0!6k2%6Zk5m zo+PepGs1ALHV=|8OS-X}HKD%ja+5C3rbyw>?+Nf(l}ZY0{vw_IwpCu!Ir&~v zs1Bi268&u0$Oh^RH+<`2@qf#hBZfQ7s6vc_+I>jm_=Ov6s0{WO*2)(_)@>00g%_(l zg%`nGj~g1AGPT*@dw(mP-0=b;$-0FuqDRXEkN1Un2E&N&-P|!>%y^>j(vdzP_X)`# z84wh^L)Lb6w};83hFHf{>ru`{3tRs9UD^1r0T_>V`lf3>md3{MTg~g!KAC#acZUY6 zpSL56H{BtlrKaBT-4Fl?E1q99ZLtD*N4(^pm&-9O%+myY`VIkE(qoZ*?eP7y20Q+3aM2pj6#n(*{_>t0Jk)IDY-&oDhQR9qQnQ_?=!{ow`p60)N8mR9wD<0gs@?fimDG0@Tk{%vq z{Dzf(=7ia3b@UA;U2LVVPwULB1gprJZ(3=PTtdo;3lYyvNAt(D53> zJ0=j{@9_QXhb-Cx?!V?Xo&};%k@Vh@#;sdZwX4B0biHrlWgc7s8m(hxd+Uqb%eR9% zDEMWvM5}2#$A#%=WR`NK(h+UjK+te%U2C4XDJbFc*SPA(;HsM zc-ZqhbQ;CEvQb0yG&VMi*Lx4k5BZcze8RQmO_ywTU7-;4!SFy`FKx_1P6DrqN+k2S zqw6q^&gYq_Q?C>dUas_3bau2|h0C@0Rb$u)Prn)%G++7PHbr`xh-_fHUv$=;^_r;O zIO+#=vLG9#y4~xwWA*d}N~tJN^tl!HV>f205<_pkMhw8m*3bTBDHOx`v#9`BIprwb0CmU`Swi*1&EUk zzu~UG;(FwtDyOw@Op36AGR%2Z5qFZn+o@|aeJA`}8-!Fdc9N{YAnyMpUEP=^3yRGY zZcu^36sQIr?BKyAfi$UaZ<57wcUf1>)@Dk5>+DW6)pC{h*`fF5#s))2ZVbvEJ5i3h8t1FO|QDMk&qv}pIjW~ISeO(ygEkfm^?u4ZGlALV=z`+N< z^lYj31m|BFue-iT*Lyfb0u#U2m7q=hnWdN2KpVT8wS=HGeXK^}E9fS3{Mz_WD)29o zNqPe$ViYB`wkoiofXT$&Ma)x+M*TJn#jUV=9Q9lbFlV8^l|yTidtwa~Lkgv=S8jro z)4?-j-++97rCPP!eYCmTpir#B?#xiwBCp=l6H@k4wR#md_9f^2ZA)OyatpoxTaJ3Y zd47kWigtv?!^7b{Ed(1=p2Dn2GTT8Fc6+kUanaZ3;#76_?BYF>r;Li{wyL@POg*UL znxH0u&76>bum9&#*XJJqM~@Ta=T1j`HlHVg-0wrW9GTpH8cAxs{}dJfd6&S0>mv?G z!TVis{j%ucdQpbkDeMN}xn^QxM*mZ*`A4J>!Jtah{F(J*;QLRiyaruAz^1>;iZB8n z?}V6GY8e`O=PrsMF@U5b;a}GnD%>z#@qt$rzdarE`Jb!Jfx_jSA%7qinKFPZ&Nmr- zkRaU$EQGh2H{JSX&Zqo$NT!@tkc7IOB1#Vu5U?B~u%{i`c=l5@7;}%4EF@yXE(x~) zEmw=C0?Tm*TqFIqca5DcMo+{#lDTu>nt*e#w6p}hooBLW>!8j;&4t76j}P`|-Y(Z= z#tq$)Ya9vE@2}5Q7;~uLDkmcZIdWad@cSF*uRxuKR3G@l3z8AWsDrc#0&7%O01+Kt z-D{4)#RLugxpN1;H!!9Pl508o#n{wPO{>4%xst}Hklm?+1FeiXSaP@%H5VG%s0gJ` zr_}`i<$d?Ai}1up#o`FpzFxDK>sw==jvk^9n{{IR9wq?Usaa3~J+zv>h#LzW&}5LI z+C$6ht5`zoL!$!q2|#6?V5i|jtMSi>0INva=AC3Q1G4*Su}5fl3^~HclvlXE{2*x$ zGJtAAUFRfiXlUFRcNO6Ipje{$>$kdrb0Szn$Lii4x*Q6{PdK*%039k0L^pk$6a4Za z^_3)4Vqk!fj!$|!bWjHdHv&12Bv1A01fmZh1`oC9Mr7~VXV&~v0)Pf8wt3f#Fw0I} zL%LXhB8}oV-hHTl^+dy}OeF|mH8NTO>aeikZv`(wvFcIU1}~Gv3cTBKkSS*e?HCK1 z$hVgnXRvT|#ynNiOx-36@^BQ1cvGQkK447zQ#Cd>P%iF}wxhS}te!Z~sTw!*aoP)v zI;ytU9)2S~!E9vBA`q#{oc*WXV2Hf@$l1)KBq7_mHoxrdvhJF#g9GnJkYW9SrnFS# z%F)?Q1QgaE!JF?Xp0)pw#pM?N?5BZfkk;ENf+&9ekk|Ylh8g!-MEo0~CIoK8(shQD zsOLjj+BrkiHcN(qS3_z|t$>po?8|;1ZQ4?QRIn5WYI%vp&rNm%39|!<*nk74c~EsV zl12m@IH&TJ>q-d#$DBU`62XZU{Ruqstj3$cSJ=kJ=0oml8<3J#*L(z=Z$5iQ-|tBl z-XOhNd*hh1f0DlXT~X0iXOD+po*x z7s_{vY{Xvh)lyAbGZz8DT)|4`K3$C(~Z{;>HSz>v@F#EpC4H*O(zZft?wg@$?HQ04(hXM=1GRyx3l({N1x_LXWhE(hX$_ zqkr9lA-kiVxIXQ&81nLy;;MFBUa~#k&3)r(H*{!#6%dvi^&@NSjVxdJZvNW}>&Mt< z(@hP(KZgw74R$6tdSkwYui`nk*fn->AyJUVPdeaRe;LrT8IAOm^16so>6u z#VEJjEt$<7fZ716&4dtB0qubTW$*w*Ghv~IQw!x&!bXJ}J7oVAaZAiW&nBD!uzDv$ zl_i@w`2#;SWEr-7IEyCJX*>-7Udw$}^ulu*9!t{)P=1Olzt*pp%k}D8dJaamSU9ma ztZz+);fKX|ZhpuV*>HLcRpMT+v3-R9^HdAxK_%r9h!DtJd_ zU(Q_lluGnX#XOrB7ujA^f9QEu*%?|g%~to0+60!=*${Xdr<$k$QR~U%Lp&8>Ros-9 zQuu6e7`E2QgYj*NVSG^O4>OrMBww(8hbrWi-#~ia?RH!enRbj?JO-KKvb%J!ogo*h z)y{`3`)VE@4a77T?=AFatL!`jP+(UoK~808U^N^9o<^3Mo|VM~y{k@P#^p-2s*k1+ z4&m*x1-Y3GP&V)Ub!4Ok4!=rlpa$t{n+SabJVZVS@nI3Sui)DRSsQMD<*wQ9N1*;h zRj7;O#)}3Eef5T&i5gBp`Hm!uJGyiuku-?Ruz$pumx{M15n6(V#Rz829)+;Y4kd1Sts^yy=4! zf+f=O>^$Jt0M-;tbIHL1*^YpRvBL*NIM@jf94FsW{`%He8at+IoEqZI*L*j@9wxKo zr*-s6PQl==Yd1v+fdJego988@jO%X1I&Ul^tEZ6mwMRMeF_-$_5%9*8pZ61VPRWn4 z+*3<_oOBS9l2gPS_;G$Hf>-%Q-7v$H1kI4fb$Vxv41OVZv5Bme-${N^>jG;KHqh1y z%grM7R+ps0x)Iayj-GLui3&gZuDJWJU{Itd3=KVxxsZj+u9ro zfDiejDqX^xlbQiOYAkV!Wa^{HX2lQ;T_%Tn+pC(5(EIoM9lU5%@FyEL0mYpn)&P1L zc#fdyX4v$F0m-Pg5FA;T439rwZGy)3#I$Dd;)N_((%SgQ8brcTUVC3uY=6*1q43GS zjt$ZBtkQ~~4GU#>{d$dpi24jjb2Pj_enSS6zxQb(Qg3Y~LF!w&J)s5>D(H?lT@4;= z)xw5Hmw$9Zqg zeuEM1S+ENm{qKMea?1I*#vFW6u`!Q>FoiR6iq+TUf9l#5!1-5nBlNYU$!ZN4fjyUx zC?s1vRLr(wILD&pmIrz8FI`1_UR2#X%B&>lnyDt;aVWFaK%rivnp-Z$ts*sOwl|eq zkZAY=iqYTj>tDnLNoCe>GtIV2!i3>>F9E2UGI7O|%wFYY$QY(V&YM&nT{~4dE=q2t*-pVu>^xWy=KA15ECEEwU|Hpfdl5exa#nQG)5I3Vd&&phG|G?skGr|u53)V}pw2>GkC zG(_5p2LqA^mifWYE9cPwvs0!U6A$hRwfAgUHKGbkFg7(bqPGfYEgnEgv>!f5c*jz({~3KG>GSz3CjQ0=+dhW-ik5L! z$g=+1!l@^H7phGBZa;P|mM$!&syj;|Fs!X)`o^P^Tz9v*Zrz^Pd~R_)ipF9E5@DQZ zfgtQ4L zI0%fo1SN1}a^07plWd&vEvzFikaQv4;~yw`#{D^+b_OCfccm%yD}8FI&c1E%W#kK% za^4)H<}zd|jg7~DZ^stWV`sS0AHRB!;bWe|x7~OXS+`%5><>^M$7KUe-(!M?P!bygyAn+47SFOhhwM}ZTA_TO)jV6-5VSuopeisu!OlPaXy z`e;)W6SaS>A{jM@FqN@75iH#;sjq31AQ`zx`JHXbVzW$Bbn~5*`EYjQa#TD`$LFn2qU@fN`OKH3-K_@0k&{$G z1M28Z=a{CQ~C?>-79vb0;Sz?{Qfe5GM#Zmp+Wx)7x`z@zI)gY zQ6dfle6^oQK^wjF)4~}d%CWd?;h(YJPn~LiQ#l;8sBY>cFM>ZhjBP8~d;XcYq~1iFnyYlU>ndiq`{2e8?9#?ewZJnsY7lpAg^KWGQaTZ zt>&-@J9l8=Gw#j5B>X?G1!6bYvoY8thP0bsanKcGPlFp=nMu&6f9wBTWS?LBL96vh z6SelMvP{y*Dp<{RYA+bpw26H$WAg zLHd8b=kU-UNn(NJGaJ~NQli9(_5Xg=la@ocC1q=v{+(21xtBpyhE9ggbT<6PWBLF2 zpfq|fvow+}&a11Wo#RG2HdK`uu4jGAG}q>SV1+VV36D zYeI#(hCsF*d5~+;Us=I@sE~voF#dI)hd04}bbPyIIhp1lbpA%s8$Pc;WvY8S62pjL zg;JY(^#5A8@er`}-d+BjiXR}MN%t9CUhqAg!~<%L%`Nt?>&AS>WPw+{+TR*I61W|U z)c7Ej$^=%2LT4iC@9oxwQR`c$vdPJlab*d!U8XHab@bhSdS1PU{WqHZz1My&kn&wo z-~R19Gfe(MHQ*Jg=-CBBVaxYufM}%d$C?}eSLUvlAs$EXgi4w&uGdP5?KH`fu7i~y z*-LFMk77vXR%ZSe@(`k;(Si_OO?7U3I3frXPvP@(X7nJ$`G7m-zos1{y$jZsA(~S; zDp@)$2yA>a-@(~JO6g$WI^P;Y{y+jjbs||u3Nys*KN9-a59K$n9t-C;>ps=I*a=sd<9688||AobR&Z=zQu7MB29|} zo>R((!8_8aWf+dmo1=jHXon+Rh6qnQ30|=|_Yn0EHGVK{-uQ2EAOV7i)O?WYnnE9A zO2_wnl*xIEuR>RV)f78X@JAe9uW3$C?#{LD#_h*Pko*Igf0n{G5k&^t-?U)rw5AWgT>snP#UDE}c!kDS^RPoZE5iTzpF zKk>Q0Zkb~3AMNe^ri^nY_pc9H0trib)9I}#ODiYCV6Yui_6n5epiIaK6%#Ob zj1xVGB$BS7cGx+jJNAE~9`8#qUej)k-ccdZCn%F~ymqLv``w*<=RaDFs4;pz{_hP%11?4u)*)TY z1DVbq4MJA*PL$>~YF@CFPL=kob$r^Bf46{Hy(^Ovc36r3w=5w4(d8l{pv$jE_Ef&7 zcN12INrwfZpqa6FHNkVQA%!Y#UyemLI_XZ77`BOFy(0AbO#c>0X$ByW;=(^=+va5$ zM2rzI8O&ZIfcUBt?l1aOM4tmZV5O9P1pn8%GCX8NM*{5Tk;zq(Z4Y1si%YJ&ZMu&~ zM@Z%84=;`tY8tDyrp7TmVA6y=0+sxK_H~FgN#S3YQGgBGHobMv8ijxIX?8vOMug^H)G52)9PkX;>3(Z z-$5cn*^>g}s&cezk zE8(TM3@l$zjUX=c)w{VTV93+dJ zWh$?r2jqF;-u=r%Z;{f_F8Kl8l2 zf7LQa^%L}b00M5d8s!9esf43mTD zp{AzOq#)5OP3`lKqc7ib-GA!=BV^Ewr&Smw+tR!I8A%pB(A)cJY9a4~$lqFxpuB+_ zTlL23QzEvxFXTaX`SXa0($M?{fx_fsYOV6;R!aE;KW1ezC+sXUj7<+Z8YZ0 zc1Iol=f2pO`(ppp68NdmUfaq10rL*>*g;8i6hsko{x9QfDv#okVTk?O{i7S+homN) ze2xqCjHZ8VrHszV$e8bPJQnCiv*YFyU>+7TH#lV2pd@+xa$*u=ccV#sBkaR=HRD~O zu)md21(+~ioUq1szS5+(p{;<SpVVC^APPc+xzt_`Sy}t0`NLpLMo2dH1>l4ytH|p-m$|~d8Sn0(;ro^6ux)CQw>fcLW!u;0; z>q$vY=q^YoD~OhTRm~TS{oXt(QZyr}+x|LW^ldNwwR5ZKv3+ZmXkN3CRc@#+LseSm z`y*j>kJYa@7~Du((n%t?wMk>`*t+%RlJ$|=q=eP}LG$y`k`u>CiuSO-9cfxMFhxi7 z#chU%p>42Kwjz~8wS@vkSu6?OeD)xOiNJMeKtvdT7KE)1B}AawmKTi-zwE|bsADJ6 z#Ly9_q`$izyR8@x(=)XE!FOJ3AbIbV;ke{9a<>DEJ&Wqa<$Cq=@2B){)OKnA(IMVz z|L`td+(NsVs}ODZL-|k`y_|W4OM;o*7uZ+T*AP|(i{+p%`)KByQN*wbvE83;B-lSE zKID(B)mpVkZdCFYg^tvbI`0MhcNEVd@1f3~5p&Ol_6S`GI#(6tVDTOhFQwl}SiayM{ zFtY8B9j!-scqa-M=Z91hq}@@=lKcEL^8RVo-C~;mAly0=xWhKo_=}Mdf@ybCd;9GL zy{(nAzXO?=YhhT=9csu_e(mIf8YZ)n3ysKrt40;~KG&4?mISX=6e=Q1L`2GVcS6Z| zo0#0N&fQ4q5p^ZN1KgyjvH+RR;g8*2`AKL=$O-SYnThN)LkXq~Vm~zA9EqIeE9`Ck zI;V)EqZSDvCd_X~{SA>rvy+S8HqEvNsQ*#9$Uo44A1i>*P^`x5_hk(tH+rm_W}QS7*T9Qjq%!LbOx1Oph`C~z10!7LTH=eC;tA*}YvO{cFb>|hjEfnsj zznRk_H>95q@A{@dVZ-LweZutc@>!gZSzM>~(_2_jNP1Ry7bB2Rq{QUU3do_YEnV3hWQ>h4_ja@tV zVVKCXU*q3gAjpS0f=9ktA;2U zc3L~DFvos}lEq5;tS02gub_Ha?%dxcF@THxR-z)WDUb+OVUE(Mfijxb>}>5I-4}K& z)MsYC{Jflw{%3BgU~b<#^^I4cFUle9Cb#Mbn;TQtFM2BZ^5G~KmPV1~4LyHt5HKiQ#IC3BOxs(cd(K!vC8rx4UEnc1 zJbXp;N?%)_XnXJFR;O^Xg!9EGyP`>NxT|!WNdQZGFbmWSd7A`wbhu&fVW3h{Gjo=` zexGK2jDDMnrJ`^7kGh$Vp-&Qoheg08+vjZRC3Vhme)nSOwB%PRTk%&>6T`^G%6~q> z#W4?t4Cf678V$rhsQCGSb}2jnIP+DD?9L!?kb@B(3+l#penK#i`#XK)Y*c0?oRxOm ziJ*Pak31GF)`?{b>!Hvww=cN6{-WD`$G;+Ax^S(8POc<@?%C1$+pOezf*G%v92QEg zVS>>I*GRce%k%7Mj8~{%*&6ggv__3?4W)1+_V#NwJV(8ASjd-~NL_?9~=()pU#ZHW!A zvNt}?(k#r<<6}sJgert#e*bzlW^80%Ze!J&yPp~qC*6R}qWSP+bMw}C@nBhY8Izs{ zH%vX)c%<~z=QKfG4V2!41PgQG8`DTLN971B=#p zaCdnNW)RLRcV)_S5=P*V<#2{@@QFRo;bTu45M+mciAQJxcX8fv#qW^zHS>J@v+Uab z?q)Hh$&s325gVh71vYkI8B;)^0BQxh_NH>2r)MS&SsPJ^D#zvaZ#uuk;=1cdSeg`q zlup2YE1Mzs1-Qtg?iJO4NQd46FnfRA`XJ1Hyru1j36(m2owi)j?tusfR{ycchR>tv zPxv@8F*%rdUQP};Qa=`G_*eq*`_@L<)JjfnDj;5aR9@hH?6u_Ts1SkYa+<`Mr4$X*Ve@#Ey4OU63+7)B$!~hp~WKoz4`eYl)PQgWul< zoZQgK4)0Ke4)Zm*eNTg^&-A|gIHK65iSBu{EioT4JjCsb;`uF+y9bgGjSZD8 z3LH&F;XSyREd|WI`gY^t6aKAL$!qT+1_#qVMMy4l+D3Xg@tE%o(wTe`3pW;zTJI%$ z5a6RY{8azGw;HOGoq-Svn}3IR{r>l8_7j=w8PkK9sC3H6z4gVD);)?eRslUPeLE*v;HJ=pGkm6B=Mgs@1Vzh@9QeOl z=E%8s#?eU=bLDhOTdf>F90T7&-{PQe zAQhNqPPao9v|lsM?6QSKbP>W5k;%Uze=y_5E=7qdtF!yv&-Zdas%0OQ6nEDCY0V$& z%JTbd@l=)F?vdIx6zecc(`mW}7jglZ_`ftYWm;wd zbc@QP1}1*!Xp=x;D?+$X=Zv~!Gn}ec@97nXd(BAKt7p_GCjN!qtEUJODt?CvHV{CU z;C@d_gngVnww(&l&2UwUq!9FR;cyrFlf)prCKAx91nvP|aOH-{0lD<`^d97b>Ak(U z9ZEuHdPP$n#1Ny2ZkFeLIbPPx=qCSoS7_3OOklKxxV^`7lm95q6ad5K+y|?R{ z!<5Da;F610`AG+884@qylLZ~PpYp9gs(#1~#NpDclXNnw&HFu4?D?TOyTU-r)#>wj z3bM3^-(x6Hhi#TjtTt6@A@Q*J95q_Yq|zC^U)x_UPig{sZv9c~|GmNg_xf>diP5bM zNE7K=HRiy0$}Vj(_9cbfK`iB11Qgaid+}}bJxxQQ-PUCFRTU%ruZTNN1$aiizVQ#m zgAjzTD|D%p)3hIF@ntF zWi#Du-PR)Lz0jAKnwY(hJ}&bkMO`~{XN;rj>)q7U1{Fe+h8C|q?6!5V;u*sJ#IQk1 z{+e<7>-8rGgq1SSWIjaJE3gb5#88;rwZ$wa#Po;cN;RF5m@jvJc(0U?NqHZ{wyX-4 zs~5xNTQ5#pJY1hkd0P#gPi=kUstLNrAI-n~yJDkzK?vk`^2$J4Ai}1-60|Z-MOr{ub?M&Tgw{vY-C--ucfEDUqYh#xqyI8zm3cl-vK2OAH_<_akJy?5@*eWJgSXeShSV{f}I} zm+9!mmm}97MIhq7v^F*>OcWE@-oY71_%j28-3${{~WlUI*dJwfQIaha|SPj5r^yy+F|hLPoI@R&kh1P zVK=6rEUc`e>s^XF5@Y2)GxQ%B#Z=`3V)YI_2KA4AFV=GIyYL=t<|cP7SGm6Q3pOzJ z)kv!UfxbV;hXj}AU`Qf9KqMnr z4n}Zc?U9;15X9MtR3_N|x$xSb3;zh>@hfWX4k_)&Mh9NrhUDD38_kpIr<=T1)eid1 z!zd^`Fv82G>xbQaH!?#fnW^5lWg?q&avF!0m<%uduf;G94wMP0XcDi-0kmnpa*YE7 z<)*#Tf3ANSbXPMlmhSK#d(D?&%$Hk}uH$d-4K(_EGEN^l-FmNDI`nL|C`uW6GxHA* zdMX5fbE`VjQzq4`D0l(A;}tu)u$f5_fvPD`~jXG(6iGcC@_k+(eYDZiZ7O{ELj zHQeX-_-ynC;+})-Om0#wN%gg-8EauKe2s8j+1HZ95qLd$LZ&v#lfdEMNa^c=eZl@E zw$Vi72aJ|k7wJ^wwa(Ckq$G|!sm!&F!6BN9^y*l1r@gkKAl1811?m#k+A1c50QYa& zYjW+b#Qw>tOLqX3Ae8UM08t~A^xPZ7~?(64-)ay(qGiu(+}F(6CH7X9yLbucVIq4G%03@_iocd}ft zsX0Z+B9<_i6xWI3sgbBO5&e$$aShcg^K@K^nM#Y|CsS9qUY++Uywl&yOJqq%O6t>4 zs3K5a?ail24j_<3aP8>)VETFY^mJMGFp1K>L9J+YsYln?oAc-gzmm_@hZrb~G}DNGp;=!SV{WZ*Ab^*AXrHTWJDAeNbQOEq6PL?=<2xZkp*#L3nTUiOn@lznIBA#;{*qH4}8y?6%#)>ib#$RZwF=Gl7qeaQi^n;~=43);=*_ zePFCFjdv5N`J_ozP4r+X!kYXt!BS5?|qfc z*rVX-L+)4W%m0V6{{U+8i{3_2DM}Mbs3HnU=v71kQKW=~UZnRTqJT6->E)Fsp%Xxg zASg`)cHls|ok;bl-8xwvIW-PK$u9UKD5sN`^)e} ziznV}6}^A2oZGM)?z`LE5vUyVB2*$F{#J&;+qq5p zvmqU+Kb8G9-3`K1^hvvIymM7O_?^_o;xPPmgEZvz$}a_H%2k{hQhFb~*fbr}Vm>T? zLvMGva;|F4IM2n{C*rVS&SS3x+a$tfI=|E(p4<5zYEXFUz zrx-NXV;=H5B^lH1wX)??x@qT-8`a>}3Zw7GHk9!0U6Wp=#9uc_-{FWS7_Oeo#CHm~ zG+q=(2Mo2lQKyXgI&=`mmnevxxps2HOLW(i1@#3>p2?MB>IWZ2p+dunmYoH-2VgjA z!xI2K)_oY69__VDQoY+3F_XO1*Il^$8)cW!sEYLWY24_pjhiIrRZlGZ38 z*UAdx!7vM3yy12d=I6&R4&*z`9vux$#La!BIoNOHmFA?qbQ#g3;jQh^Gf%M+ujXSZ zbg+0pq< zSmxzZ>K^><3pENN#$I9S_F~wtUANT`=64O|w^i18T`hijxvCf5pXuO)gnVvqZqahH zK{Jyabc1agbXs)PK4W7Wc3DcZ+d^%9ML8M_bs;miM~oMnT84SHb)D^XR%c z$SyC7uS=3Zm}<`P0J5<_8^))~tO!cNk{dVu4kv1dXPTuYCG99wdF$)fYiK7lJ6G0{ zhQI&!W&uvf?Pi-^1kSw^95V{GyX1UH~9IvG$=bUeXv><`TVYRAB*PoISK z^gmr4E5yujV714e){Y%1gv1XmVHq#%PL+T7{>RtTlDa2lvU*C%Fq z$NS)FFO0}w_Xsy?HB8wS;~S=&?OnU%)E4Zn-W<@@Wb2x6EG20K3WvFHN|bdZ?c7z= zjS``jA)XLQF&N7Fd;{;gxJZ;)l{2l$~s41eFvVq)IO(eP#S zTq&q{QWOxc0I(<8>#wbSr&@8t#wDkLl%hSrv5wD(OS%5AvoPpI@E2sDzWpU}XRdc1 zcWTe;-9YwbVxQ)j^Tzsa{XVIckGA)z*lgT4(e``vW9YW~A_B)=y-}9`V7Sk6rqIKJ zrLsd<3F7e6`?obB|BtN^QvhM={;d1b|1dco)iD`x%n6HJX>?1Bs>OaQ&ebYQL38 z$N|8F(IpN~+1T4dWBh{A7SP+51M5lAB*y)V<&pKf55UEWHE#JMv#w4|a9k7>fiO;^ zH0fSDatYlw_t!j+kDC3~xHjX1bOJ%^Jz-x1oU1jrz3WeQTL&!HJ*6doU2X=hst&S@ z0uUdwfT|888iSJ;Pq??d&6)M+Q5MB4bVf^e8!VO2w~(b;zDa`^@+|cAUEHh9JlCo^ zr`Od5L_`{Zd>IvJ+_)IM)4X!1Q{dE$2A)?0$1CXR`!UibglE1&&F?b1|Q<%X{tfx719yg({Gub^z_{x z1wV1njTEv)&G#FfY=){~X2>&oJUqed()&Fjod28;6LycTO}*=CaDk{csp3p~;qk(y zD#Y|xbzOnw|KCxb!>(_6hLZCZz6U@?~SzE7M2$S*B&WOyIvsdwOr(hyg-%PnY# zh5m{!J3#cr8k1*I!8bQQm-oazndUfnf93K20uu}x#5Kp&i6p5}|Nb1G>QaS0U{ldA zHTRWY6%*Au^hrze8eHgG_#smE)YeLZBbYemG0w?R7c=ny+XTvp4(3G21Ie3F}R)KaU|rzT%Y$c zl#-zwO|CPId!@~<8A}~{BOi1Hi^U!>VpFJ*^jQ{d_##kG@p?k_ zii%CV$%jXK-~hc6RI#?_ z%bwI7V(Aqj&8|gpSyxXlJETJihKjnwPRHJNSHhL%O-2z&UCrT{Lj1zQ=6Z!D;xnqA zy7~i15S&?quKG6{>VLqG{7EnKgATT%Wisd*Gp}Ma>CJIM8=lf8KRt_wY8A8@BPrO! z1*1|k`Lyx~`!(IOx1_FKb!i|Fil(NlxqST0v=b(f7(M+z2E`V4Fy|jXy+A@Nj6dxA zqgUUFQ@^R6#HkoetlST}mCf_f;i!B<5xs_mqm1su>A&GDp7Z$%M8c}gAQo7A!pqy6 zWk^ZXz{o{Q4pd+dFITfCT%Kq>0b70;LYa9VT{-uRgbHqLfRhuD7eT$#MtzRG_!9&; zSLTI225YK`sHH6;LxBrWuhMZzefm}6V*)5B^T;pAyeZ9l$s1z_G?%2;=)1qSGF!Hv99}(%5L&bN)f?hE%^}%kc)Ou5w_5JK)vfMTA807Ji+fAt z8aJlBfP<4kLOs^aX{d8eHZ+L}xE@<y$>C&Sfy(sLJoe79Ft6_E^+`idO8DU| zSyO%e&Fa1?uX+m%+2lR(XFdwr3B@3mQ)lu(vn+B3M*5`5s33}EQ#3X8R{-fo5YOHB z!(s%jx>!(X*eg2>?qV-{vIMC-ZYR?98tu7$Ep+jE@{Q=Hba>4lpT9?l!9vL8$@rho z3m--;cr=etp#r&#aAS%U$@41u@FyX$%3QkQt~j}LD}`rWPTnp0I2NC#|?C!yN zK<$4nf*Efjt7VV68@>Uk;3hNqqFrNvCldxJQTca~I-qpTw&WRI1a1K#uC{|xbj12r zqzEQ+fX3^&FE>%UZvrPuwNi=1n2E4tid2|UvByy8>VBiZM1o#`D4k$)5MvvNN|_FYp5s7H4|^q9F? z&3O~ub~R%ST7qbjy4@aHSd5d_JK_AV0R}bQt2i40+uux5-m*sB&W*NGWpBWgTsq(N z{37jmq#xowtn?lwTs?nbF2-W7SOkN9io2)_A^b(%_~6Jm%5p2DwR(p9G4lQ;SP_{W zo&QmZ*ssDrnyL~w5PzxJ-aEpob3QSvXxWxaZ=YNRmTMCZEzG zn#;O=o+Gzp_wP%D&5=?}hc5rUd&(C;Jg6@O7vcDTnrUrq0}|fI1X9I|$(dP%#ZtiI z(m(xoIrm_YZobJz&7RfQ$A7K}?U~D;cC8*a)OS+=)m&&sKlmyl;AIX;Ex~7YpSr0! z;>C)Hh)8;Y?8WhrnPPcg{9WemZInwlQ}RY8Uzcy?h+nwOgWNdSaIMFx_^my?9T!^%Io2cMDBEwDMs-`-?eNa^xlgG**96;*zem=!XXnz9~qe zcn~*4>(92(^&*x1!+kkFd1s%EZk~WK!ca!&OS9-S#43?3_H_+RYBb|p=r~w+1Kw2j`srPJ9zkZ7ou|B8)5oohY+n>v*u@Z9l?tzp%3<)Co znhc8Y%^h=J4rirGhsiCyr_tS1lNdm&OCH3Dp}%*oGpt7(AeCM?Vi{RCN}gXSa`U8X zbOylum8`aNc)9)4E--X{`3EUL(t)Yj%@)V_kIT+>Is;Zh<&`~&G&EPCgewhKelCh0 zeD~{vPL4Np;*&6NECcF?j7!)iX~3Vs50zar8u1@SIp>(u1v%+h^TOZ-n5XF@IH3!4 zP@5&^jKXRtlR-*zdUJ6W?U?@(&tH$vEJ;&w=cH(73Lm<3^1Erhg{ibiIi2ztelsyK z)o1dBUn}NN(Z1RZj?qw_Y)OW>iOK%E?pgEQ`z%{=oZXic8Fk%A^<@P+2?F$Hx z3_-ra5LnKh)1a#!2LVzbtL68WH@@)=w`&Bb-`A{c(`uo{>M>{OiUjMBOD75(^eWb- z1-!E6G+~pj)d=Ot1q|C!@AU%^b=kSPB|ufA-ZS?`<6wPG?Z=Q;4!IR--Zh=BKRMGu;LFc zZMpaWluGI#o9v0sKWz+(t7zmNn1@dFf@0ppyi*nqGCDry9TQ@YVg7fY6t zjZe7ryyP@Ki^roAn&jI~Q z-(^J&oZztJ%R-ov%P#mKK~o7%k7vtKQW)#&Vzr@wDg^jSc~2V?=tTuF^iFzWA^(^X z^jDyq`3_?*q`D?e;Z=RD%y5buhl}BsG3!g4mh3S~2RX?A67*b{@}iVaY}G|CN7&gX z?;us0Obwxl&1^y*Ju0y>k#M@!4=`hnF6TbIdUUw4mM|3i(Lx^j{4iS?hhR}Ne{H!S^M{%RE!)Unwq8q+B^ zuyX%f5V){0-x|}s+4GRt5a)L~E^!@Zs^>aMxQ=;Jovr)s!p4klO!w1xi`eyP9%5j~ zUz>%VZkumkD%F+-m59M%&@?wMuaf4XuZi9xM%3VIJ@7}Vjfw;}n5*>%P}wtw;I6la z6#_s!(F_z6DYri^vx0A{tRGAn{G#;BNsXNU;W}^i!u~g=VQeDHF_*&XCFE)&i&5B7 zI^09;zllqe6UE1?ET8eRC;Mte^8<$d7RNz{b6b@&0lkpXf?2jg$Mj5Q#MM}zRaPuA zE;Bw64Q`h(*4RJANyPX`i|gXr6e9jH(4KFBZC_y9MGwY%fNT^A%d>1uXY}dTmGN5i zvgyzLViK&B2^xA%JhBIY2nMSW_YR^8uLu4>F*31o!dHpie^b7Ceu`!`13JcACY|s= z{jvvU7JhqfPLDJyqTs*+hX2njP)&*N^E;Rc+9|~uSk|nxWTsEUry-Z*5o81cnmjtau=E6#&xz)<} zNp92N#eIg9(*?B_=e|o~V^s7t?uGmCf?Dc{;a9SM$Os-_0Y@>I<2m5;I+V#_fJ>&3 zEr8~F)}>xT$?Cs)w|cTJqI-YjU_)*8m_n%w46QnIqf$|>06@3GSPEz`D*AeK})nNpECd`o#Hu%An(`XGQ%|k9xqI zNcvh}_$l-{jk!$kbkIr(!?`KA*lN}VRQ`qLOPsi3_sFfyWlOu%1wx4TLOFP@KRnV( zPug!W)*1R8$?L9iBVdC7TTjGSctQ2w23dXc8 zoJ<%>^v~?5aY! zH&Rfxv#)bHV^|~_5&sPZ{`X8Et#s=ApC2P^qaqsqk5KOh@93xBUY0U0wGG*{7%+7| zaPMBcZ=j2tCujUemSwqFp}JKZ*OPwyd864M3FQ_3o*EL z{byM%xTHFH(Dg4wTWJvZBAehb;iWZPk@{FgKZvfzk0>0-FD~wI&LD5N(j`OP`?r_Z z_ClvNMevaB(pSTO#Z;T z%ExY1{)KeeF?{_a9g)#d7;@$>eDo1aFnooop^3RJqJm-hOAS(|_+lweR1p$_LPD<%GYhN^!dD=W9yc zHEv5Y({!@x#lK#|sZ#~-Eh}i2R=nFcnc+Y=)wjc)DA(^Vh5a)u` z*5bf}R={@{cj(Xk@a9fCfXzCAfihFENyZ0zx5PcI~h9Jt}tmdpjfqz8^ocz*{>%h%c{1-byM*VTlm z1A>k+LT+*~zet-`daFukcacq-5&KHqMWDKRV0MO~Mm3dlgqZK5j(>f!{JjkW>VRzR zX@%L4Ig2>n4q5K4r?3Gn708a;f1=r6fxpEDroAqY5C)>;Ju|8Y+A~rvmIzu%0Q!xM^_ug@{A0Xs7j@Mxy z4HV>k!CP*R#Pl}K+#~{(p-?R6$Q_#S9N;{{Bd(>R^QAaG!)N)&P3+h_N-)mjX zg>@!h$6rB`%$@32j3?)0egc&FH=l3yse+X8FJ8h?Z*?D@r-Xt2Z$Z7nZ}w}Ik=?b} z)koFJ5|txD2Xo6Dcot4f+*5)7PyfFNM=_inMe5}zW@!Z34--Nz_y0CBKKzSfm30nO z_gbG7GaDdO+bk5TW%tY;&6IX@bbU3iwXtYsd8I7%_jCV;BTboWjgBXFXdB||%1$a? z$UPDCBZP0A1>qnwh#2p%Z+Ug~aOX=IC7coW@n}L=(jL!e>wepiS@`%BI+#}sM14hu z$w%g2*)0Cilcws{d%~GVG;jqYwVIbsz8kemUb-4Ycc~zXB)7-v(wDFIJyeAag{k52 zd%?;EzS6@g0Qzwg47(3~rgqC_p^HOB=DabHth~x=JAXGgDlooUvf_CK-@(4^oO>!W zkSUYyy-&6N{V(yiM(Sy;a6x9qYVXewldE=&+I?!gW`{?@oTaZpO}gs~X$gPF6qwgZ zmPdtM+^^OZ1|sAAuJhE=(*^x!smM~r9S9%Re|4~D!or@`Ro@0>L^&k{&^!)x-%L)y zVXUT?dBG0m>iZWRjc)DiwPqB5BjwB!h|5WzyTDaLlcXoU`v&yQi3*S`*QcCMKfA@v z#AiwsIO5qZ)FB_O0;#pR$<)y?Kq>7MsQ!m0=fWUBW_*nN+n92SU5SmjI&Z!$w&9Iv z?C33w8GsT!&Zmn#1wb9(r?uG{-5;-o5ZPSnQGa5bczw2)@t4FO*&XyGA6KXOeKjs~ z7!vuj3QBSNlNcgiSM!caw`m}4N6j7Qg>S!ZQsaXaUsId{PeMRu(p4nXz5d5;Zu6SX zU=ohz#t^7U(By*c&k9GxS29axoQvWFq0l*Y=S3rGxNh>)cqfQ6qc8uSIZcwdAh{bz zv6-(Uvp<(8h+AYXg9b6pk3=)R9A*@lRI7@ty1kV6z-@%P?7Jqfvo@=4?_)y&It#^v z;mW!XU){K4c1c1SGcvc0tW?$9y3Fdk)Hw4^fvotR55R7Svu<>N&XetR*+fX~YK@uy z(U#$!@AkVgyWSmFx5j)v%+y7P6+lUwlm;~)Kw$n0v1yXW#=X{{Lh+;kz%>i&-`kad zOjxA2@{cVa2A?0XeVzzVz8r7aHbSI#rpjIWI?Zjs#Uno}E(-nfwD0MDF!%NK%V0`_ zw7n<89%7qC@Qq{0hXcceYIeJGFsci(VsrlIi(;RW#r|$MTeC{@M_09U#? z?;pOSn=09un^18BK_*VMxjMKX&dNVdxq@t`vDER0BQ?DC0`&;6g%$rP zGVDoiwkS0|!RjG5D}bA}#r?|pU&t%sV_;NPnWkl+-SQmDI>ocO?4F`sA3Bzf{o@^= zPI(75$kVW@2~6Eekvs-Y507tv=g!e`{C`6z|AW*aTET;CcF&aifd3W^kcv}vzp_q) zU+E|Je<)qt{|3p~+yw7;p2Nx=5T2l>USP^JN#FlF()JV;7jT{zrh&Ws^Znarw;FVZ z>1*Vkw1mCRsi@Ff{GKPQ@#;n%#ugAt?pa#aJWKIh^qTqhg7(9GFeaL5rIU&KGvbl( zvbVJViR--{8k^?B;s^V-*Rw0Wv%HisOzB*Uk00ZNNaz8rf9^H;|G&@QT<{4wTq;8L z9Vcr(UaQII5nbU z8qW|TtMA)DJY`w5YH6NY3M^v49N5=n6j2%F8MK^0PHk(-t8gbwco zoUd7sNZH$S{8N9RNS7pO;ipSYW2kufbg^WmhVKAh0~%84WQ?c_mv2Z6KLqP0#0re} zAAa$4rPOedRW8Yn!*w~4q`CEoTU^@6GW+R=DR&&AZ#e$AD^fM@ySH`}^I*5+U?!^4 z0zZB0G9;KP>6GZwV9ckb;b}5haC}F=@BhW;jb5K}_F4!@>gL<5+a)#r@W`zN%~kB2 zE)l{Lt1xrl>*17*6Loa=Y#fcxb}Tzf+SS+5s|YZJ?VH{02h%1T973`BUno2ESv-|! zDDLmq3;$&TM@g_r5+i{s757DBN|5wkFyOc`s9BiG4K$Z$S7gA){`D&lCf&$p+Lw;C ze5hP!mO?Cv?=sYr@H^vL$hco~h}u(`2xOcJSTtpxD4v73Q1kdgUe~};dkUlHlf*$ zcLNz0UF5O+EbZ{{Z`pfPn;lC$A@_c;5ihWW05FuYfW4_MO9)Q#?FFwN!Y|TWBOi zPbYlZyP3oQ<9uZk|IhkqGUSe+ z>jH4HAbMHF{s0010R^CEFje>V-G4!cnSs&|M#osp9NdNX%u$|k)%M4()4L2abCzI% zgwe-~=Oh3M8UaO6ttrYxP-K_`af*`QGsRheab=HWMDc(6(zUGkW=f&TXbo@d;mFW_;byH!VAK#A3F(B0XX=Frbx%q_Xi&ZU!dFE6&Z8OOerA2?|D=Fhg{y=n_ghKNR@bNbMr}kKA zDjzwu2OQW#EP-DThvs_l-WdOyvW=b%|MSvP73OciUEJfY$k#F)jx@k&-RS{>+dcZW z4^Z#2x1RCqsy5O=EogMGF2BU~<%G*dcMdFGILRtoc(S6Sm3bxh$KgVJlD!-JAz z|BqMRA)V1CTQ)F~4zjpB+jj z~1sD}A9YLp_@TLoRg5`r?q0`eO)ctP- z89;V9g}$4rBaFhy!wqNvP9vYNXdlo>*3wdNo{AT1os>EzM(zt@zD%j{xe42rS> zI_v-eh$lwmKoK|*IWVtB3twr}sdw=J^S)N%^&R=2g61r_01b_Le4fN5EQ^T9w+G5z z*k9Y0)iV)?-*WY$CBmRavkFc#Hlg{Cg%O}ZwY64qs9DTO?Ji7))R=~sgez*?Y>h&>vA2ZKr{l1s2ED65xtxb#TIF0QvZcIa2!89 zK&71t2=7IPXW&3I*%2GoT!& zy+iX)lR)?MY19lJr~m;t&P`S?r^V~>&(n3=M&fEg@BazsG>Ims)c_-7xlYbhUu~F@ z=f(U18&weqZzOq!5v6%xQ(6y}D@743e2PToa?BMf@TJP`rw;S{1+FRH(Gme+VQ`R{R5ax<`kNYDjV=(U)jF7HVn3vzj?*Dr|CRv(O z&7^>2@Om5!a1TU)0K@6)%~Bi5nVi0!!6B8tCNd5t!9K%9`nFp3bA`D!Axgx|?Cx_v z1||kPMqMr;d5pBvgz3|s7v`VMlJD?Vah&d7u22wFp!n98IdO8L0Y*Ct*|UzMARN0K z{*<$eUdCIdXvD}OBt_>%JJQs@cgNOv`#lT^fB>5MmD;$|6{{%BY;!*M3R}} zhe1&&=Hu&i`i>@hm+vl6Sj_#hin#vrjON$f{oev5B4`ZPO%E0QpY)a-%O5-nAht7# zxE~I6KQ4jSTn5gyx6Jm}W~=H`E5-Xxfsut-_uGEupVPgb_t!RWD%lnYZ4b{S0kL{6^~`$`!#sII6E1Ol_V8%}dC;LGCGFJgT* z1AsbC8@sLbqNzMG&IItX^Jc&NEK8QF(?&J-%hH=KO7=en)zwd2nJhtB9G;gGzpDf< zy@8P)o_$KLf=B?eFg;ZHl-cUI_uzE+F3Zr(yh%VtoIDwdl5;L5r{earY7w998&E{#HYgh;X9|8N(>u8WaTt2nf|!g5QZlfc{GJsahl8}oQ^UkOQ{ z;#P3*_Inh)gX%dD&*J4jSf>C{Hrvmalo6+5e-G|7{|GmkRRtn}x_ z25CVV?C!g!hhImD-F#ok!jIy(`E~~)5HG@6c~JR`_}}ng;_KLRs4`8sz2iqqg0d}q z&t#%81yy!S18tLr8--_$@e0g3iI05BUIAZArBEn{W-iM29G!D`t>URl-<0lGiGlT7 zuMXe7fvL#cACx17Q;}=E4vSV1HUc5vH&X}@EnCXvnL6S4LX?gqt{sTU6CY^4VNk>Y z0b&vFkvTrp$$OLmHC}Z#)OABik&h(dCe!1{w?fR zM_$@<0oNLwZ&4#urj5BYf0FSIH%U_GsEaL%Yl4)*h?4Zlx$6z6vf&^6KV=BYSKxaw z4Xdpv*HYXjBmO=n8$&up3RN=Wiw{p4@^I?30&IKoB|Y5q$zKEcm?^JdDnX-ANe%Ic zd?X6x+JGBHpgI-kXAjQCjs(F^4okE>vSZ(h-boW5mv5hzigOB6Y_o41Q_b%EZ2 z-G-RsmQ;eW(n(`-cqqSw)ouv1*js*VFKq(p;}=mIi57!T=_kh(F#cPA)6R*66B{1S zJ&c9r!G6)B$}RMt8BejmtNqhku`?*ReSW1^I&QR(d_Qda`IlJaDy_}K_5BfCO1i4v+pBm<%;g12>>7jY2q?7Lv^BIc_%NuaF-GMQB&CF;Ef{j$B{lg)8oQn#W0VY{(QLs~Vu--+WYws&BCu z3^DERQQ}8vl!-;+Z6jz$CoZQ2Ux@V9^ns`^LZ-#I$4W=i1mKjVHmXGl_8wycn z@=RW;m~&x7F>XXv(~dISn85Kk4z=;pG8sA7r2@Zsq(w!^t9w5S2p8YANSw5my^9g) z;~wbPXM6FcwSxOG2LWn~zAVW$@ciZh7WzYvovBwpY}-(jVNepk<0mGJ(G!-8e{yv| zKVjp5S6A3pM_)I&N_P>kC13dt{?DF&6DcA=-oHetNSq10V*NskxZ!+O8@3Od_ z?G;g0^)3`qj`T%(EaB;G=bhx4V(Db}M}}pLa81o<0i3d6y&2}lb0j-oWN-nluF2sA zEZ{tZex}X|H69oKO)tbfqm%TO2mRkkRLhh)*5;i+pBiR-(4#FGy(ss?uI1tuKdO?O z4^yPT&MYg)<%ON0lE7rWS$)|4n-XqZ#6iJIwjRJ2d%W)uD{Z?_%;tyX5EZ$pgqSEX z&%xCdg&$hR!U#dfsj>&J%XwX9USBtGcY*S#kUEH1Bnb(9Z1JpXTiwMcB{2CJ^K83% zy{O`o{klfW-v@_7iBJGzku!OB81XSjf@PB=6&V&&$KgZ+@mQ@k9J7>8hH3x~qEP2= zmN3V>diBE=3s9@Zy&S>%_)_`CW6r5Fx?+fXJWI0*MplnLa~-X^tIBC2#7KH!FtI1x z`U6==(U5oP?A3t-_K|I6bONZIS1JTTCDT!hgdP=S1lO_`c+{K#O0 ze_FowYdd1+7J+6b6$)y9V!mU~En{WsH?lQJ_ zr*#)SUE${uL)y{L=0!WpR41(q7a$9mP_x5mBrDx8E?Mp?o#O+#;bx2;{Q7~M3?e`f zz|QG@6X!_ypD&2jXTjR_sH8D$x;$$%?CkHK2>lGHnP!4e$vhixWv?oii*B`ZV%C=M z_@LPvGaS7mA)!8;6g2)$em9hH2^vb&ygcX;2JTSe+x-MM4xV*lB*S{&=nXD`8-GFd zF(C@M@xD#!!NWL+K)X@+-0LwTHM=Sz?sFuqvmG+>Jf8XI0Jz3UIMs1EJA5=Kl+?8^pl z^CRE%Z3KItKUK8d9rdB^2=_EgoSfaHN%UonYmy9T@}bNmH`d5ivBSI1`95gnqb_dF zjy(~+{mqgcbqR?{@6AGK%QQ^HDp3vf2p_+1RDhyJ^{?G#Dhs-_`zupXjAQXjbj^Bmq{)GH@mlNU^?AnQ3)R_7Bfl za}8rA&^J+96?U+tOQ0G5%3QGU93-LSHByE zf>;Ct@~(L{wSURjE-B>wvl()O+6xu?x!(vo3&Yyf`wL~Ci;Hg;#H`V9=N2GT1iC_$ zo1*CGGr?lTvV2PJy7q1NlP)dSqfd-T$K99qsSpjMk~Pke3PU0V4)isA77ll*24=qe5AgOB6Czg|@LZyK$A`1p!O1VEeuXRJ;QNfSm{(u)$lzhIl~rHsUN|u4w$IazGB_J? zjq!LS9BkF;{%OVF064VkE#C9egt_e^Jg&WL+0*ESWBaBYMl(}pCckBi<iYC#_ZQiOiZZlezR)16 zDvN(!kFJ;0OcnFgDJH2hlw)hYct7UpIaxcoudLP0O>}eA4dqL0{fV1t`nxL)mQ2+O zCk>w%e=;CHt@#l$Dw9_j?adGd=>zZ5rp)RM;rx1JRNd>ZBiBQ~s1jO(v=r)onYGgy zCc8&aGI92#78YL(QIIs;lY;&{KX|ws^on%k_rW#6o9l%-UBPV;Q+Tde3(_wmuL*vl z1(EZ1<13&&IbcVh>K|``(l36E&R#tK+9dGOZlJhTWsL0qx z8%}&GFBy3Ayd-&5XXFPuXTDY{_)NT9oR*{Qyd;LG9l&Y zi;}xM zajsGYQ~7_9He{;)0x>`b*$o_B%~9738m}d;M=9YD3k3YP8$W+U4spN`*QAeasvF+$ zYuQo%45bje-=%&Q8F=NpoCus#lEy-SLEPI?Y=wgwAIa8N;l>vZyXG3I$9TD&@m15a zl)HNY_eqCZzA3}w(U^>~u=kW0N|fa}dNodJvObc%6#u^BEut_K?7*DOXA`vE6h)z~ zt`VH@X&ra2nc9T76l~AON27Cg==>q=I%#us=-Av=sHu9M@sn1Rl!L3%p9Aut>*eS+ z<-{naT0}c?aozmfa0G=*!QhKjLtN|-BffP1kpr&%vmu81`|~zMj`44XR}``-e^S7o zTb@)%qvR*5W3PBZ$uB&c7wxNlPanX`Sha&_4puSHn6;K)s3#e*N_`Z6VH!fi5 zsCB|luxQ=knRfKhnt3>fv4AuzKR`lh(Kg51B~2oyH`{^?dMq3C@|Wh|?4<^mwR-b= z`gioRb7VU~lKmxH!MbyfCNTF6`q89xYdy`11EK)Y&GVk5nZw!a@hX|bu7B%y8{BQ* zcUgr-ALz8vI4-OnbvvUNd4CA9@$uDXAJZF!9TS{?iU`OvT}QWF$ZC?Xxk1vpY|O84 zreNxO%5nt#TL{)UAEWX8D@gmO-4Em={;GQlcbx0iBAA@#OOQ4!bX`?%ue;ts5L%KS z1+twh*bcC?vHlZei3fBb-}Px0x%-`#qehpyXEH?+VrV5FDYBstSb%WD3o^f^7iD-C zQpvRUWGd(_86Xx=bWI!*c=?~DEyH}5a(xs>&^6}2j`04+^57%>OZ7s zLiM(PPaY?4x6A5Hn#@Ufa!3_UltfBtqDLYdr{Soody>~Bh&%U)7o@AKe$v?BOOZl# zYCyDHsORx$-my&urPJ3RQE0CFp%SxKXaq5l*?G-jdc9)ikLGo4NS$a|;PlRfC@&;w zSac``5;}?s#h8)7m;&;y><-i~%j@_22~Z|8E03aZ#^5Ip$mkMqyRB|#SEDYZi)BF* z$ZI_8qU%>YqS)`f0I}%8?X?%!GJD{Uw@D`8xxqLKX8(eq?546w+~u3+@m|OLd5ZM* zLRX`4K^8R??H;u3Z`L12uWBeqB>EAK2Hexr$!Amn-5n8|lvd{GLQA+Tl*N zw11Oa?Yd~xsy0`;guxkw)Y#&)aJIK-^6r-k)@)_06Y;U)_hRT|?rn`)?xuf3VUGgO z(yb7W&PrKF(#^C#qlEc!tSOnsb_f8JcZ?uTPd}38kjn>V0%00@ zImGiSL4!j4bDyyi1Cu0^qNTtvJHbcH8wpO(MNhSp> zPAzPX==OtB9La=(AvfC0W$t{3==sqD9%ffnF}KyuP>go1^aYhF-rTz=rr;7KJv;V> z;)ZKR?jie6QwejPEA)1bhNjx4UFK*PW_vU5`AkWd%@Rkm8Efay%?ONLk%^aOQY@>h zt;Ezu)Eb}nu1mMX%mDiDG04FS7#FE1>YJP2l;{r6*=KgTo2EX)?aH4(k;L={MVS=O zBk}7<`r<^|le#(>DqX>Hv>q+(6Lv8*T013oVfEF4dwhOlhng0FFbnH#rL*IB6S2)p zef_OpG8$G9H@TmVEnDR5i;Rihvh{flYlrTl^PSo!=n&0xy09)61eG_{JR?pG$dU}9rr+W`G;GNF6n zDz)^s$4EryL98+ls{EBmE8R$^l;r*4 z|9$VeU+xzdYq@6T#1s4MXP@Up!m7Xg1lBszfN*yR-2^`rhO+Z%VZnYq zpwdfj6AnCpCjIz)N-?W||5T#yp?yM9SonAB$fb?=ir8@bB}cg;(c3{!lnxEt;L0C4 zuq(gtlBaBSZ5bAxt79Lhgcb8}-5xz+xv(cKc}CP0*`$rFdflY;-^=(dZ#67Nk&ZecJMb0QQrKJ}X5NkV`b}7z!LhoIf%pYCy_w5j zH`kIFiHS+#^@y4;e8zl|NJ|)gATqGjnQI`mOPdQ7NN#-S%Ml(2G>B4rfAy2;rGkn> zaE(awn1Vsn8#Rx8v7(l!%;Esv3Px>jxHf_i9aa>a+Jc!(7UfNPp6V9yvsiuuc6(V| z(J8dEq=^L;Jv2GQbs7GAY0sUX4HbwNoh<+kWwP)VH1MH+NkGkpitl23uk-zP>>t}m z?%GcbeHyPRx*L{cVnNJMGsv22&+BYM>h z(6nj=eGFI=h^|A?+=gD%y!bc?G{IHT#!b{H{0&87PQ^G$zcY73CnlEYg?uB9= zSH*Te2ub|j|hJ`fF~IINu``MG)YS3gez3c@5u<&i)!VqAqIc<|7X+P z5HN&fWbh<{iFnjUdq z?LTP9C@K4~{ARXy`xA*gR2+4fNGqYCHx8m_=@|*tLRUO#&=(c*5OgqTI!u1UxPc#7 zc3`>OSfs$3gpZQaK{!b8KNQrKuzpxch9HS88ATbJ@`mh|2rVzY|6C3NE&)-zK&pza zGfjG}N9o2@sh?fkM>woKb9>;S?^dj^lY2JzfRXUwD3{MV0}jQGavGB1S34@kOo79c zWHCYofrjN3T9-H6A z1V2;C{1K>b$u29js8sh9Ug7G9Ehzdc$WKoxZaTSL1*30FY-OQ zw7EM2Nxz8Sr`k_v{NGIr33ywgqZLb#l)lDb^jgirwSPnJz57?&$p~pwA1VcHBLJ>W z2)P1js-CY^Y?SWjNp@7x06o%Myo+san*(ypD1%F*QCfyYyEIx-d>#Kk`CB{tuU2!1 zzZVA(8F{gslt2}E^yRf})!=>sM>=;UtQnsXG#0wQk@jCRLJ^r?d=hPa!h2SOnF|_%8H7mhkKN+khM>4$>OOFAD01^enmH zO6|^WvYKoc9}B(XY97)ij9%k<$Ex_X8U?80X8YG|RZiEo+3u5-La zHa4=!s($?tcETsZ9u-5Y%SlLy(FV4bljkH0&RrN4v7z79WMnuJnUTSZYO4Jk$xy!n zjQP2ok_Bm!oX)?H*9yUq;;^CGBA+)UjH*qTd6v#9b;s6+WieM&tinB&2)J8;;3zS%!R$A2 zLZnfa!{y}`PvbNBP?s{J~a`t{+${l?1_r}{lFe>Gbesx4FP_3C}K?x|tce)__V3=YEK@zrYAPg7}hK_#I1|8IKXn);{spg8gER52{RJnR}$7Z6qDgT1CX zn{3~@e06>uG)!?&bMCVWd2+Njx>NT@gTJkg?`HFD#FDv;)5NN5aeq1%{~FvGq=K65crBZroo@MH`ZlZ zgr>#mdKdOO**|G;WWNFNX8+Oke0e&@X#g{-tt$8>k^v9;aDnt|MfvHr%W)`cUZUfs zA4lHrm-e3S@5NH=|B(I)?Em-G87saySf<1zakw&Z<5k!v86pS-=OZaM4kzqY?xa6Mv|jBa9!8i2T3eDa zl&~mk;+%*aAx{(5sKf_OVb=!wo4sphxpkW$^ja+{9`qW=_sgdbhhM)kAGoHp_9MUh z01rxs8q~haXi5>VT=Z3`)`#>}JTlwZuh^R3k|Gq5G-72b6Fd0zLEth!r8yEaBdQ~%6 zkrO5x$Mj@Er6xGVXb?j&zzW)=0l9YN#NxiRd}eDwnnL&BJX)87{}%VbSo?H0T;I%DjRzDk%$1PmK>?viho}w z5#PlwpLAIRix*eRjw7?g_zHs^IE%!SrlNy_Z5fThdI&Yi+9N57SB@Va$I6W|SsY)r zVN^yl(x_+B3WiuXYmA&!sF8=F# znvb~(FFYRF^ynGQ+_uwfctZGy)Sx^Jv0GWeoh#wH+`*tnS*xeZOYR-u1JPv((bZES z{FTKX-c6}ze#=7S(j>G=r|bh?dAe+CWwVLNBMEM1Nw-prFOTZ?QWvlrXc5jiWTHFT zce^o=Nfq1m3XPz0du(?0GRrtz-S9uN?j_roj3*)(MuqrhZd0H=Db_qpQfM7@*5zpS zrr3VU+W%p>a|OImTxfosVp_f|^K)8Gs`14q2_gvLjfKl|lH24?0TwR!{1Lqp(*~43 z0R0rnvZ2vOm=)SuP~OyX9~|k(r4C#m$q+!G-;ulfi@nazj<-mdkG!sJBN+n8B`$2hYJwk^d5BHi5K&Pl#+;!g zLS)}~|DFBpl&+r@s?B0ua|8my8A~}Cqt%%Th9>1G8yZEL>Prr$P z>~xNo3BZm?i5#z5UbRA$efy*e3$)a79-BP!Z`8u-L*|v@pt@;=wFWV}Jv0LQWN#Le z0TjS<@6^EDw~AnPOo94*}0xJjE+Uk_2RBhQ8hv?31ZFmGLBs*qEwOXz)QkuyQ^;^k6gLlO2+m^Oi`KPBg5%*$yuv_TJpD*N=mtNOQf9 z{ymKyw@H8e2+#-H{X`q4|8`V0nDM~gxhLRPpjc*bIg(Zhyu&7vJ8sMs$}VD%-u&t^ zS9ssAkmH?`AzyIB6~hCMgGWe%>q@orZ_!mv>=ixrMa_jm+^3bC)@%?YN^YBklgqJ8 zZH_tDfKox!AZ?Z^#@h`5Fa$})HIApxkK6BdFv(=%5wv9acA#k#nY0LCWl$T;!n0G& z%%5!Jh}lqAU~U?0YTZu(7)$yw`(F@a+B!wI&XKAus7+Qpc`ZA*)PY7kw5bQSy1IgI(c{^8g#cE*{ zSBga#Ee6YFaL-vRI_yY!P)L}5ySztJ1^q^E(V`u8&sD4}D8pIxg;}lBHmUGEmr&yX zC&J;$=cr`MF_}3(FFuk{M)}>*%9k2vKGDJixhax0Yd(EHLvW8GlU|OJy!}bBCDovP zm!0Pob9wZuaNfrFop43t#M#P}efj{bR3`(1;CN(Z{dQD{hsSSBX!isjVUnsbw=`-KE+qSNTY10pn{msDq{c>mT#Pnd zDU8euw!gpbL&-5!%|J~mfoq38q>pzycKaqNtX{n`SV<-3?KXF7m4qhFJt)GFmFLOa zsrc2OZNa{K9#j%+pS#eXxw}qf+69gPl~D;n5(xtZGJ$A&>dJe9 zlqU&!QHQB$E#JTuq?G;@U9hD8YbE;&2OEK%dszvRO6C#zPLhds->*OE&sRs^GX85t z%yvj0;egw68U`#pDWq0JRB-7BYK-T6gfwYf^JQs%mtgWS7=7N6mzs}|EfXBy7qC(>8CmomX( zAMUOm4t(t(7pz`uOgr`Hk~mb+Y~OyA!F0VW73cMo6xgc8Q}*u8UW819_smLycyI&Z_FhpONqF;Pi-<%Ym%G)yRAkrBKDgdY}L z;zp>Ar0D!e#k)jVG3|3V^w&kAdDNEWIYR%}iwL znqf89w?WA(u*OC_*khRXvB#+2=5I zYql^TuVrdM_heNDX)(Y@-z(@za*ywcd-&(RXjJ-b)%%qm$d_k1kR*XGk&C@9W4>PB zz=5?^(scUSY}e&i#m}zSg=%sTykmCb3K(e=_!{<1Td9>YG)0L0&Ic3j8IcO}rs<VT5Bgt6*MN9GN zg!-Dj3p(L$WNtzp{c!CwTD9ggB~4Bd`ti_4<&~wgr>hPu_^bv&A<1PM;;1vPwFsrL zc=_A_r)`c0t4ln+`{U6?Y)H(c-fZ$WS^eT5Jwh#YS>1Qeo&^gKw*17nbFKVBgZyeS z^#egTfW=kN?A%hJP@0_FlPJ6&=|7iiG$~^qpvy$9P_wj&nfUWUoXfWrDT@u@-mYb) zfvfW{zt5`kw(u26O;TO(J4YivhqEd2z_1VO(uH!(dJi8pd>=WXo$wpMnP#Q%qh|>& zRC|@8Svzo5>A&9WD~L~y*tgdF^Sccn_NU5PHCC<)!omed*3}~W1UboC+W>F`8mv=C zcf2ps=^`mKY1FE-IaQ?NJa9fb_x0|_7c0HysNjm_3SDUw zneW$BclW;5%}fap20T>MAZrL{gnQv_$X?X?3OBF*E~@wG=)5>G^eCQ#Vv2U|$) zvtZWQbMGv}mnZQ_8B00jo_ns_dQIrVqw5EH%fs?Zwaf2tB~C1n7zJD8mE-~r8D40L zQl7Y+t_vgh16Yr{tb!}(5i{z;AIDck(;plRdJwpT2qZ2%~RDoK5`kPpJOU4`ta(2)|t8fnZ%2duwbzRhPyh72b+6vey zdU%*@S@cn#n^Djw*1W#27!|2UBRTc_w3a0C+~F{OqEHl&G${m}D8*L*4xcxVyZ;{E z9i;V4UVq)uNA{S&b@C_=zXGa;+-pR-Dgs(zJJubyT6%p|Jl)7yTX8T-tmV%(CatB+RTc>DU$Q~ z4|hAU475PJus|<-X#9QAY^)Xw=NEGtzSQgXe`85c;pYRa*63HOPA_zNmmW!-e{7wW z`X6XgCh@qZQvR%RI5+rxX(R{GL!Ayp2$r z`at0{Y-=#7O!N)um&3JDZsz~lO={0m?vO(HA!G7eW%CFq-&o%8A888eDXTj_4ab1? z*Lmd*KTMmNl5!CswSwKmqrHWbBNThvG!iuYL~w?vV*j$&S4zN4}qy+&bC9h z?e$&6UOAyF4tdQ`j$7|#V>R(Vk1*1Vzanj@-7II-dgak1nefSLb|-lnhuwQ8idSN2 zf2PoE+})Z~Yim@!_pf}KH3fX|y_HXixcYC$UrC)-kGnNLSSq4Rm-R;(#$U5KNQ-{~ zvW}O%T0z6fxV-apivhEdmZmI>K6z5;#(&3y`J{9LnG39~S6z}4Nr^ZlasE_dWeT|(+<>X4T$Yq(akV4_<=%+$pSAE>JSmHniP_e^fQSdX?|~Mwoty638m7&)x(Z* zWVpAJQM!xe))kgb{vGpuo^0W%>1f1N0@ujk_0XIbdT4GZ<2bkAn))&A6URkW>PG!q z%SPTgcM{kSIN3`^h`Q!IyxTU~c}xXV1W|e~Ybj{t{S+MEsa>Zg<$ivs;%A~cmMrRp z!Y-dauI&wsG0Uy++k zitauD)w%bgbu?CXab)rd`yCnJI4W~hTQRkjMM2;!4iHi_uG9BxAiy7w(Shx(Gh3J6 z`lyS$a_!n~5hk=lPNU`Ka&kuh-&5PD+uC4Z&yniP`dfRwGUw0xSg~VB2-wUvOg~j! zw1VrAfNw`hzB=be6ZJ9)j)39&;DdXhROoZcTKd#9QDw-*G%sDJv9(}$+g9Q53TRRt z>x1*0njE2l#-27rkk`_aBcdGr@_fW#0M9HmX?{TOew1ZMRSM7x&#p*(%TE>M)F!kc z)xzm^9IvEwA^T?B190P+|ESNOh-q0~7*le|*U67|ng#?(Y&^KPr!oZ$s*?1itNfn# z1Q&C%I#+PsmsEj=C@976et9}ZJ;kP-=R8x3Cfe>MXXTam%BENao=CqR=^FnZ&dI5R z+}ZFa5!rV6PEO*3Wcd`ulSi)E7fX|JvdGz1g3TCv3UIQn)Nt)s0NP(DwQgO8 z6Tn(DTj_7A22j8=2=Ih=Mo?T09WfCUlu`A+7*F@plyhK_^DhLo^`8&`V!- zrwzpeDkVvHLUlbOM_JIMc>J%w+k31bvW$-6k=UMeEBERbA@4F&n*1XZdHRAA<0;Q0 zOa?ML>;JZzf)Uh~D;~*WUUOE+65;IXAS)ZifU%JqV@S$;LM8<)rN~WDMr4bkJU!Km zpTbQ&hzX@8XN^q(q1_wAMN^oY$(aQ-uqv%wAd@PQ!%{R$=b>_o&gZ!03)Vr#R$iRZ zYys_)Xd&C~SS4CpSrz4_d&TmlnVl0ytx`rBQMaXnhQC5^pCU`1*Nr#J@RZuSTL0r; zADCo62ToxSpzN{OomrvrO}8zD%P^6s{_ReK3mKx{x*NSesjA_=PvIcV)H;GxwZZty8`pod=v^y^lcw#jASw-z4p&J!|-<5hF~(ySKvvp6;p zc-*}VjXvQG3AnZQyg)E6SZQL$Vg==i{>WHT>{ppI%JbU&H?Aj3hSpk_?Rf;l5;WmI zRvAm&c~j46jRLG-zlBVSh3-KdjYAsL-T#Hog1Vc)94ip;@&r$Zc2E&w1TZ(3AZ8Td ztvxq14_9au=!!YyN5#=|C<0|KWg~+YJNREQ0ZWJ_y3;-k%K1E1H%KpAoFA`s@$AXf zLBjL!aK_iArTD4WOvXq#Fd95)4g#Pt3y9P9-o}@wzwci)TQY221krcZ=4x$l%&YD&zSi9mO=qW#Z|gQo?OF2C z`S}~NEUNE4iT-a_>x=4}KFUgTPA(GEHeXqE9TV3IgOlCz{vcL|?trF{5Zv`77>a0M?{Wr-gJyB|h;Z(u zwmQV)ZU~*Nq7Q#wk<1Vk-GU=R&q1auOtR&uRM2Uy0{o!-FAwNovCbS6Q!?VTNCKj# z=Y*QS!sQR|T*E&o1s&o7$o5+NkY?eV0tTC@e6l@N`n14#_99+ty@c0nc-Vf+26Tlp z?+VITJG)mZdz8|;@@&Hee~&g~E-@0jQ=7;e5_yRBZUGI-gA#yOdb*a7pk8{G?xjQe zkPI(esjXI5(U4iNuQAvGbXB%_P`uM~puH}&H+Rc|CnTH06tC3N^3o`%dvfzHj(Ag5ZEWY;^caJJW z0F2JuaWT!EXQCe%by4^J%UFSr!!5GB>GU)YH@^}*Ub^YS6>=YMPjbDZl)M5Lv~+K2 z_@3?N=7(&n%7nGLUb#w3|D!={ZPd)CR^WkB;;`%f@CL zf!6phv@iG6;lf^3tZtNaVQrT2%qY4avMrB~H)@M^qS%$>u{hA87?C4|$YZaaxt7mM z^RsJAbR^;sYKc=BqJp-Vt8EqoUr;r;q`$gg2X_j4jo~_m*bF zr{{{|F9?(UlIAASy-~=$93^MYcpHv1XIU24eI4Kng(K(spA%;#wFdYvYJ}OJ()!te z>QrPYPN1!>1hIHk!)Z{s8x-F0#LF#oiK+nYG2gnBd;1QP8}LYY_uUmmf}CH`SKFWq zHPFP_LJrA{_9g>@fdH2KOspV4CQwUNh4Y?@taZw-7?_{}{_VDSYrS*NTYFJ5B=i@g z?X*Z#9r=)l@vo!jCr}mwDYfN9_h&xKI^smFQD;x*TJyW(uE}tU668L8hIES^kRaMH zO)2I-31Eoy?)V2H>mD)fz1GoqKfDglNq$I)rJ^xEiNa@dwr}wfZX;&2DL~(DC1ybU zq>f-(MJ#N5H(p7G;pd|@>@&L@AL^b>;ggAwSLOfC^pqsQ&=0*PX^rY{QqV&vmdV0E29z9A23KtxO4Og3k zQPaL7`N*(iB6b3lRXolf(ESuca=3gcZ_ew~O)d{w#u@UeUx5lhV1%WG$IC87;kGLF zZbngiaMH+MvFMT-GO>2|%P@v%hymNc^_8yfJf7cf}7u^cl!vYyq4vaht>~bu+e#K0_SJX;u7;%1op} zh%gP|fk{3hGgPJrq*vC1B&7FzhaXQJU8fpW8qB)hncOZ?jCrwYsaa&B8uHNaW_V7j2) zF%5*BS3ECDCJ59S|3gBVFCgR4BQMxcigw{7-%l zk!4Gsk(KA;$CIkOm~MyEL4ApKc+nU5cyFVgNpzs0egG~6j?i&&q$+7{Ey~E^5 zP*9>7gz+(c4R24n{$)40Ifc1Gp_-D-YZiQ4{YQ57jpo%gjaipW^y;3ZrIiA4p3m@Y zm&}(gX6o3GF1?_B>u90sYM~PdyMYUlD7wY&{4BB3q`~T3J1NxWFDv5y3 zpA@LOVXpg^CjGRx^**2N;Zr_H>$JS3PzYADfg0CON2ka1z_|eL?J}nv3)qiaM}?TR z{sGA{N+M9*{7!rojfC$o?p_M`RQ6Kt>PC_38?3WKBw_rdARt-lJ^MzJq3rzJF2tdL ztktWVH32U{92HMRNt~gF)`B7JNjLSr*RQXyhciH65{LdH`DD-a5M%jk;_MusyCwk1 znvF%z{m{0DYZlte--P^0V1(y|f%knjP6u;1q#}@Z98F=#agGcK;D01)$o-zOKwdR* zJ@l$?h9ZDqbXXF|O0g(k$g#XFCvJ4-f^(G+CPATxEYwIHSV8mPNWD#YxU4JxlvDP3 zB4?^^s0g@Ika~d|1Lug zL!Kqt;aAXppq|LxD~4vsuKg*xC%pVu!J2GcuHKP@faeH3vOgj0FGKe@9~JN079-`) zk;JtkRA^mS^BVnjna}S$QB+UE95`2Wu|S^cNW69@`Q559?$0bR**5b~F@>KDv8=1Y zHTBxdwavi?}sy|IA$ znV)u4C=!^obp%QF-!u6XlC;#wCG{_h-{-u*VO+t}Oz05m!{oPs>~zWVke_ZisT-`8 zqqabRk{AqqnH)3>&+)Jw#7RfGuN8%@uYgarBovUq_4P`=Lmi0P_qTqAgRfR$f175^ zd@kS3v|I;`TwR_=b<@f(2p)bRf_s!bV_PU0SR33_MIY=Gh?A?zQHN(I8r=$?)rlt= z4wVwXqAi#X3LdkgIBJx7FALGieqyt!AcI`ECAJeWfW-mVX-TBC>oHI{YE#41DSpbA zVEHhRb=4payzt7C=iE^o0(;DRw86^Zms{ZEMM zhrYOVw})f7+LDlIDpY>yhsj#I3<*mc<0Jm)A^{Hk?->#Fao1xC#ofPAa5Kl(y#S`-U%DuentG=H|U4y-suqeg%ESMI~=`S>IqF zXGe7M2R$-_U(Z!Hqmho@8w+yMapL~%>fjn)PFdBsq{a>->Eh~KAU_R>b=ePc{+M7?vlZ{yQ{>r-4JttUQF?gMRWtN@)f9(#v^+uFQ~!3VDhT-{8SqyRtbLROIhwelb-13Rt5A1l6$Zq01 zP^bL--k~LogX%wKfZ}ep0l*9ppl`;~^YTYM=Duk}CqS{B9F5S?E;drQ(%u1+6`(3p z+gZ{MJZV@lVM*)iPuB0HG#N>;!;TeIay|>3%TL}lZNN8sxIU)iH=y{gzAfBSa9`Um(AxaIWSNj+xsW>F6tdeMBbTDPY0{tUl=uxgQL13eu97~G4S@KFGd z<-%D|d+n(45)gm(4OnB{#N6L?D7J3luNwlu|5YrZ^r*8M!Y>L#w3=AHY(diJX+0VM z_1%XKaV3P~4cL>@tscjT)F~7u{F4(FR_Vp|aC39(6B4~0m+L+KLz8{`-QATNR%_+< z!NV`lB6<_ij(|4Rg^5jJvJ-2<4+di3xjZ%%VrMyzsk@m?>z$p}X+*}u5F4M|5kfZ- zSeeYvR5vb`I;EIFylS_aR(e9||FoUqX_lzpb-{nP$Glb?TRn&{&KQc8kE}iyPZR+i zbXfwQQma0|2ntaCz!Lp|@{$jK&If)P?drj%fVfJrxMhil10YiqIBGgY3lOm~JF&be z$@Ut5t&V&*NyY@%1BZTty%9{IF-LrbA_VN`05Q$q;?jw8F>=IJ0i&{ur^oA8kMByz zaE4}^zJ88^Opi2g9_C@<_gj*I z|NS&>f3BETi40`TpEM25?#-sl zzEhC6Z(PSlbmvjM8Lse0x8QvXG%=gP;@4=Y$Y;#ZA746f{c`x93f(M#FvWCey$wl{ zMJkay@UMQ%db9Ifrbzy|`iGYRJ~0;T9T=4=NT)eEDO-5ywu%%kld4>wq_tbl7`cj! zV|6gt;$GTTSmJ7`5sxuhz=%~`F(u$?MPq_jo0K~j@WQ&ke`Pnq;YNq7|1{K1zz(d%}e zdt=OMySt=;MTI|VFYTahFSQ%Te1NpdfwEaUMpwrEh$h{(ilo*s4ELp%BUSdR`)2s` z%VKYtk$1RSV^0b@+Qesjqp;lU+`kywCZ!~;Pxx`V;3oWYoEDXNvMet4H~&?nEC}Xm zx5nm&xO*zK-U@xT%bLWLSp0Q

twX9N*JIgu>wm^CFAbOM>Kdv}8|0^6TC3Vlo&E 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 Zq^HGp2e+oBf`~gV$X>*yOJBMBzW{>Xy^R0> delta 146535 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 z zCk@&5%hevZRre_q4`8T%SybUIOUtr~u(sDyVd3K7&}nGr7vv%>@u;bjpu*wuc?8t?(nbLIs^+Y-Ovm$au%^tfgE3 zMx^6e_!lBwhS1<&9-YPi!lOI8F;2}4cyv+BJ}Tvrb_UT*DGbwoo1MXB%;A`BIN6V6(=8NTP6MD<50XGN0$_R=33 z!n0SbmN?kg5L{J029-aHi>h3{JKJQ>qMigyP?mCHOL!i^*5)S*Gb?AtXy^y!XWx7m z%rD_O-7)viI2LaFv3W^zBo~_f_*6n$S~gnr{d5pIN-kT+vGD#eO>f_Ete1d=&lzz2 z@TeBJS(Bw(Pn(B)w44FYL89WK59MC&?}>hX8p*%ZJv)#X5cCxKhG(r>DRbr?g>@@H z@R*6g+A zAI2{7R5YtQa!yC$dft7^_QEKr?*4ReRuf5ES+AAt^-)!h*EO|2hlS|&9*baIdbFbo zCm$OFXlEn@vOj+rbhHm^X+o?NyIb0nczj#Ob$CT`)(XW>uw7kCmv`T*3Oz~DTKgnn zY#}K>v$)$Q23QchhV?PE?XRLeNAz-sfp^u_sqrP_s>o9Rkx=mR62_7qUyUR~*Vcq8 zyo1dGTPk>tghp4#!t&HmMh6|iQ1WNDklfQyFY!puFk@^A#N@sAS&HsgTIJgdU-MqM zp(d$}Bm&8^Q9jd-2tQM8b7bPs>d!J z%%E`qjKFsngVcK&J*+|%GCe?CmmK<}Tqgiu4y8RK!;mb{;tws-P;#&rt+s4Gl9Gp;i#>uIa>%yMX)5oiu>gMZ8uBai z)b=S<-W6X-6ZP04y<}5(G#BHT2k=;d8!5L!X1Q?`cT3_&`{kh3!~rqvHZr#19&`x{ zvgig@QOElEY*uMpajOO%rhY0OFpVMEy0v^2e)%B*Yz3Dl7`5AbQmg^kr+|ugx|hBb ze*ym)E@tNu$iXi!h6ogvrt;bBvt}K2OnWI12;qVx76V#@3KGQt2~)R^g4B#`%B~P5 zsR99BTfF?!zR8Dz0BPhTfI+q?k2r%-!Z&3M!p~zW>8>yhrwBy(Lp&Kz92V89ygmdQyG^l7zyZd~gX|GQeA9%WfAjl6@@A@XiHXk@mjsLXhOo z>8k}KTWP5eK-t>S2P+&v1hDxit}Mz3>m)nJDf?9=bI(Ke7@Sqt+$UC22y6#n#o{l0ZfUdwTvc*Pa0&lmJQXdpHwoOwOiJ=Ajx$5+ZGrW##_{qv(Gq_)3@^g=RbO6K0psVi~in?SJ^N`U8q?|@D#C83TDf20q z@7+cUT~_#j1^&h+B*$$1l$%a99*p@lFUZh7JX~|rlaRr1hSgEkD^;ilMyv)PwH+z& zY{85oF(OQ$K%xDwbNrr;p&kFHfuP4Y$?z5)No*28swUTu#VE4xiG?jHsG-DwQl~jn z)|{+~&LO|@57wl&W~s#a6{)RJ)r(a<#wSFWOAqMZZ)XsDi8#N2nV_)=K}~y??Qzq& zbOLUWvspnd^Kh_2yP53RuCWp2uR9gSFUjyZOmmYS0yCCy_cxjt`jfY!bSBF)vG(vW z^EWmw0{#Y-&xn;gc2=^|p5>aP@BR4ub%i^`#0C z5Tjjxvn;d^!D%VE?UX~;vKLyHCqn%Gti~bMv<_! ztZ&TSRWgfYM=y)kIp)|^LBoV||`$F~ofi5?PY8>>g)A5Oj!Q?e@X${dF`lHw7- zW(;b!lrcMINeOIdgX9ADU+9_iKSIwtF3gzynh7ariKjyJlHu>qu!b%0|{#u34M6rQUvE!rkFi#;#82{{xM24Y+H zF}4fsTSe~QW@%Y~Am*H42lF|e@@O&n<&EHz0q%(M6TfbXxC{9DD(7Oij91q94z51g z2p^OJ1Jha)z|K-?eiHoIuj`Ry`Hi6pbW{jAQ<;WPR25!WBnoLReJ`C_87a&eHrF?t)RbmOg$u^HXRge$`M5LP z;7pSQM%NBcQQNLW#nw)<$_$=9V&Vgp2M~tY*|g&wu&9X|l1E8+F$Rr%VH4yf`ZZR% zh5P%)SDsHj!yYOoH={b|?tPmJc`DsXtU*#A1J3NyH2GNxksM0FsdDXD!&E79HBNmE zjvx&I#&>9x=rj%IrpkxT3t>@V`<73+*>X-}MSS|-HhF;;+$u;ipWmc(=(FY5_l%No z^8njF9I%`ln6oR}0D*L_H3}&!`^xp>cU^O9V}{u)Sj+>A;vS!vn9=1b*v;0ll9Yd4 z(~nXuoR`#qcJ&T9O_T&_OrDj2(Ze@5nA6Asr{TIxgJ=;HE5_f~d*}ADlrs}g$cJ+) z|EYj*7?kEjjwkRGrzQ5B;Xp}3?#Y6&7R`LWs&Ifg4l{tnf%@%z3PZRR->mt{c1GLz zrl8btgl;c$fCK6wDo0{dbJep};Pf`4Nt_(g4Ml`S1w9>w@yF8tJQDSlzJCv6G|a_3 zf%lMdY)BuBYHDR202j7%7xMfnlOukkY`kE#^1}(mGJRX7p(4gQvQ4h%)OL<5el`dH zHu&owU4!0_Ai(4(g7ykRq+5NzpN=Si<(AF{qps`$`$$lNz!JkuWaJCs@#ww&y%?CG z0`|YB%|CdCJ_p8BVQWMm6gOa;7zi!hYHHq0h+g(X;fy@#F0`ysaT;ejwJgQ?a@j-) zyB0q=fWEj+!m~ItZS4lt`v{ygweu@*Xz@f06rccSRI)f%;a^tv)<CFV zz1czS8Ys0W6^E*?B1ZW3tK=}Erjy|uLWW=TJ)mSRj;dUt>}D=z>TL1S?Y2-R>)YMlLq^+Yg~q`jNW5-DE6(!-Wz2qxz|dtdGg2Z}ShI!8T> z3dSvbXmFc@L)TpPEt;454ZobDJNx^M={cArsxp%GA2Pw>wZ*ZmjZuW!Hi6qUTo|op zRRyy!&n4M5Su(pXIT}g}*B4kR5YLbmt?jMC&a2>L&^=Z?JeKsY($QE^Ca(yJ6LsrmrL=HuE|$ST@(o(b zfIiXj%Y+eIkfPJ-*%SB?Po$z7#_NVm==t$suv>`BNO2S$3?E@|&9B_6fSt7KO{eXc zQ397~1S*yuViJ)%Dax+D$;0Eyx`W{JtLom2b&N~*t158QBLAZO6=9vzfN)rdO;=kG zfgwOa)4geJ?dNPi;n)o8Gmckb2s8}M+VhGDKFH8;$&xCz)Kc!0L%Ovy4PAS+Bq!wF zjm7KVrQd#&!uDkPvv%_(+j6G~Jm6%;WB?5c{i8y=cZdNdF?>{#P4=1g;`|A0h+G(9f(m(Nj%Dyo%|<+2VPp=xzlvmi}ae6^<95`HaT}ypceNY%%DxUUNxBSi2PVPVG-v^;hvYWe+L;bLv z{MVv*2n1u2e=>kXmt;)4hnmN2lhAO4G;;5BtidZa?uu+%FmR5$r{0#ySW<=GEK>`$ z^gICEp+aO%h-Eb8AoA4dX521%XG8oJu_iT~mG^!aUKc02R`wwZ4_!pw)g5akq%xTL zu@H|@1H`|rjI3L8U7Ck_-3rEBP3kP)00!P?xWJkoqa(l1w64+W$A2RgsULV!-TNRL1u zAA@Nt1Esd5gF@XQgTa-o${y|CcKys+1emcnWbC&}mk!O2s9|M$XN3*IKctn`wYD5U!`GOSb3MB3mrS@$ongi3o(fx8fzI z-qyI;-1zg^>D6TP&P5WDvR4vGtB=+*zsS9+2LbMFl(>oGcjOO?gy_2}=LkhK(FJN1 zu=+dag}8jS53nd+K79m;&W&6UwoGCK06Ucl4VdVuVB2yO<7YCw3YI^Wc2#r=xl-(& zk070%+p`DoB$np9zN49Pb2`-0!qR#}b0*H$a)vZtEAeaR0K?Oq?I`ZWgeP+|k=HhO z3kYFo(K09u9W~crDSyPEWV;X>WoDHhT}q3xY(vT+Z-;3Gj7P3YAWopJW3QjFzk+e` z$1re6M9Kix@Yx6I&+HawXKo#<$_Y+{Y{22^Ct~IU$0_)~J`oDxd%(xc@s`mQ3RdX+^g{RDIY6WQwB-qi z*l)_7U!KbRp<*eMY- zzTi#(OU22Kw*Fs{HBey+uv(esPf5HUE_<(y+l6J@F0q0jip6qA2P(hwJ3nFx#3ji} z=T6zw!Mi)upaQp4iVWKp8xtR}HzLoafZ~;f2M7QK;D5`cTi!k`2mQCpOh6RiaBd^@ zsU=3NflCJ?qzipXfbs13YZT76JS8%u4S+5}&p_ob5`%8BiwLbOv#o%LrpIf$ZA&(0Y|PNm|G}{_LqizE?Ek>J z|5-Nle{gKf(9nN*-f|AE@tm2DeI6}2I9+68#>xe+#>B{?N1H6Jjd6fg0}!T>^8l<= zAh4(p8xxmEl1N>i zoT77PuesB2{nSeU^J0H|^9d^`#=bDTfbf_eN(ER7?~UR%4U}!$K=&=Ve=Zsgrb0hq z7ZaHOy#Nyjr2>R_&uKjb+zj1G3*Ph>UwK+9?lr2q5OCzCZgutaR7QPNbj_Rqb}X+9 zE(QdG=e^uDKSCCyzfBvT;y+Jz{V$%p;NC>$b4!)D;LVPz{nepeh&_O$i7S9Jk9W$G zCm1z}ST}`01iMq>>6Z!MnT>;Y9(xFI$n7d%vOWG@yEc}$G6T4?Z@B+j!*N!HYvB+8JJx~ zBxZS9%7Tbom|U783N!-9wJqbyV)`>G=#H^lZGFfv%LKFzC?|h-LyYq$8yM}P3Vg1& z+5j51$3)5YRo8aGJ&;QAct-e7oqqN2(|5EC4{*=F=!s&Te838HgO=-kUCLmTRo*QF zG}yf8XCH{rE(Fxa*jh0U38~z@UQEG?o-S>HeNo>Blh}Y6Uu@ z^J9M2)A>N+E;!~iVM_3WO0e+06M*^*);LRUcSL_R1a9}ml<~T|Pb9mOKmjXWu@0FfT|}9;yrjaeHERdB9Wb%y_-n(tL%NL z*!ZN^-I0PljB z{_WzB-8`QNz12hs@c|gWKQdLPSO7HADDqso{vF=LEpHXF+CTL+Cj`#OQ2weq2hWZr zO5MaHB&}W_Lq4DRgBH{zw2 zmTe73J=aUDk9-tL4C>ja2IIcyj3OVR$Y5CXYvE8-n7qFcHVB{!@UAbqXGd=!aOEc>@&-MVh-v_bQXp^yxn)|5f?D0!>Hj$}$H(Oeau=*~y!JZLjVccS zsHDI^2Mz0~BKt~kL98ncEuXUcp&Mk70-b@hQDcrvk_H3&%v>F>>z!m|g; zUm_gGN^K&#=M+#%+Q$)~w$##G8$c;a$Y?-|Ozb1g(?P9H)#+Gy<}kd;w-Syk)(jYr zdd@+P+#^BDlt~~L6sYY%eO!*JrgT}iB>JfzDw#i9U-iH2Y!Rb$bPo>A^-5}i6L_dw zIRP4r@J(d$lcSkW>^OykUD=t4L$ zhf^j80DD+@Q|<}UP;2DpR^Fm>6$$EX?ETAW$Xza;@26nojig=7egfn3@B3L{m{{CN zp7cEDj+$$kwyc!}22Vi5!N`;H0@n-4&{hI&#n0gebWzj-dZWi6RGF07yN%{WrlC4x z8<0774b}%4jJu1DD5%iP?a(wLP8MM<$E$8R9%&f~@}#Y)a6V)&r3U*)OtcV3!zi1a zmbv(I`o-D6&D6tbc`T#gptlRT`3E>_hBO26!N(kZ zpjvxBAjs)hcyz4%DMQ&)y1E85{Q`#=k(P%5$wxaBLN;*<260pfs$1Kvh8A5a#?lLq zPwp2oivG-xf>Sr#=y`-hb&}ugT8}Lv+jz~>?%+WfzC9dBS7w8fk9#TYM8P)NbIJtn zStMnm87{VGn$qfrwpD@H@^PdA4RE&TD#a`eu@Xree!y~GgDP(o)IMgUG&K!?8@mXC0L-eo&B6<_&{1G!)mcL+cB z2U7WT!o4-4cg;RO$}*&L@Vd{fx0V5@+aSI2I=$?3!Im}UE6y&Xu<%ITC12X@#G5~3 z*i(T)@@(Dots{FkX=Hw#6SA&)n%2kEz5Q<~FL~fch(9SCx4ViEAVl@OxDqWm8rKD* zf>GVEgCT$$p}R;ao#UIOspn%rmHo=%$=jGqv5({NpUoSYcX-E^-+I*|fR^;e)Nh%E zD0oK_?zKcZ0tM-vM3LV@xXl9g|n2&cRH;&A6*%H0lyk8x!yY~==6rn zb-vRqQ}IIxP{NLs&+SzP0jezCIwUR*xboTwKNstf#{qh|vG#v(W$U!{)tQgY;!;s^N0X+8;pEWV??ZkmAzl9a| zT?^z?@Fgz+^eLNDAyQ4Zq?Y(Q_cH})fAVmp@aGT0P^e8q6eN0f{u=q>BMly1mK z!o{z~%+nCj7YLlQ*vHOb1O4Y)%fTs2W743lk5z61BkP5N0KU-K{q^bd);kLeHd%_k zgdVOwK2*GqJn1D}p|I$ia7U zX8Znh+LSVMm12pWmzO{hKOZbkbK6pFghc19JuPc&S}Z8=xvTIY3}b*P`QQJ^%1Xi25oB}@Q?B1L)P5sEbpN63eYe^;V&EFsCQs<=FqlTrDXKYWz9Qq{RXIIfQmb$t zHArXcF$HLchK5OWaI&sYIe!eY8IJ_g(udvh9o)Xy$JRgvytw#b83YEbAd@`?F@Sv5UOz zZ*t4@LRa@cGc>%u{{lgU0REwNixdfr2|;c7R7-eZ%o&;32RsK1mNt4D>1p*)3$Yl} z*Tf1pzZn-CmzwmNS28j{&JthQNt%HL;<;3}_poq~3C&pMo-1|lRe*r&*Y^&5yf^O1 zxZl~Q*>XZ|vWsHwveun33d|k(1QJb1h-eHO{DS}{9|?ZUv@rNRL=mB@S~@l0gY*u} zH*&1=Uh{%X<_tMK)pdl_Jtd_fnp+6r1+r4}RSC^6hStd1)()oG5)KHu4M+GrQ(y|W zOzdngB-XUbMB65;!BglfZBTcLdXF~aZn~)`yAzSmgNx`-C_3PV2SyCV3GV~OhYl+O zgJj~o7{*bf6BeeTm&=IB$ziDf)nfkp#A}iICbn2Dtw+vL#OmnENFhSR-8SaSz+K|f z(o%0|G4xn(Jz?Yr<>Ql9=h5u2P&70?ig=E&KABYXV22kl-9_L7AfUPC=)ZBTGQ*AF4 zG~^jmP`oE2rO`NXER*;W;L!y|B!^x&i07STS@4p!Vnqmr0Ke_9DY${%nhESMQ{c+&k0b z`kSi|qN#_M(|chnRNYAXSr4;uRAH`Bkj5){^Dl2qOD&F7-NjecEp4nUB%7Lbx}8Ts zLb?9XH?navj&)|Av*)0BwTAC=otK(F=&+LU=#g6)PvEK*R@L}%i=Efk5dO@7X!@At zkcVGu=PIOZUTD63D}5X3j^1xDAwVA)=rn$XWOL+pSeYY!fPBF#%TN?y*HxGSTa=gaU`fG)(fNmBF?3^g zs$6b%(z!`%QC?PdZYvj}Y3tK+Zu@DI7Sed4s%yn@e-ryMDHUp(d9SdP9nIDbm(FpT z6rkkYj1(ztdgmR~?Q8e-%{8}2kG9&D96nc>(k?76&i8%^G28jx7lI8?1StAq{oom`*YckDx7N&63 z0=iKWW$P)0oYz0yQ3|BPadC>Enahr#jU;Zzo-BkGmH+=;fm%{rwkB zoyGMJVf{_BMrjhijVgy^6F*N$EKT3<0hP%|X;akDZ|F2Pcb_)kfXBKoO)I!PoODJ` zPLAFvpslhR>K9va_%-H>(pUmqMwnj))a z{BgTjK(r?n&Be#uLYHd3(gRSN6>k*2EO&h{s*`l%BN-^jY0sR`RiQ3$ELa|>yqknG z1#lb)Q+(uZ=s#|X(XE?Fj{yLTsZ?G%420P}|BN@!94T88?`z(4a-X%-^((*D)?)3z zX8U%Px{*<&MYI^frQl%wvt2=lT)z@)ecGD+sN*+ne0Z50x^e~mS?FSn#8D18Ntvnq#+9SFWQ&+~3$^}^ zaho(f3j@&I4xgDOHz&fi$heMVrSa%S%-y}%qmd^|6#1`3BpiQZ=_$V`>i)fy32}cL z>?xf+%ta@qhT_k2>Yd!+ekUQ~v5bmN7s+e7tP}z|HJZxgjl=^f?6X6QDSh^Vv`XgT zOjk8x*&~0q++<+N(eC;YTN@rus525$@7kUT_!hMH?~blvfFMBotLjKS0o}Ohf{yT# z4{u7sHEEqr?>@jL?azFwN5R!x5F@T(MMUeGasLQmZr(MRG{ltGzI753Wm{uPc+;)3 zd3mV}w!CB-kiAEME{f>CRSOkpncgqMo2+`+Q9i)lnteU9ZSxVAc9}E@46)L9GDVM! z6cZtW^DZv0II#C5G4l1j;BV`zQqkFE4{#EG+YngR{V+w)OWee`QQzuAXB>bzro_P8 zBg^NAE7Ron)TzX*uLdi8pwItK2o|mK@I`U>7az=;+jTcrY>9#)loq1Rb0X**R<^_a z?syR&_y8ao@JA3lqboj63M@4ryN;QKnyI>gw-e$bPzaejD4I_cao+&W5tG38lUX$xT`X#o1bg^qO5eTBg*hs401D9vbdmIiOLikGKsw)W()ki z#Z1&R>wj~&68CMjJ$buY{nY^9^d~kHce{vS@$Ho7#>^&At>G@MYc@76{)+s zt$fwn%RSuItG2^3<3cW<9)IESoN7D9LxYy47DthyF6{;~!{37dJagbZ%xs^3Z@`3E zvP|9F++152q5a-@GRSMjhcw?Ve|fh?1~+pNWT}tQL%NAUz9Sd+zYPVQ?8CX%HX&J5 zXIyf9{oSd+o^<`g&!V?kSTs)JqbOv5RM?KUfaBj27Vh=$i9C4)8l{?a$V8sdYmQ43 zz;cn{YZVvIGfH1bddDwg?(aKHpGr~rP^ZaI$uDnIVly&Gx?XIGFR1XQldj|doZ>`k zS;SHeJvK(^czB%2n%f0YQ!c0o7^D~+9B*)le=aFz&*a>jXYg6+YsRH5I^qaO2vG6d zm{^m?-;+oH{wmMlx%8aE0B!nSHG}?s5yv<~S77 zB{n*g@>m`;y=375XCd?VEJ%IcKZE`ph9YoYU zQEL^Xe-|pgFi!qwp_o|iJUkoy6X$_4238DpZ`uAVN|K8Z+SR183o_7Z3$yC?h zhvOK5AfojYK8jfh1aJSJTFQS|i6ipC?5x%>wXwMAPOyDK{gKz^Y)}S8cdBXQ!EdEq z4`2_ozf>FvL1q7t39`~Rzpprt=i&DMsREn_Re^fX8M`lNC1oru6ag`QdrMQ=oHlwBL4-bUKE=ut^e$#F?mYDmIz-`_0q9 z9XR)zQg|5~+@Vkv-`O>k}eb`Z_ZZ~Z2Poe8Q7sujmAqaq3+o>hFOZg!x_$X|A|*6UxLHJX6#rolA7)D z$o%&9=l)#%w~w(&@u8nzwfpiSzxSob5vjf<;wAKi3LzBp|>>(M@R_F5Xa`5)%n)x zqXhB_ZX=(xbVL~cO^>)6c#j+Zv8w0o1-*j|@$T;ST9C1n*$mJOFIxAdnk_@bRdifj zP2Hfw4d}rV6hi_y!{Y`Xug_PY>q`8dh5-Elf7@5^?+U(NHQYO20fq;S$8U0F4<|bt zv9;FjQN0}Q@NVvFLO~OusW(MemtykSr&k~wLO3RWVc<9>ZQgy;OEfq z{e0U^R^x&bz3gdJ{qkKAEhZI0QjIvjz1Wwnwt_)U>Y|NDG$t7WdP9qd=sVuU*cW|C za0RhDi=Ke{|1uEB)-Iph4i&iaX)US$qOk#16WUphK|>hSF{&+^2<)dJCdVmD={Si8 z&iH+>Mls01sD@pgw8O=$1?WFyh7-_*nCLJX^A|OS=;i9-_~{P#yugq5YAOI&!M~!0 zzyb+l2qYp}ngOX5+$Y8lM6l!b5a5jKVLWl2>XY>%ptzc-^M7I!z*J@pis{e06yFrq z9&x}8P#t@=*{ag5Qu&W>Zep?5Sqstp(bJ9Kd#lvc?;~+A)eEgU->hv^ zFq#gbOd*R6r~C9O2QPl7{4QfjSXf7I>k!#cD+1%~KgRhD$Yp?fnxO`$7MS+W@aAr5 zV~m_#lCr*j{t@sgY0$QsfkEHkHo!TWaBf3?dyB_`#?C@A>?TK3;QT@9vzV*A*y8vpnN1kYn!Ov8pqpyVk* z!7(4Fdb`&YUYeZPV9#nqF=As zfwC3oUjg2hSd1(`UH+cxEB@nHK)kCH$SZGn1dpR?LU=wY%i2LPvsN3UJGre868Y09UA zXm{63qDaQkv1rNn@DSpXaBiuwiTN)4q+kA7pjhU8KAQUM>yZ4=C@q+|%9LBC|u&{Ahsvm#7HedJS}ibO0iPP7af1MwhFB z5ytfxvGc+X>P`3DxPmEmk;MLnu^2{(F2Miz_~%+Z4w@Q@AY)-+X>Pk7EoF-(z%9xp2Kbj4PD*vm50@r0U-1NgNNyv1nS_!4$tawztbal z$pfIHU+uTPIJZ5qx&AGzBSYF<`OeXv7}cm+!(|ZKX48FNy7pjWx`F29Qig=GVvHqv(eS-?JNhgCoy!q^O5Bt1$*ypKi`ZI z=b@bmsKc5mI->vpb;$&`!}p6iPne~V3!%TEBB_s;llhm#QO|{oECidL{{A>HGgpSM zH+PaidlXO{O$hK(b(?fgX0pyHyM6J}0F31$;{?aw!Wg%Ti!YRhxw983J5?I+&>)UY zd-UC9SgI=x1plMSqD%0b?k=LgL>Db@PMo4x)6d+#+8it3LanQN_+knJrOXSb}2gCB2vltvIV1GdJ zRiqpS7_44Pw5#6TOLYP0yvF_e;Zhev%zylp;r8vl4KS{6`!i?i<7{zuJN?~)n`?qI z-#+!HyI3Y!@C3BqqU3c4ZH^F|i`PxR#eGgfz~L}14ufYS#fFgCVhGv<2~P7fN?bQBF6kVp`!^_>DsVu3 z_74wDwF;-n%N?E)Fz1FUAkUTK^h!k7d^TU7Hs<~U{hFe+r7Z!Xepb?O{5U$>{!Hjp zU7Bu)P6tv)%GSC|N#elr3Bm`jU6XzH5~GK1cg3kN8Cq}j`Y)yJ=Z&-M2WHgyc|sfMqGdi`D7sSUbBBs_WLR|z=)Bw; z48dy=>{-Zs9QN+y8|NmH;0-zPvf`=psn5;NTMa|CuX!DR;Qa)EYnfG#z%A6l`%u~d z^@;a&8sXQtm{e|jrR(a5QHs7P%m{}|&0PMq^_%pUa;%;SP0AZ@Rx%B&wl`6R4C0Nk z6%W5?&Jbud4&w{Yb`r*3~ROZo>Rq+~GC=2$vsQ{2J5nJ)0Jzjq^y= zU3OW3$`1*5Iiy)Tg}i59)*oy?I6N+CdTp2_YBk<1>$W+&0cPhS>@xeZ_wYfYI0W8N zMC4u8)L1EB+>CuYw*Jda{;*`O{gu2jKSc8viq-63XbdWo30?qT= zP354qi}kf|5nUbei=VO}2ERQ=&3bRwfYitrJXs?I8iv+Ya%fc zpVh#f$+JnwGc>Ptua`+Ix$ka5H@JkxeeID-;pUnWvACG^(Weqed0a72`hfu>B z#Ua3!cS{Qb@&&J<@=|WgNB?F!OBZ9K7IYj5(1mvtc=Y7Beq31u0{*F79ps^NoI89f zOlj?=7VeMNTBZ8Ge~{(BIc+4y*Xq@yoTAj-8PKr)IV*f(I!#=Iv!TNA9^K%36~FPF zH4`d6&*yh)_ihAG$4%T2DBudihvY3=4!X9t*<>s?GBzxK#w{Ktz8b2!7VPi~hI*zH zw^Ob7Sh7`RIEM@DqyX5zDxK%2bhGNujNv^q5bYq=(+N)~uvAw3#62j3 zF>6Fnqnug$K{hsFrEVy}eSqM>*%C{Jj=AoOn3f2-DbWc(nQmVGtGZs?Q{9KWO|!xv>?b`QD`gdz-AxK1Ydp%NPh@s@+*mdpnO@LPXD((s7& zRn*i}V{u+?Uf!f?NW&eY(_^&-bYnn{4QQ^`v~eLtVx!!Blx!TT4`^UFu2;_Roug6; z>a0~MTu91ke|0?dQqpJG8ec=d#qIf_N5RmSaZjNy1l5Q|)2?0Ss zV1ts<-5}i{9a1VPA%dhJVbCcpAn?{k^y}|;-yQdjH{QMPAIFxx&suZMHG6*6-jZ$8 zp^Ecw>ejN%Rwq_XKWjXmdY#duIMUUr5U_1DwOP<#VKXS%L{)T_Kr^tfSYEM- znyB+c1Dy|8R!h=arn$vAO7JSR=AVzMES(<@G**<_j5Wv@Qy%zxK`-CmIkl%SY?qqj zJ}4}VbSs{WR)31}@(d1Lcy(d&h>CTXBbGKu_B|eY;9aamI;3B_=IU7CvDvX-@o>?>uGsdmGfkdmcsS5W4ZXxIO`<)tQ zqhkXK0}Zr3m$kHbX#GP;3d=Gs%a2z%RNh}5qCNlPs~Mi@+b|>d^90p`^S<(Twh(#N z8h2gB`f9S?CGkj=K~e4+Wd&Q(>h`4AG=(kJw>0@!rN_OXjfM7W?%V!7U(oAkJQaJV zg6uozblxr)xG5Oxs_WNUvI3H6LDx?Es zYc)@Tcuxo}wVPg!=x@9!PX$v|P|@@YNU8DlsBlspi-0 zRWHAdJwBWz8=hO0-HgUB56q4FSGYkN+G5Y?2+4fp=ro1$`mu4*DaO}F!!ZzcmjOvm z&humle3-Z!<(7rZ2+%mMaGpKgboq(9sr}*4-TNdJcFXRcK1F@NK7$Tn!3n*F2G$}% zviBSo5=BJ;jD$Zn0+)muMRglZYU%p|VQn6yPfKS%A(*(c=5Zi+yC3355cIQ1K2$(b)X5B9zbR%mFT zuX8^HjMy0%4e>E1vFQ4e>Lq6YHFmvaWrsdK0YR)Z~pwXdNZ^krag79 z0boiiY&oUyq$-i$lfbOQ5X(yO;kwkMe$%~*nKolwDj*oRR5$&>JyPeVM7XZTV9E`t zR!a=8IRn-UFbD7ei%=MtSnpt#W#LyLFnjQjfv#S-BUPaF2T3y~axrhoNrs(IF1;PE_d$%_ws~bK;pbVFd0+ z8bA)7lN>QMGDwALeY#czjeWJ5{Tj8}o6uA$p1hWlBVL!Emi5ge&g+xVk$jEK$kafA z#=7n#qv@B~;OV}u&Q6QqnVf?C`To4=4ea2l<-|&}_W_lC6c<Z!yFt= zv_3)8j^&fQ_!n!jN5pW7>No zklsGE_fennjSVsvv$TS){YwqPf+t%D4(CxD%|v2-xlG?MhATzW!ZJDQ1W#0 z4{@`#ky|~FF9Y)(>>^|VBv-J~uIdWrFp%a16Lm!795xNh&jfC(!b?v$>9UN;N*{-@ zvJOW1^oTPX*{`y_@(+uc?>AQf`e*v4xF8b|RAkK;K_ku4>myhDeth~Z<+i-d%Gi3F z#zBr-Fj=@TOHq#_9M5R>0}p36{)pX4;Jv6gO!^JmpTUVgL?CaxqPvPh5$TZV!Ee=QHJu!T05%>c^ zaMWV|sX@x5MK3yTeSZ~d$CJY8P`3R9IJp(4Mx|ap7R&tHe4xgeOs8{Y+(d3Q?Ly8{ znfU?&)o=m`l94i#fBvp`XaIccHIo%(x$=TFqPkrqYuH5JnD*T4z^ zw)R?sXoCY5%?CWR%kmg|GQVBqj~|kK4a$n150(1gu$wNvKhM24ST2kq*HofgiN-&2 z(%svkczP<*E&W|QbhstA@l&aZ%TdlUmP^&iV-9Gd~!|m&u&nytRF?k9!2sWZc-PYyuedOGY7lz24??yJf zmK)cuT78>tIzGC^eHbe5NVgWaYmd?oge?_N`dh?Q#}N@4!{;Wjvyap&cSw$fc)=x% zR`xLV=zUr&z#=d5aSk-lDC%$wTz~b}NkX27WXMjJ8VbNapbZxvGr^(3@e-k8R7r_R zFubN-VR}YhFoo*;0-uTyLzW)N0)I+1VD!gp_U%(a8q>+EE{iDB{Thn-!*Kzpsi+FG zDL-PIj@ZG%&b4oEbBveof_NoqyjOD~MU;Jdb+FKgSw|qB*pVtKEk3CvlYg)@EY&Xh z^!Y_asGgOB*cnfy+uC`0X{2(yIiv2%uVvw)jerSTpnr;qOZ612>m4P|@%E@sBBI>0 zJ(?cG+l(}7H9T01T(@v0Yu_GEo{A2ahy_7oItat}KiS0*n_Nkm;ZF)dM6Ns-=TH?t zaP7Q823)AS|Lckz)@JI8Z5pSNjTIv&^1^FsckEN<`HzQQYZCTI`2s#&?=338!qvFGE~i&@FUYuRuy*&b*=F8RuW^aTZF_!px=DyqZt^f(F8twY zOp?x!a^<~(ai2iz*)UH2u4Ye(j*?~Jc~WZU(n5Co?zCKDvjgzmzomyf4)iA!b4dc9 z6UYtq;$p#m3_1slA8}y*$Q65)bUN$H{;TEB7t|_t#yr!#*h;~FtO?Y%Vn`=*?H=yB zu86uhw$?j~4K!Tgv)1mpr=~SoZmq2VR4|vVFlk~kAlySwzuGE;(zfX8Mv-}FBmcq{ z?_<%dw=22EQgm501=3m%mPgrlCWjfJ>9ND$!rW%d{>9|>r!RWu{BHH62xX;5RCUJTSNaBTM2&DLJNQei*o1$#Jc z{GcD=)}hgzv8?m0FRPTt`!x14`zmY~UHX$`9vU*;IMN)I6)p>hgmyk!^20pwnFC%N z-Ez7L7(rdBHiA2VKVzsif>VJYb5+CSgk0RKrtXtrVv*AU!}0X?2TiOoHqbHKC|aE6 z+?w<{^3$wKLACuQtsR=_Kh5P+z{7r1Q#v-W2M#)s;vRJURG z4jo4;pQn3N?6s2MQ0XEZ0_yUOhIr$Ft9P7*@ht-zQj?=UP9h+9;E6(BIQ(LSU01nv z6)7e$xJoe5qE`b>G_MjyXf&*M#Ysm)`^nhUH z8+7p`R)g19)VFyV6Dx%Ytgo%`gE^KVxVr77*7P$c4Mb~i7*FCq$-?fRFshOMf5T?zznjl{>PI)z z_sy0P1k|5=J(4;qY;ZQ+$Yq})W`D`v#{3d$O_?A<81F6Jmwqvag}`-H0DRP#&aK2v z0CwcIovjD^Mqj-9mekP;@g^|JnlQ;4@D;dj)}Jx-8cf}iTHAguNay+qO23J%Y*1`f zOix`YByYNofyoJich`*0O#)0DaFt*}SLRuuLoK(k{Ku0Wkw;SjN#^AeiY>gG&P zW^e0Yu;lori&^IBB3yHWmmCvIlo^OYM@7FC*1L;9WXc#0+1E$o-6xlDAe_l!f(=%4 zRXm4^w~0l9I<0rpQ{R_dVwVN80!ef&U)UtYJO#w}9NQC<=*Ay86VUc!np-aIyLX5f zHzr%ExZDxOKbJz%_;nyS5UXH7QAP1_Zp&c!;DR6wjmsaBxAisN{b=OEJA8Qv_2tqV zfh&2AsoumAB1SrBVc(PF?N9D@t;N{*Kt0`k`&6YAB3vWo9dx1p{48Wl?z9T~MgxcGWOG5KfVp`qRKXAydHk_w301fIo&u;bF?_ zibB25j90KJV8IM8(5f%C*|#=n9sY(l6?+GK#{1O~`TIWSaj0fP%XzVVM%h5UL5m(L z_SjuLQ|lakNEJbkiHKx#DCYr#-vr(zuw=~e93~b5@P~^(lR9GYiA+?}4nBP&-Wxu-_aeZ)?lC-#>K*( zfbn^_NGMP+N4@GIW;`%{b&ak5&OOAwKaz+_QEd;z%TCiaQ)TOxk|)uK^UL7SG>6`7 zdnSPBE|&%}dfA-g5ePuA=m9e?k>P+)u?}qbOZLv)zKh>4NYW4my0Vk3U6AxR*tvkl zm2ow3hiyf$R$dQC-Yx;g1u8y7{-;R3cq4i*!Ip-;2jY`EpDNO_8o;#9FwB5Ac-aK!ZgSf&k=5dPA@i zuFE92RxQ%rK?{*k2GWs>(4PsGY44ca5$sDvwMCj`eNY1~ItU>g4+rRMK*Mx>Zwp`{ z1B(G8Og)<%w{51cbd1=H+<%~)PMrygPC|T_sF7=(&!2etv;5A49g}`#!ag@tyViaM zj$l;i%qf~Y;QV^Q=1B@{?vbhoP^+9pE1i|LzWgM5`HXy=zdA31z`2|ANbFXD=Mqr8 zU+JbPth0&8GFoqMcCfM&H3q`4Xj$ckYzG$`@P0&jh>dt%?{$8}|hZnvd!p8u_tj~uULWODFq^eDDt z&JXOf=)P0NTf+oGo_nVLQq(~Hfes~n5tq2C9Hks^sGNuyHS$q`A~65y%;9*8xeG2} z#0kaoV1u~0{s>6KEm|cHb;+kA)P=MluMRJ`frxy?sM@hDb!5QA4K)?%okwpU+_fDi zbUu%We7D$n^%sMwZYl#|JuW4ne8KL}oFn(|zZi%m!xkeTQy9x^s^>O*h_xnW#;|qW zrHr1i05vsm)HB)<$(}sblc=FE+fAGE%`tB=%RCSW%vIr~KluXS;~83pJV^|n&)5)1 z7-}m4?1lglIe;jDGp`7VsGf02ryp(gvS;`0x1OZng{tGwVbQoWJ+8+;+5I2DTyQb` zy+&L#F8b%G$W!tij-OpCJYw(h=3|Z(n-T~)Y}>SA&^JXpb}8K$Apb2t^T4KZv4Q%> zi5dYbVoKWR+7%)(SSH`GzF6)QzA$){7L!sDtgnc+UD!^nOBtbOFxaNb(UYRH6vY3X zt8ReQfaKDj;0i3Q;v5#u{3|^@SH7aDcgT)HlKqpdK~VvXeFLoZNkI%OoeetWgX<#~ zAr3|1W2=5+iV{$)prT-{D$nQyMb7x1mLm2-PN0avaUn$Sjd@U9fnod^dl}{ zApvWa<~YN*PumpAQIhqy>AoBtU7nlg(SE=9DZs$IBJ*|g$=*gp0+aL&m?S6!j=nPi z$=Bmv6!D-3Xq`N71!Qhq5FNN($cINPs;cG3(EJ%qkskZh7e&{8z4O+|5ckr+5RVa< zSbvWY>=PJ^t#JyQrXW!(zhZTgu4^5OCa&Nk!Aa7~4Z`MIfmGh!1b}>*7#|cw*UpU$ z%)TH?ML6aCl}qQ$fP^!RGBotIt)URQe;WMkUIlPI(M7VK2<`!*19xAWo{wzhqd`(5 zuN_e+;bqa^{AyuQ#a71wMB^r0Q?nw<5W{uV1j76CW%7?4@rQ}}jtu-J4X$oa;wwY0 z{Bl?Z6O)iE;20G76z2j?gK=wHkIHaX|8=0Ot#G6$&Ez75;nNOO2|Xl0ZXvLyDCQ$) z8QWCvDqdhjrPC?jITIeOxba#~nE7s??(N%*SZ!d0PS`+G-BW?!pPb36tK>s09y4W&sG0>Oa4w%G^Zc?u-Q1D+Y{Z2 z39e>{JK8w6uxK(u$pAG!1+QSTLI?&g7kw*%eK_VY2C}dw89Pslz=x%xMUKI%fDw7d zb_|qbX5N0l)g|CstL#^JK7s@G<@+PRCgMURN`iad@V-cM|Kia%e-s_BM3_wL6Yrq( zRPE7jaUd|>#6V3NZ;UR$=8 zH#%IKBhFBHm5*JI&MY4I567bw6CM%YVS>Oym>xCkFJEDLt^;BC&-Xw5PTU%Z0Q)zn1=7)4*#ab9@KlzB46z^_qNU=5k{Jniq*_53F8- ziN$aEdPxun<$sp46$-u_pYr<2BGjX{IX3yTw&j6sG^CpP0Xno=%zZj^nHqVfWQN?f z1!mwj>pf{$vXlVVcorp#kl#V%8MsS-q9NZHVo>Ok3+pC+g$cda{Sup5t*XDkmj_-Kwwvl}X^>YV;*XB=d+YGO5rsxA)P-(pi*7h)^{wxC56fQs? zBCnln5ksGkoQF-w0GlD#D;dH-Uu~%{eiK;VHU=%>BEijYzzebWhS->}S2#t06ijYO zFlE)dHqJB4Z2W$m=*~Aqc^eO_uKoR0T_*bwO;$*weSPiuHly6ja*f$#$Ywat(Pmb( zYxa!u+nb0;Aiou2Yjxxjp871Wr`w;M(MCiv?_cQ1n7X(pT8%f=Sp_~*AI(f4LIR?p z+q%~+VgDEbQaIl)$L0sTt|5?Hu!6wHJV=loSuS#JjY!0qNu3``F-+p*=ob8r4NM1!+SjBA4mO}8SI;CtjO(DWr`<))JO+wlFYMm zRD|WX-US%}27Rq~)JFj{Fcxf5QK!5G@?I$hb#zx$dDFNz`p4qY-QabrGE`p&IzQMw2Vv9F z?tTV)$$;BSCY%7KEDZ{4!5t>wN5S& z0rfk5(owUd)_@>L;Xq^dDtk%IHg<5wUV?6alKewBUQmUz-HN6AS1{o)_AOzewmy~ zj&(A+=={>SNDueA08T4l6-F_W8^v>`Op1$i1%$Ao1{k@fJPe=jU`4*e(UsKRs0gsH*Izp5-as6_kP|#bP=-xSicMQ^ir`ViQ-2nmdK8Mi z(0!}Gbo^p<90-o^o+!Y*cs^K0ndvF6w~m0T_oe9?2CH~7>sq$VQS7b68uc_C! zUelSp60Jq<%nB)2X1YmNyuEipTGggaVGF@QOIeLxJM{7g=R&&bX=Gj<6i_S0q$MP zAq1zR!eJ|M7sJ(oB9dIF0!9%{Pjy7UXVH!^2sVhpYn>*5;~(%-s;6);3F6U{U^0&E zOG{XLd)*^$no{rSZ_6JY7B=P8XQH_KsvI_+8QQhw-%_tNrl`+7biO5&UcmUGd!VzI zT9B94NefZ_E)N(C;5)t)rqQraic{pM*DZY>hoWOWgC5UgV+-lCi2{-DdTxUeD6A4{w>Qzl>TRTC!3v z9Po3Tc}J?pb>u|ad&JCaC}xy$L%H3deFEhoNM5j@X}Z(Zs)8W z8@Nu~+~FK*HZZ4?t+i3(_`UVI!Rb?WHC#?7c_xxe7m)w?YcDTWBU~tMwBDcOzgUvj zeU5UsqN=_iHiTls{}Qu0TKK^-laUDI9FKE#A(dOobhl7iy-HUt5$-!O-9R-=Oz6qr zLt5eorar}n&ox(DK<%31X0dLQE)G%c*r>{Ct;dK$M=Yxh07u+7+}kMIKtzg%i!wD) z&N1`kw$Kx?#KgPn49A{oq3Gq&Ko|)?hlsvPoeKpz`&Z=U5EL&O`E9w)x|8x#H7|LHbqY5{r3jAb4ylR8u_6tEEeuGu9VewJW`d2XT&*IWlQzh zoQ#inJppx;P5Y*#V5*$3*9gd4E1aE}vABTdmmE+Zw7P)fEdMQsLHp)U?EQJ~V{UPV z%Jr*Fvh#3?9z}(uZ#IneR#pFOJhEu&`Ly~jq5?AOnlreg-h-^qwjtH4Gi^?z248q` zG969knTm~-x$C~l;dW;U3w)rwaiXWwnQY)LTW~ykghrlfSMXz# zzPG%0`_uvaX1JZGYxP~-h)lPiDBaVS5nl2^4R0AZ_?I)(d$nMaqX5YOn*;K1IXno^ ztS`ttD*$LN5fNzj-%6g!*r)uEy0r5#YkhoTHG7=hcIzB`=(59~y(p*Wv8UPEOL})o zzB>Rg*0laktDo-Tc!f zfX%o{b5Hzdg7{7&w$qjusnHHJ@%&+zXVYpdj5-`D)#D^$jjKJF=c|*R5qqK6#Qyn6 z&QX%UJ{-p#LIZr=0$Y?~V17i2;lf!eZ1wj^=CJ)i;I}U*i|ux2NM%gPcE_3toC@yUR~Vr_27pxJgP17pkjmP##dK&vfrg` z#O3SJupr%@s@i)_7>iL31Q&!QbLrzBc*@}rQwWc zF;G8Qian%o2zloI`0j>y^q8AtSJ-$mJwRQq&rDfydwgUvz`?Yuadf(N0XI91;_ISa z2Mw{?)7krQN_?*r0(;?fSGJ4bI4W`KB3*v1#o6+cd-rqJ1LxN70MyU{J_syb^5L5E z9v!ojJgL=aUH$!qzUyfZy`JJz4s7=~AN1v#i5zHN*=mb#*edOVj<$v;v+vKV3nPV` zwnOk$2KsdeT;_TufQhoQ(rhX4x~)7|sFe-iUh2&+AtHC}4zqY87K@&=*l%yc7eAxN zGowE^4+;(1M8SXtJ;TBGYTn7IqlR602=Lj04z3N^66HwX3c`tYhTla3jjJz; z()!lFUD&4s&}^f3KX*6emxZgR11PVD-nwh9fkBf(;9?<)EQO4bvcQdf$Rg1rc3v_gXrACjL&R=2~95n`FcNMY z0Vrcsf-Bm*_B$;Jo!-ktk((%vJ~b_H|?z=i#L+d<)Sa?C_H;yJNy_wDEr z3b56s=dUUY^^}b79iKtYmT_uY|0b4x;0qeWoWv98M=C9#_)m88M%D=lE>wp>p}i_^8saKT9bQrV`*AcH1J!G(;upd z8$7#lWQ2{i>h--wGyjJ1jy$&X0<%!_d@4tIeF0%|~k4$z8i* zY!SvJUtt?r*FQ-t_GW?JEF^iMC$Zw$mzlAQgVL|SG*{6i@O9~)pGF^|dIJxD$aB*^e3pEui z6LFL!`J3;rD6h{_Lh`}pwx;u)etQ94z}M$3^)DW#0U-4?x5IjBDDgDS?)r3equVzC z3v7hr88HL2AMfD-#nBr&7_`o;wIC_vG!w#>a8!S8?kMJmd0;+js@3Nd4Aymis9$Z# zN^GR5&(I`fTsu8Ud$h2fpUBSH%&Xfoz@$Ef@LW_Zni0Uh&*^qc-tFP`eP-j#1TPN< z(0nvIXgEI$bt604zvK{`M2?%-M<06PwEuKVpI>`s_V%>cMGMe1Ej}l*eVs}XF~$;o z-1-3_Dv-BpHN3p%Fzw;gw`d|miC)Ji@GST^{Ab#OJB?rX&QFz)R+|2JrnV~Bx3_`ZDjNlDo~2Q9Ten#za@#(F9qCHr!PWVL zR?qeCSrgJ@@MvUOj7PN2^783?2s)n-K|GkU8K$S*k#Rj z3iz~jE*9X*Iy){hntkboc?z@-6s-E@PE!O9*xyhkBqTKbStn0OOibKsRK4~! zm^13aL^7++a9Q5tOM|ii_08?{z2sZpN?eVj>`tkAfunT!UG3oK6HS{8JU%zXC%Hug zel|E(M0D2#45UU=X>Nb{e3V=xFiH3N2~n)gNX5Lg1&;V`ipTm|9w|OKSk)&dYhyi~)x6P>3N5Ds-IY$> z11%oWn98%L0k$jE>?YN6QPHY%q`a_s2>|9ru?t!tWia5kkL4Grjv~nNmyZv7(7tUe zvbo1l=+ZxtLQTY~72~dBLa)U-)XRfL)aw)(8c^~${4^y!SkP@U?kp{<>CE&~1aPZj zVHgu-*HwP!?bJ-Na62&IE|bZ@SEZG`x#+An4M~6#1TVYtkwfbWfvnOL6bk5yZbR=s zN;KV|tCU?Uq-@VJ@f4d5*iG(dRG4Oo%~m_e6-L&trtO;zcJgt1Om+1&npMX1qJr{C z@yLekqX1q}uG(71nyxzE^09m9RtvP&?c$lNyrA4IxQ30zs$JYy8>CsRdtH2Q^I#+5 z!quNf{H2rGuP}%*^OeOqq^pH`&p`yv51%x|O4-sY#$6(EnR=fp@`{wkX|^fP!YbcS zX^@@%hQ0BisO{YYEy{8JL9j9Z}ZyDn2yxlsvL8EEB4;C zvRC07cHeV~8!ctQhNd2$tf=5T7PSZDJOqHRxqhLme47Yf6f6|CQ2|#WFVw<7oxb~a!%m}t z`9MfisKHP>K*zyJ2m#->F9$-DolZUHR0?{WdM*qE7wwgaeKkRWb27@~G+F%BUQd#! zGlyv9$0vXMaHT+Rx;-mvPL;E@e$zf7_HfIF96Wd<&%Pxf=iZl>>d)T{I_iXrY@Q>o zrdrC7I-0vvY6T6Tnt!gdlKxoIutI>>Ub6hqt@Ntje0blR?Z+mMC%)Dz`r!Cfumw|3 z?cCH~D15t{lq2dU%l^J_A;&KHmJ}5^;xIVB&`CdW>vGs#CwvgyfwmDSv!ekXhQ=Fp z83d{oxHC`35AqT$YFZ1=q6cgO;X?up%B8Wh0isaREAQ~x_lg$-r`|^!xGYT+zY57q z_t0Kxo>gg5k=|l)Hl0~2U{+03t7IQ&AU?my7wK?OX0cjmfTkqiNQkX}GAYwuLT%AF z8z1*l*&abU2vmDYnM|5fLXx>;IC+KV5{WmJVqOQwwLi7+Z}(-svt@IsD7dhuxjZ(+ z!#M#;3w1CE*amtADh&;pIh-u?;pgXAt;IsjhpYR7pK=(~%k{XP-TK&fMRrPF30yk(y zWL>v~(G&o5g^_A69=R*L$DwR0>VDgN=nt_Oa+_##n9zGtx*6iovCPenZ&24aJsjrs zXQ*oSgeFGn!G<4=_Ti)^kPXUJ$eLQCn&QW@ zcU9vThNgr0VEXRkc1jY)LhK605j7Y)662*CSQMC&@R_P|b6*eTUoBS~NN! zOy8YU6E*d%gWG(GsXjxR2Re9At?g&byP4s|T*>NTrat>~`;(aa`1#3Pui_r}2mZz> zS|uMoRO*Ds3~New?Js-d8+mxLJ$OCMy_ibc(B14+`03`#>Y!|m?ReUkz#Bg8e#CJx z0Kz+WpxHZ+;YkdReNAla71`yf@uJmBsqBpzfF-ASL7$MIU@D)hu{qGg+g7Pbr=)#=U9Ho6pm@1BTwXS|B4S_?E|Ve)oSqy{BBiN6uj*%WE=x;j$wUO zQ+NPiwI#$isvAfO8k*$9#%2B3Sh&tqnN5}2jTERu)fK>zYT>Am+L8+8=S_j|SFMaT z>m?;WmL$ZSY%y*ybSc;R7y&ob&0~fEd zVO#+Txb+L2gQ7jIw4!~vd~dJ3c?PF!0d?vt%k&5)X^|M3;pLzFf#<00_JB0 zX3|hkTiDMVZe)NwRz&}uWPl5k(|OpS!iwCQ40tk8EYc*?DhTNKrf?hm7=caG{N~yn z(Bt|5um9I`k>I&7HnLEeR!?xXQe;)<9;3&USt`Xv$YJ{)ZlNF7$6aLsK_b;qZXPZP zET8w?LM&4TZ=(6)uysS3NJCMr+L+Zp99y!{RwmC9N`|LzAOG$>oNU@HTM8jc;bT!+ zLbRi#tSCJG2RByC zu&c{O^v=k5bgNg&dSJ>gK%*aRH~{)D5%m9g zK#)()mkIm-bLQ-?yZu1SkI&b6D}r4xRF`XjKx*>m$5P;r(j zIGYbX9s+OJ0z~)3rG@>0d;$C?5rAvvKXU?R={som-%|S31Ujjwr-GllSUa(UG8BMR zzx@15RbZin`!6D3vZa9;ecaz7@>`dF3(Kic@RWHV*Xa`-`=w|qfC`c7`pclp0y>(v z?)@h-f?MbQ<<<%GM+W?n2Q5T$>h}U+M%>H;mIc%r!5KFM;4YWoe=;Mu6<=<2>LSz$ zTUc*Wnh@AV9Mc8=^GpLslZtIA*cnW)I1=*zWDdAV|1Y^L|uslH4zxiitz|}{9 zN4}lMKMcy|-hiFwjzc}@_q2b_2qN&`e?6v%>sKreo9LVVxOe^#3Ex}-oGaHzz6;u& zD8SCsIDdrUUuFci{*{>DM=Buz+2)e+z4mLLPv~_4ocmbNUHw;E?H}I!Gb8A@{VOpi zy*FL}Q&CE!mZbmZM?ljaB7`RA2-NcqpdM3JwW-V_Nnu(XTFBem0tl_BhPCiNokwqP z2f&~=vA(CNKf`B0R|k^Pj@9m$82km&lA}uU2@FV>XZd^CXq2~sIgNKGGr{*KKpJ#d zlqF!Fb+W(r(!t;MtrfzN&p-_tYU8)&_>Jj1-pSwSXQ@_2K!kB2zb6bWI9W=o5%}9m zA!E~ZVBHY}2KDtMf6wd-B1F27gp{+GWx&9=mVDhL{_|4|%pG9m>hj_?u`prnv|*fm z1j@JnFdoSOG?44M;}xt%_yEJ}!hVb2(*gpZ8BK z+Pf0`EyYMeKOChAt};7&UjM~S6crYr8u?xD5@s1_uDE()^+JD9odSba$3{Om{*9^m zXD@KoA;2&>L41IY2H-;(%s;b&`TucPBrt{xMPLcPjo}Z!{sC@#14nv`{GU6(ifX_# z>kEyBdc&}_)0cc0{=SWZQ9ako9gv`X&IGH*|NOkar#)%k!>jrqS?}+8f3pMn|1|IK zX(2cu`ET6ce_!wKd4Ep}{WrLy#Y5&px|2Ojde>(4PHG=*+0P$bw(IF+3g$iBQ zNOZ^Ps*r!tCkzBBo@r04fn(c@$_TST5DoDG4txj_KuIN#<&Ni$v7!H{E(35c3A#k1 zzMxGHo%HE{(*vGD!H2*rl-^+Cy27U&o>%A1{`1?v8i(i`sB!yvT7FfmvetsXO%ev? zL*P=D9A;Sl`rR*qzZn6H|Mk~TnSbB;l|I1M?l0)w-+l|2UhvLJwKP u%mT#fpHcCLta`1T`GC=(f Date: Fri, 22 Nov 2024 11:30:11 -0500 Subject: [PATCH 26/31] - dummy change --- tdrs-backend/plg/prometheus/prometheus.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdrs-backend/plg/prometheus/prometheus.yml b/tdrs-backend/plg/prometheus/prometheus.yml index 66e35c519..9cd14eea8 100644 --- a/tdrs-backend/plg/prometheus/prometheus.yml +++ b/tdrs-backend/plg/prometheus/prometheus.yml @@ -95,4 +95,4 @@ scrape_configs: - targets: ["grafana.app.cloud.gov:9400"] labels: service: "grafana" - env: "production" + env: "production" \ No newline at end of file From a24e826047747e5fd4fdd3cfd899ebaf0718c368 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 22 Nov 2024 11:30:37 -0500 Subject: [PATCH 27/31] - revert --- tdrs-backend/plg/prometheus/prometheus.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdrs-backend/plg/prometheus/prometheus.yml b/tdrs-backend/plg/prometheus/prometheus.yml index 9cd14eea8..66e35c519 100644 --- a/tdrs-backend/plg/prometheus/prometheus.yml +++ b/tdrs-backend/plg/prometheus/prometheus.yml @@ -95,4 +95,4 @@ scrape_configs: - targets: ["grafana.app.cloud.gov:9400"] labels: service: "grafana" - env: "production" \ No newline at end of file + env: "production" From 503c644d9286f2c608bce6f5bc21be74666e5ffb Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Mon, 25 Nov 2024 10:01:40 -0500 Subject: [PATCH 28/31] - Updated nginx conf to use correct auth check endpoint --- tdrs-frontend/nginx/cloud.gov/locations.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tdrs-frontend/nginx/cloud.gov/locations.conf b/tdrs-frontend/nginx/cloud.gov/locations.conf index 37bd413e2..2e14fc69f 100644 --- a/tdrs-frontend/nginx/cloud.gov/locations.conf +++ b/tdrs-frontend/nginx/cloud.gov/locations.conf @@ -61,7 +61,7 @@ location = /kibana_auth_check { } location /grafana/ { - auth_request /grafana_auth_check; + auth_request /plg_auth_check; auth_request_set $auth_status $upstream_status; set $grafana http://grafana.apps.internal:8080$request_uri; @@ -78,9 +78,9 @@ location /grafana/ { proxy_buffer_size 4k; } -location = /grafana_auth_check { +location = /plg_auth_check { internal; - set $endpoint http://{{env "BACKEND_HOST"}}.apps.internal:8080/grafana_auth_check/; + set $endpoint http://{{env "BACKEND_HOST"}}.apps.internal:8080/plg_auth_check/; proxy_pass $endpoint$1$is_args$args; proxy_set_header Host $host:3000; proxy_set_header X-Real-IP $remote_addr; From a5fce6b80097efca684d66ea80325b825ad60b7f Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 26 Nov 2024 13:33:43 -0500 Subject: [PATCH 29/31] - Updated dashboard configs - added extra promtail config to prove filtering works --- .../dashboards/dev_logs_dashboard.json | 113 +++++++++++++++++ .../grafana/dashboards/logs_dashboard.json | 115 +----------------- tdrs-backend/plg/promtail/config.local.yml | 17 ++- 3 files changed, 127 insertions(+), 118 deletions(-) create mode 100644 tdrs-backend/plg/grafana/dashboards/dev_logs_dashboard.json diff --git a/tdrs-backend/plg/grafana/dashboards/dev_logs_dashboard.json b/tdrs-backend/plg/grafana/dashboards/dev_logs_dashboard.json new file mode 100644 index 000000000..7fc27f8d5 --- /dev/null +++ b/tdrs-backend/plg/grafana/dashboards/dev_logs_dashboard.json @@ -0,0 +1,113 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Dashboard allowing log visualization", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "links": [], + "panels": [ + { + "datasource": { + "type": "loki", + "uid": "L8E80F9AEF21F6940" + }, + "gridPos": { + "h": 28, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "dedupStrategy": "none", + "enableLogDetails": true, + "prettifyLogMessage": true, + "showCommonLabels": false, + "showLabels": false, + "showTime": false, + "sortOrder": "Descending", + "wrapLogMessage": true + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "L8E80F9AEF21F6940" + }, + "editorMode": "code", + "expr": "{job=~\"$job\"}", + "queryType": "range", + "refId": "A" + } + ], + "title": "Job Logs", + "type": "logs" + } + ], + "refresh": "10s", + "schemaVersion": 39, + "tags": [ + "Django", + "Logs", + "Loki" + ], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "loki", + "uid": "L8E80F9AEF21F6940" + }, + "definition": "", + "description": "Filter logs by job.", + "hide": 0, + "includeAll": true, + "label": "Job", + "multi": false, + "name": "job", + "options": [], + "query": { + "label": "job", + "refId": "LokiVariableQueryEditor-VariableQuery", + "stream": "", + "type": 1 + }, + "refresh": 1, + "regex": "^(?!.*[-]prod$).*$", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] + }, + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Dev Logs", + "uid": "cdyz6flmh0ttsy", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/tdrs-backend/plg/grafana/dashboards/logs_dashboard.json b/tdrs-backend/plg/grafana/dashboards/logs_dashboard.json index 5b34ecf3a..ef2c34f56 100644 --- a/tdrs-backend/plg/grafana/dashboards/logs_dashboard.json +++ b/tdrs-backend/plg/grafana/dashboards/logs_dashboard.json @@ -21,93 +21,6 @@ "graphTooltip": 0, "links": [], "panels": [ - { - "datasource": { - "default": true, - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "dark-red", - "value": 80 - }, - { - "color": "light-red", - "value": 85 - }, - { - "color": "#EAB839", - "value": 90 - }, - { - "color": "semi-dark-green", - "value": 95 - }, - { - "color": "dark-green", - "value": 100 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 14, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 2, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "11.2.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "editorMode": "code", - "expr": "100 * avg_over_time(up{job=~\"$app\"}[$__range])", - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "App Uptime", - "type": "stat" - }, { "datasource": { "type": "loki", @@ -117,7 +30,7 @@ "h": 28, "w": 24, "x": 0, - "y": 14 + "y": 0 }, "id": 1, "options": { @@ -157,7 +70,7 @@ "list": [ { "current": { - "selected": true, + "selected": false, "text": "All", "value": "$__all" }, @@ -184,30 +97,6 @@ "skipUrlSync": false, "sort": 0, "type": "query" - }, - { - "current": { - "selected": true, - "text": "All", - "value": "$__all" - }, - "definition": "query_result(up)", - "hide": 0, - "includeAll": true, - "label": "App", - "multi": false, - "name": "app", - "options": [], - "query": { - "qryType": 3, - "query": "query_result(up)", - "refId": "PrometheusVariableQueryEditor-VariableQuery" - }, - "refresh": 1, - "regex": "/.*job=\"([^\"]+).*/", - "skipUrlSync": false, - "sort": 0, - "type": "query" } ] }, diff --git a/tdrs-backend/plg/promtail/config.local.yml b/tdrs-backend/plg/promtail/config.local.yml index 9cb617c11..dc6eb0da4 100644 --- a/tdrs-backend/plg/promtail/config.local.yml +++ b/tdrs-backend/plg/promtail/config.local.yml @@ -15,19 +15,26 @@ scrape_configs: - targets: - localhost labels: - job: varlogs + job: varlogs-local __path__: /var/log/*log - - job_name: django + - job_name: backend-local static_configs: - targets: - localhost labels: - job: django + job: backend-local __path__: /logs/django.log - - job_name: nginx + - job_name: backend-prod static_configs: - targets: - localhost labels: - job: nginx + job: backend-prod + __path__: /logs/django.log + - job_name: frontend-local + static_configs: + - targets: + - localhost + labels: + job: frontend-local __path__: /var/log/nginx/*log From c051bec6d8fdfec6c907cc9fc58c9daff234da31 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Wed, 27 Nov 2024 09:33:18 -0500 Subject: [PATCH 30/31] - Made simple README outlining grafana's rbac/auth --- tdrs-backend/plg/README.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 tdrs-backend/plg/README.md diff --git a/tdrs-backend/plg/README.md b/tdrs-backend/plg/README.md new file mode 100644 index 000000000..ac38627a9 --- /dev/null +++ b/tdrs-backend/plg/README.md @@ -0,0 +1,6 @@ +### Grafana Auth and RBAC Config +Grafana is accessible by any frontend app on a private route to users who have the correct role. The Grafana UI is not be accessible to any user or application unless they are routed to it via a frontend app. Grafana is configured to require user and password authentication. Having the extra layer of authentication is required because the roles defined in Grafana are not in alignment with the roles TDP defines. Assigning users to appropriate role and teams in Grafana allows for least privilege access to any information that Grafana might be able to display. + +Grafana has three roles: `Admin`, `Editor`, and `Viewer`. We have also defined two teams (groups) in Grafana: `OFA` and `TDP` and several users. The teams are how we manage least privilege to Grafana's resources. Upon creation, all users are given one of the base roles. All TDP dev user accounts are given read only access (`Viewer`) to Grafana and OFA has a user account(s) associated with each of the roles. All users who are outside of OFA should always be assigned the `Viewer` role to maintain least privilege. All dashboards in Grafana are viewable by team as opposed to individual users/roles. Dashboard permissions are configured per dashboard and each team is given read only access to the appropriate dashboards. The `ofa-admin` user is the only direct user given access to resources. This account is given exclusive admin rights to all of Grafana. + +All Grafana administration is handled under the `Administration` drop down in the hamburger menu which is only accessible to `Admin` users. Users can be created, assigned a role, and then associated with a team. As new dashboards are added to Grafana their permissions need to be configured for least privilege by going to Dashboards->->Settings->Permissions. The admin can use other dashboard permission configurations to help finish the configuration. From 264714433dae525771733118e19b372eec3db174 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Wed, 27 Nov 2024 11:30:03 -0500 Subject: [PATCH 31/31] - Use correct team names --- tdrs-backend/plg/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdrs-backend/plg/README.md b/tdrs-backend/plg/README.md index ac38627a9..f0438e8f4 100644 --- a/tdrs-backend/plg/README.md +++ b/tdrs-backend/plg/README.md @@ -1,6 +1,6 @@ ### Grafana Auth and RBAC Config Grafana is accessible by any frontend app on a private route to users who have the correct role. The Grafana UI is not be accessible to any user or application unless they are routed to it via a frontend app. Grafana is configured to require user and password authentication. Having the extra layer of authentication is required because the roles defined in Grafana are not in alignment with the roles TDP defines. Assigning users to appropriate role and teams in Grafana allows for least privilege access to any information that Grafana might be able to display. -Grafana has three roles: `Admin`, `Editor`, and `Viewer`. We have also defined two teams (groups) in Grafana: `OFA` and `TDP` and several users. The teams are how we manage least privilege to Grafana's resources. Upon creation, all users are given one of the base roles. All TDP dev user accounts are given read only access (`Viewer`) to Grafana and OFA has a user account(s) associated with each of the roles. All users who are outside of OFA should always be assigned the `Viewer` role to maintain least privilege. All dashboards in Grafana are viewable by team as opposed to individual users/roles. Dashboard permissions are configured per dashboard and each team is given read only access to the appropriate dashboards. The `ofa-admin` user is the only direct user given access to resources. This account is given exclusive admin rights to all of Grafana. +Grafana has three roles: `Admin`, `Editor`, and `Viewer`. We have also defined two teams (groups) in Grafana: `OFA` and `Raft` and several users. The teams are how we manage least privilege to Grafana's resources. Upon creation, all users are given one of the base roles. All Raft dev user accounts are given read only access (`Viewer`) to Grafana and OFA has a user account(s) associated with each of the roles. All users who are outside of OFA should always be assigned the `Viewer` role to maintain least privilege. All dashboards in Grafana are viewable by team as opposed to individual users/roles. Dashboard permissions are configured per dashboard and each team is given read only access to the appropriate dashboards. The `ofa-admin` user is the only direct user given access to resources. This account is given exclusive admin rights to all of Grafana. All Grafana administration is handled under the `Administration` drop down in the hamburger menu which is only accessible to `Admin` users. Users can be created, assigned a role, and then associated with a team. As new dashboards are added to Grafana their permissions need to be configured for least privilege by going to Dashboards->->Settings->Permissions. The admin can use other dashboard permission configurations to help finish the configuration.