From d86030635c722314fef4c9d079ab3f9304c652f3 Mon Sep 17 00:00:00 2001 From: almac2022 Date: Sun, 31 May 2026 02:47:13 -0700 Subject: [PATCH 01/10] Initialize PWF baseline for #215 Co-Authored-By: Claude Opus 4.7 --- planning/active/findings.md | 93 ++++++++++++++++++++++++++++++++++++ planning/active/progress.md | 11 +++++ planning/active/task_plan.md | 63 ++++++++++++++++++++++++ 3 files changed, 167 insertions(+) create mode 100644 planning/active/findings.md create mode 100644 planning/active/progress.md create mode 100644 planning/active/task_plan.md diff --git a/planning/active/findings.md b/planning/active/findings.md new file mode 100644 index 00000000..23e299e1 --- /dev/null +++ b/planning/active/findings.md @@ -0,0 +1,93 @@ +# Findings — PARS Peace mapping_code vignette (#215) + +## Issue context + +`link` has no vignette. We want one for the **PARS (Parsnip) WSG** in the FWCP Peace +region that rehearses a habitat `mapping_code` analysis end-to-end, so the showcase can +transfer into the **Fish Passage Peace 2025** report appendix — the same vignette→appendix +path `flooded` took (`pars-floodplain.Rmd` → `0830-appendix-floodplain.Rmd`), templated in +fish_passage_template_reporting#178. + +Two analyses: +1. **Parity** — link's `bcfishpass` config reproduces bcfishpass per-segment `mapping_code` + for PARS (inside the 99.66% study-area median, #175). Tunnel-free vs the local + `fresh.streams_vw_bcfp` snapshot. +2. **Arctic grayling showcase** — link's `default` config models GR, which bcfishpass does + not model at all. The net-new, project-specific extension. + +**Positioning (load-bearing, per fish_passage_template_reporting#192):** complements and +extends the canonical `smnorris` stack (`fwapg`/`bcfishpass`/`bcfishobs`) — never supersedes. +Lead with what's net-new; frame upstream as foundational. Norris credited inline, lightly. + +## Critical design constraint + +pkgdown CI has **no Postgres and no bcfp snapshot**. The model run + comparison happen +**once locally** in a data-gen script that caches artifacts to `inst/vignette-data/`; the +vignette only *loads* those (model-run chunks shown `eval=FALSE`, mirroring flooded's `vca` +chunk). Do not run the model during vignette build. + +## Grounded facts (from plan-mode exploration) + +### flooded template +- `flooded/vignettes/pars-floodplain.Rmd`: YAML `output: bookdown::html_vignette2` + + `bibliography: references.bib` + `link-citations: false`; param table via + `xciter::xct_keys_to_inline_table_col(tab, col_format="citation_keys", path_bib="references.bib")` + → `knitr::kable`; loads via `system.file("vignette-data/pars.gpkg", package="flooded", mustWork=TRUE)`; + maps = `terra::shade(terra::terrain(...))` hillshade + layered `sf` overlays + text halos. +- `flooded/data-raw/wsg_vignette_data.R`: data-gen → wipes + writes a multi-layer `.gpkg` + via `sf::st_write(..., append=TRUE)` + COG tifs + meta `.rds`. **Not** the `.Rmd.orig` + pre-knit pattern (breaks bookdown figure numbering). +- flooded `_pkgdown.yml` has **no `articles:`** — vignettes auto-discover. +- GitHub raw links: `https://github.com/NewGraphEnvironment/link/raw/main/inst/vignette-data/`. + +### link function signatures (verified) +- `lnk_config(name_or_path)` → manifest; `lnk_load_overrides(cfg)` → `loaded` list. +- `lnk_pipeline_run(conn, aoi, cfg, loaded, schema=paste0("working_",tolower(aoi)), dams=TRUE, + cleanup_working=TRUE, mapping_code=FALSE)` — persists to `cfg$pipeline$schema` (`fresh` for + bcfishpass; `fresh_default` for default). +- `lnk_compare_mapping_code(conn, aoi, cfg, reference="bcfishpass", conn_ref=NULL, species=NULL, + ref_table="fresh.streams_vw_bcfp")` → tibble `wsg, species, total_segs, match_pct, n_diffs, + top_pattern, top_pattern_count`. **Tunnel-free when `conn_ref=NULL`** (reads local snapshot view). +- `lnk_compare_rollup(conn, aoi, cfg, reference, conn_ref, species)` → `wsg, species, + habitat_type, unit, link_value, ref_value, diff_pct`. +- `lnk_parity_annotate(rollup, taxonomy="research/bcfp_divergence_taxonomy.yml", to=NULL, + tolerance=2)` → adds `taxonomy_id, class, mechanism, status, refs`. +- `lnk_stamp(cfg, conn, aoi)` + `lnk_stamp_finish(stamp, result)` → provenance; + `format(stamp, "markdown")`. +- GR confirmed in `inst/extdata/configs/default/{rules.yaml,dimensions.csv}`; absent from + `bcfishpass/`. Snapshot `fresh.streams_vw_bcfp` loaded by + `data-raw/snapshot_bcfp.sh --with-bcfp-views`. + +### gq symbology registry +- `gq::gq_reg_main()` → list; `gq::gq_tmap_classes(reg$layers$streams_salmon)` → `$field`, + `$values` (named vector `mapping_code` token → hex), `$labels`. Registry bundled at + `gq/inst/registry/reg_main.json` (extracted from bcfp QGIS project). Token→colour vocabulary + is barrier-status-based (`SPAWN;NONE`→`#129bdb`, `SPAWN;MODELLED`→`#ff9f85`, + `SPAWN;ASSESSED`→`#ef4545`, `SPAWN;DAM`→`#ae7dd6`, `SPAWN;REMEDIATED`→`#33a02c`, `REAR;*`, + `ACCESS;*`) — **species-agnostic**, so one lookup colours every species' map. +- **Consume pattern (verbatim from `fresh/vignettes/fwa-network-query.Rmd`):** + ```r + reg <- gq::gq_reg_main(); cls <- gq::gq_tmap_classes(reg$layers$streams_salmon) + streams$col <- cls$values[streams$mapping_code_bt]; streams$col[is.na(streams$col)] <- "#999999" + plot(sf::st_geometry(streams), col = streams$col, lwd = 1, add = TRUE) + present <- names(cls$values) %in% unique(streams$mapping_code_bt) + legend("topright", legend = cls$labels[present], col = cls$values[present], lwd = 2, + cex = 0.7, bg = "white") + ``` +- link does not yet use `gq`; `fresh` carries it as Suggests + `NewGraphEnvironment/gq` Remote. + +### link DESCRIPTION today +- Suggests has `sf` but NOT `bookdown/knitr/rmarkdown/xciter/terra/gq`; Remotes lacks + `xciter`/`gq`; no `VignetteBuilder`. + +## Reference issues + +- fish_passage_template_reporting#192 — Arctic grayling framework integration; THE positioning + register ("complements and extends... does not supersede"); grayling is first concrete FWCP + Peace output; Phases A-D. +- fish_passage_template_reporting#178 — templated floodplain chapter; driver script + parameter + CSVs + YAML toggle. +- flooded#35 — WSG-scale vignette pattern + output-path convention. +- #175 — study-area parity baseline (99.66% median). +- #212 — KO/RB/GR rows in bcfp config; needed only for link-vs-link Comparison B, NOT the + grayling showcase (which uses `default` config). Kept un-conflated. diff --git a/planning/active/progress.md b/planning/active/progress.md new file mode 100644 index 00000000..91c7778b --- /dev/null +++ b/planning/active/progress.md @@ -0,0 +1,11 @@ +# Progress — PARS Peace mapping_code vignette (#215) + +## Session 2026-05-31 + +- Plan-mode exploration — explored flooded vignette template, link function signatures, gq + symbology registry consume pattern; phases approved by user (after one revision adding gq). +- Filed issue #215. +- Created branch `215-vignette-pars-peace-mapping-code-link-bc` off main. +- Scaffolded PWF baseline (task_plan.md / findings.md / progress.md) with approved phases. +- Next: start Phase 1 — vignette infra scaffold (DESCRIPTION Suggests + Remotes + VignetteBuilder, + `vignettes/` + `references.bib`, reinstall dev deps). diff --git a/planning/active/task_plan.md b/planning/active/task_plan.md new file mode 100644 index 00000000..5f8313ae --- /dev/null +++ b/planning/active/task_plan.md @@ -0,0 +1,63 @@ +# Task: PARS Peace mapping_code vignette — link/bcfp parity + Arctic grayling showcase (#215) + +`link` has no vignette. We want one for the **PARS (Parsnip) WSG** in the FWCP Peace region that rehearses a habitat `mapping_code` analysis end-to-end, so the showcase can transfer into the **Fish Passage Peace 2025** report appendix — the same vignette→appendix path `flooded` took (`pars-floodplain.Rmd` → `0830-appendix-floodplain.Rmd`), templated in fish_passage_template_reporting#178. + +Two analyses: +1. **Parity** — link's `bcfishpass` config reproduces bcfishpass per-segment `mapping_code` for PARS (inside the 99.66% study-area median, #175). Tunnel-free vs the local `fresh.streams_vw_bcfp` snapshot. +2. **Arctic grayling showcase** — link's `default` config models GR, which bcfishpass does not model at all. The net-new, project-specific extension. + +**Positioning (load-bearing, per fish_passage_template_reporting#192):** complements and extends the canonical `smnorris` stack (`fwapg`/`bcfishpass`/`bcfishobs`) — never supersedes. Lead with what's net-new; frame upstream as foundational. Norris credited inline, lightly. + +**Symbology — reuse `gq`, don't hand-roll:** map colours come from the bcfishpass symbology registry bundled in `gq` (`gq::gq_reg_main()`), the same way `fresh` does it (`fresh/vignettes/fwa-network-query.Rmd`). Stream colours match bcfishpass exactly; no bespoke mapping_code colour scheme. + +## Critical design constraint (drives everything) + +pkgdown CI has **no Postgres and no bcfp snapshot**. The model run + comparison happen **once locally** in a data-gen script that caches artifacts to `inst/vignette-data/`; the vignette only *loads* those (model-run chunks shown `eval=FALSE`, mirroring flooded's `vca` chunk). Do not run the model during vignette build. + +## Phase 1 — Vignette infra scaffold +- [ ] `DESCRIPTION`: add Suggests `bookdown, knitr, rmarkdown, terra, xciter, gq`; add `VignetteBuilder: knitr`; add `NewGraphEnvironment/xciter` + `NewGraphEnvironment/gq` to Remotes. +- [ ] Create `vignettes/` + `vignettes/references.bib` (seed cites: bcfishpass, fwapg, bcfishobs, any GR/habitat refs). +- [ ] Reinstall dev deps so `xciter` + `gq` resolve (`pak::local_install_dev_deps()` or per-pkg `pak::pkg_install`). +- [ ] `/code-check` clean → commit (checkbox flip). + +## Phase 2 — Data-gen script + cached artifacts +- [ ] `data-raw/pars_vignette_data.R`: (a) bcfp config → `lnk_pipeline_run(aoi="PARS", mapping_code=TRUE)` persist `fresh`; (b) default config → same, persist `fresh_default`; (c) `lnk_compare_mapping_code` (bcfp) + `lnk_compare_rollup` + `lnk_parity_annotate`; (d) `lnk_stamp`/`lnk_stamp_finish`; (e) pull spatial layers (PARS `aoi`, `streams` + mapping_code tokens incl. GR, `waterbodies`, optional context) into `inst/vignette-data/pars.gpkg`; (f) cache `pars_parity.rds`, `pars_stamp.rds`. +- [ ] Run locally; confirm artifacts written + sizes reasonable (ship-small). +- [ ] `/code-check` clean → commit (script + artifacts + checkbox). + +## Phase 3 — Write `vignettes/pars-mapping-code.Rmd` +- [ ] 8 sections: orient → **Modelling parameters** (`xciter` param/stamp table) → **Cached inputs** (`system.file` + GitHub raw links) → **Reproducing bcfishpass (parity)** (kable of cached parity tibble) → **Arctic grayling — a link extension** (GR map) → **Maps** (streams coloured by mapping_code via the `gq` registry — `gq::gq_reg_main()` + `gq_tmap_classes()` + base-R `plot`/`legend`, fresh's recipe; optional terra hillshade backdrop; full-WSG + detail) → **From vignette to report** (forward-looking, names Peace 2025 appendix / template#192) → **References**. +- [ ] Model-run chunks `eval=FALSE`; data-load chunks read cached artifacts. +- [ ] Positioning prose reviewed against #192 ("extends, not supersedes"). +- [ ] `/code-check` clean → commit. + +## Phase 4 — Render + verify +- [ ] `pkgdown::build_site(new_process=FALSE, install=FALSE)` (or `devtools::build_vignettes()`) renders clean; figures numbered, cross-refs + inline citations resolve; no DB touched at build. +- [ ] `lintr::lint_package()` clean (covers the new data-raw script + Rmd-adjacent R). +- [ ] `/code-check` clean → commit. + +## Phase 5 — Release +- [ ] `NEWS.md` new section + `DESCRIPTION` version bump (final commit). +- [ ] `/planning-archive` → `/gh-pr-push` (PR body: `Closes #215` + `Relates to NewGraphEnvironment/sred#24`). + +## Dependencies / relations + +- **#212** (KO/RB/GR rows in bcfp config) — needed only for the link-vs-link full-species Comparison B. The grayling **showcase** here uses the `default` config and is independent. Vignette notes this so the two aren't conflated. +- Relates: #175 (parity baseline); fish_passage_template_reporting#192, #178; flooded#35, #17; `gq` symbology registry. + +## Out of scope + +- #212's bcfp-config GR rows / link-vs-link Comparison B (separate issue). +- The report-side chapter itself (lives in the Peace report / template#178, #192). +- bcfishobs calibration loop (template#192 Phase C). +- Hillshade DEM backdrop is optional — if a PARS DEM isn't cheap to fetch, primary map is streams-by-mapping_code over the WSG boundary (no DEM dependency). + +## Validation + +- [ ] `pkgdown::build_site` renders the vignette with figures numbered and citations resolved, with **no live DB** (proves the cached-artifact design). +- [ ] Parity table reproduces PARS numbers consistent with the #175 baseline. +- [ ] GR map renders from default-config output (a species bcfp doesn't model). +- [ ] Tone consistent with #192 positioning. +- [ ] `/code-check` clean on each commit. +- [ ] PWF checkboxes match landed work. +- [ ] `/planning-archive` on completion. From c4babc968699f0bf75043be669acc2eaa668697c Mon Sep 17 00:00:00 2001 From: almac2022 Date: Sun, 31 May 2026 02:49:11 -0700 Subject: [PATCH 02/10] Phase 1 (#215): vignette infra scaffold Add bookdown/knitr/rmarkdown/terra/xciter/gq to Suggests, VignetteBuilder: knitr, and gq/xciter Remotes. Create vignettes/ + references.bib seeded with the canonical smnorris stack (bcfishpass/fwapg/bcfishobs). Co-Authored-By: Claude Opus 4.7 --- DESCRIPTION | 13 +++++++++++-- planning/active/task_plan.md | 8 ++++---- vignettes/references.bib | 21 +++++++++++++++++++++ 3 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 vignettes/references.bib diff --git a/DESCRIPTION b/DESCRIPTION index 281e2a5e..20fb3557 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -30,19 +30,28 @@ Imports: yaml Remotes: NewGraphEnvironment/crate, - NewGraphEnvironment/fresh@v0.32.0 + NewGraphEnvironment/fresh@v0.32.0, + NewGraphEnvironment/gq, + NewGraphEnvironment/xciter Suggests: bcdata, + bookdown, digest, dplyr, fresh (>= 0.32.0), + gq, + knitr, lintr, mockery, + rmarkdown, sf, tarchetypes, targets, + terra, testthat (>= 3.0.0), - withr + withr, + xciter +VignetteBuilder: knitr Config/testthat/edition: 3 Encoding: UTF-8 Roxygen: list(markdown = TRUE) diff --git a/planning/active/task_plan.md b/planning/active/task_plan.md index 5f8313ae..e4e41b56 100644 --- a/planning/active/task_plan.md +++ b/planning/active/task_plan.md @@ -15,10 +15,10 @@ Two analyses: pkgdown CI has **no Postgres and no bcfp snapshot**. The model run + comparison happen **once locally** in a data-gen script that caches artifacts to `inst/vignette-data/`; the vignette only *loads* those (model-run chunks shown `eval=FALSE`, mirroring flooded's `vca` chunk). Do not run the model during vignette build. ## Phase 1 — Vignette infra scaffold -- [ ] `DESCRIPTION`: add Suggests `bookdown, knitr, rmarkdown, terra, xciter, gq`; add `VignetteBuilder: knitr`; add `NewGraphEnvironment/xciter` + `NewGraphEnvironment/gq` to Remotes. -- [ ] Create `vignettes/` + `vignettes/references.bib` (seed cites: bcfishpass, fwapg, bcfishobs, any GR/habitat refs). -- [ ] Reinstall dev deps so `xciter` + `gq` resolve (`pak::local_install_dev_deps()` or per-pkg `pak::pkg_install`). -- [ ] `/code-check` clean → commit (checkbox flip). +- [x] `DESCRIPTION`: add Suggests `bookdown, knitr, rmarkdown, terra, xciter, gq`; add `VignetteBuilder: knitr`; add `NewGraphEnvironment/xciter` + `NewGraphEnvironment/gq` to Remotes. +- [x] Create `vignettes/` + `vignettes/references.bib` (seed cites: bcfishpass, fwapg, bcfishobs, any GR/habitat refs). +- [x] Reinstall dev deps so `xciter` + `gq` resolve — both already installed (`gq` registry consume pattern verified: `gq_tmap_classes()` returns 30 token→hex values, salmon layer field `mapping_code_salmon`). +- [x] `/code-check` clean → commit (checkbox flip). ## Phase 2 — Data-gen script + cached artifacts - [ ] `data-raw/pars_vignette_data.R`: (a) bcfp config → `lnk_pipeline_run(aoi="PARS", mapping_code=TRUE)` persist `fresh`; (b) default config → same, persist `fresh_default`; (c) `lnk_compare_mapping_code` (bcfp) + `lnk_compare_rollup` + `lnk_parity_annotate`; (d) `lnk_stamp`/`lnk_stamp_finish`; (e) pull spatial layers (PARS `aoi`, `streams` + mapping_code tokens incl. GR, `waterbodies`, optional context) into `inst/vignette-data/pars.gpkg`; (f) cache `pars_parity.rds`, `pars_stamp.rds`. diff --git a/vignettes/references.bib b/vignettes/references.bib new file mode 100644 index 00000000..994e693c --- /dev/null +++ b/vignettes/references.bib @@ -0,0 +1,21 @@ +@software{norris_bcfishpass, + title = {bcfishpass: Model and Prioritize Fish Passage in {British Columbia}}, + author = {Norris, Simon}, + organization = {Hillcrest Geographics}, + url = {https://github.com/smnorris/bcfishpass}, + note = {Accessed via the New Graph Environment ng-prod tunnel build} +} + +@software{norris_fwapg, + title = {fwapg: {BC Freshwater Atlas} Tools and Functions in {PostgreSQL}}, + author = {Norris, Simon}, + organization = {Hillcrest Geographics}, + url = {https://github.com/smnorris/fwapg} +} + +@software{norris_bcfishobs, + title = {bcfishobs: Reference {BC} Fish Observations to the {BC Freshwater Atlas} Stream Network}, + author = {Norris, Simon}, + organization = {Hillcrest Geographics}, + url = {https://github.com/smnorris/bcfishobs} +} From 6bf133574215a341f8dd9d51f10c58971779c28f Mon Sep 17 00:00:00 2001 From: almac2022 Date: Sun, 31 May 2026 04:58:22 -0700 Subject: [PATCH 03/10] Phase 2 (#215): PARS vignette data-gen + cached artifacts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit data-raw/pars_vignette_data.R reads the authoritative #175 DS-first study-area persists (fresh = bcfp config, fresh_default = default config; model state is NOT recomputed — a standalone PARS run would miss cross-WSG ;DAM tokens). Runs tunnel-free lnk_compare_mapping_code (BT 99.04% — the only bcfp-config species in the Peace, above the WAC Bennett Dam), captures lnk_stamp provenance, and pulls aoi/streams/waterbodies into inst/vignette-data/pars.gpkg. streams carry mapping_code_bt (fresh) for the parity map and mapping_code_gr (fresh_default, 19,233 segments) for the Arctic-grayling showcase bcfishpass does not model. ship-small: ZM-dropped + 15 m simplify, modelled-network subset -> 9.7 MB gpkg. gq registry matches 99.99% of BT + GR tokens. rollup/annotate dropped (need the live bcfp tunnel; would break the tunnel-free no-DB design). Co-Authored-By: Claude Opus 4.7 --- data-raw/pars_vignette_data.R | 161 +++++++++++++++++++++++++++++ inst/vignette-data/pars.gpkg | Bin 0 -> 10125312 bytes inst/vignette-data/pars_parity.rds | Bin 0 -> 272 bytes inst/vignette-data/pars_stamp.rds | Bin 0 -> 1992 bytes planning/active/progress.md | 11 +- planning/active/task_plan.md | 6 +- 6 files changed, 173 insertions(+), 5 deletions(-) create mode 100644 data-raw/pars_vignette_data.R create mode 100644 inst/vignette-data/pars.gpkg create mode 100644 inst/vignette-data/pars_parity.rds create mode 100644 inst/vignette-data/pars_stamp.rds diff --git a/data-raw/pars_vignette_data.R b/data-raw/pars_vignette_data.R new file mode 100644 index 00000000..2e0e9d4b --- /dev/null +++ b/data-raw/pars_vignette_data.R @@ -0,0 +1,161 @@ +#!/usr/bin/env Rscript +# data-raw/pars_vignette_data.R +# +# Generates the cached artifacts that back vignettes/pars-mapping-code.Rmd. +# Runs ONCE locally against the local fwapg (localhost:5432). pkgdown CI has +# no Postgres and no bcfp snapshot, so the vignette only *loads* these +# artifacts — it never touches a database at build time. This is the flooded +# data-gen pattern (data-raw/wsg_vignette_data.R), not the .Rmd.orig pre-knit +# pattern (which breaks bookdown figure numbering). +# +# Produces (inst/vignette-data/): +# pars.gpkg layers: aoi (PARS WSG boundary), streams (per-segment +# mapping_code_bt from `fresh` + mapping_code_gr from +# `fresh_default`), waterbodies (lakes + rivers + manmade) +# pars_parity.rds tunnel-free per-species mapping_code parity for PARS +# (lnk_compare_mapping_code vs the local bcfp snapshot) +# pars_stamp.rds lnk_stamp provenance for the bcfishpass-config run +# +# MODEL STATE — read, do not recompute. link's modelling pipeline +# (lnk_pipeline_run(mapping_code = TRUE)) is ALREADY persisted for PARS in +# schema `fresh` (bcfishpass config) and `fresh_default` (default config) by +# the authoritative #175 study-area run. That run modelled the Peace drainage +# DS-first (most-downstream WSG first) so a segment's downstream-dam `;DAM` +# tokens — which can live in another WSG — are correct. A naive standalone +# PARS re-run would diverge on those cross-WSG `;DAM` segments, so this script +# READS the persisted state. The run invocation is shown below (guarded by a +# persisted-state check) purely for reproducibility. +# +# Usage: LNK_LOAD=loadall Rscript data-raw/pars_vignette_data.R + +suppressPackageStartupMessages({ + if (identical(Sys.getenv("LNK_LOAD"), "loadall")) { + pkgload::load_all(quiet = TRUE) + } else { + library(link) + } + library(DBI) + library(RPostgres) + library(sf) +}) + +aoi <- "PARS" +out_dir <- "inst/vignette-data" +gpkg <- file.path(out_dir, "pars.gpkg") +dir.create(out_dir, showWarnings = FALSE, recursive = TRUE) + +conn <- lnk_db_conn(dbname = "fwapg", host = "localhost", port = 5432L, + user = "postgres", password = "postgres") + +cfg_bcfp <- lnk_config("bcfishpass") # persists to `fresh` +cfg_default <- lnk_config("default") # persists to `fresh_default` +cfg_default$pipeline$schema <- "fresh_default" # YAML default is `fresh`; override + +# --- (a)(b) model runs — guarded; skip when the authoritative state exists ---- +# Show the invocation for reproducibility, but do NOT clobber the DS-first +# study-area state with a standalone single-WSG run (see header). +persisted <- function(schema) { + q <- sprintf( + "SELECT count(*)::int n FROM %s.streams_mapping_code WHERE watershed_group_code = %s", + schema, DBI::dbQuoteLiteral(conn, aoi)) + DBI::dbGetQuery(conn, q)$n > 0L +} +if (!persisted("fresh") || !persisted("fresh_default")) { + stop("PARS not persisted in `fresh` and/or `fresh_default`. Run the #175 ", + "study-area pipeline DS-first before generating vignette data — a ", + "standalone re-run here would miss cross-WSG `;DAM` tokens. The ", + "modelling invocation, for reference:\n", + " loaded <- lnk_load_overrides(cfg_bcfp)\n", + " lnk_pipeline_run(conn, aoi = 'PARS', cfg = cfg_bcfp, loaded = loaded,\n", + " schema = 'working_pars', mapping_code = TRUE)\n", + " # and likewise for cfg_default into fresh_default", + call. = FALSE) +} +message("[pars_vignette_data] authoritative PARS state present in fresh + fresh_default") + +# --- (c) tunnel-free parity (BT is the only bcfp-config species in the Peace) - +parity <- lnk_compare_mapping_code(conn, aoi = aoi, cfg = cfg_bcfp) +saveRDS(parity, file.path(out_dir, "pars_parity.rds")) +message("[pars_vignette_data] parity rows: ", nrow(parity), + " (median match_pct = ", stats::median(parity$match_pct, na.rm = TRUE), ")") + +# --- (d) provenance stamp for the report appendix (#24) ----------------------- +stamp <- lnk_stamp(cfg_bcfp, conn = conn, aoi = aoi) +stamp <- lnk_stamp_finish(stamp, result = parity) +saveRDS(stamp, file.path(out_dir, "pars_stamp.rds")) +message("[pars_vignette_data] stamp captured") + +# --- (e) spatial layers -> pars.gpkg ------------------------------------------ +aoi_lit <- DBI::dbQuoteLiteral(conn, aoi) + +# WSG boundary +q_boundary <- sprintf( + "SELECT watershed_group_code, watershed_group_name, geom + FROM whse_basemapping.fwa_watershed_groups_poly + WHERE watershed_group_code = %s", aoi_lit) +boundary <- sf::st_read(conn, query = q_boundary, quiet = TRUE) + +# Streams: bcfp-config BT token (`fresh`) + default-config GR token +# (`fresh_default`), keyed on the persist PK (id_segment, watershed_group_code). +# Keep only the modelled network (a BT or GR token present) — every tiny +# unmodelled headwater would bloat the shipped gpkg with no map value. +q_streams <- sprintf( + "SELECT s.id_segment, + s.blue_line_key, + mc.mapping_code_bt, + mcd.mapping_code_gr, + s.geom + FROM fresh.streams s + LEFT JOIN fresh.streams_mapping_code mc + ON mc.id_segment = s.id_segment + AND mc.watershed_group_code = s.watershed_group_code + LEFT JOIN fresh_default.streams_mapping_code mcd + ON mcd.id_segment = s.id_segment + AND mcd.watershed_group_code = s.watershed_group_code + WHERE s.watershed_group_code = %s + AND (NULLIF(mc.mapping_code_bt, '') IS NOT NULL + OR NULLIF(mcd.mapping_code_gr, '') IS NOT NULL)", aoi_lit) +streams <- sf::st_read(conn, query = q_streams, quiet = TRUE) + +# ship-small: drop Z/M, simplify centerlines (~15 m is invisible at WSG scale) +streams <- sf::st_zm(streams, drop = TRUE) +streams <- sf::st_simplify(streams, dTolerance = 15, preserveTopology = FALSE) +streams <- streams[!sf::st_is_empty(streams), ] + +# Waterbodies: lakes + rivers + manmade within PARS, one layer +wb_one <- function(tbl) { + q <- sprintf( + "SELECT geom FROM whse_basemapping.%s WHERE watershed_group_code = %s", + tbl, aoi_lit) + x <- sf::st_read(conn, query = q, quiet = TRUE) + if (nrow(x)) x$kind <- sub("^fwa_(.*)_poly$", "\\1", tbl) + x +} +wb_tables <- c("fwa_lakes_poly", "fwa_rivers_poly", "fwa_manmade_waterbodies_poly") +wb_layers <- Filter(function(z) nrow(z) > 0, lapply(wb_tables, wb_one)) + +# write (fresh file; layered) +if (file.exists(gpkg)) unlink(gpkg) +sf::st_write(boundary, gpkg, layer = "aoi", quiet = TRUE) +sf::st_write(streams, gpkg, layer = "streams", quiet = TRUE, append = TRUE) +# waterbodies optional: a WSG with no lakes/rivers/manmade bodies skips the layer +# rather than erroring on do.call(rbind, list()) -> st_zm(NULL). +if (length(wb_layers) > 0L) { + waterbodies <- sf::st_zm(do.call(rbind, wb_layers), drop = TRUE) + sf::st_write(waterbodies, gpkg, layer = "waterbodies", quiet = TRUE, append = TRUE) +} else { + waterbodies <- boundary[0, ] + message("[pars_vignette_data] no waterbodies for ", aoi, " — layer skipped") +} + +# --- report ------------------------------------------------------------------- +sizes <- file.info(list.files(out_dir, full.names = TRUE))["size"] +message("[pars_vignette_data] wrote artifacts:") +for (f in rownames(sizes)) { + message(sprintf(" %-40s %s", f, format(structure(sizes[f, ], class = "object_size"), + units = "auto"))) +} +message("[pars_vignette_data] streams kept: ", nrow(streams), + "; waterbodies: ", nrow(waterbodies)) + +DBI::dbDisconnect(conn) diff --git a/inst/vignette-data/pars.gpkg b/inst/vignette-data/pars.gpkg new file mode 100644 index 0000000000000000000000000000000000000000..9e342443efecb1b912ff87f6e6d9e866ade65303 GIT binary patch literal 10125312 zcmeF433yJ|+P@Pa2_Z4Z>=hzO1sM#9If#fMA&Hu$A#WsPk_4fuW^EPK)==7_#r~>R_n3iqaZN`@ett4IbmtC9 zSyoFzT1HA-mL<@xxShSdT?>oF&d#p9on7IjeBS#L#9s>D13vBT?7WVM!#cGO%k_Qk zzm~VFGp0o$zHxB7%6}bqy8Y_*i`&(rvkND>taTaaG_r8jLPMRJ77QwI(SBj>8_mBz zkieMM#hog4sqH+jL{>&p|NhpD{^L5 z&9wAOOU=y6h)YV%YGlcor7=BAzqr)Yv@ApaxHiN)Wiu_ZL3^_X^UP8B;N#%g~g#^GscDY41cA=c#B!Rhe~Bd?JDM)FfqGNC=5iyqZfw5UxDV9!A;T=Pwx?9?ZcF!#X z-&`i<^ zKUD{{$SsbCRU)_0d^0mLW0T_ZuWm|GYHW7C)zP=Z@_!qb{iwElo4@VDYtcU|CG%gl z7Yl_O=e zldNIs)<-q?Bi$Hoi3yMBE-Somwki3)%C*uMs~)CVX6Dwu+{5-I-b)6?KpwK$!Q9<1 zx0ZB?2=Cm5K>xssA8L<{t9|Oj3!kg;Uo!2y+SD)hpX*Y1VMq7g4gXY^?k`G?M#Kg@ zQYVUpJOA&yvU#7pPbfUPY#}H2x^?YG_k5t3Y5g-;Et|tL29Wy;$NUPJ`*N;z`4h*J zV2#TfoMGiDgHs4_9LzBPkT1Gsf>XG3)-kOk z%seuH{}lJ&KW-(8@!x_jo$Op4iY;>Ke?7c4Z1YGsrF?q;*iBrLLuAD@#anUu#BYXs75fmrb3bBHOi!?&*>5vWIV2 zXk^&^OCG-L{qIw2|6j3lb{v8~xUr^NaP2L*cgMt9=WBQm^oPmi#uXba!@ zdH6O6Y#8Jp*w8m1IH*oQ{e}Sn0semey?gtrS{h1sVHs9y>d>Tqi5|Xwy?xn`#`N@v zxAx~-zNq8p->_c&z<}U@`u@Se^#TKZL%PJYjf@J9>E6>rw6m?VqnrZU2A<54Fn7ic5`;%ZQInkIRTlPNvlC@8MgYdFFap z{x$)$399q(^Ah5cGp(^!HseXD{XKmB{fs{kb!2Ojs^u}-+!v?HdPvhB8FdS1sYCDe z5*iX6bMH%IS&jQ5I3R2LD0v3@`PE0Bz3iNt+Ldvxn$m?rGg~`ryoEYW|BSfw#H4N-dlUy*Y|YX!#77$@)=(}+lZ6zwXA#3bf}LA191|v5EjhB!Oi#3Cq$R~`|L@>>-p=i9w+KGWKc)ms378TvC16Uxlz=G#Qv#+0 zObM70FePA0;J;e}{Ty7XSFT>HsS|$+45bc|(KjtV$(ot-CQ4?muLAr68r1fyUpvr0 z#^1kD{h&sE)Q0K@^#}<@Z;{!Pii$g#D9(d2Yu={ciGgl zfJ?>76>}cK3mVqAl=~0J!AEsoFSvm^ZGZ-Y-HP{d*;Is8b#VK}&h3`lB|gkQrUXn0m=Z80U`oK0fGGh}0;U8^378TvC16Ux zl)!(R1l$~|+vlolIJh`ew9hF+6mWDXRhY_wx&QxfTU2wrrUXn0m=Z80U`oK0fGGh} z0;U8^378TvC16S*j|Be0{@-~2-|euS+fBFge3*Ys378TvC16Uxlz=G#Qv#+0ObM70 zFePA0z?6U~f&U%}6nAi_p8Ka9oQ4-G;84*a=kVWd>^w(%^Zft6XF1K0ni4Q2U`oK0 zfGGh}0;U8^378TvC16Uxlz=ILKas#+KL3B!&h4bzR<~FGq%ZT5DFIUgrUXn0m=Z80 zU`oK0fGGh}0;U8^378TvCGh`60yP|*s+aLB;Ow01XZZE|J3I0_GQ&GXcIX}!8R4?2 zN&%;eWvbCC=Wt&wI)q1r^1G75BlvYAmF%5L8NKk+{`v2={rvx4JGbj@r`-1bf0>5a zsVM1cPL)4VwrpY z?4Q0U;8L(u8U5RT0`uSh`+Pc7xW4Z?qNsh**@Y8b*18OI8d>6Z77QwI z(S9LK{^vhqVoEqw>{8o#oPSnEQvd$ejQ;5Z`^RP_C0k=t;`l22-pA0S_^ia(!RhgF zS=PL5T1AD1#DrS-?FC_Bp-~pEyw@MqhnJ;gXq(8WP)nCit#xx`8%xdujVDXh^HJmZ-?CbPyIEVTlgy5ZWrn5)~329qJv@GBPU0*WzUxrzI`bk`>oC*=q61 zHzqGH%aEkBWM-3T>6ezuZ(@i`O3iBY@F4odrKYB3S^8Qn$=1wFOIBiBs>R>S$I`WJ zC?ofd2<=+up+PsX`1>@rghsR;)4I4#tR?=ESd&sStr=N)#rD4wtF4dwVhxXo4vmWW zhhnt#`5zQxJ2$6_ozc!}e^A833_w_Q@ z5FVwKeh+J9uGUQ~emOeX#MLIuLVrP+e^VnLJU90LmOefhnB{MZuX!;?_vqU8c1fx6 z*6hqd$w^t(*to%2X$HsUwcS|%yx+KvZB^9Cy>@N;3BiU>%6mO87rSTvAuT(ETJm1C zcpII>rpBdMEis|pVk{An{J%?w4!*gj8Xgf7Dvx~s+C$#zkFF+KllmuSS@K;rqJqsk zKl<7q-I$(~jeTavW+n}{T3SbT(S+^~$#!wrqc66KjNq5zgzz{^`oP$%tQ1S9sPK*< zQQa-=L%Zjefp0Dw_3_PhTLQPGq{QZumZDC0SVZ0)d@NC+ZE))mtwN)1;wCI)SyQtz zbBWr=XKa-sPVV*V+mE+(nRi`cGp+gjxW04w)74aq+_QOjMRU*DH!~wMHYq;;;-n;{ z#%AXeuD%_X|J%6iN44eK{B0i=W&f;{%zv3I^DL9mH`7y)f3QHd`Q~4o%=Eadq`2hR z3~NGc=CDkQcTPi}Fc(Mnp7sB-og(@CwyO0gI?m3?$-QAi`-xQ_*sK2iWouT(u-JZS z$%9i;GmYiX`=xXKwa(k*j~Cn5*7Ktb`+g@`!_uvfYVb$8G29Xp9?@M!bl>Vy@_&_U zrLi?VOtZ|)t$n$N?MvDu85je3$m9ldcfZ_P(j_9ia~JZZ2S)f%drVaAQy*UVT#f&d zW#-kUezE^tm%y7zAQr@C~1QF1gQHsFyuQ6${?f8UiYhU9%h;n8IaIl0%ZYd^Z@ z1I0}1pTTO`{FO0)++R56SIFF#bFIstIGzM+T-M+WD^D4m`XD&84s8>{?=~|ck57oB zqkEUSe=4rr&&{#B++R73tyI9t-OI~<{Llw;duU$wz#;#f?p?~QXn!&xb~16XGNp&x z_$I~U^pg^jtQocoHtqF|w`TUsNJ`I2VpCxR+D-qGt%SNPs4BNAH4PJB%t&&+dp_ zZMWsF@3{^xcD-13F}tEqy0k8Q&iN7|8|_`r$-Pu5`!Nj-k?|`8_+N>K1meLr9u{wl zM?zA($Nj`2cb*l}B_=XFf}1*q=8hp254k1}OYUE8=xgyXe)VByqBTCYe@5Eibmkpz z^)M#&h>McB?V`_^?(VidbK^hSpX5#z|L%705q;#{@KK7$-ReKK<$GulDT6bOLPY-z z{4lP`s6{;3^-1N7dc;FFHM_s}3omPvZNf^p_|HE~&f2AzD zmvXAumEu|OAK83PHNduQ|GSF%s7~%nGhcBxr$q3dQq_kB`^ZYrqszNF!+ucTZClbN zTlc>v+rO!(4-NPKm`8nRZ2v%%Bq>$$pFoVx_He2gT*~?0=h(VAg3idwuu^zSOS0`y zZ3Wc;_+Czva|q$_=!PDakTx+?#2zSSP7;Gg+7cmZ`w^DN4z26h@}Z^{Rrzgy4~b}P z3$i))gh#93X5maCIwm$eGc+YVYnTy)ZP$H#a*ilkb40-rN1Ld~j+Q**^2j+$ATe+H z;HkDVgznW05sVx3XH)n8t5f&?mrk90!1oKYg;%#KYV8c;vh_wA3`8rz<(R`}jDIZv2R6 zKm633$2}e%71Jf8gC*us0{5_ViRKs0TZ}usJ!EGV4+;(0#%El%?K3HLSPl>K@M&7n z(YqW$Qh6`b5_)v_P!X-vS_r9Zfw2irX)vOE{_6?gI# zOnvWn{HPjfu8sD?$0nKm((;vpa+O5;TVu2OSuOcXnGe-LeJu|^+{dR=c}GpWyD{&a zW1~##puyJEe%3r#@}YU>x#+E(vM+b~=;#0KogTO2f94-k0;U8^378TvC16V6A4y>H z+Cc5}W>EaMf{$kS>z6KmAx{+V_R56~ z{vq~`JkehNcgXq6(1vz)TYmQL^~BnMkaNGjIc=2HFXWlBMT@Do$F9-09kA70w^eK@Gk2T4=m zS=%ft-V}cq*>N1a|3-B6>99umB%Gc&?VYi@{%pvo!SIpn^9jS?^s~SEq{8QF`a2JR z6Q^DJIuRb#y#9yX;kIk9ZPNHxWF&SDh4**td!+}Qn2_KY43|5)_iz`r-}324wP2<` zsuTRo#m?E4;Nk^pd3AvIdmIZc23vZ>H*O1iJC6SOT0g&#rE|8~h1vMf3E1zO8aqN^ z=DB7cyspalNv&->eG}~6YwA|rzx3*Xcb3BE_Iu2Ufp12iDl|s-J1=XJ0I%CMqU1EV)8v_Ts=@O@*Ji#5 z7w;BauN-_la&p6$V9Cu9=KIp(D|Zi;yV2KJkHTtSZh4sfMR?SJjiq0Jkw?%;_?hIh z6{oYYl6sFyY=XE{giA6i%?9$7ZJO^igICuCOnCHF!F^qiYzX(6^LHG~9!{|xE zFx&n1!S5UMUz7q%e!XGl_e&C--n7W!A+Tlq#m;?U`WyNjjGVrXf^Uu-@b!F{b$y`~ z%=+2wg3

