From 6ad5c0bac0841ff649c64446472be11b86be641a Mon Sep 17 00:00:00 2001 From: wlandau Date: Wed, 29 May 2024 16:27:18 -0400 Subject: [PATCH] brm_recenter_nuisance() --- NAMESPACE | 1 + R/brm_recenter_nuisance.R | 80 +++++++++++++++++ R/utils_archetype.R | 19 ++-- man/brm_prior_archetype.Rd | 12 +-- man/brm_prior_label.Rd | 7 +- man/brm_recenter_nuisance.Rd | 74 ++++++++++++++++ tests/testthat/test-brm_recenter_nuisance.R | 37 ++++++++ vignettes/archetypes.Rmd | 82 +++++++++--------- vignettes/archetypes.Rmd.upstream | 2 +- .../archetype_compare_data-1.png | Bin 16253 -> 16304 bytes 10 files changed, 251 insertions(+), 63 deletions(-) create mode 100644 R/brm_recenter_nuisance.R create mode 100644 man/brm_recenter_nuisance.Rd create mode 100644 tests/testthat/test-brm_recenter_nuisance.R diff --git a/NAMESPACE b/NAMESPACE index 0fbe7ffb..956d1a9e 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -37,6 +37,7 @@ export(brm_plot_draws) export(brm_prior_archetype) export(brm_prior_label) export(brm_prior_simple) +export(brm_recenter_nuisance) export(brm_simulate) export(brm_simulate_categorical) export(brm_simulate_continuous) diff --git a/R/brm_recenter_nuisance.R b/R/brm_recenter_nuisance.R new file mode 100644 index 00000000..f223687f --- /dev/null +++ b/R/brm_recenter_nuisance.R @@ -0,0 +1,80 @@ +#' @title Recenter nuisance variables +#' @export +#' @family archetype utilities +#' @description Change the center of a nuisance variable of an +#' informative prior archetype. +#' @details By "centering vector y at scalar x", we mean taking +#' the difference `z = y - x`. If `x` is the mean, then `mean(z)` is +#' 0. Informative prior archetypes center nuisance variables +#' at their means so the parameters can be interpreted correctly +#' for setting informative priors. This is appropriate most of the time, +#' but sometimes it is better to center a column at a pre-specified +#' scientifically meaningful fixed number. If you want a nuisance column +#' to be centered at a fixed value other than its mean, +#' use [brm_recenter_nuisance()] to shift the center. This function +#' can handle any nuisance variable +#' @return An informative prior archetype data frame with one of the +#' variables re-centered. +#' @param data An informative prior archetype data frame output from +#' [brm_archetype_cells()] or similar. +#' @param nuisance Character of length 1, name of the nuisance column +#' in the data to shift the center. +#' @param center Numeric of length 1, value of the center to shift +#' the column in `nuisance`. The affected column in the returned +#' archetype data frame will look as if it were centered by this +#' value to begin with. +#' @examples +#' set.seed(0L) +#' data <- brm_simulate_outline( +#' n_group = 2, +#' n_patient = 100, +#' n_time = 4, +#' rate_dropout = 0, +#' rate_lapse = 0 +#' ) |> +#' dplyr::mutate(response = rnorm(n = dplyr::n())) |> +#' brm_data_change() |> +#' brm_simulate_continuous(names = c("biomarker1", "biomarker2")) |> +#' brm_simulate_categorical( +#' names = c("status1", "status2"), +#' levels = c("present", "absent") +#' ) +#' archetype <- brm_archetype_cells(data) +#' mean(archetype$nuisance_biomarker1) # after original centering +#' center <- mean(data$biomarker1) +#' center # original center, before the centering from brm_archetype_cells() +#' attr(archetype$nuisance_biomarker1, "brm_center") # original center +#' max(abs((data$biomarker1 - center) - archetype$nuisance_biomarker1)) +#' # Re-center nuisance_biomarker1 at 0.75. +#' archetype <- brm_recenter_nuisance( +#' data = archetype, +#' nuisance = "nuisance_biomarker1", +#' center = 0.75 +#' ) +#' attr(archetype$nuisance_biomarker1, "brm_center") # new center +#' mean(archetype$nuisance_biomarker1) # no longer equal to the center +#' # nuisance_biomarker1 is now as though we centered it at 0.75. +#' max(abs((data$biomarker1 - 0.75) - archetype$nuisance_biomarker1)) +brm_recenter_nuisance <- function(data, nuisance, center) { + brm_data_validate(data = data) + assert( + inherits(data, "brms_mmrm_archetype"), + message = "data must be a brms.mmrm informative prior archetype" + ) + assert_chr(nuisance, "nuisance must be a character string") + assert( + nuisance %in% attr(data, "brm_archetype_nuisance"), + message = c( + "nuisance must be the name of a nuisance column in the archetype data" + ) + ) + assert_num(center, "center must be a valid non-missing numeric scalar") + original <- attr(data[[nuisance]], "brm_center") + assert_num( + original, + paste("original center of", nuisance, "could not be found") + ) + data[[nuisance]] <- data[[nuisance]] + original - center + attr(data[[nuisance]], "brm_center") <- center + data +} diff --git a/R/utils_archetype.R b/R/utils_archetype.R index 775b5b12..4809e3cd 100644 --- a/R/utils_archetype.R +++ b/R/utils_archetype.R @@ -49,7 +49,7 @@ archetype_nuisance <- function( nuisance = out ) } - out + nuisance_center(out) } nuisance_covariates <- function(data) { @@ -62,16 +62,11 @@ nuisance_covariates <- function(data) { colnames(categorical) <- paste0(colnames(categorical), "_") out <- dplyr::bind_cols(out, model.matrix(~ 0 + ., categorical)) } - for (name in colnames(out)) { - out[[name]] <- out[[name]] - mean(out[[name]]) - } out } nuisance_baseline <- function(data) { - baseline <- attr(data, "brm_baseline") - data[[baseline]] <- data[[baseline]] - mean(data[[baseline]]) - data[, baseline, drop = FALSE] + data[, attr(data, "brm_baseline"), drop = FALSE] } nuisance_baseline_subgroup <- function(data) { @@ -98,7 +93,6 @@ nuisance_baseline_time <- function(data) { nuisance_baseline_terms <- function(data, baseline, formula) { matrix <- model.matrix(object = formula, data = data) - matrix <- sweep(matrix, MARGIN = 2L, STATS = colMeans(matrix), FUN = "-") tibble::as_tibble(as.data.frame(matrix)) } @@ -136,3 +130,12 @@ drop_zero_columns <- function(x) { sums <- colSums(abs(x)) x[, sums > .Machine$double.eps, drop = FALSE] } + +nuisance_center <- function(data) { + for (name in colnames(data)) { + mean <- mean(data[[name]]) + attr(data[[name]], "brm_center") <- mean + data[[name]] <- data[[name]] - mean + } + data +} diff --git a/man/brm_prior_archetype.Rd b/man/brm_prior_archetype.Rd index 340f217c..5df36248 100644 --- a/man/brm_prior_archetype.Rd +++ b/man/brm_prior_archetype.Rd @@ -61,18 +61,14 @@ data <- brm_simulate_outline( ) archetype <- brm_archetype_successive_cells(data) dplyr::distinct(data, group, time) -label <- brm_prior_label( - code = "normal(1, 1)", - group = "group_1", - time = "time_1" -) |> +prior <- NULL |> + brm_prior_label("normal(1, 1)", group = "group_1", time = "time_1") |> brm_prior_label("normal(1, 2)", group = "group_1", time = "time_2") |> brm_prior_label("normal(1, 3)", group = "group_1", time = "time_3") |> brm_prior_label("normal(2, 1)", group = "group_2", time = "time_1") |> brm_prior_label("normal(2, 2)", group = "group_2", time = "time_2") |> - brm_prior_label("normal(2, 3)", group = "group_2", time = "time_3") -label -prior <- brm_prior_archetype(label = label, archetype = archetype) + brm_prior_label("normal(2, 3)", group = "group_2", time = "time_3") |> + brm_prior_archetype(archetype = archetype) prior class(prior) } diff --git a/man/brm_prior_label.Rd b/man/brm_prior_label.Rd index ddde3552..7f711970 100644 --- a/man/brm_prior_label.Rd +++ b/man/brm_prior_label.Rd @@ -80,11 +80,8 @@ data <- brm_simulate_outline( ) archetype <- brm_archetype_successive_cells(data) dplyr::distinct(data, group, time) -label <- brm_prior_label( - code = "normal(1, 1)", - group = "group_1", - time = "time_1" -) |> +label <- NULL |> + brm_prior_label("normal(1, 1)", group = "group_1", time = "time_1") |> brm_prior_label("normal(1, 2)", group = "group_1", time = "time_2") |> brm_prior_label("normal(1, 3)", group = "group_1", time = "time_3") |> brm_prior_label("normal(2, 1)", group = "group_2", time = "time_1") |> diff --git a/man/brm_recenter_nuisance.Rd b/man/brm_recenter_nuisance.Rd new file mode 100644 index 00000000..c7f87429 --- /dev/null +++ b/man/brm_recenter_nuisance.Rd @@ -0,0 +1,74 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/brm_recenter_nuisance.R +\name{brm_recenter_nuisance} +\alias{brm_recenter_nuisance} +\title{Recenter nuisance variables} +\usage{ +brm_recenter_nuisance(data, nuisance, center) +} +\arguments{ +\item{data}{An informative prior archetype data frame output from +\code{\link[=brm_archetype_cells]{brm_archetype_cells()}} or similar.} + +\item{nuisance}{Character of length 1, name of the nuisance column +in the data to shift the center.} + +\item{center}{Numeric of length 1, value of the center to shift +the column in \code{nuisance}. The affected column in the returned +archetype data frame will look as if it were centered by this +value to begin with.} +} +\value{ +An informative prior archetype data frame with one of the +variables re-centered. +} +\description{ +Change the center of a nuisance variable of an +informative prior archetype. +} +\details{ +By "centering vector y at scalar x", we mean taking +the difference \code{z = y - x}. If \code{x} is the mean, then \code{mean(z)} is +0. Informative prior archetypes center nuisance variables +at their means so the parameters can be interpreted correctly +for setting informative priors. This is appropriate most of the time, +but sometimes it is better to center a column at a pre-specified +scientifically meaningful fixed number. If you want a nuisance column +to be centered at a fixed value other than its mean, +use \code{\link[=brm_recenter_nuisance]{brm_recenter_nuisance()}} to shift the center. This function +can handle any nuisance variable +} +\examples{ +set.seed(0L) +data <- brm_simulate_outline( + n_group = 2, + n_patient = 100, + n_time = 4, + rate_dropout = 0, + rate_lapse = 0 +) |> + dplyr::mutate(response = rnorm(n = dplyr::n())) |> + brm_data_change() |> + brm_simulate_continuous(names = c("biomarker1", "biomarker2")) |> + brm_simulate_categorical( + names = c("status1", "status2"), + levels = c("present", "absent") + ) +archetype <- brm_archetype_cells(data) +mean(archetype$nuisance_biomarker1) # after original centering +center <- mean(data$biomarker1) +center # original center, before the centering from brm_archetype_cells() +attr(archetype$nuisance_biomarker1, "brm_center") # original center +max(abs((data$biomarker1 - center) - archetype$nuisance_biomarker1)) +# Re-center nuisance_biomarker1 at 0.75. +archetype <- brm_recenter_nuisance( + data = archetype, + nuisance = "nuisance_biomarker1", + center = 0.75 +) +attr(archetype$nuisance_biomarker1, "brm_center") # new center +mean(archetype$nuisance_biomarker1) # no longer equal to the center +# nuisance_biomarker1 is now as though we centered it at 0.75. +max(abs((data$biomarker1 - 0.75) - archetype$nuisance_biomarker1)) +} +\concept{archetype utilities} diff --git a/tests/testthat/test-brm_recenter_nuisance.R b/tests/testthat/test-brm_recenter_nuisance.R new file mode 100644 index 00000000..21a8094b --- /dev/null +++ b/tests/testthat/test-brm_recenter_nuisance.R @@ -0,0 +1,37 @@ +test_that("multiplication works", { + set.seed(0L) + data <- brm_simulate_outline( + n_group = 2, + n_patient = 100, + n_time = 4, + rate_dropout = 0, + rate_lapse = 0 + ) |> + dplyr::mutate(response = rnorm(n = dplyr::n())) |> + brm_data_change() |> + brm_simulate_continuous(names = c("biomarker1", "biomarker2")) |> + brm_simulate_categorical( + names = c("status1", "status2"), + levels = c("present", "absent") + ) + archetype <- brm_archetype_cells(data) + expect_equal(mean(archetype$nuisance_biomarker1), 0) + expect_equal( + mean(data$biomarker1), + attr(archetype$nuisance_biomarker1, "brm_center") + ) + expect_equal( + max(abs((data$biomarker1 - center) - archetype$nuisance_biomarker1)), + 0 + ) + archetype <- brm_recenter_nuisance( + data = archetype, + nuisance = "nuisance_biomarker1", + center = 0.75 + ) + expect_equal(attr(archetype$nuisance_biomarker1, "brm_center"), 0.75) + expect_equal( + max(abs((data$biomarker1 - 0.75) - archetype$nuisance_biomarker1)), + 0 + ) +}) diff --git a/vignettes/archetypes.Rmd b/vignettes/archetypes.Rmd index 7cf0f529..b44b1afd 100644 --- a/vignettes/archetypes.Rmd +++ b/vignettes/archetypes.Rmd @@ -100,7 +100,7 @@ attr(archetype, "brm_archetype_interest") #> [5] "x_group_2_time_3" "x_group_2_time_4" ``` -and we have nuisance variables. Some nuisance variables are continuous covariates, while others are levels of one-hot-encoded concomitant factors or interactions of those concomitant factors with baseline and/or subgroup. All nuisance variables are centered at their means so the reference level of the model is at the "center" of the data and not implicitly conditional on a subset of the data. In addition, some nuisance variables are automatically dropped in order to ensure the model matrix is full-rank. This is critically important to preserve the interpretation of the columns of interest and make sure the informative priors behave as expected. +and we have nuisance variables. Some nuisance variables are continuous covariates, while others are levels of one-hot-encoded concomitant factors or interactions of those concomitant factors with baseline and/or subgroup. All nuisance variables are centered at their means so the reference level of the model is at the "center" of the data and not implicitly conditional on a subset of the data.^[`brm_recenter_nuisance()` can retroactively recenter a nuisance column to a fixed value other than its mean.] In addition, some nuisance variables are automatically dropped in order to ensure the model matrix is full-rank. This is critically important to preserve the interpretation of the columns of interest and make sure the informative priors behave as expected. ```r @@ -293,46 +293,46 @@ model <- brm_model( #> Compiling Stan program... #> Start sampling brms::prior_summary(model) -#> prior class coef group resp -#> (flat) b -#> student_t(4, 2.17, 4.86) b nuisance_baseline.timetime_2 -#> student_t(4, 3.22, 5.25) b nuisance_baseline.timetime_3 -#> student_t(4, 2.53, 5.75) b nuisance_baseline.timetime_4 -#> (flat) b nuisance_biomarker1 -#> (flat) b nuisance_biomarker2 -#> (flat) b nuisance_status1_absent -#> (flat) b nuisance_status2_present -#> student_t(4, 0.98, 2.37) b x_group_1_time_2 -#> student_t(4, 1.82, 3.32) b x_group_1_time_3 -#> student_t(4, 2.35, 4.41) b x_group_1_time_4 -#> student_t(4, 0.31, 2.22) b x_group_2_time_2 -#> student_t(4, 1.94, 2.85) b x_group_2_time_3 -#> student_t(4, 2.33, 3.41) b x_group_2_time_4 -#> (flat) b -#> (flat) b timetime_2 -#> (flat) b timetime_3 -#> (flat) b timetime_4 -#> lkj_corr_cholesky(1) Lcortime -#> dpar nlpar lb ub source -#> default -#> user -#> user -#> user -#> (vectorized) -#> (vectorized) -#> (vectorized) -#> (vectorized) -#> user -#> user -#> user -#> user -#> user -#> user -#> sigma default -#> sigma (vectorized) -#> sigma (vectorized) -#> sigma (vectorized) -#> default +#> prior class coef group resp dpar nlpar +#> (flat) b +#> student_t(4, 2.17, 4.86) b nuisance_baseline.timetime_2 +#> student_t(4, 3.22, 5.25) b nuisance_baseline.timetime_3 +#> student_t(4, 2.53, 5.75) b nuisance_baseline.timetime_4 +#> (flat) b nuisance_biomarker1 +#> (flat) b nuisance_biomarker2 +#> (flat) b nuisance_status1_absent +#> (flat) b nuisance_status2_present +#> student_t(4, 0.98, 2.37) b x_group_1_time_2 +#> student_t(4, 1.82, 3.32) b x_group_1_time_3 +#> student_t(4, 2.35, 4.41) b x_group_1_time_4 +#> student_t(4, 0.31, 2.22) b x_group_2_time_2 +#> student_t(4, 1.94, 2.85) b x_group_2_time_3 +#> student_t(4, 2.33, 3.41) b x_group_2_time_4 +#> (flat) b sigma +#> (flat) b timetime_2 sigma +#> (flat) b timetime_3 sigma +#> (flat) b timetime_4 sigma +#> lkj_corr_cholesky(1) Lcortime +#> lb ub source +#> default +#> user +#> user +#> user +#> (vectorized) +#> (vectorized) +#> (vectorized) +#> (vectorized) +#> user +#> user +#> user +#> user +#> user +#> user +#> default +#> (vectorized) +#> (vectorized) +#> (vectorized) +#> default ``` Marginal mean estimation, post-processing, and visualization automatically understand the archetype without any user intervention. diff --git a/vignettes/archetypes.Rmd.upstream b/vignettes/archetypes.Rmd.upstream index 6da23f10..09f98f97 100644 --- a/vignettes/archetypes.Rmd.upstream +++ b/vignettes/archetypes.Rmd.upstream @@ -70,7 +70,7 @@ Those new columns constitute a custom model matrix to describe the desired param attr(archetype, "brm_archetype_interest") ``` -and we have nuisance variables. Some nuisance variables are continuous covariates, while others are levels of one-hot-encoded concomitant factors or interactions of those concomitant factors with baseline and/or subgroup. All nuisance variables are centered at their means so the reference level of the model is at the "center" of the data and not implicitly conditional on a subset of the data. In addition, some nuisance variables are automatically dropped in order to ensure the model matrix is full-rank. This is critically important to preserve the interpretation of the columns of interest and make sure the informative priors behave as expected. +and we have nuisance variables. Some nuisance variables are continuous covariates, while others are levels of one-hot-encoded concomitant factors or interactions of those concomitant factors with baseline and/or subgroup. All nuisance variables are centered at their means so the reference level of the model is at the "center" of the data and not implicitly conditional on a subset of the data.^[`brm_recenter_nuisance()` can retroactively recenter a nuisance column to a fixed value other than its mean.] In addition, some nuisance variables are automatically dropped in order to ensure the model matrix is full-rank. This is critically important to preserve the interpretation of the columns of interest and make sure the informative priors behave as expected. ```{r} attr(archetype, "brm_archetype_nuisance") diff --git a/vignettes/archetypes_figures/archetype_compare_data-1.png b/vignettes/archetypes_figures/archetype_compare_data-1.png index 6f27120184ff06daeb252d54fc6d68d8ed1d78e9..c60a954b982ddccfecdb0d7256aedd79336d1d2f 100644 GIT binary patch literal 16304 zcmch82UJw;l5L|XC{c+L1yMk9&RI|-g91&?AW=Y~1O)`iNK~?bAX##TA4viNO-=#| zA{iuSnCkzAnLF>^w`SIxdA%06ICh^t=R5UP?b>@+u&VNXysH#f5eNjH{DXVy2n5Cf z`Um?09ASQF#RUIcdHMk9j6mRANB>|9O!=H35H}I>_oN=VC$CL;coDgrN&N1ks)?z5 zVzVU0T>jw^hO87uoUABe>xN%OI!ngKm70u#4wVsEO(X#!8A_j|O;$<@Ll#LKMG~bT z`RL<=8fMiZ^@;2rvC)mle*47ioiDtDUPqqdNB6fn8F@D3xr-Gg-ubH$zk;i2&~Cs% zAYP2TO2ScfQJ2HJxT8|zrs$W4hTk#H1?~vDG{KM(!7U#5;lY|hV4 z$F%&!v5(wu%MThGZ~>%$}Vd=jZ2Np))A1Dld;EoOP{JNfDlh->IS=JB$6L zrKPV2z0M97s_dsI2HRd#{%j2n;0I$Jp`8+1DL>k9ET= zk&hn_7o7?09G}MAQQ}VO*hk>c&N44A&vS28$Z_^w@o1g<=IqYSv*OX? z!-cf{jhXX>G~elZkFriPPq<8P@fr9#_3hiYDJj(a<5K>Y<)h6?wBhQWA=#-vWMu_Z zB#S-QOnA7nHJ@PUbG%l?sGR(k%d}ldU}|SX*P&3iik*$Eu)6vHE>qlPc?jO*G5lCd zDT%*OB~6?(bRI5u5>Mb8r+HUwn$J;gL4j?v-z9%60t@mx&k_$04{zMK5zXKYfda>r zA3Q+WESW^kRcB=}{Q1aN@6SvZ7&iI*@dBgi{B)zNw6yX3?78%V1a|$ilLZOi)7?=m z1CM#Os&7v4kOXGDoL9$6j8#}!S-lQ^1i^A-tE5dg`TB}k2k~3Cg^)PZZ(eTUoUF9d z&}|Q=Oh`*RN68SJZl|696kKm3GkjDv+w$%CMgtOw9L!c?VP{{TZg{>ZM-tlhLR$(|RSOGUUd}81dfZl1_c{^L6*>|Ul6UXk1w_I17mw;r8lD;^ zow#bNIysfz#O5lxF(D`)J+!v@iGYMIU`|l_fx3Eh-$MSH;qiO*^BWJ9m5c0hE8I4w zb2W0rx4ztJc)o8xzeP8~DL1nWPXvAE$oSC$B+-O{wsy5~3p^{$Vgv8ZHZqYEWtS7F zsb$816L=8fX%0P!d}Ml0U*fySP+IUOsU!!ym%D9UX{i%w3wat4tG zf4GC#G7s1Fyx`w?{I+@5C%sj2dV-NWhvwM3v~# zTRm1>ZK_px_;6yl#vY$m{G^3IB8*DN>Fnfie0<#hGM;r;nd|zu8kd!kvGvegL&76C! z7lco3!gDLL|0B~wFY56>9FzO4aHk5z*|iHbn`UT}%GN(((W)v2rITUO@iVt?i*`6} zRw!SWUUjWwkl%b2Sn$c3i?m! zoNf{0UmVPlLiHsHY;-cFC5w8LPOjnG?Rz#<$dZFODzuzNe}s^* zNYm<+TdAF{s9!)xhRIUyw6(QCMA8TBtd2WFFjlPPsH8zmcXoEFDbpel8N_SyJ)$&` zo}2Rd!xWyL^_Or+zd3eL!*0&E^O%p*if2ViVLql(S6j*|TgFO>a z*DcDB#mJ5W{Yss}lH`;-vyQS)g;Pr2sd=TaR$j`$JDTv?KlG{~%bPB49gmY!*9X?5K36N-TF4QUSBxo(FdBPI3u z-Hg=|h{tmG?(%d)-9$B%gO(tIri0l~MwL`Z(R&vOL?yAgl6sa&4WW>-s$8Wwwz(~* zq82O2R+sWsxN(|#Uci%Vz?O?egvK!0BA9_s`GL61NbDbTVpod;=u%Mj1{d0|UdOM~_;K3@Dt0Q|zlm8UyVMG+DY! zjgLnwQ;%AD=I7^2-c?N5CzuO0vg?xO$OyobVNYPOkP+ZI7Lz0sG`b2EUs&&9l;_Dh z{b0LGxT~qzJEqdlubM7h?|5f6PQH~EpFG?tU>i^=dqMKJf5d;fe9xw+zF^bGPf|O6 zsNpk53nzUCa)qXxWOYjAYtLxq7f$sAFW)YYaMwA4^|^?6%*%NAHYyJuV7oWG??_~p z%WS`WLGt;)h`+&CmM9(({)wJybN?Z(`^#g@V$fs8jM&u4hW ze{{A%+Gaaasf@6~z!W2te*M|;^Q#2jX_fe%Zi(#~PQTwS;zDwnZ;X-68^wd;MyPT* zgcTk7o!CDF-%nl&-!owdCZs1#E*`>j^dHXqRPf!kO49>Dcqy#^B0?2kiU1)ggeitV z%oFY)5V0+hB?#1A#Th$Jd%elo9Gn2{7M-iT`vgsVU3n9X@V@ep@8+leWcyFblN>u- zi%!BeCf*ybDd&{c*6Lgp6ZDrcs30^DL|Bnr?GU(~NHU%NG})vwK*Ffxu9Q^nb7Gou z-1ficqGWs-0nxs)f_6hr)@~;%GS{zS9gYEnGP+`fX>)>s#`N(W+jcGw!i}-%F8kB1 zqLV5zet7dk#CXAQqF)?e!cCPFyrnl z{l-6&;;c$>kX3OhjKL8vmJ!?U7xLPhqZx^|PqMIFHI>4oxQMmRWs1JlvbgtbUQ5hs z#4WYKA@oeGpSiQR7Lvj=xChEvxl+|gc4!|xB00QR;f9RoBk#KSQc_z$O^sYyFnhDF zOEu_JCrD}TE=GFlg&0R$CljmCDSODirK~~x_L~Ql?p_30cLao+i6`!xCcer`mxx?& z!adieN0*iuEqvO!#y2e}Qc2dI7p~p6Q4$DUG9^37oXu6hal`D+z~D-wOy1l2p|mY zBsY5iZ^OFKyi2no)+ryZ%vsTsI!lgt=BJ86YQ>bSc)0NYk)oUf#Yg1bjIWL8vH$0T z?N7P*h@L<$bTjg=ujv1EODbHERyZlEm)4A(sFO3rYvFt;nchZ36_XtM)lnz*GU5l} z4(j@SKR+s`1TE|qPQROhF3070o)7${+WF5SO;t6qooLcsZZ5vRZP2qy=s9X#QOdgF zTGvwRy`Fcb5HzHGSq4|Z22*2=yHIz^T|(BFLG8!Nf6~UFZdS`*eodBkyXnw;>=>nw0nt2ltIZHXK1s2mQCQD2zPmW zqiII3DW}t3%MAJ3Q#VKWh33nK|6c9?535I!ykY@uh^(wEf6`iRPAVXQif}0I(G20V z5{;%E5&eCa5D1++6KqEV0|U{~(My9l1mv7XfZ?r8<>fm!=Q<314(Fj@v1xz0xl9l3 z-#ip(fVhB0uSrAuQ{%Q_P|+9dK52sPr>p~C0qt2mR%-K9{P zkAs@+^E^!6wa%7zfwGb9f5c=$Pe-4Y$qTFvw3{spRXw z>}}V0>?I!5qBhy+G~e|&UsLStU=CUm>u%_|&VIKL5J}%t6MepC8@r8XdJQvel5Hr3 zwZrksl`C;^amFbZU%m*UOB_Y%)lc?d`48`QJ$U$V%Uu+mphkw=b>>`b*yW;a1E8!k zxo}XJmuPFp@4AZ`pOVNzv!?iZr;solV9Y1d9>W_WkImI$k76puZA)24?FU;g`8OMt zjYAW(!_L6%-_dgELXjs&#o$swQ4xNqQPm_HBr*qq4o6su3FR^+z#KR@I1&fn{f%1! zp;L0%nAW#rWn-KAWZW{8s}W9TQw@z&)xljB7IS2TXidDj57FlPz|;&oJhnmA9^!m!FcbsOuhRKV75mSU+x}XuB4Q7O%44Td- z(qF0_=j6gE9&2jyKN(<H}i!t@-ACTl2Z3k}#&bP!U{Y0*x60ONOUv zuj&aXu14oL#-TKye0n}Fw*QUD(+zrtfT;H}L2?r22-QoM@hlih`t5%eHxhd8#&fT% zqP}j|x0!5?3~PwY zQCe3!{&qlszN!>mmR@Y{Turv3vy#CACX`|>pkb_3xjXDQK01#p)J?H>myWLB+3kFB zT9`T(SXiJ$G6#Q1vG7rsolea-mJyosNj1>0b)?+~R2wZE#4+k#@&v+2g$%2_X1~@Yy>C8y7Ne zyY}MXR!@{0hbNCTyG?}$81EEeOIn&nP|YkCZWpt)aE4?AxDXM)GR0P)Ff>n9k=P*U zy~m~yFcxy0&KQ7stlt?&bFI#h$Jj5B5ps-gzdBMRV3)|spgL%gmF#cxr+Eucb(W*(%oi4Q zuc5Lo8d^5+1Nbk??Q+0gu`qr|9MR1cSas2R)+bDyhD+RGQNOZY5$-2lOcJ#sSu&B; zTT|ioAz~~U>xE`O`sl@$gQ9bZTn)1EH{YpUa=Z)@r!Qe3dI)!pRIguuwNBPW&7GCZ z?m2n^5&QQz+BA;oIF|Eh6R__qFLi3L3FcX2U%VvCOw=~#m+nS~K;cGbgb8}tR!K-= zdsM8hQdHgF2$>DWKkj#?>ag-Yx!b}?)xqrIM*B-Jg79+??-9v-ugv|?5%-Z1_xh{v z-lgQ)-RSvT%G$yyO8bNDyCD0jVEa*b#;w$a7K3GH4h7t<5ie53iyVS2fWZPQwo40K ze<4!{zG`Y=syoQOK3M;l;&QHEe1u=N>nl83_@(su)iRO|aOEaQu;&NW+p zT{uTihyb^UqG~LC)A`iuSH1ZDPfk-!YdVzk=br*<+KuaajWrx*l4iehmIuEfL|BD9 zN~KI)6r3@u{c7D`7cV&27~T7Yb6doG%5mr5@Xp}RooxzV=(JC440U$`2qTQuJ;bRe zw-6}%@;d17tsDqc#SceYkyzdt(@=vkXnxKbhoH-HX#6O*`f>K2s|Z74iwNRCtmr+L<;a%BReqZX;XbCTa?xycTFCKp32$|)-maV&PG z2(h^=XSlKPwvhh4bpd#!QBrib+Y;vrUHpf%Pepedx-nj4OT*!J{6%vQ@vli&-wFz& z99`DONAQyP(Im2dFK*~u^nR~~uoA`;+0CocRWBQ z=o=UmRbu=7-t3_5d&`yi@#Aa4+5O`jrKD`}a_{54I2Nt0Qc>@t9bg*1ridgEUdO#G zakQ8@YVdpwC||WY=8!Gmm*JzPDJ_-?#;aou|D?5v6Om$4Glrqey$pcXFU&jD4_o(lQax6+1e zXBxeM>x+hdboQyBTm)6k^Zj*7hkCXAnhU#m47q!iikzMo%Y{6)vO4B!R!h6tYko$* zyol9RT5mrk+%$9EE3!c-eYCT*y&!RZn3rFacYZIePr&!=1Xv^B{A%@z92yS;38UlU z09o9T9{@@jSU#lmm&aQAe9!k*gJ?V-#8}^Q=to0U^#9x>ycqyss{Z`!xZ$~}o3K@2 zfAE!xDy#`RVa*FDimNy{hTglwIjNp^1qAj1-Te}@2kk=a`I#qQYjSdO45LcmUV=HY z!MH+4Lqp>V-SPfL6OggP?P{5FKrB9m8^#ZkvFq&V@dg>7Jdb~i)EiC^ghvUuCu@1x zI&}f~d-oo`Q7b+LD}u{Hwllxn8qZK~kjN#0pa5|MHC!lJ-PBo+z>IstGyokRVAug0 z0~S`JovN_W8ZFWniXg(2vSVgr!%LEulWT`y8=eF{7KolDcn(TRJq`QQ-JD-X3U#%L z^l~3p;H5^MHDl3w0fPnfRkAW;%Xgg*C|k0(N^*fqrWK3&*e~{|@H^7Zc5*;v=_=LJ z(U~Z->?bvbEBPyZe+FzpUkL5+VOzAee2@m+HAN&kJ?sb_;q?={G|&A$BXj7jtO z^=@Zp2SV9?x?YHfhetxWUJc{L;~Nl?KGXoli%0lpyB9N z9tJs#2?dNh1lxn?ET*pI;e2N&C->ADK&7%|`oy@G$=GzBtyPR(mmVq7XOWK{UC}Q! z>x`n4(T+duHayEvZZ_id0%ZiKXVz}}iE?Hho*2TdVJ$;__-6KmmCQ)-+N0(C3iQ)B zU7xDEA3=4Pc79?BjQmus%k!lV3EbS=NBbMa!+IEqS$$YxTHljR6lwmjCv4TAN;5Mv zQP^tl*(#(|upI@d;Gp4R=4JmM5hClT`k^mUuo?0g)4aGPBz!v}sL_Dez+f6;@fr{; zn@n3MC28r;!9AYneZ;c+tt;9;-9^0MFWkFl(UU<#MEM-D6>-~2 zag#VBBV+q8G-to)u}=9$^_({v_H|fEU1)uzAL#t~!o|6WK-k^GKLX1B(5n$e4ZJ<< zqKzgA&Bs8#SkPlNP^=gf@9!)Pf_NjB$<=NShczigM|%RU5OMSHU=h$Hr>35Pa?x6P z2l2wyd}-hVrGP!IO~J>HOw7#vW=C)QedfF3njmB#8um73d=GyA*j*XTx9q?|ya;@1 zp3{@x#9errnCr^75)469+(g+|X*W6Td+x1tHB|Ij8Qf@+eQl>LKan&v9`_?@8caLz zlcQ-6>2!)p;k*9h%XUSp<@@mxgb^b98h*{+v*cqUXvD0`#)Vy1nXo?_o*#`u1M72o zq?9bUiTH|BrdydT?k!wiqFZIp_L0X4h0aN^RItOBQ14q{aoQuOLvh+KAObee zeazPEDl;;dF>ERg|FN11Sw~+cA3X$WFS7ffsLrYXKZv`9-)YRVeSUg|O%~^Fl7NWpFSkb$D z`RF{kz~x&OO*mWkr2OsF0Y(n+_8= zN5l2jIn6)Z%?r$w3-??|ant7i%u)4sso{LX_q@)eEkxI$q2j$90#SP~blA?qQg-39%i7RR}80U9AE1{0OYj+m$@N$e7x!iu^3*C;_^ zuCX2Gmi_|E?a3{qAo>A{)&wy`JE32nYr}?))gZTkzAb?8ewuaS&7419I-|p zPu&p+T1~VU!2i?Vh>I)o%F1_kBi@^mx0`Vf+lWR%!7|~ma@9|4;=U>q@PL*k(3n`Z zM0;6p^BaS_HJ+U2LYW7SsDqPWVl_RvN@~gE8h})W{J6J@*R%qTMny_POZ!(w>n-G? z%TtVWiG&s%s(%DRKGI>0UtL`VK*6e4{Tq_JAm|ZO_5_qqi^HAL`WBuF_V&9&uFF3s zdfW3WFYm4$SqlSp^eD>+n%w}+Xa4HUdyr0!wB@!b5<|B=J*1wFvfQGhYhKw6$snIt z+;qREHq>B2AEGI($DUxq8Ni>^V-auOVBnzbCaabQGX9B=T|V$K#%yqFiY^sMwPlqN z>x!<@)#AE)G)PSwl-QzD#^SzvR;~HAs6&Mge56Gf#}6cWXi;vQ_(1PA#Bz&^tAEWk zNcPj{3JIpvb|NxfNl|ggHPPM6`owyn9?zTB^Rip(3khhQv=QIHHw5^?dyA@|&`jFob8D!6*2m4>lf@ggma zeDrcLww>{OxX2s-MxS(nEKo2ZSAqn4&%|VQP(?xs`-Xu1H;`jnV82On;H?`VA3chV zj;5C%fE*3TAYsO9y9aN#9`>vBMsJEpmCr2%V)6D?jlJu}w3yS+FNukX9W>9w77h~( zJegN>j1h>}WN)e#wF-51f5xc%T3FZ^E183D>gn#Dtada7Xkw~Ig+Scn0G#rF7OCZp z1xy6Okq*ix=)e3Xt*^(+EPX-lF0<&-Y4kcg+Fdc#yMchz;DnmAtsKtR0#67zZXncH zSmj3Zg?9M3lI>(A8_>_6K5>>i9`CKmWo|+Z5Z!maMKJXsnis%jK|z6v_~FmS;$j5~I&?-SJp4vkLa%=f}>zOPv!z25g}x&10qJ-P?T(g6R08z&*7`v=AE(0Nr5SrekaF(bQg(-Hh}-nFBv7y9n>jp6Ff4Uc-Gdl*L{7^vw4dURd;?n+nB`149 z6oH{;aOoK-De1)89$0;p)5M{Wua~k?uIN)`G=7ni@H+Snl=;v3`C$V#et_LPJY`GZ z??Nn$pueUa`hj7}Q4k}e{1F!sYq=g9_2JTwlEMkmH%WNN59(xUPna@4Y^Omk?QUs@Kkkvv_3+3 zLR%a#r<_*auq{l4tsU>x>MrJ)aFLJ=Xi&kqY=>dWlOO)=g-JVXmv4Gvd%k#j((GMP zRU%73jQ${wfyd)DyUml-Ba#d0c&jcK3E5E&FKjE4MhbQ!8WnoK4%AV-urdy%Nv8>X zBfM}u^?uhy>ObYnztd`HO;hsuvxkI{mmshEU|=DtE{?5SPM;EDeoeM6_5hn1AM-B5 z6J`D)=6gc6{TItc@~yvBR5d*ve)KvzqD>O_<|4)fHDkxC=?dpB7+pW`E?c<;-X6Pu z=k~`cOS2D@H}nRRoq&k7a&r&#s56y&#e}Ew?As5;p*kunm$3{is~lWhf4m0Q3;#)9 z{f7(u3)39?-R=CVW-{N&j@X=|z%=Cq5y-4~)h$?ThV14Se9pd$Z|BX!;@RQgzeS{D zxSd$7*}*~j?tt)|p6X$~)NxA|8Qp^cjSQwhmwdtxSLJIzWR>?{Np;{>?tCy<+UgE0 zOZv;`c!TGy){ogm<=aRvJXEWj#L0ap>(+B4N&_C$ z7e;aW>yj=a#^AkC{> zY$&C|tzoC=(iln9`~51yQ8_5xQrCDV%9uRf{QTL;kgpz} z(o$1w6q!n#z{J}4PC27+mYlx68Ey+FZi_61ycv?eK;OHc-Zg?*R;^ogS#zMk{0UxS zpWl=3mm;gPs9HXz2x*@8_`Rl0eZ3J;JFnn6Xt9;Im`S|( zl@7MWM9LAX5^eCLRBjJk?cT<1p-PCW7{B@6)>-j<_x4%lvt`mt|UA?VgC^v>Uw^MDoRbp1=d@lpkn9Ym-u? z=Wav2T<&hY;UHL>-vSxi%a;D_`%_vsYCmyuTxtfq1Gzjmnh1)k-AJ!3lJm+1 zHL2-?h%#@heN|9})fs!)%NKkDW*(_v_$biVmu#BhSfSq0l)Z*2RiK-Cq_69XG((bN zO6`-hGKC~F40E(tS6sgEa_oe>+cCMvA{6{B(!=E5qRS3ttR*hEc8+LQi7p{#!@~=R zE>&^vO9;fD_R#-f$-(aQszz8{;FHf4t>kKE^#&u4ALqQ8BUUrgFG9(+nLG}Y3(vugG3zbH+@RYSVhdg)r%J(&B$%0LW_^E@JOHQWf{L((=gtAnXT8wbCbn? zFX59?_10EGP0CfpgA13fNbJNGy>FePW*4?Z)1snO)zsb_i=`h4OEB)>4B7IRv99cT z>WVhwHWvC4W6Y9`uv-O#guAGpKi*nepxb(>2V;W%gdFD|EEE4^OM{QXXJ^7R|8DhQ z4#iq~ifC`O4eoQdpb8d#%7y)yC?bh3nn|%KnV^*yhHW0dd(m`d%8P*9BVPr}|WcC;UNUjI>jBxatvzz~cl^!w36h5IO(Z(JuQ zF^=8s?Z?dAYQ!t`(Vr~d7=Lx?Go+sC;%| z)~fFxPW==195x4IVq)~!6NUnuDWo$w<^ItV@=tH@zj;vEA14x!pB;4cAe90QD$;#+ z)KdafCcs2s8)iHfQZ)1Vj%pAH$?kh~vKvk{fB|E!5Z!s5QEkyfQBhJ~@713n8!5W= zV4*h!00phf8>l=^{g+PxbR6%lK!b7_k78#ovdQ4AJR`&8OB5YQt^oM&vayBNJ^)x+ zV-;k7_fN))j)9rEbKWU8{L-HGK2u1i z*;PB<2hlqIZ_LZtGHdQdlufQFPL&S3<(!q0E60x8R`S>RePT@lp*o2~Dt?~)tL%L? z+#~RN6=|2yi-=4vJK>kM- z2dWN7uB3!OD*T|n1tM9lcpmc;pTTcc6dO5&CcIa94Cq`gh8vShKNu5UYC6U+c@mdq z2`c_)9bVsr8<8DZOuLLWCECQYo5!c`!~fQ6l~U~-{-xJ~_L3u%Da5C#si){BEGtbU zBR?6IB~r7aCzjmG80EG$!FT(1n;CbCxVI;8RRK|O@^9btcGVKPciSl)M7O{4KyOo_ zBCmpeF$O%+)NJQ&Gf94%7{$OmV$KuhHT8*9V$znM2X}7!P@3{~{H+q5t38J7n$h&i znrg(z_?8J-q^3xjCsu=++On@Zd7v8c?b*`B-|{y2YQ&~QJ5(KQM(o1Y#wguFO&7yN z=#s%}_!aOvKwkis3;~KM!n=TcD<;=~7`hz*_~%FMO3~ma6DtxbMwec@%`%ewIAdhz z+Q=t*1nObA=?-hR@;mPN@6Gl2X8&d^))bNvo8yr{;LHuWH6rwMg6~aQ#map+1mVaGwjP@g6wDP1udnvUU5B~VV=h74OdZK zBj_%DDxq9$S3;DvyK*y;@_JdKDd|Jce!4}ER4wA$mwD7BX26+td3%5m^wmBd+)OvR z9x(Jaa#Z{(v%n2}9b-2~dzTM2UOT^Zwq71qOW%6OZ_dWW2IEg0@GzR#|Hh`M1Ao$~ zk1y`84|Jhz(8pYoLe)iC7y)n?f7>wRS|?T@yN&$!x?a=c^RXa=9@|g5N)-Gaoa7U> zJ$S%7y_CGkk8J*X6+e^!Bg2dTvJLn@Sb_e0zDrNlc@Wek^OglTGY<7>(yy5&X59Hc z6JzH(EAz#>NNfej4P%sF#S|;&DCHR!*^6ZJsU5bq>$WV$e2pzdu!h^w87$A{TRWv} zhTQY4V8KowHU`t?|3^1w{q!Y-9PBfwy6vh)I0>=#gNG z@}IK|-Sc^NhV|~7FdV`QjO0W-)ZORc*b0amHS`5CJOb^HhU$gXWaEhV#JciSkXW`K z9eZ$$+`l7p6l^;qoo^Pq=poU?)D*shBqyv7at2V*ob+&)4Mus zRMVPeg->F`$)aMA|VPk#Wtu8jSU z6=;@)>v1$go7Q+KYZ+_4X%AOYMFvwTYsY9^3ujmc)8^x{hs14Tm}2*j`LuP&cfg=# zU2$C+$RAQxZBCFBq5oD+7JNg<4YM{twJA z(=zC<3(N!zFFC)ft_wK#%WzzEb6lbGlUO6Q`!Y#AQ4Fmauem242& z-ue1A)JKGB#PQ_JS+*M<8(qjOOn4-uq%?r?0&Fe+{!%o95@^jpPXfsWMt2ZE3)RfL z^EC@ikT5Ay0W&VP&4=nh%WZ-*gC^mU`0bWwntW{@X@dlN3}ObT^J+-syZHE#(qN!+ z1V9Qq0Tm&~&Tb;aNgf81?kFWb($Nuin63vJiX-;2(I zQ6mtV^Sr^=2OlEcT!Qa?zFxBc)U~0y`t>rdD&Xu-;HIBEc>)*zmu8 z68F+(Yk^b2^M0Q>eDUQUzURj?V~;4qnG&AC(!rosH(+0M(1McJmi>!KD*%>L57_1X zZ_a(_@HpL{>BzRYz8fNmE%a%Yc>#HSXe^GM>f0SSUghCL39E3 zmkT_7Z~?Ii2~FF*B7Yg3!Vj8*``P~0!@|OH{42?!sCqW!Q;wli=k3e>#(ejbRw{=@iauCfE;^X5J63F}$Gxe^)zQ20)svi3&DD%Ecsl2nmk*-=859!C2QW%(kpA_Gbdy{Twz{B$d#> z$}ZX{3dTqZKITaD!*2$=zr}bKR7seBhUks zLj?r|EIbP0B=i!nl7_aK94_Y<pR}gyjJ{e)q{q)0O|9Bn?1nicmgxv%$btL(tZcQ8`a=G~V<>lo*@#8Q;Xd14& z%8ALURoadZH2I!`D%A*5Jr+I{%3N2j5L&GYTV#AbMAPwl9T4?kEZ$$I9`XIl2xC!E z5h*69P3;yxb%=WO)gwE$A%yi^h947%{zkNLmT0l3rRnqP@%-7i{! zJ=n21?^hAFLIQgVr}1a7@h)y3!bHJW{LTnNi1fbFf}7Y2i|IZ;W}N%PAl@F`zbgZ~ zC)D_D5UtOc6>s}i;>Gazl!OEUSZk4u`Z93WufDYnG$!RR0RP0YQ;l+p@G$r{G}-sG zSi3L#H#rpn( z)CFf}XYep|fQKWrEn}TOCO$r!=4*69LPAW8GfZJMg2=vnUTCaRoSUn*|K?`Ev!#J~ zpvz5dyBc=}6cSjG84*80YW;Z5n(tqOA9M>O>p)8T1BhYJ;9!We{fM&3_h>K;s^U#~ z^xCc%dS%7|4-MXhZzd(rmWMixI6oFYMauy(QE+y1XwO5*IL<)f@fkNy0PC^X>Jre~ zJanxqyFPp4mdkOL69r5OkK*US2=Y-&x$#$`jfr!ZdMwLl7|(;%{2=bxLG9L>ZuFR! z|;Q7z)Yw|-Yd+_MV6Wc&ulcE9j!Pvn7q&#%Lw9MgKRGFP7ysaD*UX>VWtt(6kkaD zAg`mxYr$XxlecJZKscpVb3vp z?}2y3+z?R|7j9;1T-6@EFT|r=bLTjQ)hjm7*F1PB90hbyu4)IABIW21Cy~+w%9p3Y|R(z?dj>Z}^Q}PITG-J>a;j|LemcShN*Ab?F c%1j-f2l;X$u(>ebf*OL5msP%3ByHsPZ*JXc>Hq)$ literal 16253 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 j|Gyta{|{|VE&7VN39-qo`i2saND#78iVun