From feacb4713365deb8f79fdb951bbc9cf1271fe446 Mon Sep 17 00:00:00 2001
From: Robinlovelace Prerequisites<
library(leaflet) # for interactive maps
library(ggplot2) # tidyverse data visualization package
-
nz_elev = rast(system.file("raster/nz_elev.tif", package = "spDataLarge"))
Map-making is no exception, hence this chapter’s coverage of one package (tmap) in depth rather than many superficially.
In addition to being fun and creative, cartography also has important practical applications. A carefully crafted map can be the best way of communicating the results of your work, but poorly designed maps can leave a bad impression. -Common design issues include poor placement, size and readability of text and careless selection of colors, as outlined in the style guide of the Journal of Maps. +Common design issues include poor placement, size and readability of text and careless selection of colors, as outlined in the style guide of the Journal of Maps. Furthermore, poor map-making can hinder the communication of results (Brewer 2015):
Amateur-looking maps can undermine your audience’s ability to understand important information and weaken the presentation of a professional data investigation. @@ -161,9 +161,9 @@
Historic examples include maps of buildings and land ownership in the Old Babylonian dynasty more than 3000 years ago and Ptolemy’s world map in his masterpiece Geography nearly 2000 years ago (Talbert 2014).
Map-making has historically been an activity undertaken only by, or on behalf of, the elite. -This has changed with the emergence of open source mapping software such as the R package tmap and the ‘print layout’ in QGIS which enable anyone to make high-quality maps, enabling ‘citizen science’. +This has changed with the emergence of open source mapping software such as the R package tmap and the ‘print layout’ in QGIS, which allow anyone to make high-quality maps, enabling ‘citizen science’. Maps are also often the best way to present the findings of geocomputational research in a way that is accessible. -Map-making is therefore a critical part of geocomputation and its emphasis not only on describing, but also changing the world.
+Map-making is therefore a critical part of geocomputation and its emphasis is not only on describing, but also changing the world.This chapter shows how to make a wide range of maps. The next section covers a range of static maps, including aesthetic considerations, facets and inset maps. Sections 9.3 to 9.5 cover animated and interactive maps (including web maps and mapping applications). @@ -179,10 +179,10 @@
The generic plot()
function is often the fastest way to create static maps from vector and raster spatial objects (see sections 2.2.3 and 2.3.3).
+
The generic plot()
function is often the fastest way to create static maps from vector and raster spatial objects (see Sections 2.2.3 and 2.3.3).
Sometimes, simplicity and speed are priorities, especially during the development phase of a project, and this is where plot()
excels.
The base R approach is also extensible, with plot()
offering dozens of arguments.
-Another approach is the grid package which allows low-level control of static maps, as illustrated in Chapter 14 of Murrell (2016).
+Another approach is the grid package which allows low-level control of static maps, as illustrated in chapter 14 of Murrell (2016).
This part of the book focuses on tmap and emphasizes the essential aesthetic and layout options.
tmap is a powerful and flexible map-making package with sensible defaults. @@ -223,20 +223,20 @@
tm_fill()
: shaded areas for (mutli)polygonstm_fill()
: shaded areas for (multi)polygons
tm_borders()
: border outlines for (mutli)polygonstm_borders()
: border outlines for (multi)polygons
tm_polygons()
: both, shaded areas and border outlines for (mutli)polygonstm_polygons()
: both, shaded areas and border outlines for (multi)polygons
tm_lines()
: lines for (mutli)linestrings
+tm_lines()
: lines for (multi)linestrings
tm_symbols()
: symbols for (mutli)points, (mutli)linestrings, and (mutli)polygonstm_symbols()
: symbols for (multi)points, (multi)linestrings, and (multi)polygons
tm_raster()
: colored cells of raster data (there is also tm_rgb()
for rasters with three layers)tm_text()
: text information for (mutli)points, (mutli)linestrings, and (mutli)polygonstm_text()
: text information for (multi)points, (multi)linestrings, and (multi)polygons
This layering is illustrated in the right panel of Figure 9.1, the result of adding a border on top of the fill layer.
@@ -258,7 +258,7 @@map_nz = tm_shape(nz) + tm_polygons()
class(map_nz)
#> [1] "tmap"
-map_nz
can be plotted later, for example by adding additional layers (as shown below) or simply running map_nz
in the console, which is equivalent to print(map_nz)
.
map_nz
can be plotted later, for example by adding other layers (as shown below) or simply running map_nz
in the console, which is equivalent to print(map_nz)
.
New shapes can be added with + tm_shape(new_obj)
.
In this case, new_obj
represents a new spatial object to be plotted on top of preceding layers.
When a new shape is added in this way, all subsequent aesthetic functions refer to it, until another new shape is added.
@@ -287,8 +287,8 @@
tmap_arrange(map_nz1, map_nz2, map_nz3)
More elements can also be added with the +
operator.
@@ -334,8 +334,8 @@
Like base R plots, arguments defining aesthetics can also receive values that vary. @@ -364,7 +364,7 @@
-Scales control how the values are represented on the map and in the legend, and largely depend on the selected visual variable.
+Scales control how the values are represented on the map and in the legend, and they largely depend on the selected visual variable.
For example, when our visual variable is col
, then col.scale
controls how the colors of spatial objects are related to the provided values; and when our visual variable is size
, then size.scale
controls how the sizes represent the provided values.
By default, the used scale is tm_scale()
, which selects the visual settings automatically given by the input data type (factor, numeric, and integer).
@@ -391,8 +391,8 @@
style = "equal"
: divides input values into bins of equal range and is appropriate for variables with a uniform distribution (not recommended for variables with a skewed distribution as the resulting map may end-up having little color diversity)style = "equal"
: divides input values into bins of equal range and is appropriate for variables with a uniform distribution (not recommended for variables with a skewed distribution as the resulting map may end up having little color diversity)
style = "quantile"
: ensures the same number of observations fall into each category (with the potential downside that bin ranges can vary widely)
The tm_scale_continuous()
function presents a continuous color field and is particularly suited for continuous rasters (Figure 9.7, left panel).
-In case of variables with skewed distribution you can also use its variants – tm_scale_continuous_log()
and tm_scale_continuous_log1p()
.
-Finally, tm_scale_categorical()
was designed to represent categorical values and assures that each category receives a unique color (Figure 9.7, right panel).
tm_scale_continuous_log()
and tm_scale_continuous_log1p()
.
+Finally, tm_scale_categorical()
was designed to represent categorical values and ensures that each category receives a unique color (Figure 9.7, right panel).
Palettes define the color ranges associated with the bins and determined by the tm_scale_*()
functions, and its breaks
and n
arguments described above.
-It expects a vector of colors or a new color palette name, which can be find interactively with cols4all::c4a_gui()
.
+It expects a vector of colors or a new color palette name, which can be found interactively with cols4all::c4a_gui()
.
You can also add a -
as the color palette name prefix to reverse the palette order.
values
of the visual variables, such as default color palettes for different types of input variables, can be found with tmap_options()
.
-For example run tmap_options()$values.var
.
+For example, run tmap_options()$values.var
.
There are three main groups of color palettes: categorical, sequential and diverging (Figure 9.8), and each of them serves a different purpose.tm_legend() function, we may change its title, position, orientation, or even disable it.
The most important argument in this function is title
, which sets the title of the associated legend.
-In general, a map legend title should provide two pieces of information: what the legend represents and what are the units of the presented variable.
+In general, a map legend title should provide two pieces of information: what the legend represents and what the units are of the presented variable.
The following code chunk demonstrates this functionality by providing a more attractive name than the variable name Land_area
(note the use of expression()
to create superscript text):
legend_title = expression("Area (km"^2*")")
@@ -524,7 +524,7 @@
The map layout refers to the combination of all map elements into a cohesive map.
-Map elements include among others the objects to be mapped, the map grid, the scale bar, the title, and margins, while the color settings covered in the previous section relate to the palette and break-points used to affect how the map looks.
+Map elements include among others the objects to be mapped, the map grid, the scale bar, the title, and margins, while the color settings covered in the previous section relate to the palette and breakpoints used to affect how the map looks.
Both may result in subtle changes that can have an equally large impact on the impression left by your maps.
Additional map elements such as graticules , north arrows, scale bars and map titles have their own functions: tm_graticules()
, tm_compass()
, tm_scalebar()
, and tm_title()
(Figure 9.9).52
@@ -535,8 +535,8 @@
tm_title("New Zealand")
-
tmap also allows a wide variety of layout settings to be changed, some of which, produced using the following code (see args(tm_layout)
or ?tm_layout
for a full list), are illustrated in Figure 9.10.
@@ -546,8 +546,8 @@
map_nz + tm_layout(frame = FALSE)
The other arguments in tm_layout()
provide control over many more aspects of the map in relation to the canvas on which it is placed.
@@ -564,8 +564,8 @@
Typically all individual facets in a faceted map contain the same geometry data repeated multiple times, once for each column in the attribute data (this is the default plotting method for sf
objects, see Chapter 2).
However, facets can also represent shifting geometries such as the evolution of a point pattern over time.
-This use case of faceted plot is illustrated in Figure 9.12.
urb_1970_2030 = urban_agglomerations |>
filter(year %in% c(1970, 1990, 2010, 2030))
@@ -599,7 +599,7 @@
The preceding code chunk demonstrates key features of faceted maps created using the tm_facets_wrap()
function:
world
in this case)world
in this case)by
argument which varies depending on a variable ("year"
in this case)nrow
/ncol
setting specifying the number of rows and columns that facets should be arranged intoIn the second step, we create a base map showing the New Zealand’s Southern Alps area. +
In the second step, we create a base-map showing New Zealand’s Southern Alps area. This is a place where the most important message is stated.
nz_height_map = tm_shape(nz_elev, bbox = nz_region) +
@@ -672,11 +672,11 @@
print(nz_map, vp = ins_vp)
Inset map can be saved to file either by using a graphic device (see Section 8.9) or the tmap_save()
function and its arguments - insets_tm
and insets_vp
.
Inset maps can be saved to file either by using a graphic device (see Section 8.9) or the tmap_save()
function and its arguments: insets_tm
and insets_vp
.
Inset maps are also used to create one map of non-contiguous areas. Probably, the most often used example is a map of the United States, which consists of the contiguous United States, Hawaii and Alaska. It is very important to find the best projection for each individual inset in these types of cases (see Chapter 7 to learn more). @@ -707,7 +707,7 @@
The code presented above is compact and can be used as the basis for other inset maps but the results, in Figure 9.14, provide a poor representation of the locations and sizes of Hawaii and Alaska. +
The code presented above is compact and can be used as the basis for other inset maps, but the results, in Figure 9.14, provide a poor representation of the locations and sizes of Hawaii and Alaska.
For a more in-depth approach, see the us-map
vignette from the geocompkg.
Animated maps solve these issues. Although they depend on digital publication, this is becoming less of an issue as more and more content moves online. -Animated maps can still enhance paper reports: you can always link readers to a web-page containing an animated (or interactive) version of a printed map to help make it come alive. +Animated maps can still enhance paper reports: you can always link readers to a webpage containing an animated (or interactive) version of a printed map to help make it come alive. There are several ways to generate animations in R, including with animation packages such as gganimate, which builds on ggplot2 (see Section 9.6). This section focuses on creating animated maps with tmap because its syntax will be familiar from previous sections and the flexibility of the approach.
Figure 9.15 is a simple example of an animated map. @@ -747,7 +747,7 @@
The resulting urb_anim
represents a set of separate maps for each year.
The final stage is to combine them and save the result as a .gif
file with tmap_animation()
.
-The following command creates the animation illustrated in Figure 9.15, with a few elements missing, that we will add in during the exercises:
tmap_animation(urb_anim, filename = "urb_anim.gif", delay = 25)
Another illustration of the power of animated maps is provided in Figure 9.16. @@ -770,7 +770,7 @@
The most important type of interactivity, however, is the display of geographic data on interactive or ‘slippy’ web maps. -The release of the leaflet package in 2015 (that uses the leaflet JavaScript library) revolutionized interactive web map creation from within R and a number of packages have built on these foundations adding new features (e.g., leaflet.extras2) and making the creation of web maps as simple as creating static maps (e.g., mapview and tmap). +The release of the leaflet package in 2015 (that uses the leaflet JavaScript library) revolutionized interactive web map creation from within R, and a number of packages have built on these foundations adding new features (e.g., leaflet.extras2) and making the creation of web maps as simple as creating static maps (e.g., mapview and tmap). This section illustrates each approach in the opposite order. We will explore how to make slippy maps with tmap (the syntax of which we have already learned), mapview, mapdeck and finally leaflet (which provides low-level control over interactive maps).
A unique feature of tmap mentioned in Section 9.2 is its ability to create static and interactive maps using the same code. @@ -818,7 +818,7 @@
mapview has a concise syntax yet is powerful. +
mapview has a concise syntax, yet, it is powerful.
By default, it has some standard GIS functionality such as mouse position information, attribute queries (via pop-ups), scale bar, and zoom-to-layer buttons.
It also offers advanced controls including the ability to ‘burst’ datasets into multiple layers and the addition of multiple layers with +
followed by the name of a geographic object.
Additionally, it provides automatic coloring of attributes via the zcol
argument.
@@ -837,8 +837,8 @@
One important thing to keep in mind is that mapview layers are added via the +
operator (similar to ggplot2 or tmap).
@@ -871,14 +871,14 @@
You can zoom and drag the map in the browser, in addition to rotating and tilting it when pressing Cmd
/Ctrl
.
Multiple layers can be added with the pipe operator, as demonstrated in the mapdeck
vignettes.
mapdeck also supports sf
objects, as can be seen by replacing the add_grid()
function call in the preceding code chunk with add_polygon(data = lnd, layer_id = "polygon_layer")
, to add polygons representing London to an interactive tilted map.
Last but not least is leaflet which is the most mature and widely used interactive mapping package in R. +
Last is leaflet which is the most mature and widely used interactive mapping package in R. leaflet provides a relatively low-level interface to the Leaflet JavaScript library and many of its arguments can be understood by reading the documentation of the original JavaScript library (see leafletjs.com).
Leaflet maps are created with leaflet()
, the result of which is a leaflet
map object which can be piped to other leaflet functions.
This allows multiple map layers and control settings to be added interactively, as demonstrated in the code below which generates Figure 9.22 (see rstudio.github.io/leaflet/ for details).
The interactive web maps demonstrated in Section 9.4 can go far. -Careful selection of layers to display, base-maps and pop-ups can be used to communicate the main results of many projects involving geocomputation. -But the web mapping approach to interactivity has limitations:
+Careful selection of layers to display, basemaps and pop-ups can be used to communicate the main results of many projects involving geocomputation. +But the web-mapping approach to interactivity has limitations:Overcoming these limitations involves going beyond static web mapping and towards geospatial frameworks and map servers. +
Overcoming these limitations involves going beyond static web mapping and toward geospatial frameworks and map servers. Products in this field include GeoDjango (which extends the Django web framework and is written in Python), MapServer (a framework for developing web applications, largely written in C and C++) and GeoServer (a mature and powerful map server written in Java). Each of these is scalable, enabling maps to be served to thousands of people daily, assuming there is sufficient public interest in your maps! -The bad news is that such server-side solutions require much skilled developer time to set-up and maintain, often involving teams of people with roles such as a dedicated geospatial database administrator (DBA).
-Fortunately for R programmers, web mapping applications can now be rapidly created with shiny. +The bad news is that such server-side solutions require much skilled developer time to set up and maintain, often involving teams of people with roles such as a dedicated geospatial database administrator (DBA).
+Fortunately for R programmers, web-mapping applications can now be rapidly created with shiny.
As described in the open source book Mastering Shiny, shiny is an R package and framework for converting R code into interactive web applications (Wickham 2021).
You can embed interactive maps in shiny apps thanks to functions such as leaflet::renderLeaflet()
.
-This section gives some context, teaches the basics of shiny from a web mapping perspective and culminates in a full-screen mapping application in less than 100 lines of code.
shiny is well documented at shiny.posit.co, which highlights the two components of every shiny app: ‘front end’ (the bit the user sees) and ‘back end’ code.
In shiny apps, these elements are typically created in objects named ui
and server
within an R script named app.R
, which lives in an ‘app folder’.
-This allows web mapping applications to be represented in a single file, such as the CycleHireApp/app.R
file in the book’s GitHub repo.
CycleHireApp/app.R
file in the book’s GitHub repo.
ui.R
(short for user interface) and server.R
files, naming conventions used by shiny-server
, a server-side Linux application for serving shiny apps on public-facing websites.
@@ -948,8 +948,8 @@ The user interface (ui
) of lifeApp is created by fluidPage()
.
@@ -961,11 +961,11 @@
shinyApp()
combines both the ui
and server
elements and serves the results interactively via a new R process.
When you move the slider in the map shown in Figure 9.23, you are actually causing R code to re-run, although this is hidden from view in the user interface.
Building on this basic example and knowing where to find help (see ?shiny
), the best way forward now may be to stop reading and start programming!
-The recommended next step is to open the previously mentioned CycleHireApp/app.R
script in an IDE of choice, modify it and re-run it repeatedly.
+The recommended next step is to open the previously mentioned CycleHireApp/app.R
script in an integrated development environment (IDE) of choice, modify it and re-run it repeatedly.
The example contains some of the components of a web mapping application implemented in shiny and should ‘shine’ a light on how they behave.
The CycleHireApp/app.R
script contains shiny functions that go beyond those demonstrated in the simple ‘lifeApp’ example.
+
The CycleHireApp/app.R
script contains shiny functions that go beyond those demonstrated in the simple ‘lifeApp’ example (Figure 9.24).
These include reactive()
and observe()
(for creating outputs that respond to the user interface — see ?reactive
) and leafletProxy()
(for modifying a leaflet
object that has already been created).
-Such elements are critical to the creation of web mapping applications implemented in shiny.
+Such elements are critical to the creation of web-mapping applications implemented in shiny.
A range of ‘events’ can be programmed including advanced functionality such as drawing new layers or subsetting data, as described in the shiny section of RStudio’s leaflet website.
runApp()
with the first argument being the folder containing the app code and data: runApp("CycleHireApp")
in this case (which assumes a folder named CycleHireApp
containing the app.R
script is in your working directory).
You can also launch apps from a Unix command line with the command Rscript -e 'shiny::runApp("CycleHireApp")'
.
Experimenting with apps such as CycleHireApp
will build not only your knowledge of web mapping applications in R, but also your practical skills.
+
Experimenting with apps such as CycleHireApp
will build not only your knowledge of web-mapping applications in R, but also your practical skills.
Changing the contents of setView()
, for example, will change the starting bounding box that the user sees when the app is initiated.
Such experimentation should not be done at random, but with reference to relevant documentation, starting with ?shiny
, and motivated by a desire to solve problems such as those posed in the exercises.
shiny used in this way can make prototyping mapping applications faster and more accessible than ever before (deploying shiny apps, https://shiny.posit.co/deploy/, is a separate topic beyond the scope of this chapter). -Even if your applications are eventually deployed using different technologies, shiny undoubtedly allows web mapping applications to be developed in relatively few lines of code (86 in the case of CycleHireApp). +Even if your applications are eventually deployed using different technologies, shiny undoubtedly allows web-mapping applications to be developed in relatively few lines of code (86 in the case of CycleHireApp). That does not stop shiny apps getting rather large. The Propensity to Cycle Tool (PCT) hosted at pct.bike, for example, is a national mapping tool funded by the UK’s Department for Transport. The PCT is used by dozens of people each day and has multiple interactive elements based on more than 1000 lines of code (Lovelace et al. 2017).
@@ -991,7 +991,7 @@tmap provides a powerful interface for creating a wide range of static maps (Section 9.2) and also supports interactive maps (Section 9.4). But there are many other options for creating maps in R. -The aim of this section is to provide a taster of some of these and pointers for additional resources: map-making is a surprisingly active area of R package development, so there is more to learn than can be covered here.
+The aim of this section is to provide a taste of some of these and pointers for additional resources: map-making is a surprisingly active area of R package development, so there is more to learn than can be covered here.The most mature option is to use plot()
methods provided by core spatial packages sf and terra, covered in Sections 2.2.3 and 2.3.3, respectively.
What we have not mentioned in those sections was that plot methods for vector and raster objects can be combined when the results draw onto the same plot area (elements such as keys in sf plots and multi-band rasters will interfere with this).
This behavior is illustrated in the subsequent code chunk which generates Figure 9.25.
@@ -1133,7 +1133,7 @@
Table 9.1 shows a range of mapping packages that are available, and there are many others not listed in this table.
-Of note is mapsf, which can generate range of geographic visualizations including choropleth, ‘proportional symbol’ and ‘flow’ maps.
+Of note is mapsf, which can generate a range of geographic visualizations including choropleth, ‘proportional symbol’ and ‘flow’ maps.
These are documented in the mapsf
vignette.
Several packages focus on specific map types, as illustrated in Table 9.3. Such packages create cartograms that distort geographical space, create line maps, transform polygons into regular or hexagonal grids, visualize complex data on grids representing geographic topologies, and create 3D visualizations.
@@ -1175,20 +1175,20 @@A cartogram is a map in which the geometry is proportionately distorted to represent a mapping variable. -Creation of this type of map is possible in R with cartogram, which allows for creating continuous and non-contiguous area cartograms. +Creation of this type of map is possible in R with cartogram, which allows for creating contiguous and non-contiguous area cartograms. It is not a mapping package per se, but it allows for construction of distorted spatial objects that could be plotted using any generic mapping package.
-The cartogram_cont()
function creates continuous area cartograms.
+
The cartogram_cont()
function creates contiguous area cartograms.
It accepts an sf
object and name of the variable (column) as inputs.
-Additionally, it is possible to modify the intermax
argument - maximum number of iterations for the cartogram transformation.
-For example, we could represent median income in New Zeleand’s regions as a continuous cartogram (Figure 9.27, right panel) as follows:
intermax
argument – maximum number of iterations for the cartogram transformation.
+For example, we could represent median income in New Zeleand’s regions as a contiguous cartogram (Figure 9.27, right panel) as follows:
library(cartogram)
nz_carto = cartogram_cont(nz, "Median_income", itermax = 5)
tm_shape(nz_carto) + tm_polygons("Median_income")
cartogram also offers creation of non-contiguous area cartograms using cartogram_ncont()
and Dorling cartograms using cartogram_dorling()
.
@@ -1201,8 +1201,8 @@
E2. Extend the tmap created for the previous exercise so the legend has three bins: “High” (HDI
above 0.7), “Medium” (HDI
between 0.55 and 0.7) and “Low” (HDI
below 0.55).
E2. Extend the tmap created for the previous exercise so the legend has three bins: “High” (HDI
above 0.7), “Medium” (HDI
between 0.55 and 0.7) and “Low” (HDI
below 0.55).
+Bonus: improve the map aesthetics, for example by changing the legend title, class labels and color palette.
E3. Represent africa
’s subregions on the map.
Change the default color palette and legend title.
Next, combine this map and the map created in the previous exercise into a single plot.
E4. Create a land cover map of the Zion National Park.
+E4. Create a land cover map of Zion National Park.
us_states
dataset.)us_states
dataset.)E5. Create facet maps of countries in Eastern Africa:
E8. Sketch on paper ideas for a web mapping app that could be used to make transport or land-use policies more evidence based:
+E8. Sketch on paper ideas for a web-mapping application that could be used to make transport or land-use policies more evidence-based:
Xg z(T%RVNGX?=l@UsP9JH&n9I^!JU9+KR%$d{;*Ts77AU>K0pgn z36pl>-oKcB-_~6MjfY1|C-CGDAMuOda#=au&uqWZ#Ezr&`)*k5|Fa)0aZ|0UTb4M6 zcVaE}&C8NRCx0|VDIg54#qw?ywwGREj>iZv!U+A!{!afkz_>6W=2BGFdF2`Jm?qiK za~_#1p)G%0YOi*-sJ!Q-Xb$i>pL(|N{Uf&E^d!H>sJS2g#Se9p(<`tm_hymJzPjf) zhU>b|wGE6|9F6!E&JQ-?CN;_Igf&v9D=(xGCFAP|!_W?E9#DM+=~zpa6y>iZ>)miD z7;muc5@S7JnHXHG7C9nH_o1Ayt)i2ax_N{Nf%OdY;=oV$d@Yq!zl)-Ylay9{N9MC6 z`rWuy*f5IHHO%~;O8fpY>57F;!^FHp^*`L{P;H)jNj3`M`|FQIe`8BjVBGGZ+O4Vg zy?R#@JCc!qUh)A8Bc4LRUO&Quh!QB(EV8ZA8c~cX{OUl%=xLngc3))7Eu5o-w0d#_ zx;})@zG@DUR(3{1Bl+uFyz{y=^$`Iook$zjcQb>m+BVk!Fm;QcyDVLNF-P)$w! z Xk|)l9PlWwf)uL!ofbhtsv!9dJ$-<88hpCHN&~xCq4}$0E$9 zHzHjc*N*4A?(4aDls{i>tl0NzNpkbpvY&;8juwN!l;NknDiL`v4+##wglr+*8@EWC z$BIWmKzQ;%Hb$j``hLit3QrZO3e^gR^1d;HBo{^(fs~Mp&nyK-*>ce8B?@gZEmN^n zMmsn9u^;^=iM1Fg3uf(RsHSi1<)>xjr~l^}HbFwRQdaEJCGq_=Fy;7AXh|-R`M%nx zEbWdH)+SCkwS--vnyU1glHx%q)XhM@Pn9nq?s<}Mjr8_f$=u9h2R9|Yu}}qpTkBrZ z6Ekcq$)Mz5>EvTYZt+?A@@67E!0xY#a#RZ{pw|bBT%?>S4NY7GH7cWqQ-@S7MsOyU zLM05@E>2F7A-gMZc8l{akyZ^GJDi$!Vog|ynPo-!ztIBZH+8C>5z*1pgQBH^^sl@7 z`eb(*$VY{Ym6JTn{V (MT-@_WQ8aUL;raIJvqx#}cyU^T_li$0iW~LkASRYf zPniI`iCv|G%ex-+58^`4!FdI?xOJDoze`>B*I)7(YgCS}qflekJW|Tgx&(h3w1R+4 zI87+QB_S}->*Y3 n;~2xM1%YR?;Uru-m3v{gC5`&kn;qaV)8L`_ zs7VH&Mt~2W7CCCoU|=51dNuf^oHjBz=UN$6t(?KI`G*eh7Ns2O8)mD JAoVi!=f}ty_H1%{#q&GO@bXaJth4x+73p z2awM|!AOXXCU^>GB8UbZw$#a`*~rIh1ejuTOaD6SD#tz8!UXe{af7J^{29i2os~Le z_oHZPjiprUZn7x{jcll>3|aj}St>rU?4ZssWvZqF(@T|hu31X+w_t<3DYjZ~izEFm zmxyxaQsc}(vV=bhlJriBwBKkxlXu gOFA)Wnll? z;@0MYW<|HopDIZH8gp#-WkI&xr*3PheV<|jLVcC>-5AQPdb+*48&>sdgGjf08!t8w zwlGS z@`Yxx5Qcrwmp5f~CUW7>;kkcP@CmTA{DXFQc2jjp+HbB0F z2ESe1HYT<4aG?g;EAY@NmQ9+q6fQ-Q7@cQGn^#iyF =EU;V=O&d>2Bd@OCq~c$4HfV07Gi_0uiCR4q!$yry%DY6FUm~1 zJ8_u;%`)FUn)>osziJ#UJ3oHoI_;%~^oQPApO0#Rs?B$QENG?4Dk=g9DvJd-K2itj zMfmr@6cUh(sDhr$_R3+1oC%VL12O6VXE6EA#2f7ggK-_harMIhVxuen8Fv$TgUoHC zMH>FNwT|MfJ3E?uA?Ljd;e+ik9r7pX*c|%RPVF9%z_ciOrsEQ=U#u{ZoS; zfi{`fKC%&PEoK`hbT5Fwh$p`0aspUs{Q!iIlY`Ao@L^Ru_)PHuL`{U|0`wcus;lvv ztu@GB{^(qIJM5KlTp<%v)5?%+6i>|W`_I)bKNNkoTPLZHeRO*C7lK9SM~pg3vz)+) zF911^Ar%U(=HrJBH+-R4<(8Uj^HH_HdE$#by3}kO>}DawK`?2hicR%Ud1eA;u4HfL zuA+XgFqeihE +}cMf*S2lXyeEEXX!9fe`MlrK|6Xiozbgl zPWd8{N&52*0h_lx5BO6QrIdFRU*4d;?IdT7(V(5)`_1s3`6pvj^#F#;;521)fI=r7 ze*R&8G?}Hs6wGbqA^z098v5?4?{0@Ct1j*@kApH$u2+RGj tT&i>#*&w)xLEH%{%RE)d*?SaTYC7!$3 zh8Bj5Dk^tx25!C~6K4)uYfcWPy*=tLb&&0HFs2~GJ7mY4D A{2J6=t)J~VOf!r zn>)B*TQynl^y`^;`+Ii@fp=?2lqS%H8-;&x^>3=^`4!E*Un=C8>9>4ZkVzIE>xPtL zGr}lw2m1orzyk2frDA=IFeQF0f(ij1jw3lUN{_+*kwhsXfFyZ-R76h3CFrfJ2XM z=v`;=eAQDh`cwD}%cKL%@_5=D{ojLp2qgX-+zmfVANSOC-ejY0*5{~ux%;+aaM(7r zzItz3lbBP-G99DrcaMXWD4TR< p%dQ zgKYEO81e-WYT!j~Kg+)@Z FHz7q`-0i&uko6sHCbP%X<6SfKSC4J1U J9DM|HzqpG_B?{%#pdHvG=ED>s&aD(irdgl5yw_orcIwz9%1 fA3DW~K$qdMqvvi +~||Wxql&59>d^`dkXXi3_I-+&cy&-)N8l0L#z@WG ;WhuLfu&041%SY&_la~pw2z?>gjHziak7d& z>W>e}YbG%J6L$HcNZ&00pMR8gb$563ztcI}ZbA*VC8aEYddK)xl?kSQDauBHP{^7b z6C;ICR#9>3Xju639{Yh0UdK>x_4?;Zy~dqASLVi5!Av^@GlROn$C(_9(zBP6ANVXg z@&F`oTQ28)8M8N-@<``eg){tm3d&W3FNseOKP!!-B2q4B?!7O<5DThLx)=*C-=u97 zbPO&t;yyeZKpcg*3sFE9hB)q+@WH~Ah2688is-d6E#+t>8NX$hR?3;(HYkkYm#(Lh zDgJhaFo2EpeA!<~=E0pidc1{`9`5)NRFJf(GSDG^EfOnM hyL?p4n^~|b`rs_Lw zwehcaG>`BEkN!;c;0rLaDTq{Vt0x7HEvXHeD=&X~LQ52JxLcys<}FkyUU9=<+_qVf z2#()VQ_#1(u0g#B@{Uixu1s)EY|EowwEhDBENimdWk}$~U_(GWDF?SqoM=E0QRGX1 z-ks#H{kP)_zwStb`<(RUz?;Mj6*`uW28?#cat1x^{gE{|aa@&Lbe?yaxP$2Zf33TO ziLumcywHf5 `5}QK1Eg$rR&ZpZnQgM5wm-AV?XGI}o z{NV|GYRJjp{*BxG;8O-Sp;d*Z1?6uex$s~jj)v;t{a-vvRUHlS3h|;^GFWnw1;eMU z%H1PB00iLU;gz#Q* muYEh@MV0#vSbfx9EiFrgSoe;n^Wc+j+<20Lmg? c8drCzugDj`CN?r?gwIjpcsT zXWtT1Iwx&*xWa2P9(`Tc<9DB0psv-)*ty9Gp=^I )XzjNND z(P*|@t`lHD;e9Y8yt#RF);8@t=6@??hnN*T7aV!j$dH;FCIZp@l!@xuq_7X+8Fh|} zH(9Cp=_K6!VpaN^73to;<3nPK(Iq~Z^(C3Kfk7RZjkqgetMK`zr`@l5qfH$_oAvM4 zi7L-MSKpLfk1c+tJDaGYv4@_N=zO5D-|4HtuF7p${42j#aZ{kpyAGJ41{1lnsv T$0!CEHlrZaMnAoN{0aiE@3*(mQpraW-tJ%3AS^@S(F8Q-5D=+M@f14myPI zy$}$a zP?ZIVTx7XY`oEIX<}G8mT9UXwh0NShoHLGim)jcT8~f`~Kh-`^2~Y|CD-AAhma+(v z-$ZB8+>ur1YVGoiE9+&Nhe=lg4A6p);iFKysYBDhYu%!S#~&f4x=$V+FvmtFM(%07 zsdp!o?Py3Y;s`QP55VUerH#15l>_Y*sLv)E1w) `pyzf7DlfCC&D>~aIf z&pEPtR&~x3ZL_LEHHPhE5|$G>5)ld*{jB5=9!_tmh{XMP27@^ayJT5I8+p(wO&B+K zP)oe}y7`tPx?2@^>w0;5EU!q;P7bwWU^(Te_u1doxCm|Uk$P8L51Xf9L_X5?PEo1x z@$qP%qB%F{tjYvo=%&gCMx_Smo;}*6#R#SHoC6yaRB *Al_>93l$T OB<6`WQF99!nS8GchYMEz_>3al*idFLMQF4rVLFWKp~N3ZKI-oKAQ8yRO%B z=Bch~QfqUaInFs$8*41^X&=FM(cgN$_Q-rrh{$v9y}Y3;K0ziuPevbAtpA3}HUFpk zMQa6UK`b*u*FGxGlb;s3NsF{Q7$r73c18;zkAAGx=D)t}hX-MM(`kk+(ZlpO2-e ztEh0J@w6lYqXbFXaHKCW;E7ClLGzx?<`y1-O!`l+d`bE+5AGc=@g~Kn>8^BrUv;^! z39%C6f)cCJ_=R3M2ctVHvB*zc2U&X5+N^Mq7`QO(8Ne2VE9>t^#dD?qg)jzd$?fGW zpIamAPph=E9U7F}@Rb4|5EC?G?luHhN@I?t#78$XM+6)^6so;gOEepK#c>p>wP;J| z^VVq^iyAt{U0{cVF|SukebiD|VsZF=4`2=qJRl&BRB9H%a77a6A=5rc-C|czqM&`B zr(R+R+2mkzdb28k1~SYef^YHa2;2`H&Gz7Lr4D}S8?TT5{dLZYn4EQ1M@?$XvCRsU z!{`%<024k?KC?moLe9|JguUC^XeMZ4_nRhRNtE;(+G=^Ox9gFkmU%)-Sg%gaJV(;= zwZqmO{6P)3(qOdk{Op9dwluv1+QBfzU=Ox=u!8R|_0!VR&%;DHj5M6bMMa6Xc^06? zKwN^q!4SOQ{reVR=z0a0NL(pH_(0`2;b_J)Yk8$?B6Jw5sF}N-)%lU z!(ipjPXg^^hp|`B%&M5osjQ$@FC)gOYVhOQhX$6;rGYgTOw}FFUU;33(@&q5pXVBW z`s}dU2_)7?vY>qnhk6cZ8+G12b1rZr|NQwAgmaj_TL%eGURE{%oYvr~f$ruLY-@nr z;1&dT(=>P*K+5nwoC$=fCg|uN4L|*dcORGszkOe#Sp*Hy%iZIVE<)=LohHTI1x%=s zng34L*_(VpXd2QgA-~;PlH6}+tW5jjv>RoPcfdA1ZTXVfh(A;B&eV?&yRSAfleakE z^9)esBy?D8viA2ZqN@g^FX58Tg!wh@oag=61nHAy>#rIwcF&cFU39)OSH47>bHI8F zUYgaDIq3Sjfk_8+UfzFmQ{Wq6MtpyFhij<{OsZh&|DMe62$o@xbqcd#nb8Uwl2dHX zp8vdmyKuVn#&K+qDOMycBc#D!Q7((EDZGM>7D`oWdAi?L_ghDTH#xEcxw`W^(YHsa z;_w)SLX|$*2^I1~u=&OBF^TKCZ((}>49o;mlg}Vqmgv^N)fPSKoG@H2DP=GuZPspz zH1=x5c6WBt__vqV`COc%&3eoSi}72~% 5@2lep((mYDf}J z?GGLJ9IzQnXZGu}2W31C9MLQqhS`KA6*a^Y*)RtTQOwY9skV(iJ7>4*PG7G@x++Y? zaI$8nf2S90Q4GFb;*X3qq6D;1Z01vMdtCFa_?D@94xbfvhM9BzE_w< cmBvk zqY?%%z%00XvITYuZ?qw=;NBBxz9XoiAqw>i`tm($Nakdk~GS{>T2|N_z{rwSEX6 zOmJEMVy{PC`{>6}a+_xTfLld{%-K#7VQ*G*x9WU=slBwY#c&2KGHMhJ!*-ppZmcR6 zqL{k%wX*;XO7J~yI3x*h|2= u>CezprR&J3LWqY+P~nAdHBzXYh+Y ziiJd0>$L0u)@5PU2Iyf2Qh4OOzhX69=ng}2;Ii5Whg6iP?me`|^Z=ijc<}`FKgmqI z9ityFG~X!$Te#&it|z8&yKVxq)cUY=J1wl(Q%UD|1{!xvYM u{O0Gf@Sh~`N@}HZ*cRX+-v!DAM)rTvq#2~+y7XA}OLB ^&ch_l1BOv_(DL&8mTnRmmB?86 z(k8Hiu=~%>?XEU&&SCxja@x6wDopSj!qEFC=)OvofG@;Dm204cr51d1fJp;+qG8LS z^8#({9|z;TA}8n}OP5-&&glDKL=V}tEPj@KgPM+(mezF!T(bY1$Ebhj=PvsE@CT `i&(tG?cpWRZ*Y?^_Arnv2>gG$ILN zBhvRj)n1=cK#cNPWlsO7d7IAh3Jx=RO8Kr8kxC+uO`_)??Rte&A#~Fg(h>TLF`z%> z-~$2>D^V9*yra+K#Ybo-^#8kn82$3Z&5s1{iJ1q7-D9P+c4s*HQAO!JULw)<+E-l+ zDT$t^AHydYJW%jQ)=qBlR(_^x2;l6vAIy=_iu<;0^6I8Y>3)0lW>3pdcme1Xk@L$- zXHmy;^j)P*Gw)4Cmz_N7b>q5XPIB93fi3_0-h{bxCOgior3(0x0_ZM_?EQQWtsC2h z%rD?cNB5mx@;TIW;+HxuDvCb_ VPUT)# z#jML8K{X97z?VVT%h|?$euG&8zWFgF`X=_e;DfQcu`2kcjAi}F_B9{fj~;Jj&S7X` zu5+82nNo)zq^^((CZZSd`*&ahtrP735)?L=Z_tJVpxiSg-{{!MY2&Y 8joZjXw@4cOFRbP`N~5x(yt&khZ+Q zR0p#;hfj$9r_Lb~k~vBe1@GZGF^2Pq;do-|s1#~M8j!?wnJ_HCgpr3(DvaBiFK>`d z_^azCsd?tLmKJsx!}nd>_Wt(5PWLSGLTG3EFe0#rQZrL3>{S Y?Yy+hBgYH3L)y>2UNg*8eOlk(t!6)4=aBQwc*T^w&C_ z)(>CGJW>f$cVZfWB)gb0IAmJZPo;|V2hSm(4o8S0@J+4veQbh(DPVaE%o_ix$v{?& zecKh^Z8Z14l@ 3dQ$}2Tnf`mW@uY^??#-7Rdj(3HmFn4k0vl5G zSTlE8J>TWRS4Q!2ZvX=g&W*q2BEbQ>ri(p%qt+t=0QS@$@Mj*c6c_ja=U$7H3jOul z4)=xyZ@QA^Za(qfJ*kF?=Vib?kPo$n>Kx}4TNVgYs#1Em%{)A6VzZZ+8AtD1O(WNN zw_zsHcD%BicY*7Guh*9-T04@W8Be@Zja76e6st>y)#vN(qjgWq6R)n%@_+n->7SMS zeo52zf4F+@aIE|HfBZ5+qHMCs-Xa;v-a9VYWMw8RD g>3?&H3X`|dTKujlhTAM30*zCi~~9NQJt<_ZSi5mP_o^O7GOF7Exv zZOt##Sb||dGJbt(lfFWvJd!0 FRRXn1=?UKv(DfW64f$ zaFhAAqGX#;Cve;wPB0_0xp }?eEq70(-0wNa$@1PcLFzIm=X;XQau3kXk~kGFF8T{vOw^wb>_U(Q0Z6 )*h^pj{(bVDDAL_-vvBX=-nt(n1(!L0`= 0TB(s#$$;PotD^-l(>V@q=_n5=DxQGbI;s`f(65pq^=!j11o^H#ozt5C2@Q_+) z2qvYWOmQ*R_2S;QjW2Rax2uQt#J63XqQVK&WY?t_jrON8nB l@_W*%jdyWZMrEYH#qF I)b3Hh1%ZX^YHY~pfbOpduq z@s@g61Obn31~TIDhtRJ2c+QkzC?=_;-2M)t+3RN_XCZf8D>~2zr;}HOdF338 FPV;J$Gq;h}AhM{9#0VQRMpHw;5QtN#)c;==;936nYa mzGa^_i*J(A`5xbmqwd$5W+-}@Lt~FU`6VwvW?iaMWk=g zn~!FhMCjo#3?G2*&Ot~}W!$c|zbdNGEw?Yd=mkBF&F#07b}tFQ#BhpL#bu8V@s0KM z;8}W vTqQ#!4o&2cozUBgYZ-18BOWN%>0cE7F|}r+zucXb4M_ zsjdz5u>+j!J);c%?y#}y4w@Zx*p2^tIRvAYOk)vk$ZR}z@Xg0Vy$2{Sm(=bZyVw)2 zv%k)n>$TG-?`3RqlkZ1s|5fV@1L25;c{WZ4YgI#|X*Y$1(VveY5m@WSIYv)BHah{V zC7vg#EPFkw`4W9XZo4LUz1QLod1HCwc0 PNJvTliJUNf zGQ!a_kGkuIs6_4Yj1#XTo?e`JogSww YxKyHl~LW;KZhfrwdc$PSYu+&8<{IwEV{%(Y2EHo`(F z*icLI%&XN+KEpBzfvBSAtYS2@%0`4IXwFO>uTVwH$1{=2u^XExZ?fzB!f`C(D0WC9 zEmBO!)ah|iZeUyNe8nPP93$R*e)vs7V{gL*6D$3{50mA#sVran8qmDFoSX;loZ3}= z3xlIa0v4(v1!L%Pic~fa6c{BKB68qnG%-6aSftnkg+|IkWUwN#ak@K&J!OwyFtTr8 z^f*H-#_odQ3}LFGgN-Z~Wzf%e0ggT9bW6dvgVA-Eu0#;bWuudRxsN^LGFk<<%AsQ= zrOPB&*B4Rr6M6RT&RbnN)7^c&At~cP`rN!cDk>^YkB27{j+JuX?Eh|jw#ll)B@Y>- zJ{rHgaGPI#vb_<5iTIzJfCU;Q!H0)|P^3+yP9PmG7SIo&zdGkB_c)%U?+t|{dWe;# z(Zu)nc+Obs4Pp#ImImu|&(wS@naqQX9~VTvC7#YIk~lfmVw1k{RV`VsOgEGnvi_i8 z`7{@A5Q+>$hTT>W`GGmfM#*m;d{7Ko6Gz~nKp?7TRS7UT%!BXSyT76ck@_B^iCltQ zJV}CJK1%kVNrbIbl{Wpk{}#|@CrZN;ZdMW2^%sK(uP-RxXL+eH?{v&$ G-4Pk$huTu~S<2?I$EBj?R4H!GVh zf~G64&GSsqlpGW?7l%QBhhn^{qGIo`M@ cx zir} T z!ug9kU><}F2%d-Uic{m_Mu8JY{JF5xdtFvivK{<&4`Cj0=jvb}fA`ENjV ZEOE+rkT8E*i __ z3WO<0HsRpmSrdK_O*+^*zscMXx1{4sX4*`8XacyKnw(r0AoE})yzBB!@l?EK7J)jw z9$}JIQuy1rD@BLBbKbLyb-RLxg(0U!@F^Q>^5$zPI^mdWnPIz=CDW)#fQ5z9!JiHS zS Vdy4T}vQxI7STxb 3LF#iYW;#41LG?k+IPXd wk4q<>lo$)qj5tXd=qk0ur`!fU->d&)p{^k&}Q~ zK^}t@pth)Z5wJBt>dnJ4gF9CJB)n8+r~|JFPT$oVafdvSOuEw~Kwm*bV_I4erH(=z zY@I#MzkdB{7t^#u{fhtW%2?P?r)o;5jl=!XqPs;aI=I=njTaOi{ZL3kD#eoMYdPS? zC#Qa@;kC+_CLNr8?WK>@2~W^L$_+E^BV-O5;yB-EVDJonAKaCQRR08~BsG?C=+O`M z_Ynv fhi3+{Vfb5~m<4ZfA~bX6X6125ETVQY0`I;cu>ET$VaB8V4nw_U=T#VQ zi`a_53NLlT7Z;?Ovznt)S)mXbB3Djla`|xG=}JQE1AP6^-Sf5@LCipU9@7>hZEfPJ zCzv;oNFYgl2Dm@aU%7?=n+*i=aPjZ}G%k1X81PS8$k6~_h203C -A`lCvOXW>tgA@=3|j}AQYQde6eQFd{D(>K%SqMtwpr1 zT=s%lkde%o-v-~icbb`pW4j+W;;Ho22cjI`8xoJEW7K<9*)DQsz8Cvm`=dm5*~+fy zm}^f#N?PzvO=m%IJlBTo!@1EDaQ_`^%{M;qIl?F@ExqUREo`}Y_g+};N5D%K7K~0` zB9TZ;DUe v1za!AGX8txYq*;*v5&QfMvd zC`cJ6SWskE@9%*FEnPZnSur$XI!OGTOehAIy|>E%-~Tg5)NFDIv0B-~(b3WF?(Qf8 z1KKxH&~4`DGa)3ctP1FH02nzs-GpQiM0RQE=QJ$T)_hg$-`0%FA{!#cpGrJG8yL)R zOEBfDsBRBNOLe$j-l!r0 J$Kj4qs$v5|GKr^!peKV4c1#oetNI;iQ# z)p GyUeZ{4OJw5y3S?Zh>NP-nUo$#rn}dOR!ZUXybO77WR4xI-1%%MQZ+t* z)aIMl{h}8(ZhHtsWY-uiA;cJUnQM`}T=)7 y9r?TGW>E7hESt7qe9a+k&^mJ+ 90kvT8&LufLIrVHv`gIZIZR#T&1kUTc@WNv1O+o-EcU}g_Lz%| zQa80B_-jDRCb^QY`zL$(Ua+N92&0bdcjcqf34 X3qP p;V^_{3GEp-5y zI#eHhpPO!fJ+7O7f)atmx+cv!SnE$Q2pb`hR}dRhWoiH2H=hN6IBOG@Aqa+5EX?y~ zX<^2sGBG9>k3=aBZy #oqs4zSj;3ELbIvlTH)&)%xN HZy~;fP(Ars^`Fo9 z8khMkg4b3eF_D8YYBb)H>5SSDS25YhV{+Mo+UaqmF)2v$HgNYBM;SjGhki+#iSyFe zB1uVrl3(|#TmQY!_kB-<6B#P+rcL5m*Y4=w@Txv?*WAgl)%sLcP6Jp9H#fJlh_ez# z!kj}Xhn=sNue5dGKrIbt^BEg=Ni^rNccLUS36nK*=B#_Sm&k)@VInGX2!MPdlm
RT73l z3f#MQ&VE_fcEIsp6-bXcPr!yr?_rJz=rZ37WSn|+PnGS{swvI7y{FFK{94_&I5{|^ zX}P@-mPtAr=ID=EpPzyW`v@|D&=9GNyBoB%0BRc=7&M*vA!$m8y!d@38&LOQZm2Ra zmpwpPdiQ^{0JzA&{eH~raBqU&UeK;el2)jFRxTBLxZXs4uKPvNA?%U<5hTH6@LR}V z!lv?Z^?KguM<_WU3v?MA&>xn(Iqd`>h5{<7!3?oKa4JHaAu8_;Vypn#F5Auj@3zES z5f&|JU}3LL%le{>8BC+wTU+Sg^T%FfKYUKW{-aP%P7XkcTsDI;-N7QV`Z*Ws^)Ggj zsc3XEdbM4(Z*{ZwYb~&X9?eudYI#EHpcwCF8#wp%?>8N{{pp0L%uSKfw*$3M&C<|- zlB!oXg ^I5o!8KtfTsX4m+M!rNn9QeLoD9N z!a{mlTBGML^D<8^M8Kmr5RZv6IRgiA39*d_2M6Tb29{2EQ`Q)8CbkEY>vhWGprSon z{hA9k0!n5K%m&>Tl)hI4W#cGoNKx$s_q}giNij1mG0r}eW5r^eX$5chWcG_ zO>@5>D;Uakm@g_~ Q5t)Q^!j3;N|hpKf2nXw7IHhlDS)ep z%{R3095%t_=hdND&;Wd=I9>dIWjWy|5Wf_cl 0uuyM!2&6=`GKHvRm)i_YtD!ynO6jK`_l%k3$1^nZ=(@Xx*-ogr_JJ^T{ zgEA +hp|GO}QDs3v!H30XX$QKPQqO_w2mhku z`X~x}2x_mn3ZD= ftoUS7E-8mIGNm5%(KQScuTGF>~;x zsdT u9%`FKX&3GZohnq1ok$Ej zVMospamBLwBm)NM^m|@aGF}>}`)k`sxfy9)RD818k@b3)W1xkBiu=_Ttz2wyv9Psh zEZ#e5Byu7m0vDjtfAtp{YN@diJW}NA{1fdlE$_;=B0Q94YrQ9VbT33Nh}ZF8VWU**VUyjI1?NyLj*TN}daLWKL#lLZHz zv cwXK;b?x~sKU9AF%fjCqj{wocy7#Zm!6T zL7k(D$~6wdUF|6>DI(G87@<+~$d8af5n2mx5cDF|rn&gbVPHNaoS(xE{OHrZsN( zWb?QCoi2+OF!-n8#Re^=wL8S+x=xwXAjYwD@L9idCy z)j|ngQ&<&`C|Q-_`}+Doz;ffkvNYIiiv(3PRp@dKbw>6^38Ju@R9V-y>Ro+?7f+X( zd8U=qF(-7V- Z1 z!-if)S>GC$IdCt3A?OO)QnrYdf>y$sW23>`@8*$5Hz${5%QI7N#5NO5QqpJGIuU+* zkasedqS*CzjO#*blRc18XXXf2qEi!>uiM|Z9k@C!J?rQQ%3(oTco0(#7zEjvKB3*z zJy(9D1)hDw2@KmL?RY~G&uEK6svNV~X{;3a^6}Jvxo7$A?TxSR-9J(px^SuUbgrz{ zWl|cO&bQ)a_bmMq^o|a%)k#>&JJqg4gai9% X*4QSCSR-|-^?Qf2ONlN&75?f_DecBHr~mC%#7OtI)^ z&+Oq@Gy!87!0g`^>f|PGTu#`m?jRl~#xt$mBkH#D58~%D#^*8@6N3=(vz18RCI{+- zo2&IN8q@CzqG{0O(Fr}Kh)CBIjSw0MK=19C`V-SgU-8n8pGV5z)7yq}zibP4y-qAr z-dmN)!zSw6({|3XH`x%9*4AqP9F=?@4lV5`+^Q%pjz^BA1l`e|lL4ZsUX-Hau1q2R zvHP!by? NgB}D0ny-uswe( z$;{8okHb2O8$a^zPwvtXYZpKSMc<9nn`JQ-eP-LcC^M2(M9U?o1?=y2sT(vSjFq=} zu{AoqM 2s0738=yH5onIh9y?)Jo}12LC|`5Ft`3 zS327xzO4G%zCH?gVg;YAoZOXt1Tkj2b#-{IO|1bcA`X>J_Kbez*V_Heg=Y_HB7EgP z41wXUKZcTNKaaMQF5BUH8U)AXv-SHSHM7nV@3T+7E!K8fP~R?yB5Awj_HV5O!yYCk z_9EKpW8}-aLUaxe5_)ga>sZ1W!kEEk>Rf+!r3~sEQe2OT5t86m1wl;U+>0=5U*;VA zVomqEU2Xt0k7MV*{q3a2x;OJv81k2zO$dU&h+0tDA_9tw?+q)+$<3DA4NBn@iB-x^ z{VY8=9rhup{0~S*p~`mEd{9zVQt}r*K{gJCvap-q;AFlFPA*$KQ@Hul#}3b|qy<=~ za;W(ov)!#T*!wJ11>rNIqGD$MnDZrUy?-N#3i-^tXR||smdCS3(lD@Pv53|I$9qE+ zrwXw%Aog;9gWr~aFgaCRu+5g`KX*(-9lpC0%Vc{yMK~tmBcdt2KC;tJX@H3JCUMlR zM6Ak)4=o~KRoL-8FH1#s%8T}x&ZGJgjp3`}XlQVl@;|H+Epwl8e^rKocuGyK!@Cfs zKwQbldfU4Dk>hGt_b}ag({z~0^s+~Doo3_%+`s_ZAcAqbGLm#Xwm|;dY__u*VJ~&F zRQ$byM3z2Jnu_GkaJ@b^!jfatXF?*aOzNf#(EyJ7SHZx$=>RZGB<5Nemoqs}He0_L zAEr3z2u}nNIXQU~hP%~>r) u8j)#QQ9x zLd*D$b5`(Zx%@g|W!aSS3yLSM*iwXvnekWZp$sV~kRy@P@lhp_6BHuPr^ZAgch%;G z&)n8J`-z7J6^U5yKKh6I;8uj;V}R%sGA$6dDtS7ta1G!F5-jLQVyI~b<4y*sMt=A5 zgFI2Nhogv<&(7&kD()^oA} dQiwV(OLG5<6qL@O= zX*GYBx}IZP?hFs7CVW0B(G-O(X7wZ3Xh(kkzAJ6PAx~wiAG`iJWz~h7B#PlRC`g8CG=IzTtX=KI+@(nf$g&x$tj G;<{gfm>?8P5U*YhC2Y=1*B%4kkF@Aog+>bhy) +IXLv0^9N93_%*%H3WfS=eR`rd-nHe2)7?g=a4IVqx&oBa)a7Eu_9;q=mRS6 zkd!#HnoGrMqoE;c!pRKL^PXz*$&wdrzg~_;^{)wnN>n!S3@XV<(pQD<`rI}T*AW#W zx;Dby%_u}r!Q}&jw$rw?V~lkVo<)(}UE9U--8~oLIoXcFFA;iLB&L4HRyUTkn1~k= z=f3h@|DdC%D6WJed~hP*;rPCH;$xH0yMHnJ3lZQ-HI#97#AJZ;NHe$P-!+=eVg9>F zIc<1H!v{mZ&17^;6Y<}KvTju{Eb(n9^^mk^m#DX6&D 9@ 15WeCO zYxo50k%sth9d&he1&^}GeTaA~EG!h|N@Rj8bT1G>M!kBKb $bgxi-&lg%+ zp{r^XO~1+6dtFV%Ziv0!q3~ONdU$h^e=D_>J0loGdJuQ?*}8g`R|n}1csYR4Kc>p& zLBI+zP`CZg{(>FOd--2)fof?VNg^JX oXK7011LKiVo9Fe_s^b5m~ugW>fEghLC+L>odb7cnc@zxNL*zXY_M9 zCAq9o-;pe1uYghkO%s!g32hA#UQ>{_Ky=dDP{!$hktRU@l@t{{Hw%)Roc;@g4~OGp zpl_&06>~{bxlK{z@ISL#PoIG@-4~kkBNfF|9nwjL_S*phP94_+=~Y>@Ra7GVDP@qz z@Pq(#%Mv^*oGV3&Kr^8l1~$nn97L>Wq+w))fE_U-wX90;m~k9|%PZ(dZ`kU(!F9cl z(1xfHeNmL-h30pcP!{{Vgo?GKI~G~ACFkLC4%k4@1M5^(RTU+_3W1e74 *^3H%JTk{An#+b?pp>e-!=F!83tpD($|Wz{ibv>YX*###7x+aIYrJbwjbzoWjR z`D+Vjn&^>x$HuG~p2OrmiV>gF65n!5ZFYjq<+atJ>%<*G%tv5>fd;*by0<4Fw O)tO%ZFGT(-rX~I@pYuv5_%Bd7u2-&HaTLP&!v2p` z5p-Mh59$bOGvMLpx+RD+6gQ(;NPK!8AI)<`iU_`ldxG2j-Rf=STCa+mk-1&&Ma!1A zwMe?ExTFZQw6vfN;8Gc{8MU#bkcY`-cvvBiYOI-nEAGUj65`@x9e?TkcctfXclA|= z+4og`tEctzO!;v$iW;mu21qxz#nENoeX-M*M*_Fa&7~dV7nBI(oWb`FO9*%DV%c*w z8Z^YhZzKRd{o>?*Iu8=I{e5cxGst1TBGud5TVXl_0r3b)ef^aG!QTFTazb9i8Ex0p zd`F-4t4t`dNv@Nul*EkH-m3JQ(a+;Nf-g6QR(#Gza0{||)I%q1E4;&PuZ1eYJxwn? z+ifZTvv{_iwn(ahYsDl~CFigiGS}TEK~Tp7X%*GuV;$w zee7s$ai=|_cqLiB25$spo9$a<-3sYHR*QNRc2680_Pt^b`a!+plAsx(XY*1@Tv;K9 zW9#VE2fBH;ov*{Rg}-AiWyj=G>2W|Jy+d&mN9l0vD*=ckjojUTgT zTnYyjRrpbO> zX*sVj{~mfd3ro>LbpC}e{an72~rp}^0ttxtAk{k>70L-Xx z2KIQNF(w&kj&Ex+soh5P(IHki@ir|ZebjdNrN>Z18AGFg|{?XO$V4tG%rH7BjGT z(yrUb5{Id@Nu3aJ9@z;Yh93$GyZ_Zu2ls+U?z^J-!W(~WRWiw;^Z@$%jgOS-?b%y; zlkGpQXD)bGEvuc=p6>H&m-fk6ba%Qr6N)|h6bx+tGYCy%dvo(CWK01(mVXXFHUpv! zVrRf2ZMz&rk7H^6SSSsG&r3^dOb!2wSX2F9rUD=1&|6$>yoxI_y%&9Ipe!4Qo0Lq4 z`O2h%6f=^W-1wp7X#W1%x)3oF!$Fyx_S`)Jr3CH!8G$v *Ztl46UpBxcOEmYc1>itnHw$Cj+<4_%4&g%t4t#gHycs=?#(-2?PGaA zlcT0@>EA>Q*M%LndwlP~L5505lsK^syWxYeH78Ju-74<+eBjr&r9N2D_q_Hj CN{vpofr=ng*QI7&00){7(|p-^!@S z$57Wh&I@I(kE*&L+F+T#FqZxBzwjvj4XA%DEb=snbv@1;70$!GJ?yVYJ=HT8q#U%a z29C+3&U=Qtsz9z=LO!puv{W^Y)G%QXz(Gbols@LH 2c8RCWSMRu800mw;9uH z6n^>gC7gxM
Wg?;u&l))W(=B%yR|u<`=xyW$XHUTIUQ8jkVmA58XYC z??Op8 c02Ttw0hR);Y0GL7#tIoy=<2o z3QTp8ry`*tP>Z1c{|!ht>zex~$~wg-Zg&v$q9P4{qMI|Q@=kFOUxWdBExA%Cf94*H z-SZ>tYv&ZP#PH>DgY7iPg$ZS9Bvx(W1iz5-tAg$uiXzY~h&!*y0#E=-5|lt4TmU}* zEsEqkTT4A?&MK~3t43+^p24D^lvtYYoZH!PFdei7)rOtjz6md(pwuQC+oxxgB-f(R z9}c3C_6AaC5H9+$a-4p+d|ICV)d6RMMXxgiVHr2a-D>Fe$|m`%+MFUF3vVa_nQUIO zD2*|+x6fHF9xkyU0z~?D_6ZDpVpgefBR*o_d(~|IrMXGs_rSB^=i%z|y*;m~lE)*- zU3R|{D+90c<8?fTqXaNKLvVY2SoTZH%4!7;9Qb6<|1IpkzM#9BoAWE}PTC;6&z55Q ze-}%4zOykp9Fxl|&U!?B*hznRWWCIJ$bb$ku& ; zvfaP$2iXY*W_ CCZnP>Qs+m4akJZ53_|&C zVkXbM^Dq9iht?}4*iV`2I)LwuJdg%v8!&pGnd1L`OShnxym6*PfFB ds#2AR8^72baPu*R&gLL7DT$A$44!Vmk zR+hsUz(t`(N-mU@6&H&_WGV=p=DiZtRknRAPn@sispU( z`<;!l4Uz1*(5K&x7QjgS XLj^ImCg>X^d^$ZVm^L=0$EzFy|PJf)$ygp0HW@Kkt zo#Ygw-2dX`2WyRo>Tq}d59lo%9`}q`T6BLtOdla;9=vTG0@o!=&dWoV)`deM^)rBu z(B-jWs+)eR4u*JlX8AX;1)4z17W$F{Pq{vED1ecZGt-2BHA?_b3+<^+cm1D#jhUM; zEIaIr&*4@wzY4#9Xjp3WD5uA{yXcls{!2WN9>Uc}9$Vs*vLRe2PHOSedFlBwtNx z)Npv_a1y;aHJ~e~k}#$PuhcgFwr28?=}NJ%4y7PHO`e<1Qt7==WKXLok5FVBH{O|| z;m`23t+mu~$iBTZh#Z83UVkuCj6j(QPBcjQ5UZK!_bI%tVx@{#kT)YJB+6;D7&8BD z-T&;~MvT 7@g-GBH^mRF9eFSa9-4&q>DxLlA%l01>2r=+R;$uR}z zo1Hvgx9SDNhDgdd9w6_O`BUmJK*(W-UfC1`qCW@CIXRD!qN*yShaWn_Q{Y|?DfaymfTVk#xghpAXtu%a4w zGf@ISYcN{Rtz`sRr;_z-*3?p_3^@H$$hTfLG&CI1(ae2;`6f*24@i+KOjkHG12h8> z0ZsZ|C^}}ruyX_0QAsV5U_Sc&`vG|jbLS6ow#?WTNgoJe#H;VL!6{GX_ds~#NGk7w zkHg-R3}Kf1u>?*~SnG7pe@d0 h9EZtM^T_u$rbB z9ck =`E^5h1fB*4ho6%j9mY)DEGbn1xKNkYX9rCeL4>vtnmwhhQ)=?)$2k zIATmvb3cbdSX+JL%@-~*ZIbt3I0mTr;P4EbVN%M?BKKgf`VS%HMvwYb{2Ga|l}Vvj za#(7*DQ#1!M<1N3DV3umu_DsIMuW(H|NaSh?T!W@v&IYd-N#l|UeyVJNWmPCZP0sc za3>Vnf^`mD`J#*9dj*mI=v6C!8@{wbV5u* xD$OI+_~m#k$0$zOL@t6YgS>uf(<;;{a>KaS?$mLXM9mB)@NrS2+i#`40gj z&PvMTOy~M7)F?q@XKr;E9?i>dxf&sclpR0lF0xK91T03Qit^dM)HWqDT}8ANRuqyD z7rbQ)`6p(mqJQX64mrVA`hoO-M3A`<5@Y=dNRHFX(Gvc!M@^FBkc2GC6nCpT(-X zze-;_MTnWxIyV-lS||M)g=0Dx$^IehPthW0hPoiW7bdZ3rww)=+{5+B z&CO6`P;AOC=8z(A+{4Bct?A;!L(tnwK5+Ok!?{
f^hIRPe`G|Vh( zHv_74XiZ*GMOL0-fyPGNAuVo3dpSe&VD;u6<4s^MM)D~N8IKL7VoH{j@XKI4H1K$zH|?qTn{ zPbe3!N_=B?hr;{2+RgZ})1#%`g(PeW;#(8f&< Ha@%)2^T79ttW!f z 8b^UR_y8Z#dg^@tDtV5zE0%2ZdUiD;%Q87?xj6_E3WGXjf z?TIySM@5_ZJxnIGp;t=vegtiLMaxO c%P%`G_JkIWzSe!*bH;F@vS}R|Xmaz&amrU8rG+gK6vAa??nACqm7<6?utcJA zz(XD}DQ%7B^?+;{fdK3nPz}fp??tE%XnyfBd2Qv9q^=l$wo^R}S?qiD^Et9qdcV>& zUhsITs}DhbCrV!iW1e!nd!@Fb>X>pKfBJF%m<9nl*^`6cNeZ09d*Y22o7dmRj8`^1 zId61tt@G*5jtc(V=D|`Crdzqu$au;un($UyyC$xiaY`T}*UgO_g*=bP*^sV@-9Rmq z*u&c_ls@VkvqQ$VA d8gO!Jwh;Hd~zELR`PIOt6*bUODo>b3zM{PSVj!)YT zgf5CX04II7wbg53d^P>U+{Le>k5M0Ad@#|f& yU!%&NTxLuuJZfRS`}Z#rH17Z6qnp18 zyGk}k!~=c(*>|#B%B)x%0qBQ((F^z4P$@8GYw73c>gyHHax4X5jtKs{&xGuc7D2>eV_6C0PT@#bb zRqvE!QvJ9qJwAiZMyje&=kYM$=@8U=A53#4d&2Ogh`KFrnGV|Hk`c6}KY3 ygE>6~kI7`c={CnahHy*H_%RFx4*t3gpv>*!^$d%2wDW?Tknq8$H z49e)wCC5Z#o>YmSfZ#v)4zRcMV0MZpRLrQvSNOo{7AaBNb{tNRGgQ?wAk+qRxmW}5 zzo+|Efv8jrClGiE8$z*u*1j9)Hu5h;!B3!w+ZVg!K!nz<4oXba hfj ZioOz)0=J|jl5^m z@UO=AwlIjDhB(+KxDQ8&(+!_}1dyLNGi}7{b99M@?);_KMVr?w%ec2eUEgo=El0An z5w7eSHUkX-tZqB|428v^)!c8-l;UISWaZ-TytJ(~0H_5r>YKBOR${ rD0TQpbm&&!h68F-PwjL|7&DiHkT5Q(179@ zlJilu%E(cx`Jd;W30fntbI`3K^Kod5N#x* ;TBKy?$xKB~RaJa$QNb&oT|eVL zdl-!#bTi_$P8>=J-_r($OGPY}-_V1y=&08A_Rd{slzqVFO(F-iA5{FFP{sNVR`YdJ z^xPA%{+wW;Je|zb;_++e$K&ynm`m)g?pfV?&7b_PF88+H-4t($b1JgYB>kZ6eVtnP zCv>q8p=1q_w6KJqDvCb+0yqLp;Su3Tjc)2(7#w_N1}*b$>syczA`r?7o2!Rq^;cN{ zMx9f9xclw_vi99Oc1=dzx8uGb`U0J97EJkr!vKJ%cjq<#4186UvksG!fJ>BvRjz5b zZax#nJjU#eBHhl!u)8x6^5#+mRjwU8859Uj!v`g=MhBX}_4pbYY3(CT_)kZK3w(&B z;r6UEb*OdV%PXK#H3U#vM`r@W5ovE`47O4Jc2EG;4jcgv*aW1HG4E2+>n!V5>Z=kF zxgmHrSH9;2-K_z{B1cM6BaluX(aTb-%^da~q>|vbY6XZDu%OUZVd{!6(!X9V4tPAw zD$*s9Q`pK^X1{gI0^Bn2{(+07z4sTuHxRtb$DYU#bl#aZ3c8<{ZzZRjjl-TXtiE>6 zdbHf?;=g(F09&Qv`q#6I1EI*lM~{F)N~3~+5;#QR2ioRjrasW5l8}%@(Mk9Lj3b|C z5$gq8GQ?-vxn`Ax@3Bx4v`yIr35BhZ)DkmkuDY%|J^wC$`n@>!g6}*uAo&_4_+ub) z6J)Fhuus5xyc6Jq691^KvqHuWh>3bYD>;2(!203}Ed7_s7X>CnKijO^#>3O>Q~l5X zl;85Z%h;lD5631H7OGNwMDC8iN2> 5+5yb@^8cRnu<1rq_T$g9c>}K^>1I;KkUqu5H+1v(uh<8Xo(ZLoiUzFc7))Vg zlx^(*?uatjgAM)@yRHd7>-J?5pQ(a9Okc*yIL66Itu2|7)qs2lSbK$KS~zEIuQn z8IUd5VG<9i9BK&Z!jsPkDiHziF2&sYN||4(;3oL6CXl4Wraax Xaci~RqghokVMjDKU8 z{GI+ZpumGYSsO!tRav7ikoxD>G-&-H2fFy(yG>Bp6Eqb4$EOz-Y&Dyno<784N{A{i z3 lPnN27YR4(Z$81qoeTgQi!-%W)mGRXzA+0{Gck}Y=JRDJ%*Mi zdpt#ZJ&9l1 l|B;-m !0W;I=$xAd*{3#P0{Pd~epfl6rN52#dt`J$InH807Kr3wV_~r# z$(CxL5%|{_wt!M({gWTd<5M}VcxKpdpt4Lt5lA?XfL n zqlOzHS=T?ru+pJ&J!|=!(229{C9?-(-M-Ctn(}2Sf?!5YP`L_*i&7WyeX=iaCW}2s zAUHTUz|{Z)Vs8T<;eWPD$5U{n#~GkzIIs)B_?w~%`{y}07clgarQ`Ea^Hreb27xlj zo2G7u`WD n14Z+(2T7uOX~qDJ#{xfugu_tL z`p-`w_aN`peS<2?zKM6*re5EZo@MnQci>BeC@n*n5!0}v=vU+Q3#i@LRyQ-$h(7rC z*B`|eolE^*sH{f>9NLeSH=i3Q#d5sT-8;2g9zO7=J^eh>VsTREy3V78tX &IJ_CQ-xDEi`hlkeS4170C??JSN^OXwM!OBE8wGEF5 ;am-Brnmic-3Ncjp;GN*d3-Zq{~pXx1z4s=^DP8FU_Jr@jEMDJ#MaqL z@1*l<(a73Sy9fcR>jU@ve?Fi3t&f&YOof`CjT)c?M=)x>C3|0j7~wz_MCeF2M6MqL zmWMKDKy3xkNo3( A}T}}GVSI0Bg<7NP5ft-~x7}d@2w5)gw_101I)&G780&1ED=2C+yfVwR` z1yt*o-+BG@YweQA<`o{)*?EvY>|@t_fv%Gc#^Fji%yy4l0C{T$c#}~Qk+A--+a5Ra zAK$PrgO=F(dY{94kX_gutjVP*Nbol-2m7J@5|T~wi}2^-k ju{TV6hAVZ4uO8x3CaKfF-o(kl zq4}Vaj(rd1%!E;5c~w %GZ)};q)kWFd`c-(KlMn@=3U^F?;K~JVhGN_XIL(epQ=j zOJ7@|A!i?kCw~s}=4wp+HpdFU(}qskt9!F{l#Q2Tx%&CAvD1Q8ga8`C`}(eaO#|EZ z2^YyLB0wZ&Dv$rb*mQ`mfm?z}QoZ28f1#Y@{i@Frb;VG5+^f-ti3=dn`pQ7}X8jms zBqZeIH=xvkJhZ3D-*z~kjEAe0{pmHY^xU+6$#k hT||*q9?V1weXnF ^JD@ zZZ3xt({ByzK$!0|Ut=@= ^Y?`w4Cp5n-b5$Wwbd}%yr_z!G3!-$-T$;r?E z29WaJ)RwuML-BTM`u$PpBep7Z j%YjO$*bRa~#A?(*EdJAFXgKQNHYrEgxTSE!M7(S~v3 z? 47ZFoq9M`8==*QqHV4TwAsI)9d4Ey-PL#u8R*J*y0+W zTese-JSyL3N!Wx(KnFV$ kP8-^70mu&eW{*6()XBpMMrE()WCz z$&g7(wB}@FEcA8Zq1sKi)9lRYKeAu7J&KCwbS9Z 0u& zjf09L4PgmxO7QAIrj22>HU5b!bcSC4eo*=m$q^zn{i@ECS8LvU&Ph3EJseI;Bv1PG z_aMpLl}r;Yk-qHhOZl%mypO?XbGBU}v@KiL-%wPd%#-JO3>XWHe2*#MLLG;wz!5Pl z!Nm8kMsJ+^%NROx?`Cl8vuOUPs$tmpFe9?{Qu4PP1pR!&PW&==Z11x;!g=}Pd1&{> z^E)(Fm3n8yl`x^uMN2F0AGiz7l$OR?W@cDRTuLe`J|~-R&oiC3h(SHE07)DNAWSee zbb*mfz&;lg7D7DAyz5cb^2hPu#24t8h~gXdVGq06h5LL64Qt;PUsyK(Cu!xsMr6l( z<2XjPS0%U_jkmsnts9VY)c9%`ROSPn4NZsu f?p3XrFd&g*_pC8nIUvTkPrL3V z^cS2?cL*bey$_29UaKM1nC+F}qa?tLyU*7QVugK{wcj7#V?WqDq43>{no@YbX*51- zI)odT%@#pdjZw3%yhbC(MR^Vk0U{tE@c^}%;uX3=(b6-L8p__D|3Zq8Bd0S1`?gX% zxb)Y(Ec?dwW ZFGrM8!`W6p{-*FEdTLNli2rxEG+ L zu*m>B%Jbm?5>>p3W?VmCZk0Keg4C!{8<@LT1N`C-|4Sd}7oe0mLXD`o<1@=@pt7SU zJIW}HR;-!id6iu$A}4!;v3`+;CE;qcc38R%y2+J4*_eM?Y9AtXJn+-YB|wB;G=kMk zo#>pBqDmkukNS1Pqsh1{rJyvd`ncRe0aTE86({Z-d9Zi*FZS z4V&66#&0?ZpG)M52>i8CJ!oESR0jbMA-B6Je>)Il`9B^RXB?;+w06DNf=JWI+#;Cy zsDng$)q^gMGlG*Nf>VfVp{=`mTD8S`EQ=+F!@NvEaIENNkF#IYl QgR4IN*WXa0pZXoC`fmBC;@4OBM1m6Aq~>f zrIf_Cj`Ke6`_0ThGd~@+_r34E*Sgjfs7VuFuPGBU&VQl^76#1K_03PtES2^pCGFKC zNa|%m#JWiP`|a&WEYB1R)F&hB=iTm#BoStazvkm3VLfuX7sTy2)A)D4;a$qq=x@UY6(xQ}`&*FNrY^1>6ThU!}ko5JyEZrD*5g{5Y=p#B<-wmqpQf zKDQ?s)kxS!gMxxSd=O2xWsl&0bFZi+{`(`)F66bd7$va!jsdR%;Q+jpoL`GYI1$dw zXy&97?YVrU=NCCq5QxAH4yK910cU 9*+;3GYHHNH4j=2Am-{wkSOxL9z59mUpS6s-FDx^XW@h^Ad{IhZ zz|h{8^K;){=-*?}H<$uFEc6z_d^g{8MdpmAF3c@(DScBM2xMwW#l`w?v$`F#e_1X7 zTxk7m^^ >ug7^jN1NL(R4FXHSl7K>#Z_AJcy{?E^%1q6<$;Y=g6H!e z-C~@$TDQJdM4{FERS>5|x2ye6k3lBsfdmtx3a-CU{D btufl zoZZJOq_}!^CAXS2IDzdQ6U6Wqeivvvn 2?z6r#VIF{vI`3M2!9@XTou0cy_eD zh%Wo#w+q^?6v|gK{96>u8t-RsD(Or^TLhFlj6N7<7t=H-g%A8;V>3@Hh_6IMUcjOa zIN8B?9Ne3KNVNp&;08dSC_p{~tU~Dgzyk2Q;PXKNk?dY*rFqEA*~~5PH)Oxh&iQ2J zj><3 Kn+@mQQ!5gz2fdsQ hk+#ZA-I*N4ewbrOa@tzGpSCbbRw-xrf@9UL5# z`ohpkp|*bN_wA@ct*F!zns~@dKmQPosTRTA5A-6wJR^-!W4WB|_5NU4JKzb>T458; zFhBUwpcdff;WEHb2@l{FWCz0yF;JO2?gSvuw?n0@5(cHq?_b2M-5Pn)0J;vaZ-r3> z-Oa}t%R)C-OUDO)LjkHo&0!K3kBrug=}SvW5n;#l{`U EXxYk=bfCMy)6DVU} s zXS$kMRDRULB1?JY-`uPZc)_=Vt5 (>zYYxzg~>O-HgMb(0_Tp8 zZwF#_!AQiY)&B*%8MQLbH~#MH<#hVje-xU2t#Slj)xnO1x)w26w*2tlxE2 g-qRLu(mIfCyLHeV0^IT^BPEB&_{(0#I z^EKm;95w*UFuW+3aIi<*0DdU|szB}qx7wE(YC%k){kJyPsI#v=ZgGZ)bExk>{M(8T zo{}MMa0{agaJkZmKIdwi(?Iq~#2gT7YoM)unBl8T_8E?%os^@3YKifrjOt$=`IOJ*za}nju6}wdt&ZWP?I-}hh2l1gk%OIBghp3dk~e(QtVU8@ zzf2h$yqkST9=4u;C39GnscfxPoBG@UTmhSh4>1lD)81v)eE$a5q9kiyE5zDMB1@=A zFCu3gi@rZ3RnW$ zL2&u0qvn+P^X8NATbLSIkqeL@s?-&oU)QI6D&wQ^WpCXN zNhUNmGi!ol1U3yItdh_f{uFuX?tEJBzSi$sFA`7rJe>&QB(SkClFHADE9~Q{54Gym zQ)rLRw1K-*R&H05R2L^+^-){ sn@y=f0;6bw405 zMlz5UV^%_Sukb?TC}F#!@W{~6q2L={?Y!S=W6gdC@s=@J-=DkZP@ht!QQUk*W~<3x zSC9Mb0}F65 ^`|+dHqrZTkpWJOGpM5ih$ Ay$*Ctn}_LM`fR89eh}_RW}Se-})qq(jC` z5)P((>Grwb**adgl3#skW8x2i(|yv74^OQwf6#Xp&tLh#`Iq jMlX*`sHRH^Op1=eImq&-HffqsRY~1Vx_qUV;zQI7Qj4lcbWn#I iqX8D(S5;$p}R@vS^BEtj{6!i0#?n Jy>yAtqxf+oO)`7-)3la@+-Bu4ok3&w(b+IH)rOxz_`2j= z^1r?c^uHByps?n`B9yoL9~XdgEz7-6Y#CSP@Dq$q(eo~+37d&FA LblTbdA#u-7jQF(a=fA#k+F9%$+6K`*ARk2Ol2w|0 zil}0H$)rP}q?FV~B7&QcyK6N_$hl8dN^J6~SOIQBy@}O(7@PMbc1XdsiFytsDi?@w zhvziyGf!YKJri7O?xbaYG?d4q(Xfz`@>`X+fbjYJj!5#U- Krb=J|v$P)dl8Q%q8|M7S( z%@sPHXYY-AH%yRfRJLfk3lu@=% 6_r152$YIljAYGU`jF`C-$UlNc3p#>v44Y?sT>T5Z_gN_OP1=)z;E}Vf znwoaf4By6)b^oP?hlGyeag)jp-!6*~Ojo0>Ghf5}(aEupqdD=YT>C2wctJn1> p`)Nh?2z&LJ7kAkH2$pSv!7_@LG4?qQOY5TC^Kjew)gl!ul=jaru?FT7j{lxDxj zl$@FGt5N+&pvU@(0PiM|vSS-fhuPA7lu8q=#Bq7JQcJ#@?k9#2GL7%?8N()5Wvevs z`L65^Kfq(dF);|f?Kz~Qa?5jQt-N)5V1VCovm)BXX|lpbVRvfjU2ki{Poo*rT`A9s zhST(oSpSXhHfI$iI+~|_#g-@2l;>63Jam|>+CcS7ijLp$wC@>LU8|^f$c(xvvI#`Y zv+uF~9? u~ca5 zjMBy^J_J$hQ#8X+_E7d$JF^`-&pOcZ;n9=LP{wZc%xSUo?B=N@p191oh`YL|y9+Uq zUET4o$dCJl&2**Kk1=Ad$Xcbh!RtqDUG3>ghfIzCK=;h!>G6}a9)I_#bBhBQaxs&y zhf`)8zEZL*z8NpD=ZkqEY#Q*%63Em?E?%fx?W$*a`(KDbz)qy)q{pBJwea0&dlz5p zo`Mk(^FtX*JLl8x!EiY=A&tet}Dox6HwiG|$`S)_~=GMs8MtBQ6(>sXWOnh3C?U$D s^5 zzkmOvpbP}g;v4)1Pm~#mqxfbVVL||=KKlX5z-P0Be0SeQBn~$J$=!YBIR;@)Il_gs zpS}6gjjY4se^Og5_P#ZR5jtunwYKbx-i+cu`>|swA>GLc!OM`mjM*DSMXHYbhEiuH z6%Rh~fISqzj60l`N9vh3AEo}7o}T_O?bXYJq8|EHI%plp%_E!nDAfy)CGuxv_4KkL z<4w~?7qdP5=GAF37B!t#iFpQyi1Y4I(_CZ *Ucj>5UQ(6D*vI$zVE zP*zx^QG7RCjYy&E_?|LVrRw@1)dgaF8g;9CC07+(>Z(f+%LD1@6B6}*DZMXPhv=jg zh`-p`3L9z;r4{k`ajSY)go7J#v5=INTG)Sd!JW1Ixs}r{xekd|!(ko`0V!rd-B_3f z?J`teeA6w^;bC5wlv=PN8sjvPY+H|Vpt_u|Kk^4yYtu0Nd-&G1!#2hI2VlkrPd92t zFhk%qR3nCvh?hO$?9*#aTf-KM`u$8-9=X;~b!`?OD_eFW$j8;QxSlk(`#xh2MRl*) z-_h~2x;3TF{g}7cS;%QVvGshGKJ(7A>vyTvLrF6mpoOElbJ{RB7Z%6AwUs#_uG>2y z8q6Xd3W-g?5C#S--{F{JkM5k$7^xOhcaiLGJU{!3v5*5wBx49hZ3MG3%hOe(kT`8N zn~B=*32Jwl)&y)#0E352T1hrzI<+`e$2>(RRL}96Z6F?kf!PP7kzjGw#3WI}n v;5Bfd0Q $n;BQFwP+_qQI)o)_~#ENP_?6 3t$HcW&m1OpEH7EJ!XGH>J{Ek^ zACO9T^$n#%9K|j>?03(Wbl 6gljl3TjJQOV&y|N_ z#nxWuA;}eIk?buC;+VIff0+&usq8lXeolq6=A+*FA@8o&NKquFKJ!Cm$8X z=;>N_qFsQvZ+}Cpd0s=$2Vo&fv!qtvRH`0Wz1?&0T4Z6AUfO#$=#yY?=E(vphWP|4 z5i+F}Zyu~|wYm7;L^Y?O^AXdmKLj;G;)Kl-g-i@>GivD`yx_SK{YIp~_#!8F6^8^L zYao*OvYam`55Zf_$%l&1CqY?r_Pfm>z=Ao z)KWBW@VP6__FGiha3X9?l5NL4r {rMjv79}jmH>bXDRe--=Lb>Hj?Fz z+cgy(E1m1`;EE{V?nwkW(=r4f8 vHYF^6e1e<gu``8! DUv4msgZt1H0qMvPr?DI>71n9jL`!722@X@jcKwc zz~<=7mwPKlMP`StXi1&wBkqQ^oCeIqY(#IE)Ue8oU~WdN&$x>?Bzhf^}a~*H@h_ zmKU?N!CFurd2V9O-)}PVCp5IFz8uRSs=$6@V`I#7EL_!DvXxVs`e&pZ9pV`g7fIxR zQRe;?My`GPsPQCmI7=Fm?kDLe-|5D4*BHsA dym6_fGo(&CRecNjXgV%Xtj3h-h5a5}dAk0!GPCJ# zm+LYO>r2ve(@b&CRUms^yoT9?Sn9WlD)UuyPOtqb(nu6YkSC#wAr4d|zAr4tq@=gb z-Pr#EBA(tgH&5|i8}W3SSUU2N{6-wxNp0PLB9*^4=s^?aBFo;qkZ>15i&GjME_A0U zJ`hNIVrE5~?7=h;zGu>967z&OZTK-Ik8bqy8 to-p%6n8}f|sq$ zmdAE=ON1g?`I1~waWOH@i}SwbV|{}~ne+X+)|$Gy*bIrMzZSBMJ48d2Owd<5=%Z}8 zLKSsL7Av?^P0Gz<(uKVKN=(E`EQ|UpFoZA=TQ1rBzsIe+rWDD5&`TRz2=S5Zt6uWS zPH~!unct>!_bN^+87f4YgRv}(C@)?ECWtK^;sui#shy`5#fV_zuYBD6E8eVq93;=W zm{W>MIMhgt(wgqna`hzJN^O6 C>_CK?2*JZzxg=hnc29=3C-gnRR zPJ#L@RsMuG+(U2lOS%a7-*T4H={8{9_4XE#SN$k&qZ(2;t5(7kkyF-nfg-OWgq({b zhb%$SB#9v*@FnV&Ik*ELKOZ{};Onzu4}?eF3@3=wT<3E+fA%;1!~6|y#Ft_7SYOE( z$yAC?`my!DspPoi$rT8%R8;Z$9d5(GqxN8}(s=y^F0CwHedvS&diQe+)~mXsCy5q+ z3Ju&*Z-R+PaO5IXQJZ#WbC8|@r^#jb-Vz-D=#=$Q`&pa~z!>TGz+GQ4|NrjU9QJ6v zo2Of^xfQ<_hE{R(KlecOD{MUTo{3?W$XeryQ^(58(?z0n1@P;u4mO%g11iPaFKbk% zu6Fz&@UT&04&%g!8v5?+^i0Rg%Gh1C4dnPS a!N?{E8x*%v!@2}CbW_8%(c-^3Jg&n zt>2;DzIOKlg^dOU&I=bh6&oFj#L90UFV0tYOq&E@msMQQ2d$r0>kEF?O}gvE!9HKz z2~vnVM7V!MlhIYF+=?K&`cfYJa)FB1^hkgtoGoG(@MP2EMRd cHjqtU_nM5K?v?vw_6;UN~ca~i6`1p9L%%jb{DY(g(4A8Xx-LqjD z5>dnjii5(QY*!`w>klTAB1g;0DiWT4FsAq>YcYGYk+H0ltE2O~(YZ~?YNFH0#s6Gm ziT|;VI$KSVij<0XT#8p`S<*eiD|857aRsoK?)TrXrgeE|R__L;f#eTJUro@sXbf`o zte(>2#&sV>qB&CMUWX6kqEO~_qT!OTJ}hl4*s^TU1oyU{{oyf5ZlA5->Y1Db>Xcn) z%&mTzb3bW{-Dlcl3dR1j?t>mHXttZ2T+-N!1}&137n0Z^M9K#+AD>7+Bkd9*x2WBSI67D& zN<{|+sjbgacn7lW@0*&Mx-53}>oN#cQdzIE$d`BV)V UmuI*z|*pK81*?6@6(8KYqu zz?0;URD0a)lF6m^_XjG4q3P`4sHZv$JoGy%Nbz %nY~YfElEK8weB}Hj zjn!Z`m*AGTU|2BD)oWW}V(VzD+!j%FLt7mZ-@h8w!)CrC>OEB_Ve?FC;xI+tm7F$9 zAgheoJS3~^3R0V>Rmj#}HSHSTHM?H@?TK$VQAFqbMYyILaB*YMON>8mNl@vnks4ja zxME{v%|YvE#}py+_wjvWg1pjjB|N3v?=dli=M08%I9%4Ny1Z=M-XD08Ln_K&sp5~t z39UlnmVH6KVEu<&c|c;Mm3xkXf}Sk4^BHpVgt?IdO2Xc*!SqApr_bvS9V-*>xgJQC zmzLr$E|Z>lY!rsw_Vz(MD2bvY0gq-ZeL;BMQCKfh)EV5xELBugY6(T&CkDy6)+cIO z=h;OWl_1HL_(;O3LTAtWw8(v+XDfCwxTjG@cg6VAP**PrdF&!wspkueT1BUCjG7eQ z3FFf*h!WB(CJ-KFu5d!|7(_WWG&V}i?)bBbX|ev8@L*?piOW0??ux_sUxlIsC&pK# zB13q=%SFpNiok0Hx!B@<>LnrK**%(LiQN8dN=#=JO}pKk@Y5x?eE@0;X>Tbh=((gZ zc&&XqVA=XoWWpD`wNskKeu=tmRbqA{hU9>{_x?lU$2tyM-k0Ql-9cccxWTAqVq4eI z@b=5nCHniQ841L|vOS*P(PhQ|-;VfnPm;Dg@R6E$f`+TqYJEcw72{>A5aLMm0h(C8 z0fmXiX+Q~d%