4PoSc@{Tz8y=Q8}jQe!?bw+=mSA)54e;xRycdy7&aP~{(7B+^D*Ko8i z0NWkPezq;ldJg^}4t>8gVsjLXzP0@hMvmwE!&ud)2XuYw&(6=ljO)%07(I`87iPX~ zHp6`15iGmW{iCM0s`VL+UCdht zGrl%o*sdR617nB&=V9cRxC9P*Z`Y7JF!On87Tl?C@gqe(FxJCuDlEOL0AojQj~6GO zo#P3!{*^|+D_*u{T@PaiaX-O~XTv)9=9^a!IBu|w?=2X)wWtc?Z@Rw#Grx&`F#e`Y4_N*$ zSlnxB-&!#9OYZ=)4t0HD+I8s(V~1XKV8qlY0Y*>5{b0tiek9C%7F>_@(>M!Fh2=Na z!svI^nedjZmu6+bvtD`S=tkJ^ukfzR$!|2npgYcHQ6)sPK(YJONVf6OW2>8g}8-ay48uscv#MVB!4vbw~&4RBi z*-@(tjDJf_hMDKY;V^nt;t3f2Jo_As-mH5Z=DC*XFmknY787q4!Px1pa2WZoS_9MW zcykyz?%M;eyLR{Gda(510*pPL^@8OW%538POC#o%gOO9WjxhQ(*A*r{R2&T}o)m!T z@7@D?={tZsm{T|0|1;Mo2 zI}BF*x4_6N`+3{_%aN^JDeeCq+z#8h-E=$8hxx~pfGGh}0;U8^378TvC16Uxlz=G# zQv#+0ObM70`0tTGaR-O$1&nv+`=-SwSu>r67c1aU(Se^CvBsrj+Krv(Xzx&}Fs~#r zrP9;|RL6UVx`67^yQphWpHDcbIs$d7r(xz+m( z#64mQb(K?#8h;PdkLT;KK99rHUrJtvsXI;E39B9y{1J7Y9qos1g{hZp7z$JO@cTyB zXQr-t6Q)l1YH^;&eBL+?Q}4>0t^VR0H$Mea9|;Q8{nVF>Z#C*j)k?tBQ71eGtM2(_ z52McXt3SM}eM6s@VLqP?f~k8B?+>5ryl!M0Sar5gnEGndp0LIl2p?ZGr$z>>y1%!s zpBNr95@uX2tHadg20Rbb-v<`8r|$kbOx^QR6v`p1*5kyN zF!i{J4lw6BwZFBsA9TGt>(jh`vy-r8MaH=cu-5SmtUA$mFm<}~KfER=|8;$`{u8$z7QB`cAC+ zW6K>zo$x7IIzNks(L?vEFm=-sK``t8TF6eLE*w@9*16O( z@VxYTy{1c@vhNybhx_UpM{4s9U~x8b;sV8w0aGHy=Y@=>3s3F!EUu4>Rx0j-T4<$Vo8c zz4$mRd+q_#U$4b5_3K4Ju;g&l*8U|gT}M9QyN&rzD-2Wj{9+DF{c_&7JbzYd$$r~l z*7L&muHOAhT}>eaQ!!&F@$&kun0{B>f-(T6VExZr*m`=}p*|KPq?Zo}y9+v8!?@9XR{ z^ySiO82|BRcbK~UOY(o5gT;@BRVTg%Qzs8t2{Z3^T;#v5-7S3?#veOWf~l{Ms=wdp ze^M|!uR`6|#=*49>Z$fs#tLpw!i+-I5tDkx>{{E{mu+A}>!ua1tqipv(cGCSv z_uj}>d;C%ytaHvRn0dCygqc@L2CQ?(@i6kJGYH1*wwwv;96cT8+@#LCF#i50T}NM= zZijj9w`poWb!+{-Fn*}H+VdRWqiR1tbgfwDFUM`ye@}+_e#m*-{e6;PAuPK-3gh3luZPj6ai77m$NeyQPtq2c^+`Akv#zT*!PwEV zi?H&JwJ?6~$w$S{BorQFm|@g3#PwoufoKIYr!!2 z(#q*D{^wdKjC`M-towiVuG9l&y;3K@lE*L@yRSV4Mn4KIgwekbN5Oi|kFfHwESPip z!p)Bu`N%Z+8}y*#RG8oXqU*8;5 z1Xe#SVEK;{FnafT9Lzd6R)pB?~%Mbgg{oR8>Pr*DVxCN{@G6R-hkbWt?u7#Da zJqODVo`66FnT!n5dBNfeuarsQ4?V7wL^#R zjP@O0fRT5tnXvM;XJF#h6JNr-fANjZk>%%|j~nq|a8nq)cdQ4qURND-o%c1G!-|^) zVf4M*G+2IG=f1=t?~^coqf1FxdfpOja7ouvQM`#rvbl^4ds_%pYyFn(eGU|8=39DvCm7LA4R!|y1b zvX0xnuwCDJ7RK%i*Eog$?OQzi49xT2Oort@^D>sbcoJ&#{9VCBh2$tM`6$H%bN>5%db-Ww`;n&-1m zJEnXi`qcJ#82b%e3oBoKA67m-5mr8Q9A~bCvM}3-dfaCq=^K86&j6 zll{#VBNq!yztNXr#dERpwuWbo_8XmHy?>Mn>;05(>7VobYBOM-Q|=8Iz3IIXW?ij= zVEMJ5VCA(vbREAFbj~JUD=hyw0Y*Pdj)l>K7bn5k^DRFZ{U0?IM$X?{B!6REKCi%f zA1T6?&u#lo{NdcMqG0wveXE{FUZba-Eg0W1vnz}aetaRy7Smh7yfZWB4HzBD(0rN4tj;j&GOrVi zyrww9#Ks3uA+X+!x&|xvo&vKcTi@yz?k_pk?gbcs^W7vE zy`A_pteom&m~n=8)BVKgQ!qZUdpQ`rnE#XRXS|{x8DB zj+Ct*gl4HxjtlRC)?G1fiR~S~T8v)a~k2F-7kXm&fRtxxy;-RBm%9HQ9PF`cq*6EP1tn(ch)ZVfSq*EP*I@k1{)sU9TE6*R=0oiv0#CGpwa-XTN{OAc7F^tHD ziJuj&!>m)F6;{r07v?#WyTRDk_#(g4AO5x#tUSRLR_@&xMm}FvgS8j(fE8ywVZOgz z8P+@VwP55|zch?J3<`p!KX*duk9ZvhOJC2ytXIW8uxd63VckCqR;^+-tUclBT^R4NhcyERE{T^6xave;rn7I%p2U~O&MxT6U!uXw6 zO4tWVKgv$j^|=+Me$92|+EFmi|6w(Z9EQ2W%AKd{dPd^shg;d&kJk0nk`B+oiqG?5 z?0;)}m_7OrTVTbP!m#|^epq|q4_ey#-wP|}jThr@G+z8sqCc#7vhIK|Co90{*{Cd-c-H&N7Wj)LJKj!*8E4oG@qvylYr@#e z`JOQPeEg*3OAVqHj9=QZ6vn@w`nkDb-!Em0i63iVJ+B#z-dIP$>>V1JZDPc~A(yc~)~ER*m~pL>{jwhG zmcXoQt6ebm`{V*!`?BxD%HLjt8RxoLDI*NM~Po`O}2m<%KD`ROq0d2~ChT5Y(PclXf@(a(xSo%B#k~+JAV%%(q$yto-Fl z1H+zbNgn9=xven%ZI3(G$$z%Yf*F5H$y@%V53K!5QyYI-4pzHJ82_5Mx4tc&^@Wi~ z`LVFrw0`K?V0~37=QEH85qCkG6U8bg5oRoQY01T^D#GAa(e=1 zeP)X_-p66p<_pSS9A1##R@W=_*!BzkkvGq13?s*`-@($;I9o9%3D=J>)5vdG%if)6M$BFf!fy zCd@n|J`tZCftQ1(jtvAd(dd9-qBX)ri`@F|tbf_Bn0<+Geo4`t~hQW#* zZN#r#KKnAPx@>EhSf0KG)^i%b=zpqWp!BpL%pN37KA&~`;S%E^7cFrSmJj(3Mt)1q z!1S|X8?1F!dwlQsMKHc-QaSn~w#*);>zuPICdjti!t$Mp37WU7t$q6lm>BWQ7j+CD zb6PP$=aGA0p0nQyv+l!o!1yAM6d3*6@}b(38$Ai54;`1o@@11?+0pATIr1I(c*WRh zHXiXd%y>P=!`hQa2#+(j{zy5Z~SaB;B z#_vpQV{3n~vyIQzhl$l~HGcXVRSQPH$ArS@T~tjNJ+0A5OzqAcR_)JUOwH68CVs^E z!sHt6zt+NkB%eLz17oLGF2l+l#pHg+Ps8Xna%i32q4U+`98%YB*PeVC>p&Dy$lSn9tvyhVc_~8^Frd(_rF34fQ8~-4kXUPt=9= zK3W8fJOlK6a%YEDuxe~IVbzKn!pLuSMOgmKL-%tY_Dwg4=udkyo ziZ4GtX87ZG&cMjEz}GP2c=0HV|9N63OuHYyfU)Zen_8U#BlbzJ=zjM2#bNTOvD0Am z^@$taMvdA28CbQ3?_u_ej!(giuh?Oj{+A4gb$+}8W}dU2SNpO@r>ulko7@OfQwtHZ z4zn-9I@ezeEB7wvfIPYd$GiZe55ud%$}48V%8Bd4iUYczy-$O-F!{;U-LPtPJz&KL zjZc2n3L~HE*J0V&Fc|$hU5xqRU!o_$TK^g_&ujDsthm+`#-Geu2IGf2cF=Y7b`7lB zc6XS#*nN|D$cI&vVDx3?4w!YBKHPSHxq=0;C*nmHn7G`d9*jKasej3}3yl0O)r5&> zBa>kCvRVn4=k-g0ksRfLOnf?e*m^{jUHmrQ20nB>ZFNU>O z3WZhU`4VQ`e~EzcACDJy#Gcv1b%yarPZxq!JMIUwcN_A%?&td}xP_VzLwWEB{yoGyYp;V8y|uu<}$-82#?B1lFD}0LGrKslDQQGg$hq_Ih4B z716I7;3$vf; z{1z<#eE`OOp8o(=?e}w7_w9k{ca0dmI&l(a58Uf3n0V9rH(2rTGA#Wn<7BHzx}ksC zLsx@UL#_?WAA9RM=hbasmc4TTEW7Cq%g?uj(c>yZVfm$Kn0#jOSXgH}$uNHD%_*?t zJqgx+Y!OJ_YI5?yVhP+jCiW}9|Ggwe+`E5pM~qgtb5_^u>4wW7hSX#)uDDz6F*|SYhQ@ z%2{M%Lv_FNvJsor9vhnkquU`XV8yzbw(FJV!uSsFIWVzm#}pXZo)F`6Ha-QTqX!qm z@|CHuV%vI{@gMF56YJ;gh2@Ld!>rkJ$6;jlQwS`XT-Egx!%H`Y6$70L+jKezR=*xF zqO#P3m5T+y%wu-|jP5OM2_ySq4Pav2`<-EIZfFx2-7Oji6GQhZXJS4}(_qy`I>7k8 z@1KI1N4>{knEAe33Rcaf0*p^< zQXAIZz7C8Y>}Ud`yXTw3$g6%!wI|1lgz-sd+KIVu46GR47M5?{2_wg!+KX>Qw>kuC z&)xwh7VJ3%qolL1 zssn4U{3fhgQVUqQ-X}0VdRzxsdxP(EKlS@)nAr8yRT#Y~9}Cle`*Ui~zgaX$Ob&bu zW?ipLfbm_oKT~_2I~QghpW6W|$65m`XV?kL-gdw`$J-AxpGCW2#ZWz8Iai^g_yls` zBQQC_Ck@5yUA0G5tnVSlXRL>j-^YnCcJt|5uzckJSUK-JSbJM5EFUx-R!-UvR*ZWF zRt%f~Ywwu`vu-=yg3-qxC0}A|_6``|*{L^-oZ^qbj6Yg?H0IyQu9$89YL9$>s{yMH z+(nGO)YtWw%GJ<%s;=7_#!r0|3af?_4XXyx3?_Dk_l3zBF4u!~9+v{kr~1IkO@{0K zMROLGhjs4r98Av9So%xsx-<`_-<`K)5BR4oYR|vzbyxO)-#n}K#Ps5}{>t7^d)_6i z1}oS89p=7sbzqIh-j$fk`%~I;Vz$Q}VeLWs!NjCfeu$O5x&g%`o>$$qK< zD;HZ0qu1|x!svO?&AOkT84xQbNgp-8YOrFqY6#L--A_#Y;v&o*yRr|Ad@KD1a}Hov z57v5=VGqtaA7}zA*42XLKU%@~g99yK)-|;qjNQ+VhSAreQ84S$G#8`I_7gDcdt)C=d~jM1 zEB4-o@yokc!K`;3J8E*u1>S^Nmji`i;^(b7uyUEwuxh8T!y0c(7(W%Y6xJR*9d0*{k&l15Gk_?*4|ZRL8PD7dSbKMh z`$i2W2F6Y{^n>M}s==&tvzKA~q4#CvC3{;7GvBnWFn*%VZdkRXIk5C&AB?`IJPo5~ zD^BY=|3+90jNXUegk^u#Vfzo-UF-mk(u*SQU>_}K%dzw~q%KfBig zWA~fq=(^qmf|Wac3hVju&&X~56&QcKbtTODZodx8-ulDZ6WoBMkCkA>{oA^~X_2lc z@CUHFT?ynvZoUAPT^4|qa}S2ek)JLE6GzTQ!94dfN3}0npqBCt+WYFd;$$gU&sBf& zPgltSwFkP%^Vn-v-viU{ZMDZQKJyxkADLMRmfVtIt#fmjc$i)d#(uB$7W2;fkL1+E z|IiUIda!IatQyp87{5|iIlJDi-2}64i>JfVpOa$F&5~i_$|#4DhJF@oqU+=_wPEEu zMPS}9aOwn0&yTWa(cW!1jGpvS%|U)|39NiXH3a3tCt&8;TYEtK=;swm8S&nl3adsC z31bIgV%B5uSXlO*4b$(p8({9cIsw-E2F|68^=tJC%=m(1#Jq>7=d))#IvZwPn(u(M ze#c?uGpbRjmR!AzF`m00!i=kO2#g#YCaFE^G6Y7>9bbkOzn9zivtlrIHRx;D$QQhf z_~CpFM*qKg5++`bx(g%6ElFD&n=j}@s|;{``i8u>p9I}fzLCdZ{L-N1 zu=Z$sVf<*+7MSt3T@TBj?||`t{$m@xvFmWpLAgsOR>oDU!`W1|R@0kWO zj>czU{7KERF!Gpn3#QajIs?{cX?L6deHB$n9aebqj8Fu{6Zdh?K6GrbBUV*WfALqmPn?t248vdZE{Dbzf^a>zWr6hq?TXB z8z%lglMd6*5DSd{w;2VqZl}w_=;@`&F#7ycMcq%l*g>*cj_(vZOY@y{=2sZqYjBM@ zD#uZsn`d7C3P$E7Qeb@QZ=b@25tk~8XCg!~M6Y|Ffo9o<4G3O$ToL^Ku-ngjkmOi(;i){@vMMVw^n=E(k9#eVaH&_c(+QYIwlL|6^SET8UVo9`O!Ids120_%L|2F%vM(+y@F zJe|nN(4)oDM_fXsny}>bIm{mB)8=CIbQer)ZV}c-sz`7CnE>z~7{@7d8XG3S$WF#7z&Lfy~L+LR>+SAAOR%V&(p9{rY(k*bG;7B$1Z@$y}o!CCWdTW z24io>SHg^E{T5i`)_XhBuLCf?b7TT6yFLxGE={Y$Mvh#G>zp5+)%eJ{>%sCPt6yKv;6V2BYtUCs=XqWf*_&)f<-o zo(SU)whVx=ld{8L_JDhyf;FC47B~FVf6evF}a}I zW3cj>%CP36Juh-7<_v3{UV>TgqCc_ztjj2!lQGUd-%1~Nk4@+9%2_{y8Sl>HnE7`;0W0^d4l6%70JFYz3&G5zj-f9r zGMq26hams^LHb0$jrPH;$M36b_s8vkk=x<@rw2+wS|SaD(pEPJX7BflQYVB*HxwP2R7{EIO9U&+E6GtX9JEXLngI&1Vjb+~(bYiNjxxgSFn*VA=mLSmTpEvo{S+ zfK}7`0oM9G??}KTKBWgld@o)-CfZ5IR9=1<6q~lhv_fz z_sZB4XVagaRFVKdTm~J+%&vpLu-$Dy*}P%3^-zYbuN%O=u32SG@KzOuQW3 z6~-U@{1QxjdEN@^jAJs)xLT#blHXWZ{&twIKDymfsJ7mG9q${qRfW@evLA4q5N^tAPyoIiq?oa|=j@$tm3Hz{u|9 z#V|UPRvXqH={QWTTuRr`^@FaSMjhmvAThsNqA|=`MC+N@c#;)nE`!5hY@+2Dn0^u( z!N~T@MX>g4jbZHp_ruuqFX1pg`+W79hR!|R0oGbR4ino7_JOr`9RX`C(_!u1Uxv|@ z??%GJ+$IZP&1WJ^tZlv=#@6hgg~?HuuGjtiJk|3sYd+`@tTmerlLH^T0uw_gu7Z)z z0T(aUkUHEKw)?#uVQgaVDKT}-rZ6^n;VT%Oel;3KzTcmQpn2&Zgon*=mV}X0 zYhRcgr;js??<><7rrljfSTVW-j1G@;g_U#0!pwhD6&QIg8VD;F@`72n#aS@xAFbz; z1FU=+)?QHK!#3Mah0(dgK`=40_)1;p9ou+Va`_NO?`lQC=*j9&VAiK$bC`Zk?Sk=v zJJlca_udFAR+WQwjR4^1@bAUV)XnpMa6~2r=_=-3{Y|f{gam#W%p%(AOG| z=Cu+=e+q7bxo_hlm|SAT4w(4`&VuD5*Tcy3lV@Oj#YEkY9+b?6CHEDu^d|u(ru?Go zs)t6ytlNP1VC{Ki59sr=AHl5Kaz9wPpyn^1?+RmQ?|ug3lRrFG$*4K~_8UxY_03B# z<80#RW7zo8jxct$W&o@lyb7#Z%yL+IQUK=ppWcD-p>u9mMBe;dV5`TNKYQg%FyHr_ z43pEiUxCS8j(h&}#fS(lC3uyR{R z7Vi?_Y)Sb#JIW&zp4` z#y_mxr1tpOfZALq7uuuiv>OfMQ`67DlJ6Fn9LG|f@n|o4117e$NQM=YE7ifjvDaAw zV|Q&@!`RKZ<1qc!N`}$<9hGhCRdyjv&7@~n7+2cj6wLb8mwqt5BffPFeNCJXt5z}$ zCWrV+EPLDqEBBoSlQX83^0V37lQ4F0xEG9{+T0&zo(-13@{4+&a_6%!d+!46VC~V% z`WyNl(MI?4zJNbW>@O{Slu=KSVOb(FH4o1J4HHEd8juVq($UjSO#=*$_G5J^Q ze%Xt++pp`KZ%f|VBOZZS zpIF5sa+DXohsm*yN*;93~xQ_lJktX#D%%-(SPDO>x%WLSQ=Xg$`4y_@12_IM`%mVGRN z$>Ho{VB+4cH864Wa35Ifq?`!*56Xhc9p3mBCN9)?8Agw`8~&DB<~EqzKDsXcSm$a# z!}zDBu`umUd)7DBZ`8}M_RP&;>4$Pa?KQfjJ&%FWmNeyHXj9lA?!uX#bzf*f^4e>DZe6p(c2uyGxjMxWug_Y~Cg2@k@;$WUT za3w6i_!_KS`8^mvG~-=pVti0=U7=8Zg04#g`3D*2dG9LVL zn;MPjkDs59fR)enfEj1ki7@>Z8Y-ryqw9)~b718Sm~n+X4{MKD1E$uHyc)*tPdLHoLD_F% z`I{fmfB7+&ri_Q$+fkTx>DvV6^W;I8=dHd8zz82{+-2F&`Ex(lQ3)_pK~@X`es zKQZMtEPFfzD}GjNZut9KTXjEvzdp?P3&_7nf2}Zkqi+=Nh|dKk!|bI_4TD*~n(JX| z6E6;c@pFrRg7G`slGL7>vS$mJvkozOH?1>F9&|_TmDdb}6~Fqy*w5q%FnQem?&8tY z`z?S~yNQGqw?2gBkL5q{Hy8H8_~~6n{N!Evld$simRwi-xCtYVFM?tDsZt?Ee)W!z z`a>`MV69Ub7`b*0g_+lc!m#2(EUfr-2mg*g89o$7F59o${C(HSYR`MsmtoZ!o`YG( z<9lJ`y;s+j7rg_kMm`f}9#<#BO9L7(%ybUvsTR|{>>E^pI z>#?aa%=hcxhtZF4dzgG?-ga2>IYs^?|F#I0|6B#5A7e+r%=hOpu=3a@w(DafVf;uZ z7Z|;&QW2)VQCE>4_CDua1zSz!49t83*TafKV(m>|hozV2VB*9R<6y<5v#|Vq2Fz!$ z+N*{W5923qh*>}Hp0NC|?k6uk)EVac#PhK1v@NW>N{rrq*#efmtAFC&%^EOy#A7F5 zt-mv@Gi$BCYSg#OV}JZCO=0FIeYy^Fe}&30{vhKLto=a%EV-SA73Vs_vbzH?a%kK? zhd02C*J})n-;g2Z(9&3w#$WRteOD+3V|!;d!>oz7uB(2v5LQm) z3u|xm46Ju78o~Ia;R9ji+O1%Gb3#WL+0N(;%f|g-)^K?`j181^hw&+krofWP@9xZ* ze=}woj4cj04J(J=39DwX7glcmJxnZ_wgP4?8~c7Y~~kOxyu+> zI{zE2oGk&?{9IdM)4cl;4zp%Ue%Jl$s#twtbnyM_w*F?h!t#w*Vb(O}a#?}1z#4A~tenpZGj7)&FseH21sL6V zyCp1N`Z=ter53Cj$X!_Vz#qzRoxNtc*2a2#^*&6FJ+(TFuh>5YMrW+|cqEMcJ!^1X z=e{X0Ip}^*7$3ZA||6bKd7*eAVuBSTSyauJiMZV$}>b z!SXp-Fnh+zcVO)$5@7mm6w=0!XSdEUHdHAAR*qHzM(*J+!N{Z2;Zm#*?+Pz~WkXA0 z#m4txa@uPXVeKvV!01c!;js2tr(n$|8)lx%9mD7!yBKfdR4>*w zrr*^uuyV;!F#0id9IV<%224FK^qzbJo6&T+Ueo>&n{M_Ybjhdh$vZXP%zG>U+a&oc1@2 z^IT_kwu|wXu;*v%USjd+jP5KhH~xe5!#`SZ)~V~Z@OgfRqb}>m*WSR%wJWmvT>Lbv zhs*ye>+}3R#&?|Y-~-klAFAH6Fh*^+lG8r>aB{*2S$WJ}z*);0$JX$gZe#uTgsV7f z3=LWpa)jx9SiG1rn6rl3G5h-spIK}iXjqFg7A|Mw%Aksz_PCjy=aQew6y`ijcWhm} zo|iat$7-Clf!jD^^AYSm_B=P%&Ie|Hzx8(-%N^G)V(qlVVXS`d{(!a9oyxIxR{vj4 z{P}zL|KeMlLVJI9Gv~feX7zFRYwUB@cI2$pJ;AQ$tBYA!+AxK+%m0mL<+9Td&YHx- zoSdU4r++=i$!%J5%I~G({!N>5a)ghvT|2G8#?4p$W^wD>T{&w771|c!d&jSL^LgH@ zJDxK>zs1_ww{2p-LAI2W!}Moycg6k1?afEAe)i-|oH_MOHvTQ@!^!1Va^h@rHh%o@ zQ|!6;`7AEKQT6OXyr_0LtIt6LSvfp7C)^p;9--#1A@pdx1o>vxTf8+FB ztiJDG!{W^zV>#!4hqK0XCyPg8f8fN$*=*docl&b-?cv5}Sp0cl4^D2ojx$HD%qfSD zIOTsVi@PWN$jOnJ~Uvd=wwNAbpWjO)Ylo`?5j z?XL4R?EY6J9vK%mk1K8;eK2QEJ)bjYJ)G0OU*Y5h$FY7k;T>4fgV=oyZ^>zg!#H{Jd7S)tDvK9$JF;>-eRgad>&nTam$2~g zc#l{fn0T&T_3p*`SGPYo{-c_vrE^ou)K&R_DUd{iH%1u4Q1nLneW)MmN^%)dYWFs_^dsZ zY{_Y7d$73IKJ6ppT@}t6=fSMsm8#2*KQ!$v*L^N${QE`wR6l1AVD0>|^{ihXbth}L zr#{KaALnuMrZKD@+N@&N_4);ze}ClUSq-zlHU9GQ8|`k_BRS)1EzWqeFN^2ZPhV_11^s=(@RTejzOt8@C@ zoh*KQcmnGWbMD~Gl^b*Fb1eJ(6S}c{sCMkQI(=BZPZ`C@|8C~2*$gXg|6>Mge^*_@ ziI-2Yaz8flTRX0~f)lr{WT(6PbwV{q@fNu7AJQEI#zecK5q~A2tphFn|*WZf5h95Bg`j z_o8oO?d`#VtUS({%htSFWPk0l_shlOr!{7AYRG4t`QGbDIOa|kOEwQ1urhz)7|#0m;cSlZ#ZfF4w5`uM zZ=5l`5og`+P?pmT?#$}+f=Vowy?hNDlg~V$xV_G8oH3+Iar>83IWaHC%ONg%n3G%7 z=8WMlu{Ql~L)LcIe#-89erwiek1A=6AY*pN*gKe&S)UxziJhl@UCvl=KC8QC?X$mf z@65^lFX!ac-B?>%Ihu`y|8!@cGj1wp?CrsMo|82Yef71ToWA}>aeKS$FXpt|*&0jw zMw~WLm6L14iJ`SQ>u))q@_oEJC-!E$>pXN6E5{DGA7l6b=5li5R-C@_66bkOT{h-C zw2_TPrH^2-q0wKgemd^Y>SgzRtV3naRG!72rN?sGa9MUe2ef48Is9C9KP_(N^!-b+ zzu(b*CEI-$WjJdu70X(elhfaMCyR+Mp3Rvy-BEJCL=%Badb|!#~zpc z{m#WyPRvhx%X6b=a=hOz*^TAG6E?7R@_X8M+FPERCl)l}tb69Ue#W4bx0um)G-v(2 z9gF2N@|;>MXq5J(-#+sUXO3N;<&bmV$?={ioEEF!JZIFtcWTbA|Fc7_OD9L|#Xe_Z zVcpzZ^+wj87Uwy2a;dR7-Wt(zR)6iLaOPs0vaT(+n917jr8|1gpdO!lh{c65)j4z9 z7dg3CAI@CiO%@+^8piJHu*93p73Z-2^KljND0734IQM@9tM8}3;N;GA*?GGh={bte zeY6FO2MhYK^Nu{1-S>m@I63V(vHSato#)S%oc?r@=RR`e!Dq0~yL@!)9qD?U@?Oc} z!~gPmd0x7==W5FR;B1%MY|V2&?f&)8iTY2}<9AR-{ zxPHIak=~U|{J4wtkJT5mczMihPWyb2vnKHr>kqqsz;b|o&$9M?)z01(RS&~nV)eeU zUhEyXH#qI$T6X>)zGm%e@&l|NeUmwa>o|86`@A(@+U`8dK4azdvG#s%&Y!iM&vMk;3g7?q?)bBu_I|JJS&M#`)#IX3Io{lP3%mad zZ(!|i#4a5Q<-hb=&YJL{?EbgLS$k^A#+d;FSpPV_Hzz)KW#xYQO>9ngeoM}HcrQC{ zzq*__Kbw;))!~%yi=6U1n$v&Qv+RlwYuHLa;ot!vT=UT39KJ3Ud-C#(Ak`JIi2ML6`tkv!>e<=oceW^w`^?2;?wsZ zv-bXZeHK5u|H{clkLQd7bp9Nhn1VNT=1U*+4cReH)k$Ymi6yF zuIIF)f5iuJ;Du4F{x1HN#pkN4*>$w6Y=7h2wdFc#f4<9*>v3P_R^arny*T|i&ba-R z#g<_N%*uvnF*r>mP02Vg2UMA*>x8{|l#| z_hs>B-#srV0B5r}_UgWzHL;6XJ6l$Y_3H~q z#Gb=`CEkjw^QLpgmsdFLU>;`;bw29{tDoYmEluQ%BX6^~x8G#ee^%_+xiH7Rc|2$Q zIEgdIF1%~*IcsOmc+}ta6hPXCyc?Vj77%Eq&C5C3=ki7cO4 z_bjJB9?gkYuW{y*HCTLk@9P{dkIZ$kIZ^wh7$FYWX9@hlIy z;k%4y#;eKfy2^gaX}c(|qtyT5<^L_#4?tHb)?O?gko zbLQFSao%&7$m;W*fvlYly_Ln^c{j8E^vm@uZmpaYTZ_7!#iJYNar$LncHAc`SzM~$ zh2^oAZf4_fl@2Vgsj*$R;+oUBERGy|AnX5cw`2XRR~^opO5XEGKj^@DX3&D&U)^h1 zJDA&)lh03K<@0X?R!^%RW#h-v!(!hxTgB>YKsio1Zsx?{v=j^^dxQWv~x9d?TpJuW8s9l-;J2CG`rCpuN+R1LMS^akz%KG*8HL|~F zWRqBZT)Z1+zA%@y=NI#?fAWh*Sln9tCcD4?&13EJvL{)8Y4jwEg9nb~%qQQ>{@z9J zQQW`ec0CL6_Kmz3EdO0{5NDh!mHpLALv}sG^X`7uEczuR%*<|{0|PVB|{ z?~aeLakSP@)?Yj1-G86A*CXuuzRG)i$>ZPV^?78&&g8;bJjE-*ZC^>o3{SZ4gTibPh^gvj7p8)e&lz$y%P}6ix#*>>SWa~3 zeVp~7W-NF9a4Gw|*XnTQOj|i~-kNOv^xcE{7GvOkoUybeC-&ssmCQA+i}k6^=2#i) zp5f#MFR`)c{C`}+-vi?O|5=j5DQ&6$zl~`#(N`wTqkDv-|z0Cuc5JpMBnrx3L_1QWe%F z_kW!;XK&8wo9o%ww%|Zk{uMuBec_$&tP$9+-(Ht!FLLLmvdIAc>8 z$7`o2l)kjk#;cWJeSJ;?7Q4r6wZ9zU^nRT7`Uxin+{MXV*Kl(4r&znVZwc$0r*GoS zMebwebZg1WiZN{{tM8UoIXQJ7PTy+E8Kc^=>)gIGXN{vSTeGsVGk zOSV~~vH#3@>^wVsz{=;Lbvgc#O4lr7{iE!coS1nZtM^As_b-fbd*8%~Wz|{id%8Qj z-ou+@yWi@}8j~1s)DTWi(~gzz5zlhU=X}-=4=g#r{hF({WMkmfRXLwugWd1J0^y*Ve=&S!J2MO`@Ucmunix%F7TC{^-`!W?C71va)FT`l$w){pK_ z{Oi}4)yt)?a>n$&EWXTNz=<aU-y{un7@+!+6ZpisE z2mXV7-pu~HPtWKMq@#OnF) zUD>#>el+WU&#bg&EPgyagLA&|vE1ZYR-bndV&g&kHSB&W_F$jW_9K?_G(VdYKYnEW z@{bc(9KLX;tCg=g{eEl=zVlEPhdTdl-CTLSQJ*tre#&Xz?K$mXHD@j2I@Y`%f10(w zx(~7TeEfr~-8Fuf)2?T6*4B0!T)4h#X0V)L-ifT9`e%RbbH8g?JLvmZj@Lita<1o5 zR{xWian|N%bJh@lj(u0)VODQLs$Elvmme%*aj9lIc7LOnar(~{oHfU%IB{t*XFM+) zuidWU#P3nICvN`5uA|;XoSePVwT1C@)H$sF*B;Dy=d=YU$3Cm*#{0AQTJ>Vi`xl!% zH%V?bf{mxm9$`7o$Vb?9PhSxGZqXXnp9el3TYLP5lV{{Tt(41d*Eyf>*-vBb=JgXe zbE>;p``FMU)-DP*&W&Snq~blcyUyxM*xcaAhgki*w4Sw-b@@E;`Sf2n{pML#@8$Qt z-u~M45_Uh!8*$b|p2+da`)s`E zc2CyWgpUSvxuRJ5Ims7kdwF8*2yCFJ{G4V=v{KwU_Hz+}YzW&K&R#PVU@@ zwet=Su+O`%3(G$qdy*3;2XWR8KKsuTSRC(P;)cTZzvpr0ROMpt@~6FvH`NYc?WMsl zY)*1-H5RYyR!#r1Mp~b9Tq8E_%{`_Q3&fH=z+tu&MomfA-r8!xtVwLe)sf4Yp*-DxiKD+O0YOwZt z^M)MnyNdg8#>a{`701^SEI+%THzzOnUisyIW9@VI*I7S$Y9OclCbN3E_h!!Aq#KKC zJ!j^4zbkVnCm(x(@=98?v zPrs5=ZksscZwoeuZ&UhapVw&d5ue@iNHLCMCbD5#6 zU(UEF$GhH6to}w`!C4!t&6ykD%&zCFJ&XGf8_9_qn>}Z@mb1&PtlqB6dx7H97sJ@N zP;CMyzZ+lNzvZRb-v>Na^rQ9Ief4;sHNR&|ar)(swmeWfi?5aby>S^a0h36 z8NfcjWsjlo|7apLVvt z>#2GUXWmmP$9uo}3eLFmO^)|lrq^@UhVtHC<^dyE-1=lOizBV?VE6yP3|8(PXR+(L zaumDI51!@B7Y4Gmfb|>LIPq#HPW}DC;^~63IOBGOQO>8|*ZXh(!&$w4QJa;|(mI^` z$a{W?-)FJw9=abJ2ikUE@w)jo@8u+Zcjt^tn^-$;(ueK0ZY5_N9mv}8A&+p{t*!pEp?fcKyeDOZx3Qo7w#y zw}~^3{ll5t=e;NQy??n|^=IFu&3jSyyR#BI&wi8s^TC{PdSvXns4dJgKW=SzX59}FYm+p+3;%F-*21m%z0L`3;X-_)j9Ld-@O-RUU=6TyhejOKpk%K zx2%I)=x=hZK`*m=E!CN|iPOe$)|$FFDiSZ*dKN1nny@8ic=EaATOsBRFPSp*ZbxO#n4fp)wEf#oWPPsfzMNd96{pSBV(Wt6T*%q)Y|it7zML`n zQdWLDU(90I4!5#4^kjcl=j~>*IxIVc#oX;zuzERhH0Qb9Mt0suCU9bE-bKwjWivVT zS3w)in!_SiE{%_8G5V-goY>Wz{ZnHTtDkp!ur}7~Th>O;yOJ|@{mgmZFoH9;`iJ%9 z_b0J+=Y_kDDb#=eM~mKCiS4)GMV4b;cNl9&XS~7sWb5NOYe^e8bK_GuIoy}5k34fa zXKwx*r|&f5#J=stfXroEvVZs4ixZR2VfEd&GUxeycTS%=nbXetvGTs74ZFYDgE_g* zC7ix>GiM!rBxmk^CyRL_3hyp^NBnM9PY*tByZicS66@Rbm$R6#-82@nj(CstpXX+0 zyWM}~{Cz==mwW6g2J3roEa&v2s%#AJwSqG?9?8o6>QyYpo{%vh^}dGXMz6Ii9{<=z z&RlvpC#L?)uBY>S77NeXajg3GfnTvPd)tAW+-e_Vl6pR=4kyMm;mmbfamJ(*SdKFP zGR||lyvy!9U(aCezDc9(?;X4MIWa8n!aM$~a<>=i`=`;I=Xs~F;}WX6IXUt^#$f$r)g7GcuE&{kF5$F;E*Z1c*B7jw-Wrnq{qBD0afKM&Z91pF9>{XB zC!S^P{nBdezUzO;?sIjmZ1)al2{}dP+^2Bn;74+XVIyM>iY_uE-6+cf7(&iYDm`^DF>^RE1x6K`(f z)Kl&8;-#D|pO^BzhPAu9?_zP|y%j76T9F(*bC5kJ6yn48lQ?m>9UCVG-^#}NzT-GK zb8>vSrWV`pA4rKM( z{*Xz<`a77F$GW~OZr{EyYxmPV=cW~O>^_;cF1)RCa!0hk;X?UHJ`=-5RPV^Tiw@>@f-|nw-kNcJT3}@H(#&9-H zAD{M;octx$FILCOuf%rK3ioqme@>2d0_z7yW)5YpRlg4_hta7|w9lzVooVYiIea;J|*!`aSIg7g;|5860@2lKfXz$e=szk%J)(R*40 zH)p7OsQs1ChevYOHv6)Ev9tlFpG{@Q*XYRk`$AR@Gp}R!{rJ=IJ2Q`&!C8xVo|WIk zA2{RHYpgw=SjRJg#EVTVzAU+##rES?ShmDAt8XKP_wQa+grmh%in9C`0Y z)?TWe!C52S!s1%P!E7A3Y%^yLGKZI?J*eczty%xsI4aMHt%bB=?WockcApbluZExFCWa}$q__i$DL~ z#;*6Y4J=PyW!C4OWa`qAfSeBM!f z6mNF=i1X~EHs}7{XP=L?*1sUau7+FCrm=Gn3LUJkmy5N{i|<6LiZ*4|HQ z$?Es-i?dx^ZO-OHRY!BmH~S~<&We>!cTPKahMlML09FoPJ*QI~=x^p&M_uS|xtHav zPo8`(>l3@a!RhN~uo%4O*PLAH7?7)~0)KV&eXsYaGGK z`op~2W^CGH4qH0%)*#***ToLn!s7d%Uvw-}fVTnx)KqPkRT>`e%K1KdbV)s@l{`y*cY)FUH}z0(7QKKNoM78^gW#TgsV<+RZYvfcmra8|Zk zV;IENAkJ;UiQRW|=BO=MpE}}+9Pc*}v%fL>(6>3)mEUDeIc?>vTh+_)o=29MT`134 zC$m0Y&iYv;RxXDPU@@^-8O|6ol8uc=|1Ab&ZQ(wa zBYpcFr(B+5_jThZ#TZfREmn?qZD2XzC10~Pdfi*>dT-mx`sj;Kao(Hwm;L?7``CS+ zSayy+W-dL7jjg*L#F?X9!|G+xacs_e;3X{99ny^DB0F^F^s$Rs3_7S2tEYQ!Wij&D zSgcz+hm%8fX6@zoXL7vX)z5D>X%E#u=FFwCzxF!(U(R{ja^}Y6=DI&QUf$iySb7|1 zEIORiKhEdOam%sT{mw<%-#f3x)6b^==kjdK`s4AU_uY$=o2_7dy7Zo$ z-0(fln34Up$B|n&V|Dg7cFfrE!9vWcT$U5l59Z{CyRdp*S&xlzPvm!PU03Pz*mbYX zcI94g0IT;6r8w)yqgY&c_a9@BSo**;Rz8pX!OHFT$2sj_D`yV3g4M(Q-)4Vf-g;KA z>o;=x|L5#FzIc-pN4B!DV(;agF}&16h3k3z5q2FzBLuGbdC2r#63N=|j z|N9D7A2aH4#>QSOce(Z~HaBhCmbL4?L)dkncQGrU=VxcTvGOWTJ9&|{tD6R}@}2tu zXAaqwjY(hs#QM$rjNy5nv(v+coTW}9PR_C~XHH*_Q@*u0V|uKe)NaPc(z{P({rllA z>^eR^of9Xo;EeIjSbN$2R+hso%I9TmYc@O2JB^FS@A@(;zY}V6uIFdYdT%w(+Q0#i z6zZeo-kkQ{nw@ufDNb&7E$iQp<=w^1O((PZJ#szkS0fg(vHIF4I63ZmPVP3Dv&OO0 zyh8h~eh0h%QKz%=KW-9hck?dd-1kgQ4t6zX{ry2szq^$)X6O8=-+MUmekp60kI&*f zw|ybjUmoYIC9YuYamDlOdVYS5oxj8e&fNGT*3Tw>&*E_DFLJy!?J|!R;>CqqS-YHY z94ohN+ba)o^7c+_zeDz5?evzBvFpfhgo!I97PIkdTBX>#!|$+myW2r5XS!xj_2rD4 z$$7=?%dal__xxs?`=4_&i+2~a=d|m)Sx$CnEjHfwzn^{n=JK4JV-D*-rGAx@=lUMv zteL*eX`l1hc-wFhr=Fh9@qUwT5~sbqmgAM4Nl78d(g z-tEkDoKskSu;7&JF9#mT$us`UoXnhO0=v%(K4$%G>_QeN8ot2Jch76A+21#v{oCMM z)_#@@;l$&;7CBy?(UrBcJsqRE{^7X~W6MKQYHl z4&9yg$MYAn^PhAryN*hkqw2>!r?T<9dFHU`-!J5NYl-#QoM`8da{N0pk2!?(+be!& z^|Pr=?6^w^+X1n)L z$FcU%XGH8fBlBa=Nqe$#SiG8zZ%Z=AH}^UBPu8ASRAO=Zt=$(Fu6Ip|Z14Q^gO%8Q zFL}qBfq3yo4fgpzKFE0nb^<3}U&->Z@6X_zuN8~mfAnVKRi&d?dun(mEAL*VIr+^( z*1lW3pEVGEjg1qd*JaH^fBmNDZ&tE+`_&##7W>09oaf{9Idl8@Y_9udU(Q@N?=|MT zGqX7Db0RChAKqi_s?6Q2UANk0NwK`{VC6QqHfx71Z)g3x>_wb-cN5E}ejJEu6_$AZj51{ z|JcKv{5ao5&A;zve+B&lE00zCJ#ByEOWyO8f4qJwCqMl>$LoI`IdLW5O|_P>!!*u# zURL=lhod%f+I`+r^|?dhTu16l|GexYHY|>A!pUPk$aeW*ev{3()PDoJ-=z<*Jm|Fb ztQ~*w18Xmjtz+ZcE{(J&_ucU?&YZkA`@GKkKjV7LBgUouS(B{5?sM47EdFmhfaUd{ zq`$b%x2v-H?bwWyza7uw*NvC6_O+=FCr(UD|1vLYljFV5@hXeYlLutG-*qXWzw56j z&0zg&Vd6vby>;wdB-GHp7;F4S@T%JDaT{P zXV+14F`Ii|)t#Ns4?Vd)-_f1HKKIO9*nH`e7dhwe$IAcXZ#ehWl@nj~HJ&AY)MEK} zuj4t_y&t=ey*g&Q_)~^+e`8s{xNR5C+R3|YKK0d(Y>xllKE`+RzHVo;^HtAxPcsi~ z%~?yhk`uRL?W)NjPF!iuIc^DS=C8No#PfVtCwW?&we(%(>$bOS%gVFwacm7^(pjuO zj<|sJ&v#E}<@xs5aH=7ieZFMT<4 z(I%W2(1o>;Zw9fxH9YsIOz)k~<{DR~O(=s7nR6S%o77`^Huzo}PVUl?jpeU4;pBqjSPu8k$(;4G4cV^z zPvFFaFIkT9VPE$5Mc;FBn`t>-F29v?o;92t_D4?N`I8fqH*?lc56u5nXe<5cL;CNQA_us?j?3eGxV%PFFSUqh%Fx&kWQiWlh7_pdh{gXM@{~8-Jk6O%P+?{W6 zuK!(5yLp?{Q`f&)y^r~TGZt3&e^H6SSAW9BrfLmXtRK4L|BC%9|9^AVU8`|&mU~zX z>VGO{?)yqCM)u+SeFLXm-_6=t=`C!m8@GZpcP@QIA?IKCJLi3Z{aHIZr0g=~>0PUu zY%J@16pM*(Hf1^9A3qHdh{u#z(;o6gGVfzR1oYsGu4U5@#S zmB)4!YZk`bqf5V7*niJ%ESLIbFBWgsPvgX&BRMhs6*dREu`z3xWAcCFsn`AcvG!YW z&!g0@Ir1>h7}SW>>*e=zuID<=n&x6Q#((_`r@g$&VsN8hIpw&%xc#A%jxJo^mXC70 za_G+b%cw6|j(FV&)=v)mnqBv+4{+kjPnSx!CAxFZAIb!f4!TP!-R@#OxXK17B>f1W%s}PR+h7NsLA5{u6rL_*#5^+oVncz zte=%UsknV~N7lZtKb4cqjAA*{8;x1{ZFquH{;gPlJbeQz|0Qi$TrBlRasO5wS-%-r z>9|6DlsKQYyHaPdIMc5yr+-|}nHzNBl70Ie3TwaJe$94k zzNd2LZdGcjKhGnx-F;R#ja}ElCvoOT7qI%=sSaD)sCX6o{D)3s{rI-qIBNqfS$V9x zpOYJ%$Ku^Ni?ZEZtqU8kA77E+ar!#gl_?=j2}9S-qZoFK1l5ij5P49%l79Yh<>| zWn($X&QsX9@co0F9O)5uJ#A;Q@%7l{ocv=3XWU-T>i63?YcJojI6Wa2X9w(hVj+GU zdOznmUR_SR%lVSy^kV&Ek9nMSc`GM}UBbEkhgdwlZW-r!{2F$j+pT2%dF`j{dXIXA z_1m+zu>RR>11A^XsdlmdZRW&*Dx6$y6Fbk0lUe*6@-b&TYR~Fr-D=j3Ub%|J|J|R< z{+<&}Vb@W0F8jQN&vDkir?K{Z;m4eQKarL18QVDbaW|(QA9PaT{0r`4bDpk^IeAd_ zS5Hr0!Tz0+@=E)e&DM0jd6Ko$eO7bg{R&pz2mQ##rHQ#;akXZ}I)(hC%+H*)%6go& z#64FQ`uo!J*|>Jl54OuU4!D|KZ^?IAeo=2K8~=N+V!7^tFLLsRw^{%G>?=-uU&H=> zMA?%I*LTE!_0!{IPCHNeq#yKQQgUd^)+E3yN@B=VspL~oV@TX)}Lp;$=dOrH8^XhU$J@{R+iOogWqzz_FjS$C%3Ox z=x@!p6tB0`-t4-2zQ@T+k6_nzQ0hZJ{Pi>zCvHyvPMkcClTS{{@xG&V8Ea>Ik7S>F z@F-Rv-(17V@8+=f@WsV!Tzd13;_>Cr<%}=CvVOJoWEMZKu2jDmFZPSAS=DFP{rOh$ z*|++u zuVWd`xX_F<=PSj=yEPZF{Tlp|e9e7~=H#CnSo?i(5v#u|USjq4=SQ))znI0NyLLLw z^?Ua72q!;0jOBZ`Je2L$G}>|Ug!|ZW2j9Z_LG3ZDo!_~P9e3nl7KgXrwP7J1J$)`` zt>HjUdpo+gf7_GU{@?B%n`fNO883d4ucm%3;>_jOapu%RIOED9HXb}Uh2@`1rgHMZ zm)YlBIGl6dEu8WGlI*YD>~p&IEl)a!laJNmtO+#b%on<|@nu^>mVb=6i_<=me;Z$? zzRu43$myKV+xZOTli%d#jDwBXb**Z~StAF+MG4_&Fp;5Yq9cd z_&tkHn|J5LsW|URZqEF|8u(Y7eDDR%^?%FS{n_`h`aWeV``iOBV{xPN-x~2j{^s64 zZs>2y_PCOb3S;E*YMk||-8eb*j;yb}v==+)@gEfDbQ{WZp3~0HoKGrWk)8Xa2`u;c z{wOx~4ZVglhi_Uue(U+1_3mDr*xZPXb#=zDw!iqK9Ix&cvU@r7c+MF5E{hHC9mW|8 zeq(L&wMy(fU+&RZO!Ym7U0Iu$U5k@L|78v>X07kd&UecKV6k@AIjm0|_X5jNEx4Z?nm3{--=W22ga`ZGPZ_My9(#;<2h?H zhj3!aQcf(Z#m3&3e`2v?N-K8WnI+CFl>g3sS*)K^mW_!QT+jA9zX~UJxsAoP=T2bd zR{9annAWDaeV@13Sn|syoLu_{&YX56r@f_pX06~p7SmQ&Vf8tD2`8sKGwt_|@BV(9 zo&WPISgiT%M@|f$$o{Ri$61B)?(i@x=bndga>nOa`K)QenNt;jjaDH?8IsB+c^F1R(77s6`B`f^nL$h=XF! zby@$qrcS$Jd#=RptM*Hr_Pb4ex&Jw*oKq;DCSS4mcx=u3ev#GxWj$GYeQ1yK zl(+8(pUugsJ8|abEm=-C{|?TaG;2<2r!TV4-Su>KAJhL}xyLIfbK-O34$kL2t6Hp{ zMvvso1&=81Kjh8WZ^Nd)7(1Wd;e6%g{iGZ(Cq4c&PQP!>a-uVObJp@MVEwM|ICk8I zta*t~_dUyUgy%Z4_BQo<)^5hO;f%#?Iu_bXzuZsOb}r_`rJOJ2FrO2bvu2j|ShAD* zHNFgF@#&D3EMDA|^3o6PzLhhs)XR2j220p@aYS+?2 z&hy4btX}G07VA&lIqe}iOX}ky7UwG*#K}djW^wF~t>T;U?$4Vzxy&1hhu&A3%EseA zX0Y67`Xekpw7G$^hP;e3C(9aY)*3c&;`-_AJXQb9cE3k*WVZXh>^ja`S_RI(b6NXa zRECpF4`OqL<9A~9wY4!P*Dk?nKUFxn+7{zO>R|`YIFs=s`OL4y@+`N6#iP5w=WM^H zxV`LGoHd@2obzwsw7WsE=kTv`<|3Uq&-Yew)&!1={r@mev;MrgFy8)BqtiodZZPjd z`9sFhd)Zp@`-|B1m5GyoOknr%#4RkI&lwP#V_(LZ6ErGr-}~I`Zw+6T+Hb|(>d>Z<(ZSudtf2EzN_<`OB{G; zHS3>$9>vOg;p3s-7dM)SvN3*ywxOCS-eEeqw`!gO54&{w!yW;)mFp^;c{>y}j@pS9{r~d*S#m^4we8ZdHrZeojt%F{f(B z%Ar%9!;0T$4C0LM-B}#Dcp_)q@5BCmZ7~~{+xN_N|KG)1oP4rZ?6-;6v-x-`a(4X{>$35)#yU>d-YlTyMB50_no3+SwGtI8@9&q`zf4!Vz-`!crv*KC!af# zUGJ=}EY6r38!9%u=!_~{;VI3Si<7R4%sfw41JfgCefG0u^azk_qjta&bVFq zLe_42vv$9%6|2W_=X3Iyp`85TY*xOfKgP)`a((*$6K}-chiSlBGy0bG!>&hg>Zw#O z+dZ?~gEOvFWBug%UzC^n-*P6W{t~~E7xZD{$Kf}#_Sb40XM8%JwfCEzWNUYek7W5u z+fAJN+<~3vx3ay9{r~5*Kkt7Y!Tued_Nv{V(SUtU#b>i!9$%lG|D5zk{jE-uZ1+Cp z)!BbwpC6lY=A|uJJb(EdPTr9BOkPl+Rqn0$MjwB(t!ds}G1d$n!g7#nUt?`|_j}nj zpSy&OiDy5@iG|Z+>x^%+w(-ws*7hs?nB#p9dN5}Wy;q+?8|~GZQwJw=a@=EC>~GsO z+kJnlG-vD`##xj2*1J7&uCHdYSpLqZtj}KdBCF&6n>b~+nT=_^HgfKD@4kgT-TPy9 zi!YqPa@&1AVs*c!2kSe{KV&iOr!kxu`X(o5Tg=YC=1I=nN8$6UkO-Z_7IH!ACXJNMJal*@WfZdaf6 z;VuhUdERp=XPxw3&K!F(>qBeDb8^z076=zR>dh9B(b4AtyKZkyE~{ zSzFw12lp!{dGrESe^2hoVr2bZoH{E6U$|L$H`58i}kVWZ~L5`FA)R${|h;v+n-UM6PxpSSvNh1GbZ=U z{^n#gIk{Iiw%^64uvl|st~cw_jXAkh_D>GcnlmQke5wBqoE#^gm$9-7Cs)6e-AA?F zto~2CoRd@bXZ>u!)tu|Sp2g4=*Kw|6G$%F;oX>2apFXgX(7M;P$|Kzhd&uN-*j%&=W z>%3N+wS#)a&vwbxa@ zr+@iQ&Sk70ZTpVpYW1(o{^~XH!(6f45Kbr<5m$Pzw@pcyHS|7@pqqk+} ze{e(I4K=nO#Tiq^v$;g4omo3RyM5jjwU+x?>chHoHP$XaeuXn<|HJe-@q9UFuC{^o z&rxr1a_QySE(hPpc`lK6T{Dh+&xv~vusOqizp-4P(WLC}d1*nt=%a>=l`wc&P z*H}NfbQe}W{Wj*^WGT%KoVD~B?Cwe(jn1NiIEx)nETz zbG#h!D$aBDvYfSq?woOYFZTC6Td;OGaBtS%kFLjAL#e>}=YX25{;xZL-B-6toSgJf zPJNbP{o~7{IqkRv=e?;v)t`2}?-uWNXD;wG`@A;qa^mr&oZS2gPOf(fJKyM0Y@DoJ zhOJq?K8UlnvJ+>&Zk$}T6dQ+*Y0Al|OLE%hNv!;y-zL8Jya5NZ`&;)n8-MmK#~E+_ zN&NAizz(cG-t#YO|IL2)?!5N4*LKdAIrkTw{YrD<;oIywAKsOf_lqkzbD=%h{oMW( zC&$~HwaY~haQ>~x>f^;bSUbBl@lE}mGlb18${xVUK`&u(v_rOQ$89^Z>z#Zci}NQo zW9@T86;7P5U3A4mIPJeWryW$|>T)*R$)} zr8*n`n=I$773F-^61valw2P{&zVDsNK4(m>Pds>fBx|?-%k`&!U7r2Dlb`!H=luEt zPQJAtXN~eqPQTCg#Irh_IFjw!`JRVxa^DJ^IawKYA3v36{d)NCzN?Y7jIykp-`dQ{ z6VqN2$KK@RF=-##N%Pk@*O~UAe(!&d)9-%c#Ipq~E=~G@#raxu*yk+&n*DqFBv$?v zH*t=;kyGC9u={Cs8K<4CVfR(KJB#BRUSs3i?dNgwq1BvxqDgW4pKDpWZ(oZuPQJy- z7aFng>YH3&`cqq$mp@b4{TSDd%=yIQ(|Z1Qf1Qi_?>dQ%%Ue5f#?2>LyS}qMr@Yp% zIm`iP#@!DN!?GE1mORDshVQOm`@i-$8+V_Z z!tVdVX)NFPb{324jmEKd)nhJau6;G@2Sb)}`e!FLXJ7OdXP!})lZSu7;>GZ4oO#)w zEI-+GKUTgwlpEms%^P-ST-jyJwvA+MTtR zDf?eh7!MZ4;>B?tSv@V-EBjlsy_NNkH!HLIdi7@3E_OeG<-v1rWc_c`SuBtH{#wrX z+k?|?u3_=E-nFs(esFRBgKy`=h3ubvehzELU*5-Q*UxhDh9@}fWi=0`Xs=#uSJI4R#Lt@`+y_fAb@kCYzzt7>cfo7c8Fpt&gSshrLs5hSz>j$v5 z&}|{7>_%|beV^pSnkj7Vz2tdTHa|a_{gwHvY>a>Q1-8!k*ZVo%eZ0ZRA%A3Tw(SS3 z91h=ApVy{WZsx?Ca-6Y$3memF@6YC_qyA#&pH+pk-oDcyZPst@)QEi#a$i=L=O4?N z6ISQcWgX7vpUB3>Z98zr(33c^e7Wn%+^jCEvu0PZ*tLHfPA+o>2^vVPamky`J6X7In6kB|FhrV)YG@D{NBBu6Eojrv3X=o_BkUS zWqqgQA)H)zA&U`z?9KY}glAby8L%DuymhNM&mXq<{;l&ZeVbFBAFv#5!$-ya+q}$a zKcBODs`M0RPW4SJhkh{Iz5DV5Cl{Q^$>DzCpM-FWV`3*`*U)PlR0Z12eI>ico=7HS)KLCHI+HfClBSs@Lf24@9^wzPPf(f zq4k6Jj$(a&w@*1^Of62%@Fwd|x7221)2T~YteSliXYJup&YYo6(QEHz^|X6k){maN zoilehmG#2~h3{)yV`{)+`e7H^p7v0W^Zd0BE0-TSaN2#G_0Ov~bJKpDTRbjpF2Lome|xHI1Eb+!EG4Dm=#dysFm}+W#SsvwktL8;dy;o-A&EbR;J? zU&dMUn#`$}1)N-K4(l(y9%Nyt!2;IK-_Q5Y{eAZHoLql2n_KO@isi0rOz-n(|CUB5B(kiYz%LB`SsoHdwru^jno&f3GHoc8k=r+RBu5DSlZ`Y8srgS1Z?t=d8JTLFh`pZ+3vcK=gZS(sNiQB6= z&xJR!{{7UytQ`J$o!#&LwXQGZj2oA;_WRK#?0(m-WaU<8I;WhMapLPd){ZZFn#G-0 zo@f2@k%h76zH2#g=s|YA`kPr?IP5+)#((|`yPgu)vi4bGk0FltJ;cteUrs!XGfuW( z?P^k8R_`lLW94~9v)J>Y<2iG{cAPQy05(Uxp(o4Xs+Q*Degin=`=j6UNc$bk=?D3} zkKF$aoN;g^XANRF=lT6pMX$VxlS9oc?*D$Axzjx?j*a_o`?OnGJb8VX?XK&J+MKyU zJ}>3Ibxxsw+;tLyX?No9m@WG$}Tq+`e*l_9&mlWvv(xt*}`)yeqB|cv-W=*CmvqK z#)T5&*?tdR$H{4DaMliQV*P!)$7A1t7|qVxJLl7`M~!9epyw-Gn0v7H_|Ti|-(BwH zg2#zF)-7ciqtJZ>`};c0C$&3b`%LE4^E<3Pb(qNcx5Uswd}%eFGlw~bRrtKKe$sTWcH7$@3SnzmI)}(=Uc_@{F%pd;YNl%U>7lf3yB!E%tQI zyrflZPF07+!xKhu@`w7Ye;)A+Cl74HS?k;IpD*Xcr_VU!!DXyp)opc)`|&xKuyL%- zl`NhP?8o}wr4O-wJftrxw_Dz2Lu%WvVV&78){vG>EAdD-o(JxpJe<2~d1Fx!2XYd)*@KMxa+^DK2j z_V=De;(6wKm#}f{wdtI8G>Mh>PixqCeAX-3e(7G@?_s=29Q=jV*Ue{h#=8SY73Np( z)X8{cUe=kjR-ND5(m#Hl!TxQR-{Z3X;MJ`E9{(Mup8sL>@apHRyl0$vYa!qGGS1p+ zAJ+coZeiohggaTgxq5r&7Z=~3$JR6}S7O)M<7t-Pv^a|OgZq}TIM}E$`@Aw6SiS7n zlQTakF}fJfN3eGP?tYwk!Z`NtqC+_I(Fr-;cylBtu1@5{t>cQv4~>;e>3YTe51GX3 zXHH|5Kh4c}p8T~nXN_tu8*f{m&&g+=VR7%Dp6ot`PvMMm?&oVmqtPL6j8i+w-b%=&P}zS%A(9m!db z>(1K9J8{-;&gJAfx3aPJz$TnI*O=^Yo%$5caksO!bkQ-K7&DHI1@Bg6W%~17*rxc2>=nEZ6H&QE-}c>GCoSy}G%1?OGSNu2ej^0(RF*Tu%b^*x{iJBngcnp`E^!ahaAmW(|C!s?>;AGf9vJXvwpkewAgnlo-7`}M+;8*KgP+y z&dc$hlg?rNWPA_S4(ra~wAV{nJ zuB`uVzn0Uk`?32OmGVn@3}Rzssg$?&yw@=H_mN+-e)#5S_A$S0VR7s3@oX-B;V(H} z`@N47@BU_S>C3q+XP#W@u0ntP`>`A^;O@q0_lsG%+_5(&*L)_&%S|hDa`gNrUUIJ* zobxW{x}Q#(#S{UpbGUek+{)BVEQ!5P=E_W9mE*7%Y; z-JavE@tw}ftJgzpZRn`_tQ>oN#`?jt$FlzN+&*^~`%?{8&(lug#NVpyI-Y3H%5Ono zjnTV!Lt^hYRkJ-g)*@DJ)v9yaZ^`k6_EInBSMR4ZVmaDAjk8^UXv+HWXB{~G{VdMs zT*R*P(N>)2BfZ)6{c{ngeRhwB%YQ*{t8Ly`1%@ZqKpjInDDN!}Ywnnv)yc z$#SFS^Js9S!4a3On=3Gaf3n}k;MP zYdyj4@9H>l@fB9TqwZkscIrmfZYO2C`+fFT&KggiAtX27X>uW+ZJW&6|FM?#S50jkfF)6gB2tv16e%h~kqnv1TnI&}Bqd5EO(aPXA+r>sqzrGQ zGBj#1Yd}<_k|{$};=TUo_|)%u_CDwAz1F?%b+5J0^YknyPLIuT^YuiQFAqDP{rhvC z%Nbw2uV(FdP~jPZeA$EL=}vFv^=kGZEME^O{7puG1MM+ZA55Ib|2MBKT>GV%4=9ZUsRdp{ZD>m z@!z>N%R}G%$!hV&jaa@Px3^~q*<0()g_@Pc{SL3Q`JvLyoOydaiBRP&c**so-s{E2af!TMyw4jJt4p8e)C*6t z@mV#`ZRMRcli56ZT;ebDKp#rg0O z&OCDjtK$y5oD&}>v2k-=8&1Bvn9V0wUd8(F;4Z8loz%W~{PJ5lb!`{Un(tl~FC}hf z{oHgM>(@PQWB2pf8=O7G^ry8^t@$k8%MQ=$ea>=D-ph0E)Fm5Oo$+kqA@$@I_P+fd zV)6HEsV9r`^;4WWX%9|59LuR&tFw9Lp!ApcIO8aGolEkJQ9W_)#jM?Dj$`du;#SVy z#U{@6pT_dQ<}%_}d|Y=S+tWF#5T?`C%fv&o?e+_3!I5SbnK?HJd-qT*!%wF05{yx0KCW|Lf1L_lXU$ zU)jEk<>P%fbLRE@O;&kzbg8Eb@ic2JYxlGFVXtqL??H%%Pit`YM)N(1%-4sraaVCM z%g2W`W%YiG4V-mH3r^j*m0kZ&SFmi} z!$ItG{(P9V?~o(^^D}I{_iN#MD4sdJ%o!*7UWs~RcBwIi@pRp9KHqxao0hD-RxV(9 z@T5CAdH*5SE^S_7^T-$7*q+0LpE>c^jOF8shdf>Ir@P1go=FEzp7~5XIDf+K ze%|<*;_KVbX7{u3Wj6k2L0?|?xf1kXb-9F8sJV>x*f-v$e*(x3d~!$1*H5FL{8)aGQUv!IDd#;jDe~ce~}tCtqX# z{+s8Ba`tI+IdkkP_I|%CVKwFROISOM_>MEjE?{$Rh2L2X&}9ajs~+Fs*+R`Ub25vq zntQQ-OO4~?`hz&v{}5*kAHjJZH6+L7uoF0QbT7{Jp2JylUCYL5zsotf_+m~C(S^0| zcTIBKp296TE=IRm^Lqc!9%lXVbDBhENzz;gY%Ic%&hdXTd=d$;)d`LD6KS}~c$X^XGf=k_1VSp%1Pz7WqF z@8z_^VeI|pk6>f|=2o0F_FbGYJCt4TFQeF;H)k5>dC3E;Jx_wan_Viu#}j*^TA!-S>P^`}n=n(wsH*5iEa>+@4+Me&?|9HE^r+G?qIiH`+-tYRiS$i!mIjPVd8z1591s~4( z>H0yOwf`Ax9DUk@-d$0aQ~PY? zwEu7RAdRO|WnU`P1PxcRICy<&7)raGs+S{@)Mn*NA=mvDw#`ABLUGiML6d ze0Kqx#<$CJ|BREX*jnbfJZEs;?cG>yGH6)w_?&($o({h)_P6gwu=%H3A9fvspNc&n z?aK1O2d}VsdtIJ$B%bGRYL?4b{;If?^SODBlbYt6*zc#G9jn=YV|ugrZM20m-rKVIu}7&X zh4x%?G$$XHc!@Xo#(N*TX!8B&yRe_ety?woS!de?bD<=%c~_;bKyN9~vd@`bi{<%` zeq!^?>I$*Hv#^!5=L;n{?Na9D!u)^u@^OVd%Lo5)T$r{Q!Hy5D;JESnOGQrpXv}Hv zMx5*K!C9Le%Rcwm;l=YmY{K&2Z%?xJZg~XDS36GP?0p=}>W*_~vi6u#g|ip3n6pOP zjpf0*%UIrC|L@qs`?p@j-uIQCSbYEU9jBkyu=aT8dlnbhea-r1*Pqz@RdEGpPw|i9 z@w1k3*5;*OalXGtaX#m{_&)6VYHfPjaewEi37e1Vy~SBGU&;1Z9(atcE55yx<>{)A zuyJzDE36KAauU0*`d_d-(fI>TJ8WXl26q3J<*}O8UM+mysXyd=e}}y_ne7(?rElaWa_?bzpUph2q zuiteACvUc7`J>VPZxr(J!pqtEpjr<$zIJWJsf*UI`gNakIqR)D)3k^0A?1AQjnCr-vb#OWB$d~_pg z|K?M2zV8EE&8a)5vvz(e?P+{}w}ACet>&Ed#uCo=FOT760#AAnqqQdOrI?}gtM0WZ_Ey9#P)B-{+Q#6 zx06|n?Yov;!glAewj7@^l-RwD&3%`And5$M6Y2C&zZ&A`rlbB$8}lF8MAZP{r~z8+l#0Z zCk9H-EaZfedA-;;wLE9e$e1-&+8@Bi;@oMRTC*N!Kkf~-Px$vSoES_FOO88>v(G-4 zt>Is7$5}frW?WpgLy6X`?G03IcB?gY_1rc z| znX|9igcEBIvzqX}EAx8457m#2@!RfVvAd=N%c-lLVV`rR99O>lENHdYrd=hU>8yPV7!KRc?KIfYw_F}bcnch~tX(tqehV&P*FE}%9QXTtr?DDs)$ekfJpDG9lSlV(Tn#!r|39(3w4p9%?bMUg|3`6Zj2qb6 z%8yq~S@-aT$sA--1L#^U&}mYn{$DxQARCvDjI zT~1+Z#v5;A{d89?cK-)H#@exIX*Rwuoxo3hvz)N=9|sSIL~K#vAO-%a&rs$ z{;l)bIC$eM&U3w*Y&`sY2fMGX+aA$>zAN|?s}(-`hEw~^W1n~ZGEP3)%KGcuPgxu` zJ8E7bpCA1Z%ZIIc#`5Dl_BmCaWAo{n$(;6@!`ZuifV0+J&B^b*IJNIq&f54q7Dqqs zKHvQ3|GlZs=Ib%lSiGLT4`)r)GRLiv%5m~fZ%+O%nd6?14`-jd^!ta6Uw>z2G-rNX z#IASrn4E9V=Y`mJBVS^9rQKk5e{avvarwJHTf;o@4`*+>J8P#04tdZ0`hNnhVDtV- zr?5P+_bHs`jxA&J{UK}|ufLX4qwdJ5Rc>YR*Xi5Qh4{W|0B5cFF00|syOZ_*qxZzt zo+CN)-c>BFUl>t5zHbvw?Vs0YEnAh1v#Wb@=C!R474COgd(OP`D~p%j9a*?sx|qf5 z2_0B`-Z_!8ht!TUuiwMsq{Wq-{N0t4|5~x@Irl*J^Jy2eJowY92MhJU_}qWKw>5!N zySCx1VejPB+&8kgzo-Xm_mc;*cIwob_2bcZvFogK28)v~?#prcq&}+~mOjdA#5*gq zxZ5y>Gw!xLP^d9Gr+u@hyo9qByPL(sQLk|F?*p8gcQl)~nhh(uR)0?3?_E6qp^hxi z9g*vIKbsHdjO(;tuA>YmU-V#WhZBDoRmfk}Z_n%Pc`xLwi63I`^XUZ6{4}1$!+9e( zYmV1gn6K%^$+z=4GCkk7`S z#O93$CbN9|+u58w+~J((sx8?#IIaWd8BH4&$B!Jx_Rfy\#K<;-VS=6ruw{+E%3 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