DRIMSeq/DESCRIPTION0000644000175200017520000000515014136070551014511 0ustar00biocbuildbiocbuildPackage: DRIMSeq Type: Package Title: Differential transcript usage and tuQTL analyses with Dirichlet-multinomial model in RNA-seq Version: 1.22.0 Date: 2017-05-24 Authors@R: c(person(given = "Malgorzata", family = "Nowicka", role = c("aut", "cre"), email = "gosia.nowicka.uzh@gmail.com")) Description: The package provides two frameworks. One for the differential transcript usage analysis between different conditions and one for the tuQTL analysis. Both are based on modeling the counts of genomic features (i.e., transcripts) with the Dirichlet-multinomial distribution. The package also makes available functions for visualization and exploration of the data and results. biocViews: ImmunoOncology, SNP, AlternativeSplicing, DifferentialSplicing, Genetics, RNASeq, Sequencing, WorkflowStep, MultipleComparison, GeneExpression, DifferentialExpression License: GPL (>= 3) Depends: R (>= 3.4.0) Imports: utils, stats, MASS, GenomicRanges, IRanges, S4Vectors, BiocGenerics, methods, BiocParallel, limma, edgeR, ggplot2, reshape2 Suggests: PasillaTranscriptExpr, GeuvadisTranscriptExpr, grid, BiocStyle, knitr, testthat ByteCompile: false VignetteBuilder: knitr Collate: 'DRIMSeq.R' 'class_show_utils.R' 'class_MatrixList.R' 'class_dmDSdata.R' 'class_dmDSprecision.R' 'class_dmDSfit.R' 'class_dmDStest.R' 'class_dmSQTLdata.R' 'class_dmSQTLprecision.R' 'class_dmSQTLfit.R' 'class_dmSQTLtest.R' 'dmDS_CRadjustment.R' 'dmDS_estimateCommonPrecision.R' 'dmDS_estimateTagwisePrecision.R' 'dmDS_filter.R' 'dmDS_fit.R' 'dmDS_profileLik.R' 'dmSQTL_CRadjustment.R' 'dmSQTL_estimateCommonPrecision.R' 'dmSQTL_estimateTagwisePrecision.R' 'dmSQTL_filter.R' 'dmSQTL_fit.R' 'dmSQTL_permutations.R' 'dmSQTL_profileLik.R' 'dm_CRadjustmentManyGroups.R' 'dm_CRadjustmentOneGroup.R' 'dm_CRadjustmentRegression.R' 'dm_LRT.R' 'dm_core_Hessian.R' 'dm_core_colorb.R' 'dm_core_deviance.R' 'dm_core_lik.R' 'dm_core_score.R' 'dm_estimateMeanExpression.R' 'dm_fitManyGroups.R' 'dm_fitOneGroup.R' 'dm_fitRegression.R' 'dm_plotData.R' 'dm_plotPrecision.R' 'dm_plotProportions.R' 'dm_plotPvalues.R' 'dm_profileLikModeration.R' RoxygenNote: 6.0.1 git_url: https://git.bioconductor.org/packages/DRIMSeq git_branch: RELEASE_3_14 git_last_commit: a22c59b git_last_commit_date: 2021-10-26 Date/Publication: 2021-10-26 NeedsCompilation: no Packaged: 2021-10-26 21:21:45 UTC; biocbuild Author: Malgorzata Nowicka [aut, cre] Maintainer: Malgorzata Nowicka DRIMSeq/NAMESPACE0000644000175200017520000000567114136051631014230 0ustar00biocbuildbiocbuild# Generated by roxygen2: do not edit by hand export("common_precision<-") export("genewise_precision<-") export(common_precision) export(dmDSdata) export(dmFilter) export(dmFit) export(dmPrecision) export(dmSQTLdata) export(dmTest) export(genewise_precision) export(mean_expression) export(plotData) export(plotPValues) export(plotPrecision) export(plotProportions) export(proportions) export(results) export(samples) exportMethods("$") exportMethods("[") exportMethods("[[") exportMethods("colnames<-") exportMethods("common_precision<-") exportMethods("genewise_precision<-") exportMethods("names<-") exportMethods("rownames<-") exportMethods(coefficients) exportMethods(colnames) exportMethods(common_precision) exportMethods(counts) exportMethods(design) exportMethods(dim) exportMethods(dmFilter) exportMethods(dmFit) exportMethods(dmPrecision) exportMethods(dmTest) exportMethods(elementNROWS) exportMethods(genewise_precision) exportMethods(length) exportMethods(mean_expression) exportMethods(names) exportMethods(ncol) exportMethods(nrow) exportMethods(plotData) exportMethods(plotPValues) exportMethods(plotPrecision) exportMethods(plotProportions) exportMethods(proportions) exportMethods(results) exportMethods(rownames) exportMethods(samples) import(BiocGenerics) import(BiocParallel) import(GenomicRanges) import(edgeR) import(methods) importFrom(IRanges,width) importFrom(S4Vectors,elementNROWS) importFrom(S4Vectors,queryHits) importFrom(S4Vectors,subjectHits) importFrom(ggplot2,aes_string) importFrom(ggplot2,coord_cartesian) importFrom(ggplot2,element_blank) importFrom(ggplot2,element_text) importFrom(ggplot2,geom_bar) importFrom(ggplot2,geom_boxplot) importFrom(ggplot2,geom_histogram) importFrom(ggplot2,geom_hline) importFrom(ggplot2,geom_jitter) importFrom(ggplot2,geom_line) importFrom(ggplot2,geom_point) importFrom(ggplot2,geom_ribbon) importFrom(ggplot2,geom_text) importFrom(ggplot2,geom_vline) importFrom(ggplot2,ggplot) importFrom(ggplot2,ggtitle) importFrom(ggplot2,guide_colorbar) importFrom(ggplot2,guide_legend) importFrom(ggplot2,guides) importFrom(ggplot2,position_dodge) importFrom(ggplot2,position_jitterdodge) importFrom(ggplot2,scale_colour_gradient) importFrom(ggplot2,scale_colour_manual) importFrom(ggplot2,scale_fill_manual) importFrom(ggplot2,scale_x_discrete) importFrom(ggplot2,theme) importFrom(ggplot2,theme_bw) importFrom(ggplot2,xlab) importFrom(ggplot2,ylab) importFrom(limma,nonEstimable) importFrom(reshape2,melt) importFrom(stats,aggregate) importFrom(stats,complete.cases) importFrom(stats,constrOptim) importFrom(stats,loess) importFrom(stats,loess.control) importFrom(stats,median) importFrom(stats,model.matrix) importFrom(stats,na.omit) importFrom(stats,nlm) importFrom(stats,nlminb) importFrom(stats,optim) importFrom(stats,optimHess) importFrom(stats,optimize) importFrom(stats,p.adjust) importFrom(stats,pchisq) importFrom(stats,predict) importFrom(stats,quantile) importFrom(stats,runif) importFrom(utils,head) importFrom(utils,tail) DRIMSeq/NEWS0000755000175200017520000000324514136051631013506 0ustar00biocbuildbiocbuildv0.99.0: - Bioconductor submission. v1.1.2: - Bioconductor accepted devel version. v1.1.3: - New features: i) The level of moderation is calculated automatically. ii) Permutation approach to adjust p-values in sQTL analyses. v1.1.4: - Use data frames with counts and genotypes when creating the dmDSdata and dmSQTLdata objects. v1.3.1: - Equals to v1.1.4. v1.3.2: - Implementation of the two-stage test dmTwoStageTest(). v1.3.3: - Implementation of the regression framework and feature-level analysis. Additionally: i) Removing max_features argument from dmFilter. ii) Keeping only the grid approach for estimating tagwise dispersion. iii) Allow to use only a subset of genes (disp_subset parameter) in common dispersion estimation to speed up the calculations; if disp_subset < 1, use set.seed() to make the analysis reproducible. iv) Always use tagwise dispersion for fitting full and null models. v) In one group fitting, return NA for tags having the last feature with zero counts in all samples. We always use the q-th feature as a denominator in logit calculation. In such a case all the logits are anyways Inf. vi) Use plotPValues instead of plotTest vii) Use 'prop' instead of 'pi' and 'disp' instead of 'gamma0'. viii) Use only 'constrOptim' (old 'constrOptimG') to estimate proportions and 'optim' to estimate coefficients in the regression model. ix) Use plotProportions instead of plotFit. x) No 'out_dir' parameter in plotting functions. All plotting functions return a ggplot object. xi) Use term "precision" instead of "dispersion" as in DRIMSeq we directly estimate the precision parameter. Dispersion can be calculated with formula: dispersion = 1 / (1 + precision).DRIMSeq/R/0000755000175200017520000000000014136051631013201 5ustar00biocbuildbiocbuildDRIMSeq/R/DRIMSeq.R0000755000175200017520000001115414136051631014535 0ustar00biocbuildbiocbuild#' @import BiocGenerics #' @import methods #' @import BiocParallel #' @import edgeR #' @import GenomicRanges NULL # ### EXAMPLES ### # # -------------------------------------------------------------------------- # # Create dmDSdata object # # -------------------------------------------------------------------------- # ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package # # library(PasillaTranscriptExpr) # # data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") # # ## Load metadata # pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), # header = TRUE, as.is = TRUE) # # ## Load counts # pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), # header = TRUE, as.is = TRUE) # # ## Create a pasilla_samples data frame # pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, # group = pasilla_metadata$condition) # levels(pasilla_samples$group) # # ## Create a dmDSdata object # d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) # # ## Use a subset of genes, which is defined in the following file # gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) # # d <- d[names(d) %in% gene_id_subset, ] # # # -------------------------------------------------------------------------- # # Differential transcript usage analysis - simple two group comparison # # -------------------------------------------------------------------------- # # ## Filtering # ## Check what is the minimal number of replicates per condition # table(samples(d)$group) # # d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, # min_gene_expr = 10, min_feature_expr = 10) # # plotData(d) # # ## Create the design matrix # design_full <- model.matrix(~ group, data = samples(d)) # # ## To make the analysis reproducible # set.seed(123) # ## Calculate precision # d <- dmPrecision(d, design = design_full) # # plotPrecision(d) # # head(mean_expression(d)) # common_precision(d) # head(genewise_precision(d)) # # ## Fit full model proportions # d <- dmFit(d, design = design_full) # # ## Get fitted proportions # head(proportions(d)) # ## Get the DM regression coefficients (gene-level) # head(coefficients(d)) # ## Get the BB regression coefficients (feature-level) # head(coefficients(d), level = "feature") # # ## Fit null model proportions and perform the LR test to detect DTU # d <- dmTest(d, coef = "groupKD") # # ## Plot the gene-level p-values # plotPValues(d) # # ## Get the gene-level results # head(results(d)) # # ## Plot feature proportions for a top DTU gene # res <- results(d) # res <- res[order(res$pvalue, decreasing = FALSE), ] # # top_gene_id <- res$gene_id[1] # # plotProportions(d, gene_id = top_gene_id, group_variable = "group") # # plotProportions(d, gene_id = top_gene_id, group_variable = "group", # plot_type = "lineplot") # # plotProportions(d, gene_id = top_gene_id, group_variable = "group", # plot_type = "ribbonplot") # # # # # # # # -------------------------------------------------------------------------- # # Create dmSQTLdata object # # -------------------------------------------------------------------------- # # Use subsets of data defined in the GeuvadisTranscriptExpr package # # library(GeuvadisTranscriptExpr) # # geuv_counts <- GeuvadisTranscriptExpr::counts # geuv_genotypes <- GeuvadisTranscriptExpr::genotypes # geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges # geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges # # colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") # colnames(geuv_genotypes)[4] <- "snp_id" # geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) # # d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, # genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, # samples = geuv_samples, window = 5e3) # # # -------------------------------------------------------------------------- # # sQTL analysis - simple group comparison # # -------------------------------------------------------------------------- # # ## Filtering # d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, # minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) # # plotData(d) # # ## To make the analysis reproducible # set.seed(123) # ## Calculate precision # d <- dmPrecision(d) # # plotPrecision(d) # # ## Fit full model proportions # d <- dmFit(d) # # ## Fit null model proportions, perform the LR test to detect tuQTLs # ## and use the permutation approach to adjust the p-values # d <- dmTest(d) # # ## Plot the gene-level p-values # plotPValues(d) # # ## Get the gene-level results # head(results(d)) DRIMSeq/R/class_MatrixList.R0000644000175200017520000002073414136051631016617 0ustar00biocbuildbiocbuild#' @include class_show_utils.R NULL ############################################################################### ### MatrixList class ############################################################################### #' MatrixList object #' #' A MatrixList object is a container for a list of matrices which have the same #' number of columns but can have varying number of rows. Additionally, one can #' store an extra information corresponding to each of the matrices in #' \code{metadata} matrix. #' #' @return #' #' \itemize{ #' \item \code{names(x)}, \code{names(x) <- value}: Get or set names #' of matrices. #' \item \code{rownames(x)}, \code{rownames(x) <- value}, #' \code{colnames(x)}, \code{colnames(x) <- value}: Get or set row names or #' column names of unlistData slot. #' \item \code{length(x)}: Get the number of #' matrices in a list. #' \item \code{elementNROWS(x)}: Get the number of rows of each of #' the matrices. #' \item \code{dim(x)}, \code{nrow(x)}, \code{ncol(x)}: Get the #' dimensions, number of rows or number of columns of unlistData slot. #' \item #' \code{x[[i]]}, \code{x[[i, j]]}: Get the matrix i, and optionally, get only #' columns j of this matrix. #' \item \code{x$name}: Shortcut for #' \code{x[["name"]]}. #' \item \code{x[i, j]}: Get a subset of MatrixList that #' consists of matrices i with columns j. } #' #' @param x MatrixList object. #' @param value,i,j,name Parameters used for subsetting and assigning new #' attributes to x. #' #' @slot unlistData Matrix which is a row binding of all the matrices in a list. #' @slot partitioning List of indexes which defines the row partitioning of #' unlistData matrix into the original matrices. #' #' @slot metadata Matrix of additional information where each row corresponds to #' one of the matrices in a list. #' @author Malgorzata Nowicka setClass("MatrixList", representation(unlistData = "matrix", partitioning = "list", metadata = "matrix")) ################################### setValidity("MatrixList", function(object){ # has to return TRUE when valid object! partitioning_unlist <- unlist(object@partitioning) if(length(partitioning_unlist) == nrow(object@unlistData)) out <- TRUE else return(paste0("Unequal lengths of partitioning indexes and rows in unlistData: ", length(partitioning_unlist), " and ", nrow(object@unlistData))) if(nrow(object@metadata) > 0){ if(nrow(object@metadata) == length(object@partitioning)) out <- TRUE else return(paste0("Unequal lengths of partitioning and metadata: ", length(object@partitioning), " and ", nrow(object@metadata))) } return(out) }) ############################################################################### ### MatrixList ############################################################################### MatrixList <- function(..., metadata){ listData <- list(...) if (length(listData) == 1L && is.list(listData[[1L]])) listData <- listData[[1L]] if (length(listData) == 0L) { return(new("MatrixList")) } else { if (!all(sapply(listData, is, "matrix"))) stop("all elements in '...' must be matrices!") unlistData <- do.call(rbind, listData) w <- sapply(listData, nrow) partitioning <- vector("list", length(w)) inds <- 1:nrow(unlistData) names(inds) <- rownames(unlistData) partitioning[w != 0] <- split(inds, rep(1:length(w), w)) if(!is.null(names(listData))) names(partitioning) <- names(listData) if(!missing(metadata)) return(new("MatrixList", unlistData = unlistData, partitioning = partitioning, metadata = metadata)) else return(new("MatrixList", unlistData = unlistData, partitioning = partitioning)) } } ################################################################################ ### show method ################################################################################ setMethod("show", "MatrixList", function(object){ nhead <- 2 nl <- length(object) cat(mode(object@unlistData),"MatrixList of length", nl,"\n") if(nl > 0){ np <- min(nl, nhead) object_sub <- object[1:np] if(is.null(names(object_sub))) print_names <- paste0("[[", 1:np, "]]\n") else print_names <- paste0("$", names(object_sub), "\n") for(i in 1:np){ # i = 1 cat(print_names[i]) show_matrix(object_sub[[i]]) cat("\n") } if(np < nl){ if(is.null(names(object_sub))) cat(paste0("[[...]]\n")) else cat(paste0("$...\n")) } } if(nrow(object@metadata) != 0){ cat("\nwith metadata slot\n") show_matrix(object@metadata) } }) ############################################################################### ### accessing methods ############################################################################### #' @rdname MatrixList-class #' @export setMethod("names", "MatrixList", function(x){ names(x@partitioning) }) #' @rdname MatrixList-class #' @export setMethod("names<-", "MatrixList", function(x, value){ names(x@partitioning) <- value x }) #' @rdname MatrixList-class #' @export setMethod("rownames", "MatrixList", function(x){ rownames(x@unlistData) }) #' @rdname MatrixList-class #' @export setMethod("rownames<-", "MatrixList", function(x, value){ rownames(x@unlistData) <- value x }) #' @rdname MatrixList-class #' @export setMethod("colnames", "MatrixList", function(x){ colnames(x@unlistData) }) #' @rdname MatrixList-class #' @export setMethod("colnames<-", "MatrixList", function(x, value){ colnames(x@unlistData) <- value x }) #' @rdname MatrixList-class #' @export setMethod("length", "MatrixList", function(x){ length(x@partitioning) }) #' @rdname MatrixList-class #' @export #' @importFrom S4Vectors elementNROWS setMethod("elementNROWS", "MatrixList", function(x){ sapply(x@partitioning, length) }) #' @rdname MatrixList-class #' @export setMethod("dim", "MatrixList", function(x){ dim(x@unlistData) }) #' @rdname MatrixList-class #' @export setMethod("nrow", "MatrixList", function(x){ nrow(x@unlistData) }) #' @rdname MatrixList-class #' @export setMethod("ncol", "MatrixList", function(x){ ncol(x@unlistData) }) ############################################################################### ### subsetting methods ############################################################################### #' @aliases [[,MatrixList-method #' @rdname MatrixList-class #' @export setMethod("[[", signature(x = "MatrixList"), function(x, i, j){ if(!missing(j)) return(x@unlistData[x@partitioning[[i]], j , drop = FALSE]) else return(x@unlistData[x@partitioning[[i]], , drop = FALSE]) }) #' @rdname MatrixList-class #' @export setMethod("$", "MatrixList", function(x, name){ x[[name]] }) ################################ #' @aliases [,MatrixList-method [,MatrixList,ANY-method #' @rdname MatrixList-class #' @export setMethod("[", signature(x = "MatrixList"), function(x, i, j){ if(!missing(i)){ if(!missing(j)){ if(nrow(x@metadata) != 0) return(new("MatrixList", unlistData = x@unlistData[unlist(x@partitioning[i]), j, drop = FALSE], partitioning = relist(1:nrow(x@unlistData), x@partitioning[i]), metadata = x@metadata[i, , drop = FALSE])) else return(new("MatrixList", unlistData = x@unlistData[unlist(x@partitioning[i]), j, drop = FALSE], partitioning = relist(1:nrow(x@unlistData), x@partitioning[i]), metadata = x@metadata)) }else{ if(nrow(x@metadata) != 0) return(new("MatrixList", unlistData = x@unlistData[unlist(x@partitioning[i]), , drop = FALSE], partitioning = relist(1:nrow(x@unlistData), x@partitioning[i]), metadata = x@metadata[i, , drop = FALSE])) else return(new("MatrixList", unlistData = x@unlistData[unlist(x@partitioning[i]), , drop = FALSE], partitioning = relist(1:nrow(x@unlistData), x@partitioning[i]), metadata = x@metadata)) } }else{ if(!missing(j)){ return(new("MatrixList", unlistData = x@unlistData[, j, drop = FALSE], partitioning = x@partitioning, metadata = x@metadata)) }else{ return(x) } } }) DRIMSeq/R/class_dmDSdata.R0000644000175200017520000004355314136051631016204 0ustar00biocbuildbiocbuild#' @include class_MatrixList.R NULL ############################################################################### ### dmDSdata class ############################################################################### #' dmDSdata object #' #' dmDSdata contains expression, in counts, of genomic features such as exons or #' transcripts and sample information needed for the differential #' exon/transcript usage (DEU or DTU) analysis. It can be created with function #' \code{\link{dmDSdata}}. #' #' @return #' #' \itemize{ \item \code{counts(object)}: Get a data frame with counts. \item #' \code{samples(x)}: Get a data frame with the sample information. \item #' \code{names(x)}: Get the gene names. \item \code{length(x)}: Get the number #' of genes. \item \code{x[i, j]}: Get a subset of dmDSdata object that consists #' of counts for genes i and samples j. } #' #' @param object,x dmDSdata object. #' @param i,j Parameters used for subsetting. #' @param ... Other parameters that can be defined by methods using this #' generic. #' #' @slot counts \code{\linkS4class{MatrixList}} of expression, in counts, of #' genomic features. Rows correspond to genomic features, such as exons or #' transcripts. Columns correspond to samples. MatrixList is partitioned in a #' way that each of the matrices in a list contains counts for a single gene. #' @slot samples Data frame with information about samples. It must contain #' \code{sample_id} variable with unique sample names and other covariates #' that desribe samples and are needed for the differential analysis. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' } #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmDSprecision}}, \code{\linkS4class{dmDSfit}}, #' \code{\linkS4class{dmDStest}} setClass("dmDSdata", representation(counts = "MatrixList", samples = "data.frame")) ############################### setValidity("dmDSdata", function(object){ # has to return TRUE when valid object! if(!ncol(object@counts) == nrow(object@samples)) return(paste0("Unequal number of samples in 'counts' and 'samples' ", ncol(object@counts), " and ", nrow(object@samples), "!")) if(!all(c("sample_id") %in% colnames(object@samples))) return("'samples' must contain 'sample_id' variable!") if(!length(unique(object@samples$sample_id)) == nrow(object@samples)) return("There must be a unique 'sample_id' for each sample!") if(!all(colnames(object@counts) == object@samples$sample_id)) return("Column names of 'counts' must be the same as 'sample_id' in 'samples'!") return(TRUE) }) ############################################################################### ### show, accessing and subsetting methods ############################################################################### #' @rdname dmDSdata-class #' @export setMethod("counts", "dmDSdata", function(object){ data.frame(gene_id = rep(names(object@counts), elementNROWS(object@counts)), feature_id = rownames(object@counts), object@counts@unlistData, stringsAsFactors = FALSE, row.names = NULL) }) #' @rdname dmDSdata-class #' @export setGeneric("samples", function(x, ...) standardGeneric("samples")) #' @rdname dmDSdata-class #' @export setMethod("samples", "dmDSdata", function(x) x@samples ) ################################ setMethod("show", "dmDSdata", function(object){ cat("An object of class", class(object), "\n") cat("with", length(object), "genes and", ncol(object@counts), "samples\n") cat("* data accessors: counts(), samples()\n") }) ################################ #' @rdname dmDSdata-class #' @export setMethod("names", "dmDSdata", function(x) names(x@counts) ) #' @rdname dmDSdata-class #' @export setMethod("length", "dmDSdata", function(x) length(x@counts) ) #' @aliases [,dmDSdata-method [,dmDSdata,ANY-method #' @rdname dmDSdata-class #' @export setMethod("[", "dmDSdata", function(x, i, j){ if(missing(j)){ counts <- x@counts[i, , drop = FALSE] samples <- x@samples }else{ if(missing(i)){ counts <- x@counts[, j, drop = FALSE] }else{ counts <- x@counts[i, j, drop = FALSE] } samples <- x@samples rownames(samples) <- samples$sample_id samples <- samples[j, , drop = FALSE] # Drop unused levels for factors for(i in 1:ncol(samples)){ if(class(samples[, i]) == "factor") samples[, i] <- factor(samples[, i]) } rownames(samples) <- NULL } return(new("dmDSdata", counts = counts, samples = samples)) }) ############################################################################### ### dmDSdata ############################################################################### #' Create dmDSdata object #' #' Constructor function for a \code{\linkS4class{dmDSdata}} object. #' #' @param counts Data frame with counts. Rows correspond to features, for #' example, transcripts or exons. This data frame has to contain a #' \code{gene_id} column with gene IDs, \code{feature_id} column with feature #' IDs and columns with counts for each sample. Column names corresponding to #' sample IDs must be the same as in the \code{sample} data frame. #' @param samples Data frame where each row corresponds to one sample. Columns #' have to contain unique sample IDs in \code{sample_id} variable and a #' grouping variable \code{group}. #' @return Returns a \linkS4class{dmDSdata} object. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' } #' @seealso \code{\link{plotData}} #' @author Malgorzata Nowicka #' @export dmDSdata <- function(counts, samples){ ### Check on samples stopifnot(class(samples) == "data.frame") stopifnot("sample_id" %in% colnames(samples)) stopifnot(sum(duplicated(samples$sample_id)) == 0) ### Check on counts stopifnot(class(counts) == "data.frame") stopifnot(all(c("gene_id", "feature_id") %in% colnames(counts))) stopifnot(all(samples$sample_id %in% colnames(counts))) stopifnot(sum(duplicated(counts$feature_id)) == 0) gene_id <- counts$gene_id feature_id <- counts$feature_id stopifnot(class(gene_id) %in% c("character", "factor")) stopifnot(class(feature_id) %in% c("character", "factor")) stopifnot(class(samples$sample_id) %in% c("character", "factor")) stopifnot(all(!is.na(gene_id))) stopifnot(all(!is.na(feature_id))) stopifnot(all(!is.na(samples$sample_id))) counts <- counts[, as.character(samples$sample_id), drop = FALSE] counts <- as.matrix(counts) stopifnot(mode(counts) %in% "numeric") if(class(gene_id) == "character") gene_id <- factor(gene_id, levels = unique(gene_id)) else gene_id <- factor(gene_id) for(i in 1:ncol(samples)){ if(class(samples[, i]) == "character") samples[, i] <- factor(samples[, i], levels = unique(samples[, i])) else if(class(samples[, i]) == "factor") samples[, i] <- factor(samples[, i]) } # Ordering or <- order(gene_id) counts <- counts[or, , drop = FALSE] gene_id <- gene_id[or] feature_id <- feature_id[or] rownames(counts) <- feature_id inds <- 1:length(gene_id) names(inds) <- feature_id partitioning <- split(inds, gene_id) data <- new("dmDSdata", counts = new("MatrixList", unlistData = counts, partitioning = partitioning), samples = samples) return(data) } ############################################################################### ### dmFilter ############################################################################### #' Filtering #' #' Filtering of genes and features with low expression. Additionally, for the #' dmSQTLdata object, filtering of genotypes with low frequency. #' #' @param x \code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} #' object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("dmFilter", function(x, ...) standardGeneric("dmFilter")) # ----------------------------------------------------------------------------- #' @details Filtering parameters should be adjusted according to the sample size #' of the experiment data and the number of replicates per condition. #' #' \code{min_samps_gene_expr} defines the minimal number of samples where #' genes are required to be expressed at the minimal level of #' \code{min_gene_expr} in order to be included in the downstream analysis. #' Ideally, we would like that genes were expressed at some minimal level in #' all samples because this would lead to better estimates of feature ratios. #' #' Similarly, \code{min_samps_feature_expr} and \code{min_samps_feature_prop} #' defines the minimal number of samples where features are required to be #' expressed at the minimal levels of counts \code{min_feature_expr} or #' proportions \code{min_feature_prop}. In differential transcript/exon usage #' analysis, we suggest using \code{min_samps_feature_expr} and #' \code{min_samps_feature_prop} equal to the minimal number of replicates in #' any of the conditions. For example, in an assay with 3 versus 5 replicates, #' we would set these parameters to 3, which allows a situation where a #' feature is expressed in one condition but may not be expressed at all in #' another one, which is an example of differential transcript/exon usage. #' #' By default, all the filtering parameters equal zero which means that #' features with zero expression in all samples are removed as well as genes #' with only one non-zero feature. #' #' @param min_samps_gene_expr Minimal number of samples where genes should be #' expressed. See Details. #' @param min_gene_expr Minimal gene expression. #' @param min_samps_feature_expr Minimal number of samples where features should #' be expressed. See Details. #' @param min_feature_expr Minimal feature expression. #' @param min_samps_feature_prop Minimal number of samples where features should #' be expressed. See details. #' @param min_feature_prop Minimal proportion for feature expression. This value #' should be between 0 and 1. #' @param run_gene_twice Whether to re-run the gene-level filter #' after the feature-level filters. #' @return Returns filtered \code{\linkS4class{dmDSdata}} or #' \code{\linkS4class{dmSQTLdata}} object. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' } #' @seealso \code{\link{plotData}} #' @author Malgorzata Nowicka #' @rdname dmFilter #' @export setMethod("dmFilter", "dmDSdata", function(x, min_samps_gene_expr = 0, min_samps_feature_expr = 0, min_samps_feature_prop = 0, min_gene_expr = 0, min_feature_expr = 0, min_feature_prop = 0, run_gene_twice = FALSE){ stopifnot(min_samps_gene_expr >= 0 && min_samps_gene_expr <= ncol(x@counts)) stopifnot(min_gene_expr >= 0) stopifnot(min_samps_feature_expr >= 0 && min_samps_feature_expr <= ncol(x@counts)) stopifnot(min_feature_expr >= 0) stopifnot(min_samps_feature_prop >= 0 && min_samps_feature_prop <= ncol(x@counts)) stopifnot(min_feature_prop >= 0 && min_feature_prop <= 1) counts_filtered <- dmDS_filter(counts = x@counts, min_samps_gene_expr = min_samps_gene_expr, min_gene_expr = min_gene_expr, min_samps_feature_expr = min_samps_feature_expr, min_feature_expr = min_feature_expr, min_samps_feature_prop = min_samps_feature_prop, min_feature_prop = min_feature_prop, run_gene_twice = run_gene_twice) return(new("dmDSdata", counts = counts_filtered, samples = x@samples)) }) ################################################################################ ### plotData ################################################################################ #' Plot data summary #' #' @return Returns a \code{ggplot} object and can be further modified, for #' example, using \code{theme()}. Plots a histogram of the number of features #' per gene. Additionally, for \code{\linkS4class{dmSQTLdata}} object, plots a #' histogram of the number of SNPs per gene and a histogram of the number of #' unique SNPs (blocks) per gene. #' #' @param x \code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} #' object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("plotData", function(x, ...) standardGeneric("plotData")) # ----------------------------------------------------------------------------- #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' } #' @author Malgorzata Nowicka #' @seealso \code{\link{plotPrecision}}, \code{\link{plotProportions}}, #' \code{\link{plotPValues}} #' @rdname plotData #' @export setMethod("plotData", "dmDSdata", function(x){ tt <- elementNROWS(x@counts) ggp <- dm_plotDataFeatures(tt = tt) return(ggp) }) DRIMSeq/R/class_dmDSfit.R0000755000175200017520000005403714136051631016057 0ustar00biocbuildbiocbuild#' @include class_dmDSprecision.R NULL ################################################################################ ### dmDSfit class ################################################################################ #' dmDSfit object #' #' dmDSfit extends the \code{\linkS4class{dmDSprecision}} class by adding the #' full model Dirichlet-multinomial (DM) and beta-binomial (BB) likelihoods, #' regression coefficients and feature proportion estimates. Result of calling #' the \code{\link{dmFit}} function. #' #' @return #' #' \itemize{ \item \code{design(object)}: Get a matrix with the full design. #' \item \code{proportions(x)}: Get a data frame with estimated feature ratios #' for each sample. \item \code{coefficients(x)}: Get the DM or BB regression #' coefficients. } #' #' @param x,object dmDSprecision object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' #' @slot design_fit_full Numeric matrix of the design used to fit the full #' model. #' @slot fit_full \code{\linkS4class{MatrixList}} containing estimated feature #' ratios in each sample based on the full Dirichlet-multinomial (DM) model. #' @slot lik_full Numeric vector of the per gene DM full model likelihoods. #' @slot coef_full \code{\linkS4class{MatrixList}} with the regression #' coefficients based on the DM model. #' @slot fit_full_bb \code{\linkS4class{MatrixList}} containing estimated #' feature ratios in each sample based on the full beta-binomial (BB) model. #' @slot lik_full_bb Numeric vector of the per gene BB full model likelihoods. #' @slot coef_full_bb \code{\linkS4class{MatrixList}} with the regression #' coefficients based on the BB model. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' #' ## Fit full model proportions #' d <- dmFit(d, design = design_full) #' #' ## Get fitted proportions #' head(proportions(d)) #' ## Get the DM regression coefficients (gene-level) #' head(coefficients(d)) #' ## Get the BB regression coefficients (feature-level) #' head(coefficients(d), level = "feature") #' } #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmDSdata}}, \code{\linkS4class{dmDSprecision}}, #' \code{\linkS4class{dmDStest}} setClass("dmDSfit", contains = "dmDSprecision", representation(design_fit_full = "matrix", fit_full = "MatrixList", lik_full = "numeric", coef_full = "MatrixList", fit_full_bb = "MatrixList", lik_full_bb = "numeric", coef_full_bb = "MatrixList")) # ------------------------------------------------------------------------------ setValidity("dmDSfit", function(object){ # Has to return TRUE for a valid object! if(nrow(object@design_fit_full) == ncol(object@counts)){ out <- TRUE }else{ return(paste0("Number of rows in the design matrix must be equal to the number of columns in counts")) } if(!length(object@fit_full) == length(object@counts)) return("Different number of genes in 'counts' and 'fit_full'") if(!length(object@lik_full) == length(object@counts)) return("Different number of genes in 'counts' and 'lik_full'") if(!length(object@coef_full) == length(object@counts)) return("Different number of genes in 'counts' and 'coef_full'") # TODO: Add more checks for BB return(TRUE) }) ################################################################################ ### accessing methods ################################################################################ #' @rdname dmDSfit-class #' @inheritParams dmDSprecision-class #' @export setMethod("design", "dmDSfit", function(object, type = "full_model"){ stopifnot(type %in% c("precision", "full_model", "null_model")) if(type == "precision") object@design_precision else if(type == "full_model") object@design_fit_full else NULL }) #' @rdname dmDSfit-class #' @export setGeneric("proportions", function(x, ...) standardGeneric("proportions")) #' @rdname dmDSfit-class #' @export setMethod("proportions", "dmDSfit", function(x){ data.frame(gene_id = rep.int(names(x@fit_full), elementNROWS(x@fit_full)), feature_id = rownames(x@fit_full@unlistData), x@fit_full@unlistData, stringsAsFactors = FALSE, row.names = NULL) }) # Generic for coefficients already exists in the stats package #' @rdname dmDSfit-class #' @param level Character specifying which type of results to return. Possible #' values \code{"gene"} or \code{"feature"}. #' @export setMethod("coefficients", "dmDSfit", function(object, level = "gene"){ stopifnot(length(level) == 1) stopifnot(level %in% c("gene", "feature")) if(level == "gene"){ out <- data.frame(gene_id = rep.int(names(object@coef_full), elementNROWS(object@coef_full)), feature_id = rownames(object@coef_full@unlistData), object@coef_full@unlistData, stringsAsFactors = FALSE, row.names = NULL) } if(level == "feature"){ out <- data.frame(gene_id = rep.int(names(object@coef_full_bb), elementNROWS(object@coef_full_bb)), feature_id = rownames(object@coef_full_bb@unlistData), object@coef_full_bb@unlistData, stringsAsFactors = FALSE, row.names = NULL) } return(out) }) # ------------------------------------------------------------------------------ setMethod("show", "dmDSfit", function(object){ callNextMethod(object) cat(" proportions(), coefficients()\n") }) ################################################################################ ### dmFit ################################################################################ #' Fit the Dirichlet-multinomial and/or the beta-binomial full model regression #' #' Obtain the maximum likelihood estimates of Dirichlet-multinomial (gene-level) #' and/or beta-binomial (feature-level) regression coefficients, feature #' proportions in each sample and corresponding likelihoods. In the differential #' exon/transcript usage analysis, the regression model is defined by a design #' matrix. In the exon/transcript usage QTL analysis, regression models are #' defined by genotypes. Currently, beta-binomial model is implemented only in #' the differential usage analysis. #' #' @param x \code{\linkS4class{dmDSprecision}} or #' \code{\linkS4class{dmSQTLprecision}} object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("dmFit", function(x, ...) standardGeneric("dmFit")) # ----------------------------------------------------------------------------- #' @inheritParams dmPrecision #' #' @details In the regression framework here, we adapt the idea from #' \code{\link[edgeR]{glmFit}} in \code{\link{edgeR}} about using a shortcut #' algorithm when the design is equivalent to simple group fitting. In such a #' case, we estimate the DM proportions for each group of samples separately #' and then recalculate the DM (and/or the BB) regression coefficients #' corresponding to the design matrix. If the design matrix does not define a #' simple group fitting, for example, when it contains a column with #' continuous values, then the regression framework is used to directly #' estimate the regression coefficients. #' #' Arguments that are used for the proportion estimation in each group when #' the shortcut fitting can be used start with \code{prop_}, and those that #' are used in the regression framework start with \code{coef_}. #' #' In the differential transcript usage analysis, setting \code{one_way = #' TRUE} allows switching to the shortcut algorithm only if the design is #' equivalent to simple group fitting. \code{one_way = FALSE} forces usage of #' the regression framework. #' #' #' @param design Numeric matrix defining the full model. #' @param bb_model Logical. Whether to perform the feature-level analysis using #' the beta-binomial model. #' @return Returns a \code{\linkS4class{dmDSfit}} or #' \code{\linkS4class{dmSQTLfit}} object. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' #' ## Fit full model proportions #' d <- dmFit(d, design = design_full) #' #' ## Get fitted proportions #' head(proportions(d)) #' ## Get the DM regression coefficients (gene-level) #' head(coefficients(d)) #' ## Get the BB regression coefficients (feature-level) #' head(coefficients(d), level = "feature") #' } #' @author Malgorzata Nowicka #' @seealso \code{\link{plotProportions}} \code{\link[edgeR]{glmFit}} #' @references McCarthy, DJ, Chen, Y, Smyth, GK (2012). Differential expression #' analysis of multifactor RNA-Seq experiments with respect to biological #' variation. Nucleic Acids Research 40, 4288-4297. #' @rdname dmFit #' @importFrom limma nonEstimable #' @export setMethod("dmFit", "dmDSprecision", function(x, design, one_way = TRUE, bb_model = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, add_uniform = FALSE, BPPARAM = BiocParallel::SerialParam()){ # Check design as in edgeR design <- as.matrix(design) stopifnot(nrow(design) == ncol(x@counts)) ne <- limma::nonEstimable(design) if(!is.null(ne)) stop(paste("Design matrix not of full rank. The following coefficients not estimable:\n", paste(ne, collapse = " "))) if(!identical(x@design_precision, design)) message(paste0("! The 'design' here is not identical as the 'design' used for precision estimation !\n")) # Check other parameters stopifnot(is.logical(one_way)) stopifnot(length(prop_mode) == 1) stopifnot(prop_mode %in% c("constrOptim")) stopifnot(length(prop_tol) == 1) stopifnot(is.numeric(prop_tol) && prop_tol > 0) stopifnot(length(coef_mode) == 1) stopifnot(coef_mode %in% c("optim", "nlminb", "nlm")) stopifnot(length(coef_tol) == 1) stopifnot(is.numeric(coef_tol) && coef_tol > 0) stopifnot(verbose %in% 0:2) # add random small fractional counts to zeros counts <- if (add_uniform) addUniform(x@counts) else x@counts # Fit the DM model: proportions and likelihoods fit <- dmDS_fit(counts = counts, design = design, precision = x@genewise_precision, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) # Calculate the Beta-Binomial likelihoods for each feature if(bb_model){ fit_bb <- bbDS_fit(counts = counts, fit = fit[["fit"]], design = design, precision = x@genewise_precision, one_way = one_way, verbose = verbose, BPPARAM = BPPARAM) return(new("dmDSfit", design_fit_full = design, fit_full = fit[["fit"]], lik_full = fit[["lik"]], coef_full = fit[["coef"]], lik_full_bb = fit_bb[["lik"]], coef_full_bb = fit_bb[["coef"]], mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = x@genewise_precision, design_precision = x@design_precision, counts = x@counts, samples = x@samples)) }else{ return(new("dmDSfit", design_fit_full = design, fit_full = fit[["fit"]], lik_full = fit[["lik"]], coef_full = fit[["coef"]], mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = x@genewise_precision, design_precision = x@design_precision, counts = x@counts, samples = x@samples)) } }) ################################################################################ ### plotProportions ################################################################################ #' Plot feature proportions #' #' This plot is available only for a group design, i.e., a design that is #' equivalent to multiple group fitting. #' #' @return For a given gene, plot the observed and estimated with #' Dirichlet-multinomial model feature proportions in each group. Estimated #' group proportions are marked with diamond shapes. #' #' @param x \code{\linkS4class{dmDSfit}}, \code{\linkS4class{dmDStest}} or #' \code{\linkS4class{dmSQTLfit}}, \code{\linkS4class{dmSQTLtest}} object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("plotProportions", function(x, ...) standardGeneric("plotProportions")) # ------------------------------------------------------------------------------ #' @inheritParams plotData #' @param gene_id Character indicating a gene ID to be plotted. #' @param group_variable Character indicating the grouping variable which is one #' of the columns in the \code{samples} slot of \code{x}. #' @param plot_type Character defining the type of the plot produced. Possible #' values \code{"barplot"}, \code{"boxplot1"}, \code{"boxplot2"}, #' \code{"lineplot"}, \code{"ribbonplot"}. #' @param order_features Logical. Whether to plot the features ordered by their #' expression. #' @param order_samples Logical. Whether to plot the samples ordered by the #' group variable. If \code{FALSE} order from the \code{sample(x)} is kept. #' @param plot_fit Logical. Whether to plot the proportions estimated by the #' full model. #' @param plot_main Logical. Whether to plot a title with the information about #' the Dirichlet-multinomial estimates. #' @param group_colors Character vector with colors for each group defined by #' \code{group_variable}. #' @param feature_colors Character vector with colors for each feature of gene #' defined by \code{gene_id}. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' #' ## Fit full model proportions #' d <- dmFit(d, design = design_full) #' #' ## Get fitted proportions #' head(proportions(d)) #' ## Get the DM regression coefficients (gene-level) #' head(coefficients(d)) #' ## Get the BB regression coefficients (feature-level) #' head(coefficients(d), level = "feature") #' #' ## Fit null model proportions and perform the LR test to detect DTU #' d <- dmTest(d, coef = "groupKD") #' #' ## Plot the gene-level p-values #' plotPValues(d) #' #' ## Get the gene-level results #' head(results(d)) #' #' ## Plot feature proportions for a top DTU gene #' res <- results(d) #' res <- res[order(res$pvalue, decreasing = FALSE), ] #' #' top_gene_id <- res$gene_id[1] #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "lineplot") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "ribbonplot") #' } #' @author Malgorzata Nowicka #' @seealso \code{\link{plotData}}, \code{\link{plotPrecision}}, #' \code{\link{plotPValues}} #' @rdname plotProportions #' @export setMethod("plotProportions", "dmDSfit", function(x, gene_id, group_variable, plot_type = "barplot", order_features = TRUE, order_samples = TRUE, plot_fit = TRUE, plot_main = TRUE, group_colors = NULL, feature_colors = NULL){ stopifnot(gene_id %in% names(x@counts)) stopifnot(plot_type %in% c("barplot", "boxplot1", "boxplot2", "lineplot", "ribbonplot")) stopifnot(is.logical(order_features)) stopifnot(is.logical(order_samples)) stopifnot(is.logical(plot_fit)) stopifnot(is.logical(plot_main)) stopifnot(length(group_variable) == 1) stopifnot(group_variable %in% colnames(samples(x))) group <- x@samples[, group_variable] if(is.factor(group)){ group <- factor(group) }else{ group <- factor(group, levels = group) } counts_gene <- x@counts[[gene_id]] if(!is.null(group_colors) && plot_type %in% c("barplot", "boxplot1", "lineplot")) stopifnot(length(group_colors) == nlevels(group)) if(!is.null(feature_colors) && plot_type %in% c("boxplot2", "ribbonplot")) stopifnot(length(feature_colors) == nrow(counts_gene)) if(nrow(counts_gene) <= 1) stop("!Gene has to have at least 2 features! \n") main <- NULL if(plot_main){ mean_expression_gene <- mean(colSums(counts_gene), na.rm = TRUE) main <- paste0(gene_id, "\n Mean expression = ", round(mean_expression_gene)) precision_gene <- x@genewise_precision[gene_id] main <- paste0(main, ", Precision = ", round(precision_gene, 2)) } fit_full <- NULL if(plot_fit){ fit_full <- x@fit_full[[gene_id]] } ggp <- dm_plotProportions(counts = counts_gene, group = group, md = x@samples, fit_full = fit_full, main = main, plot_type = plot_type, order_features = order_features, order_samples = order_samples, group_colors = group_colors, feature_colors = feature_colors) return(ggp) }) DRIMSeq/R/class_dmDSprecision.R0000755000175200017520000006357014136051631017272 0ustar00biocbuildbiocbuild#' @include class_dmDSdata.R NULL ################################################################################ ### dmDSprecision class ################################################################################ #' dmDSprecision object #' #' dmDSprecision extends the \code{\linkS4class{dmDSdata}} by adding the #' precision estimates of the Dirichlet-multinomial distribution used to model #' the feature (e.g., transcript, exon, exonic bin) counts for each gene in the #' differential usage analysis. Result of calling the \code{\link{dmPrecision}} #' function. #' #' @details Normally, in the differential analysis based on RNA-seq data, such #' as, for example, differential gene expression, dispersion (of #' negative-binomial model) is estimated. Here, we estimate precision of the #' Dirichlet-multinomial model as it is more convenient computationally. To #' obtain dispersion estimates, one can use a formula: dispersion = 1 / (1 + #' precision). #' #' @return #' #' \itemize{ \item \code{mean_expression(x)}: Get a data frame with mean gene #' expression. \item \code{common_precision(x), common_precision(x) <- value}: #' Get or set common precision. \code{value} must be numeric of length 1. \item #' \code{genewise_precision(x), genewise_precision(x) <- value}: Get a data #' frame with gene-wise precision or set new gene-wise precision. \code{value} #' must be a data frame with "gene_id" and "genewise_precision" columns. } #' #' @param x,object dmDSprecision object. #' @param value Values that replace current attributes. #' @param ... Other parameters that can be defined by methods using this #' generic. #' #' @slot mean_expression Numeric vector of mean gene expression. #' @slot common_precision Numeric value of estimated common precision. #' @slot genewise_precision Numeric vector of estimated gene-wise precisions. #' @slot design_precision Numeric matrix of the design used to estimate #' precision. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' } #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmDSdata}}, \code{\linkS4class{dmDSfit}}, #' \code{\linkS4class{dmDStest}} setClass("dmDSprecision", contains = "dmDSdata", representation(mean_expression = "numeric", common_precision = "numeric", genewise_precision = "numeric", design_precision = "matrix")) # ----------------------------------------------------------------------------- setValidity("dmDSprecision", function(object){ ## Has to return TRUE when valid object! out <- TRUE if(length(object@mean_expression) > 0){ if(length(object@mean_expression) == length(object@counts)){ if(all(names(object@mean_expression) == names(object@counts))) out <- TRUE else return(paste0("Different names of 'counts' and 'mean_expression'")) } else return(paste0("Unequal length of 'counts' and 'mean_expression'")) } if(length(object@genewise_precision) > 0){ if(length(object@genewise_precision) == length(object@counts)){ if(all(names(object@genewise_precision) == names(object@counts))) out <- TRUE else return(paste0("Different names of 'counts' and 'genewise_precision'")) } else return(paste0("Unequal length of 'counts' and 'genewise_precision'")) } if(length(object@common_precision) > 0){ if(length(object@common_precision) == 1) out <- TRUE else return(paste0("'common_precision' must be a vector of length 1'")) } if(nrow(object@design_precision) == ncol(object@counts)){ out <- TRUE }else{ return(paste0("Number of rows in the design matrix must be equal to the number of columns in counts")) } return(out) }) ################################################################################ ### accessing methods ################################################################################ #' @rdname dmDSprecision-class #' @param type Character indicating which design matrix should be returned. #' Possible values \code{"precision"}, \code{"full_model"} or #' \code{"null_model"}. #' @export setMethod("design", "dmDSprecision", function(object, type = "precision"){ stopifnot(type %in% c("precision", "full_model", "null_model")) if(type == "precision") object@design_precision else NULL }) #' @rdname dmDSprecision-class #' @export setGeneric("mean_expression", function(x, ...) standardGeneric("mean_expression")) #' @rdname dmDSprecision-class #' @export setMethod("mean_expression", "dmDSprecision", function(x){ data.frame(gene_id = names(x@mean_expression), mean_expression = x@mean_expression, stringsAsFactors = FALSE, row.names = NULL) }) #' @rdname dmDSprecision-class #' @export setGeneric("common_precision", function(x, ...) standardGeneric("common_precision")) #' @rdname dmDSprecision-class #' @export setMethod("common_precision", "dmDSprecision", function(x) x@common_precision ) #' @rdname dmDSprecision-class #' @export setGeneric("common_precision<-", function(x, value) standardGeneric("common_precision<-")) #' @rdname dmDSprecision-class #' @export setMethod("common_precision<-", "dmDSprecision", function(x, value){ ### value must be a numeric of length 1 names(value) <- NULL return(new("dmDSprecision", mean_expression = x@mean_expression, common_precision = value, genewise_precision = x@genewise_precision, design_precision = x@design_precision, counts = x@counts, samples = x@samples)) }) #' @rdname dmDSprecision-class #' @export setGeneric("genewise_precision", function(x, ...) standardGeneric("genewise_precision")) #' @rdname dmDSprecision-class #' @export setMethod("genewise_precision", "dmDSprecision", function(x){ data.frame(gene_id = names(x@genewise_precision), genewise_precision = x@genewise_precision, stringsAsFactors = FALSE, row.names = NULL) }) #' @rdname dmDSprecision-class #' @export setGeneric("genewise_precision<-", function(x, value) standardGeneric("genewise_precision<-")) #' @rdname dmDSprecision-class #' @export setMethod("genewise_precision<-", "dmDSprecision", function(x, value){ # value must be a data frame with gene_id and genewise_precision stopifnot(all(c("gene_id", "genewise_precision") %in% colnames(value))) stopifnot(all(names(x@counts) %in% value[,"gene_id"])) order <- match(names(x@counts), value[,"gene_id"]) return(new("dmDSprecision", mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = value[order, "genewise_precision"], design_precision = x@design_precision, counts = x@counts, samples = x@samples)) }) # ----------------------------------------------------------------------------- setMethod("show", "dmDSprecision", function(object){ callNextMethod(object) cat(" design()\n") cat(" mean_expression(), common_precision(), genewise_precision()\n") }) ################################################################################ ### dmPrecision ################################################################################ #' Estimate the precision parameter in the Dirichlet-multinomial model #' #' Maximum likelihood estimates of the precision parameter in the #' Dirichlet-multinomial model used for the differential exon/transcript usage #' or QTL analysis. #' #' @details Normally, in the differential analysis based on RNA-seq data, such #' as, for example, differential gene expression, dispersion (of #' negative-binomial model) is estimated. Here, we estimate precision of the #' Dirichlet-multinomial model as it is more convenient computationally. To #' obtain dispersion estimates, one can use a formula: dispersion = 1 / (1 + #' precision). #' #' @param x \code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} #' object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("dmPrecision", function(x, ...) standardGeneric("dmPrecision")) # ----------------------------------------------------------------------------- #' @details Parameters that are used in the precision (dispersion = 1 / (1 + #' precision)) estimation start with prefix \code{prec_}. Those that are used #' for the proportion estimation in each group when the shortcut fitting #' \code{one_way = TRUE} can be used start with \code{prop_}, and those that #' are used in the regression framework start with \code{coef_}. #' #' There are two optimization methods implemented within dmPrecision: #' \code{"optimize"} for the common precision and \code{"grid"} for the #' gene-wise precision. #' #' Only part of the precision parameters in dmPrecision have an influence on #' a given optimization method. Here is a list of such active parameters: #' #' \code{"optimize"}: #' #' \itemize{ \item \code{prec_interval}: Passed as \code{interval}. \item #' \code{prec_tol}: The accuracy defined as \code{tol}. } #' #' \code{"grid"}, which uses the grid approach from #' \code{\link[edgeR]{estimateDisp}} in \code{\link{edgeR}}: #' #' \itemize{ \item \code{prec_init}, \code{prec_grid_length}, #' \code{prec_grid_range}: Parameters used to construct the search grid #' \code{prec_init * 2^seq(from = prec_grid_range[1]}, \code{to = #' prec_grid_range[2]}, \code{length = prec_grid_length)}. \item #' \code{prec_moderation}: Dipsersion shrinkage is available only with #' \code{"grid"} method. \item \code{prec_prior_df}: Used only when precision #' shrinkage is activated. Moderated likelihood is equal to \code{loglik + #' prec_prior_df * moderation}. Higher \code{prec_prior_df}, more shrinkage #' toward common or trended precision is applied. \item \code{prec_span}: #' Used only when precision moderation toward trend is activated. } #' #' @param design Numeric matrix defining the model that should be used when #' estimating precision. Normally this should be a full model design used #' also in \code{\link{dmFit}}. #' @param mean_expression Logical. Whether to estimate the mean expression of #' genes. #' @param common_precision Logical. Whether to estimate the common precision. #' @param genewise_precision Logical. Whether to estimate the gene-wise #' precision. #' @param prec_adjust Logical. Whether to use the Cox-Reid adjusted or #' non-adjusted profile likelihood. #' @param one_way Logical. Should the shortcut fitting be used when the design #' corresponds to multiple group comparison. This is a similar approach as in #' \code{\link{edgeR}}. If \code{TRUE} (the default), then proportions are #' fitted per group and regression coefficients are recalculated from those #' fits. #' @param prec_subset Value from 0 to 1 defining the percentage of genes used in #' common precision estimation. The default is 0.1, which uses 10% of #' randomly selected genes to speed up the precision estimation process. Use #' \code{set.seed} function to make the analysis reproducible. See Examples. #' @param prec_interval Numeric vector of length 2 defining the interval of #' possible values for the common precision. #' @param prec_tol The desired accuracy when estimating common precision. #' @param prec_init Initial precision. If \code{common_precision} is #' \code{TRUE}, then \code{prec_init} is overwritten by common precision #' estimate. #' @param prec_grid_length Length of the search grid. #' @param prec_grid_range Vector giving the limits of grid interval. #' @param prec_moderation Precision moderation method. One can choose to shrink #' the precision estimates toward the common precision (\code{"common"}) or #' toward the (precision versus mean expression) trend (\code{"trended"}) #' @param prec_prior_df Degree of moderation (shrinkage) in case when it can not #' be calculated automaticaly (number of genes on the upper boundary of grid #' is smaller than 10). By default it is equal to 0. #' @param prec_span Value from 0 to 1 defining the percentage of genes used in #' smoothing sliding window when calculating the precision versus mean #' expression trend. #' @param prop_mode Optimization method used to estimate proportions. Possible #' value \code{"constrOptim"}. #' @param prop_tol The desired accuracy when estimating proportions. #' @param coef_mode Optimization method used to estimate regression #' coefficients. Possible value \code{"optim"}. #' @param coef_tol The desired accuracy when estimating regression coefficients. #' @param verbose Numeric. Definie the level of progress messages displayed. 0 - #' no messages, 1 - main messages, 2 - message for every gene fitting. #' @param add_uniform Whether to add a small fractional count to zeros, #' (adding a uniform random variable between 0 and 0.1). #' This option allows for the fitting of genewise precision and coefficients #' for genes with two features having all zero for one group, or the last #' feature having all zero for one group. #' @param BPPARAM Parallelization method used by #' \code{\link[BiocParallel]{bplapply}}. #' #' @return Returns a \code{\linkS4class{dmDSprecision}} or #' \code{\linkS4class{dmSQTLprecision}} object. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' } #' @seealso \code{\link{plotPrecision}} \code{\link[edgeR]{estimateDisp}} #' @author Malgorzata Nowicka #' @references McCarthy, DJ, Chen, Y, Smyth, GK (2012). Differential expression #' analysis of multifactor RNA-Seq experiments with respect to biological #' variation. Nucleic Acids Research 40, 4288-4297. #' @rdname dmPrecision #' @importFrom limma nonEstimable #' @importFrom stats runif #' @export setMethod("dmPrecision", "dmDSdata", function(x, design, mean_expression = TRUE, common_precision = TRUE, genewise_precision = TRUE, prec_adjust = TRUE, prec_subset = 0.1, prec_interval = c(0, 1e+3), prec_tol = 1e+01, prec_init = 100, prec_grid_length = 21, prec_grid_range = c(-10, 10), prec_moderation = "trended", prec_prior_df = 0, prec_span = 0.1, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, add_uniform = FALSE, BPPARAM = BiocParallel::SerialParam()){ # Check design as in edgeR design <- as.matrix(design) stopifnot(nrow(design) == ncol(x@counts)) ne <- limma::nonEstimable(design) if(!is.null(ne)) stop(paste("Design matrix not of full rank. The following coefficients not estimable:\n", paste(ne, collapse = " "))) # Check other parameters stopifnot(is.logical(mean_expression)) stopifnot(is.logical(common_precision)) stopifnot(is.logical(genewise_precision)) stopifnot(is.logical(prec_adjust)) stopifnot(length(prec_subset) == 1) stopifnot(is.numeric(prec_subset) && prec_subset > 0 && prec_subset <= 1) stopifnot(length(prec_interval) == 2) stopifnot(prec_interval[1] < prec_interval[2]) stopifnot(length(prec_tol) == 1) stopifnot(is.numeric(prec_tol) && prec_tol > 0) stopifnot(length(prec_init) == 1) stopifnot(is.numeric(prec_init)) stopifnot(prec_grid_length > 2) stopifnot(length(prec_grid_range) == 2) stopifnot(prec_grid_range[1] < prec_grid_range[2]) stopifnot(length(prec_moderation) == 1) stopifnot(prec_moderation %in% c("none", "common", "trended")) stopifnot(length(prec_prior_df) == 1) stopifnot(is.numeric(prec_prior_df) && prec_prior_df >= 0) stopifnot(length(prec_span) == 1) stopifnot(is.numeric(prec_span) && prec_span > 0 && prec_span < 1) stopifnot(is.logical(one_way)) stopifnot(length(prop_mode) == 1) stopifnot(prop_mode %in% c("constrOptim")) stopifnot(length(prop_tol) == 1) stopifnot(is.numeric(prop_tol) && prop_tol > 0) stopifnot(length(coef_mode) == 1) stopifnot(coef_mode %in% c("optim", "nlminb", "nlm")) stopifnot(length(coef_tol) == 1) stopifnot(is.numeric(coef_tol) && coef_tol > 0) stopifnot(verbose %in% 0:2) if(mean_expression || (genewise_precision && prec_moderation == "trended")){ mean_expression <- dm_estimateMeanExpression(counts = x@counts, verbose = verbose) }else{ mean_expression <- numeric() } if(common_precision){ if(prec_subset < 1){ message(paste0("! Using a subset of ", prec_subset, " genes to estimate common precision !\n")) genes2keep <- sample(1:length(x@counts), max(round(prec_subset * length(x@counts)), 1), replace = FALSE) }else{ genes2keep <- 1:length(x@counts) } common_precision <- dmDS_estimateCommonPrecision( counts = x@counts[genes2keep, ], design = design, prec_adjust = prec_adjust, prec_interval = prec_interval, prec_tol = prec_tol, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) }else{ common_precision <- numeric() } if(genewise_precision){ if(length(common_precision) == 1){ message("! Using common_precision = ", round(common_precision, 4), " as prec_init !\n") prec_init <- common_precision } # add random small fractional counts to zeros counts <- if (add_uniform) addUniform(x@counts) else x@counts genewise_precision <- dmDS_estimateTagwisePrecision(counts = counts, design = design, mean_expression = mean_expression, prec_adjust = prec_adjust, prec_init = prec_init, prec_grid_length = prec_grid_length, prec_grid_range = prec_grid_range, prec_moderation = prec_moderation, prec_prior_df = prec_prior_df, prec_span = prec_span, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) }else{ genewise_precision <- numeric() } return(new("dmDSprecision", mean_expression = mean_expression, common_precision = common_precision, genewise_precision = genewise_precision, design_precision = design, counts = x@counts, samples = x@samples)) }) ################################################################################ ### plotPrecision ################################################################################ #' Precision versus mean expression plot #' #' @return Normally in the differential analysis based on RNA-seq data, such #' plot has dispersion parameter plotted on the y-axis. Here, the y-axis #' represents precision since in the Dirichlet-multinomial model this is the #' parameter that is directly estimated. It is important to keep in mind that #' the precision parameter (gamma0) is inverse proportional to dispersion #' (theta): theta = 1 / (1 + gamma0). In RNA-seq data, we can typically #' observe a trend where the dispersion decreases (here, precision increases) #' for genes with higher mean expression. #' #' @param x \code{\linkS4class{dmDSprecision}} or #' \code{\linkS4class{dmSQTLprecision}} object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("plotPrecision", function(x, ...) standardGeneric("plotPrecision")) # ----------------------------------------------------------------------------- #' @inheritParams plotData #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' } #' @author Malgorzata Nowicka #' @seealso \code{\link{plotData}}, \code{\link{plotProportions}}, #' \code{\link{plotPValues}} #' #' @rdname plotPrecision #' @export setMethod("plotPrecision", "dmDSprecision", function(x){ if(!length(x@genewise_precision) == length(x@counts)) stop("Genewise precision must be estimated for each gene!") if(!length(x@genewise_precision) == length(x@mean_expression)) stop("Mean expression must be estimated for each gene!") if(length(x@common_precision) == 0){ common_precision <- NULL }else{ common_precision <- x@common_precision } ggp <- dm_plotPrecision(genewise_precision = x@genewise_precision, mean_expression = x@mean_expression, nr_features = elementNROWS(x@counts), common_precision = common_precision) return(ggp) }) # function to add small fraction of counts to zeros addUniform <- function(counts, uniform_max=0.1) { counts_new <- lapply(seq_along(counts), function(g) { expr <- counts[[g]] zeros <- expr == 0 expr[zeros] <- runif(sum(zeros), 0, uniform_max) expr }) names(counts_new) <- names(counts) MatrixList(counts_new) } DRIMSeq/R/class_dmDStest.R0000755000175200017520000005253514136051631016255 0ustar00biocbuildbiocbuild#' @include class_dmDSfit.R NULL ############################################################################### ### dmDStest class ############################################################################### #' dmDStest object #' #' dmDStest extends the \code{\linkS4class{dmDSfit}} class by adding the null #' model Dirichlet-multinomial (DM) and beta-binomial (BB) likelihoods and the #' gene-level and feature-level results of testing for differential #' exon/transcript usage. Result of calling the \code{\link{dmTest}} function. #' #' @return #' #' \itemize{ \item \code{results(x)}: get a data frame with gene-level or #' feature-level results.} #' #' @param x,object dmDStest object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' #' @slot design_fit_null Numeric matrix of the design used to fit the null #' model. #' @slot lik_null Numeric vector of the per gene DM null model likelihoods. #' @slot lik_null_bb Numeric vector of the per gene BB null model likelihoods. #' @slot results_gene Data frame with the gene-level results including: #' \code{gene_id} - gene IDs, \code{lr} - likelihood ratio statistics based on #' the DM model, \code{df} - degrees of freedom, \code{pvalue} - p-values and #' \code{adj_pvalue} - Benjamini & Hochberg adjusted p-values. #' @slot results_feature Data frame with the feature-level results including: #' \code{gene_id} - gene IDs, \code{feature_id} - feature IDs, \code{lr} - #' likelihood ratio statistics based on the BB model, \code{df} - degrees of #' freedom, \code{pvalue} - p-values and \code{adj_pvalue} - Benjamini & #' Hochberg adjusted p-values. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' #' ## Fit full model proportions #' d <- dmFit(d, design = design_full) #' #' ## Get fitted proportions #' head(proportions(d)) #' ## Get the DM regression coefficients (gene-level) #' head(coefficients(d)) #' ## Get the BB regression coefficients (feature-level) #' head(coefficients(d), level = "feature") #' #' ## Fit null model proportions and perform the LR test to detect DTU #' d <- dmTest(d, coef = "groupKD") #' #' ## Plot the gene-level p-values #' plotPValues(d) #' #' ## Get the gene-level results #' head(results(d)) #' #' ## Plot feature proportions for a top DTU gene #' res <- results(d) #' res <- res[order(res$pvalue, decreasing = FALSE), ] #' #' top_gene_id <- res$gene_id[1] #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "lineplot") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "ribbonplot") #' #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmDSdata}}, \code{\linkS4class{dmDSprecision}}, #' \code{\linkS4class{dmDSfit}} setClass("dmDStest", contains = "dmDSfit", representation(design_fit_null = "matrix", lik_null = "numeric", lik_null_bb = "numeric", results_gene = "data.frame", results_feature = "data.frame")) # ------------------------------------------------------------------------------ setValidity("dmDStest", function(object){ # Has to return TRUE when valid object! if(!length(object@lik_null) == length(object@counts)) return("Different number of genes in 'counts' and 'lik_null'") if(length(object@lik_null_bb) > 0){ if(!length(object@lik_null_bb) == nrow(object@counts)) return("Different number of features in 'counts' and 'lik_null_bb'") } # TODO: Add more checks for results return(TRUE) }) ############################################################################### ### accessing methods ############################################################################### #' @rdname dmDStest-class #' @inheritParams dmDSprecision-class #' @export setMethod("design", "dmDStest", function(object, type = "null_model"){ stopifnot(type %in% c("precision", "full_model", "null_model")) if(type == "precision") object@design_precision else if(type == "full_model") object@design_fit_full else object@design_fit_null }) #' @rdname dmDStest-class #' @export setGeneric("results", function(x, ...) standardGeneric("results")) #' @rdname dmDStest-class #' @inheritParams dmDSfit-class #' @export setMethod("results", "dmDStest", function(x, level = "gene"){ stopifnot(length(level) == 1) stopifnot(level %in% c("gene", "feature")) slot(x, paste0("results_", level)) }) # ----------------------------------------------------------------------------- setMethod("show", "dmDStest", function(object){ callNextMethod(object) cat(" results()\n") }) ############################################################################### ### dmTest ############################################################################### #' Likelihood ratio test to detect differential transcript/exon usage #' #' First, estimate the null Dirichlet-multinomial and beta-binomial model #' parameters and likelihoods using the null model design. Second, perform the #' gene-level (DM model) and feature-level (BB model) likelihood ratio tests. In #' the differential exon/transcript usage analysis, the null model is defined by #' the null design matrix. In the exon/transcript usage QTL analysis, null #' models are defined by a design with intercept only. Currently, beta-binomial #' model is implemented only in the differential usage analysis. #' #' @param x \code{\linkS4class{dmDSfit}} or \code{\linkS4class{dmSQTLfit}} #' object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' @export setGeneric("dmTest", function(x, ...) standardGeneric("dmTest")) # ----------------------------------------------------------------------------- #' @inheritParams dmFit #' @param coef Integer or character vector indicating which coefficients of the #' linear model are to be tested equal to zero. Values must indicate column #' numbers or column names of the \code{design} used in \code{\link{dmFit}}. #' @param design Numeric matrix defining the null model. #' @param contrast Numeric vector or matrix specifying one or more contrasts of #' the linear model coefficients to be tested equal to zero. For a matrix, #' number of rows (for a vector, its length) must equal to the number of #' columns of \code{design} used in \code{\link{dmFit}}. #' #' @details One must specify one of the arguments: \code{coef}, \code{design} or #' \code{contrast}. #' #' When \code{contrast} is used to define the null model, the null design #' matrix is recalculated using the same approach as in #' \code{\link[edgeR]{glmLRT}} function from \code{\link{edgeR}}. #' #' @return Returns a \code{\linkS4class{dmDStest}} or #' \code{\linkS4class{dmSQTLtest}} object. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' #' ## Fit full model proportions #' d <- dmFit(d, design = design_full) #' #' ## Get fitted proportions #' head(proportions(d)) #' ## Get the DM regression coefficients (gene-level) #' head(coefficients(d)) #' ## Get the BB regression coefficients (feature-level) #' head(coefficients(d), level = "feature") #' #' ## Fit null model proportions and perform the LR test to detect DTU #' d <- dmTest(d, coef = "groupKD") #' #' ## Plot the gene-level p-values #' plotPValues(d) #' #' ## Get the gene-level results #' head(results(d)) #' #' ## Plot feature proportions for a top DTU gene #' res <- results(d) #' res <- res[order(res$pvalue, decreasing = FALSE), ] #' #' top_gene_id <- res$gene_id[1] #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "lineplot") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "ribbonplot") #' } #' @author Malgorzata Nowicka #' @seealso \code{\link{plotPValues}} \code{\link[edgeR]{glmLRT}} #' @references McCarthy, DJ, Chen, Y, Smyth, GK (2012). Differential expression #' analysis of multifactor RNA-Seq experiments with respect to biological #' variation. Nucleic Acids Research 40, 4288-4297. #' @rdname dmTest #' @importFrom limma nonEstimable #' @export setMethod("dmTest", "dmDSfit", function(x, coef = NULL, design = NULL, contrast = NULL, one_way = TRUE, bb_model = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()){ # Check parameters stopifnot(is.logical(one_way)) stopifnot(length(prop_mode) == 1) stopifnot(prop_mode %in% c("constrOptim")) stopifnot(length(prop_tol) == 1) stopifnot(is.numeric(prop_tol) && prop_tol > 0) stopifnot(length(coef_mode) == 1) stopifnot(coef_mode %in% c("optim", "nlminb", "nlm")) stopifnot(length(coef_tol) == 1) stopifnot(is.numeric(coef_tol) && coef_tol > 0) stopifnot(verbose %in% 0:2) if(!sum(!unlist(lapply(list(coef, design, contrast), is.null))) == 1) stop(paste0("Only one of the ways to define the null model 'coef', 'design' or 'contrast' can be used!")) # Check coef if(!is.null(coef)){ # Check the full model design matrix nbeta <- ncol(x@design_fit_full) if(nbeta < 2) stop("Need at least two columns for design, usually the first is the intercept column!") if(length(coef) > 1) coef <- unique(coef) if(is.numeric(coef)){ stopifnot(max(coef) <= nbeta) }else if(is.character(coef)){ if(!all(coef %in% colnames(x@design_fit_full))) stop("'coef' does not match the columns of the design matrix!") coef <- match(coef, colnames(x@design_fit_full)) } # Null design matrix design0 <- x@design_fit_full[, -coef, drop = FALSE] } # Check design if(!is.null(design)){ # Check design as in edgeR design <- as.matrix(design) stopifnot(nrow(design) == ncol(x@counts)) ne <- limma::nonEstimable(design) if(!is.null(ne)) stop(paste("Design matrix not of full rank. The following coefficients not estimable:\n", paste(ne, collapse = " "))) # Null design matrix design0 <- design } # Check contrast exactly as in edgeR in glmLRT() if(!is.null(contrast)){ design <- x@design_fit_full contrast <- as.matrix(contrast) stopifnot(nrow(contrast) == ncol(design)) qrc <- qr(contrast) ncontrasts <- qrc$rank if(ncontrasts == 0) stop("Contrasts are all zero!") coef <- 1:ncontrasts nlibs <- nrow(design) Dvec <- rep.int(1, nlibs) Dvec[coef] <- diag(qrc$qr)[coef] Q <- qr.Q(qrc, complete = TRUE, Dvec = Dvec) design <- design %*% Q # Null design matrix design0 <- design[, -coef, drop = FALSE] } # Fit the DM null model: proportions and likelihoods fit0 <- dmDS_fit(counts = x@counts, design = design0, precision = x@genewise_precision, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) # Calculate the DM degrees of freedom for the LR test: df_full - df_null df <- (ncol(x@design_fit_full) - ncol(design0)) * (elementNROWS(x@coef_full) - 1) results_gene <- dm_LRT(lik_full = x@lik_full, lik_null = fit0[["lik"]], df = df, verbose = verbose) results_gene <- data.frame(gene_id = rownames(results_gene), results_gene, stringsAsFactors = FALSE, row.names = NULL) # Calculate the Beta-Binomial null likelihoods for each feature if(bb_model && length(x@lik_full_bb) > 0){ fit0_bb <- bbDS_fit(counts = x@counts, fit = fit0[["fit"]], design = design0, precision = x@genewise_precision, one_way = one_way, verbose = verbose, BPPARAM = BPPARAM) # Calculate the BB degrees of freedom for the LR test df <- rep.int(ncol(x@design_fit_full) - ncol(design0), length(x@lik_full_bb)) results_feature <- dm_LRT(lik_full = x@lik_full_bb, lik_null = fit0_bb[["lik"]], df = df, verbose = verbose) results_feature <- data.frame( gene_id = rep.int(names(x@counts), elementNROWS(x@counts)), feature_id = rownames(results_feature), results_feature, stringsAsFactors = FALSE, row.names = NULL) return(new("dmDStest", results_gene = results_gene, results_feature = results_feature, design_fit_null = design0, lik_null = fit0[["lik"]], lik_null_bb = fit0_bb[["lik"]], design_fit_full = x@design_fit_full, fit_full = x@fit_full, lik_full = x@lik_full, coef_full = x@coef_full, lik_full_bb = x@lik_full_bb, coef_full_bb = x@coef_full_bb, mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = x@genewise_precision, design_precision = x@design_precision, counts = x@counts, samples = x@samples)) }else{ if(bb_model && length(x@lik_full_bb) == 0) message("Beta-Binomial model is not fitted because bb_model=FALSE in dmFit! Rerun dmFit with bb_model=TRUE.") return(new("dmDStest", results_gene = results_gene, design_fit_null = design0, lik_null = fit0[["lik"]], design_fit_full = x@design_fit_full, fit_full = x@fit_full, lik_full = x@lik_full, coef_full = x@coef_full, lik_full_bb = x@lik_full_bb, coef_full_bb = x@coef_full_bb, mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = x@genewise_precision, design_precision = x@design_precision, counts = x@counts, samples = x@samples)) } }) ############################################################################### ### plotPValues ############################################################################### #' Plot p-value distribution #' #' @return Plot a histogram of p-values. #' #' @param x \code{\linkS4class{dmDStest}} or \code{\linkS4class{dmSQTLtest}} #' object. #' @export setGeneric("plotPValues", function(x, ...) standardGeneric("plotPValues")) # ---------------------------------------------------------------------------- #' @inheritParams results #' @examples #' # -------------------------------------------------------------------------- #' # Create dmDSdata object #' # -------------------------------------------------------------------------- #' ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package #' #' library(PasillaTranscriptExpr) #' \donttest{ #' data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") #' #' ## Load metadata #' pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Load counts #' pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), #' header = TRUE, as.is = TRUE) #' #' ## Create a pasilla_samples data frame #' pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, #' group = pasilla_metadata$condition) #' levels(pasilla_samples$group) #' #' ## Create a dmDSdata object #' d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) #' #' ## Use a subset of genes, which is defined in the following file #' gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) #' #' d <- d[names(d) %in% gene_id_subset, ] #' #' # -------------------------------------------------------------------------- #' # Differential transcript usage analysis - simple two group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' ## Check what is the minimal number of replicates per condition #' table(samples(d)$group) #' #' d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, #' min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## Create the design matrix #' design_full <- model.matrix(~ group, data = samples(d)) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d, design = design_full) #' #' plotPrecision(d) #' #' head(mean_expression(d)) #' common_precision(d) #' head(genewise_precision(d)) #' #' ## Fit full model proportions #' d <- dmFit(d, design = design_full) #' #' ## Get fitted proportions #' head(proportions(d)) #' ## Get the DM regression coefficients (gene-level) #' head(coefficients(d)) #' ## Get the BB regression coefficients (feature-level) #' head(coefficients(d), level = "feature") #' #' ## Fit null model proportions and perform the LR test to detect DTU #' d <- dmTest(d, coef = "groupKD") #' #' ## Plot the gene-level p-values #' plotPValues(d) #' #' ## Get the gene-level results #' head(results(d)) #' #' ## Plot feature proportions for a top DTU gene #' res <- results(d) #' res <- res[order(res$pvalue, decreasing = FALSE), ] #' #' top_gene_id <- res$gene_id[1] #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "lineplot") #' #' plotProportions(d, gene_id = top_gene_id, group_variable = "group", #' plot_type = "ribbonplot") #' } #' @author Malgorzata Nowicka #' @seealso \code{\link{plotData}}, \code{\link{plotPrecision}}, #' \code{\link{plotProportions}} #' @rdname plotPValues #' @export setMethod("plotPValues", "dmDStest", function(x, level = "gene"){ stopifnot(length(level) == 1) stopifnot(level %in% c("gene", "feature")) res <- slot(x, paste0("results_", level)) if(nrow(res) > 0) ggp <- dm_plotPValues(pvalues = res[, "pvalue"]) else stop("Feature-level results are not available! Set bb_model=TRUE in dmFit and dmTest") return(ggp) }) DRIMSeq/R/class_dmSQTLdata.R0000755000175200017520000005036214136051631016460 0ustar00biocbuildbiocbuild#' @include class_MatrixList.R NULL ############################################################################### ### dmSQTLdata class ############################################################################### #' dmSQTLdata object #' #' dmSQTLdata contains genomic feature expression (counts), genotypes and sample #' information needed for the transcript/exon usage QTL analysis. It can be #' created with function \code{\link{dmSQTLdata}}. #' #' @return #' #' \itemize{ \item \code{names(x)}: Get the gene names. \item \code{length(x)}: #' Get the number of genes. \item \code{x[i, j]}: Get a subset of dmDSdata #' object that consists of counts, genotypes and blocks corresponding to genes i #' and samples j. } #' #' @param x,object dmSQTLdata object. #' @param i,j Parameters used for subsetting. #' #' @slot counts \code{\linkS4class{MatrixList}} of expression, in counts, of #' genomic features. Rows correspond to genomic features, such as exons or #' transcripts. Columns correspond to samples. MatrixList is partitioned in a #' way that each of the matrices in a list contains counts for a single gene. #' @slot genotypes MatrixList of unique genotypes. Rows correspond to blocks, #' columns to samples. Each matrix in this list is a collection of unique #' genotypes that are matched with a given gene. #' @slot blocks MatrixList with two columns \code{block_id} and \code{snp_id}. #' For each gene, it identifies SNPs with identical genotypes across the #' samples and assigns them to blocks. #' @slot samples Data frame with information about samples. It must contain #' variable \code{sample_id} with unique sample names. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' \donttest{ #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' } #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmSQTLprecision}}, #' \code{\linkS4class{dmSQTLfit}}, \code{\linkS4class{dmSQTLtest}} setClass("dmSQTLdata", representation(counts = "MatrixList", genotypes = "MatrixList", blocks = "MatrixList", samples = "data.frame")) ################################### setValidity("dmSQTLdata", function(object){ ### Has to return TRUE when valid object! if(!ncol(object@counts) == ncol(object@genotypes)) return(paste0("Unequal number of samples in 'counts' and 'genotypes' ", ncol(object@counts), " and ", ncol(object@genotypes))) ### Mystery: This does not pass # if(!all(colnames(object@blocks) %in% c("block_id", "snp_id"))) # return(paste0("'blocks' must contain 'block_id' and 'snp_id' variables")) if(!all(names(object@counts) == names(object@genotypes))) return("'genotypes' and 'counts' do not contain the same genes") if(!all(names(object@blocks) == names(object@genotypes))) return("'genotypes' and 'blocks' do not contain the same genes or SNPs") return(TRUE) }) ############################################################################### ### show, accessing and subsetting methods ############################################################################### #' @rdname dmSQTLdata-class #' @export setMethod("counts", "dmSQTLdata", function(object){ data.frame(gene_id = rep(names(object@counts), elementNROWS(object@counts)), feature_id = rownames(object@counts), object@counts@unlistData, stringsAsFactors = FALSE, row.names = NULL) }) #' @rdname dmSQTLdata-class #' @export setMethod("samples", "dmSQTLdata", function(x) x@samples ) ################################ setMethod("show", "dmSQTLdata", function(object){ cat("An object of class", class(object), "\n") cat("with", length(object), "genes and", ncol(object@counts), "samples\n") cat("* data accessors: counts(), samples()\n") }) ################################ #' @rdname dmSQTLdata-class #' @export setMethod("names", "dmSQTLdata", function(x) names(x@counts) ) #' @rdname dmSQTLdata-class #' @export setMethod("length", "dmSQTLdata", function(x) length(x@counts) ) #' @aliases [,dmSQTLdata-method [,dmSQTLdata,ANY-method #' @rdname dmSQTLdata-class #' @export setMethod("[", "dmSQTLdata", function(x, i, j){ if(missing(j)){ counts <- x@counts[i, , drop = FALSE] genotypes <- x@genotypes[i, , drop = FALSE] blocks <- x@blocks[i, , drop = FALSE] samples <- x@samples }else{ if(missing(i)){ counts <- x@counts[, j, drop = FALSE] genotypes <- x@genotypes[, j, drop = FALSE] }else{ counts <- x@counts[i, j, drop = FALSE] genotypes <- x@genotypes[i, j, drop = FALSE] blocks <- x@blocks[i, , drop = FALSE] } samples <- x@samples rownames(samples) <- samples$sample_id samples <- samples[j, , drop = FALSE] samples$sample_id <- factor(samples$sample_id) rownames(samples) <- NULL } return(new("dmSQTLdata", counts = counts, genotypes = genotypes, blocks = blocks, samples = samples)) }) ############################################################################### ### dmSQTLdata ############################################################################### blocks_per_gene <- function(g, genotypes){ # g = 1 genotypes_df <- data.frame(t(genotypes[[g]])) matching_snps <- match(genotypes_df, genotypes_df) oo <- order(matching_snps, decreasing = FALSE) block_id <- paste0("block_", as.numeric(factor(matching_snps))) snp_id <- colnames(genotypes_df) blocks_tmp <- cbind(block_id, snp_id) return(blocks_tmp[oo, , drop = FALSE]) } #' Create dmSQTLdata object #' #' Constructor functions for a \code{\linkS4class{dmSQTLdata}} object. #' dmSQTLdata assignes to a gene all the SNPs that are located in a given #' surrounding (\code{window}) of this gene. #' #' It is quite common that sample grouping defined by some of the SNPs is #' identical. Compare \code{dim(genotypes)} and \code{dim(unique(genotypes))}. #' In our QTL analysis, we do not repeat tests for the SNPs that define the #' same grouping of samples. Each grouping is tested only once. SNPs that define #' such unique groupings are aggregated into blocks. P-values and adjusted #' p-values are estimated at the block level, but the returned results are #' extended to a SNP level by repeating the block statistics for each SNP that #' belongs to a given block. #' #' @inheritParams dmDSdata #' @param genotypes Data frame with genotypes. Rows correspond to SNPs. This #' data frame has to contain a \code{snp_id} column with SNP IDs and columns #' with genotypes for each sample. Column names corresponding to sample IDs #' must be the same as in the \code{sample} data frame. The genotype of each #' sample is coded in the following way: 0 for ref/ref, 1 for ref/not ref, 2 #' for not ref/not ref, -1 or \code{NA} for missing value. #' @param gene_ranges \code{\linkS4class{GRanges}} object with gene location. It #' must contain gene names when calling names(). #' @param snp_ranges \code{\linkS4class{GRanges}} object with SNP location. It #' must contain SNP names when calling names(). #' @param window Size of a down and up stream window, which is defining the #' surrounding for a gene. Only SNPs that are located within a gene or its #' surrounding are considered in the sQTL analysis. #' @param samples Data frame with column \code{sample_id} corresponding to #' unique sample IDs #' @param BPPARAM Parallelization method used by #' \code{\link[BiocParallel]{bplapply}}. #' #' @return Returns a \code{\linkS4class{dmSQTLdata}} object. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' \donttest{ #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' } #' @seealso \code{\link{plotData}} #' @author Malgorzata Nowicka #' @export #' @importFrom IRanges width #' @importFrom S4Vectors queryHits subjectHits dmSQTLdata <- function(counts, gene_ranges, genotypes, snp_ranges, samples, window = 5e3, BPPARAM = BiocParallel::SerialParam()){ stopifnot(is.numeric(window)) stopifnot(window >= 0) ### Check on samples stopifnot(class(samples) == "data.frame") stopifnot("sample_id" %in% colnames(samples)) stopifnot(sum(duplicated(samples$sample_id)) == 0) ### Check on counts stopifnot(class(counts) == "data.frame") stopifnot(all(c("gene_id", "feature_id") %in% colnames(counts))) stopifnot(all(samples$sample_id %in% colnames(counts))) ### Check on genotypes stopifnot(class(genotypes) == "data.frame") stopifnot("snp_id" %in% colnames(genotypes)) stopifnot(all(samples$sample_id %in% colnames(counts))) sample_id <- samples$sample_id gene_id <- counts$gene_id feature_id <- counts$feature_id snp_id <- genotypes$snp_id stopifnot( class( gene_id ) %in% c("character", "factor")) stopifnot( class( feature_id ) %in% c("character", "factor")) stopifnot( class( sample_id ) %in% c("character", "factor")) stopifnot( class( snp_id ) %in% c("character", "factor")) stopifnot(all(!is.na(gene_id))) stopifnot(all(!is.na(feature_id))) stopifnot(all(!is.na(sample_id))) stopifnot(all(!is.na(snp_id))) counts <- counts[, as.character(sample_id), drop = FALSE] counts <- as.matrix(counts) stopifnot(mode(counts) %in% "numeric") genotypes <- genotypes[, as.character(sample_id), drop = FALSE] genotypes <- as.matrix(genotypes) stopifnot(mode(genotypes) %in% "numeric") stopifnot(all(genotypes %in% c(-1, 0, 1, 2, NA))) rownames(genotypes) <- snp_id stopifnot(class(gene_ranges) == "GRanges") stopifnot(class(snp_ranges) == "GRanges") stopifnot(!is.null(names(snp_ranges))) stopifnot(!is.null(names(gene_ranges))) ### Keep genes that are in counts and in gene_ranges genes_overlap <- intersect(names(gene_ranges), gene_id) genes2keep <- gene_id %in% genes_overlap counts <- counts[genes2keep, , drop = FALSE] gene_id <- gene_id[genes2keep] feature_id <- feature_id[genes2keep] gene_ranges <- gene_ranges[genes_overlap, ] ### Keep SNPs that are in genotypes and in snp_ranges ### and make them in the same order snps_overlap <- intersect(names(snp_ranges), snp_id) genotypes <- genotypes[snps_overlap, , drop = FALSE] snp_ranges <- snp_ranges[snps_overlap, ] gene_ranges <- GenomicRanges::resize(gene_ranges, width(gene_ranges) + 2 * window, fix = "center") ## Match genes and SNPs variantMatch <- GenomicRanges::findOverlaps(gene_ranges, snp_ranges, select = "all") q <- queryHits(variantMatch) s <- subjectHits(variantMatch) genotypes <- genotypes[s, ] snp_id <- snp_id[s] gene_id_genotypes <- names(gene_ranges)[q] ### keep genes that are in counts and in genotypes genes2keep <- gene_id %in% gene_id_genotypes counts <- counts[genes2keep, , drop = FALSE] gene_id <- gene_id[genes2keep] feature_id <- feature_id[genes2keep] genes2keep <- gene_id_genotypes %in% gene_id genotypes <- genotypes[genes2keep, , drop = FALSE] gene_id_genotypes <- gene_id_genotypes[genes2keep] snp_id <- snp_id[genes2keep] ### order genes in counts and in genotypes if(class(gene_id) == "character") gene_id <- factor(gene_id, levels = unique(gene_id)) order_counts <- order(gene_id) counts <- counts[order_counts, , drop = FALSE] gene_id <- gene_id[order_counts] feature_id <- feature_id[order_counts] gene_id_genotypes <- factor(gene_id_genotypes, levels = levels(gene_id)) order_genotypes <- order(gene_id_genotypes) genotypes <- genotypes[order_genotypes, , drop = FALSE] gene_id_genotypes <- gene_id_genotypes[order_genotypes] snp_id <- snp_id[order_genotypes] colnames(counts) <- sample_id rownames(counts) <- feature_id colnames(genotypes) <- sample_id rownames(genotypes) <- snp_id inds_counts <- 1:length(gene_id) names(inds_counts) <- feature_id partitioning_counts <- split(inds_counts, gene_id) inds_genotypes <- 1:length(gene_id_genotypes) names(inds_genotypes) <- snp_id partitioning_genotypes <- split(inds_genotypes, gene_id_genotypes) counts <- new( "MatrixList", unlistData = counts, partitioning = partitioning_counts) genotypes <- new( "MatrixList", unlistData = genotypes, partitioning = partitioning_genotypes) ### Keep unique genotypes and create info about blocs inds <- 1:length(genotypes) blocks <- MatrixList(BiocParallel::bplapply(inds, blocks_per_gene, genotypes = genotypes, BPPARAM = BPPARAM)) names(blocks) <- names(genotypes) genotypes_u <- MatrixList(lapply(inds, function(g){ # g = 1 genotypes_tmp <- unique(genotypes[[g]]) rownames(genotypes_tmp) <- paste0("block_", 1:nrow(genotypes_tmp)) return(genotypes_tmp) })) names(genotypes_u) <- names(genotypes) samples <- data.frame(sample_id = sample_id) data <- new("dmSQTLdata", counts = counts, genotypes = genotypes_u, blocks = blocks, samples = samples) return(data) } ################################################################################ ### dmFilter ################################################################################ #' @param minor_allele_freq Minimal number of samples where each of the #' genotypes has to be present. #' @param BPPARAM Parallelization method used by #' \code{\link[BiocParallel]{bplapply}}. #' @details #' #' In QTL analysis, usually, we deal with data that has many more replicates #' than data from a standard differential usage assay. Our example data set #' consists of 91 samples. Requiring that genes are expressed in all samples may #' be too stringent, especially since there may be missing values in the data #' and for some genes you may not observe counts in all 91 samples. Slightly #' lower threshold ensures that we do not eliminate such genes. For example, if #' \code{min_samps_gene_expr = 70} and \code{min_gene_expr = 10}, only genes #' with expression of at least 10 in at least 70 samples are kept. Samples with #' expression lower than 10 have \code{NA}s assigned and are skipped in the #' analysis of this gene. \code{minor_allele_freq} indicates the minimal number #' of samples for the minor allele presence. Usually, it is equal to roughly 5\% #' of total samples. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' \donttest{ #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' #' # -------------------------------------------------------------------------- #' # sQTL analysis - simple group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, #' minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' } #' @rdname dmFilter #' @export setMethod("dmFilter", "dmSQTLdata", function(x, min_samps_gene_expr = 0, min_samps_feature_expr = 0, min_samps_feature_prop = 0, minor_allele_freq = 0.05 * nrow(samples(x)), min_gene_expr = 0, min_feature_expr = 0, min_feature_prop = 0, BPPARAM = BiocParallel::SerialParam()){ stopifnot(min_samps_gene_expr >= 0 && min_samps_gene_expr <= ncol(x@counts)) stopifnot(min_gene_expr >= 0) stopifnot(min_samps_feature_expr >= 0 && min_samps_feature_expr <= ncol(x@counts)) stopifnot(min_feature_expr >= 0) stopifnot(min_samps_feature_prop >= 0 && min_samps_feature_prop <= ncol(x@counts)) stopifnot(min_feature_prop >= 0 && min_feature_prop <= 1) stopifnot(minor_allele_freq >= 1 && minor_allele_freq <= floor(nrow(samples(x))/2)) data_filtered <- dmSQTL_filter(counts = x@counts, genotypes = x@genotypes, blocks = x@blocks, samples = x@samples, min_samps_gene_expr = min_samps_gene_expr, min_gene_expr = min_gene_expr, min_samps_feature_expr = min_samps_feature_expr, min_feature_expr = min_feature_expr, min_samps_feature_prop = min_samps_feature_prop, min_feature_prop = min_feature_prop, minor_allele_freq = minor_allele_freq, BPPARAM = BPPARAM) return(data_filtered) }) ############################################################################### ### plotData ############################################################################### #' @param plot_type Character specifying which type of histogram to plot. Possible #' values \code{"features"}, \code{"snps"} or \code{"blocks"}. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' \donttest{ #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' #' # -------------------------------------------------------------------------- #' # sQTL analysis - simple group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, #' minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' } #' @rdname plotData #' @export setMethod("plotData", "dmSQTLdata", function(x, plot_type = "features"){ stopifnot(length(plot_type) == 1) stopifnot(plot_type %in% c("features", "snps", "blocks")) switch(plot_type, features = { tt <- elementNROWS(x@counts) ggp <- dm_plotDataFeatures(tt) }, snps = { tt <- elementNROWS(x@blocks) ggp <- dm_plotDataSnps(tt) }, blocks = { tt <- elementNROWS(x@genotypes) ggp <- dm_plotDataBlocks(tt) } ) return(ggp) }) DRIMSeq/R/class_dmSQTLfit.R0000755000175200017520000001776514136051631016343 0ustar00biocbuildbiocbuild#' @include class_dmSQTLprecision.R class_dmDSfit.R NULL ################################################################################ ### dmSQTLfit class ################################################################################ #' dmSQTLfit object #' #' dmSQTLfit extends the \code{\linkS4class{dmSQTLprecision}} class by adding #' the full model Dirichlet-multinomial (DM) likelihoods, #' regression coefficients and feature proportion estimates needed for the #' transcript/exon usage QTL analysis. Full model is defined by the genotype of #' a SNP associated with a gene. Estimation takes place for all the genes and #' all the SNPs/blocks assigned to the genes. Result of \code{\link{dmFit}}. #' #' @slot fit_full List of \code{\linkS4class{MatrixList}} objects containing #' estimated feature ratios in each sample based on the full #' Dirichlet-multinomial (DM) model. #' @slot lik_full List of numeric vectors of the per gene DM full model #' likelihoods. #' @slot coef_full \code{\linkS4class{MatrixList}} with the regression #' coefficients based on the DM model. #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' \donttest{ #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' #' # -------------------------------------------------------------------------- #' # sQTL analysis - simple group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, #' minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d) #' #' plotPrecision(d) #' #' ## Fit full model proportions #' d <- dmFit(d) #' } #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmSQTLdata}}, #' \code{\linkS4class{dmSQTLprecision}}, \code{\linkS4class{dmSQTLtest}} setClass("dmSQTLfit", contains = "dmSQTLprecision", representation(fit_full = "list", lik_full = "list", coef_full = "list")) ######################################## setValidity("dmSQTLfit", function(object){ # Has to return TRUE when valid object # TODO: Add checks for other slots if(!length(object@counts) == length(object@lik_full)) return("Different number of genes in 'counts' and 'lik_full'") return(TRUE) }) ################################################################################ ### show methods ################################################################################ setMethod("show", "dmSQTLfit", function(object){ callNextMethod(object) }) ################################################################################ ### dmFit ################################################################################ #' @details In the QTL analysis, currently, genotypes are defined as numeric #' values 0, 1, and 2. When \code{one_way = TRUE}, simple multiple group fitting #' is performed. When \code{one_way = FALSE}, a regression framework is used #' with the design matrix defined by a formula \code{~ group} where group is a #' continuous (not categorical) variable with values 0, 1, and 2. #' @rdname dmFit #' @export setMethod("dmFit", "dmSQTLprecision", function(x, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()){ # Check parameters stopifnot(is.logical(one_way)) stopifnot(length(prop_mode) == 1) stopifnot(prop_mode %in% c("constrOptim")) stopifnot(length(prop_tol) == 1) stopifnot(is.numeric(prop_tol) && prop_tol > 0) stopifnot(length(coef_mode) == 1) stopifnot(coef_mode %in% c("optim", "nlminb", "nlm")) stopifnot(length(coef_tol) == 1) stopifnot(is.numeric(coef_tol) && coef_tol > 0) stopifnot(verbose %in% 0:3) fit <- dmSQTL_fit(counts = x@counts, genotypes = x@genotypes, precision = x@genewise_precision, one_way = one_way, group_formula = ~ group, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = FALSE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) return(new("dmSQTLfit", lik_full = fit[["lik"]], fit_full = fit[["fit"]], mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = x@genewise_precision, counts = x@counts, genotypes = x@genotypes, blocks = x@blocks, samples = x@samples)) }) ################################################################################ ### plotProportions ################################################################################ #' @param snp_id Character indicating the ID of a SNP to be plotted. #' @details In the QTL analysis, plotting of fitted proportions is deactivated #' even when \code{plot_fit = TRUE}. It is due to the fact that neither fitted #' values nor regression coefficients are returned by the \code{dmFit} #' function as they occupy a lot of memory. #' @rdname plotProportions #' @export setMethod("plotProportions", "dmSQTLfit", function(x, gene_id, snp_id, plot_type = "boxplot1", order_features = TRUE, order_samples = TRUE, plot_fit = FALSE, plot_main = TRUE, group_colors = NULL, feature_colors = NULL){ stopifnot(gene_id %in% names(x@blocks)) if(!snp_id %in% x@blocks[[gene_id, "snp_id"]]) stop(paste0("gene ",gene_id, " and SNP ", snp_id, " do not match!")) stopifnot(plot_type %in% c("barplot", "boxplot1", "boxplot2", "lineplot", "ribbonplot")) stopifnot(is.logical(order_features)) stopifnot(is.logical(order_samples)) stopifnot(is.logical(plot_fit)) stopifnot(is.logical(plot_main)) counts_gene <- x@counts[[gene_id]] block_id <- x@blocks[[gene_id]][x@blocks[[gene_id]][, "snp_id"] == snp_id, "block_id"] group <- x@genotypes[[gene_id]][block_id, ] if(!is.null(group_colors) && plot_type %in% c("barplot", "boxplot1", "lineplot")) stopifnot(length(group_colors) == nlevels(group)) if(!is.null(feature_colors) && plot_type %in% c("boxplot2", "ribbonplot")) stopifnot(length(feature_colors) == nrow(counts_gene)) if(nrow(counts_gene) <= 1) stop("!Gene has to have at least 2 features! \n") # Remove NAs nonNAs <- !(is.na(counts_gene[1,]) | is.na(group)) counts_gene <- counts_gene[, nonNAs, drop = FALSE] group <- factor(group[nonNAs]) main <- NULL if(plot_main){ mean_expression_gene <- mean(colSums(counts_gene), na.rm = TRUE) main <- paste0(gene_id, " : ", snp_id, " : ", block_id, "\n Mean expression = ", round(mean_expression_gene)) precision_gene <- x@genewise_precision[[gene_id]][block_id] main <- paste0(main, ", Precision = ", round(precision_gene, 2)) } fit_full <- NULL if(plot_fit && length(x@fit_full) > 0){ fit_full <- x@fit_full[[gene_id]][[which(rownames(x@genotypes[[gene_id]]) == block_id)]][, nonNAs, drop = FALSE] } ggp <- dm_plotProportions(counts = counts_gene, group = group, fit_full = fit_full, main = main, plot_type = plot_type, order_features = order_features, order_samples = order_samples, group_colors = group_colors, feature_colors = feature_colors) return(ggp) }) DRIMSeq/R/class_dmSQTLprecision.R0000755000175200017520000003105214136051631017535 0ustar00biocbuildbiocbuild#' @include class_dmSQTLdata.R NULL ############################################################################### ### dmSQTLprecision class ############################################################################### #' dmSQTLprecision object #' #' dmSQTLprecision extends the \code{\linkS4class{dmSQTLdata}} by adding the #' precision estimates of Dirichlet-multinomial distribution used to model the #' feature (e.g., transcript, exon, exonic bin) counts for each gene-SNP pair in #' the QTL analysis. Result of \code{\link{dmPrecision}}. #' #' @return #' #' \itemize{ \item \code{mean_expression(x)}: Get a data frame with mean gene #' expression. \item \code{common_precision(x)}: Get common precision. \item #' \code{genewise_precision(x)}: Get a data frame with gene-wise precision.} #' #' @param x dmSQTLprecision object. #' #' @slot mean_expression Numeric vector of mean gene expression. #' @slot common_precision Numeric value of estimated common precision. #' @slot genewise_precision List of estimated gene-wise precisions. Each element #' of this list is a vector of precisions estimated for all the genotype #' blocks assigned to a given gene. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' \donttest{ #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' #' # -------------------------------------------------------------------------- #' # sQTL analysis - simple group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, #' minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d) #' #' plotPrecision(d) #' } #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmSQTLdata}}, \code{\linkS4class{dmSQTLfit}}, #' \code{\linkS4class{dmSQTLtest}} setClass("dmSQTLprecision", contains = "dmSQTLdata", representation(mean_expression = "numeric", common_precision = "numeric", genewise_precision = "list")) # ----------------------------------------------------------------------------- setValidity("dmSQTLprecision", function(object){ # Has to return TRUE when valid object! out <- TRUE if(length(object@mean_expression) > 0){ if(length(object@mean_expression) == length(object@counts)){ if(all(names(object@mean_expression) == names(object@counts))) out <- TRUE else return("Different names of 'counts' and 'mean_expression'") } else return("Unequal length of 'counts' and 'mean_expression'") } if(length(object@genewise_precision) > 0){ if(length(object@genewise_precision) == length(object@counts)){ if(all(lapply(object@genewise_precision, length) == elementNROWS(object@genotypes))) out <- TRUE else return("Different numbers of blocks in 'genotypes' and in 'genewise_precision'") } else return("Unequal number of genes in 'counts' and in 'genewise_precision'") } if(length(object@common_precision) > 0){ if(length(object@common_precision) == 1) out <- TRUE else return("'common_precision' must be a vector of length 1") } return(out) }) ################################################################################ ### accessing methods ################################################################################ #' @rdname dmSQTLprecision-class #' @export setMethod("mean_expression", "dmSQTLprecision", function(x){ data.frame(gene_id = names(x@mean_expression), mean_expression = x@mean_expression, stringsAsFactors = FALSE, row.names = NULL) }) #' @rdname dmSQTLprecision-class #' @export setMethod("common_precision", "dmSQTLprecision", function(x) x@common_precision ) #' @rdname dmSQTLprecision-class #' @export setMethod("genewise_precision", "dmSQTLprecision", function(x){ data.frame(gene_id = rep(names(x@genewise_precision), sapply(x@genewise_precision, length)), block_id = unlist(lapply(x@genewise_precision, names)), genewise_precision = unlist(x@genewise_precision), stringsAsFactors = FALSE, row.names = NULL) }) ################################################################################ ### show methods ################################################################################ setMethod("show", "dmSQTLprecision", function(object){ callNextMethod(object) cat(" mean_expression(), common_precision(), genewise_precision()\n") }) ################################################################################ ### dmPrecision ################################################################################ #' @rdname dmPrecision #' @param speed Logical. If \code{FALSE}, precision is calculated per each #' gene-block. Such calculation may take a long time, since there can be #' hundreds of SNPs/blocks per gene. If \code{TRUE}, there will be only one #' precision calculated per gene and it will be assigned to all the blocks #' matched with this gene. #' @export setMethod("dmPrecision", "dmSQTLdata", function(x, mean_expression = TRUE, common_precision = TRUE, genewise_precision = TRUE, prec_adjust = TRUE, prec_subset = 0.1, prec_interval = c(0, 1e+3), prec_tol = 1e+01, prec_init = 100, prec_grid_length = 21, prec_grid_range = c(-10, 10), prec_moderation = "none", prec_prior_df = 0, prec_span = 0.1, one_way = TRUE, speed = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()){ ### Parameter checks: stopifnot(is.logical(mean_expression)) stopifnot(is.logical(common_precision)) stopifnot(is.logical(genewise_precision)) stopifnot(is.logical(prec_adjust)) stopifnot(length(prec_subset) == 1) stopifnot(is.numeric(prec_subset) && prec_subset > 0 && prec_subset <= 1) stopifnot(length(prec_interval) == 2) stopifnot(prec_interval[1] < prec_interval[2]) stopifnot(length(prec_tol) == 1) stopifnot(is.numeric(prec_tol) && prec_tol > 0) stopifnot(length(prec_init) == 1) stopifnot(is.numeric(prec_init)) stopifnot(prec_grid_length > 2) stopifnot(length(prec_grid_range) == 2) stopifnot(prec_grid_range[1] < prec_grid_range[2]) stopifnot(length(prec_moderation) == 1) stopifnot(prec_moderation %in% c("none", "common", "trended")) stopifnot(length(prec_prior_df) == 1) stopifnot(is.numeric(prec_prior_df) && prec_prior_df >= 0) stopifnot(length(prec_span) == 1) stopifnot(is.numeric(prec_span) && prec_span > 0 && prec_span < 1) stopifnot(is.logical(one_way)) stopifnot(is.logical(speed)) stopifnot(length(prop_mode) == 1) stopifnot(prop_mode %in% c("constrOptim")) stopifnot(length(prop_tol) == 1) stopifnot(is.numeric(prop_tol) && prop_tol > 0) stopifnot(length(coef_mode) == 1) stopifnot(coef_mode %in% c("optim", "nlminb", "nlm")) stopifnot(length(coef_tol) == 1) stopifnot(is.numeric(coef_tol) && coef_tol > 0) stopifnot(verbose %in% 0:2) if(mean_expression || (genewise_precision && prec_moderation == "trended")){ mean_expression <- dm_estimateMeanExpression(counts = x@counts, verbose = verbose) }else{ mean_expression <- numeric() } if(common_precision){ if(prec_subset < 1){ message(paste0("! Using a subset of ", prec_subset, " genes to estimate common precision !\n")) genes2keep <- sample(1:length(x@counts), max(round(prec_subset * length(x@counts)), 1), replace = FALSE) }else{ genes2keep <- 1:length(x@counts) } ### Use only one SNP per gene and a null model to make computation faster genotypes_null <- new("MatrixList", unlistData = matrix(1, nrow = length(genes2keep), ncol = ncol(x@genotypes)), partitioning = split(1:length(genes2keep), factor(names(x@genotypes[genes2keep, ]), levels = names(x@genotypes[genes2keep, ])))) common_precision <- dmSQTL_estimateCommonPrecision( counts = x@counts[genes2keep, ], genotypes = genotypes_null, prec_adjust = prec_adjust, prec_interval = prec_interval, prec_tol = prec_tol, one_way = one_way, group_formula = ~ 1, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) }else{ common_precision <- numeric() } if(genewise_precision){ if(length(common_precision)){ message("! Using common_precision = ", round(common_precision, 4), " as prec_init !") prec_init <- common_precision } if(speed){ ### Use only one SNP per gene and a null model to make computation faster G <- length(x@genotypes) inds <- 1:G genotypes_null <- new( "MatrixList", unlistData = matrix(1, nrow = G, ncol = ncol(x@genotypes)), partitioning = split(inds, factor(names(x@genotypes), levels = names(x@genotypes))) ) genewise_precision <- dmSQTL_estimateTagwisePrecision(counts = x@counts, genotypes = genotypes_null, mean_expression = mean_expression, prec_adjust = prec_adjust, prec_init = prec_init, prec_grid_length = prec_grid_length, prec_grid_range = prec_grid_range, prec_moderation = prec_moderation, prec_prior_df = prec_prior_df, prec_span = prec_span, one_way = one_way, group_formula = ~ 1, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) ### Replicate the values for all the snps genewise_precision <- relist(rep(unlist(genewise_precision), times = elementNROWS(x@genotypes)), x@genotypes@partitioning) }else{ genewise_precision <- dmSQTL_estimateTagwisePrecision(counts = x@counts, genotypes = x@genotypes, mean_expression = mean_expression, prec_adjust = prec_adjust, prec_init = prec_init, prec_grid_length = prec_grid_length, prec_grid_range = prec_grid_range, prec_moderation = prec_moderation, prec_prior_df = prec_prior_df, prec_span = prec_span, one_way = one_way, group_formula = ~ group, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) } }else{ genewise_precision <- list() } return(new("dmSQTLprecision", mean_expression = mean_expression, common_precision = common_precision, genewise_precision = genewise_precision, counts = x@counts, genotypes = x@genotypes, blocks = x@blocks, samples = x@samples)) }) ############################################################################### ### plotPrecision ############################################################################### #' @rdname plotPrecision #' @export setMethod("plotPrecision", "dmSQTLprecision", function(x){ if(!length(x@genewise_precision) == length(x@counts)) stop("Genewise precision must be estimated for each gene!") if(!length(x@genewise_precision) == length(x@mean_expression)) stop("Mean expression must be estimated for each gene!") w <- sapply(x@genewise_precision, length) mean_expression <- rep(x@mean_expression, w) nr_features <- rep(elementNROWS(x@counts), w) genewise_precision <- unlist(x@genewise_precision) if(length(x@common_precision) == 0){ common_precision <- NULL }else{ common_precision <- x@common_precision } ggp <- dm_plotPrecision(genewise_precision = genewise_precision, mean_expression = mean_expression, nr_features = nr_features, common_precision = common_precision) return(ggp) }) DRIMSeq/R/class_dmSQTLtest.R0000755000175200017520000002206014136051631016520 0ustar00biocbuildbiocbuild#' @include class_dmSQTLfit.R class_dmDStest.R NULL ############################################################################### ### dmSQTLtest class ############################################################################### #' dmSQTLtest object #' #' dmSQTLtest extends the \code{\linkS4class{dmSQTLfit}} class by adding the #' null model Dirichlet-multinomial likelihoods and the gene-level results of #' testing for differential transcript/exon usage QTLs. Result of #' \code{\link{dmTest}}. #' #' @return #' #' \itemize{ \item \code{results(x)}: Get a data frame with gene-level results. #' } #' #' @param x dmSQTLtest object. #' @param ... Other parameters that can be defined by methods using this #' generic. #' #' @slot lik_null List of numeric vectors with the per gene-snp DM null model #' likelihoods. #' @slot results_gene Data frame with the gene-level results including: #' \code{gene_id} - gene IDs, \code{block_id} - block IDs, \code{snp_id} - SNP #' IDs, \code{lr} - likelihood ratio statistics based on the DM model, #' \code{df} - degrees of freedom, \code{pvalue} - p-values estimated based on #' permutations and \code{adj_pvalue} - Benjamini & Hochberg adjusted #' p-values. #' #' @examples #' # -------------------------------------------------------------------------- #' # Create dmSQTLdata object #' # -------------------------------------------------------------------------- #' # Use subsets of data defined in the GeuvadisTranscriptExpr package #' #' library(GeuvadisTranscriptExpr) #' #' geuv_counts <- GeuvadisTranscriptExpr::counts #' geuv_genotypes <- GeuvadisTranscriptExpr::genotypes #' geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges #' geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges #' #' colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") #' colnames(geuv_genotypes)[4] <- "snp_id" #' geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) #' #' d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, #' genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, #' samples = geuv_samples, window = 5e3) #' #' # -------------------------------------------------------------------------- #' # sQTL analysis - simple group comparison #' # -------------------------------------------------------------------------- #' #' ## Filtering #' d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, #' minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) #' #' plotData(d) #' #' ## To make the analysis reproducible #' set.seed(123) #' ## Calculate precision #' d <- dmPrecision(d) #' #' plotPrecision(d) #' #' ## Fit full model proportions #' d <- dmFit(d) #' #' ## Fit null model proportions, perform the LR test to detect tuQTLs #' ## and use the permutation approach to adjust the p-values #' d <- dmTest(d) #' #' ## Plot the gene-level p-values #' plotPValues(d) #' #' ## Get the gene-level results #' head(results(d)) #' #' @author Malgorzata Nowicka #' @seealso \code{\linkS4class{dmSQTLdata}}, #' \code{\linkS4class{dmSQTLprecision}}, \code{\linkS4class{dmSQTLfit}} setClass("dmSQTLtest", contains = "dmSQTLfit", representation(lik_null = "list", results_gene = "data.frame")) ##################################### setValidity("dmSQTLtest", function(object){ # has to return TRUE when valid object! # TODO: Add more checks if(!length(object@counts) == length(object@lik_null)) return("Different number of genes in 'counts' and 'lik_null'") return(TRUE) }) ############################################################################### ### show and accessing methods ############################################################################### #' @rdname dmSQTLtest-class #' @export setMethod("results", "dmSQTLtest", function(x) x@results_gene) # ----------------------------------------------------------------------------- setMethod("show", "dmSQTLtest", function(object){ callNextMethod(object) cat(" results()\n") }) ############################################################################### ### dmTest ############################################################################### #' @param permutation_mode Character specifying which permutation scheme to #' apply for p-value calculation. When equal to \code{"all_genes"}, null #' distribution of p-values is calculated from all genes and the maximum #' number of permutation cycles is 10. When \code{permutation_mode = #' "per_gene"}, null distribution of p-values is calculated for each gene #' separately based on permutations of this individual gene. The latter #' approach may take a lot of computational time. We suggest using the first #' option. #' @rdname dmTest #' @export setMethod("dmTest", "dmSQTLfit", function(x, permutation_mode = "all_genes", one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()){ # Check parameters stopifnot(permutation_mode %in% c("all_genes", "per_gene")) stopifnot(is.logical(one_way)) stopifnot(length(prop_mode) == 1) stopifnot(prop_mode %in% c("constrOptim")) stopifnot(length(prop_tol) == 1) stopifnot(is.numeric(prop_tol) && prop_tol > 0) stopifnot(length(coef_mode) == 1) stopifnot(coef_mode %in% c("optim", "nlminb", "nlm")) stopifnot(length(coef_tol) == 1) stopifnot(is.numeric(coef_tol) && coef_tol > 0) stopifnot(verbose %in% 0:2) # Prepare null (one group) genotypes genotypes_null <- x@genotypes genotypes_null@unlistData[!is.na(genotypes_null@unlistData)] <- 1 # Fit the DM null model fit0 <- dmSQTL_fit(counts = x@counts, genotypes = genotypes_null, precision = x@genewise_precision, one_way = one_way, group_formula = ~ 1, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = FALSE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) ## Perform the LR test results_list <- lapply(1:length(x@counts), function(g){ # g = 1 ## Calculate the degrees of freedom df <- (nrow(x@counts[[g]]) - 1) * (apply(x@genotypes[[g]], 1, function(x) length(unique(x))) - 1) out <- dm_LRT(lik_full = x@lik_full[[g]], lik_null = fit0[["lik"]][[g]], df = df, verbose = FALSE) return(out) }) if(verbose) message("\n** Running permutations..\n") ### Calculate adjusted p-values using permutations switch(permutation_mode, all_genes = { ## P-value for a gene computed using all the permutations pvalues <- unlist(lapply(results_list, function(x) x[, "pvalue"])) pval_adj_perm <- dmSQTL_permutations_all_genes(x = x, pvalues = pvalues, max_nr_perm_cycles = 10, max_nr_min_nr_sign_pval = 1e3, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) pval_adj_perm <- relist(pval_adj_perm, x@lik_full) }, per_gene = { ## P-value for a gene computed using permutations of that gene pvalues <- lapply(results_list, function(x) x[, "pvalue"]) pval_adj_perm <- dmSQTL_permutations_per_gene(x = x, pvalues = pvalues, max_nr_perm = 1e6, max_nr_sign_pval = 1e2, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) } ) pval_adj_perm_BH <- relist(p.adjust(unlist(pval_adj_perm), method="BH"), pval_adj_perm) inds <- 1:length(results_list) for(i in inds){ results_list[[i]][, "pvalue"] <- pval_adj_perm[[i]] results_list[[i]][, "adj_pvalue"] <- pval_adj_perm_BH[[i]] } gene_ids <- names(x@blocks) ## Output the original SNPs results_new <- lapply(inds, function(i){ # i = 4 mm <- match(x@blocks[[i]][, "block_id"], rownames(x@genotypes[[i]])) out <- data.frame(gene_id = gene_ids[i], x@blocks[[i]], results_list[[i]][mm, , drop = FALSE], stringsAsFactors = FALSE) return(out) }) results_new <- do.call(rbind, results_new) return(new("dmSQTLtest", lik_null = fit0[["lik"]], results_gene = results_new, lik_full = x@lik_full, fit_full = x@fit_full, mean_expression = x@mean_expression, common_precision = x@common_precision, genewise_precision = x@genewise_precision, counts = x@counts, genotypes = x@genotypes, blocks = x@blocks, samples = x@samples)) }) ############################################################################### ### plotPValues ############################################################################### #' @rdname plotPValues #' @export setMethod("plotPValues", "dmSQTLtest", function(x){ ### Plot p-values for unique blocks (not SNPs) keep <- !duplicated(x@results_gene[, c("gene_id", "block_id"), drop = FALSE]) ggp <- dm_plotPValues(pvalues = x@results_gene[keep, "pvalue"]) return(ggp) }) DRIMSeq/R/class_show_utils.R0000644000175200017520000000754614136051631016725 0ustar00biocbuildbiocbuild### Functions that are used in show methods ################################################################################ #' @importFrom utils head tail show_matrix <- function(object, nhead = 2, ntail = 2){ # object is a matrix nr <- nrow(object) nc <- ncol(object) cat(class(object), " with ", nr, ifelse(nr == 1, " row and ", " rows and "), nc, ifelse(nc == 1, " column\n", " columns\n"), sep = "") if(nr > 0 && nc > 0){ if(is.null(colnames(object))){ colnames(object) <- paste0("[,", 1:ncol(object), "]") } if(is.null(rownames(object))){ rownames(object) <- paste0("[", 1:nrow(object), ",]") } if(nr <= (nhead + ntail)){ out <- object }else{ out <- do.call(rbind, list(head(object, nhead), matrix(rep.int("...", nc), 1, nc, dimnames = list(NULL, colnames(object))), tail(object, ntail))) nms <- rownames(object) if(nhead > 0) s1 <- paste0(head(nms, nhead)) if(ntail > 0) s2 <- paste0(tail(nms, ntail)) rownames(out) <- c(s1, "...", s2) } if(nc > (nhead + ntail)){ out <- do.call(cbind, list(out[, 1:nhead, drop = FALSE], matrix(rep.int("...", ifelse(nr < (nhead + ntail + 1L), min(nr, nhead + ntail), nhead + ntail + 1L)), ncol = 1, dimnames = list(NULL, "...")), out[, (nc-ntail+1):nc, drop = FALSE])) } ### print adjusted for numeric or character if(mode(object) == "numeric"){ print(out, quote = FALSE, right = TRUE, na.print = "NA") }else{ print(out, quote = TRUE, right = TRUE, na.print = "NA") } } } ################################################################################ show_numeric <- function(object, nhead = 2, ntail = 2, class = TRUE, print = TRUE){ nl <- length(object) if(class) cat(class(object), "of length", length(object), "\n") if(nl > 0){ if(nl < (nhead + ntail + 1L)) { out <- round(object, 2) } else { dots <- "..." if(!is.null(names(object))) names(dots) <- "..." out <- c(round(head(object, nhead), 2), dots , round(tail(object, ntail), 2)) } if(print) print(out, quote = FALSE, right = TRUE) else return(out) }else{ if(print) print(object) else return(object) } } ################################################################################ show_numeric_list <- function(object, nhead = 2){ nl <- length(object) cat(class(object), "of length", nl, "\n") if(nl > 0){ np <- min(nl, nhead) object <- object[1:np] if(is.null(names(object))) print_names <- paste0("[[", 1:np, "]]\n") else print_names <- paste0("$", names(object), "\n") for(i in 1:np){ cat(print_names[i]) show_numeric(object[[i]]) cat("\n") } if(np < nl){ if(is.null(names(object))) cat(paste0("[[...]]\n")) else cat(paste0("$...\n")) } }else{ print(object) } } ################################################################################ show_MatrixList_list <- function(object, nhead = 2){ nl <- length(object) cat(class(object), "of length", nl, "\n") if(nl > 0){ np <- min(nl, nhead) object <- object[1:np] if(is.null(names(object))) print_names <- paste0("[[", 1:np, "]]\n") else print_names <- paste0("$", names(object), "\n") for(i in 1:np){ cat(print_names[i]) print(object[[i]]) cat("\n") } if(np < nl){ if(is.null(names(object))) cat(paste0("[[...]]\n")) else cat(paste0("$...\n")) } }else{ print(object) } } DRIMSeq/R/dmDS_CRadjustment.R0000755000175200017520000000443214136051631016644 0ustar00biocbuildbiocbuild dmDS_CRadjustmentManyGroups_gene <- function(g, counts, ngroups, lgroups, igroups, prec, prop, verbose){ if(verbose >= 2) message(" Gene:", g) a <- dm_CRadjustmentManyGroups(y = counts[[g]], ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec[g], prop = prop[[g]]) return(a) } dmDS_CRadjustmentRegression_gene <- function(g, counts, design, prec, fit, verbose){ if(verbose >= 2) message(" Gene:", g) a <- dm_CRadjustmentRegression(y = counts[[g]], x = design, prec = prec[g], prop = fit[[g]]) return(a) } dmDS_CRadjustment <- function(counts, fit, design, precision, one_way = TRUE, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Calculating Cox-Reid adjustment.. \n") inds <- 1:length(counts) # Prepare precision if(length(precision) == 1){ prec <- rep(precision, length(inds)) } else { prec <- precision } # If the design is equivalent to a oneway layout, use a shortcut algorithm groups <- edgeR::designAsFactor(design) if(nlevels(groups) == ncol(design) && one_way){ groups <- factor(groups, labels = paste0("gr", levels(groups))) ngroups <- nlevels(groups) lgroups <- levels(groups) igroups <- lapply(lgroups, function(gr){which(groups == gr)}) names(igroups) <- lgroups # Get the column number of a first occurance of a group level figroups <- unlist(lapply(igroups, function(x){x[1]})) prop <- fit[, figroups] a <- BiocParallel::bplapply(inds, dmDS_CRadjustmentManyGroups_gene, counts = counts, ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec, prop = prop, verbose = verbose, BPPARAM = BPPARAM) names(a) <- names(counts) adj <- unlist(a) }else{ a <- BiocParallel::bplapply(inds, dmDS_CRadjustmentRegression_gene, counts = counts, design = design, prec = prec, fit = fit, verbose = verbose, BPPARAM = BPPARAM) names(a) <- names(counts) adj <- unlist(a) } time_end <- Sys.time() if(verbose >= 2) message("\n") if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") # adj is a vector of length G return(adj) } DRIMSeq/R/dmDS_estimateCommonPrecision.R0000755000175200017520000000310314136051631021073 0ustar00biocbuildbiocbuild#' @importFrom stats optimize dmDS_profileLikCommon <- function(prec, counts, design, prec_adjust = TRUE, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ if(verbose >= 2) message("Precision in optimize:", prec) adj_lik <- dmDS_profileLik(prec = prec, counts = counts, design = design, prec_adjust = prec_adjust, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) adj_lik_common <- sum(adj_lik, na.rm = TRUE) return(adj_lik_common) } dmDS_estimateCommonPrecision <- function(counts, design, prec_adjust = TRUE, prec_interval = c(0, 1e+5), prec_tol = 1e-01, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Estimating common precision.. \n") optimum <- optimize(f = dmDS_profileLikCommon, interval = prec_interval, counts = counts, design = design, prec_adjust = prec_adjust, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = max(0, verbose-1), BPPARAM = BPPARAM, maximum = TRUE, tol = prec_tol) precision <- optimum$maximum time_end <- Sys.time() if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") return(precision) } DRIMSeq/R/dmDS_estimateTagwisePrecision.R0000644000175200017520000000413414136051631021250 0ustar00biocbuildbiocbuild#' @importFrom stats complete.cases dmDS_estimateTagwisePrecision <- function(counts, design, mean_expression, prec_adjust = TRUE, prec_init = 100, prec_grid_length = 21, prec_grid_range = c(-10, 10), prec_moderation = "none", prec_prior_df = 0, prec_span = 0.1, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Estimating genewise precision.. \n") ### Standard grid like in edgeR spline_pts <- seq(from = prec_grid_range[1], to = prec_grid_range[2], length = prec_grid_length) spline_prec <- prec_init * 2^spline_pts # Calculate the likelihood for each gene at the spline precision points loglik <- matrix(NA, nrow = length(counts), ncol = prec_grid_length) for(i in seq(prec_grid_length)){ # i = 1 loglik[, i] <- dmDS_profileLik(prec = spline_prec[i], counts = counts, design = design, prec_adjust = prec_adjust, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = max(0, verbose - 1), BPPARAM = BPPARAM) } not_nas <- complete.cases(loglik) loglik <- loglik[not_nas, , drop = FALSE] if(nrow(loglik) == 0){ precision <- rep(NA, length(counts)) names(precision) <- names(counts) return(precision) } if(prec_moderation != "none"){ mean_expression <- mean_expression[not_nas] loglik <- dm_profileLikModeration(loglik = loglik, mean_expression = mean_expression, prec_moderation = prec_moderation, prec_prior_df = prec_prior_df, prec_span = prec_span) } out <- edgeR::maximizeInterpolant(spline_pts, loglik) # Set NA for genes that tagwise prec could not be calculated precision <- rep(NA, length(counts)) names(precision) <- names(counts) precision[not_nas] <- prec_init * 2^out time_end <- Sys.time() if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") return(precision) } DRIMSeq/R/dmDS_filter.R0000644000175200017520000000467314136051631015532 0ustar00biocbuildbiocbuild dmDS_filter <- function(counts, min_samps_gene_expr = 6, min_gene_expr = 10, min_samps_feature_expr = 3, min_feature_expr = 10, min_samps_feature_prop = 3, min_feature_prop = 0.01, run_gene_twice=FALSE){ inds <- which(elementNROWS(counts) > 1) counts_new <- lapply(inds, function(g){ # g = 117 # print(g) expr_features <- counts[[g]] ### no genes with no expression if(sum(expr_features, na.rm = TRUE) == 0) return(NULL) ### genes with min expression if(! sum(colSums(expr_features) >= min_gene_expr, na.rm = TRUE) >= min_samps_gene_expr ) return(NULL) ### no features with no expression features2keep <- rowSums(expr_features > 0, na.rm = TRUE) > 0 ### no genes with one feature if(sum(features2keep) <= 1) return(NULL) expr_features <- expr_features[features2keep, , drop = FALSE] ### features with min expression features2keep <- rowSums(expr_features >= min_feature_expr, na.rm = TRUE) >= min_samps_feature_expr ### no genes with one feature if(sum(features2keep) <= 1) return(NULL) expr_features <- expr_features[features2keep, , drop = FALSE] ### genes with zero expression samps2keep <- colSums(expr_features) > 0 & !is.na(expr_features[1, ]) if(sum(samps2keep) < max(1, min_samps_feature_prop)) return(NULL) prop <- prop.table(expr_features[, samps2keep, drop = FALSE], 2) # prop.table(matrix(c(1,0), 2, 1), 2) # prop.table(matrix(c(0,0), 2, 1), 2) # prop.table(matrix(c(0,0, 1, 0), 2, 2), 2) ### features with min proportion features2keep <- rowSums(prop >= min_feature_prop) >= min_samps_feature_prop ### no genes with one feature if(sum(features2keep) <= 1) return(NULL) expr <- expr_features[features2keep, , drop = FALSE] if (run_gene_twice) { ### no genes with no expression if(sum(expr_features, na.rm = TRUE) == 0) return(NULL) ### genes with min expression if(! sum(colSums(expr_features) >= min_gene_expr, na.rm = TRUE) >= min_samps_gene_expr ) return(NULL) } return(expr) }) names(counts_new) <- names(counts)[inds] counts_new <- counts_new[!sapply(counts_new, is.null)] if(length(counts_new) == 0) stop("!No genes left after filtering!") counts_new <- MatrixList(counts_new) return(counts_new) } DRIMSeq/R/dmDS_fit.R0000755000175200017520000001610514136051631015023 0ustar00biocbuildbiocbuild# Fitting the Dirichlet-multinomial model dmDS_fitManyGroups_gene <- function(g, counts, ngroups, lgroups, igroups, prec, prop_mode, prop_tol, verbose){ if(verbose >= 2) message(" Gene:", g) f <- dm_fitManyGroups(y = counts[[g]], ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec[g], prop_mode = prop_mode, prop_tol = prop_tol) return(f) } dmDS_fitRegression_gene <- function(g, counts, design, prec, coef_mode, coef_tol, verbose){ if(verbose >= 2) message(" Gene:", g) f <- dm_fitRegression(y = counts[[g]], design = design, prec = prec[g], coef_mode = coef_mode, coef_tol = coef_tol) return(f) } dmDS_fit <- function(counts, design, precision, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Fitting the DM model.. \n") inds <- 1:length(counts) # Prepare precision if(length(precision) == 1){ prec <- rep(precision, length(inds)) } else { prec <- precision } # Approach from edgeR glmFit.default: # If the design is equivalent to a oneway layout, use a shortcut algorithm groups <- edgeR::designAsFactor(design) if(nlevels(groups) == ncol(design) && one_way && all(c(design) %in% c(0, 1))){ if(verbose) message(" Using the one way approach. \n") groups <- factor(groups, labels = paste0("gr", levels(groups))) ngroups <- nlevels(groups) lgroups <- levels(groups) igroups <- lapply(lgroups, function(gr){which(groups == gr)}) names(igroups) <- lgroups ff <- BiocParallel::bplapply(inds, dmDS_fitManyGroups_gene, counts = counts, ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec, prop_mode = prop_mode, prop_tol = prop_tol, verbose = verbose, BPPARAM = BPPARAM) names(ff) <- names(counts) lik <- unlist(lapply(ff, function(f) sum(f[["lik"]]))) prop <- MatrixList(lapply(ff, function(f) f[["prop"]])) fit <- prop[, groups] colnames(fit) <- colnames(counts) # Get the coefficients like in edgeR::mglmOneWay design_unique <- unique(design) # Use the last feature (q-th) as a denominator logit_prop <- MatrixList(lapply(ff, function(f) t(t(f[["prop"]])/f[["prop"]][nrow(f[["prop"]]), ]))) logit_prop <- log(logit_prop@unlistData) coef <- t(solve(design_unique, t(logit_prop))) coef <- new("MatrixList", unlistData = coef, partitioning = prop@partitioning) colnames(coef) <- colnames(design) }else{ if(verbose) message(" Using the regression approach. \n") ff <- BiocParallel::bplapply(inds, dmDS_fitRegression_gene, counts = counts, design = design, prec = prec, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) names(ff) <- names(counts) lik <- unlist(lapply(ff, function(f) f[["lik"]])) coef <- MatrixList(lapply(ff, function(f) f[["b"]])) colnames(coef) <- colnames(design) fit <- MatrixList(lapply(ff, function(f) f[["fit"]])) colnames(fit) <- colnames(counts) } time_end <- Sys.time() if(verbose >= 2) message("\n") if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") # fit is a MatrixList of matrices q x p # lik is a vector of length G # coef is a MatrixList of matrices q x p return(list(fit = fit, lik = lik, coef = coef)) } # ----------------------------------------------------------------------------- # Fitting the Beta-binomial model # Currently, recalculating the BB likelihoods and coefficients using the # DM fittings/proportions bbDS_fitManyGroups_gene <- function(g, counts, prop, ngroups, lgroups, igroups, prec, verbose){ if(verbose >= 2) message(" Gene:", g) f <- bb_fitManyGroups(y = counts[[g]], prop = prop[[g]], ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec[g]) return(f) } bbDS_fitRegression_gene <- function(g, counts, design, prec, fit, verbose){ if(verbose >= 2) message(" Gene:", g) f <- bb_fitRegression(y = counts[[g]], design = design, prec = prec[g], fit = fit[[g]]) return(f) } bbDS_fit <- function(counts, fit, design, precision, one_way = TRUE, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Fitting the BB model.. \n") inds <- 1:length(counts) # Prepare precision if(length(precision) == 1){ prec <- rep(precision, length(inds)) } else { prec <- precision } # Approach from edgeR: # If the design is equivalent to a oneway layout, use a shortcut algorithm groups <- edgeR::designAsFactor(design) if(nlevels(groups) == ncol(design) && one_way && all(c(design) %in% c(0, 1))){ if(verbose) message(" Using the one way approach. \n") groups <- factor(groups, labels = paste0("gr", levels(groups))) ngroups <- nlevels(groups) lgroups <- levels(groups) igroups <- lapply(lgroups, function(gr){which(groups == gr)}) names(igroups) <- lgroups # Use proportions estimated with the DM model prop <- fit[, unlist(lapply(igroups, function(x){x[1]}))] # Recalculate BB likelihoods ff <- BiocParallel::bplapply(inds, bbDS_fitManyGroups_gene, counts = counts, prop = prop, ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec, verbose = verbose, BPPARAM = BPPARAM) lik <- lapply(ff, function(f){rowSums(f[["lik"]])}) names(lik) <- NULL lik <- unlist(lik) names(lik) <- rownames(counts) # Get the coefficients like in edgeR::mglmOneWay design_unique <- unique(design) logit_prop <- MatrixList(lapply(ff, function(f){ f[["prop"]]/(1 - f[["prop"]]) })) logit_prop <- log(logit_prop@unlistData) # design_unique must be squared for solve() coef <- t(solve(design_unique, t(logit_prop))) coef <- new("MatrixList", unlistData = coef, partitioning = prop@partitioning) }else{ if(verbose) message(" Using the regression approach. \n") ff <- BiocParallel::bplapply(inds, bbDS_fitRegression_gene, counts = counts, design = design, prec = prec, fit = fit, verbose = verbose, BPPARAM = BPPARAM) names(ff) <- names(counts) lik <- unlist(lapply(ff, function(f) f[["lik"]])) names(lik) <- rownames(counts) coef <- MatrixList(lapply(ff, function(f) f[["b"]])) colnames(coef) <- colnames(design) fit <- MatrixList(lapply(ff, function(f) f[["fit"]])) colnames(fit) <- colnames(counts) } time_end <- Sys.time() if(verbose >= 2) message("\n") if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") # fit is a MatrixList of matrices q x p # lik is a vector of length nrow(counts) = total number of features # coef is a MatrixList of matrices q x p return(list(fit = fit, lik = lik, coef = coef)) } DRIMSeq/R/dmDS_profileLik.R0000644000175200017520000000137214136051631016336 0ustar00biocbuildbiocbuild dmDS_profileLik <- function(prec, counts, design, prec_adjust = TRUE, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ fit <- dmDS_fit(counts = counts, design = design, precision = prec, one_way = one_way, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) if(!prec_adjust) return(fit$lik) adj <- dmDS_CRadjustment(counts = counts, fit = fit$fit, design = design, precision = prec, one_way = one_way, verbose = verbose, BPPARAM = BPPARAM) adj_lik <- fit$lik - adj # adj_lik has length G return(adj_lik) } DRIMSeq/R/dmSQTL_CRadjustment.R0000644000175200017520000000556614136051631017127 0ustar00biocbuildbiocbuild dmSQTL_CRadjustmentManyGroups_gene <- function(g, counts, genotypes, prec, fit, verbose){ if(verbose >= 2) message(" Gene:", g) y <- counts[[g]] x <- genotypes[[g]] a <- numeric(nrow(x)) for(i in 1:nrow(x)){ # i = 2 NAs <- is.na(x[i, ]) | is.na(y[1, ]) yy <- y[, !NAs, drop = FALSE] xx <- x[i, !NAs] ff <- fit[[g]][[i]][, !NAs, drop = FALSE] groups <- factor(xx) ngroups <- nlevels(groups) lgroups <- levels(groups) igroups <- lapply(lgroups, function(gr){which(groups == gr)}) names(igroups) <- lgroups # Get the column number of a first occurance of a group level figroups <- unlist(lapply(igroups, function(x){x[1]})) a[i] <- dm_CRadjustmentManyGroups(y = yy, ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec[[g]][i], prop = ff[, figroups, drop = FALSE]) } # a vector of length #snps for gene g return(a) } #' @importFrom stats model.matrix dmSQTL_CRadjustmentRegression_gene <- function(g, counts, genotypes, group_formula = ~ group, prec, fit, verbose){ if(verbose >= 2) message(" Gene:", g) y <- counts[[g]] x <- genotypes[[g]] a <- numeric(nrow(x)) for(i in 1:nrow(x)){ # i = 2 NAs <- is.na(x[i, ]) | is.na(y[1, ]) yy <- y[, !NAs, drop = FALSE] xx <- x[i, !NAs] ff <- fit[[g]][[i]][, !NAs, drop = FALSE] design <- model.matrix(group_formula, data = data.frame(group = xx)) a[i] <- dm_CRadjustmentRegression(y = yy, x = design, prec = prec[[g]][i], prop = ff) } # a vector of length #snps for gene g return(a) } dmSQTL_CRadjustment <- function(counts, fit, genotypes, group_formula = ~ group, precision, one_way = TRUE, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Calculating Cox-Reid adjustment.. \n") inds <- 1:length(counts) # Prepare precision if(class(precision) == "numeric"){ prec <- relist(rep(precision, nrow(genotypes)), genotypes@partitioning) } else { prec <- precision } if(one_way){ adj <- BiocParallel::bplapply(inds, dmSQTL_CRadjustmentManyGroups_gene, counts = counts, genotypes = genotypes, prec = prec, fit = fit, verbose = verbose, BPPARAM = BPPARAM) names(adj) <- names(counts) }else{ adj <- BiocParallel::bplapply(inds, dmSQTL_CRadjustmentRegression_gene, counts = counts, genotypes = genotypes, group_formula = ~ group, prec = prec, fit = fit, verbose = verbose, BPPARAM = BPPARAM) names(adj) <- names(counts) } time_end <- Sys.time() if(verbose >= 2) message("\n") if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") # adj is a list of length G return(adj) } DRIMSeq/R/dmSQTL_estimateCommonPrecision.R0000644000175200017520000000337414136051631021357 0ustar00biocbuildbiocbuild dmSQTL_profileLikCommon <- function(prec, counts, genotypes, prec_adjust = TRUE, prec_interval = c(0, 1e+5), prec_tol = 1e+01, one_way = TRUE, group_formula = ~ group, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ if(verbose >= 2) message("Gamma in optimize:", prec, "\n") adj_lik <- dmSQTL_profileLik(prec = prec, counts = counts, genotypes = genotypes, prec_adjust = prec_adjust, one_way = one_way, group_formula = group_formula, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) adj_lik_common <- sum(adj_lik, na.rm = TRUE) return(adj_lik_common) } #' @importFrom stats optimize dmSQTL_estimateCommonPrecision <- function(counts, genotypes, prec_adjust = TRUE, prec_interval = c(0, 1e+5), prec_tol = 1e+01, one_way = TRUE, group_formula = ~ group, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Estimating common precision.. \n") optimum <- optimize(f = dmSQTL_profileLikCommon, interval = prec_interval, counts = counts, genotypes = genotypes, prec_adjust = prec_adjust, one_way = one_way, group_formula = group_formula, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = max(0, verbose-1), BPPARAM = BPPARAM, maximum = TRUE, tol = prec_tol) precision <- optimum$maximum time_end <- Sys.time() if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") return(precision) } DRIMSeq/R/dmSQTL_estimateTagwisePrecision.R0000644000175200017520000000453114136051631021526 0ustar00biocbuildbiocbuild#' @importFrom stats complete.cases dmSQTL_estimateTagwisePrecision <- function(counts, genotypes, mean_expression, prec_adjust = TRUE, prec_init = 100, prec_grid_length = 21, prec_grid_range = c(-10, 10), prec_moderation = "none", prec_prior_df = 0, prec_span = 0.1, one_way = TRUE, group_formula = ~ group, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Estimating genewise precision.. \n") ### Standard grid like in edgeR spline_pts <- seq(from = prec_grid_range[1], to = prec_grid_range[2], length = prec_grid_length) spline_prec <- prec_init * 2^spline_pts # Calculate the likelihood for each gene and snp # at the spline precision points loglik <- matrix(NA, nrow = nrow(genotypes), ncol = prec_grid_length) for(i in seq(prec_grid_length)){ # i = 1 loglik[, i] <- dmSQTL_profileLik(prec = spline_prec[i], counts = counts, genotypes = genotypes, prec_adjust = prec_adjust, one_way = one_way, group_formula = group_formula, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, verbose = max(0, verbose - 1), BPPARAM = BPPARAM) } not_nas <- complete.cases(loglik) loglik <- loglik[not_nas, , drop = FALSE] if(nrow(loglik) == 0){ precision <- rep(NA, nrow(genotypes)) names(precision) <- rownames(genotypes) precision <- relist(precision, genotypes@partitioning) return(precision) } if(prec_moderation != "none"){ mean_expression <- rep(mean_expression, elementNROWS(genotypes))[not_nas] loglik <- dm_profileLikModeration(loglik = loglik, mean_expression = mean_expression, prec_moderation = prec_moderation, prec_prior_df = prec_prior_df, prec_span = prec_span) } out <- edgeR::maximizeInterpolant(spline_pts, loglik) # Set NA for genes that tagwise prec could not be calculated precision <- rep(NA, nrow(genotypes)) names(precision) <- rownames(genotypes) precision[not_nas] <- prec_init * 2^out precision <- relist(precision, genotypes@partitioning) time_end <- Sys.time() if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") return(precision) } DRIMSeq/R/dmSQTL_filter.R0000644000175200017520000001226114136051631015777 0ustar00biocbuildbiocbuild dmSQTL_filter_genotypes_per_gene <- function(g, counts_new, genotypes, minor_allele_freq){ # g = 1 counts_gene <- counts_new[[g]] genotypes_gene <- genotypes[[g]] ## NA for samples with non expressed genes and missing genotype genotypes_gene[, is.na(counts_gene[1,])] <- NA genotypes_gene[genotypes_gene == -1] <- NA ### Keep genotypes with at least minor_allele_freq number of ### variants per group; in other case replace them with NAs genotypes_gene <- apply(genotypes_gene, 1, function(x){ # x <- genotypes_gene[6,] tt <- table(x) if(length(tt) == 1) return(NULL) if(length(tt) == 2){ if(any(tt <= minor_allele_freq)) return(NULL) return(x) }else{ if(sum(tt <= minor_allele_freq) >= 2) return(NULL) x[x == names(tt[tt <= minor_allele_freq])] <- NA return(x) } }) if(!is.null(genotypes_gene)){ if(is.list(genotypes_gene)) genotypes_gene <- do.call(rbind, genotypes_gene) else genotypes_gene <- t(genotypes_gene) } return(genotypes_gene) } dmSQTL_filter <- function(counts, genotypes, blocks, samples, min_samps_gene_expr = 70, min_gene_expr = 20, min_samps_feature_expr = 5, min_feature_expr = 20, min_samps_feature_prop = 5, min_feature_prop = 0.05, minor_allele_freq = 5, run_gene_twice = FALSE, BPPARAM = BiocParallel::SerialParam()){ ######################################################## # filtering on counts, put NA for samples with low gene expression ######################################################## inds <- which(elementNROWS(counts) > 1) counts_new <- lapply(inds, function(g){ # g = 1 expr_features <- counts[[g]] ### no genes with no expression if(sum(expr_features, na.rm = TRUE) == 0) return(NULL) ### genes with min expression if(! sum(colSums(expr_features) >= min_gene_expr, na.rm = TRUE) >= min_samps_gene_expr ) return(NULL) ### no features with no expression features2keep <- rowSums(expr_features > 0, na.rm = TRUE) > 0 ### no genes with one feature if(sum(features2keep) <= 1) return(NULL) expr_features <- expr_features[features2keep, , drop = FALSE] ### features with min expression features2keep <- rowSums(expr_features >= min_feature_expr, na.rm = TRUE) >= min_samps_feature_expr ### no genes with one feature if(sum(features2keep) <= 1) return(NULL) expr_features <- expr_features[features2keep, , drop = FALSE] ### genes with zero expression samps2keep <- colSums(expr_features) > 0 & !is.na(expr_features[1, ]) if(sum(samps2keep) < max(1, min_samps_feature_prop)) return(NULL) ### consider only samples that have min gene expression, to other assign NAs samps2keep <- colSums(expr_features) >= min_gene_expr & !is.na(expr_features[1, ]) if(sum(samps2keep) < max(1, min_samps_feature_prop)) return(NULL) prop <- prop.table(expr_features[, samps2keep, drop = FALSE], 2) features2keep <- rowSums(prop >= min_feature_prop) >= min_samps_feature_prop ### no genes with one feature if(sum(features2keep) <= 1) return(NULL) expr <- expr_features[features2keep, , drop = FALSE] expr[, !samps2keep] <- NA if (run_gene_twice) { ### no genes with no expression if(sum(expr_features, na.rm = TRUE) == 0) return(NULL) ### genes with min expression if(! sum(colSums(expr_features) >= min_gene_expr, na.rm = TRUE) >= min_samps_gene_expr ) return(NULL) } return(expr) }) names(counts_new) <- names(counts)[inds] NULLs <- !sapply(counts_new, is.null) counts_new <- counts_new[NULLs] if(length(counts_new) == 0) stop("!No genes left after filtering!") counts_new <- MatrixList(counts_new) ######################################################## # filtering on genotypes ######################################################## genotypes <- genotypes[inds[NULLs]] blocks <- blocks[inds[NULLs], ] genotypes_new <- BiocParallel::bplapply(1:length(counts_new), dmSQTL_filter_genotypes_per_gene, counts_new = counts_new, genotypes = genotypes, minor_allele_freq = minor_allele_freq, BPPARAM = BPPARAM) names(genotypes_new) <- names(genotypes) NULLs <- !sapply(genotypes_new, is.null) genotypes_new <- genotypes_new[NULLs] if(length(genotypes_new) == 0) stop("!No SNPs left after filtering!") genotypes_new <- MatrixList(genotypes_new) counts_new <- counts_new[NULLs] blocks <- blocks[NULLs, ] ######################################################## # filtering on blocks ######################################################## inds <- 1:length(genotypes_new) blocks_new <- MatrixList(lapply(inds, function(b){ # b = 1 blocks[[b]][blocks[[b]][, "block_id"] %in% rownames(genotypes_new[[b]]), , drop = FALSE] })) names(blocks_new) <- names(genotypes_new) data <- new("dmSQTLdata", counts = counts_new, genotypes = genotypes_new, blocks = blocks_new, samples = samples) return(data) } DRIMSeq/R/dmSQTL_fit.R0000644000175200017520000001047214136051631015276 0ustar00biocbuildbiocbuild# Fitting the Dirichlet-multinomial model dmSQTL_fitManyGroups_gene <- function(g, counts, genotypes, prec, prop_mode, prop_tol, verbose){ # g = 6 if(verbose >= 2) message(" Gene:", g) y <- counts[[g]] x <- genotypes[[g]] ff <- lapply(1:nrow(x), function(i){ # i = 2 NAs <- is.na(x[i, ]) | is.na(y[1, ]) yy <- y[, !NAs, drop = FALSE] xx <- x[i, !NAs] groups <- factor(xx) ngroups <- nlevels(groups) lgroups <- levels(groups) igroups <- lapply(lgroups, function(gr){which(groups == gr)}) names(igroups) <- lgroups f <- dm_fitManyGroups(y = yy, ngroups = ngroups, lgroups = lgroups, igroups = igroups, prec = prec[[g]][i], prop_mode = prop_mode, prop_tol = prop_tol) lik <- sum(f$lik) fit <- matrix(NA, nrow = nrow(y), ncol = ncol(y)) fit[, !NAs] <- f$prop[, groups] return(list(lik = lik, fit = fit)) }) lik <- unlist(lapply(ff, function(f) f[["lik"]])) fit <- MatrixList(lapply(ff, function(f) f[["fit"]])) colnames(fit) <- colnames(counts) # lik is a vector of length nrow(x) # fit is a MatrixList of matrices q x n # DOES NOT return coef return(list(lik = lik, fit = fit)) } #' @importFrom stats model.matrix dmSQTL_fitRegression_gene <- function(g, counts, genotypes, group_formula = ~ group, prec, coef_mode, coef_tol, verbose){ if(verbose >= 2) message(" Gene:", g) y <- counts[[g]] x <- genotypes[[g]] ff <- lapply(1:nrow(x), function(i){ # i = 2 NAs <- is.na(x[i, ]) | is.na(y[1, ]) yy <- y[, !NAs, drop = FALSE] xx <- x[i, !NAs] design <- model.matrix(group_formula, data = data.frame(group = xx)) f <- dm_fitRegression(y = yy, design = design, prec = prec[[g]][i], coef_mode = coef_mode, coef_tol = coef_tol) fit <- matrix(NA, nrow = nrow(y), ncol = ncol(y)) fit[, !NAs] <- f$fit return(list(lik = f$lik, fit = fit)) }) lik <- unlist(lapply(ff, function(f) f[["lik"]])) fit <- MatrixList(lapply(ff, function(f) f[["fit"]])) colnames(fit) <- colnames(counts) # lik is a vector of length nrow(x) # fit is a MatrixList of matrices q x n # DOES NOT return coef return(list(lik = lik, fit = fit)) } dmSQTL_fit <- function(counts, genotypes, precision, one_way = TRUE, group_formula = ~ group, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, return_fit = FALSE, return_coef = FALSE, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ time_start <- Sys.time() if(verbose) message("* Fitting the DM model.. \n") inds <- 1:length(counts) # Prepare precision if(class(precision) == "numeric"){ prec <- relist(rep(precision, nrow(genotypes)), genotypes@partitioning) } else { prec <- precision } # Approach from edgeR glmFit.default: # If oneway layout, use a shortcut algorithm if(one_way){ if(verbose) message(" Using the one way approach. \n") ff <- BiocParallel::bplapply(inds, dmSQTL_fitManyGroups_gene, counts = counts, genotypes = genotypes, prec = prec, prop_mode = prop_mode, prop_tol = prop_tol, verbose = verbose, BPPARAM = BPPARAM) names(ff) <- names(counts) lik <- lapply(ff, function(f) f[["lik"]]) if(return_fit){ fit <- lapply(ff, function(f) f[["fit"]]) }else{ fit <- list() } }else{ if(verbose) message(" Using the regression approach. \n") ff <- BiocParallel::bplapply(inds, dmSQTL_fitRegression_gene, counts = counts, genotypes = genotypes, group_formula = group_formula, prec = prec, coef_mode = coef_mode, coef_tol = coef_tol, verbose = verbose, BPPARAM = BPPARAM) names(ff) <- names(counts) lik <- lapply(ff, function(f) f[["lik"]]) if(return_fit){ fit <- lapply(ff, function(f) f[["fit"]]) }else{ fit <- list() } } time_end <- Sys.time() if(verbose >= 2) message("\n") if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") # fit is a list of length G of MatrixLists # lik is a list of length G ofvectors # coef Currently, do not compute coef return(list(fit = fit, lik = lik, coef = list())) } DRIMSeq/R/dmSQTL_permutations.R0000755000175200017520000001700614136051631017251 0ustar00biocbuildbiocbuild dmSQTL_permutations_all_genes <- function(x, pvalues, max_nr_perm_cycles = 10, max_nr_min_nr_sign_pval = 1e3, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()){ # x dmSQTLfit object # pvalues vector of nominal p-values nas <- is.na(pvalues) pvalues <- pvalues[!nas] pvalues <- factor(pvalues) sum_sign_pval <- rep(0, length(pvalues)) nr_perm_tot <- 0 nr_perm_cycles <- 0 min_nr_sign_pval <- 0 while(nr_perm_cycles < max_nr_perm_cycles && min_nr_sign_pval < max_nr_min_nr_sign_pval){ if(verbose) message(paste0("** Running permutation cycle number ", nr_perm_cycles + 1 , "..")) ### Permute counts for all genes n <- ncol(x@counts) permutation <- sample(n, n) counts_perm <- x@counts[, permutation] # Fit the DM full model fit_full_perm <- dmSQTL_fit(counts = counts_perm, genotypes = x@genotypes, precision = x@genewise_precision, one_way = one_way, group_formula = ~ group, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = FALSE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) # Prepare null (one group) genotypes genotypes_null <- x@genotypes genotypes_null@unlistData[!is.na(genotypes_null@unlistData)] <- 1 # Fit the DM null model fit_null_perm <- dmSQTL_fit(counts = counts_perm, genotypes = genotypes_null, precision = x@genewise_precision, one_way = one_way, group_formula = ~ 1, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = FALSE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) ## Perform the LR test pval_perm <- lapply(1:length(counts_perm), function(g){ # g = 1 ## Calculate the degrees of freedom df <- (nrow(counts_perm[[g]]) - 1) * (apply(x@genotypes[[g]], 1, function(xx) length(unique(xx))) - 1) out <- dm_LRT(lik_full = fit_full_perm[["lik"]][[g]], lik_null = fit_null_perm[["lik"]][[g]], df = df, verbose = FALSE) return(out[, "pvalue"]) }) pval_perm <- unlist(pval_perm) nr_perm <- length(pval_perm) nr_perm_tot <- nr_perm_tot + nr_perm nr_perm_cycles <- nr_perm_cycles + 1 ### Count how many pval_permuted is lower than pvalues from the model nas_perm <- is.na(pval_perm) pval_perm <- pval_perm[!nas_perm] pval_perm_cut <- cut(pval_perm, c(-1, levels(pvalues), 2), right=FALSE) pval_perm_sum <- table(pval_perm_cut) pval_perm_cumsum <- cumsum(pval_perm_sum)[-length(pval_perm_sum)] names(pval_perm_cumsum) <- levels(pvalues) sum_sign_pval <- sum_sign_pval + pval_perm_cumsum[pvalues] pval_adj <- (sum_sign_pval + 1) / (nr_perm_tot + 1) min_nr_sign_pval <- min(sum_sign_pval) } pval_out <- rep(NA, length(pvalues)) pval_out[!nas] <- pval_adj # pval_out vector of permutation adjusted p-values return(pval_out) } dmSQTL_permutations_per_gene <- function(x, pvalues, max_nr_perm = 1e6, max_nr_sign_pval = 1e2, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()){ # x dmSQTLfit object # pvalues list of length G of vector with nominal p-values pvalues <- lapply(pvalues, function(x){ pval_tmp <- x[!is.na(x)] pval_tmp <- factor(pval_tmp) return(pval_tmp) }) results_width <- unlist(lapply(pvalues, length)) nas <- results_width == 0 genes2permute <- which(!nas) sum_sign_pval <- vector("list", length(pvalues)) sum_sign_pval[!nas] <- split(rep(0, sum(results_width)), factor(rep(1:length(results_width), times = results_width))) nr_perm_tot <- rep(0, length(x@counts)) nr_perm_tot[nas] <- NA min_nr_sign_pval <- rep(0, length(x@counts)) min_nr_sign_pval[nas] <- NA n <- ncol(x@counts) while(length(genes2permute) > 0){ if(verbose) message(paste0("** ", length(genes2permute), " genes left for permutation..")) ### Permute counts for all genes that need additional permutations permutation <- sample(n, n) counts_perm <- x@counts[genes2permute, permutation] genotypes <- x@genotypes[genes2permute, ] precision <- x@genewise_precision[genes2permute] # Fit the DM full model fit_full_perm <- dmSQTL_fit(counts = counts_perm, genotypes = genotypes, precision = precision, one_way = one_way, group_formula = ~ group, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = FALSE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) # Prepare null (one group) genotypes genotypes_null <- genotypes genotypes_null@unlistData[!is.na(genotypes_null@unlistData)] <- 1 # Fit the DM null model fit_null_perm <- dmSQTL_fit(counts = counts_perm, genotypes = genotypes_null, precision = precision, one_way = one_way, group_formula = ~ 1, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = FALSE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) ## Perform the LR test pval_perm <- lapply(1:length(counts_perm), function(g){ # g = 1 ## Calculate the degrees of freedom df <- (nrow(counts_perm[[g]]) - 1) * (apply(genotypes[[g]], 1, function(xx) length(unique(xx))) - 1) out <- dm_LRT(lik_full = fit_full_perm[["lik"]][[g]], lik_null = fit_null_perm[["lik"]][[g]], df = df, verbose = FALSE) return(out[, "pvalue"]) }) ### Count how many pval_perm is lower than pvalues from the model update_nr_sign_pval <- lapply(1:length(pval_perm), function(i){ # i = 1 pval_perm_gene <- pval_perm[[i]] pval_perm_gene <- pval_perm_gene[!is.na(pval_perm_gene)] pval_perm_cut <- cut(pval_perm_gene, c(-1, levels(pvalues[[genes2permute[i]]]), 2), right=FALSE) pval_perm_sum <- table(pval_perm_cut) pval_perm_cumsum <- cumsum(pval_perm_sum)[-length(pval_perm_sum)] names(pval_perm_cumsum) <- levels(pvalues[[genes2permute[i]]]) nr_sign_pval <- pval_perm_cumsum[pvalues[[genes2permute[i]]]] names(nr_sign_pval) <- NULL return(nr_sign_pval) }) ### Update values in sum_sign_pval for(i in 1:length(update_nr_sign_pval)){ sum_sign_pval[[genes2permute[i]]] <- sum_sign_pval[[genes2permute[i]]] + update_nr_sign_pval[[i]] } nr_perm <- unlist(lapply(pval_perm, length)) nr_perm_tot[genes2permute] <- nr_perm_tot[genes2permute] + nr_perm min_nr_sign_pval[genes2permute] <- unlist(lapply(sum_sign_pval[genes2permute], min)) ### Update genes2permute genes2permute <- which(nr_perm_tot < max_nr_perm & min_nr_sign_pval < max_nr_sign_pval) } ### Calculate permutation adjusted p-values pval_adj <- lapply(1:length(pvalues), function(i){ pval_tmp <- pvalues[[i]] nas <- is.na(pval_tmp) if(sum(!nas) == 0) return(pval_tmp) pval_tmp[!nas] <- (sum_sign_pval[[i]] + 1) / (nr_perm_tot[i] + 1) return(pval_tmp) }) # pval_adj list of length G with vectors of permutation adjusted p-values return(pval_adj) } DRIMSeq/R/dmSQTL_profileLik.R0000644000175200017520000000171614136051631016615 0ustar00biocbuildbiocbuild dmSQTL_profileLik <- function(prec, counts, genotypes, prec_adjust = TRUE, one_way = TRUE, group_formula = ~ group, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = FALSE, BPPARAM = BiocParallel::SerialParam()){ fit <- dmSQTL_fit(counts = counts, genotypes = genotypes, precision = prec, one_way = one_way, group_formula = group_formula, prop_mode = prop_mode, prop_tol = prop_tol, coef_mode = coef_mode, coef_tol = coef_tol, return_fit = TRUE, return_coef = FALSE, verbose = verbose, BPPARAM = BPPARAM) if(!prec_adjust) return(unlist(fit$lik)) adj <- dmSQTL_CRadjustment(counts = counts, fit = fit$fit, genotypes = genotypes, group_formula = group_formula, precision = prec, one_way = one_way, verbose = verbose, BPPARAM = BPPARAM) adj_lik <- unlist(fit$lik) - unlist(adj) # adj_lik is a vector containing all the genes and snps return(adj_lik) } DRIMSeq/R/dm_CRadjustmentManyGroups.R0000755000175200017520000000112714136051631020440 0ustar00biocbuildbiocbuild dm_CRadjustmentManyGroups <- function(y, ngroups, lgroups, igroups, prec, prop){ # y can not have any rowSums(y) == 0 - assured during dmFilter # prop matrix q x ngroups if(any(is.na(prop[1, ]))) return(NA) adj <- numeric(ngroups) for(gr in 1:ngroups){ # gr=1 prop_tmp <- prop[, gr] y_tmp <- y[, igroups[[gr]], drop = FALSE] a <- dm_CRadjustmentOneGroup(y = y_tmp, prec, prop = prop_tmp) adj[gr] <- a } adj <- sum(adj) if(is.na(adj)) return(NA) if(abs(adj) == Inf) return(NA) return(adj) } DRIMSeq/R/dm_CRadjustmentOneGroup.R0000755000175200017520000000177214136051631020100 0ustar00biocbuildbiocbuild dm_CRadjustmentOneGroup <- function(y, prec, prop){ # y martix q x n # prop vector of length q # If something is wrong, return NAs if(any(is.na(prop))) return(NA) q <- nrow(y) # NAs for genes with one feature if(q < 2 || is.na(prec)) return(NA) # Check for 0s in rows (features) keep_row <- rowSums(y) > 0 # There must be at least two non-zero features if(sum(keep_row) < 2) return(NA) # Last feature can not be zero since # we use the last feature as a denominator in logit if(keep_row[q] == 0) return(NA) y <- y[keep_row, , drop=FALSE] q <- nrow(y) # Check for 0s in columns (replicates) keep_col <- colSums(y) > 0 y <- y[, keep_col, drop=FALSE] prop <- prop[keep_row] n <- ncol(y) H <- dm_HessianG(prop = prop[-q], prec, y) adj <- log(det(n * (- H) ))/2 ## with Gamma functions ## if prop is NULL then: # Error in is.data.frame(x) : # dims [product 6] do not match the length of object [0] return(adj) } DRIMSeq/R/dm_CRadjustmentRegression.R0000755000175200017520000000177314136051631020463 0ustar00biocbuildbiocbuild #' @importFrom stats optimHess dm_CRadjustmentRegression <- function(y, x, prec, prop){ # prop q x n matrix of fitted proportions # y q x n matrix # x n x p matrix with the design # y can not have any rowSums(y) == 0 - assured during dmFilter if(any(is.na(prop[1, ]))) return(NA) prop <- t(prop) # n x q n <- nrow(prop) q <- ncol(prop) H <- dm_Hessian_regG_prop(y = t(y), prec = prec, prop = prop, x = x) adj <- log(det(n * (-H))) / 2 ## If the above calculation returns NA, try optimHess() if(is.na(adj)){ # Recalculate betas from proportions and the design logit_prop <- log(prop / prop[, q]) # n x q par <- c(MASS::ginv(x) %*% logit_prop[, -q, drop = FALSE]) # Maximization H <- optimHess(par = par, fn = dm_lik_regG, gr = dm_score_regG, x = x, prec = prec, y = y) adj <- log(det(n * (-H))) / 2 if(is.na(adj)) return(NA) } if(abs(adj) == Inf) return(NA) return(adj) } DRIMSeq/R/dm_LRT.R0000644000175200017520000000142214136051631014444 0ustar00biocbuildbiocbuild#' @importFrom stats pchisq p.adjust dm_LRT <- function(lik_full, lik_null, df, verbose = FALSE){ if(verbose) message("* Calculating likelihood ratio statistics.. \n") time_start <- Sys.time() lr <- 2*(lik_full - lik_null) pvalue <- pchisq(lr, df = df , lower.tail = FALSE) adj_pvalue <- p.adjust(pvalue, method="BH") table <- matrix(c(lr, df, pvalue, adj_pvalue), ncol = 4, byrow = FALSE) colnames(table) <- c("lr", "df", "pvalue", "adj_pvalue") # table <- data.frame(lr = lr, df = df, # pvalue = pvalue, adj_pvalue = adj_pvalue, # stringsAsFactors = FALSE) rownames(table) <- names(lik_full) time_end <- Sys.time() if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") return(table) } DRIMSeq/R/dm_core_Hessian.R0000644000175200017520000001171514136051631016413 0ustar00biocbuildbiocbuild############################################################################## # Hessian for q-1 parameters -- with gamma functions ############################################################################## dm_HessianG <- function(prop, prec, y){ # prop has length of q-1 # prec has length 1 # y has q rows and n columns q <- nrow(y) n <- ncol(y) Djj <- rep(0, q-1) propq <- 1-sum(prop) yq <- y[q, ] y <- y[-q, , drop=FALSE] Djl <- prec^2 * sum(trigamma(yq + propq * prec) - trigamma(propq * prec)) Djj <- prec^2 * rowSums(trigamma(y + prop * prec) - trigamma(prop * prec)) H <- matrix(Djl, q-1, q-1) diag(H) <- diag(H) + Djj # H martix (q-1) x (q-1) return(H) } dm_Hessian_regG_prop <- function(y, prec, prop, x){ # y n x q matrix !!! # prop n x q matrix of fitted proportions # x n x p matrix with the design q <- ncol(y) p <- ncol(x) prop_prec <- prop * prec # Some calculations for later ldg_y <- digamma(y + prop_prec) ldg <- digamma(prop_prec) ldgp_y <- ldg_y * prop ldgp_y_sum <- rowSums(ldgp_y) ldgp <- ldg * prop ldgp_sum <- rowSums(ldgp) ltgp_y <- trigamma(y + prop_prec) * prop * prec ltgp <- trigamma(prop_prec) * prop * prec ltgpp_y <- ltgp_y * prop ltgpp_y_sum <- rowSums(ltgpp_y) ltgpp <- ltgp * prop ltgpp_sum <- rowSums(ltgpp) H <- matrix(0, p*(q-1), p*(q-1)) rownames(H) <- colnames(H) <- paste0(rep(colnames(y)[-q], each = p), ":", rep(colnames(x), q-1)) jp_index <- matrix(1:p, nrow = q-1, ncol = p, byrow = TRUE) + p * 0:(q-2) for(jp in 1:(q-1)){ for(jpp in 1:jp){ # jp = 1; jpp = 1 W <- prec * ( - prop[, jp] * prop[, jpp] * (-ldgp_y_sum + ldg_y[, jp] + ldgp_sum - ldg[, jp]) + prop[, jp] * (ltgpp_y_sum * prop[, jpp] - ltgpp_y[, jpp] + ldgp_y_sum * prop[, jpp] - ldgp_y[, jpp] - ltgp_y[, jp] * prop[, jpp] - ltgpp_sum * prop[, jpp] + ltgpp[, jpp] - ldgp_sum * prop[, jpp] + ldgp[, jpp] + ltgp[, jp] * prop[, jpp]) ) if(jp == jpp){ W <- W + prec * ( prop[, jp] * (-ldgp_y_sum + ldg_y[, jp] + ldgp_sum - ldg[, jp]) + prop[, jp] * (ltgp_y[, jp] + ltgp[, jp]) ) } h <- t(x) %*% (W * x) H[jp_index[jp, ], jp_index[jpp, ]] <- h # Use the fact that H is symetric if(!jp == jpp){ H[jp_index[jpp, ], jp_index[jp, ]] <- t(h) } } } # H martix p(q-1) x p(q-1) return(H) } dm_Hessian_regG <- function(b, x, prec, y){ ## b has length of (q-1) * p ## x is a matrix n x p ## y has q rows and n columns y <- t(y) # n x q q <- ncol(y) p <- ncol(x) b <- matrix(b, p, q-1) # p x (q-1) z <- exp(x %*% b) # n x (q-1) prop_qm1 <- z/(1 + rowSums(z)) prop <- cbind(prop_qm1, 1 - rowSums(prop_qm1)) # n x q H <- dm_Hessian_regG_prop(y = y, prec = prec, prop = prop, x = x) return(H) } # Hessian for the multinomial distribution m_Hessian_regG <- function(b, x, y){ ## b has length of (q-1) * p ## x is a matrix n x p ## y has q rows and n columns y <- t(y) # n x q q <- ncol(y) p <- ncol(x) b <- matrix(b, p, q-1) # p x (q-1) z <- exp(x %*% b) # n x (q-1) prop_qm1 <- z/(1 + rowSums(z)) prop <- cbind(prop_qm1, 1 - rowSums(prop_qm1)) # n x q m <- rowSums(y) # n H <- matrix(0, p*(q-1), p*(q-1)) rownames(H) <- colnames(H) <- paste0(rep(colnames(y)[-q], each = p), ":", rep(colnames(x), q-1)) jp_index <- matrix(1:p, nrow = q-1, ncol = p, byrow = TRUE) + p * 0:(q-2) for(jp in 1:(q-1)){ for(jpp in 1:jp){ # jp = 1; jpp = 1 W <- m * prop[, jp] * (prop[, jpp] - as.numeric(jp == jpp)) h <- t(x) %*% (W * x) H[jp_index[jp, ], jp_index[jpp, ]] <- h # Use the fact that H is symetric if(!jp == jpp){ H[jp_index[jpp, ], jp_index[jp, ]] <- t(h) } } } # H martix p(q-1) x p(q-1) return(H) } ############################################################################## # Hessian for q-1 parameters -- with sums ############################################################################## dm_Hessian <- function(prop, prec, y){ # prop has length of q-1 # prec has length 1 # y has q rows and n columns q <- nrow(y) n <- ncol(y) propq <- 1 - sum(prop) Djj <- rep(0, q-1) Djl <- 0 for(i in 1:n){ # i=1 if(y[q, i] == 0){ Djl <- Djl + 0 }else{ Djl <- Djl + sum(-prec^2 / (propq * prec + 1:y[q, i] - 1) ^2) } for(j in 1:(q-1)){ # j=1 if(y[j,i] == 0){ Djj[j] <- Djj[j] + 0 }else{ Djj[j] <- Djj[j] + sum(-prec^2 / (prop[j] * prec + 1:y[j,i] - 1) ^2) } } } H <- matrix(Djl, q-1, q-1) diag(H) <- diag(H) + Djj # H martix (q-1) x (q-1) return(H) } DRIMSeq/R/dm_core_colorb.R0000644000175200017520000000104114136051631016270 0ustar00biocbuildbiocbuildcolorb <- function(n){ clrs <- c("dodgerblue3", "maroon2", "forestgreen", "darkorange1" , "blueviolet", "firebrick2", "deepskyblue", "orchid2", "chartreuse3", "gold", "slateblue1", "tomato" , "blue", "magenta", "green3", "yellow", "purple3", "red" ,"darkslategray1", "lightpink1", "lightgreen", "khaki1", "plum3", "salmon") nc <- length(clrs) if(n > nc) clrs <- rep(clrs, ceiling(n/nc)) clrs[1:n] # colorRampPalette(clrs)(n) } # nb <- 24 # barplot(rep(1, nb), col = colorb(nb)) # dev.off() DRIMSeq/R/dm_core_deviance.R0000644000175200017520000000127414136051631016576 0ustar00biocbuildbiocbuild############################################################################## ## Computes the deviance -- with gamma functions -- for q-1 parameters ############################################################################## dm_devG <- function(prop, prec, y){ ## prop has length of q-1 ## prec has length 1 ## y has q rows and n columns prop <- c(prop, 1 - sum(prop)) ll_mod <- sum(lgamma(y + prop * prec) - lgamma(prop * prec) , na.rm = TRUE ) prop_sat <- y/matrix(colSums(y), nrow(y), ncol(y), byrow = TRUE) ll_sat <- sum(lgamma(y + prop_sat * prec) - lgamma(prop_sat * prec) , na.rm = TRUE) # Inf for y = 0 D <- 2 * (ll_sat - ll_mod) return(D) } DRIMSeq/R/dm_core_lik.R0000644000175200017520000000715014136051631015576 0ustar00biocbuildbiocbuild############################################################################## ## Computes the DM log-likelihood -- with gamma functions -- for q-1 parameters ############################################################################## dm_likG <- function(prop, prec, y){ # prop has length of q-1 # prec has length 1 # y has q rows and n columns # This function returns likelihhod without normalizing component, # but it is OK for optimization and the LR test n <- ncol(y) m <- colSums(y) prop <- c(prop, 1 - sum(prop)) l <- n * lgamma(prec) - sum(lgamma(m + prec)) + sum( colSums( lgamma(y + prop * prec) - lgamma(prop * prec) ) ) # normalizing_part <- sum(lgamma(m + 1) - colSums(lgamma(y + 1))) return(l) } dm_likG_neg <- function(prop, prec, y) -dm_likG(prop, prec, y) dm_lik_regG_prop <- function(y, prec, prop){ # y n x q matrix !!! # prop n x q matrix of fitted proportions n <- nrow(y) m <- rowSums(y) l <- n * lgamma(prec) - sum(lgamma(m + prec)) + sum(rowSums(lgamma(y + prec * prop) - lgamma(prop * prec))) # normalizing_part <- sum(lgamma(m + 1) - rowSums(lgamma(y + 1))) return(l) } dm_lik_regG <- function(b, x, prec, y){ ## b has length of (q-1) * p ## x is a matrix n x p ## prec has length 1 ## y q x n matrix ## This function returns likelihhod without normalizing component, ## but it is OK for optimization and the LR test y <- t(y) # n x q # Get prop from x and b q <- ncol(y) p <- ncol(x) b <- matrix(b, p, q-1) z <- exp(x %*% b) prop <- z/(1 + rowSums(z)) # n x (q-1) prop <- cbind(prop, 1 - rowSums(prop)) l <- dm_lik_regG_prop(y = y, prec = prec, prop = prop) return(l) } dm_lik_regG_neg <- function(b, design, prec, y) -dm_lik_regG(b, x = design, prec, y) ############################################################################## ## Computes the DM log-likelihood -- with sums -- for q-1 parameters ############################################################################## dm_lik <- function(prop, prec, y){ # prop has length q-1 # prec has length 1 # y has q rows and n columns # This function returns likelihhod without normalizing component, # but it is OK for optimization and the LR test q <- nrow(y) n <- ncol(y) m <- colSums(y) prop <- c(prop, 1 - sum(prop)) l <- 0 for(i in 1:n){ # i=1 l <- l - sum(log(prec + 1:m[i] - 1)) for(j in 1:q){ # j=3 if(y[j, i] == 0){ lji <- 0 }else{ lji <- sum(log(prop[j] * prec + 1:y[j, i] - 1)) } l <- l + lji } } return(l) } ############################################################################## ## Computes the BB log-likelihood -- with gamma functions -- for q parameters ############################################################################## bb_likG <- function(prop, prec, y){ # prop has length of q # prec has length 1 # y has q rows and n number of columns m <- colSums(y) q <- length(prop) l <- rep(NA, q) for(i in 1:q){ l[i] <- dm_likG(prop = prop[i], prec = prec, y = rbind(y[i, ], m - y[i, ])) } # l vector of length q return(l) } bb_lik_regG_prop <- function(y, prec, prop){ # y n x q matrix !!! # prop n x q matrix of fitted proportions m <- rowSums(y) q <- ncol(prop) l <- rep(NA, q) for(i in 1:q){ l[i] <- dm_lik_regG_prop(y = cbind(y[, i], m - y[, i]), prec = prec, prop = cbind(prop[, i], 1 - prop[, i])) } # l vector of length q return(l) } DRIMSeq/R/dm_core_score.R0000644000175200017520000000440314136051631016130 0ustar00biocbuildbiocbuild############################################################################## # Score-function for q-1 parameters -- with gamma functions ############################################################################## dm_scoreG <- function(prop, prec, y){ # prop has length of q-1 # prec has length 1 # y has q rows and n columns q <- nrow(y) n <- ncol(y) yq <- y[q,] y <- y[-q, , drop=FALSE] propq <- 1-sum(prop) S <- prec * rowSums( digamma(y + prop * prec) - digamma(prop * prec) - matrix(digamma(yq + prec * propq) - digamma(prec * propq), nrow = q-1, ncol = n, byrow = TRUE) ) return(S) } dm_scoreG_neg <- function(prop, prec, y) -dm_scoreG(prop, prec, y) dm_score_regG <- function(b, x, prec, y){ ## b has length of (q-1) * p ## x is a matrix n x p ## prec has length 1 ## y has q rows and n columns y <- t(y) # n x q n <- nrow(x) q <- ncol(y) p <- ncol(x) b <- matrix(b, p, q-1) # p x (q-1) z <- exp(x %*% b) prop_qm1 <- z/(1 + rowSums(z)) prop <- cbind(prop_qm1, 1 - rowSums(prop_qm1)) y_qm1 <- y[, -q, drop = FALSE] # n x (q-1) S <- t(x) %*% (prec * prop_qm1 * (- rowSums(digamma(y + prop*prec) * prop) + digamma(y_qm1 + prop_qm1*prec) + rowSums(digamma(prop*prec) * prop) - digamma(prop_qm1*prec))) # p x (q-1) return(c(S)) } dm_score_regG_neg <- function(b, design, prec, y) -dm_score_regG(b, x = design, prec, y) ############################################################################## # Score-function for q-1 parameters -- with sums ############################################################################## dm_score <- function(prop, prec, y){ # prop has length of q-1 # prec has length 1 # y has q rows and n columns q <- nrow(y) n <- ncol(y) propq <- 1 - sum(prop) S <- rep(0, q-1) for(i in 1:n){ # i=1 if(y[q, i] == 0){ Sqi <- 0 }else{ Sqi <- sum(prec / (propq * prec + 1:y[q, i] - 1)) } for(j in 1:(q-1)){ # j=1 if(y[j, i] == 0){ Sji <- 0 }else{ Sji <- sum(prec / (prop[j] * prec + 1:y[j, i] - 1)) } S[j] <- S[j] + Sji } S <- S - Sqi } return(S) } DRIMSeq/R/dm_estimateMeanExpression.R0000644000175200017520000000101714136051631020477 0ustar00biocbuildbiocbuild dm_estimateMeanExpression <- function(counts, verbose = FALSE){ # Calculate mean expression of genes time_start <- Sys.time() if(verbose) message("* Calculating mean gene expression.. \n") inds <- 1:length(counts) mean_expression <- unlist(lapply(inds, function(g){ mean(colSums(counts[[g]]), na.rm = TRUE) })) names(mean_expression) <- names(counts) time_end <- Sys.time() if(verbose) message("Took ", round(time_end - time_start, 4), " seconds.\n") return(mean_expression) } DRIMSeq/R/dm_fitManyGroups.R0000644000175200017520000000353414136051631016620 0ustar00biocbuildbiocbuild dm_fitManyGroups <- function(y, ngroups, lgroups, igroups, prec, prop_mode = "constrOptim", prop_tol = 1e-12){ # y can not have any rowSums(y) == 0 - assured during dmFilter q <- nrow(y) prop <- matrix(NA, nrow = q, ncol = ngroups) colnames(prop) <- lgroups rownames(prop) <- rownames(y) lik <- rep(NA, ngroups) names(lik) <- lgroups if(q < 2 || is.na(prec)) return(list(prop = prop, lik = lik)) for(gr in 1:ngroups){ # gr = 1 fit_gr <- dm_fitOneGroup(y = y[, igroups[[gr]], drop = FALSE], prec = prec, prop_mode = prop_mode, prop_tol = prop_tol) if(is.na(fit_gr[["lik"]])) { prop <- matrix(NA, nrow = q, ncol = ngroups) colnames(prop) <- lgroups rownames(prop) <- rownames(y) lik <- rep(NA, ngroups) names(lik) <- lgroups return(list(prop = prop, lik = lik)) } prop[, gr] <- fit_gr[["prop"]] lik[gr] <- fit_gr[["lik"]] } # prop and lik can have NAs # prop matrix q x ngroups # lik vector of length ngroups return(list(prop = prop, lik = lik)) } bb_fitManyGroups <- function(y, ngroups, lgroups, igroups, prec, prop){ # This function calculates BB likelihoods # Proportions prop are estimated with the DM model # y can not have any rowSums(y) == 0 - assured during dmFilter q <- nrow(y) lik <- matrix(NA, nrow = q, ncol = ngroups) colnames(lik) <- lgroups if(is.na(prec)) return(list(prop = prop, lik = lik)) for(gr in 1:ngroups){ # gr = 1 fit_gr <- bb_fitOneGroup(y = y[, igroups[[gr]], drop = FALSE], prec = prec, prop = prop[, gr]) lik[, gr] <- fit_gr[["lik"]] } lik[rowSums(is.na(lik)) > 0, ] <- NA # prop and lik can have NAs # prop matrix q x ngroups # lik matrix q x ngroups return(list(prop = prop, lik = lik)) } DRIMSeq/R/dm_fitOneGroup.R0000755000175200017520000000650014136051631016251 0ustar00biocbuildbiocbuild############################################################################## ## estimate prop for given precision ############################################################################## #' @importFrom stats constrOptim dm_fitOneGroup <- function(y, prec, prop_mode = "constrOptim", prop_tol = 1e-12){ # y matrix q x n # If something is wrong, return NAs q <- nrow(y) # NAs for genes with one feature if(q < 2 || is.na(prec)) return(list(prop = rep(NA, q), lik = NA)) # Check for 0s in rows (features) keep_row <- rowSums(y) > 0 # There must be at least two non-zero features if(sum(keep_row) < 2) return(list(prop = rep(NA, q), lik = NA)) # Last feature can not be zero since # we use the last feature as a denominator in logit if(keep_row[q] == 0) return(list(prop = rep(NA, q), lik = NA)) y <- y[keep_row, , drop=FALSE] q <- nrow(y) # Check for 0s in columns (replicates) keep_col <- colSums(y) > 0 y <- y[, keep_col, drop=FALSE] prop_init <- rowSums(y)/sum(y) # If there is only one replicate, use empirical props as output if(sum(keep_col) == 1){ lik <- dm_likG(prop = prop_init[-q], prec = prec, y = y) keep_row[keep_row] <- prop_init prop <- keep_row return(list(prop = prop, lik = lik)) } switch(prop_mode, constrOptim = { ### Must have constraint for SUM prop = 1 --> ### sum(prop) < 1 + eps & sum(prop) > 1 - eps ui <- rbind(diag(rep(1, q-1), q-1), diag(rep(-1, q-1), q-1), rep(-1, q-1)) ci <- c(rep(0, q-1), rep(-1, q-1), -1 + .Machine$double.eps) # ui <- rbind(diag(rep(1, q-1)), diag(rep(-1, q-1))) # ci <- c(rep(0, q-1), rep(-1, q-1)) # Maximization co <- constrOptim(theta = prop_init[-q], f = dm_likG, grad = dm_scoreG, ui = ui, ci = ci, control = list(fnscale = -1, reltol = prop_tol), method = "BFGS", prec = prec, y = y) if(co$convergence == 0){ prop <- co$par prop <- c(prop, 1 - sum(prop)) lik <- co$value }else{ return(list(prop = rep(NA, length(keep_row)), lik = NA)) } }) keep_row[keep_row] <- prop prop <- keep_row # prop numeric vector of length q # lik numeric of lenght 1 return(list(prop = prop, lik = lik)) } bb_fitOneGroup <- function(y, prec, prop){ # Recalculates likelihood for BB, where prop is estimated with DM q <- nrow(y) # BB lik only for non-NA prop from DM if(any(is.na(prop))) return(list(prop = rep(NA, q), lik = rep(NA, q))) # NAs for genes with one feature if(q < 2 || is.na(prec)) return(list(prop = rep(NA, q), lik = rep(NA, q))) # Check for 0s in rows (features with zero proportions) keep_row <- rowSums(y) > 0 # Must be at least two non zero features if(sum(keep_row) < 2) return(list(prop = rep(NA, q), lik = rep(NA, q))) y <- y[keep_row, , drop=FALSE] prop <- prop[keep_row] # Check for 0s in columns (replicates) keep_col <- colSums(y) > 0 y <- y[, keep_col, drop=FALSE] lik <- rep(NA, q) lik[keep_row] <- bb_likG(prop = prop, prec = prec, y = y) keep_row[keep_row] <- prop prop <- keep_row # prop numeric vector of length q # lik numeric vector of length q return(list(prop = prop, lik = lik)) } DRIMSeq/R/dm_fitRegression.R0000755000175200017520000000771014136051631016637 0ustar00biocbuildbiocbuild #' @importFrom stats optim nlminb nlm dm_fitRegression <- function(y, design, prec, coef_mode = "optim", coef_tol = 1e-12){ # y can not have any rowSums(y) == 0 - assured during dmFilter q <- nrow(y) p <- ncol(design) n <- ncol(y) # NAs for genes with one feature if(q < 2 || is.na(prec)){ b <- matrix(NA, nrow = q, ncol = p) prop <- matrix(NA, nrow = q, ncol = n) rownames(prop) <- rownames(y) rownames(b) <- rownames(y) return(list(b = b, lik = NA, fit = prop)) } # Get the initial values for b # Add 1 to get rid of NaNs and Inf and -Inf values in logit # Double check if this approach is correct!!! # Alternative, use 0s: b_init = rep(0, p*(q-1)) yt <- t(y) + 1 # n x q prop <- yt / rowSums(yt) # n x q logit_prop <- log(prop / prop[, q]) b_init <- c(MASS::ginv(design) %*% logit_prop[, -q, drop = FALSE]) switch(coef_mode, optim = { # Maximization co <- optim(par = b_init, fn = dm_lik_regG, gr = dm_score_regG, x = design, prec = prec, y = y, method = "BFGS", control = list(fnscale = -1, reltol = coef_tol)) if(co$convergence == 0){ b <- rbind(t(matrix(co$par, p, q-1)), rep(0, p)) lik <- co$value }else{ b <- matrix(NA, nrow = q, ncol = p) lik <- NA } }, nlminb = { # Minimization co <- nlminb(start = b_init, objective = dm_lik_regG_neg, gradient = dm_score_regG_neg, hessian = NULL, design = design, prec = prec, y = y, control = list(rel.tol = coef_tol)) if(co$convergence == 0){ b <- rbind(t(matrix(co$par, p, q-1)), rep(0, p)) lik <- -co$objective }else{ b <- matrix(NA, nrow = q, ncol = p) lik <- NA } }, nlm = { # Minimization co <- nlm(f = dm_lik_regG_neg, p = b_init, design = design, prec = prec, y = y) if(co$code < 5){ b <- rbind(t(matrix(co$estimate, p, q-1)), rep(0, p)) lik <- -co$minimum }else{ b <- matrix(NA, nrow = q, ncol = p) lik <- NA } } ) # Compute the fitted proportions if(!is.na(lik)){ z <- exp(design %*% t(b[-q, , drop = FALSE])) prop <- z/(1 + rowSums(z)) # n x (q-1) prop <- t(cbind(prop, 1 - rowSums(prop))) # q x n }else{ prop <- matrix(NA, nrow = q, ncol = n) } rownames(prop) <- rownames(y) rownames(b) <- rownames(y) # b matrix q x p # lik vector of length 1 # fit matrix q x n return(list(b = b, lik = lik, fit = prop)) } # ----------------------------------------------------------------------------- # Fitting the Beta-binomial model # Currently, recalculating the BB likelihoods and coefficients using the # DM fittings/proportions bb_fitRegression <- function(y, design, prec, fit){ # y can not have any rowSums(y) == 0 - assured during dmFilter q <- nrow(y) p <- ncol(design) n <- ncol(y) # NAs for genes with one feature if(q < 2 || is.na(prec)){ b <- matrix(NA, nrow = q, ncol = p) prop <- matrix(NA, nrow = q, ncol = n) rownames(prop) <- rownames(y) rownames(b) <- rownames(y) return(list(b = b, lik = rep(NA, q), fit = prop)) } y <- t(y) # n x q prop <- t(fit) # n x q lik <- bb_lik_regG_prop(y = y, prec = prec, prop = prop) # Get the coefficients like in edgeR::mglmOneWay # But use MASS::ginv instead of solve since the design does not have to be # a squared matrix # Keep only the unique rows in the design and logit_prop unique_samps <- !duplicated(design) design <- design[unique_samps, , drop = FALSE] prop <- prop[unique_samps, , drop = FALSE] logit_prop <- log(prop / (1 - prop)) b <- t(MASS::ginv(design) %*% logit_prop) rownames(b) <- colnames(y) # b matrix q x p # lik vector of length q # fit matrix q x n return(list(b = b, lik = lik, fit = fit)) } DRIMSeq/R/dm_plotData.R0000644000175200017520000000721014136051631015554 0ustar00biocbuildbiocbuild#' @importFrom ggplot2 ggplot aes_string theme_bw xlab ylab ggtitle #' geom_histogram theme element_text coord_cartesian geom_text geom_bar #' scale_fill_manual dm_plotDataFeatures <- function(tt, fill_color = "seagreen4"){ df <- data.frame(tt = tt) ggp <- ggplot(df, aes_string(x = "tt")) + theme_bw() + xlab("Number of features per gene") + ylab("Frequency") + ggtitle(paste0(length(tt), " genes / ", sum(tt) , " features")) + geom_histogram(fill = fill_color, breaks = seq(min(df$tt), max(df$tt), by = 1)) + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), plot.title = element_text(size=18, face="bold")) + coord_cartesian(xlim = c(0, max(tt) + 2)) return(ggp) } dm_plotDataBlocks <- function(tt, fill_color = "mediumpurple4"){ df <- data.frame(tt = tt) binwidth <- ceiling(max(df$tt)/100) ggp <- ggplot(df, aes_string(x = "tt")) + theme_bw() + xlab("Number of blocks per gene") + ylab("Frequency") + ggtitle(paste0(length(tt), " genes / ", sum(tt) , " blocks")) + geom_histogram(fill = fill_color, breaks = seq(min(df$tt), max(df$tt), by = binwidth)) + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), plot.title = element_text(size=18, face="bold")) + coord_cartesian(xlim = c(0, max(tt) + 2)) return(ggp) } dm_plotDataSnps <- function(tt, fill_color = "royalblue4"){ df <- data.frame(tt = tt) binwidth <- ceiling(max(df$tt)/100) ggp <- ggplot(df, aes_string(x = "tt")) + theme_bw() + xlab("Number of SNPs per gene") + ylab("Frequency") + ggtitle(paste0(length(tt), " genes / ", sum(tt) , " SNPs")) + geom_histogram(fill = fill_color, breaks = seq(min(df$tt), max(df$tt), by = binwidth)) + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), plot.title = element_text(size=18, face="bold")) + coord_cartesian(xlim = c(0, max(tt) + 2)) return(ggp) } #' Plot the frequency of present features #' #' @param info Data frame with \code{gene_id} and \code{feature_id} of ALL #' features #' @param ds_info Data frame with \code{gene_id} and \code{feature_id} of ONLY #' DS features #' #' @return \code{ggplot} object dm_plotDataDSInfo <- function(info, ds_info){ ds_info_spl <- split(as.character(ds_info$feature_id), factor(ds_info$gene_id)) info_spl <- split(as.character(info$feature_id), factor(info$gene_id)) genes <- names(info_spl) tas <- table(unlist(lapply(names(ds_info_spl), function(g){ # g = "FBgn0004636" if(! g %in% genes) return(NA) features_in <- sum(info_spl[[g]] %in% ds_info_spl[[g]]) return(features_in) })), useNA = "always") tas <- tas[c(length(tas), 1:(length(tas) -1))] names(tas)[1] <- "NoGene" df <- data.frame(x = factor(names(tas), levels = names(tas)), y = as.numeric(tas), colors = "2", stringsAsFactors = FALSE) df[df$x == "NoGene" | df$x == "0", "colors"] <- "1" df$colors <- factor(df$colors) ggp <- ggplot(data = df, aes_string(x = "x", y = "y", label = "y", fill = "colors")) + geom_bar(stat = "identity") + geom_text(hjust = 0.5, vjust = 0, size = 6) + theme_bw() + xlab("Number of DS features left within DS gene") + ylab("Number of DS genes") + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), plot.title = element_text(size=18, face="bold"), legend.position = "none") + scale_fill_manual(values = c("darkred", "grey")) return(ggp) } DRIMSeq/R/dm_plotPrecision.R0000644000175200017520000000432214136051631016637 0ustar00biocbuildbiocbuild#' @importFrom ggplot2 ggplot aes_string theme_bw xlab ylab theme element_text #' guides guide_colorbar scale_colour_gradient geom_point geom_hline #' @importFrom stats quantile na.omit dm_plotPrecision <- function(genewise_precision, mean_expression, nr_features = NULL, common_precision = NULL, low_color = "royalblue2", high_color = "red2", na_value_color = "red2"){ if(!is.null(nr_features)){ df <- data.frame(mean_expression = log10(mean_expression + 1), precision = log10(genewise_precision), nr_features = nr_features) df_quant <- min(quantile(na.omit(df$nr_features), probs = 0.95), 30) breaks <- seq(2, df_quant, ceiling(df_quant/10)) ggp <- ggplot(df, aes_string(x = "mean_expression", y = "precision", colour = "nr_features" )) + theme_bw() + xlab("Log10 of mean expression") + ylab("Log10 of precision") + geom_point(alpha = 0.7, na.rm = TRUE) + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), legend.title = element_text(size=16, face="bold"), legend.text = element_text(size = 14), legend.position = "top") + guides(colour = guide_colorbar(barwidth = 20, barheight = 0.5)) + scale_colour_gradient(limits = c(2, max(breaks)), breaks = breaks, low = low_color, high = high_color, name = "Number of features", na.value = na_value_color) }else{ df <- data.frame(mean_expression = log10(mean_expression + 1), precision = log10(genewise_precision)) ggp <- ggplot(df, aes_string(x = "mean_expression", y = "precision")) + theme_bw() + xlab("Log10 of mean expression") + ylab("Log10 of precision") + geom_point(size = 1, alpha = 0.4, na.rm = TRUE) + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), legend.title = element_text(size=16, face="bold"), legend.text = element_text(size = 14), legend.position = "top") } if(!is.null(common_precision)){ ggp <- ggp + geom_hline(yintercept = log10(common_precision), colour = "black", linetype = "dashed") } return(ggp) } DRIMSeq/R/dm_plotProportions.R0000755000175200017520000003157214136051631017254 0ustar00biocbuildbiocbuild dm_plotProportions_barplot <- function(prop_samp, prop_fit = NULL, main = NULL, group_colors){ ## Plotting ggp <- ggplot() + geom_bar(data = prop_samp, aes_string(x = "feature_id", y = "proportion", group = "sample_id", fill = "group"), stat = "identity", position = position_dodge(width = 0.9)) + theme_bw() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5), axis.text=element_text(size=16), axis.title = element_text(size=14, face="bold"), plot.title = element_text(size=16), legend.position = "right", legend.title = element_text(size = 14), legend.text = element_text(size = 14)) + ggtitle(main) + scale_fill_manual(name = "Groups", values = group_colors, breaks = names(group_colors)) + xlab("Features") + ylab("Proportions") if(!is.null(prop_fit)){ ggp <- ggp + geom_point(data = prop_fit, aes_string(x = "feature_id", y = "proportion", group = "sample_id", fill = "group"), position = position_dodge(width = 0.9), size = 3, shape = 23, alpha = 0.75) } return(ggp) } dm_plotProportions_boxplot1 <- function(prop_samp, prop_fit = NULL, main = NULL, group_colors){ ## Plotting ggp <- ggplot() + geom_jitter(data = prop_samp, aes_string(x = "feature_id", y = "proportion", fill = "group", colour = "group"), position = position_jitterdodge(), alpha = 0.9, size = 2, show.legend = FALSE, na.rm = TRUE) + geom_boxplot(data = prop_samp, aes_string(x = "feature_id", y = "proportion", colour = "group", fill = "group"), outlier.size = NA, alpha = 0.4, lwd = 0.5) + theme_bw() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5), axis.text=element_text(size=16), axis.title=element_text(size=14, face="bold"), plot.title = element_text(size=16), legend.position = "right", legend.title = element_text(size = 14), legend.text = element_text(size = 14)) + ggtitle(main) + scale_fill_manual(name = "Groups", values = group_colors, breaks = names(group_colors)) + scale_colour_manual(name = "Groups", values = group_colors, breaks = names(group_colors)) + xlab("Features") + ylab("Proportions") if(!is.null(prop_fit)){ ggp <- ggp + geom_point(data = prop_fit, aes_string(x = "feature_id", y = "proportion", fill = "group"), position = position_jitterdodge(jitter.width = 0), size = 3, shape = 23) + guides(colour=FALSE) } return(ggp) } dm_plotProportions_lineplot <- function(prop_samp, prop_fit = NULL, main = NULL, group_colors){ ## Plotting ggp <- ggplot() + geom_line(data = prop_samp, aes_string(x = "feature_id", y = "proportion", group = "sample_id", colour = "group"), size = 1.1) + theme_bw() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5), axis.text=element_text(size=16), axis.title = element_text(size=14, face="bold"), plot.title = element_text(size=16), legend.position = "right", legend.title = element_text(size = 14), legend.text = element_text(size = 14)) + ggtitle(main) + scale_fill_manual(name = "Groups", values = group_colors, breaks = names(group_colors)) + scale_colour_manual(name = "Groups", values = group_colors, breaks = names(group_colors)) + xlab("Features") + ylab("Proportions") if(!is.null(prop_fit)){ ggp <- ggp + geom_point(data = prop_fit, aes_string(x = "feature_id", y = "proportion", group = "group", fill = "group"), size = 3, shape = 23) + guides(colour=FALSE) } return(ggp) } dm_plotProportions_boxplot2 <- function(prop_samp, prop_fit = NULL, main = NULL, feature_colors){ ## Plotting ggp <- ggplot() + geom_boxplot(data = prop_samp, aes_string(x = "group", y = "proportion", fill = "feature_id"), outlier.size = NA) + geom_jitter(data = prop_samp, aes_string(x = "group", y = "proportion", fill = "feature_id"), position = position_jitterdodge(), shape = 21, show.legend = FALSE, na.rm = TRUE) + theme_bw() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5), axis.text=element_text(size=14), axis.title=element_text(size=14, face="bold"), plot.title = element_text(size=14), panel.grid.major = element_blank(), legend.title = element_text(size = 14), legend.text = element_text(size = 14)) + geom_vline(xintercept = seq(1, nlevels(prop_samp$group) - 1, 1) + 0.5, color = "gray90") + ggtitle(main) + scale_fill_manual(name = "Features", values = feature_colors) + guides(fill = guide_legend(nrow = 20)) + xlab("Groups") + ylab("Proportions") if(!is.null(prop_fit)){ ggp <- ggp + geom_point(data = prop_fit, aes_string(x = "group", y = "proportion", fill = "feature_id"), position = position_jitterdodge(jitter.width = 0), size = 3, shape = 23, colour = "black") } return(ggp) } dm_plotProportions_ribbonplot <- function(prop_fit, main = NULL, feature_colors){ prop_fit_order <- prop_fit[order(prop_fit$feature_id, decreasing = TRUE), ] prop_fit_order <- prop_fit_order[order(prop_fit_order$group), ] breaks <- unique(prop_fit_order$feature_id) width <- 0.5 ## Get ribbons gr <- list() for (i in 1:(nlevels(prop_fit$group) - 1)){ # i = 1 prop_fit_ribbon <- prop_fit_order[prop_fit_order$group %in% levels(prop_fit_order$group )[c(i, i+1)], ] prop_fit_ribbon$group <- factor(prop_fit_ribbon$group) prop_fit_ribbon$cumsum <- matrix(t(aggregate(prop_fit_ribbon[,"proportion"], by = list(group = prop_fit_ribbon$group), cumsum)[, -1]), ncol = 1) prop_fit_ribbon$offset <- c(width/2, -width/2)[as.numeric(prop_fit_ribbon$group)] prop_fit_ribbon$xid <- i - 1 prop_fit_ribbon$x <- as.numeric(prop_fit_ribbon$group) + prop_fit_ribbon$offset + prop_fit_ribbon$xid prop_fit_ribbon$ymin <- prop_fit_ribbon$cumsum - prop_fit_ribbon$proportion prop_fit_ribbon$ymax <- prop_fit_ribbon$cumsum gr[[i]] <- geom_ribbon(data = prop_fit_ribbon, aes_string(x = "x", ymin = "ymin", ymax = "ymax", group = "feature_id", fill = "feature_id"), alpha = 0.3) } ## Plotting ggp <- ggplot() + geom_bar(data = prop_fit_order, aes_string(x = "group", y = "proportion", fill = "feature_id"), stat = "identity", width = width, position="stack") + gr + theme_bw() + theme(axis.text.x = element_text(angle = 90, vjust = 0.5), axis.text=element_text(size=16), axis.title=element_text(size=14, face="bold"), plot.title = element_text(size=16), legend.title = element_text(size = 14), legend.text = element_text(size = 14)) + ggtitle(main) + coord_cartesian(ylim = c(-0.1, 1.1)) + coord_cartesian(ylim = c(-0.1, 1.1)) + scale_fill_manual(name = "Features", values = feature_colors, breaks = breaks) + guides(fill = guide_legend(nrow = 20)) + xlab("Groups") + ylab("Estimated proportions") return(ggp) } #' Plot feature proportions #' #' Plot observed and/or estimated feature proportions. #' #' @param counts Matrix with rows corresponding to features and columns #' corresponding to samples. Row names are used as labels on the plot. #' @param group Factor that groups samples into conditions. #' @param md Data frame with additional sample information. #' @param fit_full Matrix of estimated proportions with rows corresponding to #' features and columns corresponding to samples. If \code{NULL}, nothing is #' plotted. #' @param main Character vector with main title for the plot. If \code{NULL}, #' nothing is plotted. #' @param plot_type Character defining the type of the plot produced. Possible #' values \code{"barplot"}, \code{"boxplot1"}, \code{"boxplot2"}, #' \code{"lineplot"}, \code{"ribbonplot"}. #' @param order_features Logical. Whether to plot the features ordered by their #' expression. #' @param order_samples Logical. Whether to plot the samples ordered by the #' group variable. If \code{FALSE} order from the \code{sample(x)} is kept. #' @param group_colors Character vector with colors for each group. #' @param feature_colors Character vector with colors for each feature. #' #' @return \code{ggplot} object with the observed and/or estimated with #' Dirichlet-multinomial model feature ratios. Estimated proportions are #' marked with diamond shapes. #' @importFrom reshape2 melt #' @importFrom ggplot2 ggplot aes_string theme_bw xlab ylab theme element_text #' coord_cartesian geom_text ggtitle geom_bar scale_fill_manual geom_point #' geom_jitter position_dodge position_jitterdodge geom_boxplot #' scale_colour_manual scale_colour_manual guides element_blank geom_vline #' scale_x_discrete guide_legend geom_line geom_ribbon #' @importFrom stats aggregate median dm_plotProportions <- function(counts, group, md = NULL, fit_full = NULL, main = NULL, plot_type = "boxplot1", order_features = TRUE, order_samples = TRUE, group_colors = NULL, feature_colors = NULL){ ## Calculate observed proportions proportions <- prop.table(counts, 2) proportions[proportions == "NaN"] <- NA prop_samp <- data.frame(feature_id = rownames(proportions), proportions, stringsAsFactors = FALSE) prop_fit <- NULL if(!is.null(fit_full)) prop_fit <- data.frame(feature_id = rownames(fit_full), fit_full, stringsAsFactors = FALSE) ## Order transcipts by decreasing proportion if(order_features){ oo <- order(apply(aggregate(t(prop_samp[, -1]), by = list(group = group), median)[, -1], 2, max), decreasing = TRUE) feature_levels <- rownames(prop_samp)[oo] }else{ feature_levels <- rownames(counts) } ## Order samples by group if(order_samples){ o <- order(group) sample_levels <- colnames(counts)[o] }else{ sample_levels <- colnames(counts) } ## Melt prop_samp prop_samp <- melt(prop_samp, id.vars = "feature_id", variable.name = "sample_id", value.name = "proportion", factorsAsStrings = FALSE) prop_samp$feature_id <- factor(prop_samp$feature_id, levels = feature_levels) prop_samp$group <- rep(group, each = nrow(counts)) prop_samp$sample_id <- factor(prop_samp$sample_id, levels = sample_levels) ## Add extra info from md about samples if(!is.null(md)){ mm <- match(prop_samp$sample_id, md$sample_id) for(i in setdiff(colnames(md), c("sample_id", "group"))){ prop_samp[, i] <- md[mm, i] } } ## Melt prop_fit if(!is.null(prop_fit)){ prop_fit <- melt(prop_fit, id.vars = "feature_id", variable.name = "sample_id", value.name = "proportion", factorsAsStrings = FALSE) prop_fit$feature_id <- factor(prop_fit$feature_id, levels = feature_levels) prop_fit$group <- rep(group, each = nrow(fit_full)) prop_fit$sample_id <- factor(prop_fit$sample_id, levels = sample_levels) ## Add extra info from md about samples if(!is.null(md)){ mm <- match(prop_fit$sample_id, md$sample_id) for(i in setdiff(colnames(md), c("sample_id", "group"))){ prop_fit[, i] <- md[mm, i] } } } ## Prepare colors for groups if(is.null(group_colors)){ group_colors <- colorb(nlevels(group)) } names(group_colors) <- levels(group) ## Prepare colors for features if(is.null(feature_colors)){ feature_colors <- colorb(nrow(counts)) } names(feature_colors) <- rownames(counts) switch(plot_type, barplot = { dm_plotProportions_barplot(prop_samp = prop_samp, prop_fit = prop_fit, main = main, group_colors = group_colors) }, lineplot = { dm_plotProportions_lineplot(prop_samp = prop_samp, prop_fit = prop_fit, main = main, group_colors = group_colors) }, boxplot1 = { dm_plotProportions_boxplot1(prop_samp = prop_samp, prop_fit = prop_fit, main = main, group_colors = group_colors) }, boxplot2 = { dm_plotProportions_boxplot2(prop_samp = prop_samp, prop_fit = prop_fit, main = main, feature_colors = feature_colors) }, ribbonplot = { if(!is.null(prop_fit)){ keep <- !duplicated(prop_fit[, c("feature_id", "proportion", "group")]) prop_fit <- prop_fit[keep, , drop = FALSE] if(nlevels(factor(prop_fit$sample_id)) != nlevels(factor(prop_fit$group))){ message("Ribbonplot can not be generated.") }else{ dm_plotProportions_ribbonplot(prop_fit, main = main, feature_colors = feature_colors) } }else{ message("Ribbonplot can not be generated.") } } ) } DRIMSeq/R/dm_plotPvalues.R0000644000175200017520000000150014136051631016316 0ustar00biocbuildbiocbuild#' @importFrom ggplot2 ggplot aes_string theme_bw xlab ylab geom_histogram theme #' element_text coord_cartesian geom_text dm_plotPValues <- function(pvalues){ df <- data.frame(pvalues = pvalues[!is.na(pvalues)]) ggp <- ggplot(df, aes_string(x = "pvalues")) + theme_bw() + xlab("P-Values") + ylab("Frequency") + geom_histogram(breaks = seq(0, 1, by = 0.01), fill = "deeppink4") + theme(axis.text = element_text(size=16), axis.title = element_text(size=18, face="bold"), plot.title = element_text(size=16, face="bold")) + coord_cartesian(xlim = c(0, 1)) + geom_text(data = data.frame(x = Inf, y = Inf, label = paste0(nrow(df), " tests ")), aes_string(x = "x", y = "y", label = "label"), hjust = 1, vjust = 3, size = 6) return(ggp) } DRIMSeq/R/dm_profileLikModeration.R0000644000175200017520000001311214136051631020124 0ustar00biocbuildbiocbuild############################################################################## # calculate the moderated profile likelihood ############################################################################## #' @importFrom stats loess predict loess.control dm_profileLikModeration <- function(loglik, mean_expression, prec_moderation = "trended", prec_prior_df, prec_span){ prec_grid_length <- ncol(loglik) ### Check where the grid is maximized grid_max <- apply(loglik, 1, which.max) # In the calculation of moderation, do not take into account genes # that have precision on the top and bottom boundry of the grid # (skipp 4 last grid points and 1 first grid point) not_boundry <- grid_max < (prec_grid_length - 3) & grid_max > 1 boundry_last <- grid_max == prec_grid_length ### Calculate the span of the boundry loglikelihoods if(sum(boundry_last) > 1){ loglik_span_boundry <- apply(loglik[boundry_last, , drop = FALSE], 1, function(x){max(x) - min(x)}) } switch(prec_moderation, common={ ### Calculate the moderating likelihood if(sum(not_boundry) == length(not_boundry)){ moderation <- colMeans(loglik) }else{ moderation <- colMeans(loglik[not_boundry, , drop = FALSE]) } # Estimate priorN - calculate the ratio between moderation lik span # and lik span of boundry genes if(sum(boundry_last) > 10){ moderation_span <- max(moderation) - min(moderation) span_ratio <- moderation_span / loglik_span_boundry priorN <- 1/span_ratio ### Use median priorN <- quantile(priorN, 0.5) }else{ priorN <- prec_prior_df } message(paste0("! Using ", round(priorN, 4), " as a shrinkage factor !\n")) loglik <- sweep(loglik, 2, priorN * moderation, FUN = "+") }, trended={ moderation <- dm_movingAverageByCol(loglik = loglik, mean_expression = mean_expression, not_boundry = not_boundry, prec_span = prec_span) # Estimate priorN - calculate the ratio between moderation lik span # and lik span of boundry genes if(sum(boundry_last) > 10){ moderation_span_boundry <- apply( moderation[boundry_last, , drop = FALSE], 1, function(x){max(x) - min(x)}) span_ratio <- moderation_span_boundry / loglik_span_boundry priorN <- 1/span_ratio ### Do loess fitting if there is enough points. Otherwise, use median if(length(loglik_span_boundry) > 100){ df_priorN_loglog <- data.frame(priorN = log10(priorN), mean_expression = log10(mean_expression[boundry_last])) priorN_loess_loglog <- loess(priorN ~ mean_expression, df_priorN_loglog, control = loess.control(surface = "direct")) priorN_predict_loglog <- predict(priorN_loess_loglog, data.frame(mean_expression = log10(mean_expression)), se = FALSE) priorN <- 10 ^ priorN_predict_loglog }else{ priorN <- quantile(priorN, 0.5) } }else{ priorN <- prec_prior_df } if(length(priorN) == 1){ message(paste0("! Using ", round(priorN, 6), " as a shrinkage factor !\n")) }else{ message(paste0("! Using loess fit as a shrinkage factor !\n")) } loglik <- loglik + priorN * moderation } ) return(loglik) } dm_movingAverageByCol <- function(loglik, mean_expression, not_boundry, prec_span){ if(sum(not_boundry) == length(not_boundry)){ o <- order(mean_expression) oo <- order(o) width <- floor(prec_span * nrow(loglik)) moderation <- edgeR::movingAverageByCol(loglik[o,], width = width)[oo,] }else{ ### Use non boundry genes for calculating the moderation mean_expression_not_boundry <- mean_expression[not_boundry] loglik_not_boundry <- loglik[not_boundry, , drop = FALSE] o <- order(mean_expression_not_boundry) oo <- order(o) width <- floor(prec_span * nrow(loglik_not_boundry)) moderation_not_boundry <- edgeR::movingAverageByCol( loglik_not_boundry[o, , drop = FALSE], width = width)[oo, , drop = FALSE] ### Fill in moderation values for the boundy genes moderation <- matrix(NA, nrow = nrow(loglik), ncol = ncol(loglik)) moderation[not_boundry, ] <- moderation_not_boundry o <- order(mean_expression) oo <- order(o) moderation <- moderation[o, , drop = FALSE] not_boundry <- not_boundry[o] ### Last value in not_boundry must be TRUE if(not_boundry[length(not_boundry)] == FALSE){ last_true <- max(which(not_boundry)) moderation[length(not_boundry), ] <- moderation[last_true, ] not_boundry[length(not_boundry)] <- TRUE } not_boundry_diff <- diff(not_boundry, lag = 1) not_boundry_cumsum <- cumsum(not_boundry) ### Values used for filling in the boundry NAs - swith from FALSE to TRUE replacement_indx <- which(not_boundry_diff == 1) + 1 replaced_indx <- which(!not_boundry) replaced_freq <- as.numeric(table(not_boundry_cumsum[replaced_indx])) moderation_boundry <- moderation[rep(replacement_indx, times = replaced_freq), , drop = FALSE] moderation[!not_boundry, ] <- moderation_boundry moderation <- moderation[oo, , drop = FALSE] } return(moderation) } DRIMSeq/README.md0000755000175200017520000000437414136051631014272 0ustar00biocbuildbiocbuild## DRIMSeq - differential transcript usage and transcript usage QTL analyses with a Dirichlet-multinomial model in RNA-Seq `DRIMSeq` package provides two frameworks. One for the differential transcript usage (DTU) analysis between different designs and one for the tuQTL analysis. Both are based on modeling transcript counts with the Dirichlet-multinomial distribution. DTU analysis can be performed at the gene and/or transcript level. The package also makes available functions for visualization and exploration of the data and results. # Bioconductor installation `DRIMSeq` is available on [Bioconductor](https://www.bioconductor.org/packages/release/bioc/html/DRIMSeq.html) and can be installed with the command: ``` r ## try http:// if https:// URLs are not supported if (!requireNamespace("BiocManager", quietly=TRUE)) install.packages("BiocManager") BiocManager::install("DRIMSeq") ``` The vignette containing all the instructions on how to use the DRIMSeq package for DTU and tuQTL analyses can be accessed by entering: ``` r browseVignettes("DRIMSeq") ``` or on the [Bioconductor website](https://www.bioconductor.org/packages/release/bioc/vignettes/DRIMSeq/inst/doc/DRIMSeq.pdf). # Devel installation from Github To install the latest development version, use the `devtools` package (available [here](https://github.com/hadley/devtools)): ``` r devtools::install_github("markrobinsonuzh/DRIMSeq") ``` To install it with the vignette type: ``` r devtools::install_github("markrobinsonuzh/DRIMSeq", build_vignettes = TRUE) ``` The vignette can be accessed from the R console by typing: ``` r vignette("DRIMSeq") ``` or ``` r browseVignettes("DRIMSeq") ``` # Data packages In order to run the examples from the vignette and the manual, you need to install two data packages [PasillaTranscriptExpr](https://www.bioconductor.org/packages/release/data/experiment/html/PasillaTranscriptExpr.html) and [GeuvadisTranscriptExpr](https://www.bioconductor.org/packages/release/data/experiment/html/GeuvadisTranscriptExpr.html). ``` r ## try http:// if https:// URLs are not supported if (!requireNamespace("BiocManager", quietly=TRUE)) install.packages("BiocManager") BiocManager::install("PasillaTranscriptExpr") BiocManager::install("GeuvadisTranscriptExpr") ``` DRIMSeq/build/0000755000175200017520000000000014136070551014101 5ustar00biocbuildbiocbuildDRIMSeq/build/vignette.rds0000644000175200017520000000040214136070551016434 0ustar00biocbuildbiocbuild‹uQQnÂ0 MÚŽ­ IH\ÀXï0©Bš6¦QøØ¯Õº#ZJ’©âo'¸Ð"›%;ŽŸ_ü¬¼…ˆ¤AÈi8á0`³K‰˜ÏQš=Í´I2ÝxPžª²$CÚ)¬ÀÔ67ªvðmñƒuq]œ/_Àjkɂҽ>>XÚ@£Ü ÜŠ 5æŸLøOM]”Ÿ„òR“pl`‹‚³Æ_d=ömJ5é¢-ÿþÍ—;r÷LÛfmzÎEϠ뉦ª¢~îR¹Ó%|K§]*3_ÃÕûúc³n’~‡ûö 8ìØüEó ­¿è°@‡Ii˜ßêÞðþØ/DRIMSeq/inst/0000755000175200017520000000000014136070551013757 5ustar00biocbuildbiocbuildDRIMSeq/inst/CITATION0000755000175200017520000000153314136051631015117 0ustar00biocbuildbiocbuildcitHeader("To cite DRIMSeq in publications use:") citEntry(entry = "Article", title = "DRIMSeq: a Dirichlet-multinomial framework for multivariate count outcomes in genomics [version 2; referees: 2 approved]", author = personList(as.person("Malgorzata Nowicka"), as.person("Mark D. Robinson")), journal = "F1000Research", year = "2016", volume = "5", number = "1356", doi = "10.12688/f1000research.8900.2", url = "https://f1000research.com/articles/5-1356/v2", textVersion = paste("Malgorzata Nowicka, Mark D. Robinson (2016).", "DRIMSeq: a Dirichlet-multinomial framework for multivariate count outcomes in genomics [version 2; referees: 2 approved].", "F1000Research, 5(1356).", "URL https://f1000research.com/articles/5-1356/v2.") ) DRIMSeq/inst/doc/0000755000175200017520000000000014136070551014524 5ustar00biocbuildbiocbuildDRIMSeq/inst/doc/DRIMSeq.R0000644000175200017520000002061714136070546016065 0ustar00biocbuildbiocbuild## ----style, eval=TRUE, echo=FALSE, results='asis'-------------------------- BiocStyle::latex() ## ----setup_knitr, include=FALSE, cache=FALSE------------------------------- library(knitr) opts_chunk$set(cache = FALSE, warning = FALSE, out.width = "7cm", fig.width = 7, out.height = "7cm", fig.height = 7) ## ----news, eval = FALSE---------------------------------------------------- # news(package = "DRIMSeq") ## ----DSpasilla1------------------------------------------------------------ library(PasillaTranscriptExpr) data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## ----DSlibrary, message=FALSE---------------------------------------------- library(DRIMSeq) ## ----DSdmDSdata_create----------------------------------------------------- pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) d head(counts(d), 3) head(samples(d), 3) ## ----DSdmDSdata_plot------------------------------------------------------- plotData(d) ## ----DSdmDSdata_subset----------------------------------------------------- gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) %in% gene_id_subset, ] d ## ----DSdmFilter------------------------------------------------------------ # Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) ## ----DSdmPrecision_design-------------------------------------------------- ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) design_full ## ----DSdmPrecision--------------------------------------------------------- ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) d head(mean_expression(d), 3) common_precision(d) head(genewise_precision(d)) ## ----DSdmPrecision_plot1--------------------------------------------------- plotPrecision(d) ## ----DSdmPrecision_plot2--------------------------------------------------- library(ggplot2) ggp <- plotPrecision(d) ggp + geom_point(size = 4) ## ----DSdmFit--------------------------------------------------------------- d <- dmFit(d, design = design_full, verbose = 1) d ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") ## ----DSdmTest1------------------------------------------------------------- d <- dmTest(d, coef = "groupKD", verbose = 1) design(d) head(results(d), 3) ## ----DSdmTest2------------------------------------------------------------- design_null <- model.matrix(~ 1, data = samples(d)) design_null d <- dmTest(d, design = design_null) head(results(d), 3) ## ----DSdmTest3------------------------------------------------------------- contrast <- c(0, 1) d <- dmTest(d, contrast = contrast) design(d) head(results(d), 3) ## ----DSdmTest_results------------------------------------------------------ head(results(d, level = "feature"), 3) ## ----DSdmTest_plot--------------------------------------------------------- plotPValues(d) plotPValues(d, level = "feature") ## ----DSdmLRT_plotProportions, out.width = "14cm", fig.width = 14----------- res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") ## ----stageR, eval = FALSE-------------------------------------------------- # library(stageR) # # ## Assign gene-level pvalues to the screening stage # pScreen <- results(d)$pvalue # names(pScreen) <- results(d)$gene_id # # ## Assign transcript-level pvalues to the confirmation stage # pConfirmation <- matrix(results(d, level = "feature")$pvalue, ncol = 1) # rownames(pConfirmation) <- results(d, level = "feature")$feature_id # # ## Create the gene-transcript mapping # tx2gene <- results(d, level = "feature")[, c("feature_id", "gene_id")] # # ## Create the stageRTx object and perform the stage-wise analysis # stageRObj <- stageRTx(pScreen = pScreen, pConfirmation = pConfirmation, # pScreenAdjusted = FALSE, tx2gene = tx2gene) # # stageRObj <- stageWiseAdjustment(object = stageRObj, method = "dtu", # alpha = 0.05) # # getSignificantGenes(stageRObj) # # getSignificantTx(stageRObj) # # padj <- getAdjustedPValues(stageRObj, order = TRUE, # onlySignificantGenes = FALSE) # # head(padj) # ## ----DRIMSeq_batch--------------------------------------------------------- pasilla_samples2 <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition, library_layout = pasilla_metadata$LibraryLayout) d2 <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples2) ## Subsetting to a vignette runnable size d2 <- d2[names(d2) %in% gene_id_subset, ] ## Filtering d2 <- dmFilter(d2, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) ## Create the design matrix design_full2 <- model.matrix(~ group + library_layout, data = samples(d2)) design_full2 ## To make the analysis reproducible set.seed(123) ## Calculate precision d2 <- dmPrecision(d2, design = design_full2) common_precision(d2) head(genewise_precision(d2)) plotPrecision(d2) ## Fit proportions d2 <- dmFit(d2, design = design_full2, verbose = 1) ## Test for DTU d2 <- dmTest(d2, coef = "groupKD", verbose = 1) design(d2) head(results(d2), 3) ## Plot p-value distribution plotPValues(d2) ## ----DRIMSeq_batch_plotProportions, out.width = "14cm", fig.width = 14----- ## Plot the top significant gene res2 <- results(d2) res2 <- res2[order(res2$pvalue, decreasing = FALSE), ] top_gene_id2 <- res2$gene_id[1] ggp <- plotProportions(d2, gene_id = top_gene_id2, group_variable = "group") ggp + facet_wrap(~ library_layout) ## ----SQTLgeuvadis, message=FALSE------------------------------------------- library(GeuvadisTranscriptExpr) geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges ## ----SQTLlibrary, message=FALSE-------------------------------------------- library(DRIMSeq) ## ----SQTLdmSQTLdata_create, message=FALSE---------------------------------- colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) d ## ----SQTLdmSQTLdata_plot--------------------------------------------------- plotData(d, plot_type = "features") plotData(d, plot_type = "snps") plotData(d, plot_type = "blocks") ## ----SQTLdmFilter---------------------------------------------------------- d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) ## ----SQTLdmPrecision------------------------------------------------------- ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d) plotPrecision(d) ## ----SQTLdmFit------------------------------------------------------------- d <- dmFit(d) ## ----SQTLdmTest------------------------------------------------------------ d <- dmTest(d) plotPValues(d) head(results(d)) ## ----SQTLplotProportions, out.width = "14cm", fig.width = 14--------------- res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] top_snp_id <- res$snp_id[1] plotProportions(d, gene_id = top_gene_id, snp_id = top_snp_id) plotProportions(d, gene_id = top_gene_id, snp_id = top_snp_id, plot_type = "boxplot2") ## ----sessionInfo----------------------------------------------------------- sessionInfo() DRIMSeq/inst/doc/DRIMSeq.Rnw0000755000175200017520000011250514136051631016425 0ustar00biocbuildbiocbuild%\VignetteIndexEntry{Differential transcript usage and transcript usage QTL analyses in RNA-seq with the DRIMSeq package} %\VignettePackage{DRIMSeq} %\VignetteEngine{knitr::knitr} \documentclass[10pt]{article} <>= BiocStyle::latex() @ \usepackage[utf8]{inputenc} \usepackage[sort]{cite} \usepackage{xstring} \bioctitle[Differential transcript usage and transcript usage QTL analyses in RNA-seq with the DRIMSeq package]{DRIMSeq: Dirichlet-multinomial framework for differential transcript usage and transcript usage QTL analyses in RNA-seq} \author{ Malgorzata Nowicka\thanks{\email{gosia.nowicka@uzh.ch}}, Mark D. Robinson\\ Institute for Molecular Life Sciences, University of Zurich, Switzerland\\ SIB Swiss Institute of Bioinformatics, University of Zurich, Switzerland } \begin{document} \maketitle \packageVersion{\Sexpr{BiocStyle::pkg_ver("DRIMSeq")}} \newpage \tableofcontents \newpage <>= library(knitr) opts_chunk$set(cache = FALSE, warning = FALSE, out.width = "7cm", fig.width = 7, out.height = "7cm", fig.height = 7) @ %------------------------------------------------------------------------------ % Introduction %------------------------------------------------------------------------------ \section{Main changes in the DRIMSeq package} For the full list of changes, type: <>= news(package = "DRIMSeq") @ Implementation of the regression framework in differential transcript usage analysis. It allows fitting more complicated than multiple group comparison experimental designs, for example, one can account for the batch effects or the fact that samples are paired or model continuous time course changes. It enables also testing of more complicated contrasts. Transcript-level analysis based on the beta-binomial model. In this case, each transcript ratio is modeled separately assuming it follows the beta-binomial distribution which is a one-dimensional version of the Dirichlet-multinomial distribution. Based on the fact that when $(Y_1,\ldots,Y_q) \sim DM(\pi_1,\ldots,\pi_q, \gamma_0)$ then $Y_j \sim BB(\pi_j,\gamma_0)$ \cite{Danaher1988}, we do not need to reestimate the beta-binomial parameters, only the likelihoods are recalculated. \Rpackage{DRIMSeq} returns gene-level and transcript-level p-values which can be used as input to the stage-wise testing procedure \cite{VandenBerge2017} as screening and confirmation p-values, respectively. Such approach provides increased power to identify transcripts which are actually differentially used in a gene detected as gene with DTU. Usage of term 'precision' instead of 'dispersion'. In the differential analysis based on the negative-binomial model, dispersion parameter is estimated. This dispersion parameter captures all sources of the inter-library variation between replicates present in the RNA-seq data. In the DM model, we do not directly estimate dispersion but a parameter called precision which is closely linked to dispersion via the formula: $dispersion = 1 / (1 + precision)$. In the previous version of \cite{Nowicka2016}, we used 'dispersion' as a name for the functions and variables calculating and storing, in fact, the precision estimates. Now, we use the term 'precision'. \section{Overview of the Dirichlet-multinomial model} For the statistical details about the Dirichlet-multinomial model, see the \Rpackage{DRIMSeq} paper \cite{Nowicka2016}. In the \Rpackage{DRIMSeq} package we implemented a Dirichlet-multinomial framework that can be used for modeling various multivariate count data with the interest in finding the instances where the ratios of observed features are different between the experimental conditions. Such a model can be applied, for example, in differential transcript usage (DTU) analysis or in the analysis that aim in detecting SNPs that are associated with differential transcript usage (tuQTL analysis). In both cases the multivariate features of a gene are transcripts. The implementation of Dirichlet-multinomial model in \Rpackage{DRIMSeq} package is customized for differential transcript usage and tuQTL analyses, but the data objects used in \Rpackage{DRIMSeq} can contain various types of counts. Therefore, other types of multivariate differential analyses can be performed such as differential methylation analysis or differential polyA usage from polyA-seq data. In short, the method consists of three statistical steps: First, we use the Cox-Reid adjusted profile likelihood to estimate the precision which is inverse proportional to dispersion, i.e., the variability of transcript ratios between samples (replicates) within conditions. Dispersion is needed in order to find the significant changes in transcript ratios between conditions which should be sufficiently stronger than the changes/variability within conditions. Second, we use maximum likelihood to estimate at the gene-level the regression coefficients in the Dirichlet-multinomial (DM) regression, the fitted transcript proportions in each sample and the full model likelihoods. For the analysis at the transcript-level we apply the beta-binomial (BB) regression to each transcript separately. In the differential transcript usage analysis, the full model is defined by the user with the design matrix. In the QTL analysis, full models are defined by the genotypes of SNPs associated with a given gene. Finally, we fit the null model DM and BB regression and use the likelihood ratio statistics to test for the differences in transcript proportions between the full and null models at the gene and transcript level. In the differential transcript usage analysis, the null model is again defined by the user. In the QTL analysis, null models correspond to regression with intercept only. \section{Important notes} Currently, transcript-level analysis based on the BB model are implemented only in the DTU analysis (\Rcode{bb\_model = TRUE}). When the model (full or null) of interest corresponds to multiple (or one) group fitting, then a shortcut algorithm called 'one way' (\Rcode{one\_way = TRUE}), which we adapted from the \Rfunction{glmFit} function in \Biocpkg{edgeR} \cite{McCarthy2012}, can be used. Choosing it is equivalent to running the original \Rpackage{DRIMSeq} implementation. In such a case, we use maximum likelihood to estimate the transcript proportions in each group separately and then the regression coefficients are calculated using matrix operations. Otherwise, the regression coefficients are directly estimated with the maximum likelihood approach. \section{Hints for DRIMSeq pipelines} In this vignette, we present how one could perform differential transcript usage analysis and tuQTL analysis with the \Rpackage{DRIMSeq} package. We use small data sets so that the whole pipelines can be run within few minutes in \R{} on a single core computer. In practice, the package is designed to take advantage of multicore computing for larger data sets. In the filtering function \Rfunction{dmFilter}, all the parameters that are influencing transcript count filtering are set to zero. This results in a very relaxed filtering, where transcripts with zero expression in all the samples and genes with only one transcript remained are removed. Functions \Rfunction{dmPrecision}, \Rfunction{dmFit} and \Rfunction{dmTest}, which perform the actual statistical analyses described above, have many other parameters available for tweaking, but they do have the default values assigned. Those values were chosen based on many real data analyses. Some of the steps are quite time consuming, especially the precision estimation, where proportions of each gene are refitted for different precision parameters. To speed up the calculations, we have parallelized many functions using \Biocpkg{BiocParallel}. Thus, if possible, we recommend to increase the number of workers in \Robject{BPPARAM}. In general, tuQTL analyses are more computationally intensive than differential transcript usage analysis because one needs to do the analysis for every SNP in the surrounding region of a gene. Additionally, a permutation scheme is used to compute the p-values. It is indeed feasible to perform tuQTL analysis for small chunks of genome, for example, per chromosome. %------------------------------------------------------------------------------ % Differential transcript usage analysis workflow %------------------------------------------------------------------------------ \section{Differential transcript usage analysis workflow} \subsection{Example data} To demonstrate the application of \Rpackage{DRIMSeq} in differential transcript usage analysis, we will use the \emph{pasilla} data set produced by Brooks et al. \cite{Brooks2011}. The aim of their study was to identify exons that are regulated by pasilla protein, the Drosophila melanogaster ortholog of mammalian NOVA1 and NOVA2 (well studied transcript usage factors). In their RNA-seq experiment, the libraries were prepared from 7 biologically independent samples: 4 control samples and 3 samples in which pasilla was knocked-down. The libraries were sequenced on Illumina Genome Analyzer II using single-end and paired-end sequencing and different read lengths. The RNA-seq data can be downloaded from the NCBI Gene Expression Omnibus (GEO) under the accession number GSE18508. In the examples below, we use a subset of \software{kallisto} \cite{Bray2016} counts available in \Biocexptpkg{PasillaTranscriptExpr} package, where you can find all the steps needed, for preprocessing the GEO data, to get a table with transcript counts. \subsection{Differential transcript usage analysis between two conditions} In this section, we present how to perform the DTU analysis between two conditions control and knock-down without accounting for the batch effect which is the library layout. Analysis where batch effects are included are presented in the next section. We start the analysis by creating a \Rclass{dmDSdata} object, which contains transcript counts and information about grouping samples into conditions. With each step of the pipeline, additional elements are added to this object. At the end of the analysis, the object contains results from all the steps, such as precision estimates, regression coefficients, fitted transcript ratios in each sample, likelihood ratio statistics, p-values, adjusted p-values at gene and transcript level. As new elements are added, the object also changes its name \Rclass{dmDSdata} $\rightarrow$ \Rclass{dmDSprecision} $\rightarrow$ \Rclass{dmDSfit} $\rightarrow$ \Rclass{dmDStest}, but each container inherits slots and methods available for the previous one. \subsubsection{Loading pasilla data into R} The transcript-level counts obtained from \software{kallisto} and metadata are saved as text files in the \Rcode{extdata} directory of the \Biocexptpkg{PasillaTranscriptExpr} package. <>= library(PasillaTranscriptExpr) data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) @ Load the \Rpackage{DRIMSeq} package. <>= library(DRIMSeq) @ To create a \Rcode{dmDSdata} object, saved as variable \Robject{d}, we need to prepare a data frame containing information about samples and we will call it \Robject{pasilla\_samples}. It has to have a variable called \Rcode{sample\_id} with unique sample names that are identical to column names in \Robject{pasilla\_counts} that correspond to samples. Additionally, it has to contain other variables that the user would like to use for the further regression analysis. Here, we are interested in the differential analysis between the control and knock-down condition. This information is stored in \Rcode{pasilla\_metadata\$condition}. The data frame with counts called \Robject{pasilla\_counts} is already formatted in the right way. It contains variables \Rcode{feature\_id} with unique transcript names and \Rcode{gene\_id} with unique gene IDs and columns with counts have the same names as \Rcode{sample\_id} in \Rcode{pasilla\_samples}. When printing variable \Robject{d}, you can see its class, size (number of genes and samples) and which accessor methods can be applied. For \Rcode{dmDSdata} object, there are two methods that return data frames with counts and samples. <>= pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) d head(counts(d), 3) head(samples(d), 3) @ You can also make a data summary plot, which is a histogram of the number of transcripts per gene. <>= plotData(d) @ To make the analysis runnable within this vignette, we want to keep only a small subset of genes, which is defined in the following file. <>= gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) %in% gene_id_subset, ] d @ \subsubsection{Filtering} \label{DS_filtering} Genes may have many transcripts that are lowly expressed or not expressed at all. You can remove them using the \Rfunction{dmFilter} function. Filtering of lowly expressed transcripts can be done at two levels: minimal \textit{expression} using \Robject{min\_samps\_feature\_expr} and \Robject{min\_feature\_expr} parameters or minimal \textit{proportion} with \Robject{min\_samps\_feature\_prop} and \Robject{min\_feature\_prop}. In the \emph{pasilla} experiment we use a filtering based only on the transcript absolute expression and parameters are adjusted according to the number of replicates per condition. Since we have 3 knock-down and 4 control samples, we set \Robject{min\_samps\_feature\_expr} equal to 3. In this way, we allow a situation where a transcript is expressed in one condition but not in another, which is a case of differential transcript usage. The level of transcript expression is controlled by \Robject{min\_feature\_expr}. We set it to the value of 10, which means that only the transcripts that have at least 10 estimated counts in at least 3 samples are kept for the downstream analysis. Filtering at the gene level ensures that the observed transcript ratios have some minimal reliability. Although, Dirichlet-multinomial model works on feature counts, and not on feature ratios, which means that it gives more confidence to the ratios based on 100 versus 500 reads than 1 versus 5, minimal filtering based on gene expression removes the genes with mostly zero counts and reduces the number of tests in multiple test correction. For the \emph{pasilla} data, we want that genes have at least 10 counts in all the samples: \Rcode{min\_samps\_gene\_expr = 7} and \Rcode{min\_gene\_expr = 10}. <>= # Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) @ \subsubsection{Precision estimation} \label{DS_precision_estimation} Ideally, we would like to get accurate precision estimates for every gene, which is problematic when analyzing small data sets because precision estimates become inaccurate when the sample size decreases, especially for lowly expressed genes. As an alternative, we could assume that all the genes have the same precision and based on all the data, we could calculate a common precision, but we expect this to be too strong of an assumption. Moderated precision is a trade-off between gene-wise and common precision. The moderated estimates originate from a weighted likelihood which is a combination of common and individual likelihoods. We recommend this approach when analyzing small sample size data sets. At this step, three values may be calculated: mean expression of genes, common precision and gene-wise precisions. In the default setting, all of them are computed and common precision is used as an initial value in the grid approach to estimate gene-wise precisions, which are shrunk toward the trended precision. The grid approach is adapted from the \Rfunction{estimateDisp} function in \Biocpkg{edgeR} \cite{McCarthy2012}. By default, to estimate the common precision, we use 10\% percent (\Rcode{prec\_subset = 0.1}) of randomly selected genes. That is due to the fact that common precision is used only as an initial value, and estimating it based on all the genes takes a substantial part of time. To ensure that the analysis are reproducible, the user should define a random seed \Rcode{set.seed()} before running the \Rcode{dmPrecision()} function. Thank to that, each time the same subset of genes is selected. To estimate precision parameters, the user has to define a design matrix with the full model of interest, which will be also used later in the proportion estimation. Here, the full model is defined by a formula $\sim group$ which indicates that samples come from two conditions. This step of our pipeline is the most time consuming. Thus, for real data analysis, consider using \Rcode{BPPARAM = BiocParallel::MulticoreParam()} with more than one worker. <>= ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) design_full @ <>= ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) d head(mean_expression(d), 3) common_precision(d) head(genewise_precision(d)) @ To inspect the behavior of precision estimates, you can plot them against the mean gene expression. Normally in the differential analysis based on RNA-seq data, such plot has dispersion parameter plotted on the y-axis. Here, the y-axis represents precision since in the Dirichlet-multinomial model this is the parameter that is directly estimated. It is important to keep in mind that the precision parameter is inverse proportional to dispersion: $dispersion = 1 / (1 + precision)$. In RNA-seq data, we can typically observe a trend where the dispersion decreases (precision increases) for genes with higher mean expression. <>= plotPrecision(d) @ All of the plotting functions from \Rpackage{DRIMSeq} package, return a \Rclass{ggplot} object which can be further modified using \CRANpkg{ggplot2} package. For example, the user can increase the size of points. <>= library(ggplot2) ggp <- plotPrecision(d) ggp + geom_point(size = 4) @ \subsubsection{Proportion estimation} In this step, we estimate the full model regression coefficients, fitted proportions and likelihoods. We use the same design matrix as in the precision estimation step. By default, \Rcode{one\_way = TRUE} which means that whenever the design corresponds to multiple group fitting, the 'one way' shortcut algorithm will be used, which in fact corresponds to the first implementation of \Rpackage{DRIMSeq}. Transcript proportions are estimated for each condition separately and then the regression coefficients are calculated using matrix operations. The 'one way' algorithm is adapted from the \Rfunction{glmFit} function in \Biocpkg{edgeR} \cite{McCarthy2012}. By setting \Rcode{verbose = 1}, we can see that the one way approach is used with the current design. When \Rcode{bb\_model = TRUE} (the default), additionally to the gene-level Dirichlet-multinomial estimates the transcript-level beta-binomial results will be computed. <>= d <- dmFit(d, design = design_full, verbose = 1) d ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") @ \subsubsection{Testing for differential transcript usage} \label{DS_testing} Calling the \Rfunction{dmTest} function results in two calculations. First, null model is fitted. This null model can be defined by the user via \Rcode{coef}, \Rcode{design} or \Rcode{contrast} parameters. Second, likelihood ratio statistics are used to test for the difference between the full and null model. Both steps are done at the gene and transcript level when \Rcode{bb\_model = TRUE}. In our example, we would like to test whether there are differences in transcript usage between control (CTL) and knock-down (KD). We can achieve that by using the \Rcode{coef} parameter which should indicate which columns of the full design should be removed to get the null design. We define it equal to \Rcode{"groupKD"}. Then the null design has only an intercept column which means that all the samples are treated as if they came from one condition. Note that \Rcode{one\_way = TRUE} and the one way approach is used. <>= d <- dmTest(d, coef = "groupKD", verbose = 1) design(d) head(results(d), 3) @ The same can be achieved by directly defining the null design matrix with the \Rcode{design} parameter. <>= design_null <- model.matrix(~ 1, data = samples(d)) design_null d <- dmTest(d, design = design_null) head(results(d), 3) @ Or by using the \Rcode{contrast} parameter. The null design is calculated using the approach from the \Rfunction{glmLRT} function in \Biocpkg{edgeR} \cite{McCarthy2012}. <>= contrast <- c(0, 1) d <- dmTest(d, contrast = contrast) design(d) head(results(d), 3) @ To obtain the results of likelihood ratio tests, you have to call the function \Rfunction{results}, which returns a data frame with likelihood ratio statistics, degrees of freedom, p-values and Benjamini and Hochberg (BH) adjusted p-values for each gene by default and for each transcript when \Rcode{level = "feature"}. <>= head(results(d, level = "feature"), 3) @ You can plot a histogram of gene-level and transcript-level p-values. <>= plotPValues(d) plotPValues(d, level = "feature") @ For genes of interest, you can make plots (bar plots, line plots, box plots, ribbon plots) of observed and estimated with Dirichlet-multinomial model transcript ratios. You have to define the \Rcode{group\_variable} parameter which should indicate a variable from \Rcode{samples(d)}. Currently, plots can be done only for categorical variables. We choose the \Rcode{"group"} column since it corresponds to the comparison of our interest. Estimated proportions are marked with diamond shapes. As an example, we plot the top significant gene. <>= res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") @ \subsubsection{Two-stage test} \Rpackage{DRIMSeq} returns gene and transcript level p-values which can be used as an input to the stage-wise analysis \cite{VandenBerge2017} implemented in the \Rcode{stageR} package, currently available on github \url{https://github.com/statOmics/stageR}. As pointed by the authors of \Rcode{stageR}, interpreting both gene-level and transcript-level adjusted p-values does not provide appropriate FDR control and should be avoided. However, applying a stage-wise testing provides a useful biological interpretation of these results and improved statistical performance. In short, the procedure consists of a screening stage and a confirmation stage. In the screening stage, gene-level BH-adjusted p-values are screened to detect genes for which the hypothesis of interest is significantly rejected. Only those genes are further considered in the confirmation stage, where for each gene separately, transcript-level p-values are adjusted to control the FWER and BH-adjusted significance level of the screening stage. It is important to note that transcript-level stage-wise adjusted p-values for genes that do not pass the screening stage are set to \Rcode{NA}. Also the stage-wise adjusted p-values can not be compared to significance level other than chosen in the stage-wise analysis. If that is of interest, one has to rerun this analysis with the new significance level. The following code chunk is not evaluated by this vignette and to run it, user has to make sure that the \Rcode{stageR} package is installed. It shows how one can use the \Rpackage{DRIMSeq} output in the stage-wise analysis. <>= library(stageR) ## Assign gene-level pvalues to the screening stage pScreen <- results(d)$pvalue names(pScreen) <- results(d)$gene_id ## Assign transcript-level pvalues to the confirmation stage pConfirmation <- matrix(results(d, level = "feature")$pvalue, ncol = 1) rownames(pConfirmation) <- results(d, level = "feature")$feature_id ## Create the gene-transcript mapping tx2gene <- results(d, level = "feature")[, c("feature_id", "gene_id")] ## Create the stageRTx object and perform the stage-wise analysis stageRObj <- stageRTx(pScreen = pScreen, pConfirmation = pConfirmation, pScreenAdjusted = FALSE, tx2gene = tx2gene) stageRObj <- stageWiseAdjustment(object = stageRObj, method = "dtu", alpha = 0.05) getSignificantGenes(stageRObj) getSignificantTx(stageRObj) padj <- getAdjustedPValues(stageRObj, order = TRUE, onlySignificantGenes = FALSE) head(padj) @ \subsection{Differential transcript usage analysis between two conditions with accounting for the batch effects} The regression framework implemented in \Rpackage{DRIMSeq} allows to account for the batch effects. Here, this would be the library layout stored in \Rcode{pasilla\_metadata\$LibraryLayout}. The steps of this analysis are the same as described above. The only difference is that we have to include the library layout variable in the \Rcode{sample} slot in the \Rcode{dmDSdata} object and define a full model that contains the batch effect. <>= pasilla_samples2 <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition, library_layout = pasilla_metadata$LibraryLayout) d2 <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples2) ## Subsetting to a vignette runnable size d2 <- d2[names(d2) %in% gene_id_subset, ] ## Filtering d2 <- dmFilter(d2, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) ## Create the design matrix design_full2 <- model.matrix(~ group + library_layout, data = samples(d2)) design_full2 ## To make the analysis reproducible set.seed(123) ## Calculate precision d2 <- dmPrecision(d2, design = design_full2) common_precision(d2) head(genewise_precision(d2)) plotPrecision(d2) ## Fit proportions d2 <- dmFit(d2, design = design_full2, verbose = 1) ## Test for DTU d2 <- dmTest(d2, coef = "groupKD", verbose = 1) design(d2) head(results(d2), 3) ## Plot p-value distribution plotPValues(d2) @ <>= ## Plot the top significant gene res2 <- results(d2) res2 <- res2[order(res2$pvalue, decreasing = FALSE), ] top_gene_id2 <- res2$gene_id[1] ggp <- plotProportions(d2, gene_id = top_gene_id2, group_variable = "group") ggp + facet_wrap(~ library_layout) @ %------------------------------------------------------------------------------ % tuQTL analysis workflow %------------------------------------------------------------------------------ \section{tuQTL analysis workflow} In the transcript usage QTL analysis, we want to identify genetic variants (here, bi-allelic SNPs) that are associated with changes in transcript usage. Such SNPs are then called transcript usage quantitative trait locies (tuQTLs). Ideally, we would like to test associations of every SNP with every gene. However, such an approach would be very costly computationally and in terms of multiple testing correction. Under the assumption that SNPs that directly affect transcript usage are likely to be placed in the close surrounding of genes, we test only the SNPs that are located within the gene body and within some range upstream and downstream of the gene. \subsection{Example data} To demonstrate the tuQTL analysis with the \Rpackage{DRIMSeq} package, we use data from the GEUVADIS project \cite{Lappalainen2013}, where 462 RNA-Seq samples from lymphoblastoid cell lines were obtained. The genome sequencing data of the same individuals is provided by the 1000 Genomes Project. The samples in this project come from five populations: CEPH (CEU), Finns (FIN), British (GBR), Toscani (TSI) and Yoruba (YRI). We use transcript quantification (expected counts from FluxCapacitor) and genotypes available on the GEUVADIS project website \url{http://www.ebi.ac.uk/Tools/geuvadis-das/}, and the Gencode v12 gene annotation is available at \url{http://www.gencodegenes.org/releases/12.html}. In order to make this vignette runnable, we perform the analysis on subsets of bi-allelic SNPs and transcript expected counts for CEPH population (91 individuals) that correspond to 50 randomly selected genes from chromosome 19. The full dataset can be accessed from \Biocexptpkg{GeuvadisTranscriptExpr} package along with the description of preprocessing steps. \subsection{tuQTL analysis with the DRIMSeq package} Assuming you have gene annotation, feature counts and bi-allelic genotypes that are expressed in terms of the number of alleles different from the reference, the \Rpackage{DRIMSeq} workflow for tuQTL analysis is analogous to the one for differential transcript usage. First, we have to create a \Rclass{dmSQTLdata} object, which contains feature counts, sample information and genotypes. Similarly as in the differential transcript usage pipeline, results from every step are added to this object and at the end of the analysis, it contains precision estimates, proportions estimates, likelihood ratio statistics, p-values, adjusted p-values. As new elements are added, the object also changes its name \Rclass{dmSQTLdata} $\rightarrow$ \Rclass{dmSQTLprecision} $\rightarrow$ \Rclass{dmSQTLfit} $\rightarrow$ \Rclass{dmSQTLtest}. For each object, slots and methods are inherited from the previous one. \subsubsection{Loading GEUVADIS data into R} We use the subsets of data defined in the \Biocexptpkg{GeuvadisTranscriptExpr} package. <>= library(GeuvadisTranscriptExpr) geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges @ Load the \Rpackage{DRIMSeq} package. <>= library(DRIMSeq) @ In the tuQTL analysis, an initial data object \Robject{d} is of \Robject{dmSQTLdata} class and, additionally to feature counts and sample information, it contains genotypes of SNPs that are in some surrounding of genes. This surrounding is defined with the parameter \Rcode{window}. In order to find out which SNPs should be tested with which genes, the \Rfunction{dmSQTLdata} functions requires as an input the location of genes (\Rcode{gene\_ranges}) and SNPs (\Rcode{snp\_ranges}) stored as \Rclass{GRanges} objects. Variables with transcript IDs and gene IDs in the \Robject{counts} data frame must have names \Rcode{feature\_id} and \Rcode{gene\_id}, respectively. In the \Robject{genotypes} data frame, the variable with SNP IDs must have name \Rcode{snp\_id}. <>= colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) d @ In our tuQTL analysis, we do not repeat tests for the SNPs that define the same grouping of samples (genotype). We identify SNPs with identical genotypes across the samples and assign them to blocks. Estimation and testing are done at the block level, but the returned results are extended to a SNP level by repeating the block statistics for each SNP that belongs to a given block. The data summary plot \Rfunction{plotData} produces three histograms: the number of features per gene, the number of SNPs per gene and the number of blocks per gene. <>= plotData(d, plot_type = "features") plotData(d, plot_type = "snps") plotData(d, plot_type = "blocks") @ \subsubsection{Filtering} The filtering step eliminates genes and features with low expression, as in the differential transcript usage analysis (see section \ref{DS_filtering}). Additionally, it filters out the SNPs/blocks that do not define at least two genotypes where each of them is present in at least \Robject{minor\_allele\_freq} individuals. Usually, \Robject{minor\_allele\_freq} is equal to roughly 5\% of the total sample size. Ideally, we would like that genes were expressed at some minimal level in all samples because this would lead to better estimates of feature ratios. However, for some genes, missing values may be present in the counts data, or genes may be lowly expressed in some samples. Setting up \Robject{min\_samps\_gene\_expr} to 91 may exclude too many genes from the analysis. We can be slightly less stringent by taking, for example, \Rcode{min\_samps\_gene\_expr = 70}. <>= d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) @ \subsubsection{Precision estimation} In the DTU analysis (section \ref{DS_precision_estimation}), the full model used in precision estimation has to be defined by the user. Here, full models are defined by genotypes. For a given SNP, genotype can have numeric values of 0, 1, and 2. When \Rcode{one\_way = TRUE}, multiple group fitting is performed. When \Rcode{one\_way = FALSE}, a regression framework is used with the design matrix defined by a formula $\sim group$ where $group$ is a continuous (not categorical) variable with genotype values 0, 1, and 2. For the tuQTL analysis, it has an additional parameter called \Rcode{speed}. If \Rcode{speed = FALSE}, gene-wise precisions are calculated for each gene-block. This calculation may take a long time, since there can be hundreds of SNPs/blocks per gene. If \Rcode{speed} is set to \Rcode{TRUE}, there will be only one precision calculated per gene (assuming a null model, i.e., model with intercept only), and it will be assigned to all the blocks matched to this gene. In the default setting, \Rcode{speed = TRUE} and common precision is used as an initial value in the grid approach to estimate gene-wise precisions with NO moderation, since the sample size is quite large. Again, this step of the pipeline is one of the most time consuming. Thus consider using \Rcode{BPPARAM = BiocParallel::MulticoreParam()} with more than one worker when performing real data analysis. <>= ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d) plotPrecision(d) @ \subsubsection{Proportion estimation} Dirichlet-multinomial full model proportions/coefficients and likelihoods are estimated for each gene-block pair. Currently, no transcript-level analysis are implemented in the tuQTL workflow. <>= d <- dmFit(d) @ \subsubsection{Testing for tuQTLs} \Rfunction{dmTest} function estimates gene-level null model proportions/coefficients and likelihoods and performs the likelihood ratio test. The null models equal to models with intercept only. In contrast to the DTU analysis, there are some additional challenges that have to handled in the tuQTL analysis. They include a large number of tests per gene with highly variable allele frequencies (models) and linkage disequilibrium. As in other sQTL studies, we apply a permutation approach to empirically assess the null distribution of associations and use it for the adjustment of nominal p-values. There are two permutation schemes available. When \Rcode{permutation\_mode} equals to \Rcode{"all\_genes"}, the null p-value distribution is calculated from all the genes. When \Rcode{permutation\_mode = "per\_gene"}, null distribution of p-values is calculated for each gene separately based on permutations of this individual gene. The latter approach may take a lot of computational time. We suggest using the first option, which is also the default one. The function \Rfunction{results} returns a data frame with likelihood ratio statistics, degrees of freedom, p-values and Benjamini and Hochberg adjusted p-values for each gene-block/SNP pair. <>= d <- dmTest(d) plotPValues(d) head(results(d)) @ You can plot the observed transcript ratios for the tuQTLs of interest. Plotting the fitted values is not possible as we do not return this estimates due to their size. When the sample size is large, we recommend using box plots as a \Rcode{plot\_type}. We plot a tuQTL with the lowest p-value. <>= res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] top_snp_id <- res$snp_id[1] plotProportions(d, gene_id = top_gene_id, snp_id = top_snp_id) plotProportions(d, gene_id = top_gene_id, snp_id = top_snp_id, plot_type = "boxplot2") @ %-------------------------------------------------- % Session information %-------------------------------------------------- \section{Session information} <>= sessionInfo() @ %-------------------------------------------------- % References %-------------------------------------------------- \bibliography{References} \end{document} DRIMSeq/inst/doc/DRIMSeq.pdf0000644000175200017520000157426114136070551016443 0ustar00biocbuildbiocbuild%PDF-1.5 %ÐÔÅØ 98 0 obj << /Length 600 /Filter /FlateDecode >> stream xÚ¥TMsÓ0½÷Wè(3µ¢[²9A§”)ÓH̆ƒêÚ‰&ŽLm™Lû뻊œ’˜aà´Öj÷íÛÝ'S´@½?£;Khž0Ž(Iiš)°JR¥P׸šýoöEq6¹JrÄ)‘’§¨¨QJI–q$sV¡â}׳ëé¼zxÅiÂñ¥éL1Š—MåâuÄgl»6º‰b¡®;½®"–âMÄ)n»Uô½ø> stream xÚí\ËvÛ6Ýû+¸¤Dñ¹LjÇuOÒ‡­f“vÁHŒ‰TE8Nþ¾àK­øÄÇ-V™%HÀ½w†ƒq0ppyöz|öÓž J$•ÁxŒâ˜ŠSD ÆÓàCxnf³Á¡^ëÌšt1ЍŠC»N³b²6+[¿+Ò²Ñ|•Mësi6}zã?ÇoÛ«\D„_ ]ÔgLV¯{úßú˽±·ÍÝo›[œ__½»ií«t2¢8üÔééŸñ¯g¸ýÞá„`$°ˆ•;*‰• ÖÎüˆéúÒM PQnº/g‘›D‘ˆzò~Î3릭èö|@O%Bв'·FîCÄÜ!NêÞHÝͳn|ˆHì¦ý]ÚN÷ä6Íæ×à;“=×ü„‡+R8và”ÕÔR–¸‰Mœ©,úæjºa(JÁøbFw’ÊBæcá½#jQŽ©ÑB=Pã÷Ï#*œŽ"†ÃÏF—¿¯ ÏÒøfî3¹]h-Kº[X“åˆ.ó©^ôÈ)ObàËé»YÑ Ø¸}æÙWËUîðÊqhÓ¬qÒYnuÑ: á+'ÁøD%âÃQ¢†½»–{С_L+Wò39'[ŠÒ~°iVza²^Å)(ÆÔ Œ'ÅÚÖ»´h[¥Ø~Š  z«'ÿ:ÞyüŸëíÃþ×Â4œ¿//ÈëÖŸþƘåe"à¾ÇY Ä¥žÅâ¸(Þ¦¨v•¯{º# )Ö$©:0÷A1åáÅ—t¹Z4М¦6íÑÃ`†¤€øŒ $ÇR’–ƒ‘ˆðVH¨!ñå?j[ùD­Ûôkí"›mžM5yÖc$Ì0F yY:>RêTKR†J„"*¶à@çØc¾ÍÓ©Éæmî¼0‹Eºãtš„»m–ùÚãêº_+òJÛ/p©®îÁ#Ù‡z γ°ºOÇ¿¼€%0þ(Ú ¥ ̃6ü±ÖS¸h¨öšº°f™–Ñ‘_™P.þ\ñÙ̋ϼxË<î…yùfû°wþ™ºÀø,þ!UHð \Ÿð@ÀñˆP\1®}¨ììžMŸ“ðìÌtP`–ÞÀ\ç¹¢Ân2cÖáÛ/*)WÆ’Z&EÎ8ÂD>ȳ^2ä“oû$Žq›!/Ûl3䥡“!¯nÑfÈË/;òªuU4î~|°Wµ;^,Lò»ìº)ìü˜ÚISx®›!LlŸ¥(œ ¦(l‚<´ò T‘ŠRŒw*J¤‡Š{×ù?ÈKDˆpŸ1ðŒƒ: -uæ Ù-ΑPœF0‚”\#½Tç<\<õ?¥½þÍ‘&ˆÄÄç4aîðœDT·²HöQYtyñ×ûQŒÃWçW7/V^$ $ÕþWTƒÉ K¨#‡$ñ ÄÊ„ÀÔ; õ NŒ?“ÁêÉ—©ªò"…_ 3O£{[¡Òŧ’vvB•‡Ð]l£U“m +Bïns¯ôÀi„®ñ¥ƒ¯Äé¼F“Q‚(.ßÓ%(Ší¼‚®¹äb|öIH endstream endobj 167 0 obj << /Length 3421 /Filter /FlateDecode >> stream xÚ½ZKsÜ6¾ëW°r1Uë¡ ðíTÉjr*önlå°åø@q ġí¯ß~¯¡c+¶s  4Ý_7Æwnßùñì‡Ë³'ÏÂÌɼ,Ö±syíD¾—¦ÚIBíi8—[ç{Q^_Ÿ+ß5©»2¯Î7:IÝ®Éë¶hÊcÇõ¾Í±ÓÍù»2-¯·ŸÞù—ËŸí(˜CEî}kZ¦”5_½ü~Óš÷\¹+»pß ‹‹WÏ_¼¶íǼ8×¾ûûl¦·—?ù²ûáëùY¨´ã{‘¥ |“ØO§æ4½ú%ŽJ@LQˆ’ó /Ê"šú‚S9o6*S¡û"·‚(vy}³”ÎGÄp³Øý_ZÊ¿.ÏÞŸ)`à;Ê*KœÆ^†N±?{óÖw¶ÐöŒ ²Ô¹£ž{'Ô‘§2àäTÎë³_†Eêh¢€Yà…>ðŒS/“,ŸëÔ=àOs¾ ‚w{ÝW—ª²í¸ñpÍ‘Ñc®u8üþ2I]ó”%áéH9ÎìC»?%¿ByL°>ùPïSòƒ{¯J®`æ“T‘n%¨2/J"§1Î5Êñ‹z؆¿fï4I¡ü*Ðê»$¾ ‰|'ñ²ôb¢!xÛb1Qµ¹kÿÒ™baú;ôþÒtó#ÿkÏ—u¼¨_mšMìk÷»Ï˜$ÖÉé$#qœä1Eßü ‡£þ†Ký Þbãü\å(Ó¬¹Ï÷ÇÊìÁ±æ]y@Cž¦dÁtšˆABcnÓ¶C‡ë&ß›»Ñ*þÎäRš·åo~LÜuºðÀÀ<ðpG{ß–­w¾ uæ>ï„\UÀ=qùfẕ‚K(þ f»®¬Á±Z»{^še ¦÷°?Wî±*‹¼3[¦u;pÄnÍ•}_u%lœß4‡þÈEỷUÙj¦™?Äl7% ªbòÖ´åMMö]G. —–ÛØA9JöñÚÚ5íÖ™“Ä´›Å¡¯;¦^[Wƒ9ƒÀ½Ê»bǽ ‰·èZnYí~%áÆ¥ÒÒªd`ne†•c^6(«%G,øqØm%k>À©Öý¡ŸKÌ[ë@Dâþ}Óš™+Ä#:`¤š:¿¢µ`%¯ÚƒxJÓʹNœéä|‰÷~r¸Ð­@é× cm³ØuÍDÍ/Ïaé iká¦2·¸¥0Öƒrí {AY\Sî–‰¨ ø%ù†±r¯X%º|sUÖ‡=é9ÒI\)Š v›¢:#íEÞ‚^l Dã™Róx?V4¦ÁÛ Så—TO&²ËbkD{A4Õ=ÈÛ¶ß“@±GÙ1õú0^/"ðÎÒì è[@8MyÕ³@^w»’–?YU¾¦ ï›-Þ´ Ä´àÖ4lP‰¼(\” ð®L·¡«:¬š¦ë'IæþÝr«å8pâ‹ÀÌóUáÞíLô'ÏÒ‰Ô±çÐU¬ ûÞ'Ï”šô 1D¶Ï¹CâÄ^–)E3^’†0™fá–/¸„^gΤӷ |qâ>ÅOÌŸÄ~¾e¢L¦üÉlô]³éÞŸî f›Îeð '½R/öÓq÷ÁÚî•öàÈm§ R›§bÔIüIÂ|jM˜q’}aŽó-噪tMžËWæûÍWÑé<§ñŒ£¿zBó-Œg4ó䩌2ë%ž-Nk/Õj¡¢³]žêè»U}È5_Ó'èÄç“Âï©NÄžþ׉ðT'«_*Å»Õ#R >ä¢O8¤ä¡gôFâ_‹Á!=Þ>fã{‡vÍ]VÝD¤ÝúÐIÁi„¦î@Ö½¸—ÂiÎ=ŒA·»¿Æ2±ö3^wÐÁ:š½éLc=&.(A#LÎF ›âãß±¿©Ê;.q_-7P+ÈÎyUôºxåÎt¢Ó0ì³Í8œÀÆö\ì¶ë›¡L{cÀ?‘%D€$JaatË0 ëãæ6¯z#ãÅ b‘ö©1µo°Ë[n.ëcßÉ ùî¤wÛ2ÞÜ•­YsV:‚€Ü=’ÔX’Á€ždMŸ©kúDט-n¿-".ЙzX ‰ œ7Á%¨ µŠÌPEB<ëöHÀply‹`ºs•º¯{‚Èô([Dœ´‚,¤õ¶ÜR¤ $[4ÆÂÌ=Š®á1‘þ5LG©S÷-)×÷BN[¸Y„ʼn†B¥èzˆOdØ<Þ±Ô~XDY[+ŠÚǨv 7©H°ª´Û9ሥ‹Ë_WQî¯T…¡D…hjÏ•G,/S”½qϲn;“oçÃàÃ;-ÇÔðdtL‰fdZL …e܇´ ¶¶W¨"—@°3X9ÜÚÜä¨Ã—y|1ôb@8]#ƒ…y¢¸l"CGʉ¶ –v/w¶ñS™ùq³z?áRxcË…B¡ÂRÁu ò¦›ª¼â9è÷ž›n%bs6,°¸N4ЦæÎ‘˜H&’³n Ç•±„çñ83¥³m óžùoó.÷Ö6F§í‹ ýĽxÁ„1@Ä«­ãÑA'rGЉÝ Ê,:º#@žøjkm¤-¡t¹êedÎõÅY` ¸ŠŠt ›§¾ŽöÙZg+D»Euh)\BbUÖì©¶ÜHö9‹N‡ÄÛ2—^d½"Á;D-ùÓU<†8cdÈÔP íÚõÎaFä{á§¾ƒ)ÀݯÁ^T‘ÎÆŽ+x%KÕp)˜5ݬ-Ryi4 ÿ#¯o"Ògå¡ßðÿÍð=\º8P¨Q„G‚0¨ZàV3åÛ½-1ãGœM"Gh&ƒßÏôwÁ*¶¼Ï!Jfâ“É;â—Zç{9¤t°"7(s¯ûºÀ›mG‘Å ÚkOé‘¶ØHÒ$à(´'¡à®+÷æ1»¼øôZnË>Gð F¸¸/œ—‘KÉùšÐ}ÉîS˜Y`Ͼ5‹¸“{.-} ;ŽÏZ¾{Á)êƒ%^¨Äsè¯ðøõïÛs$dþ}¸÷µîø‰‹Lú쬄n Œ¤0ðpšÆÀ>û¦Ô¾Î‹ø,OÒ/ú"èî°^yÓih}Jˆèµ+AŠ\ò…€jò²j¹5g\|è»Yº2üP¾gH@Z¯3˜Â˜qôih ³Ì‹ÓG$£!¾<æÖº3ï/nO<1v0-j.ã¶`â[uüÁ y4ÁG7”f[žræ.Ê¥Íø“1Z+h^;0"·®¤ü‘L95âB¡O8 }h» ÄÉLO¬—„CqLf‘3æPÏ™ÍZ<â2ýì´²î&¹s,"|ᮂ–cë›ã„‘Æ–ôTKîñJ½•i; &hœ×ź¾Û 2,  ¿q® Xš.°éÉáªÙû Ô…Æ&g¨ôp¦°ïŸ¹ÆÇÊQ Ç9ĉĈ÷†Þír®®Þñ‹v ª‚ué «Ž"ýI.0¥ƒ×]yê*\`Î&Ý–$Yf ÌþÞ"4:ï$aóŒ`2J"T’ƈˆÑP)é/áª$F> óINø¬ÿ$9=Œ$D»fõ8E—NSti:$9løFòzK6»S>fù¸ÍþÉŽîî+«íi2µ<éäßCéÊŠ‡ùÕý÷\·ê“¢ç=ì×®›¤¶`ÿ'RH³è}’z.ؾÝñJºÇ àŽë—›gßXkX}'ϳü‹ýcl¨1AzL0ÇöélvÁ7ÏʦÅu¢†øAG1Ç:’w?¤ü“–÷Çæ•)·Ü”oßÁ¥—éÈ&5è°+K™ådÈ,'î° €á;ö3 DÝÉàEøƒm’ ÀV<=$•5ÆœfýhA“> stream xÚÍËrÛFò®¯àm¡*Á¼ð8ìÁŽã]o­³Ž¬TNj G$Ê@ dåë·{º Xñ:”œ 1/`ú5=ýb´X/¢Å?Î^\ž}÷Jg‹,Ìb/.¯& ÓT.-C)Ôârµx¼,¯¯ÏEؽ­»2ßž/e’Ý>¯Ûb_î:êÚ­Ï—¸”Æòzõ勺ü· ö&¸kmK#eMÏ‹Ÿ/[û‘:·e·á¯oø//^¿yççwyq.£àÃh§ß.ÿu1öß½’æu@ÙÈÅRÀÜæïlÑÔ«gçK¥`¿s™"¬J%?7ªüSYÎEPQ[~8—I`·å¦A0üMƒÍv =mÛ•UÞñ7òŽg7<°¶µ…O.æ`‹­»,ÙÛõÞ¶mÙÔÔ/hûk¤â¢>µˆ* ¹"Ì ããé8¬Ü—Åfk»euØveÝT=Lôò ü ê;>í²á#°§î:;° q{‡$Ù7;&v:„\Ž¿Y—ÅW æj›W»­CÉ•Þ:°q}Øn±| ²¯,÷CÒž!iÀómx¾L¢8xuîÆàg?ú¦pbx×–- #“F["½ÜÚÚ.B!I^‘ïvÛ»É[WĦ._Ž‹ ±«žZÇ/ˆZÈÏq¥ ÇmŽ$s#GÇ gZ»‚æŽâ nMª@<š¿®i /¯J`¤¹›3‡àè®?â—D³¨Æ†y£â˜x“o°´Å+[]£áðrãŽÚü•OÜžVÓ¹M®l[®kš†sµ/?’FK‡äÑJCJGhgPa•:¹¥Ü‰Š;…z8Ìõ€C›OªÆÃÜtn‚äß¶4Þ\ÓÂw?¾õŸn[Ú­(óΓ±…rX—7¶æ&艰‡? 3ÅûU Ø·:Jå•I:¯Ô$(3`1a C#&AÿåZá¼xAÏ‘ ‚~Žš×~6Ÿ=‡ü­5ÛÚ ‹Y æ4(jP¡Ôºö‡WyņA˜ Gp¾DÔ}¥fTJ Š_ôgÇé|£N®';²Ìø[u?4#\Ó ¯Ï én€¥Š  Õlrz$]+C’ë ˜d À;ý‰æÏ}Ãðqæ­†ŒÊÄ©ÆûmËïÄ^rg_^ç@àTŽÎˆÌÒþŒ`›n,s‡ÛáA'v4GfA–ŽÀƒ ‰¸81".ÄBΉZÍ›£ôàóXt±Ï¦D†7QçHVX Ð 6MÇJáÈ’ˆÂ(ݸˆB™4gGI²ØÃôg¦.Ðþ0ÉŽ-˜ %[ * µàA÷ùSû-Þ/E&tðºÚ5xÙÁµ”×|EƒŽ²í púáòì㙀D áI#³0J²EQ½ÿ-Z¬`èª,]ܺ•Ø^&|i±]¼;û©Â¨#+-S¡Žà›¾I"Ò÷‡=Êx¯ð”ˆg®g%PGá!1BÓʉ.úUÞ:m M§Ëü¥ˆNÙ‰‰Vâè€É •Ê)ÒÛ0æÅ--§ß|yùóC÷'év¼ü‰¡4jút|˜Ÿº@î‡@ˆ¦O÷ÖüÔ”{BÉ0ŠåBg1¬ÐÈ>œPi˜¤ñY Â`×È®¯‚Ñ1×D ¸¸ °˜‹[…`Ë.³„¢+G­,4‰\ˆ0Møhü× kÍòh¼jKDº?O„$ ã) ô©(ðuCÇè4<˜T?‡`G•ÆcýýdÔN£P$ò¯Kï@‰²)|" c-‰à°efÒ1Á//~þá!W^D«Ñƒ 3ô èê±­øËÆŽÔTÙI§‹Ø¼AÍæí-hã%LŠ›¹f}jpOô òøœ!2\È-ïÙð–è~¢»×oÈo±2µÃ.ë}sØùuèy–õÚ+}ÄeNµÂ´ÔA»aç³`žÃe»&ŒÀ¨h]ƳÓã0ý·ÆYb0êLh§÷ïþFsß^GK£ÂX‚tÄIéuô#~Ü.…Ïê>¯3o‘ +t¨@P¿@Cßæw§Ò2MB¶Å„!3CœÀ÷ˆZf2±óèdZ¢æ3â/Ko‰P§÷ÄcjhÜ2Q“CñÿkhTa2n7%FsP½ô>;(Ÿ|•ïȶ„Îõ¾©h »GdÓàC1B! À2"Ûxê4 Hë$BÝ£·SsO ¾ÆûôÆ-U¬Æô^o«S‰¸ŽA„ÐyB”`ËDŠ1J¯Êî! Zª8c9›F®ê¢#¿Ö$yä_ížjqÁ9ͼÄÚÕÚ^<ž7ü3^þþOÀ¯ëÑN0ðÆ 75Eb¤éÃ4„ù\:Œ(ˆ,øÞœZ0˜.½‚ÎöíÇCy“o­ó† Åéq~¨ëþ%ŠHÁ.×dCÀ&„’ 7àÈxÔ}NÂ-œp~mÔ8ÌÎda°¦2ÁÁÚÌÅËÁrá ¹Æ = pa$F‰^kàr†ÃyJST4úù.uQeX5ä(´ãáðQühÆÐÚ9Kªa+oH‹y‘XãÈÍB2ç ×ÚùÕ«vcŽÁ+jwdªFÞT…¡Q2’sy7N1pË‹òmqØrŒ5Âh%2yŠ%âi0RÖ…*kL¤iü Ùß–D}ÁB¢SáìÝãx= MaƒNõáì¬Ê½E µsÙƒt`ÅŠ ¡hN|&zØs ³WÎH)ÌQË€%OÓÒÓúgéX¡¬ësÜÚÏeË¡~´@—Šcxª“º”NÃ8cʹ /Æí6.L­›r]Û®Cñm2˜ 0EŒµ­Ój8°i(‚í:äÖ@£hÛ•ƒ$œCêNóB€ã(2ô}šGa,×[͆ñ.¬ ×ìqš z,ÛI/Ûå*¢ üˆì•«6àøe»¼øâ™£à¯!NT`£­r—B„æ*ïr´Ã…™|v—døäMÃiÊ¥0`ØËÉ• RGt%у;) TSãŠrBÔë†H…’Û×ö–UY:ÿºÙ§ÄIãPE±Çúb†,˜BAö®}-§ªÁ-ÃÂ1ô¾Wí`s ÒÇ™äÜaÌy—´íÊ…Ps’šÈ‘% »“ûyAêÇG;)G9/ÍirÐ÷ù‡>çªju“íè_¥ü™¦ÈÁ-N´îâÆî!‚å[Rµk—Mij±…ÌgÓäpê´0>Sj\Øa Ôp;à@ou}S[\€o¦ÀG0‹Lo¸‚KÇnÅM,aG0ŽAËQÂçd–¸Œ èSs¡G´Äeƒñ¦Ç½*OO–|I­ž%ØRgjŒHïƒî)ÅrXM<£#)ÈヰãÒ—û€O¶~Þ)IhõfvÊŽ9Ø>;ñýƒWRݱ ÑàŒél¬BFçk †l øÎFvq!BCÏßí¾Á²€8.éþLÐ~lA´´‚2Ä”i‡ÇËÞQgo·ù'§  s^¼©†K€2­¼e=ò—9‹"s7¢ýäïk_ÔÃö2fþ}5(®ñuõª/5ðc¾l@ùDVÔüöèöVH„*/û*†üX•ÂTsƒ®ÔŒ^t¥3¬ùÚo¬úTFQºF¸œÕ¨>ØœAú\÷ÉTŸÐIhîãóˆjwLÁv!ôvoO†Q Ò®ž”E± E:aQQž.5(B#îá3i<B°cb&,j{»ãK"Ͼµ‰Þ \{O(°c ¾è#S¥¡H’§<¨¸¥ÞŽ0úƒ`! AÜ{Mì”};1 k¤Ê¦T“Y(…~$ªÁ–˜˜ÈÁ%¦)ÿ Œ)â#CÈ`‘'Åèuªf\få(8·Ewpµ”0ضùò|)7k*Ã`Y:àÁ=Í‘M6>rêµìllò¶;ª¼væŠ ŒKQÓÇÔ*KšûÆM^nó+—o…%G5t`½q–ã~ðŽ ®\Â4qÖÛD«†F<8‡a¯ù2°ë,-ªV¾É·²T¬zt®Fk šf¯­VyxöF‹ÍÖèåø½‚ë÷Þní¶üÝø\¨ÁSç"Ü>ò{š Ü¡”ýeû¢äzÞ·}éAöàß 9$NPBu §âàꃒãÌw8=pŒyn  r²hªÊÖCLÅ©)18OruǤµ/£>T¬zöã˜ËíP4Oš}Û{,ß¶BÅa–h`D*%´/N”nWÄr‘ŠPÁ“ÿödö¦Ýtò”ÁŽIzûüd™8"»‡Ð¬Átªª•8Tq:Æèâù›/€øê)8ÞøQý”‹*á*œnŒ•Ó¸•לZúÓ‹ïõ®Š°äê¨GL§üèžÀõXUU·å¥n·ÉyçQ€·âfê|Ä^Š™¢Øá*EN¥üRpø¦jk]ù–¤¿ àÓYþ.jôçì ötìuAXþîÇ·4æ"ÒלÃL{Øï›C½¢ÄÐÊšéŸfœRÂT=èOK›à9Òtµ*{:ry°–~±7ß*¦6¶ÅÆVœÎ D¥Réï šÑÖžOÖ'e|âeI– Cñº£—|J¤¬W@ÀÙ¿€.Q&µ¡$´63&¦›%Ãæ@kìõ´Æg5°Ylõ·&v$Ã1üoŠ‹Ýa:=VÇï‚íñ ÅãL<»ëïúÞ¾©šÞ'iô‡BN8œéejÂ(2s@ÐÿfÆ~G endstream endobj 192 0 obj << /Length 3002 /Filter /FlateDecode >> stream xÚí[[sÛ6~÷¯à¦/ôŒ… ’;»é&ͤÓkânÒÎ-ÁkŠTI*¶÷×ï¹%³©ãØž´›ÉŒ\Ï9ß¹AJ,ƒ(xqôÅéÑç_ê<ÈEn” Nσ$Y¦‚T+¡dœ.‚7á³òüüXF¡mmÝ—EuE”k©‚H$Q’¥ð™š(Mƒ†gèÕ \’21%%3^’',´ä ÞÌd.5+"¾©dä L&áXÈK»éuW:q^₆g_üEqƒâ¾Ü¿ñnúüôè·# DôX2™Fë`¾>zóK,`ì+XçYpI3×V‰9ìTÁë£îIl„nT’±6joc”È”ršòžu•¤:|~U¬7•ÿ¢è‹½3>ÿR%#«kKTJyløV§ÇY6Ç3¥áÂËpÝÔ˜Qo™F˜ÇF±ÙTå¼è˦fBsŽG]ËÑ 2Ž£g“v†B÷¯’ç~^éö\”?Gq¼ÃÝ`dÓØßÂ%`2ƒ —þvx'dzDÀ˜ÊØ ‘ÛLIJ-Ež8³¹,+Ø>Îs@¯Å[÷M†€+ÏMÑÁÂb‚•‹,Mü'˜yYUÛuYãm€ù¶nÖ¸|úSôlÿ%ÄÂÈKºØKÚve½d:¶*;³$ŸáÀ¦(A;»w›aaáF®—GZ[,¦®ZÙzÙ¯:„`;Yäf—3aÇû?ÎÙhЈIánÜ ´jŠÛì4knõ~ÏoÿõÅKnDíù[½í: EHûn]—gÛnÊtÑø^<ÿÆ ×r“ÏAiÍçÃvЭ·kw[7ñÅëç2K¢L 636»4ß­·„PqiNÌ‚ÉTÌ&ú¦<òAÉ©ÎíÔ²=ãHíÉÀz „ °¦²cŸ{‰bpÀfˆ¬1̈œ™ìr[÷˜æ`ámnöŒ’*ë8ò€ë\Âñ¼|ÏFŠVKiËà8=&Þ•ûÀV*3»@>¿€¬õÕ,Á1µâí¯q£fë¸Dð"‹`šj ƒÁ¸â—0 eÃà›A–.´’ûʪ­”S„ŠÃsvãØÑ.€YÇØéXïÿuÃÕâÌ 4°Þ@@¤%á…£cü ­`«Úlo°Ïª÷•fÁ3—o""Uì³`õYðTÅb~¯bIv‹Ù«XÀIÙžŠkk·×0¼ ‚Ѣĸ»m’:ïŽCIÐ#+nxŽ¡ •ÞyñÞý0,Z±áQR6Í"Ó:4­Ý(áÖ<;ý‘);ö°çÜRÏbÓú› ¤† #^ié;1‡ÈŒâæ1q %ð5Ûžg³EÄ1¸apg‘wý@=+zŠÕ@³˜æ½ÛËq ¶¢Ô/2ñøšG«‚ÓG²ëC8äyO½\&øqÞmÃßšþÛÓ(_ÁåÍ«-2²¿aHÕéÇ9Yum¯zží`!†k¥"g9?y$àz>—%‘Û è#uù õyÍí9„s'sèS¥›Î…RÙP¬Ÿ½öõä!ÂS¨j‡Z§9ûnHN’A; §nEIø›¡-†#Ç“È!†Ð…ê…¯ÖR%ñAýP{œ»úScÇhÂö—m³Ý‡Ø@ì”5Ú ¶X{'‹xˆòð'~äA“@·9wôìÜÂb?ÙéCcSº¶*kŠ#bÓ‚7/&íÄVvm9jbâåQBï& BÒ馔œ”n& / •íS\Öï½G¥¡õï_tË4ݽTêb•^°xOž¼SŽ´¶Uïú”–MY=…ÁØ™,6( âA ´·$B,ì:þt†0/9ÏB’íú4jyQ‚eßÖáøœÝ Zž™—(:7ÃqOöD?úA¿E¸SéE/Þiu"Cd¤`)'àA8ç¯Ê•«Åé/–7RóÎØLÐ{HÀÊyçVnfo‹jk}·Xü 'n;º%.ðãÜòw\R^K”Ú²WÂ@eßÚJL©à)6à?0:èd„0$ïüv.Ñ>ï¢GÏ–aE&ÑðfóUQ/­Û«ô›¢áë©—•ä"3ñ´ÿzߤiê'þmÊÅBGéx«}øÜ܃–ˆôÁÃÃäÞZDjïš§‰=ã\$F½óž7ö4÷S.²ÏXû‰'lËg[*}nZ pìmѶÜ-kˆE${œÖUoº÷†4\ÛÞ!uÑ1e”ŽãÌ!¼j)ÙÍB1“éƒG1'ã·e³í825µ½¿ÄNÚK U& ^Ã{ E¾†“£½Õcõ@Ï»S÷ôïï«Û$w™Hr—Üq%#ÑÍ2uˆrÐnÎH¹ îyÏzˆ©T‹,“+ï®ôÒx@ŸKÄDá pèí¼tºâ­?;0ãBår3´.baå)È×Ê}Ÿ!Tå |’¦‡^¡ö@C ¯ƒOZ5=tøÀŸÇB‚ÔU¦…{œ¯ˆbž ‚ ÎñAÿNWäü(€d+‰ 9ú<у_»ðóYïÄðÁ É(‰”78Ê…›|ŽðÈÔìsôG_(%´Ù½i—à~Ý#äµsç®Ôr5¿I…Òé}Õüy,j~1€YÁÞ‡“é!Ùƒ8ö>¼¾Èï={ê», ~F&þk+ƒÛQ#h¼ß¥Þᇜ¥ˆV ®?4Fs‰ï4L“!šù=²ã ÔÝ“‡fæä å8gúGýó5C‡<™´í'¼»9ô‡ã¿4÷HÁÕè‘ÿ$Gïù“Ï>;& `¢Ì­!|HæûAi;ú¢=ˆcbæ~îC.>åìPãëðË6ÑSÕö±ººÛs¢Ë›¢_=3»x˜¦"Êâ[Ä“Gñ*‘¢¿êÅ™<°óŸ) ®%KöŸÐV€^Û~¼± £Z ñÉXeèw‡œ¾úñù_"H(»Ojù˜ãq.’TýAjãÚûbÚ(…}031ýÇ’ñzz¯ý¤ÿ¡]…! endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 806 /Length 2273 /Filter /FlateDecode >> stream xÚ½ZmSÛHþî_Ñ“+ÍkÏ̵u6Yª’»=`·î.ÅÅ( Š‘8[Éýú{Z–qØ‹MU¨‘¥žžgú½g¢I‘'«ˆ)(J¤•ÂiI[Òƒ#02C$ÊŒ&“ÔȲ·€ïL61>³Zxº”ÈZòƒ#„ŒXcˆÄøà4q°#pÊóðè€$`Hµ!¯(2K $ÞQÂb>P8Š1&Nkãˆ=FŸŸ´ì€±-ƒÝ`ƒÚà}ÀÆ  ìÌZYcÀ({NëbÓÖ"ø9¶ÁÏ+Œàç;‚Ÿ‚ˆ4C^ üÛÅTÍô bÈBGlK¥ÒHdk”´ O–;ˆÍ`[²‡|£l„Lp²G&F°Ö¯2²ÇHVö§"k’éNªìÞú(ûq}áÏFH^‹>”T áêÐ %›frN¤¡:Và ^.x=Òob+]X‘ 4©Etç­à­x'ÂÅ^= Câ ! ŸÄ‚ +Vx­½Çƒ`îÇ":Xõ";C,&#o™ÅÊ xE‹… ê b0"e˜Œb±J<G¢n`è×ËTH#X Ž˜•´È# \ŠJ‰uc”Õ ä¨0&  X*ZØùÞå'”¿iNÊéŬ·USgú%ýòËè…¦wEUÓø²¨/Êá±½,éðøèÝIù_º.ÆŸŠ‹òåZ.fÁÅÐ?>—ÓÏUyCÍLJjZ/'eûÓÕ|ÒVusUºjÎËÉznvÁÍÒÑÕu3m‹º¥ºiËÙún1ÃÑoUÝÎèc3]a¯®ËIUoší³=Ð~üXN˺í´¨gãiuÝÒ|†ÝSQ“¯³jF7ÍôÓÇIsóÇù‡[¦KÑâ~ýR\]OJ:/Úâ³Ìr– çCÙÞ”%4vÓи©Ï+á4{x™;+­â‘Þ6ÅyU_@Ù³j2):¬0„¶¡ã!¼V¸üu5iË)¸ ™iW3-ý>-ÇÕ Ÿ¨œµÕU!TC˜¸&Îã¹øO§2k:ߤŠ!œyÅ™éô¦ùiÖŠaÕí âV<öiA7U{IÅxÜÌëÛ}‰~(Úñ%•`=n7xI¿¦vþÏÓ·ô^Ú?ÆxiUx¸·¬ìfXº£ ^Ù=ß±û7¿þñçþáÑÉc ŸW†Ï3|^>ÿeÃç•áó_7|^>ß3üNê¬",&:)gúªÆ´5 ¿G]¡è˜ò×U{&óööFùé×ë’òß¡ºQþª©ÛR"8Ê5ŽòãrÖ̧c¤$Ý›wåyU4_è½Â F‘’9åo¦ÍüšúOÅ7® ¸Êø+åGð•9Öx…/‡åçj\¿9ÀêXTœ ÅL¿Ú~<3£÷R÷γÑŒÝçQ~ÐLÏËi·¼:ËËòWï³@Ý¿3¨[?¼|á%J.Õ©š: M›ñI yÂB_C±å—ö{µ|g:(l¿·)ÙžÏx¤üR/F×Üq1šžÎôt¦§3=éélOg{:ÛÓÙžŽ—ß{z×ÿv=½ëé]Oïz:ßÓùžÎ» Vß,u;Ð °Ã,€;{›E¬j­Í´´Lœ²èöisaºu$+K3çá#AªuŸ¡>߈Äì‰ÂÊFú*]´Zltæy3»$>be´& ø‘Gìr¼ˆÛ …Ñv#Ä,ú/›Y¿‡ß.ØÆ´U†Î-‚7ÚL÷Ƙ‡‘ܯø·Ç@ÒéÔŽèFmÌT€fËv›t&±×(šÐšš”2ðƒ}[½ÎCÇÖ1) ÉùCçR^C`Á „´1¹BJ50âh»“‡Ìh;“Ý ¦2‹lBDQ"Tؽw1¹Ý`â˜Y$(üeÞ’C,2É„äw aÈ¢X3X3]P™µ<ï$8„¤Ôa ™ QO&÷ã °]Kê*K¬nb–’ :HLÉ’MÏf™7œB|F‘m¼„& ƒë·1qìFK6¢êG³LqI%þ‘\xG‰Ã,òÔ:F±Ã€ç²äÀÙMH´>e >nuœ$§»€7Ä×yg™Ã:$ÓänS‡eˆÌñ@L;’“•ÞÑߦ‹>NÅ0ÓnR‡50R¹ éS‡µ)C2ÓnR‡Õˆ·Ým£~õÀ3Íi &¿“Pd$í#"ƒÀª{Ô²cQøÉ¡¸/êå×tÝrãÓ“:h¾ßAó³vЬûζïLÙöã¶;T‹’HÃv¼ÕèyÐ{D†¯ÉmÍBx86«¶Ì‹º¸,§:Ÿ]CBP4Zj3Xíå(Óh½ ›ýYÔçe}PN/J£tزǡÆG‚µÈ÷rÝhâ±G¥ÔY7¯õ÷ʼnm7á:´ˆnbÑ4K©æéœ„o‹*[ùG¯cz‚v—tóÚC´6Z”KuæM§frѸ¤Òru¨ú˜–¼äR<,ãäF3,ãœLqO ‘ï…Œèž3d„þP+,ä —¦O<ÂÕh´“•ZÛf¬‚„ÅLN{[~ˆ{Ù¶×?çù‡ª‘Û˜ù¸m¦Y3½Èû‹Y^ž_”Ç/·E mƒ‡dVÐ×øÇ»ñ«bÚ^~…ƒ¬/nA0œ2¹GB´Îwž*ÿoŒ3Ý5.ÛÞ¾À,ŠÉ¤œÜ=—;õ¡.:êNhIÍ Z‡ð,‘q­F­éã°d~×å¿ wOÍŸîÀÉÜsञÓcŸócŸócŸócÚvΗ3àä‰Q£99z°Œv)[9Ñrëã`Ú4Ÿf°àÛ^äÿì^v endstream endobj 201 0 obj << /Length 2644 /Filter /FlateDecode >> stream xÚí[mÛÆþ~¿‚@ò*¬Í¾ï²h?8u¸p ľ¢(’¢ %Þ‰µDÉ"åÃõ×wfgI‰´|ÑO’ÔŽË}›Ý™Ùg^–âL‘$|÷±¾î¿ÇÇë.xMÉß_^|÷\gIÆ2+mry•μ—‰Ó’I¡’ËiòKú¬¼º žë¢jÊ|>KçÓfWõd]®zßÔ9vº±+ÕåÕôðÎ?_¾lG aÒÛº¨©¦¬èùúÕÓq]¼§—›²™ÅÙgqŠg¯_üô¦m_å“‘ä黥]þí‚?ˆWß=—f‡QÀ #“±6À'C|ºy•.Gc­M:YySP9ï¨òÌ'Ãg¤¼¯ ©³L a“á3ŒÚߣþzyñþBÀ²y"¡ƒ5ÛÌ0ÎM2Y\„úŒY-aCܹd]$W??p‰A‰ OË —Ȥ̳™eô Ì™.ž½‰|øüYË4lå”[’ÖèÁžò&Êv¿ŽHÅŒWÐz/ßþ§˜4O@'œJëüC1Eõ°i^“š|ÈGÒ¥ëô5};/Ϋ4263,m÷ú8FŠ2jÍ]ìÕÌyÛr7ðU§7#éÓxeqOå [×ÅŠ8ÝÏÐgŠ|oâËÕ:_Ŀɲã*’±œYg’±°êx蛼¬Ê àE+8%Ò«e˜}‘7å²Âz•æo’|ºÜ4ÔÑ/]¬æˆoøp ÝòaÐM9ŸSí$oKes^µPR3!A-¼b[­p`,|vµ@ŠÊZxPD-Ò*¯9áì% tÌ;K­ÿõ¤ãú:'–ß¡Rq²¨Sl4v /¢ÔfyWP'Ð q iˆâ’9“õ5ϵÇs‡z¬œ ò,¦g¶ Æ0Ø\b`<Ûb¨fÞØ#a(Ì2ÀPÊã}'”G3 Ž3ÁÕpKpE ´¤? ·¥7òRˆf–wâœP ü™V)ÉíA5ÚTåûMT)ÔmÀ”VÃ*€¯šŠÍ,o¨Dz{”Stæ&èÍ…^˨šËù±©úhÀ¶³*l¦˜@N›Œ4£l-8 ñ£Èj(Y+˜PòNàqŸo¬Ÿ,7Us7îH¦u‡;­Èù—Afë¢^‘AC $/1 $VXëÒ§8`:-ÑøÌÜ¢O ¶Qù`<˜€c»“L`ü²BKFïKp¨×Tܯš@TÞ©¤+C®86u˜JÁ¦-7s\¹²é¼|\è¿ìºSáŠvL}AÓõ“¼YÓkl[㮯3u0³Xž[ØžHKäˆÖYú#Ä-O¨ÃÍåíi€†²j`^˜¼nŠi[¶Ë‡;ÅÜ…òW®†Dè6„¨«1v¹­ËšÞÈì ’"ÚEE-qžà^4ëe7zJ…wÕ2 Eɼãv¦(#t,nªn I/dz9k©–Udbë‚„Êzßvê†zÒ¦ÕÙ¹Àƒ€þ…DÌ뎹' SæH4-z¼[ë>ÇÃXMŽAÁ·pî:ôÞ’e[g#œ.as§…ªèï\Ò©òq@ɵ*VF‹¥4T…ùü ©a>FŸ¦âNÜHRð¸cJéÏèAÈÍ}‡Üed~>‡øzEÕ bÖ”º°U¾ELÙëY%Ї2TÀo2ãÑqˆƒC"ú'yB^oaHµ-rŸñT/I%LªŸÂ×’ŠâWå2âÑU‘?š¯éAY„nIËÏr™íï¦Ù¬£Ÿ‰‘~?Sq5ô3Á6ƒu®¦éåòP×:m*ô<3à(k™—§Œ ã6ëK溨Î"™ŽîX `O ^<«ÉÆ““¡¢Û7ß,h`ò!ÚµcGÚ Û·ÞXð; joÅ3×çÎN G}b¼`Z‰SàŒ’’ é€$D R?zL ž(“Ê·t̘Ijoú[zô˜V2Ÿu}n·N.HQ ¹|Ô¼T½9nZK ™@|ÝEä^¦ 4ÍŒ¢ÓiM•a'Ê‹6Þ¥—|µš—ÅÃSŸ¥ÏÃÖi¦ó$ öÔÞÁŒV§¸þ…˜t`%à€ŸrO@ƒ¬þž~ëBLÂÌGb*S…dŒßÍS‚5!çAÊ*õmö F® pŠ«%qÌ6Û¾B·ñ³¢ø9ú-­ã£{ŽOô“T{~ØC.Q`IÒ{´rTß»wOâ½½»ŠYý¨Z&2¼f»Óû­ê~;>vïÝ¿]ßÝ¿wesTÌz÷hööžŸàlÿ¡&ùe Qjú§ñƒt }]Dí þ 8h¡ï°rK•ŸQÞè!Ôå=°MÔ±iÄÌwpJ•fœg÷ñJ¶®Àé?ÂcW¿À y½Gñ‘,ýöØ’x$ñ ôêÉqI%Ä=NÛëõr³:“T?ôw)Ô.ƒÜÆ£¢Ó8$Â}_ªóâC1¯OT»òÄl×§·Ç—g8%–åñz'c:C½(ô›o訽úûË—'ZïAläýeN¿B¢Ž‡âЗæì^Μù…ÆûÄá—HON±ÐÏ@¥Çà œFÜ>? ôÄ>€éý8ðKCA¾ŸVô¤P9–¯è9¡ ÑðT¯øÛ©(ÈÅ’ÐBH*ÆtC¸‹7ªÒž)wrÁ V/>þê3fzºm-Ýå“ÖõãÂÉ@¬@ExÒ#ÜÖž@R‡{*=fª/ªY‘O¿X4=Ü:œMÃN¦$ìí'$ÁpÑ´ÚÏ r‹QêÛ_”h)ôövÐâo;ü!®A´<’k¼9ï®›dV»C‡£~xó“¶B8ÛuýWßÍz¯žÇ4µÔ c·â=ž]q®`á¾­hÖ\qn=L SÙ”ƒ›ÿFc£…Où°6ìY:Ìø[Ûuº\åoQÎZ†qa½“êX+ð#{á÷®NÞEXÝIXqkô[Þ×ç„CßV0¢/§þjíGºÈÙ0Db`fõ!CÔ§©|)†„ÿ>mÈiÜÏÿ‘Ó98õ;Y×`ìIWò6ÛL]2ŽéÐO¡ÄÀjÒ¹|yï—CF©lÐî¨ãÞ”ì¿#ƒ…‚ã"þ˜àŸáG…›ÑXi/Zñ7có¯Ã´Ky÷95¼åÔ¯¹ To ºO»¥«ù2\¹oC·ðÝâvü¬¬›åõ:_Ð+FØJŸ*BEïú¹×£û6loà°ÚR*8$_Ã¥š×·zx©&0Î1_ÿÚ¡øþÉ;5añãÄö§Y _ÏN”`š>9Oqª{¿«Öàt(¡‹?õˆÌ²X> stream xÚÍ[moܸþî_!Üám‘UÄwéÐ~H‘&Hq-p‰¢È yW¶uÑJIë»ô×w^(­$oRgãµ #Krø2$gžá ©Ä‘4"âqÒ\MË>yûú, *x}ö×ó³ç¯t¤Qj¥ Î/GI"§e$… Î×Áûðeqy¹q˜7yÕY¹XJ—„]“Uíª)¶—wm†®KlÊ´¬Zß½ñÏç?õ½€‡0á§6o™RTœ¾ýç‹e›äÂïEwíG¿öC¼|ûæïúúm¶ZÈ8ü0áôëùßÏâ¯Û«¶þÛù™AÄ„2Q* ‰Œ2Ájsöñ,Ò±°ŽZŒ²TÕ÷ó„ço6"xYŸý ½tû&Ë~ìåhp½4#ѧ xÈ@§qd!%ÑŸ/Ö‹¥²2Üd2Ai)«xÏ‘ŒÒúÔ-“›]Ue¥¯C¡ì¸·‘áMqUå]—?ƒ¢‹ÃßG£R>«:nØÕLe¾ù–KuU~ò¬™Ðn²²dJ»»hóη»DiÃ,…ˆRcxEWy•·ÈY·ëbuÍYš›Òá:ÿ%VºÊמ\qÊ«…Ìe]–õB:XZuÅ$ìPæÑQª•j*j}›üÕ­AµöJâQ­)¨ñ#]K‰Ô‰‰”Lƒ&.Q{¾rROKœÿmÇ¿o½Õ3qà@+PÑ÷ªoãȵWR ‘FBë@D‰³\õ¢ëÈ%”kO/ÖT‘FÆÉ»´÷Úz„â\±žþ€¼_hÃ?/RÃÄ%PÔ*…_FÚΉ{.Mž­*GG›Ó»ˆ 6è—ØÄ'^PxYx·œ%°˜uÖe¬TVFæp-Yͳo˜›•îöÜöĽT¿4^»(±âtutß=Àv üwZ>àiÈ(‰õôY?Lß}«ˆËúý©Ve›‡±ëcÅþ9 üPT?<„ öGœ9Öœà!Ã_O ¡’È¥æÀqÂÖä!‚/ üÁÿý÷¼9/*Në‹ßòUç󗜮ʬm9»Þ¼|7˜õ™³ÙÅ¡ æ´\ ¢öP„ÇI›m¶%#åÀx¤:R&A±š”+þ4Q‚žJÓb«UÞ¶uÓþèç_类E° VžM÷T/¦zƒ>NÒ(†q$40±Ið€r6vŽG8\£€+çÞ$òå–ÖFTcž4á0„³¼ž{á xèú¿*Ê.o ´4!†c³à âi˜ÞR@ü7Mê5«€2i¸Yf ªÀÀÆ$áuv“ûš¬ò´}í;u×Yǹ ã£&çv><)}·ü-×¶-5м&竺µs8ŠüpsÇz.e-–BêST¸ãêUVRÕ&ßÔ¸ {ƒÑ“€ERa×RäÔÓ%–Ï )øÔÐé hªúxˆª¦é¤×4ÇE"…¢j%Qg’>0 zÂ#EEE_=ÅÛ‘rÔÐXɵ”aº™íÂÑë‘1|8vçëÑQbìi„,Ó$™,`qo+‚“0N݃®X*=¢ü èXÃh1·½ÜU«®¨+‹MÒÞFˆpP{µtJyq3Þë-Ù û ôm¤@¾¹½‹|ãèŠSÅàxäO県F«'3à‹Ó!‹’ýòe¤­y:ÐOàxz.Ò“BXj«¾Q¢Ç!ÿÿIÇßN{éDì(ë"«’i\ûß2ÌàuÏÎŽ°Ã8Û¬-Ê2;€p™‚r‹±/@ŽHSlÐǧ—c÷o:~ŸÉ8¡÷0Hü€„‹ÌǦۡÄ//ÆLži´‹¶.w¯½í”KÀ¡g—lãKÑ-Ûh}FqÖ¿íÚ.÷Í!€f÷æi¯SrÿVí6è–¹CB$ £‡i“oËb•u¹çÓï×®êj]x‡Ñ¨8|WT«þýl18y³ðÊGˆÎ†Š“UM£®>,×ìWV\Á+†ŒæØuM]rC~ ùðI,q{Áaåèmâq ;ÂÄw™X?ˆõFž¢~i%øoîžÌ÷#úm2JÒ=^?î2/zR_ÔT;'Ñ<°í€ +ˆf&êÆ·Zz!ì|Â[Pmöo¸Ø"+}`ƒE‹¨Gj[t»Œ¼æ:oòIƒ1¾‘Ü3œ‡E@**nBqñbçÇ Û ßc "ÛƒÀÛà„^ƒÓ”yÇ1Y,(®22a£Ð *ÖX1µÿ ë& Ê»6»Ê1Ô*<¿öPÈÅcu8ÐïöMLoÑf6€w(í]òö$ÒMÒ£Bß·Lì@ý RWéCœÒô¤¢•ÒKñ´ôù1½tJ„ÿP“’±¥LáSÄ'J“Ž$ÜdåÎgI !1áOöº‹´Mê䇠B„ÎUW`ÈœÁÕSÛÙ%£v8¨aÇè@»ÌSÊ«[_1׿mqŸѹ#×ÀIßTLÇàø,Óv¸§êýå&Ôð— [ßórf´íÝš9Húðíš<Ûp Ô² Fnß×ðe —vPkÖsžÞi¨¶‡3dóªµiûÖÜÏ9‚™ú¢Í›Â(’ÇÖ:4h[®ãmÆ\[oðe[ÞC}ÍžÖŽ#¤¢×d™ºgeÆo)æ Jãðª¸É}å¦îµ+À ¢“¹ÎÉ‘¢Î5×ð—b@è÷‰ÞÿD2ÍH"Ž™pÎáÎ31LŒéû‡ƒï30GòºL(8é»cÞ‹e†¨›ˆSgØíaç]`HYÝ07ór‰ÆížÙ÷ñ4~|Âܦn;of'áóÝØxqrž]ÇØõnåÏ#,3há]^ïÌÆ|·‰)øºoLxiܶÌ÷ ¸~㲞5yqª• _-†Ûßå`à¢8jÚÜ!rIà¬L0¾=ë£%™dæñ ŽpjÆ_¥¥¦wI-l2Ú5Úg(‘¥$™zã{ãY²Žéh‡SÃ{)À–ö„Œ·?>²nÁÕÆ‡hp åpÍ–ŠHƒ¹<ÿm-p3âËô½øØkâû6kca¢f¶ÍÌóvù¸ަÑø²<™È(ѧQd褘*Â_îm·­%ßô©î¶QŒ:ø`» %âd¼ÛîË×ÍàÈcXyënåqƒ˜# Si‡ûŒ „;QЬ’ØÐ™4G_<²ýNG±Tó{2.‰nËõ„@†IœNÅzoH$W¦æénw’DBÉùü~qOû U"¦û-â/Ù þØi|ï}äçG³ÿ£ðÚ²KGN¹‰5üÚÿÜñ?µÏ endstream endobj 198 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/DSdmDSdata_plot-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 208 0 R /BBox [0 0 494 494] /Resources << /XObject << /Im1 209 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 209 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmDSdata_plot-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 210 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 211 0 R /F3 212 0 R >> /ExtGState << >> /ColorSpace << /sRGB 213 0 R >> >> /Length 1100 /Filter /FlateDecode >> stream xœ­WMoÜ6½ï¯àÑ>dÂùà×ÕASÀ@¤^ ‡ ‡ÖY0ºnc×(úï;”(‘ÒŠ66íAܽ¡È™7$Ñ\4÷æÛîãÏÛ§Ÿ¼2·O;k­iÛ§Û‡¿»Ù€oÞ}Èoƒù{÷é³±æË͵>÷;´ê`~Ú ?Cã¬4?s5MÀ‡FX1BŠ«ÁˆÙíóðÚ _ìW°ˆLÛæ,8®ØUã·ø`Ž;IMöï»›â@ pu(vu`Lmu(vuBˆ¾:;; 4g3xÀÑJ2;Lfu` Àqv˜Ìê !Òì0™ÕaIó8e/à¥Îx4kDè=„&äb7IóBr±›¤ ±Éj±›¤‚˜š¤vvH !Í«‰'9 ðd69M¼¯9-f“SmÍi1«ƒŒ¹ø8mYp(VuSZÇ\¹œTN¨µ8–*Z†Ä Ôå¸ ˜rM6 Y ) jÝÇÔ –L€®&FL Q‹ ¨` (-¦Èc^¢a„ K ¼ÄÈLšÚ)Oß”nà½Ó·‹,ø8a -1™bз!-1šæéu†%†¦¦‹h»_´9GË~S®£[¡¾S|É®x°¹)˜[ñ`s= Y­ÛÃð*;ac lŽGº…9Üž'ia¹N D./„íñØæ]¯ƒ¹¼ámcbOx¨˜;áaÆžðP16u0y‘v0Ô‹!à ó}"‚¬yŸ1_7Ï5¦[ƒëÅ0nH›[ìòÀÖwy`Ô3gÍûŒyH˜l'¦Ð噺<0‡¼¹mcBÀÞËÙ¶9êòÀ.ty`Oà{9ó!KmL£Ð‹!ˆ½"òÀú<è1g{¼çÓ&&zì`'±±Ëƒ wyŒÀÞ…¤Ã»PÌ‚lcîò »<ˆp—‡"u¶1ÇYNt°©ƒ¾=á¡ð§§È ‰k»­¢_µ7g ü­çj_Uu>\²"®í ûß«d3û;Õm³ˆšÑözü&£IÐíæÂ^šýýî‡ýðå—»²ŒÿmN`î˪äÏíNžóž“»ûïèÎ~8¦s÷tVw=þ²ÌÓU¯'yîŽÔô_Þ©†;ÇëtŸÜ9t÷ž*ù¸ÐÚƒòÐY\/´vÅgm½ÚŸ¥õBiW|VÖ ¡ñó®•ß™‚¢×)·Ç…–oÅ{Z¾Õî_HùVº|¡äÛÿó"‰Iu¿ÑÍÓ¹‹U¨.®}éœ"ÕC"ÁÜYÎY :k²MgRÞ/ï&¶|ojÇDq3®ÆŒãÈzñI&e¹ªC~ºøð|üíðhþ¸3w—z•1‡_ÿz~<<™?õí×Kófx÷p¸ülö×íÔΘJ3þ›fZúW4|ÕÇÇɼ<|{><ÜŽ3ùçdÌÿ=eÑéUB»a (¨7¡&ð'óÖ¨Z%èÕÉ}Üý )³_ endstream endobj 215 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 220 0 obj << /Length 3323 /Filter /FlateDecode >> stream xÚíkoÜÆñ»~Å!i£¹/>‚æƒSשۺp\ýER:ÂGò‡eçC{ç±Ë#©³*Éwg§ ˆ»³¯™ÙÙyí­}O±XøãOs=­ÛÏëïÎü4-¾;ûöâìÉs/b/d°¸¸Zß‹"¹µô¤P‹‹lñÃòYquu.üeÞäUW$›ó• £e×$U›6Ŷãzß&Øéú|…]–TÙý;ñ77 Öfù¾Í[†_ÿýéªÍæÊMÑ­íìk;ų×/^þõo“ô\úË7“•~ºøË™ÿ0^y±¦úèC½oƒÜûOg?Ÿ Ø !ëM{¡ˆiy†p-'âp!|E‹&_\}ÿ`¬Fñ1{_.Æ©ïøÚÊf ¡#d3Vž†R Ϭl~y¾ |¹üã:Oßpñft\*Zþ’x`¡,ª¢DùÅJÕ——yÃåúŠ¿M¾ÝiÒåväÖuHë*+º¢®%@QAU«þ i¸ï=Ÿ<7þˆ^±j†Ií’ËÍã ã¿Cßñ_è ‹üèÿ¨4ÂmRn7Àâ’Áñ˜…èLb;ýã wlŒ¯›ºß>ã#ö&I¹TîÐ}‰ÎåóKwQ éëå_Ÿ}¨Ÿˆü`©íWˆÜ{íÂŒÔì@ÂCœùÃêÈG‹VÉÊçŦÍuŠóõÕ‘Wqz›)6^(hxwþE`í…QÛ¶ƒ£†!ý² öRÜgÌu^‘v]ˆØZßgHþnÛœ‚þo'6"°²ÁrÂb3î -/'•ý×è²²H8r•']ß°´(EËÿ›´¨_¹´@„z&žZ&'»ø› 8ÁÞ?Ú>bll3'Ã×óa[ ˜ ß ? y†ýMèADOš‡"½•ô'µY¬”ñâ8bigõìAV…}J©å«&O‹ƒYÊ“ämQñ¹Xîâ[»Ì“ç°í»Ü–  >;(ÎQ|‘åÉfóþ<ÒpPWÊWË›sRF'6XŽ–u¿É¸º)ÞŒ»š¿×9æ„â`™¤) Ñ7~3`‹ÃG¸BgÆ•âs¬^Õ8acÛÞæÍ{7g•;|ÖEºfhaGmiP Ñ´%;ݦܬsXT1å£ÞÿRT×\mK Š¡¿Ì’.±À¼k¹t ‹SÓ¤os†Ìè@ЈœÇcÒºÌPTˆYšZn ðPÅLiìÁ™#k˜L™e[üB%½Ìò´É“6o%Ò£`XXb¼lA{H££q*ªÜ¸6Ð^LIÛæƒÈþÙÙ<@MˆåÓ–›’Ê~¡Ñ*銷¹E$Ã"šZ L“¶í˽”u”ÕQ‘¿$æ«HpZ!ˆD˰uòÖm«@žXÐl°‘”Øv™MXÚx¡ÑT¸Ý(V±@°%»¦É&í7´g„ë>R`—K’g-¬(" +dOØôx&ôn,c¯w[+]¶½[“PÃLtœbÅo„#ȵ¶kjbì†/„Ñ.A8¿E @Û¨—/kŽ,G ̸Ӕ{HCdÎÊŸ®I²|Uÿè+…éä¼#±"]€g »â®n <24틳3k·<¢DË Ú˜ºœá‹F§ «¬,Šk8\ÝTÈœQoêU„B$ï2àX\¯;d~Æm¤Æ€Å›b½coäZ}#­¾±“)$å—¶ÊLñÄr'Ø·²óUV¼-2Ôˆ”q¿cáy¡ÄòŸ,,{ö¥AÕRæÄT0,5XJ¶ÌÔ:A¤AV{Ô¶S{XµjŠVÍP>©¬±B$8(DoÀe”QyŠ ¢ø_П]¾%áH"ç.o“MOêÊå9ŠlÉ{4’õxwô²¯ ùËœ…;+.f>ÌÅ fåaW&Á ¥ë2·?ÂíÙÃß±ô 3È»/_TÜÈÚ Y~•ô›Ž+À®XÚEÄVõ±´ƒJ.%VcPÞö,îØTe˜Í—žY®ž Ê … û‰bÁ×>X¡ýppþ2EP¸n 7ÅT®°SÍ_w&íˆã :eÜW¸‘;Q4-·ï5}릯Þ@·€Ö&‘îä™…¢ÅgÁi¬Ï5‹³Äš%¨ ,Uèo€.aÂ`,ñ³dË[Ö$´ÔÚåìÁ-#_„A ö©u<8¦{šœ+KMÓïdÔô;¿VÒà¯)ð×´Pžòw¯$ÀQ Á¹#·qt§ô`éžfro+:€/x°Î™òýO„¥‚ø”Ɉ²I‚ºâ`©Ð3ZÜ"(.Ê#QK†ñ” ÒZŃd/ˆ‚“’KÆÊLizV´Û»B<¬žÓ4Ñ%W}•²™FKV¸K¿ÇEz°±£*ò|`€oÏDv¿¾ =ƒ`D®û ד•ðÛç•Ë„Œô·`a•d….ȦC˺Ը4£ 1gëV92>R/u™î­ršÙv§( û ÿ÷ ±.n“æUÇM“KI?Žó¯×÷5F‰ª0ö”’ )Oï.çò„6sy~ Ž·å—4,X’·e 6ê鯶¿ßâpªJzRFs>ð²`ÃãPã€Ì›[ûäÉHg›P“úBO¶é›ƒ±[ÃN~¾ÌÖŠpŽŸÐ^d‚#q–4@ý˜Û`îÒ¡6™ou(¥IÍ€kMÚOh}å,`_º.1ñ¡LÎù"nòí F:‰"'‘Ò%7Ð@4FÞ±±š¿k ¸JÒÎxT´ÄŒ—Ó—Pg(†yCçžC©®¯ˆu€$ûû[n»u¨9NØùââ¡Cßñ×%C0Fµ>>G$;g_#P±·\ëŽM]èÀT>]RíÐØ²?nסèç,Ê€ª¿8¾œ¼j{Š{ŒèÐ1š£Õ–¹µ ¨‰ÂI›ôã$AŸ—ÊšØMAPÃ¥vmS:0CðüG_éÊ­Ä}XDlÿ<Ï>­rN±Ò ÍFº|é,Z¯XiôR\–wrMö.}ÿ!çKiº_˜ì³ êm"Ò†ÛUVLÇ!Õ'b¶5X¥ ¥ÂïŠ@ÃkºƒQŠ|5þiJy(3#"íið3çôQ‘ã’,5&èUs°øCÄ‘ù'Ý¡¦5ÓJ"Jrxk‡ >âHŽ .Èé¡YºÏÉ/1PƒÍuá©xL¬$”¨’Bšô9§˜²Ü6i¤É0ÌÌŽMç[ã’w uÆ\€ú‹5MëºûŒåZÎr’E§è%›&)%±fúú㌕ò]Æ~0ÑbkˆuyƒY+¥Üízw?‚”5 [“冡Äd; £|²0l‹k» ÐïÎ?|¦án‘«žs³>çÁÁ É7û2ÜœOÔàª@åÃ!Å-7çõ.»ªÚÿ¶f°uD „ÉÖÆÍÇÝlrÓeÔê­ÍS“Ñg†A£ó;8‹¯¢åŸ‹Ê0ƒ% JCjßÖ‹vŸàXhsÜ—¸æ{Þm›’¶&¥ì7t/óä9'³Q†3Øù‰Ê·Æñ;(#†Nhº,ÃkÎ-÷Ÿð‘êÐõwlVœÞ·?4æŒ<94J»Ü:É ÖùNÐçœ"öîOj ?O¶)÷•w ñL¨9í¯ʶc)dHÝ7 Ø6þÆk»‚$R[/ºñî ¬Û΂øŒjLŸƒ‹V‚™Æ]À—[÷tt¼»VÄ~MNî Œµ×:Ü7Û§*2þ ã\†û=Oë [u¼ð9y‘F VT^ì»,Í«ƒÙK#Å) ‚aÖ =¯žŒŒÊcu‹žcz4°¤‚8rBÑë§/FÎ úlržT·ð;bâWÔ@ü„ß˼ˆ@x2”Ÿ/¿îm ´7Á~ †x¸sTÔé!ÃØœöÐF ¡þìоJšÃÅ!±§ÄIõ*¬hf§"Ù2‰¢Û[ä úáä‘‘Øj¶G›|óõ×/ûMW¤u“ÃŽ%å}|EÉ!2qž´BÓ¥Å#öò§®¬÷Å¿e#çŸ3]÷+xLãC‘[O G‘ßžJ*M¨Ùû%ðO»|ötÐÅbôkaŽÅŽùã×»_ZdèÍpNïó‹eŒ§~u™ÊÂ>ïÿˆ·ûÞ þû?ó¦÷‚'ù<jŸï×&S§~úQ/:ï÷šÅ>AøtZ☯OwÔMß òëQdó Lg¥ù¶ãë½ál|ø*=`€O é«¥ÐKÿ®Îò!ÕC:ëYg±/éá:›;;ÏfÒ9|ÎI×5Èø¯¾HZ”²/F2~üdzÿ³BÒàw® "ô}›ªŽ!ÅàAýÏõ$ endstream endobj 225 0 obj << /Length 1905 /Filter /FlateDecode >> stream xÚÝZ[“ã´~Ÿ_á³ðàÀZ««-S‡8ËÀR@Á2<EyMb6¶³¶³Ëü{º%9c{2C˜T8,Ë­–Ô—¯[-y(áŠ>šÅøÝ?^yAè ¾¼øüêâÅ¥Lƒ”¤1ƒ«›@Q¢5É g"¸š?‡/‹››£¡iLÕÙjñD‡]“UmÞëνoÚ ™³Y-«æû3ÿpõM? Ö`*¼mMë(E垯¿û,jÍ[÷ò¾è–~ö¥ŸâåëWßþØ÷¯³|Æiøf´Ò¯W__ÐÃlERißË}Ÿ|0÷Wo/¸‚¬7},5aByytÉai(I4Îe‚›‹ê…-( ’*Ê© ZqÊU©ÅÌ¢˜òðgö«kP÷`hb;b Æ«1sÖuÍ/TÑçÏòºL´]û Þóᢩ7ëÇFnEs#Iט¬+ÃÏ< žÎ†}€7Ô¸„J1…š¤€@&Oµ§åFø-ï”Ø#>–;/`69ÕUížeöƸ–Í?«¹nÛ¢uoY7õ|“׫ãN4¼J‘Â/ãÊñN‰À9 ×I8´¦#­1ó£DÀÆðwË;üNXƒô85Yìuqz95'D·ãâj°£ÖØm¨=¼þ—­òÍ*ë<²ÖÉ‹¶¨«'Uÿ ÅN´£d3öÛÖÄV¡ÿFO~•yùýI çá?þÄ«8¥L[,ªS¬ôél²`Àâ„(ÆFO,~³’$:¼ÜÑo6«Õ±Áí Çûÿ~àD,"ö+hTðqüü >NeøS[T ŸÝ£Ý\CJtíúÆ/„¹ÆÂTƧïÎçyÓvE¹ ļ.KÓ$(ý’ÿ”¦6òP)ñ—JyyÐ:&Ljëšø×xúDpïf)‰Š{cµw::Ïó”p.ö™¾¨Šî7IĹ„"Cìm:V¤÷þ²)ª7Ù»ó&Ë»ºùÂ>9÷‘y{`£ù™éµ•o²Ÿy8Ö׿›| ù*k½#çåËGÛátŸêçsDlñø^tÛ£)6‹¬\¯ s÷y„‡Òôþ ô‘¥§D%<¸£Î³Îc-ËsÓ¶uÓ~ÒÇê¦êZÜ(0/>-ÜSí”`žû…Ó4öÙxÄO`-Mæ,$¡‰Ü'vÍ`ÛM;‘shREÎJ4“ÉÐï‹Ö8ÃR¬’£æ;´÷.9"®‰ãqð-MvÆ•÷ÞÕÔ߃ÒIj/¯§=€Xðžïä sv$¢ãû›¯äLÚp¶ ˆñÚPïS>ýnq%„= í1tŒ+è¢ ê@¾ûåëºËÏ…ÿ¸‚­@‚oaOà ¬Ž»AâÃÁœ šz…™à`ˆ„ÉÇF‹Áh®ÒD¨~4KSNR*Î){MІAºç4«+Oðg&Æ;‹Ôí…¤«´™:Gÿóÿ¯}kTi ÒÓÙ!ù,Ñ §}JåYÿ¯N†óõŸâ$–ÉÁ^8J‘ìŸø@ÃT¡uÓÇλ2 ;Fgì4Ž]è’øíÒ '”'\ðÇFËáÒ‚'º ÌB[Q­†£%åiÒ†ºMC™ýè–×NP[I¦CFa8MiÊOöíäÅ%ñÝ—IŠõ5²|~ºšiÖˆDU»žE\‡ö؈{#kG_fïŠz­ÉÂ+±{miÛËì23‘…]QB3ëL ‡)Ux‹ÌõƱåYå§XÕw‹–®3[d ÓT[êØþmäLÜ•ÈV7d¥2 ¿s‚—Ùju Þ Ô~U”¹™±1/~¡B˜e÷Ÿh‘|÷9ß®³ÖÌݵŸ`û=ÕNçÖçèn¼"Ë—Žè´Ã1Ëlçáx^ô¶o¼  ×™9+MgÐâÊMÔáúØïø¼ظ²?ŠNÒ8ü A“k:ep£VJÐJNßÖ¯0ñ%Ú¢ÊýÅΫï¾,š"_®L•›UWTui­ˆ]emõ›ÿÞ-­ <ÝSÝÍ‚zƒ`ˆÕ«lÝ2ë\?`^€œºûÝ#Œû  8 _ÀJe´ËøÎò]Vá *ìÅ%>ß Ý€±àMZÐ µ,ðæÃò9¹l˸ÆÔ†Hr:a(ô:Õ fg}Ž®GRÁ<Ö¹&ù5{qÉØ8ا ÕaLŸý_\ê¿LI¬fÙ?E‚j÷)z21S$IŒ÷g"©f}?nΰp!ÃwLÆáÉ–yÝøT< #ƒƒ³Líåe9›ìy 2Õá+ð„Pü.Z…ÚF«PqøÞúÙ‘mZÂF‡^»]9Ëfœ¢¾nMóÎófž³1ˆl¾_bq{«ˆÁ¤zì‹!Äý¨·D“7&³´¯h¼u-¤„@ÐxFkË|Ógg|ñ×tÈêîð¸,Kã\&ÅÖ4cžÿßw0¦‰gO>º3¼FTÿþoîû–æþ• ã1‘ºOp°k|ÿï8Tž¢ ý©–„²›%Pýj4o°ôÙ¥ÇPqü endstream endobj 233 0 obj << /Length 1855 /Filter /FlateDecode >> stream xÚÕ]oÛ6ð=¿Bo“±š%)R$õ¡E?ÐaÚÌÃÚbPlÚÖjË®$/Í~ýîøáJ¶¤Žãv‘Ç#ï“wÇ3%\²$¡ÝO=ëÏÃçòÕM`)yuñltñø¥0‰!&çy2š&’­y¢'œeÉh’¼KŸ—Óé€ÑÔÖ¶jËb1r¥Ó¶.ªf\—ëÖÏ7MH³ÁQ=¬¨&wG~;ú%îL¦7m<¤¬ü÷ò·§ÃÆ~ò“벇Óçáˆç—¯ý=®¯‹ñ€ÓôcÒ‡ÑÏôëtõ€Ø/F A–°LÃY"%&3Éxyñé‚Juî0:C·÷Àã×Kž<_]¼…¿h݈2Œg;‡;ÓsÙ1½É€O|)ͽéŸ.ÀÚ™–éjê¿NÕ™ÎÓõbÕ¶e5óà馷åªj´^-QÕà\¬C A´RÀ”÷«`-‡Øcð„Þâ!?3ûÎ6:­m»©+O§8@D)¢ävïl†Œ ‘Q’+ÑVWÛq뽞—㹎‹@è \J{÷I†Ü c@¯Œ)ý ÓM º©Oªt¹rø“ò=Í„xà¦Auy¤F0~ ©D9‰Ê)èÅ9Êá%p–9 ‡a_LîOæßXÅÙŽNÉ`(˜I_€Ûþs€¤Ÿ‹åz*犇û%ñÚF fTVãzÀR[4' «´)ÿ t„¬VVeÕ6䨛ªÁyçã°÷Á_ 7ñË APdŒH­ñ¶ \pI˜QçÌ“Ú&S¼l_ÉÔ÷z@Dt" PÂÀUî.ð2$ IÎñ¡)òŒ0¸jΡåU]Ô7GØîÿ-n÷?`™÷TÒàì0dKŽö¯8Ð=†žs*\wNŒaNyúÓð(îïj¶@Uõ¦¶ã²ð|ëLþïvùñf™YŸ!¡¨!åþåÁDxد1nžÃ€MÃå…‡¥áTüä8;²<ËÎÛqø…ˆ8ƒEØråw\s®‰4üˆŠ8Û­ˆ·ß£ °ýzºÃšÏ’*ñ‰wÞRœ¢tá-% '¢W¦Ý'pC–eYú¦^­WP› šbŽu›JmÓ–Ë¢ÝþÃ…!<õ€ß!CQB2eožC-W6~Ô´v¸éõÀ•Âl¡ô D—0,Z7†Átã^0r5±J'6Ìk;«mã²’›}Íl¡dÎÇ%¼4›@kè¶EJ¹v…ê*T“nß°êÞœ8X”§‹Ò%Úݬ1_…ýŽ«+a!Ó?£p ÓMã"H¦X†ÑÄ6å¬òcPq]~ö¨EãaeX [E`:æa·Ö1?tL¶¬B¹•qÏê³@æ&vZlí£m< F'»ßp·-Ÿà¢YÿcÃ¥Ýê˜Ã@Ɔ(ÈM¡8Îx”s×XÃÝ~©‰Ä´0 “ œÞ„×Zå_bLLê»$Ïë"V¦÷_å@•í*ÀÓ<Žc±ÃŸÆ°£wùƒÀ£ÊFš–©¾žœL߃möýêÛ@M°w˜!¹à¤o ¨èÎ]þñâ¶(Ï!ÊkŸÿ±ÇAei :Fí¢lë'×s[Ùð½X>޹Ÿp!ƒ„ñ‹+ Òñ°U8"V¹^„Þ ÅhÃC(·sV¯6pBFMöe5ÃàÏbè……ðÒ»‘Ë?Å¢öÍÒÌCoZ)3*Ûù2l+]&bÔ5sTNƒ ? ´¢RêÂ7 N1©¹ÆLúâ*×É +NV؆ÜH5(TÝà)F¥%6V–ßbä796Ht˰nÐwh–òXžÉt4ÐY›®Á¨;0À·O S'Lp1dO@pz­­g+$(l`áÚ4vˆpb §+Ae,2@peŠèk ±ëÂm†Ó˜Í€;Ÿ¨5ÚHUœX¿Ü«`¾_„c|bõ»ÇÅb ‡mkù¶›CÝ&j‡òÁÖÎ ˜þ¥éè°ƒóåÎù”'éœ/ßw5ES_4ÁÒ¤X{>`âz¢n9xI'òÀ›[søÂ¦yúK§Éà<—Â5õƈ%ˆ–{õ÷#4˜Åi_nýbyªÁ!çQ¬Î(̨ê‹ô²lo‹ÁPbSìÄŽ±ï™{÷(«Óµ†…†%éØÉÌ^Þš`H·æÝ=ø€íýÇ >àÕ’™/bAÐÆúß ¾i + ¬ÌøïÀi²6’”P ôóë‰î€9ɱ•´#Ò"HÒd²/ÒÕª±÷雹„Áf6(Šž¡b t–2Ù‰ëe£ ƒòÿ‹ßO¥L9QyΡb$f”èé˜ÝÚqj Að‘‘»l^üþ·@|¦[ßöEXÁø±/üfJ…ÐX‡Î…/°KÐl; ãÔît€ð¦ÆÞ»}²#Hï'| 4P7áA"T”œöv€ÃüiæM endstream endobj 222 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/DSdmPrecision_plot1-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 235 0 R /BBox [0 0 495 489] /Resources << /XObject << /Im1 236 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 236 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmPrecision_plot1-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 237 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text/ImageC] /Font << /F2 238 0 R /F3 239 0 R >> /XObject << /Im0 240 0 R >> /ExtGState << /GS1 241 0 R /GS2 242 0 R /GS257 243 0 R /GS258 244 0 R >> /ColorSpace << /sRGB 245 0 R >> >> /Length 2823 /Filter /FlateDecode >> stream xœ­ZËŽ\·Ý÷WÜ¥´0uù&·²!BbÀ™¼0¼p:#Â[Š51’ÏÏ©Én¥¡¨S/Ö-’UErüözóÛÛí÷Ã÷Ÿÿ·ínßå'ïiùχ»í‡íÝáÅý?^½ÜŽ÷â¾­¿÷Gc}óûæëïˆZ·ÿ~üiÛ·üöÿÞ<÷÷Ã'†~9üËÁ…º¥ìö´¥T\È[Ú£ å‘~RÿÍü€Ýõ¶õ—>`w9ÎØ/>@lû˜·Ó!õær0üÛáÆ@oq<B­®ø) x Ä\\ìS@ñH1;_§€b(Í%¯8JÍÅÙ>U×&ßࡺ0 N¸òÖ .­¸}P8RÉ«'ÏÖ‘|rÛ])ó‹.AÏÝ¥´]ðôØfy]ðt_išgÐ/=»ÚÁìðÞœ_¢ªpù¢V]^.a/Åõ%ì —¨b1Ç%ª —¨¸³DUáxñê&äºýrO‹?FÞŠ»þòæ~uãæÊÖ€µ³½½m1z—(0ÞyŠÜB Î7 àbŠn/@Ñ¥hèÈÒÉå}ò³‹mê*bÛ"­8‡nëÎça[HËØÆW¿Twõûxxy›¶7|w(¿ ±<Í%—b³!Ì‘KØ3>­”ârfÔP%7SJ®CG–.äØàóì]ElÛ¤™’àÂÔœ Ì6££zÂc+_ýRÝÕïËHäÒñ•±%üVdÆóH\r5±Ð‚‹5º%F‘cåé­Ù…Ô(E+boc'Eã§ÒébÛòmJ œéM×»X§mFb[ÇV¾ú¥º«ß‰móH]X Ir—YlðĨ#µ¤îv¤œÖ¨(:²4_üÎuÄt ±m–6Jv½OÝL©dØftTOxlå«_ª»ú}õ#¹€BT‚ît¥ vuFÞfdÆÊ{)_‘ìF¬³6ù‘רé*bÛ&Í”ìršº‰Rþ°Í訞ðØÊW¿Twõû2¡PžKÈ£’óÎ#qÉÕHO¾ÅÎ…ó´RPæñ5%8l‰Ø»«øÒ‚/ †ØÛ’hŠ?»V§®"¶-ÒJ)®¦© b™¶‰´Ž­|õKuW¿¯±Ó£$‚+²Ó%R± Î€2p@¢†Ó’Ú±·¨’”Áß9»›®"¶-ÒJñpgê¢ hÓ6#‘Ö±•¯~©îê÷UvBLéÉwW´*…Æ— ¥dFãgžìX ±·X ”ö…’öK»èۜŌ¢]ˆè¢[)iØ$¶elã«§ª»ú}‰êi¾c ¹Ïµ\Dâ’«‘@õˆ™;éÓJñ4FD‚"7ÐQ%Ì *M¶ ö)«öÉo>ÓUĶEZ(ȯ)Ý$9Fm§™ƒtlã‹_¦»ú-Ù? " r¡ën…ËH j‚,…£{á~2:²t§y2>*•ïC×P±îfP2sÓMÔ½ Ûɺ›1¶òÕ/Õ]ý¾FÎó9Rz 9K²¿Q"m  DÉ, ­ÂnóH½-âZ…ôÛÃäWRº‚ĶH+“›‡.Î!µÛ‚DZÆ6¾zªº«ßíôJ{ÙsV H;ý‚«Ý %b*ÕMº£xš ä*Ç=,f"!Óðœ2’½[è,:ø•Z¡«ˆm‹´PÐ  10]´> Û‚DZÆ6¾øeº«ßWÉyóßPrªÖA£D:Ejæ­HU®ÍõÝïÆÚ¹Q>Îs4¯ªkˆm³´Q<åì¡KåhÚf$¶ulå«_ª»ú}:XwÊNô!|-0 ™æ½&2ç0 h5Q€§è6á“q MO[eQ%útÓÃ2êÃ*Õ1…«ÞˆÞêëuJ_ä¤Û25§•R¨ÑˆÈP”¢›´ztdΆŽZ(1Uƒ]¼O]ElÛŠSdј®,³ÍH¤ulå«_ª»ú}‰§±ý*§]Íœº¤£ðü¤Ê)Ûcà”€8¥+âí[9å¿q90]Cl›¥²ó݉êb³cYšmAb[Æ6¾ú¥º«ßWi ‘‹V§/r±P*e¨ˆìŒ½GˆºYÊÎÝ5ôè_ª)2]Clû¨WLásïÐM”è†íd)uŒ­|õKtÏü¾Æš DD‡LO¶$)L_Ö$II±×$Y YÚÛÓà·K¡ê*Û&Í”&w!¢‹!r¶$Ù'_=Ý3¿¯ÒB û†Î¾Yƒ‚Ã8ÇÈO)½á0ަu€A\摲b˜üLÿºŠØ¶H þèéÒ¶èö ‘–±/~™îê÷UvZ·Ø7x«ž¤…¸¥V¯nðŸ.2¨ L ¤…Edƒq“§ ÕSí®Ão5TÏÓ¯Ye ;HÆT®x#z«¯×I’oæðÓBÁ.FI"Ô£N‰ŠI"Ët¥1øÙõEž.A2O‰Þ•?Sw2t±m‘VJ•cŽèF¾2Û‚DZÆ6¾úUí 7ý¶Yõ|Ƭ\|N+%RïD±Æ& H)^Þ9j0dóD'Zãg:]E£Ô Ч à¡»óe¶Ùfdï<¶òÕ/Õ]ý¶Y•Y›™yæg{wÛ?2âg>„êÝR ~oö&ø·íf1Øèü}øiø“/µ7yÌþä¿—·²„ù4‘}vz𿼖ÿ‚&b»}³ù2Þ¨ùGpÈt‘‚ÉC½=mÏÀz¾Ý¾=|{Ë£#+ÿìUy}EVþÙ£òúˆ¬ü³7å5WÜ](¦T5«ìókÔWþˈUûI+<óñphǧŒMyÚŸk?aìäùÙcj§w×csÚe.—¨G¾] ßĉÀÁ§]„Ñ|ö·÷¿`·¿³î~~·Ý=ÇÛžýïßîîï}ÿîùOÛíëÕµ/reÿ«Å-üßD*dŠá †?þÊã&2ë&¼ðéá¿’—ƒ„4‚Ô˜é|ÝÇß ™½ß±;áåFí|¥œZ¦~éxb»âÿWòŒñ?ðèVQ¥Ò«ä=íÛ7ïßamA¥‹Mö†þ%¾ûä½ðàj|XË¡¤U9>^9Ê_@-Êé ʵRìå‡7уʉš£º*—'(wé@¦rý³eöeïÁ}ŸùÅ&¡ùóYvÞwœþy÷–ûìº}{v÷óþÀ¾ûhÏ=XeþK<:eýy• ;ÿm®åÓ60?R3G…#¯†‡=Ôö4%žt;“ ÃC‚þB£–)1ð” G¬ºHžžªïßç·Ðߥ³o†‡„ùnO õ}Hæ»I <%Ô÷!axH<¹Ï=üQ¹HY endstream endobj 240 0 obj << /Type /XObject /Subtype /Image /Width 300 /Height 1 /ColorSpace 245 0 R /BitsPerComponent 8 /Length 832 /Interpolate true /Filter /FlateDecode >> stream xœ‡7ÔqðÆãU¼”‘-‰D!3޳׹éÜÞ£¢=T*{¦DCY‰ì.tö>ÎæîÜô7ôýù¼?Æ×Àùêž:Œ§Šà)£xŠžÁ•#¹;h® Ë•â¸R'´–B[¾à›¿â›À2ü²øÆòø† h}e|Ý7Üw° W[…«©ÆV×@«j±ßj±•ß1•u˜Š:Ly=¦¬]Ö€þÚ€þÒˆ.mD•þ@}nB}jB}l‘Z%-ÈâV0î}[\Q[Ü»Ÿ âm;¢°ñæ[Ð›ß›× ÆäþŽÉÙ›ÝÕÙ Íè‰Jï‰Jë…¦öF¾î‹|öG¾ìH€¾ˆxþ'ü(O„?„=ù }<öh0|8ú`(äþ0ôÞpÈÝÁw@ap’08QOßß º9 åñƹ{9ã068cMÀ˜ŒI(}ÒŸ6¥NùS¦o÷’füˆ3~pÖ7aÖõ‰ŸóÁÍù`ç¼±óÞ˜yo4¸à…ZðB.xʼnvL}ô¨ZWW£££9rXsèF[[£¥µ{ðàîý»ûöý „½Ô endstream endobj 247 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 228 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/DSdmPrecision_plot2-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 248 0 R /BBox [0 0 495 489] /Resources << /XObject << /Im1 249 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 249 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmPrecision_plot2-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 250 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text/ImageC] /Font << /F2 251 0 R /F3 252 0 R >> /XObject << /Im0 253 0 R >> /ExtGState << /GS1 254 0 R /GS2 255 0 R /GS257 256 0 R /GS258 257 0 R >> /ColorSpace << /sRGB 258 0 R >> >> /Length 4483 /Filter /FlateDecode >> stream xœ­\M¯%µÝ¿_ÑKXд¿í-$AA R2#eX›¸L`‚’ŸŸú:e÷7oæ¡+4wæTùØÕv»\vµ Û—[Ø~Ü~yøÛûÿlÇ~úS޼üõë«íÛÏŸ¾ùûŸm—7„Ƕþ¾¹@ýù‹GÔ/>ÿŠ¥mûïÃ×ßlÇö¯‡°}I~|ÒÜ_žhú3·¯Ä=¶-—ýÈ[ÎueËGÚcý@ Ÿä7àØGŒÛúËpì%Í8n@ë‘`Ù®yô½DàŸ^ É{Z (žbk{ ³€áY •º§1 žr*{h³€a.PûžƒuÀ(÷=¢¹í}êgÛgÀY •­EÀ¥@¯û±08 äZV#Oï‘>r?öZç+\:½Œ=ç¥Ó/žúN£<;]ñÒé¡ñ0ÏNW¼eo}) X >ú–^5¸öP¼nEZZÛ†Þì2îj÷åá³Sßô£ÓsÇÚè7S_žûæVË}³Q7'~YâQ¸âë*©{)‚z'ÔØÌœó>*ÐEJW6Ìõ2úÎ5$u£´H2™0¹I\êt1K¤mÓ›]Æ]í¾í‰R=eê™~yÆsOÜj­'Rå.µ´§¤=‰¶˜š o+{ì„:»hCbmL„>ì~À’ºõÙLÅÓƒöÔfÝ‚´nkÛôf—qW»¹'¶-ë¢$’“Æäv%^· ‹Y"m›Þì2îj÷=Þï”d‘‹´Õh3Ý$´v Aƒ¬-ä›Ì=rù†t6Ò{Ö§>É; ®!©¥ERö’'7³Ë÷º]ÌiÛôf—qW»o{"Vös™ü¨ú¼sOÜj­'j`ÛÒ…óºJh™§§©q§)‘ÆØ=i¥'‰@bmÍp IÝZZ%ä_sqnVcuç郬mèÕ.pW»ÕûGZ¨ç⨈n\"ËHäÕ„¼u9E/Of ‹”ô]–p¤n) É!g'Æ¥ÉN¯%êV¤ukÛЛ]Æ]í¾K`H¾¸ÓÛªE,’Æ*‘w¦¹Çˆ£YöÎ=ůÐÓªAC.Ô}±#‘Ⱦ׹™×áR½mÓ›]Ê=Ù}w‚oVhx œ¤JhøŠ9IvâÔ÷æ$+ÜÞ‘]ßY kHëFi‘t= Q.5QŠ×­Èä˜z³T¹'»ïB÷ClúN¸„6ã´9&ÿÈ¥wÚŒSP@ë<Šd™'—•âÔþ˹†¤n-­²Ÿ*—§Åðºiimzµ ÜÕî»Ì ÝÒØÈŠÔl'­‚,(‡zm#ûù ƒ£Àl@CXêÙm|ba< gD9Õ0^à_Ô*@g¶iZµFy«­÷q’QNæ£,à×EB³˜–$F# ì¨$A`HYá# ×—}”ÉU¤u£´H$@—нnE³„Û†Þ,5îj÷]vJ‡œö¤xE»® hušå¡p$›ŽÀObHw¸IŽ2¡O|"è\CR7J‹$ò9ˆsÅszÝÁ—Y´mz³Ë¸«Ý÷˜‘ÖþCwUY(—t^®±ëânЀ6É^ˆÖ1‰¹UOh çIÝ(=tç•úä>Nðº]ÌiÛôf—rOvëžÑ–žocž“‰$,‹YÊQŽuR”FN¾ø zNp IÝ8?g Mèž›º.„Z·¢e¡t½Úîj÷=vJ¼©)]¶®I—>— íùÈko{eC”d¸é8eÎ+¹¾ptâ\CR·–6IÓmŽr“¡nEZZÛ†ÞìjØÈM»1ªAö˜MŸë*I;q_Ó$ŒäR‚æ9ZÂ8ñŽúÂÛ`çò¥Î%€{Èa6ê„<‡´mz³Ë¸«ÝUµé™§FÞmË’d¤Ÿ™µŸRÐú½!¦ø§ÍÒKýÉ¥!>3½D¾·§ô$INr’º)üãL/$pGŽ6õr„î\CKzI%´}.Õ¹´áƒ(¤—ªTYÛ¦7»Œ{²Û'Sr—ŸN/¼dŸÒK&éš\¼vGÎTO)Ò4IÿýW\CKzÉ$QYã²÷ô’ -­mCovwµû¶'Þ±XħÓKIwñKzÉ$rRΙp>ö£V"K BÂˆÇÆôìg»s–ô’IÞF€[e ºizIÛ†ÞìRîÉn¤—ä­:¥—L2ØÚœò–Ÿ?‡§€!aT†ëɩտ\ %½d’ÌÞ\¼2ÓKË$Ú†ÞìRîÉî{¼ß¼ób¿¾¤— â2)îb‡ÍÁxö"O$—©¯r:b\ %½dÝ—Ç5H/EÑ mÓÃ.ß?N»o{âû¤ødz‰ŒŽã”^R‰œúIãpî’æ;$MÒPek]ß9 æ\A§ô’IŠ8w岇 c¦—iiizXªÜ“Ý÷˜é‰Öô’Iäc—td wø•2S@ÍÆCbuè)zeïn\ ™^‚D<$¸A<$êV¤ukÛЛ]Æ]í¾Ëì೪|N/©„Ú–ïãKæ/Z<½$ #Þè„_ÑÁZÓK&iœ¶—OHúL/ Ò36mz³T¸g»o{⛦øtzIŽ4Oé%“$öEœÆáá-E>ú@z©øG!äùe0=9NÞGh¦—L’õʸœb3½$HëÖ¶¡W»À]íFz)Iº¦—LÒ9B‰Ùoµˆ!$ŒøXÓô¼RUç-é%“$9+V.Ǻ¹ÏôR@tcm»ÞìRîÉî{ø¼@ýã9½¤’dßv%>Œˆä¨S™é¥Œp>”ΧÐ׃ƒ p -é%H$.û…c¦— ú mCo–wµû­™þø¦)>µiâÙÆ]¼¦—L"›ož›Uí˜é¥Œm>'ŒZšúÁžÈ¹†–ô’Jøc´ä\Zøs™é¥‚ˆmC¯v»Ú}ŸG{¥ØÏé%“ é*{"¢é?–j~RÆG¦Ùõ]¾}hI/™ä)l\z5xÒZÝŠôäTÛ†ÞìRîÉî{¬ƒô’¯òô•8Š.6\áH D¼µÐjæÙxfzÉÃ>ãù´ÀjU EµMÀál½ÏÒ§Ù5½d’.»gòIüý½x©z H‘.O]ÑHÔÀuäé%—$Þ/ƒKoCˆ3½oEÛЛ]Æ]í¾í‰çoùt2i\¿¤—L’%—ÜŠîª|zŠôRÅ÷bœ0jÝõ]–p–ô’J¨§x›d\N˵™^ª8µBÛЫ]Æ=Ù}—ÀPc¸SzÉ$]#ñÅ(Ÿ#¤È¿ M®§Uƒ ´¤—L’Ø~pC`¡§—Î"Ñ6ôf—rOvßã`gÃÛë5½¤’®Ñ,9*Þš÷,/#ÒK‚à$y“gzv‚ù†Öô’IªžŒ(·i$Œô’ 8ɧÞ,UîÉîû„׸5½Iä!âE¿ò¤½ÍôRÆÌ #Ièÿå\CKzI%M²Ñàò$ˆ3½T°ÝDÛ¦7»Œ{²û.³ƒÏ„ã)½¤ KiëÛñÓÃA3ñšw˜6ËG˜Æ3°¤—TppÆÔxô,ì!µVØnS›Ðª5Ê[m½‹“¬r>¼¦—LBó–?¸o’HÍI>9ôô’’ȹpÞ/C/ƒã\EkzÉ$úѶqi–§2ÓKQ*Ú6=,UîÉî{ì”8+ÁÏL/¹¤j°/ÙÞÁ¦8S@‚°Ãå,¡¯â•ëhI/™D>d—ÂKÞWYÝŠôø]ÛV‰Û%ܳÝ÷˜<§Ù­é%“ ÉѪ%ÖF±FS@†.3m=Wç-é%“dùBß’ ÷4ÓK‚4½$m»ÞìRîÉnKDÄ.ÑÅ’^‚$ÉÑM:$*Êöñ³¥—áDœã$èǹÎ5´¤—T©î\ûNé%A8—|†êÍ.ãžì¾ÇN‰¿rãNZÒK&Éú¥˜¥ù²œC{z)"‘ÌÛWNÞAßåsJp­é%“ɧ—7Â}¦—>wDÛ¦‡¥Ê=ÙQn/é%H²fì‚ÄæM?wB H,çȠﺸfdû-é%•˩չäóK÷º!i(ûÕ›]Æ=Ù}N/EñÌó÷íëOÞÔ{ñ!—ŸüóÙËåóKƒä¾ð7åeû­ËÛËï¶PýŽ¢ü(Ö½“Yùòº}Dª·—?>üñ¥´ò!d>F ï¤ìò\6Ÿeä.ìðü¶Ù³R¯*ûÙmË•©,ì8ÛF/cÀ—{•ïùÛ{•Y¾JÿõºŸÜk­ßï;]÷›z¿Þwºí7õ~»ïtÙoÑãrßé®ë?ô…»KWàæ |}s=ß+\ïB¿^+\¯šþt«p½EhúÓ¥Âõ¡éOw ×θãì"g*«0‡R7oÙûßÑÐäfìÊ~ÖnQ?Øé9mó‚Îìg´Í'æeeç·gׇú´Û\¾öz²æûMó]t–Ì"jýëþòú{ší¯¿Û®¯¾ýy{õ1M±í£ÿýû×WoÞüðúç¿Ù^~¹šö»LYÚÿd1‹þ™Ù¢Ê2pW¸-Ôüåiÿ==³N›¿'®7G2g­(&/ ¿'Žú~¡ÙIVnA²å•B /s¹J½jÿ'ú‚é?Òñ*o¨ñÚhâOÿ|=¶?¼~øÛïìF¼PùfD3îpFÞJÈ·ï2}'W9Ü]ÈéÃÉIoÀ/äü 2m„y[4ÉO¢GɼQã§I®Ï @&¹½ë5û}ïÑy_äÆŸŠ…¢3ï«ß®ÿ|õ+¿îßѬ;¶^}ûŸßhÞ½5ç]eÿ?1ð6èÝ«L<än©½Ë×ͱ\ãyä”x-ì%ø¢Þȳ„ãY‚¿Î-K `/ÁŸP´:K8ž%ø¸²-%€§¥fû;bóYøNy>=‹—ö°%Ïf»—ö°%Ïf»—öÏŽsþ  J| endstream endobj 253 0 obj << /Type /XObject /Subtype /Image /Width 300 /Height 1 /ColorSpace 258 0 R /BitsPerComponent 8 /Length 832 /Interpolate true /Filter /FlateDecode >> stream xœ‡7ÔqðÆãU¼”‘-‰D!3޳׹éÜÞ£¢=T*{¦DCY‰ì.tö>ÎæîÜô7ôýù¼?Æ×Àùêž:Œ§Šà)£xŠžÁ•#¹;h® Ë•â¸R'´–B[¾à›¿â›À2ü²øÆòø† h}e|Ý7Üw° W[…«©ÆV×@«j±ßj±•ß1•u˜Š:Ly=¦¬]Ö€þÚ€þÒˆ.mD•þ@}nB}jB}l‘Z%-ÈâV0î}[\Q[Ü»Ÿ âm;¢°ñæ[Ð›ß›× ÆäþŽÉÙ›ÝÕÙ Íè‰Jï‰Jë…¦öF¾î‹|öG¾ìH€¾ˆxþ'ü(O„?„=ù }<öh0|8ú`(äþ0ôÞpÈÝÁw@ap’08QOßß º9 åñƹ{9ã068cMÀ˜ŒI(}ÒŸ6¥NùS¦o÷’füˆ3~pÖ7aÖõ‰ŸóÁÍù`ç¼±óÞ˜yo4¸à…ZðB.xʼnvL}ô¨ZWW£££9rXsèF[[£¥µ{ðàîý»ûöý „½Ô endstream endobj 260 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 263 0 obj << /Length 1657 /Filter /FlateDecode >> stream xÚíZmoÛ6þî_A´_œ¡RùNjX?4Ht[4u±Ý0(6íhµ-W’›õßï(R¶,¿ÆŽ½ kS˜Ô‰º;Þ=÷BÙ FW­óNëå%PF’JÔé#C­)Rœ†”0Ôé¡í‹¤ß?#¸m23.’xxP¥ÛEón–L w=Íc»hpØ¥Ž{»/~×ù¹z dÑþš›ÜQ’±o~yäæ³»¸OŠ;Ïýγ¸¸y{ý¾º?‰»g·?-Hú£óc ûÝ¿¼¤¢¶uز (àv.Üν3c÷HHŽ4jŽÙ­»usOEœ‰šcùÔê[ðÔ›Nës‹€†D( µHF"ÄX î¨eo0*-Ay¬Ê ê·Þí©c ‘ #©µ¡4$ØŠ”a‹JKÜÞZ;€@¡(•”tô?K2/µ jôQÚ3CoºÃ qÈ"Ö4,ì§b]?.«8ÒüH.’"$*ZtÑ«Ç3· ñtÍ­xh ÑÐD¡äôH‘JEƒwn>¼Ù”P( •݃[ý;¸LT\DížéÇÓa4ò(nǽ^R$)¤¾áW·¦Híè³›% ÌØCó«¼¾H²¤{74E0^É8Ùälãr˜\{ðÙÌäE2Š ›TcŽo9™%çŠ;c¼}k³hÛqp[±.Wg&i¹[tŸ =Ù.×mϱ›Ž&ÓÂôÂYò$- ÞMr…„†  òƒW/ÀÜ—:‚9ÄÒåB+RH€ÇuDæ@z˜VÛñ±W×?gkëŸ+A±Û0“*$Ð$”êíãÑÒàö~ùô1˜¶ö‡V6Z9‹à“@Ä•k›Ä¹”Þè2)ö´«é|t÷^YŠÛŽÉ“Áø’^5"bûŽHìÒô§ÃáIìñÅd·inNc½àZÖ1‹I‡O×q.„œª{É€9ªâØý¿±%OòZÊg¡Ð&@dþñü¹C™Ð%Âg“ïšÊŠ á ÕlàÐWV);¹¸vcÙY†á£íP§¡{kjPŽuûC¾¬I:ö“ûø«›Ä“I–ÆÝ»GÔ {…è\!+©“¦ŸÜ DXºynºé¸—AüczðüüéA¶ÞƒÐÚªÃ=ø$Ú‡FïЀoï‰íks^=@nÿ2ÝÂÏûnìã<÷%qtñ¾ïšŠ’S­É®8¹·vF}ÚöÝ?_¾±“Êûñh2„›«ù5#¬=OîÅEì¥t»&ÏÓ,ÿÞo Ž‹Üv*þÜQ]QÝñ¡Š'«‡œï‹h,};°°~… Ê¥#»¾ŠV|—¶Áü=F¡†žp¤¥Žû%»p^Ýd3ëŠûÄ5 pÀpœT{ñóæ,”r ¯LÒÌíò¥-™~?é&¦æ•ĉÐúg¹¶I\.ík"æÊø0x€Ÿ›×ö|ÔEÒ©¹àÎĽSôýG>Äl͇c,O„ÅCs6§„—Ñ\¢´/­uÈjM {z@%óvßÄÅ4s J®v~Ü÷Õûk. Q²q­׺qù×4”ƒ·Õê BÜpy>cøG…¬E†¡÷ÃJU}Š)¡ªvpVRFi´©ˆÑ­*è?Î8¥D²Ý Ta̰Öx“ l› šÎ`‰y$éƒDk¡™Ü¤ߤxA2Û’–ÀÂå”J¬#NT‹*ˆ­V˜©€‰Ô‚Ê98v 0i²Å r«æŽÕ˜E?€À”VàªÖ©À0ÁUøbÂÉn~ášnÚYu„yÔl’:ž×æ!°ñup®'TxÞ€¾Œ´µ„87è'–a³–0CÚv`Õ1°Ž0‡Í¶MZzŸ‘™ïx—»BG±EyþîïÊü­©ª7U fþÖU=•®Êâý·ðí¸0Y×LŠÐ'þA–N'?] ÿÝ "¿Uƒ+ÈI¾Rs¿x²_¨9N&–…̉s!Ï<øŸ=Õ/ÖŽùÓ‚Ù/S~åÇ…„â§Q u¨wqIöQþM§õ#1—ç endstream endobj 267 0 obj << /Length 2409 /Filter /FlateDecode >> stream xÚåkoã6ò{~…Ð~Q1Ë·(àúá²b¯ [W =‹Ž…8RÖ’7—3ʱ•¬ó¨í¤¸Í""‡CÎp8œÉp&H¾þYœoÖãçãwG<¦ä»£ÓñÑ7ïužä,·Ò&ãib8sN&™–L •ŒËä÷ôm5 žú…¯»ª˜dæÒnQÔídQ]uT_¶"•`E]>ùçñ}/ !LzÓú– UMß?ýcÔúOT¹®ºY}‡xûñÿôíWÅäXòôbƒÒ¿Çÿ<âO“Ëu¨¯}ö]ð“±ß> X žˆ^ôVfmžL.®¥a"Ï’\0Åm²ðÉôèç'3õ´ ï;(œáIÆrÃ%*\®˜†’…ùq““Â}ýõñHK¡Ós_‡%K,ª£Ks™%œÿ¸f™³Éh ^Æ Éu:õE·\Pw#™ÕÙc»[.Óߨ‡ºó‹‰¿êØñHqT¡E³¼úþmè$4Ó*ƒ‚€©˜[¾±³ ÏûÓóšÃ?ilè\æœg¨¨æ.UÌ*kâ„€œ8¡Ô&á÷/ßÅñ3Ò9eTŠ`ÚYçŒTÛÆWï€á¸MGœiX)åòÕ ·Š³9»I@o#Ò1B¬¤…•2‹,=“+°Ušo›€ypýø0ž“*ÓyΤce¶m|û ÿjſʕʭ[ñÏU®y4E{ÜÇÑȯ¾ŒÃ8 7.ƒofWáþ&¶+lœ ƒ°_ac‚N%#eXf)ˆÅ0€Ñ|vB3ù}$”RéøÖ$õmWÕçdÓ§ÇŠ§Í‚*en‰@Cׄ&?xXV“®»s¿Áè7ï¥YsqršÅɽ)æó@_[<ÍjÝ„¦µÊ%Xp&¤GÚ¯Ý=M½sM›ß^›ß¡“ZÁR$ bJ„ÌÁ rŠPY\€GýH]¿èCiÚ„>4zð -+ð £–I„DçÒ!›Á z_DZúNÓà¢u¤W¯@ÁkeèµØ}‘ëiƒÉ2Umç¯p:J§$KOð²©c©è¨zàäB9dbÔhCa=§ÇúÜF—‰Ø×3_¿ð†U vNCægCrµ[¹ ëûÑn\*° ±d‘ÜÏÎÂjäÌd2äŸÙòÏ¿l0îØÕÏ,„³r(½+<Å5þ%ýþ lpzOkäðÅm®Ñ·;“·³˜Ô¼^yçœY%†üíÕÿçxªµ)ïñÇ_ß=>$s6RÂ2+17ƒÁ•¤¶x.hTÚ,Tðÿ-.¯æRióhG±EÇÌb9/ ±wTC³Hd¶ ìnKse2±²nÅ[U‘£O¨SæŠKŸÿAörx^n­[4˜Õj éŒáoÆ?ÀG½T8`…òEMmr1*CÀt]ßöúþ-vbøW?o(‡Ô& 5™U`¾©ÒÍ‚ÿ£Êrxƒeœ%âÇ¿°‡½&a¯éÜ‚¡wÑe i´’H>.Ÿ‘,¿¾7z!A^ϪɬWq°ü´‘Ҫ̀r•Õ¤èÐg6ö “f¾¼¬[‚7SRÜ€7¨ô!ôÐõW™-Vþ²ùìK  Ï}³ˆCѨ÷†½²Aä·Ê˜©VuôõŸ–xlƒE õ¢*%œa,µÎTPŸÞ|«à¼÷¢RHÒ)$ æ”Af_Ń毶T!‹k6rd¤Idz3¢(gQÌ5ìdZ(‹A*š¨PÅð®h©Ü âü†*E¥B`<')•×4W(œ†_úURZTEŒ)±T /¢àËm0Ú÷ÖÂ"Öƒ¾—±%bTÓ~C¥ ì(,étºh. ÂÙйA…§H odúSÓEäÀÖ‹ªœÖ’)™%Ú &À»õaêžÂ$gÀñk«Â å×ñެæM¸$¹.nþDÈôbÂÎaÒF‚ ¾°Ù¢Íx·¥Á÷ »ãX|M &ójBMÁ!Ç‹5àoŸîIæ`×ÅýP¨)%ÓÖôfô6µÅd7æÄ1|,â!oHƒ¯®Bbß`¬ü0`U-5.[ùÒKy/Ò=Ï<DÒA2A²AÊÖ‘^‰Nµxæ‹ò:¼çqõ ïPÛñäa»z­aû^úþ–CˬG™¡Š/7…|óïÆGÿÅ›ÛN endstream endobj 273 0 obj << /Length 1502 /Filter /FlateDecode >> stream xÚíZKoÛF¾ëW,’ ˜›}?€öÐ M"mW7Ç(X’’ÕJ²BQIséoïì.i‰”lÓ²©Ø€D$gF;;ývùE3I"Û—bÒ|®.§ï ½¼ ^½YlSh4F’`cÒ‚aF9eè,z3‡”Dy‘/Êi2ÆL›¨,’Å*-¦Ë2<¯W‰3š cgdÉ"ënüqô¡þø 2ú¶ÊWA2]„ëéo?Å«üsxø:-/ªÑ/ª!Þœ¾ÿõZ¿LÒ!#Ñ? Oç£_än¹ÂVøç­‹·ÞßÙúçÑàó€B)¢uê•ÐXr‰ÒùÀÉ“˜Z¤Ä•£ñàã'u·€û³ö ' ÒØJÂ\ÃYŽÜ)K1‘64ÜË—ÃX0*¢I¾ð%Cʵ£A­‚ÍŸ^.°6 Å[ò)tœ"P÷Yáo¢l\ ¶ü’ÌÖÐ(Ô%Ùß~ªadHo‡‘«ï;eÌ„ÀÄhÐSˆDn¦í<Òpyûz² ð‡IUÉ…ÂÔX¥™…Y0"¢J! PLp‘ÇNãM13’pí=’ý®Ø¶+F8©G¦a¦,3¦ˆ«µä\^;JͽäW|Ë“VsY¥ÚŒk¡Dí©š“‚šk¨2Œ[%Dc-´åÆKÂB챋+ˆ{õ–É-|ƒà`AIËBp#–E«dîïx”&‹ ú .&ªôIz1Í¿äY­b:úî³i‘§å¬~Ê?.ÓÅ$ŒVÖëÙ,ˆ²|5T>æIYLÿ ÷žU_ªŠXƒÚ×*ê}ª‚¨BíkÙ=ª6  C,;±5Q‚‰†d­7@tÈwaÀy䊃G «êdù¦MîXÁznÎë)"piÇùÊû˜ö·'c€‚0p…8É:°Hæq@.9´.m®Ï¼Ì üö5®AÍx{_c‚,¨§¾±…›íÏ+ÛíÏ›¶@i-l®[¿nÄ ÖÐÒv(1t‚/”Óû¿ Ag°ˆê+£ÝÒÜÂ'…öö¶máÆËü2Ëg¸BÂCüuͤ›kð"O²ÇzBºCûFE¾ZÏÊãí 'Ç8©ñ#„CÛÞÚ‚Ñ£wæ0âΟ¸SÏÄÝCw¿C“pn¯˜8w¿^yÚ òý4ª(–œ".ÁF­ ' ´B/„“s pË%!Kéåâ¡4ª%6ƶbÐ…Ìô†eÇ›•ERz®aÐ4æ”ï0h%‹…âóuý(Y×.Y>¤Ñ –Aä™Y§œ®‚*M2K׳¤tì¯Õ}VžÞu²d¹ôž.“ô"¨ÆÅå<`u¼©°ÍÕ¹éÐ:ï°06a›¥iª¨C‰#?‚¹Âì®x9f°E» ‡ÌqOAÁ¥±qA1áU"&³ù‡ÓÑM%å ¬u]Òñz‘–ÓK_&îþg0d‘À<¸—D°ÅZùÜ ÷«N¨8rÁj?y6ÉOoì4‹]¤•ùÙ=æ_ O 8 œ.¥3Æv8]ª°áÏœ.ƒÖå˜B\5oÁ×Sz×Lï[GçCú=ø‡^©ÔÇF÷O7¶Î©ÏÜËwç^îƒL²/µËþ¹r¯}îá±¾±·yð³z~ õííâÛ¸ïV|¿•Úa¿;Œ%;Y©NVºaÕsÕîÔ¿[{&ŸIÀG)×’€úªNßû×{·Œüüë½§Hn^½¿RRaÅ Š Ç\U¯W”7Þ¡á}õ¤¹R5 endstream endobj 280 0 obj << /Length 1374 /Filter /FlateDecode >> stream xÚíkÓFð{~Å ¾8^öýøÀ‡ž(ªTåUªÚª2É&1ä’Ãv@üûÎ>œØ¾wéå ‚;É»žÝyÏÎ8-AOGg“ÑÃ'Â"‹­b MæHl CZ0Ì(G“ú3{\ÎçcJ2W¹uS«qδɚªX×Óª¼lâû¶.<Òbœ{Ô+Ö³ë#¿œüÜîTfjWGH¹Žãù/?äµ{_Þ—Í2¾LG<>þâ·vý²˜ŽÉÞô(ý=ùiD’ôŸ0ÙD– åB‚ä2J>žmÆ9W4Û¼j ÏW,ô“ÊiLÒl»jê„8k«ò͘™Ì­Ê%³øœE¬ªhÊM:ÍÕMýÀÏmöÁoÙlã²xç"v“P§ÅjÕcfóíz G­£hØ J"XpË(Œ”I0pdéüigWìíê°ëÇÉèíΊˆ­–HY‰ ‘hz1  :&Z£Ê¡ùèå‘,O•il%aÁ\\”  ¨°µ&¬r5/£X =ˆ ,˜9‘D@R[Ý—¨Žõ ·e[ ;yÑûe9]úM(ç’aro )[55ÛjíýUó¬ðƒÈfE“f󪸷vñ-†™ŸthV[‡†iÝÀ¼nÊiðj¡™[TÎÕq5ć'4:Û\,‘]æïŠÕ¶E ¹ÃówæÖy…ô…x]\”ëX°,%˜<‹œM—¯o®ZDø_D’³gð¤iÃìõ¶n\Úµ§ìßæ/f_\1]ÆÙ­]œ½òëüÜ‹bÌ °Ò€Šîœhé N2슥¢Xï—®e& ¸Áp nuxévb™R.Ï‘’SñiÏ?†Å«žï)2 Å”³¨ˆ•{çV·Î²;5C™ÖF݆HÇqØeOaÍÜÁEdĉô¬²}…?º5eKHd¦_ª²¥Â‡ö¨ÅJ°©(JAûê¾7wÅ­i\K¸aÔ]†,PTFöE‚[ÅÝ»öe…wiŽ"Ô3Cpk{„zC«§øÆØ=¦BXpeCw>Ì$¦pEkŽáŽê7`êfŸÛhk“X™DÜ!ð ý-ÇfJpÌ3téŠÙQ6õ“îs‡Û}&ÐðùQ4®+j(:U×iE™=81•\Ö»JOJèÑ ¢˜¾JdÜñ‰³“iNj zœ}LÈÕÞ£¢wEg÷ñ»äh§Áu/äž¾2Ü¿?Ρ±Îö…±òß ¢¥©6þ'Àc!‘wà%ÔÜ”è)¢g4h|4p×Ü.À:Ù ÊuoÙ<ñrú8Üå{†pÆ4Xñ'§ý¡cª|aúMŒ—ÚS¤qxr¶XøcRµ€¦"̸Á#Àh¬¨­%‰ÓF¯H—³X2ʉu9µ‡úŒ–2û,e“HøFÒj8­G¤eÄt‹PZRhv9@Ô¡Æ­¥Ì?GÙ°–æÐîsӧ̰P†Jãr’ ª,)#@v¥Õ©næÃ% E‚´©$ú#|Bòt8ϦÅ:N.W›&Î|ÏÍE¶„~y³ðw€†F yÌÞ;4Å€ï{ÈöÓ“o-}7¹GÜ÷Ò_EÅ¡û³rXcAA.µü^c!)$€DÊ(à9¿þ¿VÜE}rôÍñuš üs×SqP;£ K½{¾A¨Ò£3 Kí¾xøüB ÇpÝ—'¨=áÜHLÀ£Bþ‘ü[§ZZCæK~4Ø8UXûÿÛ÷fàËn¾íDH $©H„r—SÍt56;‡øU*"Ò/t!2©8 ӿ{D endstream endobj 276 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/DSdmTest_plot-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 282 0 R /BBox [0 0 494 490] /Resources << /XObject << /Im1 283 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S]K…ä\.}Ï\C—|®@.Uî endstream endobj 283 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmTest_plot-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 284 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 285 0 R /F3 286 0 R >> /ExtGState << >> /ColorSpace << /sRGB 287 0 R >> >> /Length 1194 /Filter /FlateDecode >> stream xœ¥XKo7 ¾Ï¯ÐÑ>„z]4 ´hk£=9îú`Ä’MPôß—šÑ®4Û¡³‹í05ÒGQ|Ý­C÷ä>M¿ñü°ÿý§÷°Ÿ¼÷n÷/ ~{·ß½ý¥þorÿLï?8ïþžÐÝêó4¡W÷ó4ÿÌCð2ü|Þ¹›Ã\  ä$€'‚ ’«ÚŸîå[;|uþc'ࡹq¬<îü åÛHÝó$%C ƒüqºk Ä „»B“»„"]¡É]Ab‰]¡ÉU‰;Á磸èU"XŽ ±+0E@<*Ä® ”ª ±+¬yÙr ‡/bg„Ù¦Áh‹<­è>ó`´Elâ l²ÈU!„xÜo“†í&†’»Éš8˜,ßMÖÄÁd)B¦n²&&KHºÉšØÔ±$Tçç¢#£Ìκlu±•^ªÇήª‹DAß.Ëã¤Æ‹É€P†T¶¡Beµ‘¡øíièõêD Sc …•êBÛ2 Á1æ+±í «Ñ·'R¶HPÆ:,õZ[$û-85(ê{ÈÖÄqEb^†ª‘,ë³!A²xD¬z¦ß°1¶Ü#Ëêê– ¼á‡˜5Yв8h´ ‹ƒÞB68'`ƒùXÃö6¦)A „Áà@˜!~HšG¢Á4H'‹{H† d‹gÈ¡š‘ ,Õ÷mL3™·8„P•𶱍)ÎâP6.%¶H,1ÞÀ ˆu€™!X$²&J‹D TÖ–PSHVdfÏ ìdƒ#ÖŠÅÀƒ“¾[QµÐðÖQ0e@ã(˜ ÐðCæ¹‚ÛÆ¤&R `ÃYr ¨Û˜Öb‡Xë m,j‚·3G-e,Q“²·&j},K ²i}­3Ô¡X,´B(ÖI®µiZ6üP<DK„uDÈÏõAB´F`ƒ„hÀ–ŠÖb°­‚ÅBk„`±Ð!~(š¼­JM´F°J5Ñ='ÃEK„lqÐÁ*ÖDëƒb¸¡D2‹µÚ|¬‹µÑ Iëxà %ÉIµÖ±›û¹\úÁÃ8w˜ï´9p÷Ó±]œ‡E®.£Eëý¹vWšö¿ìö_önùwíë×ižÙÇíõÕ~ñùµGyV W¾6›}\Ž'„gYR¯–¦G Ø•®BŠõÛçLF=-dfcA¸t6Õ  óìpùÚ¢)J;×:;õµ×m˜»ñoŸÖi7®×àŽŸW]èÜ‘Íè±í\u¡?v«&´ãǦsÕƒVü\ø.Š­•¥Ú»<¯Úܱ¯mðªÍÛÚ†¯ºÜ±«møªÉ›Ú†¯zÜÑßíãšX5íh‰ Róñ  C®=Ú8.òòRKäqz¸`uÖH¤1cœž.X½^M}:ÜÏ *ÛQ”ÛªùdÕY&žïI©¹P}õë›?®6&W}üºÛ_p÷·ã.XpXåͰ¸¾ªïÕ6†ã²ä»Ï»O_w/×NÃÄÕ¿ÿ[óìgú;w;& endstream endobj 289 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 277 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/DSdmTest_plot-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 290 0 R /BBox [0 0 494 490] /Resources << /XObject << /Im1 291 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S]K…ä\.}Ï\C—|®@.Uî endstream endobj 291 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmTest_plot-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 292 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 293 0 R /F3 294 0 R >> /ExtGState << >> /ColorSpace << /sRGB 295 0 R >> >> /Length 1203 /Filter /FlateDecode >> stream xœ¥XMo7 ½Ï¯ÐÑ>„•Hêëê ` E[Í!È¡p7#k ÙEÿ})v¥]$ÀjÃ}¤Dj$Î{væÖ8óh¾Lœñùåðç»óp˜XkÍ8žüún¾{ý[ù5š§5ÿLÎÜÊçqrV̯Sýªƒ·<|}Ý™›c†#$2ìÁ²ŒB–/NÅí½yúQ†/ÆêXȈfK<õ쪀yn‡Ù™ýÄ9Ç£ýyºkH˜ºC³»y™»C³»‡ºC³‹ƒs¹ä8¸?™³_q@”ÉÂÉáhvBÊ'‡£Ù$<9Íî°|ÌsÊÁC2žÍ^‘K\6m¶‡MË ! ›6ÛÃžØ h‡=™íâ;åÛ¬!Ýh!rß²f[©$sÚ²f[¥Û·¬™Ã–Ŷ?•£Ùä`±/‡_¶ÚJ~\ëœê¼W N¦tèç£xŠwt àX9ƒvÆdg%¹qR©Å%†hµ¸ie¡Ååê6`¶]\䬄9+G%+ë9ëÁåíI]y¸I)Þ9JJ ‹å®++Ê]ðê¬(?GeVÌ5Œ’ŠEÈQˆlP9€ Z¦ÒÖP ôr›½¶¢OÀ*¼^Ëg¾PÛùD†ÄÚ¬rM² &*wh{ÖÁi˜œ?$åü»ìÔÀ ŒÛZê]í! R:Q t5±íMEiìÙ)Ò²­výSj3°ôL% ²ÖAVn2²ô@­ Çò‚ÞôbRž# I²vÍ1d°Jóh_Á" †%¤bXk˜äí­]sÌT~V"s„¨$m7yewHÚnÖî9ªã·+‘—8K€J ™ŸXËFÈ« U>¦¤JB”«L$Û¨aÒv“:©ôÝŒZ:BÓ¬r—ÉËËLkäåm†Êc¦@+0F†¸"Ã’Ñ­HÀ˜ëLQ40¯hÀ0«´Ý¤JßÕxIßÍÊ]&! *`kUÀ¢P¹­l“J b­?° +0fƒV¥,}W£,mW£,m7«XTY³[±€ó+0ÁYgUé`\±€aÉàV$`ÄüŠŒ.=7)Ý¥ç.9@!Mò®èÍ}UsÀq¬Bô­hsÿÉß;ªÊ:Ìv9pRcÉX*»ß›+'”ûÛîðí`æ׿þqzS¦ÇÚÇm!û¢®¼;K[¿ô‘BOÂVô-¢´ËŠÃªâjÓ¬¨+i(õÚceæsB S•Zbýù±BšËJ•ÈÕ}¾`á9˜…[‰¸­Á§•—¨zýÇÏé™^÷½ëì:µj¶Šva:êÔŽw]:ÊÔŽwY:ªÔ‚ŸûèªÄ&v±0·ýBÊ·Á !< ߆/tð¨{¾Á£ìmøB[ðÓ§[x¢$.-Vˆv=ÝòãùçÌ•—sZ„ãEg<E;†ûK®—pU»L>^°:‹.ÙÃÝPûyíd»R[5­V­6Šª^–Ë ‹~¸úýÕ_×FþÕߟ¿ï×Íýí˜À «¼—ÿry‰ ó’o¿î¾|ß==\éWÿ=[óìÏô?°èB endstream endobj 297 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 302 0 obj << /Length 1475 /Filter /FlateDecode >> stream xÚíZmoÛ6þî_Aû ËWQ¶ÝÒºam CZ Š%ÇB-É•ä´ù÷»#©ø%Î긕Ûn…S<yäÝÃ{‘ͨМ¶Þ4—›}ß¼|:b†ÈÓÑÏg£G§*! M"‘³)ьƱ F *¸$g9NŠétÌY7yÕé| ]“Ví¤)ë/Û™.Ç!²:ZZeû3¿8{ÞÏ\×mÞ:JQ¹öåïÃ6ç:ï‹næWŸù%N^>ûíU?¾H'cÁ‚·’Þœý:béêÑ©ÐkŠiAB¥AOÚéét,â Æ¯fª„æžë)´:“t Æ¶{ÝD×vÊÒMÒÊ1—é[¤ç®·˜×_å5Óì"í%À;æ×šU~›zÊÀ]™àÃíѦ¸ð Õš0ÃQSpîsšh@<„ŒyP_´ys•gØÎÈH†ceÚå¾ëìƒ'E3æA1™Íó.,—ó®¨êÒ GËÚî Ë}+¸N“vEÝÒq¨ã$øk+«0䜥W¹ãéê]ûÍò×L*«#-Jzó³$&Û­‡À®!„MçÙní¬ÝC0ëÉÙè݈þá„+\D†S–h2)GH ÕL²˜1¤ÉÉtôâÀ-ÚÛ¬1 &¤(Q% ȔűÓÊeS/V]BÒDNc¹¡¿-YQÐäŠ~•6Ez1÷ú»ãB€¦aÄÎX8”¦exwú?࣠ÚY½œgŽ\TY1Ô¸^ê®Üt'ÔL›ºü²æSî:èuË~\ÑXGÃØE*pCökÓ^Ÿ~$™PØûÖ‰¤è4 -f[h\Ìsô7,ëÎ]ø’’â:_Ô"5”`Iwí=ZY6©æ×è+ÀÑI p@ÎÊÈ8O‹èü¬£•Qdu•;r]Ádû4íý¹›«tù¥õ¦  vî&®£Õ:*¥ƒ?ÇýÂ0oV[9uë%}qW¤XL#¾H'”«Á Ò¡HqÊ¥pVz`ýЃ5¹¡ŒêM>©ç˲òv×öoºû¶¨&è-8•[s¬e â.œ Vñ uƒ4,³MwéýVÑÚ€ƒ6p Œ9_ÚGp°³á*x² zȶ°Ók/Ív zU­›ë÷ÒJ×s¡>Û¿|•2ÈŠ´¬mœ…N;KÝúl Àö¸u#ÖÐæÒ.ÖC×{ßCQ*ßÕžÚ>ànq¬-.«#&^º£bCÉ›z„l4=B·È÷æÞÀ²OYu$i¬âËè:yb0¼Ê$Z!ú~›ºß‡æ^ÿ¾á]ÿÞyûI†-žP)¼×” ãÇí(ä<Œ˜~ HlÐq@X€o7ßònWR`Ó;´ñ½ÕºÙŠFC Úºë_‡EöWSo‘ó-ÔMälþù,ü0ô~Wé| þý6ÎòI“§[/!í§ÃàdSČÃÓq%äôñóWOŽ)å½9ª'ÁxŽÉ&Rǻ˻h£¼Ãï¦`6¨ö™Rdߤ·úf.øI alO“œ|y>ô±ß Màž@µ)â«Îû´îþ€œ½ö©ú1ò‹£¸îÕ½æ ê:ç Ì(2Ÿr±ïïæmÓ»*S'ûlo—«ú艎£ì›×jø&ÌìµµÍ÷j_cdu+EÂܲ"®„lõÃÆÖ#”¤_KõåîÍ;d©i"8‘ø6Wí¾A}ç^½2²öh‡úyžðèY‘“*áƒè+Áa¬)'J|Ï}«<—œjÉ¿ýò|ßt£–Þáš%ï¬Ý%þÚ¤Õÿ1\ ’‡~¾p5DfýåÂÕG¶ö=\v…6h(øm6Ë@û¦÷~Ðë®ÿ!ÛâïᨄïÙÈàÙŒiu@2bn’ÿ Ðíø¸Z{Ç¿U4 åÿ‹a!Ìõ–€ýÞþ„Œ endstream endobj 298 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/DSdmLRT_plotProportions-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 304 0 R /BBox [0 0 992 491] /Resources << /XObject << /Im1 305 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S] …ä\.}Ï\C—|®@.U í endstream endobj 305 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmLRT_plotProportions-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 306 0 R /BBox [ 0 0 1008 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 307 0 R /F3 308 0 R >> /ExtGState << /GS1 309 0 R /GS2 310 0 R /GS257 311 0 R /GS258 312 0 R >> /ColorSpace << /sRGB 313 0 R >> >> /Length 2607 /Filter /FlateDecode >> stream xœµZËŽ·ÝÏWôR¢6ßE6RbJ8™²0¼0”ñCÐŒ”ÉççT±XMr®¤¹Š½ð•¨ÃfëO«m·W›ÝÞlÿ¾øûÿ}uÿ—Ï·×÷v7Ælãïýë[_\ž€/_üþ5oÿ¹øîûÍlÿº°Û+ü÷æÂLؾ¹à?øÇSèÏhýqw½=ïl¡ìÑmÖ–=—­»û²ù`÷šiÞ?·ÛÏÙøé~<ö`öêÜ6þÒÌý±³ìAOewf»¹¨®îÕôñÛ‹K™à|Ük:&Èø˜àß³;&Èx˜íò0¡ Á×Ýùc‚ŒiÂLƒ˜ìÃî‡Êx0ٸݔÁä6&¤º—0LhãÁdŸ÷X“Ûx0ÙÄÝÇÁä6f“$¬ÝôqHfÏm† ˜Ô2fø”öbŽ2f„Ùc†Œ‡ÉÚ=ùc†Œ‡Ž3á˜!ãaF‰iñ˜!ãa‚©Ä\ˆ¿SàZXã•÷À‚ÙmmX¿àÛàbêyÉ¿Œzl$ÛõXÜ6<ÂÈf¼îFPòdYÆ‚VŽTÊe¯qÆ-ùžQšÍ²´Ç*}_´ná2yw±™¬œßá¿¶/—ÙÙÓÃ5éËcv»[LÇÝgnOnyçÈœjØS]_SÑöå <{¥bßâòâž>…íÝÞÑÔ 6"‡ØWðDüâÈ”8-–BfNx!73ZËîÓò0 ˆÀÞK$²m¼Å{ØbÁ¹Ù‚”ÂÓExr±×4…šÉ3óšÑ©7JjÀìËÜÃ3ÃÓkðö_cÂÖ=š1âÅÖ±ÍGøC|Iÿ— ïȔɯŠròp´ØÅ%°×ÈËKmé£DVC>Z|é<µ!5¸Õt§8Ɔ¸Ç5ÈJ؃,ŸcC‹íß®ÀÅ Ñ8mNº¼XN¢Ð}©‘õô΂I»]vÓIIѰ¦Ï«ïI6n“}g"$ÙYö´Ô²³œ{Œž’P‡€Œ+U8)Y˜T¬R”èïm¿”§–W‚ÙG@ÕõÔ@³û¡K”ÃÓz$¬m-Žþªî!SYжëéé"ßÝ×_½¼t1o?ÝdãÀ­ RdõßVÓ@úçº §oóPGlŠä‘¨êH­Êèx!-à±£5ÿ[lŸ•\„lZÞKžl«x/ŽÕáÀibj‹~O¡‚\i}SÜB1üVq,U CÓ\Ái OÚ€ÏÊÈûŽ3²§à&[;ŽwÇãH"¬8­¡NtJ¡¼—£)'…Ølí8Bš÷±iÊx§5 3z[¦º,smÁV‘å‚⥉Ȇr½¢ô|*©éL¢ŠÚ¹„RW}ôÎŽã6ñØqÂï8­á UÕ¼Bi ”·Žw^ qp6ó I!ÑP^“ãT¤¼ ®¼FÏvN¼bcµ ¼B 9ãt^W^‘KùàŽ¼’–¸Wdæ\^W^¡\àlæ%R^!”“•WÁ•×9þF^IÀëÁ+j‚æí¼‚#Ž½×ŒJšUVxÍ&sêî¼u\yEö¦‚gâ•֯ش5¯‚+¯d@]x… bpðš3ë™ò*¸òš¸šy%£ÜÀ+^W^iÓiá5ZÊ—¯1òõAy\y…®$³ðJ™©¼&ÔÉ$ìÊ«àÊ+ÎÅßÈ«EþBŽWb-ª¢Tî:Þ©µÐÈ\nQäsÍÞ¹EAN9@¹¼s›¡oTôÜŽÚ~²ðBÙ‡ÒÌ"weº9h•5K׫ŽWz„Æð'ÕRg™µTÊÐ^#tzæ!ŽætÜYñü‰zKqæ>7ð¨ÉŽ‚àâ҃˴·Š.‡è(ä^¤¾WÍŠTÁðþÁ=ŒDéåŠøGñº'KcÜ,PU*Î:‰òˆt/ºû€{Dºˆ¸öÄKÇ·|?MŽ5Oq湈òYIí–MKù®R#€¸aÄÏPÀƒ`Å›Þמ‹Ø§q®òÍgG’ç{_¬WŠó¹†Þ”4p ÇÐåVpå–ªx»pëZÜ*·.’¦Ü ®ÜZ‰û‘ÛÒ´@¹E¾çâ«s+¸r‹Â2”…[è–+·º†ƒupÛñÎmõÄÛÌm`];¸…óH•[Á•[Ϻ7s‹|D9M¹E¾¢v„r+¸r‹ª18s›bÏG[h!ղʭàÊmbÍš¹…æP®Qnq-¥9Ê­àÊ-|L¹hâ–nX~à6ð½ùàVpåÖsßdâ¶¢.廕p[‘ó¹ Üu\¹­•ªÖ‰Û€êÕ¸[蜫Ü).Üè x›¹EýL—4å$z3p+¸r‹‰ƒ·àòšr‹œq>¸\¹…V"gnAˆä¤Æ-Œ¤Öˆr+¸r›[_iäösõ¸t§Ž|xoG¾\ó5jüeÎ×Ò­Ò|]Oš¯×|Ú†rÏ”¯¥¥ùšZvÈׂk¾Ž­fŸòuë£ùäâ¯×|zч9_÷¾šækhu z>îxÏ×ÉðýcÎ×Nb»çk'±ßóµàš¯q¢[òµtï4_c£ÔWÐ|-¸ækÇw‡ùº1ïø–uü>ìº}yVoþÔϯZ(2Hãt· žöñËwįaÉvõ#5Nz'¾µãy ïyD±V¶«›í °§ÛÕ›‹?_ñkõ4$Ô·§í¹OSacª<íÎ}Ú{n½µ§ýÙOWV®ötèOëg¡|øvðyî|;ˆC»ðfîËswšqíÃOmùïmø©+àÚ…Ÿšò®Mø©'Oø£¿ýÎІ?ß—n–SÃ_f̦†¿Ì˜?L ™1˜þ2cþ05üeÆü`jøËŒùÀèÚ/:®C¬>BØ¢ÌÅU«…/Åí×Ï?Ü“s´'£ÿ#Ë8H.ªeWi¥3–¡LG…û kNêÀG– t»N'­)g,“,_N,Sα&·ŽÃ)kêË$DgNZãV¥y¬À¯m¾1^„.,BÇcúe¨%‰ÂŒ­¸þáïw×÷« _ôÊá=φ×ÛHŸS9Æ ½ô»'ßÞ=…¨mOÞ½‡¿=£¿~øåÝíýÓï·«WŸòÄ(?‹m§?Wª•K8¸Ú¢@Oi£O2Òýÿ<í>åé8 zhkl9ååÝ»_ß?ðô™ÛáE]®\­fî¹ñï´Ó{8Q¢VÔ·&rI¸áL÷Lþ}¸^~Äz½=¤…Gö¢‡´P#÷é»Eåì(~õJËRÇõ´Xó÷zÅ>þO‚ó=‹cJ=¢³<{ªaÓ=‹B܆3={j½ßÔ³È‘É žÍœ§Ïf>±‡g;>zö÷82ÙÐm“ˆ‡èȼ¸úë§Äñwx7\cš@ÿåOŸÓå/7ád*ÅXÉôɲ¥ˆŸnñ¬z=¾”•UPæØÔvûæú‡Ûíú)´h{òß÷Pû{ˆíöG v÷‡íÛ»ë׿ȿTúÜöy¾ø?gcu endstream endobj 315 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 299 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/DSdmLRT_plotProportions-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 316 0 R /BBox [0 0 992 491] /Resources << /XObject << /Im1 317 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S] …ä\.}Ï\C—|®@.U í endstream endobj 317 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmLRT_plotProportions-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 318 0 R /BBox [ 0 0 1008 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 319 0 R /F3 320 0 R >> /ExtGState << >> /ColorSpace << /sRGB 321 0 R >> >> /Length 1573 /Filter /FlateDecode >> stream xœíYKo7 ¾ï¯ÐÑUõ<ôâ´ 6ER/ÐCCà:MŒÚNííÏ/©'µžØ;A.)ö°³¦I‰"µ-ž -.Äß›—+>ßßþöôDœÝn´TJ þ¼=»ªìǧ ìÓǿ҃øgóêµPâÏðs±Ñ ÄóMþÊ­T¤o§,}Ýœ‹“f°Q:#´Ž2D£–X-S ¹ßÅÕC6Þ¿ÁÛგÉÁŸäƒ’†jLJº¹Ò(q¹I&ɤý׿´ p2ù!Pé! d0C ÒL hi(ô°¤!Pi˜a¨&ƒ•ÀVš™¬ŒT‘™\h&à“Œ– š™ AºÄL.43Y9 Ž™\èl²ÉUÔ.m½’¡Hk É.Qi&Þ˨†D¥™„#=$*Í$¼ÖÒè4“8e‡D¥™Dt^Z7$*Í$0™’Åœ³Îá3ârÊ_Z‡ÜJŸö`g̸\q#•ÄœyS^8©sÀîââàÓlذýö°½Û=©¢÷N’oqñÞâ:Ñ’xç3ÄA#0tÄ$ÖŒnïü qìH–#î¤ç =Rž#^ù q³×qkT:oz Þùqgé¶0Çl†È{7”{C¼ñ9âÑ—ß ñ¤Ê ¤ßX\YÓoü ñXbÚ‡³Žx(7áŽ8Œ˜°=`{ÀöÛÃvùî}èÍÿçÞlò/ªñ¼;¼wºj6¹ô9ÙŽq ’ h’7žydùõ‹í[A‘®óÇ2„Ì4Æ wÂ(Ší¥8BÞ±Ø^l~ÚæÍ÷Z<]V뵫 þÞU©®6kWÓ4&ººV¯N¹:•Õ¶­ž‡ÁyRú0Òw&¥Ž ïcÇi ™gq™ß§ŽÓ’ñÛÐqšA~Ÿ9N#ÈÁï#ÇiIüuñ/ Bkz:M—;cÎi¬Y%æ1ç4Ö¬ó˜skV‰yÌ95«Ä<æœÆšUbsNcÍ*19yHWJ–‘X¢jhJU’”²óÉÉÇ¥Bpz1Ç?³Á2ªaw“h§ÛP÷rvÑšÅÓþ™ml²ô`Éš¸båÂÒ6q5;-°kÒŠm¢ÏóÂ%kÌn=¹¿xïéJž@-bv§ˆešFꘋ‘&˜Y÷ù›ŸnÎow¯PÄvÄ”jG¯…r>)RõêèÅÍ1–+qtýáÿzD~|}u{üZlŸÝçõž¯Ú¶ÚˆÙ‚§,9]z/¼£©r~‹õ%±4÷Å2ÙÜÄhïJGxzsýéÃXîezÞÊ„<Ø¥‹w¬ÏÉtnïÂÕ‘Þýæ·¼ð&ºRcvG M—H'z%`b,õ¿ñÞ÷t¦ó{¿Î7ÞHîë-¼…íãíÒHã«x‹ÁæmÐeúßø!gñð¶ñ¹·_/¡è‰Ê ¿”P·¿ÜW¾šF ƒ*ÅèçªAk/^¦êå"© Á?¯p­ÂÓ»ÿ•¬îB¯C\©1âùù›+q~Œ§Rýû+Û-–ñ%›ùN¼¸9?{_ÿƒ¿‰ =\{6ÿj5sª endstream endobj 196 0 obj << /Type /ObjStm /N 100 /First 889 /Length 2065 /Filter /FlateDecode >> stream xÚíZ[OãH~ϯ¨·iqÝo#v$. ƒ4=ƒ»Û» Æ1àí`gÑÿ~¿ã@“pM“„uKA.W:u.ß9uªŒ Š &ƒfÒ(<#ÓïQ3+Sx8É”gNX¦%s&bP0% Êá©Xôº##Æ„¤ƒFôh&•1LIð4Ô#%“NQVó‚z°´ Ì  ѲLS;˜Žšè!ŽŒL)Go 1šzÀÁ»R$¦uLƒÄCEâZZ-†v&TИ µ4Öì(­˜Æô„v&€…öL{`®é†:’ÈÌP0”Î’hD2ÌHXI‹†uež¤ ÌXHYÁŒ³˜eÁÇêŸ@|,¦G Q1lbÀ,(bÙÂz4ÀCÙ€†÷e#dJ¬gµ"ÑcHexÎ:O2fLmp°\g#Ü¢œ"Wbqg˜#Áz QåsšÌãü D¸Ý’ƒ!£³l•¡«äÃàYÀ˜  …F$tÁV**,Ȩ́©Ç°à%€Ø„@Æ …|[{ù€FˆzH QÃøŠ®íñ®¡B…ˆ,F);Šäu ÀF  VÑbˆZ‚,¤¦–C‹V×ÀVÓTŠûjø OìS)‚Võõ?ü2Èß(˪éðƒÑIÓ¾ÿV”Ÿ;|³ª{y}$â˜ÿÊ÷øÖQâYû;îðnž5ì˜K€cµLÈR›Ä.ŒÆSƒnƒ­¯3~ÀønuX1¾ÍV²¢É“Í:ý¢««ì—_:øÝ“f¦å†‰EXÜ,ƒ&”Fn—¿VªÕ‰o¬¯·‹ð¬)ª’ðt÷èoå¼i?s~RTYUöFYSÕIUŸñAš}NÏò!ßO‡E¿ŸÖi9ÌêbÐ|¸Ô«óÈ.£K h€¬Žž> À•xm_QömFBØ.ãŸþý 5¡„á­HärÔï?Jª[Rd¢ƒYh­-ÒÇ,´šü(îȰS•M ªÓæûñ¬$*‰Ô4~AüJ„Ûø‘þæ…"Ñt=‡ÂÂ]¿ !É8&ÃJ|¿®²ƒŽb|{‡ñÃüªaÇÓþÞ‡};| åe3ÄfÑ CV£:ˇŒ2\Ûõ1ïéfuÅZX8³ NÞ­«Ñà&FZ Ò:/³/Œï±¦a•-Œlç—E–ww7[ш¢¡8nyßÚvÄYÜøˆ §¬6a››ÃÞ5í¤Ë2‡B60F0ä5[ôNóOkæH”X…„už"JØ ºo^SÛi“³•íŸQOHäR'=ð ׄùIˆŸ@÷±ê=G‰ƒ¼ó¥ý!l±øáS²ÓŸ¤eI²žC†ßX¦¿±æõK3¼øb§[S‰»‘•ýI"²ßŠËœÀ¡÷I‘–®²Ïƒ´9æ)»¼fà°X½Qþi•žÒ…”(š>FºlÚœÙý1j£fuÒ¨]fI+ÞZ³»: BÙĶB²ÃO/hL!M¦Ã¼E"ÿ5ï_æM‘¥þ¡Ìª^QžµåØ„;g`©d¹¶Yõ{ó=â{[[4¥‡Þ«ÇkÝÌsý:Ÿÿ«(7Êaq;¼]œžæRüˆË/Šr4ÄÏÿUMÞÏO«Æð^»‡?«ÓËœ§Ù¨ÉyVÔÙèâ´Ÿ_ñ¦è÷r~‘f5òûIƒSÒ,ºy¯ÀÃbÈl1½ü”×X›g#¤ö¯ç£ò,­GýtÔðê¬*óÏ> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 330 0 obj << /Length 2364 /Filter /FlateDecode >> stream xÚíkoãÆñ»qé 8®÷ÁgÑ~pz¹ÄA›ôýM­$æ(’LJ]ýûÎì,)R[tmÀоfwfç=Ks&á8|Ú4ëùØ6w__q–œ¯¯¾¼¿º~ï'NÂ’P†ÎýÊ 8‹céD¾dR(ç~éüè¾ËW«…à®ntÙåi±ðd»]“–mÖäuGã¾Mh½ð”æÒrùrà÷v¸»V·4“—ÔÞ}wãµú žòncOߨ#ÞÝÝþí‡a½N³…äîǦŸï¿½â¯ãK|3ž4úùô«¡¿º¿út%@ÜëC_° ˆœl{…ó¾ ˜H"'̉ÓhguõáÕD½îÂ焎£†¾JàWÈ€`'ï¬j܉Xp‰ª™(æC/LãABªYU÷÷¦ª«¦Ë«²=I¼Ø™þްÓ_€t?ñ€/ßž‹ré®ui”Õ‚3ìÀ¤.ýO³à³(o2Ÿ//AÙŸ¦éªÚ¡b&ãä%äí¯”0áû/»Ñe˜ÝT=ÝÆWÀì‘ö˜6yúPè˰üt$¡Œž#ÙO1\xsn:³@=)Á…€ûô„ÏìÝÄ+U¯ÛÕÿG²mò‡‡ªD6¼¹€§à€>þ!„íÂìõûП„O)†]OÀœ²éÉ_GúKU5˼L;Mãv×vzKý´htºÜÑ nt ™ ƒ”@rß½Y®5-•ú‰:ÙÑÃÞÒài“gÛÍ‹ÂhŸk\£ë"Íìf“Ÿ`Gÿ+o»YUjv„ä¿%öC²3¤:B,‘Üm,3¹Î§+ˆîœbÒ5KÃ>;q}»wäAÆTvl‡›K@ð FSˆBED×ñ% m@à ”yÒ(‰’¯œ¤É>Y(byÀ$ Iž¿ M`»B)åÞ/@MÝ'Ìb+¯íÒµMv;Ýv3tÊ‹I*)|€¦³òGÊäm~ »®ßCž5ö™A?ho×7Ny* (nC/„Ä|!Ü%õ§=BúQÔ­½Ç´èuK€ÖXp!ƒLçn»š}«í™©ÅH`!¦ý­ûÎb¬h­ -γ4ÏìÎðÇ{Ê[8ÜSKìÚ¼¥ÑÖÜN‡+g솉ŸñX(O¶u¡·àRð"ˆël-©ÆPx;‡­5–cKƒ¡‹Ð9lc?²tXSÈ(a\ŽŠBHlÔPTȪ;Äo®=”§Ðør5ØÁ%R¡{ƒŠ§¸[…¯r«"J€ ÀÄŽVM|ÀÉ´ï6.4-MT«Ï«?*‘Œû±£BŸ ptÐD)DJñRý‘1‹ð"Š.ò»© Cµ‰»Æo(×–s“KªÌ“‚qz b¥ö¬[“Æ+-©³w}ûeßM—¿ô­¯œù@-+rx-–Ug¡ iÕc¾ÔGm§¨ÉMþ ïßÝQ'«JïXÂÑ5⇖Nè´›ª/lô¸â±ŒKÐQ_î7Fãž2rá6pí¸ŒÄ;“­˜MöЉƒÅ1F¡frŸv²+r{8f„‹ç¯ú‚fÐŒ«¢ZçY:Ï¢†úo*¿K|Á, õÁpà¤àÒº¾èZ1\À8gK• 3‡¶‹y"5 dºY‘ímÓ2C:ÙHf›’HºÅ§(#s p‡Ì Bû ›92Ó˾1ó â’‡PxlSZuÒº$>âá6Êà Is ÇüÄ•D;Fp#M9Ògé™}„Áf'Ü@ñÄÄùA¡¤§_~ãíuZq5ë0JI,KH@©¡]êù˜u4Dv³å4 † aÈ”qn³«ƒÔ¾hüÀB“%€ž`:D–Çm¾.sdä&x ;ý‹Î:«üÒý¾¤dXÕZšŒÇ(,1Þ^«¾Šš‰H—€y9RbæG]8Ö‘K À0ðc bÏèÙƒ=JÅ|ÈGcªS4Ü&5œ†»ÄʵÇ=wSxÄ^ˆ8ïf£´q„BDLpò-fÒæ^·xÿ¯îÌ´IÄH½W"4¾‰P2´^šôn4neu·€r!$Ù‡µàµž›§-oA|P$“ñq²~È–ÝÊp©E us;,ø*ô°ÙmÖΞóµ|š\bU¹g–•{ÎN5Ü·¯yí4ŽpÓ„(-@¶­Ùe5 §&ŽçtxâÚì%ŠÐÚžÔUŸ9 ¡6 ¡UÐBP·y„yÛPßC|{ØÖVŒh4¡u¨ÐÎŒÇB–˹&³ccŠ(< ýZI³y9¬ÚÍÓËàÂP.Áõ0ÁÛÁi=¡µ¨VÇ4×ÄkðÃo­%›Â:SÙaÀ®h¢ÑM_fžÛETã±\à úÂ3ñŠhýƘ©9êîéÎ>XfQPÊCþ¦2 ×K ‘múò#v{_›²aG£pSrg0Òx„5ÙmÜG Ow=‘Übh-]:¹aV$± nh+qk¼M?.Œz &ÁP"„$¢Ï_v ?a‘Š5`,.Rv"Ê$só——‚>>ÍÊN⢑$¶%S”2¨Ä„%Æ ðɂ٭‘æÃ,=y@§oõL85R@¡•Œ„üÊCŽ`UßÑóˆ!ÓV7¾ÏÔÁ«Èh>3{Ÿ›ûø6Lruøi4‚r.úý˨#€KødiD^äMÚì.ñE”¬ìÔwó ?ý5°‡“Ï¿€” B¼˜¸i12,ƨCþfþ‡ÀÚ pö8?I­Â!Ù;+û¤xàØë ='}JáÇNŸQìg ?y'Ý祊i± eø%¾ÅŸü±é9‡Ü?œ›bR¿óŠà°”H·ú"’°ÚúÊãwýü»ÿ—3éäŒÿ…rƨ½ÿ<6ýO7™`ôPh”¤–xž@>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 333 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DSdmLRT_plotProportions-3.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 334 0 R /BBox [ 0 0 1008 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 335 0 R /F3 336 0 R >> /ExtGState << /GS1 337 0 R /GS257 338 0 R /GS258 339 0 R >> /ColorSpace << /sRGB 340 0 R >> >> /Length 1235 /Filter /FlateDecode >> stream xœ½XKo7¾ï¯àÑjšïÇ¡»±·)šJ@A†£¤6¼²+)h~‡»$—ÜeÖ¢äø JÜåÌ|ó ç£(ºA= šŸóíŸ×ènÛPLA鸽[û×—‹ÂëÅåïî©Fÿ6?!‚>7ÝÀç¡¡ ÷M÷Õ ”ã¾%îk³BK†¤Â’"Ã6 XƤ[öZ¿qVþËàÁ–1”ŽÎ‚%< #zÝT)¬j£%4Ì›…_ÀŒuöâ?J±Nø¹[‡Ð$Òy3ìç‰AáLøù°€KpŒ üÜ-`r |ÀÚ0ŠDJXlI\à§É‚)çC)$껤Kè6I^Ò˜« İ1AHx°¡,ŒÆ¨L²ÄD’°(Ù-+)s!ˆ‰ð8椗¢Ÿ°‘ >ˆ¯ŽR0j½²ÂII L¤U.èÁ±°lQ‡1ãLbý2¤Jq—RöêÓ¸Ã"3÷(¤01A AÎÅ=AÜiÄ• @f¤Å"¦Ø0Ï™À{);™F)e VsRš9P¡œ8b.îAÊJ¬Íà<ô1<¿^0©Ñ×íwpÕnq—{…q—çÃzŸèÇæï‘’k¹L;Ñ™»møÛ(=—i':ó¤D~wLý(•C.ÓNtæå2Øè÷íÔF©Ps™v¢3/äÄFw òQØA¹L;Ñ™ï°ÁFÒMm”¶v.ÓNtæ[?±áçÞí-°Î‹a,7ðÙvº¨â¥ÏŲ÷Ú8L±³8†]WÆŽ|\A+DË/Ðp#“èé„êËs‰¬u½xÙ¢xuŠ–Í»egeaÆfAZÔJs!Û&HGf埗30! ý‘ø@Fºnß½t cÃûÈ2ràÞïM_ÙÀ<8Öz`}©¥ÄÿÏxH ö J²w–$•iÛE°K¨Ëäåò·R|GN5¬‚CÙ‹ÿú˸öÝÄë$É|~Å}ŠQvsÁ5 IíªðãÉõæNRtòôíy{ú -oR N¬% àd•®ÁrleoúÝvwßÞîVŸÑsñü¿ÎÜÏÝýÓz h¦ØÆ(ËÔÎ{Ì5Ò.Ýpò*LaSj…•g‚Ç…žÍ…ÞØŽÚ fÝ ÙEàꌓÕíîÛfUövϼz×á9¤Ùø1s¬èM©“Ë\‘8}À&!{Ð)ûqªO¿²¾ 9$Ô°JKÝÙããÀå\Vù{¬¾•…ÀVú[b<lèÔuþ«¯Æ_ÙõÛ:K,2à}VWú{¬¾¹p—ˆËÌ<àãÐnl•¿Çë«ñ|ÔµçUé¶ðQÓýÿQ·ÔWã/CµçUéð Gìaõ|ˆ¾Ð­kÃ:Tí(ÑÕÅnC˜%İ9nôú¸…ìðƒ¶oŒAsÇJò8Ð7Æ$ÕèQ&÷•ŒKµ¢µ¤oÇòG5©õcpÿ€óQøKw†Ã±¯¯þOi 3Ê×5È&Õþ—`¯(Œöwô~u»F«žÿ÷ ,x ÄýŒ˜bì'ôÇfuwïŸX޹}ùFÐü®¨M­ endstream endobj 342 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 345 0 obj << /Length 2347 /Filter /FlateDecode >> stream xÚí\Ýs£È÷_AíÝUIk–™a¨Jœ³½Ùds¹³•äaï*…ÅHf½ÎCþöô| ¬Ý`Ù}Äå²`††ùèî_÷ô4¸ˆ0ì8nóPLÚes¸zwâ:pÉywòÇáÉÛK/tBúÄw†c‡¹(ˆÃ=‚¦Î0v>öΓñ¸Ýž(DV%QÚôª"ÊÊQ‘Ì*]ž—‘$šô’T×EYÜø§á‡ú.h³ÞC)J]“dúxõÃÙ ¿éÂ}RÝš§ßšGœ_½ÿëu}}úÄíýÚjé—áŸOܧÍ =Unõãê'S_ O~;ÁÀ ×ÁõÔ{” êùÎhz"ë=¹C¸‹|êŸüôäN=mÀÌ%NóWÑ®V^ññ=‡£PÖ€ø„yp懹¾Ÿo¾é|—ôÎÊ2™dú|)ƒT܉T×Îî¢t.y®Hrs”Ì•'£<'Å4ª’Ü<¥¬¢Éf,•'Íßmó(ß^2·1<×` %¦G6û¾Ù¥ ú¡8/¯«?¨q>ªý~°Ñ¨@Ñ£!übÂ4íjå²èw‘|ÞêüÁ$ýì2wˣ颜§Uic(ñé–[Q¬ÑJa¡¡?<£ŸðÇ,+—¼‹¨šâáÒÃÞ·Ûî¬F;+â”ò=–¦ûF›µfkE_©\6‚÷UŠº#ÖŠ)òû,š +øÕ²Y/¨/íÖ+Ú¿¢ýÁ¡½™ÙŒC]Á¿ƒAÈ} ÿR<İaYŸÄu¬«¿â¾(À’g@( 1n;ðß0±â•OD&Íåö,g³$›ìÐ5¯>Ù³Wp{·Ã·§6$n´·+Àî¼YðEÁ(aù^ùà•×ðºuFžZËì£`_†.eø—Ú¯æK…®†Ÿu)¿ù$FƆ©Ø¥ŠJ‰bœÓu7î“RÔäQúP&åmžËßn>žÕ[°a¿¡¨ÛºþzT‘Ù1yZBu‹VÌù³cž›Ž±Ùî–G"ÆÉJ¨WOñYüi^V">š`ÊåÙ‡ë‹}6§ëÿ†"iZÜ8\Ô¹ÕÈæ¢ìÐÁþŸ`9µ6MEVîçÁžü-DÀŠ~MEu›Çdz‹«ù›¾5v*Jg·ÑÑX'¹ìð£ý-øÖlšˆê:™dÉ8EYõ¬ˆ•ˆÏ1¬lq4ÍU{Àvýç¶sƒn‹»³(>@³ ,ªÝÛÿ¡1l2ÉŠË‹XGë¿_Ÿ ˳ôÁ28Ùzk'&íVD±• l׸Ŭ9“R¹8"ž£C•,þ'÷]ÎõÖ_Ò>î`O&ꀦGƒy¦! “OÇÕc‘A.1ãžNò¤í$O¿W2yRmîõ®g8™LàœM³ˆ|ªÒ¨îU²¨ÈÌ#T1×·ò,Nd§ÔQi=:ÌQHÍè–YÑh”Ï¡/ÙD—U÷òb%åó&ªFæaF0ª·ÏÌゥ]¦¸Ê¨)”¨ÙaÊ'QB{…˜¢,Uv!%^o\D} Ëžû>áÐôŠ_5e2¥B.[El*T$ìí%βÌ}Äåd›,Z“›ª[ò(Z’EiªÚº/u/d¤lÂ̆.Œuw E=3²N@Ïv)•sÔT…HW kÿì>…Ù 8<¦fá½|x>OcÃQyèf›y÷{ir£ú©ßS©JúþJו•î¬0K–QC7 œÕ£Ñ°u—j VàÚ>ÖZ¼æÒjš- @(q¨ â²:Ï{r¹L…V:S§ÙnÒI•Û ÔË6Y€ÊBÈx‰e’¦‘ΠjG£CB,ã8ª¢o?$7ET<|ˆäTEÞ±Ë i-`¨ Â´Økþˆ™ÖÆ¥ €aÅÌókñðZúîñžæ¿¨‰ÌIMÍYdèb!1÷)N «±¹¬‹ùýÂu¿àéhš8Q¢ À42­»RÝF•>SJj®ÞFwurCŸÒy¬7ÈêM3ŸZ{{,ДyJ yC %á¦H¢›Th*™ž.¯ÈgíV¶© ²í9Àò†l£Æ»ц&˜&J|0b‚“ÑÔLÄó‡zé‡Äê Ié´†ˆÿU%ã(€^+ÓÜ‹ o÷¢AÝùþãy ‘ï‘íÌ£lRZóOϯ_J6(Yw}«c"rÛc<þšp‚|¾°ðõ&³éaÈ}fy €9/õ%7ãyšêŠi®2†;t> ˜tÆAÝWŸ$RJ¥¯UEIVê’Æ9ê-¼¨ÆE@ðZLˆÃ᣷b°ð䬼³mê.‹ Çi^¹!¡k´g¹€Ú€r%9¼Ð•T@þúTÃF’æƒb¦â€lÛËÝp7¾!`Bý‚€ñµ¾ëÁ$í^+Nürµå0Ø€PðmÅ÷žù|¶#®r ‚÷”ÉÁ0uƒØ6OaýÏV—S©^µ=™ÓÆ"Ͼ$Èað£…ÖÚB&!"„¶·ÆâC4¸àÅoÊé}3·*®VîH¹° êó. »ºŸV¶ÉŒ'¸«9‘ 8 ê0'µËº±înšhL8G,\›g|=¿)E¥ãÖÍÙ#}¸K&\6iÃÅ<Ët IÍ{òï]¾Ï¾HôDù‰ÉÇm¿]níÝ̘¼ô ™ß%Ùw6¸°xýƒëºa÷‹Ùî²áÀõÕL¿Ï`í?3½í²ƒ¿œ÷ë˜ ¿tÞ)ûñìýÕÅù2ÍhË9ß+ßÐ%a€ü0tLBƒIÉÀ›,[/†'ÿ£²Â endstream endobj 349 0 obj << /Length 928 /Filter /FlateDecode >> stream xÚí]oÓ0ð½¿Âl{hÑâù;N<ƒ‚‰"Æ„²Öí¢¥I‰S¡ý{ÛÝÚlÚhDmsöùÎ÷áûp‚)„È"(ÆËsŽ:é%tÐyÓïì½gŠpÐõGˆ† F1õ‡è¤»ŸŒF= ]YȬLâ´çQvË"ÎÔ H¦¥ÏT\{^Ejqq6\Ÿø¨ÿyÎ¥eï^*©,&É,<>|í)ùÛNþ$å¹ÛýÜm±üñË·ùú4ô(é^,I:íêÍ|…#fæ ÀPßDoLý®ßùÝ}ÁÜõ!ÇÄÐ`Ò©ÐŒr ‘@ù*$uŽ6VjƒMPp‚´@Nh‘™`Â#ÛÛ=/ ´ Ô@Fu‰v4%Œèöµ¶ÀÐñe.ºŠ îâòq±Ü®a°ÌÅWqÝ)+hÄ%ù0.Ëâ'ádw+V*g[zr§˜8µr}tæ,Ö2È3ŪT7åëñ쌋|6]KCˉËBÆåDW­\ 4ßI“³".. /ø!G€Cá¬øea 7¾Æ§ñe>+Í¢ÌÇ<„&Fl\}6£®2vñihëHM¹÷>` ^ù0”Ւ»Ÿ[8‰/¤™RkÜ«‹ô¥J”rZäÃÙ 9K›ÕØP„zÊtá#(·´u¤Ñ{©2ÕÎ^É+)‡½ø¼¢]|jJ-§Š«ffBàl±vY3kH+¨ÿf@#Í£Œú8X޲·q:˜¥qé"kZÈA¢’<{Póï¤!m"Ü4òjÝ|ŒE/½Í 'e8ùú(žsñ?¤»,ÆZ%«Þö’^õjIè›î Vt‡ÍÒ”6Í'=Fóȱߛ¹ãA¨Å‘+Ôár =³7†îw•dcW -P³3]í8¹þ]ëËLº ^ºR/U™L®rqO&:œjyéDÞ—¥«ºÏ¸È®ÌIœØ4›è“eÜ9Ó®áÕ̯§ÏÍB„¹ è[±xªcšÿì¦/,8ŒÕÜÖª›ÙF¢·¥Lgœ¸½ÝÿËZÂíjÂ=ê´gÞjÙjÙfùxó~º×‚©ëuf×T+3ƒæXãïg­ûºËŠÐWm!|×ñÕu£¶Þ£Z!꯳}’%å½÷ujÏDÌoÛûªeÛÜ[-[-Ûo}ÙjÙjÙ^àŸú¿Ù[S÷’¼ö†Ü÷)¦Ç ánû:u6|ûûYSOR endstream endobj 353 0 obj << /Length 452 /Filter /FlateDecode >> stream xÚíšÍnÛ0 €ïz ½Ø¬Š²$[½mhÖ­è43ÐÃÚƒ;©±ÌMlEß~Rä ?Û¡V lŠM} EÃ$¸U žŠnù\ÅìŒ pSpÆ>ìø³²`¹5Ò@±-xžKÈ”äS(*ø6‹EŒ"ª»ºšr'2Ë£¡+Û~Þ5ë!èÛ¾ôNË8ñ®ÁV¶Õë/‹‹ýSn ÔÑC_÷ÁÒ´AΦ“¾Þå¾nÇè·cˆÓÙ×oß÷óërKý|¶ÒMqÎÄa¹zCïIÁ6 ])à>õ¹æ"µ0ÿżYIÍÑf`0ã65ÐÕ°`—CI½ÓŸˆ÷ŸæÙ¸)Œ· Òo ›råFÆ"fÜGGqb„Œ®Ê®mÚeP|¼\Ý-¯…U=xÑú¬¢â¹ › ×6Äø°›°\g)> stream xÚíšÍnÔ0€ï~Š‘zIbfÛ‰{µ¬Ô%è!Úd·%Ý&©o½Îª?p`•z˜C2žñdüiÆ%’Q:Mx_ ›‡ú,–gÁOÁ™x]‰—o´'Uª5”e© ÐJ*Ê¡jàKrÒ­×)aÒm?uõUš©¢L¦¡îÇÕÐm§¨ßŽupÚ¤Yp¶ºoþÞù¼ú°ʯA&ù9¶c´t}”ËÅ«llo¢ò£›.çè—sˆ“廟öóÛz•*L¾=Xé¢z/ð°\=¡÷i%nùR Ð>õ¥‘˜;X}Á¬•‘ä °TH—[ZX‹óƒ¡”Ùé÷ÄÎûwórÞVƒ_Р ›ÂåRû‘u$ÑΛâè(Í,ªäs=ô]¿‰J¨SW×›¯h°i§ úu Ò²ôa3’ÆÅ/vNš"‡;kx${ëï´¿bÐã(õbŒ£ípÝÜ®Úf%#¥¥Î ? n˜’)§¤?cÒä´\s¦dJî¦dJ¦ägJ¦äç\2%Sò¿.ל)™’»œkΔü%̹dJ¦äç\2%S>+ʧ=F2Ðyt:'Ï•TH”E9¿UþÎi%~­ÆºV endstream endobj 362 0 obj << /Length 452 /Filter /FlateDecode >> stream xÚíšÍnÛ0 €ïz ½Ø¬Š²$[½mhÖ­è43ÐÃÚƒ;©±ÌMlEß~Rä ?Û¡V lŠM} EÃ$¸U žŠnù\ÅìŒ pSpÆ>ìø³²`¹5Ò@±-xžKÈ”äS(*ø6‹EŒ"ª»ºšr'2Ë£¡+Û~Þ5ë!èÛ¾ôNË8ñ®ÁV¶Õë/‹‹ýSn ÔÑC_÷ÁÒ´AΦ“¾Þå¾nÇè·cˆÓÙ×oß÷óërKý|¶ÒMqÎÄa¹zCïIÁ6 ])à>õ¹æ"µ0ÿżYIÍÑf`0ã65ÐÕ°`—CI½ÓŸˆ÷ŸæÙ¸)Œ· Òo ›råFÆ"fÜGGqb„Œ®Ê®mÚeP|¼\Ý-¯…U=xÑú¬¢â¹ › ×6Äø°›°\g)> stream xÚíZÝOÛ0Ï_቗tRÌÙñçÞ†øØ¦ ‰.Óš¢$M# -I⿟§,´‘jL}pÕúìóùüóÝÏM+°f!ЦÜl÷bz2]è$8H‚ýc¦‘ÆZP’―¢H2Š)‰Q’£óð°šÍ&¢)êU•^M"*U¸jҺ͚j¹ríÛ6µFå$²¦N—ÖùËÏ’ÏëQfÂÃû¶h¦ªœž¾ÚâÆ5îªÕ¼÷>ï]N?~ùºî_¦Ù„Bx¹1ÓEò)€q±zEë£$¸ ˆI ²½âb²ëÀªå˜h‰‘XÇ5šg£AQÞµ¢³~ªžö¤ ™ 9PK cfjB ¢'ÅÞÞ$@ÃïiSWué6OV^-ÊÀ!/VVÔ6ꈆ•q̵óñ¶ëИËýÖÚ!ÑS’õÇ9}çÄizÚºÚ²Yä·Y‘w^"Bf±4b€sÒ£’<“üCœÂçÜ£ô(ýîñ(=JÒïqÒ£ô{ÜÇÒ£ô(ý]ŸsÒ£ô»ÜçÜ£ô¿„},ÿˆrì9˜©Û·µè«F;\ªÆ”éÍ¥¾™˜~`á·öaÁàDÚ#JhçMU_¦eáš³4[-šµmÎÇÚõ­¤2MkSÊíc¥±Ü?æ08 £ž ÙâúzáòL–D˜|*Ùúg§gX*a³ÿ _6EVµ•·UL†åCD†¥MªcTN;&íVôQÇØôY¾“ W‘`¶ˆŒY~Øð(ÿó"ÍÿG·šãÅk:Ë¢.»€„½ù v”É;Éf!1{ÊfF ëb;2®Uî6ÀFZ8Å‚ÉÑiùËÓ¶È”5˜å¢S@H4Ç‚JÎ;'ðüSGSˆA… Æ-ÃT1É_?UýEžG·xXÄ EÜÐÜP¾CMéß$GIð Y Š- endstream endobj 371 0 obj << /Length 940 /Filter /FlateDecode >> stream xÚíYKoÛF¾óW,’ U”›}/hui›¢v™SZ,EÉ„iR&éù÷î’)!F¤š¬‘²ö1;Ù?X3I"éڌ÷ÝtùÊ#ŽÐ+ï,ò^œ ƒ 6Š)­‘$8 Ò‚aF9ŠVè¿ÌÖë%~Z¥E“Åù"`:ô›*.ê¤Ê¶ÛßÕqË´Y-«£ÅÅêó™/¢_z)ÐA¥ÿ¡NkGÉ 7_þúCP§·nó>k®º§_uX^¾~ó{¾“#þõHÓŸÑO9ÎWØ»L–û|4÷ËÈ»õ(„‚ Ú»^1ƒa(¹ñZº`S£‘æ˜kª­½‹£:æÂ6)$A v@Rެ”¡˜Hã’âùóEfúÜMçg›‚0i4—@PŒùJcÊ…!­Ëá¥ð<9aÂ!h½0•X„R˜û„åPì3º×,0ÕR‹û„ÕX³Ñ¦†»r"•:)SŽãu[Á Œ”IÇ»ON{ˆïêq›—ÍoUšduV'Û9?òÇVó;ÿ"ÉŠÁHg¨)½} 7Ôe_•”Kl…:TP–ª-Ë[Ê„Êr –ö¨—ë/^ß´,¡d/&í$;ÅA(1ô 8W˜‡|¿‘p陡“LËÝ6§áhy÷‰ÀùÑ1}(ƒA,m³Sâ°Ù bMÕ¸kœg[l«r[V Ô_=iî5â½f¶b§(·îhÏíÇV¹½ÓwÁIWùì.æ´¬nZ'ÎÒ´¾X»OZg›bMß/ö"*BÌ•FüÝeê_ö@` =)Ð×wy>CþI«¿Ë:Ç#'%,TµËJ—¡.a÷ˆ;%t†d=I¬Q_ÉîÏ6ŒQ3 ¨ä¾cíÌ¥æ2lÓ¤ußXºÁR3´£BÁ6Y±qég±v»X¾qóM¹JsŒì(`L=°8`Ð’ý·õ¡%Uº©ÒÚ‚!»·Ðžãäêmê¿¢²¼v+¯Ú°ÃÂuš”Ūž@ýCÆïìì+Œÿtüˆäì¿ÇïQ žO¦kZwøe]V]GoŸÌ‘ƺñËA0I™®ïÛÚ=I1}¨dGÜ)y¶©Ê»íÏËgSè K}mXŠ|Ñ ª,ºÅûøÃÿù¦RŠ©a;)‚?Æyr—Ç»(æÙušgWe¹êp œ•í ¬ë&Kê9‚:ö!O"žè£/v•3€sÖÀ”ÿ˜ì~ÿÚûñKp†57H‰¹êâÃø Æ¿Œ¼ñº¿Æ endstream endobj 368 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/DRIMSeq_batch-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 373 0 R /BBox [0 0 495 489] /Resources << /XObject << /Im1 374 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 374 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DRIMSeq_batch-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 375 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text/ImageC] /Font << /F2 376 0 R /F3 377 0 R >> /XObject << /Im0 378 0 R >> /ExtGState << /GS1 379 0 R /GS2 380 0 R /GS257 381 0 R /GS258 382 0 R >> /ColorSpace << /sRGB 383 0 R >> >> /Length 2826 /Filter /FlateDecode >> stream xœ­ZËŽ\·Ý÷WÜ¥´ðß­œDˆpf/ /œÎȰà–bMŒäósêE²ÛmI#4 ÷àÔ‹u‹Åb‘”ß^o~{»ýzøöÓÿonwN~²KËŸÛwۻËǼz¹D·­¿Gc}w…}÷õ7D­Ûßÿ°¹í_¿½Æÿož‡ûûá#C¿þå°‡º¥¼»´¥Tö·äâÊgzøQý7óÜÞCØÖ_ú·ç8?À]|€Øîa/q;Ro{ 9Ü)Û×°W7ùЧ@ÀŸZ§€â)cØ[žЧ@òOÅ$PÚž¼~þÉPj{|ª{›|ƒS „º‡)`p DWö2 .­ìnP8RÉ«'ϲH>¿¹Ï/¸!*e ºà%èQMKÐ/˜G„b ^fóØÚ2+‚Ùa×v¿DUáòE­îyP¸„½”½/aW¸D©—¨*\¢ò^—¨*œ/^Ý…\·Ÿ)õcä…èô——ö«;+ ÖÎVö†¼ô{B`²ß=¥ëBAÄ"çmÌ@q÷(î):²tÚ³›ü¼Ç6u±m‘VŠ£ô0ÝÔ÷0m iÛøê—ê®~/ÏbÓ\Ãw‡Rñ›ËóØ\r)6©Bø¥4,”$Ó)W<&i›RÚ{1tdi,’8ù<ûCWÛ6i¦`”©ë÷Ò¦mFGõ„ÇV¾ú¥º«ß—‘È¥ã+cKø­¨‹ç‘¸äj$b¡„ K J$Œ‚™@IŽu÷m Åí…+6*ЊØÛØw¤Ÿñ“£òcº†Ø¶|›RêîúÐÍ…k–Ú$¶elã«_ª»úM‘Ø6Ò…ÄôÑíEò{Pü^£®µÄÖv— Yºï>~ç]Ät ±m–VJè;&ÀtCÛg³-è¨žÐØÆ¿LwõûùaÊQ,…ô´R°(£®‘w¼öœ7$«yÖ&?RŽ]ElÛ¤™i.†n  ¶Õ[ùê—ê®~_F"ªs uTjÞy$.¹‰âÙ7„¸v‰„Q°• ì ¨ÑöK¤Y{[°>ûäç½Õ©«ˆm‹´R¸˜Ý´·8m3i[ùê—ê®~ßb¥G—©Šz±Z)…*0íu؉£«T¡±·Ø%³›üNÕ}è*bÛ"­”D•jèF84m3i[ùê—ê®~ßduô„½¦Ò’=­”F•&v4Q÷"Tšˆö!Cìmï¶{Q%r޶vÕˆms3 Ê~™º™JÛ°ÍHlëØÊW¿Twõû2ÕÓ|Ç@sŸk¹ˆÄ%W#Ý  ,;„Q<µDäFIŒÈä¦@{ WžƒâV§®"¶-ÒBA¡ïeè¹6l iÛøâ—é®~Kõعà+%Þi¥ «&U„ <SÌb‹RtdéNód|˜ö}èbÛ,mîë†n¦É¶‰m[ùê—ê®~ߢæyÓַʧ¨ÓBHôeÅÇ—šwœ¡Ë ]ElÛnÉ™ÂÛ–éRO›‡mAË9øê—ê®~ßâp˜¹q‰®zF6 ?YÑ# Ú:”UšµHÏkŠdž½ ~¦Ögè*bÛ"­G-¡é¢hSÔ¶ ‘–±¯~©îê·Íªç8#õK¯LñÜfÒ5.ÜrüÞGó@É"Èæ Ç×ÁÏdfè*rv+¯ß¹U]ßUÛŠì5£äÉg¿†îê·ÍªÌڬ̳>ÛëÚ–ø)?ó±SŸÂ°/ a>mö&ø—ín1Øèü½þüûÑר»Ïy°þèÿ/ï%…ù4†Q}=êÎ_Îå¿ ¤ÛýìöãZªcœ–<¶€B©wÚž!åŸo÷o¾çQ>G™YØ[HýÄSµ©GÍíòdmªS•µ±‰=U;¾vídÚe›ôåíüÓ³ùvŽeˆõiϸë£.¿^2w¼âž=êNþxÄ={Ó]øö†{ö¤;ùã ÷ìE—øŸ›p7 …½s÷u:=^_‹¿>¯ÅÊ?{;^ߊ•öt¼>+ÿìåx Æ WW/òr±—ðôõt6<×ÎOÉðÌ÷ÂC;>elªÓþ\û c'Ÿ(çvšc?µ¦]Ör‰zÔáÛÅðMœü=ñÚþþÙßÞÿ„ÕþþÍvzøñÝöð;àöìÿþððøøóûwÏØî_¯®}‘+Ëø_-ny¾ç£+¹"vø‚á?óøŸˆÌº/|ºþoä} ÑëqÁŸHý@ìãß™½_±:áå&W1p/µLiÇÛÿ¿’¯`ŒÿÀ£7> stream xœ‡7ÔqðÆãU¼”‘-‰D!3޳׹éÜÞ£¢=T*{¦DCY‰ì.tö>ÎæîÜô7ôýù¼?Æ×Àùêž:Œ§Šà)£xŠžÁ•#¹;h® Ë•â¸R'´–B[¾à›¿â›À2ü²øÆòø† h}e|Ý7Üw° W[…«©ÆV×@«j±ßj±•ß1•u˜Š:Ly=¦¬]Ö€þÚ€þÒˆ.mD•þ@}nB}jB}l‘Z%-ÈâV0î}[\Q[Ü»Ÿ âm;¢°ñæ[Ð›ß›× ÆäþŽÉÙ›ÝÕÙ Íè‰Jï‰Jë…¦öF¾î‹|öG¾ìH€¾ˆxþ'ü(O„?„=ù }<öh0|8ú`(äþ0ôÞpÈÝÁw@ap’08QOßß º9 åñƹ{9ã068cMÀ˜ŒI(}ÒŸ6¥NùS¦o÷’füˆ3~pÖ7aÖõ‰ŸóÁÍù`ç¼±óÞ˜yo4¸à…ZðB.xʼnvL}ô¨ZWW£££9rXsèF[[£¥µ{ðàîý»ûöý „½Ô endstream endobj 385 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 390 0 obj << /Length 1204 /Filter /FlateDecode >> stream xÚÕZßoÛ6~÷_A´{P°ˆ!)þ°=¤HR¤è†$5ö’ƒbÉŽVWr%¹E^ö·ïDҶ캙lL‚u:ñŽÇãÇû¤ÌEˆ4OÅlûÚîÞŽ‚[èíèÍxtvÅCâP2‰ÆS$Öš!Åf4@ãÝ{étzB‰—IV¥ÑüÄgJ{Ueå¤H•½^–Q­4;ñkU+‹²¸½òíøýê)°A…÷T&¥•¤™=ßý~î—É{ñ-­]ﮋ‹»ëß>¬î/¢É #Þ§-KÇïFä°Xá›ëÆÉh/>Xûr<ú2¢0ÑU蹄К|ÕrΦ¡BŒ ³‚ŠMG·{uXv ó«5\óÎåŠäHáPVçJ`-RL¤Ë•ׯO|I˜7ÎóO¶$>á¶Y&“<‹K|Ô,t©­•†K„p¤LXÝ]!hž] ÒA>…«À=NÊt–=¸æq­Û<‚&Xù“38Ò…q¶Iª‰4_gURL’Ee7Ù0OЍxªG(åXCrQˆº´ÿenp¬´‚~7òyô”/«›óë»Ë £âSb >@¦Fn'bmL2s¦ŒpâóqÚb[›íjÓç´ƒƒ´ùAžˆƒú–ÏkïÄDíõd kl7“(îcMe£õ î½")—óªìN•Îm;;¢¡1å–@÷ã,Ð5ö<Î(÷fIf* ToáTïG3¹…fil–$ñæ…]›ñÔu¶øÍ—‰ƒÐ(þÛ⤂ž¡hѳ{Þ $ャ{°ÃÁñÕ›YFà é°0T8ŠrXœðV7pꀫėîÙëPiAAòŸðº6ÅH@B×3ÕX*0ÊœÀU !¸r­65Ã’ -H‚ç0.h˜b"Tp¡„¢:àT9KÎ' qåPlA¿nP R]ki%Ýg`]S4FwWhj­"lϦ[;3Ï+ÛZø.‘Lv¥eU¤Ë*ͳNoO¥ÔȇxwóGíV9ðr©Ã*»Cmà+VA Oä<æà'Њ/#¨Û©TF£Ñ4·VÏ9ÁÙõgJÐE”ãvM‡C 6þúZ`XŸÈÁú¤B ˆÕ {J¬Ã²š¿‘?¤r5É`êPbx¶iä Çè€ð¤ÓteNeµv¶¤Ÿ(²Ø1æM´ ß%–íºòæ¿ã²ÐXé½4ìÖÒÎŽ<9i¨Õœ°û®9A^ÄIÑÇ´ÿsàýԵör=íc–ãdR$Q™f³>¬ýÚ#»:ÿá²Vvjÿc?`â¾Þy â8­Öš”ÑSÎÛ‘² X/f‰¯'EI,”j7)÷/v=ìŽ× ZÃÙáù³Ùâå•D†!ù"/jªÚSiÔË–³Á#®ë÷+-ßõ²=­‹ûÚ@c¦;„Ø~¢]äK;®°–´o_£"æÉpKÛ“dê{#áÆÈ+…Wƒ~UÛà˜bXÞ)ÀýܾM£IR™ü K.Ûäå·"Z õKȾ*âŸ>Pó+¢T˜Ñ&”ö#âß ºWl;ÿ–0…9õë@åUâ3~„÷—ãÑ¿z3Ý endstream endobj 386 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/DRIMSeq_batch-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 392 0 R /BBox [0 0 494 490] /Resources << /XObject << /Im1 393 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S]K…ä\.}Ï\C—|®@.Uî endstream endobj 393 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DRIMSeq_batch-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 394 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 395 0 R /F3 396 0 R >> /ExtGState << >> /ColorSpace << /sRGB 397 0 R >> >> /Length 1173 /Filter /FlateDecode >> stream xœ¥XMo7 ½ï¯ÐÑ>„•Hêëê )` E[Í!È¡pƒH6AÑß§™Ù•Æ:»ˆÑ˜CiÈG¾‘È îÚ÷à>íþ8áúiÿç/Wîn¿ ä½w㸿{ZÔ¯o6Ô7¯kO³ûw÷î½óîŸ]p׸vÁc‚ûu7ݦ!znŸïÝÕÁ'…ª8äc¥XqÒÒ¦½uOßóðÅõ:O•Ùcà)JàŸ˜ß8PÉîq§µPäƒüqw³L`Qß',rŸ š(kŸ°È}Bs< &¹MÉÇàãQœçµ Eœpûaàío8ˆ}‚r$ío8ˆ}Â:ͳË)RJÝãYìˆB.äë´Y‚V}{Þƒ6ËCL<7?{Lf¹M@t ý]¤ÁݤŇl‡¥BYzÈqY ¥‡l‡åL©¿á ö £±‘_*F :‘uvuŽ•N¯D:9ÎTMÓÇ1(ýò±@Uš<¨$ž™$m/Ë©Ñ{{Yñ”Ãö²¢Tª¡ª ›ª* ɶ±Šy{Yð’;øH¹XºJ5öBÀ5†‚|:fRzàDÉÀÄS±ÀK¬4©Ä| ¾fŠFÚC m{1t›ŸåLò,gæ¯ÈÐÒhèÀÏ$–.Q –3`hµrQ" =8*z4ZDI³7œa°´©`ŸÚ–¼­ÃQÂzIÕBÏ`i4Ð3XšT0XZ ô,‚žAR1RÏà¨ZàÁÑdd‚ÁÑbùqŽ_!ÇDÁÂŠŠ…V"æ=~[ŠV ;vvoa/ØÂ†ª… MVÀÐlaC«]p:»€ b`4yÀ©EÉÀ.àg±¶_aiçâöBÎÄxAÕH„€ ÑrÍx´ZàçªåjCÕÊš,ð`h±À§jžÿKbè²Y-ð`¨Uj•RÕ¬‰hõ›U(j †ZE€‚¡ÕÀ®¡>«†*j †ZE€‚¡V `h±À«VŒ:œ¬–/`¨U(j•“YhòÏJ€QÍ @AÐu§èÏJ0Ô*®n§VpîãÔ]¾Acàn? ;8¶ŠÓ0ËŠòû²¦Ðn·î»í—ûý—½›ÿ.ÝíÃîçövžVöq»9}±W¼9©_~éÎc³ŠSÊ·F³kÀéàIæ)øp¬† ®?lo>ei+¶Pû´µrîZFÙשּׂM箜L<û\k׿0Lø÷³ôM>T«ÎsjÓ&í±Õ\už]ì4Wg×ÍUßÙô§&þ‡ .í+Ï?!Œ­íØË.êUk;¶²‹~ÕÙŽì¢_5¶c#»èW}í‚ævÛä"HÖ*Ÿ‰Ûxx:ÍöAVãrŽç°TZ¿0.gX—ˆ¨¬­ç3¬kB­;ZöÓ6“íÝS«å™ÕIfØCÿT[ £ï.~õ×¥Ã){ñ÷ǯ÷ûË÷îöztà ƒƒ•Wƒqü«ÍnjõÈdòÍçûO_ïŸî.6‰‹ÿ¾±yòµû´”:® endstream endobj 399 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 406 0 obj << /Length 2184 /Filter /FlateDecode >> stream xÚµÛ’›¸ò}¾‚G\c„À˜}Ëe2;[»©ìŒ³§¶’<È ÛœÁà °ã¿ß¾HÆvœS9ɦx »Õ’Z}— J„ç…§¿vuŽÛßÃÝMèÁwwób~3yg^dÓhêÍ—^³Yä¥qDBzóÂ{ï¿*—Ë‘}Ýêº+U5GéÌïZU›¼-·ã½QÈ´‘•iª.¾ùÏùïnì!ÿ`´aJYóÿáÍó±ÑŸÙ—ÝÚ®¾¶K¼z¸ÿãÑoU>ŠBÿél§óßnÂÿOW?‘ûv~#À¡'¹ÆN´ñ‰lä9Iê‰ü$‰O\'Ne DÆ®3e…ÿ+òxïÇ"±ßõgžr0¥õ’=ºiÁÒ‰ÿô! eƒ^´?á»¶; wçœÎ'¨Œ÷C¯€±ß`ŽÌfÞž87^%È`%¯òOìBÊ‹’“°Ë$ØÖŒ3PðŒuwN‹Œ½›€“ B‚he‡H#8<4pøhæ[‚Um'w ÿ˃zy`l¥kÝ•9#;5ŠR¿-aŽaʇ0 ×hõÐ_”cUUº‚  c8ÚXˆ K–ÿñÍ[ð&x …;' ÊÑj&+c@ ä¥êtÁÙ8œ¯U½Â,€f>ÓCbõŒÆ3ˆöÇ>·Sq{»Ç°!åŠÚ®²×$?Ý@Jéà§´Qvª+w–Ì%ñÅ~…GIá((1P_䮤ˆà¸WdÒ&×ûBƒ‡Ñ,öA«2%›¥h39•l³¦¯ F«òédMHmP€iì´™’6˦6Ln–̨wº=0Ú±;®‘ëdÝ ±îÿÚàŽìGÀ`e4}>¾¨êkJTÛ-é½QhIñ9&ÍüIªm Ÿ¶$oLWxRÞl¶}G§!=‘ꊴ…ÿn7†A:,,²é«®ÜVÚ1˜®¬WnM’¬Õ9.\“þ]]è–Hñ‡h·ßlqŠPdøÄáÉÝqäØ/JÜ‚„ÆéB)·“Ï|,|,üW#“ƒîÝ*dtø/(jìŒm¥òë®L Ê{ˆ,öóª1ši¦oÛ¦¯ ÖKfýÐü”A Ÿº B‹°£ÔÔ$Oæ´$Ž7Þ‹žÈ• tŽsFß»7¿v>0»wáTJ~ å°À¦ÙXµ´PúýÚ©µßš®ÕjÃ\Ç©9þ>$E ¦wñã…„kfÈxaÞCŸ•DÞXFŒb[3ñ/WÍ$ýÛÏjCÑ€•²P:Ûã¢Y©P䔥šfµg‘_èMƒúK"AÚ#¶6#m¨ÍˆÙ”Ž,k2/ôâdÇ(™3,±ÜrÚFŽÏEK‚$IôxO7Ï0WEÇ̉ÛôÆÊFg%h‰)¦Ù "£—£x æ˜Yg³§½»}÷øù«ûGà‡”h“Ù)€‘ðÞö’ßg?=Ó?>bÀeSEé!·‚ŸðvØúRk‹ˆ![F–|&,‡ÍvÝ,*eº¦,˜–몲£eÍSbÔíÕ8kÎ ª ý9™vaP`! =x¯ëœâVÇaäà¿sÓ@T •iveÑ«ÊX‚ý[ÕÂ5@Y åp±’€øšÀw$åž™ÿ–MÂOeÆÂ#ù¨0D8å`KRZÊ™q‘sˆµ‹¤ï˜Š>LÝRj¶}Åuöp@²—·oe¬ü/oßaÙvMè×eÕ9’Ìúúþ ³åE[v¥YÃw/N†9M®êr`™?Þs³…¾wð7G-ž®_¨ûï‡{îHˆò›ã¦¸AàìÊ8w>¨„œÎ|íT¸´þ¼åÒ”s?'Q›=·Òé¡×Uÿù¥‚.;–Ð6‹ÒÖwÐé:r»¨]EíTY©æ3D±"ãŸ}„åø]üÊs_‘œ#baÊNÿP\ƒñ¡/êºí/“É~¿ô¢ TôO—@Ño*3Yé~§ŠÒŒÁsB 3¹L˜©-T°ª­>çZZXÊND Pñ$HÕ ¹/ eó9>VÁA„v?xx¨™'‡i°Mt²R[°­W“VWZÁ "¢`ÝmªËãŸwËÑp'аS¡E¨EC›"üoÔ“sej)èfô]¹‚{M§kûºÆÎŽíl8åÐÖí’÷ØØÖvQj)Ž·Nj…˜Ãô £;»!¦AüŸÜ§&éŠ=ØáSºMÔ°,#|Ô½åÀÈe\¥ÑW0lÅe„óB‰Š‰¦™`ø$+ÛøK#wYƒác«lx÷æ(hs-Œ’»Æ:¯ºh6Õ1¦¶R Û]2h“@ùÀ†[7Ä¡õ€ž¹úƒ¼=2€°Ú€ª™’’TÍðñF\*ϵ1nSÚéû}û¢[ù¢q,Ï1åÓæígÎ9ÿ«ÑaDÐj·36«†sy¼¤v¤…æ]ìmÄõ¬Ô¨À¥]Û|Ç·AP7ù°‚éôÖü”^VÄq¦®›•®›~B7ûõ7 o}\éom€S>Ès¼ý‘#™BsBwYFÖj§âü‹Ð±j'S©U×·vÔE.s œ% ^ì‹â‡tŽNšêîWˆhëoìõ_¹ ÆâxYÆj×Älxcªû½Y¶<ÂÐR dšSâEI×Y|fFËÇ+e‰ ¹{/úJë?ƒO*¿¡õƒ™˜9>~M ?(‰}§`Yšcä7Ê0È2qñÄÃÄ7Aç@ˆ•Æ]-!þVMoÉ|í–Ãc@SÛ@<&^ŠÊA+ôPnˆ¾¼éÞwö'Ó`*gøàÄöV%g3nç7ÿßäê endstream endobj 387 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/DRIMSeq_batch_plotProportions-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 409 0 R /BBox [0 0 992 491] /Resources << /XObject << /Im1 410 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S] …ä\.}Ï\C—|®@.U í endstream endobj 410 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/DRIMSeq_batch_plotProportions-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 411 0 R /BBox [ 0 0 1008 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 412 0 R /F3 413 0 R >> /ExtGState << /GS1 414 0 R /GS2 415 0 R /GS257 416 0 R /GS258 417 0 R >> /ColorSpace << /sRGB 418 0 R >> >> /Length 3071 /Filter /FlateDecode >> stream xœ½ZËnÇÝó+f)ѸßE‘, VlÃ1 daxa(”m”RFòù9U]ÕÓ=¼¼E)4dóÔôÔ»«jÆ./»¼Yþ}ò;þuýÓ‹§Ë«ë»c–ñzýê­ÀÏNÀ§Ï~ ¿æå?'?ÿ²˜å_'vy‰ÿoN¬Áòý ÿà‹5¦ÐÏhý¸:_ž*K(kt‹µeÍe >¯5.Þ…5g¢ûçòö.oðz“Á¬Õ¹e¼’ f~“ÁìdÍ6Ë%–i Y×'§Bà|]í@ ëÀ›ºÆ¸Èz È•ßÚšf- GÞ¯q䨭ŽŒ_ëÈQ[9¬~x ¬Žt8rÔÖA°qµ¬‰ ÄÕt›\Ê2„Σ q-a#õ@áLZSÞ(d=R¤¼F3P´õ@á]YýÀ†¬GŠR‰å¢­Š`‡²QÈz €§@±f °§Y‹ ì•>YºAì‚»]\âêkóÉàÜšìŒÚ5چƼ¦8ƒ.†Õ¥»`VëgœEgÔÂq¼™Q_ÖäÆ_6Ø« {cÈífÆ,yý‡”¶\$fY+èv{Ö5ˆ4!B§æ†&ä5P Ì²úHÛ5Ys"Ög~âÆïe··‘Y¡´ºã+;Š÷&+rEØËê×’TÖƒv-øûNùŽþÒd…iÊ~KR(£ÌÖÝ­æP»F¸gÞ+*«05SƘïFV=ZŸÖ¼S”7Ýg¼­«»aÕÄW/NTúÛõ-B·‚JJ×kË ÙΧ€Ïp”ö´à(¬ ¹OXçŽsÑñàV¸Ö)5Kþ;·à@¤hKZÒ^\«âÐ8¶ÆÚåæ„‚ÓØ§5Çn¶«ó‹‡Ë9zª pÞTi fì†ÒýÁÎNÁNˆ=Éjƒ%½_tÙ‹“£Y7œö@¨,m_)ÕUGBZ<½P²TÌyËkÏN«8ïÙô•ðøD{ bMäcÈñ=‚ù‘#ií9ª§=<i” ©6±ìO6HÄ»â!S´bm"Gžâ´Çè'‡A0ˆ(ÃvÄsa3¤ èƒùR<À”Ž×ŽRKÇÙîÄ4Ù¥ÉH¨Æwä{_µðÚ“;ÎúÂaçè 퀲xn¦3¶š.:Uò¸@±̦Ǚ•‰u9g]5@ ™‹ŽGGîIk8WÝpÞUH… ]ETÑøÅ÷3á¢ã^÷t†’AÇY”èf[áb|RB|hÛNCŠ;TV¼Ø"ÛÂ^gÓCß0©¹ò)-ç0ü9°é•´vdŸŽïM8/¶“´‡|õí„Ó¼‡| vsÈËYÛCù;ø!äï!Oqçæo¥Fyü¤ÒEƒZP yäò˜v!/UEùÌù{ yÁ{ÈÃýL˜C^k y‡0 [CZq y‡0pnòR!õ‡qèXï!/xy0€‡Í!/õOùvÐo!/xy¤’o†|³ºã¤¿]o6Ç+ñÓ­ä¯M§Çj~r·B¾«ú?¾×ë.ÀÃÚyŠö‘\ÍÔ4ŠÞÅØ4ŠÞ ÅØ …¶Jqk+ \i/ \ ½€p¥Í€r54B¡Ý€R Ý€p¥í€r5´¢÷B1ôž†:[ÖC©n¨÷e=P$D€ê}YÙÒ±´QÈz¤@ÈåY1‡z_Ö#2jÛ¢­ŠÍyçÊ‚£ÕmÕ¿§däz]L˜QÛ ¹hl;ÆÇ{QR$)δ˜fi\ªÄ„¾#ûÝÞ|µÍÑ´l$›'Ê;­~…ÉýîÙ™B¾ñ … å­ð]¤ (pâ¡>e”­Ó &òŽk‡Â(‹Ô ů {©´IHHÖa·72@ ÚN!Wïk’Tå…¢j¯±4”Æåö’Gýå[НÌ:Q©4*öRGíÄŸ§» )¹‰-1«T› ¨¥ÆQnÖH˜m©ÍF éÆÍ¨ ´gC9enX: בª¿—ªvf2Í^'†~oRщWo“*QŸsoÚMfðaç'•¶û"mN±­ ÷l&d›¨‡§zÄsy¡x¥£šÊV¦+ÎõJní€'Ç¢=r¦‰Ê_>ƒ;Î5$Ö©µ ŠÓû"„뉈çB#Áq†ºè8´â¯=Y£ãÜ*¡¾ 7ÃÙEQi¼Gn–G–«Ü-AÓTº+Î{ ïsYèö ² k2Ž;¬†ÇL ‰Ö‘ëLÅY:R#×¢íÈžëî…wÅ+9+­×ÝŠÓ9ÚÖBÄvZg€©ÕŽîQé,Q™w‚g»8¾y³­7Ú~6Û*®¶uسìl[RËÅj[œ“f°]ÇÕ¶‘cw¶Å¾ˆ–ͶÈÇf°âݶ6ók´m¦±kÙl›Miá!¶S¼Û¶¢‡ð;ÛÄ´ÙE#µÂݶ‚wÛ"*i23ÙòQ=ßm ùË`»Ž«m TïO¶…½«l›*Mºmï¶M­§m{W[ 8Ç«°dãÌ­]T<ðÈŽÖ2gœžQÑ€ñèÀ’H¨‰ ãÜø.¤cÅ©—a_@ƒ—놳¾h†¬ö{¿ˆçRµ‚4ýâÔ6V^ž¢*Îú‚?ˆo·Šû~l=OÇkk‰2’¦·ζ‰c]ûØ„2! u¦âÚÇ&jŠë†³,•{~êyÙ-A~Ê8›¹çT¼Ho+0`ÇY–Ö Ósñ‘©o=:יЇÜúøœÛpQñÖúcj[8ll§x·->Åm­oòªmQùøÁvŠ«m+JüPv¶Å¾4Gî¶Ås±Ùf[Á»máÐÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 425 0 obj << /Length 3522 /Filter /FlateDecode >> stream xÚíkoÛ8ò{~…o÷‹|ˆ¹âSTq÷¡‡>ÐÃÞâ¶Íí}Ø-Š-'ÚÚ’+Ééæßß ‡’%ÅÍ:Nì¤@ –†‡óæcÈpt1 GoOþqvòÃbaFgó‘™µb)Á—£³Ùè×àU6Ÿy¤eš×Y²ODdƒºLòjZf«šÞ×U‚•.ƬJ°$Ÿí^ùç³›¯×Áu•VÉrú}ÿÓËI•~¦—/Y}é[¿ôM¼zÿî_šòU2‹0øÔÃôñìŸ'¡§þ‡7BwH’µM”Ê5Qþ&+«útA|£ SÂÂg±öÔÎ $±\&uVÕÔ$@%Mp‘æEÅ×+à.0¢bãI¤ÃàC¶Ì‰ûpqMu“Š>ÎrzwâAÀ,û-”r£Fëj¾ƒf\¤ôÝ*ó¸Æg¶¶.™Ö÷Æ¢êm}åL…öÖ¾ni ´¢Þâl4T…à«‚Dµ0Á›q«] q°¹4qnÇ„w$ ¨Í¢@1` ²¨°Lk¯l³Š ‰Óó”^²ü2-3R%xõkHøä›¤`¡Ñ}žyN_eÅÚY Šõ~\/o‚ߣP¡ïøÞùqµo‚ï\ûõÙÉç G¼l©X²\Ëty‚p%4ã ¿(fû™Žæ'?ß¹Sw#øµm¾Š) N†q™«;¾÷ƒQŽ"°ÅÐÙ"ðEÁ“6XÓÛâ";/íûˆºÿÛºÝÿÎ>ƒßB¶ºØÕÃJøa±C ’ÅœÅÐ ç9Ä(¥F˜ç­û®Xd ˜ýNÀ}zé4ËÝù*Šào“sÜaÙÎñ¢#xñâÐZ³?ßwÇâtCö£ã61_QÓ|úëUú¬%G×’{±þ1%½ã'%ÓŸëøŠåEeA&>¬¬î¤‰Ši®ï­‹U¾¢/ ì³*>]Ul%ÁÜÊkâ‡ÆÛ'!4Þë:DÎçzS¤Á\GáX·]dh+oÎÉ8n‹3ƒGÙ ¸ŽôóLf¤tÄx£ïGœÉxUÛ{êrtû û†õW’¹ô+É\õÚí ¬³Ôª¤€Wgy晡:-i د,6Lc;þúÎn+j˜ÁÍhøÛ0dKÑÐX„5Ìp°ŽØQèE3aq•Ï­ 4–²Ooj"´:¿Â™$´*xÛbŠe6n.Š;ÞÍ—o’#IjÈ8ÏÃ8É-¡0néÙp‚DÄ4„!A13Jˆ"@êQ„ËÃF“åŽøQi”€©/$¿Ìÿ5‡¹‘€¨×ðé"©ªÆÌO2›e¸·’,ÜÆºŸ‚V¨Ed€‰ƒ©U»§lØ,¸gÚCƒ‡f'NYî©·Û(!nº}"ú¼Ù'·›{oÇ[lëÃOÿöú2ñ-´Û,øâ6â bUÐ>Ép«¦Z—%t˜Ö¢e¬i)8v»~´Ë#yp6æíAÁ/š‚î’1€iÖm”º5g­¨kÉ2­Óò‘J,@GÁ/†šË[]Uà-ÍtPZeefâ•õK–?”ù©lAGÇ$ I¡é“4+¾ÜºXO¸Í®jFy§}n­†Û¾e»Ëî O ˸l§9…›Ñ&R±®é¡Ù(7yàSuY¬¾æ¹ßZ¦½§Ôonâ—¤²ý6œ!¸M/ÛÙþhDƒ?Áiø§â¾´úE¤¶0ÚŽ…]’,~Þ÷éâ­ÕÆ­0jñøÁã .ðÇæA[cÆQ(#¥û=hŒ°÷G% 0Z„ôgqPÚ-òù:Ÿ6é.Óâó:+iNŽ{Ù1"îæzH¡Ü°³|åLPøÁ:´<õy%r~Á®0ÿÁ7‚S•GšKôM´"|ë>µd\é ÎedA-hŠQ²èúY[ЋvTï&ƒ^v3zðžd÷ø’J1eâ¡$”…Àj \å¶/‰û-9Þ"sSUMcÂÔË#©¶-"A´5­Å¾}ßb.Qá°·M{ùD4ÿuÉ[Ê¿ :eÉù ,¥ò!Pá:V/;Kï^ù*>1L’¦öË(ï«›'ðh:d!®€iðŒ¼uÂ03\J‡@¶`°2íÍíØí!% ekš~¹X9‡q2:Hz[®+/—€Hs  ¼r£ëêqyÏ!²pC1kŽ2E”L ‘í´ì¡B:—˜ªÂ‡$É©¢‹Ô¸fô.î(»u¡‡ ð­+B«~\­‰aXsøc±8æ`w²Ïã=bïí<ÆÕïÖacªcŒépÕÊåb‚7ήÒÅõØJœ)»y°ÑðŸœVu‡6|ȵpc0v ¤x°a¹„YHo@’ tèÃ(¥ÔCÞìÿeŒÆ¿I÷©€ R¯D”/ À«N GˆOާapõŒôh£ÊmÙÆùävxÂ0òÈãñP1aT*ÍâP#‚#J¥#@ Û}Gwp ßÂÎMwÕîì\xø¼µ'ȱ„ªð-úC°îíµiì줛4Åyǯ{õpWf!ªc°`?"œÛÁžR¯‰ˆpðCqzh ÄÄÀ?>4›ÝUÓayºêI LâØ ÇwÍÖ“‹P& ñŽ3ƒïž¦bïN»âwíˆ]Ñ îiоw¶ÅÎ:ìÆvbx¼è‰Ÿ6ûõñgwǧÍ…O&·pw{iG³!žÏ‰ž„½Lx*G÷Ïu»ìÕ·‹pŽÇÜôÝ@)ÙB’‚¡q|—YÓa“kÿ~”¡Åc¸akÀLâ#̶eOž'Ï“‰›LþœÝDhɌ韶›}ƒ£w°ý[Ç8Cׄ÷³ct¦N;°<=F/ÛÉŽ@úb—ÞãLÏvºi@¼K·í²ìDÖé¡‚næ˜éÈÞv¦F†iÛw™[E3›i„‰`x§ŸÊa³[ÓÞùŒÙŽÐ\/eÌd8ÐË{LvîÍÑÈ­wï>#;ŠN~Éò6õôIN"vf9$:•Ov™jwÕµÜåeô4wÿ‰Þaj»œøˆÅÒoÐ~ÿ=éûËœ~›+‰Üóœ~ý±›c°a‚}Ó%V9Á†ã6ºû&\J>Äœ~;ƽ¥ÁÎv$›öùžupÚ^Ü@iûØ!™NÓª*Êê…'¡™†¨§=Ä t³÷~ìC–t€}xLF ‚5¦†ãQt aÝK·,ß\ØE³‚jãA (SŸ~‘x¦€Wô8oo>jî¤B¨OŽÄª—ôoO;4ð”À®á8ÐEY¬WxHb‹ ]¬•­˜áEùÙü༠ofŠõæ>¨›áÕYx—Úüš¾‹Ð¦Obw•°ÆOÂaÁ¶³$X-™–Eå?&:Øé™lrƒ†T€d(å2ãñ2'Ñj9or?aÊ¡²Qðš®(£L`å¯tŸàåeî8‰²›ÚàeV8CÇwå/üCÀ¦}*X¤Wéå¯ypî‘UÔÔÆëu‰gS¶\´ÖÜ*7]ôBÅAúGGrw]Ü]L®–ûq¹¢ANU΋ LªfQÕè²§†Ñc½o.b£÷V]OÜ-\=œ¤‹®%B²(ò‹­.ƒ.¹“ABùÙUêïsÚôµv<á™;t)d“–ˆ‰ªkÌJ\ÒÅ^×TºZõãž‹à±eæñsˆdtŒœ{D)»Ý±¹-s öO9à1µ#R„(5Žë:$½úóÃtÒlnÞ¢+ é ¸õÔ%»ãeêé4¼¸(“¥‹BBûs½P’¯—^K¸3n qstun—³"€wߥ¿3NÁ丽3®ssÉéæ<>¥4uto=ó¾ «^9å7;ÃÉg½Æ66nO Úk j|ò9V7[Þ+õ§BïæV¥ 3˜î­-3Ú'¢³PÁÿ[ùãÊ endstream endobj 432 0 obj << /Length 522 /Filter /FlateDecode >> stream xÚí˜MoÛ0 †ïþDO0«­Ïò¶É|Û†ÁKìÖhê$¶‹¡ÿ~òWã¶(°dHP´¹H"õZ”Hé9I€Ã®¸¸owÝôÌCpSpæ½¼Ó‚eV‘‚(‰Ì-ˆ!šÃwœ¥éˆ£ŸI^eñb6~UÄy9+²UÕÚ7e\‹.FA-m}q>ÿwñ$úÜåbpéß–IÙz²¼í§_ße²n?YuÙ­~Ù-1žžùÖϯâوпºégôÉÃírŬhìAר»·Vˆ¼µÇ])xŸzeB&`víÕ^A’q«[&µ„"Ô›l½¥íŽ»OµÑÆ™"´®å$[íCç´»˜A3+‘ê‹i]VÜHYÎPÚöb®ËjWñNU­ÃöN;lÒÅùçoö%PH͉ê8 •+¸î’£ÚÃþjü‚i£ ø«ÛUrˆ­½ý Šôã ç&ÈIšÄÕM‘”'¨)? žËÓs¤é9ÃCÉ,qÚ0D^£fí¹ÇÅ•nƒa3Õ×9Nϯ9Áxé84Ù+7‘#:<ކR†¯Žwié+ Jù$9…r  >’ó…’³ÌWGj$4Cav¡fx¤æ³¢æ ”OR“È2.Å‘š/”š¿ËÙÕëäf÷àÁ€PKFº.¹QL…ÝÍ'½Ãî=ÿ YF endstream endobj 427 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/SQTLdmSQTLdata_plot-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 434 0 R /BBox [0 0 494 494] /Resources << /XObject << /Im1 435 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 435 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLdmSQTLdata_plot-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 436 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 437 0 R /F3 438 0 R >> /ExtGState << >> /ColorSpace << /sRGB 439 0 R >> >> /Length 767 /Filter /FlateDecode >> stream xœ­VMoÛ0 ½ûWðØʉԇ¥k‹u@è`‡¢‡­KK¶&+†ýûé+¡ÜÖ)¼í`Ùôã³HŠz2Á%ÜÃCw=áz³ûðî îv¡R Úqw·©ðùüx~~•Þöð«»¹_:‚ËxÝw¤¢¼ïò-V™æ¶]ÂÙ>0=z Æ¢2qTèMH”Ü>ÂæµòW’€ÂÀ í˜Phµ$ ž$P¾MoÖ -ïíoݼ:°5È^ª-Ú+ìIªˆB ¡Ä¿>˜½CrÙ™0¸ƒÃÞÍu88ìMq0ìÐóÁaoŠÃpKÈΠ3q1%# ™$5)v“2õhB“r±ÅÁWAªœGM‡x«Õ„ÛÇê)Y5›’õ©—’U³)YoÑ))Y5›’õ•¬ÊÞ…äSo[c㨠å^$Ò—b±J ëX˜˜VîEâ€}?€F®J±yÙ É=]Ñ’e‹²E³°ã2ö<ÆeÍÈj€§ç‚ZN[j -¥mQUwxƒFçF@MÉŽ:¾Öc µH<–¥ W‡*ŒP 9´~Œ×&‹™Œ/ëßQ9šO’æ—®³…èaì;•´LƬØq7Âb1½üæ¡Øº±G`±†5ƒÅ}÷v‘¿|œ{†â³·¨9si2Y§N´™Ì“ÉFûÔl‰¬äá9–uþõ…z¦óVÚb=À,ÅkPp¼Vÿ½kå/áÓŽê¿L±ª(Ç>MÍ]ÚJj… Û*jÅÛ jÅúÚêiÅòÚ–àŸÛ;ê©wÀOmor.E'\;¡A]>ñ…;ekè8qühÈf6. ™†Ì϶Æq Qõ{û±Y×9ý“9³N*g! 1iÊ›“«Çõç徯`5ƒ¸SO–Ÿ~>n—;øß~Ái~·YÎnaqÙ†6!”fþÓ&¬øhbý)*„/Á\l—ËÍ]‰ä÷³9ÿ{9ê†ö¹çsVµYïàM> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 428 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/SQTLdmSQTLdata_plot-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 442 0 R /BBox [0 0 494 494] /Resources << /XObject << /Im1 443 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 443 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLdmSQTLdata_plot-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 444 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 445 0 R /F3 446 0 R >> /ExtGState << >> /ColorSpace << /sRGB 447 0 R >> >> /Length 894 /Filter /FlateDecode >> stream xœ­VKoÜ8 ¾ûWð˜ÊŠÔÃÒ5E»@€ ¶zzÙtR èd·EÿýR²<’ÓaRo{°Æò3"¥àîàËðvÅóòðî ¸9 „Æè×ÃÍ}U¿ÚœPo^]åGø6\‚Kyî2bå§,Þ¸îças`#& Σq²&ô œ%$Êfïáþ¹ŸÄß¶ &fèל€Ao[æQÓ·‰¦ûÁ¥ˆžgùó°© Ó ªÜ l"d× ªœ ˆ#Zªñïâ&™ ‹A² ×\2hH”;jÒ²C6Z‰X¦ÙxíÃvÄ´„J«Jv“Ö9½’Œ§<¤šSÑ-yfÓìuB ;²ô—®M9-âèK† 61Žºß$§ŸV(k:sº–¬Œ‚¢c£}”&§§±T€®„­)Gt*Ò;´N+•®¢¤b>NëF‡Qu G c¾q l¬S€õ˜Vt IÑ4‹†cƨáäÒ QÑÙ¯ÁÓ:gÑj8/G¨†ó#š¨F`…´õ4™xòn߬â9§ž‹m#F:ƒ¶úóFî>ØÞ…#—)Ë$Ë¥'³!G…ôÎvgæ¶wÃëmùòÏ@óQì]ÁòZl™ÌX°n-6ïœÜºfì’Æôü.ýÀ˜B›¿ý‚k”›»häbÁ5šþÈ-T£éÔbÁ4²~éýŸ)VÂÂùØ/ÈLÏ^ªzAfzòRõ .Ós—ª_P™>Å_î]¡%v¡›×ö.E¹t©Ãò °•Ë^nìv+ÀNÎ÷;p0Û÷é!7õ{ó:ÊVŸñ‘Ï"“œd å£\\^Ÿ]}Ýÿ½{€nasõ×þ•÷OçðBÆêlw¿;ÿÛË> t^_tÁÈ«\Ý,'ÿ4ï×gov_¾îîoÎ!{ýþƒÏß^„:jÂN„3•¼é³>ÀKJIž çíðr§ endstream endobj 449 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 454 0 obj << /Length 3238 /Filter /FlateDecode >> stream xÚí]oÜ6òÝ¿B/È@–¿D ¸>ô¦Í¡—k÷Ðe—»+D+9ú°“ûõ7Ã!wW²“8ή½×+ ›Ãq†Ã™áp4r„æQ”ìíj\÷Å«ïÏ’º¢ïÏþvqöô¹Ê£œå©H£‹e¤–e"2J0Áet±ˆ~Ÿ•Ëå9ObÛÚº/‹ê|&L÷mQwó¶¼ì©>tZÏp(µõâø1<8¸Ž?t¶£–²¦òÕËog}G•ë²_ûÙ×~Šg¯^üãuè¿,æç"‰ßŽ0ý~ñ÷³äËxuÄÑß]œq؈$â—šå‚ÃdLKÍ7gïΘJxj܈=Ðu…ç|ÃÓ®¢gÍÙÏð¶w[²$W\^è &a&MŒ!Ânïâ†Y m¶G›“m"ÎY®µØ•%Œç†D'e GÄôƒÐý ÔH?/«Þ¶°§dc5Bðô¹Ð{ ‚ äÍ8Pˆº@qQRÄ¿%Rá<8…kèz{I­ÊMY=J ÖW¶ j–¶è‡64“8"T5çÄÓOôþk0¬+›ú 4jþ”k,û@Ñ¢šäVÑ`]°¦™crJÄïk’JjÒʈzó¡+;ªý–褳¾«³óÐ{ñ¿'çq"}cC&@ÅÙù,“&þ»X”ˆ­¨ª癌qѹ‰Ë>F\÷t6ƒo'&ðúåOÝÓ7ÀÅÌ5ÛØ =Ö>–%ñ¢¡²n\1Ô–šÃ°Ê{Úabÿ(lnã?\:œnK¡ýz ;A -æk‚š¥Ÿem7„°ôÃÃFÃæQƒÛÞ- ÜÓLP’gÑ´ô¦â¶.g\`wxMK÷Ôí]ddvæB¥ ’:‹èt ªì:`ç h“-ш܋D² Id`«g£†É•4,ÍrÚ¾MéÙðõ 2)Pï/è×ß“h 4LY×nè~iUôúÞë»Å;rsÉ8Ø#%$ƒ36°ß€ReùqøU‚53Rûë¦uJÅ“ œeÆ›—»vÅL–‚ÂíÚA—måŽÏHdÌÀ²îðв…³ø¶™PB£ËzQ^•‹¡¨:4&BÅ¿tÃΆ<ªÚˆ4a) ñxߎ¨6ˆ1£?ڷé0pJ£Ú<œ "J%²Ó•D³•Dw4Ñ7 ·‹`ßPÙ6Ãj "é*ú/xœçt$¤îHpøgBK&ó|rd5=ΆîKWl.a —ÿ±l{Ä»¤w»_,,I¿ÂT&9žYzË27Cµ jU¾Ýë¤Ó!ï·lŸpÖöüëçÏtÍÆ¨Ü8¢…½²ăÍ=QùZGôýïØÎ‹¡³·ŸÝ¥óëóýE`ÎG!»±|Cçqïœ=l°]õÖO€œÇî'1ycTo p@ÐŒ( äïáLW¶fŠ<‰—®ÕOKKFÈ1ÌٔഡoˆWE5X@s«;²)œû€Ô&hªŒœáAþóf¨ûŽàEÑ9·ä‘ƒbýˆ=Lj¿Z„hß<£^#ûÞ{ÔÓ5—kƒybXÂ#©AG²,X¬œ3s‹…Á>H †"ãÁ×_h°Ç$4`ery—Gp¿ KθRwy¶»ý¤…Ì$Y°p¨_@~œs,ÍNª°Ñ¾ŸWÃÂR…41öã7Eí­Pȶ@mÙ6?~miÊpÙÒ<‹ÿÌtÍ‹šMqF“ÃíRêt,t]U®Ö=Ê4ÚJUD(áBÓã­Í)v¼ äÜo¡ë Ûj9öØ÷NÜÛ—Èà…ë´Tโè>€ #JecÆ‘Þ"Èù) ò׳Zt~õ”Õ„ôœþÚÛ€4°Gà}MèƒKv¦Ž# ÒdŒç|, ßŒß g¹1§ËïÌ0ÍÕ”¾#ºñˆÑ¤rÌo“|ÊRçL 5»WÄ–E£"phÒüÅ£GÛí#~ø§ù6–€þ=%gZòC¿Œ¨S Ѱÿw;vÿï§®ÞRÂ]K ÚÐÅ}6ÔñûÝEãRð´ÿ:»—xd¥VÉþr=7vÚ¸Ã²Øøpë}ƒçwá…“Å“#cq+ g_7Qq£ÿì;êú¿¹ŸØ8³Š²ArBb3iÜ! Vîxó ²’Âí#QÇÿ.ÁõJÉЀü¿É‹þ—zÙÒ¤ã÷5 >>ĵsšÍGvÕ|*Âõ™‡v®?EáÔ,¾KÏﲉ·ŸyäeøöÈøœöNÍ¿üsïá_ò¸NÝ'çë²"¦™3É5“B Y¾Ÿ‹!‹ñSkç%&7PڋПó¸Ø%Ü93ã¾0ORŸ À³‹_pÑD˜3¤7@¥7"«Ðè¬ñâ‚© "¤&Öå€o<ð‘ ¥',¬¯.ÊŽPéq‰áøä=8ƒáëi¼v¹ ¸æ†Êý˜è$2ð}â» 'Àvèh1œŸšøÛZ ƒ*ééÆþÝ5ô–€*ÛÜ ·HL@2ΓÀµ8LYüÜ½Ç ‘V7)=P^ÙšÀ×/ò¹ 7gúÈr]˜Ù¿.®ÿBÇõ°±m9§f÷F¦#ؽ‚ƒ î˜2±Û9•Å(5._úPk0½¶õㆀe’°TJp KM"'òXA¿„5Bæ€Î"šàjÜùEÆuñá`B X35eÀé eæRÞ&ô30 {ÃÍx‹—Up÷ÐætÙ­2¦òú^pªÄ‘ø (’c†_¼úå»OYÞ-÷±Yoj6CÕ—îu>™UÛ —d“ДÒÛT×Sv>9À(¦2=¾&z3Øú÷U»À÷fêŒ7œ%@¯À¼ p*Žl¬˜@gÜÝ÷cÆê3¾ñ•HËd:eÀÉhHr&œÒwDc…S!Æ{t0k%`—U’.¿ÁeÍÕ …Ê¥7‡áhyò‰R<ÿöÇ×ß}&« ŒêÎZIcœg–¢Ã·ò)ÉT_¶ÅÆ^ïܸ·ÔŒÞ6–äÝ"DiΑ˙¢/Ù•+7O“çß–ïý;}•‹ÄÇÝØLïÜX€ *‚ªçyúœ«ýdà<ñíº`®Äâû¦š;ðƒVHeÓÄ %²Ly•3‘ò0ž2oÎ*2–è/œt?«lo󦆳ahߌ—Ãì:‹Þ®ˆ 弨ÜÍÕu\‘»^o\þ´¸ !fgp•‚S~Ä웞¶K…¾3‰ϕàO¨îܷ楜ý]&fm ô ¦<ûìŸIUúä'wÛÁ¡…OE*¶¹âÔ~Iëa¤”/Ìr7¿Ê.ÙgW)ã–Ï$8Óü!´QJ 'p¦á`óìï.m`Å´Þgv½X>2ó`©J”yÈ´\”yH=‡S0zº¨“9§zKé ‰=¢_€S>؃ù A™›Óå·Ó<õB× èÆ ¿›_À÷4ÑøîaF‰ÔÀS>9µ¯ËÎÁ¶)­ÕꨭðÁ.WkŽG7{ Šñ]öûit÷©X«Téøž\S Ódxlƒf|—®ˆsôEH}&B\Q5îÚc)IIÓSWÖsùr!G ‚…ôDµ ŹÊz¨­]t4ãMØzã[%×ëÃc-Õp‘h‡3õøvã.àæpLi5b†%š„ˆ§ÀöôÎG˜a2“#Ç øØÙÞïUóÈ\Ì3çø¹xÔh`ÌA¿Glüâh…ÔÉNÎSÐh ›m9i¿@í×cMij—Wþ.^ÅàãÛÛØ?4yÅwZOC(ªA5÷vÓAèë]7l(»Z ,L\ƒªºP5VB¨Õ·B+¥Ó¸d–ypC™É.Ãý÷À#ðà<έûØØQ\} `þ-&€œ]-œ‹Š¥çŠæ{êÍ@.\r¬LùÓáâïÐ2¶а)úù:Ô÷¥¯ òöAƒÙzQ‡NKó.ì²*OZGÉùœ¿¬4Ç*¸LY’>È)§H2bÄë×\¹GãŸÿãÑèðÊ|"°_0æ°N&¸wNWs2>ÜØÀTë)}Ç´Õˆ27jÌïÏÙjpÉD¾ý>1çàŠ4›sz¸»]Ôä|$(ñC+g`°RøÆ" ªKú¯ X¡¯˜|;•ôr“ƒ}nË0Å%!kÈQÃA •áû«pT°,ÍÇ‘lçÒ‘³ˆ1„©³ˆC‚Þ—ÿ¤rûVÒ}¸U? ŸÆ‘{†u8ƒˆ~L>#¨ô¡ŒwCÙûEV–Mø>úJ§,•Y43ÜE4ÝD6zäý¿yÞ endstream endobj 324 0 obj << /Type /ObjStm /N 100 /First 891 /Length 2098 /Filter /FlateDecode >> stream xÚíZmSÛHþî_1ß6T]4ïo)j«Hlª²—áörÇòAȃÑÅH^I&ì¿¿§e 8&`bÌf+©‚Ǫ̀§§û™îžž–µRL0-4SÊá)˜r‘i…ÿ(™ÖŠY‡qmXÓ–EC}Ǥ "í™”Ò£Ð0n uDÃã•L*Ðh(4°‚4Ö YN¼òXÐâ¤Â° +Ô ÅrJZ9°ÏH$«&¾)mÑ°Ú ‹†¡=H>¬¦¼?¬ z,hB€Ä6’Þf i9á1â DCÇRZ;â”´£™XP;C,0â©ãÑóèÞ2#<8ca£HOp7*MdF{p‚C2‰ðÅT4ˆ}ÐhD… ÆJ40ÁxCò`ºv Ѐ”VaŽUýˆeÖ`IiÄ£AêÄ€í$˜±·6†#D€(6F90"2'I)™3ÐÝ`‚³ŽF4sÎЈaÎkˆ)-0)ôÊ3°‹F4¶è.x΂y ñÊÒ¢ŠA-BK3ïÐlÌ{(‡ÍñÖ‡ðÁsæ£fÐÇG`oLR°…ì:F €‹àzÍ0âq†˜„éh8E?âY”´O@#*K#‘EXÒÛƒ6@>ÒVe 0Hbô4BŽ , Á¦……¢E2"(!¶†3êKcÖ˜Áææ€ïÿ9IŒ¿¬ŠzXV£ž·é²Çø¿Ëj«jËO¯·ËããÔ¤ªH-;+~ZVÓ–EÇÿ˜Ö]§ãfø°îÆ©mK>jò³ÄóbÚ%^”M1==§sÞ•ãaâ§yÑÔ?jh0%/ŠTu|Xb‰¶lyVÕÝ0ókó" Ëñ8¿<™V£¼™žŽóiÇëQ]¥¼È‰_;É‹t8øùç^Ãmv ±ß‚í1þþ?ÿÆY¿íVdÀ©šŽÇW¤;uÕ±ÍMÆw°1òrÒìÐ]t,áèúfñ÷oŽþ—ŠÙ¬W§ˆ°ðžðÕ)Ü<Æ+·M]¼KPão·wßOç»Zy¶ oóQð0´p|AÓ|/µõ´!Ì)<õC¿üy}Έ†\ Öy8à»M=ôÒ¼ÃM^ Ú¯?!ëš)Vy7Ûé¬,ÒÞîó^4¢è¦ìŒ÷Vˆi)^’ü.éy%.”N‹Ô°'“áñ~zÿTÓL‰ Hߤ¼«ñ×ݲ®¶ó.±'ÛÏ”PÛI/£UO…ùIˆŸ@÷k=¼‹ÚL&iˆ=ÈÇ-pz»ÿò}¶ƒý;Ê«ŠdÙ?)[†¿™Lÿ`¿¥¦ÅÒLgq"*gŸªÌ]ÊÊ~'Ùëò,!ÐËLŽÊ¼ú}ƒ}˜äÝI›rvvÁÀe`±q©ü­*É[t¡wû%ƒ=Ùc»Ðæ¤,ZöfÚM¦ÝÆuP÷˜É$­ø ͽyS!SðwÓ£®ïÒ ðæ§ôNÍü¸7gþKŸ¥®,òÁ•›÷'"mõò,õ,Ÿ>¯Çûø¾<ïvßuêl1ùÅ—Eΰ/1ÜFÐÏ>à¯^¼ i†X²‡½Ãï$–Í4ìýóÚN½.«жn†©éÃ8ä¿ðWüÅAæYÿwH1Qê@úY°Ú›Ì"@ªƒ(HiƒË ¨¶.CÇn½_#L°'E٥췼¦êyjF ®â7(¢Ý$ÒR2ô˜28#ÎPœœ™ës “áX;¼R¬×‹omnökð­‚œŽ¿ãÿÚ{EÿONºnÒ>ã|Tv'Ó£¬¨Oy Cys ¯¢Ö(ím|’“Ž—:HuOŠ#;‹È'–92®|1åopJÛ æ;”˜z³xÌ,ž,”¼Ú•c¤*ë>L®AjÌÒèÏ‘^¢¯2JÅ—Aðë[1‡þܹ~m+¾Ḉ°T„Ã*iΗlöká°z+×îDŸÃaÕ*p<a÷¨ø¿§pâ1pò¯FÀ-"`û@,Ü}¾/áˆÇC\[.Ûw\[æI¾ýk É{›.ßε%˜õ\[nâ;m™»åfr÷½ÆÝó^ì÷t¯¡8åź’—ùL—VŠaq±,Âö#†-Ãf‡aŸø^#³ ä÷GB\W¾3G¤ ªÉ*Ĉ…ÜЈõå†F„Ïê»ôA„ä7êV³§~øz/¼ÐÝtÜß,è¸Ûtùf‚}[Gй‘ï牓7q…Äé¶Ù7$NF‰áû„|ƒ¾T© 6Ëdð™2†¾Kg1ê/W„_Ã7óq^V©‚3éÕ*ÂR¹ÌiÍÕø¢Çê!‹Ë$SÒ߯$üŒó?fpî,/²é¾_×ã–Òô,–íÓaÞò•¤µ…k…S…>|[ù™ðÊ©¯v”È©ÍêfÄXŒµåRe'Ýéxã îÒùL]uFß…}ÈÄ}ëí÷¨¬‹ºBäBœêe…A~ÀÁÖòÝ ˆûc©hÊI÷ò|ÒÌ×àI%«Àó¤³*°•"³Ú,E«­Ï¢öKÑJ€^l ù³|–üJù‚Z(áÓ/ 1_Pj>/¸¿-*6ÒÛŒRVíbÙàxÜc[£Zú›Ä<éÌjœê=éÞ¿!˜ûì#‘qz}“m­^n3z¡þj´X»Å>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 457 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLdmSQTLdata_plot-3.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 459 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 460 0 R /F3 461 0 R >> /ExtGState << >> /ColorSpace << /sRGB 462 0 R >> >> /Length 754 /Filter /FlateDecode >> stream xœ­UMoÛ0 ½ûW𘪊Ô÷µÅ: À t °CÑK³t@פkƒbØ¿%Ë–”¥Þv°lú‘&ùD=#œÂ> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 468 0 obj << /Length 2039 /Filter /FlateDecode >> stream xÚåZÝ۸߿BŽÈÀ‰!)R‡ÞÃÞ¥ R4Åfë{ê…V¦muõáÕG‚ýï;álKÙ¤‰c/šI,j8äp†Ã™ßPáÞÆãÞë«_–W/^©ÔKYÉÈ[®=ÍY’H/V’IzË•÷wÿe±^/÷Mkê¾ÈÊE ãÄïÛ¬îò¶Øõô>t2m²-«W_Îünù—qÈÚìLG”¢¦çí_¯ƒÎ<Ðˇ¢ßºÙ·nŠ—·oÞþmìßeùBrÿ~"éË?_q§ý‹WR©*kéJƒæš4¿ÞdEýãh„° ¿ëÍŽZÍŸúÕÀöšôËÄ7eQâÇ6#† Z;6ª¦ë©¨-oên¨ŠzÃA&þr;t‡žbeZz:à!ݘÔÚ!®Èõ…4‘a8Û¢Ò”?ýôv(û"oZ–U¿sÍáŸøÚ\1©@ ÍB`*Œ#¿üÒ,dì· |²šº,xAÒ‡ ›Ú{dEbé[ãX!}M\•Ã'^ RÍ Ì@ÐËá¬Ö ª ÃÐ_e}F-D]ѱ=®ž7y8óÍÉc@ñ¼ÉcÜÚù«¹'Nàà²Ö1KâC`” #d[ÁS&C}pƒ¯[Õ×i|Inô¿ã_Ë;'Ž. Gîc˜¦Ñ" íö?,‚ˆKÙгÊî µ,ÆÆ¸ùôÖš]Û¬†¼¸+ÍIÞÄx²T˜Â¯€c`yçÄÛ×óóÆ—F´îÎô¬3fuÒ°qü»ç=þNƒÇ÷45m¸B]H/RsF$B†Ï †8IÆ—zÛÌÕø4¦Œ^ökVæC™õγv­É‹®hꋪÿ GrK;ɃlÄÁ~ûÇšØ*ôÇà¢GÂIYU7Ïb8çþ«SÚÞh'úû´£À[Nå‹@H®üßl1MaˆÝpgŸÚX·ã D©‹S½ h¦ƒ~ïqySU`µ™÷9‘çRq¯”üJ¹õ`6N"&Øxãþié„ìƒ#úlá?ÓøÒ8t¶ê*ÚI„TàJñ—Ì^ÔEÿ ¹(÷‰¹#’üÄ×veÓé;Å*€ÎE«f©^¨Á¡ìpöphDD±å8jÚ®qœ#¼xSAµò²àön¢÷OÆAuÊEŠ•†ü¸°§»`q£„`\Zp´6‚ûp\l¢G—±¡ÄcêrGÄ$S`ÿmk‚ø.nß´Í®ÁëDî÷ö˜Ë8ÙÞW?{q*¦ôº+ã¶È·¥éƒ +“º©ì½±Š=”¶•úUcoIWÆõìlÕÑPé@%Šî^ä¶$±7ª¿ó0Ê S÷Íao˜±Q÷ ºrÝ6n;ùÈgËC/c|^¹‘,›f™Úd¹+‹0Ìw%Íšß»*'+Z¶tú¿-^—‹$ô„î$öë†Ø·ßAiÞ£ºH=`\ûv(¹"¿¨v¥©`:\¢%¸²ÊdÛðºü‰—f`,muûð=QR' *ÛŠ¨„¥ñÿ@ õ¥û“WÝ2Ò,Vê;†¯ Ëÿ¿æ¼³ëy‚\è…tŽ¡„¾@‚X.HÚЉ@?°­!÷1gØopiˆIÝTôþ {£çt˜d!÷ýsý×Ñ¥/hعc;÷>·»µC‹¨›Ê½{H²J)9Žw*CoµZwDCË= ™ãèSMÙÂñÎZdÚ67øu_›šÒ8Û'Ø#ÿ·G@Á5¤vül‹+G»¯Ñ¡Žý—Ë߈2fz„‘µ‚MôØ3Âä·›ÝTô)Ùö®Vî—ÕòmV–¦ÞXG°’²žz¶Ù{3]Ú¶¨¤ëª9J°x"Qn­Ø°xšúèâ5<‡6$ž¢ÎËaådÄ\’G­‡êÎm=°\¶óÃ&v4d¼¦· n–½W†·#À¿-6ÛÒÉ}O2ŠÌ]ÿÍ•A£”†¼rÝš‡ÁN (Ñy*愣ͷÙaîêõ}fu€C´*:˜£(‹;;TÎû®Ý|ÖxÀØàF©#ëa«V ·:„ÆÜÒ²ÝÎj$«MÏL5ô™ƒàiŠ£èåœvž¦Ú!Êík×™®sLvcù>8@ ôêÛân8Ìm7z` Ãµ…•ìæÈÐŒ+j› u|º“ýÔ~ìOy¶ú×ÐõˆcݹZÓ‰Är Fÿt't¼ÏÊÁŒWýûP9ùŸ)JG, /Hä>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 471 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLdmPrecision-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 472 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text/ImageC] /Font << /F2 473 0 R /F3 474 0 R >> /XObject << /Im0 475 0 R >> /ExtGState << /GS1 476 0 R /GS2 477 0 R /GS257 478 0 R /GS258 479 0 R >> /ColorSpace << /sRGB 480 0 R >> >> /Length 5226 /Filter /FlateDecode >> stream xœí][¯dÅu~?¿b?ƒ‹º_^! Š-á)ˆçx°ŒhL,çç§Ö­vu{Œ‡é!æp>!úÌ·nµ¾Ý·êµ«V…ã³#_ß?|þÿ?¼ó^ŠÏÛŸ^ÿy|ûðÑëßúññøú!L¡?öÇצþäÅÔ/>ùIÛñׇ/¾<üñLJp|6ÿÿú!ðp¿}ø‘¡?^ù¥îF:rq>ÏÇáÊ8²O.Ö·ÌðGý¿: x7b<öG"à]I'C@b÷èj:.ytW¢Âo^¨:Æ9h9õŠOƒÔªËí4PL%¸î5ù‹¡Ü]ò¬#º–ÞàiRÚ ž¹åÝÀà6ÄÕ3( ‡RgŠ7Fóû°1Ìñb¤Ð+e…瀱&—ÎŒ n)ÏÉf`ð4øèÓ±´ãO¯ç³7Ýç³™§Á|NS’×ì§/›µòŒ·pý’=fð©ŸcÌgnÐuJÒ¼>e¢àÚ`D¯µ<Ÿ†jè‘­“ùÔËE6_A[¬U2¯¥_¾ù¸b kÛôš©úîy?>| .à.à.à.à.ÿt.aFHã i®P1Av¹L0ª´£7§§a&’Š‚G6-.Ç¥­46?ULEÀÓmó ôhQˆ©Œ©ZÉFý¶\‘>ÒGúHé¿Cú{¢$ªB¤Au§ÖýMâVK5Šãˆ1¸ÞgÜîZaöK2\§"St­¡L'?Qr=zdëLßDK_è;kù*âØb­’æj[¾óÂL¡Å$Ö2¶é5/õÝó–'\À\À\À\À\þ™\î»{v¥¹>ãúê¢ç a‚FsãÂãDß](Gz(Óê©J¢‚9nÝü pT6UAq!.¿ìb^Q©)Z͆ý®r•'é#ýwN?¦B·ö“.$ù0Éüe&ªóý2Q¦ûå15W‚!~§¦îJ?õÃåzú*âØb­’à|=}½ ýŒÍH¬ulÕk^ê»ç .àòÿÁeÿ¦iµÌo‘8:}£ŒÛÈ­Vk %¹éŸrvaÈ•0I¡õ=±pE'Íï½'*´–Gg[ª«þÔ7—û髈c‹µJ’ áô.¦36#±Ö±U¯y©ïž·>«à.à.à.àòL¸ì3 žxŽ“ùnO73 [­ÝLaþžI]«*‰4m‹ÉÓ"^C;…´Àa’ùÚœŒµSŸhÄòUıÅZ%žÜšïüÅ4³²Ø‚ÄZÆV½å%¾Wy[\À\À\À\Àå©qÙgsµ©ÍϹÛõlîV+³¹äçÖ³K•¯Ä’)«5ÞOÖ+Ÿü MhŠ(ÛDÛÒúÒO4êò5ı͚%ÉÅ~úÎëæÏØŒ5[õš—ø^å-Ï*¸€ ¸€ ¸€ËûçrïêÙ0Ý´¥ˆMæKRh;Gݘ¶<Ñü¦¯†x^à=—wD}àòŽø.ıÅZ%‰¶/ßèz:c3zäLº])Ök^ì{·.ƒpppù¸¤\I4O«8.»$Ðà"w5i‘~*§èþˆ"™d^hhz^²|ql±IínŒå;Q+¶ ±–±M/y™ïž7¸€ ¸€ ¸€ ¸€ËSårï õ²H­¹än‹I:-s‰¹º:nƒj-17ך!žkæN»K–~¸O_E[¬URiŸõò-´DfÅf$Ö:¶ê5/õÝóÖ;Gà.à.à.àòL¸Ü»Ê"6n¾EûŸºîÔ5IqcNĺ'Eò•šíƤ¡-#ζ'ºwµô‰öÏ._EÛ¬Y’ˆôò®36#±Ö±Eoy‰ïUÞú¬‚ ¸€ ¸€ ¸€ ¸<9.W; *ÍעϷ; n´ºf¶$ÚL•|§¾)—]2èf*™0 åGµNT¨9„"®¾•êb<õÍú*êÖ¥eIñ`¾ó*Ι¦Å$Ö2¶é5/õÝóÖ*%¸€ ¸€Ë“æ²¢^}éõ”ŸÛµ™·Zû}ž©vG¢ÚÂe—d¹ÑRøÊàu§±U¾»"ˆ¿ZãŽ=¦ï”æòUıÅZ%¼îtù¹¤±‰µŽ­zÍK}÷¼í{\À\À\À\Àå©q¹»O} ´¹ Ù•ï•H‹^jã›J4•ì 8Ó9ïŒui ­¶1?Ŷ™ ó=#õK|;I£¦u·IÇT­d£~[®Öjé#}¤ô‘þóIÿî¢tªœºÔ—û²IhOlŸ¨ñhCOJûIâ‚KÔSÂôÙsg2õU$±ÙÚ$6ô˜/í§-+¶ ‰-c›^3Uß=o-L ¸€ ¸€ ¸€Ë3ár÷6*BÌÀ#Ò’‚Ë.ÉÜùƒJQŸI·Á @Ù"‚V—¾ó6ó5ıÅZ%–,_Ok Vloǹ®±U¯y‰ïUÞVÌpppyß\î-°ÓŒBGŠ'š3\vIæ•y´cƒŽ#—}3÷\ ñ¼`r+ùÔG:»Ö| ¥5C1Iä…%æè¥›[ÛØ¢·¼Ä÷*o? ¸€ ¸€ ¸€ ¸<9.w/~ÕJLíT¬¹ì’™†ç#÷¢4áöºKÑÏ=gkzªµåk¨¯ÃjLÒhůùÖÊB-HbËØ¦×¼ÔwÏ[çèà.à.à.ïËÝw(*÷Ô ´êC+H&©®xF#OÔø¶JåÎ_Š8Ûšè°¥OTìY¾Š8¶Y³$»TNßär;c3zÔLxlÕk^ê»ç­Ï*¸€ ¸€ ¸€ ¸<.ú´OY÷¶ÞdI­ ½Ð}«@­ÞIX¹Ç» G¶n®Sßi«ÈòUäm½‰IÚàÆñêÛ:­'±Ø‚ÄZÆ6½äe¾{Þà.à.à.?#—2£OÃ2¿t¥ò±$|8{(ƒŽr'DÙÍoÛ ñx5¸ÚO}t¥._C[¬Uâ9;óå3ÐVlFlmc‹Þòß«¼Á\À\~ \îoÔ¸Ý8÷Ë.Éò§Ó/&ÚïÎä¸fAükk~=İô]V_CÉŽiXÎù®N[lFlmc«^óß«¼ÏõŒà.à.à.à.O‹Ë½÷ãS*t÷ŸZס{'URx»Eª.H“JÚŠ‘š´dôÈÖ– ,ý&–꫈c‹µJoÕ0ßÈ›3,6#±Ö±U¯y©ïž·íppp—gÃ…ŽúŒ|¿£jo“$ºµÁƒz¾=Q¨{wu¥âñBã™é;WÓÌWÇk•p#Çåëù:Xl¿®“­zÍK}÷¼Á\À\~\r‘ÝúS¥+,I¡#ir 6Ð6—È zdëD÷¡—>Û`_EÙVX’D‰,ß4Ÿ±‰µŽ­zÍK}÷¼Á\À\À\Àå¹q¡qI~Ǧ¡»öTRx¥xâmqô8eÙg q%?{Z¬nú¨o ùâØb­’ÄôÌ7º¼ÅfÄÖ6¶ê5/ñ½Ê\À\Àå×ÀåÞCèSï®GîX2G»ì’Ê¿dû ÿõ¤§Vrôµ#ˆK;¹¥ç¥ù*ÆmIfþíôM.36#¶¶±Eoy‰ïUÞZ-ppp—árï©LG·ÑÂú`]o—„ÏdÏ­RÁPïñ ½Šøwg뼋Êôƒkëæ«(X×Û%áóÜÍ7ó î[XËØ¦/¶S€}÷¼õ÷9¸€ ¸€ ¸€ ¸ü—{k \½Fõ-U—Æ À»—ÊG‘&÷]*#ÑU]²_zªªôå«Hb¯ª‹,\¯eùRÛû¶b ZU—rê5Sñ½Ê{« ¸€ ¸€ ¸€ ¸<).w÷­õž;2„L§Ë.)nŽ>P¹)„ÊçûHe.Eœ­O®ŒSŸéæÙòU”­¾µ$‰ºÎ-ßH-óWlFb­c«^óRß=o}VÁ\À\À\À\ž—{Oo¤M1´Ü(GÚSxÙ%‰Ë€=Ëâ¥Ì÷Â'(zdë*‹ŸTÏë”–¯"Ž-Ö* ²áF}½l¸ÑØÞVÀ®±U¯yÛÌsæmÝ"Á\À\À\Àå¹p‰¹S{瘛qY’N½b´Í…þÐüŒnsC<ã*Áõqê#—ÑÔ×P3.KRy~f¾ÅÕzÆf$•<[ô–—ø^å .à.à.¿,.÷v‰¦…4ôë¿ÎŸÝEûe«$Ðò\jH 7ºnžøädˆ¿ Kæ~¦/´‹hù*âØb-’2ø(õ-2ÐØ‚ÄZÆ6½äe¾{ÞÖû\À\À\À\ž—»w ùA§ FßÜÐN&é¼þ8x"§Ö‡@fŠ(Û"™-}¢?ËWÇk•TÞüd¾…\±‰µŽ-zËK|¯òÖUÝà.à.à.àòl¸PË—>gT-Ó4ë²KŠËÔä¥ñ­ÆaÒLrNž=²µ ©ú9:Ÿ&)¾†²ñ¼$IšÄ¨o¤iÜŠÍHbëØª×¼’5¯9óppp—çÅåî•¢ÃSSóšóMêY&étpWÁå>Ñp>NÄç¶*âšÓH´ }é³+áôUıÅZ%s~6Nß§ÄZìb犭±U¯y©ïž·ÖæÀ\Àå-¹ìŸ}ÐÝíP©ÃCôùæ“ãV«½&s¦ûñ)ZÁuÙ%•O²ÉÜÔ8åÆ=¬¦°gCü97ÿ9?Œ–¾Ó'ÛòUıÅZ%™?cÍ7Q{Œ›‘XëØª×¼ÔwÏ[¿À\À\À\À\ž"—©/y,™~)^v /" ƒ è$æR¹}yÈ.FCò+µ¸8N}u¡¾Š8¶X«$q{sóå+6#±Ö±U¯y©ïž7¸€ ¸€ ¸ü²¸ìÕ‚V©dV…Û:ã­V댴ñ½q5¢W©›˜¤º‘d+|áúD¼¾DC\Û˜ŽZ¿`}•J‡úV«{tÝÇf’ìZ?}Ýù]±“Ýc^c«^óRß=o­ ¸€ ¸€ ¸€Ë3ár‡ÅFݹcìôÓý²K†•—ÀåtÄä©@ËãŠ7DÙÆà©`ú¨`¾†8¶X«„¯›ùF¾n[[ëØ¦×¼Ä÷*oë´.à.Ï‘Ëü\£¢#a¨=s—$“ONÑåÀç'Ö1‘a$è‘­¹¹ÈÒó1FËWQ²ž¹KiW÷ò ô½b3k[õš—úîyƒ ¸€ ¸€Ë/Kl…@¬ÍÖf.I篵Ʒ×b|Z/‚3 ñ÷’SOý 3Ñ—¯¢fk3—¤R¥sùþJ´ØÅÖf®±U¯y©ïž7¸€ ¸€ ¸€ËÏÇ…¶PO¬h[äe—$ç3oP Z8Qã½”‚¸6óñÔ>¸Ä|;_nIhIðéëglFb­c«^óRß=oppppyn\ø³z¤9ƒê6S‰Ô·;:{¤&µïh/¥"ž3õHí®–>Qaaù*êvþî’H}[}«Ô¾5v=kã:¶ê-/ñ½Ê\À\ž/—«Ý”‰W@椧fß즼Ñêê€ÌË(ð¨ÚYY$3±ù©lm;ŸßMm[6ÄÙf%¥zi©l¾‚$¶X«„ïë™ïD>¬Ø‚ÄZÆ6½fª¾{ÞÖ%\À\À\~\îí[t~ð_ô{Z%ͅȈú²Å™ ýPÈLQÔ5 ›™¾òóUı­ Ê’ÌAÍ7ó€›Ñ£fÂc«^óRß=o›s€ ¸€ ¸€ ¸€Ëóàr÷êýê]èGšs”+a’Æ jëœÖÕ‰:Ý5º q¶5¹N='½|ql±VIáöÌ—^±‰µŽ­zÍK}÷¼õYpppyï\öoÚÚŠV¹©–^n¾ioµúMK å¸Ù¬s“tZ,L›ÿ:N;hY1m ÙgK­é|ãÑ|ql³fIåëf¾…¯›Åf$Ö:¶ê5/õÝóÖg\À\À\À\ÀåÉq¹»ïìÓù¼Ã.°–$ÑÚ‰@Ýðg6sBÚæŸà9[A”-õa 6¦ÌT} ų[„J-•_¾ž–¨­ØÞN"Zc‹Þòß«¼uÕ¸€ ¸€ ¸€ ¸€Ë“ãB³9™­yOgzœ4[ t4È_¾8²‹¾<üñÇ|ö:¯‚-•z†^Ž<:7ÓüÍñb 9èù¸‡–€aÌ…îêå2\Gö‰ºŽþðj†ûüøþ®ÿ?~)S×N9}ôú÷Ÿ~|,½BÒ¿íU}/Ɇç¥?2?^äW%Cåè–ÞàÒgŸw½Á¥ÿ^ÚÏÑJ?W#?ñ§¼úµoz{ß4Ƶo¾}ù¼íëþöý.¤“ÞoġϧcP¯9öüÇwš/æï¾:.¯þðíñêÃiq|ð¿ÿýëׯÿüÝ·~y¼ülOíRÙÆÿÍ–Öüg¦‹R]•÷àÊeÿøgÿ\™ý5|“Sà<öGÊi¾À¼çϦù¡”KâÆûC?¡¾Zñ¾Ÿ/î™åAݲx[Sž¿¬iÂ…ãJþ¿ŒçS{74?–ø£¿øã_¾{øü/£½œòÍ3Ê8ЧöäB›~ìuüFgZƒ:ŸƒÍùÍ/ä7;ùu’wçüöΉž‰¾;—ŸàÜ­¾ÝœëÛ;çÔè+{sn?Á¹sûÉ͹ÿ½×軽kßø‘AGQÌkÕ’ EÞ¶¿ûËå¿^ý@æ[Ö¼úÃÿüe¾iÿæ ûÆOø¿}oÐ'¼§jÑßý„>RýHß—cáùJï<[ˆ…JE›…áÓb¾VCÚ, / :ýâ|»]Ž…O‹‘¸ƒÑ²0¼,rô‰²,>-¨·eºð™©²žî“íàí”;Ûeaø´PvËÂð²0vf±ði¡ì–…áeaìÌbáÓBÙ- ÃËâ'OÆþKCÅ+ endstream endobj 475 0 obj << /Type /XObject /Subtype /Image /Width 300 /Height 1 /ColorSpace 480 0 R /BitsPerComponent 8 /Length 832 /Interpolate true /Filter /FlateDecode >> stream xœ‡7ÔqðÆãU¼”‘-‰D!3޳׹éÜÞ£¢=T*{¦DCY‰ì.tö>ÎæîÜô7ôýù¼?Æ×Àùêž:Œ§Šà)£xŠžÁ•#¹;h® Ë•â¸R'´–B[¾à›¿â›À2ü²øÆòø† h}e|Ý7Üw° W[…«©ÆV×@«j±ßj±•ß1•u˜Š:Ly=¦¬]Ö€þÚ€þÒˆ.mD•þ@}nB}jB}l‘Z%-ÈâV0î}[\Q[Ü»Ÿ âm;¢°ñæ[Ð›ß›× ÆäþŽÉÙ›ÝÕÙ Íè‰Jï‰Jë…¦öF¾î‹|öG¾ìH€¾ˆxþ'ü(O„?„=ù }<öh0|8ú`(äþ0ôÞpÈÝÁw@ap’08QOßß º9 åñƹ{9ã068cMÀ˜ŒI(}ÒŸ6¥NùS¦o÷’füˆ3~pÖ7aÖõ‰ŸóÁÍù`ç¼±óÞ˜yo4¸à…ZðB.xʼnvL}ô¨ZWW£££9rXsèF[[£¥µ{ðàîý»ûöý „½Ô endstream endobj 482 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 486 0 obj << /Length 2211 /Filter /FlateDecode >> stream xÚíkÛ6òûþ ¡½2°bøIàú¡E×¢䱸â­¥]«‘%G’“Ëýú›!)?´›×±ìá²€% ‡œçÅ‘B£ëˆFÏÎ~º8{ôTÚÈ›ò4º¸Š%ÆðHKN8ÑE½‰—WWFã¢-ê¾ÌªIµ‰û6«»i[.zÿ¼ì2Dºž$ˆêaYïŽüòâ×aÐ`*þ؇”µ¿¾zþcÒïüDzŸ…Õga‰Ç¯~þûëa|‘M'œÆo·(ýqñË Ò?zÊÕ†è ²âQ"H®¼ä3Vã<Î&ÜÄÃC?á:þ€Æp1  ù²Ïú²©=´›Îй“xŸ•UvYd’HªãßfEíÙ!\Qk¢ñµ½Ž>5ôê̲’±4_ݬۇ`Ö“‹³wg ¤§‹µ„s¥VJU4Ÿ¹IŒJA1Të¨-¢«³—{òèÌKÑH«(G#I©bJ,à8%/Š6èáË%â‚(moHDA–#  7ÛÍ—HÂ;¥@@QR¶-PŸL ð2ÍåX ‰ûÆ$´ZŒ$B'™"f “2bÄèÔýËÁ%Ñ&’ ø¼É¡€]¼[fUpý¾ùºŽ.y J7c¥+°-©Ž£t$iõÈӿ˪êžJ¿.ê¢ûîNµ¢QvîÖI„I]hK–B4wiBJ×Kàîd¼HÞgÕ2€ó²ëÛòré8BÊΣM',Ϊé²Êú"÷ «¶™{¤Ì/&†õ%0 øÀ7Dz­Õ·é%©§6‚œ(ÐE >gÀâ¤8x —T*ìX ã…E$ÈÙèpq^2ARÆN(WÛçpQ^BVdFŒÄ9fGŠRð‘@_ä …4% 6p¤GóJØÃ ö4UÉ{Pýy¤=‚|~ømµxj±*cC ÚõÎ(ìqtg±*CаWfH§! Þ3ÞM†íU2MKCºŒ2$Bš+ ‰´óOe¸N7’¦`,¾jðàÔúÁ"ô:óȘ¿ëŠ…?kÁ´ê£‡]f_ÂÉ+ñ _jâDÝH÷ÃY ‹0+§Ü*ÈÒe€”u^¾/ó¥;ÑZéxÀÙ`xðóØÀ|ZvãÙbák²éÌCæŽÓaáì->9ÌoúMòPJ4óE`ÌÓ…‰å¤Q„ö[XÊòØfñP¯¯‹®G˜„ƒtY_ûaW~àÍïTÈv@hHêÜ|˜•È:Þº-È'‹+·r3Z&/®²eÕû‡¦ÞàÌBípB!ÔCËz:ÄÛ “ÂBF »íbÛC‡qL>%mÊád zW݇Û~‰! ˆl2Ø]{°”!”‹±8\ Õüqä’’ô–D˜AwgÔH‰LÕ6Ú¢_¶Îí”÷¥â<ë³`(m66:80\•ÞwªrÖ8ÇÆ_ç~´EwñS:t®/§Ý9bP°Òë¶p=@tNæhEÞÌÃaÀÂÁL¨m¿ÚˆW`Ý®O…7?õŸÙ¼¬Ëµsø!ÿÍ3æbÖe>Áó²üÏe烜XŸ)X\ £žqQp‹lð@ 7Ée–}ûèõó~`‘•-YXm]Bæƒÿ‰¢­Ë°ÿ#ð½±·ì24 •a`Ø*ýqE˜ÕXŽlË0ïÁÔý>6öæï wó÷ÎdMÁðlð¡|Ÿ uúÆq÷èM’Rÿ5ÙË<Œ6> øàqÇÀ5•|~yfJ»êó;U4‡v\‘èvq°€Äüâ>|Ó>Lïp±JbBL;Bƒƒ@é ÑâݶSí06nÝÐ0/ý<‡Üõ¸Pòò¨nM9Áó OÑŒnÆŽaBQÿnWçY)fØËdc3?þD e—•ÞßfE–ŸÂÑŽ¡¶Ù(†N3öŽÇþÿ~’hÃS†ÃŠË‚µ‹Î£%ÔL˜j  š¾u8êOcï1—Æ]½p(p×;Ï”œÉ¸j=ùëFIM¼ð¥›+9SDèQ…ÅÌ_ž<ýŒâ?Ι5‚p8Hq*7äa †"`¶„_sÇÅw˜Ç¬×ºë®í‚oRm¬¦AØWm… œsËg\¦iêuSHªF5ô  ¾.ô'xÔŸÑÅgæÝÐÅçðMj”MåÞºÙ…xØva4ÓêPº\ÖÒƒÙ…:‚.ä ã…ejeTs¡ù ](*˜±;è"}èºÚBÌÐ{ë¼gvaa3GIÈÛÃ2 \Q¬ÔŒe|«¿¨nÄðÝ‘Å}å}Õ}ÓÛ[ŽßÞþþ¸$”…¾ü?'FÄÍr’«ãiVû›…kãï°ÂMsÙí{ìaëÈâgRø¢yõ¥â¸ÞWçï×íóÍUú%~9å»M°†ëȸ¬±qÍb8ÂЗHãÀAïÛÅ›ó±]Üc÷êU¯›d,tŒY\;9àÆ·à›®+/«Âƒ²€óaÕ¶ÙšÑ<ßô÷¾wÀg9ÏúZ¾ ÓûfÀ,ÊÖßvå\£^J|·Ž=ºJ@Èæ‹ª¸M œŠÅ_êßíõʜRÝ;ûs)ºâ‡ÛbÚÌçEûÇÐoÇÛËШ„Ÿ{n±[U;E (ûÚŸxi¢%ÂSb¸<Éç6@ÒZæ‚·azÝn¹ç«ªþãâÎÏmÂJ¡çŒŸZp±z]2ìFØ ðŽân}çÙgC¹¯4IS±K+·½Þ†7*¡¿û:´Æ¡Äÿ´ŸèP0jÀœôðÖ¢{x-ÚS·#ŽKh«¿Ù]MÃŽ¼9vªióÕ§TGÝóÃí@ü—cóëËâóSìq^LÛ"s•À ¨ý°Ÿ9¹ªmÆÛ7§pMä鿾~r“bç¾vÿã[{²*2¶þ;„Tpv&J”$Ò††§Ø§Ë éù¿, ±T endstream endobj 483 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/SQTLdmTest-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 488 0 R /BBox [0 0 494 490] /Resources << /XObject << /Im1 489 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S]K…ä\.}Ï\C—|®@.Uî endstream endobj 489 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLdmTest-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 490 0 R /BBox [ 0 0 504 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 491 0 R /F3 492 0 R >> /ExtGState << >> /ColorSpace << /sRGB 493 0 R >> >> /Length 1252 /Filter /FlateDecode >> stream xœ¥XKoÜ6¾ï¯àÑ>dÊyðuu0Т­æäP¸ÎÁˆ $› è¿ïP¢V¤¼ãì"$c43œ‡>Šó-ºk‡îÁ}ÙýqÂõËþÏwWîn¿CðÞ»þ¾¿{jê×7GÔ7¯«O“ûw÷á£ók½vèÕÀýº›þM·à¥û÷õÞ]- ¸ˆ€ÉI/N8$W³÷îéG¾èÿi-ÀC!rý½à!ðZ€ß0¯˜‹{ÜIÉh‘?ïnš‘ «A“W&ÆÕ É«PΫA“«²‡Zq¶«¤Op5XÄÕ€©@ƒÁ"®BÊj°ˆ«Áøšç”c€׌gq­c†D]Óf¹kZBH]ÉMîš–²tM›å®i)AéºÚäj5ãµ%Mêêɤëi»ž¦¹ëi»žêêzÚÄ®§)CìzÚÄÕ@‘§1h\ôÎ(šçTçf2”ìP¡–³.ƽ’|ä¦,³²¾çìge¡úÄX¶D(ÁZ½n¶\Q7´¶Üô͇°”µþÅ r4}1B¶ãêËc\™¶~Ó ¤bÆUx';.$±µÒ7S…ά±˜J©­Œe‚G_mÔζ·‡ R¯ZR B1]£â,Y®jÄìSì6öóN$‚àÍzRIfRó~³VÎB¶oñ¦¯mÄ)Ò9X9“"Ùò%E:›õ’"²©U¤S´*"E:™HŸÎ´µ˜­n"‡¸¾¿ªSœ#›+ÎÑÂ9)Î}1ƒ*Ð}4Û¨@÷&ÐIîíbC€bÇ J2µ‘ë™f­õä ×<ëÉ”‹Ùª Ûqç“ÃÒf†LV›sª)XI=.í°%Ô)ÁÔH&âØ3$o½"ö©ZZZDˆÁÖês¶*b,Í]G¦`Ç¥!š1Ö1ÏòåÁ<ØK%î!3M¨³‚D̯+±£*ÔÙ:JX‘ÎvXE:›;Œél~\Y‘NÅl£"LȵÈZY‘Nd®¬P'o4¹tãæóuèhèhF:šLè~ˆ[»ãÛÊ‚/ j‚ÛImÔnGµ>g¡í¬6dE/ kÂÛaMêÑívX²âí°6he;¬ YÉvX´a;¬u`–°ÕåvTÖÛQ­G†Äí¨6hÓvV:¥T#¦ãx¼ºxíLl—ûD•ß*Ëq·ŸœÒÃ…÷N·Yf>*ÉPî¢IÜ>º Ñßî÷ßönþ»t·»7uyš\×ûqªý"ó½9‰ý¿ti¡ê­“‘¯´y½ÇMÅ“Ì3ç/tµ^U-%ÖµOqF}Åz¨Wo7Ïõ&…€ö¦z‡ócs,õóP½Ó9±)T7ÑùXg¯ê]áãÏ.ÓÏ?~ÙÛŸ%tWȲÛ:^‰å¬=ðúýØøª?°ïŒ¯úù¸xÕŸŠ¯ŸjA£ôTgòÇî÷ü¾©ºßÓû¦Ø~Ïî›~ û=¹oúë÷-øé-¤oUêñ^é_ÛBgà¸~ðòèNçYÝitçì¢8½{:#º¨»"`uÇ®öÓ¾YÇ¿ÒÜ¢æMÔI®ÜF‰O©“›ýpñû«¿.Ž¥þ~¿¿üèn¯ûÎØEyÕljÏRýÁ/Î!ß~½ÿòýþéîÒéwäâ¿g1O¾vÿI]}ý endstream endobj 495 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 500 0 obj << /Length 1008 /Filter /FlateDecode >> stream xÚí]oÛ6ðÝ¿‚h÷ #Ëã7‡íaC¶"E74Ž÷”ƒË®0Gvd¹MÿýN¢d+޳ÚZänHa@$GÞ7ïHs&4›M6½?®šÁë'8E^÷~ö^ý¢<ñÌaÈpB4gÎ b•`$ŽÉEt’L&}àQœÅižŒf}*¬‹òl”.¯³d‘‡ñj9*¦}Z Ø(ï|6|[¯B £OËx IÚÁo?Òe|“ü}µûûj‹“Áé¯çõübtÝ<úë¥Ëá›?LWÌ«rÜhJì‡àƒ±ön{€¦àjÕLƒ#×7½®„fà-1À”¶$‹É¤wv0S‡ \tšß5nó;¨ÜGsb™×\îã%SØ3N3®*÷Éç‹Bí“Ú`Κ0óg WÌ:Ch>Ó8,ñ ”ÚgI2ncÚRóÅ|ùC¹ †‹è{ÚÊQöÕ[E%C÷~¦£o:æwccç{šä¢W Ahü*éî60p]‹}Ù- Ψ¢ƒ1¤ÛÌ2=tÅ×xéÖqj‹˜"º¯áòXW±XlC¸pÍ„„ É<@PÜb6ÏßeóÅ<Ë“yºìZÆ?¸æãoáï›4œq¼Èn{‘ ^dÿM\ÊÙý²©*é˜p°gî±·+³fIre×+%+j™½ûRªöû°·#'|V ôm8B‰|¸ÂºÁÆò».¾Ajæ… †P}ßö°–å\—n9U¯«¯NoÀ’“9–ægÞ6”iQcãñH¥E}p_x‹p¼ûBWØû&‡µZjKÒ†)½¨(¤„zމ¤“ñéN·.®ˆ_*‘ü¿UÝærѱ¦©°‚9¾uo*â÷@ŸÈ?-âã(¿=#ìC"à†È‹«ù]¡ñâG×3¯ÀƹoS'¸uP½Â®[ÆQtt5×®°¯5‹³’±ÝS;_ƒ·ø,‹×P­/¼ Ó¾Ê|6óIøAg*:—KL£õî¤/y4Ïp¨£›Q‘`ïÓlEk×û)h‰ÑQqÉɧÞàéùX"Þ¬K$Nfä¼i‡ÿÌ»ð¡œÁûî®'aðϧÄ{´ŠiXá!!]¿;M'ócTp­Âî°ÑE(¼—ÕüË—!õBó!ÎB`Å€AèÒ.€rGa-W¹Y#ÉÖ›½›òÉ<»ù. ïœ)±­a“ë©×(º¸¦³$]ÝÑiºÚð€WI¾¦O0‰½“‹Á*M“t«tg?¿_­Ò¼Úk|޵K¼žWæê0\ªeë¿5¥ 3Òª2äƒ$²÷à¹÷7jwÉk endstream endobj 496 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/SQTLplotProportions-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 503 0 R /BBox [0 0 992 491] /Resources << /XObject << /Im1 504 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream xÚ+ä2T0BC]S] …ä\.}Ï\C—|®@.U í endstream endobj 504 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLplotProportions-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 505 0 R /BBox [ 0 0 1008 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 506 0 R /F3 507 0 R >> /ExtGState << /GS1 508 0 R /GS2 509 0 R /GS3 510 0 R /GS257 511 0 R /GS258 512 0 R /GS259 513 0 R >> /ColorSpace << /sRGB 514 0 R >> >> /Length 48251 /Filter /FlateDecode >> stream xœ¬½Ë®%˲%Ô?_‘_ø;"ºE£$$à6h Z›‡Tb!A5ø}ÂÆÃÜ#«*)÷îcf1ÜmÍœ3ÌÝžõ×ó«þú¿þ¯ý÷ÿÿ÷_ýÇÿáßÿ»_ÿüÇÕߥ”_çÿÿÿüŸÿ×ÿöŸÿÛýß÷úõÿüëúŸ•_ÿË¿ê¯ÿæý¿ÿð¯ZÞ~ý·ÿÂðÿj)wüw–ÿù¿ÿ×_ÿÎü÷ïÙ~Õ»ü®ó×}¯ßõúÕ^já¹ÿñ×ÿùÿ§ãÿ÷ÿÛþÊï§µ_çÿ¿¡üž}ÿ å¿‹·Ö㩟=}ü¾Šéÿã_ÿæî—Þô±~—cÑûQ®ßíXAt<ðý”õç>í÷S÷ã¢æø]סéC£:cÑÇ×ú½ŽD*÷룃h¨\ûï¾üòcz¬òûšx¢µú{ôý„èã‰Þžß³ì'DOĆóÚOˆ>ž˜cþ^c?!úxbÍþûªû ÑÇתño™Oˆ>ž¸×óûžû ÑÇÿÕ¿ÿ·öjö¿ÿÇ÷ëV{¿~¯&¿ø¿ñ;û÷ÿVÿóR~E_>?³_¿Úûop=¿?úŸ“ó~³ÖK=ñÑÞ¤Þï¿~o“¨âéÙ~¯¹åï_}%ÖÖæÓâ¼ÿŒ}cÛïV÷Ú ð´÷¦ÜzûÑûŸý»÷ù>ïßã]¡ÍßýÁß’œŸ`ŸOüš[»~ßׯþ~¬Ïe*öë«ýîcËûï±k kóiqÞwQÛØ÷÷SöÚ ð´÷¦ÜzûÑ›Ëý¼¿’ºŸgÄÇt?×ïëýÞ?ﯭ¼Ôó»S±ßSÊïq™ó”ú{>Æ&…µù´8ïÆÆ¾ÿi{mPÿ@í-¹ôö«7ÿ–ßô‡ÿd7þs&¾écáa|âg%Eýƒ§'¾'–/|‡Œ%ŵù´8W¼‡Œ}ß“íɵIñiîm¹4öÔ›Ëu½ßÉuþ»$K_÷ûš½ý¹_wûýþ—ëî¿ï¶åã÷36VTþ»$Ÿmbñ¹çÚùï’{Sn½ˆýèÍ¿e]#þÌø†¯†¿%9ïøy©橽/ÌZ_jÅWWÔ?xúŽ”?ñõM¬(¬Í§Å™¿ÛÚØ×œŒ½6(>­½%—^žzóo™ïóï?`+O¼~Îk‚ß7Ä|wL­ñÎëŠRQÿàé'¾N–¿¯àÐNXQ\O›sŇjlY¿ï‘k“âÚÜÛri*ì©7ÿ–ú¾ÔÖûª÷sÚ»íûOÞg|/ûkêúû3Wï4õž¦áµü [•XR\›O‹sá@ l]ñýôÚ¤ø4÷¶\š {êËi¯X¤úJÞ3՜ث?¥a¯^ ðÚû—Õž÷9hÌyMãû…yïùª—8‡½ÔŠ?X,È«Ø5¶üUlm¬(¬Í§Å¹â¤$l{©ÏôÚ¢ø4öN¹ôöÔ[Öéý˜ `.Z'súûçãŸkÑ ”øçìñQ° ïOa´-Ÿñ³N¬(¬Í§Å©¿ë³±%´ËµAñií-¹ôöÔ[ÖéµfíóL­Ókÿz¾ïx~Þ‚÷k;kÝòÔ7VT¾“C c,­×ÞÖÉ{Sn½ˆýè-ëÔ+>úFxjHΈÿŒ÷øW÷ŸûýÏxñ¹’‚y¿õaA,Ç<±¢°6Ÿçým¶}›e¯ ŠOkoÉ¥—°§Þ²Nïé|ésç[09+¾óלñŸú~KßßÃ5¯X],È{™cËŸ8©'VÖæÓâŒ8í%¶…ÉʵAñií-¹ôöÔ[Öi ûޣɻÐÏÉiaÖ{ƒ`éaà×kÀãzB ä5ÛñS´ü‰/sbEUÿ+ŠSùn¶¾¿ßW-­-ŠOcï”C¯ÄžzË:þ»½ÿ²£ú÷’œßùùbz¶GüâvquS° ïä=ƒ¥üµmcEUÿ^’€Ä¾¯ù÷÷àµIñiîm¹ôöÔ[ÖéýßWN\MO Éi¨_ýöÞ _L-oR° ¯ ûhùËo¬¨aí’Óã{’ØŠc‘×®þŽåÞ’K/aO½ù·Ä¼ëwŸ²/â¼g>½0c½',7î–ÍlÀûR„>’wê*¬(¬Í§»ÿÖçÞØ£ãµAñiíM¹õ"ö£·ìK/8­Æ‚¿ý䬸zôŽÄÇ“×Àw|yDÁ„õž[>qŠ6VÖæÓâôÐ.± æÖkƒâÓÚ[ré%ì©·ìË{Âëýc_Ì¡xÞçêûUò®ûòž.ë¶?qò,+jÛsh#Œ¥ýðÚÛ¾xoÉ¥—°§Þ²/íÆéïý™-þ»$gÅb„?¢ãÎQã­^ð!eЮ-ï8E k kóiq:îJÆ6Ü•¼6(<í½)·^Ä~ô¶}¹âßÞóTyd_Ä©q€³ïû–}ï3«ð\ 6àµÖáT²¼ÅÉÓXSX›OƒoÙ÷)lئ÷©µEÙv…ErêeìGoÛ—ßÒ÷ãÛ97n0ïsØÞ¸Ý¼—Ïë20{\MR>âd‘XQWÞ~ÌY¸Áû¾Àâv£µIñiî-¹õ"ö£·ìKŸ¼‘ÿö“3ãÓ˜ï©#-Îï›°¼*xmR|š{KnM‰ýè-û¿!Ù~Ç’ƒwß¿?Y”÷¿Ïj 6 ®£wÊã·]k kÓbˆÓ”Ø_ý\×ÖÞ’K/aO½m_x|¿#Š/&ç‰#EØ€8é¾'‡úÀ>\ËmÀ»_ßò;–N¬¨ËñÅä¬x5Qƒšk“²íн-—^žzÛ¾TĉŸ'^ˆ?›Óè_ŽˆÌ¢© ÄnÊ4E@…å ßc½gX›O‹ƒë¨°°MËk‹âÓØ;åÒTØSoÇ~ |‰ò®™ÓâH¾Þ÷f]tdOD\âžHÊñ™¸KZ~Á+*#ÉA:„±q¯]2"á½-—^žz;ö,uQìGœ+n²“ëŧÑi1f7E`Ê/~‹…½üËS$79X&±=^W¹6(Û®º¶\z {êmûòÄ» öá‘}ç†ëú½{x?pr¾®HÁ¼—wDl$ñG$VÖæÓâ Ø–X„×ríá¿%÷¦ÜzûÑûïÄ~nü~:>sÇßÖÞ?1Þªéá-‹_)úÏès²¼ã-¬)¬mß8 ˯¦×ÅØöÖÏBzûÑÛ±Ÿ3ö6œ™`Ÿ Ãö~!"ó b7—)ÆgV\fS~ãŒe¬¨’™ â¼Ç—È.vÁ‘êµI9®{[N½Œ=õÞ¾¹Ê3u¹Ó7WyNzo°ák1ËzË:Í „š™<ÉYñ¡¬ðõ„hÃB¼ºÄ÷,ÈBXÊn0šÊLžä '±ÈÔɵ3“'÷¦ÜzûÑÛ¾9eÖ=q_ùÙœ°üòÝ ^Ð÷œ>#âþ˜¢ÿì†_ÆòþcÆÍ°¶=y‹w©ÚŒÅ© xmQÿÈKx·-Žs{ê-ëTñ|t!ZÚäàÍT+þ{éqͯßQ° ÚYþ¾Wï’XSÕoðäઠlDïÃürmQ\›ï9Ë¥—°§ÞŽýÀ»ΟÚe_ÄÁ__žUqx_•—Ë”ã3ï…×ò'¶±¦°¶­8‹‡Pb™FèµI9o!ö¶\zûÑÛö…ûŽa'ñU[„ˆQ¿ÿ{|Æ7|:‹Ï1É­ÖTư“ƒ8tb£Îµ3†{K.½ˆýèmûÒŽLÔŸ“£øÍ™AoüúüúÄ~¿ó’_Ž3+êˆýˆ£ø°Šíhí#ösf`¥^žz±úËܱÞtã=Þà;Gð`|f™rì'bÜ–÷0’Æšª¾›Ãб¯¯M*c?OÊ¥—°½e_Vg|^ŸŸ“3Í< #X~-˜DQ´­µä7}+ÂÞö»ÈÇ”œ÷‹ÄÖ¸_äÚ ø´ö–\z {ê½s îîOòçäôø2G|?’zÒ3Ö¸âË*ʹëÙò'.ö‰Õü­I>McßOúé¹6)ç¢%ûbB÷Â×§ÈMƒÓYlÀ{5z—°È®ÖÔåSBrV8¦Œm8ì{mR\›{[.½„=õ–}y<'[Ý‘“sÅ t¼?c¼ÕáÆñö¦`“Z¶\ï"aE-Ÿ°’ƒdÄ¢†%×î¾#çÞ’7ÿÖ€=õ¶}¹˜g~ÅUâçä<ñ… ‹YMÿkÑz‘‚ ¸há$¿s¡‰5…µù´8+nW†5 ÙRD;ÏGÚ;åÒ‹ØÞ¾¿Üð`½_Í»ëþ"<Øk2†ÿ~Ñ{ÃcMS¾‘”¶åÌÖÖæÓâ”8b[ñróÚ¤xáÞ’[/b?z¹¼7ß_À‰Oz,Æ÷y?™·ãÿ¢ŽÜË™;`¬3 ç|$çb¦Bæ% ‹!ó–ï/Ø;åÓ‘!`O½}Á9"2´ª¢7æÍ¹å‹ùÅŠÊÌätT ‹|š\;3wroÉ¥—°§Þ²Nq:¨9yø4‡·ò‡ú¼ÆøµÞŸaï¦`AÞ5僼ásV׿ÓâÜñþ7¶à“öÚ¤ð´ö–ÜšûÑ[Ö)Šxs”ç#9HD˜­ÙýZîÙü$ $Ê)Ú–/{£]~鬙¤~$©¹vÖ/æÞ’W{£=õ¶ç)Ww†ã͘!¼é|y%‚ºÎÿUlñ—XŒ§1—8ˆ7£Ç[Ǹß7¯Ú\â=)•6À}tý+ÉnqœdZc;é˜qbˆ„€‚ü»g©3Ar%kêòÏ?9ušÆŽpäÚÃÁÎÜ[réEìGo¤Å´ÛøëºdâÓQ:IºôBÓÃO Fcák–ò AmcE-;»“3ãŸØ[äÚã,[ÅÞ’K/aO½ìÖX ÚãBõsrpޤ2Ñ:SßžeŠé+Þ )Ç÷&±¢ºS%’ƒÚÆÄÖøÉäÚÕex¹·äÒKØSo¤‰z¬>}þ-ÉA8y¼Gãø¾¿ÃxPw?RLhøµXÞñCÖÖæÓä¼[ VœØ‰R9¯M OkoÉ¥—°½Œ°èò;AœÉ„‚Û/6$ øRŒÆkÅ•‚ò÷#¼ïÄš™Œ`NÇÈØÆd­Ýv2Âí#äË!r$#œz;á†Ë«àùsrV¼:×]XÊsÅ¿óº+> R0ï *l–£&.±¢†S°’ƒûibq#͵[^—¼7åÖ‹ØÞNF¸˜¨1ã]ñsr.˜ëvZG˜ %î¢`4îJç&å¯vúw ¬©é7SrFœã‹. ¹v·{,÷–\zûÑÛÉ5îNÔoNvNˆÊÊüH/ˆ,î8˜Ü¦pçÁ%å8Ô$VÔr"Rr¾jÆ" škw'"åÞ’K/aO½ìöø¨±äŽ3çAFI¤ÜO¦ó/؇»™¢ÅÀ×7å¿fcE]¾R$g!J%lA<Ák“²íн%·^Ä~ô¶}á·4^0ºð˜ƒb¡xã=†b¡xãã=6í,ìïÿÄ{LòÅ7—°¢ºßzÉiáJ,²Æríêbî-¹ôöÔÛÉnÏŸÌQ£ƒòitÐþht6`7:±$µ/<æ¨YAÿ4:hÿI£ƒr6:°^Ä~ôÞÉn•®Jý»$gÆg‹ö<2<7[ S´]™’ßtµ +jlktÛU…AÆ6yíæ—Ü[òî°§Þ¶//®Ó©Éß>l@gRÕ»ìÅÈ‹(ZŒÎOSòáë°Ãî4¥F$©E‰í‘S”kw7mȽ)·^Ä~ô¶}_ÉKöEœ§ÅHH«L÷y&šŒÛlÀûn¼ç–#\›XQ-¯0æà%dl{‚éµIñiîm¹ôöÔ{'»-òî•Én‹­PZGÂYسHÇžHOCªö´=‹fsn9¼–‰ÕœRœœÊdkaKœxríâskî-¹ôöÔ[öe ƒ)鲕æ„!{¿™qÿxÏÖHV¦`">^·|¡´ÕXR\›O‹ƒn+ƾ`_¹6)>ͽ-—¦Âžzÿ­FŠË•iËzs¥ O¥4SN¸ž-¿™,ìíÂO]ë’3EsñF  ¬=ìÀͽ%—^žzïFåKùr2‚8-lglÃ¥íF@gÞ¦,BðUòÉÒ#aE•,Þ§"ïÀXežhmRµºåÔËØSo‹:*½ëdŽšLÔ~¹‘ÁŠê§ÑÁ/‰”ßtä{Û­“ÄQ£aÕè@k´·äÒ+›$l½ì6`/æò[09Ø(RÐâù^6žô´ÕL1½àrqäèú’XQËoÁä@ÉÄB­\»û-˜{K.½„=õÞÉ÷¹“3QRÃÔîÊ äµP¬,ÊÉrô@~Ó·,ìí"‘Ûéâ4ª [ã­“kW¿•roÉ»@Àžzïd„©t°™É“.è(°Ñ›ê½sD ¢œŒÐç–£+±¢J&n“£´.aqÛ¸¼¶('#È¡ 9£ÝÆžz»ÑÊÏf¶áY ÷¾þ£ýÀÃûÌ]Ñš /S ÿðª`ùã²U`Eͼ+™_nbá½Íµ[¶áñÞ’K/aO½,ÂÕ"üý*YL=}¼lÄãbê[›¦ÐAºgÊoÔ¾+*¸ÉA ¥±å•^»dù¥÷¶\z {êýw|sèn©ÞJJOÜÙá¡_¼ç!6ß‘;LŠþ3:›,§³ÉXQÓIéɨ7îì\»û ›{K.½„=õv¡®U—‹Ñ’s3¯îBÛx˜ÇÒPR° *æ‘<üˆObMeñ~r&Ð ‹’ú\;‹÷soÉ¥±½í›lEp4‰G÷ŸÉÂÝVØêÏÝéfãƒl"'°¢Ž»“8º; ›Màž´U|Z{K.½„=õ¶oÕ)qÏu¡9*öA-îß¼i* ÉB¡Î_’«¨$‹Œf÷Ú¾ Mݱ{b‹ ¸v9 …¸·äÖ‹ØÞ¾; ¶ºÁ%ìçäà’vÑ3DÛ(K½â;"Êþ35/¨,[UcƒR7•É¢ÉÁ/±¸ÒåÚ=Ó$¼·äÒKØSï}wºéo5ïN7?ŸÉò‡ ®‚û|ú¤ãþs•-¿íûVÔð'¼£[# ŸkWRçÞ’K/aO½w“8´Ù)þ[’ÃäÝÎFcË8ÞÜHñ~ó°±Ns[¸>kªdøGœ#ŽÄv&'øF™íW¼·åÔËØSoûæŠtÃ;0䛾ÂðŸÅ·xÀ¥¡£˜²·M!¿œ(ì•IT.[Éh‰E2Z®ÝwÙªö–\z {êýWRn†eúãbsÝÔ·5taß—ÿÕÜïV€Ir˜„%ŵù´8tq ÛéÔÖÚ¤ø4÷¶\š {ê-/僛Â6ü†&gE¾Rä³—ÎsåG1Åtƒ†þ–÷øWK¬¨á²ïäàä˜Xœsíæ”ÜÜœÔ د޲Nã²'FIƒÉá·OïËõ~ ªN~JѺg=«îÙœüXS™¢•¸  §C®)ì¹·äÒ‹ØÞNeXŒ ,G'“s¡ÏïûŸ©’Å×&DS‘f $²ßŸ”×J{C¬©œ`ÚŒ$¥–¹v–bæÞ’K/b?zïT†AïÚ³Sßû© “Ÿô`*Ãý˜bºÁd=É—[ýõ±©¼Ù%§Åy)±ð åÚÕ>ÍÜ[ré%ì©·¬S}Xr‹.š?']¦W”蓎‚F?üe¿ãbf}ÊÛ +jÚÿ‰mhûæµAñéâÈRÈ­±½ÊP€Ïn¥2ˆóÄg)ŠÁĆ«™bºÁ 7CòÉ6tŠº²¬Èôë5–9Î^›ŸæÞ–K/aO½}BnhWëï͸‘Žù ´£mjÔØß&ðÛl¬Ÿ¤´³Ð8Ë9sfàS4n ´¬UG¦pjÏÁ $µ™ôºÊ¸>xÉG>›^]É<í§¢âS±Áf —’H%{¶| ÙXQ={h›Sù}¶¸˜\E6zuåÞ…ßÒ«²MÙ©·³ãØÛãF@æçä4¶K…g-ò:â S®+НýÓoùB˜ÁXQ;ü#ÎûqÇFØ ùÅ^ûÊücïm9õ2öÔ{›”ž’N/-qÛÙoã9œo6)m_xfcz±¦ö…Çõ–¯½/<Þ[réEìGïmR&«°®•&e²j±2ßMåÄ-2ÔfõޮijП”¿&#rü…55.MnÓ‰e§7¯Ý³®Õ{K.½ˆýèm“ró%?Âç÷srfœj/a+O÷bÈ‘Ç{±$å=sïM çž&Ý[Ãc’kWçžæÞ”[/b?zˤ¼?%ôŽz\ƒbNd 2ßíbw«l¡3Rxí¿?úÙ¶|±&FXR\›O‹ƒ_€± ø^›ŸæÞ–KSaO½mR˜ëUñÌy¿u gm²þ®-§˜âk±¶ä¿5Â’âÚ|Z44¶àêµIñé4½íÙš {êm—¯ý¨n¼.{§_>Á ­:]²ûwÏ*Pýì3‘8~õÕž]ÿèÅàïV85\窻ߺö¤TÚ°Ûú©ë_‰±ësDÎí3g²«畬Åö>ZR0‘VYRþÚŽøÁ kª§ΜÆo£°•ÝR´vMœ÷®î¦½„=õv|HåpHêü99-ÛÃRøHéÌ›"£iÈ×–D¯Œu;z•ÜlmhÙçµIñiî-¹õ"ö£·S63[^Í=“ƒ’êûR~ÔüëÐÅ 9(ÔŠ8LeyÐûÙDÄFÑ+}vs,zõ$¿˜*¬¨Ë׃ä ÷TXÝëµöáAÐÞ)—^žz;>Tßin |¶µVFtð¹GT¦VSŽáŒ{ËÑÿ1±¢ZŘC¿”°·^›ŸæÞ–K/aO½Ý s6Ð Æùâ¨LEÔë«AœÐI9£ ”-îe¬¨áãerÏÂVÎäÐÚÙš-÷–\z {êmû²Û²VÙ—lÍÚ™Q€&®w¼=Båñ˜bŽ€šÀJž-cÝíbQ Îà” a;'phíî,ßÜ[ré%ì©÷n†àXôÈfŽUW¼Ç»"Û-nÔ ÑÒ¯U¨uË/RVT·—79HN,®þ¹võû>÷–¼eŒüúCoçô´Ÿj†`U1 Av¿#GÀvß­­3 ò;í~ÝÔíŒåä °ÃØ†Â¯MŠO´ûkë%ì©·£×¿Ûm “ó„O/âüýwGŽ@o¦˜#°²KGFÁ]6VÔíO:9Ï ‹LÝåµEñéÎ,É¥—°§Þ;ÿ 3³U­“SãCÃ{œ×‚‹Öæ¾L9ÿ õ-WQ½°}Vª0§ÜlopÛwt×\»d>€÷¶œz{ê-û2Ù4¿ä999x‰Ì‰© ð‡¾ïø×ÚÎa 6 lsÝò‰RxcEå9998ë&çà\;Ïɹ·äÅí=õv3„ «ÿœœ ×O¹™µÉõåaÈ;ÛNÆ{þ~Rþþó”šXSYrœœ†/±(ε³ä8÷–\zûÑûïDxTú‡6©?'çB Ô”¤xc7öêïÅ´}ðeLyó¯òlj:—œÁÔa;_Z»»=sîM¹õ"ö£·ÝqÝ-3Ô>Íœ$ðp™U~ÖÑëUM'HÙÁv¯-¿h}„%ŵù´8ê lçP­ÝÓ ã½-—¦Âžz»X•QÌ‚Y?'=´îÎLØÒïa<”]f*”¼¹V`M¿£ÅAõðc,ÚÈÝ^[]Ãy—š·õ2ö£·Ýq“mŒºb&†/Ü^óÙØQÖ{›¢Ëì¡ËŒò8j]‰5ÕW•fc‹^Ĺvq„2÷–\z {ê-ëÔhû ÌÆÏÉAß‹F³1°qí×vf-g#:aM]Žs$¡&c Ì’×&…§µ·äÖ‹ØÞvÇÇLu“3g *Ü^Šî¾§ÙÕ»£»:7/6>Nùtt·Ô¤¸¶w7C¾çIcßßÃû²óÚ¤þ‘cPÑ]È‹cúÀžzË:Å‘[íÔ¨”œø&FÆtí´†Ì˜Ž‹A1 RM¶übÌFX½ÎžlîfÎ…ÖÖÄ"~Z½¶(>­œäÍuÿÀžzë·Ï1d%ÓÌ€¯„ãs£øÇNôy)™{p3XLÆÃ¨2q&2ñÀ ä×yà䪙uà=)•6ĺþw*™Ó?'ça ¤»bæ³ýû2eÛÕSÁ›™XSWÎZ0‡™ÙÂVÖáhmRtÇqoË¥±½=7h°ãàá–Ÿ“ó ÝkT ðe¹tWRt™ÝNÅ‚œ„±;ùOg¡³¶°‘4smR|š{[.½„=õ>zû|‹‰ÌQÊu^€”޽¾ÅDë±Ëm°·OÙÅD¦ŽÞqâ(åZX¥ckí#]ûò BéÜu}ôöué³…!´Ÿ“ƒ90áöR0.±ê4´t™1ÑÆr¦ä+jø(›\LÛâsȵ›?§Ü›rëEìGo»ãn'":>dΊ(ú‡òU5Lú)ËÔ?º\¾å=ô1ÖTö&INGŒÇXt ɵ³7IîM¹õ"ö£·{ût66®ÉYñÕŽI?‹1œ÷[ó¾3øNŠ6$&§<'×µ©‘Iæôø#Ûâg‘k7—7äÞ’w·>öÔÛî8´¼n»¸;9r‚±y²œ`±µ¶‹»ã’e3–#.g¬©,îN ´‹âí\»žÉÝØ›rëEìGïÝ›t°O¥cöæðëP3Š­jëeÿÑrºöÃXå-#¤5Õì,LNáåêñ„X\®¸6)®½œŽºž­—°§ÞÛ‡áëÕiôÉaU¥gmÒ3QYú7ó“F}˵ålóf¬¨ü¤Í[Dv^–ÐDe…wμÓÞ–+ÓZØSïÝûº±ÕòÜSr9áöÒäìʹ¦W5ewœ €Øíº>KªæÄ¹Ñ޼å(×zåÚ¤þ‘c°-—¦ÂžzÛ¾<Ž<§}y†( ¤ý¸ÇǾ\7PÉ¿3í¾³ãŽ™wê/Ú}»EïQ­}ô&ÕÞ²/Ò+mÓÖÛ½I9­gßÈä ÷cô½˜Bsuô­Ó]fœåfyv¤ìîVílsð37¶¡-”×nÙ7Ò{Kn½ˆýèmûRÙ™èrÚdrp]°Š:–EÏÌ Cóì8¤¤|Ñv +êrÚdrT',œªÍk‹âÓŽSÉ¥—°§ÞÛ¾ Íâíi_ÀãïxN’Ÿ6à2•ö¥oùí.±ÀŠ*vªšS‘5nlÅÙÚk“JûR¶œz{ê½{_£Ç📃³xôh‹ß{ü‰"œÎA2¤`Þó!JÏ%ç´BcEeÇÌä ’ØF2×®îE{K.½„=õ¶}QAhΣM<}„y8ÕýÛ˜²MÊ6å§ÝýÝâzh¬¨œGkÎÂLYcæÍzí•óh½·åÔËØSoÛ¦XE/|¥›£Dðzœ·Š#x¢xÇ`2˜åˆ`%VÔtˆ$9©.Â*A@kç÷7÷¦Üzu‡’¶Þ;àáo÷š™NððtK³VœNÛ@È\¦œNp-WI°Ã=%/ßH†CŽý6EîËk‹âÓ5‹à—õ2ö£·íËäÉõ°/âèþ²Øg?ï/åk_®]i_ §‘¤mšØqÒFŒc®¶Ö>î/Ú[ré%ì©·ï/?i8ÏN"| ™töÀ<îûe0ª_\L7P"óꛚþ¤“ƒ»‰EºT®Ýö$í-ùåïD`?z;܃ΚVýsr0±:‚0‹a¶9 ynS¼‘ÜtOJþd–bßÔÈö9æ4wÊv&á½×Îþš¹wuîñlì©÷îMZ4õ{÷&-šüÀÞ¤•n¥ÁÞ¤s™‚ ˆfßòÎIDÄšº²›µ9h¬.,þòáµEѾ<ÙÍ}l½ˆýèíû g D»Nß㳸Ä.ÚLf›Ž=Ét2#ÕrN16VÔždjnÂÆà›™k“âÓÜ[rëEìGo‡{24[Ífæà Z FÔ5Y£u)¦’Y8·[~ùÞìå„›!˜ÃC£°•ÇD­]s6ˆ÷¶\z {êýWÊMßOöb²ø­É?âŒÂ:ƒa•Êæ:‹]sªoÁ衵¶üfGXR\›O‹ƒ¹­ÆvÖšiížuïm¹4öÔ{·‚œM"ÏGrp±ú™Én¼rYýß’YËýá+}ÔÑXQ—=Éaɨ±,'õÚ»ÜÔ{K.½„=õÞ妚|%¯gr཈’Ϫ©[7JBg5 ò\l"v¹À´”}<—N^Ïät ÛØFNk·ÝfN{7·¡+mcO½ÝªçÉ©GnÕ#¾ã#F5L>z?éñžâêL äꞺ9Ê +êòY39è{`ìBlÛk“âÓÜ[rëEìGoY§+í‰ScÍÁ'}Ý%þã‚äØÊY<·O ×Ý9¯Gòa_°¢¦O ÉÈt5¶3EVk÷Ì‘õÞ”_iëûÑÛå¦Ã¥%*N^ÿÑ.§³(¸>( ½š)X˜õlùÃ"a—¼dqª8(ûO,JFsí£8U{K.½„=õÞ­àäGw²›8Þ‹hÇÖåù™(…g==ÑÎ-î,’ß éŠ*éùH¼Æx6¼vIχ÷¶ü²/½=èíV=H—‹þ©rSsØen¬8Quúe*ïDÁ‚°™ålxf¬©Û÷Ìä@;c£[ü̵Iqmîm¹ôöÔû¯¥b_ðFhJr8öºÉfh@öå9Û—ïN,à“×îg¤è^[Þ<9ØSï}wzXX¡ÒÙäà’æiq¼Ày’)Þ†P šrÔ‚&VÔÊÖpæ@ƒÄ"ó7×>‘äÞ”[/b?zûîTà}¦æÌ~ϘíÉB¦‰h¦&b|†¾@Ë‘ã”XR\›O‹ƒ¿Õب´n¹6)>ͽ-—¦Âžzûƒ8®+©*98™ã¶sá¨áͽ-—^žz;{0+°»Ø99pÇ^¬4ÆÄ™H̾è[.vŽ”h•ï%nÏÍ÷–cAæ 7~b‘¦˜k×¼Yyoɇ[Æ{êíTìæ»—nrɹмÚÑPL\‹Têö™í½æ½å—ø•ÅÉÁ¥-±H¯Èµ³'Dî-yó½ØSoY§B¯E€öçä ˆ;ÙYÞHµÆ´Q° ïc³oyg?±¦ªgFšSÐ‡ÊØ‚ñ^›žÖÞ’K/a?zóoyÌŽ¦Îü¹ˆÑ0\éAâ;@&fÿ<&b¯`K§SG‚«âQ1ƒ)\E ¦V%G¹§¤R¸S׿Ö9;Úv"åñçätúS‘»ÙÒ¡ÒmÊ {l9K¬¨L°LNáÜjbûÃa\›Ÿžé k[/aO½}]j™ŒséºÔ2agà39–¹rŒj,DÊ ^·œÝD%ŵù´8W¼¼Œ}ÿŒçÚ¤ø4÷¶\š {ê½;#è WûÏÉG`vŪp‡ŽÒY&1r&^AƒŸ”OzÅ…•Ÿtr$elAu’×&ŧ¹·åÒKØSo7áF‘Ò ~NúØ]ýâ½ÉyÑúz^¦`Aâ¤:R>² C`Me`r0Ê)±=~6¹vwÙDî-¹ôöÔÛs”è:œÐ•œ˜Õ”»b£Õ8/ƒ,HS£lÉ‘L“XQÃ^–ä´¸¾&¶ÆO<×®¾/çÞ”[/b?z»ëOe9M·ß$9#|è®ÃÎ{>Ÿl*ŠÁ#Ή±\E¹ÂŠêö›$?”Äb2\®]üëʽ%—^žzû·Ïúßæ~âf Ôzº¶&Z /N£˜îúy_®/ihå£Ò“À‰Èú<3ðчfT^5{UyOJ¥ q§®žë°ø]]+š BV´!þù™*hU­¨Š5ÅÁùä26©ê Æäv-$6ZEd©(šîm¹ô*lPê½GbÕHšä !^ôQU¡] ï‰rZR6)˜Í 93EˆMjºº,9¾’؆ÆD^»¹º,÷'õö«·³x—>³Äɹ§ÉxŽfïøLv¶õ\Nrò\‡êÊ¡œë ޲å„͹ãì…ûcr¤—ÌÑ©·³ ºŽ5§"®Šá>úrGv?¢šÙÈ"huË'+ò…%U2(›œ+¾ìÆD"½6)>ͽ-—¦ÂžzÛ¤ Žã{TÐðp ŒûA/0„^!¢øÚ×|És °¢Æ$~¸Ç¤†qïµ[^¼·äÒKØSo™”÷²'S®ž*ÉÁ(ãõ^´~ѾmSÌ0à¯ÙrܳŒ55lð’ÓâÓL,šväÚ5/SÞ›rëEìGog/0Ws~N 5#Kàf­ßû¾˜µ8`£7S¼Úç³åÍ5{»ª×¶‘¸Ô¯æIlä#\¹6)f/(«rëEìGï=×AN—€Á!â§tο0lM~›…#À¸k\r…Ѳžhh'\C¡VmÙ O{J*õ€ûèúwâC†ýDRå­ø8øù7ù "¢m·D1†C'’åÈø5ÖTÙѤFŸ[¼ ¿)›jií¶›nioË©—±½å›øe„ÉZš¬jZlô÷æþ°ÿC\ß[¯¦`bᵜ±`cMGÌ©(¯6¶¢_¿×®ÙÏß{[N½„ýèíRWVô2^ûsrJy3/Ò:Pªú SŽáôjÎİIekä ‘X4ìȵ³5Hî-¹ôö«·ãCƒ‘Ù æLd D"2_lc8m˜b ‡÷CËþ„…52{ÁÔ¸&u¡¹vÍû“÷–\z {êíøÐÃ\Ž+Î?'çŽ7þE+¨Ìkbž¼Ì{RÃÓ鉕|pN‹°¢®œÔ`ÎŒ#db1.×™Hî½)·^Ä~ôv|ˆ­µ"m^MÍÁ\µ(G­j€ÑQªªNØ*ö[wq·ìß•éÙÄšš>º&§(± “¼v³È½%—^Ä~ôv©ëâý.# ÉÁK$JJ;ÿ]¾*å^‹˜•ZVÊãe}'ÖTF’ƒ‹cbÑ™%×ÙDÈ{K.½ˆýèíøÏÀq'*ЉÓâê‚Y¨œòç:öDá ?0AÃr:÷Œ5UrB¨8½‹Œå$¯MŠñ!Ö%×iØÞ'·<âYuÅ0çb–,¦ôø‘3µ¬,S° ÓC,oüÛ„5•ïÌä gØÛ= kw{÷rïî¶ËÐKØSï]Šq똎èÜ:qpèŠ6·¢r¹»°õqnÝtÍÓÃAõÞXQe.‘eè%±lÆíµ÷,Fïm9õ2öÔÛ¥®ÝyRYêÚsŽs´ ŸÂ¤å·X¶ ºè2Í6B×öÞ™Ú×%sT|$l¶1mÙtŽOkoÉ¥—°§Þž:Äþêåö©!9O¼°¢õ¢ß«V´)­Ë,ÈàÈ4Ë9NÍXQ;Áœ‹mP‰¥•öÚÛŠ{oË¥—°§Þ>Ê^lç6íéIΊ÷h´ò¹TäGÛâù¶wEäýÚò†ŠAaMM{z’ƒPdbŠÌµ›ß3¹7åÖ‹ØÞ;·nò°jæÖMzF‡¹xyªlTnSŒøæ„RþžÖæJ¬©–3ŠÌá˜è{ÖTñ;ÚœÀ®±Ñµ åÚ¤¸¶¦%HN½Œ=õvnÊHZƇÌŽñDˆðu.d»!7bîøÐH_èBc99¼€Õv|HœÊøÐ°S*â?^;›¢äÞ’K/aO½åаOnôcŽª_çk°WEC©ª(Z ¼™Rþàs7VÔÌllsƒ#Âö ¬SÎmд>¶^#C-u¯í©CU·—ºŠƒD”£òs_7ìúLÑÐ-f9hÆŠêns’œŠã€±¯]œó˜{K.½„=õ¶}iô†¢{ØÏÉA#Þã- øã¯ægúÖD;85@ƒür~°—›jûoܨ‰Åtƒ\»å=Þ{K.½„=õvîvaÀoä\s&²Ðbl&d7'ÿ”fŠƒñfÉ'#ÓŠ»0VœŽÙ ÆÂߘk×]«½%—^žz;ÿ ù¢Ö#É™hŒý†?÷˜#Äve¢`ær»¦‹sì4XQc7.½ÜR)òŒ­qÛȵ«o#¹·äÒKØSo—º.úЇ§]'5ñQŽ*çä¸PªzuS´…Íz(á¼5±¦†OXÉéžW˜Q0ž½vó72÷nž¯×Fb?zïüMkk.užæ¶š›tN™<#Êùhw#ùƒÓ«±¢Z6–3Ó@Œ wÛʵI9ÿã[$ž"wßè½óîO´’ùàÀDGV@©À Õ(â¢þ‘5Šþa–7 ÖT6Þ5‡]Œ-—+ÄÚ%ïzoÉ¥—°½ÿŠo.2Ûó­ùsr˜&>Ø^oÎ0àë9ßÑ0â+å“þ5aMå;Úœú¸ÏKa“¸øÚjíš¼·åÔËØSoçn?.`S¶Or?C~µæÙ ä^{–Â?“ï.ËË"…•“8’#¿Ÿ°p9äÚŧÞÜ›rëEìGoûæZ¾©tû1gbÖÏk A»Ø nuSôŸ-7žƒü²eö²Ñ'œybküå¹võì¨Ü[ò–oÐñ‡ÞöÍ-¶¥@Gߟ“ƒŽ¿ƒM/1g·6†)X¶#°Ü­9‰55ÝÆ19(=K,~‚¹vó¿Kî-¹ô"ö£·}s—ƒA¾ý˜sÇ»'r¤/úxîÞ²ÚMÑVþ‘¼ñNB¬©…˜¥Ä‚k¼ýxoÊ­±½wî¶'$­ÌÝ~èÉŒI§ª‰\žhþ6Š)úϦç;A¾œ»¬¨â‹9ƒ–-H—õÚ¤ø4÷¶œz{êmßœæ™-· LŠ&¦²Ã&–LeŽ“úGž<´=•üò}XQË÷ñäЖËÐ’×îöåÞ’çä5`O½Ý†®¢“òÚ3WÍÁt‹å”7z]Æ—ã]½,‡ïÿÑ.ú:[[žXQ{æª9Œ ;9SUkÏ=sU{[.½„=õþ;¾9|y;G3ýœœŽôD–®Ç™bÒtÌjʾ¹ûNyC®‡±¦ZÖ ™ÃÞKÂF‚`˵Iqmîm¹ôöÔÛw'NMm—+%’ƒë²g¬6Œ!D„o˜‚yÏÑWÝrTÔkêr¥DrPš˜ØÁLîâëž*%roÊ­±½w ïõmÄ`N¶ð¾ö,úu{\ÀÙÂû!Q>yßå“_ýksv ïc„Öþ´ð¾Æ¯£…÷Ú>zÛ7WØ »¹%qrp’Ç` Þ±ûàРiŠþ³A¿¦ä“FØ™öÆ ¿ÅAŽBb‘•k—´eÞ[ré%ì©÷᛫¶?'gaòöºÙÂVàðÍ¥·-}s§o®]§'ÎöÆôˆ>|s£ž¾¹á6tÚ›rëEìGoûæ« –+¾’£ÛдorÒSW†)Þ†nVBIα ÆŠZéÉ3ƒ>«›Ôå±QöäyoÉ¥—°§Þ¾;U7_·îNâÜñŸ˜¼]Ùœ<•ŽÎ â'™ŽÁÉ“u„µ|;IæŠ%“Äríá|î-¹ôöÔÛ¾¹ÅÛG?'çFªb^B´=~D/ó^¦`Ab\OyÃ`ecM-WÈ$'×Ä*ï[kyáÚ{Øï½ˆýèýwÚô®ÉN›3Pw{ÏÃ;ÍyÚ:}uÑÊgõ-g冱¢2»49ݶŒEyk®]|—ɽ%—^žz;ÑÃÐ:gŸüœ¦Z>q­p*<ç$ Ö0.÷–³DÕXQç­ätOÖ–iš^»Ùž{K.½„=õvþfcfî‘»-Žr·;£§´>}:ë×Ö©/·ƒ†ü:‡S˜ÚÖÉå_ «Ül­}änkoÉ¥—°§ÞÎÝ®¬äιÕÉAžÈŸV{åò/¤ëבdÙØelùò½XQ9·ÚΞ6–s©½öž[í½-¯n¯ ì©·íÚêÛ^Êä â…í¥1T4r¯1´Øv^£q2¨äó@uÛK™œ+uÂÂ?{{mQ|ºxhbÈ­±½»}1^³Ò³gJe"GZÞŠ°7õa…{6}Œüêg¤¼5{Bkj¥gÏ_‹Âš\;›>æÞ’_ŽZö£·s·½à ù’3™ ×yÏCJDä^×n $š”-¿x VÔÈJVsPòXeckíæslî-¹ôöÔÛ~Ä.X[õs0p˜P­BÞÖ÷G÷L±Wäí·”œÓ„q;{Î \„›°ºZ•åždX›‹U‡®§Ôµ3¤˜eˆÉaÔ7Î÷Ì@­ñä×(ËãŒßë–³ÜÛXQY†˜UR_ž ªÐ3ÎWKî-¹ôöÔ{‡š¢ÿC¯NJ‚žRA?†Ì2%Œ”¯4wÝòìb¬¨šó‘Äi¨Ò36¢g3×&åÄ5¸fêeì©÷.u-÷Ç ™“¥®»ÑB4ö™×Ç ]7 O²Ôµìi|¦>¥®eOÅ3V¥¬ZûSêº5¤^YêZî? Rç wÁaösrP/áž›s:CM­›r¨)^ë–³c²±¢¶{Îx¾ Ÿy®]r¬÷–\z {êíPÓÅ¢àé_r૊^§—6UŸ–˯4•=7%gKFaMM¿ø’ƒrÄÂÏ•kw¿6roÊ­±½}]êl‡ÿØÉjG)ǵäž³ jK!ã—dÀJ® Øâë\}¯^ŒV?Ob9xÙk“úG74ç—¼»±?°§ÞNe@;|LqU¢9+ÜÊ‘`€)@ä‡äƒaê]®jMù@ã~cMìÁjÜB‰maŠsí–=X½·äÒ‹ØÞûºTÕ>àÉëRes猼Ætg¤ÜaÒDùºTZÊ£ëÙH,)­íë8Hضq‚Ön{ÂöN¹4%ö£·»vÈõçqPœ¨Ô[ìâÍ(K¥ §¢Ò÷¤<Üm5±¤´vºã*z|ß·±1ïZ^[Tºãæ–KSaO½wªœ.àÝ[«§|ÁbhÒ›h 7ÎÃ(ÞóeË8VÔíßKrG¦·a¸/¯-ŠO7—Éß×ÖKØSo»ãj|'?î8qäŽk9Ç}¸ïï…Ç32•®¦ñõï…Çœt©¿µöáŽÓÞ’K¯ìñÝÿ¼ðôê$”bûRˆ2 躙 aSi1®-_¾‚»œSl_ÄA£¬ÄbNI®SèroÉ¥—°§Þ‡;Žïøu¤Êñߺ,ºÄh1¢üôR@'ÛÂ¥öly£“ŒXS=ûp›ƒ<ËÄ"³2×®9 Ö{Sn½ˆýè½§BôåoøÏæ EŸÉqƒÝ±'ê©wóD½ÆÉ™q$,)­Í§ÅÁÂbZÓðÚ¢ì¼wÊ­)±½íŽ[´¶Ã.¬ä â •WÇ1|0ׯ35{œe(y\äZbM ;?’ÓyŒ¿Ÿ\”]}J¬†|¹;j`?z»k÷`AvqÒ`r0¸¦tîŒsG¯è•­ú^% F¾H»¶üa#-a·ÕÊ*YrêÃ,b+ý{mR|š{[N½Œ=õ¶;îâ¨iVrÃws” :'=hwàéN.~®9êAs„u'ÖÔÌyæôø™%¶Åg›k7ÿ+æÞ”[/b?zow\ø7ïËsK’ƒšøp‰E®Êƒêùp™ÅÝŸ]fìôd9;=+*Û&ßAco¼ÿ½ömH½·åÒKØSowíÖÌÕËM…“ƒ ËÑg{(•!œ`…-ü7¾zã›Jòœ¯XS—¿‘Éc ±4™k#soÊ­±½]÷ª9Zˆüœ ¿Þjr{U:Øn{ܺ§©{1彨{ÎÚ¤¸6ž6}CŒ-ˆ/xmR\›{[ž¿€=õvÝëæªÅSè’S‘š] Ï¢È8ŠJÕ§š²ËL-\!ÏS °¢ŠC¿â8´T»‹Å"´ÄµEñé³*åÔËØÞÙJa2xЛ[)€1ãdq³“g\˜+š,ôLà%*é šp"†_¯f lÅ8T­xÕ¬Böž”JâN]ÿNöKT[wÕGr†ë¦'›ÄUV&?ݯ4Êh–|ÑW&ì²ç,óÄ¡…6¶:mí馸tË.ÛcëÕ²9ØÜkà Շ=)p)ø99è<Ô#2G%/^YæmÊW f•|¸íš›vD&ƒÄ¢1×®6¹7åÖ‹ØÞ¾.=¬:ü²H<È7P”|`Ð])¦øÅì¼¶H>|H6‡Qëe‘´%IlC·×nŽZäÞ”[/b?zûºÔárÕ…ä #ÙÙÌTŠîo}r¬ØÈîp]s%ϦºÀŠª~-'§ÄÛÙØþ óAk“²«/ö¶\z {êíëRó%¹«óœ9+‹:s oTEŸíjŠWšÉ–’_þwör>dwç9q&«ƒ„í¬þܳ²H{K.½„=õvæ÷åѤºÆ&çÆØïq{´iŒýŽlçaŠWšÂ×:å³1«žXS—¯±Éa£c2¼öÈÌï-¹ô"ö£·ÝqjEvå=sP´Cò¢Ö§™J—Ù³åú ûx€²‡èõü-Æ \8Ðv.œl÷Q¹zy”°—ؤ;N¹Ô„Íì·+ǧǑ/—z {êmû2™ 5²ï¶9“ïñåL*¸Ä.:E×v™=ÌL¡|¨K±¦FöÝ6§!·ÛØ~­\»: +÷–|º6°§Þ¶/ÕnÎfû" fã=ÞéXŠlì÷¯±?מó ŒȳÆØ á5Û—ånpOÝX„8sí ¦æÞ’WqöÔ{WÅ;¼#|þsrPWïñè5ü¾>VÿDOR¶/áÊ”|b±¦Vf˜ƒð|b‡ðaíqèÃÞÃü ±½e_æÎkWï8sðÃŒÑvÊ‹{÷<¦è`›tñI¾øVÔð_žVËžÝ^{÷ôöÞ’×lÞÔþÐÛöãŸc\¨zˆ'/=tmU:9™!f‘¢Å@S“”dF+ªû“NN…¿ÖXt*˵‹¹7åÖ‹ØÞÇwñýý8wÛœÎÊÙûfÏX¦âÜ{ÊVçˆÅK©¯”³–±¢¸6Ÿçbò/±á$j¹6)»ãVÛriJìGogÇ-ö¼=JÔœ¸z0¦¶Ø?±³ùÛs›¢Ë¬Àv’ƒÖE—±¦¸6Ÿ®NnGÊ9±•­ïµ6)XZím¹4eÿ‰ÞnCWxù ÑÇ ¼ê0ÚÐ5Vª~†èõm8zþ¢7¾ÖÉœ¢×·uòÚŸ!zk['ë•CôÆŸÖ©2'í©>™&§£ƒhü>Øq½Eó7…4‡O¦1ún¶-G;ýÄŠª>™&éóƾ_®ÈôÖÚ¤ø4÷¶\z {êíì¸ r¨Kkrn:É2HÓDIÑÁ¦à€ä #»Ê¥3™,‰EîJ®ÝeroÉ¥—°§Þvǵ£úççä°:¨ 7‹Ê¡ð°Þ¿ÎÊ¢¶ØIòËý“VßÔ®,GÕAªrHk•EÚÛòvV%}ô–ujl±M ”»mÎG­ÙØœ3&ž]/ÅÔ R° J²œ}­Œu§-3Wkc£E“k“âÓÜÛré%ì©·¾cíW ÔÏÁhq8¹ù¢y¯­F+¹X™]åp¤Hʌ‰(Y HÆÂ…A¸…û‚V%G¹'Ò†¸®ÇÇ–4Wó1#9ƒç`¢gç¸øå ƒð2ZÎ…ÆŠÊVõÉ©l$lqK!¬]œO˜{K.½„=õÞî8ÌiE÷ÏÉÁ\p‰-"á ;Lmm>–Ç•f´-l"¬¨âänsÚÍì†î„¿UsmRvÇ­;åÒKØÞÎŽ+G†ÁÏÉQvœ K”×<_:³ãÆ'{îS”ÔQLtŽ)J¬²ß´ö‘§½%/gæÃGo‚ÀÛ>&?Cƒ Ä?v¨ôjÂW;T–E*3 î-„'¬¨žåÌ/7±ì©êµwÏUïM¹õ"ö£·³ã2»-Aˆó¸áÁdÑA z˜t1—|ñ]T;å˱5ZÍkóiq.s˜n,÷<^[ŸÎì:È«çj{êíëÒ¤K»nwÜ´Ëî¸Ewx§;¼§;n˜ÓÐÌߨŠ&=ï¬nòà½)·^Ä~ô¶3M“jqÎcr‹Il_U¦@<Ý,H‡áK¹òE…UœóhNAWhc Òg½6)>ͽ%—^Â~ô¶3#FâGyi¦„9#ÂS³U6©›ášŸál¦ìp«÷–ã–šXQ-ÛÒ™ƒO:±%:¹vñè Ü[ré%ì©7ÿ–‡ý?¢Øˆ_13ÐÏçaç†&Lp{=˜³a©î˜ÄMg¨éËeFï‡q-”òªÍß,ïI©´!îÔõï8ó¾V‹{$%§:màÑE–7uõ½v¶\xGï-LßVTq$s j&Œ-ϰÙ×zíßÏL¹ôö£÷væÁË;Ò ™3aT¢g8}Âapƈ²3¯—-tí +j¤A2þ /^®Ý|„ɽ)·^Ä~ôvîÃ:n?''óƧ3Ðýí tæÛË™W9é.íù$sÒ!W?î?:]ÎÕWWïÃøÑÛ싉îe;óÄiœ¥z»sXYlGŠ·ê<È›+Ý‘iל“Î ÷›2ét8’Ó6·üv$°¢– ?’3܃µ©æÙkçlöÜ»»¿k6öÔÛÎ<ã=Õ‡Ñä4ºÐ'ÀtºÐØã˜”ó*•œsXU}5çÆ ÀØ6ßk“âÓÜÛrêeì©·K‘dŒqûø99¸'†Ó¬Ò‰Ún¸×ÆeÊù ÷ØòŽ/ÆŠºœ²Ÿ4)Ö½~fºÙ»yêá¤^@yd ìGo;óp¨ ãøhæ¸9H‰¶ÙÑë'Î~ ¹‰r~B»RNËg¬©¹]â v]–%5^»g×!ï-¹ô"ö£·sëz¼®£Šòk’ÃT·°QWq9µ MS´ˆ~¤ÑĊʬ䰥¨±l)êµ3Á?÷–\z {ê-û¢P@ž1›œyö’+ðÉtHÁÄåsmù¢õVTÎN2™Ë ^;ç çÞ’K/aO½w°èú^xÌIqï OD+¿žkÍ0Ëû°/¢>Á¢uØ—q4Oȵ?Á¢{_x¬WÚ¦ëÏ OÓèæ|çättÞ~°‹=ÉЕ›“*ËØ]»§©wõObMµÝAV]‹pÌãµEѾ<ÌC§ÜzûÑÛ¹uüˆY έçÇÈa»i#æ…ü7õVŸÎÝÎþêOöŠVT&3Û‹ãg®³LsoÉ¥—°§Þ{*ÄÍY–óÉ©à Ö’ó¼ Þŧý2°ØjBòŦš*9i•œø¤U8{1x¥¢Ú~™bhéæ¿”ä‹¶”ØÞ»óœz“^.u>£ùz›†Klð%B 6`0×òÅãŠê9rÏÜ[q¡ñÚ5/<Þ[ré%ì©·[)LÚºå¹XÉA¶S­ê׋Öh•-åDÑb<œICyË®Â5µ<+9H±K,Rìríœn–{K.½„=õ¶}¯6Žjí’}ç¶g<+´‡7 ìБXmy¯þ™®±©ËŸtrp'Hì ïTkgÈäÞÃã…¡±½m_Ðï!M2‡­eûp_û¾`j1EÀá·–s.®±¢ò>šô³M,ÛÒzí|ëåÞ’K/aO½}QÍÀqG÷—¬7PnvÉD¼cd½äY±¬¨#w[ÝA„ÕýDk÷—ù™J$½„=õvîvfôßÎÝ~œKN1uå +zÆ·”lÀèì#&9{•+jøl™ÞvŒåmÇk·¬;òÞº eµÁèèmûÒ=m{º•BwO¿ÈI[ƒ–š9ik±Ò¾‘0R›òÛ=ýžµ©}#1a‹Î0¹vNgʽ%ïîâì©·í S›Êå‚èä g(l@üýQOÿÀ>\Í-=,×™JXQYÖžœ‰Ž±È7ʵ³¬=÷¦ÜzûÑÛö9ÅèP{ɾˆS9硱‡` #ÝG•£»Ý_2–Oçø;Ýb¥ÛbL:™1›TØÊ&/Z[”íK[^8³KØSoۗοývx49ßãƒßYÌžó[ý˜rW·œñqco5ÎÛÎí¡Æ–ŸtZŒé0œ÷¶\z {ê½[õÄ9ãîq$ý99“/†Q»¶ñGÊ>¬øfHÞøûÖÖæÓâ4N¶2º¡µkNòÞÕÑèEìGoÛÎxŶ29•7$rôçhÜ8"06Ò V!®*–Ã-—XQé†5§ó )lG¶¨×î™Mê½-§^Æžzûþ2Ž ÊÏÉÉ;È<’ÙO®ŸVpmûÏ®‡Õ Â>®eÈû‹8Ù ®­à´öqÑÞ’3ØóÑ{×Mî¨wÖMvÙŸõ9‹©!ëBí¨’P–›ïðä,ù@j¿±¦.7ÃIÂ,‰Å«7×n†“{K.½„=õÞþ±Ké%ýc—j /ø¨nÞX"h2ÑKL”ýcóÚòÛfµ«IÍiè~m,ÒríL¤È½%ÏÚ!`O½íköû OS«ÃGUxkx.§˜‰¢ ³‚SÎ^0ÆŠÊê›ä,Ì©3vÆ?H®=Ýc3÷–¼Ùì©·íËÃFÎ\5ÿ–á£Òç3Ugµ.ž¹:; %NÝvx–­û˜Ó#¨žX´ô̵ënìSüïrëEìGoûÇ&¶?nN*šˆ]ðC-6EŠ"¤¢[fÍænE7MÊká}žØªêˆÇ)ÅɹY×úØc‡Êr»6Z>%íri*ì©÷öo:ÍÚIÎãQ‘ý;ŠÇÄÐORöE_oËðO¬¨Ûí9’³XXClŸSðܦ싽-—^žz»ö”£êKwÃä ÆP*nµ…CZó ⌿0Üræ‡+ªïY Ӳ굱•ñ­]wüE{K^<ÃØSoÛ—ÆÖ‡}in ÑYÛ‘þ¯ò‡}Yg|&Ú…öår³ª´/âÈF¬3¾âµû¢½3ÙzöåÔ{Ç_âl8–ýÉÉaˆ¿Á̆ý1’v™rü%~O–ÃükjO7gÒv ;Ûi—)Ç_ž’rëEìGïLÝh4Ñ29è" ̓ñ—±øV¿MÑL÷>€œåçÆ.'qdêµ8è—šØ_¼\»ïÔkí-yÆÜ€=õÞ“äÏ(n7ì‡ÓÔÔf64•fz²ém?ÌääSùaFÙTöON+‰Åw>×Î_Wî-ù°ØSïm_¦šêmû¢þƒöE½@&#&zoÎþ¬-®=uSÓ©ÉAùWb[|kríæTˆÜ›ò‘½@Öõ‡ÞûþIüWÉÞæp(WÅT”ðÐG/Û«ïÞlTd9»ˆ+ªìÞ䬇½ ˆBž;×&åûKìm9õ2öÔÛö…~‰Ñ?'çæPPzâJzÁ‡õ SöxÅÅEò÷·=„5µÒãe‹ÆÌÔÚÃ~‘Ü[réEìGïßÇëË>Øä Cýk8ò'<^ njQ´Çm9NP‰uíæÔâpÜ…°‘N¹rmRŽï·–rë¥Q§Þ»wΣ è;{ç(©¬ Ä@Ô ¥.¼Õ½­kÛ€µåƒþka‡#Úd’x‰‹Ñ¹vu |îM¹õ"ö£÷¾¿„?£÷œKgÎ`4:LŠ˜;×/×Úy–Ogo!É» kªïY>âàô–XœÞr휘{K.½„=õ¶}a›8ç*Ú¸ªã­¯3ܼQ<¦>Cò‹·=aE­¬5GSUÓÚŒk¯=œŸ{KÞœì©÷Žïw5Ëmßï<6Æ÷U†4xǸ«)ßHê½å7OñÂÞypÄþv©Ñœ »žk§ÝϽ%—^žzÛ¾\ô:u÷gJÎ伇>ªÅ|¡%^;_i­%oþ­ÖTw¦ä´¸|$¶¢ ¶×®»M¶ö¦ÜzûÑ{÷ÎéòÙvïœÎ)áa¨ ã‚U»è(p›rľ͔WF/…5•~s”W*ìÀÑÊkôÃxoË©—°½ÿÖ䟈‚”–‰áæ°RíV[ì ÿÜ£(h{c.wÊÕ[XQ-ÃÍÁ{-±ìïµK&†{oÉ¥—°§ÞN‡f"l´½q:tw{ÎÈ^,Ãí93ÐÕžs¸y(K[-gÙ«±¢†ïãÉ[<±ÍC—Ûs*Ë)÷–¼»='°§ÞN‡æÀ÷3zº‘$Ò¡—ç#úBe×ÙÛàñïéÐÅ¿u¤C‹:Ò¡ÅQJ³°JwÖÚG:´ö–\z {êíthÌ(Ë='’s3!dò$Œ‹}$šD£CR° …ã9,W0aE­œÒm\c‰Åhï\{ØÛ•{K.½„=õv:ôã[„†y$gÅU=’”å»Y>‘÷q™‚éê¾&ùðì[`‡o?ÍÄAsbñÖɵó­”{Sn½ˆýèíthÖÜ×å4õäÜL;V\UŸÑ›ÀS‹eTáoùã©ÇJY^׿ÓâÀ‘–X¤áæÚÃoôÜ[ré%ì©·'ÿ<ží®[irlB+Ì@Až_$(?)XÖs~9;!Œ{cGúAœà<ì ‰«Æ¢qK®Ýv'íM¹õ"ö£·Ò¡+G–O7cÅ9#NTô½—<Ýñhuö{ZRÊñ‰Èú$3zœùŒCÍWÍâ$ïIiõ|õÀºþÉ?ÃÝ_ÖØ­àØ/¦° iæ+5&Šò•}l$ÜǦÔM­à,N–ì5¶c­s¯=œH‘{K.½„=õv¸§ îöº£oΤéH ‹R7NdAŠeuŽ~„d¢*ÍòÉMaIqm>-ÎÆF{¿;×&ŧ¹·åÒTØSo»ãºÓj5h>9HÕ ŽÆøE_ÛkÑå[Æ[¿¶üN'ﵩÛíl’³ÐÜ–Øxy]Ík‹òåjõ-ïv{{ê½{N>QUor2ºjˆ,hsš²ƒíi[Ž¡~‰Õ²›µ9…bãwçÚ¤øt–¹õ"ö£÷N'jñÚ2`p¨æzØ”A‘›ÍÛ:¾ògVªå·wÀÞ6fݓęq&Hì×w®=ìϽ%ïFøÌ?ôÞî8 ]5Ýq”úÜ{XéÔ1 3}Δ2WÜ”sPêsŒM]{ô©8Ó³Üf¯íµ‡G7æÞ’K/aO½÷d9ºÓ¡ÅYt{eàââåIA˽ ”>GùTj±¦²W|r:ƒC¢|®½âsoÉW6ŒíèíëŠdÃM´œ-Îd€‡ƒÕ&ºVTuÕ'åL¸˜-¿‘ík¬¨=ôÛôÕM,FqçÚ{è·÷–\z {êmw\e 4ïý99•œÆŽìÔIÈ)Û€º¶¯ÏÄŠ*vv›Ão¤±üFzmR|š{[N½Œ=õv¸çb€ì”Äb:Ǻ5Æiâ­^›)Û÷#PÈ¿&ÖTöJ®¹‰EŸŸ\;ûåÞ”[/b?zÛ×9×e¸É^r ]¤…5 ðe«Q%Ù®ÝjTIýKƒºËÆŠþF&§Å%±ˆPåÚÕßÈÜ[ré%ì©÷Ñ;‡‰´úwIŽfÅ©9(ú7¢¿Í4EÐñiZ>|ÆêkSÝÿ.ÉAXb5+®zÔ®ôsoÊ­±½·;N­ï;ÝqÄ=„Ñ{üb€¦˜²;΃¸/&<{y·‡—𣨯T„é³LUèNžîÏÖKØSoÛ¥&e{Î䬜°£K-†ên °Ø„DòÅ%šÊöœÉéhöf,ªSsíæßKî-ùåºÝÀ~ôÞå6êäVÖ{ºOátžuûÜ““{ò„6õ-jl:GbMÍlemb‰E´ã˜ äÎÞ›rëEìGïî©Q%åÉét°áüÖþrXp²œ8^c;ÂÆþaÃtÖÖ<7•Go6ËB¾ÙV Ý}|‹Ç†¡ëð]”îµ)§_Ð}ø­ýeë³aaEp<ß7VÒgkX ¯G`Z¢|X˜m/y‹äO9ÔÔ›hp<ù Ýìê² WcmÊåt~syºw÷¶w¡ßˆ3ü©>¼dÓ[î_Oõá圤|x½ø­|äËž.¡Kªú8ŽàºÅ›=e»D3¨Ö¦œ~Q÷ö[û æÔ¼ö¾‰3|'Ï­Çô÷×סá…ö‡‡ ùŽÉò;(ØÆÕäL©¤nw|JÙî_©µ%§§Ô½ýþm p&rSS†ƒ³1ttG„_Í$ê;#yÖ†+9 Щ+j*#ÇK‘îô™®² ʯæÚ”Ë/è>ü>±¹Úî'zpü©lñ±'«;ÍþŠÍ†‹½è™ â‰*‡®?±Ãv<ÑcmÊét~+÷“qú¿J±³â^N]®ÓecÒã^¬€º=Zú…kMê*Å&‡åÔÔVžô¸—X›ò,ÑÞ>ù­R¹\ºzÆÌ‘Ó1*®`ÌÞ@;gU/WŒ™k€=C·ûÑ%UϘ¹.ð¦Ö®—)…í(cе)§_EÀ9ÇïSŠÍVž¥R9r€Bß‹@T*€qj…øY×è… $ë•.©¡f„àt{A݆¸m·÷ãÚ”çÀ:ߟü>P—úãæ4´lN`SÇë|íãs‹B´-ù)„òá“Ǥ+ê `‹ã¯Ï¡ë/ÌaûBÁž.vø݇ß'÷Ó f0"÷Óh0P 6ÙŠrè4E)÷ÓZÈ{:ù¨¢h[¹ÆýÖ–®¿cLÙ&…ØÜÄßrz ݇ßÊý4À —ÓêCNõD h,à’P –†(esZ=r?….©ˆ‚ǧ4…®Oi ÛIõ±6åô‹º·ßÊýøÜ)Ûõ§Z}ÈÀïëËÓ€RV^3§(U äòš¢Ò¸*Ê—ƒã%ÈÒÍ^ž,Û9Ê—µ¶äô‹º·ßÚ_˜‡ ÔààxÕ\U. ç˸tQØ6¢[þ¦…®¨@ ŽŸB—Í;´¨Á±6åô‹º·ßÊý¬ÆÌ­{ÌÜL÷˜9›dðä3Ë=fnÖ{Ìœ¨k©÷˜9éÆþñiÌœÖ(¶{ÌÜí7÷—æ×{¶†sµÅvd4¶ž¿­9„<)ßš{r‡¶]R]Oðàxd$t‹—ZËv‰Rl­M9ý¢îí·j Š>ÉZY[@Ž?ü-¿ŸX¥Á£­‹BþŸ-””³½’º¤¢ä+8¾DèfŸ² ÛY§ÄX›òåùÉoí/7L* N±žÑ+ž¹¾){ƒMõ»QžGŽÁpÒ%#ȱ'éHÒõ–§-Û¤pu9[~…îí·öŒ~®QœŽ’g/ööÑtÓŸøö:\¢¨£39äÞµº¤¢(8~Ð]?h‡í€(е)§_Ô½ýVîÇ“',Ç|¼8£Ô³#œ´¦Z6fMQÈÏ8ºJÈy%tAÁ¶2E vöå¡îë°l_Ú…«±¶äô”º·ß‚*ð$°=Ü) ªPsG¬c£èg ΑBqC¾q§.©ˆÇO¡Û4¯ºoQ¸škSN¿¨{û­ý%z±©/8ÃR'ÖŽ£…Í;EÔwîFuùи ”Õ˜Mœê±8éì]-ví]%vœ~ü¢îí÷iõ!ø@mÑêC¯™ýÏAŒ¯o·ãtQÚ18@ÓåÑ@ïº- 5T» ÕxÏ£ëÛLØŽhW¬ ¹ü‚îÃo_¼hž-º7Çk÷¬‡cÀ:àjÊ…=  Nò €/芊†àà4ÏÀH·zvF¶kdo´6äò º¿u~ÙhQ‰}?8¾w¤Ys£ŸS&ö€z4mGÈýè’Š}?8¾w‡®ïëa;öýXrù݇ßÚ_rÌ!T8ÛG¿õ‚©' ƒI+¦žD›Ô@³QÈGÌ9é‡ZÊagú`RêÚ£w‡mPß¹Óå~äô‹º·ßÜ_ª‡¦m`³Î/âx=B¯U-µÒ}°µ½‚ò=àõ=xýÉ%oÞ )]Q%Î/âø0éæ Û `kKN¿¨{û­ý%é÷·…CNCç9™²óãk»ÂYôú€}t?Ã,‡|Ã,†íøŽÅÚ”'¡»îí·Î/ÉÇj ¡pÄ™þªg¸Û˜–0RO¢pÆhþB.y÷ré’hœ†p=uñ@ízFpsíAô|to¿µ¿DÇ›ÓÑõ‰ƒÐôÙö?Ø“”bXö ‡0é’ªºóàøã7týu8lgÝy¬M9ý¢îí÷Z›Ïfqjmf«š}Î}{#®A¥öÕ¾`Ú¶jœ.¨µyÁ¥­{Шl? ÖÖ%ÝÔxJ¨µù¹Y§zôÚ³È3ZI†V²•4cof+i¢¾s7Ú%äÍÇÞHWTÀ`‰“¡nBv†¶ÓÉÞpmÉá—to¿u~™ªäãàø¹Úª™9ð³Ûþ±‘ÝŸª•›3 ÆÅä³ðº¢ºF§úmé{‡í"è€X›rú݇ßj%%ˆÊÐPÕàL;(Ùl¶ p‚ÍInKÔwîF«y‰Sf9ÔP;LpüxºþV¶ëÙáÚË/è>üÖþ²ô^3 U ~Öw"D€f¢°cü(¯8ÁCWTד)8‰ ]¯Û52CZrù݇ßÚ_€T9¶ÆÊ‹3Ðà6'ž%öx=%så{@Xºä>[º¤FT¸ÇÛǤ;¼î\¶GT¸kmÊå)t~ëü²ñV­×ÁAqbA•/ü‰¿EEF¥9¢Ò%­×ÁéWº×aHæ±­×±6‘ëèWWóø}zoìdjõÀ§÷Æ9 1.ÔS[Ÿzo|ŒñŽ3»6$GÔJº¤Æ‰‘ƒ-SºØ2e»E|LkSN¿¨{ûÍýÅj¨8'…çqºÏ°5¨]t¼>é5P  {@!ôÕŸú¬=rݦº$F ‚S|Λt³Ïy“í¬T¬ ¹ü‚îÃïs~É8r¦ç—Œ)6ƒ¦b~§`‡ïÊ |ÀчC^#“Üչޗ.†®+†í|zo¸6äò º¿O|,!îÃó~p2Nu»'¶“eW½c¦9›S©K*é¼ONôætÁ—9Ì4ß4ç¡æÛ&åÑ2êÞ~(ÏÞ¢¢Úè­gƒœ±¿3" “µÏC2*~è ¹úB—TðHp»Rº6Q$…mPÊíÌrù݇ßÚ_†Þ»œâÃ02ÜAZ“?Õ9õ‡ïc¾Ô7Ô%QWTR†8H]H© ÙÛX[ò¡w×½ý>ñ1{MSè‚ãÁ™‰ÚÖ‚¹¡¬{-:c Ô P>1˜šº¤š=ƒ<é©”í¢|H¬M9ý¢îí÷oU°‘…EõÄÁ!š jKG’øÎ¢|IÈùãݸIºAEoAp2 #¡Û·P[wåŸ×–œ~e f<~s§ÝÈùÕ©ÚµàlLHKþ-i> £&d[ ˨/ïì[&yCåuIE/Yp€  [1Ò‰¶kô’impÂ/×}ú-¨F·“ÛòÉÀ´yUCÛtµgg1}w&·(NPÉm'Šº1¹íʼnµcr[>™Ÿ‡ß‚*ðñ P›8Þ?ïÓÓP£h@låQDùb…ËûÈ+*ªvÌq˲«Éñ2|éZ7V Û üj®M¹ü‚îÃoîNÃSb®¨8^Dap5¿¹;ÔÀ^¢|!pä°½Ô%Ub®¨8þjºþ2¶£R'Ö¦œ~Q÷ö›»SžÐä?ÛSìcd;êŠÊúu‰Süg.Ýâe² ʯæÚ’Ã/ê>üæîTæúV É Ž-v¾û”útµ!Êw×e¥¹'ìB—TÄdƒã›jèf{A Û9`Ý´6åô‹º·ßúíûÆ=³0çÄp¾…2òé æ3<[Ž/)`¨G"Ü"cøVO=›Ó*<|MJá õn_ùNž¢·‰Iƒ5qš K+^Í32…ÖL ›„w‡¼#Õtþ-M¶quWªªŒ£‹Ìºl'5ÄÚ”Ó/êÞ~ ý¦ %Bí6âLo™Aÿ ½xp묢ðØÇ ®äx–î’„ÚmÄéšÏšß¹ó±]£5Üt~ ý­Åßó>nŽ·èŒRõ`µ¤ 1g@a“@›‰ähA‘.©Hnâx¶Eº™ ñlvŒÁæÚ’—xh×O~kK)jï!pBp|¸™!ÔØó"û4ÛF…Ç>ÒI’Ï%®CM…•‚ƒI:ÔM˜¤CÛ)ž‘Z[ò¢¶£Ò>ù­Cµ§¤WS®V o°´Œ¼!JxŽ„ÿ6}@*ËqQOD‹,-ç”jIhõ”špMVšÀš\¾þ6Ðu]QŒóqs¼0ÉBFÒ!X¢åo£¦ÜËéC—TR—•8–šm¡kSJØ…«±¶äIðÓ³}òû€QsœÇ:89 ³"ÚBxϱE! ÓPôMy. uAÁ¶r6£L{ ÝÄ‚>Ø…«±v:éèÞ~+Ó5ÌêÔàx…©ÅÅ6ƒ©/`ŠRf´#ʹ.©¨N Nü'u½ú4lGuj¬MyV7©ëÞ~+ÚÜX(9ŽŸcUÊšfÑ<¯Â9ߪP«È•à¹Ò]ä%ô›¥ñ9øIÝ,0ЙEáj®M9ý¢îí·æù/˵˜Ùйeaò¥ O¯!Ÿc‰ +* ÿ‚ãŸfèßbd»©Ö¦|¨'Þt~ô›ŠÍ~À¨ãà^E†Ö„„š6E!gƒ5É7bÔ%pÏÁñCð8ýn^] Û9`µ¶äô‹º·ß§‚À*âj}püÕÈ"] ƒ©zLÌ`ÆA)gå ¯»Ô•G N2¤kEª=lƒRAËGN¿¨{û}ÀBù"4R€…òÎꀼ­à üÎ)eùí4)9¸¨+jé ÄI·y N¶AùÕ\›rù݇ß'ÃÓð·J)2< ß±J )€üñ¸§(ål8 §áݧ£Kjªö;8p/Ôõ¹a»©2)Ö†\~A÷á÷©PóÍ¥AZÁÙ@ŠFœëõzM@ÊOZ±cŒyäh<Ô%µ”§ ÎÊô@Æ4§° Wcmɳ€áKùä·ö—Žj£«‚€V û`Á|V@¨+ öˆ¨ž.Ÿ* “ö¯ nTÌg´Ö¦¼k”ˆëÞ~kÁÁµn l§y[’ÆC7Q·§ºU]¶x‘wPèv䯺 `[5Îñ–&éVob’mP¸kKNO©{û}:l:þ MÃt²ÆÍ”V8c ÁÞ¢|è<>R>T¹>Ç¡ZÔ³‰ã¥i¡›í³ Û9êÙ´6åô‹º·ßý¦¡¯ô›Š‘µ è7«JExi«ˆB&#sùp4réŠJQÓ Žp.Òµ0yJ²MJ{WëG>Õ©D,¶ã÷A¿ˆõ3lÚ8Óëç¬fy"سž–“(ߺ'(Cî3í¤K ¶q59™ ]L5”íh´6åòº¿µ¿8Ì¢=`–ör–¿R"ºÁ5g`çoåÒlǰ÷rÉIº¢†riÁñ(rè6ÿcÉvS·[¬ ¹ü‚îÃïß ý™8bæ§ùãÖŽ5Ø&júÛÕ£ï6åȰF¨K*zôƒ“‘J¡.f¥ÊvR0"Ö¦œ~Q÷ö›»ÓÈ@n(ÂÍ Žƒ‰U«?ÎÃkאָ·z{'å;ˆ žG>PJ]R+Gœì'ézkØNqúÑÚ”Ó/êÞ~ €˜3:Aò££4¡B::Aÿ¼;íyïN{Ý»“¨³;‰×î$Û:צœ~Q÷ö›»v»„û›ƒk“r0`mrxN×÷ ÍªÊ—7U¥¸.©{™8^xºÉON²âd¥µ!—_Ð}øÍÝi³¦k|Mpü\;Qâá5¯ÓÍŽ^?Õ mB{S½‚®»5P‰ïäÁñœ~è¢vA¶OmƒÖ¦œ~Q÷ö›»ÓÊhsˆºàtá¨ib8žÀŽ*ßAÞÜ%Ç;¾tIE]Hp¼¶#t½î#lG]H¬M9ý¢îí·ÐoxðÜÜÇÍñü\ýå3²É–e™°ÊwY…ãò.Œ×%5b¸Ž8 ]€„í¦*’X›rúEÝÛo¡ KÞnSè7äø¼{CHÄæéŽà]15ús^OYKlH>ÑcC]R9úsÄIþ¡î\~V¢mP¸kKN¿¨{ûýÛÄæ0,ÇÈtv"§¢lçö“g mˆÂù£y$¯þ—¡®(·­“–sªç ûz(ŠüÖÙicÇrÆ›3äKØí<­ll©‹òÄz×Ë‘7!‚¹.©qp¬›vⵎnÅSÚ®Ç: õË_/¶Þøtü:Aþ`Ó½§;^çë÷‘ÙëƒÑn½ŠÂih*vçò­AØ®Kªé^‚ã_¯Ðuðˆ°Õ­kSN¿¨{û}Ð úÖ›‘&uy-`Q ´Ø§™)ê;#yVQ&yôuIµƒ3JNµèAèr4mçƒ3ʵ)§_Ô½ý¾º{[Û§»u»kx‡Má¸Î…œ" ñ³‚å }¸ÔmBrktMŽà ]ï:ÛÑ•kC.¿ ûð[Õמ^÷÷=žÄñj'š›4dІ1-9>i«‚žãÈ1ôEº¤â“N2·¥›üÌ Û)N'Z[rúEÝÛoÅæ|䑽á±S)8Uý<à^ Ñ4{"÷@Û´z·ÒBÞ0€º¢m38Ž˜)ݶÕ볦(Äæ°¶äô º¿U‡¸Ð뙿…JíS2ø¡éÒóå;ˆÅ¤ê‘7?K—TÒ7Rœ×#Àë­¡K¨zÚžÑÕ«µ)§_Ô}ø­Øœã^߀‚ãCöŒÏ@1êè©éYvŒìHÉý]Sº¢ºÞ€‚ÃÙ3Ô-€ñ¤írºG¹6äò º¿¹¿d©øÌOÆæÄñt¼½7Ó,ϸì.Jñ³ZŽÜ³¸Ò•…äœ%è¾–()lƒò«¹6åò º¿›ˆ]\±9r››ˆt06·Ù¿Ð ’v#¢\µq¢®Ø\¾kÔ¤èãSlŽkSN¿›»ý>±9âÒ1–œ†ÃçÞ§»=Ó–(í«ùP ×u‡j†°¦‡lJ=º;FSB3 Y‡kSN¿¨{ûý ýf*Zp¡ß ŒgÛØ_æBM¥ØÜØGè7®Kê”.ô›]®„íSº µ)Ã]?ù­Øp¬üVè7ä, @¼Ø±tâg¸Õqiñ³ÝC>^H¡+jªã28ì¥.*·eûTvkmÊéuo¿›«è|êQß&ŽCùB@‚Çdž°"~6õ—`ül×£KªG}›8> t=À¶kœ¬´6åUE®{û­ýe`J…yü¸9ží²z鎸åÖô.¢´”ò’5OÃtEÅHÉà4ûF†®I ÛUCçcmÊét~ô›6Ôóõqs6N$À(Êެ饤MvŒíʭĵ†®¨hžâ _‚ºÉ;Ùe;Eϼ֖œ~Q÷öûª-@§yº9þX©ø$ÍÞ@þ.Qª-ÈýÈ1ÂGº](øY³ ÈÉvB]à ÛIu±6åô‹º·ßýfý€~³è7é~S@¿™ô›õ@¿Y? ß¬úÍ| ßÔÐoÒýf=ÐoÖOöŸuÓôLŽ'ÌìTA”®‰Œ~¯¢”ÿßéÈñf+]RMÏäà/_“n¶ïIØÎ‹­åËåYszvûä·ö—¥¢1v)dz­vN`±›á¥¤b·"<›¢b·‚é7*vˇj:…§¢3µ¨Ø­Œc;zæcmÈåt~ëü‚!­©¨æ#8ž°žNNXÝû=ýרT5°Ÿ…ØðÒmšlP…•Ó„h–’t}ÂÐ’mR¸:!R¹ü‚îÃï çy»‰ãsS,¿Ï‘°Ý=«b7C¨!7ôº¢¢‡28žX ]ë†í˜kSN¿¨{û}uŸ³>´¿ƒ0ƒmè C¡:<»(ìÞ>ro–®¨©ýà ßX¨[¢ mPßy’²µ)—_Ð}ø}Ð X8Ö´¿S¨Ç2³JIöÓmí/lí¤œ­Ô%Uôd 𝍛XœÛ t6šíÈéuo¿Õ=ŠÈHv¬Ÿ›ãx?µAvÉõ& 1¬…›€¼y—ŠtE-½UÇQ¾¤›±7Ñv>{×–œ~Q÷öûœ_¸1&8^rmgÆ;zö§zO¢T[ÀÞìN¬œº¢ï?8ŽÙºŽç¶ï?Ö¦œ~Q÷ö[èjˆ|æèèŽwåB¦$ïþÔ¤î _.ɇ>w×%ýÁÁÏFºøÙÈvtôÇÚ”Ó/êÞ~ŸøXz F'ÐorìôÃê¯ã*GÞ09ÐoÒcÄkpˆ~S®™aû~“ãM ü ô›ã·Î/¨ Í~\ý¸9^ÀdOýÁÏXk©‰ÒŽÁ|ŒË1åKº¤Ò©FÅOÒE¹“l§è„ÕÚ’Ã/éÞ~ëüÂéTÝ~»7gØFf'މ9*–Aéœ|µ"ÃÒÙCC9§fAWTד"8Í6ÁЭöû ÛUOŠXòÓ¾L÷á÷™¬ó:ו„ 2¼š—¡ºü-ÈO C”Ϋ¹ŸC—TRÿ¿8Óɤ;˜L¶g „kmÉá—to¿s'ˆöùqs²·jæ|PÿýyꯊB Ë_*C£_Z:T`‹Šƒ–Bé¶x›mP¸kK¿¤{û­ým§và¨jq2žêhRµÃEñ'~i¢°LMgãŽ1ëÑ%•φœì±séf‡»—mPÊÖ¬uäðKº·ß'ÿÒûý Ï þú瓉çÐu~YwõÀÜÈ¡Pw«Æ6Î/[9?¿¬;û/Û×ù…kzt?>¿Oþ¥ .•xÿÁéxshfë†Ý¨dóiLC}À>ës9jÒ¥KªE·¨8þÈ ]/ÀÛ9´6åô‹º·ßÚ_Š&Óõ3¹-Ÿ œ’h#€à<Š(ÅÇö:òÀ¤ÙýP/‡]ÛEϱX›rúEÝÛï“iŒxµÈ¿§x´p´+ZFdOQÊ¿Ôväê‚‚må_N]«t1+@¶Ï,­-y»êiŸ~ëü²qºŠÜkp¼³ÂOè?˜Íó'iˆúÎhZ«GR]7&‘ ÏFÿQ‡®ÿŒÃvä^cmÈåt~tµŠÞY¢Eǧ#zýróoé&ÀÊ¢°4ý\Ž–sé’ʪ‰ Nò<ê„!h»DGˆÖ–œ~Q÷öûÊ¿,í¢ÉÓâl/3`Â`$L–öö8R:cØs^r$+¨+jžÉÓä L†nï˜, Û=z±µ6åò º¿O~¿i zë-¨á™õÍ è7¹‹R~¿—#w0ÍÐ%Õµ“§Ù‘,t+š‹h;rn±6äò º¿µ¿tÍáâ¹28¾)[Ö]3V²ïi‰ÒŽÑzÈWR tEõØ1Äñä|èz9wØ.:WÆÚ”wͳtÝÛﳿhzì™>@–æ‘WMþttµªºé@W#Ç;¨ëuC¶Ii7b5´Éåt~ŸÚèŠIUþ…:jõÉœ¹ŠŸ1V¾çpÙ‰Äα’{ ¥tE-aKDZ·¤k'-lƒÂþ²5crµãt~«6UP6/€˜/â8D£¡üÛó¢û ÞfE³6N³>“7þ†|u•º¤jìâø !tý„¶s ƒjmÊéuo¿ÏùÅÞöTÝEpØCéÉMƒXYCIUR:¿ÔväÓßQ¤Kjê΃3°wQ@±²Í̱6åô‹º·ßgúÀDQI1}`"µc[WÁ4Îâ§l+F/UÔwíF)ä5¡¹º¢Ö§8>>%t3l_XŸ\›rúEÝÛï+œ~òû‘æ÷õg~F•¬"^¬b~†•EÌï—.ÛÊï—¨› ݬüÊœ¢kéȇžŠÌZA5êVo'9Ý4åxiø\A)†Å|.ñÔJ]QMO¦àx{Dèz{DØ.Ú÷cmÈåt~kévc>+Zùrük'Ž„j²YñTߢ´j2?³BWÔ–Up¼ª)t½ª)lWåÛcmÊéuo¿µ¿T!ˆ,V7‹ãèvN83¾ýD‘EaÂã¬ØÒ>ºK9aI‹“QF]ü¶S`IkmÊïùáO¿Oþ…wö«g ‡r¢fÅ¡—,GÒŠ(å_æùë{ÂêKÓÕÔ¯œ ¼4êzsQØ.ÊQÇÚ”Ó/êÞ~tµ†£¬ó 9 (ÌU b–Âs“ΩrGû ]RõdTÈÉÞ,]/w ÛN}g¤n¤#/Jl»îí÷oƒ®V½Þ³n½5ˆÓ’=y§iÖH4D¹·V.YS"¤Ë™[o Á™ØmˆªXŸ1¾5hmÉé)uo¿ºZa¤ºZaö&9ÂYeö¦8Úì¢|IøÖKŽß‡tI-E ƒãˆÒ}½¡Û45Ú…«±68á—ë>ýÂ'ž5°ƒã[Ùjý1¾é¦Y/¢|iIÊ·r*®K*¦vÇ‹C׋ÃvVæ6Ö¦¼é™èº·ßÜ,™·å©0º&NuÄÍŒ ¾áÆÛHvoAù’á–±pé’*ª‰ºi¨kàÙ%lƒÂÕX[rúEÝÛoîN…÷Yèàx&y~6žež˜oqe¡g™‚)tù¨uIE:8žI]Ï2‡íÈBÇÚ”Ç÷Åuo¿…Ã\ÖR¿Jp¶clÖDT0¯ 1ßA Þ”%Ç[´tIBWp|tŒt³ÿèe®n À»<2z®{ûÍÝ)Çûžf㈃ù6yOÍfßä%,5ÍÆÉ|»„¼$Aå›n‰÷PÍÆÇãð¡ëqø°•¹µ)ï‚ÒwÝÛoþö³M­cKȘiƒ–µì¦ú@fþÛô¬½¤ž´—‰P8dø$=ÇÌ–ÕÓJ¸&¤ôz·¯¿M»¿søöwÒ=Î)+ò†hßñ¼­CT¤{ê‘û<­Ð%•›œ¼Rƒîë/˜{إ㒭-9ü’îí·Ò=8p ¯û¸9>MÀ’0öÂ6ü`j ;ºg )ùöbé’**Ø Ž×¡…n¼4m'½ŽÅÚIÐÕîuo¿u\š&æŸ8”²CLÃä)ý†Í)ÿ™µau Û)3tEµ@þÇ1´C×óÕa;øŸÖ¦| œÀt~븴õå f^p|ï°C ·~˜–‘8Ûg Zô å %-Ô%5…™¯Z ]ßwÂv‹T’Ö†\~A÷á· pBb•ø¸9¹˜yé0ùÃh£‹Šrä: ]RMŧÁ©€ÙijŠÊëØ.÷©µ)§_Ô½ýV9AUçŸ|ÁÙöó”?^ÙVõr€UD!ÀeÉ W©Kjéùœñ‡î(uƒmPQªÐœ~Q÷ö[á8¶,/…ƒã(V¤l/6à !±2E)d6ZÈ;áÖ·‚w<â¶3:tâ:-ézÒnÈ6)Ø8\QN¿¨{û}  &¨9ÓÇÍñð}zŠ5GOÀ Ô"ê;WÄtyU¯}߇ªººª×Þज़0¾€¶S@WkmÈåt~ÿ&P½©Ø‡ßÐàÓ·³¥;ÞïAùÒ—Æ\¾5^sæC•(3€©K<`Ú…«±¶äô‹º·ßÜì;>=üÆàDp¶Ày­°Qãmøpök¢|é¼ |$ÀPAWÔÔ338à Ò-ÞÛ+Û `kKN¿¨{û-¨ô¸  È!Ü@¹†‡@ÀzUÀ@9@;{\#»ƒº  Æ5:;tŠ`=Šªbmʳà]\÷ö[P€gSh›Áq¬±6¨„šòfHëY”ï V@·Ž|ˆºSsÌl Ž÷LH×^}JØ…« æDyÑÐ×½ýæî´2Ê6zŒgøH‚û‘5̬؋ÔP³:Bp”óÈC]R=F‰Šã¡[ì‹¶‹Â ±6åô‹º·ßÜ&@†r4·Çsºc’ùé1'Šo¢¹mÌ­ÒW“¯„O º¢¢¹-8ž±–nò|°l§hnÓÚ’Ó/êÞ~swØí,·ß¾8 ûÍÀÞˆJnHÊK”ï 5´”O¤¨K ¶q59Ž (]`Ê6(¿škKNO¡ûð[P^Åg^, jë›·ÖÕ×#ЪP›GÑIùÒO,9à‰¥Kª¨848É·Xê6ÔåÓ6(\µ%§_Ô½ýþÍ‚yÉ-2 œ˜Ón½)Su»Ÿf@)˜WÇ‘/6J—T‰B>q²ægUŒénóØNÑr«µ)§_Ô½ýV0¯bô²ÇéÇÅøaãÊN,žáô (ß í…¶ùÂX ê‚‚m\MÎTÎ+3¡8Ã6(\Ý"½8§Ô½ýV0¯+|£ÈᨄÔAŒJ(ÏVŸ¶ñ¤â¨„„tG%ºF%$¥“z;º1*¡<[}´6åô‹º·ß×z£,w\ë `”jØÔìЀkݲ(ßA’÷†¼£Qº]MìûàZo<÷ú]”§Èö)_ÑÚ’Ã/éÞ~+˜ç3ïRqPŽP†1¢T¡&Áר”¡:ÊHÈ Z\ +ê”2ˆƒré¢TA¶O)ƒÖ†\~A÷á·‚y„áë7Ç£e~Ë8wÚhÍŽQïãåÁÎ!7xŽº¢bÔ{p’æ¡nòG¹lƒRèÏAz)§_Ð}ø}F% ¡èì$NñóOÉúÙ~c¡ž. Ṧ±Â.'–$uIå8;‰ãé&—‘íà3Z[rúEÝÛo•1©J/@b, f¯%ð—k; œÉ•U¡hÒèÁ鉘zõÃOtÒóIJÚbÐ×t†¼q½‡¯¿U0¯%a¸Öàd Ì^3fCOº¶(ó^å{)Bè‚‚móœ3QÝ4ÐæÛ ̳µ%§§Ô½ýVíÃÐDóÄá<꩹È>zifr9õo)…üõóg†ÕçÌ‘J'˜ç;ð·,]Ÿ|¸e›j&:Ò(Ò@÷á·‚yUÁS¸ÖUÝ@óB Þ Ð>G…€ÛˆIè%*K.‡êª. NCßшI‹óØŽÏ)Ö¦¼ª*Øuo¿¹!•…ûsÑÇÍñ:k‹#ý@ý4§ßŒS_mGMÉF@]QUÕžÁÉæAèú ]ØNªöŒµ!—_Ð}ø­Ú‡©°:.‰ãÀožÕC5C)¢pëëÈ Ò°]ÓߘЭ§SurG×a ÂvŽã’Ö†\~A÷á·‚y sï<‘ÿqs<¶ëÜP-÷úËR(k’ëAeͲËQYE]QIaSrì;ß«tý µÈ6)ó6p ‡_Ò}ø­`*ÿдóqs¼a¥#ý]‹`ÕÖvH…€[spÉ»y¤KªœÞSr4't½)(l§è=ÕÚ”Ó/êÞ~+˜Çœâ™Œ-§['úÇÅ±Ü KÌ1i© üÜqp£³ÜÊÈ-<'ùªuAiìÁñ–séZ$i…mPßVÔ,Âu<¥îí·‚yÜ¿®`ÞP"ÂrÜíWtÔûºSºÆíÄÔuƒŠohpü[º ÖÑöÌãÚ”Ó/ón¿ÌsèË@®›ã¥b[þå¨ÛÃo¹‹Rxβæ’cz¯tIä‘8‚º>]+l—¨*×Ú”Ó/êÞ~ w4GI'ˉã驹 Š€üôlhŸy‹òÄ VÆ‘ÇĆT’àx¡qèú1!lÇ$Ö¦œ~Q÷ö[¸£ È]x°Áñà¢a&ôM¼vRÃmMÂsMØî.ïÂ}w]R6 Ž£a†®£a†íi,­M9ý¢îí·‚yaÚ$¬Îàd³Ð‡ò*þþ¢ZLæàhtMswù#u‡ð‰Õ)Nrˆé¾>ÛËh®.z*º~I÷ö[Á¼8Õ æeaY[^ Ï>{áµ –Õ0Q ÏyC åþ” ]RÑW@2J×»:Âvt}ÄÚ”Ó/êÞ~ÿ6g'œX0Hýãæl;e/ÓnÝñÑuöéÄ®|´äÌUS—T ±gà,Ì\vÇ9¶Aé\fkKN¿¨{û}ÎNo¾©ÇÙ©à[ßðä 8‹Ÿ–¥ArªžCxDrëXÉ¡+*«Oœ{ŸKº^z8d›”ÎNœ3߇ü’îÃoèÞ¯¾×$T0Ö~¯«¯µ^Ýü(mhWGtª>{f¯¾Wrž½«ìk­W·¾Š,ÖÕK¿Sn|æ5âÌmÛC–†ðµŸRQºÐ›(+T~(÷ÐxèvTœmÛÇc­ÔÍú¦mR¸:kjOîÇSêÞ~ŸBˆÉªß…<•ø¯¬¤ŸŸvª~ûB°ok£bæ£Kª Ù38¸>ÔMö2¶“=cmÊ“ÎN9ò[g§ì5déóÄA@®ÌYE°®{Ë)œoº*Å]>ÔÓäºC¿óÄA@ºüÐ6)\ ˜LÉéuo¿U7Cïw”#ô’w²Ö‘·@—(ßAXÖDyËN†.)ØÖiˆxŽ Ý<€+ Û `{ªÓÁåCØ{)ò[g§võ¥ÜœR¿õÖI”â$…b…u¡xe@·†îJŠÎNâðü³.”®°}ÎNZ›òvõË?ý>¸=L’qRApº`¼Mzúë<‡ÁzÚì$A Óf”3-FÝH¢i w‰DZÏG7;¨­lç˜Â­µ)DYÏŸü>¸= qT¾‰S¼›ÍŠÝz‹vÛ:Ò“0¶Ò¹²BþzºpYÓ%Û~µ8Þn!]”Évlf­-y‚¶ëÞ~k©è ¼ör¸G´kGñnÓg)Ã>Œ÷®ž““¨kY>LèrÿèŸðabíØÒµ7Ý~k©EìÁà8H©•Æ €V¼NXi(ìÃ8)_˜}F]R-ÞÄ©žþ‘n±˜TØ.Š~ÅÚ”W!°¸îí·ö—bï¶þIî/ä8òŠ#¹!7Q7¶(ìQ(ʧþŠ®Kª©*8ûÏ÷45íëêyÒÚ”Ó/êÞ~k‰*Y±9rüðn{€ð”¶ïÂSbl®ÏÀSÚMcõv›‡êªyNµgvèú£°]µ)oß>ù} ílϩ޻öqs–½ Y±[EÊ®Ž–c{e Œ°N¬9ʉˆG]QÑ)œa_öÐm@¢í'+­M9ý¢îí÷ÁíIó.1 Ž—‰8öÁV ‰á"ô(8Aül ÉIùÒg纤¢Ä$8>/@ºÉg ÈvŠYZ[rúEÝÛï w´8Vç´Á£âù€÷o)ìþ\•¼úÐ銊odp†'ø©[:F'Âv‰o¤Ö–œ~Q÷ö[çÌ‚ÏÞÂðqs±ÜŽ„²×žÏ% g üæþÒ³J«… 'ζÛB¾Èžê=ºj‰§Ô{tÞº|(þ຤æÁ…#gÎu qË6)\]€³H9ý”;~ëü2?aw‡guawØùc~Êýä »Ã²9åÊý”OØÁaî'_Øaû:¿¬ »#üâùeþ€Ýáù{ì­CsÈúÑô‹žÇ')U ´täèN“.©h|NÕãµ±(¯c;bí¢/¶ûEÝÛo_ð,éUX7Áq\oÃÖ±'ZÌ+§]‚Òcä#Gy¨tIE Vpüéº^¶£+Ö¦œ~Q÷öûœ_{äÏù…š„ó ±vKò'~.¢°Ld)_ñ X‡ªj-޶‡n¶ÇUØÎz«Žµ)§_Ô½ý>¸£Ätd™lp¶ãG7 8VO0{Dk‰RÄËßÿ(GfLº¤"Ÿ¯È–nñŠlÙ¥½‹“.§_Ô½ý>sßÊ=æ&O©xJ£:vwŒ!\….<¥ÝˆxJ®ï ¹ÇŽÑQç9×Ñ->N¶Käz´6åQ꺷ßW| Ål13;”6°§ Ä3§¨8c´#wh³Ð%ÕÎÌlrª=ÀB·x׫l—èŠÕÚ”Ó/êÞ~Ÿ¹ '’¬ó 8ÍDZXþ¿¢¥eT´çdQ8c`¶ºä˜».]P°«É™æ¶tíÐÃ6(Õ-ØÚ’ÓSêÞ~ŸÚÛ _Ïp¶Ç'£õÇQ‚ËÆ¸Œ(æŽÌ—O)-Gî%j¡K*©ÄWœ…9pÔ]SmCf”j lmÊéu~Ÿø‘¹W'‚E¬öi€ d%P;S°ë8òŽ&ê’ ´²àø >êú>[e›”âcœlÕêñ‹º·ßÚ_7î/äøÆZ…‘ï[°Ü@a@ä’.©~¢iä4àúP·S޶ëÁœãÚ”"ŸŸü>µkíY çò4dŠ9—§krHÌÌ>m«é´ŽR7Et~¹ZKÛÑ™ØûY µ)§_Ô½ý>¨qIå_ĩȡ$4Fù³†#)HüKyÖº¤òÉ¿“”Él ja;Ç“BkS.¿ ûð[û Ào\8rˆ ׄnÅÒ} ‹pŠ©û¼‹­ûèuIbjqˆí6ïbiÙ¾pá¸6åô‹º·ßg.OG[Èâø8Ûšs#Z[”"^u„| `•º¢f #ˆãqMé&Y#Û)&ximÉéuo¿OíÚ¶¹WQ·¯=54ÐŒ‰`OuƒgÌQi{€·ÈSîé±Ð%u«â$¯=•nZÀüíu«Z[rø%ÝÛoÅǶG¬ö\8p pÅÊr^_OË$Ÿg³ Œ%¦ÒÙ샎Ü[ÂB8‰;¦ÒÇ_ý©k½!vömR¸Ú×–\žB÷á·Î/HIùÊàd ÌòÊ|ÝY5¨ïÚvÈ‹o’Ò•”¯$Ç<ÈYºæëÞ²MJg#3#¹û%݇ß.\ò̯Î/â?ƒ6°Aí|b•¯[bX˜ïI9'RWT>çr‚®Ÿ¨«l“R4ÐD»¿¨{û}æò¤òÜ_VL]?#"fYõžûËÌ@i‰üÿ©­ ê1—çÔ8†näï{~î/\;æò¤koºý>syqã#§yŒKÓ>;B±c2µÈDk:òœuIÕˆ‰“ã¢nBü«j‡âcZ›rúEÝÛoå_"#OІàx5¸åH"'Ë2* Y¡ ä['“«º§‚ƒ¨àT;Ú‡n¶Ï6lçƒRʵ)j×½ý>sy«ûKÌåYÑ`h u'<ÍÔ, {@ÕoÂåmºNÑ6®&ÇÃýÔõÉjU¶Iáꄨ,äòº¿OþÅÀv Ç‘€|žÐ>{ÍÇy‘Rþ%ïwŒ£®¨@ Ž§Ç¨[FÛ¤”±ï‘äô‹º·ßÚ_ðæj¨b‰û 8¯Íȧ­ùÜ;kMLÃñ©¥Ys¬ì9¿FÈ NÔ%ÛÚ16Z_í5’ºi»Fm¿Ö–œžR÷ö[ç?µ© UsyÈ¢Bña(•`?—=E)£òzÇ“¼z£ºtEeU8Š3QpAÝ ÚžR¤µ%‡_Ô}ø}p­­FÒp„;JŽGÛŽÐÑÞé;Fög (ŰìY$¹?ÀB—ÔÒß%8/èê@Û ´±¶ßäò º¿¹¿ô澉Ãýå1÷m8Tùãü˜tÉïwì ®óËý®ºÜ?hûÚ_sßät~«÷fzñ‡Õ©÷†ïÿµtÅ¡^ï£v>)ø†ƒúÎݨÔWV5uM¢VS£¢¶Œ£[ü|"Û%Î/Z›rú݇ß'ÿÂ’;Eþ…•|³A‰vY‘1©IΕzÜkÓUõŽO@ ]‡_ ÛY9‹X›rúEÝÛoí/Ìåf{¯þ¸9as¤P|’³×Z¥=À›!ïM¸Ð•õONÆ3›º>±;É6)¿k‡œw݇ßçüŠÌ}Î/¬Ê¬Ý+¾*þò ³ f¥óKNGî`¡Û•SÛçüR8Ë3K—3Áiûš>εCNO©{û­ø¦ä)üäàxõ©áGoœÂªÉ˜c6h"  å¹`ê’šŠ¤§ûËI 0{‘í =Z›rúEÝÛï“ßOmÐô Nl IkH†ûxjRØü8,yõ£²tE5}Ç‚ãHô¡›±wÑv޽KkSN¿¨{û­ýŧcúd8Í%ÇOŠVäÍ9Ķm}TAHX ñ¬G¾p€£îÒüã¨'9J“tB.ÛéªÀÚ’Ã/éÞ~ŸüKyBáˆõcõQ?6?ÕMõo²~¬\syH=êÇʕߧnäïçõcõQ?VÎÞôðûÔLm¨cÔÊæCŸˆVe¹ú¥ŒÊG¾nC]RS•¦Áök–®AÝ̰ ꎦI^ò溷ßgÌΖØ_3´˜DÍçæÄ»(í/½„|C„º¢Æ©#õËÒ­ÂÌÎ]”ö—¹Žœ~Q÷öûš›À^·|æ&p:ÍÄì|æ­Í"J9’´xâÔ5OÆžœh[Qm³v›"ê;OR|oð…~A÷á÷…k_úÖ\ž®ùæµ[ùÖ€==DùP· â:.w ]Q§×Fo¶ ]ï€ Û§×FkSN¿¨{û}ꓽ/o¨¦78Ë›ªà†wd¶*‚RÞü‘Ü•¡K*NÔÁñ.ÐõsnØŽu¬M9ý¢îí÷‰yë{U^,8Þ›íŇHXÔî$Jñ±2C^¼”Xº¢ªÞƒ“='Ý„a)´”‹µ)§_Ð}ø­üKE…ÊP98É ³q|Ä¢Oú¢”±ïõÈ}¬xè’ ,ÛàtûÙ„nCÅ1m·˜Bªµ)¯šÄSò'¿ÏÜ„ù)>FNÓÜ„uOP.xï/ }æ1×z^ñ±égn¼âcÔåù…¶¯ó ×Nš›0¯øØí·âch`²æÍM Ç_†,¢e-MÖ¸Ò½j+%Q8‘ Šò†V+êŠ*wEX–ºÕ/K× ±ÂvÔ?ÆÚ”Ó/êÞ~kÔäûXp:²êÕ8YuŒ¦ßñ>æa%ä#+Ê9Æ¡â},8Þ ºÞ~¶sàhmÊét~kéèËð™7§ÚØÎ 5æF «»M¢´¤rkß¡+*&T'æÂ%ÎÞaÔwž¤j=rúóèŽßÚ_¶ÎšIs«·Îȳ§ýœêà†ÞÍ?DaǨÚÁ\ÞtFvݦ½. ;€œbÛèfÛþÃvÖ»e¬ ¹ü‚îÃïj8%¶04ã©oǸ„¼ •«wϸ[… (ݲG¼$Ç[uEUý^‚S<¤/]oð ÛYy±Xrù݇߿ ÔZöÝM7§k²íÜ-&ÚÎʽÝ~° ¹‰ ]RMˆÁ©*tÝ¢Æv·]y±vQù“ûEÝÛoA­ùP4ãi§”öw²„”ï Û 8>û`J7¨¦68Åþ't³ÿlçØiµ6åôËuŸ~swª[`·¬ÔŽ÷x-ôîx<;¿¨¨ääïgaòIÈYqIݨ¿ìO#§Ù uèzÜ?lWUjÇÚË/è>üÔÚF­ND¤‚ãQ¥¦i†qj(¾'å; ÿCÞ4•Ôuc£°Äñ¨RèzÄ)lGD*Ö†\~A÷á÷™›À:[N'{«—Í.XxrZÇ~™(œ,±ßX)[;ò- -×Ý…«) ä ú™º("•í]FZ[rzJÝÛoîNÄùA™þÇÍñYŒ£bê¼µ”ƒ@ùR9ÔrÎ0¥nׂ"¨5r‰!t™“í¹ÓÚ”Ó/êÞ~knÂVÝ«5ƒã‡a‡4cÍSrð³=EùR* p)oµ£.©¡3lpî$tý ¶£*Ö†\~A÷áwÌMÈL-ÍMÈÌ%u›aPðtzm 3vRì˜f ):?©Gb©D[ o]©æ¼Åijù‚5%¥7л}ý­ Ö8ªú3çÌCÉTê# úÎÃÕhG>í»º¤cæ&Ây37®[ûØ~Œ™óµcÌÜÜG÷ö[á84šÛéCpät5Ø <Ø2Rú©ŠRÊ¿¥# Št§ ¹¹ÅÇ«ÕC׫ÕÃv^~¬M9ý¢îí÷)'¨T'@q|œb:fRþ«ˆÂ¨ÓžòêéOꊪjj Nž_ <üvl§@ÔÚË/è>ü>åÐéœuÊ¡yp-(‡f“K-Q8u ­(‡žóè’šgÊ9^b,Ýä Î² WcmÉéuo¿O;'Ó9W;ç®'¤Ö”¦˜Hé31OÊÿ × àHwj¸ÙÕΩgýè"Ü&Û'§µ«Ú95À¬ò[åjþÆîóËÕÈq˜u/RF”³ 8É8f DE(Ÿˆ¨Pw*¾¢¡tâ8ŽŸt³ƒ²Ë6(ïæ8rúEÝÛo¥{2Š^–^zȱò/@+VôxwR¥Ž[(8àPw =`é¥'8#¡®t̲M W´PNO©{û­rì¥ É=8 šBžïãèNP8!¤&9ÂmÒ%UO9>6t34§FŸk›Ö¦¼itºëÞ~ŸpœUû®©KÁYžãÎ>Ì­.TreÏî‘R8ÎJó(/žá“®¨yš?Éé·w݆üÖþ21}{*TœåÃÜÊ€š±$¾ÿzöœ³†Üþ=tEÍ3i§a—£ë59a;ÆÚ”Ó/è>üÖþRPÎs…㊠´Tp•;w€ª\åÀ+”O…þÊŸÊ ȉZ¿Âm´}…ã¸6åô+JŽß§œ`á¾g”èÕšI††áÔ5‰R9Á˜G^ôÔ¯íP]”Áiöֺöð%Ö†\~A÷á·ö>ñO9ôÙ|Ôõ¾ÀA¬Ü¬>±¥g¾ss²Ñº¢N9´8(i–.Êeû”CkmŽÑ¦_±}û}àJ`GÜï|³§~‹¦cÛf´/cXj·qy ?t]Rx 9Þº)¶/ðš®v—7µÛ¸îí·Âq˜U=öqüÇeI"`U¤ôSu¥üC^„E̽©E’vŒ ?¡[UàÌfÚ_´6äò º¿¯vN“—Ê Èñq/>Ø{sÙÑäJá¸RCΖêŠ*z2'{ƒt=¶“ ÂbmÊét~ëôóu¸Íeÿ÷·ÿÞÒÛÿþ-½ý›o ¸ ‘÷²bZâûÛßIž½­Yr~§Mî§­õuøï¹b~­8~ ¡|$±Àû7;ÇåH\üþÔ}ÿö¼ýî[±MàqK¼hz>óã&@šËŸ\Ú àgöñFÚð_Û«_Ž&»ê ÇÓ­?³øò!/ÀÒªhÚxÿæïÓëš×¿ÒÿêNeõµX%‚柧~ýuH¶¯?ü~S©zÅÄš›3Q^ê•m)#+šo[¢’ž*ùxèŽË6®&§x™£tÓÃv:¶¹6 Cä—ë>ýV<¼î›Ë}/Ý_bd¯o4O`½3Fåäã¡;.Û÷½tÿC…nzØNÇ6×vNøåºO¿ÍÏšëiè‡Ö/+ë‡-޽®ëŠäy±Ÿ«½­¯žQ"¢aãý[µý¡ÿHãú÷Oú_}«uB/Ïhô¯ûV8½EaWô!‰³\¢%T¬lïÆ¶˜¬½[ïƒX‘=Ôò~ë’Zчﵖíuªý¹6åòº¿ͦçY¿Ðàxà9îÅÑ â^Æ™ëË{¡¼ßº¢²~¡q/¨õѽÌÛ6¨Ç½@.ï¡ûðû×|«µ&r~Äú˜+lß q²¿už+’¦þ­®{!P«AÃÆû·†³?иþý“þWßê°ŠIoaÕé_÷­îö†|¦¦Y½à4·µy¹D*ÞËçéŽ* qáìÊK½uIÁ¶"Ô¬›O)tk½mƒò«¹¶äíÖ}ø­ø¹ó¬Ž“‚ã@ ´W³ÃFs=R×½H_¥+ª(sí&Ý´nÛ ®{ y»u~ÿšoµ>;{=µјdlß q’Gâ Žuÿù·º'` Ðjаñþ­×¤CÛƒÆõïŸô¿úVÇUþ¾<“§ôÌæSϤ{ûx]nÛ®'{l\á£ê~fÑîuv(fV‹†÷oÃ~šãGšŸð'ý¯î5¬zßÈË3Yz¶üò_°+* Ö2›GŽùŠáG‘~õjFS”@ w³ù~èîË6®&Çv¤›êm®ÆÚ’§‡nzØþÝ}/%PÍŽá”Ëäj½3@WþP¾ºû²ý¸/9¡® mR×½„<=tÓÃöã^öÇNŠ¿K{ü]Ú—öø»Pw_¶÷2툟Cü]ú—þø»P7=lÿò§Q|v^vøq–uú·<8Þ+]‡ÂŸúJº ¬ÚmØÁn(4ÿ¤ýú÷Oú_žüt•?õ_žÉŠÓ¿îºêÂD‰$4±àŒvCwrÀ‚Õ|&)äC;z)ŸÝyÙÆÕ™\OP7²Ÿ¶IEÄ9ü’îÃoÕt€Wºº¿‚ã º—âßÝK‰ï©îEòùЗíë^,¾êÑMÛ騿ÚË/è>üþUa}v;ÅÏQà Ìøö¤þ­^蟖ÕCCçÛ2èôÚ¯ÿ¤ÿÕ·úiõåÙÓê§ Ì)ïúuÊûgßz¯Aþ’ZUÿLNó68›9·éqaZå!Ë©h¶,U;òùЗm\ Žå]rèóØ…«±6åô‹º¿O­ÝB«Ú{©É‡`ÑàS´¨û^$ŸÝyÙ¾ïEÉ%~õ¶ ê¾Êå)t~?¿õ?û;þø­çzVŒ‘=rEÚê¦øÇ~g÷ò[ŸSFxVEÓÆû·\:iž4¯ÿ¤ÿel‹VjéÞdôžY¢ËRWÍk¹?ÞHsz‚]ONAÛ\\A|Ÿ/"ÉëèdU4m¼³ãeÊ>Ѽþý“þ—ZÝ@Ý~“UÐÏ}ë/ý{ÁÅë=z:8îÇÍñB\KÙI~nŒÛp„tRJÍY•(åµÝº¢Ü6®&§X¾$tÓÃvŒšµ“F}\º¿*F‚…ºŸ÷âc°Â^,׋²™ðòã«éŠJJLˆ3&04X-ÛoÛ î{‘¼ßº¿÷bÐç¬y ïßíY‰Uub=R×½H_¥+*Y‰àTO—ní·mP×½„¼ßº¿Ÿ÷boýq/öZ=ÏÛÆzNÝ÷B¹|….)ؾï嵄ý¤¨ûzr^¶AÝ÷"y¿u~úŽ-ÅÄY>NçåÍuú€º¿c”ó;D]}Ç¢r18óóçûyÙõø½PÞo݇ߟîÅÜ¿´sÊÞÂ`®·Tdþ@~|ÍׯÇm?î…÷Êß˾mƒzü^(ï·îÃïç½ì¡Ý;8[Ei åˆ9>;R÷wŒrúJ]QC»wp<ª{Ùå²Mê¾Éû­ûðûÓï%PɃÓ`ßYþ•¶šdóã9&¹~íº3Ú¾/™êæyÛuÿ^$ï·îÃï_ó&¢Ïîµ±%Ûã{QììàùrÒBŽôŸ|1gk«AÃÆû7k[fõòƒÆõïŸô¿ŒÜò*+”µ³ƒ¬€þѳf æ «v'¢‡Wx”š ž]Wp ÏÏïµM]Vƒ†÷o6jÖi\ÿþIÿ«{ÕUÙaÞ>Þdô¯{±d½ ?Ìþ”ÿ¸9ÍŒû$NCJö4ö™MRÿÞs"¹%ÌŽ®¨ØSÄI^R$Ý4oÛiÛX[òüÐÍÛ¿»<ÇtÇû^ ·…½×³rŽXÔ}/”ÓWꊊY’â ‡x–mP÷½Hžºùaû¾—ÏŽß3ãïâ{fü]º¦QÆßrý% +êàÙéïâñw·mP¿ åù¡›¶ùÓˆë9ºGÜIÁÈ#îàx»P>WX!éúiY­U]‰¾ë’¦÷o½Oq=i^ÿþIÿˈ;¯J(Γпîjzýe[]‚ä8ìÎÀ\Û¥úÊ­”Ê^ó>òõÐ]—m1ñd×vèŽrÛWO!Ö¦\~A÷á÷Aóâ?>Þ÷²kÌÙ²¿µ5j=P÷½H¾ºë²}ßËZ(ñªO¹l¯qlcmÊéu~?ï¥-EaÄyý˜Ö{^¿b=P÷½H¾ºë²}ßKsìsébTƒl·zlcmÊå)t~ÿš_¨Öc!v¬_½FÚóDä$t¶ê ÿu}õ VZêÜËxÜËøá^Æ}/¦ûðû×|«c=¯¢û8ë{Üs+â`6Ö¹âOåVÚV1}õÜŠh·ñþm¾ŽS»ý„öëß?é]U·¯Ù/Ïd¥+KýË¿ÕVèÌ©dC%×Äù÷ï‹£D£“2go²1´PhÒñ‘c’Ïvë’‚m\MŽg¥[êm” ´ë:ò~ë>üVùxGiä"•®J¾—=ÃbM±¨û^(§¯ÔEÛ×½8êf•®·¹„mR×½„¼ßº¿?ÝKW,侪ž{ñ|zÜKÒ{kÜ ä—÷õáùxÞKrï%_¶I=î…ò~ë>ü~ÜË£m,þ–+Ÿ¿³•ïÁÂb|O ?ß¡u¾qwÛ9¾ÇJ7¯ÛvôF­-y¿u~ÿš§M|v gî »N™ÁQféA‘óêS8#~æZ9.›¹B7œ±Ÿú_æ¼V_ž=­2ç…O#û§ñzCÃÿøidË-ZÜ1×7Ñ »Op¼>rœ+ì}fµrlŸWüy¡s. ¯1ÒKšk¼ËMŽŸh^ÿþIÿË< ¯ÊÈé¾É èçsùgŸÔOk€›H7DÎLËÆçY‘ü0\Út¸¡¼—[WTDЃS ÝœoÛùL4åÚ’×[÷á7k€ÉK)Ú­Äñ oÙ³·‰ëºï…rúJ]QgÖ8VÀ{F̦¤mR×½„¼Þº¿Ÿ¿ÿ?ÿ÷¬׫þœÿˆõ-¤ÃŒ99£ÒVtò޶/2bÕÃβ4l¼3hØ‘¤qýû'ý/3b¼ÊÆ Ú{¬€þÑ3žëÙÁŽß¯è¹õ+ÇòéºÂžý«øbÃäZ 6Þ¿Õ±=ú3ëß?é_äUµ!++ _ÄŒl6ÙÓLôð¢q/’“'*tD[ÅÐø*¾hÓvjX 6Þ¿µ9ÔÁþ qýû'ý/㋼ªfT÷É è_÷´ê˺<"Șœ8^HÕ§—yy,{¼(/ó"屦ÙO¢|>tçeW“ãEX¡›¶Ó±Íµ!—_Ð}øýk~á\Ï1]ì¤)zùÄWc‘“ÎѤøæ«o}IhÜž¥ ïßúj@XÿDãú÷Oú_ƱxU¨È‘Ð?©] 3[XË ºz,Å#äè^ƒnªÿID`,`ç³–A´îmØ¥ý#]X»ðÔÿ2"À« oÐ}§пî[?W¶ñVG9v‚0´üEt-k!JØÔu07&hQ¾ë­ ꞉)Ž÷¾P×Ï~a›”_µCÞn݇ߌÈóqª·Rê^p*×½œS»îrÝ tEÅ,¹¸—åñ Ý˸l“zÜ åíÖ}øýk~Á×z8êà ZFÏ*"0Ç…búqè†=y½^*8¥ôIEný/#ºª³¦NVº~Á¿ü[½l„ ª™í ŽC,ë½c–ðuF28©)ÊOT{Gp¼í”/Ý ª²½ÁÉ–¤®}3mR°ík‡¼áÿéïþ¢¿¿ŸjßþË·ì‹ýÛo6LñÂeàWCߨ¿£Ü†´ær’Gn‡ÂvôI^òÉÊA¹åè¯õIšü/ýÎý&† 4'£Eã—bQWˆ>W¨´BWˆ>W¨ AWˆ>W(!ª+DŸ+”Ñ¢Ï në Ñç ¤t…èsÅ¿è}}›ÿæú’þ‹Ïç²/¸}³ÿÕÿüw¿OöuçeãT~ö+ùÂXßÆÚ®v¬Í¿À˜î?56f3ä†_`Ì°Õ yð'ÆÊ´ƒÙ/1fC²-ó3ÏR·‘³¿À˜W8~÷Æz™µþüù…1Ãá0ØæŸ›-ÙÜ£_`ÌøGúéW£ô\_¿£ÏÀ¿tçI\Bÿâ‹ZùnŸžÀN·á‡iZa¾üë?üÇÿúßþéÿüÙ…_µäµÎß\Ë¿›öa.¯½x-úïÿêßýÓ_¿Þ{ÞþêÿøÇ×ýýçýÏü‡þëÿðöûó§>‰û¹øÉ·ìþÜÿšo›3-¦£SôáarŸ%øz'øOÿÂOºü©Ozw”œî^õÏúoÿéÿíø¤ÙíШ4´'©CüßÇíüdÛøó=/ùÓ¶±;˜’Uö~ºâ\ûwÁyíç)]WTÙ'~˜?ÁüØÝX4n°ú¯¿“í¯ûúÝ‘N‹r½²í}?Óñ'™û >É?ŸIùê“L^†s>'€òߟ¤ÅuÊuEvTÔ/?ÉŸ5î賂ñ¯>É샑Ï' ú_òI–åਿä“ü ²0?ÿ$­Æ+u‚öîõIú$ÐvÖŽ»ðå'ù³ô ?+ÿâ“´2Ÿ\Î'Iúg/y¿åÃe:Ò¢a^l*éOm"ÿ¬œüÄn+çÿW¶?GÚ¾rùsç¯÷à§Ç¾Æ/¯zö쵕ÿ­oå9u{7ZoÿÃÛ?ÿÃ?þ}ÞßÖ^¯3ðxqþ7ìvïüþþ}αÉýùó´zÌŽßþíþã?¼ýá¯_€·¿úþñµsÿókã|ûm^nýïÞþÝ?ýáû&Çaýù õÛÿ 9’ endstream endobj 516 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 497 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpKaK8im/Rbuild3bab9277493fd4/DRIMSeq/vignettes/figure/SQTLplotProportions-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 517 0 R /BBox [0 0 992 494] /Resources << /XObject << /Im1 518 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream xÚ+ä2T0BC]SJÎåÒ÷Ì5TpÉç äTßê endstream endobj 518 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figure/SQTLplotProportions-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 519 0 R /BBox [ 0 0 1008 504] /Resources << /ProcSet [/PDF/Text] /Font << /F2 520 0 R /F3 521 0 R >> /ExtGState << >> /ColorSpace << /sRGB 522 0 R >> >> /Length 48537 /Filter /FlateDecode >> stream xœ”ýË®åÈï.ˆÍë)ò ÒŠ»4ý÷ lÀ> Ò6ŒFíºÏÀ¯oñ»P±òW©}jP¹‹¤>×Z’"‚ÁKùñ¿ü(?þ×ÿû_ÿ×ñßÿé¿ÿßþçÿúñë¿ÿU~Çñcÿ÷¿ÿúß$þŸþÛ?ˆÿÛÿô îúñÿûëÿñÿüqüøýU~ü/÷ÿë_å¸/øñþ ðO9Ž3þŽ£ÇŸÿãÿýã¿lÁ>~®þ£õPµÖøy­½?WËþï?þ·ïL|ÅÿžOpü¼jý±ÿŸàø9Úó Žß>ußÖÿœãÇ×_g-?W1ý÷_ÿÍ\ýç\Û¤Ÿ êyþœ×sèç‚vÖàç¢ã‚ãgÅ×øüûß|)1`¹ÖÏcþøú!ºÎús܆þøo¾âj?g{.7Ù!¿¿‘Öný}ñ픎ïö~ߣüì=G2M½ÿUnó¯ãwRWÿýúï¿þ¿÷}P–ß]µÚÏã c¥…4­ýý; køÊ>¬ýqß×Ï9ôcü<ãØ8ç϶~´qç~ÿâíº©þ³LS¿âê1㣤üüÀž›n^-NûÙkbï³é&Å«9¶ä¶‹Ø»ýõ_›å¥ý¼ÎÏRæÏ>ŸÏrþìçóY@}|ÉÏì¹éÞ?Ë}§Œò|–k×Mêã³Pn»ˆý°;>Ëç}¿¹4Örý\q‹nóøyüæâ\çÏq<üû;¸õÛŒ–#™¦Þ¿ÿj³Ç¯ñ©«ÿþ ý§;XW•ûù»®0–ZDãyü°k\3Þ(õþ¢n»¿~ˆn÷7Ö\/N¹_×x®(÷{ï:þAc|Òqθ•¬Õ´tüý×<æÏóüZ×ÿýþOŸ5¯Âoýõ#µ€þËn“ïUç¯ê¯¢Ûýê¾ïC\ON©ølyżžŸú¸züÔ÷Ëí¾?Ž?¾¬n eåP¦¥ø~õ7õï´®ÿû7ü_WÒzߪ æJ+éÿüÚšñL×ë~bjܤû=TÝêä”vþ¬×sżßí¿u›3ž1+5-÷}{®Ÿ¥þ­ëÿþ ÿÇûZW•u¿tÃ0i!ýïÞ̳tÞ'õgox›%?Ǽ_L×=UöÒ¼¸všŠ7μg…s¦¼¶k ºy59íŠ{ÝØ¶vݤpµÆ¶¼ïØ»ùf6ï~³–ùñYê÷‚õÕ_ŸÇ#µÉe«°¢¨{ÿ,eÄ+רû]±é&µËûŽý°ûŸßÌÒXâO<¯¦ûýäUüæâÜK–^Ÿ îÙú\ÿêq÷äQFŽdšzï×S½_åwRWÿýúOw°¯ºçÕoZk!ýïîà2j¼‘Ú}÷7þêɹ~ž÷枢ñ*cÅkTÔ/\±-¿ï k ºqµ9ïaKÝu“¢nŽmyýÀÖÝÿµY~¯EÎññYî%ûýÖ±¾ûåÞFŽGjÿ,’ËVaMA÷öYêÅ[‰Øz¯ Ý¢¶Ï’òú­ºÿé–ÆPsbÆ}Ï{ºCŹ—­˜ÂDÞ/»6?Ö7äG¬ýÇŸ&œŽgÍ#™¦Þ{>™+îÍßH]ý÷oè?N7º*ö(XëK é¹:¾Fè/ç-\QšS±Ž»¿òxZÎŽuÜý•ÇÄF*~™~Üöæôûç~°IA7¯&g­Øt{Ïû›nRXQjlËdžý´[«c_qïyÖÇg¹5ãÑ·âgËñ@ퟅœ´ؤ ûã³2ö^(lºIíŸÅò±a?íþø,u]~͹¿ÛV­¯Þß{OÔöYÄ‘­Âš¢îí³Ô…ÉØû“oºImŸ%åcÃ~ÚýùY&f³ý³Ìö³”Ô7Áôx¤öÏBŽm%6)èÞ?Ë8¹A!öÞ¼lºIíŸÅò±a?íþ¼ÇÎá5KrV<”ù¼\±nÈçåòº"Ÿpò 6©á5Ëö<]óÁºëα%öÓîßž—E×ÄÇÛŸ_úîa¯g6ì§ÝØåë—¾¿Ù»Ø|S±.ÁÖ‡œx ŸÏÿ¹Ëÿn&n÷#{Hdšzÿþ+ü÷ºè7RWÿýú»!^uÝ»ÓX5H ÉÿÜ¥Í{Ã;°‰Íì½ò}oŸ+}tæ½¢ï‡öøÓ¶o¶‚”&M÷¢ø^Åšéwš×ÿýþ‹f]ÅÄm˜´þ—‹æ˜7ÂUyï©y{‹SÃëÇù7Ütƒ•˜I–),OŒmyÌp–”tójqæ½û06ܳnQ¸šc§|ìØ»µh¶å;ÿ³~®óù,W<|ùY@}|ÊýYˆ5ÝÛg©÷3z¶{|è>R·Ç–|ìØ»ÿ°hÖ·θM/¼q7’s¿ñ[{.¸_Ù½ûnÅÝЯ§ÇŸÍtìx$ÓÔ{¯Š/,“~#uõß¿¡ÿ¸h–Î3În[¥ä>YýÞ‡7¾àÑ1}ïZ~6qV•n^p/J®õ‡'µXe¦©á~µ{ùwýNêê¿CÿéSêªkäÛ**!ù/¤û¡?åBÄëFtx»èÌçþ²Öõ\p/T×øÓû(¶j5uš¦†ûuËéówRWÿýúo#]uX:¥…ô¿|Ý3î¦ßÔ×Ιñáâñ‰ï½Þ ÷ ϰkÓ½}–ÚW7Ͷë&µ}qÒR`?íþç·‘4žXw|å—u¿öoUqî{³Œç‚{]ß|bÄ—Ñê×vvø/£«Æ«Q™¤Ú¿ÿŠ…ÚýþüäÅbÿø&ÒE»ÔVòßÝ»ýþiî¿¶£¯sýl÷"ûþ!'ó­Ã½·),ýúŠAS~}`¯M7¯§Ç›ÎØû ³é&Å«9¶åÇöøÐý_å­òxcãÜKXdS_»ïŸ{.Öx¢¶Ï’òë{mº·ÏÒîç4ÂÞ3Ȧ›ÔöYR~|`Ýÿµÿ ýç8?—g‚¿›+™üî@í¿‹å×öÚtü.X¹'öøÐ}<º5¶äÇöøÐýOÏ¡4Æûn`âÓ÷¼¤c:qÆ‹˜¼àÞŒý_=ˆý6#–äÉ4õÞâ­ñÞfüFêê¿Cÿq¾äU÷Jiaš§’ÿò0ãl|wÞL'§Åáмñ%3FlhgLɧ)8é/xï,¿ßÖÔáÍ´9q˜S{?O›nR¸Zc[Þvì‡Ý8 F|—ðŠÝ£âÜ‹W‰ 7ÊøW¿ù\ôðj$ÓÔ{/îÝç}—ýFêê¿Cÿqõ «bÂÂêAZHÿ窦Ö¯0Ä$ć3g0¼£Å¹¨u»`à=ú±e]þ÷Ÿ?}÷b¾ý…åÿÎÁn¦OøË*1¿õû2l<@áM´pR·Ç–¼íØ»?>KôžÇÇïrÏóuåws¿[Ú‘ß©ýw‘\ß»°¢¨{ÿ]îwK¸–…yþÑMjÿ],o;öÃî?Ì>Ôx1V*¨÷¼Å‘8÷&\g¾`à¦ú7b+–È$ÕÞ“Ë:ãÛÿ¼±õýãÌËÖýJÆ,I$ÿó´"úèÞEÍðå~ýŸûäåâølòøçh“ø„+î§Ë*MúÕºâ+¿“¼øïOìŸ>¡.:ëÏ{Q© ùïÞ41 Þ/©ûË<£2ãŒp¢˜2cgPâa Wä±D`ß18,¥£n8ÓçMfôð¶ wßÝV¸”cZÚ6Ün+H±î»E»2_S¸§*î›4гm’”Ê@âHPëfþœ8<%î~ã=ZIlæ[Ú6Ünë‡ùëò©š÷/yŒüö}éo¿ûØËß>¥4P8}–ËçifpS©=6­$öo_Ò¶áv[ÿ°‘Ô—q0öÆämAbÜ+AÎö"7ÿóè%Þ÷r)¿ù§Éü^¯ßëc’jïÉú^ÝoÀßH^ü÷'ö3¹4®XÆ}ý°Fÿr&¿7¬ñ:S ëÀ¯¿ŸpmÜó½í^µ$ðF¿ZLK–Ž 'Zy)5B…Œ;v­GjÕ˜”Êâv[5á=¬ú›ù·ŽÍüº›_7¿næî1¿þfþýœlæ×Ýüú»ùu3?p»­˜ã¨mÐ=žÊ«¬,I¶üßß U“ä`dó8à¢ûÄÅbÿ8Å颉`ÕVòßÝ +Vô#¼«òs˜…ú÷²÷n#fã~-^/$â·X±Âm)];n=Zy)âbŸZIðRŒ)©¬!n·•7èc­bÃÌ8qÒEU÷\=§"±™oéÚqëѺ›ß"°Ë»lZIlæKšn·õŸoPçÏ…‰]Êlºb-"ùä±€É}ƒ®Zæq’œ<X÷«¾žÿAââ¿?±\¡è¢Å°5«ù/W(qGaBU„ƒœ•âækxÉDhÎcH`6[ÖÒ±áDtÇ6˜QAܱk=R«Æ¤TÖ·Ûª)ž¬r4ÆÝmœ·±”•{CgLKÔöR>v¬)èÞ>EIF,±×¹©&±} ImFÿa²§¾ÁØ«¥7ýfàÞ|äÛ­Z°]=ãÿÿ0ÙÇÝ¿°kÓÍ«Åéq(hìQwݤx5Ç–Üvûa7ï[ñîרZûG¹ïí:¬í¾Mî«#±}K׎[ÖíCÄËþ0.ÖY©•Äö $¥5Âí¶~˜¿¤{çkâÈ4ÍÇ¡–ͯެØ|I׎[ÖÝü>›ß6­$vó)•yÄí¶~˜cëŸwß«þ5;Ö©þµ»§Û¼$_صéÞ>Å…WŒ ×Ø4“Ø>…¤´I¸“ÿùá/ÇÜ_ÛO|rßú|ix?ÈóÎ÷‹ë˜'I½$FìÕÿ yöþ‰ýc^Æ®ñ6ôCã¿[ïèŰ”³„u«lðÊÞŠ×mÓ:E`©qß2uZzߢN´âR2îÉo.ãæØ´’ VŒiiÙqe×ú jó Úäô)¹úâ>Èó ¯{Ÿz¯¥4N’úI×ý깟¥ßI-¸?°\ÀìoC?4þ1îÞÎøç_æAþáÆÁ§Þ×Î9ãÜdÞSdF.Tl†ðG34—P~OëH¬)(äÕâÌ0%±=ëvñæØ’Ë.b?ìŽ›àŸ£Æn-‘àѱˆt–&§ÃÞÈŠµL%ò…}Ž))­îÃÖ·9-rïg.寱âKéáÄIqœždv’àqx¼f- ×Àeœˆ™ib KÕ8FÓIk÷âÆcJJkˆÛm}›Æzg¼Íy,9L\ê[÷†¹ª÷Æ8âœÊzda×G>à04VTÎfÉÁ´dlÅŒeÝ5'4m¹ìv·ûmNkƒI“Î@¿vΈ“–(~Qbÿ(wqáÀÞÊál9R>±é4ÖT¸&®ðÄÖ8ÞJÝÕ§_9¶ä²‹Ø»_ç´8jï®Õ¹Xr®x1µS¡ºð,¶ûñy”¬¸ßu=òÉP]a§wu:–œ›aãÛ‰œaêÅ«,¹ìv·ûmN‹ô›c|$¯šSð«0Ë.(¤ÀT""Åd&DÑ¥™rÆšÊäUs"z %6â6Fê&õK–ÄØ’Ë.a?ì~ŸÛã±ÏmdhŽjLáÙ ‹}nƒwÈR,œŒ#±ÍmdhŽ"N³µnsÇ””Ö·Ùú:·ÝOn¬ÄŽP¿vnê^SÚˆï´WîóIáp¿GÖHyCz¦±¦Z†O™SPÊXÄP¤îâû[rÙ%ìn÷wÝ9öu1F “Ί½ êéÜT,÷§‡1añio÷T¶¦p&ò@ÝŒÆ_˜¸6Z+Ot1¦¤´¸[_'ºÛŠ{—wo$ªÃýÈXˆg®ü}ƒG.è=‰Å&êÌTÑ{Š»w––â°À¸KÛ“êÐ=2ÒH…ëñö´V¼t*RZ#ÜfëëD•eèÿÐ/%Æ wSoWÈKè enF&@ô8o=Rzâ©îô£§‰^ŒŽ…Žp-\UÖ ‚—=FÒá6[ßç6Tý „Žó’s†O¢ líà q㣎Ò(¦8ÿ {) Ÿôg;íÝhž­ÄÁq\b `I÷ðOŽ-¹ìv·ûmn›ôú•{tœ*·"2J&ý€á<â<ƒ‡Ë»œL÷”<‹ÀŠêžë“Óâ…“Xdɤî̢ɱ%—]Âîv¿:&ïíñ`Ô±¢8“Sã$cö )Š÷ëxÅ‹G?¢`ÅHwä)ŒÂš*ŽâLÊæ {q]IÕ$èÄÄÈ’Ú(?Œ~õJv¤2¡ùÚ3Ì ¿vås rX®’€§¦#±ÑÒSaÀ‘€V^JAÆÁd­ÍoH))­n³õÕ+yƒÃ…{™Úµ%Aö‘·‰ÁŒ—ú`e–æõȨd”rÆ¥+ªzLÒý{ ú¯GrlÉe—°»Ýï^Ɇ… ¾6ÆÂS0#ì¿Ã³X«ú'Ê$]±¶5ŽD&,˜Puãz¼Ë­µ{ºð˜’Òá6[¿óJ†7ƒÑ´_; Ãð "•¤ÆžÃø¢IÙÏx”GÎ;ÆŠ‚n_TjÌÐÆ, ­›”½’xÙHN»ŒÝí~÷J,Nç#™q…çi²\Ë<'ÕË6ZºgK)j±Gâ´Ì LoÂEÕÀj­$x)Æ´”Ö·Ùúê•1cà_áPÉZ‡÷õSRZ#ÜfëûÉÛÅÂ+3~ü¯³â¡ï5W¬È£°AEpŽ(z+‹“HŽÄŠš¾Õ’3à 3¶£lu÷¬ç±)·]Ä~Øýê>OŒi)­n³õýnrKµ¯ÑQÙ­ãÔ<œÃqO “]ˆm¢tà¤^8¹"4£ÆŠß87ZkqŒžÇ””Ö·Ùú­w² ¸±Â†“S"**<„1‡ÜÏBeÑü>M¥w²?r7VT† ›s?u&¶ÀkݤìD±wÉi—±»Ýï'o$‹RÚ.FhN×O;vV/Ä Äy×ý4‹òéXŒd9 Ð+ªø<49G¸=QªÚºIñjŽm¹ìv·û}nC”ÔÙ}ðfÆ`袦N¶â8¸p¹p*âµ,E(—q$úS/– Œ š”nR¿dIŒm¹ì"öÃî·é-fÞ^ÕÅäkc,„àÜ÷ScM«˜vÑÐŽí½¾Dé8˜ùœˆ™}iÄøÑ„c/iíNÉñ˜’Òá6[ßf´:®'xñkc`·yòÅýugi—íë•RW4ŽDîÒÌ`6†p؇YkîÒ<&¥²†¸ÝÖ·I,BAåÜa›º¢c{ÑXWøBåoÔ=Ì·X9Ñ*å=…ÄŠêŽÄHòƒ[qçZ7(^­±%—]Âîv¿Íh•1l‘d{èg#ƒÅ*£|…Í8F/˜!v–žŠºŽÄt†¥<©2Ö ‚—ÇÖ´F¸ÍÖ·­²{Öº£%Æy¸ÅÖý5ŸÒŒd –ù]|j"Wè*)E^ºq VV‰7!œÂ-DmJ+ ^Š1-¥yÂm¶¾Mg•þVNþÚpaWž x·+F:¿+Ï$å‘„p"¦]mfÀymüÚÖšno))­!n·õm:Sÿƒ›×^&9Èé‹È…ƒé(dÂî$WžéEÔDY¼ão¬¨ÜË$§a.2uŸSwõ†5Ç–\v »Ûý,="17ãÅàêìþ‚º_Äì_ଠ#½¨A=RÚâ~1ŽDn›·¦q8y¶Ö<Üö˜”Êâv[ߣ /¿ðT—39ð›u1j£_ˆ[Œ“+R0a¨Å†äÄšª™pmNáù½°,•dÝGF;ylÊm±vY»N¬¾6ÆD [”FÐÇu!p£"À2#’â8Á8y0fÎeC`¡µ6/I=¦¤]¡$Àm¶¾Ç‡ ®Dx—~6sòó'r ¸¢«@„×’b ríRŽ<ÊÄŠšžª“¿Obá÷IÝÝ'X9¶ä²KØÝî÷@HÔÙ‹o{)’ŒßPÑBÜW|‘«¢6 |Á KTIΈ1½7îqãzÌêÖÚ å1%¥5Äí¶¾B¢™À*:0£Å¡ŠÏwL?)$0|AD”¥å3ŽD¦Ý˜ÉÎ8ìê¬57}SRZ#ÜfëwÙ­¨õׯ¸Âéц…!!ÌÈ®Kî•“á9’v|ÂuG·ê*ú 7ðdI+ ^Š1-¥5Âm¶¾Ç‡ –^D]\Ko{q:c<Øþ›©t•±†)Çpœõ‘÷x€+ªúÄ&9…1ÂÇ@wyâC4¶ä²KØÝî÷ìvç_c1, ûÅ…ÄɪàßL«ŒüVRºâÛ6ŽÄô6Ç ¤G×yJ­™Vé1%¥5Âm¶¾OgðYG™KõTÌi¬ÐZ°ÝŠ62ÝŸÐ3ºÙ_3ïÝ{œÿ[ŽÐœÄŠ*ž’sàG6e¤Sw–™Î±%—]Âîv¿WWs¯6B†ª†xA=ðߪ tá©ERWâÑuÙ*{‚lœ†»z"ë'\µ‹A†g1Å)çd7gÉ/æÎ +ªºÅZr Šæ{ hŽuY ÂcK.»„Ýí~wD’Ü8ÏiŠÆ,4Dw?Ћ=…fæEF}Ç9SŠJäÆumää21A8ÂÅ´tX+ Ï|£¤ôP,9p›­ïÓ™š”uû?’3X㩌ˆ˜©˜jZ1ÅÉg°ï±äÈ‘L¬¨|=$åÀ[ãX)uW;娒Ë.aw»ßc&õœÌ™Hó¸ k$±CvT$ï¦pó\5–$﮿¬¨žÓ€9ÈIlC„u7‡væØ’Ë.aw»¿›è"ªé\vÒ%çD vt;X觉&¬·Ey¢C ¶äÑVÆŠZ¾é’ô0c™fÝ#§|-¹ìv·ûõ”-j}Êï¢Ò#æ4:KOzZ:©»löt´Þë!{y. Ñö(°¦²1BràvHìAGêåžéh=ÓËs>vûa÷û)[‹›œ]ô¾6j+àTì 7»šc¶%‚§`¨Æ`éB|á–Jâ÷§-mCÕ?ô¡%û>kÍm¡Ç””Ö·Ùú~°†¶™{° ú.ævàì8?‚E’/)Œ#±‹¡ âB­[°Ç””Ö·Ùú,ÂŒ¢Qœß•¬a»²‘nMQà[ÙJ¤ÚÁl&˳Ù8°¢JÈ™Ã2ÙÂÞ;ç¨T!ݤx5Ƕ\v »Ûý]f¶6F33³µ9êÈ’.ð-Ì¡.§|ÁÇ¡¬Ä^¯oqàgK,ö|©;÷„96å¶‹Ø»¿ËÌÜ=ªAvréŒ=Ö‰½f;±ýêÃwY8MO9 å%VTµg89ˆÆO,¢¤S÷áB9¶ä²KØÝî÷Mœªάñfbp&Ó…q„J¬Eq£ÅÌ9ËÙqÖXQ3×÷æ°ª±Ë(ëîYìÍcK.»„Ýí~ÝÄEDïÇ&N nÆî»jä&Ž ¶M\”dÍMÜD¼ƒqó)aÍKÉPâ¸M“Ög§1%¥5Âm¶¾oâ°aˆMºSÖÈXàɱ%—]Âîv¿FŒ°@\++CFÌ91Õ°´\+,YÆÊs¢` ÓYÎ4cM­ 1‡?ž±#¦ôÔ=ì2ɱ%—]Ä~Øý>Â^Ñ‘©Nbœ`ZL(CãÕº˜j–}YkÔ/*)E(œq$ÖÓÔƒ ¸RŒÈû_N`+O; &±••Ö·Ùú>£×?óׯ`§Êµn#ͱÂ3€É8ƒœGJQäÄ8ÐÊKÉh¨æ&\…gKZk†iLI}2\®O[_#FúP._U‚˜kǤ~à† ¯j…¥¯¿c"³ôRã!à.ÕÕɾÅ NÕçl5µ6ßÝSRZ#ÜfëkÄHCmÊU¹`NÕ£o?P+¿ Uv?E`øÖÕ“RD'G¢:sÁŒÂN°Äá4ÞZg.xLIip›­ï#N·á0ƒQ(‘s8 åàÆv „½¥f GbÚn‚CF›µvûÐ=¦¤´F¸ÍÖ÷ˆDý£ºJQĈ8ñR…†µ"–ªvd¬Žïk÷xä i4VTÌ4'*MµÄF¥©‘ºIñjŽ-¹ìöÃî÷éìB@ç<í=6gá (ê¡«µÐÅÅ{å! VÜ{¥z>ò†OcIÍ,œ§°sÑéCݤxµQnK‰ý°û}:;c"zýkç\˜‚y˜[.¶˜8}å *NÉ,ç4*¬©Œ•O+‚ %u“âtƱ%·]Ä~Øý>5Åu8R F5²'¥â×Ð,ähHvµt!ÑV¸õtá¥d0ªQ8Æ;Jë ©1%¥5Âm¶~71?V ÊfàM 3âûãx!Ý]„ç(æòNºæï5q$N'(›±P¬†¸oxi%áéìÓÒ¢\^à6[ß§³ô]šÎŠŠH VS`y‰Î&œ½ˆàÄc¯Ug™VJ+‰a×¶~çŽGks¸“Ç””ÖtûSÒÖ×é¬VÖ³;œ,ŸœÂ´ÝæZxX»kå9^°×Òƒœg™ÆŠ:¼a6ç€_ÏØŽ=ë&Å«9¶å´ËØÝîïæ¶ØŠ_@ã<0 pSŸh¹³ÐQDxn»×o–b™gjõ¥c Übˆ+µ®¬5¯1-¥yÂm¶¾ÎmÑaw𘧿0 ‡ï…Âøœç­¥ ÒÁ3P:xLä[à <ýÆá½`­ùÖð˜’öÇÁóaë{º¯Ÿ(óµsÐÙ0êìGÉ4ªÁ/ŠGcüH–ÏX'%VTõb,9hÿ‘ؘ}݇×c9¶ä²KØÝî÷¬kT5Å­ªðæ\ñ'2¤Q×ä@åï¯ Qp`¨¦šò‹)6Šʣ·äÀÇ`ì“1ë>òôÍc[.»„Ýí~¯(Â)bù,Ô $Ø¡†ýY'jp3¶\&„Ó’¤KE$€#±ìF7c²¬®§Ás¥Ö‘ p‡§PH›b,Ûl}ÏP»|Ê®þÕÉY¬ëz¸/RT¾ØÓ¾ÚV¹ ”¼q‰(¬¨ìbø†‹›:uçMŸcSn»ˆý°ûýT ¡ËÒ ì¦:C™éhìŒd~ÜAÔ–²Ÿp$Ò ifaã°ñ²ÖtCzLI«k‹ÎO[¿ÍÇ®8z>Ÿ|l>½ŸÈH‹.LÎŽc%¦Z‰â Xuü6äH¸2”óZ2àéð‚£_zIðR +© "n7÷½äñ¥~­Î-ƒ9‚gª‹ëÇž[ØQõÜRDNÄ“[H†r‰Sö µn¹…SRZ#Ünëw Ø•TšÒ’³bnŠt胵û=ÙÒ*ȨY­u”ÜO9›±+*#Ž“3PߨŽÒøÖÝ=·åØ’Ë.aw»ß‹Š¦¥?$9xó¢ÔÇ@Î ò§ŽÂHÁŠÅlSŽWrbE¥W$9'NlCAhënY0ÚcK.»„Ýí~a™ª6Ü£&9¨ãTlžï_%ŽÊ¼"Å)¨Ò÷)y¥ïؤÆÓ¤F”bNlCî¥u7ÇìæØà¤]­v»¿›ÞØæX9½Œ˜jö*mužÞÎ+¥(•dÜR·cåô¶°*;ŽÄ¡á‚µ6Ç¢{LIip›­ßMo“ëpŸÔ›ƒBÑ1Å ­CLA(quøô!¦(,ú$o¬[-¬¨3ÏëÍA¨±"@­ûxÊkilÉm±v¿No áµko£ÀGdß"&Wu@ž]T )ÅÜl‰ò¤X“wŠqð¦XkëzLJe q»­ïÓ<¾gVa2}}£SLAc øM" }‰øå™pXÊÓ‰ÈúKbÜV©NÅnE­qÊA­ÓRXcÜfëw©Ø±Y:œehÞAè%ùX¢v” Á gf–"Æ8‡³ Ř¼G‰›(}.­$~É€ó•Ö·Ùú4‚ºÁqŠ3ô^4§E$lgœ<ÀaW3å ‘£<òJ'±¦jnƒÌA|HbÌ‹Ö}ä¼é±)·]Ä~Øýê‰ì‡k]¨JnrvõQ‹1K.øqô7ÓéÃÂ)G+Ċꮕ›l)K?­u?~\-¹ìv·ûÕ9«eÕû*9Ú96'øbWÙÙiz‰Xæp‚/äÓ ¾ÀN'øû-§|±ëNðÅ>Sº³tdŽûP%ø»Ûýê‰d7ÛÊm ºÝ#“=âÓá´˜Xƒ€Kƒiæ–^HÉŽDwñ3ÐòÐ8 ³Öê»ÂcJJk„Ûl}÷Db†ßà'’Œé(ÜpéÐG}â5p>.ìëKQ2Å8#K ˆÑð¼×°¿Ö–u4¦¤´F¸ÍÖwOä…r»¹5;Ê ®Ã¥ÀJøNÇîo鉺’Ȩ8‰2ÛLkÍ]¨Ç¤TÖ·Ûú|þ­=hrÏV*aÅ#sòœ+¾¿šy­q †ÓvÉQÚ8±¢2µ59(ÀœXä8¥î,ÝœcSn»ˆý°ûÝÙTmQ«3z¬&ÂMˆè¨$q X€„ÎÚLéR1HàüÔ\vZ’QðÉ…C¯B<¦¤´F¸ÍÖwO$\ áÙuH…9'*Ø2ù"¨X—ÅÒ§?˜œ")¿pÆk¬¨L˜MÊ"'e‘S÷ðÇ˱%—]ÂîvW ²ð„Øå.ÍAÅ‹ ®‡ÍQȘýEqoç@Êá N¬¨‘å.Í鬹%lcÍ-énYèØcK.»„Ýíþnßֆƿ6ÆbùÅCÙyQzô(ñ)HxÖΔ"Ç8Óž830«×á(’Öî³5 †­îÃÖ÷­Úúl›m†:¨OÛìÙì{Ûì(Θm³£†c¶Í6±Å÷—§m¶qê­v}¶Íö˜’®§mö‡­ßÕ6¾;§ds3|^† /«%ßiE씥2ŽDõVÕ ”í7U­õÈúGóp{Ò«·Ûú^+Ë-h—3&ƒmdO÷¤¹XZ˜Y»®Ezº'ÍŲÄLÔÎ j—3vOš¸9…Ch¾µfô¿Ç”Ô=i€Ûl}é/<¼BZÜ×ÎAúzx ÕìCÅ9MqÛżwËZ–+ª:ß>9…NGaÑ95u¾gslÉeW±ÃrmºßÜ8ã®Çé“µä Ø2\•EDzø ¼‹IqcUXªWòÊf•ÄšÚ¶aâ°·°œÖ}äzÔcKn»ˆý°û}߆Úôñ“»ÃhSû]4;ëqìÀ~"Q—¸ÜW¡š²¥(ºl‰æ.3jø‚Œ+x…KkÉŠŒSÒ¦Þ¿e|Úú>uì@zË¢ætN"ç@}pA–(N9 çH–c³ŸXQí) )N¥ÓRØB§¥t—, é±%—]ÂîvwÊV¶J²QônKÆ¥q Æb©ó9a«5¥ì|-‰Ü…šm¸qÈ¥·Öšõ¹5¦¤´F¸ÍÖ÷t5TßÓÕ–*î`ZZªÅƒ ëz‚F0ñT¬$­X2'â™ÎÄà´$œÒ®',ä— ¸FJiM¦¹ëh:<Ïìùê7‡õ¤Y ?¨x½G>È2…ïµ°]åì¨g¬¨ž€9¬*m, N[÷SÚcK.»„Ýí~ŸÛ1KÖÙ£rŽâ‚¼röš¨µVŸ¹ g´–žqßG"K6ˆ1.ÎQÀ‹³´Žë™Û0¦¥°Æ¸ÍÖwÏãB¡Í<È0š±OB7ÃaØ»»G±”!V‰È# 3XMQ¸Æ ÂÔš¯))­!n·õ»S5•f°ëÑœNâ¤î(*90ŽDÊT¤[Þ>n¬¨ö8 Å©ô$ [èd”îòL~›rÛEì‡ÝïÓ;JFÈ©s×Äé(]¬’±Ðn˜P"S‰”'ŸðVYΘcE5Ÿæ'§†(±yoÖ]2/ÎcK.»„Ýíþ®àñ*H›óNÆlœ£‹Ìˆl4ñŒ¢Ä÷jJ”·S÷ÂÉò§ÆšjÞÏ$§"ÃÎXìŸSwÉì<-¹ì"öÃîïæ¶–j»iÆyL2ØÖ¹Ü!‘Ñ#=¥—Ê5®™D¶Ý4‘ÊÆÁÉh­Íw…Ç””Ö·Ùú>·Ÿ1fhnÛ¦3LIM²ï IÆ@ŽZŸHÛÜVŸHã8{Ië6·m“­ÑÜvþÅ@Fº3sžÌdâ‘"=z9ÌziŠÓwPGA}GKр˸¡Œ(Wã°Çq[ QkÆ0yLIip›­ïq"Γ/gQÇþb'Ftÿæ>¸¬ûÕÕÒ¡ºÀ Uìnv=”Rx„kX¼Kk³?ÓcJZ”ÂÜfëwq"ì‘“‰Êdðý:X¹ù¨ìZ"¼•:FJ«B/pF"[X™.T DhI븞ƒ4Vr¦TÖ>€K[¿ë#›²`¢&ÌðÈŒ”ßï¹Ùkªg³ksÎ@­8x±îꘋ[rÙEì‡Ýï Ø¨÷wOgl2[ Ó÷¦ýÂq]4¤žC,èH’t W8ÇÓŒáN$\Hë™ùÓRXcÜfëw…³*Þ„£eá¬ÚÔ§$ŠX± `g‰«rŠøõ gÑáéRAAà–Þ¯j*gú‡>%ÖÚíñ˜’Òá6[_s®ãt8aÏL 5çb?ÎÞ¢…*“逢ð½Æúf>ò¿”±¢²CrЄÀ؉dKëž™Œé±%·]Ä~Øý]öÀW_ŸÂYƒ…)Xܱ£~`U‰«*_pkª¤)R˜Œë*‡\ŸÂYÞȈ˜ nÀ)­$x)Æ´”Ö·Ùú]á¬pÙvg>™1>QšêÊF_AÖ쓤µ¸™¶¹¼Æ‘èÎy2¿šqøÑ¬µº ‚ǔԞèÕ?m}¯‰d°u9³UŒšÑº:ZÔÀ›'Šë“À½r"#ÍRäªÇüï+«ŠÁ¾iÄ-hJ+ ^:T“·ižp›­o“ظPïÇAt'gñ6„0Ò±¥ç),T;šrŒžXQÓï™ä îú…í,¾"ÝÙ¿2Ç–\v »Ûý¾'Ã[8¢Ã.Gõ‹ƒ§(hÕég‰Æ(Š¥'Å}#5,GCbE>82ç`ò±°÷æš©›¯æØ–Ó.cw»ß÷d•L¯Œ3&#ê tE׳‚0â¹:$¸{B¡ KQÂÄ8ÔúË;=žëÆ-TÒ’V>”ë+¥4O¸ÍÖ÷=Чï{22Òߨr×UΧ±šwOcß±õ²ù™Â´ùƒ¡½Õõ´O³ÖcË›¬n³õ=ÒQUÎÜ>›sÁ5[›; @aW1~R<ìbÍËO7–VÔ™›hsV|ƶ_„u“âÕÛrÙ%ìn÷»¿‘—3yÍÀÊÎ@xÑ-mÉ÷çü‰õ‡¥—€»rŸý>/ä‰CÙfky@¬1%ußåu|Úú¿Qs{képÔüÞÞˆ•ÀÅZNÌ$eŸ#V”Ïâu¢õ‹×ÍJqP0#±ÈÊKÝãiV¦±%—]Ä~Øý]ƒµÆp´ÓŸPt‰RV‘Ýß+Ž"xÖ#ŠV°låxq'VÔa7—9ºqÇSîèÑMŠWslËi—±»Ýï»5>  ‹¿vNaTýÉZtx¢c“Ù#cÜbvœEzŒ5•í‘ÍéȤ36Vý3u“ò¦ µê(—]Â~ØýmHö¾QIñä €-j1Ò¹{ÃyñÏÈ­ãBã*ËzZkª¹èDrp X¤a§îââ39¶ä²‹Ø»_ãDâ©gÍdÕG–ÑÓŒÁ1Ä…ƒ,¸X(URÖIŽÄðZÙ uÇ.áÒú4ט”Êâv[ß'ºCÇûjmh'#¼£ ¤5‰«J„7·Kƒ¥–vÄ×lÐ܇­»Üû•8æóJks)é¡-^½>mýî`­ÀÕׯ·a™3ŸŒP1˜ÔÛIT§Š|ωµÒzÒAYÐRtRNÄ“ *Ó9‰›Ìô¤Öù$‚rLIe q»­ïgiMÕtÜ]Œ“]_Txi£>ÔÁÐ –ç”téëŽÄz’CÈ@Ùvãuj­#×ÙSÒ¦Ú>Àm¶¾7Tƒ¯V½tB†:hbp?§Qqæ@º ‰_Þ®K rý„±œOfÆÄé‹pƒé—¾—Óª9¦¤´†¸ÝÖïö`1Ã3}:æ 0> ;ôD>DA­xQÞ‡©ªæb8c¸•…Å“³Ð#ì@¹oëYXÜc[.»„ÝíþvCÆ®.ãÙ±³Kãæ¨¸ȉÂ%$¼!;gJqd‰ùd`“ÁR  4‘–Ö‘=¦5&¥²†¸ÝÖ÷À}8w‚Ž¿6c '–šK1‰’'Á]Bí-íê°Öj5Ÿ1ØáY¸#~4k=| è1%¥5Âm¶¾Gƒ`ÿp¢|É×øèÈfò ÃDÆ("­1®”"åÊ8ÔÊKÉ@ áNz°©•/Ř–Ò<á6[ß]Š:?³h¸§ÔY:.¶ ÷ÚûÌ¢5±s¸7–¢.¸q$²hˆ”3÷”µfÑ))­n³õÛòûL›ŸOõ}¦Î7Àï˜Ý‘¶‡ÐÖ3½|(Ÿ?RzÅ^×8ÔÊKÉ`â[;SëÊü5i)Ín³õ5֧࣠žNžN~ÿ NVË¿D›pÞÖ¬¯3ÛÉjØ’ŸÈà3VT–ØI"q‹HÜÔݽêʱ%—]Âîv¿G,ê˶id¨ýÙ©"hŒ†Û{Åýª¸_PI÷Il÷ÉPå|âÔZ·¶iSRZ£¶i›­¯Ñ÷[Fû_z'§¡åÂýâ‰Y¤ttT\ûßîXï¹àµL9 $'VTõ)Mr Ú*‹ÔžÔ}ØõšcK.»„Ýí~þ(±àbžùׯ@xz„fœðwÕÔo"§›ÃRÜEÆ‘˜›2ƒU…댡ÖþÄ”pLIip›­ïÑ «å Ï7aöš1‘A«láùÒ+tI±È1ŽD†ç›AK…kì´F­žï1%mÚgÔãÓÖï¢?.ÞŠgLö ‹U z¤D¨Æ¹L9 Æ’Ÿ.r ìéb’Ó‘§‹MFݢƬ›”ã@blËi—±»Ýï¡ 8Ž:KJëOžªFý'ÄÍ·åàŽc}OŽó×ÆÈ¨«mÔñíÁNâ–ðcú*>úïyéõt)ÏæËZ·é‹cæäötÙm}ö@QÈ…#¬¯lšøŽ ’+*ã9Âá~øX%~pÉKZU‚¶Í$Î\~‰±ØA‘¥ˆH•VŽ!)ŽWµ5Äí¶~×=†=ÌN×l$}ËÄiØš¶àiØòô…l"KÙgU8Ó)Yf Dƒq¨Ð`­Ý ()iQW5à6[_§/ö083çÑ ä.Ö’§Aá†Á¢ç<ŸÉÕ’FÆaœˆÌy4c°« qÈj´ÖÌyô˜’Òâv[ß'-œ­ÍéàftT叨=f JþBÙm¿4¿Õ#¥ì#ÜP”H9Üÿ¯Ä©[µÇ9zLI‹j9·Ùú^¦qòP}˜œÆrÞ‹kÜŽ€ºr²äjw½ô&)¯8ÿ3ÖT:[“SXTG؃á"Ò}<Ñ$[rÙ%ìn÷ëÁ[eÆ _~rЧk²¿Pe©‡ÉÞC¢àÄeSÏ”#4±¢ÎL„6g±±ÑËòHݤx5Ƕ\v »Ûý~І ù…n'_cÅ®n6lÐ/adžðÁS.¸$íð'bºr™ ÑŽ'8ÒúðhLIip›­¯gìÞQðrhg=qpVâ>"Á#®ª¤RH’1…#qøó‹ €—qqrsY+ ^Š1%¥5Âí¶¾œM4¸ß5 í3ca¨‰V÷›o64•¾†l-¥UÎÖHbzWefpã0ƒ[kw<‹Ç¤TÖ·Ûú~V6PèåxÎÊÈ` ZCk—Yy¶pÆWŸ³²õd$½x”L‰ã9+ƒ=Z…cVi%ÁKÝlRXcÜfëw™Ò÷”BûÌhè~ZP~•Ý â«<Õ©•¥8—3ŽDf/™yÌ8ÌcÖš©KSRZ#ÜfëëYÙ…ÂDópé3xÚ5(:6&:G%7 O,Å¿qCéïóéh=©?šqƒG`Ô:ž2Ži)¬1n³õýx aìá³[SÇcâ w0Q(üvt!D^°XœÚr–ÿ5VTz®’ƒ:‰…?)u§ç*Ç–\v »Ûý¼ˆmZcQ毃&‚#rðÀ½á„‘½uä)s„Þ‹”ãH/±¢z&d™ƒÛ-±¸ÅRwÍœ,-¹ìv·û»BësášQpÎpÀO{V¦?õ¯ðùÄQµî m䊸æ†~n|ÖÜF¯wÚÙ­•/ŘdÈâ>lý®'Lû8C…†{Ì#.4Œø íxìprìd—³šÇc"žã11T0˜8•¦Ö­Ð0Ç””Ö·Ùú¼ˆ2MëÉ#ãŒ8 ñGªraŽÒõd28…¡ô^»×Ó8O±3,5n¬uxgã1%¥5Äí¶~—=Ø£sdrôÀN R(É=pø§Zãá3¯±RÊ`áH¬<›…C'NkÍfŸSRZ#ÜfëwÉÑ[€óÊÜèŠíJa(W Ý[šd¡e¤Ñ„Ñ\ßŒŠ¯_¸[}k-¢ö˜’Òâv[ßã÷ìç¯SÙLùÐÍÉ”¥ù"†ùÐ’+ZØ=;šW?Ò=± ¾_ë&åÃ4äCKþd@÷ßì~/ƈyèŠòëaà½2ˆè®:v€¸ÜPª×|vYó¡Wâ‡o­Ã?›Ç”´:z}ÚúmÀëK¸³—8å`w.¤Å=ŽÎ]Èså ˆv|¢Kš±¢Žçk0çÄó#ì+­ûx¾ mùrýÓÑ~³ûÛÞeË}Ìi» vlŒ‘öÄÝZd€’â^êÂBòÈè+‰5UsçmNa/iañ¥î#7ß[rÙ%ìn÷{ôGÅt[N/´’ƒ  hss¹¸¹bŽ)n¾6_–O¬â•gôÉA”zbgܧ©{Úk•cK.»„Ýí~ŸèXÜ=²ê]‰QœÎܦJðq¬Þ1 Õ˧%¬{-gB±¦/}Í™¨åil¤Ö¶ÔMê—æ\”Á—œv»Ûý>ëÑ•]³µov„ïnïF·"Ž|žµ²ûkRZpv$œˆš­}Å8è5$î C‘ZÇßÈ1% n³õ=d< Z¾6†‚Ñ”ê Wlµ>6!’”ŽîòŠí3˜‘ %§pEjÝ‚9f†:>íbv[ß':×­w0cuUûhnR/õªŠ×CCÿkž¶Ž‘R쪅qd0#É{ÂMd¦J+ OoQŽžÒê*úÛm}93ãø1ðt£A r“Ϙ½PE—g¡¢6,VG^5‰ž.<1ðN0/k­éÂÓ˜”Êâv[_綨†rXEÏ”è^Ø#,.Ú{!Þ|ô3ËúB¥6‡Â‘Èð"3Ëb\ejÍŽ‡SRZ#ÜfëwÍ]&¸+{»°FqÜFq33Û¯¡ûʬ"89!µ×Òû^8Ù¸Í ô$3 €ÖÚóöÓ˜’Òá6[¿‹þ8Ø}o•Œþg¹âblD'Öjáâ‹4^RŽþ8ú#¿P%ËXQ¼ŸÅ’›q&ÐÁû9¶ä²KØÝîWgcu…ʪäa1ðÖê( $+‹£´K·–®ŒYYҥđÈcR3&vÂáèÒZóŒÔcJJk„Ûl}u6FSEd{©W™ð±vq¾ð>ޝï9á’‰fFQw餃&Úq¶, _ò}óÕöȯxg%”tójq𢶰(œt‹âÕ;å²TØÝî÷üh´‰˜‡âÍ@«’Ê–lbRãUDà;¾_gƒ")üÆ‘8|ŸìPþ¸è.2¬•/Ř’Òáv[ßË{à^§“Í@$F±g®zÔ*ª¸sHЈËR¦8çTŒâZN€ˆò&Ä-d^JëÊäNi)­n³õÛüh4‹ßó£ÑJ>jLÅ6ö@Ø‚Læpí®|ƒñÔÑRNGb|äG³2æ™8;qÛ ‡'ËZ{:5¦¤îº Üfëw‡c1ÙÌõҒSÐXepjº§ÛŬhþKʇcí|ä(ìžXQ‡ë ˜Ã¶çƲï¹u“ò|WÛ#×´(ìn÷{µE– <.Wú0§¬ܱØ,…-㇛§¹Ô`C [Ê‘ì–XRÔÍ«Å9ÙDžØc±0u“âÕÛrY*ìn÷w•ƒO´€P/3˜ê {˜£zÆ’€,Á*i,"ªq"šŸP3ª{©žlc4Sk{{ÌâFªg1n·õ=Žq‹×øÚŠcÄÁqŒSÎø¬¶¸°Ô“ôÜŠ ‹Øª-ž[Ñ_á©H­[#Ç”t‹ù°õݵÈàc8Ë19„'kê~8Q°n÷ËÉJ„–³H¡±¢žyæ dXbQ¿.u?5ò<¶ä²KØÝî÷ Æ¥sÒé F2ø­5TàœüÖzFÌ,ÜT;JHÚ‹âÂ'" 7‰1X1—8†óKëì¯1-…5Âí¶¾5boþ¤œ™Ô±hUÁ±Ñç² UÊókJœ'‰L9CŽGâ˜T&­OʙƴÖ·Ùú6UsÕæÉéÈ÷Uè×½tz…ÿšM8àŠ–<|c3±¦š}$É©Œ¼¶°9§t—|*=¶ä²‹Ø»ßýŒê‹»¯ƒ0;Ô;,Ø®B/)úÕòVrõ¼VTsUrpîŸXEüHwq.}Ž-¹ìv·ûÝψøÄFÚž™ƒ   ¢4ðBPP¸#ª’”=‡¥§|¡>“±¦¦ë}&g„Ÿ-±=ŸÔÝýˆæØ’Ë.aw»¿«ÒÔõ©b'1kÈI2´×c[N»ŒÝíþÎó¸>ömb(lyôhlO×{WîÛ ]ŸTµù±o#SÇVîÛ¤u w䘒Òá6[ß÷mû,,»ø“ƒÅy”Ÿ*\8 >Šqˆ¢w°bÅn9Šƒ$VÔÊí‹9Å(ŒE>ê>S̱)·]Ä~Øý¾‰C}ôY³SŠRî,¥>q’{//v¿×îáBG±/õ±4wOPWA¡±pøW£“úõ«ó‘sEa¬¨ô™ÓhalÃÍgݤ~É’ÛrÚeìn÷{uå`Ø®*ÊæTœÀsUØzr“% Vpf9·gÆš‚n^-‚-…–‡U“ÀµÚ¿I*£ü0ú½Ú0ÂîÉÉ…ĘH²êl̲PŠa` N" @¡à#¥ˆfNÄÈB b°´«põ ©µe¡I©¬Q¡ÙÍÖ÷:!‹)[¡qêxoâÐ9J ßOJ¬Iá›ã¦–òp””ÄšzÊ…˜ƒÚ›‰ÅmêÎsà[rÙEì‡Ý¯EC*j•Žé\;3KÀ Î4ñ†× |Á­Äle)'"Ëü›1X˜8´Öî ÛcR*kˆÛm}›ØæÅ(¶#“í’ƒHà ÐG²1UõÀÒõÈâÀõÈ+{T›T¦Ü%G‹‰=˜>+ÝIœcÌa•]À~Úý^‡¸©‡L÷llgƒÚoQ2¸1tª±¼pŸ¦hÄtÈW¾Â²òøåã@3àwòB©8)¾²Q¦Æµ”6 ·ü]1âèTЊk–%‡‚Xï8jL•†‚Áp.4oµ¢‚‡jP–Fµ*a‡kWwöç@v¿°•†¤»fì¡Ç¶\v »ÛýýÈäÁ3§sŸ|Ùƒþ,L'E7"brR^éè!ÖTóir g1ÜÂ-f3Sëzr9¦¥°Æ¸ÍÖw¯$r½PöHdsNüaöWe«Œz SS=‡ˆpNyç+XXQ+ÝÈæ` Kì ÿSº‡ÃèslÉe—°»Ýßµ4ÓrAÁüÉi±n‹XèS u qÒHsë¶"ª]ç#_ŒveÜ ^öæD { G¤uÙCÒcK.»„Ýíþ¶(1cm3BêL¡@0îѵ§ú!{dz*Cú`â6GâÈ2¿dDzI1Ža$ÒJ‚—bLIip»­ïŽÈŠÍVt6r»iqNTºŒÊÁ•§Êlþ|¦è,ì’.ùŒuxbE-wLÎDž±#î¿Ô=Ò1ë±%—]Âîv¿ pf !C cs5<‰ÞHâf)ê¨Gb !C Ä)D„Z·’±¹)ep›­ïŽÈS?ÒIF…+± dÕÙèeäÙ'$ÊYZU[.Håñ@V÷FÆEbä²VŽ5©ÝRYCÜnë»ïUªÇé_3.×e¼þˆß˜K„C= érw3‰3C2ÄXz$\äOk%ÁK1¦¥´F¸ÍÖwß#:åVÆò~í„û†¿/rD„Ü«6°(z £h9Ë kªgßesˆŸX¸Rwõ–cK.»„Ýí~ AKÏðÉ:€äP§žÊNÑÌLÒÇ ô.¢ë¨¥EÒ„#Qœ¡`ª¸7ÐSOZIØgÉþ?Îw]Ÿ¶¾;";Ê•ôš%èÍiq3DÇd1«Î*÷8Ï}‚äZI¤œeZŒ•UI“ƒ|bQ44ugaÒ[rÙ%ìn÷w!ñZ]—ƒŒÍ9Qu*;‹*FÖöš.ªx9»UÀSŽ&|‰%EݼZœ3^ŒÆ.–³”nR¼šc[.K…Ýí~èGU ècåìj2 ý( Uß&Û½4¸…¢Jã‘ÒŽŒ^áHéË'#ºc5ã¢Ðß°V¿dÀ5RÊ¢EÂm¶¾Ÿ«MUOÏs52t>†ãõ§Xãq|œ«aÍké…úŒÂ‘ØÎÕÈÐùq:9£Öí\cf¡Çã9Ûl}èGñ›è—¦ÐA1.N<§¾›(Ð^Ù`'Dbt­–6ÔãNÄéÌ%3Þ6Äݯ¹Z­•g>Œi)­!n·õ}:ãw<­bȘlù2T[Í`¦êêg«˜¥íZgã±wê7ÌV1dt¶|YÚ¡ÌTÕýl3ô{@êÝ9p›­ßÅCFtËð>ÚŒÉøG´€š‹u Yq=UY‘Ò‰máDŒ,ç#FgÕC⩵eÕCÙöÖ·Ùú]¡}x˜p íFÙv.6:³ÅÜŽMRžšÐâXr.k•ÏKràÆ7¶2ØVºIñjŽmy±¯lÖßì~èG ãjqýׯÀ ÑzS͈=ï]©ŽLï8˜´t"‡B¸©„ŠëÉšf¯ÅóJ‚?¬5kRxLIip›­ßÕAØ3š|íœîú ˆ‘®9ï¤~iÿ'•’Ÿ(In¬©–òæT×¶¸>t—½>Æ.®»ªëƒÈºôEE%sn¿EÔù¸º¥Çv+냰çåVäÄ+4ª¡ —õAØbd«Âþ•ªr•Äm¶¾Ï`°bŸÁšZ~`&jŠèVìÇÑ?f0¾Ò$]:QŽÄ6ƒ‘‘3Qyæ(jÝf0Ž™q#ǵÐ:®ÿ¡ ñ çzZÅq"ö¼"`q±©*—ÇyÔ•R„OG"Í@àƒq8ݳÖ<@ô˜’Òá6[ßk_. ìbÄd0ûºTT8²šÙ"ˆ7¹%Ü›–VõqY+‰<<4ƒ&„«Ø–IkÍ·¡ÆÃÖ÷aë·3Æœ<(Æt{±X÷­,ƒµDx‹ó9J'ŒNÄÈ´A1P™Ü¸†¤@im™3¨1%¥5Âm¶¾Ï`'¿ã‹üÚüÁ;JxNÒD­ªÖEpxÔ°ôÿßÛÛí̲$×a÷ç)ö% XPå•ßP ›sG„¼=$ó#iŽûñݱ~¢²7Ï©>3äŒaDôÊŒÝ_uefdÄŠªå.Ä W“Ú%xáiE ,K—pF^µKÎoãp×çQ›Ëj<§¬ôF¸Í×çå ”¹U±_›…ϱð SÅj¸F™×ÖŠø*q_ÏH1Pn FZ£Rð"9¦­ôF¸Ý×O쌻G’7^_²zŒ­‘°xªÉ©Ÿ¬`V©¶¶$NB²Õ[ÑY±v‰áêè9jOêÑî‚°Òá6_ŸCŠ >žÍ^VtÖño1\†\§Ìà~="¯çØVÄøŒ£Ð2}[ŠŠ¢já jª5jqv ç”•Þ·ùúœª¿øŠîíT˜6¶a¨< Ò£Zâ’ƒ¬.Û²ºŒµ4ýúNÍ€ÇÆ¢JŽÝ3Bé¹e—_ľùý|CÆžåW©ˆüÞ†­¸“C³ÖÆ| •]aÛå¾X°^j„™-a­8QbHÜD¤M£Rð-Z?ÒJ÷„Û|ý”_²óë±eç7qShhËίm;¡•²eç—òCv~)[v~mÛ)«¼q4jÎÌίǖ__u»ÜjŒ$i„f¡Þ¶©º[¼¶e‰áAÖòÙÞoo¬¤ûnÈlüÛQ‹ë±{Ö궬ʜÇí±o~º!c‡—6ò†¬°]HEï/Hc…3óè›CŠlN#+8 £pºfΊŜÿ©ƒ\»<êHÞÍi+½nóõÓløøóµ)@p„"gdã`9;Õì×çÁXXš­qûWŒ“pŸ²¤¨\–ˆ+’G-™¯9e¥7Âm¾~ÊÎç÷"²5+‰®—*ãOò‚EךC“7VlÈz])ÌL¹—‚Ýq„cwšÙtžSÖ%†é³¿ûú¼‚ E\Í;¨Ô mŠ˜™÷¤|ûˆ\Râ ¥iGm€±–2—(5ì÷bl!ï®Æ.ÞJåÜ´Û¯ê\þÛïO—bxóÊK±NÿÅK±¦ž(¼ë‡%‡ýúyÛqóXIùÎKÍÁÛ0b;+Á56%_еvÛå—°»ßÏËê×*wm_»›Xm^]å~/¢è“A‰'(TËIR0›Òab(k¸%4–Û@M‰ ç¶~ûî÷óé ‡p2“~m ¤¡-4Þ`ÁFp >0’¾)ˆïûik)b'œ„$@µ¢«@¸ zZýƒöœ²Òâv_?q^íb;ç4ÓœW‘ÛT–9¯ÎfÉ÷YQÚa;ˆr+iìœW‹¬s⼺˜Î/Ϋ³Yâ§5w3çÕyÞØÝïO•g'ÚfžîK «bIÒVµàÊk¸ ]ÞæÔ–‰«Yà¨î¦iš[vùEì›ßŸróÛ{4*27¿ÞmÐêM´ÿý'ææ'Ù~å®ëÎͯomФÈÜü¤Ó÷¨o¹ùõnƒvh¡Sn~û5UÕ‘4?±«×å…ñivS †Y–ôGwÆ•d‘ˆ}ÚʆmÂIÈË +:È„CñŒGÍÚÏ)+½nóõ97ñH6,ùÚgœ¿j_Z@‚C·c}¥€ï´_j$SÈ[|Nã$,ç©X1ÁÖ,܈ߚGæÙóœ²Òá6_?1†¼Æ¼p×óµ)ÈLÕWT˜1u°=L ˜ží?l]±ã1ŽÂá‹y)NÜ ¢9*~sÚ oŒÛ|}ÎÍÇ!áõ`—¡Ô|*ù®Q0³:é®ÿ[Ù 1KM+b€ÆQ¨®Ž·¢e›¸ƒÜõð­ç”µªé$p›¯ÏéøHèYÕY§Vˆ}ièßš&¬¿ðôH"²•ÉWÉát,ʞʨë3q$z8ÙÔsÊJoŠ)ÖÓ×ÇÓY¤Ì)KMÚFkÄvÐ ÏDP3žìH‰)¿(ÛÑe)±’j’7ZCV cq•c™%ã¹e—_Âî~?ŸÎ° Ò¢äp”f’Œ‚ô¨ñô5—%ž·°[L{m‘°)ì-k Ó¥Œe&•Çn7™£ænds”_tŽ»ßÏ‘GlÈbW«ªG)@ÔÉ…“q熴ÃuHÀ9ªb(kÅöP8 ÅQp+ÔÔŒ›Ç l€•rÜ<ÊJoˆÛ}ýÄ o¾ÓÌóV€À/ò-&+eÓè×°Äó(OÓ:TC)œ™(Åbz€¨þ4.~ÓÊ*‡ˆÛÝ}¾1CGž!¾6ŠÖâŽj3á*‹\ 9¶õß¾pŽ¤Ï¦"N&ݸ8ŒLJÅœ¶ý)Û|}nSõ¾ó™` áB6@D}¢›+‰®Ñ°¥§•̘ÂQÈ‚&+¾ÂU´4*„ïràºÒJo„Û|}¾1sx±é/%ÅÉÔŒý]Ìv´¢àk0ƒ+/ÉÈúN[É2Y{â[LsÔaÊyÏ9Ü€š!ÆÀí¾>ÇA 5­ÍñFi®8ª6fûD ¬‘wýˆ³ñ-š–Û¾°Ù6VÒé65‹„ÄÆA­æØ”òší¸íòKØÝïO5e'ê´†ÃTàž+RjÊ¢jà¥[—¯8çJ+âIÆQ8´“b¡?¬p —c•?Š9e¥7Âí¾~ª)»ð;½†UWä]˺tnRÙ×°Äuf°}žìÓ4ÀBâо ;Q{4ÑD2Ѝ)ð£˜×Vú(Üæð§ÔE°Ô¤ÔŠiâ{^› ®î)p™™J)€•‰Â-%5vß…QÑÙ`zêpD4j3ՙ甕Þ·ùú)ùþµÏ\Gv¸”gS$£›Ùd¤;5·IŒk­fk¤×ã$™$MÅdQqót¿²2%8Xyœi…7Âí¾~"#®¸•÷K^Š…›"&BÆ‘œ×_uH`ÜÉ—¶"-Ó8 3_òR Ã…C¦³G홡9e:œëÝ×O ú¼Š29—$ÙŠîƒ'Î"ƒ…`Sט‚#­¬U—c“p“sIA’-áH¿¥Qor.ÍI«¼!n÷õÓÊ5ví¹r1eDÉ‚l¶1ØHÑh¼±@ðbß1¦¨(9‘ #n‹ Ådà•¸Á($GwŒòT¿øëJoˆÛ}ý”ëÏëÌã´kÄUØÔc™8Ú·Rr¾G”ØÞÙKdº•§ú;-šÎDa›ÛmŽeÉYj(»üêN¹ý~æ±ÝPa™¯]ƒŒ§à‹ªd#Žj™ŠG\Òw|zº ìHFN¬¤ÓÏYjûì{ GÊcSâ§9·íòKØÝïg«‚;µU½8§ÝWfMCÜ_ŽÈÆi&ÐÙxFíßyÛ±J¬¤¼WKM‰³Zb™±å±ó^-ç–]~ »ûý‰Êjí¥ÑV *´RÓñ Z{iô"'‰­U­'!£‰VàA4ñBšÑDÏI«¼!n÷õ‘Ê*Ê´N´ßÑ_M 0åÎÈš™"Š¿IÃ5 øZãEVl]H,NÂÊ¿—8Z7ð×Ш#ÿXšSÖ¥vÛ}ýÈ^Õ”Çöµ)N+@ŒGuðдM­¨ 5Ž#E™kn¤þ—VàÍgRx<êpäËsÊJoˆÛ}}ZÎV°0ßQýÚ؇¯ˆ!Ù;B³•0}pE·´žðB8 Y‰`XŒÃæÝ£f%‚甕Þ·ùúHXõú3æX7±ßYS™à5‘ìm0^ÀÉ;JxXN,>iCb%²RsàM'ìy1?ŒcŸ™ï¹m—_Âî~?WaÏY EìÖ4òx’y€¨i ¹/0Á¤Œ1‰•T3’šBPaÔüyìÃ9#974é°ï~?®me°½ùpóðÔLÄ4¢šH×ëÔÀžT¼(`ŠKû•´Ìí–†™¼SƒºæÄ6Z4vK¦=Ï-»üv÷ûqmk ¬ž`RÿÚ8â…ç!¶'j(o¦ÚŒ¯ÓÖG.ã(œ¾P³‚}‡ˆ#C»F¥ð]\GZép›¯ËÙ8orà¯M¡e §X-X‘F²—F¯YÄ”+ÎÔÂI¸—3)¸, ÇK£ÞË™æÔbwÞTÅo¾>/g¸ò'9ìצ˜Èx`vÀ…ÓÉŒXh“À…§‰®ÖŽã¯pF’,JÓ‰q ùµùÈí9e=Dd Üæëãr&òúå²+Ùìㆮ]$šCñM×OÙçè•ù°¢8E8 Ëk+&Ó‰<qÔás´ç¤UÞ·ûú¼œ ´¥­¾Æ´Yg±ÖÌS o± ­!ÁkÔÙÒŠôã(T_cZQØ•‡¸ƒ5ñõp –甕Þ·ùú¼œáy ® ¥E¤QñXdÄ7½Í^?Ò(¡¡äê¼Ò~d¶ ÖRv泦1@,lÐ\ÝcSâØœÛvúeìî÷ÓrKF\ãß,j©QÂ,Û} võÖ• %/PAyo»ºŒ+)¹ÔR£T]a‘*›c7_çܲË/aw¿Ÿ¯ÍÐì4.nܶӤʆt±Ñîê¼öª–œñÛH;ɶŒ•Ô²m§5H˜MlÉ+·jÉ‘IÌ]|e¿„Ýý~Ž8®»têkSà —SÌÿ›n±Æ~ÁE——‚¸ë>YÈ7¿:Qo/{z'øhNY×]Èõæës#øFö*3*T-jב5íÛ·*³ã&®êÁ)«󸊊¬2;nâ*ŽºU™qNYép›¯Ÿò__!¥¯MN]ûø]3ð×›‡_‡&[QµiÜ¥6çÎ —÷&Æá1ò¨ù¼zNYép›¯ÏÁFçã¹Nút¶’[„&.$#_¾U ß—lWZgD䌃ÀQA¬ŒZ6ã^ù•?Úl†ÕÙÀm¾>§.²ó<¿v ÞÞ(p>´Ѧ T:-14*Ú´3—ÆXIGþÛ¨¹.—¢½ ×ɬ~Œ|åk_ËJŸ„{sù9…‘_t2GXòÐÕ´|îÈ-¬UÙ­hÄiœ„䌰´Æ£&a„甕Þ·ùúœÂÚèzù´†½;§_\ê‹ú!J ¾Oi¹ˆ±–î‹"kð:¶^ «ÒØ’¾Ë“×ܶÛ/bßü~¾.C'+pêBК‰¾i,ñŽL§JFÄ ?£äË­¨“ýµèŒ‘XK™0•ý‹²Ÿ»ecRÏ-»üê΢¼ýþ¸’!"t´{%Côª¯*Ñô0× ¹’)´Vgánç+Å uqˆ}xÔ‘|”šSVzÜ›¯Ï+Ùùã‡I¥¸1~?2~”ñ£îŒõGƺ3~”ñãøñCsj%;7ÆÝ×ç• /¶•ŒùV4®HM×-‹œ³lq¦XYæ™ÖÉSWÀ15ª—§L)­H×-X«8êq¯dMW5ëJo„Û|}^É–èëuukÅd«g4X €‰«¯«J`j(àe½Š:5¢µtQGXI<[ãfëQ›³°<§¬ô†¸Ý×Oí_¢zš$ß òyÍ3N’Ñvå$cb‘À»0\wËùjË8 ÓqV+ØGE¸ŽÂcÚgõœ²Òâv_?qVÅò[¶¾Ò¨'vdhØu€Wê–¸4uÆ‘dlÑ•M?!mÝ;‡[x© ga·tèÔØ[OÍ-»üv÷ûù ·òAO,‰Ô Í.úF“þ,¸¡{»»r" íê (¬¤r߸Iƒ½—°åÂ͢Ɩäû¹Èa°]~ »ûý)Ÿ1šFfèÊ|Fh°ˆLÊ»ªƒ‡£V,qêh‘h;˜¹+iú¡K H æ…»g­žç–]~ »ûý©xºbC¯B~+6É©½‘€y!ýøL²ÄXxê•Ö+¢!ÆQXwE4¤(Že5«J<§¬ôF¸Í×OŒÂ¼àP#{+xä;º.c"ùýÀ•.FhІ „Sì*3xV«ËOPHäµý?«±–ÖÓ(Ítr"°Ã…×uYú®s"æ.܆_Âî~¢¶ŠÖ˜k%Q¨5¸ûï`qQGM„#(ñØ…—rÚqûŸXIwÍ®5ÙuÆ¢’6Ǿkv=·ìòKØÝïçµmüHm5vj«¹S[­©­ÎÚêÚ©­®©­®ÚêÜ©­ÖÔVs§¶;µÕø•ÔV|߯ƤµR0êÖª‡êÂy\x¨êØZÈŠ…Ç8 ÇpÏeIùÀ‘öZ£Rø®³âQÓ oŒÛ|ýÄfÅÒóf³"‰ðE6+ö0;Éfu, <]ñ¬P|UÜ"\=…y×®JíXWâØ¶ò2ñðu³Yñt~•ôF¸Í×çÜüÎÌŸüKI1PÁÿ³À¸w!¿žE‚¶­ÅûZZO&&G¡ç_J 6WQö¢QkÒ kNYép›¯ÏÁÆîÂr»êQ‚Dµñ)ëjÄúX®î´Å†¾„¶ò‡"…•á)xänbÍknràðæ”µ»$»¼ûúi‹ÓÄB°ðk×0}öQfzú¨|]ÝÙë‘ðqÝvüZ+i MR3™‰.,ù<ö| MÆÜ¶Ó/cw¿ŸOgøÍÇ^fΤÁk´±ƒè‚ÏSÃ’Ï[½Ýv,2‰•43’šAž}aA¢cwßäܲË/aw¿?qDùoÁõk×´8ÀÇáiª‚Ž5^ó´äc×Ö ŒØŒM©f²®5¼ê3öàñNc÷éOsË.¿„Ýý~^ÎL£wø¨fÊ¿Â#)ÿâ w˜òïh¹F‘ò/¬Å”e¤1R+:Þ‡)ÿJÍQ›ÏÕžSÖ¤ü;Þ}ýy\¸2+-# Ø ¬È0=ÆŒUh5 ^£Î’VDã£0“X_ TA‡"HÚ“X_sÊJo„Û|}^ÎŽø™ÌîYV€ö2†A›BÌ~±ìô/­_(–²©³ÆQÈöíV`+l2=jÍ›9Í)+½nóõSó—ÃwW_›âb¯é úv^Wuö~»ãñÊö ¡¯lS}½]Š]êh=—ñ+¹<.…ïòá5­­tH¸ÍÝçZxÂkTEÙ%Ee±WC ¥±Ø m[(8”ØKZAÑo…’Ф@r­p ‘º2®¢9m¥7Âm¾>¯hè T^ãÌÙ—œYÁ"5¢[4H³» IÂk¢*Åö‰º c-µÌÙ·¦":ilatRc7‹Ì¹e—_ľùýÌ‚|¨B¸¯]ƒþ¨ÑÀ ¢¼qý:±¸D.%¥ï?‰¥cÞöÉÙÂJJÂ9kâR¶%–|pûæœóܶÓ/cw¿@:vÔ¥ÞuïÖ°€½c“]*kÛvÙ’àÅÀÖ>í\I…µtW¿[Ã2vcYáî±ïxÏM»ý"öÍïGötÚ@¤“Çq ‚šcŒí€ä³¦µ‰ü8 bò Nuc9îP‚½!n÷õÈ`׿vS€@ƒBßB^m”‡d4KøjKÓe?AÆe¬¥,’O w\ÆrÇå±³H>ç–]~ »ûýHÒ¢8Ïìÿ(Å…o­1›ËŠú:QÀÜQºdkeÏa6…ª¢uçG)ÐO¸×K}NJ圲Êâv_é@âÂñB÷mýÚRƒ_LŸÑÂ=Pgì%¨‚JþÚ"þo.ÛÞqÆJÊ_[jð‹I,~M9vþÚrnÙå—°»ßO ]‰#-3JT£2÷\ì?~ ²\¸U–/âô<¬ É•­í–²DRš oA/Ajä+K$5±­ð‰¸w—9B þÂQ’4ԾؚŽÕ¨\øÂ+*ž?Ið!8ÆmÇþÉXKÍOqj*5¶`B]ü çÜ´Û/bßü~^ðÐñ3¨WVÕ‚' n©Ñ9'à!ƈŽ=Õ’¥`¶½³Cª°’¦¯ARƒcbI&å±o²)Ï-»üv÷ûyÁ±¿¦,¯wTà*(ªÓ'ø @¯&ỖƳ¤õR ¥×z¾`¥`Q¸ v.Zóíª9e¥7Âm¾>³\0yg¹¢Bkh¬ïU,Ó ¹õ;RdÏÆQØÖ8*´Æõ;ÙÑ£nkçÌð*‰Û|}\ã‚ FW+úµYƒàNHñ?½x"½¼Çì"ýö¸nû #¾°ÃÜü Û¥†Ïª° 1Mé»<‰al¯yåsýà÷ãÅšŠÚ¿6“Ÿ¢Ó;f(³O÷4¬m]m]ñˆG£ò£T °Ý86<Ö¨=_¿šSVz#Üæëã×p|¸N7´õpµ5Þ©Ì=ï¬-=!‰¦Ê½Üvœg ¥ ¬K—€ˆ¹4î•Ý4­­tH¸ÍÝgÖ+^Äâ:òkSà²$~@§Ä`ŠLí®´")X8 Ó´¼V€þĸN~.ŽÚ}ºðœ´Êâv_ŸW´q˜(žS¨55©ä‘!¶ EÒypK\u:B‰¶¤ª+©9àšš fbcÑã9ÇÎÐ9·ìòKØÝïOíc&›”Ì»}ÌdƒܱX²2u1n½âE‰÷`äÄ·1ÑÄRâØ¾‘äëÇ=™øôïÐ86%~šsÛ.O…Ýý~ Jž—®FÌ1-Z(…ebh®Ô"sì”À aÕ• ¬HõNB>ÃV —K¸…nKue/HÍ)«¼!n÷õSǦàkiÅpǘ…d9uŒ9‡F ‘žbëŒÛsã(ô»éÍ×c–7·™øQÎYÝ1†E꓾~",e^I„иݬ8~'ïÊPR}æû>@˜«Ö^(á$ÜÑ=)ðÞ6®›Ž$FÍ÷½ç”Õ¹ªýz÷õ1¹ðÇ3Ó:¥%a?É$Ff’(Z™˜ÜgÊVä×t³%è«|~%®3¯’£öŒ×iNZå q»¯Ÿ®Õ^ëš_›¢âë_8Ú^ ˆ °Q$øZíõÍÙŠ/Ø8 %[‘Jqà"“¸óbßjŒzfßxÍi+½nóõ9‰o¼W3KDõãáü%;dñLÓó>¢“³Îv†Œ•TßÚÊðô "aä–¹ë¶Ë/aw¿Ÿ#’¨1ˆMž"ýÖtPC6¶‡ îßÈÍ‹ù’©ÛTiÇ›0±”86?- ²ñmè®ê±)ñÓœÛvy*ìî÷'¾ý¨½Éè¥(èBCjµ«²á38·¯ì^ Ðu¤ôÆQHº )ÎË‹b,!§×˳Iø®åt´Âã6_?åðw´ \%sø;r)õ²æÊž0W hIDEdé·S8 + …¤˜Ì%! Ï<êðYÓsÊJo€{óõSÒco‰!]Ôõª*kÙæ@áìž‚âY[Oé+÷¿Í·Ä*”àAœR?8ê–Â9³#ZÏ~Õ»¯ÏI“AÚ‘4QÖàÆm¿¢™H¤œGšK·ä ¶RÓ> jÌ„•ı}ÁÍÉö1ÄŽÅö0›ÒwysÛ.O‰}óû™8¤Ç¦úìæ2³åAÏ1A€qàñnÇéíHP}œGZ‘a…llfE‹õÈ8PˆzÔêˆç”•Þ·ùú‰+$b½+IÍ$oG6N'l#%¸Ðø²²¯5c% ¿öRÓI,,ø+sìæmtÎ-»üv÷û‘8dïñF+DRîxcœ{6îš[éõšýŽ7Z؈Cúo4NÄ!õ&ÑœI+’ñÆ7_‰CxfV)ajÀ);yÀ )´QIøjÎ’ió]b%'ËXSÑzÎØ—?›?­KÙé—±»ßÏ,"EÜ÷Ê^²?åÕª½œQ*ÀãVö\ µI¶²1µpC‡qý0­ì Þu8FouŽš?LÏ)kQhú¬ï¾>²ˆp¿ßÉ=Vˆ“³…çê&Ѐ’¦/ ˜·uƺm…L«Â1cU£v¿H=§¬ôF¸Í×G‘…Œø¸!oz­©\žA½ ¨ ¢Â#. ÏËÉ‚2ÛS4ÖRñbœš#Î3ÆòöÝcS§5·ìö‹Ø7¿?‘bE ï¼ ±æÂ=\°uÄ/âBÖGðzœ§%xqà4˜vë$–Çæ§¥AVˆ±'v¡ûÌ]ªç¦&=öÝïOÅj•wƒÎî·f0C¿"º¦ùˆË²Ä(ZÇñÒv4@H¬¤~g÷KÓHY,l%g±ÆN–™œ»šÓ¸nØÝïçìþÇÖûò¯[Ù^9ôlYAºÌvHàalÄãcëp8*?J¶‰ ÀâQ)ð£˜ÓVºwšÚ?}ýT{]°>iñ¶é_‘«x g$V V €V„¥WZ#NB.ÛVt°Z ×â¸éQ›£ž“VyCÜîë'Üqc5úÚ5)ˆƒ×ò9ˆd¤¡ä8á1nûÉ‹xa%US¦+Rb0ézì#‰v=·ìÃéÀî~?W®!ò¾µu–‚ÝÀ^Vgâbcžâ)',äTÛŠ‹.ã(Üm©ˆm §n`•?Š9e¥7Âí¾~â/.ÜŒ:’ ´Ö‰¬ÅY¥Q4‡‹"CЀ؊;Iá$ÔÌ™—+®q ¸9ê‘åÝš“VyCÜîë'þâÂMçF`\¸=÷:réC:I6·©={ÇI,’Õe…÷¾ÄZÊFj›£ [á¿Ç®ùÏóܲË/bßü~>·]xþÏ3 Ý­¹ÐØ8hß V«ÅFÑlóJ^‚häy®¶7´î4VÒ™ŒPÖ A³±'¶+›’Ï„1·ìö‹Ø7¿?…!£–¬ƒOòk×T÷‹v/½±K˜¼%9YÇm?cC”XIÛÑHhÐ>ÁØvá䩱)9 sÛ.¿„Ýýþ“œqþ-qºúÚ5ØE¡ãôkñ*eÉqÉ×VDš=¾¶)¦TÌ…’좌åËcß;0Ïm»ü:xo·ûý‰›ÿ­Ö× ‘…ô»Ö7Xôßj}ƒc?k}ƒ}?k}-l$#ë®õ5N$#ã½Ö×sfÃë¬õ}óõy¡Cûª¸ÃR©¯“£‹¶™öÜ<¸G0]¯´be…±¹U¼‡#|%\‹ªGmyÇ£9e¥7Âm¾~ªÊ^lM}fU6¨QA¢t¢nebõÓó”ÀË0KÚŠ:Jã(®Ÿ—b C¸(µo•?Š9m…7Æm¾>ÓeáôxåiÛ ìL;šßÃ|/]÷kš¡*Y'öïÂIÈs¶ñòÆÅ%ôò¨¸T`N[áp»¯Ÿ®Øú¥ àצ ÷V' ,‚ß}©{¨cãýô÷iÚ<ôrŸiÅDl[8l=jî3=§¬ôF¸Í×gš,tŸK"ÉZ¤%Fûã—/eJÀ«ª#!]ÖÝ„p¶"´Cóè^LÜHö«2%pTÌiëT€~Ìw_?Õ^O\)׊åÖÒA"„$s¥qÜŨ‘届­ìï"œ„é\+ÐŠÓ¸î ¸Ù%xMd»E]ÞÍ3q›¯Ï24žW65¢bá×åÑ1cALúÀ¾”— ô¸’µ`o*ŽÊ›*Îø 7zqqT sÚJ÷„Û|ýTa]¯*¬ëM†5EL« ëúNëÈ#Ya]“ KÂ[…u=¶ ë–dXõ­ÂºÜdXô&+¬ë¯IàÇ¡ˆÇ³YSQVG¨G¬ÅöÓ×iÉ98TÑÞŠ`W¹¥’,Ö KVØ(Œ:=4…<¼i=½æNZ±ØöªÏ\±Øk°›Ì‰sSg7æ€82/à#­ðÃ8 3››I,Fã:Îþµgd@sÊ:Ä Ö®w_Ÿ“Bcž§÷¼VàU‡(þd‚?.¨Vº±ʶ•ׄ£pz·k^qÂM¼Õ4*ÜæJkÑñ8ß}}\±F1áŽ.Ѩ˜8¼v¶`Ÿ¨ëøy—›ÁëZqŒ7Ž=à¯ÜàJqbK\¤H,Jel_Vº'ÜæëóŒq VÖ~íY6œA˜Ó‘™qK¾Ü:®ÛŽÕ?±’šw#©Á¯/±ho™c×ä òܲË/aw¿—¯É´¾–±E)Xß¼U”Fyó¯.4Èž²µ©N8 -—o)*zi W"LâQË2Â9i•7Äí¾>/_HÕfÇÛ¯Mý5ÚmAù#R; Žü#­¨·5ŽB6Öµûrã°÷¨ÙX×sÊz¨/p›¯ÏÇ,眩«$ã«Î ξêü8½·Gu~¬ÎÎùqzm[ªcã:þ[w½u•µ8?Mf6_Ÿó@@Ýw®Ìd”=»ãinØHGÒÛëaîUw=N¯¶› Gae&£H“5n0µ„£Ž;³„sÊJo„Û|}Ný¨÷ýãצ ‰UÔ>û ™k¿ÕŒ$s¤—ÊÆQ¸É¯¤ ‰•pÅÅ×k¿Õôœ²Öû6ôÍ×çbÁE+® ¿nÅëwztwühƒÅ0е§žp/l+¨AŒƒÀQÏ1°%Ž˜q/Qʦ­ô¡¥sÚJ÷„Û|}^´*›"'A{jȬ0šKAyÜ]¢èâï1ÜÕöÉòFa%Ý{-k@²žX0+äØIОsË.¿„Ýýþ”ÉñªŽÙ¯]SIc…MKëì-kΰÄUæDdÍvl+©ø'™šƒ>‰mÙ¬8vËË4Ïm»üv÷ûyÚ^/lp¾v ¶ ]¡‚98"Ù0J×l;Ò^c§c¬¥îb Ô ï!±ØiäØ5;_znÚí±o~ZÎ^¿Ûkx¶õ^­ .îl\ÄQðrözIØŠ«8ã( ¯ÑVpg+\ÃU†FmyÑ¡9e¥7Âm¾>/gõ‡´F)ýk[Zc”©oQñ¥5*(Üü!­Q EÿÆ–Ö¨Q·¨aÛÒåpõW¦5ÖîþDÍÜÄÉöÚÅ\UPcÙÈ?µø”xfZìH$;‰)Œ•tŸ‰­MybyñØ#Yš<·ìòKØÝïçµ „–#«—¬@Rd#Vl<ÊgUëxÜE‹h*¢qÛ‚Ö+…¬^²-6ŒC}’GÍê%Ï)+½îÍ×iØó™|Y ¼bˆ"°è ÀÄûõôÄ3­H¢5ŽBÏ7ºôÄU2GrÔ|qxNYép›¯Ÿd4¢å>Mä"WÈjRÈDå|–X(:x 3qCÁ¥rÈH¢}ŒÄUfBrÔš‰’šSÖ"Òîc¼ûúBä¢XªySƒ[íFz’(&ˆ|2—Hú®ˆc?oûb+La%Õ=<MALÎX´ṈóæÜ²Ë/aw¿?-g±ò¨ÛøÚ5(ëˆ%%Ö)r,Ä’ QGöi% ½d'S‰°–¦£©AQHb;Óî5vÏLÏM»ý"öÍïç1ü ¢§ÎÔRt§Ð×O›’ë[•à…§]i­ñò"ÎFåG©`‡dáØ!Y£–üËiN(ì po¾>/g`C`JøÚg|ñ± ±]ng×éuIàÂsâ`%ë¥ì9à(`Ôï:ó‘P.’„¤YJ–ÔËsÊJo„Û|ýt:+hæÒîÓYaE˜"85ž£ÊàÓY­iÅUªqzj¤·œqè„ìQ!øtv¬´Òá6_?%æùv:£B§,øxŸ¿Fy;©ÔÖô+ÂQØNgTè”EœÎ_u;qÎ<»™¸Í×ç¬â¶ì¼󩸘`ßÔ°©÷]­ 21(¶¯´}ô #ŽÂy'æOEá‘`\äð7JÅœ¶Òá6_ŸéûÕã„÷µk.„Æ6²!Eج¡)™$F«Ov°—L ‰•t'­™f|<ÙÉø˜÷Ø3™<÷4•ä:oìî÷¯8E†vûé,˜¢™ OH‘"‰Ê±…ý¥ít–vœ¾+i9´•šÉÊ1aqÓcgFÎ-»üš®:»ýþÔ­M0šˆÞö5‰Ã)غNTsHâ½XEÓ¾@/l¬¤žtôÖ°×€±È˱«{ÿåܲË/aw¿Ÿ—³Æž×Ý…«©äLìø®¼Žƒë¾,K\|&;l˾ðW1VRwÞ}j°"%¶FžiŽ]Í!žsË.¿„ÝýþyäJRîÈãBа2òȆǹ$8òȬ0ò8kâš8±Êyœˆv•’¸†Û[ÚÜNÈsÒ*oˆÛ}}^Û ­zõÆ”L±$ VÉv}ÍCW!¤1Ø „qV–ÛJ1¹`‡±=j²úxNY»JV€Û|}¾.c7¸ì.k2­;Ó³£ÉYAôÕ%ðb çC[Ù›N¸¡”ýu·N;yãÇÂJ­J¿?ôF¸Í×O\ŽH ¿“¡x-XËÃj´îdà¯> \…à ëBÃeá–º/ßÉ‹T,&!²Sótzb«|æ«#­tO¸Í×O]d*’zÇÝD&,h¼»«’êž©ãî SÏ´ΚB¦ X1b/b+5j&~{NYݳµ¯w_?’ë3{Í·IÖtS÷¶Q‹‘f£&ò ÛÁšXI÷’5ÕÔÄÀSj‰ŸÖÜÅÔÄ𫚚øöû™×êbµhwéKj‹ðE%jBôâºTÑÒDBhÙÙÎæ/ÆJÊBùÔ°èÀXxì,”Ϲi·_ľùýÈk53÷QúJAÞãüÂײRX2 ð`4µÚUãqÆë™BõÎÅŠB¶É¦v¹u䨇·-žSVz#Üæë3¯Õ©ÇY£V€5¸Qؾøì daîÎ* Lm­úNÂðÛÆŠŽ†FÂ5ôBÒ¨Íwgž“VyCÜîë#¯©£’Cé|©™6,q»-„%|Iø^˜ÑÒŽßOb% 'õ¥¦³‚°¸=˱›s/rnÚí±o~?òZuü™ïœ)˜i¾±`1ßAôçDÀÈ “]‡ŒƒpçXÁxJŒ'rͶc%ÝOib];°/ôØãÞ{jnÛé—±»ßŸbì ãöhR©¯L¥éÆõIa/ì啈%ΞVM$™ìöhRáO8V3wØVz·çl;Î’¸Í×O1Èk(YækS_!Xî S”JuHp ò:Ó:âo`…›–A 2+w’t£ž7'ç´•Þ·ùúƒl‘⃤bá¦ïBênð‘)dN ™öÑÒʦ=Â-ý¹ut¹QP]‰ë¸þ»Ü\È·ƒšSVz#Üæë§Dü…/Xq}+p»Ò™J}áâ¥3uûÊ{™h-½.['ŽûÂI¨×—÷*ÆáÊÅ£æŒç”•Þ·ûúé-v5âÐ_›¡$Ö ‰lÌe’‚oÑŽ•V´5ŽBÍÚE) /܈;xáÆQÌÕÔœ²Òá6_ŸoÑX§Ý3¢¦pÜVÅË«áA{­ >¥Ä›.lNÓ>ͬ¤#“ ¤©‚PÂFvpͱ)ñÓœÛvúeìî÷#HEWóY+_›¢³@õ‹lõ2+‚‰gòŽÏ â[5ŽBfÇXÁzxá±âQ35ÆsÊJo„Û|}äéÛžå.©9ã5:{glo¦Ùqa+ .t\ö§]•´üžIÍDá…±ƒÌ<{8!ç–½9¦ ìî÷#HçÕÍ"y=â:Ö×1«Ÿºé7Hçý­ãP–@à$Ü| R×C82~hÔ›DsÊJo„Û|ýÈ‚Uáœ7k’:9°‚Ezö@Ê6|­y¶‚ÈÅ8 Å¡+ðBŽ¥ž•?Ê|@ yâ4%*{ ˜¾b=9’i_8 ÉCcŽWÆø24ê‘_•攕Þ·ûúlÓÖ¥o8 #XKÑQð$hM=jËvÍ)k3Ó~÷õ9õ±ý¾6Å»ûÏÆ\L’ ÇÌ}zT.‡­ ìÂIYŸ&EGd_¸ÿ4Úîú4Î)+½!n÷õ9­‘ïш¡(Pj é;_­LɼW”äDx¡ÛÞœ˜§ Çå±ùiiº{rV2Q¡]§Æ¾é”=7íö‹Ø7¿ã‹q뺇q¬ÀF(˜¥ŠÃ8A:Uö0N›(ä°uˆ¤8 ¹²!ã°Eò¨¹òœ²Òá6_ŸCŠ%¾…Õ|@±B¡ÜŠFóHÛCDoJpðIí'Ž¥&ŽBþj¬@ÆžqŒøjÔ,«ôœ²Òá6_ŸCŠdå\Å}RƒBÃÙñb£ãë°«øëÊœí]ý¶3šk¬¤,íNÍ6‡ÂÆíß™cSâ§9·íòKØÝïç"XÍ÷âð›¨"ˆwÞ!Åõ¾™hà•!Å~ùÍWS¸CŠR(4Hœ‚†ë}3ï9e¥7Âm¾>†'Šæ£ÓúФ¦³Cs%©0jTæDI·$|µñÊ:oû`'ç–]~ »ûý‰bx€LCk´‹á=ä ï5„O¿ò‚*xieÍŸp2KÝŠBáPBàQ³JÁsÊJo„Û|}Ž/⺠~âM–ÄË!\x/LCƒ†GTdesvá$Twñ¢pCÜÁG=\Àì9e¥7Äí¾>Ư.žGåüYQHö3Ä÷'×Ôµ‡þæ…Š[Aún…$€’‚}±„#ó‘F]I¥9m…7Æm¾>­`àò`¥?D(o ²æ#¸:˜éq9‡$ A—™vlþ+i¹CYjqŸXäØçØÃg¼œ[vù%ìî÷§Y#yW½dРØ{É*y æŠ~·¡9‘Ú•v¤v%VÒH.Ekz¬Ø‰E3½»92sË.¿„Ýý~>u4‹GúÌצXl66Ðdþd²‰WÔËz‚çU8 ÓîV /Ç8D°=*ŸÝúH+½nóõù@†žS{Ù4Iš8ï²éS·øs+˲é×)kfÙ´„»lZ •?§ÂhŽº•MsNYéM’4®_U6ýš`r—í:3*—ô†±’`c,ˆãmïþÚÍ‘V¼´£p7@‘]ÖŒC>ŸG­Y ¤9i•7Äí¾~">°_>QÒøØ[.¬/t«¢Àl „ÆlEB¯pz² HÑP‹ \E-‚F­ŽsxNZå q»¯Ÿê̆“Ý¿6ˆš£æ«ã|²ÿ ^¹!ðè„ÏVÓ7õ;}Êšú‘¡¨š8UsÔ‘ÍÄ4§¬U?#à6_ŸdÈ0Ê=~Rà.;ª¹FïHÜhh~MÓGeØ‘Ö3f4ŽBw¼Û äÝWQ©QkOjNY»Òa€Û|}Îñ@ï¬í &E7ib÷‹"RãÇþ¢h¤±µ©Ñëª)Üg0)x–ާ,zŸÁ4'­ò†¸Ý×g²E4U‰›«e¶EiJœ,‚àpÄ­Xe72¼Œ%Á……þ-i¿ð3VRnޤ‰Û+´$6n¶Öå±%ñÓ˜;íð+±»ßŸ­Š4©vå¢ Tb Â _X^Ê%Á‹Öë©°4ÚÆQÈt/+*…c\T£V;yNYép›¯ÏÌ‹M‘ d^tÿ0(ö›)ˆ×~õ…Κ=­ë&D²°1/®›ɸäV\û՗甕Þ·ùúqÑR‡ùv¯ZâR<¸„4Dȃça)®ó¶#øœXI7µ¼5h›XðgæØ7»¼ç¦Ý~ûæ÷ó v`ýîj ;ÚR £Ìk ß}\gZÁ g…á“ü„ã× QÛÝç“sÊzhçÜæë§b0Ñ/7¦·‚½þ&²æOvœL±¸{²ñ–¬‹¹ÄIXIÚ/{ 7˜ÐxéªÍÕtšSVzCÜîës52 ¢ôGE©iÈ ìÈBé"y}ÜY×;ªÉ´í´Wf^k©úp“š‹·±™<4öáꂜ›vûEì›ßŸZ˜¦»˜ˆ‘ ÞÙ ´†`òM”93Õ¯›Ø¹’²2WR8 5鮤@Šqø-yÔÃåšžSVzCÜîë§Î.Á ]šSÒSÓYîŒKä&óÔ{J>UE¢íHaN¬¤æ”ôÔòÃØârgŒ]\ ”sË.¿„ÝýþÄ~_™ê6“ü¾b%Š ” |üú„ã€ç@=AàQ¦pj>¿R Iq)1µxgï9e¥7À½ùúi9õ‡ålÔm9K¶ªXxúúa9c[Î2»ÑÂÛr–Ù†ÆårÖ×ËYrYÙ›\ÎFýUËÒã^ÏÁá<{* eÌi°xfPäDÁËM»l­8¼ '¡¹Æ >@Â¥kÔ’4êšSVz£oóõ#á=2©M !Eß²*áà[–×¼ÙmÅ;ß8 Gž©Põqñv˜•‚¯ÚfO+œ ·ùú‰>¸4åM|m †Qά'úÑïqI಄ê6[‡²—£póxKqÄvP¸Ej~ŽºnoÎikÑ‹²\ï¾~ZÁ¿ÊëK)Š›·œ8¬/vؼš¯GǑ֊»<â$y}IŸÈ×XE­Ž.¢H¹n‘\úœöF¸Ý×ç3èH÷3ƒm¾~Z´:‹Ø|³æÄ9êDãŠà°‹3Vðhœ–¼h KöAÒ,a%­<ƒY3Ù®LXPåØ#Ï`ž[vù%ìî÷ó¢u±×7t_»‡>,0LìlÉÒK\*S!eoL…VÒLÚkL,â9vO&[Ï Múì»ßŸÒ:x¹‘\ÂKÏbÄ’‚pŒd×à•ɹqoL[_¯sÒ%NB¿¹„©@^ŠqH¢ô¨™cé9e¥7Äí¾>§u$u² ák× ÃUؾ1:؇%.M-¥‰ä‰•tÞ)Ò >ÀØ5›’{mÝvù%ìî÷sÙ˜‰»ý/“ŒEdzË$c¹•os7Š&ɬ&Î$cfÿ»L2¦ŽÓ$+5GÉþw™d¬ÔôfºÃuúú±7Úïž[o2ôÓ‰!<ó”…ì„3c.^^dåÊGœ„™å›Rð”%ž)š­ç¤UÞèt¶ùú+BŠ‘Ê>ËSDçð‹>¦ÑÇÏœñ?I[X1í'UÂJêyض¦åÕØ šW]]ª›sË.¿„Ýýþ_|êÑL‘Ä&k£üº ¬Jç°äE+*Ìmç-—±’ÚMt%Me‡ja »Wkìâ ™œ›vûEì›ßŸº]A[Á¾]'8q'Ûvè?³kW,T±y”½6ÚI¶–+w“Ñu‹¸Á†\uÜýº8§­ôF¸Í×ǵ."ê$†ÚÔŒXÛ…ñ¢j‡ó%ñø„iub%õ;") r¼‹$ï»ÞAIÍM»ý"öÍïçµíPßû¼!;Äʲ¢Kì‹ðHì7dH¾i‡•8 ±p÷UËJ\R—ºŸÎ4§¬ôF¸Í×OÁFÒ8¯;ÖŠ¼JÛ¼ ‰2dYWæÑ …p¤œÍÆQXY0+ñģŽÜtkNZå q»¯Ï§³u't}m 2*žh#®Å“‰£ãq·ë餮0#…‰‘ 1*wËz31jNY×^öæë'¶ª3º…;{Û ´ƒŽˆÞë;]h\Â& ÞM²²†p²´hmE{Ôl#í9e¥7Âm¾>ŸÎÀÃYb­_»׸›}oµaç Ò©ÃÏRj®(;˜à+鎌[ÓHp%lM†«Ã?­¹e—_ÍÔYeûi9î–¼ÙL Nç û}Í[P#&*`IP62§)L¬X¸>p7þúu€üž«:ËiÅCf…$l´büž8(zÔdkôœ²Òá6_—3ÆÍ·åLŠLܸ2áƒaôm9cßV÷kÊÜ΄*¸, ÇK£ÞË™æ”õ¸_®o¾>Õ@Çs¡ùëVÄ…U$h7ðó õÅB›±(¥Ä,¦K»N[ÂBº²ØÙ ô¾òBï Lż²ÊGâv‡Ÿ×´©:¾K¯)Püƒìy$ÚÇÉâDò¯i$— ëu(I‡©C™©WËžh]wŽÄ5F*Oåf“sÊJoˆÛ}}Ž8vdo¶¼é”¬5( >æ§,ß]%^?ßÈ1•¤¿ÆQ¸»JHÁüáÍò¨%÷4šSVz#Üæëó$n‹¾v ÚÅ1êä[½îÎøÓKâÃrÅóf{'…±–F&¿Xƒ–Q‰EϨ’˜[vù%ìî÷§5í$éß¶¦"+$…ýY!×5,yM;Ûm?ÁQd¬¤¾¯i‹wŒQndl+¼Ç®NÛɹe—_Âî~?Ñ:*·"wܧi¯­O€×V #—ÄUjá¨aû‰£†±’ªÿ*©)ðÒØÿ}ä¿ÐsË.¿„Ýý~^Ó,õÅnok V¡XŒ¢`c€B2x¦‚+ŒW d-¦I´‰•Ô3Hd rÊ‹E,Ç®yAã¹e—_Âî~b.oÉ!RèÜ…_Š—0Üí \Å®<¸£n ÜQXàŽ¼NKGÝÎkœSç5z“™åW%‡T$ÂÞeV°}SÅ1‹&¢‹KíßXkZµµáZ8 YPa"«ÂMó0êÜN˜ÓVz#ÜæëóÚV•'V”''H¨;£ñüÔz \…@klë4«GOaäyEŠÎ»¶¡Pp-9jV{NYép›¯ŸÖ¶ {Õ¥Z±¸`¡Äh‚Ë?V!нÆÖ_ðòBW–FõÚVíé–Âu.XS;Èq_¼•žÖ®Å¸Í×O}Í&öýnk61ý`c–Ó®–-U¯ÈØ6TÖ©t[à(ô$·–‚ÙÜÂ!7Ä£Ö$"Öœ²Òá6_ŸS@@çY­îdFö§‘tÁ$¶óDnF¼°³£5šŠÆI8’€ŠŠ·¸ðÓ¨8*æ´Þ·ùú¼‚U”žÓWÔ©AûψF%ù‰âB3ÖSÊû±rÛ‘¼—XI3“¬AëÐÄ¢YhŽÝ}WsË.¿„Ýýþx›†›û¾]¦MõôÄ}(µ"©ÿ7…¼I»ÒŠH qMy}»F[qíܦqëÊ º"!ïкö¸7_Ÿ-d@î‹,¬™R@`³‘ iëº+#-lAÆuW*§e‰£n‹甕Þdp²ýº‰~Î%‰Ö¥ÀÊ®‹ù Ç!á»â‘dŠ…»Ä.k²K)°!îÄŠ«Q)|—WK+½nóõSòk|GN¥`ú…@Ì<Øz™j˜Vƒd6*¢%i¬"=TÂéÈ©ààŽ\uÜÃ8§­ô¸7_ŸƒŒꟆYÈ­˜8äÅ…:ÉÇáa!5Š‚/Ââé—µ¡ÚT8 wn½¨Ú4E›µíìù1'­ò†¸Ý×ç ã!Iwãr·¡Iê64‘›¡nCN`<Ümh"#Q݆κy¬`…³p(íó¨5—BÍ)ë)Ikï¾>—B ?œøü×®A}$F6n4Šì(S^ÕW#Ò ÙºÄJZY`dÍŒmjbG¼DrìáÚ…œ[vù%ìî÷s\q‚ÿšý¿¾v ˜9ˆjô`ˆôELJŒý]XIdsа–ÎûT%ÍrÎ~`' <6¥ïŠpÆÜ¶Ë¯åZÛïç3ØAƹØÒ|m lx:Iµ¶BXx¦/K½¥Ü·ÆQèÈ–%ã°7ò¨5‘5§¬ôF¸Í×ç$F48Û“«èy‘ŒØ@Ü«4Ev¡Ú’ÑÍÖ¹'?Î=Ýð[*”ŒHœÒ9ê–ÄÈ9e¥7Âm¾>»øü]¨Ž(Ò¼J“:iNãÍTÁs#ɇ¤Un;rK‰cóÓÒ0ý@ØÊüMÉ #1·íòTØÝïç嬈}jé(Åd$°ŠF8E—Sð}»w!ìg+È_Œ£pßîIžã@BéQ“¢ÒsÊZÜéúx÷õs0÷}spC3ùˆ›Gš –IŽß:%ðv é:²NP/ 'áî(úKWpg¨QK¦ïkNYé q»¯ŸR@âîÈ”…ñÄOËÂ…~„ôÖ%!ã3­'ª³‹ã¤ªñ?ŠŠ ;áæé@áº$8ñ#²d…7Æm¾~ÊhŒ˜Ì_»$Û‘]¼k¯u(Zj±âKOLŶ“îMXKՕΩA-EbQL‘c¹TznÚí±o~?wxiüÑg†Ô BüO_øŸk‚A!î-Z¶h(Ê·±M+)»4¤Yö‰Å…uŽrnÙå—°»ßÏ^_ J5 L zžöäÉ‚5o ¦$x1Ð÷Êö‰fšÆZª&LJ I{ «ÓcI=é¹e—_Âî~?S-.½U¸džü`HÈž}XæD§–Õl=Á.œ„åÂ%+°¶‡µÝ£'½zNY—Õ·ûúLµ8cßÙ¬C=(¬Y쾂ۜȤLÄ…êIøjÙqÆöó`7hb-M¡R3›h,ÒÂrìL@˹e—_Âî~?ò.œ»8c¿nʼn.?Ñ«©‘@»¡U¹•a]¢úLëÀ»]8+ÛÎ[q²Epk±{F¥ÀbN[éžp›¯¼‹¯‡7ÂæG÷Ejp‘y 3G#Á­%¯Ÿ®("wA aGâFb%uo¦SƒE:±¸dɱó&ç–]~ »ûý´Ð• ¤^ãri–¯~¤F§ÔUÄÛ:ÒE xp®¥z X‘‚nÜ©¦¢6VœH»%.ZØVJÅœ¶v康ùúÜñåtN†þl©™`fåt(gÅ\ £@ÚkÄ¡¦1RšOqÒ Ø!\M—<©E½%¹Èllû‰úc%e‚¼4QQ· þØ—G¦àâkb[á“q»ËŸÂ‘bS>vK´ Î_Ö§B_| c¶¾~A±»%NÂÌc·Øl‡ŠdÚ3IHsÊJo„Û|ý˜óȈYA¨¸Ø sÅ::6ȼ"î>ï­~ä.6[YÁ(œ„3Ï/R`W!ܘ¤wĨœri¥7Äí¾~:¿]¸]qâ•Èþ³Ô‰ÂÎV q)øüv [gQ;ÔbSÈ7Ž…µÑ‡ï ¹ GÍ×甕Þ·ûúé÷Y®K¢áü÷YÌ€¹xÛ5%äZKëD'lá(Üm¥¤àéN¸I$õÈü Í)kÕRºæ»¯ŸÊ¨ã u”<¿YƒÖ…¸âbÂvÔç²%½$_ŽžöÉ’*a-•<¿Yƒ½¤°¶’šÏz˜ÙV9Eà›ÓŸnÓb‰` ék× 8пIb²}´£äÛ´XÌl'½°±’îb:kŽøÕÛQ<ã±)ù6-æ¶]~ »ûý© z2#¿×¬¨žì®2ÈU…B$Å}ÖØJ‹ºŒj:)!„MiºcjÈhcl'§ˆÆîÉÑì¹e—_ƒt$»ßŸ“åÇÀä{Õ=0yü˜,{`òØ“ÇÉcL–=0y¼&ë–"o20ùëòAÊÛÕü\ZÑñó-ä‚Dt4jì×’ÀU§ÅÏÚVñOG¡eþº—WîѨ%ƒAšSVz#ÜæëóZVÞëà­Pþ~½ëà;»mùûì¨dë¸ëà-ÜùûR(¿ßuðuË߯w¼½®¼×ÁÿòÕ(qƒîü}*NtñŠ+”£®¸@¡³¦­¤ñÂQX™i%Å 0qƒUuÜUœSVz#ÜæëóÕÚˆöy·Ð¦"G+2ìOôM‹»Û¾ÐD/óØTíl+ÒŒƒpÞm ¥ å2q')—9*~sÚJ÷„Û|}^Ë¥|öÜÝKÔÐ.4^G°µì7iߘ¢YuŠ€8 =÷õR “¦q7fÃõó¾PÓœ²6”òî+ÿQ'^÷ÿêßüÇŸˆöÿþô×ÿùÛñíÿúéøöïj," ÅF_ß$vî,þöÛ_ý4Gø·D†X<÷ÿéLå5SDZŠã¬6ÉH/{ý"ÿñ·¯aþ÷oÿÏ?ëÿÿÅo~ú׿û?þò/¾}ÿÝO‘`S¿íÿ¿è¿þw¯µãÛoþë·¨¬:ðúä(Wô»Ž*õúí7_ßþìeúóo¿ùï?ýÛß`ì_Žv4¯Ÿ?Ñõ÷EGõÊk?Ftÿ}Ñ­aÛNôü}Ѹ º„>öwË/ößüº¿u”þö§¿’Åë3Ío{t!Á-ío{kƒ”·zÈ(ÞöH]Äyˆv‰aÿµ×?ë+( EUéi?:Ùb•´ÝbÚ'Søl·˜ö?à7°=ÿj{0"ÔÝRðPàiø¹'éÀ¸*¸üày–á\| Ÿñ‡òù¯mO~d#Ç Ûæ×Œýgùþ­ßþìïÿç?üîÏÿó·ßüû}úßcº_úr‘jZ+öV˜ð?yÂøû×ÿõ¯âÿüÿíïÿîŸNþüX¾<âj¼ÿ7<:[U1paŽ2$ðšy½tÿëô•>¾MÎÆ’ÿzèuò×öïþü[{ý»~û_þÇÿüÇßþü¿ì㿃¢IÄûÑc ÿ}ûGü^?ÑòÃOôì,w» JÉEñ#“&’Ö±µ\Ð.>±u?s|<£`ñ4P ~ý+þÂÖÈË)È9o(yÿ•ÿÊok-Þ•ü1¿­u1.hùÄUáömE—-)ã*ö‡oë玢þ¶8ä/|[qB®ãþ¶$ÿßÖä…àõÛŠËá¹}앳[«ñÊ4e´<ùáÛú¹c­¿ùKßÖ±›øáÙú¹ƒ¸¿ùKßV¤”íÛ¢ü|[¯E¹ÿ±ßòå`·÷”q™²[Á™³½å[EBÉÏ¿·ÞNøþ>8ä/}[e±|ßßåßÿÛŠû°úG~ËW6þºåá%ÉßÎÑY²“2‚ý?®‰?:Ð÷¡!áÛBãÔí-/ùø¶*ïþ¸ßVÄѶ·|dfÔ··|Ô4œÛ[>îû?yËÿ\LÂ߇ü¥oë¬ZrõmQþ¹ÃÎ?»'ΙÌìÚÿíü«ßñÿúÕjdJ=íâÿÅæ?Ñcé}þ¹"&ù§™?î^Æûü¯·~‰¾Ð’ù;èÞÿýuEåןæß•×ó¯~D¾ûŸdþ‚0ùûü£F‹ÇSä¿ÔüõBzãÏß1‚ÙüO2ÿB]Çûów½öÓ¯%þÓ)ú_Ä…UN*âÔ÷òã/áG9F°¤œßþ×o¿û»ø›rýM?¯³\}¾4ÿ'¿û÷ßÿï¿)%φŸ£Všðõ>g´à¯ÿìÛøíù»o¿åaóÿû‡×Qów¯“ô·ÿ-ʼÛÿòí?ýão¿ÿ7ib›øù„ýÓÿ@ ëd endstream endobj 524 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 529 0 obj << /Length 1893 /Filter /FlateDecode >> stream xÚµY]sê¶}çW0Óò`E’eÙ>3} “roÈIs§ÓNGžLm“žô×ßmK2äƒ ¥Ó‡ŒcY{iï½ö’Àˆ¤ÛÅÇbõü]?&7Ü…OÝ›ÎÕ¬sù™ÅÝÅœòîlÙ 0Š"Ú E”øÝÙ¢û­7H—Ë ‚{²Û*Ù…GèWb[&Eº«Ôû¾u§Õ…WwUmb»°ïüóìÖŒ‚5HÐ{*e©ZÒ­zNîú^)ÿT/¥ÕZϾÖS &£ñÔ|߉ä‚âÞó•~Ÿý§ƒÝö Ŭy?z4½_7;÷Î:v¸w‰ÙzÄ9é&›NÝÎh€HvJO‚n!»ËÎÏÎV¹ n¢"ÀÝŦuTÄ>bð b~¨¢â‡êÍ =B cжzÓÞXTEú]ý¿+òÅ>©ÊOêu!—bŸUÏFó磯nûSèM"Ì{—ë|#/çižÌ÷i¶¸œÏKÏG„yuÓåä2Kçõßdž‰•ù{FÝöïû×ÿÕfØÎ› ¤‡Ó3¿³^–'"“ŸNu!³Þ7ò»6îºéÇBñ.AQ¨÷äÕŒBhöŽÚ¯g¿Þ”Ûæ³!E6þNÑ×Ùg/ºð%̬ 1çsßfüÝ×ñp2ºþQóêhx| œÿAp³Ñø€ÍGuZŒº¹ºð"F£ÆV›ùåö¶?¾Š¿DœBžXE·¿Ü gýɯY@gV#^£ ·øxˆ0¬VN§ý›áô¬Ül õcäcrÊÝá7æ¾?œ¼ËÖ»r"–ÏŒ¿ë‡–0ûƒÁöVñbìc3žPÖ0©M* o‡÷?A䜵´¶ïù(ŸŒ‡ýé×Ép<¼›OÅ—5«-}dg†°êèóèº?}¹;ôÆU%’µ\¨·¹(¥.A@áb%ËOïU–ŠËJT < ÐA8b·N“RªÈÇ4©…IÝs_¥™é¹¬W™žY­óE©«XcŠsÉAÙo!{OpÏÜ?ŠEZÎZ6ü¾+T B¶…±• (B„ÕŒ«Õ.Ë+zˆf3ƒ€Ê5‘ù!9a¸)FϹ-†ÒÚИû´w/Ê4ËÄÐ)Pä\ÙQ°›Ÿ°Û†‡mZ©E‚òœÚ­âsµ¯µwô*FßbaBã1:bÔc+6²„xÑ™ðp#Ë›oyõ<ºà+±Ô+“d·s†ˆQxá…åµ6Z¦J Ï-c0ðbÄ.¼€‘¨—Ù‹zŒphUìAèb™@Œ9 }v -ÓhEYÊ¢ªÖ¢:(‹Èr1DtZ¤²•£4ÁˆC=l¬ÀÀ7KU‰ã…”XF/¢g‚÷yõžp·ÊAQPClêÛÜ‚¬m—ù`®ü€¨|Ë ÀuÞ6g—=ŽEþEÜ&M >&zæH/ ‘.ç”öä£Èö¢’®qŒÁûÚ¥ëtµVHc8¯ù–Ãcƒ3D„ÓSõÌð讦Àâ%Î3ꎡu¦58ÿ†“P}.z…óì¬q)‹ï™Ø®^"=3F°Ýô-°¯œÊ5Ø)ûŸLª¼(jÚmªß”&U‹(ù_J(4öí’–žæ2K5d‚1cB;C˜ÉX(8‰ØˆÒ+ð̽(D–ÉìÀ–äµ)W‘}»*„àb­ por½/2g~Š#xl|L©F¼ÙoK™©¥B‚ly?h-Mò $…,\k‡Nþƿߗû­3™ÓІ¡¨Q»‡U’o—éÊ1˜!’‘¯ó®àeYÔ2Váˆe,8y]m²*ϳҙ®‚C@s`ù“°# »JOà`ÈcÇrK”𮀳2éè!¨V‹ŠõŽ‹ÙÔ½{A£H»Û‡ƒs„£DíQ%+9Q<­D E‚ªæM\×&&À±²tåiªy ‰ë%HåôeŸåéà ‘ßKaß(ª¤OùÖYÚ³¶ö.Z‰àÀ­F‚RÊš äÂß²ªG¾‘Sãþtê(”Cäƒ+´™ó´Êw¥»RÆ^¨wjU¤ GVV%šëW#U8 ÂО1Ò0DÁ©‹fÄÔFÀ~Vú|׬ÃmÙT޲¾. åAwªRºV/¨”èܹG5bj)ŠGY8z4PëÕ_”s?£ù¬%¤B–k±“Ô.Cì !õ’~™RYºÙgú p‹4Iº+Ó×eö,}úÀ* íêY©>b¦³s´ü®l ŒˆzL*-’ÐZ$l¤‰©ÖÓêÉ$¬ý•&Õ4ªJ·‚¾H?c§÷H80:j•í¥ómEÍôê¶b·/ŠÄ02$¾;–çÜÆlµ [V±sSÆ‘V?‰Mæ¨ï¨ºãhv*É38z5÷Mê~ÒÇ–é•q| +'G瞱؊•<:@3뫵®mt^šœNçÄ+éó¯þ(k~²7Ï¿ÛSb“‡`Xif¢Ê*=b8ëü¥^…f endstream endobj 538 0 obj << /Length 2688 /Filter /FlateDecode >> stream xÚµYkoÛ:ýÞ_a`»Ë¢Þê¢X8&mí:Þ{w‘ö-ÓkJtõpš\Üÿ¾Cq(ËŽroQt¿Ä1E‘Ù3gÎÐö`5°¯Nf¯Æo½x[qàƒÙràÛV9ƒÐs,‡¸ƒÙbp?<ãË屇¬`yÅ©89a4¬ š—IÁ7•þ^—TMZÔT=FóÅ÷Oþ×ìÚ¼{øX²Rð\No'£’}Õ_x•âê).q6}wsgžohräØÃõÞNŸgï_ÙxúgŸ–{ÄØ–oûQŸa`‡á €Ç/<š^€ýp@Bp—ï)Úƒ8Ñ}í¼)[¹Úw §oÿñ[Çï„\ï;ƒ‘ã[qëEîÉç½7÷°‡=üxäDCV±âhäºîð½úð†gà¿ÆÈÐ:yž§§Qõ§ Ùn:++žÑŠË\_Ê#'âÃÆ¥êŸ/x’ V²ZT<—Yƒý¨¬ >¯wKÔ%ÏWÊÒñ­Äƒ!Vì£+Êz³,icõKs—:Í÷—§µÔbQÒññ"ËS1ЫžÊ,«sž4')õ«í¹«`Ž™”Ú5#=‰{28ÍyaB0Åv”›Û×:ÆO`Îëï3ãÀÝĬ0Ì:Ö¾É#׬8V„­]$°{§7}®”;tdÆã×&Ur¥…=aÅŠadOS ^!« SäN欔9ÆöF?_ëggúc*Û»9 /ªñkζf—S‡É‹i´b9+L’´+mšs4~PyÌ ÿ‹e-ô†eEWlôÀK4¹RɩН*ƒµ#¶¨ ¶#„H8ƒ²]wWù¦_eeÙR€É%{ßè¾×»EA³Ù›ñŽ"Ô;s.§ßø¶/a9HÅ%›ë86`â'åñ `×éM60¯ñ ˜Øf\"ó Ž>fžÇ±²fl;c@:ÆväXttJ“ê0 !Þb¢‹p·á7Ú· ³?ð0åp‚7 z-PÑQXP_ëBBqêË%a©*̃Î+ULÖûHz ÒÍ:[íNM^%²Î²®™1¤qCï °w‚¤¿eŇÎ?ôÜ‚-u*`âI뱿e‹Ï}È3(´o‰mÛSVb“´ƒc‘8<¡¯Êqý¦"·x ~ï›MþJàRYYt¬´Àwcýj¡`娇JèÛCeÑxëüi„îØ'$'ˆ¢ŽµÊÒ(¶mËùÓà+ÜÇ/ºVàG˜¦‡×›gtË<ï-dïä•>EÞcõ_õ—iµá4D±g|~¡¾0(¼Âeï²Ç*59õ×Lú,OJ?–Æf¹Ô‹g`ŠJ %GWÃ)µÜ¨a³CSé ®ª .¡5´ú¶Æ æ¬Õ,?‡å¹r ËÉ.U¹¢Š—ó~[ê€~šu'êÝ„/0™ÿ"bß œè <»É'»ÑW(¥¯<лÔrž r½Ceà÷c’¯˜@¶»ÕKž(A­k¤\—¸Ï5×sªòÁŒ•QÀ”at? oÖ*ð8áŠJRn‡zuÃ%”F„€³6¥ú7=©£è×8ç0Xðœ½È±g5¤]efW;ÝqnÈrǺB WÎS=õ¢PÆo™`êàˆëS߬ض…‡u‡Fí ØVµ •á=z!£›ýî… üËpõ³B–r£ò‹Ã¢–Ñ,£¢ì!´¸^‹¨ UCX›ExÑså…C­ôcWѱÉ!?…à0èÅá-O¤ ˜«×&N‰]vºÔFK§ÿؤ8h¢F‹Àܽa¢¬Øâ0Î×¼«öô+I Í"F÷=3’Õ6Šq†uNç\4½×ŽŒJMFÞðkMü <%I^dEõŽ×jý[ŠÌtÂeÅzC·_ºØRh¾‘4[ÎÞ´çuf-9vhÄýîFÌÆù¼²\ŸÄ8 †jñ<<ìÈLuú\\:‘å9ýßüdà Ôb²tèMUWzAÔ4ÍOŽOÈq+7]üqæç]ý >ÜÔóŒ--÷ *¬œ§ÖJn»@ÐÓV¬e²âÿì ™ºxãÆ$ò|÷÷_þ¨°ùo6YR±`O0 +ÁF •PŠþ±—}ó}w™¿=zžmÅÜ‚) ð·/wÿç€óÙ«ÿfu^f endstream endobj 559 0 obj << /Length1 1687 /Length2 9571 /Length3 0 /Length 10664 /Filter /FlateDecode >> stream xÚ·T›é.Lq+Å]‚www×Òb! Áµhqwwhq‡¢E ŠŠC‘" ÅõÒ™93sÎÿ¯uïÊZÉ÷l{·<û]_iµõ8d¬ –`E¨œƒ‡“[ §¡¡ÂÃ àææãäææÅddÔ‡ÀÀÿ‘c2‚]a¨“è¿,ä\Á@ø£L4Ô€:TÝ<|AQ!Qnn/7·È ¡®¢y ;Ä  Á P…:a˜ŒrPg/Wˆ-üñœÿ<˜A,!ö?Ü2Ž`WèÐÂmÁŽ'‚€=(†{ýWfq[8ÜY”‹ËÃÃèㄺÚH²°< p[€.vu[~— Ð:‚ÿ*“ o ý©ÐƒZÃ=€®`À£À;Á]Üœ¬À®€ÇÓz*ê-g°ÓŸÆê°þj€‡“çïpyÿqúÃAN^'€5Ä ÐRTç„{ÂÙ@'«ß†@ôÑè„8- þHP”Ñ+ü«>Èâ ‡q ¿käúæ±Í NVrPGG°†ù;?yˆ+ôØw/®¿†kïõpòù²†8YYÿ.ÃÊÍ™ËÀ ââV‘ÿËæQ„ùÌ p ñ À.°'È–ë÷ú^Îà?”<¿Å5øù8CÖe€ý ÖàÇLÐ €»ºý|þ­øo„Éð‚€àK° Ä óŸèb°õŸøqþ®OÀ+îGúñ¸þ~2}d˜ÔÉÁëó?FÌ¥­þÒPÝí¯’ÿVÊÊB=>|¼^n7¿0@èñÁï¿ãh!åñ/_'k(àw°ßù>6ê?9»ÿEæ¿6„ðßÁ4¡Ô˜ÿaº ·7èñ‹çÿ™ï¸üÿÑüw”ÿ+Óÿ7#E7‡?ôÌüô@Gˆƒ×_Ôuƒ?®ôqœþ×Ôüçîj€­ nŽÿ«U×AÆÉæ‘Ò<üœÜüÊ!0Eˆ'ØJÙþI›?å¿Îâֆ ¿¯˜G/nîÿÑ=nÈþñ=róOö¸rð?ùƒ—ê¿óPpA­~o¯€ èê ôÂ|þ#øð<®©Øóv¸8 ðGÀcÍ~k¨+æïA ¸d‹þDÂ.ù¿‘€Kão$,à2þ‰<"ÐßHà7zÜSàß’ßµqYý ò¸Àÿ‚|.›àoüowäøÈM.§ÁÇhÐA^—ó?É<áüH8è?Çó>Fsþw8~—ë¿à£öOƒÃ€0ÛNç­yœÌð÷ ì aÎÏBAb!võ!—µ2[ãâ(Gé—/x9Æ‹ÍÐá Sæë‰z9Ù joçûyÍìº5e].sWæ~ùl6Ð4zñŸsÐ(îØÐXÆÏ>œ?™Iò¹ ¤›}ÖŠP`”*K-Zæ:€ M…Ûƒ!ee3 ÇøÌ÷y}ß×$&ÂrE!ÕÐÍ®žÚòlubJÃßtám–Ãú[§¤Ïó¾9ÆoD›D¤ifÒ©‰w]a&zÔà® /áõSõF½VuÚúÉÇS¦”çG«1\*ĹÍ+sßÏÄ÷±T"Þ·x·Ê’zY¯yb»y²oJËœÜ#dk‘lÍóÃûŠ Ïy‰P6Ý5¿h;Òj17œ©eH2éfØ—Qþ°RõÊ^5÷ñæ¿/üÕÕ%Ë´àRåƒí½Ö°ä›Y\p}ÄÃõ±”Q-çíá¸~î[ã¹nª>ä-ñ«òîp8X›Ã‹†Šhr+öº#CbH9Û#èª7úßœQW"Æ[!”kæ¿»>}MüiÚÀ‡é^þ:úzßûn1 ‰éÜèòV›HÌpªÛFp¨p QržýáX²=M+P•ßQ†{ìN—¯y¶•pا‹­¸}_o=â¶5¡‘¼©%ýÌÖƒ`‘9öi¡Îpðnb\t‡ÌÚi[^ËtÅÌvG¹ÄktN‘ŠïÙû§|6俲%ph^u™Ó@͉~ÊR¯^¢5ŸÑÑ!n6çd}XžìB_*´XB’‹¬xOÚ<¢5ßWM+KžÉûýD_ÌI0NÁé8h¬ã±{YlSŽƒÚÍcÙÕ–­úèkÑeSfÀÒëa|zÅÄm—ü³þ‚×¥ &Aº-™^Kh!J€¾ó=ÇÔžõ¬x3kŽ9@áÀïm¸ûkÇI÷×Z7•y Xº¦ÑÛ75!ÅÂÙ"2Æ;”‘%¦» 㛈‹³Ïg7‹¶LÌüé=Ú†Ä å7—EÝØ#@Á_º¿æ9b›\À›~òì‡QS=ïˆ34[þ&û]R—§äˆõœrÃõ+S}…ó^»LÝáH.¶¬ÍMâ=@f:ð¦÷‹¥DçúÓ¼¬eZË¥×VÍ´ÍbVü…Eú%ÏæDÙ7®Ý éAjq¬K³blÞDh/¢kð½ŸÚHŠu¦W=$.ƒ–‚[<1*×mãj¸L¡RàÏ_.$ÞìY·5‹ÿ´S»f°ou8_a4?ud0ÅÍÙàèÎß"±ª/]¥ëOhóø|~M@Nè”û%WqÁÇR¿s¬Ã5ìÛA~•O„úÔ>Ó›žÌ‘9"#¥kׇM«’R¯ 6õó¿Cu=2§×E1é³ÀmG˜\'í;T”½¤Ä^7­8~!ùáðí……ÁítB'.ð5ëk¿üíÉd–Ú0ad=Ýé)^$øâÙ°F^»-³Žõàv\Æì8ƒœöÐ5É™®üÊš 9Gèê÷8c¥_ó"‰Õw[b~ÉHüH43ùÒŸÒ`S+œ~¤= ÄÊxÒlMº»I ÝÂ'FYÿZv M† |sC=tz†4IW¥ÚÝ6ÇÄ<•¼ýx«”(f¥$hý8zíU8OïL€Êa0N , ¬ÌÐá}É'JšÓB1,n¬4éÃsù2T!«Ed6wÕ »Œ€‡Z/¿ÕÜã5A€ëçü¿$ލ>¹f¼w÷Z¬±5cíUV›¯ó59ýjáAÐD®±_ÄÇÎÚÔé.àÇù¶D¤”¤6NØÑˆ‡6ÞÍô‹G¬àõS æ>47¬%¶8ÆU&Øã?Á}b/›øfðÞáPÒ#qåÅžø7eã˜ÚAdOwüN¿ÀME†,º,KBZæ&o{y]K¸XÃή]qkŽ=Ö¦&Ù9Õ4*ÿUÆéjÃÒƒ k–…ÍT¸ÎÛºz æÒïb£¯kužЄÈ9[î|’»ì“Cï2)¾bŽÂ,¼ ½Š¿*•'qEˆ°žöÅ@z|WóeÁP‚AZíyÖ@#ÜáZ_™rØiêÞ+«l08øp •A^ÊŽ„†òÑŒûšÒjL36·)¼Û^/kV3¥'+}1à‘n ãäAšTy²7¡èÌPÚhð•K ÉaÎZÐÓe-Ÿ à ³Þï.HY™«•ñzÑ2Å>©æÖ¸Î êù¹Ù®ú0ͳ¨^¯3ÉÄ«‰Å‰Dª=×p'Hµ™Œú •f˜ÂšÿŠØ{iÌ:½.?mÎZ…uù•5™¢>1ß4 cÇqE5n’ËÛêf-f”nŽ—´ÑdÔ¹ûª}˜Ê,”®:çñMT:çEú¤–ê~\’ãöø?H/$t< µî…ˆnßÐSˆ¦Ì±˜«kK%4 hÊUoëiœ}yº ™‚ƒ78qñf {ë˜uÎŽÞ¨/G~Ox'ŠádÚ÷$—¶E1rud,²õž|wA=IÌ<ÓJ'UU…¡¹=µÏx˜ù+)±£®ËÁE‘ê+ÒDëY\$öÔw‚ ßHÌy®‹¦ý=Xï÷+(õØQ¤x⤂ѱ~ÍÊÌ ¬z90m¨?i›€¿Ï§A:2ˆÇ?ü±ƒÑCöÎQzŠ•ø&^ŸP$~Q¡ ±ÄHˆc!u¶7úY­ò®ó6)P•šÝÄ»øî.×Ô4uˆ‚!ŠOOÄ/ž±`ýºCõ»)/#5_ïÀ©_i?}šáhÅv²V»¡†ÕÞó| =ú³ªþۯ껚î¿ðYܹçß;;¹`k½Í:çüN`ÌßÉHß­­ªçõÎùrœR‚Ž)®'çirè_¶xo™¹‰×Ž ²O”Jøªî$Ë›ÑÓžöN.C4Pd÷»ù8Ç{?{õIéŽ*Iô›½³ýºÇb_“ÕÁ¶œN¸”†™‘\z*=p&„¡?Û'ÕºË|uhW³¡H¨¿Ôñù);ð(˜\w±öfÜXTüÕÄ1dÏ­cÛ@Û^EìUØ ·<Šb—«vùÕÇv÷‚`_¥(kp&ÙµÓd±ùCÐLJo7º`¨…{âz»«‰³Ô‰™êšlë/rãD¨u³mF(çÎa3¿ìQ ƒÇ‡eòip™çM56Éæðžaàž/Å›½®šü¢•Rç°<ñÙK‚ò´ÜÌ[@!ú5™7Ã}Ð(è`…{Ô^/Ò9®Sæ'¢m™+ +´óŠê§¤{û¨Ž¶1%Û¦)¢àP@ÁZ5…EJΆ´Hm:ÔDZ= ¨Ÿfª ÇúñÌ»»æ99kï…X‡Â$ùVhô½¾å·ånÍš–îÛNÞä.Éw?Ô<]øúJÖ>šÃ˨ª²vã?ûNÍ1¾á.“ØVH®iOæ<â5[sm(Íc¦R–¬ï,h-7̈Õ\|š+ñs4ÊÞå8nÒX—÷†YÀ,ýâs£çïú`­Ò„æI°.Ä´Ü Å7Ý!Ï´>¼Ks8ŒZ±5Q²°|r¤.Îla`^963à#¨qÉlœ9;Úø%‡B÷îÁ½;ªõÌî!F*=ïziT†jºe[€³&Úe:D!¦Ì[ÚY/åÐÝX"Äß¼GÐ.¹8¥£-îqÀyb¿r‘s %XЇ¥$-ÝÙßpmù¬¢îN&C³Æó Bâ> "mü(VbÄ‹pïø¸?Ø¢q,:rít÷¤¸O!@û61·;%òÛ‚t(mj³ÿ¦<Æ4½°v@ÁIãÃ/2UžÙ^­„ÜÏ„Æ×ËRW;ûsÞhb1æ¦I®þˆ•“j"¸à·X}¿vå*„”lbÛÒ¯>Rˆ>»’•a8C;Ú'eÈbmL8»¶u}vFŒA®ÛÅ œ2à,·ò¿PºçVH_Ç@(^‘æÙl.‰ñ„ÔF¾uÁNk­y—\…;ëüݦX󉇗éê¬IöŒ×Åñð^*—ók‰Zóõ¹˜ÏÙ™~nXOÞ‡¸2Í£Ü5Ô.ûýµ~«5Ï^[‰¡à²7%¦‰¦®ýÄ¿§í‡*A7Y¼ËdÕôOK‘3î÷^aÔ¦a~I¹Ýyµè¾¶_CŠ|#i‰ x÷éuwXˆoÇ í™|ÃÎæ]ï•É=G÷ÎØ>M8kÞØq&A>£nŒ<Ë\ n?³Â‘•³ÇOÅXVÖŒ¢X~u”A†}¹|POþIF+¹: öÑºŽ‘yéÆy\~Q™Ž— %Ã9KíÈ¿6Ârã”VÂMá—Înr:󾼸Xƒ]mÿHËõê¼ÊÖ/Œª°yõF¦Ñ&L)铦ÞP$hwæ¶}Ο3lyCè‹\¬™œlþzÔN-¡Ä²kü¤Eê a¶ƒK3¯érw†&˜"Gm'™»ê‡TÙ”3OêÅ1–YLú !ž…¶¿Þ„Úòƒ”ÂÕ¶EVSÛ¯ˆ"W^ †WsÑ\ž³Î|]ûߌ *]‚QšX-ò]2XUIƒCÐxVg6åÕS…’sû2Ki'¶_cbº ÑN¹‰¼^a5Ä!óÍ~ÔïwÔv¿ªêÓ¿&_ÎMqVíòÉÉ$Vác%åõUöI¨œíF”©Yüü˜ü‚E×óh%q7©ßC`’sÁ¶œ½]^™l/ož{ÔäßÛF¬Z‚½ÖzôºDÔ™xpØÖKm¹ñ^QLÜø!ïsè­ŸïÉ»–UŒ<‚S}.×î»Ršš#™~Ë½Ž¡¢Æ›M‡JFïSîL ?ì{’¼¶œ&¿šIóòɶ”ý±®ÓÔE ÝÞº=ýrÞi¢´^þµ¯*Ëé² 2*¡{ò”»”¼8Kàhê‘iqÖ]ñaÊûŸ‰•ßVv•>áõ&¡ ´dê3ì¨hœ¯{E!d ósiPùÖ¶tÓçIX’¢ ¢$ÀŸŒ ÛPC wPÅ-¯R²óÚž`n䑾a£“xš…¬´à-Œ+¤çêÌVÏa¶ùIz½©4= ¨øæC* !ýH=Ø÷&ýÔ²æu6\=\x²Ž;mäïÄô^—5˪Ëç-\Å8FªVb‘„g}IûJÔÂÓ¯¥æÛI¸wli5SZ"[a2~c¤&Xë^fÏØ%<Í£{ß ¼ëY-ÔB·“]Ø– • ù¾%ò>!òUì©—|ò|7š£Q©9}¢eð!Õ׃OÅbíYUôÂ:98Usôéø†e¤™¶½¤;ˆ¿Mq¡¢†"ö¤B¹Îãà“äXžX)¿ÎØÆˆY…š”'Ì/uÄOIyÜaZmÁúOí¿¤Y½€]§*ÇÖ[Ù9 m¹xéN‰Q¯{bIœrd»¿A¾Uš ô«5n;ôeÌœÖLp°@ gW™+Õ3S7Œl¢*žÜ»ŽKpÕ=ëfâQÔ÷S0=îà+X-Óc¤dÒhõŠ)2–+Nư¼Úh-aÃñ R+¼èPV%dc)nR9¹†‹£òß_jŒ˜“›ê¿Éðžî^Cu#¥ã…i·ú9·x=9 +Ý—£¤Ž‹rÚ¨Œ—wèí?Œ‡‡˜ý@¡~M&4SR¥Äö²g4O6ºn5²{O¢•iìµ¾Ð;aÿ€ðxúô©µÁn‡”Â4DÍ4õ­¶ª7-¥½ù”…Ìv1–[¬Ä¾ðh vÐT7þ·CËQmã'˜¸a»BåÏTòE +Mœ"YðIGyßbÃ^€7T x¸dé]ƒU%®B@ÒÍSaÐWÔÁ²âËõ6N)îÆeŽ/ zrØAB.`ýÌbâ2qË,ggx}ËÊT-\ßHË"Œrê'?§–'ƒg¢çw¼ãØË­dù•£6ÂjJ„æ‡Ü ´¯g¡§Þ¥FÁ?ÇF!¢C¨Fl'Èij Ý·³úÈß+`.áú•]¶A‚® {'êIL¢FÆ‘ý € ›·ÅMêV’ÑáˆjhYO¥oø¾˜êiŠ ?·AÞ-]E7Zaٜѵdœ¼Y€F·¦ïHF >ÝèògIÇÐJÄ|W1ôÂCàÝ躯}F93˜Œ‹tEõ]—VëZõÐYo.%·Æ”ÞÖyR—±ÿdë ‡n>³d ëø5ÆTùa^7¶;Gí¾*œn½:ÚE³A,Çi::Cͻ̷hüI¤) feÁ+!A„«5Ð7TèJ¬RŸt5ÊŸ®õÞ³ÙˆÝsî±^XEtBºGèäyfUYÜ–p Ö¿ÿJÓ«Õ£Q¶§™¡Oú9Ù›Á]Z£ý5Ìñøk¢æA•¶#ÁKöý^†ð˜ûq¯¬ùðä'ʩζíCm®)©Óâjbß²hÛ\­â]úáHtZyÑr„(<„PFD4B éF–†gÒÝð¹zÚµå+|ÖkÑðYî#^S!OæíüÎXÕÚ¬”œÈîT¹°QKñ³ØSu0î#ÖËfµƒ”9¶iI0'ÇôítÜνY5Ù3äÔ‚Á@‡Ü£ÁI2]6"÷>hª|IÆ‚MØ*ú½×뫽ü Á¢¯S^‹$OjA-uEšù•¯­{”¼@=‘6œþùIØVW[ç¥B…Ct=Õ £Ñ”±·äšOe_~›t ½ú¶AûzÐJü£˜./øÅâTÇå K>2ƒ™1Îz/$ [1(ƒ,ð §e³÷IÎ (ìÍZÉ;¾,^B3 ¢Îvþz®g¢ð­gŸ›v™"rRG~pUͨ\ ï-L!Ù}>KbäÒ4KK£*DäíÝî9"Áú`æ$ç}{b­š,=Ä&NÃɼdúùÔ#Ï=äãB<3ÃmŠ—ìâ«ù¢Äòç7]wLìýuB‹EŒÕº¬’ðWûÓØEÛ«À2ÌX3RÖíŒ9¯5HEe›¯«Õ¸J(Ùsál÷0zDaØÈØmÁ•©1¡&´“‘í,t¨ßÆ:øÜ ôœÓ‘}²ÒŸ!ÎKlÎ.%Y³®³w, w×Ìñ9æÓ~ ¹D³>¨eg¶ÖsúÌ8,Üo^Ìe[-y¶$[PÖÐKÀ°ì_TÌfÙ¹ž£m¹­JQÐä|æ'‘Wø<´– 8H?O›Vu`°U¹0¥•¬<˜=ê·Ø¡$œÐ?¡³ž[ÖñO³[Ìcö•J=”bS3¼ø¹.κ?–D<äÂíN3’Ü™íF Tã¤ßp‘jBi†þÓ«œºvnŽPó´\ç4Ÿ¾¹ÉÏ\%ÓK{+ &YËÍm¹ßqƒ?mŽÒ2WLÆ»?®ÒÊ‚øÐ6ÚœÔNÈ7~Qv.GK|”2êq!™›V«ûjá~/1Ö±=bOx½»ñ¥`ʴǶʻ"«\Ýó¤},® û<ÚXžÀ–Ò耼Õ|qZùRt.…èæ–Ôiúé¶8!µo f8 u«ù¦ÁiëÖñÆuòF4RKä S5û«u!¬MnëáñºfAbz‚~YptOŠ×±e;"]­]€ÜÚ—ûþ Í‚iI!¢ ´ÓÃ]´ÄÀU#IyüÒ*„ޏ©ê&z¡ˆ¦Ó£ºÌFºß«1¨‘‹,;5*8X‘Œâ1·}9ˆËí9å0uÈ[»R§|CÅBt–°Í*{ý+8e¼™XFîdHÚeïu‘´Ü<\€²K\D4Ê-§§bÝônc†dãùA]Ww_µ0Œ„;.Aöóû¯õ›¥C{‡w$Šfh€ô7û͓IJThõ8¢•/Ã+Ù;}F„ŠøûQÉj¾Þ4¡2#af«}1zŽK#å7é˜åÓŸnE%ò5qDò E ²ÙX•¤0Bž 戟ç×ÝpB2©wÑN PÛ®¨ÚÓ•N/D+Em™m*+Èã[}]Aº¥?¢NŽ®ÙÈ#k©¿£Ñ&@6ÁS¦ÕšH4`ÆâÖ(U´©Ä<ö}Á¤ÚØæYéJl85.s±ùª‰Á$t'å»Ò³sgbÞÛ[¼KŒÓõ;ïô#ï÷‹#/Wø¼l^ÃÙuT‹hÊ‹Þ6œ^ÁùÝß•AöϹ©/¤D,Ù¦c»¬cÄ(wl…#¬í)Ø"Š&ã~ìeÇÆ×~}CUÓµçà<±DFÔQs&‰¡*øQ"\™ùó'}~&RH¸Eõчó ¾ÃxçÔWw–<9YÎ}‘CíøÒ^ãÑ'<­.,QÔàŠ’A\Gâ*Ð¥ì÷¥ñ—xL „,{‡DÄ×8-bf[Q ÕÁ†¤Að5ºï܇ÃO¿$IŠõejm«Œm_¢È÷½=7ÖhTP7‹Á1«Ó_?ZÙñ'pËíKÀ£7>¼Õí¬›BÁ¢È4;`F ’.(ú€þ’$‰=£ÄÓMr¾–·•>ZQsCw¤äG·>fDZz;Æ™³Ó]û1Îç˜sfgÄ1áx߈‚Â\/ô¿Oáåhç€V£ž,æÞî³g±s”u·iR|cŸwß,â3Zbû×dÎô[PSa›=#ÊLÚR´ÃY¢¨ÚÞ~½ðV®?æ97ö5¿QNz–ƨ%ó}K]|­ÚºaóÑÉ¡«-æÍµ½p4VÎñ¨FHÎc×lï³×E=kR4:z^ìbXÈÅà¶aÍå,óÜÒ»Zš³W†KÈ*<¤=è·±T“ÈÆUkE ¬a{Ý’ö¸äêXª—ÔÃ#ú9Ü[ß´·<¿ew­?H.P| ÒÚwR6#KsE¨'^lK‘aI˜{Éßbªla×OÿÄ]eî¶µï}ý5R’Õ¶/­è{î!`„ûñÍ#f.EÉ‚Bñçe}àó´¤Ã@µêl±æìç+§$-,~²§ZÒVÕw|µŸ ´sRFxͱa÷Œ½½’ë®,Kç’ž\KYX$O‘I¨a)ïÝvG>xÚ[˜@1ê”VÆÇö÷Ù¨²¡[qˆ•uÇ&ï~r&\ìfg‚2¸‰ötò…p ¡MŸNW0‘ép]u‘òר¡Ïùai¶HŸÂÙ/“HÍäíœ6ân¥´o}Á¤åšÖ/G¦·.À_V4£äó®_¢¸}GîFsøY¨`Žo1ôð—|šp:jîâO¤V–ÆjƒCîÅȲ›éò…ÖÎæ›YXƒ„±óâæù ÑUËÁØÔÆT&ïš5F,>¹BÙ7WeŒ°W‡±šˆ >â&zÞ…ªæˆ'Z{W†<ý„œÌ†òj^ΊÛ$vè ǺµÉk|f/=§.÷/›óðîݪ|ŽÉÊå9ŽÛÖT´¨îz"Maíxßû}Lî=…ví*çTT]×n$€´Z£ÊËzyO|åµó “²bùâ¼ 1ú^´•ºu¯Fp‘Øpäb—x+w¦vX;ÇÃ0*ÇÕ:A›Ì¯ 40ù%À@k¤ëÖæO+ó ™è(Nicau”‚«ð‡¤}Ѽ9»+&r¾Él¨aíŸz+ÆÅv7ˆ‚;{ ¢Ñxù¿÷|@žÚ’•ý$*M—ý B5Ðú¼{;jÉØNRóå ¬`ÍéAZØû5&œÑLÉ49½NaœŽX¤ïþjiFö}Œ,&¨™M™¦æLù«¦œý»Ó&ÊÕýÒÔ¼.ŽVþ®–!âxŒ! wÕŠÝ>Q²Ñõ»i≠[}C=쇯$ú²Žj¾¦ b4m¶CyY_3Èb€ -¹é1¢¼Žbbˆd@iõk¥tÒጇ?Ó. Œ4³öÈŠºO½*ܺȈw] •$¡U(yÆ„ŇÄzþà•ºƒQFíê"IO>aŒ±ÃÓüeýa#¥þ|5´œ•…×â ‘ÁXÍã=ñ· S¸ÿh—Sóó;…Þ†ãÖAÐ"“b?Œõc„´ÏæÝ™`tâý² îÙ­hvüèuJcm“}^ŸPCæé‘®ÇöXºÐ•´‡ˆPÕç²Zq$²Ýg–7)žÙçÕ‡mÀs 3m§ÏóS ,·w7‚¹ù]ˆ†bÄ^1SL,ì.pñóBö O*z]Ðõ½C™·ûÁC»í°›ÞÓAòWuÆß8A-Ô7!,Ø$þQÔ¼Ô'JµỤ̂ܺlæŽ(rúð}ÿèÔRw;M:Ò'f'ûf/Ï™[ŽGÑI-̜쪟½Ý)Oâ÷Sò²¼¥$së õ¿(Ê 8qxÏâ~ÂY;ÓŠóçeÍ-Rÿñ>ùìöž"za5òYœ#î“N4Ǩ!ä)Š“7ƒ±Íæ|á  6W^ãÉó|lÞd*æûj´ÒH´:aæíù¦ÍóôYÛlâk ÍÃrÚ,ì9ô„z)v^Q´åtØÜdׯoyUx„z'¼ßÖøýܸà³»;öqQ°\]°i ÒGÎWyPF'+†*Å-%¢v횟©|°îû™Ä‹ËaÄó\{ªo„;Q$™¢àÍüÑ™¡äm®´¦.VEiН‡›ß_%·¼V?PFìüð±´x®V-ºÿ³hxÅíÝV ‘A@,¸ˆ-ý9"¼WÕ6».w?LWÒ ÇìÐZA’k9ìó¹bDæsù}2$šÏ/já#ûÜ‹ÛÖÖscAzþ•eï¾ËCZôy0ŠæE$š*B²¬-8’]"²oNãÿ)ZJäîåË!zM«¶<ýLÍ ö©Ü×äÁãsv4˜^_iÅã²>uÃu‚€/ì½›/‹î³¢‰ZBÈÈuÏÙiÍÈÔG$Þø‰‘§"i§~b¼F‘BÁEž5H{>i€'"ZÌ .¨TvÀ8lÒ£T7¬¸•ÞöC§ËðÀz3Lšçù>W «“Ê“ioä=‹}¼"Ú/šÉÉ«B¨W>Žj÷X˜Ü.íãäš’öBªŸ S"à_b6}†Üã…­–ÈIKù™É´É5Íׂ,ÚÖÓIE¿šØ½èþâ9šR©û#Ô˜Ôx³Í:u±”Zw¾^·WúJI®DÕ‘`˜â狵 |cÏ t$š%ö¤´Bm³†“ÿDĨ endstream endobj 561 0 obj << /Length1 1400 /Length2 6240 /Length3 0 /Length 7204 /Filter /FlateDecode >> stream xÚtTÔßÖ6)ˆ„H— àÐ1Cwƒt§RÃ0À3ÄÐ ÝÒˆt7HHHI "­„„”¤H¼cÜ{ßÿý¾µ¾oÍZ¿9{ïgï³÷9Ïs€L:úª_iÒr%I?'{^½\y®¬láÐ¥%ïzöâó̱ßZc£à)£òW;FëÄé›SÌ©d¿ôÌÓ$-yÆiò÷ÅKÜú1tbï¾¹-ccׯ$ñg«ïMöb%/UQ o×ê|S[š­AI/f´»ª‡jµ4X:¡fË]uNýòÔ,:]ë9³ºdç9A’WÍÝåáÁEÒ>†îØ`5Ïõƒ(R%‰AzEA¼£Å|âËÜÏç÷ü¬’É«p<žäH.M\Ïê7ÞÁ Œ¬vÞˆÛð(è rØ)¿Ì–ûÖÈ Lâ’m¥ûîíú·†ºãàEµÆ›ajìà[í Õ²/îï©´ƒèkœú*ˆ†«ôRú°øÉóÛ3Œ¾†üñL•3Ã5ëïZ0‹vI…÷Y÷L˜lR—?‰íµKþT;y^“n·óèÚÀ†J¦1€“:ZþÒñCé P:hBaþŽ'J._Ss¶­Pô–ey+Ÿ˜˜nŽ^3ã§CÛ‚:žóâÛ•WKUJ†ýtW}–TOl?1æìp^8ü ¯:Fô2ú‰U»ã3wÙ¯ìøÏMU^}-kŠêôÛ*“~ã>5[Z˜+ÖðùÇxº.[ °§Ðâéñ²¦h¶ª{ëØ®/ (nOi|— ¯Å‹‚;QìwHp¿-ÔìÓ±PNI‘Äܯ‰=ƒGú÷—}í6aÔÑ+gûÐG¶K!¹Ô$•ÖE¬l}H¼R)˜‹Ÿ¥5à§ú 0zL9üMÏŒPÊôiµêb,W¹?Ñ€,««ÇЬl ´©,7Ë mZòSlq÷`ä}†æß&ü®eÛ¡•ÔÎ^R0"†¿}ÉamìËì~ùèX¬fP$‘õ‡.Þ+ ZV¬ëqOú³K>Ëd~,¿ŸôóAe{#Ÿš£#HyÙz­’¢‘£D¡{]7f’‡+÷büËŽqÄW~Ööz=XpÍÑÉu‡6÷lmåD–ä•J+ìèµý¿ùò»}bÐ^û ß ½°Ë˜”z‘tC#ûÅì^¼àfŒ^Iðã¡õÿóyÌ%&¹ó§0Õ4 CL/!{ú.C+­%ÚŸe‡‰’÷]ýf×Þž•Äïñ¥EÑߣÀI #OUÿyµ#Úç3¼=Ë<ÿÖ0ïú6WÖ@ê¼xUGX`þcrŒKÒlÿ!g É%M¾ùi;ȳÝ}"¤}6A¦¸±ç»Æ¡Eæ›Êz‡Œ¼IÝö­¸Ë²)¯¦çyL°ÖèX‰¼Yera•zM¼8ç‡LnÄt=±l\¯7E— f¿06gηNÇdCµ.cT¯ø€<ß^Ð/aü”&nhÍb9}ÕÞ–ýx4ù'¶FÉv£éèЦ. ÞNb¥˜e¾Â‹A7è±*ó<‹‹SÄâöµîHãË^ÊÈ«“™þê|#N2Úl žG*öæ‰çWQš½6㬵^¶Èе¦G –Þ™¯´ó›>œ=D%¯á3¢¾V/È%"Ú#Èô—©üØÆyÕõLŸ~ﺤ`ñˆø–ÚÚó%¥8¡7öq:%ªOöÊ{§ëãfî5~XÞ]cFº~­ž;‹-Δ7¿ÕPS~·íw.ÊúojlK±~äO±—Ô” Y †Kð·<8¤§¢î!%ÀV p¥¤°ø`…ñרÑÛ’g1g)ÝŬ¾è&.þ"üý­ðàGÇ’JuqÆ+ó;X%mà1ïÝÄ9"óÛd À!šT¦*¿P¹ò2ã{Û>6õ –WDGj¸øá»)A9ÐgÒhÕG™†dØÏdv.ÚPybϳ¿¡·žr‹ ª¿h´ˆ#‹;k…hîrD±\/'TÝëY›:Úæªpvß/ßÃ=74¤Âî§çmMŠñ_³hCP†c !žô¹‡©@–Lß&xƒ¶$qÆÕ 'ÃûwYÕ1d#–ÍÃWµeóñkíT! =ÍR{}ÎŒZsúUxâ-Ƹ’½Sâ1$âÈ‹$ð-јiÍŒ—?álòß:„Q¯ób?X-7_:rÊXè[Kµ`%Qæ¯}%¥+z}íÈÍ!šñÃÀð$áf£—¥B3.V‚øä†é“h  ƒMþ”äônÄüz6¸!Txÿ¸úLì^í™ìÝž®wÈýåšgZ}Û´6kÉ…(è,ÈKžŽª¶†`=|ù|s6DßÛ¸j•V3“1Nó~"^ÄpÒ±à+Œ#Ô•²ñ´ ´ü}³ä1–#QîŒÉàøÞëä¯5©æð±œYRç :›¬w*:øS¯œ¡¡ÅF?®t¿†HÀ1ËáöÜ}nwQÙí K’¢[£i˜5§îÒ/Ç’»OKŸ@éc×v@vgY^[gÆ^¸Ô¹ÑØ „9Ü×J¿ÏL.Ù%‘f3¿Ú—Lú‚g¤u8­Ìô4¼cž@æöHþc~Æ·\<:w~ßÚÕXSÞ¸ÿ{ÕÖèSüÂNÁ·CG‚“À®ÄZކ÷‡\xv<8#sÔ#suœÑÎ+ìI†Ä‰·:ÇMûžZLIp½)R»¯l“L=ìlˆ©`x·).5øÕNI3v £ÎãF7ÉÅ(˜Ò…U䱘ë©.RõÛÕe“QN‚&¿9¤/áÐÍŽÁXu¹tå_g;Ç·ªœàV~ŽŸB¢gäyùÌâäç ú6æé;ÿ¾2ž—Yï‡{WûØ$q9x2lx›±v]¾³”Nõ¥É‘gÛÜ/×éÆXZŠŸ·Ê½RP®ÊL3u~nqgWö)/Yñ¬ût[â¾4-“9ýìŒéËÉ w^ÕzP·m}Ô¥ŒŸôQHh¯6vŸ£üBÔ[»Ê]¬j@Gª<¤¶× 9&ùÇÊS{`ôrÜHU»o‘r/ÍÓ‰å”Mø0ëNlƒèYr,‘ÊR§\ȬHVy-|&ŠTfŠ?ï=ònm=ŠÏ‡ÆÖü€`[ú ÓÕbÝ*é(ø¢¾ƒtã [CN¶Õ±À5N÷ÖÑûƸbzñIϖƒœ×™G5D”¥5\ëš·;A\Røà.æçÔPògúÚÙïµ)ò·eŸUuÅ6½¦[ó!eðï)÷W¼ÃKë 刱PV Pã={/Ë0,èK²4îLù¢(ðË‘†;tPLÑÕ¤ ™ÅÉ« ‰9¯¡§á¢óI×­I¡^™98ëhî*ÿ„‘µ(”<ªúêEŠY³Ž±Y[›ñÛí»€y…\ßœ˜ä>{ë'Š7¸ôîŽù…_‘‡xbLag³2äÞaé«JM)Mw«waö®&½8mQ“f]fŽ–9¼M­}>sBs8 PH1xÝYÑ0­Ý~jK=¬Éáøö`ŸCçÈÃçDêÚÁmɸ†vü¤ L^1 ´´³d_‡yçx”ÙÕ¾øŒáUäBSàdÇauduìg4¥ï&ì×zšF!ÅX‡gNÈ«…øgMDÝ.G·Ì…7ÁœJTXiØ‘&Ža„ÏlnYñ¸i|fµ…c6Ëöözkd¯ƒiU¹ñãD¦m¨|Ë´í\xßb ;FCM&³nÜ2ÐzB–ºß•+ÉB§YXîýšcy_À2N˜ŽøCv\‡ÐyNµ³•Þü”enŠx¨¿í!Æ }v1þŽŸæ’(£"g½÷٧⺚Toúót åx¾Žo¿î;Çõ%×[SšF(Q@§Å&åö¢z3'õ„Ü8¬ª”‹ùÚN~ù=o­T9#ET¤n“\m©Áœèä êù>Q¹<µÒtkøº%´W/þn¿§Ö½·NÊŸ³ ÙZÖ|ü7†•0 NÉæè.êL•‘/­zÌ]Ü bˆ¢Sí'Cë¾ ŠD˜‘…*‡2v—Sa½1ó«oÛQäqÑ’ŒŸh ÿù^þfP—Õ°pmpòaëG ŸÂÔ‚«¾ ­¯²F†0ådó©Æþ¹]µÖ|Îë"ªŸ\j œâuêS–íΊó“iË.q²(â‡u¸«ú¤÷DÛ‡±”5ÊÙsÔmKÒV›MSÅÒl˜°&ͧé{¶^éÔÓu·cVÙuxW´‚bq:>ÆQ¨à+L}ì9؇7%K¤•f´ÖN\N‘núp+-ž/4úÙÿ~P-0šxôGÿ1ÞÅš6Ï"œÕéê>•ð`¶~ì:ü6uåwTÀÆa½äòÅãñµ> ¹óe\±ìI¸Þ® õïkÁ[}W‹3¨ªè—¨¬äÄâvæ»|¨0>Íàäªé{#^¯ç¿ŸÀ†D¸lpèŸä·fˆ’™ƒZŽ9ä_˜/t}´—âÉa¿´°(Ê(nå7*S|#ßeøo5¯ óÖúâÉéÔõí91•>WCþ£sž- p:´8¨Ýæ@ñÕB…õ7zgBžêJp£ÏL-›ç­u®©$I÷Ið7P‰—Ú@cßäãô=‡'u=û†v¦®íaë{› ñúÝôiKƣ䒶7áÚíïö¤‹LÔã5öù™û¥ÅjDç0ˆ:¨’øx+`•èH $D¤\ÛIO-ïà”Eê¯O·O³Ë,u‰)*ÊÅ+@uõºÍb–”wGðý*«lšߤ'Ñ«·hc¦Î*z°ý ‘¶=ùYš _ÿÈ+È2±?0öŠUŠÖ9ñö¸AýnÜ̓§R£=¥Ïï)äPZä¯:ýÜXV^µ«?lñ3>wj‚M{òy-¹ôGø}?Û±ð:+CP ‰Q¹»¾W€} ‡zœL§Ê'î| °*ܺå€i$ð%ï•©ó!‹KkŒ†Õb³6f‰\¹ô Lœ€aTÎñFkXjïU™Ö(åu›#TÛõì)sLˆ(] +‡êüv’lRå˧EÎìR¥]›]Ý÷^éXò=›+Ù‘™göHnÝ ÕQ(!û´P3öqv#7&-šÙZ˜]+þ&Àƈ~J·B ä Upó®oÆ–Ž%!mOá¼…Ý￵ÄÜ¡‡œóÅÖ¸7J_Þ,Üæô`¦Ö|g.œÁ½vYLM.Üÿ¹HWÚÁöD´ä;­A÷7ͽþ’yâF²)?|wbÆ~¬‡ ödªWüÀ­}P/Í3+dƒŸVÇ) ìÀÃŽìÕWÊ„dy¶Uª k¦0É´°H&ÙAN1ÀEáw: Ð…$^_˜¯Û›ÔMKê0vÖA{Ì ¯Q0®äŠÜâ·ª¡Ñ×–F"É•”Ã0Îm–“Ã:.UÖ<*É–Oƒ½F;¯ÉEC¢¸Y²ÌŽV¿› D®/J±ðoV‡ôrðÏ=ìÃÝj!2C€C ~ŒJZ.øÒFA›ÝW"SŸ_s0çL×IHP¬Ÿ’%û \—ë„ñ:5nüû}»T} =wa¡O&JÃu´qL5ÒH-\êaÕ…•·6å½'e}¸Ç0X89ÛuLùo—¯ædVú¬ÚÍHWœœ=8{\•vÏ$ÙO¼…¢8Q¯ö¼Ôø]çÏ´M:|Îμޢˆdú)ìøaÛõ—ëP·Â§%îäi2[Jbñªh*gÌ&GŽGõõE¥.‚´25¸øœZï}ÑÙ­rí4!Ÿ!¨ßÏò:™µ0Þñê»<(×U4§Îê}"+ú„=…ùúÑä•a…P÷sufÌI!Eƒëcxz†­S„“2·ÃdM  µ®­·Â—öTñ;ÇÙÀNA©C¯]GZæ®'vyw“ è¶;[º G’6]}ã»®ðhHÚZìi÷Çgdˆ¤úã_`P¶ÄMó¿Î­íøk_‘a…XOV€÷æ°ÍÅ ~FâÞ‰à?¥œªH4#«*(j>'¼Ÿ‹ƒð•ÑHÃÓ•Ž |õF_skµ òíì\´Ÿ¾ŸÙ1ÓNAc*àÃìOæÒñä— ÷ÇÈY²·óñÄ(“åƒ4:L‚ßn LVÍ×žî ”hÚ­ vÜK7½"Ï}O_¯U³ô1æ°Ê«øuäžG Ñ~mݰ1Mî‰T?Æ¥´ñùØ|¹û`' ©)¸÷®øNø>ç%y“ˆh§+à[ÆÎÞ­ë2Esntfû—åt %ñ=Mg}ú CÖjz²õ ’,ì]á&ûµ³ÛÐÄèóZYçþØãÚ^âhp ¯IÝz”ìÁËͯ¥Žº*“ZdFí»º]O!ÃÖ¢˜ëš-Uj. .w_ïpqÑQÁ·ô׺ô.dŦ3Í>Ù‘‹,¤«E]ìKOS=—¦ÃŠxDôs¢˜˜±?[×4/ë;‹“å:Åÿ~ö¼îiZ×Tº˜ŸÑÇn~+žÓá—”ñàgSˆ÷iNš‹SÓÒø¶;Í–9¶Ì c“ßZoMTQÓë¥.¯ÇibŠzân÷„-§Í«Ý¸ê—4M)F»ÖÇÅi½ñnõˆÓªK'¢%tu4|ž|VFõ©äô³á ²é‡nE]98± Ómí“ï,¾Ä}˨#®ÓÑ„c`“qR¥y ë…9~R5g/3UÏóq>j†‰Š)ÕtC½ ƒæÉV³›wVÝß“X&rŸÓ?étÛfÎÚ›”síCòkÜY‚òÊ)-6æo›VûÞû¨a ¡£þN’wwémõÉÅâWt0ƒ/Ƭ8p-š Ió÷¶E¬Ü{,½)?5­åä˜^å]‰€X¤ÚJ—úE(érÓO±ðº—Ûgÿ$M½äüám‚÷d7ë¤5}ý_¾”WvnBæÆÎP®D¢. ¢5­æ$Y®ÀñŒo3 Ïˆ&̤Gò©Ë·¨_ÌïÂgÂãî¤Ðßa>~ìËõ DÜ÷ô[çbŒ5œxPb¾B_B<,:L"D%µP£ÖVÁÚ¹ì+gîÐæâ 0š7ãB><ýþÁzv…QÁ7¹º¥#K\”ön£´ MXºžˆawa‹5CÞ²0Ô_¹é¨>ÜÍ¥N˜IDÄTŒ‹l4X„/þØ6[+¸PD4íŸ×åU‚.Üœ^à$:7Zqk¹¹´`÷‹ lw®‡?K›Ëâ1ÍÚ -^’yèÉçÊÙýæ8Vlôsëó~ïÎh¶¼¥)æÈ½XÞ6|~í©oKÂÃs¶)©ÁœeÕ7¨ŧ'Ñ›äŒÑ=jRƒ¡Þsûr¯&ô6’Z‡„¼íXCƒO#h– ·‡°³#”³º§SVº.¢ÓBäÞb¤ˆà˜†øŽ°N¨¯÷ÿדü‚ endstream endobj 563 0 obj << /Length1 1445 /Length2 6402 /Length3 0 /Length 7377 /Filter /FlateDecode >> stream xÚtT”íÖ6ÝH§CƒäÐÝÝH‡ÀŒ303t /) (’ C ‚ %]ÒÝ  ‚”¤Ä7Æ9ïyÏÿ¯õ}kÖzæÞ׎{ǵonv3!UW¸3X C …Eåê†w€¢QQqaQQ1nns þ“p[‚H&÷ê0…Á4@(Œ!Ðó€â ”PZNT &**û/C8B ò…¸ …zpI­÷ @@Ü=P˜kþuð¹ð€²²Ò‚¿Üªž`Ä‚P`OÌ. (À î£þ‚OÁ…ò’ñóóy"…áw%~A€å¸F‚¾`WÀÏ‚F OðïÊ„I¸æäoÜ î†ò!À …¸€aHŒ‡ÌŒ`.˜éŒ½À°ßÆ¿ z ÿî÷Ï@Ø/g‹ ÜÓ  €ÀÜn(`¬e ŒòG @0ן† (Žñù‚ P3ÆàWæ €–ª)„)ðOyHÄ …FB ?KùÓeM˜«:ÜÓ C!I~æ§A€]0mù=Ùû0¸,è๺ý,ÂÕÇKÄñöëjü1Á@$cî`@RTTTZVö€ý]+!ÌhþK‡Y-—û˜§‰¡ä/³9ÿ¼Ræwý¹bb’R Á #I‚€˜]tûÿ"1@DGa\˜òBnpÉωJ"`oLß1ð/DB ‚y®þ–E"^˜7»¡þFÐßóý7,Ž¡>È_À?uñA`¬Q¿¨„©â_ò¯‡ ö»ÌNÁ]ä£îUG5¾V½é'ôiHqœû“Õ3~¡ YD³Ïù Â'ü•Y–ǪOúÚ)Ö4ùŽTæØ.ƒ¾¾«!ŒiH3mü|á˜rgôS#ÉÌ}÷páWÕ7],Ä·„ÌU6‚/½ƒ-#îã¾Ã~¯Çëí#sÃ$ŸæÔ¯SÛÿMz~àáÔ'ÓJ)}Ò ô˜P¢E‚}Ä« î<çìIF” Ñmê=Љ£ãqêÃ×lz)$!Û‰âEA¶+bIg“‹eæbÈV&.&[FÜ#êQž µ­t=†é â¢…îÿw El/ÈŸ.Q o‰eVBîÄÃê:ª|f[€ë¹OQ¼7»iÖÓªJêhÆt•Žñ4¨*ñû`–­7µÅ¦cË6·{OoÍÉŽ½¹LÛx| ¯o úQã½Ø×ß-tòðiÃi_]ÿZ[ˆÕ+å.å[î~ÀÛšvq ór™,OñѨAœV+°.-¥àœï™ |P´BЃ}µsfàj¡¨¨­ ~öÀ­o’¹ÁûI!åµ{F-+TÓP?껑בRF×ÎïŸîí2yˆk:e=äËËÔlû+o)™×T¾\;‰Ù[)§Ö( `3H]•œÙïá*’ÐÕîø4]Ñgÿ àÞ™lð7Ër‹ÆG’¦ìëÛñBƒ[µ½j‘ѲǮ[«Ç¥¥jtŸá–g{å~±j}IÍ¥£òþj¹þ¢iœ¡­óòdm²ƒØ™sÇ\͗ݳ.™ÂÊ\ñ|m°õå…Ÿ ZWƒ›·hÖ°Kÿ³BLðìÝ¢¦×á*ôÕ…‹U7Ÿòa‘eQ.&qgmÌãr:6÷ÕYî_1«Ý43?Íç \Áê˜\cÿ0ºÆ-·%ÑY—LÈÀ…¦ð°O¯…??\VäKˆ»r‹«_²ðS­™»U•9Ñ ^ÞîÀSã$l¥UÚÖ–ðf- Ð^O¥åÜ[ ÌV9gK®W¬@ÚW/Ñ)D—*Ú·Ú`s-k(ÇZ|!Ù¸zòbÌ_;ÏÖSzóyÓ:¤’{êqûô(‰C•]ÎsªïkEaüì nÑÖˆ\¶¨â‰°Ö&yi{«“Ó÷ïИˆkæ±G ÉUQñR­\¨ÞУ¨ÆŸí¬V×ÂÒC¡±x:‚¤ IU‘pFXŽtŒ´~œÒ™¼™v/RÒCkÚÝCKòq²ß¾Y,WpåuÜTahsè))é¨Sè[…lV hI0QƵBãgÏÝšº³™¬¥>½¥Ü¨åòÏáDµµ¯_g*÷19)J§¥'uÈÅ·{Òr(ão¢ œd9TD Ÿê`ÍQËKe¼«Aèû?‹ÿxn¡Ž…yN_£ƒ*¯9`dº uaå¶_öÞ ·ohØ0–ðe·Ët<ÑmȽû¦ò‚®{Ã%žYt™¥ôÀPïÌð…hÙ@²oÔ2ãã)ûÓâ…wßsq&ÅÜÇÙæc6ú úŒ_úøÛ´ûõƒ@±ê¶jÚ9Í$¬,ó|7âôyvˆ‹Ž[>­Ò5áâ‚þø|^V/”ưb×Êøu<ØÚÃLĤ?0Í#Æíþع20æDo€)CÐjX&Öɸ䓚‘3!uûyãí—ä]í䥣ײ—•; ôÓ»ð3~>ùh¿çþUΣ\²–4ÜùýŒÀü«_sÚFW®«‘½z}fáМññÔ°J‘•˜?Û–Œ7»ëXÅÚMø×Ðu ¥HB¯š¢JÕ÷óvÑÔ6›:¿KÅîÂÑË€ ÇKe]>[yjžß´äj7ˆfÒ]‰Jz¤N´Î-X´È‹£ `’f~<%B_Ç_WæhžË~aTìåM]ç¸lÒ½ð0:¯™ Z7¦ÜxÄ5ðu™ô¤Ã‡Ô¾låéå0ÜþâÙ©Rg5ù°œ±°ÜsÁ™[töþís§ç_ ;óÒ–ÓDÜŽ:²¡ÍÜ&šbyr¬–ªüfj" húo’4hõÕ‚å“l¨|EЇVR>Άk|˜A*Q<Ö3¬(™ ;3ðTª¶Ns¾uG«=gÕ«0ý`¸!©#ÍÔøS+ªå«[)Íäë†[×R᥹UÍ' T‘Š1ðkžH6–Ö>Ûã·â¬œk.††Ó#Ú]¶—‹v¸že× Ã ZaÄÔPôY)G»žRoÆR-ÙJíVȦ%ÿ#¼³Þy“`ÞnÄÒ«Ý;ÔôõôEÍZ‰=¸èf“lá­f¼ÑpÿS¼—ŒŽvCÖ–±T =‡ßMs+ÉÍM®|#sÏHÀý‚©^WsÌ‘ˆ0´óú4úýGQ NÐ f¢°éÉÔ#G7)qfeïh “Å ã냴ݶ¥@ÖÛèõžDêÊdCg¯ð‡òA‹èâˆrSqú-KKù™¼¦ÁØñäÔÆÂÆ9+Á&™Ò)ÖÈ펇Ñî/íWT8´VÎõµNÍóœî}çcU%ƒÖÑŒ~:-Èøú|[›å8?T’ß ì«å&7V.çúãöŠ>C> šêe¢¶jù›Øzº p¿òLI¬õ· 8ª£Íæ¸ËÊøô•—ïAy6ËԌ㙮ba„šì_\t°zõruày' íªÂyR,ƒ5rß(f"^ÿ5vî¸|Aë—‰4h„Ö9éL‚ÑaÜKlù•E®Weí?v°SË)/–o7Å)t¿Ì{²ÖEEƒÆE¶¾”U¨ÕN&W×tжüœï±ÒÜ×ÉMgš6¤U7iî\¥Š ãB?jæo:1‘–ݶMDÊÆ`ó:­•³’o#æ¬ÎäŒm÷"Çz×±©¸E’e9°X-FóˆIøQ—@I7¸&Ĭviªý£»·e¯ >q¿|AÓ?hÕq[‹úî¢ÈK§t‚iqlßc{Ó'í7µn£ æôû‰[F€cWÇC§È‡fÜæoŒô¥“+‰îdLmÛ!Š2/zmŽºhvl¼Á!MU3·ÈŠâOflbLο“ ia[hæo^%ìëG¶NRè$ðV×*aÛšª Qèή ¸ Ö¯Ó³ZíŠù¥;yZ.r=†`ÙdULŸmx'æAíoÍ;öy­aË"0GØ\=ƒ—¥³¥gû²‹žmÕÅi=~@¶¸|þ­DsdûÀíÔÄ_"\':—.ø ¡ÕEü¼6ë-¥ ‡¸ÚwÉÙËÓ:öã¥v§Àô¡ŒI£SY´—’˜´^£Úåa-R÷[Ü[w¾ï%þt¦‚7PJv«2ƒiÚÈ®ú9¶;\²w¥hybÏ=*ø!µLq¾}Ÿïµ[ÇtÞQs`¹£‚¾ÿêÿÆ1wÚ&[®ZÒðU%ÞòÆ·yÚÝ8Bš¤ÆrŠÚ›aÅ?DîF¯tÍæ±‡,9=þöUƒÇêVx/z}ÊÔúÎò«MŠ”nayqXï¤ð¬Í­}•])"Òñû6l!¢ˆ¼Åøb ¥j„/d@KªŒï¸Dïà=ïN›ZšCß,ŸèÄúzd§X_-fiO Üù¶m­2¥žDéñô½©WÊCæÒü°qþÖ‡o³Ïj‹Då ͘xÉÞÉ­£ðôªî©|¡õ/}©É'ªÝ/?Ô@7oê“TÒóø¾9﻽Jù…GÞ7a3ë>(¨:0ͺ 9Èü”Ä;eºÓ{¬(By=~$¨n&Ðz«ÀØÊ îÃ1$/ÕK7œëzåÛ¯å"bm÷™~ñô2’ԗƶºÇówÌÏ,âtÒËWlßWJø$Z„¼ïêÜìø^L@keÿnódû Öû¶.фͧâñLúÜ[.Eš•õÛ¬?2ÕftïÞ 7#ž8Ǩ4ð@Û}zj†¸ I Ml´K&GäYeñoÝÅ+e°Á¢V‘ O]\åc&9ÍJQ"ÍëÓй“O¹†¤CÐ=ð_H'ÙnWš™ª¬Ì¾ÿ´bÚ)Ï“^É©°9÷üõø¿ÛèºV`¦S]Orþš® –Š™OºÂ5~Sê7<°/ K†&"[ëÁ-û5Ë*´x×!¨\•=  iMn\€6Ç…½À?ýó°áÕÔ_EÜBÄ—Ó3¿~xٳơ]’NU¾Éëfˆ%œ`³¶²¸ ¹8®­«·é¬Mt Ÿ˜æ¾7ØÃ®Ó²o¬sMÔ7˜Äæxö6^~+¦zè ,eU¯Þ7ïFuÄÝN®YB4Å<¯º‡r„d†B”ã%Kã·×mû*iåŒÙÄÏAe5áB´ªa.q?CáVØ5†|ɬºWœóNÓ#0› {óNâÁP_– §^]hîeØJû§š‹¼£q“öþí Çùš•Ïv‡¼@[¤3_ïã:e×}Ë\ó:='+—ñ XàB¤/>ñ!q qñîl e¿\¼;™}~ó´uû†…`9v *—"§sÛbÝ9ÏWá6ŽøÌ¢eÙrå=B@¯Tæ³µÒ)¤-ûq¿302':SÇÖž;ÙbÇw¦‹•|$pÍqåƒZbw¸‘ùjý[qEÆ ë¯+ÊMž´z©§ôBãâQ',µi•…GnÑ—÷ëïÍ<ºôå ïñ¦æ4[k×h˜…\°1J§Ñç“ÙM©¿)ïòü\ëð¶RÛGÒQ;“ð´vøòJ$a‚ôj%q`udEâ¯*`9,Öñ‡†RˆÀ†Ú]Öƒ‹å¼¸ û®Ê®á™ÓŒÃØ;mýcyÉR‚B¿ž¯xëºï]Õbq7ÕË6TŸ²ðöÅõŽƒæÑÝí1jåg£c¹äÄ9WVÂ;E¸‹€4UÙW!ô#AZþÕº°¯ÁcuXÖnâ•Ï5‘Ù&£¬~*SU§¹~ ÈškÝϽ/í­q¤Ý*ŽüMïžÈ‚<]¾ôë¦{”’¯Ðº­.µ!Á¬­\)«4Ãíümš/Ëlå†v7;‡ »²€ïj¡a³àÖ›=ØN>§*8ÌÁxeÛltS ±[5Ï»æ¤n~É ýáÚË£~ÙKgW9Gé4Ö2 ™SÐîÇ܆¿ b½I–¸90E1P‡Üë½Ù§ò£ îSHW˜?ÅÆ®Õ[|ÂŒO°dÒ3QØíA7*¡Ê¶%‡ñOú©ã•ê7evؼ„ Fyz ~àîê;)œjйÛÒó¿-¾ïC¢•|?4v;Ø_üu;•nêÒ´ÿc±‘³[´À|SËRTœƒ8qö•qSàè¡û÷AÐzÒ#Ÿ­ÜÑ …ëó€ÅztÙÎùí&œ^÷ãk ek±»í$ŠužægNRצ]—#Ïx³MÅ{åý9ë“ØÄÙÌäÐ÷œ©væ¹ëQz)„"JýyÆ×ß²X–KíLþw_¿#hRâ_Ý}ÑV{7š}†+ o¡´ÛÌÑ’§4â)楔ÄÙW™¶éèL ~akU6—ÛQ™ÑÚeØ4º&%4³n[­R(ãoôX±š"ˆh–p{§¥Q瑸6°}âxO¼iÌžäí jçêÊæ£¤S2ƒV¨c¦[b$®ENp<¯ujmOL”¶ …Å¥”.©=[FÔæÂ±Ò…\Ÿ¥ãœ>¥É—²·uECèÇkí9‚fèˆvÅ-æ»÷û|Öµ²Üpf £L–‹ûù5ÅÊP<¸°(Ê:÷ã¯Øs§‰û@ç=!·âz³è]å]¬¡wiQVN.ôN%•DW[:y£<Øt$g}þ `{ˆ Ž~RÐi0YcFW$ôlzÕ®*¾›<µgF*Ö©È”2e÷Ƶn&íB/Ë~á =kù­z—í9Æð‹3Š`‚¨–{ÀÑîLÕMÄU]EëhÅÓ€žo» >[06ñAMôðË¥G²Hž]dšFÕØ-,)X´YËÝÂ{07¯ì"p̽RE¼cÔ¸ f&)ûð4²í v":‡£cª3ëû–ùç¦Åuç«."‚y¾êÛ\€?‚²Ó-~º¸„´µhZ#vDy‡M`‘BÑCÄSyUW]õ›N"±!$B÷ØRö —qYúÌ·#ô…˜¦­ŠÌ>™ÄV¨¢µy#;é;ÎÞŒŒ hîŠÍŒè˜H·1T²îج[õ Uk ”;4ƨ5Iù­xvåŸPäiò·ÐŸmîkKF5lWŒ%,¹2 ž“Wu÷¡ÜŒ4}OUÎC„­Ùu0=DùÖI·¥‚ï ÍlyŸÇºQ ­Ä3Ť/’-`ˆ%û<û:æ… 4$¯.ÖQ¦¡åudܸì:YÞº“ðÍPaŠÁJq‡®¬slªI™¯ëõ47¢“5NþRúDºëit=lÁüÊOä´‘Ï=Ÿž ÙÏ=W¿ÂœHˆ‡oô<]°¥É×;ñ“v9ý¥ UŸµ«bž"Rº Ò5ÜV ðÜA×|"Ž=2 Û4ÜÕ/°¾×»YÕÍ›V+›DÙÉš[åÚ+>Ø´KÚ*ÆV1ùbϽ¡ƒ3zYe» s@ûñ-w«ÌBdU·¦-áÕ]„‡JTÜ5’Íí-vu¢2Uc“£º¾f7Í>ÉÞË 5êÝô²/K¬`FQ?x™öº¬ˆ}A/‡Ã!Äà\3üühUýçUÓ“÷O¼)‚U£úÍ5'k@ÇFKϲñ4…ŒyCu@ªCœMÝðàžÔ@F=ÝhíC%q’¥þàü@òY  endstream endobj 565 0 obj << /Length1 1374 /Length2 6090 /Length3 0 /Length 7034 /Filter /FlateDecode >> stream xÚVTÚ²¥I ½I—HQz:(½÷.EZ H!„š ˆÒT*]EA:iR¤H—¢T HçG½ïÝßÿký¿²VrÎì™93gö>+¢ç-m¤µ<1p} / ‘«u̬•€`°œ , µEâýà¬Ñ+p\ƒVýo¸Å“lºP<ÉÍ ƒú!r@ˆ¢*DI Ê‚Á*ÿrÄàTºÐ ¤'ÐLhŒAâ:l(éå'ò¯%P &„¨¨(Iýj¡à8$ ŠšAñÞpéDÔhƒ!áøÐ¤»ìÇcUA àà`(*@ƒóR—#ñÞ@kx÷þjhEÁ7&Úz#þ˜m0|0’ ~H@ D{Âq@ÒÙ@#S ŽþãlúÇA ø×Õ!2§û+úW"$úw0à°Pt(íD ýà@ }S|^ E{þr„ú`HñÐ (ÒêArø]8¨¯e„’úû«»‰ÅÈ ý~uú•†tÉzhO Gã¿êÓEâà0Ò­‡‚~Õ Fþ¬H´'âW žXé7Òý˃dümó‚ã `0XI „ûá!0oЯ䶡XøoòËLª?‚€Å`R ð$Nú Ap  üwàŸ;ôDÂð@¸ ø;;É GüÙ“&C†¯‚IăÁ¿>ÿ^¹¸å‰Aû…þíþ{¸ s;cSÉß ÿÒÖÆ„ Ò²J@iY0‘•*‘ÿÌb EþUøïX#4TùS,é–þUpÐ_ÓûKâÀæ2Ç ŠýMpg°Fú‚ü¿iþ;äc÷¯,ÿÁÿ³ý@?¿ß¨Ø/ø PÒ/ô/œÄ×@<‰ûf’Ðÿéjÿ#W3¸'2õŸ¨JÒ€ÚËïß—ˆ ÐG†À=-‘x˜÷ªü±Ûý˜ ·Ä =(@iüIU0_Ò£@âãoNÍ?ÔCÃ0ž¿Ô%« „âpÐPiĤ!ÉÐò›Á@ ƒ'…IíEà×<åU€ Ò³ôËøg¯ …Áq˜ß†œ ÄáH:ûÍRÿÚÿ5‡&Æ0°K×}ž_½W­Å,½Ô¯6,ºdO\š0k <`¢Éš3‹ÛÕÊèigù¸¨'¶£9)xLX{õ‚æfCšUãaø‘[ªõÐR#`|ðì›GkZ5D:~i[Íåðcÿð+×|)_‘·‹æû*3Y²ïw„Ô+¦ÞÅ-Y-?U4¡?ªx/}Û.ÉùZéˆhÇÃQn!j¼´­ÛvóÈÎî0[ÞÀ© qª$ bý¶\1ÁiNöÎþhØôc[Ù€V'nʶwCÚ«™Æ\eÅ3E#Î% r[É\ "Çè”.‡"S•ŸitSž_öšÿ¹ÞB_ß‹–2ˆ¯šÌ|´|,UU…¥PX^9ïäuG±lÆ*Øêž µ=RÒÙ{qŸsA1!ÚXø<¯šÚÎÅtÁmÜ­É AõIAƒ<™Uçã@Œ‚VŒúLf/"‰êŸDò–X®Ðydy[À$Z]XtDç™&eìZY{ƒ‡Jj{À%Ƶ¶ÂÅÅû^‚î[­d¼¯wù0…EðjÓGÿu ºmß RiËnÑ÷ßôÄÃÎ ¥¡5vKúGíãÓÄsÓ2Go ²·òö P–ÐÝöíÈ\NÌp߸íôäezèG² #}¦DŸFF-u,œæSú’=Ñ Óœº™z<Êû¶ê¹GRÙ°×\mÅŒ<¸ÞÓ /®_ºÏTÿv÷A´%Õͥ²³ã)­X¤oj½»ÏÖèö'÷ÖìÚ6½J;q íæ—ZûmzmsÄ­¶©ÖúXËÛ¤qꆒ÷P7‘­Ï,O{u=9âÆåîXÑîfió8Ù BåVsËBÚçJæg‡Ì÷/Ÿä%AÆùÞ/8Ìûf(q e¿Rå;ZŽŒ_œZ²½*^É)b$Úê?w×ÒH¸FÚŒ-m`õJˆo?S{q]sæõÈT»Ó¬±¢wôÖ“…I5o­ÉêÙþwÔª,-Â)± †0¼ÙùXðsÁy{QœÖ³zffùT;Œ@ä-D©ÍîÕyB¿L<¸Hè€|hÕôì× uÀ5gèVY8¥”éõÈ ¤|T[Ku-kÉ^i­ç¯oæ}øå=±ë“Øìöj«ÑÀCs†ßúŽ,˜Û}&ᥭ)êˆ|÷“ûÓ»oùcÃLÆÍPÏûŠŸçlÓIº~® Òªy Àèõž„Vñ¯o8¼4 Ñ¢èùnÿ"ïM÷Á¨zȤN{EËšÂUlú­óÁîŸÓö9Æ;‹ÇƒÒÅ( ÉKIÅÀÛ¿¾n,¢ÕY',®giÜÑ­ñ‡û·e¶³>¼]ÉO[#]_F¢·± ÙùxïöÙ”B 9Ìëùª{1Ž#’`‚¤¹ÌÁqm4Q} >þ¢Zþµ—]FƇü„Ë»›:BXtLu¾l „Ž w ¦w4éSµF!¿3âdþV@ötÇ$R"øZƒÆ ù³V7…3_äÇQ©Tð^úxA¥uFüe(½R|ÄG×ZT ŸþfÎx—ìAbAúãêH”b;õå+®&~”‚ýaW’CV=Ò+Vf6`Ù+X&~ê|ÙÙ¬ïÓÄ´ò:±Ãæž{г+3ïéƒCÉb—\(ÑᢥŽOú¤\ â(ÂãqXQ÷¡0ãÞsÞ‡5~Ãe¯ˆ#æIµ ÖЭÓkø¥Þw9.irŸOèïÛE b 4“è¾_e2˜v )êVPyþ .‰-…þ 9Ìß‹zÛœd÷$Ò±º¹äÁ3…¶nñSˆ~~^·þíÔÅ ­Ò¼[¸Å„gý{êŸ*™å/Ð5pÅÎáŠÙeL÷»MÅáÁí%Ü©;îiKâF´S`+S¹ùr7Ú‚ÙYsç_œ;fçv,&ëöFƒÇì;­W“mæ5ÈÙöÉ&;Ž)Ö³œˆ‚ÕuñÉÈTô‹ÅÑ·jMõ“ù]÷Ä×ÒµOÕVQÎ1×b2ZYý\ ¼Í»Ç©5׿ĸ³RC¨9Ó&øŸQy˜Ý¼v‘Mâ mÝEÊŠ¢â’Ƨ¥5t‹Vþ+BNnõ}A©ÆûxB¶ÞnüºÌ˜uÊ\ž§ÁwvYŒƒ,˜=û•ŸØlŸ¥‚²%ojyÞY,‘§8]¥x1K{{¼Ñ‡ß¦ãÅl0«ïÈ ¥'P·¬§/mv[Û*WuïWÊdn⇌Xïqë 7m’÷Ò'¸\» ¬\ùR5šV9ã£têíiý¾#$MÞÞàZ.哾vÀ ØU]á÷°ÈšºúUœuÓðÉkš-ŠI½µÆôÎÓÒŸv^y—}kýKÉLy:j´+—ÇÞJø<n`õf3JºÈ r¦YsR%#òÏ­Àúµ£A|ŒÎˆÏKưsYML&yKÛ¼Óo…¸ (Ò6V$„p›{™/[’.9+o)Fn.]U”4ЉVýñ\_RÈœ08̵vÓéŠ'K ¯i3¾¾;‡š’T«®¸ÒÉnHmŸo98'÷-ü"‹ºj,n¶óTZ©ûÐÌÓ}õŠCîV†L ¾é©þÛæÜh]è+ÇÈü¢܈ÉÚ¦ÁQQÎîØ½0ÁfsV‘#jw,{·tüÈ>ý0eµÅv9¾Á/î2ðÄ»Áf¬ªnÎ’ù¤}^,›U=öWææ'°¬ö:+¨ª8Ø })¬³g½„]¶(ìýks¶œêËR£´õ¢‡‡óu(®n… å&Ю=÷–ìZèêv¾?FHëK ÍX©Èplb¶Ø+á ÖƒßÅÒ^9ü~|~däâäùx%\[‹i^ö¼b,¢Y¾uë\SW½Ä—2ÞæìÐàí³Ç,¬ &yÌ翎2«V×äö(ýƒ¨²dô«Ü´2 ô#vo)Øk‡ºR°D$Ù« ˆYdø/S•–FùWÇ%ñ åoœàŒz"{> Š”ª,ÓÌlìQŸW;j–í7t—)”¯²¼$5ݧPgzf%æ9fPçÅôz¬ –¬Z«ö¾ÆfÑë6!ëxÖj@›—[TdÝáO½p ón ËVñRÃ!Ñã|ìôüOxnë %7ÅÈäéKÓHäÚ…4SO§¾ˆ²qöß³YeÖäKïÄÊl6ºŠöI ÔœíÕßrÒ¨Ù¸®týŽ=d›ü ƒ£îeËEH¯Ë~Â}˜q3û^Fþ4õ—»ê_9tyó4,ÝN·ðƒ˜‚¾ï&‰)¦‰a‰;/Èvfè>òÏÞÌ¿…âæ°¡Vçh“~˜4.žz‡áRTÿÂUkåÒdá­ ÷€ZMML]?zÏ›ûµÌñÊØ´¾do°ût^Ö'qkfaú’ýB•â€0ù¯ BÏ…=˜ƒ)M ¹0²8ýhó'ddó>´³ß$å[%ޤâ_íòïËò}°DGnÊlTƯ·ôòe„W¸ϱosϦԟøˆ=Ñ?EЋÊ¹GüŽdrûB2^d‘Ÿål´ÇŸïËúÖ0£üšN²q:Ž13y¯~â³®Ò«ž³ºGûUß…—žîLµbôÍ,ÁÃ`l9ºâÝ-=çkU‡’ãJ™oÝè­~Ò†ÅZw&0p#u1ÚwsÔÂóóÑ"”²œW:²›ílÕrXon?p]åòBIV8îIËÍíÇ€%Ž¥—6zgª‹2,rÇ·ìÞªj`žø3Ô°Ø;3Ÿ¼åüº$˜çŸHQÂÅe9Köy‡Ó›|±¶½«oÞZ*è©Ò-f=²ârƒ“‡ïŽzGö~ÍýmâXÇ^‘0g£· ›µVͺºlç u,­Å¨†³ÿŒó›;¾;”òn‚S]¹Âå dÅîæ-ñ`óJš–F7¥ÇÚ—Ô*½ÖL,˜  hÓùó7GÒÄÜ{Ÿ|àQ‘¹Ùe]Ô[ ¡ñ¡)ùê‡Î2­ùé~€Ø8]Ãýd,²¯"°1Ñø™O°î7De»ÛÄÕ^Éô”\¬ö}‹¯áª2Žŵ®J:ÛEíF{£òóÐâyv†¦ëq¯/wàË÷_ÏÔfÒÕ.\ñÄØ¾r«Ô‰+±™:é¬]óøÂ4ÇÒŸœÂ-^*x/Zž£Y•¸\È‚¢&FðQŸž‹H¸u9ÊéÅKÓã{.JuY‹èÕÇË-Lj,Š »k°ÈsÂîO¨0fîõFsŸîè$òÀˆsF·­ÛŬä/ Ì ŸÕ%iMhøtœ8nˆV¤pˆcßüœ ÙÞ=5´àÒµþà}Ýô"!éæëBy¹@_êË®æÔË”]~Ò ¢!Lìµös+oL)Zm³ò3ã• ù} €¥!žî“µÌÞгõe°Û9 ÐÀ2ÎÒÑ¿î¥{;‚3o\Î^’k¥ès—&e3á|-cj >jÉÑTJXïËIPlïØq½²F4³æàåϬ§(ò­ŽëÚë‡[7³¸Z•F]íÀ7»¾š¹7O8HMôìb(ÂJÐ1L™»Ä•|<¤fÒ±Ù.ÄzŒõ·tŸ:wâ÷‰Ü²RÙ"Û ÆÖ[:èŽAº·…«áÍýi὇猯^–Æ<äγèw´ÍÔqYFŽtÞ|9šð¸Ö–Ü´¢†vëœC’¨/‘Ï?*g£¹î^zsã@³Æ^gº÷§o‚¬£áKzŠÈšñDçÎHZ–E­º‰ä5F~Iý©ï2ô¢&7 O?ØO23M~ž±w:Ãã·b)<µ¾ÃQ’²bû’[û8­¾…[ÝÍÎÜHLº¤?xÎ`¬ôëÅãfÕçÄò"OÎõ³7ÐáF¯w\úÊŠBüA+ÜÚ›G Èslfô{ìËËv;`ážÔrCýµíýš‹]ɹ’ŸvJ•öuž}Ón[rQ¹±›ñ(Q "»¦Ò©F­uL¥B;rqLÇà D£Rr’€¾ âK¬„°Ï Ý^I‹›?ÇŠå¨ƒŽžwÞhôn&õ£/ËÇA9͉a¤£ tš2k¦ ÒyîVx²Ã ž•¶—#\?Íœ/¯S#¶ïÊ &Û­ç¥3âC!­ƒÕ3ӈ˽âòA¥že‚)3-múÔIYëÛW7¶›Ý'sr£A­{I—b ™ë|Ü‘B÷×#?'`3k}܆¾^ó÷¾N©zçu12‘ ®nwöWk@·¼§œ§Ïn‰p¡.8y›_£¹DSS'üBË@Q[£NØb;…»žç¸PByôC2Á­|} ‹iB«‰¼Í°¤mÓ6Šù¥S¿Æý[LCF8‰eg:w[å%^ Z›* ¥¿›9ú¸pÒ'xptN†õp¢Oa™þ~¾Õ7¹î×»hWÃs$vHƒˆ½Ú ôürR™ýÏ `ãË#|˜×ø³ºDµ{eµB8mt€×(ßîõíœ>¯á½ôóò ½°ÉËÏû+¡ôßCÃ&n.ðI²='ýÇ9 x82Ò—OKYÝŒS{¥øó¬ì1×·ýG£LUˆ‘>·´ǵ6°ƒa¹¨|µ¤Ù”!%>xƒ8˜Ôvk”V,bß/ú{çäkh¤vѱk,UM,#Üóøžî({PK6b‡|ò)Yt>ËÂFéýŠÎnȇ®Ø¼·³<9ÝÈ4Æjìèv·øj”yÙÔÙÅ uzp-¾Äm‘QÂÝ¢”VUá5}‚ÙzîƒÅˆÔð½%'óF»®ŸwÖÎ Ï2Z½obÖ©ÎÌ5j¼Š\Æðý¤†çR%.ˆ˜@ØÑ]á!*9 ñ£*æi¾ –)µg¸L¸@VÔ5·8Yã¡‚-C)§H+†±Øõws{Q|a¹'³bàY¸Êt+ZWËx…STžîòÔ`d™ßð»›lïFº}­OE£§™EG‹à'²Ä%›)¼œ¯]¨£i–~@­E^¡’–ûŽèñ¿qSc–a)£à(`E­ÙKá’½ó‚ÇRÖ»ôÁ~-FÜákÐTKš# çˆòÛ„dkÚ%´IάJ½éµ6ö¤* ŽJ÷éÛ†hÉg”mß²²·¸«|ˆƒï¦ ¿}·Ç;'ýÜ|3øÍ Õ8ádz¾Ô¼¦uÿâBª «Ã"R®øjÁÏ+¥ù8£NB~ T Á~QÄlޝ²äµà)BS“V&ÂN¢‚/ù)A¡ªâÅø6ƒåâ?ßwvÈ]ÔênÉŽ’Ïvçòt#3<-(n1vRÒ"žLŸ{|#ϳI‘JFI¿ÁWg4G7VðÌ^æ†çti¿ažJhDüÈ׋Ž×D˜çÏy1ȸ{ kcÙ¸Ëãè–XÇyp ò #³ûΩðg[\(zLz ï§Uáo溺óÓ£ʱ2W?mÚ=ö‰fÖ9Š©RºŒÎ*ˆ|LîÝlƒŠ(îÁ¸[‹¤ï ­ç‘P{pÕZ‰?“è[ŠR:ƒ1¹E¯E×w‘s°>þFi4eq&Û0ª’+†{¦sâjw/Ýœ¸ç×^‚å{+ÍÍDzYÄéì™Ús‚å ƒ)R2Ï?‡»)Z^:¥üÊ40ÖøÑ›ýé¼³uÙŸIƒÓœ¾ äÅô'â+c3eƒíX‘Œlÿñ‹Û‰??59Ø—[-ßRœyÄŠ*€aìØÙE±z84 ÜýàÜð”è¨ R·Rrͺž_’æ`‘8J6Œ©NüÎjÌ®þ,}Ûlç…'ßû‹ÐÞyîRÚ¯Ÿä÷ò‹=óK j /AW·^îçãڦϗ2ÿvס¶Ì°øCFþ¥ðóTšÐKxnîö{Ÿ”Q‡õ5]!<ŠVC† <«Óv›“›E¾ÿ,àŸN>[{N¨·ÍÝlõIåݨ–¨g­_ñÉOq;æ¼&2EÖcÑýð¬]Fù<tîZø| ]‹ö "cH&~Á¸Ý}H•±¾> Ø\§ ~gTRI´¼»ŽßR.é5¯Ð¨TfÒi› “û/ö‰€ endstream endobj 567 0 obj << /Length1 1405 /Length2 6107 /Length3 0 /Length 7069 /Filter /FlateDecode >> stream xÚxTTíÚ6]Ò%Í€t‡t7H "1  3È ’RÒ% ÒH£¤€t‹‚”4" ‚~£¾ï9ç=ÿ¿Ö÷­YkÏ~îûºëy®kϬÍÉ4TqD8@4p” ¨ˆ,@MßÄJT "".$""FÄÉi EÁ Û‰8Í!žH(.û5O…¶©ƒPh >¸çˆŠD%eE¥dEDb""2ž²u7Ô /¸‡€CDœj?O¨³ ]çï[˜ *##%ð; âñ„‚Ap€>åqGWƒ` Aùý#¼ å!+,ìãã#rG !<y>P” À‚„xzC¿F€Ü!&DÄ 0u"ÿ8LN('€6À `‰ñ‚;B<èê=€¡þ¬÷ øks¢B¢ÿJ÷Wô¯DPøï`Œp÷Áý pg€jê ¡|QÜñC"Ðñ or@~·hª@è ÿš ö„z BH(ì׌¿Ҡ·Ypw‡ÀQH¢_ý©C=!`ô¾û ÿu¸np„<àï•îèôk G/a38ô¡DGý/ ÚDôo›3‘‘””@ ¾`á_Lý< ¿¿Íè‚<'ô ¨ýE€yC(O/HPÀ:þ¹"8BÁ(€Ä 'úwv´âôg>O¨/ÀZM?Q€È¯Ï¿îlÐ sDÀa~ÿ†ÿ>ba šÐÈÿ×Èÿrªª"|‚b2AI€¨¨¨$@JJôÏ<@ô¯>þ#Vî„Èüi½O·ìýxþ/àŸ¹ hæB<ÿ&ú 0ú"ú¦ûïÿËeù_‰þßizÁ`¿ý<ÿä…ùý…@3× …V>­øC- ¤«q„z¹ÿ·WB«AîŒf´ è]!‘»ìP¤&Ôâ„¢À.XóÇnöKo0(D ¡¿ž0è(‘ÿò¡EvC?EhjþvAÐúg] 8áøKlb’§'È}Öè• @­JGˆïo2„…à:€ž1à„ð$úu°ââatÂçÏq¡}¿ÍbwÂH(zk@ž¿mÿ¨ öòôD ð79Ð ý½þ­vÄ&ZšG€å"\":/ëT}·ÆðV׺c’¬¢%P\ Ï\ô𳵦ªÚ;ÖÐ>.VDNÍ2ò]Žû>xº’¡]€ÂÐØP=,þvúÚÂâˆ`pžz³Añ9Ùˆ™ÌÞÇš;Õbþú±T¯øö‹OÅ7ÝÈíû2ûw@é99[#*^%¿{ë‰ÇjÄêy¥§u¦—©ŽÙÄ ÖhÂ…jgý7¿ 넬‘Þä<?)Òí«•¬‰¤¢§ö¿Ç–?š2DO“œ{ï%ƒKUâ\­"=‰¾Ä=’kÛ^jåûLÑ`Gò¸W³³Zè-ÃGo[¼ó ù½+'Lv›9¦ß„IèZSb\êžr¨rÖ:bœd~®‡ôáвð»—êÏ ÊÊ/¬ô°ÞµÄá? ·ý4IwiŸ,*f“®“úø\Ucñu²xw-Ÿ bà¤ê`°¹®yÞúú|ZeÉš ?Ûi}Ó9ÒuŒà8b¦™M²ìÊÞïßK~©#q>KaΧ!‰ª×]@ôØñ&æ'Îäã;ºµäî+Ë,N²'š‹“šR,˜êmcdZÉ>V ™!'¥r;ª`~ñ®Zòí3…°V…té‘G˓ǘêF‰äõ·Œz¿áÚ&9x ‹Øêtßw±/3྇º›mÙOºÞQµš=–š_)PýalGUþèASü÷„¯ÛgÍŸ ,U£ïÃbÒz¦ƒ7ìž¿eîº?˜À”ùjò ¯‹;}ÛW»ùêç˜ÊaDKvˆ=¢VÕ’(Ñ®öa&ÆÌz¤×yÖJàÙûÖ©å챨õ…ÜÝÍPÛfƒÏß+ªª(ɸˈoÔè‡pÉàG›«“|•¦$M6‡‰ÍÃ…0\œZˆ6aJºïh‹ö­9ž´ÆR4^iyŸ÷1} j¯g¾7ä¾À. Ó”þî ÿQØÒPòŸ ¢§þèÑþ¶ÅCFõ0ý6¼h«»«e§‘­EV‰so‹,Çz7bvbm·jÚ*ÚéD¢·}§é©‡÷¸{:½è;$—çW¬ÌÆÙi'¥‡Ym‰3Xgß¹Ò62a¬š?iëQ`»ˆ¾`ÑÌwøRZ3Ä#Q»´”–,÷òD0y;Í!Âù&èrõ÷Yƒ.`JL`¾•hö£Û`ãêO6•î‘›ä³Ð²ÝJÃáé6[q 3 ß·é¾Sü°CÍXÈeõ¼ý’9ä¥Ìs§Å÷¶Œjæ–ٳ܀À¯_‚@â[šå0ìôîSi_œjFüâiTж…Jyoͺ\#Û;ó•É$jí#ÔáæˆÆ§ËÞíù)J½i¬ri¹õ £ï"7ʪº°W}kIϾ=e|ˆëm¬–¾X‚“k¤îBDO:£l'?D;šKÖåFIïàÛVѹÚbU6fù,eS•:ê kû»ñ€/ÄÃ}¿'±Ä‡˜Œ˜utÇ+Æ ‰Æ¬j; …¼_'NX¶}_diÕã4,TÞÏÒL¥”_r'Ü{>ºì<'0ÈÑÄîbV¦¯tÖ¸¯´–êÁ7!åMºp[a(Š ÚÐ"KU.6H‘°=O1Ýj”vj0ø•F…·òF4‘T‹HÍ|šæ$}L¡E\|•bìÿœêôÔi7 jÒ–BÝåý™üfQ@VÖºjúèÞ|ÐÕ«Á¥|¤˜·Ú©ßÊzÝЋ™Ê6`éÔz8ƒÔCîpúO˜ºÑ×wÝ nþ¨Rž7¤”¿‡ |"4ž¬Üþä†5›ÅG*EðÛúÞÁÅÕËñÅ™ˆŽ0ÛŽ—\q[§'6Ò°ôÄÍ—È6®ˆˆ×ÂIëë¶¼Ùl¦[ý! ’S¬µê£¥ÉÆ5ÚÐ.öB¹Äôk/[ “"‰“,IUŠå"oør–éAMVbýD'ûã©‹ *a¼1Áà €è©Áaå‚™ þ'LÙPRÌ› 0hÜ>¼¼Ñ4óq. ’Ä " ã³ 'ò[åîq>£maÍ ˜6ls«ÚüÝæøPx¨"ÛælGiN€ëðÄUKÍt!—LþiíÝkW†g¼û¶Q&É`‹ ú¸öþ5C‘©ôÄ«³¥xðèió‚z «:6GO»d¶]÷ýÙiK>oæWü‡ùü Ë`+¿ô±Ž’‚L"*;ý·q7ö‚Êø"”æx7ŒÜg¹õ“ç(“òáb2G¥õ–48T<áVáû/Ü ,š­^j.Êï¨5fìº5.÷á¯ò¼››°[ä$ÁR¹¾9pèÀˆ'Û…º‡#fÞTÜ¥7Új§©‰(ôË£ LM|çÍJù™ÿQRqKšF38a¶a ;EpA¸æœ™vµøûZ’¹TkÚõ68Úf×’ ".= 9Â/È·i-T¹ô*.?p»Žg³Í|îËj¬Vy5L*L׉тÚųÀîPá»{wåÝÑHK}@)O]_z}ägzá÷-KþÓz}÷#ÛbÔ1Yï ’}[Ñ8ôh‰e¸orÕzª2´UMÝøf~±Ue3­íu Ö]?®}Shaê‹×/b~ ŒákzT$–:•vcø¸½‹¢c¹Ôå•"(O„²ÇOö}ãa^üÚTÕg®í¡¤Œñ?Ý–ì)QtüéêgšÚ×lî>ôééýò·Îj#ôɧɟ_µgcÊøãvl™F«­ ÷£µ'dFâ–!˜ùŸÊÄ zNÌé<)D¸ÖšêžSùº¶  à]ò;ˆÖÍ7|!îÓÉ©ë}6º-zÑ„#Î:Oº¸å'­ºVñ ‚¢Â—¤qR¡q|wž:F})F$dبU*rüÀÖ$ôwf›Œæ{ŽhǘÁu4øz8V2Vƒ8‘NÐõ1rþï‘Ë'jKE&47Þ»_O¬góèìÍÏëKwjhœÄ†“ú@ˆ½Ô>©£Âî…ÑK(S0æǫó–||d –„Ÿex"6ÓôØ Þ/Ÿ˜ŠL 1JÏEu ŠÜªªÞƺ~®*"`„‹øß®ÔzÁ¼Æú0æeâ>¨ÂÂh—Ó?b†î^CÛ¢e1CQ¯8JÇO¤¿û¹Î̘ëÔ;ÅÌáêw4fÃR< ÐH¡)é{âºD¿–E!ÄAc¾¶í€Ê=÷wãpsã°¹»_Kƒs vj-¼ª%ïPñÈP>=ý.žwþÔƒfTû,ÕèSV ŽÃZ9°Ç)fóé3&ÓԇݚSÒ8v?æT(RzàûTF³ø?‹Üu¸üåäçzòñBÝO6¬¡Ro'h›ösŸá棽yhbŠ ?AÉ3ÎŹ(Uˆ¹ÓóæN8µÕ¦¯­]úÝáÙ¨µç|PÉH^ÆÖiÄ’+,Â…\õm;sÚV­â¯žó|òYcõ³5j곡.S¼ÑsŽ+Žj†a ¹J{ŽÊâ`^rñJ† Ò½9¦9 N>ý m¦>†¬Ý’|95Ççk™¸Ãž]ôu¢Ô®7š ä=ÑàÇHfTú¡÷źڃŒv^œÞs¼¹v¬ÙE¼õsJÑO¡6’o#ÔA »û‘-Ij€Qų¾ÆÝr9Pš~}Šùàìb±`˜I/k?¼˜Ê%…B‘a{iùËé:ß}w:Ï"÷Ò‹—}·Qîê½IzF¯w×èñõWµGJ=÷Â;„S4Ù%Í„êD·ñ°ÎøßëÍDˆÐ³ÌTM)ì‡~Aû"îÙ¬-T²½õ¹–4ü ô$?µ?,Aq\d¾>ZÑÈ_MQò²ºæÕ5³Tl£2,ûÅ|Å ßöÖH*¾iAœšÄµ–§óº^?¹Ä[ŽÄ¨§q\u‰Í=±Ò?hUn.Jç?Ý#)¬ÅÓ÷ÞZåq½* ßX|™(‚9̱·0ÂzkA÷Øp1™!ÚT(îyBÍ1¡±u÷íÉL„¼ëO?¸Ã¶û;Ek¨I_ɱ’?~ œžç‘]„$Ö+?ŽÜ ºŸu—E7Ú9 §b`§¸·b›ŒJ9.×´: 0Ç :gçÔ ´7Ò úXôfãÄK=275†4è”+ä¦_ZFèf¾¬cÛÁ[̬ÑïD<,QÍ“9³l*NÂÏu4·e•zQi‹Ix&f†ãàARW15wë’U†RŠ¡nWn%E]X£–µÜá GÌ¥´¹d4½òfe ËÒzG×eä©8y”"qÖF†/S(nËtG~ ©úcƒM<‚,Ç8逛“8÷¶<á(ú[ƒ_Èó;hJ¼éŸXaEâYeœÿ`õAxPíf±eiôó¤4•tý®@2™õ“öœ×Ωª±yqãKÀ£„39U[£DÊTño=|ª·ÄýàØ/WuI÷~ØâA~ØÏ±fr¼Zµ ”¡1î/ÙÒo„„ä+-¾Þ›®kÆd!?pÙ͉-u8î!¼ÙíØ«²Û“ŸºËäÇ!?@1õVÖYOäÖGÓß+üQa¨\Ì©Ÿ¬¶²K‚*m^ôÆ œ{ÀÐ&ì°1Õw¢o®I3""ñsœßMgKÌBFÑ)#¨â%€|ò²¿åLÕRõ³½Ðµ2²´/½¬éÓÙQҲ︯Xª1ŸyVžx;~0ðEõoò¸¨¯äåP÷Ú•÷îxù}a¢ZË´çß]²PBà8Ê…T½`jáÊÇxS¥’§ÓgïFQy÷óñÍ¡? è”èé/œ‚Qa×ùåýȼ"¾4¡Ä¥¿ÿm7e9]¢‚Žõ­}i¦FÆ&NkÎ%é*(Ø8Ñ‚{ªfaXw]8åâ*i¿…‘™ÿº£º6ÏßjDW¬wi³ácƘ§Œ¿Š ÖþžóæºÕUZ£¬JTØàý,aeðL™‚{ºØÂ/×/&ÅM÷‹WïifëÎÖׄ¾y(¤@¨JJöC`8ñVÚÅSúø†™×TÆCÊBô…ܽï“OºxüQîV®5Ñy›;ûÄH†w´yí±?ÚKJP½@ág¯]À‹¹[!Yâ %×–hÖîO9”_aâ`Û} ‹$_¯ßê³+¸U­)¹Ö)ã±ÚæQ‡[æ³µØELaʇêCþãiÒ°|aY[X$ö'gÜŦ»;¶Ñ ž%/B¢T‘U»SxÏ‹¦kÓä1)µ™ËŽŸ2V¸ÈQ5SŒq¦ñ‰Y&-ú¬XhgãiÐá\“c>é\pŠij€ âæ¨ñ}ërŒ’©Tမÿ³—Ðýè@­HªÒ7©V~6<ó?i®« endstream endobj 569 0 obj << /Length1 2067 /Length2 7731 /Length3 0 /Length 8878 /Filter /FlateDecode >> stream xÚ–e\”]×ö iîpèŽéîî’ašº»¤A–éA)é’.|Çëzá¾ß÷Ãûãü×^ç:޽ֹ÷ +£®¯œÜª ‡yñù$òPØ óÔ‚Ãà¼úp70 âÀeeU@@Á^Np˜"Ø *0tô¨#×Aâ ˜HTBPB&ky{‚9@d@@þó Ø9A¼¶P'.ÿU5˜=ú7nçíþ¿k>P„'R Àñ?Ꜥ¶æê°ƒÚãòkýœ P‡ÜÝáäàèà€pþ‘Øúä¼<½¸ñÔ`>€œ«+@ÿO–'@ê Eø@íøþ»¢²·««6Ø YóOšøÓ…ÿ+ìæäêÿÿ“©ævu‚ÈÁ\¡CNžÊN~P;]'/ˆ#À á ý7l³ƒ"\`P]¸§ÓŸxBÿµfèèqA=="âÿ.™@ÿݹ6ávý/y(Ìî¿#ûýo~]MeyîÿǰÿIT‚AàvN0HXF Àþ¸È"I8! ù ~ÈðóÁà^ÈGîÞ^Á{8÷ÏE„ürBÿ’€_þ–Dü ·$àW¼%q¿Ò_ð+ßÀ¯rK ¿ê- øÕn ©®qKHuÍ[BªkÝR]û–ê:I ©®{KHu½[BªëßRÝà–„ü†·„ôbtKH/Æ·„ôbrKH/¦·„ôbö—Ä‘™à¿!Ë€=!NÈÅÕú7.úö‚"œ<]n[Š´öº­„T±½%ä®l`ˆ ÔËj'Kðoüߣõwi ò—„‘Å pWäËúׂПˆ›Û³ÈÃÏo÷‘Öíà®®`Ä ¤‹Û] _8~舊üY÷ð»Þy¹UûÛGví|îÔø³ ÷¾«Lq¸ƒHŸŽ·®‘Crôww„Âîd cNwéÊù"âr‘¸u'‚ܱëŸSz»Žl›Û-‘ ·RÂÈZ0äé¾íRæífûçt¸c yyòÃoM#kÂï<"7í~»ŒÔp# °ÿ¬ð¢ÿ9VA¤w(…ÝIù'濞²‰î®Þw6DFú¨hñ)HRPZ¹~}"®Fßf?×>ÏtýÖÔTÕf7°%ô+ÇG[l–4›åÔ@Å¿¹Wò^fgç{˶ŒZÛ•ãÛiÍýë ^[ÜÃѨò©uê>½C­nðóOùÁÖ‹]Å[f†tfÝ­ßÆ­ ~I}…ô{‰û•–¦þ¸§N|´­ñHÔ“˜ü„!BíÔ—aº_?ÏîÚøb ð˜Fd,!ûlì­ÇÆÃ¤ƒáþM ÅYæ…ѨåàºêmkO^¿‰%ÑÀ?\Q}ý@䬌m£|põR·¦ûžXÉQÍ)Ñå$wÞÅesA·)z¡ÍNOÏ=Íšûˆµ&Ÿ³„ŠåÞ=á>³÷¸[¯Ÿ¢žpq}4·Êùrf˜Ú•&=zó´+*cÿ‡Ñü(?°ù¨Œÿ˜ iôõrÿëÈ)Ò£wÊ­G”2(¯~<ªN!Ù(X8s?%t>@8€Â)6B…Pµ,•õØûcTz¤ÃñºŸ¼¿4ÅgßR)H½'ì•#Ô ×Ä̳öÉ!ŠˆuÊÕNù¡weL¾Â¨ëÖ`\dµ &d8°RWÿܸ4GaRtèËè£eų’ÍeËÏóí]ÈL·˜Pbjžy`ÐgTåÉDŒËUÓ ç&æ âlíºŸ%o]¥šjíæƒ.#ÊIé=d»üÙz½¾Û‹WÑÆÖŽØ­Ó°.„°@®ý„²•.„Å>ÑoKA ßüwºæä3ü/t¬*Ñ-7™+à_ûo|ÑáE½Ã ÇBüw=m#ü¹Æžœi¢ÀïÓÊ;[Ó15! úI8_®¯¡–½èY×}×̇åÚ;Âq»¬Ñù¶m¤f÷©°é×âŽRÝsX™aجÞÃØ]²s#²ø¥K§"­‘ºK µI=‰¦Óó…¥5ÏFÄRƤ³‰,Š•*· QØ(öâÇŽ÷1D‡6b¿]6Oaû/’•+W<›ÝI¯#çè@¿R•\÷Á¡^¢•ˆšMåuË–ú‚ ™Ý›Š±:¡¸fÇl•ÏÃNÒõf¾ÍR¦\8¯9Â,± =·WM*¯^Z³ád¿faÃ;bÚ쬓ó“x{PÎþÓ[ !'·Ãò‰ ü”–ñ…Ù[é X‹§´ëKÓúFöã%›\©4´öж ZÚ̦ŠÎ²ì›jÉ¡AãS]õOa׈­¥É¤=PSžt+œªSx‰µñ;©I…õƒtGþqëë] O kÖyôÌÛq…±JDÓÓ~mØIi¡Ã"± qŸÁZ°ÿêaàéS‰Àv­Ï¡¸ͯ;ž2+”©~&&E½2,PyÇ@þ' êK$ÿ¸ãµfƒ4åXŒ=êYs@«MÕ^ÔñQ©+ê«Ãú‘üòÜiìa‘θ ¬Î³„_ P¾D[Æ»ùyô […ûÃéÖÅ%J‹í”ä“ÊL%Šà¡×óg&ø«nIµÉO—#6#‹Q~á—> 0Øî¹;ÝmVûŵA«€Fµ|*L!ç{½ÁÊK»ÊaÊi0Ò³"ný+ƒ3 ^ƒo2Eý‡ü ‹H»¨ü`œÞ“‘F<òRË /H(“}G8 o·xX‚Ó:uY›UŸïóðC8>Z#j•MrrÕVÙuù#J:~ŸÊ‘„1“uÚ$«ÅaÐt§xUß{‹èϧœ0¥‰hVDýcÖÀIڜߗ$ä™ÁN¿-HIëò¡åþ_Ê—T“çR˜Å‰Nуü^ý2ÒSôN¸’‹šoêÛ™=1¾Ö>SH æ“" Y‰ôbZíæEÆ_EåêZù¨|X¢{ê½€ÌZÑì?ÝJÐÉ-§“·{Wbœ2aÕÔÿ䉖7ñ;Š(N¾±A€Ìh‘•yÓJÓ¸s+½¦íK›áâÉÒŸË+­hèà×Í6 u…Ø#vâY{SÏ:ʵ×Ï®¹ÎÌï_4&íµ-ͬ·’Û_Õùg¦ÿ’^©ëœÕo;öéÙ,1Öÿ‚£'‡¦]‚í%h›ØcPEþm—²ŒÍó‘È|ó—}?5¢=غaòÀ5­œ í—êÑìOK$ÖE†×¢Ä_6PiáËNƒ·A>?uqŸ-T¬|\>ìÿ4Ød4µ¡šZQtÔíȺ/NÛR+2Æ’ÝVú0ZÍ~ߺUrdá´ðy…vþ®¦É¯¼P¶:ךBôE‰_ÁƒŒµøj¶yùD²mÏ»@F§_ë*@̪ÔÍÎÌfPF; Êd>&B%Þ“Œþ‰$}{—aʱÜÄ1íž4Å85ù<4£#à…Y[;­CLªs>Ðpòò×ÕOeкª¯Yö±«æ;ìòcù¯•á˜yëŠ_úÞØ€~éˆF}LÖ jµ=o3µ°ºle®ìs®¼rOˆb±O8p‹?¬n_üžf“9.¦ÏüÍgâš%ÎÛ—Úr:šÈúÑó0å½¾„oa~R Áщújæ?¾Á™ÁÓ[’„c¨j>-•Ñ ¥•:½¯Ü¬ÚvÎaµ¹ôÒuþÒ›Dé;ª3ú¹ìՌў;ݵf¾™{»½‚XiÌgBîÃÝ¡ L—÷? S|gþµ³¿Ý¨:+vÈ}Å%GEˆ?¸ð™q^ºSNcÉ=» JYÄ‘N”·=N7°+ä·sŠ€t†+Lk2÷˜°˜¿ºüÂ|($îðãr×s”í([ã;÷ÄŒ–öu3ã7ûªØ–öÎ…€¬ZEÃ壹Þ9ÍLŽÇ"óo|6ü¹íù¯—›£Q©O)«²VƒH–(s[ÖËÁަUD×Ùèõ‘ÜóSn;¤IAsº.³™bf,"æ¼%ñ{èré™ï…u£2ýÞ¥‘„•=Î#À¾ßÃÝóÍþ̨&0Qz•õh*“»™L|RŸÐ}ÜZl‹j˜Û7Š=aKÊ`–šU£’2þùñÈõð›€è§$zTI¬n鵦ôyaRm˜ÜûVWš6èØ³â©í¦Eë@,¡gS/7úFä ¯†Ïᬮ;ÊZcÒwY>'ýî¯ýºù¼É™7bÍîjnè¶-›ZAt%ÒDÔ7Š #;.ÆÀÀå£ HÜ]Ô`)Ãú"ŽßùÆ@Üùc“ KHL±´Us™ÞÑúïØÏsaª½L‹E<ËZÏÒú@$ÕªêV'ÎOh¹ eW°’«ÖâÄ@d-éùÐIÈøé´ °S˜ËäÒ}¿¤mªGÎf(9·©;“tieÍŸ6Gi-‰æ’ÞGOâIsö ,ÔÐKý\hpÂD8ß&™o¶ÍTÇm“ØÝÂ=Q¾9þ6ð>B¯@o™8^>¥©! ùÿï¶=XáñM Îó—Ê)ÿ°ûý5!¼©¹ËžýT7ûœÆl\ò¯»ö »ÞÔÆ€å«5p ¶âˆRЭzØ5¯DŸŠdÀñ:ã’Xǹ}npK¿)„†häî#ƒ3ÈT±tìE¢%ÎTor¸þ¤Ów|ç\¹b‚Z%¥ßÌEóÐÿfYýާ«èú ›B”Þ¥]Në6Z½/“™žÉU»þ@;Ù¯ú¡tæ·ÙZ–ôu‹ŠÁf͵Ï2ô‹»¤{…s ÏzyêÖ†™zxt"&ˆj£sh¿1z3ƒk+OÔ]¢Ý§“N‚ÖOÅ-—½YÔsiOÆ£0¦T” r»¶‰ÛŽ~XšÙÁoQƒƒwâ d1ð­fо%Y̼Oh:&»AÇk¢E"±}ZÉ×pÌ™:Îí(BúØÑÒ¯³h]ø^4™*ÎȨ~ÅøD*€î”„%i†1ÕLLÀ„‡˜ ñ:i?{ÁM_»ú­ˆXO|Øiùù1fB“F˜TLaʦ/ƒ·a†BHÇ%uàÅÀÔ)ÓNÕOŸwŒñØçóÊ^tÜܰ•˜ zþTj«Å’õé¸RÆø?ÀÂ(Yý¡y2P^ÜR(×ÖHtF»(>¥fõú2äÜ}”³µŠôácZâ´r‡%F)¾Ë0FÃÑ *<Ö¢×þsø%•«I?ÔÙ~¬-’Ä80`ºÏwTz˜C Ï?Ô=.¢êÑH<Ï2ëÄÞÐO]‹_õ@/JÇåK6©j8s^ƒ~÷ü닊іÓO£âò_ aúèÒ¨ò*›Ä‘àT¾ÐŒ3Ÿ‰7Ë#¸þƒS²âÖ1G|£_*g)¹¦Oƒ§aÃÙÙÝnp_6¾žBÞŽ%æ”ô[#ð”é˲Û^¸¶~W$pv!£Z £øa„‹mýÓp—òGÚlV”M})ÂZÏ"Ü›X/ug¯Éô Õ±tñޏ $Õôš[¬u$&7¹ß-.­ó…#t»'•÷‚lÃCo£Z‚Vr€ãyvúê;–fÌHò_uñ¾ƒ‡d+Ì•)þ§ü¿ñÎQ¶íæ <Ð@d4Ly’Õu!TûuÅÆv Ç/¥K*]°Ü‰âׄ7Õ¥°#Ð…Hj—äG7˜¡ ç¯bô*­»íûíþ€÷ŽD–Útä.wŠFˆzžÅˆ»°“$G¿6X!5½æòÀ¦R—Í> Õ·³¢ƒ„­‚ÊWLO´LMÞL+x/Ñ ry§„óKñ‚zPý÷¯Ó¨pSðºjXý“ µw9æ˜Ìrû^)¿ úziÒç^ò«Æ/Ù÷|íÇ{ŒSݳ1 qÌe¨Ô±…Ø4Èô¥¨ÀÌΘTÞ’ÎY¶cÈAZQ”RKñR’\xv‹P¿Âó> sÂ[ªK;VO×r ¬%{½>]ô]«Q7 KaA%á¼-ÓŒc2KLÕihUµºþ7M¿ßÕãÅɽ"ž"ÆB ¦%y?ŽÌMØÖØ }áWúÜAùÑ`±FŽõ}OÊA>Ú/e\Q'‘ÃYÎP®¼“œçßðµÚ ƒüëKx³&Ë#àofgjgWD34—'ºu[;|¹Ðß )¢4°ßš.4KÃù)&QÎí„kdk&p´ÁL*µÉˆQOös“9Ô|Rqͽ9â0ÝŸ1¿<hßúÌ ÈQ‚½f˜Dš#ñÈcK<$žd`®‘Š: tJý¨×¤KÐ0ârE<á)dURDrÑâ!¸åøU+-ÖáGX–¦ÖLì{Soj° õ;¼Ò2©ŽR‹†ë)Äã§YxèôVƒ)¢Æ¤õ½½timžŸØÙÒÉà¸5¬úåõ‹ô>"À$¸"A7‹IgþÆ6¤ý¬À“:£Þ¢¿ ïhgî™zâÝá&ÜÝ­©ßµj‡ÂÊsÌI? ¤¹P‰d$2×e;ê·Ú á•©Ÿ° 1Lrˆ3í\áPãžßÉ脪eÂùLOÅŸ,9í·½ÿ4Z޲ݖ•ØÔ2Ý[,Œ­®jxMÃm¦Ðj£SXÙ1b“õ@ÅkƤZêm,÷²{„ÕSCëX;Óx5@xoy5¬"‚Õûí.8[Ëš7›¦mKO=XEs¨û€[+פ;*kü<‚†Kf†CͬFÉõ9 õuIî|×ô©M/ ôÞž-Y ÊC?“Êkê·•5÷éöÚš]{¤öæ1G/,Ó8´hÔ÷Xq(WíÛ€9Ѩ&­¦9£ÔóëÅ/çŽB¹àvûýâûr¶ËPÃHòƒQ©!?ÔU|7¥wÚ¥x°òÑs®#Ù£ÚÛ7t6¥ÊȤxaЪ=Úý‰+ì_Tys³{b´²Ø I¸Ab£­”–>±\IØUlA ¨{a’vEt»})üšf¿³ÝP:À_½§Oއ8JŸPs3 HðþÖlµç9o)ÜÇ~écyÚþ«k e5› ¾ã+Z0y Þœx¿*A.õ–Õêõ‡K<%3ÎKí’Ÿè°'Ä´£µÙ-Ù&ªIÁâŠoõ––ã"õ^ÚJqTzä㉥£6ᳺÀ ÊÙv)÷øLìã@JçÏ1ÓýIOEÖ«Êk½“â—¨ñgïl{[S¶®ËL,ö6Kš0«Ø`ÕÝ/ªby×#q Ô4º·îM¶š;%úŽÑÅš4ž1zí™\~ÑÈbUõxxÏò®c€ÍøŠÜ—ß½›z¯VVP1¯œ¥KŠÃ;ê*C'—+iÞH-½aÎÏOŒ<Šß¤»ž¾zyééèÐÝZvUÇa ª"K«Àjí÷*„ C4´ äia‰J:ÌÓƒ {¢#o¤îb–×âxDZ{oú°‡‰÷Q阱V‰ò°+‘Åwð©ß}L`Ip¹°(L‚qDˆY×mbeùìküÏ–“¸s¿¥Wê‰"´óëa³vÍÖ-c»«œÅMÆÜ¢Jl³Î*Ø«Co—Ò·N{…©b_@Øóµ5˜÷•ÄÁ ½Ÿ5EvÀQa»|æùRQóÛß1CäŒÞ®þ>5<äâEÚÇ;yK TOš³ ÆläæÃÎú±Œ}‡X¢*6ú∤5'ȇ$Scóì`{ Ã€z†ÏžMKßS؄ɨ¶†O`GË毚áw?½;°GƒÏ‚êÙ£–ô,?ß›ÓxØQ®D&0ôU C€À®íŒ9 †šãw¼Æ$Ñèé–Rûñ5ÊÙ¾æ˜f…vêb™ôÝóGÛS7ëò¾:¾%ŠzÄÌÂô蓾݈ oniZ²O½9RÉÓöM®ÁXpÿÕHsR¡Ò!ü¹êû\=ç‹Ô'eö °pÄÖÊe}½'/¸Ñ=Ó’èU¨eg8l&¿Ÿ\|—P»VôÓtìâÙO ‚#Ì Y©Àã¢vÜíÈr:ÖÅëÑ5ŒZè!tªæîÒw´Ò6Ê¡™Eð0&̙ҒÕ1|“3ùzèéC冱†!¹–¦›²šœ\Uþl·Àf{·à|˜Œ‡ƒÈ=«•àIƒ&ö:œ)Cæœ÷¢ÅüTd¥¥W¦òÔLææäKrÌÊÞW¦kN »Ã_-;j„=GºÎG܇¿¨KÑÞ¦O†ïáw¢'5œ ~ºÖUBÏ8Ëê’e¹ÔíˆÄž4Íž½´ax%²XôíÚ_ §C§mXV¥xvn_öx[ñê‘?¿”[ ΃ÆÔ´AS1{)@ Ñ|Û×}ÕZ½ˆƒYÃ$¯Hó•”C‚°"ÞFˆà$û¸ ©©÷ˆ+á'/(?> òª[Üá=Þ¡#8æ3w™ ”?ÄJZ˜¯èSnÐ'ËŒk<’L±Šî rà6w´_vί‘_õ´JêoÖ6*Á°Âüq]]6õ®>¯œË[ÀÙÁòâ¾7/Ï:Ú ™p!@¸s%Ùrà°$ äJ1fô=Éö#¢}Ü¥þèæAVkðhL¦½/M݇¤§ó ÉÄŠ ,T×áácêQái<*_Σ/)Ê.p°ÒæNü I 1··§ÙðR£#w+›§&=¼e¼Gf¢OfåtèºrErù;4èš”¡÷CÈÌê¸ ¸¼ÅŽ5hõD [“´®„&r2ŸXªrž¤ÍAÊk5õ™Ú~"¨Ùÿ`œ| endstream endobj 458 0 obj << /Type /ObjStm /N 100 /First 899 /Length 3810 /Filter /FlateDecode >> stream xÚí[ms·‘þ¾¿UWu±*ÇÁû[JΕDZ²ÉVHZ‘#ëÃpwH޵ÜYÏÎR’Sùïy˜]Å-%ê"ŸUÒ`1@£ÑÝhâ—XŤR-=“Úƒ•LZ…**ŸJ4“QP‰A&P‰cJP?Þ3%šû€ŒÖ#ÎJ:Ç ¸+ÑwL)‰ŒC•1’ƒ2Á°€ÆVT€Ew&X¦¼@I»¡M„¢R„‘‰’i¥©D1­%h Ž6=EƒŒ¢.=ÓΔ8ê;F²“eV€8¢ÊâŨT‚Z«‘°“‘TÈp° ˆÈhǬ$ 9TI²i¤EÆŽÈÕ1 V’ñ•X2e< gGVÒ T!sZM](‰L¤ˆb*ôG²X*¯‹ôëIvbÙh@§s"Š‘Už9X%È(j©,s­-ì±"õÇœ§PꢧŒ¿´üÖàjà&ŽZÁ°>*7²4<Ò’’#È,2ð!‰AŠÂ)X f¤Z€¬Œ†9@dPåÐÜ@Ñ@#If ÞÂÌP ø¯¯¨ÈƱè-e<‹d62ª‰ÈÀÝ`8.Æ ¹·ÖQRI+[L)2#kášÒ“É@+5¬„œO9* È‘’Ì¥†ràb$YòJ£1ÄÄ]Ç:´0hi>˜èýèîÝÚ6“å¸jÙWóÉá~õ|KFJÜñí¶*»5(^½ÖÍl§ì*öÕΟ”PZ9é•aK˜?ñÐ=i&ï#ÙoËù¼š0þ œ.*±ÿÍóâÁr:=(g3’eÿ¸^0üÏ2ý{Vµ tÍt -ÆÕn©Â­de?‘ˆìq}ZaËÈwªƒºœýt‡½š—Ýñ¢*ÙiÏÀ`qgôç?'å¯UÉ_£ Õí×Ý5»ì!´9®Ç öý²›/»;C£î2SHêñÌš»ëî÷ßÎ+Ø ™u#¾·<èÒ+Êÿ®<¡:5â÷ËEE4Œ[MO«®—#þÍlÜLêÙQHÁvoÀR_Êrë~3\Î÷´½MM&(5TúrÐתEæºnÏÿ^ÏîÍõYõN}xXµÕl\-Ø €?©gË‹Žÿ²lºjZvðKÃ' ìºXÔü¨-O+^Ž—]ÅÇu;^žN«7¼«§“ŠŸ”ã¶™ñƒ¶ š”ãq5ëø¤F‹zÁ‹YÓMªCÞ¢o>®&õtZ® —³£²]žLËeÇ›£fV½âã’ø-æå¸zyÞš÷fh60çãzö Ú6í¤j_ØC¼äßòG|ûEáYúÿrÄw«qÇ^(k TÀSHÌYå} ê-~}Ý=v÷.ã{Œ?löÆwØW‹åýG{xfa U¨; ÝšL2誜(pNYh¬ÊKÈæ6”IeÚa/°¼g0þüÇ BZoEœab¿¼’T'R,UÁÙ&´X> Z’ÎÑ&w&±i¥¹ÕBL@t~Q3˜U á°ë_°äI¯W/Àe/Ò ˜óçßüL†#æNhqTq]‰™>Þ«`UÆŸî<ÀT«ÞtìÿyZã¶! £ ø'‡2¿·ø Æ·6çHóvEFW7ûä3Ü¡\¿)¡cžotã?*²È††‘lüE0¬|DöNàõ!оmÑyɧ¶@þJóŽH~:5J¿Zö¿ªÿÕýoŽ6éÀ(¿÷íL¦¿üðFßW¥…ÄwÊŠðèÓ¦”Ìi” úæÛ#JúhËïݽ›:á÷ÒÇU¾ÇØ}DÏWÇ]7ÿç“7Ť©‹¦=âRÁ…vRD‚AE/õ+¾o$°–X„_ l¬.4v0Ÿ­À+ [‘i/€šÙ` -â>¨›öM}š$gWæUÙNßrúôÇ…âÒA•(‚*ʃE×–ãî£PÎBÓÉ©(8Yìj¬BÎÝL48”B 6¤ãæ„—-–#,ÜnIm?U·cr4ÁÜQ.‚1U,¤Të#`ÞQ"D äV„ÖXE¤K‡û… ƒhaŠ>Zh¡Ÿt…¶2þ$Œè©P!º¬òõë×Ŭì–m•F üg嬜òÓ²™óÙxÙ´qøÙº}qÜLÿù_ÿZ,çóiu‚ê²}»UÏ›ö$^·c¥ ¦;E“Õ„ò_¬”§,’9M·DŠÇ_ù’BÇÎßÜJ¤â|ypRM(àjËi1«‹£æt5s¡¤*ÇGõÿRÑäke6ÿó¿ÿÕ5ÍôëùIjYýŠ‚LLÝ}+µò -ö…’iú\l²ö^©ÏZ[ŠƒôÆÒÏ“æhÓùXD+7£U‹¦ÞˆÖzü»­Â®l3¶äŠÁ˜Íh5Ò›©¦±Üa»ö‘笆NSÍM#ÌŽlûåùÔψފP¤.bŸÒwR t³iE, Õ©4ç<0A§ ®ŠØ§DáSi_—¨sžê6}Ô€‡¿Ä~ÐÀ9×¹T“ À(ÔÚè)u¤C®õâLæžC4¨EØÚ<Ï>Y£ç•óÆ’üÖ޹ Rê×|£1…9/‡”h¥Öés¹}¢è¥H¼¬¤c’,ƒ¼DŸ,’JU’H¥ö&qÌ%>žµ<£Î©Nºé@£€0œÆ:÷ò.•ç|Jáþ ›S|–“KKÑ’l ݱJä¾4A„N†wi(’ceS(]8r¿4<)¥7é{å Â4,>p>23öéEºp‰rmŸ8&ñáÈE¾6™©éŠÝ±^¹Œ.' rßHÃè”%1-Õ:¸ qv©–J‚ ÉHt÷Rµ5h¦üY2tÑ›¸öåî}6q ö‘V­4Ñà˜Ò‹b¹!— äºa-ó$šŒmt$w±ä ÁD²Lr¯ˆ &·ÐÄ'ëdhûMuÞ&:Œ’J(X$E¶lvl²¬Ú»=Ùz8ászf“mÝ•)hÕI±wHÇÀTHRºm›ÇQ'w7˜4™Î1õì!+mè°797éLש ݦrìDÂʱá~äEŸŽ£F>KŠ;OœÓeM¥TÊëô­!•¦ƒjG2E.Qž>”\þêe”‰†M—6Ó…QǶ»} ûÐtW=$Úž7=«6ï{Öôà±~èÒ©6uF5=éŠx4 ÷ÔJQyîä- µëéÖíú<kÍ›ÊWBÐC÷ªW†\ JÃ0x'ˆŽ†¿¡„ᓆ aXóò}›p‹ph›p5çéžî¦Oß:¥!¦ “p>çik’®'§ue š>Ѹ„ÑyÍèkS¹Ö"ázâЃ'•Ä쀉¦OÜrþ·Ô6çiG¶~É©KK¡¦ÙXÓ¯%ermoE(–‰<¯ú¥„RC2G*U©µ 9° sIHî[®©sª“ F‘!hƒN¡É—í?®€žå;QG^¾ÄŒ_bÆÄÑ6=—Á˜%¹å־Ŀ)Í4Ù¶9E°¶²ð0Xxhçaº²ùÀòûgkÓ,M¯Á*ˆé­Ý§9L¹`ó¾„ô×gÖj`áaJ³$[xhçaš!q`ù¡ý³µÏ¥!ñÉ3ï*/¿" yL“ÄѦƒŸ~Ž%‹ Gäª4&©ò<<7Æ%#Œ”2¯5ã_‘f!†q1Ë08þE8I›ã¼%úÏöŠÁn ØU:àöÿ#@XÕÒÚ±ž6ýY¶4h ¯‚êa0Lñi$œïcàkcaër” ¯ä^Ë1ˆyÓ&bðK4”ÆÐ+ú´YèëVOÚ, Ú%yÏìóòë;ÕbÜÖó®ió§¿|ùáéã<{üìÛOž<’ÓòhÁL¦¸ŸŽx·´b[*ÿ­[ ],ýYÉ‚>áÒê9âÛåüÛª>:îh1qê†ê¶$U>êÊi=¾7;šV(AÁ^W<ƒ¹FüyßÊh &ÇeKŸ¿â÷ùÂäc>nNNJ>á?âG%åk>ã ŸóyÕÖÍ„ÏkÞò_LËÅ1_ÞÉB?¨Ñ•Í0/Þ¹Ü;;÷ïÿ%Á_nÙ›@zyK&òJüÌ9§Œ“7QfûÑß=݇2»W ¨«ñc´+]\¼R—ê—e9åͬâé*Ýiɹ–¨ù|º\œ×UßD×ïþð—½Ç¤ëã¦üjà”ºUýÕª’’¿Vms^{}žn?zºûúìýxÕà©È¶"ý¥¨”4Ýí™FPïÃ\ш+u*Û¶y‡jQŸÔÓ²=¯¿‘v¿ððþïWm¹WÎOšY³µÛœ”³Ë5µ: xŽEzz9ÔÓ«8ÐS)uÅÈ)1˜qÖø¡š÷;Ûžoøþ0¤ý•? }Ç¿çOùßø.ßãûüþŒÿ?8•¼\Œë:_¼*ðhñŠ—?àm9~UuÉÑû|¶Ú´™­amÒLaN [’¨Ÿ(‡ü°>­øa³lzÇüøíü¸šø~æ¯ø”Ó50~œÕp¶Ùòä€nñ*¦)vÅ$«Útl›˜sü—|Çlr0ÍZ¢›Eý¦GÓŽwÇmUñîu×|I‡t‹qÓVü”¿æoø[þë%®¾ÆÜ&³ü- endstream endobj 571 0 obj << /Length1 1692 /Length2 6878 /Length3 0 /Length 7842 /Filter /FlateDecode >> stream xÚmwuT›ëò5+înÁàV¬w‡â ,8w)PAŠ»‡Ê¡ÅŠC‹;ww)ôKϽ¿÷~wådÏ3³gÏ~ÞwÖ ƒ¶ÏS;˜ Hõäáçå“ÈÜ­õ¬¡0(ŒGËvƒƒ||¼|||X,,ÏÜAÖž`TÞÚ$Ðw„T­¡q¿˜„€¨„€@€O‘h¨÷°v@äð#||~á?_Xüü;°­'Àä†bÿôUÚÃüBÿŠÛÁ]ÿïÌ äîè`ÿww¢· ñØìµpDÓÚ`ÿ£ðG4àjÀ¿UÿùÖ.`ˆïÿªøïLOkØö)ÔðüQü'öPû€ì´Áž¶ŽOw„+‡  v w Ò†y€ÿ8ƒ¨àú¯3}G°­3äáÿבìàè `ׄ¹»XCþKj÷ßÚ>ý­¨§d «¤Ïõ?¯éïT¨-Ì u‹¬ÝÝ­}±î#0ÀŸFHò€|3y¡0OD Àî°‡¹cý1_D|ú'ô/$ÊÝ#QðÙ=åÿA¢| â=â•|œê÷Á©qœšÿ 1§ö=B°èÞ#A„÷HÔ¿Gˆ Ñ?H¬ÿABNkO;ØÃù>!Âæ‰€¶ÿ aÄ™- ‚¸æ(„þD\\îIù;ÐîD˜ºg@Œÿ¯ËÿÇÈ?çnpkÈ?AÄpˆ;‚X»<`AHµ¿gAd؃½Ðþ9†ÁÝ R@„NÇ{Õ‹}]AЈøDuzÆ9?€#  Â¥bùÜ3 #J¡ˆ×à~>D'(ÜÅæÏîð@â]Âî5"8aªøù3ºÞ#z¸Z»ƒ ý½™BüÿŽºÿ‡ÇBˆa\× {p/ˆ|à?B”ǽæ?äõÀaDºØçA‚ó¾ƒ0¢±§£;èÁ• zzà |€ß?Xˆð?ÂÃæþpJ„³^ Âï{(€ } AÑÕ÷D8äw?4‚Éäþ/ÿ¹P´­ÁPO}_WÄn¿ß0cþ{¬aíéŽØÀ‡Ø¿žê¿?~›ÿ5%'óøó 6€ báñÄÄÿ3Ó"Ï¿W>bÛý¶#6.ä²Åšž€Ù> wJËL÷¬!Ïé7ý )(H. °rÛr*®BûѾãet;Êãm·±±²Õ®Ó‹ö›ÇÌ/­–’*J¾­’¨©ýÕkvÈš2 ±]:²ý²±}ý™çW²\fR•ªWk×ØÅŒ@‹ŸÍ¹[ÏõižAû°ðlÄ\ï—Ô ô°ÝSܧxHšr`O•ðx[m€Ÿàk\B6›»%¸-Åø zŽ Rû~ ûŠJd8öÍùp·Û%Ú“øÃþöM5ùi¦ùïáKU¡úAeÛ<>‡ù ¢þ‡>X¢ººþPÛóB¢GÅßV¯±°*¾ ŠWœñ38Ÿ¦Í9;¯£Ïk×GÌ´ÓÑq}iÁuÌR‘qÀ‘OA„„Šjåk$ÜÆü¼k«%ù”“sÀÄüíØ¹~RóKéïw9Íá)û{°ã ÿFTBà ný÷–¥ö–° âãÅÇä2H û–å‰D{™óç®gøN‡î!òd/Ž„5ÌuØÚ#•¾J‡`Éî½2ÆaÙRÊLBö|+ô¦Žžnáõ– 4Ê‘ÿiå„JsÊxZÕ5–ñŸ,¦„øtGæ #ªCµ‹]ÑdFYGÞ ^æÜ+oØ ßé¬åæx÷.e&›ŒÈÑÕÏÝÐhSÊÒeBGž–ÓèÏŽÎéEÛØ}ÉKغI2ÖØÍ¸ -&¦u“möemõ\¶/!¡Žª´[§b™b=µ½õz£h0),öƒv[ÊÖvÁw§yV.Å÷R˼Ål“©6Ó~ç3Írkí¯±u|‡óÖUGÓg¶öëÛI[÷LŸ+ódl¬õ'”øH(§!¼iÞúöjyÍxÔ'Åš;¶âVv¯¿Ï}܆ÚVìæÏä~.Ð>5f’èOë<‰Ú%¹0 ‰Y¼rÇh V]‘¡©Œë`JÔŸ]ìÌïôTŠ%K¿!t0ÍU(Ýz‡ÄJ¶3|r€&ÚµµpÕ8züØ÷'©A±bÉ+¤Ñà|ÌT?…b!3MÏ 3]™œÔ_6 Š2Sz~¯â$DI?Wm (œQ8àWúTŽØ¬»U'͵ c‡RHûkæ%6½ K¾“$QÚþ´ýÝǦ?bJ—?õ$xÍñÜ:|c9ÖVrÿ€¸X†3+VýWUYCÑli¾$¦‰Ú~ð SFËçÃO7Ÿ‡ðEJïÞ |­fq0|ÿ2­Õ.¸ÏEû`¯é¯RÿŠïN‹²Lý1< ”ÄÝßù|-ê‹÷çx½ü}›ÿÃÔeg² ƒ2+wîQ°ø 6 äì—yÑÛ¼‚ kšÃμoóÖvJ&º™ªƒÙoÝ\ÔwOˆ7V.¼ª†ÊÕWó@òÚ ™Îˆ/ØL15Þß-¿>§Ö …̬8俈ïe7}"-ò"œïºÉ*2=å´úÇuM±iiã·MÙÍógÜ}f‰]5RÞì&|M\URîïEi®Ã(îDÞfðÓSz©õ9ëÊLd^¥UŠæÇ7Ð`~¢Ÿdõþ)—Il¡D“®üMíé²é/üÜ,éeÕ–ô•Ô·ïìÀw 0¸'Åì úU…Ø.cpGþûö‚w óöœÓäN¡Ôú,ej\V žóFo©ÂÓ˜îMåÝ™fŠy~²Óu“ÆÖ½.?Êݾ—ÏçÇšz]°“‰ÇP¯ù—ÉŒiB‘LÛZHšÀ‹º2ê'ÆØždzZrGä¾GÉBdh WOú´æÙˆˆ dåå‚¶^Qç?®“žÎΕ³c!Ë%Peb«!=RÛ"Ý—L¼y']@ÛÀ;cJßôBš{J!Ï(¶DDn>ã ,ràñkùOcãû¤Äp]¸¯½…m6‹mYj–Ì3¹Š`WrhpÖe’ôÖóïÇlŸ¯?Yud÷´›²¹ù„¤ß''XaŽâ =ø”2x™àm"qÞˆfÁÛGATV6Ñ Ñ¡;§úJП€éÑ»y UãNŠ·äv'r¨š“tLÛGÉ¿),£$ŸÝV ÇÚóšŠësn¿céüš_Ù»÷f4£ÉöpÊ|Jít¢ø¸“Ôã(ZÔKW êv¿¦)¹ë]°Õ|õ?òî_>ß“ëÈòu¦|ZÏÂu=q°†YŽ>@ó–Ó†]ÌŒÕ+ØÚÉìl·ì“‚ÝØŠ~g™R³t™UÑ4¼ïv —ƒh[²S,k bà¦å6eç걤`^[Õv<㼎­¹;d­+ ѼH=sæ›A¢û¼bÜÂÌÎIaÒᕳ©û©¥•Ç.Û"ñPñ±q}²zGËö^RèT• -ùF‚,å)ék:Ëà0Mš›$:I-r­¦ Iç­:»©“ÄmÏSi¢Ûà¾òñLÃ¥õœ”ú–fÉ]Ï[§Õ#ð´f©¬<¡,µ† 5]À ÑeR{Ê9#…6èqA¶šI>í™#-ÜbµèXÖ„¾¯ 4À±{¦½¶±'ÿòÈðùj©bl3BÚË“¡yÅ ==B®X­¢NùSBCZC&Ž=KNÇÝ3Ó’‘âh¯¹úä÷ûbT¯=U¢MÔlÓþˈ!ºE(¤™sl{`ÊãG‘Èreãœí¬ùëOá"µCCªlÎ~¢ <œ×Wµ2Æ»£ñÒų*&BlÎMeÑÃ\zñ±óÇ~áËÙÒŸ­B?MÕž0¢€õ¶ë®VÙ:¥í|S9øu,\Ä\¯Ä×CP±/¨*r´9\Ãä𹂾¼Cß§Äë˜Aõ7 7Yôeò?v,¡Èy²ë“B¥WôûÕ>¡›þ©x’/£.Š%P‘êo‰’b¾eiqúò‘ãë£ÐàfæNˆ]BX‘o}‰yuiñJèØ»~ E(0(ÑY*‹#±öÄÛþò L œ5-Ñx®Ã }þX4¹3úX_vÅ_(¬¬sèÍøšç©){áG ´·´þ%¶ò¡ô-À" …¹‘óØmò(Æ”N›_ ÓæÄR¯âÐŒYtþ‘n —n¿b{ëÞ¾_U<<ÊΕo™`ý°‘:‘­X@,±1ñrZJÈç ë@­á‘ï!Ÿ!¾±wúZ²}»xãâ˜p¾à´µ­¼ˆù§2í*!¼ûY-**ó]íô‹%$.¨`Ó…@_ï°oS† ÷JÞÒC¬ÁO§çø¨ð®9B½ŸÃ¾ï'>{ÔÑÒ)‹Ò4wïæ¶Þ—tŒ¥¹7²/¢Omµ÷çìÅÉÛ-½Õ¨ÿ²oóeáìK=U´7LâñÈ×ÊUH &¬ gvà{e&„˜ÞDàÁ7ê½ñ¥^¢w ú¬Î¤¼òÇñCÕWüòÓ§X¸¬žF™Ï!ÞÖû†»„™Ë_ÚÚõÌj‚ kÖKs¶9Žë`LãEÌù‹ ïV7Í_~Aø½‚£§ÇÖNb”ð­äɵ5 ­w¼g*ã›À\ˆ`wµI¸Ñ€ó'v3ººqô/%´:T)Eæ¥r,ó¼1öË}‡D¾•±„ôÀ6¨ ?I™£ø’ñP8Sâ„¿ÁÈUƒ=ýQ=\3Dô‰üýP‡-Ze]ß© OŽÓ€Ò8“ÑO»Ý+´MÉN;J­¦«Î‚ÚÒ¿n«62‰3Ñd­£«Œ] ¡%EîôFù6ÇnY´¦Úw¢råÛÏl–iFÉæ`• VãPŸ™—Cxa1©yÙGcgrS¸enš þ„V¾òMô+Z0¥Ô2èþÒ 7¾ñÌ[Ű-½‘T±uÆ(*vÇý,äWI|¡=‹#óÚ,­•ö» ÿöå%Áfùíå-‘ä"d‹ýÈébŽÛÉͱ¸È}-ôƒÐë¬uø¢€Höü3ù˜ ‘]5IÒw|nkUõ0´ƒ‘ ë¥ËN'œ·v7[Vmg ®ÓȽÏÚ·©^Ûלó^Ó75_{åxŸé¢6ÞlÄ.G ˜æ>õaó££ z©Ê¸˜ÂØÙ4}nñ섘©ý=F›èÙk1Ì¡ãæ£û^]WË…SdT@{‡ôügý²;Ûœ{ìq…ó⬑:óñ…mÇ: -J@É8ÇsºÂnßl3!- V"Í]däad4«Ó´°2y *žO[²áaâ›ïÝv‚Dp…f£CüÈŽWëtÝ=l»$d#P~ä=ÉRà3ñƒfUŒQºC*°Àìï¦lÕ“—Ù¸ƒ!™þ]2|ä»Ì¿…[™ØŒ-ð홊—ǽ‘PJå"åæÍ¢øMû ˆ;'MÞR¤Ï‹€Ä?;9ÎΡœh‘ˆé±ëjcü2·]&<Ñ„HNZ‘Çíа±¶±0>3ÛF.?ÏñœÝ¤n)¿tTJ\Ò_.¿ŠooÝ'»k½x?L‘|c˹Ze·¡)#•)¦â(ȰèôòCÀs–šp>V'5öFÆýè‚×.’È n;‡dºÖ¤Åº”¬§Å¦ð_TV`îŽY­-…ý§j·qy¾§!˜¿ú[¦£¥®ËHÚ‘ÓxsYŽª ?œ]FN¬zÊNq’Eç‹à^`P ÑŽtáúH5D\Кö Nˆá•VT='ªÿ¶ºî©¼EÁIusö&c¡´bý aÁ˜@°|ƒ“ÜåÉûìJ3^ýÖô¯GJ:¸‘¿í åo>m(¶ò²Î5Ȩ—sé4¸Û½øæ©™¯f¦§ã[ÌÙýö®Ùé°åõ‰°¿±­†c“Ygì^…Ǿ«Þ²YŸÂ¸Êù˜•xá÷Nо2ÜEþúøFÓÔ§ßÐX=€Kß E’°\<ºÙ-é9ûæ;®bìY×íÞžb‰®»_Kh¶7…ðlpGýQQ²Ɇohkÿ;ìÌŒ&ó'F¡“Ø£1hV)'-2ñh}6·²¿9…;~õèÉÌXïè‡d­ww(yÏWõË{ú¹ßôÚ™ˆ¨æw‡O]IP¿Xw|ìy­9œï¼9GvâC)@ŸRò›(,{7ÝT™ýT Yª°¼Ÿ¾’Ã/&›ßYfý„…ñs˜cáU<=®µY¼͈Î&CnÆkíuÈ*ÚO~—à¯RUiW功#?‹(ÅSÜy**_po*ÂB±é4̃ªzœ¿ÓjG…´ŽËS©ª§9Æ×0îÌäxAw°4JªÄÉkÔÇ_-´ÐpŸ˜¤ÊtôW\qªáAj¨5Rp¶Ä0Ýp™íÈ‚n3\üs oúU­œíôÒ¤ínÚïÖȾȑnE{Þd~ê ü ÉÚ3neÞ|+ÎbˆdÀr‹mŠ1ý)÷°—ºè+EŸº àÃQc±Ev6°6P´g¬’÷•ìð Fd½æ• `Â!mã]¬.&Omn¾á‡„Âàkœ~cëR ¨£ò¿ÊÃ=}•¦½[ÔÏ'çÞÙ†1S÷2|²ÔIæøºOÇQˆùZX -§¿ˆ¹«tb4Êx\9#”Ÿ‚¯w{a52ªYêðÉý 5u&ü’é(")\Y¥ëmb‚rÄÁ‡ ^{Iùã¶nÖþþ`ÂjH IÛ‡”Mõn~üH–œ¼ñ5«Mõ•+©°‘#{ŒÉc5³žŽî'y÷%µT­¼!B aNd»¡ÌÑJV2®Ì@åëŒ ƒÌh)?”# ]•á–ê;< J•Dì‘—º ¾w)SÑöËAa¦%¥TµËæx2Ù"¯òM;5ýÎ ðrb9«QÞx´ªd®’nÔ½pd¢rõZÆÅC’ÌËÅó¶ú|/Ð O÷C>#Yÿ*¬–ÑÜ:zÓ¦¢°ù-™žªO>"ˆzaõ¢­*C—7=]Á¤+Vô«éVTÇGÓµIRÀè ¯Î®³[£>#Çg|NÌÏ0Q‰þšÂ#ÎMOÈyãÚr7iÞ®ÔÂø†M÷—ljãG*€¤)–(púp:ªõ}ñ䨫—§’Ìãßô û1~‰wŽui?áixqç¦~’N°7ÔCçö@Úðæ¿m4vÝšL™2v’U'#éTmî-äËó(„ü(uSxklØ‚~¾¥fÂlYšHÌX\{lÂv™Íœ»­åÝüe¿$daª,©‰X”xÌ«•ć+éµ7»GNEN›Ž8Ù¹õFÁb§XT6¡‡Äðš¼Cº–ü;4à ~y‚õ{ï¨=p }kê´Ú·Wtî/ÏO½®ÐZwgƒÛ\gê?ÖäIÔÍœ| 9O¶–&`nÄŒW…ˆþ $"Œ×•-ifñoS)„c·ÍÝG/ØiÊd¡Êš_ú?ó5yútÓ«Gša<¾·+îw„@¿Ï˜„>ÜŒº¿_;2NOä·„è´W£ÄÖ3î¥Êø; ›´dÒ‚n¡Ûšà¶b¸¾ŠíAùU’©âx.—™E’‘vu˜æc`úHZn¼Eê5ºó‰ô»ªüïzòˆCج90¼“O¼þaïiS®ÝH@ßLêzÇâÑ<7;åˆ ””7(š3GAåÛÏ-zåUãNžJÆÕ‹‡±ŸÏcmö¡‘Ø-F¤”øÎg9 ¢Ãëzç0»èâ-¼`­Ûgd逨¬5jÃ¥Â}­mi¼òB{sFük®dzp‡H—›žº’SXá±–ë‰@Q?#Dÿ1£›}uÅP̶žÇñkuëtÔ/HãÒDžÎñúb¨ƒ:Ã7jÔþq'¹Ãçäµ}“À¼Wü…ñm2m¦ßYp/7Zd¯Rû³Â²è…†‰6œ‹.¹éOmüq»[+ÒmV6dÄ)Le›=í/_–fCËB|UF‚A¤'/ò+J¨®Ó'ŒpוϿóöïL™È*6‘ Š0•5QiKYë»­uŸÆŸä„ŸfŠ“Û–×9õÓ"Õî«{?ÿízáêH£ Ÿ¥WðÞ¦@ŽÖbË4Ÿjº£²QnñÛÂj ‹;êé%¨]5ÛRÛ[î}¹4áeoGƒ þ´f‡^Ü$Û|lÓZ*{äãw|“ÙC]Ó}È’E¯ø¿-‹S¦iß“˜¥éØøh=ÑS«ùñYƒŒ~$Ò"©+V· =/8rXD Y¬¹;’V`Ûm ö°L{‹ l¦Õ¢|B/ûnMýÜd"2N,ýñµ êd]$.<Ú˜z‚'ÿ‡²LQÊ›É)/ÿ(5XÓ…µÀõ‰%Æï>îâA¹/ë¥3z·#:جüâ@¼£/OgqE&ùx4r±ŒX¤jÔjW¢Z^kSËLñbÌÌlâäÖ0ääýñ]ö€Þ6ßÁú“!·`Õ`îo]}aÜ1Ü÷Ÿ¡ã4M'­U=Q"GYxsøJƒÓÊ¥i(l·˜üS®ªL]4>xÐ ÃS†£•È\ ’¼÷2 wu;ËøGíÕÞ'–Ú­²ïU÷±~L)‰ßMõ¢ùˆë W‘&þ0‹Èxõ¸¨áë’¸éãë'nhž!¿·q)¤1%}?öY€zgXK–°æ²"ƒhÉdVÜoX¢ 2v˜Q̂ڟÎ};|Ü ÐéÞ»ËäGï~ò›àýå¢s"ßål1©}ºŸ¸â®ä‚ä÷ý5o­“†cdK×9>ÉWp¤ñô`ð×ËF~±ùºG›~ø¯}#é³½`ß+zAøVg+W•Ü,vò†5¤pã§Ü¬9;î«÷²¢­?KO“ÍQáœÈF‰»¹éôÃû_"ëTض“¢žÿ¢iÌóò¢I)g sªm±0Œ?+PžIáz|Ö¾üí=ý«fŒ);Ã@jsTáþ£ÒåϰR]"‹Xöÿé5Ón§®»B2GiÙE”OÐùc¦uœi³.½Çi>vØPP¥ê: ~ ×'&²e“ÊýEÁ঎ÇÖ ‹öF”±„ âôì Ê==9úRÂñ—»ZbãlhØ›ÈG€QwJpñáôÇ›!Èæ i˜ßɱd¡z!ºõEš¡¬hR]Sx¾Ek[¤ ›_|F®è×®þÎôñ±*µ«8­Ol|ô›Ð‚( b©úþQ<’‡ÆÛwVz{p¥È[ZMx»Ø=*‡Ðg% Ë5k%fqÐ-ê—ÂÁfQÈì20zM*òœÄ È„# °L*Aï· ûr ûåQÅ1žš€hø‚úâºx]ˆË5³C§”IÆžUÿõo±Ðb²š^Á _ÚÏL?R(l:Ãeów¿+ʤ£0©S`pp”¤v%ºâã‘Ì’ vo(ÛQ[é8—)HQ‹Ç&Ô‹¿_fG ¥(ŸŒºY„Mô)¹Jæe^ÒÚêox¼?à9-=Æ›©!ª–êõ\âˆl0jVJk8r,>PIÿÖÖ¸`1?ìO•MÄ`ѨYYÇÝGˆã7ÀšCçÆLÐ+KÕ#ºÿNûÚ«wh0<ŽÄ!+Ñ)ÍijUú(ÇCd«+½3äÿ9{}V endstream endobj 574 0 obj << /Length1 3063 /Length2 24921 /Length3 0 /Length 26633 /Filter /FlateDecode >> stream xÚ´¶uXÕÛö=,)¥tצ¤»»»;¤6°éîNéîîîiéî’”I‘úmϹ÷è¹ß÷ß÷ásÍkαÖgQ(©Ò ›Ø%lmœè™˜xròª†6ŽÌLô*@3g+C …¨ÐÐ dk#fèäp:™À¡`&&n €$Ðè^4¹äN†jîv@f•á_@ÉÖщÞÈм ´1Ù©Á!¢¶vî 3s§_9Xééeú-Â14¶´uu´ mL2 ò [W° ²µÍ ­L¶¦5 @]U\E ©¢¨®¤JÍN¬êlggëð.¢ªjê’t1a5qPƒ ©®ªöë·ÐÌߌ  ^ÿUìø+\^\MXM[Iœ™ñ×Ì ƒ#èWÙÿáöÌ ð›8ÔÔÁÖú¯*s'';FFWWW3gG'[3;«¿ø©™ƒ®¶–ð_ ð¯Æ8Û˜€Ûédü;Á¯¡ä@Æ@G௠ۿ­Á­íNÿ7ÂéWN«¿ÝŽ@à¿Ê˜:þ+§¤$°6Ù8m mŒÁŽN†NÎŽƒ¿là@Ê¿ ¢Î¿jÈÿwÉáŸ2ÿ¥.b Þ™®•§·¡ëÿNÌÐÆÙÑãÞü{ÛÆ¶6Ž G'Ç¿3¦ +à/öŽ¿f²ùË&/¬ -!®ªF/ž ½¼-¸;6 NnNyÿÊ',&Çàbâ0s³˜À"·1µµ¶³vDøÕ>1¸ON¶îŒÿG×–6¶®6žÿ×n ²11ýÕyg;Fu½3PZì?Þ`Âo›Ð ÀÚ€nÆæŒ¿Êý¥–_fæ_fp¼=ílí¦†VŽ@o)üÁÓÑÐprpz{þ¹ðo„ÀÌ 0;…>,e—¶1µpÿm3ùïÒ$@õ×A¥ŸR[+w€ ÐQÁÖ ,ªÿÎÙÿÔ’p¶²R0´RýoKÿ×ÏÐdåþ/ÏÿñÐþâJ¥`ë`mhõ?k G ÐD ädlþwcÿ¶K;‚µ/lcfå/“ú¯ãdÖ-øîýººôÌlÿ³–¤±¥ ÐÑÀöw܆ÿ! îý/ºFm -Qu-Úÿ£™¿ÜÄmŒmM@6fv€¡ƒƒ¡;X,ììOf°¦M€n)ÀÈ`cëØ9;yLm~M“ƒÀ(üËô7â0ŠüFœFÑ߈ À(öqÅÿAœLF‰ßˆÀ(ù±¥~#V£ôoÄ`”ùÀ\d#0¹ßÌEþ7sQøÀ\ÿA\`.J¿˜‹òoæ¢ò¹¨þF`.j¿˜‹úoæ¢ñ¹hþF`.Z¿˜‹ö?ˆÌEç7ÇþƒXXÀ†&  |'ýaó04søu\ÿkcýåim>q¿NË?éÀV£3 x7F†ÆàkÝÔé3ûÌŸÄ‚™ÿ6[þåÏÍúýÀ3þ±ƒkÛZÅý_ Û/‹µõï 23woò—ü½'°ZÿªÀÌöŸCGóß2ûcïlhõGð Mÿؘ—)èwZÖ_ðÞ1³‚³šþŽgÿnëìðGBpˆÙ¼‘ߨÀí3w·3Úüá¶þ€àXüÁS¶ü‚;õ'{0]ëßLîwfvp¨ øvø=xp%gk£_w­Ù ˜Ám±ý-6ðl €ØÀ¬lÿºØÀåmÿ(ÀÌ n‡Ýïe0;Cðç÷_š`cþõߊ`³kò¯Á?®Ù@¶ÌÌÎþ÷D!g ã_7ã?>¿âìmþG¥ÌÌàaü1*fp?~o†¼G 5èßBdÿåtùc`ìà$Ž ·ß$ÁÄ­þ”33¸þï²ìà ;™;ÿP+¸1N®¶€s8ÿÁSvù‚™¹þ¡Qp´ÛœÞýÇoràL@‡¿Kýû‹ ôëEô×Çžé÷'â?OÅ¿°ª“ƒ­%Pd~&ÿá"o>Ënï™À_jf°üóßÿéý«ÅïGÆÑ""¶nžôlà=г‚ÕËÌÆÊüklÞÿŠ5þûÕö×+|†ÿ‹=™@ ÐayÁÖ˜7È"¹)¤ÔG<ª †‚›á¤K@K&z9mªG,g›(Xàßâ—þ®ÀVNŠGÏ'ÑߦH‹"Óêy£5¡ròÚDYhÇÐGÞÿ­¸ðh¶ƒz@ºü’_Y)õ¡Lvžv1ÛLz[l@}ôH”»£û>’eâõ2‰T·¬m-Ƶp޹ÃÁ Ím ¯iªÂéå#ú“a¯ð2ͬA^Ö¨ ¬]O7ú.ħBÁ‡¥vìÓ0XQÝ™<Ï'ÔqÕ¡—!ǺÍåjjq–¯ÞX­¹’e T³ÚÿøDš#Ž¡¬?rš7™Fö¢0“ÈÒ1·Ü¯aªº†xŸ®UÕ€ñô¸†Ø0š½ÉtÀq“"8»í‡5JÀ€rsb‚Û¾IüuDâ‰áÛÖM:¬¥Á6ðNg–øá˜™Ï….ášH-̶JF/º=j¯ñ»èR~³GOkRÕÏcýÒÌ`UHÛýYCkŸ2÷“¤Væï,õ ñ®}î·½ƇŒ vÄ{¿j~ï-ïþÞÝzèêó¦ë|¹CmKïï¸^Úe4x‘bQu¸uædïEã'åT©ß~ Í¤"ºbѺ7ž.0˜Šì†CóÙ·ê’M)#m­´lFÿ! §ÿ$Ðݡ䆹‰’Ö—…ˆF†¼° Ùß”QŽÈê<'d_’æžö³B`1ú ƒHGçÉð¦ÃÌc'Ýì–aµPÚ#U¢"íæVùgÕ rY„S_Ù4µÉ¼¼ùÌmÌ–ÆÐ±úýÀDzĩï*ö–—,úß̰Úuõ ¼*Q/p+ßs›0f¨ò%Y4v[êhlà.ÔËp³¢²ëš.d!:˜M埽ª°L¢ Äâ…Ô:jlÄò)#ÂI1ïìpºœi£;8“Õ†v,ÜfuAS5eç‰ð·,ªrvA]% ?o]ú"eÞ¹}®o¤hÆŽÌî«eqX¡â=òèåÎßÊy®ž=¼«ž`IÊQ‹ÍrR~/a“a@W Ò3'ð/dh:Nzù%ž-ÄmÞw`Õ\‡¨z?=Šiüa/ЮªCõ”³( •}”^dPçØbú‰‚+ÚË6ºÙ²5òýkÏòk>–ÔòËÝE¢ÌÑ+Zà!tŽÄsPð¥‘+]Q«Ð»\:•nª“l¥=^åumoÍ&‚¤ÊÖ¢}ëIk®t¶/ä³Úð%mq¸S˜H\|ì9–^NÍ©DÄöÊ9»åiÍš˜ëªûX£³bÞö²GÛöÈù¢…‰)Œ­ÝôØÒkÆâN0ì™ý+òÌã\QÅsÝ+zôâŸïj_°CeŠÇŒà¹¯Ú ËD€M‘˜?%©Z0Ýê3R2Ì×¼[ä­‹™â.‰¡ïp^e¶iu+þÜ=mÑ.½ÏÓÌOë=ŠóSÕ>ç-´Ìm }õZÑ™#E‰*Ž%&b²¡7î£'[‡‘¾¹Ìr†¥J Bº…R«‡‹Ð3¨ŠúÛµ³O¦2~ýK30ef÷œ¬u”¢H7Jš5$Ñ F»ZÓæ±›9ˆ©ðB‡ÞØ«Ó`º¨áÓIHŒýÃ"dœéxòÃËf«×¬.”§z ðT‹i»ŸY… GÞODŸ”Ò‡ò°çŒŽ ³›/¼jð&¼sƒÕÐ[ˆé Á¤ü.‚;k\ƒ¢[1wí‰ ‹ð†ºBÔâj\\<'Öc „¡E€¿KWC1ÿIHž ³‘²$tfÅöyË$^Ý­iìZàWè:½B¥"íYÅ~[¾ðÖÓxõî8!5&q@¢’›Ž9ßûÉ l½¢E'ž®™ÕÉsÚUC¯#eUc\Ñz&ãYK.—µå„ôöŸI‹®u—8³uQgºï9¬íª‘áÙÐ)Åã ÓØfM•ß$ÄC%MÚK¦ç’l+Ó^`1;í¬b¯çú@pÝã(šˆ \ŸXËÇ8H;YX7Å®qä#´á¤_Át5„«‘ŽØˆ*|¸¢ŠvHYÄÅ1¾†tTéðJB›µ§DJ YšeE]ø¼˜†S© wÐè´Qœ\ÕT?cÅ{€®^J2~ƒ©0KZ[XrNóÅ›­IÈ™´œU˜hDþcðû G9Ù[þØÓ.Ÿª—VeQ†Õww®ÔNO_/¸2˘«%(ÓIßÛ1VúεùòEõ,ƒð%žP‹pok°Ë½üü÷æ<*æ*]/ÑbMßÈHÕbÏÏÕ&˜‰d²d}ïÏ—¼Tˉע1¥È)ˆéÿ¼Ð÷uUÖS±lzòªû¨„XuÝ¥m} F&—òú¶Óa°3ª…fß‘kls ÑJU{cì€ìù¶9ñUJ~õœ5©p IâHߎs®‚ž-ÏT¬™Wï® ÍPˆÒʼn’O¦À>à†Í,Œ­€ƒ¾É/¬‰Ùcr,Hâèt˜&UBƒ&Q/ä¸)¡KYÅ£ÉQ²VHåܸ—¦/œ4Œ^^±åY ;Ùlõm­D0ïdj7®IUªê,9ë‚™¤”¥»à§WV+g‹ñÆTJ•<övxËjÜQ@  ”ø|]«¬ˆJ½1[&ïyYKlh^Ôwæ]j bºëcÂBþÙP—ú¯ïÃ1Ôcñ*n¼ê>üȈàìÜÉ--† IM[‹J‘ïô!­j·ÐÂ.K¥”¿×$AB¯üÙwÈ%Fcîòm‰Yóf¢2ôý-2&ïêÕž€2ôªx@°æ/ôiߺ tt{zDˆç9.–ᾞ{žt÷d'LpŠ5’ž¸sÀaNsþñ \‰SteC5¬}ÓùuCÕ‘×€ÆMv&T÷iÿÌI1%d»79^©³Â ·8ùЃ&Ó®GãÛUûŒÖ@ÞoóÚóe)öµTfŽ‚ªÄ·†ý-Ç‚úñæ'îÕÞQ¼?Y@d¼>Žj®<4r³Õb(¬øDOuИÉ%…®LÆ7?e3®™:>ŽDô>)DCYzD!Æs’‘XÁp)çf @X&;޽²õVÍó?,êÌö,Z/ê—lW)ö&ø¦·æÂÕ}–Yƒ†Y€0ú—Íô\”Ï _È¢¼{g·v÷p©ü¢$![ÞUyGã[Ï÷j[èýÈŽÁ'¾ÒH+,ÞÜÓ5ûº‰~žëèqš{X ü¶Þ2h³œq,QØå5P?#ÃX¨e´îñåLôµmÀ ¡¶þÈü2fu91é¬ #8ê!õç¨1f*D; Œ÷–ò+vJ·ÙYCT×t¶™ó°OdQûOÙ¥/ëÜ›>ÄÐi ûŸo‰ÙOÆwÌEãg:Ä4׃ESÚRª«†ŠÀQ¤>)HtÖ‡à}’¹ÖF¼œõYÙ8¥ZüîDSíÓ±1'uÑé¶EýQUö­ Œ‰@x ”õËVñ5â·ã·ó󤇫™h4Ð ä"bä/MÈÑx”m’em^vs”Ñò»ª9¸vÅŠ>8V-+)wöµ{hñÁ‰‰V^·;*ËtÜ´¸©æg.Çm…’;ì`ýOP±Üõ¥šŒŽ»«°yAeJl#dóû¯+'• _…ë–£ ecu¾'E¡ÍfŽuØñc#€°0Éò ç$€âÛFn¯m~]ŒÑŒ`¹SË©*üÙ’1©guFl*˜"ƒ €—ñòy3ÉÄ> ñfûk}y oàxz9ÁžëY2­>„Ù(¬šªmg¹ã¸î†{„ƒºÖ—fa6bòƒ>îïND×ÔȽfï'nŸLßk¡íÎ֟¦¡¿•îùt=yo+¯¹ò€EmŸ´}ùmޏL—ZfÑHÞµ<Ž•5@qÁæêGÔ%mPæ…¢8§\ûÀ^Ã5Rû0Å 2ºÝ]‡¨¾›wO]³H‘{› ‰:ä,Rdê7ÌšáK¯ÒÊëÞ’ùmÏW×\u†ö>38•ñh™v¯¤—-Åw«äE<ùý×Ã>Y†¸i!ÜÃT×I¹ê|ÿA Ÿ cóó ´¿ã ]ýÙˆ³•<ù£Ú2éM:¾Ï‰O5ü3 =¯ê\êàuíÚ@b?ÅÛéhƒOƒ:XyìLFaÉŸ¢ºÇ(¶ª$æðDÆ!c±üâjŽaSR‹¸¦Óì_Ó$jÔ2Õ]ÌéÔr@ôVSæhâ´ ‡\ªQï†Å¦:hÛ‘1¡ž@–‚¯!ÒCÑ‹·<‘µß™áæ.X‡Zw j’Ž$~*¯äà’ÅŸ(ÀLܳ!\|uÿ>x“³Ÿì eºç8¢Ï€ª£NRµ¥`¹Loйƒó,û8A¤Ii-eÌ?~ì›IRÏ2!PôÕjb3•ë:±â5nv‰ŠYÉþD0Ì;êÆ4Ëò?‚¦#¥yUQY»nÈ`1 ,ß /6Ù_@Ö±µkFjñµ>8)‘63´oZâKL¢·èÏf.œe‹t¡xø±ˆð81 ’›*ý>$ž¬x>“e,i.V‡H”Ê”ÖÙOR˱lNô9¦CNêûr­û$ƒ×[¥-wß`­wG­ïrTB¾àÐÞ,ë ¿Ïx‰ÍyÅ™©j²ZbÀ/yl°\¥•¼Mi“'ËâÆË•äÖˆ¾u9/@ÞL8÷} ]ŠNê C£×xfôît_ïH­ôÔ¹äÇOÁD§GLM‡_ï~Nñø}ðF…ã%æˆØ9UEØzŸÐÙ#4ëIëRÿc ¬‡‡A²¢ñ}d—Æ0–1­¬î5µ¢à UÿXl^ëml ¼¿ƒÍ¢[ö l¸²* q_u¯›1ú]í¦ÇnSLU;Á«½´Ô28­èÏdS#qNñ½}ÙÒƒÇn~ÙøxW¶u,À’6_ú|àUßCQeÕ#ŽTµ¨†‘mÅg>>× ßŒ|®â¶Â½5ç‹Is8²KìëûµLØ{ÝöJ‰uõH‹1BÝ¿µÅ¢v«ùëg©=Ñ×­söÓÚ2Ø f¶ ÎÎ×.h6˜T§ÞØ Ææɸ»)ƒ4¾ˆ›œNx:ßשqã8[# kIà}Êl ¼¥¡—²ã(Þõ©¸¬Uߥg ÛÆ«‡…@vˆfò_.ÞÄba”SF)Ͱ’qGBÕÖ‹»;oš½-±)‰½À]pœ&'\/|*õX‚‡$$Ê…H§N‚Ú%#œÞ’ÙÚQdëx1Pï}3é×iC51~5Ú`C%†5χ€Ü¨ ~9ðºÆò6­Í¼UZó4Õ–ççψèE&ÏÏV¢ó®Š8¹•(¥8^,Ë„’FŸP$b…غ…m¢­–Š¥¿ :k¸G‘ !nð‹?8¨H<ÙN›~aßšpßõ¤y“Ë;y°B¤Bˆë¥ ß›uLen½Y'ÆÚ¹Œ_ü6U›ºn@Ö*§ ©Î°8ÿÒ-Ù£”Ié$Q#EtÀ¯ýÓ]«"½U€öÐŽ’wÑK§·2RÖ=²dœ #ô€šIÁäŒgõNJ¨b[Tn7‚Ö€—NËÇö¼âsavg}ôrKç£+®æ6«dÿP$'4 ó‡[Ó™ÛÞüœ5V ,V}ïUéE/G‰=FïÕs&t›É‘Ý Xí*ÕLc9@Jk9À¤Zа©:ª’»6É’SµÏgR¤ØíiÏNŒ¥&[ÌÞLîÁ\,9?HÖ‘žK.ŽãD9 WW’^½bfÃϼùÆrÃJgh$XÁæ­µÇa,B„ˆ®±8$xý©`õ,€"Ò÷m|fYS­9µîw\â§ :Çg±IyÕõ§ñwcœ¢y$Hµ‡°ü¼M#êœå_z9æ|ŸUû²®6”ßÀ\à''¨ R!hýh/G³/Å|0å~E(Z]>ä"n Zp!ŸJâƒ>]b™àHræ=ÄM÷©o‡ô×>Ê º6¸aTßÒæÀŠ‘Ë”¼1µ±8áè‹~Þ ÷ºFvÓn£¥›l‘œí–CŸ…åàÛĬë§:¶ ódëÇ)à–ö\»ÅÞúâîlÃ\Ý9òÀ’ŒÒ[¼ ÝAŠŽ­OÅ?F©%é#¼Ê‰jô¼Q\†"«N^ø¯IòtEc(ùrÀyGí¶ ÔC]Y› žøs0Qm®e¦å[°ù©Än(ÛáyÛ[=¯—&B™ëb™è3îd ý,DÏúIô8 &ÎÆS aÞÈ «ÙÊBã¶$J ™fWK…EÏõDûÄ4)„ÃFžmÀíâˆÏc³‘s­ðAßОßT^ŽÁJæø»…v´ÞèÂ<„6Ôe¤Þ1ÝS‚¢È°‚II{¾¼44ÕBæA¨µøÑßã²HÄL~Í9Ø9”•x½Ñúp”ßùÈS²‰Ì¯2~6c* !S…—=©nÃYýLð$ác]tÝ®v~¥‘÷¥Kszú&òG©—0^sM'úºèå„/: ¨™eÙ~p|éŠâ!£ÌGº º$@W7Ä“Û[ø@„fÌŸrvŽß_é¾è\µ£Á$ð3Y†Èö‹[‹PÇGé¾§`yühWÕãYÖܽñõ ½ZšãŸxìðw¬ e·ÖüRÚoé(»µc mÐÂLûçÝ+>a‡+­péy6 ¨H¦)u¨t€v j®^rèå@IŠÎŒÍIIÊäÕÁ:—“?θDm¼Ìû#ò"™IÔ<ŠU±ªŽÑI2‹¬­·$J`ž7<Å #Œ«÷RúNsuÛe|ÒÉ7P *E;9÷ìŽÑÚÛCã¡F„¸ö@{™‘_ail\¯<”¾á¡X”BwŸ9%þ,àÔ|~æ Â3‡€l´ÓFj¦îŽ®ºùœåÛ´;M¼o 'çïP|w¶{E ˆÎf"vÜ\ÌmÆ[ß2mw‘…«ùÿ¥Ö~!1óîůN®â%Äk0߿ƽ7ç:•({AiÞk ܽÓ,ª‘‘§å{¡ÏgR¬Ý²R²º€ ˆòU­S€7/VÏ“ü C¥_ƒèl.¤[Î/W\ê˜0a(†€*¿T”T¼ÆJ:ïÔ] µ¦Ùd4ô–¶sÝl 1Y™p2 ø5Bä%RÖŒ¿¦{ü‡ìª´™Ø'Ú«¸™!C3ÉùÙÖ‰ 墙†§oGûÚi¦~$Xs®ôleíEL[÷ó9‡kÎû’ )ÍçXÓ!Ù„;ZPãri,œ €OZ‰z¹õh•ìÁБb¯,¹jvp¸ßá >‡EÕKwáâŽqê¢åÖX:äeM®ô7ž=ÙØR‰'¯¡`].*1Ä>9±o ñ ç|sLLGæõjµÃ&îir‹Òªñ…"Í|Ô·?§¶´Fƒ8ùd!jênö]<G;Нmký¢r¹Œÿ‡]óf ³—*WV{e3< †ØÏ’DK^S½6YËùÅòj_8OkL¸®UYÄC!Ä̱k‘¦ïGˆ»Ðç³ìÂ9ßmJ¡¶Ž0(.åCµm lq‹ÛsÓñ¡ç‹ÓÅõt:3Z šlâ`ÙR>üt8äbñœB”Àkù`òÓÚ)~gÛ4¶dl„aǤF-¤)w3åï¤ë-Ébè•2‡¾ø°áA¸e…í‰ö1~jƒ¤ØõL´ÛYŒ…³øZ¨½‡üž5¶Õ\h­;í2|±0å!î…!Z:¢Ò§{ulÒ1m >ªon×J‚.h@Âs”L‘èÏM›Þc_[…æ~°æúJÝ×<öXØ£±ë‘A„œ)GyÜ¢Jòü´,õŒël£vv_ï¿55ãxl¥ïô¥ÖÿíÖ@#ýøš>² ÿL¹’„– éúé'ÙþXè«ÁÄ' $åT¬ÞB/jøË}¡û8?Š©/ þx×ÑÀ|K¨Ôüw_ =AºÍÍBof0û“ðeoViû`-òȵ¨iû_‚Ö#C}ß„Œé š©Š;_è] Í-¹­KåÕ” /æÜŸ„SÈ7ï}Å]–” èŒê2#4Èç·ä°bЖPE¤cÈçê“ĤzPo½›ò0ú×§„yF?ä)OŒôi’Ô[N°Þ_é%°té̳n.øñ8¨lõÌœièfqçõ~È{@¸œYéÇ}Å¥™ ®DÙ:bãþ‚ØóžÜGPëMòX–Â,B¹Ÿ±¥¶î8¬LÕ$3ÚÉB?oíœ3±¦2¥ôäFÄs06Æ57ËÙ¶°¦U|òWUñºd8ò~М”Ëì-É7Üy3ïš}9¥MÛµkP:uu,ÚÒíà—Â/†ôÍOoÜœ*Vå¥X¡zœ H«Ñ3b&|#‘èÔ¨Œp«x¾©&BA³ÅG^åŸ ¼z§kæO¾`Zßþ¨6šY!ü½Yê鹺$%LµüsM{ÊÑlc¥VçOÞŸLXõ:‹dMë¥ìzÒÊi12ÂW!d– ¼^þ°b%{ %2¯dF ‹’«U¦žÙ¹¡aJ§­B&楉 ÏQYd>1Óu¦Þ?fÍ@Ðm<í'el4J"|ßTTèŠÝ—ªkŠ-œ Üo]%{|/ú±/®·$´o yFv?:Ûˆî$æúk6Å’sݦÓºØà®]}<¡çâæZë†ÔfÁÀãó ·:ý†r÷pM§i\‰‰lñ”¶tú}M1ÕT´Ð‡]›‘ñ•L]’ -ÉÏKŒoCŒÑ–¿¢m¾YJ èÕfžtÂÏpjPâx mã}ë EÂ(„õ;Òö%R yr¿5è_Ç㮤‡‹ÉÁâæ%S认ê0µ`È "ØŠ%…°&”áp#o/Ðp¾¶ Q¼ä¸f¬‰A¬ª+£ôç#êeN³äÉ›/;¾Ê•¥áø)Q¦ÛÉ¿Ô3®/ðž9±Zk3Ѭ„¡ä=áª}.ÀØþùÌ inÃãݽ¬¯Ì+;#!cÏŒÏÐfûQtx˜øKÔæ5µ:ЏÅû89~ÞB Õ.Y_×øCò¾Ïb—{1ÜÊŸ32kRt&Ø -Ç(»Þh©ô—»C<ËÜÂnÃRqfVW^Én¿ó2 *šŸmΞ#O˜Ÿií9õgä›8Áÿì~À¹ÞbTÎüñ ¶iU.¥‚¥¡´«7.£nÕi"ÂÞÜ ÖꌪQöxÐ?Ðo‡S‰I:téÕ 9ÔUé`-Ôk&h2?ÄZ~–èu·ZÝÇñ8–!¬¥¬ˆ"RŸÌ0*ægÚSjPˆ4z ÍÕVØu8Î ÎK ÏäÑ; /o3z+…JÂ_bû‡+~’ôdÕß‘@ð!ÜÃ"¬§n¨¤7hiskIÏ•¼ ã›ûM½Š ĉxdxt+ìø²é“2îz¾¤Š7nÚŽò<œ?Î#µ`EsÄí’)„CÞà Ûl·î|."zÍΪm: µˆxÉRvK#Ü>ÙÁW`tk-¡ñ*³—¼ŸsX€*&üT̳A²w>ÛÕOŒóðÉšVÜÇ ñ-Á™3ŽÚ^À@œ .]@aÙH%q •!ÿ¤ÄìkmÔM:_§> ‰%ëEÁÇ~'Á苨5B ™ÒuèO¡Á^—ÔœÎñÕÅ-N¢ÊŠs´ ¹·}ú>¡ó…!üñ.ò½ÂþøÜhWu£BGÏÌ•t[;¸TÒýÜhu¯) F¸ŠF•Ämu;ofeáÆ)rÍ,›&m¦MB†A"•@ÚØ—/¹ÒjñÉdßù`SáßuâÚWò 9.ÐÜÛ ùYÔ™iá°“L;½WÞ9(…WN™$Ò £^Æò8©ˆZá,ÝZ›áÝÆ\IÜD‡½²XßÞå\«,M^8{PØëd´Ñÿ.~Ùº`ˆÎ<¸Ê€“å6<Â2Yß"/N‹o?–ª]}.Òà~_¼1kÙuDpIS‘5ǤÍKuT,>OÄñÒÌ•£?Ÿæ Pâíé38r¬'!“ÙÒŸ%×ùQ^:¡ø$áõ ò©gŸzáéÍmÕ†8ýF&ß&³t8ÜဋD´Ð¿¥r[o©JC¯j×(!&1W-x°[DìÐhìŠÉo_òÎuD¹‘ö+2‰*9óUík›«È‹$Žƒ€ Çq ^¬v›‡Ë›Å‚õ<¾µXßœ½ej2 ûÊ|QÊû(#Ô¾Û¤•O?$U+¼œE^ `ÓYnøZs?b³5ó#2þ;´yø­"V´%D)³o…Ê ú‘žiQ7Œžyè·xû™nÜŠº79×S0ÜqD¡Ú?òùØÊ¹:D˜u šÙgP ”)?Hé`û…‡Ö•Â&ªøâ]Í´º{Äna“…vÿÍê{‡J※8žõkÆ’»6_gN†{ÎscJfL>ÖÖ™ƒ¾‹­ÖŬ¸é`,p±"8å Ã)è8 ƒ?Zò «9ÔæJ£º!ÿjú‚9b¸ôK©(`xŒíʼö™Ýb¬x½™áʾEYæ€6n¡L-üÖÄäÛˆe/DOÅròåv]µ6m4Í[®îàFŠì(—Ÿì¼\”¥ïUå霧Ãtm|ñ‹I¥N/‘.xê׿¡öø,ì~ÀùaG+yRría‘M¼%éõž`æÚ=ú Õò­Ô/°ÄV°fFZDdœ%®î# Ú#^1Þ¿¤s8åy騿iÁýö¬¶Z¥"#IôPÚ.#J=…±¶KVFe¥ ¯õk)UIö9²Ÿ²DÏ÷µ\´¦ñRPðDÞþ4²Ž2< ù8ÐÍç©vaÄŽjp]GÉ¢7);tJ¯+žÒúL¦Ŧi7°‡ra?ˆfºàø+û‹˜)ÒUia(ˆêlṉ¾)#óÄó‚ Pf‰Ï6;/”N•£é" …ª²UÚj3¸™Øm¿S¤7ªî]¾7 ¾MÈü扷_#ÅBç9ÄÕÍ…SÖF ?¿ðô<v7·F¯Ù uMœuþÐy â¸èG?'u¯E3@*b<÷¬C3Ë%öšŸŒžú{¯Áµ|#v'ˆ—šDÒAÐ×I=£×èÁúÞ÷[³¼³oÌg¾£08~¼AØÔÝñ:d˜ôti ;ÍSþ©“'ù‘"þ’™ó²«›N&#DÖj2Ø[ÐTò˜"(Èp+4¯­›€Î­¨Î˜#ìCé“12ƒ§›'ÞÕãÿĹ6AÕ™Ø0_ äånNŸPH~w÷#áý¼Jh¹ÈÉSøþpÅÝ0tuwV"Á$"šjaÜ'N‰"~#Ë2Ød),½ØÇTÙº#ÙŠ:T—£’ ƒ°†öòZ¡",›é.£ŽÌb!ä¼å!3ý¨øñÏ /ŒX´KC¹³8®„D5]WÏÙ·ø’:W !o‰\/f0` éÏÚJ]>SÑÒ_½9¥ÃQw;9ð „b5`y™-!ðP”áo‡ª©4'r]> xï)sq*æ@;÷3Ÿ m5Ð7MîÁÛWâ/D®–(£1Ô9I0zi³ùïa÷Σ•ìBÍs,éI†Ïݺ߹aöGÄÔ[£s¿¬@··"ƒËÎ;ù:0GÁÛ‘4 “XÌŒüw¹Gغú åîÒšö”šÒœtðn”Pý<êÔ§¾]8#›ã®?­~:¸¿Þ‰› ¼†” }Ò{ãˆ.ï÷Ð?y=@ â{ôCvê㣡öÕíípÄÛ¨i‚ºzéIÈÝ ÜóZcåO€ÊnÖLýÌ,¿­ÞöžHŽô¡Òü%]ÂZˆæ-Þ9t>Ñ„%žˆ£¬y¿z„󟞇؈Â#ÒX5–™m•¶Cê,»ìú܃íqÁN¾€©ÔZ˾+¡Ôi¶7”ý’2O}>Âüq ß>–Ùó®˜aSJÍì=±a‡âX¨8uê@ 8cý.¦»ˆáÄ–Z[Æ ‹†Ýn¦¯«O[?ôÎ!b Dg¿¯·Mº…d—?S3Äà'$Óôh†k·ÜŒ ªTOz]¾7¾]:«T‚õæprA¾­6M°š¥Sóñ[æù,{«rØ}cŸèwG‹²õI¬[ Ö„v«º›lÖgò fi #©r…ö`0“NÆFDCqV KjŇæ¹ç}άB§[ãçx¥â-ö~×È£h±ö5Iܦ®CRšiž”ÙéŒ"”Ó ‡{Â.BDÂæZúÌî(é0]8µ™[ïªK$Ô .…MͳN”ÛÊ×E j(îm3Ì8ÙtÝŸ“ŒkI}#ü-í¢¤?zùuòE) ¯˜h ¨ÏË(Yx Jf±©)Ë×_­&`)wìÇ]³ÑKH7æaNhiƒRÛ"\ÓªçÖ˜%OŒw°öÇΈko]™€”í£¾—¦¸ UljœÉ-ÝÛXçN_ݲ"Ò;(±Oi_¬ªÉ&Y¥Ðƒ)S·ŽöU«äE¿Ô½*¹ ‡Úý€Õ~Ù{ÙsyR éû1¾qtbM-ݺÄÛÜëÉ«:i×x%âV%¥äXØÿj‰ì''ûR¨E Ž"rüð¼Jf²•ÎÆö"R™çXš¢£IÂe¨:Aà÷—!gJÄá:oÊh.vu<´O]Ÿ¥ÙIê$ýèÎåÌq(ý¹f •.{ñ•O‡çÕ…Â{ ”wÌʧ?9…ó5Í‹©(÷Aá·¬‹qßø¡h“<î;òrâ_°±Í“7 êÀqe–Q‚o\örb .ÿ‚7)%ï § -kÜäí?pÜ¢œn>Àv}:9üÈ=V¶–­a*ð,¶)Á°üàá´v€ k{d÷(­ ÿ¾ð#‹_àÒ¼Bûsf(¢U0ÁT]gOôWO±fàdïØ€:?Ë,Ên9ÿýïsÏ”è£9Œ÷vZäYãÁðT3šôï^1›uŸcPL>³½OVXMõ5°#z…“_Íø|ó&?í|bq1z¿–ïûí_¬^è‘Ò¹1ä¢íT¸FºŒÅªƒwSI†„·¦A˜~Ê{vŸ¡¡]ï†sRTðõ¦FuÓ½; ×3PŸ£¿1U¬§pvК¥`k*OžCâq‚zå«°OÒöSe„4ÿÀÿÙýçèØ¸ŠOœ‘m ϳìÏ ’B)\ý¶3ĉÞWE|Ðß#^IE:bžë8È«UùF³}Í=Àp¤•"WÒ ¢Ÿ÷ïÇi¼&Š‘—,~úI{f?ˆf:7što©­¥Èr‘ø4v·v4&ƒ2º†æ6Ù?ÿÐ9O"Uþ~a\ Ö¬¿BÈža)Ô,°Ò…<@(rèýM«ÆÒÒ¥¦„9Ô¦zˆÐâãoÅ(ú5I J˜¾{éÚª¤å Yo½°¿ÛçÑ\¯‰ÆñLùVƒ*<: |©rêXZ(õˆ ÃY\¥ hzÝ\•Çl²ú¸, 5Ží×@õ¬I÷#Ùå›Þ³È5¿äÀræQ¹µ=Ûo-·Œ˜aq"FÙX·‹òn˜È¥‚?aNØØº'·q _ M¾Ÿ¤à<ú—º[ŽÑB˜sJä×ÅÅ™É!Ͳ¬{ã`öDxãÌ:;àCØQÓ‘Ï–¿`Z‹Íi®öã6¿Â€9™GËãôô3¬ôëÝÀH²ÏÝ¿,»À¶ IÚlÜ;ûÙ»—Wøºº¢gvÁ#- ‹¦h±W~n´»|éG`¶z»#qí}Há>½”­¼#ÚkL_ëãœ27{=²7DaMnMEÖHÛãê˜øó9øF͈ —ƒ7"¹µÅ´ù6yx-¶?qb‘P˜ÂIH7]5xÔ|Ï"ìJ›|5k‹ŠúxÓ‹?ÁQ»Ø­ÿAOKN¤íèx½¥) ³€5œ²^„çámûÊûÙ\Vä·Íi:@¥•Ç^Ôã5Õ°ƒsçá…&Ö‹vÈ=o‘¯,k8<6®(eàj÷©$(qC8\ïr·dÕ¸K¹ È ³ÌiýšPë¼ïl2D—²EèJ”Ðá662”ß¹‚6O¬HâkgÌæÔ?ºè´Gp½©*–n_P9Oy6”‚£I ÒÕÛ5iAÒø¸ù6‹ÏwEŽëz…æªòB±Äþ©uC”c‰ ø£Ã¾½¦ƒ™“ùÄ3 X[èÃX×Û¨ )qOþ£èû2áƒÃ–âsâO¯ÜqœHw¾>GF<±Ãª¢¹ÓT¦1™mÕôˆÏžWæðCÛJÞy©Êì¢gHŽäxlUÁUGãI÷6úŸ¾Ý§b{Ú×7CMù¢ µÿæƒ˜Ø ùîëÍhÅ·É–y[ÒÜŠ?¥ƒÏYD8Ý]°·û  ) ,5ص™îê«'ÌOÎ*œ}hœùQ½ýó:æîg‘²á'n¹'ÌKÇéµP$LD©´PÙ:Sôš»ìØw§ ®õ†ÎüãsÔaàTŠË°}wã9ÄÒCJxº¦¼ÖçjL0Ù¥³ì9¡}L@9‚ÃÀó}|s7ÊÍøjË›a·*45%¦Õ+ô€ ŒÑ"V°Þ½:š3E> û6ïkÞû /E]aÏÕØžp2Óõüæ¶Qãë~Ë‘Ù);!áæ\ïô˜2y//¬ŒSè¤ûHgáƒÕú²KËðS܉z)†ð ¡ ÍÇ^¢,¸Õ  Bû›õ`Ev“n'ªjÓ£w”ÂíúVŒ¼¼Ž¶jFã¦ð å1Ä<ßš¢£Þèï ‹Sj9ÖOËßY-/kX-dC¶šzzÌrª'ªÈ“öi5³z¢û²ÈÛý°†¶{=Þ}x£ˆ`åéwRŽqt—©LBÄ­:î± Ùzœ¤Â®::Sf®X3–#Š»ï6`]‘ªà^¦ß›tµ@§W?Bj³[6'SÒP]©íB“i5w·ÜJL1VÃJ£Óדâ€Ã—ïENžð2É-¢ZjúìÜV+ëïµ]É£¾çQCD: |‘Psx¶"Dç‘x¢ô¤þhõm|Mè36ñz—…Ûk—&÷™sÛB–Mîýú ÏÒÅ!fú?#˜|.#ò©tðÚ_Ô8r½ÌFRÆ/£™×š ìK‚/ °yõ¹ h1¯-‚w ™Ý• }uo–MÎX¤ëKQ‘šæ¨ß]¦vÊ+Üè1|M<0•Da`;ŸzK²}I÷â³²V©$&¬Ì¢ó¼;ú~ÚGà„’Š´]4̓4¡´¾19ýyHׇó¸¨AÞ [(øME!-I­½¯¨âkf ÝøêÙ@PÇ”çÒÉ+傳[Ã’çx4gË"Ï5ËÚÑZFÛÊÑdR—œ«&ɶg·­í¾Àû!ƒ{ðUï­!<ßÉàk‘åÃä.T~Ñê0¢èqU1æ˜*ØÆ\ürÀÜ@Ô% À> &64“¡ý å·Mo±$ º²Æ7°áòãC%çNoRýfŠD8±h°¥õxá·ÂÈt“Ü*gÜ’VÂd*Ȥ6‹„ ˯uÝ‚®Z"û"yg7óø_iàÔ[1? Ýû–Ê ED;]ÏÆ~+õÿ¡!”ÌýQ'Uû‘5‘ ƒÓé‘tbu“åÃ~WÞH#|2KÑ·mcö•7äe—^D%SÂeX80Ì .¼l¤Ëwµ8;?v cËHò.—ݘFa"ÌT‰(»'¿ø,$<_ÇÍÛåeÁ²Ób&úäK­”úmÏ?6;àÜS¬£g„Bà=,gàÄ H¶Û0oG¡z‡¦¾^ã\L8r¸ÌHnE`VïfhEhK × d Œ2 lB`ò…oã``9ê±e‡ådÂŒ^ǦûÂöœUÔI¢ô5ªkJ*¿øÔbÇëîÐëÇü6ëˆË9 БÌDÍÝj•¿w§´Òª¬ó$mßBÑ anøÑbžÈ)ÀñNáÊ"…ôx^u·$RI{)«á©¸ÏøxTL ‡4ß?M0{N£˜4âÍ«Í<†bôyBË?CÑCÆFgc"Á¡ržórÝ;-Ì­ÝÝ^GKë‘!`=¿éwA©âV°!L ÒìM5ÿBÜáWš¦ÐŸ;åÜ_}ø¥( £š…ŒÊÀ>Äþ„JäJNìÕº’µä婾Zã`·6ÅÀ.Ÿ†í#•*hˆ_ÓóÝœ¤Ìw“X«i‘ÌN ­¦Êä†8dÉÁ©·K™-¢ªïßv‰=;–2-J÷« éY Ž_Ò]Ò<§~ÙªB…n„§^iýaî£/î]5Üž‰t`b˜/2êd´à×Kv^éHºüñö…ÑÌþÒ}ñÝüwZ±ÐjÑm!‚§× ˜Ñ¼×›~„’( Œ=‰öFýXÓn]©zŒïϽX°dQ“í²Ç>f"=x¹ÁƘªÒsô}€ ‡k"Ÿ`|«—^ÅôTAë€"oW·ÓÈ¢¿ê@&'mÒbù½×pòèEâKºMÄd¸öÄ^Åàm{N›ôò˜ž¹¹W²ÁÅ’’˜ˆÖ9Pt‚5"ÙWAªÆQÙÍ*öqmòêBy¥ —`ñ4 UÔJ© \-;÷]Î\]ðÖz ^2³é­¯’̲¦ôÜ©Yç“ö³ð´ç=þO™P£ëÆu© ‰/!€ïEÁÀ'o|4j8÷<,,è1ûJ¦âнšá1Ä[HŸÃ-NIèÅlÕà³ÌL0vôœÙ¡æ£jé&ütK6­¯‡G†¶.†á±’mú0xs—  ¼y˵”(8Vsö&‹O3 áÑô6dg¥ÂòBº´-Ý€b9U:^eTþgÕÁ¦¤kx9iØëôãÇ®™ˆ.o ìZ8vâ²oûÙ( xèdV)w xî ¸ýô?õàÅ2$RHZºÌ# ›Ìsžîjæ®\±ë„ü|¤½Ñhø/•Ø—ÿ‰¿…6–3Õâ{«§¸&ª¶€5‰á«Rá¾d!k†V,¬«CG‰%/[L櫉ÚOi™çNª|ƒ>D[ ˆ0Ökmfpl_œ„¿úG«ìÐùsæZ¹Ðð«$PUâàæSo]Lñ- a>&6 OE Ìu‘5Ÿ;î¤ÜrVr笸ÉOj³5!ÿä²ÖàxEÐ2ì3;®[“1Ù÷‘ðZÍ>¶ò3Ê9yN%òýóùF ôüP•ãÐ8ÞKclöŽ]+ôiqÁlÎ/*ûËeú^_çn;„ÃVügG«{~O‹Ú8!A^d^P-wI…ŒfIãË«‡ªzÂýk× ŸÆâžï‘Ñ­+áŸg”äïQR«Yç] ‹£§5Ñ (£+¿Dp* ë–¼ ޹¡?´_iÒøZÀ3Œ™¾ø¶1Th­¿-EŽ ¥$$nî’á‘exA'ú˜¹ås즒4’WõD°dѪϙǸ¢TD›i;ÂHCQšÂVy?Ï×-‘¦;aBß ã°žc½^ª8YÏé™Q'>©nv‘ÞºŽ6½¶9¬Øo 5A‡â¦-Ù¶•´q­p••gŽãË«È D“®€(8;Fˆ·&%*Ó> Eü\ÑêÒ*òòÐ…5èwêÎR52ßyíQ´$Æ[+êŸ f,[RwìBÓU}„”G¼L¥égåk¢6ƒðnÂák‚Kë!¥?p§©s/ð\ˆöpHèêšómF›'+ãH«’ÐÜ­c¹`ÒäÐf£`Ç®¾÷Æ·ßú_ =앚û˜¤…g²Q#¸Á­€¼/”NÖýÂñG‚”Ϲ:§¬ŽhS‡ \'dR‡ç§Ã¶ êÒó–mU<‰‹O—Ž¢û§o¿Ã0üp”ž ßwµ‘’ùÜ%t ¹‹e˜OV á»[Ê·ÌÃ—É  ‹:E‡9§+,r÷ÎLÓŽ#‘c曼°ŽdgDÙ~”~§öÅŲxâ­¡NO5`¬E8#[a‰œ£¬.{a¸î!¸Ì)˜æø(‰€cv¹IPB2¨ØzÞƒ±â¸ÎÚuMO7)÷PÈæÊlM¬3šoÅ›&ocÄf“´n—F–&ÔÕv¡›G—`$´"…&ÉÆÆxÏÿÆÆÝAÇ4nÙº"°ó*TëÎÖUô>®\ÒæCÐu:!’»­ffMå-¦.V>&hýÇ`ØŠ‡Àà ±.åK b¶bªõk†Ð‡s¼ô[V~šv¥ÚOÝA{›)ky±­?ã÷ï<nc½ã‹33²)ý% í6DÉÂ2Œ½¾Xc~—“…{L«Aš0]&„ÛjŽax¸…üE° ÏÔëx¤åR¿´Š‡i“In@+ÅEhðÔvÖíãÿqL÷CÌžæâîÍÊÓ#"YŸæû²÷õX‡Ð͸¤ NS¼Ã‚§Ã-¯É»Rè-ö¾%UN¸‡Xõit×?HªÌnX½¿ \‰ŸºÉ ^ãèø )g¨­øŒ{‡Ÿ÷ذ51`¯‘àÆ{®$õ0h¨né•-6eV¼÷… ”8ªÜåûýõnÏf[Ä\DQ‘˜öÂÀ€oÛ“0AÌ~À^hý@ká§¾^eÿ¸„%ÚbN:œ'V³>±Nûó¡ÐDšç¼JëVŽÂêŒ3¯ ÔkmIúøOAŨ2ïü„¸Ãä:®†ü_Žpñ¦,ººÄÓEg(ìN¹TŠ4j ½#V;,ì Š¶1·åq(´ ÿ_õ% Úõ±ë$óìj”YbuÍ+Rê(òQYM rB}·Kÿª§Õi¹Çúˆpwn¢ü«l›]Á™,é0î)ò‡³Ì¢h wäBÑhšê÷vÎEtËöŸÜ–¢rK3l@ ΗÓ8Jú\ Îñ3Ý)L/®ÐÞ`f‚Ý\Dú9“Óà±Âÿd-h†.Æ ßç>ùgÛ=à䯉¸¨Š¨‘* v5ý8áÕ ¸õRµ]Uå–xÔI ýî”]UJÓÑ~fáõ#GÆãÏ/½&*!}J ¹‚Éܯ‰¬9ôœ]ÿÊM°úÔL®ö5% ûTíÙW÷.}š½Aۉī g}ñïÔR„j´(6ëôz7Û"ÕÐG‹k E¬×CGèy0É_2}J·“î1Èx2JÌ‹åIS¢„ȈЪG(¡‡Sªß‰ô¹­¶®Pq-@4eEÙ„šò9â¤ö?nf1ÞÒ/Ïe7Êq+èÿT'¤æpX‹p:óîc]"d$“¯¥ô´¹_LÈ=“¯Þ9J•ú&¡=Iää»Ïh Úú¯©Á™º7le¿>6ÕQ% @ÆßÊ0l3q&[C…“•ø3Ï,ýÊšü §÷þ„ Y®óãB‡¾nÊ&ZÛ*|T5“z 7µñ¼8ãT™êZœºXÌ­,wس(¦=WâÈ1vGä ÉÆ&¶]’íˆãAuV"XjšÜm”ýÞ.mךl¾u¬i/ rZ$¼¢lS ¸ˆ¸é ÁÆHa@×,m:´ñ=kfƬ7;QáN«ÿº( Ø& Ú×v²ø1MÿµF|„ÔC˘y‹ ÑNtVןV8=«ð ›pMÐ*¨÷¾Ìä_àÃC”Q9œEà—çQ,©…9–ün–Yìƒ dªdsJ`yM"æ³e7—8ö-?ë—Ô¬Ìè¨Ä~ÞDÑA Ø” ×.ËUûŒ¤;ëa.oÃÜõ"îC€¶ôušV>ù÷º ˆdÒWôS¬¾Xüð„ÅrÀKôiItŒc,9qõR††ÁAöb®%»&V…šýY,f³4³M öuôö¤æÑl³ 騒.«Y%·±Rá[=}vUlaÓ´¶°ûö3âÆz"4lñU“˜ÂçkqÂ*ÖZzˆ¥ Ð;“¹^ÞÔ”"™Ý-Y}¥†°Ž¥›ÞŸ‰2!F(œóÝÝŽýôÎï˜ÖaI:bÇ›1\Õd•w1wlnRÙù¦­î³µièHýëR67bûœw‘ö…ÿ¬xj¾«€”'ÓÉ$g.A†JÃp‚fQ³ÙMqqœs³ Ü‘ôöLD)¦©;á4I”ü7¤³îÙÅ}vå‚íºûªØeuqXܪýš%â`ð± ×2ñ·ÇŵŒù&¡æ1JËÐbø ²Yl3~æžž"< ÝæÔ,¯f%…Ëå "¬Vjÿº…wl—ŠgÔ—f‘d$·LnJuýº!mtïœ2^X ÓÉï‚l,«è~%v\îê?\›©e·†A´5ÅwÑG݉Eñó&Ôò6Ƹü`}’ÚœÆ)ÉÀ0áŠBÄ}ÐúãR˜qNÄQ«X²¹š£uØ™åøú' ®°o@V;*dà 4R¬£u²loj2»¯š"bÞÔÏÜÆÙ®ÝpðÐþ¹>h­ ñ— H‰PxˆëÞ½ÂCrõn¾ñΠ¶jeÈc_MJã3Þó𶘷Š5Âcµ5³a¡ ÍL«÷ä‹Mñ+´ÈeÊ+Âpääø ‹n¢ wýÜðÝ\”‹£}èåOqúÅ„BoSJ?œJx̱œÚŽÄÒ uøûæ°ÖMy b3i`È + ÔO•Y<|R3ャ¶Çg…ň…Á*l ‡HA²äèÇqQ¿ýhÝEÄ‘;l-L9;•Ñ/ÉôÓoV?J)ˆö8IT=šÍ bÒˆP¬·ƒä"~þ÷ö2¢@+ áÄæŸ–…«óeqà ³ô„·÷Iøå^áËdÙîM4Ý‹¢I”R(áJ8Ÿ’1æóÜ`Ú6£Ww῟ә{àqr`.ÑÆ3ÈØ[£|0°o\—OŠPîã?ÆéÈÌš +h6¬vÀ«¤nÝRL³4Y$ù£§ê;—ýÛ°'™€U2!k´ º…ÈûÚ¿ÝòiV¬¶g8”(YÄòN¯6)ˆ ×­b•ÚP%²HPÐ`bµ²ÛˆÀ&›¼›†_©‡†èMÕîû*÷?$R$üþ»t¬-lÛB—WÒÂçd/‰ÆrÇ{S·mÕ2‹Çðßv_­ÄÙxå“¥ø8œ”*|ážÇ»èå·ª,ô?¢«Žä!;ÅÂiRY”Hêw˜,ÞxP1UЫð}µ®Yw©j€äœi•b­ƒ6eìŒëKwíòÊ ‰/•TŸÙ:é­Ãš ¯ -šúåçHŒ½{m)‰n³èÊYБWV„WÊß ywybB扃 xP‰#ûJùÊŠÆíGlõæÁ(£¿“ðVjYß%­$fLš'êJXO”$ó¯d¦ð©ÎzÄûxœu1üË¥8b´ídÍGI¶"@þò/M‚F‰h…먚è’×Ìš¢¹÷˜<÷mf9·œ¸ACû²Hªd<ß)HIÓÂñßàÍäa iCjª¯}V®O Ë‰Ð¾Ïð\Éøä¿È¬+(°dMÎ Äðëb4˜øÖøw„ïwà¸ðÇIòަmiº^AÂ?„ýuË6ò< ê\U­'Œ¨ÕQÉx« Uц‚Sj{J·¹ žJY§%’åÁ‚Ëáô.s›d…G;AO̤ÕÁô¸!I&…–4ã;¬uÜJ Énm÷¡ß¨46‚>dVNж¢nn­Ñúrx–6Z¿C§R –Œ\˜ç¯$Ïø¨0ޤ@Íg¹0A âësÔçÕs jˆ€oFa°®$ó &#Q¹;oØûºFõNš´úN¡pCæQÓ”²Y_æ®;‰ø~^•d¼‚„ÔNZ5[·ùކÛþäËxhÃóãói0ÍŒ30‘‹ëÙbù®×ÒÕ|1dv;°ÙÊz!}¾›R~G“ôî­¹›±û_8àõ‘é5ÖŠÚO«]×öel| œ¸‡˜+f‡D˜ PÎé6ÚððhÛßR3áWG”‹­Ï¨ ‰Ws•/Lüõ×a WŒân5d½æð(†{œñ³¡~D*Õâ2oàñR‹MNÆ%äüR†ß‰Ÿ1JR;^œ!ÃÂøqD+)ëÎ_Iùü6¦œºkn®<Ç›FP),0옄˜ãÜ —PcËÂ’˜ X¶í›ˆO”•Kžnf•G4!‘a'W«íàç¡ßNEÛ³}§gºà‚v•’)†<ÌÛå*á1µ'ZÂTPbº[c ×2~T­0®F¸®D Í¢;'F%Ri¹ÍL)Ç” ~èÌ”ÕYbrtÕn ßÞ_g«öŸ Ú7サI54ÌW¾/¼RÝÀíèõA;üšQɆMrp¶¯y<Љ}ˆ@§z«ßts[béów\®ÚÞX Û)™òní2Ãsa?.xŒVë ò--%¨[ͺg†MF.+,“ѧX ZÑ£˜bª2޹œsØÊo˜`{ÁNÚ;ϱú´†þ{Âä1î?a†øW²û/@;ìú¡U8Rp9¬t¼WbÓr ý«óq&t€Û9ØHJ$=F¥šË÷ì>< _ .Ã4"É­Þ:C;¿t?7^¸Õo'ŒwÍ©ÇúÖFìÔ›¢Hžokôص߶׈Ùõ5÷®§î?‚÷GzóÖøvÕãK¸d®3@ÏêP7UtæÍÁØUCç̵Úmà`1¤‡Z¤ÕØvÜEü*ƒ¶X8¦Ãñ©-,»hŠ}áôË˺Kn2mÁÁ)ÉÒÔ†ËØàC¨iñf¦¹,ÙáZ/Û].¹’r!À ÔÙ±<¢÷ ÝO–·¹ÏÛzÜnÏ÷ ÝnÙ=”,ö^iÏøÒ>Æè­åóolÕwm]±·M?È}ߤQ.ó…mPÒ!}PtÆm‚*sœ†…f£åße÷·Ö'g™ õÎmP¯î¹ Òƒyäþ RŠã’ýuõÐ yóȉ-¡ÙåÓ-W4ëS¨ åc4 ÁQ·¯$‹ßXýÐþ*%^^šúUDÍó]Tøа­7ÊXβ]61:¦o¡à£Ìá¿Þ#N’¥eþ(–T¸!yŽfU¾ÐçÖì¾Gäÿcä7”ÅUðgˇbb"R†ýOÔïË@’öÞmçä!òÐÔ÷iµÍ9î.þDÌáë_ÃË€åK/éEšòÝ.)Wöô8?w–•É©iÞX¾É¦ûÅ¿7›³l ã ÙµæC(à³CÚU)»R®Ñ©uÒÇzžKvhŸoÅDýÔ¦XaÁNôî®`ªCfÂà ã³©0<É'f>D6Sc“¾å>ðÑùÈåà/ÜÚvÇ ™%ÀåÑ‚L5‹âPŠ]*¸ ˆ7ím;AÌ€ã«ÍÕ+ãûYtn^œ» ªt(‚ºkŠïJLÒ±û}è³}×9õ‰e&äíxr’ZEÝUQ¶ÛVXÚ¤{‡‡]¯¶Â81QD—ïè*‹c–ø^ÛóxRêB¨%}ý|¿¿pχÍׇÉ4§È¦ŸÇ4@Dzr¢þ¸Ùø5Ýq "Ò÷´ǼęýÓöT BPÏj˜fþÛ9ÃìZ1,_s1ä>æ¡Ûib‡Í²; »¾iˆÐzÖ^cþâ°RQO‡ÒO¹°89›Šæ‹¥ ø`r ~&7┹yjº3A`"•_P7n± ° øš¢Ÿ”œîá”aûwðJ;ï¤Ëx(Ôz2¿é¶j<Ü*.‘É»³¹þÕ9Ìöãp³‰«šV~œþ—Ÿõ ]YŸ˜H¥#UÊÉËÑóC̘ê`xÏ}²Ú§ ªûJ×ÑÕ¶«ÙÜÕ)T’~>nØÈV6*í³,Ù:~LÚê:ÑáðºûÂúü¤yžÝòk”~c6XÅ›mù9îÙ•nóš€ÎaÍ\í-ߪ£RþªœÐ¯v¨ŒD@bs””šeÔúŽ}åÐ¥NÎ>ñÊú?/uÄ Š(>3+^0·2m}ÞýE—ùú`c«ydËÞ_š’ç?‚5=ø¿C¯ºïæL¿™9aèA²q9B!Ãñ‡'a˜úbS01ê•ÇŽ&¸áÉ8±œ2²1ƒè«U \“ª‡"Ч©¾Žž§mÛ–t—¿T¼vŒ ´5¤6ŒÛØvWüÀ›åÞubŒFÊÄ"|öâÁ[ÛZ¶ªÊIp7¯nN[„l«±Ž'^°Ïh …BN.ÖÀÜ©fÄÍP2/4&­²më¤É>ÓÇÉwvt{rDu û•þ¶YMNn¾F;ö,RÝTt{9ÓÐ~X‘oó£¤d'ØQbŽW˜i¡1+­¯ÔØ ÃbAÂZ*\i2Äk‚fD -ÒŸ|jï-§ýOie_¾“ <·¸Š+ôiy‹Nà#°±É’Q=ظ¾ÂæÏt…;“®Y=äUæŸøni”CìuÕÊcÿ±¿ÝÿJØ™Ò}‹Y—7Üiˆ©è#¼ éóÅ©7ìïéF¨¨$´ßNhi6†²äм¤Àªà½ÜD£}n²|¡©w€•mzY<]>°ì¨$ï]q¸úZ°º$TšÒÓ/”TÁ«YX“L§x!¬é«N*­÷òöL<ö©µ}½§ t ëø„$²Ý¶lH¦/×=ðh®)Ñò\>ó`ìh¥¡ÍŠÓ ãNf9ìvjý¶0ÆÊgnýN†~‚H“qWDù’°…~qdž2] °W polúÑ jÍ´ï̪¹Ú׃ƒ¥t;À«Ah…ò¡ô;þŒrPŸiø3Œï¸ †Áò÷á/îq¶Ô¹lø?ÿY›9’s¤oÎ_2h÷ûäNö¨±ð66O-QcŠ ãËTÀ1ñ*#,+ÜéªçOY^·¥n¾Üô‚þâ·,b¤úËöšü¥‚DüQ•[ê×#­Å„²ë·‚Sæøúz–]@LNJM Ÿ~¯÷S219Ë `†ÎÇøí|b>ù¤`£í$ý9P º*,|®‡¡Èž}Ií*ô4n¥-U:TWl+a8ÇÑžûn‹½\;9 • – ‹ã2û sûŒäÑÿ£¹BÞÓU ˜Â&‘ö¨›Ô­èjÙÞ÷"ð¹3÷ä=Ñîªc+QÁºÿ›‰Œ§¿ì8ZbÆ5Éj þðñ!á|ò09`ŸVô²H-F[X×.–÷*!‰FÜx G8ïÎØ’ÜkÒ¼È+M¨¬’öwc9¤ËP£WÊ|gë #CX²ðÃÆ…>ß "Í»ò_!ìgaPØ]V<<f¯Ñz²(¶Ÿ¼°åÝ}øüKšT3§ b_™\ÆxvfÊ‚ ×Ì+­îš˜§\0ßLzëºÙhpÓ”Òž©åóP¸ï… >M|k®¹ß‰-êŽI¡ï뚊=woÅ„÷z\Ò]¼y^¿Í÷íë¥@üàb´$ÞU²wÈw!yQ:ü²¡bSSRÂ-Sº»¯ ÇçJ†_X§CðLÐF®3j€Á?£»Ú\·þy¦bvf_aÈtØk+}+•¡fºT·h?ʶäHY‚ê¼áx¨Y²·¾G÷8„nüOP3 HÛÕPôÓ¨_ëžæ[Ë>hýÃ8²¢íŸ¸äv>äzÊóX;Ïí)¯€½Ñ¡Ò—Ñ—>aíúŸô¦1ÁÞÛÞ E8ça´Ç‘wqg*ØÎÎ9c˜]\øQ0‰õâÎÉ¿Tê Ñs.²íƘ xPšŠðOw&÷ÅÅãùñKãÒ¾9Ú’Ñ_¢·Ñ{v“Æû'‹ÇPþü[afg÷l/»QoÝsÉ›â]þR1?"C ö¿&(˜Žh­ÆÖÒ–Ú3[G8dp°¢š ØX{¢ dAS’ÓÐ.%ˆÄKt°e$Ü¿Ð'J‡tŸk§0Kd„é_~àG\ÖiH‹ž)–ü=…X`5 Õ›Û)ÜÄÉù5 N`X–7O†úÿhP†œ°°rI %ÍÐñ Á°Hƒ÷¼-{yiö©‘Pdçîi5ç©y,ŸQúÂoò‚ …¥B¡°íbNH:îƒßAoxáSžúîÔîôDN½ú°nÕT=”h¤šÃÛùSYç¾üÒ²¬­#ݘãÚsl:sjEuýzÑ—îq†å+e‡S‰’¯’6  $ºìAƒC”N¿ »_BàôS¢3¾ç1·®º$xš Â… ‡!.°>ÿ}e2z"+Àþtac1`Uàj‹YÉÆóoÓ¾ßÕ⛺¯Îý¿ÞŠÉ-ú9VËxë cáõ ФâÔ%j©“@Ï-€”Üн(¼žÕ%© ß «‹bÿ¯/ÃCõ9zÊŽ_ KÉ’·p¨ÎXœÊþ»ŸrÎ#"‚væ­E>ŽÈ›•sÀ7Ñq=芚ñÁˉH¹ÞM0í«ÝÉò&âv‡Äþ½ÄŠ¸Ê =äÎîöÈðe ÛC¬ùÒqÌÒA/ì6&ÈÚfbJ÷µz×ÅJƒç.Gñ´ó6A¿´?„êKí÷ t*¤‚¦¸piÙ醎Q·Nñ?U7W¾‚àE´Õˆœ—0Öd;̈ÂvgÊ]܆rVZÌsß(¸i°6^Nf °S¨íìrkâ…ТdˆëYpà#E‡j؈‡×è šÆßŽ/@¢ ´Œó6T^ˆ'YbñkOó9ë 4Õ{žÛû8$u\ ò"McjZF9Õ‘®W‰²$‰îñ°ò=aSá¨7ÁB8ù$dç„Sñ¨˜x{å@ÆjA±…äR®3%.5vóˆÐ˜µ’Iã–ËÊ9Äb½s¡8j?लƒ¹IãRêzD-üAK&e8]^_b(F©¥D»v0P±´’# Žù JHœÝ¤áqËí ÜU…B}'„¤`¦ö ÿxÿõ½ !»áQH,íxd7ÝÑNàü‹¢!3ÎvØ¿¾Uçï›Û™—òPåÈÏ`ý‘˜yçÞåçƒBjpŒ½ô,e%XûGÃÇ#éaÒ´~•½£]³ÔÃ'C%Aîò®ß9 ´Ô×Ðå{¤êÁ*ÿºaûÖ‡1 RãEAFâ~‚¬ôäX–æ;eª‘9ã€ݧví7kd1Ë–Æ”Puk8(9¤ç©èÙ¯þI¯5{.r»9ÿ|ë¹pþeAûÚðÔ…ºÞíÎC½H)5mžaúa4ÎÆØ•ï ì%¯We‘”Ü qñáùEŽf4ó»õWÉE{@áÔ)~"òVGØ$úª–ß,!ô/öfÉ1^Ó|ê¼ùwšjMhÕžÉtêSÛ( ÿj3'0ð†y™@ª3Ý3¼äSØŽS Ó ÙpÕf÷¹Çx$5‰ä¸øS›S/ë|‘˜çŒóÀÄ%¾ßs޶ÕP8 àœ$jÓ„5…)¢°¯b‘Ó¡Ò®2p\û÷¡æšl˜s0®a’\jžÈmC;9¦œQ¸ÛH™û58-©á©è¯µÒ7¤ëˆÍéH„`‡}.caµLý_cºvR˜]á¹ V8`‰Z_w%Óx?ã]ZíÛvx=÷˜Q"•î Àè1¯EÅSƒ*k9ÿt`ÔZ×>ç ø$\S95n¬áϦ‡ƒv|0wÀžÜsiY”j"]°Ïcƒ©¼øh±wñâfăŽ4<¼òž%)_Æhc{^˜$G†¯$÷À‡ ª“Û©‘\ìÇHœTìçn¶€|ÁƆ‡€1 |/IkߖݶÀ&k²è•ýE_'~¼>hz(nãËÀO´ýý‰ðŸT!ÔáúI1ñg(½‚‹¤»élívÑzû¼©=qaÐ΀§ŠÜSÿãD;‡zY7¨f%Ç]k ÝtH­÷©újóûéS7yóƒ0Oó„‘Ã>¢¶Ê] þÅG/˜hµ º…¿ùªÎ™èO®OH_ŒmXk„ú½³z+»81ãÖIÈgxQJ ôÞììhÎ÷:U2ðL&Ài¨´ä’¯_°%3ó£E¶y€ìò@¹q¹h,æ”~ìãpþê¨å~ÊLTƒÝœÓ0D ¾®ÀÂyGŸ—÷=ñÃ,¢WîN¯M\EO篢œÝïò‡±~úH6MÕ„¡¦£D›Õú 1Æ‚àÙ£»/ ‹–Ú`ʨŒ€V\¸.ýû$&ªGi_#h†.ŃnJÝÀ/ðÃÍyâ¡LG‹.:ü̾%Sö ì^©DfלɃ—%gïë–”*3ü¸É<OÑ~«N8”ì`Òz™›]Ñ),!Èîop$ÉóÖˆ.>y¨‡•ž#u©<½G§¶Ð š´Ï,Œ ,š’æp_t•m|›3ß«‚þ ¿]ü¸k &_w·ºup¾5RPê‹ö€Ér5¾ öå'ŒTq)’õ_“j¬F™‚’Üë¦[ô ³¾uénq—Í/ƒYëê«qRÓlL·œ[KG+’“4?á3°ûœÒý à ÉÞÏqLj±ßÕÐb7ÏE—=FòÈüøVßܽ§ÇާÓ6±¯\IÛþÓY”Yœ‚¤ ©nßTÚûÄpÕD¥-5‡+håcØ{ØDèsNJç¼YxŋҪQ¶êð´`S2ãMOù1dlæú(/çÔaÛ‘xÚàid.·ÜâU©í§fÚ˜Ð;yœßî€_ ìÍϵ"â¨BÔtü\EÒ„Å€\Jn÷L«õ0fwA“ÙÚôÊ×?}ÏV‘HtK u 7sìû‚µeÍ÷€¸ŠT´úí¨×‘{Ð@Hf{ˆ×ÊÁS˜=»%ˆ)ÐfÕn„úíh`Ûùh>,YÀ„EÝ?¡1ƒ'Q¹ÕRhÔ )¾^Žrh ºDÇ¿iGpÏ"˜+ŸtÉÑ<ª.ñ¯-Îùp/½‘ëX0Ý:T*¡€«;µŸ<ßTîãÉc¾|¬l´ºº½«5·Ó9÷wuËUgj³Æ,çKÜq¡cÛw†?x 1|hHñÿÐðø—Á rzDÔG›¬ endstream endobj 576 0 obj << /Length1 1634 /Length2 1408 /Length3 0 /Length 2424 /Filter /FlateDecode >> stream xÚµT{XW¥ >âB)ÐöŠ" &$¼”‡ÚBDÂC N’2fÒ™ yˆ|ÚêZ•­[¶*T¤T‘Š(m]Jy+`µâ£Å²ug‚VaÿÞ/_2¹ç÷:sî¹×u^¤”ÍWá Šc›Çá±DŠ`ä2ö:˜¤×"ðâp¹>,WW ű„‚`)¥k”]Igp¹þ,W ‚$è  (ÒRˆ,]yÀ1-"q’b+’C, Å ]"Àu隤¡˜Þl6Ó‰©æ€pD™ŒÈd ˜ „s$hî8PƒhÕWŒQRá:)­[)õàÐ¥z'žsHeQ¢% „!(_DQRó+ƒÍ?i ˆÑqfÈ”K„2¾,6RÈódÞð@*$H”;‰ÛBšxI.UxŠip×P”.ÀÓÓ`0p’ô$ÅÁ‰$ŽNkâ'Ó $0àD2 ŸÔB“0zLEËIiàxfO€UBŒ„LQ(>L¡¥¤‹hœú›-ÅôÔŽ§ c4iªGFŠA ‚bÄLI'R¥'ÁF¡Êmœ =A03$/BÄßc^PÆé7‹×fd!†É;†`zrÓ+ÚL|m%Ž‘(I‘ã!P£ZȰ'™=C1&áG„… ¥2¶˜6Æ–à´:‡J£LÙL?~ˆ8,ãúž¿àÒ&b*ž’B³&YŒ|!(­…éž“mŒá,ã`5Š©ÔŒî*½Î3 CßÓðçÉ4Äz‰%A p|À4¥Æ“fò ó˜!+C‡ë€Ñ’0 UCúÁÊ ‘T(B³2^ L\±xK UR´Íé£Â2uÃÔ8ð‡i&/BÏ àn:¦ôUá˜6¨ šåS´Üÿ?§lÒ¬P½V¤@÷IŠNNCRPmú«‰“¢!ÃÔ='Rí¤J†¢iP‰RJ͸¬ãx…оçcIZHo‰ ŠbŽ’–ö,}ï ÌµØYj•ã7„É“´v/ÖÌñ¦A%«£ Wæm4žÎ?–-,n>néêÏ(›µ"&|÷”ŽƒÍçœg‡ü«×®,ÙRS´°¯ HÈþh öiŒkž½ö¯ž³…åMTkßéC²%ÙÎÖB~ã9'*·HÒžsü¼‹Ç/áGŽÆ~æÓRT³»æ-Õø«Àÿ\ÝèN¯ëÏÞÙ缦ûKCi+µMk·qªuno®}z6j·kRÏïXôÆ£ù³çê.Ö½y·,Qc»Ì{ú[æbc€ 'ñüüŽ˜©vnu>ù—mzÕ Aëg•ý»b†6—îT_Á>y:uJÇ x¤:³ÅÜåI÷þrø»þy®fê}½¡ûÝfQ@Ô˜âlU׉jÊW*4ÿný}ÊÉßbÝz›/øn=m•ÐݼéíŸm·M úK”1°ÒiæYµºuMn¾ˆŸ_KYd‚­noÆÏ°4ö4Ì9²?¡]¼í`€×—9ë -ÚuËížÌ[¿=1چŔ‰°,Ïñ÷þnãíS•îróÊå|lWtÈw":ÎÁÀ^ÝŽ4tÎy²·liMôÕµgsåÓšnñ}2š÷­ºk¤Íÿ„]|¢óÁŠ6ÁªÎ °U®Í4 tuF¦š=Î ôN}íJº®´ó¯ßûmã÷óÇF ‹ßäêœCÏÞ šu[ç÷ëÈð4vüÕ÷+÷Ø£™Ä£,ýòñhqã¥cŸÎuÔ sX)V¶ï“|ÏÙl[a>%¸Þ?'×e¹·üžÙjéWc3O-x¼Rq¹öžû7<ÅŸÖÝrß´«ž®à;5 •‚~óN‡ãÉ)3¦´wŸ*ÅömœCš•ßÅGßÿÔE¹ôÆZä4Ãl8L¸¼i嵆â>ã…7.·ÜIø‡»Ð#C»9¦a±Åª2ÝÄŽöǶôÖ1kI^ÎÝo¦vi¡XÖTà[×Ë›Ó\`éŽÕY8„Ê6V—]¹éá`eózB™øÌUë!ªM18*2¿»géµÓ}#—ãl~¼Á©ô«wû¦ç/1¾?½`gÛÌ+ŽrI Ò; >Ñv·ê£%óêèËÌ0:ÄË5]bÕµ9õ+ßóë±V…ø]2ä_í;µ@;8w~§¹èòŸXSãlû›?˜9ü°ò󒛬yºù­Óøqvmê–õÖYéC…ò‡C/»Ö *J­‚?Žó½!8FæÖò†…UR3]—7 (¸3 ¿+»úТqU8>oº­Äìhbã×+¬$®üuä¦E…%j¾«Ö¢oƒ»ö+¨}‹[ÌzÎUTy<¸ñdnbÑ…ûŸUºdðŽº2òˆ_”öììtãžmS·ñ‚ukÏ!÷}(÷eýÚSþçM[£Jó]Áá}þÀ¶ª=]Ò¤Ã÷üŽ9õêËË7ÒWàpŘxtÁpÍùüЋÝ,üRžž_(Ÿú“ èž±×²®>qÑÖùrÓn_·Úcg]ð»Ãçòg«ß¹S[èó¹¹$¬aç’0§ªcv¾ûZá¼çéÖ\~ìÖþ^Þ •Û¬¼ÇÖéâ©'›Wü>mvŸõáóŠ;Oç ‚Wz-s~ÒÔ6¸ç¯–Ò‹ïwÚwYrFfÝ ”yÈ_?óSÖÃöEG;‡.Y û?t:n,±é´˜öÅ¦ÂÆæ…yßejªÆæ=iv{Û³þVSˆ}úØö¼‚iU?‡õÚΈ*^ŸÝbåè]Rz s£eGPá~¿`sI³áJ÷¹*ÓkÍPµÝÁ»·ÊÒ?šnVß,©¹ÿõê/t·wfcð5Ä9¤hûþíÏúb£Ëúå'GyA­|nóΧÿ˜ý­þ¿ Ö×S endstream endobj 578 0 obj << /Length1 1941 /Length2 27032 /Length3 0 /Length 28252 /Filter /FlateDecode >> stream xÚ´yeT›Û¶6Nqw îîZ(î®Å!@°@®…âNq÷â^(^ 8-îZŠS\úÑ}î½{Ÿ3Îßod$ož©ÏškÎõæ¡§ÖÐf—²[åÀÎPvn.€Šª¶…³7û°£µº¥#ÈÕàáàââC¥§—†-  °³Œ(„ÚÔ­ /î—0*=@è „¼(­–ÞU ÔBÇÛÈ `²ø h€Ý ì–n/j ³-ÈÈüâ" vñ†€lí bð²³ÿ‰ôÇû @ÉÂÊìéæX8[”8T9j`Ï!ÀvXí,m`€Р«-«¥ ×R×ÕÐfæx ¬íîâ†üim]y6€Œ”šŽ,¨Ç×ÕÖùó©t~áoËPÓyÑÿÉóbøÇ]UVGJÇPC–›óÏÜ Ä ô'ípcxaø›Ú‹« ìôW“ê"ÂÉéééÉaëîåCl9\ÿâ§crx‚!€—+èü«0îÎÖ/å„ÚÿàÏÆT@V@g7à'9ð¿”N/¥|qz‘CÿØK! b:þËàþ[; ·¿|U44TN g(ÐÙÂÙêÅjuw˜ÿ%{y­ÿEv‡@þäPý_äÿÒü/õ7à—•;úú[xþçŽY8»»ùü£6ÿ¾l+°³È êö¯ˆ@€ Èø‡½ÛŸ=9ÿ%S•RS”“ÕÖaWyi­9¬<@¶h¢‘^˜ã¨ŠPÂ@)a1s¢ƒŒX&“øºøÝç ,†b°Š‚ˆI@Ê;çRú÷ŽÏk­ÉÕ㿬5%·,TÈ0e¥Fóô8tƒ³T‚*ºh˜”ò ?òMeµ%¶QtG¥…;ºïby¾ÿƹH¥1®h[)@ô,™ánÁ‡8âz-`“v’-LtÂBßáÇÇXôJ-²L›†Ž*!¹ôtãmÃÆ”¼¾§oœÚ$qi&;u˜‘ú*Zv†sÀ;„ŽBH„B_rQóZ–V†¼+å8…9–É+íIx‰·‘Ê—r+Ú2>"˜éH›°×k¯œ£ ¦O-e×Äôí·Á+ )¥‡òVLwã@µSçšE;Õÿº1†¨úõDµÓu(–Ì•Ðù¾0.2ø,J…×ÞïúzûËô.gK>ïÇdü èW™d¡S&(âR:HÒÏsl “6¾|ŒK˜:¼„ý祮NàtævÇr:°ŠWØèŽQNB6b¡õaÙŸàL ¬ö#Ä2Ä̼\ɤF†çبX1Ì4ꕉoX Ðk¿0H;}êéG·Ì›Ç6-æ3Q$ eî ÞëïXÃÕë¯#b½³,©D´×k€ Ë‘®5¼AÇš6rçoÈ!¹ò–zWo/À¸OËÛ^b@Xw¤;n‹_ÈuÓ„ ö‹6þ XÎø ·_ryƒu4ªêJP?É´¾–Òœ\èž~E«CÏw´²6*0ùBFçA0y6L©…×™§â¤—ÎÇŒ„„ªWkËè‰ãöq¤ƒŽPJô×ð'ÔuCµ±èÀš+*X0YHdkÝö<¨ÓMÉ:§¼HÓ1ðW ~grƒÁ—/NPÒ߯j®ð øxögOYèua¼™pIk)ô6¥ÃíXMÄìR¹f¨Äh‹]šÆÝ=ÑÛ›!|¹½`|~ïJuñ²ñÉŽ;lµµZl5jƒkûo†!£-}o'ÅNôs}÷§å¼0A&8ËËåÚZœt|ho“dk&ÌNXŽ+Qť Hi þn>tuÕ|s|  Z­¾^Â?¿´û¬,¿“ªlÅ\öïWÌ}·Ýa‘õŠƒZ¿YýÃéµ<|œ'&€ž-£bì 屓®>fqŨ[Üy†¨ÒØtvÇJ˜¢ôÛÂüŠK‡ªÀø‘¶@š›r(i²›ÞAVÇÃ銒5”›ñb×&CŸ¡QªøuM'ßè”Rà4æ ¶dIÕ¢\oqàÐx|¼ •þ¼?µ®$²üª"KÁ-bWª‰:×~Љð¡ÔÕðjOßží[Læ°n`š—º°>C0€ ºæöfª½o)¼Ø5tYOÒ„‡È·‡š~,—qrª€.@ì_çO*€Ï[l›_„UD¿~F±«Æñ*[í†u×cãEËzÌp<éÊ£lÃà'¹õB’G.½]NÜp‰ÁydÄmðãÖçVþT6… Š.ÖqÂ?›ÿš%iëdg¸U@£¥i3,›Á²w;Ño•oÚùéggLrQÁýÀÂSüE Pl©ºµÈ…&z²ˆoé„M¦†ãgu±WŠÄ¸"9šYoΣ»ÚLV]j’Õ‹‡²<ŠâÜl$4tlßeÂ_Ÿ{"|¶[Ýlåšïj}ÂrÉ,§O;Ì!Ñ@t#Tá7Ze@YñroÚr¼±rðÆÓÌ|hm%o¢÷[ñIUcº 9¹Cø 2¬Ÿ.J³ÑEy+™ß•jÌÆ÷•1­ÍqnYôH˜–dJ+ýð†Ä{¥Žpg„Hkº)ïØøØÂ»àž’0‚‚œ½ÆÂhI*«ÁÜù°(êÆÆ—éœ9Eº°P)L¸öÆ•Qì2» ëäºÕB–ÿGGèÒŒþ?ùG`°<7;ð¦çg¬²Ü:‰3yÖ¤óÆ{ÇåšxÂd§ø@LY]ìÊé6è‘?ìŒ-¬f¡[üži%h¹¶þE©.w‹ü"SðüŒx"_å¢ËÝiµtÍUÀö‡ëöïl…®’TŸü$"ôGÚWCq¾9w'k7\ólÙ4ºý~]£­Í4’-Ì€q»T×f$™ì¤‹æÅ]xB—w†&}¶9Á›ÃùPrpþY †4LÖÜá Ð®—ŒU²óÊ2»Â+Q8B´ó‡øe bW'åjk¼®1êä'P·Þüõ6®qLÓ[ì¤ý‚7ÿ4µÇI¶‰QÎdßfŽSFà¬V*ÕÛûµçäÁW™Fèy‡v?¿{Œ?Ä >ÿî6³fWߎ‹'ÝO<×´O/Á•3gaì<ÕÔã7-t T:þšÎK«MoÖÊ?¿!Y—·£³øÉí]Rg ½\MjÑR2¤&e¸-¥²¿WbxÂ%¾©ploD7ÑÒ¿]®Xc½¿Pþça©ä8íB9'Ö}Ý…ià·…ß\†½x-ia®U\Ãä™M¾¶|ù47`¯š^Íþ8ÛhKã“ÿ¾âWµ(1JÄy±]XŠ/è9> fž63²7©ïïÌ¡7và=\\ÖÞavãÌXéösv^²Bðì³ÚÉÎ =cùä¶n¥õƒ…­5c „Óñ¶6æÞÓà‚ž¥\kÄO°øŠ´½¨ëÕÔ_Þ†¡Â­­£Ð‹ºâ& ¶Ú­‚O5~P^8/N:=ýà‘qyr„b.À¯Y¥/t\áÎäîÜŽ÷¶o2GDo¼ªËtxØdÖÃcˆß/µ§õÑå­~h?bÞ̾àó)Ý'âèPaÕ“@‡|[0š §ºþáZyɶã>™8"H3µ•‚üSÝꛆë´\?›y:ÖvÄíLŽˆrCƒ_HåÁ{$9~gžætÉÓ@üöVÌjËYû‰œ­‰k ¬w ŽŸ MPêË ^™Ö3¶Ø¿êCpçßp–=AF[äÜQ3¶X^{Kwˆ¦‚„jáU#ÂNÖYô¾ÛmËäZ{ü½ÃïVI5abM¦÷ÚÌ[Ó”PÙ~ÙŒˆM“ $>‹÷ýÈP7vC;Ÿ?³*“JçzLð[ûZ¹ %fïÃD‡ûªVš äN²˜Ç Ømd`ÍM”ÜÐyG&Qt5%š(5Ü–'ºÞŒ«má ËlXáÞ+|4ù8yu(ÜåvyøH™Úãbû¯±}n¥ C˜`_¡ M‹ƒC;±Å´ýüìýJ³ÞÙ•Ÿ÷¹ˆ*®T¼9•†Ó¬{Ú3!=Øžá¥\âùRæ²(P ú;yIO|3쓌Ê(ÌÔ´°—n©GdCÕIÄÃäæX-P£µÚQÏÉðП-½ê{cc¢Kƒ©Mì;füòCéýåÞïý‹å”êCcÓïo#EᩪN .¤ßhL¬>pavR’|º«WÙ´|ïÑʨÙ¨-‡ûÙ‡€©O„á]Ó²µ/Î'ðO>¼JRöȯHbÝÞ¯\ r…¤?K€gÞI®nñÅòǼ¼Z¨W¹R_G´îm1pÖ ü¸"cèéK4äÉ3û”b¡/R¦ïÂʯpeu\t#̱é>§<'A#€}eà%ßÚtÝ!ß7Ÿz—£,èµ½ÎúLÚFyD¦x<¡>ði³{èÆtTñ-‰ÔžáÇ(‹¥‘…œ@ƒ¯¤°.wMÄ{ô (,Ök<ŽE™”â¤v»õ‹èÓhü.[O¢´]øSy6·ê4ÇÉŒö°s;Cžhfç†{vt"*z–iúˆ‘‘‹E+ÇwB*F«dI Y;x&1+í ø›Ië‡ÍÎñoÚ¨?F³ÃªCXfäÍ“Mú^qB¬ç‹„+B £*ܳê9Œ|ѳüæ (RÄ‘û¬X÷'|y†$¸ývìý¥Óþmn®ì‡<‡g41)ŠèëÊÏS¯ý²=ž¿Åܧþ´ø%ƒË€ûöÈ×[ægЊÞ}j„—l›!–¥Ób¶sm^_¸0gi–ÄÅôK_1ý­¤×ßÞ2ñu¥ƒr÷M(Z«Åïá¥Ë`±é½+:ÀÁk®õ§}_–Ã5¤–»‘› RDþgÂ5a”%›ÝïFŒùÎáo>ìçô0sŠè?EpH¾ô‚´ “=ÓÙÖ½4¸uc'*ϼ´Ð„ËVo*AwM8Pá{з*ýÊ37>K>”å>5 SRK ý÷6䫝ɿ¿UÞØNt §æÔÚ‘~œn0â³Hû(UDÞÓ—‡uo[3ߠޢ7l%wã5IáCtÒ‹CHE™z‰ˆí Nâ]†t‡cnú6§1™y 8¼‰”56»˜#5¹CÇÖÚ‚K;œât½IT“Ãçó°Hâþ•=q¬¶ke°h2¡Ó²÷^-ÊM!™"BN®i°%€üõ ~€„œœÞÛ€-–Ǧã°a$9ˆYÀåk1â6A7"¡ux• eeñuá¾z¹‚…œ¼çùñù =üÓDz½?§„‹OLÙ5í¥5¦R;H²É‘Vänî[_!¹’#+e#øÁ*Êž…Ê/·"þ.µòUbkå  Ñ9‹7XÕ;¹ñÛ![£¿XQDª/GÛªXU‘P:°,æ@a <îÌSÂ%!#ЉÚt?ÜÝe¶…Gâ‘r¦%ü(\è""œU5Š*ô;DzŒz²s/¨ú•T( ¾»q¶#SªúÍp_ßRF t9û9’?62ÿ,·(XX÷+þ¹LáϽ\v‹—54âá*©0=JÆ Ðoa/I¼ï,r7ÛûÀ7ɺqÆÜ?/Èq¡xgÛ#‰—ËS4ÄÔø|8¼Ñ-Ÿ|ÏóÁÆþÂS}¤cJù˜O"Ͼ}‰øâM\ÕÇe³=%ã›ëÇþ6"¼Ð9™_Ívh@Eœ0å¦#÷òâódS:3²E¸—h=ß^›XG.~—›‚¹ñ8öNíÿ™ß'HOæ²¾šNÀ“3ÕÓ'ê~3¯JŸJª©ž«èÙ{ªAÆýIþô•ÔÚß»hÇQÙ¨^1tH§‚f òÄ-†e0Ó¦ëIê*uVô:- 1ŠÜ˜Ï*¥O£Ûú¤VÃvÒv¤&uÛš}4åæ·/dÓÌÜý»LW•C!Ì ›Úvå­AË‹ñkØoëÇé~Ñe-ìv#Š˜X?'HKÏoµ$X%rØž| óëúFœ!f9¨ƒBÀ!ì¢ÒÖÄ•þÏ5^7·Bþ #2%2]›Ø/{<¯F‚’úMJª4ÂÝxQšÚä„¶Z],C–)T='*ø;ýOt&4 è?‰Ç I&¨I •+KvyNó*_ù傯3Ã{L®¸ºÕúi3 .I_V¤jwO/ÌX䘖™ÍÙ,U*ʾpÏbÓ ibßÈ^lˆa æzÈRdTã䯖ö;ò6U¸:ò14í½W”%‚;ø^áÒgh­ç—4œ¸óKOþØ!c` —&Ù­´Ì|j ¹ÛÃ×jª>“ăSN©Ï¹εÀG,ŒŠã§S‹Dè ä>Œ\Í2Œ>—›ÿN'3„;d©E?)g“eÛVÅ´H} FÚM|®¢–fI PŸ!_5ŸÛÆCÌ4¸×u¾3‘:£c G3(Òd‡¤Ôß«pš/ȬFwzøLŸvÉ玼ugnÛwH7qØÄ%_ls)LÑä4QW=]4ÜõŽ –x7¹”oI–¦kFþ޶¿Ã/­;ºt}•¿ò[ë5²ȮMÚ•q_§Íg‰fòaÿªVSß_ºkw OÍN¿úƒá(åT$Ú)ÕµbCºôãÉ^ÆO¡+QJ"6+ÙZ©ëk‘ým²”ržÅžáHDã R¦ÙOlÂ7”cÀs.ô^M»:l…Òý²¬êJŒë Ú™égžTŠ ƒÕ$§c‹ŸþÕöÎ:bn¯"‡›o¿‡6Ù\«h5 /µ‡NÉhm„‰x¡ªµ«ßx7‰ô¾Š2nF¸d i³óš^·–ZÊØ¯c3¤Ð5}ɉ7ó‚­˜_,üNo4+ˆS iq„œåYT>êsm{ äråq2õØí¶FÜ€¥GÌ^a|ØàVIQb…4Mg¼Ÿ8§Î\ÀV ¸Ü`tȈû•!òÚŸß›Ê1íåùÁù0þó†Àö®ë}ÄæZ'_²Ï-{,v¥F¯]JŠ„¢Øì–fxX\"ïg4kCv±e†u›{ø¹ÁÃk(} ¢b[‰ËÝÛ´´~߆7cb³’]ž›Š:ö‡ëãkZ¬§|7픕AfAÜoG{𾏴[¾ön´úþ«çÞŽ|T£ÇöxÜ{U¾¼¶ÌìuÎÁb0£ ‡9$ê#§ü±‚R·õèAøþ"çƒT®ˆÂ¬ëÚ¥#A"¶§A=,ž¥3:M¬†’£(Ô903Œíƒtì@zO’ ™Ë<¥Ñ:‰†³}ºU2‚lRÑ÷åš'ü‡\øN§ï-QÑ—zð±ê¹„1/TÃŃü±µŒºÆ¯6³:·àã÷ÈŽ6¨£jZ$ð}ÄfdxŒB9ùl‘Å'J†í&UólÓú–È¥×dò›_ÖnK¿c:a5IèƒÝÕvÌuŸ–8­‡¨Ggü»K¢i*FÌ}n T½ŒKc°õ€ÑØ@§d膇úí÷aĦ;ý±?0_çí)VÂç&?¡.ÙÔ£FK5|éÏÞß¿¿²+3KÒöŠ2¯À›*-þ‚ÄËãBýàjɽ(@Ë ¿Ÿó™Ã·Ÿ$ïÚîýƒÿu{OTÑ<çÆëÙ Ñ*¿Kb’aÊ,ûiM†y&–ɤ‘¥2ÂÓ¥_—:l"ˉR —ºå·¾Ÿ+L‰ÍåQUôRÏÃ@6b|ô8ÝÔ£ö·`½`tÇ$f ;Dvz ë£<ém?ÕgøL=¿‚%"5h•^Ç,©úþ.'˜¨­‰qª‘>nÔ‹‚ºšKüÄÜ‘› ú;&þ–ÅãVéÈ~Áf<_ä6@K_ Mu,to¤•HüçFVƒ¨]è%:o&bô©]œKŸ!S÷m4PêiÍ>cpWß½K‘3˜ã-NŽ{q@ǦKSCÕ­n ¨p×V¯GmúQëWÿàíWgT·ÀÇ/#k ¿=­¸Þ\Â.¢xæC†Úbþ‘ö)©t•ëŸNêÞûE ^Õmý%þû ’Þ72اïgq»/½¢ª Wâ΃õ¸êu¡+T'_­Ÿ\Ìžøý–z–Yç‹R9ÞC…púª£¤GÜxvà3Yx.„’të±õÎF<ÑŠ†½'É!] ÈmeF=¤eªxÇ­Gš4†ÑS?)ks;o•½\0>4#— êˆÌ¸F‘k>¶^šAáå¨É}²#¼Ukó,Zº¥æÑ;XæÓÙ'“˜¿æ§©ïØ|Œ_ñá˜s>3õÝòð·CÍä…" N2»? R¸›ÅûÏ\mf˜Ë…*¯?ROòùýÖÄYÕÁé:‚8.‘Az«e‰]¦¾|žY¾ò›®rí²Pý*PSŸÎŸØ[ôøuJ•uÐR÷O½+±š®ô÷‡+±}°)õi8ÐuvÌÜÆÛSØ­¥Á>Ò~Øî%a¶ß1ø6ÈΆ²¨bìʳeœ ‰Æq†ˆ8 º4Å¢+zO½|]½µúõ!^®óA–·LíÌUd“!øâÓ‡|/Ÿqmî ¾X7Ìß~ô«Fßy‘—ïò*e –˜ÏCªB>aZÚ€­î9˜<éÚ?ïšýÀ'€ë¡ŽÑõ+˜PŠ3ŒÇ.î=DÅât“ŠóÚª>ËîäqÅWÓJ¼—$Ú…no]†aJ¸ ’UÖË5H¦üb{¤_x;3™šÐ[;€±yeŠ®Âáé"M5ïãµCã²}âEӲ̒.UÒ‘Zûf‰Q«»¼®€!£îysØfsÅú„£«5Qÿc‡…¨ÒœŽEIíd Eù&CŒÖ³ApÖ Û¥9@‡®û2™oëÆM%ÓL‚fjU*Â_0üÒJ,¼£ï]Ç<{ýÊ}ãE!Ñ6<ÀZw/ê˜kÍ:g\)ÿ1FcVý‰ðråœ,õ¬ˆ#m‹üjïSîoL|EØÄàÁ‚Y¶{ô¬õUNää~×]g.(vóãÐÍFǘàJísÌ!ö™5iM¿­8ßïÆÛå˜3”ƒéøòOdÙ¬.ñE-¶]ÀV:1ãÄ»°¯œWÝÑ‚ÛcôöˆÚl.½P“1;/›IÍkîëHÄ@ Ó—úBGÊ‚/,{Aë&9\/VWÎ â÷~â7þ/'«PDH\K¬‚Чd·‹y5›s*b‹ÑwMVd¼Öµ%jâŒðüéCg)û(=ÆBà»XP'+\Mg«Æq†`öÈŸxG_å»–~L±ÚjèJ¦ª6£$ãþ4+Ä ‡Qðø•6ÖUÓ¿ÀJš—]ÿQâUá›MºoЩRDç¬Èç"Žä>#P‘2UF‡V)…£%œû˜VáÒò£)Sîãáaq“W{†ÛSÀÉæAÛbã NùœËËþC÷æâÆ{^³gSˆðoˆÚ‡‹t¤ZŠ‘•†.cRˆºŸè“L²N拚˜•aœ¼ÅÚ1¿¾/ˆäð.W:kì%'t:|¤û=ŒÜ KÀÓºgª˜)“Q “¹½JUðé)e¨ÙÞ¨æÝ§-‚‘JVOnE£ü·Br 0—d5Ùû.‚:ùSd¼lX©oilåÛž ùÍ:$»oTT0¿´õ6ì6¥|gQ?¿ÊŸZ8ªGÄ5|Ú¼ýOÝTºûXY¤wS«"ë yIË$?ŠæN½ó½,üw?ýt ¤1;#öê{­d!`ýLÜø2$eK/ð½ñ”ÒûnF5óªÊœJ#Ц*iåüCþ &ª/šˆuÀ‡ÆÚΙÖÎY_¥Ï˜¡É݃§T¤ë]:x# ä±.0­+XÔD©ŠÇ]7QA²Ks>W<û]† A x'bXI{ ”Ûêcß{ÚQì®jf­€~ U«£Üå3Î/1_ÞÖŽ²²¡‡§gEÎ'è¥Î^ ]²6•/x*qÁü–bÒ²=.p+Ü»ÔecÀ¤!ˆˆª¼¤¿,²Óا6Îö*M ãÐÂ.«|HôôAø=ÂÜÒþC)+Îæl"ׂxKœfšhKD ¸Æ<Ÿ»ê¦±ý j6Üø ]6&Í»5 k£KGA%º (À¡–4rn2kÊ5_ä^ÒÀ©ïA"€· ¬ðw~GvêÂ~µ¿ˆæ¾â–Õ• †Eý ºïŽæìGR 'K5¹âX)0k/­óTj’Swhùé4 °jHšÿŽHýÎá¡qSzXÛ/ŠÄŽf†–êÉ×[+,æ)&`Îön´Ê .~¿C8> è®ÛEI·ÖG)­Ëqr*%{?Þ‘WcHw ÈÉ1 È7¢=¸u%Èâ[JÕ™z|üȨá„$“뇆ÃI|‰ˆzêgµÿqÎàô!mÎ8Ÿ-¾Š{¶îX÷]UϬ Þ]¯dâwk”DW!!g,Õ“ûÎ&¸<ýT†¹Û5ëztÒ—Šjñã0Z»*Ìãq Ë{úÏ#¶ÛÅq™ A¿rŸc„ÙŒîZ¥E.(cß÷c¹#ð‘PŽÚ)[ë¾µv2z\‡>¯]¤~çödöó¸È–;[\c@t4mÅÖmêKX(å‚1|016»w»ÊÜd,_KšŸ[ {—-Ô²ÅÌ2²ÔË–Ó‘d!ú—I2ÑFò«ç%cj(¥‚Ëòo¦kJ<ŦP£ìÑ>Þ¿Ò„*zÍdPM‰B9õ¶û‚Ês!C*_ÍAðå&‚”Ûzc ö›ÊJí$¸Çˆ*tC*:Ê‘`P‘²ŽÔúgry4ì®>U¯¶»Pñ’±ÜI¯Ño8¹RŒ:jv¬WxóŸõà‡ò/tBUãÛÈœÌÈÇù1…¹ªk´gG6ɧÖDeɯ;¤ÎlxwGbu‹š4//öÚ4~¯™hWׯBbà ì˜šsÙîþ&×fxÉ%©0TUbø_kD™=ç>ä¯ b–þd=l|¤ÞnÙ/$êÐÁ¯>â:ƒÞkq©£øn‰-ÊI£F+˹ï¤[åQæ„bß }9¢:ʯ¸ÍßnÅÛÜÝð¬ç ›Ö‡1¾È‰ÔíRÜÝìõÃô𤠬yþàöpv^YÂ˰ÅTöKî+vÙ›Ùõû`Ú:ž‰[üÊd54aŶz7™¼ 3v2[s ÷1­òÑJ ו –/zçfEžö'÷ɲ3ý-Ö"Ð ½Ï©…w*Ü y'Ï?¤¤ÊÚ®|˜Ø¶…¥ÄÂãY†·EÁÎò\õwP“rC´r•ÝiI|UŠ.³É98†l·¡z䙬ôþ¤ƒ¶n¥_¸KPCrß*§&8 };¡ˆž÷ 7ýì·¼ËY7ø²=¶ao§“6A)÷Ci€.t¸–¸Äoï;åç£;žß¬0“Œú÷îº! y£T0ìã …ÅÒ+£tRôkÓ›2RÐóQ~š(«¶04ârfÂàò°ð¼=%¬<Š»œöç{“Br8ÒV³+¤rA¡©åC!Ó?0$‚ì"ö®rž0«è÷RäÖ?qõàØÄx×"d/¬œ‹IsI” a?¥©ò4sa“yÍìöjþ°á°{yý*º1¡ÓTµw¶Ÿb|Ÿ)«/ʼÁÆ]õV õ<1}ö$Ó¿Ý@}°ù®ÏX~NøÁ¿¸oŠéèx·3ÂÔfíþþªg”¨¨C«uÐÀŸM¡"‰åb„&ÕÊ'1œz2kÖŒJ¥õ~“!ôxÔèÌyã[n÷¢ÄUòÜ„\øç¥ÄýÐè8m±•ÛšX…çß1iÅë¿FÄo;¤îEå¼ üÚ=¾£ÕTn@%7Œ÷ÃYf‡{Ad& "‡“7ãFHB[ízX`Ýy>à¹o °þ¬ê Ù¯ZEÝÏ¢ÚVˆ–ñ!JÍÑvúäTJyVN†=C'u­n¨LÂhÛã jΗÐË~Z²]C«Ù®HÜ~/ã+è¯ÁýÚ|Ãì1ÀVkÞÛZ¤×'iÍ÷ªá[_»-Ðûm#9OœC‰r_ %äÜœX(Ä´;]ô¼ßÞ•&ÐD"ºRÂà¼5ÿ6|8Û þôÎ<ÐÅñ®t"œiI<¥ú¼·N‚´ñ¸ZªuGŒò;‘î5ñÝ ª™#‘ÓU÷›ƒË%7â3nÿÏÏE ¥ª£ô2óéèi‚`]› R9‰ªëk÷Ç·†ê9qu?Ú"–g‡v>`¢>Þ 7ªÑì:h uˆ.«Úä†úA‚ÌM—™Î+4xip¿!±8¤>ër,k¶&†£iòX ëz_4LK â9¾ÉÌ rd»­¾Rß)&]A¨½Iàþ8Ë2R}ú“O§þ9j~S]|;ìŽs‰Ä‹7<¢ÙSAÜ&˜ºoŠ ™%ÿ³ XÚj÷¼Œ·ã•í¸ª™R#vi“&wºöOìfBϳiu¤ôéE ÍvÒùÿܦPWRPãÅ9¤áŠQä?+aXFJмËsObØ•[ÖÆ\§‚ÆgtÇj?–-¯OŒbè^<x–β¶ÌÕ t5O<Ö´kEêÅ &‹=;øoäÌìÓÛ¦ÖÃp"ô—úü ÿý¼’ãžr¶]zã<'¡wºû*‚—…ï&?¶R'†õô©kõlÛг‰,k’Œé²c¸{Õ¬¹ÔÅk'+»³he;ÁµW.Kz]n¹Íü-‹§ý#x?i»WÞ–hà£[Ú5Fذ JžÖ4WŒ¾›²ðáÓq™B©¨_u`i|<ŸÂwÍ¥ý#kÏÓ£ÛE7¯-ª<˜²GºŽl¿x· Ù:M^ªw‘Œ ßâ寭è‚Ù·öe(ÕÖæ *}Ñ­’š¬î‚J öž'·-CHrŒ‚Û“EêÅ#Ù>A¢½ßò0ž¸±îÊ»L”Å>ú-E 𑯑ñO®ïÄ:ñͤ Äï2ä…rÖhPc±¢‰ÞßÐjáø é|$NÏI4Aá[VBŒN9>[a;LMÔñWCYL¤ƒ×fÌ=4·¼>(W|þ”'㶈[Ý^» sF§tÔW˜ ¢ãæ˜JëáÏ}sµµGßâæ4ø5)ûäÏì*С|ú- ùÑé•íÏÏÓ˜qÄÓÓñ¤®N47Úˆì¾â^Ïè\YÞg]ä ºñ;yÓ—ü¥=û½}hÉNÜÆ#ZqWô™—¢µ¤ðäôhÝ µÓ´x.¿Ý5kg¸dáð˜¯áɧþÇeC&êAïÀ/6Ê)Ò š}§õÇôN83~nº•™Éd˜—{õÄì½@¥w•§qáN5ßÊï+šu¶‚}[Hh:’¡¢Ã¯Í‡á@ìTÈÐ0S‰éÀÔÎY ë󪤷DÝZвÞfœàç‚C… ò~²“Ó³÷ö2o‚´¨­h>ÂüÄIãcDAÿ ó«õº+¸îã'BD7ñtJ¿ñý5DÃ<Èà4¡ª_)˜3_ j¸[½*—<ó>ÒOH^•Va_<öfÐé<ˆa´òJîJÎ,›r…©Yî†ÕI/È-éyÿÛ0ÓÂÒ3û5q5Ê«ÓýÂuñÖ5â÷ó!=›øAalÆ3´g³ßêÕW*zûnp’|5,Œ!å Ž„ÇÈŒJZ4ãÚ´ÉiÔäxœñ]_®ß¹ÇŽ¿ê]Qõ 6Úô¦Yp}ã+i|C`+¥¥.j׫þÀ/)N0&ÎI­zGž%6"²uIŽ“ÞýÚ!™¿ý(oêýîgÖÁoϰ‘Ç#ò¬«F¾q„Sß™÷*©mÕ‚w›2MF¢N´™u’a;o…-<Dí7åßʦbKwÆx¿:É&"üæ@9…ŽÚx@¶Z¾%¸¹DBÞçoo³B‹:áÖˆóÚ^†_;-ÏT.žÂxÉ müл:nRm@zQ#_~/èD– CøN3è7#EŸbq~Ê„ß-¿'y Q÷Õ€íî»5¾ÜÏÑiþVirJÿå_œ£¯¯UWônQÀ˜¨Õ'02õ¦7>HQÇg¿ú/ ±œUÃIŒÆGÛ„ý´V®ž½VöWP÷Ð’†1ÀDÙ÷Ná™—ûÜ2-ª’Õ¡›b-R'+ |SÒR%i?XŸ 3®HÔ¡4mó«(Ó[·L¹…ó†èZ«½ï•¡Z ƒ3¯>#HJÔhDg´Œ‹¦HÉ…Dú(šEè½-¶Œ´=qÌ× æéÛ®°?¼Ý¡©‚ïWoÿÒé,f oGGÕ¼‰¬uíÃm^Þ®ŸZÄhþÑÕ½å'OM<Ümæµà¢~µ¨A±7{ŸÿXÚ${˜ÓrÃÁ¤Š|¿%QÚÃ[KBdŸ;…)*9rØŸæcͱb_ž™B -ñÑÕlñ¯æê (4n¼d›~:¸y­w ÔîÐðg§¾zÍbJ¶6¯’u*›Üâë<±<Èh–?œD“gÞfbwY+„Ɉã*²…ñ2³ Å‹nÃ?£GT÷Ì(ŽÊ¨Å•mL#¿Kº„Z­ì=…OB,Ùå]Õ¿½Öã/œ´×´”.´½;n²ãóTÅ‘ß>õg<·ÂªØ°eÛ…E$4±§/(ìúœ€NÅ&éy§¯»ó𚘠ý¦„çìòëÅùV F–O$¢Üqf~È‚LÂd…LÔäHØ©´ìðùökz˜Òõóïq&“˸;‹Žs9Y% Ó]i+=Mo­ÜçÚ ¿ã…z'=‡ÓT™·Yò;ãúÓ—~V"¡ & +βe8Ç|EØŽÉ&”=²mG£Ë“ (ÈCã`…ÅÜ9á0Sq¼FâÏkXG]k®r„¦$Ç´Œm’U NòÇ)w ×ò, é¾Ë°ü^ÚãÛfTàŒ|¾ †wm ×ïc6!¶1ÞNëËÔ-ðïèQ£K2ó¬Ä'L‘?Y?m>ó×~?_uA ¯:¸(;boõƒµ|=mÁæãÙøÛ‰ú‰¯Š¯{rì†{#u‹H YÈÜ‹G–ÇÆžl¬J’$q §üWŒ 'ªý/%ÆÇÕš^’ˆ¾b:_#E"ÞúíÚ˜ÄÈðÔ>v ^'ÀàM¬b(kŒçœÞ¢Ì:†¢#äß—·)i {Ú7§ð½Q0¾ØNëŠÚÆ 4óÄÿ­#7Ê5÷µ¹ï½ð‡•å6B:›Î-$gìY ]Þ˜øªmøGu.’î<†W4»Ä-Tœ³¡­vF>š(¿Ë°ŒâavS%áÈëAv¶ìÄþÈúÜÊÝÄA¡ÆÉ_ØzÈ‘ºBjÊbk!)®¬s¯Â°ÄèKÍfÏfÑb^âÈTaµ1§,ŒþyXÁÌR &¿Íå“…»ý+´TæLd&xødçë&~¼çWýY½vqŒ_[£b*ñ-e-TËn¾IªÒBnÑ ÀwÅÍP·{ʇ1}ºX¶³àÄVóš³ãƒ9µ!Yšß\Dã÷Þ’eJ©CõÚ(ÓX¦CûÍ?ƇO{£DÊœ RT`"| 5ÃéÑìô¹6>Æ b›âªüøá -¨ZÑÈ•ýÒIj;Fâgë^@ÔÒŒÜUáw÷Žsí\ϪŒåû^*ÞªÍan¹jŠýMu-˜ÿ7Îú‰ÃÀÊäoӵ̷ÎB}ƒqgðÊÅÕ B´‡%ÚÞ©8_oéñW.ü><=·»ýÄõÒýü>™{I ÍÍÛú'ÉYcVŒÖšU¾™•Ý ·xUªøNz÷UŦ‹Gᵸã߯ Mp‡NDW¬h“®‡£{B5Õv#máô½w¾Íè¹;é`¾Ñ*ˆZÕcEeÆo䀕/”=Ábø8Þ<7ZÛb㮂ÉwWéÉõB¤ƒîôsˆÄ®„·9ŸBË‘dÖt”ÉÐT<Ä52e…}O~úUXº /ná8à“º ।Ž5{›>Xþ„‹ô‹<(á­Õ¸0éû/I`tÿèð…ÆU4S–Éèg›Kü¨M–ž›p[¿1Nr?Ž2/^Ÿ›q‰33~ÿ,މ3a ³B7íí2Ò¸ËÞûÑ-/KÔwïÀ«G¨ Îy€ešQžæÀ\øõ”Vóèâ©m¼JQfŽæVJ™‚WÑIð;šRº…yòà]ڠƤԜ5´¸í×LÏÖͪµO@!¦ ÐÓÜ€4«x#oáF•:q\Å:Æ/Ň”;¢±€´Óí×÷¯„d©Ç’Ž1´å©“Øa×ymm¦ïfÉn$`àtÊlÉùiGš=~d88Ž²Ö Ìû6Ê”W¡@¾Ï˜8tå6¸N0¡LmfwY¤‡•Fƒ«4ßÜo,± ñ¤N(#úý3‰¿ûªât—†ÊB(°œbD(b–EÜ¡åJùÞ¶«Ñr…²z.¢ŒTÎjqw ÊѦi)+§Ëüê6ˆ-oWÚ/ЧJ³¬(ùîo]„ßÁï„õ*Ÿ.š—.Ù:lá¥ú é33ØÄ¢šçËÖ軟–².PvÃ…ÓŠQlWZóî°~³8Gï°¦Ãe:—àN£ÿD³_ºg®Dä±>£±aL/«Ž»—åªvä{mɨãU2æ¼/lDYÒäþ òÑõcW\ËšMÿÙW2JÄsB p#-Π,æCE´F{þu¶u‹“!¤mÁIÝÅag´Û€Z!ߨž~6hÃGãÚ·Àa¹úÊÑ­{§Ù»;ÊÂWF(½!ׯ*jŒÇˆÚ˜â ÔåÂ-XAo\Ü&BQ-ÒúpMåmظ‰(´’ÖÏp2 ç¾)Qðjð¡ÇŸ Y1­²kX 7ß„eã6›!}ñƒk†ó‡±þ+3„WÅ–-VY Ø]œ«¦¶ë³‚Xâ÷®¾X˜i@ý" i8˜X¿|³¹âØTüý3³ßP_ÛùØ4Îy/ƒyª‹Í†rg…Ô€p-HL¾vÖ »íl¿øýÌ\„ÄÔg/ %™³èW¾%­ð‚ª¾m$×IZ¸w›'Ù‚Q¦ «”¢ ZùDxñ*Ù·o貇\‹«©a+Å}–{Ur`Dÿá£O_S¬l‚$kÑmù<ÂÓc'Þƒ_冲YÞL^m¹^‹ÛŒf›Ý:Vý_]››QµZ{È™1ï>ïÔ~–\o‚MdÄÜê¢I}êb˜ù¡žRŸ‚“{˜ŒaB¦Ö€HªôŽb±­?½w¹@híök]ec½@"·¦c6%m¢ïX#W)ÉÈ4ÅQ»Ç»Žá˧ߌF¨>a«‹ÖЛ›U~$ªùEE ~}qj-h£·Äö·xå„üùÕÝ®ÇÏ}–=s#¦ÇÅ÷\†Äî¨Í °Œi£e©©8}GÖ:<‰Å)í¬;hNvø±û!¯¸ú sO=ŠkÄËc-•×ìžœMë‹4<šÔ˜èÊ'÷ñKqùU\ ½~0?ÉMéÿ ÷,Óa\OV·xìjwO6'rg¢ØÃy4Ü«0sJ%`gÝl<žÈ^´ôg‡€Rà àá¯nòc'S\I |²,×ÓqÒnL ø+qÇ1=‹œµ à:î•-¿üßÀ —3SÍ#úÇâ¸nî)6Üýo945Ó§ÁÂŽn‚>lÒô5ªOn&¥7Ÿ —¸ÅÔúÃ']ç¡ËdµÑµú˜ymŒ«¨Rx§ªst.Úåóµ09yÎ,Œ ökôމ%ÆUDz¹ûD“7}k’…ú1~hï,?UZ;˜í0 åKó@$c³{„­ùq>«CÂ3iï*ï “Œ±ÚÈM3 /«( mbkK{Ò׸[À-‡¦)'|6¡¼ãÃx¸ÿS‹iGÃ1*ÏÞŒ¬Õ=– ±¹(ÃsÓDŠ2ÁþÄýW°‰º.u½]]aŠšÝßc+†¸xž”ÐÑô ñVú¨–E¡C¹Õ0žüXÌç)lµÊÂGÝÉ6YýÎë‚ÎÐœÏ :Jý·Pšuhe˜lN(†Ê­ï'‡Œ’Áœß¸$/¹©0çàâßQ|!̺ÓåhÛ!ß´Zsö/_&ï˜pëd¿‡ædD9—!Z?2F[ÔºjYrL¨a`Õ†©é…OPÇÙ+õ³·EEš6ØöCA<Ô´Zî,J0É4ø-üß|¤¡Пf ;~<5Lô®g{…8@Ì )oY0`éÏAÒ¸ÜÛéðÂJ@9ìž0í=‚5pwOè$utTaÉiZ¿GUBdŠMûe×­N ¥³U¿ðÕ?ðž¾aMKú‹}ª ë4 B |¿GÄ¥_-POEÊ à%O;eá#ŠÂ¼ ‘q"Ä•´óúwiÛsÍ;¯ó—0R~™”+<À‘òÍ“ªàô5¬OèÇ\D3œ 7Ïh4ëB–Ã6f¢”PdP × À6Šøièבþ=ÏÃá ~N¦Q@›šr(Vˆ ¸¹UÐP¬âù¶0{º?JŸPmª9ˆl¬M“Öæ‚>yëa0m¶z¦\î,`“yÏÌ^öUö|¿L)Ÿ’µ¸"ÿ³±ãÝ'3` kçÕ· ’{„½$©ŽËÒÓ¦(° 8ÑbüX™Š™¿â@eÖOIôk)t»LÎ^uî<}ÅéA[ã\ükI˜(Edþ͹¶ÕDvHGJù”²©AÜzM¸¹öY¬ì×sŸ•JÕÏ¿:I)yUè’áææƒÒT[à4=÷dí]èáNp|ýEåˆ÷ðΧqyvû°Nj5w ¶ž¾L5çÔ#›‹0$I0/Îéà$ù®WÜô‰µ…õšº¼k¨¿ •°,ò rfùÙ¦vŸø @ Ûü¬bàêcÞMЬd„ÒúT2À›—ý˜{•˜³Ò¬$À5f]ÙŽ&`l±£¨Åz‚M&zÒ£œÞ™^¨.=Mîî?…æ(Èr,›À{‰;.O&U=F)O¸}(C„Ö­µ@~…±ÕH\€¾ÕïŽZÛcTÍì£ý,°=éÏ€šhš‘BeLm< —ÀïÌ< ¯ó®Ð.3l¯´·Ö)¥ýÒ–”ŸéÂm‚._ *vÉ$pá0‡­säºBˆ†P4ªÍ/´_ZÚ@°£\hzëÔ{—âT4£“$3 P5»Å@î½ÉtfÿŽõÛ¥~*°}ë çL.K[1)Ûæ"=ÁŒª«¢R5ZBbÉF{–£õ 3ÆÙþG‚”ñ)>†îqœ›«bcG p Ó;ÄŒ*dKVÙòMÕgC4MÈ–š7‰¸ÂèF€0ÐëL箆ðÚŠAUÔo<ò¾ Ø‘ÒEsŒï­ÖÖj²Ùˆ…êH¬SœP…ÑÇH&+»r! wíeºÊ†¤ôœáÿÏÊ.¶¯<åô“Ž@oX¦æY.ò¹`佺°Þ •áä)EyÙ÷Ž–¥ôÓé>ˆr¢qRž«Ï˾œ?“‚ÐÐóÅ€žŠ]ÆF­D7Bº(5ƒ›šW{¹ä 8¾ú™ê¨ê«›ém÷ˆîV?q )а[¨Øï±ú…x@ähÜ|Γt×m¡#zO¼Éÿµgá—%`hŽNa0sj£:Soq0óúÞYt ÔÌ»úº9sŠñ,cDGX|››Vá1{ä Ô[ý [ýŸë™!–ö:ÃA|TßÏÆ|-%8MŽ{ž³yâÄ`t!8˜#¯`7áˆbá&ÿ~êÿÀT„°ˆ …Å÷ .RHž¢u£º´Äˆ5‚»£”×>$åàLnÑ.ÿt¬öØ0±Ì8í)šïJ… U+žÂçr÷½×u¤·#+°tÜɵ^:I³„n¹ïqà~usµ4æ’Øå×Ãÿ½A6]ûàaÝõ/­ ¹_péýŒ…ÎQól¡•¾‚Ϫdà!ËSì2 ­lìÐdÿÃ⡽†šÓâSxœe2 ‰lÞ.st4ŵÚÊV…œ‘5jGé­\B…ÎaaÏ_|‹F·¥pËV1¬ê0ª´L˜_f›Tl€ÛÉáÝçħq^¸† ftR,A^EÜ.@LPvÿ³©{"cˆŸfóZw]¨½itÓ6Ú‹09šíS)[ÕªWÜ•ÁèóÆ0ø5ô<Þ-F0ÁàŒ‹R¡wt®01X_s¶è™Î.sJúw"¯Ó·¢Æ>Báqw'øz~q&ëdgúc|}ÑÌb‚_‰và p0Ø—tùr›q­óTŠÀ?žã`×àʼ×â÷<ΠD×ðùW’\ñ‚yn*‹M\çy럤”_ER2}òdsÉÉI¢ÕW+Ù0­åöɈ†÷ ñâÔ×׉³Eß-Séê1³ü¡÷ÚÌ¢ÌAŒ”b·Ù–6eÃTÀc…<Í&ª–S{1ô4ºö–]çÚwI»ñ­îî—÷·º"UuE/— €œMe²ãû#6ØF3s-oÏÈŸR3êØìŸMï„àÕôâ‹a‹é^ráîç¦öc{σpܼ Ÿ2Zˇª¥Š‹½; 5–Ïù,®åÏÞØÕè¡J b¡^~n ëø•›‘*ðéç9SwV€ÁGÞŠ0Іw“&‹ßÿ÷ùæ£ÙH”4Ž~ÙbpŒ|2ÌÞŸøZp©s%ºø4÷i>år-ÊáÖ•fm'@K§u¬¥¡n¨«‹JàæÞ·ÊžyÆ,Ñs«`”°s·LAÜÐávô`;ÿ1*J[IÏe<&»Ó¸Š ‰‘‹gØ1}õ}ÊÏ)‚eC;‹¸ˆûÐSúe›ºÎ)ÞžQïXÄH®pÔË™hÝ6Ü-I´,…œ@@FŒ¾ÌvýQþ‹BA•HkòFñLu°gAU|ÌWK½XU: \gªDPMYD¯ µo ’Fzãû[ÙççD«œÓÅð:•‰˜—Tlhï1UêÛ¶y @ši¥À”¦–EŽq ÓÖsI Ø/IÊf˜ùá]WŒ1ÏÊ”EDx Cfü?µ»t¿Æ%Ó"d²D£ež²=”ÛT|i†FúFcï E Ãß–$ø|=ýÉw©Ï…µ—⨸Õ(¾È](Ђ 9Z]xƘÇ6lE?×Ìn”ÁèžêÁm=ßÿ5«Ù.­ø_§¶*ýFß/‹V€æ~ ·¹ö@b…×À_Þ¾Uo^ˆÇrB–A‘× D‰9@TÑüSLÐóá_u—€;Fkwê®/ÝÎ%rÒÂö$;„«½b¨óOmVÈ&"ĸ_ÜM[ú¯} aÆfÓÕøÉã&s÷ P¦>òxÄjO&Þ. =LKˆtsǦ¤#ÇÝyƒíÖ[įЩ¡‹N6 ÍÍñÉ.ìØG³;w×oŒ¼°I'ÓÄ5?ÆŠwCe@}HÁ5Xì¨ÂË 8¶lhÚi±ÂâHÔÙø€Ý—Ç> eŒ²ä,Á‘Cs$‡ûØñ}jšGxº†nÄ¥›b”@þYi ZB¼?µ± 7(Ÿx3_Qäe~¿³ÀD%ÙxZ ¡áÍ“ìÊÇùë¶ ŽH"§lä ðtµ.˜¿Ÿ"˜˜µ5)Su¬¼ ~]GŒ’W1TùR2xÊvÜǵ1œÑLJw5nÌ6à6$M¨¤6’HuõD'ü3õI2ïSœåV‘fâùÝ‹w—<¶héb(âËz”Rú!žIÂôÒÈì€Ùá‡ùáX%õ}-£œ:§ØÏ!ô›ŸŽzôq–ëf…é3Œj]Ũ’ŒEx^ 9…unK3ì¿»Óq€±ÀñnÀʰ`¢ƒ‰¸’ŒŒ¹ÅÝì÷s—zû“eöI—PÔ Ëì¿ý‘åšûcMšÆkuj,6Pï—ÿX#Ìr(¨±`á~LZ'˜°zº<¡4m‰¿×ÕA@zm²(Õ“v˜W;úÆM»Wï€zç©¥í]¤OHr0£p$(É,T¢Âɺb=t$‡NUüSXùòB®„­x³ÓühÈäD­f›×WÌ}p…’í¨ÃHZYý¾j^óá\£Ÿ6f £ñùPi[µÛ™L_X$;‡‡„WØÄPËÙÖ˜B±hm1ÕKÓ8ž8ÚvœSën„"ÿ› Ï¿Lé¹58'~à»tûç˜ç‘,Óòê²R6;ùÎ}–5W!¸QM9‰>¬†6%¨rPZréŸÔ õÏ^ÁÙÚ4É-îpt×Í?ãoÑbâÒÅÓÖüèæ¿ «€wâ›+—JËÅ0ä2¼àŸ‰Û 0àÎÃ<† $fذÞL>󔥸ÂbÚH—ÅÞ¬˜mdµÙ‰Âã§9sþPó=ﮑ<‰Á$yFÜPüÜåj†‚UŠ—fL{6;y ¾¯RÐ)'eÓôR,[‡Ï œàËyY³zo™Šæàr´$>Þ1™]w#8â·£Bä×Âclþ‹Í¾ƒ¯ýªÊp,uËM§EìÏ:šÞÀA%±hç}‹v³âçb·TKUdš€µž¡ØÅE;¥‡8Qaþ˜ôN¢VØ‹ä7õ¹\¿Øþ#Ùé#À›õR>U÷[©àLK[¿×ò}Ä’Öî¬ ÒÕ!TOSkOcîVy ¹;˜{L– JQ>cf>ÓÜú½x@)ê˩벬=C¤LeÌvgtí$Áدƒ®†Ýhô'(£NÒ¿¸ìõ1YÄ/›qï´¼ƒâÔ[ÐÖ£ÐÌ ²G+±e§¥ÉËš\'Ž ö­kÎNhµÎ&Äèb6?fÀÝÙúö«¨*^# ³lh/7òÿŒ+<ü<ÙÍ‹æµ..àA¨p›næØ`èv)DC¤1zh\_dš lqÑ8>RºM“?NrF倨‹añäÚzh¤Id«ŠŽ@-å›~Åæ1C/䣊xÑ_áîþ†A™ôû£ w¿òÌ[àü#Ù=Ø·ó2]ÁåùÈ7|t÷/¨ïr=0Þý,hËNo$’Ü—È3T-<6ž¡UàÈÝ'È™Vɢׄ{P•ºÍ•"ŽnÝ…b–CbAéäó << ©ŒÀ3žH%vkÁ5F,ÇKû`ÓŒ*¥òͲ½f'Iýÿ:²ÐO©a]¨ï.§$?³‚bSø‚p‚g_‘Ï{¸w¼Ùu‚ð&:#yîe1O“\ù€0$+4hh‡bÈÕ/u?Ü^¼¸8€”}ú‡íÌlÎIðŸ®P¦Pui -Q³™*±þ‰ž¦FCtŸ',¤;æÉµÍ>gKÏ…ŠF»/ÿ‰Õ ìR+®¸f±|æy)6ÿ°Ç^pRÌPOhÑ ,ÙáZ/Û].»( áZüm/y¸ü#¤æþÒß˽ÏNW|›™·*àŠ 9‚†·M=Ýö.,‚±V¿FU °ÝS&hmç/q>e“¨ôœƒ6®ÖDÅÔ‹Šš©dßÓúè[¸žRÖšòPäLqú‡Ð ³”eù²î®4`LÒFyý.®g$‚NÃûB:êè&i‚ïÌÇ,jòߥÎþåU¾ ßTR§Y!ÑY4z™â†aë…&¸º Ž>•dåÄQ F½ë¤ñå…w|ßoó7O8RZ›U3ŽYI‡uËÙ&$úüÉ=áwñOð[ÙúéQ°…½öõªšcK[Þ—Zåh™U”QIiˆ±h-k#¬ãàîþ‰#û‚ÑÇRÇIœT´xMù‰k'Á%ÃHuÏ~5Ä 9»Ãc…¯\' zä¤ÂÇãñSŒ„v yI¬èžw´ÏŽjÖ'6ÖÌxú{ŒBøDR­!È—mÁªxPyCͼò"„Ò[fŸ]yw×;¿E3œöl\+ª¥“SõÊ¿‚IYˆáÜZëÇ’Y¶õjÇ+÷[Ø€&­š†µ]b¬·,‡z¢ãC{_~~Ý• ÉðLÉ4@ᨰ¬ÁÜ­·xƒs`3“HÙwB×(€qn’]»ßpf09Xá¿]{@wävY½~0ôéVrY—¼26ϳx&ç&£Ý§å¹g-V>…EÑ"g·0€Ø¾sAµôåÑh‹Ó×1ÐÞ¸½EL«ÓNêü£“«ˆ¥/l_ú(H“‘öÜ.@è]#“E|Wß*èf‘T(JA·Ù+¸ø|Жºþw98.²–æÈ²Çx{Ä5WõË’<ýøÊø¹ÈûšÂ|,/†þî§ûvmr¢¢ö!$ß? ß‚—Ý0×jϨCŒµy/þKC1JX6§eü.¤½h¯¢2¯—í{ÅúûªãÎsÇ{ý'_f;{aQ6‘ÜpP\›Ýñt|¢ùpœ ØC'Ê­§i|ÒÐH“Ðtjû¹ÂLNNUð<ÛH“Qɨi¼¹ „ *åÕû÷ ±¼ïõÂü?ÆÊ%Þ†ŸëEÈp(=V—=ŽCg9+öÁ ëôYÑHv °Ë «<œ)"fó<ƒòØxî3YÇÉëJè=¶äßTo¼‘Joùyî´­x*­[ÅC'«·1¬‡¼Ó¯ºuЀÁJÔÕ"YS £&; ²,^Sno}ø9Ñç\Üem½Ö€@€gÎ&ü+ o[ßlÇ|ŽCÀS \ñ#3ž)³±ëœ7n‡³FÌÜà^8px ^‚µ-<¤a‡ØpÔ«â‡Zø°#rUû»¡èm5/ø©¼uÓVZÉÀ„ê 6ŽúuÎn´HíïJ·v×”p›yÛínX¾¢®Ë3pù"ÿñ‹ Ë 5n~‡r¥Wz9x*¢8¤\Íœ…Ж‚YG2>!!ä€ÜBÑ·CÐ õ®U-_}NÉ E@LRP&á±;Ë Ã~ÂQ½E(r,ñš2ûÊŠ/z€zúÍXù?̓ÜóïXþEg-ûp\ã2?-Ô!uÜ7Ç킌ˆc*§T›ÕPõ` ¨kÆ JÕÐÇ#Â9-UÄ,Ê¢=çSǰRh¬´ØR’ÍKÓ¹Uõ x¦Â¸˜Þ6>d~t¢C‹·z"U3!øA3Ä ÆpÜþ¦B0×)2‰‡I;ìTX)¼,œ™¾ ×»Úõpþ¶ûÏèõÐ{R°ð†pM/t“€ä# hRZ³œ‘Ö¡4A”Š¢ùÖ ËŒÈ$g´xôWdHoßæ‡O‚ÿ ’ó[Z!ûW´EÌ;ž¸™>Osÿ‘Ïé}éP7“†ª$3¶Š5òd´0<‡q€S-¸(UÕÅ~À‡@ÇâÑ¢AŒßOGWÌ"Æ-D€:3F?„NµiÖò+Ó‰+‚ÎàH¸ô!š;L¨Ïn¸iÄ!OèÌÓ^¯á È)˜)ï ~Ó´ûÖŸð嶺h8T Ë}]Ô Íü»I I*"%Çg³xpËfb(tM¶/2XŒZ¦Ì÷¹0NÏ›ž'Â¥|Q}å3Æ€¼ÀË/ˆõžˆ¯éæimä㜠Z‘šBx»„/ÂêqÌ].*j’µí÷ ÎÞj$¿@$j¨Ù!%{é¬k÷ËåÁ9™! Ô×iOsòmg*{â0D}‰“\aI:^·Àlââ†ÐyÛkHœOˆ‡±3uZ@:5itä¹Bd"564Šý¥Ñ ?·2ÞT^ŠAü‡áü¥Á58–@ÃOŽd;S7.O‡™,:É#.ëqº¸¿K°ÊC ñÛ9¾ÅmBÛñuÑ„6%tÓŒ~¯òÏõŒaÀ|ÏïŸù‰Â´˜‘²XáñÚ[†ÈÒwøM6Ê"Ìn†ÌgöÕ¡™‡±¿¨£Sã, šHãM .’šï<€4¦åÁ…Û.`™õŠ‹Ç¥KÙ ½F¢‹IÊÛ_GÔÂþ”ëutBDK²0©Q(L ïhœ‡rý ÇŒ8œæŒ¿W°HøÉäo!;x–/{Æ)ÓyòÝß38m_ªL®¨”Ÿ&¸Z™°Þ«†ï†€¬ÔjûÔŽ¬öË©·jV£'>m–Ѷ™†~±qÚ׾Ń‹X3xv•tÐfÏTí^25Ëé†^ÐQÓŒÞ7©—uŒàC3嶉l;Þ<ÔqNŽ|n×Ö¤ÐEú$­‹Ò¿ï",¬,w[id®¥V,–œ’Ön{Ô¨$H¥ø» ¤Nÿ½ ÔÜŸ{0 s"3ãÛ‹¤&%~² IOÊ&»£ö©'ãºi³Qƒ¨µUi—GÞ#YúK´ì¦yñž°-VMä¦áÛT…­åóãoB|nÈ$_Õ‘%„Ê’^^Fº”ÔC½Eî÷µ"=Ý>“P’` ’bB\š@#¦½—]R;|ý¬WÀ?\R–Î'LU^ ©vªƒ‰\‰6ƒìxIúãÊ5’•ÇÒ–q•¯ÒÙK­Î縗Év'ò#mi“&žÜ-_‚Cm·Pmè8÷$[G’“ežÈ¿Sš }O:ÒÖ É»é6‰I´z‚øÝûÇéañyÁïgÎCZÙ6w·¼O.E…CòÅvƒÇ]”VÎUcܲd(0ï‰g2¨ü'Ÿ1‘rã€4ªÇ˜KôD¬^«ñzdR$;‡ž9ÎÒÌ(ìúû·Œfôû:ñíJþüÖÚUƲvϳŽAÐRyûî·dé?­Ð£Ÿ:ëAd۩ɉ_Jó{g}Åû}E°2O9dÓí<û´aþû¶RŸ×RÒÿ¤èäæ"Ü(îJº63©»Y}aa˲¾ßßxPÃ`±ÎßL 0Ã~0ø³°±¦cÌ”Ï)£¢0¼"˜ž)¾°¡—zÔ÷*{é2]V°UôÖ{“ëdX+}{ŽDì–Ê(ˆ¹`Ö*Èc“YTIõÝcxÅASÈØ“K|ë££Žæº c¦PËÈ~¹ÑÂÛËáVÏ`ŒÙLäfÁü>Úê>Ò\–þ‰§Ç—Ö'÷ÁâÙ{Ø{ ×5Î,`©ÔKð'ÓµjÇÐ¡Š™9±Y 5eèÔDV7«è>‚ëõͶ^ú ât¸8ª:FC¿è{À)­¦j Üøhå‹ÛåàV°0ƒ%åí®¹¯yç“sýäÇç§å¡†0#C r}P߸Ð!Ãú7Æh·VŽ8‹·l¨F¥EIpyWI¬ü¸ç#‚¤\#öÐ|ÔFj1°Ïñ2ø®:ÎöÛ°±9©9úчɣ‰ìQ¢2oVUŘÉKmiÏùP' Á«;)d¡©G"?ï,ÿ¹·r—öžgýÊy:ž1&oÞ+¥8h.ÌÚJ¢Ï‚›·L ÞugS‡ê¼p—ïs¿ý^Aè«kñøy†Ô•”M5²FL‡åÀ ƒùd¾˜Q$OvÀœ'Oe`h è }rk£?€# ”‚nƒÅõÕ\¡“Õ<5I“¥U ÙÞ(HÝà)*ljRXÊŽÓç0ø‰à榿‰îŒVr%¡lL×n°…Ê”Dª®BÐöGé3+ ¾œì¹4G¨WÜT^ ™˜>¯‚:FP×”ÑGuÅtž–Œ´9¾uxc ј·ÐWCÑw¸á8ä,ž›-<úÕKîjC›ËK;x•¬·¯~È-Ï©óøJè¢ò;ÐnË‹¦ù_@–oÂx“Û?Ž¢§â[XhUVÁrE'â`Z‹ïyD&6Ý:cšf %¨Ž^Á•}ÉÛ¥.õߘã¼j¸ŽÑ€6Ú~*×MKðXœÀþÿj'YÚEþÔd”¥m%Z¦Ül¢‹Ä†väw}eóQV3%íƒ3eàj‚¡”ǽ.é hâI4Âemô²ô>~V\su2±k +åR•úÐs8 ‰XBn=X |Ûn(ÍäŸþäO>8ã¸ÒÚut*Öfù%bõ: ›y‹/_Üê ýÇ­ª£’†@ù{nfТU{juÕnú;èi[àêo°R_á¤øðµ_D§VLÔDê²÷ìûuµ?íaþ†[!mÿ»!B´Ï8ïÞ>ž0Ñ®oëŠßlf{uCyÏ•&‘±Ÿb“èaIfØ%7a§”-GAÚFâ–âÒÄMeqôÃÒ«i¦â[‡ÔA@E£1yhÁ+ú¡XJ•raµ¨ª DdbÌ[pTØ{Jкf‡ç@Ø ^c÷ ªïeÑÍãvG )áqãD, Ý“„v’ öxi©Ýõ¢’rß×VUÉà>»X{4 5Še­Ûéâ§©4{ÐÓf.ºï/Ї“¯ÑÕZväͳԃ}\aD-zãT?>ÅÃIÒ L¸#¼ÙŠv`ªúNa\#gÆÄ ‘Â[&õu ç SŸŽ´BųÚŒVêEý«4¿aÃ_’ÃF€_ôc#œ’ù´€´´J'ç(&xHn_`ôÑg;Ücä=õe«Eü6= ¼I—i$6ø.Œ’·)ðöŒná¡Ä” r‚ó»ë‘ß÷Rê[=_ÀÞTï¶0-EQU&ûß~|×ÚÂp&5ɇ,¡š­¾Æä×&†{tVµF5úçÂXžËœÛÛ›ŽT“ÁE½ïppŠP\cÁu}{Q©Ûr“Ê‹—•ºÇ4ÿ@ž¦.èKÚr»ua‘ät±”ðÅ ¨b:a9ßÛÇìÚy?Sz¶$›Xîà§Šhn§<¤gØ:Ù7Œ¥SÈЋèÊ-WÖT(m\,-Žj$³BѺ£ s¿ç)_Ù.÷ƒËÁf`¦Huy/^QËÐŽ¥¬ ôã•ëziÜáj÷yÛQøºn®’oCl¨2²xÒ!¤÷Ë÷Î5v@±; WS&H¥ãAæãv¦>ÓdA"öÑ` N¼É°j.?N z¬¯`™¿÷JlÐN€þŒèü$3#ê•ÄåÎ?rP`€Xï¬ÅJeׯi²õŒ8t½\I9Aò OŽ«LÉ á‡MòŸ©•kÈæÀC*1I·ºŒ¤ˆ§ÆþM×+¦>sŽÊg:Pë&ÕµuIÍ)‹D¾C³ k u­ª#†ý Î:Ê3awE:7Ñ™QD¬"8;­ CTè=¥´<¤Ý[ìŸ ¦cºƒ«W€]„þŠÇ¤Ïã"ëîáʬ Ë!Ui s0Zº³r²—½øPýÌ6çâzúP²•n+tmñ©äœ7êè&i‚ïÌL2Rªû_Cï©ûÊ­ÙƒU€†•ø9y}´Qh©óþö¸¼×ù:º¸h-ÂG~ûs«VL]zÌò£Èö @L¯Bd„^ÙìB¸\õªj?š›†ßÝ0ó®Š]Ú‰*ñ¦D ûE´‹èyA;»äÆóPÚ ë÷’}Xs·Ê0„^äÇÿIøÝuö›æëSÀSëQlR4~×q|ž·ŒÓ6KÄÕ²c§²Péú ÃÎÄ“y–!c¢´3)V ÍqH¦f¯^µ[(_ìšÍ8“˜Äœ2Pâ'ùÛøÍ«e-h.Þ7Épþ@Ü•¤ƒ=çÆ ¶tWH¨ÛÀRBn<•@ŸûÏ^ç%uþ: ïHåÉŽêO™ÍÆ}¥nc_KLíÄK¶ÔåËy4úÝ –cP0w"«dE•÷†86:˰äר`\¹µvô |S´Ë‘ö a‹7ÂÀœÌZ^G¡¨Bç41D‘YiB(ôÑfEHuJŠÐíA/©6d%Ú-,„Ÿ“kz[66ºLœÓ²gi­¢ N¸Óò½‚Ÿ§;¤ö½¤Šïá«q×Î%pàŒ6[Ê¥‰¹ûFéz° Ý8×y*£ƒœ«É»äþo lÿ9ÖI)¿¸ê{ÛûcíÛ!G¿`SâÌžx)­SÒ¾¼‰³4¶‹¶±FÒè÷”ÁTm•n§fñFûh}Ü™PÊ,cB]Ì5é™-®4äuîµl–Ñ—Çeš»èGÙDX3‰„{eÑÊÿÏgXZkËâ-¡â³î+ºñƒtÞédO®¾ó"dVê}„¾Ö¥ï‚ÒzÆj/o‘š#ä¢)ì„¥WË ­Z[Wpw·)YØF°"Grør3/|G:ï«* ±ÏZ@É(mžÕË_Ÿy¼­¬°Î1f…0OT’_LÒ—žD85Lƶ’‰iqò…Y+(ÑG·Jh06{èá‹Ë9™#Ê­¨(a?ª‚„a´X6Tø‘Ðç%èÝÌè•€ë’+l¥W‹§¾mœ®ù܇ FóE¿¸”¿‡],aõ`,èþmmä¿7+ ÇLSJûŠËãh%{S+g=üKºä{Ƒ젠êÈåê49q3¶Ø9¶÷š\MÆ .Sù'ƒ`ŸdŽ!,V0C´Ê­b”TEÀä¢îá‡mSÿŸ£Ã së;£´NçGú;fìÖ»C‡LbÆSTÅ*Ž]žÍl²ØÞ{˜_GËWq€š©Öøôƒ{ofôαÒЃ‘üûq1°íÂåÆä¨l}Ìpֆ׫©DSÛþíÒËŠßÕr":‡ëqé"àH½ÛÀUt÷g…}&ɾV‚MiÅR—µk¡BÎ ¦¤ôâ”ýgñP÷g¥:‚ùØòïVbQú9$ èë¢óE·1õãoÇÖe÷ &cÐlØF] Û!ßñ9¹o[uò¹@$Ë-oWÌ"óºež¸œÁÈ£i iÕÔÃe…æÊqò{šÌúô.†Ó–,þ ræÏÚmàìTÐø×¸ª¼´M»¾þÛêM])Ð"¿Þñ%0Ý÷éÕ1,[ªÐºgŽm®T]sŒ¥¯ÊAIRÌ J™Ì¦Éd`ÒÄ‹n& n ÏñÞ¶ðÅoÌIOwØÐüa ¼x3eaI(žœg(÷°uá|¥š±L[ÁÏ'šÍ6&‡–>ν@ÊóÑ_ÔŠRS½‚zÛCÑ’ëqžÚ Äl¬>?qœãÝlªÌ%(€´Æ×÷2–0ŒŒ]’i!œÊˆL%¦Î»A£ý,IX/’ñééŽôå6Í©tþ˜KvÁ\ˆUGœ¥‚©½Ô¡˜ %áÅû‚àrÙ{àßÍçV—Ìl§ßo{ÙñÚY.wö™alÐ:_ªqiµñ®’Ù¾[NÅNªS4òÖw_”ŠM.¾yó…„'Éñ”œo|ÍâOÕèù“DvbV¯A"(<¡4š9wEežG‰h¬#[õ;„†×!$ååù=t4máTqg©uå4ÔÂÑ`T‚•¶ ±„Pq(lAà†ß¬"G¾õ¶y‡{2²p»¯ˆ‹ç@CrpŠy–Ê;–i»ß椮™}q÷[v âóer±2ï¡jÿß‚!£*ö F‚xSsÌóÅÃÕÓ<CltP½œ\9EP“Ø—Z/†‹gUØi±s4¤E_+ö¡äôW— š<ÛD&ÉL3Ì»$§HÃ4ó ]=Âk›4ìí‹(†cÈW„%Ús’¸gª¼£{oÛ†ÅBÊÿ›ñQZ¡É¸bêäZ›ÙY¬§Êï›Ó¬D~Ä¢²Þ»öl¥Ém>æ ‘Ä?8µ¿‰‚‡.œÖpz‡)u—‡ƒÔ"*›lÛ Ñÿ¥·[‰{NÔWÖü endstream endobj 580 0 obj << /Length1 1789 /Length2 20351 /Length3 0 /Length 21460 /Filter /FlateDecode >> stream xÚ´{eT›[Ó6îîR ¸;ÅÝÝŠ'Xpw)§¸»S /Å¡PÜÝ­ðÑsÞG×ó÷[YɹƮ={fGVBM®ªÁ,fáh”v™ÙYØøŠJ¦ Wv6fqG{  5µ„ Ðlã’4ù<`k€Š9øÍÏÀÁÆÆ‡D ‚€.oJ €™@ 6Õôr²èLÿT]ÁÌf¦®oj Èʤs‘ptòr±±²ÿ‰ÁÉÌü'Òoq€¼©¹£‡« ÀdgQb(;z¼6:GÀ hmjo p´huZRêu-U z–·ÀnNNŽ.ÿÇEBCSK† )¦¬)j3d´44ÿ.Û[“J,$ÞX»"ý)Ÿ¤Í[ÀŽ.^¬ÿÙÔv GÏ–6 Ë?5·psbÕÙ8»å$ÿÏô BúfØ@gÐÓÜšõO¢¿úäÌþ~+€Ÿ“£ÀÒÔÞègc |» ù¸šº`7 ŸÏ¿+þSBbçXؘƒßZümLþŠ.²tðý ¿1ù‡êÿ6Ÿî¯¥›O G½Àh‰Äªì~kºÿ?ö_¹¤Ýìí•M€tÿQÏÿ62u°±÷ú³ÿ²Ðþ!J÷?|m\¥m<ª6`së¿kú7.6}kx1•=ðm?þ‚´þÌý[³¾86Î+3;÷éÞúÐÜtuðrþ¥¾Uà¿è¾•ýY«†„š–žãöÊ_6R sG €ã=7ÀÔÅÅÔ ‰í­8Þ¿ø°¿u±Ðó¯°²€Áo.'7°ÀÒÑéÏ.òðXUþ@I|¼V³Io:óJ\\oÒ[_›þagc°ÿ%²¿‰Žÿ²óvý»ú-€Ë?Å÷o’«ç¿©¹¬à©ÙÞ$‹öÆÌèò7ðŸURýs4üÕûlÿ*Ûÿ™É`G; ŽÅÛëÅ¿™(™‚]l< ØÞ—ý »ýãÙ‡ÿH@ý¯™û7oqqGOf.n63€‡›ým œ\~ÿákþ÷ñõ×мíï?ä?gôš#-Í;š „Ú~n/÷—*œª€¥æc9®ÂÖ•O€YʘúJL ™·I) j ̤)rT”åÿàŸ*Ñ¥ŵYkK®ž¼¶PÝ2õWò'F“ÍÕfÑ ÎTZ ¬è¢ ?Ï-Ð+åú‘ÙžÐN Ð=”àûÚýË1ñŠy™JaXÑþ3Ö£x–½ÇÅËsƒ¨“xqªüú€cÚ+¶Ä0cRŽ7*çÔÓ½ S,òHÝðc“Щ™øÌnVì[˜@Ù9ÄçwD<|Dêâƒô)JÉw]Áˆ')ô±tžŸóíÂq6p‘ùne€[&Gx2ì)ã÷zm²b´©SˬéÆ_uPÅäŸÊÛÐÜ ”Ï@5KÖJ#~uc4Ñõ¿”Ï~Ñ%ox/öÅ€¹PQaÀ2ì¯Î"ÛO<¼¼Fªï›õ[7<{Ñ ¶i™}ûß÷·ÒŸ©Ö;Å÷Ðb½ãÜCŠÜlË#öbOiÒ (MÌà´_]Óhn”qd‰%I¬1ÉcÂx*É>Åë ¤uךÓëõ‹M¥ÌJ9Õa¼üþ¶\¬þ%ØÞ@mäî2|ZSÚR(UÛ™-¨±þ`š‡‚ùü’ ^z·[­j*ŒÕž‡©kÁö^ûêè¦%ZÒÖy ¹Ñš ‹%:_]ý"PNúíøýèÝü°µüD$² <¹MìœõFÃTªØ7Ý0‡Ò—-O,$í|3CýÖèý;ÜhïD¨} >¸Èk–íS=,-ç8-»üý aúœ$<|‹‡¼6ÆPÙíY“¥\œŸ†ÌHGÁ²tFŠÏe7çþŒ*- ž‚³Öb`© ±å7¨ÆÓR±K°µÌ1äÍ‘ŽäÅað5žÀnÐÝ5n ¹B‡î$ãÉÇòFhT·bu÷kòSWüïv·>uíO ©À.®ˆ FaeB3öùyú<ÃÓwÕ²—ütQ¬¸5Yœe [*E©ÝóK=Ÿðîd•ÌãÇ—?åg#8ông×öh¨§×¢‹çƒ¢¾Ì¤Ô‡ †pÑ9J{Z2¯F¼8/7 >L‘Š|1Dëý舅pN¬¨§Ý&Ê<ÎXðþ’žd›»:òÅŽý5¯0†æïÁZw“O÷«˜v¡VÆáy){¡„>Ñç*ms± 'Jvg?ùOqŽÝ)^õW*Zì÷4ô“0œß`8£Ÿ/ µêzˉ&=Äø^öþ²|Ž6Ÿ´þ鯲éƒÂrȲ³†À@9Ê„—s?Rç&ÝU¤éå™áYV?Ñ«ÙwÞýPæŽ_I“—J ?6då1|ÑûÈÒ]‚¾â¥/ð{ÌÊ3eqüÙ22àjÀœ@Ûìtû8Ü™œÌ y}­¥SÒü®X|¸”G_´KÆöÉ:D÷"¥sü¨ÒÙŒ ~?JAÌ>–ê÷ÚHÏt¶‡hvÀf”îvpË1Œvt‹—P£.>¿ –T¡×‰ÁXñR¦H,[Ç Ë äâ ‹ÇXEÙn#µmô jR1ÅC´¬à£è¯k>žÃ=fW'í'Ê œµX=­»Ksà @ÌøÒwmÀ’Öçßs++{eÇøAdQÙõ@9(rÆ×ڮث*ž™fLy”7 ß<ÖXìým¢ü5…‚*ˆxb¢‰)|ËÒ‚mû¥/KFÒ<Ð~—V=ò¢m6ô%ñ|0ô:Oj—hIe܇C:P¡øÿ¡v³6v‘@bÜk|%ò¶” ßú~D#PÙÔí ¡ÖÊz5ÆØÚ‰¢!¦e­¢EîêeDw~+Ã"Z¸Ë߸gÙÕð<§[Ús²rºdæ©;Dgö',mï/{^¦{M²»M‰Š¼®ÑOÊÇÚï³.àbN}Œèé¶…äÝ•ïl±bVL17­;›‡ÕP»i}Ø[»ÃÝt¤;ïúbCK‰r'Ó®TI&mž´õ5‹„t½`hEßSw >†QŒ¢´~›m–·Jÿ.™óyC0¯¢’-*iïq»øyI’b¯¤fÕ}=®N ™Næ÷–ÖŠ _Šcn‚R&SHòwfyM:C&æO¶T âøÓí…оæU›ä[—E†[™O4±šüt¿E³X“â˜-Ühð¡óNx^æ5-Ì«-²8¦ÐÓ›`Vñ žÆLßaìÏŒŒÈÂØÔ?à l´Yá ÕÏÞÃÝzJ¯E (ZÆÆë ýl…ÃŒÍjvDîô.Aú{ØŽÇ¢ï6Ý&~ÁÕª\Ü´ú·É)Kföˆˆ„IŠaÛùÅ©^XÖëR¢êÏNØÁËHtߢl{“ßo蘤#ÐB>o¤‘üH“ž$ƒ3›ž>þERnëÁò>f­ü©è¥_ÜINfBP^ø ÜÔBîQÞ8%©¸EåV<ä¨Bí—"x´ÙŒN¸¨ª*YlI…Ư÷ •½±£TtdÖi±}ÁÛagðÝn} <*‚Ì€CD…£™”IÑ7ÓU.5ñÅËë2Ã…kŸŒÏû(SïËV›¶ÐŽ»Mcã ÓG_xµ®ð~r¸›5>ë׿¾ ÙrºÚç•–ªRvfþž–Ñ@Œ5þñIZu)WÚ˃Ц4t?ÛÛTÖ™¦K(Зì<5¢4TÁÑ”¥‹ÇµU܃ÜsÀù³×GؾÞhËoàZƒ‡j!¬—ÉBq°¡±u8B.%êÓëpØ|¤5›ÍþÇ¡¤eóHÓœö¶A¦&²RÊKVƒ!‹!šáíª«þEC[2&Ž3ܰñ vFD/wdyÚ<’œ‡¬ë)³åîdJ“¤3'¼ð`ƒƒ7.ÚT/}sØûmlöm¨$!ÎxÙ³Þ\ºåF‡Ðc ÎVꘀЪőžÎ7§DùÀ/Ÿ,¥¿“—!"d=ÀHašz¾m¹òqç[Í1rÓdoßJDŸÌÓ¾ £ÇAÉ­­öDþcÆòÉ\íˆ ‘.—tŠk¦é ²p8É®–‡ÏnÁ-g[É74‰ë5‹¤nyò»!’åjs Ç–g$< æiO1ZÌÑQÕG¸/È|—}‘Ž5çܤúlËž ½L>6´ ”X¿‰ï¢ãŽ‹ãY÷5G™¢vÞ©j¨,_ºhæ.%#jEÕ«Rû"¬”0H‰Ÿà'nHkDsñYz”=UÇ5ê@œ æÅVK’3ÅÐÍ$qé¿ìv@Ò¶AŸð‹WÄo„¢4¶Ì¥3YI›zPv®©øêÈ/>]ÅKî‹-ø²„ît„=L£Øo’`soyIN4Á <“‚æð§c®’‡Ý¤¡r>g팆út¡+æ¡êDA|þ®9#ņ+5ý´¶D¢»Á–ÿ¯"´ó —ú”ü©Wg ‹NÜ2:$4tãDÚ¬8AƬäÚX_Ò{SEß…=Ÿf&þøbþéž›|Ë òWª·ðƒBjÃÞ@ççê=¨h„0-qWÖò=ŽXÑao¼ÎZ€õº…[Ž„É+HGpÀÝÀ—ý*õi”!Ú"dâ”î0¬‘•Š*#1pÞýmju£,Ê@¦ßfq»µó÷|״優w‰‚&óKIpJ9ú!ln(jÉ›$ŒG Ò%¾†‹tÜyJ=Lf›Ž•Y"›“MN“JØ…êá×GÍ9]¯ÉK\XµÚÙ J&ÒȱžÏrËI®~¾…Ê»Yw12ïÑõEœ¬SgwPJÝ‹N9´ÆL-í…“W®ÞâäŒö¹ âd²Rì¸ Ì—µ4UÜZ[¾Ïö º†H<ãnTªEþm÷ƒQ ‘¦9 ªŠóšD3µ‰Ð‚|ÄÔ‚5ö=oböL´”ÿŽÚú=rvo7¾=¾«†;AAíª: ˆMÓ« ËÑ×F ŸÜ’p²-¬3CûZt먑xpnkÊMü&ùˆª–9î¬7wÝ=þv%þ²M#µYOK27óü #©Öi%(Ÿs·qéå¹WܦÒ³uÿþìâ1æ¶î¼|ÿ:‰C–-ueÐR@ué5+•­Ç£f<œ†Í·©Bü ±­9\÷XëÈຠ°úá‰%ç[dPÝî|'8¸(ËXî™üõ}V$C×:ç/ß}ˆý=·nêšüª}˜¥f­-aÜ™.R€*%[ˆ¸n]’[e×I zÊMÄýëèÐ|óÉc¦MwÇðI‡ìÉ~®Ý ÁQì±A²‰½!'k`Ò¯Û!‰åà РmžKÅÍK}l0"ë‘z²Ê¥ÚŽ3„ TN«Amà²VMòY‚_v½vê†Óû¨ÜèSxÓÜk;ÄÀgå%ªœ‰ÜýçG=«“¦+g×MÇ!…ƸAÛ¾ +™Û¿ ^•cå®Â<ä%Wžš)jBJäsU&°P†àr[®n›~µóòȘöÉMë¯@BH®R(¿ll=ÐÛðMî5_ø­×N–5—Ï•8d‹úIx^Y îqÿæN½ÐrɰaŲ€^‚PÎ-íðN˜‡Aq>8»'Ž› …rÆB žâvÚ$Oùëp-‹ˆ2À»ê^*Ѻ¶‰N¾Ô}¼/™Ž ÀÕ¨Ü}÷™w›2BÉ&«(ïŒúw'夺££§-€Ý.UÓõ4¯KT£ež‘´8æáý‘”Ê7ÄlèòæÖQcjèŒåè@-XÖÏi± ´¦_ sû1ØT‹ü»”æzŠJE'Þ]‰v#@‘ ¡8|Þ5ì‘fô"UéÖÍümˆ»dùŠ‹5Gíi~œHŸ×7ã[©ÔZ«Yp/´¬¤05@¬Ù4”ÔB¶B¿Éêr;ÉÅo]¢†4ßqЉîŸTâ¬w³§c¤"6_ÊL%âw«7SÄ: .)û¬X´B²á;Hrèô»ÄŸÂ”n+SbXb»»£*„í_ñéÊÎÆs<¨5CÐΰpÿˆÿ2YÚ»‡$~©²\¾N ©%nòKå{Pý—øJ÷£i"î_4Èh=üYîð$аY ÁÐ?W)è€Eò êÕL‰ÔKk…ëT‘žb ²ÅÔr´pì_eÇrtqZcÜ®G ]DúsûBFAºšq1d®á]ê÷±u^ ûùÎñýíú V§Ï§¶ï(ž´uoZÙ?û‡]¸Â¨—=ŠÖ_Æ”~ûaU…€SáaËêúäÃEϤ>¬æú-ÞZ‹‡º²\\D&FžBBv_š ôÙÔ3ÉcVw:©þž´°Ã­¥˜~7ÏÑ?)dõÀXm[öÕ>¡AJã²­Ïv•}6eTÚk ó& ÈÕŠ†IUcGŠÖ»ÁSÍxÑYæ‡×^Ãî³ãšé_zEy‘𤔷G7Xûš R>*`Ôls§Ì‘Õ/6ÜŽX/M¾¡ßÕZH×XŒ¹EŠÉ¦™€¸P_Ž‹ª¥ÈÇ4©_#+XܶüÂ?ß>ßÚÓmXZÙqRFŸç8±—çO–úÀ<­ë¤ÈiP1‘Àð ®Ø®gòÊà—c\Žûø·&©;P”÷P*}?”ýùduÑl“ [0U7 B‚ÊV")"RÙ×zO=À\wPæÿ‰C§:(/2ë`Xù±pg³lÐÝ ´[¹ßcR'aSJ´T°¶íUŸ.²5tƒžQ…&Ü™ë¡ÁÔ܉ ê#jF«1\z^ßCÃ.q) ÿ•`ùìêïïêûVǽœ·®ÄT;yºŒGlöR÷›4z(u€úåá;âpÁÔö”¬Q®ƒ½'ºP|°³ø>~Læe­ _Ú Îò b¶9è4?A¢n4ÒÊ~šÀŽdú®oõºocºªî{¼>ø×P±<ïÕ”¨/¥¶®b=’l™†”eÛîƒ=†‡B9%†¶®ayfMÏ sÐ 5(O¸Ros-@2òš¾ÄM?µ <+Ôz>9÷I'O2)N[Ý|üñ•Xã’ÉÂa<¥ 1q‘m5¶ø¹Y.; ¿£ÞKZ,ûs@Ÿž‡¤w±þ¨ÚR€Õhm˜;mÇlæ–Š¡KÉ·ê„‹Í,(Ù¯ˆ3mrÝx÷5/° ›A5i‘X Tò’e»U…«?à®=jNjõ™’v<é Ü+­)«5ìHE„hùýXÔ€€!ruØÀïæ5moçø—ô ‰ñ9 ɳ|ßv†ÔIyLÅ¢sãâÓ¯Àeá LölUô¬T¬->ƒ̼!uD[‡”~™KŠ—lýq¸uÈ^LŽäWB#Ñ,wtÓàÔÚîS¨¼ÜܬýñlüÜcŠºåw“pì!y´Ñ±;Âþ‹‘ah׫I8ß^ ,ßÝ[Çi\2”*°ÿ°uçà±S|Š÷ŽBþ¥ÃDPÀw¦rÅÈ«à®#¯*·Dnærk¥ òÜÓÔs ±ŠM9×䨬‹Iw`Ãv¸ÁXqâδV,Š{+R)[­”ä7ÂæoêíKY1FÌt©Å?“[PŸ¢),kX¯øšP|(,ÑË ýɳ¨Á©ÂUH´Ðó*kê"‘…ÍȱO?Vn½ãì¦ußOaê³™Eá9—Ìœ3úb‘N¦ÆãoÓ:„–ë~•;ä-ýT\êÅ´Ðü E׋@ú ò ¨”óÙÅ7ç5aîI¼Ÿ{€w¾´)/Âcä«38UeEºúC¦PûŒ qíÈÀ#mŠÁ¿8‡Çé†XkqV-OB/áÛk®xiœ­º“Ûàomx_ˆx¦’Šó–&[>/ï;c2ƒUŠŒ/þˆøtf«•¬šˆ!¥²fxɸºè@Í õ³Ö›˜N×ðHwÍŸKðνË{uáÛúz<-)Ìê‚uÌ kâXè¢[så;áQHÁÖ|¬µÒÉ’ Õ+kµ¦b³&Ó/Je³?µ=Þù¨=Æqª]ÌŸ}Û>ÏúdYré¿©³ǵ T^–ç㮌Ã'¥ë|Ô¹Ö1`djŠPÄT€!‘Õ@XÒ–Æ1.`ýòý"!e#Œ¼Í¾i㋜E¹_a¸žèJ;6Ò,åàHþ¾çX£Œ¼y­ÂYðOJïT l“™Ü×_WP²qh~”F Q­:G _Ã/|yÂË¥>nM!±¼%NBQ]CªCÅôHmò>¹5)“9ôA¸ù–ÎiÂJd~©fçùæ¶nÄžy¢’¼§Šâ`ͨ†^F½BN@?'…ãl:ð[æþ<­Wÿ±Å>'3%ëZÿ°·v•Q½JN mœBBå«Ïˆ ùÅ8Gº¥îAEÈ’ÏwñëÀø=_N_‡–PÞ™“ñC¡×¤yU »ç¢ÈXp¡B*®4ß¿M¥WÿÉ)oß‹v8”CÚ´+¹ªq¸ ·ïü$ñ¼¾_Ÿ¯Ô¾Äbœ[Õd¢¿·âz=¥½_‰yPhiÐa†|}¨-Ñâ‰É‡ q²;ªl¡Û9ÔD4u»|˜­Fá—‰÷ˆkY•?(JM;Û³C13çc]QLØvX1‡ß×àµ~ñB43Å).:ŠqOÚ]Ó€YÊ%™áL'&X?YƧãœ'éÑñh]X™Û¢XÛ+I×$h®Å H¡Y¯ܬ § …AŒê,¾{™™ä¡~rò_RMiö;·23Ú#¢*?+Ò¹ R´3çMuu*ŽÜ. òWQÚÔd³.ãW{¯=¥¡W˜Ô<˜˜YÙ,½Zv»Ì@$I?=ìgK”Ö 1­gäsêE#YC!¼^zÀ_ºŽù `¬ß =zOICþ†Ú±1³«ÌêÚabø|V·è°ÔÍÊß ´©„W ©/ƨ£GAÓè“ÕÔhá[ ¯vrYÚR/9oWq“\YØv±5)•si9¥Ò±pßšÔy&=éüMß7‹z!@”×'Ab9 ûyû¥¥—„‰3aØaJÕX‹,euËÔ —Ô”KCžÝð–MþÄ›ÕL0hÃGpâ€)Ý}4Ô¨ÑñãÆ‘ÌGï="‰“û&…ÈàØÏ?ŸÉO ’Ïx}tèj.Rãkóï8|¤Ñ¿ Ä9ò _ôØn•ȉ°§…ƒ²è¬v²ü?‰Ûð‚¹“P˜‰l'ýyÁ8ÛyøHN‘ß^B'O øÁJ5Á+þC‘}ƒéúk7t ®Èœ£¾]ÎÔKÇf[GA*pæÆ™{td_NöûÐvM1®¦\ñt‚ jQ¾lDâÉ¥ŽCÀ9ã ËΖ#ù5Iøéú¯É1™ZÆ€R¿ï'Š_¬ëç¶[ÅI¬ÏÇvÓÞdÕ™Ú»V9 b g'ÊpÔ¢un8ûÀ `-pÔ0N\—ÄÞ}ÕÑ}EIÀë@…hÞÇ?ú’ð195à›µìÌ%Fˆmí7“õ¨²#U*¶9Ô Óò˜±UÎõ6õ·\ðdXܨšO!ÕVzHk‡"§â9ŸŒŸ\ f™^hcJÂíîñ âI4nw£aš0TýÃl“ÞÂǰM*$Àn3ûÈý®¥Ív£¦Í+…<*å0‡ \Šf= ¥›QtؘÜé~2O|&¤.³xÝCôê·±3€ýæg¶MWe8{ºPƒÎ{=W¸áÁ÷©/(Zô•3‰á㱄 ï¸=ƒÒg ÉU8ïƒ)'ä|ÑÜ<4«D~A Ý;á.C&é’*:Mi¯Éhwÿ’Da>ÁO §ôËžÒÄ­M‡“/êÑœýûJÒÆ»OÐIJK0X¨2áq*”ÍÜkÃìû 7Wi¢4¶Â#×]ÅŽ3¥wÖ?ÒÕð@žâc®à”+Á"ü•FÙË'’ý\^t§òÐÛ}~—_I#™ùèòæ“ê¯ûÓèޔ첇¸%³Õz¿×~6úî3MPYÌK˜9QÃ<@ãZ.¢Áßµx å:ÍL/oA3B@‹;kSøY^×gðÙÕ]ôª GâÈ[w¯c‰&¾zDW"f§ƒVÛ¤$¿I<Ñ”š~öEò{¡/#ÛI½±#M= Û­ÿL}æW°Ã¶(p–Þ‡/oÙ!+[x¡–é7‹B™Z•²eá=ÀS·V˜xš“ŠDwuÌ ÚÉtVã=5;ÿmŒõšWD‡Ö”¡’¨ˆû,nÓKPº­ìFu»_ºD4r £©–†ò2Þ¬ø94ñ²üÑ;Ì0ÞÀÉÈ^ÍPfAµêê¥nà½Ç³4›ô$¿×Ä6?øÙ™‡=‰¼{ÅVÝÎûþÈŒV}5¾÷³{7íãÚœy-=SÛqÎW9sŸüi»º8ãtï0Ê~¬Îhd™\G Y9· ÃÓ7šïOQ{ûޏ,8!š[§Åq®HÉk«?å ¬jÈïV<>™plQq¹·‚¥ÅmªŠ»ƒµ}]ôÚu/pó™PCÂã±ãjï¸.·š ˆ¾·Yeú÷5‘ñã<ïa[Ñ Óéû*ÅósûþlQÔîÑ~Å”Áy×ašÈ}Û½Gºò8mHµ—3zÅáŽgq¬ešnïÆÚ? Ø2«1FA°hõJ»‘ç,–`”ÑRn5!¯‡wP¾ú¸Ã¦Gé Q•w:!ß¶Æ’{x£~ÕîÂ%Ùˆ'£•Ä=X…†õžµGéû*Iÿ(â!`©ÿë[XÕÄŽL÷üÛ§¸ý!Õm¶æ3ˆ2ý'bâBœ;×Ðãðð(õX“Ge*Íæw¿]T­LÁÖÕ Ÿ/¿Hùk ÅŽ¶æ±ñ Ïˆ: GÖç†c½ï¬ë®éj q¢YG:‰sÌ3nxºüÎýÊ2…S)>júOFi‰1?q`pâqQÌ?Œ•¢ÕôÌx›At` k;­a[ÿ¸„3ÿJQÓ’Ôß.æ®ÕÇ",™Þ£à£Åøó˜gOJLÓìR#¶¨8g3Ï͹jWB åc•vp—´;L´…:ɘ[ÔO ¬pƒÙåï‘¶¿5ÝÿFpŠÚ›åþx¦eKG‚ç €°ÍøðXžÉÈc7‹5¬|ÊY§ã!òä#‡aåF˜Óß G¿ü,^ƒ®,njÒj9‹ð˜û­z|;jÙ­ç³&RAãF ¯KÍ5w~iþ¨~¸;[—ª)Fû;ÖÞÍ–Ìsó"w¸ PƒúkzR߬vˆ p콡,`»ŸÃ:Š™7ø1^Œ Þ8Ö9ãsG·cŒ‘ŠÇ#É“,L‡ÏTXx9í£_/"Nm´i.,Ô^™7Å’˜RÄjûqšrÃYVhQŠlûÕeËzâ|sY1”aÒ«¼ÖÏ•›JÆH¾ÓB®J¶Ó‘t¹OçhøDm<'TPW}=wJÆR„ßrÑÙL´@7Y½u6‰¨Ÿq*»¼ÆìØÝ?:Êåü ûðñƒ!'öç’”S,*UTå¨ëqörAv–"+6‰±À9Mœ3®ž©Z–wÔ ¬ü“{cbJcµ¬´|·ð è‡%‹½õõ/ÔªtªhuBô¶ã›h©c8•»÷ï2ñÚe¢v”&5,Âü P›p¿;¦/]e¡(szKàì s­½/¦Å7î ÆÞWÆ´^DXKÙH•¥¶ä‚—®1D²Ïh5aÃxosp¶Z^“䘞ùš'ôÑçA{ðmˆ•Š9¼%0ýý—ÓV¡gÆiÌçìjo•xw,Ëu*:‘;9¾†ëŠEÌË”,g½ÉGQ…¯îâØrC³<ŒãNLtEøÒBOå½²TÒi©™‹áÅDR;c¼ŒñmC ËÐégûSÍo³òR×bj^dÓ¡µˆQ0*ò¯í@Õ60þr½Îpµ ^½‰Ô‘qºèTás^ÒôÔØd §™ù-Oy¡|n`'Žž=…j†3‡ ËX8÷Bð«˜kùîd¤ÀH'dÅ 6ˬe ˜eê“´:„lÊn† %Ö±Ó;­^~ç *è" Õì-šäµVÞï &G¯­³:iÑìP8Gx.²‚Û´ðÑbLöè*©Z¶Æ]Ïàm‚¦].V¤VX·ð¶dé%ät¯ ´=AT¬Ù´ë¬¾~cþôžòd”…DniC„§nGYåçÄìû:»Hõ7–ÛfäEZ§äBv­±å¿—{Do\ð)QFØÈ¢ò!íç,ÎX~Ÿw¶¸EÊH߈ð‡T¥Æ±6 ªºN0hÜ©Ö÷—è!ÍAvÞc”…ˆE`èù&îýC™)Ý]Yº£—àüÆI‚íÝæ}|iÃAºôÏ¥"4êÕH!>±K"¶ï¡Écžúö.û¸÷T8Ü>ÞÕŽ2`M‘Œ²Þ6Y´â¶]r¢yÊ«Ã-Òî 6NQß Æû~ÈèŒðÈ^›ÆÞÜùJÖ9²´ý±Ú=}ÇuÓNîÇŒ:ÊÞ1íaˆÿòÃJ·µî×—`diÎÝ\Ó3¤T½Ð€?g)ãt@ˆM «Q³zV¢Ãbë‰ö&Ü_Úûêª" 0*­~t¡óÕM¢þaõs Ç ý57ç ÃÏÓ‹^ô)»“ͽ¿ã~Œˆšý~_…¯ÝHSÎÝ~‚%T¿Eïá´h=¦rõVç: -`¿J=æ”&Ã&ƒóÙgô†Àó’¢Ò€Öa‡ÿOêY×VY%.)üÒY‘w^nMÃQœ™­œ[;8.ÈÚõÖæÛRêæîÊeë‚®k}1þ”GMœÃùzTßùå÷žn-Ò¼`< >Á†ª«¡;àœyd_Vûn`mEù§K# 3Û´rœ’˜¡þ—Rƾ‡‘ï2?©¤Ø:B¥ˆâ+<½3€ü*nƒ\28oŠªa«‘²ý†òƒ\T÷¢§ŠÙ“xCÉ&”À O%è½,©ŠH7X½tד}«a5{û$fè#£.Ь+å2âü4VNäÃ…‚°#RnÈË?ãt4ì”upcº¶3ÔˆŒ|`ñ¬¼Až¼ÁÆÇ3Œl߉§ÄQJ/%]iCo•¬Z-‰žµªDÄc‰V—kˆäÕË~ˆ& 2˜–0¢¼ãÓu®ÆÄy.„©ú]xîäÉHdfr‰¿D¢\pÙü±¹óm z•¡¨pT5÷Õ×CIc̼)À7ƒ®øüç~N/N’§2Y®é´K¸þæçTƒ S"ø ÄiÄ“«W«êG}ny¥EƲÀÒâq½û[4BÏò£éXÎÕM›Â=h3[t€2wW«‰‰Ø‰m·M¡Õi¥d*8ªPAÒ¥’æsÔj «š}Ëó>í~s¿Æ½D=Z/Öݾ‘™°}5FKï¡hÄÒÀ ²s†r«z†Úêœ ëÉ'©ÝmègïùØö¼Ìë­Ø‰¸"ÐÍøc-;öTÔÂw#]½KŸØþE‹kâè–óOð’©ÖÖ2ê¹Ök%/áã/¬G±}•ÌXbÒë±Å_<¾— ÕF`åòQA„³8-p±^àˆ rÄÏ~r åu4 îåfQœ¶<îK“×ÿ^¾‰x̘G¿X…\ȆªršQª¬ìÝir>E$1à1åaÊIæW‘êôK÷h…Ö^†WB„CÉl‚°…!iá7a.ÉŒ~æÃ=Âq×Ñ_°X#އ ä«1¨´£AUˆ‘äв1Dî0¶Ö'ªÀúJ¬ %b’Žž“ÓŸÆ^€à|Úf¤áBÞ_§( çJ…k4HL%Xt oå~½Œpü•B—3ñàâÚ¢¥¹®&« m{YKåý–ÝzØÎÔþs† ïàŽ…«ql¦ð¢ÌÓ‹ý–Èɘ«Yß¿µ+‰Fv"ÙEôko–^Ñ¢ŒÓo®4ûÍaïӥ?ØèÐQà5$T8gy;?ØÀ Œþïû˜¾¿‰ýšp3]ø°†xŠ6AGÅYLgÏ«êËø‚‘HʰX Ýïþôˆ1MQBòÂ]‹Z~K»‡±"$¨>Þñ‰qçvÚ•m '!šá|ã$QSMU>¶Ài:–ÂÌ[kñúž±Š}Æþ‚õ¯y/¼3y¡|ò÷ô}Ù vVX¢ Ùõ¹¡Qß.w|‡²ÝŽ9Ì8c¦E°õÌVLÓ%Ýð6Šg8¬9š¥P㘹³S> Vuž},vãõ›Z`7_MÅsô2”n­Ö÷5d+ßË ýxÃ+}­ë¼þQ¼Ö¥áÊݸÐ`Ü=àT9 áè\“·=\`‚pvR=ãCݯ¢‹v²ËSl̉ãŸRÅ%úΛ֔ïàÑù«(y4,RVoô‰W`J ;,agX09c#æê˜¼„HÎý/7˜Ò *š,hºöˆµûgÑ4f™kE‘ŠÞiE¾;á+9œ"Ð\ÑÔ÷C“vv‚NNX‘´Á{4Æhz%Ú²«hÍó¤s¢Ó9YíF%LŒc¡áZ•œ'æ$‚ ¹”?£ážª=8‹aéƒ:ú>ó"Á×b ÔM&ú½t¥d„¾"—`h*cŸ'ÌZ ËEÞ¹î\áÂ1óǪ̤¨©"I´(ß´f](âäkµBÒ[6Z:õü²9ðûltÎÕEgyév†f0¨Ÿw±õçÚWÄw„n$mK1K©‘1e…­€» Hz»_°?R ÐÈ ¬·ÙÄó”fpk0~󻌮nÕÊRßõ5%<ãs65*Ñ%å)…g y0Ï  "=R…¡9?¦¤”|V'#ùH%þÙ?ûµ¾„×^ÈÁeŠž¾÷=° b(i&Ç!¬'ÂŰ ^1Ä/Á?fÇ´ö8÷Ó€ÖŸ¨â½¾¤Õ½é¾Û„ˤ¸² 'rŽ¨ÒªP¤[·-§+æ')ŽmCv< öÝr*íèq˜X_Hû/…ý@IÝV@•ƒí s¯=]tÇ×û¾'/çƒb3j@eôKR½©ê‰ø…ó@ºâ%dËÄÙ„ý#3D 6µÛÍô¼ÒM Vn,oAPIÑSC|ÄQŠº¨lô&ɧ߸úƒËŸ E®~¡ÿ P±2ZÅ¢¤t4æÜLÀ½‡£b{Ï¥tþí´ÄkKiÚ®µF.ÆO—QSíø¹ô(&Q@u¢É !¿w±%ÚÑW0rØïsXëÓÎî{šˆXž.Âĉª_¸_D „eI ë¤>£cøQ’C”J¾Sî}n½@áß«B¡`´…áô¼.°3yŸƒ@„븮qþv‘ži4˜ø'½˜ †j>ÛšÇ9ÞfÉdF»Ï{ž¨›—UŒ1•:€Ž¢8 ËE_í(áT^E¦î„^Üë`K(ífÌ»>£+ðCsÚ™‡q¡@tƒnñƒ«$9.¥þH¯Û gȬgLñwâ„Õ ”Â&5D‡9wò¨ýN÷B´Ô¶çL^Ó™ISOês½ÏϤ ÀUý˜n´'#´É ô§òέÀæÀ-2ìëåôž•à**5®½wøøþœúÄ´V¸¥ÎÓ¢ÒÎX¬äcYÓjZ¾S›8aböûpÝ €†©…Í÷Y è6…`ˆß" /âçJÓœ§´ÖO¶g+,Žžh÷3ÌúÎ^SÔi$u-ªÂ¨ôܯDZ¶nÃÇñ²9 !ìÅ;2ƒ,›™sQ‹™ùxË99KŽwõË¢òåýë(Rà)êñ¥‰Î‘âôÚͱSCfdøTºSÚ­·Xó¦¯ÎÅy9<eZfÏ”ÑQigT¨‡_aÅâ@x+NUqð½ä ¯7¢ÊŽô¼Á þæ“DãˆE|^~çXpfÖøU’Üdªo§+(MYÚåa´ø±—?RÞ)Z\5ñËðjo­ÆV&‡jT ³‚¥»H oƒÛ¸žÎkså ›±ÌÕ™$¦"ÈðTCSÒ’«9mèð¦ÜNŠóFSNëÓV»'ÆŒvë69#Ü“tGþÇÇq \ÖׄN?®†öL1ÁŠúmxòÝEBiGqWÓ÷"A¬C¨ôQ—A8üE_#)njÇM§wu>d+[žÈ<>]¤#îúÇðo¢lèõ`–HÇ2WÂ4TU™¦ÙõÕòʼ"èR<ðo_œYâ%n%šs J•ZÓãð[”™ßiPÉ*º~34íûî÷,Dù>E!NŸí¶JΓ|9vë!CŒ>¹8þã™6¦ú=ë­â },&õ¬q9wéCb j4ß·(!„k¶˜žN„蜡Ñ_Õ«8©œ×üsl'Ÿ0F ¾HpCž‘ºë}:äboB)tœ,¨Ét|LÓQ?Ò`ÓÄÃ7â8声õôÛÚ)€¶!úžµ´w±‚dŒ8”œùo¼ãìÎñZ Ï̦G ¹]Yvn<Ù4Ï©Çj—;Ñ—¦½sÇ‹¾rñp†óéÉÓ!¿2,ÉSÃèTv‹¶²”·¶+uOnÕ=?€K*ó›bù¥?:‡Xêú¡s’qæy9ÛR?¸ùç N7ÜÅèÓ¶|ù€Þµí·‰ ±ÞÜ oïÖDªœ;œÃã+<µ¡þ¾áK?'F€Ùç·ùJÙ|}Ì‚5‘ÊãνKÝþj”ûä^ÒšJP†¬)býŽ»Á¦îé–ã5‚Fw?~»ô;Y{Þ Éwþ_2s«±Å¤Ñ'Ÿá+†‘îØ'¡×ŸuÝEÖ»S$±èyÅÐFœÖ×2q+!=çÄ‹\z6h(ž9H’0•õòÊ ~ÀU¾ÿÖYK^$õ?þ¸°‘Ê¿”~6–˜Ó¸[,á®/ÀüòR®™½ªœØLôÍ¢[âÜbºàE.Ù­­9î cRú‘oõ~ÃæQ­ŒSf©ýÝôõ:JÇ({°žÈ¡ÀžÚ*¯æ4–<´DÐÐ@~O‡¾„Z1ó™ÙÁdlõËx)™ENC¯j÷=â"©¸¿À¥rPàv*MVük¯¾ššÐnYcúP3n4FÝùîFÊèò@PVñ„Ý4J®eqˆ¾¼UêQ©m|dl:P!Y²7t›ñýòN·ô‘_3–³£!G§Â»î8Á]ν×1·ÌN'¬´;ó i;O „óàXæÂ23kû<«Ür*Âú€” êpÂ>çŸUµrw^ãá¾—ÞÁ?1M3#ôQÞ'"ÙõQR´v XàóIþ¬á‘wy"M£ˆkžo$‹ÛÁÀ+"²¾¢ÿ ˆžè/6&B`fÆ«_i°L« AŸ´HŽ ²4ijeÁJU˜}7­Aé·sõNûÜ,žiY!q:bGó»’Å2Û îo~Ûfɱ/wɦfÔ Ù+'ôyHñÄÀßõrj1È .;ç¬K(™Ú}Úa½>Mi ¸[“AçRMCY+òˆõÞ¹,…ÓÆµÚ,ïin¶¢j…Ôí±»wyz§hËt ½è{Ë‹¬Eü;fÍÈa½CfÍ‘Œ‹È÷ó¦´ˆ/(³û÷>,i¬Ë¾9Ï?~Mi{³¢k켬xƤ©%6Nµ‹|GïqÚ'¬„«Á缯µæâ­ÑtÖWÒÊvÕ°f¸–tqMMÇ®¦^•´rìd8ž…PvøÐ¬ãÇ–öuÏŸ¤J®ý•^§=£Ìoâü4§o$ÁÉfÿÞÅùhaŠù|ÖYª[ׯ³,»ÛܪW,£©ã1ÛÃ}…Ìõ1|ã¨Øh´ÿÄ™ì³êçÍAK"{méó2 Eóö¬ß:«Åxþ‚ˆçßWø4D»ó‰0—'A»çJŠ£Ì©âD]ùz/WsgnÊãÔŸê|kèD’Ën {‹I¹’É&’îÀœñÊ—I;^lhY9`”êiµ¯XúÕC†â¤ñ{[…ÜC³3|ù™Ïï‚W8Á??—“OºÚ ïJ|ÇÑÑ\`w‚§ºÍŸýÂÆI §‡=}tLx•/´bB‰>O+%*è(·¹gÅ.^Èw%ŠXï ´ a4‰M+p­|RñCQàDixBŽNÇ …^í½î_®¤>"‰Â¤Îí•g”S< eCÈÀ5 NXµ+œÜë1E؆LÊnÜPëîø'×½š `ëteU`Ҭɠô”³/òžRø£‘ßèM ¹‰Õ«¯ö;>U8‡oVŸ³Œ,‚í0Uጠ7ƒŸÕ>uRnÙöK¯F;ä·°'ÎÄÎÿ–˜bÀÃJî¾òé—~Ÿ:Œë\š`øÿkîÿápŽ3§»»6]“ÓÍ4'›îœ6ÍÔaÓ§™nÓs8mšén7œfs|ß¾¿½ÿŠçëñòî&¸ÑÌ Ž0èÏ"Õ³Mü.{ÔŽˆêx£è‹ã¤`]ßÈ–,Dÿ…é¼ ²m+Æ}ï«M„ëIk2Ý U–ÌL΀œõÙ¨xámøXÂHfÖ€/po‘7ðœe<Îí,ÁBÿýú¥%lª««ÇSÕÔ]•;G ³9ØÙ¨‘ÏûôúV“¶¯Öy­s—ajGº9·g#ßòh_S[6H{£7HñæÏ,mOÁ§ àö„gÿ$î j÷løt ÔÔüÞFN¨Áaw½¥þ;Q2 G5ÔWî_&Ÿ :@þRº±®—ݳä¹Â ¼K)‰B³YíËóÍ~Àŵ³c—ÔÑÁKaµt%¬[ƶÔÉh¾–Ž,ª‡®!§G“ ÇÙâ6;™k+¸áQ´5evme¹döœÝž¤Ý|2‹çI·Q€Õç$/÷ò}©fR­î=}’=¢‚~úbY#Z¢üÔLïÌ÷#1¹ÒñfaÕ^u«¼ñXIÕŸ]"ýk\†ùÈk-!‹×·ötW"¤´½º¡NDê|½víúj›çŸBoüÆvì‡Äÿ±RÐ§Ö $ø(<©qžblÔÒ”‰qp1Ò¥Làÿ1˜3øÃH?µZ•Væ °sa ±áµèԇ춵vbqŒpî7JiâHuDù°l’Sö:åáb-7Qè‚ñþò¨ÿÕƒ†w‘=Ûo e×÷M¾Æ®õ¾dnÛ™…XÜXäõÖ Zâthd¿X´B"Ò2œÚ¿O”më–{:àp#à ‹s~ªËk érlg°ÒøQ`r~§Il¼8±ÌzunÂ2«i…¦$gß@Yåp™ðüŠ×κgø*‡?k^ ŽS“œb>#Öýð²ô8ïbîgôGØìGÓRõG O,)#7Ж5@“ó”á€õ w%…ØýI&í´…Žg£›Êy=¢EÅ((¸]'\w嘩›*Šyv‚< î›CÕ’G¢ûjJ´TpàìéЦ&¥ÚQîÛºús˺~Jœäa ƒñqÃÀd âsðA6l¾.,TÕ‰Ô7!¯\sÂ~Ë–.gÓŠÎŽc€A!ºò$;ˆpßdúçÜoZ0p^FšCùù]C#V½Ò#w-狇^é¯òÚð8IÌP_¥¹×É2tT¿ûÓ-%Æ~UB|4pÎÕA’½4::ï=¡Ûnu’b£6gÑ$tûÄÝÂG@ΪS,v XlŽèŸÏר<{ï1Oý1hƒ'q&f!•_J=@º— »y¥ó8 ¶H0£gŒ~îrOóÒ8ƒy—ô ¢³”JqÊ)è9É*)’ ǹ·ç­]â`Æk(o²öݧ³ …ÆçnÛ¬ùýv’- KJOÛyU˜¤ÖZG/ïÀ‹„a^m›=b/›’q+„u”(ú³üËxjËWmÛ½ïiâûÈiýF”²àG%ì,Ôþ-–Ó¥áòfgF’è¸+ÈÐFÙh{þÕr°Á*¬32‹?ü2ÄÉÜbP…Xv¡”’HÕ™UòÞj^Oµˆü:¦‹»°§š'ƒ¯²O«¢ò¹sY<õ)có¾Î饾Æé—T9 M~ ê¬Êtg C‘üÌ×Zµn²·G®žD·=ýÓ©Ó°3`§ëF±w„Ñ:Zý®@ãeÈCJêê°U»ûK‡Ùâ¼lK¬J"Y,ª³3ùØ-2T)³h{ÀŠ·ŸÂËT±RõA ˜š !™[G}°$–JßùIáÆeào<á§A,úÌúVuœš)@åámôw<œVë'o´ˆ’&Ë÷—ͤ „‡•1ñP¦e³5‘éèEf’%»7L!M;›ämÚ¹(ýhý[òEÀú@3 ŽX‡Ue+>[ ðO) ‡2×4Q×¹‚+LzeþàJž=U‹£Ó „1†)ïL[˜Å¹ z6Š@M.º…ÃÖ»ÕHCÑ1ZK0Ó²Ü Î¹=¿²ü,poà!°‚lßr€”3Ãs3)Ž 7áH¨¨3>ŽLøf¬v¤^l†ûü$2—hú_]i|öC“„[i©‚Ñ?UsE?Â^†çÞÿXº„¡$ Ïuõ­!`˜<_D®Ó‹lS\Ä<Èxõ¤-+áK¢ªÛG¢‘èµPšl½k²áÙÓGÔK—Ë“ }¥Zކ»1Õýtkˆydå”a½Jrš`/]§6úé þ@ù•xwD¢ÛõoGè2‚è?­e/Œ©=üM¢9ËIcPÃELìåðòå#©`RIN-‚ò€ºÌÐÁ>õ^”ã£Æ/€±žä®VJJ(E$œD©e‡Wá‡xÏêÁ_j??n/e•}9»^&i©ú%$ØÔß»ÙÍÓ7£ïæÍ Nv Ø)þ¥:j¶nuÓ²Îë±»'¢Ïi­'C·«éÔ|XÿWþ¦¨ÃËöHûTHC–È„&$£Ü}Xeù[È`%ÚÊ[H˜ÁIZQ¥³4\eÖO€}âzn¨è¹Å]s:qsßý–VzÞú!Bè®KëŸ‚Ô·ÉøHžÛQ’ùLþ+j*eÈÒ¸‘?` 3…5›âZöáŠéÏwç î.9»©Ý~Šþe… ˆ4XxE¦E| P÷±IüÀ^•4ò­K˜ä –ù†sõåì->y £j|^\ÅÓº…ê­••žUh¾iŽ“Í> Íɲþ‘¹‚ˆþ§•U)um°b« ¿©¯÷Æÿº*èpÑÜhÿo¤“7`YºNváó}9Ù{¿ø>[6S bb0Ï[\Õ ÓìÑOä±yâ‚FW£°©¨‰Iiè¿oa·Ï1~ïxþ§%'ÿ.[§oóO–« f׸óC}œ€¿îE¾BI¤PF¾mõQCßÖ¤k´×€;„üó Šò1+JÃh¨9*‚9ëÒš¢T»Úè<ÇÄ£?Éâj_’3#]G«1Ïø µo–ÃÍÙ冯GÍlLšì5uâùSçÝ~¦„dT@'‘7ùÁàß´Oè,0® Ì’SeUï·OôìX¹Ø§âKÔ­(ªy5¶QªÐˆÔüI8š)I ïòcÞ¡À~'LêDÆšQ¬šîæí²†» ÐÈÛ!úëJ•)Þ ¥‰=Ã?yaGÝ5+IQóƒÿ#®Æ0ØštTN™då?ÒrMð'V|o)6KKÓ“.Ê‘‚*èQ”‡ ÜçXéb?$’¼bi¿ékEÅßaXOaórű+zØøÐ~~È7Ý¡Çû¿3ø„k’cƒ&PB.Ðñ–6fî¥NOãŸú}I ¤–42³É¯Jo„öÂN?¢ÍCDž{{¢q(ª!)Í"Vùs¿.FµÁ¶ôªXñÈ“_‘ËR;y®bwÄKí#;©¾$ ™‰ux𦠄SqÊ*._+GälyEÒgÚÛX,óø"’Î> ÚÜxÁ㜀 jm‹} rÎ) ‹1¹@vì­Õï[«fÑcÕ½½2ò *OxÀ7 Ùý+ìzb@ìO}H´’PV‘Û9ið_|; ÄOFÿ\{ãePÕ~ý‘ú)ËáBÁl)àp(-×T´•Úu:yáÒ¨[Ú¦†w±©§Û“Fy"}T ½R¢º=Ù+S+ëOâ"!Û(y×íSÞM©­þÝ´Cœ5]BµC¢à½£a¡¯YU‰efçuã•D46˜¤ð¼Š.¸ŽÆ »—RÏR;€ÙM ½ô}ú^ì#÷'Ä¢ÜJU¶Qù¸°„q—v‡óN’ÓtUh¼UÏÍ©4¸c(c|˜c˜c1rSÀ+ ÍêÀóY@ãÔHä›ÍÔ "tfm —P2ô•3Û>Š? ¸Í±Hl‰ÜŸ‰üŒ&­˜¹Ü]ò—*7 ½ÌÃŽ˜ ¸Ñ®÷žÈõÂúfHûpi›äqÔ¡"•2õÕ!+‡üâûº„¯þ…°møæ1ÍòºˆØ¯—zodÛ÷p¸ˆ®Ï »R|K⥔¯Œv$¾ïI®a®\Ó›ì;ú~›ÝtéPy~Š.-Ñê¡—KÿëX¢A³¹\¡ø_4BaüÌGšäážû$yË×Îþ“v¶ï_ÿ”ä1A»iìcqö@Ÿ3w\¯üi[*çìSÙ¿uü¿6éØ~2/Vs\,8Ù­ö: å ‚ÌCÓ9%ý±òR§å}âb„½¾æ9“öl-î©×8*2dÒóQs òíÙ¿{ŠüzGPawfJpÞÜp²À–W4hRTÇü°~D\|'júªP"ʷȧ°ºÏäði ÒW`:Ô™ŽIK¨wGš]>ú«3Îî4ÝÍÝHogïéw›'7úª%c`‡„82VQüð…¦PÙBYŽî6”޼Ã{³@Îêó+åNÐQÇ÷ž›9\Û+k¯_Æ‹ê“<§TÑN)A¼C[ÙÎ ß¹ŸBnéo„¦ íùõæ€b¨sýlÅrT²ŒÆÍ p%”!ÆL; ˜‡~Ƈ†°$ÃÕHì8J´¡RÂö?õñ”8Êcö0)û†Ã<±°¸ŠÑj^€} vбØÖÕÉžç$€”5u´}ù˜s*u]ÆÅ•ç0b‡¡c™zvӆЗÞ3÷ÍiÕÕàçÁ˜AP8ƒÜQÎæ¢±(ZŽ€ƒK/¼°ç̃*Æê‰SÚö+#°Ý"ê œû!ÞŽìÝ"¤u‹7µå“Ò]‡«‰8†Æ »¢Ôš×'KÜÃ’Eb” ÚòË Ž<݂ĚMÐ*Za;i„' 3%{”œx“‹ñ&—*Æï¬zfå†%ÏñƒŸÖï endstream endobj 582 0 obj << /Length1 2258 /Length2 23858 /Length3 0 /Length 25147 /Filter /FlateDecode >> stream xÚ´¹eT\Û¶5 ÁÝ-XáîîîîN°ÂÝÝ5¸»»Cp×àÁÝÝ $È#ûÜsö¾ç~_£AUÖûs̹ªdDŠ*tB&vF@q;[g:&zFn€¬œŠ¡­#‚‘µ…ƒ ÀLÏÈÈ KF&â4t¶°³5tr8œÍ ÆÎ©ŽfFF.X2€Ðèøá4yä€Î†ªö@&¥á_@ÑÎÉ™ÎÈÐéà ´5³°R}¤ˆØÙ{8Z˜™;ÿ©ÁBG÷§ÒŸlaz€´¡±•›“•ÀÐÖ M/G·sû0Z(ílF@sCkS€)@¨ PSSVH(+¨)ªPÑVq±··sü-"*ªj´Q!yU1P ¡¦¢úç¯*ÐöC¿-@^õÃÿ‡ç#ðOºœ˜ªª–¢ßk0\ŽNhÿKù‡2ÀßÒ>RMílþ"Pš;;Ûs30¸¹¹Ñ›¹89ÓÛ9šÑÛ[ÿ¥OÕÜ àfçhøxuZÿjŒ‹­ÉG;Íÿ*ðgQ²Æ@['àŸ$q»9m>Zù‘ôawþ°F8ÿ©iý¯p€ø¿hÌ þÊ•UT”ØZØ:m m? ]œÙ>~&ÿˆ¸8:þáû·Ëñ?4ÿ–.l÷qeºÖ^>†nÿ½b†¶.NžÿèÍÿ¾lc;[' 'g§UL-¬Ô;ýY3 Û¿lrBòRâb*ªt²ƒgK'g÷Ñ[zgwç¿¢ÿÔ•åp2²˜¸XŒC*fk"bgcó¡Ú öOûD->úälçèÁðæÚÊÖÎÍÖëÿÚM-lMLÿtÞÄÅžAÍöMJô¢?L°ÛÌ€ÎFÐt76gøC÷×´ü13ý1´ÁÇËÞÎ`jhíô±0~¼Àz9ºÎŽ.@¯:þ7‚eâ˜X; úÇfý«º”­©€ë_æ%ÿvýÏPþµQ©>v©‰­µÀh Ë oçü1”ÿÿì³ÿâw±¶–7´RþwKÿ;ÎÐÆÂÚãEþW„ðVJy;GCëÿòY8‰[¸M-œÍÿÕØÙ¥œ ?f_ÈÖÌ cbþ—Qíφ²þ˜ÜÓÇâÏáõábeÿ/ßÇP[Ùœ¬Œ¹€ø/ÉÝÿ#À /-+'¦E󦿝01[c; [33;ÀÐÑÑЖñc˜ÙØ^LSmtÿkV ô¶vÎ){g€©#ìŸõdg0ý1ý ±„ÿF‘¿'€AôoÄ`ûâ`0ˆÿ˜ #ƒÔßèƒAöoôÁ ÷7ú`ÿâü¨©ø7ú¨©ô7b0(ÿ>TþF¬Õÿ ®ÿуÑßèãŒÿƒ˜?Mþ?Cæ`S‹¸?HÍþ?XÍÿY?ºjîao´ýGćíŸù¬þ?”Yÿ~°Ùü ™>¤ý£Ó‡4»¿É>bílÿ!õcìÿ?”:ü~(uüüåôø±>Îÿl¼Învÿp¨vùüPíú}„»ÿ~Èôø[æG¬'Ðñ_Åþ÷¨+þ9ìÿ:Çÿžýÿ¹ þ…Uœí¬€&Ÿþ"gèìhá®Ãøq1}Ø?~þýNïý}~þ#[XØÎÝ‹Ž•@ÇòÑïMÊõ§¬>ÿ+×ø_7¤¿ÀMúoüçnÝÆ°+‹vÆ<Á–©Í¡å¾b…Ód\ôçU˜üšÒñà+Ӹآy»Ä@¢€VÿLò";YIn=ßäÛM²` ë·Í¶¤ê©;%Á=C_9_\D1¡ñ\uzµÀL¹eÿŠnbªéÜ­RÖÙÌöøv€Úø©WgÏS4óä;ÊM ±nEûz>„[ñLe¼ËÏ&3w~/XT7UY‡{ÊÔlkD Ž|}Y‡kÏÝb| d¿/˜ÛõÇ' ¤G¾?7Á騢ŽcÚ9%òB÷„lï! ÕTgýN®=Gø{_ï݆JíV¸  yyX5¤+þW€¦¤ ÉÍìýz™OêOo„€èS˜%èQV¾‚d2üEÂþA ‹çZð£Ûö=ß O~Ùß#ºk#èì’U”|FRè»$Ò˜Cè©’‚¬ ïô9}‡isRÛµgÇç÷ò°°‚s9i ˆØ#C$xÜ© sŸ—½R2;…€4É‘Öñ`2Uà3¬˜5üúß1pxƒSª4G †î¨UShP³¨7vùá6°0,Aswo3_ˆy!*—tiS°y¢ ˆíñBŽm D&*DÐþ±•ýXö‰FbW¢9çì÷ÀˆPâXfÒeK?’]<©Œ /ËÏR}¬Ôw iRÖÂÔR—Á*§“À¯Äª÷ê_£sŒX³†_» #ÑuÏùŒqhšœi9k›×2,¹Ö€æÜ_7 `¨—ì$#ç]?Å÷-brF©Ë@†|36œÓ‡8ŒÁƒ(…°¬º5HérF˜×‰Œìm¡nŸŠö/èpT£V³?Ë´¶x•“és®¿u]QŠ?Ñwõ4V‹TX‡ßXÝþ]ÉÅn\þë’T=SNçkỆ©´jìK®«‡‹®lÄS¾ý y¦}ÔCž÷í$¼ùß×"`#;zge€‰…×Ýá… ºœUŒ\Ä T¥Rf;U:ƒ-ÁUÌŠ þe“t¬‰×H®1¿4‡wŸ„^í:Åæ¨ÿV ÆO‰Þw±†´O ¥æ¸ay7kРó%}…òSrœA” MomÊ9Sl`µXŒ–(Dý+,Ö~¿c›a ã蟬AºÞˆ Ýõ@[›m‡h#I¼<Ë·sì [/ÑHoyHµ‘g2Œ:N”`!Wcó&ÌŒ´&ð ÌO¿'´#àVßP9€ªá0% ³êiË8š¡jÝûÅJ¨8µ=•5Ò·¨ê‡ef ïòyZΓ¥»âz8(a3ÒÞ(_¾&FçœMJÈ»³TdÆ,ÔÕ’×ý N ,\æ]ÒÖQhò¬¦^kìrÌ`Zÿ±Ð« %àù^õƒ )‡ÖLªnÄ·0\ç;D¬~ö©úP$0ú`ù*DâùFê_!oÒ夿«MÄf9¹YdpäƒplUFü^sVÕ‚×[„ì쑞 #G㚨‚t+v <5‘?{”éW}œÑ•¢ä¬I [œ¥úËu­­#j­%‡<‰è=Êp#V=tËÓX j­bQu—”;‡½_ r²iÅåùœ4Kò KJñVÏóUô¨¢®ÍÖO+¯žnõ_I=éÌ6“aFÓ‚*ôB¾Nç[Vh†¯Cdw@ç$g— ]Ûªúäs&㯞éX>±u¿×´ã•|®ùI.!¦›ŠŸÄî´ …‹b÷²£Xªk”Üc·®s ÷ŽÉ5 ¤ ÷ –ƒQ@j²žíP¡6$r–t1OnÈUê§šƒA©‚æº:®b`¸³ùÖ¦,Ñhx›¥„¦ˆm—Zsýↆ€{[­ô:X4Þ«ÊÖ†’î‘16NYÀK §íì+ôyéÀ‹å¼<}@‡b$#•ŽÀ2¶ uapæ©ÃIZÕ„ÏöO{ߊ7S§hÙúW¤6‚|«­<̽kûæ2t=~êo”‰Ü ýðRóô ú§Ý/ÊG§þ‡Ê¿ <æ,àSZbŒF‹•jž!õú4³/¢‘J‡ýêé¨#<þ^^G:,XWÞfl ,|ßÙž…¨ SWÉ*ý nÇÏi§KûI ²õÇmDŸÞî+$îU£âx*_ìÈ~+Ÿ®5çÒ¬诪=¥Å£EØ,aìHKâJH:ãž0 \½AC=J\§»Õ„@n…EMÓ’‹uÕϔտY⢜˜«R»sÎ8È­†Ø¾ÅÄR¤z,Ã3¾Ú«Tæ ÆO–ÕPm¨¹ô³Ó—?é·íØÒJiÃÄÃØ“f‘Òh7]@Bã0_©ÇÌN‰Ã?2€±³ép+ø<`oŸÄRÃtšŸpË»ã`Izü5©çò¤¼ÖaÜ»J4Œµ'¹ÝmŒ Fúc{„˜•Â".´Ch©Ÿm`L>¼‹o¬{Þ*Jä&)m±k!I(8 îžî³þHã¯ËQ3ñ*Ä ä—¿_-N°-6KŸwî„óàšç…- k±Á2T·ñã¡K­§TÊ‘Ú>q~[R?؉p®«EzCàsœÎ ÿ¾8Év´ Žx¥óY‰}гÑÎ7/"ú3õ´!¸Ù¶` W*Î!™q5ß^Dø­qG Jóírg3^Js›sïn܈pæ8Þayˆ¥ÙF?ê.òDº8ìÏP;ÚOB—ÁÆ™3a:a ^b~„Ø®U5Sàí ’Ík›:ðlK‘ÐðÝü”¿óäì¡dvÛx­¨9üLÃ8L(r‡)GÞ‰¤ yq £CÀk Zw9§&ª@p³úºÔ±ZP¨_/0ãçÁC#YD)'µ·´U.|Ñ!–ç™Z ò$ó!R§ü ÂݪxŸ³H;‚Z_‡Cª_:åz¦±(†úÛ¤î ú£°–Ë“:¤Ð dÔ¶sªÞÂ|9r¸EH vè󦸾ž–y. ÛÀÇ=ÇÓýÐíô~´‹N§/ å~êtëWŽ:…Y;Ì L,yw§_ŸH+˜$ô¯ý=ÚKÇ­ê,'ø5ë°’0$Xö^þ_¢M>UÇPätçmvæpüzÊo†ŸH²¹¼WÌ@ó?M3×÷G’Ÿ®%óÏ&•3 Ьƒ%"±7†yˆfV1FÙ‰¼Y—AÎ A&J¤¿b@³¹à9øÔ¾ç"ûÁ”/Iõw·K0\Bô=lx0ù¥Â!Š+‡ ¸;bÿr]DZP‡ó ,¸ö›ë7¿'F¾NÜÜü Kƒ£Æ¹ô=xÈeüK\:Lu—Ίô˜¿‹¬—Fÿ:M&5–Þ= 7ȳ<§Dﯧ,ešÉétÚNqãSߟä›àMÇH]7¨ÖgD/3Àg0u…ïOuý¥+2QM^Ú «|¿ ÷IÍÜ¡ÞæÑ RBN\Ì`QñnÕSwÊÍ~å¥z=ö:´iÑJ4=íðˆ`ÙçJoÃH.J»[À¼¤ïN½˜• ÃcõàäQÁ03›s‚>ÿàÈÞ¨e"KHPŸ–¸é°i(%öKpät·BºÏ5ˆŒÔŒ!À€ùü;òËøã¥Õá—y|è–8z(¸¤w0¼]Æ~§S=oŸV‚¾sŸ}4 –á³2öâHhª Ú-«‚BŒ9ò£µ˜ü¤UMôHœ+†.! Ëp¯Á¤ h´"Ù1ëynrÇÌ(#_ȶ,§yA-T©ñ¯«&6 (Ìtç\ÓN5äö,EòM qõäˆrÛVµK]¥3-õ½tº3jcjÝŸ ã1Ö@./*õ•P]=Æñ¸Öü@&œ>3ï—æÊîåÀ£r>ë‹õF«8ÇWœa¾½ˆ€97;¦!(˜‘Ö¼öòḾ@Sì¾(™¸Cd­u-&šKó9(Y‰¬ÊçùÑ…ÁÊæ—É!/år—;G÷ {,ž>ÆRØ@z¥3ϾL:–"NÛ›NI`4-™Ìs&S[k]Ô/™žex-‚Ê¢ášyêƒ1¦Òçb9Ëü]¶n?Ü¿{%-*£ðz<=W‡:’ž›?7t ?Õ¼Ff#Þ¡›Å`<·Þ5¦ÆQ9ÒßÄ>ï±ÖIµNwdPn^Õ˜ÇBŸVq]s~†šQ’>-x†ŠÕ͙಺÷íDÞ#x ,ͳh¬ÐY V­y\šÉœ¬Ú™ûFFÒ~K<\½°„rî“…—YÓûì8ÅÐF»¨FÊ·qüR*ú73×âý²ç:…h¤®Š¦yða>J¾„:šó¥†õ¾Zí‚­žü]ÀzŒñ¨Rö` *ükœãËïN‘ž àhpyv[„ÈßÊù㱘©uY#dλ›¾ëåêPeóRžÀ5Sƒ=øŠu«ßåxë¼uãùØ' @ ·ââk}­.VMÆ<<PZêí¶nN@êÖPq=enùÐÕ´a[‹ÜÍwòl?ñ+of/ 4×s9 ý‚Z¸ótÖäúå9VPyzWÎŽq••å½¾$-œÚ)±"Û9Àk9w²8€ÎÊ&)Gª÷»•°ad•eI¶E+ÿN™ŸÖzªZm1ÑÔ“"MCbNQÚHO¶è¨ï0k&@b‘·8¿úíÛ¢À–á»Ä¾ _‰õJ¼ –™õ¡k¸å¡Âñí=¬b{4˜öÔã,úmT­@_Z>Ó'fJ#=¬Þ1åL«nÿð;y[¢®Ôõù蘣•*„ù‘«ªK;ú†v]húËÉê»Ô‚'yiÍ{­KS4:6sÐ"¿W^Êüa» ÏdÒªV6e?ǤèÔ¿=Ýë0jþVTÓbpn#\zˆnJ¾^¶‹é£Â÷!S–†H_ˆq!º&¯=ßEåðýéBßâ:YŒˆT !yaF4DÔ TQÎþüB(%i“*í0JOw'êè”’ŽVM¶!jf×E}>"oÉù³$û Įĕ‘ìHÆ©iõý6×~Z!Ë,‚ì4vH-a¾÷º5çÚўΙªG›Íæ«ÚÝç:åk<ÍöAŠÅ(¤ÆäÞm«’ûþ±Ê­Hg¹>FÑâ⻌’NÃKž¾A]“"U¨OµÌD6±)gË3çØó±gT'æmë à2½îg‘w¨cŒl—Y´\n‚7âðfþ¾:ºâº¥h]ýo8/ÀrÎæTØrÛne‰C†Ñ¯‹§ùY²JÔûgþqf0;qÉ`:ÝJŒ•Œñ™ M+lå8‡—Ð<ðû (¿ééEGȤIö†ÈÅAö´ò¾ÍÌO¶í#=u1Ý]2v’>‘‚·=²ÅvÇ"”ñ ÿ©›³=J ¬6Û±öÝÝÅ=,ôÜIãÐÏ‚vòsÁ§±ó¨Î¢±ÁÔÀ•oá"\Ë!Ã<$l ú¸Ñ"¿…q<Öë0Æ(€$ú§Ý›ç©I?úV½ ¿ý~À”›¯£´q·ôC§ü>Aú+ÅÀ"PxXÝ®çq6kB*¸E`&,7ôX2ìQJi½46þ~47«×[5[ËæT18l;/‰t£[MÑŠIèQäU4bW¾æ‚B˜hɾÇQQÃ'M­¾Þ_Ê þÓG14ÁÍF™2ÂÈô!¿ç”Š®ÅÔëɆ ¦K”8f Ê.ƒvŽð{yÞÁö@èI÷êÖù«Ò†/íÒ:lˆ<˜KH¸[// ÈòÙíä˜tõÁz‡ü[ÃsYÓQùàó»[Ã3y÷cö„Ä›„Ãa[±KUëÕp²¼Î’žÄºzîû/0nžVá )mJOôzòJ Ì7™?ÆçúÒ|î+šä$vaã¬>5´”R&…^Ö¨½¯Ÿ4&ÅîÀ}gd´¡EÑä—eÖ‡Q¢3¢!¹‚íYtIÕ,‚YÃsJÚàVóšøˆýERV¨ÎÜðå•—&¯PbrËT¦d ÍE…ˆ„UjÀ®Ü×l•zF¸×§¿H bÀŠf GÙ¼[ >c€c†óß9‚¿²)^ŽºÕ÷ŽQD~ðC̼`‹2Z쬅 bªñP#1“,6…Çú|nI’C1Ž­½¢äxæ•þ´692hžÀ2ëzÂ7ë!»³,?_®uvo¹-Iš$[×H‘év}t'r˽/•jŸ;w!V/vŠR-n|U è¾âÑëšn÷®ƒ‰Ê’\yåÀ_9dsâÙÎZ{}É ¨n&-ò¸É"ÐPºðT7Gç»M#òfŠSÏ!OTЧ*¬Ö €¢‚¬>‰Êç™Ü#¥ß(C7k™NzÁï)¥Üb¡ü &Ý ¬Úx^VÞÄlÌ¿"1Ì+V‡aU¡(L ‘œùnÕmUÎ{аóü¥z߸¸UÂ75ü;i™™Ž¸Ï½j õ(nÜ!™A—’:´’f€Ï¯Yî˜âê(kog5,Œ„óGø vuÅš }|ååÇèùlæṙ+>º× ¿»m^GÉßPµ”ûãü½è‡·3‡;VéLy~¢í<Ë౞2Ò_Éç^%‡ªf,…3.p°ÖMÍí +\þdØ’9Ò«t¯eåuËæUÅïb,–Ý~‰5f£…8’‡CP)bÏò5m…%È :;ZNÓä ?hÀ(ÈbÌéØz2«)ÞëIë6V˜ñ¢f¬ÊB¤5÷ÁÏøÑÓÀ:8UjEÔ¶̬ïxNíûîxššážÏµ™4^a«3ÁŠŸææÆ¨¤Ê©t›@lâYzqõÄ®—9C0(ó|3>A·XwëišlÑæ³¡Â¾'ä—ŠÖ$IûbüЮ_ †J[oavÕ0ú%½…éÕ Ùç'þÜ´|“ÿ±\y¡¬û¶µ¯,£ž%ñ`ÇØîµ,˜Sh3ñƒÉ`îIcrÓÞ8”g–bgBF$êEûˆXöƒOð5[>´Uˆ !ÿƒ€u·6¸òƒCJ «±CŠDW›Mœ`5B£ú —Š=û[+’ ƒB™œÏÈ%ÒB­åû”†«(\šÉ‘øuŠ…+”W•EEtßyŸ5ÏaÂ3‘½6mNñî`:žÚ )ãó§ë0Œ½4’m¥¬$Š]c-©TDæðì¨_+ë*Äd¢8­£ábÖ¤­„ÕZÕ…§æ=ê]#H‘?øPI½Ù÷É¢¬Öƒ+Gîܼy–9„løC~ |.¾Ué Mn‡ÒàŽÉJÀlÔIäC8ézû!ÉsN€èM±ÐÔ‡ §gƒ°´DûùWŠªätàY¤ X& JvY²9Um1y¶ˆþXÔUO9ÛD!â¼ö<<¸â¢VÆèÐ Aƒ‹Ã=ýY õYCg.¯ã'zýbq¦W~iécøôóL$³Æc÷œH‰v‰¬Ëï`Ñ3ïDÃby†ëÁ‰¦cÉÃØŸ‘'–œ[õkòÄ7CÓX•ø‘ǃhÝ7Fø—CÛ¹`üøŸ~hŒ¤à ã}‚±'‡fì:ÆïÜÞ—‘¿¨Ì¤j3š;bsF8]r‡Á[dšáö§mi^1(3 z®(‘Š÷0œBb ~!ë;ëïhxÚÂ5ÂL­ñZrc\¦+"ƒð›-=Uš2èj…ÿ”Vý÷óWCV¥{d8ýǨröWG·Í;ÔÞÅÅc‹q¾="ÝÃGh§ Ĥy6õ‰-!½HkaH õñ•I)ó':β'Å[±;:ÔSÊÚo©›¦ØAhyÖìDÕºøÌRlwÎãF°•wÁÚO)êÇ¿IÇ´ Ú`¦½y•”y¥·1[§ÎQ´Ä#Û{­ª6³Fp6²j‘¾d£®tçÉàl=_~?èkpB3í¥ïkÉEy4É)è|QíÀ1¤ §—¸?tFF—VFò3m–Nðƒ5ëPû)ÛÓÖ¤ CðŒyb88I¤UÏß‘ofßø_Ÿ¶Á”;ó9Žb%_åM˜‰Ãz¶4"Öú*J(ßhì9q{WÂÍF>&±«ç8™Ç œê­Ž|vàŽ?dyŒé.¹ÌÏ¢ú1¦Dæ]‡6…†ïžIƒÕ,Ç$4Žñ†­‹nÍC&YúµJ-—å%Á½ðž¿Ùœvæ68– zÇŸ¯RA(¥ç¼W(o7³J¬Œ‘k,%MÛµŸo:)”)â9Rá¥sqÖåWNÍSE”ŠË[®ŸÐ}Àn¦øÎ]a:Oú%j'—¤¹Kêè¦ %C}²sš—XÅžü²bò2j:ôÓ¤U·0~½f£cóª)‹:Ö¸iÃþמÕdVhâ˜KSSBûjîúv¢ÕJÖ›üþ˜F‰rî®CÆ-9ø4½¦Wo¿?ƒ­ädÀ¨Š¹ë £O?Ć),-Ä—`;ƒ9! ¿ü¢Š’ ¯¼ß¼w—8û^6b÷ˆS Í:Ú²‘°`àõb}sñ’íÜE?íÝI“ü6" ›ò‰FMÅ4¾]MÍq×ùîÖ@Û„S–A9%ä x£—Ç ÓUˆwneË“ƒì€L€-p4BÉa=ø5uÒ€[Õ¦;³|@X?W•õ†5övöWì\éRk¿v·c¹M¿ÞÕV_eÇN@œü*-_Œ/æ™ȸ`3Üö(˜$è›Þãž`TI°ºcC`Ÿ¡Œ›B¿2Îp!–¢€+gšŽÒI9¹7ð4Ÿ‡o]›Êñ¾™Ñ“8‘­„©0^#ᦚ¼SÖ°wÑ`ô?ôl»rNÃ-ûrTŸ¤ÒÊ}ÓÿÙÉ›—GP<ýZÎî*Ñ\˜jÊŠÇ‚iV{´Ý|]‚ˆw“1t¯‰%oároЬ^þ¾Ò[¯t´sý·Ùu³•#¬ªqäoâÝM#7ªôŽï“N¤3~>fñhþ¨Þ+ˆ¾ñ`ÜXí«ÏVƤƒFZØô±`‹>N1À§Ñøz<$h±SŸí5^´Ö¾`ÁUU5Ÿ¢fZrLL_ÏÆ‚!’mf­j-žW§ˆøºIñ·:ðtÁ§lÒ%¸ÖæIêþlën-‚6³˜m3 aás{+cÆIɤeÇS';³üç“;=æþ·EÝ7TíÅ¡Ø%¡µyxä«‹2r¼ä›€£ÇÁÂ<›]†¾—(HU‰ûý¸Jü®Ÿú!Œ&FhÇÕZë{ïÃ/), SN ï6D?p¼d½\’¢·]ˆZ¸“qCä±àO)ïeL¸3»!åx8phòˆ¬d‚¡pÇÊ(ü-pÛ”g3& Kü`Ö+ÍIHõ|b’­â[Æ!k‰åã$Cì6ÑÁí]Ê ̨MRVSW̤Ì<¬jS .µ% )(¾xgˆpwÀ'×%ok¼­Þ³NK‡DDÁmÓ(%%Žþ¼T„ö:2¦š=Txê*5xp¾É˜FpŒÒ4áÃ,§ÅÔñ›:œš7"– GXK½=MƒÌò˜”H(h‰ÏCÁù—ÿ¶ª@‹¦Ôt)¥=hY}aÿ ÙFyÙÈv fÑN§Æœˆ‡¦?c¢¦P­öqZäÑ2ŽÁêibŠŽ T™ínÏ…ÿrÃrýLlKÄmžºÎa¤^I¤·°°‹¥U5¤tZ—Ö¾Ü}p•,â¼Z1 Ê[ó!ÀÉP7žËëÉúz3,9& Ý=UÌyŽ tÕàë—8[äÂ+ +/KT?o(f«é„úŠ{pNå¯Vü܉­qi”äaKËSÂl3å¶ÏY Ô8ú5?W1GÃb×m;l ó,0XÃ2&§‘U±þ_©ž•–¡ÜÂ= Y+¯á|†«¼C‚…¹‡ámæ¯QZ2CÖRÊ/Bª‰©Iø‡°Ó«‰‘©Cƒ_$–§©÷EZ]EJÄY&L{*(:Éö¿\5ÂáïªNݼ³ÜâRèh ¼Zû} ñÚË ðåë[¨G¹-ŠkFåj4¡ñkëÁ)â<íÌ“3›ð¤š®`—qÒô@wÔà•MZϸØ#äºÄMÇt ˆ’Åž¹1bZU_pì,Òp¢‡[×^ seð¢árö/ô ™«@îùn-©FÈäé@ïß/ ¹°ú.dÑ·;6"4©öªçoÌ^˜xÿà" U4Ðù¹ImÞÔŒ¬fŒ™îs·DÄ©Jç² _¸ôÅBä…u -JÅÃKåPNPMÔÖ>P,¿:Wñëuö'‘4—ËeèÜÓ¹Pw W$ûxñl„RZÁ›£Ä¼‹htž¬¦×ÅK÷v‘60bUÝ7æÚ‹eï;3äS(Ò_ª_w±Õ¹#*èP6+8ЧW䔃Ùw}¶:Šbô×µã8Óy™š“Z±Ol¢}Uþqâõ­²ýÂ?º%?ƒÚçÓ.}èÄE¡68æ/?Є ”(¤T+hƒ\qšþ"<·çÀ(LqnÏ'ÜØ)·~¬  ÆÅZƒ·y“½ÇÞ%½á—Þs‹x ò³aýM"è¾p ϶¶:Ú°ý1%A¢'ÝqHÝ€ýod)qÎlòRá…~~íÚBÛ•‡²ƒ•î©n‘àm»ó>ÂœŠ´ ²0JÙñ×-ÝÅèû‚ ½»n áQn/ðÔrÛP½uëI>`Ö½(ˆ»¨úÉÁDh`¥]SÒ3û~Ê’¿Iö3–øÊÉ@j?¼ËÎÒÝrÍ5Ò¿&½Èîॉ /ÚìǶQî ¹ ä`ãKÓE£¶ÆÞÒw éø¾vÔ¦_¸¬ŸAç=¿¼ŒÌ·ìpŒƒœØëº3Éo)ˆ†Ñ=ÓÏDÆMi¶|áÀÂe0X {q<µ¯†A¾Á0áVG¼Ç^vñœ/’¸å/àqyæH=Æå¶¶|m~ 7q»<ÿf¶âä¾G˜ ýñÕ‡ÃktP  †DÓœlÏÄﺩdWôê’Šš²¨*¦O†8ÁD³!YqZÁèU:¬]ꔓ²øåŒ 0xǤ%ÿ‘H¨Ž„ifo˜8Crç֩–=dž×‘½Œ­r)„B2tæF¯:Rzˆй©ŸöV„!ùaÍj•¥~>f‘ŠÕÇ2£#q&^>J½Éc•ä~:jÊ*ƒ²;W²ùÁŠªz]àS«û(¯o‹r•á¾Ït6Þ*ÕI%Aeí|ÝÉ& ‘™¦u´-¾xu5ó°¡#l…wF;[&ˆZ&­\òjz£¿ÒüÆâ?F}jÇv¨ŒŒ}#vË-|›ü± ¹{ º¿}Þ»(ø— ‹‡Äå#%#§åÚrõz Ë—sÆû“Ëñ1N“ìç[«+{±EšÕJÿ5IÑ›>Ÿ9Ï_²oY63zé8¨O¦/Ë8ß Ì¦`f>‡eàç”'4üöH'0 ð· ú¼jXO¨ß_:Û7¹#÷Ù¬³µ?Ñ„3¨)¦ªÄÙ žþ³’Ì©6U´#L4‘9#˜RC2­H٠רÒ<;ÝÌ[Z;5!CÓǼ¨ÊÓ\ ôano6ÉIÅ$ʨó5{o ¶/AñÓf ú¨R¢ë±û…Ü%ÿ!ÉâÛ£ ÒoïÍΫœXWGÁÙú¨- a$Å6 l‡+é×Û3¿o;_ð ï‡æ¤ªrtoÊУ7²”ÍØÛâ°‘l[jÆÚWÎú©Õ½îà+E-lü§ÄØ ô’ïú7°ØÈœFAÝ$|i@ZF°Ý@‘Þ\)ø`“Fú75ÈØtÝ&õdz1+DRž4Ä“§GÈž¹â<`·Zækèv(cÁMyKû5èVd8—r¯AÙÏDË6ÃV)rdŸTS&L`fèãf::d–…—1×PÕÆÉ$wÀb)Þ5§u`UÊÈéÏp3šØ`p»ô:lHŒ¯Qpú§# 3nlÀž±Û ø»&¸Ýχ‘7WÕ“Hx@Öwˆ££pkø¡º!Vú’õ‘¦H¸SÙ@Ž(I›Öj­.ú/J‰yÑ»lÌ‚ÕÓHk?»ÑìºÖ-}©%D,ʼ֡áLä¢kI Œe²ocïh¤š-Là:’| m™ÿ$±îõZ–˜QF~ÛÇ‘z]ie¡9–dó wôN ¢DÊ̘èýñ˯Æ$B òòuÆOÛR"í¾Ã×1quc#=”éÌß}"G‚Z ¬ hà)ýÏQÍflÜÄ…³†1bs(×):­’6Ù Œ3¹aÿœaÊêq³Þ™ÚÑ"ùüɆ[ ÜÅ㕲ãi×wåžû¹—ºÏ_5¸¬ª&Žöä&}"ÙÖ…Siœ-|—Šý÷oãâ ªHt-ƒ߀~æ*I7èÈÌ`’ tŸ¤u,ÅEÈ]REÚÐ)]&{üÜ6LÝ–IF Nï[Ó.@ÐîÌ?Q¬yÎ.ŠCÞãÏ,ÆÖ^×E&䑜#­F: †7›nռƖz.{æ|^ˆ~ªÃ/ÇwW?-µg5i{k÷² /ˆáMµ5é—dˆêhí‘ùhüõW÷wáµk—™ΰÿÇ©\13Ó^ŸB@D±¸ºmR±ÞT™/šýuZê€ë2T{þl7Ôä Í]îŸqÿ5 m‹Îœ`˪V ‰7|…"PàÝERáäÀ'(¤n}_bzOY·ü]ìöQÕå;î.Y* ½¯è•.٘ќ½]íe•bõ@LM\î×»ÞôÌðyŸõižÝ…¢þ’³Á'ëF ›3°ïG šÙ#mXÔPÊóÛ—‘QÆT™˜jæ7BÙ³$¾m½ø¯:Þ,%›riÝb Už5nؼèÏ:®uQ|ÂÀÚyj>«øŸ^@xgßS>ÜVH—è.oØ´–t1q|µ"Ëô…BÁB΋r=™ñ@:¾Oq˜–=í÷zšEëû㉵ Lþð¨‡ë½¹& .pÉ ¢ ëìŠ"¾¹Áá#¶Âªq+ÁÝ‚d9 ærŸ*ˆ²•Ö³×^Q|û’Ð[0L,õ’‰O¹µD‰‡É¿J¤8ØB³ ÃJnæþX•ë÷c{u¤}ÇÙ¢­!•p=ü"PŠ…°–‡ê‘ÆR‘ìkU_5ÍÌh N°ë•óf%©¾C×B’$‚Ç:ÿ¡¾3u»ØgzE‚š½m³5¨Snͨ^¬-1{ ¶`L휃H×F` y_±Õ]I÷ ´ q“WWbߣçñîå¹Tw5y\W£>æÄoá§päUÞ3Áý´~Ðùúýçj"›û™²{ãÒ‡áÍ¢glçšC°#9xè‚P‚×^û›:ëuª=‹xð{hy êë£î:õ¶ÓC ›ý½¬<íØø …ߌï2ôíúqtYúsXB~‚Ü:t‚Z$EñEǦܯ¬ mjG‰–b˜ ØçËßäéG}†Ÿ‘¹4Ę­9ÌߺÿEÛ,¢¿€ë:ÌäDÎr6ËüΌ‡ZéÈ“WÕ½AËI´n‹.•à'ñ#&BÜÂÀP±k)ÌG:ôl½ºž†‹àòíÇX¡Ôº\يžÆñóˆ!”Cpß>ŒMMT'ØÎ)¿u¤«çg(u!;>£ùø¥Î/Ö1ôÍð»gñ”CÞìâÑÜåœH‘Ý.>j"q7ôn;y™´jkþ‘E¡+Èî‰Å8œ9žæм‰0Ä+¾z¥ÎgÓ©Q]g½ÓŠS*ýpÝù¸.DÏ?ü™ï`‹ø‚}´Xsbb—bÖHê (è{%²bE(ª)æ:¸ÝBôw+¯nÖH˧ÐTïõÂJñGˆi &IztÑÀîƒCl šJ©öç\·g‹,£'^u…‡jÊø pÌÑŠ^V‹|%¾wŸÂìõOr^DQ¦‰©ªKƒ™ÅV`>.—þ’È0I»b] ö>‚émÏçÚˆÓÆ²=½Q4M¸–\V/•´ì0Ôg¦fn#þÊ”çÅ…Ä{ÿƒÔvzglW*p(8 —tUab Êcê) qi:ãîŠ'¸¶[^ðBMqs±'–#Õoÿ4Øæþ›ÝªUõ¥Þã`Ò„ž‘í÷àþ ÞYÛ±*t‹Oñ*¹òZ⩳.Wk²B4û¶ö0e»á/ê ±„“AÜÆ¿òcž‘[leÕø›ÀaBÛòxÂWîmž!ÌÇ¥@àl_N²*ÕñGÝ«%L^ÀäY˜¢Ã ùè Éßkp`“ê µe¸1ˆýëÊÒ“¨Ô¡a‰µ4‚xÚð´‚=»ã§ ß3:‰v¯·?à2- ±9ÙN WÝåœFhݾ:Þ¼"Ug5ƒŠ!ä>ëöÑŠÁÍçPfF "‹&$ Zìò;i‚Ù•×â"¯GdkÜF‹³Þ†§'LJ±8ÊùOoTÄë=wwîJc¼üÉ)íÏLòèbupÃû¥ ˜sCe§ÔUÉ_N­Y7Zçe3ì¼…é®ìùÈ öè½Øwév|GŒípÙê& $âþý ã;žà@¾±i­ù—ð•Üô䯡GœÞØ£¢7ÈÞDŠø@듟(´€ø¥_½4ÕWm%ü]^K (Öù"EßSrbÍ%;æŸæM¯)|‰E±à<ìÕÙAÞ™ŸéªÝ:ÈÐ8¦_æ^š%‘–¼«úì£ÍÁ±DJœ6.ÉDÂÌh&÷Ùœ•ßßøP­:ü%ÐÞ×L¦[¼*OýäÔä|(·}½Û°9éXÏ%l«ûþwpìs2!OîTÌ#ª~c›R„—Áps.Rðcj™«&‘ñ9 FXVAT1»Ëëf7¿h´_îE³ˆ,˜4IulôôcÜ{ tÑ<hÒRaBÿh2z}ïÌjf'ÊôBV)㡳ۺøÓ÷xX›ÑÆÂ1q„IŠ¿RöQQÒ=sÞ=Pó‡açhè&“º,šÉß k¬p>`*àÉ+Ù®‰¹ö·Ü”-s®¦Çæ}¾OC¡_fdtù¨° ß¤4€£ÂH É 4ƦoxÎPp€YðG,uédGvùˆÂýc6md‡wI2DZˆ¾¿ÏñÎäZkÄO~nÍ´qW_±¨£8g…™ßž?)I<ýù¦s…kÊÊn®Y)DÒZ…¿¾}±QßwÀh@+ð\df„¡7;æðê‹ï\Á*{ºW•1~E6´l[ÛÕJ]åqÏ0Y˜ž û=°ûkà„º¶|•7ÌEƒ¹îU€W<’Øð$&ƒIOÙK"of4Zš‚‹_i—pb~r=€p* Ê[5»lm€Z§B¦éBÄ@ל…‡·íïšÈ5ü4×g©P±8õä.(ËXNØ)pÏþ®Áìk“ÂF½‰Aø°’d,$Ë—$ôÔMç»è³ Ç«PÝê ¬…+ëS‚­&"õšf(QO3ð2ACBE #òpÛâ!dá;+¦âE⑊q8-ÀÄb™¯”‹ «d¦§ÀÅ$ æ}` 2"À3*›1™Q2y;ÐN¹ÀÙ8ñvÑc[Z{AQ!Ã~\¶Ð>’ûÝb!ñ6çýÍ.#¨ÖKöŽ/ë šÈfpý’ººSSB|”IOÁqÈ.œwïØÀ¥Ò®hg‡^ +øñ­õVRa›¹j »¦v‹‰X…Z4ÖNžã@7:®*ú{47œs«—Ѥ'çcÁ!†”Ûõ7§e†ŽÜGêÖmбUU 0j¬6å~KOPjV*ž» Hc"†zö§[§€X#¯¢sN¬Ç”T¦ãxÈ?»XD£ )pPÏ4uMÐÄr¸¬³ÄÕQá‚xRω®‘¹ X{êQ­&ŽµÐ´î²­3MÁ³žÄЉz—Jlµ›õ¬âÀ˜Ž‡VfKŽ[ÂL%vöVÁÈrÂE¶â`¾`Pøxî-è–NI´P1VÌþ„Œ²ÇdwãÐð93nP™bt{ÝBñhLŒGŸ}wsIÊ6ó@_¥`cÑ5œý¤Üh¥ðü£ÔÖÂY‚¬Õ»N²üoG·t.C­vlZmM_)~^rÓëa48" ËPä‰WËÒÄF²i£ú‚ÄÕ/€iºÄ/òæÆkÇV¤\(+.ŽÅÔÙ•›úˆ¦Ç!ë¡a÷n8"LQ ¢ë‚ªÞ?¾U’¸—¤îwcÃ|ÿtrŽ¢ßJårè‹ÉB^ ñ9¤4·gdÀŽ[ÔÀlŽ<Á…SÄH9ÈÍ@Þ…{‘ Äjp€°ˆãµýÛ¹} 0¶c‘I>†g|K!|´nÎP¢þsˆ¢sé$ÖW¢2ާs°OPXs³ÕýuåýÇá.–&Wõ\É,uäMpðÞ$ûm§„>9 lœó 3EõõÌ$_ˆÕQ ù3ö¾I¯7—Ø“ö² 9EÍC;¨9”<‚Ž ý»Ï{ ç” 3pwí'ºðǺ–I"ÜdYSy; „ŽìÁ™àåýWð oCSËÝDÏ2²gÅŸÚAʹĽªŸÉÑ~ýµ\CQ PÉæFPO2t)%8ó zV7 W5:7]:˜*µ[b‘¸4ÑÝZsï'øS–^B:yQ!åk ºæá§jË”î¸pN_ÂuK¾µ‹ðwäY6šá\α-C:Àã?ãE‹F-ú®Ô¤ ƒ§u‘|#¾¸fò8)gÇÒnËÄÏŒú+Ùç PÐ ÒnØÖvª`|`ªmK €Kyò|íÍ¿õˆ…€5éßr¯µöYÂI£TÙŠyŽàÕVú§?p³m¹Åã1º˜úè(ˆpmœ£ôÖe?çsñtT𖧤X³‡¥‰?ÝÃ> _xÏ•|é+7+Qò›øC;KvûF,lÉÞ¦”.LLWü#½¯Ù{ /ëuðqIôS;’WÞ©ìŠý–ÕÔFŒùBƈ·Uö0¿¨ È·é|Õ¯û•°°Êÿ/8T­£ïÇ´{Ôd©ÿvÞ.€´öBV}Bô5°$fQ¼˜{Àô$ñ(½˜ŠS¤]ö5¤>…q ¯vî"ÝÂýr‚¸ºÏ Àè¿E ê<åÃTe‡ ÀYwñ+èˆ[æ”]m6«lÖRdñHn,¼%ŽoÎcOVªÐưï][ŽŸó×Sj7TžÚ­BÞ‘‡ˆ0¡ H‚aðôÈñRû” d,ÏàñEš¯Ä³arô.áYw!ú¤×•yæe±ØÉyQú'ëµ*uåôÙ¬£º¸ÖÆÍßf=Áø›ƒ˜AquŠ;ª#_[úh^S5Of¥¯Ðãî›…¸eeù¼Š”_H9ÊDˆZP™y$H°¸á¯ß§v- Îôþ?2‰ëÅÎÑåõ‹Ÿ&ŒÙò[åí⯒#?v¦€—öÞ¦à{ƒy°×ÛêÕñ&&5{pt @h~Glð« ¥…·&ïÉ;õæä;>us#Ðnv‰•‡^çœö&J¹Õ¸6À ìþã­ 7+¸Çþ¯SÃÁê¾MÌç îʧQŸí4‚BELŽò°xª|[COŠnxåÁq@æ*ûŸ*ÂlÁÎÔ¼Wõz*0ƒŸg믽Rݹ\¢En°\ ~e5!IÛú ¾Ñ[txX¢Ë¡#ñ¬úÒðZöNº3ôU›’ëÁ]‰¢Šøž?JÆWXEíÄn^â—žxé”þA­•HE$˜„¹ß¤ú^ är’¶¾>Ýämi(È)ƒu¿¯ÒQ8[ÎÁ‹½roZœîz3¸Ÿõ"hPÄÕª5˜­¡ÐÚ@‚µ¤Š„–©óeŽO¡‹Žø…§·ÔÓqùÚÆ>è’Yo¯zC%@Âeë™6þ•Ç&E%ÌßÏh%B]–à*ÕÄ_oóòI…ƒª¸¢HË>ñë+_1¼’zoó©o~D“is™$‡o[ÅA"ý­>½þ_øQ%½›Nƒ$œÁÊY…r<‰¾ÃO.–{ÍÃÚíKð´2ÏW+»—XJuÎ[i}B×փцoƒ{4Ï⾕ە ® kîÕ ! æ×ÚlÛ¬¸°âîøl”Æ`aòyÙà[%a¡p¹ðÐK »R”ëØ6`‰]XÆ©d‘ñ--€ÐèOö gø·Wm,ÜkJì£Vpz¾ÁÞŽ ëd"sz¾üJàE%øI%ÍG:âÛ­?çç#6b:\!‰Ÿ ú†e‚ð8 Õàå¡›ö5ët·@:ÝVæù˜Šlg=«óõŒ÷zf¦÷‡}ÕD×è­ábüÈúÂc90hAøØ&Î@Vju>_ 8Z´²ÉqgÐ"Ž”ÖA ÚXa±|­*S:µ\y-2É“ç¤ Eˆ¸xøYü™¶¤ÜœøÂhyïÁ±™í~KªÅ‚d¾?¢¢7|®Î#Ž­¾îghí`ÊM¹ÖõIu%A˜Y¦×;ç¬] Ùò"?ÁQ\ne/=Ò;c.—_tBÃPÞ`w˜;¸a×w"“RzŒáî»æfæeÃò8x4S±P¾“ÖýàT°,½¯Ë›”sòÉÁ€¸Is#Ù¥€‰ò9F,”Ö Å…0ÛÒ–ç€D–ÿµ®‡¤ì´ΉšU¬¾;W ¹ôô„óDS9ѬñËÆ³újäVðËY£âíš ‘%‘Ùî½LÛ6 s1]É~s$ËVüï½=°ë ÊÀ­ 8²…TÔÐIåA¹¡×:q8sÉc¢­ ß6HPcŒòßÏž Ä}Î\[”X…õøÌ=½SðVHðšöì$|'¿|›àÍå‹ ˜{Çd ÀÌ厀í-¥{5sï¡{`…+%{7{6þãýÀÏœ?`Șºã©KÏ Gz£{þ·IKþ¶-OUlIp”µ†ö7Mîø›äðJ ; >¿/7J‚“ž¦Ô2ã-m\ܧ‡¿šÀË&¬WÕ /Õ­œVõ¬LL\1³ð¡½{H¹;¾¡4ìÿ6n qéÏI^4‚!¦H¬ÿS®€«%ÕÒsÅ›Ógù8Õ/º³¾2–Ч|SE1õÑå—{…ŸG¥Ò)&%K¥9UóÚ¬´¡HÓ<ˆÿдnýæÒüIìAg¥ Tñã ¯AìÓœYa,ˆµŠ:OÜjQ@O}²^±ÆÉSQÅ»`ñÓÂC:{Ŧ,ûNíOh7YJc«­¡{cÒ´µ²p}mÒ×&l#ÁY,Í ,Û¢˜`*u„¥ŽßuöÕä,âEšB­TW‡ñÚœ¹ku1>ƪ0(òZAn¸@×v/Í5}ÛB ~NÃwÝ:oj~‰ŠÚ]®QC^ÁË[ÏMÒwYó‡ÅZÖóâÀ ø ÍG»Þ÷¸è-^[ fû3]WÔb×xÑ+ª´w¯»*v"ëWB¦<²µÎº) ÿèÆÅ_ ÁC«aTØÎ§=å3ôrF( §Ì=R)ß“¹?™[â}…¥`ú£¹äDLô M-4ÐP¾«ÞÂШ¼øMkA^d›ïœñ‚¹»Ÿ–m³qã}ƒ“ÓcÁ¿ê2vŒ< ÄO˜a]”bÅÙÔëŸa„\4L{`LdþÖÂGss.äˆÕöÆ?ü¬Ã’^æ[X>[†~¹Nþ Éš–[ Ò<‚jà<ý8Û¶Ä»b&\:íñèîÈÇÍüÜûŽ\¦!S²ÿ~õâ‡&Ÿ"Wö±èÍ µºô˜ ù´L˜Íßß} []nR_-·í³"ZQcµÍkÈäïD¢Nôi˜ý‘* ’®…ÛuÍî"Õõ‡Û¬Øí|†ønŽ(Ï]7 ž½%:äþ§¿ít»ÃÊŸÌ ¦-F¢8 ûé¥Ôm-6H‡-p1ÚÞ­Z9·A”LìýžDŽj72MºÙ©Ñ%’ Òï[Ñd7|:3–Ÿj>S5ƒ ¼F…ïÆ7n*ñ/êë×í_‘uBHaV œ±ŸÄ¾Ì÷ %©&ÛÜVà ,¢k#ü2Œ— K¨‡û:|ÌC<Ÿ¶à'–"2™cthìÓÀ0åĨ™Ø,çÅÑ–WYÜÊ"b~âíÚÏTPÇÕɘ†&6îKL|оƒ©êLðøˆô}èCõÚ˹Žç…+Fgíò”WQòæ#j7ÊÿQ=ìÃ3'‘*2’™¦³Ø/=稱`@ðRõ=DKvLÇŸd`”r܈ý›o^¶SÿØ\cDH¯£CQ íElFWB%“Û×DÏ„iÛâÛŸC“þCép+¦Uóí)GÂ,U"=iãýýM¢ÐOR,Z‘íEÚD™®Mø¼/ùn†Ó  ‚ ÂU© }²=?¦ ¾jzf)¿Q’7ÍG‰x}”Iþ@ìÊ&#p¿²:Òõ„:~ˆT%T3_(lRƒ¾žyƒ:<+âè{L¨/7K ǶâȬ[Òë§&¦U¡O™’«[Ý–¿lÜŽƒÝ(~réI‹Iœdq&mä‰VËìŠ2†I÷<_óÛ‰æ‹ÚÐcQŠÏ-<lbsG]2íЈ2®½Å¶v€”>JRVÞð ÜßK€^!¼¯ÃÀY{ë:?aüöý«ç›ý_}“©šR¯ò}Nºs/нäÃ_¨LrRnç –‰š~]öV-Ú¹Ñg>SÒò<Û:Ô§“‰J*­*ÂOšB6õ{Í’ˆÌÓ©c¥o³¸ü¶÷öšÊþ†2%Œ7<>dÊíƒ÷µÝ£ûQvMõõ‘QÑeÅç#ñ*¼àÔ£çb5¡².Ä‘‘¨øÓ•)¾Û~·ÊûƒÕÕ2)XΉ,6*rÐ|—ÎM%)m § ÁêŽ S˜°;î€ :³2©x’³3ùõ™±ánŸè8ù$åï¨ÔNò²ºYÂhÔó?ÌÑ ‹H¢ô'¨_1´;ª ™Áà X½èwlÅ«KÈá?ÿ¢çÃ'Õ ÿ-"~^f"h–ÂÈŸà*<ú½Hî+´Fþ&¬ríoÓ*ï ´\¸÷ç¸ÜìDAU9¤ñ$–ÍK/Pe2]9æc'dX¯¯4DÓ¹åhÌØ®PQbÕÜ·ÜØÆêU«¼äƒ5qÃÉ/K¡I#söI¨‹´¬[|¥'s91¾‚Ÿg ~ÝxNo¹·ë³úzôÀ*j‘ù”•¨QŽþl~}]<–%N5¸Ž¯ºÇ;[¨Z®czÅ“æÕAÔ;tðlˆ¨nƒÆÚŸ¡+0ÂfðÓêßÏ« .:~Qjy©ÒÞØ7ɧÙè tΟ·¨ƒ>YøMÌù¤TX‹äú<Ð⋵ÿ¶Že@Ö¸jÔ8vÔÏOy|‰iKywzýÆÒ•&lúÓ6I'ᘓˆ>;.À.69VëáÏÁÔçá=rè—Z¦¡@©úÖJ¤¹GYoXâ=.m¸ 61-¹¤ ³¾]è‰Â{÷ÚjR·ÖΧ`hü¨Ê‡= Ô¿Qnn’|ÜüðØÁ½×´”lNz té,ý•z{»äö ¾éyB? ÎBÏq2¦°?@Úϸ¸Ý*¨­±ø‹ ÆtµÌtÕÕwBjškEš¸lîR7ÜEÌžÃðAÃóQ!ÐiP;æÑº¥±}Ü £e<3uiááÿÜYÀ°Ÿ©ó&Ôy×,gªÞÆ©Wr^]©mëá娑CÃ7v¦‘2ªÇEPŠùå|B#Î3{lS‰Àé‡çt'$jÌsS£:’kư͸ÑAÈáÊ!'›ÎfÂ"þÔU`îÉc¢ÊF|«kZ.–"¾ìhjüeí½¶nX‚ˆa›9?óƒQŒØ=ï§æìɲ[âsó» PÿEýum›B2éµs[¿Pܤ=йdÐàÿ¤¤Ë{|rôñòÎÅ» ëå[µàñéèÜb4ǹØY‚k¿(ágjØÃÏ%”qú"†´1ò—™DnÄ;¯Ô¢Fê¾ ÀKÅ^ßá^XY³h/v¸ßjVe®¾nýðÎØrÆ0jöÑU\áÜ„.WÉ,›`s*Y^ªÅ&˜rùëó¤l˜ýÇÍ[èFä† Ê¸ÓŒÅ.C£Es?»šE,ƒ­È~ÄLªN6JMuðêEÈØIÞ$C²I–²GxÕ>=J¢Ó;Ö‘çégš³ÒÊßF 4ULíHÄDÆ»½ß ÈÙÑnië/™Æ “©-µµ]h¸–`@SÐ÷Ó«‡ì%G@oÉRå„xmc6Ö×ñ–E¥‘Óê6Ñ$´Dù^ÿëXù'€º;8.xyÒ"[úMöÉTVI¤óO1z+­å2jý¡pÒ’÷:‘ŽT5Žè%LAUv‰O\Šl)³c^•Žl’jnü;zt¦„ó,É©t€pwû?¢šÃ)vîJ?K"~•¿?qÈé=|\Ë=:1œ<™'ßD¨òªÖ¬°®pÿ9ý1=«|æÓŒ9å³ò¤ Õv=„•ד{ß3a™Fø­ç{¸ú©´¤wIÉÊÊÔ׉ü8Oå÷vÌW„…mTÙ¼/zë’ô7g®ÑÒDíÂ¥ÐJ2†¥U[]Ùü«¶lš`)Ñ‹9‚ȼXb废J(ª*÷ Õ¿4ã5÷\ÿÅ¡&g–$ò75­¬–5. ì¾¥¥š2{-k®E¨•Ó4|ÀªqN:/+zòåIÜŠ·^Ü &4|äïuÈü!-1åpªá)· G‹¦S©üz§ž¤gPbÿ²kµ6 {B³xÙ(e©UçR-T—憄Š$òj„82ñ[ĆYæ5êïÒ¦"LOrüøN€þç-Qw›–ŒÈÝl&HÕ ³Ö`V:Ì—e0˜HàÁ‘0ˆYٳDZŠlÓ²Á là âc‡¡ìЦ3ŸÊN¿Q˜ÍÂÍØÕ¸÷§­¼ì{9êÔìÒÏÁ§É^r ‰îm—ÓUl‘ÒAœ H’IQÅ¥E8: eðîÁ\~¹^J(kœîíI†Á¥Á6Xö¬…|úîÓiö%ûI}(# mèQŽPwòXÍdÛN*Cé‹‚ÝE™ƒ’!¹Ê‰]oˆF»‰VN¾b´àv4í°Éõµ·È!¦À2ˤ@ L´:n«HÍõb?ê}VâáÈ{è~‰°ÊRÝÓª ‹¯N87Ç•F3 ¾Óñ±Î¥ÝUµúKiЫp—m·à ºEÕlWÑ•&ëšH€ÀN`N8Å”—H $­$|I¢{jŽÐI­Û‰/ç «€6uÖüÒU õDAN£yá·¦ú®:ÊpìTB:0b±Ñˆ1k ™•%µ–)k‰¼Ï:4λ±H¾Â¦Ôj4m3KÅMšØ®}pÂEk ~¡À52Œxá¡o‘Ür}-.RÐa%ýáÞˆ>$jàñÙ‹+”‹à„û±Ø$=<0ÖíС؂öðìߊ©¹rœ7ø ŸÔ’=˜ÚÒ Ø›g×[’ºÚífç;$¡¦$ÕfG[ZÒ=¨sÙ¬¿’á¹Óz —/+üJe†‹ª}€D8Ηò•ÀÞ©_±«mi¯NO˜kö+í lF´L®E¶Ö]MÃìævM\δµ[]Æ®œOK:â3ë`ô–}]šªz¶ëã3gÍbxgzT€‹¬~ÅÖçúÄ–¨+Ÿ»,ò=[±Ü†QÇÉ¢õv>!biàß@J½Nb,»%µ¦˜³©¤I÷¬wÖT4J™¼‘lØÀñSÖ?è.†|)2|í•Õ^†OŽ{0O@">Ï'B¸G9¡-kgL…Š;þÕÔeVž¾³šEn/“¯iešÝ9 `îŽ^w3ý·=Lû‡N˜á^W´¡õÁfâŠùYa|R¶á÷I»°4Ôé&ÂËòøø£”1é(4Ãüø­a7n~´|'-±Æ™Hå$ògÅ2·É¤Q÷ï8í]î²ú&0_¿fä8Kg\ #µág³G°‘¯xä.›*üÃus‰ —Å_A ƒÊ„žq9GòÂvö6ÝgYî ƒ7_¼tÔ‘NÝážÊÄ=Á—‰Øñ²5ß–¡d´A¦t‰Œ›ÿM^/Ü Ü÷"vé÷>¬Nµˆd;ˆ^¾„è~}¼J‡–$t®¨¼À*ÿ:}…É ‹–¼º ¢•Kã|ÚrFz7!öôÓðŒ {§wp2WÞ‡í*©æ S¶6„$, ‰?àäΪÝ}…?¿¨¡¹gßùû¶3‰t1dQм{‹ 5ˆžé÷}Áj_‚¡ZÔ%+‰{56Sþ¦:¨’ð´ßÞ4Ð;øi‹MÏêJ¥È_皟¢ŸM‹¿‰Ö­ò±‡$ÛJËlŒÚ 3Ad°Ý?vûiÿÊ3uµe}h\ Ĩ"8Fõíw˜AOˆÏx´\©Q¾²‘JP†‚0e¡¢cWÑȨ%.Sj¼ ÊñȲ½d¥ª ê{Æâ€*‡ÿ^±À†ž3Æ¡„ëBÇübivðÿâ|ppò«`b‹ð gý•woáTý ªz?(Ñ÷Sgí{Úz,á ]¼!{¶ZmÌæÄÁI^ÿ¦Õaâ˰i$,‡G.‘p÷u€v,4ÞÀHÐ{eˈ&Ø#?jŸy Åq™U§‡Š­*.Í ‰@Œ¦y'Ç>'9ÿX'm¼…âV¨©ïõÀoœ©ß˜ Ö\v­k)'ü+šÀ¾ endstream endobj 584 0 obj << /Length1 1608 /Length2 9377 /Length3 0 /Length 10203 /Filter /FlateDecode >> stream xÚ­weT\Ñ’5îBpmÜÝ‚'¸ Ý@c Ý ÁÝ݃wÁIp'¸ Xp܃}$ofÞ¬÷ͯ™÷ã®uOU]»j×9Ý—™^û·,jV‚:"¸ùyøÄš ø+ £:·Ôx4 ã03ËÃÀ@ê¨D€Å`@l ð‹‰‰á0ä¡Nî0ˆµ À¦¯kÀÎÉÉõOËŸ€…ûzwÂ!ÖŽ–ÇW°=ÔÉìˆx„ø_o|6`€Ä ×Ò~£¢© `SÖÔ(ƒÁ0 =@ÛÅÂb P‡X‚á`v€°ÿÇ` uAþ”çyÄ’…€¸Øò¸ ìf vúãâ8a8üñ¬a@GÄcPÄÑÒÞô‡À£Ý ú— úáðè{Ó†ÂpKÄ x̪­ ôž âOn8äÑ €Z=F‚ –.Júë{„yô"€G8vCüÉe€ p'{ ûcîG0'ä/ 8ÄÑúŸ ¸0°5²Ãá0غóÏ:ÿ­z ““½ûßÝпQÿÅ‚€ƒí­xpøsZ"s[Cqxÿ ŠŠ£ÀÏ÷;ÈÅé?}®`Øß±ý™öG@ÔÑÞ[áðjB)lÿ;•yþ}"ÿ$þ·üo‘÷ÿ&î¿jôßñÿõ<ÿ+´’‹½½&ÐáqþqÁo8@ðçŽùÿb{÷ÿ!ú_ Àÿ`ø?¨ €mu´~”‚‡ïF\ âiC–6+ ýcþÚõA`˜=Äü¨åß6¸ù……ÿŧg±´süÓt±¿.°#è_™?Êó—7¯¡Ž‘®¾,ç¿Þ¦£´UGè¹;=û:4  ÿZüÁ“ƒº<¹ùEÜ‚|¢‡O &$æý?äû Äÿϵƒ¸Œ‹æãÿ[ú<ÿ\™ü Œ¢£%ôgN^!€Ž ÇÑú/÷¥ ö¨èßÓþXò®ÿ9ì¶Ä™Ÿ…ZJÙ¦f¤!>‘e÷ +wuð£ö;×êäùUBÛ}SÃVÅÊÍo«‚yêFÅï?»Ïì9Ým¨rltÚ³¶§€r©½Ù;óž.±4‹rnðšã§ý4ˆò<œV_A3á{½¹6¬£kZt‹A3Ú,Ã:¼d÷ctÍó#fºpzâcù¾&–¤…°‰èSþÞO–ÄË Öž¯ý}½íÇèTœb±™%€d>É{ôIwsØY­åÝ;îJñ¬ÄàzË® žë*&Ü&´MY*›“T)Á•ˆŸiùmÊ]UQšj—øg A­_¹ê¾Öß6¼{%GQ>Z tSbÁÛ JŸ~™ô¢ÎèRÇL%Œ¡Ü#})²]Cµö Œ†á˜Mv—úA)´Ž2M5wpR€"nÂ{>hR²áYh _|ƒ7@x_ãiÃÐuÙ6³HÞÓE˜×W½ø þŽÞ\aÜêÀs©®EŒÆ˜]-½dPXcñrðmÁÔUʧR H)š1Îwæ:©K¤]Ü6>¯¾‹Þ‚Û‡ŸQ_Ô?Mˆ,`¾yQÞ9ðå©Ê<µ¯¥Ü‡Q™Æ¯hdÈÖóÙ¿“â®Ë» éß´]ôô¾ Ä(r—(»8Y>ÈöÞ®åaï= }·ð-INn×éƒzƒñc,ˆ¾çv¾œªv-^;@ò„7Xñ«9Õd! …#‰o,9²*e;ælÿíuµNúdņEyXÚ„lüÚ¥ê˜ÔÐ!ŸñÕ¶¡áq¹ˆç=rId£-›‡j?//4÷C!ãh“òÜû 2/)Š£&•ùz*G:1cÖoªì']êXš¹ñZå~zâRÉ‹Ñõ&dz yÓ‡5Œö5/ºa~™ufïô8Ì.æ-~e°THê#‰¿¨•`uzéÍÆ‰§¦ë—ÑKJ)s­jrÔZê8¥KxcÙÑ:U” •s€qá³°+„'ÃZçR&_VübÚá‹WŽíøL]¤ævx¼†PS¾†HLdñrvÕÉŠ´ØÚ¡Xœ/ßþžÿ¦pí’ÌÁ‹Ó©£Ø;vö´¤Þ»öÜál£_Êø-äfdOl}\蔚ñ“æ.ÁBP9àÕÎ$oïPÔ jÕ—I¯k(Úåæ3•y¯†…„}6»»S±¿(qI¢~^Ù|vÄ ðWm^ïQ›èÓʤ{J·„˜ÖÅÀ(jy nØi¹‹]¬dÙ³Xw@%Ó¥™q`Š èÏu+¢¢žçÙ¹‰ÿNNáIz~+AȘ=Ðæ†}(S–\ž\[¶húõCfqâ{äºz÷nÙ#éFU‘>dO¥ªälÙà-[qRÚ}º´&Û챊g*Ü÷/èÛ©ñh¦ntE‘10ð'Ù:懚°É“Ÿ•H¿:ÖJf—gzŽŠ_8’Àó lUùžj¡ræ°x¼QjqlnGí›vЕÛJyÇ„âIv#n¿J8)ýíü6Î Èá8 XVR‘Y’g§s¿LîŸFÚªiÆÐ¶?Ѷ솽À¨Wg¨£p¼=N„QDm´Hœò4#·ÚP‡~vîi÷2Ôp5ÌÇIÜuòÔ ¹“L²¯ë*ä3~FQÔÕáž؆mÑD7î³,Ž‘ÃÅä é<™0$NþÈ? «h-a[,:µ;Þña(ï²1¾\Lj«#¾‘uÞé“ÞUïcÖËàg²qJ¦#ÝŸ,ªÍŒa ìvhd2}9K¹ÛÞ¢Gi”šÕÌ‘VQêå>Px` âãд Ë9ZõP@}ÅŽn ¢HGÄNì‹dÓ&-Ý5i‰î¡QÞò´á'´÷ƒü ¤Cno^‚¤ÐS6ï…F´JáÏäaïqêÛºë½sçðÌfõnm¹hØz½T9¾A{©ùöGG~k ùº(xú…àÎYÅä˵x|\ZƒßÀÿf/rÒøu–=¾5kéT²ZÜ•hLõQhp£ôþŒŠÔfêZÒ]uáèWLõ‘.Í5®îæ+·]%¨êšÎo º9wÒL’ï§!¸+ Aö¢A·I¨Ô µÝQ?[LÚ§û2J(ÞËkU2ÉJ$;7±Ñ¶SÉÄŠèÞØýkKÉY} ž§á<= 3òb~äòê(L87kO¯R=o×ÄæI€Š³GÏ|ûwšë²Þÿjg“ù,yò^ÜfÐCXÑ`M)XɱWôý j*òBpyšžôótT~/|)ãqóSæÐ`Dcåvû3ª)׆¨+HZ9š>Ê”ú&‰]·÷d²Øâ@/›‡t!DŸx/!ßjÑÊnîJ³–r壥¸×íZ(~÷•Üß]’wWÛÕ‘½8}¶‚Gi R‚Çe&öAeÍÄ#?ùБ:Â6ñšgÜý&^¥mm¥!„BÊMÆ·ß.ä^Â!¹Ð“ÿ˜'\üu¥¯4,ñGe û'V£3†Ÿz®]'o¶vªz½¾A…fÆ?äeÉ1=ã‚tzöe'ÃEemÏÔ•‘;á>^.çÔ&·©v¸D8º?ø»¬Ñì5ó`2$hS;:9ÀW—ä9±ÖÖ‘3îtÉn'»åÀ”¾{6×XW^§Ñ§j–«#êgÏÃD›¸¾*‡:TŒúŠæšö+Ø+Wý½¤{«Œz‰Þï Jó£¥>êО~7à^Ï)Þ(¸Pu|+öœùDÔ§G˜*üL÷ bÈFì(÷¿–j%Hyýõ§ÖŽÕ¬ÓSs‚þÛ±ÜÕZјõÕÐJÙàÞt¼ÐÀ¸Wv¨Pzñ%ÑsOu“OmŒ«ivÑÏŽHpÏp‚¸íÈúD¿GÙ i ͽÍd4Ž\8!¯Ý¶UF E-ó·Ö.êY–¶ì¶¤ÏiŒY‰†Ë|KµÈ+³Vž†„Å@—æ° œÊ«"±,ž‹0ÓOt¦;½h4ë6eH&¼¶‹Îå·~ê1c¿ß¡©îbšúÍåø>~—¥0ÎÔ[“xerÉœÎÑÝûi}Ö–ÁÍ»DmÇ'ÖºGh Eà)Þ-²ï‡|ÛeHüÎùÚo˯ñó…ŒEð\‡Ùr›>Ô¬‰>ý†ôô€{ÕûÒ‡Ð+üØD™ºaqq£ŸEr—-ºãv…ª¡¢¾Nçú+Š;!é n÷i†èY2?üñlë4îÌkZ ¸‘«à¦ªß¿1£~üð6¹±|µh.œ“w·°Û/t¨Ž¼¾ÆÍñ]ÇAÿ5-¶0.çn‚ï‘Cׯ÷J+ñtú6iWÅw“¾ßà¢þ²3[z¬Z8ajšþ…!Š¶Ë¿uguò¦¸l >\Ê#Yæd…ÃðŽ­÷§fGîèÅ Ü$ç³ Eïìä7ªÙÄ¿ó-Ò[•¸¬bËе_;ýì.45UX‰5s~miMS9R`çf©ØŠ`#ü Ȥ—×d«7¾îÝì@ûð@xÿ"ü> S߉t§4<³!Wm%yF èê¨Büù=òIÃÇÜ4 Á ‰!YŒjô&fXÎhê·N¶ÑÐæ.$?Þc;ÀOš3¢1#«:΃Ú‡(ÖÅdÌJ?BÐ ‹¯¥'‘, Ö‹¾ô©&@ºËS•}ð.üt"ð% ëUzxÆËB@³mwRöõ  Á¯ð‰n:z §*åu:|»Bk3r´šoÏ{t.Z« ¾­¤Aáã+ºÔ.jÔ/Þf}^ô^Y¨Õgì8ê“÷aCà @QdÂ]àŒ{p%«–}ÃEÈ?q 튵 _pÂE˜r5#üáÍ'A9þcK³‡Ê‡“£Ks•7{G}¦—òƒ‘#ʽ܂~zÕéqÚ“g™¯Vå69¯_¥û8!-zªúöv¿HÖ7D?W|† ÊÛ4¨%])¼‚ÜTGkå! ´Q“)¿î0>Vi]© É™ÝÌwL¯3G ,Ÿ7î-aL-€rU&{è'{;/4q5.𛓖Y–ꪼŒ‹Š&9`„hyP½Ÿãéj@-¦ýel™¦ æq Ë3G?/NAðMw–¾–Sšª–›.Z|5ŠþåøuGù>Zotw¨»)â’Àª@ìÐ>½WüîI7/56£õáü¥~½Ñëg›¯ãñ®@ÉÅv§%¡l ‘ª•§›ñ»DØÞí6䳞ŽzàÙr™÷¼Œ´½‚Ö-›ãDåT°‚Âtƒ†ë€^^ãg}'hõuì­X¥žª¦µ1üý§]/ ¸?Ã1Š>U¯ 4|Ü-µ?S8B»¢^ÇzÿXíkvOÇÛÕ#íÆmUŒôBe©­>h3}ƒ)âj†Á¥r%Ï3IZ¹c«1Åyèöy󼬂sµøa¶^‰¹æl”¾ï(ëjŸÖÅ«Ó /‚ÌÓŸH4u9݃t°«ËÌöS’ã£:ˆò%E‚ƹz–;Ùä¶û¶Ê_ÇÁ(™GLÀþ±uè7n§Ug>›1Ÿð˜B´hgJÁ)•¡0eî:b;­gÛ} (Kh•ù±`Vš“<8û¤Þ˜‡æ2wæáv;å!' ¬öU¢NìpŠ¡íå# ¯|ÿþ™Ä•§bñÉ©éá¨öѺ[c7‡ÔrªØAÚ8÷‹íŽ…Ó_Їt»!“®Z—”œþ‘÷^A?5*pé`Íš¡ªH¯å/Vëñ‹¿®Ú:ÉnÂsÎO ­I3!öW%%æÖ}\;9Û™©˜‡æ®¢Ô­3·ñ4©ÜQ¬cö\'S4{J•J´úÀóÞ]ëFð‚F/J»+#íáC–Ê» òE¨û¾[h]olÜÏ?Üžäç‡ÔE“oÝe‘p×Òûý†4C޵¸³ÒTyCòô…uV~ÎPyçl¯4쓈iÂ¥)¿6îx•ý!Ø1Ê °Úl8Lùp27F…YõÀᆴ¢¬ÕvØz’À5©þU•ðWèÉbžš†â@Y»ª»–WÍ̤ù¤?{áB¤EÐÝ!å[¯pÓÜý¢bm+ÎðX°H¥dšÜdò~U[Ä‹ì+,µù!ä]´îaÿk{rm¸ÂnÅ;:týï§Y”Œ›Nel.9ˆèа±Sóé°~y':_õºì²Ž6¿TÌø˜ß]­ Q_·ñ àë&PS™åƦÓ%å+ód$n}ê€õ–•æðàÝ<t‡G¢;UsA>BòscGu0¸Ãn,èã–•è8’Ï¥ÂÁ¸ì(}¨ÞpA¶_ÇÝÇ>_>Dö‚Q¤Ü«‚««Ùñuä/£ 5«‚%tâµßËhG—ùRê3Ø6aFÏøIð¨’xÒ‹jSÆ7…™Ë ÍŒveÛ¬Â;;Ã'AVR¬vpélÔmV zunÌ‘­ä×63ßthŸž;y~óÜA³ŽÖ( [ªÔ'’Î}ÈwÀÁá6 @†m¢ÞåÒ`])EE1ÿÖLë\ ¨`2ÖÚ¦&#ó4¢ó åÈ õ˽:e¾eg§Z§bm8:¢A²m90÷”~ý=3Ìg„%ÒÛ#©¨Ô¸‹¡¾ÚP=]X3Àgˆ#žH…W|Ûß+g5íß+_>ÉM_ØIm<²ß´ª· ˜©[¿:®ué—Ëëœ\Y[ÌpF¶J&ЦLT|­ðëJVËŠ"ý‹¨TuefáìÏ@"ï3£/M÷6Ÿù] ‰¯t‘Û†SºDÔ9ÈIX~¹r£ˆáð5½)ŠÄ¥_O6VQtôyÁž“Rç! "ÇÈ?Ì­ÎM¹–¡ÄS6¡As.SJŠ¥ÂÈmÊa©TöVï#ÿõPo+Ͻ;2&§•ãe€{y2íaqEò~6Ý^–yiÓd±z`¹¯CŸîDYé-Jz¶º=ý‰A¶\‚D6<Þ¹…hà#°E¯~¦º¡çÍ¢Q¯„°ÂSj™Ü­hL «‚™-)œÖ¼ˆý2Fkv³›$Ý×uehÂûÛy›”›‚Ró.SÍ–*]̦¼¦WQƒÍàh»0(€š8&‰!âY—û³#D¼#S9)IûE*õé’/Fȯ½²1 b:ïð«/Êvo “ÖÅ”Üô~ÓyÐÆµŽÓØù.¢Ë÷½'­jÒâ*¯âíÛèjÏícƒŠs%‡ :_¿mLSHáÁÖ£kö@Jv ôŽbÔÏe”’Â×EŠ›€D¢Oi›º¿jˆŸXTu‚'ÚCñÞò¬¿ ›*X-v ¤çŠëé<[Ï1C?¡%’<¼zJku•0D¡Õò5úäk¥I>˜9LHä]Œv7Gv\; ŠÊ-y%±= ›UL‡žÆé+*³¼0N»¯&R;~ÒS¬GϪáÉ·Y«ét:¹ÌÎK–?giêO¹½žúq#§óF8\Ið!?«Zí^km¶&1œïÌÚj×Õö.¶nù'úô³oïžxn«!T9TŒd¢ÇXüò8¥ìt­4¡|OO??æ•,bÕÇA–6øm§’~8xùƒm2œŽL,Õ¡alúê»4&éV¼Œ £ˆZèM*˜¶7î]0fPž|6hD9»ÎÏû»ôS]¾Ž‰$².» †÷)ªlq8OÒƒ¾Æ /B]Ý$Ð2é÷„÷]N Ýur:ò­–š_Ëô¼Öo¥1˜‚•ÊœŸ¹÷P¼˜ANšÒµãÕÛfÅÌ% fŠ9jiYšJo`ÏkÄÖŸé3yi§+¹®?T¶iÄçæ½d^â}kà%Êô’±JmˆíÇá°ô8ó5ÃÜîøŒÇ ®”¬à”%·"ç@ž‘ÇxÓ㈢‚³E”’TʆBƒ ½ý^²j€æõE;™ Ýr …¡g‹&ŸÚF%‚j§"Ù´àÍ_·3ÃîñmÜ+,30_ePyœ|Kt½ì²€åÉûƃ¾+c|Ž3°2ã:É/ž­Æg讓üôy¹‚e9û.Ê¿1kR%þB^Äþ âaŒ¼ÒŽãå+ÄÜt³’þÀi ‘K4û×@¿+RÃüÞ-÷ ‘ñ ©UYÖ–äÉ-)æ¤Ö/ª û™ÐW~Àn)ëFJ?ž™lÂü’4ÊÞ¹O¿#×IEZ»ti¼·,_9ëþ57Œ%5ŽÕg¤‡}²A~cyøpþ¥¨Eæ#Ö-ú¬ãr­ú Ø´aí‡(Øò—2û2û<ÝÚk.Qï!…‡€x MûI?_N‰ÂÉýîÏô`A•ß¿_Íz4šú¢}8æ¯dÞuH¢râÓvjSx†z®²¶üPnðëùYq+™n›é[ŒÎÍ dr×èIÜCJÙà„*¦®·¢ƒÐkë;è͆ê–W_™£ŒX²e‡dGÙ<¿Ãî Š‹ËODPÚ"’Ãi‡ð“ƒîä•–ÏJef&<»~£ÈP2øsï¬YÃó߃C± ù_{¦mµÏ17Ÿ= ²á Ñó[(˜¿¦»^þ1Œ*Vt}·85°ë7×z\!ŽAÂì“9›²ê=ý0‹]3ä!JM´üNÝ-çË9‹ñi¡Ôj¢q$?%ìu6Øý†áÛJlÞ´z¹4Ì ÚT2’" ÁÕg­ª„‹Ùôvãj¡;„u°ý¥šLëðI,AÁŽ¢‘Vg‰­3ùö›·g\ÀgÅìhÉØâd¼×ñjŠL-üÕ¸©•^cyN»æît“û=…±Ê8i/Ow$0ûmÏs#êN˜#¬ë±}sTg\í¹ ÑšÏ­ @‰9H­6(K½zqÌ…Ѽ…¤(–²æ¶ÓoKªÝêµÑpËP2ˆ ðÕöÏá*ï% <©zS!’PX¿[:°«j\zÎ ­\i¦;1«þäñwAG˜³M‹# zÅ¥#p€4ô•»åö<ûJ3Òü¥.]¢‡bDÑNWèÛ|.±Œª­TýÅóø¥g žgÏM˵5&tP8¸ ܃ “õLS/AAªü#—Ò,ãœT‡(lë$£8ϱO^2ì/T¾¨à­œ¢ÆšŽþ¶ˆ:ýAšÁv”­Â¦1‹"PÚ4b¼X?¦œ>ZªÇ¤:½‘‰³ò!RÆ]ƒüì4a†Hö{.n1ŠršÌ+T±ðæÔó Öyâá±3¥›+1¾”Y3_­16Ïsò7oÌ<Ñ#©@N¡«)Oƒ±®S¦7÷ƨ~е8Ô“Œò¼Â6{– ÓlÙÒ=)·C¢ì¿¬Mrvä÷eÅf(E&±”î « ú “‹5³n//¤@çYëZ¯n×o—‚†í;P¢ „?ÑaÒ•ʳS Î{ H²¦v5߈k~G¼‘’»¡~êëÅ6)'dà&¸Ì]ëåH!ÞLTZÇÏ“]-÷dÝ&° µÔÀ”2]ÊŸ;\¨ýFÝcsÕÁî«3Kq3¾HçÛÈ´¥úñER€Ya„<Óó‘ðŽÏgÈͺÜ,¬áb=Âÿ‰Å$N^Ã{Ñ»êvÿÊïïÄðÖ¸âcd¯ƪ1˜¥Ê¥bC/S¿Ÿõ‰¢pnô³ÄDn¡.‡4˜;&{=Û´Ÿ×ÊbJžeàw´iØÈf¡Æ77³$§ЧÚ7:‰‘¨â#qŸj1í ÉT\¹Ø4ƒ 𥗕ÁöYé²ÃA}–Ï©÷ž[5¼xBÔu¼±Ü>{SO2¨«ìÜÎÕtµê0Ö’èbÞíL7XYÚêÆàZ¢žô”“mÈç ª¦ß6Œ*´ú@“­ø!÷'YHÌ%BhAïîr^•©(óGÇÅUòáK™‚„|_­°r)çÚàq¢ßó–eê2õ¯ÁGv3oгE?– Ô³ô¶ 8ótÇ?›‡Ø=YE;(F2ëÓerV›Ä3²‰7ˆ8oŒ™d'êK/ËõV+[\2×l‹%’à.ÿ£/dC}è7«Thaq™/‹Aʼ¯Ȩ˨fŸòž,ŠÍÔ;YÎAzE#«‘L–[Qy¯$´å±C½)ÑæhÆÂXqGð»1œ«’ˆ]þ@KÚ¿êôÄ+=$l¬HÍG>fGO’ñè­žïv’..Û7reÏaB笻´ÇOi¹ºTÔŠÏß|óU7F ²œÓŽz•qÞb­laJ¸ø(}”1‹Ì³(ð‚¸K%•ñŒ;%J·eÉ()ÙÀŽÆ–§î}=ý–Ò‹>ZwªûipJú®ó'G2-‘:e´ªÅÖ%rÏj¹Á“™L© q]5Jˆ{Œ k±ÖÚ‚"Ž˜j¼ÕD-רQ† [É…õEïh‰vmïÑ'‹8“Áñ †–s¢_˜T©ìzͺ‰zžäÌÀÞ2@q”m†iå×½‰‹Pœ ”ª@Tƒ´OáP’ü‹æmû½Ï4„\­"¿ 2`?© QM¾ÉCõ¢ ßúR*ìß¿÷­^ç܄طµjòVy¶5¿À…ßzÃ6{‹öÐne©ÎI–Î$¾¨6²^ìÏ猾¶Zü ¤„áÒbWfÖ7‘­¿×ØRUÓ–¢gR¼º¥r,LÄ"è£1úkÖÃ"`ßú£ñmsCÁÑSt2}Šœ£ <üͤd$;ŸƒàVë¯ Â ~ìÁ¬:¬3Æé4í€@åÉî’P1„܇C¼¦- ;ùäXƒv]¿KK²c%>Ñz±Î{ÐùåïD†£ö›”¯ß¼Ô¡¾Cß°Å7Γ9}`ô Ðbûl²)¸¶,!¿Ë-D܈®Â`»SJ\² uWçñމjræýmÓðÙm8K©e ÍYNÑ¢ÃûlEõ€I-€]„-éhÔÍXjЯjûíñ_BgÓB×W2’ü¸ÚÝ‹I-.…¾ÏÏÍX-ÚŸn§êWSEŠ6rtaj·`ÿI’®{ï,g{¤n¹K_ïz˜!ƒÖ( Šóè:‹bb>f¢&—KùƃÅ77…„ˆö¾îÜÄÃÁ™Â@Äœµ&²Rd@¼ºçCÉ^¥ˆÇu KcJïknÏï•ùš‡Oâj줓åsÛŠô›ìñXµÜ–pÄm¢d[ gÈuï¡’( äwÉ…’Ÿ÷eyH .¢£çãf\4qhüƒUKœÕû³ûtW¦ODŸ‡ü°øõå®ožˆ•îIŠØ¦ŠCÌ)gŸW6^¥e§°—€tw­Ž[zp»Pk‹Å{³þF)z1ìÅÞ$é=úÖ¹äë¦Ù¼YWUºŸ©0@ÎúD4ê5$#Vw®¢’¤Î#œ8Ð`Þ/êÇÕÑ'â:·ÌÞš—ú‰KÉ{»pÛojIøg Ë[Ì L’hB9sl ZÆnÓ~©1îåŠ?Á­ÙáYÔG‰Ð¾0¥B…åáƒ(´2¯b/ví_˜jBraÇQ¶ƒxư’ÛY”Êf#²à­FÀ¤¥®@<| ÃB[ÀD“F¬AÆ–àŸBKž4}ÀPNGKàÆeËÆK(Mp€œ&[¿Úí)ÆdÄÇ£/“ŸUùúÜÞ§Ó+,åtl¶vj¥yȯٖËK—LiܱRÂBÚû†Œ7Ä0ˈÞÉUŪ(ŸV§½·ÝpðׯÓÉeV›ë™Ì’íiéU*z¡Q´Äù§Šþ¨¹qNî±ù)y""­\dûÏY,’ò§ -M(W“jô]F •¬%·âzJ–˜ð6ç•­<ñPSyŒê±Í †ŸX4»O÷⺽ã02f«K­÷êWšäA_è>,Ö’Ií¦bØ=c65*”êµEBþ ®we endstream endobj 586 0 obj << /Length1 1144 /Length2 8114 /Length3 0 /Length 8886 /Filter /FlateDecode >> stream xÚuvuXTkß5 Ò"Ò= ÂÐÝÒÃ0Ä ÂCw (ФJƒtwK‡4ÒÒÝ/çœ÷yÎ÷œçý®ýǾïµ~÷úŽöumFm=[¸5XCðyùEšPgkw7=+˜:.âx…¬pYXô¡'ðÑ„œ+Ø …Ãä­¼¾½;@ÃÊ Àò‹ò‹ˆ Öü‚ÿ „»Š´]¡Îpo€6vu‚Â(y¸»3†Ðswqq‚‚muÁnpwW°›(ÀÿÎ ƒ» ]¡{€Ý@׈ƒ‹‹ûoÖÈ1y°°>,<ÀNp—?2=H(a`ׇ¢mÿˆÕ¶³R°…"þhÀn@¸ˆòñ¹ØY0^7;^ÁÇñP¨ÌVîü‡€î3“‡º‚mšBòýsnŽ0¸'Ìç¿`;(ÌöÏ–lÝ]ø `ÐWî`ùÿ ~€pÿÆ `@ˆ_€Ä/¿€½lìùþH©tÿIÿ€­`¶~>.p€•“Øj~xáú¸Yy€Ww°ŸÏÿKüçØBmk0äáþV€Áví5¬®P/€)?/??ÀÿÇóïÕˇ µ…܇kZ9ƒ|šŠF & \ÿìýßQ²²ðI ð3€ˆÐƒSAB‚ÿTÔ¶‚þoEüVÙÁ ¿ ˜Ø¿Š÷»º=¸Àþ§a9ÿ©¤ G@mÀö¿MbÆ/Äÿà‡ðÿ4Ïðÿ§…þ™CÑÝÉéÏþÙÿjðй@ðGïNV®ÿnå uBþþhþËçÿ„•ÔFqú÷˜ nŠP/°­6acÿ—1þ `¶~q`m¸ôoÀþƒÓ·‡Ú8ÂÀnnîû“Ãlÿ‘Rf·… =ăÿ¬\mÿ üAÛ¸»º>ŒçÏ z8û¯½ô¡@0Ø lƒ;;· u¨mº*“¡ñäYì|npqïÎð ÷µê/Z‡&¥cͳìs‘·éòÚö’_MÑ5ÐQÃh^ {:‚d›y±Iž„‘ )GQïñVŠkŠâá°ówR¿‰¥LÉÜ–Cö(2]³HÊ ‘è…ÃÉè®L6·^iaÑÐ}.y¤µ5Å"¿>ÐRvò×Åšèk‘çwŽHÁSm­ûŦj‚W³wù¤¤™ÄrrªK–@(`"\ QqdMc\ ,Ú2Ô*pm߬&Ý‚ÚÆŶyÊ7ˆw·ÜÇ9E™ô†nŸ’r$HHÝYlÖ‡&uòSWó{¾È Ìr׺ԓ)zÑ» #ë)¥»:¶ÒòêüUÝ ÀÀtó Üîò26´—´©®ëWªá”3ÅÂøË ¹Žµ•µA”r3zÚxiR°‡¼fÇWEÏ¢ýó‡çJñ Ï@2_Ä«,Ÿ@Z¾&¤'â0ìdÐmŽèšŸ˜³brk]tùLS¯Ý–<ÁÕ¿4-²gß++Mk¦ªŠÕ¡Qsm²< 1ôÈz'ëÁ wà¦Þ¯Ãf¶ Š‹°\Ø…)-³{g>ëÁ¾™k¡¸iß/ÝüPV[.¦É!ÚEY úû&þ0]¢T'z6#Û¨×_Ðç³”•¶'Wc®n¢ô#«ôó& €À¬ØHtüOlš(_J“(ŸmÞ}•ìxîTd”ÌÙ…H#±ÏÓ+UžJ¦vîAR&h©zæoý^BsPÝ­<ñ÷R‹{女d„ ÷~—^L:rSÑŽMg_øÜIŠõ‚R}À¢Šhkaä]ØÒ7õ– Âèé]’o|_ ã°‘&æAÄ¥2ÔYQUù£¿}ÛÊðqsQ7eFq¢V£$Ï6†dÜÛdEe!Â¥SºO¸˜vO(¦Hµê¤Dð±M=y(ù…ÒÉ*ëËÑ‘ÞUžÞ ƒDC§úZ‰ÍÞŒˆê”ÍЭ;ÍeBMHŒ ïÊ®¢?ëï÷¹ #ñ¤%ËÈ+€-V®âš´x -ÔEÆúôô"ì'Gñ%çWæø:—ñÕ5’ø6#CÑ(1æf‰Ž@FËQÓà¨i^‹qH¨q9žyÕ éS‹¸¹‘úÞ»%³ZÒŽ´Îou Cb7Q'JùÄØIâ^b ²öi¬ìñ>¾¶×` ²¡|]NÏOú®ój`K[4M_.zÊøu÷ —2ÿ÷ÍJ²/¥¾áÐzN {ä”~%ÂîÄÝ´Ãå÷ïñOyO§ƒØË›®˜Ö.1ŒEg;K$ÝZª™È-ò^ÒùöW„§£Ìƒ‡©7Zõ~Ä;‹­*; -¤ÿjH”+Nÿ/aÔ± Ï[ÝNœHMäAaë)rÝyå;€•1zT6_øŒ…6:¹h«ñ+¶p?7Çûç§5…tt³Vñ«~¬O¦Mhra@b ³Cµ:LÑÊL: ]Õ£Èç›Þ§Nñ†‚ 㞯HxPÓó\šZ~×ð\žÐd»Úeÿg¤O¾ÆX–Q¨ìT­=¿RJèèH^<õ©¯ ÔÒ6¹þ@®0ð¢ûÅ å*“óÏ Öh©ù«ãâgnƉç:×U+0/“‹RÂdÀM˜§mA(f™©¾+˜l°½kŸo z—Fú³Þõk²ß¨Ø¥xDYv Š>‡ÞyÞ,ꔂM»™ggV5`u‘Õ"Æçgñƒ& „ÖB¦Ð#®1†EBÓlìž•+¼6êv¦bè{ä1‘´xþMB¡~6b1ÚA<…] `Oïø ô„Çoî…™5<Ýc.KµPlc÷ü:Ð$RÐC>ìv!@д}òøé%vâдàªAåüëéõ@ÌOgêôŸñ{+ϯU¾Ddù‹=é!fÿö‚„ bðûёϮfhZÂVy^¸pç„^²Ås°zîpNUð{Üz†üv_Œ °ÿ–°@< / ¹È«6<'3ä2ì8ÖwB1М_?·CéØ&<ªƒã Ë­;k'FEìF‹— `¿~,dªxòA¾{ŒG’BF”?©7,p~8ìCT:…{ïÁŠZLÕ`ý²·{^±šx½Âs“º_NþÍIê¥I-¯‘?AùåD½&¾ùÌBVw]‡šŠ‚ssz-³i$ËL=ÁðU­&)‡ùËiþ’ã™J¹\÷îõõUßèûØj­J°+ŷį&x¸—ëµ:"«ÊŒó,? á}tùè„Æ9Öƒ¶EøÑ`¥Íä¾dŽ’ƒ òJßSÓáWW†º<ži±¼l€0q£àY’L¢ä<Ð4ø,TWÅ,õi8Áô[üô5;óãgÌ.JøÀšŸÂWLêû!‰l?•D¸ »lF¦åÇ} xø3£ú¸R‡êãX]q‰†u§\O[©fbÚ–ËV ¥û$…ÆÀaCWÝMv}†Ž[L}¾‚;má&¡úw UÓØ\ÜÖÀ$öIðP(bá²qQÄÁ?×6Âxq§’K7ó„‚ùèÛ’yjYÀVëF!L£…›’6¿›WÏ^~”¦mæ;°4‡ú)Ä÷È&xQu˜éþÎìÜ×im³/L0v! ˆüî?±©z[påh¯.ÕäGÐH«£ö}Ô ›Ä)DóhV…ÊY|šrÚþ½?˜ÏiT€RTmÎh1vù4Ò5í—ö§§ê‚ö]0¢Ÿ¢üö3ª¡}÷…­þ µð“ Xx´Þ:åþUÉâ£Ç$®ÕMÁ\ðr©¡¿Pa¬Q ¿ƒW+'!ÒKÐóÉ¡{ I(ÀDy³yKlëÆÓ€\¯‹ÎÓ#^±=4ö¸ï¤ÚÇB-±×è/Õ„¨”GŸÛu°7£|)hÞÅç±ÚSùí‹Á壤0%²×ߺ`,ÅMÙhi°vëYännä-6½üX" nš1Õ,ãä*ÝÒÊx+úŽþE»ø6ÍN©€Â1;ÈqØÑãôv«ß#.Е7©<ŠMÞ6fià"Âê$Y¨WÖô™mbˆŒ³0%âýD—6Ú£‹£óΜY\¶•›r€w W%X.ბüµìñKÒÍ`¸tŽÀÆh¾C!SLšÒÚf,Ó¸%Ù¤ Z Žùûee©&ý 4î(Ëq‰ëÛ©£¶ÍÝ=“hÜúzª)^|󊜱©¹»)žÊù…$‹Óû߈*$AÝ5; P­—¾þÃ*QfÓh¿õ¨ì©þ=v؈Eäl»™$þÇ㣳{Ž ‰5YÔ8ÈE9ùÞX:®³Es¦Çmô€ÈÈ,ÉÊící‚ œ®o5(zƒõ‰e½tŽÅžÃB#F½or —Ív ¢Ë`Ø+5…q}ÒÎèjv>µvS ÆÙáw zÊxæ§äu…O ¼Î†£´3“¸(–ë猢oÉڲ͌!52)}w’0wl{ åg|(Ñó¼-è–'h’—ì¦}à’™ºtpm-N´Õ²ï&ò:soÌh­7n¬‹=ÞÕK»4Þäßþ™‚µ%Av &Ü(3ˆªŠ@¬Ž’sgd-y{¼®²ÕÒŒýÜ¿y^s…ºÏmÕÑö]!§PþŒ<Îï6jeÉY(ê;î`û2}¼D©Ù^#75AÀ jÿ¡œeТ™aTÚ0KP· 2°®Ÿ ‘ GÛg?µ8TžÓ½ÂßàkÇ€n^7ÐëHdWú½ÖþÂòÙ¹c¼ŽjáÅãËøŸ™=~|Þ‘Aä¿›4±_œ.TCTã[ðQLÜÉ[‚8Õ®X0U´€2 £…L5‹û]2~öb“`bV\ü©^UÂÇñ»Ÿ£¼a¶w—þ@NŒGŠ5d1eÙYáT| ue9º·ýHwV‘ö’˜#]ÞÑ_#EkÜNÛ*,1ÒyõzIª>ØÌÆ”˜è˜ýzªµx Íož®[×ÈÓ9œë¾­o¯H}–ĘƒOé®uÔåS·’06„¨Ï¿€£ì•¬B—UHqsŽ@ÓXfWqÑbÞ¡+Œ¥`‹ƒPMìZ˜å̦b6«1ÃÅCŒ\æ_96Ñ+æn>|æ`‡®_Kž.³:n7BÔFxÕwSΓ“±½øüÌL> )×±‚Ïq>:ì>ZI‹,Åω®÷¤ôóYÔhÀ‘’Ì'«j«±h5[ðc>ÌQu):o§R‘  žÃÖyç—_y G$*þ<Àxn¡Õçµ?íþ(?Jbç ÕuWÇ×8ÐBjƒ™úi¨ÿº¤¥Ž#XÈ*V£wÝ‘T>:Ø:×ÅèfH¯Ö׆õrU‚Þ•àc(J E5kë>k½Ÿ2ÈôææÖ'·ÔÙ—[\ÿ²µ­ésq=:òÃMÍA0‹MzD1d˽M ùF-Ü—öÎxò[ 2ü a] P•4d÷»Løë‹`jäqLgžtFUc¹|Ÿ“Ãºè ´¦Ô¢—bdrô8ée:¡gÔÈAó{Êç2?7ÓwhöK{#èF…_+ù]ªT/¾9²âTöòX`ÄNî€ j¬ÉËu.Ø·uŽ$Ue»íL"Û–2‚»òáà w}µˆCL;Y…6L;ÄôZER,H'‡Ç1°’ ‰¥Üîû¨²KË3£>Rw}y‰à^t}l­¶(!­½ˆ=ö´Ó¼;™Á"£hE«=úw)–W €§ü;dÌCV³mpöÄ,Uá3ý2{¸:zDtØS”ÐŒ£Lʲ^6V¯Ü»£B'N’[ÑrÙ¸uýd·†M”»ÚEÆî’ùiâ'ª²R£ 5ð¸Ê ìBžäyÇ)RÒ$bDu¯®è¶¢,ÍN¶9ãs¬ÅH×Ù žzÌ’>aœa m'oÔ)ÚD;A¾),ñÁ _ÔúÆ©úÖFqSTÛ¢&¦A˜R»Tbä:ìUŠ94Wûcp ( Lpûšš’‹ÅêØ’:X·pvÿ] VÁ ëh2ñ†ÆˆXûÙ‚;âqÓã&†Óñ(ޏG9®ßƒYx@_|©*?-æK{³ã»4àU‚áo¦H¨0ìúÛnŸIé—2žE00+ô¼ˆ\2GÓÐO±QbЦocN»Ô‹ƒT·Ðûµ³Í3ßÕ×u¾éŸžå¼~üýc…»8ó;ìøíÚæB š7#„¢MS…–YIo^¼“s£e@Q°þÌr%ŽYn5@Ež†öé bDßJjE¼êîeGÁ¬ ¤Ö§P9‹ãG×½ëŒe™V b^êÇ$¯5VëÓ•Nï²Z0iÒýòlþ$!@ɶû¢R•2†|LÂÕ”Qâ»CSç»Ëž²¯âÜœ˜Jٚˠd­S•æ+ˆ´óiäŽK/7"g$Í©ˆB'ýtòÖ³2CQ|f|t=7!ÍBîêà65òL…ÎLçÈÓ†w]ᆘ ˆ9ÛïÅ »>ó iI&_·]¬*hÉõ¡ø]1åߎ03Q0†uªÚAk^ÕÔUºóÚ£ðb¶(­• ‘jîD ×`½êû‘øŠêºæ>B°l®‘J=¡‡GnGFúìQ•ƒ a›æ Õ‚11#͈xÆTv¼Ë¼û9Ö~­·E‹Rm°5Ô“lN…©‹ŸîaZ²Åmw¯:@Q7Fk³lŸÔ'LïåŒ.fwL«ˆ_®sÊ¢g Rz›ÁÜÊ!Ÿ™¡ÈöÔ©Ð~¬ (’*”=.ƒ†ö,)‚é×™y+¡ñ0nMR…õÛ9zk7?”—^F‘UÜ­'¡ú&Î TSq;%¥¡“?Z„‚ßzfÏ(Fé±-I­8iØ ç`º®‹'ntx &qö弑V{goñÎÜã’¼âZb¿|ŒnÃê}ßêî€Â…V]¥dìuß(ôCÏdëûÂFϱTèkƒ0YPIOÎI{Ñ™O/Ÿv`ÄãÎÔ°–3i¡Sx>â»Gޒᯎ(놕Ï}›:hðJñLZÝv˜Ïj«”±Ñm7]°ÝY4˜Û‘ë@¿•yíÁÙœ"~Oª`ñ‹*V÷§nÙàÈ®ά~dAá ׯ W§õvR»4´`q’°ñˆâ^³–Îa _74Ä 'Ã.àb—äÛ×ïÝ÷ˆ–ë\8˜£¹³0E½½Ô©‰*í-ÃÅò·ïFE·7M-A$ãaæVúj¢GTt&Œ!µS™Ûeo7tÇ™±½¿d}Ø”NãL/æf$RÞÆnc¡P¤rž·•€¾×ÊM\ãºÙC$-WÕ½`H=%‡!Ôêã>Úß«YSìG‡-Sgl»ôÅ=;3¹J{Cl_(X-dÈ~é,%iMuœË-øæ‹•qŽ$¦¨SÂ¥oX^šÕkÛ1g\!v»¥•Ü›ªŠI†þÌÅË)8‹ù<Ö¿´öÌ;õgãdߘêðiBÅwRyŸ‰¿Æ‹Q%“­©jé¼öˆq¯áAO9˜*ph¨ æÞ?L;8eèÖŽ¬ü"¿i©* 4j‘Sµ´$1>ÝÏÁË[bÊœ;›Žð-NK:bè¯ÆôÇq,+¬v“¨s㸛ùyE ÷ºX팢Údl'&» ûëxy’ÔagØùJ]ÑTsMÚì˜Ù`nbzw÷Y^ï MmüŽ`€\¬cá[PµŒ$tr7"ò+'“%§Š„^™¿ÖäòDZêãBUuâí•Ї-ûÔ¤rÂâF´ßÄîòl1â>ì›{ìKLéòy±…¼îÒq‡ ø:?î=sñ«o®µÍ¶ ¾ë {|ß¼èpØ—šuº~—ÔO,•øh£r K¡¡†£ÓC_#µ/;ÃÔsÖy=g©Ÿ²J›g_hCÅ%ˆh:Ö°•0PðÇIù–wŒû„oYB‰C;"C’÷¶ÅWÉÞåƒö¶ó–fânlšÃ­¿I)*…×µ0´pBÈR§ó÷NŒ S¶âýÝòáåM/^Õ˾fÎOWnâC#C·±Ë^•Wv²Ð9æWW¿úÊZE¹~æZ5i·ÖP­®ÔH2D.ÝKúª ÚŸEãbîhƒäµûE^‡\ñO¥0£§*¬0½*¦¶èæ_è äƒ AqóøêTx8ÓÙî(Z2/CÑl*2¾dèX¾Ë2˜«Pº3‹2„íÄ 5àœ€â„ü×ìuÍ¿ûÑ#lE$;YÚ_M}³6hâÀioÒ&Ž ¥} š$šCŸ2– næ%£ª Ý•pN¬W›´Ð”ǵ¶ Ä®*£zÎíØ^Y{ÿ=hj|Ï·?€lÜôûã•Ô÷êC.‡ Ÿ”â¬ÒS0.×ù•ž“=íFvyq›Ý3˜"Áï}xó>ÆŠ­XHµ¯Í“*Û(¿h>…ÙÿY°¢{¸sËzø¤¨q(~œ+šáâÚoÝÛ›½â ñ&§‡É¾êÛuH2Šmqécz'†.ùÜLR¿Dº­Þ¶2iå Ñ/Ýj¢7â/-j§–¿d÷¶LîpÒMÔ£¿¸™x9«r1l){ÍðÄÿJº®d^“Æž-I Kë¹Õû^ÈòV2C^î¸c¸Ñ´ €W¢¤uŒêJæ¸@®ÂÞyÒ¾¶‘LéäËÈïS:Ö¨A‰ËVï«ÿrëiŸ€0ë>õ±"Léb;©Ïì˜am&¬.aâaQİBÒj‹•ñE¨]s›C#¦?~‚d9L4.Š¥Nt/ÝK#)ºW{€æye//€×ic»b$è'¿ ÏO¥Ìdáž2û§Ö -˜¬¨1Ä$²×8Wæò$ý|LOªï¹v¹1/!‘™ üÌÏ¥ÝcS3}ͳ/éÒÏæ0Kíglî<ž~æÍY,`Ýía Ò¿Ð;Þd »’b†ï(Ò  tr ô@÷²G~÷hß é¸n뜓¯r'·˜3”Ð=÷ýëÚ­Êozû˜;5<}ø€ö´[SJZë•Y›3§±Ã{ru,X .-» 6je²°Ëý"t’ù¦ô!Ù“4=÷½ƒž! éû²"\ÇÞÓ&±ÕIƉÀùPZµ'®½"É!¬Å&bFR6,£±ÔGìö»l³ Ã8¥±}Ø%ƒI§¾5’ ÚUN_Ò“ÅW‡ Ûl‡ßÒAH*‚Ò=›!ºÚu!‰Óh‡w³ ÚÀ­¼ËL€IÔ{̶L’†wyQä²ßÈ[7ﮢ¹:ªPñ°¾ p«†ß4 ÚRfƒ<é îõ­k£PW®Y¶³9?Óò{©A‰È–gB-úeJ(ijù ‚T;¸î$´Òs‹é¤Ã~ ª¼/éFÕÒ'Ü¿t®éI 7Åó~b—Ç¥­ÄžâÆB°Ak…,a'n¤ö köNå Yë:U~XK%¤I2iÖ€¬U6ó²ã Ò¼Õœ#(~-Ãjn“2bm:æ ò‘$ºÓ3ËO‘&õÄÞ‰ä·?žœNËWã7•÷Û—/m‰~Á2—<­9ù°Yß¾«Éeä.ºy¿Sg&¼'!‰8ÖŸ{ÙUÓQ_}kÖâÄÄœ][¼„auˆ $Ó7×Ë ¤¤>|<ÈUéÀ€BU™×ï¾NæÖ€Ê%±¶“)lû'efÔZhfh×²× $ìØão·½‰¿bÎæGVê.\íÅÉ/å+tµa©Ïit23Q³XóôEšçå‰è¾˜e"_6ÞÔn½\ë-›Söí¨À´K ÖÙ¬­Ï™hLO.•ëÎo"ôÞÉZH{Ô}w³™÷†òÕ†Ž|«@ ÑÇøžÊ…=Á}å[PSаžŒŒû%Á^'ò¥‚‘êf]ËÈíhôüõ¨Uq„./ÎÚQ:åÄûç³ï§¢­r>sgX¦V¹t?Êòš?‰­–ÃàÑèñ Œ|Ú›üJ ZËÖçÇåŒDópßWn$XÁ~t“Nß§_Ǹs°á¹¤õN(Y6Nú³¼w_óF?«æ ¡mwÕ•xrêô¸WS}!bos%ðyêrxÒµÑ]ÿùÿÙº)á endstream endobj 606 0 obj << /Producer (pdfTeX-1.40.20) /Author()/Title(DRIMSeq: Dirichlet-multinomial framework for differential transcript usage and transcript usage QTL analyses in RNA-seq)/Subject()/Creator(LaTeX with hyperref)/Keywords() /CreationDate (D:20211026172144-04'00') /ModDate (D:20211026172144-04'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) kpathsea version 6.3.1) >> endobj 573 0 obj << /Type /ObjStm /N 72 /First 624 /Length 2968 /Filter /FlateDecode >> stream xÚ­ZiSÜ8þ>¿BÛbeÝVÕÖVq$„k+ÌŒ¿Ædìɱ¿~ùy|$°TQÈÖÑýôÓ­VË  'QF)]k ¸Âƒ%ŒKATÈSŒãAf4愊ðÀH<Â%ÃÉ 7¡¤$‚ép¢”"Bs3œˆ0@¶DX!ÑÈ ôA$sâI¤¬ƒ8s°@jî4c*&,ÐDZ‚ÐáeDq©ÓA€¡˜”rCX‚À ¸€;”u€‰9šj¢ Tsô¨=v«Ð-´&#’Kâ$€†’h%]Zƒ£Ñ¢6j£0ˆy!ãX -Ôƒ5mñ¢41&),a°A†h!´ôð€Â1FŒ„Yó$æsÌS"˜‚Ѭcž¶ \ÂX!„e˜fA€¬°`YY@å­`H(a²0B3;Q`14Å,·Üͽ\¢¬áÜM‰`ZYK¬rFƒdÂ- Y’{ð„pƒŽxÎÕD΃«4h…Wx0ùóÏ }ûó.&ôyºÈ÷ãlºLîòt9)ÞO¢[Œœ\œ¼}º/£óh‘§‹tûõå<ùºŠ1m]gD–ówwÓäïmàßæ MÃPËÃϺ“MãEN`Ù„îEw/âäú¯¯N§ÛæœOèaÍ“éÎâz“m†áó<¾}†ñø¡Z¦¤”›hyçä Ý¡»tîÓçô€¾ Gô˜žÐSzFÏé[zAßÓˆFY/“ì ½¤S:Mçé¿oo#:£1-dÒøë*šÓøÇtÝÒ+z•|‹éUºZÒkzCo~ÞÝÄ šÐÿÓ/tNoé‚.’EL«ÛËx™%× šÒwô.ZÆ‹y|•—OËBø´§3º¤Íâo”%?hNó›eÓü{JWtµ˜AÒ4]ÆôýNПôúO¼L·JfŸ' DØ€œMþúë·üöñ݇½‹OŽ×X°}_¯æÑ²ßgA¼]lv)DLɵ۴•¾ÛŠ×Æm̽ùn j§™pí3)eŸÏžU^;¤/é«Êw¯á½7ÿÞÁƒèGúÉùq–ÄË8K2]/#x(ºµY´˜Á³—ËhÌO%óîñKœ7Ýx.ã`1‹²›*î'¡Å‹ˆù}ƒ"š®ò˜¦ ðñ(qŒÖÑò•bey_Wi^TÆÐmR¢_GS6w°Û15Hò>tðêààÍ‹*Â_ÄÞ¶`ÒRÁF~ë (4ƒToéÛ(¿i[¦ïcÙ˽‹‡ë-²›Îg£©M" osüb¡ËµLš¾VAR'‡"5t˜ã÷aîÛOg;OO’ÛËUöŽFbÆ•• Î ±Òze;ù½²À½®Ëf†BFúEàmÚö{ɪóþ:ãö­¬Þ&qèÿÞKé½ríÉó÷Ï>=ó)uévˆR ~BWË!Y%–qè?¶›âòn¾Êª$UYYSžÍma¥3¢4§ ¥`¨8 sKâ RŠHE­Nçq–•% î;4Ê»åî#ãõ±Ì/†phÕC¯%Öøy¥ð›_ç¤^6ñÜ{Ó$É“ù,þü[Žà¬ª¹p,Ê­¤—«WBÏD˜¦@ZW}^aÔçäÒÇwȺüÂ=µöŠhŠ5ÜDTÝŽ:çAîXWÄpŒòªb¹¬*h<†ë²šp)ª’z]¶þž+%o•eŸ»)ifu™¯®é{7Êb7BèéѧwGïžî²`²‘!qU/tú ¼Á›Æ¦W;ûTª!¯ªð1 ì›ÈL‡³A`ì1€ ~µÙtf˜ä~‚÷S‡Þ¦TØitg¸:¤+w'žà}é h÷¿Xý*™¡Z°ÅJÂJ™„éª «~[@xPl…ÏQÁYÊ`¶lyõ.xÙêºÕ×a*e &"(q ^½—™mø`¢L¨ˆMÙêJ‡.¹eº "´Ö!ƒR–¬8r_‹¶L/DêR·,ý3¦C ê°%'Їe+Ì/e‰z±ûãQ¦"¼2^UÀ«q÷w£®Ð׫|Ž>«ÂœTG´‹r÷ç¤â¥Ôˆ[o½2A9Žb¼Ý!¶JÊqÕ¡{ºŒ¿Ý®»Š¥õ„RÝLë¥uUS¬Üø>P®TÍJ>²²tÿÈIöˆaµ‹©>™VbzÐÔbäˆî‹é¡Ã4Lš WL±rãn±R7Dê "ß~•ÜÀ)\\Çaébµ!½![ó^é.ÝïnøUáHlp_ŽõÏÎsR·Pš¶.Õ8AµÀ}xJÕð®Ú¼sß}²g¥lx—zd¥ôÌS¼GLC°ä#b|–zÑ4l‹pXŒð£YöD³hˆrDŒͲ'šEêègµX)z¢™7¬r=âÉ«þ%¬ÁVje/½¡ªažó^U…ô¾ á Ùl,´™ÏvëŽÞP¢Ô>JÛÖÅ09¦Ëw ïq k\ÂÆRµïÖãŸu²â{‡õÄ|C<ëRfIûþ‹sîÉ~:Ý>Ï£e¾å¾ëgÚ“i’Çì.£Ÿ<`ýÖ´úÓôK†æF”7²-¢›xÉlbÈøCGÑÝ]4p&.°Rlak2oøxº7NÇÒ°*^èQr›ä({V|Þ4ª˜r’~O¦_¢ÊãÛð.ZÌân×1†.ëÁ'w(þ€eUíP½[8¨¥ßƒ)\·z¸ëéï"i¦wP— ‡›–d‰žù=j i@ø=,Dk¬²e¼"T°‰°ÑÚÌfÝr˜sUyÕ›â3ÇÁ“Ð>RÎ]ñ{ [ÞËn­gõãâ GXßtzdÐR¡]ÄùdpÐ#E è‘UuWõ@¹Ô¶˜ÓÚÌ곘öé G†>.zTàc G‰Àï®Ç'Uº-bza5n” ”Û´¾Ù`†—5lÕa\‡OxáÜÇh]G5#‹§î;ôÿÜžaêþ¼°j̉-©.ÂL»Ç‘ÊÚ]ŽÕî*¬lwÁNÕq¥§Ù›8ÔÔ–­.en9=ý.%˜ž~çQÕé×NŽ=ý£Ív³Õ™Ý5ã-`מ)íA·EÕРۭvhPº]54è¶¥tþaûp÷.þ…ɺ\jzMÖ¥ÉF Âdc‡ar(†arw§öBë]ÜXU^JUy',þ¥¯lyÕŠª•U«ÆÐÍQ ×ÕbSµÕ ·: u ïî_c×UšÓÃ6*i?ΰ@—'_ûƽåÑ<½ž”÷ùõ§€ú&î•BE€è ©ý®ããtÓ‹,^_Û_ßÅ‹±MQÿ/œ¿ö' endstream endobj 607 0 obj << /Type /XRef /Index [0 608] /Size 608 /W [1 3 1] /Root 605 0 R /Info 606 0 R /ID [ ] /Length 1530 /Filter /FlateDecode >> stream xÚ%–YlVE†ç;ÿR eiÙ¡P¶–}kiéJ[ø ”ÚB)k7ªˆ( (c‰QcЈ¨qQ¯ bÂ…ÑDƒdÐ8¨Á˜HŒ¼0†pcÔy^nž¼ß;sæügÎûÍœsþKœKœ¹eûª'qIÃJ”lëB¥@ôáU¢2 úñV òÀ00€WFDø4^9e>(ÀËà-§ Fáeñ–QŽcðÆâ-¥,Ex“ñ–PŽãðVâ-¦&à­Â[D9LŠƒ·r2˜‚7oåTPŒ×†7Ÿr˜Ž×Ž7²ÌÀÛˆ7—r&˜…·¯Œr6˜½0¯”R(Ã7‡R ÌÛ„§ËtóxzÞY”úá‹ðªñtK=´vCÛ¤ý[aÎÖûÕ—3y(º»›T ôøE`²sîRÕƒR+£zHª:ª#R5Q="UÕ£RuQ=&UÕ1©†¨ŽK­Šê„TcTOJ5Eõ”TsTÏH­ŽêY©5Q”j‰êy©µQ½ µ.ª¥ÖGõ’TkT¯HmˆêU©¶¨^—jÊIm Ò\ò‘¶i¯”ä@Ø ¶€n°tšË;£+¶rÅHF0Œå­­`Wì»Àn0DDYÊ«óÁsã;µ|/—µ1JKz5ØssúuEŠ{ŒgJ»Yév:l4×ñžFÕtÃÌÕ|¢’Fôj’|s¹; èuOA˜ëš"FôjDÚÏ«ý Íõ\Ò¨:Šòºl¼¹Á L2wìO):ÅO5wðM•Å ÂÜgUrPxN_ ¦›;Ú«N_bîø^•3Éö³Ì=·P áéO÷xzËÓ3~ž¹S³5e¾¹·Ê¤èdO§øEæÎÝ#&ñ4‰§IýCe-hõæüyy  ¬DÅ7™»|@£kØÓøø×Ûâñz³Kññ-殾¥’Hùµæ~¼ rXZ)ñmæn|©Ñvs~!Ebý&@l}'è2÷÷wÎ,ýpDq;È)*ÝæþPI®üV³ÌßZ¥lDÙïdÒ“IO&}/è3+¼¨+úͦ}-5ˆ¨ß†X>Þwñugü?˜5ÿ¥[Ž£@!H™Uᝥ m¶æ Ê È‚<0 #@>(0k½ªÉ=WdÖݧ’ÞÊé0Ÿ`Ö{]ÞD0L6üZÞÞ‡sÞÅfC?k`˜ JÌî¾%O‡9'un–Ù¾òf›*–ZJÍî+Q¹ ”™=ð‚ʹ€Ó;7ßìX—<îÜBÀq[ –€¥f'Zã†ú!âý3š\ ÊÍN^QY*ÌNoT¹T‚*°T›½Ö¨Ñµ`à¸ÉqÜä6:³3_iÊ6B]ovv®¼° 4‚&Ð Vƒ5 ZÌ>ùFç‹í[@‡Ù¥-ÕevÍLJùm^ CÁ{òö€n³+÷ª1‰ß7¨ìÛÀv°ì4ûñmî2ûý]©Ý€“0×úÁ€ÙÍúAÄ'Ÿ ¼ ™ÝÎ×i ñ·Œšî,ýíçò $ ÈlÈXRt8Î+Íi ß¡À’âT©0Ò’²Uê@ŠÃKê’GÆCÐy?èTž`IÓµ¸r÷Í› ¦ZÒÖ¯’„PlÉÖK*y3ˆ†@ÃLKv§âû/;KUæi±s,Ùû¼J}ñè²RKîo•§Ï âô11è‚$}8Ä@ÃR°ÌR ŽéÚå–ªzBªT¢ˆ^¨²Ô­Ç5Jh¡ õ ÖÒn˜êA )¤@B è –ÎûL“Il aa-Ï¡WÖ‰â]`3 k¡l$'œ@rÉ ;¹Œs#ì„&ôZºHÍú,]NªßÒ;Ú¤,}ôe©AKŸ~Zj¥?xSjÈÒ7Æ9u–ýõœ³Œ[¢2ž¤û>”J,sø©”en‘J[¶ò¢TƲ¯•ÊZöÂWRy Ìú|«µ Ôƒ ×FКÁj ¿˜hÚºu–ýåvü¥}äþCR¶s endstream endobj startxref 455095 %%EOF DRIMSeq/man/0000755000175200017520000000000014136051631013553 5ustar00biocbuildbiocbuildDRIMSeq/man/MatrixList-class.Rd0000644000175200017520000000535314136051631017253 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_MatrixList.R \docType{class} \name{MatrixList-class} \alias{MatrixList-class} \alias{names,MatrixList-method} \alias{names<-,MatrixList-method} \alias{rownames,MatrixList-method} \alias{rownames<-,MatrixList-method} \alias{colnames,MatrixList-method} \alias{colnames<-,MatrixList-method} \alias{length,MatrixList-method} \alias{elementNROWS,MatrixList-method} \alias{dim,MatrixList-method} \alias{nrow,MatrixList-method} \alias{ncol,MatrixList-method} \alias{[[,MatrixList-method} \alias{$,MatrixList-method} \alias{[,MatrixList,ANY-method} \alias{[,MatrixList-method} \title{MatrixList object} \usage{ \S4method{names}{MatrixList}(x) \S4method{names}{MatrixList}(x) <- value \S4method{rownames}{MatrixList}(x) \S4method{rownames}{MatrixList}(x) <- value \S4method{colnames}{MatrixList}(x) \S4method{colnames}{MatrixList}(x) <- value \S4method{length}{MatrixList}(x) \S4method{elementNROWS}{MatrixList}(x) \S4method{dim}{MatrixList}(x) \S4method{nrow}{MatrixList}(x) \S4method{ncol}{MatrixList}(x) \S4method{[[}{MatrixList}(x, i, j) \S4method{$}{MatrixList}(x, name) \S4method{[}{MatrixList,ANY}(x, i, j) } \arguments{ \item{x}{MatrixList object.} \item{value, i, j, name}{Parameters used for subsetting and assigning new attributes to x.} } \value{ \itemize{ \item \code{names(x)}, \code{names(x) <- value}: Get or set names of matrices. \item \code{rownames(x)}, \code{rownames(x) <- value}, \code{colnames(x)}, \code{colnames(x) <- value}: Get or set row names or column names of unlistData slot. \item \code{length(x)}: Get the number of matrices in a list. \item \code{elementNROWS(x)}: Get the number of rows of each of the matrices. \item \code{dim(x)}, \code{nrow(x)}, \code{ncol(x)}: Get the dimensions, number of rows or number of columns of unlistData slot. \item \code{x[[i]]}, \code{x[[i, j]]}: Get the matrix i, and optionally, get only columns j of this matrix. \item \code{x$name}: Shortcut for \code{x[["name"]]}. \item \code{x[i, j]}: Get a subset of MatrixList that consists of matrices i with columns j. } } \description{ A MatrixList object is a container for a list of matrices which have the same number of columns but can have varying number of rows. Additionally, one can store an extra information corresponding to each of the matrices in \code{metadata} matrix. } \section{Slots}{ \describe{ \item{\code{unlistData}}{Matrix which is a row binding of all the matrices in a list.} \item{\code{partitioning}}{List of indexes which defines the row partitioning of unlistData matrix into the original matrices.} \item{\code{metadata}}{Matrix of additional information where each row corresponds to one of the matrices in a list.} }} \author{ Malgorzata Nowicka } DRIMSeq/man/dmDSdata-class.Rd0000644000175200017520000000607214136051631016633 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSdata.R \docType{class} \name{dmDSdata-class} \alias{dmDSdata-class} \alias{counts,dmDSdata-method} \alias{samples} \alias{samples,dmDSdata-method} \alias{names,dmDSdata-method} \alias{length,dmDSdata-method} \alias{[,dmDSdata,ANY-method} \alias{[,dmDSdata-method} \title{dmDSdata object} \usage{ \S4method{counts}{dmDSdata}(object) samples(x, ...) \S4method{samples}{dmDSdata}(x) \S4method{names}{dmDSdata}(x) \S4method{length}{dmDSdata}(x) \S4method{[}{dmDSdata,ANY}(x, i, j) } \arguments{ \item{object, x}{dmDSdata object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{i, j}{Parameters used for subsetting.} } \value{ \itemize{ \item \code{counts(object)}: Get a data frame with counts. \item \code{samples(x)}: Get a data frame with the sample information. \item \code{names(x)}: Get the gene names. \item \code{length(x)}: Get the number of genes. \item \code{x[i, j]}: Get a subset of dmDSdata object that consists of counts for genes i and samples j. } } \description{ dmDSdata contains expression, in counts, of genomic features such as exons or transcripts and sample information needed for the differential exon/transcript usage (DEU or DTU) analysis. It can be created with function \code{\link{dmDSdata}}. } \section{Slots}{ \describe{ \item{\code{counts}}{\code{\linkS4class{MatrixList}} of expression, in counts, of genomic features. Rows correspond to genomic features, such as exons or transcripts. Columns correspond to samples. MatrixList is partitioned in a way that each of the matrices in a list contains counts for a single gene.} \item{\code{samples}}{Data frame with information about samples. It must contain \code{sample_id} variable with unique sample names and other covariates that desribe samples and are needed for the differential analysis.} }} \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] } } \seealso{ \code{\linkS4class{dmDSprecision}}, \code{\linkS4class{dmDSfit}}, \code{\linkS4class{dmDStest}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmDSdata.Rd0000644000175200017520000000371714136051631015533 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSdata.R \name{dmDSdata} \alias{dmDSdata} \title{Create dmDSdata object} \usage{ dmDSdata(counts, samples) } \arguments{ \item{counts}{Data frame with counts. Rows correspond to features, for example, transcripts or exons. This data frame has to contain a \code{gene_id} column with gene IDs, \code{feature_id} column with feature IDs and columns with counts for each sample. Column names corresponding to sample IDs must be the same as in the \code{sample} data frame.} \item{samples}{Data frame where each row corresponds to one sample. Columns have to contain unique sample IDs in \code{sample_id} variable and a grouping variable \code{group}.} } \value{ Returns a \linkS4class{dmDSdata} object. } \description{ Constructor function for a \code{\linkS4class{dmDSdata}} object. } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] } } \seealso{ \code{\link{plotData}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmDSfit-class.Rd0000644000175200017520000001062714136051631016505 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSfit.R \docType{class} \name{dmDSfit-class} \alias{dmDSfit-class} \alias{design,dmDSfit-method} \alias{proportions} \alias{proportions,dmDSfit-method} \alias{coefficients,dmDSfit-method} \title{dmDSfit object} \usage{ \S4method{design}{dmDSfit}(object, type = "full_model") proportions(x, ...) \S4method{proportions}{dmDSfit}(x) \S4method{coefficients}{dmDSfit}(object, level = "gene") } \arguments{ \item{type}{Character indicating which design matrix should be returned. Possible values \code{"precision"}, \code{"full_model"} or \code{"null_model"}.} \item{x, object}{dmDSprecision object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{level}{Character specifying which type of results to return. Possible values \code{"gene"} or \code{"feature"}.} } \value{ \itemize{ \item \code{design(object)}: Get a matrix with the full design. \item \code{proportions(x)}: Get a data frame with estimated feature ratios for each sample. \item \code{coefficients(x)}: Get the DM or BB regression coefficients. } } \description{ dmDSfit extends the \code{\linkS4class{dmDSprecision}} class by adding the full model Dirichlet-multinomial (DM) and beta-binomial (BB) likelihoods, regression coefficients and feature proportion estimates. Result of calling the \code{\link{dmFit}} function. } \section{Slots}{ \describe{ \item{\code{design_fit_full}}{Numeric matrix of the design used to fit the full model.} \item{\code{fit_full}}{\code{\linkS4class{MatrixList}} containing estimated feature ratios in each sample based on the full Dirichlet-multinomial (DM) model.} \item{\code{lik_full}}{Numeric vector of the per gene DM full model likelihoods.} \item{\code{coef_full}}{\code{\linkS4class{MatrixList}} with the regression coefficients based on the DM model.} \item{\code{fit_full_bb}}{\code{\linkS4class{MatrixList}} containing estimated feature ratios in each sample based on the full beta-binomial (BB) model.} \item{\code{lik_full_bb}}{Numeric vector of the per gene BB full model likelihoods.} \item{\code{coef_full_bb}}{\code{\linkS4class{MatrixList}} with the regression coefficients based on the BB model.} }} \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) ## Fit full model proportions d <- dmFit(d, design = design_full) ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") } } \seealso{ \code{\linkS4class{dmDSdata}}, \code{\linkS4class{dmDSprecision}}, \code{\linkS4class{dmDStest}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmDSprecision-class.Rd0000644000175200017520000001145314136051631017714 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSprecision.R \docType{class} \name{dmDSprecision-class} \alias{dmDSprecision-class} \alias{design,dmDSprecision-method} \alias{mean_expression} \alias{mean_expression,dmDSprecision-method} \alias{common_precision} \alias{common_precision,dmDSprecision-method} \alias{common_precision<-} \alias{common_precision<-,dmDSprecision-method} \alias{genewise_precision} \alias{genewise_precision,dmDSprecision-method} \alias{genewise_precision<-} \alias{genewise_precision<-,dmDSprecision-method} \title{dmDSprecision object} \usage{ \S4method{design}{dmDSprecision}(object, type = "precision") mean_expression(x, ...) \S4method{mean_expression}{dmDSprecision}(x) common_precision(x, ...) \S4method{common_precision}{dmDSprecision}(x) common_precision(x) <- value \S4method{common_precision}{dmDSprecision}(x) <- value genewise_precision(x, ...) \S4method{genewise_precision}{dmDSprecision}(x) genewise_precision(x) <- value \S4method{genewise_precision}{dmDSprecision}(x) <- value } \arguments{ \item{type}{Character indicating which design matrix should be returned. Possible values \code{"precision"}, \code{"full_model"} or \code{"null_model"}.} \item{x, object}{dmDSprecision object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{value}{Values that replace current attributes.} } \value{ \itemize{ \item \code{mean_expression(x)}: Get a data frame with mean gene expression. \item \code{common_precision(x), common_precision(x) <- value}: Get or set common precision. \code{value} must be numeric of length 1. \item \code{genewise_precision(x), genewise_precision(x) <- value}: Get a data frame with gene-wise precision or set new gene-wise precision. \code{value} must be a data frame with "gene_id" and "genewise_precision" columns. } } \description{ dmDSprecision extends the \code{\linkS4class{dmDSdata}} by adding the precision estimates of the Dirichlet-multinomial distribution used to model the feature (e.g., transcript, exon, exonic bin) counts for each gene in the differential usage analysis. Result of calling the \code{\link{dmPrecision}} function. } \details{ Normally, in the differential analysis based on RNA-seq data, such as, for example, differential gene expression, dispersion (of negative-binomial model) is estimated. Here, we estimate precision of the Dirichlet-multinomial model as it is more convenient computationally. To obtain dispersion estimates, one can use a formula: dispersion = 1 / (1 + precision). } \section{Slots}{ \describe{ \item{\code{mean_expression}}{Numeric vector of mean gene expression.} \item{\code{common_precision}}{Numeric value of estimated common precision.} \item{\code{genewise_precision}}{Numeric vector of estimated gene-wise precisions.} \item{\code{design_precision}}{Numeric matrix of the design used to estimate precision.} }} \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) } } \seealso{ \code{\linkS4class{dmDSdata}}, \code{\linkS4class{dmDSfit}}, \code{\linkS4class{dmDStest}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmDStest-class.Rd0000644000175200017520000001155414136051631016702 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDStest.R \docType{class} \name{dmDStest-class} \alias{dmDStest-class} \alias{design,dmDStest-method} \alias{results} \alias{results,dmDStest-method} \title{dmDStest object} \usage{ \S4method{design}{dmDStest}(object, type = "null_model") results(x, ...) \S4method{results}{dmDStest}(x, level = "gene") } \arguments{ \item{type}{Character indicating which design matrix should be returned. Possible values \code{"precision"}, \code{"full_model"} or \code{"null_model"}.} \item{x, object}{dmDStest object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{level}{Character specifying which type of results to return. Possible values \code{"gene"} or \code{"feature"}.} } \value{ \itemize{ \item \code{results(x)}: get a data frame with gene-level or feature-level results.} } \description{ dmDStest extends the \code{\linkS4class{dmDSfit}} class by adding the null model Dirichlet-multinomial (DM) and beta-binomial (BB) likelihoods and the gene-level and feature-level results of testing for differential exon/transcript usage. Result of calling the \code{\link{dmTest}} function. } \section{Slots}{ \describe{ \item{\code{design_fit_null}}{Numeric matrix of the design used to fit the null model.} \item{\code{lik_null}}{Numeric vector of the per gene DM null model likelihoods.} \item{\code{lik_null_bb}}{Numeric vector of the per gene BB null model likelihoods.} \item{\code{results_gene}}{Data frame with the gene-level results including: \code{gene_id} - gene IDs, \code{lr} - likelihood ratio statistics based on the DM model, \code{df} - degrees of freedom, \code{pvalue} - p-values and \code{adj_pvalue} - Benjamini & Hochberg adjusted p-values.} \item{\code{results_feature}}{Data frame with the feature-level results including: \code{gene_id} - gene IDs, \code{feature_id} - feature IDs, \code{lr} - likelihood ratio statistics based on the BB model, \code{df} - degrees of freedom, \code{pvalue} - p-values and \code{adj_pvalue} - Benjamini & Hochberg adjusted p-values.} }} \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) ## Fit full model proportions d <- dmFit(d, design = design_full) ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") ## Fit null model proportions and perform the LR test to detect DTU d <- dmTest(d, coef = "groupKD") ## Plot the gene-level p-values plotPValues(d) ## Get the gene-level results head(results(d)) ## Plot feature proportions for a top DTU gene res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") } \seealso{ \code{\linkS4class{dmDSdata}}, \code{\linkS4class{dmDSprecision}}, \code{\linkS4class{dmDSfit}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmFilter.Rd0000644000175200017520000001571514136051631015621 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSdata.R, R/class_dmSQTLdata.R \docType{methods} \name{dmFilter} \alias{dmFilter} \alias{dmFilter,dmDSdata-method} \alias{dmFilter,dmSQTLdata-method} \title{Filtering} \usage{ dmFilter(x, ...) \S4method{dmFilter}{dmDSdata}(x, min_samps_gene_expr = 0, min_samps_feature_expr = 0, min_samps_feature_prop = 0, min_gene_expr = 0, min_feature_expr = 0, min_feature_prop = 0, run_gene_twice = FALSE) \S4method{dmFilter}{dmSQTLdata}(x, min_samps_gene_expr = 0, min_samps_feature_expr = 0, min_samps_feature_prop = 0, minor_allele_freq = 0.05 * nrow(samples(x)), min_gene_expr = 0, min_feature_expr = 0, min_feature_prop = 0, BPPARAM = BiocParallel::SerialParam()) } \arguments{ \item{x}{\code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{min_samps_gene_expr}{Minimal number of samples where genes should be expressed. See Details.} \item{min_samps_feature_expr}{Minimal number of samples where features should be expressed. See Details.} \item{min_samps_feature_prop}{Minimal number of samples where features should be expressed. See details.} \item{min_gene_expr}{Minimal gene expression.} \item{min_feature_expr}{Minimal feature expression.} \item{min_feature_prop}{Minimal proportion for feature expression. This value should be between 0 and 1.} \item{run_gene_twice}{Whether to re-run the gene-level filter after the feature-level filters.} \item{minor_allele_freq}{Minimal number of samples where each of the genotypes has to be present.} \item{BPPARAM}{Parallelization method used by \code{\link[BiocParallel]{bplapply}}.} } \value{ Returns filtered \code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} object. } \description{ Filtering of genes and features with low expression. Additionally, for the dmSQTLdata object, filtering of genotypes with low frequency. } \details{ Filtering parameters should be adjusted according to the sample size of the experiment data and the number of replicates per condition. \code{min_samps_gene_expr} defines the minimal number of samples where genes are required to be expressed at the minimal level of \code{min_gene_expr} in order to be included in the downstream analysis. Ideally, we would like that genes were expressed at some minimal level in all samples because this would lead to better estimates of feature ratios. Similarly, \code{min_samps_feature_expr} and \code{min_samps_feature_prop} defines the minimal number of samples where features are required to be expressed at the minimal levels of counts \code{min_feature_expr} or proportions \code{min_feature_prop}. In differential transcript/exon usage analysis, we suggest using \code{min_samps_feature_expr} and \code{min_samps_feature_prop} equal to the minimal number of replicates in any of the conditions. For example, in an assay with 3 versus 5 replicates, we would set these parameters to 3, which allows a situation where a feature is expressed in one condition but may not be expressed at all in another one, which is an example of differential transcript/exon usage. By default, all the filtering parameters equal zero which means that features with zero expression in all samples are removed as well as genes with only one non-zero feature. In QTL analysis, usually, we deal with data that has many more replicates than data from a standard differential usage assay. Our example data set consists of 91 samples. Requiring that genes are expressed in all samples may be too stringent, especially since there may be missing values in the data and for some genes you may not observe counts in all 91 samples. Slightly lower threshold ensures that we do not eliminate such genes. For example, if \code{min_samps_gene_expr = 70} and \code{min_gene_expr = 10}, only genes with expression of at least 10 in at least 70 samples are kept. Samples with expression lower than 10 have \code{NA}s assigned and are skipped in the analysis of this gene. \code{minor_allele_freq} indicates the minimal number of samples for the minor allele presence. Usually, it is equal to roughly 5\% of total samples. } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) } # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) \donttest{ geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) # -------------------------------------------------------------------------- # sQTL analysis - simple group comparison # -------------------------------------------------------------------------- ## Filtering d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) plotData(d) } } \seealso{ \code{\link{plotData}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmFit.Rd0000644000175200017520000001523714136051631015115 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSfit.R, R/class_dmSQTLfit.R \docType{methods} \name{dmFit} \alias{dmFit} \alias{dmFit,dmDSprecision-method} \alias{dmFit,dmSQTLprecision-method} \title{Fit the Dirichlet-multinomial and/or the beta-binomial full model regression} \usage{ dmFit(x, ...) \S4method{dmFit}{dmDSprecision}(x, design, one_way = TRUE, bb_model = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, add_uniform = FALSE, BPPARAM = BiocParallel::SerialParam()) \S4method{dmFit}{dmSQTLprecision}(x, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()) } \arguments{ \item{x}{\code{\linkS4class{dmDSprecision}} or \code{\linkS4class{dmSQTLprecision}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{design}{Numeric matrix defining the full model.} \item{one_way}{Logical. Should the shortcut fitting be used when the design corresponds to multiple group comparison. This is a similar approach as in \code{\link{edgeR}}. If \code{TRUE} (the default), then proportions are fitted per group and regression coefficients are recalculated from those fits.} \item{bb_model}{Logical. Whether to perform the feature-level analysis using the beta-binomial model.} \item{prop_mode}{Optimization method used to estimate proportions. Possible value \code{"constrOptim"}.} \item{prop_tol}{The desired accuracy when estimating proportions.} \item{coef_mode}{Optimization method used to estimate regression coefficients. Possible value \code{"optim"}.} \item{coef_tol}{The desired accuracy when estimating regression coefficients.} \item{verbose}{Numeric. Definie the level of progress messages displayed. 0 - no messages, 1 - main messages, 2 - message for every gene fitting.} \item{add_uniform}{Whether to add a small fractional count to zeros, (adding a uniform random variable between 0 and 0.1). This option allows for the fitting of genewise precision and coefficients for genes with two features having all zero for one group, or the last feature having all zero for one group.} \item{BPPARAM}{Parallelization method used by \code{\link[BiocParallel]{bplapply}}.} } \value{ Returns a \code{\linkS4class{dmDSfit}} or \code{\linkS4class{dmSQTLfit}} object. } \description{ Obtain the maximum likelihood estimates of Dirichlet-multinomial (gene-level) and/or beta-binomial (feature-level) regression coefficients, feature proportions in each sample and corresponding likelihoods. In the differential exon/transcript usage analysis, the regression model is defined by a design matrix. In the exon/transcript usage QTL analysis, regression models are defined by genotypes. Currently, beta-binomial model is implemented only in the differential usage analysis. } \details{ In the regression framework here, we adapt the idea from \code{\link[edgeR]{glmFit}} in \code{\link{edgeR}} about using a shortcut algorithm when the design is equivalent to simple group fitting. In such a case, we estimate the DM proportions for each group of samples separately and then recalculate the DM (and/or the BB) regression coefficients corresponding to the design matrix. If the design matrix does not define a simple group fitting, for example, when it contains a column with continuous values, then the regression framework is used to directly estimate the regression coefficients. Arguments that are used for the proportion estimation in each group when the shortcut fitting can be used start with \code{prop_}, and those that are used in the regression framework start with \code{coef_}. In the differential transcript usage analysis, setting \code{one_way = TRUE} allows switching to the shortcut algorithm only if the design is equivalent to simple group fitting. \code{one_way = FALSE} forces usage of the regression framework. In the QTL analysis, currently, genotypes are defined as numeric values 0, 1, and 2. When \code{one_way = TRUE}, simple multiple group fitting is performed. When \code{one_way = FALSE}, a regression framework is used with the design matrix defined by a formula \code{~ group} where group is a continuous (not categorical) variable with values 0, 1, and 2. } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) ## Fit full model proportions d <- dmFit(d, design = design_full) ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") } } \references{ McCarthy, DJ, Chen, Y, Smyth, GK (2012). Differential expression analysis of multifactor RNA-Seq experiments with respect to biological variation. Nucleic Acids Research 40, 4288-4297. } \seealso{ \code{\link{plotProportions}} \code{\link[edgeR]{glmFit}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmPrecision.Rd0000644000175200017520000002234414136051631016323 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSprecision.R, % R/class_dmSQTLprecision.R \docType{methods} \name{dmPrecision} \alias{dmPrecision} \alias{dmPrecision,dmDSdata-method} \alias{dmPrecision,dmSQTLdata-method} \title{Estimate the precision parameter in the Dirichlet-multinomial model} \usage{ dmPrecision(x, ...) \S4method{dmPrecision}{dmDSdata}(x, design, mean_expression = TRUE, common_precision = TRUE, genewise_precision = TRUE, prec_adjust = TRUE, prec_subset = 0.1, prec_interval = c(0, 1000), prec_tol = 10, prec_init = 100, prec_grid_length = 21, prec_grid_range = c(-10, 10), prec_moderation = "trended", prec_prior_df = 0, prec_span = 0.1, one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, add_uniform = FALSE, BPPARAM = BiocParallel::SerialParam()) \S4method{dmPrecision}{dmSQTLdata}(x, mean_expression = TRUE, common_precision = TRUE, genewise_precision = TRUE, prec_adjust = TRUE, prec_subset = 0.1, prec_interval = c(0, 1000), prec_tol = 10, prec_init = 100, prec_grid_length = 21, prec_grid_range = c(-10, 10), prec_moderation = "none", prec_prior_df = 0, prec_span = 0.1, one_way = TRUE, speed = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()) } \arguments{ \item{x}{\code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{design}{Numeric matrix defining the model that should be used when estimating precision. Normally this should be a full model design used also in \code{\link{dmFit}}.} \item{mean_expression}{Logical. Whether to estimate the mean expression of genes.} \item{common_precision}{Logical. Whether to estimate the common precision.} \item{genewise_precision}{Logical. Whether to estimate the gene-wise precision.} \item{prec_adjust}{Logical. Whether to use the Cox-Reid adjusted or non-adjusted profile likelihood.} \item{prec_subset}{Value from 0 to 1 defining the percentage of genes used in common precision estimation. The default is 0.1, which uses 10% of randomly selected genes to speed up the precision estimation process. Use \code{set.seed} function to make the analysis reproducible. See Examples.} \item{prec_interval}{Numeric vector of length 2 defining the interval of possible values for the common precision.} \item{prec_tol}{The desired accuracy when estimating common precision.} \item{prec_init}{Initial precision. If \code{common_precision} is \code{TRUE}, then \code{prec_init} is overwritten by common precision estimate.} \item{prec_grid_length}{Length of the search grid.} \item{prec_grid_range}{Vector giving the limits of grid interval.} \item{prec_moderation}{Precision moderation method. One can choose to shrink the precision estimates toward the common precision (\code{"common"}) or toward the (precision versus mean expression) trend (\code{"trended"})} \item{prec_prior_df}{Degree of moderation (shrinkage) in case when it can not be calculated automaticaly (number of genes on the upper boundary of grid is smaller than 10). By default it is equal to 0.} \item{prec_span}{Value from 0 to 1 defining the percentage of genes used in smoothing sliding window when calculating the precision versus mean expression trend.} \item{one_way}{Logical. Should the shortcut fitting be used when the design corresponds to multiple group comparison. This is a similar approach as in \code{\link{edgeR}}. If \code{TRUE} (the default), then proportions are fitted per group and regression coefficients are recalculated from those fits.} \item{prop_mode}{Optimization method used to estimate proportions. Possible value \code{"constrOptim"}.} \item{prop_tol}{The desired accuracy when estimating proportions.} \item{coef_mode}{Optimization method used to estimate regression coefficients. Possible value \code{"optim"}.} \item{coef_tol}{The desired accuracy when estimating regression coefficients.} \item{verbose}{Numeric. Definie the level of progress messages displayed. 0 - no messages, 1 - main messages, 2 - message for every gene fitting.} \item{add_uniform}{Whether to add a small fractional count to zeros, (adding a uniform random variable between 0 and 0.1). This option allows for the fitting of genewise precision and coefficients for genes with two features having all zero for one group, or the last feature having all zero for one group.} \item{BPPARAM}{Parallelization method used by \code{\link[BiocParallel]{bplapply}}.} \item{speed}{Logical. If \code{FALSE}, precision is calculated per each gene-block. Such calculation may take a long time, since there can be hundreds of SNPs/blocks per gene. If \code{TRUE}, there will be only one precision calculated per gene and it will be assigned to all the blocks matched with this gene.} } \value{ Returns a \code{\linkS4class{dmDSprecision}} or \code{\linkS4class{dmSQTLprecision}} object. } \description{ Maximum likelihood estimates of the precision parameter in the Dirichlet-multinomial model used for the differential exon/transcript usage or QTL analysis. } \details{ Normally, in the differential analysis based on RNA-seq data, such as, for example, differential gene expression, dispersion (of negative-binomial model) is estimated. Here, we estimate precision of the Dirichlet-multinomial model as it is more convenient computationally. To obtain dispersion estimates, one can use a formula: dispersion = 1 / (1 + precision). Parameters that are used in the precision (dispersion = 1 / (1 + precision)) estimation start with prefix \code{prec_}. Those that are used for the proportion estimation in each group when the shortcut fitting \code{one_way = TRUE} can be used start with \code{prop_}, and those that are used in the regression framework start with \code{coef_}. There are two optimization methods implemented within dmPrecision: \code{"optimize"} for the common precision and \code{"grid"} for the gene-wise precision. Only part of the precision parameters in dmPrecision have an influence on a given optimization method. Here is a list of such active parameters: \code{"optimize"}: \itemize{ \item \code{prec_interval}: Passed as \code{interval}. \item \code{prec_tol}: The accuracy defined as \code{tol}. } \code{"grid"}, which uses the grid approach from \code{\link[edgeR]{estimateDisp}} in \code{\link{edgeR}}: \itemize{ \item \code{prec_init}, \code{prec_grid_length}, \code{prec_grid_range}: Parameters used to construct the search grid \code{prec_init * 2^seq(from = prec_grid_range[1]}, \code{to = prec_grid_range[2]}, \code{length = prec_grid_length)}. \item \code{prec_moderation}: Dipsersion shrinkage is available only with \code{"grid"} method. \item \code{prec_prior_df}: Used only when precision shrinkage is activated. Moderated likelihood is equal to \code{loglik + prec_prior_df * moderation}. Higher \code{prec_prior_df}, more shrinkage toward common or trended precision is applied. \item \code{prec_span}: Used only when precision moderation toward trend is activated. } } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) } } \references{ McCarthy, DJ, Chen, Y, Smyth, GK (2012). Differential expression analysis of multifactor RNA-Seq experiments with respect to biological variation. Nucleic Acids Research 40, 4288-4297. } \seealso{ \code{\link{plotPrecision}} \code{\link[edgeR]{estimateDisp}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmSQTLdata-class.Rd0000644000175200017520000000571614136051631017114 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmSQTLdata.R \docType{class} \name{dmSQTLdata-class} \alias{dmSQTLdata-class} \alias{counts,dmSQTLdata-method} \alias{samples,dmSQTLdata-method} \alias{names,dmSQTLdata-method} \alias{length,dmSQTLdata-method} \alias{[,dmSQTLdata,ANY-method} \alias{[,dmSQTLdata-method} \title{dmSQTLdata object} \usage{ \S4method{counts}{dmSQTLdata}(object) \S4method{samples}{dmSQTLdata}(x) \S4method{names}{dmSQTLdata}(x) \S4method{length}{dmSQTLdata}(x) \S4method{[}{dmSQTLdata,ANY}(x, i, j) } \arguments{ \item{x, object}{dmSQTLdata object.} \item{i, j}{Parameters used for subsetting.} } \value{ \itemize{ \item \code{names(x)}: Get the gene names. \item \code{length(x)}: Get the number of genes. \item \code{x[i, j]}: Get a subset of dmDSdata object that consists of counts, genotypes and blocks corresponding to genes i and samples j. } } \description{ dmSQTLdata contains genomic feature expression (counts), genotypes and sample information needed for the transcript/exon usage QTL analysis. It can be created with function \code{\link{dmSQTLdata}}. } \section{Slots}{ \describe{ \item{\code{counts}}{\code{\linkS4class{MatrixList}} of expression, in counts, of genomic features. Rows correspond to genomic features, such as exons or transcripts. Columns correspond to samples. MatrixList is partitioned in a way that each of the matrices in a list contains counts for a single gene.} \item{\code{genotypes}}{MatrixList of unique genotypes. Rows correspond to blocks, columns to samples. Each matrix in this list is a collection of unique genotypes that are matched with a given gene.} \item{\code{blocks}}{MatrixList with two columns \code{block_id} and \code{snp_id}. For each gene, it identifies SNPs with identical genotypes across the samples and assigns them to blocks.} \item{\code{samples}}{Data frame with information about samples. It must contain variable \code{sample_id} with unique sample names.} }} \examples{ # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) \donttest{ geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) } } \seealso{ \code{\linkS4class{dmSQTLprecision}}, \code{\linkS4class{dmSQTLfit}}, \code{\linkS4class{dmSQTLtest}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmSQTLdata.Rd0000644000175200017520000000661414136051631016007 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmSQTLdata.R \name{dmSQTLdata} \alias{dmSQTLdata} \title{Create dmSQTLdata object} \usage{ dmSQTLdata(counts, gene_ranges, genotypes, snp_ranges, samples, window = 5000, BPPARAM = BiocParallel::SerialParam()) } \arguments{ \item{counts}{Data frame with counts. Rows correspond to features, for example, transcripts or exons. This data frame has to contain a \code{gene_id} column with gene IDs, \code{feature_id} column with feature IDs and columns with counts for each sample. Column names corresponding to sample IDs must be the same as in the \code{sample} data frame.} \item{gene_ranges}{\code{\linkS4class{GRanges}} object with gene location. It must contain gene names when calling names().} \item{genotypes}{Data frame with genotypes. Rows correspond to SNPs. This data frame has to contain a \code{snp_id} column with SNP IDs and columns with genotypes for each sample. Column names corresponding to sample IDs must be the same as in the \code{sample} data frame. The genotype of each sample is coded in the following way: 0 for ref/ref, 1 for ref/not ref, 2 for not ref/not ref, -1 or \code{NA} for missing value.} \item{snp_ranges}{\code{\linkS4class{GRanges}} object with SNP location. It must contain SNP names when calling names().} \item{samples}{Data frame with column \code{sample_id} corresponding to unique sample IDs} \item{window}{Size of a down and up stream window, which is defining the surrounding for a gene. Only SNPs that are located within a gene or its surrounding are considered in the sQTL analysis.} \item{BPPARAM}{Parallelization method used by \code{\link[BiocParallel]{bplapply}}.} } \value{ Returns a \code{\linkS4class{dmSQTLdata}} object. } \description{ Constructor functions for a \code{\linkS4class{dmSQTLdata}} object. dmSQTLdata assignes to a gene all the SNPs that are located in a given surrounding (\code{window}) of this gene. } \details{ It is quite common that sample grouping defined by some of the SNPs is identical. Compare \code{dim(genotypes)} and \code{dim(unique(genotypes))}. In our QTL analysis, we do not repeat tests for the SNPs that define the same grouping of samples. Each grouping is tested only once. SNPs that define such unique groupings are aggregated into blocks. P-values and adjusted p-values are estimated at the block level, but the returned results are extended to a SNP level by repeating the block statistics for each SNP that belongs to a given block. } \examples{ # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) \donttest{ geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) } } \seealso{ \code{\link{plotData}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmSQTLfit-class.Rd0000644000175200017520000000502614136051631016757 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmSQTLfit.R \docType{class} \name{dmSQTLfit-class} \alias{dmSQTLfit-class} \title{dmSQTLfit object} \description{ dmSQTLfit extends the \code{\linkS4class{dmSQTLprecision}} class by adding the full model Dirichlet-multinomial (DM) likelihoods, regression coefficients and feature proportion estimates needed for the transcript/exon usage QTL analysis. Full model is defined by the genotype of a SNP associated with a gene. Estimation takes place for all the genes and all the SNPs/blocks assigned to the genes. Result of \code{\link{dmFit}}. } \section{Slots}{ \describe{ \item{\code{fit_full}}{List of \code{\linkS4class{MatrixList}} objects containing estimated feature ratios in each sample based on the full Dirichlet-multinomial (DM) model.} \item{\code{lik_full}}{List of numeric vectors of the per gene DM full model likelihoods.} \item{\code{coef_full}}{\code{\linkS4class{MatrixList}} with the regression coefficients based on the DM model.} }} \examples{ # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) \donttest{ geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) # -------------------------------------------------------------------------- # sQTL analysis - simple group comparison # -------------------------------------------------------------------------- ## Filtering d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d) plotPrecision(d) ## Fit full model proportions d <- dmFit(d) } } \seealso{ \code{\linkS4class{dmSQTLdata}}, \code{\linkS4class{dmSQTLprecision}}, \code{\linkS4class{dmSQTLtest}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmSQTLprecision-class.Rd0000644000175200017520000000560514136051631020173 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmSQTLprecision.R \docType{class} \name{dmSQTLprecision-class} \alias{dmSQTLprecision-class} \alias{mean_expression,dmSQTLprecision-method} \alias{common_precision,dmSQTLprecision-method} \alias{genewise_precision,dmSQTLprecision-method} \title{dmSQTLprecision object} \usage{ \S4method{mean_expression}{dmSQTLprecision}(x) \S4method{common_precision}{dmSQTLprecision}(x) \S4method{genewise_precision}{dmSQTLprecision}(x) } \arguments{ \item{x}{dmSQTLprecision object.} } \value{ \itemize{ \item \code{mean_expression(x)}: Get a data frame with mean gene expression. \item \code{common_precision(x)}: Get common precision. \item \code{genewise_precision(x)}: Get a data frame with gene-wise precision.} } \description{ dmSQTLprecision extends the \code{\linkS4class{dmSQTLdata}} by adding the precision estimates of Dirichlet-multinomial distribution used to model the feature (e.g., transcript, exon, exonic bin) counts for each gene-SNP pair in the QTL analysis. Result of \code{\link{dmPrecision}}. } \section{Slots}{ \describe{ \item{\code{mean_expression}}{Numeric vector of mean gene expression.} \item{\code{common_precision}}{Numeric value of estimated common precision.} \item{\code{genewise_precision}}{List of estimated gene-wise precisions. Each element of this list is a vector of precisions estimated for all the genotype blocks assigned to a given gene.} }} \examples{ # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) \donttest{ geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) # -------------------------------------------------------------------------- # sQTL analysis - simple group comparison # -------------------------------------------------------------------------- ## Filtering d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d) plotPrecision(d) } } \seealso{ \code{\linkS4class{dmSQTLdata}}, \code{\linkS4class{dmSQTLfit}}, \code{\linkS4class{dmSQTLtest}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmSQTLtest-class.Rd0000644000175200017520000000567514136051631017166 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmSQTLtest.R \docType{class} \name{dmSQTLtest-class} \alias{dmSQTLtest-class} \alias{results,dmSQTLtest-method} \title{dmSQTLtest object} \usage{ \S4method{results}{dmSQTLtest}(x) } \arguments{ \item{x}{dmSQTLtest object.} \item{...}{Other parameters that can be defined by methods using this generic.} } \value{ \itemize{ \item \code{results(x)}: Get a data frame with gene-level results. } } \description{ dmSQTLtest extends the \code{\linkS4class{dmSQTLfit}} class by adding the null model Dirichlet-multinomial likelihoods and the gene-level results of testing for differential transcript/exon usage QTLs. Result of \code{\link{dmTest}}. } \section{Slots}{ \describe{ \item{\code{lik_null}}{List of numeric vectors with the per gene-snp DM null model likelihoods.} \item{\code{results_gene}}{Data frame with the gene-level results including: \code{gene_id} - gene IDs, \code{block_id} - block IDs, \code{snp_id} - SNP IDs, \code{lr} - likelihood ratio statistics based on the DM model, \code{df} - degrees of freedom, \code{pvalue} - p-values estimated based on permutations and \code{adj_pvalue} - Benjamini & Hochberg adjusted p-values.} }} \examples{ # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) # -------------------------------------------------------------------------- # sQTL analysis - simple group comparison # -------------------------------------------------------------------------- ## Filtering d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d) plotPrecision(d) ## Fit full model proportions d <- dmFit(d) ## Fit null model proportions, perform the LR test to detect tuQTLs ## and use the permutation approach to adjust the p-values d <- dmTest(d) ## Plot the gene-level p-values plotPValues(d) ## Get the gene-level results head(results(d)) } \seealso{ \code{\linkS4class{dmSQTLdata}}, \code{\linkS4class{dmSQTLprecision}}, \code{\linkS4class{dmSQTLfit}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dmTest.Rd0000644000175200017520000001553214136051631015310 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDStest.R, R/class_dmSQTLtest.R \docType{methods} \name{dmTest} \alias{dmTest} \alias{dmTest,dmDSfit-method} \alias{dmTest,dmSQTLfit-method} \title{Likelihood ratio test to detect differential transcript/exon usage} \usage{ dmTest(x, ...) \S4method{dmTest}{dmDSfit}(x, coef = NULL, design = NULL, contrast = NULL, one_way = TRUE, bb_model = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()) \S4method{dmTest}{dmSQTLfit}(x, permutation_mode = "all_genes", one_way = TRUE, prop_mode = "constrOptim", prop_tol = 1e-12, coef_mode = "optim", coef_tol = 1e-12, verbose = 0, BPPARAM = BiocParallel::SerialParam()) } \arguments{ \item{x}{\code{\linkS4class{dmDSfit}} or \code{\linkS4class{dmSQTLfit}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{coef}{Integer or character vector indicating which coefficients of the linear model are to be tested equal to zero. Values must indicate column numbers or column names of the \code{design} used in \code{\link{dmFit}}.} \item{design}{Numeric matrix defining the null model.} \item{contrast}{Numeric vector or matrix specifying one or more contrasts of the linear model coefficients to be tested equal to zero. For a matrix, number of rows (for a vector, its length) must equal to the number of columns of \code{design} used in \code{\link{dmFit}}.} \item{one_way}{Logical. Should the shortcut fitting be used when the design corresponds to multiple group comparison. This is a similar approach as in \code{\link{edgeR}}. If \code{TRUE} (the default), then proportions are fitted per group and regression coefficients are recalculated from those fits.} \item{bb_model}{Logical. Whether to perform the feature-level analysis using the beta-binomial model.} \item{prop_mode}{Optimization method used to estimate proportions. Possible value \code{"constrOptim"}.} \item{prop_tol}{The desired accuracy when estimating proportions.} \item{coef_mode}{Optimization method used to estimate regression coefficients. Possible value \code{"optim"}.} \item{coef_tol}{The desired accuracy when estimating regression coefficients.} \item{verbose}{Numeric. Definie the level of progress messages displayed. 0 - no messages, 1 - main messages, 2 - message for every gene fitting.} \item{BPPARAM}{Parallelization method used by \code{\link[BiocParallel]{bplapply}}.} \item{permutation_mode}{Character specifying which permutation scheme to apply for p-value calculation. When equal to \code{"all_genes"}, null distribution of p-values is calculated from all genes and the maximum number of permutation cycles is 10. When \code{permutation_mode = "per_gene"}, null distribution of p-values is calculated for each gene separately based on permutations of this individual gene. The latter approach may take a lot of computational time. We suggest using the first option.} } \value{ Returns a \code{\linkS4class{dmDStest}} or \code{\linkS4class{dmSQTLtest}} object. } \description{ First, estimate the null Dirichlet-multinomial and beta-binomial model parameters and likelihoods using the null model design. Second, perform the gene-level (DM model) and feature-level (BB model) likelihood ratio tests. In the differential exon/transcript usage analysis, the null model is defined by the null design matrix. In the exon/transcript usage QTL analysis, null models are defined by a design with intercept only. Currently, beta-binomial model is implemented only in the differential usage analysis. } \details{ One must specify one of the arguments: \code{coef}, \code{design} or \code{contrast}. When \code{contrast} is used to define the null model, the null design matrix is recalculated using the same approach as in \code{\link[edgeR]{glmLRT}} function from \code{\link{edgeR}}. } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) ## Fit full model proportions d <- dmFit(d, design = design_full) ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") ## Fit null model proportions and perform the LR test to detect DTU d <- dmTest(d, coef = "groupKD") ## Plot the gene-level p-values plotPValues(d) ## Get the gene-level results head(results(d)) ## Plot feature proportions for a top DTU gene res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") } } \references{ McCarthy, DJ, Chen, Y, Smyth, GK (2012). Differential expression analysis of multifactor RNA-Seq experiments with respect to biological variation. Nucleic Acids Research 40, 4288-4297. } \seealso{ \code{\link{plotPValues}} \code{\link[edgeR]{glmLRT}} } \author{ Malgorzata Nowicka } DRIMSeq/man/dm_plotDataDSInfo.Rd0000644000175200017520000000077114136051631017342 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/dm_plotData.R \name{dm_plotDataDSInfo} \alias{dm_plotDataDSInfo} \title{Plot the frequency of present features} \usage{ dm_plotDataDSInfo(info, ds_info) } \arguments{ \item{info}{Data frame with \code{gene_id} and \code{feature_id} of ALL features} \item{ds_info}{Data frame with \code{gene_id} and \code{feature_id} of ONLY DS features} } \value{ \code{ggplot} object } \description{ Plot the frequency of present features } DRIMSeq/man/dm_plotProportions.Rd0000644000175200017520000000327214136051631017763 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/dm_plotProportions.R \name{dm_plotProportions} \alias{dm_plotProportions} \title{Plot feature proportions} \usage{ dm_plotProportions(counts, group, md = NULL, fit_full = NULL, main = NULL, plot_type = "boxplot1", order_features = TRUE, order_samples = TRUE, group_colors = NULL, feature_colors = NULL) } \arguments{ \item{counts}{Matrix with rows corresponding to features and columns corresponding to samples. Row names are used as labels on the plot.} \item{group}{Factor that groups samples into conditions.} \item{md}{Data frame with additional sample information.} \item{fit_full}{Matrix of estimated proportions with rows corresponding to features and columns corresponding to samples. If \code{NULL}, nothing is plotted.} \item{main}{Character vector with main title for the plot. If \code{NULL}, nothing is plotted.} \item{plot_type}{Character defining the type of the plot produced. Possible values \code{"barplot"}, \code{"boxplot1"}, \code{"boxplot2"}, \code{"lineplot"}, \code{"ribbonplot"}.} \item{order_features}{Logical. Whether to plot the features ordered by their expression.} \item{order_samples}{Logical. Whether to plot the samples ordered by the group variable. If \code{FALSE} order from the \code{sample(x)} is kept.} \item{group_colors}{Character vector with colors for each group.} \item{feature_colors}{Character vector with colors for each feature.} } \value{ \code{ggplot} object with the observed and/or estimated with Dirichlet-multinomial model feature ratios. Estimated proportions are marked with diamond shapes. } \description{ Plot observed and/or estimated feature proportions. } DRIMSeq/man/plotData.Rd0000644000175200017520000000755014136051631015621 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSdata.R, R/class_dmSQTLdata.R \docType{methods} \name{plotData} \alias{plotData} \alias{plotData,dmDSdata-method} \alias{plotData,dmSQTLdata-method} \title{Plot data summary} \usage{ plotData(x, ...) \S4method{plotData}{dmDSdata}(x) \S4method{plotData}{dmSQTLdata}(x, plot_type = "features") } \arguments{ \item{x}{\code{\linkS4class{dmDSdata}} or \code{\linkS4class{dmSQTLdata}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{plot_type}{Character specifying which type of histogram to plot. Possible values \code{"features"}, \code{"snps"} or \code{"blocks"}.} } \value{ Returns a \code{ggplot} object and can be further modified, for example, using \code{theme()}. Plots a histogram of the number of features per gene. Additionally, for \code{\linkS4class{dmSQTLdata}} object, plots a histogram of the number of SNPs per gene and a histogram of the number of unique SNPs (blocks) per gene. } \description{ Plot data summary } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) } # -------------------------------------------------------------------------- # Create dmSQTLdata object # -------------------------------------------------------------------------- # Use subsets of data defined in the GeuvadisTranscriptExpr package library(GeuvadisTranscriptExpr) \donttest{ geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) # -------------------------------------------------------------------------- # sQTL analysis - simple group comparison # -------------------------------------------------------------------------- ## Filtering d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) plotData(d) } } \seealso{ \code{\link{plotPrecision}}, \code{\link{plotProportions}}, \code{\link{plotPValues}} } \author{ Malgorzata Nowicka } DRIMSeq/man/plotPValues.Rd0000644000175200017520000000705014136051631016322 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDStest.R, R/class_dmSQTLtest.R \docType{methods} \name{plotPValues} \alias{plotPValues} \alias{plotPValues,dmDStest-method} \alias{plotPValues,dmSQTLtest-method} \title{Plot p-value distribution} \usage{ plotPValues(x, ...) \S4method{plotPValues}{dmDStest}(x, level = "gene") \S4method{plotPValues}{dmSQTLtest}(x) } \arguments{ \item{x}{\code{\linkS4class{dmDStest}} or \code{\linkS4class{dmSQTLtest}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{level}{Character specifying which type of results to return. Possible values \code{"gene"} or \code{"feature"}.} } \value{ Plot a histogram of p-values. } \description{ Plot p-value distribution } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) ## Fit full model proportions d <- dmFit(d, design = design_full) ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") ## Fit null model proportions and perform the LR test to detect DTU d <- dmTest(d, coef = "groupKD") ## Plot the gene-level p-values plotPValues(d) ## Get the gene-level results head(results(d)) ## Plot feature proportions for a top DTU gene res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") } } \seealso{ \code{\link{plotData}}, \code{\link{plotPrecision}}, \code{\link{plotProportions}} } \author{ Malgorzata Nowicka } DRIMSeq/man/plotPrecision.Rd0000644000175200017520000000620114136051631016673 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSprecision.R, % R/class_dmSQTLprecision.R \docType{methods} \name{plotPrecision} \alias{plotPrecision} \alias{plotPrecision,dmDSprecision-method} \alias{plotPrecision,dmSQTLprecision-method} \title{Precision versus mean expression plot} \usage{ plotPrecision(x, ...) \S4method{plotPrecision}{dmDSprecision}(x) \S4method{plotPrecision}{dmSQTLprecision}(x) } \arguments{ \item{x}{\code{\linkS4class{dmDSprecision}} or \code{\linkS4class{dmSQTLprecision}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} } \value{ Normally in the differential analysis based on RNA-seq data, such plot has dispersion parameter plotted on the y-axis. Here, the y-axis represents precision since in the Dirichlet-multinomial model this is the parameter that is directly estimated. It is important to keep in mind that the precision parameter (gamma0) is inverse proportional to dispersion (theta): theta = 1 / (1 + gamma0). In RNA-seq data, we can typically observe a trend where the dispersion decreases (here, precision increases) for genes with higher mean expression. } \description{ Precision versus mean expression plot } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) } } \seealso{ \code{\link{plotData}}, \code{\link{plotProportions}}, \code{\link{plotPValues}} } \author{ Malgorzata Nowicka } DRIMSeq/man/plotProportions.Rd0000644000175200017520000001263114136051631017302 0ustar00biocbuildbiocbuild% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_dmDSfit.R, R/class_dmSQTLfit.R \docType{methods} \name{plotProportions} \alias{plotProportions} \alias{plotProportions,dmDSfit-method} \alias{plotProportions,dmSQTLfit-method} \title{Plot feature proportions} \usage{ plotProportions(x, ...) \S4method{plotProportions}{dmDSfit}(x, gene_id, group_variable, plot_type = "barplot", order_features = TRUE, order_samples = TRUE, plot_fit = TRUE, plot_main = TRUE, group_colors = NULL, feature_colors = NULL) \S4method{plotProportions}{dmSQTLfit}(x, gene_id, snp_id, plot_type = "boxplot1", order_features = TRUE, order_samples = TRUE, plot_fit = FALSE, plot_main = TRUE, group_colors = NULL, feature_colors = NULL) } \arguments{ \item{x}{\code{\linkS4class{dmDSfit}}, \code{\linkS4class{dmDStest}} or \code{\linkS4class{dmSQTLfit}}, \code{\linkS4class{dmSQTLtest}} object.} \item{...}{Other parameters that can be defined by methods using this generic.} \item{gene_id}{Character indicating a gene ID to be plotted.} \item{group_variable}{Character indicating the grouping variable which is one of the columns in the \code{samples} slot of \code{x}.} \item{plot_type}{Character defining the type of the plot produced. Possible values \code{"barplot"}, \code{"boxplot1"}, \code{"boxplot2"}, \code{"lineplot"}, \code{"ribbonplot"}.} \item{order_features}{Logical. Whether to plot the features ordered by their expression.} \item{order_samples}{Logical. Whether to plot the samples ordered by the group variable. If \code{FALSE} order from the \code{sample(x)} is kept.} \item{plot_fit}{Logical. Whether to plot the proportions estimated by the full model.} \item{plot_main}{Logical. Whether to plot a title with the information about the Dirichlet-multinomial estimates.} \item{group_colors}{Character vector with colors for each group defined by \code{group_variable}.} \item{feature_colors}{Character vector with colors for each feature of gene defined by \code{gene_id}.} \item{snp_id}{Character indicating the ID of a SNP to be plotted.} } \value{ For a given gene, plot the observed and estimated with Dirichlet-multinomial model feature proportions in each group. Estimated group proportions are marked with diamond shapes. } \description{ This plot is available only for a group design, i.e., a design that is equivalent to multiple group fitting. } \details{ In the QTL analysis, plotting of fitted proportions is deactivated even when \code{plot_fit = TRUE}. It is due to the fact that neither fitted values nor regression coefficients are returned by the \code{dmFit} function as they occupy a lot of memory. } \examples{ # -------------------------------------------------------------------------- # Create dmDSdata object # -------------------------------------------------------------------------- ## Get kallisto transcript counts from the 'PasillaTranscriptExpr' package library(PasillaTranscriptExpr) \donttest{ data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) ## Create a pasilla_samples data frame pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) ## Create a dmDSdata object d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) ## Use a subset of genes, which is defined in the following file gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) \%in\% gene_id_subset, ] # -------------------------------------------------------------------------- # Differential transcript usage analysis - simple two group comparison # -------------------------------------------------------------------------- ## Filtering ## Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) plotData(d) ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) plotPrecision(d) head(mean_expression(d)) common_precision(d) head(genewise_precision(d)) ## Fit full model proportions d <- dmFit(d, design = design_full) ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") ## Fit null model proportions and perform the LR test to detect DTU d <- dmTest(d, coef = "groupKD") ## Plot the gene-level p-values plotPValues(d) ## Get the gene-level results head(results(d)) ## Plot feature proportions for a top DTU gene res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") } } \seealso{ \code{\link{plotData}}, \code{\link{plotPrecision}}, \code{\link{plotPValues}} } \author{ Malgorzata Nowicka } DRIMSeq/tests/0000755000175200017520000000000014136051631014142 5ustar00biocbuildbiocbuildDRIMSeq/tests/testthat/0000755000175200017520000000000014136051631016002 5ustar00biocbuildbiocbuildDRIMSeq/tests/testthat.R0000644000175200017520000000007214136051631016124 0ustar00biocbuildbiocbuildlibrary(testthat) library(DRIMSeq) test_check("DRIMSeq") DRIMSeq/tests/testthat/test_MatrixList.R0000644000175200017520000000145014136051631021264 0ustar00biocbuildbiocbuildcontext("MatrixList") x1 <- matrix(1, 10, 6) colnames(x1) <- paste0("C", 1:6) rownames(x1) <- paste0("R1", 1:10) x2 <- matrix(2, 5, 6) colnames(x2) <- paste0("C", 1:6) rownames(x2) <- paste0("R2", 1:5) x <- MatrixList(x1 = x1, x2 = x2) test_that("methods return correct arributes of MatrixList", { expect_equal(names(x), c("x1", "x2")) expect_equal(rownames(x), c(paste0("R1", 1:10), paste0("R2", 1:5))) expect_equal(colnames(x), paste0("C", 1:6)) expect_equal(length(x), 2) expect_equal(elementNROWS(x), c(x1 = 10, x2 = 5)) expect_equal(dim(x), c(15, 6)) expect_equal(nrow(x), 15) expect_equal(ncol(x), 6) }) test_that("subsetting of MatrixList is correct", { expect_equal(x[["x2"]], x2) expect_equal(x$x2, x2) expect_equal(x[1, 1], MatrixList(x1 = x1[, 1, drop = FALSE])) }) DRIMSeq/tests/testthat/test_dm_adjustment.R0000755000175200017520000000037014136051631022025 0ustar00biocbuildbiocbuildcontext("DM adjustement") prec = 10 y = matrix(c(30, 75, 35, 70), nrow = 2) prop = c(0.3, 0.7) test_that("dm_CRadjustmentOneGroup returns the right values", { expect_equal(round(dm_CRadjustmentOneGroup(y, prec, prop), 4), 2.6562) }) DRIMSeq/tests/testthat/test_gene_filter.R0000644000175200017520000000234614136051631021454 0ustar00biocbuildbiocbuildcontext("gene filter") test_that("gene filtering is working", { cts <- matrix(rnbinom(120, mu=100, size=10), ncol=10, dimnames=list(1:12,paste0("s",1:10))) cts[1,] <- 0 cts[2:3,] <- 10 cts[1:3,1] <- c(10,0,0) counts <- data.frame(gene_id=factor(rep(1:4, each=3)), feature_id=factor(1:12), cts) samples <- data.frame(sample_id=paste0("s",1:10), condition=rep(c("A","B"),each=5)) d <- dmDSdata(counts, samples) d <- dmFilter(d, min_samps_gene_expr = 10, min_gene_expr = 10, min_samps_feature_expr = 5, min_feature_expr = 0, min_samps_feature_prop = 5, min_feature_prop = 0) d2 <- dmFilter(d, min_samps_gene_expr = 10, min_gene_expr = 10, min_samps_feature_expr = 5, min_feature_expr = 10, min_samps_feature_prop = 5, min_feature_prop = 0) expect_true(length(d2) == 4) sum(counts(d2[1,])$s1) # has 0 counts for this gene # now use 'run_gene_twice' d3 <- dmFilter(d, min_samps_gene_expr = 10, min_gene_expr = 10, min_samps_feature_expr = 5, min_feature_expr = 10, min_samps_feature_prop = 5, min_feature_prop = 0, run_gene_twice=TRUE) expect_true(length(d3) == 3) }) DRIMSeq/tests/testthat/test_lik_score.R0000755000175200017520000000077114136051631021146 0ustar00biocbuildbiocbuildcontext("DM likelihood and score") prec = 10 y = matrix(c(35, 70, 100, 100), nrow = 2) prop = 0.3 test_that("dm_lik and dm_likG are equal", { expect_equal(dm_lik(prop, prec, y), dm_likG(prop, prec, y)) }) test_that("dm_score and dm_scoreG are equal", { expect_equal(dm_score(prop, prec, y), dm_scoreG(prop, prec, y)) }) y = matrix(c(0, 0, 35, 70), nrow = 2) test_that("dm_lik and dm_likG are diff. for matrix with 0 column", { expect_true(dm_lik(prop, prec, y) < dm_likG(prop, prec, y)) }) DRIMSeq/tests/testthat/test_total_switch.R0000644000175200017520000000202514136051631021667 0ustar00biocbuildbiocbuildcontext("total switch") test_that("total switch retains precision estimates", { cts <- matrix(rnbinom(100, mu=100, size=10), ncol=10, dimnames=list(1:10,paste0("s",1:10))) cts[1,1:5] <- 0 cts[2,6:10] <- 0 counts <- data.frame(gene_id=factor(rep(1:5, each=2)), feature_id=factor(1:10), cts) samples <- data.frame(sample_id=paste0("s",1:10), condition=rep(c("A","B"),each=5)) d <- dmDSdata(counts, samples) design <- model.matrix(~condition, samples(d)) d <- dmPrecision(d, design=design, prec_subset=1) expect_true(is.na(genewise_precision(d)$genewise_precision[1])) d2 <- dmPrecision(d, design=design, prec_subset=1, add_uniform=TRUE) expect_true(!is.na(genewise_precision(d2)$genewise_precision)[1]) d <- dmFit(d, design=design) d <- dmTest(d, coef="conditionB") res <- results(d) expect_true(is.na(res$pvalue[1])) d2 <- dmFit(d2, design=design, add_uniform=TRUE) d2 <- dmTest(d2, coef="conditionB") res <- results(d2) expect_true(!is.na(res$pvalue[1])) }) DRIMSeq/vignettes/0000755000175200017520000000000014136070551015012 5ustar00biocbuildbiocbuildDRIMSeq/vignettes/DRIMSeq.Rnw0000755000175200017520000011250514136051631016713 0ustar00biocbuildbiocbuild%\VignetteIndexEntry{Differential transcript usage and transcript usage QTL analyses in RNA-seq with the DRIMSeq package} %\VignettePackage{DRIMSeq} %\VignetteEngine{knitr::knitr} \documentclass[10pt]{article} <>= BiocStyle::latex() @ \usepackage[utf8]{inputenc} \usepackage[sort]{cite} \usepackage{xstring} \bioctitle[Differential transcript usage and transcript usage QTL analyses in RNA-seq with the DRIMSeq package]{DRIMSeq: Dirichlet-multinomial framework for differential transcript usage and transcript usage QTL analyses in RNA-seq} \author{ Malgorzata Nowicka\thanks{\email{gosia.nowicka@uzh.ch}}, Mark D. Robinson\\ Institute for Molecular Life Sciences, University of Zurich, Switzerland\\ SIB Swiss Institute of Bioinformatics, University of Zurich, Switzerland } \begin{document} \maketitle \packageVersion{\Sexpr{BiocStyle::pkg_ver("DRIMSeq")}} \newpage \tableofcontents \newpage <>= library(knitr) opts_chunk$set(cache = FALSE, warning = FALSE, out.width = "7cm", fig.width = 7, out.height = "7cm", fig.height = 7) @ %------------------------------------------------------------------------------ % Introduction %------------------------------------------------------------------------------ \section{Main changes in the DRIMSeq package} For the full list of changes, type: <>= news(package = "DRIMSeq") @ Implementation of the regression framework in differential transcript usage analysis. It allows fitting more complicated than multiple group comparison experimental designs, for example, one can account for the batch effects or the fact that samples are paired or model continuous time course changes. It enables also testing of more complicated contrasts. Transcript-level analysis based on the beta-binomial model. In this case, each transcript ratio is modeled separately assuming it follows the beta-binomial distribution which is a one-dimensional version of the Dirichlet-multinomial distribution. Based on the fact that when $(Y_1,\ldots,Y_q) \sim DM(\pi_1,\ldots,\pi_q, \gamma_0)$ then $Y_j \sim BB(\pi_j,\gamma_0)$ \cite{Danaher1988}, we do not need to reestimate the beta-binomial parameters, only the likelihoods are recalculated. \Rpackage{DRIMSeq} returns gene-level and transcript-level p-values which can be used as input to the stage-wise testing procedure \cite{VandenBerge2017} as screening and confirmation p-values, respectively. Such approach provides increased power to identify transcripts which are actually differentially used in a gene detected as gene with DTU. Usage of term 'precision' instead of 'dispersion'. In the differential analysis based on the negative-binomial model, dispersion parameter is estimated. This dispersion parameter captures all sources of the inter-library variation between replicates present in the RNA-seq data. In the DM model, we do not directly estimate dispersion but a parameter called precision which is closely linked to dispersion via the formula: $dispersion = 1 / (1 + precision)$. In the previous version of \cite{Nowicka2016}, we used 'dispersion' as a name for the functions and variables calculating and storing, in fact, the precision estimates. Now, we use the term 'precision'. \section{Overview of the Dirichlet-multinomial model} For the statistical details about the Dirichlet-multinomial model, see the \Rpackage{DRIMSeq} paper \cite{Nowicka2016}. In the \Rpackage{DRIMSeq} package we implemented a Dirichlet-multinomial framework that can be used for modeling various multivariate count data with the interest in finding the instances where the ratios of observed features are different between the experimental conditions. Such a model can be applied, for example, in differential transcript usage (DTU) analysis or in the analysis that aim in detecting SNPs that are associated with differential transcript usage (tuQTL analysis). In both cases the multivariate features of a gene are transcripts. The implementation of Dirichlet-multinomial model in \Rpackage{DRIMSeq} package is customized for differential transcript usage and tuQTL analyses, but the data objects used in \Rpackage{DRIMSeq} can contain various types of counts. Therefore, other types of multivariate differential analyses can be performed such as differential methylation analysis or differential polyA usage from polyA-seq data. In short, the method consists of three statistical steps: First, we use the Cox-Reid adjusted profile likelihood to estimate the precision which is inverse proportional to dispersion, i.e., the variability of transcript ratios between samples (replicates) within conditions. Dispersion is needed in order to find the significant changes in transcript ratios between conditions which should be sufficiently stronger than the changes/variability within conditions. Second, we use maximum likelihood to estimate at the gene-level the regression coefficients in the Dirichlet-multinomial (DM) regression, the fitted transcript proportions in each sample and the full model likelihoods. For the analysis at the transcript-level we apply the beta-binomial (BB) regression to each transcript separately. In the differential transcript usage analysis, the full model is defined by the user with the design matrix. In the QTL analysis, full models are defined by the genotypes of SNPs associated with a given gene. Finally, we fit the null model DM and BB regression and use the likelihood ratio statistics to test for the differences in transcript proportions between the full and null models at the gene and transcript level. In the differential transcript usage analysis, the null model is again defined by the user. In the QTL analysis, null models correspond to regression with intercept only. \section{Important notes} Currently, transcript-level analysis based on the BB model are implemented only in the DTU analysis (\Rcode{bb\_model = TRUE}). When the model (full or null) of interest corresponds to multiple (or one) group fitting, then a shortcut algorithm called 'one way' (\Rcode{one\_way = TRUE}), which we adapted from the \Rfunction{glmFit} function in \Biocpkg{edgeR} \cite{McCarthy2012}, can be used. Choosing it is equivalent to running the original \Rpackage{DRIMSeq} implementation. In such a case, we use maximum likelihood to estimate the transcript proportions in each group separately and then the regression coefficients are calculated using matrix operations. Otherwise, the regression coefficients are directly estimated with the maximum likelihood approach. \section{Hints for DRIMSeq pipelines} In this vignette, we present how one could perform differential transcript usage analysis and tuQTL analysis with the \Rpackage{DRIMSeq} package. We use small data sets so that the whole pipelines can be run within few minutes in \R{} on a single core computer. In practice, the package is designed to take advantage of multicore computing for larger data sets. In the filtering function \Rfunction{dmFilter}, all the parameters that are influencing transcript count filtering are set to zero. This results in a very relaxed filtering, where transcripts with zero expression in all the samples and genes with only one transcript remained are removed. Functions \Rfunction{dmPrecision}, \Rfunction{dmFit} and \Rfunction{dmTest}, which perform the actual statistical analyses described above, have many other parameters available for tweaking, but they do have the default values assigned. Those values were chosen based on many real data analyses. Some of the steps are quite time consuming, especially the precision estimation, where proportions of each gene are refitted for different precision parameters. To speed up the calculations, we have parallelized many functions using \Biocpkg{BiocParallel}. Thus, if possible, we recommend to increase the number of workers in \Robject{BPPARAM}. In general, tuQTL analyses are more computationally intensive than differential transcript usage analysis because one needs to do the analysis for every SNP in the surrounding region of a gene. Additionally, a permutation scheme is used to compute the p-values. It is indeed feasible to perform tuQTL analysis for small chunks of genome, for example, per chromosome. %------------------------------------------------------------------------------ % Differential transcript usage analysis workflow %------------------------------------------------------------------------------ \section{Differential transcript usage analysis workflow} \subsection{Example data} To demonstrate the application of \Rpackage{DRIMSeq} in differential transcript usage analysis, we will use the \emph{pasilla} data set produced by Brooks et al. \cite{Brooks2011}. The aim of their study was to identify exons that are regulated by pasilla protein, the Drosophila melanogaster ortholog of mammalian NOVA1 and NOVA2 (well studied transcript usage factors). In their RNA-seq experiment, the libraries were prepared from 7 biologically independent samples: 4 control samples and 3 samples in which pasilla was knocked-down. The libraries were sequenced on Illumina Genome Analyzer II using single-end and paired-end sequencing and different read lengths. The RNA-seq data can be downloaded from the NCBI Gene Expression Omnibus (GEO) under the accession number GSE18508. In the examples below, we use a subset of \software{kallisto} \cite{Bray2016} counts available in \Biocexptpkg{PasillaTranscriptExpr} package, where you can find all the steps needed, for preprocessing the GEO data, to get a table with transcript counts. \subsection{Differential transcript usage analysis between two conditions} In this section, we present how to perform the DTU analysis between two conditions control and knock-down without accounting for the batch effect which is the library layout. Analysis where batch effects are included are presented in the next section. We start the analysis by creating a \Rclass{dmDSdata} object, which contains transcript counts and information about grouping samples into conditions. With each step of the pipeline, additional elements are added to this object. At the end of the analysis, the object contains results from all the steps, such as precision estimates, regression coefficients, fitted transcript ratios in each sample, likelihood ratio statistics, p-values, adjusted p-values at gene and transcript level. As new elements are added, the object also changes its name \Rclass{dmDSdata} $\rightarrow$ \Rclass{dmDSprecision} $\rightarrow$ \Rclass{dmDSfit} $\rightarrow$ \Rclass{dmDStest}, but each container inherits slots and methods available for the previous one. \subsubsection{Loading pasilla data into R} The transcript-level counts obtained from \software{kallisto} and metadata are saved as text files in the \Rcode{extdata} directory of the \Biocexptpkg{PasillaTranscriptExpr} package. <>= library(PasillaTranscriptExpr) data_dir <- system.file("extdata", package = "PasillaTranscriptExpr") ## Load metadata pasilla_metadata <- read.table(file.path(data_dir, "metadata.txt"), header = TRUE, as.is = TRUE) ## Load counts pasilla_counts <- read.table(file.path(data_dir, "counts.txt"), header = TRUE, as.is = TRUE) @ Load the \Rpackage{DRIMSeq} package. <>= library(DRIMSeq) @ To create a \Rcode{dmDSdata} object, saved as variable \Robject{d}, we need to prepare a data frame containing information about samples and we will call it \Robject{pasilla\_samples}. It has to have a variable called \Rcode{sample\_id} with unique sample names that are identical to column names in \Robject{pasilla\_counts} that correspond to samples. Additionally, it has to contain other variables that the user would like to use for the further regression analysis. Here, we are interested in the differential analysis between the control and knock-down condition. This information is stored in \Rcode{pasilla\_metadata\$condition}. The data frame with counts called \Robject{pasilla\_counts} is already formatted in the right way. It contains variables \Rcode{feature\_id} with unique transcript names and \Rcode{gene\_id} with unique gene IDs and columns with counts have the same names as \Rcode{sample\_id} in \Rcode{pasilla\_samples}. When printing variable \Robject{d}, you can see its class, size (number of genes and samples) and which accessor methods can be applied. For \Rcode{dmDSdata} object, there are two methods that return data frames with counts and samples. <>= pasilla_samples <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition) levels(pasilla_samples$group) d <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples) d head(counts(d), 3) head(samples(d), 3) @ You can also make a data summary plot, which is a histogram of the number of transcripts per gene. <>= plotData(d) @ To make the analysis runnable within this vignette, we want to keep only a small subset of genes, which is defined in the following file. <>= gene_id_subset <- readLines(file.path(data_dir, "gene_id_subset.txt")) d <- d[names(d) %in% gene_id_subset, ] d @ \subsubsection{Filtering} \label{DS_filtering} Genes may have many transcripts that are lowly expressed or not expressed at all. You can remove them using the \Rfunction{dmFilter} function. Filtering of lowly expressed transcripts can be done at two levels: minimal \textit{expression} using \Robject{min\_samps\_feature\_expr} and \Robject{min\_feature\_expr} parameters or minimal \textit{proportion} with \Robject{min\_samps\_feature\_prop} and \Robject{min\_feature\_prop}. In the \emph{pasilla} experiment we use a filtering based only on the transcript absolute expression and parameters are adjusted according to the number of replicates per condition. Since we have 3 knock-down and 4 control samples, we set \Robject{min\_samps\_feature\_expr} equal to 3. In this way, we allow a situation where a transcript is expressed in one condition but not in another, which is a case of differential transcript usage. The level of transcript expression is controlled by \Robject{min\_feature\_expr}. We set it to the value of 10, which means that only the transcripts that have at least 10 estimated counts in at least 3 samples are kept for the downstream analysis. Filtering at the gene level ensures that the observed transcript ratios have some minimal reliability. Although, Dirichlet-multinomial model works on feature counts, and not on feature ratios, which means that it gives more confidence to the ratios based on 100 versus 500 reads than 1 versus 5, minimal filtering based on gene expression removes the genes with mostly zero counts and reduces the number of tests in multiple test correction. For the \emph{pasilla} data, we want that genes have at least 10 counts in all the samples: \Rcode{min\_samps\_gene\_expr = 7} and \Rcode{min\_gene\_expr = 10}. <>= # Check what is the minimal number of replicates per condition table(samples(d)$group) d <- dmFilter(d, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) @ \subsubsection{Precision estimation} \label{DS_precision_estimation} Ideally, we would like to get accurate precision estimates for every gene, which is problematic when analyzing small data sets because precision estimates become inaccurate when the sample size decreases, especially for lowly expressed genes. As an alternative, we could assume that all the genes have the same precision and based on all the data, we could calculate a common precision, but we expect this to be too strong of an assumption. Moderated precision is a trade-off between gene-wise and common precision. The moderated estimates originate from a weighted likelihood which is a combination of common and individual likelihoods. We recommend this approach when analyzing small sample size data sets. At this step, three values may be calculated: mean expression of genes, common precision and gene-wise precisions. In the default setting, all of them are computed and common precision is used as an initial value in the grid approach to estimate gene-wise precisions, which are shrunk toward the trended precision. The grid approach is adapted from the \Rfunction{estimateDisp} function in \Biocpkg{edgeR} \cite{McCarthy2012}. By default, to estimate the common precision, we use 10\% percent (\Rcode{prec\_subset = 0.1}) of randomly selected genes. That is due to the fact that common precision is used only as an initial value, and estimating it based on all the genes takes a substantial part of time. To ensure that the analysis are reproducible, the user should define a random seed \Rcode{set.seed()} before running the \Rcode{dmPrecision()} function. Thank to that, each time the same subset of genes is selected. To estimate precision parameters, the user has to define a design matrix with the full model of interest, which will be also used later in the proportion estimation. Here, the full model is defined by a formula $\sim group$ which indicates that samples come from two conditions. This step of our pipeline is the most time consuming. Thus, for real data analysis, consider using \Rcode{BPPARAM = BiocParallel::MulticoreParam()} with more than one worker. <>= ## Create the design matrix design_full <- model.matrix(~ group, data = samples(d)) design_full @ <>= ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d, design = design_full) d head(mean_expression(d), 3) common_precision(d) head(genewise_precision(d)) @ To inspect the behavior of precision estimates, you can plot them against the mean gene expression. Normally in the differential analysis based on RNA-seq data, such plot has dispersion parameter plotted on the y-axis. Here, the y-axis represents precision since in the Dirichlet-multinomial model this is the parameter that is directly estimated. It is important to keep in mind that the precision parameter is inverse proportional to dispersion: $dispersion = 1 / (1 + precision)$. In RNA-seq data, we can typically observe a trend where the dispersion decreases (precision increases) for genes with higher mean expression. <>= plotPrecision(d) @ All of the plotting functions from \Rpackage{DRIMSeq} package, return a \Rclass{ggplot} object which can be further modified using \CRANpkg{ggplot2} package. For example, the user can increase the size of points. <>= library(ggplot2) ggp <- plotPrecision(d) ggp + geom_point(size = 4) @ \subsubsection{Proportion estimation} In this step, we estimate the full model regression coefficients, fitted proportions and likelihoods. We use the same design matrix as in the precision estimation step. By default, \Rcode{one\_way = TRUE} which means that whenever the design corresponds to multiple group fitting, the 'one way' shortcut algorithm will be used, which in fact corresponds to the first implementation of \Rpackage{DRIMSeq}. Transcript proportions are estimated for each condition separately and then the regression coefficients are calculated using matrix operations. The 'one way' algorithm is adapted from the \Rfunction{glmFit} function in \Biocpkg{edgeR} \cite{McCarthy2012}. By setting \Rcode{verbose = 1}, we can see that the one way approach is used with the current design. When \Rcode{bb\_model = TRUE} (the default), additionally to the gene-level Dirichlet-multinomial estimates the transcript-level beta-binomial results will be computed. <>= d <- dmFit(d, design = design_full, verbose = 1) d ## Get fitted proportions head(proportions(d)) ## Get the DM regression coefficients (gene-level) head(coefficients(d)) ## Get the BB regression coefficients (feature-level) head(coefficients(d), level = "feature") @ \subsubsection{Testing for differential transcript usage} \label{DS_testing} Calling the \Rfunction{dmTest} function results in two calculations. First, null model is fitted. This null model can be defined by the user via \Rcode{coef}, \Rcode{design} or \Rcode{contrast} parameters. Second, likelihood ratio statistics are used to test for the difference between the full and null model. Both steps are done at the gene and transcript level when \Rcode{bb\_model = TRUE}. In our example, we would like to test whether there are differences in transcript usage between control (CTL) and knock-down (KD). We can achieve that by using the \Rcode{coef} parameter which should indicate which columns of the full design should be removed to get the null design. We define it equal to \Rcode{"groupKD"}. Then the null design has only an intercept column which means that all the samples are treated as if they came from one condition. Note that \Rcode{one\_way = TRUE} and the one way approach is used. <>= d <- dmTest(d, coef = "groupKD", verbose = 1) design(d) head(results(d), 3) @ The same can be achieved by directly defining the null design matrix with the \Rcode{design} parameter. <>= design_null <- model.matrix(~ 1, data = samples(d)) design_null d <- dmTest(d, design = design_null) head(results(d), 3) @ Or by using the \Rcode{contrast} parameter. The null design is calculated using the approach from the \Rfunction{glmLRT} function in \Biocpkg{edgeR} \cite{McCarthy2012}. <>= contrast <- c(0, 1) d <- dmTest(d, contrast = contrast) design(d) head(results(d), 3) @ To obtain the results of likelihood ratio tests, you have to call the function \Rfunction{results}, which returns a data frame with likelihood ratio statistics, degrees of freedom, p-values and Benjamini and Hochberg (BH) adjusted p-values for each gene by default and for each transcript when \Rcode{level = "feature"}. <>= head(results(d, level = "feature"), 3) @ You can plot a histogram of gene-level and transcript-level p-values. <>= plotPValues(d) plotPValues(d, level = "feature") @ For genes of interest, you can make plots (bar plots, line plots, box plots, ribbon plots) of observed and estimated with Dirichlet-multinomial model transcript ratios. You have to define the \Rcode{group\_variable} parameter which should indicate a variable from \Rcode{samples(d)}. Currently, plots can be done only for categorical variables. We choose the \Rcode{"group"} column since it corresponds to the comparison of our interest. Estimated proportions are marked with diamond shapes. As an example, we plot the top significant gene. <>= res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] plotProportions(d, gene_id = top_gene_id, group_variable = "group") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "lineplot") plotProportions(d, gene_id = top_gene_id, group_variable = "group", plot_type = "ribbonplot") @ \subsubsection{Two-stage test} \Rpackage{DRIMSeq} returns gene and transcript level p-values which can be used as an input to the stage-wise analysis \cite{VandenBerge2017} implemented in the \Rcode{stageR} package, currently available on github \url{https://github.com/statOmics/stageR}. As pointed by the authors of \Rcode{stageR}, interpreting both gene-level and transcript-level adjusted p-values does not provide appropriate FDR control and should be avoided. However, applying a stage-wise testing provides a useful biological interpretation of these results and improved statistical performance. In short, the procedure consists of a screening stage and a confirmation stage. In the screening stage, gene-level BH-adjusted p-values are screened to detect genes for which the hypothesis of interest is significantly rejected. Only those genes are further considered in the confirmation stage, where for each gene separately, transcript-level p-values are adjusted to control the FWER and BH-adjusted significance level of the screening stage. It is important to note that transcript-level stage-wise adjusted p-values for genes that do not pass the screening stage are set to \Rcode{NA}. Also the stage-wise adjusted p-values can not be compared to significance level other than chosen in the stage-wise analysis. If that is of interest, one has to rerun this analysis with the new significance level. The following code chunk is not evaluated by this vignette and to run it, user has to make sure that the \Rcode{stageR} package is installed. It shows how one can use the \Rpackage{DRIMSeq} output in the stage-wise analysis. <>= library(stageR) ## Assign gene-level pvalues to the screening stage pScreen <- results(d)$pvalue names(pScreen) <- results(d)$gene_id ## Assign transcript-level pvalues to the confirmation stage pConfirmation <- matrix(results(d, level = "feature")$pvalue, ncol = 1) rownames(pConfirmation) <- results(d, level = "feature")$feature_id ## Create the gene-transcript mapping tx2gene <- results(d, level = "feature")[, c("feature_id", "gene_id")] ## Create the stageRTx object and perform the stage-wise analysis stageRObj <- stageRTx(pScreen = pScreen, pConfirmation = pConfirmation, pScreenAdjusted = FALSE, tx2gene = tx2gene) stageRObj <- stageWiseAdjustment(object = stageRObj, method = "dtu", alpha = 0.05) getSignificantGenes(stageRObj) getSignificantTx(stageRObj) padj <- getAdjustedPValues(stageRObj, order = TRUE, onlySignificantGenes = FALSE) head(padj) @ \subsection{Differential transcript usage analysis between two conditions with accounting for the batch effects} The regression framework implemented in \Rpackage{DRIMSeq} allows to account for the batch effects. Here, this would be the library layout stored in \Rcode{pasilla\_metadata\$LibraryLayout}. The steps of this analysis are the same as described above. The only difference is that we have to include the library layout variable in the \Rcode{sample} slot in the \Rcode{dmDSdata} object and define a full model that contains the batch effect. <>= pasilla_samples2 <- data.frame(sample_id = pasilla_metadata$SampleName, group = pasilla_metadata$condition, library_layout = pasilla_metadata$LibraryLayout) d2 <- dmDSdata(counts = pasilla_counts, samples = pasilla_samples2) ## Subsetting to a vignette runnable size d2 <- d2[names(d2) %in% gene_id_subset, ] ## Filtering d2 <- dmFilter(d2, min_samps_gene_expr = 7, min_samps_feature_expr = 3, min_gene_expr = 10, min_feature_expr = 10) ## Create the design matrix design_full2 <- model.matrix(~ group + library_layout, data = samples(d2)) design_full2 ## To make the analysis reproducible set.seed(123) ## Calculate precision d2 <- dmPrecision(d2, design = design_full2) common_precision(d2) head(genewise_precision(d2)) plotPrecision(d2) ## Fit proportions d2 <- dmFit(d2, design = design_full2, verbose = 1) ## Test for DTU d2 <- dmTest(d2, coef = "groupKD", verbose = 1) design(d2) head(results(d2), 3) ## Plot p-value distribution plotPValues(d2) @ <>= ## Plot the top significant gene res2 <- results(d2) res2 <- res2[order(res2$pvalue, decreasing = FALSE), ] top_gene_id2 <- res2$gene_id[1] ggp <- plotProportions(d2, gene_id = top_gene_id2, group_variable = "group") ggp + facet_wrap(~ library_layout) @ %------------------------------------------------------------------------------ % tuQTL analysis workflow %------------------------------------------------------------------------------ \section{tuQTL analysis workflow} In the transcript usage QTL analysis, we want to identify genetic variants (here, bi-allelic SNPs) that are associated with changes in transcript usage. Such SNPs are then called transcript usage quantitative trait locies (tuQTLs). Ideally, we would like to test associations of every SNP with every gene. However, such an approach would be very costly computationally and in terms of multiple testing correction. Under the assumption that SNPs that directly affect transcript usage are likely to be placed in the close surrounding of genes, we test only the SNPs that are located within the gene body and within some range upstream and downstream of the gene. \subsection{Example data} To demonstrate the tuQTL analysis with the \Rpackage{DRIMSeq} package, we use data from the GEUVADIS project \cite{Lappalainen2013}, where 462 RNA-Seq samples from lymphoblastoid cell lines were obtained. The genome sequencing data of the same individuals is provided by the 1000 Genomes Project. The samples in this project come from five populations: CEPH (CEU), Finns (FIN), British (GBR), Toscani (TSI) and Yoruba (YRI). We use transcript quantification (expected counts from FluxCapacitor) and genotypes available on the GEUVADIS project website \url{http://www.ebi.ac.uk/Tools/geuvadis-das/}, and the Gencode v12 gene annotation is available at \url{http://www.gencodegenes.org/releases/12.html}. In order to make this vignette runnable, we perform the analysis on subsets of bi-allelic SNPs and transcript expected counts for CEPH population (91 individuals) that correspond to 50 randomly selected genes from chromosome 19. The full dataset can be accessed from \Biocexptpkg{GeuvadisTranscriptExpr} package along with the description of preprocessing steps. \subsection{tuQTL analysis with the DRIMSeq package} Assuming you have gene annotation, feature counts and bi-allelic genotypes that are expressed in terms of the number of alleles different from the reference, the \Rpackage{DRIMSeq} workflow for tuQTL analysis is analogous to the one for differential transcript usage. First, we have to create a \Rclass{dmSQTLdata} object, which contains feature counts, sample information and genotypes. Similarly as in the differential transcript usage pipeline, results from every step are added to this object and at the end of the analysis, it contains precision estimates, proportions estimates, likelihood ratio statistics, p-values, adjusted p-values. As new elements are added, the object also changes its name \Rclass{dmSQTLdata} $\rightarrow$ \Rclass{dmSQTLprecision} $\rightarrow$ \Rclass{dmSQTLfit} $\rightarrow$ \Rclass{dmSQTLtest}. For each object, slots and methods are inherited from the previous one. \subsubsection{Loading GEUVADIS data into R} We use the subsets of data defined in the \Biocexptpkg{GeuvadisTranscriptExpr} package. <>= library(GeuvadisTranscriptExpr) geuv_counts <- GeuvadisTranscriptExpr::counts geuv_genotypes <- GeuvadisTranscriptExpr::genotypes geuv_gene_ranges <- GeuvadisTranscriptExpr::gene_ranges geuv_snp_ranges <- GeuvadisTranscriptExpr::snp_ranges @ Load the \Rpackage{DRIMSeq} package. <>= library(DRIMSeq) @ In the tuQTL analysis, an initial data object \Robject{d} is of \Robject{dmSQTLdata} class and, additionally to feature counts and sample information, it contains genotypes of SNPs that are in some surrounding of genes. This surrounding is defined with the parameter \Rcode{window}. In order to find out which SNPs should be tested with which genes, the \Rfunction{dmSQTLdata} functions requires as an input the location of genes (\Rcode{gene\_ranges}) and SNPs (\Rcode{snp\_ranges}) stored as \Rclass{GRanges} objects. Variables with transcript IDs and gene IDs in the \Robject{counts} data frame must have names \Rcode{feature\_id} and \Rcode{gene\_id}, respectively. In the \Robject{genotypes} data frame, the variable with SNP IDs must have name \Rcode{snp\_id}. <>= colnames(geuv_counts)[c(1,2)] <- c("feature_id", "gene_id") colnames(geuv_genotypes)[4] <- "snp_id" geuv_samples <- data.frame(sample_id = colnames(geuv_counts)[-c(1,2)]) d <- dmSQTLdata(counts = geuv_counts, gene_ranges = geuv_gene_ranges, genotypes = geuv_genotypes, snp_ranges = geuv_snp_ranges, samples = geuv_samples, window = 5e3) d @ In our tuQTL analysis, we do not repeat tests for the SNPs that define the same grouping of samples (genotype). We identify SNPs with identical genotypes across the samples and assign them to blocks. Estimation and testing are done at the block level, but the returned results are extended to a SNP level by repeating the block statistics for each SNP that belongs to a given block. The data summary plot \Rfunction{plotData} produces three histograms: the number of features per gene, the number of SNPs per gene and the number of blocks per gene. <>= plotData(d, plot_type = "features") plotData(d, plot_type = "snps") plotData(d, plot_type = "blocks") @ \subsubsection{Filtering} The filtering step eliminates genes and features with low expression, as in the differential transcript usage analysis (see section \ref{DS_filtering}). Additionally, it filters out the SNPs/blocks that do not define at least two genotypes where each of them is present in at least \Robject{minor\_allele\_freq} individuals. Usually, \Robject{minor\_allele\_freq} is equal to roughly 5\% of the total sample size. Ideally, we would like that genes were expressed at some minimal level in all samples because this would lead to better estimates of feature ratios. However, for some genes, missing values may be present in the counts data, or genes may be lowly expressed in some samples. Setting up \Robject{min\_samps\_gene\_expr} to 91 may exclude too many genes from the analysis. We can be slightly less stringent by taking, for example, \Rcode{min\_samps\_gene\_expr = 70}. <>= d <- dmFilter(d, min_samps_gene_expr = 70, min_samps_feature_expr = 5, minor_allele_freq = 5, min_gene_expr = 10, min_feature_expr = 10) @ \subsubsection{Precision estimation} In the DTU analysis (section \ref{DS_precision_estimation}), the full model used in precision estimation has to be defined by the user. Here, full models are defined by genotypes. For a given SNP, genotype can have numeric values of 0, 1, and 2. When \Rcode{one\_way = TRUE}, multiple group fitting is performed. When \Rcode{one\_way = FALSE}, a regression framework is used with the design matrix defined by a formula $\sim group$ where $group$ is a continuous (not categorical) variable with genotype values 0, 1, and 2. For the tuQTL analysis, it has an additional parameter called \Rcode{speed}. If \Rcode{speed = FALSE}, gene-wise precisions are calculated for each gene-block. This calculation may take a long time, since there can be hundreds of SNPs/blocks per gene. If \Rcode{speed} is set to \Rcode{TRUE}, there will be only one precision calculated per gene (assuming a null model, i.e., model with intercept only), and it will be assigned to all the blocks matched to this gene. In the default setting, \Rcode{speed = TRUE} and common precision is used as an initial value in the grid approach to estimate gene-wise precisions with NO moderation, since the sample size is quite large. Again, this step of the pipeline is one of the most time consuming. Thus consider using \Rcode{BPPARAM = BiocParallel::MulticoreParam()} with more than one worker when performing real data analysis. <>= ## To make the analysis reproducible set.seed(123) ## Calculate precision d <- dmPrecision(d) plotPrecision(d) @ \subsubsection{Proportion estimation} Dirichlet-multinomial full model proportions/coefficients and likelihoods are estimated for each gene-block pair. Currently, no transcript-level analysis are implemented in the tuQTL workflow. <>= d <- dmFit(d) @ \subsubsection{Testing for tuQTLs} \Rfunction{dmTest} function estimates gene-level null model proportions/coefficients and likelihoods and performs the likelihood ratio test. The null models equal to models with intercept only. In contrast to the DTU analysis, there are some additional challenges that have to handled in the tuQTL analysis. They include a large number of tests per gene with highly variable allele frequencies (models) and linkage disequilibrium. As in other sQTL studies, we apply a permutation approach to empirically assess the null distribution of associations and use it for the adjustment of nominal p-values. There are two permutation schemes available. When \Rcode{permutation\_mode} equals to \Rcode{"all\_genes"}, the null p-value distribution is calculated from all the genes. When \Rcode{permutation\_mode = "per\_gene"}, null distribution of p-values is calculated for each gene separately based on permutations of this individual gene. The latter approach may take a lot of computational time. We suggest using the first option, which is also the default one. The function \Rfunction{results} returns a data frame with likelihood ratio statistics, degrees of freedom, p-values and Benjamini and Hochberg adjusted p-values for each gene-block/SNP pair. <>= d <- dmTest(d) plotPValues(d) head(results(d)) @ You can plot the observed transcript ratios for the tuQTLs of interest. Plotting the fitted values is not possible as we do not return this estimates due to their size. When the sample size is large, we recommend using box plots as a \Rcode{plot\_type}. We plot a tuQTL with the lowest p-value. <>= res <- results(d) res <- res[order(res$pvalue, decreasing = FALSE), ] top_gene_id <- res$gene_id[1] top_snp_id <- res$snp_id[1] plotProportions(d, gene_id = top_gene_id, snp_id = top_snp_id) plotProportions(d, gene_id = top_gene_id, snp_id = top_snp_id, plot_type = "boxplot2") @ %-------------------------------------------------- % Session information %-------------------------------------------------- \section{Session information} <>= sessionInfo() @ %-------------------------------------------------- % References %-------------------------------------------------- \bibliography{References} \end{document} DRIMSeq/vignettes/References.bib0000755000175200017520000003210414136051631017552 0ustar00biocbuildbiocbuild@article{Nowicka2016, author = {Nowicka, M and Robinson, M D}, doi = {10.12688/f1000research.8900.2}, journal = {F1000Research}, number = {1356}, title = {{DRIMSeq: a Dirichlet-multinomial framework for multivariate count outcomes in genomics [version 2; referees: 2 approved]}}, url = {https://f1000research.com/articles/5-1356/v2}, volume = {5}, year = {2016} } @article{Brooks2011, abstract = {Alternative splicing is generally controlled by proteins that bind directly to regulatory sequence elements and either activate or repress splicing of adjacent splice sites in a target pre-mRNA. Here, we have combined RNAi and mRNA-seq to identify exons that are regulated by Pasilla (PS), the Drosophila melanogaster ortholog of mammalian NOVA1 and NOVA2. We identified 405 splicing events in 323 genes that are significantly affected upon depletion of ps, many of which were annotated as being constitutively spliced. The sequence regions upstream and within PS-repressed exons and downstream from PS-activated exons are enriched for YCAY repeats, and these are consistent with the location of these motifs near NOVA-regulated exons in mammals. Thus, the RNA regulatory map of PS and NOVA1/2 is highly conserved between insects and mammals despite the fact that the target gene orthologs regulated by PS and NOVA1/2 are almost entirely nonoverlapping. This observation suggests that the regulatory codes of individual RNA binding proteins may be nearly immutable, yet the regulatory modules controlled by these proteins are highly evolvable.}, author = {Brooks, Angela N and Yang, Li and Duff, Michael O and Hansen, Kasper D and Park, Jung W and Dudoit, Sandrine and Brenner, Steven E and Graveley, Brenton R}, file = {:Users/gosia/Documents/Mendeley Desktop/Brooks et al/Brooks et al. - 2011 - Conservation of an RNA regulatory map between Drosophila and mammals.pdf:pdf}, institution = {Department of Molecular and Cell Biology, University of California, Berkeley, California 94720, USA.}, journal = {Genome research}, keywords = {Pasilla}, mendeley-groups = {Data}, mendeley-tags = {Pasilla}, number = {2}, pages = {193--202}, title = {{Conservation of an RNA regulatory map between Drosophila and mammals.}}, volume = {21}, year = {2011} } @article{Lappalainen2013, abstract = {Genome sequencing projects are discovering millions of genetic variants in humans, and interpretation of their functional effects is essential for understanding the genetic basis of variation in human traits. Here we report sequencing and deep analysis of messenger RNA and microRNA from lymphoblastoid cell lines of 462 individuals from the 1000 Genomes Project--the first uniformly processed high-throughput RNA-sequencing data from multiple human populations with high-quality genome sequences. We discover extremely widespread genetic variation affecting the regulation of most genes, with transcript structure and expression level variation being equally common but genetically largely independent. Our characterization of causal regulatory variation sheds light on the cellular mechanisms of regulatory and loss-of-function variation, and allows us to infer putative causal variants for dozens of disease-associated loci. Altogether, this study provides a deep understanding of the cellular mechanisms of transcriptome variation and of the landscape of functional variants in the human genome.}, author = {Lappalainen, Tuuli and Sammeth, Michael and Friedl{\"{a}}nder, Marc R and {'t Hoen}, Peter A C and Monlong, Jean and Rivas, Manuel A and Gonz{\`{a}}lez-Porta, Mar and Kurbatova, Natalja and Griebel, Thasso and Ferreira, Pedro G and Barann, Matthias and Wieland, Thomas and Greger, Liliana and van Iterson, Maarten and Alml{\"{o}}f, Jonas and Ribeca, Paolo and Pulyakhina, Irina and Esser, Daniela and Giger, Thomas and Tikhonov, Andrew and Sultan, Marc and Bertier, Gabrielle and MacArthur, Daniel G and Lek, Monkol and Lizano, Esther and Buermans, Henk P J and Padioleau, Ismael and Schwarzmayr, Thomas and Karlberg, Olof and Ongen, Halit and Kilpinen, Helena and Beltran, Sergi and Gut, Marta and Kahlem, Katja and Amstislavskiy, Vyacheslav and Stegle, Oliver and Pirinen, Matti and Montgomery, Stephen B and Donnelly, Peter and McCarthy, Mark I and Flicek, Paul and Strom, Tim M and Lehrach, Hans and Schreiber, Stefan and Sudbrak, Ralf and Carracedo, Angel and Antonarakis, Stylianos E and H{\"{a}}sler, Robert and Syv{\"{a}}nen, Ann-Christine and van Ommen, Gert-Jan and Brazma, Alvis and Meitinger, Thomas and Rosenstiel, Philip and Guig{\'{o}}, Roderic and Gut, Ivo G and Estivill, Xavier and Dermitzakis, Emmanouil T}, file = {:Users/gosia/Documents/Mendeley Desktop/Lappalainen et al/Lappalainen et al. - 2013 - Transcriptome and genome sequencing uncovers functional variation in humans(2).pdf:pdf;:Users/gosia/Documents/Mendeley Desktop/Lappalainen et al/Lappalainen et al. - 2013 - Transcriptome and genome sequencing uncovers functional variation in humans.pdf:pdf}, issn = {1476-4687}, journal = {Nature}, keywords = {Alleles,Cell Line,Exons,Exons: genetics,GEUVADIS,Gene Expression Profiling,Genetic Variation,Genetic Variation: genetics,Genome,High-Throughput Nucleotide Sequencing,Human,Human: genetics,Humans,Messenger,Messenger: analysis,Messenger: genetics,Polymorphism,Quantitative Trait Loci,Quantitative Trait Loci: genetics,RNA,Sequence Analysis,Single Nucleotide,Single Nucleotide: genetics,Transcriptome,Transcriptome: genetics,Transformed}, mendeley-groups = {sQTL analysis/Geuvadis,.PhD report CM2,sQTL analysis/Data}, mendeley-tags = {GEUVADIS}, number = {7468}, pages = {506--11}, pmid = {24037378}, title = {{Transcriptome and genome sequencing uncovers functional variation in humans.}}, url = {http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=3918453{\&}tool=pmcentrez{\&}rendertype=abstract}, volume = {501}, year = {2013} } @article{Bray2016, abstract = {We present kallisto, an RNA-seq quantification program that is two orders of magnitude faster than previous approaches and achieves similar accuracy. Kallisto pseudoaligns reads to a reference, producing a list of transcripts that are compatible with each read while avoiding alignment of individual bases. We use kallisto to analyze 30 million unaligned paired-end RNA-seq reads in {\textless}10 min on a standard laptop computer. This removes a major computational bottleneck in RNA-seq analysis.}, author = {Bray, Nicolas L and Pimentel, Harold and Melsted, Pall and Pachter, Lior}, issn = {1546-1696}, journal = {Nat Biotech}, keywords = {kallisto}, mendeley-groups = {.DRIMSeq paper,RNA-seq quantification/Transcript quantification}, mendeley-tags = {kallisto}, month = {apr}, publisher = {Nature Publishing Group, a division of Macmillan Publishers Limited. All Rights Reserved.}, title = {{Near-optimal probabilistic RNA-seq quantification}}, url = {http://dx.doi.org/10.1038/nbt.3519 http://10.0.4.14/nbt.3519 http://www.nature.com/nbt/journal/vaop/ncurrent/abs/nbt.3519.html{\#}supplementary-information}, volume = {advance on}, year = {2016} } @article{VandenBerge2017, abstract = {Background: Reductions in sequencing cost and innovations in expression quantification have prompted an emergence of RNA-seq studies with complex designs and data analysis at transcript resolution. These applications involve multiple hypotheses per gene, leading to challenging multiple testing problems. Conventional approaches provide separate top-lists for every contrast and false discovery rate (FDR) control at individual hypothesis level. Hence, they fail to establish proper gene-level error control, which compromises downstream validation experiments. Tests that aggregate individual hypotheses are more powerful and provide gene-level FDR control, but in the RNA-seq literature no methods are available for post-hoc analysis of individual hypotheses. Results: We introduce a two-stage procedure that leverages the increased power of aggregated hypothesis tests while maintaining high biological resolution by post-hoc analysis of genes passing the screening hypothesis. Our method is evaluated on simulated and real RNA-seq experiments. It provides gene-level FDR control in studies with complex designs while boosting power for interaction effects without compromising the discovery of main effects. In a differential transcript usage/expression context, stage-wise testing gains power by aggregating hypotheses at the gene level, while providing transcript-level assessment of genes passing the screening stage. Finally, a prostate cancer case study highlights the relevance of combining gene with transcript level results. Conclusion: Stage-wise testing is a general paradigm that can be adopted whenever individual hypotheses can be aggregated. In our context, it achieves an optimal middle ground between biological resolution and statistical power while providing gene-level FDR control, which is beneficial for downstream biological interpretation and validation.}, author = {{Van den Berge}, Koen and Soneson, Charlotte and Robinson, Mark D and Clement, Lieven}, file = {:Users/gosia/Mendeley Desktop/Van den Berge et al/Van den Berge et al. - 2017 - A general and powerful stage-wise testing procedure for differential expression and differential transcrip.pdf:pdf}, journal = {bioRxiv}, mendeley-groups = {RNA-seq DE,.DRIMSeq paper}, month = {feb}, title = {{A general and powerful stage-wise testing procedure for differential expression and differential transcript usage}}, url = {http://biorxiv.org/content/early/2017/02/16/109082.abstract}, year = {2017} } @article{McCarthy2012, abstract = {A flexible statistical framework is developed for the analysis of read counts from RNA-Seq gene expression studies. It provides the ability to analyse complex experiments involving multiple treatment conditions and blocking variables while still taking full account of biological variation. Biological variation between RNA samples is estimated separately from the technical variation associated with sequencing technologies. Novel empirical Bayes methods allow each gene to have its own specific variability, even when there are relatively few biological replicates from which to estimate such variability. The pipeline is implemented in the edgeR package of the Bioconductor project. A case study analysis of carcinoma data demonstrates the ability of generalized linear model methods (GLMs) to detect differential expression in a paired design, and even to detect tumour-specific expression changes. The case study demonstrates the need to allow for gene-specific variability, rather than assuming a common dispersion across genes or a fixed relationship between abundance and variability. Genewise dispersions de-prioritize genes with inconsistent results and allow the main analysis to focus on changes that are consistent between biological replicates. Parallel computational approaches are developed to make non-linear model fitting faster and more reliable, making the application of GLMs to genomic data more convenient and practical. Simulations demonstrate the ability of adjusted profile likelihood estimators to return accurate estimators of biological variability in complex situations. When variation is gene-specific, empirical Bayes estimators provide an advantageous compromise between the extremes of assuming common dispersion or separate genewise dispersion. The methods developed here can also be applied to count data arising from DNA-Seq applications, including ChIP-Seq for epigenetic marks and DNA methylation analyses.}, author = {McCarthy, Davis J. and Chen, Yunshun and Smyth, Gordon K.}, file = {:Users/gosia/Mendeley Desktop/McCarthy, Chen, Smyth/McCarthy, Chen, Smyth - 2012 - Differential expression analysis of multifactor RNA-Seq experiments with respect to biological variation.pdf:pdf}, journal = {Nucleic Acids Research}, keywords = {edgeR}, mendeley-groups = {.CM2 PhD report,.DRIMSeq paper,RNA-seq DE/Gene DE/edgeR,Project DM/edgeR}, mendeley-tags = {edgeR}, number = {10}, pages = {4288--4297}, pmid = {22287627}, title = {{Differential expression analysis of multifactor RNA-Seq experiments with respect to biological variation}}, volume = {40}, year = {2012} } @article{Danaher1988, abstract = {We develop estimates for the parameters of the Dirichlet-multinomial distribution (DMD) when there is insufficient data to obtain maximum likelihood or method of moment estimates known in the literature. We do, however, have supplemetary beta-binomial data pertaining to the marginals of the DMD, and use these data when estimating the DMD parameters. A real situation and data set are given where our estimates are applicable.}, annote = {doi: 10.1080/03610928808829713}, author = {Danaher, Peter J}, doi = {10.1080/03610928808829713}, file = {:Users/gosia/Mendeley Desktop/Danaher/Danaher - 1988 - Parameter estimation for the dirichlet-multinomial distribution using supplementary beta-binomial data(2).pdf:pdf}, issn = {0361-0926}, journal = {Communications in Statistics - Theory and Methods}, mendeley-groups = {Project DM/Beta-Binomial}, month = {jan}, number = {6}, pages = {1777--1788}, publisher = {Taylor {\&} Francis}, title = {{Parameter estimation for the dirichlet-multinomial distribution using supplementary beta-binomial data}}, url = {http://dx.doi.org/10.1080/03610928808829713}, volume = {17}, year = {1988} }