From 9a10fa2ddceb528dc79502bc9f3e72be3d74ae47 Mon Sep 17 00:00:00 2001 From: Vishal Nehra Date: Mon, 6 Jul 2026 05:40:34 +0530 Subject: [PATCH] App redesign --- .../filemanager/adapters/RecyclerAdapter.java | 317 +- .../adapters/holders/SpecialViewHolder.kt | 4 +- .../ui/activities/MainActivity.java | 75 + .../ui/fragments/MainFragment.java | 84 +- .../filemanager/ui/fragments/TabFragment.java | 5 +- .../fragments/data/MainFragmentViewModel.kt | 18 +- .../AppearancePrefsFragment.kt | 66 +- .../ui/views/DividerItemDecoration.java | 9 + .../ui/views/appbar/BottomBar.java | 27 +- .../filemanager/ui/views/drawer/Drawer.java | 13 +- .../utils/MainActivityActionMode.kt | 3 + .../drawable-xhdpi/bg_file_pattern_dark.png | Bin 0 -> 57407 bytes .../drawable-xhdpi/bg_file_pattern_light.png | Bin 0 -> 41669 bytes .../res/drawable/popup_menu_background.xml | 11 + app/src/main/res/layout/grid_header.xml | 8 +- app/src/main/res/layout/griditem.xml | 9 +- app/src/main/res/layout/griditem_folder.xml | 114 + app/src/main/res/layout/list_header.xml | 8 +- app/src/main/res/layout/main_frag.xml | 18 + app/src/main/res/layout/rowlayout.xml | 8 +- app/src/main/res/values/attrs.xml | 2 + app/src/main/res/values/colors.xml | 34 + app/src/main/res/values/dimens.xml | 17 +- app/src/main/res/values/styles.xml | 60 +- design/list_background/Dark - Blue.svg | 2316 +++++++++++ design/list_background/Dark - Green.svg | 2317 +++++++++++ design/list_background/Dark - Red.svg | 2317 +++++++++++ design/list_background/Light - Blue.svg | 2415 ++++++++++++ design/list_background/Light - Green.svg | 2415 ++++++++++++ design/list_background/Light - Red.svg | 2415 ++++++++++++ design/list_background/Pattern - Dark.svg | 3458 +++++++++++++++++ design/list_background/Pattern - Light.svg | 3458 +++++++++++++++++ file_operations/build.gradle | 10 +- 33 files changed, 21919 insertions(+), 112 deletions(-) create mode 100644 app/src/main/res/drawable-xhdpi/bg_file_pattern_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/bg_file_pattern_light.png create mode 100644 app/src/main/res/drawable/popup_menu_background.xml create mode 100644 app/src/main/res/layout/griditem_folder.xml create mode 100644 design/list_background/Dark - Blue.svg create mode 100644 design/list_background/Dark - Green.svg create mode 100644 design/list_background/Dark - Red.svg create mode 100644 design/list_background/Light - Blue.svg create mode 100644 design/list_background/Light - Green.svg create mode 100644 design/list_background/Light - Red.svg create mode 100644 design/list_background/Pattern - Dark.svg create mode 100644 design/list_background/Pattern - Light.svg diff --git a/app/src/main/java/com/amaze/filemanager/adapters/RecyclerAdapter.java b/app/src/main/java/com/amaze/filemanager/adapters/RecyclerAdapter.java index 46d246244e..ecfab8d4e5 100644 --- a/app/src/main/java/com/amaze/filemanager/adapters/RecyclerAdapter.java +++ b/app/src/main/java/com/amaze/filemanager/adapters/RecyclerAdapter.java @@ -95,14 +95,18 @@ import android.content.Context; import android.content.SharedPreferences; import android.graphics.Color; +import android.graphics.Outline; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; +import android.graphics.drawable.LayerDrawable; +import android.graphics.drawable.StateListDrawable; import android.os.Build; import android.os.Handler; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.ViewOutlineProvider; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.PopupMenu; @@ -134,7 +138,10 @@ public class RecyclerAdapter extends RecyclerView.Adapter= getItemCount()) { + return false; + } + final int type = getItemViewType(position); + return type == TYPE_ITEM || type == TYPE_BACK; + } + + /** + * Builds the rounded "section card" background for a list row. Consecutive rows between two + * headers share one continuous surface; only the first row rounds its top corners and only the + * last row rounds its bottom corners, so the run reads as a single card. The selected/pressed + * state keeps the row's rounded shape while tinting the surface. + */ + private Drawable createListCardBackground(int position) { + final float radius = context.getResources().getDimension(R.dimen.list_card_corner_radius); + final boolean roundTop = !isCardGroupMember(position - 1); + final boolean roundBottom = !isCardGroupMember(position + 1); + + final float[] radii = new float[8]; + if (roundTop) { + radii[0] = radii[1] = radii[2] = radii[3] = radius; + } + if (roundBottom) { + radii[4] = radii[5] = radii[6] = radii[7] = radius; + } + + final int surfaceColor; + final int selectedColor; + final AppTheme theme = utilsProvider.getAppTheme(); + if (theme.equals(AppTheme.LIGHT)) { + surfaceColor = Utils.getColor(context, R.color.card_surface_light); + selectedColor = Utils.getColor(context, R.color.card_selected_light); + } else if (theme.equals(AppTheme.BLACK)) { + surfaceColor = Utils.getColor(context, R.color.card_surface_black); + selectedColor = Utils.getColor(context, R.color.card_selected_black); + } else { + surfaceColor = Utils.getColor(context, R.color.card_surface_dark); + selectedColor = Utils.getColor(context, R.color.card_selected_dark); + } + + final GradientDrawable normal = new GradientDrawable(); + normal.setColor(surfaceColor); + normal.setCornerRadii(radii); + + final GradientDrawable selected = new GradientDrawable(); + selected.setColor(selectedColor); + selected.setCornerRadii(radii.clone()); + + final StateListDrawable background = new StateListDrawable(); + background.addState(new int[] {android.R.attr.state_selected}, selected); + background.addState(new int[] {android.R.attr.state_pressed}, selected); + background.addState(new int[] {android.R.attr.state_activated}, selected); + background.addState(new int[] {android.R.attr.state_focused}, selected); + background.addState(new int[] {}, normal); + return background; + } + + /** + * Binds a folder shown in grid view. Folders render as a compact icon + name + date cell (like a + * list row) that sits flush inside the rounded section container built by {@link + * #createGridFolderBackground}. + */ + private void bindViewHolderGridFolder(@NonNull final ItemViewHolder holder, int position) { + final LayoutElementParcelable rowItem = + getItemsDigested().get(position).layoutElementParcelable; + + holder.baseItemView.setOnLongClickListener( + p1 -> { + if (hasPendingPasteOperation()) return false; + if (dragAndDropPreference == PreferencesConstants.PREFERENCE_DRAG_DEFAULT + || (dragAndDropPreference == PreferencesConstants.PREFERENCE_DRAG_TO_MOVE_COPY + && getItemsDigested().get(holder.getAdapterPosition()).getChecked() + != ListItem.CHECKED)) { + mainFragment.registerListItemChecked( + holder.getAdapterPosition(), holder.checkImageViewGrid); + } + initDragListener(position, p1, holder); + return true; + }); + holder.baseItemView.setOnClickListener( + v -> + mainFragment.onListItemClicked( + false, holder.getAdapterPosition(), rowItem, holder.checkImageViewGrid)); + + Glide.with(mainFragment).clear(holder.genericIcon); + holder.genericIcon.setVisibility(View.VISIBLE); + modelProvider.getPreloadRequestBuilder(rowItem.iconData).into(holder.genericIcon); + // Folders use a plain grey glyph with no coloured circle (matches the redesign). + final GradientDrawable iconBackground = (GradientDrawable) holder.genericIcon.getBackground(); + if (iconBackground != null) { + iconBackground.setColor(Color.TRANSPARENT); + } + holder.genericIcon.setColorFilter(getFolderIconColor()); + + holder.txtTitle.setText(rowItem.title); + holder.txtDesc.setText(""); + if (getBoolean(PREFERENCE_SHOW_LAST_MODIFIED)) { + holder.date.setText(rowItem.dateModification); + } else { + holder.date.setText(""); + } + + holder.about.setVisibility(View.VISIBLE); + if (utilsProvider.getAppTheme().equals(AppTheme.LIGHT)) { + holder.about.setColorFilter(grey_color); + } + holder.about.setOnClickListener(v -> showPopup(v, rowItem)); + + final boolean checked = getItemsDigested().get(position).getChecked() == ListItem.CHECKED; + holder.checkImageViewGrid.setColorFilter(accentColor); + holder.checkImageViewGrid.setVisibility(checked ? View.VISIBLE : View.INVISIBLE); + + holder.baseItemView.setBackground( + createGridSectionBackground(position, checked, TYPE_ITEM_GRID_FOLDER)); + } + + /** Plain grey tint used for folder icons (no coloured circle), keyed to the theme. */ + private int getFolderIconColor() { + if (utilsProvider.getAppTheme().equals(AppTheme.LIGHT)) { + return Utils.getColor(context, R.color.folder_icon_light); + } + return Utils.getColor(context, R.color.folder_icon_dark); + } + + /** Clips a grid tile's thumbnail/icon frame to rounded corners. */ + private void roundThumbnailCorners(final View iconFrame) { + if (iconFrame == null) { + return; + } + final float radius = context.getResources().getDimension(R.dimen.grid_thumb_corner_radius); + iconFrame.setClipToOutline(true); + iconFrame.setOutlineProvider( + new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), radius); + } + }); + } + + /** + * Builds the unified "section container" background for a grid cell. Consecutive cells of the + * same {@code sectionType} (folders or files) between two headers share one rounded panel: only + * the four outer corners of the block are rounded, and hairline dividers separate adjacent cells. + */ + private Drawable createGridSectionBackground(int position, boolean selected, int sectionType) { + final Integer columnsPref = mainFragment.getMainFragmentViewModel().getColumns(); + final int columnCount = (columnsPref == null || columnsPref <= 0) ? 3 : columnsPref; + + int start = position; + while (start - 1 >= 0 && getItemViewType(start - 1) == sectionType) { + start--; + } + int end = position; + while (end + 1 < getItemCount() && getItemViewType(end + 1) == sectionType) { + end++; + } + final int index = position - start; + final int count = end - start + 1; + final int col = index % columnCount; + final int row = index / columnCount; + final int lastRow = (count - 1) / columnCount; + + final float radius = context.getResources().getDimension(R.dimen.list_card_corner_radius); + final float[] radii = new float[8]; + if (index == 0) { + radii[0] = radii[1] = radius; // top-left + } + if (index == Math.min(columnCount - 1, count - 1)) { + radii[2] = radii[3] = radius; // top-right + } + if (index == count - 1) { + radii[4] = radii[5] = radius; // bottom-right + } + if (index == lastRow * columnCount) { + radii[6] = radii[7] = radius; // bottom-left + } + + final int surfaceColor; + final int selectedColor; + final int dividerColor; + final AppTheme theme = utilsProvider.getAppTheme(); + if (theme.equals(AppTheme.LIGHT)) { + surfaceColor = Utils.getColor(context, R.color.card_surface_light); + selectedColor = Utils.getColor(context, R.color.card_selected_light); + dividerColor = Utils.getColor(context, R.color.grid_divider_light); + } else if (theme.equals(AppTheme.BLACK)) { + surfaceColor = Utils.getColor(context, R.color.card_surface_black); + selectedColor = Utils.getColor(context, R.color.card_selected_black); + dividerColor = Utils.getColor(context, R.color.grid_divider_black); + } else { + surfaceColor = Utils.getColor(context, R.color.card_surface_dark); + selectedColor = Utils.getColor(context, R.color.card_selected_dark); + dividerColor = Utils.getColor(context, R.color.grid_divider_dark); + } + + final GradientDrawable surface = new GradientDrawable(); + surface.setColor(selected ? selectedColor : surfaceColor); + surface.setCornerRadii(radii); + + final boolean dividerRight = + col < columnCount - 1 && index < count - 1 && ((index + 1) / columnCount == row); + final boolean dividerBottom = row < lastRow; + if (!dividerRight && !dividerBottom) { + return surface; + } + + // A single physical pixel: a hairline that blends with the surface rather than standing out. + final int thickness = 1; + final GradientDrawable dividerLayer = new GradientDrawable(); + dividerLayer.setColor(dividerColor); + dividerLayer.setCornerRadii(radii.clone()); + final LayerDrawable background = new LayerDrawable(new Drawable[] {dividerLayer, surface}); + background.setLayerInset(1, 0, 0, dividerRight ? thickness : 0, dividerBottom ? thickness : 0); + return background; + } + private void bindViewHolderList(@NonNull final ItemViewHolder holder, int position) { final boolean isBackButton = getItemsDigested().get(position).specialType == TYPE_BACK; @Nullable @@ -948,11 +1207,7 @@ && getItemsDigested().get(holder.getAdapterPosition()).getChecked() break; } - if (utilsProvider.getAppTheme().equals(AppTheme.LIGHT)) { - holder.baseItemView.setBackgroundResource(R.drawable.safr_ripple_white); - } else { - holder.baseItemView.setBackgroundResource(R.drawable.safr_ripple_black); - } + holder.baseItemView.setBackground(createListCardBackground(position)); holder.baseItemView.setSelected(false); if (getItemsDigested().get(position).getChecked() == ListItem.CHECKED) { @@ -968,6 +1223,8 @@ && getItemsDigested().get(holder.getAdapterPosition()).getChecked() holder.apkIcon.setVisibility(View.GONE); holder.pictureIcon.setVisibility(View.GONE); holder.genericIcon.setVisibility(View.VISIBLE); + // Reset any folder grey tint so the selected item shows the standard grey-circle highlight. + holder.genericIcon.clearColorFilter(); GradientDrawable gradientDrawable = (GradientDrawable) holder.genericIcon.getBackground(); gradientDrawable.setColor(goBackColor); } @@ -982,18 +1239,20 @@ && getBoolean(PREFERENCE_SHOW_THUMB))) { holder.genericIcon.setVisibility(View.VISIBLE); GradientDrawable gradientDrawable = (GradientDrawable) holder.genericIcon.getBackground(); - if (getBoolean(PREFERENCE_COLORIZE_ICONS)) { - if (rowItem.isDirectory) { - gradientDrawable.setColor(iconSkinColor); - } else { + if (rowItem.isDirectory && !isBackButton) { + // Folders use a plain grey glyph with no coloured circle (matches the redesign). + gradientDrawable.setColor(Color.TRANSPARENT); + holder.genericIcon.setColorFilter(getFolderIconColor()); + } else { + holder.genericIcon.clearColorFilter(); + if (getBoolean(PREFERENCE_COLORIZE_ICONS) && !rowItem.isDirectory) { ColorUtils.colorizeIcons(context, rowItem.filetype, gradientDrawable, iconSkinColor); + } else { + gradientDrawable.setColor(iconSkinColor); + } + if (isBackButton) { + gradientDrawable.setColor(goBackColor); } - } else { - gradientDrawable.setColor(iconSkinColor); - } - - if (isBackButton) { - gradientDrawable.setColor(goBackColor); } } } @@ -1414,10 +1673,18 @@ public boolean onResourceReady( private void showPopup(@NonNull View view, @NonNull final LayoutElementParcelable rowItem) { if (hasPendingPasteOperation()) return; - Context currentContext = this.context; - if (mainFragment.getMainActivity().getAppTheme() == AppTheme.BLACK) { - currentContext = new ContextThemeWrapper(context, R.style.overflow_black); + // Wrap the context with the rounded popup theme overlay so the per-item menu gets the same + // rounded surface as the toolbar overflow, in every theme. + final AppTheme appTheme = mainFragment.getMainActivity().getAppTheme(); + final int popupThemeOverlay; + if (appTheme == AppTheme.LIGHT) { + popupThemeOverlay = R.style.PopupThemeOverlayLight; + } else if (appTheme == AppTheme.BLACK) { + popupThemeOverlay = R.style.PopupThemeOverlayBlack; + } else { + popupThemeOverlay = R.style.PopupThemeOverlayDark; } + Context currentContext = new ContextThemeWrapper(context, popupThemeOverlay); PopupMenu popupMenu = new ItemPopupMenu( currentContext, diff --git a/app/src/main/java/com/amaze/filemanager/adapters/holders/SpecialViewHolder.kt b/app/src/main/java/com/amaze/filemanager/adapters/holders/SpecialViewHolder.kt index f329e9685a..ff0436c163 100644 --- a/app/src/main/java/com/amaze/filemanager/adapters/holders/SpecialViewHolder.kt +++ b/app/src/main/java/com/amaze/filemanager/adapters/holders/SpecialViewHolder.kt @@ -60,9 +60,9 @@ class SpecialViewHolder( // if(utilsProvider.getAppTheme().equals(AppTheme.DARK)) // view.setBackgroundResource(R.color.holo_dark_background); if (utilsProvider.appTheme == AppTheme.LIGHT) { - txtTitle.setTextColor(Utils.getColor(c, R.color.text_light)) + txtTitle.setTextColor(Utils.getColor(c, R.color.section_header_light)) } else { - txtTitle.setTextColor(Utils.getColor(c, R.color.text_dark)) + txtTitle.setTextColor(Utils.getColor(c, R.color.section_header_dark)) } } } diff --git a/app/src/main/java/com/amaze/filemanager/ui/activities/MainActivity.java b/app/src/main/java/com/amaze/filemanager/ui/activities/MainActivity.java index 2154ee2d43..2594eadf2c 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/activities/MainActivity.java +++ b/app/src/main/java/com/amaze/filemanager/ui/activities/MainActivity.java @@ -170,7 +170,9 @@ import android.content.res.Configuration; import android.database.Cursor; import android.graphics.Color; +import android.graphics.PorterDuff; import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; import android.hardware.usb.UsbManager; import android.media.RingtoneManager; import android.net.Uri; @@ -197,6 +199,7 @@ import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.annotation.StringRes; +import androidx.appcompat.widget.Toolbar; import androidx.arch.core.util.Function; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.content.ContextCompat; @@ -1077,6 +1080,8 @@ public void goToMain(String path, boolean hideFab) { public boolean onCreateOptionsMenu(Menu menu) { MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.activity_extra, menu); + // Tint the search / view / overflow icons to sit on the app bar surface. + tintMenuIcons(menu, getOnAppBarColor()); /* SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); @@ -1832,6 +1837,76 @@ public void updateViews(ColorDrawable colorDrawable) { } } + /** + * Recolours the top app bar chrome (toolbar, status bar, path breadcrumb) to a surface colour — + * white in light mode, an elevated grey in dark/black — instead of the primary colour, and lifts + * it with a small elevation so it reads as sitting above the file listing. The drawer header + * keeps the primary colour. Re-applied after action mode exits so selection mode can still + * recolour the bar. Scoped to this activity's shared toolbar; other activities are unaffected. + */ + public void applyAppBarSurface() { + if (appbar == null) { + return; + } + final int surface = getAppBarSurfaceColor(); + final int onSurface = getOnAppBarColor(); + final Toolbar toolbar = getAppbar().getToolbar(); + final AppBarLayout appBarLayout = getAppbar().getAppbarLayout(); + + appBarLayout.setBackgroundColor(surface); + toolbar.setBackgroundColor(surface); + if (SDK_INT >= LOLLIPOP) { + // Constant elevation (drop the scroll-driven lift) so the bar always casts a shadow. + appBarLayout.setStateListAnimator(null); + appBarLayout.setElevation(getResources().getDimension(R.dimen.app_bar_elevation)); + } + + toolbar.setTitleTextColor(onSurface); + toolbar.setSubtitleTextColor(onSurface); + tintDrawable(toolbar.getNavigationIcon(), onSurface); + tintDrawable(toolbar.getOverflowIcon(), onSurface); + tintMenuIcons(toolbar.getMenu(), onSurface); + + getAppbar().getBottomBar().setBackgroundColor(surface); + getAppbar().getBottomBar().setPathTextColor(onSurface); + + if (SDK_INT >= LOLLIPOP) { + getWindow().setStatusBarColor(surface); + } + } + + /** App bar surface colour for the current theme (white / elevated grey / near-black). */ + public int getAppBarSurfaceColor() { + if (getAppTheme().equals(AppTheme.LIGHT)) { + return Utils.getColor(this, R.color.app_bar_light); + } else if (getAppTheme().equals(AppTheme.BLACK)) { + return Utils.getColor(this, R.color.app_bar_black); + } + return Utils.getColor(this, R.color.app_bar_dark); + } + + /** Title / icon / path colour that reads on {@link #getAppBarSurfaceColor()}. */ + public int getOnAppBarColor() { + return getAppTheme().equals(AppTheme.LIGHT) + ? Utils.getColor(this, R.color.on_app_bar_light) + : Utils.getColor(this, R.color.on_app_bar_dark); + } + + private void tintDrawable(@Nullable Drawable drawable, int color) { + if (drawable != null) { + drawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_ATOP); + } + } + + void tintMenuIcons(@Nullable Menu menu, int color) { + if (menu == null) { + return; + } + for (int i = 0; i < menu.size(); i++) { + tintDrawable(menu.getItem(i).getIcon(), color); + } + } + void initialiseFab() { int colorAccent = getAccent(); diff --git a/app/src/main/java/com/amaze/filemanager/ui/fragments/MainFragment.java b/app/src/main/java/com/amaze/filemanager/ui/fragments/MainFragment.java index 97d68b8c1e..8cd57f85b1 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/fragments/MainFragment.java +++ b/app/src/main/java/com/amaze/filemanager/ui/fragments/MainFragment.java @@ -108,6 +108,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; +import android.widget.ImageView; import android.widget.Toast; import androidx.activity.result.ActivityResultLauncher; @@ -121,6 +122,7 @@ import androidx.core.content.ContextCompat; import androidx.core.content.pm.ShortcutInfoCompat; import androidx.core.content.pm.ShortcutManagerCompat; +import androidx.core.graphics.ColorUtils; import androidx.core.graphics.drawable.IconCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; @@ -253,11 +255,9 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat mSwipeRefreshLayout.setOnRefreshListener(() -> updateList(true)); - // String itemsstring = res.getString(R.string.items);// TODO: 23/5/2017 use or delete - mToolbarContainer.setBackgroundColor( - MainActivity.currentTab == 1 - ? mainFragmentViewModel.getPrimaryTwoColor() - : mainFragmentViewModel.getPrimaryColor()); + // The app bar is a white/grey surface that sits above the listing rather than the primary + // colour; MainActivity owns the recolour so the shared toolbar stays consistent. + requireMainActivity().applyAppBarSurface(); // listView.setPadding(listView.getPaddingLeft(), paddingTop, listView.getPaddingRight(), // listView.getPaddingBottom()); @@ -268,11 +268,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat f.generateMode(getActivity()); getMainActivity().getAppbar().getBottomBar().setClickListener(); - if (utilsProvider.getAppTheme().equals(AppTheme.LIGHT) && !mainFragmentViewModel.isList()) { - listView.setBackgroundColor(Utils.getColor(getContext(), R.color.grid_background_light)); - } else { - listView.setBackgroundDrawable(null); - } + applyListViewBackground(); listView.setHasFixedSize(true); if (mainFragmentViewModel.isList()) { mLayoutManager = new CustomScrollLinearLayoutManager(getContext()); @@ -291,7 +287,11 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat // 23/5/2017 use or delete dividerItemDecoration = new DividerItemDecoration(requireActivity(), false, getBoolean(PREFERENCE_SHOW_DIVIDERS)); - listView.addItemDecoration(dividerItemDecoration); + // Only list view uses row dividers; grid folders carry their own dividers inside the unified + // section container, so keep the decoration off the grid. + if (mainFragmentViewModel.isList()) { + listView.addItemDecoration(dividerItemDecoration); + } mSwipeRefreshLayout.setColorSchemeColors(mainFragmentViewModel.getAccentColor()); DefaultItemAnimator animator = new DefaultItemAnimator(); listView.setItemAnimator(animator); @@ -339,14 +339,61 @@ public int getSpanSize(int position) { }); } - void switchToGrid() { - mainFragmentViewModel.setList(false); + /** + * Applies the file-listing page background that sits behind the section cards, honouring the + * current app theme. Centralised so the initial load and list/grid switches stay consistent, and + * so future background work (patterned "graffiti" surface) has a single hook. + */ + private void applyListViewBackground() { + final AppTheme theme = utilsProvider.getAppTheme(); + final int pageColor; + final int patternRes; + // Tint strength: darker themes need a touch more of the colour to read as a tint. + final float tintFraction; + if (theme.equals(AppTheme.LIGHT)) { + pageColor = Utils.getColor(getContext(), R.color.page_background_light); + patternRes = R.drawable.bg_file_pattern_light; + tintFraction = 0.12f; + } else if (theme.equals(AppTheme.BLACK)) { + pageColor = Color.BLACK; + patternRes = R.drawable.bg_file_pattern_dark; + tintFraction = 0.08f; + } else { + pageColor = Utils.getColor(getContext(), R.color.page_background_dark); + patternRes = R.drawable.bg_file_pattern_dark; + tintFraction = 0.08f; + } - if (utilsProvider.getAppTheme().equals(AppTheme.LIGHT)) { + // Mirrors the drawer banner: a wash of the user's primary (app bar) colour over the page + // surface, with the tilted, translucent graffiti pattern on top. The list itself is transparent + // so this shows through the gaps around the section cards. + final int primaryColor = + MainActivity.currentTab == 1 + ? mainFragmentViewModel.getPrimaryTwoColor() + : mainFragmentViewModel.getPrimaryColor(); + final int tintedBase = ColorUtils.blendARGB(pageColor, primaryColor, tintFraction); - // will always be grid, set alternate white background - listView.setBackgroundColor(Utils.getColor(getContext(), R.color.grid_background_light)); + final View listBackground = rootView.findViewById(R.id.list_background); + if (listBackground != null) { + listBackground.setBackgroundColor(tintedBase); + } + final ImageView listBackgroundPattern = rootView.findViewById(R.id.list_background_pattern); + if (listBackgroundPattern != null) { + listBackgroundPattern.setImageResource(patternRes); } + listView.setBackgroundColor(Color.TRANSPARENT); + + // Left/right gutter so the section cards float with breathing room and the patterned surface + // shows through the edges. Applied on the list rather than per-row so folders/files stay flush. + final int gutter = (int) getResources().getDimension(R.dimen.list_card_horizontal_margin); + listView.setPadding(gutter, listView.getPaddingTop(), gutter, listView.getPaddingBottom()); + listView.setClipToPadding(false); + } + + void switchToGrid() { + mainFragmentViewModel.setList(false); + + applyListViewBackground(); if (mLayoutManagerGrid == null) if (mainFragmentViewModel.getColumns() == -1 || mainFragmentViewModel.getColumns() == 0) @@ -365,10 +412,7 @@ void switchToGrid() { void switchToList() { mainFragmentViewModel.setList(true); - if (utilsProvider.getAppTheme().equals(AppTheme.LIGHT)) { - - listView.setBackgroundDrawable(null); - } + applyListViewBackground(); if (mLayoutManager == null) mLayoutManager = new CustomScrollLinearLayoutManager(getActivity()); listView.setLayoutManager(mLayoutManager); diff --git a/app/src/main/java/com/amaze/filemanager/ui/fragments/TabFragment.java b/app/src/main/java/com/amaze/filemanager/ui/fragments/TabFragment.java index d5177276fd..1abcdfbca7 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/fragments/TabFragment.java +++ b/app/src/main/java/com/amaze/filemanager/ui/fragments/TabFragment.java @@ -291,8 +291,9 @@ public void onPageScrolled(int position, float positionOffset, int positionOffse @ColorInt int color = (int) evaluator.evaluate(position + positionOffset, startColor, endColor); - colorDrawable.setColor(color); - requireMainActivity().updateViews(colorDrawable); + // The app bar is a fixed white/grey surface now; only the drawer header follows the per-tab + // colour as panes are swiped, so the toolbar no longer flashes back to the primary colour. + requireMainActivity().getDrawer().setBackgroundColor(color); } @Override diff --git a/app/src/main/java/com/amaze/filemanager/ui/fragments/data/MainFragmentViewModel.kt b/app/src/main/java/com/amaze/filemanager/ui/fragments/data/MainFragmentViewModel.kt index 69b61e42cb..596b1ee8be 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/fragments/data/MainFragmentViewModel.kt +++ b/app/src/main/java/com/amaze/filemanager/ui/fragments/data/MainFragmentViewModel.kt @@ -21,6 +21,7 @@ package com.amaze.filemanager.ui.fragments.data import android.content.SharedPreferences +import android.content.res.Resources import android.os.Bundle import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -155,7 +156,22 @@ class MainFragmentViewModel : ViewModel() { PREFERENCE_GRID_COLUMNS_DEFAULT, ) Objects.requireNonNull(columnPreference) - columns = columnPreference?.toInt() + // Clamp to what the device can practically show, so grid cells never become too narrow to + // read (e.g. the default "3" on a phone, or a "6" saved before the cap existed). + columns = columnPreference?.toInt()?.coerceAtMost(maxGridColumns()) + } + + companion object { + /** + * Maximum number of grid columns that is practical on this device: phones cap at 2, tablets + * scale up to 4 based on the smallest screen width. Used to clamp both the stored preference + * and the options offered in settings. + */ + @JvmStatic + fun maxGridColumns(): Int { + val smallestWidthDp = Resources.getSystem().configuration.smallestScreenWidthDp + return (smallestWidthDp / 200).coerceIn(2, 4) + } } /** diff --git a/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/AppearancePrefsFragment.kt b/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/AppearancePrefsFragment.kt index 6626ef853b..26d603ebfb 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/AppearancePrefsFragment.kt +++ b/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/AppearancePrefsFragment.kt @@ -24,26 +24,14 @@ import android.os.Bundle import androidx.preference.Preference import com.afollestad.materialdialogs.MaterialDialog import com.amaze.filemanager.R +import com.amaze.filemanager.ui.fragments.data.MainFragmentViewModel import com.amaze.filemanager.ui.fragments.preferencefragments.PreferencesConstants.PREFERENCE_GRID_COLUMNS import com.amaze.filemanager.ui.fragments.preferencefragments.PreferencesConstants.PREFERENCE_GRID_COLUMNS_DEFAULT import com.amaze.filemanager.ui.theme.AppThemePreference -import java.util.Objects class AppearancePrefsFragment : BasePrefsFragment() { override val title = R.string.appearance - /** - * The actual value saved for the preference, to see the localized strings see [R.array.columns] - */ - private val savedPreferenceValues = - listOf( - PREFERENCE_GRID_COLUMNS_DEFAULT, - "2", - "3", - "4", - "5", - "6", - ) private var currentTheme = 0 private var gridColumnPref: Preference? = null @@ -73,41 +61,35 @@ class AppearancePrefsFragment : BasePrefsFragment() { private val onClickGridColumn = Preference.OnPreferenceClickListener { - val dialog = - MaterialDialog.Builder(activity).also { builder -> + // Offer only the column counts this device can practically show: "Automatic" plus + // 2..maxGridColumns (2 on phones, up to 4 on tablets). + val maxColumns = MainFragmentViewModel.maxGridColumns() + val savedValues = + listOf(PREFERENCE_GRID_COLUMNS_DEFAULT) + (2..maxColumns).map { it.toString() } + val labels: List = + listOf(getString(R.string.default_string)) + (2..maxColumns).map { it.toString() } + + val saved = + activity.prefs.getString(PREFERENCE_GRID_COLUMNS, PREFERENCE_GRID_COLUMNS_DEFAULT) + val current = savedValues.indexOf(saved).coerceAtLeast(0) + + MaterialDialog.Builder(activity) + .also { builder -> builder.theme(activity.utilsProvider.appTheme.getMaterialDialogTheme()) builder.title(R.string.gridcolumnno) - val columnsPreference = - activity - .prefs - .getString(PREFERENCE_GRID_COLUMNS, PREFERENCE_GRID_COLUMNS_DEFAULT) - - Objects.requireNonNull(columnsPreference) - val current = - when (columnsPreference) { - null -> { - PREFERENCE_GRID_COLUMNS_DEFAULT.toInt() - } - else -> { - columnsPreference.toInt() - 1 - } - } - builder - .items(R.array.columns) + .items(labels) .itemsCallbackSingleChoice(current) { dialog, _, which, _ -> - val editor = activity.prefs.edit() - editor.putString( - PREFERENCE_GRID_COLUMNS, - savedPreferenceValues[which], - ) - editor.apply() + activity.prefs + .edit() + .putString(PREFERENCE_GRID_COLUMNS, savedValues[which]) + .apply() dialog.dismiss() updateGridColumnSummary() true } }.build() - dialog.show() + .show() true } @@ -176,6 +158,10 @@ class AppearancePrefsFragment : BasePrefsFragment() { PREFERENCE_GRID_COLUMNS, PREFERENCE_GRID_COLUMNS_DEFAULT, ) - gridColumnPref?.summary = preferenceColumns + // Show the effective (device-clamped) column count so it matches what the grid renders. + val effective = + (preferenceColumns?.toIntOrNull() ?: PREFERENCE_GRID_COLUMNS_DEFAULT.toInt()) + .coerceAtMost(MainFragmentViewModel.maxGridColumns()) + gridColumnPref?.summary = effective.toString() } } diff --git a/app/src/main/java/com/amaze/filemanager/ui/views/DividerItemDecoration.java b/app/src/main/java/com/amaze/filemanager/ui/views/DividerItemDecoration.java index 6f132e35d6..8ff3d16897 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/views/DividerItemDecoration.java +++ b/app/src/main/java/com/amaze/filemanager/ui/views/DividerItemDecoration.java @@ -80,6 +80,15 @@ private void drawVertical(Canvas c, RecyclerView parent) { continue; } + // Only draw a divider between two consecutive rows of the same section. When the following + // row is a header or the trailing empty spacer, this row is the last of its section, so a + // divider below it would dangle with nothing beneath it. + final View next = parent.getChildAt(i + 1); + final int nextViewType = parent.getChildViewHolder(next).getItemViewType(); + if (nextViewType != RecyclerAdapter.TYPE_ITEM && nextViewType != RecyclerAdapter.TYPE_BACK) { + continue; + } + final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); final int top = child.getBottom() + params.bottomMargin; final int bottom = top + mDivider.getIntrinsicHeight(); diff --git a/app/src/main/java/com/amaze/filemanager/ui/views/appbar/BottomBar.java b/app/src/main/java/com/amaze/filemanager/ui/views/appbar/BottomBar.java index 38ebd25519..60d2b9cad0 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/views/appbar/BottomBar.java +++ b/app/src/main/java/com/amaze/filemanager/ui/views/appbar/BottomBar.java @@ -95,6 +95,8 @@ public class BottomBar implements View.OnTouchListener { private int lastUsedFolderButton = 0; private Drawable arrow; + @ColorInt private int pathTextColor = Color.WHITE; + private CountDownTimer timer; private GestureDetector gestureDetector; @@ -335,7 +337,7 @@ private AppCompatButton createFolderButton(String text) { if (lastUsedFolderButton >= folderButtons.size()) { button = new AppCompatButton(mainActivity); - button.setTextColor(Utils.getColor(mainActivity, android.R.color.white)); + button.setTextColor(pathTextColor); button.setTextSize(13); button.setLayoutParams(buttonParams); button.setBackgroundResource(0); @@ -355,6 +357,29 @@ public void setBackgroundColor(@ColorInt int color) { frame.setBackgroundColor(color); } + /** + * Colours the path breadcrumb (text, folder buttons, storage/root icons and arrows) so it stays + * legible on the app bar surface. Applied by {@link MainActivity#applyAppBarSurface()}. + */ + public void setPathTextColor(@ColorInt int color) { + pathTextColor = color; + pathText.setTextColor(color); + fullPathText.setTextColor(color); + fullPathAnim.setTextColor(color); + for (AppCompatButton folderButton : folderButtons) { + folderButton.setTextColor(color); + } + for (AppCompatImageView arrowButton : arrowButtons) { + arrowButton.setColorFilter(color); + } + if (buttonRoot != null) { + buttonRoot.setColorFilter(color); + } + if (buttonStorage != null) { + buttonStorage.setColorFilter(color); + } + } + public void setVisibility(int visibility) { frame.setVisibility(visibility); } diff --git a/app/src/main/java/com/amaze/filemanager/ui/views/drawer/Drawer.java b/app/src/main/java/com/amaze/filemanager/ui/views/drawer/Drawer.java index 9240a5e426..6126592244 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/views/drawer/Drawer.java +++ b/app/src/main/java/com/amaze/filemanager/ui/views/drawer/Drawer.java @@ -78,6 +78,7 @@ import android.content.res.ColorStateList; import android.content.res.Configuration; import android.graphics.Color; +import android.graphics.drawable.GradientDrawable; import android.os.Build; import android.text.SpannableString; import android.text.TextUtils; @@ -101,6 +102,7 @@ import androidx.appcompat.widget.AppCompatImageButton; import androidx.appcompat.widget.AppCompatImageView; import androidx.appcompat.widget.AppCompatTextView; +import androidx.core.graphics.ColorUtils; import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.FragmentTransaction; import androidx.legacy.app.ActionBarDrawerToggle; @@ -224,7 +226,8 @@ public Drawer(MainActivity mainActivity) { // mDrawerLayout.setStatusBarBackgroundColor(Color.parseColor((currentTab==1 ? skinTwo : // skin))); drawerHeaderView.setBackgroundResource(R.drawable.amaze_header); - // drawerHeaderParent.setBackgroundColor(Color.parseColor((currentTab==1 ? skinTwo : skin))); + // Colour the banner with the user's theme colour on load (kept in sync per-tab elsewhere). + setBackgroundColor(mainActivity.getPrimary()); if (mainActivity.findViewById(R.id.tab_frame) != null) { isOnTablet = true; mDrawerLayout.setScrimColor(Color.TRANSPARENT); @@ -949,7 +952,13 @@ public int getDrawerSelectedItem() { public void setBackgroundColor(@ColorInt int color) { mDrawerLayout.setStatusBarBackgroundColor(color); - drawerHeaderParent.setBackgroundColor(color); + // Banner follows the user's theme colour as a subtle diagonal gradient; the translucent Amaze + // header (logo + mountains) sits on top. + GradientDrawable bannerGradient = + new GradientDrawable( + GradientDrawable.Orientation.TL_BR, + new int[] {color, ColorUtils.blendARGB(color, Color.BLACK, 0.25f)}); + drawerHeaderParent.setBackground(bannerGradient); } public void resetPendingPath() { diff --git a/app/src/main/java/com/amaze/filemanager/utils/MainActivityActionMode.kt b/app/src/main/java/com/amaze/filemanager/utils/MainActivityActionMode.kt index 4af20b454a..2cbb3f7a20 100644 --- a/app/src/main/java/com/amaze/filemanager/utils/MainActivityActionMode.kt +++ b/app/src/main/java/com/amaze/filemanager/utils/MainActivityActionMode.kt @@ -436,6 +436,9 @@ class MainActivityActionMode(private val mainActivityReference: WeakReferencebfkw-dDncanSv?{!X&ijUv)TIDIX6FlWrvEMF|v2l`}@rgHhzNt4bAikx|cr@ z^n63q+n-%C%%&JB=T3nA`CB7_KCr*^b=}f501lqE|0ZZtJF#k-PjM*WA;%?Xwi?#C z_chNd!+-gSsO;rW+zj|bdwG5@EogX#a}2b_SHtf;|4xNFx?*uE2Rq`Q-?p6OPXry- zI}tQGN$1Amz^okq*+rn8yMF&+@YQzA8D4?5=t0S#@g4Qo1!%)T_nlj1h^_onnatfzzfMrm}`Do_H)J1hNkb^8oCGj4*Lb@5&z1R3K|}AoP~qm@k`Lg+|~ra zR_wA#**ls1(2n(0hMc z30lVOc>x-qYG(%8>QL7nVNVh0LV^YxD%GGp18pNGZxuP6J~sh6fMcEs+YI09P)?gc zA7>Vv!%~zO@R`5(m5J-+V$V@@6`&#dszBd^yO;U*Du~X?#P!M@KcZN{nHg@g^?kb; zG!le&VGV&aaDQ81N<0K?0QydcOc|W|<;3d5e1= zg_GZ6qLWUb9^iPa@D^=TMHp%)cAuVVS!4?M{getifa7lGFl{Oc1DeCYto$UM+z!a@ z{UI6j9D`0H3?1ivL>ekibV}GoKjZ<;W5tNJsV59}7Bp~_oS}q`NDm*)F=A$DcePI^ z4EWS9xMvJ>6+oxfUzifk3(&^QSwQb0kM)x1><-2yhmVjFSga@lM|K%N<5Mp~84(@J zYyV0`MnXzp7L0Cq7K9lfshee1XtZRc6PdL- zBFVEu2GF#B{<3GF8%$hW89_3lGDUkCc)<=CV$1`YVEwvhM5n>T#q0GMvuJW&$7SeT zkp=XLtd@b^qd6R;G6HLqoY%?V{BKdJ?R4Q3%(dhy!yY~85X(82?H)M>bN<0W(U?>n*7{kycavYnA5oG70dycBaI|MTQFgyvdQ*&tMLH98zvh4xmC{{i4jS!+(O!(Ke>0w~hfN?OG3e>8WT$19Cx{Z)WQ|4}Y>&9pr1I-H}{BLuusJ7BKD(KwY^6*h=_jCl`m^kQWf6GzZQLDs>ssOu5EvJT!=vHn9?FF4j z^(aGBx=GOEJv0i?P7?y{9dr}}FIhC(&P}{3AOW*xp#4qP@qlztfGv0)1LynjM4E#W z89B?U;A&(?4EIzA8jZ~fI)4TiNnYtdMkHtqOLFwbYP@IJ^{2?xCVOHVLJ+SCXxxNz zcbbJ!Feo52wFHer5%9`Xm8A;3dQlbZT-*_Z*BvyV3-AT`^)CpTg^yBA-QCfNQU**o z?uco^N7X~xo}#bcfkh4?GHH^4mF>{bp!qZEh*?eeAliF~C!b^v@Y=+_6QKLAMk zib9o?xCChQ`cYc>Z1}K;GTUJNB^2!NRv~ZsRrPvBGZE3(kB1V8G`I|)jlC{9Vtk5* zT3O%EHZ){*S~LW|##a8G+!SjA84(?^7&IheyM{th;u4cj|9ENTbFw3bd22?nm!L61 z+BFP<5*L3`gIQZTIe1XANE!B&gI7tlVU1KhmDcj+hZm-tvHDRIz?rk_#pn;9 zb-#_KnYM@1>(kzzRxXsp90PctG9r7EN6O$#sQ^vczY$J;k)Xf0T#B3o?aXIpR zkmpFjkn;tVQiO{Xxfh@zdOUr;THmChBp~WqNbExX#GE{y^MLlEW^91uJwcbp4TVj| znK`vgrN4x6=~UD~P?n%eSlOp}l#>_@`rcwQK>h=*C6YfWZKi@IX+nZVM!{BkGR3HL zavbYvBxw9Sz6SP3m2w7tHVV*^LZMCS>=3Qt(nlvRP-T#H()M)^YR(uNIS0Kb>pbcF zr8+D@i^C|oUhGbef-x z;-Ls5dEfEF>pFxtwn6?^N)S)?3ESIkr#it3ock8&cEs$JoZ6dEjQa>Q?8o-n?wuSh zl0U^^6pvQeB&YTkHq4Dotnks#E#VXi)EJdtM(`S3kt(@QgHNd3Ph$qqm=RCyw?IPz zfWkk0Dxh%mx*-lH3ZaMw2i*_}Lp(A8=PSV$lY8|fd9;jejM2}nNg$pt;Jl9t(lPnO zZ4hfJx6c8Zg3jSvprIgrcjBPO-&Jg?bSK_fd5Ojx(g&+$=NB^jZQP_JP7svJiu@etR}{md#CPgmNA^Szx@ z57(Orw9Vm)p|*RA=H!I_2iekQ&@AsZ=e2XkA_+`rBV2L9?8A@MQ?|Uh49&=gRCZ1d zA2it03n{IZplOZkF%Re}$F&?Ng^Qs{lG0{=lKN0yvm9NzH#&WKSJ28kDIQ%Zrm^6x z*m2HrzW2U;H!fJzD$n#X;@?{`5$HUJl9yK%k&7$hQY~%FhL()DA#5inqY^m7LMkhj zCf@yrdvh_8ydy8$sy&~K5^bGLpqKidcW)W^2#uVLiyOlJl=DibB+yKIhVWmfr+|X) z!TWuPK#RJmQ4X-Wg;Yip>TSAai{Sjv^0KXSbnB0jj4buN_CU)$=K$UQJGvq4T@-u1 z3zJw%&@AM8ND}AtGnE9c{O31s2y+yvwzq(mQkkPE>}E;@jSr~a#ARF2tpl`TH*E`u zgD&vYi<^^cyYhHMti zGtS%1V~q6*usH(lG%$2Z+HZvvMjon0QttJ3f83n@W>hE28qi|<3O z6>q9~jHYpKtrBTMHK!g@0>7E3J$@2z9s?CpKox}MVgb761*w{h@XI)xxCI0;@Tdw@ zp`|^uL1S79ag|7;`+qgKL?@i+jE50N4_en-%}gRB$Qy9=KB}U3{B1YgaBL?CIHR7`L5BK2d26ULg`rq+>b8%jx_Pr`lHGLE;US0T08A%gQKBVT- ziK`M|(e3|fyP6)?aU)0z5HRvxmz)Lx6lDA>jJ+i%VPOh>b8-SKusgp(8z7gxD`z8s zgXj5`Q8zWuT}?eLr^%i3z%EN9`-5FoR~vhksoaB8pzB_Bcn;ZzAbm`IM!p1}GLN_M zlze>5zZW+7@v%sjz{5?rT(NzQU%M0VCFpa7u1S?V!XI2wpo(^p;O|=j&|!iVbVaz1 zd@PtI`4X>F5}7N4zdRc-l>qHLNOT15fdrixYARI{My#KTrIoV!By^=(j(=PqOd>Gj&K3x^1F(80^UTf3Ki9e+JOBCQU4cN>i2Qs-Q#FfyOGPq=e|gQ7Vcie!WW5GrfwAF9f9? zN}Vz3a=2n|5Bg*=iy?8We9bb5PDQDb_*P^hV*aKV1id_|N>tg2phE*iR?)q(Lh3I2 zslY_U?xZDc;tRu69#^DjUTZ6)d6PG%GN7rsw?zm@9ZsBBz*SxdYAd99lUD^)-sR_p>^!g3v4d)`$C|x^c|_A z&}q~gEf-O~2JkWiU$Q$&2Lw-~pS_0ES!cH?Zh?E>Lk*O`jOkc@1B z=An^O{-jG_(~KC$+6*=MA>QQDU$`Uf%iNu~NFd!HBuw6@cLCyg@g|>>sqWQ}O@Yeb zjw}XRcXw+HsBZlR=sDQ7$M#r)CB|9QD7sRM&tC3!`AAY9$ttNSjoq<`+SL58Wzh1j zjL+W34INAcv@>XNaCbi!!M}h`l}y_N9k#OoJ@WDp$%rp8!cU>#=1%)-0WE;aYaP5f z1hn%;e1NWe5e5UFswXlT&iC27YaP6a8#p5Es|H_!!4Nk4`UB zMxq;sqAH-+*cD(A)*qlH)_=jN^8s{N$JoI&}XY$;c8c_t`GD z_Zf8Ok-SUQ%q_bhr8?;jqa3jyNMoh0x}$qp@!9LL11^cU?EU2tZB_(9%*n{nDaP?c z^95Z253VDf%ki|Ii1g;T&L43Fb3k>8YAx7%+UY~o7-}VGRyVX~`^xaN9UQHA6moXDELQuo$NBPPafa{WSU_ucDgxqEDn+GmgPqZV6d zZ(qD`R0Rtm;PW3%`5yY5$Ao~&m+?;2xhjK3y47>qM^TAfUG>B}fUbRsUUQsacb7`B z7!v2y+wgD7Api*h?J!pPDb&YT;4tj-P99WETDPkU|JLfR91sF7sFrFBkzZAUy|5T2 z>EM&r?b?N8WYTq#03DEx=f`Td;box(6I z*L8RZ+>#C0_GWs7lSLvt=oOW(|1D7e#~sKbId3`0*5)Q>VvsldXa9 zt(IIZvH=+=@jWT~X}fFo86VH#s1E_lq?INFkm)Uf?(jIZ2AlgMcnm?6X;Ozk_xTJe zA_VLf(9(74ml8J~3n9#TwVw=LHxVIVt}k}9rX^^y>B`Qag4oB^>66P~F%l61X3%_k zh-`#b-P9KW{V^CJR=GSrsQ_lv?Kl^}f#2sjM1p0GQHa4Ha z|3c6z@0++8lY4wDLNwS$td*rW(Vvrp?FrgsD(?%Rb92@3PL-Q5fyOiNkoHOsTDSk{ z>Rjv$m3@2!CuM9S5@>Y>CMsFYr?5aY?70h~OqL1^`-FFThmKt1M;ChmC071o!TO0? zvSLpM&~SWICROVLuoyTb4Cq^Iq=5!uzTPQ!3MD0CbVS~RWG01zX9e1rD!i9GNW}dl${14vUy3yqhcS zTY;ew8thQViL=!kd~4K+rMG;lRD9q=@SG2Nj%>ZUm9U-8EQVk-iss}` z=FjqP@A6cR6~g9~amZ&e%<-$5l;TlMb)BWr+$b5m2z2F{;*y<>u$``)RboQ&)tTs; zYP=+XmTE$$GAsrTx=$z`L|<*9YwqzjBXZxa`@mwz1s&{k;Z}l$vTZ|n)wA0IO@x4d zf+$k54xVoJy^h*Z{q8wQ$$lW0$0GSyi_?fK22*E*H_uhyN*p+D_67EfCbCTqSPYd- zNSF;qM3Cw(&yN*Y0yLIi^rWG1T6(0GCZ%jhvZT$|0`4x+T>%jSj?*Z@P0+!!EJVm2 z>6UY@$&eRi1U<$zWBbMHzQf&iyL13;B_EEwb0N@JGuD*kA!yR`%l@W)0NtBOtKU9q zP&MPU3|q)%$&)MKtk&}MuDa;7#sIcMJz{k}BCVeE{IW?=T;kD@cg=P*thtJYy8@^3 zzK}HJgZ|bO1Jde?WloN(=;#&?eZ!O%sBw9Orq~rh?`^f+L5*l0ol2od2d@C=@J=0G zbOsuOv5J<*=?k+Mz__xyfdyA%Dw}T0ktgps=4ktF>~Gy=cJxbNG4vQT|BAK-rfZr* z44Rel3ebntqV2@HnDCeUXoYj!4v`cX2}_m&+Vx5fB` zde$<5)|$zmc3{%k9g*za+K7H$UFd}C6eSaAo?w0Ps){~#mkJ31md=P`F}QG(rhLQf z;^F>Rkb@!6t^kW+!rvN3dM6Fq+JkEU232%Ra=)_4f3U>>yuPT08|5_0A)tYws_GNT zNc#&^(X9{i^G4|<9ot+|uQ83dE0olQZPpG;dHu`_A{cTFkq26Rz`Z)Zx zLqH)fhS$?Z|BsHAdm=*-TV+R`LIpxVK8u0C?S|7v|BqkqK5Z=E_dxeWSPTubMf_=_ z|F^8kqzn`Ldvp2u)veeXh@Wrr+1qjR(f^Kk_^V6Qvw~B&{&Auj2(uA71uybAH6$Yy zSJBgXqyNX0(`%{-*E5t!w0|3@qE!rNP00w0M#iAEcsPtdroY86#8B_?WI8C&mW`?A z3)aNLiG*s<;jY*iu@{xg$|nEK#+)Wd(Y8}n!QCVt&b8eT*&5&`M~A0RRMAmYpvA-8 z!6F{sYM$20CSQJ=;ZI%>Cy9r@Bn{yOFNV|RCa3?%j_YgU;q{vW-K1R?lFs%Xw%t1D zb0N@5JbbuwspAaEc+>`Ak$sb)lFU%utZ(~y;q<+HZVV? z9C~KpV2V!y|&32w83X@B^h}~No$lT;-L}Cq|2H^04EY4N?~s4 zYaQ-a33^`SB!2Pv7Vg?67vbw$AI9>qX=pq|d^sfElz@M%|@xd$|IFF~Nu?yv!G5_j6cEUWteM8M$~q&FhpDA$T07+A96S zP+~q8KIm|xc=+^#S3Z0%DZ7VmNQeJ!mHsqeFcwHw8T5qW;jJHZYoJbvkaz8~r>g?W z&dx4B@8g?Lp~KCJN9cGMS_7#;V5{_J&{e)6D0#la*zFLSqdS!GsM8{3wPJP#^L_iN z$Gp#UO~b8;8bQ-M3f`{FKPz#|AGWFj`uXUyw=?N6a?eFxhk9{3J@!*)**#HJzz-dK z_8QwL=t13xO(NNmpwCv&z>F`IK8S>-dpt; z@6ZVNfq#QIU73t$3BFNP(1xKzwaShB{k_-=?N40#iKnrE{`|@d$p{Qt@!Yxwoqr?N zEtcv>jPw>>Y#4_DmNXA*X)S>K42o0&Z*y`ws{Ldb>WlBh}`Sk+zkxoC0eSBSmsO_)j{*GViGdgfQihCO)CPP51ILP1yk z%FT#WwIU+bWhpYJ!NxXN{YJ{n_{ezg^;h|%Mrr|6@fp-ir#Zhk1a|Cj-p{c!Lwyqa zCBEHfu^ZaGI0Sa=aA^*RQCnyMR0*WWVTm!pmY_ATF9-;qy?&Bf05(2@0#(!pQ{4$# z1N$QGm4h~B604kfDC9~_3ehzUTLTfD#D@Fq`CCj1x=PqpiwJA4m_7My{n1ln~A883ylV<;(_1$rn6j4GFo9E|~$wvTAcpTmny?)6Zjqs`KhW0GmQ z-6FaSVgJwOz;%m`HcLm2Qe~BcgE(8?t!#1<=~L)%`!`*Npq1O@9&nr48R*5sV~-C% zv;ixdUy506a&}zXfghe8n{AGM{ zR&-=LF8Fz}deX2Md}m|~n*2oq*Nag!hCFCCca-bsGUEy*e+xiImr22xpr0>bpsjho>n@j$e`G8o`ljUYT|gW2#%RKEtr5}Wuj6YwZ(c~c zS$@8Nvdv19J@qeBfUe^2sS50j2!-Ms0}V~HDMGJP+)Pv^fd&+GMub9f)=-LEHNxVk zyA+_O=kARA!32uD#=F-5oA2(FMrbX@{0eyC_-9;ZuckiBSn(_1g z9?TcSry>9vul0y_I>;Kj!(_h>UI;qS0zCtN2r*R#dVpKcbUpxvSg6-VR_Vd#J;75F;8(K3%oq>knB4q-%i>^+e zm;R}I_IzjLY8mL$z>Tvq?$)!vzsHKbCP72%&To*P8KBTM%zG{9yqC{rK6|-UcSekO z8$xM0Q)xDrgQ%iIM-4x1seIXI@tb%^z=!Y8)q>K01$0C|r@4}En&W-C6^8)JRUbP* zlcMOu2885&=5k9wKRa8@YK%Ap=UcWldr4i6g!Ew&{i zs6_V~G}0+kI769>HC=gr(f=#9iSm|m7Wl&kWXW{!snK2xco%DXvKmUrM)>^Sc-uJb zC@o9nCU*s?!(GI888FsbR{Of5@xZI>X3Lhxz;$~Cx`OH8wv6xTd%ezu`UOH6!ymcYFMB=Cds~O_`931I=x_;~3C{ zRpUzU60|!!I`Cp3&pPRn5h3EZP7`)#`Tm7B-yl=a2YAzzTcAxw9`C&NJ${=)2BF5y zYQ<;o(7TODn~SEuCFnC$6I{szWIRO+ceb`+pxt8Zn1O^#uM4~Mib zXH2$SMfCF_!Tv>+9p%Pt$XayI?Rm7(+G_Ocq@b-i3oTG7xxRUyPnl>Gg{^_Rf+y@{5?czoGMyyQfSzA$Y12y3 zL6yCuw)1}x&@h(GKnq4q4Co>RttjP8QzFTO30d8Q6|D$uOuWb!wDnifWN>5Iw8 z5=ow0K98T!bcn{>8d|x4$JE65imC+4?|GAb56}?T59Xg@g4ax9C_>j6X-qH6uXz3Y zY#vi%;ik_GR|u;nHH(3$+�KL%f)hmlG&RdW4dq477Xc2`+t~^G-=XLkpP>)#94F zOHx!G&0?6n6KR$cv8c`EPFHNGt${B++RZATw{vtR_K}PX^o`){A0-4FAW9@q9r&12 zUw*VETs0r9z$>yfLO^V1#Lr*6@uWsQieg#uUHa1ZEI?QB7pBXcI(&^|_66 z>hujIV2jL|wf%(>0&t7p&-}zmF8f z!dyb;wAxd#y&EG50Y8X#j+sCJDMgMM_V>IF-u|5lOPHAhR&eAk?HsgUF=L9lX$ABd zW4+=l-i0|Jc2Ej)K$Ns;$r)H6 zi(%rGgW^?({XLAo@A06070qVrOMpleeGwfUYjjK%lV84bI|gruP$pbaJ?I=1(f1g#@3Gd6z#_wD<%QrN=KD_Z zb@ZV}7Q+&1aqL!3u+o{=&tHWJ=hWSiCqbhRWMrSnPr58iIER4%F~REc+qaFoh0UqM z*Sbk_z$}4EmWwtn8Ce$M;R$-=U4~7oWo=IV3!CpNaXKnG3q}^hQf|T6Ei4c6QSk@Iq&soVghN0H>ppr0PqG*sXxxZw5bE;SJdQ#~Kz!?+&G(f;`Aiwu{lM~vQ zdE}s~`iv{(z5Mx-vATBP^L_9srUWd8k&XKU=t_*;Vn>GgQ|DCYa_hB4G1x<%bj zN2=R2`1FI+zW5mwYEurJ^x4Duize8mE*TLG$Y&HLyz(<-ehSqA)WNgNO}LXj=Sm$s z(dvEXJHUWLimL=f%L3{RQ20nHx3?$0UUJTzt(A?+T zW=RGxY82Ne~fUaQFatNw| z1jk2ZV3wRc7t)WwAz<4#ZMe@~v&Q;Ka1T-PZ<_Zj{fr%640H+ve9mnbuzq-6bJAR( z=E4o3CmGsDjMPms7<^8^`pFeOdn=oM5Wgu4M!qXe_o7Ffob>}QL*ug-tV5QW+w26% zNFhNhyTN(StAe6uZ`wtquL~ENi)V#{pkQip&5MCA3MyMo03N^-`CU~tT#%?tN zbGdgl;H)1wtZ2|2<`zL@T=&L^A*DM~_K&$38 zJtLZco_+QRXcv$FevOaofq3|Qm}`CZ-edwv*IsVW<~zE}5YU95{XGT2>Jy*61HB>y zbNlEngI78hpi3n~J!hmaxa5UCayhWtCc(60VfaAe^GLbrW}ljuK6{Y%ja3_cR+V^9 zA~>+{YZ{|EPw5!od;_$^NJ#tIdSp={f9y|2urYG^_ZaTZ{FY)~iTUigz*9{QG+lT% z%@_4I_Y!oIqQT{T_S)rybMPzB{OS3Z)+9cmz(PI3O?Wh!%lqv8XlSnL9^KMJSj}Px zhBk1D^*x?}=4-n%1zkYCL`n|#nvcpM{`VEoLwvP$22U4r+0Bn+es?6w_S6ergc&} z7DHyy43IYYb;*eAPuBrx$e_}&7#wJn;wGSbtMjwsK6@@ALNbz5Wu7t-ivf+X%#}C! zZwVNR#dw21`GOJVtA;czh71|%qmcG$OtiO4@e{6bmiFOny-Ej9f`;k6QA&Ho`&k`) z!o385awY`mbntjO0$=O@%w4^Xg^IljvDOe1( z7IbSi!)0Dz55fvbf37djKV-*=#W3)osb^D4qrO(cH_Wpb@;A9ZMOs9B3l;<63pB+@ zV5p;S*kB6~0!U84uu^m&76aG+Ao{ar$JgOD35NXURw8H*bukt%=KU==qrLb|dQ&+B z5JO#vsEw!mgUh|;w;OQg0stH>B~)%!E;#pzjPMPse&Gf7sH|%2j-ng}-Cu(qwPwC& zzrfAJD-Ifru7Hxv|M!gj<4EwO{H0c$y%b#kcL;iM$&+;jt&(}+c_#Qv9cEVwx>ckP z3U2rVYD%<13h7jJ2>gNzF~}LP0{gJ~pgDm*?VD0?%|8KgCs+*4?KRar8$?e`Nhf;2y9y?QOaaNqK3y@)3%( zLUK>~I*0y0^IQ+UM+e?C`M!=zWX83Y23PRhB3&={;?pXq6|@~E(sF<&E%wmldus-Z(jyPrr=^3q zPe|SJBVM4pcR!;-*g7|2-lS7}@# zt3n5o`rRu*qf@Szww2{Ut&vmepu1_Rs z0}@%4&WjKnJ5_Zo`q+&QF$>07K2a-bB6$5B(sluG)hFTyih zDoLbM6G!$IV}&q}ukv0D2lk~iM0sVc1eD1F~iW5`?wq*UIoK z1snpxDiB`NqK$m)5SXEhmY?xfBIy1_1fA&+z;*DZ>YG1E@H38lq2Cw1>2&&(?wTRhnU7Hd?O9$JQo^7PI#*qD6p}-WCm=a$gW#|YP zJx4+3`+do<1O#i;JJTZl!dkk9rf_@CC4W*K&5_nbGcFTWQ zOzuSgidbQPJ(>T4%%+`tEfjSB4+z>5z)=unEMOpEHm_CfQj@L!@R=nhOP9(*5TpQ- zq5eK9%XV`a{;bd#s+tHxBCx`B0X3lz^b^u|Rg}uXABe3C`XXfl>wF|by?xdZDSDb| zupgRUYd{6inievF1&|Ewdt!ncWR-Sbpb-e0%4L?`#ce*4q1|%;H9A*=ZrSzLv@+W?N4`T~Op)d^w6|8Fg1K8vCCL7!xSZ2%0U)ot1n+aF6zbb@Ao)D=K4v#dHw z<-S9}HGiVxa>WxG4QxaHBmc~!=4$D?Z7FvM81SM~+Z70WK|JKIrcG7n(V+Jn0{Rjx zh5#u2Y0w(Xh}m@rKr19=&=Ow|5BUT1=keUS=MZqgi%w6eR2%{|RRdC;6N4s3$>W=6 zXTBF*Kl*g4WvDk%(7gCUz93cz3thqE6?VO$65v7*t&rTW-E=g+ z6@!lN3aG$-Jbjq04!!GhK2@u(IO~>J+cD}26zO9Lb!a1kmJR`(vQ2u6j)bTy;0O7b zRzQWB(-kfRh0pnhm(A{?BZV;fysHHXq?h!SXFp$HlaG-WXuizZepgWOv5QG3CwAzh z7HV9n1)8tf94mx{HOb+R)~4%vfs>lFLfY`M*}Yw?5Eemy>eKjut{2CthtYdP6Sif7 zj_wKslF-~#b>GHfz)fC2vpF0Iae*!2k54LW{U}%r;i-K5*=mZBa3sV*vuqoFNms18 zG&o0_oOc|9itSBD!cJFk;r+*-`nqp9M4P+;H!DqV7mAU41-5URjz){E2Nr{SYBys! z|5-1WbCf}|6TtT$M|H8<{Ek8Q#|j++R-JZVxA00M>I$06lReguKGL#w8(0iT6JAcT zobQy^OW)=@U4i?h?h3_foi-Vv;A-IzV56W_CNXkn%C2Bz5OR=jnr>6;|1=W^jjew$ z2+aH!bp_$2ciac}Q>qukG*?1;W{Ji23$V|kuAo0GuX2@lsa_2Bb-~Ou9OIyEp`ZnW z@GOE(6Fm!HN6btv`&)oRjp_k-3y|Mn#Gr@$awg%Ax5Ez^z! z^z>K=W)-#m{O>YfHLpGNr^q1mnH*Mmdac%RM2r^?dfsXMxwWRM80o1$l?=k$0cpaz zR*%GkWLIE7Y`M{!Pfx%gj8}Q3L%I+}ZkAm^wThrM8*{}*#r@J%u5w+gXNYlph`It4 z1bNcIM!X3lzMdDk$_4uIx1?gk2RBNXU={Tso$_42UDz*$Q#<0xT4*JbTYnRG1-0lw zhJ1a8pbj=q@}%ed=ft2xoprDE58frG0zvzuP0)n@Cb7bay`8@az1RA0HXubNBj$!Q zVPnPouS@RjUhlU4K?|Tjzy2aN3u)EO@n|4nhx>f?>0ax<(du*0_3fJ?O}G(IhScp& z#YjTX*=<3v(?y!F585h%rb8goc8t0LsIY%iwUBh>@o(VCdh^dH38WqZmpiThR$x!? zr8PQu0b36vCy#pC(Vu#}(Af z`b7r)!I1wc`-0tr3!aMvz0hq=)D_?+@2>@T9?iwetH!7R#lPUX`;)F5_JPX*Giu~K?>XL3Z6=chX>FG8jaR^pFPxe-0KRu z1$4MoEQWATf@g1C+37Fsc>MWiU4h}3*Iw)D@n30aG%?63=USD}Ios_Dql3n{@D`c(`JTuRE|?|BBkFOwh2&Ne2&3`ZwL~@zuc0gZ@^P@!5+m1cP|^ z1y6dT)MLDXrMj=Ly{2e3mSeBLzQy96x$Q^?Z;qfp*?Gzf(fB33%&_e>q`8JvaUoZ{L|s7{7Q@lk9t-;H8I>q+01hsY z;QSvS5duyHg04c)HKK^r);2J4^BrPD2*^&ZO}M6+d(PLaPd8nYG-A*}lsCrKXTNDG zM*4q&7p>dmqwXU@7OuSx-XvT9A)l{VQ+4Sc#9I!(ytNGV8FR&IWfzSshDGISK+_fS z*_&{o7jiUQzR1>}ce=GzIoQ#3#Y+szp!3m=d*b1uJZY7#26U2)f)G%ZKs$!V{Balh z^GRzA1+$j#Pt8X=hR1xm7c|kIGw>I+2s$6_NSc5`JX~}IM1NK$DsOEg2my$8G^(IU z6A*%~c7m>+REdiE(@1O!jD|G3B}nwgK?5k_S8d%#Jy0Wq=2N~!MG6a(k;|R=-*8x7 zXw0vAIMmZ2T%JC3yy zzoRLc_hp1~ek{OZ*n|FbLOi@pos3+BJ;g%!)Cl^cJJ(;MqX0n>W`??NNS%xbpFKa{ zi-Ru5VvwMSPI@sUeN*AHM_K^KXvm*`uE%!;3vpXH?x_DOQTWo@H;V)sBLobdi=6B6 zU4b>!*TE_`OHvA41aV-Z#rD5qF&H5pex4;>DanPf#l*DF`YFI-XwRZD3&!F7wdO9<%gRcluS z_<{y?xVNA&eUO29!kexln4lyC9IFD(KcqSUL2nZI6Xu*G7Q?xUE(Cqh?7LFD+5Wi= zeN)b<_Y}D+D#Z>-Lx!3LDB?m8Sq$#`nb&-bW>~wgNRewMc+z#LHEg832PMe z49B=D0?CV^z`5?)e6%%iZ<;3o+BiefH${UnOBhmCtGee-EqE~)y{o}=<8w0aL=H6J z*(J%ut6B4n7ubTuK(+?%8?txb>g005!44xQ_cCe$f4pd_5h{BtP${mT-T&|bm({To z#gxIXlo^}{p2^()@oL0uEC&APQ_yTNlFy#%urXZD)xCyatN+q=^*nAPNt7Z$V5ywB z69%JSK`d~&4p0-aBEf(G@B9kh0uFZbzThHZ0WC)JE00wznf0nQ+E#U2f#JZWO3m*2 z>U!@f<$=z0H9MPk0TcsGe-eF;G5ka3;J-^4PRwKtMh^kpE;QaP<1P;~IkJ%pRirBS0& z2zaey=4~bPkdI>EgyFnJg#hv%;>-P?KB);6l98S6Z^cF*3m9E#g#hx?(&%K36chx% zJwgdRIG61{yp}8-!(9^^ovM+tkruH++bPmaz^d`TmSm*kp$#;eVCG^^2U)e$z$G@U z3(`AE)KlVCf&B7z`YeoIvRgHWYtzPBD9K(_1`T zKvF%{*=ucD3;{GDJ^GU$*ZUA5mee#XkHu)FNoeG} z(p}b{CO@t>Zlt@Fr3kowlWhUs)^h9J0|d~&%8u*wPFL=WOpBXu#%Hyv$#5U4)aS=_ zzP{`}BM&IKQj6sttE>Ak;VwU}a|=OULQd`h4PS}|FD26+LfFGL#f}3T7yyNnCuCq@CPz;kcIvV|< zxq$)&8FxnJ`lc9)p^uCP-LU!G=WoPr3b5f4Cre9uoL-lzb*1k zD?~A{J2fnaf`~^|!HNhk+?0*D?XOKSkE&C~p8guVa8wnvbVKL|xjbu2XC%DSQ-yb6 zB)MT~kAtj0R29$-;jxEnyxuN8?JDT+(Y1_)>ry9Yx+-XB(yxKp7jM+P;di>152yS! z{87MYoFwn5Tkf!sFlr~d>IfS1+o}ZqE~*MMaG^`&SD-r2%3QCHB0ZZIq?_giLe_7~OS~Y8 z;kM{b8Erj@Zdm?jM{;%j08Rdj4aKm=`GReId4m+{st_QZ>l4X{|LkO8(C3G%?s!SMZ5MKIw4;AUdcuM=nj4ezwsGHJ<5!G!Zs3>4TuLn!%xCeRQP+Hh|t zXNLHxvR~m(#{Gc~?SB8y64yBfxT(>esR2?7n|iEjsC=LsW>LMEGrAYI?I1mCU?_2A zMyPwZM=MAkPCwM|#Lu0d>H)=*b*q77JjT7))NHCSv=E5p`>ee_{%PD%)N0EVT`H*8GDHu6WoVSS|2(L^%+po zwNl6Hot?#MGd-vZXs4VY@2k@i%y_nuSrSLFVfxn+N#9-Fuu6%>tkST(ta6TA08Ae) zU@zTJpSJ~!zC#}LiT9A$%8~7dgxhI`4fShg^yM5kOt(bLSlz52i`+(BH5+pAg#W0fku667-aKZe&+N)wOD()<<8_Rqj#9fqbSZBzfuD3Y?#IcKv z4x_lHd}MP}2?J!9SEHZKg#+t=NPBO_u6C+HsN9&2a?6;o3Ub-bFtCy z@{OkbGH8HNZMe1y3IX4@*kb{s=cU->PrAejL!6#Gb6RBlyBWLe@>Sr>%I@b}N1Vn7 z{l8~Ui%k1(8)exr?T#;0vu_VVQ!FA6vI=(80-72d-E5gjx5NbNTq8x~L3Y88H`Qa2 zX)n!Re1YqPs<%rl{k410|FeE>nd6c{60Cm03DyjWCAWLf|0`%T4Fte=PVKCNgZ>V< z*A+1O+CpBouxF!z(%Lxb!dcYuL6vR&wAWX^cu!Ab3m$p6QEu`nR|OenA)~L{>1Z^u z_$y5RCI7qPy8`p)#i==Uf2Hrl(VqhM>oFM5{#mOzbsvCj5fArN&}i|jG}+P*YK{pi z-6=9UdlppQ6%5id85;pGr|zQ!o8wHMovVtr`!?U5;+*<*AJpY}xbGPquJhk=pM6be zGMg3)1ZvH>)0VE+|G!2H)=aP+6P4GXVt zO+#Vyv3o;&ukkHTgn@O?ukZsH-5U8iDaRhbPm>hkAs?z#1%x_~hu26RUU~O=w(Y|W zJ0a2EBmKl(HfD}5SwSKvCJ*P?&yA~z52)s%nz_J1h z)L+kk=mt3w2P}YM;2W_KC&?RHX~mT=8jY^%NgG{2i($V;^6-|XS6c`-Mlm=Z>8;}V zzI+tJ{Fph>!J4rh&s$_hJ(%Q*t|K6NzOOB#v-gfQBOgs+v}fuslhIUh==r_^S`0j+ zplU|SOc$dWPFWi&J=WRV#q)gyv=}HGSRtB-S=ELmUE%1qHJlgbyo*NVifAz$B+ut9 zQ&^rnADniyu#wSIH}3byXvk~ovmqJbmi}d{T1C?6p6Id%LzjVlMfa;>2vf2jy=h8) zgGtOSQ(C+$XHZ*1h~(ejf5G{_9#9P7uo||@+B>AGyS!F1?<4)+^UlzuWaFBDqtPBX zd8vnM1O!|plg6&+v*~2oN8=dJA0IZZ{j3xMV78v!sj;^EMZGUKEisbF!xayAs?n@! z;1FzwMzcH3*J22R^CF)PeP-A_u^pevxoz{7PC zr$r%x4tNVjr)_Ypvlrd^v#deB7Q>CN6XF_?cr8Zvzn)X8(~TAfBr-pcHK?@~gY8hx zS@686!DyNiT($>=h}2yOG=Q_w4*C@=YtTZO)Y|6M+23!m+Bm5T_Eq`-tJK-Mq8MbM z+wL(2G`7x&>YBzp+%*1ZLOupS03zSpEyjS}cuj*^us?XXrO`}yG1-hpg@6^Uv^4tF zCbBeVi`dR#B`^5zS*G|oM^9TesRz0gsWE)M@Ve9@C%?fKEXu?u+ zGV-5Tivf*x?v!2o^1P&9!p+^W+i%rNN)t-!?CpQV*dHsxs7vE~UxkT!zntegMl(%Y z5@v3r!~v_#Tcu_eyh+~5m1IQY*rwZ}C#tUTZPq)#mFpu4i zmc}y)BLeh-n*0X@F&u22k=ad8Rn&uu#%`PE+kHLLRDGBJL^b*6z*8sJ9RJXR0i&7r z%v-MU+EF6}_p}{!|L>e#`Q8>3N||m#g1P5vyFu=~+2utF0r{10Bq_wR!u?Rg5dHhGJ483Iw1IAR=7K|4wtRAJ3>r2-BSq2 z?m=CZs$lGvyoYI~7vWXhQ~7pBAt2j*TuFJs=my7bpNd?QG8&04gV6=%3j%0P8qIyi z0{7|taZUuc5!se2aaF$tg$>Gg2xeZw=z%!zVxvo3)$?c=)^%k@zG=_3I~iMDNNA@L zR#%&SWORWU5q^}56as2FMRO=(|Lm3Cm3PfE`nxt-X56j>s63pWvA}%h&FJpyP(f7y zQ#59@hzjhVIYRuOwyWoH97m#(00AxK$|n)ftzY5zB4c3+Mn}d11N8Y+8MOWOx>>Xc&x$te_mN$uXg!rkNeZ# z&bm!KB3GO5d}@Q>;mD2Va1lg%TOFFlitpv`Y;5^_Wi}ag8*N#85^;#j`S$U z9S~CpfPX*hRH^};cTs4lOg5u~%l7j&xZeuZNNpO$cl}r7vuc4`JXS@cC;azs9=t=I z73wkow**62+-NQ5xiq@Z!2Q`%<{udS8Kl}@-}Ffh7e+7pFh{bt9`5#@a+C>jJfTyDjK<&e?pn{5>=m2`PqWwz(yI2zt@o4}jCS({TiNLz{CNtbuq)L&9y~x08oD8#epTdQ`l*Z1|Gc1B0F8LEd=14dgog} zK~>7l|J|M^(1|dFjs68AcqVNDG@MhntOc}=((Rr%dcCkY4_=FG@U)`rOOF<@ThCbslA5u5}+FjuqRLmcwyhP-WXugrw1N9Dq{;ivMQA&i;S!H zfFN}F7ne)jv^bIn&;1Udz;Dh)I<*%W*Bk*s*t2iy=F~S{YcQuyM{*uZWV{_O$!K0O zt~?lK^vI?HhOJR?IH&G+_bX7~(`0h$K_ug<5fFsSHyy=Pz<%o!Z{g3sfDc@uvgt8YA68A56F%lU$q=%vKojNk6wZAE-hQ{s*&){w35UzrO#^bLuSP%b zK6<}hfgIeSA;clqRYoc-6fNJB>4p{TB7fTwjI1$B2x&Pj7yCh+mkip8?!X+FZWvQ; z-iBhRd=||Z&5N5b`jExwYGk@$1v030+ah@%Km`$`7hJBH(HXkc^aR7Qf`Y?EzHdA8 z1Gc?=O9ps&3Z2egtma~c1XlrB!HNFc7-RD?p*-Ztl@YoSyGK(2e&lxR@tJvmoBNXJ+LV_#Q4O>3Lk4e*=wQj%cr8ppL zJxwq|dENI%x?$x=++PY5gL`Uyb=V7YJ4aTxV-IZ_L{>8D$QalK#gMX#+irWfCLE8-Rsqa5hfpH zunxtbFnXfUym*uq>~f$OqEi8kJbb%5y#cIV9`Z~m2B{n7$ipWf58v$aTmaQSI^-)L zAo*Sw#C?v3`_GUNAPh2gMMT3@-#t;GpY>RTr#hpcuE_=;^+*f06oon!sxY9&V#U1xN06 zrn4tg|9U?ZS$MdKvN)ailXAQFNl1n>8Q^Yld1d;1&g2+{a-bOKqg}qp3YK5?k%2t? zw89b7|G3UxEGx)E9v(w6q=^20krg;myL6*#PcD!9Ts=BHOB4go3I-Vc>ECsm+MyUG zzB#qtWVn2l72u_5bu%Ns5ycS63T}lU57%tQ7>Xg3Hc2%avjVsALQ0!a7mP^R%sLZ_ zArfE{r45EBSCi$tdhXoI?=qT^hZjRm6vH{$=#$I}7^RJG=U+3;*5^Sn+#&(?jO5{M zQT#3xL$4VP_T+isE2e_QRL9zJdS(Lz0NPtM8tj7+5ayt@$I+i97|A$WUjcAhb28tM zzrd3?v#g;1Z77CnRBJJCqmk&6bk4^d8L9*Xlx`?d_2fA`8RcQ-JUlM{f(Cn|MKQ2{ zlXUjlz#uu}t>6fHeM?mtR*FpjUG_Fbl0vaM*N>0gQ;HfNdodDG40sHZjXq{EnvsWFBLD%dB4hmp>ZeW*Ysfg{;dc3# z00bx+gi+K_mh6{w_858ias>&a`@P!ek{cacQT4uCjFye2W zy&$hW$ok*&Rk}~|1_4or$hcCX7-lqj<|qbwWavJs^QL{cVmt*zogMO7cXhP}u7qXn zccT6m%JVeaf|0?0`kEWvGtbo8QB1(7J`07!w@F^^nt6%K``}5118n2VVbcpFlD2 z5DK&CEP#Mx!BGq+H%QN?0=D1l-?-6m$la&NfMReLlo3YrsQ{HyMWi9<_I+{|?XLuj z73^*l4R(zta=al}v{eRhv*Xxil0rvew8l-v8iFqv2NqUEf#ib`G`hO5`k(4vk2VC| zynP6YGP*39V;X%p*IL3vB&#F!V;u3U4L9oWm1q389XlsOzbO3c8Bh zu!{(dHluU`TkrK3IOI!CwhzvWd(yWubVZG-GD4&!XUqz!qnrxR%r6l_{m6`Vx#bBG zQiTg_ZEWn8X9X%bU4dfgc0{sp4R-mTIurxDS?g2v-$`TznzW!=Q4HaeXqEtX`J2vf zLn*7@^+sj|nu&w8;)X`MEzF>QN=@VtQb}d^Nf;fvk7jF{bSV(UK!FZiWuEmrIT-1j z(R+~p{R^`K*BuPswDnmWp+1&37WUFpw^vzy`At7$ z8PRnIEkBuCgOLCsIF_8!#uh~mNp;^R>6pOWRxSQfn+`OJvTplU#U`u{MaU$sv|hS{h>K%YU)#ZQpd zxI9`_16u4UH2UWhnHfnQb?M1KsK}9Lnz9^n$0fzd_6J0}Y48$0$bpJn5{f|_@|{o! z05Nb?WyBNF08LTR{9!Yp7#4TB4}73h2q<(!!c-YCVMWd@_MGDmAn?%fu|mLj)u9+> zVe~0SZJc%kf`_6C0kf`A13ic3O&-N?%V9KvhhnqB^m@&A4JmhBzjXHr(o0N}PWMV2 z~@`akVaPtuB5#QqlGe5SmghyJV@e@XVTgGtTn-`@XrDUEi3J&D#LdSR);+_*p)C);hAX9%~>)> zHm7bc_cZM8153q=1R!A5*|X^=DF5Sk!7e{z`n8r8u((w-FwO`+T_vVCa>CsCtFj8#FrvmIgM^NL4du-nANc)UiB!335_;q*7mOc&)U`VxQ<&o&%YV9v42=y~Zj^uN6)Xl!N7cJR0}?P5$O8`lU*sbLQ@QWAnf1B3V_qrACn6&eeGv^0=nLJV}U7##((`n8xGJ!Bh6Sb=8vp6Jr4Ty@X0JFYV|)J?)e28EAI~N=#!C zZo)I@0jC%~C8)iF9p2SLhzR%vd0)a!c&Dy>ia|t?@HfcNCsT|WwK;nU$hDw(g6+3t z16RL7xg19;Vl5}dY}LL?lGU4rG`b1nQWH)wD5ee;-4)oNc~F9ounnJ{x(S~YYj6!0 zsYwdELFQ+mZHoxrM;qn=shhBC-{3$%SAaGWfwl?5QIhxRAlnFT!uIcA0|9M5Z6ru^ zurrXE#=NcYd;BDB!mcmH2LiSQrWi)d%)(25L(>?uc(>53&bVFA2LiUH5NJyM+5ZJQ zjlnTsaps4{yj=qHSO_#d1Gn}lrJ(0;zW8}pvaUS8dt_a?0&Vz6qQfzxP9t6At2X7G zr>^_zon?^TAz+^k`kf!8JMVaS2igkTFTt{ugT?|(#8dYn0Z%37c(~omLEESu^(*L0 z5G5n6doDYbHq)MLO*^L}YkzK1#=H||P!iPvPaK510{c&*;HiyJeb8H$Mxa59rCK(j zo(>80IB{*EJ7~u(7q>s(Ow4$Pp=6vaUXwu4y)t^ko*jwnGTrUUE!Ur7#yigUcGAuW zRT1&hsHAAx3+)0bpF78lccukem(X`$34?R9lGb*oQ9UjFJ$pJEwDFg|P=9P?f!7WC zeLOAwJ?QMX?$yC|P=83r2Rp_uc;FjWz&p`Z2qUdOgd0&s{DKF*Vfk@AG-ql3k+bTq zG3eMgtiW_4OBiO*b8tB;@yk|^OaI^-M&r8Z%EPgo-Zg->lhoOpMLqTn16NmhXQV&C z%h0OO6ay>$Z=iQ{dCDY^E>JZ2qoc?aL)teCIwM+2XG6arpM|^?nPS+bK(qPYi?pGm ziDqIw=s(UuF`x+O`Wfi?Xz237C``7}T;O`)8`jPVZ2_6U-B*o6|CZ17JJV07 zzwiyS1lD|qfO|DgN=Y?|<#OnRdP*kH6c`9lb&m(s*Y=dWj%#A9o>c`Mg4V*FIK-eQ zX$SzHy>wLo7oDn=O|pI+(FS(sn=B883H4-EfI(B}d-K&b?a4VXmgqF6s)GNFDzY^= zN)EjUv}@-#rVQwcIRt!Qq`$~^Paq1DwKvWCWmMV4U8*XueL4^iw-F*E%p7Qc&(ei+ zlk8Mgz@`{fpT}glgLcO6B0F*h`k1H+uHa@R^ye$ZrwkyU!?Jd}dU6&a2p$O=T+Zr5TFmzS*(e;Xh zHt^e;{NcpLPcdLsFo726_MbvV(flNh33iyN%x&j*O+Y5LZ{IWlJuaUXVR`VIZEccV zHGtk_gSND%DFRK7ylE5)8(JS;16C#Wsq@iIj#HTq-sCzXcvmpzc&M!*Q&z6Lu{HUN z-5e}v@#K&lF~Qa&1FePnLH*~&3?$9Rfekp{a_LG$AqY{eqG!DWjc~HCMx}_ zoR%ebe^9m~T;& z-|-6yjDp$`IWtm~rm*K;MEBBliMx6`FF8e^K@g-{)>+)L|12gY4u3uuNLKA?0DeK*JP<|sp48E>%aZ)Q zp_26|8EB=(DQXFDA-F}F=NDZ25$G@wkUz!Xf}e>%gCNMarNs>j$wU`|?e4;-7-Xl1 z<6!qubq#_bZlrw>?3eq>zP=r|67*F+X?sGj4Py0b3U>&=r109O$vO|q4#?KLG z=kiBxW~YT?psq#BrlccMVpD*gQ-`gwB|E&b-*jSN7S?tjoOO((#4#ua97u_(fRM14ZTg5LMRzD3eq6Z2;W!PJrF6b%^xq>JwHI~4ybn|d z?D+Fx`778f_-2qaO#Z~B@1PrnCm`_Dqmyfn@XL(|Xy?cItb+XH6ne~ zeS+zZD(N}8xDRBp#)&kv3`SE7Pcm=Wjz}b{os{0A` z0gg!=b8=yd5{Lj2M@-~DyZ z>JNF~y6>|`rGLK1l7CDY&^~YtuRyo^BA{z>3{6=duOr8Bvh-I)JeHiRLFC;oUm`!A zm;S1d$I=H}yiTgrPqOq^C5{i5O8v1Ubzyh-TLijNr7F^QTKaRJJvZ3a=BosrZ=mT#l}rbZ^VDN=z}9mRGC!&g z^-wi`T-x%IzV?ej;rfc10}hTUk(-T#&PW5dYf>FNg**+D_EJGjrau9jf`Li zM>?rPc}%doAx*S?ME zsb#nws~_4ymxyR#ln9$4n|z<8WB-$@_J*PKx2^`+qe{{6ko9jmP89T%IZnwyn`2V| zw9@~B>tcWLNOZU}rGLq4aE4#hJ4;w5omlxbgLXo7_p+eh`CvO>Q;x>oARaCgGmJ`q+j=L(-d1}1!+iGkHW{Ik)`##t$hsca9#CJUzkNZZ zZkog|1Kh`)R1m#F_44ZI8M-Pdrl6g2EUi#82zVb@`_AVwnYKEH2(AKBzZ zUE;3ZO{i0n)u597zs>sFNA0=f$nUF)RE=hU4pS^1KA&7?CApw*I(R);hKEkfkiDqQ z`()y{PEXg$c47peoeti}%P)P&2i>9!UW%_&*|jMGJ-?G*Vp1aMvIrN7#^Wp&57(Yf zz5as2t%mmR2laT9*U}Eu251RMW8RGnw8dEe?HMU?Yl=u9B|*>YaA#zon_mx4Hu=^R ziR)=MVI{esaJfMhDK&uw*R_Z{`4?!ipEhR%{cUNP^seAIO@LOyp)j^Q!q%Xm>-o29 zN-0{_8L3?GGtVr;O%a*tFBv6t6E-IeT%dmGxiklX{geID+o$CxBaPuYc&?R3nNjsp zMv=dUcmcX9LBaD50oX?Dz)iS)r$}B_q{HJ)9!z2iY)1cnFeKc_YTvz!v3f2bFr?eC+5)6&`(dFs9^1&4qZCB;eKFk0h<4I}Io0Z-j^ zr5OD}H2HYDq3d}Ijef>|6bX_p4ICNht>iA{*7k@%LmRg<1w2jLUu+kI)QooXYt#=~ z##3+o4PERThW)=1L2_#ww#SHmLG^Zf`#D#?4qREShD=bhG`U1_~2t7U;Q8MB~LOgNHX}5xq zaMO@R&}Y;F6;3g9Nze@gEeHv1`1DZvH$Bq=?SvG($sE+P*t=7xg}I`(v+*Cg!Ir;< z0yrtHBM^^a+Q6+_T$9;aPKX9V)T3Te0Uf^=w2kFuI0 z^H@?joe@Z(wA2bJ%KPl)7Z)&XK}j)#z{+^)U6~0C2YO#K(AH@V4}$!9U3^!N%KP4! z1g~K!)x1l)5;rx~QBU6sfgaT+(hcUIm7Wd-K-=4OT?jNdkR=@gN+??UyMm)GVb!rc zvGObB5D+w}a#JYFVCA4i6Y5)TS(@|>n?djLLED>q&fXQ>O4Qu4^nq_!eq6T+!-X3S zXqnHR54Iz(lOhYQd{+az*?(rBE7@_X*%-ki->~dmU%UF05n-JUp5!B<;m0H2uoBaW z?=fhx&z`0ownx5UMf5sPV+`6A)CYtBxZ{R7wzxyw|=qg1Y(&Gs{_d8mDl1 zWf}&m?^kGgHy@BN%*qTH?E96I5h<7BA%q;6)64E^IZDcijK_&{bX7o3p0nXE@EqPQ z(mPA&?4>kBRs~GCxiuzGgZ8@QFZ&`+uBrk~6X=aYUkFwE1*0!zjBb_DlqT?O&ifu- zrt?K~_Lg1YJNU}OVRonqCSd)?4n$g|fpG)L@&!;|^QwMu8vX@3P#=ZF8n<5&ADO02U zz1G`i^#e0{i6#(@rYXbKYP9s1gm|~S55|hSKobb$TMZ2#jdf{GD;makk-wq7L=y;0 z_AF5KMsjFf`eR*}pN;6M03XRV&N}OwhmK6gssxj;t_nuPchiYj_hm%7XeYl^AJ-}y z%b}}+u@<`rF$e%~+u%IP$zwPP1vb=GRe(@wfLd~YvWTQ8qfz+1fW}gL7F9uFNu-GQ z)U-6b9p&UOA&e2P&R6M#ij*s=!=}A-P0QQSTmZ+aIrRsZPjCUrh)`6IM_7_!T2K+n z$zg56_lk5eBWmqv-!_ z+ZaPkgfN=tef=f;tm=GeO@%LrzuIY3K)2yumszFI#YZB7=7p0c))OG@E+VyA4wV$(%hk&_{X^Cp7H1` zy}wiv6<{jR`?P@lI#@of5>WW#&X>?wLN#I4v=nP{?rY1fhRxXESrrX=3_}t^=dOU! z;FnTOm@7BCuqlOdC>+M>i-+LtKVfvwz1Nd6#YLe4SS{0UOfZB0x{>=YNg?^ki)tso zXA8|eO3|^<&q#{%o00^UYNaRL*fM+{OOWh)9o_D6Sw#iF>hGo$%JDDajyv%vNaqhO ze^$SMAd*HS>*Xe}aLdjINgt^en-RsMdLA^!Cro>R)D zQihMcEvMzdw-|J5pgp3*>-$Ygc#`75!(@bH#y@OZ3_JdpRjq;eF90&q94tml9z5J@ zWa<1aSjRNSN|bus=|Jf&oEDvtt2COgi*!@Bf1fn5_L2t= zbB6IM#@+?C6BQ}|B+#ecz>Mm=K|c;HPN@Q*vmgNF)a{?dsW zq>vT^e?9SKhsgqul{|PDS#KAqj+eiksMrR>jL9}#z8{`f1)?*O@`pY(*g(+9HQ_Fvp?n8|)3p8+2MPcI<|Z z`VKN37#G;sTZWVVGL#?>ubOev(6!Faa{fi#4wk~iLV&w5qjz_kC!X1WJsouP&fNEb zvIdhJ2v*-|sOoIzFzB}m4KJ79NkoN!10M)ZJTtD0BacS6dJ%)y=g;bqv!4$HrOvrG zA{l}@z9IFB@{Jxutbl_3Jdw^wHSU6G;-SYEuyK3IuSfxI!SDrD_*3YdgO}cl0KRKj zZ$4JpwO=L5k(8|{kRY%LI8`232r$9{IhjE?V~c19qy)I|W_(BC`zsV$I<-77T^ ztR~Uq&qp%MXR+H`T4f8h-Fae0nRvtoD6y z0561=rUcCZl+O_I$Q$YRc3Sdp6?3~CYcimkFwMcM@M$)><^4T~tdD#r$9UBJRT#~< zSez9z0wD>~56@dV`59Cq5C2W93A28A?Ts2KNM=~EH$7dqPDs}i?240z>n4AD_BK_u zXYe1%fq`AO{GGW2zDs2^x#?rIb2A}b=G=hPNdUo^@>gzKxDeR|sG9uqc+zr>@BYJk zMQC)Nog*YBU%$F0e83KhA<_9Adz2($^6;F#2-@*H`PDVy%Xj#5?|;)KkwFuqfoM9` zpxNOAyE%d9s+Cw1?#`1XSxvzCiR9Dc+=+R;v#ZVOhlmXeYr+V-JsG~@&zS05UdRM@ zL?d_PUe5tL$^@IQ38T^Un{G@n;Yf97%G8u5;Un$lSkKCXM$UybVRyT*WVPOyV1@(F zasm1iJ&4A@44Uch)r!&Z(kF&s-Ku-jBf~qX0Zw?#iP4@-5bfb)VNJLaAn1N0nhp5T zcEn$1$x>o;uFf7Q#--74gz3ZkzlCl4>)!wHOp^?rLs2xjI(yt`I(l@tBfwDsk4+)4 z=SbI-(0sj&hR@m*P&HUs6LvUh6sLSsH^cE6Ws8!fU$@KA~`{lSdJ zmu|_RE(ra7rMyd7_AiooOL;I$CP&=VK`TMgTHzI9QGI`uCKIL6aFTAfhn5MD2xfic$KHz z#@Q@*@HF9X!WY<*sG(X(7-sTtgD_OeSzbmzjpe7jfKX+8jNrl3m*%j&OadOfJ?pVB zqw$mv`Stp#5?I9*m z`LoA5<<5LfxM9uEcShih2TvQ_9J&%)46~jeUlZ;b7ijz2ZTrtq9z3lO05|=i$QFa( z!BgbnF$g?NQA$g20Uz?A&JQ06GjgMSGC>{=pls7Mrj3R{C*NYQ{v&wsqS4V}p&wzQ zVd$ltz=3nEe1BMR)_}a0w9fJKl1hMrL%( zO-T&=4B1!Bvropz!=KI{-v5s2VkfhL#5F==pmkeh!Dv!6EhvP(*#JG#`T|H6SPZPo zjF01UwQg8tnrzH0?BW8QK&| zC*Bz;wGi;Zw-|ytdbN#p;KO^NA5qF^$iiYYamN)WN45Gz608Hb;Cd`$Gkbi+!p4!n#m^3^y_J&jX> z$TFKE;RE_Dk0OY7D91J^w#$yo!pJS$h8G-=lq|_Xc|5`Yceuc{G-*!T`1u! zZQ5es3jt2hY8rQY6}}JNP>BGD#`V8*Y<)Z%%xEJYKmrbC zo)Fa8bJFM&s|v=-rWsQ&CS!5CL8q;7h;#Sv$ zPrEmg)o&|C1I`xcb4VH8o3_1ii{Y`pCftMg+57j{94KFB4>ca5(UjlNhOHm|N87cm zIIbkolt56@Ui;n%+Wrc!XC)e^FkYE~f$sVWF}wMI94@mm!wBs9%27tT+HoR@nCtq|C_EqE}$|SFyTS2-KOoSyYT73 z=xQ3!=$RHx3iQV}V8X<&#`1IX zV@WNzVS-F?^ona|l|O2IZr!&56Ly4Ex$pzCOD(v$gw$v7=WA#FsLh3p=2*l7`I9*1 z>6{%O*p$Q1IFZJN%QZTr1i&IXA>QF%x@I)H#*q&pKSM<(2NCM_)UA{(4WU$$hYyO_ zS|0~7h@cpL=SJ)H)EzBt2rS}0A`c(*8cQ6R6yd8{RWU*eC@5uwSZg(JA*vD>?!FT2R_!%Mtvf2*-_n*KN88?w2X7SqY<6w1ED0 z*xF$PqwR#{e45VQ))6@w45c?o9_}>lz9y(M@d~mP$Vc)QU30i*)e(i#h=&`gzY_OA zsqfKq+JVtu(IgjWz7~TQ=5?{rKxvx1nj$+)bl3Qh;(+;-=OL6z@^DO=$w7OtXMop* zu9Or9%pWh+R6BPO;ufe9QjM1N;iD@hjm|Dr1M2{4W}A%|n4G#!;)eP&5(g}>6%m?Z zF-%xxw3r0YwfZ2%0SjzJ1i7L}O;~1n-LnsVFS?ON7g#2zZr3lVCLFO2X#TCSq65@V zcolprqRyZ|vZCcA2tl+)&ps;4fgpsBK@0T5E<>yvHdPr$*OM3s-tZ2h=Uv%@UMlur zGK{8kWpTFVNtL;i>yQ^wupP~24AdI!7BJc))On%v&&3wl=89(pYGBFgv(J(7$Os!h$ zAXZ$y>bgF4^$>J&k9Etg`!;3;jaG?aOK0z!Fxt!P+2TgGtI>T1kuVzlCY+qK0kiii z1Gyk87}~K8s->DFAawRdujvg=zSdZ%uROf#4&wS!1*NF#)bxG(3-=eVK!yXsHAOn! zI&_+EN_WPef>PARzy_U@ujgzO13_{3wCV@$&s4D16EH7q7(tPX1b-^4(0^&sJz1=d0PLv1LW<`ZcWCm;?4iN#Bfy$fh3uBM*4^-Y8Rj8`rGTfdpnt%Oe-$ghbF5ira z*s%+s7`%|x7zzntv_@wSw^LUqe>X8Zc3lA2wi-=*epqA|(b+pt))uE6Q4FoJz+8>? zM_BmFJzr;!27)#^ zZ4NwXb^^tqO^X7!T~cJuBm>%4ePlls3%hxfUpfNt@RXlGeua;1w{sA%ZM1_KpDoy1YJzq5+&- z=?Q3UjhSv)> zdh#prC5$E%gJ@dLSTGD}!viN6!osVVk&mo|7S8krga7~_07*naR6`X|47e4rrWT&Y z>Qs%TMK0u!+reU(8T76w>U04J=#OA@W6vLH`zU*)3=KC#G`cCk-52U~0SIstZUs!q zaGDynB0}qz!-T_TZSHiflKTa|VDLt><3L`R3a7bWS!7z!$>|L(`C1Htv_xzW^+yyt zqyMZ}B_|%dSr|=nqnWQd>=&TX1Hgn^KS7<_N#W$Q7i~ofSR?53;ZCpj_zO1x(m*Z0 zh&pKUud!sX7ezG^npYP=#b$)8fqqQ$N;hoH=pI1$^|jkT!7;uvy3%!Xf@|>0_`F|F zIqvM+UlUwrKGGUEC+ea|m@vp1q=Le>!s~&jF^9JT=L?jH{~1*p(C^W4dxf}NKgLp` zh$8YJWL;guzyxJ+BG8Y}A~rS}6$17JiYU^|IXn+T82L^-o-}DFhAI?LuVBItK9uYt zY9d;4+$8tMgGKJ1)xFz8LiOS zlX>0GNpNSsMQzEipcwA#z{cd@q_YQF43&y5#}V9m!aj(J(BR3N3~%BlVi6p%^|nq>&xlUqKHTPL;*Tgq~>xO`tdW>n`6vK0Rm0zKJf&@OP)H zx9@mqGW+*g&;&{pLmH%Vczk+L2=L8k?El?$n+$vY8r{F>#rFp|n}}jaD=@o9O*di9 za5ED1qeL;lN2Re^WHjJF(+W(YubKYKDZQ;|TKb>KM=^x0>?0rg+mP;N17&e?V-;i# zg3jIy{*sSkphdq0c)d1g0+YuyC<_+r?3F<=n3lMLenlt-?EfW8BG(IZ7w_Vc#DD;z=vB2pw{`YPa65|Cy%-RnHu^--B!()n@48nS zy+an27!W|W0&V+qvAFT>b@tp>lkHYY0LVtXTtK;3V{{04xN+A4ilMS4)Mz#U0eYju zYeb_Pzzw&F4gEh&k)tsJjOT9!suVyqixdasfPnV26d@Un00DX;gD|GSWgMYsIGWv5 z%;>g+(V>7^M(*UT6bGzJ9O`Jd{^2(&Hy2$7Pk%p2nn0I7risae9!4wKP!=H$Xd;@x zzJRn`kke&%#)q?OXDK_bvo}hey~_htl3k0O@y_`0o25W(YAyoBK%W(L_Igccq@j2p z8(jeO6V{#%5ltYBr&SBAfryTEus@A1K)gK!6vM0jU!5Vb#18Op{S{ll$sM8?;{IRY z!BcqVebZ=@&EZ1LJrDm z{JUL{UVUve{n}E5+mKR2_BAO;ud+$nmTp*Q3iL*PM<@s%y(aetoxPXhfF40|&EFM% zI=h8Sn!>|_^y;4)ZGTqfjAmUHC5l0S!Zvloh9VoR;Q=>nl__=h>g7+w0aq`*7ce?> zT>KRp`g`>AiXeEm*1R^_?2p;HVUNq_`cd5sAw`K|V1f{vx?!?1{!o>~p;^AZRk`2S zxlDiAP&5oYc+BWpM~@$Hs{T!Lqu&ZNxIQOzV6^AKW0}6SdIdX!TmY++7t-0g88HxC zU(r=8Md+?Jo%0q?qB6c!C3N=AVjxI@%NO=~?%L)^ZNA4w=SQacp|i)0_I-H-MRgha z2|Twpm-?^K*&|BPQGlZAMOllSqW<0;jNau?&oHB}&uiE-23E=oh@EAB&%E(Fd!Iu+ zb6}_Z-H3VVzpty&x>kT4vA-vvvc_gm&rI-`^DMYP*SoM1ux^jo-}BFwMi9-%VkEoGFzp4|em^hXXk8jZ@Q|CO&fY|YXYP$7@ZgDg>Hg4Y zAN+>>z4h5r9MI(JEYV~5+U;YCr=|~Tz-ZFh<3`u=a-%Mx_y+6aq%dWS_DlWSh#?FL z>|^6YUN+f&P`(3(Fbbv5vbgy|ltNM4FyDb&0rB}2F}gYeLl_lRj^B=x&x*AU1Khj8 zTY>Lfmbv=Zg22=lRctfrAL(6ZY?Xy@3I%p82A#?Z`&}9xu9bWQ z2T$Rdu)h5Wr4?>Qby(*7C+XFYaU8`En*2vG$=mA?iX983Ern7}X)`^($B}#QE!AjP zG7eNlBGaeJ#Jv0^f(<{7{!9hCBV5=M&SC3MR4rvd?lBi=_RJ%M(&%WzEy zr)NMhgp3Y4=Tk+CrkO^EP|D8TX8&)O0=^)fy{m&*aWyCz9*TzSHyxq`gDGwH|GJcI z;a#M&N5u%-3VhLUa3sO+@jkP z6xf~zPZ+K3=G1>gH&vYbc4+i|PBywaN~2-@aZ(mg+t=#>j5hU^<3Q8CY2Xc+;8w5( z{0TP+cLgXOHZ(f}r8oDdv~girRI_5O_C5*1!L9&H;NygWq>wK>gwbi}#Iw+1@c+~I zhzm3uo!C4+J!g&}KqmkKb~dGDNr{W|S`PH?Vg0e2b^6LOuhXaJn95cZ45YY`;5}4~ zI53(PO-Cr_RXTfdTfirFZZ!4fC5j;>tyF$)$_Wo98q!s2BCU3sb0gtSHD6jU#9?CLRO_$ z7_jfJpkL=yDMBMirA7}|{*~F8rOY|AdNwt?x9~L#gBmS&XXopjb1PwV~|qZ5FTYV8kG^fzcU>+HcU5AP#;l!1-wepMAYlhN#m zKIn#^yQsD|4Ebgl-G4}owoqMag!&Zw8J*hY$0pZ%@B}GbfJwvfxhxtQg6xtJCj3&s zXzr81oWfu?nzrx{b@u3~n}7GYMpM!B4JJYonDBFpExv5j+1pJ&JmhXNq8Lu;Y<+G; zE`EL5FS1THISM?$=*dcG{QwY90ATt+XOCzHE^x?OBT(lB%F_!>I5(`Bb@l)zTr1Xr zN&!EfaaH2E3rsloxTHFJk*Y`=}s7FRcF_87MO6MEc(+?Ri%I`^<2GN^0^Wg1Ys$iy`xMKPw1Hl zG(6< zi|Fj}A@`pFE)tC1OBOL>QRF&zIaLlKnLu+6dG`;13HRsb4C8F}))K9%9!l)XbWi%< zp!3@7J8AS}9=VM@2MBb+>CC@v+34my8tnlDG-Zt35?)5l_W@;$(ddutp7zpcCaPOP zD1XcAENP>=0^Ji5{6M3*=)SD<0FFJ!XlfS>$WGT=YM)f1y*Op`<{}*xv7UX*FdFCk zw#*zU56trydjy4v?|x6bCizKC&dk21m+JC$_F^02tZIA0yGF9d42Brl5ajs+i8%H~ z-=uW*_SL_}N;oQtE}hR%xfRh_GL#rD-kZ%gfzBSc(?`)giS+7|{r269xJC~p@-Dae zCihL1|Bm9pbB22J^7h@lnT$?!_Gb7&?rp=dsvnoy@BMEtd-!JSH{w|st%efg+T^ni zP_Zwp>XNxU82zcHXSVnm0-al`v)5!tP)wpf9hNcv2cti&e+B}iJk#bs+UNq@j@=%~ zTkpn74tRfg0!<@4)2y?%$H=$Kk@r>&%`5apwFQg{i?+QH)Eo+XDc+zR(Z<9 z6Sg3It>=Rge#BOZ1BN9)K!7pl_-pb>XmofPUk-+DTNjIB$Q$fI1|$w8X5Z^6c{tIj zkru%ytK>zaZ_3uW@Y9GlOJl_#(V&M=Qg39Qj$h|(zg-)5u)U?u#aNH|{ zzC>rQi#mJC=n`x~vC!#7Wab8{Q|?79va+fe=dj^5cBr#A6uH;ucUnPKK!bG4nQzut z6;%hBj@_7u0~X+Hj_(wWojQ;dQUUQRqZPN9RMi-C{<9B+3RHhFryBOV{rHb)S zQ|XKJ71sfIcn%onWF!VKbj_LWAhUw-dW~m?+TO=h98lit8?)Jx&*z>#HqvNktBed$ zXHOd~m!QkgPFy0ZQ3h9X0p1y)8kM<_D* z5@Ulj=`vBwyErPI89_P8KUTfdc@`L9!l<)X2*prMSEa>pXB`;i`mA}Uu@I!i0SCp0 zye%PAIamMuh(=3#{d(OytvTLL#Q|#s1e6e}?EERLsz?GJ&;+95+2 zvn1xD7`TMcFBUzd39OWw@1H$O>+J0+T^V6OKmqr0gmM2rVcc6e!Fp5TfSX~gl%l#q zF_?Jps4V8DRAUK@rZ&yGvD=L-`w*?!QH@G(HHyJh8EG|D0{)H#u;3RAW4BBmH0sJo ztx*h?Nd_$SK1AGVu7I^qW}Q9F5C(|jb{#_f(NZ6)9~=E*n-!iY=fKJclPt&$!#sF~ z>t-wOjfXJduvIN%w?58yW6|=hsuCW&+yRV-FyZjW#Rd}&!H8lA3tKqh!OOjF9>Ro2 zTh zxiWIyNhg5s^tsF*=UV8}f$7r?{HhzFy?J2lSML*<8246kZVE`+a!^OF9+oVts_ zff*1m%5u)+6(Haqco+DQ?NB$9I2Wi_93nXx>~cn^FGg=K86R-L6!BbOa(bTc2BUqg zv=hzHRh4BATm>m%G+$iKX&$^YieBtX7)>hHgDYWlyttg^!4rUhx&*=K9QSSg?}q}9 zn)u?XH4olSN-=DG35_KV45lJRbN~2F593Jf#QF&p#-AG9|5n22cyYZys;ZRK4WrIP zfx;?BGtED7r?pm~_ccK=jH%F8N0l=o>yNE6a!bc`OQ9I(seoeGrAFUu)569%XsNZ#Q5Ju^>7(9N+Gr2N3`V0his6B7 z*de~_5sdL-J3ukG|5>)m zj8Olf(KK8>lrTD82UjHLvBV2bp%@GuQ z1td4C_F*@Z&Pt=XhA)f!MNka%m>ZPc2@v1_da-g&y^H@%QlT;ttt`C{RS6UWKc?S9 z&R8EEpcqyPthe#vlKBPKLlx^!)$EHHEqS=>LtJSI^!v1KWMn3t6-HMoR(EAk3<(c+ z_$1!bVm(-KW6efXq_Z4_ZN6%%qI?vC(>&Z{G>cI7z*AN0D{ga z23?jC|F9axz`+QP2~GeAs5l*&vZImCzkY+M2s)Y<82xGAud8;kLcptn2?HR2^nQP- zn*2TuPcD1`e?oi1%L3TSYF7+KMrm{pFyU}gT0iDTBW6+{&hi>-pux_cx^{J7z9fe2!szfVrr>XLCAcDrp~pFOsuC%qSKsS` z0Y4Z`5ANZz^|t{K>R(M?pbxH7E>FuVtrY@HvD!4!y2>n?E;C4zYFlNbRbpS^u-8K( zDQ-&jc&v7Wa!z=zhofn1c__jf@=%v5krcP2dJ)9{?P4~%MWZc{kqtWGXq{FFFr|8W z7T6I&-NAL!L{QlCYwa!=VYb*xiB7=cTnB|>pgre59Ar(uIcE`BEsvpcT%r(QN%iJg zU@)4xrL`LFxcPmi(cCLIqolYo)r;dW6GRAfB_uj~*|m|#*{_5~-e~`P}xHXjS`K$VYXhQ81Av85(g|HYe2?b zkXM8R11x|5&PWFxs$=TUI(ykhbG+XtM%!lVw=jC-Ll}6eR5Y@g_Sv)baT*gTI%>1g z2&p7#&7s0*qzH;34nUyM6u*{`HRxiTBfRJ2zTde^0(7$NLoc37VaT^4!#Jdp#n*$vS(|=-xQNO3{GGvX5^1Sd{<-!~lk(4=@@O z0*JrOIL#%7e8Tho_V;W%@AT|9$OD?Qsj+4|>+C`6air;j?CwFh(cQI>(VW|z z;Y&~;C{bcWYMS4COoT@HdN#g4)mg2z&R%_BYS8Rhwc%g{fxFH=69IG$th0ASS%d!M zciCcR4R^fJ=(>Q$UOeQivxl+<=l)!m&|)~L7giTSve8ptd<}_ir?nV1lY!rXgOTeQ zSLo(T_`s;M_Zf0VG8%#g8xMC1BM6(N9ZDJ9{R&3+yB>=Ct&!oIf{~qmttIf8oDTG# zWX>24V(`)u?d(s+y?FD<3Qaj|@=$S;D29;^zKq@}5OGtfz1Zil$={7WRSAlrW?2KV zJ4X7WD)U-582CDyJEZ|lInB0fE4a>f^Pb=$ zB^r$UE3d1XTGgx8+H`e0n8ggRQkkr-uder=0TkvEDD0#^SVRvxmA+{!lsg!NaH`SmJ%lP5k<;;E%LKrZ z9~()l+0kUN#!ljVpS9cv4IASppH=!hHXv)z?&BYlrovcYK0^J}P^`OYG2F{DB9T0i z(X%)`wyYK!eaMs1#pP-eM%>>!muP-`(tF{E8*j{NH)AJRy+djlEe~Zo3ybgj3&hm_w@?uAq^lKeUiny ziFH6tO>e>P9z9x8+%N>H+x4x!5WL9n5o|y|HJ|P>qv@jawE23VatmHQyTu%((O2tT zz3k&+D1HA4X^bv9qtVX>$KzKoW-1vMXpH6C3JedM=aHYh7e@Et)EPc_NUvT)DL8Rj$hJUcw|tD*__94A#m!A)LAeqU@f<@M2v9x=RW#SK06{^Vir zl+gnk9V_Ev_h^%hocJck=SgxK#u&Al(z^ey>poBjU{d(<+Y_=TfDAmB+~P)zW)99? z_n|_-wuaGs)fFZkN_TPwMXzBr*L_MMz=aA8>EK@>)22`=dA%mOQZ{UcEye|%fAJ=- ze>eFDOij}_U1vZAb^hecbsrc__cCB~ZyPdT$?u*MOy&Lxsju+|!v^bO91H_S)J{y{ z)G(9lq3)un^a4gNYqwwDS6YmNwb}t$2W|@8#l;APQh6gray@SzvhljvdA_Q^`+acz z$b{m>aXXQHNQ$gL-wPY8n{`u$WSsQiSUaJ1;um%HKKLfu;}?EM;MHik-eCRQ>Wx>D zrAa_nvJRwh8cL@OR1Wt+zQQRzX;CNh_2lQtCXtB3F7S)&mYSQ+UNMRx+4cjC_HO`9 zY4_0&_p9O(@E0ryb%`&caJnl-F?7jY@6VM2ckpQRXnO z?tVu;IpEqYj|Nsfohwe&c{5DLA(CvXfnwlys*LW`+ATflbx#NQ3!3m}K(c*8G5j%E zc2*y})9JF8?m>`B)n$(>Z(?%P4VY0 zSH^v>ZLY@y;()G(LK|OS2LJrQXkfKd2c*Sy86bdCKqw~?PRQL>HSE@j+!cpa)4iCH zDWC%F`!MBex8^Y-cHcLhy_1ZlE>z$TiYM_;*~b+b9TS(Vpe|_!x06OUsDgYp4xz9r z&b#b_Nl`*E%s8`@1nRAk(0ar)RS^&{QaGLD&W!pmf4M1|xB#PxrOU2^VxWrwfnvzF z0tRoSB}dkf?vPL9tl>1F7(UY38{UoEjw;*is~Mf47;>Y-jI`uMMsF&j7~Ca z;u&R1x?0Jrv+d*bpXuyXA`eeX8`|i>3JQB~J~G-pZ=dra*d;MiYo|I>Y#Ll~D1gFLfb^@vyIC`{|X=Ubkm9Of|E8s&I{$gwKzN zWb19NqW09|C-xyD53c|N+N67k-2h0oP(UPnKO5{Q7bFiSPKx5Z-X(n1Ji?m3RUrV` z_LF!2vz0~@)~!5`rMu{8v?MU~1*o~RD0GH%gM@=`Rd~2NZv6+M`;{ZFryBZiNwV|- zdHBBEr^Cz#Q5YRPr4LgTqhkgHmPGZ10f7JjAOJ~3K~xuCYVlgOk}xa$cNmdU>XioxP}Nv=qVQU>7R4kjT6GWtJUFd(g2gG64Vxpeo) zj!nIjoQy2Ghn8lS@}DRXQjn72V=xvYxZIwe%T`WCtolufm`^6IoYpK@x7m8x*T$~k zj6;TLVGJ-dcQ3IrKM8LjwD*jFfG6`^%Jn3TreZ`+MwVXt>weA4!AA)So=IT^0Resa z3SQHu{!0%To-8FLo!<@#Olb_F0RiRHab8H2t<2)xAO_w%tvWq4*8~QiFwpH}4i+J~i%t zCKSW-hL?!6(JgFz+qDzbI0uYwX+~#5F>tIza&Q$sMl0GIc<^#HVP3nnXe^~#y+M#^ zcSgeB-@J7nMeyL|YQoFftsLS0vd-uXJVbO#2gOp{n_HzOGx}~Lt=*zr(aI|i9(!CA zARqwQK8KcT@nwCkCd_~U-+<8ED)H&=sCq_vBHC#7&(h2K;YAxgJtPlbgWrHj$f z6)>c-l)!XYUVV^8Pl`PJ7}nf)IPW#jHfu3JSKz4K7z*8^U0!{VMGh^#V8eP@Q*X1h z&F{#w9ghZd1>|aTsnLAl@v4lb2F-wCNQo;W2OpKu$OUS%Izi~YG#>(z4Z`28HkwFzGeE$~S1LCQ0#TD^ zT>%uUeaUV;%oJ3Cowh*@t)6Es2IvZ?c$JxcDA=tRQ-(+6;YJigI(E<%Xr1#=fdnpP z#Gg$q6hn`(BI%sVr9|&*EcEjI*P+P)0S0=QNgq2V{6+1=zQ#gtLNV;*@d=GWF}U~D zMmHMUoNFguDr`I6Pz*B|-OEp2$^WyEmZ+}4{m|Np+wyJ4(Z9r3COa3OBJeDKuXV>m zOP01rHDg&;e~RZhblczie@`Eb28NYJ58OphFu^!0?Zoyq_5Wo*n?#jx&_;_VJ-l7M zkZe_psI(JXYVFFGST%|v->qL?rEPPg{j7|BZYoIgCKSW&1EarCrQ!DY_-lOjC)r=@ zdwS9pmZj4IJWk{w2z;sFxt^gbc*?XBe>yqubhct7LosB4fZ&V;1Nl|=jM|ADW%lB% z9*sc{-d7F?@K(k|zV@C_JCSSpy^J^}HZm8W8pycdqQeVdIL!j5nw#_;D_D27cgYicxlkgTh$W`9P3)N2J4Lpm&*Lk*+JT}RMP z+$y1;1lKIi>lq-xj=~stK~rfbh6k%Zl~4?#XN+l#!qPu%aq0L6-j_yqfYqPPYlQ{p z91uXcm&#zPw2jobm}eY+Qe>JWzO|Oov@2{yF>KN3F!Ox|ZqZB?Pz-5l0}Fa=hi*qPTn}ippHLmo{Xi5$)BN)F?@4mHx?re+Vo2JFK(>`` z@u0$fvLFJU6fG`OiqeOdAM&YD!@UK?5S0A1Aq4h8@o*2X&91RCO{=Ep0t{j8i%JEf z6`ct8Bvde@OWoo_zJyJ=+c%Ok;C{jT#pZ}x5tON5XzHLCmO2!Tj(w!ezvP(ZS`6ck zpvNN;=$P|*tV2bu&QeGK2w+ZvaxDfb7~-F=h+^1UO7}Fd}XNXKk$vhKZW;@l;Vqn5xjbb>&M^=FW ze#b?FSpA`O*68BG=wFPF#xKBv`Y49^2~iA5)&LmPtk*OyLosk5Des~Ok}UNnAbcOm z=pYL?8&5kI#;0tzzI@w}i`2_Wa;GQvxc^IMo{ao;w87}HxK>Rl2H;L_x_A(!(X?Ms zP!(%HK(Y86<@IwT=d#heHy)&l<2PMP;8q$CPzS{TeAOdsF(BD~V-=0*>4~US1q>g( zagIpm42=9JbJhbc1O#-5d^G+fEe5$1!R_cyUwgYXO3nA0UsRd$Z(Llfvgl9Vuy#8u?e)@c%s%UhjAoNW#OwYI72469KGz+GS< zcXXu|PPx~CJ|GDi_+QVD@27}jI zdb}bS!<;dCpsRezYw}54Xit0WlS9^lnc9BU1^I!X1(DU{PF_?xdy9MeBA&g`3AmL{ zv-D%*QEm~m{+0-)Y>e%!*B6!u=U4vRW_+j51Z1fA_ZynI2XMc+wxV%JeT1a&4J5CjS}77&omUR9vmaTGjwkv9?CNnlH9 zS6&G_%nEjJw}wSWoxN9Oi+Y2kZjm<;+{tG89$u*sFvTAO`aqOc(^AhM4_+-ak>?Ip zuT%)w93d$>i&$M7j2Ps>qrCRC(02RuicmmM9Uv*9+_Oc{MJTcY1(FCD0%%2mO~@fB zqIU=AqPdiqVhH^ANx<-8uw4lgtxs2aFrdY7)7b+Zi~?hzaqp^L`ao=4H-1exLKzSk zgD0y$p$9IKNB z&XPeTsutfxU`o14x@g7{q9DDA#Xar=bt^r;)sG#I8G%Z z^C%seUs>HcK`9yzVlZ*-g!&75rYY`))*mAZT3db3$j1Th_1)Q&7%`;>K{tSr$1^mr z9~Tanib~0yL@-D`E9NWtfEZcbg}pkDxO1?WCsr7U*32-4X~U9%nU8@3?9Ri7r8*XIj< zQGp?<7h{N`G|ZiO2wFUJn$3sO5`SKt8F&s7|19^4T+j`pY~vfRB(}O>B;rdPnS>KyL8~kl0 zYKie<1bKL+PO2|h-wVfsH<<+W}G}xD(j5|oj;uz)e%mTJe<$P+GmO)oChzsq>#{v zXYcGAGKNm|5qY>Vq^h5(K=DS6oAVc`f4&w&{FoFpA9Q;r```iM4YW|`$)8S~KZbX( zo{ULoy;g@JJ{_x<@&K9QIyjB%8T7n2U!R9B0ytrpFY4|1$vz~@q(2q%rbSVEfd_ z`HP^gzaVnIJOq8LopOqSy44npoXxB&`wOr@eY?ME0DUkjg#e395er7HRW-o*z*K^3 zVTxh5)-%}!mPFL;R11Rg{(>7=P{$jO_%yq2PvgY#@Yu-pQw-K5nI5X+eM9o_b$eRH znB|eZ*w|l?8${jAS*qh**ltwLt<+e$egT?HGk-dMLFgI-wpQ35uYCmi%D@~h4s)2?vF2weERI{%f`+z9q*HCLy#lJURJ#qzAmsN z0_b@lAfI)Bo@uT?9wet2x_Ode)g^FzXyg-U3(?qjZ8`=I^Kpuy6BPONN|Wc6pHv*M z?(9WOF_h_3r^Z1b509W%Mo^7;1bX_A?=YQM>E()epE{jxdxkmLU}Vpme5$h-rx-l@ ztQ;P^=FC8Uh}<_ya4FLDdF#26%b~EygO^=t^--`#%*k#QA6&bX2QTy&2+uSYNE3X# zwZ)ult9ZtrgK(@s+=S^y2i8Bu~uarriq2d|A&48q7^>P4Hc)7Y>e53;(( zAHjncB}>sW?Mwki#>ftqkOwJgr;!IQeErdNVB|q%Vw1bl^Av-7P#Sph5;)-3Z*UlX zTKe~V(6P$UKdApbdE=g$y`0ep##4T*v%N>GGW4I<|FVqy%?O6DAbFS#Iw~pK!{_zC zj9rZEwZh1EN8b9=DqGY;w0iiw{+D6oR!lLZMShbZKJ6ay@ML%<>Y)K6e@D>PX)j1% zm@Nl7N|s87uqhwrtv{j4pmQcWR?AC;M%AF>6#0O{SkrO9)}OIJYLn`QsX@mq+Dab0 zlW6^U?f;KJ&n;ExnTT}&K^N$B*(ADQS?;tSBtzJ^_u{u@zppRohUw1-Wzi!CJqRO@ zJlv-;psNy~=Su+S^xo0P>9^(gg2u89owcFNVq?Ya4HZJef6Q;siC7S3T7S6vs5QaJh5%y7Ta}<2G&deRn{?6eIJngW zBQZY}pnLBQWk65M`bPqK+d-_XSRe|Z@c#>>MGQ0L~*!r`BA_MW@9aOd>BCoJQ zCAuOA-1eW?MKi@cI1r%ZW0XX60d$E8bplua2B3+D8$fHP80=rkwr=xZy(2j2zX;^v zN0ST$>`j?%tqZ)>*Wp5}0Q3@hxGmzUq7+how-4#;SqZvJ2LeivX~Z+vWDkOpJH2uv zcToxovI0{T@vrmt+3Xl{Cv^5m9nUNb1e62K&fYd-T10?0W?>+pfPcN6x%=7k8Pg&R z(c~+9p9I(&_+D1|Op|f}WRP7nz>ZC077wQwYUMM{0_Y;sB9YgtH)0?_2$(BE=Z?t3T@qj$!L6%`j1w+^;7#+>(Hmd2c{C6}ed?OWC4cv-chK7c!3dQ-1bO&9 zQT?^e!RI`^uMQm4dXV*8-gV7ZE z6D|PCdqd`g8!$ZQQ=b7wC3G$uge zs(ZIR_l7}ZxiZA%nJC~^M$4uk_W-+(15pHpZHPHmhs@F z0k#j6dj&uz4}!7fOoCpwK*)o)1iC<(c{wWxGn5v>lX2|@0X%qVR^Y-4v_!;|gmeEr2d1g%yBxy>03pjT!C2y1HFNlwkNmk$$<-S|l<00t3Uv!rwD%fuSMZCEQXkNis zN0z;nJa|{Cy(f@tLVWvK8mwwFSqLOgJED-9F+)YAZawwHX+ zbZ9U8hc`WvD^$8aU2pp*Kaf=S|6Rxp5(!yT|umGtRK_&t%o zOzMBz=dXnJBLRJg?wtLMp8VK7)a)eC8_g6$3`T@z4j8%DKA(=TVeu+R>VK7Pis5P! z@*wPSR!?4l7f#57=IvEZF}w}wv^VrPzp9HPg9N=vKr3D*;>o)@Y2-b`3{8RCCLs^X z83=fFu=}Zz(|_|_Ht2lBKr8Kwfd-vD zGafMR^O}NGyb>@gus}ap(8$B02c5l+C!~stJzfbSEBLo52$~uBe`&jZ9`|u0DiIKH zQm-pg1pySm{uD+&feTacZl&gc&3+0Yz!m9Igoh-R8~?E0PZ@IPy`4AIdZi)H)fNkR zEDp)}^X9#1{}n;Lnt(fA36HXZa+|z8QqHhrUOujyP+tm0Fe}(!%3$l0hG26XLQn;| zo&H8r9f2LsnCmk^ampEuYQh2YExcUIXnoRlzsbdOL(ots*w`Q9kLAA$bfwNzQQy-#a=>d+DJ&edjqqFn%CXhEs&VC(Eokql8 z#FTVp{*@3I+CH- ze{dUY%1`G7qqDPUCwcG|p+8lpT+_ESG9L2pfIb$*9&rIgY<>2<{%Le}Q$qw=Y^rzGm13k3>*s+p4cwY_#lrTCzl@%oi zz4#^P!CPnu(lu6)JD2yZ)WAWg&nz|s#S}xUotH>9c>&4J<A^aW7 zOff7p1drtRVjw_unk*3h?n-QyFB*cpGE()wC_5f2EX7R$(chTWeK!!G)7MBgdATWu*Q)w%AfVE*4kVkLmTzBViou`4 z-wXs)I$nlklP^p$>{V7%Wu$#P5K!q*5lKVv!{@HkXE{eNR17KNQdXdv{!TXe0vD)~ zNVpQJyNg+Y3Kg-!=r%*BIGtjU0|A=jBYK0Bj;xTSSS?g+ew)9^3b5kU&0CC4^`?QP zcwZujTFeR%716J2Ek)G)L!&9sDS*LS$_mT{Pys9bu$5TgbRdAdyUq@x7PErp1ULQ4 zF;HrpT?8Hzm$8}tG<&0SgQ&%FeQ*6DH!9M@9$2!AqT;MW$JSH@dfo3ZV3O zZ5BO=D?oCAPHjGCa~y2L06Q2h=-O_pM{^G1G(~khGWwKlw3Wj{Q<$>=Q~-VRx;5>R zY8I&D&DHJD@>Nse3#iijD#(NUMugU5b5W6pCu73VyBnTjIDIhkgaNj>2%~+#pjgun zaNQ`poV!|vs=-6uuseCUVv0QB!E@$WBls6mb&VdJywq(b-K-*&&@+p9= zr%4^8RSrgC(zO0-*c3zbZUedRU@rxjiNe~Mi=?F;6OdOt;W(`7)?k|E}$TR+iQ)EaVX@zq}Pr_)9*ST=X1M} zR{0r{rhAgI_0es-l_2+}XY>2l&LxmxBl*k0$`ejG8_MP05Jf{Txy_CH=v3|8JQgrI;lXnhj7&T$s7&B{%uapZWYUym*&B~0 zG`ccO9k2E2sXsijn_@8^;`v90(P9JJ`Wc_poCz|Lt>o;e#m)1Nq%^SY_WF(OmpTRw zycW{CJQeob#<8*HgoJ_$zOhPB2t1`@gfYEiV=HSWH zzgl>J6YL+xB5PX4 z=t1(}1qg)ScI-`41XbHIYnrds^m{P!1V&ds;r)B4hD&}u=U(WPMtA?cXkGzAp`G01 zA%ZG#ug5i&MjPz}@@=6{^XcVvh@cAG>vy@LU#H}!D6#dtUUBH&XWlUOe>MKZ<5#57 z6&z?y#WiJZ2`0SZZ$xGFxr$AofA0?f2Fl5-CJ%d2%aCUs0*LzA=1P&UH(*n62W#b&9?~SI$ql3`U6oDc8gtYNrl~3>3 zpAk9V&k^2@M%P8A7}_&USLNRULG+$im_i*V{02mW)+O-p;f(4h2X}x@XHVAhg3$qw zgdMTElomrj4{!%q9rcW;ntqh|tT4LBr0ju=mVg|^{A!CA>xa=J_r$8Tww%%I*`%|l zVb$D0^6l@H_X}jv<)#??CJ#Q%jXsGaUb|U{+@1LyjXjnarwK;WY^H@x-sS5owJ{iJ zk;Me37=Bg;P%f0hN4a0BDqCl%j?p7KOYfpF=OmTVylHB@vMl=Cl_*06;niIt&h9<` z2)|1O&Pz|UOZiu4ULLUAX+~gr% zluWUEn@!qms5BwiIfDxeLJ$ofV<;2Clj5?%w0Ea^>B$rWz4YrWMkt(ON$II>N|<8# zw6{~0^o_t5n3GAoywYhgkkQT2CPsh8eG#^<_+V)wQi=*MuaJ*%%O-Ena^jZ9ea31t z(ja5NzKL#aL7b~152qJfpB@=qpKkgohM9d6-P+R2;npyh^+xmD?jzp&jQjk*bOk6L z>N7#-U_>tZ5Kkml`C(1}W*?3TmziP+n`93ubhLkuvTmN`W_^+1&Qw(uU(-Ap11NZAhW8#GR<1yjEPWe*|aZM#Vr#u4#it(^! zhks*qbL_)FKz`v&;tNtjkdb_R)tc`30lzdRJlG>L6a7!KD?7=9_XT-)zwWl_68<kH^oMLFT3IWK27q0@r!+q8WhxPY^GDW;kkdW%m zZNL|NNglrW(I4Uv9Pv*422kMIspD^m%*ZI73l-iTpXkHnKx3*+YXt(R^EnW%GD+CIE36fUXT#Fceq6)^GaDlSh)~Hwq=((et#ToeLB1Y3`B2#}P(9vlz z#4CXxrBrwpvTEw`XXh~N4L<=`e|DOpOC`8p!rl9tD3s~aq~NXwQ~wqqc;PxwPENx} zB?S!Q+~*q|OW}eYr$Ox!g8r1yP80!y9%o=B58mBqp;A_aJX{0}dZUQ~=@nD|AiN;B zK$|k!iRQ{+w;AAwI1~mEWQ{T)g~-FBobHTu=T@r^eU(O6|EY{HdMKiuc&Q|caR&`Q2zJm1%YME-7y?A~{GvHai;eYv)ha+X?%+DjvMM z&ffGOmFcHy_mW>_=wInl{K*@Ags^ivG%VHGOQ1jA{xF@GyXS`w!pJLcvfB)4n?ohS zUdNq0RN=FWl#TUC5#hUcJe2i27o{)$8glzPeCO@b&hqkeiAxw7i_FA1iD{^0e zzx&)K2)6O)RoAAuuS_5?@l$99vdO+emd=1fyPq;Tr_}B9 zol^HLpVD32+1!zj<*GVA_5GAjn*A`gQ^9alnO=4U{UvYrY_-o`U=enClgB;}U2!!+ zPw0nE6%1Ee?zcFAkphG~VeZ!u(Q;|M>E~@SPVqN!Mw#m%k#vhl;G5Sdf7M3 zGJ|56zQ-<_gBB+@`RrNP-YtIBW#2GMt2c#r_bB*2o&PlkJ!WE>e^eGfwxb9dxV?GB z2#-Aiw*Fkzh=-F9!3qq;FMPvftGCItD>|mFKLZdoOypji*uU@%bN=hS`(>MS!l3C$ z>Zl$v2FuGe89ZndjTyPT~tb z4u9GD^HM7gddWAe_lZO3EhDc-e8EvIawLLo6wtIJ=%9igH7cOa%Io(8Uoc`9O+M#9 zBD5CR*fX*Pmmkv$_S}y2EEZa;?Pplhrab7tO};Wa^9!heyq{E(!dTx3ByCdGPircm zdd3%^n{cy)3NSR)QI=dbqzC4Gg3q4WV#%u&JSGKpmvek9RFrpr6s;T)^4^fDWVcxI z!;iXx&NS|0{7rp?p#4Re1KI#OfG?n%0-XQNG+{&kQ6H4gQNz?nfIn`{NSC{u3hlb7 z4%A(NHp9!Zd7XQ^o!sPi&3trW4Utij=s4@H;8i=B@Dhwq?w*ZV)?z@Sx(&OsDS&@=4}mSRIbza-=YGX zAAZm7?c^@2xe!!7d&jCAf5O4NBwYa{&Fr1iU_;2G-%$m9s8;B|xEM*g0vYrZy5U<$ z)BVr1$>F|~=yz~@m~`->o=@T?4CB!=33Hn^xstS*;&1;0V>+7-UL>|9Zo%^EybA{O(Zm7!e4m%Ciigl7=8BS zD&Klbai+uyk_&cHyFJ;0=D!49i4?*vnvmyiwj=O<)Io1xp3(2@L3dI+iGB92YL&0R zPE2y|^byveDIxZtl1LnZqecakvlx;Bn{~Kt8<7%XjY`7kvllBg~>CJiw2DfXjYKxR7WWb z$5uwXR_e2N(F$RTooJde)Le{+4NlL!Rl^!Sdm(ZU6Uhhp zsqyD+K_Lu}kAh<4rh~3#TyyCpQ4ROfA-~a!VT-Wa&-1RFe>cSL6KTR>#BzRX+dbIk z*ZY>1S-6&CH0NUzPyqzEP(yyBp!Ho=P;@geE%n11K6`^2?s=Al)#dyO2v$C8`!&26 zx~PK(G+~m3?Nm8mp4X?KFQMvA=*3{t!Hc9YqzTiT);-7y;+LeeOhX;8tP3_Aw${NL zm}Y@A;WhGloCrhPH}&Is$iI$g$#D+a6|)#BrGuBY{&VkJ95fe~Vd~hS zalBhi4L}F)P~G1uO%q<@_;4(PdI37`#>`O1O@3rysbt7s4uI!rH4{n^-?ze#$ae)t zmjvDKlZ<4jp*XoH8;})#MCNoH^xYa%#v3cOH~0u|RBDfFuoxO8?HD^!Isda>)42EO zv!{aYi)+>CjkaM>7lIxTtXxGDP%0I;V+|Gq1@k|3w?^(~ax&sViTg_8F<)G(*1TLX zXoo@5>v^?eg|B*ovkr@amaDoDMA$8Vk`XIR$7yp^ok1u)KB5edx)2O|RQ>s>V$BCr z(9&mbfyH3+24v9f4TJ7S%j4sTj|nH7$|0JK-8^hs)1Znw@a;NGM%u6gFNWrc-?Rpo z7-liRCU4C?j6aEQK(MES)*>6h2cmxBHw7Kogb*;jbayM47I6{5swX2YcmZW28P4Fd z$3gG4v{&^ytP?a$Mp#$c$p!OsE(ge8;2(N!9buEdticzVk}mNjacFs}ln;ix;U>SZSW#(#O~)Vzs70uyb_m#K20f|)m-_lds43TM=4lR0MtJTrs#Ts>tD(;x zIRso4zi0}&UPH6_s&#`2YPnM~ffkO3J2+%9OkaOXL6;sMQKDaIr_)KUWCCq0hK7m} z{Q7RJ%jJV;ayI-|gK@TrOrW8H+C&zER!IbFwW}@ayI13!_NrI8uGO+PxneO?-o+#! z@|MxpWs9)e13xHH$2PQj)5)||Dv6QT7-Zf$8Q1kq!ft8EFpSzEz~WHWu>3!K{n+Yz zSe({{y;YNu1&07^_1YZG^T<#~ad5uj5qik)t9W)!T@799B{(@aK3vx2QWL>z@b&Mg z1sX1Zg~vXtz})ZvMScA#2{_P0u1_lj&Chs4iH;gs49@4(eauk* zRU0J8RUSSR14{dKo-$z2y@xZ9s)w8sN;A|qN50PxLHiG@q4IwHO(BRhA%JzbLe3ee zSqwEx+8p3C_2nK*@i!e2jMF0_fcH+`)hr0n@%Zy3SNSmi9@2}}?rLy@plc6@z?6pH zvk`6Y6$b4OkD%u@CkI+h!8Hxq8Z-xh-Nt*p=c|#L@!bdEsB}o@e+70$Ud_p1M0aH2 z%jXBrQPM`}@GJ#QK6|#g{vEl^Kf!S_y)XhxKY#hiyW71qw8Meh| zU>8{oXW29QDQNL}GC{~LE?42Gw8#JQr(G-L_u7IcA(}n%OT!eo*gYZhYN=H^cuPT# z3^Xkdnl62N40(;Dha*ECHK?r1d1r^h4c%@b2a(7{VBxFS|; zze>=F(dcwei=a;-e=Hz%@RovRplLZxI9is%o2HB?f<6K?=tqC9;!wu_&UN3doV?m; z%Tnq~-$xNN?ITkhS8U~uG0^c-918Z7J zkzhZ=oBwVI`s21s1r6iRjX(YCW~)WEqF7{?=CjBMar3tZa!zyzK&6!}8jdjXzFfDy zj?MUEx>t}2qQw#_gt;JtW;N@&T-(r}-h&?>x12@!3vueRGw%Qmsk5?`pkXIi`rjVs zNm>2^oO;8fD}c%I71;{9UL#9H%j2ZvkHo1r+Hjd|FoqSl7c}ya7tx&wAS)=&zDk)KYxv%5 zn{}h00s2F)tay_*vCgUYYFN_maZg=skH7oGAoX6JZKj}!11kn+WOk#pK#km9`tyg> zAhj<(nTQ+F`aQyKiSR9g_H8JE7y-WT`jo!Pmq}npk5RDOz19M~7u0G1{h1PFzkW{P6 zYKVMlgH4@op-7OcEN}(Y>7dPdJwZNo@GNKY+3P*hZaf<`E1K}e4&X|VPg^*OY@{D8 z>9(W=T5asIZ-9JiDM_^lmD~)EcJEg_p|%&T1**Il+%v_965CRs#Lk~W`5JdKi=l$9 zpn(Rxd8QaqLHl6@n(!()1qfy6LYH`~ViQ>BAWv_Lll7MK~uNFDzf1YM!e9`|*d74Bk_0z0{@uJfwm zHsT8~XhMrWf{qv7p}1IG>I&K;s+e3t*6xY;f&h7)Mj?-%ajKx)Wra!el0!f}R4UVF zPP-6a@R6||LDQ~WA+Im!1|K!Hp2ha_-cGCC>hWhJpsn8*YbCgd5y!5eTL?Py?Et>u z7>yAhKO;?Di264!rqm}kB4fm{E9m`#Lx81t*FJm1Lz$i|caVuR7bW_!E11@FDz^W8 zUU%AOkK}!i({Ct^=1kgsT#WpV+ir?D4f<^P6+L*HIbugRP*AIFW<^_+^;+l(C}`6p zASj=`Df|s-{zy^Ai)}JO$185T_p~d(iXjuHPTgVeA3Y*9dqaak?|>WmR57y0viO*E z1vq%m#Hr6-3_BV0f{KZ;^OY)hOb8ftR{$$77pET8#~!~vZ4@F&A-E&r@XG!$A>gdL z0&s5LWLCw|XAdvtNex-NY2M_+3PDrB{jEa);ncG>W`{m||F7+8S{yfmXiFd%>8?wT z0YOH;!t6081uUVRlakY9e}!1cPw24ZWR@6g|H`PUOq}7YH*w|PjW^c9bh{--Mb0_d?qzlLSISE1V;pot_C|f-8wjlvXrKo zbm<)(&a-I;+Ix1T9CoCM)j-xDsQ)#Zd)*D#^=RZR3{L1JmU>yi4ohjJMq{b}zMS%G z5ccBRN3Gr6ciaLxQ)(=g{a^b#Ms8httO`c<5_C}i(`4m=&l&J1NcgjeJRb7h{EBwb6L(f`bvv3UXW%80ndCwTSr_bAMH3 z#04WFD^N>8{lLiGOSiB|Lv^vYV(gZT{mCQ*?HT#%1HFo1KJ==c=Nyd8KIq(}AYR;P z2$mfmVLatW9r*(IlFMUy+`|)*MGMeH*RVR?2nR;F^St`z-@PT>5FZ4ZV^ev`<9D9( z2o3Dvj!2UZm@~SSqI;Nqc@j6h>W>%E3`syY96JXqMMvK>yXIw10eX4v4bVU9a=YOm zSBkbM=|}vG=spd-hSneZxxO_mL*2Wkc%^7~%EM37fHqI^FjmFZ+gp?m4LwN4vd5~t6 zEk%tb?Y&Mvy4T4sh%hCUT?lIx=@Gc%S zNij?da_^`OT826kMBd!ekxmP^6DyX7=NCQb7Z4?*c>5S{F1cH2gS*quJJ`crXeuMl zP)giPo~O~-WAc!dyVFg9eHz`xzJR971-JgB&{*QfG?UzT0m>NKsF(*?CIHPkd(q~? zk10A}5Pp$2{nw+a<8ghZz4){-3Fz_#8HD6Ykth4C>3CePS+NTsUSo*^>1+@T!XmR`0uyS{01&1~n^}hgY&Arg0z3ulRWh z2|SEzk$=P@gW^YQA2v@=BfmY zvO{2~(^BG5wjYnWd%g9yi0~fnlircMpt|aZzfgUir z-C{k3^gFc!J)ynC-|Ne3SaPzx=oJX%=5pI412NPgG7l6D8FV7;#PdGrh~Vi+b&@Jq|#1&f?k0^cS7fM+g8m&#D`92PtNzH(oTdrStmi$Z0IHlDoXwjvcMJ2 z_eIyBGFKT9JXsw5;k(FgF`w#hh%I`lv*(@)qb;g&Hdh%DN}4!D!!Nl|Tx5gkh0ghC z@Mop1tLn_X;};q40)W(id1^VKk^gG7t0US$W=-C?TVfvjCzf#At*QUwPiDdT+2fnu znPY|dJODkDy3Ps{?_8&st+ z5onwwr$U+^o^Z?KhbJ-TuO?=J>jATZ8F&ubzknu8(vmdN=5gO%j+>aE{MEqhCOXq0 z>n9$x5umBk^#_pV+(wKa+YfKt_>N{r4kQ4*O9L9m-)myJVQHY+!lQl`q_A3grj-y7 z?LJl(!|a15R+L;5XwDn#r$X*Uy`wsEuxzW3b|04Ktr2u4>KW5dGlnPkqJ+seyBbtd zQnDCGvJ^m5105vAYuf3#%~Q4Dnds6EHiY#;XYcV~gljIZ7LT0~>OAzTmyiFbtR}LP zSwUrm&Yt34uLO(1`oYc$y2i<LSC?6+^AK^XcpP-kT9S8J zKY6c>`&#f*pZGg?7L5bi$-mgcEhbyv^!#?`zLWa% z(1=Z@#jx`Z3Z?IE=LnSFB=L>?=e>pEj8Z8E1P1k`FIO{-j zFmi80Sh4EtMMon+g^9^{J0&3isJTJv&+`|MCYkz0cc^J|uJ8X3#^`73+k<&O^{4e8 zGf37MWo1NEO>;-Q`w&6^6j z;9?X5TT*B5s>Of`0Y$v~;5S{$FJE0Q7exalU;djnQ@4)ed2=C@k5rdSEa-~B{lB&N YKiPIxm|LrR+yDRo07*qoM6N<$f{2RkWSd68#~(^a8r+)t=CYGo%={KW*Mmi0%xai|rp!1w|2=$*2ium~gCc|@zb?X{{b%$_nI5nV~^TfYRK(EIHLG7!!RQ&_+hTo0FN0o^H_@D|QawGCJn{ zcMEik+nu}!ox&NhJu~MROis8|?ffF*^8`XONizN$ppOY{gBM36jDGp;>)RlqQ3#kI zZcB~Zaz+P6Hw-t~I%7oQk4JQEgB0ek(fT~Gg%`vcMYS9>WowXZCWtHLjMn1JxLY)* zd9KiJ^^k$~H)wej;f($uq6b7LAyCR0ZQg0^gE(%qcasn(XZ0qd z?L(0B-c7cS=rIEwa|bFtCglA02HkX14qC$^WhRF9ZbI)Hmw`TZ>bveLZEl3KWwws! zkb$01*adDIz}`*h+BkSs%dNrBVK68)CwcHNn8Z;5bj7@CM2AO|n&La&U!!|KGtc9z z@Pu3LjTCbl3W4=otj+d;nSG~PK=)iOqea*Q`p_b}=4v9RinC_a&t62&uYUyeh-juJ z(l4Dlql@RsI(b_TM~DtsK-J7v)1O9iC`KzrvjT_q^c|tU-!5GAr{DqIk0|{oUYfuv zY@jwfv>k^IU?cS3K%mrYC~h63_*aA;HwBgMD@1pw&tt$~7NI`R-m%9md}=2Ktr8k$ zWcDn?JRAu9ErWLI)gEmGhz~{IN{cW>hdAi_dV9`EmOq6K(S?)I5FL^lTo1(~3f!kK zo?v8Tw6_o))X_0DQL=0vF6azl(jq!^;K~f^qV;cRBLLcTviA2%TN?Be*4(QxXGG)h zkd2OOXopK>JYA)sFFtoB*5jX&&8MEBN{WP{yc zR`yQZPk`PLI=-ZgR{vS5L9-%E;@>57vW29;9n<=s6Z(L0V_1n(@Brl%x|h*^SPD&B ztUPvsQuY5rCp9?N+G{b8(7W7AX zq3<~3&@Rzs)mf(erA`YO>g~W(B0u)%JzzoHOj&3&4w+Jfe2FVGW=#Q&QZa!;uBaFmj+1^4UJ52Q zneK)`r*un>lkVka>6PhT)`H`DHG5GN%jhf9y%xNt1)6vADNFTO>&R~L3Yu+3fa%_b zOtgcF(nE1Hf1j)dz1-iJae#gd4?PJQ>AU_EhAgxu^rthj7&AOlJIbAcG{mMuv~_YR z;#Hl29uoRnK*x#7C`C#ct!eM3o_EDMb_sn{8JhrRFN(PWY=pv#Dli7%40MAF!UPBC zdoxrSXn(!&Hq$ktCoIVAXeIQ7r4f4?A?;n;20(lJ1N>pfjH17wow#?c4v&B?ORN_L zW;Z@3v}|!(YNxw$2k3?sCit*6qhYp-Q3U3t+`%erm+_-nN3ve0F&jo=i9K(CCL$u9jN%hmcV9ujKt zX}v;I?R5^i;u>bSjQ<@Rp)q1|KIWx~W8_|36oZ!3peK_s11+B}iQxgOE0@sBrnvNn zG8$%$YD)|zsH;9Q1yphb_OIoJ*`2C>0CYo=?T_2x_0k_|WOSv#0gUL5)F6+BPD|U% zjs3nD2<;HPebn#LdTKw2TG3$M(><-3Z zhq{V{=GxaimF)*=m^Dn0ZKfNc$)Q^+vrca@KGX~vB}UO7Newp7{kHh(V2PeW5_aMu zES@Krz4$QDR9e#obG$_K08f38jl)zX7>cs1rh7n>_7np4hvd8$(J&6i;wY|$WP=gr zXc2vqlanE|t?*ULc3e#%4sufSNN6cJ#o5COq(U`V>ea0bo_37x)Wk6|TH{k&La(QI zn267vqSjL(<-M2~3lzi6BRRX<&+~c0F+M7>nPjGf)=x6}g_6^ePPw#9EWz2Ux*YrU zC4^<(Q-L!M{|V^nf_B>l`I`&+gx|mUj&A~mGM|H1E!t{3ME}ARH;i8v7gLYWW#{0(6zo_cFTpd5Kg9UaPV+zI0dVBJpy9)7)=4eDi3}Vji*)ZLr z8%8003?CA@7fO*=;c{Q$h$&(FK_dDEg}{-r^~8nOg|l07t<|Dy5v>M{_XQ(it6@@#ksRLqT*(50N>6Pi8wAAjf+a?3GctvA8MF;-me}j4Ns(UORWSw(V2AZV*RUcN&2~m~-S~&TSXYWdz zvbA`2U56nHjft$R#)KAgLI^KzQ5x}1Ni&fUkaL3ls{0E2278hRjrSD>);0bbv+xZK0i4&Z0hThAL zu6FI<7ijZ7=VhI|!xmQn;Q(h>NyklfL~GHcT?he0Vg*bZoe>%V+aIW z$Z&zP$4(1>v&Jq{YLq9B*SeiYf7KPhqy{TyQ(VyRK-k{kwAATL|L}v+qbKvHDi7o~?5g*ju z%~`^YZSb@d0!}WsPRauMvsWkDd28b~EwZ)E@X0Rd|B-g~N^;{y90x_)P~Eu(&V0ev z@ZLZdPC$u|Vm-oybV*)PrC`H-1iy#_$_fJTkNs*%J?6cre$<#ea!oKn?akYNTA@oV zuGZtrfLCp^fIf0v7#3(RsvnKRWT|=$(V*ker?4k7ptNwp;g<`>RWM%-+^0%t9g=bd zTggM#D?m5<7xE6*y|d9loaC$!Fk+`f1q44#cvsJ3trv(*s!m zoqi1HyNr2$!JLgbprZt-6k50?lHpNp3o;*lN{&Lx7{WhjNU3( z02gR0U-j0nzy)FT0sbGgtV!k`(4^h4ooH%L1zAc)_vQv|xz(D`qV(lK-E)eRaTX1A zk|}88Z%qY`iI1AcHpoI@6lh*Jyg~2(d<^*i9RdNU9TDU+T+wkB zK=>0fnpV+X8=Bn2(7J=H7NQT8tbn;04Hp(ml;;;{=z!>>+&f|_hau5Dglr#}@O(tK z@Ttlrp?)E{le1)B@v;U-L6Z==&Z2v{kB0AQk$S4chwy93%dmLSw;`EM!o=T$rr?K^)J~?AYc>FPDGD$ z$=91eKpK@x^A0Z@-mKOyK_`seC0g#lHlq{9?lKSvGZzyeje)8~H1}eR+OF0;DQCNP z8oX#@G$>D(OEg%ftNjbY)@2{f zi0+Fe)hD4-7ANYvN9Z;Q4K4lT#c7F_zANMAtA0pAV;}&-k*Rq0Gde*TUjzbBJHCJM z`4TNB2hX$jxIxWge+(1asDvIW^J*Ppw46&qs5ubGUV?`C{)_NBF^S_|f`<9tq@fc$ zk#isbld^EDm>&}NpTisoU@f7r%|Ub+4x9z>vT^b1R(OiATEhy$S^&Enbe)7gO6y($ zd$T3_qqwZjZblMxrO`?Q`(!+Y7J##pesWH=%usBgIA*N5GqEO>|`~RTP{u$qqZ_&*Q&@P~x=)3u4SarQiD$Dn%*1b)ONwPgZK zj9>um88PsTXgjyD=$Oq}KpSZ1@#LAT?K$u3&7P9WJ%xu=Rxr-&8wTyvA2+LYCol13 z)q@j3F^!@6n?NAN3egOR{{67K$8Fp#TDC$|A;p`02m43#+8f_)0|9x7KV^s>(E4j* z?|j$>0&+FuN&TUOugUGBRb)vOQ@r;u@r>y3&=1B%NAC?W2C#^V1>|a z70@KV#yXj4Pk}&>E$I^6j;gO$=vX#8_vkjs$ghy%c2rxmk400#0(ekV`7gU2{Q?~x zdc3#Wjb9-l?RY^iG#b#O*(3-JkNFF%5M$tYUWvx#RHqsh7$#pBFqMM`mV)oGaXqpqX#94?oYF1%e4cM(28hV!D&e2vkvG_ zqQpG)7*~UgR?t9p{6Ye{mEDftr;qO-qcOh$<5Q;?DgTm!_EhN5Kq(5>tqA_o)WoR> zGiSk|dn`G-qZF@`Z}kUK_j+c)KLJ{$qdmkMime02v3s1AT_dL*$6vIFcFfrAw&;X| zpR7U?S>>2Z2kS%}K+bgPIK>m;?!|7+JVtnfNf7Lw~EEzHG>2E`u}&^E!l?dIOc z7!9&d(V{FQwBM+J4?}RqCsAM zEzhg@o-53P5{6~=n5_^yg5vZJ&aF_Wzj=S3M=K*uF!Og+8E zb7*8M#CgshgGPFZhUru&0_X%QM6*?P$FQW@jal_)Y$s{{4)q-jy5FL^XdDx6Uq4`f zO|nAtTy(z99vj6xMg8bMU;m>s8v5Vvj|P+xNHi`ozaIr^Go#UEu|Jtqek~dwbH-4j z(ZK19fe4RTQ(tYA-7^2z{@%=}0?{7hQf9NS*UE0GA2@UtJ`Ae|s{EItuep{`e-0** zSWd*?+Gz8BQ#PC+8rLJ*Eo7^Wn%0I7*=AVVEB9h0(YV$Ri0&h3kRlzK3K$FERy3}2 za8$mHd{!AI%m~dLS+rGlM|2pLr&#^1UZBIzD;ez&oneQ+=!*oy$hm6i=K=i-qe*sX zK=??qkd4Mh)1SZ2R*2u7NSN6}4?)?jNfzpuV&}$#YEAP!vupO=Z_qyH(jh)fVrST0 zaHm3GmCs4RJazVrWw~mrM^Hg5_Wa+EHQoetSwI4j(6P~0C=+^zJ;RYjndK^KA#}wW zdS}2?5Np^mTOk?>G{u;w@UW0Lj7XZujI6Q2mjesnh)(If@fpyW-`(Nn7mZD)UPCmP zpk8+{B|ml8@-VVS(P5>FLL|A{POJYD(AZ+o#R3zk111aL_z>l7Ul*Q3_B6NpjduLR ztEZN9VmOt95;>wh9{15le})eR(c-o*>oe?QM`$J`*ELi&Ebq-cRgE@yBo>DT3t-+R z)DTwK&=xmPmaz$tPmkvNpIBw!dSlsFNT*NjJ=z3x9nkEyC43M0xUsxTLB9nw7|t5m zWRZXK7eaR&xdbxbRjaUlv7SXu%4IRV`jh-MrJKYp#qY3!oWeBM8|NyiYA2cgUeNp~GmLUb=WF@A!+;DjM7y zVb_Z^SqmqvDlcC4xLv4M(cs?iuKzq3Jj4}UPmG~c!(>9y;Le|r(L5AEJfEH&b%v1C z7~Lj_LQ|&@gHunqNw&j7Shy0=#TNa6Qz~-%0(9o#%u*~pszr%8rA5&-4$>R+Il-@R zeUlO#t8SO*G6AjS(_)It0^KIcuVzLwp=;qgIt~@lMH(6`fR-5rgvOH!Od49WLNsth z=K?KGuV$97xrAB1MO%4^H`jJ20nJ$e&1H+0OHr=vPQX;a2~NMDs-xHPYsRcmQ@az$ z4~h3kO>QQ%TZV@_TOvZsH8DM82r_#I`-Fz6yqLZV$PbBil2h|WldkOQfhzwK%58iL zXjFE4&Zz#=Y${0Du!J>XR(7p$l*Ae4Ai2RMoT#!?cHbqT@sGs|aX*QcO!d&JK`TtPl#hX?Zr z^@=+q2Q)yaNUr`VoBJL-qCtM$tEgC`?`6x@r0j+@a+Y6v7JUbM5_z6_ga*abiDvIK z9Z)WVUm_oFu<$1lxQw~+Kw)iAXCK}K0qE0mBPJ$nGDTwA9vD}6%AucCn zmnk=;PV#MIrO9NR?f^Y^qG2MFx`OhI_J2-9`wmxjIQFExXGG)LL%oV}u9PS48)f&h zk3PfMg+^IGYc4SHTQnoTp0WAXc-42XZg%^dA&=8BD7%J1yQ(Mj5jQ;h-$=Nlx*@eT zY(%4TzJt2kgYsdX$_6ez4~P$*4m5**)41sL2k0iCb0;66RMBC8Eh)QgY#(87H5Wu1upT6o=NGELbM9d<*vK^1fIN0kFt7?GryUI*{q9KFjR@nI zFf*tRA9FeFXgX?g(=*C$GowQXwp{MOrX4D~>Q~CnU`KA_2*ad^xC2Dk_ANRL*m?vX z_b?vn5%L5v@&;q%GJ*#p1trkU`vL*-2zh}Zq2K^})FYS+9dxCj3xf=%)13ON$(iL; z_2%FJw)}Z_hU~8TtLm>EqjyWM0R=?nz~*irbsH&uK>KOLbiXKzp8oo8xPtAZg4q;K zA*^g7dLxP;K(hmzC~MF^3|Av-q@{GK^}`ujk`eI2$7S@Q{95$Ie@}mEYu;0tua=~n zmxTU2Q+6Ac3Lbr%JQcS!o-X9qx^y$PDRw~fZjD6&lg9G4Trk^Nb*Mf3j6-)8vYDk{ zl|!6O)ChX5XJHyLKs5<8X4z!Oyl;m*75Db{DsAauB@Z zd+*CJ1?_-7GJ4?v;?R9Ud)2BV`~k?X4T^+zG1b1|z@%j~YThq|_pGz$qVbLN1%1!= zUI<4CT?@*tXY`);ml_^>e($Zy2p6t7TThx!QCBdNL4r z7VASg8mr3INa(ITPxP7JLu5=rJAP1aISpO@uu(9(M_@9Rp0u0H@q-%D&;)sfM*xc! zlSzfxTZwkfMD&qII(fx*FN7M{I+iC`qMODYZqLtqFFD#C&(cs$lRTW)hs@ulIdyvW zcV(t8qmLtivk_C_c*Tvht=j~&pU^yFs+ZYfnjojP2Ojac^qLU<#~#pf_~OxlGND(x z=-#KGV=6MCon9{OO+@d+>@cF~Dsle3_VaYvi*1&m8v-4@CKAv?ymoUj(4~@Y9BU4_ z_MMuEbThPi%+GG?LPgg;qCe=G+O}!Yo^neF6 zHUmgT`0?5(Z&{|Y^Gs$LU3lITrB7LG7tmffdTd-lm4LRpb97r@zez@Sv=e%@(UsI5 z73#QbBu0aa=x^B#vuYE@!p$XG@P;j`29=+>RpWEtQ1mrz1o@B9(oV*g^OfYz4CpRpu~`!rnqg!7QVeFI zjd6iyXT9ana_^qC_<5F>(f<&=h7GhEqaEC%Hv#XN;63+?aV9+wUxtXb>Yc#7dp5j} z5Eg_?@@20=zbDl&_!1WmHT01XwxdU- zi%vAxrNA!tXk0-EAYQ5QDLm*-G-Kx_T^#of(Qdv*yZLcq*Kk}V)?-{MP)UI+L zooKEnpq_j8?h$?Et-fGk#mnetPBhIzQik5Wcd^;Ic=|H>#T{-g_U>7hg_6*ag?Llm z;@sQRySIjRQyg?O@41goH1Cc}2Se=LWAsr+LlRY-XwbWN*RXa|sL?~kYdbV2n(qjG zd;>2*3mIk%{Z&oU52(W$nB270^~1yz5zTH%PH>B1Cz?FLiN*%f7T+gA zMaeDZDNZ!uxY=#b0s+Zf5(TOG%y)wFR=p%ZUj4s-MZZdU0K+6eK!ZP}p z(XQ7gw0L}De5AB}8XBGdjw-_PGI~lSY<)~vkiMSKLjszEdQ1Y!-%LbXpv{ni{-6t9 z?!f4x!+KkNw}$D=*95eu>fRW-Vo|KVm%Nybu3b+q!ZG#F3$)X>+s@WI2-9?!UC-Mm zEalCI=nf-RA%N~Me|nQ82#1qJU?GM6C`^C$EzoH2&c)fML%d|wBylWIJAR3enlkR< zXXYAR-3wt%d9K}v110SwsH-2}8~8#^=zj=bP<-~+xnAVmXVv~(7Hah6G2ve`>g5#f z4GNFv+D!s_XAgRxWMeKBC*2+U)Ssvi8)4vmCJQAjzsvfv#6t2`3QR5(r-a=aF$%B5X%@&&J<8c9P z<8I7Kd*kPO?p+Fc;1NJI(%om%To666FQxmYE#Q!`)y)a2KBA%BNXcKgL0++vs-wBx zwJdtnHwIaK zfM`(47QXU$LzmqW`Y4Acgzh=6YQ%ewzHClJbMeiokqdQ~e)kMX+daN9^@jvEN5Bf7);sp_3PZ8AOp zKo5)e9{27=8w;zW4_x1fozcz0QA}5A_D9#*GaRWFzF{cw#}$Qa z)uP8ZW(o6%#@~4*9)bf0^*{?A=%h8Dfj+FHmtf%R>h!3ZpY?82)1st%E1eG9jgWCpWbOu4 zlpNi$>6A(du9sx9V&}Z1#zjl}XQ92#!9_n77jLtkBE2Z-d>w@DjwW}4zv&<v=mM_WcGh{fTGzd-Nm>%T0P=9sZyrlKpjqfNeXJE<%e@1V31zGgZSr1gw;3}rMpMWpn%qol z5et1Q1gq$=5vdr2(dk$p+8Mp<7=rqbgffko+3$ViwI&JU#v4 zQ6*)3oNia2?E?ft6)&T8N&_4nFG2^Fj z@ipMc==5c$i~x>kx)RvrW_c6>*WHBHTe1SW!bOI$rj?Xa_RlA@Cajnvqw@o!g$(M8 zM?+R4-tBm029jU5SzO&G2m~R0N3T~bm`Rz)uaD53fF@PZWC^3nZrTcw>*%WS4!J&| zZ7(KgbZ&mbzHyTFu*uxN&d}0jjV12mpcF;Lw^F}@!${{0Egj#_ak#}+3RWHVOR;?M zf6mTcw{ql&!p&_jm>BBKW&`0ebvWTQa4jz27ct-$U`S&ZB8>s8%=-%Vdl*;>6HGXd zV9FCX910GGz|d@y>{Cr%s#(=?E`8u7`=|PJ)hUl&&TglO3fE~vOMynMX|U@_r?2ma zZpCP7PT#2>>MO-53(PmYX?Wja6^W8agYY{GB5$4B?w zki_xb5PEvo3;G}%xazLaT?`r2 zCzQ4b$;c4hlXmTfBsYHQ^Cv>fqWg4!^1g8qji1v0(D_9c-KV#b5n68igi?qFJxHRv z?}jw}x!m{(O?l^klCuK!`_`kQoASvqLXEGXh%(}S{n)yJ#Sx?ZSN6>s&K!NZ* z6sJlKVHdQtrOxS}Kv&eMAm$X$2a7b{sX&;}N-Tp}zO;y*i?V^f*R%HX zqC1DaeXE9upX&RkGiTd3?$xIC_vo*XH*$f}JcvfDa?IRz8T1RVN4B5}n)Kt0p`EnT0v{jQhSDPv&g zai+eXxsa%R!R{b;=y?NlStxqx{IsOj4Wjw7Q901I20GydSXv*%t`O5Ve}Hxa?O$rj z>zW|cR_+SXV6>GM_AF zfv)r883xJbne15#^=mdPcE@&QUFC$XzY$O5PZs&e-Ksco=&GU032DYBZHlDMX9V*) z_HP;l?L)?N~uhIVnwkR&ug#qyFT6>RTM3lF(v8_MqO2JO*78 zn%Wx#jkl?OWs2m<&q_?zozU)YZgZrJn^5y`67MtbMb5Vz#tR`dhDuh4giH)fS|6g& z7N^dO2AXxExn#ax!AYxuii{NvKi!KmPUibbH$O4K<%&iY_Q0&J|3vJk{JHDML!U+9QqHG#l<<%Oy~>65H1k-%*5w8<+s;_9+=i(D*eZGAkea{u-x-h zt^r2U-oc3`G$#UR&PwlB2+-VyIy=!gbVzhBeJR9>77dxo)Sn~Mo(}jaww;d9q3zEpMjLb@z7X;Xo(6Z#p`DE2ub$Q> z*$JnZ5ZdPwGFB4}q5ncrF_(0jzXI)>g{KejO5iibM|vLgpiN@XKcg^K%O;d_cA|L| z8s4;B7V$Z|IJ6_ym5b$#+?{Ez8>H~~IEtCVGHPLwICK`_Gi|>e??~BYejCcW=ObB- zEmgD(AtxHmp{L*GzMdJ$+$|MTLg&<&UPjY}nX#C=rIAf;GOAZ#(d3?NNV17?qJfX! zg6<^!++@_i@^puLE=I3|`{3NigwtIe=tjBP%b}<9NhO~hIzuP1QpKV32sEyq z$mAxn&%GS_Ps<(9sW-W~k3gq5IWhO8nRTROI<8PNdhtrmtZ1f*&UDDRryb;#Xs0@` z!r@3ijCO0$USvV1-LZH?fywX!ElS;;H=9bi!YarJPqy~Eb+c-12anTuG&{cCF#bZ8 z(G+kqDLUz#hzS)$zIL4VJ#48sn`yT8$@-E`8C`uDX-n0F<{WL6OX4?jlF&4|tGj&+ z%XEbpSF{)i+~Fo}6Ac>HI4*%!V&rD@ikxT&UGvLCJeoqB^wiOx=fzJlfn}E7BYgk1iox&b{metpzwI~ATEJxL$lO7(F6}JmQ)9K#ruAg z(XH<~ma)q2=>=L^T~pd4S0@@S1|zg?E=EqGfaa04E4ty(zLz4V^B~Cxb6gdn>=r8; zmp4pRLF&=HN4Ffhgp5GV-O@0D1)l|((vAwLd-sBUGSjg&iW0|XhzTE?&bDzFB*@>%C0e}n)Q9|4SQ3t z7mZ=75kB5jg!a{ijO(m@AsQdcuQy8jr=}9Xk`U-_K0L8|abH;;dX_`G*?lz+2Sh$zG^|OsCQabOJP@ z;-JSk+4mQ8;=Gm9UN@pK2uQnBGk>>@n_6 z)Me_?qGj~#g-P=3?@8HZt{rXX(e43`qnN~dVYY|{?>LWf-;DlD55UYyYE|arD%N8> zv(|fVh|xppmED1qUB+WPYbke61O3Hv`V`PMLfJKS`WX*^47Dy}J}33Lr;c+crXqj# z4pTs%vEDN=&o@|-^PRFA4x*_9kkB!G?v?&O z9oLNB%ddCL%HvA_)B68Fll*!xp6XqU5!2@$T~K*6W#afipp9ro-_tFd?jk%JT110M zBUj!T+mN#RLj?K>`KvMLX~N&rW+|oDEpjJ$K+E|eb9MMD(5t;P7I3b_A=xXtd?1kT z&^b2--?(YzJ;sF?!`n-{^`5U2eoG;>c&D|IB1r}LQ5=IyB|-$+?)Ab_7Iszj_wnR4 zO(tU8p$jp1SUtuSdtqjg46&jk3`Xu&rK@7&^X5tx>Qsc`=i)J5J2aQc(_G0yos#|2 zoyYj{R|Rv=mv}VYZ^&)0({VoJxj*M>Yf^P3>UEU6_dPeR=I6nmiymxdZ47*acxBBr+G`2(Uep|=%~8E_29?ud!z5P>ayTIH4$rI@-HmPytmu9L(B5( zd~C--l$*jjfbJsDIEWf<<;iyF_oIn0LL#x@hAja^bsUyJ-Q2{Wn+j>eatWZfq|=R( z9fj63vXi__&54ABb|E-B1ijc0RRT!4dmrE;!Pd~~fzaou5r9mawIC{=CiGh!Q}z;(2BFmYX^0FKA(L$>l!xB)X?{=Fk^zkw|OY?p>0{ zh_EXM8rHfOE;}Ms`cn<@1K)&=rAMF@(AB`8lYiHc5%OlE;IZ$;)P!b2jcK*~;?M=% zQbt@mPIIwz&ts0~ut%2_?wGT$a)gxGuAraVGiaCTUQVO1c9M-)I&D&v_>@#p75bNH zw{SPnlo@TeRHZZ;(*XLC0{BgU7&tZF0K4YI3Go)k+Nbv3Zfa^ z(ARj&HC@#dngE?*$;~Nn&s`%p8((9xEYf=?7Nq; zbQtSS^Tl6rfMEg!%@5b!sCv(F`1^uzk)yQ3%5yCHRIkvKy0x)?!nbWhE1c0&qF051xtlAs@3p(TgxiQSMQ z%;?9w%R!HSz5tCQo^uRQ0!Yvurf!}jp%gOJ8$MFAi0#;bex%J~YkX(oa%Y0>bt%NO zMu7_AT!6;3(Igmi&=FFI@jXMW{U@Ey*wv1$O}hdTz*f3JF1Ym(8J=yzgb(xJlDOT@g%zB(GAU1}q@$x%C#0IG+iwI8`|H4$d?UIM5xsTETmF%rP~uLJZ7)X@~PDL~&QO|%4%69I8) zIByfVGcgjt9C`)#;z-XRYOp9XdSY9-5Bo-aP~4FkB?0Ug&^NEU80hjgQv>Bd5eP~ApDcMLtq(B!XB>zrhN(LFY;G+hn}VAlNF zt8PeV3E%=+3T?m8xtAxs%1Mr~niOJUPZ`=Z2}8ji62Q%PBi;SfJzuBL;h{k)g`U+mA!cvu zu24*A>lQ?^&wci{@CG)-2X~JOqe~$w+BU#GCX@VQjW_hrJEL=wlYF*G=8o}A@J9aK zL1(1H*=7IM%hl`(TH3(&(ZXcw;eAYzoh+a?iMWBSC1_X{iC=J!d+$i&ykDOe8J`r# z&mD4tuJlf?_qi9Ld-LlVdJic?tv5^Awqt_kYVGPZ=t;88mPPOMnJ*8W>}w(xf}EuL z-rf-OA^#TW1klGIap+F#bU^1!Uue)0^ahfSkk5TmHLjGLMy&~2Ukz(1I&8LBF&LVU zKsvck&>zz2&dFHv3|&;1x=B8U9_%BaX&`IRnN+aoMTI?pAwdaJ_k*AH(p^h)YtL%1 zqQulqP>xCjb(9WoM; z&UaEhwz3>c_-*Wphn%WRQhNw5iF?=O{Tol{Tzh+#So29 zV%LPOEIlL{4fIG3CQv($PvAZEhjhKd{Y=}w73d&dd+=Q}bahOyE?j~pmHwn7q5hCQ z8C{X%oU*x^Zkl;GdFVzDQ=}eBA{^t*12xP{Yjhf+_AYWd^fX2m51rbjY+kAL-=0`Y zety$mNgsdB&^Hm#3E2r?mQZFUZ*fLNK)1>FhXvyl;~2kBB3!ShAaz&}EOBP^5zte4 zvV`78&}322(M+nueL>w+f1xX(x z;4n`o5|MorwyP3!t^!lA&`N6xkpjl$KZ+knR;Erb44UOR6V8 zlRK028h~^!paT^wck;9HWfqj>IpE|U$ckg2X;7p{T0pDy=Nx*7fHt(Dai?pJ%;Uh& zR!Riiph#hQI2EW*%2+_Xr&pMuUxlIFf81t0mQLM9KtCcnxHmmiisU^Fij2?&LF-Of zfabia3J(6a4ti(22|}ZWK%x;Cx(=LCnH}68xl6lmfX*(U4>mZ@ZIcDraL~P}{YpBv zPzn{TIBuD2*y~dKF)cIAJR4jw<^3bgNmlIz^qmk&h(y;MOR>LZ}5qjorfMqub(l0vYTRZlruY9)IGyGS&XXAzpzXtP}tRy_9znugH9 z?A``5jnmDd@Jm}spyVKUVP&5|uh0vO0OuI3dc^yMm7SMDT>sSCuM9&Xpigo6g_RhG z3o*O(>HmOEzjU}Vfh$sxvD+LvV%r^7KiY<%1J5^TgxPLd-6?1WeZrMFtkMXx-LyJ% zMOxMLlV#`JP<&u$Difr056}Zh#tfu!uXtL*QI*$q=(_979mCdR3jps6)iue=5qiGXfKKP5B7><+x8EJ%M`Bm#gI znj+R73HqJ~{(`T;^0e;rAJ-*-{-+YNdnZCC7to1;PETTu3HlFy;7@{PH5#CW=bL)} z^I1aav?edbmM?lQGfmS{>^_TvW;GflfO_vcKSe&R-=7`8GY$;SeaWXPuN_YGxV)~L0~o_Y%!jeapT~qa9XPxCNduoi>+5n9)Dl0nngdC3}T`5%ea)jJ_=|%;+Uoh?1Gz80aRsCulnN%m*O^ z)_^V|%;-Cw#k@yeCG_M{FuO&J8GYl;=(|YzH4b{3gT8`}_^CyN8NG!Bu&vWrW_LW7 zcu=I2%1=s1kz-^rOIH1$i1b#zh0pz#^D6zPPP=JQN(#9Kj#QrwM%elAQSwfj5;Ao6 zd^V`h4$Nqw+^UJ)!-=y&TEoyq6n@jP3+?)4xn)|Yq_mNP8``c;DFX^!V1VsBhce6*nrjXSA|_t2DTiqPia0$Mua=g@l#vJ`wcRuv0-ULW34MxaV5fRfHv&Tf?NW(01%EX(6FuX5foHV|Iljo}s^x z&{{h8s%vJ~#6S-Wz5W|LvkPb;a5G={g*M5XR;Zc{nB9(FVR!jLVu9{*Nxcy}nr^D} z2K4J5XF}+$?3phtpTRh3hf{K>nSQ0q8RXm>UibcI&_aDY^h<*NPv9zA+TT9gMIHg2 z1G>cS<3LGSW9_YN7+O8|4n!kN&_o&s?G-Ggao9yJHOzeAq3BRyL2=Mt0nonnr0%NefBDVM~GMJvdT# zCcKoOJuPHZ9(b(HJ~8z9%R(7-eq^6}=5ExzakBxCA4rZGNE|cUUO`9rE7TYOIfB`> zq35Yw(n8Ojx{_`Tz!(6bL~|Ex%h30ETF9y)(38d~aW^+1#d7MQ!QJRvIZw#t89JC3 z=ffo}L?Lh|yp=t2`IE@(?iSE#_YzWwe!c9Ysr)=S5Ogo3(lbLdmO`{bVsb$mOB>jB zzEzQ^(8)DvEHJy?&Nr5!6IeP4H$O0NR^Se04HELLN0SrY8&;USW!2Ciy&cW zq+ZSi5b~%Oy<=iDi?KvvV`qHt*_j=FFN$7{Du0u9+7U0l_vagXc9B!%&P8PW#m;ET zxP3cvRtpD~QW6f?UxD-LLSW)9=bQCjD*bn)>~<+=gNeF1Wm?3F!-`st8hV8VwC8?> z3k|dt3TcqhT&)fQdTgl76Im_S>3xH%)j?9zh6R1S5oM!KU|X#YqHq{0oUH*m!Hj;6 zSn&!!2*2b{M!Y))10s+5B$_!d33P456uA%k-j~=?ZNdb$j$Yx~=m|4U@%H*8nmL#` zq@Y8j>ug7ENQ1gg)%*(AMn8Yf3A6BmB}}5pcu7u}=x25?OFNv23#b=hO7~i&DpmJLvEf1lVVwvA@zhw zG+C#&z)u@V0(x3Hb^(n^G+FmbN4wD^xFHRMh8t3nDX$%ABzi6-%z|EcHKV_x|E_1C zoT(VCC(L*fP4=!&KpQF#vU$NelX=v&C#Iv z<5StNUOP`-lGebKH-D0Qeb~u5*^J(r9Dcvg{fp3&1tcHHe|*B7d6$C5!Yy?Kp*3`N zG)_a`%0gC1mLjll(`$~KUWq>U_Er`u_2J92DKF5OID*vO9{j3C^%a_;hu+_WY^8)| zS?G*`)%@{nh7WiJi1?QYSTw`#@VbosA=h8cYw{ef^eU1XtB zoxoOJur;yI{W-c!EyI`h2woFhAv&NDS4~fO)Tx%y6wN10V1u+=pb%;9c8s8*<&i98 zn;wk|VpDeb*~&&%c3Cz=f_)z7 zjYlhlkesQ;-vj;GfbSFC%MfReaE0Jj2w^DL^fuBM-d#XHH{t}g4mw#z=!+^N{DT&^ z=UzY$uJ3Wvt%hb9;R$88*7e)d$ugh)_cjnHteVlxpT=M|ZEYV?_0j#czn6t%Gx`pq zai|7x=5;_v2huzu%eY3Xr{)H-kYhO{`o@E_R12k`5f!^@FU8ggx9moQNE{8S$__ju?`tJxM zkiw$sCXRk(K0&JscQpc)JidE;i08&_Un(CH4peO_&URxoMT5dI zl#dAqsMg}FVLV0qYMC3S=V6y5p&%phhpG#sFX`y~y*{SkKIrw0}#Qd;NmBaoGxOdrjFT!RBRXx8s{Gsp&ucf6!%5H(h}Ua zbzQ=yUC$yTSvRQDNcJ>Qx1f?xVb)wZZ~tL^?e(nI(bQx%jWnq=iKZrWmM|)7I@;21 zP0?VzjsA@7rn^#AKdNT&u|_l~Wmp{wR%~0Vt`H^F?yaK12ko$MJ?H3}B>Pw|(O{vY zoxvH`{7MoI-?evfm7KA^o`qcY4JJd3qHy>Lx>3=)tm_Wzlg!2&-`t_)$Le}b#e_a$ zx0jAA%~~|(S6M-S1GLlvxWw|@uh20((_W@eBx;b%E0re}i@l*We z7M(DG?Zhod6*U#aFZK03I>BU%nhH{eyScn0wN|f_to^5GVfbS;Fj}pXoZ?(+g-Do0 zGe_J#&~Clg##h%MBV^rmxR+n;u=PBx%JVC)Ehe_TpF~qchrgf_htPRjB^W<_f|i;zkDR8`&FFKI5f;(7 zYIlMz)gx8G==1j3Z2ZvNipJHrjXu;DpvjD082RMxC(%skLO>5k`qn!w^d}i%3Ai%> zeRe>bb5AW>y(S~9lwBvF&2NE*8NC^#`20urXj7>f;tS&QrItKzgc6-cJM)r-)r{n(oIV17y2#TA`Rk`D}<(G$A*+oz%XbN!{J^cr@ByR7%%9o>r%Xn zI#MXr=gBUjF-&>oK6nDAp#35m`|U_KqN}P2vpMer`SrUXzq&EOo=Gkgp_?}l8m5Y_ zQg^g8G`F41^6MTlLIOHv0^1Z|{u}5J^6rd2(?uy1S%tdzTiDyCSV^Rz(N(}2X>mwI z5Bgta7n0K9joBuAXiwvbe9D8$=x$6xqk36?QfE`%Ly!?t(5&6)eiPR@m1oFQ3E$); zXg1|N(nKAxyp7QI?Ii`>QOpPvT&Za3$Q8A^&ruA#%4Q4q{J?0nBxc^C5hB$z ztWR2}4xHc6#}7@xLI^7lHBRqkBP_{W`7fUL?v&kgjr`*qDSBAYR1EWl6u;Dv5ysHs z^C*q5CbZ+JDq>UifDgHV?rodWRDcw@^gPi$J7XV~mE9AU=acW(xV_BNW_|KNcar?- z@6q}DQSz4$=&?Z~W!39wcCwyZ0JSIFkD)7DR(98D2*D-+9a?pl|*-%MQ-+As(JP7lHvQj7H#!hcrCdF@L08K z%Dy*m!uKg#o)Q}SIm0D!3*Zq=N7BDX%%U!)Kr@`@ee`Jb3L=nCM?c_bIH5yRLD>ki z%(w;cm=AmPtlx%kuE@KB%4lRJ@jIJ>AgK*eK(ILMNEf=P77v0i0gkJ?d_< zgl@+YXqrS5-%^_kE%t;?F@E}W5RHq6ZS?;ryLuhTjU(J#8lnLmrc(ur;Unn63C7FN zkD*r>XJcq_FWZtSkSMq+(lgCR1tPSsiZwTWq43bov^&L&e!5jx%eO_x zm35$X$ecI@db-s=9JFe4?#ISGhr)G=2Q&JNyHyKlm5ancM)S6(8$?RwNSV?SWnH8| z9|;=!PL|yp-v(^}jk&L~9k}{t+XU!V?G2c59G&zjlwc=&Do=1FL4!tUvjkIyApv?s zO7%_!QyC!!llmV%SC`CE?N`wIgf_(|Rnc#1u66G}x6sGDPpKXTU+HZoryu=z7JLQI zh5Q`LFhRR!J9!8iXHZ(6z^09#yLPHN=4m&mLNVM;%M;j&(bw7BOjtBa1?c@QWw=}8 zx5VOl3O@Jyog8|?q{l>P_vKH}trCW|1){xEVsZ*T_vQWyohO}dC?g9OgU`Jl0iD3+ zC*{3;fF1xnBtkdhQYB~%cgvep=vE-zHHN!Rzcp9rqS?O%nvnobHS~@$2%zQq@*0$B zApOY1sc{9Z6FB#b@?MnTS(W|%reZ)a&>Df%VX$a|WyQ^pEPT0fFbu6pWkqh2$++y5pM0=f|c<`cZq0`x2At>MR< z>rsRzfK&#R*P6d_3}(==(2T z+x1Ag!&!u$H)7x&@2OY^Pb&jxj048k4LqOk-6^e>5qf{qat!0<5W)7W{y6ar5~zjC4irC|-$c?qDnYYv_NRT4CM2j+2H zB6QJ`s9@xvi_d`WK?})J{C(*S%^tQ%>8dY+PBEje1|J;&ZDaH~WO-Bm11+Qy zpz$0I&xj7OUaPvx$^7TfM6ihMWJiMb(V>hUJHGa`%n4fThAHo?wS;J;elbkJeYxdsxCv~v z*DJW_pd0(jLH`}lCqP#t$4}83IJw-wi2Y}1Y!e15*|-*C2V`pK6|%3}-KG=VUmSGi zp+yzZe45|_c=o#8iZWfbJEUEtRGGRl>Nx@0(%iU3wr*u;$Lv1luja4~JEP9l?2&be$dIj4sJ@lAzyURi~DDgp=Z3wz% z+w(2uJ+IR{`vP_ApN#JK{890p|BwLE>E6+wXpYPWA38zgR%h>qbR=q-pUr zLN=qf_Em;1yL)Ic#TT9aig%r}F9y(shZa+O-sZozv}oGxdqXXM&RaS?7E}BzC~0pQ zym*`%Zfp4jFN?V)w2`6n)o{1WBpjTD>Pd6r5G>=arhyQ0PFU1@yczuooTTy4W{XA$ zFTeNDvYPIKLcsgnbK_e>J){%v@vGk^JYonIJ3oj1u#@wiG9_&jo-(sVBgA%R;)Z3m zqeH=6`?2d?3baaqR=3c5#>0^Q(G^+>uk#7W8d{t)ou#Q7rj?3q!UsR8YLKBH6I6Xu z-okQz0`xHvT8w5S0raHtV`UPg5J%N)_uYoVp23Y~SDkwSEs1>i^A za|dP?e|J(|ufRwlE@2h`&W9{(h2^fNR}dAjQiysD{e?N;K#TCj8bCjDQi#lt8KCna zuA%!G&=#IjoD{;`=@l9!4rJsm^%#In~HvBx?Mr5zlwPezU+naa|xNa?Pmc5H>8%U z)o%3)k6Q*u;9W^nfaCOvJ>T%qdq8g&8x@W3*X2lVNL*@okHW-3AGwNPu9#_j|0mE0 zvSa*j=%Swf^Hb0984kL@Vd+^;mR<^RRKy|0j@&>BM&cjb_D8^{8cQsB4J(IeOvLEU*O`;)a-4+~G z(I;3I`LBT{(EwVKLaco5e_(=13;8EOKXJR9V?l06C7IE;+*ZWz<*#}0IcJWXkLZb6 zn$e52hKD}u1S!N!BP5v7cfOdr{;AW$o`ELIB5Iszs}ELpm80a zypuJg5IiAxt#M{1rjVhV%KO~ATE1i-`2#Uv4*Dz4Q>=XMOPPGg%m-?x=Ac_T2oBI9 zaX8Os)^z#IJNG{KLFpd`Ch`~2RQ^jfvL}4S-k?bBEFVC)UP7+RGfo;WhH?4{FcyS z2-N7`nL9yC@y!HUsQhRX!_<6|)X5S+-%EJ*qp~V)T{Uj$ra{$Oro0YX+>nDt zm=-GbX1zQedwTILXgwx6OraFenRBYmx?T1L=$t(vC;QR-3Z0uuJigWQ_*B?U+EJnr z=5*(HvbHvT3N+5*n9?6)>s%FMAcU0%Zw~?bBj;309-$qeFWtcxsGI38hzhv%^d8U_ zv{2U_g%5uE(3^Ch`^;1XZ3vq208(C5ATQNf{o=3skvNO(-#6)w@zYCjy?Z-#A?I9f zg63PGEl9?lvL?ZlcL6Q8+w=roCqg%XmNzV*Y<5%VBM(~kR(%_pgVt z3*k>KCa{&PH?`M>kiG4Y0$ospch5d;wV1$`3JvK&#Z|hld|5(|LS$9TS>$qoUg%+E z%F9A8EQ@Lpnnp$!^c3H5w8O%(Nc2lC$dp%8VN!KbN?K>lGN947VDpLBpHTr&$)ch25{K z!4&ArkRXM?U-{_3GP~Xl=_}2e;3R;qw=zVB&N3nJ6ribFNH#q5(ZLi<2s{PLBI*{B zcg_Ag^UQ9H@2NwF8bPaM=()BVsbIc`?me^@6`YfyzZpFADk_D*+q2{=lq7|4pYT)- z;>px6<0g$Tr$2*4FLret0yJ3bA;zUv1P#ZAyh)HkK!G?dR13?Sm=pp9ZT|0I{v%5v zM&d7VzA#0SSixK15ySAXXyiW0(vytp$rUE;2Tlr+t)viqk|bu=J#^hzUJB8!Xd&*h z!R)r^U&%NrL_>N71)W~ad^uSSX4hh%ZT5#dm5=Q!C+MFYG)Vy2t-gz;6SQl%*ypbf zI@U&7G;6(r%p%N3?*l=*3MEEsOjX?qI-yZ*+P=Aj`WT>XBn`Jg3gMobtlyZf;qw*x zn15;E-yDM;DO>k|mQNiE%6hY20o7m?+f|TW;RN0_7x~}08=9b-L#R>jF8kK9Xdc5L z&*+1thL=L^nNFt-fg#gc*!dkMUc;1@A0Dhp(9 z@f#RD&>^>&LJpZA19r&is%nzctm*}$h^E_S)n*s#B zO8nubkL8*HU3Khf6~yDCe2E%s_sVCO;b}7p#`o1p0nAGUbcPvy;h+VOT^?ZFo}!(M zZf^n2h39&K-r=RD4Oe0A9yZgJC$2X2n-Vx=uRW) zwxv8bZU{^OO+NR`hC^j!TkYk3;u>ZRlNtTrn2(rR0Qcrm4q%{rsTgiZKtFd3`oSYw zXT(MZ&;~@~XGVh4j}Qp#j4ot!*aF61>HvLc88qzH1N!{ebNsMc^0}`WbV2CHP$iqu z?O1&5(dWKgcLdQ&KjRS}&=~_OqZvK3y2jbG8f-T+gu`e?|5px8-)?z=vf=w2H0aTf z(Cui`2PX}|YX`Nx^2Fw{MW6dehz3*s0K>kAXoYCmM6M|TZQvzH-o+aG^aw2*`^CxC z*zK5HTZ`BqaQ|>!}VH(Xy@kfc|x%N2e-$Ar6X$ zW>28qC{Ece`nj^(r`A{a;A4aEM;UF~1$s2)O}vDETA*7kqAL&%>0>ClQ`dAhtr$HR zf4rNcTf2TVjE8LXVQ?9X1JnF(yhM?*7spSTUJo-4bi zU`%-p*6t1H5WaBr_HbO9pby-bG^pLv@1XZs)|=wTuwngv4T83`W(L#`X)zo z$E=JP!D`RujP7#g#;M}Bg)Ah$;NzUiEcAsebSJ;DkkRBfr$$}KLbn<3 z_n{M0K2?8-mM5@vt-nA^mpYb&wqSb4#L(aQ zc_5IZ>;_Zb@T-4hR-VO{s^G>#?aow%pOGc%GxtPIV29 zO$E}z5UXwpZMp8WN#(y>%-B!b}SV>vb}>bX{m3b zyFjxAhhNT)31tgr^vSxO3$#&I>>G3t6^}mmMy)Bk!-u+?>4hd^@~9`*v53CBi^FMe zhZl+Hdl7v?^j+||S1wT`YpL5r;Q(2Ab@d({-s}-I=F124l@Cv?jOb2W0u6}nqr)4b zkEzdKj^0!m$_j|?x-kyXsRtD5ZX?>bfM(lq5M4GLIxHF#2yE0_&{nyaF^KMDM$b;7 zA-!;ey;}SP&CL?+IW$ZP!CPVEDQ64E3Z7G3*~fEJIoWJW*yQ+W1?=cA97Cu0sg-m6(_%l=vz2s#V7SDwMPMZ z-^a->VxU_!3+LReO0|7J!ffw5>K;1M8FOt3grzKwi%HL#z&2RA>7Y;5Tz#EabM&4$ zLG939F#6ncX7ndi#&KNCJFeTYhFQakeD2pDXWcE)AGvPFGTe~821&Q8*B|FAHAnC3 zcg%nc>h(1sM0ceug3v!I-mfo#^(mq;8hptlnv$yp1q17yaTpE0U=j^i>y9$QfNrxL z<74kJE2>$nVbIOX(H-vxj-#Io^0|M}BpS^hSs>8dAzGAQ9W@BU?c`(xdE4sohnU8U2Zl=wg~};&X4- zYxm-%9tpk8Mmt2;S#I=Mtq=>JdmOX8^2ZTcY=wwE_vU9r=X8-}xFJn_?!#i@a(cE@ zhGmgy$&CI4XqDr=p3@4^Q(JR)M(6yaNh?IbZ6HT8lZA>yCK^^w)?VRXbM&X9?1vh) zo018ltBDzXK=-E0Kwks;7jAGI#5@)XvYv9#qeBm@oXqkHGRnW9hQ4TT<>c0+U!jph zq}m^$APXWA_V71B%P)BCv3~-yOKjoAfDViD53S3^M?*X|Zg$7SX!XAS2W# z9DBex#y^~>*f|_TnUA5Q=%FC=y8JrU)itv-C6{alS!1}1uVL&#yDqG;>|{})PRXxWsy^2C;z+s-H27F=zD1=zQC+D~ zMyTRQI4~n5$$yaoDZdQSq=T-n@vNTJ!Na$gd|9X(5rA z`X(;X4{}k*-b0Je7Cm=THP3srPDI5?H*$^6UX!wmjv$Fkt=p1b3_#0WY&&HaqVZo6 zl8N;N`rJc`SIMjEaOWQ8qH&kVa8&-k3$&4!z+p+y3v}XxLu<5{J+3-&39LPdw1iHm z#wI*~m_5$OXj(XmOy&|MJtr)PdWhDr@0Dy|@*C>EfKHklhp;kckJTHTGu<%Cp`U#W z#Q{{dbW}`eX5U*zCKL2gMh~m^SK)bbi%GFG<+V9zi#NTLPt8#@R-NO}VdJnTXq}b? z0{Vp6Ni-8QG)G=#l)d7|P&{#6{-@|O@fp$5J{(6sKApG$0v#r%?PqwNIcD_KAbj8y zxF^^+Ug2(C{61)!aJ*G9W#46>K{U39R!O1%_CBWUMg6y@-s4vs8n*IneI&G~*ZE_C zQa4-b3}IzWH(l22Ja+N+8CBHk#zeFn%;VV%dPb$qsm9$}$)>y?Kz{W;3ta#j%;;Ge z0WvrGM>x>&n-i)SHyS37u^|tb@@AZw&nq#Y!7)C^l$TCjyo`XgduT?lWj~cTiAD(h zAu>WUdY#b*lZVFIy#d{VLXl(28z#|+4-(J?dOKD=1MO!Y-r5)6&jNugQ(i}fef&W5 zF9W((G`IXDew9rksAQKhI_|Sy*xPdE zO#f%?jCCY8jxbCfb#4JNrseE{!BB5-4kw_Ok8<`KOgO+TZYV6^4IJzX_+7-q1`7QM z=Hhaj3nvp0Y?IS}RdeQ=RegdKD3JEPRB!Fcv ztoN2K1U!*lf|HrMqj84b@W^!?|sIJJbHv|`=5pYVv)4!-b_<3#Co1K^HLfk3EL)*tV2R5`F*6p$9 zzZ5^!;ZB+0pn2%nD_20X1n`R^)2Rf@O4pEAF3yA>V;j%FXzCXFprT*hNZkPILwV=# z+)|1JS17%sws)*0M+q#J)-WsqG(a~A<79tuq$TH}ywTaz!C_HszzYyAskF7NK zi3Q)^Rrq9Hg?%djUyFMV4Lls=vuq;%9f660&IpZ*=uYes@~Z5obA}nT<%@*&qZ=%Z zZrHum$22~<4(R-E(wXqFA#~>B(lP-(T>BEnG~)AAh|7Q86yJc(egXOsF2b=f1J4JluS7>eHp1%~JkxPn=Dw|fpzdbtZ)6pZ~IttX6Z94o$<;7fQIN}nwYS?_I|%1^u3U=t4<@Kz4Nu$A6>BY3TY}QNFf$zY&~K{)B7k` zL=O}CdHts=!_{MKJx$i+Y6*{Z(4Xn6uvkg$Q=qN(7fVmD6_#CO6Zs%4n(3huH5FdcDTAG{WLnJrg=%;9+PZgYr!3ZhN~xtM|_-tfXEq z6iem6qzAgwORH7(hS9tAG{VhWc*zl{SKF3*y@39bFz5b~E75PwH|V^xE)CtN@6(wD z!ZaH*<(8A6YM5faFNCHvf=xiT2?cc&_0DU!o9Dnzmud8 z)^SDvXi59z2u-4bZe6cn%iySRLWbw8rV%XAJ4p&*Ezrlmk^zH|1VLTgPHXYt(VZlP zsDXA3&{9(j(g-CcA@A}|a9hu^MNY+7X?XTXqYK zNg*8B3>4JTlcaV8dLJ}(v70RqW~Ywi6tyEn1*Z;~)JWox`)>Q-?Vzh29iyE`mu=** zr0&)!?q}Nw^|Yp|NL9m$rjBO!exZy&L!S(i{y#~9iO+*qInejf-5#&;iyIj2A3$y~ z?)=+iJo;$b^;r6a@)$jv1&&e}*kX6^pI&d*9oX{DID567ZPP07;8P~Q1Q4e>3Hg_|~wZ+b;H(q7Y z9@uL_JrhbuZB1inqKa_*@nqAKVf56ycWKuEdX&(g35_#BxVQWeEUbB0%Q~7z7V)4Z zsq9#?r*|5<_2`3-9^}qB?=#j8!8fj1kLA&-ZZh0)jZ-@>@?TxEBXqlth8oS##CY4O zm&CcJ0>y6$P1j!@Mqf6n*VCL$zoQG(iVwOOZn?C z=f2t+?9S^;2k|vK(TFQyTRTEm{w+KSw`K$uCQCvan#6nu^r2Lbc)J(@FXbfP16>aE zBk96q|$OVij4f)h=`Y>m=od4dEG*{~&A7jVp><4#$-Unh;Nu6>$o z1xXUX>^cxgLeFtI(7LjQ1A$FexFj^Dw+$(1GG4)rQvNd}0c`H{r&yrrr)j?VrUHE-Ev$d<_91Fw6s~} zQYX)7Z$mced%TqZ7NYjaU85T#-Gkkk(fDda{B?s0vbEbH`moVkqNU!kYtFFH>423_dr(=B=m?&{bwxIt&7swO`T zq&)_Diqm2#L0>Sd!WIZG8tH@&+GD?jZF9dKOYawG|5HM@q{U_s(7E6wP-iGU*b+Cn zTC8teFNR&=9##)2mH^svq*qmvLEobP>y3HyCKgAr1)SG2Wgn%T$49D+u8Ie*kTr4b zlUE>a3>%oMhb3!|EAxO-bzJ*2VxKCh*;(DD=5F2#dQa%M6OH4~kBUm_EvKa3y?yZv zbTnc^)W=@ruX^Zjsdw*KKv8MqGp>A$Q<4|?>zEMwqj&F^1HF+F^(8s5y*iU3Dj;+Q zv~a`y3)!5%B%tZ#pNF5}B@lMx%8aB&GYQ&lLT8Nbgp5;7ZDb}PKKC)sKAeL>Nv_H) zwUHHLxLnHrR9R5j_rhsy{^_$IbPgvxdsViK_9eOR~(Zg56A0}P3YaDBl-}g+DYjA7F`Q>BK)7jE@2|boXI=hM1#7| zNblMN^a%7K8q~8O{N7T!&E!*w7x|81Mn70UXZmOt*DlcN zhS`Tez`*mjl~SafG*0TM<oo|DG9J?MN6Tu@aF zJ<~^F3$$S(h`zv1p?8mTpi+t%hSe9ee*ZkPjd8+I-aHFv?c94CdiPjjst@J8eAXIz z(Yv=HiK&jB^Vg67p5-ff=5uvC-Zmxuie$Z*bVpY4)Q3T_O*&e%@6V`;-hLZ8C-k7d zg?;i+Uhgq}@JV<5+&iAm90+J}vAJkf{Zoq;vN)}afdhd~IZ7@b<2}&2w&sAInAzv6 z*RCS7-HAVNY(llP&vv(yb4BAgJhd&`1hl;wZ>tRDJ#-%Jz6tIB(EnLGe;v7zBaD-7 z%N#K6Y5;#?r68c_WxGnA0CQ3H;krU zxoHeKVx*Zr8{Sg!P4Y45w{E4~h)?6sYjmb$P-p@CBca8E{VR0Q)e-2Tb<0dZ!O);CMLn4F8v z-8u=KxD0a={q%hvKZ*)<5&ouZ0R;3(uVI+cZ@G4F2tQ-^l~5MKGG+x0pQrArb}#s` z5lw|iUD0W=>pa<%x(HVQYkoDof~IMH{TjpJXaHXL;;|Le?s|#iNtH-0ABS8!4&#o|VuUX0&~o&3Vjb zN(pZ|<3$&h-7;~6CJ9aqFiE=NzH!o|T8GJU4d`49kf2haq@lc>70^A_sf_3@TP&dR zW?2B5mEB;^*j()ElR>nD677Rtvow8GKp)ZmVZttpBSleo zh@)2pPM;J`8;>*({A=Y!H_EeBI$T#{x@{s8$HuI7U0vl0unN3yxMs-|1zFQ(Hz@ zlIbuhc;8Yu$>_>7Aymsj;JVvBEBWNf$5R5sS(e=$~wsbLs; zkFgU?8T1L`lS=5cD|9P_r%vQ)4V`GD9^>4oIqePyHOrw?Bufl*qLF%xGkW&vNq;$^ zG0v5Gj897wqphw;L*KmJfzXon?>j;t0Byw$jnbAL(4Ew6XZ%+$pVKtAP*q}MPBd%( zt_8GkMG6mH6U}4+1hl@z)2y`VqyMQB;<}#!?I8Mc5%WC9FyPoOZ-UJm3eXmYg*x4$ zIihV08q+H7*c>rZYI=oXbSsJ!_|sdE5ehXh85cZ2w+i}qbXPe*>k;Po3aD{!W2*Dn z0+_{=gnAfBVxrLL1D1Ja>@^+4ROA_Gk0XxUjBQAIJN z1D+le`X5rzbNdYR+oY)0=tdoZF*gDi|Huk4pTjmrQ+6ZKWQAB1{Hb={Y5R&mlaX{r zzf#{e9n{imidI{u7N^H~ucPM%k%evnoKKIbmx=f=@PVpSyN5B)e0r>-xyN{NsomSW zBv=DKpB^W=vbz{FQReFQG#~L^>O1s@n6v--8EBGUr9;1$JW)kaqL*nxc0jc3Dxg*l zz1|aj3SvqWY27NQmH!?G6+La05PgyS>UxWqBme*)07*naRD6t)gGvp=&FM@tUrE_* zBgW})se!U506IZs_fGE=IR#SrNsWyt(j9{hQg(HB+7vfbdf1ioi6(aJuzEWU#rV05 zULn|^GR0Pp)zV`VgEpw_cC74H5$H4IM7n3@a`=rF(^|KwUuyT@%SPO(`ocvJrvUSdLXn#CG|@$pqqlwC?4g5@HGB#5sIx-bOz{m^-(}4zpT+aDJQ}?xgQ6Pinq~@ z&@2my@-;jIlP{LcPewx5*JyQ`A}hQ0?-IHP^qgChiA+Kd?u3mIu`gjAd}P{UB?~3{ zI~ASwDNJXw4rgQfV6CpdM%O2G2RUJ&IHJLF6wJ)>n z9m{oefyyqA-Ry$01{g+`1I_MKG#$`WMNHa-a~yKu&jZc0sbj3{x)Zfw5DwWEQ^y)a z8@Wgp{t49r_~i=dDH8~mAmPHYIPF? zo7_;*c~7S@t=<)EmzW=~?yq2~h;vvy6=XGcYCFfn5)B{hMew(Wp#zi?jq8Ka(dn?3 zg`_4oJlbXa_1|f+TG7sEy~$1blkWg+9?$}~{n^LB;=GoHq)s$xTR<#-Ajg{^x{ray z6tkF_E6ppfDgRt0%hS8G+@N$DYsXhYiBP(<(pkE_e zwgA!&OhKTFL4%04PtmODBATo+x)shhrlo^odD3q5CaWEzg}N-`TR`u}osASH4LzL= zIyIIbpGMb`1P9tpL>1R~qv&bE6qv9kNoXyLpA?e_v{|5g+>><6miIrda>cDk;BrG8 z@{ZB4qrDOp6I!RlqZ5dPGO_^fsARm5u8XH8K@lefOAFv_qACRDtj6+->+;kBsH;?Q z=+->|8avShEr9RI*#g+(ug4>?)NqPg(k1eN8FftIG@*}byv=Coz-+bv zlBqzwXUD|I@h_^2+$CB7Cp5%7f)kK>jK^63d$s`LTAYf3$xriTSAUvE>_o$&u@MxL zKl4>^y9g@;qccQ*l^VyA?(rgSEbt?qj7`!@UUf85=X=G7th!(PDsz%5?jklGQ z-4ZQ;lV4$n?{B5$6_-K`xUGQh*{^_Bh(vk{a47Gg;2E@;j=mwkLVA|s^Y8GUyBcqs zgbE1A3c+X-(IJ^S(Ii!eAzR2YN*2HyvO3Rc;B&?H|;+52xN zimOUh*|ltiuolpQjPL@R+@us&xm4)DW(Eg^D9v~K@QXJr@V*WkQgGRu}D6E3=5B*gOTgob55lq!;vT+)RsJJrB3E4#D& z8h9#6|E}mn^U?Z7rJQY626swE5srN5`Zq{AY9uXbP?GYOJk z52Wl04x86hFVb7Ri<$RdStCVsF6k>6`g3zPp`iA!PnBH(o%dv1q;q#CL=W{7WmlN* zmpATfb6Foc?)-8RRAY!Qi=NR!w$;E1&(u91Cr=5Z>oMuf{6NaCfVOz5HKNZ{yQj7c z$vrNrJE=Q1g*a>h9M?p(r;9t)KdeRL;JrFn9HB(>G9m`W+SWd-MdOWo6?6TmE5YS$ zxB3AG4G5CaxN%K5EJD|h9S!vtlWR*bbY~0TxTSv9(0q8km&;cEiD*ygUtkB3@=9;G zoLa9=H23Hw&(hBwN^sIuJY5Cc68gQz9)0FBmh=djEtNM!q1ghso6%l-;A7Fr0b0_f zN7(o5y>LaoPu8Nbi0-MmTk2a(E%g%PG6p?GA=hYK+$)m^8xvaq4`aTw-`@A0sEs;$ zag=_XD9L8tabe&veo2mEsbMq?0f4iwTc-a;(|iPlYOsFuFw&S z@(qof6c>|ZxI*_4Xtn^#$^LmA2voSrYH0XKlE6&Yj01rZjq@s6?M6Z;nj8qQEEI_r zuFGAr{`Gnjfo2P!*gGt_MkhN|oMO;f#A>oY)8yQD z+7cBR59NA&j3~hEBlHaowH@XO;0R6g0li+I2e|)4Xo`)jX16IvUc(hc{0Y5&W8R+r zP2uo+ss#r&KxdH_+Vv@xbbzKy-OlUU@bntUOrP~shyWd#-NMxI_iQD*(*2R4)vm%G z(d8B4Qt?s?m%4{KC+m)C=^rY-Nb3~1)bTK-7og)oaMpfP=$xeg5}`?mv>62G&JlD% zYMaA?2(=HO{fEU%4ckpk3f5S5h!3+SXryiJ{jyYT%$bNX)2E&alUBMVu|RSd5bkR* zyK_x^_!)qP#h`5N_7YW04d@K?>)a@oKk%R%xSIrfmX#^~ibfQg^|?-@rU2`Pxf{JV zTN_KzXk31sdE;4k+vMamkz&sh=M}QuK)E#4th*a2SXW3YP;+r6=x5*JrklAva8lYM zsX(9Or7^bvO-p6=wT#CZ_OYW+e5KZ|6|(2Eu7)&b$Hc<-I{2U{?Aqf->2m7sXrXh0h7Ot%c30h&uT!9FfK3*}t_dU2JJT<|#N++#FQD!4Lnm@gC+H(V3!}EA-D7Ci>IZlY z6e#)60(4Gi%AnLijCu)84ST zo9={qAhW(F3<&27@4+SXP$W38A*w8IDioRvJ41T`oe)N!ktiW=vRH60DNLGk=&UPY zlO~?G9Jf>zi_pAaJ98dJUx~iu1L~>>eU}8?u1oT|@3dAVy!a7XTvJCjcU!OYFnY8i z;WL;w#wbLy9|)Sm=qvR@Y#nBgw{rj40h+?-H<>;PK_b&$VNwa28mN>o`aA)e#)!ty z)UU|7&;H%;hA6!U5jyX_BIiCrYXVOT=xMqzC5--8RHt%paVk46a_$=)nx@3{1m74& zp9)=ck=Z>#tG6%P`Gh$=URDi3ue>g|`QLJ#hyl-h_NY+k`D}LpJ(SZvoC~N-9WTb^~;atw&55`P(J*nuKn`2v2VI9^B0@ z`aU&5=PgVpgg1V)J-}eI-Xu;*1(fe2I%qO?BTahq*P5Zx2#cA3eL>Lr#1>B%hF*uB z=RvBzstEnF&Pnn}$Zd@r>$POd*->8e=OG<>>yLD2gyJ<6!{BZXsvM!9g}SXVB(j!j z-Dl6xPTS22Po!QBy7N|gK+pI%KI>30f$2 z!_`wRdek4~gFdR;w&3qnj(w$w|JB&|#sfqYxeC zSoeishtFmg24~F94C*Mvz&X~gA%WO1$9a)=*oza5P$rB*coLa1^!wS}HJ+x8!ycRX z1<^+#yk}_0xtm$>Fw8C-)Hx}m5Io}3xdza}11cQkHe36sLQj=0@_DQ@c6sB#&ut6L zD>!ivj2hWc(nsi`U4||Vow5h&_3)x2lX!R4Hee!_L0X?@#I0|FxE&lmdw~EX@;~ci&!I+s#E$EE7&ymu(`9=?% z_zdRlhDJJy`ICZpi~9_&oE!bvk)g|1^m@#N@_uA??>mGbq>MuR0O+d4P0waZM>4(a zd8lAW8HJz}v?B%7%~=XT%Cq^Jd4(w}4KAVKrvEV84V@Oow_gG6srJhW`gcO~+}0zC ztK$PRVJ|sQpxO6(-1M%HcD1W{1;M+}L$MG(RDYs7BSCw(%MrBb=7@QP@1~o+4DH(b zk;tPvKrg?Rcw^U86|XWJD$Q>u#lKGX@tOQQx=P5WfWEyx(oKI|o~?7Zmv@&D^pRN*?cKSx1ifJ=nwhoAVe|;W&33v$aj1$>%hxT1 z^3L78kDw9qBaWVi1ZYFh6mMJ1v$S}LZ|GF3)Ap&l;|A(TPBhEwDgOslTx?J*Ru2S? z!`pdiyx#c(l$Tjs?KNoU4^+$FuqtnP>v`ZY^-P7%$k^}Qnc#1^C!#QVriHA`b;q0D zr$9FZ{ZH%ufQH6K_+X4+LE$ z*mRFM6A?OlpCAc+#%_NnMQ|{*eZr@NCY!{yQRj-URP2SM0O{%s+Ud|4 zXd&{|l1wPkO4ttvqYo~Y3{6?5m89^E|74u%8q@*nl2qsWPz|2`=U)Fk_Av!ItZtmN z)Np<|B#0|V=t|`zeRGcu6U=Txmt#XQcw6b5VzZS4$SW4L?euphmwc5o2pfz+kApnooGT!SpzyDWUDm}&}4EWu`xwh|M6L>?(-+% z-YV`_9!@mg4a(>21nu?p-4Qf9(I`I%4252Gkstr$MAM1x*gXXd;*oqS6(&bOJ945C zUp0_NJ$;p&ctm~xF##tUBhs%R8+w|ka-x!lQz7D9P$tr^b!2!ty6Kg8M9$FBE+!Z0 z*POEp;mKM{OC{Dkb|5F3FXHQvT|sB6%F}*??GQWBEb~VfNd@`{;OMS-=|nT1M&DmS zCyW4&)4ana^lS|lE#S`L1oRQWyw9(kXy!wC<4br3jYd>@Iz0_J*e|TSXqKSQk_r+= z0EcTQn)y)P{0e$g>(Cs^OHMQkp}eKJgiaU%tfG?VB;M*`XTIEuOwhe~i4nj?;1RBz zXa?IZ{+@G_dKv*d3Jd#SF6h_3=oin;#zG6Z@;yNd?x2(H0pe}law5q1Fe$R0M*v%a z3yjdN0d%#jHXSdYBJ0WBR2MD%0XoSsgSHetPG}B0R1cvvP@&0*CU3V;n=Z^gJ;gdE zrx8GXV8MaeW$1aGnBzp1R|Ktg&8~GPCz`xLl<Awv|4i4Q`a0@k;iViqa3r+TKs@$uKG$`*bVKQfEE(t!w>j# z3zie=Wuel*E}geS8uZ&s=!5{saZoCju9?u`p3UhIw7LdQIiw|iPi#Zy8g1KNLqGcz z=m7zBbfS5jeJ9-|bf?M;P8RK_uT1emh$@>#06A16!PR*%_pyd`Ek~8LGuIXu)D1)H zZsB95)Cuv%d5$XU=6ETBE(kh7Cs`0Q1!~T*3N;55abAblH|{7RD>FdP3u|cvaLVf_ zbY--s-vf)m^}HnXHy6<3OZ>4#X&~&E^ha+Z^u5qgmWJ~>P*+I@_IPE>H{7-e%kujmDvi#Ag*Em5#WR;6H3=w*FVgog3((YNh6;|B8V@J6=m_j{#x1`;(1#+zI zdtDE;8^_djO$@Yqg*(C!xOuHD!Z;wTZaFoydxb-ebtp7d=x(&-*ZEG6?uA8fW_3IK zar&ji;Y9-JUKq#Fy$)?l9JwTr?l%TG)(H-59$&a%&~@SxKcUhvN|xdevs(>-^tq{OMqtWo(?@OS%NmIo@`}Vp=MJ`?t_7BShwq2 z8RS@(v{uDCZpmg~KO{h#U3XCpYWFb8w)S2+8J*kB1p@*!AkM>OEwG4;6F<3;T{crq*L*d0#1@ zX|^|GearnCy0h*ppxL_Dtc~>YuHa{6*JEU?fxsJrKBD$8DxiHI9~XV`PzR%-E8*DzU-zjSSb} zCk+3=iCU&zXz%E)3g=Y8c?c9848K{dAWYG2;A|&o`|aVvmX0=j3Q|BKKTPOS$kE-#@EhJmIq`Z9;~ zyINjQB3H=+u0o_NAm`QhEwtE>&%N&viAjJ?6q1P!HBZnIznnL?gL%^lj)^?EWidhy zY32?HEgjr*#z%l|VEv||NklY5E6Wu`)tqoWVUh`r9NUq!Qh|qT< zD&rPZPV>zx^xeAsr{RRqXWTMUNN_c-eY%PS>-lK>z#@p>HHImRB^Pe54+DnkRQaG{wpP)**BS{+4aZ z{{YjFh|4RW8yGUpd$i8Hr!>-h3*A?WRR|BSUyI;GGaXVXp(i}M3uyC?fn&Pit9n$? z!^a=WeJ(vi1L4L1OU{O216}kj6a3VZ?QMtISX`jWV-4N;{gKc}xZgn|YT4<^Yxt_y zz`d+tEa@WjdykY&-qHNG?*nx9alhqXd}@N0Uk-Y(&OBrT13lo~>tLTr6WxGLH01<+ z+P~+9+5`x&R6yU%<0U|U9BM}2fgc81D;yN55LeS&1N7&8=;^x!+gs}?WwH``vlmbR zOT&$P{R!&UM3MB+=tMIcR@S17U}12DPeUSBYJna%Y_|o_7UtV24T)*uu{SNv?^)X};h6g9~kjA3P1t@+2=p0ia_OCgthL%Q?s8X8z7qirE%y$el{5}s^Z!`}3 zu&)r43gnOvJM~y!2aRk{?BXd~LsGpSD_KYtM(=$uLsu?BBO4UM=!?4*3+k(j)@>!Q zXu|08A^QT*Is4t7psiRF9KCdBWP}XE5Esy*dBi*t+98o}Otl_YvXF6#q@WwICw2wU zjw@M+!st2CJ#xO1T><=d-6q5^ddKjoks5i;3ZQukqi1fuBWTSEprI8&S=pukRV%#1 zBJ>NgK}BHvyaK3+ZU|g{z?}QO&_F9z013Kpjau2&t^h)t5OeP38#F;TFet)sFF$U> z=sQKeP+S45xb$rY(B)S_V=4qw_Xx=Z;utw)Fv1djTz%OTmdxB zhzDiis7)|-P1%yr(C-=C`(PMbfxD^^`nC_fbdrZBo!h1JTj-XV{2wB8&?LFpy*Bc5 zIp=;J>O`lI452$gMp$H}+5Is3*{iTz%R>KT-|=n;H&~)3p~t6Jygk={)>~-9w6^XE zTCRJ#tTYd^drN4ifQB~V0WU3wG(|hEWg*2X#3Ilvcuk~7J79J%%0h~Lg{MF>n>+w> zf~JxxLPx?~A$0O0R%>tC30kasZRGOT@RD$cmz=lIeo?g29D3Y{#w9y7ydVPLm&)a` zf>Vg6kZ0yZUJ?P+EI49vM_vWcj50vpv;`6qt~McQp)h*x)hfBX(s+JZF}D+x-T#1I zc*I@PREk#unk(@+D7y{Lx1+zZ*Fnqu=U~FHO^sby%Hg3HVwM%kLZT))Yaatb*GuNP zzUf`QB?9s=BZbiubizF%N2ibl5fGQj^CxJV+R4Yc+XWF2-^#==dP8#(iMj5=`zL7W z;GT}(2z^=Ism;@Cw)91U&OEF_P$I}wXp5vKup$DrJd8J0{|)q^y6+EaL?VErD9rH< z`2b63@GVu9)QnY3B6K*XbkIdtOPmMSN6sdmt{P|yCRm=E`3h=~gMYI&Xca`j_AtHV zHC;SHn*$@CBN4CzK+AiBBSIfv80hAXM8JYqZYQgIGsz7{Aij*>>1?5-BJ_{)D#W~b z6b=(iXWG$Q0lEMK*>{5oJ+C(h=!$`Uox5EUf#SXFL^B<3|AQm&cI2MkP$*mt^X>0t zCmQnyC;=z)=Eyf%uUww|wG_};(HqU1f~hwP)w)nP(HI=dXh#L~)SEek4z%zs|MzgC z1_ks-fTk5d#bqHcW`PJ;fUX9O6AjSgMiEXt6~^-rpkW12;Y2fi1|2jy>Y@{k3c8eE zon*eFoC$zdsGUv&Z9HtF9i|`pEA&|rtLKcpEY8r~n@#iWVFmCk2a7JDnT;TN&G&6| zqEUqMQdeVH;V?ks3ZP>XV&N+G1l@4ODfB1D#v?R*N2ZByJ>8I&d$AwhXdZDD!r|;* z#jNXjq86iKnGVOu2K1U>l-+1LpD8k5YhyP~G=Jd&{V}PBdJrjfYs? zH{VOpjeB;Yxk`ttFenm#gHKL0H~C?<9Wy9GS1-6%EbL-r`E?!?`6TX!Ox5~Jw}tK$ z&@_WGa7?!|D<>KabQ~0^#1;0eYy$uQ0x(HLK~%tnU5p~5b1^8wmXOwLp$7%@rvdr7 zqLU*h8b#J>X`s00qZK>3E;`YKr#a&;%MoW#ia~sVw@e)ay~?wnx(yA>)agqz12cg~ zXfWpIPULc`e6P@z5r?kloeE4H1ER^@AQ}{T$;4EM*`b}F9moiG8M-bWqWXcednCUW zT=>8NyVOe|r$S^cInm%s;+y@8Z7UcQx!4b&4|Uwt-a>P!5Yr!DLc3)l)sY=Beyk}Q zr+m?%h&vPj?HylnmVsuK+do~4vHBRGtwo1qQN50-W85l4KIESVgbsC2-sp_b7NZ-6 z6g0fy87z>;S}snDK(oIG=#=Q5-QiRp3W9#oK=<%egwr)Czdm5|VaP{>7FQu+pqZiU zyTr}McmD&r7oOx*h!|-0f)_n?P*t&OMrg4(EdtH%c+s2G28SbPEU9Yfx&c3=GG*S2 zOO0+(t)=2r+!4A0uZfZ~ggC>becV^zj*a>JY#xIbyi5eKK@E8G)tw;w{v@4EN=@j~$?|c+o8bU76~`O1sHD8vz*_^48%+ zZ%V3K&(OtVEen0%j=;YKXitG=n6KbcY&fT92eg}3e#=&2pxIvy`nNuR)rsQV&58(g znc@W=Lf;HB$LBMUh*_-G@)3B(q}odh0*gx+2_T(}MBuG_1h$KSI)G07uz&=|YHghi ljjk*gOZzY)EB&qi{U1K)rvZZmLs|d;002ovPDHLkV1mTG0r&s_ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/popup_menu_background.xml b/app/src/main/res/drawable/popup_menu_background.xml new file mode 100644 index 0000000000..9d8d27052e --- /dev/null +++ b/app/src/main/res/drawable/popup_menu_background.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/app/src/main/res/layout/grid_header.xml b/app/src/main/res/layout/grid_header.xml index 4688dbe6b6..c33ca95ef2 100644 --- a/app/src/main/res/layout/grid_header.xml +++ b/app/src/main/res/layout/grid_header.xml @@ -12,8 +12,12 @@ android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?android:attr/listPreferredItemHeightSmall" - android:paddingLeft="@dimen/material_generic" - android:paddingRight="@dimen/material_generic" + android:fontFamily="sans-serif-medium" + android:letterSpacing="0.02" + android:paddingLeft="@dimen/section_header_padding_start" + android:paddingStart="@dimen/section_header_padding_start" + android:paddingRight="@dimen/section_header_padding_start" + android:paddingEnd="@dimen/section_header_padding_start" android:textSize="@dimen/list_header_textsize"> diff --git a/app/src/main/res/layout/griditem.xml b/app/src/main/res/layout/griditem.xml index 1655cf7d7d..36a392986f 100644 --- a/app/src/main/res/layout/griditem.xml +++ b/app/src/main/res/layout/griditem.xml @@ -3,9 +3,7 @@ android:id="@+id/second" android:layout_width="match_parent" android:layout_height="170dp" - android:layout_margin="2dp" - android:background="@drawable/item_doc_grid" - android:foreground="@drawable/item_backgrund" + android:foreground="?android:attr/selectableItemBackground" android:focusable="true" android:nextFocusDown="@id/properties"> @@ -13,6 +11,11 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" + android:paddingTop="@dimen/grid_thumb_inset" + android:paddingStart="@dimen/grid_thumb_inset" + android:paddingLeft="@dimen/grid_thumb_inset" + android:paddingEnd="@dimen/grid_thumb_inset" + android:paddingRight="@dimen/grid_thumb_inset" android:paddingBottom="6dp"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_header.xml b/app/src/main/res/layout/list_header.xml index a8d4bffd3d..c33ca95ef2 100644 --- a/app/src/main/res/layout/list_header.xml +++ b/app/src/main/res/layout/list_header.xml @@ -12,8 +12,12 @@ android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?android:attr/listPreferredItemHeightSmall" - android:paddingLeft="@dimen/icon_width" - android:paddingRight="@dimen/icon_width" + android:fontFamily="sans-serif-medium" + android:letterSpacing="0.02" + android:paddingLeft="@dimen/section_header_padding_start" + android:paddingStart="@dimen/section_header_padding_start" + android:paddingRight="@dimen/section_header_padding_start" + android:paddingEnd="@dimen/section_header_padding_start" android:textSize="@dimen/list_header_textsize"> diff --git a/app/src/main/res/layout/main_frag.xml b/app/src/main/res/layout/main_frag.xml index 92f0b96603..29b173883e 100644 --- a/app/src/main/res/layout/main_frag.xml +++ b/app/src/main/res/layout/main_frag.xml @@ -25,6 +25,24 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 0d246815be..c9cb02d0ec 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -130,4 +130,38 @@ #262a3e + + + #F4F4F6 + #121212 + + #FFFFFF + #1E1E1E + #161616 + + #E4E5EA + #2E2E2E + #242424 + + #8A8A8E + #9AA0A6 + + #5F6368 + #C4C7C5 + + #ECECEC + #2A2A2A + #202020 + + #FFFFFF + #242424 + #0D0D0D + + #202124 + #FFFFFF + + #F1F1F1 + #2E2E2E + #1C1C1C + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index c9d87daca1..01eebe3a35 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -47,7 +47,7 @@ 10dp 48dp - 16sp + 13sp 22sp @@ -62,4 +62,19 @@ 18sp 24sp 8dp + + + 16dp + 12dp + 12dp + 12dp + 56dp + 32dp + 12dp + 8dp + 4dp + 18dp + + 18dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index e324453fe7..e63c64e5b2 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -24,6 +24,42 @@ #ffffff + + + + + + + + + @@ -86,6 +134,9 @@ #ffffff @style/custom_action_mode_dark @style/custom_action_mode_dark + @color/popup_surface_dark + @style/OverflowMenuRounded + @drawable/popup_menu_background