From b85eba16cbf5df1cb9bdc8b74b896dbfee66c1df Mon Sep 17 00:00:00 2001 From: Dylan Desmond Date: Thu, 10 Nov 2016 14:45:23 -0800 Subject: [PATCH 1/5] Created BuildMap and a Map --- exercise-1/exercise.R | 5 +++-- exercise-1/scripts/buildMap.R | 24 ++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/exercise-1/exercise.R b/exercise-1/exercise.R index 9f25f34..ff6244e 100644 --- a/exercise-1/exercise.R +++ b/exercise-1/exercise.R @@ -1,11 +1,12 @@ # Exercise 1: Loading functions # Set your directory -setwd('~/Documents/info-201/m14-shiny/exercise-1/') +setwd('~/Documents/INFO201/m14-shiny/exercise-1/') df <- read.csv('https://raw.githubusercontent.com/plotly/datasets/master/2014_us_cities.csv') # Load your buildMap.R Script - +source('./scripts/buildMap.R') # Use your BuildMap function to draw a map of the data +BuildMap(df) diff --git a/exercise-1/scripts/buildMap.R b/exercise-1/scripts/buildMap.R index 85c7bf0..f2f6786 100644 --- a/exercise-1/scripts/buildMap.R +++ b/exercise-1/scripts/buildMap.R @@ -7,10 +7,30 @@ library(plotly) # Try parameterize a few options, such as the title # I suggest: https://plot.ly/r/bubble-maps/ BuildMap <- function(data) { + library(plotly) + df <- read.csv('https://raw.githubusercontent.com/plotly/datasets/master/2014_us_cities.csv') + df$q <- with(df, cut(pop, quantile(pop))) + levels(df$q) <- paste(c("1st", "2nd", "3rd", "4th", "5th"), "Quantile") + df$q <- as.ordered(df$q) + g <- list( + scope = 'usa', + projection = list(type = 'albers usa'), + showland = TRUE, + landcolor = toRGB("gray85"), + subunitwidth = 1, + countrywidth = 1, + subunitcolor = toRGB("white"), + countrycolor = toRGB("white") + ) - - + p <- plot_geo(df, locationmode = 'USA-states', sizes = c(1, 250)) %>% + add_markers( + x = ~lon, y = ~lat, size = ~pop, color = ~q, hoverinfo = "text", + text = ~paste(df$name, "
", df$pop/1e6, " million") + ) %>% + layout(title = '2014 US city populations
(Click legend to toggle)', geo = g) + return (p) } From 15289bd1cc569ad0a6682d4dd0397912d319b4de Mon Sep 17 00:00:00 2001 From: Michael Freeman Date: Mon, 14 Nov 2016 14:06:03 -0800 Subject: [PATCH 2/5] Added demo-2, demo-3, exercise-3, exercise-4 --- demo-2/README.md | 2 ++ demo-2/server.R | 9 ++++++ demo-2/ui.R | 10 +++++++ demo-3/README.md | 2 ++ demo-3/server.R | 11 +++++++ demo-3/ui.R | 9 ++++++ exercise-3/README.md | 4 +++ exercise-3/data/electoral_college.csv | 1 + exercise-3/data/state_codes.csv | 1 + exercise-3/scripts/buildMap.R | 35 ++++++++++++++++++++++ exercise-3/server.R | 23 +++++++++++++++ exercise-3/ui.R | 10 +++++++ exercise-4/README.md | 4 +++ exercise-4/data/electoral_college.csv | 1 + exercise-4/data/state_codes.csv | 1 + exercise-4/scripts/buildMap.R | 35 ++++++++++++++++++++++ exercise-4/scripts/buildScatter.R | 27 +++++++++++++++++ exercise-4/server.R | 28 ++++++++++++++++++ exercise-4/ui.R | 42 +++++++++++++++++++++++++++ 19 files changed, 255 insertions(+) create mode 100644 demo-2/README.md create mode 100644 demo-2/server.R create mode 100644 demo-2/ui.R create mode 100644 demo-3/README.md create mode 100644 demo-3/server.R create mode 100644 demo-3/ui.R create mode 100644 exercise-3/README.md create mode 100644 exercise-3/data/electoral_college.csv create mode 100644 exercise-3/data/state_codes.csv create mode 100644 exercise-3/scripts/buildMap.R create mode 100644 exercise-3/server.R create mode 100644 exercise-3/ui.R create mode 100644 exercise-4/README.md create mode 100644 exercise-4/data/electoral_college.csv create mode 100644 exercise-4/data/state_codes.csv create mode 100644 exercise-4/scripts/buildMap.R create mode 100644 exercise-4/scripts/buildScatter.R create mode 100644 exercise-4/server.R create mode 100644 exercise-4/ui.R diff --git a/demo-2/README.md b/demo-2/README.md new file mode 100644 index 0000000..7317419 --- /dev/null +++ b/demo-2/README.md @@ -0,0 +1,2 @@ +# Demo-2 +This is a demo of how a shiny app is structure, which uses a simple `TextInput` element to transfer information from the UI to R. diff --git a/demo-2/server.R b/demo-2/server.R new file mode 100644 index 0000000..148eecc --- /dev/null +++ b/demo-2/server.R @@ -0,0 +1,9 @@ +### Use input to create a string +shinyServer(function(input, output) { + + # You can access the value of the widget with input$select, e.g. + output$userText <- renderText({ + return(paste0('The user typed: ', input$text)) + }) + +}) \ No newline at end of file diff --git a/demo-2/ui.R b/demo-2/ui.R new file mode 100644 index 0000000..40d6eb0 --- /dev/null +++ b/demo-2/ui.R @@ -0,0 +1,10 @@ +# Demo 2: Simple TextInput element +shinyUI(fluidPage( + + # Create a text input element + textInput("text", label = h3("Text input"), value = "Enter text..."), + + # Show output$userText + textOutput('userText') + +)) \ No newline at end of file diff --git a/demo-3/README.md b/demo-3/README.md new file mode 100644 index 0000000..abeb8bc --- /dev/null +++ b/demo-3/README.md @@ -0,0 +1,2 @@ +# Demo-3 +This is a demo of how a shiny app is structure, which uses a simple `RadioInput` element to transfer information from the UI to R. diff --git a/demo-3/server.R b/demo-3/server.R new file mode 100644 index 0000000..791f064 --- /dev/null +++ b/demo-3/server.R @@ -0,0 +1,11 @@ +### Use input to create a string + +### Use input to create a histogram +shinyServer(function(input, output) { + + # Reder a histogram of a given color + output$histogram <- renderPlot({ + x <- rnorm(1000) + return(hist(x, col = input$color)) + }) +}) \ No newline at end of file diff --git a/demo-3/ui.R b/demo-3/ui.R new file mode 100644 index 0000000..bcfa018 --- /dev/null +++ b/demo-3/ui.R @@ -0,0 +1,9 @@ +# Demo 3: Simple RadioInput element +shinyUI(fluidPage( + + # Radio buttons + radioButtons("color", label = "Color", + choices = list("Green" = 'green', "Blue" = 'blue'), + selected = 'green'), + plotOutput('histogram') +)) \ No newline at end of file diff --git a/exercise-3/README.md b/exercise-3/README.md new file mode 100644 index 0000000..586f947 --- /dev/null +++ b/exercise-3/README.md @@ -0,0 +1,4 @@ +# Exercise-3 +In this exercise, you'll practice building an interactive Plotly map in a Shiny application. + +As in previous exercises, you should fork and clone this repository, then follow the instructions below. diff --git a/exercise-3/data/electoral_college.csv b/exercise-3/data/electoral_college.csv new file mode 100644 index 0000000..40419b8 --- /dev/null +++ b/exercise-3/data/electoral_college.csv @@ -0,0 +1 @@ +state,votes,population Alabama,9,4858979 Alaska,3,738432 Arizona,11,6828065 Arkansas,6,2978204 California,55,39144818 Colorado,9,5456574 Connecticut,7,3590886 Delaware,3,945934 Florida,29,20271272 Georgia,16,10214860 Hawaii,4,1431603 Idaho,4,1654930 Illinois,20,12859995 Indiana,11,6619680 Iowa,6,3123899 Kansas,6,2911641 Kentucky,8,4425092 Louisiana,8,4670724 Maine,4,1329328 Maryland,10,6006401 Massachusetts,11,6794422 Michigan,16,9922576 Minnesota,10,5489594 Mississippi,6,2992333 Missouri,10,6083672 Montana,3,1032949 Nebraska,5,1896190 Nevada,6,2890845 New Hampshire,4,1330608 New Jersey,14,8958013 New Mexico,5,2085109 New York,29,19795791 North Carolina,15,10042802 North Dakota,3,756927 Ohio,18,11613423 Oklahoma,7,3911338 Oregon,7,4028977 Pennsylvania,20,12802503 Rhode Island,4,1056298 South Carolina,9,4896146 South Dakota,3,858469 Tennessee,11,6600299 Texas,38,27469114 Utah,6,2995919 Vermont,3,626042 Virginia,13,8382993 Washington,12,7170351 District of Columbia,3,672228 West Virginia,5,1844128 Wisconsin,10,5771337 Wyoming,3,586107 \ No newline at end of file diff --git a/exercise-3/data/state_codes.csv b/exercise-3/data/state_codes.csv new file mode 100644 index 0000000..4c51756 --- /dev/null +++ b/exercise-3/data/state_codes.csv @@ -0,0 +1 @@ +code,state AL,Alabama AK,Alaska AZ,Arizona AR,Arkansas CA,California CO,Colorado CT,Connecticut DE,Delaware FL,Florida GA,Georgia HI,Hawaii ID,Idaho IL,Illinois IN,Indiana IA,Iowa KS,Kansas KY,Kentucky LA,Louisiana ME,Maine MD,Maryland MA,Massachusetts MI,Michigan MN,Minnesota MS,Mississippi MO,Missouri MT,Montana NE,Nebraska NV,Nevada NH,New Hampshire NJ,New Jersey NM,New Mexico NY,New York NC,North Carolina ND,North Dakota OH,Ohio OK,Oklahoma OR,Oregon PA,Pennsylvania RI,Rhode Island SC,South Carolina SD,South Dakota TN,Tennessee TX,Texas UT,Utah VT,Vermont VA,Virginia WA,Washington WV,West Virginia WI,Wisconsin WY,Wyoming \ No newline at end of file diff --git a/exercise-3/scripts/buildMap.R b/exercise-3/scripts/buildMap.R new file mode 100644 index 0000000..3bcc562 --- /dev/null +++ b/exercise-3/scripts/buildMap.R @@ -0,0 +1,35 @@ +# BuildMap file: function that returns a plotly map +library(plotly) +library(stringr) + +# BuildMap function: fill this in with a function that returns a map: +# Derived from: https://plot.ly/r/choropleth-maps/ + +BuildMap <- function(data, map.var) { + # give state boundaries a white border + l <- list(color = toRGB("white"), width = 2) + + # specify some map projection/options + g <- list( + scope = 'usa', + projection = list(type = 'albers usa'), + showlakes = TRUE, + lakecolor = toRGB('white') + ) + + # Make equation for map color / text + var.equation <- paste0('~', map.var) + + # Plot + p <- plot_geo(data, locationmode = 'USA-states') %>% + add_trace( + z = eval(parse(text = var.equation)), text = ~state, locations = ~code, + color = eval(parse(text = var.equation)), colors = 'Purples' + ) %>% + colorbar(title = "Color Title") %>% + layout( + title = str_to_title(map.var), + geo = g + ) + return(p) +} diff --git a/exercise-3/server.R b/exercise-3/server.R new file mode 100644 index 0000000..148ff63 --- /dev/null +++ b/exercise-3/server.R @@ -0,0 +1,23 @@ +# server.R +library(dplyr) + +# Read in data +setwd('~/Documents/info-201/m14-shiny/exercise-3/') +source('./scripts/buildMap.R') +df <- read.csv('./data/electoral_college.csv', stringsAsFactors = FALSE) +state.codes <- read.csv('./data/state_codes.csv', stringsAsFactors = FALSE) + +# Join together state.codes and df +joined.data <- left_join(df, state.codes, by="state") + +# Compute the electoral votes per 100K people in each state +joined.data <- joined.data %>% mutate(ratio = votes/population * 100000) + +# Start shinyServer +shinyServer(function(input, output) { + + # Render a plotly object that returns your map + output$map <- renderPlotly({ + return(BuildMap(joined.data, input$mapvar)) + }) +}) \ No newline at end of file diff --git a/exercise-3/ui.R b/exercise-3/ui.R new file mode 100644 index 0000000..355b4f8 --- /dev/null +++ b/exercise-3/ui.R @@ -0,0 +1,10 @@ +# ui.R +shinyUI(fluidPage( + mainPanel( + # Add a selectInput (with a proper id) that allows you to select a variable to map + selectInput('mapvar', label = 'Variable to Map', choices = list("Population" = 'population', 'Electoral Votes' = 'votes', 'Votes / Population' = 'ratio')), + + # Use plotlyOutput to show your map + plotlyOutput('map') + ) +)) \ No newline at end of file diff --git a/exercise-4/README.md b/exercise-4/README.md new file mode 100644 index 0000000..1b04431 --- /dev/null +++ b/exercise-4/README.md @@ -0,0 +1,4 @@ +# Exercise-4 +In this exercise, you'll practice building an a multi-tab Shiny application. + +As in previous exercises, you should fork and clone this repository, then follow the instructions below. diff --git a/exercise-4/data/electoral_college.csv b/exercise-4/data/electoral_college.csv new file mode 100644 index 0000000..40419b8 --- /dev/null +++ b/exercise-4/data/electoral_college.csv @@ -0,0 +1 @@ +state,votes,population Alabama,9,4858979 Alaska,3,738432 Arizona,11,6828065 Arkansas,6,2978204 California,55,39144818 Colorado,9,5456574 Connecticut,7,3590886 Delaware,3,945934 Florida,29,20271272 Georgia,16,10214860 Hawaii,4,1431603 Idaho,4,1654930 Illinois,20,12859995 Indiana,11,6619680 Iowa,6,3123899 Kansas,6,2911641 Kentucky,8,4425092 Louisiana,8,4670724 Maine,4,1329328 Maryland,10,6006401 Massachusetts,11,6794422 Michigan,16,9922576 Minnesota,10,5489594 Mississippi,6,2992333 Missouri,10,6083672 Montana,3,1032949 Nebraska,5,1896190 Nevada,6,2890845 New Hampshire,4,1330608 New Jersey,14,8958013 New Mexico,5,2085109 New York,29,19795791 North Carolina,15,10042802 North Dakota,3,756927 Ohio,18,11613423 Oklahoma,7,3911338 Oregon,7,4028977 Pennsylvania,20,12802503 Rhode Island,4,1056298 South Carolina,9,4896146 South Dakota,3,858469 Tennessee,11,6600299 Texas,38,27469114 Utah,6,2995919 Vermont,3,626042 Virginia,13,8382993 Washington,12,7170351 District of Columbia,3,672228 West Virginia,5,1844128 Wisconsin,10,5771337 Wyoming,3,586107 \ No newline at end of file diff --git a/exercise-4/data/state_codes.csv b/exercise-4/data/state_codes.csv new file mode 100644 index 0000000..4c51756 --- /dev/null +++ b/exercise-4/data/state_codes.csv @@ -0,0 +1 @@ +code,state AL,Alabama AK,Alaska AZ,Arizona AR,Arkansas CA,California CO,Colorado CT,Connecticut DE,Delaware FL,Florida GA,Georgia HI,Hawaii ID,Idaho IL,Illinois IN,Indiana IA,Iowa KS,Kansas KY,Kentucky LA,Louisiana ME,Maine MD,Maryland MA,Massachusetts MI,Michigan MN,Minnesota MS,Mississippi MO,Missouri MT,Montana NE,Nebraska NV,Nevada NH,New Hampshire NJ,New Jersey NM,New Mexico NY,New York NC,North Carolina ND,North Dakota OH,Ohio OK,Oklahoma OR,Oregon PA,Pennsylvania RI,Rhode Island SC,South Carolina SD,South Dakota TN,Tennessee TX,Texas UT,Utah VT,Vermont VA,Virginia WA,Washington WV,West Virginia WI,Wisconsin WY,Wyoming \ No newline at end of file diff --git a/exercise-4/scripts/buildMap.R b/exercise-4/scripts/buildMap.R new file mode 100644 index 0000000..3bcc562 --- /dev/null +++ b/exercise-4/scripts/buildMap.R @@ -0,0 +1,35 @@ +# BuildMap file: function that returns a plotly map +library(plotly) +library(stringr) + +# BuildMap function: fill this in with a function that returns a map: +# Derived from: https://plot.ly/r/choropleth-maps/ + +BuildMap <- function(data, map.var) { + # give state boundaries a white border + l <- list(color = toRGB("white"), width = 2) + + # specify some map projection/options + g <- list( + scope = 'usa', + projection = list(type = 'albers usa'), + showlakes = TRUE, + lakecolor = toRGB('white') + ) + + # Make equation for map color / text + var.equation <- paste0('~', map.var) + + # Plot + p <- plot_geo(data, locationmode = 'USA-states') %>% + add_trace( + z = eval(parse(text = var.equation)), text = ~state, locations = ~code, + color = eval(parse(text = var.equation)), colors = 'Purples' + ) %>% + colorbar(title = "Color Title") %>% + layout( + title = str_to_title(map.var), + geo = g + ) + return(p) +} diff --git a/exercise-4/scripts/buildScatter.R b/exercise-4/scripts/buildScatter.R new file mode 100644 index 0000000..c532f3b --- /dev/null +++ b/exercise-4/scripts/buildScatter.R @@ -0,0 +1,27 @@ +# BuildMap file: function that returns a plotly map +library(plotly) +library(stringr) +### Build Scatter ### +BuildScatter <- function(data, search = '', xvar = 'population', yvar = 'votes') { + # Filter down to state, then graph + + # Get x and y max + xmax <- max(data[,xvar]) * 1.5 + ymax <- max(data[,yvar]) * 1.5 + x.equation <- paste0('~', xvar) + y.equation <- paste0('~', yvar) + data <- data %>% + filter(grepl(search, state)) + + plot_ly(data=data, x = eval(parse(text = x.equation)), + y = eval(parse(text = y.equation)), + mode='markers', + marker = list( + opacity = .4, + size = 10 + )) %>% + layout(xaxis = list(range = c(0, xmax), title = xvar), + yaxis = list(range = c(0, ymax), title = yvar) + ) %>% + return() +} \ No newline at end of file diff --git a/exercise-4/server.R b/exercise-4/server.R new file mode 100644 index 0000000..6bed76a --- /dev/null +++ b/exercise-4/server.R @@ -0,0 +1,28 @@ +# server.R +library(dplyr) + +# Read in data +setwd('~/Documents/info-201/m14-shiny/exercise-4/') +source('./scripts/buildMap.R') +source('./scripts/buildScatter.R') +df <- read.csv('./data/electoral_college.csv', stringsAsFactors = FALSE) +state.codes <- read.csv('./data/state_codes.csv', stringsAsFactors = FALSE) + +# Join together state.codes and df +joined.data <- left_join(df, state.codes, by="state") + +# Compute the electoral votes per 100K people in each state +joined.data <- joined.data %>% mutate(ratio = votes/population * 100000) + +# Start shinyServer +shinyServer(function(input, output) { + + # Render a plotly object that returns your map + output$map <- renderPlotly({ + return(BuildMap(joined.data, input$mapvar)) + }) + + output$scatter <- renderPlotly({ + return(BuildScatter(joined.data, input$search)) + }) +}) \ No newline at end of file diff --git a/exercise-4/ui.R b/exercise-4/ui.R new file mode 100644 index 0000000..820fe6b --- /dev/null +++ b/exercise-4/ui.R @@ -0,0 +1,42 @@ +# ui.R +library(shiny) +library(plotly) +shinyUI(navbarPage('Electoral College', + # Create a title + tabPanel('Map', + titlePanel('Electoral College Votes'), + # Create sidebar layout + sidebarLayout( + + # Side panel for controls + sidebarPanel( + + # Input to select variable to map + selectInput('mapvar', label = 'Variable to Map', choices = list("Population" = 'population', 'Electoral Votes' = 'votes', 'Votes / Population' = 'ratio')) + ), + + # Main panel: display plotly map + mainPanel( + plotlyOutput('map') + ) + ) + ), + tabPanel('Scatter', + titlePanel('Population v.s. Vote Power'), + # Create sidebar layout + sidebarLayout( + + # Side panel for controls + sidebarPanel( + + # Text input for searching for a state + textInput('search', label="Find a State", value = '') + ), + + # Main panel: display plotly Scatter plot + mainPanel( + plotlyOutput('scatter') + ) + ) + ) +)) From 72a635bf3e539092320539a6d7f8f7bc2af280d5 Mon Sep 17 00:00:00 2001 From: Michael Freeman Date: Mon, 14 Nov 2016 14:23:12 -0800 Subject: [PATCH 3/5] Removed exercise-4 answers --- exercise-4/README.md | 22 +++++++++++++++++++++- exercise-4/imgs/scatter.png | Bin 0 -> 75237 bytes exercise-4/server.R | 5 ++--- exercise-4/ui.R | 33 ++++++++++++++++----------------- 4 files changed, 39 insertions(+), 21 deletions(-) create mode 100644 exercise-4/imgs/scatter.png diff --git a/exercise-4/README.md b/exercise-4/README.md index 1b04431..d74c267 100644 --- a/exercise-4/README.md +++ b/exercise-4/README.md @@ -1,4 +1,24 @@ # Exercise-4 -In this exercise, you'll practice building an a multi-tab Shiny application. +In this exercise, you'll practice building an a multi-tab Shiny application. The final product should look like this: + +![scatter plot in shiny app](imgs/scatter.png) + +The Map panel is already built for you to model. Your scatter panel should enable users to search for a state in the scatterplot. As in previous exercises, you should fork and clone this repository, then follow the instructions below. + +## server.R +Your `server.R` file already loads the data you need, as well as scripts for building a map and a scatter plot. Inside your `shinyServer`, you should do the following: + +- Create a `scatter` property on your `output` object. That property should be a `renderPlotly` object that returns a scatterplot (`BuildScatter`) +- Make sure to pass your data and search string (i.e., `input$search`) to your `BuildScatter` function. + +## ui.R +Your `ui.R` file already has a `tabPanel` built displaying your map. In this section, you should add another `tabPanel` for your scatter-plot by doing the following: + +- Create a `tabPanel` to show your scatter plot +- Add a `titlePanel` to your tab +- Create a `sidebarLayout` for this tab (page) +- Create a `sidebarPanel` for your controls +- In your `sidebarPanel`, make a `textInput` widget for searching for a state in your scatter plot +- Create a `mainPanel`, in which you should display your plotly Scatter plot diff --git a/exercise-4/imgs/scatter.png b/exercise-4/imgs/scatter.png new file mode 100644 index 0000000000000000000000000000000000000000..fafdf56f3c0aa012adcb8af0ed10b62de24d105c GIT binary patch literal 75237 zcmeEuXI#_G(kP;WpnynIs)B&@-U&#T4$?c)J3^?Ti6}*yN)Nq5AoLC)Dgx3wfzUx} zfJg~FaCy%AzMgaM<2|45r~5m62>)5P2M32p`Gx#T92`7n z9Gsi%ckr%TT-Us5aBv7)9p&V-l;z|eYk9icIl9>5;Jk=RO2OA9+obGBW*IqLlEtydN4=lik*Pj266Wvuw}fsqk+>qCX$Z3ONQTdskb^ ztrGpZgN7X(wH@q=9rwHMHUrn^-P_R_S2)kuFWFh$zcbb0${nk(NSC+RxLb8Z*ZY}}Cu8V^AuLSz7HCHt~K0M_Gg&Q$uzk6gS z5EN!__?dD?s6%aOyH=8q$tnDO8fncL?I(+Za;XSXM%0s_+?WLa%a})ls!<;@mt4&I zzdfQXRKOcrJNdCJtNgBf-6j|A(sggd#hr7_g=9Igy)^M^b-B5yMxx5tpB1O>X7c9t(;OV#H{!#1 zXJ2j^;+ibtn1-_cx+(McUglGJ&YPTGS@*m?Q&>_Mk`O*8ox<~Zt5QWmi{rg`M-+EmB=VJ=ybI&<528xfgv4Ax8E%_lCnQ(A}U=($srpUyQ3rB}shV!WJz> z3C#(COPr!4gAtA2C|(lOd?>84|+Zb>DyUmmVA*olSry zJ5&4$Dv?N@eU$D6M_chYKs2$shf2){hivEx|hV9;vMk$j<0a;D3` z9^LW@^br&#Uhr0jPyba(0ffAiR(n(bk)ED@W+in#IN!Jsq^PGN=b$Kv$CarsE1`%g z4ob@x>UJi!A50cg2f7WMmIxaR=)~shmrRyV79S~OR_qpM6}6ke^sv=GIu937o+I}p_QIGYWF3f0Gs#x*9m z$E3;td2$mTh^5WM&5SXB8H2)rk+DsR!{|e8GxfRWW>LGrb8d4U0Be{7j0iLUipMCQ zX`J<(*`8&d<>QIt<>Hmyqb8z%_<$($p3XhrM?Q~&1^I6LK zZDjfOczgIu`I@ai2zc|W3(Q#~t?|;Q(+gAe(&hvs2I%_z*8=(jxT+`zDFdUaqg#`0 zRC)Sb`V{+aaDeq9C-BPj%Mb_m)|mTeq$-`~eVqePUZ}8164yl6w=Tj{bu(@CLbbNj z`qT5(`BSGe(0b?E0D*--Df`R$)8p;ZquitP9f=*dn5g(2IxwvwEfFmlT^Su(yj1kP z1cii|N0)ejM5VXX&c$@+SA}iQ{#70WRfHe{53zK+>#pcsV(y1tV?gVc9p8kOu{pB2 z5YH6Q28b8nB$)-;3a9~)_)8u0V^lEW+Zf~w(qtoO^gKU4ddMl8*y6j$m&W178O>=P zWaTJ23Z5m6fRBU-evz`YeXjIam{;_5z@k|=Wmsp4eGHx$9+bG{p&D`Ay^4Fm)K-*? z_Z&&y%Z17MzLPR`X!;1R61w+}@0-s%0I>-15aE?Kshjpm9zYX6I`h$EK6G7rmWzd z5>zBy)fO+St`Ca6(TqZa6h}@~3m?1YZ=P%WD^XM5r@n`Ouk7cwBLZ?pebUVo?A?F0 zV+FGbsOg(xq7~6#TlcRq@pRnhMZ~s-Nqk=Z^fGJz!+J;APna^1+FZ&R9~UQ7*p(3= z3=<3c_$k%nLuJ3_ibenUV1LgxMe1F`TceyQ<(WqL-z=A&kUlkLcOomxSzZtSE?=X} z|8XbFED7tV(EnjYOhxP>gQnT8*~Bw@{d67M_MrB2eGM>a7lJ9n(+_~o!|{w0>WYBS zOXNkp913@G0?G>2G`X6=LlG6y%)7_TO=VRk!MQ_T>wGEd!ac=(^>uEbBK;Wq<}~zJ z?wGQbtFTbDS}N7y%yHf=v}I=$ErYJJiAw6%cZ359Dbk&pWfww}MRrn0vc(rjD{QpI!w zwgHVtpj}sFaebx3LQ1xu^xOajm7_2H9QlK?YsMT}aH(dhI=E!q11 zV668Yar4aeEQW2<`O{yrv+pISsLZz8$pbfgZLj*MTH0C$%{*E?&meshI*5#ldUM~V zdC!i^uAYVM5Q*uX;W^K-Jv)GxIb6 z#Rs{c1fO9=NNN~jq)m_SoR|EnUS8Q}1#3D5i(p|!TaN((ixRI_9Dj~Qgq43y35mQs z5l_5|*)P9n9y~aEHM2CvbjbwZp@csKvH6KzLKZa(rOPbR+obkV)-6O7R}>@W?<}ab zaRnD&Rvck3jx(*7tTm-<0v}!(o+x8==Io1y%q*6?v5=&uV5>NaX> zcT#2763L%yMILhOWc;(s=Wix+ouCyS>%&j7;71 zIgXc&x-&+(BR7P%u**pt@?*e#=t~Gv8mH+YVM&8_sT~f^jVwo9LoY*hHF0ZqSMFCf z?pC(key*>t&0HKDNk8%HM^{^~SC9Q%UEF};egMXQj1a$m{;QdX@$o-~csTs&coyD>&xvc!0qm7&%-As zCdR|d&%@8pbv=R$=Hg_x1uXGX6Eu z@4x?|)7H=NpEJ1u|9e^23*`B$hlh`wm*+R`Yf#C*TE(>-{cK$fnaa~x%P8C|~{+jDpQ^d?}(=N8QGKC*yuNZ+zJe2k7tc_vRzIwDJct4+&_l(ejE z?!|G}N?~ul+Yxs+=u5-Cl`rW~^e&+}yKdDY9*x5)ixZg>Ia#x!@|*iiPd`8W#wZ4` zo^uB>b3Ex$S(M0TEf?zs17rB4f&KMErpG>p@Q} zUnu@NR7klumg)h|bnyNn?@w6%YP&CcJ?PHE&wrryH&vlW_a7UM(f1~X{@<|th5p_3 zATr!=o8Msn=jyLJasapPOx8v4+y37Px<>WndeFN!PagdN!SD6{hfV*#vni7BlLkL7 zlxf&0=;9cP5aZrwZlJ4c@Ej#`{kS8sVW6@vGN`jYw#>YKjdf_ zrYT*1gT-7Y>X46xM?e&qp3OR}i&Fhg zh`zI&OsQr?XxT__ljG;zheC#f_e~bhxn_v}qJoR#eg6Nh6Mnxgp+Byvh`JCGt#!5p zSqg?!r{zQ*l$4Y(fGO;&ikuGwoI05_96IhEU_QavJ<`C~Xo-nh3ZQ#gxkh*8(gqdi zv@?m_y~b0RBKTJ_p>*Hqc0_k0Shb`jLdCrXy#406(gR)?ahWsRAP7cIF`-_)SDndn zXZF*>(z}0G5U-2w)csUGOY_{#Pzty!U%XK?l2R6sznV2#s^g*JG{8+An@n|?uDvTh zkyx_)ZoGDnj6ixNu4z3ACKC#-E9aw5^G-W^iezBV)?LlTA}zf4$}#V~ zw7~3l$#<|Cm>W=w=9j3uD!4~c+GnZCVDVR}jEE5492FPFKd8C7beykXpZuc7on{3~ z9pUv`T1KB*2PyKoyo&59zuArwP7rV0$)N{5y{Xr?&P$0X;U@A zBRO073y>{8X!E@G2Y`qS4AdoYv4i+gor%GTUdY@XSFlQMz#ZGV%CRhwVdr@0C?5cHx$2N0Ep+?3}cNURHAyMA-4P=oJ{S z_4eq~=Gw)xyX>60py9Zue>!dI!ms6GQtN4aBteF#Y0d=4l~QYbbNKRpsWQ^rmwkOw zt?v~gZWmcJ;VhDBjw6NNq`&f#-@7}r(eb$^nQ8UTLvQXS0FW}zjj`V3Y_W|k#S(Q#gIuZK`igL(&B#gyD zS7qaILYWQGBVd>?yj}08?DcjZ7D6xm#r;`va+4qXNPkjtL)1Qx@MflTNY4J3BJ#{4 zf&_luUz5hul`8S&0hlT=>4m~V+q1P1qe}gDq>Yoif=);tU5m@6$<&~u zpmqacvT}m918SFg2*5F(-d88kWwAADo0g*iX`Cr|ql?>a!Od>rx!3|v$ilH~;rZHp z252hYxdf{3Do53s?(c8-CmmUSJ21P?5G})w3uPWYsqM5&@jQ$^K3wi?``AqpQfGWX zqVG5uqaA!BeblwmaTD)~9;ZERJdtt(LlrIPHpwHnZAwO!9q2$WznY15+G`TG*6)oJQ^nEI`5caXRidZ zrXg;bg&=gXe&dg`pR0xWxSu7=8)9-Hfk%l}iDG*)>I|+&^*e~@AQCUq#}_W!WI8KKH0OJnw-O|kVO`;8Fw8XI^`cdIz!;%9=zu#tz|Ju4IKYSX?0wM}*_IR8CA36!B@! zAJlDn{P9LBW%Bf4k5?N2MAD*91s02vV&^e1AJI0;*d!8#ELBOdRf%Lc*v2-!JXd?& zHx{F|Wk6#wiJI?%ItX}W57-&hJ09a#I;&?Zd95$r>Q+VsxsSSbAC81W<6O_B?R;zD zx;o}1jpmX$1houA?IDr@zQajV?JeUOR?Sf+x=@RPRWtNt>XQ_RW?o~X@^X?ds*?(R zBoT_lq6TL9Q7}h7zL%K*2c1F^1FZQuB&4F4^`2)NJOnF?4ThDS$0?yo6$49o?DM5U1bFK|3oN5(K&qn~LvE z1;*~$OQ(SJW}J1}m4^VZp7yS{e{fUo|E2DEKTZ`U-EtzV^9zZZDJcY5vn4hM{HM%?&5(RUYMQH98HnH4L0e)dwZA- zfE)m>63-whE3kGrHtMfR*I`!5qS*?kD|^MHm}*U}TgxaknEme zaG*l7W48I%EH3q!&On3)vO^}`GP4BOHLhY;1GGt&^*4)B1l#eT2X><0F!uZf!Wq?a z%Z9$npW1bq#{}Sy`2ltb7j5mY&E$1yTPt|#aM?H5@YBDedUTW@3*6*1X(&1Ho)8K< z96`>p&$jC{^lN9mYJnVI%Eh%SjcoR+NoXpxv)bZ{nV5!x=Z$=wkW*@%>B2}YGl;Lb z8AKMSxjkd>r1`B-yM>CQh?@4`#@Dzk4?PRlv8&S#JhH^{5oBZI)(4~c{h(-66Kapz z{~Uun1Y-qCH2j^-1w!nESY%S}4GvQnm>2co5o__lo1yIWN45qzEG%YM``?3lc|&c5 zbhkQ0sJ3?6*pu8(5_}f+>+rnA3WzG6t8bNTo~6u0G-Z%%3{Zt|oO_ABZ-sy2$8#RM zSlBq3KR%r0NLRbfkNJ5KFi;GBWIhl`jaS@v2q~R}q?lbV2!X1eme!XBlDa0HV~&;; z;@S`w!O(EYkj5URIGkF44{lhkASUk9)`CdSy1)RI<&V0`EfhG*(Z)FJc&ookm!Y+_ z^sq@oOe&Q6SWLb+W*8uH=;KO>I`~Y+vZkF!x4SZK;(IYgQ{ur;%*}Q-LS*-_ctf#e zgk4VXXjv~X89SyS*qE6W*c?SRUS>a!JwL%i4=v3pa|L76SQ+TNL1t*8Tq%8oZLD*)Ht7Fb)sbik`s(LKaZYSEm^crM%?{dSFv#ipM4O#gb|&F@FiSOfk#VJ1tj^ovBX(2h zDDhpilEa#f!JAr1%>ddtk-+$k6BI0b7HRc?SXP#AQZ!D+&o$9aA%-g);k zMtu1!u$u0~kU@NR=iwY?rS)!&Syo%H@M!jx-Jn=L&XVB()_G;%q zX)|EyLGAFV$D~5F9dSBv#niWDlP=Yv!P>et;)Mt-=g57uh&{lq^z4*p*XNegw#i5o zR%nMxTBOvj^js^OZXatY=m_iHNYT_BtBMKUS{)1f(Jt`^&*;q?_#1S5Dt6)3-Ox$O zNR1KoMjJ?L+M)PQtE~O3g>JGZ)w9stnpp{SXLaV;Yn{YL#$2z};Lr5XdogT9bFCy! zYTJBzEx_%}ir^B$&5s&fLUIXV)+x=t;#dTDg+Klc7m7?{ z4Z1n1>wkTEi1W-Kgl}34vaV;^y8;y@y1{0Ufi=3?5( zyWo&x=gO(khmySHhY*RH-UtYAyiI`hoHyIjx9{Ik{Z>ys%9`WhvssM42HOZ+*mEyu zk(AOTi#ce-_i^t2%15*Z&|Vf;y-^}?qzVL8nD6C zZRpVLwfKX8sHv%S-7HP&ZpzW|X(wz*;%EX=xu0~7AgOO0SKFumWuESW?A3h*x;i|B zT9v$|j@wEg+3&YhKKf!5Q_>5Cy8J(r~@hl#Ir&g zfd#5r(3eauDz1}w>J>Ni_p9!ID(lt>uW`fZ)@JGlR@w_7-&yQjP)9CEm|f7sqhOQI z#wt@as!636oeJ4BI~!z!v_Xd65*a)E)+ejUH-^JI(j`N|8}pA^Y=7!)rH{+OK*!^` z$5bd1hURnO)9hdbHzlG&zqCf*VeOK+en@|3_ZTya7D;>6tLS)n;G5=ed6B|h9VECF zieK-11k4f(Y3alcHz#QFP%Y%Q1F9^P)Y0h&XXbeYD-3?PLVTr0V8JzNGl!Ujv%{C0 z$OVTHJl`v-1=?>Wn)H6}>t2OzE+rI(_`fc&YBO_H!?SDp{_wzF^E?-35}Ti%#I#bP z#o(|+(P#d5oBE3pv*n)PcDZ5>ofItT@^sLtYi8sn7kxXkGF$s%B^~ zC=0|Dauk^@ovDPI63oFUoS#8OzJj3@ZJO)M`Y>+Z5gvoZV#^tOu&AGW0(?ul!VUQ$CV;h zywA6@QE%UDPs{&~SN}5)a7S}70mF?X|n|$6GrC zzQ_1yqi6Rw9ddm{LFH2@XFJTVfJMh3;-hggrK9uyC}44#7hvo!W1;v+!aY~}$XuSw zyk!HzFt-6{@d}#^)LxxyFy%m4Ozs}FB?yZSkp6OTrqT>O`YV)Rj_s#?R#A8%K#~4x z;cW_8@A+^*aMrPjVbS`DM%(9Pq3@MPBah^~s};7tw(H1cItLelnZ$Kh+kq};PBZDo zW*f~2wMalyIork#fPds$9KP;6Z%F7rmmIvrfp; zJJe0+R*nigZ17wJ20`p|?!G#X*z=`;lr;1RB&8~Vyx^R+ol|$YNAlj6sR3qBMI5e* zq@9Aan;{UF579fOi0{FQoPU3Fo-2`xW)`>5tzZ zh>2)=VUEsQ1yPe|m2$5=$$PZytVOcPq_m#wiQSyT1%MMa83an_ z3%TC!K8s6}E6VmAynQU779cYh$e^Zle4y6ihDO(Vo+@I}g^=i!9hR5*$L1C&e^HuD zKGU0l2X{(f3q_h=NAyEe$t)ZvRM3(SRu@t&M$QM`ucVkH(3pWN^3y@?!}t{=rG)z2 zy2mBcE#9v+qpi#8JT_nY%RORiIR&>5Vv)$sMqw^DvQp~Lj8KkxdmlA)TeW)p;KL^i zQkoX7#!F5D?YF_02*95;HMy1lM1)ppV zb#H7gq%VC}OSK*7yIa>)-ud+Dv!V(Wz4^_AMDe5bmiBnSuMtf#o!Y}$8vnJAB=wdW zzXAnI$wCUG?1sW`91VS8JZRM9x$0(8*_bo&UR~Yq(O*puu4G=9DoV>gFP-sU>lkhy zr`TxJOdpDW#|M^nm;G@lK~I}688D|RoCb37{K=C5m$;Y6>r{?6ErFZ%W>i_J>+_IO z3deh@zn@(=p<1|RS^jHjSNAY1n|CrQo(D}xxpIhZ^smXs#_1(F4po>TDfZoqrRIzv zSvR@0+x+#7>UlJ8<7dhxo4xLQO|UT zGfQB0LwHiwmCgZfT7&W2d}!~n+W6;N!6rRlTO>mmG6kqxf6lbyabbmh*BcjDi5?g>yi(i9|DNi=%<3zEnMTcG&L6lA z@n|Cs26Y;_g_CxA5L*WGlPOvD10!HR_qa3B;L_cIxH<36Nau+$ua-Tt!BXjEF#{8Y zPe&mPWd#Q&TfVV)?&kKyOP2RNXlvc!PXNOytX=~Dien%0 z0C%-5vhiaJX{ekx^{?=cN78f-4>JeN0jsym>iy~)BcfR=-z1f@#XDSBy1#GVSF4%t z$T;qZJ2;XqFs7lxDw@oV&7HtE8*S0$D;regnT6fi^p#ApC#Q4{)g!O#p7X$)kUaNo zs?%8=ht-c!S=#dv{ktO9f!Qr&gi2!yVpLc=3oaXt5S~cRupehanZx}*8ygqRte5+{ zR&C0=LY>ra#>T}P1lAp_If=dkC8f?ktS*XBKIUdsGs#9fpb&Fcb#6k|Wz&$d0luR! ztEBr2QY5P!9CJ@*8d}AP8l3d#B`VOG;5%x%BAEfZ%_=dz_~Ot$D6~R%N12RvXH-2Z zYVQ(;I~VbA9f?E_1Q+4w^o*^Tnv|-v0pFeh&dw)i;{km^;+HP+o4m)eo1j(lPEa6LBb zyG3elE>$P$MGpcZxwJF4#GUWkMbvWqHDG*!X2GLv0`-}*kQMu!d94Xe_lfA3bP!Qj z?$L5pY@PIzt9P%oLdxAnj{IyDUP<@ip7~@ z3TCaH&xD1$4n+@y_kk_qV=dyJw*Ua=&pb418_I}66OqpEUF=2a`3s7z_v`hBs26&( zt#P@lJ=WR3-YR`C7^`#4J6P%5xZ5?Ghc!7LHPoP<&% zanRPW|)mkL<099w3maDZ6`Hj+e#(n-5&~cj(v`95CB6jrGx9 zt5mKmw-chVR3Al#v<#oC!N-4k%pN+dxBJB2y_!H$S*tulY)|gHi ztn=77=qxP?eK($s{X-?I@$Emv0=`T$Js$$st{Vf3?mV`9vM7Nc2eNV4|LJ0e6!|)m z-=&X9@?5wG+n?2;=rk+t4)G|Hec#7f!&*v4I9yumbDOk& z{D6aNANA!8jk`9wt?_4MH!a6_Z%QW2A#Y&A?Z|&8C?!4ElPQ$i;{N2{Q2fKC$kDsC zVKl}bV{@$uGL3W2IH1Ajn(WWKVkF^LBzFPhn=eMs?$c%Gv>(B1f6a>7{=tyC4hKYLd=dM^ z0sgnuM>nps-@|x+N(lZ>Tj(9a>&l78QVL9e$p8P&{oZnRxcN7F{{`Urt?QtK{Qc~_ zKXd%QJ-N3+b-%+He{k-eKYn}7NXAIbk$*Q8&R1&W-*(_%0q)CO*LRVAFLwAd+y2X$ zd}B%E`X>^8w?*b$=REE#>j?fq!hcWyyeeGyU%2qQ{db$Z)^&y0tvxpCf4A<(hH^Cj zbaDUi#Q5xa70cTb^4Pym@Oy{u+%L~1`scSlJdu)L*O0b6^+tA_Wn2Qo9miB zBBC4rZY%z?>%U)sf0e`kD2YGolK+Uyf5hdV9QeypO0^5ra5}wy-DBOR>N?#)ZsF*_55e!biLY zzRl#zchC~nq%XQViK8OWZk1zKZI|f~LIQ0~3Y_=$Qug`LQ z^^eOazM$&5U7YZM^Na6`Dgw4YS#kE|&(nQ!B3+3ZdLOJ-7;c}a(u&LRT-gVyJUGu_yE7UVWx}~R6378Raw1ATD$Tmz{B_#n&m2-_9BOq6gCin*-2~n*- zjfo~+uHt860(v>lo4c4JoZiUbH$8BwvyD~A>1vZ$XBPpP`_oA@(QN0q6YoLr#W-dxezTVi-PyKGZ#6ZUuVajIKbo5P6 zQ0{pc|d8c!>GKWtc(wP@woisoRKL{(5Os`@uv8bp&Nqdxpmr z_1VY!=qZ~_gUC5$#V?1{Q6ro3_Ei+Gt`hiMz zgr>Xjoxun=)0oEUPMvnx9j5Szsqf~25rQ|q&-_UyGqrQD5i(_Br7gULp9RpvWgJ=6 z^R1rE!aD>atSHVGJ14ls;=vT9OOKx12R*Bs6=I0Mrs-9$-0WNQ+^XACalRV%8%`2q z+GTB*dt1Rl@W(kU9y7+1r0Y27BI!ULNd5tH^9Kb%b(0{w@EkgI*&wr|UgD7ad?mQf z4%<0XU&RLiS`s6970ArWoNB~j?Cz1M=lMdZ{aj-(&uXH~UK6vEp4arcg}mNe4=GrD z)bp& zop0U^>lhVnxZoJKaqSIb6-B9$5p#C+0I{_(bF1rrjg5oo^n!P(KN#Q95^{w=eJ0iP z^%Ll!FJ3yx?P0oWMWsu<|xd^XA31D`*K;6PR;M_E)y+`@OcUxx- z)y;QFCxEk;k#)B037U_Qtk zs84|kJojQd>b%8vrs1au9Qf!$@je~1#!=~TN?CTDl4&iD&nP;l?;qKSv9Xtp41xAG zAF^JRMsydx7yXuG+Nd;iwQWR^94?!{nl;R@Foy<1v0GKbr_Fw^^*N+Hnaa>UD=R8LE@W`-< zQ@#D1F`7tj#hnO@{1kGR>gKG+<*zE}Z2u7BCAx(RX#h#Wn?r21D<~!HE?=@bZT4xh36#R5 zvrOf3SGh?bdtm7hNO6prwGiZ_+in$~j;(O;AxGIGcjH#BtX=F+6UD)tbFfE-aC2{RXgFH79jd-*(~qOe>bSD($xbBl}eAu=J(Y!%gqAw&b62^EBXFt zSV^)X`uj#Yn1lk6!snAcu!2Q&@*}hHv2{e3RKQe-p5(X7kD|Yfl7^&m^$$`8M@r6< zO9X$CT`lq-Pz~PU&{{FEv)#pwg*ksx2_nNzhV^NulGJj>9riUd)9Brs9USF@SZVC z#)qC9u*Txm(BkU_RrtPLkyObRsy2c-ZS@I*fh5veD+WuSg}{7A1QaJCRB$t-Q->Hi zSYg*>(!n=h$7X^94Ljx}PAr-Y^w$EJ)OC)*voj{j*-T5T$-WVcpJeOrev3#HaJQa1 zI6q;SYcQc(l6bm$W|HXS0Zwl;nSEV>?e%f175(;9&uwy^9o4uE)4H-FwN=fudmDa( zAngWF+_sFPp|m2zim@IkrR;_Uvcm1kzN74ot_I~`%$r@lOW}6t)Z`n3MVeTrWzN`o?~Q4c z7&YH;h)ZjOQ#8~=dLqSbJadfd-NOnVLuTGWn*my^OV81lpLg7SKcYVta0p2OQuBVo z+U_q1VUW#SJSR9xDpC8g^3Ge)(gt5}tmBwiV%x`gDv#PHqwS@iMwhN%pnf)X{^2h0 zYafDJ7lRE!8d5gJ6w%Ak2tcJhl>RL^D4+{ZAFj)zX5sKDTEKC+{ItdQn^qwU_>^gD z;GvuZz;lgTy66xvP06FRhy>98SyOZ1m)cONvqu-4V4il<7lE5}1P?7Q^WXhEYjMqN5 zlaHgW{dF?^Yqg9A`P&xo5)LPI4YO8=&ydpqUq{<*Zm|RNarN-E#2|g3w_Y#B00DIq zFj}kih2Ux{SRXXV1oBd8z++_vpBirIwVb;fpM(t5Z)5e+TGcEhgj^s4BS z0kPKSX8inqfT4$9_T^DAvvCun^vRpN_eeuYW#58Re2KTdE(3|fa=Ea^O94QJ5VEEU zl4-&f@my5|F&k2p{$D$-w{c9;?;&Dzb)c4AavDEhmK%1?J{Y(?sk@B`Uxkn1Mx*rW zyc&}4O_!uS2|wB&YO*!SJdk)Q!{qj;v{T{6ap5Mjj_zL7Tlc;Pu6Ot5>BD?AqnfHd$ITM3SZa4=(v93en=Z=y(+6 zpoY_%kQHP`VB+WT9fNsF@^2-}vR*yu3Ve3bNw5{t=K> z4+tjcT)-@M`Ied8#cLz~O~(V)t$Ovc!!H~6$V#g5Kj)E?rP!aZ1h79WZefp(_sUA^5;o#K*_?LG^|H+D55y!ydCyDN>`E zp;qzH)e^PTtVYQjk^lKEfQvNzIHnqY&Oyf#w?6uca!y2WM{S~2$jjM&W~-fV6eT@r zjk0}NsgVA}rx6K`fhs)@i>W3nhvfsFvpTSiAr=ISmu}nU)M-mM(0V#{W*^8NBTJ_X z^(cq@mB4SpFfr6$udC0uH1$l{K0!{MQyjM(fJ6fT2X~&M0A4XJ9i42$JOq8U6W8du zgbL@r(@cSuT&`Y)Q88e5jYjMJ1qOYqKvV=xEi}ag+d(dGE@)DuUzzlAElOByEb@8$^Lt#Hz>~BxZ3=bM&EJzGqZ916N|F7xVxw; zyxoI!ioYL7qGPuL=@;t8N-1FZ#aZkwKXcVGTG+%Rj;I+kCd4n0<`Q^0r@{Cg?nhO+VvC}QU_g>n{eq-m@wfq%`*Z>ueXw~8AK zy;7^hfy=a*1C)(E5EoJK7 zVV#ex^p2Y!e^(~ddBSt&Py|>Rs4b$AMrmXa=oY+$9{5_H44LVER}wPZKKL$`9&5|6 z!^T@#5gUlKQESnZqjDqI${fwF4wFp`LH1PS4)2G7gj`011>$DE^uNI~f-9lkx;g1Y ze|Kz|uQbp)ukT#D-bs-C$Op@oPnugHL$vgs%f~;<@#~h;f_nXhbBIznC&HJ{g{ILL zVYTksDy)~pQ7Vs$XvuQSNPp2)y*i)=c;tsLlz%*!Xc|!wc61-O*}Lx==iPdU_!2O` zE$z6Sw42}WY*Xo-=crR=ks1hMKuOtmu>U>hbbWDKaQ~zZs!=U(;(0TSae%W=@)lO% z%P$*DVfHNmPVG7ve9*@muKi(jV;Y#$ZlySUbM4xxbFLtmG?bh9KLH!*{Lu#gt&l}BH3=AC}a-49wuUoLO{Ux#Tq1rc z=a9stO_+?c50>fKq9fV})Ui4r#25gr#q1y4a+)>x_=oEDF9wUW3$cUMZlJ32z^V1z z1vszxlU zPGgCZ)=S-*F7-@EPXcSeWf6F%{39T#zvB#I1q}>NPD_9CtkFj^(xLSQU8QqS_M}N> zkX6l@NnxX`@o3ddzcq5v_I=v0q=R7PwS7S~o*)kvwUtjGLETi1Y~3L2dorb4qewC* zrs6vgsN!BeQw}J!g_PcfC|mlFP7`07Cp{lx*@;R<)|)A1xXIq8i`so$$Rc%(4i+Mq zFPUnT7UjbR+eQc(XoHK4WA+Sd{8Ku4&AxWlg{auT<+$Oel+il#IhuWeyYJ5yPn|s1 z1`ISHSGhA+d-WFI+T%q|T_uDSHLkCl{xA04GAyd^3lvra6+}Rhl2oL-JCssdVdzqn z?ry|DX$grTrMo)@5CLhW8M?cBhIkLkpyJQ>xnJ*n{+~F^th4vpYp-5w@6jd{-B8mP z+WatTVN&~%0_8uHk~7L(ps8ZI--}#-zGs%?L(iPLgwzg-J`p?m<26PIjR>V|P%r(q z4C~@(Gh3Tv4PQ*#*81(vZV|_hcEjd~!0e%y+DeO&3u9O2Vsv@Oyd#Jp>G=;viFo6K za;keFm$cKSg!Al{Ta_QxUG^7a~ZxMU}G&(Arut z$N6rlwPk1FR*85TO<)~=iujza_8F&~iSKcT8nXLRW7yQJ(WiZDCa-xB4!ykq_6g5B zdij>{O6nE+yL-2R$dd!+(19&!iK(ihow@tUQ;vOGHacT5iI{Ie{WZ+jz7$yRh-&u6>yf7L%~WM}Y|_u@Z#-YoOrvk^ zLxacC$%119M2>-rIeP1o95Ib2ivZVZA46580G{yj-9o$3^=O-d&#*$HoZ|jBz4kr5 zejN6WI&0-#z6T?m*0TGi5_$=BuJ6Lj(#=@zcMrWJGg>K*2J3qc6}n@FEFU;u=)HbB z{JB}f4b`C4Dz!q;m4#&9S;-9QCu>&|=5ISExz}(!>*KWzxm-B6dGF;bnZL8BW9T>r z$9uvH>{a_4HWa;)jSitneHoCEN}L|e;mOHcc)Dc@-=?`s8Yw6l#+2*D_*yl{6zXEW za<9BP@*j^x((g{o=D;yBp-JyW-E`aQ_+<3jnhu)CbcxCbV}$MjjV-itibkNg+epv< zDu|}_899{kbEdBP3T_ySIChbWF%p`pndbxe{+eaG`nN5NeIK#a4+Qp}F)D&&6=O1+ z!cHr&?b|T8d*9IXe(fq((36k~Ma+omC5h05va|@lrGa8|o_7z_N!YJE{LU8%;$-V$ zxiuL^IGUF#8t>*}ttRgzVdkS*5pBLexYvYdgVrWH2VEln%sqy_hf!vgDaO=3WJ(*s z)sBvh%dai-Y{z2uKq5?A_od6FjD6aE?F3(6ZqO~)n=UBtM&hL|#e3eU=$*O7T4}z? z482hCAAYEQTn*2%o2=#fLS#r>;?z9~3e`gjIv$>Z$}lXuxCS>2Dt}@O!H-)lt*tl4 znK(w5Fx~oJU<9l{zmO+y?dk1|<;|%EJ47&|3qi4u9u<9#8N?gL){3KK0f|WH8BY{S zYz^)gsC}C1>bM)fJh7EAipG;@5KmyoWWXZwY1yu=UQvI5?@Mcz4X6gtX42q??#A2T|nmW0r+#^g{Me<72IBd4AA zj^pVl#^tVt3l3J^nG1R`>ZJKC;ObqwtSmlrl%5FW|KL6ooU3l}{k=C$cWN5qOCzJlEK9cmKdA26kCdAuL|6P!b$Or zEA5cCRr31`ra~Uy@f2PxHDxI~-cO#n=#lb;C`(IVaO+j3@%XGk$OLpEVN-e!!;2tO zT|#nS{a|n{w4=pF;()Ol!p17ZgKt^pOkJSp$Gmxe8rFK{V|CHPZH37q0UZ^NP1LN& z9Jx)V8WY=eV`4?;n}~j~UpB^rO}S=v-f32_X+?mMol1Vn{U*gKb+w77xcWi!u)D-; zZx|t$>b*v_M3j3GcUlE=oP_J@7T(Jzypq|!NDwZwc_H7cw)a&4YT&c=humLcWT@OX zvU`~2p0pp}I6bpjdo3*Izw>m3x8~+|yYCm#bK zRKO`cE`L5$UiTFS)#5J=+t zHHXNlh7o54|WbOS#>e}pBon|Aq_dknSuur#n^ z?t23ghkvEIezAAg^?lJ|%{Om{F!(5F;E+Hy*b?q>zSVJZWf})mem<7ID`8^BgTYl; zJExLM>)XPi?TEyItu62I3;~!RzU|&UeS;0`7WS!p$L5H|<29%j+hAHRn(pN&eeTE; z*WT5Ml^df)JG0EAqkGvrF`y62=gQPh3GV}SbXy@!n|%v~x|f*A@g-Z91Fla|D(KKS zY35pb5;#%IAz)7fhDXq(s5_Go?3Q7?wSB{?qPY7|Q?IK1$Vf8N2RIu0=(JOj99 z3wUY!$==R2G>4GoQgIP;f*b5J)jjot`D4|J+~aR4J&n`*8p3dq1r!Tr?M-`MzBFNQ zo7ehb$2ip*8jVNLzRuckCUmz=s2amwTmnZ?mmjTZwcPmzjyi74DHnt0g1XEs?0*C4Q)qMyWDM>eSLB(sgMSAKN_KDsr^$sl;&G+6!mM-jh+Dn4JnF zOU<^1G?nY6v?8c6azVG39rWK?9bOBv(~NhP$!&<|aWv@6r!q_hf{c1$e!jPwm>oA# z%5FMQvuF4gtlq}iAR-^d6&aO7#nUoEy5e!^6UeCccwatYcErFoUC=Pe$*>_R?#}p= zj4K8`tBVB6+(6wP2jo(Gf;t!{GC4)B=!?Y3tr zx{ckR*;ALm$VZ-4Q_uhK{_kSDsK!{-`@Xm$TC9)BX$78YQ%Z>g!LiDD#;mqJ#EQj^ zfyqpTPNGrSa5F*!+xKEnT$$s6n;$tkQR6J8HQG?Y$~7^d;+4{dGZG89HK{eFby~Sf^nU1Rh2xxSbexNnvpJSZ5^{MXKlL7H|B;se{83?OLByo zofZ7497$!xG!TE??&;%{hxaHnvS^e_B;+-3ZU?i}VmcZ_95i=Z9Ufu|JU@;cKd?4A zuGoPMtE1kwN^nFXE)AjYU33I_q`3{+*3aB8(w1Bk-`l<_Se!)D{^{Fi9$wI-2)f4% zcRBIkvx3!>DZ=eFQRnwH?r9pE;W66EOR@O5A9ojWULkSpXeK|$#ON=0ZC*UNZ7KO> zz8qC=;&pI?R>4;)v;~Dcge7qo4zx5d^5c0Y?XCMxc@&+Jo0+hL||vK z#1QPZvIj%e=|9qiususwGGkJTmSaxJPFGnB#&eh>xMS`*zI+y*O?bYQ(>puNH zyrdOSbzeB-5`E6_M#>C9hX5@dor2|44>WH=_p#NmG-L9K<;jPt=ZZ{NAd7Dn0e0%CJ;{LvP zl3!g}@VhvsI+HoSdBOlmdOe%9 zE>S)`BXx+4R9xD7k?g-Nqazj`^IcHY-IXR0P|gvE7`|$nq|5lS;Sz_)b|=j7ewF6! zrtXO>NgNywoYcS=7i+EeJO)8F9g}{$Z>VXT&Fh5yHbXiok00>hMjN}xmF6ej%LFd^ z2$#gxXzn=FaI5YL0K6oI3bC>PD+s0iwWY@KW4F{S|1QP{J-Ni4x~%N=&r<2ko6=yG zx^)hY_9iZE=v3QZy!CGnr{pJo9U}F+VkF(i$>1EHw*TZdLvqiE2~hF38Rp@q$lQP? zF%+-4H9I-v#Wa~sdFId?ZdjW_eOlPt)9sa1cmqe%G_wO{*@JB+Z}~jEq`9iE&DKv9 zx6Jc!#nHHu24Xx=&dAWtRcjS(Y})kT?%#Gqxdlqk^?cs`bW90pC^2*o%I5!QG0WeOmceq0 zK1*xeB0+=)W#%a;pvG0La=2UGK!j>;L$ANcRo!I%@Ky?6jJmO){p~V)k-NzYO-YN} zYim;>yk&i@iI2jq1>`8`zbE7mfSSA6w?J z1-;G4)dsiH!;8noMNEcjcB!vhWd#*d-l)6V_bla@_A-|5hfb(rrerlnWk}KUvhGDC zi#0IFdAHzW=cg#PhupZ|H=_AOvCm=GsK(gjTNK9%@lDp1Z|MPjizNY5Z-@&Y0ddQI zPF9a69?1vLtZ!&{on~y8v+eb_xOamamL3pw+L?X_=~%B)nG5K)&bD8JmQIMt5Dt8; zn&Tk@Ve7Z`!2*;Gt@MJZwhNWpgH}I;d-OGz*A0sL>>CZG?>HKpS(xut$u>he%`4XZ zILmt(4*5+g^DF;8GIKTR`;Vrw_Bl42D2-@Z?_Fc_^^3%`LU#{y1GWxt48+6dKKsB7 z$6g*u%3ei(tdemH!mH4AiK?43*w9>K`=!3WC#)O|XBDRQVpM4^azhdn%b#X8>@@e; z<5Gy*JQ+nj$`#p6sZE(IWii7%2;)df4kqtrNO_vvLj7%*=^jZbw45UdPq9H&wxqKi zj^SwEJDaIv{Z+G?CE7)i@5jMQZyx1eq11bM<1$CWMN|e{Y#f2d0c4#spSr&py#y06 zTn+eU{VY3bL_X&(^}E6e5v!bp2K-$VPFSd)5bO7}Tu z(+88W>>~Xgmlt}hYy*7Gf^IGPdO6$KyPGArD@{kMyP6g1!LL+W}GBF`K< z^Qy>i?K_walCLMk9bN6jKfqxpLc4L(*-m1^U0<^=>#0&@(YW8?<$dwj2V*dm zl|{Bvtq{I2V@X@XUG#KHuGVR*rl1xFz2+c3XF2*0fPfP!r7DV_YsOn-pHo%H`D6)0l=YZ_sluKhoJLd>2o>%jxFF33FP{?9TcxkANP0Mw==ZSLGDQ(_&(!8@XY}kKG3cr3Je;y8BZzNqkbR`^Q zHqI`u01Q*i1l*Aevhe<)41AG1CY&8%Z+*88A*J`A)N|#Ge{rFBp>We{j(LN&RD$n) z8nZvxr{)8)_kFO9r%ZV)q+{@Jj*_He&a(m8_9!06r_j}toDx6@xw0eRBb_19xz*M@ zyg}X43f>Zln&@~)km`2Ipzo;U(K~NxW9D!s{ms_iNG~E(6*7nD{;9EE*3k^z> z>fA>C;(zK4;GChVBS`k25cn#9^y-l6|BV1*(JuhGqM^%a{x`&>Yk<@&P164p)3{6k z(HGMoo_|8<=m5Ia!!?THoD?9CK)xCR0u)hZB`wuIA<*dog_s*qaE|!DjDkl#Al@M# zm8bs=;Q<(u%R82#zg{|rvb++2X#Pfe)ITAZa{--NBiQ~IpPj9xnHJE8N?ITPGLB~u zmvI4I*59alUZ&3`6;=fhZEnu6`X|KynB$L~`#)ih=gn#r%>k9d5C%1?vahq`tP$y7 zd!N^d32ubl_xT6U=;R{lj#(eLn3PRhTegH&vADu6)Vb~NbFX(CQ9^8L^YV_QlpBQ( zc<=6Rc&&4lxYNkCVaS_(P1#tVQ&Z*ow3g>-4CL?rGelJm|I4LhH1 zgRdlejtr6j@=$;PH<6-B&7sQpwYYs*kBO>qN{8x|=XnZuF7E2S9pm7OtHIyff-u;b zIMRc`mx=V@O~Y4$E;O@Q9?ww4hr6zld0%IcQs*z*A8$V@Bzc%z8scaS4}echN*!^k z!Aw#pNJcEIH#X%gmxqlfM7Ed1_;-DZ^2Rp!pi*XjJI%X)Y{xGZ zg?|M}cOrsA;WGGf*YaIR)QUc(y%bHyiVj=>+#C698o2r%#yuSZ)9T@>=TIIZX{&m2 z?VXqQqX&{n=_xsal7Cr*)1h@0bbi#@_LH6qS#QL zqxI~7bTv{_fwmoGhufp{oaSC}PMW^m(16g;(9dkopqtz3PeolYcsXtFFDrAqMEF4lO>pf zsg(jI&9;ftYN5GLlsrK%HDpd z+d!GXf+;kgGy8CnZ^FxrtL>GXHi3jKpWv36I=|B>*M$3sn;idlXW{}F+eCBHu>fvW z$}W9GwwiT^+3NSB!t%)qBqq@IdY;q~KWgvL(Bm-~mi>>#VZ(Vgy_hQ;Li4 zTnqlJrhiGJt9UrCDlKVppRwX@ghjB)m1oKue9?EX1BS8t_>~?mtuN+X?`xcub5O`s z3u$eCRGjQyMZ*Zu6A9p-uWjJ-_6U3}yB+ueNPZrO9c&8>Um_UJ=MccE-aT7fD)FuWK?0DL&2F-M#*`6@OEz}T?~mcn$hk|kN@$Y z!;j`$r6a>C^}Kd}SHg8F=-Afe5td%NzH+1YH9fpuI9N$qPRmCwcRnUGMsPaw+T^81 zenNW_hf=m(-Qz+It4Fz%k?ypR5psD2>}!IDP2Bq*sdT5oe$o4wWx;UOp-u*Q>*iN< zlgFiN0*~&^HLg!rL&~i6I_yb}q+fBQ>}qQ6WUY_01?k9?Tu|uJC7hhuN|BGJZ0BCY zoYZwcS`Qbh;8g8eF5P2_Jv8AztompvmnYpuus$#6#+*zPPSRMtQLvX$yJfgI;<4Do zUf<`8Y}EdqB36LP-)W}yOJTxzqnZCl%!8D@&a%S}q6Oz~PyXRF)b!st+3qc9A-nBm zUhgoYz7^N{VG&5o`g~4fdi`>3Alv9cQt9*Q8GqIsQCRoK{-cCBv~f`l$HC!fHtlxa z1kQHt;+YSow^;9Ce&H#D2qu#{n^^6I?j3B1HLco|P|oxX5$$fp90kSj8Dw~gX;<*6 z3E7KfI%eh|F|7B`IHL*ayTFp4YgkVXU1NNIuuA&gnQ=ZG#pVD$q5DW}9F>P503%xt zTc2{cdxdNEgN~Lns4bI0k%K5)$2so)9Wl;n0~}X0l~Mm& znwhnb8}xE#aU-_W#iFWhLjetM zw~gZmr$VwTt9FfM8p2i}e9)k=&R{uy93jYNXyQ=8`rgbtOf=4IM(8BB0%=$_%o6i(;{yh66RQb_e6QkTr)}#Y3OZ4C_tvPY@#)E(Ojt$v0{nvW$)doBFxv&~- zM32Aw+|#0nGvkLoAt@V>P?0v3pe|2Nqp87}b?nW`l4N~YbYxu=+f;vvj?rh4i<6jE zw|aK7Y^Hx*!`MoYG&mrdc$PtsV_!8C`6YO=>G;qhv--sglNF`I>f?im_xDt~j_vkb zB^P5{6g%EdgPoAg%S(=|b}zyIo8-beL#Q^_qiDW; z?fFdh*TEznV6Z~Fx6pAgWg_B$L0Lgf!NCs zjC(>|x{_e7VHrJW6n8(j8hBXzCq2>C;~2uE^!jGV6+Zfz^whZ1B{^Qxc5PB5W?jwY zOC&pIF6FWC_q6AM+wZSRcXJz#RKDlq4c#{?Cnwpf|J<(MJ4I6M{-Fcx<*+k59EPTj zHCn3cSlHp%R8KBP!Yd!F6;oak6O`GxBMSd$RL-L$xYn-XwzAYt*VlU>dXP>oA4~}u zBDpiquiftmDO#hCv7yMXTTm!*@^^+uB^LX;^|(+A?tQ`()6DA$ZJbR0xH$Q7YA;oR z={=@jRYflMlbj!$pd)&<(8QfgDXW~Jm_50`a25p~*3*wASoPrxqRJ~Y=hAkwT!Jlqv^3%; zw$H58U*p&b581SFIsSh99t)+O@yoQG8J_axC#^ER~!(==q4lAw}N0d-P5H z=%e2Ep((nXb(*uCp92x>cytsi;T|qvdb4&xJw|qU}HClOce()6WXb4AIHtbNiPQV1k1_v(zyr?7vt%- zj}?kz(!o4o+lS7e_OAZ&ue>hVLD_l*e6KvP&04o6TDknfHbm@ zKKqCiuc7g{oZO*j!(zzAwL}mXDnK6U4igZ7jh|`>>Lg+HgO=rG5AeS7FiBq&Uq;o& zwXiRkW@TCad$Fz zzQMMZfK4yNS_&|iCp7bK_=X9q!%VEfUXrNG&`thgf zJQ$Q>xV=bO-o5v2-kR^dCtWvE=UE(+3;cGX(*aMQxLU2BjsrFQUPrd7g}AG}Qz0(w8dj;|vFF*G@BS^){Nksm+pl7*n*mLyQbK$!I6Gp)W_nLjE|V+Sb5z zAt$Ek5uxp7&in1RZb1JxY?r|+C+Ao#YGij-;0oS{Q#Fe&631Xw0reqPcQy&w(03WD zdOMk2Z3dkPgqPgv#MN|s+P9H3z+>42+PpT8DKONZfN|xV0u(kxrmT!HNlHtv3QbN< z=7!BB=yoPPVtM-c%@ZYo2a85N(QSOe@3tu~elRiZ?zN#OXAK#d8H`U#qOf{I0U7`& z`j1O6L#-I{to5aq_&&5YMDTN@8ym&1U~NwiLU~EZqP)_jB@&JBT^9;sFy3jjv>P-P zQAk95?d=wqDOMLXp;p>BiGGE}P&$POPx4j{^GRW7hp9QMFsu7we97x>C~g*AC{5_# zDOHZ1&54ETeT^s%KGz3Y>O=O+^?628#;w(`?9!RcE#BfU;1(fVV?x3SV?wjV^|#(b zI~;iy^U$eCe4j~m;|fToRXfkDO|dg@NXl;Iydu$6jU!?+c6sL3Z!Zn%?j@eN0*Xja zP0Qjl2yL+_554TX5FGo-BqBZi-kVNiLh)EwW=aB-U6}2Q+4jN*k)Oe}4mZ;3VYl+c zQY^inOq=?oCmo}A4p(b{ee7Cfe+aTs`m8%;C@vDmqqee?$xm*S?a$@7d2R>MA4W0S zWDvQhV(3>k`)YekY~ZZauRCMmXe39X8AMQhXd&c3 zYAh5aA-EHIpRfrEJ2e(q+@Fymz}OQEnu}H9#*?A<k-`A88af_(y`EJ8 z!40G5&SHLJnjwT2Ho9*Bx3H?13~M{|rFSRWNlLMshK9*5Q$;>MmwC`}0CGHa)(SuK zZb06C0|gr6yJ{j+!NZh&FctAum4#zFrSWZxQiG;46ZKa0x^n=9T*jl~CDiroiB_=I zV!}+!aBm(m^ymRW^&gJ&%L^WzCz+dG1=CYj_qcKIgBMp~RhqLg(IDLgg=0uT0#;-M zXHr5nC@?y7g|lI27RuWR)wZgz!?9Z!*>~1#N#6d7P*P`kXl^1v#nydSK;(Ov<54#9 z_?ERd%S+)Be9l{i^W!p)RklscZTR0&5?XhdYLhIFR8$jcj)Rl;W@HGjy%>dilx(Ng zT|95DZ+mEs=F!U}8J+C{{zW8EO5;Z#!U=0*Lftw%M(=%1xUkXKVf~`o`_iP$U@h|ScX-R>HX$xuiezvdDkrD z36LWT0WaJ=&5`*sdvt|mdgBbJPr}r>8hWp11jqVgD8=H&0>AKE8s~h0l8;Mic)PxI zr&<$Fov`GKXM=y`^=p%%Ihr@N$xTekMgH{t8oYtjmP%Pr!~N6G=M>^-XS8zZdt;C1 z4b0qFc8K4H^B3_hEEw^H3N5OprXL+z*1=Xqt-IR4N(Aw+kuNM7Iq6x6{yFT`5Jdp* z#3))sEblAtASVPnYH%s&qK>9ZIqJh#89Nd>MfU^DXe0B=P$m^;)FqK&f4R$E4q{EVM#RIncc z8Eg7Z8_xNa;fiakudiRfuGjBdbj_6i++a1OH}JP>!8Y>+HsUh3!yUUKM{ac`%lLR< zQ=xVHMymG<1L}ZT5G7eU;-*51te*)dVTT~xAZfyH3>(4OtMT-1lQ>N@W{CdE{B>lMd4yWrP<4RrIz zK$@2+hmDMk(15kxX{n#?@XjH>p%wdsBsCT&ox(CO5@nZIsnJVa5y_l?)9O17^8!GN zD@yaBj8_yijxzVgd*&+dIm!Isgv+>dM}lFH-K15I`rSGYDc-+x<;*uxDE+_4UQdy$ z7jCm?rv1tD;u*rXOCOD1LTH@dm@h$Dr`5H*>u|6kVK;y7XHJ{D@a1l$2w@XKFc2(( zg?}AMmr;f7_P6c8^XorLWXshX{NUg$+&4zxJqpnpUB zj}!%r_|n=Pw!iz{s!N(`pdp)TibzNf;&= z4k3kJC8C$dj;);JTlX5F3QB5Ib8}FjhnVS#vQ8%NU3uD-%mD}B#Zn233}J&L zeT*8n)r+(I&CP|FLR;sfUUyX}ov$U=Fr#=MbCT+%HmSvinKQ!)$5vU3#!cKkv(mC($((Pr5n!|of-zo2_ zrKEJ9v%k9m)tAGXhuQC6!hx?7Am4w)rRYFhI(Z{Ix4gXk+r+BdE?pKjcibVRZHGMdy9OEEZ+!8GS|S!QM4AvJF`w16rq>W#%+ z7>_2kqQ5!L_Ap@@G7Oj6jl8p}za*fWoNmmGKYv7x5U4nD19eyl**FKLWCo{dL8}$D z1$BTvB|hEFXudF=w!}xl6N$mH-m@{zjBeW*+G3iTn%&*qw?aj+Gt-vZl59_wLmeP| zJMmH21ye&quV_B|1}~}@{CW5%zZxB6yUgmU!!q_1S4zQ=!+o}a$;ss=5u@8(1YA`m z>4q#EGLaF>x{r!RB8bn|SVeGtxI;CdCbcENY05M1%l`aMsrqo)oWYB;oA18c$;|j1 zNb_MgI`z8~fo2CbBV;4-wxkRfi9wP8P>C7CmhOBf%Hy6YiL&AK76|a$JTV6z)R`ZO z>G1YfUM!uTkm3eDb}d-(?qS?Q>7+m1L5Qe0#i@DrV4+-_8yzJY3}OLwRP!ELCQ$*INyYA}l`NT$d5*epbU?k_VdGNr$-*>&vVnTA-4U5mwp1*y0+1fs zS9PV=SHc-EG{n5E3%52EC=Zg-V@gpU=5xv~8>TAlDO02JE#u$KbNFeKj%j)o`U$%veg3D&I-`lNSw=vTz zc){lb6QW|_95F_W3PGGRWdXz{#l*)%TqZ^`PCZ!4ZVRn$&RqYDdZc`megr)`>b>XP zd7V8ZywWTVb` z?vp@=qb1($WxVY9-laM`<^sJvJIOP>>mf|pt_Bg@C(uyNSQsVc$~=~3=UVo4A$tF{ z^*yZI<1YW}3}wbYH%U0o9niB!rcsCx&{x4DJvDBfCk0(mon?>rSC>T9H*51h&6Yl6?56Bb9diHYIO5IBL8NVqOe}5}kDx2YopI8prlvrfXTh3>?7B#F-D>*npEU9aB>QlJlauxr zd{ku-(({zd`_TaD&FZ)@#eK9lnNU>3v9mnbS9TAoa)Isg4~xXCh4Q;Ev#a?*PVZro z9DeJ)f;c!_HFou)dSp@RqLEKw-;AlG9?Y(s?OXDp!@n)TE zL^6lj48@9X0^;0TU+xzfUsfdYX*{UkV(@L?vVV{>?MmfQxk^b<8C%h5vG4I<#Itwj zf`6c5GywEwFC~_rEzOhZgZa^Yjk3LRgQe8?>`!+l>KhE)@^p8k^A-;LRr1!n`xUwW zQAcZCJfDA{jsTh%$g(rn5?5AvAl9+rp5Ln=>wq_CIfej9|1zF7ux`~tn35s z@B6KhT0OTgT3ApjbLF$|pDy!=IR(R~CQ)lJQA1+-Nn~o6N%`ee`ESY>XM@z!}bb5eLys z>Z{`6BKq`2LE>vE^J<3n42GSpp}jS}RbL-SE+d%hK%E^pr~n&U*?Xbw0WN%aBBk~CC@zDDPf4ls<*H)U9X(J=mEn6X(Do8&nY6MZw@~%V>O@lUl*Wmx z&svb2yA9)&TNyAVmWso{11)}?eS2O+yZ{bzfha0!Q8rP_6yP6 z+#1Axfc2#KLCFCWKRV}R`a%bbGA!hG+eeMvAu@e5&VSP2r7$Xx&y#$a`lAmVP?9xY zZ+&ebt<1PHuVy^t&^DY`piWg{e(-K*fc3h5L(^MTu7Pmp6~nhgyCa9gb7+0+^<3sq zm51)DS4MiXE}w5>6HY^RVz7FgZq##DLtws%EPMQ=liPH-v%j~Lld*j4Q@DLIVLUDP zSxfKEm2Qpvt;(rV*T}=b`tKHt8wNx9w2Y90@4!Cz`%}4>vJ@9l&Sv0!*|+8+bz-~e znT+}8f^=H1hO4saF(!E+lq(D?6^zZ5t$9NqkFuY=p*Kq%5U8G%`cBZO@3qnLhE2^GMB-1M%9_fIj^ z6_3ktPY8&pCAf-^LE$jr;$+VJ*WMNPYNMPs4a%pM{zS%O0}TinDj`M)9!9MCOp9Jc zKPmW;1qA;|r{8otFa}Uo>r-C-H^jx0hUh8F|DTMl7NCDNVCm84c=ngsWsU=?Mlbng z5y8|i1Q94V14mgDw6u%P$Iiddx(wun2|hF;V!XfS5_UXkh+fRFI~RlfT5ZkClWzG9 z?th<#q0SLbuI$P9ua$V@k*z@&a~kRP`zCt&v;t6@UM4@MY?yikxh9C4oyCGhChrK) zp;`Nqz^{d$MR?55P@dP=@1ei8#(X7L_8%2j%6r2uE;|e9~F25^K0aHflUvaFN+gLoCue~ zD+EfvkgN&EeW>4yu5UbeykOx?11KC1OD2HzSIjS7_>ZBT(4@n^Z93#iU{hffjOh@5 z2mprE1xk>5zFI1E=S1`5eP#_0;KDFZP+_^zMs70=;753@GXmp}tX`P>59#|Rr2~5$ z@m2aZj6R|~A;YO>>ca`nm&t)w@F^V6miX(zm)ygviPs<{#-jCuxJzqc(_{PA?mHg? zBTn9f0*pQMpM8Zy_beneZHe4l$Ml*L3oJ(9#Zdf}0y7LF4WyG@0oWHIwTQ6mFEJpLgPZNfk3SAZYhlnh@^XuWu0YMjZf5=BUy0 zE7AUoSAKF2eh5IDxbWxyvDv4CgaG-lWd3X;L_X{nx`_GEB>|3+muCG_EdzuASHQWC}O~wC=3_GsbDFf2fK`)Dtb=BKb2;-QKPX7^+PmTGb(`pUbUIQ|RI zMh;*OfTLqDR7%U}M2R=5=J>RGi+<((PmVlWE42r}yr@_pL?szN52;DpS)r@FhrzqZ z-WBMy9e%}T=#<~8YH18DOcs#u`Y=_s+?gsR_gAQrU%zy|BJ6P!*y)g~PdH9#idS93_v{D@B zOcH$gJ@D-7eabWnmrT4g)N=+n-i{QDnQ51IVXd0Y@i-^XB&xn80xs(?EWEXIa9&I$ zX}*mr(@70@{t6js8NQXXFshg4W#HLvPNZiXcW~RwHYylc$u)}jX{J=Hz5trCP{&2L ztjj+X5slI=j9h^uV^GK+h$lL)%Rgx+MFk>~K>6MV9h9Mf*B^s&hJHjQjd0ttq8|6t za3$x>%LtB-@_m%2Qa*O|8haEc(@aM!>E=u{Zja$0&>q&1MC!9GHw|?T5)d5Ga(F01 zN}K`iJsOIP7+8~u6?D1xr^4{4yS28uT!*ZPI8g@lAf?L&e8d#&FYwu)QL*m9$+J^8 zHgQ<^^4HJUjxKleJA48{x;$6r zqB`hbI+?ME<|?>MoFWQ(%JieOkZTW=7EEJJ6}XMO%|{CJa(72CE3?)X5E6&b>GEnG zT0R;f#a2aUgjG};;|j>~0WE@cLAIK$&bx+|t#obcUqem5tIhRRmM$d}@bPi~tJrWa zpx7%_3v0F`Yq{0Zm3|gaJ5@8wwMgE)5g>o zwPVP!eAwRZ2eNl%nE^?hMH$vs=}(^yAKcwU_3y;U}_rJp&y@~OledwoWQOr_FG9pI#iYqD=^~5wrz}J7sc}v*XB2M z7@`GOwXI|$gevsq_DBaqcL+FNFQ|gLdm<&+sA5pa_LT?)}3Wcz)PIAlQaQwS@bmEQguM5h#hsQakk|JOHXEQ@rK zvms0W4`2559cB#xV!W9~0`bZ@k^|Mzb9Um)fSf(xXAA3TYk;Th1mhxGLZM%cc7O z>}ctA1W(jq862$d4obDD-zJR?W>{M7Kal$lecbn|gWm7$X8JXWMWrK=rKN|vh%Ct2 zLgyIBRJzo^u$=B0;M~Fo*%%HA_8)`#O?^y{Aw{{$RbxJRORqL3yp16@H#j$2Cy% z`C!tQ4cIqJyV~nvKR1%vPgrmVhZZJd-53%vW15$jds)r4^6<;fi|?K2jlD_LgPY0D ze|5D9n|n+s-*-;oL!`j4@P)^&H^zR5GWC_=(!i#YgNw3{+UiQI*f%!W61zX+5F!~h zHIox$7S{Z$mN}_j(+Xa9J@kwDi4uOY@Zo^eGq+DBxBZfb1}WMe zx1{Tt4Q)qX{~j8U+6-1=Gf*TzaNen~a^IRe3jEAX1i6FA9AE&xU8v6}WKZLsWyDv- zY8Jhoq}m9VsjfF`vr6eY=a&P+TbsXs%-N1u-eugc%kP~b#dnp==N)upf-0QGy;a=n zhu#-2=h=+U-W9Ok=`q&bSGB#=H+}xNJCF+JFVGv(a=LUXHyCnpG=TS)DG^7Rwc1Y; zJeZNiE5NAUE#E)7wfrt2OQ6U6yr!zT52y|xbBthZA~l^xSFXn72gM62TlIswbzId% zRkQ7_hXry)DW=Y3#nTv?DSzEIuy>LyiR~Ls{Yfss!!Q`Gs*tZc$T(Up-8w9|8ySt; z6%^=M98-ir{{&mm@WDmu<@oHUbVgMBJd-b?+rO zzXD<4zK{k#gto%Z7v?+~)4cxn34C`N&NRH?v-h-d;L_o&6(U`I2006?eDdHjv&*UA zIUq$Wbw8-JEjbopPjQZr9(RC-?DW0Y7%Evv-m&gkeb1$TE#>gMXLyz99+`?YmKX9V zUNxUkW}FdsYw3&K}$yfR79EP z$~n!?EQ{i;eMpp2$7O;TlNlvHrE!}Mw^6L6Pn_M{o6y`KC&hL$eQ&72%(fjaO)pRa zQGccR7ir`!vKc!$aU*a>SBtY-2`W8~%y_mwkV34HTz&^vyNY(Ddi+%?&tB%Ozur#) zT#x8mXQxX=@V<7pdr`C~Hw0x^eGh8EBhl;%?GQEfd)JMwsc^1M0%-AVJJf%KCUYml zYkPE9JrKQG@-dwY!jN24EWX)$CH`??vNjbJf`d+l)&URT&Q<%D>!&h1jr~=r5p_C4 zv+XCqnboYpzp>T|X0f_+{j}P|jfAxCQb^JEoHgR>?5;h#0~wmNagg@bl39yzX?hXQvOK2w5@Me|r;yj6%2HTd&fZpwgynAsgn(MtwwM|bD zU}xB*y?pU)2yw{9!wOBY!-r{P%`25gpK#$!L7z&jcoDEi39ya%({6Q(dnhw52QZcG zE7e}%yc~9iYYnB05ib-3j@i~f`izoT#_7v#H02vaEKE*JsoIWXX2)>)pToc-21$@_ zZhjmQDSoRK2AQ_`?8&3efr=b0!T3t(pSS%ZW4|~ z0u@ZWlFBg<>M3R`Hiv`Qj~OSz4X-?#9clV*u`#G?cQ~hckjW6{A4+3`5@G7h$LVtpFB!Gb^7s@k@(!V{7NmQ;2##-A@{P6 zzK}LFHRbEilPd4qs209EW`Q`>l^gi?maezhH#(cC-~6a`%M>o4{hpB1wk>?#wHC~o z<@K59(`ifN+P#>eol?8;&i;H;TNh`zV_xE}bd*9sOaExIB<^b5jGpB$P%U+)<9gs#Lz13)$nd&UgHG_>~0}NuUW+r|MWh+*0*mG z`X_<^V1k@ac4e-BeDKWAmPhTc$KUGwTtk8pMjAmTq7w};jz)WGF?>Zliub1FpqKDw zqmEZTn}8u$>3Xi*f+IKZB8HSb$wPW~x?w6V!=8yno+^1ps+Grn3UGt6lS1UwNg=Xh zw!b@yJ>&ml?=8ckYP+yuMNk0|Pys2yproWb6cLF5l$nbv}Pcp4FAO9jE|*q zxI^399d0KxjAt#%rhMZ)YI%vr4R=Y57EXEf| za2n|ff-d$7jW8MI5l=uaH(!WGKcv^xLwv^XJKgu^Dk?LuGNhn}vscYsVPTd^eZ3oq z+VA{DzRT+BfreyqC*v6Jc+mNLb8(L3;Q7$~Xy^xxSJ;=ppIfk~h1J!q8X=>>w#^+i zHhK(eOFg~)DB8d#e)o%lhl_8gLmv>oA6Pe5-?y`7kZKCKZwASTVW}IyH)Mc?Udcf8Nb$e}}r&rTh zl{Ac=zr;F1o}Lla`dh_BH7ASnvkKa9rLHemO`HzBzBt>dG~6<9&5W@_y_WD#(|}xB z3(}_%;9#~5Uv0?>(`g$$%oR9RmIYG^n{K{hn(sFuakts0>&38_S^wn(tElhHZc44b z;zUt9_1Cg5HG50pI<x5E{5`4z=l-ZDeFYI^L;HMt)Lw}$b6-s& zde{`VNO!yR+A%*cT-a8_o?OGU~&wh;Gk;){{nKpl7U+cPPch5LO)>p6D- zxM-zuyTW;bq0q~ZmC-N3_RCj0j9Y!SSU{_Y2zLC(jzG)S&I0@^(p7Qd^oOD9vYVRw z7hTE5;vCdi9w0d0`o3=2o7&Lu9UX=JiZ<8pGG_xQ<9}99oFF)MjRXjYnZ7dSAdVk$il&p-K@Ba&GxpNOD10!#ZQBld|H~zK!S@!jK zgC7qzVG7NbxxJbDK}9OXsAZ?GcHrsCl&bq^l=qmuZ~P8$mr4vZ)spWU!sW9m-e(<()|rghi?(HKY~D~AIa3#lz@gMZXdW}SG;^p9nGdnws56w)k2j4}KtE<;ch ztt?uUqrhmJ)WOyO?ZY;x7m~j4T=NG}b;mB%Tb#Q>gRkn&VD0_V-ISe-CHa zLn^v#f^v6PZRnX!cYY&6QwJqC-OzD9w1vlFd4h2N@m)Ygglb&Bn8;!A%az6IqJ*2Y zL_3?&sg$xW9rq6ItjYPrvzX-D>I|%#^0BK`U-PBTObg2oxU`nG$6ca4wTOiktsCzVDFF(+@kTdH>lSIC{h)gsTvcjD8v z#q_in+OXZY3c?3ym`s~j^nQ?hU^4ujo8ENrZ>MU zt9}N?{kb};3J29H;8>0BXt?Yi1xCIBzB}uQ_FeDTh_(Ec)VwIHiqMk`08F}0r)|j} zz3F&wh&hPzyYrYlFSi>abY_k@54@`&?BOMmzP z>a#j{%ZGfnD-u|#6uP2lY5qc3D#CLTn&c54X|=MGGPZ%>tCTb2nW%Y%TC}x+O*m~g zJYO=C1l`Ap@OgTbPOyk#zBf?W^;OLAdQn+Vph^*4appG{jR%`U%bSk;ZNy5Q8pp>$ ziv5>0Ud$`c+t!tu8hw0=zl0<`-3vMA#$^vSxZott>45;6xq=%NV|{(ghiYntra^H& z_G|ZkpIwpmI+jH_xy@uwo|$hRp~Vu>L_NNq%5dist$V%4=?3>1vOw-5HpPkk`=5+d zVr}F3VVOnfvwXiE3ha1~u`|W5czQAhu};66o61#LFAoN zLeGv_7d-zID~ke*>`*k>p5FWX)Q$5`5WMR+8A_LllF9$mb55@%-U51)k43XQ{{tX1voY9di9(*H)eCK^Dw{G0m!c!c{YGk}>P0OA!3od2(s z)8ddT=A*DmK0W8lzdwml06@2Fpz5`AzWn=>A_SluFV+&{-{Lr90lD;JKro4cKe$h+ z{7($4!T>1Gxa24EUj+l~hLk}Q@~H2>QZ7#pw3X2eBF{ALKQSX%3}_PmPo@5+QvbiJ z6l5Hub>iGfK``#TZ$OGACTKp2YXpX&d>gd$ghr}AMlXzG6vQ_DZ8O0^RibVZjLAuz z_-Eb%B7^tRZ>bOaXx@x(e^MPwvL$8&=2*T|v7cU6M#Ws&ky&?hw!@q+mTLRvbn&*? zSgQGmtta=oisHZQ2=W?3`f6q{R2B2o*r{0{JI>%l7h@&1 z$!=^vrrLB>qPSDM?S`2MQhxS^W~y}SI`72{Bt}$jy?p`CFlYVSfk2FK$@7zxUj(|H z*<~H7$1Bs^mM=W!FnPYr0Xk^+EUnXyxO*1g?ZdsrawfHrfw?HIoEghSOJf*^(e^`) zP=ekMi+zVYc4_8gI(tn=#2a;>4sClaV!#ne=c9!CvIdFK@M2l z%^;mEzB2dBZMjgddY1FdWeL6l{FAU!|Je~NvfhF=T_7imu9|PCDvW*ZI|q7;128F! zsja%rNvZt`4vtYr8Fp#ps4&ORqVnRju4&eFQD4lV?)DR;6cs0BS# zW@3}>`pV`i9l5m+7;}Y}A>!keHjhhfNF~9n8kK^=!jK9D%;O))Kf-1_&edaz^2ttf zms1s*QAVTEGE_B5LN(X0uTx#ECt@hn)N#I)xFY0eMm_0{a_HMOfJsP{_%6}Iu83ME zeS^IcLBDt|gCYCl`8VqPtlyqUBkh#Or)zTw54(tkoZP$jYvzmc&ct=SyW~Jg(*;EvDhh~6!IiH>U37FT}fSUv1guy|xBz%Ij8 z%QeDVo{9ytkZVU!^cOR z$yHu*s5mL2kTDXXTrLAWpREyu`1;aH0zpa>>B>>AC`DIYfc^T&f~$UiL>r|&Z}zz$ z3Tc4A$=(p9{_s}_6hxpux9zfz?#UN8Og-A)u1w7Yy&hXKpFK*()}zpF*w`DtMV*>Z z@rM7Mi--m{(Zx<+m0TP4rS_Soxzm`(>?~4j0Zd zh!iY9g$tQlH*TGpZ6gM%r_o}mvingOhtqNZmZWa6NZ-$((iW)jPnO*6EkuZ*cmlBH)-fKe+8N@35HMreMq?PU! zC4F(s`5C2^n4d$34r#g^+5mDY*9jrouLFxE%USr$JoV+8$!G zi0p8DX5D(gKv3Xdi)D1nnBVplmUyQv@JPY6{jkotu`-s4i09{MGXI z(ku5dhQpr<>YarOtn&yB{&?4{*UDXXhaDkNyE;lIuGHuiISH?&A_WQcz06ch{IO`3 zjJ9j7)+!Fd=M=C(Zo4Nd853;~oQf*tF(f5xFMn~)EKd@&k#61=?Gl@0xNdjYgI$>l z>hQQJlHHxPJeE#xcktXjCfcbPh0U|5(%$>q{*Kxl4QDW*se-ZiXhb!ay(DoQKJX}$4f9}T9p z8YHB=Owfo0))v%Y=yZ+-A9|=ZE zCR0ZBcL_K5M+*w#uB+t!JhK)4SJ^%(1#N4eCBP|iC#uT5wn6;+{f)%PI|oyjz}uX0 zOZV0cLJ@Tkz&**J5ZH6fuQ;fBH%wn)_PWHdV`ajd^ql))C1d<(RtgNC(X;n1I}!CNEQE9rBlXBs#T$>7nv<|?ne0uOWi~}7%ZVoD|#2ppwySA z+v`i~x)lyD!z)56UC2Ml^WW*8{{QJ^hz!p4ox{DT(VL9M(~A#pb8CmQcQqBL#@2`M z&YPO{`fss8w|eHIzKUW=wNihE%5lyXGY8vpSH{1ZDdK1>eqN8DVf7L^r!MU|kcfud zcr8)p-xn`d6upQDqKtsZl#C5Eofz0Dbr`6P#SB%N ze;=L=3Ar9gCqAvauV5wBdLHXj?g1j`VF}$pJ>%Qyjm~fRSQ?-U?IscE#lOEh{S{;m z7cg8t9Z{*%EC1n!u_$QQdu7LCJ9IA){P*wwN7Dbe^#6n|b>QNQp6&(kAB^SH*8XRG z|2O(5h~}n^SM+%veDW#e{uBPF?jaE>R!;WJ=gjeM#**3SaZP7UWc67e#AGw?J*7Q& z_CTO!JprJQjdFi@Ku8dV1XZWg65^rL>f-&n$)8An>}#%j20%Y?$i;s!-nL;;|H@gx z0%UEn$pG*&N21{5brDPfQ{qI3{`@(1W0qst@3E^(WWBNJgOCpK<$GQIHe&8OtDD@( ziQihBo?2gg`nbgPC;EtR=_%-G5-T`>o^U6i0nexIj#N~Ir6o@*DX~gxHB}{v2)Xn+ zN`AQS(bQ(`puK@flOX6G4YF^@n`$E<8_Vc%uJ3W}w3O~yv_FYZkLBL9K*dP82K`QH zr4u5zTXEz&+Bt4-+ut&b8{eTHvNxJhFqgJZ(2Q5{BW;f#a}tzVB5hfoE!3&B?ZcXD zG1mfaDk(QU-kxxi#NV)aim5T#S3XQ2*2C zMoPrGw`t6$mi|-9vTxftCoj0_g_-S21sD~qprm>_88nbuL!f4+17*UXqRKIU*sie@ z9dFSJZ!fOkcmm4u%{o?IF6&Mt2KL=3$=Rq0QF_J-83)SwQ_h_{N!k!aw^w%XeTVvK zz#G4V>e1m-uo*hE8N#R!lADXpE&j0k?hBKYzP`S6qu-rT<%MHaW9o!NUa;av@PmUscUWR! zk;$|#^GsQDX>Fo4Z#t^F5-R5qq3{Nze{JOpyEX2pD)w$M{eIPY3DI1LdmFH%I?&#u z1sWJ+_4Jg?SQk|G5u2E${mCMi*!n`c!F5a52N9a_&mVJ;y-;O5Drhs_@v|Qd#_D#s zX5MLPZ@yVn3DmvIAyU`LE#^@2^ON2Dd1{l&Iu^vF)CcIf&M<@%Es%c-AfbFrJbM{I0C>Usf>Vi59OqeOE0BITL+vVnr7 z0s$eqqAF4vZ)R3Euu7j9{!?fwmmWE*L8Glg#BjzPGv2;RgR!qsDHn1~Z`}Q@gGP$v zY%2j}^U+j%khWph2=*UGHdJNuVXYxAc>Jk=QnNVsVcPIS18MD5R2uZjw6oqo>ro4BSXtQBYoQ~WcWNu zeK3=VUC?f!?Ca5j*;=M4y^^M79W)5h9nMW{y-vqPzp|Z3J>eSoK5mN~|4@5R3drsz z<{1kCC6=wcx$fqXga+(zqErykx5;5|s`7>6wpy~3vL2`sv!8D7CezmF zx6)e%=#Owylpxq5$vy6@Ne^#ZQpgaN(ikYyuTNEMT~z~;?kdsgkkx_JO7|wBx=GQ) zy%F4HB5|!UV~x&{3}cR%_%dnD)Y|?tn?3Qda*uLmMOGir5vrXhu`4HHR^=GWA5s}} zL2_)agk`If1mwEn3KI|CKOA(Y&VqBis6dV+_pjs>j~;#qNMWlC!9z6?A`g%5socVz z_rztaq#OIGB%aNMFYZ8g?WWZ1HoIMF;ly`v>jQj;-P(Zd6k6rv8ElfC{_fRMBP`p? zYK~7M+>Sd7jr`xPZR`BuF?0NpLb=X;oBeaWsnY=u2aVAX zyW1B2rrYwp&F#g`7`G`3HD}@c(Ss?LL4EI3!}6oq=GKGo4035ql>JdM9>ZA5nNO1X z8}MTPxqLDuDuuNLT_1Sf&qbp(en~sJ{XYWW9$F|zIe3$&UFb}WG0;4$6A^i8#0$%P zu90Da|?vjyGimgXzb(IT^xgIcV%6`RBd!|VPDd^#H zwr&@G99HQIO15!u(JC#Nia~t7@cQJ^aKIsVug!MZ|9)bM6(q&X>4(yY4F=42!=%eo z;D`t7<_(&}ggYiOQXDKjktp}Qg4|vvHtd2;`Hb(k7Q`)mVWr6ab2t`1usEl?!?|0r17vk#~}YPxvJEe zZe5U`!Y4nOL+A$1=}k|(rz9n?xs>j+g$wTBqyoQ=CchQ``q7;fE?REi(v`i7%5)CQtNu@w>+ReQ$l+E-XrwjOyUtbs4A7$S{9p4^IU*v-Y9^ zfq-F?l+);P>}^z67ed#A3cIMjj*@2P;XeclWGb4VM1PXS3pH=-RkT~7qFvkdxL9?! zc1O!^Ksm1Jh$-rU)cTX{^^;iHLuAbrWZf#I8W#H99g!&vDt#FNTLsf?Dy?GPXs%gf zF8*%&)hVN-(BKjN$`an_LIkebXcr{`j`q1T`zJs?2HIAMR*~Kp<)|;G+1ng_Sd*uU zafL1G#vr5?sUDk@!xWF7!Ntk@6|)?=9-*tQMsQ zY_vY;P1=I;Yc1JtRJ8tloTQBAF4`BV^%s$UxZ3NH{#87o16H~&des!8WZ`+2K1QTY z?|>hLcFuO!AT>zuZcdkQ9nA)rTY`J$o?T{BT%pv?Mm3T&tH-^l6*;^B#sIgTq&_wB z6St@chHzYKASkE;58faM7E;NvUP4R=S4Sz)>P&m^(_Q@kH-cOzy}sm*So({XrDZjH z1NG~ZWiYo&19kDUKVuF)GIg!zpG++%UYZWFgg@uyDrR?|o5yb{4cg0P+=d;)*B6atV}_&gC4AA=vV1%>+#bSlagLaXJXxV?0|Ztf|G&< zbYNF@-(Hl@_282Z=)Z4@OMShl)hN?iH+yr{~bk)R{&VfhJNval8(9k2cLv|5R zy|DRoXbN~Z=g+!i>Jb1#N51eZx_B9Abr7T|b*auQ5|c#q`hr_f58MWhB}-V}Uik=0 zwl!h?EU*;WyLZ4%dy(mYEUriX5Q(rdcwl;>spo7>0F121L{DBQx1?d>V|XF!+pwfn zaJOpANDNN{nmNO)iRvE7)l@D_W8WcPcHhsO`iDOOwi{~lXgenZQNws5@Adk(&YQwhPPJ}hP&DORJ&>1 zKO4_Tonwvv5UYp=Xkz-CR{9HmBn1q43u0e4U-qAk`ue3#O4Y5UCb95-g4C8>O6JSn zmLywx;558W)NGC>nll7s6Q6#X0ManTgXl)Z7Iq$Q_$@U ziLBMJ^aD`^ztry@y<1@V6iw(pJPBQ~w7?fU^Kuh7j{?DL(#tB`4JP~BS}*`>X?XP& zbU|>kUj^$?s2NE(=g^EKdtpknK3nO<-kSpfZ}BoCj&mtyx1FDUc}X3+4lC6s0*Cc< zcPH34)z>e$uof9UZIz4C<;Yd4N>x=v%Fk5*C~1vQZ<0oITF~V#93{}{ zO!q)Oqcu2(vt@2Jn5yJdkJ2$@*_jR1SmTqmIbYBn96?PsAfe4j;@`gLZr`Eaya~?N zkW7SMX-I+v>Uqt$6eRb+vuK9x;x?t*lf_#N`8)0}T#QjbaUu6c`BHjw8{(pj`617p zz z$J9`xY+Y9G2G7I{x?*Nmb6=1nQ0OE9L`NEGWd)r30YNPE3R~T0*(5|Ev|92dCHC3h zIFgd~Vx4&6@vD^F0^J8en)wE$7NDSKmn+qsw!Z|XBDc$HiEG@{T(y$9BOds)PSgMK z6lwJnB{JqUz`Af5k9K7aXjbfNRv7H7sr!!cgCvqS2EBF4Ow@b`OlX`|;{28>wBe4V ze%uYy*<7r=iNykuJvI*#r<1rbJ5jqwUS~&dT`ixvMMY3fK6Fupmw+%2%!G)o4C9}h zH^k`Hj;5{?P~vCB_(vzrkb(aWlshI~LAN-2&Tt|a?8-!Psau>o%WH zb9qYfq9{`w07r@^@Yd%1g@9C+;4Vo7KTrU;_xMUxx;Vc)K3dzvxE8?pL7o#EbQB5B z*eDPwtZvT8y})oF02eY?97rh_GCVuJXtI|tE9@=EhUz|!zv4~xF?y02+*?GaMw!_! zN(i>$hd{MiO)eTfP|yPX2TxDQu=AT3NdXy?FQQd%=DjFFkCm4R8FEjBRSto!b@fG3 z=PTOA|*8tRjWT?jHJ`$dojy9DH1+t>RF{J zU9@5B1hBcM4sVa=jNwPUU30HwTrr>d?HPsc*&Ua%W2Bv z;R^gKC~R3l@%X-6dSttTenYc)$}af1P5tRGUkQo~5@o^5yBnjqqNU7W264UBy!z%u zdV7E*x=VKymnKO5$fr-*-A%`=SxJtwycaxc2*ne&picO*pOc>*I;#j3U3q;T7=s{e z=+)}|qRK5zWz0g(TiE|-3gi~XCncF@5)2nWSwR{! zW_D2tqh5^gf%GvCTJ|ZQg-q9yC%zSd+GcFvLilTZ3v{%DJqr_MmL?M$O7Ld_g?AbK zll~w?(!wBv%|npNKweVmcS4RB(1Y-;JX5O~_4a|-tfZGq^cRK>{*f5P3IG0nJZgP% zkdv)uH)cf%m#%6~eF!sgv~M~SNhfsrJ>n@#yr+l`G)Dr;jak9k>s8UICyLqX@`O9n z-ykZCPlqWo&ZkZ6tMId@ASxMku7ZN{fWw*m<3PKvn)Tk|9%J}B|F}M_hZi^r5K{FM z6IcQ4DwK60&j!v3QN5(M%+o+87zEQDM4>t?GBs)TcwFTBJ#Y{471!LI_cH<-p0j8P ze`{#&ORY!9Tzeax)>to`8F$~#{ez}odFU7lI~IP9sKaL>`%IHiKWAG=#LLEP(7cL` zmO^(@Y15*${)HKpf80&*YrqN9u$AJUQYcM`h>pW}K z?R?6=!c({$Y?#SXESIqZ+6=zunFPvDW)$*AV#j@-WFPRIlrN*>p`R)UVTLOr3LGB8 zG~J+eq?S*=lxbF>@Lb+3;86Tfs8nwD(tRU$6aOH*@@R71;X;~lV(`-3kOe8L#PWLz z&(2hzS^?7S=6YB*zfnlF#W+&af0=J@Q)R=O$Iifef2X$XC+(P%mBq z56W*SXSZocuBX78GYZ*oQnX7>9GT^EoI_l9ZdJ? z7<0S1*n5MP-qFK62Egg0;CXzu0p(+sa+~$O=yro6LHX9VRr?J|!8zk%6KfL=yvMzA zEW`m+c#PNETOQHh%};3^CSpv5up_X-tXFZRPon=EPt6bp(Y! zn2+Z(;r^dl3NW4475B$<8V}?Z-%$g{d@8uWShEc|2pr!EdsR-ho9AV0@~;W8SH&Sy ztf;E(;2LIKZF~n&6(R}FSq0+)Nf8|u%q(b;1hKuU*%DMqCA<)Mo5tR2m%?<&6K%bz zq|~^#n4OxPB`cV8J`a3{zhle*Y$ItLU-)ob&1QX1&-LJ7YnM3Z-5)NU+@k&@RkYML zJ2QlgBth9eKAUWQ=nca;M9j~L5m#|m$}9qR=!iWsiUSM)a*eZ;BX-;Jn|#B`1a2MX z)lj%kv;Z^nYa1To88p?LsVN8(pZoY1eAMoNYj1Y z7MZ!i$&iCY;SJ@~8DL(Yp$rP80S~ZXh7JU`8fSKuhh_#z=y#K#J3^wrgoUuUXCXeu z7b0wpQr8VBar-DnKzkcrppSk5^d+hkunDD%gpRbMqBUOmhNGJwvXjsUWfJ>ZKs!Owm+-d&#>QA3)`H+jD87 zUIQ$dGiEu9u5<27U_ZBAtHQEcMM+W3`sPoEhuc^WjIH&dq?9*^vpu z?6*n<3eU|YXPuY?-=0yK6Tb;eLO51l0yr^+Iyh8Zo6Q{kY%P>36ENRX>-65d~ zB~sF;qBStOT07or88t;nEO=ZuuR7=rcy#9we{NNYi?uu{;vJ<4A=`xXO9mFIO2r#g zBw6{$JQemr*16ZTrdyS+6%BdDdW%GtOC2Nzdq-~Ni5fkV|CresHmvb{jZS{=rM$?# zA!7l<`Lj+nm3<)s(IKN(0I`r&&zZPS9m~o`A)jTRy;43cj#|1n zOw{P(F#AapqV%76xA$$L>@b!)T|lZp1ErC1FluJjQ$6?|LceceGRSO^uvhA+TY;pj z(zXm)AYm=KZ`c7nx|0@6FF%dp1wZtiCPFqW5Jx%tY`HF=R8V>?Vc_}zTT@ni3OOeHATCm^ozv| zj*<%VFF6@uUlpG%2T1(PtY)gaO~bgu49;GvMGyux>B2viM(c_P?wZ^q#4J#}3Tg&q zMyH6((}F&LxadC&HAGIQrD7`5u!yJTmLNP5dpvk1N=--zN(R~qd%*M1o{>D8-9j`1 zU=s2?htu&|vo=a0UNJa?=A zaLveyGBIq7IG5Zn%t!YrwBTqnQwwwW5sX~oI|_Z)#+NWGodKp-wBo(Jck`-1>@t)F z;cSS{v6Ktk@^}c9K_XK+7Z#$JqFv*K%A}W#D9mozx`PF1uEUeerh|0SU9V#h-z^h6 z7-o$+msR_}!rQ>zypQJk1hbfM%p#oB<7&WyjI^zyOp=g{6A8jEZ7E zj-fE-IZjEWDjY~8YDmD`OXgz1oagUmLRdVxm8 zTIa1?>meI2G{ZsDETZ#4>R(yh8UgiIkkf846#v25+tJC8Cx%5k zD3*_X>9Em=v2X3rxBq$Mxk&UOCY@)wT&VOB)Gr1m3>zyKIdm=GNY-!^?Njf_;Bepd z-2(L+f`&Fl6zmw*qYLf(ebEe}-F5h-gYpW#T=8zmj10e%b4hGsl39;(QWUfQZG}X5 z0-E(ZDt%SDhEe^nH;MI;efWql#&u?M7q9#--GF)Dcbm%$)|>OpYXfe76W@H21BN4C zq@OAd1dQ>$aM^va<6HG^E!EZi9(}S-CcotAVp^v}JJ)0Nk>g5%SlFSfQ#0vg=qTyl zlE%o_=mj2r0^I)NqZ9yPf8jTD2yB!K?pM52*Be0>WZ10_ZlAtoGVI1d83&U}G?@r^lLjqi_@9tP>N8@jY^=!(e~-6{?Yye8o8@PxK^&8qkwlB7W?@M`SOd z!13SD`IN`>5QI6poDUtoq)~cvzdtG3Y?_w~H^!%$gaq0`HklMd2>sGjXW46Bp7yq!g3o!lu_-6DWF$8E_HRAJ54N;!IM_O5 zDtzvt{w8rWPkT7Gl;X~cv8%D?DCtK>>((DdRP^OZ7OT6=AAyv*)R2KEInkoea$cSS zRB8Vz49%f2h3lp_)*mJ>h;~xLS3QltF!8T1Pp;Jw8aB$6wEd0><_I1hQLS(B){)t> z&{amV&q%a;JlXsjtMJWayuTpiAv`7VzR46Eg`EnK!9fMe3NdqoVyXE#ZTAQ3-Ln21 z>6J^A-93=ZINwPDcpmp|W?THlHZ^$2%l#1_?w)&@aMQ`Z<_BYIP8!ZTmpWa}cn2IK z+489Cq#s!~nTiI176(We=rX6)A}ta92dsqq*|jK?e)znW;*`j)l*O3bQUled{9we> zE;EXDD{ujT6bxq5Ul>(YIm}St7k}|*Uy%k+ zA&e4J&Y>huvD|mr8p~}W^t!US1meG4A0p|aLS9d=h57yY!~5nVu2$=vHf+Kb*a{4$ z>wCLa`mf-Ps|YkLRm#?eR^zsqhQF3L3EE<|AheZ7q7v*c$dOKD+_S@wF(PpVkjQgl z5fNer|aGC04QeguD;WUQ&j^%0|A(wqSWCY-{BBXyqMBP9k{&Y7T8O?ev~R> zbYNUjl_gcl6~L+0yF!_CC|XUz#oyBKQdCCM`uA!+{qjD9HKGXE=MeLI$wDM(9tvwA zjS+}1(`;upbQ#^xn&!4;>lv`M)}LYgmzw+NRD1v{ zP@=0jZwx^42rO1ZYrcq2IB6l(LR+dDgZ=$LDv@<)+QT2bMCeqvn~w4qpat-6qWi44 zQiG8!Stj9Q&0)Jes+9(2ggiz4E-drP#1+VF&f?9tQ(gF@Q5P-rd^MpII$!VkU{KIsVvTy~ti%qqr6auS zLqsAphIv_yBOaEuOs8>W$6LBxGd|V#Q(dFG543^N@1BRo>%rcFohbCj2YXsDU=AO% zJ;Agl{64KQzLc&IqYzS*ln7eHrAPY+Bef zsvfhug!k??Zn0mu1Uqu-xqU>gFEsTzw|irfElAlM+|tY5=QyOgQs*=HBS5j_R!*Ry ztyYZNOx#Vh1w{pUdR^=OznaM>Z7)=6PrD@DQik(5`wF7u(@erk)CEkxvKfI9!_3;* z<}RE`@%XXfg}eHy@(3H|sSpP1ePVhzh34g;pWy|n!wId^L8;i+rkkOq52wR|dxXRj z)N&|)m~QMI>`g9jI!$#Qu{m}xg}iRhnpny$c>s+Vq$FCMw`Z6I<}893)cP`fO#YR# zUq)?B0Jy`F3NJio8~*k0^vJ~J%y@2m_*KK<);|8bUHlO$l=xCjAxzdvjGJ1Ol#4L< zCsCD9fY8i6=`EGMPdzLVMT;z{1snt*i&woq@ODc=o>B_ad9!cfQ86&ZeB$(~UCoSI)kf$^g8@j+Cm5~$bBB(G?0KG zyS>6dn0M!HdT7$B!)to>Y>8OS2Sf@}bhEE@r$bdgB^Q2`JYL;q=tflLKfO}RM9Rzj zl?n5DA{}OOeCpGA<%jGXAWt-}1AICR1|74AVbTkWlYXf-(4_)kt7tO)v+Vpjoy>Ug zasd7HZVBbssp2c~q4#ybaKK*-2j(>TwoNCkCPmSFiPP&XqM#o~PBNRR6B796e$>aG zZMte=HRCNL|G<<1v%%EZv?WvszL=d)WI&K*y2Wob^sk2lJ>lu&9~NvX)v$Bkr73In zc7jK_d2?d}vauxz=g}jMS&@-Y;1kzg4@b}JB z&8mVFnlYorjykIC6o!z6`I^1}*s;x^jBLdu2whEx?!x1`%crs)-vk7EJ}ktlYGjqD$9>knO5x zUXK53_8vdXnz!`EfJ32G?S#td%fPZYi$Q+21G{=zgY93fmFFgplQcPt1Qj&qi;93G~70*ggo1He3E&ZGyeA!aMk$8ff+4)GPXMN!X^s2>&0 z7lr$;mh0#$vGDVBdYPz_H)I=dCJ@G;xh!xqe5IVlR&KAKLD(bxVX=H^z_bPRt*!KO zt~hv`shqJ;e>r~4>0?hJ8)|z1t(oF~R&csq1WpP$1n6bHKbk1^wl#1Nt3{%hN)Rd3 zv>=p_HBYQ%;0}6_ z^C|wmb!^NbIf4>)S%lllcT<`+>u1EG!JS*Zd1lO6s89rp4h?($Rt#-WC^Sm$QNhZP zoB}%nO}AHhOM>-Qvzi#NHca^m6~SPWx!#{>)k&p_(}8?k=fwZN=wYAHBET zv}TwmqKm!l!L&4d;yZ_aM9C~q#~Y^h?G-t}OPcgLP%~r)<%qfc%PEQfmTk%-h?gzJ zh-*{Z!FMnX4 zv1tB&2Pp4>w9HSvs-9GxU=7&Di-9djPA0bD@mZkyC$$o!IH@qczlukk8lYe}dWjKu zOTZ^nHzO@vMa9XonvlRVT)bjc@)OzF*2~UgI5!_FlSwCsaFxf#E6wxF z^%x92z)#?+%zqUY-Ic*@kMdVFa|s2H0YErvu6>$5^PyAZ<0!1QPb)(h@&$c->Pr&I z^^o}-qmirwe4`8mU6w;AZj}%4Z47-;d+_{H9umE_ev|-jGwz#V5D)=I(0H2j%;_i^ z%=_%Z_>=?+MioLj80gU+THxS-I<~(n;kM z+Td2@waYP9^R$b94om>}doW7yQ`$tzzB9boNHMnXeny+CP1Fl*bVNd@Sb|>u6udKE zecE@S?X46=$1? z)#D@7_O}61KLE7sI!46#bxA35BSMxTMvWQQ9~d!HNtsRkSHqN$MfwYV@RGkKKmmq_ z0szm&!Dzv8y6bc|>wajnn3YEqzx$UfQYHXKD3#q&W(7{)>I@-0SI3MrAfU-j%}k#% z__VY+{|UMDJdg(&9iqn`|Cb--qyayY4~dC5GopY0STGY4)tL0n(fLnE7;ysXf~_Jv zafKhcz#S@ZRLl1a~5<)^n!cysl zcb09R3Ya?a61ZI~wW;v*wh%G=m!#c7JWF3NyKRi&z4S(TM;ik9;vDXa=zj86V+K5b zGYi1U^+1H!H$i8^EUigZRnZNF4I??f*8a@d&7ZCPkq{Vg_xx5uGgox4Sk->Sw!u{A zkF{VYZ0(_5S;%h-tx(bJ4UP=PJgbF5sB!vy1Qyqc+G*N5J}!op%AY40LF^%QUggPZj3u!Lh&&#l~V^8`)03fqW!*Ki53Z z;SAg9z;?^pwLrXa+ga4FSnP9|i*sQ_=6=y$dMK$?z>7hf{-7$q-p2|;{Lw!C=J-t5g)RL(G4gR z^5Qg~h(@x>4*Eu%w(4L+bPjjRIn4W_?A_%Q7>}U!`HEt0S+=hs_xUW3kH3-~>WR6p zX?#nLV5i?B2%cF@@F1}uLP@>M=d|6o=v;Eu5e)@{kuX?T6e4u&v^NJt7a ztd_cJ1Nf5b6iD`Zus0KgA6?sD)FHPUJ~CoS5`f>H9b4~nGGdVK>K;i)zy?HNTZ4V& zDo0)Mn3bceybRbO@$!#w+?NRkVN?LN-KM=foX=UZOz4X2joRyxu2x`+uEQg=?i53N zz1QHq)T!fo2>o(bmQHSku1tK5H|tL5dMGW9K+Z3``>G2_7gWh9d>flpbd3*MMb6Rjq3*(2Nh%ZNfw@v$rs(^dlH<1GU z6_&DZJli_$DMvHMQS|FGq`K~*;X^F$w~Py^aeUPiGK+_^vRx*KY(?^=giXdB59>0q z6^kZp%A+GIZRt@5|$tsKVLn#*_?4|Iw z0(H8YzWTZc6^x~C4%Zi4!}?4GB3zCI(rhiOo^Zxog|91GxiUDsLv76963S6MN6A%B zdPPp%UHSLPQa&TJ*H3l^Vi<9l0SyTHITMT|3@we$nYvF99FEe);3$Uw8vIx~oaV6I zrXSEx+p(43qB9$voYsZ5KRj+@To3but=;A`tkjxF3_ee>Cwl+ z_+;n6zHprh4p|(@QYj+XKe2|E02KR1OxCw}SXc2rJjZwYag5?U!(?73HUJ>8H2e4C zfZaEK1$AKRzaMqTOcHxPWJ?Z)Isdshy1d$0^Vph^kq%4tCL#$7?-5RSJ#De!P>;eq zOP{Khhh6r9QpMghqoMaY#%yVy^3>MctZoL z&f9~Fat8xxrUY$=9+5MjsgN1y2^$-ISzWe$YRM``E@7?|#+?fGhnf6QwDXPm4!tkp zlFV5*XcsGx&M(>%qQ*uNX)~L%dD#ZXQ^)W39z5L5K|Q(1=>#moI) z1-|VD6e6(&lIP8K%iM}8HQ7PY4f*_!hAsXTq85P=HP>0XCeUEZ-T5h#U<4QZEdXiJ zFKq?EDJz~L*f`EfU zuu-H$L5lP%C>EMZl@cVjWK%|$1 zm{~YeDPW z=g~cb@_WbB8~fvhwq{%EB>PVZxKoNvEHi2Dm~PG2W;_fQbZNe<#|(Iqqb_bI&6ewV z6}kNN!@)q45D=utm(IhZE~Gx`g81@O8E1agijwdAwX9~VDNDK-;_T5B>jC?W-Lc1@ zvo_{wF`>$4?5&JxMdj=tqP7<1joq|yo*QC!`RlubbH+=l>StiP8llS;AiJ+kzZY)W z$evDLWb|^<2p>I<1MP&`bDBY?5RSM?c@3_D;JZtjf#!(A=NRsbbz8lK)x5O0x%ZBs zm8err8bc^;Zl1jo1EoLH;M02ZzW28tjiswLYT$KCr;^7@7#iyHpZur$lg8U+5{Qq{ zxWHMo+vWg~#;;ml3)hx2sqd?qmnNdc21#}H?KE}@GCK!AVS=OVCHe7puV#r(yS8mH zn6l`ZUr3m;XL>N33ntmJ0UzXvE*Wyot80QhMxW!w;{lSLIu+NX@+N?(xv2)RjxG2A~+v9~TF-@=e$mURVE z*KLPVtNf%~{AZq~ga{2*OucXMarhIR%KicrK&OJiBqS4=hpd1NrOInXgtaJA zyvp|!vlr=uni@gGV9ukxJcF+^J3YD!GrAGS;UaLmhBswRR}AUH5MitNnbW~Ws40}g zU|ct{@&v4xKB0zN`0#0OD)0Lxyv<9x_n*L^At(7e=esOhnM6cuZ{ZcxVsxzU7=L}> zRBWSD57%XP0u+KRSkB*+mY9 zyJzt^o;kB)OK9@0=Mqu@0_C;OoVE)}!U_`k&ZZS_`2}VV$|DM`pE{mZ@G4HO*x3m6 z+k>*05qpVeyOk7Eth)GSXT1K3$|Y+TXBi*><9(C;OPM#PVcAq9TH9qhtR|V0X|0I| zTWy$&uN`HLFq}nYkZQh8=XK86f!B`32f@9n0@rVLJ8z$tBP5a+68~&xFoJP;1BZ|; zw*A6i$3w_SPl$JM8Q(9Fuy;y2rrxM&AKxc9?X)tCYvRKZG`WA))6*!*39s_}9_gMH z5`wD)G8l;dCR|lpYtB8yAW0)_ln#}GfLw3Z;fo@-xW0t@4ljcv{!P99?K>cF+Bek% zKXelPUnUvn0nyb(#CmZvzV{iA(LxzL+ak2~E8&F{C7 zt<~b>Mm6nr%6dzD5G4;q0^RO=%b>()4%)@2G=Xyv6v;iZ&TaIJroBs#-|RmcEGZCZo6UjOOZ04<$t(el16dKK3k z(0m2WdwuXY5O~to*!MrJL5OeA@~4ms0!^9Dw2_)`Y_@Cn1!g%(hlF1Fz@Z8DRkP)z zNRILPmGhnE;b^q(XPmmW?TXH}*;*|3RsEk^0sVE^m%up3}xOv=w zQ?6MBz5$A`R#no4nIuNZLn4AU3u5w$hCo8$`dKDQ%ByP?V_jBuORmTZw17rx5Lu)eTb&>aWJebKRy z$T`hPBjn=T$G(C*&Ot#NW@G?kpx&uENREx{0N&vc0Ef^Snr&y=BYf;$z#G3!`XXG(3o?(ApvKzi6l7{5dBflHPTzj@T#vo z5BeQ7i9%3DMAZyuq4$;*Nx)TOR(0YlNS!x9iFUF-u_m&@zjR`zd13}s*|m!#0>UNg zMTkScc)H^nGR`_Tu~^)(cC6BfPHaL_|5I}}3KGQ{>Is`@#%o68&hgTjd?ZRzShn9- zw0GCa0$K>pH-RxS^zD-y*_4DJqMEFNAq_8|YMr^m>inuo4T}4zDlH%;cS8rOL0fgN zE{B?Z8S~|KKjiGhy`e*TRLvH`F@vYnLwSb!BC(_cM2cahc^d*cX=b3~-)lRm5>GuS z)FWIO3IWxK3BQ9MckAe zG$kt?{P@abS8h6Zudv2pZf4-~Jhf*IZbKK5gITO;K{NF?QUni4@uv3u6xG`m5q;?; zs@gMRAKFqVIPov}i6{e|<5)>#J3L3aLN_~@kxKvzZK?gOh zkx*w^Jb{^qH*43x!3}-W*~{)u%VA4hX0=|%iH*$Gdb@npgt||nu}>~#yCQrGqh}$^ z4%g~@EPi6CHnrcKNib7@-ssN_N&;Jl*PfQMp*~%>YRHO5#P&O0r~5t^)6@`(wK*%8 zPVze%0a6uMGUTZ^^o75X8Zb3hgV~8Gyv$_uKAJq9Qd59c^|uFlor%paB+oahvo5}R zZRw2nZ#Sy)CALmQKN&zGr;|{I@?E#EV%D=U*zcXs4HnXiK>&viPnVd_mdVq zHWA}1v>9ly5gnx@r0EJ^^sYyTmBGLcz4L5Jb7(^0lMDKjjrEf=oKoBy^HkzUf zt-R|K{uYmhGq(q}W~#h+lw|d^*d+KJMGsL831h?_Qn17wdw;Rll$Z&Iy!mx7ErU1#@_wY;C|=+L=HN@v5Qd5yqSAHuv-vMfL zZ$02yTcs*5?=gVF`})p|#l7$=UF@Nl8&~=0t!U7Cpb6-F>^r_8PB#6)Wd=dVKF~c1 zk@|5JmJ%P8@F!aDz4@oo|4W#$-yP#q8XMGL&zRXZ3Bt47(%eeGdnY+YKk@ zi7OiC{9oTCQRtU?Mt-7C|fGgPvB2sS|x!KtZ3+3TRj*{oDl*+Y;^o z3^#ubx5>F%WvgJ^vz0J~C!^|%X1N4paR2PxTzfCnfo?g+r0yi-OVZ=8a&CfbTq@sH z2&&{jhE$niqEO`fV(%_IJXCq2c5O_I!1CG&p$1=r}QE z!P3L^aA2C};#1`)X>$8D`u^zD_8ZUBIr!ZEXD^W{GK8@%KFgYPvn-eRpbIU<^L-O{ zci~FXW=gvdj}Xz0$C>^vxip0Ljg*nlsU*e<(rQT`7&>hf6S^aM4;T5-QyPZC_C8ZDR2&hule~C6Kc{plof=b_^4u?E#ks^u+5VhgB(#xp z5Qw1{V+M-TQHU9vDo@tV>XppvmVs8D80p@Z-WzC_c8Ai z0fNDJsiI#u1n2cThMd^}q}mxm2O(Z^?jM7l28>fK+B@6UN!*ez#Vn~nECS5wd*b&(SXWE4HQ zvcem+Ci%O07coFhfqi*X`rpbJ0A$FS`RrI@RQvA7D=Y5I3zRG8g`tNLtc}?^COxl2hR{KxD=hArto$PbAzx)r6LEp;& literal 0 HcmV?d00001 diff --git a/exercise-4/server.R b/exercise-4/server.R index 6bed76a..4223979 100644 --- a/exercise-4/server.R +++ b/exercise-4/server.R @@ -22,7 +22,6 @@ shinyServer(function(input, output) { return(BuildMap(joined.data, input$mapvar)) }) - output$scatter <- renderPlotly({ - return(BuildScatter(joined.data, input$search)) - }) + # Create a `scatter` property on your `output` object. That property shoudl be a `renderPlotly` object that returns a scatterplot (`BuildScatter`) + }) \ No newline at end of file diff --git a/exercise-4/ui.R b/exercise-4/ui.R index 820fe6b..198313f 100644 --- a/exercise-4/ui.R +++ b/exercise-4/ui.R @@ -2,7 +2,7 @@ library(shiny) library(plotly) shinyUI(navbarPage('Electoral College', - # Create a title + # Create a tab panel for your map tabPanel('Map', titlePanel('Electoral College Votes'), # Create sidebar layout @@ -20,23 +20,22 @@ shinyUI(navbarPage('Electoral College', plotlyOutput('map') ) ) - ), - tabPanel('Scatter', - titlePanel('Population v.s. Vote Power'), - # Create sidebar layout - sidebarLayout( + ) + + # Create a tabPanel to show your scatter plot + + # Add a titlePanel to your tab + + + # Create a sidebar layout for this tab (page) + - # Side panel for controls - sidebarPanel( + # Create a sidebarPanel for your controls + - # Text input for searching for a state - textInput('search', label="Find a State", value = '') - ), + # Make a textInput widget for searching for a state in your scatter plot + + + # Create a main panel, in which you should display your plotly Scatter plot - # Main panel: display plotly Scatter plot - mainPanel( - plotlyOutput('scatter') - ) - ) - ) )) From 10a3765a02fdf853a0ab94dba4ed9b856baaa731 Mon Sep 17 00:00:00 2001 From: Michael Freeman Date: Mon, 14 Nov 2016 14:29:09 -0800 Subject: [PATCH 4/5] Removed exercise-3 answers --- exercise-3/README.md | 14 +++++++++++++- exercise-3/server.R | 2 +- exercise-3/ui.R | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/exercise-3/README.md b/exercise-3/README.md index 586f947..abbe60f 100644 --- a/exercise-3/README.md +++ b/exercise-3/README.md @@ -1,4 +1,16 @@ # Exercise-3 -In this exercise, you'll practice building an interactive Plotly map in a Shiny application. +In this exercise, you'll practice building an interactive Plotly map in a Shiny application. As in previous exercises, you should fork and clone this repository, then follow the instructions below. + +## server.R +Your `server.R` file already loads the data you need, as well as scripts for building a map. Inside your `shinyServer`, you should do the following: + +- Replace the static input `'population'` with a dynamic value that comes from your UI + +## ui.R +Your `ui.R` file already has a `tabPanel` built displaying your map. In this section, you should add another `tabPanel` for your scatter-plot by doing the following: + +- Add a `selectInput` (with a proper id) that allows you to select a variable to map (`population`, `votes`, or `ratio`) + +Also, make sure you look at the `BuildMap` file and **understand how it is using variables to make a dynamic application**. diff --git a/exercise-3/server.R b/exercise-3/server.R index 148ff63..a435e5d 100644 --- a/exercise-3/server.R +++ b/exercise-3/server.R @@ -18,6 +18,6 @@ shinyServer(function(input, output) { # Render a plotly object that returns your map output$map <- renderPlotly({ - return(BuildMap(joined.data, input$mapvar)) + return(BuildMap(joined.data, 'population')) }) }) \ No newline at end of file diff --git a/exercise-3/ui.R b/exercise-3/ui.R index 355b4f8..e6435f8 100644 --- a/exercise-3/ui.R +++ b/exercise-3/ui.R @@ -2,7 +2,6 @@ shinyUI(fluidPage( mainPanel( # Add a selectInput (with a proper id) that allows you to select a variable to map - selectInput('mapvar', label = 'Variable to Map', choices = list("Population" = 'population', 'Electoral Votes' = 'votes', 'Votes / Population' = 'ratio')), # Use plotlyOutput to show your map plotlyOutput('map') From 2566409a166ad2a76ec176c27d836f855d206e17 Mon Sep 17 00:00:00 2001 From: Dylan Desmond Date: Tue, 15 Nov 2016 15:09:36 -0800 Subject: [PATCH 5/5] Added Scatterplot to exrcise 4 --- exercise-4/server.R | 7 ++++++- exercise-4/ui.R | 21 ++++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/exercise-4/server.R b/exercise-4/server.R index 4223979..7b8c863 100644 --- a/exercise-4/server.R +++ b/exercise-4/server.R @@ -1,8 +1,10 @@ # server.R library(dplyr) +library(plotly) +library(shiny) # Read in data -setwd('~/Documents/info-201/m14-shiny/exercise-4/') +# setwd('~/Documents/info-201/m14-shiny/exercise-4/') source('./scripts/buildMap.R') source('./scripts/buildScatter.R') df <- read.csv('./data/electoral_college.csv', stringsAsFactors = FALSE) @@ -23,5 +25,8 @@ shinyServer(function(input, output) { }) # Create a `scatter` property on your `output` object. That property shoudl be a `renderPlotly` object that returns a scatterplot (`BuildScatter`) + output$scatter <- renderPlotly({ + return(BuildScatter(joined.data, input$text)) + }) }) \ No newline at end of file diff --git a/exercise-4/ui.R b/exercise-4/ui.R index 198313f..d7c066d 100644 --- a/exercise-4/ui.R +++ b/exercise-4/ui.R @@ -20,22 +20,29 @@ shinyUI(navbarPage('Electoral College', plotlyOutput('map') ) ) - ) + ), # Create a tabPanel to show your scatter plot - + tabPanel('Scatter', # Add a titlePanel to your tab - + titlePanel("Electoral College Votes"), # Create a sidebar layout for this tab (page) - + sidebarLayout( # Create a sidebarPanel for your controls - + sidebarPanel( # Make a textInput widget for searching for a state in your scatter plot - - + textInput('text', label = "State to Map", value = "") + + ), + # Create a main panel, in which you should display your plotly Scatter plot + mainPanel( + plotlyOutput('scatter') + ) + ) + ) ))