From 5c31ffac42cf561e43e34f6f0a47df8609678756 Mon Sep 17 00:00:00 2001 From: aheinri5 <Anna@netzkritzler.de> Date: Sat, 31 Oct 2020 12:43:44 +0100 Subject: [PATCH] Changes to the class structure and some new functions (will instead add more issues in the future, just getting used to workflow again) --- DESCRIPTION | 5 +- NAMESPACE | 5 +- R/accepted_input.R | 4 + R/analyse_xml.R | 294 ++++++++ R/create_gml_R6.R | 702 ------------------ R/create_vtu.R | 16 - R/{create_gml.R => export_gml.R} | 71 +- R/export_prj.R | 85 +++ R/export_vtu.R | 75 ++ R/generics.R | 8 + R/input_add_gml.R | 86 +++ R/input_add_prj.R | 135 ++++ R/input_add_vtu.R | 151 ++++ R/ogs6.R | 145 ++++ R/user_input.R | 224 ++++-- R/utils.R | 148 +++- R/validate_gml.R | 161 +++- .../HM_flow_free_expansion.pdf | Bin 0 -> 199414 bytes .../flow_free_expansion/cube_1x1x1.gml | 95 +++ .../flow_free_expansion/cube_1x1x1.vtu | 22 + .../flow_free_expansion/cube_1x1x1_quad.vtu | 22 + .../flow_free_expansion.prj | 268 +++++++ .../flow_free_expansion_pcs_0.pvd | 7 + ...w_free_expansion_pcs_0_ts_0_t_0.000000.vtu | 47 ++ ...expansion_pcs_0_ts_1000_t_10000.000000.vtu | 47 ++ .../playground/cube_1x1x1.vtu | 19 + .../playground/cube_1x1x1_quad.vtu | 22 + .../playground/x_quad_with_half_hole_q.vtu | 20 + man/GMLObject.Rd | 65 -- man/GMLPoint.Rd | 74 -- man/GMLPoints.Rd | 104 --- man/GMLPolyline.Rd | 64 -- man/GMLPolylines.Rd | 74 -- man/GMLSurface.Rd | 69 -- man/GMLSurfaceElement.Rd | 64 -- man/GMLSurfaces.Rd | 64 -- man/OGS6.Rd | 74 ++ man/add_opt_attr.Rd | 18 + man/add_opt_child.Rd | 18 + man/adopt_nodes.Rd | 16 + man/analyse_xml.Rd | 21 + man/as_node.Rd | 14 + man/as_node.data_array.Rd | 11 + man/as_node.r2ogs6_prj_medium_phase.Rd | 11 + man/as_node.r2ogs6_prj_property.Rd | 11 + man/check_for_obj_of_name.Rd | 17 + man/create_gml_from_obj.Rd | 19 - man/create_template_prj.Rd | 19 - man/export_xml_to_file.Rd | 8 +- man/generate_as_node_from_element.Rd | 18 + man/get_xml_encoding.Rd | 17 - man/gml_data_to_xml.Rd | 16 +- man/input_add_gml_obj.Rd | 16 + man/input_add_gml_points.Rd | 16 + man/input_add_gml_polylines.Rd | 16 + man/input_add_gml_surfaces.Rd | 16 + man/input_add_vtu_appended_data.Rd | 18 + man/input_add_vtu_obj.Rd | 31 + man/input_add_vtu_unstructured_grid.Rd | 18 + man/new_data_array.Rd | 21 + man/new_gml.Rd | 11 + man/new_ogs6.Rd | 25 + man/new_r2ogs6_prj_medium_phase.Rd | 16 + man/new_vtu.Rd | 22 + man/points_to_xml.Rd | 2 +- man/polylines_to_xml.Rd | 6 +- man/prj_data_to_xml.Rd | 14 + man/surfaces_to_xml.Rd | 6 +- man/validate_gml_data.Rd | 14 + man/validate_ogs6.Rd | 11 + man/validate_points.Rd | 7 +- man/validate_polylines.Rd | 16 + man/validate_surface_elements.Rd | 19 + man/validate_surfaces.Rd | 16 + ..._data_to_xml-open-paren-WIP-close-paren.Rd | 17 + man/vtu_data_to_xml.Rd | 17 + man/vtu_piece_to_xml.Rd | 21 + my_experimental_cube.gml => test.gml | 0 tests/testthat/test-create_gml.R | 95 --- tests/testthat/test-utils.R | 47 +- tests/testthat/test-validate_gml.R | 41 +- 81 files changed, 2711 insertions(+), 1634 deletions(-) create mode 100644 R/accepted_input.R create mode 100644 R/analyse_xml.R delete mode 100644 R/create_gml_R6.R delete mode 100644 R/create_vtu.R rename R/{create_gml.R => export_gml.R} (65%) create mode 100644 R/export_prj.R create mode 100644 R/export_vtu.R create mode 100644 R/generics.R create mode 100644 R/input_add_gml.R create mode 100644 R/input_add_prj.R create mode 100644 R/input_add_vtu.R create mode 100644 R/ogs6.R create mode 100644 inst/extdata/flow_free_expansion/HM_flow_free_expansion.pdf create mode 100644 inst/extdata/flow_free_expansion/cube_1x1x1.gml create mode 100644 inst/extdata/flow_free_expansion/cube_1x1x1.vtu create mode 100644 inst/extdata/flow_free_expansion/cube_1x1x1_quad.vtu create mode 100644 inst/extdata/flow_free_expansion/flow_free_expansion.prj create mode 100644 inst/extdata/flow_free_expansion/flow_free_expansion_pcs_0.pvd create mode 100644 inst/extdata/flow_free_expansion/flow_free_expansion_pcs_0_ts_0_t_0.000000.vtu create mode 100644 inst/extdata/flow_free_expansion/flow_free_expansion_pcs_0_ts_1000_t_10000.000000.vtu create mode 100644 inst/extdata/flow_free_expansion/playground/cube_1x1x1.vtu create mode 100644 inst/extdata/flow_free_expansion/playground/cube_1x1x1_quad.vtu create mode 100644 inst/extdata/flow_free_expansion/playground/x_quad_with_half_hole_q.vtu delete mode 100644 man/GMLObject.Rd delete mode 100644 man/GMLPoint.Rd delete mode 100644 man/GMLPoints.Rd delete mode 100644 man/GMLPolyline.Rd delete mode 100644 man/GMLPolylines.Rd delete mode 100644 man/GMLSurface.Rd delete mode 100644 man/GMLSurfaceElement.Rd delete mode 100644 man/GMLSurfaces.Rd create mode 100644 man/OGS6.Rd create mode 100644 man/add_opt_attr.Rd create mode 100644 man/add_opt_child.Rd create mode 100644 man/adopt_nodes.Rd create mode 100644 man/analyse_xml.Rd create mode 100644 man/as_node.Rd create mode 100644 man/as_node.data_array.Rd create mode 100644 man/as_node.r2ogs6_prj_medium_phase.Rd create mode 100644 man/as_node.r2ogs6_prj_property.Rd create mode 100644 man/check_for_obj_of_name.Rd delete mode 100644 man/create_gml_from_obj.Rd delete mode 100644 man/create_template_prj.Rd create mode 100644 man/generate_as_node_from_element.Rd delete mode 100644 man/get_xml_encoding.Rd create mode 100644 man/input_add_gml_obj.Rd create mode 100644 man/input_add_gml_points.Rd create mode 100644 man/input_add_gml_polylines.Rd create mode 100644 man/input_add_gml_surfaces.Rd create mode 100644 man/input_add_vtu_appended_data.Rd create mode 100644 man/input_add_vtu_obj.Rd create mode 100644 man/input_add_vtu_unstructured_grid.Rd create mode 100644 man/new_data_array.Rd create mode 100644 man/new_gml.Rd create mode 100644 man/new_ogs6.Rd create mode 100644 man/new_r2ogs6_prj_medium_phase.Rd create mode 100644 man/new_vtu.Rd create mode 100644 man/prj_data_to_xml.Rd create mode 100644 man/validate_gml_data.Rd create mode 100644 man/validate_ogs6.Rd create mode 100644 man/validate_polylines.Rd create mode 100644 man/validate_surface_elements.Rd create mode 100644 man/validate_surfaces.Rd create mode 100644 man/vtu_appended_data_to_xml-open-paren-WIP-close-paren.Rd create mode 100644 man/vtu_data_to_xml.Rd create mode 100644 man/vtu_piece_to_xml.Rd rename my_experimental_cube.gml => test.gml (100%) delete mode 100644 tests/testthat/test-create_gml.R diff --git a/DESCRIPTION b/DESCRIPTION index 9cc1085..7c6f9ed 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -23,5 +23,8 @@ Imports: tibble, R6, stringr, - readr + readr, + assertthat, + crayon, + snakecase RoxygenNote: 7.1.1 diff --git a/NAMESPACE b/NAMESPACE index ad776bc..b2796f9 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,7 +1,8 @@ # Generated by roxygen2: do not edit by hand -export(export_xml_to_file) -export(gml_data_to_xml) +export(input_add_vtu_appended_data) +export(input_add_vtu_obj) +export(input_add_vtu_unstructured_grid) export(points_to_xml) export(polylines_to_xml) export(surfaces_to_xml) diff --git a/R/accepted_input.R b/R/accepted_input.R new file mode 100644 index 0000000..3d2d951 --- /dev/null +++ b/R/accepted_input.R @@ -0,0 +1,4 @@ +#This is a helper script providing an overview of some accepted input parameters. + +#============================== .vtu ================================ +vtu_appended_data_valid_encoding_types <- list("binary", "base64") \ No newline at end of file diff --git a/R/analyse_xml.R b/R/analyse_xml.R new file mode 100644 index 0000000..0327e8b --- /dev/null +++ b/R/analyse_xml.R @@ -0,0 +1,294 @@ +#This is a helper function which can be used to combat missing documentation. + +#Benchmark HydroMechanics: +#analyse_xml("D:\\Programme\\OpenGeoSys\\ogs-master-Tests-Data-HydroMechanics/", "\\.vtu$", "VTKFile") + +#Personal playground: +#analyse_xml("./inst/extdata/flow_free_expansion/playground/", "\\.vtu$", "VTKFile") + +#' analyse_xml +#' @description This is a helper function which can be used to combat missing documentation. It looks +#' for files in a path which match the given pattern and then attempts to parse them as XML. +#' For each occurence of the specified element, it documents its attributes and direct children and prints a little +#' summary of its findings at the end. +#' @param path A path +#' @param pattern A regex pattern +#' @param element_name The name of the XML element to look for +analyse_xml <- function(path, pattern, element_name) { + + xml_files <- list.files(path = path, pattern = pattern, recursive = TRUE) + + #Think about input... + + files_found <- length(xml_files) + + valid_files_count <- 0 + valid_files_names <- character() + + invalid_files_count <- 0 + invalid_files_names <- character() + + total_matches <- 0 + + attribute_name_counts <- list() + child_exists_counts <- list() + child_total_counts <- list() + + + + if(length(xml_files) == 0) { + stop(paste("No files found for defined pattern ", pattern), call. = FALSE) + } + + for(i in seq_len(length(xml_files))){ + #If there's invalid XML somewhere comment out the following for debugging: + + skip_to_next <- FALSE + + out<- tryCatch( + { + xml_doc <- xml2::read_xml(paste(path, xml_files[[i]], sep = ""), encoding="ISO-8859-1") + }, + + error = function(cond){ + invalid_files_count <<- invalid_files_count + 1 + invalid_files_names <<- c(invalid_files_names, basename(xml_files[[i]])) + skip_to_next <<- TRUE + } + ) + + if(skip_to_next){ + next + } + + valid_files_count <- valid_files_count + 1 + valid_files_names <- c(valid_files_names, basename(xml_files[[i]])) + + doc_matches <- xml2::xml_find_all(xml_doc, paste("//", element_name, sep = "")) + total_matches <- total_matches + length(doc_matches) + + #Get attribute names and counts + for (j in seq_len(length(doc_matches))){ + attr_names <- names(xml2::xml_attrs(doc_matches[[j]])) + + for(k in seq_len(length(attr_names))) { + if(!attr_names[[k]] %in% names(attribute_name_counts)) { + attribute_name_counts[[attr_names[[k]]]] <- 1 + }else{ + attribute_name_counts[[attr_names[[k]]]] <- attribute_name_counts[[attr_names[[k]]]] + 1 + } + } + } + + #Get child names and counts + for (j in seq_len(length(doc_matches))){ + children <- xml2::xml_children(doc_matches[[j]]) + + first_found <- list() + + for(k in seq_len(length(children))) { + + child_name <- xml2::xml_name(children[[k]]) + + if(!child_name %in% first_found){ + + first_found <- c(first_found, child_name) + + + if(!child_name %in% names(child_exists_counts)) { + child_exists_counts[[child_name]] <- 1 + }else{ + child_exists_counts[[child_name]] <- child_exists_counts[[child_name]] + 1 + } + } + + if(!child_name %in% names(child_total_counts)) { + child_total_counts[[child_name]] <- 1 + }else{ + child_total_counts[[child_name]] <- child_total_counts[[child_name]] + 1 + } + } + } + } + + if(invalid_files_count > 0) { + cat("I skipped ", invalid_files_count, " malformed XML files matching your search pattern:\n", sep = "") + for(i in seq_len(length(invalid_files_names))){ + cat(invalid_files_names[[i]], "\n") + } + } + + cat("\nI parsed ", valid_files_count, " valid XML files matching your search pattern:\n", sep = "") + + for(i in seq_len(length(valid_files_names))){ + cat(valid_files_names[[i]], "\n") + } + + cat("\nIn total, I found ", total_matches, " elements named ", element_name, ".\n", sep = "") + + #List attributes + + if(length(attribute_name_counts) > 0) { + cat("\nThese are the attributes I found:\n") + + attr_name_count_vector <- unlist(attribute_name_counts, use.names=FALSE) + attr_name_occ_vector <- unlist(lapply(attribute_name_counts, function(x){round((x / total_matches), 2)})) + + attr_df <- data.frame(names(attribute_name_counts), + attr_name_count_vector, + attr_name_occ_vector) + + names(attr_df) <- c("name", "occ", "P(occ)") + rownames(attr_df) <- seq(1, length(attribute_name_counts)) + + print(attr_df) + } + + #List child elements + + if(length(child_exists_counts) > 0) { + + cat("\nThese are the child elements I found:\n") + + child_ex_count_vector <- unlist(child_exists_counts, use.names=FALSE) + child_ex_occ_vector <- unlist(lapply(child_exists_counts, function(x){round((x / total_matches), 2)})) + + child_tot_count_vector <- unlist(child_total_counts, use.names=FALSE) + child_tot_occ_vector <- unlist(lapply(child_total_counts, function(x){round((x / total_matches), 2)})) + + child_df <- data.frame(names(child_exists_counts), + child_ex_count_vector, + child_ex_occ_vector, + child_tot_count_vector, + child_tot_occ_vector) + + names(child_df) <- c("name", "ex_occ", "P(occ)", "total", "total_mean") + rownames(child_df) <- seq(1, length(child_exists_counts)) + + print(child_df) + } + + #Think about output... + return(invisible()) +} + + +#Experimental stuff +generate_from_element <- function(element_name, attrs, children) { + + +} + +generate_class_from_element <- function(element_name, class_name = NULL) { + + #Generate name of new class from element name if class_name is not specified + if(is.null(class_name)){ + class_name <- snakecase::to_any_case(element_name, "snake") + } + + + generated_class <- structure(list(), class = class_name) + + return(generated_class) +} + +generate_validator_from_element <- function() { + +} + + +#cat(generate_as_node_from_element("DataArray", c("SexyAttr"))) + +#'generate_as_node_from_element +#'@description Generates a method for the generic function as_node based on an XML element +#'@param element_name The name of the XML element to base the function on +#'@param attrs Optional: A list of element attributes +#'@param children Optional: A list of element children +generate_as_node_from_element <- function(element_name, + attrs = NULL, opt_attrs = NULL, + children = NULL, opt_children = NULL) { + + attrs_snake_names <- sapply(attrs, snakecase::to_any_case, case = "snake") + children_snake_names <- sapply(children, snakecase::to_any_case, case = "snake") + + element_snake_name <- snakecase::to_any_case(element_name, "snake") + + f_name <- paste0("as_node.", element_snake_name) + + #Is the attribute optional? + optional = TRUE + + #Is the child a parent itself? + is_parent = TRUE + + func_str <- paste0(f_name, " <- function(obj) {\n") + + node_name <- paste0(element_snake_name, "_node") + + func_str <- paste0(func_str, "\t", node_name, " <- list(", element_name," = structure(list())\n") + + #Add attributes + for(i in seq_len(length(attrs))){ + nattr <- attrs_snake_names[[i]] + attr <- attrs[[i]] + + if(attr %in% opt_attrs) { + func_str <- paste0(func_str, "\t", node_name, " <- add_opt_attr(", node_name, + ", obj$", nattr, ", '", attr, "')\n") + }else{ + func_str <- paste0(func_str, "\t", "attributes(", node_name,")[['", attr, "']] <- obj$", + nattr, "\n") + } + } + + #Add children + for(i in seq_len(length(children))){ + child_snake <- children_snake_names[[i]] + child <- children[[i]] + + + if(child %in% opt_children) { + if(is_parent){ + func_str <- paste0(func_str, "\t", node_name, " <- add_opt_child(", node_name, + ", obj$", child_snake, ", '", child, "')\n") + }else{ + func_str <- paste0(func_str, "\t", node_name, " <- add_opt_child(", node_name, + ", obj$", child_snake, ")\n") + } + }else{ + #...(WIP) + } + } + + func_str <- paste0(func_str, "\t", "return(", node_name, ")\n") + + func_str <- paste0(func_str, "}") + + return(invisible(func_str)) +} + +#============================== HELPERS FOR analyse_xml ================================ + +#'get_optional +#'@description Helper function to get optional attributes or children from a vector of names and a +#' vector of occurrence probabilities +#' @param name_counts +#' @param occurence_probabilities +get_optional <- function(names, occurence_probabilities){ + optional <- character() + + for(i in seq_len(length(names))) { + if(occurence_probabilities[[i]] != 1) { + optional <- c(optional, names[[i]]) + } + } + + return(optional) +} + + +#' +#'@description ... +child_is_parent <- function() { + +} diff --git a/R/create_gml_R6.R b/R/create_gml_R6.R deleted file mode 100644 index e08168a..0000000 --- a/R/create_gml_R6.R +++ /dev/null @@ -1,702 +0,0 @@ -#This script contains a lot of R6 classes describing various .gml elements. - -#You can't build a complete .gml file from this (yet?)!!! Refer to the functions in create_gml instead. -#The aforementioned functions are also way more practical to create a .gml file. -#This script was really more of an exercise for getting used to handling XML data and R6 classes. - -#============================== Class export functionality ================================ - -#' Creates a .gml XML file based on an GML object -#' @param gml_object The specified GML object (of class GMLObject) -#' @param file_name The name of the file the XML will be written to -#' @return WIP -# @examples -# create_gml_from_obj(GMLPrefabCube$new(), "cube_1x1x1_new.gml") -# create_gml_from_obj(GMLPrefabSquare$new(), "square_1x1_new.gml") -create_gml_from_obj <- function(gml_object, file_name) { - doc <- xml2::as_xml_document(gml_object$as_node()) - xml2::write_xml(doc, file_name, options = "format", encoding="ISO-8859-1") -} - - -#============================== OpenGeoSysGLI wrapper class ================================ - -#' Class representing a GML object -#' -#' @param input_file_name An XML (.xml or, in the case of OpenGeoSys, .prj) file -#' @return The encoding of the input file -#'Class describing an entire GML object with a reference file name, points, polylines and surfaces -GMLObject <- R6::R6Class("GMLObject", - public = list( - initialize = function(name = NULL, points = NULL, polylines = NULL, surfaces = NULL, - xmlns_xsi = "http://www.w3.org/2001/XMLSchema-instance", - xmlns_ogs = "http://www.opengeosys.org") { - stopifnot(is.character(xmlns_xsi), length(xmlns_xsi) == 1) - stopifnot(is.character(xmlns_ogs), length(xmlns_ogs) == 1) - stopifnot(is.character(name), length(name) == 1) - stopifnot(checkmate::checkList(points, types = "GMLPoints"), TRUE) - stopifnot(checkmate::checkList(polylines, types = "GMLPolylines"), TRUE) - stopifnot(checkmate::checkList(surfaces, types = "GMLSurfaces"), TRUE) - - #(add more checks here) - - private$.xmlns_xsi <- xmlns_xsi - private$.xmlns_ogs <- xmlns_ogs - private$.name <- name - private$.points <- points - private$.polylines <- polylines - private$.surfaces <- surfaces - }, - - as_node = function(...) { - return(list(OpenGeoSysGLI = structure(list(c(list(name = private$.name), - private$.points$as_node(), - private$.polylines$as_node(), - private$.surfaces$as_node())), - "xmlns:xsi" = private$.xmlns_xsi, - "xmlns:ogs" = private$.xmlns_ogs))) - } - ), - - active = list( - xmlns_xsi = function(value) { - if (missing(value)) { - private$.xmlns_xsi - } else { - stop("`$xmlns_xsi` is read only", call. = FALSE) - } - }, - - xmlns_ogs = function(value) { - if (missing(value)) { - private$.xmlns_ogs - } else { - stop("`$xmlns_ogs` is read only", call. = FALSE) - } - }, - - name = function(value) { - if (missing(value)) { - private$.name - } else { - stop("`$name` is read only", call. = FALSE) - } - }, - - points = function(value) { - if (missing(value)) { - private$.points - } else { - stop("`$points` is read only", call. = FALSE) - } - }, - - polylines = function(value) { - if (missing(value)) { - private$.polylines - } else { - stop("`$polylines` is read only", call. = FALSE) - } - }, - - surfaces = function(value) { - if (missing(value)) { - private$.surfaces - } else { - stop("`$surfaces` is read only", call. = FALSE) - } - } - ), - - private = list( - .xmlns_xsi = NULL, - .xmlns_ogs = NULL, - .name = NULL, - .points = NULL, - .polylines = NULL, - .surfaces = NULL - ) -) - - -#============================== Point & Points ================================ - - -#'Class describing a single point -#' -GMLPoint <- R6::R6Class("GMLPoint", - public = list( - - initialize = function(id = 0, coordinates = c(0, 0, 0), is_origin = FALSE) { - stopifnot(is.numeric(id), length(id) == 1) - stopifnot(is.numeric(coordinates), length(coordinates) > 0) - stopifnot(is.logical(is_origin), length(is_origin) == 1) - - private$.id <- id - private$.coordinates <- coordinates - private$.dim <- length(private$.coordinates) - private$.is_origin <- is_origin - }, - - as_list = function(...) { - point_list <- list(id = private$.id, - x = private$.coordinates[1], y = private$.coordinates[2], z = private$.coordinates[3]) - - if(private$.is_origin){ - point_list <- c(point_list, name = "origin") - } - - return(point_list) - }, - - as_node = function(...){ - if(private$.is_origin){ - return(list(point = structure(list(), id = private$.id, - x = private$.coordinates[1], y = private$.coordinates[2], z = private$.coordinates[3], - name = "origin"))) - }else{ - return(list(point = structure(list(), id = private$.id, - x = private$.coordinates[1], y = private$.coordinates[2], z = private$.coordinates[3]))) - } - }, - - print = function(...) { - cat("GMLPoint: \n") - cat(" ID: ", private$.id, "\n", sep = "") - cat(" Coordinates: ", private$.coordinates,"\n", sep = "\t") - cat(" Dimension: ", private$.dim, "\n", sep = "") - cat(" Is origin: ", private$.is_origin, "\n", sep = "") - - invisible(self) - } - ), - - active = list( - id = function(value) { - if (missing(value)) { - private$.id - } else { - stop("`$id` is read only", call. = FALSE) - } - }, - - coordinates = function(value) { - if (missing(value)) { - private$.coordinates - } else { - stop("`$coordinates` is read only", call. = FALSE) - } - }, - - dim = function(value) { - if (missing(value)) { - private$.dim - } else { - stop("`$dim` is read only", call. = FALSE) - } - }, - - is_origin = function(value) { - if (missing(value)) { - private$.is_origin - } else { - stop("`$is_origin` is read only", call. = FALSE) - } - } - ), - - private = list( - .id = NULL, - .coordinates = NULL, - .dim = NULL, - .is_origin = NULL - ) -) - - -#'Class describing a set of points -#' -GMLPoints <- R6::R6Class("GMLPoints", - public = list( - initialize = function(gml_points) { - stopifnot(checkmate::checkList(gml_points, types = "GMLPoint"), TRUE) - private$.ids <- self$validate_ids(gml_points) - self$validate_dim(gml_points) - self$validate_coordinates(gml_points) - - private$.gml_points <- gml_points - }, - - validate_ids = function(gml_points){ - ids = vector() - - for(i in 1:length(gml_points)){ - if(is.element(gml_points[[i]]$id, ids)){ - stop("Duplicate point IDs detected", call. = FALSE) - }else{ - ids <- c(ids, gml_points[[i]]$id) - } - } - return(ids) - }, - - validate_dim = function(gml_points) { - for(i in 2:length(gml_points)){ - if(gml_points[[1]]$dim != gml_points[[i]]$dim){ - stop("Point dimensions not eqal to each other", call. = FALSE) - } - } - }, - - validate_coordinates = function(gml_points) { - for(i in 1:(length(gml_points)-1)){ - for(j in (i+1):length(gml_points)){ - if(identical(gml_points[[i]]$coordinates, gml_points[[j]]$coordinates)){ - stop("Overlapping points (with the same coordinates) detected", call. = FALSE) - } - } - } - }, - - as_list = function(...) { - points_list <- list() - - for(i in 1:length(private$.gml_points)){ - points_list <- c(points_list, list(point=private$.gml_points[[i]]$as_list())) - } - - return(points_list) - }, - - as_node = function(...) { - points_node <- list(points = list()) - - for(i in 1:length(private$.gml_points)){ - points_node[[1]] <- c(points_node[[1]], private$.gml_points[[i]]$as_node()) - } - - return(points_node) - }, - - print = function(...) { - cat("GMLPoints: \n") - cat("", "id", "x", "y", "z", "name", "\n", sep = "\t") - for(i in 1:length(private$.gml_points)) { - point_list <- private$.gml_points[[i]]$as_list() - cat("", unlist(point_list), "\n", sep = "\t") - } - invisible(self) - } - - ), - - active = list( - ids = function(value) { - if (missing(value)) { - private$.ids - } else { - stop("`$ids` is read only", call. = FALSE) - } - }, - - gml_points = function(value) { - if (missing(value)) { - private$.gml_points - } else { - stop("`$gml_points` is read only", call. = FALSE) - } - } - ), - - private = list( - .ids = NULL, - .gml_points = NULL - ) -) - - -#============================== Polyline & Polylines ================================ - - -#'Class describing a single polyline -GMLPolyline <- R6::R6Class("GMLPolyline", - public = list( - - initialize = function(id = 0, name = "front_left", point1 = 0, point2 = 1) { - stopifnot(is.numeric(id), length(id) == 1) - stopifnot(is.character(name), length(name) == 1) - stopifnot(is.numeric(point1), length(point1) == 1) - stopifnot(is.numeric(point2), length(point2) == 1) - stopifnot(point1 != point2) - - private$.id <- id - private$.name <- name - private$.point1 <- point1 - private$.point2 <- point2 - }, - - as_node = function(...) { - return(list(polyline = structure(list(pnt = list(private$.point1), pnt = list(private$.point2)), - id = private$.id, name = private$.name))) - }, - - print = function(...) { - cat("GMLPolyline: \n") - cat(" ID: ", private$.id, "\n", sep = "") - cat(" Name: ", private$.name,"\n",sep = "") - cat(" Point 1: ", private$.point1, "\n", sep = "") - cat(" Point 2: ", private$.point2, "\n", sep = "") - invisible(self) - } - ), - - active = list( - id = function(value) { - if (missing(value)) { - private$.id - } else { - stop("`$id` is read only", call. = FALSE) - } - }, - - name = function(value) { - if (missing(value)) { - private$.name - } else { - stop("`$name` is read only", call. = FALSE) - } - }, - - point1 = function(value) { - if (missing(value)) { - private$.point1 - } else { - stop("`$point1` is read only", call. = FALSE) - } - }, - - point2 = function(value) { - if (missing(value)) { - private$.point2 - } else { - stop("`$point2` is read only", call. = FALSE) - } - } - ), - - private = list( - .id = NULL, - .name = NULL, - .point1 = NULL, - .point2 = NULL - ) -) - - -#'Class describing a set of polylines -#' -GMLPolylines <- R6::R6Class("GMLPolylines", - public = list( - initialize = function(gml_polylines) { - stopifnot(checkmate::checkList(gml_polylines, types = "GMLPolyline"), TRUE) - self$validate_polylines(gml_polylines) - - private$.ids <- self$validate_ids(gml_polylines) - private$.gml_polylines <- gml_polylines - }, - - validate_ids = function(gml_polylines){ - ids = vector() - - for(i in 1:length(gml_polylines)){ - if(is.element(gml_polylines[[i]]$id, ids)){ - stop("Duplicate polyline IDs detected", call. = FALSE) - }else{ - ids <- c(ids, gml_polylines[[i]]$id) - } - } - return(ids) - }, - - validate_polylines = function(gml_polylines) { - for(i in 1:(length(gml_polylines)-1)){ - for(j in (i+1):length(gml_polylines)) { - if((gml_polylines[[i]]$point1 == gml_polylines[[j]]$point1 && - gml_polylines[[i]]$point2 == gml_polylines[[j]]$point2) || - (gml_polylines[[i]]$point1 == gml_polylines[[j]]$point2 && - gml_polylines[[i]]$point2 == gml_polylines[[j]]$point1) - ){ - stop("Overlapping polylines detected", call. = FALSE) - } - } - } - }, - - as_node = function(...){ - polylines_node <- list(polylines = list()) - - for(i in 1:length(private$.gml_polylines)){ - polylines_node[[1]] <- c(polylines_node[[1]], private$.gml_polylines[[i]]$as_node()) - } - - return(polylines_node) - } - ), - - active = list( - ids = function(value) { - if (missing(value)) { - private$.ids - } else { - stop("`$ids` is read only", call. = FALSE) - } - }, - - gml_polylines = function(value) { - if (missing(value)) { - private$.gml_polylines - } else { - stop("`$gml_polylines` is read only", call. = FALSE) - } - } - ), - - private = list( - .ids = NULL, - .gml_polylines = NULL - ) -) - - -#============================== Surface & Surfaces ================================ - - -#'Class describing a single surface element (using 3 point IDs) -GMLSurfaceElement <- R6::R6Class("GMLSurfaceElement", - public = list( - initialize = function(p1 = 0, p2 = 1, p3 = 2) { - stopifnot(is.numeric(p1), length(p1) == 1) - stopifnot(is.numeric(p2), length(p2) == 1) - stopifnot(is.numeric(p3), length(p3) == 1) - stopifnot(p1 != p2, p1 != p3, p2 != p3) - - private$.p1 <- p1 - private$.p2 <- p2 - private$.p3 <- p3 - }, - - as_list = function(...) { - return(list(p1 = private$.p1, p2 = private$.p2, p3 = private$.p3)) - }, - - as_node = function(...){ - return(list(element = structure(list(), p1 = private$.p1, p2 = private$.p2, p3 = private$.p3))) - } - ), - - active = list( - p1 = function(value) { - if (missing(value)) { - private$.p1 - } else { - stop("`$p1` is read only", call. = FALSE) - } - }, - - p2 = function(value) { - if (missing(value)) { - private$.p2 - } else { - stop("`$p2` is read only", call. = FALSE) - } - }, - - p3 = function(value) { - if (missing(value)) { - private$.p3 - } else { - stop("`$p3` is read only", call. = FALSE) - } - } - ), - - private = list( - .p1 = NULL, - .p2 = NULL, - .p3 = NULL - ) -) - - -#'Class describing a single surface (using 2 GMLSurfaceElements) -GMLSurface <- R6::R6Class("GMLSurface", - public = list( - - initialize = function(id = 0, name = "left", - gml_surface_element1 = GMLSurfaceElement$new(), - gml_surface_element2 = GMLSurfaceElement$new(p3 = 3)) { - stopifnot(is.numeric(id), length(id) == 1) - stopifnot(is.character(name), length(name) == 1) - - #check type of surface elements?? - - self$validate_elements(gml_surface_element1, gml_surface_element2) - - private$.id <- id - private$.name <- name - private$.element1 <- gml_surface_element1 - private$.element2 <- gml_surface_element2 - }, - - validate_elements = function (gml_surface_element1, gml_surface_element2) { - elem_list1 <- gml_surface_element1$as_list() - elem_list2 <- gml_surface_element2$as_list() - equal_count <- 0 - - for(i in 1:length(elem_list1)) { - for(j in 1:length(elem_list2)) { - if(elem_list1[[i]] == elem_list2[[j]]) { - equal_count <- equal_count + 1 - break - } - } - } - - if(equal_count != 2) { - stop("Invalid surface detected", call. = FALSE) - } - }, - - as_node = function() { - return(list(surface = structure(c(private$.element1$as_node(), private$.element2$as_node()), - id = private$.id, name = private$.name))) - } - ), - - active = list( - id = function(value) { - if (missing(value)) { - private$.id - } else { - stop("`id` is read only", call. = FALSE) - } - }, - - name = function(value) { - if (missing(value)) { - private$.name - } else { - stop("`name` is read only", call. = FALSE) - } - }, - - element1 = function(value) { - if (missing(value)) { - private$.element1 - } else { - stop("`element1` is read only", call. = FALSE) - } - }, - - element2 = function(value) { - if (missing(value)) { - private$.element2 - } else { - stop("`$element2` is read only", call. = FALSE) - } - } - ), - - private = list( - .id = NULL, - .name = NULL, - .element1 = NULL, - .element2 = NULL - ) -) - - -#'Class describing a set of surfaces -GMLSurfaces <- R6::R6Class("GMLSurfaces", - public = list( - - initialize = function(gml_surfaces) { - stopifnot(checkmate::checkList(gml_surfaces, types = "GMLSurface"), TRUE) - private$.ids <- self$validate_ids(gml_surfaces) - #validation of surfaces is a bit more difficult, there is no method for it yet! - - private$.gml_surfaces <- gml_surfaces - }, - - validate_ids = function(gml_surfaces){ - ids = vector() - - for(i in 1:length(gml_surfaces)){ - if(is.element(gml_surfaces[[i]]$id, ids)){ - stop("Duplicate surface IDs detected", call. = FALSE) - }else{ - ids <- c(ids, gml_surfaces[[i]]$id) - } - } - return(ids) - }, - - as_node = function(...){ - surfaces_node <- list(surfaces = list()) - - for(i in 1:length(private$.gml_surfaces)){ - surfaces_node[[1]] <- c(surfaces_node[[1]], private$.gml_surfaces[[i]]$as_node()) - } - - return(surfaces_node) - } - ), - - active = list( - ids = function(value) { - if (missing(value)) { - private$.ids - } else { - stop("`ids` is read only", call. = FALSE) - } - }, - - gml_surfaces = function(value) { - if (missing(value)) { - private$.gml_surfaces - } else { - stop("`gml_surfaces` is read only", call. = FALSE) - } - } - ), - - private = list( - .ids = NULL, - .gml_surfaces = NULL - ) -) - -#============================== Shared functions ================================ - -#Helper function to check for the existence of identical objects in a list -# @param object_list The list to check for duplicates -# @param object_name Which objects the list consists of (for better error messages) -# @param warn_only Should function throw error or only a warning? -# @examples -# check_for_duplicates(list(3, 0, 4), "point IDs") -# check_for_duplicates(list(0, 0), "point IDs") -# check_for_duplicates(list("no", "this", "is", "patrick"), "point names") -# check_for_duplicates(list("no", "this", "is", "patrick", "patrick"), "point names", TRUE) -check_for_duplicates <- function(object_list, object_name = NA, warn_only = FALSE) { - for(i in 1:(length(object_list)-1)) { - for(j in (i+1):length(object_list)) { - if(object_list[[i]] == object_list[[j]]) { - if(warn_only){ - warning(c("Duplicate ", object_name, " detected"), call. = FALSE) - }else{ - stop(c("Duplicate ", object_name, " detected"), call. = FALSE) - } - } - } - } -} \ No newline at end of file diff --git a/R/create_vtu.R b/R/create_vtu.R deleted file mode 100644 index 1befbde..0000000 --- a/R/create_vtu.R +++ /dev/null @@ -1,16 +0,0 @@ -#This script contains various functions to turn data for a .vtu file into the correct XML format - -vtu_data_to_xml <- function() { - - -} - - - -vtu_piece_to_xml <- function(n_points, n_cells, point_data, cell_data, points, cells) { - piece_node <- list(piece = structure(list(), - NumberOfPoints = 0, - NumberOfCells = 0)) - return(xml2::as_xml_document(piece_node)) -} - diff --git a/R/create_gml.R b/R/export_gml.R similarity index 65% rename from R/create_gml.R rename to R/export_gml.R index 4fa6a13..f9265d9 100644 --- a/R/create_gml.R +++ b/R/export_gml.R @@ -1,38 +1,31 @@ #This script contains various functions to turn data for a .gml file into the correct XML format -#' Export function -#' @param xml_data The .gml data (already in XML friendly format) -#' @param file_name The name of the .gml file to be written -# @examples -# export_xml_to_file(my_gml) -#' @export -export_xml_to_file <- function(xml_data, file_name) { - doc <- xml2::as_xml_document(xml_data) - xml2::write_xml(doc, file_name, options = "format", encoding="ISO-8859-1") - invisible() -} - -#' Wrapper function to create a XML document based on the user input data -#' @param geo_name The name of the geometry specified by the user -#' @param points_tibble A tibble containing points -#' @param polylines_list A list containing polylines -#' @param surfaces_list A list containing surfaces +#' Wrapper function to create a .gml XML document based on the user input data +#' @param gml_obj A gml class object #' @return A XML document ready for export to a file # @examples (WIP) -#' @export -gml_data_to_xml <- function(geo_name, points_tibble, polylines_list, surfaces_list) { +gml_data_to_xml <- function(gml_obj) { - #data_node <- xml2::read_xml('<OpenGeoSysGLI xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogs="http://www.opengeosys.org"/>') + validate_gml_data(gml_obj) data_node <- xml2::xml_new_root(.value = "OpenGeoSysGLI", "xmlns:xsi" = "http://www.w3.org/2001/XMLSchema-instance", "xmlns:ogs" = "http://www.opengeosys.org") - xml2::xml_add_child(data_node, xml2::as_xml_document(list(name = list(geo_name)))) - xml2::xml_add_child(data_node, points_to_xml(points_tibble)) - xml2::xml_add_child(data_node, polylines_to_xml(polylines_list)) - xml2::xml_add_child(data_node, surfaces_to_xml(surfaces_list)) + xml2::xml_add_child(data_node, xml2::as_xml_document(list(name = list(gml_obj$geometry_name)))) + + if(!is.null(gml_obj$points)){ + xml2::xml_add_child(data_node, points_to_xml(gml_obj$points)) + } + + if(!is.null(gml_obj$polylines)){ + xml2::xml_add_child(data_node, polylines_to_xml(gml_obj$polylines)) + } + + if(!is.null(gml_obj$surfaces)){ + xml2::xml_add_child(data_node, surfaces_to_xml(gml_obj$surfaces)) + } return(data_node) } @@ -70,21 +63,21 @@ points_to_xml <- function(point_tibble) { } #' Turns a list of polylines into an XML node -#' @param polyline_list The specified list +#' @param polylines A list of polylines #' @return An XML node containing the polylines #' @examples #' my_list <- list(list(name = "front_left", c(0, 1)), list(name = "front_right", c(4, 5))) #' polylines_node <- polylines_to_xml(my_list) #' @export -polylines_to_xml <- function(polyline_list) { +polylines_to_xml <- function(polylines) { polylines_node <- list(polylines = list()) - for(i in 1:length(polyline_list)){ + for(i in 1:length(polylines)){ pnt_list <- list() - for(j in 1:length(polyline_list[[i]][[2]])) { - pnt_list <- c(pnt_list, list(pnt = list(polyline_list[[i]][[2]][[j]]))) + for(j in 1:length(polylines[[i]][[2]])) { + pnt_list <- c(pnt_list, list(pnt = list(polylines[[i]][[2]][[j]]))) } polylines_node[[1]] <- c(polylines_node[[1]], list(polyline = structure(pnt_list, @@ -96,27 +89,27 @@ polylines_to_xml <- function(polyline_list) { } #' Turns a list of surfaces into an XML node -#' @param surfaces_list The specified list +#' @param surfaces A list of surfaces #' @return An XML node containing the surfaces #' @examples #' my_list <- list(list(name = "left", c(0, 1, 2), c(0, 3, 2)), #' list(name = "right", c(4, 6, 5), c(4, 6, 7))) #' surfaces_node <- surfaces_to_xml(my_list) #' @export -surfaces_to_xml <- function(surfaces_list) { +surfaces_to_xml <- function(surfaces) { surfaces_node <- list(surfaces = list()) - for(i in 1:length(surfaces_list)){ + for(i in 1:length(surfaces)){ surfaces_node[[1]] <- c(surfaces_node[[1]], list(surface = structure(c(list(element = structure(list(), - p1 = surfaces_list[[i]][[2]][[1]], - p2 = surfaces_list[[i]][[2]][[2]], - p3 = surfaces_list[[i]][[2]][[3]])), + p1 = surfaces[[i]][[2]][[1]], + p2 = surfaces[[i]][[2]][[2]], + p3 = surfaces[[i]][[2]][[3]])), list(element = structure(list(), - p1 = surfaces_list[[i]][[3]][[1]], - p2 = surfaces_list[[i]][[3]][[2]], - p3 = surfaces_list[[i]][[3]][[3]]))), + p1 = surfaces[[i]][[3]][[1]], + p2 = surfaces[[i]][[3]][[2]], + p3 = surfaces[[i]][[3]][[3]]))), id = (i-1), - name = surfaces_list[[i]][[1]]))) + name = surfaces[[i]][[1]]))) } return(xml2::as_xml_document(surfaces_node)) diff --git a/R/export_prj.R b/R/export_prj.R new file mode 100644 index 0000000..018bc79 --- /dev/null +++ b/R/export_prj.R @@ -0,0 +1,85 @@ +#This script contains various functions to turn data for a .prj file into the correct XML format + +#' Wrapper function to create a .prj XML document based on the user input data +#' @param prj_obj . +prj_data_to_xml <- function(prj_obj) { + + data_node <- xml2::xml_new_root(.value = "OpenGeoSysProject") + + xml2::xml_add_child(data_node, adopt_nodes("processes", prj_obj$processes)) + xml2::xml_add_child(data_node, adopt_nodes("media", prj_obj$media)) + xml2::xml_add_child(data_node, adopt_nodes("time_loop", prj_obj$time_loop)) + xml2::xml_add_child(data_node, adopt_nodes("parameters", prj_obj$parameters)) + xml2::xml_add_child(data_node, adopt_nodes("process_variables", prj_obj$process_variables)) + xml2::xml_add_child(data_node, adopt_nodes("nonlinear_solvers", prj_obj$nonlinear_solvers)) + xml2::xml_add_child(data_node, adopt_nodes("linear_solvers", prj_obj$linear_solvers)) + + return(data_node) +} + +#============================== processes ================================ + +#Implementation for class r2ogs6_process +as_node.r2ogs6_prj_process <- function(obj){ + + process_node <- list(process = structure(list(name = obj$name, + type = obj$type, + integration_order = obj$integration_order, + dimension = obj$dimension, + constitutive_relation = list(type = obj$cr_type, + youngs_modulus = obj$cr_youngs_modulus, + poissons_ratio = obj$cr_poissons_ratio), + process_variables = list(displacement = obj$pv_displacement, + pressure = obj$pv_pressure), + secondary_variables = list(), + specific_body_force = obj$specific_body_force))) + return(process_node) +} + + +#'Method for coercing an r2ogs6_prj_property class object into the structure expected by xml2 +as_node.r2ogs6_prj_property <- function(obj) { + return(list(property = list(name = obj$name, type = obj$type))) +} + + +#============================== media ================================ + + +#'Method for coercing an r2ogs_prj_medium_phase class object into the structure expected by xml2 +as_node.r2ogs6_prj_medium_phase <- function(obj) { + medium_phase_node <- list(phase = list(type = obj$type), + adopt_nodes("properties", obj$properties)) + return(medium_phase_node) +} + + +as_node.r2ogs6_prj_medium <- function(obj) { + + medium_node <- list(medium = list(phases = list(), properties = list())) + + for(i in 1:length(obj$phases)){ + medium_node[[1]] <- c(medium_node[[1]][[1]], as_node(obj$phases[[i]])) + } + + for(i in 1:length(obj$properties)){ + medium_node[[1]] <- c(medium_node[[1]][[2]], as_node(obj$properties[[i]])) + } + + return(medium_node) +} + + +#============================== time_loop ================================ + + +#============================== parameters ================================ + + +#============================== process_variables ================================ + + +#============================== nonlinear_solvers ================================ + + +#============================== linear_solvers ================================ \ No newline at end of file diff --git a/R/export_vtu.R b/R/export_vtu.R new file mode 100644 index 0000000..9d618fb --- /dev/null +++ b/R/export_vtu.R @@ -0,0 +1,75 @@ +#This script contains various functions to turn data for a .vtu file into the correct XML format + + +#' Wrapper function to create a .vtu XML document based on the user input data +#' @param vtu_obj A vtu class object +#' @return A XML document ready for export to a file +# @examples (WIP) +vtu_data_to_xml <- function(vtu_obj) { + + validate_vtu_data(vtu_obj) + + data_node <- list(VTKFile = structure(list(), + type = vtu_obj$type, + version = vtu_obj$version, + byte_order = vtu_obj$byte_order, + header_type = vtu_obj$header_type)) + + data_node <- add_opt_attr(data_node, vtu_obj$compressor, "compressor") + + #Add all the data here... (WIP) + +} + + +vtu_unstructured_grid_to_xml <- function() { + + unstructured_grid_node <- list(UnstructuredGrid = list()) + + field_data_xml <- adopt_nodes("FieldData", field_data_data_arrays) + +} + +#'(WIP, change input parameter to piece!!) +#'@param piece A list consisting of lists of data_array class objects +vtu_piece_to_xml <- function(number_of_points, number_of_cells, point_data, cell_data, points, cells) { + + piece_node <- list(piece = structure(list(adopt_nodes("PointData", point_data), + adopt_nodes("CellData", cell_data), + adopt_nodes("Points", points), + adopt_nodes("Cells", cells)), + NumberOfPoints = number_of_points, + NumberOfCells = number_of_cells)) + + return(xml2::as_xml_document(piece_node)) +} + + +#(WIP) +vtu_data_array_to_xml <- function(data_array) { + data_array_node <- list(DataArray = structure(list(), + type, + Name, + format, + rangeMin, + rangeMax)) + + + if(1){ + + } + + return(xml2::as_xml_document(data_array_node)) +} + +#'vtu_appended_data_to_xml +#'@name vtu_appended_data_to_xml +#'(WIP) +#'@param appended_data A list object consisting of 2 elements named 'data' and 'encoding' +#' +vtu_appended_data_to_xml <- function(appended_data) { + + return(list(AppendedData = structure(list(appended_data[[data]]), + encoding = appended_data[[encoding]]))) +} + diff --git a/R/generics.R b/R/generics.R new file mode 100644 index 0000000..0574d12 --- /dev/null +++ b/R/generics.R @@ -0,0 +1,8 @@ + + + +#'S3 generic function, use to turn class data into XML friendly format +#'@param obj A class object (must have implementation for as_node) +as_node <- function(obj) { + UseMethod("as_node") +} \ No newline at end of file diff --git a/R/input_add_gml.R b/R/input_add_gml.R new file mode 100644 index 0000000..19cead3 --- /dev/null +++ b/R/input_add_gml.R @@ -0,0 +1,86 @@ +# Functions for adding .gml data +# input: ogs6 class object +# output: updated ogs6 class object + +#'Class describing the gml file and any parameters defined in one +new_gml <- function(geometry_name = NULL, + points = NULL, + polylines = NULL, + surfaces = NULL) { + + structure( + list(geometry_name = geometry_name, + points = points, + polylines = polylines, + surfaces = surfaces), + + class = "gml") +} + + +#'Adds an empty gml class object to a ogs6 class object input list +#'@param ogs6_obj The ogs6 object the gml class object should be added to +#'@param geometry_name The name of the geometry specified by the gml class object +input_add_gml_obj <- function(ogs6_obj, geometry_name) { + + if(!is.character(geometry_name)){ + stop("'geometry_name' is not of type character()", call. = FALSE) + } + + if("gml_obj" %in% names(ogs6_obj$sim_input)){ + stop("ogs6_obj already has a gml object attached to it.", call. = FALSE) + }else{ + ogs6_obj$add_sim_io_input("gml_obj", new_gml(geometry_name = geometry_name)) + } +} + + +#'Adds gml points to a ogs6 class object +#'@param ogs6_obj A ogs6 class object +#'@param gml_points A tibble of gml points +input_add_gml_points <- function(ogs6_obj, gml_points) { + + validate_points(gml_points) + + check_for_obj_of_name(ogs6_obj, "gml_obj") + + if(!is.null(ogs6_obj$sim_input[["gml_obj"]]$gml_points)){ + stop("There are already points defined for the gml object", call. = FALSE) + }else{ + ogs6_obj$set_sim_input_obj_param("gml_obj", "gml_points", gml_points) + } +} + + +#'Adds gml polylines to a ogs6 class object +#'@param ogs6_obj A ogs6 class object +#'@param gml_polylines A list of gml polylines +input_add_gml_polylines <- function(ogs6_obj, gml_polylines) { + + validate_polylines(gml_polylines) + + check_for_obj_of_name(ogs6_obj, "gml_obj") + + if(!is.null(ogs6_obj$sim_input[["gml_obj"]]$gml_polylines)){ + stop("There are already polylines defined for the gml object", call. = FALSE) + }else{ + ogs6_obj$set_sim_input_obj_param("gml_obj", "gml_polylines", gml_polylines) + } +} + + +#'Adds gml surfaces to a ogs6 class object +#'@param ogs6_obj A ogs6 class object +#'@param gml_surfaces A list of gml surfaces +input_add_gml_surfaces <- function(ogs6_obj, gml_surfaces) { + + validate_surfaces(gml_surfaces) + + check_for_obj_of_name(ogs6_obj, "gml_obj") + + if(!is.null(ogs6_obj$sim_input[["gml_obj"]]$gml_surfaces)){ + stop("There are already surfaces defined for the gml object", call. = FALSE) + }else{ + ogs6_obj$set_sim_io_input_obj_param("gml_obj", "gml_surfaces", gml_surfaces) + } +} \ No newline at end of file diff --git a/R/input_add_prj.R b/R/input_add_prj.R new file mode 100644 index 0000000..882e704 --- /dev/null +++ b/R/input_add_prj.R @@ -0,0 +1,135 @@ +#This script contains various S3 classes, methods and functions to turn data for a .prj file into +#the correct XML format. (WIP!!!) + + +#============================== Functions to be exported ================================ + + + + +#============================== processes classes and methods ================================ + + +#S3 class representing a .prj process element +#'@param name The process name +#'@param type The process type +#'@param integration_order ... +#'@param dimension ... +#'@param constitutive_relation ... +#'@param process_variables ... +#'@param secondary_variables A list of secondary variables +#'@param specific_body_force The specific body force +new_r2ogs_prj_process <- function(name, type, integration_order, dimension, constitutive_relation, + process_variables, secondary_variables, specific_body_force) { + #validating functions here + + structure( + list( + name = name, + type = type, + integration_order = integration_order, + dimension = dimension, + constitutive_relation = constitutive_relation, + process_variables = process_variables, + secondary_variables = secondary_variables, + specific_body_force = specific_body_force, + ), + class = "r2ogs_prj_process" + ) +} + + + + + +#============================== media classes and methods ================================ + +new_r2ogs_prj_property <- function(name = character(), type = character(), value = double()){ + #Validate... + + + structure( + list( + name = name, + type = type, + value = value + ), + class = "r2ogs6_prj_property" + ) +} + + + + +#'Defines a .prj medium phase element +#'@param type A string specifying the medium type (valid types: ...) +#'@param properties A list of properties (see ?r2ogs6_property for more info) +new_r2ogs6_prj_medium_phase <- function(type = character(), properties = list()) { + + stopifnot(is.character(type), length(type) == 1) + + structure( + list( + type = type, + properties = properties + ), + class = "r2ogs6_prj_medium_phase" + ) +} + + + + +#' +#'@param phases A list of medium phases +#'@param properties A list of medium properties +new_r2ogs6_prj_medium <- function(phases = list(), properties = list()) { + #Validate + + stopifnot(is.list(phases)) + stopifnot(is.list(properties)) + + structure( + list( + phases = phases, + properties = properties + ), + class = "r2ogs6_prj_medium" + ) +} + + + + +#============================== time_loop classes and methods ================================ + +#============================== parameters classes and methods ================================ + + +new_r2ogs6_prj_parameter <- function(name = character(), type = character(), value = double()) { + #Validate + + structure( + list( + name = name, + type = type, + value = value + ), + class = "r2ogs6_prj_parameter" + ) +} + + + +#============================== process_variables classes and methods ================================ + + +#============================== nonlinear_solvers classes and methods ================================ + +#============================== linear_solvers classes and methods ================================ + + + + + + diff --git a/R/input_add_vtu.R b/R/input_add_vtu.R new file mode 100644 index 0000000..867713c --- /dev/null +++ b/R/input_add_vtu.R @@ -0,0 +1,151 @@ +# Functions for adding .vtu data +# input: ogs6 class object +# output: updated ogs6 class object + +#'new_vtu +#'@description S3 class constructor, returns S3 class describing the .vtu file and any parameters defined in it +#'@param type The type of the vtu file (e. g. "UnstructuredGrid") +#'@param version The version of the .vtu file (e. g. 1.0) +#'@param byte_order Either "LittleEndian" or "BigEndian" +#'@param header_type The header type (e. g. "UInt32") +#'@param compressor Optional: The compressor to be used +new_vtu <- function(type, + version, + byte_order, + header_type, + compressor = NULL) { + + assertthat::assert_that(assertthat::is.string(type)) + assertthat::assert_that(is.double(version)) + assertthat::assert_that(assertthat::is.string(byte_order)) + assertthat::assert_that(assertthat::is.string(header_type)) + + if(!is.null(compressor)){ + assertthat::assert_that(assertthat::is.string(compressor)) + } + + structure( + list(unstructured_grid = NULL, + appended_data = NULL), + + type = type, + version = version, + byte_order = byte_order, + header_type = header_type, + compressor = compressor, + class = "vtu") +} + +#'new_data_array +#'@description S3 class constructor, returns S3 class describing a .vtu DataArray element +#'@param type +#'@param name +#'@param format +#'@param range_min +#'@param range_max +#'@param number_of_components +#'@param number_of_tuples +#'@param offset +#'@param data +new_data_array <- function(type, name, format, range_min, range_max, + number_of_components = NULL, number_of_tuples = NULL, + offset = NULL, data = NULL) { + structure( + list(type, + name, + format, + range_min, + range_max, + offset, + number_of_components, + number_of_tuples, + data), + class = "data_array" + ) +} + +#'as_node.data_array +#'@description Implementation of the generic function as_node for data_array class objects +as_node.data_array <- function(obj) { + + data_array_node <- list(DataArray = structure(list(), type = obj$type, Name = obj$name)) + + data_array_node <- add_opt_child(data_array_node, obj$data) + + data_array_node <- add_opt_attr(data_array_node, obj$number_of_components, "NumberOfComponents") + data_array_node <- add_opt_attr(data_array_node, obj$number_of_tuples, "NumberOfTuples") + + attributes(data_array_node)[["format"]] <- obj$format + attributes(data_array_node)[["RangeMin"]] <- obj$range_min + attributes(data_array_node)[["RangeMax"]] <- obj$range_max + + data_array_node <- add_opt_attr(data_array_node, obj$offset, "offset") + + return(data_array_node) +} + + +#'input_add_vtu_obj +#'@description Adds an empty vtu class object to a ogs6 class object input. +#'@param ogs6_obj The ogs6 object the vtu class object should be added to +#'@param type The type of the .vtu file (e. g. "UnstructuredGrid") +#'@param version The version of the .vtu file (e. g. 1.0) +#'@param byte_order Either "LittleEndian" or "BigEndian" +#'@param header_type The header type (e. g. "UInt32") +#'@param compressor Optional: The compressor to be used +#'@export +input_add_vtu_obj <- function(ogs6_obj, type, version, byte_order, header_type, compressor = NULL) { + + if("vtu_obj" %in% names(ogs6_obj$sim_input)){ + stop("ogs6_obj already has a vtu object attached to it.", call. = FALSE) + }else{ + ogs6_obj$add_sim_input("vtu_obj", new_vtu(type = type, + version = version, + byte_order = byte_order, + header_type = header_type, + compressor = compressor)) + } +} + + +#'input_add_vtu_unstructured_grid +#'@description Adds .vtu UnstructuredGrid to a ogs6 class object +#'@param ogs6_obj The ogs6 object the .vtu UnstructuredGrid should be added to +#'@param piece A Piece (WIP) +#'@param field_data FieldData (WIP) +#'@export +input_add_vtu_unstructured_grid <- function(ogs6_obj, piece, field_data = NULL) { + + #validator missing... + + check_for_obj_of_name(ogs6_obj, "vtu_obj") + + #... + set_sim_input_obj_param("vtu_obj", "unstructured_grid", list(field_data = field_data, + piece = piece)) +} + + +#'input_add_vtu_appended_data +#'@description Adds .vtu AppendedData to a ogs6 class object +#'@param ogs6_obj The ogs6 object the .vtu AppendedData should be added to +#'@param encoding How the AppendedData is encoded +#'@param data The actual data in the specified encoding +#'@export +input_add_vtu_appended_data <- function(ogs6_obj, encoding, data) { + + #validator missing... + + check_for_obj_of_name(ogs6_obj, "vtu_obj") + + assertthat::assert_that(assertthat::is.string(encoding)) + assertthat::assert_that(assertthat::is.string(data)) + + if(!(encoding %in% vtu_appended_data_valid_encoding_types)) { + stop("Invalid encoding for vtu appended data. For an overview of valid + types refer to ?vtu_appended_data_valid_encoding_types", call. = FALSE) + } + + set_sim_input_obj_param("vtu_obj", "appended_data", list(encoding = encoding, + data = data)) +} \ No newline at end of file diff --git a/R/ogs6.R b/R/ogs6.R new file mode 100644 index 0000000..201b068 --- /dev/null +++ b/R/ogs6.R @@ -0,0 +1,145 @@ + + +#============================== R6 ================================ + +#'Constructor for the OGS6 base class +OGS6 <- R6::R6Class("OGS6", + public = list( + + initialize = function(sim_name, + sim_id, + sim_path) { + + # Basic validation + assertthat::assert_that(assertthat::is.string(sim_name)) + assertthat::assert_that(is.integer(sim_id)) + assertthat::assert_that(assertthat::is.string(sim_path)) + + private$.sim_input <- list() + private$.sim_output <- list() + + private$.sim_name <- sim_name + private$.sim_id <- sim_id + private$.sim_path <- sim_path + }, + + add_sim_input = function(name, value) { + private$.sim_input[[name]] <- value + }, + + set_sim_input_obj_param = function(obj_name, obj_param_name, value) { + private$.sim_input[[obj_name]]$obj_param_name <- value + }, + + add_sim_output = function(name, value) { + private$.sim_output[[name]] <- value + } + + ), + + active = list( + sim_input = function(value) { + if (missing(value)) { + private$.sim_input + } else { + stop("To modify `$sim_input`, use set_sim_input().", call. = FALSE) + } + }, + + sim_output = function(value) { + if (missing(value)) { + private$.sim_output + } else { + stop("To modify `$sim_output`, use set_sim_output().", call. = FALSE) + } + }, + + sim_name = function(value) { + if (missing(value)) { + private$.sim_name + } else { + stop("`$sim_name` is read only", call. = FALSE) + } + }, + + sim_id = function(value) { + if (missing(value)) { + private$.sim_id + } else { + stop("`$sim_id` is read only", call. = FALSE) + } + }, + + sim_path = function(value) { + if (missing(value)) { + private$.sim_path + } else { + stop("`$sim_path` is read only", call. = FALSE) + } + } + + ), + + private = list( + .sim_input = NULL, + .sim_output = NULL, + .sim_name = NULL, + .sim_id = NULL, + .sim_path = NULL + ) +) + + + + +#============================== S3 ================================ + +#'Constructor for the ogs6 base class +#' +#'@param sim_io ... +#'@param sim_name A string value representing the simulation name +#'@param sim_id An integer value representing the simulation ID +#'@param sim_path A string value describing the path where the IO files will be saved +new_ogs6 <- function(sim_io = list(input = list(), output = list()), + sim_name = character(), + sim_id = integer(), + sim_path = character()) { + + # Basic validation + if (!is.character(sim_name)) { + stop("'sim_name' has to be of type character", call. = FALSE) + } + + if (!is.integer(sim_id)) { + stop("'sim_id' has to be of type integer", call. = FALSE) + } + + if (!is.character(sim_path)) { + stop("'sim_path' has to be of type character", call. = FALSE) + } + + structure( + sim_io, + sim_name = sim_name, + sim_id = sim_id, + sim_path = sim_path, + class = "ogs6" + ) +} + +#' Validating functions for an ogs6 class object (to be run before a simulation is started) +validate_ogs6 <- function(ogs6_obj) { + + + if (!class(ogs6_obj) == "ogs6") { + stop("ogs6_obj is not of class 'ogs6' ", call. = FALSE) + } + if (is.null(x$input)) { + stop("'input' list missing.", call. = FALSE) + } + if (is.null(x$output)) { + stop("'output' list missing.", call. = FALSE) + } + +} + diff --git a/R/user_input.R b/R/user_input.R index 2acfb73..7c317fb 100644 --- a/R/user_input.R +++ b/R/user_input.R @@ -1,67 +1,179 @@ #This is where the user defines his data. -#============================== Data for GML file ================================ - -#Specify some data (source: HydroComponent Benchmarks -> IdealGas -> flow_free_expansion -> cube_1x1x1.gml) - -#The name of the desired geometry (will become first XML child under root) -geo_name <- "cube_1x1x1_geometry" - -#Some points (will become second XML child under root) -my_gml_points <- tibble::tibble(x = c(0, 0, 0, 0, 1, 1, 1, 1), - y = c(0, 0, 1, 1, 0, 0, 1, 1), - z = c(0, 1, 1, 0, 0, 1, 1, 0), - name = c("origin", rep("", 7))) - -#Some polylines (will become third XML child under root) -my_gml_polylines <- list(list(name = "front_left", c(0, 1)), - list(name = "front_right", c(4, 5)), - list(name = "front_bottom", c(0, 4)), - list(name = "front_top", c(1, 5)), - list(name = "bottom_left", c(0, 3)), - list(name = "bottom_right", c(4, 7)), - list(name = "top_left", c(1, 2)), - list(name = "top_right", c(5, 6)), - list(name = "back_left", c(2, 3)), - list(name = "back_right", c(6, 7)), - list(name = "back_bottom", c(3, 7)), - list(name = "back_top", c(2, 6))) - -#Some surfaces (will become fourth XML child under root) -my_gml_surfaces <- list(list(name = "left", c(0, 1, 2), c(0, 3, 2)), - list(name = "right", c(4, 6, 5), c(4, 6, 7)), - list(name = "top", c(1, 2, 5), c(5, 2, 6)), - list(name = "bottom", c(0, 3, 4), c(4, 3, 7)), - list(name = "front", c(0, 1, 4), c(4, 1, 5)), - list(name = "back", c(2, 3, 6), c(6, 3, 7))) - - -#============================== Data for VTU file ================================ - - -my_vtk_specification <- list(type="UnstructuredGrid", - version="0.1", - byte_order="LittleEndian", - header_type="UInt32", - compressor="vtkZLibDataCompressor") - - - -my_vtk_pieces <- list() + +#============================== SET UP SIMULATION OBJECT ================================ + +# my_ogs6_obj <- new_ogs6( sim_io = list(input = list(), output = list()), +# sim_name = "my_sim", +# sim_id = 1L, +# sim_path = "simulations/") + + +my_ogs6_obj <- OGS6$new( sim_name = "my_sim", + sim_id = 1L, + sim_path = "simulations/") + + +#============================== ADD .gml DATA ================================ + +#(source: HydroComponent Benchmarks -> IdealGas -> flow_free_expansion -> cube_1x1x1.gml) + +# #Add gml object and give it a name +# input_add_gml_obj(my_ogs6_obj, "cube_1x1x1_geometry") +# + + + +# #Add some points +input_add_gml_points(my_ogs6_obj, tibble::tibble(x = c(0, 0, 0, 0, 1, 1, 1, 1), + y = c(0, 0, 1, 1, 0, 0, 1, 1), + z = c(0, 1, 1, 0, 0, 1, 1, 0), + name = c("origin", rep("", 7)))) +# +# #Add some polylines +# input_add_gml_polylines(my_ogs6_obj, list(list(name = "front_left", c(0, 1)), +# list(name = "front_right", c(4, 5)), +# list(name = "front_bottom", c(0, 4)), +# list(name = "front_top", c(1, 5)), +# list(name = "bottom_left", c(0, 3)), +# list(name = "bottom_right", c(4, 7)), +# list(name = "top_left", c(1, 2)), +# list(name = "top_right", c(5, 6)), +# list(name = "back_left", c(2, 3)), +# list(name = "back_right", c(6, 7)), +# list(name = "back_bottom", c(3, 7)), +# list(name = "back_top", c(2, 6)))) +# +# #Add some surfaces +# input_add_gml_surfaces(my_ogs6_obj, list(list(name = "left", c(0, 1, 2), c(0, 3, 2)), +# list(name = "right", c(4, 6, 5), c(4, 6, 7)), +# list(name = "top", c(1, 2, 5), c(5, 2, 6)), +# list(name = "bottom", c(0, 3, 4), c(4, 3, 7)), +# list(name = "front", c(0, 1, 4), c(4, 1, 5)), +# list(name = "back", c(2, 3, 6), c(6, 3, 7)))) + + +#============================== ADD .vtu DATA ================================ + +#(source: HydroComponent Benchmarks -> IdealGas -> flow_free_expansion -> cube_1x1x1.vtu) + +# #Add vtu object and give it a name +# input_add_vtu_obj(my_ogs6_obj, list(type="UnstructuredGrid", +# version="0.1", +# byte_order="LittleEndian", +# header_type="UInt32", +# compressor="vtkZLibDataCompressor")) +# +# #Add an unstructured grid to the vtu object +# input_add_vtu_unstructured_grid(my_ogs6_obj, list()) +# +# #Add appended data to the vtu object +# input_add_vtu_appended_data(my_ogs6_obj, encoding = "", data = "") +# +# #... (WIP) + + +#============================== ADD .prj DATA ================================ + +#There is no documentation for the constructors (yet), but with classes instead of just lists, +#the user could get way more info (also, I can build some nice validator friends) + + +#Define processes (refer to ?new_r2ogs6_process for info on valid arguments) +# processes <- list(new_r2ogs_prj_process(name = "HM", +# type = "HYDRO_MECHANICS", +# integration_order = 3, +# dimension = 3, +# constitutive_relation = list(type = "LinearElasticIsotropic", +# youngs_modulus = "E", +# poissons_ratio = "nu"), +# process_variables = list(displacement = "displacement", +# pressure = "pressure"), +# secondary_variables = list(stub = 0), +# specific_body_force = c(0, 0, 0)) +# ) + + +#Define media (refer to ?new_r2ogs6_prj_medium for info on valid arguments) +media <- list(new_r2ogs6_prj_medium(phases = list(phase = list(type = "Gas", + properties = list(property = list(name = "viscosity", + type = "Constant", + value = 1e-5))) + ), + properties = list(property = list(name = "reference_temperature", + type = "Constant", + value = 293.15) + ) + ) + ) + + +time_loop <- list(processes = list(), + output = list(type = "VTK", + prefix = "", + timesteps = list(), + variables = list(), + suffix = "_ts_{:timestep}_t_{:time}") + ) + + +#Define parameters (refer to ?new_r2ogs6_parameter for info on valid arguments) +parameters <- list(new_r2ogs6_prj_parameter(name = "E", + type = "Constant", + value = 10e9) + ) + + +#Define process variables +process_variables <- list(process_variable = list(name = "displacement", + components = 3, + order = 2, + initial_condition = "displacement0", + boundary_conditions = list(boundary_condition = list())) + ) + + +#Define nonlinear solvers +nonlinear_solvers <- list(nonlinear_solver = list(name = "basic_newton", + type = "Newton", + max_iter = 50, + linear_solver = "general_linear_solver") + ) + + +linear_solvers <- list(linear_solver = list(name = "general_linear_solver", + lis = "-i bicgstab -p ilu -tol 1e-16 -maxiter 10000", + eigen = list(solver_type = "BiCGSTAB", + precon_type = "ILUT", + max_iteration_step = 10000, + error_tolerance = 1e-16)) + ) + +#============================== Execution (to be moved to another file later!) ================================ + +#============================== .gml ================================ + +#Call ogs6 object validator functions +#... + +# #Now export all necessary files +# my_gml_xml <- gml_data_to_xml(geo_name, my_gml_points, my_gml_polylines, my_gml_surfaces) +# +# +# #Let's export that as a new .gml XML file +# export_xml_to_file(my_gml_xml, "test.gml") +#Now the .gml XML file should be in the r2ogs6 folder (not a perfect location but ok for a little test) -#============================== Execution ================================ +#The only thing missing from the new file compared to the original is the stylesheet declaration... +#I haven't found a way to add that one yet, but it should also be possible somehow -#Turn GML data into XML structure -my_gml_xml <- gml_data_to_xml(geo_name, my_gml_points, my_gml_polylines, my_gml_surfaces) +#============================== RUN SIMULATION ================================ -#Let's export that as a new .gml XML file -export_xml_to_file(my_gml_xml, "my_experimental_cube.gml") +#Calls ogs6 object validator functions, exports all necessary files and starts OpenGeoSys6 -#Now the .gml XML file should be in the r2ogs6 folder (not a perfect location but ok for a little test) +#run_simulation(my_ogs6_obj) -#The only thing missing from the new file compared to the original is the stylesheet declaration... -#I haven't found a way to add that one yet, but it should also be possible somehow \ No newline at end of file diff --git a/R/utils.R b/R/utils.R index de33ec3..bc95e15 100644 --- a/R/utils.R +++ b/R/utils.R @@ -1,7 +1,3 @@ - -default_xml_version <- "1.0" -default_xml_encoding <- "ISO-8859-1" - #============================== GENERAL UTILITY (copy playground) ================================ ###Stub @@ -23,51 +19,129 @@ default_xml_encoding <- "ISO-8859-1" # ) # ) -#============================== XML UTILITY FUNCTIONS ================================ -#' Reads the encoding of an XML file -#' -#' @param input_file_name An XML (.xml or, in the case of OpenGeoSys, .prj) file -#' @return The encoding of the input file +#============================== VALIDATION UTILITY ================================ + +#'check_for_obj_of_name +#'@description Checks if a object with the given name was already defined for a ogs6 object and if not, +#' tells user to initialize one +#'@param ogs6_obj The ogs6 object to check +#'@param obj_name The name of the object to check for +check_for_obj_of_name <- function(ogs6_obj, obj_name) { + + if(!obj_name %in% names(ogs6_obj$sim_input)){ + stop(paste("There is no object named ", obj_name," for your ogs6 object yet.\n + You can initialize one by calling input_add_", obj_name , + "() (read up on the required parameters)"), + call. = FALSE) + } +} + + +#============================== XML UTILITY ================================ + + +#' export_xml_to_file +#' @description Export function +#' @param xml_data The data to be exported (already in XML friendly format) +#' @param file_name The name of the file to be written # @examples -# input_file_encoding <- get_xml_encoding("file.xml") -# input_file_encoding <- get_xml_encoding("file.prj") -get_xml_encoding <- function(input_file_name) { - input_file <- file(input_file_name, "r") - first_line <- readLines(input_file, n=1) - close(input_file) - decl <- stringr::str_split(first_line, '"', simplify = TRUE) +# export_xml_to_file(...) +export_xml_to_file <- function(xml_data, file_name) { + doc <- xml2::as_xml_document(xml_data) + xml2::write_xml(doc, file_name, options = "format", encoding="ISO-8859-1") + invisible() +} - xml_encoding <- default_xml_encoding - if(length(decl) == 5 && decl[1] == "<?xml version=" && decl[3] == " encoding=" && decl[5]=="?>"){ - xml_encoding <- decl[4] - cat(paste("Valid XML declaration in first line of input file found.\nDetected encoding ", xml_encoding)) +#' adopt_nodes +#' @description A helper function for creating parent nodes using the generic function as_node +#' @param parent_name The name of the new parent node +#' @param objs A list of class objects (class must have method for generic function as_node) +adopt_nodes <- function(parent_name, objs) { + parent_node <- list(parent_name = list()) - }else{ - cat("XML declaration not as expected. Example for valid declaration:\n") - cat('<?xml version="1.0" encoding="UTF-8"?>\n') - cat(paste("I will use my default value of XML encoding ", default_xml_encoding, ".\n")) + for(i in 1:length(objs)) { + parent_node <- c(parent_node[[1]], as_node(objs[[i]])) + } + return(xml2::as_xml_document(parent_node)) +} + +#'add_opt_attr +#'@description Adds an optional attribute to a node attribute list +#'@param node The node the optional attribute should be added to +#'@param obj_parameter The value of the attribute to be added +#'@param attr_name The name of the attribute to be added +add_opt_attr <- function(node, obj_parameter, attr_name) { + if(!is.null(obj_parameter)) { + attributes(node[[1]])[[attr_name]] <- obj_parameter } - return(xml_encoding) + + return(node) } -#' Creates a template project file based on the XML structure and attributes of an existing project file. -#' @param existing_prj An existing .prj file to use as a template for the structure and attributes -#' @param template_prj The path where the template should be saved -#' @return The newly created template project file -# @examples -# blank_prj_file <- create_template_prj("file.prj") -create_template_prj <- function(existing_prj, template_prj) { - xml_input <- xml2::read_xml(existing_prj) +#'add_opt_child +#'@description Adds an optional child to a node child list +#'@param node The node the optional child should be added to +#'@param obj_parameter The value of the child to be added +#'@param child_name Optional: If it's a child node instead of just a value, the name of the child to be added +add_opt_child <- function(node, obj_parameter, child_name = NULL) { + + if(!is.null(obj_parameter)) { + if(!is.null(child_name) && length(node[[1]]) == length(names(node[[1]]))) { + node[[1]] <- c(node[[1]], list(child_name = obj_parameter)) + }else if(length(node[[1]]) == 0) { + node[[1]] <- list(obj_parameter) + }else{ + stop(paste("You're trying to add a value (an unnamed child node) to a node + which already has a value."), call. = FALSE) + } - #Empty text nodes - text_nodes<-xml2::xml_find_all(xml_input, "//text()") - xml2::xml_set_text(text_nodes, "") + } - xml2::write_xml(xml_input, template_prj, options = "format", encoding=get_xml_encoding(existing_prj)) + return(node) } + + +#================================Test if S3 object in R6 class inherits reference semantics + +# A <- R6::R6Class("A", +# public = list( +# +# b_obj = NULL, +# +# initialize = function(b_obj) { +# self$b_obj <- b_obj +# } +# ) +# ) +# +# b <- function(x){ +# structure(x, +# class = "b") +# } +# +# mod_func_a <- function(a_obj){ +# a_obj$b_obj$x <- 100 +# } +# +# a_obj <- A$new(b(42)) +# +# mod_func_a(a_obj) +# +# a_obj$b_obj$x +# +# +# mod_func_b <- function(b_obj){ +# b_obj$x <- 100 +# } +# +# b_obj <- b(42) +# +# mod_func_b(b_obj) +# +# b_obj diff --git a/R/validate_gml.R b/R/validate_gml.R index 33111c9..beff91f 100644 --- a/R/validate_gml.R +++ b/R/validate_gml.R @@ -1,17 +1,41 @@ #This script contains various functions to verify data for a .gml file (WIP) -# @export -validate_gml_data <- function(gml_geometry_name, gml_points = NA, gml_polylines = NA, gml_surfaces = NA) { +#' validate_gml_data +#' +#' @name validate_gml_data +#' @description Checks if the defined gml class object isn't empty +#' @param gml_obj A gml class object +validate_gml_data <- function(gml_obj) { - validate_points(gml_points) - validate_polylines(gml_polylines) - validate_surfaces(gml_surfaces) + null_count <- 0 + + if(is.null(gml_obj$points)){ + null_count <- null_count + 1 + } + + if(is.null(gml_obj$polylines)){ + null_count <- null_count + 1 + } + + if(is.null(gml_obj$surfaces)){ + null_count <- null_count + 1 + } + + if(null_count == 3){ + stop(paste("Defined .gml object only has a name. Consider adding some points, + polylines and surfaces."), call. = FALSE) + } + + #More extensive checks... (WIP) } -#'Checks if the input is a tibble, if this tibble has the right number of elements, -#' if those elements are named correctly, if the lists in the tibble are of the same length and -#' if there is any overlapping points or duplicate point names -#' @param gml_points A tibble with 3 vectors named 'x', 'y' and 'z' (and an optional 'name' vector) + +#'validate_points +#' +#'@name validate_points +#'@description Checks if the input is a tibble, if this tibble has the right number of elements, +#' if those elements are named correctly and if there are any overlapping points or duplicate point names +#'@param gml_points A tibble with 3 vectors named 'x', 'y' and 'z' (and an optional 'name' vector) validate_points <- function(gml_points) { if(!(inherits(gml_points, "tbl_df") && inherits(gml_points, "tbl") && @@ -28,6 +52,10 @@ validate_points <- function(gml_points) { stop(paste(gml_points, " column names do not fit to 'x, y, z, (name)' "), call. = FALSE) } + if(!is.numeric(gml_points$x) || !is.numeric(gml_points$y) || !is.numeric(gml_points$z)){ + stop(paste(gml_points, "'x, y, z' columns must be numeric vectors"), call. = FALSE) + } + has_names <- (length(gml_points) == 4) #Find overlapping points and duplicate names @@ -51,16 +79,123 @@ validate_points <- function(gml_points) { return(invisible(gml_points)) } - +#'validate_polylines +#' +#'@name validate_polylines +#'@description Checks if the input is a list, if this list consists of other lists and +#' if those child lists have the correct structure (length of 2, first element is a string named +#' 'name', second element is a numeric vector) +#'@param gml_polylines A list consisting of other lists validate_polylines <- function(gml_polylines) { - if(!(inherits(gml_polylines, "list"))){ - stop(paste(gml_polylines, " is not of class 'list' "), call. = FALSE) + if(!(inherits(gml_polylines, "list"))) { + stop(paste("gml_polylines object is not of class 'list' "), call. = FALSE) } -} + for(i in 1:length(gml_polylines)){ + if(!(inherits(gml_polylines[[i]], "list"))) { + stop(paste("At least one element of gml_polylines is not of class 'list' "), call. = FALSE) + } + + if(length(gml_polylines[[i]]) != 2) { + stop(paste("At least one element of gml_polylines has incorrect length + (expected list of length 2)"), call. = FALSE) + } + if(names(gml_polylines[[i]])[[1]] != "name" || !is.character(gml_polylines[[i]][[1]])) { + stop(paste("First element of gml_polylines (list) element must be + a character string named 'name' "), call. = FALSE) + } + + if(!is.numeric(gml_polylines[[i]][[2]])) { + stop(paste("Second element of gml_polylines (list) element must be + a numeric vector"), call. = FALSE) + } + #Check for duplicate points / polylines? + } + + return(invisible(gml_polylines)) +} + +#'validate_surfaces +#' +#'@name validate_surfaces +#'@description Checks if the input is a list, if this list consists of other lists and +#' if those child lists have the correct structure (length of 3, first element is a string named +#' 'name', second and third element are numeric vectors) +#'@param gml_surfaces A list consisting of other lists validate_surfaces <- function(gml_surfaces) { + if(!(inherits(gml_surfaces, "list"))) { + stop(paste("gml_surfaces object is not of class 'list'"), call. = FALSE) + } + + for(i in 1:length(gml_surfaces)){ + if(!(inherits(gml_surfaces[[i]], "list"))) { + stop(paste("At least one element of gml_surfaces is not of class 'list'"), call. = FALSE) + } + + if(length(gml_surfaces[[i]]) != 3) { + stop(paste("At least one element of gml_surfaces has incorrect length + (expected list of length 3)"), call. = FALSE) + } + + if(names(gml_surfaces[[i]])[[1]] != "name" || !is.character(gml_surfaces[[i]][[1]])) { + stop(paste("First element of gml_surfaces (list) element must be + a character string named 'name'"), call. = FALSE) + } + + if(!is.numeric(gml_surfaces[[i]][[2]]) || !is.numeric(gml_surfaces[[i]][[3]]) || + length(gml_surfaces[[i]][[2]]) != 3 || length(gml_surfaces[[i]][[3]]) != 3) { + stop(paste("Second and third element of gml_surfaces (list) element must be + a numeric vector of length 3"), call. = FALSE) + } + + + validate_surface_elements(gml_surfaces[[i]][[2]], gml_surfaces[[i]][[3]]) + + + #Check for duplicate points / surfaces? + } + + return(invisible(gml_surfaces)) + +} + + +#'validate_surface_elements +#' +#'@name validate_surface_elements +#'@description Helper function, checks if two numerical vectors of length 3 (two surface elements) +#' each consist of 3 different elements and also have exactly 2 matching elements between them +#' which means they describe a valid surface. You can think of the two vectors as two triangles, +#' and the two triangles together form a square which is our surface. +#'@param gml_surface_element_1 A numerical vector of length 3 +#'@param gml_surface_element_2 A numerical vector of length 3 +validate_surface_elements = function (gml_surface_element_1, gml_surface_element_2) { + + if(gml_surface_element_1[[1]] == gml_surface_element_1[[2]] || + gml_surface_element_1[[1]] == gml_surface_element_1[[3]] || + gml_surface_element_1[[2]] == gml_surface_element_1[[3]] || + gml_surface_element_2[[1]] == gml_surface_element_2[[2]] || + gml_surface_element_2[[1]] == gml_surface_element_2[[3]] || + gml_surface_element_2[[2]] == gml_surface_element_2[[3]]) { + stop("A surface element must consist of 3 different points", call. = FALSE) + } + + equal_count <- 0 + + for(i in 1:length(gml_surface_element_1)) { + for(j in 1:length(gml_surface_element_2)) { + if(gml_surface_element_1[[i]] == gml_surface_element_2[[j]]) { + equal_count <- equal_count + 1 + break + } + } + } + + if(equal_count != 2) { + stop("Invalid surface detected", call. = FALSE) + } } \ No newline at end of file diff --git a/inst/extdata/flow_free_expansion/HM_flow_free_expansion.pdf b/inst/extdata/flow_free_expansion/HM_flow_free_expansion.pdf new file mode 100644 index 0000000000000000000000000000000000000000..68cf031c6feb9ff176dab619151fc482c260ac9f GIT binary patch literal 199414 zcma%iby!v3*6tz%L@5Ih5D*oWmTnMGQ4s0w?(S9uML<bukZzEc5KyGM8>G9t?_7JM z=Y041p8MQC&hI(ywbz_;jPZ`~zGKYIeMymL^p6?Xu<xf$Z*F2UQ!-InXd7em@?tZ} zI$7#bG74+iYMELXU^B|=S=$&{m{T%7zRUcS4VzI?%RtYDk`=rl4gO)Ir=$16T;GC{ z4e<d#KenE^F1*rXrvF;<nUSfjo;4-oGgB>FJrO+}3tc^IMsYoJ16xB%=ErQz*x)@I zTWdWnGaPKk;Z;>J3sMgJs$+$f6i<KIs|K8|Hyab4MDtr4>wFcYz^s$jMk$z4wjNVG z8sVAAO?FeR=vL0ZU5lAhq#C^ahlApM;g_Zc5o&>$#+B{ep{5oN-Rsa~asAAS@KjM? z^MiWQ$sc0v^-UCB6aoQxMByRZGMBvkx?G*BPUdXWQ^-ypJz@NnSE><@8`kHAHxTl| zneA}jm{mi9XuGGn-F^J(!RgTD4R3KxzQAYKhM!owJ8kXze%sXFBk&N?@n+uSc}qYz zP^x}r`=ZIgFGS<OV(hehU910)X}~44@4mXD7xjaTFO9)VvfYJ#i^21Gy_#%Fxxa4W zn12abDU~{^J=CsJ4VX(?z{uKp)>+$T8{;0?K0V;kV^P}E_w-0HmGsOkEBe50^N!iK z^2RkrqQXT*^t$_k(t*jkA55vfEz->{;^&Z7VpDv<9AGYTJH()TK%NK@zE1t@8dmb{ za&#XJ5s4v6l-#Aa{oU0sNN2;6y(jz2*m+5GlQL8dUUFuY6^FX>H8guN-x|)5`H_XI ze+i;C#SORHdV61l%s=fs2KNog{bC{7u~*$1SxIOG*%9Hp)lomc6NQo%k3U=2&pUIO zcEJv%)VW@uPMr33`E)Z}yxw(tUIe>tYob0ioQ|<+W020NL4xcytALre^!LFKod@lv z=c&&uD3c!C?I5$3|5)xKbr&t~Zk0#6iQ=2_`M%;>@f!UCW4@(V0dsU6HN{dfgz}k* zQ(G)DxH@<<f}+b?G$^uPr>{QAQHvxBFa6c&9HxioTA@0wDlt#t^y;O*NxXo5&!MjE z?OZLU$bc_di%!ndd|4wn)I>?pm2+_-j)BE>E354XNsvI0dc$t49S=p``s;4>=L!mi zi-!xRw(M%&Rs3PcP27>69waFpH8ylHN2`&Ymh^7bYO|~SCVdh`$&~l|#+J;BJf+}1 zj8E;)w{LuYE6Uy;Sxq;d_l)kClYc!_aN2Ll_?t6?;jH^m*S|ffGmG2ci;&mQ6`PNz zmT0n1yF3eg3OeJp{9E=N<YLRU3KxRoqWlX`TC>WV#4x5}J(XDYpA~lU>pv17#>#OU zXYhEbmsx0?eNb#@_lGDC7mv`cV137<Bq#He;X7^B*3Spr%O9|<6KbbCrPqS<)SoIl z>Xp1=XQySoe5dcRt2suk@$=9n;}JR>6bbfvh*7dj?QzXlP3e$t*52EWqWGFq#EF-U z<zs$OoR2<HUkWI^{Kmp0b?VZF?1zEJUvgA!Z;4c_J-DLn8vg6v9ny2P*b$mLuT(`A z;xL46RCaBuk;^RM2#Lyh1;_C<%#N{dp$u=K)Mbyz2%_8-U7m*q=xf5rK1D_l4KGND zZZ)2EkKO*R?EO)K75Yf~v+)|<AcyRpw|weHc`dIhv|L5>A;Mg8*U&bLX6s{R%mC?p z_u^_=Wo7~gI`S9eFKJvlzxakfyi5L~fp6;6OH%Ph?rdVGn-Zb2vi$AVc<J|a8);FZ zx_bDD*L-)_uMuo5X>00oi$oYLl?F;@zVQ0y8)lY6LzA9KOhK3W^TW|EZDa2`+pAyn z{TB(3$K~H!y}f$lp2@pYd*e~ffn)~OC^Pc)jHS6h0cgQ`sanL1ABz9rdJ6SEq{|ZI zYU_GFRy}?z@@oyAxo`n>ONDDpw)8!yzY@hb)^;cipPr%B`Q;MDMnPqCur%$<mu^zh z!zf;vx36l8xp|Z<RConTlfHcUL(k%9La;PBId>ViT!+=1lA)K!YRF2WCj5Kp)w<DG z)=Mv~CdxifC-akE%^7m=a|)Ev7EAlBK3Fu~l*)EDC}Yk}oFOmCSFV>oZ<|awx{@a# z;daxi)!XTxPQU$Q2)92dlJ?MCog5@!)^@mVfZK#}tmKt)4de0WGDdsM+}cF{9}^E{ zg3Im;cw$`Hl!!i&@z$v^UAxa)ay<Rm4lUO}&>dsueZC&oaO6an^}=Ty|7;zTBW&U_ zMq+<$0<G%~l=-i?`Dc^s^Vl{tb&MY}jusG-e~YN)&B_T1DSx^qkGX)_w~C*0HTb0R zn)*mCz7tcr-S9n*FoCY1Pq!$rg~k<L8d$vRtr34mgSBWAJEuoXLmO$cf!18t`cf(I zE!mTwtx`oz*s>mZndXgSN+DOfX8kTfCOG;+i$*n9hLiSeJ-!sv6QrWOeD{;3{MvoP zNNqzGL0_hqf9T)M#aWk|(Gl3^i+q>FHCfRl3nLS2(&*#FbGcMp7~5uQU_aQN`h`dO zo!zMq#YiHQy{hiek=<RgQSRu7aT~Xz+4<$`-_F{1N}k3s_ejmTevOs0I(ld`O{8!W z?S^Iz>E6?nHQb3hlE~BzwTETg(?$;kzGp86o%Stj`~Ix#M^W@+SSp8nQbJz7`@R&k zlN-{EU$S%iLD+KK4W9C(se&uC0e#KV-*;V=CHWn7**wZ}5=@$0`~|LUF3RtZiMYz% z<NxN7+iWK;&sRr7X5;WAT@r=KdUelxt>ospB13!Dz@u%POU2wduU(ed$w>Ajn7>cQ z<?=<KN}#fP(X7)EL{Wud-zQ;^RPvG4S=UM$qLG%e2*OTbdgmrWgOyqI++Q|+_d`kE zy}6{pgsi(1nY_b^ekF|hdqzbSI^v@K<YjM@%n~s&eM!b!%n6l+)#y3y$w=r??x7Br z-_)$=xIFkrsjd<q7t_>|R}QB`#cw|6X+zFaBB6s$^|1xrj9i=C=W=c_Ik=+a-QhpN z@}=A!4>tb%$-=PX8Gzx<Z#+C3*~%}?tP=S&vMo4Urr>VH@hEj=yYeh|S*cRjLc|G$ zk3z!016mwL0)oOPZ|Qrp=V!6&nN&<xbB&xRSu17qobrm>ceharDmS*%8LYOa2Id4v zX3wm;&$SkvQE*_Tf)pM9Gz-iBuV!K4V*8((rB4}Xmgm>1mKCmA2jhS1S#LlsLtjSE zC!qAT8|K7RPSm4v9lUpw=XiO4c`Z_F|J(eXAog!WzEee+S<9P!3Vp&^??1{5sC6Cf z<CQ8*oHiP!__F+xFI}ghX6urW_hC*9$TVNi63E5l@EEW9{i~TEt!!^uAG;;<*4=jB z?+XIEiL%4~*UX&QroS-hGi#Lx|5l<tVSe&(+a$Kf3MWS|g@^lBY-R-2%RZhn^}#Ou zl#~InDSWNIDoU|yxvF7w<v$`HPv#C>@*V8bYLK0wW+?O(5hlJFc3-vEWL%O&!fJPF zZ)y6bSD8^AjXq97jNGttqSZmgZXbn5_YygthI}ZNLDp-n#bL4EPDaI<>Kdnnd|~E; zFPWMAi`!EDk6+O~yDaA@YMRvH_Venulns?+_ZRz}A`5$m`}apgskmYi6JD-{;-#&H zeG6zhIi6nk{_r;2P~QxL>Lo#RL(gv<u{)Q3+@4hu|B)aRPl7s9Y=2Nf94+Ce|0E~y zMUgy~Wt_L9$s2JBI?vl7dU;E7R0MNaEZy(F%{isdx)}euQ{3<CogOinA=rP^`EjCp zt?O<1$LkFv--3&DZ(O47@txegm!<n=O<XaM&PDj<EQx@U)<9$+u0HD-+DY^Ke4)D2 zJ|_7=8YNZ&+FtZ*NiW68Z)`nb^1+gBxU#HolkYuSAfw?<E5?tRtd~`6r225JZg`M3 z?FQZb;QN`O@oyDb9(&3@$kEOGL`mXuzva`d?NL_w+p0|~IhrDo>+dCFt=jz-eg+vU z=J^IWRn2aCZoT)sd41~5Pru+@OcB~gI9TfbZi2=-feL9D`H;z%TQj?lzL9FnrW5=s zd$N63tvFZzizLewD#Ux;cUY2OFx8*j4;4)@MA`ot3WYD~<6Km}ViByX1l_`9cADN; z*9gNN6+W%u?a?H!37EQNyzYND<f?^Zk3XqO`-?v~5nZ7=O~3M6A;E^7msgL?{CA~A z-aO`fl;$0}k|!nkV%C&aTl|4e(dA5|jZ4O3lFiU&auW-6N7u6(D~7fYUME}*qk7tw zX5~r#Etm+(lJe*d#^t0fo|VmaqlxjQFyK*nc-yh%Qq0)L^7KMXI<=jW)!Jl!vF&+9 z?g!MK5xw0jy{*BA8(QH^Hnf=ot-Ng8Sl%Hr4@VWu_mi#P{i?q1&-QCl`9)byT-)Tm zyYeYJek1DqZ8d2)!x%q(gXasJ7F|B;cI~HRFKjeWoxPD4-7m(z+^R>G7y3YAt5T@@ zLqXLOnK6tk6U<!kjTwUXyN~idEO<6r_TN+L<nq$`hGR%Q{VoX|Z}a&pU)fm0R@|<} zM1F$dPj9yq<KJx@qIc7*el0z?Ve#{5dd+%)Ofr&TGWVJ6kXp$yeXR4cbkbXXnn$$@ zLM1v7gT!p#+`Qo}S$Y1gPZBBuY+eeh;WL)6>Dhll92u4G?y5-Le@<QZ?Btw~^i%fJ z5ssgVI(4Z*p(B~4gULR$y(CwRTJ`JdZ<F3?I<=*0-4O}ED_tkzV0pK?d-g4wk>jke za@<1U^ZQx*>+z#)%Xk(9X?x}B)ov~|M|Ex|pG!F$w_dxVK028G<~Z1f*U~1eYH7Hq z<mwuOIpnR0NyKW|?thnSkOgYB&kR_VD5%Gv@Dtj7_W92>uYz9@oh^an66q~IOBvn0 z9jLK|XfHC0EmmXfdK&n|LsNr(&Ad4iHsYvFi!!JTyPZPiKHSVR;`UgKnHE*{LCH?q zb=DzPQd^t4PEtqWOZInf^(Zck{>I9jlDkSl9K#|Dg?w%&O35PDnVuQdHE6@E{u;j6 zS!r=VizzhtwU*gSSVSVi0yj8g@H%RiFxD?SznswZ(wcOi@1H5P7>2~KNThB!-alYj zFp!7-=zMb${Ax(uSG#{pzx&e1s?kdyZ;{x>jmNwGbb-9=p4m=5`BqiseT7IFot5b~ z+klM5gKK?;_g-dwAlSMV^zc=Td`w+EYl7p)K>qQ=7@pvBV;Kgi)Rqz^r&Ue9@@qxn zk3TtTki9{_G~O_+xA&U~+e=aE-VMn_wS!l8o=T0Sw72gZ+DwX)eec+kKT3>to=e^= zl;z|bIJ4$C-`A(U<xZH2`4wy9DG{2;8wqOL)wJ1(xKn!e+r#_j70PC(A+Oo)-x#2n zt2lJFQe4^FB#-qPK3a<UcqKs@Z@89`LR6XKssPSw6mj`2U2GR-ZIp-a2Og0nH0$3M zO{?AUjcXt-O|?x!FDwmR(MU_=Tp4t}<Z^U9VmbW&i>uk<_8VP$0pve;&YT_l!o`#c z+SDR2IF*FA{HC51_r!WJleCd#uNR-rDy&yH-8!zlf0%79_uy;8A8+!^6#YeS^_*+B zaSq6PMyBgd7NoxB+8;_CjY~7h+WXsA`J^Pry}&+R3M5>4L6+|7aZk?ZUc}-`r*<lv zqjSRYjXz9vwvFPlDo~vu%G{@i2AH{0q*7E)J@0O2##)p%)JG1zJC7m9zBOl{iyK=Z z%DwOFm?HE#^iSBrPug2P&X?842rcOS7k-6Z?|7G`)1Dr|n)fl&+t>Vo%J)Zlet%qz zO9nF}hYc7c_-MNuqoUHo>Ys>e_VxuC1@hhc%CX=$Tz15T%Pu}Tbe=2eg07_fo}Bvn zV-LR2dFWR}n(Rj*bc}+WD>qq)W>!P9hxUUxKF%GY^Bot6ebNiZ38zWx7Z9+tJ(Qz{ zu6<@|84Vo@At9Shuk^XO)%i!~Z2{xU{p=bO8c%0Ycb)@sY|8#>^1&-#a~@LWbnSkq zwc%10k~;sApq<8abV9nw%yeKbZ};Bh%=^j-V@LuXemTaE*Bn*{4|Be|E0RsUuVGA? z#i?dxtKQLY8>HVmZcsaA+-`F_>AcE)8a(~AN5H9ctS)c9cw@HwY<{)kz_ZUbefFt~ zHA~^AhR4Q%RjMw06bjo(stcRnGjFP|MJu44;CN<E>y$>Umqs6sgc-CP>{s;JYk2UQ zE>Em4GtNaHF2&bwnOA-Ecu+emn1{E{bN(&PBR5RBfzkd--q^&r@@{aQ`FzKkz|kGX zs?T&|7DQ=PBMrhQ6<F@SP)f3eS~4S}{M}PIzuY*p`;`<kJC{z>TeGOWj)Ja>Vs?#% zf#bN=)uz-_!Ign6PyKEh=wiPnphifXY6cv?J93;&c;okt@{pMP(82$NBIb}NHEO;3 z*eNH|!y-t(y4c0m;~ekZv=HV0Cez?q)8A>;|7*0w$?`u%8jGZ;0+XcWJhNaD&YR>n zZxh~nXT-h9PkEc4kRKPB5+r2Jpl~NVt}L=F=&>Towd-_x#^xAv#J8drBBOr(-sQ7t zyP>*OhWe%xdhZS45RqvAFNb6KZw)DAWNRa-XDw`DW@%xrXKqW$iOnc%VQOJ5W2vPB zhHN5w_C`8-($9sk8UI&1MD>ge3~ed7m{_nGWnO97m{798%Y(t2jGeYEVovwM49w&H z4($|QYa8q7*kUs(80mu1+T+KMS^qO<<Kp7r`k($-89Vmq+l^f~&e1d}wqGhLwzto+ z8M4z~&nT%FSZsAPT3vCnC1++i&Uct0yw*(I#d?qSn|wc&QZntG%Wv?n-4Xot_8u*| zDB%-PxzI0bFK_eGe<ZwFH2C%*@wGiC-u8IQg*h_nBvql@<t^8<Ugaq~jX%eSmF45{ z9Y=WQD3sS*BQ_1y)hS6%rCg3b=`t_Afgor|b8jU$G4a0MdG*mzA0MB<o+1Q!US&6t z-~8pBq8HvhTIoLD?nX`kL4jIxZGN-!m~Vd;&^~0$`_NFax5~3%g#tmh{=C7|E-R~h zQ*%?;Fd{Q^)>p)Wj&OScthB>sAn`(LGPuB`)VMDyE-sB%5P~RITVoDu-@ffGc#QSF zmYzQP=qPTR2?g>j3Jj5nil<O4xF^d_PD7Kp>FD6FuZ~9uL85wK{rmTS7HrDP6l#x@ zjFB^f6TQ`Mr*l5ptkb)mkzu4}kyk4ML4uhPENQks-wF;Te-QanQf#*}tY?V}K@l&v z=NsnQXq75CW!cMUXmwUsd4ijgCr}|sbE_><rod3@o9R;TK;GKw>OLv3N<8X41%vwc zZ$)%$tQ>h0Wj65>H^6s=W@qS{JMhrG^d6;DR#K6#50|cgouC9ysAlE}!@u}6OUudi zZHXju5c(a)g4OF=M$7!JTnP_N@si7mDzR{gz=9y+teBWzum_5+;l5W<X5ZcAn=i!! zpQ~Zc&ZdkKB$$+WA3tAR9jT~rV*$>$#Id&V6MNas{>~>OM{SbO9PD>*uASa_CBIHD zG6h)Ad{{K03PFE@=UN}BeWR58l0X%dVrF)`!v0na8U&rSogC&nZNDUB#0}FcZ*EpZ zVu0f|@C*-!q-;?#U39i;S$W!ggZnZHL}|izVu^sjP-dCakDpu+)X2`o<+rts_ER&R zt|Ba4;rH}dQ?dm$D&(0R7_FkJ9JP9zRrR0cg}{T6#%rT>-riy}9rxMT`MXAznSdp_ zQAo=JU%$(JNQPTlWV*Dt*#-g^c;|L#I1v^`aeJf1<Qc%|p6=HC*#?N{QF9wT0|TK@ zl9WmX9Q!jY6i9G5lCR<*zk$#%>anr0a=17Nu+npf$v|T9?Io1w@9M?w6%^&<Bvn^W zP|ySXC?TV7<+3O8p)PZH#Nl4Z3y)TS#lF^9(uXwGE_=U~%dG8Qe^&Vpte2aap;P|; zO*T_}n0|D*zj$r9cz}WzxM~;|5&LJ;)GAI+PkG0GxRk;#XkyRIF<_&Q#_@$^W*T4f zRrk07KJ0FdRoOb2{)CnCvA+I6iJ8qb8Gu#x=;+f+mr~3-B!1S40Ps6IyTTFnuLgdp ztQ73jRmD~*S%G68^5VTOi1R4G6%o;ugdIs0m1?sQa}PtXw!eM{gT0GAx3RhU`AmrU zBnIT!6(Jx{p!uYRAYtdGFP)jm^1`~qPXIvwUNpSlFnq+kCG|&tsf`T{ZEwf(h@(T0 z!efx0QbBixB2%l}?JV-}z<z(aK~~W{v=n(5Vlk;+nrpYeHh&_833>W$ZGD*o`Tr!z zDl!iN{qY|oe}G9RXIJFVP?D^M>?6{tgBEt*Q$U_{YhMMm5^$T<0|HD+&1?YXJx!Ot zA`PcTg#9IT{BAfvk3WY_eUg*Yo3F3m5$g{XP!yN0TVCM+RfUeD^!s;3EGwhp;$0s5 zmCXTkP?=b4<`RLj9NDmuYinEHU$KI}8mW19(un6SxwL2cjNzKnaDRW-#QNJy5Y*lG z*K|Alqzdnf^1{LfEh_MN`)JvlM5^cSh_mFfNL-xbwurDn`C+or*Lw0K!;E*@@ydR= zT~37q>?Oga<`xxDmMld+_)1C<1T<7Qtg~}sLW0drZE82L7AUEYn514&buH(SLeQh0 zCvScUJ%1O$3k-L0xef9|lLnNRN)VX2m?k1$5oMLqdm$Z1CRk9-z39i&U2x1F2#IIt zwYc|=SJl#w!lh@ZP>hiNno#n`;o+mTwXrj8REQ}-zg@M+a#DN5LR!*h`-snF^cN0P zbI{WC=<p}r%dxmu#uU`b!1m2n7L0jNN+|Gn@moOV(Dyw_exI4S)ZR`G<B2$_%m(f0 zQ!&$TFL-Db*w+TT*7KMkD2d5LUJ4lhifxhhZ+tcfZb6;||EzEQZ|iI104y<4xj%>( zx;m*jIK)@~fgsiH)<}@?<{i`_Z0xzKt8UF2_7KDX@>lg6rDm2m`v(!KoE(*-BUS=P zumov+&9(6QAiaMDIUFRseH34XZdc;hfX7N%xw-BQpZL^4FqQP$W4fPH*txKur~~_T zx0LcO0r-T6$ZUC0gqHJ>o}FqX!X>YRcN!E(&(@t9wEWT0scz}p=;88ma<QU2_1cf~ zu0WpR%ns&X(;L+;TiRWCAO!^qMA2`fp#iwZ%6-B~W^ObTD$YNB2^9)VMdJPo-D48W zBq;;{Dk}D!BOxd`94sGvt<<1akzPZ6U~FtY41AvuUWd+B1gpL$ip>O>#L^1p=98c> zkt#%B1&JmX+lgsR$f&acyy(^YKi}R$6?3IRzn)#d+&^A*H&Wbr6)gT1fM7HZC&XyB z8Ntk3C{Tn@q5e%q)$fD-H&R8AK47GRJYTR|sM84u;M*FJiDztWeRQl`jx=yzOF@U2 zE|WV_eu-8g!@{~FdQ(oW<+|^<BHi4jOAwP4Ad16DJUjg4M7gZ~ot^JixRB;a8-kgo zNhL(}CN00G=*ehI*r+Q(&@|P9G*$tDZ@MoU<*#=OJ$=ebzP`3LzPt-oB1CZWvuVoH z-rnqmwYBYQXb`ctQsGB(kI~hk!11W4{@p!pkV#C^Wo6!12+>XN-eD1;5*r!jwqIoi znPhpNMV~h+oJg_Y_Zb26D?PpJA8yZ?BX<(fpo4F~3m-qe!`Cgi5Gdtn(09ZB>?!Xn zV{te`iDgcw?Xky|N1)_{hZH_UdO<f5;RTb4Dlc^}fF}SzTy(HT-am1|j}8?y#BkmB z_Wp#0QVolf)sf>L#3-N~+05Zx!6qX>J&U#E9PKX1$Xn-Pd;wA3ot+8grb1VJa$)-( zAT7aXO(4M@5eU`v_4Q^CmY9_eP{Tk%$`W?R8a5+i<$;moP=$v8M@VMYl)?0uK#-Hp z0E3qeB*+~pAOHf`G*x$JgiF)^UnVHfLV-u%9i^g1f;*bLeXumK1LZEToZS7p<D^ij z0owJH3-e7;JVS#+3L964YVQ3<oYh?cC_-ew^LL(2GIGVdK??zO+T%4)jcg>3gO%3g zHBuJMm#l!Cd!_+7GYwf=V<T)&RYasfZ_jqo05inI1*m!c1Ad?o4Xp<#QhbpoWeThS zLI_dv4nOdtv5CTWZ&D}%%VwUCZ*Ne0gr2gFjV(uv8mAovn$`h{d+7>liK1ZnUrkm# zaD@yaE<W7W*`5odQ(xILr973DuSXIyqYd;&xedw7?1AI*xvFD5+d6r+kmkF8rbi|r zb;+M*YimMSmI7K5Onrn9rXfx9l}jj|U;=}veuC6lnaXj9>|b|<{=6--AtE9Kq15#Q zwCoJmXirm6MHD3^Nw$3P1NDAQT8g!##*t3|$SMs#0o<h78Hd%V9u_8GY%vihem0s2 zl=EFAJ)xYao0*-Km{ri@K!KZpmED0PV;6uZI(v)E=Os!l(FFCQE{OS#XNxaFlkV*A zt1v^9Ufd5s;C)95QJzr|W`VVX#Hr~ipun}ccAOhG%lJtD48wwS5hl6htVk9Q50?^p zoSKDqwUc(s$_}g6fL6O-NVF%OoCq=*vf^rHH@DDEZLW<~i~(veqU3OpqWrUG>bWT^ zCl?~RqpS^4>a|^H5)|>!f1)ILbp8oKl3+v_BD4N=N6!~>D8ibH%NwTVCQi>6MW#ca zhet{ugy3FBskz~PPgYfx?j4l+?85qI5K|MdUj2LL>JTK82XGnkx*R})y7uHS2m~Lb zS@I`QT_Y8h=N{Ep2qDcx-VH&R;)`U#lSBkR#l@eG0(vGku$c?Jag&P*J#cAhSz&+g zC=d&(Z)lD5zH|v*Ccu)j(p+tMZLCA-7o^$yA6Wt|ru~;LQ7r^Y>y2j@r{@l+{;>VM zkmm2(Hy+aUK7k^W@~u`&%wSvO`0;2SJ_NKPICmM*js!Ou(Az^BD9ECObtHmCnMAL$ zm$bKc8wf2=EsD!GfgZc#X(|N-nN9<F3k9TPKG*v63K2ueW2jN+pD-CR{HIGiO$q-? zlMPKFJEoKrZY<A<tjx@{l@+T9EKqz9#6)lh;y3KetOxxPT_~iR9LaL!3ieC-eMnV; zlMG0*;<N@J6LddSR;C;t0<jAb`+odrh)|<IsduZJuO$i!Vxm}@85=K^R~*wNLCG1B zET9Pi6|-gm!OV7GH(O={iA_LCew>ibUtt0q61b$_>d4B-2-68Por&NiSe7JbU#JpD zJQOKQ2vs5J<`}M&D?}ihYIF_F)vFCUYzQ@=R8<LyCZr&PsAUkvZaUK7YC8%O8<LMy zl{3Ad2olgK#m4f1J(-#ikf+bbM`N0m&ov#*PnzhyT5~UgEi3)&*WRfsf=kF&5yXbB z2NDnbXS(RCn>V{0D_!=@K`r$MA)kUx4_x}fn76#PR%nUF!~n`M1D&l4JG7XbZ)Ik& zE<<Pq)o(aS!h|eF11&zh=37)^zPQ{Y0;xvdVj*v9xk6_JY&XjN%g4&2D8#-9>#>yu zQ5uQu>|jNj{~OKn5`ZfIQ94NBMsX1L5CENh$W;(&KFN+RK6Hy7p-6!$1K|0y5A5Ib zFz+A~f^_`==n;M55C)`Mh)`u~FCj|O9Mz%kI?t=yAVI<?*!~)ThXUolnnXtj3cUYU zl3Z3oNBL8U2>#gEj{#~F%EDRDg@$rcp+gi!NMV+PD)<au=UXRO=X)@lNk285!@Aw` zPhc{pvxJzg{nI2R_>hs=e<TSskp9;P!xB((5>k>tI{DVKOL1`&BeGC(5FmOY236C` zXr5MGqm}%TuKgHjlyz;<L@l6ARwKa#82Z;Jw_ylkJO6p3Xl`yrN%;;G0a-cv*Y})t z@*@H;1(!hQKJ#7xWGB-t`5fh*p6Pln&kQ6VzoZw3m?DvtxvFa3^eL1oA|YYq?ylJs z9C-gS_}5=aVxoe|6p0`v|9X^~-mDCzuCXx#8&sytK$kh6SOMA;G)B-e=tpZrA`#O9 z&shve8VOV+D^D9;IN^(;0caBC{!$Yuv1fiXUqy1dC>Dw!cSfED%uFN1o>I|lSx8P6 zEC)SVwaq-g3W=u);N%NQ0wtII(<CJv(A^-UD1#cw{;D$lcr;5cxbnf=1VtM4WwMQw z?vHFht~ITZ0&qu$1u?54d3j(zrVX#g<KUDaK^o*gWtOb`S^5t*7l%^NkryZf_rCDO z2ec-O?3hc00hD-34JUuq5u!qk)~{YIJG;aeu%Q<GhSQf2z48Rb^U8k>448-hjSHMs z(I5&*rCTNldNPaj6h9G7*X;t$6XZ#&1bSwRJeBWnS~oXp>#h(16%G++%+2lcIII== zqIN4wv{M0xLrIeA>I9!1R!1B<eXvDqaY5@u|A^iWSVa6|w#DT5D6XUswYw2HDRF#* z2I&w4Ji{aBwcT4eH?z5v-1J-sS^OcLzJURcy_L?giDM7be9zwXua&&;QSyhsTlHkf z7_^^~vY{szA%yuIbjbgOnb}y--3A|@_EQ&QEK#Wofns3+Y0^;zHJ+Vf`uLpfmx)OV z3pQV1p_Bt+diLXo8ycGMJcAex$|K#glfg=-`+h_fuz4Y=sdLi}uj4AP!A9+ds-Tkq zlvfi0<O?o^`{`)ex!c-OFFw=mKdk}|JyGpoxiR`7<BlfH-vQFIX~^^O;=-Ww(aw;~ zz%v{a8EOO_VxmAg1=>$fyOJ6@0(?kNQ)@=c?td0o`+yHIQFj^c{P`&yUdE>a&c#Wh za3NYCCU!TsQ-w<S<BUF}WNCrVibJaWI+okUoGks0CNpx7a0k*9H#S-RM8?I=YHJ<? z9%#44shte!`2F~S;+YRxwBvmW;#z_`Z0O>dhue1nJb)U8>eEY0En1(y1C|-xz7frl z_ZzmFn2n8%Lco1%R76U+hBF!-CC%)af*pX2eUJOYd2RHZpW_X9$6UYt<aBjtd>p*9 zyT5*$ET$7zTDazWQ<G9?JOvg;Ks_+KdpwTQ?P#U!MWT;qely%%e@A%yChgK^az1x+ zY2d#dF!pjfv4Ug%*!NiyCLTG-`bc3PKGU0c%$qmhJ`l9HRaIxc2p>&bAoKW1h!s>b zn5{8!)Xrnj{^~v(x@ymJp}M*{AppS;#q6bx$$<w4d!}sY{?U;vMD(f)2rG~XNuBx- zNP_xI2e3I}xCC}yS{inrYyDGp1Dv$wqM{jP-~%`5wnZV}A;x8l^}UG8=H<ta2=^ry zFxxM5W<9bL5ye5d%M6bi-rN;}Y7`OP5O0IM0fv9{ZSZgrfej;z*D?HVd#af-!Zmd_ zXmHSNVFc{%W{taUJIr@`k)WOlyn00{oS-*83Dqo!Bz1XV;-$2%4uOp^R7%ZPmzFZK zOmH#6o#WA<f#keA4^7Pl)hH0C>b}lPtE;hHhCdjIQK4trr$_zQAB^*af9b{F_(@W( zS?lA-sXB{;2LuP5yxqaZa)z@@3Gjf1FcB+j5xSR@g$tzlUG!do$N8HgZmMJ-Pm|n) z?Q6cdOH1{dOe<}8P|QGI@o8&h;XLyj64YF2VWQvDtFyDkdU{b<P{BYHTU*2Dc;0X> z0E|Si-&lD`K|w?@1QmehZ>2Lqq300xc)hYP5fH#Q7%e$h0O=ha@8ja?D`El=gtFPH z8yHX#nqYYYRUt@ia^b3a;6y{?g}43vZ9$>|pcZ<z$|xv!>?~~B+>*dSNy<yO5*5Yn zBh->j0tMb`ZfS}4IIHvLfi1Y4k+5A}UT$n0_4en7o9IyYaC@u^28K_&-W31}VH~y2 z@$p*${iHEyp0>T+1)INp_uKV|z#|nLwQufjykxlrsSs#z>M}tU;Ny8V4Q$J2vwb2g zEXG7!Tm=cz_#rckr1=*dYxMq3Ctnc-J3F0+MZL;s(4&VzgI~Hz4YELqFj;u(Sox!} zlAR3hG6QKyNTWYd2sq(_jI;#1nUAGPKGfeu@yw8uBH(k}kd!AU04s)qsP68X2q#$6 z5<ud<XJ<dWyto0_WMqWr?d++w^L->6!Msj9uD}1FV!evd9h|TjoX})>&hq=P78Mj> z2!ze^&*b5Jpi;(?lz+`I0*7nmz64!QsH{9WoY%00!JDB3*0Zzg>t(&<MPNb*`6uaa zH5D4veIh}XF85(Dv{?6lwhVVw`6fm~j#Ix~xS!*oECLK<Yf#|5&&t+@n7H#5`zCAi zNCRYq1-bh>FJ;LWzZ1GC&k7NjAyJiZ=QfDR&OcO18fNt2K)EzQgZ4*7EJDUuje#WP zl;jqSjCpWRtSX_S)1zW>D$$*OhjJSLU~VoTK{90*7xKwU|3J>`2wG@1bX|KKHA#(X z_8T;%dnh$dr>8EMn05eX1t~u5%L}5i^0~HPt)c8<JHRCCCdA+k5Zun;^7~}D_CPS3 z$|#ghEp$yUJ;gy8QU&%X72dg_tgnYoNg5g+E^vP0XWk(%>`79do@HY4>Qx9B4L6!L z&4d`J#pU=wY_^Y(IR~yObmLM}i$My6(i&q)3M=$?7d!&^F-Hx&rJbKy`(DEVPPg99 zMm9LxZuUz;-3s@vIqeO_<Klk2!G@lmVDd%OwoV%-LGrgVw&3uKdnIvPcR^|X>QjG@ zd>u>xV5cl5CM0a;l)9&hBObI|e_iAw6eh0-Nh>{l3eyPkv{6_9G+s|YryBSXkzz}f z@D7)IyMofQRTsf1P5QaXa;i+)csLb&+K?nLzT#9}1p@<_tX%Utz*A2@z^9#2DbyDR zcu~GuGlRrBqShH3V%yo7<zyIPdy`S4YHr;Nd5wGZsu3Q%iR?E$vFA_gu)$z5!tm8A zlg|_a8Qkz`rC)&-9Mps`5>H<sK6qRYc5UYU>oe{M;-uvI_<Yg)_A3*o#?e=Vs)PTy z=jW501mNIM3{Zj;v+vyasQ43wIH|oo$Dkbx#63NM_4;Rr(C`7!ka~6*85+7S=S*C_ z3P0HC8?AhNBeN(Kjma9xtw^UdU;XP8OFMv*+aSL@Nt&5%-}Y^84ugffHM{w!?NaZp zr-+R+lvOz1*Y?4kjH=q$$Gguz;T-bI!5h$hbKX6Yd}zFjNqNn8Wx@l9dHCb(?!MyU z)YL~eKo3vpvb(cFLcH+?K(SZy%Wy$TQlj?Lhq}+9Ks7KsBNuR&=1m8NcY$G4Hl4l& z6o><}D_*txT1*!wSnbZ)D^O(~%4)?!ff<0Z3OmkvVHS`SR+Xmey6MOEPKdw-!}DrS zSN?A6tvkuURlntaPu~Uw8JN;|l~z8R*Lml=ge0(0dnPKH1H-Fjg$iJfl>}6mK$u;> z`Vhw+9Tg`?mfgN2IJ~&Lj6^8D4nWC=XUi?kAhe=*r0hj;+;-21;nO}=|L2qBg5lwE zgiqk|Vf^9pH)lIBrUgQC&(Q0>B75rse?YY_Ktu2Cd<S?{S*GU(Hhu9vBuW58*e5L5 z!K_9lri<z6iUin0UXXYSQh^ymFjA;B08&6X<UnOQ{4ck_k5Z*!x6A;UKeM<#!NX}d z{~7l1OVNAf+W8m&@Zv?EKINpnjxSyW70UQwUs17{uZS_2t1}VEXQvAQpRDr3Zp_F= zR>G=Fnw3bJ1;ZIQjI3qe6<|co1uDvWfViqE_fmr-7>V}W+}8lTf(r1=pw_2fCaryN z0`Z^<;D!uWVWbc8S4B$G(YOHkRQifPz-1Gp06KAmNATf|Z#hI5f=VL8v;bNmvE|iO z8xbsc->W4~HWzv0V`6N~?|zb;!wbJK^cBo(m6Te~Fux-82GW0_W=qQh7+xUS1qvSL z<3FF=euu!?OV|@W1qB~o5d_K&k6ed+;Q;&MLrDoeV9;6-L3YLb#4}Lz>{k&{Rh8+f zmrU=LxZEiFH(!8sHU7{t`fE&1VSwx^L$L`ev$%#v^+=%<z|&MF(i1<qC|NG#muV0D zKzruG6VFi=X$iBqT@UP#zWcoZGzMUUJy}6#kl#Rzg3bp<dA;j}Gl)y7QM-i{2KHDC zFjiX-i&dJAk4mYltH`JNdiECUzuMlMez4kzctn-0G9WKcSU8O;eW5OH69~aa_LT=* zKulM9j4CbiAE)4lBp0#}__2kCJvFWMeAJ7Oq}lYGuy@6){s{|e4K+1bqMKDAHZf*n zGrQ{jWhfdY<St17ARI%(#(Eecccf<s*K*6t=Oi1os5G^AcX#owV%>q!DawVUgP&ZQ zRKPRNfGF)pU>^rHvzvZ+Un^&C4hkGXPK>P%As#T0kSM?XnXX30L>MHhdwzx{EX<8? zO}98zmz>%d@l~JI1y893Se*JJ{ZAE8_fL5dXRw(>ff8$^10xPUQVXfO_{c5w!ou=} z->ZX$3_ddRYq!&3%})B!niPaM?R|pSJ)fKBdcLCYLtRVU1CE@WO~44HA&B6c0*>Um zmI3Z@1(9A^O@O^ZHNuMY3XYIH4I`t+*&)$|>$Cg%`s6^KUwyW6^-k8xXqkbgW@G;? zc=NyV;jL*WQe~L}#p+4&cCtV3GjPh@$G{9EM{<z7hpkX;&y=H2ko0!Ds~h}JJHY71 zSAB|f3MeM;-(3w9HRW+T%2s2B1Ic8)>FDC*WX8F|M39_SU!MvZx?u`9LD7>6k@8C6 z@?uINmGj1*JI~+2h4F2ER-OhacG!rPkn#dtP13y(A6xbO<w;RJ;1q`mw+SDh95naa zMGVcxK&pc~#EjJ3TsVhHex={x5d^id3#md^1n%6tP!6B4fKcwm4@u3+$^yJV>_6!D z>jt<Z<z3z~Mbu@QqEd%vNxQh$f6iRUs=cbOa3$|muI4AlRTzr>HG>qNV}_vH12E#2 z&oRF2O|v4aH6=n7bb5?;6=#tWUW;n>-ZizpzJP>I=?Zyb2jAcQAd$@MpTJ2WOZd4o z9Kn?JVn|KZ&Q64YD^Xh;=rvv*D-!#C{J8Mb>pf^|;DB{Y0klY_kH!%`OQ`l(|ML|W z`LW{j=ZOW@DJtK!W&jh!a_?5T(Id`v3tWM|gURw|SYKZbC#bTwkq?~uvxo4p=?ka5 z@o1570Ru}oT)N+Kb930(UYSq&Oa?bS=!h%+d<ovVK*+_#fK_>&iGY<YhYu7%dOE}o zX3EO!-T*7Lx@pMP?(aH<Na-*hu|nW066dy;=H<nn3wse=<@$wm7<>@2dCeE091!vK zc<@(HMP?%PltC#rd?-t<*SuXM*mA>MAukfUV26O)Is~|`U1*1p%Ro<oVGiQkuRt9P z3!@$T_38*Ys#qV1dkcr$U&3Vh3qpW*ivjJB^!)Qk1oFXH6dS2fg5KU>auovEVALxJ zVuV#Mr7+MR6_pB?6ln$K!<m|zz|)7Y<v&FR5$eIaRwOwJDKU$#BU}|>2!3nO+^lW? zC;4r2^B@r4@jM2sxNu}Ow-8O;P5Wu_NrD7}_|uG$LKq8JsUm;X1CI^0lEFNH$vb?+ zHaGklc$!;G#(uTU7$W7=kS*fO$)AwQ`v>>+2Z%ZdW+MpyW@J>ko57r4uc4uFK2&Jl zfdNNQ)ab9I(yuff{l3_n!D1hYcwsTI*v<waGj*hZ>~0Lw5#~n%PE<HcA<y9oM-u*D zs)Wz<M0xo_J8+5r7QIkZh|@mtK{^FUs<e(UR>Z)f+vgf=I^}jzktq$WANWOt7AS#0 zc?&qSBh%*zwTYqOWguCnCO%>D9k0B`#5B8$a7%&EU$@W)&T?~?#PPfJ<06+E`Kzkh zB`!qOkGqJ&v74BW6JKSJ!5l);!(X?Uo}SW=s@d7K0c9oK=m>^57moRZhTu&%rN~;5 zNTUl0L5J|MC09;PbnT?^dtc_i(=Bj&41=r&D_ec++SPJzp6liv<JIS$cZCqXRGrpJ zg!2a^{Hvf;XP4uP)Ya_$E31tBY`c4VT~7{P91Fp)N3G8VLgL{KnOhloKuCZQz<m3y z05mvcn!KPZc_)N>JtY^>V%mFwJ$muQKZqpK5}H_EamYjtwUkJoNDA9~g39UJ-(Pb7 zT834`!<*TPQlJ~RQW2!?jkc&-yaPK2r4~V+G`o$m$bpWv3wy|)rU&sS%?ecou7_I_ zCvzNeU=r4gZ}~()K|xK;1^{WTsefQ#eb1CyhLeoHy2O1ai6Zu~PJMeU&wJPCJow8S z9=5jk61$weY(jJ{9Ju|s2?G<edOLPqRaIBuu<5mrP=bPnTVDuFF{te$->m@Ta^$Hc z{z|hpS*PWkQvUt24jc{Ryy~-~<F$%B@Pm|{#hy4=Oyd6`T=OLuFEq%zD<ocK5a%>k zzMOl!5q0eQ+LcN`z+<AyjXVhco-X)t0vv*$nu@jlVDuEgSatC675O77k^ptB&C@BO zYR5AoGCt>CFSyfqYx+;%)oTwGWS*U!e##1wZa;r>a<*UXF?-+fXlL<!1Ml4OjE{+l z>5nhm7(MAXHX4$ZC+uMx;3XzfFV_=WcUdo^e<Qn7F>$)q&a+O|r0hCkR?4^4co!3w zY@-vA0Vd#L8BAE%+Ocxfe@qVMm#!{}>UDr-Hh^QCbL;70oXeV0mFwY%#jzLM#G(&9 z3|jbDN7CF(r9F?GnWa#*@vCLeCfQpqOI~fcdu90}V%6wkgp?+uKKl0Yqu!4nukmnk zhg*Z5SzB8_D}8p}MR6)6CDql!XyO4ws*xKx$HHEC3tthA^gE0@b+CUbvRUfQs8}mE z>80J>9nd%ruy9RENSGXRnAl~4TM|kaTQG*`W5e_kE9CVC*TnnHv=)OkK~?IGlitzh z<wpKud-SEF%ogL7X>rcY+p@4{SGo{$9E15ks&w+lA@L_!Ii$C~78l!9_OD&hP_SJY zeEeDtu6_l->jOZVEt!%8(5|nnkP>s6OgyWP0F!Ob+&?|3uPXM(T{tYp|5_}DRIRtp z`Giac%$<%`L+nj;BYM(aPq^)mO;?2;ms253B}Wc@n26gO@iQ}&PN)3x2D5@PaBp+l zw$PV~cSfyUxKQk`r2WG6s>oEy&g0x&<C{?ZNP%9<yWACyG25P6JOTLP%Oe`$^1>X1 z&TRonuTrv8wLgAKg|$HB$&;V==r(~r4enh#+|Bb?eUk-41p^i{SHGkgVI!jc*o#j$ ze1F2@JWJzrX@+ixW7HDd+iq*Ptg?MpgPp-FhZwg#r1eXd!jx0UbDi`KH*0B>$g4V9 z$|)V^t};0)GU{3TKK%(K$hzy9tb&5YNXcq=^~vnv)>aWBTBP8X?URVH^m()|4GoQp zOFTIlS<!>L(Pk4>r$@_q6k}U%XP5%#haKmu6K7`X>gsZGataCqevDNQU11A7Q&WLt zDUju(Dk{n`Tjp7>G~vLQ4+{<TcWtWLtS6msiyjynI{bBoF@|e8CKgdIjMUVS)z$bm zHTZ$w7;Rpq76k@TET7BX$i&$mTiY*srGnq{nTYBsSB#KY8BCl+etm0W$CbB<T?f08 zo?BF`mSp7)a7?&v*PWkmcx-c6R8F2NBI;zWIbvAK=3Q#wV84fRHKzFVZOhOPmwn)l z+)DNE@Nkb+6OD=k4T00e*AGHod<J7kV=Q7{ScoujN8Y}H`+gvIY-?}ifm!9BOwhcC z4J<d1yO?Tfeoaqb0L6rqpUq(}`#cLlJ>Sbk60^$7AKy^szWfN>@6`h5Xt!Lt%gV`l z@W%^JUF*l$arOD}mFj}5tYv`hnL3ZN0guyx)H#F$2|hNAw6vJCH2=EZ`=sTI-2VPL z1qn&P#9I?^01J=FD;nQNolol+-8ZN5P5@X=!T;P2dQ~kf@-Wlk<oE9^w=+wSG#&kn zWj53eLY=l+q-hIEL>a01_sQVp-RJyUL6gE(XlQ6+U+BsX?4Ay&IjBiV1!Zs{sAC4v zhECgD*<b1-{Y1`Z{`r!QteToz+5O{<$y$noy7_ZLy!fc&z0ztkW2C3b+S^6w`th*? z+%0o6jqA>jG|t1vZu<KrBqY2icU}k<+q=&gbPOLBl!xi5yu;o!{yuPb_&5`$mb(Lp z&ZMm0f;uxjePz{cnCQu`18%FS-?0wkhm-d!z)eAL^>}X#j20$)WEr|!!N*hJ?l$$? zSB71Vi2#?3({eh116(z_?{q!S+qgS6HdZ?Byu6W7HlX1#76O+Q)MvSWg}dq<@1^B< zPS?R9^a#Z)`JAJg;8O>WeFudz0vQ_w&IXY<qu>{pRZ=Q+Sl?!sX5s>s(T8!!W6!|D zzK`N?qj&V~XI|?w3g-yKD{M*#k*`+CS5a7Kp;_|+J%Tq)A{OAIf`MTOPFJi7{rUFT z_`_BM@iv$ZP;`on`^x*WM#kNblTWXUR{<D!{8&tlX2>08{IS!G<+0HibQh-9_pjSl z2lHzY<q<WvFOE+j-|1~ecXzk7RbN$V;$yZnIP^fPIc(3hReUoZ=<8Ek?r_&MUduaM z%2Nk5f=w3_3#q}t_00~b&u;F0?lVEppKVS*|3r4!Us`2nwRm1Da8kQEQkr!Kx!M)@ z6renB0pNaGYj}k`wJ}yVp!k9Kv&HyNvlE>I0}g<(BBNwrANS%X$2L%SxcXBp0H)j- zcUf;cLIMj^v?#84AuzrmpRS%+87fo~_<QO`^$Pn{5`MP*usqjU05aH}5UB1y^K}|P zsjAA3`MbDog=y^H|G(k#n*VSHGj&eg{ZJ1!9-LW;lg$B$0rQcPS8xu4J@>@hUPZH; z9rTVKuUF?Gy;Ot55-3-#aZwfLXUB}@H_gjtztF3cAjA$BU1JCf3wIf^+N2?}60EG+ z1b(vv!r*q;qT#-n5)LOT_*mBqE;&3ChZ6PwywlkJ*J6|bCbs>d4tI7LWOl>rjP#B= zR3DE`%GgA6SiqxbRAv>A^Vh3rZ?4GLw1hLp^Sd3@1^ljb+U~Zz$ghlWb>}u}{O_Z^ zqkQ|LA?6nt6+K;2$QwCBQHYE3YnX<e1{N!@H(qOvWcmBApK*LH=GCWre#akyBYAHB zJBPm)oF6|iDaiQQN{xD`VFv<44so%ChlFf{xFG-vd*XO+_4pT26_cy+T4#dr--T_A zb8~VKP6pflvsa0YZ9j$4?NQjjeZ;@Q_?<W&-)AuA;y>H`oYwl!`;Q``T=vHtVCI2c z+0;9F+hO!E*hiuIC=A9Dh|o$*l!=*{91>fBd@?p5k%X}?^2Zn}Vk)By$d6@jB6WoM zz4(DR5;2^cox*r(gYQ*AdF0~*S0zZ-m>K6LC;v_+Lv9y6AMfF=sR@jRp98!hzI3q) z0?G){jQBF*KL~^&ymWz*|LfIW{J(Fpq5tnM{M%+KvCyESYP+2$4h^~1!z+A83rQ^c zt%GGY^PQc6X^2CCc{aI0draAUoJ)JP!ui7Ivvj~XAVcCVU%Vz(xzjBcfAISOL#0|C za0IBa%bSiTuJ@gokw-}I2ZZZX<>gbY4~yxumg<w14);A4JWM2lLx<*CBW;@YS2fON zHTrvdL9nVfKU`RL%Sco651fIcD*Ha9<_8tk#}#eS9P#IRaW^jxP)o*TJ=3pZ@ndUw z9}pBH1H;)YqsO8ZVpQ_ghxvtu#suKmXItb|zzPx)5{Wq8#e~04g^i3B8z<^1P8XiL zsS#W($#NAJcN`R`fg|O!&*z&0N99z=s7RKBpY#l_mQL`04BrN7(_{U|ey&RC8mu;n z5#%c=ylB`F#|I=G#jeWHb>J9~M{&+ek6t61KX~d3bWQzPc@?P2U?KoFI8KO;?W<3B zU1w+Ke)ajOm6H)rf)`slAFf(>xHQ~$@Sh$zE*UX*0X5To(@(>(<ifu<N-ZX;KD*A` zojxPkw|jc=X|IBe49gQn8w~|S*XK#{(rP|hPiSJvW9xxOf$d`VfVxXt5~9Bb*CnCX zA4r@mf`TeiJ(Bh+dJmLa^YO|<kjHUc7fyK!817F!sYOgo_=#ERn7o3*{@L-m%gV)m zvfuREqO3gPU&r&Gf;Qr04b&LM^DV~W;$q-4M^La-e<LOz;3RA;2JK`mlyI_HouBS^ z#0ylHmpg+r2TG998}DL6`bwZ3JT{3u9&Zio&I8RS`LMUIZ+FU%G0GLuWP)=SZ>w!@ ze)e#ku~_MFTeEpBa9T8vflMUuC(w>3nT$)Y=$P^V{r6GueKFA3@p1o+Wwe0DncPI5 z$w2Pu?+5%=o7JG``~X**y9*cSGg<`>&^X%)&pXL=KUz%FaGDK+wFS)TaI?_!?--yz z+=VgttK!J_LEQJwSD$&eK4frR>_ok|wpImd1jBwV!=p!K2edpqJm-J#&i+iD@05BR zms(VA`e0%qkNr~Pv%uNG?0Db#!RK?%6NRd+W?G=P6&TO*N+;Z1JUpuZeNzS~sEMQg zQij9av+nS!oi`e;TE=Tr4KG0B!NP|5cRjFrJqXy|q{D6-#{@4c>&~P`yy!ij*KMb5 z6DI-xP8s!*Is`!a^u5MFcuNeh$PRFp0snSnERTb;zsxTKgfIa^dH*kTN?VfyyEi2; zaIRjxar0(mR5X~Cx{g;mne!_k3#HEChe-gB^P1)IjEu!*0X<`eo4h9*weu8bMAZj% zhOA4Z*2uE^`ym+s2*_NDvvLLohN`94KaQ5NG>(S{7|t5gfFcHehNdL}t`;Ru597}d z>+lw<4%;l^&PiE8PuqmV%7-AAy&(g@?CzU(r=ao%%%m}J0ZF`~)M3+2#_PB-7i~da z)$2aT690&fj`zHSj|@pSkA+&k&{rIkpD~`#R{Nh|R+N|XgCeDVGE{xGT+PnL5eY6J z9GlqoO~8Sc`m$cfa842+iRl9^DGAAu#rbNrnxoo;ZO^OlO5I~@85@oBqX9tEyL)@i z$suzdC!f!)%EI=OK!x$Y#bUoU>h!8Q;R4|!CqTpgnEu4WP?--LKkR-N0|Ns%*Lt&R zZTmbSJ-xAabOu&SAh;>Cj6df+3|g9-+a0nRQjj`=!3fL_C=MH+w^!#otdH}3q!2jg z;RO5z`j(Q6vZl>u+PteCTj4fU($$**7ObqSG2C{|!WTk`LQ+A&;VfWmaFDZ{;vAOo z?$vIaZRZ)U-7?eC8f0S8=g*H+E4!vLfi@x3P=N0Q0ZH?(c${^dE6K{TE>WD<^o}0V zmxHbHEhm4Os71M{Ato8%DsT;m=SPno-I}gWuBbQ$$#EMrDLDo~#82P5Z%0p%)uHm4 z4HtoogB4>{E_~?+2++T!tu=LydLroV^LBxGsl49OG5Zmqa<@*lJ6wX1kk(#_myd{w z)^&4p14t*G4tDF{+o#j0Ist`wkM{yqir~Uvn<f6xKcno$bu9FHy~#bhrx)+5Qh)cM zFoK(aVx0!u&w6h!>izWhw;pRY@w7BF&Y)iLs$5`%LB<A7XPx8gGlTg$@uw>W4Gy<K zrM*~<ENu=*+_UE1QFOSc15=*|+E4!TST%L-3?9OO@<!ew0_ZcMGwhV{Y>F{6D+?&M zSD%%UmPbU1Jp!5!7An-vZm<XgQdl77{CL?x^1?TgfXYB7vx5K^52$Y|)(?zWRG%Jp zc(_{=9&J}gdwYAsrKBMj8K~SP*E82;l?i4xj)Xn%v$|Rw4)Nd3XN#{rjz}jC>OpM_ zXHX;g+~BcS7$3{))QxtLyLZ7a>Xc+`uIHqt>ihd0fY$w}FVCIr!Gj0jkA8}aPiGzo za9K^g!^}c%Q*S<yt5%yfSG5(EN5=0usB`N%kP*a(!EQaTI8IL|&QA|tj(yXrt#Uhd zKOUKI_Pp@h6v%ti0|%d|C{m3F5-|rM0*4_cM@)tzC1!EaNb$wQ7LEdQo$HDYMa7cy z>6>|=mDgQtFIKSTJ)8-l02=OaHk|K^RX$)K(1JgG`ZTT@`MxOVDP>fq4S~W?P|p*4 z`LbQ$9H{W~DFGn1RZ2{Urn)YYxhW<Ji1et8oXuUp0;jV;jNI&BzQv*+b1X11N)qsl z4>5!i#L+Tl2sv3&s4fQ!FqEptTcr3^Tko%p!LVRFdkwRNhV$Zmyo;EL5BJ7o<X91X zZeT1`2jOl5Atv&e1+;${yY6amusu=fREX@G)9+Bf&&cr&jF0yKtuC0XZJZ#nEV48R zaJ2!OqGJn80iE<bXla44W;i_gEBZfVY)xj+%h>2_ZnZF;|D-ti`96FF{Ek<3?a*Vt zVuI~&t0Uf~=eY*{{-$FCO>8gmsbB8KNjRehK--RAwIitDe_a>Rig4ZRW&=p_V7REN z9X{V%8Dcp(oUrNO`@g=X4P=@M;G&KD#{%c`=dOM6&Y%k-|3AdNbySsI^e(zlF;K8T zl#q}R5R`5ZP^3GgmG16V1f-Fa?k?$&Qlz_K11c>oDb1N1^gF*Z#`))td&jsA{`kKA z?zh&QYtCmr^I2;<|Nb)B?FN(de)^d~K9-zbbqe0@uB$*}GtW-pWTdf1|0b{1od0~* znM0*(8+Hv0{UQr(T>>_BN{h>KrscAmIlwB&fCr64C|q!zkYmQ-w0bvupB0TNKkm1e zDi>+DHtOxpgh~b;Uixof<YJ;3OKrp<^@HV)uS%M2FAi!sAG5Qw1A2=;)f52E|42X- zk7QuB6AvWhw4Fq|bLURrRP&#eu|J-Voxl7m7(U)gFKg0Y`(6Y1?gU6yUb^m+X`&N* z6%}yUPo3unZlurkeFgIE_^|uLnIOUKj^y8p^*vS3j~{LphO5QkC@9bu<<F&eeBgGn z=HcO?wHLWOR=yU<xmr<yxeKX0Ec~p(f@DjbF_#aNa&0Y-<a9JDUvS$j4%|H<uY)95 z`=@3NGvUAT1bWZNW`b_6P5=2PrLumgf**hi;8;ae{D4xFWf#J=n%%@U&|jx12w2sN zF!k(zC3yoJFd46qKKtgIfA!QTJ-_ZjtE8*te4L$b=f7caZ<pwt0AI#uIc+<h8wd^{ z{rImc4wi=;csPaY2J`kT&s}Z_$*P2@q&iMJZa*CW|IX&`xuRzR0u4|<OT=;fO=!gU zhg%uEo!|c5AMHVO^g*-RVKY>#(9k)pR-wXzDh!qN7<A6+Q)p^1kJP!Hz}uc|B^=8l zCI0aQ6?0jYZu=Q-P}>jp^qfIelK)+O`vZ+M&3imu@?TB=BppsTo_DLQNZI}Mg15?f z&+>0!s-!tlWyAX2ei}8V-yKi_2*_7YS$0w7HALj@<K=E(f&Siu7(bTFfg$g|D%5{- zU>xP`C*?JqZbpk;2fXUGI9YFfohFq1hH6R`^0oyn44xa|F7xMc*nC#W4OEpVZ5--V z&Y&wDgqFL(3lhpJ#7OBvcVE%xs_viOiH~0Kj{UyL`kVX5oYQO!=M^-5_eb5$*R9yi zHze5D+2@ZI_ndj?ckV)hC@T((et?NaeEMg8m{|!ekdJ}UpDm^@8eB%4{<(YmM>_$3 z73(xW@b9yytO3z}{{Ff7`4s<7{(S*v&_QuGkC8EZQy}3IQ_7r>0OIVg%6VWM<=D>u z<1@!s1LH6ova_@Q`x=+k!1(sku<*arxcE#=RscEA68z8e><7k;3TlRK|Ig3r^Hj>? zUH1*NXe@z$@4JCG{d?sUD{p00++YOymX{%^bdH@MI|LW2wu^vTFF7S;mPdPUW7a?H z{8PMh@b}0k*?#x;<Y=+prHdEw=u|u|Vk%czFMRR1G@IDlYv@>Wj4U;R)w}ASUVV9g z^MSLov%g|PVq#(xqaIXx5?OL>F{6JBmzI`hyG6ysI)Gbc({2fNcSi`U!%A-mOV-DS zd%z}%NJ`F|FawGB?79m%&A&12;)ypr++EL8tK;YA2XE==8spH>(E$K_857f_JKSRA z(`!r3z6I+Qw=C!zsD8H1BgjI^y7i?BQ%c4!SK-T?S&<m?OB$TV4f)SYRQ}}n=m!8P z!0E2Pzg*Jw(OREs#Kgp8Swu1HBcGBK3)GvuclY<9@^u)@mQR2|R8>_qHqJd<`}y-# z@zOLS1P#cG<$D~^wogt@uCA#GxW2Wy2`N$8+PWm^cqmWh!Gi|@e|-G!(5b$Zmi~e- zema^kpkfB4%F`~fI5Y~N4{O<lO$!L7Gub_!``z(L)-RQik?8}{1~bON!J#vb^UpV* z+aN9}8<)xG2TFf}Y2dC`w_2rTW786#^jCm-uHhf-?zUvj12<B}AuWW(0|1@z^M#<h z^!!+|)f1^Ch||CNmb(Nq&aW#izs_~Wbmr@5xbCHmvViqMC3)y;Zdy$@1+XOi0Z(Pj z8HdPlc<9_t3nD1!{}^;AnbmA7n40FVOl^pUXm}|dQOTwc3=eMxhI%1_Pya@N1G%P{ z2~MGMM1fbTY+_5h1R>vI{e)KpQ2(9B>c+c+^>5DKzI6+^H(<HpxR{mE;R|)_598vE z4NLaMyRI~5kL!Ng4t2M;Z*Ffh=hW%6-}!F+&uNKKSYr~yX6oCO9DI23`VGsSz4-)u z*Rhe2UBK*jUD;lLy$~SSpQLvJP+nK*5DGJ9Qz<#Qtq#WSyJqZ4gm!uY&z`;038SH< zopqu7J3+rRfK%L~lZ3Z7S{d^!QO=v4T^`j-VD=YOsj|+Rq`Z3PQ6|)5zphr8PrlVb z2~mcBkHPf(^yx{%^^}y9mEGeMz#7U!KWd<F#r@B1@0&u-^lI-%4ak^aO7BbcuIlRQ zndRH~_(r>Rz~UR27<jT=DptDV1|xC2YnA2+6Aa&VW73-lS^lg{CaWZu*X%pjcgKGt zz@=nj0uJCZYb0BsUSsS`1&tZjJoR3lqb=EnWOE=0N@|wNR)$}d+5<yVWwUhcB+%c# z<N#l}K%>r7iHn%HzIOTI->XRl8JU`vX-VDb04+Sy+{E!{d)UNyXS17ktRg?)K6h1$ zl|#o%I&0#wDw~{1B47!u^}a8GqvkwT$r-f#YxH0*)q$n}d_Y6-At9PS5Y#O&6Rr(| z>?de!#JD+-Fi&k@hB)-Yhu)}RV&CM!Ht0S{9#&3$fw;sWdji;`Sh+4#hwtyiSmfh~ z>-w~~0mxTVQ}aHLa|_Rc{<SMuSP^!K<>loo%tQX7O-jCgeoHg$4{2zMEqY7nW3u8x zLPByCy4u>N?*5zUm2~WA5HY*$X<j$^--9q<Y;3IEUDBK;8hP!rDRe)}1VUe%en|7V zO=;`8Bd)8fYoyq*(4R5Jt=1ycC9B{!KRau2?aZ;^9gz^pt_fuO&p4NuPH-HzyTwdR zO<i*`2H4HQ!btbUggs<ss?jgb?cT}ZJa696pPijr$8E#;r2@6jLxx94q;eqI-*FGl z@e2$rbF7Vf^7<>FdyvYHK3AYsuO9i7LZ?=xt;Og-q&!jMcZb%prG2DG$8T^S1P|sy zNALv7cdlb%&LaMMM>J_{%-ipCH#Rpz4|ZUx6(<)_35Q$@_1gclX6Dol)!q1FpiN5v z$tVb_bBF9&s4sPPb}D%9d3t+W{r7U?0?;uQ5_-SVzxMNshnA-1>i3%V)eszP?7Oz2 za&loSv;e<p?dD+Wa`L9k2k}OJy?pudr(9mGrfc4ZQTOiMQ@HL0r2acCccu%ce={r~ z7MP!&?vLO69Y!S!9oU&k4aI@+@oK}tY^7q|(OUEe-Y;?vK6PFjlvr3;P*`eiYT`&e z2Kq#&)RmwA9MQdhgT*;o>*93K-GqjQ=By?iqpT9V0z|4>w1SMRETIf9De2duipWUZ z;?{q;(p0cu7{!gHWau;u;}m``k_R|kH5g}muw&vqpaBzF#{w$CswxieYYkVgT`S2Y zx^t(AQ}nL`TJol)r3rXlE1aHLURmLW1~+)}@bGXkJ|>xP5r@GqP)}I5q>@y=e@%Xg z5ysrEWl2&(qHJFsa>g6h$bTac(bwM(rS=MsXnWo<a3F-GucAdiTg?X!s$t)}IT^fP zZaPt<d@>!xYb$gVfX}L&S0IyRZ}l(3ueR;hB*)Ra9@<w*7#L(VuQmZB8Cr}Vt#hjr zSR`UIPb|HfCV*PIgDkR#1YpfUm~ivonBiYvcibLSB(&_?nJJ(#T#505Cdhm+%8x!h zTAiKU{?(h(g<EI45<Q6fnCPza(|=>Py0Q*(J?`zW^WEQ}3%E2~VArDfwn`)!Sj@y( z*Wf?dDe+$yQ^{V?TKrzfNKkema@(D}#6$Qmzm!LQ_%OM)w)VTf!rNJ`7g|zz$9uiK zy;xZZF)>D^#}JXKOh3jZBqR`o?&(|eN*`V)BtAtXQmhBSHdX!7UflslL8jh+F`>fl zy!&Zze|>#D?s0s0xK8OVOt3vE>$+^}!pzJ!Sg@WFa9HMnQe5oRQ>`Zd(NZHt=!eFv zl()19<+!aK9sB_Yp{8y#JetzHL~sb(NGbTiimF)2XLg3hVNB7Ej=ZO7F)1E=i4iF3 ze4cVhqmNW8eghq`TBsgHCVc+lwNHnPpy~LP>Gb-6pg(xM;lM+0?8v2;cmDkOQ;?rO zce__jU^;cfQaUGG|L`m-Izr|zcZB+un{p4>X((IMv$9$T|9l**qhny`BiY{E+{_zt zgC+{62G@fJ9<MFA@zPE*bFnu!3=Q_qt`YkUR0C_jH!BMY*1%q{5OlZq1ySo2p)5Hb z$bH;*rc6z0!&7Pve(kPLD=ZOl+U9OH4i{*cmF@x;+Hxsr$*gg4bK@iF-zjPR9n=zC z*WTeX8_L<+?}90S-Jrbu6%yC@F8+JyqUqZ3j#oSMlWapu%Ny$M?q1tM(Dp9gty8aY zWOx3k>flfrTLd)gG<4=*eHUoOZGXil3a0o31)V_oJd0tOc)Zmw35yHuC%>ZO))Z#; zFNlgfLvo#gk9j!_4VY>}$Nk%YZS0muK7@r?|5;U2B-$J56&4^NA&KBjbvrqBtocqN zNe^5|`#x3_6O``va@OYB!fD2wm%#yMd8@h0gJ;yX8gVtiO3lkkZ=n>_(pp+vH0CNx zP1OckMFAJV`fIG*OioS?080+R6UQ1kh4l8W{G{eHJZq_Ing2nh6AL}r5BISnQoYJy zGkvh85cqw%I3`s0(`G`AmVFTE`V*W8Q>9FA6}Crl(H<FrF@dfQqe{BKaUGbqn8i0& zcWEfE#&Mg$l#18++xwePw#Phq%?~1j(Uq3Rb%%X>K@rVCjbHg|MbD~+7G_`*vpa8> zj;G+AtSl|z<Kr)7I+4;%LfKwcrLwa+u@t-yz1>3Py3KYCMLD^TwRVCqI3`#|<E2KC zucu)t8uGi$_v>D?;1l|)N)yHu1CTBukBAf5%(mf7i`ZHIRw_4DGc+_55b&_@XliN# z4{TaKcnh&Tc84u1CzL5#aG&GMEW@O%$tLkRL4=$`1sc55CoVt>0q4V|eNw%HG*b8@ zte_Afu=p5KiQ&=LuU{n;B0T&D+kpNz*(?mDl#D3f+SusRXJTOi_#Zzx*9DoT<JM5B zaHv?q7Ep^U$0A)KmbonB>!TGGTA({I+IHJtpzJ68{vAbhcCkJeqNeIKD5YhxIV*|i zUYKeoxE(u;%`b{Z(#_7#cYmaB*bOBS@Hzx3i)o$JmZOWg`KMW|D;OAtrlzY^`=IMw zbzXPaoKtdP?eFh5;r$JW%ZnD8_=ZmH(C6(p|0Cu4ezaibqt<?^<stor9Eha~SV|j` z7q8zRpQHH@)oB{46)7uzGduIf=H?#1{MpFhDo9DaDy3xI2RwFsX!f%T@C3fHQiI!w z-GQ_fOttbV0a8*@0-3tf$LIH<`NP30)@6Ru*a3X!*kRL1-SKvTSHKB$T1G}5v9c=i zTvYx%T4FUXQJld8<P3m~nwpwfH$e8a6%}d;ODD%`CoHt2M6TC~c&xp&QmU%hc@yNP z&%(htpNvch{oG3=fH8}9KzdM%#&Fu@;|E1EO8C+jgIdXZfK{TK-U`GO5(=g(oc@4N zkkx9;#v`97k5xU#n(nfU!nQfr)@L9&N7M!Q_|Q8U?n%+-a<Uo@WbP0#MriD4x6E;8 z7E1T&R}lRT8wxxy;fJ~gA$L6a9H|Z4V)Z2QNwCE<kVMd_8QOSjYiqNm9)m6*Z^&%k z<u?9MzM7E|=m*O?+pb)>;uY}2?ZgE?2G+9PTcwnUVrX2v_~F9`g_9C@cXvoH<tNwo zpi$XDZTzFQX5K4YWOg=Lfu^_atn9A*aUmJdf)cl)WHeK&<@CpocmLdHraWO!xBKG% z_U&7O4f$fITNQ?#@qrYb_j~c|*-Hi2*>FXqb7HLNwaQjY>R_rp4};7-K=Voy^%dH& zv-Xu(M<l4aN68bgv)#!TVqrHq1z!h;Qft#Q2VBigO(kPu8rV=Jyn9#QrpU)BC>l!B z=s}ucVEzbXPR1*(6qW#gSNW}StRPF<cTxagLY~=)Aaefw=5;$htLe*Q1;G19{m9L{ z0^JS;t>7bQM=s4hNGelENci!z`{Ef)+L4iwxwbjpS#rk;0|P@WG8LcA{FS9;k&`6e z{=tuv)!=;%=XKA)eN+|eypEDn7Fik^W_K<;3Gl+_I6gl9v-YE0%?-lNMnr@6_455O zm<!502LR)UK=9bh`^{3PTEH92W{m##{Nkvl=+zv(^QY+1!FOcjWqW^Vz;;PqV6;`s zxdCpY(IOp%0#%5gOI7<Drq(S-rQq-?ce-0!3)h1om*cYl+KpM6f@;Z&RwYJd3+AH= zj}z47&CMC8O!*|oYN0R9^d2Quc=&>)Wd-?PA5wxTYj0mMy08z4tc=J82+`xC1N`y? zM!mqCpy*-_eW_!7LS}BmUp+|?+s#2lYr#`Z^k(TIqM|Be>NhSlaDTaSn*u@%l8)}h zL=exuerpIh3P0h!hMRZ9J0eRAO!Ajag!9c5UUVVB+0>4P6y<$9Jx`K^&m#VY7(6w= zI(lw3v(cio&KH1gtABsJnw~N@U|8z6`o{Y@k#dc34TQYF=wzMJV=qj6nAk~4eBV!W z8?CIY@=Tqln=l&=3+n6ZA+^|TWLa5SK03+QY7QKgHUySc*Ct&u;d|PelS@r%FH>Lq znF~8q&?x4Abal~#dE#`R+*cF$1B<y2he6=WiUiDdivv_Sk$I41I8%=S;O7qEUPxM+ z<357MO+-wVTs9O4c&48pV*7USu3hIne6>>zR)_AeZJ6?>S8tT4`U`3;bJHnm6le@f z#cragnx}YQPjsp(*56&Z&A}wrKKP>3WVEPpBYJjrR>x^k{Ge5>X7IH=R9Vt)ZwdJ4 zyA#Y<RP&OOzEtqJx}sQ|*&AdhZQb3HSngO3>eH51f-6d+W6E3x49+S!S)23Sc8%Cc zz8LhZkt+OW^JQ1#_ETuTX|k!cyBK)Sx#%<DMc!vFHyLATHyXk>tL{zPCUl)n$<7uD zOiq`)3H;K%dwT%(Bw$VldtBq?vRjQ!iD!EBsAG8zdYA>vnW3?<#tIqGn!^(FyEr)5 ziH=TsboY$7$}Q_}D(HPgw>pCVn#HiIy}jL2uoGS_>ic)csqTWr(n5?kgxj69NMH$k zAU0r~2+Y_`0;6#i1Ea_hXJ>Qs;CI7yIE@gOE}K?Szq_TyyoEa*HMQP2r58$5QyV7V zK69D3n5?GbzXo$6Cp^MB1Uoz9xj(05WoN+b*PCq%2f!J{<*<>j_L-nIY!u)g04NG? zarR3v+E8PP<YZ>DIq#ZlYtI1h&+5GU`_rdS<f0MFKkDi}ed;NcOqHYVq}zJ)=8Yw3 z@q=&ZmoCMG`vwKsN%4oZwLi~ONX9&S2>ux0yNDACg9z9)e>5=Tbwd9sK<^ms{KZT; z>YZ#A23La*y{NDhk`21${yitXkgXRwX&)mMMbDoFnRh!*2P@^gz<G7~4_i)1Tj|%~ zYB={U^PfO=MoI%k{hdCie@|GYv~>UNxd;)&sSmv+jMFxmpWn?$O}&Q4)PnP(Gb!$p z&qDU{MWCbz^ZI*wUa|KsK-V^M;;~ppsEEk7h&u}17thX(gC-rPMk>7L*3K7qwDVyi z<Of6Cm*2j!4JYDpt{}9Tnx5`lY?;g~9h||&XarOTlu+)mLP4a6Xbi^Hn1zb7ocHtE zqZgfd8g<_TeRj-Qfc;_k+y<=vlI?)c`}a?BilLZPm_ri=-o`08d{kIoUX$-lp!(G_ za<;3<cwk)gam}|(c12bo6pM3EbkIaEsdC<sWrdoNhId$0l)=a=peWLL3v&8#aT%Zg z<#oH-jR#brASS-Nd<R!vS$Pqrj%|4Pbc`27E-eM^flTQ<m(4ZG1ZT~WIbhPf5}245 zN|mK^bbSBvt9O~bO)WQOgo{O;AyF*b(=>ej+5wHly?KT5fdy-*tu`(~yYGn@3UXLk zRgzz*55LSWC==qVdmUlW5(?NF52-wzS(%(nYU^jT2jHTEZhhlmq?Z&zJ}b@C(vpgd zjHb=>TJ1sCr%oU-vU6hmeDU;i5EaQKB~H|Xv)`Vf!;V*d!ObDl-GIsNGS62D2H@$~ zx&-<7Ea=}17a8ml0ueB{rn!TMUIJ!&drnHsxu1(&ai2*p<1Xxj3AhxjtQb?~R0klp z&=xEkmR6<MKv~=A>wLK0tWXZcLh);l*A0Sw&(O^Av$BTKNy5LQ9$yPM)h_FSaS#wK z@9s-j7efghqt@dDbQn}ay&N!Kd3bozZEAO?uC{l&?#<%1<KQFextB*n^JH|Wu*E1K zifu?K=h;GQ%|F_T#Aqm&{&TdqxA&N$ArQssHqeCBEaP)Ntn0XS8&N@&#-Nf_Eq42| zI}=!2u#>$GrMz0^Fl}bVya#M>=hlH2Kvz6`e9St~szSqyo%<G|`$KFj?PXkjbRcFX zC{pIGrOcuDCQ}Q3R5NH4=MYe&t)gF0(4Wms#t1wJ2HEm!TqlQ*1e?)*iy7KP@P7~! zxE$>D^9|%F5V_z?<B+hiy-bq&q!QZ+taiZKhk}BF305z$wHuvLjNW%HBm7x?!rD4g z$=;OR04|#GMd!T?-@AgHkgy8%Vntw2DX1Ik_7`a`eXsj$@n9Y%XvWoZ2#;^ymPBUB zIRpSSTn~$gXv$>o?j1-SHhi8}<~er>@o4q78tyx${nO(F%z9NnVeb+tU{O9dcK+Iy zdG7f!W=yEzJR;A)z~JV)Yo7e#k*LR(CKCo8O=}?bb9TNd-J^ltdBjtv)QtHYxyakM zakhM68r`1-sX7>dF(5$3f}Z^{Vi}+9j~VhgJV=lXto*!xzbliSwP*YhD&JcX_4Xm$ zCoYhPCJ7}OTo4j?H9+9h<O$#kPn^)?8p2xL*0xM$FNQxU*#?gO&Xl%-QietSYPv)m zGHUJUS$S5T2_5yV1$9JyA-3<B$gED)3%HZyeP+A;EdyJ>enZ2Me}Tq5KjhSUzevD( zTzUiJkSLv9Trd^U!2Fao$3cC46nSM{g6N2<H_CBoQe^$Y=Tb?Y7-DhfXZup|BYMvN zGllCdFol3%C+*8m_4YWIF)%o67O_94=?xBxl9T7gV<Nae`m8<-kJP6^-N}3)))?H_ zKYHnA@<W5tWQBHY62vbD!)<v!p_D?@Yh8e<>@I`$`}JE-blR{5J8i5e@^X#o9_l9^ zArSMueSOI?I)xalPx0PTK79OGqryCC{nia^Y-}Q;ZqtQ}%*^{=`MsLZ+(ShqyA`wO zC@HA*8PFolfB*bb5^4T3lRZwNIevlkpFLFFm0bjG9E&GhVROOe*!_C7Sf63CUfK!@ zvs$+kp3jYi(J^U73~HvU5Ad!b%t_t`r%9#un4goN;ov}acNdhEMVQ_O11pDzYf50r zzC+ZL>*(pxgx67Fiy$THuZTx82_MI{og_}aYk1KK8Ubb|rcZhtDfto_s^emh(Gd9( zNfmi=>gk&oVnz7*-`3UD9bQo@*2OfTB$$G@4%m}9cF+6TJ@A$$o<d34P&paWvXW1Z zEQpHh;fvA4hay)o*n9vCHRxH@yQ48Bm@j9t6A>j?&36^DE+-C);@~7Js0fT95T?R; zT`~^`n3A6c#Q<(x_i&i+BCL{PGapcObmTbrf+a7XEGYXT2Z30nWoK8(>JSsTrT^m1 zeWq9Si0O=tHMbMafQLOEcz9$1UW3JG^(hR!gnSi3FEF;=gBwP>-UlxI1t-SVW$Cbz zzoFcov~)k4IJGzW+{7aoudUD)j<Kgf*Qjz)_I$N%jQ9;p|7fY@BfzEk(5nJoo0!P@ z<Q8LEr$pnq@bPhTBM|k(+}s*zRk0s46UEW1lwpW~{2J8*48ofVr|@Z|$f<UK3%TPM zZe#N8vUXDUq-knt(ek=L%*}vP<gAKMxeHymo%@QIwb~6C1En`~w{G5iy`2J@Ux7Ld z>kn-r^pxJ<)$X>fU0n*)Zn6)<nDX5lJiWY>kH!nTSbA_47q=Q4J5@)~5QJ$`;|kP| z`#+z<(k?42qZ%5$NRX2y3`Mw(UNP9E-j#Zg+4HS@1zPhH6_qjUCFApf$!B&z`MSGS z=AaUWXSBkdUu5m2rQ+m8aCrkry{}*2#)Z9Mwa6*wGY1tzLN4Gb*YiLL2zZr+M+YK! zQaJkZP*39Hhx#*)n228-a2ptZm8&CP7Lmww!9W6GfvY2Y*yMQ%xmmCE2@r`+481m< zQv{u~JtTQ~c_zL#WpA)PkYyDW?R`04D}{sT$=g|ORmds|33=&>uU{}UG{jO0Ey#V9 z#5hC4Ep+s4)emS0Zt@2yQfCI}MK>-kEGx@WRCn;agR37Zk@1-7W+ldXMC=<G2Q`>Q zpRbO*(gGWT2}g!bgIZB>6zmvgPWLuA3+Bz%IfYSml`%O|7?V8v!<V_4yF_#qFsrRM zW}c@pFjD!vv8q4mn}gSRsfYhbPBG*0BjcYOR}to}K0c!m&+uN=XLiD%fk}SXWn2~} zC$CywzC%}lK;VXiS<5F0rC?sXHCBFR6>VUxq)F!Hiwy}7_3~M#qpo}Rem=L6QH*As zNn*ChqesS53>XM=o7Pr#!)+Xj+h4SxlbV^5fHySiMQNnp6Y2r;Mlh|4;xev*|KuBF zC0yCf%?*xTy7gQ*2gk_pC2Z>SGe7EA74eg(%kerJGp)AHFK;R7;m1D<IR-+Kh^xmU z=>npnoZG2LK07y+j9i?7i_aT|x{+h-HvxpJYA(Qi2>ak-z2Xa#mYSrYK0oI;N={$F zi?U~7i=3Qv_!+`oPlmeS>Q{6;-HJkJa*iIML9-BRf?+&d{V^nuvvK}yeKyW44YW4a zXLhjL-YtA7z0Rw8j6ghLbJ$3hiE5=DH)piXJ#~ml*Tu!uWYTolxBS&}P0cbHhp0Pv zrVUL<q^ql|m)kXbmfTVku*E9#Db1v#S8iT-9#MbMbBa30yn!1Yvy8xs#q7IrHCl=7 z3UY`COITRgy4T!;iXR6@)76z5mkohHo<*LLeseYOL)sH_SPcT@B1<}naES8NXB*uM zX_I}~+0P(sBVKs}`Z}}4b0swuPGaJp&`^tXGm7>)J`9?7%xPFe>6(!S6`4(f!YPxk zHxP)pWI0`oug{f@Dq`Qizno*|d999FRG?^R^~UVXOpjti>HB0kbvnb+TamDvG(nh8 zJ~eh0(}+2VE;xc9Nsd8g>C<l<W9B6Pkbk?*RRp3LSxl*t)+X~%u4L5Q74_BUNke_X zgQs7`Ikg*V)OtL-;yZ6$P?+>8W{kU_9ZNG1&!o-nEhHfW#gjGCT$dxRHuc#I20G&D zAE}&T9N()Y<L1h;>0*U9J&iL++Mkk{N!DS`rw)ti=zuTd(TO1t){J~Dat}icswa*8 zjf~3gcp}9Fbl>QAMl)ManDYk_`9WPisd)kMRFeHagHn5ymeS5+*gV9%H+Q3z{nr)n z(ao%aNFXZn`49*;z(B@nA+68M??7X$h|m)m<t28$cjB|%LjB~m=$Mn9Q!pe78~sZ> zPpZh4OYikfX$~M@@3X}=bi-q~ND9|uJVo1Q1Ro+c5(Nt~4O)6-LAx}BR3$m+3x16y z?d;4o!R9DsV`IgKmIDU;d9JT-H46oaqQoxD4<<2P*h>7*a&&@O9oX;utS5j|*}3^V zt6Fuykeu!z0#Wf0k{kaAku}V|8$GW78Rj`^XZUhG$uf~}xc9Gm=z1dMRC2nz&3+=$ z5bm7pPAsA~Aeg0+B+7Hd{g)~ct5oE(>5waFu=;Mi5-EsmYqMr&AHQ`DQGaxWKb<(W zC)k7OLQ8h`x36DM%ncyxSb>g4`YZ*u^WnX1&ORGS_<aQX^uK7*3Lv0Cbo7>TUgjVJ zR6YpF3<Ztb03%TcNMzqpQ-2#*HN66lb&`>m_WT9|HU_gAhme4|)>%b9?+iQWQ_-%( zi`cN!OY;@Lqm7F}I+Gjt=5QZ@7y;2PCdBv8sLwqf0<otFAVgvffk=##%Qku&EYc50 zR3pibq?M=)nQUVF&=5~wto*G2sFm&DDJ%_*w$afag(DCMj^|k&ciy#IubGE44Gau~ zefU7a`&?NW36%wB(ZEM23O32f$!9JrX7oc;JtMkc5(o)bQeDRVH96T~Ae7Q;j4Yvg z_^`!(eE;A8rSOQ0ddR|};M(F%<SG<xt_JZ|87cR2q(d0Cn`etvjw8R^YQ16pl?hg^ z7J}CACATSXQyM@DA51Fdt3qRHePaW(P7G0BpUcbpprdn048ZFx{Wtc%<|nxf^g*aw z7BmKn9V5fTOLu<n@9$eoH?_vpfF?*ALlKoE=yaiOMEs)g@fi+p6D`>?_hJH?xNC=? z1iA^Z_^r5X`6CF%$<1!y;USY81kEpsi#z5i3>c!46QU|c*+u+DpZ;>MhXFK)9D&N* zd>_Z_<_hG$k|(ql+v+ypS1{a;xhB7sreBtqdtX_J@*M<s`aip_a98nS0yhtU0WYWt zUKO=G1$1if{rtuNSZB-UT$}zO25lc&Zf>>5c6}k%n{(oOqnNxWKmoSm(xp~aRelNv z0D`EeN==)PJ;SXVy>SNmAVl#Zh4uyPCYW1LP(D5fl@ZAP2O%n&IbO{Ik|$lXy9Soj z%v@FM9eId@;}dHGK3B|cx9UZ#n%e#1PioTQqG1E6B}$&r9eIHp3RY;nOioS$Y};91 zr@vngU05??V=|qJuRRsKFgGeIgV;vl1vA2<9RV*b?DP&A`~sy;B+=^pydCI%0(lg$ z8-b<43keG-o%=~fwh+`NBAt>oeE}k8?2mZv(KApt|6({T3AmlM>mWF_YBr<)^}~J| za}PFj!7|x&dfzi`XcQwVLe>SKv%d6UI4Z>>U9F|@`V32fRw(9BY?)KLNX5ai@54LX z-__bmV#M}maa2awXQc1z;wYRXPfn=^Suxtpx))=Nu!g1tGy{9WmoV|R;BjxW#ya>) z85qdEe$AL61-~D0abWS0Cu!7W_xoZ3(8q@rkRb^cfSQ2{CADD7gT82@J3w26y9#Vw ztw7Bf8gk(+0xS#lC9IKK_TjzMa?>+bK@CFsI|A^WakkqN($tSXp!dWXWP)rNs_hLc zP=0VcejL;@`R<u?A4JuNQ?uR%EXF7F;AXH_6$vIR3>J&$QgTg(ZZR$n&Iis|Gv8pq zDj;M2<^#XDVILR~afh!(NJJCIv`-2*JqgtWK#|nNVlgav$;oejO&SAVarNpw*uxgV zCFkf^dlp1Eh%wp6_crGbwwEY*8(|HQp^=f#eTg*S<>)A2_fEv!i(N-C?oaV76W_gi z2lBB>SKw8(v>q%pI54rIQqcJLi`adL7yhSZC<#Td7snbj)^;{FLj25-CBg;6x1YuW zL6+G&U;+ExBR+-2#pTHzr%OGFde5X?2c&pqZh841a8hBSu9UK}%1oh|NAQrZV)!jk z9D_PBrcD@`FmO>JMi503xEw+dQ)JQ6sUf!t(>zgwk3iBu`Ei3T7*9xGB|f0<5ZZ~Y z=n2jntw5fJ^2KUxFY^M;Rf5Em(1!=Lg{+G0t6g;7poJw)0{7lMDn*pG38w9PlCH$l zS``pNcx-H*oGu0V6|&2H!SY~FtGSL3qM%&IxpN08{Tk*2^kpCHHA>^*0USaBGKBdn zimDVjb<$_SULDW~g^?G}-yFB<4v&l+lb-zQd3B=!M6|;6ag@Fxf7xR=iR-lDxk)Z0 za1jV|*a0qARU5=Ipfe~cXn`O*ivcU(DB7(pulTjK&AoklQ9>48LJgH6(%MeV4I3TK zw1&=NY@EQ};G>E&aFSP~#jhTcTjG=#X%_z)y+^#Se^WlY-Ny$*(^D@!$;-<NR!a)I z?m{ygR%<LTO#(;jjfqczyD(gk5Sw?I*;d~;%-63KzyN~#X<jYK<r4}edu6;^&*@1? z`CXSm6ap0Qve7g&KDK~8$5(FvZnlM)P@_+knx=ntj%Vr_xO`6v3hSnZJmw<96b{*f z1s3=2bHZRkGY)!83(!<nE!OQs^=*NviYEna3UpLhu<tQw3z?YEE~E=k(=^5sppX-S z&2xF#IBkQ~lV7;a{D7$hI&k<epz-??{LK}}*dg6p6A(OsUxh?L&-3iYg+B3v!NCPT zzZiD-6%hm*zULGQuqIA683?7x-1F!Fqo5X)z#iz4VPRzC<oAX~Ss-+ymeiM-jG@+2 z!QkJARu`m{+Z19?ICVj(d4+9dV1O(<>^&_limgEWtVX5R-!v8tM}0jIBKJ{qiR|G+ zq5N09IjnigrP%`Bu(h}qC`RZr#7}Ds!&2s0b$BAxx2Krs3ZZGJ*E4CR@gvY(b#-(Y zrx^_6XJD5a0HvP$VEF!Nq1{XcKO9nDO7^eXOZLW3O#<Gp4gb=G3n<RbRzKuwnS(JZ zli0ec<jm{q2Q%TFdFFzc^@|&HAv~%am=iTl!_aK_z6&iY6H^d*YPIk230lUPjFq(} z`Fzr{%6iu{r5Sfhvmg+5i3%Dx@0b|g`=uwLR=sURKwDB@k5NNb_BIZVPL=uiZ8thr zTtY&ZlVg{!5=P~NMMXu>232=7Sp7)fZQchjX-@gCW+(NjP{o7R{~W9dP*!33%nW^3 zE?B<~Vi{O^I|kFWd^6`gmvK}@I>-b}C#trgjkq$HgR6H1uJb1%KE6OkO+rjA_=PGE zj6Z`fpptf^hHE7xwb<M66)spg_U&ZjDoxi1FD_H;ap38pYsm&-2SLncUtgp{bG$!X z2lCPodwx92I;W?wvIGfr5d^-9OW>^TL-tNi-tXR3LtCV<un-#Bq}iZF`*S}y)*Y&q z=jR~Dxx2LL13ZB=3z^yp&}*S5)3=9EwIJ+u8Sq$)U)tN-gW?tz0!orzGiVWJVr30= zhoe0YT7QA8^cx7Rt^oK$+;4&H3xL=LS>kA!3H~2{Apx~GcaVsbgP8jkz!O9)G=4oQ z^q%37qJj6jYm-r?K$JQLD&yJxKB)smej!Q86If?B<3ai4NpLsh0mL}PJr`K2_>HJ9 zm^@Cx?q~fQ^s9G*-Qmd3E3Lnv8TgE(FL)Mt8T=U(G1H;&K8SKjK^R80a??0U$_IVH zX^V@C(Cr3eyWL|oB_KkLYefx84S?Ex0myf5llYquI|BqakN*6qgUu?=U&5NvI=#{# zP@}lP61P;6k0E3Wpi%_jArIpLOA+=y!gcCRV0?KuI~XC8B0;_Y>dQ*j3uB_)I=Z^~ zFAKl^_>s^JKX8Un{Q&!R!IFLyZh>_UWMpJd%-(<OmjLA(koZ4ugQ*aa{UDeH<AXbO zqGGX8+XpX>)XdC>)YKwfz0QH~m7mn-&Yepai`szIIH2HizwivN2$XdKs;UGULa1xt zPOYsGfjF%2{G^Zo7Rg#BtmoP=KpB|^EI9&oN()bFQec(i_98I)yBEL=^@HND{}((P z8F8PK6U6ykXqPlMdtXOA_qYdWhk%8fo}O;yOC`a-s=qc?{`ld;_uT+<5aX~I<7hZf z#cr+xoWP((Ohlv&qVJwR9ILMhz++wnnKm)z2d`_ER#p#4Nq1FI2du>4ez3Io0j7f` z9%x{FeSFrzbklGQAvwLaR%bj~1gj3g;RDnQcwG;7K{dFCjXE<Fnp|e%73-iCNF}-c zAtHhW)VhICMIh>5b$q0U@u$G7WDO96ncUcmdi;+7ucKk#c7V>p0;?IYn1h9dg_zhK z^<!TM{eZf<6Ho=g)^~b+!A`+s3()=o&TM`JavuWOutIs;K?tv{qXYI+!DWj_d2Apa zD8^x~3kl?BR#eynjSCtSf+qO7y9)?&=it|FK#mvUrTSb}wjUxlYOXq>PVBmR`SQz3 z%UMVZFi$Nv5?DY37WfiQtS{sj5CBz;kU-Z0s44)I5~RV$PluyG+zCByVS%n`czjSg z{8?Y0{E0GhRW!aBg=G*EneSARfH(B7*(gx=SjE13x599c8aGaC=AywvNb!#z`A?(f z-7hNWTZ0Oc(;$-*3SKkN<r6r;=kAOj*(|2soWBG!HLt7;#%2f{Rsc0}=J%n$0uKYL zQ~<A_*QmQeWaaa?XpsuHLUd8V#zp{2p_Q0Qa;dGQ<s-e;#TU46<maIm79q4rMDZ4@ zLB<Q-`}px=ENVDX?+JF7#{#9_0f@ev8ynFtUbG}eT`j+*xmgdS^N{3HldwK$OoB7A zyTSp4;&8c{hF*-=Oo_oSP(VUno%)D6W4tv}I)&%t(5g?$2$pq&>}YLzx*-WQWh>IM zWHauwTfSq`7Qt?GIoLr*N4Ky?U2L@zHmrc#pn@P~E9fSgf{41MQJ1q1gn=%A_2l4K z_d)9Tz2>v|B!3`ktm_$3XqJwytG}-YDn&5V;o%`FHiECt&Ca4w6r^`Ye!RXVl<WW| zCGi?3>gahlw-cTAh&T{N2lPupoeAA^`vTP6UShy1cTh61icu`iF{SqE!#LTyp^l8O zfP@f*9Ju?WU~e4I8$W%DFr$GZ?mNH1lVN)!z{_f^fIF-K9!xfPZ<?as`Bx@rVZvz? zj{&vNMS3wXGHTdQqJQUuLx{MWw{8_#ObaRs3xMJd*7EG^?92tA63EXRfB<0mP90-L zQhIti4Au6^SR^ZIV!LbIqqu#vI~^qP(Q76;MKEBB8+D%^8@MZ~XA0_<M&Z65NY-B) z8XPp>5W+eLnqAG`zHJ%fId1*x1<c^$>}-EJ6xPMiUAzza&x8KphrZregcw(@OwyuG z>XC&N4-E|spy$dk6%_zA*X!4>mmN@tx`_XCF|}xv`V^H#c34n{^cZ2~$H>S?zK{Uu z7%X*wkF;e#9mrsY-0OBYO%y01080`e6u~MJ&1Tf2o4bNPLk<oM3R=^~+lRgwXf3*q zQ6~PWybnnVsh!NyF9o*;xiYAMKckY5yWiiSiA?ZXTw0o*nmTv>{HP5aL5$ZAWXVEH zy-yb}#En_=+htpn_ap3}t!fl2rXA&#uU@kcsjMgx^>IbcUk3w>(!?aEu3qbU<VZwB zWQ&?=h;md1wSgD13obVHH!PGVoc=R+dXxxo?EjB{?tc5c#{AVR|F_?D{hvQN`~T7J zx-ziC@4^24U00U>2fype_T<TbKkG`*#LmX{fBvlN%ETq-{_Wb6b*p33?sZU-L-A4> z?=+B-9EO#+Y!W5H_pFdufbY4KSMuBCw@>+~1hlDIZc%-f`Sq&gDOHM2_&IUAm{sdk zgHT<{<2v%_RP;Usty;nSgCL$F<*iMV4TqBuGoGVu#s3#3!n@+}<;LyX55h%?A?lx} z#H-R@O0EnwUyOL^$qOzh_>9T!mc+y@zTu)9+7J}+INIAO{(j+V;f*O8$QJHpSn$&! zh@K%Oz+q2S^hn@&Ob8!=b8p9v8mH%lLVKW|o0@9aQ@t~0vwcv#UE-a3XWH54Y7d9+ z1yZ&gzMZa7e9psp)B`&&*xsV@E0d^&YfALt`OnMvMGy)T6s>MuW%S645{Y%(C&F!| z-ZIQrO-nhwi2HfLP<EDL?UnVg5BS|ROq}0%WNp+5jvH4;>P1KQ((sTRdl*o!ykd#D zz1hz4Jk90Pc6E%|N0)TN;-4+w2qSHuiKacDEiDO;JH2gU?~M;s#L657&1o!G1Ce^v z<(043%-A1KDe$Y09(Bl-*lge+5SSlw<!;+kIW5MI(20IsVH^}K77#S$Dxb5rG}iU` zqMw}S;R!E}c3^?A6ScT^?~7SJcg?cU)aU?d-WMU2OILyCIA4yRLEPnMbO*iJPeoq& z{MoQ!vE9w+F&e$n&gL0nsphfkmXucviF5#`c^W%?wNi2#TYqT=;xb-|VKdc*@jn(A zf1jw=q?u~h%O{b1D&n#lCWmbAsYzDP!+AsZC4D*{(MNX#thvROb@3w*QXT~UvUiK} zHDkY4?z2j~Is5Pj+x?86ifheOXXacy4-YXL*hDqM9EQ3L7}~vRs)G$(={!NknXM}l zV&OlN^p{W;4`j~z_ci4{?SEG>yn%XT)bT%E91^eVvt{L*sNNez|71f)a=<v$t9|m9 zecANy|F~bpzSYw8_>w!^Khz4|Ef;z(7C)mWjCWs8CQGCNYhElSqNmn_O+bZG0}Wv= z>Mxrak@QKb*2!+pdzx(Z{`zC)@>t9Hjx!hgq#65`vBbdOIX+A3btlf+N<U@=@;?hP zbu&vFoAaGb%6s}`CUMT_2>qvbGk#txZcPmg2;X}wy0B)_DK{0yGL!e!W~oG2xb#To z{^|EJ=V9P}tK+n?q0>MQ4i<dc<(tV2o0h$tU8HbXbJ+_d+&^?a^|_ufdWkO%O?@)Y zd%omK@`&rN7zD^)i8m?A5R)e0(0)XNa^Q#P2&ReHdNxnar0!1IV}sAu9Utu#S&ec< z7Kga)zH{l!P=)5xHBg@2T)<zpqTkZs)~%~Uxx)B|UPn#Y*k)#<8#s#<Y{jk5PW?(e z)WZT}&FppTSMkEOS5nVk%pcH7tPYOd$%+1)dYwqRWc`JjBgd(;F^R+VWGPCkmVfoe zKF*-D{iPoue=8^=YMPgN^z*Qk+}|sL1y|oDRa9uN)pi8&M3flo1jzfWaK2BJcbs{j zRULa81ETT5cgig=zUPqM%lOHqCMeh&6w~*@|Gk~TYy1nyV#V5o1ZobXvAz&a3d*D1 zo%DDmCim|7%bG`w8Y?t6wkqTb5k5)mBkuWPhMlXPCoH6&7}Im=IX_pQNKCG3g~NE` zgmapy%lx@t_Hytmv)0zHsf4m6D@*;QS0sqUE9mEo*-3&dFzjN4!rS_O{#>R?ATKd6 zg4-h*jW#HK6Nyv!`OXH3Qr4%X<bg6rA<Tde)YI6{dcae(z;s~1zCXP0?X1dI6xaHg z?YdNFeQs0aMV!6k`@<j2RMzSpY@VO5q#;vN!8`iBs^txC{K`4fIX+%&k6dacmO?su zv@ecoh>08j;Oi@rUrZbxR4gdGfsi_xxSJ6Slj?Jjyr9;e=hZ#YT8Y)Ma(L&Y245EA zp7eC)4;*ZxL*;S8Yei($qq#TM<UjNpG_wBSJ7mFnY17upn!C5$qo^Rb`gtVP>aBE= z(9U8Mql?#m8;+Vn*<#1NI60BpbME`C3=*$zg4Ny#r%+uDYKdZJER@w7BbKtezTi#N zX1BtCjm=d0maTutL(@wA<2`~KwBixromZ>o7$})OKU16K(UbAzFPQV;)W*(o<qF>! z_y2j@2VHz;SZr=Bfyeoo$ptmU(|{g4e?2pQS$iv5xK%tK-Q!WBkIWXysq#i+uG_XN z#TgQ`n3#;z^5SI-T_xMY3NJdxiS%kl`cHO4q<p4{#!kkBP8zO=mt|8O)odOe7E!p7 zYC112c|5m<x&1VbF}fp?QFMqv()Ni2NrDB2M30URj@f7ky=B-DaZhSw&BmQaa&g>7 zLrYX2((;;{n<I}UR2=Z@x?VY&3VwROK4j#4UDe6xC~EBJY4IpQxax?rt-iKQzsr%x z)GCPttWstkE@(e*E5fB5apB_ksb9i5r4ee6&>&wJ#@fVwJy5xuVO|g}r}0_g_e%D_ z@Ws(JMM=V~stTF$XP9PPiaVg$Sy>|vsoo{84t_mmRmwp+YP7H(<0h9SxW+)a1!2Ea z*K^so)woSQz|KmNh@-<%dS=f$A&K>ecvzLlI>a}r2g1ZDLXB*m(NyW`1sqlsYdPq` zkDcW4E^sWyP35WBl+b$bwS8GqtedB)+>T!R8d`m5_Mt$G!pbpeQ8{qRJ2YzwcUMeA zIyBEPBvKI;Fbw%^5ORi8+0^ZsR=c7jm|GYmCjBNLOri;<Wy5wb2Yy*sR*+*mIpv0N z%oZ}juM+v_GM;tK&|ES(lK4SX^092*cUQ->NWSxU+3MhEWzW@h=ds?z1Y`|UUBZkW zupVs_6@dgB_%Y|}hYy3-#>oje6*PG-m&ne?Diybpl8WK6WDLHn-QR9H-cfo}cC=Cx z5tnJ}b}+zQ$TO((Nl=Us7k6z@p~AF=?t#EfYpDya&!ujlM*W?L(fe1i`~iLG>35EQ z3siOY?9R~*y$l~OH#;8w5vEbC&vHx3h+IQyjuD1c3|#hl)hf8Gs5)JKLeXXsvwmKn zP@ouf@SSkV_Aq=>*~T{lPfJRua1~|_2hh%wuimFB*qPt-K$sVxxm#c`cN#N<YgCb` zR55|>e&tV2M$N2j#j%r#CBs3#A*aTXqgJi{eB)%Nu0jVccjW$96LrG29?uw#5qlle zqoiimn~%FN)<4?W|Bilmvo+Ji1hO0xVVA#bFulYiR#XYHXu8=-uUmMzZ}3je_;?zT zfB2;fzczKk-lOvE(+AV$v0r<I>w;txrR)e4a4;I*oL35^5LI?UUVKw#5_vQ_pGHC= zm=<#DG?(jZNBLS{ls-!cm91XM@V9%>Ty9>9d2Z$V1G8gi9l0>2X3p%>B#npDL^YtU zJ}5+n{v%I<kgEdX3)*=d8pZ7C{17<<R4!(s2yCW$#2aEC2+@)-=i0@=%3syb{X(2} ziW;dS?<_nJ#5O_ZhKf+#G>P*BBq)%^Oi<U!=82Xgv4`HAAoS=}>{m5LVB_!e#4@h5 zf7>B6_IRpN)^=#m-}>FfYf4k(8DPPemk|LT(-s(35G16+HWl61;$ep)?e6#vi)r%v zv?d-;IjuXQcv4_(f2gv!&uJ8AIyV?7yF1GO5ha|CyGDPyX{+2@5$^)>v*hs<`7AxX z?)k^(`-Z;oBlLgA-pdG9f>`WCQ`DMTYx%s)*g?c?O~m8r5Bp;C6=iWv(t|+*RBB*) zD@IOBZTCdtHRCk4;alMhSwX?M{e23X6<t61eA7PqH5{`a`Q4pq&q{1Q-9X?~0k%?Y z)r{rGd=e2(g>}Def2;pOH%l2`V!X*W<|#)l11j=Uh}V-iVH*1tu;~wFJ1=l3p@c}q zY8Oc2PV4!m@O8D%v-|th4<3kLJC}xnggwFXj1nZNaOKKCmjUKP%^Uifnv=*<12e3` zA1}lEe!vbjl^iTX#thQrNDdf3%rMC2HTN>4rVHEj9|ifeYE+X|+7YSb8m@*M@BB^< zz%Mm00Dl4${`9;KQ<Rn&qeN1B$ZrFu{3jAgx={m*MOw|4>D@xhBdsi#2PPg^jqiqV zJ6-ei{Ckps+zOj#96iK`*B2|RwSOFU1W^hpmldrjn*AWrLzeV4c#Bix{C(RSjDssp zR22ta0X6gzBtG!M;*{ZcOpvkkn%dQ(S0TX^#5?%i$?A&Ny73SNG2Fdc*4aF5DDP%S z(MT&0+R2w$>MXjy**O@Ly>y*!*R)iSl;qo)HO=8Wtc4<An&-2f2?+z!I`EQ{(d(<f zrc8Jjii^P&PcP_cfnn2_DHq}OPTOtAfq%@l>}WBMyO=^;fq?DRBdR1YAqrO}qP>pg zC+wSVpFu<GyWZ6Fxl%<-UUQzVvUom>kk_=&km{!XQn}on`>P$Tsl8zIReYE=B*mk- z;=)v_CoV`8p74urcATD<SsUy%it0XCt9o0e9su!ZFhN!M7Xu>{Jf#yugh8^G-|NQm zn+*NXe^h5re-dLRv%gauB)`BTaJBA)FD6>V=c!6vinGo`YD?#YcSG?2-b=%>vI#SS zTi862+I{*EFfDaEMV7}K%TPaV$6=f6JWp36CWt!kDto`)-SEL{&h4<HK+7x)X!KV$ zPYy-;%di!i(G;0*&JcK+$(W8CeJN}-jjTPZ#J1nq#PS#DpoU%1T4}UVrCitFk+Rk^ z2hi`fJv-!>Y(~8fM;;2q=}^^b#qzsAfduIgH+P@Tre_IWy_O~O=a|{xaQ^xZjs8+8 zAJ?jN-S9JupHKHcl{XfO?T<C!cw+&mSq+0!8EgX%)c-PVI0qCtDxaRTwzuEOQB~IV zCy=k!@e9;@#WYfOKS5=&qxBWjpox;qrRxfD+>~7{c58qp!^_P-!0P@V-H($>^;*Bz zzz7Y(3^{rYfM1}YC__SAfB1WuMvYERuFq}Jol8T@y2^<X$o=B}>qmNyjqN|NB)U5< zN8A})Zw?^OQwBWvh)=ZEDstNqkT>At4IFosI<Bd2FmP_JMjY4B(KpmSGw>2nTKxG0 z@pFVqZ?2>0_xtF$*OvzzYO6xzL&zW3O;8nAjO$3~$MK$!+5XC`b<CR*o2SF``Q}(7 zL5<_h1rND{ipSf&EX;ZO4PIMG4b-|g$M<tW4z@ZqHf#XhT|4(Yr9)AmjyFY0vAFr? zgm|ybakRtEKo)zkuKd7!s3e4B<$}lHY>V~7Es6-RR-H^fL^5Y3Kv^4xZU;w;5E!Ub z%hhATp4C2|?o!0`<k5&2FIH@N|6$KB66UE05f7=|4uOUA)LcH7#amBAGzGXZD@C3H z7v+3cRLn?e4y{6ErRWbQjan^l9^QmoZ=B_S+!Yn2!SbxGfgt=mR|FvB(H`z%Mb4uO zJ*jdKpFYAATR+T|dieG&V6u=NWIxO067eyB(^Oc53=!edq)fBU;W<)foT0UB&o&0X zEDhbh`eltwY93yJcfrcixBMuK-qE@`C&uK4e)($U<{Xve^C%k*kqbyiIm_3Zqe(6i z2{*dc3iAD}|6p2eV&d-{jqWR@ZTR7emmao|YoOWq!O+S!68F4&_jWL+|6-jqU~G4^ zA{?3l3k%&)AL=*GI@?IQj0i%B8+yv)yCsPtM)q#)dnS5}i+bU=xW)#SHLNH!(6&?U z6geeGiczmr$aK+TQPsLOLBq0J9SVqXa+lrr$waIR3=9u%wkVd9Y03*qH~wgYM-uHQ zurD}tlrVtozs;mkx<jUc7C<2j!T#<0mqZX*C8FBeMS}=hqjq#O53pbk-lt{c-G>TE zT|oLK`MJF|dJE%^)(;f6)orI*ww*<5Eu(IW)K1ym%EW}so6FtB=2=DdR<<>s8;Y%4 z(rqxnF5XasMG|sT^W&l}AUs7ZO~C8R==x=yyVhryj;qy4e&#pkw)IIk>91ENy!EY$ zPXl1$a%YH2K1S|p!Gxp%Zyx0Q(JhHXXu|S4ODwox^<zmU7f-odtn`w9@ww^!Jhr{b zvQ4E8N4sDd*JI}$T-kmXFXg$+hp?vb@GJTTj+7a_L{fat-3yMhzQ%jL*k-77dZ|wO zlWqV7$s0RezFNaAsKP~+%i7|&Ri;*7JGgz?oli*9YA(9*v<70+#Tz-+96B>usv191 zO(#qW+Xlrsbj8*s$7tQwaELV~QUnw&DKDw++aEM0bPF$8S;%M*souJ~n=^4tBkt_1 z8JRyrli0-$B#48>E&xV|E4b|-B4)FH=+qW=mV_bP^X$ppwC>52k|GT*F!XJa>z3f1 zDc!QK!=XH3Jn9LN60V^QOx2-*qR6H8mIeSnxT*x$EvaXIR=yg^J6B`RY6n$HzM9p1 zhkQJjf#!{eEsCXyYa5}*tP~noK6mStWfmmd!wzx!BOS+Ml29OW?!4^2Q)q$vK~xqz zos@z|=*O28rfSF-fn`>Ov}&ZrT%DN99)rhIzS?a0PCdnI*rl<o(H)OFu0@0o_7DH| zV=)$5-%)68qOdQcsx#-ii5)hQWd$PxhBN^~diX$5=pZHrFsIdJUjZtBWs`O6Y;p0F zXE1I=@P=}k1Imw;=gNo2_FEzff=i6$*GDJk=%8XR3a44yqQuTWQRf<)p;dlXdyb$u zQ1;h?TP#eYSm8W6PTNO%`~Keo;{c~kaHE3XkD4*5mqI>IYc13BU?P9l5w<T@B7yQf zrQg@Awjoe|A=oBk!lmJx!LC;^)L{fOIfFM_W0LzGW#H<0KH`jhRr8WJL2$rAaS#>> z%4KsNsoSWk!pzDlz$Dc`D~E9F)kqu(+ngort-td<FS+Epy+a7moEDSQ8CNposce@b zUm^R{E<Lew^dp)WT<cB<x3)f2Z7vj-RBzo|Rt_XpN<Y-J%Z)L689z0&why!(T{4nZ zQmqclOso_~l9|foAWI^l>n^*mGx|%VW~%DS2n!5M4?4zT{r)-sn-8YdlwWGeLs|6w z>+|ely-vqFS1V%5j**L*Q3unxxK8^-c85v4DXq&Ktj24ef_HJYDl6F;bvYd7V+}Os z4)%N)XK0>s(W*jz_t0dC8MIJ@h@FmgSHDh!8<He?PHn$xU6&q)yOY5ZhsQ$Yy)RSd zeU1TZZ;Z_Hc&C5rQI~qbP!afbn>o++36V|x?u>Gx#v&9Ud{Un}$kC#xoL9DG2d$?W z8m8Kdalwi^(^O4VOqufi3t`gI4x4o%i|a+S3Z>?qcef?hhw>smFe73+6q74e@M{!u zO6vq%vjn;BskeMusZ=KXuw1%T;gP`3`P=Z187b4gikZNK6G{7*toX3BM_h*y8B??> zv8{^x<Ky4D)SlffR;^a61$oAifDYXKtys7;3Y2<i$x(|6@E7qOa3z^=!t_wcE2fZ; zIo$9oOnr9?&F(|NvQN5Ojx%|=`lgzFNaTsh=3v!rs{5N*D#v9%X}LL%f|tghSP-@A z+8=~g6v3^h&U?_&J|e=;b+jba2q)w=WS=@%v7YX4oAMuhNoBRMkMqBX`|GHzx~>fr zN2H{?q$CtcrAxZIJCyG3R8Z-V?(PslIz_r0q#LC3rsJ$zpZEE_-#32eoH5QAXB>xr zFm!X@d#}CLoY%bOoYy2qI~J{YP{v=wB_{D{ktM^VxO-dL;frYw#cE~=Vxoy`O-3m5 zDlLvj*OR2p0+)BaxDG*d>5`<kq0I?t=IjqgO_^5cEShODJ5zebxhdt-LDJk`%EP4N zp1&UTl=gCx1TJ?~wi-pKMfkBHQNb(TZ#!I{w#?u#wA_-x@c{JGRDLcvJN$#)1t3&v zxjSjS%D-LBqm%H5Ip8r+Yi#vV&$RLL0)Wc4zSZY07#DED1bHWx52G^5S7$yBl)-44 zE|zmMVJvdZH+xc>myyUVcjx$5(v-n=2aW{-;dlGyY^vHK9pMhhcdaI=!Xlwi{--mP zQYe_jguFzw4_ixynrX2L{=liFa=`2tUQ7}=5#-Jb;6%hX8OrR$rX`dKSuF&|nzD)r zuR5BT5cf;*VesA;uzRj8qG$n(G4Ad9d;Pr(WQVKv_SVD1cztj>rLSLYbQHYam#yI{ zTu_qnb5HJQteEKfKyuu#`cNCAxRl1TfQpm%Y1iIFG_X5#|3<u&LLTKId<ojd^<!pt zNyDz4+Cv&M&d=ogBdK{#$tir3gESwKd<%mG1Y*h+%L&7t12O>X=}<ElaNB71@Ea%5 zKYo-3$55AP&;1Q$uL%ALWgmrCmTkRcE1`<^^2QmpT~TUXzBEpX{zPGrWt%i;Dy6?| zw}!jPBA+ERW@18Mw~+jLCvAye%ZLbWwpn8Fwj7)c)3gZeN8#0F<W141Ly@D*gXlz! zklQc2SCAtrvE+{*Egyy&IbQZ!zhe9S3C6ejX~C<Nt<W$P^SaQ&df(=^lWs);`sHj$ z&dXN7Y(kkiZ$XtFjbZt6cfXaCSHTcF^x2FZ5xG@8ZNiXH(xn$|-@}<$W4u2h0Js<a zOnn;yY{@A;gY3!4pJ17YN*v#2QTMxoBFv7TPWgkM->a5-nFHM=@77Lqd2Ba~6FlO0 zz~xKM1BRXf82ZOhVB3yvrjV8lm~5L?&wlkJas}F%+9iqv70OJD&5~<oqxHftr9)M( zv3_F)xE*d_7KlIl!(M&WOCpcJL39IvgOqn;AW_S8FHx#2UlisFnE}o+a_TK#4Di8S zmB~eaDQ{BsV@?X+NVVSPn{{S=;PUwb1Ru>dbmkXU&E4q<mt+i?(pDqj!`i2tr2gCq z(g{=fT}kadn@$gwOK{+M%=L*$QmbEI$sK?eK2DM=4KB$YqUR-#s~~jutaplEly@)r zzdE(&ih<BXQH}r@$~7Qm7yCkC^Iz=QAl2QZ0kXrO*FqX@1n4ZxYzG1yG6Tpz!~$>% zfk&M)DV_^gvA;lj3bqkKPvIZn$$!O`Rb60%S!kBB_fiEH5rarZ<|US(PWe<wPVi7F zuH_q)N1EJZ1>X+ffaxIfv9$%RlvO-3!p-G7z(KQ&)6*J6L{PsjsAEUG{)kr#X<h-O zT#kMYEZ0t@Y57vW<|zZP5KZPU%4D}1Luh^1T0z%22Mxln`{FELJbg@Iz|O*LAU}L# z`C(&5AtgEfjSC&h2VxDtg<yi0GN5VlsxUhTkeAV3kebfoO{Q%-41mURnBJseKUy!z zFEt-G-M%3=R!E|Zc=IP<D#X$bIJPd%aX@}I4R8d-Um%GUXc|n)19+bXFXM=(29;)! zS>K|-C(sv`>-8sdy@Wv8R*_UQ(guZ>^)<U*mU181rwS8+2j5)9CrH>^Na4Px3YL(W zqZm0Sb<Fp92~7gUB2gH$(G7M>c&v(wjWjsY0H3u%z+8!0M+GpbEP7oPE8r~95}BxS zes{}lw@Y+1RzU-z8G5@>N<auD-#Hz@^k@vRr6F8sIr{keUXQ$6r{_A|)dQ3PHF)}Y z2zwHM<CPoq%801nmdew4-0j<TCW(VT#=-Y!Ts&mpOY8!mZ_dFgn%a@{-rT~6Ni}X5 zBe_cZ1kZNMbqzOp7@ZVi#0DP2yA*7jF9nWUgTRU};FoCEnTC<+0iJ92mjKLr?+t1| z6f-#qCw!ES&>bdt;gH{%I+FM938Y5R+ZQt;E_PSAe9<-aXGjj-8m=<}zt7TpqW(VI zKy(v@r09|SGH}SOhD&=hKtvOU3{L~AxMkBkdE4Hq`_(!21ycz9u2b3NEk&_CV2GC8 zz}}}mySf52YVKh(`QfJRT=`<2)xjQjAI=NQ+dONS^%Ad@gQxN8g_W((s|B|=pQ_uT zbZ#NOTX9eI2hKlBgQ#F+85lDgWo2+;EJPNI*^tiSG(du2BZ28P60YE#^{$g&{WS=j z&ZimpoPAuECp~p&`2~K(LV+*D3ao9mrU_fTL0uHcRIT&->>H^8GV~|8FGvw6Q^G(5 z4C)8bcE8_#{4KXiJroogKVrf?xs`o<)%N@ZxeIVKReFG35bp%${!`%AKx)#jqVIpr zeLKbmuiLf>i!@wjRuv>`DZ{~@7#e&jriP8?#Jx~Z=We>&f08te!7(Pg;hy?4eta9O z2OFxRNALZQfhRb?qyr*FxbYn1H~zBwu}CmB%^cKKHU)B0SZ07EkRTbDx_p7C6~v<f zHcA}>Jb1rodZwnMn}bAD5;GXEa-Lv|wFyrqv6{Z|+5(h?RRX~3KKlA%BPZ5W=`o!| za)yQ=sm35m1)SFNPHT>may|OX^SOx+<$xK#p3U^P)3Eqzu*EI~Qw6yZ=fg|*Ov(`- z7rdr>yw31-)XYp~{*7i3)LzRmLGAT;!D)+j)LCT$h=r?qplB+dk%!C{Y;G4JGR&xv zuRb700~o2Hv|akIN+euS>l>ZIY!rZrL~85;_Oz=|HSY6gQ@{I9?zgl5Fz1H<Fz3(@ zDPh~QUjbR87slI(uX~$4W%#r={qE3El!iexWdUqBaIs?*Ml|Pu@pKtV;{MLS_cQlh z=cB0d9n$Y@6cIsqLPArKn3b3is}BR4ADb$dx?WxaANXW6KR+ZOlZ~AGCS0x8=O#oX z>jZ_sa{Cbq3}AY*vCQbeP8rSPOzLCSk7m?M9y`Rl(TqEfS6FF)%&r^blR|Ux9i&Cz zWW<$XgKMQhU-91M@%+qpoJQyBPC8CEV4Qj$!-DM&eT}3HA5Xysj3xSCT(m{Xn~m>d z%WsXe089`B8MGDX@pri1+gmN0V_766UHUl*B3Q4;rmNGqg6shv(tj>Pg<fX*T?>cY z;AmlIVj2-Jxjb((tviuj=G8dVA7uhk)E;3C_bmsZs@d=cqi*cp<T${7*FjifDIB}G z%F=Mq3WMxxUr&%qx4{PyT+yo{)jUut_csp={DVY4NJ=uzG!853$_9hY)F!N&0wOe+ zHbqU^rDk5IdH3MPK)^!;MgTG`7C=zC7aEVDUt9?N;w(8C`q{eIKELLU2lYU3<OLbJ z(9tEsG2%E<f(NVo4Ko5{#lPJm0c(Z)H$Tj%lRmc82#_M@B7^34@tCNd{x}#Yc}?;* z6}D8CCyj;Wzq7)mtoiOYu0FO*f7ir;7Z~4xyA6<ZOvW{`C<4L!R6z!a2`kWGZT4S& z#hMP)d5HyxIn5xQ$_N$0`r~<-??eUf4IuUPopZG^-C@DN!-3@FEW6v+av;doL818P zK5Kt+!O!2)XGuvi=r(ffhjZ?Ou=MOA{)$<pyDM34ul%tf$eCAQ)|zL6FbT&^w_$_p z)1Z<CINpvRQ%noU<qMtE`Nl{_b#^x?@^jbGuJG9^HfcDRb$a|&(=e4EgFrZ7W;6#Z zBcR00pTg}NeBrij^1iSYdH0M47Uo3Fh91hCrifr`dp&pENxeFTv$52EV}R84aycHg zvy;Z_!o>Hi0-SXaT0s4j96cJZwQ><H7R<bi&XVi%X24vVeiv@i5DQWFIwi$E?eDT_ zeCyF^v{saVPxj&L4nz8UfBHF%1$FcQMmLRzhZ=A6_5Bw8E*E@7J}4_d)dZQe=l^ih z{Dz|ca?&USfRkq3y%MB_nGkG24jJ@#XKF84#ipgs!TdY9KXqge+a>O%!!$lf-iLyt zVE<>%dI?=QOwgh#8IB7132-X*ykHwc32Z~Le+X>ATO2J|%6aoW-G|9EJ)N{F$uT{M z{I0*Z?dL63xbEt9(8QJMt+t)_J`8m<mn}HhC9XW|`6)2Y&RPJZJtv0}C90~6w^vec z^Z|Cj|4MY&q|@Y*!bG2f{YcPeoj$GY3?yDhN<99P$s{_7iz$C%9PvO4m@A#d;z>&x zKLT=c1DUHG2)k04is0l#nQA-&q8XGKPpSEr8UIfJ_oI1>essPpT%XP7hIc)|QdFho z|ChLQIEiCD*&J3l-zggIZ`>$rX=(8*Eaf<f>uC>Dc@K!k=NL#)Ee}FXDUIMX{TrRp z37kKIxk&t9k)gm<U$8x7(m$7sdDoUa>0o$Q!-V(^*zzo23afj2@iHuY`k}#=Z+TBV z6Jx7;uQi)84NPIU_r@}Wev!PXF(RJxp#(5UF5BB~RhX!Kg5h`A#NhzG0K+OLz2tjd z0gz3>(G7W3Q4ug*AY1p}aoVq?1I>dbk0&;BMcFxM@bK|5QaR5IR`@YnElgIh0RKwk zx??@3xv|LvQkP`kRG4FwC}9d;T=lVJywi|1tt_?n9dSwE&eA#wDH~OB)vrNdOlxyy zlz1k;k58tDOTs*qOTe)(6L8K<peavta}J^)FW@4j-oBmckcw6>1F5aK8XyTDIyR!1 z16rnFGFvuE4D1F7_M5nxW(Gp8vO#4NgT{5K!0F6a&Hk%_RmU5QqTra}{Us5&D`a-z zggCt>7pty9w^f}wZ6h`1$b{2PzdRnF+0t=vr<tIFf&s4B<bP52=-y>e%3h=V7)uFU z6Y%N1N`-W}M%tT{+PCkb6aMjj+{Nanrh1?s2Nr5%kht1&mE%5>4yE(3XX$x?gBf4O z@<Nt&hTJ@=AJ`$NJ^exSZ|o6M=k*KWgX>-_tC6Xed)=Sd1L_bSnVGAMgAxWwavp~N zRb@j2hy2Gr*?*ofRyJs1IK5EtsP@Yf$`o0o)2)?HiS6)p`Fpplz;=Qr?s;w}oJLpR zoisSNy$<``_C~h0RG<$H9*8vz`4c5A?QV<$&Yv`?XH9Q9i<rajsEX1s>_>k}&r<(K zB@IBtwhK;MgDT?bEC71_vD3>RLxeJ)1jAcR<)Znv`x>c*)Ye*GA-m|N&KPF{4I%J6 zA9jr5+A>2TfHO#)FRA@&68W>u*CHFvoPkM%ItKgCP-4xKZL5F#FLw8=8X$R40vU|Y z*_8iYlU1kLQ2;y?{$G+85vxi%lH_$9i1hw>B4;8ZF#%gBk-wPt37o89eUNf5b{aJe z_yB#PG>|LK)W!=CTw67!SI<Q!R0K@;GAFWn`4lMS2Tug8#9CH`;^%_wKlpjE{Xh8m zcHGrR9v!@BXh9cOJII;=+n{j8kR_)B)@3SPD@H&G4jy=WaJSGsW&fF90GcNNhIVyf z-sWbq(Rnb9Rl{TTqf|+rD5y;5LHS_$A7Bgl2iQ*Dv-tTzHu_Ov;s1UQUP)LNfGH;l z-f19l4}H;rcs9Q>p+x4Nk9cI3$d(KeE~!bZIJ_=3Xs|99QNEX1-qTDXLXZBvStxag zF_6rqG*(;<;5z`EDh2VMKNH2#{d==a^d;{7@nK(b_7Fcj_wd+Y)GXxjnkt<JOAFTR zlVJ6L>G$i|YJa;{IUk#-J736z5H!Ih?{vol!eH<Y@nPjV>6-OjuALV(P@?tE0Zw<G z;05WjoytnE_uqr1|3UPBRW|X@^AI8<uk*S|bw|Yg!hqeM;5M5otqekn5f=%Dfqsks zC;QJF?A1qs<YPXcyExq{x{B9Zd`?^M0m~%zeN^(#Ro^ftSyE&{fY2MyB<HcA_9yvs z1*LRTQU|~Z`Gd|_WwmW)j@LjEliGFLGE~j>0OU6Np!f{{`ak>0{<Bh+B0#Y07L~cs z@Y#IMbtc0{pBURvmF~|Yq2vD~x=u|6NmY|3ULKGW1lL@Ud7N(1=Rkp5D>d|)G=re8 zIb2j3irU%&K=e=gO0mW<kLQ5yX$kb1zF~ru3lMTS*ImpO>(ze)i2gh=kd^w2+I-3X zUNiLSpArEZ?Y~(PMjaDhzAWP<UlE7bt)SNdYJkiLLqep17zPQa{_5x$fRQ5IsoSi5 z5u~g|lcoHBDolS8HJqJ+T=)1AnZ5<4`5`|@e#LfoB%&bzhzmWgN{j%S{hw3-KwtDX z%%NA?&Y)WWnwI#wVErd8vDv)3KL=1%Df2&H0&4X-+eEZ7e3O@Fx<I!4dw89=F0-wP z);}KsatEMJfQj@}|8Hh%+P1!>rLRX4=kIPh!9!X3Ygs;7P3Jcs=l@flSGlo6uQBi( zClr*(UWI%r<X0yO2Zapa8K^G~j6&50^~S(+RXOBvFou7645HmmVPKTi6G(aES$)I} zyX67fb3m4~)|CJRyl5GWn?VN_z;Q#bdNzRTG4tgEMP_l}h}@uakGC+q@&1*oTmh5} zqRPSA{>~lCmP=t34-5NG9UgdJz_>sU>w9lCKir4g?~*UE-6E^n>|!$n49f9;f@o{) zYoGd8S<+V{zO9}+%Wd!_8dlWU2p?c!6z8ri=aSAq&1=da^07W1QJU*+Yx`5|ggL93 zV8BgwOartc*Yqu~t?k(M;AEk(`sGVd5Fn-Pwd3Tt!)E|;fd3ovL@+I$$MEx}NI)w@ zUl_o5ZZ^GQ<@z5v0jbH>Uaw~&_W%rm6htpe-sSae*s_eWhYFK5$kT(DFck_4dlIgg zOG-c`%>SgY|5~{}wE-(1KuxaCkVZLBjjR_K@~kL$IHt*prn|Vh+zLIsCA4Yg+Ufos z%*(_+Q=IJ5aEbplPa;CIyjQ1=)~KV0&TZVXI<FO~rl}c}n3!0a?E3EZGKjz+#QlJ~ zf7>{vhTw%?^f$9eFiIYDGEBgZj)>_H3@*(678|b}hWVQyI6u6&BC9)}x@J|&7Jkuc z1ZtGZ2s*EZLfccUTR^qKs)41x?`Zrhl<6{s?F;F+#;fb=dr+3o_Nc}6(DKPuUb0yW zpYyZ!nk`Eg(aPzuHMMML`H5e>^;|R65N8U}*u?21&5d_86R2n+ZSqwE{aK*-K2F+- z4+vd$hnnCSa3|Mc6mm@FPh`%<YGb0^fo_8A`lSO%$<k?@4eO-aij@BS<a!CHo(9!x zNB5a)7l?-#75S?d1+lF)veiW#wCt1O%`e#xF&5K8?)HIlEpz_ag=<r5S|DAdx}uFV zTJb`z^c~2u{HOM-ZsY#kjdKP}vKg<ssC~G;@%|j$>;<+4aCCU5L_6l!k1*7V<*J2> zia2)O6)~O?xpo>q@9*10)N@P1Nv2^Ym{yqam?5rWGR76)q;dzf-o{DF-X{F*<?&b9 z`fq4#5AaUKj0|^n1Vl<EfkuJ4#~gubie-SZijB11R^B3rEKXOCOj+qSL(^p#D|NTO z-w&8I8kSu=iRg!%2rxx!Dm<)ZX*g;9ZLj(7n)<iZV8oPJhR^vI39{p}v#_wRTne`i zpgskfJpJxZGoUkpFo@Y`pFL~yj8QL116@sEfOIW%9xdn?JooERp^HN&d?g6%NE(|( zw0yz$MQ1Prq5{*98~WR&I<*nVyoI;q_eX&WK!x6NI(=_%4~t41I_E0#&ABG%jbzrX zdt1L~&2a;^!XePv&57in1)V=Y#aOFVj41)Mf}FJ4Vwy?s-Sc?s>gs}i>dsm|$b<^$ z0VNRlh^#}1`WXn(25-GnA~`Oh4KZR#qIE&z@i@tK$Hp|lRUigBj#Il<O<-pDfs2EK z$K^_3=QI%YJZ)Tv-3JrZz&z#IZ|_9By_?L{{I16{L|L;LhCox;66jy-%wYkYTXS<a zKu}%1NHsnMG&Vgz=YfLuNYD>@a&m&b-)qhmvfHV_$;s&uUZ+1#N0voNsM$ip$SBtV z16_uW?4UfXNc9l!??6dwG>ngruk<R!a++(@Al+j#2{fRAKLrH^KqH)ihNjbT9L#h~ zcV7(#O+$Lko-ROjHTz9mT%4AzC)n|#ZNu{vLqYkb^(|FZXXFo;-9TKrqc+G6cj@5p zP~i(Bm}Nry^8xg(iKbob%}_;5gYh6zMOKPHFj4YbHnG}?+F-oK{OJcoGR#0<>|jxE zA242JIE}Zv+%0Aj^r(&|mJ)y&x<F;ZxzEuJ=-ze&XpqnbpCW$}KC{9yVB`d<H@B@1 z7Y{(Pk0H|8L0{LX{w2`S0lTMSpd2~_L=$!wgM`yo7icWJw8oRps|4?ck|B6aPNpS$ zwtA(Xxpi;0dUtR-GzS9RU)is<fO^g>v|$*mIl&gAU+Lhi%24_ndM0iC2|X|^rY^-L zVgxiwicM{};GsB}pM#!#EoSKCb1I35+==QoeuGJO56}`NO7~sh8vk`zGN&9*n*2wb zo9S0Tn|Hq1%Z<*-EjlKq(@2qIBIp#f-mNz2+CI(RU0HeUcA)EEI+V)2+H_X}x0;TH zg|+Gp6dO9QHSMrvs3P8<dA_Nxz5vrdy+I$<Y8bnL(*Er7>MG?9A83>Ub4?FH&o)$o znqj&CP+7$Kl{cqn<;~~Gnz#;|;Edpwb>9aDg@Sd#HUk2WGzX^5`reI~&w$w9#LQSu z2G{@{9ik4Pck&!Mq6ze<2^CrKLZ1hGv>#O0+cSpi0d&f$oaRfBOoSSQfmV2(a;+-! zQPBS>X>#Dt<x2$GzaZ`p(8;@CYwsV9fT58<jaD(02&m3;+4;rP6>Mx*fwy4zq;xto z4+|wWrT>+F%KP^)VB&PRxKT!Vp{tGi`e!0m(;#$8^c`}avr!<cp^akVBQ>H7fZUCC zx}d1qzF$z?@2xE}Ei8vxIt6|(LN{wD-YgRI=0ioaai17?SF468PrJ4hAD{4_jfkw) z_jryE4$GKZUiIBO)Ph-xKtmw7Z~hYyz}F=Cpk1rBblbDD(0Ebju(n73Q+-wGrD4FG z$S+FJlgpr}uTQp7-7_$N8+g77v*b7`1UAowJZ>@QUY!b!c`jGk<mc&xc?YC7K|7pV z|KlnGefM{u1Mxg~nv$1S=N2el4J(`VE44p>X??-v4h{}L9@*=p_eHJsjBwGRLQ8Sm zNl0MW#;-v`FvV~c=@ZyAO#+%K&*f8T)5-P?K5UVe%u=Kiij|RFrg1T&pLZq!F=3^B zVrbiPD^Q1-3I+Db2aJaC-H<EMrbvIIUaoJ`T=%vOw%>s%@9U&@=S@JN8tBk|_?;73 zN}#8!`)kQpV!-qiG%JcONl8mrwk}q#c>+P__|R3%qP_^LU7>N%rMmB?8%p!-J_>Xr zeqWo_*V39%;{~Rel-n_vOQhPW9gIh`X>Gk5R}iRfN;LsOm|$kF4#s%#9&!X2Tr%%` zFwcFX*9I(<L0S82p#1wY->L*?p(;;wdyays0VkWd(3?|R+khM&dw@9<We-#I<xM~D z&+`XZGK7p>j(4fk1s=e}G81ECMf|N`XF9TI(5c#UlLoT+=T;7yo}il5;r%#RUpkz} zpxK$`D?x3@jcO7hR8g^l#84@ba5)ijCseHW6gngZ%*z9kVl*#aJb)ZowmMK}u06*+ zwgUawzF4+ms3j*wt{51R-#P0V8+8OGnOKel?vF7X%#ImXpFZri-iKyAQU@}s2d(!I z=6-JkrBtX6JN`<B@-#)Bvd0wyR!lsz0n?D?bF4{g59pxYACEDDGG2a>?9kX`eG62r zfL!PR(DU2d-nK|$e9y~6Tx<xMz~fWch{Me{;%CBEE0TcH>>bnb2<YC#2i#<*PboR% z4${@p5A;4mH{3ysdXoFL_aEa0dJHMk_)mJMfI4}tukX?HQUObdk)MMK@JWmrN!7GW zOk}SOJ8(FISk>}bTz9AByhAU$K-c+kNJ!l8?N!bz;75GVMkO-9z(a5%wG7CzCfHX& zH>Fy7p;&%d_{qV{_pQ7HeQZRl)o0)BmiT>Z|Ls})Z?FB|Kl|SKXja|**djJg;@8`V z99}#T5F}(X$Lt5cNlbauI&r!iE`Xbokf0&s7u#{dnP|+C6mX+?{}>Dc166r2nGWkE z+B7F>U@8LZg*O;`0c}gle1`qH>;AASzo1~QRiF+$0@OkSognYyP6BeTy$T@Ruac(> z^prP}%+jxR4IZF#!E#2;uef>Apc8z+pppsDu)PR;%CQJ2%m5Mzp#AnF15Ds~k?#I; zeEbw>kANaWn30i}xFKL%UN|W)$05R(gyQv*Kr+ul@GgOa1zvm|3O9fey1u;BZS~dr z_!S63xdV~6_zYGc+zd{Pgt&NqZZ3mf!x?Zw;9wPV7}Pg3M38VRQ+^5J1#$v99gNVP zHgmXQaKdQ}f=?+~v}~c0vEcr`s?sqMKoxDiVwrW2-d}bLY_6|s`bh#|VAFv_C7Tw{ z)!-LE(AKg4f$q<TlwL{0(e26s6$G2n>`#zY-oqwVFy_m_6l{T2oqOXgF#i4Q__&C} z03h2CuaH+Y?#G5!AylB5>wQ;R`JUO!Ag&3}nvp^^0`8sMefa|r%Q5B!!p)PL^v_<u zb^smZU~(lCr2sKu1!$vS`1>9XFwD9s!JCF9`ZB(!r^oVv5ix_D1jr762L3;<3yTma zj{xWn6o64sP~@JE>#ftj1FAkiBxVmR-q_d}IE=s?V3UySaTyd%?f}j9AU`HB0gaAs z2h8cp;IJWv_7Sqd1_uWN83pgXif&uZjJ722yy;!A+VqrDA{cMZhW+lHj+WbiIgL04 z?Mgs}>KD`rf>&}`RFIy`<&Z57cu27E=CL+I!L3iYw|Ii>4i!$}u2V2J&fUNXg1+?k zmRkJUiShB9%lyFkx4pppzuo2kz2pD<T=;M=U{|^D{{LSeEws_q&d?H>j}Mvo|AjtU z&i{vfw5+c<xLE#YAMIXRppI(y#Y5{u?=Uqvm9)~gr(uS671Wlc!Ck~ghBCN#VyfTV z_DH?#&X_2hCFc<Oe~uBvGg{l-5A7|7{K9lQtU2{OSaZ5)m~XzAuV+0>;&uYy70I9C z|AW7)mA@f?dPxPUAjEJ&m~cY#sF*Mmj|EXPDJz-YPCkf$f5PktfAso&NKeCi`@GL$ zXpzwSJU}2d{pTNT+P)nzC&NO2SrLK4T=UPzC?aIO!}{|R(fiM0&<}w#f${(MCt`f) z<(RRL{=NLqFX|%XNYfx=OslG9zQiP8-Vs-E%_F=QBYJ<04DMozErYv%XQS=u>oJPB zY<5fngpSFFIb7~@`{G_>oZwF^Fc3U{iXiy=s_o43w<UVDi{ks}{#>v+WcUFs*B1x$ zv5!zQ2YRu-YWALzqq~IiJ!^9$p(7eS#<5S`AFs7+6Gn>+1h?1$89Aa4uG?9Ys?jGK zd!aD$JV+*+mGI_M$A=c_wO|rmgMDxHsW`dp37*QfxpV<L9!F7pf@vuO_6*+c<6VsI zNnP9h1{aDdR2$?84J7|M!t5ja!n@)GMw~RhC%mcmkE__L&G9=RlACNF>ULV`_3d8q z)V1tj5ni1ZCA6jwUUr->Y!>d|=c#D6<g~CP$?E#~MQNVpD3xrW68`es<=CNz6VeR} z>5a)ckKyw+9@~X?+Wgt_cF{Yg?R`A>AD3DbAp;vfUBkwVZ`m!Dw&UK{ygoIZTsbXc z$e)gs^wdqS3|2Bqb~tQ3AIgDS-9ux*M}aP${KwDT0SyuR8#YnBl9L)L?ci}Fk`*$9 z)+oMy)HZ_=g1x3IFP=PxOg1+Whu^dMq;`L*mM&Y|K8s^%h2h^JPGNY^A+IXCj-)w! zP_wr`dT2(0-fSxTXoZpD^b?JH3vNn}%b+?V56_|ynGyb=eoQS@jMbgMW+@K6wh!Z) zdXpM*q!2YlNOT_g@4J;ta8pB1*x2yaUSMXN7bx(O0i_mv^q+o2ane=TtHcbEJ@7u& zoS$vR4JsO1Se%h2)o5eaHEMlbb^F^OYSUYYN_CV-tGR_)3cvaT_V<m<t-K1P6C~XQ zBHlj~FOh|*3+uupX-_*@vHhl3ZywM(i&HF3_2%238&nEqGU=aexZ3*e2`B!O!`pzx zU}CfBI^?>xHdSEh9_wxn3(kQ%8J+aAXSpe4=i));OOh0oVQ)<Ih+@!pCr%BdRm*`a zRh>Y$@7buD9*lP9NnxVuYsF8mS`(+SIV30LSRg+`XZpWx@_d>JM}~J^H5d50abogo zbaJve|Ck5?HMX-m<`Q+6^Q|`mc;8RV&HK8;K6xtO<3ZY(*$x&EANomIRGG1}>M;vU z+deUjXuODauepCl-v`s0cAV!zo#8KAwu?oWM1?uNMpHd@--w<1b1$USdRFecwMz=D zL2EE`ALPQ!>qd3Z0ERA9s+|(a{}-;B!;>VEy}3gpd3Eu!_%4@n{TkGO2CAV@$*)(> zUtyoAsfGRwK8xEr*UU<6N)gZ5ZX8rHaoJ~0@i&FPC3x(*Hk^1oQ|8z;+|VVCz=QzZ zRzt#T_jksQ_Ji8jN*7r{p~PeuJc&o_$B<p~*Bw&zC(1CZmX_`fPQCBJBqNM2hqqhu zU%x$kg$p&iuMk~~U1KJ!BZ!wc?DDx0d+}4CfmGlTBtV^3)aMfglJK*bfJZq!>u;?| zya(`tvI0nMbI<PVLdwOX-Z5pgB%e4|JzWjE_1>ZRU4p_)mnMUd>nOHl7k*Gr)1aZ~ z?3%~5EZ8@J!z}3R)5yJ}r9{elExj~$vVCapeWz&f49Q<p5f49Fm8->9yqcK*-sd|E zF~u+2E!EcYj^YG{Pt2zU!>=r=&3QWNF+<`Mzj?ulbM#Hfzj(a7niINfrQOSrCHa*b zw|j<E>%1~MiD-P=(n?^LFteoG?D_QLKS#sA>)Wd++3KhFpM3Jv53z7XAZo*9qu_lF zshO+bxb-Mr`i_5i4E+YKBxQ7X07GR>ebG%|pf<F&)0l1SNd2Tk^zyQ_Frusae$5em z@A6P4n$9KdUNk*QF#f^)Ox@Td=MmNm!`m-gip6#&8oZ6Dn$9m9gTFkhlmD%wjhm#! zCYs(-Uk}vjH@|O9kTA6;e1KZqZi%D>iRXwn7_XAIZq!BBN9(32N<JUTe7@^Ua0=@h zI)#M@2_0!PVNszeznsN%Kz0vzq#b^k!=9|@KbldLiFo;VFM5#ZTE*Hx;J4=SZD0vE ziTfRWS9p2it1tWe<L8uVz4SuhEe5TPe{&*uB5EWr`OFVzI$3=7gI_DBpSOT=lu{Ng zIcLNG-B+E!6=KYS<+mh=$fwct-0@V&ebO}w2DG=&bFd(jW>^Dh)0mYwi+AxT1VXxP z{BIWP>{{Or=|T-K1->l8<LRXgS@iteAKi#o>?1JnB(fEf`MjHw({Es@#@*A}LyAK} zG=2D_T7Ck9A03oK;1aXleP_&f-dj>zvTr`2yK;gDUTYVbd|6B(Va>CG2N)anByIL> z2!jGMd#G5X6+G<F`wxZXz^^fk1ofo~1#BDs=rqkJX+J)6SFvs|fJ5|g>uNQ~2$fII zbqbwL)@FOY+JlQsqZsza-!NAD%^SlB^SS_pm?1GomcI92e}J>yP9-uU9v3p%7+L%+ zicG_a>&W2m7fc``#`Lx^>by0`p75>ZMxM<)dG67DSm^S(w|ji~vg*jW>^{u`_jeca z=D;Ubq|HGyQ#}rU=g6o66UEODEn086DSb{pUSdX|e$yMR{)F1|6}P-z?bVvGXF%*_ ztw2wC#d==_`%g8$CmN-yn_JU%bNW~PvS10s^RTPb2L-H(6PQGx$InnnVm_-qGdQcI zsJ5~s>k+Zv`W51iTE&=|1j+5;c{feky^PKuH}b-Q-v>c1gzGs%j>Yl;9PN)MCU)Oz z1q)#M%6_j)y@-A^+6ig)&*ofU-l=C#zBUjuM)Ga#7-7*b6BKM>dgFOoAUn#=@#I0b z^W@AQtr$zq;wAL>V1}%2$V69q9AU;pFcc*FrBgSfDcsw?JvVm6K?{KtW}d2Mu8&e- ze{CC=QPcHT7bA&Ez#CL_&We0X^nUWlJ$K~%7%uIt8_@`b8d!o6PHOb3@sBwco$Ta# zF}%m-vv+)s9HD+*7Np}>X^^rqyWOZTR1ZhTZmPoay%`e@;&8%qA|VnOVxuhIx$|k# z=tW;crLkwHC-jk-g!1jYI6=>2icAN!xzsu@pODL7gj2YFyv9V}r}d<_aNU3Ygj1uu zrV%xY&ZYgF+NSQNSdkVhByJnD8%pw_!G@W7)cmHutlgS2ck{|DEa#Ur(j=UlL%gX+ zGTcg!ke5jF!b_r#hfJb6jm_a?NaI?)O2*fvFw%X5sJy=8<{v>!jZK_e<?Hoo7T<xk z%9AQ>p(Z!_b+KydqsP4i?#VW+RBmDjd%>o|e0P<hFGyOLui(q;b6OfQG+3_{i}g_Z zk9UV<YlJ2=^x8)9-(KuX7;fI)kZV5{+LHu&e!!yt!kDOco7zS-e?L@kEO4h`_{r5= zlhWI1qq<4{UAbUE1)pckq^6XVxqgR(B(2p)Y+ide{}s7J-QGJyMa6!J$O@%jCCt%} zG9!f3<L^A)4BMIAcH~%a3J~esJ6m=piWI?5mZi@bIl-+;z*iq>Xy_yF<&-D(ZH8SJ z(@T;IJXcw4=KIC(gT_Jx@avwK-m<AX&QoFGx2^ic*)3{%!G(`qZXRkxeH6pk59Sou z=AyDZzaTM&aUro8aGMkMf9ccu-Ww9;w3Ybf5d*%=IRY4Wyv_TjR=mB2`LmufeRH}R z<ZjA*=N;trd3U83yx0X2wbJ%-KjIqKISa!MePFidHcN5&TdQUl6f}Pd*S5mRu`4VS z^k5S-=_kaQUlo)^6JOx8E|A1^+HE^)188cm?LPjxkarbH^CXS{ndU60p){;YNPqD< z9^cehPy$R}<n=-Hq-T|Hkz>NS&2_%+9bQjXvOp7K$F8ILByJ}$H-(7EdN>nty%Qk# zE`KzA*KO~;AHCU-a0*3`UepVkm>z-q_U+rAi6dw8_g_ts8ZNgo)20@gJ_-<h<IPfu z)<TQyKHo-pL154t;VQm2wDwb*wou?ep$6&xdcTdW9LI=dd3;R+x*wY^rjGe3zgsGr z`>Xt#x?F6|Y^fwzwVEy}9SiNGHWz2c*o?8ILV}&RzaUQ{nJ2xTZMsJy&a{K25<6io zWQ^0kt7{)#!7xi38X;PAFvOD3&EbauE}4zp&>&v-*~=#kG3K8+;Jc@Xn@Xwrg^YhJ zaiZ{`lLqoJrZ}9SIMQfT({82?8jt0Uyadp>_vt-VN#u((a%&#YvUf<fL(fZ@ct^iI zsb4P~_Wj!KmmTU{fT<AXrdJvpWg$yOM<u!fQy_x*;uZ7P?5k{!;r)uE+AO6~w_<~s zBF|oBE&;!5RMam2Us%D)GCuGg;rm!(+I9>1A4C(AS`R`{-DzUIfo;_n5&FLB@UBck zap30JCcltY8Y+*3thO31nLfX1>Dji5>yodkL2q_WmXCyw3G?#HsF#O}KF)H~i79+E zpRU`Izg>%Antti*t}TFnt$;4iCGEI0f4yFu7m1~!tU$W<u3*i<eQ;&}xliHU&FFGa z^Y7Sb7&bg}U)p%a1SZ~CR7qp@2;SSKt*PHih${RwzDLTQ8;G^v%<<c=i@o=_#KgOH z(eL+(`7>DUF?Z;_M!k1%k3IF8>Y7t`A$$)j_8>S3>=MF!UZhtWL7UNhBdIn+9f*Jg zs&~f^7iWZXH0=?<(%@y+M09Ti2j|LcjHV<76T*39)Niq5*{91|WE7|aRpKNoJMylk z$}-x=01u-h%U!;+Q!YS5XDKZQ=g+0O`tWzjiDOMU`3`*}O!McE;F!#}GGu&JB-T9c zND)X0<$^a9NJfNebglvh?vTu~50Qau^&>Eh*CDqio&gS1MA*Dmdn>AW=V_C&5TUsq z!I_{h2t~Mzk*{QPWEa{~qu(R&A?|S4Jxkwzcun9l8o~mTJMlfc;UY3&N{VPoBTnD} z__W-d7VI=6f`OFC>prFt$hQ%zS3OJllOw9?HN%9nEO$8m6r^7|JE|nq*;sepBC`o% zoU|4vTSk{4CdO>tJC$VS=!7a|QOvv@w5ook`}pT80)18Cq}wai#@#xh=Q*QgaaUJE zw2#&G`%ywooBf(f<);F)d}tJ;H$i0PeL!+Hq0OXQih*qC<x!hg!0LfkSiX2pHK2rO zb+0wP%_V2B=zUI-j3h)@oN#}SsNawufM_v@ilzt<Ut08nbHJYTacxR4l|x6P5Lr)H z7&jft{t+dT(MTax{I5-CEqcE`1zBkyfbjKmnhM2F?j6$FG{^g#$A)XF2-HpqzWLk< zRw8c>S$TaKI)cw^$xcK?NKTZ+CtuobHIMcWaagOc3#C96#8yoTP$}w{WY}$fZEgNO zUSeH)W1UTM8(2y_)z-CnVIOAhJ4ACU%VR8x0maGe--Iq7-D?z*gz>)_7_l)t?So+} zl~Xb{iJ5iz@#8|n@+ls24L5Eu3nu{zs{b$I?eCI6#LSi?jpS@80nTOwF^#8TJccC+ zEL#8$`V$#z3$Lfr{khX90G%x14WuYIkx~Ygai{kLWY;YV-^?PL=#w2QZEwwuO2C`I z?9iJP@Y5n8yDm(Xk>4&gFm|kbW3p$(CxrV0QNHxHQAxaQRiyoZ&_hL=AER<TO`)+1 zJAkftI&7xpxD7j-Oib)ha&>0mjT}_=s7PQ_kuJ8qv3`H%*j!N0+%{DeL6#@}xtgyj z_CtaS^V3|*Mnc^|)9;=aLOz|Zs0U|$2xTC}mkcnQAF5Zq{H864Irr#|TTMbOjor^7 zGm{aRGJvNR3|2V$EE;O%EzD>l$-Y1s()Ej14ZZP$<larz^5XXmM0~oQQm?7S&|>X( zpZOk-`WwV$N~5qBkl?b5nnV!m>!He@#Yr3<?7nLz<MG+Z5&!OU9Un<Xg^W><b){(F zlP{1GC5Ug1@o;Q(3QO(W{xO)^`SJHr2v)~J6u+<RJn0L0|AZlPHZ*j(j~ujLtJ-!1 zL|I$f;yY~jF7u~L^<+fMp2kUglLYPmUf2BPxXp5Go$)%rL&AW5rvw;mFK@>H=3m+d zlcoB1ZDl(bVg{_flit^CZbz6N(jhhZ>i9VQ#}FKY=8)^1(@3L1Z5itJ$Wh08zT?3} zR)P|ExC+vr8}!R!IHUr{vrY3D#1!TG6~xVQB-u3rOdn3Y5WBU7F&-fVe`IngTB;!> zM>M1o6h)g8Awi)E-I;4VTI&)ivTF9}MrX{7GZvI9sifEGmh#Z~adK9yUsK9t?^Gan zxm8>~s-ej4lG;$Fb$4NA6r0t;QdK?LDP24^rr<3%Jt3-LZ*}QiN`l$(oH<9ek3|99 zl8$cKXoM=;Z)(ZIBqw8hCwzRMWbFm1jLPn!G?$p^^Zp!8-OqflvB;4PQBH~_m$HUy z2(^zSzwB<b9Yel{q5z3(n0o~k0j}{}(~1_$+nv4ollMx=eSOoLMdAnF$a9DJF-K)` zMtc@v1b%N`OP?HlG2vfjJ#pE{=-5C1@#yc(tlixhhpZPAl@DS~-yDVna?pM<Y9DEF z!HzqWKcRnmi08s5pR?i+h&mZ6dZ~+9BGN5Cy})Fx!L_NieZBm)Q8z4fyQJaAAlkEM z<cj=wcwl?D-Be{_O7au@_VDm*YaKKj@;$O@YioPBU^*x*FD7^p+N6?Czun_3O2NNC z^ox-Xggo}wd@#|ijAdBjbwNHiI7-fXv_pVhz)EOyopU6zl!y~MKje{8IaN4$QXuzY zMlyk^{fAqSOT`&!^q>!-j}xm!rI$yc7Q=*w0Y+1kcwFC3L7cewiFnvYze$p>XU9ed znQhU5k^Gsf_P2e?Lt>Qbhy04)swXEi63Tf<-F{&hPf@%iDnWv)IO+d2D_yW$4g1J@ z-n|?kh98KsrFqB-Oa=7y(w0m46cb186Hf0}-bM!X$8_Pi?D4W?yg}?Nbv(EB(!*$Y z;sTGUvASzl0{a_5T{bc3^Bvr3iAHPTTh4<8iLo~i5CVJ-xC*AS+QSiuO8H>A5<l;1 zCYq<#=zwV8wD~m%k#AEUT5=;Ed7D>aD{28i;w>0deF+#sT5BD$=$3$9a|ZG^pBd!+ zjz-we;@Zsn)@!{vFyq5tRaLvJ@GdwwuAvjpd!BCU__%CZch(&PWG=K(I+N>1>`)fE z6v)Jg7MWvb+ocUFR4O@{Efz1DA+;xN{vKgZ{u@M@3T1?3MDUoRD$LGz!k9&kSx;Pb z>5S;m%vCVTHgk%osis?4s{bo)E5}xkl>(_@z)Qx)-}ITl{YO|iCVd3KU`yV{_|nQH zWE%OCf#+s}+=nJ|iK=e1pvWzBqH8TPYqu#4?GNvR^7zvYsN?C(aHOUjS18qSkqjAw zP>|D#IH$d=><EM(<KE`R_FB;v#R)gUw0cnnn{gLfS^9^>cG%6dl9S_{KssXCM$Tka zyHFk|XOM|q180w;OPL<~@*Gn(&-065cAVax5gktkDOg))v@DEheC7}nF{fpwc;7)l z%38DCgEhW&tqV4z=!>7h4?EF$24@=1_&J7S#%G>lm{!kP90CR=hEv6OFVi>Cef8rK zSNiK>s6H<31IyUu)o87lo+!y<NY*S6zw}6`VW@cbO0i2gCy2iBYemJIy-2+mnPp6m z)1Aa{BJ*h~iBpU%>$S~h2<sBS@dU@i&vkrqnm6ZN8a(!}%`F`5ud(jPR@siejlGsT z$)?hu!lm?>9dv;B68!v$S)ax2Xcq*p*ZBd%uTl<hT0NK2j$NW_PuT$ykqim^LvZjj z<jz%DoGqnvOKwXeD{*bFp==J<9;#{SAvlLk-4CW@9vqc7zOk*H)F@uXUag<4HQ>}; z030i2g|vUoJC_d>29aMYg1b&9CMR8XmRTdU%@V!&(3sw8yEmvWkrDqaR2@44brw@A zKiJ1?$kwL?N0GUrVDox%rvnUM_}msK=*c1&pXl({Wwkis5VxO?%vL`2E9n_}P8RHY z_gaL=-}}vK305w_!!F5*qs3XXza(O7U6(DDm~h1yZ=$TCt)K2mjfA?YXn|vkbH`I5 zhFjm4Px~gnz(qIerpL;{(xH<93IZ_qEsjKhFd6o%<BnEScDtW9rX%N#C@u6kLkh+8 z_ongZcIsu(cdArPcD?Gp>pdrZo{d8I&P!F%iu)J9p8J{>05=ppGnkK5G;f_Ff&Uc3 zO!*qFIDz@WdQoR9?vZlb!MxLbmzP+|0YRF=TK~iWVeH%+NE{_qz(h;{LP|s9W&`ln zTq2YHpENBfdZqzeR<O7R=)}vqb!jFxK}17t*Vb<V4kUHh&>%ZtevBDsAWh=)?B-yg zkGE?Nfdk`rWa)|ZHH+L|(^F&I4#~qqoyLMn;kkB_^UEV08(8&#bp<$Nj{tl6wL9|; zJwd+hDgLTpwT;)s(@&ofu3gPbioY#_^EmFfUD?@5aNYE#HmX-BG`E5Z&=-Jf-C;D+ zy3Q>t0;lkWLxX%qmsy}U*7qS}K?k0j)O9A168LyFLcr)KMfB?QtRKzIV0+29#y<_> zra#D&*7l1u>CAI9*xnTXNp{OlkW$Xd899uJPEyP%`&QNm#1-~7&&NUya$aEuPOHI< z_0)VnK_HCoX!AF^)*b7!@`%5Z?#+>4>-kn(M@UXSHYwjMDrT1YE-+X7^deB1IyBfp z$_GTQzfbbrRtrywHvqMg)bz5ZJY!+&ctO#i*Kn;zdH2hs=W7}p;h!`DQn$LXxK!R# zEQsi+h*U`*@_S+hb5<Ww9^b!-?{P|{XDGD2Tf$#ub>a_ST4d))vYh%#BXrai-i^m3 zNx*&61S>sS%1RW^5p)yK+WR^hR#Ok*Yzglnm43&aI*#5yKz1?Ke$v2ImV3SCy4V!5 zWIVs^^krWl6r?oJiBStIWn|iC!6OUxU!5Aquh%Xaq#%a2>@VN#a)}xvEf+7(RxUEU z;*`vDHo2R=B&4u~N4s`ljJb?aWxfxn5(-4;l}<6YA;JXlvZUtfxQ2@hwpz0)WL=Ha zd;U0f)ETv`*4F9n?&-xr41Z|s3mPqs35}X|ikOP#rY!4{nZ0rWo%RDoF15krYE3T+ zNzTI5W7Z}iMVz1a5Qfz|-tEM8h`Q|a@nju%HgdxlSvd?k7S<xfe1ID=s7@?0`(ZY= z01G}6Jff~P3QwvXXyFQM6X07UOVf3-E$m0rb#g?~<1Nm@<j<m}Pw&dy$ierEI6m<A zPVtz8sHyt}NK)B_B-FN4<LzR?T~$gaa<KXEZSS7$YOUUR@l^kO#0)0ZMe^RJ4jiTq zjWi$6+RWEx44j}6Nx$I4S~nt*S{7cpx>M%Z<0R!0JgH>V+vG|xqaw;2BmRZPqTY<^ zI)7T<n9@>w?eoQBf0$_3^@qi8GB}|IbTmihyKd~U-#rs=V1qBp756g9<h+%h4u+UN zVX&L9yc*9RufYcNKl$T6@gE;>X}K{@tb#Oxx%KKq(7d!Y5PqX|*>Os6|HOVfp&@H1 z)&8#YgBIZRjRp4#iZt6OdlFv87mZ6sEqYzNeNgtKVG|rz$mczQAMXhI)`tEjd*v7e zk5U-Bvo7A5J%}%XFG{-dwQ^1oXATduHo(i9Zv2Ky*uq?2DsOsmqik%3qEX5~&imDS zo@=E~Ag;c?u-sb0D>seXsmxtIK(+7u{MmN8jC93wp(v*8l~aq@#{r_S<YuX|fgHbA zL!}X0_eN;(bqhf5A{3{EYn8aycxPNgML!}E?@BXC%jFIEc?mwl$1zGC-=A4uM|N12 z<-Z<X$jo5pz0r`6&fxp7lV`fGeLRVDJXvBqSe{UOw#_=B!I6EkWgw|=+J&~8UgLU) zz-1#Mi8KW!%ZLHb*E=wKvXP5#sV4k*g6dV}ari}Ddp0MbMQo2lU<Q4)G15<CmQh9b z+iljch>CeK2a+)HaZD$q>cnUSIWhQf@oXz|dmA72V{`2co7aGsLL`w)a%LE;eC?rv zhx4LZw`KlVvOlli9upF0bKM`eKU8H{;WAw6eidyzN5s`rsBYxrPmux7Ce@kS8;_c9 zrYvQiIb+6>y1JTTyz{6LXW9RuUQMtW_KXtCrPyK~IDV$FFATmYxOf1+Tc%~bW<W&_ zJ{newaQ&j5@JIr?j(k25*pURcf<3w;K;j2n_dUPcFzRN!Gok0i7pG#TfRShN!4HN! z@%P4OPmtN1Xlg=pT!ou^%@(B+rS~#FtAUaQ?ktG!^%tfF4P(=lQ!xf>4^7k!<MsuO zk(<x_T)_#KxAj)L^Z}!>y>?&d_ESgd0n0&r*$L~-K+cH{iDSI(e``beA)UWE*qztc zKd81dw1QtKYIw}~tT2ztV5T&4lvih#P2L%0Yy8q4boFDaDK3zu<nfz7b<iV&CXZLC z#9@FHW~N5(lOk3S9jA*!40HV9O%9$AEb*MrGyC1al#zfE4D@(@Uk1P`00wn#t{`Sr z*vAA<RZJ|mb$)odQ1RF5?QHTa=d(4-3U#3<1vgi^u5eB_*P!z4V^K0TK@=uq?ghQl zrg%gRerkp<bRwYb>aYZCAYHjInBLUqw9oF`I(N~;+sd6vpAz?cG5MkJLO(ZwbMCIi z`1shr{uE>b+7WmMx;yM~e8e7?O@Cc_+n7<PElOz>EdSA{47^vtLBmmax6d47Gello zc(a+j^}+>>SoPWxYs7;B878l=h4Sc_Od-eAW5>rv-XlE?bDtFXKtQJC#N}LFYV<j~ zx&hUF2v3eLIljlzI=X0uy~29H#Saxh%(Z4gB6>l{063}x3~H@<KAKL~R@k)T^OdD? znWy0tU**QzM2w@%AWPqdEuzM?IEtjV!Y*K^K?3V>t^KPAkw~@-9x?SsfKnS&lr`3U zfY?ZeO|JF2S}>qzC6gY^!j1HcCrtz+e@Hg?oSNp`$S&f}&2=9fX7c_nsUg^=4)0uk z_B;)3*M7By>n+7?6eZQ;U3|DJd$VqUN8TXl<7hdvdBbVJqK$xb(2$ozB(kN&$SAcd z)jk)><`9*``R0&QAz?I9yD0t_^D01R63xyE+QsCrY{+nqY9!spW7x_rs%|i|?l0mu z2DB8<;YzYB9R7N@OYWcX4Z=X}&*fIoQdhTtqg(`6#%}1xQY93Lk~U}MFt>(XhjO^A zxigN^Y&x6Hk-;CXFmIzp_5~%+&<?c`a-hdj{n|FQUEZcH7u6gvF&X?K>8YhwmaxHA zGb7*BKcdnn?eduDr|-{2V2`=F-z>vY!d+3Yy>J|ytu9|$N8853EgRvw;EGhYOU0L8 z9ai9p&!74-`Odk5uzwuojGEt>Q?z&tGEa;q=C8(_<4~r<r0e{v<bUOHK7R6!GKitV zWc5&?CLmkzys%grxG5|z4Ptoy`E@Pr@5ocXWXn*@W29BsA1K09oxQ88%SMUZc0C!> zr@G5iJJfUl1l#k1;B=Ii=8DVHLpAKFT@HJH5S7yl4Wv)+KyKSa=`|W8-_FK`+y_rj z7vnBp?jlssSiLq%Xdwu-?J%JdKn^k2b41Pw4Rz7F9cJ1^IYf-tr%oVRTiMEN_h(1- zcNW%C6!ZoXHer_Rv{CQ8qBGI_i+`~n9DqcG1cgIKLz>FnY-&<0ry=#R>@PqZG&fc( z3**OrTnlcx&ZJmnt6VXVXwlYL@2<~~7@9KEL7mjdbAjf%6L<TzA=x-94cDFotfeB4 z)JXdKpN7;X_bVFv{?4s>piBvm1K<B~6EVw1PG60lO;GV}><RnyvM6@&2E5OCwD#(= z%$@;C73^ldM2x0@UszvsPs6n=PD@gLwfJ`M(sXBO*h6s+vSlQ*<*3FHa}xpB!)I%I zWD#T45VhSjUh2ag1r;LpZ2>FEhOH6BQZvkTo5(Tq^*b*ApzvJkOTyb+T;fdjT4ddA zGLU#6PjFgpxxJtny``8~3ga~{G(zAPwr-0{fTew`(mvkFX&c48DiuS@w^%x9^5e*- zm)U)g6f$|&lsp=!43>JOxRn}%EW4$WR1L+Cs>FRL&FDk|6sQ!eP=slNenBK*rOnOg z-nK`NSDIfD%CU(#QkIN%+Ts}F1<}{BV`@{>E}LGBn?<c_$t1i}bmLsvQen=5(Un}Q zZCulD-dQHFb|JFosWu$Qn(*II2b?iC>~W62HYhfr;7w{On$oGQzrPRnx{%5c6V4c_ z^cm!K2@kJ+xbG%qOI)ZW_nUQAlPa3qq1O|6Oqx19$-*OP&O&G|pofnWs)pvTNG$C7 zQ%0%wCFVIRowm8)<FZBgfaCZH>FwDH94Wrb!k5fuH)k~ad)2#|sJdiXnolBIB;MvO zo7j4#!v-42+oBMC6Nq1+r%e_oy7RTFqJd#HYSI(<<!}=M2{<C@e=I%;ZwrWQ5S`!= z5zX#cf<TRtfGL{R?{tgxVO%aSGKy@s(nNEP0%_lQgap~9$T;HdX}h6$z<uLIpW5Mt zd_)vSr3D`gBW*;Tc#8IjwkDx&O3cfRqu*PpgSid_7J)y}Ad^;3a5ve+Qdx?tdyh0{ zQy>9|@TZ%+{_jX1@h}YAw^)bN6o-hmZZAkokG#i2_s3K?)F%VUVma-yp|>C&LA1e~ zB>UP2q9gmr7T&d8YPy(S)n;d+WB4=<(gg(Flw*nXcBj@aeOUqV#Xp6?Gobq`<y7=} z&^?#4MMWvOGDCCw{YsIb%<aJY$ci{z{QUo5>Z}5?>bhu+AfV(&hjcg6Dc!AfcXxM4 zNl15tbW1l#cXvy7cc0~dF3!2|R`$DNtvSbd##}I%;XARxK|Thae6l>E_{FImfAnke zNk4SY*dkMSKa^|g^MeW<X2908b?xs^3im8`cb=iSUEy@sbe%`84%sFW4xE@7s0@Y! zO1mtr#tW$%(FJ#E6**U%^4ghk5Pro`x_A2;-CWGTNj}~e<cgDn(8g1sl`Y`{fMZmW z66)5P5g*kr_a~op;gOJDJ6!F*c+WZoj!gW+fhysndCA_T5BEn37pnA(5`UZ<o%%)p z1)tBR@d?=4<xyJvzuld~r+7FqZCswVQ17YaWymu4qSnGj=;$yQK8_YX^e3bPw_)IT za5PQMevzTLQe<Oe$FNT-i_aK1mNyA>+!~*s=54Z~cXsISog;S)yDL@+dDDiYbk!XO zq)16moDso9W5Y<VF1tT!@9kLyR3@>ZiE3Fr0+Q4njF{4nXLZP`KAGQ|rW#g(8Y0;r ztVIPA4xK)MgREYJgN5#UeCk4Dw>O5I%YYuC;Z5O8K5^4H{L7)t=YltSCIhLTa+44| zzK4J}bAomW3Az7)7rKYV_CCsnO3OUijA{)?X^}~Sq<3@HD}ijtn_~j`B3;S0$iXl7 z%)dBbf+(;fPMIsD`&oJY4LA`U_Fa^Jev)VTyg5)G{*@|z0#>{ImH*q{fO@Xs1XpdC zR#YjUg*4XJ0muG%RUpi;I{ne~R@Ol($zG-`)9%R0_4PDVQ|sTLyPH&XB6mCSed7uo zIa(f9_h9;9@FLfyGK|BTjIf<b+56hA4q>e@FwJ~d<=1HjtaT&lkDSpYsz*w_y=8ov zMoupmhI9lK@8d1phDs}qrqBtp5F@vp9;I?7qj;k){pWd~Wco~RW&@s6v*g?G8hLUG z5_+)O&VMmi#81xZ{Qri{+Z41PKCx{@q3YEE%Tfu=!L;eIPy1A%{Hm;OiWB$ggnrK= zDgEe}ssXdIOsb5@27mPggrHXDtz8TMeHsEx!rX+XCPJ+sFpF)B0~6UtqkoGuUL?$4 zW^0)7Ifq@hK0cJ_v~{6wGShfua~Yj>=aONHgRMVff3p}tuSyNGpLq1g+)8<iqJ*bd z)~qT@iZb~4<jF2PpzHQr+tX;DZ>(VAIR2l{(`p8mjyYIp&_EW$o8674q>p4>qJbLG zU^B0R^{Aq-a_Q(Qr(4G3sei>Rs`Cbe&-ugV%mkGHA~BCXe{~T7ZZ_d9MbpL%w#3kz zb*TR`e^wuCv3i>k_2^~xhN=Ov{X3mRj_&T8MU;MAj(3^I^JR)PN$rOcc6N4!XT0vp z9Jh8fqnMBC-fWKw7G>_WL$QQErisq5Q2T4KB|N{f`Mz78k6LZW(mQPh#gq$E8SO#o z(%Zm_YxkITq#e`at_e4mpFK1RM^DkL5LWDV!{}&G6fMbRHsTW6NkQ>ADYJw|GwAG$ zRl_3SM8T~ZMBVcH+T2G$M>957@I<z<_!xIVHm3OoX1GrsT+dSWRUVR+ytZr(9~xb6 zfv0|_nR`&1Evl=`PTOwE-chrKJ!gE45r25=wF4a)%b^0w0n}>~LYOwe6(sj>sOk(H z&*E{DRH{d2bIDWO9NOHb%qep#B&ViOE|jc;GmnXhm-br{@p;A52o79{n0un79FNCD z#EyiOi~2a_&g3}%X)X!0z&PbLebnnek5Q({Mb7VQ<MDB(ZgaT2V0ER%W+<r4i;2mT z=JfcvB_l9F5zKQ83v_V|luebHS4#pJB*dVXAJA+){ZD#fJe6sR7B_~-h5q;^|J>`J z8adGgh$R~LX?4G3NJrxIbTD}AOtnHOFRWA@8yP5|mRLQ25LNx+wAs6~9Q6CD>TG=w z0|`mi>#?K)7(A4fhjL^W`$&hhg<_2c<mhJwq~dr*(<RfBG)kGtA>bPLuxBmgespdF zv??2s8-3i_u|_FmiMJu{gI-G}imJY|I!=Ejf9S&bI4+<(d;4&5N)4cdZBcBOxg521 zV1O|4cl7uW6i{Y9d&K&o4UQ$Nzx5hp+ou}pt9jc(Y7|9-gtgTGhewwDoK^apL}&$8 zT?;P-58=b-6dBa~Tb`?0$VwE-E*){K`RVLj6deC~GA=`k<<?&v#72}by$;;*8g1hL zsbf4@4e?SUw&-hnLmM|1C`*3X=!LU(OnX8aX^w5TXcKKl2F)zqNteJ`Oe?lG?+wYM z<$HT%i}~^zHv*wE4BTw6gXOAIiKDsAgpwBoHWm;3%2g+58^w{9&$Ukv2SDjL)r;`2 zp%I*s2#dP3VTjzx>kj&_38QdypDOYy-(T$sL(e*F{36v^u5=ukcX=0%w}}*;K=I-w z8Q*IVYZ?u+fFR$eTx<Ju{~bB3lLB;fdmno83JC=_DY#are2fM$m@nF_5eMCtvFl-t zAwKUaShTkpuB0HqxFuN3+ZJim79BRM(|<ZFwaG3m&u>z6Mnpt%b1!#2>)KHUcEi?N z2#)}ak%xPH6b?MJ4%xgHnnXc&iN<f~C(O3ae-b5Psz{-18WKK5g4!A1Wu8%Olp@hr z3v;!a<nN@RmT*~7kB4<!C%YrljQkrA;}Bp?SZw!Uvz%uS3}z1w`X^4UW<RWOH6!#h zF^*5niM3n}J^Rmp*gTvmdrd22<#OA<No$l>ly4QNaT3aB8{ter>chcJTp&^oz${;G z4GMI*I|#=JQnaH@lktjLeEbumNw{n5=W1s)PCq$O`sicH>O@HQDUPETpEr-5ZMGM| zlJTBj*7;n9l{MPA|NY8`%~<Ru^z8ozgl?FtMQr{7J^^E2_HvEa3YBvZIg^Dlrt@er zBrCBPbUT?nFZC1*`c20cW!zkN_M$n-rUoQtRO3C}+5V>$WWL$S8s~@O%rO*kX)#xv z0=AgjW?#tIhM|}pl>Kn&<bql_V8J(H2WAi`b{Lf>>l~a>F*J4qKJ*T~+nsR+Nc6-$ zqF92|=O@+bYlj|*{%aQjst9Ih<f|Unurmd)J&2WK-Xv^II9z-amI(32chKto4O)#D zh!3T&4%^{@u(I8307mF3`Dkz4dA>)(%;k1Xb(|%?B@D%SbuG<0Oi5K9H<hhcYP0<* zg2LO<vbRUli0wL_I&#I-$&sP8C{Uc;-1|NC2`m!lSp+EhXQY$}SFp>2ULV6*^z<I~ znYu7&EmbP(t%@q!Wg4&}cHZS?2M!w;;5~m!8&4;Hx4%2y5B|6^0y9p;Zr*OJ!Y{?{ zP~S;V+SiU0N;29OWKI#w4`(wLl$P%xzQrhEftqnE*4Nc9@uUqc>5t)*3XlD>OzE&6 z!S|STFEhi-f<s6SUpry%8&RsO%YoK3UElu7Ag73kvNi7kW;D-nc+!xFXkHHy3Rp^6 zm>7lCUx6?m4reL2XadKDNvYMnW&!3o8cDBplO$Ow{=|t6;9ctFw9K|^90i~U7Pe!7 zzg5khVoX~Svocaa;QX1qAa89IE);&h^bwyd-(<Bwps;c2aA$Z>?=q)bO^}%3BmD;G zwto9E=i@D9yYI0~(rIrWU%}B-30TIA8Ok96ZtYmT!<r}9#hxmXGWJ6iOJWw0BBi~( zoHrxFfFGI5)-elCQDr)O?5gege^eXRj8hq#{>D|idBokmJxJ7>9@u2Dkz6Gdc(MWP zA3Q3}QYuu;C=@|`@_7kx3;9VL9R=pWBLQo_wkRj~BCnGB@JQU7qaw8j0PR2e-;kfY z;$qqP2ZOHfKllw{oYlAGv)(<O*%nncNAi+GTM(QgzmAcp%4pC7<d)>a34SV+U|Hn$ ztM_KY%e2x0qpd{%%svo#%i-uX3XZTN3Y0l6JDmWUCVeC!Ey&^<bI;OXljDu|PNnT< z&)WJu*?bM5cK`Rs!weVo@)|4VI;0Z+4x4RZ+wkw6C>b9(N|c=T0>Bzmq1fUBH5lH^ zGZR|T1k|>Qrrk5&->E`cKM(m6)nfPYfwcRncK;iD>W=i}K4M2ExnMUi5&><TSH<a) z9_*6T+n?)wJhq0-&YRH$fA<Fs@Z&k{ha!}3F87>P^51lnOIs4q3g=YCf_{DJSN|G= zrd?02k)%V{mkMW(lg(T6=oVY2q^wL4XCBXGwfoYFTPwp6UE;JA#S04sgC}FIY$i!o zWxXtE=4wl5EQhqzANi*Sq7EWz*XoZIKtidY)+poF4Hm0udv|25Jpv{X!^0GhXhF)9 ztbcLAUT*I}9k8Q~4i^cuYU;!c!bj!H3MI6r&(BM(ejyZ$iN(%lDW{V}%E*Y)WO6f< z)8O2(k0<SijMXY0e+2dcRdp<?lYmVS)*lQT)Yi5=SP@M<MZOiDiVzG?U%<U>zWyD@ zVO^-s(QlD>k^*DDGb+iO-KX(*&ndOg0vi#OI~Ymg0`|r_U-_=y4_$_6u@2Awv5bE@ z4uO(pXo@Z6zy{k4$WAm1h^cCZ-&Vmd6DIvZQ|Dz2<Y0!twVzQvb7ZWf2wj!9>;9#t z(^)kkUSzJ!?5_CBu;1;qThO4&`;k41Te-oR7O)aP8~z7NGUMcI@aWP}qXtZ-XUi&U z{k*~0gxpU{J7DIpmPNeAeZGtN7++X<IKiwd87Z&=(g)Zq=YmYwb3_T3g)+n_eH1b? z4fVgglNt744Bxab&N(ZPvKYACr`T+U4w;DnvMzmfINw?_rz1GYQC*UxHK^a%pbT&{ z@Fu$eR-N^cHl%dv=97Z1GxSBoCnM&~J>B$LiTPLQZ~g!uG)xF;gxEZqAAI7pWIqNJ zq7fuHl~{2v5t#~6L0;x=6HnqmKvZ)u%-R41>XP?uCBS}9y2;FWQFuR`)wza!X>*Q{ z1*Z20Gn!OHO1jj#Qy1c6yH7jqJUH5^ou_-!Nd$H;FUtA(zjHC*07#VGeh3F#!<=CA zCa*=w@LCd<xW;eSgaTM`Bq55V$@0798VoUa_VX;Lo#r>AkgVZ#Ap`$SH0CxqO2}&| ze(eMuNuY~vd)HzBBNx`E({}&D^Sxtw1k-9q2AsbQEbV!TftV?7tPvG<#TH+$*ZRyL zTf#2Tlqz*%O3c@ucWZjg1u-#t@wpKIC_Xti6HV?$(3a5vD>y|FiHqn;?EQ#tN#9dU z9Gb=JA*??)JO3%7pfjh3mZ!e<9lfFGZ9i&KJt&30j$<18ylb)Lk8L)%!gSg)f~gz( z+w=t{vnxYCE}i^Wowm^*{suS-LiuI4N`N8-2X}-sTH<*oPew<9%?Rj(!bZw6bi>o7 zz`m$Y;=mK}zES^Uqfn(pudzLouYpb=ce;5eT8Yw=f}-0dRZt4(sF!1@>gFL!PdZjH zGaSp?0hxju*MYy1mD&6L7Mt#%A1UCoO|}ikF_6Oj^ZN4EK8DYN$vprbO|Vk_@@=Eh zV8RNz+!Mq=j@xM{S!SD!!p)&FunR8p$V@rtSZ-u`w+9tUB~I5}Pj!5)=}&GfEkBF> zx7qW-CqsBMB6)t-ilwpwlHAXv$|pkq^Q#Nfr;(!;mP|&A08&s6O--C`hFF>rYStWb zhn9ALH2eXH`iyEMEvi#9fK@bd{zH7qFIu$1H615P;_+lE(s}+77o02*eJj>cF~+QJ ztFE0eVlFhi02w6qHXVwkr~l?HDeJ(7XAXL{C0$JXh}$ZBhq}`z`maXH$G<NCB0Hm+ zMHDn0PihvG>CGnmdBbc8AftIwV))QpP%ywtg^`6tihgD;eRKKlPapA<Y|=`LJQ8j* zxK^uGq@Zb!(eLH@(!|W~F}UYog;|S*g|)%lXC({4CDV(yTsD^@MF!Mjl1bCUnlULs zw^b;>?E16Yt)g9`-Z0i{GkVCZx3aM}Xf@Ssz%k%q6S0QXor#&*zQK@dxa9mj?ZDwv zT5EvmSZt41P7dfcWW-3d)9Av(9l!fq&zNyS!Nxd^9~^+^`>{BkD||$Lwej5(@W3Y} zWX&+sNX%63Psp|cfoouXBetJ0`&<)TCVqQVX;L-8SO2%ck&JXZ(fqA3GX!Y%`)%~W zyQ92#<J#`@$SzVA`7f^IpO+B1ym6Q2Qaj$>(UY~~>Mypxj+AU}UVhDeP%Lc9Z2z{q zJ%NCdEu)odHQjD{(tM*9KrHt|g(}be$Ia;I#Kg4T7Hch$fuhbwasojk`ek4iP{e&a z>@I<Z-%tnN^CZBhLNJ!j*uOwo7RqF7d6cpNmouB-FB|GvhOS&&Ym6vKnBU4FM$i5; zn?yFURc^o6Npy(NS0<ZQ0O`A}YRT(Pk`+2@);G#5sw5=Vx5P=3sYMZwiC#51CbIn= zJf^5_wovu&4B3E8CQ6yUJ~7!uspSYpBt&%Jx-OP9yR+Y7a&2{PN|fA;iqNs|b0=kB zriMz?8dP^<dQu}f^VR%?o7W?K&ZWwFDG&y~P-3%H0Kzp3KyNahvM^WrA}SU<9B;jk zcmen(7P|Qg!!N;{SkE{t+57ct?NCogHdsQR02PBi+J)`v7{q$IpO6H)p#Rhr-TzRb zO8D;5?VII#m-UXrqWu|YDX4H5)cFk@jB=5>dxx=m(s6T6Euw96oNl%ND&AJbW1CzJ zMA(kqbWjez##1|;9vePN{R74R7*wT8=z^SB2uI_a9o7{LmTm;mL8j@*9}fh3l3K`j zAbzz~Y-`Q-L+57@JC&**DdkTGl2BNaGZbtbWi9y<S08e))wnUtN+$~aKtC}IB8CqQ z3tRAySk}6P(Prd>5=h5f)873!i;j1E`_cL4W<{SLe1?w~hL1FyocC{Qz3K>>H7@is zpCa@<waVPO9ZfymyUUA*hkmmQrw8p$7n<|DKFaR*=IDotrQ;c4#tqiqd}YG!01Ofx zpSc29SgW2MP%FpYULEs4C*N*5;SJugx)0hL`|ur>GJKo;#rfZ`x_3=>Q^e2PJiFA! zh@X9m2JY9VtkM+&Bil$gODAYUXsBkc)!r<yqTe&*a=*xN`xu)k{`P+Ck}a0fvV-)O z>JQd#sREY+4d^?1eIM0Tq8u#YT)T_ZFNb2e=8Lmhv96q)iS-87<5@MlZ4$Ol>pr#P zs?2=%ObfT?U9uIaKL!pTY2wzWXsJA2AO899rJ4gmUDL%FPQ=7eb}&dJJ|b;T6B)PV zZxEbQ|Dj&8!HJCSfI~!dO@!W{U9d4L*o7|lQS4Xo_&dqr-8Glss~H?7^pe!ELL1pr z!{DX@t}fXn^5G%~N)*ik!Yu3}g1r@v5IWL5K1S(Ds2OC47#Dx0mu!eR{kld*X-@d& z`OW?zxO6QSNcY!q2f&*AJ^eqoqB1a6FbAR6G@93o%>6uiXHwIP&Hp%!13<LK-`QBk zT9SP|K^l^5=3)M!kc*BY;5*PCLyv+4lTl0soSxsKtAZlz_ZwgxY6Stt-zU<2d;FcI zE*GibPXM+jr*a8NRkh|=Rv{{U+<<GEx2j@i9?Ki&G30>|cHFzfdsR$tXhKgL<63h? zBh$2NkL8T@gzJR%rW6zASrz3b3u0StkD1L;e<Gw+{Ld*g6e*5=d>-!!lTs-Qk$M~^ zm|bkBG!p`Z2BjL*O_^u7p?Lp&awJu}ZA&_O@3&6l9p55cJ2SB$qZ%Ems_GH2@lumj z$xn+a!Hxx@WG0sdO8NN~a!=bCyi8vk4=W3Vf8gj`Y|uSQ;n_#fac8nE2f;VhH#dKY z()9i^XB9#Ug@GkI0GZ)YEH&>4pMqz^F#xXNhce?8GvoI2l}Bc$8ECNpMHTmB=ctf| zLGZ~7C5R67_19iURO*#Bmu?gIV%5+scMp<e9qIrGAXr19N(5u?O!j?vTUPm%SrJn@ zw$&_1sJ=n|<PmXatIyk|XYk97^3L%hnb6E^X~he-D*ZE}P0hm$b=l&7;spS7W99;C z)<Q>;_+@njSA1Ap08-a**zQ{j3kobhHF?fz-BO8YxP;kVPPdlZ^E&4H6Y>C6c-0KM zlWJ>coNN|sV8Nfu5`FvxDT?9(k{U*w$DjX~FAHs-^*YtMA(Yk=Pstkp#DsdIOt}Q> z;&C?_E&{GYnvg%3hn|oHQ&pK13BHzX0*y@P%Q(r#mMvCI4kCBrfbcLU(hMn5J$UIW z2d4_zaX(@nVkT9JmIrm};r%|vTsVJCd8+U(WRHC}OFvY!`DiNYoG|M0!5QR!Dlt9` z7}M#<h?_V$I|CiLsFItQ+dY<(g8sF8XWcAU3Oe8aebM+(-y@>E%#5+IQTt$FWsWSd zikW#BW_uAL{gy(y{FY+q4N;cT8IT+QQ)P{08lbNoH<k3hg)E!*eDTij>7{Hhr-gEY z$$e`l)5*<9f>L_9^<3?fH5%v|PD5IzsjdOG4QOU&)GI(_&~1v(Ya5Bt+0(x_;!~B6 zFkT$M=W{~lo?noU*9S_1+0CY^SXslNs(E7H_dVM<D&a=`R2QV}#=nIc#A-5&K@o28 zjbwYve0Nm7<gmDNHUsu^1v4S{xQv^G)b0)WhtO$XzkLzUk?+A7EkFqp@Scsiz3$Je zImYy6m@QS^_IbK>+}QaOawS9oD;`1dUBtlP?^b$EN}?oH&*W!ZS>JU!KiC;lO&Q7Z zcqK;id^}x#P(H76I|<z@eOX!9ZaYOvW*}x--?5zoY>AQ7!y`}SHB3K^o>)X*-Zc1~ z5?gEDc{Qyj<xjP`7;%F`cfeDtN)*PcSfys5c<jik{F-kOTkQEh7KaM=2*zH3)uVgG zQ3UF4JwZTq2m}slMiv`!g@o-TyZYU{wrQ}-*E{a;WXU*#5Y$}Q<{dqc|Ezul1qOZ8 zK%Ld8N*IW;#}uV?`v#T>WJdqxL(bpXBu_#X`_4&S+o9NEgMX|mR~g7|_9%%^wmmU0 z+x$^{`mbaJZ#0QYw7DQypKx7kflO694!eY(Yd<&zrB@~UBQqOe9|qLukAJ}tusI4w zCNX79P_Ru24SwzULAyv#PBx_P_1jlBA`pn;0xmAjFH9YU62lp3CYd8E!i@h3n1A(U z;pJ5=Bo&Slhm(qX9MC%E7=_|vcdK6cl4*Y|`!Pe<D|gRXufnkjcq>FNe@U7xm9&}r z;#n0!5*fhU;dkxo_3{%}wp;`nQ322eW-Z{qmUmawT#x2-GxF6M%W>3+c)CLio$aro zXTvy|jw!Wt`JMv<%jXpLp!jLfZ<k#b#Dc|%g7HBu8~ne}{eEUA-1gugD?#?hqz57- zVZgbj;62~*FYp8OZRsCSGeI{dq?2&}R8BVaTJR)Ff$BD+)?iP1Q=r)95p<igkNauw zwH~Xi_9?g}-nw)cqDiCS)@8#rE!QJi_-EG`Aj_ERA|EsZV3fKmYt2c7C}&lx@7>() z-1#Hzx}6ym2pV5s6G1Ac$~T1-cR7PNPJ*C{x?j>M+cE_kc_k%;*80A$m2AU~_u>l} zD>*Bj6jQPCmv{mp#~b4HLUH}&30tP8#5KuF9xyJY6??#-i5<fDK4CGvuTS|`4-U`h zvfw9;@@gVIaCUy12MJAmS*dGzIOZy3FJr4b$zn5#v|9JM^BOgeC*BB4P}?Go^kb&{ zA%g^t9-6U$9)&aWYhT5i-K-#e8ymhUqrr8(7Q-AQFi@hRF&!hxS%nfiz)f3eL(7>b z%xc2@iS~Od<%zDMwi)64L)ain2oJ$v1$wt2g>8wxtJ%(Y2hg;D#|~0eak2N)rrGU~ zK=WT-{&DY?l+d)7hO{b~it&N=OAm_KhmXWDwon}1uc2fFwSwT)&QVW~5w^#3^ICr| zMiI}}CEli{#bm?#@#J+{DPW{L&S^L<wvdre<nl{z)#_daC}4ww$z6tS$4Zhwasu21 zw|DP=uez|&I;jebs7PJk8CAdSPGProS_)a0y$|$&%dtab+x+jvBj9`RtBvO?9v?_& z0m%!nH?=<%`DEh`Iy@`?e!PVX8>_S-mz9@Abe1U6_&rf%zs@wMO8fe1vZeU@=N|&< zD=jhI)q#>sU%t|V(V--YCfrAZ`5NpS@_#`~;{;LN;zcXDw|7OAI%$r~sOI*MwLGc; zu}^oQ19<%Jx*<qzMZv&<Rwo!l_5-ICF)mgCKsu2t15H6LY)ntfDU@vY6bn^Ve+<9a zq{{4a`d?qbbrQ*5T)xU<|8c=+sFSRr*&fJzq2kkzR^i`iHUZ2Fpggbi|M6vZiXcxE zLRwLGM0-`v7I<8yQ;mL;P*EH@+k)JBpybj_50ZP!=_5iZS#P+4$FQ>DlBD?)i}~cL z4ij{85#LI)a5Isj92PRkxMu)HVK6;$N=$6CP-w~R;nX!{_jv%C1OC7S00m^<pAI5I zH#2l0UV=c@p<aGHcw*wPH#~<)IU)WRI4Z3P@~rXiJeL~mob{Sex(>Uopd!(&f0+qB zZy-o?7Yf(#TnfPbgL5n=naAX$(@c6^joeZJ7CtySyl2eBL>IMYbozIO`i^Fsd-ZBE zPEw*l)&^^;oR*o0x9PbMjS>9%i)EaSYYQ+()yZxK&j##3&(w;*QLlKp<G<fO?wX~U z03fL4d=;e9?oJE@Te}bV@fuK7@Ia(o&aFDQA+P&p7SO(qyIL@rYpmsWh-v&!wUOD& z7@s+mB*QCmGdH`NYjIueN2+dY#8-TM&ojbxHMKe<plb9741oaM#)_D`dWO}-PWnF! zhXkUh={iA$DEn*B4L$w6AHYX0&?IofpYA4cL$rzXf%yO;;N3oItnf?O{FQq->RQ2@ zxaI&6JXZt7gdS_Gd1pbl`2MD`du)pvi8AA>;r5WDUSQhdEEN==taKU-LPD?WK1{R4 zhAlWw4t!mQrI8_Wf!(FrfHj!&jNf(K8?ZW9aW{kOL4wl-b4Tz*rm6gv3eAsyg&$2a zSM)em{1ZdZjesUrt0^wZwp>`r!|7{LT51UMlc<!PU0gEWCW(1V+86@Sx8FRP=TesK zcxm+J?gyk6h-$hE`D-)haHh7CbhGVB&`nX^%4lV(&U$cW9uYC(UfiB-ePr*182)fo zn_mz+DCp}O*9mb3JyQyXm=rm~)cy>&=dTRz!_WWNBJ0s+*DHnk)n!5tF=}t=Zq4cM zpMnF+RhL<qg#Vl99ql)C68MCulIp(n(d4VFnBj8xHONeWF)Z2G^RU*S>SeK2>!17w z?N6B>E{{i^ib)>#Wok+!R`@|tBcVbEsW<`o#(>uEv&_HJL~wCT`*+8dIdv<Rr42^5 zx>hV;Kv+%hKo)U+7lG7YcQ2aEm{jcWP}`*^maG|{+3Ea{)~3ZGV8}1>eOkslK8cCk zSn!Y!^Gn7vRZ2NjLYB;!?RoeOBE&G!y0h3bK*EFPs1#Juu>vlu9-i6)R_5J6;GR6^ zJGWhrZakK%S{)TqWQt{a|D_q7<ma69#0@Em(B&n9*fiMQ&%cpX<4!U&gbo@ly*9ol zU~>A*LKET|(Oy>vq8F$^wwFc$BAc<UKppX7b)#FU6Ib}@`Do?p{R|h@4{Y-swTBdY z)bb6mh=COyTGJW+!Qnjao5Gn(6Hl82S-V3%pk37n+GtHjT{OK#4MfrmKTN-`9zj!A zlF#^0Wp$u3uBaf>O|Ufe2eeCllq3MW@x|!k(w}h!lZ7(ljRvcb5E)vL);g=45^y$S z{lavBgh5cNYDXt)|Esh#08&6(Ai@F*K}(@dZzENgy^FrG{h$D<Mmy$Rc3Z<21|0NM zg~cE)d<8|t$c_P&5Kr6ioJX4WGW*R*RxxP@&9v=TDAb~r=~9E|_W-fCR!)GzO=Lo6 z)UEFissBN{1c0Sfb)S<HA@017B<U(_tgEfwP^WCCi_${0l{yi!5M9_{76&=kTz8kA z?{K$)8%nljn2Ejh40m_gG|qWh4pVtTv^fz#Tjx1HylL$i2=C+ab>yj@`B>U?z4RqD z9sIEZAN8DgFHsZA13i$lR{1spxvb<-M_Xq0BHB?|X?Yv^fqo2XYLL!F%*g>kL2-6E z!wI$2o8^F%w}Y0ZE&>z#o3m9_m@Q3wW7gDtf2U@*#Ymerh29v9=}aB$dPsekT#Zqt zLS!(U<Pbq@J%dc@8?Jm{qP=^b)GEjdoHvRSO63oG#Wytp4hOe;9b|lj*Ee>N75~bC zex~W<-!(#5zvr=W<<In~RaIb3P{#CDR-wEyP|>Yxli<LKh_qD;rg01}6t`jM=JzHo zO~p(eMGlYXLsr7)s3|>Y-C!)#3Bz#FR8r%zWM3%UnKCYWLxG9z?E`sCKL|5<#U>J} zHy@rY{7y{_{a+2VU;hOYfA9gfZK;w>CwsTn7)W*4dEc-O1QBpsH|L2OM*%&!a;vVX z4Ku<WXV29Zdq{g&R(E1Q2o^{)H6GPnQYh@XbT9#+s1eTR+heHDBD_uwcyGK;{-sc) z5GTN7BxlxMr|}PH3EfL|U^>CN&%)ckRM)d6Ax5tH3anf}x{Ajzsl!1LU%CIl?qnLj zx0tY55ihae`qE(@2bKGE(LndKWw&=@f6~q<U?rWqT4}2GZWrj0!#mb-+qTRPp0Cu~ z8hX*^Kj#cSu$U-ZAn%~vuCF(H@9wgg()y+hUfgT}-&gBKRke$pE3&;ry)E_OzxSZq zSJDa+tKy^87y>WoQ*2TA*)SYW>ra>_FnTI!WWH615WA;O+cQ6Qbvy~ZeiJofO<-9a zHfrIgT84}dJfaHPby474bUBAD2)r#+RIgb*XBDs?FClsxwW%G8xKbvw+)agKZJffK z%6-OOZJ4%z$N6Iu4S*KTTf4)3kgc@An5aWVAmT=`Q9>yc1VgWWzrD_#u&6Ss)3~22 zbZ>!T1Lz2?eh@`u8A7@^M$D-V+M^qvZ*w;Wca*g7Lw20(MT(kaS+>XqIp4r|Djvct z?|S^Yw-<3OqI&E8RKhCi>LMyCb3k5om7?g*Nwj4|h~aTM^N@re7TeM&B_{?n7Xaq@ zrn3`tEj${QL-E1U|EbITY+uX~51hf<oP1pNU$wL3$xLj%B6S&I?TJLVCJkX!lmjQu zs5qQuKJ-3^rep<BY)L>Sg_Y)h)Wu9yD`$CjCe3<1X~$;orjI0H2^UeiJ(4Hq_FpI& z%HJCNfz<s96#490Fi}9brjasfiq<^BmGKOU9(tcjK@n)ZIgn?0bpqbsVdBKZ{0SUu z)BNEX_P3@jx6m3Zg>rhzbzLln{dC7oR>q2fQRUKFd^u^zJ*ov96;88+ILp$K0lWW_ zj?f=V05Py(0jyqQF|F?mzh*`6NHV_{aAWu9n5uy*925<r$gT1kQH$l@zc4JjMfs#} zrZ~}SV1X%}&vwmD`9@!4BRbqj?}T&Hke2(6Q#R{#et2^e*X3kaK4VVZG9pWXuvYf* zI;CRrRsTP5UfA_F`G{0uZHv{F+*x1<-Af+$t$qY!jdW0Aur!zSl7dn|)sr!|BrNW? zvty0%kyz`YP;c!S`L$9kw<^%wxJu1sUiG~BJM~}anYjgCj(2J%u0}WsV&Fy9b)?xJ zn#4W>{GX@;qT#LupEI15a@{#c*%its;FZL)hn%;IV9p8?zv<heR+QM8W-B(`x)8^| z|8H58O&j-QvY{TRd$`?Qpmd+WU8_!r!dC_Em=mhAv$IQ61}K9zn0L!~<z9qWo;Q{Z zlA+;794pLTGE{Yz4Z-3B%||t4G~}t687~52$=AV<Vt4v+z5N`4$AR1@N8{`Np?)Ly zEHyuIu5XQlw?e%b?R}#>+$+t>`59^x&WQ~}Rh8wvu5Z`RFia}0+M5kF=6D$`Ro!(4 z@zT<&C2^~F*JIg!p^^9j-na&?@~odmH+Ri$`k=9@fj)CmRcec=HC|HkU!C(;=TCXx z+`l<&Www#YhH?#bYnHQl$bk7GgWci?*Ol~2ugomV!*?yR<9}TmWt3NK@+;{;ZL*&$ z%b9vBt4GGtAiN~Lkexh<f7N$;31feA^HBlU<#aOwyZEKC9MAf>1dPZ!Ppn&OH9vY) z{TpDA+IB6LI2->_cZMCn=H-sq@NH^<2fK*i@<2cG>N!-yOfz%iZPK`VQK|MStCb5& z6kK9`EZ#W450JTCPdJ~Cc(zPY-jUUw({KQ|e!l(N>rhG!m}$ggL9Zhq07@6oJJbo~ zob*X6ljomn{-At)H_s0^L9ep<X;oQ=n;@(Nu%-H$U`Zjx0d~=%)|vE&z;~+;i(v3Z zt_sob7X6lx;Bi}IX`5jp8W4jE;POM}-D#QAxuXQ44|gcA$W}*83}hrR@nz$d0F?)_ z&qx2Jy#=cW`~#~LenTPU{oN)Kn#B1D@O#paE8xSrX0<$%)1dV?qjy)WQ%U<pPhWoU zSFrO~HwVK_+%f`N{prjXSWQBXCaasOgtdrc{97HMy6Y76zA?|%b)i({eDj(EZFKgn z-xSHd(3}u#p-(>&n8XxzY}F<q(lB1IRol{ziq9i9r9rQ&-;y=)>8Irge73+FFGKC% zf3;$^*<ik0d}28k25y}ONHFU)fKdu+TtsvE9*fM(T-b7uz0dYsuwmCZZVai=?u2z? z5E@5jkhWusBX_kb&n1jA8o*dT5%rkfAO#+$`Yy^$gT}D08xRjc=*;pyLASUL!P?qN zw*$)?_U5xLWduXy<4`m6->33PC|Am3H;u=k3V4<XDPv6wi=%Q)5aCQLUp76e)q!Fk z4EPaQR{2-fTo>`~I_1Pe6Ljv=A<8kLH|%X#MW$w})x0FC`E@4)-vH7|wtBTx_wT}w zf7aGd>Ay$JV*F}x0Ed*h%u__9J*lB?TRV4mW?6ppfPw=_C80g5K?5R}xd;1SJD(qp zUF-hE#Eb4UY}aPulU#)@I|;iaZ|PSMu-LbZxcN9W2mJQ5Vpa`zfJ*?R2(kkmLivAK zCiL+9xW)y}vGD?<(9IzRy0Z)a`got<2?1`KJ`m~MqO$*K6MBCm39#m-?E3jL+$PBs zmw%uCR_k%nSsP1BhqM=1BAt}YfO!JQ+N2=#flhClHZ@=3K$>So&D`a(WbNE6!n=ke z4e4?fBa_fb5P<m|9gOH+S{IB2Xy=IgC1<vz<%AxK^Ke$Xp1i;Pc1*0|1e>uJqB*rQ zu+}U%2tb7^S12m2tW50?z{J|)3(gPt3`)GZuf7&l?k>5&)G%UqoIG)WHUNQ#^A_Q5 zRP`Hn8Mr@LOi*Q%k&VGOPzLn>0`(-58GKMrPE~6CMXMjCtjpQXo?&a}Kw6?*#?qX1 zC>`&so7?PJxLNh@1`W&e=+xQLURBZ=tK0tC#FF3twWqL>LHN9+{gI&9I&2JRPj#Y` zEg@qPr6iCIc)8=Cunl9;Ba%gtaG{~uca!T447K@HDdX`4#O8ZK!SM!%l&a>4wa$JV zsa3|_wh4~mBtW%!_5dB<AfBcq&wgDDaM!0N@35=j$PNPBza#<8yh-*df{PXo-J}-5 zfWAC|^glul%W@sTjJi1xAO&?4C*mc896e5*hOv&$)xq>^IM%dQN@4_y*>8~5q)%cj zm6GORfCRyq4{t4=(~|e1W<=+qYN{|GZTPJ}x%)zE!Pgg%NR7h57Br#lCD{DmxoN=s z1uzc>T>IZd$wI>cg}AYyuh(D@5Ku|aVcg&ME|8<JKrm<OK(T&P39Y-~0}~-UC<O5R zmET|9)UGu{_ZEZpLXV$BSfH?Jk}iaP;xM8K@*<RM4HRA(wTYGLmfCWaK=f}es*}mC zyM#|2PcPT0jz2lNi=4y#tk7s+4E6%>?E@L1T8AK4NV3|Yg)G|H+IvUgUsm+ddEOSe zBAre1@tQgwalsx92#G82gF1-GdWNcH!F2aW@>V_o_2g6<t;22WIx2if<)6WPShSok zXIZwRR6!Y-7oJwCOXo*^su_!pCf&=tnxy++s9^~*!Tad0Ga4^Kn<^q+IdfA7z$F6% zK~>wV0JrH|$fkQyBe_rtY^Z!1e2q0R=0Co=-%5p^#{2@LU|~UcL)ku*Bo5*0VXuJ( z>OG4I@aqcMt+2qXE<8s@;gl@f-svvkbf4J3jw`sxQCB}FbBZ`>-llXFbf9Q{HM>^9 zj5|2U3t+d4{u&VZen2$`E7VNS+FI7SO=-59mrISZlXdgMv<7XZ6vFH-Y~9>t$cpqq zLfIpOC4HNYvepU!D(xQNs^iO&`XkY{l|VlFSFtrERQ9czjc1`G>L42smx6+gVQ`6S zyk^X3ACV;Em#F)7|Fmq?kXAJIeeaSL$DCE{9|K}i_D*$y4+}OB(#ZaZ8j;PR4$KRz zKG2xPU0hw6dr?)e$ajd;5Z%scloQTqc#movZH5n3H-ifa5TwLJUXFY3Ycs9(<&+L; za~M}2%KL_>Blxr%Q*r9|iM=F<pt91jfWAwVxfPGkpd78f)*Jv~xsG?|eO##-SEZUy zXC&cput5~@Ga8CdV4sJTR$+XFvi!Jh`QJ#EJOwPHcJPb&E*=$l|0n1|0<u|ZEz5(j zYCLU^%IXrePh#hWN>Qhc#Vznn+JA>4Ko~<WbL{%kYXWeRr~*|z0$~LnOpSW|DR0eC zS&4x9@krL6<;V=7$pp+UO3m)nk8_6W9b)?Nt$6;6gh#3Kg@r|k?ssupZEJcJbP0}6 zm3?BVte_l0hEAv$Hj6EtWDYU3px>{`lzH%*yIe$RxVAV2`!Gl_-PO&3@p<PNbq(;7 z!R!g|_>W~#JC1yNu>oY4wWg(`TesFO3<a;YV->-CL*@86P%!5s#xHhphCU!9i$y?4 zBD49`?TVH9=o(3y`4g=Qc<sQU6L+q-|3)6gM4$X0pckTOR_=c|r$~*_p*?bXMO^O8 z7oq!&mJM6hBOpeO<TDP^<d+)^1MzMZdNnikg6o7CNhQ)-%4xk!xfnrIi-13{z1KI$ z9!ijv&+}P|kJsicENPP=qPPbzWG$y@YISI%SH~kpG~)khnw76JI?rkR>-x3bJEA!= z-W^E-v^QS`nfq45WH$d=YPj#*8^@>`REKFu1k4f=xFX8t#T8YPi-=Dts@d(C6>&is zmAqg&>$5(iy-J{O29<2#pb__7y8OJUV3u^n>ymMoSY0YuM3a?bLJg4yk~(7R-a6V? zzK54AZMl8HNV=Tu*Qv~GpP`e6W*U^Cr)N!KW}BMupJARxm)6by_0h%;o}sugN2tJ` zw!oigfVny##EPXGp_~0POIbJj)5H^ULjlUWcd$P<?p{{Ly-xX9Ivmfq{{4F+ecr;T zQR|9RVhV6h{PL^+2?86sq<L+SmLFYb-I7a3>N}^kHPpADsjr#=^y!eWT#uU8?Set8 z6NvN6TzmoP-5Zhk{b|hP-77*Vh2hQ=i!BX$Hx|>ks^s7V1CvZc)3@Jjr<;dW6~s;* zG7Bh6D4sE}1)<4B9*QpF+eu%_xagc*<|0_HyQ2nZ1%_=0x0*GlUa!`VNIp-qHJyv# z8NDmmu8X}ILjG|z|CFDttk1ImvD`gr$+$LaW;wXHn>eHJ?qzUe|ETz6$&|%(L+BzB zpSAlZzXS_gL!8?jn(VT!@#td+^A+=Y4YDI@iE)(6#{&O9OJ8KPCcmB~wLI(?U8a~k zI6d)?6dO@fH*aLpi<{BVL~HwD5+{EVca_fMQq<HOW;Je&4oSp@_@i5g3cn{%K+igQ zPS#9dD%oVLq}H&Pwb{xim6B$;U#TQS?Ae(A@rhQ{q~KIGu-9(a+l<y3O*xi0=bPT; z>3Jld042^-u_wuXN9&{FpY8?E)y8weF+C|sBdqKPg|XZg@*hZwN%2PLDxbkAIs+(6 zxDfZHD$EX75oO%I#%(Ng>7}3Ek|>Ko7Ujzuy6cMO<+YQrud*{O^Hqkc?1HYO%UR9{ z?^&90IiIkHAap){0_5~<wN!}=v6*{<P}^S-ylM8o3Y;CY8F13AtxgxjrsIMxlPNhz z;-yL@!$a{8LR?9-EsllUG$qWOY90^F?q{)v{b4?9lrGCE_tP*NZ|&onkBElDj+hL2 zh7G!=)1vn`l7aOw5U(XS3xwfqUgB7c0~g<hMxbJRB)i6=`X^;PU#W*SFB2Inm5ZHT zY4~-O6{3v|NgeE&lzm0H_-!}IhDK<gHE}5U$#pH7m_ow*kndJ$Dw#5F8!RFcKaL1Z zr^35x&bNtbYYd5C#5r;fFv<KODh|BE&0F_r=_j(bGeGz@_6+UMm37XaET_ye_9>TT zg#Hk*aV|Y{1<U*F{-n90Q8gAm8t&f%Oa%}9>+|ON(WVb0CyMDQ`hDkknM>qTd2z|m z>otpZBIgM2m9`}fp5yUx9UB|I#sWoAQ%2q=I@`PimATa2{RYQjx^(BQOy6x3^H^cW z%n<ZewfW+SF_wB~-_O3i4SBy8W-++>)_aJknOV-5B>4F5u=CD*8~cgcELSZ8oZfl} zE>bI=M)K~eO-4pCc^L18MIVr8!6}3&)=OlIO*Qv_JHOeURXgtG%~vS*_fFc%jnSI= zug_7<N{B%Gt(5UQOil(5MVj{uH5$9MJ~$^%v3|W7DfVJ9Uxsj*>&LGWbc(dMA4VZ5 zc0F+}K@B9EBFb)@)Fa-GGUcclN6RZB#bmLE$qQ4{g`#N<+jLs@KLl}K3MLU^cS1Z7 zrm%Ezaq~!!k=q1I5D?2FBjWN4sH@-8RH-SdtC!kbe5u~C;MR6SGL4OH1ozYV_*p%F z=)tR9h-jazYwB$$5=S~;4C6>eIx1o}>2rYR7!Ru9Wx`P{<Utxkb0eBcnl0IGe4UI@ z9k=82d(<Yotv)zkUv(*(W;EQr!&$R<E-oWOsYrZUJFO&Z9@V?-VlEi-kp)l0*nk{C znv2Wkexm$5zMp~~*tJVbOwN;XkkcX(HsH2sbUt~i6F#rZ%w+n8UFsOSxKLiGDx;t@ zi_>ncS(tZr4$&EGiYyX_Cs6bBW~Y-Br!$BaP^wCQ>i+!Y0|Mn~n&JEUdT=Z_9hiUf zxNOTNDS0^c%@A?aFxCvPpg)9R63~Zrn_^c`JR6OnkSz8;uWeJiODBf89#eJLRdG|) zj}aLci~PFfkU*C7s<&CugfA5M=?M?<tbDY9He&5zG0so!vP@y`dPepdHsneZE23Fn zzh9(KAIJ-{^Q`OE>spfDp^>Aro$;sEZQYlp=D|fmQ@h-=uX>K@iG}BM*_PwhEa>Wy z>icNF5y3!I3`bFDlxiq>#<Y`p-nYy29V~{BhO>bukB?_<gCi3CH-ut{4I`;s(v23% zldn)1@7_5eC0Qj8hWyT{@a%mXqsT3L2k|<DPM~PD)`jjE^eMfk!sc=CI&gMw=C`=U zS7P#(Y5(uT0aGH3l~;vUz88!irJM^tF-hf?8>jYshSohoCu+&}L`Oqc+B{IdpAJrc zfOq;rjq90pvouhK!*Yd>*Tdry|8TD&E?yegr4ezkprM^hUDXJdmh0`xpidmTUVK?k zD&3gzSAF}(O;>Pp<+NNbt;}>XDM_YM+%sF1_O@KucbE|Ow4_7{#a^2Z4cewGUtSc0 zzQxpPlYUpcUHil8`~BbnOwzP$eiyQyw(?9#Hh+rQzFowkIxM$(I?`>Q`Ew9QsW9MV z!^|)!Z-NFLj;{l7l%YvUX43^Lj93Q*O9(8s3r^|?dmV4zPwA6OEe|RSOVsF$<>bms zpsv@;luI!n1&t*nE@E<_OXolAdUaKKv~|8Eb8Td-Ft-0^y{O@`E8}dH-rU%z_+==3 z8)F)p9dc_862jLQff<grjD6kBRGbQ96O8SS)HoGPS8jJDveFdDXGt&s2e+j)z3uP_ zQGDxk<&!*=%i8;4Pqr)9{0DuGr@K15ba^PENXaODfG;K#wW)F2yDgCa#M?z%pd6+^ zf46l|(E-bwe5p1?23MVp*(&PRJ4J;euCP$LQY(L$4lG2^2h%LL&llYz0HfTY*JQ9? zS3cdNl$M-SQg*(Cw;By<adIwi3$eF-=hwjundRQs_-HzT!178o3ck=t$Ci)!5s_fX z>p_*AsGZ|2e^NBZ?=dZJUk3GDQ5GwFtFO@7=_A6yoPy>p-nQjpxu|fZxw*q$Ue2T7 zpqzQOTY?LX?gGn!2^q_ybZB^Z-z5d`o}i$U?b$6+Wq#6DVhas5HXRSsUUlfu7^%rz zP(vu9`}7H%{f<t^tA>J|_xIwzre6e7b%_i#&9%SWdKI9+R`{d8i~4h6-qM8bPSPxb z4k3hogj`A#a)Oi62%G8NbXAi~IBAKjrG5oMw9=62X-EE%QX|9PZ&SHeA!_qslHb7T z={_6&M)Rl7XDV=3d^X3kX{RU4%Ud-k$8dApn1tMU;kYrW1;u4ni}M)hN>w%q9-de> zcE1#vzVn@CHQGiFzK+Q4owl}ucSL)OiC)Kz%|L-|soH{k=lcl$-D9HOj4=ebop6=5 zO))g_xR0eDY$mbi|NCI+R5XxVUAcW93VZq>?Zj?ak<L&^;`ireAU-v}gMu0Lq`mV+ zQ&NOqOj|=EE}pE-t7(7F8>~m@3rn#Z<|9rq;zRWrrBS%VEso;aDk`N{-)Nw-bWzYn zOk`Y9)1p!`Q4kl{Ess`2bwjnahrPzZk+u^JuDg~2@ul&lfjiaL{$a^wvDvJXO@Xb3 z4ey;YINuWM505iM*FI+9g=IEV8kAXnKr5NI`{ixt`wqOm=yN))E%!<96U3y|Wp&IE zccclQN0!{k5xa1)5)=knxxR(=%AOqz4jEKGmd{V=SKtblmOI1iu?Tq|#a-V;sprH< z8B-TeS<Z(c6IjX3gaij<rD=jKI`izeP_=2)^$>=-MrwWY()M&Js_Hl5JxLlgM=9aO z*kRW|rFV<IEYrRGhBpr_+qL{xKU3PH*nB+qLu3VIJbM%6;-9|eUy?=*)LYKOLhM_y z`yG1JAd4ZoBH?ZC%VRVr%|G}$a5keMwa(7HmfR0~r6D9-pq?WA*>7~u1G)HF6}g9! zA?ZL%a^6l-xj(!MJoHWz)%WapZ2l}$QlCBLIuB=ie?%$4z|vM%bBnn4!v2~wlP*oz zHagu+s$mYVSf%GhOY)>j?|9+%Y|{<vPRV=d-x@enYx&XEPM-YnX>Q8=ycvQ!aqRPv z09i)FSkvh@xQwj!9VaUWZ&Ght2OX{#m`Cz``VSChJfHsSrR78IEF9TWDLAM-q5I;U z%3+TR%E&*vTd9G8;zyOBPRK*8IbLb%b0OlW<KT>=#=m{<s9%vPNmiMRbK>!QtKbtu zeeE|rv;)VdtE{%LQSr_^B1}g5Z&u~D%gc=vL#8`9M?sFN!)S_*R_W2CfF!Rs;n8$1 zleDj_miO!FoaMojt;s8D#z_(xg0VEJqZCVTLM&X9R(|IR6ogytYZ#4<W0Z&~Mv7j? zF`VxkLionEX;Beal)z3=3<pP$&=Kp{C<8$rp|q6Tw1jfszgz*8!>hGN?@w9m<=Il9 zxM8>Vhl-Eew+=SJL0PK(x?$TtOPE>pVeMgn^s=sb%$44QoMVnHPzFoA61<T{-2*?t z2SIKqc1uSkiyo&OtD`_nmo({`6AlZJZTLWIu)X^UQqjtR=)R|ZVo|+g!1oO*^r=F8 zr;_aSbh{E%o3<lbUuDy&op{yN8wWH6?Gw8CNMql74NksU2@$+!BAJDAE>ZBfvFUtG zOL^l-<9*UYN84`gJcuao9HDK(FpZsiI?x%!N7~B@oo<V5Nl^FV(7ltYDANelvw?t! zyHnMyC}@HHEi03+k<V<H><-YrN48((3|ua^H!g})=or4SF)@>3uO%v_qqTEvCB=;d z3)xM-EO->z-NlW!;B46(5=<TrmVd@7m2HKJ(?(OX;RIp4qYfg_ZzUY3^mU-}n3?<A zSBBn1cd4<SCC&HW5b0CA3K2Oa4B|V8b5#VnBt_7Y6`mQEw<T9USTy?_PS6zhpkDrK zeO^7<?e{<X9@cuaaPjc)yD(aBRK~lzuT0uHl<CY59Yt}A5d69L2B)Zz5jons^Aa7M zc`Aq}Hf~&K>ss>tx2C>0*RP?Y;$OlW&umzyO9YVwCsRcUxJ?hi5#rk=HLkZoMmmxV z5*SjnJ2Yk=z=CJt-z5I)ENd4(lnL55!Dzn{>7uYr7aYLm?sMb0dd2E4Cf1gKYkh*e z7h8Oe+jxtsV~!JZ75Xq@w@`y5q9ZYaEQi%^n&i-%unE^BvxuX~M>~@$W4{yObTJu1 zcX^dX5P@@q%ltcr6DILffC)j!^BASM{O7w%e0>L<CM6hJa0YJ&r0;#oZY!ZzU{?v7 z22EFT<X0a_A+i+v&_NpFtO=3vm(Wvvb};TnzUM0qr?%WGM$d(jG1F*?VU5(nuP~wF zGO^-QI}@4Wxy$epA?BWI*SV+s1@}I%6)q+xRNEn?SG~=Ju}HSq*fEmtQ0^q+SpKyF z2TXM^D?6PmbJ)x<Uh*fuepqgp7tWt#D7B<!9hiJuS`{KwNz;Ppo#oGzujj|)aeOOx zbqQ>*r#4g2&MU)|1=Ur<l2^BfX>$AMt-Mb$4-}U;Y4up&p0+%O=+)c)mP)>vEsK~c z%1ggO{q{Y5XYg=w7Gcz<jxV)U`>DIm))0wV?I#31Tv^Fk$%-1^@&*2b`gc(l)G}Vd z;Oua8ul9vmWvnbgs%M@LrAn3^d?|n8SHGK+<SDgu{!EY6RS}L1@j_`Ly_DFFA7G5J z)cA@u7wd)IM185mShw;s#+MXJTqhC_|ACvCMMh@0d&4WMam6pbi%Q47L?KmGLvgap z56U8fy&;bxU2_{h;pAC!$sf)Bnm*#CE9X;%{POVQt`dp&&0=8d{qfW<DK+Z<-80<g z`(JZti<sTc7ouBRZ%AE3%BhU4o6feybFeE$;W1*qrYtJu3Rv;O%y7=#3rtKbU)0rG z{5ipE-*F|W;YKpnN9sU=X6U6YPzq(@(|DGcVR~Gx*f6gnV-K%Kh%gO}-Qm&j*U0I% zfcC(tE_&TCHExx^4RqZzUr?mwD5k!*Uo>6w{2$`JI;`sE+ZRPdML-Zi1VJ_}n=a{8 zx<NXmySoL&O-XOMOIo^1q&Fem-3`)t2j260o^$VW?s?9+_j&I151Bo&X00`AV$FPK zKCLfo|6yoD@mF|t2_LRR>jKRtGNkH#|5PL*MluIWY?)BbAR*=OL(QqX?zQ$kgvYM? z`U}1boguf{U$bMcF2y$=x~mfNfAcz$@Co#Ki2swy(<W8X?<EdEoa<%te%okeQ7h(h zaOeT;+Dn}zJyB*AKdK{TRFuUyTX)65WNhPNMR>QyE_8j_8VG&5-#U3l2|;o5sU|35 zNbe*Y`pObAYs-2y8j~QZRs56iBY;jLsz<L1*VsGY^h&PMNXiJe-2#eMxPH1$l-igp z|0CzOe%pi3(<lJEj57^A#^sIebSBQ#g7C>ti_!7WLK9m%JF&6T(^Gf7mK7tJNus@9 zU3Nkv8dXHeVVIzdcO$+&QpdxL%*=IUJ+NdJN={KU16x1ZGFN$eaeu8$k_o^2`I^4^ zpaL=@A^jTH!O;`cAR+#_qNdxcO`nSK<sje5uUUXKSgn8}Fe*NN61OnsF@{X?k2htM zp|9hF9FclR+?c^-hRu-z02kMmq<yts)OBcfJc}rE{MP6iDa-VSTp&60eu<DB(s(Mz z8mwgT>J8oF+ps=rKVb<$Vk|0T^x_J@$PN@*mszzZJ{rHr@@)$#PU!gCXa7EHHr^1* zoGE*9k2Sx|GXqx9Xc3rTs<oqI;RyvEzoRk68!i^q*AmAOf5sQ5EHSjQ1L<GIEBOfj zr_gZT-@dg247^&WT}uOlR^8$^qMOzZ4zF2Fhav#n@K$MGZyal2%lsNUHO>=M)Ne*f zE?LS&TFizB2Er6(cJ>nh4ViIN=Fl1dkZR={skylm<i89ox8iAY+pj&t@l3e}7{y~w zvmU5DllM|(jg5>(0lI1ukK6Z`j1We~FjZ}J_06rVO8{$_EfPYsTlZI5O)c&^w4{W| z&F#W#M1XmDdHGz5nwt7Kg=C7*`SEtG$sh&iW1I%!a<zKTE7z_(F{&C~F{*-(Xyd`s z!om-hG07;FDLp+s&yPOfo&EZXCiD%1m6<ucPa>L5z-6#ybhJ{v(lRM22_GL{k&S2n z_jAQ_e)vZQhYdw~dit7mfO88toB{Zn8ylvEg9Dio0NoIekT4-KQXlN#FNb|dPdz#` z`SeM^%$Ua_lOPm&&kn}_2B5T23$6?12$=}8lL}h~ot`?sb%N5;9$i0)t9-2(_w*%$ z&it>h0Qhfwe4K=Y1bB(#WdN6Srru4v&Y6*w)nR9<TJfdQ$B#_$SyJ&Ix<p0=m=(V; zZqmGcn*>mX0D$Bl68kr=cXoC#!gh^-jVY2=Ic~o)@w~ot$?e*nuEhfe1Tbk2iZjG` zybLtLO#0|FYh(*TdkhDS07|N!o*qeqKcnlR@mv4HKq0@Us<n=^`YxgY0Rd|>8LrQI zBr@gS=5)3*#RJgdYk)}m;Ne3icBY=eSB4QGAu<4+F?P&8Pq`?otUuYhGn`znE$H)4 zba^EuR)F5fB%zq2fBAyNN?{~l_3!bd)of$Z#!4UG4fhKnM4Di#Gr)PpAm)|)i>NX` z$0nno@WYKYssm`48PkU(zEe|E9fu35U01RN+W_8ph~D#Zza5~7hSqO094ddn8y^{g zYs7v!N-%%P!cHD3POfU)0xmgwUTgy_*c61&uf_c}+;mQ~p4mE=h?ShKqFGZDll7$~ zVP=4@nBvmXe!tAf*qEv(gqSaBK(Nt&0QUCX+o&fKGkpL;QyJhpGrM}B^h`zq)aURy zyA^~BfGpK^+b#zf+Dx0JB_*PWj101?Bxa-DjG@%n#r6;d0X=7IHEx@Q2R-iBXRBrL zo;<ImDX|_s=&vSH<ivc*;N87E;BISsaEt8-it!&G?*lo`zT#<()w@-CKJNk0l*DoI z*ouMKOWy+m25#|nT>w0F3ZjL7I066(1DqLPg>1~s%u}BZmO8b)u2_4ZT6Hli=<I)z zB$GIR&c)HLT*XPnbAJ62>`=!fCMLGCv#ZvyTq{a(i65xP0HD}!>3=+#1wv?hp1m)M zxgLL$ejG`y5EJxuiIw{?ZB0!LlbBHLaCc-{IwO?@GJf|&xf!w7rA^7zVdoFj@yT{= ze9a}x=^8n<%vpOcIErM8HvWtP=sX?(_BIvK^3!~rDc5j=KylV<vF>EXO#%*OtP?uw zmlE-7-or3}0VMQDfRG(J8d_J!o!hFQnWSp|OIyH>R4@Qwm40lj(rtaR@_ys$`(a*D zLma1rsqc%*Xl>8&9&r8foaxb5K~6DA$*1-Wjc@m7Z?2<x73AfmleovTWr(e;tU6|r zuDf86L8;%0n=b+S>3auUV@vV5tCT-B*48Q9{d<gDGfL&JBQL^qHLt&{<Y>t-gI?EP zx4kyoc$4-%@GuZq-_~U1?yj@kaGPwK?OfBns|7f%dQ1(2z7?w1*Aw5A7ePck=kZnz zf9Nq@bK-1Is*6}yY#%Il=cIHZ5G)#fW#znX$Iwzy))ZHZf+GirwzhUl#YiOXc?1Ac z#jz;Z%?88Ru(w?Lhw;hD!Ka{i@LnA%v>b2KC>QDz88KRTS6a;$7Bvi;Ars=^wVMY7 z2eX<ZUjl&S&2)Y9$qIDz0)h;H<C+oW30@J1a-l^TpKJz=qOYz#c{1yzeWN*;B_(v> zIOyx&$B&UfhuuY)41muQ5(qm6o^)glyv8FUqC0;cE15-~le2@5jV*W-?f;x|B=7}; z$pD#}jJip(Yw`V$1#0iXz~!rQuSej<^I2Ra_5S`ozzqjb@ALc4zzQk;0R3jt3#`#q z*{@?)Ym|ICI{&Gzrq(vZ=zePLLF~xX(#LZ`xGnju|1&_R<-?*%5x|A2^cQLKQSc%^ z2GFHffu;{ar`N!<2Gcpd<^wy^wI+W4s`?sX>1k;-_UnSH`laKC{-;l~0>EtKeGeId zK;-A=$AsQbafnKEb#`%Kj9;?lc(EYK@S)}iV8$Pc{7K{j2<x{Z5PQhX%x>yx0=(Mr z0fV`w&oGB^`Md562CHzX?V0+EP!gfTD^#x==7*%ihbDty(1@WcdzzV<>FDTKznK#2 z%J{N9gjfc!Prz>ZTOsmc>OcbB?lpk8U;CripCSNo)kpbWe%|^(28HHpNlW)u&<gW< zU0(vT6+e1c<4>nm_h|V)on`Nq6#vnG{o^_df&^`jY!Jzmb=O4%+bJ>(;2M)~+-B~_ zVk9hDJ*i>*^d2Hd5G?pBsGTfKG;ZwM*}aO2iamfbjD*C1?lqhh+IaByuUT&r8ZH$0 z3m}$X<coRG{Ig;(*ZA$C*4Nb~xo+eDeKZ_&(eSt(C-AsAIyjV9R-OQ5CwZQmprWD% ze`rY%$x*yMT@3L6h~C3_qicWC*U5VJl{-5-ZxN)ydSJZP$%=+1@5`45rvQT%3CZ3* zLw<d%SPze03!3YDDbM3I41mu&BPc1!$=?eL1LSCCg)GV9@^UE|8OlKeL&KHL&F+NN z(mr0GXu`nOg}-N9PCHv*4g^WaSKtNV>iT+~_@1o9J^)MXh;|KDg-A#g{PickN0%>p zA`EodXjMxxzyd@`NeQtql%rsR-qVi(0MVTV1U_GrMNmlD+S|LQGy+)k%F0S7-^M5Z zkjUC7>X2P$=iuN#Ct#CoeCKuTPC!5q$KkX?`1;_>Jz(wS<>ekJjkb=CSv;LVfRA-e z!b^a8jD#dPsg2(z50+NCzhM`&p+!Yj09N@OAx0lknCKzD*L&;gsp(oL889#*5L;li z@Ndm>uVeDvyLa3{jgS!GZ$DM?Q9YHPU!kr7+-tqIr~ha#1}PAa-g7aSy`;1>Ffg!O z&4T9g#U~>pcI&w&kn-e#4_M8DCBoUo1^af9KGQfDde%2>ZEYc>q}s0Qncxmw%Pmwe zQqzMu+iEZ$uaB1+>FwjkEfy)hjf#kPu9^=<Zytaf&c?<DR!~wGG@0@oRx@<~>b)8C zFss=H3=9n0YQleXl=A*f1J$j>-hZx?Lcqv(v^n~l7m6FW{`ryD?W!ATk3XjH>;2Cu z{vP^Fs?T|z{hyiqEv5hMKW~xNn|oun+a&)1Dlsebe;bup#P*ZR6Z#J(=Jp1*Z|Fam zf3i0aHqf)uH+VuXYG7hyZ2yLXf%yr&f`hKTi?zWUdNGSnMj%b`?uUwuuBm~Z{S$g+ z6McK*H;jyoEKleq4J?ho4<-f%HkSVxiFi8^H34V&%=_f~;+hYOK*odOXJ{}TWX1cq zid$506&UT<PvNbX>Zf{Qvc)ui#+m}iUll|Cz|aZ4p>&HWZ8T3?B%bh<Iv6@tOl>2! zws!tr9t5(_Zq00MBTn|}cTalRi7=}oDoRIt3s=mLkZ7v)(?>To`TXhcBSG~J<*mL< zc$_jJHDTBE{iTSRO{9N-bdY6g=&LMqg%EGRLFx!m7;%nJb>q}VLt1JMeN}|d%C$d? z#Lv9WUHQjMda;i7)D<a(LvngcsxQmz)CVc0Ge~>82N7W7E{4=kc20k2Xf)5}E{7D# zTwuiNY?m75<Au}_70BjnXK=;gu89<ioDO%5zmIZ*6dGmuw@&KoZMx_(;-S@G>Kri= zll6hs%u4Z!Vgol4gMoE$<(cdrCK5$i^7LBIx3+4WOJsg*e2Fu=^c~ZN4@mutj@6@2 zJ`#2*KSq+XeY@O;{^a`J8_B}VORd|0GKJNiT6az9nf$%31Pb`Us>)s?o;H*pe=tb? zdMai#mL4xf(nO1z@0Od-hS3MBZMk}<0r$GTHwV@^Dlmr@;iu$xR7UcR`rI754<jwN z3`uDjrOXkhn7?zb9_64qMWsT6LYMoB=e*1s?7gwuCjedJ+YDvJb&<(FUfv}}jhQoo z#gQO5@Vi3(nh@=p%jOA^`1h{$`1-Gzo)kv+QhvYNXSbSHbzq^qpYr8pS;r>EEn)lw z>g8-eDc?H(A4>Cc23nPJwZz#dDL>XL`!_$_=F-hIWOJStYsr5rjmd9g+x)P|P1T8l z@=?ko{Ev$c>=Gw)WcP6JHCJ4wF@ccp-_J{&QG;R}(x=1f(EJQQ|DClIwbyr)8!qcE zBn=sLyr_fK^Psbl1U4k6#gaRQi<W-htBOI6b_tA_2ut8biXO0PsB{Lc)f81#dB<DY z@+JC=uF*Dr!UrVf`Ez+sp#6aFX;gOt{GfvW69I#O7Al^*5tV++|9RXpwenC!xS5Zi zgu3A_U89ejpgvQ4`bC14w~uUD<|SzCDmd@o`pn*6L<xpSBGku#9itS$zje6Xs9U#h z`E!nOBn-x~Hg(>itzVB(t-Z0|-d5Q}3+$7YolR=B40){Ui+26;BOp8*lTK=-hHBaC zY~m(d@$$P?HKn_Uv`IY=T5asz*FdBu-L}hxuM=1rkC1TXAKr2BPSPdv)^PYr!_n?H zJ?YB26&R_VD({YG!qo1m50bj_dyOd35BdL6x7@{=ubd83k<rp%tlqz8{Lnz7OQxC6 zTPo7&&d@4kk25c;i#@TUpYZnv6~2E3#8i<uae0*f7y)>H!xed;u!pI`k)1E_LJGX_ zmWYP>23d$|*~+l_Mp}a#$z)CPj?PD+fBo^gM!8w63PO4++hz3_t#V%eKJ1?~_`hXg zcBSV0Suy8DO!t<`twyfPN~qb(i4IC-_V&)inoOydD~slC6zS-x6z<yWF2>_woR1e3 zAJwu`+T6`6Iu<ILHibJ$S`V}Dln`jb6Bug<ni{&2hHmeejdtBPU*d~xgmb4jm8bvw zLI3AZZ)fA5dbF<GeT^@&wokJnXHigYkgK1iW*GOS+3du8PMS;##1cmpKhqSN9@h9S z3klMc{^p29gRva`1>0NRb5x+24~Hl6pq6P`5QNyl{VgZT&EA!TFKJ)pJ@FK3@$jf{ z$U%C7OJcQX>RL+V>=hU~-lJw-zHiRet5Qsby{v;ttCQVEB7;a)WGO%gRe}AFW*~57 zQy;yHk-uKhYgM7sux7oYTBeuAwd`p{EBp##Ge7%yS<^%w;IZOd`qJRHrP;Lh%0Ibo zwvg@8#zt)Z&U{LjX3H7a7WMFmxjL?yH9?fxYyIbjF`cnBiZ38V3%V*EKZv^(f>8WS z0vlAALRc3ht&%ph)4q(3;v;_@?g!NUND2B%d4UDI0mFovUF|J@Jzz8)tFbmm6?qW- z81!ac)b=$&YOgc?X1;e1GB1~b7Uv#OUWyyhFn^Ta!*mp)_EMEEMULhj6IB;K>yB(2 zFQ~q3rUN|aZ4_o8d(#pE)?5_0!ljYmgI2tnd0U_#L;d7E`@yIMU3M2gBl$JKyoRBJ z6?x$MJ+oyETjyTnfe<#%rO=FQ7iNxmoOGXeT?{`pUrh0VC?_gQ{I&`U#y~O5$IF-q zWTc=v{bp#>`GFHtKV#=f&104@MiA==Vky9T*Pb20UwPK(LP<f~&JZy3YMUL`8Z?&A z<<HkyLZebav_j7K*YC*qsgcBSK(<i-91!;x@HQYw&9`(9<wmCq3Gm2=Yazn!Lq@gy z?b0McQ%d<hunb>v^8`U7pLcqmsS@7rhrXu>3A_|PYnBJP$IQIc;W=WaSyx%c06~DF z6wLt&NXhPLx7o*bOEQnO)zPl$E<Xl|G$4_@y=Y|sHD1-`-RlBGN+dDiXP=uAA9+t} zU?|;>08xPvnY8XGlytM|v1U1{Q+ni@Qe(n*eV04-_2EF7R8IjBmhAj_>~HsrkL@{i z{F%OhSTa_wKaV9sdx1!wO)};h4*_WnB$OL+Fx1Rpe+)|Jf<L{YUPe9nX-!b0F9wuc z1qIgbMSUB>cyb+>^hcsPsQK&Aj?gMp7j$Gy%db8+X_?`GGe(?CJZd0Qx2oIQ=`vvc z!~sa4#8dIJ)OW@S63t#%0@Qps=nkX(p8~%W(^P4s!cyiMsc!QD%9=8pst6V#tSoh^ zQzv#ji#f>GH2rA~d+kxC0Km8why}!j!i1U|(M)XUALCLvvS~}mIO0>@v>7~Z?R!#F zlJ^pfOOX%q)(~`QJb`WZ4DaQEMr1%!=^0zr`0lORq(-%jinxC}Z0X?sOz4a}KsLM= z_)iuvMt}^aDp9xjd;R}O!mop&Jp;ed?h<XYEEhJA5%))I8SZ}To&)h?P;O1P3918H z6Hv>$?U{g(?p;mr=mQy}Kku5LKzm4rHXNWMg8Fd>!EE%eI4)GWML|Fml-9v@QfR#^ zZAu4}!hi;>-CI>d8c+P}Ua9x+lxp8HN(@TAUmzL-nhq`!!bcT}0nPAU6V&@(ffy8| zQl#6M+rVv>`~M2u<^3-f`tRiZ|5Jf@H}u=h*f<K$Rl>L?0~-H&%yL41rsYc^`|E>E z3lNbLvrOOhdgqZ$#o2Q9>?d6B0fuh>E(uzV@Ut<8#c;Y9loT99N%T$oF-mC1$Rd61 z&ek7`a5b6m%B?buoBh>9=0bMEdq1b4>em@THZwFA4LSK9i`9LC4o>#WJI)`jO-C7N zZceN7<8GQ=&#bu(?;&*Uh?B`rxOSp)xgvYKEOV~=cU4unMt<g9v^DJ<6PB$`9!!%& zZ8TFtqm?UvgErgJ50am4F)3E;4eM!v@O_-3_^gM{mE8qVUr5!O?aKZ`*vmHCHJZo> z8k>OY3{u^*PtvUz#@Fs?S<JuTG`wrxsMh;)K8E&&=4i5&?cv38usCS&)&>_66MOfL z5(QaP^|s1mJXP7$Sr1>RmD!a*HVh$Yex<M^6NADKsHr&Aq3|73RqI)`KxMV!lJ(Wj z>{tEpBbSXMh%a_Lsqn{&Uw}>X1^zIhL|loYP?#s%hE~`rI=!<LuCj_pzZk^Kp|Q-= zw?pohoD?@{US0xQH#uaWb8Owi@1TlV__+K$WjC-cYgX&c0pYEVFkin~!fN+T#eDxN zqD=}Q*en)xOyd%l7C{bVJX%O|dnfE{?im(;eJ(8Rpaw0tgfy-ZJj^w$?%NCRGbnGJ z@892Gv}DclAO4Jmho^(9?#!Q2G-!yQd%P}lgw8YM7lKY7OHvY1j+$6Vq!-XIuUkH^ zOGnoP#oxVjIf!s78k)TrH0^WbaHx8vYB(^Vd-?q4s*l#Uh3};L?1-J{-R~|9#JXv+ z=QIOMj=<e-p=waLw_*fZl+*r>^h|-fs}&`Nyalme;4ny82i2x1NmHi_>$6+8n#R#n zV+QvXqo+C6&&#`}O|5S9uKwaBy6v`o#Vtg0C^zm@;0c%*(41uuU1BurIr!=ddwlNq z*tCT}L&IBj;BTb?moqn4;8bR^M^0a+;I(nsq{1s1)4D>ntG?sljRrk-;*EVpt=hJ( zpp8VpU|T=7qPipFQ1|(=ky%fP8qb$`3ZH$`7Uer~CCM_iC`R5L8_t89klp2X?(b-- zx8GPD&K`4Mzf$(fI&V=jrPR>Zr1TQJa<F?!t5t4Lmbxqwh5^TYV0yr*HftL>@iPvL zGZGWhrN(~8$t?g3?vuDf{gNYde+%RrIjh6XQO%kRd%%N+kt}2Qk3{RF&f3bDzkk|e zW1T`fCzF)DrX&1tj}|G0H|wKWU}6lXu`aPLSE-g1f8{o?mL7Qoo_mPB25ktpC&b+# zNL=<uebzFpW#>+3=pv%8B0oqfq3d)wm3xhA(Xnt=^tM2bVwdP;xcQXjK}9q<N1!~V znm~RM<@>f+ucbzPo~)R){Q42g)8KDE(1Y((us=mGaZ{;9?{Dz2Y%kM@&hU)dV8Eqz z&Zd|+8F&AyQ1~?_FXz<ZcD=~=PJ|`xpyVL8rSbTW3PK~}vu_<|E5y~Nr;LltwnIb| zyBm?Z@M2RT*sVfd<+3N^ND%y{Sy=Ul_EKM^IIhzM)3WCmj!aXXX1zXw-mnGxeP=A2 zg4!lVwQt2>qX#PxT;8!HMcDXS%SNZ7gFdQ;r5lmJsliWXQty)!{o8XR7p7tHO;t<r z;&6}}Uqf%tF1UmCBT;EVjDa=#ZI|eDzmch@%VvZaJPNg}OK)J<UMhnx5Ps^D3hg|C z=FTnY2z6&x*D#8xnHu63S#f-{Q0cohR#Gp;i_WB)>LuAxjT>?qH?Q7p$Wg%-L$}9< z-0CZ}GD|B2nKsoyN+#;G{zvM{$XgLBrds=KMC!ua38XpS4tr;FPWQ_6WXJtobuE`^ z)D`VAHC#7x?lFLj@TzZf9X+EY*tj?BcVlzQrLa+Q$Bm1<34Fc!sIu)4#U#-OqCBn( z7c)&xDzX}rXAWeXwJYdgk-)6sx0l#8O-K(;sH#FL)nCx}U|@len}xwyA?lgq4qwjI z{U&wcd}PswmU(QKI_^DEkWn?){%^y28iiI>f)+8ox8glN2^>;dAAmMY?bwg(3`!_$ zY@F4K0(ecQ$~fCTkJ#$#6T|V9l$X0tCWN+^`m&aE2d1{B%(}`DQ_j)^5tWJLV(D)R zFs$$2TB4+Trgp$Sde})zR8>SeI`Yn`?lNk0Zprw1@vfJ%X@<>xXZtwqv)B&xec=w4 zK_l8-cs-$`;j3hn!)_+R?1nw@MF}m2f{fs4>cp=?k~0-%wk}C*Lgja6E;+P*Eif_w zogW?~a(_3lmwn!jIeqqIIgm(?eTL0`t(0W?H79fUKwJ$%O0=@!`cHrfLeb`Ts{)gq zbRSC#$yuVMTR=^H={`9zY)j|5xkjd!$?$A4V}!!WteA6S@?|n?=qCmpkfID%lku`+ zOzK^ESh)eEE2jSx>S-G%Yg0_h8gfWy_~o-@9(tnZ^e3>{{L_I+_zJfl#fvr`a_YQJ zC|+i8`FJ9i@QBiexC?mC7voMXm0WHPt*<JDMILa`)VEZkvn4(2_NSA*`CIsjQ@K2J z-$W>y`VYer%5*rjkRYncWcMudRDfo+;L<|mq<cfjJF7YmS^di2E04nFD!@!3@uA`S zOjLeJ;CYBm`bU)uuVmq!SDvf`*UtL1+jg6)n~?aAT4%o)ZZ;LZ+Qy!@j7(tGr>nwG zw0>4ahsf)@K)BpPMJ)!942Z+r@{__{hkpJ(_JCmS1qnAnW2;F#)BnO}p*X6!=qJiw z7Sp?e|2$r6O|xeu;CXO}LhEM2j<j3YD$Uy0Mww`(ZF#n+N{q!p&#UjE9oZ6boJ?z* zHrzgCT3`;#_BbEz&Mg2-EjYrwT7JZDlxt!>&`9ly%3;HMZo&Y|K$uIx>3su>%VG}% zb;B)Lo6XEOIdB8jqEUcoAZ`MoQJJ?)PHVvzDJ7(P!XKcKTz9j7>fPDJ`6~I6l2hLF zs*q)8wHeH?B|p1mN=`FAiA-tVgy1HT5a_qfjIzJXjtCj1kBHatT6_-YiSAZF#UNzP zmVUjqRV%kc$bA`}nT+`}RjqK5rew!?+wlwSPH0nP<a9Swrqnn{m8R%qz;o@QB7b_; zR~7WH%xM&>g2Ia(658<n!-k9a^1sJSJB>8!A7_P+4@reuIw-v`E^W1w_lm0ZOnzS1 zN2pK8!_;lM*blb#z|#@*fBiDIrkb;k2wZy)T(s-f<5oScMM#A>ZYS5X{mhurj46te zg6ubnI~-@bn6uV~UW2ApI(%*z6IW%EhI}@g>%~Prw}Xq8z1-4;@hnq5`P`YNY~fy2 z@GF<*SmfK$!^HBzvqEu>w+%s)+q*AM`l5<xG$`PoAn6Qf-tj%Q0el+CwlZ723ACHi zGBv3bF_ux6KKmIqVJL|EbDX8n7iZsI-M4u5m>~0@8l|&ap*Q@dS^~=TAj$)j&+9oz zgw9M1?i@uYKjB-*UQC}o7SDO3PO7J202k4Rqn097O+Zo2T@42^1GP8D_TRfKB*eq} zwv*1oBbFye=&-vx`ZvJ3v1u89s?aNmaXaNnNVe`NfaokXixc>TzJn!^*BW5wLVT-{ z<3BqRv%H0j-4@cO-+|PD!H2n;%uVFF98xQay13rq41q>E+oP{FN#Jq~Mrtl##cC4M zI+(qZ_!bXlaB_rMv8RLUEzcO3eYI>EL;T7qxAds#b`Al{dmUWFeQ#9;G_cP9SD+b+ z1o{<-xeMH8X}XR1SKj|>p<8nQ)x7^NE9f_OzZFL1yY}PLTZiXojJIe<2vC7{`4{2e zw8(hC6H3u%q75*v(w$p?sZPA8i&iG~R(;dFAum-f8kth`6d~`?hl;{3vHGH~q75pG zkprjt`aNKaU7~h$<f>sWwUcghcKm)RziNh>E)L7vl4<BR?&-0U(1@Pb?u7*-S|oRX zG;JCV-P@8$D6N*Fw5^EX5spjYuijbhVXF&TMl>AmK$;Jc{3dbBA6%MDzLq7Q+V{kP za|;t4`3v*vfeO6}?rroUSKLvaYCgkzl^JSJUcDGMhcl*Xb8>D*1=x8iBqhH)Kb;(< zwyR*<S}$R$s+2;V{!4JSJ3p;v$?j5KH-ucuFYq|)N9HrRuzEw2n+U>{d=<4`czKwO z(1}Zl?vGEiu_eEg9;cDI+e(lPY@G9*nYbbD?}(NEMy2~K&(ytrkkpde{~Q~JE~(~0 zWmdteFW3-eW{zKcx^y<yry1Q@sjiD_t&mHuwX{J0qV(`@=S!nj+lmgp1p+R=r9s^D zdP*@(r_GS@71YOvf5-z2a1B5EEXbteQU+?6vv!j%SO;rlvtn;WkGV@PL4|r|ia2*w z+6*9lYrl$zv0wS9Hd*B0W)D_7#${^D_F9iXl>^-~CNI-FPW)n5)b%5lA1~)BL5wyk zh@ZPWEA>WGp#7d@x6RVcVzRZAuL_4<YF3V`U%e7pJHf=M?%&WO${-Tf*5?+}*CRmO zFO)2Qr@W+_uA2LCGyMVOnC4Y)@1H*Y(ZDGyaJA#We;D;D+g0|8HX1c|vRx0?+9bC% z$G$MwP_A}N*r><0;QZ_BJgZZ|C8HLa9UOe)eF3xguZ|{>hcFqRmwLMaRx<1?Sh{&2 zjdmkYyWyg4>xcmYQz789kU;QM-4KNvB&O)9`u-GdRaL2>U&y%F3^mMIB%}tMn>~l- zeYf(hV$#`OiXYX$xQ(_MF=a7}MQ3GmuJz^%fHkfuO0+>Osb20)#&z^GL%F6ejsqjq z)+w!=x-%oo^B|=WlWJ0Dmz6Sfg#+bJIY(+r#zrQTM<iwsQYNg6=UMr>twv^|o&8*4 zPETnaOeM7M)G<~Rnb2c<v~tnwqRcBwMqQ}^L9<)474espGTkUY^?iKdMc1d?rrxW( zq}9#oLcATnnS>MCd4sR@x6TGa=~XC?x$l>1kT_97X?SlmQ_aT{b(g5i6i%bOyR!du z*r{LQJ=^l$?sWlVF_`wXDUrqezDB;)joQ*<iEO_NGx=X1uT7kLdOl`H-4qh(CZ!sb zPuRXQymta9X`RFvVD5?@-BjY8y-&vVp!`O6Qqu88uX{S#c>SA%@bwF`adEK-xq=y{ z*n;!T_2FMjQeOQHb-isDaN(6#TFhcgSuDg=H=h=n8Rqj#zfW{6X=48P=G@a?qG7>- zb!R&y$!3Uyd7k-r7p3V|KkDHlNaczSyj3jB-$=)}>NwfUzmCw1Q|n6aTTI=_CvtW9 z+KR3^L#e0bE`!5<%IHP-(T<@*jAkg_b&**K%d=uRgkgh>XjRZ*>_>dezjv`q2~!S7 zukDIDWQw!qH&(gmYE|BDkQ)=KaC7r%@SWs!1gS)vyN$*N^X^QTZw)j!h~>MFlM!(# zx|y_RjET&!)ETmiIngUDC*H(Hf6rbu=C*}(P7+Blc4L}$kH?@)@$(ZuK}igPmBcLP zSWhX`e_Tp+ULddj@H=4#l827I&6b#UWmI;4>}x-KO0ODy@G{%OM*Y<;{WF)*y|`I_ zXemoyTI@2PA3QlNs!3yHE=y5@it~#N6{O1?o*SIqUb984YjJ~>)0x_CL3!ZI_;KGc z=mRE=ZcAjr@T^;oL!!I6_`?%;<l)9g2mvi?cYb7bssVN<ww;nM8jKPbhjxEKLpX9A zI?cD6a<ys`7R5+VHbrLZgu!Dus()|$W^}J3Q+laFWzc^knPaF%n)k!SwJVvCb#Q7I z?uK>0eCbrOd|!#Y#Th9W4>Q$%#eaV<Ts<^bp=4mIY_4Y|7AwVOKp)m86?gNaZ#=i& zRu65H^Ne>Qx+1t?nK)d-PCc_irAB|*VuM~IlxfqQ<&KK`<H2{&u$FakEgl-_n=jfr zunf~yS~hfKoGD$&uBeA8L${VDO=ng4geX)j7(OnPD}v8MOyG?_8uz^X;H-bj397Q1 zm2%+5&z59`BLh{Fo~z2`D72($xK8N|+DlR<cR1{aYaG$nA%02ENMD>gN@6HkGSp?& z5B~{edvx)ue;}p8{M+qF2S1I2eis(zh%pF!IK5D!<N&E$9ayZ8>7DcAP`!$946#Va zu-y7&K(9?)kQc(tWzr1aqxE-y#~EmgspX`qahZXAtg46FwkU<##e9&iX6WLuOtE$y zh4S>vXo-+XwWZOa5z3)?nXi_@#W`JFT7|T6)+r71e5NfkohP`oGAGB<Y6VtB*Cy)* z$Dby1K5hABj8mQkDB(0Y<iJCFS&u~kbITZEZKnmj(K)`k3Gi@>`Dj^FnM>6r8;`hU z*1zo9mz@J;msv_(v~JY{OBU?8+M}K4e)NiR1j#GhP>W2B_$XB~>trUk+3bz)$2Hrj z8^@%;a)lY#wznLhw>%SXW-Dojb-0GO3FA^4Gp;Wx{cUe^#5mnt`#lM#=s{|KqCz*6 zty;*yw=|WX=>EREa}q<&Nh7{2rCEg9p++V%XWGT8)JgLLTqFELT}hzjg^I%k3z*d; z%3rE&eTUgHbX(OJ<f)tER4ZJ3TG5-IIh`8Nb5u_!eAQ@o*8Y2PC3XtCEZY;lo)IZa z9+o#|;-ughj6&fdx#~1w&N4HRk3!+a*r2a_Q1Zlu8N%5~sO=#5dcom0bgn@$P>z&M zM0mVs0FtqpG$DKQ#hUEzs`cr<f>Fq7%UA)22m0`j6MspDyzpu1Xv6WTfeEcbB0GP} zzoJTA^}$6k6d(C=G8SkSk&(56c|2j=_)}4)`|+)!%|5ZMrK(FqV|`x1y!X=^jr&-) zhu^g==4cRzskm}`G5v-Zt*t~KIWf1vA;$F@OAcmS)kggNKaUGH3XK#Np?T3`yaG!X z!Xw!d=~OMiOc;j452&7Tk){zM4!(9&7sr3zP;56DpUU|ZJ9X`%Kf!viMAsKl!;!I9 z_BUZkdzdzIZH)bg*N_sflWoBoTk)?JxWmFE?>fq?TD@8(r?HF3(n}8p9Q2N=m}bo! z_|Uw6FqRyKVKuL3x?OD_u77_20S%wuVtP?u@YAOd=K2?n;^__6o?k7?f4sD6OaA7X zAAT9bNMqcnQr9?&uG%XzG0Q<lui_yo(-?Ii5xv&eSQOp*8Zgc{jLk&cHTE29SqI*m zr|(gf)OdngRCy*{m&-$^^;#=GrS{c>GBvzfbsOt}0vDNh?icznW!}*(1sAz1rm%C< zZa0@%VttdcrW@>t7rEa>wQMG_AJRt1koE-;YtU%7?`SNjJyf1oMyPN5!)$YQW-Y4S zZGJcLO_j`tnf6(3F88J?vyc&$+elu{EO(0eNBM_k4hIol=DE8b7c0|h)y#%;1~RD% zjaHXj4<se!V$q9Dt5Un&(24UAU`#Ah8!TGr`31Rk;MEzSVH)0Z%2GqLGaZ9|&tqjA zNQ2APm231%qU^BVYkdXfg7UcjS+a(wmVRVv#xRXcJWh?)-a@o?14D7J<Hg)E5!Xvr zw{-Kv?(j{wj2-oaLTNhfhtldl^XJ>0vNk@LXmrZ5bZTyrrnx8UkBm^xig@N~kj}9A zdGv`2eJit4)O&%iBSU|pcsOOzUSY`PCmc9N_?ZSbfI@n}kCs<C)}X4RB`n$TMQpNd z>5Q1k>}f;C1yOdj)JPfd8^CaI7PnmGEPi-DY*S$ejUj(=Y%!I*&uJiP>h)Tgids=* z9uIJTu3=Q#rG!Kw^fTD_5efUx#wC;y7uDzEeG-y{^*g7b%NnYK_ezm&M`1JgYh5#a zZK?%{PK&x%wDy>#(T1(YpF3ZM&AM{X!r^?GLzUo2LLHLk-jjx*#5;g15rZSDh4E2u z^1R>jTn+n-_ux?r#%#a|Qu{aPYUeLpP`^Kn%BuA6RCK0stqZfUX7aE&3$IILzn5E- zw~mHM+T<_%6vIgaTF=h5vjM~cA6mP_w<>UK&@)@|=C=~IND1wq&93U(y6epogvCvI z5_k8xana%SO=WzgVMOy56DIR?iXj(_=geVMU$N-kWoutdy~jt-VKJ$tw_|zOv$j>I zLI<0E=dX%1fc5h&q-zjrL|@H?dz^ufb*NnqX%H6Aj&FEAe%QS1k#G{Q+CN7F+yieR zEICiZan;w{4x^r9hQUzLh}YBW(J~I*zbkg;s2|l1^Js1Zb}`-ypT#cYgkhF1OHa^+ z?$%_x$<4Oj?Bm42^Nh-XQ;3ueNxMXpWM4{j#~hv&)y?t<VXS2M#J84~|NXY~<SWy6 z*a4z+s^-(Vm=X8T&y8QWMBt=JSU*gaTj=`wfX0b<@JWac{C<Cj^4tW>_{GB}==<)6 z4fjVs2;ccw#8{tzf2rdk{N>iaI>N%b^(jY0{(WNTr?CM9?9uJ{(k3b7_7o~V1a{|_ z@j`xqlc%Qh|9YY=d88fxZB_iwA!&pyB)8P!o?(R<fm%_J?~btUPNV)WPPxPrbvpW@ zZ#`y}V2F5s`{-RTK*kOG;hpE$q;`qz_Zbbysbi8$o`x%TzXJtS{F7lA+xN$<ls}=v z;j(D!8i2Q^1w{$&w+jT#KuoA)`Lh?d%EHAKmq(MkRg{iJE;+9?$=h2k<V%+SeuRCO z;p`cM654yPcTnnGo`XA34FdevRO>^6oOpn|u_vxF6MxvhG4S=DD#?fcN&HDV{Hy7X z9T3xY7a$o<`{HwtZ~qynuwUPY>MoLJIPHO)cr#+)B1rILzrxNlM70U77%13PA!~?V zZsXeg4HI)X_!m^?G4%<>!!zk8y6~1)NrliVRkgY`p8KWV%Q^6$hJwF^P#C%eu5T(F z1$xtaygc-P(h^PgF9d~!Q5d^>9m+Kmcm5<EbGQ#3cP?fmnT;G(?#F0;uRE-<!`$&! z?ScSJNxb3wLISZJ10HmDbFXQp?PaaNY{;fTkLFbn*Y{`{a{_L3PZHUa-csT-0^%KC z)vmY0*g+OpSR7_>)TK{Gtplr?s<w*d?WNN^seXY$wMkKp<93LEJmhPdi64B2&a!Mb zSf!D`PsJf>d4|Pd0l$huPkjBN+p+xMBMTWv7rhhyu?6v?Ez53!8<OU+rY(87-gc+~ z|JID~d!ttnNIODaiFB0fEgVBa-=K1=O<S0bZOcQJ_s7rq6ff**#)kc%2O@fKCh_vM zMN$YP8^I*U#>u5$EdmCO^yQF+>5q+0lc9u`SB!4v;Wgj)3tkHySg;yWCo4)wQV0uU z#APna95{)zmI(3Jsgto4;l%2V-PE}2UJ2}C3(=W0bdVwBd2?_Zi&Imu!e*61uz&u6 zJ{NYh8-hB)5Th0tSdS0;cZunlejNzLa)u4sPmaRegH*dHhp|Opwc)Tpp46CZQxo(Y z6uNK!P|5x1Kb1ybceL(H8uc-L$tDleHNlm2J7bcUyI5+K##b@WGgST*CTjC%Lg6?z zGZ~`rnzj3LxPCY}1P#3?hURFSmUoSLL*S^~yHUBas0C^eVfr}JPZT8x=1%7t>Fr?{ z3t^g)E7d6S%%R*Q&{9Cnvp7UI3M4ez7x0p!r}L<{LOl|y3sCLy;n$rQrv(!6$oQ4_ zL9M!1OhtMQ0?vbpGOU~hEyhG<8Tgm9%tFRBd43mxqoL&B@)t3g=JK?i>3;V`gh@v8 zJK_UXYqsm{2Cb9}Ekj3pPPUx41T6IULbi-F>9w;w6I%|^nTP%UJ{>OEERenmlEakK zGgd9AFb6h-OwPEy1qX6=r#~o(&%DT=b6s8)I#TV<{@ydQdW=;)obS;@urXVwJKND# zsI_THW170|it5pAUp{{m-X<sRB++A=OSa+z8EU)w&`xs&E%clie~lGpV~~6Q!+X`9 zfs1deo~s-R_emFNTi(Aa3Hg)-lVmX=svx<<8{K`8lz+BGjwUfuHp|67Yg;<8C(~kP ziO10;U#ju8Q*|NJwEG=Go-GGAqELMdM&)9VEBK;XpIIW0o+$4rCDlw2`!szCi(9gr znm&ERP9x{}Ng+YnL&?6v4FgTeS=Ed3s|bafqE}jW4JzE)N9;$>ZkWs5Nf|Q-cDuY& zOr{k2VN`41QS%L$y8$4WwEhoKy|0D4+)?#?9&ZOo%N@Q$!Bw^Ckl6in^P0a!fmftG z&l&Ng{cU<!m@VJUENQx#YU^sZ7%3CXu-2_~EC~cz9`2tKBGV%z7S0}1?4H-U!cNd> zwex6Kb>RncfoDwu)H=dAwynq`B{7*2)BY1)z0b!9nY%|eQ0vKRRYxR#yv;0bJm3%P zknt__Tp-|>yeud(^wLmlA96w;op9S!FH|JpWvDYWE-}S^yvjeK*PwS$!8Lr0;s@^= zh6gf8j2r1Zd5Lv~AX;8?4wJww)u_l)I<$;Ajk$TynJJs8cVKQF!|W+N6unj9DPFU* zJG+C%tf%&>kihDo@Jb%R^xoohXfI9+Qf`95c^YEW`p%*bU#~W97Mc2nwG1k+o~46J zr6auL)G|m=8e{M$apLAg$-X7hjXYW~>T_plaagT6HZwC9c&)$udDDfdcG4&8i?`+T z5&E-dP@XkJBzJeTX?G@ggA^YNMRRX#9bvc*o@)uw7z!zK$S?S?#5Z1>@X86=Rp!-U zRjIB)Rq50<)n88iN49)oV4%zQn$%##rFg=Y1Z<&w5KcV|fjPW=3mo%}$HnI6+&q7T zSofDXg5U5We!88W$LG^EPitPxI1W{6WV6*7xyv=NydQKg3y*zIZ71Xfc98mE9W28O z=3x?atW{j1x__|x_BYyyIHrlJ-dxR)Zqk?5Re5<IXKv?PRm)k3zKt0tD~XCit=HiB z9qk9-9fmK04NNx3fl*ShbxH?0Ug?jU<8Q8QY&*E){g4Z{>(B(Re!HX_=%y8cX_1GX zZ$zL}_{Y;@fBTY}hbII=-65vk#)$hU-(e*^4ij2S;eo0RBcq+PxUumqZpS!h(4N8o zlVFia8<B;qC9yoNAwQEgp}d<fDz5QM0vjZ70=1Dg5ovoG&>%QnY9BsXak8V9K9%SD z&9Pq#i&XJpVy=ZjrR}`>kT*X}*cO$36iaKY@BI5?!a8f7ykNL!a6s=^3A1>7j_yeC zNf}Vb9!#`T3)j%-mX1c6=a<vxHEnqWwM+fWuKqFLw%m9(s)38uWPN)E(??}BCQH=P z%IR#+vgb$W^m*t)==AH<C7eA1B2r1Zy-|N4anxDknJ+dN)z&Mx@+Onr7{F#P<iG$f ze!F9rQwv<Kx(=EB;96nN;anSavMd!fB4@)xjMP8=Vzc5!4|)a|Ewry7Hbt^De<%Ht zI(fe{yHPZmY+wlKo}yuS(dcn#OyK9e^&0VwTM155ax%}JoS_YyOqCE2AWh@{6d7Kt z>WOm}-S7;WU>JM3tI}<3G3~9Y7S*9OQ~!MT{Nr!^W*=!Z-1Q9W3)C!B?)jdO2<J&> zw7$H`m}#?V?QmSjT#1}I4h9#Fn+MrbF4}LIkG?j##noGcyY?eHOp4@8is<4p_``6r zNz<0V9?_c94(XB(yzR8BkVuA|oRiL(^_Xh#3gTNh%IW5)?GV4CSrjWJU3oJbJ#Amy zxuOo0a=q+xwhDnGbM%}B3<jH7tMe--@6+XOz8@+71)U3kQBe;stnHV^zgL%|_S~Ff z+*qB|4%A~K#x_~ovs+Y9*1jp~^N2U|>8oV;n4J_?Le@eM=rBxHFmq^SW<t;RK11$A z@iansgDVTCBGKGt=JZoov_t%Ez!X?A-;yUE#<q`8Ejz-~yE#;@BM*}=ZP`e##7){$ z*Pr)+*It%2{fs**4nO#E+-0=f+HOfika)a(QHUt3h)~YK8gmx9f6|trTo-9?6oz6x zN!5_#4}+2&)dT;O3^I_d=F>~Whgw?q#@67lJ#e_Mf;XWmsGxs<`5foC!phSSk!zXR zK|}q*sgc)yP`PAhU%_$qY;2tO%mppb?d;`y-T)&VNA#|c*Wp@wzL&aZ`X@>dr{C;E ze|RM08Xlm8!0f@2tfd{V(G9^w*C5-3b@beKzH{kb1K&&S(jF0dO0$LdCAH}mK^eyb zXSGJc3ki0Nin?g+<WQa3kjziU13O6&85K`Nmk}9`o7SO!0Jq#{)g~S+Imj?}0LCYu zLdL+=<giGw?8f2Xzf-hb{4y6O+6)c4OSvXd6wBm7hm+GE`G`EFjv7h5)&lDD>EU@* za&m=_FU&Wc^sgE^Yh|!Grq6vp&eG4Il~)&kjJ{Y-`XaS1Dtii}3Nw{U;PIq0G_mP1 zJey4~8oiNWeIMxNlb58$Hv5jB!)tLr>x4`zf40HPrnUo9y)Nt8q2Ze=I9qg^8$H-| zXivUwTInyH%-C}0cUPaV=`SYkF8P+tQzOqylxLPn{MkjAO!|YczaXtqNb+O^VuIM= zXqGO>P_cq<Gp^-r(2XJe>@+mFW}<3hVoX?Ie9s@%{_mJ@>vd(_X{Qe*{p`%r^MdeI zbIuLA)oISnn_gC2%E90_n)1V)FsdZeeGb>l%jB@J<pTPPn4K63alVlFmjtzF<M?aB zw}u5b-RE+>tm_##xw!c)m|h!{$8m(wVNl4_t#_b=V))rM5T=_0_fBu`8-+Grtapwb zgpl6<Mq%XXWx5V2J~R&9Cqmpez{5I==w3>A=b2=<e$~=Nb5j<0d>V3$$KoEz!Z(zs zb-e~DouWuq0#i~8jOt~)qvPJ`S#0LwLQ`HyeuSTlmc~z2wv2p>J>|390ao4h3RV2| zW~l6UEIBH$(KfaJm$`c?lPgasqVm@VjYL;u-J|F~ty$AeLI>Wc;7IF(aM+8=*F2tD zh8)hC&J@)fjz#8Gljh4CsSW7rwZc#@*@j)1YKkN�#w8QWsYZ;2SDR;_>#^??x-0 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%0Ak8-uX!CBf@Qbj+lbi6HYema>P-z86 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≺&YopfYTtQxRJ7165~`O7 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	&Jci9|#&arrDk`4jKq2Kk@BlP`0gYD$Gxe_7W| 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 O#}VFAQYN;hz`p=S7{g-# literal 0 HcmV?d00001 diff --git a/inst/extdata/flow_free_expansion/cube_1x1x1.gml b/inst/extdata/flow_free_expansion/cube_1x1x1.gml new file mode 100644 index 0000000..3079890 --- /dev/null +++ b/inst/extdata/flow_free_expansion/cube_1x1x1.gml @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<?xml-stylesheet type="text/xsl" href="OpenGeoSysGLI.xsl"?> + +<OpenGeoSysGLI xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogs="http://www.opengeosys.org"> + <name>cube_1x1x1_geometry</name> + <points> + <point id="0" x="0" y="0" z="0" name="origin"/> + <point id="1" x="0" y="0" z="1"/> + <point id="2" x="0" y="1" z="1"/> + <point id="3" x="0" y="1" z="0"/> + + <point id="4" x="1" y="0" z="0"/> + <point id="5" x="1" y="0" z="1"/> + <point id="6" x="1" y="1" z="1"/> + <point id="7" x="1" y="1" z="0"/> + </points> + + <polylines> + <polyline id="0" name="front_left"> + <pnt>0</pnt> + <pnt>1</pnt> + </polyline> + <polyline id="1" name="front_right"> + <pnt>4</pnt> + <pnt>5</pnt> + </polyline> + <polyline id="2" name="front_bottom"> + <pnt>0</pnt> + <pnt>4</pnt> + </polyline> + <polyline id="3" name="front_top"> + <pnt>1</pnt> + <pnt>5</pnt> + </polyline> + <polyline id="4" name="bottom_left"> + <pnt>0</pnt> + <pnt>3</pnt> + </polyline> + <polyline id="5" name="bottom_right"> + <pnt>4</pnt> + <pnt>7</pnt> + </polyline> + <polyline id="6" name="top_left"> + <pnt>1</pnt> + <pnt>2</pnt> + </polyline> + <polyline id="7" name="top_right"> + <pnt>5</pnt> + <pnt>6</pnt> + </polyline> + <polyline id="8" name="back_left"> + <pnt>2</pnt> + <pnt>3</pnt> + </polyline> + <polyline id="9" name="back_right"> + <pnt>6</pnt> + <pnt>7</pnt> + </polyline> + <polyline id="10" name="back_bottom"> + <pnt>3</pnt> + <pnt>7</pnt> + </polyline> + <polyline id="11" name="back_top"> + <pnt>2</pnt> + <pnt>6</pnt> + </polyline> + </polylines> + + <surfaces> + <surface id="0" name="left"><!-- x=0 --> + <element p1="0" p2="1" p3="2"/> + <element p1="0" p2="3" p3="2"/> + </surface> + <surface id="1" name="right"><!-- x=1 --> + <element p1="4" p2="6" p3="5"/> + <element p1="4" p2="6" p3="7"/> + </surface> + <surface id="2" name="top"><!-- z=1 --> + <element p1="1" p2="2" p3="5"/> + <element p1="5" p2="2" p3="6"/> + </surface> + <surface id="3" name="bottom"><!-- z=0 --> + <element p1="0" p2="3" p3="4"/> + <element p1="4" p2="3" p3="7"/> + </surface> + <surface id="4" name="front"><!-- y=0 --> + <element p1="0" p2="1" p3="4"/> + <element p1="4" p2="1" p3="5"/> + </surface> + <surface id="5" name="back"><!-- y=1 --> + <element p1="2" p2="3" p3="6"/> + <element p1="6" p2="3" p3="7"/> + </surface> + </surfaces> +</OpenGeoSysGLI> diff --git a/inst/extdata/flow_free_expansion/cube_1x1x1.vtu b/inst/extdata/flow_free_expansion/cube_1x1x1.vtu new file mode 100644 index 0000000..5595028 --- /dev/null +++ b/inst/extdata/flow_free_expansion/cube_1x1x1.vtu @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian" header_type="UInt32"> + <UnstructuredGrid> + <Piece NumberOfPoints="8" NumberOfCells="1" > + <PointData> + </PointData> + <CellData> + </CellData> + <Points> + <DataArray type="Float64" Name="Points" NumberOfComponents="3" format="appended" RangeMin="0" RangeMax="1.7320508076" offset="0" /> + </Points> + <Cells> + <DataArray type="Int64" Name="connectivity" format="appended" RangeMin="" RangeMax="" offset="264" /> + <DataArray type="Int64" Name="offsets" format="appended" RangeMin="" RangeMax="" offset="356" /> + <DataArray type="UInt8" Name="types" format="appended" RangeMin="" RangeMax="" offset="372" /> + </Cells> + </Piece> + </UnstructuredGrid> + <AppendedData encoding="base64"> + _wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPw==QAAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAFAAAAAAAAAAcAAAAAAAAABgAAAAAAAAA=CAAAAAgAAAAAAAAAAQAAAAw= + </AppendedData> +</VTKFile> diff --git a/inst/extdata/flow_free_expansion/cube_1x1x1_quad.vtu b/inst/extdata/flow_free_expansion/cube_1x1x1_quad.vtu new file mode 100644 index 0000000..cfbcf91 --- /dev/null +++ b/inst/extdata/flow_free_expansion/cube_1x1x1_quad.vtu @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian" header_type="UInt32"> + <UnstructuredGrid> + <Piece NumberOfPoints="20" NumberOfCells="1" > + <PointData> + </PointData> + <CellData> + </CellData> + <Points> + <DataArray type="Float64" Name="Points" NumberOfComponents="3" format="appended" RangeMin="0" RangeMax="1.7320508076" offset="0" /> + </Points> + <Cells> + <DataArray type="Int64" Name="connectivity" format="appended" RangeMin="" RangeMax="" offset="648" /> + <DataArray type="Int64" Name="offsets" format="appended" RangeMin="" RangeMax="" offset="868" /> + <DataArray type="UInt8" Name="types" format="appended" RangeMin="" RangeMax="" offset="884" /> + </Cells> + </Piece> + </UnstructuredGrid> + <AppendedData encoding="base64"> + _4AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADgPwAAAAAAAAAAAAAAAAAA4D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA4D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADgPwAAAAAAAOA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAOA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAOA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADgPwAAAAAAAPA/AAAAAAAA4D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAA4D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADgPw==oAAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAFAAAAAAAAAAcAAAAAAAAABgAAAAAAAAAMAAAAAAAAABEAAAAAAAAADgAAAAAAAAAJAAAAAAAAAA0AAAAAAAAAEgAAAAAAAAAPAAAAAAAAAAoAAAAAAAAACAAAAAAAAAAQAAAAAAAAABMAAAAAAAAACwAAAAAAAAA=CAAAABQAAAAAAAAAAQAAABk= + </AppendedData> +</VTKFile> diff --git a/inst/extdata/flow_free_expansion/flow_free_expansion.prj b/inst/extdata/flow_free_expansion/flow_free_expansion.prj new file mode 100644 index 0000000..291ec5c --- /dev/null +++ b/inst/extdata/flow_free_expansion/flow_free_expansion.prj @@ -0,0 +1,268 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<OpenGeoSysProject> + <mesh>cube_1x1x1_quad.vtu</mesh> + <geometry>cube_1x1x1.gml</geometry> + <processes> + <process> + <name>HM</name> + <type>HYDRO_MECHANICS</type> + <integration_order>3</integration_order> + <dimension>3</dimension> + <constitutive_relation> + <type>LinearElasticIsotropic</type> + <youngs_modulus>E</youngs_modulus> + <poissons_ratio>nu</poissons_ratio> + </constitutive_relation> + <process_variables> + <displacement>displacement</displacement> + <pressure>pressure</pressure> + </process_variables> + <secondary_variables> + <secondary_variable internal_name="sigma_xx" output_name="sigma_xx"/> + <secondary_variable internal_name="sigma_yy" output_name="sigma_yy"/> + <secondary_variable internal_name="sigma_zz" output_name="sigma_zz"/> + <secondary_variable internal_name="sigma_xy" output_name="sigma_xy"/> + <secondary_variable internal_name="epsilon_xx" output_name="epsilon_xx"/> + <secondary_variable internal_name="epsilon_yy" output_name="epsilon_yy"/> + <secondary_variable internal_name="epsilon_zz" output_name="epsilon_zz"/> + <secondary_variable internal_name="epsilon_xy" output_name="epsilon_xy"/> + <secondary_variable internal_name="velocity" output_name="velocity"/> + </secondary_variables> + <specific_body_force>0 0 0</specific_body_force> + </process> + </processes> + <media> + <medium> + <phases> + <phase> + <type>Gas</type> + <properties> + <property> + <name>viscosity</name> + <type>Constant</type> + <value>1e-5</value> + </property> + <property> + <name>density</name> + <type>IdealGasLaw</type> + </property> + <property> + <name>molar_mass</name> + <type>Constant</type> + <value>0.028964397787206768</value> + </property> + </properties> + </phase> + <phase> + <type>Solid</type> + <properties> + <property> + <name>porosity</name> + <type>Constant</type> + <value>0.3</value> + </property> + <property> + <name>density</name> + <type>Constant</type> + <value>1.43e3</value> + </property> + <property> + <name>biot_coefficient</name> + <type>Constant</type> + <value>0.6</value> + </property> + </properties> + </phase> + </phases> + <properties> + <property> + <name>reference_temperature</name> + <type>Constant</type> + <value>293.15</value> + </property> + <property> + <name>permeability</name> + <type>Constant</type> + <value>1e-5</value> + </property> + </properties> + </medium> + </media> + <time_loop> + <processes> + <process ref="HM"> + <nonlinear_solver>basic_newton</nonlinear_solver> + <convergence_criterion> + <type>DeltaX</type> + <norm_type>NORM2</norm_type> + <reltol>1e-8</reltol> + </convergence_criterion> + <time_discretization> + <type>BackwardEuler</type> + </time_discretization> + <time_stepping> + <type>FixedTimeStepping</type> + <t_initial>0</t_initial> + <t_end>10000</t_end> + <timesteps> + <pair> + <repeat>1000</repeat> + <delta_t>10</delta_t> + </pair> + </timesteps> + </time_stepping> + </process> + </processes> + <output> + <type>VTK</type> + <prefix>flow_free_expansion_pcs_{:process_id}</prefix> + <timesteps> + <pair> + <repeat>1</repeat> + <each_steps>1000</each_steps> + </pair> + </timesteps> + <variables> + <variable>displacement</variable> + <variable>pressure</variable> + <variable>sigma_xx</variable> + <variable>sigma_yy</variable> + <variable>sigma_zz</variable> + <variable>sigma_xy</variable> + <variable>epsilon_xx</variable> + <variable>epsilon_yy</variable> + <variable>epsilon_zz</variable> + <variable>epsilon_xy</variable> + <variable>velocity</variable> + </variables> + <suffix>_ts_{:timestep}_t_{:time}</suffix> + </output> + </time_loop> + <parameters> + <!-- Mechanics --> + <parameter> + <name>E</name> + <type>Constant</type> + <value>10e9</value> + </parameter> + <parameter> + <name>nu</name> + <type>Constant</type> + <value>.3</value> + </parameter> + <!-- Model parameters --> + <parameter> + <name>displacement0</name> + <type>Constant</type> + <values>0 0 0</values> + </parameter> + <parameter> + <name>pressure0</name> + <type>Constant</type> + <values>1e5</values> + </parameter> + <!-- pressure-load = -alpha_b * p0 --> + <parameter> + <name>pressure_load</name> + <type>Constant</type> + <values>-0.6e5</values> + </parameter> + <parameter> + <name>zero</name> + <type>Constant</type> + <value>0</value> + </parameter> + <parameter> + <name>flux_in</name> + <type>Constant</type> + <value>1e-4</value> + </parameter> + </parameters> + <process_variables> + <process_variable> + <name>displacement</name> + <components>3</components> + <order>2</order> + <initial_condition>displacement0</initial_condition> + <boundary_conditions> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>front</geometry> + <type>Dirichlet</type> + <component>1</component> + <parameter>zero</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>left</geometry> + <type>Dirichlet</type> + <component>0</component> + <parameter>zero</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>bottom</geometry> + <type>Dirichlet</type> + <component>2</component> + <parameter>zero</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>back</geometry> + <type>Neumann</type> + <component>1</component> + <parameter>pressure_load</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>right</geometry> + <type>Neumann</type> + <component>0</component> + <parameter>pressure_load</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>top</geometry> + <type>Neumann</type> + <component>2</component> + <parameter>pressure_load</parameter> + </boundary_condition> + </boundary_conditions> + </process_variable> + <process_variable> + <name>pressure</name> + <components>1</components> + <order>1</order> + <initial_condition>pressure0</initial_condition> + <boundary_conditions> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>left</geometry> + <type>Neumann</type> + <component>0</component> + <parameter>flux_in</parameter> + </boundary_condition> + </boundary_conditions> + </process_variable> + </process_variables> + <nonlinear_solvers> + <nonlinear_solver> + <name>basic_newton</name> + <type>Newton</type> + <max_iter>50</max_iter> + <linear_solver>general_linear_solver</linear_solver> + </nonlinear_solver> + </nonlinear_solvers> + <linear_solvers> + <linear_solver> + <name>general_linear_solver</name> + <lis>-i bicgstab -p ilu -tol 1e-16 -maxiter 10000</lis> + <eigen> + <solver_type>BiCGSTAB</solver_type> + <precon_type>ILUT</precon_type> + <max_iteration_step>10000</max_iteration_step> + <error_tolerance>1e-16</error_tolerance> + </eigen> + </linear_solver> + </linear_solvers> +</OpenGeoSysProject> diff --git a/inst/extdata/flow_free_expansion/flow_free_expansion_pcs_0.pvd b/inst/extdata/flow_free_expansion/flow_free_expansion_pcs_0.pvd new file mode 100644 index 0000000..3977b2f --- /dev/null +++ b/inst/extdata/flow_free_expansion/flow_free_expansion_pcs_0.pvd @@ -0,0 +1,7 @@ +<?xml version="1.0"?> +<VTKFile type="Collection" version="0.1" byte_order="LittleEndian" compressor="vtkZLibDataCompressor"> + <Collection> + <DataSet timestep="0" group="" part="0" file="flow_free_expansion_pcs_0_ts_0_t_0.000000.vtu"/> + <DataSet timestep="10000" group="" part="0" file="flow_free_expansion_pcs_0_ts_1000_t_10000.000000.vtu"/> + </Collection> +</VTKFile> diff --git a/inst/extdata/flow_free_expansion/flow_free_expansion_pcs_0_ts_0_t_0.000000.vtu b/inst/extdata/flow_free_expansion/flow_free_expansion_pcs_0_ts_0_t_0.000000.vtu new file mode 100644 index 0000000..2b88d13 --- /dev/null +++ b/inst/extdata/flow_free_expansion/flow_free_expansion_pcs_0_ts_0_t_0.000000.vtu @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<VTKFile type="UnstructuredGrid" version="1.0" byte_order="LittleEndian" header_type="UInt64" compressor="vtkZLibDataCompressor"> + <UnstructuredGrid> + <FieldData> + <DataArray type="Int8" Name="IntegrationPointMetaData" NumberOfTuples="166" format="appended" RangeMin="34" RangeMax="125" offset="0" /> + <DataArray type="Int8" Name="OGS_VERSION" NumberOfTuples="20" format="appended" RangeMin="45" RangeMax="103" offset="176" /> + <DataArray type="Float64" Name="epsilon_ip" NumberOfComponents="6" NumberOfTuples="27" format="appended" RangeMin="0" RangeMax="0" offset="260" /> + <DataArray type="Float64" Name="sigma_ip" NumberOfComponents="6" NumberOfTuples="27" format="appended" RangeMin="0" RangeMax="0" offset="332" /> + </FieldData> + <Piece NumberOfPoints="20" NumberOfCells="1" > + <PointData> + <DataArray type="Float64" Name="HydraulicFlow" format="appended" RangeMin="0" RangeMax="0" offset="404" /> + <DataArray type="Float64" Name="NodalForces" NumberOfComponents="3" format="appended" RangeMin="0" RangeMax="0" offset="464" /> + <DataArray type="Float64" Name="displacement" NumberOfComponents="3" format="appended" RangeMin="0" RangeMax="0" offset="528" /> + <DataArray type="Float64" Name="epsilon_xx" format="appended" RangeMin="0" RangeMax="0" offset="592" /> + <DataArray type="Float64" Name="epsilon_xy" format="appended" RangeMin="0" RangeMax="0" offset="652" /> + <DataArray type="Float64" Name="epsilon_yy" format="appended" RangeMin="0" RangeMax="0" offset="712" /> + <DataArray type="Float64" Name="epsilon_zz" format="appended" RangeMin="0" RangeMax="0" offset="772" /> + <DataArray type="Float64" Name="pressure" format="appended" RangeMin="0" RangeMax="100000" offset="832" /> + <DataArray type="Float64" Name="pressure_interpolated" format="appended" RangeMin="100000" RangeMax="100000" offset="904" /> + <DataArray type="Float64" Name="sigma_xx" format="appended" RangeMin="0" RangeMax="0" offset="972" /> + <DataArray type="Float64" Name="sigma_xy" format="appended" RangeMin="0" RangeMax="0" offset="1032" /> + <DataArray type="Float64" Name="sigma_yy" format="appended" RangeMin="0" RangeMax="0" offset="1092" /> + <DataArray type="Float64" Name="sigma_zz" format="appended" RangeMin="0" RangeMax="0" offset="1152" /> + <DataArray type="Float64" Name="velocity" NumberOfComponents="3" format="appended" RangeMin="1.0362684928e-12" RangeMax="4.203568835e-11" offset="1212" /> + </PointData> + <CellData> + <DataArray type="Float64" Name="permeability" NumberOfComponents="6" format="appended" RangeMin="1.7320508076e-05" RangeMax="1.7320508076e-05" offset="1644" /> + <DataArray type="Float64" Name="principal_stress_values" NumberOfComponents="3" format="appended" RangeMin="0" RangeMax="0" offset="1720" /> + <DataArray type="Float64" Name="principal_stress_vector_1" NumberOfComponents="3" format="appended" RangeMin="1" RangeMax="1" offset="1780" /> + <DataArray type="Float64" Name="principal_stress_vector_2" NumberOfComponents="3" format="appended" RangeMin="1" RangeMax="1" offset="1848" /> + <DataArray type="Float64" Name="principal_stress_vector_3" NumberOfComponents="3" format="appended" RangeMin="1" RangeMax="1" offset="1912" /> + </CellData> + <Points> + <DataArray type="Float64" Name="Points" NumberOfComponents="3" format="appended" RangeMin="0" RangeMax="1.7320508076" offset="1976" /> + </Points> + <Cells> + <DataArray type="Int64" Name="connectivity" format="appended" RangeMin="" RangeMax="" offset="2104" /> + <DataArray type="Int64" Name="offsets" format="appended" RangeMin="" RangeMax="" offset="2212" /> + <DataArray type="UInt8" Name="types" format="appended" RangeMin="" RangeMax="" offset="2272" /> + </Cells> + </Piece> + </UnstructuredGrid> + <AppendedData encoding="base64"> + _AQAAAAAAAAAAgAAAAAAAAKYAAAAAAAAAYwAAAAAAAAA=eF6FzDEKgDAMheG7ZO7k4NCriISoUQI2KWkdRLy7XV10fO+H7wLRyptTFVPM1haSO50F4nC9ovnCDrELoJQYIhTZEqFkaM+RJna0FWdL2ZS1NqC/ww/Bucjewicy3g8l5D0kAQAAAAAAAAAAgAAAAAAAABQAAAAAAAAAHAAAAAAAAAA=eF4z0zPWM9I1NjPVTU9Os0xOMTOySAEAMNgFJA==AQAAAAAAAAAAgAAAAAAAABAFAAAAAAAAEwAAAAAAAAA=eF5jYBgFo2AUjIJRAAIABRAAAQ==AQAAAAAAAAAAgAAAAAAAABAFAAAAAAAAEwAAAAAAAAA=eF5jYBgFo2AUjIJRAAIABRAAAQ==AQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAADAAAAAAAAAA=eF5jYBjcAAAAoAABAQAAAAAAAAAAgAAAAAAAAOABAAAAAAAADgAAAAAAAAA=eF5jYBgFwxkAAAHgAAE=AQAAAAAAAAAAgAAAAAAAAOABAAAAAAAADgAAAAAAAAA=eF5jYBgFwxkAAAHgAAE=AQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAADAAAAAAAAAA=eF5jYBjcAAAAoAABAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAADAAAAAAAAAA=eF5jYBjcAAAAoAABAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAADAAAAAAAAAA=eF5jYBjcAAAAoAABAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAADAAAAAAAAAA=eF5jYBjcAAAAoAABAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAEwAAAAAAAAA=eF5jYACCrB8ODJTQNAQAcCoNEQ==AQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAEgAAAAAAAAA=eF5jYACCrB8ODIOUBgD3nyCpAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAADAAAAAAAAAA=eF5jYBjcAAAAoAABAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAADAAAAAAAAAA=eF5jYBjcAAAAoAABAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAADAAAAAAAAAA=eF5jYBjcAAAAoAABAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAADAAAAAAAAAA=eF5jYBjcAAAAoAABAQAAAAAAAAAAgAAAAAAAAOABAAAAAAAAIQEAAAAAAAA=eF5jYICAhfM/zzhVE7E3Ilt2n03Rlr1QYQYOvvZzDJ3dey3rL817dHQXXDwUqp6jgTH5tPRxW5g4F0y9mJirY+IcuLiN3Ooj7bND9p65NWvZ0lyE+W0rVsg1b2/f+8Ji4srzrTvh4iug6rliDA7yciHMnwRVfzFcYfHcYoT59s066uu2Ru2VUY4x+piPML8E6s4ZXs9M3mkXwtV7QM1/U3mHdfqTIrh4GtQcoXcSk94IIewNCAUB1b2958rfLI5fCxe/EQIRD5oyjW3nNIR4AlT97S9fddnLtsLdwwBV/2XiswU1UQjxf0fyJ8z/175X8Y6hyk1VRDizQsPzeoGLfO7ihXDzW6HhsMYs2bLpFkL8B9QcFXPpkvysObYAxDKfSA==AQAAAAAAAAAAgAAAAAAAADAAAAAAAAAAFgAAAAAAAAA=eF77lPG4Y+uPJ3af0GgGHAAAZjoQvQ==AQAAAAAAAAAAgAAAAAAAABgAAAAAAAAACwAAAAAAAAA=eF5jYMAOAAAYAAE=AQAAAAAAAAAAgAAAAAAAABgAAAAAAAAAEAAAAAAAAAA=eF5jYACBD/YMaAAAFScBMA==AQAAAAAAAAAAgAAAAAAAABgAAAAAAAAADwAAAAAAAAA=eF5jYEAGH+xhLAALrwEwAQAAAAAAAAAAgAAAAAAAABgAAAAAAAAADgAAAAAAAAA=eF5jYMAGPtgDAAI3ATA=AQAAAAAAAAAAgAAAAAAAAOABAAAAAAAAPwAAAAAAAAA=eF5jYMAHPtjjlcaQh/GJ1YdLPy51uGh08ABNHJ2PLo7L3gdoNDpAF0fXh24uujguf6CrI9YedPqBPQBopCndAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAMAAAAAAAAAA=eF4txUkCgBAAAECpiKLt/391MHOZEKbFq6M3785Ovvy6u7j58+3qw49/nx4uqAC/AQAAAAAAAAAAgAAAAAAAAAgAAAAAAAAACwAAAAAAAAA=eF4TYYAAAACoABU=AQAAAAAAAAAAgAAAAAAAAAEAAAAAAAAACQAAAAAAAAA=eF6TBAAAGgAa + </AppendedData> +</VTKFile> diff --git a/inst/extdata/flow_free_expansion/flow_free_expansion_pcs_0_ts_1000_t_10000.000000.vtu b/inst/extdata/flow_free_expansion/flow_free_expansion_pcs_0_ts_1000_t_10000.000000.vtu new file mode 100644 index 0000000..6f56001 --- /dev/null +++ b/inst/extdata/flow_free_expansion/flow_free_expansion_pcs_0_ts_1000_t_10000.000000.vtu @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<VTKFile type="UnstructuredGrid" version="1.0" byte_order="LittleEndian" header_type="UInt64" compressor="vtkZLibDataCompressor"> + <UnstructuredGrid> + <FieldData> + <DataArray type="Int8" Name="IntegrationPointMetaData" NumberOfTuples="166" format="appended" RangeMin="34" RangeMax="125" offset="0" /> + <DataArray type="Int8" Name="OGS_VERSION" NumberOfTuples="20" format="appended" RangeMin="45" RangeMax="103" offset="176" /> + <DataArray type="Float64" Name="epsilon_ip" NumberOfComponents="6" NumberOfTuples="27" format="appended" RangeMin="1.1659775813e-05" RangeMax="1.1659775814e-05" offset="260" /> + <DataArray type="Float64" Name="sigma_ip" NumberOfComponents="6" NumberOfTuples="27" format="appended" RangeMin="291494.39533" RangeMax="291494.39534" offset="1576" /> + </FieldData> + <Piece NumberOfPoints="20" NumberOfCells="1" > + <PointData> + <DataArray type="Float64" Name="HydraulicFlow" format="appended" RangeMin="-3.0029926662e-10" RangeMax="2.4999948271e-05" offset="2880" /> + <DataArray type="Float64" Name="NodalForces" NumberOfComponents="3" format="appended" RangeMin="8660.2540378" RangeMax="28284.271248" offset="3028" /> + <DataArray type="Float64" Name="displacement" NumberOfComponents="3" format="appended" RangeMin="0" RangeMax="1.1659775813e-05" offset="3348" /> + <DataArray type="Float64" Name="epsilon_xx" format="appended" RangeMin="6.7317747044e-06" RangeMax="6.7317747049e-06" offset="3620" /> + <DataArray type="Float64" Name="epsilon_xy" format="appended" RangeMin="-8.9736613229e-17" RangeMax="3.7491046973e-21" offset="3784" /> + <DataArray type="Float64" Name="epsilon_yy" format="appended" RangeMin="6.7317747044e-06" RangeMax="6.7317747047e-06" offset="4056" /> + <DataArray type="Float64" Name="epsilon_zz" format="appended" RangeMin="6.7317747044e-06" RangeMax="6.7317747047e-06" offset="4228" /> + <DataArray type="Float64" Name="pressure" format="appended" RangeMin="0" RangeMax="380490.6127" offset="4396" /> + <DataArray type="Float64" Name="pressure_interpolated" format="appended" RangeMin="380490.61268" RangeMax="380490.6127" offset="4492" /> + <DataArray type="Float64" Name="sigma_xx" format="appended" RangeMin="168294.36761" RangeMax="168294.36762" offset="4604" /> + <DataArray type="Float64" Name="sigma_xy" format="appended" RangeMin="-4.8810282873e-07" RangeMax="2.0392441191e-11" offset="4764" /> + <DataArray type="Float64" Name="sigma_yy" format="appended" RangeMin="168294.36761" RangeMax="168294.36762" offset="5036" /> + <DataArray type="Float64" Name="sigma_zz" format="appended" RangeMin="168294.36761" RangeMax="168294.36762" offset="5208" /> + <DataArray type="Float64" Name="velocity" NumberOfComponents="3" format="appended" RangeMin="1.1058101093e-05" RangeMax="1.1058351392e-05" offset="5380" /> + </PointData> + <CellData> + <DataArray type="Float64" Name="permeability" NumberOfComponents="6" format="appended" RangeMin="1.7320508076e-05" RangeMax="1.7320508076e-05" offset="5920" /> + <DataArray type="Float64" Name="principal_stress_values" NumberOfComponents="3" format="appended" RangeMin="291494.39534" RangeMax="291494.39534" offset="5996" /> + <DataArray type="Float64" Name="principal_stress_vector_1" NumberOfComponents="3" format="appended" RangeMin="1" RangeMax="1" offset="6072" /> + <DataArray type="Float64" Name="principal_stress_vector_2" NumberOfComponents="3" format="appended" RangeMin="1" RangeMax="1" offset="6160" /> + <DataArray type="Float64" Name="principal_stress_vector_3" NumberOfComponents="3" format="appended" RangeMin="1" RangeMax="1" offset="6244" /> + </CellData> + <Points> + <DataArray type="Float64" Name="Points" NumberOfComponents="3" format="appended" RangeMin="0" RangeMax="1.7320508076" offset="6332" /> + </Points> + <Cells> + <DataArray type="Int64" Name="connectivity" format="appended" RangeMin="" RangeMax="" offset="6460" /> + <DataArray type="Int64" Name="offsets" format="appended" RangeMin="" RangeMax="" offset="6568" /> + <DataArray type="UInt8" Name="types" format="appended" RangeMin="" RangeMax="" offset="6628" /> + </Cells> + </Piece> + </UnstructuredGrid> + <AppendedData encoding="base64"> + _AQAAAAAAAAAAgAAAAAAAAKYAAAAAAAAAYwAAAAAAAAA=eF6FzDEKgDAMheG7ZO7k4NCriISoUQI2KWkdRLy7XV10fO+H7wLRyptTFVPM1haSO50F4nC9ovnCDrELoJQYIhTZEqFkaM+RJna0FWdL2ZS1NqC/ww/Bucjewicy3g8l5D0kAQAAAAAAAAAAgAAAAAAAABQAAAAAAAAAHAAAAAAAAAA=eF4z0zPWM9I1NjPVTU9Os0xOMTOySAEAMNgFJA==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ARzmprArCo0gLCHvqEIPE89u5hlqs4pgG+/KNF+ZBjlZQ7MOqgj+B6zqg3s=AQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAATQAAAAAAAAA=eF57fkI49rLZL7uWfT6rXi/6spd1+r/EO0D+Ar4ij1jxo3uzp4S+BfF52maGXHd9ulf1lHDsfSD/wmfVJ2y+J2wZwOBHPa1oAF8DM6Y=AQAAAAAAAAAAgAAAAAAAAOABAAAAAAAAzgAAAAAAAAA=eF5jcGFgYOjYfMCj8v///+2bD4RBaREGsLjDi3aI/A0ofUufEUxzQOWXPICol4DyWaC0SiJUH1T9CjR1MPMNoOqkoPyEW6jmi6DRDFBaDEo/2QSiLztwVUNosDxDw94Xm1D4tmxQ+Vt3QO6AiSfYsoHNuXzgClQcxofIN9lC6I22Pzgh+v9wIpnrsGnvrBcQfRzI+hoW2LJA+SteINu3Zi8DVBwm/+8/WP6A2mJkdZvh6iD8Fls5qDwLsnhDsS0TmnkwPlh+wpa9AN0rojg=AQAAAAAAAAAAgAAAAAAAAOABAAAAAAAAqQAAAAAAAAA=eF5jYMAOLKK4VQxs7tjhkGaoWMmLIn/tBg+Yf+UDJ1591VB9n6HqYeKX0PSpuUHUyULpYm0+MK0pzgWmJaE0uvn8dSD1Z+DiYmh8GJDygogHlaD6wxvKV4HKu2TxYNXPEcyHIi6gCfHPmyCI+D8NVP/tkhIAi3MzQcQ5oPTpQtRwXhzOBVZ3Diq+BMqHyeu8hehTzICIT+KDhIM4VHwdlK8MlQcA7/5ZjQ==AQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAWgAAAAAAAAA=eF5zqOJVMbC5Y6dvxQmmBc/yg+mDTyB8Xih/P5TPxCUEptl9ucD0498Q/cx/IHRjmACYLoPSVlHcEHU3eMD0fShdpM0Hpvc85wDTK6D0yWaIPaehNADSATeqAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAqwAAAAAAAAA=eF4BoABf/wAAcidkCaK7lR59m5t6ibwW7smyZN2ZvASiC/qNj4e8gIFsNmnLsbuylYhhvMSGvDGNCKTYRZW84gwahUvpgrwAgj20Y7SxO/fEXvjWZ4O8tsPDIyHfgbyH3bdF0/GWvGRWDq+MG3C8F06UJjzRaLytkvSsPnqQvF+4sbbhjIm8PtNzrVJ5hrwfdcq/PA6CvPpzL+uCb4G82tqrhmFSgrw9MlXkAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAXgAAAAAAAAA=eF6bEcSrYmBzx657HxeY9mPgA9NOypxgmtUPIi+0EyJvYwfhB5VC5C/5QPgdKyG0nBuE3jAbQpek8IDp52EQevZbbjAtuxZCdxyDmHvmA8Q8HXEI/3MYhA8A06E0bA==AQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAXQAAAAAAAAA=eF6bF8SrYmBzx65+HxeYtvGD8F13Qvg+DHxg2lSZE0zz2UHktUoh/KqVEP53Hwi9bTaEVnSD0LUpPGB6zltuiHg4hM+4FsJ/9AFiTt4xiH07wiB8DXEIHwDbCDNxAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAJgAAAAAAAAA=eF5bUJRWrGUp7tjakwym56Px50H5bVD+Aii/BcpnoDEAAK6+FR4=AQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAMwAAAAAAAAA=eF5bUJRWrGUp7tjakwym56Px50H5bVD+Aii/BU09TBydP+l/Cl4aZm4rGg0zHwA07zbIAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAVgAAAAAAAAA=eF67sujBB6NuFsc3UvfAtP+Kh2B6rziE7wblH4Pyi1Mfgen/UL7jY4j+ECj9+TRE/SMovav2PphO+wuhS6D0yiiI+qybd8F0EJQ2vw+hvaA0ACHWT9k=AQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAqwAAAAAAAAA=eF4BoABf/wCAml+c16a9x3iDBDgikL6uwLJ4xWCgvl9FRF6N1o2+AOGf+R2Jtr2pMwg2stWMviDteObK8Jq+urclcCvzh74ARLA/9mu2PTO/kRBuk4i+CBaK1Baihr4sQb9+zA6dvkJAY60xZnS+ojEqPvBtb75r5lqBHt6UvlGizkTKLZC+B7/32jB2jL5wIaWAv92Gvqc0lYe7FIa+gLErHww0h74eGFHzAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAXgAAAAAAAAA=eF57NvPBB6NuFsebhffAtLLjQzCd9eYumFaThPCd3CHy04Ig/NXPIfJMeyD6H16A0EEyEPkUfQgdu/M+mA55AKEPnYDQx09D6HYXiLnbRCC0EQOEtr4KMR8AKnxLyQ==AQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAXgAAAAAAAAA=eF57PfPBB6NuFscbhffAtJ/kQzBd5A7hCzpC+Plv7oLp6UEQ/o7nEP61CxD96nsgdJE+RN5PBkJH7bwPpneegNARDyD0hdMQepsIxJ45LhDa4CrEXFsGCB8AbDxMYA==AQAAAAAAAAAAgAAAAAAAAOABAAAAAAAAdAEAAAAAAAA=eF5b/nzFmusGz+3OKO3YuWXubduEY0azp695absHKu7mrrkg4OcW2yWWt6IllDfs3VRiO/kUUHwzVL3MQRW1k5zn9u6Eih+Aqv98pDfm+Icntn9Mc68fBYqXup5pdZv2am9NlnDi3rUvbRnNIOKc/im8e+9dtg2LWv/oievqvT8PMdq9AIpnQdULcR7PdNE9t1fqMERcDqreLDNP6e3HJ7YrgjkaTwPFC5Yvj3gfe2GvylzJiSxLX9p+dpabexkovgfqTp3jhTLHC5fZiu15mHQBKJ4CNX9L8PqAj/eX2Yat+f7vFlA8EWpO5eQ/NxQFz+3dDg2HOauAQGu7bdPNiAW8L2/Y/oD6ayVUnLn7wbNL327YboGGwwKouBr/bk19kR17v0P9dRgqvslzDr/U3e17d0Ld/9rPf+M967O28pX1O+x11+x9CHV/EzQ8J1mbvJjDvMxWBup+Vmg4KEP9lQB1/3GoOednlwSZvHxiCwB6oPz2AQAAAAAAAAAAgAAAAAAAADAAAAAAAAAAFgAAAAAAAAA=eF77lPG4Y+uPJ3af0GgGHAAAZjoQvQ==AQAAAAAAAAAAgAAAAAAAABgAAAAAAAAAFwAAAAAAAAA=eF4Tr73/waibxTFqDoQO2AGhAY0zCwY=AQAAAAAAAAAAgAAAAAAAABgAAAAAAAAAIAAAAAAAAAA=eF47ejH+VfbpJ/u/qUxZ+tjo4f7LZuJnTgNpAMXyD0o=AQAAAAAAAAAAgAAAAAAAABgAAAAAAAAAHAAAAAAAAAA=eF5jYIAA971y2/oWPNvff/OK2LoFz+wBTigJcQ==AQAAAAAAAAAAgAAAAAAAABgAAAAAAAAAHwAAAAAAAAA=eF57prLYvz/ohf2bTN/bHRl39y+XrRZOANIAoAQMxA==AQAAAAAAAAAAgAAAAAAAAOABAAAAAAAAPwAAAAAAAAA=eF5jYMAHPtjjlcaQh/GJ1YdLPy51uGh08ABNHJ2PLo7L3gdoNDpAF0fXh24uujguf6CrI9YedPqBPQBopCndAQAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAMAAAAAAAAAA=eF4txUkCgBAAAECpiKLt/391MHOZEKbFq6M3785Ovvy6u7j58+3qw49/nx4uqAC/AQAAAAAAAAAAgAAAAAAAAAgAAAAAAAAACwAAAAAAAAA=eF4TYYAAAACoABU=AQAAAAAAAAAAgAAAAAAAAAEAAAAAAAAACQAAAAAAAAA=eF6TBAAAGgAa + </AppendedData> +</VTKFile> diff --git a/inst/extdata/flow_free_expansion/playground/cube_1x1x1.vtu b/inst/extdata/flow_free_expansion/playground/cube_1x1x1.vtu new file mode 100644 index 0000000..b440638 --- /dev/null +++ b/inst/extdata/flow_free_expansion/playground/cube_1x1x1.vtu @@ -0,0 +1,19 @@ +<?xml version="1.0"?> +<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian" header_type="UInt32"> + <UnstructuredGrid> + <Piece NumberOfPoints="8" NumberOfCells="1" > + <PointData> + </PointData> + <CellData> + </CellData> + <Points> + <DataArray type="Float64" Name="Points" NumberOfComponents="3" format="appended" RangeMin="0" RangeMax="1.7320508076" offset="0" /> + </Points> + <Cells> + <DataArray type="Int64" Name="connectivity" format="appended" RangeMin="" RangeMax="" offset="264" /> + <DataArray type="Int64" Name="offsets" format="appended" RangeMin="" RangeMax="" offset="356" /> + <DataArray type="UInt8" Name="types" format="appended" RangeMin="" RangeMax="" offset="372" /> + </Cells> + </Piece> + </UnstructuredGrid> +</VTKFile> diff --git a/inst/extdata/flow_free_expansion/playground/cube_1x1x1_quad.vtu b/inst/extdata/flow_free_expansion/playground/cube_1x1x1_quad.vtu new file mode 100644 index 0000000..cfbcf91 --- /dev/null +++ b/inst/extdata/flow_free_expansion/playground/cube_1x1x1_quad.vtu @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian" header_type="UInt32"> + <UnstructuredGrid> + <Piece NumberOfPoints="20" NumberOfCells="1" > + <PointData> + </PointData> + <CellData> + </CellData> + <Points> + <DataArray type="Float64" Name="Points" NumberOfComponents="3" format="appended" RangeMin="0" RangeMax="1.7320508076" offset="0" /> + </Points> + <Cells> + <DataArray type="Int64" Name="connectivity" format="appended" RangeMin="" RangeMax="" offset="648" /> + <DataArray type="Int64" Name="offsets" format="appended" RangeMin="" RangeMax="" offset="868" /> + <DataArray type="UInt8" Name="types" format="appended" RangeMin="" RangeMax="" offset="884" /> + </Cells> + </Piece> + </UnstructuredGrid> + <AppendedData encoding="base64"> + _4AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADgPwAAAAAAAAAAAAAAAAAA4D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA4D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADgPwAAAAAAAOA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAOA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAOA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADgPwAAAAAAAPA/AAAAAAAA4D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAA4D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADgPw==oAAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAFAAAAAAAAAAcAAAAAAAAABgAAAAAAAAAMAAAAAAAAABEAAAAAAAAADgAAAAAAAAAJAAAAAAAAAA0AAAAAAAAAEgAAAAAAAAAPAAAAAAAAAAoAAAAAAAAACAAAAAAAAAAQAAAAAAAAABMAAAAAAAAACwAAAAAAAAA=CAAAABQAAAAAAAAAAQAAABk= + </AppendedData> +</VTKFile> diff --git a/inst/extdata/flow_free_expansion/playground/x_quad_with_half_hole_q.vtu b/inst/extdata/flow_free_expansion/playground/x_quad_with_half_hole_q.vtu new file mode 100644 index 0000000..015f24c --- /dev/null +++ b/inst/extdata/flow_free_expansion/playground/x_quad_with_half_hole_q.vtu @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian" header_type="UInt32"> + <UnstructuredGrid> + <Piece NumberOfPoints="3479" NumberOfCells="1114" > + <PointData> + </PointData> + <CellData> + <DataArray type="Int32" Name="MaterialIDs" format="appended" RangeMin="0" RangeMax="0" offset="0" /> + </CellData> + <Points> + <DataArray type="Float64" Name="Points" NumberOfComponents="3" format="appended" RangeMin="2.2980352443" RangeMax="55.901699437" offset="5948" /> + </Points> + <Cells> + <DataArray type="Int64" Name="connectivity" format="appended" RangeMin="" RangeMax="" offset="117284" /> + <DataArray type="Int64" Name="offsets" format="appended" RangeMin="" RangeMax="" offset="212352" /> + <DataArray type="UInt8" Name="types" format="appended" RangeMin="" RangeMax="" offset="224240" /> + </Cells> + </Piece> + </UnstructuredGrid> +</VTKFile> diff --git a/man/GMLObject.Rd b/man/GMLObject.Rd deleted file mode 100644 index 2e77fd7..0000000 --- a/man/GMLObject.Rd +++ /dev/null @@ -1,65 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml_R6.R -\name{GMLObject} -\alias{GMLObject} -\title{Class representing a GML object} -\value{ -The encoding of the input file -Class describing an entire GML object with a reference file name, points, polylines and surfaces -} -\description{ -Class representing a GML object - -Class representing a GML object -} -\section{Methods}{ -\subsection{Public methods}{ -\itemize{ -\item \href{#method-new}{\code{GMLObject$new()}} -\item \href{#method-as_node}{\code{GMLObject$as_node()}} -\item \href{#method-clone}{\code{GMLObject$clone()}} -} -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-new"></a>}} -\if{latex}{\out{\hypertarget{method-new}{}}} -\subsection{Method \code{new()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLObject$new( - name = NULL, - points = NULL, - polylines = NULL, - surfaces = NULL, - xmlns_xsi = "http://www.w3.org/2001/XMLSchema-instance", - xmlns_ogs = "http://www.opengeosys.org" -)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-as_node"></a>}} -\if{latex}{\out{\hypertarget{method-as_node}{}}} -\subsection{Method \code{as_node()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLObject$as_node(...)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-clone"></a>}} -\if{latex}{\out{\hypertarget{method-clone}{}}} -\subsection{Method \code{clone()}}{ -The objects of this class are cloneable with this method. -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLObject$clone(deep = FALSE)}\if{html}{\out{</div>}} -} - -\subsection{Arguments}{ -\if{html}{\out{<div class="arguments">}} -\describe{ -\item{\code{deep}}{Whether to make a deep clone.} -} -\if{html}{\out{</div>}} -} -} -} diff --git a/man/GMLPoint.Rd b/man/GMLPoint.Rd deleted file mode 100644 index 9fff657..0000000 --- a/man/GMLPoint.Rd +++ /dev/null @@ -1,74 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml_R6.R -\name{GMLPoint} -\alias{GMLPoint} -\title{Class describing a single point} -\description{ -Class describing a single point - -Class describing a single point -} -\section{Methods}{ -\subsection{Public methods}{ -\itemize{ -\item \href{#method-new}{\code{GMLPoint$new()}} -\item \href{#method-as_list}{\code{GMLPoint$as_list()}} -\item \href{#method-as_node}{\code{GMLPoint$as_node()}} -\item \href{#method-print}{\code{GMLPoint$print()}} -\item \href{#method-clone}{\code{GMLPoint$clone()}} -} -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-new"></a>}} -\if{latex}{\out{\hypertarget{method-new}{}}} -\subsection{Method \code{new()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPoint$new(id = 0, coordinates = c(0, 0, 0), is_origin = FALSE)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-as_list"></a>}} -\if{latex}{\out{\hypertarget{method-as_list}{}}} -\subsection{Method \code{as_list()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPoint$as_list(...)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-as_node"></a>}} -\if{latex}{\out{\hypertarget{method-as_node}{}}} -\subsection{Method \code{as_node()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPoint$as_node(...)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-print"></a>}} -\if{latex}{\out{\hypertarget{method-print}{}}} -\subsection{Method \code{print()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPoint$print(...)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-clone"></a>}} -\if{latex}{\out{\hypertarget{method-clone}{}}} -\subsection{Method \code{clone()}}{ -The objects of this class are cloneable with this method. -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPoint$clone(deep = FALSE)}\if{html}{\out{</div>}} -} - -\subsection{Arguments}{ -\if{html}{\out{<div class="arguments">}} -\describe{ -\item{\code{deep}}{Whether to make a deep clone.} -} -\if{html}{\out{</div>}} -} -} -} diff --git a/man/GMLPoints.Rd b/man/GMLPoints.Rd deleted file mode 100644 index 2b84e1a..0000000 --- a/man/GMLPoints.Rd +++ /dev/null @@ -1,104 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml_R6.R -\name{GMLPoints} -\alias{GMLPoints} -\title{Class describing a set of points} -\description{ -Class describing a set of points - -Class describing a set of points -} -\section{Methods}{ -\subsection{Public methods}{ -\itemize{ -\item \href{#method-new}{\code{GMLPoints$new()}} -\item \href{#method-validate_ids}{\code{GMLPoints$validate_ids()}} -\item \href{#method-validate_dim}{\code{GMLPoints$validate_dim()}} -\item \href{#method-validate_coordinates}{\code{GMLPoints$validate_coordinates()}} -\item \href{#method-as_list}{\code{GMLPoints$as_list()}} -\item \href{#method-as_node}{\code{GMLPoints$as_node()}} -\item \href{#method-print}{\code{GMLPoints$print()}} -\item \href{#method-clone}{\code{GMLPoints$clone()}} -} -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-new"></a>}} -\if{latex}{\out{\hypertarget{method-new}{}}} -\subsection{Method \code{new()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPoints$new(gml_points)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-validate_ids"></a>}} -\if{latex}{\out{\hypertarget{method-validate_ids}{}}} -\subsection{Method \code{validate_ids()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPoints$validate_ids(gml_points)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-validate_dim"></a>}} -\if{latex}{\out{\hypertarget{method-validate_dim}{}}} -\subsection{Method \code{validate_dim()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPoints$validate_dim(gml_points)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-validate_coordinates"></a>}} -\if{latex}{\out{\hypertarget{method-validate_coordinates}{}}} -\subsection{Method \code{validate_coordinates()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPoints$validate_coordinates(gml_points)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-as_list"></a>}} -\if{latex}{\out{\hypertarget{method-as_list}{}}} -\subsection{Method \code{as_list()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPoints$as_list(...)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-as_node"></a>}} -\if{latex}{\out{\hypertarget{method-as_node}{}}} -\subsection{Method \code{as_node()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPoints$as_node(...)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-print"></a>}} -\if{latex}{\out{\hypertarget{method-print}{}}} -\subsection{Method \code{print()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPoints$print(...)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-clone"></a>}} -\if{latex}{\out{\hypertarget{method-clone}{}}} -\subsection{Method \code{clone()}}{ -The objects of this class are cloneable with this method. -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPoints$clone(deep = FALSE)}\if{html}{\out{</div>}} -} - -\subsection{Arguments}{ -\if{html}{\out{<div class="arguments">}} -\describe{ -\item{\code{deep}}{Whether to make a deep clone.} -} -\if{html}{\out{</div>}} -} -} -} diff --git a/man/GMLPolyline.Rd b/man/GMLPolyline.Rd deleted file mode 100644 index b3283ac..0000000 --- a/man/GMLPolyline.Rd +++ /dev/null @@ -1,64 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml_R6.R -\name{GMLPolyline} -\alias{GMLPolyline} -\title{Class describing a single polyline} -\description{ -Class describing a single polyline - -Class describing a single polyline -} -\section{Methods}{ -\subsection{Public methods}{ -\itemize{ -\item \href{#method-new}{\code{GMLPolyline$new()}} -\item \href{#method-as_node}{\code{GMLPolyline$as_node()}} -\item \href{#method-print}{\code{GMLPolyline$print()}} -\item \href{#method-clone}{\code{GMLPolyline$clone()}} -} -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-new"></a>}} -\if{latex}{\out{\hypertarget{method-new}{}}} -\subsection{Method \code{new()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPolyline$new(id = 0, name = "front_left", point1 = 0, point2 = 1)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-as_node"></a>}} -\if{latex}{\out{\hypertarget{method-as_node}{}}} -\subsection{Method \code{as_node()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPolyline$as_node(...)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-print"></a>}} -\if{latex}{\out{\hypertarget{method-print}{}}} -\subsection{Method \code{print()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPolyline$print(...)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-clone"></a>}} -\if{latex}{\out{\hypertarget{method-clone}{}}} -\subsection{Method \code{clone()}}{ -The objects of this class are cloneable with this method. -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPolyline$clone(deep = FALSE)}\if{html}{\out{</div>}} -} - -\subsection{Arguments}{ -\if{html}{\out{<div class="arguments">}} -\describe{ -\item{\code{deep}}{Whether to make a deep clone.} -} -\if{html}{\out{</div>}} -} -} -} diff --git a/man/GMLPolylines.Rd b/man/GMLPolylines.Rd deleted file mode 100644 index 071ed9b..0000000 --- a/man/GMLPolylines.Rd +++ /dev/null @@ -1,74 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml_R6.R -\name{GMLPolylines} -\alias{GMLPolylines} -\title{Class describing a set of polylines} -\description{ -Class describing a set of polylines - -Class describing a set of polylines -} -\section{Methods}{ -\subsection{Public methods}{ -\itemize{ -\item \href{#method-new}{\code{GMLPolylines$new()}} -\item \href{#method-validate_ids}{\code{GMLPolylines$validate_ids()}} -\item \href{#method-validate_polylines}{\code{GMLPolylines$validate_polylines()}} -\item \href{#method-as_node}{\code{GMLPolylines$as_node()}} -\item \href{#method-clone}{\code{GMLPolylines$clone()}} -} -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-new"></a>}} -\if{latex}{\out{\hypertarget{method-new}{}}} -\subsection{Method \code{new()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPolylines$new(gml_polylines)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-validate_ids"></a>}} -\if{latex}{\out{\hypertarget{method-validate_ids}{}}} -\subsection{Method \code{validate_ids()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPolylines$validate_ids(gml_polylines)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-validate_polylines"></a>}} -\if{latex}{\out{\hypertarget{method-validate_polylines}{}}} -\subsection{Method \code{validate_polylines()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPolylines$validate_polylines(gml_polylines)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-as_node"></a>}} -\if{latex}{\out{\hypertarget{method-as_node}{}}} -\subsection{Method \code{as_node()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPolylines$as_node(...)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-clone"></a>}} -\if{latex}{\out{\hypertarget{method-clone}{}}} -\subsection{Method \code{clone()}}{ -The objects of this class are cloneable with this method. -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLPolylines$clone(deep = FALSE)}\if{html}{\out{</div>}} -} - -\subsection{Arguments}{ -\if{html}{\out{<div class="arguments">}} -\describe{ -\item{\code{deep}}{Whether to make a deep clone.} -} -\if{html}{\out{</div>}} -} -} -} diff --git a/man/GMLSurface.Rd b/man/GMLSurface.Rd deleted file mode 100644 index de15661..0000000 --- a/man/GMLSurface.Rd +++ /dev/null @@ -1,69 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml_R6.R -\name{GMLSurface} -\alias{GMLSurface} -\title{Class describing a single surface (using 2 GMLSurfaceElements)} -\description{ -Class describing a single surface (using 2 GMLSurfaceElements) - -Class describing a single surface (using 2 GMLSurfaceElements) -} -\section{Methods}{ -\subsection{Public methods}{ -\itemize{ -\item \href{#method-new}{\code{GMLSurface$new()}} -\item \href{#method-validate_elements}{\code{GMLSurface$validate_elements()}} -\item \href{#method-as_node}{\code{GMLSurface$as_node()}} -\item \href{#method-clone}{\code{GMLSurface$clone()}} -} -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-new"></a>}} -\if{latex}{\out{\hypertarget{method-new}{}}} -\subsection{Method \code{new()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLSurface$new( - id = 0, - name = "left", - gml_surface_element1 = GMLSurfaceElement$new(), - gml_surface_element2 = GMLSurfaceElement$new(p3 = 3) -)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-validate_elements"></a>}} -\if{latex}{\out{\hypertarget{method-validate_elements}{}}} -\subsection{Method \code{validate_elements()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLSurface$validate_elements(gml_surface_element1, gml_surface_element2)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-as_node"></a>}} -\if{latex}{\out{\hypertarget{method-as_node}{}}} -\subsection{Method \code{as_node()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLSurface$as_node()}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-clone"></a>}} -\if{latex}{\out{\hypertarget{method-clone}{}}} -\subsection{Method \code{clone()}}{ -The objects of this class are cloneable with this method. -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLSurface$clone(deep = FALSE)}\if{html}{\out{</div>}} -} - -\subsection{Arguments}{ -\if{html}{\out{<div class="arguments">}} -\describe{ -\item{\code{deep}}{Whether to make a deep clone.} -} -\if{html}{\out{</div>}} -} -} -} diff --git a/man/GMLSurfaceElement.Rd b/man/GMLSurfaceElement.Rd deleted file mode 100644 index 3a5c05b..0000000 --- a/man/GMLSurfaceElement.Rd +++ /dev/null @@ -1,64 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml_R6.R -\name{GMLSurfaceElement} -\alias{GMLSurfaceElement} -\title{Class describing a single surface element (using 3 point IDs)} -\description{ -Class describing a single surface element (using 3 point IDs) - -Class describing a single surface element (using 3 point IDs) -} -\section{Methods}{ -\subsection{Public methods}{ -\itemize{ -\item \href{#method-new}{\code{GMLSurfaceElement$new()}} -\item \href{#method-as_list}{\code{GMLSurfaceElement$as_list()}} -\item \href{#method-as_node}{\code{GMLSurfaceElement$as_node()}} -\item \href{#method-clone}{\code{GMLSurfaceElement$clone()}} -} -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-new"></a>}} -\if{latex}{\out{\hypertarget{method-new}{}}} -\subsection{Method \code{new()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLSurfaceElement$new(p1 = 0, p2 = 1, p3 = 2)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-as_list"></a>}} -\if{latex}{\out{\hypertarget{method-as_list}{}}} -\subsection{Method \code{as_list()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLSurfaceElement$as_list(...)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-as_node"></a>}} -\if{latex}{\out{\hypertarget{method-as_node}{}}} -\subsection{Method \code{as_node()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLSurfaceElement$as_node(...)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-clone"></a>}} -\if{latex}{\out{\hypertarget{method-clone}{}}} -\subsection{Method \code{clone()}}{ -The objects of this class are cloneable with this method. -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLSurfaceElement$clone(deep = FALSE)}\if{html}{\out{</div>}} -} - -\subsection{Arguments}{ -\if{html}{\out{<div class="arguments">}} -\describe{ -\item{\code{deep}}{Whether to make a deep clone.} -} -\if{html}{\out{</div>}} -} -} -} diff --git a/man/GMLSurfaces.Rd b/man/GMLSurfaces.Rd deleted file mode 100644 index 8440c35..0000000 --- a/man/GMLSurfaces.Rd +++ /dev/null @@ -1,64 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml_R6.R -\name{GMLSurfaces} -\alias{GMLSurfaces} -\title{Class describing a set of surfaces} -\description{ -Class describing a set of surfaces - -Class describing a set of surfaces -} -\section{Methods}{ -\subsection{Public methods}{ -\itemize{ -\item \href{#method-new}{\code{GMLSurfaces$new()}} -\item \href{#method-validate_ids}{\code{GMLSurfaces$validate_ids()}} -\item \href{#method-as_node}{\code{GMLSurfaces$as_node()}} -\item \href{#method-clone}{\code{GMLSurfaces$clone()}} -} -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-new"></a>}} -\if{latex}{\out{\hypertarget{method-new}{}}} -\subsection{Method \code{new()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLSurfaces$new(gml_surfaces)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-validate_ids"></a>}} -\if{latex}{\out{\hypertarget{method-validate_ids}{}}} -\subsection{Method \code{validate_ids()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLSurfaces$validate_ids(gml_surfaces)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-as_node"></a>}} -\if{latex}{\out{\hypertarget{method-as_node}{}}} -\subsection{Method \code{as_node()}}{ -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLSurfaces$as_node(...)}\if{html}{\out{</div>}} -} - -} -\if{html}{\out{<hr>}} -\if{html}{\out{<a id="method-clone"></a>}} -\if{latex}{\out{\hypertarget{method-clone}{}}} -\subsection{Method \code{clone()}}{ -The objects of this class are cloneable with this method. -\subsection{Usage}{ -\if{html}{\out{<div class="r">}}\preformatted{GMLSurfaces$clone(deep = FALSE)}\if{html}{\out{</div>}} -} - -\subsection{Arguments}{ -\if{html}{\out{<div class="arguments">}} -\describe{ -\item{\code{deep}}{Whether to make a deep clone.} -} -\if{html}{\out{</div>}} -} -} -} diff --git a/man/OGS6.Rd b/man/OGS6.Rd new file mode 100644 index 0000000..a2fc853 --- /dev/null +++ b/man/OGS6.Rd @@ -0,0 +1,74 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ogs6.R +\name{OGS6} +\alias{OGS6} +\title{Constructor for the OGS6 base class} +\description{ +Constructor for the OGS6 base class + +Constructor for the OGS6 base class +} +\section{Methods}{ +\subsection{Public methods}{ +\itemize{ +\item \href{#method-new}{\code{OGS6$new()}} +\item \href{#method-add_sim_input}{\code{OGS6$add_sim_input()}} +\item \href{#method-set_sim_input_obj_param}{\code{OGS6$set_sim_input_obj_param()}} +\item \href{#method-add_sim_output}{\code{OGS6$add_sim_output()}} +\item \href{#method-clone}{\code{OGS6$clone()}} +} +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-new"></a>}} +\if{latex}{\out{\hypertarget{method-new}{}}} +\subsection{Method \code{new()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{OGS6$new(sim_name, sim_id, sim_path)}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-add_sim_input"></a>}} +\if{latex}{\out{\hypertarget{method-add_sim_input}{}}} +\subsection{Method \code{add_sim_input()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{OGS6$add_sim_input(name, value)}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-set_sim_input_obj_param"></a>}} +\if{latex}{\out{\hypertarget{method-set_sim_input_obj_param}{}}} +\subsection{Method \code{set_sim_input_obj_param()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{OGS6$set_sim_input_obj_param(obj_name, obj_param_name, value)}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-add_sim_output"></a>}} +\if{latex}{\out{\hypertarget{method-add_sim_output}{}}} +\subsection{Method \code{add_sim_output()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{OGS6$add_sim_output(name, value)}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-clone"></a>}} +\if{latex}{\out{\hypertarget{method-clone}{}}} +\subsection{Method \code{clone()}}{ +The objects of this class are cloneable with this method. +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{OGS6$clone(deep = FALSE)}\if{html}{\out{</div>}} +} + +\subsection{Arguments}{ +\if{html}{\out{<div class="arguments">}} +\describe{ +\item{\code{deep}}{Whether to make a deep clone.} +} +\if{html}{\out{</div>}} +} +} +} diff --git a/man/add_opt_attr.Rd b/man/add_opt_attr.Rd new file mode 100644 index 0000000..f5c04bc --- /dev/null +++ b/man/add_opt_attr.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{add_opt_attr} +\alias{add_opt_attr} +\title{add_opt_attr} +\usage{ +add_opt_attr(node, obj_parameter, attr_name) +} +\arguments{ +\item{node}{The node the optional attribute should be added to} + +\item{obj_parameter}{The value of the attribute to be added} + +\item{attr_name}{The name of the attribute to be added} +} +\description{ +Adds an optional attribute to a node attribute list +} diff --git a/man/add_opt_child.Rd b/man/add_opt_child.Rd new file mode 100644 index 0000000..4ebcceb --- /dev/null +++ b/man/add_opt_child.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{add_opt_child} +\alias{add_opt_child} +\title{add_opt_child} +\usage{ +add_opt_child(node, obj_parameter, child_name = NULL) +} +\arguments{ +\item{node}{The node the optional child should be added to} + +\item{obj_parameter}{The value of the child to be added} + +\item{child_name}{Optional: If it's a child node instead of just a value, the name of the child to be added} +} +\description{ +Adds an optional child to a node child list +} diff --git a/man/adopt_nodes.Rd b/man/adopt_nodes.Rd new file mode 100644 index 0000000..a939fd6 --- /dev/null +++ b/man/adopt_nodes.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{adopt_nodes} +\alias{adopt_nodes} +\title{adopt_nodes} +\usage{ +adopt_nodes(parent_name, objs) +} +\arguments{ +\item{parent_name}{The name of the new parent node} + +\item{objs}{A list of class objects (class must have method for generic function as_node)} +} +\description{ +A helper function for creating parent nodes using the generic function as_node +} diff --git a/man/analyse_xml.Rd b/man/analyse_xml.Rd new file mode 100644 index 0000000..bfde46e --- /dev/null +++ b/man/analyse_xml.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/analyse_xml.R +\name{analyse_xml} +\alias{analyse_xml} +\title{analyse_xml} +\usage{ +analyse_xml(path, pattern, element_name) +} +\arguments{ +\item{path}{A path} + +\item{pattern}{A regex pattern} + +\item{element_name}{The name of the XML element to look for} +} +\description{ +This is a helper function which can be used to combat missing documentation. It looks + for files in a path which match the given pattern and then attempts to parse them as XML. + For each occurence of the specified element, it documents its attributes and direct children and prints a little + summary of its findings at the end. +} diff --git a/man/as_node.Rd b/man/as_node.Rd new file mode 100644 index 0000000..d3e3179 --- /dev/null +++ b/man/as_node.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/generics.R +\name{as_node} +\alias{as_node} +\title{S3 generic function, use to turn class data into XML friendly format} +\usage{ +as_node(obj) +} +\arguments{ +\item{obj}{A class object (must have implementation for as_node)} +} +\description{ +S3 generic function, use to turn class data into XML friendly format +} diff --git a/man/as_node.data_array.Rd b/man/as_node.data_array.Rd new file mode 100644 index 0000000..f4cd308 --- /dev/null +++ b/man/as_node.data_array.Rd @@ -0,0 +1,11 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/input_add_vtu.R +\name{as_node.data_array} +\alias{as_node.data_array} +\title{as_node.data_array} +\usage{ +\method{as_node}{data_array}(obj) +} +\description{ +Implementation of the generic function as_node for data_array class objects +} diff --git a/man/as_node.r2ogs6_prj_medium_phase.Rd b/man/as_node.r2ogs6_prj_medium_phase.Rd new file mode 100644 index 0000000..4093e1e --- /dev/null +++ b/man/as_node.r2ogs6_prj_medium_phase.Rd @@ -0,0 +1,11 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/export_prj.R +\name{as_node.r2ogs6_prj_medium_phase} +\alias{as_node.r2ogs6_prj_medium_phase} +\title{Method for coercing an r2ogs_prj_medium_phase class object into the structure expected by xml2} +\usage{ +\method{as_node}{r2ogs6_prj_medium_phase}(obj) +} +\description{ +Method for coercing an r2ogs_prj_medium_phase class object into the structure expected by xml2 +} diff --git a/man/as_node.r2ogs6_prj_property.Rd b/man/as_node.r2ogs6_prj_property.Rd new file mode 100644 index 0000000..9d0ae02 --- /dev/null +++ b/man/as_node.r2ogs6_prj_property.Rd @@ -0,0 +1,11 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/export_prj.R +\name{as_node.r2ogs6_prj_property} +\alias{as_node.r2ogs6_prj_property} +\title{Method for coercing an r2ogs6_prj_property class object into the structure expected by xml2} +\usage{ +\method{as_node}{r2ogs6_prj_property}(obj) +} +\description{ +Method for coercing an r2ogs6_prj_property class object into the structure expected by xml2 +} diff --git a/man/check_for_obj_of_name.Rd b/man/check_for_obj_of_name.Rd new file mode 100644 index 0000000..6a45903 --- /dev/null +++ b/man/check_for_obj_of_name.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{check_for_obj_of_name} +\alias{check_for_obj_of_name} +\title{check_for_obj_of_name} +\usage{ +check_for_obj_of_name(ogs6_obj, obj_name) +} +\arguments{ +\item{ogs6_obj}{The ogs6 object to check} + +\item{obj_name}{The name of the object to check for} +} +\description{ +Checks if a object with the given name was already defined for a ogs6 object and if not, +tells user to initialize one +} diff --git a/man/create_gml_from_obj.Rd b/man/create_gml_from_obj.Rd deleted file mode 100644 index 5e83857..0000000 --- a/man/create_gml_from_obj.Rd +++ /dev/null @@ -1,19 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml_R6.R -\name{create_gml_from_obj} -\alias{create_gml_from_obj} -\title{Creates a .gml XML file based on an GML object} -\usage{ -create_gml_from_obj(gml_object, file_name) -} -\arguments{ -\item{gml_object}{The specified GML object (of class GMLObject)} - -\item{file_name}{The name of the file the XML will be written to} -} -\value{ -WIP -} -\description{ -Creates a .gml XML file based on an GML object -} diff --git a/man/create_template_prj.Rd b/man/create_template_prj.Rd deleted file mode 100644 index a83651b..0000000 --- a/man/create_template_prj.Rd +++ /dev/null @@ -1,19 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utils.R -\name{create_template_prj} -\alias{create_template_prj} -\title{Creates a template project file based on the XML structure and attributes of an existing project file.} -\usage{ -create_template_prj(existing_prj, template_prj) -} -\arguments{ -\item{existing_prj}{An existing .prj file to use as a template for the structure and attributes} - -\item{template_prj}{The path where the template should be saved} -} -\value{ -The newly created template project file -} -\description{ -Creates a template project file based on the XML structure and attributes of an existing project file. -} diff --git a/man/export_xml_to_file.Rd b/man/export_xml_to_file.Rd index 8aa952f..81750af 100644 --- a/man/export_xml_to_file.Rd +++ b/man/export_xml_to_file.Rd @@ -1,15 +1,15 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml.R +% Please edit documentation in R/utils.R \name{export_xml_to_file} \alias{export_xml_to_file} -\title{Export function} +\title{export_xml_to_file} \usage{ export_xml_to_file(xml_data, file_name) } \arguments{ -\item{xml_data}{The .gml data (already in XML friendly format)} +\item{xml_data}{The data to be exported (already in XML friendly format)} -\item{file_name}{The name of the .gml file to be written} +\item{file_name}{The name of the file to be written} } \description{ Export function diff --git a/man/generate_as_node_from_element.Rd b/man/generate_as_node_from_element.Rd new file mode 100644 index 0000000..2ebc47d --- /dev/null +++ b/man/generate_as_node_from_element.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/analyse_xml.R +\name{generate_as_node_from_element} +\alias{generate_as_node_from_element} +\title{generate_as_node_from_element} +\usage{ +generate_as_node_from_element(element_name, attrs = NULL, children = NULL) +} +\arguments{ +\item{element_name}{The name of the XML element to base the function on} + +\item{attrs}{Optional: A list of element attributes} + +\item{children}{Optional: A list of element children} +} +\description{ +Generates a method for the generic function as_node based on an XML element +} diff --git a/man/get_xml_encoding.Rd b/man/get_xml_encoding.Rd deleted file mode 100644 index c179376..0000000 --- a/man/get_xml_encoding.Rd +++ /dev/null @@ -1,17 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utils.R -\name{get_xml_encoding} -\alias{get_xml_encoding} -\title{Reads the encoding of an XML file} -\usage{ -get_xml_encoding(input_file_name) -} -\arguments{ -\item{input_file_name}{An XML (.xml or, in the case of OpenGeoSys, .prj) file} -} -\value{ -The encoding of the input file -} -\description{ -Reads the encoding of an XML file -} diff --git a/man/gml_data_to_xml.Rd b/man/gml_data_to_xml.Rd index 919404a..5713afd 100644 --- a/man/gml_data_to_xml.Rd +++ b/man/gml_data_to_xml.Rd @@ -1,23 +1,17 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml.R +% Please edit documentation in R/export_gml.R \name{gml_data_to_xml} \alias{gml_data_to_xml} -\title{Wrapper function to create a XML document based on the user input data} +\title{Wrapper function to create a .gml XML document based on the user input data} \usage{ -gml_data_to_xml(geo_name, points_tibble, polylines_list, surfaces_list) +gml_data_to_xml(gml_obj) } \arguments{ -\item{geo_name}{The name of the geometry specified by the user} - -\item{points_tibble}{A tibble containing points} - -\item{polylines_list}{A list containing polylines} - -\item{surfaces_list}{A list containing surfaces} +\item{gml_obj}{A gml class object} } \value{ A XML document ready for export to a file } \description{ -Wrapper function to create a XML document based on the user input data +Wrapper function to create a .gml XML document based on the user input data } diff --git a/man/input_add_gml_obj.Rd b/man/input_add_gml_obj.Rd new file mode 100644 index 0000000..4316ca6 --- /dev/null +++ b/man/input_add_gml_obj.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/input_add_gml.R +\name{input_add_gml_obj} +\alias{input_add_gml_obj} +\title{Adds an empty gml class object to a ogs6 class object input list} +\usage{ +input_add_gml_obj(ogs6_obj, geometry_name) +} +\arguments{ +\item{ogs6_obj}{The ogs6 object the gml class object should be added to} + +\item{geometry_name}{The name of the geometry specified by the gml class object} +} +\description{ +Adds an empty gml class object to a ogs6 class object input list +} diff --git a/man/input_add_gml_points.Rd b/man/input_add_gml_points.Rd new file mode 100644 index 0000000..ccd4ab1 --- /dev/null +++ b/man/input_add_gml_points.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/input_add_gml.R +\name{input_add_gml_points} +\alias{input_add_gml_points} +\title{Adds gml points to a ogs6 class object} +\usage{ +input_add_gml_points(ogs6_obj, gml_points) +} +\arguments{ +\item{ogs6_obj}{A ogs6 class object} + +\item{gml_points}{A tibble of gml points} +} +\description{ +Adds gml points to a ogs6 class object +} diff --git a/man/input_add_gml_polylines.Rd b/man/input_add_gml_polylines.Rd new file mode 100644 index 0000000..6258d91 --- /dev/null +++ b/man/input_add_gml_polylines.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/input_add_gml.R +\name{input_add_gml_polylines} +\alias{input_add_gml_polylines} +\title{Adds gml polylines to a ogs6 class object} +\usage{ +input_add_gml_polylines(ogs6_obj, gml_polylines) +} +\arguments{ +\item{ogs6_obj}{A ogs6 class object} + +\item{gml_polylines}{A list of gml polylines} +} +\description{ +Adds gml polylines to a ogs6 class object +} diff --git a/man/input_add_gml_surfaces.Rd b/man/input_add_gml_surfaces.Rd new file mode 100644 index 0000000..389611e --- /dev/null +++ b/man/input_add_gml_surfaces.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/input_add_gml.R +\name{input_add_gml_surfaces} +\alias{input_add_gml_surfaces} +\title{Adds gml surfaces to a ogs6 class object} +\usage{ +input_add_gml_surfaces(ogs6_obj, gml_surfaces) +} +\arguments{ +\item{ogs6_obj}{A ogs6 class object} + +\item{gml_surfaces}{A list of gml surfaces} +} +\description{ +Adds gml surfaces to a ogs6 class object +} diff --git a/man/input_add_vtu_appended_data.Rd b/man/input_add_vtu_appended_data.Rd new file mode 100644 index 0000000..822f2cc --- /dev/null +++ b/man/input_add_vtu_appended_data.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/input_add_vtu.R +\name{input_add_vtu_appended_data} +\alias{input_add_vtu_appended_data} +\title{input_add_vtu_appended_data} +\usage{ +input_add_vtu_appended_data(ogs6_obj, encoding, data) +} +\arguments{ +\item{ogs6_obj}{The ogs6 object the .vtu AppendedData should be added to} + +\item{encoding}{How the AppendedData is encoded} + +\item{data}{The actual data in the specified encoding} +} +\description{ +Adds .vtu AppendedData to a ogs6 class object +} diff --git a/man/input_add_vtu_obj.Rd b/man/input_add_vtu_obj.Rd new file mode 100644 index 0000000..dfda2b6 --- /dev/null +++ b/man/input_add_vtu_obj.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/input_add_vtu.R +\name{input_add_vtu_obj} +\alias{input_add_vtu_obj} +\title{input_add_vtu_obj} +\usage{ +input_add_vtu_obj( + ogs6_obj, + type, + version, + byte_order, + header_type, + compressor = NULL +) +} +\arguments{ +\item{ogs6_obj}{The ogs6 object the vtu class object should be added to} + +\item{type}{The type of the .vtu file (e. g. "UnstructuredGrid")} + +\item{version}{The version of the .vtu file (e. g. 1.0)} + +\item{byte_order}{Either "LittleEndian" or "BigEndian"} + +\item{header_type}{The header type (e. g. "UInt32")} + +\item{compressor}{Optional: The compressor to be used} +} +\description{ +Adds an empty vtu class object to a ogs6 class object input. +} diff --git a/man/input_add_vtu_unstructured_grid.Rd b/man/input_add_vtu_unstructured_grid.Rd new file mode 100644 index 0000000..53a479c --- /dev/null +++ b/man/input_add_vtu_unstructured_grid.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/input_add_vtu.R +\name{input_add_vtu_unstructured_grid} +\alias{input_add_vtu_unstructured_grid} +\title{input_add_vtu_unstructured_grid} +\usage{ +input_add_vtu_unstructured_grid(ogs6_obj, piece, field_data = NULL) +} +\arguments{ +\item{ogs6_obj}{The ogs6 object the .vtu UnstructuredGrid should be added to} + +\item{piece}{A Piece (WIP)} + +\item{field_data}{FieldData (WIP)} +} +\description{ +Adds .vtu UnstructuredGrid to a ogs6 class object +} diff --git a/man/new_data_array.Rd b/man/new_data_array.Rd new file mode 100644 index 0000000..6d01975 --- /dev/null +++ b/man/new_data_array.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/input_add_vtu.R +\name{new_data_array} +\alias{new_data_array} +\title{new_data_array} +\usage{ +new_data_array( + type, + name, + format, + range_min, + range_max, + number_of_components = NULL, + number_of_tuples = NULL, + offset = NULL, + data = NULL +) +} +\description{ +S3 class constructor, returns S3 class describing a .vtu DataArray element +} diff --git a/man/new_gml.Rd b/man/new_gml.Rd new file mode 100644 index 0000000..6a1d6ce --- /dev/null +++ b/man/new_gml.Rd @@ -0,0 +1,11 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/input_add_gml.R +\name{new_gml} +\alias{new_gml} +\title{Class describing the gml file and any parameters defined in one} +\usage{ +new_gml(geometry_name = NULL, points = NULL, polylines = NULL, surfaces = NULL) +} +\description{ +Class describing the gml file and any parameters defined in one +} diff --git a/man/new_ogs6.Rd b/man/new_ogs6.Rd new file mode 100644 index 0000000..dd3a911 --- /dev/null +++ b/man/new_ogs6.Rd @@ -0,0 +1,25 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ogs6.R +\name{new_ogs6} +\alias{new_ogs6} +\title{Constructor for the ogs6 base class} +\usage{ +new_ogs6( + sim_io = list(input = list(), output = list()), + sim_name = character(), + sim_id = integer(), + sim_path = character() +) +} +\arguments{ +\item{sim_io}{...} + +\item{sim_name}{A string value representing the simulation name} + +\item{sim_id}{An integer value representing the simulation ID} + +\item{sim_path}{A string value describing the path where the IO files will be saved} +} +\description{ +Constructor for the ogs6 base class +} diff --git a/man/new_r2ogs6_prj_medium_phase.Rd b/man/new_r2ogs6_prj_medium_phase.Rd new file mode 100644 index 0000000..f42ff0a --- /dev/null +++ b/man/new_r2ogs6_prj_medium_phase.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/input_add_prj.R +\name{new_r2ogs6_prj_medium_phase} +\alias{new_r2ogs6_prj_medium_phase} +\title{Defines a .prj medium phase element} +\usage{ +new_r2ogs6_prj_medium_phase(type = character(), properties = list()) +} +\arguments{ +\item{type}{A string specifying the medium type (valid types: ...)} + +\item{properties}{A list of properties (see ?r2ogs6_property for more info)} +} +\description{ +Defines a .prj medium phase element +} diff --git a/man/new_vtu.Rd b/man/new_vtu.Rd new file mode 100644 index 0000000..74156ed --- /dev/null +++ b/man/new_vtu.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/input_add_vtu.R +\name{new_vtu} +\alias{new_vtu} +\title{new_vtu} +\usage{ +new_vtu(type, version, byte_order, header_type, compressor = NULL) +} +\arguments{ +\item{type}{The type of the vtu file (e. g. "UnstructuredGrid")} + +\item{version}{The version of the .vtu file (e. g. 1.0)} + +\item{byte_order}{Either "LittleEndian" or "BigEndian"} + +\item{header_type}{The header type (e. g. "UInt32")} + +\item{compressor}{Optional: The compressor to be used} +} +\description{ +S3 class constructor, returns S3 class describing the .vtu file and any parameters defined in it +} diff --git a/man/points_to_xml.Rd b/man/points_to_xml.Rd index 3028ad0..25f9a3d 100644 --- a/man/points_to_xml.Rd +++ b/man/points_to_xml.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml.R +% Please edit documentation in R/export_gml.R \name{points_to_xml} \alias{points_to_xml} \title{Turns a tibble of points into an XML node} diff --git a/man/polylines_to_xml.Rd b/man/polylines_to_xml.Rd index 153a155..0ab088a 100644 --- a/man/polylines_to_xml.Rd +++ b/man/polylines_to_xml.Rd @@ -1,13 +1,13 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml.R +% Please edit documentation in R/export_gml.R \name{polylines_to_xml} \alias{polylines_to_xml} \title{Turns a list of polylines into an XML node} \usage{ -polylines_to_xml(polyline_list) +polylines_to_xml(polylines) } \arguments{ -\item{polyline_list}{The specified list} +\item{polylines}{A list of polylines} } \value{ An XML node containing the polylines diff --git a/man/prj_data_to_xml.Rd b/man/prj_data_to_xml.Rd new file mode 100644 index 0000000..4c7e129 --- /dev/null +++ b/man/prj_data_to_xml.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/export_prj.R +\name{prj_data_to_xml} +\alias{prj_data_to_xml} +\title{Wrapper function to create a .prj XML document based on the user input data} +\usage{ +prj_data_to_xml(prj_obj) +} +\arguments{ +\item{prj_obj}{.} +} +\description{ +Wrapper function to create a .prj XML document based on the user input data +} diff --git a/man/surfaces_to_xml.Rd b/man/surfaces_to_xml.Rd index 0715a66..c0a376a 100644 --- a/man/surfaces_to_xml.Rd +++ b/man/surfaces_to_xml.Rd @@ -1,13 +1,13 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_gml.R +% Please edit documentation in R/export_gml.R \name{surfaces_to_xml} \alias{surfaces_to_xml} \title{Turns a list of surfaces into an XML node} \usage{ -surfaces_to_xml(surfaces_list) +surfaces_to_xml(surfaces) } \arguments{ -\item{surfaces_list}{The specified list} +\item{surfaces}{A list of surfaces} } \value{ An XML node containing the surfaces diff --git a/man/validate_gml_data.Rd b/man/validate_gml_data.Rd new file mode 100644 index 0000000..f26bf31 --- /dev/null +++ b/man/validate_gml_data.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/validate_gml.R +\name{validate_gml_data} +\alias{validate_gml_data} +\title{validate_gml_data} +\usage{ +validate_gml_data(gml_obj) +} +\arguments{ +\item{gml_obj}{A gml class object} +} +\description{ +Checks if the defined gml class object isn't empty +} diff --git a/man/validate_ogs6.Rd b/man/validate_ogs6.Rd new file mode 100644 index 0000000..81ae718 --- /dev/null +++ b/man/validate_ogs6.Rd @@ -0,0 +1,11 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ogs6.R +\name{validate_ogs6} +\alias{validate_ogs6} +\title{Validating functions for an ogs6 class object (to be run before a simulation is started)} +\usage{ +validate_ogs6(ogs6_obj) +} +\description{ +Validating functions for an ogs6 class object (to be run before a simulation is started) +} diff --git a/man/validate_points.Rd b/man/validate_points.Rd index f781919..2c0ab7f 100644 --- a/man/validate_points.Rd +++ b/man/validate_points.Rd @@ -2,9 +2,7 @@ % Please edit documentation in R/validate_gml.R \name{validate_points} \alias{validate_points} -\title{Checks if the input is a tibble, if this tibble has the right number of elements, -if those elements are named correctly, if the lists in the tibble are of the same length and -if there is any overlapping points or duplicate point names} +\title{validate_points} \usage{ validate_points(gml_points) } @@ -13,6 +11,5 @@ validate_points(gml_points) } \description{ Checks if the input is a tibble, if this tibble has the right number of elements, -if those elements are named correctly, if the lists in the tibble are of the same length and -if there is any overlapping points or duplicate point names +if those elements are named correctly and if there are any overlapping points or duplicate point names } diff --git a/man/validate_polylines.Rd b/man/validate_polylines.Rd new file mode 100644 index 0000000..78fdd47 --- /dev/null +++ b/man/validate_polylines.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/validate_gml.R +\name{validate_polylines} +\alias{validate_polylines} +\title{validate_polylines} +\usage{ +validate_polylines(gml_polylines) +} +\arguments{ +\item{gml_polylines}{A list consisting of other lists} +} +\description{ +Checks if the input is a list, if this list consists of other lists and +if those child lists have the correct structure (length of 2, first element is a string named +'name', second element is a numeric vector) +} diff --git a/man/validate_surface_elements.Rd b/man/validate_surface_elements.Rd new file mode 100644 index 0000000..3720ee7 --- /dev/null +++ b/man/validate_surface_elements.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/validate_gml.R +\name{validate_surface_elements} +\alias{validate_surface_elements} +\title{validate_surface_elements} +\usage{ +validate_surface_elements(gml_surface_element_1, gml_surface_element_2) +} +\arguments{ +\item{gml_surface_element_1}{A numerical vector of length 3} + +\item{gml_surface_element_2}{A numerical vector of length 3} +} +\description{ +Helper function, checks if two numerical vectors of length 3 (two surface elements) +each consist of 3 different elements and also have exactly 2 matching elements between them +which means they describe a valid surface. You can think of the two vectors as two triangles, +and the two triangles together form a square which is our surface. +} diff --git a/man/validate_surfaces.Rd b/man/validate_surfaces.Rd new file mode 100644 index 0000000..9baad48 --- /dev/null +++ b/man/validate_surfaces.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/validate_gml.R +\name{validate_surfaces} +\alias{validate_surfaces} +\title{validate_surfaces} +\usage{ +validate_surfaces(gml_surfaces) +} +\arguments{ +\item{gml_surfaces}{A list consisting of other lists} +} +\description{ +Checks if the input is a list, if this list consists of other lists and +if those child lists have the correct structure (length of 3, first element is a string named +'name', second and third element are numeric vectors) +} diff --git a/man/vtu_appended_data_to_xml-open-paren-WIP-close-paren.Rd b/man/vtu_appended_data_to_xml-open-paren-WIP-close-paren.Rd new file mode 100644 index 0000000..08012d7 --- /dev/null +++ b/man/vtu_appended_data_to_xml-open-paren-WIP-close-paren.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/export_vtu.R +\name{vtu_appended_data_to_xml +(WIP)} +\alias{vtu_appended_data_to_xml +(WIP)} +\alias{vtu_appended_data_to_xml} +\title{vtu_appended_data_to_xml} +\usage{ +vtu_appended_data_to_xml(appended_data) +} +\arguments{ +\item{appended_data}{A list object consisting of 2 elements named 'data' and 'encoding'} +} +\description{ +vtu_appended_data_to_xml +} diff --git a/man/vtu_data_to_xml.Rd b/man/vtu_data_to_xml.Rd new file mode 100644 index 0000000..9fb16ef --- /dev/null +++ b/man/vtu_data_to_xml.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/export_vtu.R +\name{vtu_data_to_xml} +\alias{vtu_data_to_xml} +\title{Wrapper function to create a .vtu XML document based on the user input data} +\usage{ +vtu_data_to_xml(vtu_obj) +} +\arguments{ +\item{vtu_obj}{A vtu class object} +} +\value{ +A XML document ready for export to a file +} +\description{ +Wrapper function to create a .vtu XML document based on the user input data +} diff --git a/man/vtu_piece_to_xml.Rd b/man/vtu_piece_to_xml.Rd new file mode 100644 index 0000000..cc11b2b --- /dev/null +++ b/man/vtu_piece_to_xml.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/export_vtu.R +\name{vtu_piece_to_xml} +\alias{vtu_piece_to_xml} +\title{(WIP, change input parameter to piece!!)} +\usage{ +vtu_piece_to_xml( + number_of_points, + number_of_cells, + point_data, + cell_data, + points, + cells +) +} +\arguments{ +\item{piece}{A list consisting of lists of data_array class objects} +} +\description{ +(WIP, change input parameter to piece!!) +} diff --git a/my_experimental_cube.gml b/test.gml similarity index 100% rename from my_experimental_cube.gml rename to test.gml diff --git a/tests/testthat/test-create_gml.R b/tests/testthat/test-create_gml.R deleted file mode 100644 index db42d82..0000000 --- a/tests/testthat/test-create_gml.R +++ /dev/null @@ -1,95 +0,0 @@ -test_that("GMLPoint object is initialized correctly", { - gml_point <- GMLPoint$new(1, c(2, 3, 4), TRUE) - - expect_equal(gml_point$id, 1) - expect_equal(gml_point$coordinates, c(2, 3, 4)) - expect_equal(gml_point$dim, 3) - expect_equal(gml_point$is_origin, TRUE) - - expect_equal(gml_point$as_list(), list(id = 1, x = 2, y = 3, z = 4, name = "origin")) - expect_equal(gml_point$as_node(), list(point = structure(list(), id = 1, - x = 2, y = 3, z = 4, name = "origin"))) -}) - -test_that("GMLPoints object is initialized correctly", { - gml_point_1 <- GMLPoint$new(is_origin = TRUE) - gml_point_2 <- GMLPoint$new(1, c(0, 0, 1)) - gml_points <- GMLPoints$new(c(gml_point_1, gml_point_2)) - - expect_equal(gml_points$ids, c(gml_point_1$id, gml_point_2$id)) - expect_equal(gml_points$as_list(), list(point = gml_point_1$as_list(), point = gml_point_2$as_list())) - expect_equal(gml_points$as_node(), list(points = c(gml_point_1$as_node(), gml_point_2$as_node()))) -}) - - -test_that("GMLPolyline object is initialized correctly", { - gml_polyline <- GMLPolyline$new(0, "my_line", 1, 2) - - expect_equal(gml_polyline$id, 0) - expect_equal(gml_polyline$name, "my_line") - expect_equal(gml_polyline$point1, 1) - expect_equal(gml_polyline$point2, 2) - - expect_equal(gml_polyline$as_node(), list(polyline = structure(list(pnt = list(1), pnt = list(2)), - id = 0, name = "my_line"))) -}) - -test_that("GMLPolylines object is initialized correctly", { - gml_polyline_1 <- GMLPolyline$new(0, "line_1", 1, 2) - gml_polyline_2 <- GMLPolyline$new(1, "line_2", 1, 3) - gml_polyline_3 <- GMLPolyline$new(1, "line_3", 1, 3) - gml_polylines <- GMLPolylines$new(c(gml_polyline_1, gml_polyline_2)) - - expect_equal(gml_polylines$ids, c(gml_polyline_1$id, gml_polyline_2$id)) - expect_equal(gml_polylines$gml_polylines, c(gml_polyline_1, gml_polyline_2)) - - expect_error(gml_polylines$validate_ids(c(gml_polyline_2, gml_polyline_3))) - expect_error(gml_polylines$validate_polylines(c(gml_polyline_2, gml_polyline_3))) - expect_equal(gml_polylines$as_node(), list(polylines = c(gml_polyline_1$as_node(), gml_polyline_2$as_node()))) -}) - - -test_that("GMLSurfaceElement object is initialized correctly", { - gml_surface_element <- GMLSurfaceElement$new(0, 1, 3) - - expect_equal(gml_surface_element$p1, 0) - expect_equal(gml_surface_element$p2, 1) - expect_equal(gml_surface_element$p3, 3) - - expect_error(GMLSurfaceElement$new(0, 0, 3)) - expect_equal(gml_surface_element$as_list(), list(p1 = 0, p2 = 1, p3 = 3)) - expect_equal(gml_surface_element$as_node(), list(element = structure(list(), p1 = 0, p2 = 1, p3 = 3))) -}) - -test_that("GMLSurface object is initialized correctly", { - gml_surface_element_1 <- GMLSurfaceElement$new(0, 1, 3) - gml_surface_element_2 <- GMLSurfaceElement$new(1, 3, 2) - gml_surface_element_3 <- GMLSurfaceElement$new(3, 0, 1) - gml_surface <- GMLSurface$new(0, "my_surface", gml_surface_element_1, gml_surface_element_2) - - expect_equal(gml_surface$id, 0) - expect_equal(gml_surface$name, "my_surface") - expect_equal(gml_surface$element1, gml_surface_element_1) - expect_equal(gml_surface$element2, gml_surface_element_2) - - expect_error(GMLSurface$new(0, "my_surface", gml_surface_element_1, gml_surface_element_3)) - expect_equal(gml_surface$as_node(), list(surface = - structure(c(gml_surface_element_1$as_node(), - gml_surface_element_2$as_node()), - id = 0, name = "my_surface"))) -}) - -test_that("GMLSurfaces object is initialized correctly", { - gml_surface_element_1 <- GMLSurfaceElement$new(0, 1, 3) - gml_surface_element_2 <- GMLSurfaceElement$new(1, 3, 2) - gml_surface_element_3 <- GMLSurfaceElement$new(4, 5, 6) - gml_surface_element_4 <- GMLSurfaceElement$new(5, 6, 7) - gml_surface_1 <- GMLSurface$new(0, "surface_1", gml_surface_element_1, gml_surface_element_2) - gml_surface_2 <- GMLSurface$new(1, "surface_2", gml_surface_element_3, gml_surface_element_4) - gml_surface_3 <- GMLSurface$new(1, "surface_3", gml_surface_element_3, gml_surface_element_4) - gml_surfaces <- GMLSurfaces$new(c(gml_surface_1, gml_surface_2)) - - expect_equal(gml_surfaces$ids, c(gml_surface_1$id, gml_surface_2$id)) - expect_error(gml_surfaces$validate_ids(c(gml_surface_2, gml_surface_3))) - expect_equal(gml_surfaces$as_node(), list(surfaces = c(gml_surface_1$as_node(), gml_surface_2$as_node()))) -}) diff --git a/tests/testthat/test-utils.R b/tests/testthat/test-utils.R index 0e8f85b..c2aa95b 100644 --- a/tests/testthat/test-utils.R +++ b/tests/testthat/test-utils.R @@ -1,19 +1,42 @@ -test_that("get_xml_encoding returns valid XML encoding", { - expect_equal(get_xml_encoding(system.file("extdata", "flow_free_expansion.prj", package = "r2ogs6")), "ISO-8859-1") +test_that("add_opt_attr adds an optional attribute to a node list", { + + test_node_1 <- list(test = structure(list())) + + test_node_1 <- add_opt_attr(test_node_1, 42, "meaning_of_life") + + expect_equal(attributes(test_node_1[[1]])[["meaning_of_life"]], 42) + + test_node_1 <- add_opt_attr(test_node_1, NULL, "null") + expect_equal(length(attributes(test_node_1[[1]])), 1) + }) -#> Test passed -test_that("create_blank_prj writes .prj file with empty XML text nodes", { - template_file <- system.file("extdata", "flow_free_expansion_template.prj", package = "r2ogs6") - create_template_prj(system.file("extdata", "flow_free_expansion.prj", package = "r2ogs6"), template_file) - xml_templ <- xml2::read_xml(template_file) +test_that("add_opt_child adds an optional child to a node list", { + + test_node_1 <- list(test = structure(list(), attr_1 = "hi", attr_2 = "there")) + test_node_2 <- list(test = structure(list(), attr_1 = "hi", attr_2 = "there")) + + test_node_1 <- add_opt_child(test_node_1, 42) + + expect_equal(test_node_1[[1]][[1]], 42) - #Get text nodes - text_nodes<-xml2::xml_find_all(xml_templ, "//text()") + expect_error(add_opt_child(test_node_1, 42)) + expect_error(add_opt_child(test_node_1, 42, "number")) + + + test_node_2 <- add_opt_child(test_node_2, 42, "number") + test_node_2 <- add_opt_child(test_node_2, 42, "number") + test_node_2 <- add_opt_child(test_node_2, NULL, "null") + + + expect_equal(length(test_node_2[[1]]), 2) + expect_equal(length(names(test_node_2[[1]])), 2) + + expect_error(add_opt_child(test_node_2, 42)) - #There should not be any text left in the text nodes - expect_equal(xml2::xml_text(text_nodes), character(0)) }) -#> Test passed + + + diff --git a/tests/testthat/test-validate_gml.R b/tests/testthat/test-validate_gml.R index 2ad65b7..71e5ffc 100644 --- a/tests/testthat/test-validate_gml.R +++ b/tests/testthat/test-validate_gml.R @@ -1,4 +1,4 @@ -test_that("validate_points function checks ...", { +test_that("validate_points function checks if ...", { point_list <- list(x = c(0, 0), y = c(1, 1), z = c(0, 1)) @@ -22,3 +22,42 @@ test_that("validate_points function checks ...", { expect_invisible(validate_points(point_tibble_val)) expect_invisible(validate_points(point_tibble_val_2)) }) + + +test_that("validate_polylines function checks if...", { + + polyline_tibble <- tibble::tibble(name = "tibble", polyline = c(c(1, 2))) + + #Check class (should expect a list, not a tibble) + expect_error(validate_polylines(polyline_tibble)) + + polyline_list_inv_0 <- list(name = "missing_polyline_list", c(1,2)) + polyline_list_inv_1 <- list(list(name = "wrong_length", c(0, 1, 2), c(1, 2))) + polyline_list_inv_2 <- list(list(name = 42, c(1, 2))) + polyline_list_inv_3 <- list(list(name = "wrong_points", c("this", "should", "fail"))) + + expect_error(validate_polylines(polyline_list_inv_0)) + expect_error(validate_polylines(polyline_list_inv_1)) + expect_error(validate_polylines(polyline_list_inv_2)) + expect_error(validate_polylines(polyline_list_inv_3)) + + polyline_list_val_0 <- list(list(name = "cool", c(1, 2))) + polyline_list_val_1 <- list(list(name = "also cool", c(1, 2, 4, 5, 1))) + + expect_invisible(validate_polylines(polyline_list_val_0)) + expect_invisible(validate_polylines(polyline_list_val_1)) + + #...(WIP) + +}) + + +test_that("validate_surfaces function checks if...", { + + surface_tibble <- tibble::tibble(name = "tibble", surface = c(c(0, 1, 2), c(1, 2, 3))) + + #Check class (should expect a list, not a tibble) + expect_error(validate_surfaces(surface_tibble)) + + #...(WIP) +}) \ No newline at end of file -- GitLab