apcluster/0000755000176200001440000000000014170327412012255 5ustar liggesusersapcluster/NAMESPACE0000644000176200001440000000172414170236442013502 0ustar liggesusersuseDynLib(apcluster) import("methods") importFrom("graphics", "plot", "axis", "frame", "layout", "legend", "lines", "pairs", "par", "points", "segments", "title") importFrom("grDevices", "dev.flush", "dev.hold", "rainbow", "heat.colors") importFrom("stats", "cutree", "heatmap", "as.hclust", "as.dendrogram", "cor", "median", "order.dendrogram", "quantile", "rnorm", "runif") importFrom("Rcpp", "evalCpp") import("Matrix") export("apclusterDemo", "negDistMat", "expSimMat", "corSimMat", "linSimMat", "linKernel") exportClasses("APResult", "AggExResult", "ExClust") exportMethods("show", "plot", "heatmap", "labels", "cutree", "[", "[[", "similarity", "as.hclust", "as.dendrogram", "length", "apcluster", "apclusterL", "apclusterK", "aggExCluster", "preferenceRange", "as.SparseSimilarityMatrix", "as.DenseSimilarityMatrix") S3method("sort", "ExClust") apcluster/README.md0000644000176200001440000000202614170223535013535 0ustar liggesusers# APCluster - An R Package for Affinity Propagation Clustering Implements Affinity Propagation clustering introduced by Frey and Dueck (2007; [DOI:10.1126/science.1136800](http://dx.doi.org/10.1126/science.1136800)). The algorithms are largely analogous to the 'Matlab' code published by Frey and Dueck. The package further provides leveraged affinity propagation and an algorithm for exemplar-based agglomerative clustering that can also be used to join clusters obtained from affinity propagation. Various plotting functions are available for analyzing clustering results. This is the source code repository. The package can be installed from [CRAN](https://CRAN.R-project.org/package=apcluster). Further information and installation instructions are also available from http://www.bioinf.jku.at/software/apcluster/. The package is maintained by Ulrich Bodenhofer. The package itself has grown over the years in which multiple students have contributed significant parts: Johannes Palme, Chrats Melkonian, Andreas Kothmeier, and Nikola Kosticapcluster/man/0000755000176200001440000000000014170235554013035 5ustar liggesusersapcluster/man/ExClust-class.Rd0000644000176200001440000001054714170232742016021 0ustar liggesusers\name{ExClust-class} \docType{class} \alias{ExClust-class} \alias{ExClust} \alias{exclust} \alias{[,ExClust,index,missing,missing-method} \alias{[[,ExClust,index,missing-method} \alias{length,ExClust-method} \alias{similarity,ExClust-method} \title{Class "ExClust"} \description{S4 class for storing exemplar-based clusterings} \section{Objects}{ Objects of this class can be created by calling \code{\link{cutree}} to cut out a clustering level from a cluster hierarchy of class \code{\linkS4class{AggExResult}}. Moreover, \code{\link{cutree}} can also be used to convert an object of class \code{\linkS4class{APResult}} to class \code{ExClust}. } \section{Slots}{ The following slots are defined for \link{ExClust} objects: \describe{ \item{\code{l}:}{number of samples in the data set} \item{\code{sel}:}{subset of samples used for leveraged clustering} \item{\code{exemplars}:}{vector containing indices of exemplars} \item{\code{clusters}:}{list containing the clusters; the i-th component is a vector of indices of data points belonging to the i-th exemplar (including the exemplar itself)} \item{\code{idx}:}{vector of length \code{l} realizing a sample-to-exemplar mapping; the i-th entry contains the index of the exemplar the i-th sample belongs to} \item{\code{sim}:}{similarity matrix; only available if the preceding clustering method was called with \code{includeSim=TRUE}.} \item{\code{call}:}{method call of the preceding clustering method} } } \section{Methods}{ \describe{ \item{plot}{\code{signature(x="ExClust")}: see \code{\link{plot-methods}}} \item{plot}{\code{signature(x="ExClust", y="matrix")}: see \code{\link{plot-methods}}} \item{heatmap}{\code{signature(x="ExClust")}: see \code{\link{heatmap-methods}}} \item{heatmap}{\code{signature(x="ExClust", y="matrix")}: see \code{\link{heatmap-methods}}} \item{show}{\code{signature(object="ExClust")}: see \code{\link{show-methods}}} \item{labels}{\code{signature(object="ExClust")}: see \code{\link{labels-methods}}} \item{cutree}{\code{signature(object="ExClust", k="ANY", h="ANY")}: see \code{\link{cutree-methods}}} \item{length}{\code{signature(x="ExClust")}: gives the number of clusters.} \item{sort}{\code{signature(x="ExClust")}: see \code{\link{sort-methods}}} \item{as.hclust}{\code{signature(x="ExClust")}: see \code{\link{coerce-methods}}} \item{as.dendrogram}{\code{signature(object="ExClust")}: see \code{\link{coerce-methods}}} } } \section{Accessors}{ In the following code snippets, \code{x} is an \code{ExClust} object. \describe{ \item{}{\code{x[[i]]}: Returns the i-th cluster as a list of indices of samples belonging to the i-th cluster. } \item{}{\code{x[i]}: Returns a list of integer vectors with the indices of samples belonging to this cluster. The list has as many components as the argument \code{i} has elements. A list is returned even if \code{i} is a single integer. } \item{similarity}{\code{signature(x="ExClust")}: gives the similarity matrix. } } } \author{Ulrich Bodenhofer, Andreas Kothmeier & Johannes Palme \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \seealso{\code{\link{aggExCluster}}, \code{\link{show-methods}}, \code{\link{plot-methods}}, \code{\link{labels-methods}}, \code{\link{cutree-methods}}, \code{\linkS4class{AggExResult}}, \code{\linkS4class{APResult}}} \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(20, 0.2, 0.05), rnorm(20, 0.8, 0.06)) cl2 <- cbind(rnorm(25, 0.7, 0.08), rnorm(25, 0.3, 0.05)) x <- rbind(cl1, cl2) ## compute similarity matrix (negative squared Euclidean) sim <- negDistMat(x, r=2) ## run affinity propagation aggres <- aggExCluster(sim) ## extract level with two clusters excl <- cutree(aggres, k=2) ## show details of clustering results show(excl) ## plot information about clustering run plot(excl, x) } \keyword{classes} apcluster/man/apcluster-package.Rd0000644000176200001440000000532414170233630016714 0ustar liggesusers\name{apcluster-package} \alias{apcluster-package} \docType{package} \title{APCluster Package} \description{ The apcluster package implements affinity propagation according to Frey and Dueck and a method for exemplar-based agglomerative clustering. It further offers various functions for plotting clustering results. } \details{The central function is \code{\link{apcluster}}. It runs affinity propagation on a given similarity matrix or it creates a similarity matrix for a given data set and similarity measure and runs affinity propagation on this matrix. The function returns an \code{\linkS4class{APResult}} object from which the clustering itself and information about the affinity propagation run can be obtained. Leveraged affinity propagation clustering \code{\link{apclusterL}} allows efficient clustering of large datasets by using only a subset of the similarities. The package further implements an exemplar-based agglomerative clustering method \code{\link{aggExCluster}} that can be used for computing a complete cluster hierarchy, but also for joining fine-grained clusters previously obtained by affinity propagation clustering. Further functions are implemented to visualize the results and to create distance matrices. } \author{Ulrich Bodenhofer, Andreas Kothmeier, Johannes Palme, Chrats Melkonian & Nikola Kostic \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. Frey, B. J. and Dueck, D. (2007) Clustering by passing messages between data points. \emph{Science} \bold{315}, 972-976. DOI: \doi{10.1126/science.1136800}. } \keyword{package} \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(100, 0.2, 0.05), rnorm(100, 0.8, 0.06)) cl2 <- cbind(rnorm(100, 0.7, 0.08), rnorm(100, 0.3, 0.05)) x <- rbind(cl1, cl2) ## compute similarity matrix (negative squared Euclidean) sim <- negDistMat(x, r=2) ## run affinity propagation apres <- apcluster(sim, details=TRUE) ## show details of clustering results show(apres) ## plot information about clustering run plot(apres) ## plot clustering result plot(apres, x) ## employ agglomerative clustering to join clusters aggres <- aggExCluster(sim, apres) ## show information show(aggres) show(cutree(aggres, 2)) ## plot dendrogram plot(aggres) ## plot clustering result for k=2 clusters plot(aggres, x, k=2) ## plot heatmap heatmap(apres, sim) ## leveraged apcluster apresL <- apclusterL(s=negDistMat(r=2), x=x, frac=0.2, sweeps=3) ## show details of clustering results show(apresL) ## plot clustering result plot(apresL, x) } apcluster/man/aggExCluster-methods.Rd0000644000176200001440000001573214170233577017375 0ustar liggesusers\name{aggExCluster} \docType{methods} \alias{aggExCluster} \alias{aggexcluster} \alias{aggExCluster-methods} \alias{aggExCluster,matrix,missing-method} \alias{aggExCluster,matrix,ExClust-method} \alias{aggExCluster,Matrix,missing-method} \alias{aggExCluster,Matrix,ExClust-method} \alias{aggExCluster,missing,ExClust-method} \alias{aggExCluster,function,ANY-method} \alias{aggExCluster,character,ANY-method} \title{Exemplar-based Agglomerative Clustering} \description{ Runs exemplar-based agglomerative clustering } \usage{ \S4method{aggExCluster}{matrix,missing}(s, x, includeSim=FALSE) \S4method{aggExCluster}{matrix,ExClust}(s, x, includeSim=FALSE) \S4method{aggExCluster}{Matrix,missing}(s, x, includeSim=FALSE) \S4method{aggExCluster}{Matrix,ExClust}(s, x, includeSim=FALSE) \S4method{aggExCluster}{missing,ExClust}(s, x, includeSim=TRUE) \S4method{aggExCluster}{function,ANY}(s, x, includeSim=TRUE, ...) \S4method{aggExCluster}{character,ANY}(s, x, includeSim=TRUE, ...) } \arguments{ \item{s}{an \eqn{l\times l}{lxl} similarity matrix or a similarity function either specified as the name of a package-provided similarity function as character string or a user provided function object} \item{x}{either a prior clustering of class \code{\linkS4class{ExClust}} (or \code{\linkS4class{APResult}}) or, if called with \code{s} being a function or function name, input data to be clustered (see \code{\link{apcluster}} for a detailed specification)} \item{includeSim}{if \code{TRUE}, the similarity matrix (either computed internally or passed via the \code{s} argument) is stored to the slot \code{sim} of the returned \code{\linkS4class{AggExResult}} object. The default is \code{FALSE} if \code{aggExCluster} has been called for a similarity matrix, otherwise the default is \code{TRUE}.} \item{...}{all other arguments are passed to the selected similarity function as they are.} } \details{\code{aggExCluster} performs agglomerative clustering. Unlike other methods, e.g., the ones implemented in \code{\link{hclust}}, \code{aggExCluster} is computing exemplars for each cluster and its merging objective is geared towards the identification of meaningful exemplars, too. For each pair of clusters, the merging objective is computed as follows: \enumerate{ \item{An intermediate cluster is created as the union of the two clusters.} \item{The potential exemplar is selected from the intermediate cluster as the sample that has the largest average similarity to all other samples in the intermediate cluster.} \item{Then the average similarity of the exemplar with all samples in the first cluster and the average similarity with all samples in the second cluster is computed. These two values measure how well the joint exemplar describes the samples in the two clusters.} \item{The merging objective is finally computed as the average of the two measures above. Hence, we can consider the merging objective as some kind of \dQuote{balanced average similarity to the joint exemplar}.} } In each step, all pairs of clusters are considered and the pair with the largest merging objective is actually merged. The joint exemplar is then chosen as the exemplar of the merged cluster. \code{aggExCluster} can be used in two ways, either by performing agglomerative clustering of an entire data set or by performing agglomerative clustering of data previously clustered by affinity propagation or another clustering algorithm. \enumerate{ \item{Agglomerative clustering of an entire data set can be accomplished either by calling \code{aggExCluster} on a quadratic similarity matrix without further argument or by calling \code{aggExCluster} for a function or function name along with data to be clustered (as argument \code{x}). A full agglomeration run is performed that starts from \code{l} clusters (all samples in separate one-element clusters) and ends with one cluster (all samples in one single cluster).} \item{Agglomerative clustering starting from a given clustering result can be accomplished by calling \code{aggExCluster} for an \code{\linkS4class{APResult}} or \code{\linkS4class{ExClust}} object passed as parameter \code{x}. The similarity matrix can either be passed as argument \code{s} or, if missing, \code{aggExCluster} looks if the similarity matrix is included in the clustering object \code{x}. A cluster hierarchy with numbers of clusters ranging from the number of clusters in \code{x} down to 1 is created.} } The result is stored in an \code{\linkS4class{AggExResult}} object. The slot \code{height} is filled with the merging objective of each of the \code{maxNoClusters-1} merges. The slot \code{order} contains a permutation of the samples/clusters for dendrogram plotting. The algorithm for computing this permutation is the same as the one used in \code{\link{hclust}}. If \code{aggExCluster} was called for an entire data set, the slot \code{label} contains the names of the objects to be clustered (if available, otherwise the indices are used). If \code{aggExCluster} was called for a prior clustering, then labels are set to \sQuote{Cluster 1}, \sQuote{Cluster 2}, etc. } \note{Similarity matrices can be supplied in dense or sparse format. Note, however, that sparse matrices are converted to full dense matrices before clustering which may lead to memory and/or performance bottlenecks for larger data sets.} \value{ Upon successful completion, the function returns an \code{\linkS4class{AggExResult}} object. } \author{Ulrich Bodenhofer, Johannes Palme & Nikola Kostic \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \seealso{\code{\linkS4class{AggExResult}}, \code{\link{apcluster-methods}}, \code{\link{plot-methods}}, \code{\link{heatmap-methods}}, \code{\link{cutree-methods}}} \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(50, 0.2, 0.05), rnorm(50, 0.8, 0.06)) cl2 <- cbind(rnorm(50, 0.7, 0.08), rnorm(50, 0.3, 0.05)) x <- rbind(cl1, cl2) ## compute agglomerative clustering from scratch aggres1 <- aggExCluster(negDistMat(r=2), x) ## show results show(aggres1) ## plot dendrogram plot(aggres1) ## plot heatmap along with dendrogram heatmap(aggres1) ## plot level with two clusters plot(aggres1, x, k=2) ## run affinity propagation apres <- apcluster(negDistMat(r=2), x, q=0.7) ## create hierarchy of clusters determined by affinity propagation aggres2 <- aggExCluster(x=apres) ## show results show(aggres2) ## plot dendrogram plot(aggres2) plot(aggres2, showSamples=TRUE) ## plot heatmap heatmap(aggres2) ## plot level with two clusters plot(aggres2, x, k=2) } \keyword{cluster} \keyword{methods} apcluster/man/coerce-methods.Rd0000644000176200001440000001326014170232666016230 0ustar liggesusers\name{coerce-methods} \docType{methods} \alias{as.hclust} \alias{as.dendrogram} \alias{as.hclust,AggExResult-method} \alias{as.hclust,ExClust-method} \alias{as.dendrogram,AggExResult-method} \alias{as.dendrogram,ExClust-method} \title{Coercion of cluster hierarchies} \description{ Functions for coercing clustering object to hclust and dendrogram objects } \usage{ \S4method{as.hclust}{AggExResult}(x, base=0.05) \S4method{as.hclust}{ExClust}(x, base=0.05, ...) \S4method{as.dendrogram}{AggExResult}(object, base=0.05, useNames=TRUE) \S4method{as.dendrogram}{ExClust}(object, base=0.05, useNames=TRUE, ...) } \arguments{ \item{x}{a clustering result object of class \code{\linkS4class{APResult}}, \code{\linkS4class{ExClust}}, or \code{\linkS4class{AggExResult}}} \item{object}{a clustering result object of class \code{\linkS4class{APResult}}, \code{\linkS4class{ExClust}}, or \code{\linkS4class{AggExResult}}} \item{base}{fraction of height used for the very first join; defaults to 0.05, i.e. the first join appears at 5\% of the total height of the dendrogram (see details below).} \item{useNames}{if \code{TRUE} (default), the labels of the dendrogram are the sample/cluster names (if available); otherwise, the labels are indices.} \item{...}{all other arguments are passed on to \code{\link{aggExCluster}} (see details below).} } \details{ If called for an \code{\linkS4class{AggExResult}} object, \code{as.hclust} creates an \code{\link[stats:hclust]{hclust}} object. The heights are transformed to the interval from \code{base} (height of lowest join) to 1 (height of highest join). If called for an \code{\linkS4class{ExClust}} or \code{\linkS4class{APResult}} object, \code{\link{aggExCluster}} is called internally to create a cluster hierarchy first. This is only possible if the pairwise similarities are included in the \code{sim} slot of \code{x} (see \code{\link{aggExCluster}} on how to ensure this). If \code{x} is an \code{\linkS4class{AggExResult}} object obtained by clustering an entire data set, \code{as.hclust} produces a complete hierarchy. If, however, \code{x} is an \code{\linkS4class{ExClust}} (or \code{\linkS4class{APResult}}) object or an \code{\linkS4class{AggExResult}} obtained by running \code{\link{aggExCluster}} on an \code{\linkS4class{ExClust}} or \code{\linkS4class{APResult}} object, then \code{as.hclust} produces a hierarchy of clusters, not of samples. If called for an \code{\linkS4class{AggExResult}} object, \code{as.dendrogram} creates an \code{\link[stats:dendrogram]{dendrogram}} object. Analogously to \code{as.hclust}, the heights are transformed to the interval ranging from \code{base} (height of lowest join) to 1 (height of highest join). So, any information about heights of merges is lost. If the original join heights are relevant, call \code{\link[apcluster:plot]{plot}} on the original \code{\linkS4class{AggExResult}} object directly without coercing it to a \code{\link[stats:dendrogram]{dendrogram}} object first. If called for an \code{\linkS4class{ExClust}} or \code{\linkS4class{APResult}} object, \code{\link{aggExCluster}} is called first to create a cluster hierarchy. Again this is only possible if the pairwise similarities are included in the \code{sim} slot of \code{object}. If \code{object} is an \code{\linkS4class{AggExResult}} object obtained by clustering an entire data set, \code{as.dendrogram} produces a complete dendrogram. If \code{object} is an \code{\linkS4class{ExClust}} (or \code{\linkS4class{APResult}}) object or an \code{\linkS4class{AggExResult}} obtained by previously running \code{\link{aggExCluster}} on an \code{\linkS4class{ExClust}} or \code{\linkS4class{APResult}} object, then \code{as.dendrogram} produces a complete dendrogram of all samples, too, but with the difference that entire clusters of the previous \code{\linkS4class{ExClust}} or \code{\linkS4class{APResult}} object are not further split up hierarchically. Consequently, if \code{x} is not a complete cluster hierarchy, but a hierarchy of clusters, \code{as.dendrogram(as.hclust(x))} produces a dendrogram of clusters, whereas \code{as.dendrogram(x)} in any case produces a dendrogram of samples (with the special property mentioned above). } \value{ see details above } \author{Ulrich Bodenhofer, Andreas Kothmeier & Johannes Palme \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \seealso{\code{\linkS4class{APResult}}, \code{\linkS4class{AggExResult}}, \code{\linkS4class{ExClust}}, \code{\link{heatmap-methods}}, \code{\link{apcluster}}, \code{\link{apclusterL}}, \code{\link{aggExCluster}}, \code{\link{cutree-methods}}} \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(20, 0.2, 0.05), rnorm(20, 0.8, 0.06)) cl2 <- cbind(rnorm(20, 0.7, 0.08), rnorm(20, 0.3, 0.05)) x <- rbind(cl1, cl2) ## run affinity propagation apres <- apcluster(negDistMat(r=2), x, q=0.7, details=TRUE) ## perform agglomerative clustering of affinity propagation clusters aggres1 <- aggExCluster(x=apres) ## compute and plot dendrogram dend1 <- as.dendrogram(aggres1) dend1 plot(dend1) ## compute and show dendrogram computed from hclust object dend2 <- as.dendrogram(as.hclust(aggres1)) dend2 plot(dend2) ## perform agglomerative clustering of whole data set aggres2 <- aggExCluster(negDistMat(r=2), x) ## compute and plot dendrogram dend3 <- as.dendrogram(aggres2) dend3 plot(dend3) } \keyword{cluster} \keyword{methods} apcluster/man/apclusterK-methods.Rd0000644000176200001440000001602114170233414017073 0ustar liggesusers\name{apclusterK} \docType{methods} \alias{apclusterK} \alias{apclusterK-methods} \alias{apclusterK,matrix,missing-method} \alias{apclusterK,Matrix,missing-method} \alias{apclusterK,dgTMatrix,missing-method} \alias{apclusterK,sparseMatrix,missing-method} \alias{apclusterK,character,ANY-method} \alias{apclusterK,function,ANY-method} \title{Affinity Propagation for Pre-defined Number of Clusters} \description{ Runs affinity propagation clustering for a given similarity matrix adjusting input preferences iteratively in order to achieve a desired number of clusters } \usage{ \S4method{apclusterK}{matrix,missing}(s, x, K, prc=10, bimaxit=20, exact=FALSE, maxits=1000, convits=100, lam=0.9, includeSim=FALSE, details=FALSE, nonoise=FALSE, seed=NA, verbose=TRUE) \S4method{apclusterK}{Matrix,missing}(s, x, K, ...) \S4method{apclusterK}{dgTMatrix,missing}(s, x, K, prc=10, bimaxit=20, exact=FALSE, maxits=1000, convits=100, lam=0.9, includeSim=FALSE, details=FALSE, nonoise=FALSE, seed=NA, verbose=TRUE) \S4method{apclusterK}{sparseMatrix,missing}(s, x, K, ...) \S4method{apclusterK}{function,ANY}(s, x, K, prc=10, bimaxit=20, exact=FALSE, maxits=1000, convits=100, lam=0.9, includeSim=TRUE, details=FALSE, nonoise=FALSE, seed=NA, verbose=TRUE, ...) \S4method{apclusterK}{character,ANY}(s, x, K, prc=10, bimaxit=20, exact=FALSE, maxits=1000, convits=100, lam=0.9, includeSim=TRUE, details=FALSE, nonoise=FALSE, seed=NA, verbose=TRUE, ...) } \arguments{ \item{s}{an \eqn{l\times l}{lxl} similarity matrix in sparse or dense format or a similarity function either specified as the name of a package-provided similarity function as character string or a user provided function object.} \item{x}{input data to be clustered; if \code{x} is a matrix or data frame, rows are interpreted as samples and columns are interpreted as features; apart from matrices or data frames, \code{x} may be any other structured data type that contains multiple data items - provided that an appropriate \code{\link[base:length]{length}} function is available that returns the number of items} \item{K}{desired number of clusters} \item{prc}{the algorithm stops if the number of clusters does not deviate more than prc percent from desired value K; set to 0 if you want to have exactly K clusters} \item{bimaxit}{maximum number of bisection steps to perform; note that no warning is issued if the number of clusters is still not in the desired range} \item{exact}{flag indicating whether or not to compute the initial preference range exactly (see \code{\link{preferenceRange}})} \item{maxits}{maximal number of iterations that \code{\link{apcluster}} should execute} \item{convits}{\code{\link{apcluster}} terminates if the examplars have not changed for \code{convits} iterations} \item{lam}{damping factor for \code{\link{apcluster}}; should be a value in the range [0.5, 1); higher values correspond to heavy damping which may be needed if oscillations occur} \item{includeSim}{if \code{TRUE}, the similarity matrix (either computed internally or passed via the \code{s} argument) is stored to the slot \code{sim} of the returned \code{\linkS4class{APResult}} object. The default is \code{FALSE} if \code{apclusterK} has been called for a similarity matrix, otherwise the default is \code{TRUE}.} \item{details}{if \code{TRUE}, more detailed information about the algorithm's progress is stored in the output object (see \code{\linkS4class{APResult}})} \item{nonoise}{\code{\link{apcluster}} adds a small amount of noise to \code{s} to prevent degenerate cases; if \code{TRUE}, this is disabled} \item{seed}{for reproducibility, the seed of the random number generator can be set to a fixed value, if \code{NA}, the seed remains unchanged} \item{verbose}{flag indicating whether status information should be displayed during bisection} \item{...}{for the methods with signatures \code{character,ANY} and \code{function,ANY}, all other arguments are passed to the selected similarity function as they are; for the methods with signatures \code{Matrix,missing} and \code{sparseMatrix,missing}, further arguments are passed on to the \code{apclusterK} methods with signatures \code{Matrix,missing} and \code{dgTMatrix,missing}, respectively.} } \details{ \code{apclusterK} first runs \code{\link{preferenceRange}} to determine the range of meaningful choices of the input preference \code{p}. Then it decreases \code{p} exponentially for a few iterations to obtain a good initial guess for \code{p}. If the number of clusters is still too far from the desired goal, bisection is applied. When called with a similarity matrix as input, the function performs the procedure described above. When called with the name of a package-provided similarity function or a user-provided similarity function object and input data, the function first computes the similarity matrix before running \code{apclusterK} on this similarity matrix. The similarity matrix is returned for later use as part of the APResult object depending on whether \code{includeSim} was set to \code{TRUE} (see argument description above). Apart from minor adaptations and optimizations, the implementation is largely analogous to Frey's and Dueck's Matlab code (see \url{https://psi.toronto.edu/research/affinity-propagation-clustering-by-message-passing/}). } \value{ Upon successful completion, the function returns a \code{\linkS4class{APResult}} object. } \author{Ulrich Bodenhofer & Andreas Kothmeier \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Frey, B. J. and Dueck, D. (2007) Clustering by passing messages between data points. \emph{Science} \bold{315}, 972-976. DOI: \doi{10.1126/science.1136800}. Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \seealso{\code{\link{apcluster}}, \code{\link{preferenceRange}}, \code{\linkS4class{APResult}}} \examples{ ## create three Gaussian clouds cl1 <- cbind(rnorm(70, 0.2, 0.05), rnorm(70, 0.8, 0.06)) cl2 <- cbind(rnorm(50, 0.7, 0.08), rnorm(50, 0.3, 0.05)) cl3 <- cbind(rnorm(60, 0.8, 0.04), rnorm(60, 0.8, 0.05)) x <- rbind(cl1, cl2, cl3) ## run affinity propagation such that 3 clusters are obtained apres <- apclusterK(negDistMat(r=2), x, K=3) ## show details of clustering results show(apres) ## plot clustering result plot(apres, x) ## create sparse similarity matrix cl1 <- cbind(rnorm(20, 0.2, 0.05), rnorm(20, 0.8, 0.06)) cl2 <- cbind(rnorm(20, 0.7, 0.08), rnorm(20, 0.3, 0.05)) x <- rbind(cl1, cl2) sim <- negDistMat(x, r=2) ssim <- as.SparseSimilarityMatrix(sim, lower=-0.2) ## run apcluster() on the sparse similarity matrix apres <- apclusterK(ssim, K=2) apres } \keyword{cluster} apcluster/man/apcluster-methods.Rd0000644000176200001440000002012614170233677016774 0ustar liggesusers\name{apcluster} \docType{methods} \alias{apcluster} \alias{apcluster-methods} \alias{apcluster,matrix,missing-method} \alias{apcluster,dgTMatrix,missing-method} \alias{apcluster,sparseMatrix,missing-method} \alias{apcluster,Matrix,missing-method} \alias{apcluster,character,ANY-method} \alias{apcluster,function,ANY-method} \title{Affinity Propagation} \description{ Runs affinity propagation clustering } \usage{ \S4method{apcluster}{matrix,missing}(s, x, p=NA, q=NA, maxits=1000, convits=100, lam=0.9, includeSim=FALSE, details=FALSE, nonoise=FALSE, seed=NA) \S4method{apcluster}{dgTMatrix,missing}(s, x, p=NA, q=NA, maxits=1000, convits=100, lam=0.9, includeSim=FALSE, details=FALSE, nonoise=FALSE, seed=NA) \S4method{apcluster}{sparseMatrix,missing}(s, x, ...) \S4method{apcluster}{Matrix,missing}(s, x, ...) \S4method{apcluster}{character,ANY}(s, x, p=NA, q=NA, maxits=1000, convits=100, lam=0.9, includeSim=TRUE, details=FALSE, nonoise=FALSE, seed=NA, ...) \S4method{apcluster}{function,ANY}(s, x, p=NA, q=NA, maxits=1000, convits=100, lam=0.9, includeSim=TRUE, details=FALSE, nonoise=FALSE, seed=NA, ...) } \arguments{ \item{s}{an \eqn{l\times l}{l x l} similarity matrix or a similarity function either specified as the name of a package-provided similarity function as character string or a user provided function object. \code{s} may also be a sparse matrix according to the \pkg{Matrix} package. Internally, \code{apcluster} uses the \code{\linkS4class{dgTMatrix}} class; all other sparse matrices are cast to this class (if possible, otherwise the function quits with an error). If \code{s} is any other object of class \code{\linkS4class{Matrix}}, \code{s} is cast to a regular matrix internally (if possible, otherwise the function quits with an error).} \item{x}{input data to be clustered; if \code{x} is a matrix or data frame, rows are interpreted as samples and columns are interpreted as features; apart from matrices or data frames, \code{x} may be any other structured data type that contains multiple data items - provided that an appropriate \code{\link[base:length]{length}} function is available that returns the number of items} \item{p}{input preference; can be a vector that specifies individual preferences for each data point. If scalar, the same value is used for all data points. If \code{NA}, exemplar preferences are initialized according to the distribution of non-Inf values in \code{s}. How this is done is controlled by the parameter \code{q}.} \item{q}{if \code{p=NA}, exemplar preferences are initialized according to the distribution of non-Inf values in \code{s}. If \code{q=NA}, exemplar preferences are set to the median of non-Inf values in \code{s}. If \code{q} is a value between 0 and 1, the sample quantile with threshold \code{q} is used, whereas \code{q=0.5} again results in the median.} \item{maxits}{maximal number of iterations that should be executed} \item{convits}{the algorithm terminates if the examplars have not changed for \code{convits} iterations} \item{lam}{damping factor; should be a value in the range [0.5, 1); higher values correspond to heavy damping which may be needed if oscillations occur} \item{includeSim}{if \code{TRUE}, the similarity matrix (either computed internally or passed via the \code{s} argument) is stored to the slot \code{sim} of the returned \code{\linkS4class{APResult}} object. The default is \code{FALSE} if \code{apcluster} has been called for a similarity matrix, otherwise the default is \code{TRUE}.} \item{details}{if \code{TRUE}, more detailed information about the algorithm's progress is stored in the output object (see \code{\linkS4class{APResult}})} \item{nonoise}{\code{apcluster} adds a small amount of noise to \code{s} to prevent degenerate cases; if \code{TRUE}, this is disabled} \item{seed}{for reproducibility, the seed of the random number generator can be set to a fixed value before adding noise (see above), if \code{NA}, the seed remains unchanged} \item{...}{for the methods with signatures \code{character,ANY} and \code{function,ANY}, all other arguments are passed to the selected similarity function as they are; for the methods with signatures \code{Matrix,missing} and \code{sparseMatrix,missing}, further arguments are passed on to the \code{apcluster} methods with signatures \code{Matrix,missing} and \code{dgTMatrix,missing}, respectively.} } \details{Affinity Propagation clusters data using a set of real-valued pairwise data point similarities as input. Each cluster is represented by a cluster center data point (the so-called exemplar). The method is iterative and searches for clusters maximizing an objective function called net similarity. When called with a similarity matrix as input (which may also be a sparse matrix according to the \pkg{Matrix} package), the function performs AP clustering. When called with the name of a package-provided similarity function or a user-provided similarity function object and input data, the function first computes the similarity matrix before performing AP clustering. The similarity matrix is returned for later use as part of the \code{\linkS4class{APResult}} object depending on whether \code{includeSim} was set to \code{TRUE} (see argument description above). Apart from minor adaptations and optimizations, the AP clustering functionality of the function \code{apcluster} is largely analogous to Frey's and Dueck's Matlab code (see \url{https://psi.toronto.edu/research/affinity-propagation-clustering-by-message-passing/}). The new argument \code{q} allows for better controlling the number of clusters without knowing the distribution of similarity values. A meaningful range for the parameter \code{p} can be determined using the function \code{\link{preferenceRange}}. Alternatively, a certain fixed number of clusters may be desirable. For this purpose, the function \code{\link{apclusterK}} is available. } \value{ Upon successful completion, the function returns an \code{\linkS4class{APResult}} object. } \author{Ulrich Bodenhofer, Andreas Kothmeier, Johannes Palme & Chrats Melkonian \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Frey, B. J. and Dueck, D. (2007) Clustering by passing messages between data points. \emph{Science} \bold{315}, 972-976. DOI: \doi{10.1126/science.1136800}. Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \seealso{\code{\link{APResult}}, \code{\link{show-methods}}, \code{\link{plot-methods}}, \code{\link{labels-methods}}, \code{\link{preferenceRange}}, \code{\link{apclusterL-methods}}, \code{\link{apclusterK}}} \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(100, 0.2, 0.05), rnorm(100, 0.8, 0.06)) cl2 <- cbind(rnorm(50, 0.7, 0.08), rnorm(50, 0.3, 0.05)) x <- rbind(cl1, cl2) ## compute similarity matrix and run affinity propagation ## (p defaults to median of similarity) apres <- apcluster(negDistMat(r=2), x, details=TRUE) ## show details of clustering results show(apres) ## plot clustering result plot(apres, x) ## plot heatmap heatmap(apres) ## run affinity propagation with default preference of 10% quantile ## of similarities; this should lead to a smaller number of clusters ## reuse similarity matrix from previous run apres <- apcluster(s=apres@sim, q=0.1) show(apres) plot(apres, x) ## now try the same with RBF kernel sim <- expSimMat(x, r=2) apres <- apcluster(s=sim, q=0.2) show(apres) plot(apres, x) ## create sparse similarity matrix cl1 <- cbind(rnorm(20, 0.2, 0.05), rnorm(20, 0.8, 0.06)) cl2 <- cbind(rnorm(20, 0.7, 0.08), rnorm(20, 0.3, 0.05)) x <- rbind(cl1, cl2) sim <- negDistMat(x, r=2) ssim <- as.SparseSimilarityMatrix(sim, lower=-0.2) ## run apcluster() on the sparse similarity matrix apres <- apcluster(ssim, q=0) apres } \keyword{cluster} \keyword{methods}apcluster/man/sort-methods.Rd0000644000176200001440000000721714170233753015762 0ustar liggesusers\name{sort-methods} \docType{methods} \alias{sort} \alias{sort-methods} \alias{sort,APResult-method} \alias{sort,ExClust-method} \title{Sort clusters} \description{ Rearrange clusters according to sort criterion } \usage{ \S4method{sort}{ExClust}(x, decreasing=FALSE, sortBy=c("aggExCluster", "size", "nameExemplar", "noExemplar"), ...) } \arguments{ \item{x}{object of class \code{\linkS4class{APResult}} or \code{\linkS4class{ExClust}}} \item{decreasing}{logical indicating if sorting should be done in decreasing order, see details below} \item{sortBy}{sort criterion, see details below} \item{...}{further arguments are ignored; only defined for S3 method consistency} } \details{ The function \code{sort} takes an \code{\linkS4class{APResult}} or \code{\linkS4class{ExClust}} clustering object \code{x} and creates a new clustering object of the same class, but with clusters arranged according to the sort criterion passed as argument \code{sortBy}: \describe{ \item{\dQuote{aggExCluster}}{(default) order clusters as they would appear in the dendrogram produced by \code{\link{aggExCluster}}. This is also the same ordering in which the clusters are arranged by \code{\link{heatmap}}. Note that this only works if the similarity matrix is included in the input object \code{x}, otherwise an error message is produced.} \item{\dQuote{size}}{sorts clusters according to their size (from small to large).} \item{\dQuote{nameExemplar}}{sorts clusters according to the names of the examplars (if available, otherwise an error is produced).} \item{\dQuote{noExemplar}}{sorts clusters according to the indices of the examplars.} } If \code{decreasing} is \code{TRUE}, the order is reversed and, for example, \code{sortBy="size"} sorts clusters with such that the larger clusters come first. Note that the cluster numbers of \code{x} are not preserved by \code{sort}, i.e. the cluster no. 1 of the object returned by \code{sort} is the one that has been ranked first by \code{sort}, which may not necessarily coincide with cluster no. 1 of the original clustering object \code{x}. Note that this is an S3 method (whereas all other methods in this package are S4 methods). This inconsistency has been introduced in order to avoid interoperability problems with the \pkg{BiocGenerics} package which may overwrite the definition of the \code{sort} generic if it is loaded after the \pkg{apcluster} package. } \value{ returns a copy of \code{x}, but with slots \code{exemplars} and \code{clusters} (see \code{\linkS4class{APResult}} or \code{\linkS4class{ExClust}}) reordered. } \author{Ulrich Bodenhofer \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \seealso{\code{\linkS4class{APResult}}, \code{\linkS4class{ExClust}}} \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(50,0.2,0.05),rnorm(50,0.8,0.06)) cl2 <- cbind(rnorm(50,0.7,0.08),rnorm(50,0.3,0.05)) x <- rbind(cl1,cl2) ## run affinity propagation apres <- apcluster(negDistMat(r=2), x, q=0.7) show(apres) ## show dendrogram plot(aggExCluster(x=apres)) ## default sort order: like in heatmap or dendrogram show(sort(apres)) ## show dendrogram (note the different cluster numbers!) plot(aggExCluster(x=sort(apres))) ## sort by size show(sort(apres, decreasing=TRUE, sortBy="size")) } \keyword{cluster} \keyword{methods} apcluster/man/apclusterL-methods.Rd0000644000176200001440000001773114170233433017106 0ustar liggesusers\name{apclusterL} \docType{methods} \alias{apclusterL} \alias{apclusterL-methods} \alias{apclusterL,matrix,missing-method} \alias{apclusterL,character,ANY-method} \alias{apclusterL,function,ANY-method} \title{Leveraged Affinity Propagation} \description{ Runs leveraged affinity propagation clustering} \usage{ \S4method{apclusterL}{matrix,missing}(s, x, sel, p=NA, q=NA, maxits=1000, convits=100, lam=0.9, includeSim=FALSE, nonoise=FALSE, seed=NA) \S4method{apclusterL}{character,ANY}(s, x, frac, sweeps, p=NA, q=NA, maxits=1000, convits=100, lam=0.9, includeSim=TRUE, nonoise=FALSE, seed=NA, ...) \S4method{apclusterL}{function,ANY}(s, x, frac, sweeps, p=NA, q=NA, maxits=1000, convits=100, lam=0.9, includeSim=TRUE, nonoise=FALSE, seed=NA, ...) } \arguments{ \item{s}{an \eqn{l \times length(sel)}{l x length(sel)} similarity matrix or a similarity function either specified as the name of a package provided similarity function as character string or a user provided function object for similarity calculation. If \code{s} is supplied as a similarity matrix, the columns must correspond to the same sub-selection of samples as specified in the \code{sel} argument and must be in the same increasing order. For a package- or user-defined similarity function, additional parameters can be specified as appropriate for the chosen method and are passed on to the similarity function via the \code{...} argument (see below). See the package vignette for a non-trivial example or supplying a user-defined similarity measure.} \item{x}{input data to be clustered; if \code{x} is a matrix or data frame, rows are interpreted as samples and columns are interpreted as features; apart from matrices or data frames, \code{x} may be any other structured data type that contains multiple data items - provided that an appropriate \code{\link[base:length]{length}} function is available that returns the number of items} \item{frac}{fraction of samples that should be used for leveraged clustering. The similarity matrix will be generated for all samples against a random fraction of the samples as specified by this parameter.} \item{sweeps}{number of sweeps of leveraged clustering performed with changing randomly selected subset of samples.} \item{sel}{selected sample indices; a vector containing the sample indices of the sample subset used for leveraged AP clustering in increasing order.} \item{p}{input preference; can be a vector that specifies individual preferences for each data point. If scalar, the same value is used for all data points. If \code{NA}, exemplar preferences are initialized according to the distribution of non-Inf values in \code{s}. How this is done is controlled by the parameter \code{q}. See also \code{\link{apcluster}}.} \item{q}{if \code{p=NA}, exemplar preferences are initialized according to the distribution of non-Inf values in \code{s}. If \code{q=NA}, exemplar preferences are set to the median of non-Inf values in \code{s}. If \code{q} is a value between 0 and 1, the sample quantile with threshold \code{q} is used, whereas \code{q=0.5} again results in the median. See also \code{\link{apcluster}}.} \item{maxits}{maximal number of iterations that should be executed} \item{convits}{the algorithm terminates if the examplars have not changed for \code{convits} iterations} \item{lam}{damping factor; should be a value in the range [0.5, 1); higher values correspond to heavy damping which may be needed if oscillations occur} \item{includeSim}{if \code{TRUE}, the similarity matrix (either computed internally or passed via the \code{s} argument) is stored to the slot \code{sim} of the returned \code{\linkS4class{APResult}} object. The default is \code{FALSE} if \code{apclusterL} has been called for a similarity matrix, otherwise the default is \code{TRUE}.} \item{nonoise}{\code{apcluster} adds a small amount of noise to \code{s} to prevent degenerate cases; if \code{TRUE}, this is disabled} \item{seed}{for reproducibility, the seed of the random number generator can be set to a fixed value before adding noise (see above), if \code{NA}, the seed remains unchanged} \item{...}{all other arguments are passed to the selected similarity function as they are; note that possible name conflicts between arguments of \code{apcluster} and arguments of the similarity function may occur; therefore, we recommend to write user-defined similarity functions without additional parameters or to use closures to fix parameters (such as, in the example below);} } \details{Affinity Propagation clusters data using a set of real-valued pairwise similarities as input. Each cluster is represented by a representative cluster center (the so-called exemplar). The method is iterative and searches for clusters maximizing an objective function called net similarity. Leveraged Affinity Propagation reduces dynamic and static load for large datasets. Only a subset of the samples are considered in the clustering process assuming that they provide already enough information about the cluster structure. When called with input data and the name of a package provided or a user provided similarity function the function selects a random sample subset according to the \code{frac} parameter, calculates a rectangular similarity matrix of all samples against this subset and repeats affinity propagation \code{sweep} times. A new sample subset is used for each repetition. The clustering result of the sweep with the highest net similarity is returned. Any parameters specific to the chosen method of similarity calculation can be passed to \code{apcluster} in addition to the parameters described above. The similarity matrix for the best trial is also returned in the result object when requested by the user (argument \code{includeSim}). When called with a rectangular similarity matrix (which represents a column subset of the full similarity matrix) the function performs AP clustering on this similarity matrix. The information about the selected samples is passed to clustering with the parameter \code{sel}. This function is only needed when the user needs full control of distance calculation or sample subset selection. Apart from minor adaptations and optimizations, the implementation of the function \code{apclusterL} is largely analogous to Frey's and Dueck's Matlab code (see \url{https://psi.toronto.edu/research/affinity-propagation-clustering-by-message-passing/}).} \value{ Upon successful completion, both functions returns an \code{\linkS4class{APResult}} object. } \author{Ulrich Bodenhofer, Andreas Kothmeier & Johannes Palme \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Frey, B. J. and Dueck, D. (2007) Clustering by passing messages between data points. \emph{Science} \bold{315}, 972-976. DOI: \doi{10.1126/science.1136800}. Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \seealso{\code{\linkS4class{APResult}}, \code{\link{show-methods}}, \code{\link{plot-methods}}, \code{\link{labels-methods}}, \code{\link{preferenceRange}}, \code{\link{apcluster-methods}}, \code{\link{apclusterK}}} \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(150, 0.2, 0.05), rnorm(150, 0.8, 0.06)) cl2 <- cbind(rnorm(100, 0.7, 0.08), rnorm(100, 0.3, 0.05)) x <- rbind(cl1, cl2) ## leveraged apcluster apres <- apclusterL(negDistMat(r=2), x, frac=0.2, sweeps=3, p=-0.2) ## show details of leveraged clustering results show(apres) ## plot leveraged clustering result plot(apres, x) ## plot heatmap of clustering result heatmap(apres) ## show net similarities of single sweeps apres@netsimLev ## show samples on which best sweep was based apres@sel } \keyword{cluster} apcluster/man/similarities.Rd0000644000176200001440000001770414170233247016030 0ustar liggesusers\name{similarities} \alias{similarities} \alias{negDistMat} \alias{expSimMat} \alias{linSimMat} \alias{corSimMat} \alias{linKernel} \title{Methods for Computing Similarity Matrices} \description{ Compute similarity matrices from data set } \usage{ negDistMat(x, sel=NA, r=1, method="euclidean", p=2) expSimMat(x, sel=NA, r=2, w=1, method="euclidean", p=2) linSimMat(x, sel=NA, w=1, method="euclidean", p=2) corSimMat(x, sel=NA, r=1, signed=TRUE, method="pearson") linKernel(x, sel=NA, normalize=FALSE) } \arguments{ \item{x}{input data to be clustered; if \code{x} is a vector, it is interpreted as a list of scalar values that are to be clustered; if \code{x} is a matrix or data frame, rows are interpreted as samples and columns are interpreted as features; in the case that \code{x} is a data frame, only numerical columns/features are taken into account, whereas categorical features are neglected. If \code{x} is missing, all functions return a function that can be used as similarity measure, in particular, as \code{s} argument for \code{\link{apclusterL}}.} \item{sel}{selected samples subset; vector of row indices for x in increasing order (see details below)} \item{r}{exponent (see details below)} \item{w}{radius (see details below)} \item{signed}{take sign of correlation into account (see details below)} \item{normalize}{see details below} \item{method}{type of distance measure to be used; for \code{negDistMat}, \code{expSimMat} and \code{linSimMat}, this argument is analogous to the \code{method} argument of \code{\link[stats:dist]{dist}}. For \code{corSimMat}, this argument is analogous to the \code{method} argument of \code{\link[stats:cor]{cor}}.} \item{p}{exponent for Minkowski distance; only used for \code{method="minkowski"}, otherwise ignored. See \code{\link[stats:dist]{dist}}.} } \details{\code{negDistMat} creates a square matrix of mutual pairwise similarities of data vectors as negative distances. The argument \code{r} (default is 1) is used to transform the resulting distances by computing the r-th power (use \code{r=2} to obtain negative squared distances as in Frey's and Dueck's demos), i.e., given a distance d, the resulting similarity is computed as \eqn{s=-d^r}. With the parameter \code{sel} a subset of samples can be specified for distance calculation. In this case not the full distance matrix is computed but a rectangular similarity matrix of all samples (rows) against the subset (cols) as needed for leveraged clustering. Internally, the computation of distances is done using an internal method derived from \code{\link[stats:dist]{dist}}. All options of this function except \code{diag} and \code{upper} can be used, especially \code{method} which allows for selecting different distance measures. Note that, since version 1.4.4. of the package, there is an additional method \code{"discrepancy"} that implements Weyl's discrepancy measure. \code{expSimMat} computes similarities in a way similar to \code{negDistMat}, but the transformation of distances to similarities is done in the following way: \deqn{s=\exp\left(-\left(\frac{d}{w}\right)^r\right)}{s=exp(-(d/w)^r)} The parameter \code{sel} allows the creation of a rectangular similarity matrix. As above, r is an exponent. The parameter w controls the speed of descent. \code{r=2} in conjunction with Euclidean distances corresponds to the well-known Gaussian/RBF kernel, whereas \code{r=1} corresponds to the Laplace kernel. Note that these similarity measures can also be understood as fuzzy equality relations. \code{linSimMat} provides another way of transforming distances into similarities by applying the following transformation to a distance d: \deqn{s=\max\left(0,1-\frac{d}{w}\right)}{s=max(0,1-d/w)} Thw parameter \code{sel} is used again for creation of a rectangular similarity matrix. Here \code{w} corresponds to a maximal radius of interest. Note that this is a fuzzy equality relation with respect to the Lukasiewicz t-norm. Unlike the above three functions, \code{linKernel} computes pairwise similarities as scalar products of data vectors, i.e. it corresponds, as the name suggests, to the \dQuote{linear kernel}. Use parameter \code{sel} to compute only a submatrix of the full kernel matrix as described above. If \code{normalize=TRUE}, the values are scaled to the unit sphere in the following way (for two samples \code{x} and \code{y}: \deqn{s=\frac{\vec{x}^T\vec{y}}{\|\vec{x}\| \|\vec{y}\|}}{s=(x^T y)/(|x| |y|)} The function \code{corSimMat} computes pairwise similarities as correlations. It uses \code{link[stats:cor]{cor}} internally. The \code{method} argument is passed on to \code{link[stats:cor]{cor}}. The argument \code{r} serves as an exponent with which the correlations can be transformed. If \code{signed=TRUE} (default), negative correlations are taken into account, i.e. two samples are maximally dissimilar if they are negatively correlated. If \code{signed=FALSE}, similarities are computed as absolute values of correlations, i.e. two samples are maximally similar if they are positively or negatively correlated and the two samples are maximally dissimilar if they are uncorrelated. Note that the naming of the argument \code{p} has been chosen for consistency with \code{\link[stats:dist]{dist}} and previous versions of the package. When using leveraged AP in conjunction with the Minkowski distance, this leads to conflicts with the input preference parameter \code{p} of \code{\link{apclusterL}}. In order to avoid that, use the above functions without \code{x} argument to create a custom similarity measure with fixed parameter \code{p} (see example below). } \value{ All functions listed above return square or rectangular matrices of similarities. } \author{Ulrich Bodenhofer, Andreas Kothmeier & Johannes Palme \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. Frey, B. J. and Dueck, D. (2007) Clustering by passing messages between data points. \emph{Science} \bold{315}, 972-976. DOI: \doi{10.1126/science.1136800}. Micchelli, C. A. (1986) Interpolation of scattered data: distance matrices and conditionally positive definite functions. \emph{Constr. Approx.} \bold{2}, 11-20. De Baets, B. and Mesiar, R. (1997) Pseudo-metrics and T-equivalences. \emph{J. Fuzzy Math.} \bold{5}, 471-481. Bauer, P., Bodenhofer, U., and Klement, E. P. (1996) A fuzzy algorithm for pixel classification based on the discrepancy norm. In \emph{Proc. 5th IEEE Int. Conf. on Fuzzy Systems}, volume III, pages 2007--2012, New Orleans, LA. DOI: \doi{10.1109/FUZZY.1996.552744}. } \seealso{\code{\link[stats:dist]{dist}}, \code{\link{apcluster}}, \code{\link{apclusterL}}} \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(100, 0.2, 0.05), rnorm(100, 0.8, 0.06)) cl2 <- cbind(rnorm(100, 0.7, 0.08), rnorm(100, 0.3, 0.05)) x <- rbind(cl1, cl2) ## create negative distance matrix (default Euclidean) sim1 <- negDistMat(x) ## compute similarities as squared negative distances ## (in accordance with Frey's and Dueck's demos) sim2 <- negDistMat(x, r=2) ## compute RBF kernel sim3 <- expSimMat(x, r=2) ## compute similarities as squared negative distances ## all samples versus a randomly chosen subset ## of 50 samples (for leveraged AP clustering) sel <- sort(sample(1:nrow(x), nrow(x)*0.25)) sim4 <- negDistMat(x, sel, r=2) ## example of leveraged AP using Minkowski distance with non-default ## parameter p cl1 <- cbind(rnorm(150, 0.2, 0.05), rnorm(150, 0.8, 0.06)) cl2 <- cbind(rnorm(100, 0.7, 0.08), rnorm(100, 0.3, 0.05)) x <- rbind(cl1, cl2) apres <- apclusterL(s=negDistMat(method="minkowski", p=2.5, r=2), x, frac=0.2, sweeps=3, p=-0.2) show(apres) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{cluster} apcluster/man/apclusterDemo.Rd0000644000176200001440000000477414170233400016133 0ustar liggesusers\name{apclusterDemo} \alias{apclusterDemo} \title{Affinity Propagation Demo} \description{ Runs affinity propagation demo for randomly generated data set according to Frey and Dueck } \usage{ apclusterDemo(l=100, d=2, seed=NA, ...) } \arguments{ \item{l}{number of data points to be generated} \item{d}{dimension of data to be created} \item{seed}{for reproducibility, the seed of the random number generator can be set to a fixed value; if \code{NA}, the seed remains unchanged} \item{...}{all other arguments are passed on to \code{\link{apcluster}}} } \details{\code{apclusterDemo} creates \code{l} \code{d}-dimensional data points that are uniformly distributed in \eqn{[0,1]^d}. Affinity propagation is executed for this data set with default parameters. Alternative settings can be passed to \code{\link{apcluster}} with additional arguments. After completion of affinity propagation, the results are shown and the performance measures are plotted. This function corresponds to the demo function in the original Matlab code of Frey and Dueck. We warn the user, however, that uniformly distributed data are not necessarily ideal for demonstrating clustering, as there can never be real clusters in uniformly distributed data - all clusters found must be random artefacts. } \value{ Upon successful completion, the function returns an invisible list with three components. The first is the data set that has been created, the second is the similarity matrix, and the third is an \code{\linkS4class{APResult}} object with the clustering results (see examples below). } \author{Ulrich Bodenhofer, Andreas Kothmeier & Johannes Palme \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Frey, B. J. and Dueck, D. (2007) Clustering by passing messages between data points. \emph{Science} \bold{315}, 972-976. DOI: \doi{10.1126/science.1136800}. Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \seealso{\code{\linkS4class{APResult}}, \code{\link{plot-methods}}, \code{\link{apcluster}}, \code{\link{apclusterL}}} \examples{ ## create random data set and run affinity propagation apd <- apclusterDemo() ## plot clustering result along with data set plot(apd[[3]], apd[[1]]) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{cluster} apcluster/man/AggExResult-class.Rd0000644000176200001440000001304314170233363016616 0ustar liggesusers\name{AggExResult-class} \docType{class} \alias{AggExResult-class} \alias{AggExResult} \alias{aggexresult} \alias{[,AggExResult,index,missing,missing-method} \alias{[[,AggExResult,index,missing-method} \alias{length,AggExResult-method} \alias{similarity,AggExResult-method} \title{Class "AggExResult"} \description{S4 class for storing results of exemplar-based agglomerative clustering} \section{Objects}{ Objects of this class can be created by calling \code{\link{aggExCluster}} for a given similarity matrix. } \section{Slots}{ The following slots are defined for \link{AggExResult} objects: \describe{ \item{\code{l}:}{number of samples in the data set} \item{\code{sel}:}{subset of samples used for leveraged clustering (empty for normal clustering)} \item{\code{maxNoClusters}:}{maximum number of clusters in the cluster hierarchy, i.e. it contains clusterings with 1 - \code{maxNoClusters} clusters.} \item{\code{exemplars}:}{list of length \code{maxNoClusters}; the \code{i}-th component of the list is a vector of \code{i} exemplars (corresponding to the level with \code{i} clusters).} \item{\code{clusters}:}{list of length \code{maxNoClusters}; the \code{i}-th component of \code{clusters} is a list of \code{i} clusters, each of which is a vector of sample indices.} \item{\code{merge}:}{a \code{maxNoClusters-1} by 2 matrix that contains the merging hierarchy; fully analogous to the slot \code{merge} in the class \code{\link{hclust}}.} \item{\code{height}:}{a vector of length \code{maxNoClusters-1} that contains the merging objective of each merge; largely analogous to the slot \code{height} in the class \code{\link{hclust}} except that the slot \code{height} in \code{AggExResult} objects is supposed to be non-increasing, since \code{\link{aggExCluster}} is based on similarities, whereas \code{\link{hclust}} uses dissimilarities.} \item{\code{order}:}{a vector containing a permutation of indices that can be used for plotting proper dendrograms without crossing branches; fully analogous to the slot \code{order} in the class \code{\link{hclust}}.} \item{\code{labels}:}{a character vector containing labels of clustered objects used for plotting dendrograms.} \item{\code{sim}:}{similarity matrix; only available if \code{\link{aggExCluster}} was called with similarity function and \code{includeSim=TRUE}.} \item{\code{call}:}{method call used to produce this clustering result} } } \section{Methods}{ \describe{ \item{plot}{\code{signature(x="AggExResult")}: see \code{\link{plot-methods}}} \item{plot}{\code{signature(x="AggExResult", y="matrix")}: see \code{\link{plot-methods}}} \item{heatmap}{\code{signature(x="AggExResult")}: see \code{\link{heatmap-methods}}} \item{heatmap}{\code{signature(x="AggExResult", y="matrix")}: see \code{\link{heatmap-methods}}} \item{show}{\code{signature(object="AggExResult")}: see \code{\link{show-methods}}} \item{cutree}{\code{signature(object="AggExResult", k="ANY", h="ANY")}: see \code{\link{cutree-methods}}} \item{length}{\code{signature(x="AggExResult")}: gives the number of clustering levels in the clustering result.} \item{as.hclust}{\code{signature(x="AggExResult")}: see \code{\link{coerce-methods}}} \item{as.dendrogram}{\code{signature(object="AggExResult")}: see \code{\link{coerce-methods}}} } } \section{Accessors}{ In the following code snippets, \code{x} is an \code{AggExResult} object. \describe{ \item{}{\code{x[[i]]}: Returns an object of class \code{\linkS4class{ExClust}} corresponding to the clustering level with \code{i} clusters; synonymous to \code{\link{cutree}(x, i)}. } \item{}{\code{x[i]}: Returns a list of \code{\linkS4class{ExClust}} objects with all clustering levels specified in vector \code{i}. So, the list has as many components as the argument \code{i} has elements. A list is returned even if \code{i} is a single level. } \item{similarity}{\code{signature(x="AggExResult")}: gives the similarity matrix. } } } \author{Ulrich Bodenhofer, Andreas Kothmeier & Johannes Palme \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \seealso{\code{\link{aggExCluster}}, \code{\link{show-methods}}, \code{\link{plot-methods}}, \code{\link{cutree-methods}}} \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(50, 0.2, 0.05), rnorm(50, 0.8, 0.06)) cl2 <- cbind(rnorm(50, 0.7, 0.08), rnorm(50, 0.3, 0.05)) x <- rbind(cl1, cl2) ## compute similarity matrix (negative squared Euclidean) sim <- negDistMat(x, r=2) ## compute agglomerative clustering from scratch aggres1 <- aggExCluster(sim) ## show results show(aggres1) ## plot dendrogram plot(aggres1) ## plot heatmap along with dendrogram heatmap(aggres1, sim) ## plot level with two clusters plot(aggres1, x, k=2) ## run affinity propagation apres <- apcluster(sim, q=0.7) ## create hierarchy of clusters determined by affinity propagation aggres2 <- aggExCluster(sim, apres) ## show results show(aggres2) ## plot dendrogram plot(aggres2) ## plot heatmap heatmap(aggres2, sim) ## plot level with two clusters plot(aggres2, x, k=2) } \keyword{classes} apcluster/man/cutree-methods.Rd0000644000176200001440000000465514170232720016256 0ustar liggesusers\name{cutree-methods} \docType{methods} \alias{cutree} \alias{cutree-methods} \alias{cutree,AggExResult-method} \alias{cutree,APResult-method} \title{Cut Out Clustering Level from Cluster Hierarchy} \description{ Cut out a clustering level from a cluster hierarchy } \usage{ \S4method{cutree}{AggExResult}(tree, k, h) \S4method{cutree}{APResult}(tree, k, h) } \arguments{ \item{tree}{an object of class \code{\linkS4class{AggExResult}} containing a cluster hierarchy; may also be an object of class \code{\linkS4class{APResult}}} \item{k}{the level (i.e. the number of clusters) to be selected} \item{h}{alternatively, the level can be selected by specifying a cut-off for the merging objective} } \details{ The function \code{cutree} extracts a clustering level from a cluster hierarchy stored in an \code{\linkS4class{AggExResult}} object. Which level is selected can be determined by one of the two arguments \code{k} and \code{h} (see above). If both \code{k} and \code{h} are specified, \code{k} overrides \code{h}. This is done largely analogous to the standard function \code{\link[stats:cutree]{cutree}}. The differences are (1) that only one level can be extracted at a time and (2) that an \code{\linkS4class{ExClust}} is returned instead of an index list. The function \code{cutree} may further be used to convert an \code{\linkS4class{APResult}} object into an \code{\linkS4class{ExClust}} object. In this case, the arguments \code{k} and \code{h} are ignored. } \value{ returns an object of class \code{\linkS4class{ExClust}} } \author{Ulrich Bodenhofer & Andreas Kothmeier \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \seealso{\code{\linkS4class{AggExResult}}, \code{\linkS4class{ExClust}}} \examples{ ## create two simple clusters x <- c(1, 2, 3, 7, 8, 9) names(x) <- c("a", "b", "c", "d", "e", "f") ## compute similarity matrix (negative squared distance) sim <- negDistMat(x, r=2) ## run affinity propagation aggres <- aggExCluster(sim) ## show details of clustering results show(aggres) ## retrieve clustering with 2 clusters cutree(aggres, 2) ## retrieve clustering with cut-off h=-1 cutree(aggres, h=-1) } \keyword{cluster} \keyword{methods} apcluster/man/labels-methods.Rd0000644000176200001440000000506714170233012016222 0ustar liggesusers\name{labels-methods} \docType{methods} \alias{labels} \alias{labels-methods} \alias{labels,APResult-method} \alias{labels,ExClust-method} \title{Generate label vector from clustering result} \description{ Generate a label vector from an clustering result } \usage{ \S4method{labels}{ExClust}(object, type="names") } \arguments{ \item{object}{object of class \code{\linkS4class{APResult}} or \code{\linkS4class{ExClust}}} \item{type}{specifies which kind of label vector should be created, see details below} } \details{ The function \code{labels} creates a label vector from a clustering result. Which kind of labels are produced is controlled by the argument \code{type}: \describe{ \item{\dQuote{names}}{(default) returns the name of the exemplar to which each data sample belongs to; if no names are available, the function stops with an error;} \item{\dQuote{enum}}{returns the index of the cluster to which each data sample belongs to, where clusters are enumerated consecutively from 1 to the number of clusters (analogous to other clustering methods like \code{\link{kmeans}});} \item{\dQuote{exemplars}}{returns the index of the exemplar to which each data sample belongs to, where indices of exemplars are within the original data, which is nothing else but the slot \code{object@idx} with attributes removed.}} } \value{ returns a label vector as long as the number of samples in the original data set } \author{Ulrich Bodenhofer & Andreas Kothmeier \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \seealso{\code{\linkS4class{APResult}}, \code{\linkS4class{ExClust}}, \code{\link{cutree}}} \examples{ ## create two simple clusters x <- c(1, 2, 3, 7, 8, 9) names(x) <- c("a", "b", "c", "d", "e", "f") ## compute similarity matrix (negative squared distance) sim <- negDistMat(x, r=2) ## run affinity propagation apres <- apcluster(sim) ## show details of clustering results show(apres) ## label vector (names of exemplars) labels(apres) ## label vector (consecutive index of exemplars) labels(apres, type="enum") ## label vector (index of exemplars within original data set) labels(apres, type="exemplars") ## now with agglomerative clustering aggres <- aggExCluster(sim) ## label (names of exemplars) labels(cutree(aggres, 2)) } \keyword{cluster} \keyword{methods} apcluster/man/show-methods.Rd0000644000176200001440000000543114170233212015735 0ustar liggesusers\name{show-methods} \docType{methods} \alias{show} \alias{show-methods} \alias{show,APResult-method} \alias{show,ExClust-method} \alias{show,AggExResult-method} \title{Display Clustering Result Objects} \description{ Display methods for S4 classes \code{\linkS4class{APResult}}, \code{\linkS4class{ExClust}}, and \code{\linkS4class{AggExResult}} } \usage{ \S4method{show}{APResult}(object) \S4method{show}{ExClust}(object) \S4method{show}{AggExResult}(object) } \arguments{ \item{object}{an object of class \code{\linkS4class{APResult}}, \code{\linkS4class{ExClust}}, or \code{\linkS4class{AggExResult}} } } \details{ \code{show} displays the most important information stored in \code{object}. For \code{\linkS4class{APResult}} objects, the number of data samples, the number of clusters, the number of iterations, the input preference, the final objective function values, the vector of exemplars, the list of clusters and for leveraged clustering the selected sample subset are printed. For \code{\linkS4class{ExClust}} objects, the number of data samples, the number of clusters, the vector of exemplars, and list of clusters are printed. For \code{\linkS4class{AggExResult}} objects, only the number of data samples and the maximum number of clusters are printed. For retrieving a particular clustering level, use the function \code{\link{cutree}}. For accessing more detailed information, it is necessary to access the slots of \code{object} directly. Use \code{\link{str}} to get a compact overview of all slots of an object. } \value{ \code{show} returns an invisible \code{NULL} } \author{Ulrich Bodenhofer, Andreas Kothmeier & Johannes Palme \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \seealso{\code{\linkS4class{APResult}}, \code{\linkS4class{ExClust}}, \code{\linkS4class{AggExResult}}, \code{\link{cutree-methods}} } \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(100, 0.2, 0.05), rnorm(100, 0.8, 0.06)) cl2 <- cbind(rnorm(50, 0.7, 0.08), rnorm(50, 0.3, 0.05)) x <- rbind(cl1, cl2) ## compute similarity matrix (negative squared Euclidean) sim <- negDistMat(x, r=2) ## run affinity propagation apres <- apcluster(sim) ## show details of clustering results show(apres) ## apply agglomerative clustering to apres aggres <- aggExCluster(sim, apres) ## display overview of result show(aggres) ## show clustering level with two clusters show(cutree(aggres, 2)) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{cluster} \keyword{methods} apcluster/man/heatmap-methods.Rd0000644000176200001440000002234214170232766016411 0ustar liggesusers\name{heatmap} \docType{methods} \alias{heatmap} \alias{heatmap-methods} \alias{heatmap,ExClust,missing-method} \alias{heatmap,ExClust,matrix-method} \alias{heatmap,ExClust,Matrix-method} \alias{heatmap,ExClust,sparseMatrix-method} \alias{heatmap,AggExResult,missing-method} \alias{heatmap,AggExResult,matrix-method} \alias{heatmap,missing,matrix-method} \alias{heatmap,matrix,missing-method} \title{Plot Heatmap} \description{ Functions for Plotting of Heatmap } \usage{ \S4method{heatmap}{ExClust,missing}(x, y, ...) \S4method{heatmap}{ExClust,matrix}(x, y, ...) \S4method{heatmap}{ExClust,Matrix}(x, y, ...) \S4method{heatmap}{ExClust,sparseMatrix}(x, y, ...) \S4method{heatmap}{AggExResult,missing}(x, y, ...) \S4method{heatmap}{AggExResult,matrix}(x, y, Rowv=TRUE, Colv=TRUE, sideColors=NULL, col=heat.colors(12), base=0.05, add.expr, margins=c(5, 5, 2), cexRow=max(min(35 / nrow(y), 1), 0.1), cexCol=max(min(35 / ncol(y), 1), 0.1), main=NULL, dendScale=1, barScale=1, legend=c("none", "col"), ...) \S4method{heatmap}{matrix,missing}(x, y, ...) \S4method{heatmap}{missing,matrix}(x, y, ...) } \arguments{ \item{x}{a clustering result object of class \code{\linkS4class{APResult}}, \code{\linkS4class{ExClust}}, or \code{\linkS4class{AggExResult}}; for compatibility, \code{x} may also be a similarity matrix (see details below).} \item{y}{a similarity matrix} \item{sideColors}{character vector of colors to be used for plotting color bars that visualize clusters of the finest clustering level in \code{x}. This is done in a fashion similar to using \code{RowSideColors} or \code{ColSideColors} in the standard \code{\link[stats:heatmap]{heatmap}} function. However, color bars are plotted either on both sides or not at all. The \code{sideColors} argument determines the coloring of both horizontal and vertical bars. If \code{sideColors} is shorter than the number of clusters in the finest clustering level, \code{sideColors} is recycled. In any case, a minimum number of two colors (two elements of sideColors) is required. If \code{NA}, no color bars are plotted. If \code{NULL} (default), color bars are only plotted if the finest cluster level does not only consist of single samples. In this case, the \code{\link{rainbow}} function is used to compute the vector of colors which is shuffled such that dissimilar colors are placed next to each other in the color bar.} \item{col}{color ramp used for the heatmap image; see \code{\link[graphics:image]{image}}} \item{Rowv}{determines whether or not a row dendrogram should be plotted. If \code{FALSE} or \code{NA}, no row dendrogram is plotted. In any other case, a row dendrogram is plotted unless the number of clusters in the finest clustering level is less than 2. Note that, in the latter case, the actual values in \code{Rowv} are ignored, so this argument cannot be used to supply a previously computed dendrogram or re-ordering of elements as in the standard \code{\link[stats:heatmap]{heatmap}} function.} \item{Colv}{determines whether or not a column dendrogram should be plotted. Fully analogous to \code{Rowv}, except that column dendrograms are never plotted if the similarity matrix \code{y} is non-quadratic.} \item{base}{fraction of height used for the very first join in dendrograms; see \code{\link[apcluster:coerce-methods]{coerce-methods}}.} \item{add.expr,margins,cexRow,cexCol,main}{largely analogous to the standard \code{\link[stats:heatmap]{heatmap}} function; to omit row/column labeling, set \code{cexRow}/\code{cexCol} to \code{0}. The default for \code{margins} is a vector of length 3, where the third element is the right-hand side margin for the color legend (see \code{legend} argument). It remains unused (and can also be omitted) if no color legend is plotted.} \item{dendScale}{factor scaling the width of vertical and height of horizontal dendrograms; values have to be larger than 0 and no larger than 2. The default is 1 which corresponds to the same size as the dendrograms plot by the standard \code{\link[stats:heatmap]{heatmap}} function} \item{barScale}{factor scaling the width of color bars; values have to be larger than 0 and no larger than 4. The default is 1 which corresponds to half the width of the color bars plot by the standard \code{\link[stats:heatmap]{heatmap}} function} \item{legend}{if \code{"col"}, then a color legend similar to \code{\link[graphics:filled.contour]{filled.contour}} is added on the right-hand side of the heatmap plot; if \code{"none"} (default), no such legend is added.} \item{...}{see details below} } \details{ The \code{heatmap} functions provide plotting of heatmaps from several different types of input object. The implementation is similar to the standard graphics function \code{\link[stats:heatmap]{heatmap}}. Plotting heatmaps via the \code{\link{plot}} command as available in previous versions of this package is still available for backward compatibility. If \code{heatmap} is called for objects of classes \code{\linkS4class{APResult}} or \code{\linkS4class{ExClust}}, a heatmap of the similarity matrix in slot \code{sim} of the parameter \code{x} is created with clusters grouped together and highlighted in different colors. The order of clusters is determined by running \code{\link{aggExCluster}} on the clustering result \code{x}. This variant of \code{heatmap} returns an invisible \code{\linkS4class{AggExResult}} object. If \code{heatmap} is called for an \code{\linkS4class{AggExResult}} object that contains all levels of clustering, the heatmap is displayed with the corresponding clustering dendrogram. If the \code{\linkS4class{AggExResult}} object is the result of running \code{\link{aggExCluster}} on a prior clustering result, the same heatmap plot is produced as if \code{heatmap} had been called on this prior clustering result, however, returning the cluster hierarchy's \code{\link{dendrogram}}. In the latter case, color bars are plotted to visualize the prior clustering result (see description of argument \code{sideColors} above). All variants described above only work if the input object \code{x} contains a slot \code{sim} with the similarity matrix (which is only the case if the preceding clustering method has been called with \code{includeSim=TRUE}). In case the slot \code{sim} of \code{x} does not contain the similarity matrix, the similarity matrix must be supplied as second argument \code{y}. All variants described above internally use \code{heatmap} with signature \code{AggExResult,matrix}, so all arguments list above can be used for all variants, as they are passed through using the \code{...} argument. All other arguments, analogously to the standard \code{\link[stats:heatmap]{heatmap}} function, are passed on to the standard function \code{\link[graphics:image]{image}}. This is particularly useful for using alternative color schemes via the \code{col} argument. The two variants with one of the two arguments being a matrix and one being missing are just wrappers around the standard \code{\link[stats:heatmap]{heatmap}} function with the aim to provide compatibility with this standard case. } \note{Similarity matrices can be supplied in dense or sparse format. Note, however, that sparse matrices are converted to full dense matrices before plotting heatmaps which may lead to memory and/or performance bottlenecks for larger data sets.} \value{ see details above } \author{Ulrich Bodenhofer, Andreas Kothmeier & Johannes Palme \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}.} \seealso{\code{\linkS4class{APResult}}, \code{\linkS4class{AggExResult}}, \code{\linkS4class{ExClust}}, \code{\link{apcluster}}, \code{\link{apclusterL}}, \code{\link{aggExCluster}}, \code{\link{cutree-methods}}, \code{\link{plot-methods}}} \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(50, 0.2, 0.05), rnorm(50, 0.8, 0.06)) cl2 <- cbind(rnorm(50, 0.7, 0.08), rnorm(50, 0.3, 0.05)) x <- rbind(cl1, cl2) ## run affinity propagation using negative squared Euclidean apres <- apcluster(negDistMat(r=2), x, p=-0.1) ## plot heatmap clustering run heatmap(apres) ## rerun affinity propagation ## reuse similarity matrix from previous run apres2 <- apcluster(s=apres@sim, q=0.6) ## plot heatmap of second run heatmap(apres2, apres@sim) ## with alternate heatmap coloring, alternating color bars, and no dendrograms heatmap(apres2, apres@sim, Rowv=NA, Colv=NA, sideColors=c("darkgreen", "yellowgreen"), col=terrain.colors(12)) ## perform agglomerative clustering of affinity propagation clusters aggres1 <- aggExCluster(apres@sim, apres2) ## plot heatmap heatmap(cutree(aggres1, 2), apres@sim) ## perform agglomerative clustering of whole data set aggres2 <- aggExCluster(negDistMat(r=2), x) ## show heatmap along with dendrogram heatmap(aggres2) } \keyword{cluster} \keyword{methods} apcluster/man/plot-methods.Rd0000644000176200001440000002115114170233035015733 0ustar liggesusers\name{plot} \docType{methods} \alias{plot} \alias{plot-methods} \alias{plot,APResult,missing-method} \alias{plot,ExClust,missing-method} \alias{plot,ExClust,matrix-method} \alias{plot,ExClust,data.frame-method} \alias{plot,AggExResult,missing-method} \alias{plot,AggExResult,matrix-method} \alias{plot,AggExResult,data.frame-method} \title{Plot Clustering Results} \description{ Functions for Visualizing Clustering Results } \usage{ \S4method{plot}{APResult,missing}(x, y, type=c("netsim", "dpsim", "expref"), xlab="# Iterations", ylab="Similarity", ...) \S4method{plot}{ExClust,matrix}(x, y, connect=TRUE, xlab="", ylab="", labels=NA, limitNo=15, ...) \S4method{plot}{ExClust,data.frame}(x, y, connect=TRUE, xlab="", ylab="", labels=NA, limitNo=15, ...) \S4method{plot}{AggExResult,missing}(x, y, main="Cluster dendrogram", xlab="", ylab="", ticks=4, digits=2, base=0.05, showSamples=FALSE, horiz=FALSE, ...) \S4method{plot}{AggExResult,matrix}(x, y, k=NA, h=NA, ...) \S4method{plot}{AggExResult,data.frame}(x, y, k=NA, h=NA, ...) } \arguments{ \item{x}{a clustering result object of class \code{\linkS4class{APResult}}, \code{\linkS4class{ExClust}}, or \code{\linkS4class{AggExResult}}} \item{y}{a matrix or data frame (see details below)} \item{type}{a string or array of strings indicating which performance measures should be plotted; valid values are \code{"netsim"}, \code{"dpsim"}, and \code{"expref"} which can be used in any combination or order; all other strings are ignored (for the meaning see \code{\linkS4class{APResult}})} \item{xlab, ylab}{labels for axes of 2D plots; ignored if \code{y} has more than two columns} \item{labels}{names used for variables in scatter plot matrix (displayed if \code{y} has more than two columns). If \code{NA} (default), column names are used. If no column names are available, labels such as \code{x[, 2]} are displayed.} \item{limitNo}{if the number of columns/features in \code{y} is too large, problems may occur when attempting to plot a scatter plot matrix. To avoid problems, the \code{plot} method throws an error if the number of columns exceeds \code{limitNo}. For special applications, users can increase the value (15 by default). If \code{limitNo} is set to \code{NA} or any other non-numeric value, the limit is ignored entirely. Please note that attempting to plot scatter plot matrices with too many features may corrupt the graphics device. So users are making changes at their own risk. If plotting of many features is necessary, make sure that the graphics device is large enough to accommodate the plot (e.g. by using a sufficiently large graphics file device).} \item{connect}{used only if clustering is plotted on original data, ignored otherwise. If \code{connect} is \code{TRUE}, lines are drawn connecting exemplars with their cluster members.} \item{main}{title of plot} \item{ticks}{number of ticks used for the axis on the left side of the plot (applies to dendrogram plots only, see below)} \item{digits}{number of digits used for the axis tickmarks on the left side of the plot (applies to dendrogram plots only, see below)} \item{base}{fraction of height used for the very first join; defaults to 0.05, i.e. the first join appears at 5\% of the total height of the dendrogram.} \item{showSamples}{if \code{TRUE}, a complete cluster hierarchy is shown, otherwise, in case that \code{x} is a hierarchy of clusters, the dendrogram of clusters is shown. For backward compatibility, the default is \code{FALSE}.} \item{horiz}{if \code{TRUE}, the dendrogram is plotted horizontally (analogous to \code{\link[stats:plot.dendrogram]{plot.dendrogram}}). The default is \code{FALSE}.} \item{k}{level to be selected when plotting a single clustering level of cluster hierarchy (i.e. the number of clusters; see \code{\link{cutree-methods}})} \item{h}{cut-off to be used when plotting a single clustering level of cluster hierarchy (see \code{\link{cutree-methods}})} \item{...}{all other arguments are passed to the plotting command that are used internally, \code{\link[graphics:plot]{plot}} or \code{\link[stats:heatmap]{heatmap}}.} } \details{ If \code{plot} is called for an \code{\linkS4class{APResult}} object without specifying the second argument \code{y}, a plot is created that displays graphs of performance measures over execution time of the affinity propagation run. This only works if \code{\link{apcluster}} was called with \code{details=TRUE}. If \code{plot} is called for an \code{\linkS4class{APResult}} object along with a matrix or data frame as argument \code{y}, then the dimensions of the matrix determine the behavior of \code{plot}: \enumerate{ \item{If the matrix \code{y} has two columns, \code{y} is interpreted as the original data set. Then a plot of the clustering result superimposed on the original data set is created. Each cluster is displayed in a different color. The exemplar of each cluster is highlighted by a black square. If \code{connect} is \code{TRUE}, lines connecting the cluster members to their exemplars are drawn. This variant of \code{plot} does not return any value.} \item{If \code{y} has more than two columns, clustering results are superimposed in a sort of scatter plot matrix. The variant that \code{y} is interpreted as similarity matrix if it is quadratic has been removed in version 1.3.2. Use \code{\link{heatmap}} instead.} \item{If \code{y} has only one column, an error is displayed.} } If \code{plot} is called for an \code{\linkS4class{ExClust}} object along with a matrix or data frame as argument \code{y}, then \code{plot} behaves exactly the same as described in the previous paragraph. If \code{plot} is called for an \code{\linkS4class{AggExResult}} object without specifying the second argument \code{y}, then a dendrogram plot is drawn. This variant returns an invisible \code{\link{dendrogram}} object. The \code{showSamples} argument determines whether a complete dendrogram or a dendrogram of clusters is plotted (see above). If the option \code{horiz=TRUE} is used, the dendrogram is rotated. Note that, in this case, the margin to the right of the plot may not be wide enough to accommodate long cluster/sample labels. In such a case, the figure margins have to be widened before \code{plot} is called. If \code{plot} is called for an \code{\linkS4class{AggExResult}} object along with a matrix or data frame \code{y}, \code{y} is again interpreted as original data set. If one of the two arguments \code{k} or \code{h} is present, a clustering is cut out from the cluster hierarchy using \code{\link{cutree}} and this clustering is displayed with the original data set as described above. This variant of \code{plot} returns an invisible \code{\linkS4class{ExClust}} object containing the extracted clustering. } \value{ see details above } \author{Ulrich Bodenhofer, Andreas Kothmeier & Johannes Palme \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}.} \seealso{\code{\linkS4class{APResult}}, \code{\linkS4class{AggExResult}}, \code{\linkS4class{ExClust}}, \code{\link{heatmap-methods}}, \code{\link{apcluster}}, \code{\link{apclusterL}}, \code{\link{aggExCluster}}, \code{\link{cutree-methods}}} \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(50, 0.2, 0.05), rnorm(50, 0.8, 0.06)) cl2 <- cbind(rnorm(50, 0.7, 0.08), rnorm(50, 0.3, 0.05)) x <- rbind(cl1, cl2) ## run affinity propagation apres <- apcluster(negDistMat(r=2), x, q=0.7, details=TRUE) ## plot information about clustering run plot(apres) ## plot clustering result plot(apres, x) ## perform agglomerative clustering of affinity propagation clusters aggres1 <- aggExCluster(x=apres) ## show dendrograms plot(aggres1) plot(aggres1, showSamples=TRUE) ## show clustering result for 4 clusters plot(aggres1, x, k=4) ## perform agglomerative clustering of whole data set aggres2 <- aggExCluster(negDistMat(r=2), x) ## show dendrogram plot(aggres2) ## show heatmap along with dendrogram heatmap(aggres2) ## show clustering result for 2 clusters plot(aggres2, x, k=2) ## cluster iris data set data(iris) apIris <- apcluster(negDistMat(r=2), iris, q=0) plot(apIris, iris) } \keyword{cluster} \keyword{methods} apcluster/man/preferenceRange-methods.Rd0000644000176200001440000000570214170233105020052 0ustar liggesusers\name{preferenceRange} \alias{preferenceRange} \alias{preferenceRange-methods} \alias{preferenceRange,matrix-method} \alias{preferenceRange,Matrix-method} \alias{preferenceRange,dgTMatrix-method} \alias{preferenceRange,sparseMatrix-method} \title{Determine Meaningful Ranges for Input Preferences} \description{ Determines meaningful ranges for affinity propagation input preference } \usage{ \S4method{preferenceRange}{matrix}(s, exact=FALSE) \S4method{preferenceRange}{Matrix}(s, exact=FALSE) \S4method{preferenceRange}{dgTMatrix}(s, exact=FALSE) \S4method{preferenceRange}{sparseMatrix}(s, exact=FALSE) } \arguments{ \item{s}{an \eqn{l\times l}{lxl} similarity matrix in sparse or dense format} \item{exact}{flag indicating whether exact ranges should be computed, which is relatively slow; if bounds are sufficient, supply \code{FALSE} (default)} } \details{Affinity Propagation clustering relies on an appropriate choice of input preferences. This function helps in finding a good choice by determining meaningful lower and upper bounds. If the similarity matrix \code{s} is sparse or if it contains \code{-Inf} similarities, only the similarities are taken into account that are specified in \code{s} and larger than \code{-Inf}. In such cases, the lower bound returned by \code{preferenceRange} need not correspond to one or two clusters. Moreover, it may also happen in degenerate cases that the lower bound exceeds the upper bound. In such a case, no warning or error is issued, so it is the user's responsibility to ensure a proper interpretation of the results. The method \code{\link{apclusterK}} makes use of this function internally and checks the plausibility of the result returned by \code{preferenceRange}. } \value{ returns a vector with two entries, the first of which is the minimal input preference (which would lead to 1 or 2 clusters) and the second of which is the maximal input prefence (which would lead to as many clusters as data samples). } \author{Ulrich Bodenhofer & Andreas Kothmeier \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Frey, B. J. and Dueck, D. (2007) Clustering by passing messages between data points. \emph{Science} \bold{315}, 972-976. DOI: \doi{10.1126/science.1136800}. Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \seealso{\code{\link{apcluster}}} \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(100, 0.2, 0.05), rnorm(100, 0.8, 0.06)) cl2 <- cbind(rnorm(50, 0.7, 0.08), rnorm(50, 0.3, 0.05)) x <- rbind(cl1, cl2) ## create similarity matrix sim <- negDistMat(x, r=2) ## determine bounds preferenceRange(sim) ## determine exact range preferenceRange(sim, exact=TRUE) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{cluster} apcluster/man/APResult-class.Rd0000644000176200001440000001326514170231556016133 0ustar liggesusers\name{APResult-class} \docType{class} \alias{APResult-class} \alias{APResult} \alias{apresult} \alias{similarity} \alias{[,APResult,index,missing,missing-method} \alias{[[,APResult,index,missing-method} \alias{length,APResult-method} \alias{similarity,APResult-method} \title{Class "APResult"} \description{S4 class for storing results of affinity propagation clustering. It extends the class \code{\linkS4class{ExClust}}.} \section{Objects}{ Objects of this class can be created by calling \code{\link{apcluster}} or \code{\link{apclusterL}} for a given similarity matrix or calling one of these procedures with a data set and a similarity measure. } \section{Slots}{ The following slots are defined for \link{APResult} objects. Most names are taken from Frey's and Dueck's original Matlab package: \describe{ \item{\code{sweeps}:}{number of times leveraged clustering ran with different subsets of samples} \item{\code{it}:}{number of iterations the algorithm ran} \item{\code{p}:}{input preference (either set by user or computed by \code{\link{apcluster}} or \code{\link{apclusterL}})} \item{\code{netsim}:}{final total net similarity, defined as the sum of \code{expref} and \code{dpsim} (see below)} \item{\code{dpsim}:}{final sum of similarities of data points to exemplars} \item{\code{expref}:}{final sum of preferences of the identified exemplars} \item{\code{netsimLev}:}{total net similarity of the individual sweeps for leveraged clustering; only available for leveraged clustering} \item{\code{netsimAll}:}{vector containing the total net similarity for each iteration; only available if \code{\link{apcluster}} was called with \code{details=TRUE}} \item{\code{exprefAll}:}{vector containing the sum of preferences of the identified exemplars for each iteration; only available if \code{\link{apcluster}} was called with \code{details=TRUE}} \item{\code{dpsimAll}:}{vector containing the sum of similarities of data points to exemplars for each iteration; only available if \code{\link{apcluster}} was called with \code{details=TRUE}} \item{\code{idxAll}:}{matrix with sample-to-exemplar indices for each iteration; only available if \code{\link{apcluster}} was called with \code{details=TRUE}} } } \section{Extends}{ Class \code{"ExClust"}, directly. } \section{Methods}{ \describe{ \item{plot}{\code{signature(x="APResult")}: see \code{\link{plot-methods}}} \item{plot}{\code{signature(x="ExClust", y="matrix")}: see \code{\link{plot-methods}}} \item{heatmap}{\code{signature(x="ExClust")}: see \code{\link{heatmap-methods}}} \item{heatmap}{\code{signature(x="ExClust", y="matrix")}: see \code{\link{heatmap-methods}}} \item{show}{\code{signature(object="APResult")}: see \code{\link{show-methods}}} \item{labels}{\code{signature(object="APResult")}: see \code{\link{labels-methods}}} \item{cutree}{\code{signature(object="APResult")}: see \code{\link{cutree-methods}}} \item{length}{\code{signature(x="APResult")}: gives the number of clusters.} \item{sort}{\code{signature(x="ExClust")}: see \code{\link{sort-methods}}} \item{as.hclust}{\code{signature(x="ExClust")}: see \code{\link{coerce-methods}}} \item{as.dendrogram}{\code{signature(object="ExClust")}: see \code{\link{coerce-methods}}} } } \section{Accessors}{ In the following code snippets, \code{x} is an \code{APResult} object. \describe{ \item{}{\code{x[[i]]}: Returns the i-th cluster as a list of indices of samples belonging to the i-th cluster. } \item{}{\code{x[i]}: Returns a list of integer vectors with the indices of samples belonging to this cluster. The list has as many components as the argument \code{i} has elements. A list is returned even if \code{i} is a single integer. } \item{similarity}{\code{signature(x="APResult")}: gives the similarity matrix. } } } \author{Ulrich Bodenhofer, Andreas Kothmeier & Johannes Palme \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. Frey, B. J. and Dueck, D. (2007) Clustering by passing messages between data points. \emph{Science} \bold{315}, 972-976. } \seealso{\code{\link{apcluster}}, \code{\link{apclusterL}}, \code{\link{show-methods}}, \code{\link{plot-methods}}, \code{\link{labels-methods}}, \code{\link{cutree-methods}}} \examples{ ## create two Gaussian clouds cl1 <- cbind(rnorm(100, 0.2, 0.05), rnorm(100, 0.8, 0.06)) cl2 <- cbind(rnorm(50, 0.7, 0.08), rnorm(50, 0.3, 0.05)) x <- rbind(cl1, cl2) ## compute similarity matrix (negative squared Euclidean) sim <- negDistMat(x, r=2) ## run affinity propagation apres <- apcluster(sim, details=TRUE) ## show details of clustering results show(apres) ## plot information about clustering run plot(apres) ## plot clustering result plot(apres, x) ## plot heatmap heatmap(apres, sim) } \keyword{classes} apcluster/man/conversions.Rd0000644000176200001440000001061614170235504015673 0ustar liggesusers\name{conversions} \alias{conversions} \alias{as.SparseSimilarityMatrix} \alias{as.DenseSimilarityMatrix} \alias{as.SparseSimilarityMatrix-methods} \alias{as.DenseSimilarityMatrix-method} \alias{as.SparseSimilarityMatrix,matrix-method} \alias{as.DenseSimilarityMatrix,matrix-method} \alias{as.SparseSimilarityMatrix,sparseMatrix-method} \alias{as.DenseSimilarityMatrix,sparseMatrix-method} \alias{as.SparseSimilarityMatrix,Matrix-method} \alias{as.DenseSimilarityMatrix,Matrix-method} \title{Conversions Between Dense and Sparse Similarity Matrices} \description{ Converts a dense similarity matrix into a sparse one or vice versa } \usage{ \S4method{as.SparseSimilarityMatrix}{matrix}(s, lower=-Inf) \S4method{as.SparseSimilarityMatrix}{Matrix}(s, lower=-Inf) \S4method{as.SparseSimilarityMatrix}{sparseMatrix}(s, lower=-Inf) \S4method{as.DenseSimilarityMatrix}{matrix}(s, fill=-Inf) \S4method{as.DenseSimilarityMatrix}{Matrix}(s, fill=-Inf) \S4method{as.DenseSimilarityMatrix}{sparseMatrix}(s, fill=-Inf) } \arguments{ \item{s}{a similarity matrix in sparse or dense format (see details below)} \item{lower}{cut-off threshold to apply when converting similarity matrices into sparse format. All similarities lower than or equal to \code{lower} will be omitted from the result. The default is \code{-Inf}), i.e. only \code{-Inf} values are removed.} \item{fill}{value to fill in for entries that are missing from sparse similarity matrix 's' (defaults to \code{-Inf}).} } \details{ The function \code{as.SparseSimilarityMatrix} takes a matrix argument, removes all diagonal elements and all values that are lower than or equal to the cut-off threshold \code{lower} and returns a sparse matrix of class \code{\linkS4class{dgTMatrix}}. If the function \code{as.DenseSimilarityMatrix} is called for a sparse matrix (class \code{\linkS4class{sparseMatrix}} or any class derived from this class), a dense matrix is returned, where all values that were missing in the sparse matrix are replaced with \code{fill}. \code{as.DenseSimilarityMatrix} can also be called for dense \code{\link{matrix}} and \code{\linkS4class{Matrix}} objects. In this case, \code{as.DenseSimilarityMatrix} assumes that the matrices have three columns that encode for a sparse matrix in the same way as the Matlab implementation of Frey's and Dueck's sparse affinity propagation accepts it: the first column contains 1-based row indices, the second column contains 1-based column indices, and the third column contains the similarity values. The same format is also accepted by \code{as.SparseSimilarityMatrix} to convert a sparse similarity matrix of this format into a \code{\linkS4class{dgTMatrix}} object. Note that, for matrices of this format, \code{as.DenseSimilarityMatrix} replaces the deprectated function \code{sparseToFull} that was used in older versions of the package. Note that \code{as.SparseSimilarityMatrix} and \code{as.DenseSimilarityMatrix} are no S4 coercion methods. There are no classes named \code{SparseSimilarityMatrix} or \code{DenseSimilarityMatrix}. } \value{returns a square similarity matrix in sparse format (class \code{\linkS4class{dgTMatrix}} or in dense format (standard class \code{\link{matrix}}).} \author{Ulrich Bodenhofer \email{apcluster@bioinf.jku.at}} \references{\url{http://www.bioinf.jku.at/software/apcluster/} Frey, B. J. and Dueck, D. (2007) Clustering by passing messages between data points. \emph{Science} \bold{315}, 972-976. DOI: \doi{10.1126/science.1136800}. Bodenhofer, U., Kothmeier, A., and Hochreiter, S. (2011) APCluster: an R package for affinity propagation clustering. \emph{Bioinformatics} \bold{27}, 2463-2464. DOI: \doi{10.1093/bioinformatics/btr406}. } \examples{ ## create similarity matrix in sparse format according to Frey and Dueck sp <- matrix(c(1, 2, 0.5, 3, 1, 0.2, 5, 4, -0.2, 3, 4, 1.2), 4, 3, byrow=TRUE) sp ## perform conversions as.DenseSimilarityMatrix(sp, fill=0) as.SparseSimilarityMatrix(sp) ## create dense similarity matrix cl1 <- cbind(rnorm(20, 0.2, 0.05), rnorm(20, 0.8, 0.06)) cl2 <- cbind(rnorm(20, 0.7, 0.08), rnorm(20, 0.3, 0.05)) x <- rbind(cl1, cl2) sim <- negDistMat(x, r=2) ssim <- as.SparseSimilarityMatrix(sim, lower=-0.2) ## run apcluster() on the sparse similarity matrix apres <- apcluster(ssim, q=0) apres } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{cluster} apcluster/TODO0000644000176200001440000000025214170223535012745 0ustar liggesusers- adapt aggExCluster() to sparse matrices - shift refinement of exemplars to C++ side (for dense similarity matrices) - predict() function - include similarity-based VAT apcluster/DESCRIPTION0000644000176200001440000000306014170327412013762 0ustar liggesusersPackage: apcluster Type: Package Title: Affinity Propagation Clustering Version: 1.4.9 Date: 2022-01-14 Depends: R (>= 3.3.0) Imports: Rcpp (>= 0.11.1), methods, Matrix, stats, graphics, grDevices Suggests: knitr Author: Ulrich Bodenhofer, Johannes Palme, Chrats Melkonian, Andreas Kothmeier, Nikola Kostic Maintainer: Ulrich Bodenhofer Description: Implements Affinity Propagation clustering introduced by Frey and Dueck (2007) . The algorithms are largely analogous to the 'Matlab' code published by Frey and Dueck. The package further provides leveraged affinity propagation and an algorithm for exemplar-based agglomerative clustering that can also be used to join clusters obtained from affinity propagation. Various plotting functions are available for analyzing clustering results. License: GPL (>= 2) Collate: AllClasses.R AllGenerics.R access-methods.R coerce-methods.R show-methods.R labels-methods.R length-methods.R revDend.R heatmap-methods.R plot-methods.R cutree-methods.R sort-methods.R aggExCluster-methods.R apcluster-methods.R apclusterL-methods.R apclusterK-methods.R apclusterDemo.R preferenceRange-methods.R similarity.R simpleDist.R conversions.R URL: http://www.bioinf.jku.at/software/apcluster/ https://github.com/UBod/apcluster VignetteBuilder: knitr LinkingTo: Rcpp LazyLoad: yes Repository: CRAN NeedsCompilation: yes Packaged: 2022-01-14 12:58:35 UTC; ulrich Date/Publication: 2022-01-14 17:12:42 UTC apcluster/build/0000755000176200001440000000000014170271573013362 5ustar liggesusersapcluster/build/vignette.rds0000644000176200001440000000040614170271573015721 0ustar liggesusersuQj0 w}?A+^v a]Ebfml۞|$AO> c 8gIJa%7'{&,c+7P4](E'4R(N)m4^DᭃP[#^47w;es %X8I<:, ,xF&w3'"^:i;f_#M^:'C|[2OWvæ/rW:U !^t]B<apcluster/build/partial.rdb0000644000176200001440000036307014170271564015520 0ustar liggesuserssٖ': N2H b!%3oKrD8t תMR%u$F=6f'٨|:mu̦Ə#nܑ{0_Uy '9s4M;~N'0?ǵn{^nnP մmOOl濩?\o~uri;M 4iMW;V_Y+\7L.4erv*5՚XEӭŲ{kzӦ;P ok *Wx}V(Mt֧*Ԧ7MmnWB;SF9Wә*Fe7MM:2<:!?o]^Eǚ J~M~>H{UN8z㧯ch 2GFT5`jS"+Bk+o^/G٤ A/}j_x$2Vv (vArH'e1zM4YA"<"SxmGq`s ~Ĥd믽Վ](aTNz^ڙuץB{Sߌng!&I 9i w/lӊ ף3}֋;]ԟ82W[Ok*Q)zȽ5v%`f>1Mu?N&硝btQXA4ӂa RDƆi}/oĐBL>"u=Vf48˒"vTZ6?|z|g:^m>~D29e8Gޭ/o옎YnuKk7@8y^YS^P{>RiA'L>@YqiKlp"bao,'Rwp"  N'8dH0`v,W$<d1Uu!+\ڤ!ƒUr`ڀFUXf~{t|5B (r523D1u_v6JjE/{oR3qӫ^]zեzz7.Cd9}C0I ܝ0OCVI8d䇯‘dEB-S`DԮK 6$3p# v.{"@$ﲤn8 yR(,xΤ(w@3)R? dRCAU1Q׳8Cz-!iNn33M~׉ˉedϭIsnO&jx<(o<NB |.OFYBaqΟ#0pJa,!d0UW jUHҸ_]Է͂ϛ^}FEh~?I`ET,P9 ;VHu  S}DbW[!T;a}!LԭYX;r"|3#f[!Fa #䴃 #&)M!u.x^jGWHeƣ晬AZ,*wVv_$ o4W:?@yeA#M@#L-` M~Dѹ Hi27fߒJ?Z޴VKL&z~%z3F.e@Gfޤ/BJ/&;"u׀Ӑ psA]:;":a?e|·qrE>̾%-y3S؀!rg_LnDj2A܈O1GF_. )B7ߎr(}RY|d)K QTGP;vēv܇Clu.$GEOh-E! ax$r2\f>&{~'4N~fQbᩌ s}MLk{@k*7YUFR`BodYтh}e(D5?!Xj@@9D4x$Ed i X[R3/`/^)Obv޵vKF&xby8 Ye<~`|bIwMaV[O"ɥSg_&dVUcԆ'%IxZ:~tAH D>duV*R7|Yx8,!x&hga .` cԶ c x@g 0&7s7eFy,A_/"da')0rnOZjC=NZjC= PbԎh-! n3mxkq|D"V3.- ax͂as4ara7poO 1G dĸ*BVɈ P{]kä;xja?W8)xFA~zbo$lu'/҄ ?qI]/0O꺀)~ma'7l]0Ɍ,Vh=֪ZI,/ O%_NCv%}zgw.Mus4|~4؞f9IAK>Pt@B,yH}?xZy~'LrvxW`r̊֔ C8 YhݺT8ds凹SM2aC˞[ &l86Dk -.`CP;lhԏ2غW Ʌn'6 BmQ's g$lɉ/` 86@꺀)/7v@m H [70ڋyw]( PJud|xxY8Sy):E./*p Z؄k'n?I]0O-  ?Am ZuBxYֿ[9HmDןPLw[eftN?C@MݱޔxL0'vԍoA \(6pF^&]̘i+W1,pi {>hC~.M@Y<;qA<-HUPzvtW_Y_[k /@N-X"֚^7Mg\ f^8^ [<&!W頫HWhYK})/_ !Of![3:Sd?i篿hB^ߠ쿑Cd:x7>}_J8y0DNC?XT1w\G{׽cȏ)o (ea_{1= q̙!2|J(,Ų]2&'#h, gZ.G8yLY|0cA+{EcQ*yQ(rw>>PյV-*d5x׷ՂUCNlE*=,=۹eT+{cPYOI5:@d*~K\{o8T͍_Y՟'\̂ǷNߐ*H xҦQXdl0(gvn1~͌*NL/2"Eik/.DzȽ5vMZPcg*y^v첱_tZ]m[kjJQ]+x ]Rւu:1IY,Ũ=<Y~1]ģ2m\AV9m1j! 5+3Iw QсB[(u<| $,l +|'ϸ/-oWB*]p6{mk|dtfdWg3ӋsS jܙ766_=2CC<.9n.-[۱>zm&ꝠQZז[0ܽp>w[&K$mGW/%CښO?ghDfBoEܲv̂5V8߱ fR)Fy;6Z|wG[qp9A%Q'>gO㪙{y&Ga1}^6\ZvM܋\0'\*ʾiQ10he' ʍXEųW9,x7%2W#GF;R7,2  E&i+@6pʕ1w0 9+mxovr^:~1 \,ޝ@"O\;\˅@|.J꺁W!_MEI];pXh uAC{emYnGxM})?K@6R-6kǤYa[H2G%(؍;`kQx$ehtT~lTLoOZ-qX ǓŒ`Rm[StFNd^z~"vc|ߡn6s/33]}@s,~ ! urcۯPCn !_d  I+Zy?j8f^ߨ V4JWAp |ǚ1}lFeseKH^,Bwj,}ųS-E.X{Ex|q(;K֬2{ybXw ~5$<uQ]<ҨGXHtG}%d όf SO CTc ώ4Jז(^eݶsV+G $};D5P=&w@P]W]F?7 aBwjw&4ߞ(enZ*T>Jn^o:m2b+5wԷ1GbԆ}3W0\c-8cRcb.ޚm'j=ӷ ? ^uHg?gk"Io7~Zt:鷚uVN5~jü-cl)ϙz"7roθڱvɼ6\[R`8~ ]^(ٕ~{D-C5POnmߙP^ճVk?ĚV~tD;̰&۶6Ѻ%Znzgdb(~rpۥJtYgi6-Y 2yunCvۉwFʚ/QvF#jݻ Ay޷ \ ǿ{n}d|g1PA"4l*H` ^=m=c Kx#Us0+yKZݹVᕘjT0YYjv~?Uz@JîsRvz1?2Ya՝]^U'wt.Ex3WMg5Yjz0Qk7٪()(/Q{3j/cON}pCSL ljؕG{sG[VGDps/۰|J-}<]Sx:@ܲ O>PAVخ"{GO'ݑN.`T06Rj *Y`航^H9:o5Qlo~@cOpc6h U]5m1^^; ׄ d}܁Sű,CC%o^? ?Ԃ$x[ӟ_ﯚA /|J+nV0;gͩ~T=9iJ8wx {'SfR,Omz[x|Ԧ_ffܙbVt_zȳ^9p妐3m7r>L )@f>xh!Axm z;_G 4׿."qE1*^-(ggn w3#>sF yY3Gk_VwYI;}h,bܲQ;1 /|PqKQ6mϒzW]ėNC׈n Ju06ª0d*b٫Ҽ|w7)UeA/Ŷz 󗯟Hx12 Hx><ʡ7,5("~_L\ )-q^/W~si{ °J^d*#~kK09]L;m񨲋k8"v-:R sn+[.05&u̓LF q22 pL f [妁ɴFxm#&fN؈[)+ oCH}AmMt^.Y[MiU<0eOn%O z ?.K%_[F_x8a<Lj;մ3tB-=,/irwoy".^HleCWS%}Q y:5g TA9Y!OKC $$fg)砐{琟+Ts ~ +>A<4k;tK,> p2uCg/kH}xW;8Ղ|VH)uʖYRx$ v]%W(z]*'pL_JewN쪡됅>CG nqCI%^O"W\lf=eT>`~LbԱBK&^ #ԂB>+hupX]+UۦCխ9 pP1Vux=ycVjR T>&_]Z~'Zd9Oa `nk3պ"*LDd^f#mrnqX:=D3 NQg I>:Q)u@,d\P.:95HtbVQN/l bq^|58EzCҏS~A[Y3[]Ѽ'T7y4mDJW߷*{>[Wzru8ރ,MRwY>;Yדo.5W5RA<-h֘pF~E6.n.G?MZOw GąE[4\LW!JM}8C׀됅lSTY{UYA<Li]qVS5N71]:/.J0l~ݶ\ߙ'Vx[muQ#-Hc3Axv+vM;圴1Zȉ|NDfS'xq"| Yȝqj:vF?aO ! `BE0SՆNM,<_bPxwVyVUnPYCqKY(I*p Z >~ y8g0<p|<:¡@VeH#]B6Ro' #怫W[\2' ӬARNHsHx0ft푯Yԥuěq ^RI85GP y9} iALkwMgĭȬ3KV[vN3G0n  ' ĶDyH_C=9#+#i dgilxae&>GGf)MfYNPx%`U#j0xːCvO !kRQ ,pPs{Rw xPljTe%0\ހ,_'4I,dK!b pr #n Y~oIētI!jCCjzI0&.)TĞiU@JZmsUCܹ& \\O؈/ L~4'\d 'y'N#`@7ЈA M (>,9}alt D ) /C^$Y4r(q Y2Ptq ! u6!dq.<}x X>D@LpDF"sC֓Rw8/?NE*#z[mHd10 bHOud|uSr٦)٥I3?Sgk;]1qQEBYc*WŸ8j #O#IcM[?0nRZ6}twW$ƒh˦SV :FMO 7ϘHQzc{ߠRޱwl%޿qlpޯa/:{Y~k3]Uē Htf%JLgA"%2I,XYࠖ$1;X&6ILf)N 0IbR7\Z6ILLim$1`&jc c,p 'rA-IbRl$1$q[󘁡 .s`^2p]m,%4ā)iTy*[cUԪ; ҿ\,DD'fo ѩݵS<G1(w`_ 7}_K{ygxM!Q|YO3 &,$5?@fJ>=ŋ#Zd:ENjUpIJg]ׁg5F4TKQz5yU\~f7Vx5>bON:r=.R?}MELRCqj-wO1 A L>9NA~d삯 sxI dֵ2;1z-՜D"p|>u0{8Wp '<| h5ҎA~AA;ӥe Wdn\KUPr{ ģ,OpMxIMRe_"ԫ"eQͮ 8 dTK(%MeFu(Ef=^ȽRk햌J1By43?RdF$}ĒSa(5 ņÝ %:ԑCڸe7X0a3Q'rՊcƝ|g#{c#F?9 kפݽn6`_nBWVҡMu ?%57pw]i M5AQH4#A9@@iLC@NJRe&&J7O?1 82W[!Hp^BN.=> / եm,K N-Uۦ#wIP||4CkN M*@VcRBr  O- n wAz@ZϚ$ 9 R7ܪ pi'zsDS6Ye=&1%uB}v>W%u]Q*c"?yc^,4 .I  @\?E{R:DMluCv_]h ܀,r`cm0&SlH]0&j[ P zE0Ucc%aڶ (*6W._]A<kv5qЂm³ gݲE41(|P] ؅O*9udf+{E2}L3J%/4 Eh.l‡f0"FCۖmv|[_^ )[fѰ 1z!+۹eT+{cPYOI5:'U*奩lLNep̩M}76#ЂiTeBc^ZNX2_aO4!֋l\|c&?wܞczw/(.B^6.*Mlӭcn̲c]ÿ>&̝A;%1ۻWZ2k+ǻfKpe+:l1٬Y,Ũ=<Y~m1]ģ2m\AVvlmۅ|aB mn>{g~n:CTt`زx%^'فv@ytyPv N$p|ƭxhyj_W킻&o[#3#/:3^nS|\ͫk6!~(s?oGVN0'DX׆#YϗtJ\/Avv7qT}Qf(!ZJ3b}Vo]/w05gj\LjlW+I[LrՅVOz'~Tֵ w/?ݖIs>Iѕ9i${K ǐZ꡿Pwj;FY8 gJ$ØҶ"f{W܂,77Rkϖ阥* 7NND "Qjc`Ҏ^{ʠ~q2ӂkS8d/@Q6fy; ,tfIcOo@;=H8p!8/2(b  ޸AWkJ"o xOk YK'^|9y$u+ n@qO'n Eȋx0p rH4 .ܩ AP: ';C#Y,Ccb}[jT]2hծcWǒ| {AOs۶JquENg,oDFgvعXp.h*'=Lb=SdR '̙ӍH #RZޚm'jw?%!oRA,䵑ZOlˈʣav-rj=-ːA("cqԗ.%&QU-^jkKyp16:R 6{!WԔUʛҩ!b#NL'S0Y f!g7=S Qdbl&fN؇p X bnBH8x\,VB{Yy1q u*vҲ4!EX_'gnP!)X!ZV0'm'Q!6 J:K#8' d7E*VcO:5\)mH(ԫ;-)anVfUm5̢Kޞ4] |2۝‘C=Ojːӷ  A Ri\[ky+ YSQ["8 <;*-z,[W6z6nr*~g:۰ {Ҍa3Q۰[ >duc ,4磤 Kz-?w@T)Ml<4`Ql2 Mv(lR|V=<3DȆZZ6qt3]7*a<\pBcG:킾,߿Ԥ~A<-c|nwMjM@rljN hLZs oSnu۫l"(am >Ot%'5Ϲ+9 T}LwqتNtU'U=K/ oU'ģrZRŰJԩJy+gg8A~b15uC~A<-!^)p%o'z@]O3iWKя`?Dfr+l<4}Od%H_>,TȮGGg%T-W7t./JW\F \* cTRշM:27-l @<&㣾!lqR>t[/ߙfaijĴPY>\s xZj SYb bLGz-s uN4`ż\CVxL1' gNCvӺcWr CTfːcZ``bOڅQ.{i5:/|\.b?wrҴ'Xɴwml ~A}ɖWc}&o ϤxZ> !SlI]3?Ǡ\DơSv^7o{5 Y烸Cѱ9(0]+ͼd/QTyBsF \XEO_2_Yכo6x%: Yh(ZNB&eV6Wēt5a_mؔ |azA|u" oE!j@f!Sh8=@x/R?  YD}KH:p|9ERl"ƠE} c}lܦ ءUQr{ ģZ);rhJٛ0}m.pBWQ$&?yʅBT?N]&4jlTXi e¸LY*t.`/^)Ob6Z%Ruڑ i<@$V~$Ii?:! <'ͥSކ+2gIVGVWb6,keQuzJ꺀 _K>y%_ڰ:~@GӂpA] =1&G"}F<8~&ܳKQyE8,W *O­ ?O)I,B]K-:͘f'_~R?`Bu0߉<! meJ#'SHn8 yE8!L F)x3ar-`1B/蓺^(du'>*^|=OuAԏ1AՁ D\O '—!OR:})Àb)X@[ ?`#L uRL w6~5 uz \G@I*~ #$9d}aLH`'fa-9~6C꺀)/v@ֲR?`Fz.&Om[#S 3u's5*|F%Q.A^jUԿ &L.-d0&^d]W%u]Q*1qjki}RA<- }3STܟt?@n E s FkM)sȟ%'L%]% n[R L% u][Flʖ`u-ja=M%hOvH^f!gG :)SҞ4Z`w|K^/'N aG:rZAK>Pt@v}jځ3g eOp/$F=䆛"y^/Ki9|ɉCʄI4{n-gఖH}&B]KmuSi&_e#ͤ~֍4?@] L.wnvKݏ4b>"BmQgAh20tr mh..` PR֍.A=hfO 2 +=/%<||"u! 5.'6U]/@ׄTy݋1Ҕ7^ uD0Bt}{vs$!ӚJ~X)E~CVt'Op [a$x0&0 9+m,f,n"ZS>xi3̒ngpBbO.D.!Kh0[8ﶤBbEJԶ0 [C@ٿÑ'뗓hw H^BM>␺9γ uu"u)OIABmIڿ~|a- _60?%OM.N;Tן-q~xԤ:GMMhlB/ 4 t+{Hi1V;;̮M{FF݃~>>,4T7蟯n[Um5kn}k  2U{ 8 Yws˨Vl'*bk t1N٫TKSS/rʾS57olG|-'\̂ǷN߼ LJ*H xҦc8pjE6.f1 R^fK{ggf&x !/J_^{(p%+FKKٱJt7dٱƮA1sw Sְ[Q]+x ]3-XuH8YT^csW~A<,6{OUdpv!'I%&_J857~R ԅTT۹e7j䇭8Ʃ9T Jͼ1edZ{wL,L7B2h_i=H#hGa=ebp2҂kS G (TʁԝB?{Yl/OfːPCBS~1\/x_A߀Ͽ|l,bS ObRI꺁!_N?I]; +-[*Pj>߉md7adSK$#|Yj4|L.rIMW f>%u&8Y,f4zg uȺrY\|ӟ x ՛"7+R ~\ڂE׀[ |WK!%VՅsQ ,I\Ե!+SKZM1݁tȺSrfk ʭP:[$~K pGXFGuF+Ԩe'eKҀ 81Qgm\^+&ܶUʏ;%)Ng,oDFgvepP>Dt9|?8?w@gCp7CTr*],W+K&|۪y}+Xy(H.A\X=-¨xn,`]"YhB{K_,TK C)ZExcw1]2';J>ߚ_*oͷkz4*Y ^c ʹvܯߌt@-VF-Awj:Y1KVԗlXeMA1cd{8ߌe ,[Q'<3h^᷽mW+ ֬] ' OH%%31]!ܫսet.H]E\A<[~ji PYO~vVWa ~[ԟeXD83>[qHzy]/s#ZCjYS?߼77=07703hM ֦_쇔_+ZO~6nCX,/? q? P|$N4P /M>n|?UBX{wgU8?R+Ϳ?]wzc#^БQ dڃp){M%(Dj#@#mԢ$vmpR1mCν~_J0mH*,MmUdB Xw?,䶑ZOlˈJaFM0M+0 "9cO0)14q#Dj8 ^|91)$2 Ea 3E˥`/Ns' O`Q&V6x4Wd &L\mB4W'Lbzvu1OꂉZk.(%U;esuDݭ5W7LZs6àZ$lt%Zn: D!.(){ x٫a/S-ۣ2k_LX=0M7S03Qj<}c (2ֵc $akNԺDKZ`SZJZ"ģZ77b`8ۆk݂]4`ǣ'ӰarV*V5NAJf Y,GTt}ZruуodMd-J gMi9>&VOz~Fh#ؑeĞՂpHf. )sWwp&dZq7dt*.?Y5\Q9'pOuo:Ŏ 0z:^ܤKpLk8nFЫF{UFfEƀ?*׺wknvx}-v#esbQcj ]D`:-Kbdo \F*sw!%sPPG0̜hnDQ]تXE qb&w dR " _SmoF 7>Z5n̏7 oH>0EMg:[6s֎E =&e~g<0Kj3*)k”}e [}_~U'| |Q_9^3UTbo8$iE~trpCk  00͠\y9"x±l+RYBSG)6Aց ?SV׾zP1G)Z~t֡oe' _BRȽzT>2;QTV?ʭ9i?%UkRCm& k{(D?A#yR¾ۋea{J[[61x X>TJcJeʭiԦ\ybۣ6k&eqJKB&!_T1%ȗjxYmҒtKy,9̍ \.B^LB b;.A^.>RA,ԁ72dQ` I~:Ý3+=#LJLԫW+jj;1^|;]`ǿ$n{of)irF} | 4߫N6kx b}yM:8d0xFjoAn) 6(?@U l&\-7DvY^ BZ}7|p0M[i/֧s= ANw͂x5/.C$i`=,bxO-pHmdq^9vMt^>)([5/_ҢլQC# &e"eꎍm1S@?5^6:t܍ݘ}o41 \*t^ߔ [!get3 F\M^EL{9,tcDw ,!N [;Hꖁ! u~ Y~q3?oA7'IJ#"Q@HC=V:u -O/q~iШ%!T:\.MyU-/ubr/ }ɮiH[y/:&u{+~WUQ`Zm -B6StfCTUˆ0׾AK ᴣ~,o)ݫT. ˆ aRwP>*7 b x{t [XZ)1/y e-(ץUx=%+|.]v7vә8;MP?W*'2d%au_aO =Ա{WԱY龲]\ŨpDlDZAJTF^{C#|Yhp>/+oDσykxwMw p ȽK*^ åvsSAxѱ)$.@^H?,F?-)K(zR)Mr׋)laX 4> ym4MłGoox;Vi~}d$%M96B_9;P5;0 '4VS8Mk~i{QMq&_1§}|8/>B࿄c8U:YhI.s _xӠM [ImP} y7c ql?h*5  C3 CpwfVfrf $z(ySrd'TA^qvZ^W`!hQ]m`xM[DkȒ9vh'u1eqs+1) ( YDe=pծk(` C?eRFH'R՟Cl)HqHX`?y`%QzP㟭b {.I]?qAȆU~N?z޳\$p>,6{"n^Kˋ YR)\P]wˎβ.ujClsg҄`,x).;v5“.R0|Qص|?cBfd> I`M4zT3E_,_(PR,Zld$!N4_ )){7!ҦIr4S=/rԃ:m$%K14D.7̤:pN׍=b;3ٟ}[5Tr1PîVӰ#hwy?%܊pGŜG`AU18=Q8y(y'uÐmt ;cu%W!JӜ flϑ^w^[7c̺GE{ph$dnY~Ф};$K}r5 ๺S-+VéJx'"K#*X" Iڡ^~ Os1x$il0\/4 pͲA#g ޞ;dVzr ֤n Y~Ժ;<׏CO~,r6"; /F/a '\2d{ܩh|aNNCNޯH d%SOۋlz>,?QҬ;;l'?C\!NUH];rIa\tJx(${NTS)0'Kץ?Y;c(!pڞ ef,^>-J/1ႄ_ӱiJ w :p{'P#Yۜ۳9s kOǁw 5|.dq+?>]~

dFc^:FYhϋHp CTs#n7 {x ˳bk܃;;tl'rfpH5"1?BDR1(M .B(>2^P/ 7 /ѱX6_8Gh{WE8iD~3M7J(Ek Y(ڹ,D g {?n@w'[q?fh?# oѸ|2X.8 Y A][yk QcBf6;)+ClMtjZB 9r`YZ{/ SbXdNCN?@|B#Y*t7Y.y'4tk;ƒ׽=[{M&PR iCT٘&_ehZ5tf3;VUV !u.le#-W+N EAwݯ~gm  dQfdK_? Ei'*pck.cԞCjh>tF3?7w!*:0Yhg`//:_v@ЭWA*X.;["v*bwiii3 M޶GFgF&~_puf:;387P+Νo~jcڣ/c>4q{鍞-G?y;4E՘7;% '%Ȣl~Szy;u俙hGeۛ=*FkaJco]/w05gj\LjlW+I[LrՅV5 um cO{eܿO9qteN.1 R1szo@dn.]-k,Q?lƩ7N=٥=-my-b*7~-BFj10jk? گBxiz4~É[$Jm  Z=MU ބ,tTmۨg־ةJRw8(- -mBsGzGmbhVoD -!zv{yhҔv^ jD`w~Sp#Yl{c#n?P DD[&Ǔg`CLv+`"\tTWA˯7lFk~ϡ;DuM¹iKPʈДn x.LK#M+^>XE H[A!"T.J=qA#@#j3wAsq,x&X#vm5Nް KP* Qe)?%$u ,'ʟ! [%-! >[ѼxK9\sM!^V>S?߼77=07703mhN[8 Kئg+Vžn^&tĹMBq*>}u,CכO&qjwB=W"܈WnR/fE߼2V'y7!<~*G_ŨUL3K) !  'gCÇivrUPmZd㐖UHYIZ<Y]NlˈJoaZQU>|vu" _H:a‹/oRA<3\N&_6a,N[u>cRsְ#-[q(HV/LD8y"s-4-ȷ7=ģ\7 ΖUaNX09ܜpd#Y*lŜrj0}[ I8jPV=1r$}31Su_o!HT0O\&-SuSB)1۴ IX:)X$srLC,u☰DYj`-\mڀaBxeXBT)5jKZ"W#h6Y:t_j/x$Ke\*}láWqBMFS[y9VՇ ZlSZؽx=jTnȳ<&Π"/>pzz{Gs֫;lzHu8{P;8=/h}hXwyfzz:vdsK7!?yߋO Fqy:ѭfyU\~;]G/`GC/W Jvɶ\3$f+qE(4&RZ@ ?4V"@o8Y]7J̬SؓS^8)?J<x+1căaMQ[FDӨǃSlߝm<ǝÅ'NRtFrVwC.r$r8 yq p 8醱Gj#1QN67'|4ͥJ,ht^qeKyI^|ėxJ|`6Ye؉pPHQ:Rf폺_u8R퉭kF AEæAu=Qm6 D)dAUj6j7ښVeϤ[͜Cwo-ͦ=FxdٱYy3LCB^ ktۡz!Lv@^s e:'5u|~lXM"(Աg#2(~2Κ?N"FN,_ȣraF_D0X& d.[LP~8y@.aK^d*{C9-bB}*O|f6p |$~#[}c3ǩJs2ai& Gtڼ Z=5lV^s x ^niϼQF.Wor''Q3Ϥ>G\ 5^܀>neu킙 >bڱZvmժA 3 @|K{>$c;^X᭤tp_yt C ?_pEOM8oHf?-&:V\ybPخ1ownH$OiNi*{e͉ x̖Z 3KsCf[ۈ)d^D1^v}DcVy78̋y=gR0w  P kPiTIToZ \Oa w04D,Ij-azj-,?qi֫s+N5GG}_Ǩ1= \,߿[ ayUX-T,T)pڄORL˨pLW!"LCK-ʞ! 3 Rԯ ef{gp%^,Io^ntl uZ}0J%JC;*^H(J15iT0^-nӐN$8IΠCNDiP;u^3E1'>,J0>PYV7r}SMtf>zkwf%z~+.6 |z?XW\=Φ %P3 }\P&pߥE;Bդ`Wu>]; {#em_Dd xPI5RwAe #eCyK_NC=V2 ֯SǬ|* \=FڮkvhNP/\+x}DU:u1 ]f!gM֓՟l0)"EiBvɏsB!Kl٠ Z^I$UH:eOҎD29bmI; I:QBnڻ烈(C Oar\8V7rr :DW\\>ioX ՝>H]"Ҟ{3Ao5#WIR0"#!v,!ē-~+WCeחCk凟:ɗ;LΞ*}+J/7{.Yg2yDƳ'l&\{7D Θ ,4q*9}?d]-isՊ~cB||~My#}'Oē¯WNW$@Y( 7O?S|6 %EU2*cwp=+oYc;k.&9YkEücbsxR,?a⥀uUg1q\joAnT6S?友Q , 7Z{!w ZtipN+g&ڙ@o%Q{.-0^vA.iq4޽Ï߳r{XDxI+VvsV'`FC֓&kjA&~A< sߧni*z!|71,55~FXy B |CN?,tYC@\J^,Hzb0d]k/7ovÐyxBZ{:d=y%uk /_Z&sAqO$#EȋBK6op!.Zm+ C-7 `?aPn?#~GďP$>Aȃɻ,A`zK3\}V NQȓ 5k+@«BU"*ׁ7! ]\n%v}7S~AWWotfȮc.3*72i^V[& Px#P#VW!;$z~/> BgeERw8yLI( IAZ3ՔO0(H6_t\p%@(ߠw) @]S}zl&ug \Ӎ|E:j(R% w z#u4Ec&.{x0ҺpRT.MfK5KǤv@NBlmLTi, \j65Y~@*3҉^f_qP/ K? I=J0$8])x Phb4G՜m{%֦R.b8xp P U=Djpvu@ nۦ}Mx M v +^O9hj^bqV;?醆ԍoA YSy2{$&?hk iȧor(Cm/R ԛ7(y䚜lwuW$79O;6ݵvK" .>]cc!q\|,$uYd_V6|ՖcT1B=S"ncT4A)̹ys p`p^x,9:קs6/{㈋|= _ E-?&R=z{2Euԗ⧰v _?E 8*bK!Bj7 d~# !/Jd 0*M< ?3P9,pG! ?xJBMޏHud@{Z ^_".wkM_!,J RQv{ss8M:u(NhDvղWӱ-`%Z*ODu#Cpw]hPޙ}[_Ub[g!. !!R x}ɭZ{ēv6N^^ec7X߆ .R4{yˀC߾jQ'^e+XԻI'VAuyp'M>󏓧|18G99;qnOb|x D >Y+A+E'HpD;o7]pr{;jAH֯?]9 MCt+[LTցs~<>,e?)sȟKs?y9V9ܤΜ8 Y>q'xE&k"ٟ.zi?8vQ#TF(֯ KLyQEJWOjA%| u$>%BC̖ו*Ui*U;fF޵.4O͠"<¨mJ{D8y^{؆oAP.*45UvlvRΚ ҈甁vc<~h79/zRVYoUB.ِ6r;EysxAOQ_o9 Cٟ~n ˛CDh)O1-M,ŏ$GӐŨ<A,Yy7BO?/9Xߓ៸$Bs On:+sYas@rhtVLR:e5Q MeRD )'k}]ހ򴞘xZ@8y,x oB:Ew'-CV׶vm5;wh9{MeoB#XG:dJ !xS[弞64[0b1&^i*=g tce$VgIk70YFRT2vGcz*Ё]pbn_k-yFQ.5_tMUm+l/QkgvehZW{FdKP41ޏmx/VR~ўcT\Yxk.0,Ѧlku۲NoY7 -CŁ[t6EԘ@! H[Fg;1*!W=RAV] v]ZZC}љ_9tvffv~ 阯~jcڣ/c>1A9ză#>4bva=*}_c YR^T-rQKwʾUgJ|떍ݯ9[eb[ZIHbւVYuGd][npyWCE@I@1ӞR8IZ-k,W@)7N5qA.Laoik3H]+C?>{ojyف7 ;(F~9ϥ@p|py%褂pppbxG6h.C>[j ʹ~_ s@Pb~@(74P7td"˴s8Yjh;<,m}ܤ;u dSǃI]fzqnjOmW;q#Gqک  'Qآ>bl(H#Dj)!R("ej$8UZUpZZNP\MtcO{eܿO9qteN.|C*jcHỿљPwjQa+7Z:~-ȷ_Vm'Zj *wBxiz4~É[$Jm  Zgd_,C"d91II0a- Y|jOrI\G 0 \_ p( އ,( Yphx >7& ǮX,슠>%*OxOR Y>$u+ n@1#`l{)g.@Vy+qYe<3KϿ\>-\E.\*.R RۚHځÐ[t~\usF+x8pj:1\&:1-`/p*`gJ>*fqOR bIځ 3\Ӥ)b\,0 AwtbϪZphx$ehtT~lTLoOZl}w$",'?+&ܶUʏ;%)LOg,oDFo'bW~?k{ċl.> 9|?΄ƭ{x1^<1tf}JeQ7S-E#D{_0^AˏڢppT!P$,?xנ 1kmx}lFeYjAFIAt:?| B;D5N;晜FKBbN3 XM 1iou~;ǠAx Awjxɳ#*67/AFc S62^ȭz4[՜/ tNYLp_RYE{_'$Ii7#RwU+2}2lބ,2T;_vXy_Cwj"uJ$٣KDk:%MO@:dl=wz`_YE Ryn~ 8^,4pZdMQ-^,6AwhF vRs.n__ժ{pߨ}YjY`K8y&;D5& _vxUYi Ea o#t9&? L-ţD}?)u3CR '<}_~-? Ejzk߷} ܟUHY񨲊؊Kԭ`Z;X"DaD8340Ao4o륿;3~1W\~ס2Sbyj63M/.߹Ü\4J?˻a{闯Zzm1UpJ,R/<|ݎ? PI,=C-NRڟ/49GxrC/_=iJU?ʫV'y7:!~*GKJF1jV !ߧ0>TC<4qwJ# R[F26I9uH%(N$-; <j%mҵsߗL;,A~eR[_ 8LŪs9:s$D:s\ RyDwւk6zt=?kr^fJi~ӯA~$!钄dAAgGvw vt{ecn֞C~.9+Nթ;t;;]}iVB8S@0bFYŸʛnαD>Ic֐Ԥ]x@ Tr^rBn79Ydkuh:n&妗CWII8{ Ƭ'u# ҞIVS-c0/Eg?&Pcz1`ċOVr.~! Ч z׬-K4ܪcKFa+i WF ~ϸ?o(:"Im8ZsZ\(舞IAP^z}#1ʴdž d&i#>>T=³=&TǪfaǯ($mՊn~Q/sȟ;i t5ꟛLtRԣM>|E}9BL>i:#I3q9(}W7=硣ִ;ךy;j6Υx݈޹ |Yg )QnS'AcV;[]$9۬W?vR9yWYȳk)#N1[~ Y(Ϥn(gR7|{/ !WJXUɝ)g65,ם5ƴ_GQ]/mq{m9om1~m¦b%øG (f KX+2fTw#ܪQ~eRfћ_i M~Σ%y˭LAP$<,(tma`L 8yHYjYuո#(!DRA<ъ\eUj>]5H xҦqf%;2"EiA5CZTA^*;@1wP1?MKeuuXc}B^sfe eQq:'5f FrX*r+Zg]CdG (U1CtnȲ>/b Qdn'!O*4GBJ'/ޛ\7p4!:Xik6_[۴sN;Va~&dE=Wwp 'Jm Q5,"v(̘,?m eKCaHYZeCII0ts`(9ٍu 4oNkˆ;Ŀa͠|Z3Z[`}K96*\#!_:4+s~[53oTs+o%i%K,HF7;D5rĥ9AYN.Iq,xf:Y"$dZ: !kB́BhF\q"a9nNGB&W5eR~S{-6tƔ \)Bum0Lu!LjcrE㙏_Pu.~%d$Qp؄2/`]e6(IH3CQ V@٢/ItX7*xc?9]94A- t@0cyCwjꓰțc:F#!du :cxԩ1jcmYx, !!ƚoE:OCϠ;D5V9<qƆ [9Qao9,;YP?.fǜXW;KE蘶v>o|]fFhʫ^w#Yv +us!~#_ <[َC E{\ T^iMB#/[ o~dsAtb֖*&"9 Q{Nҡ#Y*mɃIF+UncZ IFZ[c7S6-𙮣ձeUbv eǑ%ϼq>Z[Et_]=V|Kx=0 =ۛ'BY7 Ԃ|ۜߛ^ڟmu20𢘠\§>dAoݝܥAxwCy_vx@,SYob7$"+Uȫ E5,nn=_b]#~@7ߡq3Jܕ XRa4ܬZhE9cmWiSBsjfy!j:3/bE1 %eu|6jf*}ؓw@~"M;kt]nw"'o}V (~_Hfg䇌<6%7+t!u`82kV@! 9)_gM@~|'u7ː"7y>>,īF>oUf AWn_L%D-pW^3E KmtmdMí6K`WP.E_!t1V^Sl(g&|k/mڵbc~ R0u伍KnOL}pU4jgėF[Z}Cڨjp-YoY7HMhAj@8Y]8E> 1zQ-Zٳu9k!t 1Nؗ ^2;Si2 fV.CDkݪ:Q~C!U*)M=3V]NZ6UMxdk&APnc䔏صlD pD;t-tjs-jeKkn_g"\6ծbM1ײvZ6)8kوpQ;t- !k٘Yڨk8|ײej%|Hoz-eX(F-MUBײؼBVZ6eM6,E? ̔ ^˖^C&wUVE{UZgmk"ײem]CHG܎VLoZ6+keKkg*qXdd3 & 9ϥ +gf&8ӠLYcPK4ż9MI!<9#nGmB5Qw Ϲfh cZp,P `2Gef <1A*Dl'"cSǟFb;B#bH$Fë-N$W]hUE }iLI>'IۅoHEm iS1|Y;:wS.R#j?lFKدYـ=[;C#n[Ae](4Go4_(!?H#dW!; 7 jbғ1cҭ|[F(qrWkNʞ 2j(f7Au 7tGǐ[ h>& 0>ywNR BIځ!_lA"!_V'7 @I+Fg+9szw4 _w;͚{" b7:ݨYMvșYnTlu(n/࿰b#Ur<;D5Cp\jK>f!gI_Ekޓf߸"d-R72.@hLRƠx }-O,zѦq*^0|o;y׿IF+m'_n>~ug|D/_"; W _~A<47ITc*>_VLǤ]V*x$`'g Qc4c{0wV!gē65@1o]>MD')VmG{{`9\{¢WxEuaj+bg0o=)E R{@A#y,;vypR1͓d~_JVi%BTkC#cᥰ'Rkս0E{mpZx`i0 ES0q943m QdgLVS$`-Ncu@7!LXe,R? BN@'R6VDhN@!5(ckꄍoAܜ9&m{ M*Jk[6Ta2j:&ndˆ۴LFģdÌr{ch?U7y,[u>qBaXV3<<^cǒ5ԖWb9*xڿ=iczA5mG&٣կv8H^k{>k %{69:fSnF?e`[V8*˳lx)_m.:u4b:| 4e>E;٥wSF/b WVf ;sy SK!S{tm_o_3rd9TsT2U:{WlߙΡ i 3[LpD7ucG |PpБM{ OI>+ی 5_^qە,_،%tW1S?~5b"} jWy-㏬a0Bu  L.u nt):j 0;<+AB: _H3~&+`oT73]9 y#WQ&RO76 P;,TkUX }YӓZm'm_B[ۇPC?> ò=R퉭*]W7\[4K۴E9]V5-doEFP$Ǥ% 8;Ht#;%r:dSwabMW/ыK'ZZaKdS^8!4 hs|6j:YVΤn\ (df2"aP?[.s.J\ v,3uښ@FxdٱYyW&E(+W>_+u3؁E?wG 4"6l l Ec˪ŘӮ5YSfA`8r|^,f \͠\3~p_Efn툔)-B b.6a'3 QVbN!ug]9zzRYM"9S#0x-NFw}czGeǬm ]Kk"cj=@ F}v1(~ZEn=Nu8N$< ӲZKEl؟>\ԏ^tJ>5/4nՋ${ǭX}nŞ!W=HCч0:F)\"id6p+_ ? ԃIx3arozuOC>-J *rktlǯk^rՏ 4llU, rdݮ#T[WkWN0=a7csDn yYa80 C=0Q @5!P I:LSi5EBү3'0ߞ`>, ܫ,N)QhsC `_o?pX'| Z>,4H"dN(_#us3mzN?e$b=Z{ N^g!M>R1C-sdV! I=. X.@ا; kDo8Yh|/ k,p1+U2*fmT5 p`O`08N4׫z=qB;Zm2M6G;[m2%ې70iuO3&HCm`ݓ.F/0'F(F`ugN4{?̠k["Rtkfi:K~eׯԍA_|ԍ קDa/Mkr+"47;$9`xlTTAͼ5Q^nalC.G Ǜ6>9L5q#>vP2 4%V6\X%4WQ W5krsqOsU8d֡i7NlZaP"n@A6TN:knݍܱ B |CN?,? O)~/?Dgx,M6It/`w8 yXל{p ^!,^, g_ v Sً{&.B^TZ:s^x qY>,7p|=' ⑤21XaG{|Y>Bz! |>B꺀 _6-}pm,9/q8Q=(]C^Oj%-H g$0!"*ׁ7!0[Fꆀ\90x[;ԶpfU7̥ IN8r>MvU9 j72!CRw8 Y(nr;wQRp&ж]tddIk;n9~1]#J~}ռU>C"9=#[3u IU,k) e<'M$SipzR? ԛzfcM=^ o껒Z@cZjH`HYuut#Sܢ Ս]-UhlbV07|4C"'c%08!IډkYM&']DL=gtXjO. _٠$'*kǐS$us6A%1uUʞ5X[.i`nf[ vP;y$ԏ2'3~^>d́Yz'cg~dp,䬲ho,'"w:|MA_Ip4pYO+ d#i1U;CN?zA</P Rqn`&Kmk"u7bTn`hmy5Y׻k锗F {:ش^;3闰>uBS$| AR{r&H KDc{6;P~˹&B85-RoUt-Ac/p9.M*sRA+;pqFցOڢI*"+~XG5+ط>fX7!J=AvqnB:!˟4i18;\F^/,xg^"Л$o1{x?eHnQzWTF=Bxkh B Y~Տ",ԅ4UGpІG~# !wOfP c Q)ԋPD_(dFKC-du>G"uׁw ͥ7Fי]:uiN}AS'qAX "5,|/T j*  eヨ4pj:\,)%pU|ϩuzgvG9u1Z0DjB>+]cB([;Bw8 Է1G0lܐS-"/,3M(,uj(k~Y~)}r܊TK1CP$%r sΔ2k,o#uc$:d[{7㸧g2SGc.;^oЙ;Ղ۳ wp6-NgN)}dΑSyXcOҮsx2:dQ %"H=h u}A$(_EGulT y 9ۺM<7 ]]·U@#p"--3'i"u  p#? Tx(@5{Np{ʮm2}6tb\|p1BFОO;-4ڴnr@l,yPٱsfo4tsMw=oo(i[cל §2S/b Qdn'! "1Ƕ]ǨBK/؟d{ST"2\(Mϗx}]`Y; wSiO^e+DN>V] v]ZZC}љ_9tvffv~ 阯~jcڣ/c>1A9ză3tU7$ Q3Sϗp{5k;S1oOÎ*U^Zjn0sGe:fJB9] "uCq&f&? Qa,d3A?G j6fŝN㐅S  [P>$7oD3D =C 6Fi#'4JBu]/.^lcݛ*aj?2.b)mHݏ[fHL*QXdԾފmMYX7jĭav`5Tqqx̋-H6ZǍ×KAjpδJ!X? iTԝ2L2> <s|4"7\o!ꡮ1|a:1 |m7H p25t~633=Uv ^,5m;h~'F=ԝAӦYYߌ&d]j]+O^}W:kay1>0g4T i<,F 3e {0v0,w&  !/?Nn^9J//?{5Oe8VW{7`RYcN/RG(YVoj9~ ޫ.эᡇgw%WA!d01b'2'WԬ˳ɲ%pԎEuP8{ 鹳ifKA '!ふAYaE;tGǎW|;A  E!v(n=m0߀oW4׃ ;Я<) &wAP_c8灡^E_Ȳg˓~g`K8y &=P5'c(56l78z?3!C,,MĭƤcg?u_ H}x$H9r2h?O-sܸK|.}^M D( f_go4OgϺgG_z/j:״u`T;SσuwޛYNW)>͎:ۻ?5km'Tqџ$yM:zg![0z_?;v~IzC# Ri|'"ZG}_DyIJg4OSͿ=+}ǟ=~.Z|]gYKFOLks)5CæPFl qzwR }TgZPUZ~xz|,f\@ St6zkfGGYz6v9 ^|9IcFi_&hdK Z:ބ|3cq#FvZ"d!X5vq؇p X q "ҲqaWZE[ r7 );$f]ym|q׆_̫[ҋ2_Ze$UϧV+DyxM\p)WYWAS nBvrfַ ͱ|ZPp׆ ZѤ0V ^uw l\^wRY&{H~V Eڋ?9:R,ǫnN]E?5~D_.B^Qߛ7vf\ em{b d /Ʊjb0=H^SGWӹցmZDi{(#K#اZ3`c5SAJX܆OFu3r3>Z My3׏ЖRژ!6Ae$Գ>KebE. F8dFn -;AV_.a [ n`Qې$v4q!;wfU'm!1?|Y=`Gș=CK#ARg+EUZz9g F)*9TIR`-V!w9lW27?ya2Ӑ48[p .(s._ [xwA~%Jid؛GRC5o1tF)7~7~v: zQP*/-֔L|;0k"ޔpreWVC< IOp~?h@! G@kW#.p@~mf͆ewc+9y _m諵#YZY{4q'q*;>[MjorDd xԛK݁x}BCeArzc6ԃpʮf>Mr~Q C19x>/شty izy+u\!7IIM`rNdsCg/n?dXLvxVB_),UOˆ:Y{rDxrՎD9r}I#Ѻ+JԑHNECBV =A$c "uG_IGDxֻ; ܫlC#ʼΗmE=>їɓt;'ːZx=`ich0dHL( k$)iHM{qq)ҠNQǐ?V;CY,48O>MGr#J_(\©' KŚ ſV;Ht"8i$qbv ԨyWd *:QYf gMr'z:H YRw xye6'7?DxԖwyz<σ vCyMW1/t@gI10de p}xbF2}sP'a"EmM˱ƅ@֙=PKې%8ԓ= CY/K" w |ԝ^,Ʒ=b;6iuI l5_Dx^A^S;l}[OV2]D:&dxĜ !*< L'8 :`Rv?EU !]-7N: r`:Ev2uHb&^ 2k}&ua0]\Sfɩ+ބHFkce+ [P8!B}"I /D~D|7Oغ (]r+,T?x9?֮y{.C(=XtV4LtDML{wPCKMpɶ74̈oZ~!3߀@Zyp.*o#* n17DVyjgJ$"" :E  ނ>(:*с~Dn!/+;C~T-c 3ϴR ;.p'.Kyu9\Mv P} &B44 /!=KQ~ [K}<קO%OKPqdy6\/軠I8 Y.}Ԝ TGU{Iŵ U:/v> <+:f@$&r;WK7vxEy9yH~E-:n0ݮ*ZM&NpR>5^m!cfoQ *;ђ>vnH ]ܤ+XEXE R4hAuzGک N8G#hߙݵ?4|[(!T<5fq*L/a~ë~p?hqQu' B.KL KH]/kTbA|,oW8Qg"5YR\LF6-"~ }`FQ.5R^,78Kf|I R4*vcU?k|(CԡddGL+AZ)\΅EJf;j#ZW[gQqQpA Oo,t\8Q3Y̅ B ω"p\VbS@kl[Kp#'[(m;W wMDž$]*Z2܊P_|}+72aY ΢բ^;MWshUM" tqH02y|lՙ :64NhO86, >1c?fyxF-KѲOYywR)UABs1&ӸV|=|RF5ͥy>y$ʿ΄KW.sXM7k]WZ<*Z*hK58|J[C~]-819<Yj;X NN KMn<$wZeR8'j1 Q"@D\>F]aVàaQh |Dh'Tdկ:%V˔-DgBnOŘ6R8(^=lO >|uŎۇE ZsaY!ᐍԏpG] hlmyZ7CR|SR47&Q?``  _T*Ԯg*7N*T((g;l'd,WGq'm POkB,[˱r!c=ɱq=70aod0'\\ mq]i% _BiNtk##$8 yTeLrC/_>dE=9ݞJD vث?Fqߴb"GݷQlS޳Qv61+o[?`|\B|T+-% skA^YNnxE+] Jv/Y;[+j~+t Q_U{b޲^\:뭘.Z'S׽@R <ԆƋ30d BIqG"z9Cqq#ȏq 6_YC(~NR2%ȗZ. r뽓u@e,aL D~pT 8#ߕN7P.9yI˛j!q]"ɿ{BO3$o¸[v̝,w&/L$./K,koK0{ջ{?CK`ZKp w9̊s=!ԸK߃,WbޖZG#"잘t&Y~x~b{Oʸ<;, -$d WmcXs[rG/93ߢ؆C7׮ϺgG_z/'HaP?{i?|kMm9/"_<%k3 ք~˪SͿ9+}ǟ=~.Z|]3t5e'& )5CC<4b;(N:w'9qV Ҳ 尩sPJr;A=lyh$,d}v9am3.%:kNX"BV9[` %A5 `aϡVZdW C41ph %2!MT77rF:AJHQL D0x45s5 Dx7Ʀ3RH; #78 =QRpT-vl˥MlK4π(1ؕb\}oBj9#iU:4[g8褝`M3፬kpPEDm ?6/ݥ%OL𴽬+I.؝o}&nK7~i~wK4H2L3g6^GÐB5Ӟ7`g9X%Hf8 yq8OOK$ RkD=pNDY=( g hwK$,<"ڼIY\^,{YxaB Izgf|򩸃їƀBrsps-q0Af8獿չ$09\q(UZ9z5F[^q:C-=J~Ixߊv>X0hjwGt2lkN6ѹn\0 $`D)S=?A*Hєn@ir~pT&.N}9|aqt<pmH*p8Sɠr\Q?*@.oO58Y_bm oB7ה諤.еvB#HRCE ΘJڞ_ 攋eNrDKY0xYcpt״É;d7Kp @uNtE §e3Μ8ģHcn/~'c#WA]UB Nؓ\9Sm <:aY Rw󞫆 N@iINecȏSfz-Y*w[MQQxGT fC rv'3 V Hk z&jq+adI>E_Fsp9e঄ÐSw঄# rُE(BǝηqUĬ; y)UW[`v*NY"T$QR;p[*Σ.Cַm-ieSt#Zq#eY]B V!KE ؝У|"EbL?R$`"kK*;pSF\pZ49;BJM.Cj}1[Q<˲r8ͅ'B/-;DzETw:B=Tr Li5R;E)1lީE8(;ݏA dE= U1EtD5J|IJjCغB.4iS&uCh9Ev}=C]Il[& ggO ޼ &<vo1_s̐(G!K8m.Onu#u'3՗Du,*Z,p2) 95&0 "u8i}i&JH8e0 b0 laᗄedU?0~ҚMNk_0 aQ_6an 'pha癡0a#cfp9\r9\=9G;;"s$HU9|f R>G|P9_B"DԌ/^£ x٨ܘrY_k#iK&Cz%::-"1iI&_"GuX5 \{IPSb[>QX3[ D+w_{}%V5L1J:C|"À9}?~RU |7hʇO঄)|nJ8bZk;\,C؍ ?~RV f=w %LqX¶'n> \6ޡOZo'uׁv'+v,߿XIkbH:Fą' ;[ibHL9*d.}|2.ƥh6 `UeJ5ڲ\N}HmܤJNnRѪrWQ<\oY/P-0tIƁB#U'O@V$|zybL'`<凣-ST߸-V`ǀ+Wi1i}־b^Ƚʼ3){WU(gi  Cg6-SڽI]*dC4}Cn$a)QmetƑ /K!_WW"ڮ7G p R=K87}M7z1yG0R{~KoKmuѵњރ’R7 \l3*MOx\5dѷ0cQkmHdr+D)lDKM!\OyM_[} j=Q*] AG'zM /$l:T [cnj1B_eSa>mr|Y5I? ]n|^?YxYt[E7mul;Sl}6}aK&0‘CR}+cr{U͙ !߰J~H{8YjlĆY8nU" 2KI0x$Ldw*ݥ\LyVeOh*||-?mbefnT8鰴>,WGq'm߅G^ŗlMT`:ײ+96>;=33!Jg@pz1,ьsk_V+~k.ە 43u ڦpF{-TyOۦAY_ qoww^,ubic`&tޕ33  j/ Kuc,_3DՏ;%Q'? pѧQz~ *e*~ Y8Eoiiy{|dtfd3ӹŹ͆?YqʘyOW?<CO8}釟wRMYsbNzBu1O|,1 #27SwT.V {*zq)bFW7rSvaox^06UY}7KT~: F(ooo8bsDCK3nA~g@^iCEiy vOٱJܝ,Y :&r='%uࠑyR <ԆƋ30duI.@^H)Ɓw!;@Pރ,L,m">d NK:UO$/AL=I]xֻ'^,C"W ˝pWXA&uWw_@:N/ if.B^lCe`뚭|ZdEz KU"1%udQ^N d}Q ϲ̢h8_ gH=K+13£#ģZGG+{zmT_6ڍjv;B=~[{ri^Qo)Yo4rfB}G "ha~r0⶯0dQvtLWn0`F/ 6m[ܨ{F 3edހsdȔ#]߇8&v=~0>+‡X CVϥ&1vAT5m6d֍Ya2?nH~? ?sގS6!LApz(z`d(n_M,d}%vE ~ 5sIDeeP#d@`N̯iϯRc6a H_©3R!فurn˲~?&xe9n܆_%A>UH}/xtYE.on߀%~V X"Bi~+X{@go؆!L7׸ϺgG_z/)k:ymRڝzqo}mݩfл f,sg1Tޱ|m([~s7G^{`lB}9wʯ-׳rbIXO/Dc؁&JxF0(ꟽ&v֞?D.Rf$^{M_qO~eCke7uq'YRJ=! ]"^R'V hqT^F{gZv!}d@Ůz֋}ډ 2,+u21崬5ģJ|+=F: AJHGaF01-#D8,+qFNJo[d`c8:b"8ģZCIU q؇p X qeF%ѣV7kV`ar.E:mF9ģfcIKd154$ d)WQ3IxLSҞE=yU hCOrX;[>[&e+NXsR0ws0GdFp7ޑMfa'4{Ӱa{6R?!l*&낙ٸYvl]l׳OlͪYV6 &kd%kBs)p ?hĊ])ƥ; H!I#v3S%]' o]8a˜Ewu}# _%>Lgum,/ڻ&5Mړ x$̻Iݧ 6]P /h^_vGe<^4 6l{9IN}v˲g˓-%#DgשÑηƩ9Sv*~=rp_#ĩA1 t\D8 yEtk״ X.G $.7 KMt.nOOmŢK,p {Rpָ4]n^T?ܨkRF[R*E84t"pT׫ձ,pr|q)h%`P"ē6xʿ 0T>]Q|+G\ū a4)pGyhsߌMRq.rvAl RWa[gr'j1M'p`۰+V)5tBiȧ_p DخZ77?Zw,IP@>#]Ʌ|2lmʎky;N( [ܧ,\\=**j|)f^JW´OG9Z,Ye5ԨX_U͢_^ C!+(Gr+6%V_+rGcp;< Qf؞hM;sJvCn/#˱/w320[?"瀫&T}XK|(ꢮ>ݐ\}<73Yfs~*ak81cgx>\1ӥ]r^[Ɓ!BB9z& OC9R!C9nGI C`vA vFG-LQ]kwk?]= %QK?T͌enqtN\0Zmko9Rb> %ԍgp֢zm&IVRn7f5uh[3I8n&c0jɯq GmJ@HVǪta%BXK u iѲAVϘZ%MC )*֗ ]f!K--.w&!K-Lox{Vꖽ:YQo"N9cȏ:[,I}2{'΍2/&qQ ۮ"S[1?&uӐ#V-I plq2B=_uַ&X6V.U[ 4[˲$ķื8 k 1cy?ޝp LyMEM9jEH͍ʢܳPǔc6 n]]ރ,h0I3“byE͇ CrnlmQNCPd4g~- F}Ar Q=ge~EA?(%3 \!s|ms~2ZezUa q(#Z9xCYfb{W47MMxŞp.Iʿ);{)1ɢܪvbE3yk1$ʗ;O&*}¬z8 f<3~T`@> d)Yyǐ'7|:Q'o!~VJZ}haOW;l/CK)ʄs[07O2@nZ;4R z}nWUj;':'hE Bñ5kmCLw RH'шV?p6[fCZڐN ̔}:u 6,UchfPd@nG2:32(f.Lya2poz:t/>tdFq`?*BÛrhIlG9֣2'>%,10\^i%*{- mfײVŽh.CJvkAn6 o,}uN%@kLdٻ|M$fHE!ekɲIy:CT0 YÂX|s'{fzqnjOmVqΡYCvS  [P>$7oD3D =C 6Fi#'4JBu]/.~,.OS}\M6Ou1M0i}^[m6CG-qx$&]C2j_o􍶦R܂,u@w,2q`J%ggǼ"Qdtw?}i7BFGk[e]hI[ N.K륡ZϽ]`ϏdlMd\͐|M\ f'-Čnb~sRuzL턝;O@wzr}ݵ\K}q 'P}I;ǽlpcor7f)rL<_'+N F8Y*ͫv7Vw>f+w@p2|q].eNM[;.LpL5C7 2<~|5N% 0;B=_y-'W7U%^&HF>m)?&.e )g[9sm0q#c9teVL3>8P l-opu-/0~X+{ udA`ǘIӐ/a1߸ߗP̈́wClPܢ%XeE-v?ϟ?yq&' O?+WH_'_"k7sVps5W~CY|/Ÿ;%$;) go>|"Zs_DHJgU{sV77:W?:uه|]gO,+FOHWRjHm?x$hvNoR5tNN*sC/wҁWA9eRaShalv(|xmF9am3nÆ6ĴMB{8ģ$j=QdD4GaBI4"x4rh7σ02 2KJ2p#F+iYԏpG#+}b0 LdEi!h2j}?ܙ)Xbx1~>-t;O^ 4ڮbWq!Cr m;RC 5H }',FǛ7˸n yu=arcS~+s#Gwǁ+WiO<֙4\~sCY"ej!fp"cub!ǝ YSAd[/8FSlA7 HNcZ_HiM75+V)ruB8dPF އÍ-p-ÏQ- s'vҦ=z.zc/T= @tTo"k{a'9ēZ;29xGE;p٬ؾgY~ι4Zy{k? D&|o|2lm9n0& &H[lUձUԎA]ժ#!M?aŸo;*m(7B<-*=!ŷܬXK nG)Nn֡%*dXz _$3M5/y*Gԕp2avpȼw.uE6!ߢ|d #1A8ģHc!^ȱoeNa5z`^aLln-)kTg9ˊV=n"OjjwM:ȡ%1_'u瀗 _R6NpCE. KMQ[$i27DoM#c1}\i8n"MH^Z{!']U ꕗxd8&y>9 f%l1iRs-Oƹj ef~vA(pd+` tVW ǃF`l|~-_6-\i@^~u7gG[_I]':dd_ފN  ;ǐ\ sȃn:pU gC_DK0G64 [$x&< Ax T^3V۲\ pұʨ7)Z[^2 8=.7h{*\)dSr\7o8C1"={E3#FQ Hob4XUu0ͥm922z1怡#oG0ke+7ol0s%ڇI]'pk.eq068u8:d q>J~ q>zH5wč4:Gyӳ…;IQ'*Er;`qmZ-N݀DRP_Tj(@DG?xҰYEr(vp{L+%cr ɚ^ɍU1b\ =f GC@XP&Q~'A]HK]=D.q€1wfOdr JRy0.w+(}#ջĉzBu1zO_ u^͞!q6FK\8a#Zzc^?k>O.ֺ]_w?UKi}oHYo}%8<zbr[1}w󥈹K\.lXYT.q!F[$ӆhMCy۴?g9$LKS }GVKPkoC;¤y<)܀z!Is0sF,O}G Jm*-YUٰޘǍ@݇Z(UH}/xtYEj`RGGGDVbD3AZ_xC?M/;Y)IݟыxџQ?H_vX-(v]ȌRCj{8#ACc@!ݿ;.AB{9lT"P=j}9WM&^ge2~`S3'ha?ls v _L6x4f"-ٞb/F /ee*RæFM5pTA^Ra됯`_>nGQ"vwԧ oORMm X'Bmkb/`n(1e/R&{D@uYp 2'R0W&Rnf %^gXs)TS8ݞOZ,ޒvC-T(%Ku춢ӣm1[`Rk`-tR]Nz-EѩOJ$0;c|^a*v(fD6 HCNwV3 g{ /ϭmDf!]˻.qNxOGj=gzHzOʸD5qo!rG,%Ӕ[ <͝3/nj,ZOQV.Ze\N|QN_kS7㞔݈7nts%n2`g'3$' ĝ[Ng"*y3Á[LccƱ7b ×ք~ӹŗ..ėz&[%o@7{+qgrJϝ_>4;E¾unN3s\o|eyLN?'| /P\Co-> lq@[0!D i( u[F ) \gqA~Ū=QɛheM!~x$k U:'"ģV^EJ(h%:H6+]s\ͷF)(eBvBGsGFx_XK=6ٗuCP^[Ef vT'U#e'P)štL,n[2U̱/nyS|O-ۡSR[ԉjQlDH9g%Nt湳mm_CM/A.P^6jʊ9*1&WǷq!OcA~`9G: :`MtfkS-,KNEaM:" ?fwm[y!>𛻀\ztCSt!}I9Xn60MVqUZRkAZ_6NʣTW"E(}nzKނnn$ 'Yjg9ܯl[WmWKVB--Ѱ#W: zcD 5@Z|*غ?&/ﳼYYfQ>> eT-qunAfmdhQ?d֝ (ZidGoPjn{gr*٪hU "W _i}U uW!_U Y?:Bk>{mg,;]uJ/C7f/X[fX6{S.׆E#>C 8<>i;e*aZ.Z s=B-:EB~g]T4Ar D']t$]ނ4;>s@ 6d4b]f!^zJ'8.L&W13.#=0{cwaAukˏ֘WLh@0"Z.uŹn֛ MX 2D͜`@ML&ӴQ}{'Q!1_2غYNM$vAB u6wߺ~X'FN%sۺTäz0%_̝Hp|fZZ.Z<$ZHYܢT fgN06+Y?E hV(WcJ,fj3~d ڱP7E3֜En8 yVlA.;U2 .EBVbeP2ED2ünqov]T  \ ZGGZk\ҵ&`E?jSpdWtu;ݫPO-;$RӲC 4t.;Lq*%^-d $!Q<xaA<'P=pѽyX-= Oe7U7͢w_ SЛv~Dexr snaN1ˬ7ykNą&KDioNq9𥺯3qeZAέGh?`{H%nVNt'O< RC<Ϧ!ɯf5+v^4>x P{rn%8ETgx;t, Φ% qDzw*~϶l׫9XRU(dWhrJnM& zyMHvYE}ZE W5|+l; 4&2sG4-c{I ERC`PxG_އ~jb_Ё`t.мA(' ,sRw8yDL)hr[UVy4Z2+k(Q;KUpDsR@;tLmƕItP? G(bQ2Tqϧ@ןH>|/~ | O ; wH{ q?SL^x։~3<-6}.]塊Gx6>c=n:G!;k '3, 8Ec:\Ch7/3ܚw\vr;3K4=}(`5e93@}ts$Sc^@;{#R uJs@>)H1t_xvi j;vlOƗF\.8^*.< tqb0ݷzuʦNJ$~8}%܃p r9Ó'h#'tDiL V9Kjdty{txSsӐ5GNn dSĜ!m?E)bY}0u|'g6|d$īquBdaZJ9ēz7Oغx3u"|Z:Xm&teu ޻%& {/gTS*/F7~'W{JgWO("2A.߅U QSdYbh@lCl*:;,v]5uPy;ؖ딘G[͢O u17+[[Kk*Vp߄]ޭV=+_ 6N8 [U?$&X4⪟-еRcޙHM /3U;a|x}Bb*ރ~3FgN8D!/]_D-Y{m27l*1PG`6Bֹ !:R7 ,]eI09)tZ?}f19:MإVyAod_hEen[AVE[j՞߹ 7'NT,n+޴ve_xCTAZ&[P1+PQ2.`/7[be[FXp J^xyxdim8 adgRvrW-vnĪ8Yz֮s{10A{89%0ֻ.@QL4+DcxԱj236&'|Ħ k,v8ԗ,mJħxm#bǐ'jHkXH[ƀO!DyRC<4Vr%80w6G+6ܭ, R-Qv!^Aq 7)qFWN Y=* M^FCDȌ!Қ Nhh8ѹiܯH.:1>~ڌ{p\N["f=sK\0ܒ%ԗ[]rhсR~:Qo&O KMrxTpy+X,$۩& rpbÀcfn: D&ހ,?=3"ԓ\flXf,5T,ͅuT[Ex\O LX <Vg*ja;fmKd dCXwTlYdqDo \,d.d=mˋ=*dukvW|hrZ Y Fut߱JV1r*6t݄G3y׉ItN`.eoBD/BQkNl·ᱱ= Nv<}XmZA=t]&J@/@d{asߣߙZ(Z.(J[KY}CMEDjuΉoPotN1L1:'u@}H=ڭ-408XV!M!Fllpۨp'YN7 pD;8#msE]$c4GTG0Ϗ=aFx72djOE>̩Xܢ`_H^,NnVQO w|G oFvƝ`^;7\ST2Y2bS0%#)g_Xn`rb~!Vʿ1,yVKJ& J8yJc_)#ӐoH x$[U:NrGC‡$ewa#BO ot֞wCPhEZ5?*8[쮖 ezcSl\[/bI؄gCr%+cr{U͙[pF?J~H{8yHf V3,}'t3 NݩTvr ^29[=?TR ZL ~We.CnT8>>%l>RC2:32CfCڬ e̼|P! _oO8}釟wRMa\9ZވFvc=!:x}'}lOQG S03+!J3b!jlW;X?`h\BhT+-% 3)Tǚ@r^viJc>̭KB|mHGs mTwjOl[VыK7 Vxaox^0bq|!&ꏦwzQߨ?oA%77{/ttCwfFjN ^*됥VܟHBΒG7+W~U6_8[~ej3z!<'0NR^ $uː/"WW!m>֚S|"o8Yj%Wg!Ϧ׀s甽3+ J۬:SkT'f='u`ēNcś-?T>/ՊkYI cvxt<pb:1\,wYg\>dj[S-lh`-SlH]'PU{ró,91)i#tȑwf(Q\9lzm;ZHZH^/K?]g؃Iߴ˅q츥;Y6?Ld{O&W>&LY3h?n^9J7 1+_<5tGgu_j9~%kxB?𾪚U`O]Ļopr]ֵOU>5+olwyr:8)6xx=HUqg`F8yHe؍&={`#cC]+ /AP_w8#::%:~T=)p2fo9_,jy: 5(CV# m8,cbN?^mhRfUqs{" YLqsP9?cT&68) m<{؊M,d-sv?;B=v8{,:?Ap 2s $1/p!< X Y-.8gPO8M;8#A#v-:?1¥2${X'7^Y{GO`?Qu5^貊d؟UZOa`7m}y]:~v4gc\~ׁ]*ݩ֟ߝz߾;ponnĪO X_ц_|b'MV>Ӭ`M7ڛ?"A ݷuWurl&ǹ>:n*7RjHm?x$hh(h8J<-}&¦sŽ;D ӆ0%.:ː/kƋyw= +.|q_ճٖGh<퍈U Dի]TvMD6U3p* U:ݰDxߊX0j_BvCJcL;rY`̛;dRb5 &ڴ'n!ueʕJnQqZ ;!rf7;WÐSRn7pH뽔t8 yTZb_zÝ(=w|\vJ-.,,7Zy{˶K^tVq$ ZShAj=vl4>ggOc/MPH+ gTS2#Ү_cU$)(rS{9ٸMJ-K~UW5܄Hx TjBgC3ϔ2$s[{&])Tt;GU\X/s;57`uhe[Y>_:q$imuX!F^>kCVXun38J z4y @MfT{qC<(EaL.er*t,HJPD8yoTo$ K9o@hӻ=^LJ-{=􆢻ͭ7Vih _OJB~^^| dσ1Gy}foц|K͢ p}۷wdI.*.7r]ǽ/]3ZVݎAm$_Np !64rףVZ`-,'40 פНoQ(z5k혨s C~\ȹEMhDz>Y˭22w Z.boyᗦfrEuA)OȂ]^۶ ʢ珛+یaJe/\uB}L}׵}*\bnLL^G"ܧ'dM^1zT\"Vymr ZMsoe 6,݌31oLCN&3Nn`v8Fsj `f I}x$w^fDgD(ʘ40 {.94p <]h1sc4v} ;d$fܱz5xmq} &pܽˢK1Ś w-ߕjZ}G%˶ܷp aTۗ_^ o}U5g.J8yP_Y%M{8yHVv7*bФ~CRC9'ʣPLdٻ|Ɓ!RmCdܤǼp!* Ut׏? T3}7^Xovoݼe*~ T---=/|݂cΌL@O pܨ) J8}釟wb,z# Zzѷ }lOm/af8V4}Cbs(١]b[^y~`6r St$ϤP]h׋ݰyT+W;Mo篜vo?Osj$;Z܆t4wAVhKŻ?~ĆE?rzwe+X0\$<Kq -m˵CǣgR (>WBn "﫼QӎiDX܁?X ju\_Xk?5BCwˆ[ k/V*zwf #cZU~bWPU| ~RJX%Հ‰$R!Dҁ, ύp9ƹH K*C<"w XEVyKhU^J[%[%m}k}CkJ 6P_ĉwdk^lrkaW7KacX$vjt9 Aq襰N*36-^:E494-] ]ԥ$v%lL"2-3d.4Q<);%nZ!8ģ00`%GS0-,whOچ"78l EPWC!f ǍcҶqIץ%NWu˙ vp f⯂,jf:/pT[4`&J\?3wNP-7UtjtOӼjZ"79ģTCaEgTD3FQI-U gm+lC;v!D42:ۜ`=8p3z<}W,QH٪xv)X ιF&%zQ~ Se3t8󛢹<2+J?|Q[;(ˉ/T%Yq5|KjGwcB9 d}¡u P_pu|iWjA,gl˟fYѯϜ;5K`-jc В{0#0jFҩa"rׁWIވ*#Y  cVHpZɞI<orjԪo~gՠd X*\go'$E3Xο糬`ooy66MZMՃƼWO.?[SנrKKOq\%W/Z+WZR{V%ܟqk5gP_}NO>u~t%>x8Y߼ʡ~_ojE_q#ȏU܎˹5jq~;SeP"#YfT.3 Qz-Id8#Ԝls<7a[MO8=hԧ3 O)2lv$9Zb H\Q;x'vm ٟa$u3dpG#? YmՑs=CSGz  !s3*p 2A帢~B [^OOs!k1̷*iބ,j*;&\nH]jQӐ\ѡ[I=dfZKp5ӹeF'6Ip@0:deՎkm&$x# v ʩȄ wjRC<;yN}Rێ$,,5RfWLUa]E~pge#/٬21@~l \ory,ӫ9 ގS-(T khXp\Nc&0cW۝M$5.͈],5*\@h( i a10 9QpQI&<`Meڤq KM[fY}%usc(XnlW2u U*}fyܴᭋ~˽/Zn=E"6,SٱZwb.;tl8-q.Lc nj˦`t&pPjNZ/oA܈?RKOH}C<8;vz&jxR8ntV~>$!O,|G,6e :}9ޒy r+ x̡t-ҐeO1׈S:ue*+.w~dBbT4GȭkuSH`}Tp tZM!!ԛBn] a#-,FN5qz jj _mn- 1/oVhQ!5HZX@^Qp/-RmXT碩 P&5ӷW _Q6f:yȱu)c].A^fVe \3<ŭux[&O8ģHðN[[?aX>xڨ{צ]Kx?![441j~B$L 4y7βz>۲]¾ħ~Y}#~ sV.`]'L s#b %CX<=@Ĉ.~IOгg!M1!8ēzc+19,A0<Yjr축NDߨϔ܈pĨ*%dHe(Qe2Rj)rM7/1M9Yh~~]3YZ(W g sc&W獉3؈6d]79Grjs9+ZQHq=v,>pXs¥if՞bVMhW27 P:(LbjD ֆc5@9P#> B0-kJElfwBdtpF9ēzUVfU)$eYՌzƥDRQ 9RQkD[xSEb` ?S6fv:׏P>2tsz[ |Y*Sbt&Q_61Ů8Yꐶ| _Z]>B|^7wN/)%׍ZH$ؤe{\Z=r8YsR<~GxZWvB0=R?!ԃOP[y%A+!@XEUybUNHkMF SD yMacw.0^s1¿/sfp BnNG%Nj B>=8W+eM>Ep}/P{8YQK> kW 2SoM'$^0xZݗPꍸp_BG9ēz_yXla_#A+áZ_r΂ZL:[[M c] qBVo+L CmַѤ6Kpup\7UYktBd L&9ēz #k;s9 OC>-J7ozP?t%\ ~p lI,u9nhy.SS:eȗ72;{VY>V<$]=<+ofEȋ1Hds,^s\ѺD B꩕Ǟ/PU[7 9pM*Oc-:6:Q@XҟڨE1i'W@;8#ZmyiK#kGc̿ :AiyD m79< Qzir.GX8o I|G hie!V eڌxH!dC\e#eW9E[b2,T+|[Q;4Cw`B pTgZ1!Vsv z#[u.OH]kېS8zՏ^=ZBmI2d@1m'ad(Gp*TAkÐNr2 ܷᬄ!)<ڀSDg4*5'.Lqϸ.bLEZ')H(.b7{,f:9d['= <!Vރ>pO.)#GQ"Zo@2vGXn.nZ;k G .܈=}Qg Kżԍg!Ϫ[KC P="V~&%5ģZdOM BS#OfH1`rFZ}o ^Wsx ;(1!V7%2Afb⓻Sx BkgC9 dz'uÐtˣ Rub5b9 S@:"?^'/Sк Y}vOxNr cw cwR{ >v?B:ţ;5|#B!V7x\\0`/9jơԽ)DH|5FZ4  T UID%TM=H]' d!pE1덙!w5`yy S^QSv™:" |23횮lQ*xGO Uk'|O"רe)F9H9LyAgŠU]f^5Occ&Zj>TmZ[nSρ ad}r8y RC:J; jnkLdٻ|66b!AEdqr/M €YsǞ|$$ $T[BvD ͮmٷ^o7vT---=/|݂cΌL``f:7387P6+BB3/_<}'4qka>Nc&*Z< [>%vf/(89ݞ:LX Vͧ8%;Ql޳Qv6+ϏP04F.!4v zqcI^P}\W4r>ڽ>+s_jq}1C[=Gen.]UR_oot=np~K&)xDNoߡihy 933 ދ (Pzsf-ɿg됥Vj}7 $LS1cʝ|GVEHM8d`C|!߃v@P 5o!b@楤5,5$楤8yDx(:d %{=6Gx 6_y `گܡ0Y*;NAtMz4J’`RB9kࢤ8y ga\#S[ A/\SBNUR7Y}rgVx#Xއ~x/غT;?Lt*R^6R;uN%fk..R1C';SػJ if.B^lCCw uVwJ2"n=k* p(/EI]'p(gYfsb4 C=lgtɉwp{dx_(.k`V=6iS-$O$`9"5`7ra-;nitMf;Y^ӅՏ!8.BVo}L5C8V{7`.AP"Da#ԳB_j9v50Z o}`n2e-|/[OlYwg}?|e_-2qMgkOO \?n؉_|b'IV/>ӬcTF?9'|߲!_yu(eN)"9#A.O1I`?dwY͸/mRC<ƽ,ޘO^H,"A{|_TƗ?R7=n~M{K=🞖R6v5YPw 䪻.@^x,\lKܩI0 Y0P: /"7W(pԘ%aTR&amS{ B8*^(--ڙ#{jGei>,˼.`7da)Sܨ%L[LƢ_jY|#Ch8 Y_xt*nLz#Ճ,]4]J0c/fY=1ǥ%^pKI,b: gӱ bv?y2C<܎ǂ[Zx}V` -T C(8bmZ,v |]G!-}Еz\q)3gtLb^ukt({n#O{$1KvǂS4$.F#ښ#\HU"dx2ʄi.![tXP;YnI(x4ԆnWK~SEEiA;8Ti 4YY:HZAo]qm:& 侧ו_ꇌv6Ox}ZN`g;VqףXk(p&v6EKsnA!dnh1" 䦨nLB;;f_!ve[ »/Aַ~Wm"Ci@)\w3 ,jk=}1,:cec 3e>7˛HaZs*)<* Mdd]?,p j11"ucܸi|^|^b~MSe>O}r\v߇>)Q7ϱOr^~T2vQZǘ{>dQVi4m+%a\S7y^snx#<uUȫ:,5R)= hi,ץ0_z^*do ,6 YMvGZ1cgy]`V٫!,yS ʾMD%8 7A d C~\3[,;g!Luke,Q犡3xr6rruR Y}5U|7Ucs Q&fcU]ִYG2uw-Zm!8pӈ$nތǘ{Sbu8 YgKטn,c91M`C<2Z6@I* m/7^v Y7xhAqw{-8mf:73307mcBh@l)dH:R!:2R)Nnk侷}=жm?}XodL"8C&:uT%2zc^{rzd$޿]Y{tu+F8`TbH8Ϗ[ǖ=&ű%:xϲBfk/g<H5[ <;OMbqTG(>^p6)hfj#0uʥIKZpTEa Y9u/oz}4@ K v֖:芎Uԕ@K﩯Ūm]7q+o7}q)`5{>5oHP_< +Dyf4{IW#i"?_8YߥmM.$(@V-Aj1%2vn@1!\g !˥Ŭ)x|N^Ԍ̌oፒ;1494*4aʨ,~Q!b;ȱa8tJ,CbCF4B%GR!ƨ"mz$i8$Tbqgjqvn s`Fᕹv mCZt2Ĥƻ~ڏ[1}HCy[܇uh9 77s[b F8HZ8ģЭv0-N&zAVI8_$ܯQmyRd6XDzlc@HB+Ix$S$Q,>۟syIjٜ L2I>G]ȥ܂kFGFl$3F<LO?O<󵞨3X< NL+/t% 8@Qiػ{i?$_Bzatժt 0%"a)R#Cr׷7'aK09֬\o\ҫ0ۛ05.qV*֝M673yvU;|Wkǝ+*cZwk%nX7BASڶu[pl0a`Bꢫ|oP~[,0;%+n2X{ׯזޣbsO_zU{@ry/pGX_-9 ?g%ʇP_/)\VC< ؚ2I+|=Dm8xc.]ͷ Oi|PyV:352:=NىQV6!^b{/K;5եյ`Wwt, '\ !_V b;{vv%abpdŸ<0^x2ܟJ ZWO#l՟fK-U V`A|QUJE~opV>+I+;q4D6&C}TN; ځԧJƻbUZP1TB9r`CyN; wh3IMa讱37?!MQ N K#9cƄ1eRC< s ^|l$Bx&N7 jH}/u E] l)؄kMO2bo3h}N="!& RZa>}MQ4&|z!M6l{ż'O ^oʖDo\B<>Q6kR>nv"<|k⑴V*C! @ëG[衚TzUbk;sD_>*} _0٧HF]3tFQKẑTg ZbBZj&G֥(V3)եr&<}%`˵Zp KEڬ;PQYw6K!lKĮoC`J[,d}kr[p21ƜB~+hgwDy߃GAS=bD*Fa&+nΖM !K-rռƏiOgh`,HuFNscr*[.Ńp)SkrBNRFHM^ATV3N#y"G)q#·=ZlA嬒in%gX9 = Ùb)yԪ rK!ƦPk%%2RG.eCGb3'C!2c;BՁ!8a =qJ;+KźRx%uǁzIUc[YbYgH9ѶvM1jSټ'ܥUȫڊz~M=Cg/"ܙePw"lQCT 7-#Ȉ٬a6`װIq5ДMG۳7򖌕: f/et8YjGJș&~C6!f۾%i|.}ˮ]}F}+6 [y%w۷l`oc$h}+[CoIk4oك: [ʏO{Qt۷m/yq۷ oֽ}+nt(j M1ӆ(ۧ!}+xn]lCZׯe۾?{U+g9X|?pDXn"lm߂Vј#y{xr!w~߁܄}w!U@{dцfpl_RN,M 3힡pMʺV ' G~E#h_7 kwb6`/Rw~hzeyIڱ]~`^ B/*MiHvpGXnbfb]=7˞g.%_S$en؅\-Hd菑iVǓIuzD)3X< NL+/t% g (G݀ocܞya\ -,U%gXgyӥ;fɵX`іg.i9,$^2U~k>k2tJRjw9 K?)B.S-#cr!vG0/@P_V+fѵÂfXrG.F5O4$mMPi5J*L' Foz6m QD]Bw*i`vi;DwZ+aFM1Q{P"TEcն[{azy##NO\99nx+kqs|n貊\[Xۦ[[XۣʷDVVq迟 CoDuNF*f?ƓNqxczuiumjx-ز?529=>>6=:911 48T2Q:{;>J: L%^e[U&a{u+21Q1wφTFVR_Wg׹Dt뷫?͖" ZzR犪R7-{k=〟~N×CkNs'n͉E6GMj|HEH4Z= YbZ77xoAiԖL C/qGaګgA) w5,a n5,A/zeYڬ[{G*'`if0%NCfY"º!UvA*'aM w(rPU+eSĩ&[%nOUN+/,` K6*8h!|ZeU8e "< )d̳Ƀ\ yPJv)7z> KBmHx$֢J>b 19:;Hm% %Qn is39˺v F;ufQGh tSkQge,M.j6YR :iV-UL(SkٮVLs͎$9%})2 goܻ+(Z9qp2ϟvXs_]' T6(we܊v],ƑC* ((>YXZӻDӉ6 \^w?Jۨl@r-D"Gx}2KcCPz.#4sC/ݟզkXh /?QoB~|(;8l2Kea˚$Dw.B^T~6z vUfRjq_OGzd(dX-EU(X7 GEn'QĹse2?X6:gNPUVZ:k-'| >ͰU[d5'-_  td5xtpXwXQ5ԝ>c7K;<כ a԰:= 7V#e ^-1Cb MD2Do_co.SKP"|?&ՃZAbn[c Ӝ57L(֋ntT6U)B{QMS1scBKN¼8N@VL ǪHC4=VV[ HWM qU󸗼}6`d36p5]1Gkk%ҝǐk`pG] }\щ + rNB~zًHj p$57 4^Z/8T!ӹa 2ݘރ|n%LAN5ߍI x IFCn|5sv Kx;1ޅ,Ĥx77ħ…t nmNH'P`-XC8kó|M.*;M87ᗐlimmڀ]߱8ېo7އහw Kj>Lr>%hdcntfTzUkw` 9d(̋r? B}#<#]v?x*1Ju 4R7 z!HRL6*JtYD!u'j/pqtd/aK:2 ,5O5 dy4+mzFBr;[? [Ҷj91|ՑT;_ItFS_.rO*go#*>}J3 TH0BhJ~,>Q@.1hE?<45hǴwC;Ħ_39 r㝄Ե-vW)Csgy ͱpGmO"T{y<~_%E܇,uA[l E9ν;"4ꐺ.`rZd$uC<>!fHPi~A9ģ:4ᤌy l"To],Jj8Nkb;_}+G` Q3YR ,Jy݉Jp@t@:ܮF7$r]۳Up\`>QُttNs_a߇d֜ vA ;7!l|EC8yc RC<KD`qCrSm,ApG۷G3EQ('-lXz]_$ j'k^,w4],vY@b:nxP垦h e;!TBGG+A:P l,5?4N|1B<x>,6r>ҟ{YZ UbD݉w!/+Pq˂rPi]Oᅩ c.Ptܘ1dEOw9R>~ȥ|(vcYfyAҁ巪v=s{岕9kX#*%Kx:Z@KV] _qLQ&.# {jrHjR`qY֯ Zcn) :a7cѤ%Kx(ބ,5oВ%6h$lD =A#uF5π!۲؈F Mx MB4pgȽ70XmfNӎ [-}mRs8v\,ܾpη`o,laK+wC[LQښAfnݡ9|)u L'A '/>s-TB4 _*o;uܾV,'" OzZt*0BA;yRsajVQS`9|̐]vW7 X7$Hd{ Ȓ>[b4GIa~$'~ Jk/kKL$+'6D30a;ƛm"K.73k3rx7ܡV zss AeH6ia|4ao2>,7ָ<.BjY}"ܤeqm;MCP*7S!7\,5M7.[?fH.-#| tSYXBqvBʬNKːpԝ^~n4 "jM\ԑU݀)M%=NCZs;g 4%Q;ϝ_8?31lܙԝ;UY?n&%uu#<{?uIgQ"f+i ~1KX棥]rH2IȓxW94Hpjש`G;'e:c&v-iI~ o$T[?m"6`;d(7ƍ!w{] w I#;G, \jp{ehh=J%orfOIk4Ʒ(ξۮ Yg<u{%u0t&D pWyDya:r6H_VI?DZ} G 4޽He(dXv`p!NB'dͷyih.C=j2MV >/*s83 d\ z\T: QKc!h?O4G<.rB: _R8,c 3aʐj/RDdu#]RYLޫ('Y>5\Wb틏酉I}gf 8>w~Rr/q Aeypm!Jw#G_[H]?pBn'^5pz%.5!37<'O+C^e؀.A^R՚[Wmz]t<qEE% YUip=dIWș(R r[,Y{AXßAPq |YsVɴqE @= oW( cAzjOI7v}3*Bt\HY.RQ ]Dp ;PizSA7=Zw|KyEư34[, :/e=]m _1;C)E >'BT\ 6k6: R74U !:R˘6қs> 8Y@(#fƆf&D"2 ]D-?nG6d&poz&=15:41=*\aH?p`۠6Yo2iVyJN*M oA!ԗqUr\l/{Ve󴠸igݶhڢ?>XwpzjSR7]_N8ڭo\'aKlueeft73dϰy[ķ8y ;듏Qxe7B.҂Pjtd$F2c4tո7do0S7Nji}K{ H2&?B yje\m ӡUkc+lYfA30&<̾dzwjs_Y2K=qr9@(CwzL].ssWٺ8=zٗs֎+(dQC ~I{^I@ C~_@wzܳsϵg0B\kqh[襭_5ŭ_Aw?FaB}̈O+Ge:s١»ļg'o@p2aThT͵GՌ/p챆uƳT<-Bق]wAxQ JQ&M>=q9_E5@AfG@ǿNJ_CK#RS3;^/ Na^wPewNRf? 93}?}8W`M9X73(3tG%X2AT 99ն؉Z4+΍e-|A/ OyI}{M۵77No0DW&7:m{` qJh|FRڶutq uV(xr-h3}pΎ#x'̙nΟn:۴~ދo~ /W+_Ž"$|I/pGƍ;llp ZxZ!g%C/CxPP|3EmoQSpzޟ rWB9lJ B1[N:o3dt7귶:g'_zwFuWYoku`'pi8165+.1 5E%/+% 6Ngh?$nvC7*{Ÿ<0HxڟJ ZW7u.h}OCަԹz{MZ8签S}W>u9l=Ϛڋ①3'Y;qgtR =?x_J 0gjUH}7u=UNP}lr@i`m&9nm3n4 ,x4D/8c^,ՎA5 6 !MHI/Y B: ^| aM}e RaG@s 6!Zuf#ngo}DhÀVXyOYIL.Xn,#iU:TQ,Q,u–UW,uK\NAv (<͉ά,VHUBvflWtʫ2rq׎?+87΀xx2jEO%A xem>ܶv9Ƙ;؟,DEE['iy˷+kDD*09Ln"f}d$; K v-emt]/}Vq#eV.Hyv,QC6>\稓:JV!+Tp :4]?8nHnP{\3@<޾}S1ϣŘux$*sGۮ^%Iq'B*~5Tk(&M&kyY\$cېfjiOpBs\pb5R!E'ebZG"RW\$:8i{ƨ9i(MRB܁np5턖4C<ͰCcȏs6o.H#|]QB^Uc&+X1lxFd E{nj'$!Z "D*-* F6UKb=酣.B .AVZfE݉?.CV0-'3cqCm5h/ȤAm܉pb`zO[Mj])rb#n(O` 5—cd? Sb2]$f9s-aEɕ~3!LKֶ!mA.7?bqJe oِʐ"fC7'HH]+Afʾq;mO b+7gLQv@Y_D}M8yPtXE rǐb>NFs>pHIyAJ_9w,.XBu-/:1 Z='>&$*WAgKnNcr 6}NOm(>jmC.:E=q>^}m RC<4N2)j!`еI 3K_8,5 mᓨ2d}ޯ& 5&ׁw .:p7KM\jw̨Liv(͎FGN'B60+n`dKv D<f_5EqՍG^9X V)ɀWu *T%v0|Pi8֛@uzNܪ]2Byg k|~5FS}_ 9:Hn@~l`e܏R.SY}Wy A4Fw@Jk"-GܟO3;cej+akU*)W"4|\i3\Wku4x \bۤV^@!w؏2!,oE恋M /ץĄaY)P/L;~Ѓ,̻6؅jv׵Ue&f"nwp)E,"h'u7 'Es}&kjIxBz6bvݶ(ܯ,G/$}=:hG:ڑƊf衱ۉ`vSvT9 M0fJ3?:61[h憝qE[;lS;(|l PS#sfvϭ f= fReua+AC3+ZNsGݡQkKgs.wtgD q(QyX~Y}s>]DE1s:ޤpi*^:m܅;´vl}@VG x!KzzIb4_+<6txdR!ITCNs(ԟ4=%"0o!9lҼ]꛷tq'S^Q%:!CY F{ZiΣ=X),unY>2=KUT Jv |CW!D!:m7AHq`dX2!JXxZc#21c CaHkpTjDq,7? Qn$2-.gH]`DZѴ F ބ,uvˠ?T SVNx6ATm%qj/r8ҹoPm.RG}ޥΒmgS| ?ڌjR6C綻˕†؅̯>3h]u>Rv ic~ڐu\vDd|%79#g$]*gwww35^29]ӵ EZmAk]/q~mj#O8l2ƖxLpJ;M]JIݾpۮEImFFGJ g (ӟ[|/V S2is3>Es Uf>9h?77v.qw|‹?n^4*nj)Y;M&=d) >>Ca;N>2TG[;nM! :CT0 9>Z~:+$OBy}5o37xsn.hnls?8yovvv-K/s5:0=~AHftdf|xo܉Ʉwl{veӵ /a e"􍎃=O?8Į:=)Xʰ8F_g١ER^2Fy8> Kfy7đR<^dbۺ[/8e~CcmN"iI!pT{c+~Vvz˛_;?P>ϩ+s06 G꡿-s=uŪm]7q+oƙYP~KZΈYoqiw,*dŬh@},},~é-H6Z^#)!K$Ck/}(iT>&a-ԵB˷ )j#/D1p RS=cx pqXXز(wc@}7[-RC<.yS$nzi3"ģX,}nZVusyI N9x(+؋ThD6?]ȥ܂?K=Idg`4hr0q)WKvRX,)9]C}<|qAV D!T}V{~Y߼\] Zj-O3& KVSkkJRʝL4} ș#;P}xn*(Ayg Ketw9b]"$BP;eJjo.,;Zz fY@Y. f| ծ[?N[!}tGiR':ioR}΄3gcDr࿀<j~^/A嗕"f̗sj1jIo,1mĶud:S)gC< [rGd70SX  w5*C<DV٣JP* tFچ!L7NىQ]rmC, vkӫKkSkɉ nYa~J֡I_VJ:Ep\P߈ "3?;H/c$~eM,:y_UWlq?T˃veZ?:k;Knb4 + ZFWC58Ͷj~\'ƿ0apcluster/src/0000755000176200001440000000000014170271573013052 5ustar liggesusersapcluster/src/R_init_apcluster.cpp0000644000176200001440000000164014170223535017060 0ustar liggesusers#include "apclusterCppHeaders.h" extern "C" { #include "distanceL.h" #include "aggExClusterC.h" } #include #include #include static const R_CallMethodDef callMethods[] = { {"aggExClusterC", (DL_FUNC) &aggExClusterC, 13}, {"apclusterC", (DL_FUNC) &apclusterC, 5}, {"apclusterLeveragedC", (DL_FUNC) &apclusterLeveragedC, 5}, {"apclusterSparseC", (DL_FUNC) &apclusterSparseC, 8}, {"preferenceRangeC", (DL_FUNC) &preferenceRangeC, 2}, {"preferenceRangeSparseC", (DL_FUNC) &preferenceRangeSparseC, 5}, {"CdistR", (DL_FUNC) &CdistR, 4}, {NULL, NULL, 0} }; extern "C" { void attribute_visible R_init_apcluster(DllInfo *info) { /* Register routines, allocate resources. */ R_registerRoutines(info, NULL, callMethods, NULL, NULL); R_useDynamicSymbols(info, FALSE); } void R_unload_apcluster(DllInfo *info) { /* Release resources. */ } } apcluster/src/preferenceRangeC.cpp0000644000176200001440000000376114170223535016756 0ustar liggesusers#include #include #include #include "apclusterCppHeaders.h" using namespace Rcpp; RcppExport SEXP preferenceRangeC(SEXP sR, SEXP exactR) { NumericMatrix s(sR); bool exact = as(exactR); int N = s.nrow(); double dpsim1 = R_NegInf, pmin = R_NegInf, pmax = R_NegInf; NumericVector colS(N); for (int j = 0; j < N; j++) { double sumOfCol = R_NegInf; for (int i = 0; i < N; i++) { if (s(i, j) > R_NegInf) { if (sumOfCol == R_NegInf) sumOfCol = s(i, j); else sumOfCol += s(i, j); if (s(i, j) > pmax && i != j) pmax = s(i, j); } } if (sumOfCol > dpsim1) dpsim1 = sumOfCol; } if (dpsim1 == R_NegInf) pmin = R_NaN; else if (exact) { double dpsim2 = R_NegInf; for (int j21 = 0; j21 < N - 1; j21++) { for (int j22 = j21 + 1; j22 < N; j22++) { double tmpSum = R_NegInf; for (int k = 0; k < N; k++) { double maxi = R_NegInf; if (s(k, j21) > s(k, j22)) maxi = s(k, j21); else if (s(k, j22) > R_NegInf) maxi = s(k, j22); if (maxi > R_NegInf) { if (tmpSum == R_NegInf) tmpSum = maxi; else tmpSum += maxi; } } if (tmpSum > dpsim2) dpsim2 = tmpSum; } } pmin = dpsim1 - dpsim2; } else { double sumM = R_NegInf, sm1 = R_PosInf, sm2 = R_PosInf; for (int i = 0; i < N; i++) { colS[i] = R_NegInf; for (int j = 0; j < i; j++) if (s(i, j) > colS[i]) colS[i] = s(i, j); for (int j = i + 1; j < N; j++) if (s(i, j) > colS[i]) colS[i] = s(i, j); if (colS[i] > R_NegInf) { if (sumM == R_NegInf) sumM = colS[i]; else sumM += colS[i]; if (colS[i] < sm1) { sm2 = sm1; sm1 = colS[i]; } else if (colS[i] < sm2) sm2 = colS[i]; } } if (sm2 == R_PosInf || sumM == R_NegInf) pmin = R_NegInf; else pmin = dpsim1 - sumM + sm1 + sm2; } return NumericVector::create(pmin, pmax); } apcluster/src/apclusterC.cpp0000644000176200001440000001300214170223535015652 0ustar liggesusers#include #include #include #include "apclusterCppHeaders.h" using namespace Rcpp; RcppExport SEXP apclusterC(SEXP sR, SEXP maxitsR, SEXP convitsR, SEXP lamR, SEXP detailsR) { NumericMatrix s(sR); int maxits = as(maxitsR); int convits = as(convitsR); double lam = as(lamR); bool details = as(detailsR); int N = s.nrow(); IntegerMatrix e(N, convits); IntegerVector E(N); IntegerVector I(N); IntegerVector se(N); NumericMatrix A(N, N); NumericMatrix R(N, N); NumericVector tmpidx(N); NumericVector netsimAll; NumericVector dpsimAll; NumericVector exprefAll; NumericMatrix idxAll; if (details) { netsimAll = NumericVector(maxits); dpsimAll = NumericVector(maxits); exprefAll = NumericVector(maxits); idxAll = NumericMatrix(N, maxits); } bool dn = false, unconverged = false; int i = 0, j, ii, K; while (!dn) { // first, compute responsibilities for (ii = 0; ii < N; ii++) { double max1 = -DBL_MAX, max2 = -DBL_MAX, avsim; int yMax; for (j = 0; j < N; j++) // determine second-largest element of AS { avsim = A(ii, j) + s(ii, j); if (avsim > max1) { max2 = max1; max1 = avsim; yMax = j; } else if (avsim > max2) max2 = avsim; } for (j = 0; j < N; j++) // perform update { double oldVal = R(ii, j); double newVal = (1 - lam) * (s(ii, j) - (j == yMax ? max2 : max1)) + lam * oldVal; R(ii, j) = (newVal > DBL_MAX ? DBL_MAX : newVal); } } // secondly, compute availabilities for (ii = 0; ii < N; ii++) { NumericVector Rp(N); double auxsum = 0; for (j = 0; j < N; j++) { if (R(j, ii) < 0 && j != ii) Rp[j] = 0; else Rp[j] = R(j, ii); auxsum += Rp[j]; } for (j = 0; j < N; j++) { double oldVal = A(j, ii); double newVal = auxsum - Rp[j]; if (newVal > 0 && j != ii) newVal = 0; A(j, ii) = (1 - lam) * newVal + lam * oldVal; } } // determine clusters and check for convergence unconverged = false; K = 0; for (ii = 0; ii < N; ii++) { int ex = (A(ii, ii) + R(ii, ii) > 0 ? 1 : 0); se[ii] = se[ii] - e(ii, i % convits) + ex; if (se[ii] > 0 && se[ii] < convits) unconverged = true; E[ii] = ex; e(ii, i % convits) = ex; K += ex; } if (i >= (convits - 1) || i >= (maxits - 1)) dn = ((!unconverged && K > 0) || (i >= (maxits - 1))); if (K == 0) { if (details) { netsimAll[i] = R_NaN; dpsimAll[i] = R_NaN; exprefAll[i] = R_NaN; for (ii = 0; ii < N; ii++) idxAll(ii, i) = R_NaN; } } else { int cluster = 0; for (ii = 0; ii < N; ii++) { if (E[ii]) { I[cluster] = ii; cluster++; } } for (ii = 0; ii < N; ii++) { if (E[ii]) tmpidx[ii] = (double)ii; else { double maxSim = s(ii, I[0]); tmpidx[ii] = (double)I[0]; for (j = 1; j < K; j++) { if (s(ii, I[j]) > maxSim) { maxSim = s(ii, I[j]); tmpidx[ii] = (double)I[j]; } } } } if (details) { double sumPref = 0; for (j = 0; j < K; j++) sumPref += s(I[j], I[j]); double sumSim = 0; for (ii = 0; ii < N; ii++) { if (!E[ii]) sumSim += s(ii, (int)tmpidx[ii]); } netsimAll[i] = sumSim + sumPref; dpsimAll[i] = sumSim; exprefAll[i] = sumPref; NumericMatrix::Column idxLocal = idxAll(_, i); idxLocal = tmpidx; } } i++; } List ret; ret["I"] = I; ret["K"] = K; ret["it"] = IntegerVector::create(i - 1); ret["unconv"] = LogicalVector::create(unconverged); if (details) { ret["netsimAll"] = netsimAll; ret["dpsimAll"] = dpsimAll; ret["exprefAll"] = exprefAll; ret["idxAll"] = idxAll; } return(ret); } apcluster/src/preferenceRangeSparseC.cpp0000644000176200001440000000737314170223535020137 0ustar liggesusers#include #include #include #include "apclusterCppHeaders.h" using namespace Rcpp; RcppExport SEXP preferenceRangeSparseC(SEXP iR, SEXP jR, SEXP valuesR, SEXP nR, SEXP exactR) { IntegerVector s_i(iR), s_j(jR); NumericVector s_values(valuesR); int N = as(nR), M = s_i.length(); bool exact = as(exactR); IntegerVector ind1(M), ind1s(N), ind1e(N); IntegerVector ind2(M), ind2s(N), ind2e(N); int i, j, ii, K, temp1, temp2, length; // build ind1e for (i = 0; i < M; i++) { ind1e[s_i[i]]++; // count ind. occurance. ind2e[s_j[i]]++; } temp1 = 0; temp2 = 0; for (i = 0; i < N; i++) // cumsum { temp1 += ind1e[i]; ind1e[i] = temp1 - 1; temp2 += ind2e[i]; ind2e[i] = temp2 - 1; } //build ind1s ind1s[0] = 0; ind2s[0] = 0; for (i = 1; i < N; i++) { ind1s[i] = ind1e[i - 1] + 1; ind2s[i] = ind2e[i - 1] + 1; } temp1 = 0; temp2 = 0; //build ind1 for(i = 0; i < M; i++) { temp1 = s_i[i]; ind1[ind1s[temp1]] = i; ind1s[temp1] += 1; temp2 = s_j[i]; ind2[ind2s[temp2]] = i; ind2s[temp2] += 1; } //rebuild ind1s changed when build ind1 ind1s[0] = 0; ind2s[0] = 0; for(i = 1; i < N; i++) { ind1s[i] = ind1e[i - 1] + 1; ind2s[i] = ind2e[i - 1] + 1; } double dpsim1 = R_NegInf, pmin = R_NegInf, pmax = R_NegInf; NumericVector colS(N); for (int j = 0; j < N; j++) { double sumOfCol = R_NegInf; for (int i = ind2s[j]; i <= ind2e[j]; i++) { if (sumOfCol == R_NegInf) sumOfCol = s_values[ind2[i]]; else sumOfCol += s_values[ind2[i]]; if (s_values[ind2[i]] > pmax) pmax = s_values[ind2[i]]; } if (sumOfCol > dpsim1) dpsim1 = sumOfCol; } if (dpsim1 == R_NegInf) pmin = R_NaN; else if (exact) { double dpsim2 = R_NegInf; IntegerVector Index(N, -1); for (int j21 = 0; j21 < N - 1; j21++) { double j21sum = R_NegInf; for (int k = ind2s[j21]; k <= ind2e[j21]; k++) { Index[s_i[ind2[k]]] = ind2[k]; if (j21sum == R_NegInf) j21sum = s_values[ind2[k]]; else j21sum += s_values[ind2[k]]; } for (int j22 = j21 + 1; j22 < N; j22++) { double tmpSum = j21sum; for (int k22 = ind2s[j22]; k22 <= ind2e[j22]; k22++) { if (Index[s_i[ind2[k22]]] >= 0) { if (s_values[ind2[k22]] > s_values[Index[s_i[ind2[k22]]]]) tmpSum += (s_values[ind2[k22]] - s_values[Index[s_i[ind2[k22]]]]); } else { double maxi; if (s_i[ind2[k22]] == j21) { if (s_values[ind2[k22]] > 0) maxi = s_values[ind2[k22]]; else maxi = 0; } else maxi = s_values[ind2[k22]]; if (tmpSum == R_NegInf) tmpSum = maxi; else tmpSum += maxi; } } if (Index[j22] >= 0 && tmpSum > R_NegInf && s_values[Index[j22]] < 0) tmpSum -= s_values[Index[j22]]; if (tmpSum > dpsim2) dpsim2 = tmpSum; } for (int k = ind2s[j21]; k <= ind2e[j21]; k++) Index[s_i[ind2[k]]] = -1; } pmin = dpsim1 - dpsim2; } else { double sumM = R_NegInf, sm1 = R_PosInf, sm2 = R_PosInf; for (int i = 0; i < N; i++) { colS[i] = R_NegInf; for (int j = ind1s[i]; j <= ind1e[i]; j++) if (s_values[ind1[j]] > colS[i]) colS[i] = s_values[ind1[j]]; if (colS[i] > R_NegInf) { if (sumM == R_NegInf) sumM = colS[i]; else sumM += colS[i]; if (colS[i] < sm1) { sm2 = sm1; sm1 = colS[i]; } else if (colS[i] < sm2) sm2 = colS[i]; } } if (sm2 == R_PosInf || sumM == R_NegInf) pmin = R_NegInf; else pmin = dpsim1 - sumM + sm1 + sm2; } return NumericVector::create(pmin, pmax); } apcluster/src/aggExClusterC.cpp0000644000176200001440000002003014170223535016244 0ustar liggesusers#include #include "aggExClusterC.h" using namespace Rcpp; IntegerVector concat(IntegerVector x, IntegerVector y) { IntegerVector res(x.size() + y.size()); std::copy(x.begin(), x.end(), res.begin()); std::copy(y.begin(), y.end(), res.begin() + x.size()); return res; } NumericMatrix subsetMatrix(NumericMatrix x, IntegerVector col, IntegerVector row) { NumericMatrix res(col.length(), row.length()); for (int i = 0; i < col.length(); i++) { for (int j = 0; j < row.length(); j++) { res(i,j) = x(col[i] - 1, row[j] - 1); } } return res; } NumericVector subsetMatrixToVec(NumericMatrix x, int col, IntegerVector row) { NumericVector res(row.length()); for (int i = 0; i < row.length(); i++) { res[i] = x(col - 1, row[i] - 1); } return res; } NumericVector colMeans(NumericMatrix x) { NumericVector res(x.ncol()); for (int i = 0; i < x.ncol(); i++) { res[i] = mean(x(_, i)); } return res; } int which_max_NoNA(NumericVector x) { int index; double max = R_NegInf; for (int i = 0; i < x.size(); i++) { double value = x[i]; if(R_IsNA(value)) { continue; } if(value > max) { max = value; index = i; } } return index; } RcppExport SEXP aggExClusterC(SEXP sR, SEXP KR, SEXP actClustR, SEXP actExemR, SEXP objMatR, SEXP exeMatR, SEXP actLabelsR, SEXP selR, SEXP clustersR, SEXP exemplarsR, SEXP mergeR, SEXP heightR, SEXP preserveNamesR) { NumericMatrix s(sR); int K = as(KR); List actClust(actClustR); IntegerVector actExem(actExemR); NumericMatrix objMat(objMatR); IntegerMatrix exeMat(exeMatR); IntegerVector actLabels(actLabelsR); IntegerVector sel(selR); List clusters(clustersR); List exemplars(exemplarsR); IntegerMatrix merge(mergeR); NumericVector height(heightR); bool preserveNames(preserveNamesR); IntegerVector colInd(s.nrow()); if (sel.length() > 0) { for (int i = 0; i < sel.length(); i++) { colInd[sel[i] - 1] = i + 1; } } List ret; // compute complete matrices before starting joining for (int i = 0; i < K - 1; i++) { for (int j = i + 1; j < K; j++) { IntegerVector joint = concat(actClust[i], actClust[j]); if(sel.length() > 0) { IntegerVector inters = intersect(sel, joint); IntegerVector ci = colInd[inters - 1]; if(ci.length() > 0) { NumericVector cM = colMeans(subsetMatrix(s, joint, ci)); int ex = inters[which_max(cM)]; exeMat(i, j) = ex; objMat(i, j) = (mean(subsetMatrixToVec(s, ex, colInd[ intersect(sel, IntegerVector(actClust[i])) - 1])) + mean(subsetMatrixToVec(s, ex, colInd[intersect(sel, IntegerVector(actClust[j])) - 1]))) / 2; } else { // joining not possible - no similarities available ret["error"] = 1; return(ret); } } else { NumericVector cM = colMeans(subsetMatrix(s, joint, joint)); int ex = joint[which_max(cM)]; exeMat(i, j) = ex; objMat(i, j) = (mean(subsetMatrixToVec(s, ex, IntegerVector( actClust[i]))) + mean(subsetMatrixToVec(s, ex, IntegerVector( actClust[j])))) / 2; } } } // agglomeration loop for (int k = K - 1; k > 0; k--) { int tojoin = which_max_NoNA(objMat); int I = tojoin % K; int J = std::floor(tojoin / K); IntegerVector newClust = concat(actClust[I], actClust[J]); IntegerVector newClustNM = MAYBE_REFERENCED(newClust) ? clone(newClust) : newClust; newClust.names() = CharacterVector(newClustNM); LogicalVector rem(actClust.length(), true); rem[I] = false; rem[J] = false; actClust = actClust[rem]; if (actClust.length() < (k - 1)) { actClust[k - 1] = newClust; } else { actClust.insert(k - 1, newClust); } actExem = actExem[(actExem != actExem[I]) & (actExem != actExem[J])]; actExem.push_back(exeMat(I, J)); clusters[k - 1] = actClust; merge((K - k - 1), 0) = actLabels[I]; merge((K - k - 1), 1) = actLabels[J]; actLabels = actLabels[(actLabels != actLabels[I]) & (actLabels != actLabels[J])]; actLabels.push_back(K - k); height[K - k - 1] = objMat(I, J); exemplars[k - 1] = actExem; if (preserveNames && !Rf_isNull(colnames(s)) && (Rf_length(colnames(s)) > 0)) { IntegerVector(exemplars[k-1]).names() = ifelse( actExem <= as(colnames(s)).length(), CharacterVector(actExem), NA_STRING); } if (k == 1) { break; } // rearrange matrices objMat and exeMat // put values for unchanged clusters in the first k-1 rows/columns IntegerVector indexVec = seq_len(k + 1); indexVec = indexVec[(indexVec != indexVec[I]) & (indexVec != indexVec[J])]; for (int i = 0; i < k - 1; i++) { for (int j = 0; j < k - 1; j++) { exeMat(i,j) = exeMat(indexVec[i] - 1, indexVec[j] - 1); objMat(i,j) = objMat(indexVec[i] - 1, indexVec[j] - 1); } } // wipe out k+1-st column for (int i = 0; i < exeMat.nrow(); i++) { exeMat(i, k) = NA_INTEGER; objMat(i, k) = NA_REAL; } // update k-th column with objective values and joint exemplars of // unchanged clusters and the newly joined cluster for (int i = 1; i < k; i++) { IntegerVector joint = concat(actClust[i-1], actClust[k-1]); if(sel.length() > 0) { IntegerVector inters = intersect(sel, joint); IntegerVector ci = colInd[inters - 1]; if(ci.length() > 0) { NumericVector cM = colMeans(subsetMatrix(s, joint, ci)); int ex = inters[which_max(cM)]; exeMat(i - 1, k - 1) = ex; objMat(i - 1, k - 1) = (mean(subsetMatrixToVec(s, ex, colInd[ intersect(sel, IntegerVector(actClust[i - 1])) - 1])) + mean(subsetMatrixToVec(s, ex, colInd[intersect(sel, IntegerVector(actClust[k - 1])) - 1]))) / 2; } else { // joining not possible - no similarities available ret["error"] = 2; return(ret); } } else { NumericVector cM = colMeans(subsetMatrix(s, joint, joint)); int ex = joint[which_max(cM)]; exeMat(i - 1, k - 1) = ex; objMat(i - 1, k - 1) = (mean(subsetMatrixToVec(s, ex, IntegerVector(actClust[i - 1]))) + mean(subsetMatrixToVec(s, ex, IntegerVector(actClust[k - 1])))) / 2; } } } ret["exeMat"] = exeMat; ret["objMat"] = objMat; ret["merge"] = merge; ret["height"] = height; ret["clusters"] = clusters; if(sel.length() > 0) ret["colInd"] = colInd; return(ret); } apcluster/src/distanceL.h0000644000176200001440000000021414170223535015121 0ustar liggesusers#ifndef __DISTANCE_L_HEADERS__ #define __DISTANCE_L_HEADERS__ SEXP CdistR(SEXP x, SEXP sel, SEXP smethod, SEXP p); #endif apcluster/src/apclusterSparseC.cpp0000644000176200001440000003031014170223535017031 0ustar liggesusers#include #include #include #include "apclusterCppHeaders.h" using namespace Rcpp; RcppExport SEXP apclusterSparseC(SEXP iR, SEXP jR, SEXP valuesR, SEXP maxitsR, SEXP convitsR, SEXP lamR, SEXP nR, SEXP detailsR) { IntegerVector s_i(iR), s_j(jR); NumericVector s_values(valuesR); int maxits = as(maxitsR); int convits = as(convitsR); double lam = as(lamR); int N = as(nR), M = s_i.length(); bool details = as(detailsR); IntegerVector ind1(M), ind1s(N), ind1e(N); IntegerVector ind2(M), ind2s(N), ind2e(N); NumericVector A(M); NumericVector R(M); IntegerVector se(N); IntegerMatrix e(N, convits); IntegerVector E(N); IntegerVector I(N); NumericVector netsimAll; NumericVector dpsimAll; NumericVector exprefAll; IntegerMatrix idxAll; double tmpnetsim, tmpdpsim, tmpexpref; IntegerVector tmpidx(N); bool dn = false, unconverged = false; int i, j, ii, K, temp1, temp2, length; if (details) { netsimAll = NumericVector(maxits + 1); dpsimAll = NumericVector(maxits + 1); exprefAll = NumericVector(maxits + 1); idxAll = IntegerMatrix(N, maxits + 1); } // build ind1e for (i = 0; i < M; i++) { ind1e[s_i[i]]++; // count ind. occurance. ind2e[s_j[i]]++; } temp1 = 0; temp2 = 0; for (i = 0; i < N; i++) // cumsum { temp1 += ind1e[i]; ind1e[i] = temp1 - 1; temp2 += ind2e[i]; ind2e[i] = temp2 - 1; } //build ind1s ind1s[0] = 0; ind2s[0] = 0; for (i = 1; i < N; i++) { ind1s[i] = ind1e[i - 1] + 1; ind2s[i] = ind2e[i - 1] + 1; } temp1 = 0; temp2 = 0; //build ind1 for(i = 0; i < M; i++) { temp1 = s_i[i]; ind1[ind1s[temp1]] = i; ind1s[temp1] += 1; temp2 = s_j[i]; ind2[ind2s[temp2]] = i; ind2s[temp2] += 1; } //rebuild ind1s changed when build ind1 ind1s[0] = 0; ind2s[0] = 0; for(i = 1; i < N; i++) { ind1s[i] = ind1e[i - 1] + 1; ind2s[i] = ind2e[i - 1] + 1; } temp1 = 0; temp2 = 0; int count_loop = 0; while (!dn) { // first, compute responsibilities for (ii = 0; ii < N; ii++) { double max1 = -DBL_MAX, max2 = -DBL_MAX, avsim; int yMax = 0; for (j = ind1s[ii]; j <= ind1e[ii]; j++) { temp1 = ind1[j]; avsim = A[temp1] + s_values[temp1]; if (avsim > max1) // determine second-largest element of AS { max2 = max1; max1 = avsim; yMax = j; } else if (avsim > max2) max2 = avsim; } for (j = ind1s[ii]; j <= ind1e[ii]; j++) { temp1 = ind1[j]; double oldVal = R(temp1); double newVal = (1 - lam) * (s_values[temp1] - (j == yMax ? max2 : max1)) + lam * oldVal; R(temp1) = newVal; } } // secondly, compute availabilities NumericVector rp(M); for (ii = 0; ii < N; ii++) { double auxsum = 0; temp2 = ind2e[ii]; for(j = ind2s[ii]; j <= ind2e[ii]; j++) { temp1 = ind2[j]; if (R(temp1) < 0 && j != temp2) rp[j] = 0; else rp[j] = R[temp1]; auxsum += rp[j]; } for (j = ind2s[ii]; j <= ind2e[ii]; j++) { temp1 = ind2[j]; double oldVal = A(temp1); double newVal = auxsum - rp[j]; if (newVal > 0 && j != temp2) newVal = 0; A(temp1) = (1 - lam) * newVal + lam * oldVal; } } // find exemplars temp2 = 0; unconverged = false; K = 0; for (j = (M - N); j < M; j++) //loop through the diagonal { int ex = (A(j) + R(j) > 0 ? 1 : 0); se[temp2] = se[temp2] - e(temp2, count_loop % convits) + ex; if (se[temp2] > 0 && se[temp2] < convits) unconverged = true; E[temp2] = ex; e(temp2, count_loop % convits) = ex; K += ex; temp2++; } if (count_loop >= (convits - 1) || count_loop >= (maxits - 1)) dn = ((!unconverged && K > 0) || (count_loop >= (maxits - 1))); // ******storage of details********** if (details) { if (K == 0) { tmpnetsim = R_NaN; tmpdpsim = R_NaN; tmpexpref = R_NaN; for (ii = 0; ii < N; ii++) tmpidx(ii) = R_NaInt; } else { length = 0; tmpnetsim = 0; tmpdpsim = 0; tmpexpref = 0; double maxSim = 0; int discon = 0; IntegerVector I_temp(N); for (ii = 0; ii < N; ii++) { if (E[ii]) // if it is exemplar { tmpidx[ii] = ii; I_temp[length] = ii; // I = find(E) length++; } else // non-exemplar points { tmpidx[ii] = R_NaInt; temp1 = 0; temp2 = 0; length = 0; IntegerVector ee(N); NumericVector temp_ss(N); NumericVector temp_j(N); for(j = ind1s[ii]; j <= ind1e[ii]; j++) { temp1 = ind1[j]; temp_ss[temp2]= s_values[temp1]; temp_j[temp2]= s_j[temp1]; if (E[temp_j[temp2]]) { ee[length] = temp2; // I = find(E(temp_j)) length++; } temp2++; } if (length == 0) discon = 1; else { maxSim = temp_ss[ee[0]]; tmpidx[ii] = temp_j(ee[0]); for (int jj = 1; jj < length; jj++) { temp1 = ee[jj]; if (temp_ss(temp1) > maxSim) { maxSim = temp_ss[temp1]; tmpidx[ii] = temp_j(temp1); } } tmpdpsim = tmpdpsim+maxSim; } } } I=I_temp; // preference sum if (discon == 1) { tmpnetsim = R_NaN; tmpdpsim = R_NaN; tmpexpref = R_NaN; for (int jj = 0; jj < N; jj++) tmpidx[jj] = R_NaInt; } else { temp1 = 0; for (ii = (M - N); ii < M; ii++) { for(j = 0; j < K; j++) if (temp1 == I_temp[j]) tmpexpref += s_values(ii); temp1++; } tmpnetsim = tmpdpsim + tmpexpref; } } } if (details) { exprefAll[count_loop] = tmpexpref; dpsimAll[count_loop] = tmpdpsim; netsimAll[count_loop] = tmpnetsim; for (ii = 0; ii < N; ii++) idxAll(ii, count_loop) = tmpidx[ii]; } count_loop++; } // end of AP main loop // final refinement temp2 = 0; K = 0; for (j = (M - N); j < M; j++) // I think is not needed (exists in matlab) { int ex = (A(j) + R(j) > 0 ? 1 : 0); E[temp2] = ex; K += ex; temp2++; } if (K > 0) { tmpnetsim = 0; tmpdpsim = 0; tmpexpref = 0; double maxSim = 0; // first loop finds the tmpidx if the user ask for details we can // skip this step and take the last tmpidx which already is computed for (ii = 0; ii < N; ii++) { if (E[ii]) { tmpidx[ii] = ii; } else { tmpidx[ii] = R_NaInt; NumericVector temp_ss(N); NumericVector temp_j(N); IntegerVector ee(N); temp1 = 0; // store the idx through loop temp2 = 0; // just counter length = 0; for(j = ind1s[ii]; j <= ind1e[ii]; j++) { temp1 = ind1[j]; temp_ss[temp2] = s_values[temp1]; temp_j[temp2] = s_j[temp1]; if (E[temp_j[temp2]]) { ee[length] = temp2; // I = find(E(temp_j)) length++; } temp2++; } maxSim = temp_ss[ee[0]]; tmpidx[ii]=temp_j(ee[0]); for (int jj = 1; jj < length; jj++) { temp1 = ee[jj]; if (temp_ss(temp1) > maxSim) { maxSim = temp_ss[temp1]; tmpidx[ii] = temp_j(temp1); } } } } IntegerVector E_new(N); //********************* for (ii = 0; ii < N; ii++) { if (E[ii]) { IntegerVector temp_II(N); length = 0; for (int jj = 0; jj < N; jj++) { if (tmpidx[jj] == ii) { temp_II[length] = jj; // I = find(E) length++; } } NumericVector ns(N); NumericVector msk(N); for (int jj = 0; jj < length; jj++) // loop only over exemplars { temp1 = 0; temp2 = 0; NumericVector temp_j(N); NumericVector temp_ss(N); for (j = ind1s[temp_II[jj]]; j <= ind1e[temp_II[jj]]; j++) { temp1 = ind1[j]; temp_ss[temp2] = s_values[temp1]; temp_j[temp2] = s_j[temp1]; msk[temp_j[temp2]] += 1; ns[temp_j[temp2]] += temp_ss[temp2]; temp2++; } } IntegerVector II(length); IntegerVector III(length); int newcounter = 0, minuslength = 0; for (int jj = 0; jj < length; jj++) { if (msk[temp_II[jj]] == length) { II[newcounter] = jj; III[newcounter] = temp_II[II[newcounter]]; newcounter++; } else minuslength++; } maxSim = ns[III[0]]; int index_max = 0; for (int jj = 1; jj < length - minuslength; jj++) { temp1 = III[jj]; if (ns(temp1) > maxSim) { maxSim = ns[temp1]; index_max = jj; } } E_new[III[index_max]] = 1; } } // ************************************** E = E_new; length = 0; int lengthI = 0; tmpnetsim = 0; tmpdpsim = 0; tmpexpref = 0; maxSim = 0; IntegerVector I_tempfinal(N); for (ii = 0; ii < N; ii++) { if (E[ii]) { tmpidx[ii] = ii; I_tempfinal[lengthI] = ii; // I = find(E) final lengthI++; } else { tmpidx[ii] = R_NaInt; NumericVector temp_ss(N); NumericVector temp_j(N); IntegerVector ee(N); temp1 = 0; temp2 = 0; length = 0; for(j = ind1s[ii]; j <= ind1e[ii]; j++) { temp1 = ind1[j]; temp_ss[temp2] = s_values[temp1]; temp_j[temp2] = s_j[temp1]; if (E[temp_j[temp2]]) { ee[length] = temp2;// I = find(E(temp_j)) length++; } temp2++; } //find max and update idx maxSim = temp_ss[ee[0]]; tmpidx[ii] = temp_j(ee[0]); for (int jj = 1; jj < length; jj++) { temp1 = ee[jj]; if (temp_ss(temp1) > maxSim) { maxSim = temp_ss[temp1]; tmpidx[ii] = temp_j(temp1); } } tmpdpsim = tmpdpsim+maxSim; } } // preference sum temp1 = 0; for (ii = (M - N); ii < M; ii++) { for(j = 0; j < K; j++) if(temp1 == I_tempfinal[j]) tmpexpref += s_values(ii); temp1++; } I = I_tempfinal; tmpnetsim = tmpdpsim + tmpexpref; } else { tmpnetsim = R_NaN; tmpdpsim = R_NaN; tmpexpref = R_NaN; for (ii = 0; ii < N; ii++) tmpidx(ii) = R_NaInt; } if (details) { exprefAll[count_loop] = tmpexpref; dpsimAll[count_loop] = tmpdpsim; netsimAll[count_loop] = tmpnetsim; for (ii = 0; ii < N; ii++) idxAll(ii, count_loop) = tmpidx[ii]; } List ret; ret["I"] = I; ret["E"] = E; ret["tmpidx"] = tmpidx; ret["tmpnetsim"] = tmpnetsim; ret["tmpdpsim"] = tmpdpsim; ret["tmpexpref"] = tmpexpref; ret["K"] = K; ret["it"] = IntegerVector::create(count_loop - 1); ret["unconv"] = unconverged; if (details) { ret["netsimAll"] = netsimAll; ret["dpsimAll"] = dpsimAll; ret["exprefAll"] = exprefAll; ret["idxAll"] = idxAll; } return(ret); } apcluster/src/aggExClusterC.h0000644000176200001440000000125014170223535015714 0ustar liggesusers#ifndef __AGG_EX_CLUSTER_C_HEADERS__ #include #define __AGG_EX_CLUSTER_C_HEADERS__ RcppExport SEXP aggExClusterC(SEXP sR, SEXP KR, SEXP actClustR, SEXP actExemR, SEXP objMatR, SEXP exeMatR, SEXP actLabelsR, SEXP selR, SEXP clustersR, SEXP exemplarsR, SEXP mergeR, SEXP heightR, SEXP preserveNamesR); #endif apcluster/src/apclusterCppHeaders.h0000644000176200001440000000235014170223535017157 0ustar liggesusers#ifndef __APCLUSTER_CPP_HEADERS__ #include #define __APCLUSTER_CPP_HEADERS__ /* * note : RcppExport is an alias to `extern "C"` defined by Rcpp. * * It gives C calling convention to the rcpp_hello_world function so that * it can be called from .Call in R. Otherwise, the C++ compiler mangles the * name of the function and .Call can't find it. * * It is only useful to use RcppExport when the function is intended to be called * by .Call. See the thread http://thread.gmane.org/gmane.comp.lang.r.rcpp/649/focus=672 * on Rcpp-devel for a misuse of RcppExport */ RcppExport SEXP apclusterC(SEXP sR, SEXP maxitsR, SEXP convitsR, SEXP lamR, SEXP detailsR); RcppExport SEXP apclusterLeveragedC(SEXP sR, SEXP selR, SEXP maxitsR, SEXP convitsR, SEXP lamR); RcppExport SEXP apclusterSparseC(SEXP iR, SEXP jR, SEXP valuesR, SEXP maxitsR, SEXP convitsR, SEXP lamR, SEXP nR, SEXP detailsR); RcppExport SEXP preferenceRangeC(SEXP sR, SEXP exactR); RcppExport SEXP preferenceRangeSparseC(SEXP iR, SEXP jR, SEXP valuesR, SEXP nR, SEXP exactR); #endif apcluster/src/distanceL.c0000644000176200001440000002355614170223535015132 0ustar liggesusers/* * R : A Computer Language for Statistical Data Analysis * Copyright (C) 1995, 1996 Robert Gentleman and Ross Ihaka * Copyright (C) 1998-2016 The R Core Team * Copyright (C) 2002, 2004 The R Foundation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, a copy is available at * https://www.R-project.org/Licenses/ */ #ifdef HAVE_CONFIG_H # include #endif /* do this first to get the right options for math.h */ #include #include #include #include //#include "stats.h" #ifdef _OPENMP # include #endif #define both_FINITE(a,b) (R_FINITE(a) && R_FINITE(b)) #ifdef R_160_and_older #define both_non_NA both_FINITE #else #define both_non_NA(a,b) (!ISNAN(a) && !ISNAN(b)) #endif static double R_euclidean(double *x, int nr, int nc, int i1, int i2) { double dev, dist; int count, j; count= 0; dist = 0; for(j = 0 ; j < nc ; j++) { if(both_non_NA(x[i1], x[i2])) { dev = (x[i1] - x[i2]); if(!ISNAN(dev)) { dist += dev * dev; count++; } } i1 += nr; i2 += nr; } if(count == 0) return NA_REAL; if(count != nc) dist /= ((double)count/nc); return sqrt(dist); } static double R_maximum(double *x, int nr, int nc, int i1, int i2) { double dev, dist; int count, j; count = 0; dist = -DBL_MAX; for(j = 0 ; j < nc ; j++) { if(both_non_NA(x[i1], x[i2])) { dev = fabs(x[i1] - x[i2]); if(!ISNAN(dev)) { if(dev > dist) dist = dev; count++; } } i1 += nr; i2 += nr; } if(count == 0) return NA_REAL; return dist; } static double R_manhattan(double *x, int nr, int nc, int i1, int i2) { double dev, dist; int count, j; count = 0; dist = 0; for(j = 0 ; j < nc ; j++) { if(both_non_NA(x[i1], x[i2])) { dev = fabs(x[i1] - x[i2]); if(!ISNAN(dev)) { dist += dev; count++; } } i1 += nr; i2 += nr; } if(count == 0) return NA_REAL; if(count != nc) dist /= ((double)count/nc); return dist; } static double R_canberra(double *x, int nr, int nc, int i1, int i2) { double dev, dist, sum, diff; int count, j; count = 0; dist = 0; for(j = 0 ; j < nc ; j++) { if(both_non_NA(x[i1], x[i2])) { sum = fabs(x[i1] + x[i2]); diff = fabs(x[i1] - x[i2]); if (sum > DBL_MIN || diff > DBL_MIN) { dev = diff/sum; if(!ISNAN(dev) || (!R_FINITE(diff) && diff == sum && /* use Inf = lim x -> oo */ (dev = 1.))) { dist += dev; count++; } } } i1 += nr; i2 += nr; } if(count == 0) return NA_REAL; if(count != nc) dist /= ((double)count/nc); return dist; } static double R_dist_binary(double *x, int nr, int nc, int i1, int i2) { int total, count, dist; int j; total = 0; count = 0; dist = 0; for(j = 0 ; j < nc ; j++) { if(both_non_NA(x[i1], x[i2])) { if(!both_FINITE(x[i1], x[i2])) { //warning(_("treating non-finite values as NA")); Rprintf("Warning: treating non-finite values as NA"); } else { if(x[i1] || x[i2]) { count++; if( ! (x[i1] && x[i2]) ) dist++; } total++; } } i1 += nr; i2 += nr; } if(total == 0) return NA_REAL; if(count == 0) return 0; return (double) dist / count; } static double R_minkowski(double *x, int nr, int nc, int i1, int i2, double p) { double dev, dist; int count, j; count= 0; dist = 0; for(j = 0 ; j < nc ; j++) { if(both_non_NA(x[i1], x[i2])) { dev = (x[i1] - x[i2]); if(!ISNAN(dev)) { dist += R_pow(fabs(dev), p); count++; } } i1 += nr; i2 += nr; } if(count == 0) return NA_REAL; if(count != nc) dist /= ((double)count/nc); return R_pow(dist, 1.0/p); } static double R_discrepancy(double *x, int nr, int nc, int i1, int i2) { double dev, dist, psum, mini, maxi; int count, j; count = 0; psum = 0; maxi = -DBL_MAX; mini = DBL_MAX; for(j = 0 ; j < nc ; j++) { if(both_non_NA(x[i1], x[i2])) { dev = x[i1] - x[i2]; if(!ISNAN(dev)) { psum += dev; if (psum > maxi) maxi = psum; else if (psum < mini) mini = psum; count++; } } i1 += nr; i2 += nr; } if(count == 0) return NA_REAL; dist = maxi - mini; if(count != nc) dist /= ((double)count/nc); return dist; } enum { EUCLIDEAN=1, MAXIMUM, MANHATTAN, CANBERRA, BINARY, MINKOWSKI, DISCREPANCY }; /* == 1,2,..., defined by order in the R function dist */ void R_distance(double x[], int sel[], int *nr, int *nc, int *nsel, double *d, int *diag, int *method, double *p) { int dc, i, j; size_t ij; /* can exceed 2^31 - 1 */ double (*distfun)(double*, int, int, int, int) = NULL; #ifdef _OPENMP int nthreads; #endif switch(*method) { case EUCLIDEAN: distfun = R_euclidean; break; case MAXIMUM: distfun = R_maximum; break; case MANHATTAN: distfun = R_manhattan; break; case CANBERRA: distfun = R_canberra; break; case BINARY: distfun = R_dist_binary; break; case MINKOWSKI: if(!R_FINITE(*p) || *p <= 0) error("distance(): invalid p"); break; case DISCREPANCY: distfun = R_discrepancy; break; default: error("distance(): invalid distance"); } dc = (*diag) ? 0 : 1; /* diag=1: we do the diagonal */ #ifdef _OPENMP if (R_num_math_threads > 0) nthreads = R_num_math_threads; else nthreads = 1; /* for now */ if (nthreads == 1) { /* do the nthreads == 1 case without any OMP overhead to see if it matters on some platforms */ ij = 0; for(j = 0 ; j < *nr ; j++) for(i = j+dc ; i < *nr ; i++) d[ij++] = (*method != MINKOWSKI) ? distfun(x, *nr, *nc, i, j) : R_minkowski(x, *nr, *nc, i, j, *p); } else /* This produces uneven thread workloads since the outer loop is over the subdiagonal portions of columns. An alternative would be to use a loop on ij and to compute the i and j values from ij. */ #pragma omp parallel for num_threads(nthreads) default(none) \ private(i, j, ij) \ firstprivate(nr, dc, d, method, distfun, nc, x, p) for(j = 0 ; j < *nr ; j++) { ij = j * (*nr - dc) + j - ((1 + j) * j) / 2; for(i = j+dc ; i < *nr ; i++) d[ij++] = (*method != MINKOWSKI) ? distfun(x, *nr, *nc, i, j) : R_minkowski(x, *nr, *nc, i, j, *p); } #else if (*nsel==NA_INTEGER) { ij = 0; for(j = 0 ; j < *nr ; j++) for(i = j+dc ; i < *nr ; i++) d[ij++] = (*method != MINKOWSKI) ? distfun(x, *nr, *nc, i, j) : R_minkowski(x, *nr, *nc, i, j, *p); } else { int s1 = 0; int imap[*nr]; for (i=0; i<*nr; i++) imap[i] = (s1<*nsel && i==sel[s1]) ? s1++ : -1; for (j = 0 ; j < *nr ; j++) { for (i = j ; i < *nr ; i++) { if (imap[j] != -1) { d[i+*nr*imap[j]] = (*method != MINKOWSKI) ? distfun(x, *nr, *nc, i, j) : R_minkowski(x, *nr, *nc, i, j, *p); if (imap[i] != -1) { d[j+*nr*imap[i]] = d[i+*nr*imap[j]]; } } else { if (imap[i] != -1) { d[j+*nr*imap[i]] = (*method != MINKOWSKI) ? distfun(x, *nr, *nc, i, j) : R_minkowski(x, *nr, *nc, i, j, *p); } } } } } #endif } #include #include "distanceL.h" /* all attribute handling has been removed */ SEXP CdistR(SEXP x, SEXP sel, SEXP smethod, SEXP p) { SEXP ans; int nr = nrows(x), nc = ncols(x), method = asInteger(smethod); int nsel; int N, diag = 0; double rp = asReal(p); int seli = asInteger(sel); if (seli==NA_INTEGER) { nsel = NA_INTEGER; // allocate space for lower diag part without diagonal N = (double)nr * (nr-1)/2; /* avoid overflow for N ~ 50,000 */ } else { nsel = length(sel); // allocate space for full rectangular matrix N = (double)nr * nsel; } PROTECT(ans = allocVector(REALSXP, N)); R_distance(REAL(x), INTEGER(sel), &nr, &nc, &nsel, REAL(ans), &diag, &method, &rp); UNPROTECT(1); return ans; } apcluster/src/apclusterLeveragedC.cpp0000644000176200001440000000722114170223535017477 0ustar liggesusers#include #include #include #include #include "apclusterCppHeaders.h" using namespace Rcpp; RcppExport SEXP apclusterLeveragedC(SEXP sR, SEXP selR, SEXP maxitsR, SEXP convitsR, SEXP lamR) { NumericMatrix s(sR); IntegerVector sel(selR); int maxits = as(maxitsR); int convits = as(convitsR); double lam = as(lamR); int M = s.ncol(); int N = s.nrow(); IntegerMatrix e(N, convits); IntegerVector I(N); IntegerVector se(N); NumericMatrix A(M, N); NumericMatrix R(M, N); NumericVector auxsum(M - 1); bool dn = false, unconverged = false; int i = 0, j, ii, K; while (!dn) { // first, compute responsibilities for (ii = 0; ii < N; ii++) { double max1 = -DBL_MAX, max2 = -DBL_MAX; double avsim; int yMax; // determine largest and second largest element of A + S for (j = 0; j < M; j++) { if (j < M - 1 && sel[j] == ii) continue; avsim = A(j, ii) + s(ii, j); if (avsim > max1) { max2 = max1; max1 = avsim; yMax = j; } else if (avsim > max2) max2 = avsim; } for (j = 0; j < M; j++) // R update including self responsibilities { if (j < M - 1 && sel[j] == ii) continue; double newVal = (1 - lam) * (s(ii, j) - (j == yMax ? max2 : max1)) + lam * R(j, ii); R(j, ii) = (newVal > DBL_MAX ? DBL_MAX : newVal); if (R(j, ii) > 0 && j < M - 1) auxsum[j] = auxsum[j] + R(j, ii); } } // correct auxsum with diag elements for (ii = 0; ii < M - 1; ii++) auxsum[ii] = auxsum[ii] + R(M - 1, sel[ii]); // secondly, compute availabilities for (ii = 0; ii < M - 1; ii++) { for (j = 0; j < N; j++) { double newVal = auxsum[ii]; if (R(ii, j) > 0) newVal -= R(ii, j); if (sel[ii] == j) { // update diagonal element back in last col A(M - 1, j) = (1 - lam) * (newVal - R(M - 1, j)) + lam * A(M-1, j); newVal = 0; // set real diag elmenent to 0 - oldval is 0 } else { if (newVal > 0) newVal = 0; } A(ii, j) = (1 - lam) * newVal + lam * A(ii, j); } auxsum[ii] = 0; } // determine clusters and check for convergence unconverged = false; K = 0; for (j = 0; j < N; j++) { int ex = (A(M - 1, j) + R(M - 1, j) > 0 ? 1 : 0); se[j] = se[j] - e(j, i % convits) + ex; if (se[j] > 0 && se[j] < convits) unconverged = true; e(j, i % convits) = ex; if (ex) I[K] = j; K += ex; } if (i >= (convits - 1) || i >= (maxits - 1)) dn = ((!unconverged && K > 0) || (i >= (maxits - 1))); i++; } List ret; ret["I"] = I; ret["K"] = K; ret["it"] = IntegerVector::create(i - 1); ret["unconv"] = LogicalVector::create(unconverged); return(ret); } apcluster/vignettes/0000755000176200001440000000000014170271573014273 5ustar liggesusersapcluster/vignettes/apcluster.Rnw0000644000176200001440000016453714170236174017003 0ustar liggesusers\documentclass[article]{bioinf} \usepackage{amsmath,amssymb} \usepackage{hyperref} \hypersetup{colorlinks=false, pdfborder=0 0 0, pdftitle={APCluster - An R Package for Affinity Propagation Clustering}, pdfauthor={Ulrich Bodenhofer}} \title{{\Huge APCluster}\\[5mm] An R Package for Affinity Propagation Clustering} \author{Ulrich Bodenhofer, Johannes Palme, Chrats Melkonian, and Andreas Kothmeier} \affiliation{Institute of Bioinformatics, Johannes Kepler University Linz\\Altenberger Str. 69, 4040 Linz, Austria\\ \email{apcluster@bioinf.jku.at}} \newcommand{\APCluster}{\texttt{apcluster}} \newcommand{\KeBABS}{\texttt{kebabs}} \newcommand{\R}{R} \newcommand{\Real}{\mathbb{R}} \renewcommand{\vec}[1]{\mathbf{#1}} %\VignetteIndexEntry{An R Package for Affinity Propagation Clustering} %\VignetteDepends{methods, stats, graphics, utils} %\VignetteEngine{knitr::knitr} \begin{document} <>= options(width=72) knitr::opts_knit$set(width=72) set.seed(0) library(apcluster, quietly=TRUE) apclusterVersion <- packageDescription("apcluster")$Version apclusterDateRaw <- packageDescription("apcluster")$Date apclusterDateYear <- as.numeric(substr(apclusterDateRaw, 1, 4)) apclusterDateMonth <- as.numeric(substr(apclusterDateRaw, 6, 7)) apclusterDateDay <- as.numeric(substr(apclusterDateRaw, 9, 10)) apclusterDate <- paste(month.name[apclusterDateMonth], " ", apclusterDateDay, ", ", apclusterDateYear, sep="") @ \newcommand{\APClusterVer}{\Sexpr{apclusterVersion}} \newcommand{\APClusterDate}{\Sexpr{apclusterDate}} \manualtitlepage[Version \APClusterVer, \APClusterDate] \section*{Scope and Purpose of this Document} This document is a user manual for the \R\ package \APCluster\ \cite{BodenhoferKothmeierHochreiter11}. It is only meant as a gentle introduction into how to use the basic functions implemented in this package. Not all features of the \R\ package are described in full detail. Such details can be obtained from the documentation enclosed in the \R\ package. Further note the following: (1) this is neither an introduction to affinity propagation nor to clustering in general; (2) this is not an introduction to \R. If you lack the background for understanding this manual, you first have to read introductory literature on these subjects. \newpage \vspace{1cm} \newlength{\auxparskip} \setlength{\auxparskip}{\parskip} \setlength{\parskip}{0pt} \tableofcontents \clearpage \setlength{\parskip}{\auxparskip} \newlength{\Nboxwidth} \setlength{\Nboxwidth}{\textwidth} \addtolength{\Nboxwidth}{-2\fboxrule} \addtolength{\Nboxwidth}{-2\fboxsep} \newcommand{\notebox}[1]{% \begin{center} \fbox{\begin{minipage}{\Nboxwidth} \noindent{\sffamily\bfseries Note:} #1 \end{minipage}} \end{center}} \section{Introduction} Affinity propagation (AP) is a relatively new clustering algorithm that has been introduced by Brendan J.\ Frey and Delbert Dueck \cite{FreyDueck07}.\footnotemark[1]\footnotetext[1]{% \url{https://psi.toronto.edu/research/affinity-propagation-clustering-by-message-passing/}}\stepcounter{footnote} The authors themselves describe affinity propagation as follows: \begin{quote} ``{\em An algorithm that identifies exemplars among data points and forms clusters of data points around these exemplars. It operates by simultaneously considering all data point as potential exemplars and exchanging messages between data points until a good set of exemplars and clusters emerges.}'' \end{quote} AP has been applied in various fields recently, among which bioinformatics is becoming increasingly important. Frey and Dueck have made their algorithm available as Matlab code.\footnotemark[1] Matlab, however, is relatively uncommon in bioinformatics. Instead, the statistical computing platform \R\ has become a widely accepted standard in this field. In order to leverage affinity propagation for bioinformatics applications, we have implemented affinity propagation as an \R\ package. Note, however, that the given package is in no way restricted to bioinformatics applications. It is as generally applicable as Frey's and Dueck's original Matlab code.\footnotemark[1] Starting with Version 1.1.0, the \APCluster\ package also features {\em exemplar-based agglomerative clustering} which can be used as a clustering method on its own or for creating a hierarchy of clusters that have been computed previously by affinity propagation. {\em Leveraged Affinity Propagation}, a variant of AP especially geared to applications involving large data sets, has first been included in Version 1.3.0. \section{Installation} \subsection{Installation via CRAN} The \R\ package \APCluster\ (current version: \APClusterVer) is part of the {\em Comprehensive R Archive Network (CRAN)}% \footnote{\url{http://cran.r-project.org/}}. The simplest way to install the package, therefore, is to enter the following command into your \R\ session: <>= install.packages("apcluster") @ If you use R on Windows or Mac OS, you can also conveniently use the package installation menu of your R GUI. \subsection{Manual installation from source} Under special circumstances, e.g. if you want to compile the C++ code included in the package with some custom options, you may prefer to install the package manually from source. To this end, open the package's page at CRAN% \footnote{\url{https://CRAN.R-project.org/package=apcluster}} and then proceed as follows: \begin{enumerate} \item Download \texttt{apcluster\_\APClusterVer.tar.gz} and save it to your harddisk. \item Open a shell/terminal/command prompt window and change to the directory where you put {\ttfamily apcluster\_\APClusterVer.tar.gz}. Enter \begin{quote} \ttfamily R CMD INSTALL apcluster\_\APClusterVer.tar.gz \end{quote} to install the package. \end{enumerate} Note that this might require additional software on some platforms. Windows requires Rtools\footnote{\url{http://cran.r-project.org/bin/windows/Rtools/}} to be installed and to be available in the default search path (environment variable \verb+PATH+). Mac OS X requires Xcode developer tools% \footnote{\url{https://developer.apple.com/technologies/tools/}} (make sure that you have the command line tools installed with Xcode). \subsection{Compatibility issues} All versions downloadable from CRAN have been built using the latest version, \R\ \Sexpr{R.version$major}.\Sexpr{R.version$minor}. However, the package should work without severe problems on \R\ versions $\geq$3.0.0. \section{Getting Started} To load the package, enter the following in your \R\ session: <>= library(apcluster) @ If this command terminates without any error message or warning, you can be sure that the package has been installed successfully. If so, the package is ready for use now and you can start clustering your data with affinity propagation. The package includes both a user manual (this document) and a reference manual (help pages for each function). To view the user manual, enter <>= vignette("apcluster") @ Help pages can be viewed using the \verb+help+ command. It is recommended to start with <>= help(apcluster) @ Affinity propagation does not require the data samples to be of any specific kind or structure. AP only requires a {\em similarity matrix}, i.e., given $l$ data samples, this is an $l\times l$ real-valued matrix $\mathbf{S}$, in which an entry $S_{ij}$ corresponds to a value measuring how similar sample $i$ is to sample $j$. AP does not require these values to be in a specific range. Values can be positive or negative. AP does not even require the similarity matrix to be symmetric (although, in most applications, it will be symmetric anyway). A value of $-\infty$ is interpreted as ``absolute dissimilarity''. The higher a value, the more similar two samples are considered. To get a first impression, let us create a random data set in $\Real^2$ as the union of two ``Gaussian clouds'': \begin{center} <>= cl1 <- cbind(rnorm(30, 0.3, 0.05), rnorm(30, 0.7, 0.04)) cl2 <- cbind(rnorm(30, 0.7, 0.04), rnorm(30, 0.4, .05)) x1 <- rbind(cl1, cl2) plot(x1, xlab="", ylab="", pch=19, cex=0.8) @ \end{center} The package \APCluster\ offers several different ways for clustering data. The simplest way is the following: <>= apres1a <- apcluster(negDistMat(r=2), x1) @ In this example, the function \verb+apcluster()+ first computes a similarity matrix for the input data \verb+x1+ using the {\em similarity function} passed as first argument. The choice \verb+negDistMat(r=2)+ is the standard similarity measure used in the papers of Frey and Dueck --- negative squared distances. Alternatively, one can compute the similarity matrix beforehand and call \verb+apcluster()+ for the similarity matrix (for a more detailed description of the differences, see \ref{ssec:memeff}): <>= s1 <- negDistMat(x1, r=2) apres1b <- apcluster(s1) @ The function \verb+apcluster()+ creates an object belonging to the S4 class \verb+APResult+ which is defined by the present package. To get detailed information on which data are stored in such objects, enter <>= help(APResult) @ The simplest thing we can do is to enter the name of the object (which implicitly calls \verb+show()+) to get a summary of the clustering result: <>= apres1a @ The \APCluster\ package allows for plotting the original data set along with a clustering result: \begin{center} <>= plot(apres1a, x1) @ \end{center} In this plot, each color corresponds to one cluster. The exemplar of each cluster is marked by a box and all cluster members are connected to their exemplars with lines. A heatmap is plotted with \verb+heatmap()+: \begin{center} <>= heatmap(apres1a) @ \end{center} In the heatmap, the samples are grouped according to clusters. The above heatmap confirms again that there are two main clusters in the data. A heatmap can be plotted for the object \verb+apres1a+ because \verb+apcluster()+, if called for data and a similarity function, by default includes the similarity matrix in the output object (unless it was called with the switch \verb+includeSim=FALSE+). If the similarity matrix is not included (which is the default if \verb+apcluster()+ has been called on a similarity matrix directly), \verb+heatmap()+ must be called with the similarity matrix as second argument: \begin{center} <>= heatmap(apres1b, s1) @ \end{center} Suppose we want to have better insight into what the algorithm did in each iteration. For this purpose, we can supply the option \verb+details=TRUE+ to \verb+apcluster()+: <>= apres1c <- apcluster(s1, details=TRUE) @ This option tells the algorithm to keep a detailed log about its progress. For example, this allows for plotting the three performance measures that AP uses internally for each iteration: \begin{center} <>= plot(apres1c) @ \end{center} These performance measures are: \begin{enumerate} \item Sum of exemplar preferences \item Sum of similarities of exemplars to their cluster members \item Net fitness: sum of the two former \end{enumerate} For details, the user is referred to the original affinity propagation paper \cite{FreyDueck07} and the supplementary material published on the affinity propagation Web page.\footnotemark[1] We see from the above plot that the algorithm has not made any change for the last 100 iterations. AP, through its parameter \verb+convits+, allows to control for how long AP waits for a change until it terminates (the default is \verb+convits=100+). If the user has the feeling that AP will probably converge quicker on his/her data set, a lower value can be used: <>= apres1c <- apcluster(s1, convits=15, details=TRUE) apres1c @ \section{Adjusting Input Preferences}\label{sec:ipref} Apart from the similarity matrix itself, the most important input parameter of AP is the so-called {\em input preference} which can be interpreted as the tendency of a data sample to become an exemplar (see \cite{FreyDueck07} and supplementary material on the AP homepage\footnotemark[1] for a more detailed explanation). This input preference can either be chosen individually for each data sample or it can be a single value shared among all data samples. Input preferences largely determine the number of clusters, in other words, how fine- or coarse-grained the clustering result will be. The input preferences one can specify for AP are roughly in the same range as the similarity values, but they do not have a straightforward interpretation. Frey and Dueck have introduced the following rule of thumb: ``{\it The shared value could be the median of the input similarities (resulting in a moderate number of clusters) or their minimum (resulting in a small number of clusters).}'' \cite{FreyDueck07} Our AP implementation uses the median rule by default if the user does not supply a custom value for the input preferences. In order to provide the user with a knob that is --- at least to some extent --- interpretable, the function \verb+apcluster()+ provides an argument \verb+q+ that allows to set the input preference to a certain quantile of the input similarities: resulting in the median for \verb+q=0.5+ and in the minimum for \verb+q=0+. As an example, let us add two more ``clouds'' to the data set from above: \begin{center} <>= cl3 <- cbind(rnorm(20, 0.50, 0.03), rnorm(20, 0.72, 0.03)) cl4 <- cbind(rnorm(25, 0.50, 0.03), rnorm(25, 0.42, 0.04)) x2 <- rbind(x1, cl3, cl4) plot(x2, xlab="", ylab="", pch=19, cex=0.8) @ \end{center} For the default setting, we obtain the following result: \begin{center} <>= apres2a <- apcluster(negDistMat(r=2), x2) plot(apres2a, x2) @ \end{center} For the minimum of input similarities, we obtain the following result: \begin{center} <>= apres2b <- apcluster(negDistMat(r=2), x2, q=0) plot(apres2b, x2) @ \end{center} So we see that AP is quite robust against a reduction of input preferences in this example which may be caused by the clear separation of the four clusters. If we increase input preferences, however, we can force AP to split the four clusters into smaller sub-clusters: \begin{center} <>= apres2c <- apcluster(negDistMat(r=2), x2, q=0.8) plot(apres2c, x2) @ \end{center} Note that the input preference used by AP can be recovered from the output object (no matter which method to adjust input preferences has been used). On the one hand, the value is printed if the object is displayed (by \verb+show+ or by entering the output object's name). On the other hand, the value can be accessed directly via the slot \verb+p+: <>= apres2c@p @ As noted above already, we can produce a heatmap by calling \verb+heatmap()+ for an \verb+APResult+ object: \begin{center} <>= heatmap(apres2c) @ \end{center} The order in which the clusters are arranged in the heatmap is determined by means of joining the cluster agglomeratively (see Section \ref{sec:agglo} below). Although the affinity propagation result contains \Sexpr{length(apres2c@exemplars)} clusters, the heatmap indicates that there are actually four clusters which can be seen as very brightly colored squares along the diagonal. We also see that there seem to be two pairs of adjacent clusters, which can be seen from the fact that there are two relatively light-colored blocks along the diagonal encompassing two of the four clusters in each case. If we look back at how the data have been created (see also plots above), this is exactly what is to be expected. The above example with \verb+q=0+ demonstrates that setting input preferences to the minimum of input similarities does not necessarily result in a very small number of clusters (like one or two). This is due to the fact that input preferences need not necessarily be exactly in the range of the similarities. To determine a meaningful range, an auxiliary function is available which, in line with Frey's and Dueck's Matlab code,\footnotemark[1] allows to compute a minimum value (for which one or at most two clusters would be obtained) and a maximum value (for which as many clusters as data samples would be obtained): <>= preferenceRange(apres2b@sim) @ The function returns a two-element vector with the minimum value as first and the maximum value as second entry. The computations are done approximately by default. If one is interested in exact bounds, supply \verb+exact=TRUE+ (resulting in longer computation times). Many clustering algorithms need to know a pre-defined number of clusters. This is often a major nuisance, since the exact number of clusters is hard to know for non-trivial (in particular, high-dimensional) data sets. AP avoids this problem. If, however, one still wants to require a fixed number of clusters, this has to be accomplished by a search algorithm that adjusts input preferences in order to produce the desired number of clusters in the end. For convenience, this search algorithm is available as a function \verb+apclusterK()+ (analogous to Frey's and Dueck's Matlab implementation\footnotemark[1]). We can use this function to force AP to produce only two clusters (merging the two pairs of adjacent clouds into one cluster each). Analogously to \verb+apcluster()+, \verb+apclusterK()+ supports two variants --- it can either be called for a similarity measure and data or on a similarity matrix directly. \begin{center} <>= apres2d <- apclusterK(negDistMat(r=2), x2, K=2, verbose=TRUE) plot(apres2d, x2) @ \end{center} Now let us quickly consider a simple data set with more than two features. The notorious example is Fisher's iris data set: <>= data(iris) apIris1 <- apcluster(negDistMat(r=2), iris) apIris1 @ AP has identified \Sexpr{length(apIris1)} clusters. Since Version 1.3.2, the package also allows for superimposing clustering results in scatter plot matrices: \begin{center} <>= plot(apIris1, iris) @ \end{center} The heatmap looks as follows: \begin{center} <>= heatmap(apIris1) @ \end{center} Now let us try to obtain fewer clusters by using the minimum of off-diagonal similarities: <>= data(iris) apIris2 <- apcluster(negDistMat(r=2), iris, q=0) apIris2 @ AP has identified \Sexpr{length(apIris2)} clusters. If we again superimpose them in the scatter plot matrix, we obtain the following: \begin{center} <>= plot(apIris2, iris) @ \end{center} Finally, the heatmap looks as follows: \begin{center} <>= heatmap(apIris2) @ \end{center} So, looking at the heatmap, the \Sexpr{length(apIris2)} clusters seem quite reasonable, at least in the light of the fact that there are three species in the data set, {\em Iris setosa}, {\em Iris versicolor}, and {\em Iris virginica}, where {\em Iris setosa} is very clearly separated from each other (first cluster in the heatmap) and the two others are partly overlapping. \section{Exemplar-based Agglomerative Clustering}\label{sec:agglo} The function \verb+aggExCluster()+ realizes what can best be described as ``exemplar-based agglomerative clustering'', i.e.\ agglomerative clustering whose merging objective is geared towards the identification of meaningful exemplars. Analogously to \verb+apcluster()+, \verb+aggExCluster()+ supports two variants --- it can either be called for a similarity measure and data or on matrix of pairwise similarities. \subsection{Getting started} Let us start with a simple example: <>= aggres1a <- aggExCluster(negDistMat(r=2), x1) aggres1a @ The output object \verb+aggres1a+ contains the complete cluster hierarchy. As obvious from the above example, the \verb+show()+ method only displays the most basic information. Calling \verb+plot()+ on an object that was the result of \verb+aggExCluster()+ (an object of class \verb+AggExResult+), a dendrogram is plotted: \begin{center} <>= plot(aggres1a) @ \end{center} The heights of the merges in the dendrogram correspond to the merging objective: the higher the vertical bar of a merge, the less similar the two clusters have been. The dendrogram, therefore, clearly indicates two clusters. Heatmaps can be produced analogously as for \verb+APResult+ objects with the additional property that dendrograms are displayed on the top and on the left: \begin{center} <>= heatmap(aggres1a, s1) @ \end{center} Once we have confirmed the number of clusters, which is clearly 2 according to the dendrogram and the heatmap above, we can extract the level with two clusters from the cluster hierarchy. In concordance with standard \R\ terminology, the function for doing this is called \verb+cutree()+: \begin{center} <>= cl1a <- cutree(aggres1a, k=2) cl1a plot(cl1a, x1) @ \end{center} \subsection{Merging clusters obtained from affinity propagation} The most important application of \verb+aggExCluster()+ (and the reason why it is part of the \APCluster\ package) is that it can be used for creating a hierarchy of clusters starting from a set of clusters previously computed by affinity propagation. The examples in Section \ref{sec:ipref} indicate that it may sometimes be tricky to define the right input preference. Exemplar-based agglomerative clustering on affinity propagation results provides an additional tool for finding the right number of clusters. Let us revisit the four-cluster example from Section \ref{sec:ipref}. We can apply \verb+aggExCluster()+ to an affinity propagation result if we run it on the affinity propagation result supplied as second argument \verb+x+: <>= aggres2a <- aggExCluster(x=apres2c) aggres2a @ The result \verb+apres2c+ had \Sexpr{length(apres2c)} clusters. \verb+aggExCluster()+ successively joins these clusters until only one cluster is left. The dendrogram of this cluster hierarchy is given as follows: \begin{center} <>= plot(aggres2a) @ \end{center} If one wants to see the original samples in the dendrogram of the cluster hierarchy, the \verb+showSamples=TRUE+ option can be used. In this case, it is recommended to reduce the font size of the labels via the \verb+nodePar+ parameter (see \verb+?plot.dendrogram+ and the examples therein): \begin{center} <>= plot(aggres2a, showSamples=TRUE, nodePar=list(pch=NA, lab.cex=0.4)) @ \end{center} The following heatmap coincides with the one shown in Section \ref{sec:ipref} above. This is not surprising, since the heatmap plot for an affinity propagation result uses \verb+aggExCluster()+ internally to arrange the clusters: \begin{center} <>= heatmap(aggres2a) @ \end{center} Once we are more or less sure about the number of clusters, we extract the right clustering level from the hierarchy. For demonstation purposes, we do this for $k=5,\dots,2$ in the following plots: \begin{center} <>= par(mfrow=c(2,2)) for (k in 5:2) plot(aggres2a, x2, k=k, main=paste(k, "clusters")) @ \end{center} There is one obvious, but important, condition: applying \verb+aggExCluster()+ to an affinity propagation result only makes sense if the number of clusters to start from is at least as large as the number of true clusters in the data set. Clearly, if the number of clusters is already too small, then merging will make the situation only worse. \subsection{Details on the merging objective} Like any other agglomerative clustering method (see, e.g., \cite{JainMurtyFlynn99,MichalskiStepp92,Ward63}), \verb+aggExCluster()+ merges clusters until only one cluster containing all samples is obtained. In each step, two clusters are merged into one, i.e.\ the number of clusters is reduced by one. The only aspect in which \verb+aggExCluster()+ differs from other methods is the merging objective. Suppose we consider two clusters for possible merging, each of which is given by an index set: \[ I = \{i_1,\dots,i_{n_I}\} \text{ and } J = \{j_1,\dots,j_{n_J}\} \] Then we first determine the potential {\em joint exemplar} $\mathop{\mathrm{ex}}(I,J)$ as the sample that maximizes the average similarity to all samples in the joint cluster $I\cup J$: \[ \mathop{\mathrm{ex}}(I,J) =\mathop{\mathrm{argmax}}\limits_{i\in I\cup J} \frac{1}{n_I + n_J}\cdot \sum\limits_{j\in I\cup J} S_{ij} \] Recall that $\mathbf{S}$ denotes the similarity matrix and $S_{ij}$ corresponds to the similarity of the $i$-th and the $j$-th sample. Then the merging objective is computed as \[ \mathop{\mathrm{obj}}(I,J)=\frac{1}{2}\cdot\Big(\frac{1}{n_I}\cdot \sum\limits_{j\in I} S_{\mathop{\mathrm{ex}}(I,J)j}+\frac{1}{n_J}\cdot \sum\limits_{k\in J} S_{\mathop{\mathrm{ex}}(I,J)k}\Big), \] which can be best described as ``{\em balanced average similarity to the joint exemplar}''. In each step, \verb+aggExCluster()+ considers all pairs of clusters in the current cluster set and joins that pair of clusters whose merging objective is maximal. The rationale behind the merging objective is that those two clusters should be joined that are best described by a joint exemplar. \section{Leveraged Affinity Propagation}\label{sec:lever} Leveraged affinity propagation is based on the idea that, for large data sets with many samples, the cluster structure is already visible on a subset of the samples. Instead of evaluating the similarity matrix for all sample pairs, the similarities of all samples to a subset of samples are computed --- resulting in a non-square similarity matrix. Clustering is performed on this reduced similarity matrix allowing for clustering large data sets more efficiently. In this form of clustering, several rounds of affinity propagation are executed with different sample subsets --- iteratively improving the clustering result. The implementation is based on the Matlab code of Frey and Dueck provided on the AP Web page\footnotemark[1]. Apart from dynamic improvements through reduced amount of distance calculations and faster clustering, the memory consumption is also reduced not only in terms of the memory used for storing the similarity matrix, but also in terms of memory used by the clustering algorithm internally. The two main parameters controlling leveraged AP clustering are the fraction of data points that should be selected for clustering (parameter \verb+frac+) and the number of sweeps or repetitions of individual clustering runs (parameter \verb+sweeps+). Initially, a sample subset is selected randomly. For the subsequent repetitions, the exemplars of the previous run are kept in the sample subset and the other samples in the subset are chosen randomly again. The best result of all sweeps with the highest net similarity is kept as final clustering result. When called with a similarity measure and a dataset the function \verb+apclusterL()+ performs both the calculation of similarities and leveraged affinity propagation. In the example below, we use 10\% of the samples and run 5 repetitions. The function implementing the similarity measure can either be passed as a function or as a function name (which must of course be resolvable in the current environment). Additional parameters for the distance calculation can be passed to \verb+apclusterL()+ which passes them on to the function implementing the similarity measure via the \verb+...+ argument list. In any case, this function must be implemented such that it expects the data in its first argument \verb+x+ (a subsettable data structure, such as, a vector, matrix, data frame, or list) and that it takes the selection of ``column objects'' as a second argument \verb+sel+ which must be a set of column indices. The functions \verb+negDistMat()+, \verb+expSimMat()+, \verb+linSimMat()+, \verb+corSimMat()+, and \verb+linKernel()+ provided by the \APCluster\ package also support the easy creation of parameter-free similarity measures (in R terminology called ``closures''). We recommend this variant, as it is safer in terms of possible name conflicts between arguments of \verb+apclusterL()+ and arguments of the similarity function. Here is an example that makes use of a closure for defining the similarity measure: \begin{center} <>= cl5 <- cbind(rnorm(100, 0.3, 0.05), rnorm(100, 0.7, 0.04)) cl6 <- cbind(rnorm(100, 0.70, 0.04), rnorm(100, 0.4, 0.05)) x3 <- rbind(cl5, cl6) apres3 <- apclusterL(s=negDistMat(r=2), x=x3, frac=0.1, sweeps=5, p=-0.2) apres3 plot(apres3, x3) @ \end{center} The function \verb+apclusterL()+ creates a result object of S4 class \verb+APResult+ that contains the same information as for standard AP. Additionally, the selected sample subset, the associated rectangular similarity matrix for the best sweep (provided that \verb+includeSim=TRUE+) and the net similarities of all sweeps are returned in this object. <>= dim(apres3@sim) apres3@sel apres3@netsimLev @ The result returned by leveraged affinity propagation can be used for further processing in the same way as a result object returned from \verb+apcluster()+, e.g., merging of clusters with agglomerative clustering can be performed. For heatmap plotting either the parameter \verb+includeSim=TRUE+ must be set in \verb+apcluster()+ or \verb+apclusterL()+ to make the similarity matrix available in the result object or the similarity matrix must be passed as second parameter to \verb+heatmap()+ explicitly. The heatmap for leveraged AP looks slightly different compared to the heatmap for affinity propagation because the number of samples is different in both dimensions. \begin{center} <>= heatmap(apres3) @ \end{center} Often selected samples will be chosen as exemplars because, only for them, the full similarity information is available. This means that the fraction of samples should be selected in a way such that a considerable number of samples is available for each expected cluster. Please also note that a data set of the size used in this example can easily be clustered with regular affinity propagation. The data set was kept small to keep the package build time short and the amount of data output in the manual reasonable. For users requiring a higher degree of flexibility, e.g., for a customized selection of the sample subset, \verb+apclusterL()+ called with a rectangular similiarity matrix performs affinity propagation on a rectangular similarity matrix. See the source code of \verb+apclusterL()+ with signature \verb+s=function+ and \verb+x=ANY+ for an example how to embed \verb+apclusterL()+ into a complete loop performing leveraged AP. The package-provided functions for distance calculation support the generation of rectangular similarity matrices (see Chapter \ref{sec:DistMat}). \section{Sparse Affinity Propagation}\label{sec:sparse} Starting with Version 1.4.0 of the \APCluster\ package, the functions \verb+apcluster()+, \verb+apclusterK()+, and \verb+preferenceRange()+ can also handle similarity matrices as defined by the \verb+Matrix+ package. While all dense matrix formats are converted to standard R matrices, sparse matrices are converted internally to \verb+dgTMatrix+ objects. For these sparse matrices, special implementations of the \verb+apcluster()+, \verb+apclusterK()+, and \verb+preferenceRange()+ are available that fully exploit the sparseness of the matrices and may require much less operations if the matrix is sufficiently sparse. In order to demonstrate that, consider the following example: <>= dsim <- negDistMat(x2, r=2) ssim <- as.SparseSimilarityMatrix(dsim, lower=-0.2) str(ssim) @ The function \verb+as.SparseSimilarityMatrix()+ converts the dense similarity matrix \verb+dsim+ into a sparse similarity matrix by removing all pairwise similarities that are -0.2 or lower. Note that this is only for demonstration purposes. If the size of data permits that, it is advisable to use the entire dense similarity matrix. Anyway, let us run sparse AP on this similarity matrix: \begin{center} <>= sapres <- apcluster(ssim, q=0) plot(sapres, x2) @ \end{center} The functions \verb+preferenceRange()+ and \verb+apclusterK()+ work in the same way as for dense similarity matrices: <>= preferenceRange(ssim) apclusterK(ssim, K=2) @ The functions \verb+aggExCluster()+ and \verb+heatmap()+ have been extended to be able to handle sparse matrices. Note, however, that these functions are not yet exploiting sparsity properly. Instead, they convert all inputs to dense matrices before processing them, which may lead to memory and/or performance issues for large data sets. \begin{center} <>= heatmap(sapres, ssim) @ \end{center} The above heatmap illustrates that values that are not stored in the sparse similarity matrix are filled up with low values (see the red areas between some pairs of samples that belong to different clusters). Actually, each missing value is replaced with \[ \min(s)-(\max(s)-\min(s))=2\cdot\min(s)-\max(s), \] where $\min(s)$ and $\max(s)$ denote the smallest and the largest similarity value specified in the sparse similarity matrix $s$, respectively. The same replacement takes place when \verb+aggExCluster()+ converts sparse similarity matrices to dense ones. \section{Processing Biological Sequences}\label{sec:bioseq} As noted in the introduction above, one of the goals of this package is to leverage affinity propagation in bioinformatics applications. Previous versions of this document showed a toy example of using affinity propagation on a set of biological sequences that computed a similarity matrix using the simple {\em spectrum kernel} \cite{LeslieEskinNoble02} as implemented in the \KeBABS\ package \cite{PalmeHochreiterBodenhofer15}. This example has been removed in version 1.4.9 in order to avoid dependencies to a non-CRAN package. Instead, readers are now refered to the vignette of the \KeBABS\ package \cite{PalmeHochreiterBodenhofer15}, which also includes an example how to use affinity propagation clustering on a set of biological sequences. \section{Similarity Matrices}\label{sec:DistMat} Apart from the obvious monotonicity ``the higher the value, the more similar two samples'', affinity propagation does not make any specific assumption about the similarity measure. Negative squared distances must be used if one wants to minimize squared errors \cite{FreyDueck07}. Apart from that, the choice and implementation of the similarity measure is left to the user. Our package offers a few more methods to obtain similarity matrices. The choice of the right one (and, consequently, the objective function the algorithm optimizes) still has to be made by the user. All functions described in this section assume the input data matrix to be organized such that each row corresponds to one sample and each column corresponds to one feature (in line with the standard function \verb+dist+). If a vector is supplied instead of a matrix, each single entry is interpreted as a (one-dimensional) sample. \subsection{The function \texttt{negDistMat()}} The function \verb+negDistMat()+, in line with Frey and Dueck, allows for computing negative distances for a given set of real-valued data samples. If called with the first argument \verb+x+, a similarity matrix with pairwise negative distances is returned: <>= s <- negDistMat(x2) @ The function \texttt{negDistMat()} provides the same set of distance measures and parameters as the standard function \verb+dist()+ (except for \verb+method="binary"+ which makes little sense for real-valued data). Presently, \verb+negDistMat()+ provides the following variants of computing the distance $d(\vec{x},\vec{y})$ of two data samples $\vec{x}=(x_1,\dots,x_n)$ and $\vec{y}=(y_1,\dots,y_n)$: \begin{description} \item[Euclidean:] \[ d(\vec{x},\vec{y})=\sqrt{\sum\limits_{i=1}^n (x_i-y_i)^2} \] use \verb+method="euclidean"+ or do not specify argument \verb+method+ (since this is the default); \item[Maximum:] \[ d(\vec{x},\vec{y})=\max\limits_{i=1}^n |x_i-y_i| \] use \verb+method="maximum"+; \item[Sum of absolute distances / Manhattan:] \[ d(\vec{x},\vec{y})=\sum\limits_{i=1}^n |x_i-y_i| \] use \verb+method="manhattan"+; \item[Canberra:] \[ d(\vec{x},\vec{y})=\sum\limits_{i=1}^n \frac{|x_i-y_i|}{|x_i+y_i|} \] summands with zero denominators are not taken into account; use \verb+method="canberra"+; \item[Minkowski:] \[ d(\vec{x},\vec{y})=\left(\sum\limits_{i=1}^n (x_i-y_i)^p\right)^{\frac{1}{p}} \] use \verb+method="minkowski"+ and specify $p$ using the additional argument $\verb+p+$ (default is \verb+p=2+, resulting in the standard Euclidean distance); \item[Discrepancy:] \[ d(\vec{x},\vec{y})=\max\limits_{1\leq\alpha\leq\beta\leq n}\left|\sum\limits_{i=\alpha}^{\beta} (y_i-x_i)\right| \] use \verb+method="discrepancy"+ \cite{Weyl16}. \end{description} The function \verb+negDistMat()+ then takes the distances computed with one of the variants listed above and returns $-1$ times the $r$-th power of it, i.e., \begin{equation}\label{eq:negDistMat} s(\vec{x},\vec{y})=-d(\vec{x},\vec{y})^r. \end{equation} The exponent $r$ can be adjusted with the argument \verb+r+. The default is \verb+r=1+, hence, one has to supply \verb+r=2+ to obtain negative squared distances as in the examples in previous sections. Here are some examples: <>= ex <- matrix(c(0, 0.5, 0.8, 1, 0, 0.2, 0.5, 0.7, 0.1, 0, 1, 0.3, 1, 0.8, 0.2), 5, 3, byrow=TRUE) ex @ Standard Euclidean distance: <>= negDistMat(ex) @ Squared Euclidean distance: <>= negDistMat(ex, r=2) @ Maximum norm-based distance: <>= negDistMat(ex, method="maximum") @ Sum of absolute distances (aka Manhattan distance): <>= negDistMat(ex, method="manhattan") @ Canberra distance: <>= negDistMat(ex, method="canberra") @ Minkowski distance for $p=3$ ($3$-norm): <>= negDistMat(ex, method="minkowski", p=3) @ If called without the data argument \verb+x+, a function object is returned that can be supplied to clustering functions --- as in the majority of the above examples: <>= sim <- negDistMat(r=2) is.function(sim) apcluster(sim, x1) @ Depending on the application, it might be advisable to center and/or scale the data in order to equalize the influence of all features/columns. This makes sense for standard vector space distances like the Euclidean distance and can easily be accomplished by the \verb+scale()+ method. The discrepancy distance, in contrast, is strongly dependent on the order to feature/columns and is rather aimed at comparing signals. For this measure, therefore, row-wise centering can be advisable \cite{BauerBodenhoferKlement96c}. This is easily done with the \verb+sweep()+ function: <>= ex2 <- matrix(c(0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1), 3, 8, byrow=TRUE) matplot(t(ex2), ylab="") matlines(t(ex2), type="s") negDistMat(ex2, method="discrepancy") ex2Scaled <- sweep(ex2, 1, rowMeans(ex2)) ex2Scaled matplot(t(ex2Scaled), ylab="") matlines(t(ex2Scaled), type="s") negDistMat(ex2Scaled, method="discrepancy") @ \subsection{Other similarity measures} The package \APCluster\ offers four more functions for creating similarity matrices for real-valued data: \begin{description} \item[Exponential transformation of distances:] the function \verb+expSimMat()+ works in the same way as the function \verb+negDistMat()+. The difference is that, instead of the transformation \eqref{eq:negDistMat}, it uses the following transformation: \[ s(\vec{x},\vec{y})=\exp\left(-\left(\frac{d(\vec{x},\vec{y})}{w}\right)^r\right) \] Here the default is \verb+r=2+. It is clear that \verb+r=2+ in conjunction with \verb+method="euclidean"+ results in the well-known {\em Gaussian kernel / RBF kernel} \cite{FitzGeraldMicchelliPinkus95,Micchelli86,SchoelkopfSmola02}, whereas \verb+r=1+ in conjunction with \verb+method="euclidean"+ results in the similarity measure that is sometimes called {\em Laplace kernel} \cite{FitzGeraldMicchelliPinkus95,Micchelli86}. Both variants (for non-Euclidean distances as well) can also be interpreted as {\em fuzzy equality/similarity relations} \cite{DeBaetsMesiar02}. \item[Linear scaling of distances with truncation:] the function \verb+linSimMat()+ uses the transformation \[ s(\vec{x},\vec{y})=\max\left(1-\frac{d(\vec{x},\vec{y})}{w},0\right) \] which is also often interpreted as a {\em fuzzy equality/similarity relation} \cite{DeBaetsMesiar02}. \item[Correlation:] the function \verb+corSimMat()+ interprets the rows of its argument \verb+x+ (matrix or data frame) as multivariate observations and computes similarities as pairwise correlations. The function \verb+corSimMat()+ is actually a wrapper around the standard function \verb+cor()+. Consequently, the \verb+method+ argument allows for selecting the type of correlation to compute (Pearson, Spearman, or Kendall). \item[Linear kernel:] scalar products can also be interpreted as similarity measures, a view that is often adopted by kernel methods in machine learning. In order to provide the user with this option as well, the function \verb+linKernel()+ is available. For two data samples $\vec{x}=(x_1,\dots,x_n)$ and $\vec{y}=(y_1,\dots,y_n)$, it computes the similarity as \[ s(\vec{x},\vec{y})=\sum\limits_{i=1}^n x_i\cdot y_i. \] The function has one additional argument, \verb+normalize+ (default: \verb+FALSE+). If \verb+normalize+ is set to \verb+TRUE+, values are normalized to the range $[-1,+1]$ in the following way: \[ s(\vec{x},\vec{y})=\frac{\sum_{i=1}^n x_i\cdot y_i}% {\sqrt{\big(\sum_{i=1}^n x_i^2\big)\cdot% \big(\sum_{i=1}^n y_i^2\big)}} \] Entries for which at least one of the two factors in the denominator is zero are set to zero (however, the user should be aware that this should be avoided anyway). \end{description} For the same example data as above, we obtain the following for the RBF kernel: <>= expSimMat(ex) @ Laplace kernel: <>= expSimMat(ex, r=1) @ Pearson correlation coefficient: <>= corSimMat(ex, method="pearson") @ Spearman rank correlation coefficient: <>= corSimMat(ex, method="spearman") @ Linear scaling of distances with truncation: <>= linSimMat(ex, w=1.2) @ Linear kernel: <>= linKernel(ex[2:5,]) @ Normalized linear kernel: <>= linKernel(ex[2:5,], normalize=TRUE) @ All of these functions work in the same way as \verb+negDistMat()+: if called with argument \verb+x+, a similarity matrix is returned, otherwise a function is returned. \subsection{Rectangular similarity matrices} With the introduction of leveraged affinity propagation, distance calculations are entirely performed within the \APCluster\ package. The code is based on a customized version of the \verb+dist()+ function from the \verb+stats+ package. In the following example, a rectangular similarity matrix of all samples against a subset of the samples is computed: <>= sel <- sort(sample(1:nrow(x1), ceiling(0.08 * nrow(x1)))) sel s1r <- negDistMat(x1, sel, r=2) dim(s1r) s1r[1:7,] @ The rows correspond to all samples, the columns to the sample subset. The \verb+sel+ parameter specifies the sample indices of the selected samples in increasing order. Rectangular similarity calculation is provided in all distance functions of the package. If the parameter \verb+sel+ is not specified, the quadratic similarity matrix of all sample pairs is computed. \subsection{Defining a custom similarity measure for leveraged affinity propagation}\label{ssec:leverSim} As mentioned in Section \ref{sec:lever} above, leveraged affinity propagation requires the definition of a similarity measure that is supplied as a function or function name to \verb+apclusterL()+. For vectorial data, the similarity measures supplied with the package (see above) may be sufficient. If other similarity measures are necessary or if the data are not vectorial, the user must supply his/her own similarity measure. The user can supply any function as argument \verb+s+ to \verb+apcluster()+, \verb+apclusterK()+, or \verb+apclusterL()+, but the following rules must be obeyed in order to avoid errors and to ensure meaningful results: \begin{enumerate} \item The data must be supplied as first argument, which must be named \verb+x+. \item The second argument must be named \verb+sel+ and must be interpreted as a vector of indices that select a subset of data items in \verb+x+. \item The function must return a numeric matrix with similarities. If \verb+sel=NA+, the format of the matrix must be \verb+length(x)+$\times$\verb+length(x)+. If \verb+sel+ is not \verb+NA+, but contains indices selecting a subset, the format of the returned similarity matrix must be \verb+length(x)+$\times$\verb+length(sel)+. \item Although this is not a must, it is recommended to properly set row and column names in the returned similarity matrix. \end{enumerate} \subsection{Defining a custom similarity measure that creates a sparse similarity matrix} Since Version 1.4.0, similarity matrices may also be sparse (cf.~Section~\ref{sec:sparse}). Correspondingly, the similarity measures passed to \verb+apcluster()+ and \verb+apclusterK()+ may also return sparse similarity matrices: <>= sparseSim <- function(x) { as.SparseSimilarityMatrix(negDistMat(x, r=2), lower=-0.2) } sapres2 <- apcluster(sparseSim, x2, q=0) sapres2 str(similarity(sapres2)) @ Note that similarity measures passed to \verb+apclusterL()+ may not return sparse matrices. Instead, they must accept a \verb+sel+ argument and return a rectangular dense matrix (see Subsection~\ref{ssec:leverSim} above). \section{Miscellaneous} \subsection{Convenience vs.\ efficiency}\label{ssec:memeff} In most of the above examples, we called a clustering method by supplying it with a similarity function and the data to be clustered. This is undoubtedly a convenient approach. Since the resulting output objects (unless the option \verb+includeSim=FALSE+ is supplied) even includes the similarity matrix, we can plot heatmaps and produce a cluster hierarchy on the basis of the clustering result without the need to supply the similarity matrix explicitly. For large data sets, however, this convenient approach has some disadvantages: \begin{itemize} \item If the clustering algorithm is run several times on the same data set (e.g., for different parameters), the similarity matrix is recomputed every time. \item Every clustering result (depending on the option \verb+includeSim+) usually includes a copy of the similarity matrix. \end{itemize} For these reasons, depending on the actual application scenario, users should consider computing the similarity matrix beforehand. This strategy, however, requires some extra effort for subsequent processing, i.e.\ the similarity must be supplied as an extra argument in subsequent processing. \subsection{Clustering named objects}\label{ssec:names} The function \verb+apcluster()+ and all functions for computing distance matrices are implemented to recognize names of data objects and to correctly pass them through computations. The mechanism is best described with a simple example: <>= x3 <- c(1, 2, 3, 7, 8, 9) names(x3) <- c("a", "b", "c", "d", "e", "f") s3 <- negDistMat(x3, r=2) @ So we see that the \verb+names+ attribute must be used if a vector of named one-dimensional samples is to be clustered. If the data are not one-dimensional (a matrix or data frame), object names must be stored in the row names of the data matrix. All functions for computing similarity matrices recognize the object names. The resulting similarity matrix has the list of names both as row and column names. <>= s3 colnames(s3) @ The function \verb+apcluster()+ and all related functions use column names of similarity matrices as object names. If object names are available, clustering results are by default shown by names. <>= apres3a <-apcluster(s3) apres3a apres3a@exemplars apres3a@clusters @ \subsection{Computing a label vector from a clustering result} \label{ssec:labels} For later classification or comparisons with other clustering methods, it may be useful to compute a label vector from a clustering result. Our package provides an instance of the generic function \verb+labels()+ for this task. As obvious from the following example, the argument \verb+type+ can be used to determine how to compute the label vector. <>= apres3a@exemplars labels(apres3a, type="names") labels(apres3a, type="exemplars") labels(apres3a, type="enum") @ The first choice, \verb+"names"+ (default), uses names of exemplars as labels (if names are available, otherwise an error message is displayed). The second choice, \verb+"exemplars"+, uses indices of exemplars (enumerated as in the original data set). The third choice, \verb+"enum"+, uses indices of clusters (consecutively numbered as stored in the slot \verb+clusters+ --- analogous to the standard implementation of \verb+cutree()+ or the \verb+clusters+ field of the list returned by the standard function \verb+kmeans()+). \subsection{Customizing heatmaps} With Version 1.3.1, the implementation of heatmap plotting has changed significantly. The method now allows for many more customizations than before. Apart from changes in the argument list (see \verb+?heatmap+), the behavior of the method has changed as follows: \begin{itemize} \item Dendrograms are always plotted if possible. To switch off plotting of dendrograms, set \verb+Rowv+ and \verb+Colv+ to \verb+FALSE+ or \verb+NA+. If a dendrogram should only appear to the left of the heatmap, set \verb+Colv+ to \verb+FALSE+ or \verb+NA+. Analogously, set \verb+Rowv+ to \verb+FALSE+ or \verb+NA+ if a dendrogram should only be plotted on top of the plot (not possible if the similarity matrix is non-quadratic). \item Previously, \verb+rainbow()+ was used internally to determine how the bars illustrating the clusters are colored. Now users can determine the coloring of the color bars using the \verb+sideColors+ argument. For \verb+sideColors=NULL+, a meaningful color coding is determined automatically which still uses \verb+rainbow()+, but ensures that no similar colors are placed next to each other in the bar. \item The default font sizes for displaying row/column labels have been changed to make sure that they do not overlap. This can result in quite small labels if the number of samples is larger. In any case, the user can override the sizes by making custom settings of the parameters \verb+cexRow+ and \verb+cexCol+. Row and column labels can even be switched off entirely by setting \verb+cexRow+ and \verb+cexCol+ to 0, respectively. \end{itemize} Moreover, with Version~1.4.3, the possibility to add a color legend has been integrated. Here is an example with the vertical dendrogram switched off, an alternate color scheme, custom margins, and a color legend: \begin{center} <>= heatmap(apres2c, sideColors=c("darkgreen", "yellowgreen"), col=terrain.colors(12), Rowv=FALSE, dendScale=0.5, margins=c(3, 3, 2), legend="col") @ \end{center} The following example reverts to the default behavior prior to Version 1.3.1: consecutive rainbow colors, no dendrograms, and traditional sizing of row/column labels: \begin{center} <>= heatmap(apres2c, sideColors=rainbow(length(apres2c)), Rowv=FALSE, Colv=FALSE, cexRow=(0.2 + 1 / log10(nrow(apres2c@sim))), cexCol=(0.2 + 1 / log10(nrow(apres2c@sim)))) @ \end{center} \subsection{Adding a legend to plots of clustering results} As shown above, \verb+plot()+ called for an \verb+APResult+ object as first and a matrix or data frame as second argument plots the clustering result superimposed on a scatter plot (or a scatter plot matrix if the number of columns in the second argument exceeds 2). The clusters are shown in different colors, but it may not be clear which cluster is shown in which color. Therefore, it may be useful to show a legend along with the plot. The current implementation of \verb+plot()+ does not show a legend, since it is hard to determine where to actually place the legend such that no important cluster information gets occluded by the legend. Therefore, the user has to add legends manually. Actually, colors are always chosen according to a simple rule: \verb+plot()+ uses \verb+rainbow()+ to create a vector of colors that is exactly as long as the number of clusters in the \verb+APResult+ object. The following example shows how to plot a legend manually (with the clusters enumerated in the same way as in the \verb+APResult+ object): \begin{center} <>= plot(apres2a, x2) legend("bottomleft", legend=paste("Cluster", 1:length(apres2a)), col=rainbow(length(apres2a)), pch=19) @ \end{center} Note that this method is only meaningful for plotting clustering results superimposed on a 2D data set. For scatter plot matrices, this does not work in a meaningful way. In such a case, the user is rather recommended to create a legend separately (in a separate graphics device/file) and to display it along with the scatter plot matrix. To create only the legend, code like the following could be used: \begin{center} <>= plot.new() par(oma=rep(0, 4), mar=rep(0, 4)) legend("center", legend=paste("Cluster", 1:length(apres2c)), col=rainbow(length(apres2c)), pch=19) @ \end{center} It still may be necessary to strip off white margins for further usage of the legend. \subsection{Implementation and performance issues}\label{ssec:perf} Prior to Version 1.2.0, \verb+apcluster()+ was implemented in R. Starting with version 1.2.0, the main iteration loop of \verb+apcluster()+ has been implemented in C++ using the Rcpp package \cite{EddelbuettelFrancois11}, which has led to a speedup in the range of a factor or 9--10. Note that \verb+details=TRUE+ requires quite an amount of additional memory. If possible, avoid this for larger data sets. The asymptotic computational complexity of \verb+aggExCluster()+ is $\mathcal{O}(l^3)$ (where $l$ is the number of samples or clusters from which the clustering starts). This may result in excessively long computation times if \verb+aggExCluster()+ is used for larger data sets without using affinity propagation first. For real-world data sets, in particular, if they are large, we recommend to use affinity propagation first and then, if necessary, to use \verb+aggExCluster()+ to create a cluster hierarchy. \section{Special Notes for Users Upgrading from Previous Versions} \subsection{Upgrading from a version older than 1.3.0} Version 1.3.0 has brought several fundamental changes to the architecture of the package. We tried to ensure backward compatibility with previous versions where possible. However, there are still some caveats the users should take into account: \begin{itemize} \item The functions \verb+apcluster()+, \verb+apclusterK()+, and \verb+aggExCluster()+ have been re-im\-ple\-ment\-ed as S4 generics, therefore, they do not have a fixed list of arguments anymore. For this reason, users are recommended to name all optional parameters. \item Heatmap plotting has been shifted to the function \verb+heatmap()+ which has now been defined as an S4 generic method. Previous methods for plotting heatmaps using \verb+plot()+ have been partly available in Versions 1.3.0 and 1.3.1. Since Version 1.3.2, they are no longer available. \end{itemize} \subsection{Upgrading to Version 1.3.3 or newer} Users who upgrade to Version 1.3.3 (or newer) from an older version should be aware that the package now requires a newer version of Rcpp. This issue can simply be solved by re-installing Rcpp from CRAN using \verb+install.packages("Rcpp")+. \subsection{Upgrading to Version 1.4.0} The function \verb+sparseToFull()+ has been deprecated. A fully compatible function \verb+as.DenseSimilarityMatrix()+ is available that replaces and extends \verb+sparseToFull()+. \subsection{Upgrading to Version 1.4.9} The function \verb+sparseToFull()+ that has been deprecated since version 1.4.0 has finally been removed completely. From now on, you really must use the function \verb+as.DenseSimilarityMatrix()+ that replaces and extends \verb+sparseToFull()+. Since the dependency to the \KeBABS\ package has been removed, the example file \verb+inst/examples/ch22Promoters.fasta+ has been removed, too. \section{How to Cite This Package} If you use this package for research that is published later, you are kindly asked to cite it as follows: \begin{quotation} \noindent U.\ Bodenhofer, A.\ Kothmeier, and S.\ Hochreiter (2011). APCluster: an R package for affinity propagation clustering. {\em Bioinformatics} {\bf 27}(17):2463--2464. DOI: \href{http://dx.doi.org/10.1093/bioinformatics/btr406}{10.1093/bioinformatics/btr406}. \end{quotation} Moreover, we insist that, any time you cite the package, you also cite the original paper in which affinity propagation has been introduced \cite{FreyDueck07}. To obtain Bib\TeX\ entries of the two references, you can enter the following into your R session: <>= toBibtex(citation("apcluster")) @ \bibliographystyle{plain} \bibliography{apcluster} \end{document} apcluster/vignettes/apcluster.bib0000644000176200001440000001036014170223535016746 0ustar liggesusers@inproceedings{BauerBodenhoferKlement96c, author = {P. Bauer and U. Bodenhofer and E. P. Klement}, title = {A fuzzy algorithm for pixel classification based on the discrepancy norm}, booktitle = {Proc. 5th IEEE Int. Conf. on Fuzzy Systems}, volume = {{III}}, address = {New Orleans, LA}, pages = {2007--2012}, month = {September}, year = 1996, doi = {10.1109/FUZZY.1996.552744} } @article{BodenhoferKothmeierHochreiter11, author = {U. Bodenhofer and A. Kothmeier and S. Hochreiter}, title = {{APCluster:} an {R} package for affinity propagation clustering}, journal = {Bioinformatics}, volume = 27, number = 17, pages = {2463--2464}, year = 2011, doi = {10.1093/bioinformatics/btr406} } @article{DeBaetsMesiar02, author = {B. {De Baets} and R. Mesiar}, title = {Metrics and {$T$}-equalities}, journal = {J. Math. Anal. Appl.}, year = 2002, volume = 267, pages = {531--547} } @article{EddelbuettelFrancois11, author = {D. Eddelbuettel and R. Fran\c{c}ois}, title = {Rcpp: seamless {R} and {C++} integration}, journal = {J. Stat. Softw.}, volume = 40, number = 8, pages = {1--18}, year = 2011 } @article{FitzGeraldMicchelliPinkus95, author = {C. H. FitzGerald and C. A. Micchelli and A. Pinkus}, title = {Functions that preserve families of positive semidefinite matrices}, journal = {Linear Alg. Appl.}, year = 1995, volume = 221, pages = {83--102} } @article{FreyDueck07, author = {B. J. Frey and D. Dueck}, title = {Clustering by passing messages between data points}, journal = {Science}, volume = 315, number = 5814, pages = {972--976}, year = 2007 } @article{JainMurtyFlynn99, author = {A. K. Jain and M. N. Murty and P. J. Flynn}, title = {Data clustering: a review}, journal = {ACM Comput. Surv.}, year = 1999, volume = 31, number = 3, pages = {264--323} } @article{KaratzoglouSmolaHornikZeileis04, title = {kernlab -- An {S4} Package for Kernel Methods in {R}}, author = {A. Karatzoglou and A. Smola and K. Hornik and A. Zeileis}, journal = {J. Stat. Softw.}, year = 2004, volume = 11, number = 9, pages = {1--20} } @incollection{LeslieEskinNoble02, author = {C. Leslie and E. Eskin and W. S. Noble}, title = {The spectrum kernel: a string kernel for {SVM} protein classification}, editor = {R. B. Altman and A. K. Dunker and L. Hunter and K. Lauderdale and T. E. D. Klein}, booktitle = {Pacific Symposium on Biocomputing 2002}, pages = {566--575}, publisher = {World Scientific}, year = 2002 } @article{Micchelli86, author = {C. A. Micchelli}, title = {Interpolation of scattered data: Distance matrices and conditionally positive definite functions}, journal = {Constr. Approx.}, year = 1986, volume = 2, pages = {11--22} } @incollection{MichalskiStepp92, author = {R. S. Michalski and R. E. Stepp}, title = {Clustering}, editor = {S. C. Shapiro}, booktitle = {Encyclopedia of artificial intelligence}, publisher = {John Wiley \& Sons}, address = {Chichester}, year = 1992, pages = {168--176} } @article{PalmeHochreiterBodenhofer15, author = {J. Palme and S. Hochreiter and U. Bodenhofer}, title = {{KeBABS}: an {R} package for kernel-based analysis of biological sequences}, journal = {Bioinformatics}, year = 2015, volume = 31, number = 15, pages = {2574--2576}, doi = {10.1093/bioinformatics/btv176} } @book{SchoelkopfSmola02, author = {B. Sch\"olkopf and A. J. Smola}, title = {Learning with Kernels}, year = 2002, publisher = {MIT Press}, series = {Adaptive Computation and Machine Learning}, address = {Cambridge, MA} } @article{Ward63, author = {J. H. {Ward Jr.}}, title = {Hierarchical grouping to optimize an objective function}, journal = {J. Amer. Statist. Assoc.}, volume = 58, pages = {236--244}, year = 1963 } @article{Weyl16, author = {H. Weyl}, title = {{\"U}ber die {G}leichverteilung von {Z}ahlen mod. {E}ins}, journal = {Math. Ann.}, volume = 77, pages = {313--352}, year = 1916 } apcluster/vignettes/JKU_EN_noName.pdf0000644000176200001440000001166214170223535017277 0ustar liggesusers%PDF-1.5 % 4 0 obj << /Length 32 /Filter /FlateDecode >> stream x+2T0Bk˥kO4 endstream endobj 1 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./JKU_EN_noName.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 7 0 R /BBox [0 0 557 180] /Resources << /ProcSet [ /PDF ] /ExtGState << /R8 8 0 R >>/Properties << /R5 9 0 R >>>> /Length 2912 /Filter /FlateDecode >> stream xuZK$ ) [K^j!m|~rȖLr=ߟޅ?Ƿ_}PZrw-H Z/ZHֵȿICp9>.?) V+~KQXUvojW%TJu+I鄜|??$'.a]P8R-Dkr"RRsqjΟU?<"eJӾxq"‰,dIi$ } 4wYIqmBKe ] 8jX{K.{h--v-o2\#6k> 1\wEvKԥ3kOm1x^~Ku_5Z&Pե|JrkLؤJϹ̹< .Y_WC!#ѥJ4qq,A3ău4Z:Cpt"k06(5fƅQltH>U f&Ӳb,ҜRm0oiH5 P̈4Ig JJl9TsjPܥ-8oWF hە@P/j͕9&q]alӨ/jO QCѥNC XŻj` )/ZPq J Ϊ o?-ƆiЬ/in$Dq`6V(~!pr 62rRs yvB4i%jyٵݽ{WZ{ -vG'wJ4 8![t Sp$I'nd;W,PyAL^(HEOC❥Lc6bm2hs) `+mҎ RkZ\ L:exڄ|( 0XꟜł{?Vy"[a#yz[fPS6ϥmu M Z'vz(KWӛsED$\NBC4]57\X9y(iNQWdCӑ5?U\5 Fi@ 2%zZ0xi%c7`E$N+D1f0MKOx(PA Q ^mOljoJz/(S<=Z PSa^a6~g&8k&4hUR:!{TTbw`Ÿ/4ΌB}=or;*=_pXl0ń X|8Z{>n򏠽]њDFj%(,ocyO Z(o45axT\{o~{nP~E? yӚ!ՑqE+seGB M,BW@D (!Y$1k3oOMنX~SC8mƟ􉧗%D> |*͝ϳ'$Mhq|羁2J=A}fٮȢY,@J۬Oٍ H ZʍʄY:Ԫ2|ʩ1CQDXvȆϾ1-&ղQ>?p{Sjă7[5eZԇosT=dJk-jL@XA.6 _4TmT9gSK5wT]eb3i&FmɬɾW{hq.9~=pi<ʋDְr+cpK(8[]Ak@ E@>H+SLǬuf`,U^26+|Ti3}E9<>Zowj-}drԍt"N2 q.&LȯٖY=|lrcC7nm~F DœhfBefy~ʹ6 AGen5Dv޾>m5 ZxfKxE6+AYZ~xז endstream endobj 10 0 obj << /Filter /FlateDecode /Subtype /XML /Type /Metadata /Length 602 >> stream xWn0WXZ [,(Ͷ4%T-&b0%k= 5Y*S.7x;Jܦy4<~?Q\uy[5ޱO擰!MVdBSd2HY -A]dG|NT) ! |^p0(fnY Kŧ"kuA l6sTy qum\ΫW-Eϱ+B*mLW֑eMZU0A!T4qx=l/RvUrueRp7ExDYˋ`VfX4_P-"o#ƳkɿE G VRR֕.߯/;{xbu[":pyr`#>c6 Y{/3敦9$̨>- 2^mTKE9Pmmd56 _ξ|<\~b -(9;>8$ #VG9P?ϔspsR!yh 8ONh`40 F7 "7M"LD endstream endobj 12 0 obj << /Producer (pdfTeX-1.40.16) /Creator (TeX) /CreationDate (D:20160217113431+01'00') /ModDate (D:20160217113431+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) kpathsea version 6.2.1) >> endobj 5 0 obj << /Type /ObjStm /N 7 /First 40 /Length 322 /Filter /FlateDecode >> stream xڅ[k0)ΛAӋmG:\gQ6vFT'o>Drpz! p^ Tl445xT0g\պrUStH,ĭ>= Z3WJ&Wt'#L6u^{+Z0.G(n=`z]sp!_eavdx>|kH)΄ZaИmgZr)3L=K(#0~~e@}$ 2"̣;Xi-"a?!#߰?Ȋ endstream endobj 13 0 obj << /Type /XRef /Index [0 14] /Size 14 /W [1 2 1] /Root 11 0 R /Info 12 0 R /ID [<5D14B58E5EB27A34475C89E5AE54310F> <5D14B58E5EB27A34475C89E5AE54310F>] /Length 53 /Filter /FlateDecode >> stream x;ѹ~DXSbb! ;;Z6~$F endstream endobj startxref 4740 %%EOF apcluster/vignettes/bioinf-bar.png0000755000176200001440000020330614170223535017013 0ustar liggesusersPNG  IHDR6 ` pHYs  tIME5;:itEXtCommentCreated with The GIMPd%n IDATxy^W}sfm,˖l!/`iWVhKR6K_@B)BҐ pFƖe[ޭwk4F۬33Yf4%͌~svοR !ͳ|q?)EQN n_{E(#!k?eD!1Fu(#-ǎn<DUI*hMk:T%Fw:Pўy7C_DFsX|G%*J)-0rOuGRZgOvcL!DCN `ڶgJui>"Z`i9~c=L%F|a6C!Bu/DyǾ=2J#WJKrE!0Bڃ_{pZjF/{GpD5K?H)gTR"ZB'WX2MD \?ǿb1eɊdD(tH'Oph M>t+ś'.)?Y!.) ݻoz;ڴrK[b1==J;&,!MmCyJ! $v%JgJD cxhܷZ;B,ƬX !c !b )t1U5KD W~Ы[w\tu(>.&t]RHZJh'V߻Ǐn}&s1B,f 1s\2 Z#Dpg{xsc&`%vVj,m>9KD D]c\rJ%_}+]M>Lh(Oc'?_״D9O!\9R/#'6G۸⼭;?UWWeDP[ZھoCHx%ܲZGPID 'hZkqxO1%f.R6eZ 0̥lc[VIl7?=C'[Sbn:Pm =-4%V-[4sJD 'OeΖ}=+HJ#Vz*ž[b۸k\z苈8Z}uooz )*ŻT-Ki!B1T5%30=C)^?Z9$}R8O|c+6ĶcPr\ !CH} Q?+}RW>'8D7#Rjjxp?Ϗl}&|lYb梲CwlaƘ|Kch7`둧vx/[?47»~y-p|{WǮǷ>{ġ\q_r&S8]'m敏m}}nurO,,̈hٱ'g76okS[[;\0]/?3Lv2#JL)BJ)ͭ-+0sI LJ!׌=a3j/to?GKZ!b )!j{:[0qG)K4s×?7=CGc JN)Z-%R!R&80G !B)l8K !TFF]3k.igMLiji~_?#C =1Qb!8[ODJJ!SwJ!y%%JV+IcaX8avCݍ1&5zw,ƫ&L/ JgMi?}=wRѣd$˧7v`gwe[WG%+=*1ԓCHb|JNg)dBc&%g !5R\1s]aV1 B"8߾s'߻zj2bؾ;=Mm=Mޘ2R֜yT6KeK-Ē Kc,}pE Y.@"Z3Y_@[)=Nr!4OԆ-q3JD 0mnn2eR':Z75o3coQ_;)?kc- - זmR>o8uۇHI !~O)s+O9֑CD 0~qkC$+wǛ]==~e9)Ǧd^vFiR !℺}oSOv#|B ᅽ뮛}\Hֵ6߷7?zNbƓ AH٫w2C13U|fKblo=²s5p$8b6b#ק~kjjfK)k~tdz?X{+AՏG}L*c#rB.gU?3j(;bhK1 #P+temӖoӊ#'ePb鹧x`Itb pؒXf`+J n9=N-(rdw< eZ״ןzjK;ZҳMJ=+TdƦC&8.f9˂`Ba21w,x띍7\7)8Y`4Nt~~]%F;u}[wvKWto6J !4bJw~JOJ)hYKX4dz7~.4nTåHD 0b2'w+˷ }ozWzi߱c!b#'3%TJC k^W{+{ΩgZRyڇQEұe}~_y%mrY8%- +ވԟ}]3QJk?87{q`8Bjmc{ǿwi 91ƯѢ YL5ο|>tз<ЖM'ua\B.ic&ʕw>8_N`PEr'tk?9iָutuum<Éζ8:)1tZzwCn錅}/\:cAΗ3#DټBK N>iԹ޾жW߽B,?P1cEJ*bC=K1TS"f-Ia.Ϧd\6ڏ.yo]] BF,mĞtsgΎ1Y[6оg񎓽BJpӛSE'4%lK1)*1_f[ !/dBXK,ĔF-~/׍kyD#ƞbjKbxy'߾L8Eή#?۞[=A!Dx4RAf:m9fSf{ۓ;yD)F6~-m̾| ΗED 0 M'}fŗ~ڏ-{ʝ-=Ozm]>xF'X8yNbzos墉78\.-0>?!k6Ƿ}T7`ˡu>ec۞Ka&1&Տ_:}O]|F[K)p>q駿[g0pLmr/^{w?䎖]uNh}u^xEc/|1yZ!NsΓ_}w|0Z*@ƳOw 7j'o[]3qu/皈`Lixܖ|z`7=GoD*ٿ56=G7?tp:UO|]>m o⛦5LrΗ#T8ϾoYH !B*rBmZtBŬu/|#1>J}CH!ƐguNSETz<@1?zՇkb.|9j8̅cwG!BKOG ~R|֖_~sͿucvRJ-zs'PbXJO93K!9%cb!3Jc3 IeKÍ}?^`)%Uο 1ftdS--=-'we節L);WpÏ߻+URƲږ4*ϔ\8Te1+WO)rZxv+0j՟EOH I坶3ЮwG6Ԍ2Z֧*ZNY8KyXDs!VdѵL)W}mPSJ?zϿmyRGQh>g7ͺ)GBg{}EӘBVЛtϥc|`@:D'JC b!$eZBߍi 5¬c/Ժuvu8׾ں:©jDOR~ }LUϿzɔi0h͟|/8)B)pu_/8atVm'~}?–;T԰!}]\/_&eKE04hgp IDAT޻.2﷯ՎN>Gzq8_'P3ݗ|7];r UD 0>?镁!vNqo__?6alٱ聧v5qyEQM͙0oм[H L'[OmiLGYKmwb2اzso_q k;?m>y+39x欮6^ոޱlҢi z|Gg i,ňl K6lP3m;r|CCM.7kRv7*}8X+{:1E.^2WL7ϰ#|_!cH%i,DʈJR!ұ\1qu-llA-]kׯپ=BL)wL!Ē8XC,ddeWJYcHǐMr)4%o|KD 0$|VId)$TAR)2a$|BH!~^|>Ooyɓ1Ē*PFySH1SPR1O*b'w]5y} w"Z!᱗_~uPrZ+x7_dɼcGVPK+{OEN;Co"+ߴ{}{gxN2yv'ڼq]흝[14ต3{+e[FL3vɼy.H Zn]zEm.>qSm !KCb*SHpCJٞ=1Ɣ213S1|-G&dy&5Ξ~/|C߷{STbiLJ lҖx4*ZMh֬EgP9 5+׭[]HiɄdMZBiJILI5e3ܒUG1iv躁EgG#knyБc'JaλSS*VR**ʗ+s1~Les^qѼ8iDCԏyvi#*3DXun14u &O8߳+w:pD[[ )I` *=~:SŸTތIj~Ѣ\.dd ]oxvƒHP)PXuHYϲT(`2zԨ/U gL3DRJ5ɓ2yS0kvܰkwk{{ŒbSBB!1WLcPQ_.%= qZZ"\GUG9R?aѬY^߻oOc?{+R93Շ43X"p‹̝;s$_ih׶l['bi@t'stV93$Ť c_p4$6z wϖc!"˥bǍ㊥s/J &\+u?㰕B$o&% l8&7u„-xV 'N^ptg|iώG,$2аR~~gN^uL,)o.74\ss7۱jJU=SsXCeEszeGrp>Umصk;қ+eX. Z\? -1BaΞ}E9V8?D}=KGTUIhG{( ZLclώJ}fBi˜ɓ1k"Z [wk{ӑ#guw 6qs玛hw~ja񉫙'S h>#ߎY_/R3 eq6z$8u%uYutcLj1$~=":Ui?WVb[q'#NBCy\T$j!$s3TNu$$jNW$!@K_~K>%-#ҥk?>X,X;$ne윆Bb+RFu ]fS.5C8{oɣ>-w+Ob%TtUԛ'}!׼u Փgiu) !-/?v̈o"ZG׮V Kq_Z>6ҙ3QvkfR|bM ឞFGG)g G_{}iekds?N}V˷ǻڟ=yQ< ŋoV Ű61$1nNcP'ekΘd90pfe}:Uյ{1ZI$u[Ԙ-w99008pyrutRrQ{9h_oza!2064|pwskssS&h/ &~5:d$["Zh߿zc*B$IeHR)NRxo=pOwS.YR*.ݺ}ŕ}*T:_~/e# !BsC}*!-s?xR) TZbyHEKR\穙ig4rL_$IBX<.-ռENrRY:ֹKue'?6ݭD\. tم|hÑǏ<7v*r{GoY*%!$~ƒZ'{bdD9!8\?sTCHa=6 IB.jj© v+kwJam#=F=.K9k^[=mŰؐ<{jc*<-!l!: !$ĸs\6,5L==x{憆;N:P/^3=5?_X/CU[0_ävBC 18=<864z?{ 7nlIJI%5Ih!jobdd}wuembf.],KkT?|Zq鸚]橙TͳtS'ۛU21"ZCar~~$!IuIӞ8nơ=d1 ~+W/߾](ce'T^*sb+*[8ʕ UY/!Fz{dž9 ~BUH:Hjٶ{Θ$ўSCCm}>~efTb|z+/Eh*=8T5:9/jki>sjp`Om_,,MT/Bz::5w}j,uX__=sqnJ{I4TWyhG7o^lб#=]-m͇sA$s{yw_/,Caɣ#GT;%/νqgH55/o7:r!Y2>څ $ĊW-n_=<-Arzq=>SIHbt{(OfI%L&~ inm~V&t<{Ѷ#Ox/CjBc3ILuK<1 I1$lޢl@R>2P(o̎νr?̫V8(?*[g""d+%l匔$!"IJ$yn#1GwJZ֝vaRHI^Pg͓K*޴QRl `wןOOD p`'"ݣNȦVnH uwr#ϲRIBX[___im|a{_!ٷ| f"Z~bvnvPK:e;Υ+$==_|Lߑ#uK/Ν[+cHBekRz!vcurvKҩYu/O|}N"Z?"<%$Te|ԋh!ܐ?O?W*&g~{bX*[귯h4R#j//9fU4V=Ho79P?ϮZ,*c$R!~'O2; |Xή U)V@JR+&Ժz.BUNƾ#/yhOoCBD p0G?^/?<1_ʑbk?ybT$aeihmj|1pD8FBk΀|N 666Xյյ[3'oLO/Y5eUvl&{Ao4! tNWc:;3%ݶ^X_\]:9sK{EljunܖTS1[Օ$T4wl&2}oorHk^+C6Ǟ=fb3-u:ZZKffVVTqƚ_,%3 K&_^llhH",:UN+=]1g>ݝɊza}im;]snsbI !|X($2157 vu=;8w?r8V`G<<۷OZ |#\{sho^1=P#*%CR9 ՒQV&KEo +!I./ܽ{czzlh 'O464e̫VO^;ɏC5Ybq*Pdlh3775ZOT*n\}TImd!5۫DŽP^s=}'G/`}ai Ixǟd2H$ ꫿O:lܽVsڽ$Iƿ<$\6-W>˟~GFbVS1Nu/.]]ԕg+LQko\8ug%ookIzcExfUIzβ#e? |{gzzgfW !N}c,Oq*[\ov|Gz{/F{=^ʚ;bOw ԙL&cMKKӱ޾$֊R$U(抟 vu}BɖU IDAT\6ndr8A !rr`ӧug|npopozr3 bl7lOrzv5&Ɛ$*R)3wνyc#C=v"81DxĪ8ljmPɞKn_Z+oQ !e(1 Z5 I%eX+ &մ3Ow?){w]rS ύ_`:- wYdZ[Z[ڏLt}0u{bjamc϶CQ63Yb=nL yS$qꉕy/[mk7.}O?v.'-A($őG ZCadt{报b Uz?cUܧoiyu ߿z}sw`x -* :urĢN M M z٩n߸9=V(lF:J@!֚0>$ K++o޺tk|zǏBm"ZS-M<{6X,ߐZ)}<9kKKU;[OSĤ6]ghLR11鰘]vJǏ}̙|.k 8p1c_r>/ ѐfZMO>1:^_[X,$FJuJ!bILG*1Ǯa5g3%n ێ}پW 0~s֟_S'IHB[I<[b>/Bs I>PVKLo%T(a3oFA,3=b\/G?no{!KͯZG#;?rgjSBH%Ocbհ΅U.uߙ9/=7va;9|*wc:{ꄕlhhlxd~-4dWג$RC[?QoLB(_|zttϭ%D !:_ =/cGgWS˷gzTI$M$;>!ư3C*e%T]!P~zq.ܼy6@D pG,Dpo=30+7gf T|\^|k\~϶̫V=OC"=Q379kd;tCH$IV++]Yڛ?趜%^-BHadu/f6hRe$F]o;z$X}Po:71f[NL4L/4^^z̾~h]9u-W)Wo_o_x̕;ՒMq3>%BBXʋ-&!Hhٸz$PO6ص;r1yg=6DD bL!yĵs_!k7n';^jYq+q'w% !6UʮlOGTk!Ӹ}smkO]m;s}Wf:B^?rDf;K Vg&{wlnh[詈I*TvS|iݝxJ=|s}GC+7m -xL,ulǮ5g 1BCIgU>8\1`㠢=a'&u|J3[65SZ>${$ IJC7hU[-.Ͽ䏾4˷ UBJzz\=U1[O}w}i_dW%|Rnnr+WsG':x7Te쑺CLje]Zb\jƻ zl%8X1$&]_ys/'y=JLzsMˮάl6n5t.;n6rw~{zh[ !nTİUc=/Z"O]:r} ױ484:سٳcH7*0*pYIqoJw&.dsNo51lϵBLBɄLSx#PA -'Ɨ>>'Wʮu,ε/^ͷ/u}\J܉d(ugNV!$q;%$wInٞ?\ɏc&/ % B-dB+Ʀe'/B0sd_˷$]q{ĖL5G{䍞oc;-KRU ]K]/W>W +#3?xi(I({J fNC!M?uu1qD.C[qq/ltkv$oͻ醾#A-RD" X0ÒrRaca0$۽ogr$Gll^^Uq d+ʥzҷ؜'BiycfLG0XV gTT['Wad So>1/8RQq7r[O[*b,:S- 6h5fۓcoaY`m9وHRIyEB ٦W>k[^|TH֐%ɬMMt/{ytĭޅSY' ˾jLqO\_xΛoAX`ݽ2B1IS|v,E6t>q ukCK+MKM7 wIR^[UQ̻ C%c!Ɛm.tw\si=6ZJ"륦TTkt|w|bCY+q;e#x%Z=f3#neJCcnemw1Y-36~j.!nj*wy=}=&t>3UKh87Z\[+g >Vpd9BkuZ*3udypNݏmB#K=/}\6qd{kbɅ.,ν~&ܫ%S)![ 1l>t={e[o?y%wd"b(g䅉>7wlk5k>: dCczމhGåFVNDuDzb&V;vjl\Rvmc?}~Z*6%g .*Z-;QF-Csݯ d$[>D*%f!߲o;󉧆OY䥕=u^}lF}VkUk1^>QLD+ٟ{Z8L.Is&6OcY}TLh8f[^^xԚsLqmŋÍ}wNl9:K%oW}Ll#V{5쒊;JD(;28Pq浱P+Q;o%c͟|Seh#O^4/[wK&0i ]銎VQb߈1D)Xdml ;-[x, !Z[1RTRjcfcCϗ5Y|] !JٵΙ=u_s~8.uj|ƷCkJOɄwۘ]hKe1,e!&;ʼTE:"'5&/m]Bbw0sdO|~cWOb)H˾Xʏ%E8?'g WOП uSZBR;x" !w;1:&:Ɨ':/,^IVpJٻW wZn7̵2]ե޲=/8}5h+SMKuckX4}ܿܿ443l[*;'玜븛͕}[W5/8=:ݾxaDW֏^?4Y=۷i?62پqkŻ!Yi]Mӭ'WBR~rr]?(ba+!Mcٍz_hO|bC\Ȯ?$ KR/_Sxfrq%$!]+8[}_-g ã8:˧{_ Vh1$I!$~vD 1HB!$!!ލ<[mCHBcrÑƗou.^XN֥4ߒb0sd֓MCSͽK ,Ucw1eZVJw-~Zʭ=S*dc q3r"ͿˏC%l ak7ߝui !L&ONk;}#۲lw8Bۧ&~ q7Jv%QcLP1Bߗ޷` fFϟ.73#+XژꉡޘRl/;!n8WڊV_1ݾtcQE^)U`OE`b!_o9"~L7;8+6̅X[Rn}_cKp^S_M! *'8bp_I!$I,ϒHƸszCKRBUu L擎et:r+y峙散y#߱yGi$Z?xi@q%Ba#%Oc[atcƘCTKiSSm^R]nٕɆ枻_pOmmY~~ծ$IvtC#g GKiqwO.\BpJ϶owt{H26-)'l+]\d|*X:y/LvT|8uՑo)t7GFc?oMLq-k1>%Qť;[ik?5qħ+<4.NYv={9 vMw\NլXQq&xŐd?}jzVBJN!čbo{,Cؘ`osi;e-۱q'%ǘͅ箎|/Zi IDATH7RZkJlPc*Nhh㞉EK"Zψd=wZϭ>}gO6&A-Uۭ;gstU4nbΕ7G~+׾Bb+y(Jُ wsEHTMD ?;#iz؉y*va'HDQ˰H%}`'q>0ɸl'')IAGQˍsOwOuNա^ݙ귞>vA IzJx4)*j+ۄ; 7/nSTZ~7pO.GR ~Tg\Sk$!zEkJjzm_xJy !ӱ{ig?F*B"8^]Ho[."ZV]wϟ:=< HJJKArFX[xU[6&mY~d~6MS14{ܥ?fe1:\ʼnH$ޥ aҝvjߨW:[fK!bFs !IB !^O( Ujٲ&~eKBRcH6onʄ|G.,dG:g/_tܕzq- "ZNi)7}=M3}O_v34%^RIH˓JK qk+wWMiY=r~KQmY-ퟘ:37}nlSv_B#nlOD pb~jѮ]l^ؠ]cKI(X~%55ϵ-k֪t.}Fх #*Y͎Ϧ{NVZ.\>?ury`65ASm{糋c]~qT -Wxua׮ڊmh`myniJSt hLԹk80woeEP ;&_=yl<߹d3PC)4}skmRCCHkBR)Z^BH65b!CSRJףחF;-qH>38e;ѐj1$qrܕBך$BHzLdkJc !CR6:IHB.5mʓI_BȵM(-nd5\i]z AD @#1$qz|lӗ΄T) !rJprE\ !e\l~L\a=]Rl!&'^s N%Lo.fgN_Xii03X|]Z"Zn# ׿D*|ӭt&1V'Դ5Zo8nMl] bw?v}zk{ mI)-zKc]l˚!J?`-{sMk!UۦQnK$riMUdsd퓯/u-Pc|7]"ZvjJ\lCchBHAiYSi8{QMdچgۆ,f.N\n IRvz݈[<~WG|3BܒCO峔+buJ| V [WUC픪;9򥗆>~&ӶR%JP#c ކɴ-M>}9۲SIHBٰsyb0TYM&T&:vepvFܥd5OapN/ahxV皧6Ϗtv8t+ߵJq,1X]9VO*L:B1rŞGƺ/4O3{uIP{s6wjuyCo Ovo;%!p 1̀Bzd#%I*1TMB!ĐCZc`b3X*/M{!$LԳ8 + _SZ jy ~s!X+f/^u,+|)I-5(ա-JpfXմ*ejkaе-cJkY姮]r:}xt 5DUTo~f{b&Tԫ nmsۧҡssCsW{B"24&/YK/|BW:MtuHe֡ʼnk{ A6K6{f-],_cӫ>{e`6ެ1$I1dKr6u}`X!*U1Zz-0 |}O !n}'RsŽCFD 'CH/!&1PCL6RQ6fPJIHBUI,nd$e1IouzI! !VpTϡOCHB:u}WwᕙV)-_xID &Ti[ӹHc ![PF y-!nr1.ND {`u1_xikC}O:>i^Ixۗ/[ 7_&b 1t<62<30}vpu)#EZ'Zf/DWbୗx|g1*ǣd?ov(U͒ {ՏYMc*{63{:֖rXŔPhx%ًcS'[gc\HO]Yﲵ&%ֵ[>l7HuKt}yx85u8g{?v"Z gf>1:t}t`|BCL֟+ 3Y*9,q94+l@Q^yE1drO[O훹ط<^ѹSED &&tqɶ>|ep.]U*UI._׿U$!F̗ϰ5#pP8 <::R5Ҏ/ٖ\Oޱ7Dܟb^j4wX܌WI֣SbT6CSb[ZJ:K쵞RW)XOY ߫SXC_ʃT_BntȵNj?XX:un`ܠ3~Ϥ}lc%nI1$IZfix{CCzFFmF} kCuJ!a Wd޹=:{gGoC4:}- l}/Zo.ᙫ$ɻ?f Ll\c͏['cýnbٹ-UOeOu˶nQII 1ٶal8FN1t8ũCJ٪Is%uxz*+-l/^<6yVkBLBHb ICHB!I*!ĐTpԇrluQ^΅IG{^+%}}S#/ZC"%K~lϱ桄l}YID .זsN>9yhep. Pֿ$CUꭉ $EčnHL]b9j +),1$IL|}dllűF1*>~D%|Jr E8uDnLսoZ\r:SNNHlY^lԆfU* FzzdK%aBmYxjѱ퟽ֽ2 S~'R_:6`c)Hh#A^88ƞֽ&ZeJ5+~jؽFfsɾ_)Ό\难Գt"(ub޹ yՅ=3:MףRQV<Ɲ 6z5u4=>}02uo@HRNyǒZUοC|Hhx$BkבB\yA}Kl׷͘$flScl\ޅSX>1:|ᙆ Cf.:޹&ӴV>6lB1bҨFGLSVհ6-c1zON,M7ɚ4 ' t~^I+el<ȒtqX}tx6_mTHjrN5 .1$5m/lҷx3M^)-grY1im-uD<tO4y{j$Īb%ݲ^bIHyİ^^8 $V>k޾1Kn6NebkR/-_sLCζ-9f~(IUJQ&a}obx<-/.:M=slq3%YXY !XnI6bh*$$J-C 1ƍ.Ʊq!|c}FDK[3cIS񯼖J^:d@bulfi9'n=6hxXaϯ]<2X 72:u֯[j ]xL5B㐕T͞e -<0p'GZb*ibɻ: ,M$>#J~bבL2;"ZjZfrFMMBjQJ ! 1NJvR3^0!TUbUjHXaE !$*zĘTb! !&C9K=c,ZJ+ԒO<1upzs?6v:&7v5&[pBATn=VK!-ThFjJ앞##u!q=6*٬IU*j"^cVEbMyKZƘJ&Z&^ލG;y}St6n 4ި ?"Zhlimi֫Cm۳ШUy o=oq6ҡm||񗇦.v$uAL:M?yk1Kb;X{]jc˩67n#-M_9^9vmx螯$t m y~Jپ+ݥ4#ݴqpحs1$!os>+ke"Zf L96>$BB6!UZהV˳tCMǚ^54U=Y3m3+s]#?=tmޏ]7k]Nel&SoS[>[H_Rny=-%1Y]>{+׶udGB&T%Ԗe3Jafmcnvݶc&Bِ::ujWzF~z֓Ŧb*UNfԬeKJ>F۾锻_xZ1r7$!^{eOsO]4f[VL*#$5Ɛ$5e!l%qfbRwcP6KbI^$C6˧*Y!-\Bq9|n_ݨlu6rrIu˖\cPv>23گ|$1>6646v-kŬzG"Zwb3{o~[{s5*Y*ua%ۅl² [–iToY9puf; 7IWZ:N?6b-o_[x[y/_[ϲ#"Zb^7-=L:ڼ\lˡB%BܒՏUR\X^IR [Y4$!|ybK)B-ǖ|:%1--ŎѮSW:o\[nߑέ<0ҷ8<رܒyQSuBXӠbܸ[ߘ]36;bέv}pT!8RPvdaaګ}}iܚg- IDAT\8;}cu>_im-v=Y.uomBczN;-|}tՋ{tm,U¿VN^蝺=wca +ܮMmB ]{n\<bD鶞r;m[i7y(Y9/Z毆^ҽg;bq][B_W{_WX;7ȭBWOSK>[7G~~$$){(3m?i^q֞$i9+?[p˷ܬe(*Lo6sgM{BU>#\ !.G_[8wxa}BUmTڔv~ڻ8̪fz-˯2_Z[ʹdo# їG_~bѱxҒ-m\,.ߚ?z{TG33-su8vgqyyY-(%_(7NLur⹥+|~EzDpZkx=ZBafWfu6ntO_n^=2y0?{QIữ0={Bl_IҮǽFK-7~9|'~o^]X*ޭ{;:z;: oe'_8vC-,߼8o#+vK&v7rK4L!Q(-1C !P*Kx]Pfo_O{tu1Bt o?c\L{N}rO߬H6bLĵm^wռ7n'|썗-NܻN[G~1t7.?yhc3Nڇg޸zm?~ٴ;D̅9v9z񱓟Clr?Lm$\եpwHqm9;ޑ~6ol9RB<4|$TW?׏þkJ,--<`TtWO~\n_ϱ}Ce8wm o~Xi5%$D*,v~7Og?H;oؾʉ/}ٮLwh`˶.w=6̇>q홺ܵ2svTvwߺzUcϬ o^Εph`Wj^:8sxמa[~>-?:7vod-V "ZUbLㅶO~x>0oF>§O?ϏНR%![;wb{06ReGo?8bO"-ҹ{N|6d;}O89ݣvn+ױ4c^;qp(!wwz^{l;'OLzL <>̇:ڏ >[?t$ڐwBD $_0dO ӎm\kl_ڟ+dB6h>\rG}CO ϖ={<=PhN6m{(IeJm {?dBލ˸16B'N>vr?r*-7b4x>{$tmoѹs:qMrxK_yqv-˒LZޣSwлKP85ypq&Tan%QD/~6W.ԑf.Ie֚z=2Oc.;{~r_Y[N7+Tq+MgzfuO̿Ճ{\,;${.K} s}!҅|n}m;Z1s#/^\W>]]~X]̹;!{'Ie=y7;pp䯾{n䥁kGVveu)3ukjǿ65s;vO׿}dy6ޑ\rG&?٣!ޅw}ZmtOJ¹]_ /q<οG֊YwDpw%M]}Gr г{W=W$ѦFlL =='No /å=DpW$ٖC3''~#!Ջַ/yNQIR+sF^O?WxC2? !)-!w" 1;B32R{ZRJM\¾}߫~wc#/Hiَކ$$׶ҽo;Ch^wqՎix??'O'kt^JKC"ZxKTvcx~/}e}=|{zoéG'?š|Ny W^C9v(cO>c!矜j֊L^ꚼu?xSKsdi9BtkhTvwzKg 珯b]cǦ»h^CD 󫽇g|BG^-\8\ZM\Y|N=Yލ?fݿ)%{_MD 5w-<5O}Y]_8\ZI?s?/ ]xGCxr:Fط'?1|/1<Еk]!巰ߘ]36lL?2:`,Ͼycm!<,5t{|jaW^C.7s7?:7_eBa߃RVc\S"ZR1U~S~'B8?#{W<,5RI)wrc#_]A-MB8K!,ֵ塇4\S}/hxx$sOysʭrS\wC.%!*5wON}_d3!t/5~we1x˖g>>wȆ-"Zd1]jj_>|m8`E??3}r:k5~cy6l7 -tߑ/O7 ;YY:d-XnΉhxT{iS_g!=+?;'g} l]iW@``4Ď/Nq|]Rb')p7)!hHB}<в"TwfVK<<;~6n{E\|DOl{cloP0wd /!/yG3]7 l_Sq- 6]qq8d>ysC|;[OCz{76|tHw3w.I lݝ84*ZJ[<~r_i]$9۾s3M;%246R½5W?*CT%+'{KCh,es]Y86=:͛}Bi,-%'.vߘB(g !ޭO,GM%8(*ZJI̟rŖ¼}vh,||6~MW^DBE @qD\6]W_(9oٱƁKcI.|.uMWTKE @dq v^y~ֽGv<4ҽtX|3!([v^׊/]\;mtpaA!-!,D*ZNe}f+._^]״vƹ2L@5/\x¼k!"ceܲBh$*Z^WBx6ri%cc;٤2w}H?4T(J5-ev]umGKKtܵɦ!DfLR!a*-S!eK:Jq||~.3ag?ez*Z&D<︑%g^veG5{ʚy_ D9K'F9LKE eƎԂS{O[%5kwlx| ((JO>;e&*ZByXˢ~PU[{^xh~f,Y8(_yӊVVm\0W-vTR]49' כ䰿"IqYee g\pnwចL894GZ8Ue;NxE/ ]۷\kirȢD~ٹ=!4ub8DU]Z8Z}?]~vga>0L~ק8&$+rM!ytSmo"շ>kp Ts\e3k!T7iݲ8M%GJ"[\HE 0Wʼn|S2[cE!Df(AP=q NjC,?vl|9N䈋I GE 0Q"V)q*Z".)~l:iBQY?vֵοhAG?UDz(:ˆVzjwNhPd~#9fPL( -KR*L??/lx#H9 R;/?BwîMk}(DYcR1]}[kv6yJ%S!4jOnIØR~zƞWڥO>QZ3 OM!p)_hDE P`Bݬ=<|~OKM]з4Է`CE PX~w6Y~kg B}˫s GOxR}h i!|woZHD4-81u[F߸5bXս?zy]*Z/ X_3:P+k #*rg\ZC HumOn>BE P0Nh~jw7əH[3󗍼 !~p;R?yTY/;_j0G-}E_BC<s:p*Z¨n !:|o]r  N[.=sZCh/%?m9(*Z8~O:l}eg qUv*s_tf&,=\qێd?_V*..ν骮j ޽A?!P%#!T[gw)ga!ۏO-?Vk}]~{Ao4C(oH~E-4im}.Y,-Y1ߨ 2Ei;B h -swg]/7IYW:O~kC+7#[m1ä(#}bdVĉmsν=}kB`~OE 0ۢ(>>|kAәlH嗮|kC$~6/nٶԡ?F 9ڪ N|Jh٫=-ȑm͹CxMOm]B$@(nZ^K^BM5}mh˺a*ZR/(v\BUU%?k֡8|;6-@ ), ͝KKk|wӵ=[ƒ8;TE/ r'.o(-}k{7͢(F{8x,:e«ZB- [lY!-@W&KZ:O!T~Ƶu[[|dIE PvwɁTU?6“S.m p^|~5)g)j*Zpg*]zms!T&ZFy,%@E Pxۗj%M3KNݍ!4.jڕ-@=zQ) 5M޵j,r(J+*-8q "}MZ-Q*Z'0QE-s[.9oz'qPK`MjdɌ$eB!8J%g_3|ڊKw'Bh29@E PH|y$9|qg tMgںm/ԄPgs`EX%cY"ϝ+]BE[idtQR+pLoP_xMOm{6CTtï~8#QK<|Ch)mWn>s`g>ֿB(ǂlljw}:Kw#6};X(:WU;>RBuIo7?UIMCa*Z8z汓!ԖN/mq嘢(zmrc>|C?/ƒȿ~.Xfcλoa8㒞~!*Kz#",,-@QïdcJX,߹Oei, =xWvWh`onC1K$M+F.!9G}ym.Rs.lyΗEQ|uc=炖GwLT.Q?qWG,:vʹ\BnByq>2_OE PteTRU-,{+Bh[7T u7ır贶UyEc?le(lljKN9{U(gY}+못Ԇ(Fk7b5w !TPUx<5畳pTE$<(YSӐ=늾.o a6糉pT@2@WՊhi; jin_Lo*=\ä(jT_xzEGCZ'eBh;J)BU>ه#CE 0j冏5c}莠dYmisιing~TߵFG`ACXo7<8־qGPQO_!47v 6hP̶_d*+*&C5u}O06!*,=#b[ܴCT:SY9߷ɚԘ.G`&Lf뉝LWu+-!r ̩+B(niRNdӎl֕|FMOWnk5]6-@aL,d 3wL1&tצJ--+Jř~"t&f([xS2z{^LN\̤ҖI?iH 40;Tn7TN<2 d&L#{_Z8NsqEun%C__LD 3DdR3|j~V5HeEŭ_NoP9b&-@l]XC{:yǪ7!D"}MW!U3}S*+*Bw~s55ýS'Ͽ6{8wHg2_Sq;-몳c &E%oL]r}}:,H9hMMm|2޶*3hzUTV$tlDLW~27IE qyUO .C+gĤ\vʊ?i%B|e( O@aUafb,3bbtwϯ +͍ ?zI_ïd+$S c!X1cgCIF/}OU)%αi2Ɏ\:}h>* /|r kSݕ߉(i*ZeFvo]ȞΎx0IO9+:<`p_rn~ĵM\&=!3\-@!m~f^Ko}"~N{p~,=թdR&-{s_dfh$tficvLg7>~*3=]0PTv.~t'#ho2qɻ5LX#s'hphwR(Y'P¾%,Afx&14$vtu/=-|Ez>PdCXlt/ ƮcCh'Mbe6.h55<\&|)i*ZeߎCB(jGB${>^Z{HB4MKBBQSTsGXPObۆʟ磂l}7W^]ݓս6_UCv<[2~LqqhJVQwR^פU8W }U,-@1zoXS# >"!E$Së^m{y|2 F_y݆5Lb67/;}uM'&W_L88M {Y&]6Q[SQ;FYp2BPܡ(÷66n̅0^2&7wL=^yt6(8B˂kV\4gYqTw{eg54km29LSOMOOsvJ\kv3Ce!V\("tϻ= qQY.wR88NF[_XXu+_X%DE PtTk~*/y:$v5Q3_J4xϽ4S75uo+O$B|E-QК]zg5Q4ӣh^oo:x)Edʎ'|>V?l@E Pv}u^e)uTFK,˲LI 9! MON$'9y %pdU=Ax<3kFm}_\s<%7W ?!-3UgIߡ#$/LISj:y8޻)gStR:W^I2vjqAV0lػ_*G˰~U8|b>8v0lnlѴ3UKD Pv=u8uۯ1> +9?=O=+|P5} 7f9q0UG]cQRS_㺻۲5ɋuy+N|&P^&xkSxhWrg Q*'\g~7tBgDADaPNn%IdGղsWtN_yxWjΎh´E G¨d~woOS°/lq0mɱU??y8$µN=o#JQ8y: 'ݛ4<Ͼ0 ]fji f:c5uIؔ3]zSNz[Yy翜i֭qxo(ξ1Rz:Ejbn IDATLvs#BgA-@+vFE+^՚J#l$Jx6$2 8hҽ#Nz,t&PSN#wQ1]7{uyϮ-zîAʥp}s\3 ۣOמ<-g J;{ǦٽsS[%9~8ϗ* m[U[.IfsT؞>9w?9o[koMNHtR @> GD PE|[8zڗV[g$t$99H;=} *\N{uAP.'MᎵv'-@)?۶:w{Oԍ,! Rq\,sέf=Z HhJbJ^hrR.XṠ/Qk@5ʷol9&8ަǝ3A']wvX*A}矆AP7NzET¤GmAt$b|QPA3N̋^x]naP.']ݿ5#GD P]r6|(EԻK? nL!bT*%p׆ZNʗ [S?W&0Υ,ahǺܳ9pQh|zYK;GQJ]EA-b\Nl_[sxW\XDCǑ]#2{7>~jhTK+X('6>Rl\\"Z!&\nsƅno8=<gʹRZOq\ HEq]]^AΌ^8G%w%7ޘm:&D._04y6w`[f8=bt)'gN>Ëڜٕ|2KiWǮFq骭{>.&´~KJD 0d;c2ߣϻ>?}^i&a=YgK>]gpmzس}MnlGkl2 qm5;F/]ѱy+Qb?wϜ>*2%Y*[ZvGۼâۖ>blI> \N)K msomrm]&2_pGRaò Vj:n[[`ͅ@D 04a2|l7Zejv&+%33`ֵ;vm̴7GA:"p!DU,N6gy~\C:ǥRipOd\Qّ :OoXvRbhՌkg,"dj/AqT*8+*Glʙiշٿ宾j|rԤ{5~u:{t?3^UC;Z`D'+/}u2L8^rXG3gF}w8z]y]^5qMm0z|a֓:ݜn;-qT)6qjXS[k5G&=6=zl03P5=fNJ[8"Z*,GP[R\ٻ%$~hCo{RA d21Rc3nON蛈 ^޾Y sY^T:sqj&jzo7o~2c]T d@"Z W\\.AEQ\>2㥥R3_j:^ڽ)v:n\1nrgݰL:] ޥw;/z4 WU;bT8Ѷ܎j TdҎW-傳i#]]?$tYc-ig3ׅB)l_jۚ쮍8N9gy~ڂqrG>WK;vnHo|X\ $t jh*Q&r˲3ɥjϖ=[26 ?'O-w?9j|c'h96e^l? o}G}[pmmvl_n?'Z*h*N%v,gF.]>KGGgksg#{2HW4?cI؆lJyN68Ggg/h޵1mM\ ϻX D% q9,9Mz< 9GC%A֒?yumvړGP*'OL?Xiʎe(^g=Q⧽zh}Z95 Vޔ޾>}to=UBD PQl[zk> j { ^|Q- 4T.n[ݷ9}ąF46ū~RY1jl.~,?f`ֲcVg;;BA- y"Z 2en+^ ,ԐS'ZmKmztbFtG}~&sw,m􄨾>wftqS;zL0kqy]Ml[9}4U* jaT{# \*_hQ t6?پfrd$Io 7vӹWv.^t/ҮQuߗt:5nB4;JlY+#ǘGD P!7lH!}>'t|3C;F aag{6e0Iû2_1Jil:Κ>Ohal|fFq8=ּKG3)W\#l/;ypùmό !l:Ga7N[P8z7u#U狻7ۚZm8o"Z+_;5-RTǾ-??v $D}>-ֶ)sK#F8͍wmm }ѿ76,U˵uٕw&ԱdϳGv푠J-Qt9غoko +tTc&HX*?r1 _XWam]vC۷lYk;|"Z+&Knz( ?qg_?}4.8 $)MGkOm~:;yV[g̯JS[0:䦦}R?-PDW^Ӟ]h 645g/kٿ5޲:gSB\oř g_GHEOwwvC;BgoKU9v+Ϣu{Q}{œhtjw淯lYP DWD2sA<'rxsk \ɰ\ mۚ޽sm)S\țˠܖlEј L][hѼ恚cպT -tiiر/ ˷ǖ4;7fN.,X9qu;l6}=/س R!\"Z+`Ԅt/G}Nrd=$ѽ'~\}MoMTU-\]Z:i˪ՔKAj\3 ;ry3ӱ<0o|¼Ԥպ\tZD:zppwߨݳ)cTk 3 3w\w[8qNpփ;R֦vnb.-xƎg[a-bwښk;7dNk8~jT?Z~yצ#Qe..-@;廟orєK?]pq~k',kmk;g퉋yA-\4"Zo{>&q˷E[WgwnȌ_}~+aθ1sm=/DvLe.r! }ѱ/}EXSDQ4vb؉7?T&HpADjߎ}N>$CS[V޾pE&w:tKnYrcp`Oӣߚh %2䁯pŴD.)ZڹBL*Wt&5ֽ[Vam$/PYORܶR\q蹧r=XUE5ĩ/u|6ؾ>]ȟ jKTOtYu$=szy׵[9%__]Z7=޹1r*Jߙ@8}'&Bܐٹ!ΥT9&5d c[wO=\kSX. jo"ZJQ,t!/)m_پ.3ifaņiU3nlCd%z: ӃRy:PHؑQ2e΢1[nM=DΔTO\klךͫͫ2c&W#XkS:uê/e” o ڶwK㙃Rł<h.>DdAfWeI׏*_ss猅S2t\]S3v` Ń񙚖\2h.|{o <\ OU).cLt687ֶwK}}jT!/~h@Eho>9=nQZxCǔQI5c'^Vܾ=mZ*Hxh׳ ӊs><ʂZ2Ԃזli[Pf)KD &,wUn_X8caxƢxڂஶ}[Q$F"ZPrt<^H9%/+4HF( 'Ϭ<3?eϳ6:Z";[]DPb>ع!ڽ)5vRiΛTf,08m2Zh*RxdotdojɊW^[=0aZn´`};eM:Ahk+Kz:|5'0¬q&[M1r~WpO_JvlHDPK@U*ͫ3WgF)Mt 8ضm]g[ä,h5O}χY9wya5UT膚 {k.?/OSw]~8[[59Fe#X|cqCmRlj+JD ϛyQsOpρh<ϭQ>tyUvۺ1%//^Z3)W-`fkS7*X~{ L<Q &j4qҰ׌uwov{*;Mb`~h.~z@]mz5W^3~/~gsUrx7 1BxP7f/-YZl*Og㗿& Ɇ=D0R f]^?ۊpH?{oY1Rt7eBG~s%sG] %xϲگ}SBZ*^̯|(|Z35I$vrբ6z+>׿ sw+OK._hѵ[ۇ! o]cڛov?|/RMA-ALJ޶S %+ð*߿Svs.oؗ^7o}Bjs{_P&Ix`ӯ~érю*~$3r$AKJD WƆatks>~knveH;Cx8\%:ZOd? N%Z.\o_EΧ9,[QU?%Miy˦\}U@B{sg}ݩE•tl/:-\~sF KWlyL3+_y;kL&r ;Z擿_ϕOꨊG˽=>VjQS]DpUɥ[>zي-涕 Clz}Ì)|#WR1\hPӯWEQ#ɛ~=WWKpO۳rRi,1esxM r]Mjܬ fp;Qz#s1U5df^S0=9![Q8}QmӯemM@"Zh+~uiqJ &`Y#6n=UQ?sy!#9/ozjÑGlIGg|_sA% ï;_[9$ߍ&,?zs'|WX l[9eהN蠖So`ɎkkrADP;J퇏?觿c1εVZD?,?^u(IkY(|bڒ_e^7i|ݻ~q羵e0 ?_#VD~/ÖJoN8?peyוTr VfFkb!_JG5^|-6"ZRJd="[9Sߺ&Dg6z\|Î}֕ꡚ0k8TNfS_ڻ9_UafRZLD C?}y@צ+[kD;~Oovo?6II¡z>Sq ;Zu?|5d㣅 rM_TZJh`ٲi*%ۦhr9J.$D_xEP=TL|'8a!ݚrdyR\Q5~ʼnKh`i( KSsB3k=s"Z]* 8e/~gE:8?a[dYTVJänxrҩ*S ˱SPy.ϛ1b>Vc_3D7rP=Was|_ #Se&>^8ur {GM.٠!Mh[NTBw!Ѷ=[.z1$Ik1xfZ }( }a Ɓ}k>Ҿ-2b\wGD0~vYx%T~3_RSNv ı uUwfOA;q8~GoSl]]ho.\z7f[tlk'!o]0.RgTB fhb\zy zp͸;6-շ4fҡ 7GWܷ?Lx75sQؘ~h`{g ë5x jګXd ̓x;9r<{?7ָp|gs{}ct|o番du;ޔ)-$`_|5ac7T9 xrݑKW}͝@{iQG+?~^I=K5"̇wA SB{sq+SSmǹ,(Lt."$o޷sߡJ?yIȗ2x@]6Wa0qiB̿]>lxM>hzU'I>Ks_EU0깝k˜*=Oo?߼|KT lMǿf-OKex[~7 ˞-oO?OTZa\;7w~lw. Cmޣ,;L5Ŷ[)"./躺wwAjqQPrGR ^hS$dfsv9c3ӦL>z>3i2آݿʥD9CF~Y{(]l)bUuUj׷ #هV\o]/&_Jg'8VYLs%H\>g[QY0-;RKn^rku]_FR-8o5W~٧OU]Q:Jb֤'[Ī4hj,\u ON3t8>TyǜQX0>ņR-Ddtλg6utl)ϗ*+IdþpE>׍p86?UyՏ,5g_0bM<+O;vRLo_G4HiKAZ3,8'kG !磿-cNwF*Y-hGUν씺UCL)fMV7+q="wiݙ\$}ɾi FqUۆ|=V8bZm2}Љ0޸'('JE:DRےg\Ҳ$rlj?~ЅQtACM$Z&Mꮎ1 Uܱh殁<9W(H}8}UFHP.77X/\xygQYv2U蒶L._Vq<'|mۘɎ]f$Z(OdeKM=alz6"Vw摃Ds/tYZa14dD]7z߳f/$Z(O[vW誺 CЙ-80yRmLFzvKG~D>[BWSϝ0q\)bӝ-Cp|rrF1@-҇M-tծ֞vSkfE,S9ie)UT U.߱9.GKܺ.k!@yCj!q\(~71m>~k1'ٶp~&ߚnߩҲw-^;g(b'|+6mݱdt_7}|qߛJE߽dfV8~r57׻eUu5[N|ӏgvsCg)"XJ&o괏{z*pJ]]swV܆wt?L9ck7QKm\0D e2c';^>'mޥk㻊^<ɩC-S'\/YMS7^p#\:Bʝe ⟨0Jy?ʊh|mU'=#%}?ϗʋ.}5E&Oۗ] <ָ7Tʩuf9S9uu9;^i'+oP2H.-}F"@Igt`(J?. U1gLMnx{7ٟtW_2ԐܸSFFD{76gJjKvM)=s7gfٚ]vw([Ta!-hgKpc vו2ُ}uio_~|fޓi[9*F8rգ{za=JmW4gFYY߼v}KDyx`~^D #W~C{n/޶gKgK/{[qx57塿/ڹ1k$ȕyŲ+w>8q۽.R̖fqs[7^v9PRi$O,\Tp_ mi6ʼ{63y祾w8́2в3u_N? udλzg}yw?۟= 8z쒹s~^-Ъ@yX ^N"w4uWX}?sj ]NQX۟5JTe,ήM]KWߦή2hg2}M67tp, UOo5#2p'+.ArI08|.wg]=ٮ֎LCc3woji-wcQ8i}qGO7f_[-|e{O4ͿoSCc6prHMh~|S`DqGMϘ0qTJ%*LvKC3[v?t֎^Äe"7Q"qФ)u5'Tҩt"e3}=Zwbh'==F/F"$$$$$$$$$$$$$oo *i!-A-A-A-A-A-A-A-A-A-A-A-A-A-jIDATA-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A !*w;IENDB`apcluster/vignettes/bioinf.cls0000644000176200001440000001731214170223535016243 0ustar liggesusers% % % BIOINF document class % % last revision 2010-02-15 by Ulrich Bodenhofer % % \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesClass{bioinf}[2010/02/15] \def\bioinf@basisclass{article} \newif\ifbasisclassdefined \basisclassdefinedfalse % % declare options for three basis classes % \DeclareOption{article}{\ifbasisclassdefined \ClassError{bioinf}{You may only supply one basis class.}{Remove the `article' option} \fi \def\bioinf@basisclass{article}\basisclassdefinedtrue} \DeclareOption{report}{\ifbasisclassdefined \ClassError{bioinf}{You may only supply one basis class.}{Remove the `report' option} \fi \def\bioinf@basisclass{report}\basisclassdefinedtrue} \DeclareOption{book}{\ifbasisclassdefined \ClassError{bioinf}{You may only supply one basis class.}{Remove the `book' option} \fi \def\bioinf@basisclass{book}\basisclassdefinedtrue} % % forward all other options to document class article % \DeclareOption*{{\ClassError{bioinf}{Option `\CurrentOption' not supported for BIOINF document class.}{Remove the `\CurrentOption' option}}} % % process options % \ProcessOptions\relax % % load document class article (always with options a4paper and titlepage) % \LoadClass[a4paper,11pt,twoside]{\bioinf@basisclass} \typeout{=============================================================}% \typeout{BIOINF document class loaded with basis class '\bioinf@basisclass'}% \typeout{=============================================================}% % % font customizations % \renewcommand{\encodingdefault}{T1} \renewcommand{\rmdefault}{ptm} \renewcommand{\sfdefault}{phv} \renewcommand{\ttdefault}{cmtt} \fontencoding{T1}\selectfont % % customization of item marks % \renewcommand{\labelitemi}{\rule[0.2ex]{0.8ex}{0.8ex}} \renewcommand{\labelitemii}{$\m@th\bullet$} % % include of additional packages % \RequirePackage{color} \RequirePackage{graphicx} \RequirePackage{ifthen} % % setup of page format % \setlength{\evensidemargin}{-1in} \setlength{\oddsidemargin}{-1in} \setlength{\topmargin}{-1in} \addtolength\evensidemargin{30mm} \addtolength\oddsidemargin{30mm} \addtolength\topmargin{28mm} \setlength{\textwidth}{150mm} \setlength{\headheight}{12pt} \setlength{\headsep}{8mm} \setlength{\textheight}{222mm} \ifx\pdfoutput\undefined \relax \else \setlength{\pdfpagewidth}{21cm} \setlength{\pdfpageheight}{29.7cm} \fi % % setup of customized headings style and listings % \input{bioinf-\bioinf@basisclass.txi} % % set page style % \pagestyle{headings} % % adjust parskip % \setlength{\parskip}{5pt plus 2pt minus 1pt} % % define colors and color commands % \definecolor{biowh}{rgb}{1.00,1.00,1.00} \definecolor{biobl}{rgb}{0.00,0.00,0.00} \definecolor{bioaz}{rgb}{0.204,0.325,0.631} \definecolor{biove}{rgb}{0.24,0.63,0.37} \definecolor{bioli}{rgb}{0.667,0.9333,0.667} \newcommand{\blue}{\color{bioaz}} \newcommand{\green}{\color{biove}} % % define BIOINF title page commands % \newcommand{\customtitlepage}[2]{% \thispagestyle{empty} #2 \vfill \noindent\makebox[0pt][l]{% \setlength{\unitlength}{1cm} \begin{picture}(0,0)(2,2.4) %\put(0,25.5){\makebox(0,0)[lb]{\color{bioli}\rule{19cm}{2.2cm}}} \put(19,25.5){\makebox(0,0)[rb]{\includegraphics[width=19cm]{bioinf-bar}}} \put(0.3,26.0){\makebox(0,0)[l]{\color{bioaz}\fontfamily{phv}\bfseries\large% Institute of Bioinformatics, Johannes Kepler University Linz}} \put(0.3,26.9){\makebox(0,0)[l]{\color{bioaz}\fontfamily{phv}\bfseries\Huge #1}} \put(0,1.6){\makebox(0,0)[lb]{\color{bioli}\rule{19cm}{1mm}}} \put(0,0){\makebox(0,0)[lb]{\fontfamily{phv}\normalsize\begin{tabular}[b]{l} Institute of Bioinformatics\\ Johannes Kepler University Linz\\ A-4040 Linz, Austria \end{tabular}}} \put(9.5,0.4){\makebox(0,0)[cb]{\includegraphics[height=0.8cm]{JKU_EN_noName}}} \put(19,0){\makebox(0,0)[rb]{\fontfamily{phv}\normalsize\begin{tabular}[b]{r} Tel. +43 732 2468 4520\\ Fax +43 732 2468 4539\\ http://www.bioinf.jku.at \end{tabular}}} %\put(0,24.5){\makebox(0,0)[lt]{\noindent\begin{minipage}{19cm} %#2 %\end{minipage}}} \end{picture}}\newpage} \def\bioinf@number{} \def\bioinf@keywords{} \def\bioinf@abstract{} \def\bioinf@citation{} \def\bioinf@affiliation{} \newcommand{\affiliation}[1]{\def\bioinf@affiliation{#1}} \newcommand{\pubnumber}[1]{\def\bioinf@number{#1}} \newcommand{\setkeywords}[1]{\def\bioinf@keywords{#1}} \newcommand{\setabstract}[1]{\def\bioinf@abstract{#1}} \newcommand{\setcitation}[1]{\def\bioinf@citation{#1}} \newcommand{\affilmark}[1]{\textsuperscript{\scriptsize #1}} \newcommand{\doi}[1]{% \ifx\href\undefined doi:#1 \else \href{http://dx.doi.org/#1}{doi:#1} \fi} \newcommand{\email}[1]{\ifx\href\undefined {\em #1} \else \href{mailto:#1}{{\em #1}} \fi} \newcommand{\reporttitlepage}[1]{\customtitlepage{#1}{% \mbox{ } \vfill \begin{center} \sffamily\bfseries\LARGE\@title \end{center} \begin{center} {\sffamily\bfseries\large\@author}\\[2mm] \ifx\@empty\bioinf@affiliation \relax \else {\sffamily\normalsize\bioinf@affiliation} \end{center} \fi \vspace{1.5cm} \ifthenelse{\equal{}{\bioinf@abstract}}{% \relax }{% \centerline{\rule{15cm}{1pt}}\vspace{2mm} \centerline{\begin{minipage}[b]{15cm} \noindent{\bf Abstract --- } \bioinf@abstract \end{minipage}} \ifx\@empty\bioinf@keywords \vspace{-1.5mm}\centerline{\rule{15cm}{1pt}} \fi } \ifthenelse{\equal{}{\bioinf@keywords}}{% \relax }{% \ifx\@empty\bioinf@abstract \centerline{\rule{15cm}{1pt}}\vspace{2mm} \else \vspace{5mm} \fi \centerline{\begin{minipage}[b]{15cm} \noindent{\bf Key words --- } \bioinf@keywords \end{minipage}} \vspace{-1.5mm}\centerline{\rule{15cm}{1pt}} } \ifthenelse{\equal{}{\bioinf@citation}}{% \relax }{% \vspace{2cm} \centerline{\begin{minipage}[b]{15cm} \noindent{\bf Citation: } \bioinf@citation \end{minipage}} } \vfill}} \newcommand{\researchreporttitlepage}{\reporttitlepage{Research Report \bioinf@number}} \newcommand{\techreporttitlepage}{\reporttitlepage{Technical Report \bioinf@number}} \newcommand{\preprinttitlepage}{\reporttitlepage{Publication Preprint}{}} \newcommand{\reprinttitlepage}{\reporttitlepage{Publication Reprint}{}} \newcommand{\manualtitlepage}[1][]{\customtitlepage{Software Manual}{% \mbox{ } \vfill \begin{center} \sffamily\bfseries\LARGE\@title \end{center} \ifthenelse{\equal{\@author}{}}{}{\begin{center} {\sffamily\bfseries\large\@author}\\[2mm] \ifx\@empty\bioinf@affiliation \relax \else {\sffamily\normalsize\bioinf@affiliation} \end{center} \fi} \vspace{1cm} \begin{center} {\Large\sffamily\bfseries #1} \end{center} \vfill \mbox{ }}} \newcommand{\lecturenotestitlepage}[1][]{\customtitlepage{Lecture Notes}{% \ifthenelse{\equal{#1}{}}{% \vspace*{2cm} \begin{center} \sffamily\bfseries\huge \@title \end{center} \vspace{2cm} \begin{center} \sffamily\bfseries\Large \@author \end{center} \vfill \mbox{ }}{% {\LARGE\sffamily\bfseries\mbox{ } \vfill \begin{center} #1 \end{center} \vfill \vfill \mbox{ }}}}} \newcommand{\copyrightpage}[1][]{% \clearpage \mbox{ } \vfill \vfill \noindent{\large \textcircled{c} \ifthenelse{\equal{#1}{}}{% \@author}{% #1}}\\[7mm] \noindent \BIOINFCopyrightNotice\thispagestyle{empty} \vfill \mbox{ } \clearpage} \newcommand{\BIOINFCopyrightNotice}{This material, no matter whether in printed or electronic form, may be used for personal and educational use only. Any reproduction of this manuscript, no matter whether as a whole or in parts, no matter whether in printed or in electronic form, requires explicit prior acceptance of the author.} \endinput % % end of scch-tr.cls % apcluster/vignettes/bioinf-article.txi0000755000176200001440000000357114170223535017714 0ustar liggesusers\def\ps@headings{% \let\@oddfoot\@empty\let\@evenfoot\@empty \def\@evenhead{\underline{\makebox[\textwidth][l]{% \sffamily\thepage\hfill\leftmark}}}% \def\@oddhead{\underline{\makebox[\textwidth][l]{% \sffamily\rightmark\hfill\thepage}}}% \let\@mkboth\markboth \def\sectionmark##1{% \markboth { \ifnum \c@secnumdepth >\z@ \thesection\quad \fi ##1}{ \ifnum \c@secnumdepth >\z@ \thesection\quad \fi ##1}}% \def\subsectionmark##1{}} \renewenvironment{abstract}{\section*{\abstractname}% \@mkboth{\abstractname}{\abstractname}}{} \newenvironment{acknowledgments}{\section*{Acknowledgments}% \@mkboth{Acknowledgments}{Acknowledgments}}{} \renewcommand\tableofcontents{% \section*{\contentsname \@mkboth{\contentsname}{\contentsname}}% \@starttoc{toc}% } \renewcommand\listoffigures{% \section*{\listfigurename}% \@mkboth{\listfigurename}% {\listfigurename}% \@starttoc{lof}% } \renewcommand\listoftables{% \section*{\listtablename}% \@mkboth{\listtablename}% {\listtablename}% \@starttoc{lot}% } \renewenvironment{thebibliography}[1] {\section*{\refname}% \@mkboth{\refname}{\refname}% \list{\@biblabel{\@arabic\c@enumiv}}% {\settowidth\labelwidth{\@biblabel{#1}}% \leftmargin\labelwidth \advance\leftmargin\labelsep \@openbib@code \usecounter{enumiv}% \let\p@enumiv\@empty \renewcommand\theenumiv{\@arabic\c@enumiv}}% \sloppy \clubpenalty4000 \@clubpenalty \clubpenalty \widowpenalty4000% \sfcode`\.\@m} {\def\@noitemerr {\@latex@warning{Empty `thebibliography' environment}}% \endlist} \endinput apcluster/R/0000755000176200001440000000000014170235575012466 5ustar liggesusersapcluster/R/AllGenerics.R0000644000176200001440000000166614170223535015003 0ustar liggesuserssetGeneric(name="apcluster", def=function(s, x, ...) standardGeneric("apcluster")) setGeneric(name="apclusterL", def=function(s, x, ...) standardGeneric("apclusterL")) setGeneric(name="apclusterK", def=function(s, x, ...) standardGeneric("apclusterK")) setGeneric(name="aggExCluster", def=function(s, x, ...) standardGeneric("aggExCluster")) setGeneric(name="heatmap", def=function(x, y, ...) standardGeneric("heatmap")) setGeneric(name="similarity", def=function(x, ...) standardGeneric("similarity")) setGeneric(name="preferenceRange", def=function(s, ...) standardGeneric("preferenceRange")) setGeneric(name="as.SparseSimilarityMatrix", def=function(s, ...) standardGeneric("as.SparseSimilarityMatrix")) setGeneric(name="as.DenseSimilarityMatrix", def=function(s, ...) standardGeneric("as.DenseSimilarityMatrix")) apcluster/R/revDend.R0000644000176200001440000000222614170223535014173 0ustar liggesusersmidDend.local <- function (x) if (is.null(mp <- attr(x, "midpoint"))) 0 else mp memberDend.local <- function (x) if (is.null(r <- attr(x, "members"))) 1 else r isLeaf.local <- function (x) (is.logical(L <- attr(x, "leaf"))) && L midCacheDend.local <- function (x) { stopifnot(inherits(x, "dendrogram")) setmid <- function(d) { if (isLeaf.local(d)) return(d) k <- length(d) if (k < 1) stop("dendrogram node with non-positive #{branches}") r <- d midS <- 0 for (j in 1:k) { r[[j]] <- unclass(setmid(d[[j]])) midS <- midS + midDend.local(r[[j]]) } if (k == 2) attr(r, "midpoint") <- (memberDend.local(d[[1]]) + midS) / 2 else attr(r, "midpoint") <- midDend.local(d) r } setmid(x) } revDend.local <- function (x) { if (isLeaf.local(x)) return(x) k <- length(x) if (k < 1) stop("dendrogram non-leaf node with non-positive #{branches}") r <- x for (j in 1:k) r[[j]] <- revDend.local(x[[k + 1 - j]]) midCacheDend.local(r) } apcluster/R/AllClasses.R0000644000176200001440000000466114170223535014637 0ustar liggesusers# S4 class definition for exemplar-based clustering setClass("ExClust", representation = representation ( l = "numeric", sel = "numeric", exemplars = "numeric", clusters = "list", idx = "numeric", sim = "mMatrix", call = "character" ), prototype = prototype ( l = 0, sel = numeric(0), exemplars = numeric(0), clusters = list(), idx = numeric(0), sim = matrix(nrow=0, ncol=0), call = character(0) ) ) # S4 class definition for the result object of affinity propagation clustering setClass("APResult", representation = representation ( sweeps = "numeric", it = "numeric", p = "numeric", netsim = "numeric", dpsim = "numeric", expref = "numeric", netsimLev = "numeric", netsimAll = "numeric", dpsimAll = "numeric", exprefAll = "numeric", idxAll = "matrix" ), prototype = prototype ( sweeps = 0, it = 0, p = 0, netsim = NaN, dpsim = NaN, expref = NaN, netsimLev = numeric(0), netsimAll = NaN, dpsimAll = NaN, exprefAll = NaN, idxAll = matrix(nrow=0, ncol=0) ), contains = "ExClust" ) # S4 class definition for the result object of the aggExCluster algorithm setClass("AggExResult", representation = representation ( l = "numeric", sel = "numeric", maxNoClusters = "numeric", clusters = "list", exemplars = "list", merge = "matrix", height = "numeric", order = "numeric", labels = "character", sim = "matrix", call = "character" ), prototype = prototype ( l = 0, sel = numeric(0), maxNoClusters = 0, clusters = list(), exemplars = list(), merge = matrix(NA, 1, 1), height = numeric(0), order = numeric(0), labels = c(), sim = matrix(NA, 1, 1), call = character(0) ) ) apcluster/R/conversions.R0000644000176200001440000000767114170235575015174 0ustar liggesusersas.SparseSimilarityMatrix.matrix <- function(s, lower=-Inf) { if (!is(s, "matrix")) { s <- try(as(s, "matrix")) if (class(s) == "try-error") stop("cannot cast 's' (class '", class(s), "') to class 'matrix'") } if (nrow(s) != ncol(s) && ncol(s) != 3) stop("matrix 's' must be quadratic or have 3 columns") if (nrow(s) == ncol(s)) { sel <- which(s > lower, arr.ind=TRUE) remElem <- which(sel[, 1] == sel[, 2]) if (length(remElem) > 0) sel <- sel[-remElem, , drop=FALSE] if (nrow(sel) == 0) S <- new("dgTMatrix", Dim=dim(s)) else S <- new("dgTMatrix", Dim=dim(s), i=as.integer(sel[, 1] - 1), j=as.integer(sel[, 2] - 1), x=s[sel]) } else { if (min(s[, 1:2]) <= 0) stop("indices in 's' must be >= 1") if (any(s[, 1:2] != floor(s[, 1:2]))) stop("indices in 's' must be natural numbers") remElem <- which(s[, 1] == s[, 2] | s[, 3] <= lower) if (length(remElem) > 0) s <- s[-remElem, , drop=FALSE] if (nrow(s) == 0) S <- new("dgTMatrix", Dim=as.integer(c(0, 0))) else { N <- max(s[, 1:2]) S <- new("dgTMatrix", Dim=as.integer(c(N, N)), i=as.integer(s[, 1] - 1), j=as.integer(s[, 2] - 1), x=s[, 3]) } } S } setMethod("as.SparseSimilarityMatrix", signature(s="matrix"), as.SparseSimilarityMatrix.matrix) setMethod("as.SparseSimilarityMatrix", signature(s="Matrix"), as.SparseSimilarityMatrix.matrix) as.SparseSimilarityMatrix.sparseMatrix <- function(s, lower=-Inf) { if (nrow(s) != ncol(s)) stop("argument 's' must be quadratic similarity matrix") if (!is(s, "dgTMatrix")) { s <- try(as(as(s, "TsparseMatrix"), "dgTMatrix")) if (class(s) == "try-error") stop("cannot cast 's' (class '", class(s), "') to class 'dgTMatrix'") } remElem <- which(s@i == s@j | s@x <= lower) if (length(remElem) > 0) { s@i <- s@i[-remElem] s@j <- s@j[-remElem] s@x <- s@x[-remElem] } s } setMethod("as.SparseSimilarityMatrix", signature(s="sparseMatrix"), as.SparseSimilarityMatrix.sparseMatrix) as.DenseSimilarityMatrix.matrix <- function(s, fill=-Inf) { if (!is(s, "matrix")) { s <- try(as(s, "matrix")) if (class(s) == "try-error") stop("cannot cast 's' (class '", class(s), "') to class 'matrix'") } if (ncol(s) != 3) stop("'s' must be a matrix with 3 columns") if (min(s[, 1:2]) <= 0) stop("indices in 's' must be >= 1") if (any(s[, 1:2] != floor(s[, 1:2]))) stop("indices in 's' must be natural numbers") N <- max(s[, 1:2]) S <- matrix(fill, N, N) S[s[, 1] + N * (s[, 2] - 1)] <- s[, 3] S } setMethod("as.DenseSimilarityMatrix", signature(s="matrix"), as.DenseSimilarityMatrix.matrix) setMethod("as.DenseSimilarityMatrix", signature(s="Matrix"), as.DenseSimilarityMatrix.matrix) as.DenseSimilarityMatrix.sparseMatrix <- function(s, fill=-Inf) { if (nrow(s) != ncol(s)) stop("argument 's' must be quadratic similarity matrix") if (!is(s, "dgTMatrix")) { s <- try(as(as(s, "TsparseMatrix"), "dgTMatrix")) if (class(s) == "try-error") stop("cannot cast 's' (class '", class(s), "') to class 'dgTMatrix'") } N <- nrow(s) S <- matrix(fill, N, N) S[(s@i + 1) + N * s@j] <- s@x S } setMethod("as.DenseSimilarityMatrix", signature(s="sparseMatrix"), as.DenseSimilarityMatrix.sparseMatrix) apcluster/R/apclusterL-methods.R0000644000176200001440000002337314170223535016371 0ustar liggesusersapclusterL.matrix <- function(s, x, sel, p=NA, q=NA, maxits=1000, convits=100, lam=0.9, nonoise=FALSE, seed=NA) { M <- ncol(s) N <- nrow(s) if (!is.na(seed)) set.seed(seed) if (!is.na(p[1]) && (!is.numeric(p) || !is.vector(p))) stop("'p' must be a number or vector") if (length(p) > 1) { if (length(p) < N) stop("vector 'p' is shorter than number of samples") else if (length(p) > N) p <- p[1:N] # truncate unnecessarily long p } if (any(is.na(p)) && !is.na(q) && !is.numeric(q)) stop("'q' must be a number") if (lam > 0.9) warning("large damping factor in use; the algorithm\n", "will change decisions slowly, so consider using\n", "a larger value of 'convits'.") # If argument p is not given, p is set to median of s if (any(is.na(p))) { ## workaround for overloaded accessor in 'kebabs' package if (is(s, "KernelMatrix")) { if (is.na(q)) p <- median(as.vector(s)[setdiff(which(s > -Inf), (1:M - 1) * N + sel)]) else p <- quantile(as.vector(s)[setdiff(which(s > -Inf), (1:M - 1) * N + sel)], q) } else { if (is.na(q)) p <- median(s[setdiff(which(s > -Inf), (1:M - 1) * N + sel)]) else p <- quantile(s[setdiff(which(s > -Inf), (1:M - 1) * N + sel)], q) } } attributes(p) <- NULL apresultObj <- new("APResult") # create the result object to be returned # store p into result object for future reference apresultObj@p <- p if (length(p) == 1) p <- rep(p, N) apresultObj@l <- N apresultObj@sel <- sel # In case user did not remove degeneracies from the input similarities, # avoid degenerate solutions by adding a small amount of noise to the # input similarities if (!nonoise) { randomMat <- matrix(rnorm(N * M), N, M) s <- s + (.Machine$double.eps * s + .Machine$double.xmin * 100) * randomMat } # Append preferences as additional column to s s <- cbind(s, p) # replace -Inf (for numerical stability) and NA with -realmax infelem <- which(s < -.Machine$double.xmax | is.na(s)) if (length(infelem) > 0) s[infelem] <- -.Machine$double.xmax infelem <- which(s > .Machine$double.xmax) if (length(infelem) > 0) stop("+Inf similarities detected: change to a large positive value,", " but smaller than ", .Machine$double.xmax) res <- .Call("apclusterLeveragedC", s, as.integer(sel - 1), as.integer(maxits), as.integer(convits), as.double(lam)) K <- res$K # convert cluster center indices to R i <- res$it if (K > 0) { i <- i + 1 I <- res$I[1:K] + 1 I <- I[I %in% sel] ee <- which(sel %in% I) K <- length(ee) if (K < 1) stop("internal error: no exemplars in selected samples") c <- rep(NA, N) c[I] <- 1:K nonI <- setdiff(1:N, I) c[nonI] <- sapply(nonI, function(ii) which.max(s[ii, ee])) c[is.na(c)] <- 0 # R inserts NAs by default, so replace them with 0s # to get the same result as the Matlab code # Refine the final set of exemplars and clusters and return results for (k in 1:K) { jj <- which(c == k) ii <- which(sel %in% jj) ns <- s[jj, M + 1] ind <- match(sel[ii], jj) ns[ind] <- colSums(s[jj, ii, drop=FALSE]) + s[sel[ii], M + 1] - diag(s[sel[ii], ii, drop=FALSE]) I[k] <- jj[ind[which.max(ns[ind])]] } I <- sort(I) if (length(rownames(s)) > 0) names(I) <- rownames(s)[I] nonI <- setdiff(1:N, I) ee <- which(sel %in% I) c <- rep(NA, N) c[I] <- 1:K nonI <- setdiff(1:N, I) c[nonI] <- sapply(nonI, function(ii) which.max(s[ii, ee])) c[is.na(c)] <- 0 # R inserts NAs by default, so replace them with 0s # to get the same result as the Matlab code tmpidx <- I[c] # Self similarities not relevant tmpdpsim <- sum(s[sub2ind(N, nonI, match(tmpidx[nonI], sel))]) tmpexpref <- sum(s[I, M + 1]) tmpnetsim <- tmpdpsim + tmpexpref apresultObj@exemplars <- I apresultObj@clusters <- list() for (c in 1:length(apresultObj@exemplars)) apresultObj@clusters[[c]] <- which(tmpidx == apresultObj@exemplars[c]) if (length(rownames(s)) == N) { names(apresultObj@exemplars) <- rownames(s)[apresultObj@exemplars] for (c in 1:length(apresultObj@exemplars)) names(apresultObj@clusters[[c]]) <- rownames(s)[apresultObj@clusters[[c]]] } } else { tmpidx <- rep(NaN, N) tmpnetsim <- NaN tmpdpsim <- NaN tmpexpref <- NaN apresultObj@exemplars <- numeric(0) apresultObj@clusters <- list() } apresultObj@netsim <- tmpnetsim apresultObj@dpsim <- tmpdpsim apresultObj@expref <- tmpexpref apresultObj@idx <- tmpidx apresultObj@it <- i if (res$unconv) warning("algorithm did not converge; turn on details\n", "and call plot() to monitor net similarity. Consider\n", "increasing 'maxits' and 'convits', and, ", "if oscillations occur,\n", "also increasing damping factor 'lam'.") apresultObj } setMethod("apclusterL", signature(s="matrix", x="missing"), function(s, x, sel, p=NA, q=NA, maxits=1000, convits=100, lam=0.9, includeSim=FALSE, nonoise=FALSE, seed=NA) { M <- ncol(s) N <- nrow(s) if (M > N) stop("no. of columns of 's' may not be larger than ", "number of rows") if (!is.vector(sel) || !is.numeric(sel) || any(round(sel) != sel)) stop("'sel' must be a numeric vector of whole numbers") if (length(sel) != M) stop("vector 'sel' is shorter or longer than number of ", "selected samples") if (max(sel) > N || min(sel) < 1) stop("sample index in 'sel' must be between one and ", "number of samples") if (length(unique(sel)) != length(sel) || is.unsorted(sel)) stop("'sel' must be in strictly increasing order") apresultObj <- apclusterL.matrix(s=s, sel=sel, p=p, q=q, maxits=1000, convits=convits, lam=lam, nonoise=nonoise, seed=seed) apresultObj@call <- deparse(sys.call(-1)) if (includeSim) apresultObj@sim <- s apresultObj }) apclusterL.function <- function(s, x, frac, sweeps, p=NA, q=NA, maxits=1000, convits=100, lam=0.9, includeSim=TRUE, nonoise=FALSE, seed=NA, ...) { if (frac <= 0 || frac > 1) stop("invalid fraction of samples specified") if (!is.na(seed)) set.seed(seed) if (is.data.frame(x)) x <- as.matrix(x[, sapply(x, is.numeric)]) if (is.matrix(x)) N <- nrow(x) else N <- length(x) if (N < 2) stop("cannot cluster less than 2 samples") nsel <- max(ceiling(N * frac), 2) sel <- sort(sample(1:N, nsel)) if (!is.function(s)) { if (!is.character(s) || !exists(s, mode="function")) stop("invalid distance function") s <- match.fun(s) } apresultObj <- new("APResult") # create the result object to be returned apresultObj@netsim <- -Inf netsimL <- rep(-Inf, sweeps) for (i in 1:sweeps) { sim <- s(x=x, sel=sel, ...) if (!is.matrix(sim) || nrow(sim) != N || ncol(sim) != length(sel)) stop("computation of similarity matrix failed") apres <- apclusterL.matrix(s=sim, sel=sel, p=p, q=q, maxits=maxits, convits=convits, lam=lam, nonoise=nonoise) netsimL[i] <- apres@netsim if (apres@netsim > apresultObj@netsim || apresultObj@netsim == -Inf) { apresultObj <- apres if (includeSim) apresultObj@sim <- sim else apresultObj@sim <- matrix(nrow=0, ncol=0) } sel <- sort(unique(apresultObj@idx)) ## CHECK!!! if (nsel - length(sel) > 0) ## CHECK!!! { otherSamples <- setdiff(1:N, sel) sel <- sort(c(sel, sample(otherSamples, nsel - length(sel)))) if (length(rownames(sim)) > 0) names(sel) <- rownames(sim)[sel] } else break } apresultObj@call <- deparse(sys.call(-1)) apresultObj@sweeps <- sweeps apresultObj@netsimLev <- netsimL apresultObj } setMethod("apclusterL", signature(s="function" , x="ANY"), apclusterL.function) setMethod("apclusterL", signature(s="character", x="ANY"), apclusterL.function) apcluster/R/preferenceRange-methods.R0000644000176200001440000000343514170223535017343 0ustar liggesuserspreferenceRange.matrix <- function(s, exact=FALSE) { if (ncol(s) != nrow(s)) stop("'s' must be a square matrix") diag(s) <- 0 if (length(which(s == -Inf)) > 0) warning("similarity matrix 's' contains -Inf similarities; ", "lower bound may not correspond to 1 or 2 clusters") .Call("preferenceRangeC", s, as.logical(exact)[1], PACKAGE="apcluster") } setMethod("preferenceRange", signature(s="matrix"), preferenceRange.matrix) preferenceRange.dgTMatrix <- function(s, exact=FALSE) { if (ncol(s) != nrow(s)) stop("'s' must be a square matrix") ## remove diagonal elements and -Inf from s remElem <- which(s@i == s@j | s@x == -Inf) if (length(remElem) > 0) { s@i <- s@i[-remElem] s@j <- s@j[-remElem] s@x <- s@x[-remElem] } .Call("preferenceRangeSparseC", s@i, s@j, s@x, nrow(s), as.logical(exact)[1], PACKAGE="apcluster") } setMethod("preferenceRange", signature(s="dgTMatrix"), preferenceRange.dgTMatrix) preferenceRange.otherSparse <- function(s, exact=FALSE) { s <- try(as(as(s, "TsparseMatrix"), "dgTMatrix")) if (class(s) == "try-error") stop("cannot cast 's' (class '", class(s), "') to class 'dgTMatrix'") preferenceRange.dgTMatrix(s=s, exact=exact) } setMethod("preferenceRange", signature(s="sparseMatrix"), preferenceRange.otherSparse) preferenceRange.otherDense <- function(s, exact=FALSE) { s <- try(as(s, "matrix")) if (class(s) == "try-error") stop("cannot cast 's' (class '", class(s), "') to class 'matrix'") preferenceRange.matrix(s=s, exact=exact) } setMethod("preferenceRange", signature(s="Matrix"), preferenceRange.otherDense) apcluster/R/plot-methods.R0000644000176200001440000002145114170223535015224 0ustar liggesusers# Plot graph(s) with objective values (works only if details were switched on) setMethod("plot", signature(x="APResult", y="missing"), function(x, y, type=c("netsim", "dpsim", "expref"), xlab="# Iterations", ylab="Similarity", ...) { if (length(x@netsimAll) <= 1) stop("no valid data was found for plotting; call apcluster() ", "with 'details=TRUE' in order to compute convergence details") plotnetsim <- FALSE plotexpref <- FALSE plotdpsim <- FALSE legtxt <- c() legcol <- c() ymin <- .Machine$double.xmax ymax <- -.Machine$double.xmax if (is.element("netsim", type)) { tmp <- x@netsimAll[which(!is.nan(x@netsimAll))] if (length(tmp) > 0) { ymin <- min(tmp, ymin, na.rm=TRUE) if (ymin == -Inf) ymin <- -.Machine$double.xmax ymax <- max(tmp, ymax, na.rm=TRUE) if (ymax == Inf) ymax <- .Machine$double.xmax plotnetsim <- TRUE legtxt <- c(legtxt, "Fitness (overall net similarity)") legcol <- c(legcol, "red") } } if (is.element("expref", type)) { tmp <- x@exprefAll[which(!is.nan(x@exprefAll))] if (length(tmp) > 0) { ymin <- min(tmp, ymin, na.rm=TRUE) if (ymin == -Inf) ymin <- -.Machine$double.xmax ymax <- max(tmp, ymax, na.rm=TRUE) if (ymax == Inf) ymax <- .Machine$double.xmax plotexpref <- TRUE legtxt <- c(legtxt, "Sum of exemplar preferences") legcol <- c(legcol, "green") } } if (is.element("dpsim", type)) { tmp <- x@dpsimAll[which(!is.nan(x@dpsimAll))] if (length(tmp) > 0) { ymin <- min(tmp, ymin, na.rm=TRUE) if (ymin == -Inf) ymin <- -.Machine$double.xmax ymax <- max(tmp, ymax, na.rm=TRUE) if (ymax == Inf) ymax <- .Machine$double.xmax plotdpsim <- TRUE legtxt <- c(legtxt, "Sum of similarities to exemplars") legcol <- c(legcol, "blue") } } if (length(legtxt) > 0) { plot(x=NULL, y=NULL, xlim=c(0, x@it + 1), ylim=c(ymin, ymax), xlab=xlab, ylab=ylab, ...) if (plotnetsim) lines(x@netsimAll, col="red") if (plotexpref) lines(x@exprefAll, col="green") if (plotdpsim) lines(x@dpsimAll, col="blue") legend(x="bottomright", legend=legtxt, col=legcol, lwd=1) } else stop("no valid data was found for plotting; call apcluster() ", "with 'details=TRUE' in order to compute convergence details") } ) setMethod("plot", signature(x="ExClust", y="matrix"), function(x, y, connect=TRUE, xlab="", ylab="", labels=NA, limitNo=15, ...) { if (x@l != nrow(y)) stop("size of clustering result does not fit to size of data set") if (ncol(y) < 2) stop("cannot plot 1D data set") if (ncol(y) == 2) { xlim <- c(min(y[,1]), max(y[,1])) ylim <- c(min(y[,2]), max(y[,2])) plot(x=NULL, y=NULL, xlim=xlim, ylim=ylim, xlab=xlab, ylab=ylab, ...) num <- length(x@exemplars) if (num <= 0) { warning("no exemplars defined in clustering result; plotting ", "data set as it is.") points(y, col="black", pch=19, cex=0.8) } else { cols <- rainbow(num)[labels(x, type="enum")] points(y, col=cols, pch=19, cex=0.8) if (connect) segments(x0=y[, 1], y0=y[, 2], x1=y[x@idx, 1, drop=FALSE], y1=y[x@idx, 2, drop=FALSE], col=cols) points(y[x@exemplars, , drop=FALSE], col="black", type="p", pch=22, cex=1.5) } } else { if (is.numeric(limitNo) && ncol(y) > limitNo) stop("cannot plot more than ", limitNo, " features at once") res <- x num <- length(res@exemplars) if (num <= 0) { warning("no exemplars defined in clustering result; plotting ", "data set as it is.") clustCol <- "black" connect <- FALSE } else clustCol <- rainbow(length(res@exemplars))[labels(x, type="enum")] clustPanel <- function(x, y, ...) { points(x, y, col=clustCol, pch=19, cex=0.8) if (connect) segments(x0=x, y0=y, x1=x[res@idx], y1=y[res@idx], col=clustCol) if (num > 0) points(x[res@exemplars], y[res@exemplars], col="black", type="p", pch=22, cex=1.5) } if (any(is.na(labels))) { yname <- deparse(substitute(y, env = parent.frame())) if (length(colnames(y)) > 0) labels <- colnames(y) else labels <- paste(yname, "[, ", 1:ncol(y), "]", sep="") } pairs(y, labels, lower.panel=clustPanel, upper.panel=clustPanel, ...) } } ) # Plot clustering result along with data set setMethod("plot", signature(x="ExClust", y="data.frame"), function(x, y, connect=TRUE, xlab="", ylab="", labels=NA, limitNo=15, ...) { sel <- which(sapply(y, is.numeric)) if (length(sel) < 2) stop("cannot plot 1D data set") if (any(is.na(labels))) { yname <- deparse(substitute(y, env = parent.frame())) if (length(colnames(y)) > 0) labels <- colnames(y)[sel] else labels <- paste(yname, "[, ", sel, "]", sep="") } plot(x, as.matrix(y[, sel, drop=FALSE]), connect, xlab, ylab, labels, limitNo=limitNo, ...) } ) # Plot clustering result setMethod("plot", signature(x="AggExResult", y="missing"), function(x, y, main="Cluster dendrogram", xlab="", ylab="", ticks=4, digits=2, base=0.05, showSamples=FALSE, horiz=FALSE, ...) { if (x@maxNoClusters < 2) stop("cannot plot dendrogram with less than 2 clusters") if (showSamples) dend <- as.dendrogram(x, base=base) else dend <- as.dendrogram(as.hclust(x, base=base)) plot(dend, axes=FALSE, xlab=xlab, ylab=ylab, main=main, horiz=horiz, ...) if (horiz) suppressWarnings( axis(side=1, at=seq(base, 1, length=ticks), tick=TRUE, labels=as.character(format(seq(max(x@height), min(x@height), length=ticks), digits=digits)), ...)) else suppressWarnings( axis(side=2, at=seq(base, 1, length=ticks), tick=TRUE, labels=as.character(format(seq(max(x@height), min(x@height), length=ticks), digits=digits)), ...)) return(invisible(dend)) } ) # Plot clustering result along with data set setMethod("plot", signature(x="AggExResult", y="matrix"), function(x, y, k=NA, h=NA, ...) { if (x@l != nrow(y)) stop("size of clustering result does not fit to size of data set") if (is.na(k) || !is.numeric(k) || k > x@maxNoClusters) k <- x@maxNoClusters if (k< 1) k <- 1 excl <- cutree(x, k, h) plot(excl, y, ...) return(invisible(excl)) } ) # Plot clustering result along with data set setMethod("plot", signature(x="AggExResult", y="data.frame"), function(x, y, k=NA, h=NA, ...) { y <- as.matrix(y[, sapply(y, is.numeric)]) plot(x, y, k=k, h=h, ...) } ) apcluster/R/coerce-methods.R0000644000176200001440000001404714170223535015511 0ustar liggesuserssetMethod("as.hclust", signature("AggExResult"), function(x, base=0.05) { if (x@maxNoClusters < 2) stop("cannot create 'hclust' object with less than 2 objects") if (base < 0 || base >= 1) stop("'base' must be at least 0 and smaller than 1") mini <- min(x@height) maxi <- max(x@height) auxH <- x@height <- base + (1 - base) * (-x@height + maxi) / (maxi - mini) to <- list(merge=x@merge, height=auxH, labels=x@labels, order=x@order) class(to) <- "hclust" to }) setMethod("as.hclust", signature("ExClust"), function(x, base=0.05, ...) { if (all(dim(x@sim) <= 1)) stop("similarity matrix not included in object") as.hclust(aggExCluster(x@sim, x, ...)) }) setMethod("as.dendrogram", signature("AggExResult"), function(object, base=0.05, useNames=TRUE) { if (object@maxNoClusters < 2) stop("cannot create 'dendrogram' object with less than 2 objects") if (base < 0 || base >= 1) stop("'base' must be at least 0 and smaller than 1") obj <- as.hclust(object, base=base) z <- list() oHgt <- obj$height hMax <- oHgt[object@maxNoClusters] topLevel <- object@clusters[[object@maxNoClusters]] if (length(names(object@exemplars[[object@maxNoClusters]])) == 0 || !useNames) topLevel <- lapply(object@clusters[[object@maxNoClusters]], as.character) else topLevel <- lapply(object@clusters[[object@maxNoClusters]], names) for (k in 1:length(obj$height)) { x <- obj$merge[k, ] if (x[1] < 0) { if (length(topLevel[[-x[1]]]) == 1) { leftDend <- topLevel[[-x[1]]] attr(leftDend, "label") <- topLevel[[-x[1]]] attr(leftDend, "members") <- 1 attr(leftDend, "midpoint") <- 0 attr(leftDend, "height") <- 0 attr(leftDend, "leaf") <- TRUE } else { leftDend <- lapply(topLevel[[-x[1]]], function(elem) { attr(elem, "label") <- elem attr(elem, "members") <- 1 attr(elem, "height") <- 0 attr(elem, "leaf") <- TRUE elem }) attr(leftDend, "members") <- length(topLevel[[-x[1]]]) attr(leftDend, "height") <- base / 2 attr(leftDend, "midpoint") <- (length(topLevel[[-x[1]]]) - 1) / 2 } } else leftDend <- z[[as.character(x[1])]] if (x[2] < 0) { if (length(topLevel[[-x[2]]]) == 1) { rightDend <- topLevel[[-x[2]]] attr(rightDend, "label") <- topLevel[[-x[2]]] attr(rightDend, "members") <- 1 attr(rightDend, "midpoint") <- 0 attr(rightDend, "height") <- 0 attr(rightDend, "leaf") <- TRUE } else { rightDend <- lapply(topLevel[[-x[2]]], function(elem) { attr(elem, "label") <- elem attr(elem, "members") <- 1 attr(elem, "height") <- 0 attr(elem, "leaf") <- TRUE elem }) attr(rightDend, "members") <- length(topLevel[[-x[2]]]) attr(rightDend, "height") <- base / 2 attr(rightDend, "midpoint") <- (length(topLevel[[-x[2]]]) - 1) / 2 } } else rightDend <- z[[as.character(x[2])]] zk <- list(leftDend, rightDend) attr(zk, "height") <- obj$height[k] attr(zk, "members") <- attr(leftDend, "members") + attr(rightDend, "members") attr(zk, "midpoint") <- (attr(leftDend, "members") + attr(leftDend, "midpoint") + attr(rightDend, "midpoint")) / 2 z[[as.character(k)]] <- zk } z <- z[[as.character(k)]] class(z) <- "dendrogram" z }) setMethod("as.dendrogram", signature("ExClust"), function(object, base=0.05, useNames=TRUE, ...) { if (all(dim(object@sim) <= 1)) stop("similarity matrix not included in object") as.dendrogram(aggExCluster(object@sim, object, ...), base=base, useNames=useNames) }) apcluster/R/aggExCluster-methods.R0000644000176200001440000001417014170223535016643 0ustar liggesusersaggExCluster.matrix <- function(s, x, includeSim=FALSE) { noPriorClustering <- (missing(x) || is.null(x)) if (length(dim(s)) != 2 || (ncol(s) != nrow(s) && noPriorClustering)) stop("'s' must be a square matrix") AggResultObj <- new("AggExResult") K <- nrow(s) AggResultObj@l <- K preserveNames <- (length(rownames(s)) == nrow(s)) if (noPriorClustering) ## no prior clustering { AggResultObj@maxNoClusters <- K AggResultObj@clusters[[K]] <- as.list(1:K) AggResultObj@exemplars[[K]] <- 1:K if (preserveNames) { AggResultObj@labels <- rownames(s) names(AggResultObj@exemplars[[K]]) <- rownames(s) for (i in 1:K) names(AggResultObj@clusters[[K]][[i]]) <- rownames(s)[i] } else AggResultObj@labels <- as.character(1:K) } else ## prior clustering { if (x@l != nrow(s)) stop("data set sizes of 's' and 'x' do not match") AggResultObj@sel <- x@sel K <- length(x@exemplars) if (K < 1) stop("'x' empty or corrupted") AggResultObj@maxNoClusters <- K AggResultObj@clusters[[K]] <- x@clusters AggResultObj@exemplars[[K]] <- x@exemplars AggResultObj@labels <- paste("Cluster", 1:K) } if (K < 2) { warning("there is nothing to cluster") return(invisible(AggResultObj)) } objMat <- matrix(NA, K, K) ## matrix of objective values for pairs exeMat <- matrix(NA, K, K) ## matrix of joint exemplars ## note: only the upper triangle of these matrices is non-NA actClust <- AggResultObj@clusters[[K]] actExem <- AggResultObj@exemplars[[K]] actLabels <- -(1:K) AggResultObj@merge <- matrix(NA, K - 1, 2) AggResultObj@height <- rep(0, K - 1) res <- .Call("aggExClusterC", s, K, actClust, actExem, objMat, exeMat, actLabels, AggResultObj@sel, AggResultObj@clusters, AggResultObj@exemplars, AggResultObj@merge, AggResultObj@height, as.logical(preserveNames)[1]) if (is.element("error", names(res))) { if (res$error == 1) { stop("clusters cannot be joined because of missing ", "similarity values;\n maybe increasing the ", "cluster size through decreasing\n", " the self similarity 'p' helps.") } else if (res$error == 2) { stop("clusters cannot be joined because of missing ", "similarity values") } } exeMat <- res$exeMat objMat <- res$objMat AggResultObj@merge <- res$merge AggResultObj@height <- res$height AggResultObj@clusters <- res$clusters if (length(AggResultObj@sel) > 0) { colInd <- res$colInd } ## finally, determine reordering for dendrogram plotting AggResultObj@order <- determineOrder(AggResultObj@merge, AggResultObj@height, K - 1) AggResultObj@call <- deparse(sys.call(-1)) if (includeSim) AggResultObj@sim <- s AggResultObj } setMethod("aggExCluster", signature("matrix", "missing" ), aggExCluster.matrix) setMethod("aggExCluster", signature("matrix", "ExClust" ), aggExCluster.matrix) aggExCluster.Matrix <- function(s, x, includeSim=FALSE) { if (is(s, "sparseMatrix")) { s <- as.SparseSimilarityMatrix(s) rng <- range(s@x) fill <- 2 * rng[1] - rng[2] s <- as.DenseSimilarityMatrix(s, fill=fill) } else s <- as.DenseSimilarityMatrix(s) if (missing(x)) res <- aggExCluster(s, includeSim=includeSim) else res <- aggExCluster(s, x, includeSim=includeSim) res } setMethod("aggExCluster", signature("Matrix", "missing" ), aggExCluster.Matrix) setMethod("aggExCluster", signature("Matrix", "ExClust" ), aggExCluster.Matrix) aggExCluster.Clust <- function(s, x, includeSim=TRUE) { if (all(dim(x@sim) <= 1)) stop("similarity matrix not included in object") AggResultObj <- aggExCluster(x@sim, x) AggResultObj@call <- deparse(sys.call(-1)) if (includeSim) AggResultObj@sim <- x@sim AggResultObj } setMethod("aggExCluster", signature("missing" , "ExClust" ), aggExCluster.Clust) aggExCluster.function <- function(s, x, includeSim=TRUE, ...) { if (is.data.frame(x)) x <- as.matrix(x[, sapply(x, is.numeric)]) if (is.matrix(x)) N <- nrow(x) else N <- length(x) if (N < 2) stop("cannot cluster less than 2 samples") if (!is.function(s)) { if (!is.character(s) || !exists(s, mode="function")) stop("invalid distance function") s <- match.fun(s) } sim <- s(x=x, ...) if (!is.matrix(sim) || (nrow(sim) != N) || ncol(sim) != N) stop("computation of similarity matrix failed") AggResultObj <- aggExCluster(sim) AggResultObj@call <- deparse(sys.call(-1)) if (includeSim) AggResultObj@sim <- sim AggResultObj } setMethod("aggExCluster", signature("function" , "ANY"), aggExCluster.function) setMethod("aggExCluster", signature("character", "ANY"), aggExCluster.function) ## auxiliary function for determining the order for dendrogram plotting ## fills up order recursively starting from the last merge determineOrder <- function(merge, height, k) { I <- merge[k, 1] ## I and J are the clusters merged in the k-th step J <- merge[k, 2] if (I < 0 && J < 0) ## if both are singletons, list I first return(c(-I, -J)) else if (I < 0) ## if I is a singleton and J is not, list it first return(c(-I, determineOrder(merge, height, J))) else if (J < 0) ## if J is a singleton and I is not, list it first return(c(-J, determineOrder(merge, height, I))) else ## if both are non-singleton clusters, list the "tighter" cluster { ## on the left-hand side (see ?hclust) if (height[I] > height[J]) return(c(determineOrder(merge, height, I), determineOrder(merge, height, J))) else return(c(determineOrder(merge, height, J), determineOrder(merge, height, I))) } } apcluster/R/labels-methods.R0000644000176200001440000000137714170223535015515 0ustar liggesusers# convert clustering result to label vector setMethod("labels", signature(object="ExClust"), function(object, type="names") { if (type == "names") { if (length(names(object@idx)) == 0) stop("no names available, use other type") else out <- names(object@idx) } else if (type == "exemplars") out <- object@idx else if (type == "enum") { out <- array(dim=object@l) for (i in 1:length(object@exemplars)) out[which(object@idx == object@exemplars[i])] <- i } else stop("type '", type, "' unknown") attributes(out) <- NULL out } ) apcluster/R/show-methods.R0000644000176200001440000001037514170223535015231 0ustar liggesusers# Display clustering results setMethod("show", signature(object="APResult"), function(object) { cat("\nAPResult object\n") if (!is.finite(object@l) || !is.finite(object@it)) stop("object is not result of an affinity propagation run; ", "it is pointless to create 'APResult' objects yourself.") cat("\nNumber of samples = ", object@l, "\n") if (length(object@sel) > 0) { cat("Number of sel samples = ", length(object@sel), paste(" (", round(100*length(object@sel)/object@l,1), "%)\n", sep="")) cat("Number of sweeps = ", object@sweeps, "\n") } cat("Number of iterations = ", object@it, "\n") cat("Input preference = ", object@p, "\n") cat("Sum of similarities = ", object@dpsim, "\n") cat("Sum of preferences = ", object@expref, "\n") cat("Net similarity = ", object@netsim, "\n") cat("Number of clusters = ", length(object@exemplars), "\n\n") if (length(object@exemplars) > 0) { if (length(names(object@exemplars)) == 0) { cat("Exemplars:\n") cat(object@exemplars, fill=TRUE, labels=" ") cat("Clusters:\n") for (i in 1:length(object@exemplars)) { cat(" Cluster ", i, ", exemplar ", object@exemplars[i], ":\n", sep="") cat(object@clusters[[i]], fill=TRUE, labels=" ") } } else { cat("Exemplars:\n") cat(names(object@exemplars), fill=TRUE, labels=" ") cat("Clusters:\n") for (i in 1:length(object@exemplars)) { cat(" Cluster ", i, ", exemplar ", names(object@exemplars[i]), ":\n", sep="") cat(names(object@clusters[[i]]), fill=TRUE, labels=" ") } } } else { cat("No clusters identified.\n") } } ) setMethod("show", signature(object="ExClust"), function(object) { cat("\nExClust object\n") if (!is.finite(object@l)) stop("object is not result of an exemplar-based clustering; ", "it is pointless to create 'ExClust' objects yourself.") cat("\nNumber of samples = ", object@l, "\n") cat("Number of clusters = ", length(object@exemplars), "\n\n") if (length(object@exemplars) > 0) { if (length(names(object@exemplars)) == 0) { cat("Exemplars:\n") cat(object@exemplars, fill=TRUE, labels=" ") cat("Clusters:\n") for (i in 1:length(object@exemplars)) { cat(" Cluster ", i, ", exemplar ", object@exemplars[i], ":\n", sep="") cat(object@clusters[[i]], fill=TRUE, labels=" ") } } else { cat("Exemplars:\n") cat(names(object@exemplars), fill=TRUE, labels=" ") cat("Clusters:\n") for (i in 1:length(object@exemplars)) { cat(" Cluster ", i, ", exemplar ", names(object@exemplars[i]), ":\n", sep="") cat(names(object@clusters[[i]]), fill=TRUE, labels=" ") } } } else { cat("No clusters identified.\n") } } ) setMethod("show", signature(object="AggExResult"), function(object) { cat("\nAggExResult object\n") if (!is.finite(object@l) || !is.finite(object@maxNoClusters)) stop("object is not result of agglomerative clustering; ", "it is pointless to create 'AggExResult' objects yourself.") cat("\nNumber of samples = ", object@l, "\n") cat("Maximum number of clusters = ", object@maxNoClusters, "\n") } ) apcluster/R/apcluster-methods.R0000644000176200001440000003137714170223535016260 0ustar liggesusersapcluster.matrix <- function(s, x, p=NA, q=NA, maxits=1000, convits=100, lam=0.9, includeSim=FALSE, details=FALSE, nonoise=FALSE, seed=NA) { if (!is.na(seed)) set.seed(seed) apresultObj <- new("APResult") # create the result object to be returned apresultObj@call <- deparse(sys.call(-1)) # # check input data # if (!is.na(p[1]) && (!is.numeric(p) || !is.vector(p))) stop("'p' must be a number or vector") if (length(dim(s)) != 2 || ncol(s) != nrow(s)) stop("'s' must be a square matrix") N <- nrow(s) if (length(p) > 1) { if (length(p) < N) stop("vector 'p' is shorter than number of samples") else if (length(p) > N) p <- p[1:N] # truncate unnecessarily long p } if (any(is.na(p)) && !is.na(q) && !is.numeric(q)) stop("'q' must be a number") if (lam > 0.9) warning("large damping factor in use; turn on details\n", "and call plot() to monitor net similarity. The\n", "algorithm will change decisions slowly, so consider using\n", "a larger value of 'convits'.") # If argument p is not given, p is set to median of s if (any(is.na(p))) { if (is(s, "KernelMatrix")) { if (is.na(q)) p <- median(as.vector(s)[setdiff(which(s > -Inf), 0:(N - 1) * N + 1:N)]) else p <- quantile(as.vector(s)[setdiff(which(s > -Inf), 0:(N - 1) * N + 1:N)], q) } else { if (is.na(q)) p <- median(s[setdiff(which(s > -Inf), 0:(N - 1) * N + 1:N)]) else p <- quantile(s[setdiff(which(s > -Inf), 0:(N - 1) * N + 1:N)], q) } } apresultObj@l <- N # In case user did not remove degeneracies from the input similarities, # avoid degenerate solutions by adding a small amount of noise to the # input similarities if (!nonoise) { randomMat <- matrix(rnorm(N * N),N) s <- s + (.Machine$double.eps * s + .Machine$double.xmin * 100) * randomMat } attributes(p) <- NULL # Place preferences on the diagonal of s (recycled if p is scalar) diag(s) <- p # store p into result object for future reference apresultObj@p <- p # replace -Inf (for numerical stability) and NA with -realmax infelem <- which(s < -.Machine$double.xmax | is.na(s)) if (length(infelem) > 0) s[infelem] <- -.Machine$double.xmax infelem <- which(s > .Machine$double.xmax) if (length(infelem) > 0) stop("+Inf similarities detected: change to a large positive value,", " but smaller than ", .Machine$double.xmax) res <- .Call("apclusterC", s, as.integer(maxits), as.integer(convits), as.double(lam), as.logical(details), PACKAGE="apcluster") K <- res$K I <- res$I[1:K] + 1 i <- res$it if (details) { apresultObj@idxAll <- res$idxAll[,1:i] + 1 apresultObj@netsimAll <- res$netsimAll[1:i] apresultObj@dpsimAll <- res$dpsimAll[1:i] apresultObj@exprefAll <- res$exprefAll[1:i] } if (K > 0) { i <- i + 1 c <- max.col(s[, I], ties.method="first") c[I] <- 1:K # Identify clusters c[is.na(c)] <- 0 # R inserts NAs by default, so replace them with 0s # to get the same result as the Matlab code # Refine the final set of exemplars and clusters and return results for (k in 1:K) { ii <- which(c == k) I[k] <- ii[which.max(colSums(s[ii, ii, drop=FALSE]))] } names(I) <- colnames(s)[I] notI <- matrix(sort(setdiff(1:N, I)), ncol=1) c <- max.col(s[, I], ties.method="first") c[I] <- 1:K tmpidx <- I[c] tmpdpsim <- sum(s[sub2ind(N, notI, tmpidx[notI])]) tmpexpref <- sum(diag(s)[I]) tmpnetsim <- tmpdpsim + tmpexpref apresultObj@exemplars <- as.numeric(levels(factor(tmpidx))) apresultObj@clusters <- list() for (c in 1:length(apresultObj@exemplars)) apresultObj@clusters[[c]] <- which(tmpidx == apresultObj@exemplars[c]) if (length(colnames(s)) == N) { names(apresultObj@exemplars) <- colnames(s)[apresultObj@exemplars] for (c in 1:length(apresultObj@exemplars)) names(apresultObj@clusters[[c]]) <- colnames(s)[apresultObj@clusters[[c]]] } } else { tmpidx <- rep(NaN, N) tmpnetsim <- NaN tmpdpsim <- NaN tmpexpref <- NaN apresultObj@exemplars <- numeric(0) apresultObj@clusters <- list() } apresultObj@netsim <- tmpnetsim apresultObj@dpsim <- tmpdpsim apresultObj@expref <- tmpexpref apresultObj@idx <- tmpidx apresultObj@it <- i if (details) { apresultObj@netsimAll <- c(apresultObj@netsimAll, tmpnetsim) apresultObj@dpsimAll <- c(apresultObj@dpsimAll, tmpdpsim) apresultObj@exprefAll <- c(apresultObj@exprefAll, tmpexpref) apresultObj@idxAll <- cbind(apresultObj@idxAll, tmpidx) } if (res$unconv) warning("algorithm did not converge; turn on details\n", "and call plot() to monitor net similarity. Consider\n", "increasing 'maxits' and 'convits', and, ", "if oscillations occur\n", "also increasing damping factor 'lam'.") if (includeSim) apresultObj@sim <- s apresultObj } setMethod("apcluster", signature(s="matrix", x="missing"), apcluster.matrix) apcluster.function <- function(s, x, p=NA, q=NA, maxits=1000, convits=100, lam=0.9, includeSim=TRUE, details=FALSE, nonoise=FALSE, seed=NA, ...) { if (!is.na(seed)) set.seed(seed) if (is.data.frame(x)) x <- as.matrix(x[, sapply(x, is.numeric)]) if (is.matrix(x)) N <- nrow(x) else N <- length(x) if (N < 2) stop("cannot cluster less than 2 samples") if (!is.function(s)) { if (!is.character(s) || !exists(s, mode="function")) stop("invalid distance function") s <- match.fun(s) } sim <- s(x=x, ...) if (!is(sim, "mMatrix") || (nrow(sim) != N) || ncol(sim) != N) stop("computation of similarity matrix failed") apres <- apcluster(s=sim, p=p, q=q, maxits=maxits, convits=convits, lam=lam, details=details, nonoise=nonoise) apres@call <- deparse(sys.call(-1)) if (includeSim) apres@sim <- sim apres } setMethod("apcluster", signature(s="function", x="ANY"), apcluster.function) setMethod("apcluster", signature(s="character", x="ANY"), apcluster.function) apcluster.dgTMatrix <- function(s, x, p=NA, q=NA, maxits=1000, convits=100, lam=0.9, includeSim=FALSE, details=FALSE, nonoise=FALSE, seed=NA) { if (!is.na(seed)) set.seed(seed) apresultObj <- new("APResult") # create the result object to be returned apresultObj@call <- deparse(sys.call(-1)) # check input data if (!is.na(p[1]) && (!is.numeric(p) || !is.vector(p))) stop("'p' must be a number or vector") if (length(dim(s)) != 2 || ncol(s) != nrow(s)) stop("'s' must be a square matrix") N <- nrow(s) if (length(p) > 1) { if (length(p) < N) stop("vector 'p' is shorter than number of samples") else if (length(p) > N) p <- p[1:N] # truncate unnecessarily long p } if (any(is.na(p)) && !is.na(q) && !is.numeric(q)) stop("'q' must be a number") if (lam > 0.9) warning("large damping factor in use; turn on details\n", "and call plot() to monitor net similarity. The\n", "algorithm will change decisions slowly, so consider using\n", "a larger value of 'convits'.") ## remove diagonal elements and -Inf from s remElem <- which(s@i == s@j | s@x == -Inf) if (length(remElem) > 0) { s@i <- s@i[-remElem] s@j <- s@j[-remElem] s@x <- s@x[-remElem] } # if argument p is not given, p is set to median of s if (any(is.na(p))) { if (is.na(q)) p <- median(s@x) else p <- quantile(s@x, q) } apresultObj@l <- N apresultObj@p <- p infelem <- which(s@x < -.Machine$double.xmax | is.na(s@x)) if (length(infelem) > 0) s@x[infelem] <- -.Machine$double.xmax infelem <- which(s@x > .Machine$double.xmax) if (length(infelem) > 0) stop("+Inf similarities detected: change to a large positive value,", " but smaller than ", .Machine$double.xmax) if (!nonoise) ## noise added to the vector with similarity { randomVec <- rnorm(length(s@x)) s@x <- s@x + (.Machine$double.eps * s@x + .Machine$double.xmin * 100) * randomVec } if (length(p) == 1) p <- rep(p, N) ## add preferences as diagonal elements si <- c(s@i, 0:(N - 1)) sj <- c(s@j, 0:(N - 1)) sx <- c(s@x, p) res <- .Call("apclusterSparseC", as.integer(si), as.integer(sj), as.double(sx), as.integer(maxits), as.integer(convits), as.double(lam), as.integer(N), as.logical(details)) K <- res$K I <- res$I[1:K] + 1 i <- res$it + 2 if (details) { apresultObj@idxAll <- res$idxAll[,1:i] + 1 apresultObj@netsimAll <- res$netsimAll[1:i] apresultObj@dpsimAll <- res$dpsimAll[1:i] apresultObj@exprefAll <- res$exprefAll[1:i] } if (K > 0) { tmpidx <- res$tmpidx + 1 tmpdpsim <- res$tmpdpsim tmpexpref <- res$tmpexpref tmpnetsim <- res$tmpnetsim apresultObj@exemplars <- I apresultObj@clusters <- list() names(I) <- colnames(s)[I] for (c in 1:length(apresultObj@exemplars)) apresultObj@clusters[[c]] <- which(tmpidx == apresultObj@exemplars[c]) if (length(colnames(s)) == N) { names(apresultObj@exemplars) <- colnames(s)[apresultObj@exemplars] for (c in 1:length(apresultObj@exemplars)) names(apresultObj@clusters[[c]]) <- colnames(s)[apresultObj@clusters[[c]]] } } else { tmpidx <- rep(NaN, N) tmpnetsim <- NaN tmpdpsim <- NaN tmpexpref <- NaN apresultObj@exemplars <- numeric(0) apresultObj@clusters <- list() } apresultObj@netsim <- tmpnetsim apresultObj@dpsim <- tmpdpsim apresultObj@expref <- tmpexpref apresultObj@idx <- tmpidx apresultObj@it <- i if (res$unconv) warning("algorithm did not converge; turn on details\n", "and call plot() to monitor net similarity. Consider\n", "increasing 'maxits' and 'convits', and, ", "if oscillations occur\n", "also increasing damping factor 'lam'.") if (includeSim) apresultObj@sim <- s apresultObj } setMethod("apcluster", signature(s="dgTMatrix", x="missing"), apcluster.dgTMatrix) apcluster.otherSparse <- function(s, x, ...) { s <- try(as(as(s, "TsparseMatrix"), "dgTMatrix")) if (class(s) == "try-error") stop("cannot cast 's' (class '", class(s), "') to class 'dgTMatrix'") apcluster.dgTMatrix(s=s, ...) } setMethod("apcluster", signature(s="sparseMatrix", x="missing"), apcluster.otherSparse) apcluster.otherDense <- function(s, x, ...) { s <- try(as(s, "matrix")) if (class(s) == "try-error") stop("cannot cast 's' (class '", class(s), "') to class 'matrix'") apcluster.matrix(s=s, ...) } setMethod("apcluster", signature(s="Matrix", x="missing"), apcluster.otherDense) # Linear index from multiple subscripts. # sub2ind is used to determine the equivalent single index # corresponding to a given set of subscript values. sub2ind <- function(N, I, J) (I + (N * (J - 1))) apcluster/R/length-methods.R0000644000176200001440000000035214170223535015524 0ustar liggesuserssetMethod("length", signature(x="APResult"), function(x) length(x@exemplars)) setMethod("length", signature(x="AggExResult"), function(x) x@maxNoClusters) setMethod("length", signature(x="ExClust"), function(x) length(x@exemplars)) apcluster/R/cutree-methods.R0000644000176200001440000000401314170223535015530 0ustar liggesuserssetMethod("cutree", signature(tree="AggExResult", k="ANY", h="ANY"), function(tree, k, h) { outObj <- new("ExClust") if (!missing(k)) { if (!is.finite(k) || floor(k) != ceiling(k)) stop("'k' is not an integer number") else if (k < 1) stop("'k' smaller than 1 does not make sense") else if (k > tree@maxNoClusters) stop("'k' exceeds maximum number of clusters") } else if (!missing(h)) { if (!is.finite(h)) stop("'h' must be numeric") else if (h < min(tree@height) || h > max(tree@height)) stop("'h' exceeds range of values in 'AggExResult' object", "\nthe range is from ", max(tree@height), " (=> 1 cluster) to ", min(tree@height), " (=> ", tree@maxNoClusters, "clusters)") else k <- max(which(tree@height >= h)) } else if (missing(k)) stop("provide either 'k' or 'h'") outObj@l <- tree@l outObj@exemplars <- tree@exemplars[[k]] outObj@clusters <- tree@clusters[[k]] outObj@idx <- rep(0, outObj@l) for (i in 1:length(outObj@clusters)) { outObj@idx[outObj@clusters[[i]]] <- outObj@exemplars[i] if (length(names(outObj@clusters[[i]])) > 0) names(outObj@idx)[outObj@clusters[[i]]] <- names(outObj@exemplars)[i] } outObj@sim <- tree@sim outObj@call <- tree@call outObj } ) setMethod("cutree", signature(tree="APResult", k="ANY", h="ANY"), function(tree, k, h) { outObj <- new("ExClust") outObj@l <- tree@l outObj@exemplars <- tree@exemplars outObj@clusters <- tree@clusters outObj@idx <- tree@idx outObj@sim <- tree@sim outObj@call <- tree@call outObj } ) apcluster/R/apclusterK-methods.R0000644000176200001440000001354014170223535016363 0ustar liggesusersapclusterK.matrixOrDgT <- function(s, x, K, prc=10, bimaxit=20, exact=FALSE, maxits=1000, convits=100, lam=0.9, includeSim=FALSE, details=FALSE, nonoise=FALSE, seed=NA, verbose=TRUE) { if (!is.na(seed)) set.seed(seed) # # check input data # if (length(dim(s)) != 2 || ncol(s) != nrow(s)) stop("'s' must be a square matrix") N <- nrow(s) if (K < 2 || K >= N) stop("number of data samples is ", N, ".\n", "\tmeaningful range for K: 2 to ", N - 1) pminmax <- preferenceRange(s, exact) lopref <- pminmax[1] hipref <- pminmax[2] lok <- 1 hik <- N if (is.na(lopref) || is.nan(lopref) || is.infinite(lopref)) stop("could not determine lower bound for preference") else if (lopref >= hipref) stop("preferenceRange() yielded invalid result: lower bound larger ", "than upper bound") # In case user did not remove degeneracies from the input similarities, # avoid degenerate solutions by adding a small amount of noise to the # input similarities; we do this here before running apcluster() in order # to have deterministic behavior during bisection if (!nonoise) { if (is(s, "matrix")) s <- s + ((.Machine$double.eps * s + .Machine$double.xmin * 100) * matrix(rnorm(N * N), N, N)) else if (is(s, "dgTMatrix")) s@x <- s@x + ((.Machine$double.eps * s@x + .Machine$double.xmin * 100) * rnorm(length(s@x))) } # try to guess better lower bound before starting with bisection ex <- -3 dn <- FALSE while (!dn) { tmppref <- hipref - 10^ex * (hipref - lopref) if (verbose) cat("Trying p =", tmppref, "\n") apresultObj <- apcluster(s, p=tmppref, nonoise=TRUE) tmpk <- length(apresultObj) if (verbose) cat(" Number of clusters:", tmpk, "\n"); if (tmpk < K && tmpk > 0) { lok <- tmpk lopref <- tmppref dn <- TRUE } else if (ex == -1) dn <- TRUE else ex <- ex + 1 } # now do bisection (if still necessary) ntries <- 0 while ((abs(tmpk - K) * 100 / K) > prc && ntries < bimaxit) { ntries <- ntries + 1 tmppref <- (lopref + hipref) / 2 if (verbose) cat("Trying p =", tmppref, "(bisection step no.", ntries, ")\n") apresultObj <- apcluster(s, p=tmppref, nonoise=TRUE, maxits=maxits, convits=convits, lam=lam, details=details) tmpk <- length(apresultObj@exemplars) if (verbose) cat(" Number of clusters:", tmpk, "\n"); if (K > tmpk) { lopref <- tmppref lok <- tmpk } else { hipref <- tmppref hik <- tmpk } } if (verbose) cat("\nNumber of clusters:", tmpk, "for p =", tmppref, "\n") if ((abs(tmpk - K) * 100 / K) > prc) warning("number of clusters not in desired range; Increase 'bimaxit'", " to improve accuracy of bisection.") apresultObj@call <- deparse(sys.call(-1)) if (includeSim) apresultObj@sim <- s apresultObj } setMethod("apclusterK", signature(s="matrix", x="missing"), apclusterK.matrixOrDgT) setMethod("apclusterK", signature(s="dgTMatrix", x="missing"), apclusterK.matrixOrDgT) apclusterK.otherSparse <- function(s, x, K, ...) { s <- try(as(as(s, "TsparseMatrix"), "dgTMatrix")) if (class(s) == "try-error") stop("cannot cast 's' (class '", class(s), "') to class 'dgTMatrix'") apclusterK.matrixOrDgT(s=s, K=K, ...) } setMethod("apclusterK", signature(s="sparseMatrix", x="missing"), apclusterK.otherSparse) apclusterK.otherDense <- function(s, x, K, ...) { s <- try(as(s, "matrix")) if (class(s) == "try-error") stop("cannot cast 's' (class '", class(s), "') to class 'matrix'") apclusterK.matrixOrDgT(s=s, K=K, ...) } setMethod("apclusterK", signature(s="Matrix", x="missing"), apclusterK.otherDense) apclusterK.function <- function(s, x, K, prc=10, bimaxit=20, exact=FALSE, maxits=1000, convits=100, lam=0.9, includeSim=TRUE, details=FALSE, nonoise=FALSE, seed=NA, verbose=TRUE, ...) { if (!is.na(seed)) set.seed(seed) if (is.data.frame(x)) x <- as.matrix(x[, sapply(x, is.numeric)]) if (is.matrix(x)) N <- nrow(x) else N <- length(x) if (N < 2) stop("cannot cluster less than 2 samples") if (!is.function(s)) { if (!is.character(s) || !exists(s, mode="function")) stop("invalid distance function") s <- match.fun(s) } sim <- s(x=x, ...) if (!is(sim, "mMatrix") || (nrow(sim) != N) || ncol(sim) != N) stop("computation of similarity matrix failed") apres <- apclusterK(s=sim, K=K, prc=prc, bimaxit=bimaxit, exact=exact, maxits=maxits, convits=convits, lam=lam, includeSim=FALSE, details=details, nonoise=nonoise, verbose=verbose) apres@call <- deparse(sys.call(-1)) if (includeSim) apres@sim <- sim apres } setMethod("apclusterK", signature(s="function" , x="ANY"), apclusterK.function) setMethod("apclusterK", signature(s="character", x="ANY"), apclusterK.function) apcluster/R/sort-methods.R0000644000176200001440000000200414170223535015226 0ustar liggesuserssort.ExClust <- function(x, decreasing=FALSE, sortBy=c("aggExCluster", "size", "nameExemplar", "noExemplar"), ...) { sortBy <- match.arg(sortBy) if (sortBy == "aggExCluster") { if (all(dim(x@sim) <= 1)) stop("cannot sort by agglomerative clustering\n", "because similarity matrix not included in object") else perm <- aggExCluster(x=x)@order } else if (sortBy == "size") perm <- order(sapply(x@clusters, length)) else if (sortBy == "nameExemplar") { if (length(names(x@exemplars)) > 0) perm <- order(x@exemplars) else stop("no names available for exemplars") } else if (sortBy == "noExemplar") perm <- order(x@exemplars) if (decreasing) perm <- rev(perm) x@exemplars <- x@exemplars[perm] x@clusters <- x@clusters[perm] x } #setMethod("sort", signature("ExClust"), sort.ExClust, sealed=TRUE) apcluster/R/access-methods.R0000644000176200001440000000210514170223535015502 0ustar liggesuserssetMethod("[", signature(x="APResult", i="index", j="missing", drop="missing"), function(x, i, j, drop=FALSE) { x@clusters[i] }) setMethod("[[", signature(x="APResult", i="index", j="missing"), function(x, i, j) { x@clusters[[i]] }) setMethod("[", signature(x="ExClust", i="index", j="missing", drop="missing"), function(x, i, j, drop=FALSE) { x@clusters[i] }) setMethod("[[", signature(x="ExClust", i="index", j="missing"), function(x, i, j) { x@clusters[[i]] }) setMethod("[", signature(x="AggExResult", i="index", j="missing", drop="missing"), function(x, i, j, drop=FALSE) { lapply(i, function(index) cutree(x, k=index)) }) setMethod("[[", signature(x="AggExResult", i="index", j="missing"), function(x, i, j) { cutree(x, k=i) }) setMethod("similarity", signature(x="APResult"), function(x) x@sim) setMethod("similarity", signature(x="AggExResult"), function(x) x@sim) setMethod("similarity", signature(x="ExClust"), function(x) x@sim) apcluster/R/apclusterDemo.R0000644000176200001440000000110414170223535015405 0ustar liggesusersapclusterDemo <- function(l=100, d=2, seed=NA, ...) { if (!is.na(seed)) set.seed(seed) if (round(l) != l || l < 2) stop("'l' must be an integer at least as large as 2") else if (round(d) != d || d < 1) stop("'d' must be an integer at least as large as 1") x <- matrix(runif(l * d), c(l, d)) s <- negDistMat(x, r=2) # Call function apcluster(), turn on details for later plotting apresultObj <- apcluster(s, details=TRUE, ...) show(apresultObj) plot(apresultObj) invisible(list(x, s, apresultObj)) } apcluster/R/similarity.R0000644000176200001440000000764414170223535015003 0ustar liggesusersnegDistMat <- function(x, sel=NA, r=1, method="euclidean", p=2) { if (r <= 0) stop("'r' must be positive") if (missing(x)) return(function(x, sel=NA) negDistMat(x, sel, r=r, method=method, p=p)) if (is.data.frame(x)) dm <- as.matrix(simpleDist(x[, sapply(x, is.numeric)], sel, method=method, p=p)) else dm <- as.matrix(simpleDist(x, sel, method=method, p=p)) if (r != 1) -dm^r else -dm } expSimMat <- function(x, sel=NA, r=2, w=1, method="euclidean", p=2) { if (r <= 0) stop("'r' must be positive") if (missing(x)) return(function(x, sel=NA) expSimMat(x, sel, r=r, w=w, method=method, p=p)) if (is.data.frame(x)) dm <- as.matrix(simpleDist(x[,sapply(x, is.numeric)], sel, method=method, p=p)) else dm <- as.matrix(simpleDist(x, sel, method=method, p=p)) exp(-(dm / w)^r) } linSimMat <- function(x, sel=NA, w=1, method="euclidean", p=2) { if (w <= 0) stop("'w' must be positive") if (missing(x)) return(function(x, sel=NA) linSimMat(x, sel, w=w, method=method, p=p)) if (is.data.frame(x)) dm <- as.matrix(simpleDist(x[,sapply(x,is.numeric)], sel, method=method, p=p)) else dm <- as.matrix(simpleDist(x, sel, method=method, p=p)) pmax(1 - dm / w, 0) } corSimMat <- function(x, sel=NA, r=1, signed=TRUE, method="pearson") { if (missing(x)) return(function(x, sel=NA) corSimMat(x, sel, r=r, signed=signed, method=method)) if (is.vector(x) || (is.list(x) && !is.data.frame(x))) stop("no correlation for vector or list") if (is.data.frame(x)) x <- as.matrix(x[, sapply(x, is.numeric)]) else x <- as.matrix(x) N <- nrow(x) # if rownames available they are assigned by cor if (length(sel) == 1 && is.na(sel)) { mat <- cor(x=t(x), method=method) if (length(rownames(x)) == 0) dimnames(mat) <- list(seq_len(N), seq_len(N)) } else if (is.numeric(sel) && length(sel) > 0) { mat <- cor(x=t(x), y=t(x[sel, ]), method=method) if (length(rownames(x)) == 0) dimnames(mat) <- list(seq_len(N), sel) } else stop("invalid 'sel' argument") if (signed) { if (r != 1) mat <- sign(mat) * abs(mat)^r } else { if (r == 1) mat <- abs(mat) else mat <- abs(mat)^r } mat } linKernel <- function(x, sel=NA, normalize=FALSE) { if (missing(x)) return(function(x, sel=NA) linKernel(x, sel, normalize=normalize)) if (is.data.frame(x)) x <- as.matrix(x[, sapply(x, is.numeric)]) else x <- as.matrix(x) N <- nrow(x) if (!is.double(x)) storage.mode(x) <- "double" if (length(sel) == 1 && is.na(sel)) { mat <- tcrossprod(x) if (normalize) { di <- 1 / sqrt(diag(mat)) di[which(is.infinite(di))] <- 0 mat <- mat * (di %o% di) } if (length(rownames(x)) > 0) dimnames(mat) <- list(rownames(x), rownames(x)) else dimnames(mat) <- list(seq_len(N), seq_len(N)) } else if (is.numeric(sel) && length(sel) > 0) { mat <- tcrossprod(x, x[sel, , drop=FALSE]) if (normalize) { di <- 1 / sqrt(sapply(1:nrow(x), function(i) x[i,] %*% x[i,])) di[which(is.infinite(di))] <- 0 mat <- mat * (di %o% di[sel]) } if (length(rownames(x)) > 0) dimnames(mat) <- list(rownames(x), rownames(x)[sel]) else dimnames(mat) <- list(seq_len(N), sel) } else stop("invalid 'sel' argument") mat } apcluster/R/simpleDist.R0000644000176200001440000000331514170223535014721 0ustar liggesusers# This is a modification of # File src/library/stats/R/dist.R # Part of the R package, http://www.R-project.org # Changes: # added possibility to make sub-selection of columns (argument sel) # removed all functionality not necessary for package apcluster # This program is free software; you can redistribute it and/or modify simpleDist <- function(x, sel, method="euclidean", p=2) { ## account for possible spellings of euclid?an if(!is.na(pmatch(method, "euclidian"))) method <- "euclidean" METHODS <- c("euclidean", "maximum", "manhattan", "canberra", "binary", "minkowski", "discrepancy") method <- pmatch(method, METHODS) if(is.na(method)) stop("invalid distance method") if(method == -1) stop("ambiguous distance method") x <- as.matrix(x) N <- nrow(x) if (!is.double(x)) storage.mode(x) <- "double" if (length(sel) == 1 && is.na(sel)) { d <- .Call("CdistR", x, as.integer(NA), method, p) dm <- matrix(0, N, N) dm[row(dm) > col(dm)] <- d dm <- dm + t(dm) if (length(rownames(x)) > 0) dimnames(dm) <- list(rownames(x), rownames(x)) else dimnames(dm) <- list(seq_len(N), seq_len(N)) } else if (is.numeric(sel) && length(sel) > 0) { if (max(sel) > N || min(sel) < 1) stop("'sel' is no subset of '1:nrow(x)'") d <- .Call("CdistR", x, as.integer(sel - 1), method, p) dm <- matrix(d, N, length(sel)) if (length(rownames(x)) > 0) dimnames(dm) <- list(rownames(x), rownames(x)[sel]) else dimnames(dm) <- list(seq_len(N), sel) } else stop("invalid 'sel' argument") dm } apcluster/R/heatmap-methods.R0000644000176200001440000002202114170223535015657 0ustar liggesusersheatmap.ExClust <- function(x, y, ...) { if (!all(dim(x@sim) <= 1)) return(invisible(heatmap(x, x@sim, ...))) else stop("similarity matrix is missing for heatmap plotting") } setMethod("heatmap", signature(x="ExClust", y="missing"), heatmap.ExClust) heatmap.ExClust.matrix <- function(x, y, ...) { if (all(dim(y) <= 1)) stop("'y' must be a non-empty similarity matrix") else if (x@l != nrow(y)) stop("size of clustering result does not fit to size of data set") else if (nrow(y) != ncol(y) && length(x@sel) == 0) stop("similarity matrix must be quadratic") if (any(y == -Inf)) { rng <- range(y[which(y > -Inf)]) fill <- 2 * rng[1] - rng[2] y[which(y == -Inf)] <- fill } aggres <- aggExCluster(y, x) heatmap(aggres, y, ...) return(invisible(aggres)) } setMethod("heatmap", signature(x="ExClust", y="matrix"), heatmap.ExClust.matrix) heatmap.ExClust.sparseMatrix <- function(x, y, ...) { if (all(dim(y) <= 1)) stop("'y' must be a non-empty similarity matrix") else if (x@l != nrow(y)) stop("size of clustering result does not fit to size of data set") else if (nrow(y) != ncol(y)) stop("similarity matrix must be quadratic") aggres <- aggExCluster(y, x, includeSim=TRUE) heatmap(aggres, aggres@sim, ...) aggres@sim <- matrix(ncol=0, nrow=0) return(invisible(aggres)) } setMethod("heatmap", signature(x="ExClust", y="sparseMatrix"), heatmap.ExClust.sparseMatrix) heatmap.ExClust.Matrix <- function(x, y, ...) { y <- try(as(y, "matrix")) if (class(y) == "try-error") stop("cannot cast 'y' (class '", class(y), "') to class 'matrix'") return(invisible(heatmap(x, y, ...))) } setMethod("heatmap", signature(x="ExClust", y="Matrix"), heatmap.ExClust.Matrix) heatmap.AggExResult <- function(x, y, ...) { if (!all(dim(x@sim) <= 1)) heatmap(x, x@sim, ...) else stop("similarity matrix is missing for heatmap plotting") } setMethod("heatmap", signature(x="AggExResult", y="missing"), heatmap.AggExResult) heatmap.AggExResult.matrix <- function(x, y, Rowv=TRUE, Colv=TRUE, sideColors=NULL, col=heat.colors(12), base=0.05, add.expr, margins=c(5, 5, 2), cexRow=max(min(35 / nrow(y), 1), 0.1), cexCol=max(min(35 / ncol(y), 1), 0.1), main=NULL, dendScale=1, barScale=1, legend=c("none", "col"), ...) { if (all(dim(y) <= 1)) stop("'y' must be a non-empty matrix") else if (x@l != nrow(y)) stop("size of clustering result does not fit to size of data set") else if (length(x@sel) == 0 && ncol(y) != nrow(y)) stop("'y' must be quadratic") else if (length(x@sel) > 0 && ncol(y) != length(x@sel)) stop("no. of columns in 'y' and no. of selected samples in 'x' ", "do not match") legend <- match.arg(legend) rowInd <- unlist(x@clusters[[x@maxNoClusters]][x@order]) doRdend <- TRUE doCdend <- TRUE dend <- NULL if (is.na(Rowv) || identical(Rowv, FALSE) || x@maxNoClusters < 3) doRdend <- FALSE else { dend <- as.dendrogram(x, base=base, useNames=FALSE) rowInd <- as.numeric(order.dendrogram(dend)) } colInd <- rowInd if (length(x@sel) > 0) { colInd <- rank(intersect(rowInd, x@sel)) doCdend <- FALSE } else if (is.na(Colv) || identical(Colv, FALSE) || x@maxNoClusters < 3) doCdend <- FALSE else if (!is.na(Colv) && !doRdend) { dend <- as.dendrogram(x, base=base, useNames=FALSE) rowInd <- as.numeric(order.dendrogram(dend)) colInd <- rowInd } if ((doRdend || doCdend) && (!is.numeric(dendScale) || length(dendScale) != 1 || dendScale <= 0 || dendScale > 2)) stop("'dendScale' must be a single positive value not larger than 2") if (is.null(sideColors)) { if (length(x) != nrow(y)) { lx <- length(x) lx2 <- lx + if (lx %% 2) 1 else 0 ind <- as.vector(t(matrix(1:lx2, lx2 / 2)))[1:lx] sideColors <- rainbow(lx)[ind] } } else if (any(is.na(sideColors))) sideColors <- NULL else if (!is.character(sideColors)) stop("'sideColors' must be vector of colors, NA or NULL") else { if (length(sideColors) < 2) stop("use at least two different colors in 'sideColors' argument") if (length(sideColors) < length(x)) sideColors <- rep(sideColors, length.out=length(x)) else sideColors <- sideColors[1:length(x)] } if (length(rownames(y)) == 0) { labRow <- as.character(rowInd) if (length(x@sel) > 0) labCol <- as.character(intersect(rowInd, x@sel)) } else { labRow <- rownames(y)[rowInd] if (length(x@sel) > 0) labCol <- rownames(y)[intersect(rowInd, x@sel)] } if (length(colnames(y)) == 0) labCol <- as.character(colInd) else labCol <- colnames(y)[colInd] lmat <- rbind(c(NA, 3), 2:1) lwid <- c(if (doRdend) dendScale else 0.05, 4) lhei <- c((if (doCdend) dendScale else 0.05) + if (!is.null(main)) 0.2 else 0, 4) if (length(sideColors) > 0) { if (!is.numeric(barScale) || length(barScale) != 1 || barScale <= 0 || barScale > 4) stop("'barScale' must be a single positive value not larger than 4") invIndex <- rep(0, nrow(y)) for (i in 1:x@maxNoClusters) invIndex[x@clusters[[x@maxNoClusters]][[i]]] <- i srtIndex <- unique(invIndex[rowInd]) rowColors <- rep(sideColors, sapply(x@clusters[[x@maxNoClusters]][srtIndex], length)) if (length(x@sel) > 0) colColors <- rep(sideColors, sapply(x@clusters[[x@maxNoClusters]][srtIndex], function(cl) length(intersect(cl, x@sel)))) else colColors <- rowColors lmat <- rbind(lmat[1, ] + 1, c(NA, 1), lmat[2, ] + 1) lhei <- c(lhei[1L], 0.1 * barScale, lhei[2L]) lmat <- cbind(lmat[, 1] + 1, c(rep(NA, nrow(lmat) - 1), 1), lmat[, 2] + 1) lwid <- c(lwid[1L], 0.1 * barScale, lwid[2L]) } lmat[is.na(lmat)] <- 0 if (legend != "none") { lmat <- cbind(lmat, c(rep(0, nrow(lmat) - 1), max(lmat) + 1)) lwid <- c(lwid, 0.25) } dev.hold() on.exit(dev.flush()) op <- par(no.readonly=TRUE) on.exit(par(op), add=TRUE) layout(lmat, widths=lwid, heights=lhei, respect=TRUE) if (length(sideColors) > 0) { par(mar=c(margins[1], 0, 0, 0.5)) image(rbind(1:nrow(y)), col=rev(rowColors), axes=FALSE) par(mar=c(0.5, 0, 0, margins[2])) image(cbind(1:ncol(y)), col=colColors, axes=FALSE) } par(mar=c(margins[1], 0, 0, margins[2])) image(1:ncol(y), 1:nrow(y), t(y[rev(rowInd), colInd]), xlim=(0.5 + c(0, ncol(y))), ylim=(0.5 + c(0, nrow(y))), axes=FALSE, xlab="", ylab="", col=col, ...) if (cexCol > 0) axis(1, 1:ncol(y), labels=labCol, las=2, line=-0.5, tick=0, cex.axis=cexCol) if (cexRow > 0) axis(4, 1:nrow(y), labels=rev(labRow), las=2, line=-0.5, tick=0, cex.axis=cexRow) if (!missing(add.expr)) eval.parent(substitute(add.expr)) par(mar=c(margins[1], 0, 0, 0)) if (doRdend) plot(revDend.local(dend), horiz=TRUE, axes=FALSE, yaxs="i", leaflab="none") else frame() par(mar=c(0, 0, if (!is.null(main)) 1 else 0, margins[2])) if (doCdend) plot(dend, axes=FALSE, xaxs="i", leaflab="none") else frame() if (!is.null(main)) { par(xpd=NA) title(main, cex.main=(1.5 * op[["cex.main"]])) } if (legend != "none") { par(mar=c(margins[1], 0, 0, margins[3])) rng <- range(y) colvals <- seq(rng[1], rng[2], length.out=length(col)) image(y=colvals, z=rbind(colvals), col=col, axes=FALSE, xlab="", ylab="") axis(4) } return(invisible(dend)) } setMethod("heatmap", signature(x="AggExResult", y="matrix"), heatmap.AggExResult.matrix) setMethod("heatmap", signature(x="matrix", y="missing"), function(x, y, ...) stats::heatmap(x=x, ...)) setMethod("heatmap", signature(x="missing", y="matrix"), function(x, y, ...) stats::heatmap(x=y, ...)) apcluster/MD50000644000176200001440000000726214170327412012574 0ustar liggesusers6e0d5d7349c27cb8d4022c7d44837029 *DESCRIPTION 001440a057780cd5709d6567c4631912 *NAMESPACE 15e2a8926029069370cbddc7689e1933 *R/AllClasses.R 9368032ea24b762d440ea7e2dd4904fb *R/AllGenerics.R 79fcb30e6202da02176b775ed1a66b4b *R/access-methods.R 3130bcd2998cc2e895ccc20037e9e082 *R/aggExCluster-methods.R 0c7021551b28463ad39a43b4f4df5ad2 *R/apcluster-methods.R 9ac279fc9332af5bf366d2c68c742628 *R/apclusterDemo.R ef7914bb90339624026825dd1ccdee7c *R/apclusterK-methods.R 83ec9aecb36933ef7689593c74869db7 *R/apclusterL-methods.R 34bf6cb9c85dd238c83d1739f1eadcc9 *R/coerce-methods.R 511899b8b05ba1e7bcf48c61d0c24069 *R/conversions.R 1abcdec975db5aaa2d63ffe7768c3406 *R/cutree-methods.R 4701c406bb53eec612a2e09c9aff481d *R/heatmap-methods.R b542abbc42500368b45f26b98c064abe *R/labels-methods.R a33e8f5c04f5862182e08f97abf29875 *R/length-methods.R 24d9e15ff4844e4748336a6f3c2373c7 *R/plot-methods.R a2b2a3230744ddaf27377fe061290b1d *R/preferenceRange-methods.R 5015d224d2ba1090c39ae2385d6d40d4 *R/revDend.R adde0ebd660c4c8bfa73c70b833c688b *R/show-methods.R 644a0a66aa2dbee14aa41cc1008ed659 *R/similarity.R 95f1e04b6d448b91abb309ee25977cf2 *R/simpleDist.R 4bf4b98618b2bfe598cc640c35bae301 *R/sort-methods.R d5bdec669d6d8972e196ae87c3b40cc2 *README.md cb4d5a34aae637c875659f4d449f61b3 *TODO 80a00f4a0b8d1fd621394db359ac2849 *build/partial.rdb 8865906ef89cc100d9367a3701500d97 *build/vignette.rds af577c272e9b2fe46a3c3769d763b1ff *inst/CITATION 199b737b3945550d6e9ef53245cf1701 *inst/COPYRIGHT f3946a0dffb6203fcbea9ad19bb90c59 *inst/NEWS d421ca457ae311dec6f09f2327f178e4 *inst/doc/apcluster.R 0f18433541bc23ec1113111074984a3c *inst/doc/apcluster.Rnw 248e3e6cca879faa1154bd1e2c648fe8 *inst/doc/apcluster.pdf 352be6e3df3a95e3d76e5d5d84046de0 *man/APResult-class.Rd e18b6a2cbaf530a468c64558b6a17de5 *man/AggExResult-class.Rd 3afe4e6c6047760ae1aaefbe9ff54e9b *man/ExClust-class.Rd ac31dafa78aad95d4f7507e8878c0a4c *man/aggExCluster-methods.Rd 14a205bb38133b2356ed0b2989733350 *man/apcluster-methods.Rd fc41e1f22d6c0f570254e92080e62165 *man/apcluster-package.Rd 60ca39639f4580554c3d9e69f6b266e8 *man/apclusterDemo.Rd 062c114104adeb9a8434203480559a6e *man/apclusterK-methods.Rd 208e20aaea7f0c8bb86e6a5d178aeb4d *man/apclusterL-methods.Rd 5233894aac94e98f4eff930d775e1aa6 *man/coerce-methods.Rd 2c3721753daa5130fec75fe3ae408f0a *man/conversions.Rd 1b54b96fd76472cea9681dd48a829d24 *man/cutree-methods.Rd 1d1c21e87876b523640b005ef38f0200 *man/heatmap-methods.Rd dfce7a413f45ef1b46632086e4340a33 *man/labels-methods.Rd 4ffc37248b1652b9d3a6762bbef2a8b3 *man/plot-methods.Rd 8b4d7247e3b3991e1c8a4f4e8d88e1e0 *man/preferenceRange-methods.Rd df69e6764631a68a4a9a020fb378a4ab *man/show-methods.Rd c444acfc7a5c95cb5b7a3138bcf18961 *man/similarities.Rd c499662712cbddcb266c8f4833e8a55b *man/sort-methods.Rd 86402d466a35d3f3e63192b68e8fd60b *src/R_init_apcluster.cpp 732ed3fe7a453aafc654d42945439a2b *src/aggExClusterC.cpp c76bcf1a5d8da0af578bc874b618f30f *src/aggExClusterC.h 69d0991cc0d6d6eadcb155791ad37f1e *src/apclusterC.cpp d61a3a076cec2b8fa06ec04a87765bae *src/apclusterCppHeaders.h 5ae6f01abaa7f4c73761a645294154d3 *src/apclusterLeveragedC.cpp f496d348b00efe0c4d2bff4b7c1ce98a *src/apclusterSparseC.cpp fd4e674b808035893f83978576394df6 *src/distanceL.c 2fd55b6e14bd27888af7edc1694233bc *src/distanceL.h 7cbf1c2e2a8a86822374af2c57d5d10c *src/preferenceRangeC.cpp 0b207f0cd197c40182fb856e13f4ee42 *src/preferenceRangeSparseC.cpp 98029656a3cfe00e846f3d93b6bc4525 *vignettes/JKU_EN_noName.pdf 0f18433541bc23ec1113111074984a3c *vignettes/apcluster.Rnw e844d32c372914997a1c569bae4a23ba *vignettes/apcluster.bib 0ee0d701f61a0631126fa8837ef470cc *vignettes/bioinf-article.txi 796c822a42721e608226ad8b86954533 *vignettes/bioinf-bar.png 51f59572d0bc3182986dac2c20ad5139 *vignettes/bioinf.cls apcluster/inst/0000755000176200001440000000000014170271573013240 5ustar liggesusersapcluster/inst/doc/0000755000176200001440000000000014170271572014004 5ustar liggesusersapcluster/inst/doc/apcluster.Rnw0000644000176200001440000016453714170236174016515 0ustar liggesusers\documentclass[article]{bioinf} \usepackage{amsmath,amssymb} \usepackage{hyperref} \hypersetup{colorlinks=false, pdfborder=0 0 0, pdftitle={APCluster - An R Package for Affinity Propagation Clustering}, pdfauthor={Ulrich Bodenhofer}} \title{{\Huge APCluster}\\[5mm] An R Package for Affinity Propagation Clustering} \author{Ulrich Bodenhofer, Johannes Palme, Chrats Melkonian, and Andreas Kothmeier} \affiliation{Institute of Bioinformatics, Johannes Kepler University Linz\\Altenberger Str. 69, 4040 Linz, Austria\\ \email{apcluster@bioinf.jku.at}} \newcommand{\APCluster}{\texttt{apcluster}} \newcommand{\KeBABS}{\texttt{kebabs}} \newcommand{\R}{R} \newcommand{\Real}{\mathbb{R}} \renewcommand{\vec}[1]{\mathbf{#1}} %\VignetteIndexEntry{An R Package for Affinity Propagation Clustering} %\VignetteDepends{methods, stats, graphics, utils} %\VignetteEngine{knitr::knitr} \begin{document} <>= options(width=72) knitr::opts_knit$set(width=72) set.seed(0) library(apcluster, quietly=TRUE) apclusterVersion <- packageDescription("apcluster")$Version apclusterDateRaw <- packageDescription("apcluster")$Date apclusterDateYear <- as.numeric(substr(apclusterDateRaw, 1, 4)) apclusterDateMonth <- as.numeric(substr(apclusterDateRaw, 6, 7)) apclusterDateDay <- as.numeric(substr(apclusterDateRaw, 9, 10)) apclusterDate <- paste(month.name[apclusterDateMonth], " ", apclusterDateDay, ", ", apclusterDateYear, sep="") @ \newcommand{\APClusterVer}{\Sexpr{apclusterVersion}} \newcommand{\APClusterDate}{\Sexpr{apclusterDate}} \manualtitlepage[Version \APClusterVer, \APClusterDate] \section*{Scope and Purpose of this Document} This document is a user manual for the \R\ package \APCluster\ \cite{BodenhoferKothmeierHochreiter11}. It is only meant as a gentle introduction into how to use the basic functions implemented in this package. Not all features of the \R\ package are described in full detail. Such details can be obtained from the documentation enclosed in the \R\ package. Further note the following: (1) this is neither an introduction to affinity propagation nor to clustering in general; (2) this is not an introduction to \R. If you lack the background for understanding this manual, you first have to read introductory literature on these subjects. \newpage \vspace{1cm} \newlength{\auxparskip} \setlength{\auxparskip}{\parskip} \setlength{\parskip}{0pt} \tableofcontents \clearpage \setlength{\parskip}{\auxparskip} \newlength{\Nboxwidth} \setlength{\Nboxwidth}{\textwidth} \addtolength{\Nboxwidth}{-2\fboxrule} \addtolength{\Nboxwidth}{-2\fboxsep} \newcommand{\notebox}[1]{% \begin{center} \fbox{\begin{minipage}{\Nboxwidth} \noindent{\sffamily\bfseries Note:} #1 \end{minipage}} \end{center}} \section{Introduction} Affinity propagation (AP) is a relatively new clustering algorithm that has been introduced by Brendan J.\ Frey and Delbert Dueck \cite{FreyDueck07}.\footnotemark[1]\footnotetext[1]{% \url{https://psi.toronto.edu/research/affinity-propagation-clustering-by-message-passing/}}\stepcounter{footnote} The authors themselves describe affinity propagation as follows: \begin{quote} ``{\em An algorithm that identifies exemplars among data points and forms clusters of data points around these exemplars. It operates by simultaneously considering all data point as potential exemplars and exchanging messages between data points until a good set of exemplars and clusters emerges.}'' \end{quote} AP has been applied in various fields recently, among which bioinformatics is becoming increasingly important. Frey and Dueck have made their algorithm available as Matlab code.\footnotemark[1] Matlab, however, is relatively uncommon in bioinformatics. Instead, the statistical computing platform \R\ has become a widely accepted standard in this field. In order to leverage affinity propagation for bioinformatics applications, we have implemented affinity propagation as an \R\ package. Note, however, that the given package is in no way restricted to bioinformatics applications. It is as generally applicable as Frey's and Dueck's original Matlab code.\footnotemark[1] Starting with Version 1.1.0, the \APCluster\ package also features {\em exemplar-based agglomerative clustering} which can be used as a clustering method on its own or for creating a hierarchy of clusters that have been computed previously by affinity propagation. {\em Leveraged Affinity Propagation}, a variant of AP especially geared to applications involving large data sets, has first been included in Version 1.3.0. \section{Installation} \subsection{Installation via CRAN} The \R\ package \APCluster\ (current version: \APClusterVer) is part of the {\em Comprehensive R Archive Network (CRAN)}% \footnote{\url{http://cran.r-project.org/}}. The simplest way to install the package, therefore, is to enter the following command into your \R\ session: <>= install.packages("apcluster") @ If you use R on Windows or Mac OS, you can also conveniently use the package installation menu of your R GUI. \subsection{Manual installation from source} Under special circumstances, e.g. if you want to compile the C++ code included in the package with some custom options, you may prefer to install the package manually from source. To this end, open the package's page at CRAN% \footnote{\url{https://CRAN.R-project.org/package=apcluster}} and then proceed as follows: \begin{enumerate} \item Download \texttt{apcluster\_\APClusterVer.tar.gz} and save it to your harddisk. \item Open a shell/terminal/command prompt window and change to the directory where you put {\ttfamily apcluster\_\APClusterVer.tar.gz}. Enter \begin{quote} \ttfamily R CMD INSTALL apcluster\_\APClusterVer.tar.gz \end{quote} to install the package. \end{enumerate} Note that this might require additional software on some platforms. Windows requires Rtools\footnote{\url{http://cran.r-project.org/bin/windows/Rtools/}} to be installed and to be available in the default search path (environment variable \verb+PATH+). Mac OS X requires Xcode developer tools% \footnote{\url{https://developer.apple.com/technologies/tools/}} (make sure that you have the command line tools installed with Xcode). \subsection{Compatibility issues} All versions downloadable from CRAN have been built using the latest version, \R\ \Sexpr{R.version$major}.\Sexpr{R.version$minor}. However, the package should work without severe problems on \R\ versions $\geq$3.0.0. \section{Getting Started} To load the package, enter the following in your \R\ session: <>= library(apcluster) @ If this command terminates without any error message or warning, you can be sure that the package has been installed successfully. If so, the package is ready for use now and you can start clustering your data with affinity propagation. The package includes both a user manual (this document) and a reference manual (help pages for each function). To view the user manual, enter <>= vignette("apcluster") @ Help pages can be viewed using the \verb+help+ command. It is recommended to start with <>= help(apcluster) @ Affinity propagation does not require the data samples to be of any specific kind or structure. AP only requires a {\em similarity matrix}, i.e., given $l$ data samples, this is an $l\times l$ real-valued matrix $\mathbf{S}$, in which an entry $S_{ij}$ corresponds to a value measuring how similar sample $i$ is to sample $j$. AP does not require these values to be in a specific range. Values can be positive or negative. AP does not even require the similarity matrix to be symmetric (although, in most applications, it will be symmetric anyway). A value of $-\infty$ is interpreted as ``absolute dissimilarity''. The higher a value, the more similar two samples are considered. To get a first impression, let us create a random data set in $\Real^2$ as the union of two ``Gaussian clouds'': \begin{center} <>= cl1 <- cbind(rnorm(30, 0.3, 0.05), rnorm(30, 0.7, 0.04)) cl2 <- cbind(rnorm(30, 0.7, 0.04), rnorm(30, 0.4, .05)) x1 <- rbind(cl1, cl2) plot(x1, xlab="", ylab="", pch=19, cex=0.8) @ \end{center} The package \APCluster\ offers several different ways for clustering data. The simplest way is the following: <>= apres1a <- apcluster(negDistMat(r=2), x1) @ In this example, the function \verb+apcluster()+ first computes a similarity matrix for the input data \verb+x1+ using the {\em similarity function} passed as first argument. The choice \verb+negDistMat(r=2)+ is the standard similarity measure used in the papers of Frey and Dueck --- negative squared distances. Alternatively, one can compute the similarity matrix beforehand and call \verb+apcluster()+ for the similarity matrix (for a more detailed description of the differences, see \ref{ssec:memeff}): <>= s1 <- negDistMat(x1, r=2) apres1b <- apcluster(s1) @ The function \verb+apcluster()+ creates an object belonging to the S4 class \verb+APResult+ which is defined by the present package. To get detailed information on which data are stored in such objects, enter <>= help(APResult) @ The simplest thing we can do is to enter the name of the object (which implicitly calls \verb+show()+) to get a summary of the clustering result: <>= apres1a @ The \APCluster\ package allows for plotting the original data set along with a clustering result: \begin{center} <>= plot(apres1a, x1) @ \end{center} In this plot, each color corresponds to one cluster. The exemplar of each cluster is marked by a box and all cluster members are connected to their exemplars with lines. A heatmap is plotted with \verb+heatmap()+: \begin{center} <>= heatmap(apres1a) @ \end{center} In the heatmap, the samples are grouped according to clusters. The above heatmap confirms again that there are two main clusters in the data. A heatmap can be plotted for the object \verb+apres1a+ because \verb+apcluster()+, if called for data and a similarity function, by default includes the similarity matrix in the output object (unless it was called with the switch \verb+includeSim=FALSE+). If the similarity matrix is not included (which is the default if \verb+apcluster()+ has been called on a similarity matrix directly), \verb+heatmap()+ must be called with the similarity matrix as second argument: \begin{center} <>= heatmap(apres1b, s1) @ \end{center} Suppose we want to have better insight into what the algorithm did in each iteration. For this purpose, we can supply the option \verb+details=TRUE+ to \verb+apcluster()+: <>= apres1c <- apcluster(s1, details=TRUE) @ This option tells the algorithm to keep a detailed log about its progress. For example, this allows for plotting the three performance measures that AP uses internally for each iteration: \begin{center} <>= plot(apres1c) @ \end{center} These performance measures are: \begin{enumerate} \item Sum of exemplar preferences \item Sum of similarities of exemplars to their cluster members \item Net fitness: sum of the two former \end{enumerate} For details, the user is referred to the original affinity propagation paper \cite{FreyDueck07} and the supplementary material published on the affinity propagation Web page.\footnotemark[1] We see from the above plot that the algorithm has not made any change for the last 100 iterations. AP, through its parameter \verb+convits+, allows to control for how long AP waits for a change until it terminates (the default is \verb+convits=100+). If the user has the feeling that AP will probably converge quicker on his/her data set, a lower value can be used: <>= apres1c <- apcluster(s1, convits=15, details=TRUE) apres1c @ \section{Adjusting Input Preferences}\label{sec:ipref} Apart from the similarity matrix itself, the most important input parameter of AP is the so-called {\em input preference} which can be interpreted as the tendency of a data sample to become an exemplar (see \cite{FreyDueck07} and supplementary material on the AP homepage\footnotemark[1] for a more detailed explanation). This input preference can either be chosen individually for each data sample or it can be a single value shared among all data samples. Input preferences largely determine the number of clusters, in other words, how fine- or coarse-grained the clustering result will be. The input preferences one can specify for AP are roughly in the same range as the similarity values, but they do not have a straightforward interpretation. Frey and Dueck have introduced the following rule of thumb: ``{\it The shared value could be the median of the input similarities (resulting in a moderate number of clusters) or their minimum (resulting in a small number of clusters).}'' \cite{FreyDueck07} Our AP implementation uses the median rule by default if the user does not supply a custom value for the input preferences. In order to provide the user with a knob that is --- at least to some extent --- interpretable, the function \verb+apcluster()+ provides an argument \verb+q+ that allows to set the input preference to a certain quantile of the input similarities: resulting in the median for \verb+q=0.5+ and in the minimum for \verb+q=0+. As an example, let us add two more ``clouds'' to the data set from above: \begin{center} <>= cl3 <- cbind(rnorm(20, 0.50, 0.03), rnorm(20, 0.72, 0.03)) cl4 <- cbind(rnorm(25, 0.50, 0.03), rnorm(25, 0.42, 0.04)) x2 <- rbind(x1, cl3, cl4) plot(x2, xlab="", ylab="", pch=19, cex=0.8) @ \end{center} For the default setting, we obtain the following result: \begin{center} <>= apres2a <- apcluster(negDistMat(r=2), x2) plot(apres2a, x2) @ \end{center} For the minimum of input similarities, we obtain the following result: \begin{center} <>= apres2b <- apcluster(negDistMat(r=2), x2, q=0) plot(apres2b, x2) @ \end{center} So we see that AP is quite robust against a reduction of input preferences in this example which may be caused by the clear separation of the four clusters. If we increase input preferences, however, we can force AP to split the four clusters into smaller sub-clusters: \begin{center} <>= apres2c <- apcluster(negDistMat(r=2), x2, q=0.8) plot(apres2c, x2) @ \end{center} Note that the input preference used by AP can be recovered from the output object (no matter which method to adjust input preferences has been used). On the one hand, the value is printed if the object is displayed (by \verb+show+ or by entering the output object's name). On the other hand, the value can be accessed directly via the slot \verb+p+: <>= apres2c@p @ As noted above already, we can produce a heatmap by calling \verb+heatmap()+ for an \verb+APResult+ object: \begin{center} <>= heatmap(apres2c) @ \end{center} The order in which the clusters are arranged in the heatmap is determined by means of joining the cluster agglomeratively (see Section \ref{sec:agglo} below). Although the affinity propagation result contains \Sexpr{length(apres2c@exemplars)} clusters, the heatmap indicates that there are actually four clusters which can be seen as very brightly colored squares along the diagonal. We also see that there seem to be two pairs of adjacent clusters, which can be seen from the fact that there are two relatively light-colored blocks along the diagonal encompassing two of the four clusters in each case. If we look back at how the data have been created (see also plots above), this is exactly what is to be expected. The above example with \verb+q=0+ demonstrates that setting input preferences to the minimum of input similarities does not necessarily result in a very small number of clusters (like one or two). This is due to the fact that input preferences need not necessarily be exactly in the range of the similarities. To determine a meaningful range, an auxiliary function is available which, in line with Frey's and Dueck's Matlab code,\footnotemark[1] allows to compute a minimum value (for which one or at most two clusters would be obtained) and a maximum value (for which as many clusters as data samples would be obtained): <>= preferenceRange(apres2b@sim) @ The function returns a two-element vector with the minimum value as first and the maximum value as second entry. The computations are done approximately by default. If one is interested in exact bounds, supply \verb+exact=TRUE+ (resulting in longer computation times). Many clustering algorithms need to know a pre-defined number of clusters. This is often a major nuisance, since the exact number of clusters is hard to know for non-trivial (in particular, high-dimensional) data sets. AP avoids this problem. If, however, one still wants to require a fixed number of clusters, this has to be accomplished by a search algorithm that adjusts input preferences in order to produce the desired number of clusters in the end. For convenience, this search algorithm is available as a function \verb+apclusterK()+ (analogous to Frey's and Dueck's Matlab implementation\footnotemark[1]). We can use this function to force AP to produce only two clusters (merging the two pairs of adjacent clouds into one cluster each). Analogously to \verb+apcluster()+, \verb+apclusterK()+ supports two variants --- it can either be called for a similarity measure and data or on a similarity matrix directly. \begin{center} <>= apres2d <- apclusterK(negDistMat(r=2), x2, K=2, verbose=TRUE) plot(apres2d, x2) @ \end{center} Now let us quickly consider a simple data set with more than two features. The notorious example is Fisher's iris data set: <>= data(iris) apIris1 <- apcluster(negDistMat(r=2), iris) apIris1 @ AP has identified \Sexpr{length(apIris1)} clusters. Since Version 1.3.2, the package also allows for superimposing clustering results in scatter plot matrices: \begin{center} <>= plot(apIris1, iris) @ \end{center} The heatmap looks as follows: \begin{center} <>= heatmap(apIris1) @ \end{center} Now let us try to obtain fewer clusters by using the minimum of off-diagonal similarities: <>= data(iris) apIris2 <- apcluster(negDistMat(r=2), iris, q=0) apIris2 @ AP has identified \Sexpr{length(apIris2)} clusters. If we again superimpose them in the scatter plot matrix, we obtain the following: \begin{center} <>= plot(apIris2, iris) @ \end{center} Finally, the heatmap looks as follows: \begin{center} <>= heatmap(apIris2) @ \end{center} So, looking at the heatmap, the \Sexpr{length(apIris2)} clusters seem quite reasonable, at least in the light of the fact that there are three species in the data set, {\em Iris setosa}, {\em Iris versicolor}, and {\em Iris virginica}, where {\em Iris setosa} is very clearly separated from each other (first cluster in the heatmap) and the two others are partly overlapping. \section{Exemplar-based Agglomerative Clustering}\label{sec:agglo} The function \verb+aggExCluster()+ realizes what can best be described as ``exemplar-based agglomerative clustering'', i.e.\ agglomerative clustering whose merging objective is geared towards the identification of meaningful exemplars. Analogously to \verb+apcluster()+, \verb+aggExCluster()+ supports two variants --- it can either be called for a similarity measure and data or on matrix of pairwise similarities. \subsection{Getting started} Let us start with a simple example: <>= aggres1a <- aggExCluster(negDistMat(r=2), x1) aggres1a @ The output object \verb+aggres1a+ contains the complete cluster hierarchy. As obvious from the above example, the \verb+show()+ method only displays the most basic information. Calling \verb+plot()+ on an object that was the result of \verb+aggExCluster()+ (an object of class \verb+AggExResult+), a dendrogram is plotted: \begin{center} <>= plot(aggres1a) @ \end{center} The heights of the merges in the dendrogram correspond to the merging objective: the higher the vertical bar of a merge, the less similar the two clusters have been. The dendrogram, therefore, clearly indicates two clusters. Heatmaps can be produced analogously as for \verb+APResult+ objects with the additional property that dendrograms are displayed on the top and on the left: \begin{center} <>= heatmap(aggres1a, s1) @ \end{center} Once we have confirmed the number of clusters, which is clearly 2 according to the dendrogram and the heatmap above, we can extract the level with two clusters from the cluster hierarchy. In concordance with standard \R\ terminology, the function for doing this is called \verb+cutree()+: \begin{center} <>= cl1a <- cutree(aggres1a, k=2) cl1a plot(cl1a, x1) @ \end{center} \subsection{Merging clusters obtained from affinity propagation} The most important application of \verb+aggExCluster()+ (and the reason why it is part of the \APCluster\ package) is that it can be used for creating a hierarchy of clusters starting from a set of clusters previously computed by affinity propagation. The examples in Section \ref{sec:ipref} indicate that it may sometimes be tricky to define the right input preference. Exemplar-based agglomerative clustering on affinity propagation results provides an additional tool for finding the right number of clusters. Let us revisit the four-cluster example from Section \ref{sec:ipref}. We can apply \verb+aggExCluster()+ to an affinity propagation result if we run it on the affinity propagation result supplied as second argument \verb+x+: <>= aggres2a <- aggExCluster(x=apres2c) aggres2a @ The result \verb+apres2c+ had \Sexpr{length(apres2c)} clusters. \verb+aggExCluster()+ successively joins these clusters until only one cluster is left. The dendrogram of this cluster hierarchy is given as follows: \begin{center} <>= plot(aggres2a) @ \end{center} If one wants to see the original samples in the dendrogram of the cluster hierarchy, the \verb+showSamples=TRUE+ option can be used. In this case, it is recommended to reduce the font size of the labels via the \verb+nodePar+ parameter (see \verb+?plot.dendrogram+ and the examples therein): \begin{center} <>= plot(aggres2a, showSamples=TRUE, nodePar=list(pch=NA, lab.cex=0.4)) @ \end{center} The following heatmap coincides with the one shown in Section \ref{sec:ipref} above. This is not surprising, since the heatmap plot for an affinity propagation result uses \verb+aggExCluster()+ internally to arrange the clusters: \begin{center} <>= heatmap(aggres2a) @ \end{center} Once we are more or less sure about the number of clusters, we extract the right clustering level from the hierarchy. For demonstation purposes, we do this for $k=5,\dots,2$ in the following plots: \begin{center} <>= par(mfrow=c(2,2)) for (k in 5:2) plot(aggres2a, x2, k=k, main=paste(k, "clusters")) @ \end{center} There is one obvious, but important, condition: applying \verb+aggExCluster()+ to an affinity propagation result only makes sense if the number of clusters to start from is at least as large as the number of true clusters in the data set. Clearly, if the number of clusters is already too small, then merging will make the situation only worse. \subsection{Details on the merging objective} Like any other agglomerative clustering method (see, e.g., \cite{JainMurtyFlynn99,MichalskiStepp92,Ward63}), \verb+aggExCluster()+ merges clusters until only one cluster containing all samples is obtained. In each step, two clusters are merged into one, i.e.\ the number of clusters is reduced by one. The only aspect in which \verb+aggExCluster()+ differs from other methods is the merging objective. Suppose we consider two clusters for possible merging, each of which is given by an index set: \[ I = \{i_1,\dots,i_{n_I}\} \text{ and } J = \{j_1,\dots,j_{n_J}\} \] Then we first determine the potential {\em joint exemplar} $\mathop{\mathrm{ex}}(I,J)$ as the sample that maximizes the average similarity to all samples in the joint cluster $I\cup J$: \[ \mathop{\mathrm{ex}}(I,J) =\mathop{\mathrm{argmax}}\limits_{i\in I\cup J} \frac{1}{n_I + n_J}\cdot \sum\limits_{j\in I\cup J} S_{ij} \] Recall that $\mathbf{S}$ denotes the similarity matrix and $S_{ij}$ corresponds to the similarity of the $i$-th and the $j$-th sample. Then the merging objective is computed as \[ \mathop{\mathrm{obj}}(I,J)=\frac{1}{2}\cdot\Big(\frac{1}{n_I}\cdot \sum\limits_{j\in I} S_{\mathop{\mathrm{ex}}(I,J)j}+\frac{1}{n_J}\cdot \sum\limits_{k\in J} S_{\mathop{\mathrm{ex}}(I,J)k}\Big), \] which can be best described as ``{\em balanced average similarity to the joint exemplar}''. In each step, \verb+aggExCluster()+ considers all pairs of clusters in the current cluster set and joins that pair of clusters whose merging objective is maximal. The rationale behind the merging objective is that those two clusters should be joined that are best described by a joint exemplar. \section{Leveraged Affinity Propagation}\label{sec:lever} Leveraged affinity propagation is based on the idea that, for large data sets with many samples, the cluster structure is already visible on a subset of the samples. Instead of evaluating the similarity matrix for all sample pairs, the similarities of all samples to a subset of samples are computed --- resulting in a non-square similarity matrix. Clustering is performed on this reduced similarity matrix allowing for clustering large data sets more efficiently. In this form of clustering, several rounds of affinity propagation are executed with different sample subsets --- iteratively improving the clustering result. The implementation is based on the Matlab code of Frey and Dueck provided on the AP Web page\footnotemark[1]. Apart from dynamic improvements through reduced amount of distance calculations and faster clustering, the memory consumption is also reduced not only in terms of the memory used for storing the similarity matrix, but also in terms of memory used by the clustering algorithm internally. The two main parameters controlling leveraged AP clustering are the fraction of data points that should be selected for clustering (parameter \verb+frac+) and the number of sweeps or repetitions of individual clustering runs (parameter \verb+sweeps+). Initially, a sample subset is selected randomly. For the subsequent repetitions, the exemplars of the previous run are kept in the sample subset and the other samples in the subset are chosen randomly again. The best result of all sweeps with the highest net similarity is kept as final clustering result. When called with a similarity measure and a dataset the function \verb+apclusterL()+ performs both the calculation of similarities and leveraged affinity propagation. In the example below, we use 10\% of the samples and run 5 repetitions. The function implementing the similarity measure can either be passed as a function or as a function name (which must of course be resolvable in the current environment). Additional parameters for the distance calculation can be passed to \verb+apclusterL()+ which passes them on to the function implementing the similarity measure via the \verb+...+ argument list. In any case, this function must be implemented such that it expects the data in its first argument \verb+x+ (a subsettable data structure, such as, a vector, matrix, data frame, or list) and that it takes the selection of ``column objects'' as a second argument \verb+sel+ which must be a set of column indices. The functions \verb+negDistMat()+, \verb+expSimMat()+, \verb+linSimMat()+, \verb+corSimMat()+, and \verb+linKernel()+ provided by the \APCluster\ package also support the easy creation of parameter-free similarity measures (in R terminology called ``closures''). We recommend this variant, as it is safer in terms of possible name conflicts between arguments of \verb+apclusterL()+ and arguments of the similarity function. Here is an example that makes use of a closure for defining the similarity measure: \begin{center} <>= cl5 <- cbind(rnorm(100, 0.3, 0.05), rnorm(100, 0.7, 0.04)) cl6 <- cbind(rnorm(100, 0.70, 0.04), rnorm(100, 0.4, 0.05)) x3 <- rbind(cl5, cl6) apres3 <- apclusterL(s=negDistMat(r=2), x=x3, frac=0.1, sweeps=5, p=-0.2) apres3 plot(apres3, x3) @ \end{center} The function \verb+apclusterL()+ creates a result object of S4 class \verb+APResult+ that contains the same information as for standard AP. Additionally, the selected sample subset, the associated rectangular similarity matrix for the best sweep (provided that \verb+includeSim=TRUE+) and the net similarities of all sweeps are returned in this object. <>= dim(apres3@sim) apres3@sel apres3@netsimLev @ The result returned by leveraged affinity propagation can be used for further processing in the same way as a result object returned from \verb+apcluster()+, e.g., merging of clusters with agglomerative clustering can be performed. For heatmap plotting either the parameter \verb+includeSim=TRUE+ must be set in \verb+apcluster()+ or \verb+apclusterL()+ to make the similarity matrix available in the result object or the similarity matrix must be passed as second parameter to \verb+heatmap()+ explicitly. The heatmap for leveraged AP looks slightly different compared to the heatmap for affinity propagation because the number of samples is different in both dimensions. \begin{center} <>= heatmap(apres3) @ \end{center} Often selected samples will be chosen as exemplars because, only for them, the full similarity information is available. This means that the fraction of samples should be selected in a way such that a considerable number of samples is available for each expected cluster. Please also note that a data set of the size used in this example can easily be clustered with regular affinity propagation. The data set was kept small to keep the package build time short and the amount of data output in the manual reasonable. For users requiring a higher degree of flexibility, e.g., for a customized selection of the sample subset, \verb+apclusterL()+ called with a rectangular similiarity matrix performs affinity propagation on a rectangular similarity matrix. See the source code of \verb+apclusterL()+ with signature \verb+s=function+ and \verb+x=ANY+ for an example how to embed \verb+apclusterL()+ into a complete loop performing leveraged AP. The package-provided functions for distance calculation support the generation of rectangular similarity matrices (see Chapter \ref{sec:DistMat}). \section{Sparse Affinity Propagation}\label{sec:sparse} Starting with Version 1.4.0 of the \APCluster\ package, the functions \verb+apcluster()+, \verb+apclusterK()+, and \verb+preferenceRange()+ can also handle similarity matrices as defined by the \verb+Matrix+ package. While all dense matrix formats are converted to standard R matrices, sparse matrices are converted internally to \verb+dgTMatrix+ objects. For these sparse matrices, special implementations of the \verb+apcluster()+, \verb+apclusterK()+, and \verb+preferenceRange()+ are available that fully exploit the sparseness of the matrices and may require much less operations if the matrix is sufficiently sparse. In order to demonstrate that, consider the following example: <>= dsim <- negDistMat(x2, r=2) ssim <- as.SparseSimilarityMatrix(dsim, lower=-0.2) str(ssim) @ The function \verb+as.SparseSimilarityMatrix()+ converts the dense similarity matrix \verb+dsim+ into a sparse similarity matrix by removing all pairwise similarities that are -0.2 or lower. Note that this is only for demonstration purposes. If the size of data permits that, it is advisable to use the entire dense similarity matrix. Anyway, let us run sparse AP on this similarity matrix: \begin{center} <>= sapres <- apcluster(ssim, q=0) plot(sapres, x2) @ \end{center} The functions \verb+preferenceRange()+ and \verb+apclusterK()+ work in the same way as for dense similarity matrices: <>= preferenceRange(ssim) apclusterK(ssim, K=2) @ The functions \verb+aggExCluster()+ and \verb+heatmap()+ have been extended to be able to handle sparse matrices. Note, however, that these functions are not yet exploiting sparsity properly. Instead, they convert all inputs to dense matrices before processing them, which may lead to memory and/or performance issues for large data sets. \begin{center} <>= heatmap(sapres, ssim) @ \end{center} The above heatmap illustrates that values that are not stored in the sparse similarity matrix are filled up with low values (see the red areas between some pairs of samples that belong to different clusters). Actually, each missing value is replaced with \[ \min(s)-(\max(s)-\min(s))=2\cdot\min(s)-\max(s), \] where $\min(s)$ and $\max(s)$ denote the smallest and the largest similarity value specified in the sparse similarity matrix $s$, respectively. The same replacement takes place when \verb+aggExCluster()+ converts sparse similarity matrices to dense ones. \section{Processing Biological Sequences}\label{sec:bioseq} As noted in the introduction above, one of the goals of this package is to leverage affinity propagation in bioinformatics applications. Previous versions of this document showed a toy example of using affinity propagation on a set of biological sequences that computed a similarity matrix using the simple {\em spectrum kernel} \cite{LeslieEskinNoble02} as implemented in the \KeBABS\ package \cite{PalmeHochreiterBodenhofer15}. This example has been removed in version 1.4.9 in order to avoid dependencies to a non-CRAN package. Instead, readers are now refered to the vignette of the \KeBABS\ package \cite{PalmeHochreiterBodenhofer15}, which also includes an example how to use affinity propagation clustering on a set of biological sequences. \section{Similarity Matrices}\label{sec:DistMat} Apart from the obvious monotonicity ``the higher the value, the more similar two samples'', affinity propagation does not make any specific assumption about the similarity measure. Negative squared distances must be used if one wants to minimize squared errors \cite{FreyDueck07}. Apart from that, the choice and implementation of the similarity measure is left to the user. Our package offers a few more methods to obtain similarity matrices. The choice of the right one (and, consequently, the objective function the algorithm optimizes) still has to be made by the user. All functions described in this section assume the input data matrix to be organized such that each row corresponds to one sample and each column corresponds to one feature (in line with the standard function \verb+dist+). If a vector is supplied instead of a matrix, each single entry is interpreted as a (one-dimensional) sample. \subsection{The function \texttt{negDistMat()}} The function \verb+negDistMat()+, in line with Frey and Dueck, allows for computing negative distances for a given set of real-valued data samples. If called with the first argument \verb+x+, a similarity matrix with pairwise negative distances is returned: <>= s <- negDistMat(x2) @ The function \texttt{negDistMat()} provides the same set of distance measures and parameters as the standard function \verb+dist()+ (except for \verb+method="binary"+ which makes little sense for real-valued data). Presently, \verb+negDistMat()+ provides the following variants of computing the distance $d(\vec{x},\vec{y})$ of two data samples $\vec{x}=(x_1,\dots,x_n)$ and $\vec{y}=(y_1,\dots,y_n)$: \begin{description} \item[Euclidean:] \[ d(\vec{x},\vec{y})=\sqrt{\sum\limits_{i=1}^n (x_i-y_i)^2} \] use \verb+method="euclidean"+ or do not specify argument \verb+method+ (since this is the default); \item[Maximum:] \[ d(\vec{x},\vec{y})=\max\limits_{i=1}^n |x_i-y_i| \] use \verb+method="maximum"+; \item[Sum of absolute distances / Manhattan:] \[ d(\vec{x},\vec{y})=\sum\limits_{i=1}^n |x_i-y_i| \] use \verb+method="manhattan"+; \item[Canberra:] \[ d(\vec{x},\vec{y})=\sum\limits_{i=1}^n \frac{|x_i-y_i|}{|x_i+y_i|} \] summands with zero denominators are not taken into account; use \verb+method="canberra"+; \item[Minkowski:] \[ d(\vec{x},\vec{y})=\left(\sum\limits_{i=1}^n (x_i-y_i)^p\right)^{\frac{1}{p}} \] use \verb+method="minkowski"+ and specify $p$ using the additional argument $\verb+p+$ (default is \verb+p=2+, resulting in the standard Euclidean distance); \item[Discrepancy:] \[ d(\vec{x},\vec{y})=\max\limits_{1\leq\alpha\leq\beta\leq n}\left|\sum\limits_{i=\alpha}^{\beta} (y_i-x_i)\right| \] use \verb+method="discrepancy"+ \cite{Weyl16}. \end{description} The function \verb+negDistMat()+ then takes the distances computed with one of the variants listed above and returns $-1$ times the $r$-th power of it, i.e., \begin{equation}\label{eq:negDistMat} s(\vec{x},\vec{y})=-d(\vec{x},\vec{y})^r. \end{equation} The exponent $r$ can be adjusted with the argument \verb+r+. The default is \verb+r=1+, hence, one has to supply \verb+r=2+ to obtain negative squared distances as in the examples in previous sections. Here are some examples: <>= ex <- matrix(c(0, 0.5, 0.8, 1, 0, 0.2, 0.5, 0.7, 0.1, 0, 1, 0.3, 1, 0.8, 0.2), 5, 3, byrow=TRUE) ex @ Standard Euclidean distance: <>= negDistMat(ex) @ Squared Euclidean distance: <>= negDistMat(ex, r=2) @ Maximum norm-based distance: <>= negDistMat(ex, method="maximum") @ Sum of absolute distances (aka Manhattan distance): <>= negDistMat(ex, method="manhattan") @ Canberra distance: <>= negDistMat(ex, method="canberra") @ Minkowski distance for $p=3$ ($3$-norm): <>= negDistMat(ex, method="minkowski", p=3) @ If called without the data argument \verb+x+, a function object is returned that can be supplied to clustering functions --- as in the majority of the above examples: <>= sim <- negDistMat(r=2) is.function(sim) apcluster(sim, x1) @ Depending on the application, it might be advisable to center and/or scale the data in order to equalize the influence of all features/columns. This makes sense for standard vector space distances like the Euclidean distance and can easily be accomplished by the \verb+scale()+ method. The discrepancy distance, in contrast, is strongly dependent on the order to feature/columns and is rather aimed at comparing signals. For this measure, therefore, row-wise centering can be advisable \cite{BauerBodenhoferKlement96c}. This is easily done with the \verb+sweep()+ function: <>= ex2 <- matrix(c(0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1), 3, 8, byrow=TRUE) matplot(t(ex2), ylab="") matlines(t(ex2), type="s") negDistMat(ex2, method="discrepancy") ex2Scaled <- sweep(ex2, 1, rowMeans(ex2)) ex2Scaled matplot(t(ex2Scaled), ylab="") matlines(t(ex2Scaled), type="s") negDistMat(ex2Scaled, method="discrepancy") @ \subsection{Other similarity measures} The package \APCluster\ offers four more functions for creating similarity matrices for real-valued data: \begin{description} \item[Exponential transformation of distances:] the function \verb+expSimMat()+ works in the same way as the function \verb+negDistMat()+. The difference is that, instead of the transformation \eqref{eq:negDistMat}, it uses the following transformation: \[ s(\vec{x},\vec{y})=\exp\left(-\left(\frac{d(\vec{x},\vec{y})}{w}\right)^r\right) \] Here the default is \verb+r=2+. It is clear that \verb+r=2+ in conjunction with \verb+method="euclidean"+ results in the well-known {\em Gaussian kernel / RBF kernel} \cite{FitzGeraldMicchelliPinkus95,Micchelli86,SchoelkopfSmola02}, whereas \verb+r=1+ in conjunction with \verb+method="euclidean"+ results in the similarity measure that is sometimes called {\em Laplace kernel} \cite{FitzGeraldMicchelliPinkus95,Micchelli86}. Both variants (for non-Euclidean distances as well) can also be interpreted as {\em fuzzy equality/similarity relations} \cite{DeBaetsMesiar02}. \item[Linear scaling of distances with truncation:] the function \verb+linSimMat()+ uses the transformation \[ s(\vec{x},\vec{y})=\max\left(1-\frac{d(\vec{x},\vec{y})}{w},0\right) \] which is also often interpreted as a {\em fuzzy equality/similarity relation} \cite{DeBaetsMesiar02}. \item[Correlation:] the function \verb+corSimMat()+ interprets the rows of its argument \verb+x+ (matrix or data frame) as multivariate observations and computes similarities as pairwise correlations. The function \verb+corSimMat()+ is actually a wrapper around the standard function \verb+cor()+. Consequently, the \verb+method+ argument allows for selecting the type of correlation to compute (Pearson, Spearman, or Kendall). \item[Linear kernel:] scalar products can also be interpreted as similarity measures, a view that is often adopted by kernel methods in machine learning. In order to provide the user with this option as well, the function \verb+linKernel()+ is available. For two data samples $\vec{x}=(x_1,\dots,x_n)$ and $\vec{y}=(y_1,\dots,y_n)$, it computes the similarity as \[ s(\vec{x},\vec{y})=\sum\limits_{i=1}^n x_i\cdot y_i. \] The function has one additional argument, \verb+normalize+ (default: \verb+FALSE+). If \verb+normalize+ is set to \verb+TRUE+, values are normalized to the range $[-1,+1]$ in the following way: \[ s(\vec{x},\vec{y})=\frac{\sum_{i=1}^n x_i\cdot y_i}% {\sqrt{\big(\sum_{i=1}^n x_i^2\big)\cdot% \big(\sum_{i=1}^n y_i^2\big)}} \] Entries for which at least one of the two factors in the denominator is zero are set to zero (however, the user should be aware that this should be avoided anyway). \end{description} For the same example data as above, we obtain the following for the RBF kernel: <>= expSimMat(ex) @ Laplace kernel: <>= expSimMat(ex, r=1) @ Pearson correlation coefficient: <>= corSimMat(ex, method="pearson") @ Spearman rank correlation coefficient: <>= corSimMat(ex, method="spearman") @ Linear scaling of distances with truncation: <>= linSimMat(ex, w=1.2) @ Linear kernel: <>= linKernel(ex[2:5,]) @ Normalized linear kernel: <>= linKernel(ex[2:5,], normalize=TRUE) @ All of these functions work in the same way as \verb+negDistMat()+: if called with argument \verb+x+, a similarity matrix is returned, otherwise a function is returned. \subsection{Rectangular similarity matrices} With the introduction of leveraged affinity propagation, distance calculations are entirely performed within the \APCluster\ package. The code is based on a customized version of the \verb+dist()+ function from the \verb+stats+ package. In the following example, a rectangular similarity matrix of all samples against a subset of the samples is computed: <>= sel <- sort(sample(1:nrow(x1), ceiling(0.08 * nrow(x1)))) sel s1r <- negDistMat(x1, sel, r=2) dim(s1r) s1r[1:7,] @ The rows correspond to all samples, the columns to the sample subset. The \verb+sel+ parameter specifies the sample indices of the selected samples in increasing order. Rectangular similarity calculation is provided in all distance functions of the package. If the parameter \verb+sel+ is not specified, the quadratic similarity matrix of all sample pairs is computed. \subsection{Defining a custom similarity measure for leveraged affinity propagation}\label{ssec:leverSim} As mentioned in Section \ref{sec:lever} above, leveraged affinity propagation requires the definition of a similarity measure that is supplied as a function or function name to \verb+apclusterL()+. For vectorial data, the similarity measures supplied with the package (see above) may be sufficient. If other similarity measures are necessary or if the data are not vectorial, the user must supply his/her own similarity measure. The user can supply any function as argument \verb+s+ to \verb+apcluster()+, \verb+apclusterK()+, or \verb+apclusterL()+, but the following rules must be obeyed in order to avoid errors and to ensure meaningful results: \begin{enumerate} \item The data must be supplied as first argument, which must be named \verb+x+. \item The second argument must be named \verb+sel+ and must be interpreted as a vector of indices that select a subset of data items in \verb+x+. \item The function must return a numeric matrix with similarities. If \verb+sel=NA+, the format of the matrix must be \verb+length(x)+$\times$\verb+length(x)+. If \verb+sel+ is not \verb+NA+, but contains indices selecting a subset, the format of the returned similarity matrix must be \verb+length(x)+$\times$\verb+length(sel)+. \item Although this is not a must, it is recommended to properly set row and column names in the returned similarity matrix. \end{enumerate} \subsection{Defining a custom similarity measure that creates a sparse similarity matrix} Since Version 1.4.0, similarity matrices may also be sparse (cf.~Section~\ref{sec:sparse}). Correspondingly, the similarity measures passed to \verb+apcluster()+ and \verb+apclusterK()+ may also return sparse similarity matrices: <>= sparseSim <- function(x) { as.SparseSimilarityMatrix(negDistMat(x, r=2), lower=-0.2) } sapres2 <- apcluster(sparseSim, x2, q=0) sapres2 str(similarity(sapres2)) @ Note that similarity measures passed to \verb+apclusterL()+ may not return sparse matrices. Instead, they must accept a \verb+sel+ argument and return a rectangular dense matrix (see Subsection~\ref{ssec:leverSim} above). \section{Miscellaneous} \subsection{Convenience vs.\ efficiency}\label{ssec:memeff} In most of the above examples, we called a clustering method by supplying it with a similarity function and the data to be clustered. This is undoubtedly a convenient approach. Since the resulting output objects (unless the option \verb+includeSim=FALSE+ is supplied) even includes the similarity matrix, we can plot heatmaps and produce a cluster hierarchy on the basis of the clustering result without the need to supply the similarity matrix explicitly. For large data sets, however, this convenient approach has some disadvantages: \begin{itemize} \item If the clustering algorithm is run several times on the same data set (e.g., for different parameters), the similarity matrix is recomputed every time. \item Every clustering result (depending on the option \verb+includeSim+) usually includes a copy of the similarity matrix. \end{itemize} For these reasons, depending on the actual application scenario, users should consider computing the similarity matrix beforehand. This strategy, however, requires some extra effort for subsequent processing, i.e.\ the similarity must be supplied as an extra argument in subsequent processing. \subsection{Clustering named objects}\label{ssec:names} The function \verb+apcluster()+ and all functions for computing distance matrices are implemented to recognize names of data objects and to correctly pass them through computations. The mechanism is best described with a simple example: <>= x3 <- c(1, 2, 3, 7, 8, 9) names(x3) <- c("a", "b", "c", "d", "e", "f") s3 <- negDistMat(x3, r=2) @ So we see that the \verb+names+ attribute must be used if a vector of named one-dimensional samples is to be clustered. If the data are not one-dimensional (a matrix or data frame), object names must be stored in the row names of the data matrix. All functions for computing similarity matrices recognize the object names. The resulting similarity matrix has the list of names both as row and column names. <>= s3 colnames(s3) @ The function \verb+apcluster()+ and all related functions use column names of similarity matrices as object names. If object names are available, clustering results are by default shown by names. <>= apres3a <-apcluster(s3) apres3a apres3a@exemplars apres3a@clusters @ \subsection{Computing a label vector from a clustering result} \label{ssec:labels} For later classification or comparisons with other clustering methods, it may be useful to compute a label vector from a clustering result. Our package provides an instance of the generic function \verb+labels()+ for this task. As obvious from the following example, the argument \verb+type+ can be used to determine how to compute the label vector. <>= apres3a@exemplars labels(apres3a, type="names") labels(apres3a, type="exemplars") labels(apres3a, type="enum") @ The first choice, \verb+"names"+ (default), uses names of exemplars as labels (if names are available, otherwise an error message is displayed). The second choice, \verb+"exemplars"+, uses indices of exemplars (enumerated as in the original data set). The third choice, \verb+"enum"+, uses indices of clusters (consecutively numbered as stored in the slot \verb+clusters+ --- analogous to the standard implementation of \verb+cutree()+ or the \verb+clusters+ field of the list returned by the standard function \verb+kmeans()+). \subsection{Customizing heatmaps} With Version 1.3.1, the implementation of heatmap plotting has changed significantly. The method now allows for many more customizations than before. Apart from changes in the argument list (see \verb+?heatmap+), the behavior of the method has changed as follows: \begin{itemize} \item Dendrograms are always plotted if possible. To switch off plotting of dendrograms, set \verb+Rowv+ and \verb+Colv+ to \verb+FALSE+ or \verb+NA+. If a dendrogram should only appear to the left of the heatmap, set \verb+Colv+ to \verb+FALSE+ or \verb+NA+. Analogously, set \verb+Rowv+ to \verb+FALSE+ or \verb+NA+ if a dendrogram should only be plotted on top of the plot (not possible if the similarity matrix is non-quadratic). \item Previously, \verb+rainbow()+ was used internally to determine how the bars illustrating the clusters are colored. Now users can determine the coloring of the color bars using the \verb+sideColors+ argument. For \verb+sideColors=NULL+, a meaningful color coding is determined automatically which still uses \verb+rainbow()+, but ensures that no similar colors are placed next to each other in the bar. \item The default font sizes for displaying row/column labels have been changed to make sure that they do not overlap. This can result in quite small labels if the number of samples is larger. In any case, the user can override the sizes by making custom settings of the parameters \verb+cexRow+ and \verb+cexCol+. Row and column labels can even be switched off entirely by setting \verb+cexRow+ and \verb+cexCol+ to 0, respectively. \end{itemize} Moreover, with Version~1.4.3, the possibility to add a color legend has been integrated. Here is an example with the vertical dendrogram switched off, an alternate color scheme, custom margins, and a color legend: \begin{center} <>= heatmap(apres2c, sideColors=c("darkgreen", "yellowgreen"), col=terrain.colors(12), Rowv=FALSE, dendScale=0.5, margins=c(3, 3, 2), legend="col") @ \end{center} The following example reverts to the default behavior prior to Version 1.3.1: consecutive rainbow colors, no dendrograms, and traditional sizing of row/column labels: \begin{center} <>= heatmap(apres2c, sideColors=rainbow(length(apres2c)), Rowv=FALSE, Colv=FALSE, cexRow=(0.2 + 1 / log10(nrow(apres2c@sim))), cexCol=(0.2 + 1 / log10(nrow(apres2c@sim)))) @ \end{center} \subsection{Adding a legend to plots of clustering results} As shown above, \verb+plot()+ called for an \verb+APResult+ object as first and a matrix or data frame as second argument plots the clustering result superimposed on a scatter plot (or a scatter plot matrix if the number of columns in the second argument exceeds 2). The clusters are shown in different colors, but it may not be clear which cluster is shown in which color. Therefore, it may be useful to show a legend along with the plot. The current implementation of \verb+plot()+ does not show a legend, since it is hard to determine where to actually place the legend such that no important cluster information gets occluded by the legend. Therefore, the user has to add legends manually. Actually, colors are always chosen according to a simple rule: \verb+plot()+ uses \verb+rainbow()+ to create a vector of colors that is exactly as long as the number of clusters in the \verb+APResult+ object. The following example shows how to plot a legend manually (with the clusters enumerated in the same way as in the \verb+APResult+ object): \begin{center} <>= plot(apres2a, x2) legend("bottomleft", legend=paste("Cluster", 1:length(apres2a)), col=rainbow(length(apres2a)), pch=19) @ \end{center} Note that this method is only meaningful for plotting clustering results superimposed on a 2D data set. For scatter plot matrices, this does not work in a meaningful way. In such a case, the user is rather recommended to create a legend separately (in a separate graphics device/file) and to display it along with the scatter plot matrix. To create only the legend, code like the following could be used: \begin{center} <>= plot.new() par(oma=rep(0, 4), mar=rep(0, 4)) legend("center", legend=paste("Cluster", 1:length(apres2c)), col=rainbow(length(apres2c)), pch=19) @ \end{center} It still may be necessary to strip off white margins for further usage of the legend. \subsection{Implementation and performance issues}\label{ssec:perf} Prior to Version 1.2.0, \verb+apcluster()+ was implemented in R. Starting with version 1.2.0, the main iteration loop of \verb+apcluster()+ has been implemented in C++ using the Rcpp package \cite{EddelbuettelFrancois11}, which has led to a speedup in the range of a factor or 9--10. Note that \verb+details=TRUE+ requires quite an amount of additional memory. If possible, avoid this for larger data sets. The asymptotic computational complexity of \verb+aggExCluster()+ is $\mathcal{O}(l^3)$ (where $l$ is the number of samples or clusters from which the clustering starts). This may result in excessively long computation times if \verb+aggExCluster()+ is used for larger data sets without using affinity propagation first. For real-world data sets, in particular, if they are large, we recommend to use affinity propagation first and then, if necessary, to use \verb+aggExCluster()+ to create a cluster hierarchy. \section{Special Notes for Users Upgrading from Previous Versions} \subsection{Upgrading from a version older than 1.3.0} Version 1.3.0 has brought several fundamental changes to the architecture of the package. We tried to ensure backward compatibility with previous versions where possible. However, there are still some caveats the users should take into account: \begin{itemize} \item The functions \verb+apcluster()+, \verb+apclusterK()+, and \verb+aggExCluster()+ have been re-im\-ple\-ment\-ed as S4 generics, therefore, they do not have a fixed list of arguments anymore. For this reason, users are recommended to name all optional parameters. \item Heatmap plotting has been shifted to the function \verb+heatmap()+ which has now been defined as an S4 generic method. Previous methods for plotting heatmaps using \verb+plot()+ have been partly available in Versions 1.3.0 and 1.3.1. Since Version 1.3.2, they are no longer available. \end{itemize} \subsection{Upgrading to Version 1.3.3 or newer} Users who upgrade to Version 1.3.3 (or newer) from an older version should be aware that the package now requires a newer version of Rcpp. This issue can simply be solved by re-installing Rcpp from CRAN using \verb+install.packages("Rcpp")+. \subsection{Upgrading to Version 1.4.0} The function \verb+sparseToFull()+ has been deprecated. A fully compatible function \verb+as.DenseSimilarityMatrix()+ is available that replaces and extends \verb+sparseToFull()+. \subsection{Upgrading to Version 1.4.9} The function \verb+sparseToFull()+ that has been deprecated since version 1.4.0 has finally been removed completely. From now on, you really must use the function \verb+as.DenseSimilarityMatrix()+ that replaces and extends \verb+sparseToFull()+. Since the dependency to the \KeBABS\ package has been removed, the example file \verb+inst/examples/ch22Promoters.fasta+ has been removed, too. \section{How to Cite This Package} If you use this package for research that is published later, you are kindly asked to cite it as follows: \begin{quotation} \noindent U.\ Bodenhofer, A.\ Kothmeier, and S.\ Hochreiter (2011). APCluster: an R package for affinity propagation clustering. {\em Bioinformatics} {\bf 27}(17):2463--2464. DOI: \href{http://dx.doi.org/10.1093/bioinformatics/btr406}{10.1093/bioinformatics/btr406}. \end{quotation} Moreover, we insist that, any time you cite the package, you also cite the original paper in which affinity propagation has been introduced \cite{FreyDueck07}. To obtain Bib\TeX\ entries of the two references, you can enter the following into your R session: <>= toBibtex(citation("apcluster")) @ \bibliographystyle{plain} \bibliography{apcluster} \end{document} apcluster/inst/doc/apcluster.R0000644000176200001440000002504714170271570016137 0ustar liggesusers## ----Init,echo=FALSE,message=FALSE,results='hide'--------------------- options(width=72) knitr::opts_knit$set(width=72) set.seed(0) library(apcluster, quietly=TRUE) apclusterVersion <- packageDescription("apcluster")$Version apclusterDateRaw <- packageDescription("apcluster")$Date apclusterDateYear <- as.numeric(substr(apclusterDateRaw, 1, 4)) apclusterDateMonth <- as.numeric(substr(apclusterDateRaw, 6, 7)) apclusterDateDay <- as.numeric(substr(apclusterDateRaw, 9, 10)) apclusterDate <- paste(month.name[apclusterDateMonth], " ", apclusterDateDay, ", ", apclusterDateYear, sep="") ## ----InstallAPCluster,eval=FALSE-------------------------------------- # install.packages("apcluster") ## ----LoadAPCluster,eval=FALSE----------------------------------------- # library(apcluster) ## ----OpenVignette,eval=FALSE------------------------------------------ # vignette("apcluster") ## ----ShowHelp,eval=FALSE---------------------------------------------- # help(apcluster) ## ----CreateDataSet1,fig.width=5,fig.height=5.5,out.width='0.5\\textwidth'---- cl1 <- cbind(rnorm(30, 0.3, 0.05), rnorm(30, 0.7, 0.04)) cl2 <- cbind(rnorm(30, 0.7, 0.04), rnorm(30, 0.4, .05)) x1 <- rbind(cl1, cl2) plot(x1, xlab="", ylab="", pch=19, cex=0.8) ## ----APClusterDataSet1------------------------------------------------ apres1a <- apcluster(negDistMat(r=2), x1) ## ----APClusterDataSet1b----------------------------------------------- s1 <- negDistMat(x1, r=2) apres1b <- apcluster(s1) ## ----ShowHelpAPResult,eval=FALSE-------------------------------------- # help(APResult) ## ----ShowResultAPClusterDataSet1-------------------------------------- apres1a ## ----PlotResultAPClusterDataSet1,fig.width=5,fig.height=5.5,out.width='0.5\\textwidth'---- plot(apres1a, x1) ## ----HeatmapResultAPClusterDataSet1,fig.width=7,fig.height=7,out.width='0.6\\textwidth'---- heatmap(apres1a) ## ----HeatmapResultAPClusterDataSet1b,fig.width=7,fig.height=7,out.width='0.6\\textwidth'---- heatmap(apres1b, s1) ## ----APClusterDataSet1Details----------------------------------------- apres1c <- apcluster(s1, details=TRUE) ## ----PlotAPClusterDataSet1Details,fig.width=6,fig.height=4,out.width='0.5\\textwidth'---- plot(apres1c) ## ----APClusterDataSet1convits15--------------------------------------- apres1c <- apcluster(s1, convits=15, details=TRUE) apres1c ## ----CreateDataSet2,fig.width=5,fig.height=5.5,out.width='0.5\\textwidth'---- cl3 <- cbind(rnorm(20, 0.50, 0.03), rnorm(20, 0.72, 0.03)) cl4 <- cbind(rnorm(25, 0.50, 0.03), rnorm(25, 0.42, 0.04)) x2 <- rbind(x1, cl3, cl4) plot(x2, xlab="", ylab="", pch=19, cex=0.8) ## ----APClusterDataSet2,fig.width=5,fig.height=5.5,out.width='0.5\\textwidth'---- apres2a <- apcluster(negDistMat(r=2), x2) plot(apres2a, x2) ## ----APClusterDataSet2q0,fig.width=5,fig.height=5.5,out.width='0.5\\textwidth'---- apres2b <- apcluster(negDistMat(r=2), x2, q=0) plot(apres2b, x2) ## ----PlotAPClusterDataSet2q08,fig.width=5,fig.height=5.5,out.width='0.5\\textwidth'---- apres2c <- apcluster(negDistMat(r=2), x2, q=0.8) plot(apres2c, x2) ## ----APClusterDataSet2q08showp---------------------------------------- apres2c@p ## ----HeatmapResultAPClusterDataSet2q08,fig.width=7,fig.height=7,out.width='0.6\\textwidth'---- heatmap(apres2c) ## ----PreferenceRangeDataSet2------------------------------------------ preferenceRange(apres2b@sim) ## ----APClusterKDataSet2,fig.width=5,fig.height=5.5,out.width='0.5\\textwidth'---- apres2d <- apclusterK(negDistMat(r=2), x2, K=2, verbose=TRUE) plot(apres2d, x2) ## ----IrisData1-------------------------------------------------------- data(iris) apIris1 <- apcluster(negDistMat(r=2), iris) apIris1 ## ----IrisDataPlot1,fig.width=10,fig.height=10,out.width='\\textwidth'---- plot(apIris1, iris) ## ----IrisDataHeatmap1,fig.width=7,fig.height=7,out.width='0.6\\textwidth'---- heatmap(apIris1) ## ----IrisData2-------------------------------------------------------- data(iris) apIris2 <- apcluster(negDistMat(r=2), iris, q=0) apIris2 ## ----IrisDataPlot,fig.width=10,fig.height=10,out.width='\\textwidth'---- plot(apIris2, iris) ## ----IrisDataHeatmap2,fig.width=7,fig.height=7,out.width='0.6\\textwidth'---- heatmap(apIris2) ## ----AggExClusterDataSet1--------------------------------------------- aggres1a <- aggExCluster(negDistMat(r=2), x1) aggres1a ## ----DendrogramAggExClusterDataSet1,fig.width=5,fig.height=5,out.width='0.5\\textwidth'---- plot(aggres1a) ## ----HeatmapAggExClusterDataSet1,fig.width=7,fig.height=7,out.width='0.6\\textwidth'---- heatmap(aggres1a, s1) ## ----ExtractAggExClustersDataSet1,fig.width=5,fig.height=5.5,out.width='0.5\\textwidth'---- cl1a <- cutree(aggres1a, k=2) cl1a plot(cl1a, x1) ## ----AggExClusterAPDataSet2q08---------------------------------------- aggres2a <- aggExCluster(x=apres2c) aggres2a ## ----DendrogramAggExAPDataSet2,fig.width=5,fig.height=5,out.width='0.5\\textwidth'---- plot(aggres2a) ## ----DendrogramAggExAPDataSet2b,fig.width=5,fig.height=5,out.width='0.5\\textwidth'---- plot(aggres2a, showSamples=TRUE, nodePar=list(pch=NA, lab.cex=0.4)) ## ----HeatmapAggExAPDataSet2,fig.width=7,fig.height=7,out.width='0.6\\textwidth'---- heatmap(aggres2a) ## ----PlotAggExAPDataSet2k25,fig.width=8,fig.height=8,out.width='\\textwidth'---- par(mfrow=c(2,2)) for (k in 5:2) plot(aggres2a, x2, k=k, main=paste(k, "clusters")) ## ----APClusterLevDataSet3,fig.width=5,fig.height=5.5,out.width='0.5\\textwidth'---- cl5 <- cbind(rnorm(100, 0.3, 0.05), rnorm(100, 0.7, 0.04)) cl6 <- cbind(rnorm(100, 0.70, 0.04), rnorm(100, 0.4, 0.05)) x3 <- rbind(cl5, cl6) apres3 <- apclusterL(s=negDistMat(r=2), x=x3, frac=0.1, sweeps=5, p=-0.2) apres3 plot(apres3, x3) ## ----APClusterLevResultDataSet3--------------------------------------- dim(apres3@sim) apres3@sel apres3@netsimLev ## ----APClusterLevDataSet3Heat,fig.width=7,fig.height=7,out.width='0.6\\textwidth'---- heatmap(apres3) ## ----SparseEx1-------------------------------------------------------- dsim <- negDistMat(x2, r=2) ssim <- as.SparseSimilarityMatrix(dsim, lower=-0.2) str(ssim) ## ----SparseEx1Run,fig.width=5,fig.height=5.5,out.width='0.5\\textwidth'---- sapres <- apcluster(ssim, q=0) plot(sapres, x2) ## ----SparseEx1Run2---------------------------------------------------- preferenceRange(ssim) apclusterK(ssim, K=2) ## ----SparseEx1RunHeatmap,fig.width=7,fig.height=7,out.width='0.6\\textwidth'---- heatmap(sapres, ssim) ## ----NegDistMatDataSet2----------------------------------------------- s <- negDistMat(x2) ## ----CreateToyData---------------------------------------------------- ex <- matrix(c(0, 0.5, 0.8, 1, 0, 0.2, 0.5, 0.7, 0.1, 0, 1, 0.3, 1, 0.8, 0.2), 5, 3, byrow=TRUE) ex ## ----NegEuclDistMatToyData-------------------------------------------- negDistMat(ex) ## ----NegSqEuclDistMatToyData------------------------------------------ negDistMat(ex, r=2) ## ----NegMaxDistToyData------------------------------------------------ negDistMat(ex, method="maximum") ## ----NegManhattanDistToyData------------------------------------------ negDistMat(ex, method="manhattan") ## ----NegCanberraDistToyData------------------------------------------- negDistMat(ex, method="canberra") ## ----NegMinkowskiDistToyData------------------------------------------ negDistMat(ex, method="minkowski", p=3) ## ----GetFunction------------------------------------------------------ sim <- negDistMat(r=2) is.function(sim) apcluster(sim, x1) ## ----DiscrepancyDistToyData,fig.width=6,fig.height=4.5,out.width='0.6\\textwidth'---- ex2 <- matrix(c(0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1), 3, 8, byrow=TRUE) matplot(t(ex2), ylab="") matlines(t(ex2), type="s") negDistMat(ex2, method="discrepancy") ex2Scaled <- sweep(ex2, 1, rowMeans(ex2)) ex2Scaled matplot(t(ex2Scaled), ylab="") matlines(t(ex2Scaled), type="s") negDistMat(ex2Scaled, method="discrepancy") ## ----RBFKernelToyData------------------------------------------------- expSimMat(ex) ## ----LaplaceKernelToyData--------------------------------------------- expSimMat(ex, r=1) ## ----PearsonToyData--------------------------------------------------- corSimMat(ex, method="pearson") ## ----SpearmanToyData-------------------------------------------------- corSimMat(ex, method="spearman") ## ----TruncDistToyData------------------------------------------------- linSimMat(ex, w=1.2) ## ----LinKernelToyData------------------------------------------------- linKernel(ex[2:5,]) ## ----NormLinKernelToyData--------------------------------------------- linKernel(ex[2:5,], normalize=TRUE) ## ----RectangularNegDistMatDataSet1------------------------------------ sel <- sort(sample(1:nrow(x1), ceiling(0.08 * nrow(x1)))) sel s1r <- negDistMat(x1, sel, r=2) dim(s1r) s1r[1:7,] ## ----CustomSimSparse-------------------------------------------------- sparseSim <- function(x) { as.SparseSimilarityMatrix(negDistMat(x, r=2), lower=-0.2) } sapres2 <- apcluster(sparseSim, x2, q=0) sapres2 str(similarity(sapres2)) ## ----CreateLabeledToyData--------------------------------------------- x3 <- c(1, 2, 3, 7, 8, 9) names(x3) <- c("a", "b", "c", "d", "e", "f") s3 <- negDistMat(x3, r=2) ## ----ShowToyDataLabels------------------------------------------------ s3 colnames(s3) ## ----ClusterLabeledToyData-------------------------------------------- apres3a <-apcluster(s3) apres3a apres3a@exemplars apres3a@clusters ## ----ExtractLabelsFromClusterToyData---------------------------------- apres3a@exemplars labels(apres3a, type="names") labels(apres3a, type="exemplars") labels(apres3a, type="enum") ## ----HeatmapResultAPClusterDataSetq08b,fig.width=7,fig.height=7,out.width='0.6\\textwidth'---- heatmap(apres2c, sideColors=c("darkgreen", "yellowgreen"), col=terrain.colors(12), Rowv=FALSE, dendScale=0.5, margins=c(3, 3, 2), legend="col") ## ----HeatmapResultAPClusterDataSet2q08c,fig.width=7,fig.height=7,out.width='0.6\\textwidth'---- heatmap(apres2c, sideColors=rainbow(length(apres2c)), Rowv=FALSE, Colv=FALSE, cexRow=(0.2 + 1 / log10(nrow(apres2c@sim))), cexCol=(0.2 + 1 / log10(nrow(apres2c@sim)))) ## ----PlotAddLegend,fig.width=5,fig.height=5.5,out.width='0.5\\textwidth'---- plot(apres2a, x2) legend("bottomleft", legend=paste("Cluster", 1:length(apres2a)), col=rainbow(length(apres2a)), pch=19) ## ----PlotOnlyLegend,fig.width=5,fig.height=2.5,out.width='0.5\\textwidth'---- plot.new() par(oma=rep(0, 4), mar=rep(0, 4)) legend("center", legend=paste("Cluster", 1:length(apres2c)), col=rainbow(length(apres2c)), pch=19) ## ----GetBibTeX,eval=FALSE--------------------------------------------- # toBibtex(citation("apcluster")) apcluster/inst/doc/apcluster.pdf0000644000176200001440000452206414170271572016516 0ustar liggesusers%PDF-1.5 % 140 0 obj << /Length 796 /Filter /FlateDecode >> stream xڥUrF+TV>e'vYо$>(""";_dTI f{{!{1l5c>Y_\}]ޯ̯z03n4i(A+P*%M#nP @Z2ێx;fMEm ؐm]rJEoM.LJfJ{+^_¯Ǧ WSPj,RV yIUP֙;dONKV,|хoLF=,NHI?Ălw`pQw)*o "|ZdIhZ-6/3j4*8W"9i决_[  o#9w/v:0f4jaNH_Mj_G;cՃ]=d䯧O.3RF/d%vo~_T< tdlh2h[8~KG}zt]"k~d>wT4> >> stream xy^W}sfm,˖l!/`iWVhKR6K_@B)BҐ pFƖe[ޭwk4F۬33Yf4%͌~svοR !ͳ|q?)EQN n_{E(#!k?eD!1Fu(#-ǎn<DUI*hMk:T%Fw:Pўy7C_DFsX|G%*J)-0rOuGRZgOvcL!DCN `ڶgJui>"Z`i9~c=L%F|a6C!Bu/DyǾ=2J#WJKrE!0Bڃ_{pZjF/{GpD5K?H)gTR"ZB'WX2MD \?ǿb1eɊdD(tH'Oph M>t+ś'.)?Y!.) ݻoz;ڴrK[b1==J;&,!MmCyJ! $v%JgJD cxhܷZ;B,ƬX !c !b )t1U5KD W~Ы[w\tu(>.&t]RHZJh'V߻Ǐn}&s1B,f 1s\2 Z#Dpg{xsc&`%vVj,m>9KD D]c\rJ%_}+]M>Lh(Oc'?_״D9O!\9R/#'6G۸⼭;?UWWeDP[ZھoCHx%ܲZGPID 'hZkqxO1%f.R6eZ 0̥lc[VIl7?=C'[Sbn:Pm =-4%V-[4sJD 'OeΖ}=+HJ#Vz*ž[b۸k\z苈8Z}uooz )*ŻT-Ki!B1T5%30=C)^?Z9$}R8O|c+6ĶcPr\ !CH} Q?+}RW>'8D7#Rjjxp?Ϗl}&|lYb梲CwlaƘ|Kch7`둧vx/[?47»~y-p|{WǮǷ>{ġ\q_r&S8]'m敏m}}nurO,,̈hٱ'g76okS[[;\0]/?3Lv2#JL)BJ)ͭ-+0sI LJ!׌=a3j/to?GKZ!b )!j{:[0qG)K4s×?7=CGc JN)Z-%R!R&80G !B)l8K !TFF]3k.igMLiji~_?#C =1Qb!8[ODJJ!SwJ!y%%JV+IcaX8avCݍ1&5zw,ƫ&L/ JgMi?}=wRѣd$˧7v`gwe[WG%+=*1ԓCHb|JNg)dBc&%g !5R\1s]aV1 B"8߾s'߻zj2bؾ;=Mm=Mޘ2R֜yT6KeK-Ē Kc,}pE Y.@"Z3Y_@[)=Nr!4OԆ-q3JD 0mnn2eR':Z75o3coQ_;)?kc- - זmR>o8uۇHI !~O)s+O9֑CD 0~qkC$+wǛ]==~e9)Ǧd^vFiR !℺}oSOv#|B ᅽ뮛}\Hֵ6߷7?zNbƓ AH٫w2C13U|fKblo=²s5p$8b6b#ק~kjjfK)k~tdz?X{+AՏG}L*c#rB.gU?3j(;bhK1 #P+temӖoӊ#'ePb鹧x`Itb pؒXf`+J n9=N-(rdw< eZ״ןzjK;ZҳMJ=+TdƦC&8.f9˂`Ba21w,x띍7\7)8Y`4Nt~~]%F;u}[wvKWto6J !4bJw~JOJ)hYKX4dz7~.4nTåHD 0b2'w+˷ }ozWzi߱c!b#'3%TJC k^W{+{ΩgZRyڇQEұe}~_y%mrY8%- +ވԟ}]3QJk?87{q`8Bjmc{ǿwi 91ƯѢ YL5ο|>tз<ЖM'ua\B.ic&ʕw>8_N`PEr'tk?9iָutuum<Éζ8:)1tZzwCn錅}/\:cAΗ3#DټBK N>iԹ޾жW߽B,?P1cEJ*bC=K1TS"f-Ia.Ϧd\6ڏ.yo]] BF,mĞtsgΎ1Y[6оg񎓽BJpӛSE'4%lK1)*1_f[ !/dBXK,ĔF-~/׍kyD#ƞbjKbxy'߾L8Eή#?۞[=A!Dx4RAf:m9fSf{ۓ;yD)F6~-m̾| ΗED 0 M'}fŗ~ڏ-{ʝ-=Ozm]>xF'X8yNbzos墉78\.-0>?!k6Ƿ}T7`ˡu>ec۞Ka&1&Տ_:}O]|F[K)p>q駿[g0pLmr/^{w?䎖]uNh}u^xEc/|1yZ!NsΓ_}w|0Z*@ƳOw 7j'o[]3qu/皈`Lixܖ|z`7=GoD*ٿ56=G7?tp:UO|]>m o⛦5LrΗ#T8ϾoYH !B*rBmZtBŬu/|#1>J}CH!ƐguNSETz<@1?zՇkb.|9j8̅cwG!BKOG ~R|֖_~sͿucvRJ-zs'PbXJO93K!9%cb!3Jc3 IeKÍ}?^`)%Uο 1ftdS--=-'we節L);WpÏ߻+URƲږ4*ϔ\8Te1+WO)rZxv+0j՟EOH I坶3ЮwG6Ԍ2Z֧*ZNY8KyXDs!VdѵL)W}mPSJ?zϿmyRGQh>g7ͺ)GBg{}EӘBVЛtϥc|`@:D'JC b!$eZBߍi 5¬c/Ժuvu8׾ں:©jDOR~ }LUϿzɔi0h͟|/8)B)pu_/8atVm'~}?–;T԰!}]\/_&eKE04h޻.2﷯ՎN>Gzq8_'P3ݗ|7];r UD 0>?镁!vNqo__?6alٱ聧v5qyEQM͙0oм[H L'[OmiLGYKmwb2اzso_q k;?m>y+39x欮6^ոޱlҢi z|Gg i,ňl K6lP3m;r|CCM.7kRv7*}8X+{:1E.^2WL7ϰ#|_!cH%i,DʈJR!ұ\1qu-llA-]kׯپ=BL)wL!Ē8XC,ddeWJYcHǐMr)4%o|KD 0$|VId)$TAR)2a$|BH!~^|>Ooyɓ1Ē*PFySH1SPR1O*b'w]5y} w"Z!᱗_~uPrZ+x7_dɼcGVPK+{OEN;Co"+ߴ{}{gxN2yv'ڼq]흝[14ต3{+e[FL3vɼy.H Zn]zEm.>qSm !KCb*SHpCJٞ=1Ɣ213S1|-G&dy&5Ξ~/|C߷{STbiLJ lҖx4*ZMh֬EgP9 5+׭[]HiɄdMZBiJILI5e3ܒUG1iv躁EgG#knyБc'JaλSS*VR**ʗ+s1~Les^qѼ8iDCԏyvi#*3DXun14u &O8߳+w:pD[[ )I` *=~:SŸTތIj~Ѣ\.dd ]oxvƒHP)PXuHYϲT(`2zԨ/U gL3DRJ5ɓ2yS0kvܰkwk{{ŒbSBB!1WLcPQ_.%= qZZ"\GUG9R?aѬY^߻oOc?{+R93Շ43X"p‹̝;s$_ih׶l['bi@t'stV93$Ť c_p4$6z wϖc!"˥bǍ㊥s/J &\+u?㰕B$o&% l8&7u„-xV 'N^ptg|iώG,$2аR~~gN^uL,)o.74\ss7۱jJU=SsXCeEszeGrp>Umصk;қ+eX. Z\? -1BaΞ}E9V8?D}=KGTUIhG{( ZLclώJ}fBi˜ɓ1k"Z [wk{ӑ#guw 6qs玛hw~ja񉫙'S h>#ߎY_/R3 eq6z$8u%uYutcLj1$~=":Ui?WVb[q'#NBCy\T$j!$s3TNu$$jNW$!@K_~K>%-#ҥk?>X,X;$ne윆Bb+RFu ]fS.5C8{oɣ>-w+Ob%TtUԛ'}!׼u Փgiu) !-/?v̈o"ZG׮V Kq_Z>6ҙ3QvkfR|bM ឞFGG)g G_{}iekds?N}V˷ǻڟ=yQ< ŋoV Ű61$1nNcP'ekΘd90pfe}:Uյ{1ZI$u[Ԙ-w99008pyrutRrQ{9h_oza!2064|pwskssS&h/ &~5:d$["Zh߿zc*B$IeHR)NRxo=pOwS.YR*.ݺ}ŕ}*T:_~/e# !BsC}*!-s?xR) TZbyHEKR\穙ig4rL_$IBX<.-ռENrRY:ֹKue'?6ݭD\. tم|hÑǏ<7v*r{GoY*%!$~ƒZ'{bdD9!8\?sTCHa=6 IB.jj© v+kwJam#=F=.K9k^[=mŰؐ<{jc*<-!l!: !$ĸs\6,5L==x{憆;N:P/^3=5?_X/CU[0_ävBC 18=<864z?{ 7nlIJI%5Ih!jobdd}wuembf.],KkT?|Zq鸚]橙TͳtS'ۛU21"ZCar~~$!IuIӞ8nơ=d1 ~+W/߾](ce'T^*sb+*[8ʕ UY/!Fz{dž9 ~BUH:Hjٶ{Θ$ўSCCm}>~efTb|z+/Eh*=8T5:9/jki>sjp`Om_,,MT/Bz::5w}j,uX__=sqnJ{I4TWyhG7o^lб#=]-m͇sA$s{yw_/,Caɣ#GT;%/νqgH55/o7:r!Y2>څ $ĊW-n_=<-Arzq=>SIHbt{(OfI%L&~ inm~V&t<{Ѷ#Ox/CjBc3ILuK<1 I1$lޢl@R>2P(o̎νr?̫V8(?*[g""d+%l匔$!"IJ$yn#1GwJZ֝vaRHI^Pg͓K*޴QRl `wןOOD p`'"ݣNȦVnH uwr#ϲRIBX[___im|a{_!ٷ| f"Z~bvnvPK:e;Υ+$==_|Lߑ#uK/Ν[+cHBekRz!vcurvKҩYu/O|}N"Z?"<%$Te|ԋh!ܐ?O?W*&g~{bX*[귯h4R#j//9fU4V=Ho79P?ϮZ,*c$R!~'O2; |Xή U)V@JR+&Ժz.BUNƾ#/yhOoCBD p0G?^/?<1_ʑbk?ybT$aeihmj|1pD8FBk΀|N 666Xյյ[3'oLO/Y5eUvl&{Ao4! tNWc:;3%ݶ^X_\]:9sK{EljunܖTS1[Օ$T4wl&2}oorHk^+C6Ǟ=fb3-u:ZZKffVVTqƚ_,%3 K&_^llhH",:UN+=]1g>ݝɊza}im;]snsbI !|X($2157 vu=;8w?r8V`G<<۷OZ |#\{sho^1=P#*%CR9 ՒQV&KEo +!I./ܽ{czzlh 'O464e̫VO^;ɏC5Ybq*Pdlh3775ZOT*n\}TImd!5۫DŽP^s=}'G/`}ai Ixǟd2H$ ꫿O:lܽVsڽ$Iƿ<$\6-W>˟~GFbVS1Nu/.]]ԕg+LQko\8ug%ookIzcExfUIzβ#e? |{gzzgfW !N}c,Oq*[\ov|Gz{/F{=^ʚ;bOw ԙL&cMKKӱ޾$֊R$U(抟 vu}B\6ndr8A !rr`ӧug|npopozr3 bl7lOrzv5&Ɛ$*R)3wνyc#C=v"81DxĪ8ljmPɞKn_Z+oQ !e(1 Z5 I%eX+ &մ3Ow?){w]rS ύ_`:- wYdZ[Z[ڏLt}0u{bjamc϶CQ63Yb=nL yS$qꉕy/[mk7.}O?v.'-A($őG ZCadt{报b Uz?cUܧoiyu ߿z}sw`x -* :urĢN M M z٩n߸9=V(lF:J@!֚0>$ K++o޺tk|zǏBm"ZS-M<{6X,ߐZ)}<9kKKU;[OSĤ6]ghLR11鰘]vJǏ}̙|.k 8p1c_r>/ ѐfZMO>1:^_[X,$FJuJ!bILG*1Ǯa5g3%n ێ}پW 0~s֟_S'IHB[I<[b>/Bs I>PVKLo%T(a3oFA,3=b\/G?no{!KͯZG#;?rgjSBH%Ocbհ΅U.uߙ9/=7va;9|*wc:{ꄕlhhlxd~-4dWג$RC[?QoLB(_|zttϭ%D !:_ =/cGgWS˷gzTI$M$;>!ư3C*e%T]!P~zq.ܼy6@D pG,Dpo=30+7gf T|\^|k\~϶̫V=OC"=Q379kd;tCH$IV++]Yڛ?趜%^-BHadu/f6hRe$F]o;z$X}Po:71f[NL4L/4^^z̾~h]9u-W)Wo_o_x̕;ՒMq3>%BBXʋ-&!Hhٸz$PO6ص;r1yg=6DD bL!yĵs_!k7n';^jYq+q'w% !6UʮlOGTk!Ӹ}smkO]m;s}Wf:B^?rDf;K Vg&{wlnh[詈I*TvS|iݝxJ=|s}GC+7m -xL,ulǮ5g 1BCIgU>8\1`㠢=a'&u|J3[65SZ>${$ IJC7hU[-.Ͽ䏾4˷ UBJzz\=U1[O}w}i_dW%|Rnnr+WsG':x7Te쑺CLje]Zb\jƻ zl%8X1$&]_ys/'y=JLzsMˮάl6n5t.;n6rw~{zh[ !nTİUc=/Z"O]:r} ױ484:سٳcH7*0*pYIqoJw&.dsNo51lϵBLBɄLSx#PA -'Ɨ>>'Wʮu,ε/^ͷ/u}\J܉d(ugNV!$q;%$wInٞ?\ɏc&/ % B-dB+Ʀe'/B0sd_˷$]q{ĖL5G{䍞oc;-KRU ]K]/W>W +#3?xi(I({J fNC!M?uu1qD.C[qq/ltkv$oͻ醾#A-RD" X0ÒrRaca0$۽ogr$Gll^^Uq d+ʥzҷ؜'BiycfLG0XV gTT['Wad So>1/8RQq7r[O[*b,:S- 6h5fۓcoaY`m9وHRIyEB ٦W>k[^|TH֐%ɬMMt/{ytĭޅSY' ˾jLqO\_xΛoAX`ݽ2B1IS|v,E6t>q ukCK+MKM7 wIR^[UQ̻ C%c!Ɛm.tw\si=6ZJ"륦TTkt|w|bCY+q;e#x%Z=f3#neJCcnemw1Y-36~j.!nj*wy=}=&t>3UKh87Z\[+g >Vpd9BkuZ*3udypNݏmB#K=/}\6qd{kbɅ.,ν~&ܫ%S)![ 1l>t={e[o?y%wd"b(g䅉>7wlk5k>: dCczމhGåFVNDuDzb&V;vjl\Rvmc?}~Z*6%g .*Z-;QF-Csݯ d$[>D*%f!߲o;󉧆OY䥕=u^}lF}VkUk1^>QLD+ٟ{Z8L.Is&6OcY}TLh8f[^^xԚsLqmŋÍ}wNl9:K%oW}Ll#V{5쒊;JD(;28Pq浱P+Q;o%c͟|Seh#O^4/[wK&0i ]銎VQb߈1D)Xdml ;-[x, !Z[1RTRjcfcCϗ5Y|] !JٵΙ=u_s~8.uj|ƷCkJOɄwۘ]hKe1,e!&;ʼTE:"'5&/m]Bbw0sdO|~cWOb)H˾Xʏ%E8?'g WOП uSZBR;x" !w;1:&:Ɨ':/,^IVpJٻW wZn7̵2]ե޲=/8}5h+SMKuckX4}ܿܿ443l[*;'玜븛͕}[W5/8=:ݾxaDW֏^?4Y=۷i?62پqkŻ!Yi]Mӭ'WBR~rr]?(ba+!Mcٍz_hO|bC\Ȯ?$ KR/_Sxfrq%$!]+8[}_-g ã8:˧{_ Vh1$I!$~vD 1HB!$!!ލ<[mCHBcrÑƗou.^XN֥4ߒb0sd֓MCSͽK ,Ucw1eZVJw-~Zʭ=S*dc q3r"ͿˏC%l ak7ߝui !L&ONk;}#۲lw8Bۧ&~ q7Jv%QcLP1Bߗ޷` fFϟ.73#+XژꉡޘRl/;!n8WڊV_1ݾtcQE^)U`OE`b!_o9"~L7;8+6̅X[Rn}_cKp^S_M! *'8bp_I!$I,ϒHƸszCKRBUu L擎et:r+y峙散y#߱yGi$Z?xi@q%Ba#%Oc[atcƘCTKiSSm^R]nٕɆ枻_pOmmY~~ծ$IvtC#g GKiqwO.\BpJ϶owt{H26-)'l+]\d|*X:y/LvT|8uՑo)t7GFc?oMLq-k1>%Qť;[ik?5qħ+<4.NYv={9 vMw\NլXQq&xŐd?}jzVBJN!čbo{,Cؘ`osi;e-۱q'%ǘͅ箎|/ZH7RZkJlPc*Nhh㞉EK"Zψd=wZϭ>}gO6&A-Uۭ;gstU4nbΕ7G~+׾Bb+y(Jُ wsEHTMD ?;#iz؉y*va'HDQ˰H%}`'q>0ɸl'')IAGQˍsOwOuNա^ݙ귞>vA IzJx4)*j+ۄ; 7/nSTZ~7pO.GR ~Tg\Sk$!zEkJjzm_xJy !ӱ{ig?F*B"8^]Ho[."ZV]wϟ:=< HJJKArFX[xU[6&mY~d~6MS14{ܥ?fe1:\ʼnH$ޥ aҝvjߨW:[fK!bFs !IB !^O( Ujٲ&~eKBRcH6onʄ|G.,dG:g/_tܕzq- "ZNi)7}=M3}O_v34%^RIH˓JK qk+wWMiY=r~KQmY-ퟘ:37}nlSv_B#nlOD pb~jѮ]l^ؠ]cKI(X~%55ϵ-k֪t.}Fх #*Y͎Ϧ{NVZ.\>?ury`65ASm{糋c]~qT -Wxua׮ڊmh`myniJSt hLԹk80woeEP ;&_=yl<߹d3PC)4}skmRCCHkBR)Z^BH65b!CSRJףחF;-qH>38e;ѐj1$qrܕBך$BHzLdkJc !CR6:IHB.5mʓI_BȵM(-nd5\i]z AD @#1$qz|lӗ΄T) !rJprE\ !e\l~L\a=]Rl!&'^s N%Lo.fgN_Xii03X|]Z"Zn# ׿D*|ӭt&1V'Դ5Zo8nMl] bw?v}zk{ mI)-zKc]l˚!J?`-{sMk!UۦQnK$riMUdsd퓯/u-Pc|7]"ZvjJ\lCchBHAiYSi8{QMdچgۆ,f.N\n IRvz݈[<~WG|3BܒCO峔+buJ| V [WUC픪;9򥗆>~&ӶR%JP#c ކɴ-M>}9۲SIHBٰsyb0TYM&T&:vepvFܥd5OapN/ahxV皧6Ϗtv8t+ߵJq,1X]9VO*L:B1rŞGƺ/4O3{uIP{s6wjuyCo Ovo;%!p 1̀Bzd#%I*1TMB!ĐCZc`b3X*/M{!$LԳ8 + _SZ jy ~s!X+f/^u,+|)I-5(ա-JpfXմ*ejkaе-cJkY姮]r:}xt 5DUTo~f{b&Tԫ nmsۧҡssCsW{B"24&/YK/|BW:MtuHe֡ʼnk{ A6K6{f-],_cӫ>{e`6ެ1$I1dKr6u}`X!*U1Zz-0 |}O !n}'RsŽCFD 'CH/!&1PCL6RQ6fPJIHBUI,nd$e1IouzI! !VpTϡOCHB:u}WwᕙV)-_xID &Ti[ӹHc ![PF y-!nr1.ND {`u1_xikC}O:>i^Ixۗ/[ 7_&b 1t<62<30}vpu)#EZ'Zf/DWbୗx|g1*ǣd?ov(U͒ {ՏYMc*{63{:֖rXŔPhx%ًcS'[gc\HO]Yﲵ&%ֵ[>l7HuKt}yx85u8g{?v"Z gf>1:t}t`|BCL֟+ 3Y*9,q94+l@Q^yE1drO[O훹ط<^ѹSED &&tqɶ>|ep.]U*UI._׿U$!F̗ϰ5#pP8 <::R5Ҏ/ٖ\Oޱ7Dܟb^j4wX܌WI֣SbT6CSb[ZJ:K쵞RW)XOY ߫SXC_ʃT_BntȵNj?XX:un`ܠ3~Ϥ}lc%nI1$IZfix{CCzFFmF} kCuJ!a Wd޹=:{gGoC4:}- l}/Zo.ᙫ$ɻ?f Ll\c͏['cýnbٹ-UOeOu˶nQII 1ٶal8FN1t8ũCJ٪Is%uxz*+-l/^<6yVkBLBHb ICHB!I*!ĐTpԇrluQ^΅IG{^+%}}S#/ZC"%K~lϱ桄l}YID .זsN>9yhep. Pֿ$CUꭉ $EčnHL]b9j +),1$IL|}dllűF1*>~D%|Jr E8uDnLսoZ\r:SNNHlY^lԆfU* FzzdK%aBmYxjѱ퟽ֽ2 S~'R_:6`c)Hh#A^88ƞֽ&ZeJ5+~jؽFfsɾ_)Ό\难Գt"(ub޹ yՅ=3:MףRQV<Ɲ 6z5u4=>}02uo@HRNyǒZUοC|Hhx$BkבB\yA}Kl׷͘$flScl\ޅSX>1:|ᙆ Cf.:޹&ӴV>6lB1bҨFGLSVհ6-c1zON,M7ɚ4 ' t~^I+el<ȒtqX}tx6_mTHjrN5 .1$5m/lҷx3M^)-grY1im-uD<tO4y{j$Īb%ݲ^bIHyİ^^8 $V>k޾1Kn6NebkR/-_sLCζ-9f~(IUJQ&a}obx<-/.:M=slq3%YXY !XnI6bh*$$J-C 1ƍ.Ʊq!|c}FDK[3cIS񯼖J^:d@bulfi9'n=6hxXaϯ]<2X 72:u֯[j ]xL5B㐕T͞e -<0p'GZb*ibɻ: ,M$>#J~bבL2;"ZjZfrFMMBjQJ ! 1NJvR3^0!TUbUjHXaE !$*zĘTb! !&C9K=c,ZJ+ԒO<1upzs?6v:&7v5&[pBATn=VK!-ThFjJ앞##u!q=6*٬IU*j"^cVEbMyKZƘJ&Z&^ލG;y}St6n 4ި ?"Zhlimi֫Cm۳ШUy o=oq6ҡm||񗇦.v$uAL:M?yk1Kb;X{]jc˩67n#-M_9^9vmx螯$t m y~Jپ+ݥ4#ݴqpحs1$!os>+ke"Zf L96>$BB6!UZהV˳tCMǚ^54U=Y3m3+s]#?=tmޏ]7k]Nel&SoS[>[H_Rny=-%1Y]>{+׶udGB&T%Ԗe3Jafmcnvݶc&Bِ::ujWzF~z֓Ŧb*UNfԬeKJ>F۾锻_xZ1r7$!^{eOsO]4f[VL*#$5Ɛ$5e!l%qfbRwcP6KbI^$C6˧*Y!-\Bq9|n_ݨlu6rrIu˖\cPv>23گ|$1>6646v-kŬzG"Zwb3{o~[{s5*Y*ua%ۅl² [–iToY9puf; 7IWZ:N?6b-o_[x[y/_[ϲ#"Zb^7-=L:ڼ\lˡB%BܒՏUR\X^IR [Y4$!|ybK)B-ǖ|:%1--ŎѮSW:o\[nߑέ<0ҷ8<رܒyQSuBXӠbܸ[ߘ]36;bέv}pT!8RPvdaaګ}}iܚ\8;}cu>_im-v=Y.uomBczN;-|}tՋ{tm,U¿VN^蝺=wca +ܮMmB ]{n\<bD鶞r;m[i7y(Y9/Z毆^ҽg;bq][B_W{_WX;7ȭBWOSK>[7G~~$$){(3m?i^q֞$i9+?[p˷ܬe(*Lo6sgM{BU>#\ !.G_[8wxa}BUmTڔv~ڻ8̪fz-˯2_Z[ʹdo# їG_~bѱxҒ-m\,.ߚ?z{TG33-su8vgqyyY-(%_(7NLur⹥+|~EzDpZkx=ZBafWfu6ntO_n^=2y0?{QIữ0={Bl_IҮǽFK-7~9|'~o^]X*ޭ{;:z;: oe'_8vC-,߼8o#+vK&v7rK4L!Q(-1C !P*Kx]Pfo_O{tu1Bt o?c\L{N}rO߬H6bLĵm^wռ7n'|썗-NܻN[G~1t7.?yhc3Nڇg޸zm?~ٴ;D̅9v9z񱓟Clr?Lm$\եpwHqm9;ޑ~6ol9RB<4|$TW?׏þkJ,--<`TtWO~\n_ϱ}Ce8wm o~Xi5%$D*,v~7Og?H;oؾʉ/}ٮLwh`˶.w=6̇>q홺ܵ2svTvwߺzUcϬ o^Εph`Wj^:8sxמa[~>-?:7vod-V "ZUbLㅶO~x>0oF>§O?ϏНR%![;wb{06ReGo?8bO"-ҹ{N|6d;}O89ݣvn+ױ4c^;qp(!wwz^{l;'OLzL <>̇:ڏ >[?t$ڐwBD $_0dO ӎm\kl_ڟ+dB6h>\rG}CO ϖ={<=PhN6m{(IeJm {?dBލ˸16B'N>vr?r*-7b4x>{$tmoѹs:qMrxK_yqv-˒LZޣSwлKP85ypq&Tan%QD/~6W.ԑf.Ie֚z=2Oc.;{~r_Y[N7+Tq+MgzfuO̿Ճ{\,;${.K} s}!҅|n}m;Z1s#/^\W>]]~X]̹;!{'Ie=y7;pp䯾{n䥁kGVveu)3ukjǿ65s;vO׿}dy6ޑ\rG&?٣!ޅw}ZmtOJ¹]_ /q<οG֊YwDpw%M]}Gr г{W=W$ѦFlL =='No /å=DpW$ٖC3''~#!Ջַ/yNQIR+sF^O?WxC2? !)-!w" 1;B32R{ZRJM\¾}߫~wc#/Hiَކ$$׶ҽo;Ch^wqՎix??'O'kt^JKC"ZxKTvcx~/}e}=|{zoéG'?š|Ny W^C9v(cO>c!矜j֊L^ꚼu?xSKsdi9BtkhTvwzKg 珯b]cǦ»h^CD 󫽇g|BG^-\8\ZM\Y|N=Yލ?fݿ)%{_MD 5w-<5O}Y]_8\ZI?s?/ ]xGCxr:Fط'?1|/1<Еk]!巰ߘ]36lL?2:`,Ͼycm!<,5t{|jaW^C.7s7?:7_eBa߃RVc\S"ZR1U~S~'B8?#{W<,5RI)wrc#_]A-MB8K!,ֵ塇4\S}/hxx$sOysʭrS\wC.%!*5wON}_d3!t/5~we1x˖g>>wȆ-"Zd1]jj_>|m8`E??3}r:k5~cy6l7 -tߑ/O7 ;YY:d-XnΉhxT{iS_g!=+?;'g} l]iW@``4Ď/Nq|]Rb')p7)!hHB}<в"TwfVK<<;~6n{E\|DOl{cloP0wd /!/yG3]7 l_Sq- 6]qq8d>ysC|;[OCz{76|tHw3w.I lݝ84*ZJ[<~r_i]$9۾s3M;%246R½5W?*CT%+'{KCh,es]Y86=:͛}Bi,-%'.vߘB(g !ޭO,GM%8(*ZJI̟rŖ¼}vh,||6~MW^DBE @qD\6]W_(9oٱƁKcI.|.uMWTKE @dq v^y~ֽGv<4ҽtX|3!([v^׊/]\;mtpaA!-!,D*ZNe}f+._^]״vƹ2L@5/\x¼k!"ceܲBh$*Z^WBx6ri%cc;٤2w}H?4T(J5-ev]umGKKtܵɦ!DfLR!a*-S!eK:Jq||~.3ag?ez*Z&D<︑%g^veG5{ʚy_ D9K'F9LKE eƎԂS{O[%5kwlx| ((JO>;e&*ZByXˢ~PU[{^xh~f,Y8(_yӊVVm\0W-vTR]49' כ䰿"IqYee g\pnwចL894GZ8Ue;NxE/ ]۷\kirȢD~ٹ=!4ub8DU]Z8Z}?]~vga>0L~ק8&$+rM!ytSmo"շ>kp Ts\e3k!T7iݲ8M%GJ"[\HE 0Wʼn|S2[cE!Df(AP=q NjC,?vl|9N䈋I GE 0Q"V)q*Z".)~l:iBQY?vֵοhAG?UDz(:ˆVzjwNhPd~#9fPL( -KR*L??/lx#H9 R;/?BwîMk}(DYcR1]}[kv6yJ%S!4jOnIØR~zƞWڥO>QZ3 OM!p)_hDE P`Bݬ=<|~OKM]з4Է`CE PX~w6Y~kg B}˫s GOxR}h i!|woZHD4-81u[F߸5bXս?zy]*Z/ X_3:P+k #*rg\ZC HumOn>BE P0Nh~jw7əH[3󗍼 !~p;R?yTY/;_j0G-}E_BC<s:p*Z¨n !:|o]r  N[.=sZCh/%?m9(*Z8~O:l}eg qUv*s_tf&,=\qێd?_V*..ν骮j ޽A?!P%#!T[gw)ga!ۏO-?Vk}]~{Ao4C(oH~E-4im}.Y,-Y1ߨ 2Ei;B h -swg]/7IYW:O~kC+7#[m1ä(#}bdVĉmsν=}kB`~OE 0ۢ(>>|kAәlH嗮|kC$~6/nٶԡ?F 9ڪ N|Jh٫=-ȑm͹CxMOm]B$@(nZ^K^BM5}mh˺a*ZR/(v\BUU%?k֡8|;6-@ ), ͝KKk|wӵ=[ƒ8;TE/ r'.o(-}k{7͢(F{8x,:e«ZB- [lY!-@W&KZ:O!T~Ƶu[[|dIE PvwɁTU?6“S.m p^|~5)g)j*Zpg*]zms!T&ZFy,%@E Pxۗj%M3KNݍ!4.jڕ-@=zQ) 5M޵j,r(J+*-8q "}MZ-Q*Z'0QE-s[.9oz'qPK`MjdɌ$eB!8J%g_3|ڊKw'Bh29@E PH|y$9|qg tMgںm/ԄPgs`EX%cY"ϝ+]BE[idtQR+pLoP_xMOm{6CTtï~8#QK<|Ch)mWn>s`g>ֿB(ǂlljw}:Kw#6};X(:WU;>RBuIo7?UIMCa*Z8z汓!ԖN/mq嘢(zmrc>|C?/ƒȿ~.Xfcλoa8㒞~!*Kz#",,-@QïdcJX,߹Oei, =xWvWh`onC1K$M+F.!9G}ym.Rs.lyΗEQ|uc=炖GwLT.Q?qWG,:vʹ\BnByq>2_OE PteTRU-,{+Bh[7T u7ır贶UyEc?le(lljKN9{U(gY}+못Ԇ(Fk7b5w !TPUx<5畳pTE$<(YSӐ=늾.o a6糉pT@2@WՊhi; jin_Lo*=\ä(jT_xzEGCZ'eBh;J)BU>ه#CE 0j冏5c}莠dYmisιing~TߵFG`ACXo7<8־qGPQO_!47v 6hP̶_d*+*&C5u}O06!*,=#b[ܴCT:SY9߷ɚԘ.G`&Lf뉝LWu+-!r ̩+B(niRNdӎl֕|FMOWnk5]6-@aL,d 3wL1&tצJ--+Jř~"t&f([xS2z{^LN\̤ҖI?iH 40;Tn7TN<2 d&L#{_Z8NsqEun%C__LD 3DdR3|j~V5HeEŭ_NoP9b&-@l]XC{:yǪ7!D"}MW!U3}S*+*Bw~s55ýS'Ͽ6{8wHg2_Sq;-몳c &E%oL]r}}:,H9hMMm|2޶*3hzUTV$tlDLW~27IE qyUO .C+gĤ\vʊ?i%B|e( O@aUafb,3bbtwϯ +͍ ?zI_ïd+$S c!X1cgCIF/}OU)%αi2Ɏ\:}h>* /|r kSݕ߉(i*ZeFvo]ȞΎx0IO9+:<`p_rn~ĵM\&=!3\-@!m~f^Ko}"~N{p~,=թdR&-{s_dfh$tficvLg7>~*3=]0PTv.~t'#ho2qɻ5LX#s'hphwR(Y'P¾%,Afx&14$vtu/=-|Ez>PdCXlt/ ƮcCh'Mbe6.h55<\&|)i*ZeߎCB(jGB${>^Z{HB4MKBBQSTsGXPObۆʟ磂l}7W^]ݓս6_UCv<[2~LqqhJVQwR^פU8W }U,-@1zoXS# >"!E$Së^m{y|2 F_y݆5Lb67/;}uM'&W_L88M {Y&]6Q[SQ;FYp2BPܡ(÷66n̅0^2&7wL=^yt6(8B˂kV\4gYqTw{eg54km29LSOMOOsvJ\kv3Ce!V\("tϻ= qQY.wR88NF[_XXu+_X%DE PtTk~*/y:$v5Q3_J4xϽ4S75uo+O$B|E-QК]zg5Q4ӣh^oo:x)Edʎ'|>V?l@E Pv}u^e)uTFK,˲LI 9! MON$'9y %pdU=Ax<3kFm}_\s<%7W ?!-3UgIߡ#$/LISj:y8޻)gStR:W^I2vjqAV0lػ_*G˰~U8|b>8v0lnlѴ3UKD Pv=u8uۯ1> +9?=O=+|P5} 7f9q0UG]cQRS_㺻۲5ɋuy+N|&P^&xkSxhWrg Q*'\g~7tBgDADaPNn%IdGղsWtN_yxWjΎh´E G¨d~woOS°/lq0mɱU??y8$µN=o#JQ8y: 'ݛ4<Ͼ0 ]fji f:c5uIؔ3]zSNz[Yy翜i֭qxo(ξ1Rz:Lvs#BgA-@+vFE+^՚J#l$Jx6$2 8hҽ#Nz,t&PSN#wQ1]7{uyϮ-zîAʥp}s\3 ۣOמ<-g J;{ǦٽsS[%9~8ϗ* m[U[.IfsT؞>9w?9o[koMNHtR @> GD PE|[8zڗV[g$t$99H;=} *\N{uAP.'MᎵv'-@)?۶:w{Oԍ,! Rq\,sέf=Z HhJbJ^hrR.XṠ/Qk@5ʷol9&8ަǝ3A']wvX*A}矆AP7NzET¤GmAt$b|QPA3N̋^x]naP.']ݿ5#GD P]r6|(EԻK? nL!bT*%p׆ZNʗ [S?W&0Υ,ahǺܳ9pQh|zYK;GQJ]EA-b\Nl_[sxW\XDCǑ]#2{7>~jhTK+X('6>Rl\\"Z!&\nsƅno8=<gʹRZOq\ HEq]]^AΌ^8G%w%7ޘm:&D._04y6w`[f8=bt)'gN>Ëڜٕ|2KiWǮFq骭{>.&´~KJD 0d;c2ߣϻ>?}^i&a=YgK>]gpmzس}MnlGkl2 qm5;F/]ѱy+Qb?wϜ>*2%Y*[ZvGۼâۖ>blI> \N)K msomrm]&2_pGRaò Vj:n[[`ͅ@D 04a2|l7Zejv&+%33`ֵ;vm̴7GA:"p!DU,N6gy~\C:ǥRipOd\Qّ :OoXvRbhՌkg,"dj/AqT*8+*Glʙiշٿ宾j|rԤ{5~u:{t?3^UC;Z`D'+/}u2L8^rXG3gF}w8z]y]^5qMm0z|a֓:ݜn;-qT)6qjXS[k5G&=6=zl03P5=fNJ[8"Z*,GP[R\ٻ%$~hCo{RA d21Rc3nON蛈 ^޾Y sY^T:sqj&jzo7o~2c]T d@"Z W\\.AEQ\>2㥥R3_j:^ڽ)v:n\1nrgݰL:] ޥw;/z4 WU;bT8Ѷ܎j TdҎW-傳i#]]?$tYc-ig3ׅB)l_jۚ쮍8N9gy~ڂqrG>WK;vnHo|X\ $t jh*Q&r˲3ɥjϖ=[26 ?'O-w?9j|c'h96e^l? o}G}[pmmvl_n?'Z*h*N%v,gF.]>KGGgksg#{2HW4?cI؆lJyN68Ggg/h޵1mM\ ϻX D% q9,9Mz< 9GC%A֒?yumvړGP*'OL?Xiʎe(^g=Q⧽zh}Z95 Vޔ޾>}to=UBD PQl[zk> j { ^|Q- 4T.n[ݷ9}ąF46ū~RY1jl.~,?f`ֲcVg;;BA- y"Z 2en+^ ,ԐS'ZmKmztbFtG}~&sw,m􄨾>wftqS;zL0kqy]Ml[9}4U* jaT{# \*_hQ t6?پfrd$Io 7vӹWv.^t/ҮQuߗt:5nB4;JlY+#ǘGD P!7lH!}>'t|3C;F aag{6e0Iû2_1Jil:Κ>Ohal|fFq8=ּKG3)W\#l/;ypùmό !l:Ga7N[P8z7u#U狻7ۚZm8o"Z+_;5-RTǾ-??v $D}>-ֶ)sK#F8͍wmm }ѿ76,U˵uٕw&ԱdϳGv푠J-Qt9غoko +tTc&HX*?r1 _XWam]vC۷lYk;|"Z+&Knz( ?qg_?}4.8 $)MGkOm~:;yV[g̯JS[0:䦦}R?-PDW^Ӟ]h 645g/kٿ5޲:gSB\oř g_GHEOwwvC;BgoKU9v+Ϣu{Q}{œhtjw淯lYP DWD2sA<'rxsk \ɰ\ mۚ޽sm)S\țˠܖlEј L][hѼ恚cպT -tiiر/ ˷ǖ4;7fN.,X9qu;l6}=/س R!\"Z+`Ԅt/G}Nrd=$ѽ'~\}MoMTU-\]Z:i˪ՔKAj\3 ;ry3ӱ<0o|¼Ԥպ\tZD:zppwߨݳ)cTk 3 3w\w[8qNpփ;R֦vnb.-xƎg[a-bwښk;7dNk8~jT?Z~yצ#Qe..-@;廟orєK?]pq~k',kmk;g퉋yA-\4"Zo{>&q˷E[WgwnȌ_}~+aθ1sm=/DvLe.r! }ѱ/}EXSDQ4vb؉7?T&HpADjߎ}N>$CS[V޾pE&w:tKnYrcp`Oӣߚh %2䁯pŴD.)ZڹBL*Wt&5ֽ[Vam$/PYORܶR\q蹧r=XUE5ĩ/u|6ؾ>]ȟ jKTOtYu$=szy׵[9%__]Z7=޹1r*Jߙ@8}'&Bܐٹ!ΥT9&5d c[wO=\kSX. jo"ZJQ,t!/)m_پ.3ifaņiU3nlCd%z: ӃRy:PHؑQ2e΢1[nM=DΔTO\klךͫͫ2c&W#XkS:uê/e” o ڶwK㙃Rł<h.>DdAfWeI׏*_ss猅S2t\]S3v` Ń񙚖\2h.|{o <\ OU).cLt687ֶwK}}jT!/~h@Eho>9=nQZxCǔQI5c'^Vܾ=mZ*Hxh׳ ӊs><ʂZ2Ԃזli[Pf)KD &,wUn_X8caxƢxڂஶ}[Q$F"ZPrt<^H9%/+4HF( 'Ϭ<3?eϳ6:Z";[]DPb>ع!ڽ)5vRiΛTf,08m2Zh*RxdotdojɊW^[=0aZn´`};eM:Ahk+Kz:|5'0¬q&[M1r~WpO_JvlHDPK@U*ͫ3WgF)Mt 8ضm]g[ä,h5O}χY9wya5UT膚 {k.?/OSw]~8[[59Fe#X|cqCmRlj+JD ϛyQsOpρh<ϭQ>tyUvۺ1%//^Z3)W-`fkS7*X~{ L<Q &j4qҰ׌uwov{*;Mb`~h.~z@]mz5W^3~/~gsUrx7 1BxP7f/-YZl*Og㗿& Ɇ=D0R f]^?ۊpH?{oY1Rt7eBG~s%sG] %xϲگ}SBZ*^̯|(|Z35I$vrբ6z+>׿ sw+OK._hѵ[ۇ! o]cڛov?|/RMA-ALJ޶S %+ð*߿Svs.oؗ^7o}Bjs{_P&Ix`ӯ~érю*~$3r$AKJD WƆatks>~knveH;Cx8\%:ZOd? N%Z.\o_EΧ9,[QU?%Miy˦\}U@B{sg}ݩE•tl/:-\~sF KWlyL3+_y;kL&r ;Z擿_ϕOꨊG˽=>VjQS]DpUɥ[>zي-涕 Clz}Ì)|#WR1\hPӯWEQ#ɛ~=WWKpO۳rRi,1esxM r]Mjܬ fp;Qz#s1U5df^S0=9![Q8}QmӯemM@"Zh+~uiqJ &`Y#6n=UQ?sy!#9/ozjÑGlIGg|_sA% ï;_[9$ߍ&,?zs'|WX l[9eהN蠖So`ɎkkrADP;J퇏?觿c1εVZD?,?^u(IkY(|bڒ_e^7i|ݻ~q羵e0 ?_#VD~/ÖJoN8?peyוTr VfFkb!_JG5^|-6"ZRJd="[9Sߺ&Dg6z\|Î}֕ꡚ0k8TNfS_ڻ9_UafRZLD C?}y@צ+[kD;~Oovo?6II¡z>Sq ;Zu?|5d㣅 rM_TZJh`ٲi*%ۦhr9J.$D_xEP=TL|'8a!ݚrdyR\Q5~ʼnKh`i( KSsB3k=s"Z]* 8e/~gE:8?a[dYTVJänxrҩ*S ˱SPy.ϛ1b>Vc_3D7rP=Was|_ #Se&>^8ur {GM.٠!Mh[NTBw!Ѷ=[.z1$Ik1xfZ }( }a Ɓ}k>Ҿ-2b\wGD0~vYx%T~3_RSNv ı uUwfOA;q8~GoSl]]ho.\z7f[tlk'!o]0.RgTB fhb\zy zp͸;6-շ4fҡ 7GWܷ?Lx75sQؘ~h`{g ë5x jګXd ̓x;9r<{?7ָp|gs{}ct|o番du;ޔ)-$`_|5ac7T9 xrݑKW}͝@{iQG+?~^I=K5"̇wA SB{sq+SSmǹ,(Lt."$o޷sߡJ?yIȗ2x@]6Wa0qiB̿]>lxM>hzU'I>Ks_EU0깝k˜*=Oo?߼|KT lMǿf-OKex[~7 ˞-oO?OTZa\;7w~lw. Cmޣ,;L5Ŷ[)"./躺wwAjqQPrGR ^hS$dfsv9c3ӦL>z>3i2آݿʥD9CF~Y{(]l)bUuUj׷ #هV\o]/&_Jg'8VYLs%H\>g[QY0-;RKn^rku]_FR-8o5W~٧OU]Q:Jb֤'[Ī4hj,\u ON3t8>TyǜQX0>ņR-Ddtλg6utl)ϗ*+IdþpE>׍p86?UyՏ,5g_0bM<+O;vRLo_G4HiKAZ3,8'kG !磿-cNwF*Y-hGUν씺UCL)fMV7+q="wiݙ\$}ɾi FqUۆ|=V8bZm2}Љ0޸'('JE:DRےg\Ҳ$rlj?~ЅQtACM$Z&Mꮎ1 Uܱh殁<9W(H}8}UFHP.77X/\xygQYv2U蒶L._Vq<'|mۘɎ]f$Z(OdeKM=alz6"Vw摃Ds/tYZa14dD]7z߳f/$Z(O[vW誺 CЙ-80yRmLFzvKG~D>[BWSϝ0q\)bӝ-Cp|rrF1@-҇M-tծ֞vSkfE,S9ie)UT U.߱9.GKܺ.k!@yCj!q\(~71m>~k1'ٶp~&ߚnߩҲw-^;g(b'|+6mݱdt_7}|qߛJE߽dfV8~r57׻eUu5[N|ӏgvsCg)"XJ&o괏{z*pJ]]swV܆wt?L9ck7QKm\0D e2c';^>'mޥk㻊^<ɩC-S'\/YMS7^p#\:Bʝe ⟨0Jy?ʊh|mU'=#%}?ϗʋ.}5E&Oۗ] <ָ7Tʩuf9S9uu9;^i'+oP2H.-}F"@Igt`(J?. U1gLMnx{7ٟtW_2ԐܸSFFD{76gJjKvM)=s7gfٚ]vw([Ta!-hgKpc vו2ُ}uio_~|fޓi[9*F8rգ{za=JmW4gFYY߼v}KDyx`~^D #W~C{n/޶gKgK/{[qx57塿/ڹ1k$ȕyŲ+w>8q۽.R̖fqs[7^v9PRi$O,\Tp_ mi6ʼ{63y祾w8́2в3u_N? udλzg}yw?۟= 8z쒹s~^-Ъ@yX ^N"w4uWX}?sj ]NQX۟5JTe,ήM]KWߦή2hg2}M67tp, UOo5#2p'+.ArI08|.wg]=ٮ֎LCc3woji-wcQ8i}qGO7f_[-|e{O4ͿoSCc6prHMh~|S`DqGMϘ0qTJ%*LvKC3[v?t֎^Äe"7Q"qФ)u5'Tҩt"e3}=Zwbh'==F/F"$$$$$$$$$$$$$oo *i!-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A !* endstream endobj 138 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/JKU_EN_noName.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 147 0 R /BBox [0 0 554 179] /Resources << /XObject << /Im1 148 0 R >>/ProcSet [ /PDF ] >> /Length 32 /Filter /FlateDecode >> stream x+2T0Bk˥kO4 endstream endobj 148 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./JKU_EN_noName.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 149 0 R /BBox [ 0 0 557 180] /Resources << /ProcSet [/PDF] /ExtGState << /R8 150 0 R >> /Properties << /R5 151 0 R >> >> /Length 2912 /Filter /FlateDecode >> stream xuZK$ ) [K^j!m|~rȖLr=ߟޅ?Ƿ_}PZrw-H Z/ZHֵȿICp9>.?) V+~KQXUvojW%TJu+I鄜|??$'.a]P8R-Dkr"RRsqjΟU?<"eJӾxq"‰,dIi$ } 4wYIqmBKe ] 8jX{K.{h--v-o2\#6k> 1\wEvKԥ3kOm1x^~Ku_5Z&Pե|JrkLؤJϹ̹< .Y_WC!#ѥJ4qq,A3ău4Z:Cpt"k06(5fƅQltH>U f&Ӳb,ҜRm0oiH5 P̈4Ig JJl9TsjPܥ-8oWF hە@P/j͕9&q]alӨ/jO QCѥNC XŻj` )/ZPq J Ϊ o?-ƆiЬ/in$Dq`6V(~!pr 62rRs yvB4i%jyٵݽ{WZ{ -vG'wJ4 8![t Sp$I'nd;W,PyAL^(HEOC❥Lc6bm2hs) `+mҎ RkZ\ L:exڄ|( 0XꟜł{?Vy"[a#yz[fPS6ϥmu M Z'vz(KWӛsED$\NBC4]57\X9y(iNQWdCӑ5?U\5 Fi@ 2%zZ0xi%c7`E$N+D1f0MKOx(PA Q ^mOljoJz/(S<=Z PSa^a6~g&8k&4hUR:!{TTbw`Ÿ/4ΌB}=or;*=_pXl0ń X|8Z{>n򏠽]њDFj%(,ocyO Z(o45axT\{o~{nP~E? yӚ!ՑqE+seGB M,BW@D (!Y$1k3oOMنX~SC8mƟ􉧗%D> |*͝ϳ'$Mhq|羁2J=A}fٮȢY,@J۬Oٍ H ZʍʄY:Ԫ2|ʩ1CQDXvȆϾ1-&ղQ>?p{Sjă7[5eZԇosT=dJk-jL@XA.6 _4TmT9gSK5wT]eb3i&FmɬɾW{hq.9~=pi<ʋDְr+cpK(8[]Ak@ E@>H+SLǬuf`,U^26+|Ti3}E9<>Zowj-}drԍt"N2 q.&LȯٖY=|lrcC7nm~F DœhfBefy~ʹ6 AGen5Dv޾>m5 ZxfKxE6+AYZ~xז endstream endobj 152 0 obj << /Filter /FlateDecode /Subtype /XML /Type /Metadata /Length 602 >> stream xWn0WXZ [,(Ͷ4%T-&b0%k= 5Y*S.7x;Jܦy4<~?Q\uy[5ޱO擰!MVdBSd2HY -A]dG|NT) ! |^p0(fnY Kŧ"kuA l6sTy qum\ΫW-Eϱ+B*mLW֑eMZU0A!T4qx=l/RvUrueRp7ExDYˋ`VfX4_P-"o#ƳkɿE G VRR֕.߯/;{xbu[":pyr`#>c6 Y{/3敦9$̨>- 2^mTKE9Pmmd56 _ξ|<\~b -(9;>8$ #VG9P?ϔspsR!yh 8ONh`40 F7 "7M"LD endstream endobj 156 0 obj << /Length 725 /Filter /FlateDecode >> stream xmTKo0 W('ɖm:aksk{P9H+Gr>R9F'_Yβ5l;Rˌ $d)vOHwɷm7 +iO3#{8#,+򒼄)xSnC+akR^dyrˬ5b?Ӎ*G<ѳPN~Dk瓶g0EF6jar^VEB1z@ u.:FYAG|έ _*L0>,H QΚW$tCu:3_Vgh|ovꝅ)V8Ԏ.xs%4n҈9l/pgőAynB2&Vj}+d҄kb0*xc;@@d70BankF,Ūnv) eTiiXk_HPbW`&U z30uH;j ^_o I×p %nG/bCʸ >O v/S4<:*, ?j^?@Xa=(]?QZB>O٥Κ>W7b`xy7 6^ ^Їw1o{ JR.U{k 1= .'h zwu;Yxy h endstream endobj 198 0 obj << /Length 1290 /Filter /FlateDecode >> stream xYv6+$b$㸩s4n,` QzXdX^؄AbܹsgF^!l<0 ؛- /(fs?NU]|!\&_'搇G, ̼|FPhO#<"q]O~}E, kQ(Hp_97%,LyS/ p> s&|6ͬaܚ'㢶E!,wwhļ)!F| riS0rtbMYf f6hĂv%^.ͨ&U4)>s^K6/o Scvt:ߘV X6ߨ˫ yɦSsyDibn _vZG-V1e[T,d؟VD<˲.U~0 O!Pm`: Htp]+3~FDSUv2kW&'H5F2 o%1@굂sV;r 1~sNx}&4&d-O NlZuA&Sk.kGǾ%kwH2)2Iu%&7Lz7s,\ Q0z+ ,W얜)Ic VX*#T+Ĩ@e ؍+=17HSSe`7lB͚(pDz?:bw'm16Jv0ӮN~}O9Q Uަ Jս&4 #W · r]l݆fF~3r’J.LUᔝH3~1WBU1TL;4keFO0LqL0C`0 J?Y@qJ$Ňs"?S Y;A-CDrYRU>Yv)GiwbG8zDtacz5Q1vq5rŴiʍOTCkW]n3[0=j0v ϖ\纘FJ;CJ!x?ͱ˶[ظPA,1ǧM5*窔 L`QcO@M0ԎOK?oxw6r+s2z0 |u׋_o[ endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 808 /Length 2276 /Filter /FlateDecode >> stream xڵYnH}W wv:vx'NYd71ԖH<~"[đAd oUrXM ƙa3˴a eUY].qQA9_@u+znFibΚjd'uq\, ;eB1޴t_܄bUFY&l:Pf 7zkV^^5*ΡҸ[fƴ./󂂷E6ϽY0g5W:3I^pHL),+#N7NlUuӅ,WrVN1xXǵyҲ'YS׹ _\]Va^7@i -b]nyeջ~L;Ȋ@~ <}d,+6__U-\e W!kB ƷެϫZzЎP.7GCUN:91] uL_bN+9PB4FaƮ!w|O7 w?RBh٢$jhObš-fefq؜^/I<MȀx6(}_U$M/U֚ ]: ؿ=VɐV *L-HTxbP P!H7D=&f Z#͏4q tP Qo XPc$9 P^{$Lyy>xb81^ l'_DϏ,I_ ʧ,&38ҷ0۫K|.v9K~jp NIy-hãlVl6ʊliCM͆J0ALVLdifxFyV|e_0>]Ꭵ;5{yUM=EY^ _IOSMr0/n ']&Ya-hd *p7nG :l7!H$vzʨ$^SkR u^|+  ߿;9&5[Q^e2ɚ]X _:Q*'rVt2MKذ 65Z.w޶/Vx.h# ini:  MCR僻2~7a?yk*[g)L)[|Ho;-0yjP*WU*xwRtXY?V iIwOv zw4h1Gs5"efwb< .myz1ܷTZiؚo1HY$UO.F[ayӿShE}+@VE6ՠ+m ,L* }*=DRhjiQzJaim>oԮJN-M29Tr[$ endstream endobj 210 0 obj << /Length 2625 /Filter /FlateDecode >> stream xڵ˒۸>_R>]ɺx69>p(HbLZ} J8e{|FwC22xuoq()rvd&X8U1Kez<|CQP훫^yH(AY+X{H$xp ұPy :pchO1kby"+UrC#i 1liRXdQB vII>+8{f؉Hģ9[m1@s\$ApyW1Yo"SH4䨓т%ܣI*WsVH+Ř`gr .u);K!餬B˨Xj8b(Fi] ECHJ; 353=4fq".Jp\v0YT\9\^<9uhZt.u%cИOiZu5OM*odSNNE'FX;B:sʇFatc.&N1T r0߳%>"Mlvw[iOXDslBmt輸/o^{UAi e<LKr*A A=)Nx(P6@ ~'rz@&*T]pc~Xr_߹:n-H[pKŒk/u m/u _8y2"eѤ"t<$qBn: 6^8Vmmg!yO1rlٷb f,vc֮c{ht; 1 |M0yy/ߍ=}bO:1(+G}*E6Xw})40 okyI& QI88qO3%"Ci%s rŸK:.^Fґz]Fip- nrS&`®?bG߷EI}xvv+qp޽(~Bø8Xѹ7cs9&=at^Z<|Hro;"u}ǁߐh\NѤX`mXX4(ŸATZՖ[bб>P(W1X8GdR*ˮhD7_[JIMB7$ƙ3LAX} endstream endobj 223 0 obj << /Length 2400 /Filter /FlateDecode >> stream xYQܶ~_!I x$ERޮN;H|h8AF;áZWj@^pDÙ$毱gDp Ҕq-s'qp_hޯR>oWkޔRx7_v#` @%"(7~A M( 1P2f"@Wۛp#DS]%: HX&SU0Wn_5+u%CObS"X#?չMOV"d0Yu ٍh]L~޶W}7nQ?ͤ\s4=&e;vvzSkv ,M==TiUe?V F񵻾inf g, bYY-K 1}S`KzT48򎪼4&s[j݋\iv6窧mq XM}4!ZXHi&?޿Zz=wso(J2f6,P?MiT5',`Ng+f:Ѣ~z0P)8Cr /a TeGN=F(]f"!@qpA Y(fieۭlwsםMdrY!oݖBl;ؔqIZ Dg^ݾ!DŦu r5M c6(&s, _fi_8MC\\NӾ5Xa7bmǎj.LAyG̊JP1&N2ƃP #L<~UvȺ"1Kا | 9R]Geo;6{Ԙbro|{bڶi<sq+cv((Ҕ܈Б#ʎVybr/6Q:"|JH޹(@ݹVI0s,-Pk0$DuY"yz-pDhZpSSiiEhMg98zEX+f#Ev7BW=u@o-c KFM[Bblh* +Pn2bP[|r:J1//K\:xr'8[N?(3L\@Bԏ.>!  U5C>*T{]TQU5{Ӷ~t|Y"h7YD5'Y؋ީWg)FETI/7֙:1j5~=U>v;ی.|`֐Xg(Pza FnzSjtY|mX߷* endstream endobj 237 0 obj << /Length 1862 /Filter /FlateDecode >> stream xn8$5˷Ehv=h+Km;|HwQdsERC΋q&8ZE8z;bH"QS]\FJ ( )<a1/8~kVMc33pDDDzo}g24v}54JF"QJqiH"f6]Sd99Aiҿ6"efחo8GD@CD@<ܔ.Jl+ZfQu4Ɗ^|e[}'q^m.Jݜ7Wībue"ZE z#g@Mcu݄V;^oJ೺j4&G?K,~DH+sWIT2"ApiXue T<.=?h+] 퀧ZEb/ɠ&؁$H%*b(Azt~h^@@_?~ m]yєaЩjWgQ1.hhVѾo:o=სMT$R@ m9#$<`E.9HA P1zw0od&YÎ G';c}Z8~~[#dwp"lYTQ~VMU7{ˈTXXev=Oų/||؎a[gH~ r.+Ic~+Ńw?\!Gtگ/ Q)J1 ֳ3$R,jWü0ݚE_[d1ZbF)t:}+}DP> &+3;Ԡ`3K gqklMEFw^ P<\HSnp3v49y5pl.fl y"Pa>_LXLb˺,kKw@4Qd7H:!U 1SmD?->ʬ^m-7?w''w]/70wK.@X?w*lit|} N˾:["*+wܭݴv Qnf""כ3&U7~xmn'7 V]-Xع#=R:}9c|pߨ <XuM#iÑJ0s՞,W{QTX7sU`b[q&Y8. Lhd :k^M)D1݊!Zp O⓶U|RhkڌnLwVQԾmevZ|Ӹ V,7Li[]Af]qP煥83K^B\Z eq]مmMWx֦%~h4͕g̕DòeO b(ءȤxS 4:CRS3Łj+s@旱J٭\MritnK޷cmI(lMx c!ĽDNKS$({S0!my3]A7 cRSqxٴ6[7c%[8m'qd[V>>nW'Jm??/}qCWEv. F6@W.NHOO 4 [=P: #2a?HX0q r?Ǝ')?@ؖ h*ŒI];b!Si"GC`/G(V endstream endobj 233 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/CreateDataSet1-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 241 0 R /BBox [0 0 360 396] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 242 0 R>> /ExtGState << >>/ColorSpace << /sRGB 243 0 R >>>> /Length 4022 /Filter /FlateDecode >> stream x[K.N|VvJ s$UBY:+ݭ3|8㫼~~׸vy\Ug;F}׿?>KD0$앆`݆ow7Ǡ9!1ΣvbѯG}<@a;ZSr#?w~YZ<KFpz -`A60/ 9}aNI;z _~Yllnk?Y$iǴ-h~L[0 2y?\"؎֔^<zEw<]^,"A=||ږlg;j{x_&OVj{ 4ސpDJg+6f&})KW~*R097yU4e7}ei>QS1V} cgBaW1j]]Tupn^8M|W I?NM vӉXGa=\"؎֔c{s>5~gpfHIU]fysp a'ÏUmŵ5.ہu-="wROk-ϳCTjp<|y:| R?|$zpcivzE77y.[vwlXfgx=61/_.*y*R`g)ٻ`<>{} gB,׳Tw1<OVxlSVjI- kƨ lM찴`#cƨ{I1"&:w$Fa& `n '޸kH0|x:N'ALԵRR})Z|pRC4$(慥nM`Fݑ*`ؑoϺѹRkyH)A Mq[}oUčOݼwɅPi7?ruY BQ$5(%O&ct'%!T6Pfߡ_7Q=Z$!%5/ ;BV4q!9)JSZx#듻" Z3wrqEb׳ͳ )/%hMI%\KcH+~ӎX^ثצC ءNM)S{,Tʹ 3]3rSK7i{qe~&31NQ#$n| u ZPg_+O.(J}z\= )F >"s޲p`[W7sOyOہ |ᗸߊS8[%8B= \!a R,%-KFD+XGF5M= 8-&U:J:I֣:%h=u%w ہu-}Ց a6uɠ<" a*c7q"h\v~#%sh_fm+RH5/ .lGkJ0=07o 5 !lCn`\E4)(YkY_o_~yŻ{ ͬ1͈/ `q(@(A],mDZz_yV&hwg>^qѠ°GPUݐ-IAқjpiᔴ8FDs/KH\"؎֔qG)zx/rwYw4)A 5#Dk}1-%Zj#@FE[zEw< 7#sO |7 b }w_8>%j?)D˰A@њ}SO\#%4B .E[$H\U$n6~y)z>8/E2jX%kˁ4vJ C:%ђ-myw[KB/.ؙ=y.LD1U)+V1BC8>(|~oB(XwI3,J|CwIAu?7^¤q+a;PK]y_QI7eNky 2%7vWKjB^lKQI)Ʌ(lG/rwlURҼ.Vb'XwUű IQOűT_~?k 琢 )8q.<+%)QzAUjBqbtzK:$b^Nہty҇_~o~vYIZ6^ny,!V\IJFeg/rwq˔_UK|r;֗ V `j \J$޳xϲڕOj6_~v))>< [ ׎J\S%I,(+ qnY0W҇_~kYMV?{'7K;,uQ<X\+jyt yۮS޻$wrXPfXl箸#m̂7oe3v}+IjKpA)*+}+ySR==Yeȫ~?dYWfF.Tֱ)[zr~4/V I":\n;2H[zu2ƵQQ c.qtK (- ϙCI0?o!8S/o 1+ #6#ʪ1k|w@}-,B%pHT GFIe U0}o[o9QpG_1 K ϭۑv z/~+ICzI.A\W\HafGW%zOHK(Z˯~[ςdNOAwkz7QjbXK# 9 x}TV^Oj6_}jG}'Ո6#@ JJDhrj>s*7oǸ7E<|z"/X ˍxgo`ވV|RԆ7mj*WM`H!`Å+%RJd=S/|-T>OE:sb|^FL5Siz/~oA9+>]2{hlB wM}ũ+zB4%{'vӯ~[{5Fސ4t o;I}M;=Sr^݆"~-Q |}o^zg?]mB`[log_b8t3ߩ=Zܛg 7۶uRW_W 7|tW}hmzYe5}Ć΢.Z@Ϊ>.6\[29H_[U?# fQ?l> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 249 0 obj << /Length 1037 /Filter /FlateDecode >> stream xWA6 WM%.6ta˭Měg~D9Y<.DOM+ C<^p7R軟dRӅH*ic+s>R]޶f9hDmV'FEm>'Ih%@$V*L3A֣;r`,^q-RGR<~"iv-Y{ʂp*)h:A+SGNbͣۢ}Im[ZitO=tMpg[z<I6PV}ʖ,{/x^|߈.]91I*6j̛[Q 7606ao^Aф<ߴy͢u[-N36_#+ŬhϽl:O2YU?Seڽ L5iaY-6L04:?Mf!{}rq eF;-MbN 4_gz/יlKG ٳKhMt K_S .6 Wny'k2_O[`}MGVnSզP7\eݵkfF8Ln}].ʬ.ڢ #y<`GO'1W9҃gT P1z\Nrʊn\6p=蟂cw6p ^LV^€ʄ; $ i@qFF4ȵbz4ˑצjT:f56aQ=W}Wc.we>GdG@0 aHa, p,Wylf,lƲfB=ݠK;6 Roʶ\εX%UlٵFFM\5P6a0ٖUV&U],MVLK}XqATiI %G|'+?5( endstream endobj 255 0 obj << /Length 800 /Filter /FlateDecode >> stream xڵUMS0W(`!ْN[n@nAIĭ?m ]}Ckwv^()@N~s"Em%b(LZ(T JhBwxfJ"_qMeoGݧx4a~' (bz\вI(Z A<& =iGq96SDq ͥ]1!BQ!bb G;XzH٤;AY9A.r=j n<3g] ] !5Q? S!0x S&e؏ivC:̆^K*e84w( u_?j{p+mѽź]o4 қ,-ukwƭB̈́ ոV]f 5&*J$JpW=6z*_U*plz a c!xBĄ/Ug%'C>}>s@検6 FX27hiM}DN=D@%pEaJzMCD35~@;;#??|ZHɀdTAR:T&Wjr¸xUV!⭝Ya bdjM=휞 +?i+vD 4{vE?N|ʫfJyOi7qQMXǔyƵ(c6l%FW|> /ExtGState << >>/ColorSpace << /sRGB 259 0 R >>>> /Length 4492 /Filter /FlateDecode >> stream x[M-mxr髤ڎ0y@W`xya>؋I%QE??Οw?}۾O#Yǿοm;϶FOIǖ)oey~"_ .|?9XF~>VʣǷ溿Z1^@yvt.v/@K/.t;>z>TsbNi.iYb[M%Ϲo{9E%yi,0Dp/)u/|k1샿p/9 /kqp}3I4w^QyŅ_DrOY9q?"=V=O򴷘叏x>(\G*/9ogpꖦ+j +ۊHևmFkr ;]u4X~đpޔc;Z%uk[mrW3N:g8ǁe:e{l4K>,Fkrt`gT.N)w)]Įv3VʖzQk!!Џؐ+gGµzS2J.NxS ip\sllW p39PcYӜT%[ *>!8nK`_!b*^hʝEN3M\űҠ9ŞB9Io\)Yg\N'sKy ݠ qa݊Sїsj-|nnbtiɓa+_QÓ]aETSߔ.`_V΀fmc;PrҍK~hv,)׍ևvs[6(H7(Fߒgmَ]ּxnz;t ;X2ea, c%?p"sq#l5W 5rEj sG)CΥ|j> J!|^׃\7Z=J MVM9"v[>vhXBB8gx"* 컱^ ,="9+ά}_rE׻[<=F3ۦ9Tb 0wl 0p"(FU,ۤ5RZ[f_q(LRm8[E|I}TQ N 1Zoiް5 -=|ԙ0 +ÂS-H~)fߔ.bW5/IW%i^zy:4(@eئy\NZ7In͋(Ru+'nꛧ9q+R,ɳ{1\7ZSNl5G_s~vbex^x>fnUe[qRyazɳo5taynPy ]o9;Yl38時7\Rp;=YBnXQ#'{ujγnPIo]63nTR 28նY J>f}vZַTǦɪBIIOq= ,)+bhb++ JQv }}n5/f*Վ۾cIv?H>lKi^S1;uk^7崋Uk(UIWLc6>{ؠ\|d^p^bw)͢휰˱v[f/{8 Ul9 ]memȽpXRt3tnd}K]^yuJSsonC/yԡZKp|FYa\N7崋nd?kL@ ?Ok.1,6Li-q$61,gi'Vp?dilHnB v%~| ,]e(qfF`ϥDq]}K][~-υ9vqHԡB˱w2ZZ?V%DnhMW`2ݠAZߒӮ`)גҐz1huʱq=EUg{,v9TAa)Js.`_V~K$^q|;`P89b XQ)08v}U=}fr-^L(st;X/fbc Du{%>Ċ 4˭[=z%@rJRN<8@/NWyWfq48 UBk n}W9=,Bd_X̰?4" h#up[SkEzoS5X}#C=m)eiNҷS r"4; M9"v[+=pbӇ#&ѯƁ\ʀ؟'VMŰj=eDposH) g=.#̗)+YOYDH5x0H;G*!]ؽ]lt;ľy-4Q gy]WXQ tNX{[B7.`_Vavȍ.[͈;+~XB>gI% _XuSW)Įv۷ܿx3]W^%Mx^=ީGx>}BO(MecڻSQPvB} [|WSxkpch܋߮^nDy;ܻ%%nIo"!oZ񮊇0~G۱ӭ"mܵЍGnZDw:TAG-VݷD%uoa}Lw:އxKӛ{jOw TAu,P3y7)1tn{:;x/ofVcy|A[x(8{)rn$ox2ߩP[$ o-dyOܴd\Z> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 252 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/HeatmapResultAPClusterDataSet1-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 262 0 R /BBox [0 0 504 504] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 263 0 R>> /ExtGState << >>/ColorSpace << /sRGB 264 0 R >>>> /Length 15196 /Filter /FlateDecode >> stream x͎#]v]S8;iZh@а@p0QɬuݫVɌX<yzozyt~?]߮ן~o~Oo~?x_)oxYv}0oyE0:_nLw&ם|q?o||2O ߯}=n_WC_}]'D珏m0ӭ;;Η@;_ݑvC|c|||wǩ;ϏGwn!xtgw^η\!xl4L ;/Gw^Ls^|}te;4u;4u;]7u;4u;4l;خۉ9خlDllKi?+\vic.c3uyK}?n첟]T3~bvQ OR>~Bbx%̞G Oi~rju?=up?A5𶟢xOR OSOT |yn%="|^ݱR\Kt{>/zynE=`}^yinŹ=`}^vDw~n2v u{^}^yϠ=`}^yn煻=`|^Cz=4|^Cy?uط FNf:~~^~Ƿp?_7$#?I}7x3obW#oyW_Wӯ7ȿ'̩_x;.{{Yɗx;~w˯xǿ>k@`qkkʰa1c_cߌcV1vL+=_~c^;5vL,}ҿb1 cl[;o1v. b:*}/ `'ŎcA=M1c `cv^g56)4٠lCwa*f c#eC?X6eCOi.zNS<c,]e?X6e1 X6bc3F ˦7ۜ~ҹa1Ɔ^͹a1ƆF66656L1n1l3j1l1l3j1l1l1l3j1l1l1l3j]yaİaİąaİaİąaİaİa\0fSüWA Shl+g tFt`:SB0)Fh}SB2adssFF0>ad`ssX+bdcF,02Ɔ029`ccad`ÈaÈaØQÈaÆ1ÆÆ1ÆÆÆ1ÆÆÆ1ѕF F ƌF F ƌF F A c0چA S(hƆy=}HXo)!haaKF00bAjzjE֊XP+6kE֊XP+e$bjE,Ajzk#"kE kE kŌjE k׊֊Պ֊֊Պ֊֊֊Պ֊֊֊ՊX+bX+bX+fT+bX+bX+fT+bX+bX+ U#m ZQjTBj$a}ը`ը`ը`H07!Y5VlVdF6WdF2x?wWdpò) cR,XևlևdC6Z)kJ11b\+;kj׊J1b\+bX+ŸVqZZ)ƵRk׊J]cVqZZ)ƵRkE kJ1֊T+nUZ)4uV^Zy0 xc0 =X+CϵBi׳V1Z\+B/\+cO"6a#֊8fsوe? >X6e1 >X6Aòò1ò)e#ecFe#e#ecFe#e#e#ecFe#e#e#ecFe1}9% {z+Ȍ*H +H +Ȍ*H +H +Bd6UYK7R+Fc+?>Fccm$H H ȌH ۨFbXAb;f;b;b;f;b;b;.5*}Ύ55* kT%kT%kT%kTרJH֨dkT25*kT25*5* bM6רd`eC? =~r`KF%#X岱%#Xrz b;Ÿwİwqb;b;Ÿwqa)ƽS{G {N1b;b;u)ƽS{G {N11b;ŸwT(;bS^i;y=0_;gޡG{~w ;%̽C){c]̽Cwŝ{cɱwg<>8W>2 A$􎌱wޡW>{##{G {G {njzG {;b;b;f;b;b;f;b;b;.w^'@XB;{$e}/a,K| cOe#45 xɽQ2:oߍ(}>7 scl| lai^GlV觙jkEl|VJS2Zi#9{/weOߛƌF ˦X6bX6bX6fT6b||Rpraa[W)!X*!IX̂JfA% k_%$ ڗ`dc}KF%#X> ̂d`G k_2ĂOuX0L}dS\2`ccd`Ga1aQa662666266662666626UH H ȌH H +ȌzG {G {DžBcʥzǥcمwv!]Hz)#X/ڗ`F;e{ep 6X_S,\FN`wHzG*``w)ƽS{G {Κ)ƽ#S{N1b;Ÿwİwq)ƽ#SWib;Ÿwİwq)ƽS{G#;B bAzFF72^82ı4 rerc%CY+d `09ر;}ܑΡL H:JBV:~1t(UIe4A^1/2o䯬*|g i!~k m o!~q s u w!~y { } !~.| .aeHd+f8fc%_d%d2\_ 76c+ ֽd7}XKJ3}nV2[_Ve}J5d~^/+\E^eH`?qYK|r#NCJ%Ju(AH1)ؔ ! ! ! !.\:\:\:X:\:\:X:\:\:.,àtḁS,)2ґNI锑NIJt$#%)+AHIJG aP:Rґ¥#twzk=NQ*2 HJRER*T$U$%"+AI***2***T W!V W W!V W W W!V W W W!V.\E\E\EXE\E\EXE\E\E"ä#EUQTQJh7*ڍHh7**%R*TQ)QT`REDUTJSE*TQ)\E?LJtJJt$SJT:D#%)R)ؔNtt 6ît 6#ȥS)MrlJ`S:)ؔNt 6#ȥSt 6S)A.MlJGK`S:QpNe?tSF6ֿ1TF2 1>F]2/D|+e;ѭ_3jKp*~9¥#|LOKGK`S:S0Q+׈ZK_D{ne,ґ¥#ȥ#ȥc#ȥS)A.C,A.A.C,A.A.A.C,A.A.A.C,]ttt ttt ttt\&X:Z\)|odo|u+d_^ac;d$__a%/+X7XX J%V;pzYX J+hW,(d,gq(g)`V:p+ r+ r+b+ r+lZI[[I[I[[I[I[I[[I[I[I[[Iun%An%An%Cl%An%An%Cl%An%An% auv|`k/d$_e$_2?GF%%YY ֿd% C VŤ$bRiAf%X+%|@[`AV4) IIVЬ$TJJV*ش RvصR 6Ti%AnM+lZ`JJV*شR޴R 6$ȭTiM+ r+lZ`Jjn%~$$#۾d$#6m_F2m*#6/#^Jrn{+R$w[ LpA &&+RR)\ `2WW/%J0WW/%JJR  6$ȭd$ȭ$ȭd$ȭ$ȭ$ȭd$ȭ$ȭ$ȭd: ! ! [0+#iɴd$#d2iS'|2`TFJRi$%6IIMVV|2n%dd%+IVLJDs%+J\IJJRV̕$$%+Y ZI ! R    tYVVV2VVV2VVVr`+;?J?oe$HL̕ܙVF2WXpZl)IIIvf[*L62l)j4+l)?=O4)ɺd4)~m)~m+AH1) ! ! ! !.?????????`).#YA.#YA+#YAזIIk[ BRRVR4)MLVЬ+hR**Y**IIvfKIvf[ VФ$;$+hV**%W+7Zi J `SP; `SP\P* T 6U)(A.MAl `SP\Puo `SP*T 6U)(`0AzA.bɬ~e$_Fro2 ~)Jpo~)\PIJron%~+IxocA`9R̕ %+IIJV%ȭ$UdU$UT"A"C"A"A"C"A"A"A"C"A"A"A"C"]  \1XEUT,mTF +#mTFVFro`]6)ɺ6+mRFRFV{ۤ$mR6+n#)J\E1LvIIVФ$wY vIIL .A.A.C,A.Mrbrrbrrrbrrrb̥#ȥ#ȥc#ȥ#ȥc#ȥ#ȥ21\<ω!A$#AX"AzHJ?V96sұ,àte}*dK0W$%Wt(TE"+AY PY J09*UdUdUt@"C"A"CRbbTEXEXEXE*TEXEXE*2*2*:*I/5VX*#݈g7ٍ̒tJ ֿD#e}JT:e}UJ?4S0)IOv%)?)%RCIJGJ?4S韂Mrlg]lG`?)O 6#S韂MlG.Ml`??) O 6^\zmXD2mm/#Xm/#2wj+Wo% `p_2 :^Jr` keVwZn{+C H W W W!V WQ    t***2***2***r` z>*j e$kee$$#h2YQɬdTF4AddZ0")\ETEIH?Śd*de} &SJ?VֿJRER*Y HJ2+ :p r rb rlHw7Pp_4%e%%%e%%%e=6~IԖ!֖ ז ז!֖ ז זk0X Ϡ%kpewH4i62;Ӭ$+sR;J0YY wY`pgڡkpR5R58+8mL$kpR58+4+pW rW rWbW rWlJM8mVV2VVVV2VVVV2VҥM6Wx%kZx5+hWAC~1,e|/ O{'O6他g4=i>|{jYST;R.{'\ 6|G55 iMO~eS)ݣ4=!~k:g_wJi: A6>l| Lu)ƥSKG KN1.b\:bX:Ś111)ؔ! ! T:?eKKYOX:?zRG)@iU򲕩iQƦ.N\/?X/ĸ^^zW2_iQ-MÏwO\:ϥV'6b|ttOl~nKSO1b?Ÿİ5##c##c###c##SCAAACAA`#%H dcKG02Ϗ7kR`#%HIf:VQ*y"~Ÿ3]ΒYO,HI&=RI`#'=ɤ Lz$M)5SK^Q.5tq+MlJGK`S:)ؔNt 6#ȥS)M+A.MlJ`S:\:)ؔ`0鑒Lz$)cO F)J00HI?RdcK`S:tq/.\LGJ2ӑtLMh#%X f:R)Lo\J4r)M#MS7M1n1lbMrrbrrbrrrbrrlFFFFF0HI7Rxz#LoF;`4is)ɜF w)d"#%XNN;_UC]ًd?Sf/RًS%))cSHf/VNܟwJ1b)b)ŸSqNN)t w w!v w w!v w w w!v w wJS SSSS SSS ًd";E0XNWE;Dn%HqX2{M#M#^pNLM)*9l85 sHIf/VًndژB4)MSF 7M1nb4b4Ś1Ħ1Ħ1Ħ)4!6 7 7 7!6 7 7a0{w +G?BRًldL)DFJ2Ld$)+)ɜFJ2i`r&s)~b~4%3)LGJ2ӱ2LGJJ0ӑ#t\&LJ?mggMb?ܸvΚ) 6SAMlG`?) O 6î 6S韂Mrl`?I=Iᙎ`?R F+YJ$SJ?$3)L O &;L0)ESJT:L0iR)%j)IӔ4Mdk#i)Al'Ϯiqæ)MS76Miii iii iiii iii 6McM#M#M#McM#M#McSII֩p&TViy?MhEJJ"e%XHIIV+RR))IHI ֋ ׋`"%0X҅+YHIz1_hEJJR/V))\/I+)+< mر^İ^İ^̨^İ^İ^İ^̨^ĸ^ ^ ^Hbbr@CCCRbbrT/X/X/\X &2V^ ̡P)DJ09`"c%DJ04if~,QOo| 7VNB2ϡOo`sPN?q)SO    6c###c##c􏔤Zl%"+XEILz$Ud%")IIIJPERI$Ud0))\:A"`c%C?IX JG `R:nt$gؔΚYS:Ÿtv֔ΚYS:Ÿtv֕Nt 6#ȥS)MrlJ`S:)ؔNtvؕ Nt 6S)A.MlJGp}JNe%,+ NA,SkZs(S|jiMÏ|les(4)^Y >P?so{c%ܛCJso^?xuS0(Ͻ9'q)SO    6c###c##cLz$)ɤGJ{P F3)CY߽c%ؽc%ؽs(w$3)LGJ2ӱ##tïB`Od#%Xd#\&;}%S?Ÿqa)SG X?????????????111 GJ2;}ұ#ȥS0*)IX JGJR:Rұ^IIJGJR:Rұ#ȥ#tYR:Rґt$#%Y.t AXIJ/)5tq)5tq+MlJGK`S:)ؔNt 6#ȥS)M+A.MlJ`S:\:)ؔT:?OW8y+%Y2}k?v8W>~ _R*—Jб5S韂cʻw t|JVMon|_4]Xz%icSHVMs?]nb4Ÿiİiq)M#MSiAnAnClAnAnClAnAnAnClAnAnMbrrrbrrw$M#7wNYz)ޑޱt$3)LJz%%ٽ#%ٽ#%ٽcFF0ٽ#0rLo$t$tLhdJ0¥#q+AllcKN1.1,b\:ŸtqakJGKGKKGKGKKGKGKGKKGKGK`S:X:\:\:\:X:\:\:FJR:Rt9\dNc%HI)KI)[ 7R鍔t$cKGKG0H1 v$rt$3)LT:f:R`#KG0Attq)ƥSKNttt ttt tttt ttt 6c#ȥ#ȥ#ȥc#ȥ#ȥcȑH¥#8Ώ7V?k>{GX:*DwKI2+Ri%)>X Pii}Mc85 >~r)'H P_wy:Ro<.s)47<en%ikfgMib4;kfgMib4;뚦`4)4Mii 6MSiMrl`4;F`4)4 7Mi 6M#4M)QӔe%%Y3iv==4M):i]R]R]R]Vi 6MS0e,iAeKT$%9,%9leF;$;$R xE]ic5M1nb4b4Ÿiqæ)4 7 7!6 7 7!6 7 7 7!6 7 7Mi iiii iii i~˖s^0i~py s07 >knq퉟4Ʀq24MrMOFFpl~i 9 >9zK\:GKt T͜Fpl~ CtO!i^)MSF 7M1nb4b4Ś1Ħ1Ħ1Ħ)4!6 7 7 7!6 7 7a0i$s)ɜ ii Fs)ɜJ0i0HI4R9dNcFF0H19.QɜFJ2iLhN#%X 4R9dN4Vz%M)M#MS7M1n1lbMrrbrrbrrrbrrlFFFFFpj'6)c8I9X/^^ FrKI[^n)㜆4(cxs*%[JrlAni14Υ*e,|sKKIKKX:xP5sdkcj~ QPW+RV)+ԡPb+RViHM W4V)+ԡLMdEJ"u(Mc0X{:jc}P~iqæ)MS76Miii iii iiii iii 6McM#M#M#McM#M#Mc5Vi Ѵ|j͡`Z#%X VeSks+P?J5V9`Ns(44X1Ħх+|+X >P_,7aI4I4V^U+'2EiegM쬩b\/;kegM쬩b\/;`S/zz)K^^ 6RMrl`S/;E`S/z)ԋ K^ 6"Ld$)4cSh ^ &9ce씟P)~9ce~b'X >JI4VO9M >J))u >sJ3VϜ9S|挕3ge}7^ 9stgJP/KK11b\/Ÿ^qakEEEEEEEEE`S/X/\/\/\/X/\/\/EJ ׋`P^^ &~$S+~~~e}߯d"%k%{(X/\/_+\/~} ZIf/RًiIZI&2V'<9d}7SKN1.b\:Ÿtİt5#ȥ#ȥc#ȥ#ȥc#ȥ#ȥ#ȥc#ȥ#ȥS)C,A.A.A.C,A.A.`N#%HIvHI7V=ĸ Fi$i3)LGJ2ӱ집집집짱U$U$집Ud8U>hdd첱LzG0e2 vX g{Q])#SO11bMrrbrrbrrrbrrlGGGGGpn(+PVx#~7..)P첑첑첱~7n(+.).+X:\:PVtW!(_9e%sP?sJpԡpwNeӱΚY?ŸvΚY?ŸvO 6#S韂Mrl`?)Ov O 6SAMlG0Ry2(%{,%")%8=gUQ)QI O%%JREDUTJTEDU$`SE**? \?DSJ?R)%RO)MGePo~?vӿNoz=?v{.Ⱦ}ӿ_.I_]#e]@벹]۲yo}ܮesh7c׏o׺f~Ou$|,_[Gckw8:v>w׏ikwXE_tleOvFyq׏v}\e~TS7~X[/np\}nq~~S/w:/w:o_quWc?r׏VݽW~\o ~\/quc/z&{ =9W[se|^ϱ경}?]׏{ jj s5-^αY/qur{]?.[c~~W{ -^αz^ϱz<^ϱ{[?s-(9~\]6{9֏fqu_ϱ꺵9~\]6{9֏zqK\ir{yycxƃm;1|u{|~?ܿbP[ Gn`PO[OFwKny8LyKp-/ur>-/dro[_n.]η=[߆Xvj2۩>~me{NC Nv)"tt?}vէWɽZz\/_>ɽn.>}>|7y9߼Ns,iܯc~C||䞶C91{Cɽ\}^O>kt>mr,9|us.Nϱ<݇ϱd:_Vv.?q7\kxk_]?o8OϿa endstream endobj 266 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 271 0 obj << /Length 1262 /Filter /FlateDecode >> stream xXKs6WHX@ѩ4$Ck4JD|gAzr'i2Ӄb-"vr D DRܠ$DH0ghA4_PBHp.|$i7_$*LBٛB(J&D"Sf?;Dpq + S)@.9ΑG'9:c&6u:ʄczlj4Ku9ZuF)'y Oձ((6 !PY+ytVRZ)ݘEUiW7e׺h+]9u6sJt(U5$tK& ZXڄTw'!ڴ(AfZk71ԥ{;V8nL)k7'{Э4Ϟ'~S/0͹jI漰 v3 {qN7e6譮n\f6۲ˋu{aAqznbsv񡀒.KtTm؟hڶI()1}N R(L2WV "I*US,1 k#m+t2nIVnj&vTa(f4S݂bS@paN7>("FZA m ^E vz6Jnm; 'Xb9U鳪ǿ{_DҶS=]3ʃⅫP)O1ĒISg{% ~Sz[qsy ioG08%G%PжM? vֶ) &rQ6׾'ԻQFgdEVARA1 t%pÈV%{Й]9C` V^>LiMsXL_P2Ӣ쯗w%Q%a7ι8ŷ$g| p_B[ b= Qb0~ֹlgô ٟ endstream endobj 267 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/HeatmapResultAPClusterDataSet1b-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 273 0 R /BBox [0 0 504 504] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 274 0 R>> /ExtGState << >>/ColorSpace << /sRGB 275 0 R >>>> /Length 15196 /Filter /FlateDecode >> stream x͎#]v]S8;iZh@а@p0QɬuݫVɌX<yzozyt~?]߮ן~o~Oo~?x_)oxYv}0oyE0:_nLw&ם|q?o||2O ߯}=n_WC_}]'D珏m0ӭ;;Η@;_ݑvC|c|||wǩ;ϏGwn!xtgw^η\!xl4L ;/Gw^Ls^|}te;4u;4u;]7u;4u;4l;خۉ9خlDllKi?+\vic.c3uyK}?n첟]T3~bvQ OR>~Bbx%̞G Oi~rju?=up?A5𶟢xOR OSOT |yn%="|^ݱR\Kt{>/zynE=`}^yinŹ=`}^vDw~n2v u{^}^yϠ=`}^yn煻=`|^Cz=4|^Cy?uط FNf:~~^~Ƿp?_7$#?I}7x3obW#oyW_Wӯ7ȿ'̩_x;.{{Yɗx;~w˯xǿ>k@`qkkʰa1c_cߌcV1vL+=_~c^;5vL,}ҿb1 cl[;o1v. b:*}/ `'ŎcA=M1c `cv^g56)4٠lCwa*f c#eC?X6eCOi.zNS<c,]e?X6e1 X6bc3F ˦7ۜ~ҹa1Ɔ^͹a1ƆF66656L1n1l3j1l1l3j1l1l1l3j1l1l1l3j]yaİaİąaİaİąaİaİa\0fSüWA Shl+g tFt`:SB0)Fh}SB2adssFF0>ad`ssX+bdcF,02Ɔ029`ccad`ÈaÈaØQÈaÆ1ÆÆ1ÆÆÆ1ÆÆÆ1ѕF F ƌF F ƌF F A c0چA S(hƆy=}HXo)!haaKF00bAjzjE֊XP+6kE֊XP+e$bjE,Ajzk#"kE kE kŌjE k׊֊Պ֊֊Պ֊֊֊Պ֊֊֊ՊX+bX+bX+fT+bX+bX+fT+bX+bX+ U#m ZQjTBj$a}ը`ը`ը`H07!Y5VlVdF6WdF2x?wWdpò) cR,XևlևdC6Z)kJ11b\+;kj׊J1b\+bX+ŸVqZZ)ƵRk׊J]cVqZZ)ƵRkE kJ1֊T+nUZ)4uV^Zy0 xc0 =X+CϵBi׳V1Z\+B/\+cO"6a#֊8fsوe? >X6e1 >X6Aòò1ò)e#ecFe#e#ecFe#e#e#ecFe#e#e#ecFe1}9% {z+Ȍ*H +H +Ȍ*H +H +Bd6UYK7R+Fc+?>Fccm$H H ȌH ۨFbXAb;f;b;b;f;b;b;.5*}Ύ55* kT%kT%kT%kTרJH֨dkT25*kT25*5* bM6רd`eC? =~r`KF%#X岱%#Xrz b;Ÿwİwqb;b;Ÿwqa)ƽS{G {N1b;b;u)ƽS{G {N11b;ŸwT(;bS^i;y=0_;gޡG{~w ;%̽C){c]̽Cwŝ{cɱwg<>8W>2 A$􎌱wޡW>{##{G {G {njzG {;b;b;f;b;b;f;b;b;.w^'@XB;{$e}/a,K| cOe#45 xɽQ2:oߍ(}>7 scl| lai^GlV觙jkEl|VJS2Zi#9{/weOߛƌF ˦X6bX6bX6fT6b||Rpraa[W)!X*!IX̂JfA% k_%$ ڗ`dc}KF%#X> ̂d`G k_2ĂOuX0L}dS\2`ccd`Ga1aQa662666266662666626UH H ȌH H +ȌzG {G {DžBcʥzǥcمwv!]Hz)#X/ڗ`F;e{ep 6X_S,\FN`wHzG*``w)ƽS{G {Κ)ƽ#S{N1b;Ÿwİwq)ƽ#SWib;Ÿwİwq)ƽS{G#;B bAzFF72^82ı4 rerc%CY+d `09ر;}ܑΡL H:JBV:~1t(UIe4A^1/2o䯬*|g i!~k m o!~q s u w!~y { } !~.| .aeHd+f8fc%_d%d2\_ 76c+ ֽd7}XKJ3}nV2[_Ve}J5d~^/+\E^eH`?qYK|r#NCJ%Ju(AH1)ؔ ! ! ! !.\:\:\:X:\:\:X:\:\:.,àtḁS,)2ґNI锑NIJt$#%)+AHIJG aP:Rґ¥#twzk=NQ*2 HJRER*T$U$%"+AI***2***T W!V W W!V W W W!V W W W!V.\E\E\EXE\E\EXE\E\E"ä#EUQTQJh7*ڍHh7**%R*TQ)QT`REDUTJSE*TQ)\E?LJtJJt$SJT:D#%)R)ؔNtt 6ît 6#ȥS)MrlJ`S:)ؔNt 6#ȥSt 6S)A.MlJGK`S:QpNe?tSF6ֿ1TF2 1>F]2/D|+e;ѭ_3jKp*~9¥#|LOKGK`S:S0Q+׈ZK_D{ne,ґ¥#ȥ#ȥc#ȥS)A.C,A.A.C,A.A.A.C,A.A.A.C,]ttt ttt ttt\&X:Z\)|odo|u+d_^ac;d$__a%/+X7XX J%V;pzYX J+hW,(d,gq(g)`V:p+ r+ r+b+ r+lZI[[I[I[[I[I[I[[I[I[I[[Iun%An%An%Cl%An%An%Cl%An%An% auv|`k/d$_e$_2?GF%%YY ֿd% C VŤ$bRiAf%X+%|@[`AV4) IIVЬ$TJJV*ش RvصR 6Ti%AnM+lZ`JJV*شR޴R 6$ȭTiM+ r+lZ`Jjn%~$$#۾d$#6m_F2m*#6/#^Jrn{+R$w[ LpA &&+RR)\ `2WW/%J0WW/%JJR  6$ȭd$ȭ$ȭd$ȭ$ȭ$ȭd$ȭ$ȭ$ȭd: ! ! [0+#iɴd$#d2iS'|2`TFJRi$%6IIMVV|2n%dd%+IVLJDs%+J\IJJRV̕$$%+Y ZI ! R    tYVVV2VVV2VVVr`+;?J?oe$HL̕ܙVF2WXpZl)IIIvf[*L62l)j4+l)?=O4)ɺd4)~m)~m+AH1) ! ! ! !.?????????`).#YA.#YA+#YAזIIk[ BRRVR4)MLVЬ+hR**Y**IIvfKIvf[ VФ$;$+hV**%W+7Zi J `SP; `SP\P* T 6U)(A.MAl `SP\Puo `SP*T 6U)(`0AzA.bɬ~e$_Fro2 ~)Jpo~)\PIJron%~+IxocA`9R̕ %+IIJV%ȭ$UdU$UT"A"C"A"A"C"A"A"A"C"A"A"A"C"]  \1XEUT,mTF +#mTFVFro`]6)ɺ6+mRFRFV{ۤ$mR6+n#)J\E1LvIIVФ$wY vIIL .A.A.C,A.Mrbrrbrrrbrrrb̥#ȥ#ȥc#ȥ#ȥc#ȥ#ȥ21\<ω!A$#AX"AzHJ?V96sұ,àte}*dK0W$%Wt(TE"+AY PY J09*UdUdUt@"C"A"CRbbTEXEXEXE*TEXEXE*2*2*:*I/5VX*#݈g7ٍ̒tJ ֿD#e}JT:e}UJ?4S0)IOv%)?)%RCIJGJ?4S韂Mrlg]lG`?)O 6#S韂MlG.Ml`??) O 6^\zmXD2mm/#Xm/#2wj+Wo% `p_2 :^Jr` keVwZn{+C H W W W!V WQ    t***2***2***r` z>*j e$kee$$#h2YQɬdTF4AddZ0")\ETEIH?Śd*de} &SJ?VֿJRER*Y HJ2+ :p r rb rlHw7Pp_4%e%%%e%%%e=6~IԖ!֖ ז ז!֖ ז זk0X Ϡ%kpewH4i62;Ӭ$+sR;J0YY wY`pgڡkpR5R58+8mL$kpR58+4+pW rW rWbW rWlJM8mVV2VVVV2VVVV2VҥM6Wx%kZx5+hWAC~1,e|/ O{'O6他g4=i>|{jYST;R.{'\ 6|G55 iMO~eS)ݣ4=!~k:g_wJi: A6>l| Lu)ƥSKG KN1.b\:bX:Ś111)ؔ! ! T:?eKKYOX:?zRG)@iU򲕩iQƦ.N\/?X/ĸ^^zW2_iQ-MÏwO\:ϥV'6b|ttOl~nKSO1b?Ÿİ5##c##c###c##SCAAACAA`#%H dcKG02Ϗ7kR`#%HIf:VQ*y"~Ÿ3]ΒYO,HI&=RI`#'=ɤ Lz$M)5SK^Q.5tq+MlJGK`S:)ؔNt 6#ȥS)M+A.MlJ`S:\:)ؔ`0鑒Lz$)cO F)J00HI?RdcK`S:tq/.\LGJ2ӑtLMh#%X f:R)Lo\J4r)M#MS7M1n1lbMrrbrrbrrrbrrlFFFFF0HI7Rxz#LoF;`4is)ɜF w)d"#%XNN;_UC]ًd?Sf/RًS%))cSHf/VNܟwJ1b)b)ŸSqNN)t w w!v w w!v w w w!v w wJS SSSS SSS ًd";E0XNWE;Dn%HqX2{M#M#^pNLM)*9l85 sHIf/VًndژB4)MSF 7M1nb4b4Ś1Ħ1Ħ1Ħ)4!6 7 7 7!6 7 7a0{w +G?BRًldL)DFJ2Ld$)+)ɜFJ2i`r&s)~b~4%3)LGJ2ӱ2LGJJ0ӑ#t\&LJ?mggMb?ܸvΚ) 6SAMlG`?) O 6î 6S韂Mrl`?I=Iᙎ`?R F+YJ$SJ?$3)L O &;L0)ESJT:L0iR)%j)IӔ4Mdk#i)Al'Ϯiqæ)MS76Miii iii iiii iii 6McM#M#M#McM#M#McSII֩p&TViy?MhEJJ"e%XHIIV+RR))IHI ֋ ׋`"%0X҅+YHIz1_hEJJR/V))\/I+)+< mر^İ^İ^̨^İ^İ^İ^̨^ĸ^ ^ ^Hbbr@CCCRbbrT/X/X/\X &2V^ ̡P)DJ09`"c%DJ04if~,QOo| 7VNB2ϡOo`sPN?q)SO    6c###c##c􏔤Zl%"+XEILz$Ud%")IIIJPERI$Ud0))\:A"`c%C?IX JG `R:nt$gؔΚYS:Ÿtv֔ΚYS:Ÿtv֕Nt 6#ȥS)MrlJ`S:)ؔNtvؕ Nt 6S)A.MlJGp}JNe%,+ NA,SkZs(S|jiMÏ|les(4)^Y >P?so{c%ܛCJso^?xuS0(Ͻ9'q)SO    6c###c##cLz$)ɤGJ{P F3)CY߽c%ؽc%ؽs(w$3)LGJ2ӱ##tïB`Od#%Xd#\&;}%S?Ÿqa)SG X?????????????111 GJ2;}ұ#ȥS0*)IX JGJR:Rұ^IIJGJR:Rұ#ȥ#tYR:Rґt$#%Y.t AXIJ/)5tq)5tq+MlJGK`S:)ؔNt 6#ȥS)M+A.MlJ`S:\:)ؔT:?OW8y+%Y2}k?v8W>~ _R*—Jб5S韂cʻw t|JVMon|_4]Xz%icSHVMs?]nb4Ÿiİiq)M#MSiAnAnClAnAnClAnAnAnClAnAnMbrrrbrrw$M#7wNYz)ޑޱt$3)LJz%%ٽ#%ٽ#%ٽcFF0ٽ#0rLo$t$tLhdJ0¥#q+AllcKN1.1,b\:ŸtqakJGKGKKGKGKKGKGKGKKGKGK`S:X:\:\:\:X:\:\:FJR:Rt9\dNc%HI)KI)[ 7R鍔t$cKGKG0H1 v$rt$3)LT:f:R`#KG0Attq)ƥSKNttt ttt tttt ttt 6c#ȥ#ȥ#ȥc#ȥ#ȥcȑH¥#8Ώ7V?k>{GX:*DwKI2+Ri%)>X Pii}Mc85 >~r)'H P_wy:Ro<.s)47<en%ikfgMib4;kfgMib4;뚦`4)4Mii 6MSiMrl`4;F`4)4 7Mi 6M#4M)QӔe%%Y3iv==4M):i]R]R]R]Vi 6MS0e,iAeKT$%9,%9leF;$;$R xE]ic5M1nb4b4Ÿiqæ)4 7 7!6 7 7!6 7 7 7!6 7 7Mi iiii iii i~˖s^0i~py s07 >knq퉟4Ʀq24MrMOFFpl~i 9 >9zK\:GKt T͜Fpl~ CtO!i^)MSF 7M1nb4b4Ś1Ħ1Ħ1Ħ)4!6 7 7 7!6 7 7a0i$s)ɜ ii Fs)ɜJ0i0HI4R9dNcFF0H19.QɜFJ2iLhN#%X 4R9dN4Vz%M)M#MS7M1n1lbMrrbrrbrrrbrrlFFFFFpj'6)c8I9X/^^ FrKI[^n)㜆4(cxs*%[JrlAni14Υ*e,|sKKIKKX:xP5sdkcj~ QPW+RV)+ԡPb+RViHM W4V)+ԡLMdEJ"u(Mc0X{:jc}P~iqæ)MS76Miii iii iiii iii 6McM#M#M#McM#M#Mc5Vi Ѵ|j͡`Z#%X VeSks+P?J5V9`Ns(44X1Ħх+|+X >P_,7aI4I4V^U+'2EiegM쬩b\/;kegM쬩b\/;`S/zz)K^^ 6RMrl`S/;E`S/z)ԋ K^ 6"Ld$)4cSh ^ &9ce씟P)~9ce~b'X >JI4VO9M >J))u >sJ3VϜ9S|挕3ge}7^ 9stgJP/KK11b\/Ÿ^qakEEEEEEEEE`S/X/\/\/\/X/\/\/EJ ׋`P^^ &~$S+~~~e}߯d"%k%{(X/\/_+\/~} ZIf/RًiIZI&2V'<9d}7SKN1.b\:Ÿtİt5#ȥ#ȥc#ȥ#ȥc#ȥ#ȥ#ȥc#ȥ#ȥS)C,A.A.A.C,A.A.`N#%HIvHI7V=ĸ Fi$i3)LGJ2ӱ집집집짱U$U$집Ud8U>hdd첱LzG0e2 vX g{Q])#SO11bMrrbrrbrrrbrrlGGGGGpn(+PVx#~7..)P첑첑첱~7n(+.).+X:\:PVtW!(_9e%sP?sJpԡpwNeӱΚY?ŸvΚY?ŸvO 6#S韂Mrl`?)Ov O 6SAMlG0Ry2(%{,%")%8=gUQ)QI O%%JREDUTJTEDU$`SE**? \?DSJ?R)%RO)MGePo~?vӿNoz=?v{.Ⱦ}ӿ_.I_]#e]@벹]۲yo}ܮesh7c׏o׺f~Ou$|,_[Gckw8:v>w׏ikwXE_tleOvFyq׏v}\e~TS7~X[/np\}nq~~S/w:/w:o_quWc?r׏VݽW~\o ~\/quc/z&{ =9W[se|^ϱ경}?]׏{ jj s5-^αY/qur{]?.[c~~W{ -^αz^ϱz<^ϱ{[?s-(9~\]6{9֏fqu_ϱ꺵9~\]6{9֏zqK\ir{yycxƃm;1|u{|~?ܿbP[ Gn`PO[OFwKny8LyKp-/ur>-/dro[_n.]η=[߆Xvj2۩>~me{NC Nv)"tt?}vէWɽZz\/_>ɽn.>}>|7y9߼Ns,iܯc~C||䞶C91{Cɽ\}^O>kt>mr,9|us.Nϱ<݇ϱd:_Vv.?q7\kxk_]?o8OϿa endstream endobj 277 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 268 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/PlotAPClusterDataSet1Details-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 278 0 R /BBox [0 0 432 288] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 279 0 R>> /ExtGState << >>/ColorSpace << /sRGB 280 0 R >>>> /Length 1705 /Filter /FlateDecode >> stream xKo7>^'r Z WAXvjopf8F/ %-f+'5xvfiŏsvl޾wy+i_p?lfsts2Akw`T ~ei uqa24%TtI?=ьÑxGxyy2J_|t<@?K44C]||{Spۑt0-.L3j&& h&>og&<H!dy {]:ھei헠D3^k['8>n>=tsgf^yx/i~V[''@4>;Wiv:}vg+{/B׼mn~㾿pq]Cin{uShn޸MiO|„k#[f^o<~72Yl1P jmk`1BƸ:CG=Om 4{kt/Wqpj_6>aI `<%NO<83ɸ@\ D=:Bn`q[\GRupn[2us6XH3h@a1ԩ]cex>띋q4B;`2oD~c! ޮ2A;]%Cǯg}~3{wwϙ|'Njt~}כI` endstream endobj 282 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 288 0 obj << /Length 1894 /Filter /FlateDecode >> stream xXK6WEbO=It㢇$Mlp$99Cx y5Òu’ד擧tpU|:cJ 2dLާMgB1S5qXbn]EiwmoWSRva/ɧ ,{*r,,Y¯_)'7I ɻovt.)%*=N[ۯ1k]څgpHL9!;y?wAvulMOW=Ga DdPwB8v6%~HE }tHsm˺ɳjG[; Ϧ3ASA6un4-9ҁtiG቗#'K n6Ky%ޭ]kjTƯH֬:5Zm>Hs(#b0OY˴"?BLpA .v&( ?T7j3ji @چ-SdUŽW*Mz=ΪCDE t[]s.x")Swc2#\"$?qQ)z 7 7fN\icVtFa8"|8dY@/N98v 8भM#`p?tI]=fYe*'d`*Su}\j}g8p:CL mv&h4&wݍ$ L30X¡w5qCfd9<8\BpϤ,7XJEe;+kkՌ 56WjSh S^ksQ}An"qiFvӥ: ?PُLCsaZ\]ҵI9kʏ-=y"8:7+3^Q/AtIcͺhȉĈ`Hm.Fȯ_WIYr$$9DC$i*!!9DBV,WrEkZܱ"H&)hI "PQ ^" b g%$r Z,Bm)X;Mj}iJF/SE +Ojػ/Q[|.YlM7k]?vĩο^\aVmHTnSvBÑ$Q==xƷ9Bf\O-68_Zׂp!DZE}ǶKE!O zVlBaEY!ZM7)/B(cSNm=3P a:޹"/WdRV(zbmxlĂ|Eė>2VKASmC֍T;QT瀟n-]t,-w"UMX-@BoVw!w V\ɃJa;/瓿S endstream endobj 297 0 obj << /Length 1775 /Filter /FlateDecode >> stream xn8zZ墵:hS`NniDۚjq{|#;.d`#5rǷ/),|y>yuDg^/8X$(`^y\tcߡz9(v?롧V-Uu:( ]Χ?MޟO.'82;q18z!wjr99,}r+Ǔƥ˄І&D$tJ[Og2`nZ5(% OiԥպT7[pa Zm4B@SKU"WmUԊ ꡚ͂Y SmQ54q~BR7@ 9尹qWTՓoZhҘY-$ E{0oU7aUUp4W -)#g&#۹& :9[&B@S,iЭUV,nhвgzh6rUX-KK.VQ࣢J̬c _rPdНOs>AIYгn*E+DQI`媟rTQ.msZ+j;O!$Hp֎}7ǯxɇLd ES.oP"_ H+0N| :2sߓRlk*#W4Т5Cise9ABŖF.VH:qX#-jE6miF&3Ő&? 5qZh "Y/"]4Sv<pTfs#gl9u *dҽ9dy2NA79]j HAtfuMh~CrTDbg?43Ik#4 v*U?p6~6*Ko \ٍ mqUj@?~E?fnSSF yJvIsPT{SWZb0#RaaCioR$'|i&]hq'ped'ui$|Y:X^n*&R%pԆK"S7o&""@ѐΥkW#Smt!B;,Llq**AvTƻ7P'c/ 1183"n)d\L 6% 'YPx㌩7H^~#ʩKQV܇ eyndiؒ:=9#]""B8;&S(ZO'q0衱}R?=E%8(YHUA Cthwվ,=/ 4SMoJHs,yiКeMppNO$`TNwzG^3)W廢J'[o73(;8[dpܗHSr~haS endstream endobj 293 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/CreateDataSet2-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 299 0 R /BBox [0 0 360 396] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 300 0 R>> /ExtGState << >>/ColorSpace << /sRGB 301 0 R >>>> /Length 6711 /Filter /FlateDecode >> stream x\K-=N_0`SyVj@j FjAjz'^W{dJ%$U^}ǯ_}޽yG}ǿ?׿z}>_oo6:^fUn+Zk.}S=ʦƻMy-?kXQͧ) OmeO~j?m[U8W}]`׹z]`+IA 3g ncT ,2|B#k=:@e=׻K8gblsnRѶTا~Û?9Ξt].[Ae7'ۺ˭Gږ\v [Rh͵|s{-h{Sm^ؖyXQͧ)zݎ[7(>%]>ʫ}QuS]k^hk:؃l/ hţ`=9>굢%jMKapU)<[flA{Vk)p"1s$nZAQI!i|ԄK>qw EGy 4EQtuCwӊI@1T4Ws4*9}ٴڳ逯E0S~O(l7xyŧնKاz\XE4bTY;zsbuSho;=zR>bYM)#ƶonR|m[.}ڭw%>k)ÜTj wl}O$OSeXMΑmK.}ڭI#kꊹ gbKzU8ԊGkaw5k%!mJ*{J ߷WŒ}Xocse~ze:cgZagxV)!ik#:أm+ HB>ZfI;xc,VLB>* 47ߠnj‹1c\xqzsK`R#(95%!7K "iޠ!@VJ6#Tޝ˄:VJw\4'Z=q-6mI!i G|?9'\@b+e)pT,Xá$Vt)( ҺAiM"n9n B 5*Or{!8ЊG99 CpRUE㞶ޱ+SWƮg!~\ YhhzWĊn>-N!"[7(Ǯh[r%n9 C3zA#<1WïMrH)ݹNMhţb]L ڤ;; VM7f#\\j"_i5"{&ؒX-46 =*H+ (qJ:'F}0r|GƊnNyAFfS7){>o92iV>~?9XB# \wC ʾdi˷۫3;פ^mK.`B^QXpaV(wAlX|N29c8D0Ȃb '*aELC)uLݶKاݞ/ѓON:Fx=crF?L٥Ƙ|0VtiqЛ=0LyvmeO=.F*Sep;+mJrT@+HO!Bkݤ4ۖ\v a3-n۶rO$$0. `8#bZ3At>lZX1)F@fbv? IOtp"f;"HۤT3K qIB$˔u?Osp9$_ǺI{Dۖ.av]9XA%ά}1܏$VI6Tjfۖ.av]}-8=9h6ⱘ`ˇOr**mH7(>%]>ֻ׈vX K 흈,NrAƚ5N64 նKا.ׇKw5^ ݒeR;}j Eur%1Z.ٶا.HJ?b~?9hַ3~ (tAUQ,)䴋m!nRgev,8zƎPeR0N[^&LrP 1*nR.l*]|حw3rA&laQ|Ѝ:2BRh/j-ĚZ9"9m Hݤm[.}}D]U~,9- 車*RŹOXQ~,9d{Ja?m°Kا>UqA19s8M=I^lReQ2v~nRc69i}~< }?9Օk{Gԗg׺刡+ s`P,lWUIEۖ.cvrqq&UŔWtX+j$omwnwQے.avcl0U:V*\nc,r6M =.׍mOA+mp.`?ֻl:좵ҜG86 8Lqr+ 49bJݤEۖ.cv?t~eTZj妽6ey5Vt$9cg`ݺl[r%nd{*7cj#1ccH$8bKZ 'tfƈmJJk{* 8ݓSb|<= Q iGʑ$VҒ9;(+ qnY0wۖ.cv{XMd-^ث' #xbhgZɒqZO%e5=l}̊X%䬈7+h|޳'o~c19Rw(mK.}hxrַtVO$ ׎t[Q-fϛijGz^-iA6~zf N5 w]b-)9yZ#Hpq%nPGB7)GѶ;K Jf)1* {LeY 6$QHq9tAc 2o>.b?:Ɛ\9X U^ٓ0+H^ 7ˈ5U[R +4%d/ *6L32plbcz+UXSiUb;w)]~ A 9렑8ńۘfּM;}2g0;a)>)]~wAU!%Ӌqap&NMlHEiK,ڕD"gF-JGxmJJk{zvS@]p^M"bfd9T?8Z؃]-G~ -igz8[OOX:cNGSA>MIip[)VT〦63BJ QCeOx*JO98ole,5CiM"UvNE7Eӽj+V]cMEsuơݖI\va=/{EQQaͩQv&}#9 _vdے.avksO|'j7) xє&VtiqxIXYI-]>w)<qBՂ M!C>  JͫꠇqZŧvʋ,[Ze-qN[Ɵe -b񤢰O˞nR|mKnK[cl'Ʌk3ā.0ט'8jĚn>-N(cs?eے.b?S5goL-֓50ub{S>Ns]1gN΃K̹'-]]:OVTuO''2ٶKاz=caXȭY4]3kNiAMηq$vϮHO>ۖܖa~.q,w=E!%VbKn9ecsywŜ t~ KGmÏu>NŚ/)_1Dُ+%L%#`u<-]~u_$?9 q Y6nri+ʚTI;=fے.av{ V `əؿ\!ǘ KWM}qec+e.eے.av{ua\>}0Wbc>MOmeO;^wÛEcQOeʱ9o9'(9+[cyq(ڶ\ [ߥ֙ v[~' }Wy!r4VT^l0g₂w{m92iKÃ[Tm.lA(Sq4r[JƊ*yМwJS=u:<[.}?9H,'=9s=-?+-Qq ]jŧviavXTh8/u-&VTFXNaJw˛nr%6~rGօg* fGJyK83qa/x;쨵'VzX[JSuiHT 8Eeyrd%ECoSS7G)Tاv86Ctz=9NQ_rڽ|1>B𬚱Ogے.av;D);w"rrԖ9fԼ`|'㈤uwϳmeƇv4!_~r ky3b+z7?WNU"Nݠ2Rnך"L/质sa$)ʺȇ+O Ta غKJۖ\v : 1ػ7:"NBR 81zElRy=>9؃M>2wےˮ¢n ȳzDv2lp֕k'TZgNKa+Mh[r%ݞ/d4)p2"́o|`R. nj'kȂ8;9Fb;~̺IejWo9n/7*N&L&b"\wS[ⰇqHӛ[hc1l[r%n 3=[u)9|wlALϼPWzy0¹fݶ䲋7@Z'u[l͕aRu+007Nunl7.mnxަtI UARY8*rLĊܓXV[2Tے.avǻo`F_Y=#I?3 _w,ry'wJ9ɇiPw{˿G)/4PGOv$_~/QY@=@:4Z?:'VGtǓ>|OL呰oI.!q̩$o̵akgnEct!SfdL>q'p?~2*~8G #{u'|ѨD~w&[Y+Ć= endstream endobj 303 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 307 0 obj << /Length 820 /Filter /FlateDecode >> stream xV[o ~K 60mV4u}p0~%R3 |$GzzݥG,K; $DR4] I,QIG9z41Jg]r _5jZjm=y,DEY=<4kmz`XC*޻^!D2IHO^%G ?8*$:6k$v6S*wR #!lJ/|qUC8JAK]tT +K. ]us^#W7t쐎^E9Q'$3iu^}ȉwwp@-8G߉&r^P! z_a *5MjtcS[ oKcq۹y*=34:fCbnmpc0 |NuoV:[;H_ ϔ giרӽX]O2"UZ[]iZG͒qvQu&1|eVq]faO!︿W/4F0gi9:sR@WosݾԝCMUyft{NB endstream endobj 294 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/APClusterDataSet2-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 309 0 R /BBox [0 0 360 396] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 310 0 R>> /ExtGState << >>/ColorSpace << /sRGB 311 0 R >>>> /Length 7595 /Filter /FlateDecode >> stream x]K&=N8KXRU a>bՀĥO\\~],=;\qo>?o׿?o>w߶׶m-1>?߬V߮G{QC>~k}UG{z ^K>W.:Pw۟U]˿~?G?^~'۫/@ϙK9߸^߸uo{.}{UZ]sE.i袖:MxNz#oxRǟݚ!SR۟3>'hg4ׯ _*No]p/q˩ү.}[ g{`s#6:ʭĪ1#ʂ }G=LFҏ/^A¬=.ޥyҪ[t%޻߿f?{{\!Y?N 3yVQyBeַiƄ 3B.e U-R|wuJfo-a6Pk[lqW/!fiaQ>g&䞎Moi>|32yiv}ɥ+lĴWo ;ydnѥxz["n^j_mƳ5`f㵟 fiaʫDҪ[t%޻՞gh[tCW]Smin250b +>@59+1ٴ𰗭D0~O^A”.l@,E^U~cA蒽/+&NbZ̀X/˴n-FZV >bwÚMYKw㻟gaɮ%K S5ɘ_j 30ka'-gyumGL. L}吷YKwer lo&w27v=e%E^m;Uw pkcբ&zlK֐6s˪ É6@hҲGZ5-"pm+r-ڽt͋{ fݫyL]D*,Knӫlv7k޼spM-f(n`s&^A{nǼ=RwݢK/|cZ1c̮|2cMjyO l[0!.-]o,lCt򈡴v%ĀNjl:"++hKK!D$¼k_ײ 4]zMoG[}#t[R6vKHE`n\ ~҈|Yjn&]'|oj-ql#bvAn;#h6 6NnANR z#pi4.ic]4dx}O^Al\cلl=nӥxz3<1֞j#yzL[b ߭30,b4)4{Aȼ"&Ҭt%޻CxjqT՜Sn;JKy5۪TD+#ـXZu.{[r .t#9lұ,NƘ;C rkhx%c虷l@E^~)>/7Ǚ1KƷ /;#K^s)xfݢ xz_(}yT]햼j׵Ė.`^1kYvr!oJ6=Koz_&UEpacq%UA^L7郠 rbު}'ebmbMo}˾Ǿ, y91 >bo1t#!1Ж@54sDm2R6!fݦK/ =KL 4ڮ";.l3c0j;x=ɻJf;uoKw1cb*S}z8 >܉^yބC"e5" yEĤ^Ͼz[:y`yTG! ?BIݳk^t[+s-ޮ2eՋM^}}/􃧈C^"*bFK^AζocKvEu.{c۪m<% U<Ƣ}LGT A)x[l@E Lw-ƷxZiLam qqtWd41虲 y5M^}[+Z+WMyLC^y펵$fp +Kv<]zm2kj{`di1ccH̰8bZn#j6쳥vlSTj#R0`-=1%gqD%ؾ$a(cQf6-epuN{jζG~Ls3ZO0!f+ @w|Rem˞ڈmV*;&gE'xX􆷋>0kV/^L rݢK/7sַtFlWtlZ>y.^C͖71Ӽ,eoiy]軭(xz_dc/#=H`2)߁(!N(!{6}N9sòAC. N كM^.]hhVr2"xDKa5ҍkh\k0cмA4>[ҭy:C$^c ¼% aW3^ k&&YOpLVnJ 78\co\ޖc@4DHV8EhVČ𭒷~9@tE7LsCoilGlf~q\1Μx7aU7֋oz[U3LBt,=LB,1T2F;h^䌨q\b$nI->hqRtԏ a1FGSO ^}5^ }WWShŻ%{ˮpݢK/L-\wqA= b ̠\\F|7]3$È ,KM gaDeȊ^"auksico,5]iM"7+I7?Lc3d{֤W54/-ڙ7[&vw\tE7myۈ:dyi8w9 '#a"I(cK$ ʶB,y+Mv.M{yx"&vuI V B, "eM&%-LYyILJ)#YKw5 cA2Z-m Y`RAt,- S5˾\Kwut&.#ya:NEd!xtCliwl Hϫbyc鿔-QwҋS{[\Oc3a&2#ճgB}Q7f@e0xҖMY֔ozk u:55ƌ9(w8f0q1s H2oC e7S-"c!g k"G0'Ԛ{K1r*]o9[z_ҙSvԷwCƨxA|jE4Zz%wmjӭ XI3H" nżyZ٬[t%޻5ca؇0'w\ܜ&2+ :* lks-yfKل8Y֔oz{7(&r+Fx?-L}΋ܼ 8(cυE yvӣf:$oi-)p1َ3#2zV ]25u.}YZxIq氍ۼAD%y\W֬[t%޻ޞ/`YbvuNěc֎QÛS*ڼ Zµ`Y-]oIDNQq>4iK(O&1J&Ҭti*޻޶ɝcFCXFfTSc/{Ӽ+EӘޭyy!²+ESu.M{[RyZq i\+.+ Bzy ռ„1;.>wǝʄ6z`,)Qјωi!˶_O2!pVQS6!yѥxz_";ȩ"{Sђ{og}9 |UyՉd biԝuZw/,"y?̠ FfMCq;cÞ&IT8-@.亁I`"f0;m0a;֧!۱}'vlm;x혒Sӎnѥxz_i_c+"j~Z{i29W . QXʛW~a=ˇ!VݢK/vHiuc 7Fwyg =TϘ y2B2unĥ8YMs5wNi#1SxN+:9oBŷc!Bk)A*z]o;1aRͼO&WО3=۳:6Cyrѥxz_ҐtLc1pA l@!Ӧ8J5y yY&˥m+-onӥxz_qg/Nfi0{V #:W:Dl9ӏфelB)1/M{cl`5pab@hsO-EMk-a l d^^]l@QKw-={(.:82ML|4Idv䓱ԖXuJmw a8ڕ$LÆNA0~٩ 􋎕,y QI +e.M{fqDYaڋGE@Ҩ2ڽ%}?y$cg^mHYYKwNb_){2d𽜆jӘXq』Uگ@0ۑzi݁[tŹ0Un~19}|2 Ѯ[TzNUbps2ywNـK a;ƔeݢK/pfҜ3--۠ӄT=Rԍ[|+_Tw)i0n)f>]zMk}͒&s68[q#fy^;0t A7#soM:.iu{:t %fƦwD/'%{(Tϳ1+2$? chOߤCG?8xUX#O}Njg!>N(B՛6|^% yMS ?HKe1z >8_tX<^eOw£zO<B>.Qϒ=/?q^c,#J5\?ü$×ry=Q֯%/*m_e񕌼Bˌ|ե|boZ&x(+`0X oAW=[蘾 շ* /|1:t}ѳRX݈݌o=Q4~#W"~~|aշl_,}e6җ}Zoקd>S-΍dc e2{όGM<9cc-:5eL6U[L> stream xZmo_ٗ{Ϯ/zw@SFU%PrbYrLGr&DYr9;;;/$#0 2Z'l o;EIАZBVtցH RWP'I8o1n2K ~q{{)H/;" +/ O+1 霑vQVr*VA5NDCO%FKa$GbAdfdV߇ ! =0 7[ha!, ܃ ;a0%'Qd {i2No2$~(B;#G9k,B^#L NN!q7*e\8H2cj-Ra?:#NT?{ο'onԬeẍ 5ڪoUqqQOټZNmWO?m.u4ɾ(MA?pYXU9/r΢e3߇p魱\ғʏώ~gk͊4b.A@\\']"RoQr Z /d`f|>1ۜ\;S>1ny>YiZHDQrQHn >c}HPZU (; ς} {Oh:z:nhY4vhVj̪,fI%JuUvL˺jՆ5{k34zd<1C{/`m%~`ݑނ2G6(c WhTz 9_y'"'EW''? +#9}^_b.[ۢ-~EY\Ůj`}lƝf~-Em՛S=&﫮.lH_%XVϏz1%O?Ѵ?>/.*hUZxRWtъ@Iuj`x_\t*yTTWOƕ*Jd|!EY8j\cnmՅ$P0dR||^դXtl;U̯ESiSr>K)?ԅAx5$Jb2:.o !o93=7[h>>$4-k֘O;il >kWHBr;[JoR |vv ߓq o-W|`wh6)b1 M_vLfޠ) 4! N7M)m@S _M7JH~o?Q$cCj=\v4ktuI_ kAZw4>O5nUE_yP"ӮNܡ[.r[Pb( .KH2w߇ ygwnl0 a!4}3[ˬ endstream endobj 313 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 304 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/APClusterDataSet2q0-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 315 0 R /BBox [0 0 360 396] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 316 0 R>> /ExtGState << >>/ColorSpace << /sRGB 317 0 R >>>> /Length 7595 /Filter /FlateDecode >> stream x]K&=N8KXRU a>bՀĥO\\~],=;\qo>?o׿?o>w߶׶m-1>?߬V߮G{QC>~k}UG{z ^K>W.:Pw۟U]˿~?G?^~'۫/@ϙK9߸^߸uo{.}{UZ]sE.i袖:MxNz#oxRǟݚ!SR۟3>'hg4ׯ _*No]p/q˩ү.}[ g{`s#6:ʭĪ1#ʂ }G=LFҏ/^A¬=.ޥyҪ[t%޻߿f?{{\!Y?N 3yVQyBeַiƄ 3B.e U-R|wuJfo-a6Pk[lqW/!fiaQ>g&䞎Moi>|32yiv}ɥ+lĴWo ;ydnѥxz["n^j_mƳ5`f㵟 fiaʫDҪ[t%޻՞gh[tCW]Smin250b +>@59+1ٴ𰗭D0~O^A”.l@,E^U~cA蒽/+&NbZ̀X/˴n-FZV >bwÚMYKw㻟gaɮ%K S5ɘ_j 30ka'-gyumGL. L}吷YKwer lo&w27v=e%E^m;Uw pkcբ&zlK֐6s˪ É6@hҲGZ5-"pm+r-ڽt͋{ fݫyL]D*,Knӫlv7k޼spM-f(n`s&^A{nǼ=RwݢK/|cZ1c̮|2cMjyO l[0!.-]o,lCt򈡴v%ĀNjl:"++hKK!D$¼k_ײ 4]zMoG[}#t[R6vKHE`n\ ~҈|Yjn&]'|oj-ql#bvAn;#h6 6NnANR z#pi4.ic]4dx}O^Al\cلl=nӥxz3<1֞j#yzL[b ߭30,b4)4{Aȼ"&Ҭt%޻CxjqT՜Sn;JKy5۪TD+#ـXZu.{[r .t#9lұ,NƘ;C rkhx%c虷l@E^~)>/7Ǚ1KƷ /;#K^s)xfݢ xz_(}yT]햼j׵Ė.`^1kYvr!oJ6=Koz_&UEpacq%UA^L7郠 rbު}'ebmbMo}˾Ǿ, y91 >bo1t#!1Ж@54sDm2R6!fݦK/ =KL 4ڮ";.l3c0j;x=ɻJf;uoKw1cb*S}z8 >܉^yބC"e5" yEĤ^Ͼz[:y`yTG! ?BIݳk^t[+s-ޮ2eՋM^}}/􃧈C^"*bFK^AζocKvEu.{c۪m<% U<Ƣ}LGT A)x[l@E Lw-ƷxZiLam qqtWd41虲 y5M^}[+Z+WMyLC^y펵$fp +Kv<]zm2kj{`di1ccH̰8bZn#j6쳥vlSTj#R0`-=1%gqD%ؾ$a(cQf6-epuN{jζG~Ls3ZO0!f+ @w|Rem˞ڈmV*;&gE'xX􆷋>0kV/^L rݢK/7sַtFlWtlZ>y.^C͖71Ӽ,eoiy]軭(xz_dc/#=H`2)߁(!N(!{6}N9sòAC. N كM^.]hhVr2"xDKa5ҍkh\k0cмA4>[ҭy:C$^c ¼% aW3^ k&&YOpLVnJ 78\co\ޖc@4DHV8EhVČ𭒷~9@tE7LsCoilGlf~q\1Μx7aU7֋oz[U3LBt,=LB,1T2F;h^䌨q\b$nI->hqRtԏ a1FGSO ^}5^ }WWShŻ%{ˮpݢK/L-\wqA= b ̠\\F|7]3$È ,KM gaDeȊ^"auksico,5]iM"7+I7?Lc3d{֤W54/-ڙ7[&vw\tE7myۈ:dyi8w9 '#a"I(cK$ ʶB,y+Mv.M{yx"&vuI V B, "eM&%-LYyILJ)#YKw5 cA2Z-m Y`RAt,- S5˾\Kwut&.#ya:NEd!xtCliwl Hϫbyc鿔-QwҋS{[\Oc3a&2#ճgB}Q7f@e0xҖMY֔ozk u:55ƌ9(w8f0q1s H2oC e7S-"c!g k"G0'Ԛ{K1r*]o9[z_ҙSvԷwCƨxA|jE4Zz%wmjӭ XI3H" nżyZ٬[t%޻5ca؇0'w\ܜ&2+ :* lks-yfKل8Y֔oz{7(&r+Fx?-L}΋ܼ 8(cυE yvӣf:$oi-)p1َ3#2zV ]25u.}YZxIq氍ۼAD%y\W֬[t%޻ޞ/`YbvuNěc֎QÛS*ڼ Zµ`Y-]oIDNQq>4iK(O&1J&Ҭti*޻޶ɝcFCXFfTSc/{Ӽ+EӘޭyy!²+ESu.M{[RyZq i\+.+ Bzy ռ„1;.>wǝʄ6z`,)Qјωi!˶_O2!pVQS6!yѥxz_";ȩ"{Sђ{og}9 |UyՉd biԝuZw/,"y?̠ FfMCq;cÞ&IT8-@.亁I`"f0;m0a;֧!۱}'vlm;x혒Sӎnѥxz_i_c+"j~Z{i29W . QXʛW~a=ˇ!VݢK/vHiuc 7Fwyg =TϘ y2B2unĥ8YMs5wNi#1SxN+:9oBŷc!Bk)A*z]o;1aRͼO&WО3=۳:6Cyrѥxz_ҐtLc1pA l@!Ӧ8J5y yY&˥m+-onӥxz_qg/Nfi0{V #:W:Dl9ӏфelB)1/M{cl`5pab@hsO-EMk-a l d^^]l@QKw-={(.:82ML|4Idv䓱ԖXuJmw a8ڕ$LÆNA0~٩ 􋎕,y QI +e.M{fqDYaڋGE@Ҩ2ڽ%}?y$cg^mHYYKwNb_){2d𽜆jӘXq』Uگ@0ۑzi݁[tŹ0Un~19}|2 Ѯ[TzNUbps2ywNـK a;ƔeݢK/pfҜ3--۠ӄT=Rԍ[|+_Tw)i0n)f>]zMk}͒&s68[q#fy^;0t A7#soM:.iu{:t %fƦwD/'%{(Tϳ1+2$? chOߤCG?8xUX#O}Njg!>N(B՛6|^% yMS ?HKe1z >8_tX<^eOw£zO<B>.Qϒ=/?q^c,#J5\?ü$×ry=Q֯%/*m_e񕌼Bˌ|ե|boZ&x(+`0X oAW=[蘾 շ* /|1:t}ѳRX݈݌o=Q4~#W"~~|aշl_,}e6җ}Zoקd>S-΍dc e2{όGM<9cc-:5eL6U[L> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 324 0 obj << /Length 1107 /Filter /FlateDecode >> stream xXYo6~ [bMm MSyPd:BIl}Q`BF€49C M#"ɏ۟e(hse `$]$BM-8ai֛Γ7ǜD1UaZ`4UiBA#AeQ*V=A3\g'BILu t1!s!y5Jkxr҇쓥F1L$EJs3f|)@Lcj [;Nע4g)Z߂"lPTw˶5^5#+czcFߟř!6qeLo@U쾗j85Oc4zP.q?vʱڣ/w) 6t NLcJ$’(-sO#Q0m!c>XYP^N޽o  g{We0WW~`i%ùλ\?ݪϮH[8py{;z+wm_Et8*Xu\|q U;d0dU6&TJD]stduS6kan¬_TbK5fh[ﻟtnin!鯎nqX/|}skM6M]P_@ P}ҵQggjvWWx8/ΐA] endstream endobj 320 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/PlotAPClusterDataSet2q08-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 327 0 R /BBox [0 0 360 396] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 328 0 R>> /ExtGState << >>/ColorSpace << /sRGB 329 0 R >>>> /Length 8040 /Filter /FlateDecode >> stream x]ˎ$mW^ȭۀu/ 2 A-¿y0kFݵ3d3 1[~7_}-eYn?}߷ro_}o{~{cUn/m*r.O"ޖSN"_'~[w cv}_n~.x@/z~]q?ލ^oz/ˬrRΆ9P>LRhgE^v唓#7jv;V OouqK=8[(s XIA>œ55t~؞A@Tw5yn ?([Yh-^ԭZS~zbIQ7-Ύ/l~nRAQTث쟨 ەYЀJ>dZ6|yd+l{'OݠcQKث-ӗY6Ufc̲ۜvf;~osD͎Xfi`[\,qbEA7-N.ΤnPʖ\v {w֞ݓt[[ f p!mqZM??#"=f;`9@>1$j?elew}AGcZo%㸍(h'ZS1&OU&/ :K>uZ >uD"S51 4ENbtCgݏ݊I@1Tw5`XGќ~_1Ҙ~\?c*{~8>Gbq۩%]^~a.٦ҁW29-FVJ*n M8{pWƊYb|;l3&_leW_hZkpgCQp-,袢`\4̦M:ۿc9<;GO-jt&3c5MLI1,h-HP+~*ƌ㦾Y+ (SRGV߹ VΚf}3YwXUpaƘ+8 cnX+ he⮶/Qyo[8˜f02t1C=_TseTYo+) j.@ԵF9PIuݢ7$}5#,{[rjtCKt(+.n.RD\}AC8(_ 23Y3LaB-##ƉVT`\vyeR*kڪz90)-VoWw=W1}Q +&c+ +( ںA*rE/8zo 5 *wrGs8ЊsHeZ k:Ny#r  砈i2r+ kqZ Ay%]^zGNFafFW;Ë́\63H'ZS1["c SIi Lca++h"›*6C\sF-K9Q3h.(LJe qW[#+ei Vz1LÔ=_bEA7-~_M,ʶ\v {^ o {.-r`oY-9Fݙ D}ǯN)G&Vp%YGcWdͲ-]^>ݳ^~~F<7#2~(=M}ǯ7|;QcE5T+7'ݠk-jw+'5ە{Bx08nb!UDa6iOyEhClRÛA6تub{tb&?8sS%nKRm7RXS#G98blk&E,r%ƞyrZlM*vHv)c[1+ڟ'hbLҽ؟gًg.%9ҋɩξu)ۆ}+wM8%rQїM<&'Z}6}j+:v,8X<[Q )GXQН#6"IvP7){(renƞ[Bz8p [S۽S."h Nmvm%]^~eN2L+۽rߍ&bĶ8AQ68iv:IE9H5.gORDybEA7MN,9ƒHݤd|J{؋j%W+78 ;S^9c^WY5s80徴.)]>l5 ^teBp+]0%HGU'@ TIغ6ZRxL~aZWXyrXdj@7PStS,)h.aMk'#~*rEZLLt{$Ju0c$Bvq%%9+vaYnVٔ.b~aŹ8_6'm8 7|#R:8׎$3jlWpIIZ7]F/x8\Z&G_:фEbsK(Y6z683 Plb-j+F+ַ cpbݶ!E nK!ƑIII9LIip[_X*͞yHY1qf@\4"1p]D"BRJ-\fIwe˦v`7=Pv^+bHo<5Q9u%I圲rEc ZW4l)65vd?dž-۷XQ]c77Y7ZUbCErY*ˉ\F8p 2:8 Ɗ&[9t(yr^pߌM`r*63uW̲%]^>Ŝ8,Mޮt>>"}2 Q"<+ kqxVX˶\v {[[GdeN3BȌE0ɽnRƂU(++-F)/Bn˕18\_>2{L5L7u m²UͲ%>B]vd.ѿ]9;#& ﲚbZx%خ 䬻Nlev*{^o'|_K,"byX)۝NqԜm/buK/wT8i)v #R qnbbyg1 oܱVtˇFa,v_uJϻ#}9owkKtϓ DrDe؏Ϗ[bMe99;)2m"Zt/I+H7̽E$,wg;jHq]YKҽ:jȲ%]^8\3:) g,lb,ԎޏSKp+5V]ӈӰ0baI,[r%Walyc8k9ÔWO>|FbcMfٖRav2t9doo֊tVطSN`,*`ΈՃhyU@e[.KB{WJbrp VZQٞ(BI% cEFs6\D4vE ˶v{nP;:oNE*vv8AvSne;o4aZOݤl)]^~ޮ-:-y|w ůx:#ݢkFثݯgl } :er[S޹׶:x9a%lp.`~şhO.F1۟a|N~?ߺu۟+/l?*[r%~u,ҐT+̑t AR(("`9`Ɗ8;3UKث/sE>pܱە,8*x`觼j0gAa˺AK"B>~wp=و^NjS?h;G{dI/[ T,8&ld[&%2]>ؓSKZϚ0S`+{<9NE aEmi9+#Ya}1]QZNjB}-&j"#Rp~u!eR1V,qXQwYwO%]}i+`;kY<9/l$ʶE7Pݎ)%bݠ{QKثj%~~r4̥i3BCv YD҉;ֽ\3}O"|ù+ȱFR`9^L9Hh+j9vXw˦vvwk6A^?WSrW +jsV)9=<ly,[gzB{$>p.BC>{^p;q'VTF#6>"-_Yqٖ.av޳Yq旄->5¼fC.T$\+ق;B +ݤ} {[jvW@Š 듨URnxH'$Vt$FS k'-jGfva 'jb># -)1]Hl9yTw&NΙZ[*SRZ#VOHEs4,ڕ gBk)~1K'u;t:Hl9P7K4TثݯL8KuC,9YRbʧS ]%;.[rUԿa`-y8X _cYY/)Ptn,=K̩</lnur"'ʖ\v `+aֆ:|)8X4߂͐8Y@qkjɍqrYuʥs=K_ 6Z"Br'cnaV2<..5{99|vXSw>eK.ل1td29+v/ ss2u- օ+_Tϻ8X8]>˖\v`+i,[+ ƍC S^yS텺lj-1o7ƒ b~-}<19+^Yx'`ċk۟NH+{4ڗֿʖ\v {X>s/\‰S|>DzE/ii~✏?םp>V~>jB~ӯh@1kQѣ|c2x7c>:|`uP O/YIOϤ'rCʇPHɗFe}^C?GZZ?GT_CmUȗ ?!|Sy|XN%t6ӯ]gf3Ǿgkf'o]egIT9'>,u^G>ćb+2a ][ޙ-\\ܥQq.:O͎| Ҝr|S.?g0J>%;O~lzCzZ^>1.>/>~ӊ{VB* u+V/K{P{Ӽ7c÷Nyo7?_ރϏ鼓Z{[O!o4nIWy7>ZM_)krgO-oO׳_NoGk<;=]tiGN ogWzN^i;/O~|SwF>oo:œo2[٧yyVֿU:k}as|)oy udQ(4[xcvw Z>cs0?]! Se;.> ^8tn{{XRȥK4p@vF?)}M< endstream endobj 331 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 335 0 obj << /Length 2082 /Filter /FlateDecode >> stream xڽَ6_! cEuX ,r`H&^a2EۜDo]EbUHVP,x9۹ ~ZVޭ1/$J1Q(/`W$[o,$4;܆o4"XVqhz̰ynJ`8H "*ЮH?2UOYGIU~[ů.)QdAVQY*"%+DJ߼m4J</zM-fY%jݝ 4 ]_At3g;4ndP}o̫Fu6 _5w6E`L&QQU|9z2ԧSZѮ0y@ʃTrAw=*نGW3,E#W +e\;,\Ai`((Q(`FHph&GvlN (/"<2qn#Yd&Ì)S$G ưJ՟0Yǯ*.ڎLv@C⸟5 _DI0qQ|1ѯmtښXasL%ځʊ7zu%J y_"Iy1J`w>Ǿ,g/pvXo¶CH?;Bu`} 4|_ǴWߒ2||@79tEq̴Mm-8W[ |me>eJ<͗_lL"iz N(0Hߘƴ+HJDv/GrlF c삝t?X@J|lLJT=w0JGݕOԳ2n9%"=`,E-T gPfW[l;HEfރ\IqSWs <߫,R֥n7ݻpȫh1q̽*'aHu0LW-I#c[3\[Aˋ9+4bPAxnKɪRyX }{a~5WS}zݍ|m3ԡyF?:d lK 9t.`V$2u_ǘavC@:RшT|a2|᛻=75ذ,RTo N~e!z`z5o*ͻ~s_ n7Zxd{B'ZslG( PP endstream endobj 321 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/HeatmapResultAPClusterDataSet2q08-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 337 0 R /BBox [0 0 504 504] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 338 0 R>> /ExtGState << >>/ColorSpace << /sRGB 339 0 R >>>> /Length 45356 /Filter /FlateDecode >> stream xAr[ez@ J85dag# 9ycmbVeq??o_??o||ϯonW/?ǟc~綤oK{?Kq{N`~!}oYYfGˣs9ׯݹ??ޗߟ?~-_| H?pyo?ns}z_/xݵ?<4}W>=¯?yW>=?}>[igo|.s>x>s{}~3>Y}חǗ`{}~I|۾"wyQc{?g>ܶ>owwy/kq|_;n?ZNv\%1|,_s_?>G}=qZn?_KS{s}ڟ_=}׏?ڷQoi{ԟ~|nԮ??~oۏ_C-o?ퟏB/_<ЯOz ȿڧo^.nYχ>_|$]Oܟ?=m{WK|?˷O,> ?3>^./s>-w}soY~z[篟dlxyn}{ct?/Jxxݟ? /H;g$;{?n]}}ھ1>>^<73_όz|EN{|}޿+ i9:7_?߿i9Z?n_q~ΫvX-8Z~rd?b8Ns'8{G\ͣW,o?g_H4Ě;Q}ڷ1e[y.^=xz.1ǞiǡK--ǟK_<9]b@xnų[*۟wxzsgC%|s2G[<8)1[?˜s.1G[<4xj.1[u|\s9q?gN1xcn8\b2Qs?{_±6a-+;kY8viݫۿ$Y4fQ8 L+̢ pNpӔW_kX`?|۷u /| ԗ{vϷR!Ih&ߟ n啳ӭl&=iMtZ'.&)0O.Drsyx`%:v⣝8/^x[ir6LtąD'0 |čD'0 &:D'pB`N\Lt N`8q!0 Lt'.&:NąD'0 \/*U57({YV({h{Y,i]Zqˢ8͢9eYT3QOT^&N3Qޙ(k'Lޙ؝b؝XDYKtNTNTwL]&ډ7X|21Ϥ92/5LDDD,;Q;QKl{gRDKl>x&gDa|y+˻ #zrybc&9LG"舞N\=Q=QMtDOTDOTDDGDEDE4=Q=QMtDOTDOTDDGDEDE4=Q=QMDGD%/}~},D]!ZogJ D5\hrD)iW\֯sv^`k`Lt'.0&:W0 Dī^񻆱?(0~{%)LƉ/ ./?.DrGvV.oes\&ݼŸX`CZLt nw.Uoe#0!p&N]bذ|~d v˻ N`8wGLg/\N\Lt..g\0&~n~ݮ»]܊:55i}čD5iК&:ZDuBkӚN\hMtZ։ Nk:q5iMtZ'.&:NąD5iX )*Dg : ?>&_g :lXT΢At-NkEc :At9Α8NDg7QM\hMlΑ4Τ77w&4fNͤ7wnbn&̙ɭ8sf09L DqNtO,p>9q>iL 3i>}WNTOTϤ`L gR1|&Ù8'*'*NJ뉊h#zry˜0hc000&:'~oLSk& gRpy&4"z":qADEDE4=Q=QMtDOTDOTDDGDEDE4=Q=QMtDOTDOTDDGDEDE49˾n8BtY6,ִ,EqEs͢8f>ڂ,":rY6,;,{&h#:9˞"zrXeϤ8fҜeaL,β8'60f0N`̤1qcxx+`̤q&D1aXIc& Ic&cb\LDqcØ0N\`LtƉ cb1[LDqcxbCL8 cxbwX=XM\Kt `X6q,Kt&.%:`D,%:`DlXMN<^-/=Z,S,h Ufќ7 *W/TMSҚcQQ5 ?MkNvEwQJt&:J':?im& Ji-E)9ѡIIM& Lh2qh&.$:4 43YId@3 Ln 4 Lh2iyL:h2qhLhDfMbqqL#3YPJt JRؼx&R4qA)9eP5崖(%6TLZ&im&v8v#n%:vD.ѱ`%:vDn]cM\Kt v]c7q.ѱKt&.%:v"~{v]b$ů?bMs+֞^dqW'~4g-VpҊ_t ƮȂ݉] ~}OT?a v݉݉]%vOƟII3Q ?|y2+sċo_K# v+N?īϟ;OK/RL_4%0f|VLDDD1 Ǣl `pmlZ,Z g-Kt&Ver>\'~+ v v8vDnb]&;vzg%VeҰ6qa-YKt&Ver+Xˤam& kﴅĆTeҰIcұIZ& k3XYKt&.%:kąDg-YXIZ& k3YXKt kZ6qa-YKt&.%:kĊLDg7DgmZM\XKt kZ6qa-YKt&.%:kąDg-Y%:kDgmb? kV6+__2X,MkEcQa7Y8v`7MKkX{,*fMkX{,:2qډ~KlBUbCU&Nm~&VeҰ6b-L kZ6b-[Z& k3YXK)kZbL*2iXˤa1Xˤa-LDlXM\Kt`4e6D,%:`/M>5_4\Kt&Ve%:va%:vDn]cM\Kt v]c7q.ѱKt&.%:vD.ѱ`%:v~=^^ ,. |zʢ8eNpWo>2*, P9iy/eq c71P.U5D1aQ=QiMl!<DMtpOTpO,!>Q>x03)!<9L '*'*Ήs||888':'*'*Ήs||888':'*'*Ή?/+ Y48|X8i γhp~,*g< WNkp~,*g< :3q ΉsbLs2X؀; Lp3Qp_ϫhDi}7[YNt'V gr+Τax&已8'*ΉÙ4 g0t g ؀;D7X|$L L7<gxbs>9q8 N\Mtppg|zL׷< L3q'V8g8':Ώ8':Dys8O\pNt ΉsqXᜉ8?s8O\pNt ΉsQ=QMI3).ўҚ\=3QZ˗_ G\Iq6.hϤD;('h3qOTNTDDDE)Q:Q9QI||I|>}~DDzNՉ҉%LKgR\=e-Y;Q;Qvv耝%:`'*`'*`؉ ؉ Xvv耝%:`'*`'*`؉ ؉ XvvXl*f6 4*A鱨PE,G[P֠4 EiZ{Y4(͢APQJt&:J':?WPJlPQxy6k `+2iXIX&D,QKl{gr+ˤ8e”xSDjbEU& U4T=&U8U U3YJt UNUS5q*ѩJt&.T%:UNDDEDgO3NJR JRbO& ?8?~D7~DgOL\It~ ?O3q'It~&.$:?ąD'$:?~Dgbsq?~8,,G[L+>*e,G[5b9LShҊs΢8)NąD'%+& )E3qR&6[5+R]XH|lLˍgLl~ULH߲ )RLx4h&7%%IItR&6Ϥx&TIIlHBJL\HItR )NJ2q!%II,>tMCL\Io,D&9̤'L\;*ѩzčD*ѩPT%:UDjBUSTM\Jt UNUS5q*ѩJt&.T%:UNąD*ѩXPŽRVPu_SB;K}g:kYvӌ^g- eOgaإ5}Nh}Fc3ڙ(kXL >'g|ӘgR9yωvbwΤxsb~FT9|(&h~;0~N^19y3Q.?qh\~FD3Ѹ5YHIӍ܅]x[y_n{hn˞nš )3YHItR )NJ2q!%IItR&.$:)ND%3:D3'. $:‰Jg4=qn p;,p#:܎\B|sq_ yDEȗwa!AHt&. $:ziˇ1_ߊ^|y+ 4MC3q&Q/yY$:?~DyhPwQvy{z{4G)MQJ()J4E)PJ{qֺ|-5QωO /kyw:n;QO`'^ vN`.(v{֞Z }7Y{~HZv:v݉7cDD?x3N3щFՉ/ԽWnneALDGDEDE)Q:QQ:QQJtNTNTDGDEDE)Q:QQ:QQJtNTNTϨL\ '*4'dМX@s&484'*4'*4͉ ͉zHljz8QO‰ ‰ Bpb™(ޙ8QHt&N^>L*<~ӂpRm!e2Iy<2<2 '6RD'e_;Hl3YHItR3L3F&NJbsƘBJbs+<2id?Ux?v+~D'eBJMA2lϏ?V/=߅DIsɤ9<&v߿st:g&:D'pB`N\Lt N`8q!0 Lt'.&:NąD'0 hD7D3D؜h2q&[K{y3q9$'觟DjBUbsO?r؉OBąIs }{{\q֦], ֲK,㏖oMsҔ4emZZO<}NTN_wsuNTNԓRvvbZ& kgrn[/'?oP}NËfR|xL'?)=ߘ謝x3@L =XVg.m9y>'U& k'H4LDgDeDe-Y;QY;QYKtNTNTDgDeDe-Y;QY;QYKtNTNTݙ(v'*vwD-[N)LS()LS`&~ \ztvLtpg0&rB`XI>ܙ8pE3sMı`BOt&mΏlhcMaLtƉ܉܉d%6d,Kt&.%:`D,%:`DlXM\Kt `X6,,{z/X>\Cc%??_,ϸII+>E,4%%MIg4#3uRҔIy:Bӝ[H9QIItRNTRNI|:)z+WUK}[qNT/L`b|LwDKtNTNT_#{[qN`'*`'*`ͻ]gRv&k3:LDDD.ѱ;Q;QKtNTNTDDD.ѱ;Q;QKtNTNT\6q݉ ؉`8`'~zY^XK|ױcwgYοpz/p˭'-;\D-D%L 3ƿ_ / c8mr/X`0Nsmq8MOU.~xᗿi' Otw}1aLԋ~: +2/~&^bW_Ɏ큾/8vDn = n' v7.ѱKt&=?{W{ ,%:vD.ѱ`%:vDn]cM\Kt v]c7q.ѱKt&.%:v#n%:v v3YKډD?%i-q*ѩJZbR& J8JD=%.$:?Lڙ8UND?ؠILl JVfѠ4 7mg~.09= 4iͣpQk3y6O`Ӛcѝ2q~6q&ѡIlN`3YIԋz'6Td⧪īO<9UeҜfR2iNU84hDfbuV2iNU3YI)4MC3:UeҜ2iNUIwġIlMCL\Ith 4MC3q&ѡIth&.$:4D&ѡ@$:4hDfMC<MC`% ݩ*gO`=߿T5D*9Uͤ,L|+/|+/˭8D?M\N`Z6qa-Qߕ:QߕJlןRuyќEX`Y(`ߜ(NUx<_PӾ%8XNkN`Y',6m9&*/zKtOTO,̤!Lؙ ,9Iq;}g,!L D LtOTOT:gRxi_t `Rz(,^|0^߆6KSݴwvqݴ݉JՉJUNT `g./%^bWz]`|TLJɎk}Vcfr{cfR|ěawbwο/|dDLDDD.ѱ;Q;QKtNTNTDDD.ѱ;Q;QKtNTNT v'*v'*v vgR`w&]cwbqYLX& LD5: Τ.?kNT#fb8vgϤĤ9ý#X| EnWn״iqM\6 ?,Y{iڴ\6 ?,8͢:cMsىZbq0D}`&33܉51kXΤ&&{UgR\<,Ot{Ugr{3)ޫd,%:`z 1߫:PYk&e3qf(%:JDGiR(M\PJt JR4qA)QJt&.(%:JDG)Q(%:J(%3˂'6(e(Ml. NlPɂRX2iNkg^L\Jt_ld,Kt& D=(MPʤA)T(|hJhPh JӊKY4T= UӜiNգ-TMs5T= UӜi UEGU&NUS5q*ѩJlBUSP5LĆ,T%6TeP5L2q&.T%:UNĊLnU4Td*T%:UNąD*1ĩJlBUSTM\Jt UNUS5q*ѩJt&.T%:UNąD*ѩPT%:UDjBUST=FUSP5ĆLU8U U3YJtfRQICU&NąD*j& UNUS5q*ѩJt&VTePICL_~kZCUUY(UӜ4=?E ,4jZKpX(`iz qSTT͢LDDĂL 2i:ĂL^,LlP:3Q3ҙ(e(x3NTNT B݉ ͉484'*4'*4͉ ͉ MCsBsBММ$:4'*4'*4͉ ͉ MCsBsBММ$:4'*4'*4hNThN uͅ3)9&L h2qhNThN,ɤL hΤI֙`^LtNTNT3)P:}+ߋGEL,`bAiZq~ʢ8?Oi4GL+OXP(MkPz,:2q JRX|LDM+|L3љ84`IL3)>IL3qo bJL׏l'It~&64cfRfRYKlXZM\XKt kZ6qa-YKt&.%:kąDg-Y%:kDgmZ=ZMXˤa-gmbZ&ZbLĆTeҰtbCU&NąD*ѩPT%:UÖ&-Mt~&^~GYX4Y\X,L+~W*XT'Y݆Sh UӜi~Rzw(~W*Ǣ,,^ՙk_uB`LX&`s93ie8sY&Ň8esY|c obs 0>D7w&>߅}淸Τ-ӭl&6dA4MtD'.&:DG4 &:DDGth#N\MtDщ h#:qA4MtDqC4M,.Bf!OlX!# :E]XhMԏv"Vf #:qA4Q/BX\dA4MtD'645iК؜2).Bf)V>^. O`;SEi tpNsD їS競,. >}M_6<&D=gDDD=&)D=%^v&y|a-QYgTv(xwO`' ,/O  '*&~'(.MT~~w^Axw3:'*뇤 믂ss9J'*J'JR)`%e(v[1_ߊr;'4]X=qv?OMv^,/uBD?Z9`⟥B4'ph =vDZx//IKt `X~޻|_ [q'.&:NDoL v]c7q.ѱKt&.%Dn]Y^Kt&.%:v#n%:v v3ıKt&.%6e`7 LDnb]& v4d.ѱKlɂ]c`7 Lv=?ÝIL.>,QO;2qfPPQ.g JRbLDGiRbR&Qz1EFUbCU&ND?XOt~&V|hnnNգU'Y4'Y8k6Y=4gmZcQ6 gmh\}svD.OkZ UNUS5:e6q,Kt&.%:`ěM\K]< `D,{ D,{_o 7bLfO4^wo`%ąDg-Q/,&?=5+f!OV&NUSPۨJ2ӝߨJwA.,T%:UNąD*gfPT%:U"_|~ J]2^|+~DlXM,{ei iFiRtsAМfМfФ)4~ ,0hN3hh>'g4hNTh>A P:QQg4NT>|Nh|FD3?9Q7a3?'*?v,+?9Qg4~h|OgR>'g4hNTR>N{R2'.@](NUOU#D%3)/mNUg|F3~:T9yKgR\B~~;91>؜>'g|v&g|9yv&g4>v Lh}FcDe3kX;Q>'D>'FՉJg4>QubEՏυRu X,Ms9`6GQ4gmh kf;cYc7ͱ{43:kąDg-Y}{:oM\Kt ` `8`DlXM\K)`ųM\KtGKt_??Iq~~~8k_?)}N^?)Z''3)NJOJgmZ DDE3~R~R:34ҙ'ω/K+:: lZYY(v4.Mإ,,S,^daYDD1aes9q2ѹLt.'.\&:ąD2ѹXqIe&ąD2ѹp\&:.oes9q2v/\&:.D7.ĘIsb<G4 IL*D3qDщ4f :DG4At& hbL*D3qDDg Iq6̤B4G4A1M,NLщ4fN\MtDDg &:DD3qD'.&6fb'3q'V0f/yNˉ?.\>Z,.g\>Z,.g\>4rsh .gpXT\΢r es\N\Lt.ˉ es9q2ѹLt.'V\fps9q2ѹLt.'.\&:ąěr\N\L]< ąD2ѹ|čD2r&8ąĆL.gRqs\N̤2˙,\&: 3YLt..gRqIqLˮ4]Ϥ5֙Tf&6>&8~> h~Frbe& 8.Ć˙,\&:ąĆLˉ 4gΙTgLZ3qZ'VfgDGtb߲Ve&黉i471MMLS)/c8aL+`̢q Y;iDD;O_#f\&:'*'*g0&:'*'* cx`V 1%V=8mjS5ͩziN4(MsmAiZ, Y,,6DlXD? ?O3q''gOL\It~ ?7'xx~ ?O?Obq.ˤ9r+ąfR|8/3Cz_&UXIt~ 4M~2?aybq:⬕Is:LV&G\ġIthq&QO')q#QO')q!AHt&. $:W }y6DrDx}.O[qR&.$[5c@,$:)RD'ebE:= 4i\XQVڟ,9UӜG[P5Ǣj~~GIt~ ?O3q'9eb(B;UoEͭ8kg`c7q.ѱKt&.%:věbM\K)v]c7q.ѱKtq.ѱKlI]&zDgmZbsʤ9Uͤ:Ue⧪Dgmbuʤ9UeҜfΤ9d1aLlN`3N`4f : LD3iIuZM,.XΤ`y&n;q7Mtp'.&:D7nxn/`y& IsIuˤ`y&[YpNt oe9Mkˢx/ =Nkp΢x/ =GNs4yVE,Pi '*'*Ήs|b8gy؀{&g&:'*'* n{=QMtpO]< n{{;qDLpϤ8]2 X.Ϥ8]f(ÉLLty.Oe#z"z.tyb0fx&gRIs<D=]N\N'~Ta<8@#z"z"舞X #z"z^L˘'eD'y&ř3ૉvggDgDeDe-bڣU͢amڣU͢amڣ-Ms֦9k6am kE,iڣm%:kąDg-YذILDgmbZ& k8kDgmZM\XK)kąsM\XKtGXKtfRIZ&ąĆLfذ6b-Lf%:kDgmZbZ& k3Xˤa-Te%:kg PPICLDjBUSX\`d*Ѩї6q,Kt&.%6e6L `X6l./EӴ,*fMӜGk>t6{i `h{,*fMsm,Kt&.%:`Lf\4=8v+2iı`%:vDn]MKt&.%D.ѱ`%:va%z. L2q&.%6e`7.>ߊ_J=ѱXaI]& v3YKt<|/>?.>߿ .oRLc&~]`Ic&cՅg@ !N\M 'D1a0&60d1pNą3q'.0&60f83wOt'.0&:ՓØ00΢1 1Ma˜0Ns (`Ec c8mDD1aOǃb֮փ Z|dD,V+ -XH Vb[ 1   GƯ`c Zۘ` ZX-aim$Xk6Z\8U P`AV`AŠ8oΈˊ૝xrB݀on?)Ȯ", dd XȮ ˮ nBv7]A݀ nu_Ȯ nBvYvYvdWeWx߰"3bo8#, 4؊l]?o!'cgx2vF'c+RȮ ˮ ޻,Z^Bv]+<:#)VƛyYE]oE%wU=-B%)VxpFXv.*-*"bcAcA-Ċb,b,bcZ々 ϵΈ\kE?=/B! 1d1d1bV8q0c1c1`+AbX..'Y(+b,b`8!* +pBTXtd7#feWe7!nB]AGv3bnFPvYv&DdMeWe7FeWe7X, QvYv&D XnB݄ƃq*1*AdMhTv3bTvaMh<+#(Ne7#Fe7#FeW݄( QvߐyQv t*AMhpaMШ*Tk3ڄW0e6!eY`b]6!r4~aKUUU5!jBIӊ&DUM*ȪxSFPUYURՄ, ueTt"1z3y:Б(d7n0c t$J3ޏ ~VVX+8Q1V¨GHc1nX8`y tBGv1B+ Έ1:#qtY倅. . .,tYuYu9`˂ rB7eAeA倅. . .7X 베tYG!]^ϥhAGq$:"D :Iz:rF:rFH-h59#[A %: ?;d81G#b ",܂, z­ 'E 4󀖜+CsAYBYY.(" et]V :ʮ+{@Kq]9 Zr~XXÃq͹:ל{֑<}Op7Vw09#CNƺuJYY,Ⱥ,ȺeAr8`Q* km@,Р luhHE(d7`!,, ~:]z 1$1^/C?K,т, QD D'ܨbeEP KtBX]tt9#.g+JtBD'\tٮRv ԕr. W <]ddX?/D=Jky=GXk&&DMhȮ"\]NhEXpgvF9%lmsA󀖜+ȹ", Vr.r.hJ ,4\xssF H\1XTIrD ]4޻uMj-cAG#bI"P\1h"+bcEX6Zk\EHqDXV`UŘx. :KqtYG#R_\QXT1VXb#Ɗ,XcE1#ϋc1C1C1b,b,bX X 8q0c1c1`'D1Nb,b8! qB(Ƃ, Q '41ӊ.'4AdN鄨˂\NQ}:8 m'Dt8#g8` QiEtFaA]d]NhT3b"7!W%:!J KtB脆D+k ֊.'D]Nh VĹ8# Q1Xg`3:#( QZu`91Z댠. :3`ב'4X`иC8#+E`Nh * +pBc0vFqcgc0", q0v•Y } 8+pcc XX7V(p0V` 8+pc  ,XX8` ddX(Qֆ pBڀ ,Vp{ޛGv#bɮ"b;)dWe7%8n ^Eޛ Y`+"F YUYU:C3b Έ)VVR ++h{qad {3b{3^AޛVUAc tD"?[;e)!1> Zqwf1>J⌠p%e'\1/Wbˇb|@x4Ì,Ř?RĘcR'D1>JyXqqX1e)Ƽš'D1>Jybg- 1n`,X+8q0 1bŸBc1n`,XXX8`!Ƃ,Ƃ, 1d1d1X qB1V8`!Ƃ,Ƃ, 1d1d1XVMqzuBj-j-HjВhEV%JI~ 7#. . .,tYeEޯfeA'D> ߯fZAZAڀdt6"F y.ڌX#&VZAZĩ]AGv#|w=8 ݹ`(d$NXȮ ˮUU#~_IkH^ _="{3b{iY`+H{@RՄ~_Q!R4Kicc) RX!XJ6VHi0`,R4Kic ,TT4`!,, )d)d) XH#,TT4`!,, )ܰZ+ڀEVp[B)jmD,TMEX4DSЩ*3b< ,T#GJ#RHG>"?9##:"F]A]A݀ |#3RpUk|D>rFGeWk Va)c>"\ h c>"cH!8ZT5a!B>"\k XH#8RKJyaU X3hS\.{kPk+'%Hvg , ,  xPu9r0e1e1`.'D]N,Ⱥu9! rB儨˂ Q. .'Y .=Ȩy. QYZ'DdNZ'DdN-V?tyGZ:` Viʮ"\M%Z%:Q͈!ъD'nB re7!VvnB݄(, Ш*Tv3B{@ZAZZ :؄(lF1dWev T`"'\)0 p% y2p3krBC3,Ⱥp˼-u.\X8!pb WВm_BvpX`+6 l0Ƹ+5\1 ) RBJc)mRARAҀ ,TT4`!,, )4j ph h,DSESE3`! fB4Z.DSШ*p3By@R"T)hp3fDިlEH? Iz. :qϮ" f6`!}!M޶ $]/_!,FĒ]EXvYvZ#* X+ +pE 7!pnBcqFX`:wfVиV{ky 4Uk A1!+RqomFX`+h{3b[S lB`Y`Y`Z/_!6 lcc X!X`6Vl0`,6 lc ,VV6`!,, dd X 뇈Q?JkYkZ+Z+ZZ V6`bZ+w UU VR*w&t3"~*"~FOAG?q3"~ :gB?T3~ :B?Y?~ ~SG?q3"~*)٠ ~]k DGUaU h"EeZ K#qP1HxlBҀ |ʈ#qRAҀ taXJPJPJc)C)C) R*R*RT T 4X! QJ &D)MR*R4!J KiB҄(, QJR#A)MR*R4!J Ki4!J KimYJ &D)MR҄( )UđҌ܄8$WE3!1DS̈́hfx6"γ3bHiFg+C}&4T҄( )UđҌ&D)t4#fĐRE)JiBҀf4!p4J?yfE3%JiBMÄ́( T͌C4aLp`&^s4#*HiFPJ &D)MR*hIϥ ) RBJc)m`,XJ+4Ki0 ) RJJYJYJR*R*RRARAҀ ,TTБ҈XRK KiBJYJYJR* ,Tp[BJYJR*R*R`%,FĒREXJYJR*H"FRAO4!9-TMEьH!,xOh :K4ad h"h*fD{M!ϗ-"~FOAG?q3"~ ~ ~,SSpEE&tDSG4#R #:gBG)q2"R*J)JPJAVJAVʀR~JXX)R6V(e0V`J2+ecRc FJY8ZEs X dd X gB?Y?Y?~.W;NkT?M)OAOAπ~ n OAπ~ ~ ~6X 맠fVED Y4Y4)XYZG4#R f@K4qDSG4#R f@K4atD3"ބV3kiE@<#8K4af+,J)WJ _) )q` MdMt41"*lZ䱘Jy.< < pXBkM674qaWXͥDAĀ& & &4{ M ƚ5B&cMl`X+41kb0<6VTckR?AV?AV ,OO/`~~~ʣ WcD dd XH IxQ_B7T?A8o/ȶN MdM Xh k kb& & :UʈXUJE93bϩH!NESG4#R3VgmD,)UđRE)H!,0ۈlYJ)UT\ hU?qTGJ#b UTAΩK@"E )4j@.ό $RZAZAgmD85QEhDPksqSV :REJiDJ"bK˂˂92تcCC--%Z %Z %:KJJt0h1h1`D'DN-%:!J KtB(т, QD D'4ԛ D'DN-А茠D DT"8­# wBnA 1󀅜'D9OhU}弜r>GPsqe5'4 #oq͈bEX'Yc Ox"oh| QfxkF*'# W'Zq 9OhGn2r.5#( 7*rxkF7*ɈExMFPYO ΈvXEgx;lF>-x;lF*bi׾XXÃ7Vhx0`5<kxcc XXÃ7Vi k kxBYY..pApA :kxBYY.puPkEnN-B(b"Z++wp/b'#+9mY^v] r5G d !ڂp p?4\zv`o ܞ#+("Gd쳙(.󀞜+zo-.ZgyH+eE(=ڌ oUPvA'4PH!+9\a[9/B!+9QyBwfx"λh3sފ5rKX#OC- 7B+4<kx0 5BÃc o`X+4<kx0* d d Xh k kxBYY..pARRHႤ󀅜 ,\p!  UVd[l' r;8W*܂\t$:"D+-hAGq$:"D cE1Vb,b,bcAGY߻Q`E8 XV`AV=VӂN}:";SVd,^0KYN ?-X #)XN}:"|+bcAGq֊8UkEjP`AV`AV?/՛ocCC , , X X 8+**pB'DdN X8!*pBT`AV QY`%Z8!V &4gXuF ]Vlmu9!겠1t9# ]N3 <#ƀD D'4ygKtBcwFPywBcwF=ogpD'4y+jy'4ˊ8 8[Cqygu91;"Dg%:!ъp83;#X1Nh Vx ]Vdy_1~gPkE7pjVYC3bH"DgĐ茠D D'4~g%+[%܍; wcpcX!Xp7Vw0`Ӯ#u*, 9\|iȪ _ȹ V\V_VyKp;!y及^-B사F[W˷XTë/Z˹sd(z/kǝyϾBW"_F%"WJy]pPmE+ I-ZwUkBW3[g8wFaX VbZВ}-X!XD7VHt0`,э%:KtcDcUƊu0`,ƍUb,b,bcAcA々  ,XX8`!Ƃ+bcAcA々 :UkEXZUkE6Cq$:"VZmMj-U뀖D+H"\nZ rZЩZGĪZ+ , P`A>SHN}Z>Gsjي,SeAe pB'j ~ռo _fd ",, wJ`g+=_+ԧa hէat)VVxܘ"J4e%˪sY8&rB"N}:"V}Z|IVB々  ty}ޥX X 8q0c1c1`,b(b(XPPb8! qB(Ƃ, Q 'D1Nb,bhNhѬqB挠. .':rBcA#'$ 6p[{؄(⫄⫄( )MRАRE)JiBRA҄fĐREXJb]6!ë!1DS̈́( Q4Y4C4aLhfF TE3!fBMAG43E3%ALh"\)Mht*#;y Q)], Q#11#<*UՄ89j3I9R8ʈzR R&DLJ)J叿?ݯ|ﯿ.Zӯvnri߿v_?_[?doгFN=x?{#{0vAӳ>Zs˼];2ov/#{oM{]Sތ]Hʙ}zخ>/سw#{kc{6.zXK;_vZ6~~ߛmo:ge)W٧~Oci5}]v/}kW}]4cߟ6W׏{]nه>&׏vܳsy>ߞ{9oce޶q~q}6G<mGYc{~ַg/FvSز~&>τ0G567<^5l|=k|WDGp؃<{i0vL6>+G~ C8z|o^eq/zޞgp}l1ȾMo_>=φ>|%mm܇ﯣ|oϳߍ꺍]]}gÏaz8>߿y[CǶ=\a}n|Wsm܍kwOnm} /_v'|}{ga{5skjlyϿ<nk|͏}Qc?kCs_cÖ|<\ayo럏~}\t{//oͷMvyﻷ}] <ƇݮӮky|}uv;EU{u>e_sY\~Xq׽skn^n_q|tP/*z7ZE]~3BYPn}?!{"yT߭JW~2(2㲟 #*yOt療 ~_@}XEoI>e$P)e? ge;+_,[d\@}%@y@yٷ>-W;,_m.cu}z}Z~}.eaq1n^>ke[F۠WϏwP[l}|_,mPy 2{}Xe/._տ,mP{ *h_-^Em˿䭲@e \f/^˿.~SF 2{oڨ^e/nev)~\VTF{5]2nV+.L}+=0WٯƖ-uEmmwLԕe+a s嶨\.~͢d P]gC\%^f܋:~Mb s5~FZ>x췪wrwh&Xu___`11mNoNx-;;z}~=.,O<~ ?sWIo:o''o53?u?Kˉn{٬;Jzku?g1iڍ' mٙD#[~hٙNv#)>sNtZ6mg}<剶L[A#[ףiٙNv[)>vc?'bx4d|$N<|C·,O >~Su;;3VS}':ۭpO;mwmyk8)nS3o GOvt歡_μ5 ˴[GÑssڳ;?_5ṣOkȟþ}(y[C_O>ģȿ9&;[C|?K42_ȿrL\>[CϿ1LǗh8/|NǗh>s5̧2_p_oB3}9z~sȿ)j>U ==h8/|h|k>o =?)yj8/|?>o7z~s%=[C|h8/|-|k݇Ǘ˴GÑSS;/|.gzeڿȿ9h6o =?)?bX?N1u/wS>tѐw/CC7)y834| d=h8/|_yn8'~t|&|Q ^~+_rJ+gzG84>}x|TC|z~ml>p_ou>/ʗ<> m9z~s=go =?)SVÑᶍO5=||jCϼ5W>史/|ʷgyk>>; ۴m|{P9z~ޞ}p_ߦ;z~s>3ϯm𙷆#ʧ|{S=z[CϿ11p_jJjZ9gCb\i4U)i*kpA{ǯ ]OW{@c1nݧ؇ڳ{>-}U_{%xҧXZ>}>-}U>C>Ţ=ҧX'sKǰn -)\>_?>[\61nCKY>nDunSh"8)V}|6qnS,oFӡO=hҧXT4qnS,oQ[йOqcb~[&-hh9M25sch9Mzް1O>鳼5O>Ū@sKbǽ=Xi>Ūob|<Z>Ƹ-}UKC>Ū=ǹOqc~ҧX5dž>Ū5e>Ɩ>ŪsK1^n`WlcKb豏ORcVq~S -)ZNS>^0cҧ8szթsKbՇKuҧXqm:1)V}|M±O{:-}E[{pհ-}UaI>-}UӱplS,o_O+JwҧX\8)N} {VؾӱOk>-}UphS,j:1)V}YX>-}Uz(֩sKb~̸} -}UchShO8)}n0ҧsR -)Oҟ4Ecw{y縿 -}w玆>-}U{iҧM5Oǖ>ŪobwŪS빏sKbt<[>Gn>>ǹOW>-}Eϫ븍 -}UtlSxٳ)}W}1yhSCKbc>-}EϫqZ>>ǹOW>-}E|<Zc^iU?qnS,sCKb|<Z>thS}>.{ҧXߩsKb\[>3?Ɩ>Ū1)N} Gϫ;sb} -)zC> g9)NezG' s9)V}|bU86)}l86)N} l)V}n86)V}lA>T:qnS,Z:1)V}a!C>Ecb@|oo?=_'~q(?' endstream endobj 341 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 345 0 obj << /Length 1434 /Filter /FlateDecode >> stream xˎ6 Ci`!RRR$A4uCVm5z8ΐ#odׁ-ЃMr^'!#+/s”,$IB +*Ȣ oi48c>)C٬恈l7}ݙ\2j:cM_:{}qؑN28ҡ$go3RWHjri k 4yE>cSS:LEnK7o úbк¸1Te6\{zuڃUەúq~ҹ p( Q`^eԙ02ɍmWQ8EU-/;/G_L'MSd+sӞ)m)&S<D}~-iQx0~)3dp:Mū[9t܂Vfp|#(ӏ2ۦ/27@W'-B I/v<ٰO58۽biJUc=ymWⳕ}JPD|ʜ&?۷7u۽_!qah9儤= endstream endobj 342 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/APClusterKDataSet2-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 347 0 R /BBox [0 0 360 396] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 348 0 R>> /ExtGState << >>/ColorSpace << /sRGB 349 0 R >>>> /Length 7533 /Filter /FlateDecode >> stream x]Mm_q'ևmy- EE0'@33, %(OyQzϷ~ӿ,~?<~+m\=k{zIS?ɋg[N9ɋjPw~O7??Y?ףԧC؟=\g?@o G}^vtm/@+ox.ϲ.'|1gNikgE^唓Q#,Qhz'b6+,$j‚i}TssiVP@=}(=~bEA7f:VZw̙1mAשX1 hVR$=?f1n1BpjFX/Iu $V\<,2 ʴt1qΘK~jh)y1NQ1zZkmnRYCV/upsKN1.K Šb%K8=@mp OmmovgcR8̨f8P058ۘ ƉV…'VtiqZ A9vEے.av˱vnڳ00Ϟ{,wk @l)0NQ1L[bn ڤ{wԳobUÌsq~eԈ-u14 Ɂ-;FfTZEJ{xq+F/}e*:ˉ: # 6v=u')]^B*ו%4Ϙx(9-/Ijlv]B5ۖ\vfʅp:z 2ܑ@K!8n`EA7޼vEFIimy nĆuη͛ q#-2"쯦w+UŠr{n {1Rwۖ\v {E#zu崈cǘS`54)Ɗn>-z3KVS]h[r%n!ن,DQ@iJrd@+jIO!@kݤ4ۖ\v f=-^M- _SI/Ha.\q&rhFYlm֚DIV30Z2x&ސtG ':az۸%$k]t⮶z#pi4.i+=FǺaOXQͧYۏǺI{Dۖ.avoa\F^ 7u%9:w|L{J9^abE c슬ulr%nCDjqc4ٝC)n OoK}Ur*H7(>%]^oW.tkוۥcYt;1)#|:0kjKN31nPԭ%]^{)}}{)~/[s>üdNecfSEk{r%\.ٶث~/P}]9{軩o"6unD 2XWbaMA7&\jm[_&|KngUx]9}8< iqZRu`Lf?4I $cMmWmCe.ovl["Pyk%n{$"RXS#G98665unmj7 +rci,FUdlŔ}rcw,ƊcAԓ؅^Vl{]^>δɩNS.fݔ 䕧o&UL-cK&1mv-xN.fϛijKz^-f/ 3l| uK #Kb -`5Onݎ !A}nR meBs6k+KY"xvDKa5ʂ5k8c$v;_.bڱC$^sY{eO-NGi Oٶ䲋7=ƔCmk Gk7۽%vbȜt93K-'-oo鬤~;ۺ)W}v ycV\XQ_>4c -*jso۪ $1t{o,!|ey{:9Ly` K6nR|m[.KmY_{87no4ma֊xj)4~h3"5"{?K4նTثz/,\zP5R(E&p w"{+nrendITxW( (M,)IƊ*yoќwUIyގS.#M_GOny8ԅՉth;봰Wx,2Qg<hq)4yawWGZ&S4[di'nclEӌXǶ7[RcV1Sے.avX"Fٹ'&s2(s?-s/ږ\v {@ MCi\4VNLQ_(~J{UϜA^mSn}skrhz&N9K'vδ)<#61YPh!ldZ&|]x5㖟:8ڹ!MG`#DB8僅Š:sVFOvGVbKZNj?( ..4(P#cGƊN'J'lϓ~<-Z/O[p=q:*ë3.Kv(]WLVt;` 5nںAyDmeW?G swPyN\5uzds%^{frEg.꘵f. Dϊ\A$^L9R\Y$ej\amm\iԛaXEyNFՔcgzŠڼOI, Ƭ;/mK^|eثcH$d@p/A!^Fc}#Lƒ˥6^ݶKثg}ًKęօg*,~pH=0lƄgnR)} {clkו,iŀ憘8z,ה[Ċn>-NAbX^]nPѶKث-=ׅ~ Kí.d>h-*}*99XS7 >.b{uӋ|q::-r xI2N9Ήs'U؂._qے.avlL09ϊP{Hx[?7! VNtT^ON3vaT ݶ䲫0zۡc[8ز bTxVNJk*3S؊ ur ږ\v fˆ78"gA8^0)'cJ~ƚZ29-,kb;fݤrkWO9n/oj쾥"ktcpM9l"ϒXS’kbǘCEٶKث-٪2wmeЄR-Rԅ[|+ w)iQX8]mK.}\_pKy]9\g+nĬ&l sS͡lj-Ig7w`vG~2䬸%~ATcS;_(N9&fbEuiL C/meW˄"5t|+oȯ0O*ۆb ]x?/A"~g+BЭ }HN 4sB O-˭}O}e?IrC>nG+9;(]K ][­?Wp}?/yY$Ϋ:uDQk7O`^Nƹסo z[\XOIG^ hR>2m+cHY_(n9o݁(ei>|x5 P6?OoY|ćukjWy"א WfF; U[*[KUV? YGƊVT:Oe>U%kn{L9mEU/ǧ kIXr`ƭU*,> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 355 0 obj << /Length 1291 /Filter /FlateDecode >> stream xXK6WE"çh6 v%AR*H;g׏^E*mHl6>5ׯ"GOWE R/zїn<ҤϢq[7n}ɣ7T6Uڵs(&rmרmm|YݑO N|M%cXo^W> #ʪQ*5q }O{a޲u.!yeŢ zQ=ńYP(n)׼n(Ra18@8M\5n$'x>otRcYKp;Z]^]z6 ŸXH[W3'$d JV)@%֨)\n™h{iV{ ;apӃ$&5|KX9/gyU6ea0']$oP 뾁)jy0Z)=L4TeF> ۄP$qbG^0&0q"AX}g@ӠO4loegP .pSWEUW˺=bkp ˪ݦ7u蔋f&*q7y_=+ k>K ony5ʪבT,ROp&BCW|cd2 endstream endobj 360 0 obj << /Length 386 /Filter /FlateDecode >> stream xڽS;s@Wl =Ih `EEǿ塃Zin_˷!J`qcF=@%׈=}h y( h}6zϡ/smכþv?wIJt]&%֝D-A@92x0ҀS@В2W$e\MhUYxꯄϬ0^s׺b Fk@֌F8,x7uoQqc> /ExtGState << >>/ColorSpace << /sRGB 364 0 R >>>> /Length 83704 /Filter /FlateDecode >> stream xK$Ir_Kr1f0w6A ./@v\\ ۨl _S9pgQ\TeU1}槿{_ߟׯ|nO?ӟƯ}}NW__2?OtzY^NO߿̷bgp\i~8tᜯSE>/ruF}X[J\Ƨ߾OM|[z][ь]+bM#ڒqeT&"OI&p]}7ƚm#4u銈tJ|MD?M֡TE|#Ou]N1=\ n[ "lJL*"~1 AnAD4`ioW*"~<Ű6i<밺6<.YDk{Z̼خeˑo3<F/=k;v((wUON,T_3xhJL[~-^v?9;2iKoIu?] 6TkI)XHj\=,2g9zzo>ŌІbZ}E*-3BBE_<%Emtt݊GEٍTM\nf,e\_N5g7 k/Ÿ6Kb唶K1.Amald=juSfF8Wr0)üG*{R8cu ˩SJ'Toຮ§Z@1R;MGh5*\ah S)yJ6u]׸T3ҷpIPfh؆h#\Sћ N8eK)Tc 8%P,1KyJ6u]?@{562WV*}jWŏs%S }h#\UdVBaXpx;&Σ[8H5~t[}ߙT!2zu,ÿ)Dc Lua *d?R󶲗iChV˜[O.[u`uݮ+쏶)>*/#<ԃ0W^c8-HCABXbT$$O'\ukqV lXaqfAd E)Fe#OIFP_g^ryLכI"9duib^7ywKcWbcڔӮ&-^vYXu-Hu :R1Mױ%'6_mPۦrB厶ƙI{!zZvl&Y?]K.h1[]AD-f;O]$*lp]nCcn=5Q6a w\%bdx8چ9`g+ij8p]杓<lv<N2,?8P B lŖ1Qɨ*2" T dY#rS\˒}` cgMɉ[F5zKiʹrj4*'Ĭi7m*o@>wP5Zk':͛lRkf]cF^`ޏa>dYaUhLֺpt[>I^'G#ajݖp]-1GQ".X-"ua&25o#@eUU*n~2L\ 7YY̲KSckTc:rq7r~W[ٚM).)MZ]Z˥A&nN4UbnS`޸+,Fsdeaݴ\OP͇MN`QI,F-yi:혣#y;Ԗ;X23<f쏗cyjخ6VNNӆVj[;)M˕IvbڐӮ6漑خX^lm3N6'r٣BUg-Xʝ[7GGz[)n1YR2yc ,i7oz?bj~pi5y8iP<ø+Lk,TøSx=&iøخwߣ™fDX,Yp&H"ÙfDKL))u6#Gns;wBXns;Xw٠\ڵY][׮-RyA_)++O1Jƞ>65št.k\EmlRuS7Ri玻9zzL|qrt@vjr.ƙ,Eyj:~<,jӻ" h3s hR훿h"_l?o#"_mKq]2nirV՗HȌhƅT4op]_PF9,1R׾$rBRK,5PFz?. V̄ecF4c39q>P؅ cK l{2Zä1ұJA5#YDOp9@cßSyJVWzƏ2eTc E g6'_rh6%n%E!Ẻ}#nZ'\X6j''\z4]gRޯ9, oWޯA`\rXi뼑_l"jpg9~:X1#Q[iخbrټ)=Κ]S5`pW6TmFLW6dTT<-Emt6tw~?>.@}>Řiba|hoM1g"׆_cj)Θ&2vb4]>aTP-Z əe(]v-OMx i9jɉaqBi myjخiy{_qes(9']EgWkR&х+Bwg"myjخdkdtrnsgLl:Tc-6K34OVfo_j9\*ns{稫-Up9?q^$BU7-jƪ:yjخCo!4֭ cMy\!2ckhZXi+歼S޷l~Ϸ|N''xǵ}:=/q#{;>/Ch,ToV8i[t`7z?P mO90SDf)#L?`)#q|ʈSFLr`}<2G&k?7}˵TGC<"oK؍۵ 5dΞpY ֟kȬ<5 l4} '[X ek5x-9CA۶1d_vwlJ`sϒs\\o:rqI{ ,i7خ#':5qoq ]iɼH5Wh^uں]9q+88om,T]i4VWh:byKnMkns&=ct5(dmN[r%FW?ڰrcN2p"׉aSP8 洱6ǧvg j)ƚG5^K`a&jtah$N8'g+) }|jkqnS,>fWz&O6G3=vͮ[r%Fz5nhX<%d9{oBk*;bܬ\vD#G/]=5G[F <6B1Z.oX0ʀe"6B祖^ݺޏ]<$kAϲVd9;&>kNF^`eG^ɉz˾9^4=$=\@ڭɛ:D/}aއȾ:r_:t_B~hoD$UuXXꈴ[nޏD7DnuXQBѢ-Z.E-uhXՑӮ:t lכ:oLl.Jކ޲'rˈ~͐үXSO%}THy*vSYNN|7ϵ/r99 ؤFyisXki皺c9zz?YyeKeNh^,sO*/yKu:on>ڌmV\vP5Fg`IŶ4ۺޏorhsӇlҦ-MܴUUC&5oNz#ڤkF^`|ۘm6W;*׎lGTm6Gk]K؍޿4U`B FT$rNKj6br46 .,i`ޏG`~ >MƩClмp͕Hnr?˴[<[jMɂx*xͲ|x&~Z&QUю|w7³[¹!nåC;U,hdr|l?;i(&ۤt@}cq{ {=g{3w~h'+nY%_WWov$zvk#?8Pl1OM _l8iEUvMӽzf׵"[yYι[/^Vyz'fýU{~|t卦,Lszk~n~x_ε@5^㸛|5ﵿ4v4ێ6㾒ss/Lvb~_{>#_yJo $6vj}Gz:h[τe>޴r[=bLx:  WX|>Kg?=)~u͘W|՗OW44=6Oe/46X@lx>'w;Nc-x7[<w)S<v?X3=L0tC8*?1:*ǘo_| "ʗqJ?!͙tQ(N JJ"7#'I'O1M62m-O:W|o0yԶ\!?2KkT0ZsD4;ѐp]׍=XȓsʐJAp5$c< yj}D \UmT Ş Rmn:;E nnhnV/p]:J?K?K?.߅!`T8OI&p]7qQf*f0cĈhR? &$ewmR,kc$6$Řu05# L;eaz)KN*D岭ͦ\= rss筮B+Xy5验$]1 :u jy2d3csbI%Gk#\u~Y%԰P,t4( "Â@~Z״4&؜2rdv)ל2*Z2r"rҷ)|ܣ W(-}5[M4az9xS8Ř`T'To~hc6gX2u-ӛwHSR %+oFxƅTӏwp]mI 9Yõj㛍`HiA C/89Z/yJ6u]?YѯXAq*CƔ~PpYfD)Th#\Sx[Y4HR۱-VQ58,}3O6 P5\LF+j<(:A.'zYڂ9n4 5-:j<::p]lwPҍץ ADᳺˇ7!}][SbP#$<(l<.`|g"O spsxrƯ筮b[> M?2UHc%%p5mд%Rm~ZC6u]?΍{W_nvwNA]nA8) s\2&P~ g5cϱyiF^`ޛK㚗9HڿƠ"?]DXSĜ9AZvPk-v"tw|rp6ql-fo,.آ&`̙GM8}yx]Zȸuֽq՞5"TĔҷٸXRѼ%\[Fs VǞT} R{cRw$/Xg83kFΗgz?L樫H7duS-W UԜ n贫:o5d@9iε=tQۺ;R!%Os4{n]-LlчWCa-ER 3wîS= ))u}5in e7Ǜn莜ylHM]-膤ݺ)y#OMxozvBh]?誈E*՛{̸/0n&j-fmnl%/2#sžUOX[ [ 4py T1 =,q.yy"MVׇ/:/:Vol˧5f䀊V˫R. s>vg3kH;o_*S؍o\ڌz'& J5ڜe,T h7Vf.y[.z?|ttF/{g}e)W  U98դkq lPqu^bCޱ92st"8-J8;̙F,NXD$lp]]x+}˹8Y J(Yi&uՠ\c1ӏ_+o˥]GIj֡aQܲ2 *[(e,C8aNJBuuNv:I繶Gh˩ؤŷc; wgڳ[7-gz?HrEJZN.LF[c/NW'o_gz?>UeFXGnVǰ`ҮJNHӰrp]-[\,;sˈ7d=@5$aye2;e2>n n~2L-8X%myh행fY˱B5D[P2QޖK/c?ѣVŹJqʹEr]llRZȓJ9Z9oy>XYl3x\+s#+ T#+g:vK~vP=24؍~ >e3rmI.:f 春v)_Em2yDxtV={b)wBJu_خg/zD 5!1cEXk{rGԊQ1DHE{ij%U}_g|mE m™Xa1<~>N5o_r_5To>nu}\r[rdSoRܖM\7_TLiCZ5Kݱї9zz?Vp^Rn9r๨\wc"W ,+^q7r~]b#7y)ؚ{S|b.N; V..y#OM~FΘǵhi,J-(ѺtW=Tv6^˵XHۿ΂=Y>]2yjخƯ;evnMEi,TqRZۮ t{~Gi}֛Bi/ uИ7e^u{ɼخ#oğQ~\]߈sv]+5t5TZ",P\F4gaœo&;o> +!*hĎ֊)v‚Ȁ2.EN5ISR@b^W$g0ңPQ $:(cwd l'~Ժ9ꖬ=ĽKrֵ.m);Tե7r~ϷQ4\i 06Q퉅Lqؕo(Zy#G/~*,`d`m&ðJ U&Eq+iIἑm@Q{׏D\K-ZPv[K?%.=iuO9}9S[=Ol4}˭:Ѵuw%)%Pn΍=:Hݝ7rެgZ?4G}1~1KkK,TCsԗU?s7r~ĽSɧsG㵐]B7)?։:pUnc4;k4؍ԡy77g =dz9Z?bt5o0au -Woܚ XjZce{,UXKxhJ]cF^`ޏذa.~rb7~0rN-jd8qMoh2Y]W(a3*^U-x&C[Y[U͉N,,D¹QN|`\W03 gƢ!lvvL9h Qaq/ໟiCmH9gG&5mNE/~洫:o CZ6j,B]XS6GAh[ Pۺol{EVEr_hrXvf9v9oɭn*ܢ]RѬ[mI7N_ k]"ڕ#]Dn-خ7uxGNjH5Fk\uF~ }$gö.1;%w:okʪ9Q6JEUl gm=R8튪8s خÛz}:ç>Z}3gXXosTg`On=2caz?n緱7ڌEmV\vP5VaXDm"ov>B|EjLK.NjxQo.>E E K+%^nulSX>5wAN,ۉa8f#>'Oͺmu|;>̚q%9/GQ$'T#0R:m'C>弑ۓtV-D.X/2|w"G/]gi?߅w$={š8aktSiyoz?j\8e6?(V)V-*Pq8c뉱kF퇟"SlƔ)\9I%M~Ao1,g#-k3ŧ/s唽Z*zeHr@NyJ׊FNcCF`FT3vg\vbMC^`޿`E1k0nge%O镾o"UF;Nˢۻ,)خm\mL ^ۉY. Xۋ3gc5w;۝7t=_6s"t_vȹP|kr_%67sHj:-~Ym]WAE??_ؓutG>foݢ}'}nK/鱸;r_ߞ]n~HV/پzYx/حZHfWEE"|>~ J9oB{UܯAwbo5][M-Σ]]|:.F~S=0ٕ[퇗3[Co}1DG!ۼ _~88_0~awQmw~qϺkW\&5n.F ,^whr}wp]wwȫE:]|UW8RvE tlMws2l{^h^x‰~~¹A.ID ~E1_t ~pkJ#tcԾ\W2ݩh!-"y7ջj_oMITl?:y@ǟˠ~ip2:ԝ::{w?ƓoU&b5xnQٽWnq>4/w~qM6Ӗ~ӈqW)Nl֛ߟ#k;ڣEņVYO(/GG:;ZN9{׬)nivkݥ=϶;^z?T5o!?ϛ>:٬5rGuvĬ9vynƲ o.n8;&JFw\$,_;{Atڏв+-$_;5ϒƻJGyp{ChnP;ݧτE/VK?p8 ^ֈ@3?<ڷ.?`YOOf_76їOW0?_槿[㗱b8=/:ȟM8?d *;GaTTIi33}BSN-b)x9"j~yw*f,/oJ}ߞ_A0q|?B^ItSdhlMS dq7C+wa\~KIa~<TRŚ/dJ rx3FБ;ЊRcL:OБ=Gi F4܅VJ/5&!0]~kkUq*5o".aE*DQ+jK2 LӯEu9:4^&i_SZQY\FUI9R'ϓWЩӸa[{GEM^ ]QWC*Rm9*qz?f8뻫GDvNՋQRzdA_SE4Fke.U3UϓLM"`Zm)ϱ Y h|EzmA}]G_.p:jT/nӱ dQ`ŗCG~[7dAߏ˚vȲXXmM[E {M֦fcMda QG/r\_~Q^F9Fme|-;cleEeK^yK2 LǴ^~zs\16 Vs\R==@Opj`'5c\gl3C^5缑خPؤs>,Mݙ)fu lѧ 1f.nzdnKë6buVŘtߴTt2A]Gh۪97WڢzT\XjP`DV7rFSz~&lV1+Ȝc3 G6SiSq'jSRm6Sݜc0ŝvλOz?`F0d]t0hT8TjYw@epYd+) }`ѝQM0U:k<2M,Tղ9)cUNjy#G/]G_j#Y1Bqk2jŨEIy)1lJ!p]0s0?y}ĔKOcj+N @eRmSΖJ?Iϓs\Gu3Mxcr=ñͭ8JM`J5mꁺh"ZӮ <-UPUqTt 署Vp຺$K^o5nmes5u7,z<sz D\s|\\ yә5WE] yәNXv%[NZn(7j=)ؤWch31-Jj zs3ۨ"Mq6|ώSG`,9s(bl=ɴ|y#G/]m4C:ǜ5UIJ[֪oT]SҮxHGUmȮ;ی"sd c*7Wrl69eă(9eă(]FF^`ޛ7^4-.#,*O,T3Si[|]&C{<]XXŒ`<jucՉT7V-ϟu&i?PMsNqjvM?-glRwNMtS[r]GVͯlQjFlUrfjfkr H|{tM22W&b$rR-$H)qH14՛N[]g5(IzFYVCR"+ XV+Gd|*9Xs4O09>9͓ju5:o ƌZ*(XcݸfMʌ]l ƕ@3>r1Sb5o_2OIS5swa 6No\J uỦ]Ʈԡꆱl#6ی8ق*Oږk7*6[bOږخ}o{wYG!@ngص\{{:דpN_O=ę4&ouڡ9i_mgڦPvhqڠ^=rZ#mp ʼnbvHҺҴ\5G(Oڢkm9zz?6緤ix1GsT8h[{{\M˩q*PQ2ViW{t l-bF'[baKlPHD.czu<%MyULnj%J7TnJmZ69jƪ:9zz?>8F\./Iݞmrm,m{^mrZ;[Q[$L sd,8lAOLtb9[[ӌ*`1Hz w}Mt㬙Fuۖ٠nhcE)>sس.&mQ}Mvyd뺜Ò}3|v9犄5U92q;y_^zoce6Ű ^Cͨcj1'sM!Nv?9#nEw;n#nvĊjFڭ=hگ۶Gktn_uSԢnqc}əvpڳzȼޏgjϲMz?v/`W.y g`MEڽb+Ki!t<{kiQwam>d,T͇4ojs5:o9{UڰF*M{sdt'fړ7r%FoмjM[--,T6eڛӮ%/Mvoy +շ93Rm`k8ΌU}:o<5/~|AM04HȿMB-sc~ܺo%&qx˸k9Kƪ9[r%Fm?ls+m}r3cQv+i.9-v#M郣&"%G~`MUE;U$iWy#G/]obHc.'<VÐjXfrf; g)|; r4^vyhʼnktY\n/x~N_| 塹Jnk>;>79TМ܈PCoT@&P=,TӮFNgzo#˛ڕMiZ=~_#܏"T5XUCZwy} __/{Cix)lc'%Avlk9Ď/6"Α8Ogh{:{}/~4Ű^pz$cR߸Qsшm?o94?Z]fwX}~/tTdwp;hJ+rھv'p/VgM /}Tg/L}T緧8/|Tw/b<ig_2x=>ޖs:E0rax.<p5r:7IτOqsyn??1Ϧp5Ooۧ+i<0__2?lUx>ݡ6\.cK}X?0Ƈt\ա~sp'(tv//n~]jV/~ws,ozߞbs9: ƚOߟu˧_Â؀M1>%:اkL|ܳ_.F_O|?wbkX>hcf-~M-ױ3!P 'gyvP5y#G/]o%^-RxQwv *;O%zP' 'G_ni6y#G/]orXR91 2 c8 }2xXS kƞՔi}Y<5؍^> 3ϠsaŔ;kŖ&5-DOllIȴgȼخ8т Ƽ~5AE}_G' u.\.IcWj(Zy[^`|jy\ ɉ=6~No.OT˥Pv46<{ ib9zz_?0guM8布'(~n-#k8!װ5m=myjخ72mzΉultY{LE~g5-5iəvP$FFOh|"_8.7mܲ ͧzϣ|XjcX!]my#OM~KKrlUX˥PY/ɉMl{y#G/]\Y%9g;4_?x>rͅBeINFȴdޒ[/a7zomV/l#(wV/!iSӦʆlU;v~e/s=o'ľ_/ -hlR78a%$6L;9zz+"}3GcKS;Xb'KԼP5XS{kF^`ޟض,ҜM߈Jl*˱B_i|Cۥm_i9zzBsIɉ|9^isrFμj0e'm4͕E;a I͕m9z {;WVk-+!g҃ڬ#SZSPmf`!8{ VENl{1%8غiN&|(SN^6q!a3Rm#o lwyRp6srAr.jr7cM-~793}vP=[}rnK7vO?տ9-jne>+viտrv]?KAuf>.<]'B54c&*n>:Kaa=>9zz;K+ӰŚf8cg4ceW97r~jK\Z\vkZimcĀ Vm.%06)nbK2mb0k}Ml7rNZqrbY FV)J,T7ZL;׊3oi`ޛ9d=]=׋A]fPmIyLqb=Ul-GS],/3G1epμ/#2iiX#XyNe9zz?gOp9;G.xڞ=PC۔BEurD5Α\ y[@}}:sVs"\Q܍5U<(bo"NyK؍If#m7t@}J%_XSe# ,vi7-G/a7z?0gݎcM>M>Z.XHp@e&y#G/].nQ;':Ԣnp5Q 8XH[Ok2kz VxQ&JYD)k<*5 ij#PL洃c@}{V'.}wʵؤ;=;=3ɷf lNvzYqYq`c"?6mvP8'z?>NNԙקƞ^,׸elRYp3'i&o\{>cϋڃy({^\s.Xڣ8!ڃkF^Fڹe:冝( xZL<1^'s8oͼ%^n~澄yqF[]Xdž{;+הQvnZjNڹF^`on1G1Lbn!(XSeYXzN@}g冏o||/}7U9kv l}j8jk9|jUՎj>93vr44uXc綔iZ"hlRxeGku l{VB낅Ǽ  /.txmyjخgsM;nRmr!c"=(OڢzvKٰuFu zAN*85V6.y#OM3պjL|PwX.XQ͑d, ]>F^`ޏذǸإłQk ZBU5V~#~Mޒ[/a7zSO^>  ѺrQXN棘#?,>i7-GS]Gb%Vѓ>]6bsb"ȉ-jSm[_Mݴ;M~Dz9Zt\R녎[z㚒Gk[A\/$Hޖ7v}ϯ}?zbK+g' a.v؝`*g,?ce]ʪ1z5ߝ׿<뼥_땳8}x]\goA&;ȗIt/N/Z^{ |~yojʍ% ²j΃V ʗYs]/p/ۇzSw~{Lu+iwWRkbz]:P,\r=j_iLߔ6|kz;zԛ#;p{e\g,ԻoNET7Ow?*/ڼ0v5&{ݷCrGPih/vķhWK|õzg/˻v4zQFbYj/WRqFsڹwHێ:阅1)el@=nƏֻq\>i/G)}LwW޹(ki|p{{K7xzٷ}_]C~Uck/|onݼeU&z厑of;#G@vlowԝz6ϿXvȚةv5ʘm6g"u:iK]^~^ϴϿL -YgNrNyo;rYۧnmimvg N9_sߚȻ{1e. o{~};KF佹͹j/߾ί>~,owo씾wx9﷿ o,km4p=AmlG^UQU>}LzǑ&\x\|rz!\òZ>ė"<}XpZS&:Lq9 Gk>GG?}͟oW{3?~~U o4?oO;DZ[?O?_ԕ៷,_,ߤkr1 ןqx އ:Ls%vEǡB9xbyPq)sW͡kmyj:ObѪu]mE9bXyĺ.ڊrSyzDa" -#nn([j;,N"cM-#Qcd'Tirvf0]r딻.9K. .PsnΤ]k.خ_[9Ne6/Z>rFw}U $(Gj:91SfmKN=$NwrE=vےg@{Yskr`9j^CٖĄ<敬.MG.xweaCx[r$/В|.sm\5We9ƸI ?}@-#+@*0'待7#m\v/c#>~G~[ɕzXA7A|V?[#;yu`˝fٳcno th(5"_YE_'= ^C5MmS%ރGĄk;Bv팲m.^Ci''&l ;8N;9r 7 Ÿ{-|׶ݶMS`ބl[}/#e7ے#]|1fvkZ`Y_Yjk%yx uu Z0۩֫ezބƘ=~ɺE\=luWF; ;R7ξ^A*+O,6)I]4IrnXb8v(>> :UN>Ne uMn%rr|Y 0fGniA}`^S|كe]/{|3DXkrmYPl-ll]ve'no m_i {v}m_3Z `go}}o ae1f ~P~6B c0Nr5\7tA;Ek ڂ໨w@Ֆm<Y/mIIӧwr=rSCf#;DoFY. sle{*!bPvat䂷\"!}#yJ/XhäH^fM7Nݦz~cmͫ~t}vl?gɣ-"{[U&/Pc^겫-zz1K/x}@ٖưb^KۋfOj{lk'bw zN=mW}L' ^璘/'|s~Fxrlm8oc(]k>myy: ows}[ݽ~Ptm~)tzv~)s^N烵.m_=Bt/AM~nSr?z9nv*?3!OF mc.M瞧eeuީ\g*sfTǹ/均7;7yD54g>~c&bm\=}؃S=hW)_A{Mz`&ixOH}\t r?Zs^M[kn.;μ@QvnݵO{k-yK.v;~x/*K)nү:d\3]W"{zJ:]~:}h޹nIVsֲC]^}ԒohѼ3ˮ9뺡#]t1CqJK5] ] t.]꺡#]g^rY1cz"FSDwсB6q Hj>khh-c>^}_n-xr3gu=,qJyd_| aBy m09yoۡ-(~Mݦ 8=\y7hfu&,6V|LP?2}vg%zٓ,~WuO'MKoIc&K']O.k͔sVaZxuSP_Mך oAΊk^N벧ںn-xr?1ыQSOtnot6F}fɮ*}r ӯwQlk)LMWv߀3Fvyec\7t䂷dx7b=2SfJj>1=:{.'-u=Dlv1=ثbmv {]ӵ68-`=.fPgo`ƚ\KjƱy +?.?놎\vYwQ7Z7~e=Zނcf.n\n:$ ^ #Un2/PMG|RK$DݗnI}<+kRaۗc&4w-PJ Agon~:NlqIc %/#c}3֏5c_>^92/|v@_=y//OQv@_\v^ٰ~ TaoAg//Pa`‹J͆2ؽr?c.|1ȟkQ~jI_C/0:xPvP)ivo|ެ~ɛU4z5];E'zD g}5:wm2m9DŽ׷Ƕ@GVxC[xC,]ӑ ._*O/㥐so8 Ky v'=e^CQvkvjZM/I%.z_2nC]+I1+м@c$y%5~Mݢ[.λܿ?wY; 㑂lacnq rcXb9Wn#ΦLڼ Dl@w>yxُ>/)5]g|Xs*̖}J?Ĕtbx:dySrsrБkn/15SyOiD/P߲>X/gv?>5NHˎbQN2oB`S2(%yܿcpnm~9Ǣ/Mj籉3Uxgy,uCOI_q8`rx8ߜIuA?jcws&k}ʄ^oK[,Aa%K>4]Ҽ 9wznȵh%(˲sRujyگx 1:'-i~i2r ϋ yKٖ?mu h^0/Rvk uCG.xǫ>J{xV^nڑjvڎ˼k5߆wSik6Wa⬎s8h|Gϼ 9}Je庡#ܽ}es#Fm^@u_ŷ h\mSNr4=b(s&HP%G놎\vO7>9}zw|z~~0yHUu߯)i0̲z3>]7#IԚ7#Ԕq"@M&=jEM.bAcݤ#]O~hT6Կ>:^%1!l޹(: t䂷}܏x3o/gm~sftx 6FsԼ.y5ۆ+?ks?aO?e6݀˷X eN ,[~M\r?ߎ)p!Ft\P!+μpDIzJz}o/4eYvaZڞJPm=I&;e2r q.M\d*n7k=1/PכZ羖 o {q3uosس~#^Cuo+Vt~iD>X#]^-cZ\v':5=1KbSv- =% .:Cc4̳k]@Ggk1K=I^ӑKz~.m-L  5bef@g=7~\oj^º슕uБ .{5KW%&.l,jyRW5t*EYvꪬzJ:D|353.t|s;m:7 ^]( .̶?o›Po0o2)o6rrVt1/a\[[W56 6hSk7 .ڮ:r kf+(bףOtvR1K=9S]uihvXk#4}ߚ>l~mk*1MËߚ_MG.xܿq6ߢ^ ߕZr?>2/P*?Z9>2o'l{͙lC{pOVP߳=y~s&1{>˾88놎\v _ƿYOƨSҟ9['5]UU>m:r~ *coГ"hUYӥ T:Z:Z:tu4t2]g݈mLqϽ&lNzĀ'/P13xϽתAc^O3F>1r/#X]s]y T4c3e.iܿ"6][_'GGM;]ySHԲwԭJt{ױ[6o_징gEW%ΠO֌ sA?-ꟲ("){{n5\<yx8ea}~Xc[= yw۹ǹ9kt@l!},RQv;eI.>x*c6T,5TT9mśkFW Sv'!x؇Yu8_:I[ot8_:6JD5֔bTXsštmג[>}.fngۆ/OammJe.^Z 5Žn]k$%~ږk1Wg8N3s!{ TkHaN]jۖ2>\[r߷vZraP?|˜z_n|a-v^|Xz}-d?\1rW/_k𛿏n#(3?_q~|RooVs;x7~yo}oxVQG>~_FׯQa&gc]]}Œw#I.x'9ٔUfmxWq/^ϻ[#c2[bNxjW̯/Yu-LDZ>gBQNW Pǿӗ?wYew ر\=ÏܘgݣD?xqs{ȇ:#15v{;1n2Ĉadv8Ù9)_(kxW<ҡഓ{M;S2o_3wgyߏQ_pgVIk'9U)_^/^޷5w_m:aokJ"ʗ'XfNɫ EφNng~k|Pw>پo;UǾ_7tW>kW5&>;U+d~}̾;~k8xu|bmm{PK=l_~O;[yc{83슇]ܝȠc}?G|Vqz gf.t-ޕ#kgNvrl<7{_͙mK/r],zϷE'^&]Χ6N/)MeZs?Gj5|ES˗zqNCo˿~^߿~;۲Ɓng͑qmx6x\z=/U YpQ:Afjwm><h&Y]UG U,΂b vB&m;45.'|w8hOs;6_pBb( U(J|ORjOs{.!2/NWdte>%>&*ikQFiˣ!1He!Ք$05rdO@oWn_RS| u9sw.{C\PY^.WӟghO`Å;YJ=5ØKY!7pG#(2۪(c3pB7[T-z}ÞT)NU-+vWB,N|Ԧ8Uܒ^{7YbC )18ij28@onyl45Y缍訦yn{)#uo@M|L *W. TUtDj&9y@ă-arwCջE6ͣ:J_dB - -mh75 B> JCP% |M/!ݺ`ư3LE9'>.>uB45Y_/ڪ BaVݵ-VDsm KU:Zp5YѠ-@3llDw!!14]hѠԌmWj_p/Ħf޳kƍN@|> H%>uҘ%ɗ-6uA\|tayoSW?Tj&"Ԛ MQ/FuvfܭgߥS^nq4'`b@t|J=K1 Udcg̩kE:׽*9uׅ-|5DLK\5śUucON?ԍɭmMߢg$6I' 7FĦ|tYtP% |MVWBB~39Rk (F\j Udc'N ui.Aqz}i3)NSC5R0skOk~3@pF%WrɆ܀ hg[B,ιx]ueQ'ԥuYOsW]!mcyL}K_=ǺFR*ik>tt4C;fU]3=7PlkwL$캡#]Ss.̾9=SA彿^3z3yr?)7u.~:uocgM"[od7]2/P13?]v놎\vƴ\)l\G6:-I!y:}5<6rY9sno'—6NȘ8~oit9(d.w2Qa"H{d-R~A[ͦ؅~m>pS UZ#B-yjg^ L]uC?A#^7Ѣ&*~I|5T1Z+ep&D%ރLSU5F7,<0S\ٟGNkna"L24Uts0~:W_i ofy%.4ڤ%=oɛW0Pv[ite.W>QwV0Q. yXntn1Jtf{hơ)h6[4K f1qlt5[]7t䂷Dgx΁Y[aگw٢ζ`m٢{lѹ]춝eN.gWԌbbEDi]t*Vx_"xQ[kam-ZbƃO rbŒCәhhrӥ͛; /I٭:r{駥SwuxI:43HjRP=fTH RJM꺡6?rVq0R˷_:~x ]31#7:s놎\ܿr?_foxi0cXl q oA`2)o6]r}xvq}%;\ߙ~N 4fLѼSmಧ|uCG.x܇Z_*`Lm,0f_3 c0K{6 _n1uArXk1l߭^ے~CmK~톺yg?7-=]c#|sD vzn^)fS>M麡t'n&fr|@;M( X6jlԶ&lԠ 3l=O_ g]`^s[KkY`źfS7t䂷N;c$y +;eMG.xÐ6јAxÁ#n6/PŒ1e^7]uCOI.b!ѿ=Fo :5k=1v^Fnk'uvث}v?lk1zлmҶ6a.{^C6żZ{\vMr f#,/f5]^ml[uenoj6y㱩Ǯ1Hإj놎\vyh-[%]ͳϺޅޅ1K<[}h:r ( lK~GPXAx(N! 9ҙWAv.\7t䂷+߃k=og^3^|&]> r{5;o ?rs'Cjwenӑ?yd י0g.|v&C?>2oBLs0L:rSz}l`ȶ=%Al~{gM_:CF:cd跻~t䂷\oc{6G- TLǾe׾uCOIػ n~Dc $H?!A͏H 7/P嚘\#nK|'1Yw`DU*[lVxg)ٻ iۻUlDcdͱf#g? T61+e躡#]m%cQ_cd5/P˭S]X`욇zJz>#SyKKjY T0SN?S|cM9oCc4|֪yؚ>ah.We:k|{( cq}QU2kyV?Io(fy9a>yNa^/oi 2x۾__?oc}7r}ח|I׾O>ϻu}|ٻ/2;~5-?Z[<Fj,GZ x,ѣQ̎@zCa5112?ݩv>dsȝ.XώgGcٜ+gk]|gxxcg%TϷ9s8788iw-#<{O)|)7qCS ~x^w/\c`qz~6xab}?__=:Qy9onE(߿%{×uh޿O>$^9'sٌnrG_o=/186[{@5] E0v 7ssJ^C"3&4|Yv@k {gp#ؖu.o OPo tdهWFfБv[.å3ms"N7henZ>oE.@j2c+eNuCOIM[n&!~s:3^/֦x:ׁ_N<˞| 놎\v6cl9fOä1}u{ \GX^0jr]c :r ekz=$z~@#4Z$bۈJ^([D"F(I~MБ ._+'|߮1}[1}@98 ^!]cuCG.>Η6ƌqrҘcLct11&^e1Fݦ#Wϒ/z%ܠvz@khuzЋb:r1BwR1F~·w/`X_eeZ_\7tʵ>}0_繭ܗZw[G槠>M6/Pb'o\-Ȳst>M#]–mz [t*=fty\v1 r؋a1q"cH_cMh^6^e1FSrKc۞ݱZ`J>yZ_ww/:re_JrƆ_ 34}2| |f!B[+?.߄yj4sLBe3 m:r1m=7c=y1١7n$xCuCG.x_׷Y߮K T~~cWv(:rJ>ײv}^˻96V}nӑ .v/Y/.ġ3Mhc1a|o+Η/c1칙gnoy5]v} r$d0WcM'3Ơk ?u2 /:Nnȕ ixܿ\:k^+d@'?k>fX+7?k%tVGx_- 鷒GW]⾭֢\GHx~k KzFmu4//&fGwYv@5uCG.xó2\Pߏmc~yl@/"[Mhr#HNYv@ I rӖ 2?;fQRYF#/nZp%/P_SN#`5˞-놎\v?fkLSjwj{M]E_F1ɛ{>-yîʲʺ#]gyl.+c714F6~a֎d _1y"Wb.##Y#`>^+놎\v?DΊ΂WyUYqLsYpgY74x?$؇u鈹>A7NPץKWWD@}J_6Ir?1ge ͗Gs *iMʗ10R<\/#1a%oXsYv2no9;.쌖׼vϫ9_h3]sҼ@QvsN#t3;G$oB'11͓7y}r:ά:r~bm:GrmXĐ+NO"d#dEٶ݆yp-zI:xr {0fO?mU&oBocgUo r?ĵecg<4*|>b'} yUrÜU ˮemzJ]gl0OkdiQ'iQt :Ukbjͺr~z-1dYoNj; :6yEMQ7tBu߻q-ưKH[.F6ykcW.urYr?mW¶l/^̓ocWˮuCG.xOoImO }1(ڞ_sWPS}1)t$}m0Y~fh6#@仧ʼ} NeuCG.xn 6Ga/>{wc 2>]e}^Nc1.K׏fr].Jj1k(n2,?e jt˕'%}f#;]i {Q"/cI^a sxSvٰ;=H~ކm{TcĎdءF5/PQ kӺ r?GO?^%?:x /0\\v]7tf.k$ng%7h_#d*z$oB>0_[,Z]:rv[z[i|3<š-\׈d0oB0)O"+eP7t䂷`> {lWAض}$wOKx'a%}RbNn>vsl7COIOO:`š:NƮSƃ s33T:Jg):r>닎RuXŀ[Ǚ.g^O xPvƀgmrn >&٣?^)ٳ5/PO%/)n)ꆞoh?= aq>4~;\'?ڹnI{WQ^~| t|J&>0 ^4/euCG.xïwЖ y4&,LoTc%oBn1+Y]vu-]gfk5:Yg}3UuZ{LK):r~L~9-JOSi8ΙUm࿍ vUvZ&)PXy,cuXXL'V^:53Ub 8o%Kr{ꬲĠ.u9h׏:'5]gM(#z^z~\/R{3cryd꫽偎ެ0Sk ˔]{3ם'H:wr|LPvVb 'q_wY|r>+jg%`›(J\7t䂷~.ْQTt}gx6mq=vDTsFTsY7t䂷.vc]&T9jc71S.uCOIN?yo{`'omغmdx)m: {G,4ֵ{ }vP[ |vSv[۩4x:D8n4yH7.#Fx@Q{p`}8u{n*e үU˼]nx w<*7:XkMg jcƟx.u=M[ƽ\kŽ]!K8灦7!)]yw캡#]5~<ާ|yYoۀk0c9.2vk/s0qb^AkfkdwU\_dmzJ]'N<-#"vRdO^cҚW+ˮ^ r9,uO+1{ И%"Ai,4=2%/P_:7xɲү:r~Fj419.)9r9gl*\aoͼ˹n)iv8܌U&Fnж4nݖdH}Ikr tv,Ǥϲ5uCG.xO 3txk]FH. oBp" /']umȕ%I1PAa1jWq$\݊~oBI0Fqթˮ r-ŏL<p?hK7E T,^)SO{V=ݽѹ|> TLs FٵqSr;~7jycac.+M?2u/ Gc+K?no{7x\f9i=,r\r:.6; e։.WFǪjKa<敬.iKJmr?K?|/} '/P;sg̟#]glSf`9NFo{;SI_-y1l^ݍvuwuCG.x$q7;^ g wMz&oB>o0 ^V'ʮ ruSb} }}9:gh]v]{Ġ-?M4F{G|+=}|wo]{րھLWJ]N {{{;`8OR0gM(bMW2,YE۽&Trsuc)\ s<3c;`^f-eW܁놎\vb7;?1{kc.;~moAѯn^xnv>uCG..ѯ!|OMyt T3n󐺡#]^k4|Or7%L_˼ Ms /xr&Gه3;B.x`w76.d!{=R} z$c7(ބ2[Vb"SYƣY)cG\7t䂷[&`.<5% fl :Ixu 6xmߨnnӑ.kj1Fk̯ B䒲kqy=몲x듲oL.2/P s:x溡~~~cJi*|^7O :sAWf{.*ꆎ\vŽX}knqp:5_ cx)SwZsqr?3v+_1!rs1%fyc)敯e/uCG.x84JJwj.yߩyV{xg0׺k麡N! n4jr@o=?ӵ6C@xH- uCG.xl|C@=\Y-/3/^;W~z|fe~jxK^knd~I4huSK6+x|eV|%sgŏend#~F-,K_wx}>U'8ȴ{q}.zN#Cܞg+znd {W\_3úLZR?mz73θqzتx{zzg>5UqBj@gx؃*=\6G㻿xЛY SIDo>u_SS= ω=c}ՍWÇNB?ۙ/G;-;ywx$/xle3^?%{~Ë勲#/<^5]/ƚEّp^2;싣n%ރ܇qGm:eDYrKY5\aNs-bzJz>>؂Λ_@О-__Oz@'sX\z_I\r^`_`ig</('}qB󹠳WNwQRR}NБ .qBKc#|[&ӂH9;(1S{ZF0Йb<*G06q$"Lҷi^)S7{y߲lA6re0t2 5S-hڎzlq{+u}rY {8_Z[ };&VT)B N^W"U-K.vvra-ll]elcdB͆nӑ . bh^]˾myutَmy׭xZ(\kuCG.xǵ V"+kek k%tJxZ[ :BБ ._ZֻyP߮W?)OoBVaZIБ+u{yN6%nF}1~nxо=ON{RW/Fʮ}$c|>ױto@Pco~X x7?CcVq }Nnڲ`H͗Œ1-b|g=O=ɛ1|p5_\76 .Nn1؇Um;ʖl]eٖ9ɋEnSrAZ =:{g~ބN{,}xZ]7tJ~U#?*q|5 T>X0Q=c\,*te.-w&۹||Yj 0]z.:rߣ1pCma-%'tjބӡ-#MTӸHeOuCG.xǹIoY@m܆P 3]rS+7=%.wrA_>~ |VS(,I/~\n.OF?KAYض$m2o{lSG֞M~޼ ;zg^ r$}}`qf/3y/1ؗOu;EY^0qcZ[, 3MŋWjmIzJ:Mwr}4m b~_OAgoB^'/ rSrgu'o>k?o^#yssБ .T>V>w?Vf[r}0_}m}ԷRJ{CMϘ.Jo_/K_ߒ~oIOj~K0_euCG.~63ig_~^*Ozb@9ј2ƛˮMx7ᰟm<u-}/n))z~FWl;FDtN T.(Ƽjˮvnr?60"S;%F?0Vy Tc0.[t%ރۓM#}i׼.{Ѽ@ 3t-nzMOIO9.d5%^s#caM>ǂi yښ 5Yd6r?cw0Z},џɛ1=9h놎\v=n=)KISg;Jtl,xQv}& N)`IGR~gi>=O}i9]SuO-}\a`},#a$oB'yWDٵOvݫC.xϼ>01VE1Uq/tPhXeqvH ~9eNQ2oBSyf_/ nꆎ\*i͆ۥ*cd`vrOu·=ywӞjdbmd^M.*=݂v'"Zk3fށ.[|s66é6Ic/c,1C6qK[P qb^!u3Ɛ+gmYXb+;GeOzdO^ŜRMOI+lضWd`gvhNmVb -gqmFSi?9Ń;2ж_|1b^Ck%lL4l?b\=ؽm1f#mc5?|0}7;ii^ ytuБ .۲Y~h YӲF.C[XNW &Y%+eP7t䂷|'u^V6fn/]+ۭW˪KHvxievSoxK7l)U1]7!6gL &Ý:r~>?'b Sv\䲛#k%~K0]*]Zi*^J]uC_>y~˥lIv[S礦 ռ@)^Uvɫnӑ .-?yq,SY_]!td]6 iNoU|Wk[$;9*>O76.tZrVO[8LPڟngzV}mWIGRxs˟|s+"F|HmdOU4E[;G|k#m$t$Igwݮ|AI~,D9[1̫9kκn)ivѻ1Oz3s3l5]׼ƨTٽUwґ.3}WsVrrߞ7 }H=L^0Y((;gSr?ڷOc 11Wgxkz e?x:ڲtzuv=s<፞n+]ϱpl%cd-DVnӑ .۲5{h6j{}Ϣ/xCf4 ^Qn,u(3n}t^1;ϣss{/=&N!cě;Y7t䂷˭>$p'&|ܤM'qgC5Ą;ye<r Ff;>#}bчKW7!Ff.b]7t䂷 {5cCY^T?[їeBMP˼]g[}I {K+qXY&  xYO(7 2nrqv7~J}vYToL.2oB;1!{Flw rn'JOopҵ0@7qnAⲡ#]_1/ `7`w=3*_1sKLБ .i: }aB{.]eߴ{fJWfxTvU&W[NNq|8e Xce4ZҲ/yU:lDҲ+MOI5o>4t>4F`^ˮ>tзr>,}o!+2oBCcUC rӇ5toY'ڶgfAYڞL;7$YvYno<?{7W>vZ1Ex/ : 2F1[U<ˮx/ {y]t1ҳ t0hE*]gESvmzJz~~~Œ8o91IϠӟqcm^ŀwз(џ⾍Qi?O*I]vБ .nM{LcrوS˚l{i9ڈΫ.ǦnǦ= 3cwQ,}o0Y.x߫"+8M}v]?)7uC_]cGo {Y`035Tm1FY){~,X%lC@xm/Dtj#psoMl;Oxg!3PA1O'(35>%1+nj5?Cf>]S.vWBۘutIYSc/M >?Rwnt缟*]+yK_s}]٥Ϧk6oBSvru9ңfR7t䂷 }u:o͖c5m(6=%%A}YYٵ~ Xo^߶F-dZ7`!pk \[\_9D#_/-ǒ7_ˬս۷o|uxx~ 9xqƼ;+ߗY m%]7$嵰'oU=n_y~Q荞{_/o*xFaƻeߚpνμԝö|/|>g>W0Ⅵ̽{|_'NmkŃ8|%^'?eE{W˼PW2?ܗx}m/|"{8V;.{S$7Fw},\לhrwȸp؇'ù^]2<řΈv&-U6꡶ɬOo= h3+:ysXk㹛\|x%"e{9y;ۣq}k853(<^G׃ǿ&~w>ho? ܇:u_SƊywݸxTdm/o Ǿ<, ~Nïz}y'"ŸT-`hteex '/bUt9OSk|zmB@ؠH<y !r > GNF|]V?b_ğn'+ѦsRqi>%>&*ikZ@5hsd@DTUy⪲H#D|4*ikn_u`iu5&Y_uc |ڪkDc]UmUP-^5YgĐ M |JD 1ZS'T|M/b4 *i>Mݸj* >)~ ,~!JmNSC5Yco_|M5JP53kB -[ee V쵔%D.? S['-[BIeKuB4ܭۗuC SCM]#rs]sWǣγձcʧ_cuyWݟQOݟ\q[tgwS_g4Gۚ>{dj<9Vq7G>T}p_Iwt+r&57+d352 Rv=JZuB45Y{f}'FvdӞ͚O@l5SZ&uBxd">Οs_Ǡ<:?Y#Qhe=_)Q4=O^(ۿ m,; #]n4Ȝl3"xmZ&eT_xx-yl09yMAe IFݦK.v {[ 3Qk˪k-H -`^d6]rH@GAώp vak0xܼ_~A:r~fƃ燱tcs_c7[Oz<Ğ O*]mq_r?Tc13yC2Z3Lל4/P13?]v놎\vK>.SmI}\uҕMȏL=G.,Pץ#]'zN1ھw4G1]Z |-7dV-@MM1N'l`rM>08p5Lׄ4/P`|20) \ꆎ\9K':6:`0E٤dp7n']5T1&xe2\7tAn&M-ӭc{zk7fnljI=5WŒi|~]In{YƋgwA@d/ /ȿTKtQCFwsϐX],5/>LL3Iπ7 4`-e&2P.x=x1әDwA@ى;^!xz*VʎT,[؋ҭ𻆪u>5A?Nu-xΪ:r[1+g;S[lh)OѤ)Z'# T }/I٥ ^FCgԲaQiMrA_xQ &ٲQE 1)l\RN?D{PuZ+ʮ3ɻCKB =$mܻg3_+*屆ї9=Cde+a[_ ޣ Wiʳ.\ȇvzuƃUj$9T0/]q;AvmPuDG.xܴ}<ɍ2{VCNrxW TB^0Y.e}n'XÕj˫8Ji &sذlnm˪K["WuH #lCX7% ίi9^ +[3;- * Y zHjU؏_"f,C9;ڇsf7|V$Ƥ%YbpNc:_]3jxa3Bvi)K۸t&xJf\mu}60K>xBcM ^?+Cno{I,'$XZ!T^H0'Kbx}iEeҋoϳ;=6M cVw1s̪nFV]'`o|Ǩ>~ Tll.VБ *lG^/ a=`otd> J T 0΋@ſnё+|{;Ӗڬџ`?o ;.k.Б*,W |1|!JsD/PJ¸#^TvJ:r[V[2'|aRG.sxHji5#0uFe/eyGH|]U}^t_CUNMsꛗ]Irkۂj4ZmbCCulcG@q` {xGߞG]uCIJ6}؍Ë*٣L>)XǙx:S^CmP[aXċ%}oP·„ͦC) }ѦCrwgi/v ΰBVe8Z-" ]^Uv[t䂷} RW10S jy 7^+'$WPc\)xMߢǨ)ioKXD[&RŖIhۣjK]Lzݢ\ra+a܆47}񗺪ioMuMI]R GuCIʽ}i;Ϸjnmum؜w;09 k?wzݢ#)U*-$I_xvdKegUH o{In{-g{lI:/xιIuCG>r571| ܠQ}߃e uCG.xʧy~`=xs5iJa ^i.6uCG.*||k &s=qiC[6C01yF%Fnm&Ĭ=ɎTلGJ^6 TvnSБ *WəyrODM +=%^̙yzNDegDuCG.xd?`a.9y^OqH?`hP~C> 7]IreM&1m] cXҚ3k2`XWa1~y(g2s$% 9+_t\6%Cg2M}~E1*~k|urelr;ne0Qo&6lrϠӟ MnF5&6T7trNuxl nÞ{#"e\{^TvuzH:?KQ'%HA?yĴ\x=O3t%ӾUY=F#GmlGȻuŶ~Qk u 0qZ#R7t䂷xqTl0noŖ2sxҖ&CTiKU7t<]~gS՜(򚾧I9OTs'Jt/%^ 5%I%'JCt%b5ϣԽ` 9MY'#w k°yˮ{nё *j;?8ciNdHVz9Xg;>MbX";eqH݌Ð1rbC0%ZgŖqZ-tq*LiqFeR7t䂷ʽgwL#U>^LxA)n4jܚ}`bvuߪ>?sxt^t:/uCIY#^?v\< *Y̗_K]Q1傷}uѴtfۿ~7o+bO?osKߢ~7_?Q>?|ݦ4ي 5{7xnSO߇ǝ=GqϏol'߇>!{ZYς6~~k6q{{JSSyU's-V}}6\)b3 |/6Z~8閄DrOY~Dム.ַ%wOw>;\ᵩu=OkƣQw_38U~|?mF\goBU7Gގk^cܸ5j㞧;epɑM 2Utk-:5ŏ<~Jg-$ڬ'ﴛ_l򰌍|8z7ڭ7o g0󌅭6<d6{}}aUPYYNepm"u𝯯~8/GK{8o}ԗ '"RoE|6ӎ5+}< qY'J*ix(6.l9}eoй=H}wLNۆ‴0Zctl rs41- 2w1sEtU@r&r>h+G rmQmiNQew TC-:"["zHjU=f=dy=f y#+ WmN>u+ꆎ\Vţ98]&tX,t::/ЪC-18t t%t :r[-uťB}j[,k׀~1Mdeۯ9}ikllꆎ\VՖ.EgU3LBY~}1k-sTqmeA;-][aIKAն\Vitn hu~9bhI?vNe}j'/`#e2P%vrRƾ0>~6m]|[(Ǿ0>~c[eWБ *xveƌ`:mP7Cg< 4rޟ]/u tXұl0C?#+zPڂ@G*m ̐:&YzJ:,Wrmj[m=T1նdg@-glOLc!/3LvZ|=[t}?^/4e]Ov sCuއμ ++ MUAu=$+_ׇ)0nq3J,"OdXL뱖XLuCkݷt˓y}U\]V%fLO:DEǨzH:NWr`ҼoOg ~o /ߝKP7t䂷12Nha-K,*ƿx P}W+C-¸<.gEmxe[qy]".mnё *w/c\y'ɮQ*)S@' /1&,b);fFБ *r/a^',EtCRcx8Wt T t^eBN\}[qpbgwka h-=BoG<<"uCG.xܯ+ _"JkmOU?B?@&^:`/^c}[0ce45puk|Qx-97vEp+_p,ְcOB.:vQCE}s^Ac¸ĤQ7t弝/SJ_n zU!VxYsϟ,z^c1}~U!V_&RO~n1>Q|I 1[ z.~{_V=@j~#&=v9Vɶ/F8m {ږNڅ:=QAkꆎ\V&Ӣ=_{RhWǹסY}YE *AOږ~j[DwY de׶\BvxGM٣#U矩<CW^bY";[xajM>5- ހ'^no{8F]I/:݅n'˩ҎEً.N#U`w˵zW>ɵb=x(֊ ZpkQ7xvqvh?n3.kM@)ѧP/mwr*{\Ir??f^"W֥=ٗ/:x2!#^Tv2T7t䂷ʽg9'?O$~ fYEwf<X PݠJ=6ޒ垙K35~'^[rPQ7t䂷ʍ'HO:}&@ 㾛tM]n}]o{uMMV[;٭ @e ' dej*,^T']uCG.xmG*䛟}}Poѽ? de>q^PeT[t䂷ʽgu E1$NxYP狎\Vޟ\m.x[ οo@CO3x-1e8ꆎ\Vuܼߓ{q|ɽ8ġߢ{ʮ=y!^6TAEIʽ߮NL3l )mxR }&^O#UvQlA=ʲMб[:T('Ƭe=$5*i0j4U2ݵơ7qx]t.50>QA]G]j@U==/^c=/jvM=/(;<ꆎ\Q1' R"O,~ [YO>[T7n=rWwc 9r*e7I~nX# S1%&@LMnE|.Ȳ33KLV5γOчqGp"-ч,NR. }w2nʎ>rBNÕ:גkM9_4s_@ʵ AVQxQNne)v+Tb q:Lw :}ӽ{ݢ[jUҵN69uJ nPLVxOזw w2#UnڂX|XaeGUV?Ο>lbP~VE>~=~Va3F ř@$~5kE#F#UOynH?#?ғ>3ܐP. W> Z#sCzH:NWr+~N٫53CjXMh3?#_j[f-J[wo@j0/Rvi uCG.x\$0|4A}qϣA96x*qRbOL%NnCRr)2V vfPi) =WPa b3cMn:{UFx{erln {%#@ٱ<ꆎ\V5}~}ۅaݵ)V(ǵqEw7R@9're5snWCaK"/ Af":nwe)إf0 o[έ?}9:1?<#{<%a (|0|sVo;5/Ӽzk諌̈́JHF26@G,1c1TvfzH:NWr_O~Ѿ*eDdÓ/k%iFגC(J \+Qݑ=4r_+)DžaW#/c]4?.jjVٹ\uCG.㯣͹==]|ؗlνul5c ~2Д]|lIri|sۅq:&*ܾl:7QR10ι]uӕ;{a_+f~A%ntd9@pExn].VǶί F{;mPy`*uP#F$ TtW׿CUv].I,SNL[@j-7C^.AsZϤnWo@ڧ,G(_e>e r_!x`Fjbc{` #i>"^`%x{Je;TQx;b|OEػKZ%%twk3m{{no{G똥372>cVt2,@Vv2,bX(۠:fK.awkn`Xɻ![!.xe^.1ÚwSe͍Y^ IJ<=Ϻ20~9~GUBt 4~lMYAտrgmĬ>'5=I5o@¸v׵Ce=WБ *7sʞĜؙ;{8&/L7 IP'S`ǟ(;$nohp:~VLGu|n xdI]ej#UkoEw4z:S㛙]M߂(ĴEoT7t6(c9x\쎎m{e% {b /9eߝEIʽæq6pMg oC"L&q(%8S9U7trNw/11k>w |/'e}T13\lcrv8k.ǸuBNj(n(aN^TvRCRr+fYK}U%dZڂNAGmILGJ٥- }}o}ѳ=G9grv>N+(N gUvVБy;?1wzCbNeoޠ:s#iA볓 r,[_2CEwU@9ƨxP[uCIʽ{/ K* )kƨo 1jb5Pn!^%ƃ>(qr#8;QW;U%vrBws-J?>#Hr-PWB7WPE \SkQmB*U~7'AαY9e32j);aӾc?R|ƒ>иv_]ǫU7t䂷Pơ00ƻKT!/@naX3PuCG.x;Nr)s"o^ԍ5 3ݓ h׆e:}Әe#UnL|>Z`!Xo<{噜kZ"^-+0$%GكDБ *o\dY7quK/]Lb^KMБ *|6}nIJ|\s0Ǟz ¸‹SvsIr_V%\b<:4%04~_^X'US\lrrba>g=1t%;w /1eg.Fu=ŝ%}Ēu "$12ul9X\=S\n>x]>ƝxX d$3eܙBK3TCaω~s9ou?߭' k^>DOxz0z!eD.NtX­f^!.(ab5]e8TЇ:;qX" 6b/jȦݱ)@Ŧf(#>wWt=$+whLv%Y#%wԗ!xcMFWBGRx~ tqO!GԌ^]&2' Ɗrf\DUoŒvk/7Rٖ5~;{gnBo0Ir{ 7*I|;ߔ8w4H/ީaQxX;GÝ~&?Bn]/;myzMPyq{o?z]N󦌿nOP> CMԈRvN83 2k^K /ns6݋gܕ~H‚/`o }['_5*>ph=Y]}!aCwHS{ x}C=v/}_;ӁmK9?> IO9U:a#Ou*YMөm鬁0c?ȳ_C{y}cI="b]c;DOx0Wm|GoS-8ߍwK}Ȳnʼ׳1ΔE6،%o9rc[s7m}x>yweaAqZ%xDOf;^N;A/M\ "cܼwq΋8 v+]/-=MtM-qn;-.?ۿm29.hg_~_Zxe|忿|ҋp K[/0o_o,hU͈cK2t/6/nxQ/l h^tKH>j] rwΓ^vUq]VZ.a ޶;$^Cm=$+-v5ʻ@x%EtU@9t;z;};Bw[r18%g]@GVxf&>?dS7t䂷ݷxNmSyI:Pm.x S09y:m=$Wrw/6 }5C.d>Fx =uay/s=e;e{ݢ#U%k}Ia@>j}>sno@3Z"TكEБ *wc-i.Uk -¸o~@a:&xN:cfwyVe/1noK۫w'y_t+h۫\"u ?QCe%* 0%S#<֒(XL뱖XLuCkݷ崴4@mh( ϡ]VYٵ-RmnRs]:r[~\*> ?Q4>Ӈu:c^~(]|Ir`\WVnOteM vjR:\N`L˃w+USno+C5>_mxRC/?u;=%m/[z9z݄񬪗wXd ^SqL^ϪlJ[omb:'tU|Ч9E IDŽq=NSN\5|9%ryJӕS:HA|s*>ꆎ\V_l0nW\gɌ_}l(mrb)x]l2u>V{ݏ/zwWfhZ󷂲_o+޹[ ~QБ * \G.yKa<~%@sμꆎ\Vi7} ̨ˎEƞ颏ܶt۰@¸NMe>n].VuC]W"X.ʓͺ/ ]@0/Rvi urݷ%c,;^gm /PĠ9UZeG uCGCfĠ5}fA~%Aketz(ZeuCIJ7ΣY=<7o*ߢ{7 #ю@w7TAEG.x{nV۝ovyv{3xߒ].V݋ޭ5B7n.sH`Wܒ 2p˶~xeuCG],/)~ 3鯒mRXydjt;@V ^LI/0FБ *תd߿(?]7  f\w"7FCq{2S3]Aǘ/ݩCg}q_0_v^>5sʍ߇^6t @sCUwEw/Р7VxG=cf[tKU//00?t>>>tO a Puӕmj׾uo^ZO-xn9aF=Kn-r:r[}#{g-qUm;}Lتkb(*ꆾtvnNlx ^?(6N/Px ^Tv:r[ٮ=iʜW-̹؞2'cnv+xbN8/;u);d-:r %7{^0kks,֟5{e=#U=mWp |M _=_05_._.^( fG muI{Ͷ5#iX$ko +(s<:yxPv謍ӑ NO?N7Se)]WeS]esSeEw{-^ͩ1]v=N=Irk\B6ʲ <FJ/C: > CZEчQ7t䂷Me WΟIAt|_xgH0o>|CIݷډkū 6N o@ԵEc^e;AЗ, xZ/:/@~IuSv=$+?LJH;3sl /PČk5\Ɩ}؋*̇·(4ycG/ТcFmAmPBG.x+甜(H<2'*WPDxyRvɉR7t"'Zsd?nq3Nc̓i8I(tXx2NfVsd+Uv[t䂷ʽǦxl+dY?(9[ yWxRvRo_ ߰`96P.BÛ^f Qv7#רˬR?WZޙ[-~3|_=xѧ:b)cbb7@IJKɯ)8J<+q0+҇đa3Cё*w??J4y((S}/PQ¸/$^TvQ:r[O>{o~.q[߫52ǭ556謿 jq筺x%w#`X&o:8yNN ԭOZvٱ֍=b{UɱgБ *woS~ba|O0~a'FODw/P'N]\첟EIj|[k%0ܜc];w׽u*jʽu89{T7t䂷ʽ:3WH5G+_D; s0>q;GS1 *W/'cyW//kO׈(}إ΋FŗnCRrw/W+A︟c=TK5IxM=V-mvWu;=%+]]EN/Kۍ- ~ILK«/-zHjU9Z|%}|2Al:q/$%.fEt_cA5.c[Ue׸:[/3f>Od+} ^j }vFRʽ<~`Lx?o/ GyiO^Gq?o{ku?0' ~54`3SR*짡n].V^WzIzN`_ЙbH&^m\wPv?IrӇG{\ji:.kjǣ! o@ՄxKT7t䂷ʽæզv،sنv0WtN+(m ،s傷w/{P|iO`C]yy8LLK~@كTẇy>0vn^/g嫋~x}`|ڙ(;GБ *b̏r Kg2?.+(ぱwZ;ʎx {>ٟ]sgo N2TN4NuԜ!^OTv7:r[J/0q?Gw늓@ZW"LWq%vr \0?%;S7}_e.Xss=U]}cё *w_39ḱ1{+ΛƬ0>u"1.5}gavX]ea>Dq&ހv‹]bwΦ}xuOX#l핫{ }/>;?Pk3e=5/ۯܩCabl,3a]:9xqq/㰞9ё *r&>E;s%fa.ye"Deg̒3so{1OĴ~ ^JoxR ^#}#Uyv[gTw`;22}x2cRz3UБ *Zk\Cb+[:m JfgbUk\'ڭ[ݺ|\#ϛ\{=E^Yxqa|x}=:r[}[߻-_uW}:/絽=t~XΗ~>boaϴuoc@wP@xЭdno痶0RX7ʶeU }J>'Z"#[.uTv-@-`Cg-:r9o' |%f8h0GX)LK}נn o3:t$ʽE]<{XgODYׯЭU0캮CRr[ĜO?WK]r;~i@ᗂN~ꆎ\-rY~Da뇷_/@=Y~7]؛ ;<{obὶ];%;_/xA2z!s_}[ۜ;m|NE=Ӈq];Zاb}tAVܩWEǭ}<*Q=n}ꎼ/n i_+gՇ:eowW/`}-p_nIܲ|%:9þrx|ϏjF_}OԳ퓜7 mǣ'K;&2h̓7iZͱ fkY6ys~ѻ=G_f%7=pm\S&5Ǖ^7F}]ꋒBg:7˸63_-F:Ӧyә0קZoUooG:?:nJwZUKz;- e_+v_z?G߇(wZm+Η{VZKygOqd,-=bgփ~Svi|T ˽O;SmQ[O^-ٮ/Ve9?=xW;9ߡաM1z|7W20fq==q8s[]<CW_xx-$?ޖii4jٸɟˏ~lhLK xtϾO~3mx7el?x/(_/ wjd?>,K[AϦr35ul C[}_8\ۖ۹`'//&޺E'F_6}oz[?5xL>.o}}o?|gE2v._NO^jyOkw~wy2oi-o'~pF7_ٵnȼ{dƓx1k}$y;ǣ*&{ٜ=_# de3{qu\V?YuU/dtdWP¸+^Uvɪ:r[~A\-c%m-ŷ-]V$RCx) r_w*B}e td(Nj0◟sK&UvY rwW[*C]U[NjʋWPRamN[#U=r۶8aijxF!l~[JЗ:/xvU=a:r[{~嘕AG716cReUCt%simpPDw@@vk-(۠3\V. ]'9~үS\'݄hsv_n\ =$5*Ħ@sشI h=ŜPoDD@KIB}&x¿}Е[t)еsNr~d}iKMs>O7٥T>!tEx{b /h(ۡjEG.xܟ==o>ڃ}1SA? h^-Ps(Po].V۵~ Ӯڥ_{LEɮ-wvm,t, ή]h9g-eQSБ *'o׶`1?]}3E8[Ξ-~jWP`1?*xNJ#vrᆲy:u斍X⡹9 uQ/ fm۠)K\,$uN"OȃQ4(J,06a6h=r-h>$Lflצ(;|:r[&ס~=K1:}\SBG:}>^0ÜG(۠|%*RҩJPu9 +;!޹yQ916N>Gv:!'/fUˬ8_蠇8c[ւwj)vno, σ}~ϣ+^7ob~>w>۔{6׊9٬ o> }A601yTAem"!V_qT֌ude]ukMye[AxK[;ZZ}n=!]Fe#Uc`ucY)cC}|ϩ///\G|axV?FΩ`%{D9iY9a&ᵜR9:r[徊g~u*C |X-bLjG(x]Tvoke=vT?Xo%>)/ЉmJYcckJe=u%RU~bi Rf>5-T3 5y,SP[JIkZO=|ete k:i)e5k6(XuҴCWƚyș@Uަd[c򄎙cі1h@і5KȽLfy b_tYk ˚a[{ڪe;T,E\ɭG6Z8I4ݣ2Ԣ[<.R tu ?.^]eO:uCG.xsȵ>^?c7OM5u tơhUKaƖ 5GًǪr}-槄!d )_G /POx=3?#U_ԍك]9qs83>cVt Zt'S`f4ރ`>NPG);.e| cTǯlUo*.xǨx}ߪy;w7d9`8T /v:&.+-1*!~S@bfWt{>xҿHLAӿPCRr37scKV_%tWƃ?CW}!YW@wti rxl3=3Ϳ@>ʮM㔼so{~5a|>uh?u@/ϱ{ak:r[sul h ;|P[c[ ^[iC>vTv- =$5*r Vơ0>ق84Et?/^A9$^g*;ǡꆎ\}8L8KZ0oo^vq(%8S9U\v{|<:"h|pTU?_t 4ɽ{Q¸=Ece5썄(m0nsece5o{.qZ7,e>q7tބƱnsuA弝ܟ;slbZ:篶6緈:٘ h8sw(;ʪno{OlV EVl/Pڪ4{#^E*;mo{^߉Y3V?>[{ᡳyX>VN\c2]ӹ߉Y3U.Ƿ{b}7-:r[sӊy=o8ڊO;k izZeg^[u;]r9o'|qXxnZ8N /P3=/55o􈏍V}x5%Xjދ=P潄ܕx'.5+;"[1w{(y/a-:r[ޓ*a[a"6NU(&t[W&[:vrJ }F.$W\'/P0gҟ]EG.xܯOVݝ>M8}iBqK ^ +6 ;}=nzHjU>TNa|Þ17bڄCMPYeP]}sTCRVOtN4S {4~)oJ57:O#E_jOz%7$f=zwCg-ހs8ߡnё *8?Kwy;]gܭsnWCܾ3s0ere[(!@e ̐9[sTg"i1u{:nk/}_p{ZtO6x>POɡY_-wjy,.ktnKW׋{_N7oBHnw#$?>ֱKzGeTnkl#1a-w~O=|A[{;'nVzٷռW>C)ܼwn#sWn!qZej%蠯['_ [odqroڔ7~//ɕ}8>ũO\wGO>㛣nZе~9،ea2n?{z;~vn2lMYwF?OxVOtGr7mvŃ1P#ozJO[@ߖoj˸?m$۹{β\{|بO{<|Xq[߅s׆L|;#Eg []}:7ۘoΛSO}yOX~a#խԩg5Mپmi2o|g57s7~qw5翾mO~Ͽw} endstream endobj 366 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 369 0 obj << /Length 1005 /Filter /FlateDecode >> stream xXo6~_A/2P<[">(1Dߑ<9ݸu{1> /ExtGState << >>/ColorSpace << /sRGB 373 0 R >>>> /Length 86723 /Filter /FlateDecode >> stream xAnd]omM2H&YuEkv  gȹcU,AH&÷?~~.?/?o?/|]\?'_.;a?<}}-{I_/~㲤˟%}Yey^_.Q>_.FyYި2?^Q?/Q?zy_~e|:~~jo^my_>˷?ky~poo/7u{'߿^.Z./?k\Oyvg/g'_>_>Տ^ol|i/o;yjc]~={^ ]nkygׯjk~Ylum~?_.{vg/?Z_>rWyv?ϳ׷Ͽ޳o/;~_}.g{~}>ޯ_>w_Kyy]׷_׷m{~}޳׷=~}lׯo_k\-Wl{|{Ϯ_޷s|{-ׯdWǯׯogtޮ6׷wz׷w;s|wWUu{ׯz9N^oN\Z.ׯoc\-sy.o/׷\}l{\m}׷={|{Ϯ_^߿e{-r}]_.{vgoZ_߾]gׯo{yyioׯdƗ+yvJ~}__ɶo/ׯdwȗ?_ȗ׬5k<%__o/ׯYɗ׬ϻ||wO/@/_RG !*bʿ-_Mll}Y훹-߾۹-InMq-~ݾ{۷%^Bo[op[|}wq[sC-|]TouVn߷/'}o;Ͼ?7MX ~noum}~>n|ůwp[=ݾe{?ޯ_>[ܾ;-}+şmkޯ_7^o/z˼~?~N_譟/zz#-^n-Y /˼{}/gKqܼa?ovo'/gKr{-}sp~?}/wR~ݾ{-~|??"m{S//ۛzy}K~\?'/ou{S//M\@~mou}A/]o\K]~o{ןwrR}st}nq~t}A<]߾_noתzMru}-^N>'oźd]_oK|/[s9y u}_ ?/2?n񺽩yԏ?7X^7ۛq_N~v{S?n]߾n]_Pva׷w;ؿqn}w]߾_no߿{q_>?/~"e??x'h)<6=FkM1Źi>~ucg=/=K;.{ם_V8yr|5暨92j>Fnq$UTj>LoLG\/Uz 9^Ÿ.lz Z^BΩxSm8Zb.xisiUs\`-/ǏrU\fu8Z&_ɏ%搫z ^Bξr\-:`[؟‰Nz9>JʺruA>ɟܦm8NDfmGkկ7l?/l՛%|۟Dnߚ[5R&tyϹ29N序n ]rZW\-/!'w[q}0py;s4z}\v\VzNw)2mr\.w"aQrXZr7S/~_h-[?O,1G[<x1nc!?C2neq̸\3n8gqϸo&qI-GKU>x6nl\bNx6n8ng_x7n8pqĜ8n}WK/gK̝? '~1N9˭/;roCbn$mp[LS|NkE, |f3Y(>Ӕ>3MV3 g2W^ >(E, |΢g>(EYT<gRL >Ϥ(>O,y&>3q|3q|&69q&6L 3g03af&u0g#vL:\3i@r4A9qe2f ( (3i4T̤g& >3:؀24ILPfҀ2:8:33af& 33qfN\Ltf&:3'.Ltf&:313љLtf&:3'.Ltf&:3f&:3̉ 3Dgf3sDgf33љ9qaf33љ̜03љLtf&:3'.Ltf&:3f&:3̉ 3fOrfNsf>ZY4Y4̜3*f΢a,' -̜̜0si 3h9 g洆EY4̜EY4|,:ff0383'Vę034̜Iṳqf$MtN\Hؐ4(I+|f349g& >3isDgbL|Τz3)<8I'.$MlH4!L&6$ͤ!i&NG.4Lg& T3qN\@58T'.PMt&3|djC5j&~L 4̤g&s&34PDX44$ͤ!L*f$MlHICL&:IN҉ IND'#n$Mt&:IN҉ IND'ąND'itBD'i4I$4I$MtN\H$Mt&:I'.$Mt&:IN҉ IND'ąND'itBĝO(*IӔӜiō3Y(>9>Ӕi ʴn9 _33wf ef2s (/y1 er1MLSM;#ͨw&Js'>܉cw̝lK<;NT=}Dډ;n/ }|}'7G9e[JDډgG3Q%RSpJGQ%:NTxFO)_)Gq:WקJt^:Q!);:W8%(&V3W4Չ LN/ԙ(NT2=} /yuDUCDԉ L'*L'8:Gg8JtXL/KfrvLN?)>HLA'*xOi_3͙(m6'*mNTڜItڜ9QisfB6'*mNTڜItڜ9Qis&isD͉JD͉J6'*mNT$:mNTڜ9Qi9QisDMD͉J6'*m6'*mNTڜItڜ9Qis&isbqm~F{4ͣ5׶,k[ųxY(xEqˢedJsM+npY87Y47,\Ni n .Eqˢ͢ILܙf;ٖXٖlΤbDgąm]Lڙl}v&ζDg[bqA;gv&L ڙ8&.lKt%3).h4oI8[ٙ8&.Kt%jne,K,negR<%x&g#^&J[ٙ3qMt/Vv& D'މD\bq+d!^//7ILfp0`&L50ibgR\ΤIqˤyLUL:ft1tLt:N\tLt:&:qc1tLt:N\tLt:&:'.tLt:&::&:NDąNDcqBDc18qc1tLt:N\tLt:&:'.tLt:&::&6Wܝo6pP>ZY4Y4Yі 4M ڴX,f淲GnehneP= h88h8XtLf~ڂiii~|ӜӚ,ӚcQ]g\gi@-THk7xhXtL~'޿&N7嶗跽涗7e2q%:&.Kl0ILL*eⷽD܉ 2Q]Qʤ\&/'^K8%^ x'*^&m/%6@o{O)_)KX(\fP,e\2q=bLh 2imh4@ā6qZ-o{mo& h 2^&VʤAW& 2)ˤyLe3i39Z(@xā@X2q%6Le@-с@KtM\@Kt%:qZ-с@KtM\@Kt%:&.@Kt%:h%:hDhDZmDZ-с6qZ-с@KtM\@Kt%:&.@Kt%:h%6@sîhhVmooG[6́6́6= ۦ9ۦ5lmZöǢ͢͢͢=mo fo ~4L~mo&m/涗^&mo&m/o{Dą 3i8&Vˤe2i&V̤`&  @~m/7궗Isˤe1^#1đ-Is3q:&6t̤c&Nlj :f1ąN涗&.tLt:&6t̤efR134o{^bCL:ftLx4WLE0iIuA\2i@rDe2A9qe2A| De2A9qe2A蠜2ALtPN\@LtP&:(P&:(ʉ (DDe2A9qe2A蠜2ALtPN\@X<,va,ffQ03Y(393Ӕi̴pf)3ӊEPf)35̢e((@9Y̢e(gQ=,b&(DAybL'*O,~L'*6EwKpPBiNiNi  _i (g᠜| h@9h@XTEY4EǢe& (3qP&6Is'*3P&3).gL@2EIq<efbs<NĆ3蘉1EIq̤bf& 33)ng3 4s& >'6ęL'W3i@r4A9A%,LTf蠜2A؀24ILPfҀ2 (3i@Iʙ43)ngDjC5ѡP@5ѡPMtN\PMt&:T'.PMt&:TՉ TDDjCuDjC5ѡP@5ѡPMtN\PMt&:T'.PM<}߼@uCNos8h: [>)I{sB_nn/$$Ni$Ҋo_P8c<Տ;T?,ΡZC7_ՉPzj{P}DjCu3w_)TG9jwDjT?~QerK:ka||SpNz(g|唯7픯-|M%=qgQ'::qp8we?lpSQUͤL 8#29Gg,wDN93ӊg3 y&ōL((O,ngR8Ϥqfr|Q'*3'3)gLl.gRؘIq%=gbs%=Jz&ŕL PI󀍙(OT$X8DHZEY4tqZCǢ,:΢,:>3iICL+:f1-23ICLȉ [d&-2ENn4L[d&-2ENn(Ot&}qr_Lt%OVIs_ILfR4L[dbL-r& [d& 3q$>bL$f 18'.HL,B1!3qPN\@LtP&:('.Ll@ILʉ(3i@2A9e& (3i@IsIṳ[f-3i32e& (3qPN\@LtP&:('.LtP&*(OT:NܐHLt$&:$&:ĉ DGDGb#1ё8qAb#1ёH 1ёHLt$N\HLt$&:$&:ĉ DG gA4GUHk8 G-HsNkp$>ڂii g qG8ߑ<y5Vt|,*:΢,:΢c14t8c& 3q:&6t̤L'*Ot&:'.Ll8IL+fp0498`&D`bsIu13ICL:f1ą 3q:&6tBĆ4t3iICL:ft1c& 3q:N\tLT:>} ('.LTP1GͤQ}L*ff033q|N\AlILfΤbf& 33QfL蘉1c& 3q:N\tLt:&:'.tLt:&:1tLt:&:'.tLt:&::&:Nlj NDcqBDc18qc1t1tLt:&:'.tLt:&::&:Nlj w:??_o :ӔӜi("q#1MHL;{&NIiX(Nxy P$)9Ҕxi4e۴3]ތ hg@;Q)xBsXLpA4z.$grvyLR'A HB*!uBDԉ Dԉ R'*&.:Q!uBDԉ Dԉ R'*R'*NTHJtH:Q!uBDTCDԉ RR'*NTH%:NTH:Q!uB*!uBDԉ Dԉ R'*R'6~n!u,W\h5]pt=ڂiie. 4GWjZëY89,^͢eQf(npY7,,ܙ4ˤobs;w& 3q&7L'*Ot%:&.KT/ L*e;QwbqW; s4D1wbqmˤ/IqmˤIqm;v& 2qMl;w&d_v&NGmgR\ΤIqm;D 2)mgLtK,mg/X\ΤIqmˤILPf⠜2e&ŵLk[&͵Lkۙ((O,̤1ICL:&:Nlj ND#ntLt:&:Nlj NDąNDcqBDc1t1tLt:N\tLt:&:'.tLt:&:Nlj NDąNDcqBĆ?o-7iGܴh88 -7i npp$Nk8 G4GUHEY nmMxYN{=Zwˤ\&~KtMu.Z&DMu4Lmζ {]& 2i07 s8se. s4ˤe◹e.ٖ\2i.s3.s(NTP,ږ׶ږI,Jlm4׶Lb]2imNR&S_)6qXRD%6׶T׶Lb~mKttM\ЕJk[_6q%*NT'Qsbs+ˤͤeRX8m6+GLbsʤAL& b1DG1DGL#7$:b1DG1DGL#fₘDGL#&3qAL#&ItL\It$:b&.It$:b1$:b1DG1DGL#fₘDGL#&3qALbnfPݿfy1Lk3__84g洝ďE{\8>Ǣ>?.v|^~O>?.v|>8$<Mv|^~)>'⳿嶗3hMv|> =^?8qgُPBۋ?!-iG9p)TK8j 7Gf$M<z3/{fr&򪝯Kb_K)T@5 8j-t>{ݣ8_:0z ׉ _f5߯IO\?~MtN\PMO/{PN\.C{_ՉէO>Gero5|_z(g|:YxKCuDjC5ѡ:qjC5ѡP} DjC5ѡ:qjC5ѡP@5ѡPMtN\PMt&:T&:TՉ TDDjC5G:qjC5ѡP@5ѡPMtN\XC_^/ TN`Q\>(.Y(T9TӔi4e4gf23ffLSPNkY,iJiĴ ,7PNgR\DwKp;$D\boDe[ 3).gR\3i.gR?m&Lm}Lz-vQ3)yLm'*N,g@Kt@;xLKb&KzmbuI'O@`s<Tb󰈙3Q28Jl1щ"fRLGG'*NT%:NT8:Qq4qщG'*NT%:NT8:Qq8:QqtDQDщG'*G'*NT8Jt8:Qqt(qtDщGG'*NT%:NT8:Qq8:я,88z4QZàY4 3MsMsMs= iΠi f zAh4 g4gУ- 0h f zA4 0h& A 2q%:&V ʤaP&ΠDgąA 2iIàT DtĆ68m&VɤM& m2qL\hIlhIC4TI@8xd'؀'<3Y؀'<8xO& x2iIL<$6ɤO& xfR'O'3qO'ItL\It$:x&VɤO& x2qLILG̤x G8G̤Q& GDGDQ7%:GDGDQh₣DQ(q4qQ(q8JtM\p8Jt%:&.8Jt%:G%:GDGDQh₣DQ(q4qQb_=Ms=ڂi fhG[p4q4q4x:nqY85CjC*H͢,(łi≷,'fѡ+]8tdAW+AW&DG ]4ѕX<ŖBD؉ 2i5 ]8] 2)bˤX& 2QX<ŖIۙ8h'*+teҠ+GWbL]D)%8Nl(6b 2)b;#vˤX& 2)m;@{Q*eҰ-m3ؖ-ٖl-ٖlKt%:&.lKt%:m+eҰ-mϫeRa.s4oZ'ٖذ-m8&.lKt%:m%:mζGؖlKt%:m%:mζ mζDgąmζDg[-6qa[-Kٖl-ٖlKtM\ؖlKt%:m%:mζ mζDgąm ~߾AY6h ۦ5lEöY8ma4g4g۴mEŶY8ۦ5lm*͢a,͢acmmZöY4l{,:eҰ-g[bö,lKt%6lٖlX-m8da[-a[& fR-g[-a[& fR-m8ͤb[&ζDg[mbŶLelKlؖmbŶLelKl6m 2iؖ;eҰ-m4L6Z&œ^g@;L*eKt%:&.Kt%:bN (66vĆb4IELeP,6 h8e-hDZmDZ-сhDZmDZ-с6qZ-с@-с@Kt%:&.@Kt%:O>%:h hDZmDZ-с6qZ-с@-?o+hY(ۦ=ևZ, eKS̥) 1lK+ؖ-M6a[۲(ؖEY8c<ǏQ/xw&DwbALNX<ĆgZY4EY8m44ആiisGR^- G⣝ +8hXTHEY4HE ߐ(R:&VH̤Ab&OGӗt<ёH'.LlIL|&:>|f334IL|f3 >3iIϙT %DefbL (3i@rDe2A9qe2A| De2A9qe2A蠜2ALtPN\@LtP&:(P&:(ʉ (DDe2A9qe2A蠜2ALtPN\@\޾Pf>ϴh9 g-̜̜̜0h!9EoӜV"g0s 3g0󱨘9h9Ew̤af&~Lln3IL 33i9Dgf3sĆ4ę9bf& 33iIL+ffLtf&6̜IL 33i94̤af& 33qfN\03gfb̙,DP&6t݅2P&6L$fH 1Ab&K0i,1cDG4HD<_& 2qM\/3}$J& Ċx4]؞G8s0`& 3qN\8Lt&:'.Lt&:q09Lt&:'.Lt&:&: D`spD`s098q`s09p09Lt&:'.Lt&:&: }^qp ΢,ppspspZǢ,989hgpp gp88h88ELfLl884̤y44MX=s09p0`& 3qN77AlIL~+eKt%6IL~ 2i7 ~4ˤ_&+8&V`p0`b,L,T<8Cb&œg18'.tLl蘉1L*:ftLt:&:'.tLt:&6t̤c&Nlj :f1ͤs3i.4ęT̤af&~ILKĊ8:f1ąNDcqBDc1NDcqBDc18qc1t1tLt:&:'.tLt:&::&:Jlj NDcqBDc18qc1t1N4E4`Z, fLS) ΢`Y(ӔfQp0Ys0MᗦKSMv&DvbLm'*N,(v&Jb Τq3Q@Kt⛧ϤxJ0mgl;QvbCf@Kl<)3Q=(Ćmgl;Qv-ؙ;؉DѕؠL t]8N,u&D5Bי:]gRL]O_XCfRLh'@ˤڙ(NT@Kt@;QvRDEW]gRL]W':TbfR3iIqˤIq;Q3)ם2e& (3qPN\@LtP&:('.LtP&:(2ALtP&:('.LtP&:(P&:(ʉ (DerDe2A9qe2A蠜2ALtP&:('.LtP&:(P&:(ʉ ( PiG@9h@9 UrrPNsPNk@9PP>O=*pfNSfN[u:΢,h3iIL+$fR'.Lt|&:>ω >DDgsDg33Lt|N\Lt|&:>'.L@sy0 'U$E`,Ih˃%ӚKY(T~qY&h'$jMdD`s09p09LtN\8Lt&:'.Lt&: DąD`spD`s09p09LtN\8Lt&:'.L,8~LƴY̢/f<"w:> i4eZ,cPfNkEqu̢:fQ\g\(E,,*I3)z&x&L7E1'*_'|=g|Mlz&L=Emb3QP=QI$=QybqI<43).gR\Ϥ(T'3QX3>Ϥ/sb3)y&>Ϥ(>'<gLt|ZY4~I}ߙaLk@9W(?,:Pf;(5QPX<܂)(4ę̜X1383O_‚D 33i983ggSf~1&~3Laٓjn1gf3w*ff0349yLaį Ig4!i& I3#v̤g& >3is49qg3s&>3iILω>3iIL|Τg& >39GdrϏƛ)>?73|^>>׸S|<c&3|^^BL|&:>ω >D#nLt|&:>ω >DDgsDg33Lt|N\Lt|&:>'.Lt|&:>ω >DDgs{{,V8gqcdP}ӊEX?~EX8_9_{,ad<#JXTWY4Es%Es%},7J6{L+i&̓04`Ml ?|}OP{{} j;A,Mt&6LOQ_1q&?ICfMTꞨMy<LՅO_u &1Y|=y<#V?~o& 78I'.$MlHICL&:I7j ?03GͤzL*fҐ4(I'6̤yAT7LΘy(gHL53ebx & (3qPN\@LtP&:('.LtP&:(2ALtP&:('.LtP&:(P&:(ʉ (DerDe2A9qe2A蠜2ALtP&:('.LtP&:(P&:(ʉ (f~}4cZAdzxy,~䓀VyŃ;q{((|3{{{y|O '*>|'4>1||h| |h|hߣ=>ߣD{4|G{4|G牊h|hߣ=>ߣ=>OT|G{4|G牊h|hڂii gHfHL88xx,5ǘ`q0qǘIxc' 31$G2i/7q_bLeo&21G#{|cnbLeb{?4c&C3'^͸OhLf'?4>yILf'?4>1:3Y 1q8EO [`& fp0ąD`b,Lt&69Xq04̤L*fp0yq<ȋO}bH|X'~47q_//Kt=D_//QP/g'.HLt$&:$&:DGDGb#qDGb^(~,tw˧R (DDerΌ(P&6up4-րr (g|.栜YfsZY8>9>,|΢,|> >5EY4|,:|f3gbϙT̤g& >3q|&:>'V̤g&iPvDGm6Q;qAm6Q} DGm6Q;qAm_3P@5ѡPMtN\PMt&:T&:TՉ T~LtN\Dg39qg33;ω >6s[EЌ,ssڗbU_3mfNsPN{iɳpPNsP>ZY?,"xR}K43_=,/OT|8&O*OR}?nbWg%: ~'.D/&ޣ-с6QeP,؉hz?}>y39T<}>yG9T,J|ILRH%:R RD#nJtH%:R RDRDTCjDTC*!萚@*!JtHM\ JtH%:&.JtH%:R RDRDTCjR^o*9RӞx&MXʢUʫiΫ4U*My5yJ+x*My5Ug RiNop?nմWgRLW'3~'ws^XLW'*^I3Q^J[ىL ^eL칽G)(v&JĆbg׶v*џ;Q!u' 29U(| :EW?wΫgN, CRgrK[ĊLgRL 2IA3Q2%:NT2d: S& DtD%SD%ӉJL'*L'ޣ=*A'*N)AgrƠG9cPGit&ʠty D :Qt2DeP3DeЉʠA :Qt2DeP3DeЉʠAΠA'*NT%:NT :Qt2(t2DeЉʠDgЉʠA'*A'*NT :Q :Qt2DeP3DeЉʠAΠ]ne0h3њƢa,h͏fca8z2M;{~RRӊpHM+~4[X4Eqʢ^͢m,$(~`eQ=$a& 2)~`LsO0w{ !̤m3)~`{4G\cn₹Y3)0qL!̤!l3)~L6湽3);⇰7q_/!l3)~v&C&q3qM\0X1X<ɂ3)bg{su'6lˤxLm%8I񈃙#ζDc`n₹D\b؂x<`&]Lڙ8('.L,[0ǭ䌙Z4?m&aICfR6&a33xLff̜03љLtfN\Ltf&:3qcf33љLtfN\Ltf&:3'.Ltf&:3f&:3DgąDgf3sDgf33љ9qaf33љLtfN\Ltf&:3'.Ltf&:3f&6׶,Sf޾?h>gs >g|7opP> (]S%A9/sV]fq g8h8Ewˤc& 3q:N|%TL:q& F/[_\3i3&&6L 7ˤfRDe2A蠜2ALtPN\@LtP&:('.LtP&:(ʉ (DDerDe2A蠜2ALtPN\@LtP&:('.L,.oߙ2M8c(蘅qZde2n-93Ӕi2 efwY4w, |fQ3hE, |fQs5L |I3Q|&6<gb|œgR3牊y^3'3)gb<[I PIq<}2fIqJq<%i?oyb3Q|X"3q|X"Ϥ (I'V3[-L |3yb3)y&D牊 |3ygRL |fL |I3Q|&:>O,y&L '63).gR\(Ϥx2g<`<ef3De'*3OTfN\y2De'*3OTf&:3OTfQm':x&.It$Dݠ%*b>Q_6Qb'A>ѱ1qFaƊ@$D': ء #;,# 2( qG*dQ0qAA Q('[P(HlP=`/*cd;C~cT(Ȏ˟n &* >}OCwOt#=q߆Lj\ƒoAU6̈BƔ6ePY*<ѩz׻vV޵c3_Ea~+ΕDą+ΕDJse•DJs%Ѹ#{JiKy1eW1_E~RDD/?;E]({?)~aE~~DD ]o4N3f;͉x>o/ط)_H|k8((Ӿ׽}3 i_޾׽}Ak|5Eue~~v ~~D=x%72A9r~ɔq$4Q3#x߼DgsDg39qg33Lt|&:>'.Lt|&:>|&:>'vC^)~y|&_WqN\HyO}_NTB4/w;; _}_촾oUU_W7v*u3P7#N݉ uNDąNDn⍺9gĩ;J/3rneOxC3YW7 wt%ޠZ-V,F~ W[XH$M4~K8Tok5:qk5\⍯,+_~W^rkʕ* _׉W_+_/;DjCu7+T_z [ ~c T w|}e~]:ӜӜӜO[:Lr~5: _gL8_9_Vu&Ŀ?y-5jOk: _ikbY|MlkuM}hC|&6Ќ4$HCYH$Mt&:I&:IN҉ IND'ąND'i4I:q!i4I$4I$Mt>#iFfْf!iFjFiFibCҌ4$͈tBD'ibCҌ4$͈Y'*>?ј (3ҀrFiFPfeFP&:(ʉ (qPN@qP&6 (3Ll@lLl@qP&6 qP&:(PHʌ8(ʉ ( (3Ll@9#(3Ҁ2# (3ҀrF*PfAhP3#7|ˍ9I+f!iFf!T$͈4!iFB‍ϠN4%4'i4MI$$MLϥL(I>kIIqiah`3Iwd9&;(Dupnj0ψ|3|Mbɾؾ~׿Nt|C>fd?Yyؗ׫(OT':OT>Q>Q|DpD '*'o5Ӈo)'*'V/=q9h+U_#ψb9ѱ|bDD'ްE)3bXu+v)FGf8~dF'޸]?Ff8hdF'޸o~ _;GWѼ_J~J`?~W_nAXs'9JҼU'h?4ͱ&3{ Ti~ W߰`\EϨxyͱ&34?FUҼ߂ĆȅӜO[h>i>i>iN^_'?$Ͼ״^>M7*nDh= 3p{&nDgvFngĹp{Fn':?oo޷':'VH4Έs{DvYy,ngĹܞp;ѹNtnOTn5_N NDyk`Tψ3>a,Ot':Og|b4ψ1 30>#,,Ot'6䟑iȟiȟ'ąN?#3Ґ?# 3䟸?ɟOtO\ȟOt'wvFn;{F*gFUn\Fo5ȕƮ߲w}ˍ5<rџx?|>܂n D=|$s#\߿}r?U`ysG*4Th >?-*'6qy';a谞:aNtX'{NC_&:Dp8|؎iXnO\XsF]f+f/[XXF?e2AmFf94ܜ╛3Ұ8# g96fFgaqF':ʼn ʼnff>#͋8gلgلgلH H ψoM3RsFxFxF|?h>QzDkbǞjc';cDk5wӉ+7vtbCҌ4HX'64fcX'646iHX'6jcg39qgbqf܂iϧ-[i|iřLdr&3˙(,g:7Ok,g8r&>9(^Ŀ?ߜ|LTHq:8ߜecDjbޟL~ jsHzqO\Nt':'.N-tS7ѩԝP7ѩMtN\Mt&:u'.Mt&:uN݉ uNDąNDnS3Ro>#+7g8|F&'HqNl^9#3ML[XM,7|)^H)^9# 3RH)NHqN\Mt&:u'.Mt&:ugFݯc`R_EzBtF 3PM,NHvd 8!}FgI$4I$M,N=g9|FNDߝNT|BD'i4FӜz>#ũ3Rz>#ũ4ψC58|FSiN=╛3PMA+T-4gHq8TSiN=jC5ѡ:qjb%?~NPMSNs)Ti iմ&tVd$s&̙Ѝj4بDQ̈́nTtVlTg٨fبf3>ՙ6gبq)43RlTψBDݨDq)3R2#D9gx=(TgDzDD'*_'*_OT|Mt|=QzDkX1Ծ9u'*uOTꞨԝXmuH=#V[3MtXk2#V(u)gD{b͈SDV[3Rlu3luψk28|FmFcMfߞgDQ=QQ{DEmDE퉊oR~M)6gԞbSfS{FMQxp';3RdoGUGU'*O~ }D%toOT,x;q?bf{Fnw}%*Ů7#WB8Or 7B[53r;hd1=hd8xr+]Yr#tߘ'*Wq~~Sn~˄! ͧ0Q`„3i7[L8yvBNhNiNi ͟344f4OSf>`}:ԞbS{FˉŦ6#=Q7'~>[} 'A#N݉ ufnF>NDnSwBDnS7ѩ;qnS7ѩԝP7ѩMt&:u'.MM퉺=:qk5|}b=#z*TAqN\X?2# T3PќgjOt|&6/~˙U)vgD&!3RlT32#F4̈sDg39qg33#ߏ3r%iʕHzJ}ȕƮ$>#NĆ;T]ߡzT/7vj* T쉷s]O@uDjnuOt&HڿӚ)gꞑbf{FFO4|ljȍ[yf&6LULN LND#n^8#ΫDUj«DU*x5i^B[[Xe[ؖhl{?{7xFO4}m¶Dc'>)6qXS,)h;q%/ FOtM\p8J4}1D'm>3b힌bnfUuoQ}9 # ?BJOQ["`ı1qFc#ѱؘ6#_Wql$6n?eD ~ L&a%&$a00y*Wo~AL}G4qIbs#0 L?/;dĹ\It$:W&.\It$:W+$:W+Ε W+ΕDJse•DJs%ѹ2qJs%qߛ\$|FvnLÍ9b&^sEUp}tqcąAΠDgP1<Ot$:m&iIt$:m&.It$:m}17~h贙l6 17&i6[i ƕOtL\`0It$/?/؂DGL#&3qAL#&舙 &ItL\Xl%PĤ)b9b1i4E4GL"&MISĤM\4MҜiʊ4_ڲ7Q&*M47QoBDG7Q&*&*MT GlfboF&ѷ&*MTdL g&*秇 g_ gΈgQ8Xl1p6QĞbO-ĊfDkDe^Dg^&*{&*{MTEt5QkDe/De^^&[z3Rl1lH7#7Ql͈nM)kfD)5Q)kRD,SbwoF&*p%^LJ[0lbD07p6 dw')&*&DŰa?cKŞD6Qlщl9Mԍ>oMݾ`Nd&*/>n_;MTN#^rvJob w3DcϟdKs;m444K|Ȅ3]ZL|'1Ql+2aw_h6(6(6(63ddZD٘jqFq$,It$:xqM\ J,gq4qQ(q8l+H8#Ŷ8G%:G"#8RkgKU燫ݵkq%;,K,vg[p=c[FmζDg[m¶Dg[-6qa[-ٖl-ٖlKt%:&.lKt%:m%:m)igVg[_#b/qFe17q\c.1蘛`.Q':mO\'^DXS,)6'6ʈ+A׌,Jtt%:]t%:]]3R+#DGWk₮]qt%:&6{3{]DGDK{R8Q'^DK$.Iloa4gtMsMsMs=ma4KLsLӖ4KL4KLӖ4KL4K|2Я^ҜҜҜN[.͙.͙.͙.͙ҜҜҜN[.͙.͙.͙tDg:3]tDg:3љL0љLGtK\LGt#:%VLHt4LLj3љ.qa:3љ'.ވNoDaFLJq#DdK\#NoĆ2&D;Nc9FtN#:%.FtN#:N#:ӈi ӈiD4sZiD4s9-q4s4FNH0#Ì,3F|7_m1ppFeFt #:a1Ft #:%.Ft #: #:Èa }Et"6[d-2o":eNY_P V=ˈS)蔕P)EtJ\(Et":e%.El(?&-uBYiE[diS-<<<FވNo'nFtz#:ވNo ވNoΌ, Gt#]7Klޯ;#wD;K(&6i4iݯwD?_rF %:Nz NzD#/Ru#D?_Ă7l/)9єh44?MGS)єhi4?M/GS)-7QoD?D忉&*&*MTGt7QoNb;mFJDNi&H3lumn!҉t&L7#C&ĂfDnbt8M,nF eĊfDn2DetDgt&*&*MTLGtL7Qn2De:3Dett&L7##ی[o3[o ͈nM4{b6# rD+on&L7#tWiH*Qқ7QIؼJcFSfDob8MTx7QIoD%1͈M}G}ũn3L7QL7ǛŻwͫ4fxƌ}J47#k7fxƌ`qb<bi 9 9 9 o444@Ls@Ls@Ls@Ls@}#aD0cXaD0cQ#x\D p\i\-miߖhuڂViViVivڲߖuQiQiQiQ-uQD(C!*q(C!EtJ\ Et":D%.Et":D+by@YFYT,!EtJ\ Et":D%VHQ8DQ D^q"6fdA+Q_0yĎq":OS OSDąSD)TSD)y<yC_}D>Cѡ/q>CѡЗX= Hq܌8 dQ0ϛ}אf5d軆2RA#}D>b}8%V48 ȂiPG;dQ(Ht$: &.(Ht$: $:  DGA`₂DGA Q0qAA AAF3ey=n`bkȈ w Dą8.7 ed!=bCz8NHGt#:@F@F ed??F+cGt#6'Si/#1Gt#:%.Gt#6H8%.Gt#:H8  ??V9єҜh4?_MGSKs)єh44?MGS)є7QooD忉&*MT#:MT7Q{~uoĂfDIH7#Şߌ&*M,f?F忉 ?M=Jz=D=aobt3LX1݌(MTL7QL7Qn2De:3Dett&*MTLGtL7Qn2љn2ĂfDwތ{3 7@n>Fcm6fDIoIoD%/n7Qn2]t&*MTLGͻA wY޲Jt 7QҝFt'*MTd63_ؽԾc7Qҝ!݉Jd&ݿ&g? {!݉JdD'Jd& {D?aoDe^Dg {'ҜN[+++봅ҜҜҜN[++++봅ҜҜҜN[+++봍^Dg/W^Dg/ً앸ًEtJ\؋Et":{%.Et":{b+b/FbD&[o4[o3b* 1YF*"cĉDFl'fCnF qN#r,F,6f7FN7FtzK\Ftz#:%.Ftz#:ވNo ވNoDąވNoĆqzK荑)ݐ#VHCo4ƈ-q7Xl1ئg:3݉tDg:3]bM7#6݌6bwbnFmq#:6#M7ئbnFm:Fmq*$:u Q&: bCfCnF NDą OG 9PaSaSaSi nȄbkbblLsl< 0yq b9bb^Mizo׋8~(p~ LND#'[ 5Q!ɔW﷠*N bND/@*F h[U sl O':?ScA%6_6/J̫ﯟDg^}«ϼWy}_Vyz2Jtt%:]t%:] ]DG]DGW+5qAW+ѕ蚸+ѕwX~G_#;n7v}rcN_PV] nP,)K-]It^%:*yJt^%:&.[D=p)7%:} l6 <tn Jt%~f:}蛍DlL\6ΕD.b&*b޿` m6NDą6NDMo6&.DJs%ѹ2qJbLs\9F#:r1Ҁ# 1 wbr8rDrD9\rD9A.q9A GtK\@ Gt#:%. Gt#6 Lj\br4 Hr|>}3iq#:%. Gt#:rq#:ȝA Gt#:%. Gt#:|3LwuxGtKeImD;bwiߌT2Gt#:%VH}8} }AT 3(Ht$: &.(H,Pk{MQ0Q(HS) 9 i4E4GA MQ(HSLs) ii4EA MQ0mA'* '* NT(8QQ(8QQpDEADE'* N,PpF H3R( '* N,PpF dA)PpF gDQ(8QQpDEA?:Q_1QKoF&*MT蛨Gt蛨7QoBѡoBD }D }&*MT#:MT蛨7Q7Qob}3GloF }Dݱ#6x7#w ŻwDǻw&xLjfDn]w&*MTxGtx7Qnn}nD rfcojnF&xHw3R݌x7#1݌(MTxGlnF Żww&*M,fDnD;┿[wiw-xxxxwڂwiwiwiw-xxVDŽ^i}L'1QDqr_&TTVDqr_&f8oF },0It$:LfĹ29oFf8oF<$:x<}3R7#}3bdDg|A[S&)A%:?3cݜ7#)3%O4|fBq$'10(X7#Π'v ʈ3( JtM\ Jt%:&. Jt%:A%:AΠDgąAΠDgP3h DgPbqߌ1Ҝ7#8G/8}xHqߌ|>B7kU]?\(U?B?)^l{c8xN_}_} ?roaAb#1+[7t|?<{rN]ΉBF' '~_\뉎D\cneg}%޿`[XK4ߟ?Mdz'?~WQ_O_ 9 q#q#q#i 999 q#qox99lxgoxi ۦ9ۦgoxmx}ÓJ RDToxL Oox}Ó'ItL\6'#Ie{D$6{Y}2{DOt#m3@Ѡ}G4eġGt#6{>i>i>i>3R}2THt*$:&.THךLt$.'w9#:}rfdw9I]e0_??,,LLwtititit-LLLLwtitititit-LLLLwtitititmLGt#:#:tDgątDg:3]tDcIF ﮿8ݯf* ?0a$:%ۇ'^">|Vpi/#1Gt#6Lj_w|BĆ 3P!BF*dĩĎ q*$: N  NDą NDBSaBDBS!ѩTP!ѩTHt*L\THl} ߫3  oA װ̈S!Ѩ;@$: }/1qBg*|/ߟ싽UK|]国_Wq$:A K|{_+߷p%7^Ds%ѹ\Il2#W2{0>U$:L&$63\I_0oaM&iۊ_ }d_0Ua|_~~Qf8JSf8:pt(Mqt4i4i GN3)N3f8:p8:p ;H}Ok|@"<*FO@hh@D'~~ ɔm7o݂D'>шmh@D'>(vRbhD؉O4^}AL'*>ƠO4}D'm>󉆘+h\D'A!NO4z`\9Qƕs3by?͉JO4|6LɔA?\pULhd:QFO422'S^_EU>Sb؉O4^}A R'*>FO C~RHx!߻<݂BMS3ĝWRĝLs2p O4H…W[P^}A R'*>FO4 Dc'gx.ݎOqtKwBUv2ݮr!*JO42}f_$~RWH}AL'*޿L7}Gtſv ʫO!u*\ u'6dF2Ms2=m!4'4'4'2Ms2Ms2Ms2=m!4'4'4'4#3٠_WӜW>7EUb3P(': ]'.Jt^%:Wh:q!S G 0( JtM\ Jt%:A%:AΠ AΠDgąAΠDgP3(4qaP3( 0( Jt=cPFA 20(#Π ?3*e4qaP3(0hF*eaPFe 0(0(# f }U Hà8&. Jt%:A%:A 2 X1(# 2 Jl4#ʠ[pQbgdQb>58 Gq%:G%:G G 28J2R(# 2(# fQFGD Gg8z L+2e!SF3׫4 RqH%6HY @?.ziii-搚搚ziiii{zڲ{88滧-iӌ6bҜ+0It$:L&.0It$:L& L&D&DIdDI$a0$a0ItL\`0It$:L&.0It$:L& L&D&DIOt$~&ȿ!`#ą oa3Ao!ą ND'Hg|2%'6>3+& +L~_䯫ANTl|gV|ߟ@$:   ĈboT_*%F~    G-HAD%':#/FzD#/}Dˉ/G4{C}o=x#=_IoJz~NzD'+Jz~˾#qp|]nAFzO}GL70јrz#6of 9[[[i 999[[[[i 999[[[iވNoDąވNoD7-q7FtzK\Ftz#:z#:ވNo ވNoDąވNoD7-q7Ftz; dA؀# 1b wӌ4?* Fz#: LGtK\Gli2R=HHLj]wD;.q;l1&RUз\}UM,GA}DogL.7 P(HtL_Θn~D @$N Ѩ~3&[DD"y:#W@O"F=?FOTx+ z`Ne'xD@Nr N`F@FD6?~~pl)696i44Fb#MؘHSl)6ii4Fb#M1ͱHSl)6-8QqbDFcDƉ'*6'*6NTlHtl8Qqb#ѱqbDƉ'*6NTl$:6NTl8Q8QqbDƉDƉ'*6'*6NTlؘXa(6N,qF l#:+N,XqF ViXqF'*+NTV$:+NTVXΈac;A '*AN,rF d!)rF %HD%ȉJ N '*AN,rF d!)rF qX(ANTLrF %ȉJ AHA39 HF '*ANmʼnHtV8QYqĂiXqF'*+NTV$68#ʊ ViXqF VgDYq>jL>jװ8#+2Ұ(+NTVHtVذ?~0XX1YӜӜӜO[X1Y1Y1YӜӜӜӜO[X1Y1Y1YӜӜӜOXHtV$:+&.HtV$:+Ί +ΊDgąΊDgEbŠDgE"Y謘"YHtVL\XHtV$:+&.HtV$:+Ί +ΊDgąΊDgEo`DF@$HD|x QX<>'?'JÊD O Lǒ'>Q*6#ψv*~'OʖD}XyCQO$.Gt#:#: 7OXro~\ЯP!QK%Wǒ':7>y,yNz/#N@ gi-wiii-wiii-wD?/q?GtK\Gt#:%.Gt#:#:DąD?_D?/q?GtK\Gt#:%.Gt#:NGlqK\# 1Gl/#1# 1GtK\Gl2R# 1G4߂*$6TȈSabE8 2Tx5|-\qV$6+P*ldı軆'w :ldw W,p{u/ѯrK\\I,VddAL#&舙 &hDJbq^"#W2{DK$^bbΊۮ5g Hqv +$ 2"HFdk\8/':Ad!Ȍ,Il??/yBiNiNiN-yBiNiNiNiN-yBiNiNiNmIt$:A $:A ND'ą ND'HdBD'H$ 2q!H$ ItL\It$:A&.It$:A $:A ND'ą ND'HdBD'H$ fF &w;3p%#Ε Wǝiwfy9#Όm~燫щˣD4 &#ͣь8m&.It$6F3<hFGif}G#&&:W&.F&*30X=H4#*\aozIm Roaۂ$6A3rۂ\n 7[f7&NDߘL\Htl$:6&.Htl$6^7$6hFnfn^2#ŋ\i^2#NDMoL&VL3 It$:W&VF3<͈oLH"q$޸ҿ W[Xp~Y2͹+Ӝ+Ӝ+Ӝ+O[2͹2͹2͹+Ӝ+Ӝ+Ӝ+Ӝ+O[2͹2͹2͹+Ӝ+Ӝ+Ӝ+O۸\It$:W&.\It$:W+Ε W+ΕDą+ΕDJse•DJs%ѹ\p%ѹ\ItL\\It$:W&.\It$:W+Ε W+ΕDą+ΕDJs$7& A2$#N Ad٘d7&IoL}clLfdD"DF@d~3H4l|oX"# 2"# $#Ɗ_Htl$62RF2F2RyF 6ٍd 軑'v4n$ѱ\'.\f1# +Cψc#z NDw$:6[`cF}GF|ߑDwLBFdndFHFVdٍdıXf7f7 3R$#ND?0&.H,XYHSV)+ҔӜiʊ4eEb"MYHSV)+9+Ҕiʊ4e4gE"MYDeʼnʊΊ'*+NTVHtV8QYq"YqDeʼnʊDgʼnʊ'*+NTV$:+NTV8QY8QYqDeEDeʼnʊ'*+'*+NTVHtV8QYqbŠ'8#+Έ"Yqb 8#ʊDgʼnʊ'ȈDeʼn+Έ>\=Q7 ΈQgDYذ\ψ>r=Q8Qqn N DDE iPpF g@AF'(8#+gDQpDEADE dQpb3(8@AF'* NT(8@AFE Έg@AFg@QX #  cQ蛨7Q7?~^/͡N[/͡/͡/͡ τzA4G4GLsLsLsS[p*L\Xl H8&.THt*$:ae₂DGAD X<<#ȌTH?8#8%.Gt#:#:Żgx73#c3R<<#Żgx73# oz^pFǒ#-%O -̌( ??~t)Ц9hi 44Z-M@@KS)hi{4EW+M>|{4gڲ9Q>'*mNԽO#DẺ1'*b1'D0It09Qar$arDɉ &&'*LNT$:LNT09Qa09QarDɉ Dɉ &'*L&'*LNT09Q rb9#ņ(A '3R9#JD'ȉJ ''D29Q rb9#ņ/a9MrFttxfIl6X< >#TTHC4TȈSaBDBS!ѩ0qBS!ѩX%Hq$##3R<">##3R02$V'Hb)vg8yrF& L&IF'gI,NddM&Q7':b}p|b8#Ŷ"#Ͷ8W'gxȜ!)2Mbq'O2'ONԓ'':mmEFmq$^D}pp%?sY2͹+Ӝ+Ӝ+Ӝ+O[2͹2͹2͹+Ӝ+Ӝ+Ӝ+|e1 2 27O[6|17Ӝ OۨTHt*$:&.THt*$: N  NDą NDBSaBDBS!ѩTP!ѩTHt*L\THt*$:&.THt*$: N  NDą NDBS"Ql 2l 2( AAF DF7$Y,'8aP&=1( 2qMl Jt%:&6 Jt%:'g9ىy>{ <.4rh k& mhHILե.&^!޿kl#&$߅˓~$:x'g.3O x<~3M&oc7I8 N+]N+'(Qx9hEQV$:++[Tt*$:bbDGA P5_݈ 8 t ~@$jLP/\//wyɵ߿˷i>3Q@ܣS!k\kX8aů)a4gVLsVL{Qj +9+9+9+ְbbbbj +9+9+9+ְbbbj+ΊDgĆΊDgE"Y1aE"Y謘ذ"YHtVLlXHtV$:+V$:+Ί +ΊDgĆΊDgE"Y1aE"Y謘ذ"YHtV\cE"qrɄ8+&6H@d2aE&Ί7ʩrjId&iEV$NX"iLF8L'LN+f2:drZ"Ć+ƕ9H4Fs%ѹ89dr1b2 &F&4'dI+N62 &GLl$d# Il̤I'Jdc& b1D?HldĕL+ΕD?٘8:a89dr1b2 & b2q$NN6fҜl$Fq'0d#Jl$Ć P!Hd$M I4'H$M IS)AҔ iJiN4%H$M 2 IS)A5YQ dE%HdE%ȊJ +*A +*AVTItYQ $ dE%ȊJ N +*AVT$:AVTYQ YQ dE%ȊJD'ȊJ +*A +*AVT8`& k28YWD\Yqp &r%OAVS +AVtlXѰqzZV$iŊk28drZ&ӊ5ӊ]PaM +FdcM +^ @qp&zޑxIojSaw.(SL +^QŠJWTk*Pac{;]8}Ɗ#YwXQ; +*VT*TXqpvIN +~qq @bE=XQO6/Q?(h.P: Vԓ˓~.N6vdcQz@>lhTx}+* _ӜWkX1Y1Y1Yq(WiΊiΊiΊ5欘欘欘欸ZÊiΊiΊiΊ5欘欘欸ZNJDgE"Y1aE"YHtVLlXHtV$:+&6HtV$:+V$:+ΊDgĆΊDgEbbÊDgE"Y1aE"YHtVLlXHtV$:+&6HtV$:+WlN6Vԓ'TdBL *$NɄ 8&6THt*$: *$: NDĆ N 2Pa&#*d2B&Q qDL&TKo2YÊD=kXqBLݟ (= w@<= vwD⊏_bs:@$YÊz֐g +:Ysr*礡BS!?kݿDD" Nx5Ht@$YC 8ݟaw.Y?~}Ŋ(vЋ]aE=kXw*<ݝ N~ְ߷Bi5((((Zi/((Ziiii5((((Ziiiu(Ht$: $: DGDGA`bDGA Q0AA Q(HtLlP(Ht$: &6(Ht$: $: DGDGA`bDGA QpYC&L&dL@$N8 &6Ht@$: @$: D 2b&#@d2D&~֐TW ??H󃉣L+#w;OFL2d29?IA&DgL2q#:#:x&*9iG?Gdt~8y Ě8ե~F LN2q#?~K.4Gt#:''3|^:Kl8_j 999__ڻrLj 9999___j 999GtKlGt#:#: DĆD?/?GtKlGt#:#: D3D?H 1qKlH8!=&c⤗ؐIGtKlHGt#:#:'dBzHɄL2qK d2?&DѠΏ.f29/NTۣA-P*Ner(ݟlDzL~(}+6oRqBzL._}D}D>_&s~L}D$8!=H@qr/11軾|EřN 2q*$ED8qt?_>Lˇ#:}N1q#:?{H8 MI/IGSң)9єhJzO4'=MIGSKsң)єhJziNz4%=MI/!Jz****UTҫWQIWQI^E%=^E%JzNz**UTҫGtҫWQII^E%JzD'Jz**UT#:UTҫWQIWQI^E%=#WQIj2 (*H&ҫI^E%JzD'Jz**UT#:UTҫ8 HɄj2 H&Jz d@z5QҫGtҫ8 H&ҫI^E%c*&]bwxWD]EŻc2(UTxGtxWqw5Q8;&j2 jxWQqw5]M**UT#:UTxWqwL&xWŻww'xo.nVk...n5...nVk...nwD;]bwD;xxGtKlxGt#:%6xGt#:w wDǻwD;]bwD;xxGtKlxGt#:ޭ8;&cxqwL&x.;xxGt#:%6xGt#N2 1ǻ1;]bw 1 1Fkd}5F_M&(IkD/ҭ5j2xE  e2?&D?54(Ht$Ed}5ыt+N2A>j2x=?&#d2AA&dz~L@$: @dLD@|۞@Ls@\444@Ls@Ls@Ls@\ĴKs@Ls@Ls@\444@Ls@Ls@Ls@\D"耘"Ht@$: &6Ht@$: @$:  DDbbDD"1D"耘}X'6 6DDFa#x{`h0G#=:6&6H4lܣ@$:  DDbbDD +* oc޾d;=ތ&__ 1Sz)=#)=2i@89&rDxD=:وl وl e2B6&lDG6KTN وl e2:cdrƎɄޘL-1qz#;Kq 1qN#;KlDFt"#UEt":{%6EϮa4gJsJsJsZa4g4g4gJsJ{ӿ4g4gJsJsJsZa4g4g4g:":{^ {^Dg/Wb^Dg/+a/ًذًEt":{%6Et":{":{^͹9#:eNY eNYDĆNYD,[;7Gt"N1c┕PqrngĆ^Dg/Wb^Dg/ًذًEtJc29 dBdL,\,Y8&~؜#N1c2!2&Nd)jF4Nqry+3يV&lDC_]P(t|;m,(љLGtKlNrD9)@z#[STԷ *Ap9-Q9m8cpFt8#:%*]NӮ"/evL&o7Qc_>/H4G@o4KsKsKs[444KsKsKп4KsKsKs[444:#:} }D>C_b}D>Cѡ/>CѡЗ@ѡGt#:%6Gt#:#:} }D>C_b}D>Cѡ/>Cѡзb}D>C#94]bwD?FshDrD9\brD9A ؀A GtKlΡqlLGdlL&И8%Ρ1shD?F GϡΈsh4FCcFtN[;FshD'2C#9ϡsh4E4ʺKꀋ83^Dg/qr-{1Cc29dr-94&~pFt8KCc24&ieL&ufҜY#5Y#N.dtY'?FmD?ߖذq^?4g/WMًESJs){єh^i^4e/MًeES){єҜh^4e/WZ^**{UT":{UTUQ٫٫WEe^Dg^**{**{UTUQًUQ٫WEe/WEe^^**{UTEtUQ٫٫WEeK53]Y%Jd****UT"DFt"DVQщYE%JdȈNd**UT"#:UT"8 (_VWMWEe;{'V+D-#:U`XM*]"8x(Ulُן-g魢[ElXE崊z^pVQᬢYE=uIWI*y1UQOu9pUbXw8/vڏ2`/&~gE=p|*N0u`Xcj 999`XcXcXcj 9999k*ZaiaiaiauFt #: #:ÈaDǰÈaD0cXbaD0c1,0c1Ft Kl0Ft #:%6Ft #: #:ÈaDǰÈaD0cXbaD0cQπ%6g*:p{dpgM #.bϚ8%6pFt8#:8#:ΈgDΈg$d& L&dpahM& A.qrf&3k5ûVt#:gj2x&#c2!=&7I,cGԳp7IɄ8'd}D>3v5q$1iTHt*$:g옌S!ѩT89!WDMj2x&t5c#qp&tL4]E=MWQOUb&t5ql$iz"q@Ls@\444@Ls@Ls@Ls@\4444@L{UIs@Ls@\444:@$:  DDbbDD"1D"耘"Ht@$: &6Ht@$: @$:  DDbbDD"1D"耘' 2"@d2D& DDD"1D"qL&L]" 2W8w ,W 2WjSaQ~BUjTHt*\q*t5 ]M WUL^&D_U4HSDD*LlTHt*$:Bdr9nM NDT!Q =uKO3ߜ@$ +du5b]MXdu5q*$:BǤD 9 bbbj 9 9 9 bbbbj 9 k o5怘怘怸ZDD"1D"Ht@LlHt@$: &6Ht@$: @$: DDDbbDD"1D"Ht@LlHt@$: &6Ht@$: WH" 2q@Ll8D&@d‘"Ht@LlHt@$: @$: 'd8 abs//%~~'kP0qL~~u8%kU׼'xIw+;_||WxWQ_5؜#:DqBo\{kn@ GtK|[a:3љ8aL.4>y?&W;O.v?/*NA 1s~s~]h'x8~/a:6yoLLGS)єҜht4e:2]3MLGS)ӥ9єht/c4g:2ML0]Eett**UTLGtLWQ2љ2]EetDgt**UT#:UTLWQLWQ2]Ee:3]Eet****UTLGtLWQ2]bt*&2љj2`(**UTLGtLWQ2]Ee:3]EeɀL&2]9?&s~5󫉞󫨤G^M*dpί& }9 DQ_&warί&JEPa9TŠs~L&jXQY" UT*TXQg** VT(Xqp/ٽ J&Ҩ4L.`EEſ5\[Ezί#Ndpί&s~5\drIpM +ރ&L+NXe{7欸ZÊiΊiΊiΊ5欘欘欸ZÊiΊiΊiΊiΊ5欘欘欸`>g +9+9+ֱ"YHtVLlXHtV$:+V$:+Ί +ΊDgĆΊDgEb=D˧Ҏ ND'Ć ND'HdgSap%ѹ\p%ѹ\ItLl\It$#ћ|ioQQ䣢sebÕD}& $:A N A ND'HdbCD'H +|T78xMo2yV`M'oRD 8B&N~& G_&~&jG zGWkD/Gy7G}D;?y?& DGA3 2 f2BA&DGA`LP?E  'oJRd$5Pa&#*dTHST!?޷ci5Ziii5Ziii5ZD?/?GtKlGt#:%6Gt#:#:~З؜*$:Nz NzD'1'=I/!=I褗ؐIGޚHIGtKlHGt#:%6Gt#:#:NzD'ĆNzD'=^bCzD'=LH/1LgNz#cGt#&Nz NzD}^bw 1q#޷7qwL~?.8ފ~LGw ~'d#:وl{2FMU*UW#Ut #:'[{O^#b2a/&zlE׭u4E(j+́kVk+́+́+́kVk+́+́+́kV뀋Et":p%6Et":p\ p\D\D.Wb\D.ссEtJlEt":p%6YъhؠъhEtJlЊhEt"e+vfL.ehؠqr,eL":p\ p\D.Wb\D.Y&f3]6Ĉ엏'f2lY&NdD'eLȈf ^&y2bZ&7ͨu4LG\LęgViFM&23vD9\Y&7xGNz]w8cw4Gt#:Wc2:c8xݽ ^wujHt@$: &N^w&ݫ 6jHݽ oL.e2x>&諉$O4]bDZu466V3lfHSlfXͰa#Mac5j i 6V3l)6V3lfXSظG=6Ѱb hظG=6VTlܣa hXQq{4lܣacE=6Ѱq{4loj2vL`r&h0G=LV''{4ܣ!fEE=bs1hGCO&qrnxsF{4ĬGC=W` &h0GɊ {4ܣ &h0YQar{4ܣdE=+wwVdpn<~n+X>1Vxʊ{4@TGC=Ѡ?yO;&}{|>y>1cx]\bOv~C{4ۣ **HoFz{4'j28ѷOhGût{4ۣ>'t{|D>1ۣ**ѐmi{48DGð=>~Jo<~J& g{wYj 999YYYj 9999YYYj 999pFt8KlpFt8#:8#:Έg ΈgDΈgD3ଢÈaDǰÈaD0cXbEt":p%6Et":p":p 蔵S''\ p?O?O #:Èa ÈaD0cXbaD0j28O?O&Đ>y>qN#:%N4XOd#:وb]Mz#>~n8k &?MOk}F4zȶG=צŻvӈiDĆӈiD?vl_&ssצ'6>yj2xm}xGt#U6>yxxG|5j2x }G4ۣ^{ZKs[4ǻ4ǻ4ǻKsKsKs[4ǻ4ǻ4ǻ4ǻKsKsKs[4ǻ4ǻ4ǻ:#:w wD;]bwD;.;xxGt#NNe2:ġGtKlG4c+]G'LN1q@$: @$:  rLWcHrD?!Gt@Ll'~B(ؠ Q(HtLlP(Ht$: $: O%6'~B8;&rN1~|'=^'=?!GtKlxGt#w6{c+hxG옎hLG=:z#:ވ~:-9FtN#:N#:4Z&3kL~~~|?ߖ؜o#:ȈNdW'mLȈNdD'ĆȈNdD'2oKlη^DgĆ> {9{ְWWWj {9{9{9{ְWWWWj {9{9{9{ְWWWj{^DgĆ^Dg/+a/ًذًEtJl؋Et":{ZbsfEt":e%6Et"5YKlάɉDtrJlȉDtr":9%6Dtr"5Ҋݙ53DtFJlDtF":#%6DtF":#F":#HDgĆHDg$3RbHDg$ℑ0&3`LF F{43`L&g8#%6DtF":#'g2i΀'_2qF":#1DtF":#%6DtF":#''2bDtr":9%*9]~$ɉ89 .&\L&'2bQ\E=7WQUtdKlFtd#:%6Ftd#^ͬ&NoY8&p5,\MgLIGԳpY IGtKp,\Eg:,Y8,\E= Gl8aS0]3j ӥ9ӥ9ӥ9ӭ0]3]3]3j ӥ9ӥ9ӥ9ӥ9ӭ0]3]3]3j ӥ9ӥ9ӥ9ӭ1љLGtKlLGt#:#:t tDgĆtDg:3љ.a:3љL0љLGtKlLGt#:#:t tDg;#:ϡz#94C#:%6FtN#:N#:ӈiDĆӈiD?Fsh94C#N؋W h}ā+qtS7}/Ā.4Esh94,^huǞCc{V4.LΡe2:drcqp)ȈNdD'2YbCdD'2C#:'2CcЈ~shDC?YCYDjSןVshL&ИpQ&Ɉ8{3k4F`4ǰ Ks Ks Ks [4ǰ4ǰ4ǰ Ks Ks Ks Ks [4ǰ4ǰ4ǰ Ks Ks Ks [0c1`1Ft #:%6Ft #: #:Èa ÈaD0cXbaD0c1,0c1`1Ft #:%6Ft #: #:Èay2h0FYc29,3ə5&l وlDGوlDG6#ё-A6#qrfZ&3kL&g֘L]ə5&~f褗8:Ihw}/Y &}7X\_Q_>gΓ SoL N+>B6;ĩۈ~-;ߓ |5Gt#]yEP!ѩTHt*$^cTHt*$:&^zZSoDBSa74^zcHtVL`=?&=+wVCѡ89L >Cѡ/9Ht#:'MIs&8ym:&~!+x\J Y~!+_o.y9s9蜖pqi۷N)9єhi444rM9FSN)єhiii44rM9-9FSN)5VQ9rZE4sZE崊i****UTNFtNVQ9r9rZE崊zUT"DVQDVQǫ~ǫ*ySD穊S**O**OUx<^bCN**9UTrDtrTQɩɩSE%JND'JN**9UTr":9UTr887W9&S*DyV Y+.dA'UQ/d؟oYM [k2& ^덉W{D٫oK] [{DϷU\ [{1WM*꩷JYDJY**e**eUTʪUq@YL&UJYNY**eUP+dJm5\ [e^w1Rؚ .RX&KakVQ"QΏuc 9[[[j 999[[[[j 999[[[jވNoDĆވNoD7-7FtzKlFtz#:z#:ވNo ވNoDĆވNoD7-7Ftz[7FtzKlFtz#:%6Ftz#:z#:ވNoDĆވNoD=UQO{N#:'9-4sqiL&IiD4sqiL&ɈӘL8ɄӘL8-ӈNcFtN[qiL&9*1 qjqLN#:E;Ftz#fɈޘ8ވNo7IAGdBoL&8Lz#NɄޘL-1qz#:|[ oA4GdKsdKsdKsd[A4G4G4GdKsdKsdKsdKsd[A4G4G4GdKsdKsdKsd[C6#ёȖ ёFtd#:%6Ftd#:d#:وl وlDG6#[blDG6#ё-A6#ёȖ ёFtd#:%6Ftd#:d#:وl+vFtd#^o&כ\brdzs5qKlxGt#:%6xGt#:w ssL&2\M7W 2qL\M7W^J\M כjЊ{ C+^I}ġзbsahE#=:w^$A8x6& 䈃ozKTz r1~[M;v<[MwDǻkdZo5[M ~(z);^DZQ/"8x6&oA ؀qroԀ\j ȥ9ȥ9ȥ9ȭր\\\j ȥ9ȥ9ȥ9ȥ9ȭր\\\j ȥ9ȥ9ȥ9ȭցA GtKl@ Gt#:#:r rDrD9A.9A ؀A GtKl@ Gt#:#:r rD;#:' drL#N@8%6 Gt#:#:rDrD?MGt#dc2A6&dcb=ɫOو;߿ɫdcȖ ёF [& 'đȶj2x8r7_jxG]& cx8;&wD;qwqwL&x8w#c2;&c2;&w w e2;&wD;]bwm߸wo@SKs)hwiw4;M.xGS)hw4;]MxGSKk]EŻwDǻw**UT#:UTxWQxWQ]E;]EŻw****UTxGtxWQ]EŻww**UT#:UTxWQ.wxWDxWqw5]Mw**UT#:U4(]N****U d5`Mqr&w5Q'w5Q88yW DQ(XQQ` 2qxkb(xr*LlUBAWoܿ +*^E=WQ ѡB_E}JzD%=*U4|6Wq@zL.H{D8U d+Dm r*M}Nm*@&6 ׊lDGl*,m**UT8pFt88}qgig5ppppZgigigig5pppppZgigigig5ppppZgD3,3pFt8KlpFt8#:%6pFt8#:8#:ΈgDΈgD3YbgD3,3pFt8KlpFt8#:%6pFt8#:/3qgL&p,3.\E}]a ÈaDǰÈzdEtJlEԓl$qVL&hdVL'٘(Ʉ8eۘLηĀ:b/&b+֝'X}^hpV!2\M\EǰGj287W=7W1897W84FtN#:N#:,\E32qp&pL&gjFtz#Y8blDC=ηđȖv {~LWk?,YQ ~(m!2·_cCiN5TTTTZCiNiNiN5TTTTTZCiNiNiN5TTTTZGDBS!ѩ0BS!ѩTHt*LlTHt*$:&6THt*$: *$: NDĆ NDBSabCDBS!ѩ0BS!ѩTHt*LlTHt*$:&6THt*$: W쨐THP! 2q*LlTHt*$:&6THt*$: *$: NDĆ NDBSa LɄ L0E5ы^+ޚ&~-qLQ/z8xk|Ϸt 'LęhLw N'Lę{^ˆLHqBz4Gt#:#:NzE0'=#Y,@OLw'<7!=-$jNzD'1?cG3v;#NɄ2i'Llil5ȖȖȖȶZlililil5ȖȖȖȖȶZlililil5ȖȖȖȶZlDG6#ё-A6#ёFtdKlFtd#:%6Ftd#:d#:وlDGوlDG6#[blDG6#ё-A6#ёFtdKlFtd#:%6Ftd#:V쐍F  1qdKl8BV&r rDrD9A.9qrq*ũw;߅щ>&}LDљ.qtq*g:)=&SzN1cbG\IC 2q*$g'LS!OD_Lq4Gt#:#:ɉLFGtKl8?&~J'XWL&'8GdL&'LNe2:"ܾ9kP((HS) i4EA` MQ(HS) 9 i4E4GA MQ(֠`EE+* VT(Ht(XQQ Q`EEDG+* VT$: VT(XQQ(XQQ`EEA`EE+* +* VT(Ht(XQQ`b+P& Qk2@( +* VT(Ht(XQQ`EEA`EELP&D_Mk(XQQ8A( V`M'j'ɀj*?^DI埬9Wq@z5Qҫ88W?&]EwD'Jz****UTҫWqpɄjWQII^b[Q?WqpJ&zJ2]Ee:j2`)zJ**Uҫ{إ4KsKsKs[444KsKsKsKs[444KsKsKs[9A ؀A Gt#:%6 Gt#:#:r rD9\brD9A.9A ؀A Gt#:%6 Gt#:#:r+v Gt#N@8%6 G 1qKl@ Gt#:%6 Gt#:r c2LF drL& A.qrL& A 89&r 119\br 1q#N@nM:#N@qrL& 8r rDrD9qr@A ؀A G\& *A 89&c287W9& c2L#NucVk...nVk....nVk...nwD;]bwD;xxGtKlxGt#:%6xGt#:w wDǻwD;]bwD;xxGtKlxGt#:ޭ8;&cxqwL&x.;xq^5WlM} }OP3 2Kw+.e2BA& {wQ0qL {/Nդ.4GtKl8x_ٚ8īKl?}ekGKl+% %~#vw?Gt#^fn5q#:#^]bz-[4^^b |CDK*wAT}Kl\iFQX(=+vaE?6jX1YqӜӜӜWkX1Y1Y1YqӜӜӜӜWkX1Y1Y1YqӜӜӜWXHtV$:+&6HtV$:+Ί +ΊDgĆΊDgEbbÊDgE"Y謘ذ"YHtVLlXHtV$:+&6HtV$:+Ί +ΊDgĆΊDgE+Vd2aE&Ί +'dŠLV$:+Ί +L  N͙@ $NɄ2 1 dgGdr& $:%qr&L GDۍ&Ld3L3kҝ $N21.8  D?@ѡGtKlGt#]>g2cGt#:%6GD>C_%'lt9.GtKTۣ[_b؜#)=]E};bCd }mۯNdiNd5DDDDZCdiNdiNdiNd5DDDDDZCdiNdiNdiNd5DDDDZGdD'2щ,!2щDFt"KlDFt"#:%6DFt"#:"#:ȈNdD'ĆȈNdD'2YbCdD'2щ,!2щDFt"KlDFt"#:%6DFt"#:V숌DF 1q"Kl8!2&"cDщDFt"KlDFt"#:"#:'DdBdɄȘLYȘLщ,qDdLȈ"c297ĉ,!2щ8x & 9Ø8܊{ވNYDĆNYD,"4Et"p] v앨u} #:qLFًhuU Jd3,q&5 EM&21N8%6Ftd#:'f2yc8r  }ڀMA.A GS)ȥ9h r449MA GSKs)h rir49MA. r****UT WQA WQA\E9\E rr**UT Gt WQAA\E rD r**UT#:UT WQA WQA\E**U\M W9\dr5Q#:UT WQA WQA\E rD r W1\M WdU&j WQA8(U\M W9\E r Aj WQA. r**UT#:UT WqrL.**' W r*@2Ԛ]y'LW1y0]M**UT#N&o****UTz87&z[EJoDz{H4zKszKszKsz[444zKszKszKszKsz[444zKszKszKsz[7Ftz#:%6Ftz#:z#:ވNo ވNoD7[bCoD7-7Ftz#:%6Ftz#:z#:ވNo+vFtz#NɄޘ8%6F 1qzKlFtz#:%6Ftz#:ވNo ވzc2LFdBoLgjg#zc27&NoD1qz#NɄޘu}e2yc X&w| eҐqBzLNz+^ ]sGGtKDM^|C fg*: gjbTx}B֊NDBS!qBLDUKV+%1q#:Gd}LjG4 onQ[d"耘"___??n刺M?~ywr??;2}޾Mӷe0ؾkM_ӯ{5m>nq~ w`}x~=>}yھ{|]ğe6<^޷'sW7q}7pW߻~σzmvf|<>l0pWϛwϓ/qu<2x\}=mqW_H&q}st>zt<㏫MߏW3?|>}}qqզ_wW_ =O>y۟q16x\}ET6|?79 ^ߍ'mxqqx6u6?.G/ͬssv1x`}q|~qvyvp8|>~>_玏|8|:>&/_ɯs:l?Avok;lW_/3a;ɯ/wa_cy^YGՎ/Yyn#K篻U㢯{NǃSޅ6~{/|¾P|{xaas///x yY_4 =S9 ׻hww/Tq}3|uN|u/-jy{ķouv>/!_>[/Squ8x]y||Fs_׈w_~P8|؉6 l}ܾ\9gj~stXq]?x`^la.E\ma.)^ma.0O>ۏ/0OW3LߗLK_ӫKFWK+Ktإj~9z1}~|}[=?z~o8O.7:cKv]CyGFj\Ϗ vإr~҃vإS}@r]0s}Hg=G:D]m_O]zܮ\x.jW=W6y5~{'FX/ǯxB/.}5~_?tz! ÿ3fӃg=e6?\r~rO..?]_뙳ix琗C^].~z9^?t}7_?gOIxq~)NKՁz%zz#c>>9<2yemǏc>(Y_ӏ~?IB]m_9`]n׏]vzY?vYee}]>ϯUvq_]n^nO]v~겶㿣SO]z՘(sǟ|3;~_?y'åy㿩8"otٜ;esr~`{~m3so>M>W:yui*un>19ut3ɱ;9:yu'yr۩?yLm19:g&uڎW_<9c䫝mڎWoevzsxrxVϓcYZg5j;Y6>??>^G~ߏTA< Ǐ&Y??'K~8Kyq>Ϸ?/޶ao7"//_OzZzdw~u?WW|7Eʯ~~͟>A:7~sC 76?zn*yM[oX-?乞\^=sC}C?~5o5oD?27]]߶Ԝm=j~]s=mTO۷vzߞi}Wrخ_S~̯k{wsخ_S=m_=vla~oO]}{]ɡ_G߾nߕ=]ɡ_s߮C]޷z\/Zpum]}{:.wخ_S=m?J}{.w%=m]޷zڮW+8lׯa~oO~j?rmqnܾE9 OO۷)~ޯ08 _u_7~?rm۟Wn?yZ> o ~p۟yOu6sþkn?=Lqn ᱯ~گG8um{c_7?iyz~ ~sz~ G?_Nϯ?m;|ܯns??3?O}~wþu_7~޿_sm57~m砏um ?On~O< ﻀo_umӟWn?yr o~p۟y> =7_gum+7~?rm&?3=7gΝ}O_sþkn[qnOOaߟv_7c?Nϯ?knOaߟv_7c^_7c?zn~޿?rm+7~n紏umקwܰy;}ܯns?~p۟yq _ϯp۟i37NpqnqGc_79?s;}G߿َuzn?y> qn8=O}\a57~޿'7~lGumv_7~ڿ?}/p۟y~z~ G*? n?yrns?Wpm n57>=p۟yqns?]pm n?yzz~ ޷Cۏ׋ m*NhMΞ?~^q{?--e{Gr|w»wWzq=׻>-{o/.~~[neIq=yxq{]x%{r_\/ݢx[or=Wz3q=L?w%9%wJ߾Fb'qs@:1R3uOJ0RcRPGO҆Ը{ʔ6`F1F0Rc!*PGSцLӆ8^s]7kO҆{؊6`CW#4WoL`2u#uFju J0R㮓HPW \7[kц8Sqk(HkF0Byu;u#+m(H_iC Fj=KJ0nԅv{L`2u'u Fjc]ww҆x#5 %q'PXם`Ju'p-m(~j6JN hK_PN0 þ(ոz6`~[#{jk(HG#5α8H紡#4W/3[jJ0h?w,4F&yp>}dN:`E 59'[C Fju:J0R=P;S#m(H}sF0RԸ러#4w{(HhC Fj=GJ0R/#4_`:#qԉ2k(HNYC Fhܯ4`s#5HsF0R㮓fP!8?iywr"hl1NX%W[y3CWc9FPG3҆Ը{6`=' Fj=NJ0RqPk1'8m(HNgXC Fjcqk/N0RcrP[ӆ8{6`]6#4_`6'q9m(Hk|#4WϣX{.6`F_DJ0R8^s]7Aw{Ј25_)6wjNE <_iC FjuJ0R'P{/F0Rc8b#5:h %,HNZC FjuHJ0Rи_s1P{8넠5`]CB[]i)Hm/N0RԸԠ5`bu'Ak(H5`5u'ƺ#5:Mh %_N0Rg`=~9:?F0Rc8ƺ#5q FhJn#5q FjԸ/'ƺ#5ֹH}|FqϤwįn;`Ap endstream endobj 375 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 379 0 obj << /Length 765 /Filter /FlateDecode >> stream xVKo0 WDmϢ;[nmYtj-2s3@tŔHG :R b{xy*yf\@A!xZC0*h3uUjP}m52./V}~6Blմ% +0E& 6,>&~z;.314^/e| z'{1wF.N,j NՉM5lLn$6dFU#1uҳe y^#KzsǒX%DƉ'2Nd8qb`YoTQJ\Y7>1pt7ۗA zXWʇ/-DNXH:oΩezN7Mvw> /ExtGState << >>/ColorSpace << /sRGB 384 0 R >>>> /Length 81430 /Filter /FlateDecode >> stream xM%KR;_CkJ Gr[]@}^3A% 4[xWO↓OrzU\/O߾LNI߅S)uzy/_i_y¯?yqz>Ow/4]ηxu=ߨ\ӢH6-t6u%6Ѵp_oOx˶7^rId?_[Erھnk!%R(;^z6?|urKc;|}ݧݧ5;G|\{Gu̳;W^*? F%n_oKįR m7ߎ(|c>1j=/üg+"*{%8(5~;ks"~Nu]ME]%7czڞnu'A(c鱎YbT8ɶKzz`,_o'A\nuta\=֯%Ym"'B{۾>RE+ ܤ+_1m %I:Ѕ NCRNIF~9 fOQr @*AP-ri7p]W}}\f{_ ^Q`SĶ$"/6IAJ-iݭ*:ދÌ!{?mAm'SƯ|$*֯܆쫧Ŭ9zzY1?};,pb[u{נõJeDÉkqǰiɲEתrelS?y {eWAԆ6TI)X(ܷ^FY3N֍vWQbFhCHQ&D>qK'pM&]P[1蔚5ѡK͌˥:am7:~~ko-܊p| 3#'R˷NI),̌pvWP{Tp&2(+\aK͠uqS["hN"ZA g"JmnkcRhm7)<;$> Z:HR2 *Jm Չ4마)SK(c*i=ˢLqRpIx )\L.5`))u/]T+ַpIf~e?73՗m~\""z3$(Sreʶ\" 3AB]h#\S8 Ɩwƶ>._'R#Uĺ+~^~ݳ ZG6u]Ccw*4ŃiKl"::11O]{R*DT6Toຮ"TPnj L!-L0ey~jāHCijuiy(bC ]>h5t?$䪐POn b8-ICIBXbT$N'\u8+CY6ۿ=ލ}۫)kezJ.cMsAw<env}-LNDuz,cx,-\Jƚʐ09'6¾,;¬9z ;ȦrfKgMRsMY8t励 gͥ+:%Mu֕i$*.kXo3gպyouӺҺRIʯ#ؤVwn81%:6fAԍv,y,ga=rE&g1G+]]v=F^`zZ|W+ij8p]]EwO$u{LE]%e9ِh3"aϴ){&Nz3H =38VvcracZ =\7rBֵEp>ջ>Xڍ w/sQv`ԝr4Xs4EqOC\#!P-IN`3(-yi:bG\G#%wȂ>KKm)^Pٗ ZN,T[.HN,ft9NK#OM݃hYdMSxs4⑓ M88`q$)9ԍvU2QfaEHO&!:84NXąqi\޺κNf3?yu_l=ʳIٱ՜488~S8a)) ՝ SEDkP լkrb-LX쾎-OM~,M (C}MZ -$gD.I׍<5]gzO)C barYNDȉeBճg K[jmr4]ϳM}lƞKMnȬbS9S惘TjTI϶~7Nӄfzkb}*0G|ϴzk`MW!FAcj*(0`1ݦ<5 l{'Lm:}r<4P|&g yM Z=+ ~8$鵷 | ~i9j D}HWݖz,ctd!9i,'w/w5D`Y3ݞ-OM~M^42i \|N!B#F^`8O}6'G۵xjM n v-޸xNqFX]mgsu-z ;=?KKݚ+呚E˥P5GWcuٕuݒ[/a'?pIfS̑]46vN䦼M܄j'7YL%'d3|lO!'xv'H4PJŷř{3%$S0놆w9!ZIQH2͂y,9x$F^kdjs5 nɭ^` [brEBUb%7UeWbu#G/]9*gaܚ"\QPe`eb(Y(reH%j1[1X`L,k$ lRh1k̺n߻@Aar=9o}u?pM["'2uRyr;n!z8G=ǂޑJC%v{R;G}֛g)KqFޔoXD~W`{1Gmke{q lכgwO$BW8R}d2䏌UTE}d<e胺خLO?^>觴NN<7~lOA6ݛs9X^`mL4n&r}c*4G&]vE9zzϑs_8zˮb}O\>Pe3lXe7H^8JMc=/Nyԩ06gF\jIcZSaLk6ںڈ뺑خlSZsA֙+muf6:󅜬js9 k6Ϻ\%^Nz'N4 ~<>T}.e -d Xs%'&NSqr\A_n~f~żj3vC\_i\+iBUAV^ p}A.]y~|ʧ9ə^8Vu19K@r^M*G8`)k;ڕzz;^Pܾ8Zk||MM / "P>ߢ>wX>CaƱ?_ԍ/LJmG{ _z ?V[nS가C?!r a v!J3_?t bQZ~Eb\F}K?>+'"H t~=-qT/yo7Nw4~^Jhq{>&'|$\WsH7|.ob[er_y>LB~ /E7T7~**}/a/ʢM5/C=}Uq+ף)yjVx7}N-s`G[\w*#>ccU+ / N7ķd5fr6 ~i}I{s;O4o2|NxL+Z~賨Q!qO?Gs6gs,sc| )w O|P>sϹ#Ǐ}_ zt{^72&3ǿHK9)uW񽮩{G7H6v C[{ر+?ك+zqGƛ2+}Û~.iӿ8|w{v6|4cSzAu}ͷ2m=bhح6 f˓V}rֽ,%c4b}w,R7/?/o!||ZWeRۗq 0}^G<ǑdXgx9W3nR~i}ħUi 1tw jDOaAE*/To]f]wf0EYgܹq"8Tϫ[iW4[Y!z?>Ч%>хƷ<B?1)'NIFk鴎1Nc?7&+eitxp&)ؽnQ٥?N1M&]^P' ="'쓥qmqy1:pt:Dˬk[ʥ_9nrto3Fq]qqIR?Wn %3  kIשTΓ#p&;O;O;O0J7:ufDvΓ}ߝT}ߌ<ѻyH6K]7+-Qj~}VZ_4kD~1F+ G(ISNv> "v_ݯK*{ZZWSẮM5uam7ڿ{:Ǩ;,il80"J8˩fAOs )uԯo,HsUT'! $cX,,JOHSJ=xWy[c0}v|c'ĨᮥaRi0H[b.uJ6u]kAONׂ#^5w+B)MjO|<]ԍv+@NNH`<̝)2 991.Րu5]=٤E!M[Em[$SަKM_unҵ_2Fқkm[t'!M*qsm`/Iqn]֍vW&gd6UrmnlLp2UhU伵hr~ 'o}\12=,X.GhR;A)d Tj aoRpȰ@D İzt[?;O1tkk~t~v~0ܾ7nfN.K:%EMNyYQ*n4ĈhR9? glR=,kmv$ř:e阚p=cLRj" nSimiuSa*PeX Um9':t=YA̰<q˹1~-EẮAl1n|/"!@vKObKOrm \u% +"Y]L9A +p (4~' ʡh/aS~ ]}q9t% NJKHSuu,3/cʹdNZf4AKPތƍ@ݥf:%EẮs "Ghفov!{Q/ Rj))uK`Nf_3Gb%yLPRRAdh\Kwp]Omy8d![XER֐fs ͈V!l e.-Ja-:O.N{ĉynmA7Q:-<::p]pP22*eDƺzG4kͅM~U ?^u픝ǭ oLd)]=4uS^o8#W)zik-AԴCӖpx*yiu;7y5wwuNAA8Ak\d"PQ~ k^cqe_ ׍v?rZ\|tڃܼy(ťIW^V_ҥDžLƚ:欱`b:!*~%^NzrJ|9\DXv<6J$آvYhHpAF^Nz*fE6vG'K"ZTĒ+jNm!6ຮӽk2\UրR7Rr$_)z/y,gAԍ<5]"3GÇ@m豞hXӳDxkn赶D7tiL=s|~/*iLqn>OpzO鋡,tnEHbypIp-; ROuJ6u]=D:iM94Dȱ`s6!9w6Dyjخ/:|n쪑H7ؼƌʸ8/RhRh#\unyAq =ӹ4AH!ȫidg(P'To9ͺ@)(=˵_sڽؔ jz:o[\ XS9]CA꾴+uv&D\k6qbʵXQʜe b Z($\WwyocoPp nMu٢km2=HfA;Bp p6\p"VR;o{ 2]98\˸n\kk()ncZ U8= g٫$Y7(3ݦ Y\&ٳ r U+^b3Fܶ<{93y9{#qʹ<91)ӵ JBuuWpiWN8m\ ͆)X>gq9gá#gCQ}6DnMg>aFl'+gC3j8фll-^vk)[$_-t)svؤppHeW$ﺑخٝ_%>/0fhR>*#g,W(gvr)-.tAt`'T5gӎk4;93Ms9[fl{kmn˥]_+m8[6M)MK3Gvi*ۼKXCv.|9qXݩa_ i)y68r`9zi)G/]_M߽s }%4/r0Ba<c%"9B>G`sʬ"<~ͨi \)1cD)+]U]-OM!372vM4EJU8(gb= R/ ]zu?C8f\ƊSOq͸(ϥquJ6u]8Xf/_|RVНR8\&6,;Ҭ9zzO(2}NsTt(;%2FxLc6g\o5T)OM3 eP͖Dڊ"Pe*Q"͔+gF4K.O Ɩ8.uL?}@<_9[ߎ : 9r>/Twwu_۝z[R1,p kz9.6ؤN܁RخWձ"Dҕ6!vք<Y2k'2FRgJBuu9g]܄U}!BEՑPi!ޘ_sBn͢ຮςZxZsenLkշ!“P`j8cX-,ZxrSLgiJ$SyJ8W g/,T%H}Z\L&!O%]y3,Zd3YMu&z& Kӊ%z&uJ6u]gPf:C,1z mlvX(sb,cᐢp]9jh2F:E[G#Ay1L 8e:u_zbl> yꞡCJ9n2P[ n3*=CURX2P2T}kJIl{9vM>=fhukaEĚ6NNLby z']j~}HS<[eljKl]Z'M*t"]^­eF^`fmD=y}zD'&S{&EJN e8|+lL0Y:,u#G/](\26Usd'Bw*$uni`fz3yo ɜ[|tnhѻt3Tv?˵QX(ۿ_{W(w[ni`lݧ=_ov.rMcw׸؝:עw-G/]i_yʗGW8Zc0JIxr,٦19X}ee ?F^`6u8=,۸pkjNT5D:9H?&v^F^`)셫ԋ=a+찫 jg8Ly"R3:%EẮ0#~ɹ`aHux 7 g5bc1\xd l{^iC FN}]r\.B3G璃iU5\7rYy۷'nqYWOl(iI,T_orS`wj}d٢kՍNz&Mh,1cYpP5E#XM.h׍<5mgY=ξu) Z>g}d1Pm-:e1T֢゜vRnɭ/Z}ܽ h2o&+Z5Yc&{'h/9uK[Ml#.#gjM,^hrS!@bj{usQvߺn[i\O63mba8OqOdb.>8cs.;(%/Mvٳ<|՜q]'?X4dr-R ~m|g_Y$NzxGJRkX+!ϑX+>n|pվ͜ةC(:z`Z}N\jN-W4u[^Nz$_$۶bl9ϦF>W{Dž F%[͉m.$ɣjJ[4C ̟`w6L:9ۣGfsܮө}^02!*jm9zzQaKV5FoIފBQ_`*k*+%^NzrvZPݣ'f!`RGP_P_ݣ>Mv>ݽq>@r Mjv{,qkn <ߖCV^3I\\XS5GZ{JcoI^PeS`b3(F^`'?fejg:2I93Ӕvu&iC,$ʮLz ;8Rs#DySF9 ln'.pԜ4oe4RLg4b۔rUV!T̬59+!9 ѐ҉=i{4e0yj>=qh%)k[q84cjt|V8tv,ܽTs9|o0Ts}wB kGVsˮ9u#OM3{;O?:h ]la5mar Uu3F8.6ni`V?C>'"lf\ޢX˹(?-s |I{j]g+kʵUhm-)+7J3whr!G/]g;꽜v@V^U-xI`ѥ9#Ѷ6v {h = s)={޽9U]Y.OX3Qc5Ǻ욃]7t}<#;-&3YAnhg YF-%jg YAnr{x?{ui^[l#䫻_/V7P>7VF/}~Gr߁Op!Y+o5Gr>u?B|QJrwW_.9 ycՅouѷw">:D<ďz?o 7:}?~2~M5/ ymN@H~kr?J} 6P]^lc/b tvc| qC/%:jnNR;e!/k%u_pqs1]qR>E>S/@˰)Jc\2m?Рyy[hPqːA Q氻tnyn;&*J A|ԣgׂؼ5|ǛF^dVb{uhʇ3Y壞:kZ% ~ 2?W;_V/9y쿷 іyM>V:@T|ڡ9=é7U;ܝ/ۼ׮gzyhv:2Hs/)}o+;JH^)aM?2m= _xح߅gmJw±dE ߞv~?O_G1RM`~7ۿӟ=2||ZW2VRe] &8]g')'RQ%m2>fÒ/UrhR.Ɣl%/_‹.>OW_%}]|{>/KV ~]~=ZǢebo?^47{&/qcKx-6'vz);,VUa\1E6&^lrҮ?x=68cG6*h`h7/Xl=e[^58k![Ȱ/Sn}vk_7/]ô*Vc Uw6eNū>&S%tLׯVilM[4Jc],Sch.ZK_RdA~U)͚߬ɮJ[|Y|Nv0%t?ZCGp)ZI8|ndщXƢU0J4:/'lBp\ț^ ""{haaU^ %to(euAn wbIyRG#adq0&=n2Z.>_B]ANV_zG:=_)WBW@_guj R[ q\+6pdq0;5(FKS]Ia~kEKd#~2[~jN=>Y'm쬥 .ɤ0M>򪍡4Ԏ)Ebt^`)/ۘNu8dӯ< e[?owǶCD?0*f;p0Mq x*Eo^5TPB+0;{ta0)/{uI&iIc4څVEi/$C6X i/W}:-v4ݩ~hKcq"soڸRN\uf@3b:*s\j"KDԵXωΥT:Z5][tI]f`5o-^_?b|9K&>0],nsU~]kkLjKȵ!-I=J-ݩƸ?30uj}X4zk&kQ^C-t~*S天Mwh00[L:Y/T<yQ #-SB+0;G^cHnѥj.ɬzoVk$lFB\.Ő] dhY*ade~#4~Vdg+~>S+ԷUp>,*tJ`"\ K2 LӯDzv≛'A_-OHyB*fݑ`7&& qP8F;miqKclMc+ݽy9^,<}EБ4sQ7RdA˛~vdY,ö-£㿽&oShm o31ަd0i˰l+γ0h豭3whVU$4~Nݫ_).k\Sw}u\ P&^U[B]+c#e,׍v?r6sy>w{3ЍY?-J]5?C&9#sZ$+=urآp,@rvGno7*@ X8- ƸԻup]馘ڊ]+,yJw8[TvkzX<^u[.zOk]]$''ڛ:XJyRTD&6Z=Ηu#G/]6|bg[eM~>νOy-W59*S9z-{ fĤ~m:VJҋ/_/I\lFLxp9NIFkz7pgn/vqz7i Q(GSu _:^ncVԦ)nf3LBynfu!S壀-f,fnv~zՅ46GCڻBϔBhQjt7B͖ME5jc}NP.*r'梚seDخw6wwC`ȝ9enH,6Wզ=8(נDVR;%߆9j .Z[۸  Uojm]ou#G/]mh/he:MHm%H TkS-R);?vml}k[UP5ȋ4 cj4 `Wz>pǒR\ᗁTpWW\ؤ>8&@-1m NzOJ-ҺE?}[UC_n[$QSԦ7 ]uuyrK§d.J*Q}\XSMՇ\v}uKn#ۉ Ǯbk!:s-y\zTQ*t?CtKF%yl3  (]gT&7z:@eQBЈ>!?¦OE2ݥ弔v uO":'\7r.}9 xqv/M9c VC6Ip pMCfwN )&x׍v?|ydn>˵E|d+gb 8t\-_S}&6]Iԝ4<(%K;iۭ3;i.ufy3)@8-cK)zc'cM0n.fH]Тszi\;u)e`B5.9[]Ts}fEͱh$<`%)} Ylro/ݏwbvX>Fʽ=es?vTmkmd~LrJ2#fu|d5$EA r22#Ԝ\h#\e?{3/;6)[OZɹK`͞Bm= VXz eD l3O vm3w”(m3w1 fn8!n37u#4V`}{f#CMؘ;iƑ[!p&2,rI\؛{_S)i\f]?[zӌ]j_! {ԙu@˥P[^`N6Vv٢h9zz#lk+(O eɕ-jae'W l#;J#VovjšBvY=B]p._/[a,\n=u0sQ\sѿ:rMcj̜[(׹\GqS^Qyxaqb˧񱕋m~{Wvc ͑{{DS(Zu[^`59z8>{GS8 U}cՇ\v1׍voShJM= آW9}Rm b-n\x.5STo]g]?`Fh6EZj>xM UC c5\v =׍v-ԳoZW/<}7,l훾Y̹oZW}{Mߔ׭}w~#Dm:7GSm=]R>N%cj:7GS2Xkn9u#^Nz&k`UYm:6[AuhLTv7\r)[T7)خ sXd =/r7̑`l ~GtGE6nSJzjwSkb,TwsrP_|29zze#nz 8O7)Z4+Qvm9Z|bwWyә Uv)Ίꮲrjw%g9v9e>u#OM3q(C>c=,8k*Xy.ߤvݒ޳}l9{QKذ6oa,a U9ǵ\v[yrze vӄjtw[~ЌM9rRvsvٳT3GϢ>g>gA`gcՇ\v1-yi:w|^{qp9xCy`M.xg}z߮yjޟC{J4tC3 jMvk.$PBQ}*Pt\!"ECẺxˌ6ӥjJlEjAQkhNmnTI.I&^.M\e[z'ʚyq9 `*kV#Y1]Y3׍<5]NmJv3I=ӄ? [=lQzFn~u5'ht ~>եy=a2B5 ~X|K{F6gz~UzT2_;rE_z[reA[裦~zs}"^wiEuU_| o (H7FRBɺHzy_)3Fw+'+I=fc%5lHd^7P]]{yνj_S|Q <ķdcuGAJP ;n-%^ e:Js᷽?3^irIW,҇EՁ :{Uǯз qZÑ03E5>5ӢQ^imzےsnΉ/X%=J xpN Ӕi{CM9--ƾ P:Q[}(9V6>q"2<̋_ zt{^7{]kȼܯ;qXG]睗mfo^<cyQ-i/H#t[goxSE_b9H;]4ěK,aM/HA=l'/M^oO$NN\i9nx߿.EޙY[Nco4Nxo^]{yGuu1̭S??_ώb /O?}Yj2z 0}ǒe ޷O~az[8oc_b$NX_@/fJo= 93~}域bqg9g|x_=O˟e ><;? {[ۋR}ױZؤŜ􉍥,{~9zzY=xX%1f8H_5~}i_FwH,ݸɹ]^lQvy}^Ή] 1~1Gs)?ؤQ?1V}eWsݒ[/a'g>'.O}U>KWc%'C.FnM^bҷΉ cjةݳT|}6(S|IXoPKޢz.;(خlbl /"ejp5nm;vAGhc{MݍC^n@7GXm]cu#G/]gep/HlAb9,❷英b5}KӁ~Գ#}GHW,C㣀g)R> Rv{<5]弎+<S-՟rj,Tݟ弌 ƞñq٢X^`ތnh\_w~c J[cKxbElrJsݖz,c'gysbW}čTwl|\k`MEurSaczԯhu#OMv0(;ש~SG2^cu I,T~bˮ>溑zR%9Ѷ.OX˥P^mh,;K֍v繲KrJwhx|V exɺ%^Nz>L{/m#hw^C^.SەCvw^\7rʊ_g;glı_/ -WhlR78%$6,;㗬9zzMݎ#[-Gg-޼Pȇ-2VvjGn}ˊ+IoDčL-ħ,Tŕ(6_~kŕkخ'=|^#9q)prnFșB|^#9XpXps-Y7rK{sЇ,jwcڳ*W',-v`3'3[)ʎ9XcY*wrsSLO!m%9#ͱ}>]28ۣ1u%*Krhexɺخ6RY]b=3_z\M>2Ac!4IqFr!y,;Y7r|>ۃ6WÈ-a.ִ[;T͕0 \HmnKIy>8#+!g^A(Acabl:9{Ʈ]nSvyG&tuI.dw7+*ka:jeˍUez ;ͳ,6MKvO1G(NmKbMe&T|.Ae<Yb"Q=޲\PQvad'.u#G/]oK{@}WWNzev:i(g)eihI,T_ù#B+ukz ;=% )}5_Obe]vP}[^`~q;:޴ĞM+Ny՞%/mlRڟŮƮ,{Y7rXn }COOEu?rBE=ᵂk젺zJM~/ɉsk|kƶI{Cۂ)F^`R{]~UxeP{]=GX,TumXeuٵu#/Mv{cu%jgjv,a umQDh"B}mYKIocZ+';هtLbF3(1s[t\7rs`m4Gy(BTm$XS5W# n,ˮu#G/a'X/!6OY~s_a]F^`S bg'EnCB `O(/m9z/rUy*pQ* sU(dlFJQv\7r)C 1_e=.1&bɉxJXZ*b4]xs ?(jψr7cOʂ=)+K٢zv̑w(|7C#Pg_7s廹n=9DEЖ˿6"s}+eW\云خs\n(wS NY\7r}KF{[ōjo8ߦngm8'6 ]'h[˯/rYϊ |Vrz}+ŞŞ˵XZ2GW`YۢEݖخ3?Xq"%;e_}5qe;fNzKDde\7o]g6"s.jnV\d &Qd֋ڳ,}lЕ5, g=,T{m])= u#OM3U.ߜGV|!g,T!c6mQv]7rvv4h Y;c|:c` 3.n4{}d|>p:tˌvCu?rIBEݏ-8 j9QK/cli]gsZ1sw&XٖoږVߵ-E`޳Bge۰9 5jwcZ\4ͬw]{!]7rf7n>/ZT˥yfv˟],)+}}/9{ ٙjNC|T54,3/eԝ3sߧMQW[]qxa$k,\+8\X(}Jl܎eǡ=|9ߒob}XE0XS*)|ˮ|F.3 k?{I@%<&svbOcβү9zzO{-},9,BGU{E-u:)8zƒU첏9zzOqf_//A_--h-X4Zwݒ[/a'z9Z3s~'@)XZ6Gk^CzPk=k l㶾 ^"s5x{xOuGcR<+^pSLw}_*tY劃%*j~sr'7'8 yj̦g>y-N~8Y-os*uMyM,ToRؗe羝yj\=z۳$'!ߊc۳Myr Uދ\ =F. ni`fϡspXE,(s>K*ϙ k%r۹DF^Kz}۾V8?#7nsl;{?PT}_"]s׍v?os4FٓeZi\݌]RX_]u#OM3??{eFSn~f^"Ge'{1.lXϽP7rk*->4G9K?r->$iBU|X`]F=?&'O{q᤺ZCۛK1^b#˲3>̺U} v&]Kdk Z1h ,eF^`ޟm]cvyJbh#}E;t ww l{~m䜼ƙs5GN,7<8s5]7r+\ f( &^rUXnsu#G/]9=2=Ǘ  $bQ=\qPuC9qcPb YIr l] ?x/?%kPg}}ɖ)c[W;'[Mv?`ڼ`l;vذ Ď+4sdۍ\7rc͑$^Oj7-$P,Nx>i̵W0>MyMQ{{n?Ǵ>Yr?6[˵7ؤlS!eu#G/]ᮁv~g`1cpr@ aXvPv;?C lKϿ3c[s3GfiMyZssPrrj͜55nknm9zq^{kSS>yҧuV+s8'j7q-? U+s+w O#+h?sRQZ{a|>6~pwKtk [u_:uR-a-3K[g9nMM]V|!kS^!$lzP~E } C=c=u{q{MuK+e<ۭ/ߓiɛ-v\KZZ<Ǿ[-ǚ+Oo#M ebױ1w,/#_=/9=<){Ta^S3/Q_~{`onB/7mP ~<~3s)Y_x_KpCQ+RoϰGb>W4%pbv>r8rrL;Yxal%oGGo9K>|<|~o^_2^mn]pܫCo|pw_>\~=KKo,F/YG>T8(s=*f:1@:F>cs8ʅ2?w^[Cz˼w'OϝnRޓ|#{g^Zw?4qΝvxi_o{+c{}蕾^W8㍖ys2~=^S9:s}t*ֱz/ Q޷yimSn"qyF↓Q_U|!0}2Iˏ?oA_c7qzZ~'m\Oxs_=?|/te?'ۗ}}'7g#e~xyx6O6|ouEHBi,a#KbwpBתt]=-g1GhQ˺޺mA-`Xz⬹qܺL i""Qچ˵XS~<8(k;6D6 4mgܖ3[njyRu QYNaf'=]@Xrp }P1.Hy\0XcV}eWsݖmz{36lNpq;;&d* |-t\G&2<,-YKIiA`ݿ cc I P͎%gMiTvcyiZ >6^QhgxxHn.4l2j7&ϔE)j699k^h6WewTt]X|h=KrB>ҋ,g#mƚgINctu,r~6^c4^.aV<^RN}krXs^]-猵ǢخzZ8Ya[4Ns ՟rt >wgU`cq8OVg lכ2ˈ2͜>f1Pn5M+'<&4B,]Y7rYFxƾ9c35Ƕ6enaM7G,cاnKIه)?99ڏl?d!Gk*䄯nɭތOq`o-->gQ[`ʕ)06)w[R7r~,5^9{z`Y_]B)j?ޥב%֜ëĈ`0"-QuJR]@龾efγIHfFs_ssWK1;(G 3oDWҮJk]Ey E@ m,8^{z9KmINХ UKP@\VcYNO/'ٶW1۴_,W.)]O_8"{tܣ?Vdsڷ\Oo\uO6Gu;7rp[qY0ggg>ϸ_Q]qݺPe>>}2gG.t+7,m⠴!⤥GEN]S̡6䴳9o&vQBo!vrbBdl㉸GqtyTǖn c=fe!>̕gB*}s䇠BŇ!ono{KlŷA6kl|CC]ЅxrZ|]bߤ]bmy bM&bɬqqg]E=%cõ^QZW~4r48t+_ީ̎s淘#1ߏ8#r{V﷖_m,8D6em,9.Tߝ^Glx_opsT۩=zPrmzItvVzIs^+tbʖ!N(B=Lz :6A?논-]~fU\\V/?P݊r >?p㉪ Ӯj)tԼEڢhpY.?mmK@[OiB"S@秋_Qg/ r3.TOBO"/V^EtQ_zoGԦE!Z;ԛѽбTܸ;[ܦ ;k}Vsz23Tkj’sC:iuJڢ@t|k_o"msnWjn|rͧ 1 +3"wsp2V9c!s2V2\nxx.c!i-?{VC4DP;\mȺI96`igly#T.2qݞi\_kW"ߪ`*}s4v[wu-lW&[qލ{##ѭ?YT-׸n]-N݋FrҾ}#u+2G.K.Z包5kŌ5Oq~2r0|@?a^CDMxyC5֒q|#tpĺ8팵8oCcy~,1<ryp/;zތ[ 7*m,9GFsDVr> m ]йF*odpY⾱e Wۋza {})Ϲ.TY N_Bw}־y ͧn־o @F;lhC]1-r]V*<9lc?Gɶ[qYjr%l ؚ-\vʺAy}Zw6:oZa}ձ\2GWjmq\r91aʵ/s~Qѧ7ܸ;~u<_ʷY`^jfjl'%b?{Y|  V.Bn10Ɯcփ-WY3QuDXKUc<i[ڮن=Қ5DKmX*4V.TOebӌtTUlin=ƢCX/g?oGS-c9.X\L9Эo9-VX@9F9:- uL3ststP[,TE_)+%c0IhJ 1 92c0Uig y#+6EyY}Kp.y/,"CϬ .Yޗ{=Ϻv\9gϺ-YE0d]3y~k%ln?>׳P|?]~gsC~֑vtz83'U{#_+o˅˺עh^ [{v:9z11out.{-BHOc ~4kH9LK BUriWߣmR$Oq_ܸ;mt@TWxW*ת\ܺP=j)-uuUmB~׵cs}kkT׎ODr!\;6G뿹?t(Wv[\V/~h/{3ͬ#g]7tI]f~輑Ү[q6CsԗjSc35%^Wma]Sœ*:/}YV>k9Ѕ:ǝiu>9N#FH !%%KDoBXo'tE)r(i*ސ݊>9V}!{RC*9/avGϡkUqOhuDu0^T)ȱ&5 {B vӦr}>仯|]/ԷkLNcҶ;\ڶ#훴T:s鼑 ݊0mUpq޲EƖ-wY*lUL([y#oe}'K>E}CN|l.+'C}áХ>I;yuܿ!^;91K/1ҿy"'nPѿпK%ҿrp[qOsx#6Gl׶~U~EGj[tuu%˶f?LΞqCY3]ǸQ˪_/YXzn-_sR%KZո-vI~rp[qa˘Spze.cN.[Uօ9ERyĜM .V<:ez{.pOqg:TXyu6н4i_K4F.t+^~_+h6Gu܏dnX꛹WZ*'i&on=bS̑]Fa3aŦ`,.TGG Ǵ)ȱV>Z/l~̞ꆼ ]sTRG]ԯ7r{8\cN(n=8Ĕ'Ĝh];v 1's7bJN;cNG5+gӗwc (GMSY?#{>_GEWVܯ߹t^}v_SS'k/r!>e6i2tg&9usٝM~hȯíZ.TlZ2~Ll(VԵ18qkcWcB]W[q9]R/.kc佖[B/s9ڇVΆ=<{כVk*$紧nl^cG0oGHO ᮩx83|K`Nu7u%z\|n)ƔM{(scH[qߜ7߬^lQpN0\}L2.THؑc1yKHМ_7g Sܢֻ.T.=v{ u[qY\)<[?| Wq xM"nѿKs>7G:p>Z^}Ͽzbnd~ iڥޮ~euŭwk.~u6Y.in׾bZ{\ܒ#_~U/xO70w[r»?OqS{qvi~?o[}/2:GnisigΏmN~^RD~ 7Xv1<~|髽ɧVF36w1ǩ=~σ >%JWK&#=03{zݎW+~Eyxҏe ܗ7Y#KcFnq3`6ٳKe{a\?|\[#s3DϨEgO!Ѓ,1-wH-SҀwXQI57%×mi_l _$z޺U3*C#*~i0VAx4*b8j8X|TTs_]`SwwbphZ (S rG5{u< z[=1\w׶u=Eŏo7"y7sAs0T\O$ 2Y4OZ [sJDdь>^:՘,:OB^jv28 04C;n/S.NR"'2e =4࿔؈SM< z{Nh0Oږ+[ODv]O5=uS iRA`}'u~@ W?@,c=/0 R-𕧥WܶƮ{E^s8-fXڛDlq- ]ՆޥϑI3hD*4c8PPT(!LT)D@z*1Nt)u0#ţu_JO-ngb|6kxc8 ֡5*XR8/]6}HDODYc U.y"]ʚX]_Y쑫:A)˷eRFkR:zJqeTh+X_c흎&^V^,W{slҏZw-G=-H\pp"%_LO^ےK9߅nR~]߭"P9_z"oA;8'n5 ynPn8.]Ү߭-.V/X;M{cѺ?U𻠊;.*[ioq/F.t+6Z9v:nZ/ֿ uz@:"RmpYԋ9*[ңɯ x,VBeig8oBikijlt|syt쵚:X]Sӯ2t2 MMq=ZR)iб`R`BY7(W  ] K7rp;n1N=rbnڭpj&<~庥к͊{ M{N;osiiitZ8n՜[D6rZsغzi+69C_qᜅ*%9LB;ANB7)8yt] y[.\֭oenC,8gy(serGjc̙`֝uN{c7rp[q8cp_8[ fc[~ U18Ky/-.yЭ_~~9LC,L׈ ߪkL׶HZw=2|<[quxw:]JbN\Vܣ--nh {wdʲrJB岛9\՜v.9oB-KΑ(4Dz\nݠqc#zA.t+[~6E¸RRcYe1 9r!9m)Z&pڹ༑iMy~o1Gx\roq=H:sǺ[7rp[q[>>s֔elj!Ѕh M/JWcαy[.t+qCouťqmb9[(ЅRu穀:!rJw=3~OG8)*퍾\#}9v]QBFڥ= E~}Ҽ:O\ Bɰx>N{7@zop6e'q*gk_s~ tMMilxضǑ';otnpla(c0Q *r1Gcu58outxiw͑JfwyZxu5G>u:w7rp[q۶lUnsh7n*v,jTi[9XK9Э{~hZ{`wcwх~hu+kZ.t+Ml+9.obˍ_Ćmk_hui/\V:ZmC|1iƬ`LCx.Tm!. ؆F.t+qc9c.blD;tE.ږnc1eW([U j7Y#p9 /n}dVO4~l:דui:_9xt9-_OyBY99ymLs&g6XCP9JΔ39S9otnp|KhK|%~F]˵׺P>U|igyKHO s?*oQkeЅJ|@tI\>V|.s7QTI3UօJM֕Orn=Q_"=~˅պP~r9ig?ti=~K9!sR~>n5hօJ)pLK̉i=~.'OkmY>+o_ GR^'*Iw?}ܷm?\\Ofߓ>WLߦτSv+5إN<ʏ|Yo>/"wOc/|2~ z%._}>ȅu_)"}@4"}zz4|K'>E ڇ/{t2ezoyn_T~brס{z޷|~=y{wݶӖ>e>kw?o?__<Ov8"V?#TDsŶe`/r|J6燿)f|qnMY E~>mO/v_E Hpk~~ỹܳwFǾ>~x܏{ƃ~||>e0z4Qw{XnyKُr>./EYxk=^_ЏYj}Z^5}Y|﹭{:@]V?QÿZ2_͢wqڢĹ_gKۯs+":7C47_Fw\S_ޟ_Go j-%Ͼ}Ʃe?Nm6EE=0}ٶ>' /$@&3>?e[B_~,5ǣS+o~{րS蚚}nN-iwy#t싄׶߲m=鵆|DoAVtM(ⵘ9(Պri֜8[[n [fa|S:t.%pzɠi%&FHnͷ\˦`>r۟jcTK=AΙGNm0Ҟ8F.t+6}C;"cS;M9ڼnC5{gp{(ּhcwyFC.]/kVVWN__K 6ݷnVE ״|oB_Y9}HS5y#X/%ʆ6D6uSg6'IUrƜ7rpIw=̉vr޲ M66ouJC.mK#o3qvC,+͕pىrG꛻C--ݩZ/RqK/qrB"х* tYI;\16%[j߇CUzʯ}\X U>/m.} ߲݊Ƹ^] z|skP`1tNY8wILRڢ-s>3bNXn[#|KpNÜc$v,v y =7-Skk}FNmͱR~K!﷨.TO[sjvG$EB,z!\sSZ9sxQo[~iUBWҶ4/)oi׭Ǿdkhn}rmBk;;#Nվoy ܣ\9E)|bu-l]cYWvisn=6v"mH_mc-h]Ƃ !.mҮ[qԋ9Q- X?X ]zquzm\/i˩הO= s" 휿8oɍKzC٪]j^N,W.T8-;iz!oB[~ܳc4l?v!_|S*4 ]-.y[Hn}'y%Ny|:k9~0Pe^ !>6F|2GG%.~߂=yns~&۶dmk8m[;.%s3'8/y#b؏V[C|(Nox.i8k6Vb(깝n/ڐu2@W1V1X<YHo8G~ߏזN?EվnR4Cq8F.0G Y!,_(c%.T ]I(f-|GιicɳyΎr%;eݺSÚ8rAM7mlohc:5XЭ߱\ys2o3'/}9[*9Uv7rp[qZuUm2{Xɴ1jC:Mq%b9ž'ݫЂe4Q̗:5Ţ\+JS'DcJ3Jf_"9#GWaƢl"s=ܩ9C_Ԇ[ uY ͥvkF.t+pE#t:Lv8ࠄoy&nPK .^ݩFݩ_@F.t+jmYX-\ZH^@ul2- ]~ gjJ;"oB~_ !玅sjsU ux%A1w Nn""oB▭j:ͻ6npvmSoԱM|k! یsi,vGګo3 ݊sY+N_/L_)kZE*֊ gSGڱVy#]p\jK۞Kس+uumDU[jluE)jKOԢtO=O+tޖ݊oDpz<{T[3n$`-k*bq(Ҏq\pősMhS5j?U뼜f+ҷWYT\~uS9o9I݆3GJ58_ڀ |>uzujН۩H{7rp[q[4[;Tʣ_4lU6rl.P=&Zi.;5dBv'zv&>LrUkKӹmM}ߣKs]C7_nN6ۻM}my7rp[q.WScs]f<T$Je} y.tz4պZvk<60*wY/C㣠uUN;y#enu5GU[omCe=ϭ閽sXBuE^9͡N;:oi׭z~ATz0:z0Uxkg]շ!I{-w6;.t+qܯ}?8ju\c7rutr3ZDMڥ7rp+nˡ6c9xGX3^AceRB>uMXi,uev;,|?qce_a=ym.G 9#i⼑ ݊oa]/p0?g~_[uE9-)Wn9XUr8-XԹv)cU~<ٱ"VG&j3V弑 ݊fϹ9̧{k16c7r]q.]ϵv)ot:npgոTwN4v(7%bBmuMͻ̊ʢ;+*Kڢͳܸ"m'ν΋f+u7kG/vy/m]ݒ#q$ݜwD$AJ2q3"s4bރ/VEjˏ.T΋@s^óЭǹw_j̏K܍3rʸ[r9u5b;팻9o䁴MN.nԱ ݶp?/܇nP×oeO]\V{+[kez970|K'k_5nP-pO+io!oBYs.~#s:y|R%P\"8j`5Y|6ׁK7GݷF߾@Q9Gʾouշv}\V|5G;lZ"W:=av.[Ҏ=w̜;.t+[~~ںm!"5~"rօ*%~B%~Bi׭_YǓV(pN >^YcD.к I5n/k,Jw}k9}r#ى9=R *p"rusz\Vc-WUW÷Q=A6A[a]au-ΛoRqk_u ֟U֯,ږu ;ZDZ$b;"WDͷm=r^d<.T΋3oaՏs^cE|E7@š*|X+X>T!nDzwnͷLюis)WmW{~X~Yub?kp.,#y#S ~m?1(>;UXpІH1FH w{r- _r2g^MwiĽ򥅨B*%չC7rp[qRߓ;OvxߣcYc72trFtEH;c9Э^c^7cZC8RXgZ`؇jk*`̑h]yN ov5^\7N Wr]} 9 ]\7Gk֥גv;oB~:[|%oN7}w~%wWIMcۺ]|wF.|{9~~B7\1%Be?4.K?$oBcNk!> P:.$Ɯ,WLɺAMe-wUu\Vӭ#r?J]ep:ٔ״Y ڤTZ~cP#Smpn=uOxgݩ C?eκ.'.א]m9Hѭ_e\0GS^q[{Kr\0Gݺ‘v ;V<74mJ~|hm,Ͱ.T؅s:8<㼑Ү[qᚥc7Ŧ(1'l q?#nRأml9a<崋M!oB~ja5g/]p668s6Jl&x]jwxsEܯؔEXel8ER66oB~=˺P0G *v3ἑ ݊{egQJi:S_+t늴]X\V=U.^>ߎ֭ryO3|ƃ\Σ4[Q7G껶ux .<@nu "x??4Ge4 }4Jzq>hG~~+A| %(RN֣Ƀ~K;۱}Q㥆HyEO[onןi]܇׽ԻhEbϲӃ|߲f?2_j*?_T$͟iqpgr&Pj_~MyTs=ZE?E i܍YӣRL1M~2}mJQyx~x^nω2ۂ-TRdᓾ7%ߟsoV=w<|ؿ/ؖ~t~ryЇGN?.'S[|}SJn.wځB>8yt9? {.87WX:eqļU> sI0oqrE{3>m{/*+v0?ov$j_xO_W^qyUc<+V$ X2g.dn{?<_>wp֖s+lH.v\¿rn s?~?khg9ɟ}?__~o~8}˷oo#Q?A4$叟Տ F %jlӢjCNB9;׾(1z= g9s@.硕M_`~B~˺PS<}jIJ #mQ\Vc7α-YSvJIMhǦ3tOmHOy#tc)ߒĪ6]Emr5C+N;y#WC⾱ &/}]^~@Z7xQWT!օ:- u+O.>9CUQek`Bcτ7]|.> y[.t+bhƺ^߲\ӿiy Ӯ#l{569.F.t+q<`e,X]-py˷7rp[qR0s*:Vn~wNu]JFgS?-|K?Qhnx缲oʭ [0*9˼s^%OMw=mm켵|-ځ,}7v}rع=uHC7wc|q_:ںU1&|=A6o]y#?[q~r?\>pVRMI289tHcmy 7縟=יq9;ruոsw>C~8`Qz&J;(1XډjCօ,k/f }pY.Da?glJ<.T]!2ؕ oG~fO÷\9M'~jݠ-S;iOd7F.t+%}ZlP[NFTO+gDoiWDվoy .70G %a=HJ@YKR13QגztV+e-Iy[.\֭~#gb9edn с#;2&2G&oB~õ$c͐Xk%ǚ#ruJ/88kOy[HO 7_ު\l@98UTrЅ|rLSU%No y ︾Ϝ_d?R0B\ ݠb9OH_9b~xsnbyK9[*c}(^g]v7rp[qZuUcp"gj VrE1 'b)c}q=͸"~z}We㾭J*w+ʼR S6u^>mpHoe]/K^Jܒz!nIM*qK8U\igy#t/?[cp& =~es(n )몽9lg8ǩǯ^y:!+օ*-Kߥw+o˅˺+2L1 Ϊ^fYz?Ѕ:u%pdE;vm#oB~iydcg!ԐGRC*F?Fi׭ms}ܶ0;}l{pC=Ԇ?^A*s.ZT@ws)7rp[q}XW귨/巶~'t]vFK,߂M1$8WaK4ƐȱB>Y~w24&oBmNv.6XruvCuz5YsНxy#_rbp^BY3t}n?Xj+3;վ#o䁴V|˲]r~YֲzT_i+{tMMqU9'MA9N[T5y[.vѢuq>`Pʯ߽g峮 4mtY&KD…{xt̷L<|e!4gB*[sCW)-my xsO8VZbZ,ْ2!g,D7(_{mNo{e75n=Dm}[v}Ues 55/m.}RFv?W;b?5WioY0ȗ~Ӛu[Ӓ:Ta6vAȗ\Oe͑z{fC*PsKZW~N?yKn\p>LڟW߶}Q }?9K&@zop[ƈt‚a|S?\Pe|"]. y[.t+^K~vNSن{e;fluO|nsn=G:k4ީsS<[rutEvco"VLI!tܮC2>&np*$G[Z_xm]S9]֤]އ-pe"qce$EDYh y C7(_ĺt{9qޫR;.t+qƘuNӆ6r۩Q;ېҮmLyV_a Fu^r j(V2o$2$ouv4os_𸮋h^J>s꯯ۇ*>Lpm]N;}=yj i=Oxw* cl.c%c7r9^q i]JO ~rJUЦݡaJ{nY.nRq}-)몽9ɛhˉ{֡9]:EuaseΡ u.CcvK側Vܯnj\} _~/Vjg8yT!\i=̽ϧ~ʹ[%6j_=?*so55k4{͡{T{\p7ZQUu)bQƪ>J[|u2Ve&DU,igy#ei=w8Y oY[/k?~d]-prN] ݊ cU~9syXuJ] C\b V.Bޖ ݊ rV[X/kjݠ9}U|cGnmC S# kYEO8v8e|i y#cubQnt:|ϺTbƼ˰p[WtN;7x/Tcp.e_!5fx劥dS%fuv/e_eAu+1f\03pܑjOh.kU'P̘!12w$fl9H#1od >#o8^-gz־RƉ=ZjQٺƲ^ƐЅz1E}}֏ ݊{\_-v"8S;Z?.TڱLSN9cRm{\1c8\ҏT~eֶ U<8yuLXiט\V︎č,:D~%n`]-a׽CgHQ]Fk o.}y+xׂ-K654Xi;z,TuT!)zQX/*o֋vڼ=*p.޲HĿ9"v_yT?*_vGу{ʽ>hui^\p̃Z}9;'%duElb9.T i.v˸@ޖҮ[qV[j' x-ՃSJ[f+[Ӗ:o䁴 R^9- )wV?hrX.TPsǤ]Ey[;F4ߜ NӨc3z!_օsg]Cl\V~ hkX.ׂX/W|/"]S N׆nF덼%7._ejrs(bʞUl {V͙|=N;:oB~e~}vsdډCJ)BM]@AŦe݊:.]Keej\Z7`v9bOr}>pS }I~E N"9ЭC}Ց̉Q'%~xud+5.T!\c-3"o%^ x)x);Beb%/%oB\jU=noFnϦrV#nthVqkC7)jֆ. m W4ﴇUa>T΢eRnLq?4}Pr#Ӯ{X側V/Cb+uD|![vMuh#u輑f/MlPąJ7\1%z1Gek]zqnoٺ=yHp\QG3xjCڵz{r6C<NKngD1 ݊{\+ˋ|?}5X}B9{Lj:CN}k*}B"{7rpIw=ڔb͑_c>b,Ͱ.T4.}$oi=ò79m.e>^ʮlS&}hui>_|/RǘSٻk:椽9]ǜܴܻk.C<+:oB~{T,>Tnڴ>WpfP]"*oE<h?to8YhP߫v_#V:Uٶf}voFxv׭~XN#WʷЗ5bXX΍+}]Xpϊ)-u/t]Xpj-oaml9n$ط=oOsJ55;DO 3ճ zEi׹HRqgc`}ꅱ9?j,#cԔ+wz1Hnu:d9 P˖gϗ pIk*o)w8^ttjO*Oh>a  }o(iFx -MW~s\[ǃR]Ky_|P?P[_TrOK 9"S>|P|_ʿzt=s޹Xtm:mNZ5#ѵ$RsQM67ÚיRÚ$5l;/?J+GgUiXa[j<РW]b0znqw:.hiQF]3x R-Djx2b<`|_ݧ=$ՄOH o4 Jp\r)CD zT򴴣^: J@_mZ7z&-`h_RTQku(:l\oeS)}UC&E1ajQyXOfZ4z6<9NcРW?+Cx%(}mL, @dP)%,}D*4qUIsj0,s߈u`}qT<6ǂG1]^?J~Ο{aI sjD&k* O)x'/>R8z;y~wi\Nez}j`s%lvz"zeϡwY^r< z0-. ^wiVZ\6Y-YH-<|Te#O 7qy8tzupNZ~s4`N 豳'ɴtcS\PK"9q&n2}рnuWcr:B~%tM`mN܃u5;7rpIw D'j܀z 6Y_mٜT6Lu݄zҵ- \Xl7 L(WkfQuWkCi|E7([c8XTt]1y[.\֭keJ0YQкPY)əRJTr4`N nZ6 ][ΒC.4lCEB3GVȺPN;-F.t+n71)be{jS(~P/S[ ]ʝKƅGB^cLJwNkk#ߟy>]#FHOwR)PK7B.~P)k[$y~#tJg:K+R)Ҁ97Gohcdtţ,/'rQtMkFPjtu9:o{xFr/QݑZ^S#= *^huuun3"J=8Bo)v9 *"pKK ݊UZaf=g/urV *p@8kBe g!'EǩWWU/Nx)\yw5x/rytG/xt Γv ޓ7^0ƒNc~ ͉Kb\!BY# V.=y#W8/oy*-sQY#UކЅ*F8eVHeHޒKUgg/ MZޚIz[fZ/ m!efDz[rFAw{g#Kr򻲶2l \h!hq1+1`ˀ dtfuבF9=$2d|#U;+&|ӃO'!x?1+~v I_m5Ej`b rj`%/f>H-LS7t䂷}-E$tCEi= AEzlJTenoR_+ sa#6B 2>bI^T3,둨HUuCIy:~5~iW os]d~}\Wxw31EG.~IE:{{$@ԣ$ Xtr 4{`, ^lj,:r[~q[Na,| gr^юoہZNai^( 5uCG.x3uM_:\We7 Vt&VrM_:/\vSБy;l}~cϼٻ4RnŦa h׆x)Hr7O1t,0~,[EZeŒ  ~AeEБ * /Da$KYF #'h iKezHjU'Ɣ⺞v(ʐ%(P%񺝩C }Uo-0.-hp[cےng*c x]Vߢ#Un6Men&}ι.|>g Tv0Mennё+OZz3gI,ͩZtlewNJz|=}kH o[hɂ{ j ?R}l  0?} ꆎ\V-kVyx\_\8I-#^'q@/'T7Z1)_nG_ݗPG0SӒeW}EGRxq}VݴBp)`j(NL>Ze׭w^.x׃]a|\hc?mSǔ6@I[/P)e1Ce瘢[~}b9ͷ;ju>풢VʜKױ09P {?zݢ#)Ul>[= Oc~Q+C݁1ߥUH o.0myMꓺLtO-ϋ-5yL9ߨnۥSsS~mFEw/Pɟ!/1.3ꆎ\Vzƺ`W=X5nK,K%֥nE[~&OBvHƝ`"vflC=6lPC0aKkwR7t䊘5sNeWb9>l"/T6~7}Dz/a|x}c΍_:r[sN%!' /TrDx2!' r[.6 ~ #էi4;Tv0Bŧnё*wVRY麾:/ `X#^-^kPcϯ8$0W(`CjCذ ͬ4 Ϋ8ˮq-˕1LX6K hs6C'e}WPn7<7C,#vrcJ&fKLŸ ʘ*1r3쌩T7taɟ 90چmWg-t^A?KLˁc*;gzH:LwrZ?~vLm3ts-.׿k7\'0DOEno퐹<n!x{x>'}4!>c}8c`,O/9D.9F;x^?3ih<59=_"^\=dΫe^vu\VeLv&liI?֓F!-kQ[$5!QvCCRl8V}ƸvkŶX\&g (iIۡb[ rRsӎ%4]h[ѽ*ia<8knVnIcAʭy粺f &\?`:>NJX`LE(YR7uy汾7x+sx-*>U;qK뢝8r[n#Һoe+^ 6CzEoχܨ?Qq7?Q>7?|d<3 ?i?byA~;tޮzx}Poֿ|==GCP??F?ܷ`_c8Y#gpϷqܳOԧ+tO߼S_\{(Qyu~É~DZt{Z|]yDһGRn<,CWI~L'-v{ئ|N}Cr\]1=]Nj̱?ⰌckNH-mCǶZx<>ɷz\C+Ӊc}|zs(GO99Ϻg:}ǿy1_}qR갖#Ɯ~N<:Ury8^y&o?<γW&Nd&t"qŮc~ZοӾ~>{~cnwi߉kaIyVf8CM´JُrcuQ{}-8AN>G_ŪÙDf}Jm;igZ 9.Cc,@DGɇ?2ͻq;blq:w&h[*lVOmϢ?;G~w~vCO/􋷿? Foフo/c?Ee54 A0~C֥,[:_yw~y_/џ*Z/(\~I/~i϶wf JCgV/}owV)s[3V*yk׺L=k^֥2Om0zYt귈hJv`e/Y+Q7t䂷K[^oiL~b\>귈h[C-^uV =$5*ݷ߯=fZU}Na<БހoF>u #ꆎ\Vţ+E  k|`̑ Bc\V:|Nfuf7ûA\c ^Y}ֻKoCdSmxYka-'xmoQmMБ *e,z4=K!Y1 z"SDŽP~VE:A~vL/cڹ\#wcO2SA[DwYŻh9Fel귈\VVb" s˘?vԂƠOH s]vrN_ K`۴]}Vtow +^m#U;{v2J]LgcF06c qYbŠn~w:" ȊoAOCo ̐:&Y-^7tX BEPOES,~ tCcU %竽^"=pCuˮ:v S_=$;yߏy{{ݽP3+ʮ6)x^@mPEINaJ,& Z%'2e,&SXKeg,5t˓y}U\]V%fLO:DEǨzH:Nwr`Ҽ ~Cۺ>kBǶ" m /N٥_:r[~'07/Ģ,^/`m_T7i' WbC[qyd.3Etl^A-¸0CU{YsϟF}^>lzHjU_)'fhtO-i>A? ^A8E/xoˮw_V_O[k{k\l`ElY-}tl`L]U|QAkꆎ\V?MPzYkDm\vɦAU1P(?"tHt ی,Qm͡ݢwʮ} 15}5e/ꆎ\VahKX0ՠKD`pK S;pi_DWie?uCG.x>V/:݅nwfTtwm炢UwEБ *7Zq`lWmvVݣcZqGeZq =$5*Akb6tIn}]Ћ;X.Pe+Tݢ#)Unݜs lڐrYjW{hG@Ƌ{h*;:r[t5Rul\!O PYEfXcAIJ80e$'̜Zr̹A8x"g荒G\sQ7t䂷}cs ~O =(}.ao KK:rwcz[w~=|\\>z Tۘ@VvۙjE({ҝQ7t䂷 Ǧ*ˢmˌsk\6 ":r[ë-uʮ-F-^7Nտr͕φއm)+[q̠n\o@Ck1x-ek4ꆎ\V~~sm&h;j.^ +^xkU~=$5*wo_ݱ/دn H"xUvꆎ\V{/{]eU^^VguBǶuuM^V.{][xܽἛ_٤IMS7oRE/ z:HJBFBlGBW>Kc{(e|{VSOK`|"A'5eZ@/IP>藨I2XU%]%\bi,rUi3W#*}7Xl)^b-1wCg^ul},yݢ[~>:@w_ $ImB %]ٟ#+kmFV65w#UnMpgwϠG+U烈AUdnOK\m""CqQiЉ(0/eG\uCG.xw~^Y _Xѐ?Us3{$}tFCuCIN7*oľ/: oZεz h*w/[g[ʷж{7 }0/Rvꆎ\V9`h4ՠ>OXѠX"1᥉)-zHjU._˯mSP}ϊ[ Jێ ۧnnܸtJWsm`l_gex~Va|x}:ruag}}˯ _bgrlCoΒ{}nΐyv $]PIr?f2 ㊵fa}{ftnƁnb.a ^WCs=$;Ş Vh|~ۗ,!mOn֯f3Exn].V`39sX_/P]a\5좻 ]:o'7߲چк21mm޴q3[=,ހRQν:r[[՚X~~c/ ^ָ`5xW]e;TuLxO)(({ cIAkH" { wf(;FБ *c ]48TPt3 @VvC 2XPAK.ǔ&/||+(Q|.kBOH:wr-̑ˢ'_?PE[@ uKޛ3eչ]t䂷ʭ1,',L|2>.ux:7 x/{Qe#Un e<1(׃ODe=Xfr?1{xAu35^X-x2^HLxAuCIN'͌`}o5mo޶fAIxIԤߜ‹_LonCRrr'ab-`g+d!. tx $^3v#vrV__8G7,G9>AM.CT{_xӠu6?h[?+3,냼};zHjU^<ϒ[| zWP~Kb9>n\0;OʹD : <(-;Ty.QuCG.0s特s㚳2w9 :)w."YDeg\uCG.xSܿ+-(!XRt; fBUvڷoXUr/J|( ?>'?>iƇY abh3>TCaJ|(;=$Plbo+(Ca<*;Ct弝ߠ#_3UMk0\us Fu5ضRˁ溸0 Q_Kʩ\ċRv=x;'o[L{gu\e﮺#UuCaKT39O-J;mIng*;PuCG.x}nc5EcSK =Xo@6 nE],9 r9'O^չ]-d$6h~Xyŭ5!1/0!ꆎ\VJkY_ e Ek.N^x4c*ūKBeX#UG? 9W/:1td˪>A<%}WGρRꁊ> :/FE[t$}s1%1Tbng\2QyNsLjF-bCoi6a5g/Ylf6tv::WP6ۄo3ÓN^}\?m(ь-['?!^]mrT[qx,-a+%ÖDw;/Pqdu(;8 =$;'sʚ0n655IϜN+(܄qW^(Qȅ^ר 㶄K\wZtw vuMWiPm-°saLIPEc ΘTƔ _s@/Ca㊟_}.֪=֙ /GrK~/C*~NV_p}UrWO?Zk&tt^ANxcu43UUDG."*7\wmy{T;ۿ/]v z9{Vxz/O] nJZ$-/a{H*.}V_BI-)'mnoj +'<,qe<{l 'QM~RMxl'C98 M#;v{fGK/1<'c&E_x$xs]Ҽ仟#٣4J:A]G'V^P8}u?W>a<*J?Uu?kaZ=Xnoo@3/^RكDБ *wc[sjoѸ }퐐EG.oQБ *ݘ<nLԤWj4~茹MNP0㞼?zOc\V~'wp}DŽa,cEnX#0}q cS]1vrNqg~ȭiOf9TEtow2j]pavqlh4t$B_Fy0 t!&08|/0^7vrWe ʇ끪:$^˾[Up}]{EUџ%ɟ%hʼ/:+h X܂} QCe%* 0%S#<֒(XL뱖XLuCkem\6Ay7ݿB}oe/]XZM*{KuCG.x/-4WbCŇ"sE>6@ŇxQ(0-:[~o \Z1K _t0x6iy.v[^q3 rR~ ~`,fwSg~Ew/P3\ONOIo' ü^Ni/@0UPP t3YUmP[~1VKLӓtc~d8Sۜ"ބc¸uHenK.}˚C񼓻/xj]/ZamŻtk/:r[~Au䒷sK_2o~NO yKa<(^K[noߊ>f*}crG.o , ^Ga\SU.xO_W[ޱۭ (|7ur% S'Ljdww m`f^]mn5 Kl]^lx.#wn^ f(;ǨzH:wrw/._{52_4qRG HW6o{H~KbFzo {4N_$x]VߢW=hrm~[2~S)sWP!YżQv!Q7tZżڗ?x;#K}w& 9 @^ + vgUɢnoױ܇oM~}҃܇(=uH@`=yǪ1͔K7_9[̙77ۜPEX@c\U$g[wl|-:r :r:.:k|.:$^A s=x7-3-%*w?&gbnoȹx`ÜxJegEIN_vKM{|cs (3U[}^Qv(SБ *wo/~]geۮ]Ew{/P{b۔]lݸvʫc}Ig*6H?Tt x}I񺟩UБ *~_3fg_ߠm/P/ue'eEGA;]q`uh2ѶAvހ.a, ^Ǣno{<} TO_X1baδY=u`vygVLl ;H꼝E5g֘0jŠj2Nr%{뼄ӑ NW_\R4Bh,qX:Ht֑:ً%uL":[^nF엂sLv2'Xo@K`m=ʎ~#Uם\)w{nnιRs7t-xrL0?s+AI|kgm{8A ހƩn:] ꆾvcڍA>~ۭе~{G~AC:v{qe&fwG]EINsq[v&_,Pt8x3;֜^C =$;{?ֽy7eW~xV=wiQArF%W| (Uɿq|*a<$^rQ]rU UU_/sYx(cw(za||MGK *ӏV?J؃V?$ /PQ?Eݢ[X*̬o Bkde,5xX{Qv)=T^Eo[,\6~Ykvȃ(%1mך}V٥_[xzxUtckH>!9;& נ; *6kuIr?1:Cˣ\3^j 0׈>>rw̖_Xi^ 0X]ZP.x#/{z:N::8ΔqbNo5¸/uW eq#)U'zIi?8=q?t?#&ހ' 㱎x=R'no{T)Zƌa`9 S0.˘Zsyݢ\vre/#Pۙ5+s J;L=^1 eIm/Cl`쬫Q?+5ʟ}]9YsQv#U^2ת=+=\::f\nި:r9o'{L^`'ǗS뼐6323ya47qvs^PБ *3O>L_}Xa ''a ?D >b4K.~>Vx|ROJVWtg Ra<)^χ.$dwEG.xܯIMMuHkN\ΛlVfYt弝ܯ=guݺmA*ʸ$ۙxq c']]ꆾuc֍uWvըY>6߿}ȾKT!9yu[{uĘ}vn.mŶnr9Dޠ~!Ϣ-^CXBgCqIr1UĴ%݉{J1xRm+^ow#U19w 㱣θo;uF/PƝx(^+UvƝ:r[c6w[5}TЉcb־Vc*n]m~Qeeob^]rX%U H|}*;no=]a||ߛ+#輂rnߊwܻGM9SJ }\rCwJ@xwU7t䂷aa\lY-ؒA/P~0.x]Vߢ/z'mݏ[qy4>kn|[)-@[ s7淨n弝1S\G&Z 7#^}`aʮ^wБ*w5j03~4eS&޹[G~a ^A{u{b[u^у?aǀ*;G syܒO^[ 'S8{ ){cξ}R^*mx$Ҧ؇gߓ|szE->{1>FK?\9?/2+~2V/> }o<=;IOVzw\{xN8'%ΐy^Z?؏{7kCj6=ns[d[qSJYZcۊ=+ѱWrD+dtŽ]d_gapk~d[k37q}y |Z'gc}uF'#*9sfJ/r% 7'ױ.S'nqf{mO G~w~6V0C'}$///o~_zQz !t|Gxe/cvox_~-tIx/O~~ιe婻 mZ1v 6;ꁾw/1׆B*׸#HuCG.xO]9]GM*9]c!l~dnaFGGcl r?&x ;\n{{v9T;6xalVr *t䂷ڻ]1@Nkp\ɠ 4䫒\]sM&8Ho[wK &vl~0tt^%KxI޹Ĉ tzH:^v(mvi[ѽ v(XC &x7\Ra|<5Vɫ:}Ѣ]c0>Jcꆎ\Vm#fTyf+9ߏ-H`!;{IoDБ *:~;^'!x^3^Aen!x{ns 2|Nuע|,^];sqZpeTkё *06|wуK ;ډioaKlX-oo,ݛ<Ӿ>.ޠCuL\Ÿ0fR]x6ɢ#Rf(KΕec̅j+ն{(Ja|>51WN\_e s13P~t|xf]KΕ펣-vc#U~>vfwvc3N4t_[ %})ۡ/\rcD1Ǵli9%}X; oUܥxǖ/̨noeoʼ})CܞRQ跊)xż(;:r9o'wwt}-[㍠FoږBmo}%]:o'w?&P\ipAy;ʼަeN + ~`l^*noN.Nvѱk;3:fPcѪz^vձfXw󙜲 :&zH:,wrڼd5U@VV l rsƯ{ٺKk_ |#q^AVv^KEsb =$m}\fL"Ş1~Y.Z tbkxfSseOKuCG.x\|Va;}OdY}X >+YU7w.ݹٵ|Nc˯η^:^*]=w+^AVv6̰%j36vo]otFV[ț;]9u" ]_vt:^ڑڹ5ЗnbJ^/k ]:r[~~10lo/c}|ϩ///\G|axVȵ̾fy{y:^fr/^˥Dّk#U׋# +57ӡB"Nlo@0'uR٩c[tKUx}?k[e:qZWW`l ^ֶ(}Q\W[Kk j_wP庄vQxr]" ih]"}S"N^p}} W#>W\/P} W9e\ɵC[ӱVy|-Ϲ~J1oza%@9_'x}>V9_n!VwDZ%#{/˺P=DwB@Vv=ڭJcPك+#U~v݀%tء:֋cx:ַS]6u,zAG.xOtǮo%dgCӟ&4]Ovp)W)WS1:r9o'7̇21-sRSsVDqufw4\M.ue{.U7t䂷L>X%7XleBv cUbx#^TvUzHjUgb]v:g'f8o}gMh$Lޟ*;[u;]r5|JN̞ W9o7m`w~}߅\Vb [śU<_ūЉeWP~x=3.i}}?q;,_a<+;ܮ0sCĕe7ZcV#1=b^G)'r@%'H»*ieruϧsG߇9h=<ӜyĴ=:kkuɧ$f:K3Cg ހOs"/Onё *^Fn=iC/泭zP{^Yn--; %X#^{Ie8|~}ڇѱx/5ζ</޹ƈ%#U/`h[b)ڝX Lt0޶M{+74t$}fs0>JVyטq;[ QsVCd9za8{XgXϵם8X!s);zEҲK'8Rּv_? t\-_zܔPoCo <,Ojy,/}]q֦ǒꕖ}a}Nx-`x'_ͳZps}+IOzϡuÒQkX&` zlQqL^r NC qߏG<ܲ+w?yk-g >OyT_x}:W.ߩΘ~WkqNOLr"wg('_˩2NZSgr!z <9lȶykXj9m§- d[qSDžFkC~?I:sҺ'{IU:Yki ?tU'2T=Utz3?iV>2[G[F{eVvXfiġ̱{F&n=v>=-pd>]v|}Y>(Ȣ]IV}D<'z,]옫}'#*;Jke99;r߾ pK6r}}}[~_~T endstream endobj 386 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 390 0 obj << /Length 1426 /Filter /FlateDecode >> stream xXs6 _Gb!Rn{umkil'c;-.ń@ @an01H޴˛eqlos^P>JX}2% )C#ewlCTzb-Cە=o\cTD$mEkG'bZpB&yEF TAE^vw=Q=2cf|WxT@=) BZ Ғ +N¬;.mv6U]N)s䗾 IaGJ'Ԩ.Cc0`Y2r$-^w;M 9GU\S1]w_@l\Tֶ^9%Q$"65+ HF=^(`G!@ѝȰP4E%p%d- g[4.ZrEDP``pzViE XZvlE ^O-qx8$߬Z3zXJTo)]p4mK TmWD~)g;LbW)C^{$qd+CAur DX#^u$ gѴs+{{aJCXb&ƹOW" <5cFv(> /ExtGState << >>/ColorSpace << /sRGB 394 0 R >>>> /Length 88023 /Filter /FlateDecode >> stream xMnl]zⶀO7@ .#+X1+3#{͗^?~~~>^_??'޿>^xzy??;y9~}z{nI}%}>},ےޞ>立m|=?}=/y@}}<-|/~\yz]>P?/O{@|>.}<_S/zyy~zY>Z//Ogk{//_W|^^ߟ1{~^/+g??nק<7oY/Y;|Z>^˷#y}$?.Y|z[]y=ow}.߿rwe|{>fobg]n}c{/~^},קczN|^/>~^m_gd_ Kyz^>fd{y+y{/d;uzN}.ɞ;|'{|'۾^/ɶ˿{1|>?o=k:|Z>v71|z>f*{^.߳֯=?_/޶;Y|'{;wN~<_}dGsH\w彼]m_}oW;1{|'X>fo/C/շw\o{{|'۾.޷y]mu:{|'۾.޶;1{z]ns{/;uvN}>>?.owNdhvN~]_g?OodۏodϷo_oY{uvvv*?^5vqC!M7  vqtlQòůeжz mѶuu-\%`o/W Uylɖx~߮$ŏ lKx\f[dů+ ly}_m`϶}l_/жvwQr DOi[ů~%-~^V}<_e`oٶqm_ڶ^_}BozcA|{>˯ozۼ~M^_oz[|Tŏu[xoz5~WşwK|t7kMo~=ŏOs[87Mo~.^yPOu[< z||{>|oozۇ?-Mo{{yݿ.{|>|ooz|{{[wat{|{{]?|oo|{{]_˷WU}%A5AEAUAeAu[|;AAY|{]?׿\Ps?'_׿]?|׿]?|׿]?|oz_n߅n+B,ۇסۇ_ng{{|[ؿޯ3~5~7~߯_߄_nזrl'?ux7NW]Ͽ_pȏZ,/_q"--6},wߋfyy4ә59,v+Ԧl0zWǽβx~OYuOȿ8nȉвxxq9Լ-WwFͻs_ٜ%5_\+Uo!GLիiy9njyj>BU I7{33Ur}|;XzpUӮUUÙ-z ^8[u.Ǫ-ά{0?BҪkW:9N':erܶuc yqz9|n]NW'~sS׼?Nk˼-`tsǷm_ODW_ms&X\Vo!G.ݫ'՟%&[b!c*o9{\{u!}H9B'W9*\n-W f*~'*_7j&owr\l.ln=9&ls-95}g-K-[ubn8xqnqƹqnus)[%s5s-~|sE-7KQ_ws_'_}9\b.;n,;vW_;f:du!*1[|=;Rᚲ{ i س(=,gQ= {}Z, gQ=3^gр=Y`B>yͳ(hEAYT4?Ϥy& Di~bA3)h~&39y64?gR<Ϥ4Ϥ(OT>v& Ϥ(O,I3Qn~LnI3o?Ϥ('*O,}&3i}&D}r{b3Qn~+n~[}D3i`}&Ϥ(XI3)`}&Ϥu& XI3)`I3QXXL։ Ϥ>֙4>gRL X:a}D D '*'.>Qa}D D '*'*OTXNtX>Qa}DuD ։'*OTX':OTX>Qa}:a}D D '*'6'(ӔЗ>gz Fep= v+~Y!Sw |  Pq}~Y4EY(§uĹp;3n׏9^xYLθ_v& 3i?Nwn߾n'*':ˉ3bDgq8|S7Q{bqCΤBm& j3)ng7jzcڧolnS7n& ugRQ78uQ7nbCLfR\3i.gNt' $J'*_~p+fҠ6Q׫4ͤALO_ũ{bLΤBm&(j4ͤn&JDG _3iIL&:_׉ _D#n|Mt&:_׉ _DąDkuDk5|5|MtN\|Mt&:_'.|Mt&:_׉ _DąDkuĆ.< ?ZY4|߅5P},*΢ .hIg܅g܅gѐt Ih³h:EY4PEY4Ǣk&Ć4TL͵84T|ͤk& _3i3Yi4L&:j3PIsĩ\gR]3q'6L L*,g`9Is/':gҰx&3iX8Y3q'6,Τaq&x&8Nl<ͭ7֛z'V,Τaq&ͭ7ř4,rMln4,ΤaL*g,NlXz'VΤp& 3in3n4XΤr& 3q,O\XNt,':'.XNt,':ˏa9ѱXNt,':'.XNt,':,':ˉ ˉDrcyDrc9ѱ3qB'6IELBgNl=Й,ߛ{L*Bg:ޜICLB':Bgz&3i: 3qB'6Τ!t&ey&e9u:LX'6Τu&z&3iIsΤv& gp;v& 3i=ۙ8ng\gR!<4ϤAL*g <4>qAx#< <Ot?DGx#< <OtO\Ot':'.Ot':቎ ቎DG቎DGx#|DGx#< <OtO\Ot':'.O~Y"Qa}:ѱ|s,/s,9bsN?XX>o,`2˷ϳc9ѱ|bDe N'*_OT&:TOT3ǚܿ牊ϧo!(I'>wo牊wf^*Km&'*(O,AyD;oyHbu<gbqZLϾgb4b!3iarO_wDY|b&3xLLDŽDUO_yLЉJoL;k:﬉~gYΚX<={& gR8OϞIL':gx&ΚMt>~;Mln4ә,D'i4IZL֛z39Cmͭ7֛IsIuͤfz3in3Y\u3n_u'.WD&:Is&U7'i4I:q!i4ѯ >gR34o|~ $MlHICҙT7Ll&D#v7LM6&IsIuNln3Yn~MlbsILfd3iPIڙ岜\3iIT <,OILngp{&3iILngܞp;ѹNtnO\Ntn':qvs;ѹNtnO\Ntn':'.Ntn':n':ۉDąۉDvs{Dvs;ѹ=qvs;ѹNtnO\Ntn':'.Ntn':n' {44uZKY]ߩ W7fF (,d<E, ngQp; t& D }bA3)}&3i}&#PfRJș }bA3QBXNt>Q{釱n&N'*_OT&:_OTXLI3)z&gRL'|=8_OT$=QI:q!J'<83OTf<`f&'*O,~#gRL :IA3)蘉DϤ@b& Dxb3Q$&6H<gR L $f L $"ĂgLtDDg7|&:>DDgsDg39qg3Lt|N\Lt|&:>'.Lt|&:>|&:>DDgsDg39qgb菷돹 >O΢",I:!c}cu3i8'.7Dq&:T5s&̓;fMT> JݧoU_ű`y&Օ4˙4XΤr& ˉ 3ifRr*ܮLsSn)?d 939uqyMIq>%t*3)~L'wL;(OTXNtBX>Q|bL{,>gRܛDY,>QY|DpbsC>jDQ;!DEŵL f|=QzhL'3)g?{D473)ngRLͤA(jO,ngRܐ3ing|=QzB5$}k(I'<|&3D}$=QIzD%iD%JN'*IOT&:IOT$=QIz4]IzD%JD'J'*I'*IOT$=QI$=QIzD%iD%JNg]I|4gZ+!YE+!h~%$ gZdpœH:P᳿~h~# gZYO΢,_Ȣx7?fQ=|&Dgb&3gP=zLΤ"i&3g$=L|&6̤g&3,$MT3gbϙTd^_IxvoyLQؠv&j3iPILf⨝6QMtNPI`(uOt>bLFĆ4ԝBDnbCL'6ͤL*fP74ͤL':jfҠv&j3q&:j+fRYϤAm&#P4@IL'6ĩ;qnS7ѩԝP7ѩP7FDnS7ѩԝP7ѩMtN\Mt&:u'.Mt&:uN݉ uNDąNDnSwBDnS7ѩԝP7ѩMtN\Mt&:u'.Ml?T]_g~:: Nk8ͩ;/h_guitnhnhP;EuQEsQEsQEsQ},j&y3i;8uk&53Is}ͤfx& g83i~ LKm& 3q,'6XIL,gXNl<媛,>x&3iILg8X}c'[KąNDc1q>}OB3Q-8IV,|MlX+-<׿&|U&:_fu&'7ۗ_o/xF˻~MgOFDnS7o'o? ~Mv__e>`Ɏ{?'XJIo/cܞ<`EqBVogo(Bܞ\j(.Y(ӊl(Es͢x,ӚlM6,Ӫ(Oa}q'I073)yL73)a}bq=%D'*Oͷz`1q,,>QY>Q{&Is=3)ngRdϤxDJ?}yD{b8(j'V󘉢DťLKm&'*_O,.8_OT$=xq3)1R{&O,gR<΃I8(3OTfLl1Ak8(('I8H<Eb#DE≊'*OT$N\x"DE≊'*OT$&:OT$HfҀ248(P&:(DeDGb#1ё8qAb#1ё q&3iIL$f q&  3i8 8$fH|8 3i8DGbbę,HLt$&:$ΤBb& 3iIL$ΤBb&4HILDG 4H̤Ab&ĉ $f 18'.HLt$&:$&:GܐHLt$&:$&:ĉ DGDGb#1ё8qAb#1ёH 1ёHLt$N\HLt$&:$&:ĉ DG ^zY8AcQ!q gQ<ECǢ,iYχ΢,P΢x>4,f>3gLk@9EY4EY-::ftLT:X< I$(O,=OfR!14H̤x4 3q$&:'.HLt$&:ĉ DGDGbbęTH̤Ab& 3i"19];4tIEL 3q:>bGLNĆ4tBDc1L:&: gR1I3iICL:Τc&NĆ4tIEL_xjLFϤaf&SgR<5I4$ͤ!i& I3qN\H$Mt&:I'.$Mt&:I4I$Mt&:I'.$Mt&:I&:IN҉ IND'itBD'i⧒4I:q!i4I$4I$Mt&:I'.$Mt&:I&:IN҉ I8tZCǢ",΢!,>Ig$֐t IhH:hH:EEY8I5$ECǢ",΢!,cA5jC5L*fPMlILΤj& T3iIՙ,PMlC5ѡ:qjC5ѡPMtN\PMt&:T'.PMt&:TΤj& T3iILkLkfbL_oAX4'ibCLؑ4'i4!i& Ig4I$MlH:ND'ibCҙT$ͤ!i& I3iHICҙT$Iؐ43qwĆ83'V̤xLff0s&33iILff̜03љLtfN\Ltf&:3qcf33љLtfN\Ltf&:3'.Ltf&:3f&:3DgąDgfWDgf33љ9qaf33љLtfN\Ltf&:3'.Ltf&:3f&rę̜L;;[`tL+8Y( $fQ q (E, $fqh"1@bg 1YH̢@,*$"DE3ix& $I3)I3)x& fϤ(>'*3O,@y& ʧoޙyDJlj OT$H<@Hđx"DE3q$HCYg8{⌎]Utq9rCbKL*:ftLlICL:Τc>_Rg@9 (3i@Iʙ8(3(>39e[p>jCuDjbLILf7T34Pġ:qjC5j& Tg='UG|-}6'|vDp8LO?篢X~*J ˙4XΤr& 3i<ˉo"t& gR:'tbCL+Bg:Й4IELBgWi`zDu:a=qu:a~ ։Du:a=qu:a谞:aNtXO\`NtX':X':։ ։D։Du:a=qu:a谞:aNtXO\`*Xahgzi XϢcq EY4EY4~,*XϢ,XϢcQz gq/9?wq;vbLnϤv&Ćۙ4ΤL*ng\j3Kmb,Nl`ILXϤu& 3n:Q \jRNtO\NTdg<d& u3in4ĩ;qnS7n&J!3lb񐏙8jzL~|Ml4|Dk5L*f58_'V|ͤk& _3iI@&AfҠ64IL j3qNPILfҠv&j3iPILf⨝6QMtN\PMt&:jqCm6QMtN\PMt&:j'.Mt&:j&:jDGDGmvDGm6Q;qAm6QMtN\PMt&:j'.Mt&:j&6p<<$h_gui _Ӝ΢cQ݅gu _gu _h:hXT|EY4wY]Ѻ0q&C IgR4'ibCLfҐt&I3iHI4P4PͤL*f@5jC5ѡ:qjC5ѡP@5ѡPMl: OILfP@5ѡ@5 8TfP}8T T3i:Djbՙ,!FbL*|f34̤L*|f34IL >3q|NI g33I4̤g&ω >DDg7|&:>DDgsDg39qg3Lt|N\Lt|&:>'.Lt|&:>|&:>DDgsDg39qgbןi/H̢,_BIV<:),O_CV@u T(E,ΠUhrBV4hr͢x5YO΢(TOTX@5gP= ꙜAJ3)z&TϤj& BD%iDe '*('*(OTPLtP3q|} _LgTϤxpLgTϤk&׉'6$ͤxF53)Q=GQ=3q&Ϩ|}&:_ϾPA?҂!3)1ODs}= ^Ij&;4ΤfYY,>h`"|ZLۉ 3i=&L&Ćۙ40ap{&3i`D}b,Nl`ILXϤu& 3GB,K!RD\JDgq8y\J&3iXI& 3qO\X,NlX?%z pb& goaaߐG0iɂDGm?<%EΤAm& j3Q&V|ͤk&R4|ͤLkqbs-Τk& _gR5kb&ډj3iPILLr& 3iIL': ~CN#nMt&:jډ jDGDGmvDGm6Q訝6QMtN\PMt&:j'.Mt&:jډ jDGDGmv?.ON۟cQv jgHP u<< ,O;p}SǮ,{,߃k  h<3wu*Ϣ,+,8pbL\?ﺺBgrdwUNY\κ+t&:3,6,'X}Җz,Y\o6‰ _gR݅3q&:j&:jͭw&j3iPIsͤAm&ډ j j3in3n4QaQ![o&NDnNWewS'vWin4ޙ,D^8џNl3ILm& 3i<~ogx&3q'6D-T,Τaq& 3[֛P74ĩ;qnS7ѩԝP7ѩMt>FDnS7ѩԝP7ѩMtN\Mt&:u'.Mt&:uN݉ uNDąNDnSwBDnS7ѩԝP7ѩMtN\Mt&:u'.M,?{fcܴYBVv4kB5M:fQ4 %iZq}͢,|fQ3Eq}E, |fQ\_P|Ny& |Iq}ͤz&3Ϥf\_Ϥ`<&3&{&MLl&ML;4=a'3QX<섉[p?3i|&ϤX>rcDϤr& Ϥ(OT,O|&ŃQf> Τ!(OT,Xܐ3q,> b9a,>gRL g,> I3)XI3QXL gҰL I3)ř43)}&Ϥ ('*OTBNtB>Q }zB'*OTBNtB>Q }: }D%JD'J'*OTB':OTB>Q >Q }D%tD%J'*'*OTBNtB>Q }: }bCן~imгh= 'ЏEs΢ gܞ~EY8,n?gp{ŭ7;۳h=֛E9#\xN, ~i5,YOy!,||xq0x,fljw/!x!x~gaK+1ljw?c?΃Es|M(MqI8q$"->ķH|OTE[4E[|~gR<6y׷!->ϾMmb|_IϤ`qfMMgĘy2-3|<3)oo#[4&6зA->@++Wҷ-j3QԾEE?oAݷW3)6yoǯo6yg~?6yoY|&&8&_IϤq,Mq,IX~<~%}Q o'*ߢ-ߢ-OTBE#[4BE#Jh~Fh>Q oo}-ߢ-OTBE#[4BE#JgN%i?EEY<@Y85~,*B} aQ<&d gcBfcBfcBX aQ<&d?&d gaO븝s;v&?&d&cBnC[|1!ILLL*ngp;ۙ<,N|1! MLL':቎DCh~ND#h,~gR8<~g}<DŽdaq8aq& gR8ř8ŏر8gq-6ΤL*gNt'6D[43PMfҠ63)qubLΤBm&4ILf?n1E[lILf|5|MtN\|Mt&:_qk5|MtN\g,wg_u'.Mt&:u&:uNDąNDnSwBDn^~,7_R ʼnDgąʼnDgqx7eq8YD%gj(=ǟ=ǟ=+Yڳ8pW\'m(=3xI۳8p}Wop~|ÒITd8N\gu&gXR<6yYݷz8K&7V=-Y':ʼnDgąʼnDgqxDgq8 ŷ,/C`܅3ioc ʼnh>)uߢ>PQ7ѩoǟ=[n_uVL&:T;ToX=MP}*@,PMlP}oIؐ4#\j߿ _b;,E,۴3Cjgp0Yqkr~fqw⌃]U<䌃-p*~%=ߙ;~¯FI39_7~"~%}8~'*NT;rOʽ'*OT$&:OT$H<@b& Ϥ@H<gR 1G≊'*$"gHX!L'*O,x&3q$Hb8T_8q3i:Dkbי(_ț_8?^|b3iI`⿺qbgP7LwĩX\IDg33Lt|N\Lt|&:>'.Lt|&:>ω >DDgsDg33Lt|N\Lt|&:>'.Ll.sZ.h.8{ɢ>vv~V,,ΠZ@~;EuEsE Y 1;;; jZwIo3)~A"Sw}$56q&U7&24WLn&ůMd53g>OąND'io|Τf$Mt&:I'V7L bՙTPͤj&M68T'.PMt&6PͤLl&M6Gmdk&~Mln47L_Ȥ3q&:j_dAm64B,~m" 4o* j3iP;54ԝIEL u3qNICLfPw&u3iIs}ͤp& DDp7':DDpxDp8r}\_g\_g\_: NkhEu}Es}*h}},,:΢>uuu讯8u\_gR]_3kbs}ͤf\_gR]_3i_bsgΚIsgͤdAm6QY3i;ΚMt&:j'.wD&6wLILfY3iuDkbLd&5I$}Ď4L\T3i.3Y.DgbsQɂDgbsQ/+|f3梚IL|dg_Tff0s&33qf&6ę9bf& 33iI̙T̤af&~QMl@rDe2A9qe2A| De2A9qe2A蠜2ALtPN\@LtP&:(P&:(ʉ (DDe2A9qe2A蠜2ALtPN\@X\T^h}B9fQ\Tg_ӊ,i4 鳯Ӛ+i((@E,~΢fQN(EY4,i4YT3QfX\TϤg& >Dyb3)ngR3gRNϤIAL'$=gR4%WQUxԞX5R{&œg=x6{&UL{bqͤa,>{&DY,>QY|b3)XIs={&J+B^uO,gR\uϤ t&N'*O,IOڞI3Qn'6>gRpL nIL'3)~&3i~& "avƱ%),˞ZĎ*F;:}@J^j2;(o_(o_(o|ǝG剆&Q_1Q_A≺_ňS8#=?iD+:=>#mFtz#:%.Ftz#:ޞ' rߓtDc[xGt#: bF}DDDLQ /H4V|Ba!H$ h p%ѹ\p%q$~.IL8m^ax<<bkΧ}>ŠSFFDGj/f/D"1qD"f5dıHtlL\X`c#M1ͱH/ Ha0IS)L50DL(La;LOaSxbJqo}ch4Dq< ʹ6gDisDMD͉mHA3Rfx? ROwf㯧~l؇)>?b-KtM\Kt%:x%:xN xN{a$}~HקQ}~ʇ;OpGOyקuQ;qAm6Q{ _6D=4Q<9Q<9љ̜03љL|aDgąl\OQ}G4q%:~;ߪ8x;&':~ ~DM\vDD\cn₹f?/{iζW[>h|3>kk}ժL4{ϴf35}9g}^D{pZɈ'>}+AlF،hb#H#ʈ}G4q%(耘"Ht@$: &.Ht@$: @$: #}G22TP!ѩ2fdaE"YxōΊDgE}G4qBS!ѩT}GGeG;D%:#(wDNo ވ͎(#͎hFQb#H#ʈ&.;D%(e9-q4s9fdA6b#H6qrfGfG;]wD;H#ʈw }G2xGlvD3R222feĩTHjGfGBS!ѩ0qBS!ѩfeYHtVL\XX\_k} ƴj& iJ4%4'H$M FDALQ3QFDqu&ۨPry|~ss5L5IB,9zF;iщ3RQ=#Ռ| ]\=#JLNQΈBDTCDԉ R'*R'*NTHJtH:Q!uB*!uBDݣ{GG'Dݣ$:xNT9Q3qω <'*xNT$:xNT9Q9QsDODω <'*x<'*xNTIt9Qw 'mNtĜ0It09Qar;L^`09QarD#:AN,ؘ>M1y>wL09ϚD%ȉJ N 'DƉ6Mu 2‰JDw_S'/́t&Hg±1ͱ1ͱj 696̙(g9dDqȜ9!s&Ch3a07Gϙ(g9zDq+0| vɈ#&Q3'Giψs%+oQs|F4Gg8z>#y?z~~B8m6$:m6NDą6NDMfɌ8x<!)ψ(q8(q8JtM\p8Jt%:^qQO'XH@:# ]DG@gā@-8d>#!q%:&.K,Hq|F~%:~!)Hq|FC4g8d>#!C|&:>ω >Dgf3։z|1t{$fđ qF$&:ĉ DGbbGb#1ё8qAbbČ8C3':ĉ9:Q7G':~D۠u-8d?iNWC4G״nq&3mmo6՚L4۠nq&3iz|5Lwg[H;{gժ#3dJt2%vi J,Hq}Fi&[<.'#D<DO'3qO'r6NDe軜DJs%ѹ2qJs%ѹ\p%ѹ\ItƕD$.'w9˙"YHtVL\v9It*$:&.TH]Nr }軜D'ąNzD'=^I4r}3q$.'w93✖p9F|?d~J-Ftz#:]q7FtzK\荨G':ąӈiD4sZiD4ۆloF۾g}z{-fq#:#:r rD~[΄3ժٙpK4ߘririVG3]&ܙhrg!kb!4?;&*Ds;AL8]9F ;Hs<;#lFlFٌ+1f}UЗ 1GtK\Gt#:#:} }D}D>Cѡ/q>CѡЗ@ѡGt}D>CѡЗ@ѡGtK\Gt#:%.Gt#:} }D}D>C_}D>Cѡ/q>Cѡ@#} }2RA#}D>C7#:}D}D>C_}D>Cѡ/q>,mGl/#1@# 1З@ѡGtKq#:#:} }Dݟ緻MI/7hw4;]Mt4ݦKk(@ ݦ׻0Q\ 7M鍦\D Dq Joi͈M]i}nbnF]Q"#6׻H6#6QUHt׻LTEt5QkD.D \\&*pMT":pMT5QkсkD \D \&*p%.5QkD \D \&*p&*pMTEt5QkD.D \\&*pMT":pMT5Q5Qk⺔Q":pMT5.?.:]5Q+q \&*pMT":pMT5섑沓Q 6Q1 7Q1lbFNfdFNf섑沓Q8p6Q\v2#e'3p6QllDe'4̈"DElDG6ݟ%Rml&ޮl1 wl1QS bZL4ך0LV\kDqI&kM((pһZFq#{s3R1͈ ؛bonFkMi5bnF N  q@$: &.Ht@$:  DDDbDD"耘"Ht@L\Ht@$: ^qD"Ht@L\Ht@$: &.Ht@$: @$: DDDbDD"1qD"耘"H,5DDYP!Q&:  Q(Ht$: &.(Ht$: u[o}DDzGt#:1Ҽ-nFmqmqug;kވNoD;k7RdFވNoDąވNoD7}gms9蜖pYoMZ4'4'4'-DDDDvjg-Z&ҚL4;kIJ;kivjg-Z&L8p]Ycā;kDYK\vֈSfgfgYKvivq":D%.E5)q!'ɉDtrJ\ȉDtr":9%.Dtr":9r":9+D=1^x*q)x~,S)uōNYD,S)+q,S)蔕P)EtJ\(Et":e":eNY eFYD:p=>\"#:Ȉ͎#Fd3p)i/b)^F#6{83|FT}8+_?F?F F_#,\It$:WMT8m6N m6Ӝ6fffLsLsLsڼZEhh3NiLoBiL[0Q\n]zL48r &G(#DQh₣DQb48Hq#͛f!SFL;QH}~WΫDąWΫDU*y5qU*y輚*yJt^M\xJ>oL2%:}} AΠDg+n Jt%:AΠ AΠDgąAΠDgP3h DgP3( 0( JtM\ J>o%.I>o+$:W+;f7>o}} @dh ۶ 2bΊDcGPl|~ɗO eIt$b₍DFc#ѱXa ql$"7 DS!7 fDQ[fD@LT{~?o+&.ۊD'=W-Gl?^/j m#΄`Zqn& ?Ĵ2&82Q5DplLk1 6^ 65ؘ3;WX1͡L43xqV$:+3I|'Gf3+ld9(Hqƌ4e*f $ It$:A&.It$:A $:A N A ND'HdBD'H$ 2q!H$ yō ND'H$ 2q!H$ $ ItL\It$:A $:A N A ND'ą ND'HdBD'H$!HF $:A ŵ,0I|^`蛍WHtV$bⲭHmEo+߷҆DGAOpo%<~D"aΈ8fcF޷Ox~BD'HN\hxGgE"Y1q$ ѩ)x>l ?)HMą ;hJiN4) tS07i }4`Z)DwL( cL|xO~4VŦ`&cLLL(U7#Jz& 7'*M,6gbSŻ;;3;5 ͈D9D r&*&*MT Gt 7QAnAnD rr&*MT#:MT 7QA.q r&*MT#:MT 7QA 7QAnD9D r&*&*MT Gt 7QAnAnD rD r&W9D rƌ8M,6gDAn\r&*MT Gt 7QAnbq|(Mݽ r暐Q 7QAnbq|暐) Piψ2DetgDIoD%=D%Jzu&*MT#:M,Ͽ~k`jw^^㤗椗V1QecL=?Uqy!h.aQ0MߗHݽB&=&=&A#}\]2#Ş#͞ߌ8 =)f&Şߌ{~3R1{~VdY謘"YHtV$:+&.HtV$:+V$:+Ί +ΊDgEbŠDgE"Y1qaE"YxōΊDgE"Y1qaE"Y謘"YHtVL\XHtV$:+V$:+Ί +ΊDgąΊDgEbŠDgE"no_ށx>BD=L\Xl͈c#ѱ_kx|_%Ϸ$a0 &*dķ ':W+Ε~x$a0I,6i.;=jb˧[4[3b\)G}S$6{%pKLsڼڲ戙戙y11|/1V%fL^bZq9 ,C444ƫU[h 3Q\„c:ldķ UHe(H4M,G|l }S0q;p3љ.qa:3љLGtK\LGt#:%.LGt#:#: WfpeF#: WfpD?7#:DąD?_D?/q?GtK\Gt#:%.Gt#Hq #  WfpeFV$:+Ͷ"#Ί˶"Nf[1# _+^ObYol$<ߗql$:6&.[D߂$: ą NDBSaBDBQ fcFFFFFFFƌTf# Xm62l620It$:L&.Dl$f#քZ-HoA} 2qAAboA4G-(Vא ´⽆P@||eplLslZh1i!L4ӊ72DshkDt&+q%#ΕDJse•DJbs4# mfy4x>-fcF%68L2%:LND'ąLND'SiBD'S)4q!S)7HtM\ JFo6&.It$:m6&iIt$:m&.It$:m6$:m6N m6NDMfBDM&i3qM&7٘p%7HtL\It$o0'ą ND'HbCFFbȈc#w"L}/THt*L\THt*$6p`9lHtV$:+&6o0F%(4WH^)k8#{ ik8#ΊDgEb+n?jqV$:+V$:+ͶbFmEFΊDgą+"MY1Y4D!Mw i4忴( ?ZkDk ?tאiͮ!Ů!Ů!wi͈DŻwDǻw fD/!~`ѽĉr&^DElDGl&*MTd#:MTd6Q6Qm"DE6#DE^{3 Gt 7Kb/ǻw&*%.x7QnDŻwDǻw&*&*MTxGtx7QnD;DŻww&*MT#:M,v g5>CD }]Q#>as3#G( N475忉_0VΈRD—GoVq_#qS ';'*6NTl$Deʼnʊ'>m+5Ͷqzyw&qqDEAwXlΈD忉ćq_#qSyS>w5w^?99!?~,y Ӝ Ӝ Ӝ ddd*DCpLk2 A^ A9A9A9A^"L4b 'ȫuɈ$ $ $# A2R2G'6Ɉ$ 2q!H$ $ It$:A&.It$:A $:A N A 7Q&:+&.HtV$D#.THt*$: Q!ѩTHt*$:&.THt*$: *$: N  NDBSaBDBS!ѩ0qBS!ѩTP!Q&DąD?b8%DG|;~۠X\2#}D+.{~uoQ&&DG6bq1 #  Hޞo9A G,3R#)Hq|D'=^bs|xFcġhS{~ ;u'pbqԘND ; 䮶\\\KsKsKsZrh@.ri e@܀̄\\*Drh@.rW@9A.q99Fc, Gl@9\bs=?߂wDǻwD;.q;xxGtK\xGt#:#:w wDǻ+nxGt#:w wDǻwD;]wD;xxGtK\xGt#:%.xGt#:#:!qKp?b}w|!=F < ׏Ϸ}w{#|;?eD"Q)H\xDGA%.Gt#:1_Fc3xD#>^ⲏGt#:3Rǝg:}/#;#>Wa| ߡҜ^^^KsKsKsһZEzhH/Nzi eٱ&4'4'4'U2ѐ^&>F}D}i2@>F}7wDǻwD;.q;xxGtK\xGl2eġ/q>C9Hs7# DG+n(Ht$:  DGDGA`₂DGA Q( Q(HtL\P(H,.%RF@$6i 3ؘ`#ѱHl61l|#HFdS Č,\IlJo ^Q;dĹp%# Wfdl$:L&fcF$68bƌ,It$:m6fcF*diItLq$x>eʠϏP02028Jlviv30};ĆA3R028JF0&.I,@Og'MISLs)x>6ߕd&vla±j_x Dwl<~_?`)V9~V 3I||&1q$:W&.\It$:W+Ε W+ΕDą+ΕDJse•DJs%ѹ\p%ѹ\ItL\\It$:W^qJs%ѹ\ItL\\It$:W&.\It$:W+$:W+ΕDą+ΕDJse•DJs%ѹ2qJs%ѹ\p%ѹ\I|W&;';':A $AѱxD}DDpאuoCQ%#:Nz NzD'=;~!㟫NzD'ą􈺥7xX yw~|nI/ѷ&6Dݦh 7яOtd#:uCp8_gZlT&|CjeҜ|oj 999]OH&L=~g+"DCdY&"DCdDEdh,xg8]#2FȈFdΞA9Sd#6Hl4Ȗ iG6%.Fl84sZiD4s9蜖p9FtNK\8FtN#:%.FtN#:ӈi ӈiDąӈiD4s7N#:ӈiDąӈiD4sZiD4s9-q4s9FtNK\8FtN#:%.FtN#:N#:ӈi ӈiĆqNK\8FtN#:%.F|;~qd{,vōވFoϷ}x/}#|;?F߯Oq#oGtK\Gt#:H8 7ίlAA`Gl?/q?GtK\o\Z7wMTfo.i5PaSaSaSժL4T 3Pa&*&**̄SaZCh𚨨0 f٦˄S:*dĩP!# fdټ#: dAAFH4(Ȉ ټBĆ q*$:&.THt*$: N  NDą NDBSaBDBS!ѩTP!ѩTHt*L\THt*$:^qBS!ѩTHt*L\THt*$:&.THt*$: *$: NDą NDBSaBDBS!ѩ0qBS!ѩTP!ѩTHlą NDBSaBD߼#}G;o%.wĆq#6LtDg:3]tDg:3љ0]F*cęLGtK\0#tDgą 1LGt#:%.LGt#:#:t _ ޥՖإ?(2 rפ ӥ=WhH/ eΧz'3=~H|>Wxf/wW޻LjяHLj;Fc,#6LLj17ޝ;Fw wD;]wD;.q;xxGt#:%.xGt#:#:wWxGt#:#:w wDǻwD;.q;xxGtK\xGt#:%.xGt#:c.[8a>C_}f'?@F NDjϏq@$6DDbDD"bF*@dHt@L\"#D>Do;'w>߇77}(W|Mſ>-(x>Jà:2h3(M%CD3R>̈DE(8QQpDEADE'* NT$: NT(8QQp QpDEDGۇg}ĉ3R><#DƉ'nj>|<)~)#Εwrre<>+[rrDJ<+wΕsDʉƕsisD͉Jnx?59Qis&59Qix6&FA'*t{ kdgSy`S|ksnmNԭMomNl?^2͹j W[L8b[Xh3i3i3ij% mfi3خdخBiv%v%_sDsDq1WpQ(q4qQ(xFg똑z:^eyXQ2 bN bNDXSlBDXS,)6qXS,)P,){urj«DUQN=JBD'S)LND'SiBD'S)4q!S)ɔd)ɔdJt2%:&.dJt2%:L2%:urQ%Dݣ贙&iI,nKݣ$!zzFNH₍ql$6>~Öw#sl|y'H#47 HqL|^B\`0I=ʉGI\Htl$:6in@Fc#ѱ1(':+Ɗߣ~ADD?=QbOԃ 6bOt#:#6/w|1.70]3]3]3ժ L4L gf1to0aaE"q?=c-It$:A OǒO;Hu,#o˧W>S$:m`sb4H8b}/11i3#b2It$:b&.[\I+WҔ+}ʙ0+( C0ڜfI+Awڜ iis&&JӾ9FL|?<߯ CLZ! 1h9Q󎆘w!+'G#/Gl;~G{󎆘1hyGC;bs" 1hyGC̉w4ļ! 1'*b󎆘w4ļ!DE;b󎆘1hyGC;b1hyGC;bs" 1hyGC̉w4ļ! 1'*b󎆘w4ļ!DE;b󎆘1hyGC;bNTļ! 1h9Q󎆘w4ļ!DE;~ yߣ<xy#w4$:xh󎆘w4ļ!DE;W`߯w;L&D%W &*)G &N G@(AF hx#Ɗ_bD;+߯*{ĨFw4*Txw*+?J63x@̄b"MpwT;0 f3V&:>FOUb&V̄>]X1 +fYj+2HtV$~zF'H7W#o;60H40& L20ItL\`0It$:L&$:L& L&D&DI$a2qI$a0$a0ItDI$a0$a0ItL\`0It$:L&.0It$:L& L&D&DIdDI$a2qI$a$# L &hy3`#FFWܰHtl$:6{$Ɍ,0It$60Ɉdb8L&&30y+`&3R$#DIdDIb40ɈdDI$ɌT0Ɉ$a0$aicLk2Ni5Q0fā0*Dƴf1505ؘ3xj1 6fAx?Cgx;=D;MT3љ3%* L0љLG4 wG7-q7bCoBoiNoW[-m#[]mK=4'4'o02D0"* #iaӜVp&p&KT؋g/+qa/9H^4앑e#\D ehEtJ\ЊhEt":Z":ZV ZVDGVDG+*qA+ъhъhEtVDG+ъhъhEtJ\ЊhEt":Z%.hEt":ZV ZVDGVDG+UVDG+*qA+ъMQf~1=b{ gd!27#gD+6o0Gqd#:7# 1xo0ވNoD/`8# tDg:7Ht8t;w#?x|=G~ʌ,G{"耘"?58 iʊbw/J1QL4}L\Ʉr%c˄oъ>&>&6Ӛ>&>&L 1gDs"0#QXHq|xFfoF3RbϏщŞߌ(NT2%:NT2d:Qt)tD%ӉJD'ӉJL'*L'*NT2d:Qɔd:QtD%SD%ӉJL2d:QtD%SD%ӉJLNL'*NT2%:NT2d:Qt)tD%ӉJD'ӉJL'*L'*NT2dJt2d:Qtb7#G=7Q&LJqڜX͉JND \9Qrr%9><#QXfĹrrw<Q\9Qrbq|?><8><#)3͉J68QO]É uא9Qw 'H0#͑QV8QY8Xk?JW gū)+nߐL"Y1M|[TN_?0NS}x+T; S1a x*߂76+_Xj_X̎/N| S$B}\}>}K|\y>•Dą+ΕDJs%ѹ2qJs%ѹ\\1#DC矠#(x>2˧8G GDGDQ7%:G?{'ǟDTC*!5Q!+S^}t%>?R#(о|˧8s%>?//KtMT}lEO1:~OQf~O1sDg3Qf&!D+nLtP&:(ʉ~|^~3ёlj zp|ooN4}c_/~6%FDHD?8>сh@m6Ro؂D\c.17q\c.1lj~p|-с@-gՖϴf3i5Q}fxg#z Ӫ L4 ϴf3͆5lx5h6<3W6<3lxf̄Sպ OF|ÓD=NTH)d8>#1uF]NF]NF]NF]Ό,fQh₣DQ(q8(q8JtM\v9ΠD$.gI4ļs%ѹ\p%ѹ\ItL\\It$:W^qJs%ѹ軜DL\It$:A&.D$:+}3q$.'w9DąI]N^BzD'=I/q$.'w9˙r}軜fąӈiD4b˙و.'#NoD+nFtz#:ވNo ވNoDąވNoD7[BoD߮$=yXɑ448%.xGt#v%љ.ӝ歏3xGt#:%.xGt#:#:w ?? ޥ9]m2x5Q]&˄]*DwpKk. ] ޥ5x2]y|FEzhH/ e}SuLjCѡЗ@ѡXrFcTH}4H}Y@#}D}D>Cѡ/q>CѡЗ@ѡGtK\Gt#:#:} }D+nGt#:} }D}D>C_}D>CѡЗ@ѡGtK\Gt#:%.Gt#:#: 1З@ѡGl/# cġw }D>Cѡ/q>CѡΈaCA Q0:͈S!Ѩ3R # 2Ҡ #Tdzq@$: +@dDFDDDbs;#QnFD 6`cZplLk񚨰1 6f±1ͱj6fL865ؘlDh񚨰1 6f ZNJ8+Ί + +2Ұ"# +fbEFofD/bF@$6Ȉ"1qD"Ht@L\Ht@$: &.Ht@$: @$: DDDbDD" DDbDD"1qD"耘"Ht@$: &.Ht@$: @$:  DDDb8 &.Ht@$: @q@$: ^qD"Ht@L\Ht@$`)Ht$: +d*d3R"# 2"# fDFD iD"1qD"bF*@dHt@L\X"M1o})iGGSKkf>&h1Q@_&w6 cL4Dq51ЗVAߌ(MT蛨Gt蛨7)oF cﳞXތ(Mތx>|Cz37QI7QIoD%JzD'Jz&*&*MTқGtқ7QIoD%=D%JzNz&*MTK\HoD%JzNz&*MT#:MTқ7QI7QIoD%JzD'Jz&*&*MTқGtқ7QIoIoD%͈IoD%.=6Qhx [HobqDj+_??߂DGm6QWϯlAmGpN\Mt&:u'}Q-M4~)u??oN-ӉϷPwBDOQjO??I\TӜů쩦ݙմ{&Lݙp,Os,ZsНf5f&O+3fBI6]3Qigx&W6]q'+7]MW5tec3RrF_Hqxͦ+#DDjC5ѡ:qjC5ѡP@5ѡPMMeӕ蛮Dgf33љ9qaf33љ̜03љLtfDgf337]隸1tLt:N\6]Jt&kJMWomζ }ӕ蛮DąbNDXSlJMWo}5qt%+7]ͦ+#隸l}ӕ蛮:# W3D=mDgE"Y1q^%*ѩX F?mӕ蛮Aq*$: kFWF3g8Hsx}FDzDgE}W6qBS!_ŁtF3⻲D=>QWb}}i}W[/7]Ӝ@Ֆ4^MsKsZu = eA.KiFoٮَ:Nwd;?Ñj1Ftd#:%.Ftd#9蜖ӎtwD$ąȈFdwt #:%.Ft #:Èa ÈaDǰÈaD0cXaD0ac%? %.pFt8#=?r/Ftd#:ٮ!ёFtd#:%.Ftd#:d#:وl وlDG6#[lDG6#ё-qA6#ѐH"7#oAa #8%.xGt#:w}ǻwD;;ޝqǻ^xw wD;.q;w7u;='];#:;>՗xk;mLw<0) t߷oæJzߢS#:w>m_D?_Ă8є>`BQ(HSLs) OJ_oDL( #; OፖwccB 2AߕfϏbϏ %ȴ gD r#WH|Εw?_z#/'3Rl H)Ȉ3bSpFG'*Gt;NTH%:NTH:Q!:Q!uBDTCDԉU8Q '*G'*Nԭ‰Ơ<'*xNTDω <'*x<'*xNTIt9Qs'sDω <<'*xNT$:xNT[u9Q 'VDIDɉ y?F})1'hs]3~4>>>SrΈ2DeЉʠGχp4|x'Ӊdz>D%ӉGχW2}~>?=QtD%Ӊž##;(N|ldz>‡SL'*NT2%fݠ3ߏQ_c#8NT8:QL?lA_هcWּGtF2)_WӜWە444ԫ-搚ە4ݮLk+hp4iqg&ΙhaBw.isIsZsDsDsɄcPFAΠD$&DMbqyF}f؇6D$.\Iԭ͉DDڜIԭ͉DDFcc₍DFc#ѱ1qFc#ڜbksF&$:L)6YIt$:b^qCL#&ItL\It$:b&.It$:b1$:b1DG1DGL#fₘDGL#&3qALb9#&8x&.It$:xMMLobNt$:bMLF$3u3 Wĕm\It$:W&~Ir{+ņ'# W+ņ'Js%ѹXlx2lxΈs%bÓfsF+ΕDfsF )6sdLsLsLsiiiW`2 Lfa2L4D 44ʫU\+3Εws9 ~&q$:L&$:LdIF-Ȍ,[&q$:L&.0It$:L&$:L&D&DIdDI$a2qI$IFda2qI$a0$a0ItDI$a0$a0ItL\`0It$:L&.0It$:L& L&D&DId&i`&DIQÈo6&.Dl$:+V$6Ȉ"9},ذ"#ΊDcŗ3l|~ i'HbCYIt$:A&.It$:A O q$AѰq;=+SV|?e!H_{~ItL mEN;'"BF*ȲH,P~]GCSLs) ii4EA MQ0MQp4>Zq b&|GSң)5DAzLL(U7#Jz&*&*M+f&3uHt3L7QL7Qn2De:3Det&*&*MTLGtL7Qn2љn2Ăf`Q#:MTXV2#Nz&*MTK\HoD%JzNz&*MT#:MTқ7QI7QIoD%JzD'Jz&*&*M,F&7#͈oD忉^{4{3R%Έ˧qlX`(6NjqF lƉ8Qw H38DF'* NT@Ht@8QqbgDqDDgD'Nl6HqyFQ@HlqF @bqFFFQ'!hĆoӜbbbVLsVLsVLsVZkDkȄdZChX2 2 2 jAf!L4 'ȫuɈ$ $ It$:A&VHC8A $:A N A ND'HdBD'H$ 2q!H$ $ $# A2$ $# Afd!H$ yō ND'H$ 2q!H$ $ ItL\It$:A $:A N A A2dF$6HC8A&.It$:A  Db4Ȉn+NmEq@$ۊY'6Ȉ"Vb[ ћ':+'.Ht@$: @$: b q@$: @$Nb*[3[ 2Ҡ #U8Q U8IXlHUĆiW[///j 999]L4 翴25___*Dh/W?/q?GtKq#:%.Gt#:#:DąD?_D?/q??Fc/q??FD?D?_D?/q?Gt#:%.Gt#:#:cῌ,GlqK\Gt#6Lj_b4Lj/q?b8F6#6Lj?FH8 DąD?ῌTLjGl/# gȈ/?Fc d BDBbC4T х Ӝ PaSaSaS*Ls*Ls*Ls*r9 95ҜҜҜV_&DpZ8 D?_b4Lj/q?Gt#:%.Gt#:#:  1#  1_F#:WGt#:#: DąD?/q?# ed?b4Lj_D?9Hs9# 2Ҡ #dFY"#D?|2# 2HD?X #dF ,Ht@$76ψ-Htl$:6aTȈc#peF Wi.\Js%6'VٷGL!#dALFHuMl&ą+ W_? iΕW[2͹2͹2͹j W9W9W9W^lD٘ ʹ635fff*DChh3NWhM&i3qM&iItLh6q$:m&.It$:m6$:m6NDą6NDMfBq鶭x@TWUv/$$GqtlgXaOh<;l12&&fAm]mI$QD\m&&0QDYAm]m]m]m.8MMMM͂,8MMM͂,8MMM͂&jH6+2M`6$j͂&F"l,_PZ+ U5Tt0o7k\-v9,b[l\sWbD*X*迕_1\sX*J$@@ttttW0DG_A]]]_A]]]_A]G$D\0DWA]]]-8????뿂+8???뿂+8???뿂&H*2?`$뿂&Hp1Vw$ո#VȠV$ZZqV,jܑV㎸&"&Hp1o 6t] t] t] LteE"]Iu%P; $W@W@W#I$QDID ۇ  nH++J"+++ ʏoЕ\W.6bod,rAWs]Yue1וCN;,(J$ r%Yd1W\A.)J$ +2I$$dAA]A]A]A]A$DAq tYpP@W@W@W t t t tYpP@W@W@W t t 4y>TLϷAW]I$ѕD\Wt%u%0ѕD]YAW]W]W]W.8JJJJʂ,8JJJʂ,8JJJʂ&H++2J`+$ʂwۊ#1I$D1I$$0D\L]L.I"$b|JG/Q!IL"ޮmAL]Lޘ,8FFFF`"+F"..[{䴾AA]A]A$DAI$W@;L#$(H"dy , HL~^.f,brALs1YCϣb.&d1\Ls1 &,bf al,沱b.dc%XD6Vebl$貱 .... lBӊW ...  ... ĊD D`"$ Ă@@&H"+2D D D 'ttttXp@@@tttXp@@@@tttXp@D IbEL"D qXp@@H$;V$ҊDH$ъDXA+Hĵ"еₙV$hE"wz߱p5Х Х 00VDU5""00VdЊ@׊@׊@׊D+V$ҊD\+]+X00q4x~f8d#D6Ɉ 盫'+2&д&"Qw.. F` /eP0U\TT>.BBBXa$t+ZZZZXIZDIV,iŎVlZjEkņVlZjE`aHa*Ȇ l *H+Ȇ l *H+Ȇ l  *Ȇ m@jņVH;ZZjņVHVlZjņ ZjņVlZZjņVVlZjņVlZjņVlZjEkņZ#V$Za;hŎVVlZjņA/#K&#@H ;D".#*@, Ď#*ĎD"I/# |@LcCU UA6#ecC U66T0D U66T/QiZH";ĎmŎh[I[#A[#A[#l$Ǝll\A6L3(b d1W\As ʕ+b \lP\AsYLۊ0m+b1׊\+sjf&% T!W@W@WUtUtUtUtUX _A]]]_A]]]_A]G$D\0DWA]]]-8????뿂+8???뿂+8???뿂&H*2?`$뿂Ž+_PD~JDUdw'82_$t}/ z' 9v&"I'#... &_t@t@tDU馗Q5&_ґY$ŽmHIDm 6  D)P )0wYLMA选 +nAsMW5]1t ث\sMؠ銹+暮XD\AsW̕^1WzEMJ$MJ$@@ttttW0j ID\]T!U!U!UaA]]]]T!U!U!UaA]]]T!U!0QDUHUaA]UH$QT!U!U!U႓*****,8BBB‚****,8BBBB‚****,8BB` $"*&H *,8BBB`$⪰`$4V>֊יgDT+5lβqX$IS,%l&MDMA".&.&:8... ?kEkEkEI+<֊ɓVL;$L;kEkEkłGoA+N"Л@o D )HlOl6FӪ`E1 Ld1 bb.&\l\LPISb,bb,Xec1\6.6y f sUx... RRRRR z'袯 ... 袯 ... L%$L%IGy oy UaA]g "UxU7B⃣VV\pҊ@ӊOh]ABbQLb_AmMmW\T z^T>8TԂ*R*y*]KP{> h~z?!h%=?'H1m{~.*sGQ(&~xy ue?AOKt0p?ZZ4_ew[\Oחp t t[p@@@ t 4{<' <`-S:xZe:eQ-S?ʠ uׯz?Wrl t t\,:iC8?L} į ;-a@t S[/L/L/Lo100ኹ-ⷘ___bmⷡ߆*~.~mⷡ߆*~.~mⷡ_߆*~mⷡ߆*~mⷡ߆*~mⷡ߆%ߎ#H툉\7TޟR$:#Ruq}C]?XB$#:H;c"j+b&:#H;b:QL܆&KHqGuL$QQu0P 1Dw:.:H$#:H;㎨:&#:ㆁ:&rhOKHrGT(7 rE0љ 癣L$QPrC@ U(7TP2ЅrC  OByDܑ@(w$ 2D(wDrC U(ܑPvuP530 4sGN(|&玨|n熉|~\v\b|.b.s1\>s;s\s1\>/6b.|.yA>s\s1ϋM ....  ...  ... P 4|o΀Hhg8HbKb`0^#x">^hw/P P K= hC&ҵ"tttt-(:6hj8hPve&“H"<+c c :bja$1c :HL": ulAC[$_l,NvgGN_e;F?TP;Z_eTp@W-ӆ:LγL7i@7i@LCn*2~PÓW| GG_|'m8O-^R_O-mSKjIJ?(=)+4yptDӽ_VkMW5]1t\-6hb銹+nA{7kb銹[lt\sMW5b+暮kb4555]A]]]]4555]A]]]45555]A]]]4550V$I:DG$}D\Tw^Ȁ$ъDQ".&,UYG D D D`O-mĊ `$bZ̢&I$imV$#.1$H̊DM"6%rI4(` @G J5hA~&I$g1e:[ckӏrԫQNzu8JȠW'K*ꂧonm& t t[ū=/~ж% M U۞74\up1 :b^l\{btp1\sؠ.:& t 4|<]I]]]]111qAMA5(*GQ%(... 袺 ..E ս?'T8vqG9u?|B,,zm悃?9kq?Zߺ_ر<qźe@8\(8rkw|Y#|}GY;('Y'QQYtYtY^Pe%oЋyKz%]̵x1\/6hbŋ/Z|As-^̵x?ŋ_l\s-^̵b/Zkb8е8[@oIT7U7U7U7UwAu]u]u]uT7[@oI%]phI% t t t\p@@@U>O1%}~pD_W$YIzDYD}M{Q tQ LI*; |ܝuUMޝ&t$"Ch h2F=k">hf"f& BL%X(O)NW$Nq |ܒޮWF-i"["IKH2"["P&e"' LąrP+%rʾa->[E4$) -ii>i4u}g<,%ů/a@SwZO 蒸 .94$wU$(}GI<$(GIG$1%1%q$7"Ka]]<`Xu/tG t04W}xKz@}UuI SI\%1L%1L%1L%q1000\TTT>MsI SI SI SI\%1L%1L%1L%qA7TIP%qC@ U7TIP%qC@ U7TIP%1%qC U7TI tIP%qC U7TI tIP%qC UP 0A$Q oGQ FitD/oCU  /dhFGT6 ftDQPoC0AoCU U6 fqPoCU I U6 at䱶_ddFGtF`FGK$ at$ё`Dv$ё@vDa}F`FGA at$A$ё`FGA aq0U [0ё`FGtFC u0ё`FGT6 anoCն U6Tm tmPmC6TA0nA$nnP[4dEGT6 [t$nA$nё`EGQAP-(h}}p-: چm}]K׆t} k1 ҵKb.]t]l\sZ̥bt-ҵKb.]t]5U̥k1\.6Hb.]t-uI]]]+Х+Х+Х+ХkA]]]+Х+Х+ХkA]]]]+Х+Х+ХkW@WmK$RDK$ёmW 4{~nGaDa EtDE4  ]]fnGf.A]]f.A]]]-0jܑۑۑ2w?2w? sA3#"ɨ̓.8(i+i+i+i+邃.8(i+i+i+邃.8(i+i+i+Chj+4|[E kqu\pP@oK}OH}>u.~̭ t t .dn'n/KQnE t t t[p@M^+ @U,Ttmz uAt?1P 7]%Dr7] h Mx^Imڗ͂6$κ6Ƞ+']חtt+%z+t t ԩ9 tttXpЊ@׊Y+g'gQ+qЊӪZq8ʬeЊ@ῡzȱKp$]U8JW_K׆t}t-uAsZ̥k1 ҵKb.]t]Lb hQAG-2b.skH=>OJubQ#... 蒸J+jBB ... BBBBB ... BBBSwO$ӎ$K₃$$ӎS"*u0P {ZpR@W@W@W@ t IoE t t t[pP@W@6>iCOU,P O >iC6  DO0v$D\(P O0vągAz%&0[mЎ%0VdD"E߂I>7m Фy}** ] ^bE")Hĥ Х Х`UHU!%5"Xf$ D"q4x^   nHVHV$jjj6{9Yb,jb6f1W\msؠ6,jb6f1W\msؠ6,}b,8JJJJʂ,8JJJʂ,8JJJʂ,8JJ`+$ʂ&-="Ƞ++++t%u%u%u%ueHWq] t] LteE] t] t] t]YpЕ@ו@otYpP@WDAIdEF}D+qX0ҊDH$ъD\+"}@oUH$QT!DIT!DVdPDqUtU` $BB‚***&"*&B` +2BBBB` +B" FB` $"*$B"*$Š mEH+8?\/L0)S)xYuupnru8]vU_i>QWWxL_i/8]ԗp&}\?8IQTWh Oק Mp:,=/Aж4T3MUu O|㦁M(ip=p~M_q_(p  _n0\i i݌Ǜ=F7#bѶC%|ۡo;mņmbP̷ٶ5|brZD[H(*[|baoQ-bEذEQ̷(E1ߢXlڢ+L(*mQ- `EAķ(EQpآз(EQpآ&[D|[- oQ}[@ߢ(8lQ}[@ߢ(mQ-4l\DD "dよo\ԍu; "EEظ_ݸ_c q`qA6.ж(0ٌ lFT$ڌ lFI6#$͈+m+ `PhH@$` l0I6*m0I6$ D D D "  m0T$` l0I6$ 6$ Do0Xia7DN !H@00;7|a +Utm]o;-(- ?JEAE1t_?ݸ/A(0ٌ r2,!٢q2lQm m3LxöC1vXLC1`(  |o0k(fl{oņbP7FbF@1(|#`i#hWhʿ+t4.. ¾ &<|A]]]]<<<|AUW ]/yBod<!*CT w]}<}? ]/n7v;?#,᱄ߏ M_+|~KGtt4 Y`O3gT_#e~'d~W0ka2 Y_#ϳFٮh}a8kd‚q4׈i*)S>09}?"GG9('=夺($,oOy}JSkx׺yꆪf4v?v;n uI(s̆:m9c_QQ;$%$/(9J(czDؗ0HbI+n:$~}G//oAGJ>#Wq1W\/6b:.xAsu\q1W\/6b:.xAsu\q1WNjMhx:g 蚹࠙ ‰|>GD5E5E5E5EuAT]T]T]TD5E5E50W$y,oH '‰x/ࠤP$XIFy%1Q}<3z{.&m$r"~'o/$. t t t]0jID8RQKԾ¤M$zIyBjOT&n"I"Qȩ ZDVwEV7M$C$C$SDcc$cc$cc*!!Ys[W ! !ZZŁŁŁЗDC_&C_*2hqkqkqkqI r!Z4$]*5&]$]*u$]&]$]*w!4B&D]BBB/8(t`НXCwbޝ/ p p p p b.a*a*a*/6*jwv.nRJ*.nRJmKڝnڝnJ*醪nJ*醪nJaН&t;t;t;t;JJSJ DtGtG;PtGT>7Q% M3_aЇ&}膪:n:n긡ㆪ$g"Iǹ#qnt;t$g"Iǹ#Aǹ#Aǹ#&zǹaqHq_ym;;;qvx}aG sPGt<\]Y\^iǰ0_qoC M6 U6TPf]6TmPmCն 63ն uvÓտɗv^#*h L$i(w$h(w4_cTlãt8b8Jf&* M*X#AryA[b-悶 b.hm1\sA h-悶 b.hm1\sA h-悶 &A tA tA tA[p@@@@A tA tA tA[p@@@A tA tA tA tA[p@@@A tA tA LmE"AK$D ۿeD GqA[p@ 7|bG*"%X"bbt{r[|4Ƣ#$ڶ"Ooˆ\\`"s+2\\\܂p-:_"&~oC6|OHV$DݮmhFږcm/,ҶDw{n~HI/`EG\<*]T9)^_*+ FS9\_B2#.s ++:2xN2חp~A]]d.e.e.enA]]O/YnuD"Goq/,cё`dEG\]M7<_#ů?A]<__Qw8J"~+I <}Ţ/ vy\ub.:btp1\sؠ.:btp1\sؠ.:& t t t\p@@@@ t t t\p@@@ t t t t\p@@@ t t 4P¤mK$iq[p@WK2 ]p@o V,j'DM{q t LDjE t t tZph L(KĕiA LD9ZHID+G1e0DN+DNk L'DxI:D\xTy6%&0iV6LD\WOR_IW) a :H     g2Q˔IA r8JHHH%   QAqTxe#eceJ$i[GK[@< GK"0ъK ZkX̵b1׊\+.6hbV,ZqA+sX̵b1׊\+.6hbV,ZqA+sX̵b1׊MZZZZ ZZZZ ZZZZZ ZZZL+L$-S"I˔H"&_FdЕ@וDWID)W@Wuq LD){ZUWrrъ rrrr`2%L$"H"R$*2U`H%HW"tH$]x#  H$]$ҕH"]t-8HW`"]$ҕH2%|YhddZA){"x"I#Hjq t[pP@W@W+Ԉ$_@+Ԉ =U``2t"&CIH=H=%|ZGIqI B#WPk_%10V$qI )Ї/04b.~o1\s ~-ⷘ[o1\s ~-ⷘ[o1\.6___߂-8___߂-8____߂-wU%]ʶMW`_%ߊDC_>FDuUPI(ŅrH(I2By/7s c"0":H:& $ *c"0":& 3H4̀cͼbf&r̻ r/F0{: xRD\OX_ Q (O}C aO P Unߟ}?躽cݾ?'tQQp ?\3{ ?q~ŞQsyB8Io#&u:rju('5"9þ߾#*.a O^wZ>MQ\7T9+_+z1!]7<)?_ƣUpŕÓpR7q04PrwT('QŽS}aP7/Eo Ŵ^[0W\sؠ/ʿ+_L[0m\sؠ/k_5~1\/6i|k|j -Bo躽ہہہ -Bo-tj p p /GTcO5nSS; 鈋ꂃcB:L5& oX>y[$o :a&C>$$C> 蒸O@n;: 舋߂0j"I##:: ;Hг鎜.-sjs?dZrG\i+0ܑ`ZrG%W} GK**P'+U^+S+S+ӂ22;LV&H0Y#d$;4`rGЅ'ЅgdrG6s`2drG0ܑ`2o>7L؃,jsAmsYf1W jb6\lP\msY&llB׊@< D_ <6} llll,8FF_hZhŊ> +4UP;D׭[H"誰QwFGIbE"HԍrҊQNZя2hE`^~РV\lЊ\+sX̵bV,Zkbb1׊\+d1oL.6b *,pAsUX\ .65&" 誰 誰 ' . @7ԾnC6 oCm6Ա . U7TPu0upC  tޏޏ:aH&8H0##$#:8H$`#:8舶Gۑ%xInH2#8mC0a0#8hoa0H2#mmڶ6jCX؆b:a[&CH0#8$: چ*hGAɎwGAmCm>!  $tD$4 :DsGT6 $t$@ĵmD.2hbmm1׶\smؠm-ڶkm[̵m1׶\smؠm-ڶkm[̵m1m3ô\lR@W@W@W t t t t[pP@W@W@W t t t[pP@W@W@W@W t t t[pP@W@W@fa ]J$ѫD\**0fБ`fE*P A]]]u^ROrrъ rrrr G.G:̠3h >̠KL`"1$">̠3h 3舉Ɇ$ 3H ,8(H3h &ZȩeNVdAG9L$ ">a0#.:`4#88:CH0#8"llll,8FF>V&Z"88:C88Vʟqr%Б`tBG q<5<} lNH0:#VHVjó6<*&7lP\.6b *,pAsUXUa1W b *,pAsUXUa1W b *\lR@W@W@WUtUtUtUtUXpP@W@W@WUtUtUtUXpP@W@W@W@WUtUtUtUXpP@W@WYIĵ"0ъDHĵbA+]+&YIe#0imIZ+2IIII`ڬ&b",8II`$6$͊DM".<$ϊDM"IkH$6+)S"IkHL2-8(S`$6$z6 S5/jML`A+2hP`ҹ$t.Wd\%sI(hAW=J O`"<+ t t ZpР@נsI(0:D%sI$\V$\%;@\)DѯjrʂQHҮ$J`A+iP"AIHҮȠL2sj2-tAseZ̕i1W ʴ+bL2]lP\seZ̕i1W ʴ+bL2]lP\seZ̕b2222-8(S+S+S+S+ӂ2222-8(S+S+S+ӂ22222-8(S+S+S+ӂ222&ʴ"2%x"돣$"H"R<Ⱥ/lЫ@׫DIjE"JDG' >3u[ߤWWW^ȠWWW^ȠWWWW ^=`*],RDK$QT,WDITlE"K$QDK$QT,DIT,W LT,D97M"fE$95]$"DK/ L+4#uXBr}E퉜Q\Oؗ0te... ]Y`Iw~W$D+ ,л,е-е-/Hr=z"x/aKp~ W_ 2܋Tyd.Len1000\TTTs S S S S[e.Le.Le.Len1000PenC U]6TPenC U]6TPenC@ U6TPe.enC U6TPe.enC U6T tPenC K$k@v$ж+mC Aۑz"~[}Cm6   U6TPUlC܂U U6 T,W U6TPU,Л 0Ы jGv}߮Pi@v$PDeڑ@v$P )Dv$P iGT]6 iGeڑڑ`8d8@G t$PD019z^+ӂȀʴ#AW#ڕm]YwejW φAWHҕjІA=hC U6T90I tDhC UkGT6  t$$@$iv$hvD[ Mh2HԆ&RP[ V, U6T9 t90/6b.Gh1\s9 G-r9Zh1\s9 G-r9Zh1\.6QQQт-8QQQт-8QQQQт-8QQQ`"G+Q"Aӵ#O"2%4] ""T"AӕHtHt6]jӵ$R&Rwz\KG ZDQL>8J"s+2\\\܂I#A#%_"AHҫKb`"$"$&^&:H+`"uS>?DHmێQo$/$4< :x+Cį,~%cW֗0HbKb`Њ%rľA]+ t0u04P AQx>TrG9jf?ʠmGu}}GnG\mP*,:m}:Z"I# ** L4Ek\5s1\3/6hbf.yA3s\5s1\3/6hbf.yA3s\5s1̋M蚹࠙ 蚹࠙ 蚹࠙ hDH$\"f&h hf"fH$kfk' L43D3I43D3W$DL$D\A3]3]3]343D3I43D3I4sE"L530D\H3IDL$3L$D\p"L$DL$@$Б`|CG IsE L3D>$|&g".:.8..PH$PPP.BA3u t LrE 10QDu\Hqu <5%$:hf"?d 253043@o(\pPDAsuؠ:.긘u\q1W\/6b:.긘u\q1W\/6b:.xI]]]1111qA]]]111qA]]]]111qA]]u\H DI$1Pp@DI7Td @W@W N#>#>`4dH`W+2UUUՂHd&ʔHLH*G5(0ѠD ZHI4(DI4hE" J$ѠD J5hA J$ѠD D F2IF2IF2IF2TdР% ̆/9iP]0 O ς&c*Y YЫ&c*Y c>f`4fKL`2fH2f"ј"ɘ".1ɘ"ɘ YH4fKLKLK̂&r,sAbsY%f1 Kb.1\l\bsY$96 <,³ TxjsR9z>+\0TTԂHHHHH-"J^=tt-8HWKWKWKׂttttt-8HWKWKWKׂttttmz ]4D* t |,RG""HHHH]p@@@@ 222m8QQQтBӠW³ <.<&#?> 8˻ =;MytytyWpw@]~|L]1w0w0w0w\TTTsySySy"L\TTT"L@PV,lQP%[Cl@l U5TP%[Cl@o+6ԶbCg U]5TqPYCg@g U5TqPYCg@g U5TqPYCg U5TqtqPY@u$gQqtqPY@u$gD\5TqPYCgqPYCg U5TqLy|3R?s3mE".kB 9 *kB 9 *kBB H 䈸kB#*.kBa :B4:4:a ޗ4:Jf] kxa}&K8N@l Ć U 6T)P } U5T/D$$R#k=#k>`Hkx;~8J# U6<gb\+6LE ZkX̵b1׊\+.6hbV,ZqA+sX̵b1׊\+.6hbV,ZqG"Hd%LA10$$dAA]A]A]A]A$$$dAA]A]A]A$$$$dAA]A]A]A$$$dAA]A;(H"   ݑDAVdP@W;;|}E&] t] t] t] t]Y0ҕDP YAA]A]A]A$$0a# q]YpЕ@ו7LQy>JrtG;0M$a# I(9 nHptG;0M$ҫDJ$a# D10ѫD\1Y0a#^%zʆڮzQQ`p4AM_A zzzʆ D"JE*E*Pog27Lw$aHW$zHW^7LeC\6eDV$a#.RڹlK G&Gwnx?_]8|:??D_.ݢ/A-D\~kE߂w[3-D.FD?.-ޢw[ouJ _9q.P/r N/wz{{ N?_Y]68.W_ײ׻Kp^}yNlp^}~ Ϋ_/?ɗ2 ΫOw}9W^5 Ϋ?_y s58(lp^}lp^}n:W|N}q w|Hlp^}~\l]68>^~9>^:yub?ɷϫ|?'ߞ?^> }{oa~{?^> ~N=^] E?'߂s=8>}΍r ߯τ߮u=x_/2._ ߟz?'߃bnُL_ ]'?su#n|}&uN~gs#8>~ΫUu Ϋτ/^L:W߯39'8>ߟEe3k'8>~N Ϋ?߯3sO~}&|?'M]euo~}&v_ _ɿϿ ?Zݻͻe??7.;4eus3e|ܸ}ޟϟW./{x}ߔ&ӷgp^}}&v Ϋτr}ppvپuul{uDp>~.[{[pp]80?^W Ͼ~}>|vzh]]4߃ǯn]6Xj}U@˷3Wb}}B|vf ^?|)-F| PYp/UU>'n߿ۅ3yۿ4އsՃ緯O/6ۯӼ}}^~ 6j޾>0~ת,߇~J}<߇CǷ3؁xr7Uo__og jzYpVg[]=̈́O߯n'Ƿog%}~[p>}%>g/#þ_=1˦}8xW]>[c.vroڇ9,]0W]0s]0X0ڇ9Upʮ}WSv.ڇ9\OٵsakO)a.~!]0O/e]0kڇ9|P!kE0>ïxT~ _/1zDNk3;1vc}k;{1?y ^/)rboڒ9~ =Y8צi¯ؔcx$8xc.ٿ}tquʾ}Yk_fuڗ1Zv3y ^/DOm1vp>@ksOᏵ;sq; ۅ3^As]9a_^4cxm[Y5bB;f_[w[_5}]3V1f-Ssm[ڙُhV1zGCz^]nҷޏٵ/y uNz]2+?q)trJ1WKkSfesc:)dxY;2+/k^߾Nz5}Idk7feumƬl߷51I}1aV6>6څYz_0+Wk,߾NzeIkfWkeecml|^yP>f\ϫ?}1^y?fߵr:oW^_ \'c uN:뜌=*tnY9fMύK*nB'Uz^BgoYd uNYdp)tx`:yj:yj:O}.uN{Yd7v3ye}dq)sr<.]_uNFhU9뜌KVX&"'U|^M+W_ N4ʼnϫ5ie}vZuϫ~}d:t8*g_y7ϟ޿Ϫ?}Tf9uin;~}|F[ wq˺}]|VCj e οGW_^vgO?_|]0C?n߿Osw_~^^灎/~wFϝ]eןٍnG5-.|n{럋?wٝnٗ{s]f7e.5-ˮ?_ݲu]f7=֟;-vh|]f7e?.Feןٍ~]h;ݲu]f7eWg.|nt|4ˮ?_ݮJ.sgٗG;|{?_;ie'ZZ;|[B߾_ y;]-|Bn--s]w׽-=:\-=n_/6}|=po|[|{|[|[u55=zi8}n-q~|noߗwz_jwƷϛ>3~-=ȿ^-'osiW>7?^k~?o7#]r[~?}~=po|}|v]-ϯnݮ-=vȿnWzN{_siy._\;_zvnٮ-|,nKۥi{_;8v_;w^--z**Z;w?~_ w=v)p_;v_;_O__kw/z{)Ʒ͒ϧz˥{__zZܮ-=~;?k~?o}~=poG~ϯnȯb}~=po|lmwO___y~}[~{|_;_O?5K1>wW>w|-=ηӗog=p{RϯnKa>w?/zY q|=p[u_oq^J|=po.E;^\?[~{~[~{v}no7|;?k/w.zs)h|_;w&xv}nZ;'x{|Ͽ~Q-=K} w>~_k=p|Ͽ}V-={n w?Y5ZW~]^~Yhj+YZk߼>_^·Nϗ'qGg\ax-Ju];Gno{3=r/N?m}ϸ_~q8=?q3=r/N?u}ϸ_~F}_ϸ_~F}oϸ_~Dw?#3^Gng߸g?r/?r[#3{#\V |ozjS3nvcc %q󌴡#5u6`FF0RXwhC Fjm(Hᴡ#4uHc %19P:CJ0BqFj}HԸֹIP:?IJ0BAa#5:'DJ0R\hC Fj}u#q󖴡#5:wIJ0RZhC F}n\wu'q#5uN6`mu'1y$PgK5`x};Hc %45m=>DKom}4wjN:gJ%,:oJJ0B㽣H#5f8H]_`ƳΥ҆x73g#5:JJ0R\GhC Fj#4;v}1Sf#5:JJ0R^ZiC Fhw_S#׆5`#qxꗬ#4;׍`ƨk(H6#5J0Bn#5>׍`Y\PwmsYC Fh3R㨭k(HԸ\7:ZKJ07-m(Hs %Ɓ5`8\wgmYC Fjܵf %o #q&5`Ƭmk(Hu'qlm;H6ì#5Fm'XC Fj\` %Ԗ5`zZH8kcJ0Rn#4V 0Gm/XC Fj?5Y[$mssFjMf %1jJ0R㪭k(H6#4OF0Rcn#5>׍`]fP^7GmYC FjZԸ\7kJ0Rc5`UhPOmYC i8HHӬ#4/v{;HԬ#5fmYC Fjm;}ks Fj쵵f %1ێԸڎxڎШϿFj6ם`xڎШ8ڎ8ێԸێИ[N0RsFj̶cFRΧ.~6mo`G endstream endobj 396 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 401 0 obj << /Length 1230 /Filter /FlateDecode >> stream xWK6WȅbEJ CnHѤ9ВlDGÇdw A `|cJx"a\ÛEެ~ܬ^,R(if4FDH6%EfR|qqЪaUcUF8]5Dbe/Q,p^Κ {S.bbb E eP4D2Tt(*a-(p.cX0o+8I.s^ . cbBCRHBej3II20u8gqP-'Đqgϳg6`"gZՇ*bx<0z@onksM0FZl&K#nyy9,3 2%.|Re i-/$yhyk65q7G/LwzݸPԑבDk uy6R s7$Fm@,7@m;i?_xn)rqxk}'~$"=U֥P \6#Tӝ_,ӣ$(MMCdHs9'2g~E΀<4AM.S{< m`QY6ѽA Cl<I ABO?8n0N-ϠE6FBiWܠ><wt_tH߿p0 endstream endobj 397 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/DendrogramAggExClusterDataSet1-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 403 0 R /BBox [0 0 360 360] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 404 0 R/F3 405 0 R>> /ExtGState << >>/ColorSpace << /sRGB 406 0 R >>>> /Length 2415 /Filter /FlateDecode >> stream x\M7_K{aEۘ̀!?E"NDN% IB ?ϹJ-UWZu;㧏)W0O?ʊ8JaO_Ǜ|x~hy'?|<Ϗw.4i8םB'O+P3`֫La(񺱐<-TxY#]ô}iCj^ 1Ζcsɉ Aם"9\meS`2X,G\ŒECKȘݙ1(ב$ @8hằC(rJEl8D}a oia:ucG&m=jX,lg;#: uc!rL6[0xJJ DOW|E 'z+\dz:f%ܹ:EtB8VmJ+_ fg|K7tC8 oW>c*][C>:EtC8$t~fX̺!Lw6Cc(FP ݩȚZ ѲͮD"aEhkznަZ =/b\s5G0'-qMl| hmp0)>Qb}@.2IoPt~=Lf=l=۠yu,g p =ەOʕHw.Sc) pz+bz:|v6PLn OHa@`FLCZ!_ 3 #yˁ/%yr3B DL/g n|7 ^}\c-G0&}nW;a)ױ73@1 :ct~=DfYs޹B0$`gg '5quGy'yr"dG'F gZY`#2=}jDR$s*Nr"9e;f!Rf鈤޸(p(N$G'J|?1ak<4㴙kD_@%fꥩ]yUئ[,#4HEC;_$ګV1hO ^'j[zW\s%GLT;Ӡ`e 0X_>)c":!zZ#p1kSw =Avn8sK08<$`s=7=tge>j1ҹJ$2Io՛nz_N7 )ױEtC8ЁUj"`˃sj*;ks4h&}: =wtϢViS wfWg ڿ:i :t߬WGfY%yk:I ;w!MP[#A ^00bzךٯɾZ>_mY_@: 暋(}:p XnC |fXPgI];s@~ʹll39[0NM@bUW;P\9Kpz((1< ,CѧocB*/dFRԗC0zmu" 7sgm{ $X@aLjY`n"wS>ǂGy/ oWzdF\WR#xȀc'gA@痯Bl)QG,BFM.fBC9_\k:?>C`fmSH7-|XȀce5eeol|\PxȀC'rW@~! X3r@^!IڱQ2kъ @kޟW)L/b{NVcu9xzP_?kۿ> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 412 0 obj << /Length 1071 /Filter /FlateDecode >> stream xVKs6W`&rFbx$u3!99hIѡ] Ym5Ҍ29H HC7݀3\b)<6L'\,e>v\+TvUWڋ֋~N-Ɩkڵ͞2qa+9*:dKGcEw|o=&2V٪G n⿮Ųۙ=$vOehId8Xu%NbvIooywUk? N]*O ^8ܜm]8_zUå틱;9?[R#K |AV+ >. ?szۺS)_I|{bV/7i!/9h @ ;/^T! kqZ^{mZ<%y2%헄H!9W$W3aYߒɜU`,B_JP|SK*4eC~X97PZ '`S~$¶d)T`1 pqQz]COA~'~ endstream endobj 398 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/HeatmapAggExClusterDataSet1-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 414 0 R /BBox [0 0 504 504] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 415 0 R>> /ExtGState << >>/ColorSpace << /sRGB 416 0 R >>>> /Length 17708 /Filter /FlateDecode >> stream x,v]ǔ mV߸$$$ CEC}eƜ+3"k`-}<1rFeu9GvϿ׿OΧs:?~_/t<yhIO0y?{n=?#=oGz>~WNDx]~ٺ^?l޷)cZO={R됭\^.8sM {Nvyy?\o7|_`& Wq|sfs\ˋ kyҵUxn߅ϟs~}/h>ZV^.п`es_$ײ?֔1nxv?]>geyg?y'l`h,16/ufh"sCv ,19dόa}|S}aQ'Q0Dwezs=>uő{(!`{&a!!`{4!`{{&!!`{{&!!`8_Dbbp`JT, 1 3ٺvkV2GH+ƞbȞ=Őİb$A#1GD= +{8RqG={,#"pdj+YFD [F@ Chll2 2eeD0dL,# Z![F@ Chll2 2eeD0d0daȖpfǍ,%q܎)1s|{I vCY"%pdf(l'0g˘?>N=aaÐ-pj%a8C3G}}"`OG*>!87\98RӑODOD0d>a>a>}}" !D@ C 'OOD0d>a>a>}}" !D@ C Cg>qcssPbN9Mς6eN΂,ÑeDdfbkBy= ={{V#"!G{82u~=e,#"pbT,#"p-# Z![F@ C Chl2 2ee&-Ð-# Z![F@ C Chl2 2eeeD0dXYFce4V %fq,ZqZ1JD=ZÑ{(RrG=0dLC{vy~JFHHIĐ8R1EJFHH"&FbF"`b$l$&FbF"I&FbF"!`b$&FbF"!`b$&Fb83~^#c#ɡ$ H?*Z'p>'Q'99Ds0ds0ds8͹9 +"hSsejudj(l/ps0WUv  ##DG0dG`Ȏ 8B@tCv  ##DG0dG`Ȏ`Ȏ!_)BlzE籶ZdJT̡%JCc99467|98"##&`Ȏ 8`GP##؀"S^U9#GP{9(!`bl9&` !`bl94!`bl99& !`bl99& !`bsX=EsSs8lǜ(spA Ad9,#l g>a8=[ϬbT,#"hl H2a8ߥeD`eV|""p}" !D@ C C' 'OO&>}}" !D@ C C' 'OOOD0dX~eOM}1iO(QBUNO4Dc5Pdz_5$aȖ!X!Za%p}pj2wA01Ù9#pr#`p'9(T|B' '0dL|B0 C ' '0dL|' '0dL|}B0 ' '0dL|}B0 ' '0,x[OOU9(Q1'ĦW^6eN̮/Y#ˈHX#+/y= ={{V#" ~*FHX#l$=K{8RqG*{8Ð# !!G@tCv= =aÐ# !!G@tCv= = ={{,Dz 1v{8Qp%*X=(%p)#!G@tCvÊ{DðA0GD H=a!XrÑ{8Rqv= = ={{D0da!G@tCv= = ={{D0daaÐ#`ᮏQub{4VvӉJTpݣ1v3 ]TH'a !`bl Z8R""l>"RÑ9(R3" H G' +W`Db$` !`b99&` !`b f` !`bl9&` !`bl9&` aҾhb+:PNOOOO8>`TDD}b(lGa0d0a="a`T,<)YFD [a2"R G2eeD0d0daȖ-Ð-# Z![`b2 2eeD0d0daȖ-Ð-# Z![![F@ Cx2J3&NT,%J[Fce΍(QsE0"%pÐ-# `%p}Br$" X"%P$ C 'VAKHIA01C6s0dsLA01C6A01C6 sLA01C6 sLA01l\N֋dfhf#9N##0CF6`V99- Dm`7H{? ?q-Bpc|)rUD7HoȽYgrCD 6E ll  D @@ D @@C D @@ D6Ah$6Ah6H6m`G?:q'J(GCc9}qOlb#l ' ',G"d GHD V|Bq$>a>`GD98R1Es0dsLA01 s0dsLA013s0dsLA01C6s0dsLA01C6s0dsL`{k,49(Q1' D@scs0cb%Gp!`8BD ##V!"ccl 6Ha T]"spb)#l 999Ds0ds`A01hl 999Ds0ds`! !Cr9+H|_:# Ǝ`rw"_H/tm4C6hlеE k9B/tEUaG+k|fD0)U"p}" !D@ C C' 'OO&>}}" !D@ C C' 'OOOD0dX3A,J>D'ZJ|7C(HTܣ%jHon=0dLC{vA>jbL-oz_'2h|A#G- KH2I,Ð-C0 C 20dL,Ð-C0 C 2,Ð-C0 C 2 2L,Ð-C0 C 2 2L,Ð-C0 륕Z[XފHl(Q921 QJ΍8G8΍8R97 Chls#A0\? }[_H匉#|# Z`רH܈#lˈH2aaȖ-Ð-Ð-# Z![F@ ChleD0daȖ-Ð-Ð-# Z![F@ Chll2 2V,sήK,e(Q8DXxnDύb5GP;[pn>A0qCvK;`aG#+6H|#ԱE9# $ XrG*H##& 8!;`##&`##&`Ȏ 8`##&`Ȏ 8`#vmU Ǝ Vq' D@GcG0CG+9#GHaG`ȎAG08BD +"R0G*H" X2=T|""p}" !D@ C C' 'OO&>}}" !D@ C C' 'OOOD0dX~no/DcD2XFK,C chtM#|"`'I|}B0 gX`嚈~S{8!'V,Ce(g+wfT,C>>aX G*>HOO&>!!`OO&>`OO&>a>!`OO&>a>!`O|~&WJ${%X'(p}B} }Bt‘Q,hl 6t,ÑeD-Ð-#`2X#l H2"R G2 +e8–-Ð-# Z![![F@ Chl2 2aȖ-Ð-# Z![![F@ Chl2 2 2ee,XܶxB}BrׇPNPrׇ>(prGD FH>Ԉij+|ðr#"xvŰr/HD= +Fp#;D!<"XC$";Da#1ID FI@4C6h$l$l$H HD#1d#L$ !I@4C6h$l$l$H HD#1d#1d# FbFb$Wv]X<%OQ)-Q%0GKC>b, 2 2,Y#l%p-CdT,CqGG@k>H#O|‘O(!`O&>a>!!`O4!`OO&>!!`OO&>!!`m7X:B03;fbfxfC< v@j|^" 6!7q@lbCnbC>;;wخ| `ޣ}-#( GGb &I3J}˒g6k̏u3 6!7f@lLCnLCǹؘܘo[  =j=*h@QCW7iWCn׀wf/Xҹܹc# G /iM!}m9?%nƒo,ix1nƒo,ix1nƲLސ^0ixCnx Lސ^0ixCnx bLZې[g:&_d.?´;ߩc ^9} oZ&OE/]NWQbN_' sV! C '|}B9&`4>T쥞~20d9h-p@Α2sM#{*|?ٕbbfbfbfb{{D0daÐÐ# !G@tCv=#!! H"R0GC>b`Xl[qG_#gD@ |0dȞ0g>'Osp#S8Hm6Xb%6 6Xbbl%6 6Xf  &6`6 ؀!ۀ`b  &6`6 ؀!ۀ`b  4ـ!ۀ`#q?8sfS G g6O IzpǪSd Yr N{7>?7>~27G8\En0} +G"RꗤŸŸͰŸͰŸͰŒ7oȽ{ߐ{? !!~@}C b &{ߐQ.?l.Xw< v!w!wyž# `_J;RixE᧏ae?" pr,;½{ߐ78;'Obs۬ #0CF6`6lm  ll  D @@ D @@h$0d @@h"6A]!0FD l{߳z ROW[z? N& RվEf60"@u  6E*6hOmKl@mKl@m0dLlm@0C0dLlm@0C0dh0C0؀"+[ G? & 8BXX|N "+|B' +>H'Z$ ChdGDG3AXqT|B' 'J V|B'K>`')sO10cc0Cc0Cc0CK|}" !D@ C' 'OOD0d0d>!D@ C  [df#|!'G'OO13s!#$G6`~@}|0#g/X| N> 101?6|@rC ӞvA"RWzq7tycIq7twycIq7u`Ir &]n].t`Ir &]n].t` f]n].t 8kS Laφ3L%䕯H؀#c)p$}±G*pʹ9V#Dp'+"R8ZC GX8H)sʮRcc0Cc0Cc0CKÐ# !G@tCv= ={{D0d0d!G@tCvCv38|aX8I@~Ip_~l*=_HIκ/rg("I~[)V#Yq #&`Ȏ X;IH  `9>!d,)]6 6 6`6 6`6 6`6 ؀!@@Chl    D0d6`6`6m@0hll 6@@[7wސ>`XhxGޑJ+4|B;Ri`rĆ74# 7|@lxJGpzlp#9E +6 {KlKl@m&6 6Xf  &6`6 ؀!ۀ`b  &6`6 ؀!ۀ`b  4ـ!ۀ`b Vl@ I&6 ؀aIlb$6`XEJ6" Vl@ 86 ؀=)0Llb$6`6 {Z7UzߑB?ԤbbfbfbfbIr7oȽ{ߐ{ߐ{? !~@}CoȽoȽp,# zw{?`"+Qޏ!~B;½oȽp7X}G zߑJGjKƒo,}1ƒo,}16`Ir &oȽ/`Ir &oȽ/` foȽ/`W$}J+!`IVz_ +HW-,;R}G7"I &oX}E7Lz߰$/a)#ŸŸͰŸͰŸͰŒ7oȽ{ߐ{? !!~@}C b &{ߐ{ߐ{?jGYCn;4@D \@@rߐL>  /X.7.X_T 7a*|JG/67767676X brĆ77 o ސ> 6!7!7|@lxbrr5k<Gm ڀ!ۀ~#S[96@@C V~7"gCum roG{ߐ~#RTz_ƽX%/ƽXb%/ƽXIr &oȽ/!`Ir &oȽ/!`Ir7!`IVz_޳X8Hw$A>p>$ oX8H" ;R9v Ϭrߑ +G7LA0qC< `XG 6V %6`6mm ڀ!@@CChl    DLl ڀ!ۀ!@ 6ʎ ,# ~n?lN/R_s|̯GI V~/" ۀ!X8S~@}C>6|pr,2#_HTYl%6Xbbl%6 6Xbble6 ؀!ۀ`bl  &6 ؀!ۀ`bl  &6 ؀!@  &6 ؀jE0ijIr &/8=lGf6O;Ê (!Lrk ςjZ[66_چ:T$rC[7ީ,zEyxް|巓: <uvy0r3`f7H]|7H]< vbo< vb. u!wb.]qKEߏbgV`oz? !ַ@@ ~#A~o=" E~T^e X% / Xb% / XIr & o /4!7`Ir & o /4!7`Ir75!7`IV^l RLZې[[0im~o=""Ikrk &`چڂv[[0imJk+`چG[;CG.7t"I rR;R\\ \ \ \,rC brr.7.]n]ܐܐ< v` κw< v!wy@rCrv[_wy﬋wyϸGpݑb" /" {L{P7]x7,܅E +B_TbbfbfbfbIr7oȽ{ߐ{ߐ{? !~@}CoȽoȽp͈#."l  x|﬋~ﯰ~@܇76?3o>Jpz-xK8=;?!L{W{pzA"R}u~cI7~cIq7~cY &oȽ/!`I &oȽ/!`I &oȽ`I &o8fS6ߑ͋Hbl &6`vIlp `g^gnx {a- y>`aއ7.=t[Wm±ŸŸͰŸͰŸͰŒ.7.]n]ܐ< v!w!wy@rC b &]ܐܐ<lGx>`)QE>" 7|#>";Il wGAG0^Rx"`X~|10,彈#ˈH2l%Xbbl%!ƖXbble!X![`blee&!X![`blee&!X![Fee&!Xa2I,0+Hb9VA +HbsPd-a)#l%spb$ X2G*Hb;ͬ/EO698B__Oe,nCSoZˆl~6<|>{/d ʣ ٥q/9ku\.߳| |^.{-do^|Bvv]l=zM[-V9<|_Bv_{{Fgmeeiيګ-{-V^~z,m= ߅Ep.;]v)V;Is_V9I{z}r,4ђiOCR͢K[?f9.e}LTw}r+$ߟf߫I+3^CΓ]iI6.]iI:.]iƻ J~H`]$5;1>VC̲Kzfc|g]Tyjfc|k}ɡIvݹw!i=Ƈgzœf_Qd|t]|fd|xޣ,694>>,=90;,O}L{re2>3˾?4.S[ 2>6.p*oIKzuw%~_/E]c4:Wg#2?q76c_ۖo1߿c=A<ѝN%5f&? s:uwz@5۷켟0_O*]n@[7].%;'?':Ne;;m7O~g;%!~=@{ cDwKqnuW'?m}[9Tnza,y7]L|+ߍ/bzn\1󲕏w[ݭx܎vsm3 );Is\̗뽧[ҧߍ.#O?=mmvhGۿEtȞO3c=qsl-Geii޾_y]q C:@׀Cv[{nZݎk@7-ۍ|p^6?!0x}z5 !;|p== ek`{#}'?t=o{ >W ?{[=o[~r~.\{ȏzpx/6,y\~?عFO|}:=+֭^;O>_ocuYoa>>y lO~?Z|7dl]U4?]t6G ֫{Cr:u쏿~b8{=o[mgXnwon?n#߽=ϩ} !Ovw ?n.6?_q-~ۇG޹z~|ZOv\ʿOͯ:q>>?f^==_ѭ^@W#'/k=l6w֏y"~zPIۀ^1돏_>6Zc5 ~mOny;1w ?_-{y/>}@wo8\|pXE>[w@c 5=o}|_6=nˎk ~z>>?'\?W'_tvȏwmo|=E;Yvgr?b89Ntsȶm8lc1lKtY(w;.?8/qzc僽X?0-q[h#F%.).NF%'7κ>GF%8ǥF%s{vH0-m?XHyjexozh(ȾDz渴ˆ5G%F%_G%qZȾD7 X40/1c￞9a 1G~s0/ѭqc=48lߧq~d__p=H9laad_[G~dX"ȺEn~d__v1c?02.qXBثF%8α4>J?/1~r_)r<.aӅ縶GȰQNmGG%m4e{Xa[gYW^=8/os%k: KxOpYއ%}~=9Eg?8/}>Wh]^qd_b2bьD?2,x[˸D?/ѯqz8cٗ>ۍǸf/#U?9nkg]Xe8RsF%|E8YG%0z102,X%n~~d__c~d_cxw=F%&s\10-q^4h# D?/ѯqw6G?2,-8.غ3G%8qms #7hYXoQHľ;̱˥c8_Gz;GF%6!9aQlJk ?0/o snxad_cXU'K5F%6ui<1tKʌqFDB<02,aqo1 Kww9G%8{ۚ#Ún.#9ۑߘ|,>AǶGK#zx^b8F%GYhad_b2s #>0-q+'fcad_[Qa oǑuv-ɰD?/ѯa[AcٗX/uyzSҮ__i endstream endobj 418 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 424 0 obj << /Length 1455 /Filter /FlateDecode >> stream xˎ6|0ÇG6 4,CWJp$9Pux Zpޜ.g*A<+*xbwg"ix"Dsc\P7s>Y+fW~si[72IçeYwׂf>-~aՖMT/V.VVTR͸ʂ$Y,Y}σP/@H#lHj&ufjϲ}'Ҍe,b\(ӊQ,54u ωf31,;g2eZKl29Ғ%Jzg3> /ExtGState << >>/ColorSpace << /sRGB 428 0 R >>>> /Length 4491 /Filter /FlateDecode >> stream x[M-mdr髤ڎ0`y@AV`xya؋I%QE??Ο۟>mqr{{?#=~?~HmGx>ٶH{92l9_r<rױ\Aa%כ<=R(/gJyԾ|þ||㟿mt;gj~A˹ ;c m޶!UӇ;qچKry"V%ysCNrrA^r+b:4x2L5G/\KtJ ~ /KxN ~6\߹ /yWa!|^qӿhEܧ}y[̍ǿ=}|--q:;OO3'#Ͱrn8ltCBJ[$G;0bc[mt59(fAioi)/Lk> 9mu*98e+fá)yM9"vߒhpEslSƳnt4緈 [%њ~awK%BSh;)]Įv[xQ;[D%Ynj kzRnbL'Z3\SpSR[aH):XbL1|B8ǘ㻋F5וˏ8՛qlG '7eV[i6QbL4g:|gcgBE@QЫ5@GtR [Ji!p\ /ĩ>WSS {:R09ݢ~`In&'mG3 8.N5vo9fCpyu:ͣgә f湨DpvmaNnPh%]Įv[ri-wSmRn/sRLj" ,)׭[:.,\Ssoi\<۝X`8#—c7/tZ)sޅ" OJip0an! g7w]^LskC1&6-7pݥkEV[#Fm@ cza,gH"#ƨsa1l+3s9ڄ2I1(RDjn|AU#F3?8s;CNp0 m0* N6W4Hq [Hip ʴ"U|~yD`-jv;GµzS2̓pAZڪMvyr@l˩2%d߰$XRɘs[!:nz*an#Zj,ajykA'm +Ե3d#_LCe XӡIvf8[4S(0 +3Lidniv2"A=.9v[q7}|B-ϭ ߜR,.-yK`E+sx+ltjrJ36{잖qJں{Rqݎ%nnK[-۱ݚ \otsK,2< YڟEa욻UĒ:x.Ns{J\}SN]za#\9rhpٹOTZͧA)K~zFkr|4G)]ĮvN KY'Bd\|\A}7+ %G gx@ؙ+ݠ}SN}ztghfԲc"RJ~Mf~ND(sQ}BJkb++\ YMgOGl4(>lđȪn-nI:AOHi pZ^ 8pr Q}_xK>,FkrvlH7(E[rEj}K\+?6a64on'dq6#}BSXRCۼ#ݠ}KN]z6< Zf {`ɬև['yFXRE*8٫2PSh;)]Įv[zFlΟ++8cP_JPg$& Nu n}SN]ּ$}_my9)Р4vM΋c{{p< s;iFߔ'͋cW5/~Hu7}gWo欚6uHaW$Ċrh N9[}TrEݚ*{qrPyU틗ElqK免W2%ϾMЅMpr"lAa^w1vb78\f g ̋ws]Kf R`EHqZXK^Z[rEj7kc)V,^N'QɖI^}TV g=e{WwEaN+թ9ϺB%uQo(ϸ}slPI%VvzdC7( Nصj[R}+' qJ'f&I>%|+\wH C7(E=[r%j-io׼s`^T;n-'Q*"A ,y N[0]yaߔ.bW/k8V#|6'T՚']3HEPbryyan4޷s.Ǿo1T?'$TIV<(8v]vj!]`InXKG J-9v{33 v+Mͽ Q{VXRj-ieq:Gߔ.bW1=1*ؽi#QV-jNkk ?X 5]eU.wwϕ¼I9<]A:\tRi}KN]v_V|\KSJC*S_VQYڵS-*(yC.}[.zȂMC +F7 焋5`EUA(ʵw{1YR엫ϕ``{69nBϗ<+*.؃, lGoe/v+I9(8]5S;8_yR%O4$sV؏. 7 -^U;LdT0 Ua1"8҈'c3MNl%%lMI-RXCbeMmTbЪmd)g;-JNk*Ijc*7崋nlG cɋODPzؚDp +ZcR[5êi #60_g=ea#|x6#U\vbtWx;evXD)9w]aE+D:ao ݠ"KN}[߆1"7F^p_Xl7# *c %t+/(|cU`ץ'O^\mr>^uE~_z7 yx"-] =ƣz7 i>OE\kлz5YrN>{zwxvkw]A^d_gy^ݪ չP>@ -"7nu-^EN_sooq/~xy*pƋ%7kq{gǻ*^5nZwN:tXqB7i~:P[KwdԝoYTso[2z*Qt.MoFs J?=5P՝NP@̦Jzйݷ܊yYoxȹil~Bbo0ᄉDf=a@rs1v!vǏ-2 endstream endobj 430 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 435 0 obj << /Length 1052 /Filter /FlateDecode >> stream xWK6W(1C"%4C캧$Zez8wk;REӃ-rfofG~x>w"EΣQ%W0rN0͗cfɌјÀ<&ĺԪ-Ԡ,͋MU]X!Iy=mBz;QJ>G7KD4ѽL`AQD?{8{9e)T0}!"?2SBX_"%I kZ/o:aIf6m>;[3ˊv.$Z;vtwЁ?àMeZUȴ'K.U֮N}`6W}Nx5<~Q%0U*&$&4ݽ?_7aɑ#fӚegү6䌊Tn-NfmfB%d%1ѓYR GDx]EK4T-^L.;57nzJvʙ˞kqeE%f,$MR :l⫪)c2!0'D .pqx=mR !ه;$)+n4Yrpmo fxy?{qP9xԏ?}D?CqP{sހ`N[Z)Tw*l~QaRP2 l#BبiKt;3K!}c)ںZ?5{K IרEgA 0`]`&(k7F Xo{om3,k=YTd8=ɶ(VրOzڦ6J+@̶@;3)'{,>%w%@^q phy XNqAT߫'?U@* 7[> endstream endobj 421 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/DendrogramAggExAPDataSet2-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 437 0 R /BBox [0 0 360 360] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 438 0 R/F3 439 0 R>> /ExtGState << >>/ColorSpace << /sRGB 440 0 R >>>> /Length 794 /Filter /FlateDecode >> stream xWMk@ W2i<ׄh!B!M !ݖj1؆^$<gu˿]uy OVZkkuްUHAy v?~}txnw0`@A@@LO^ǺyOаn\ad+\JT U%=ZecA9Q"m\tNZ.Rٮy4K,cࡣ2Fђ *\z{sሔ2-@G)E Bkk$zS2aQYɝqQSAQ0WEt v+RyLe(%( bBQ9/lWR0S%]dZ_$Vϐ Qt 9U[AJ${)jb_PHHŮHFRO {K)$v([@^!*k椤%q2bKH9yPQ.&~p`12xp^.Ғk}8> @]`,4=},eQd,U,2V ك> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 431 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/DendrogramAggExAPDataSet2b-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 443 0 R /BBox [0 0 360 360] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 444 0 R/F3 445 0 R>> /ExtGState << >>/ColorSpace << /sRGB 446 0 R >>>> /Length 2481 /Filter /FlateDecode >> stream x[ˮ5W2YR$ Wb@$ E ^)[Q[fGvm6:|}wO}dvÿ?շ梹'.]/&-db/^~>mo}|?>z~f{uflJ01nXS{Qom?oz򇎖{f'ޟ^OY7)l^ll~>Idb4^)\ ;\&|}%>D5M;lB[&{|Z{R: d"u?Rb/|3<&'`5m26i&x=XMLu*M>jhRE-\Vf jzC{HH1iIqTfnE|{OnA%YM(Mǥٔz\ڨ1Xaiok 9p5@*\@7rtނ,$&7j0MPF, R=\i# ZjJZu֙%UyC9̫>m!ZXD+,`aa4:.</,qdm0M,I}Zsn m HڀF!RA @"̏2{(y](P>Us>ͫz7Mzo78ap0{dG$>ڶ xw# i^oht!{؋-(B6Q ҕVځv!ࣣ8 wÀ^>r!#q\D߅/ȸ/:S^`Ue3Q _Pq56vG`{ϋ'})20T?WPy]L>˔b05M,`^:u}0q`^D#u睘Q@?V { hv=wua5"k\H!: 8ߵp&ɷm m̭=7S&їuxo|xi ^`^WKz~w  y]_(P󺾙,lU}Su}=0)`^׷)߁םVJ$XBHr, Vٛ vم4Fݜ 8*tyGsBƭ"eo힢q"9{؄$2h{oa.Np!2>Rh9 xg!  X`筓T0?>@=L0LW yU}u}z`y]_[̫zo)21`̷koU}_q}D;Orq)&k>RY-NH  7M2/U2S)oYȢ#Dڪ- `_f|zJZ\Mkk;Z<!h"$2h{q)NaOz:PA}4z#g{o>D1= 4P>;>;=N텖L[.;@ tf Fbp RFt0)e+-^fx䐋)hhs>TAEy]Q>Qu}1MX ̫jzOz8a10˔@y]ߦ_zP >59!]) Va-{Snt`-Xzfk*,n}{Ȉ_H4G^8u5XNd..<I3^/`wy]?Fz:Al_5ˁ/ ˂?Y jCzܙ.EP9ó"^hۏYRE=̫y4+Pu}{Q0+%D=_u{hY#9>7r9u!Vkjn""J""逕O(xB+}1 ? yJW?KIu#ZKR˽ F:X(}2_TE-Hg ~<"$ endstream endobj 448 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 314 0 obj << /Type /ObjStm /N 100 /First 888 /Length 1557 /Filter /FlateDecode >> stream xZKoGϯ#>dU,$cX>gfzٝEY`7h +0鮮Wս%v'39< k "97QhBaMZ{X"dHhBA`ybyL!,O0B21&@ka-0PA w"  B9Oay0V 4Paܰ>r{y0zˣ^>1d`Č^S6hA:zvaAD!APe 9`y qAo4$cԩ!i\,%$%J ',G<`WCdNx RqH)-#e' 89 VcNpx}xbMߛQ;on9y>o٬zeU/,fV/O$uھ'ʃUۅ]-( X*6W}v nH(ՆK] OڪP)}Bq>7R H+ۅgS8ѷ޽(86>7z`NMIv"l!P# endstream endobj 454 0 obj << /Length 907 /Filter /FlateDecode >> stream xWKo8W=I@M1EnSl/E9(@$˕:;|(9Z84|! B"D^!"Ї4Q 1M(M1 iITMK, %NY=˚|LNeQyPg{d?]̄xY\v1z?EBEĄŠY}%hSa+w &15 wtbF; dt/H wXS-hXdnhHOFc5v(7c; }vPg*2:B Yx$J$ɖ:oXP;\kMJqe߷K<=dY5o a&I϶g Wi; fusrQEYAU^SM5ͮCewծvt]yw\P>y(CmZFH\ jC$RHݚ tRċ*Fj묞(cph|m_QZlo#K(oG ApwCD.d90ƣ =H}PQcfM8TTHQ7c;c} Cm#S=YG8b`IaY7vqiC&fϧ 1GVGZtT9eΑ\bu?zǺ?K ܐ/n3̜nB$O0p_]}> /ExtGState << >>/ColorSpace << /sRGB 460 0 R >>>> /Length 45356 /Filter /FlateDecode >> stream xAr[ez@ J85dag# 9ycmbVeq??o_??o||ϯonW/?ǟc~綤oK{?Kq{N`~!}oYYfGˣs9ׯݹ??ޗߟ?~-_| H?pyo?ns}z_/xݵ?<4}W>=¯?yW>=?}>[igo|.s>x>s{}~3>Y}חǗ`{}~I|۾"wyQc{?g>ܶ>owwy/kq|_;n?ZNv\%1|,_s_?>G}=qZn?_KS{s}ڟ_=}׏?ڷQoi{ԟ~|nԮ??~oۏ_C-o?ퟏB/_<ЯOz ȿڧo^.nYχ>_|$]Oܟ?=m{WK|?˷O,> ?3>^./s>-w}soY~z[篟dlxyn}{ct?/Jxxݟ? /H;g$;{?n]}}ھ1>>^<73_όz|EN{|}޿+ i9:7_?߿i9Z?n_q~ΫvX-8Z~rd?b8Ns'8{G\ͣW,o?g_H4Ě;Q}ڷ1e[y.^=xz.1ǞiǡK--ǟK_<9]b@xnų[*۟wxzsgC%|s2G[<8)1[?˜s.1G[<4xj.1[u|\s9q?gN1xcn8\b2Qs?{_±6a-+;kY8viݫۿ$Y4fQ8 L+̢ pNpӔW_kX`?|۷u /| ԗ{vϷR!Ih&ߟ n啳ӭl&=iMtZ'.&)0O.Drsyx`%:v⣝8/^x[ir6LtąD'0 |čD'0 &:D'pB`N\Lt N`8q!0 Lt'.&:NąD'0 \/*U57({YV({h{Y,i]Zqˢ8͢9eYT3QOT^&N3Qޙ(k'Lޙ؝b؝XDYKtNTNTwL]&ډ7X|21Ϥ92/5LDDD,;Q;QKl{gRDKl>x&gDa|y+˻ #zrybc&9LG"舞N\=Q=QMtDOTDOTDDGDEDE4=Q=QMtDOTDOTDDGDEDE4=Q=QMDGD%/}~},D]!ZogJ D5\hrD)iW\֯sv^`k`Lt'.0&:W0 Dī^񻆱?(0~{%)LƉ/ ./?.DrGvV.oes\&ݼŸX`CZLt nw.Uoe#0!p&N]bذ|~d v˻ N`8wGLg/\N\Lt..g\0&~n~ݮ»]܊:55i}čD5iК&:ZDuBkӚN\hMtZ։ Nk:q5iMtZ'.&:NąD5iX )*Dg : ?>&_g :lXT΢At-NkEc :At9Α8NDg7QM\hMlΑ4Τ77w&4fNͤ7wnbn&̙ɭ8sf09L DqNtO,p>9q>iL 3i>}WNTOTϤ`L gR1|&Ù8'*'*NJ뉊h#zry˜0hc000&:'~oLSk& gRpy&4"z":qADEDE4=Q=QMtDOTDOTDDGDEDE4=Q=QMtDOTDOTDDGDEDE49˾n8BtY6,ִ,EqEs͢8f>ڂ,":rY6,;,{&h#:9˞"zrXeϤ8fҜeaL,β8'60f0N`̤1qcxx+`̤q&D1aXIc& Ic&cb\LDqcØ0N\`LtƉ cb1[LDqcxbCL8 cxbwX=XM\Kt `X6q,Kt&.%:`D,%:`DlXMN<^-/=Z,S,h Ufќ7 *W/TMSҚcQQ5 ?MkNvEwQJt&:J':?im& Ji-E)9ѡIIM& Lh2qh&.$:4 43YId@3 Ln 4 Lh2iyL:h2qhLhDfMbqqL#3YPJt JRؼx&R4qA)9eP5崖(%6TLZ&im&v8v#n%:vD.ѱ`%:vDn]cM\Kt v]c7q.ѱKt&.%:v"~{v]b$ů?bMs+֞^dqW'~4g-VpҊ_t ƮȂ݉] ~}OT?a v݉݉]%vOƟII3Q ?|y2+sċo_K# v+N?īϟ;OK/RL_4%0f|VLDDD1 Ǣl `pmlZ,Z g-Kt&Ver>\'~+ v v8vDnb]&;vzg%VeҰ6qa-YKt&Ver+Xˤam& kﴅĆTeҰIcұIZ& k3XYKt&.%:kąDg-YXIZ& k3YXKt kZ6qa-YKt&.%:kĊLDg7DgmZM\XKt kZ6qa-YKt&.%:kąDg-Y%:kDgmb? kV6+__2X,MkEcQa7Y8v`7MKkX{,*fMkX{,:2qډ~KlBUbCU&Nm~&VeҰ6b-L kZ6b-[Z& k3YXK)kZbL*2iXˤa1Xˤa-LDlXM\Kt`4e6D,%:`/M>5_4\Kt&Ve%:va%:vDn]cM\Kt v]c7q.ѱKt&.%:vD.ѱ`%:v~=^^ ,. |zʢ8eNpWo>2*, P9iy/eq c71P.U5D1aQ=QiMl!<DMtpOTpO,!>Q>x03)!<9L '*'*Ήs||888':'*'*Ήs||888':'*'*Ή?/+ Y48|X8i γhp~,*g< WNkp~,*g< :3q ΉsbLs2X؀; Lp3Qp_ϫhDi}7[YNt'V gr+Τax&已8'*ΉÙ4 g0t g ؀;D7X|$L L7<gxbs>9q8 N\Mtppg|zL׷< L3q'V8g8':Ώ8':Dys8O\pNt ΉsqXᜉ8?s8O\pNt ΉsQ=QMI3).ўҚ\=3QZ˗_ G\Iq6.hϤD;('h3qOTNTDDDE)Q:Q9QI||I|>}~DDzNՉ҉%LKgR\=e-Y;Q;Qvv耝%:`'*`'*`؉ ؉ Xvv耝%:`'*`'*`؉ ؉ XvvXl*f6 4*A鱨PE,G[P֠4 EiZ{Y4(͢APQJt&:J':?WPJlPQxy6k `+2iXIX&D,QKl{gr+ˤ8e”xSDjbEU& U4T=&U8U U3YJt UNUS5q*ѩJt&.T%:UNDDEDgO3NJR JRbO& ?8?~D7~DgOL\It~ ?O3q'It~&.$:?ąD'$:?~Dgbsq?~8,,G[L+>*e,G[5b9LShҊs΢8)NąD'%+& )E3qR&6[5+R]XH|lLˍgLl~ULH߲ )RLx4h&7%%IItR&6Ϥx&TIIlHBJL\HItR )NJ2q!%II,>tMCL\Io,D&9̤'L\;*ѩzčD*ѩPT%:UDjBUSTM\Jt UNUS5q*ѩJt&.T%:UNąD*ѩXPŽRVPu_SB;K}g:kYvӌ^g- eOgaإ5}Nh}Fc3ڙ(kXL >'g|ӘgR9yωvbwΤxsb~FT9|(&h~;0~N^19y3Q.?qh\~FD3Ѹ5YHIӍ܅]x[y_n{hn˞nš )3YHItR )NJ2q!%IItR&.$:)ND%3:D3'. $:‰Jg4=qn p;,p#:܎\B|sq_ yDEȗwa!AHt&. $:ziˇ1_ߊ^|y+ 4MC3q&Q/yY$:?~DyhPwQvy{z{4G)MQJ()J4E)PJ{qֺ|-5QωO /kyw:n;QO`'^ vN`.(v{֞Z }7Y{~HZv:v݉7cDD?x3N3щFՉ/ԽWnneALDGDEDE)Q:QQ:QQJtNTNTDGDEDE)Q:QQ:QQJtNTNTϨL\ '*4'dМX@s&484'*4'*4͉ ͉zHljz8QO‰ ‰ Bpb™(ޙ8QHt&N^>L*<~ӂpRm!e2Iy<2<2 '6RD'e_;Hl3YHItR3L3F&NJbsƘBJbs+<2id?Ux?v+~D'eBJMA2lϏ?V/=߅DIsɤ9<&v߿st:g&:D'pB`N\Lt N`8q!0 Lt'.&:NąD'0 hD7D3D؜h2q&[K{y3q9$'觟DjBUbsO?r؉OBąIs }{{\q֦], ֲK,㏖oMsҔ4emZZO<}NTN_wsuNTNԓRvvbZ& kgrn[/'?oP}NËfR|xL'?)=ߘ謝x3@L =XVg.m9y>'U& k'H4LDgDeDe-Y;QY;QYKtNTNTDgDeDe-Y;QY;QYKtNTNTݙ(v'*vwD-[N)LS()LS`&~ \ztvLtpg0&rB`XI>ܙ8pE3sMı`BOt&mΏlhcMaLtƉ܉܉d%6d,Kt&.%:`D,%:`DlXM\Kt `X6,,{z/X>\Cc%??_,ϸII+>E,4%%MIg4#3uRҔIy:Bӝ[H9QIItRNTRNI|:)z+WUK}[qNT/L`b|LwDKtNTNT_#{[qN`'*`'*`ͻ]gRv&k3:LDDD.ѱ;Q;QKtNTNTDDD.ѱ;Q;QKtNTNT\6q݉ ؉`8`'~zY^XK|ױcwgYοpz/p˭'-;\D-D%L 3ƿ_ / c8mr/X`0Nsmq8MOU.~xᗿi' Otw}1aLԋ~: +2/~&^bW_Ɏ큾/8vDn = n' v7.ѱKt&=?{W{ ,%:vD.ѱ`%:vDn]cM\Kt v]c7q.ѱKt&.%:v#n%:v v3YKډD?%i-q*ѩJZbR& J8JD=%.$:?Lڙ8UND?ؠILl JVfѠ4 7mg~.09= 4iͣpQk3y6O`Ӛcѝ2q~6q&ѡIlN`3YIԋz'6Td⧪īO<9UeҜfR2iNU84hDfbuV2iNU3YI)4MC3:UeҜ2iNUIwġIlMCL\Ith 4MC3q&ѡIth&.$:4D&ѡ@$:4hDfMC<MC`% ݩ*gO`=߿T5D*9Uͤ,L|+/|+/˭8D?M\N`Z6qa-Qߕ:QߕJlןRuyќEX`Y(`ߜ(NUx<_PӾ%8XNkN`Y',6m9&*/zKtOTO,̤!Lؙ ,9Iq;}g,!L D LtOTOT:gRxi_t `Rz(,^|0^߆6KSݴwvqݴ݉JՉJUNT `g./%^bWz]`|TLJɎk}Vcfr{cfR|ěawbwο/|dDLDDD.ѱ;Q;QKtNTNTDDD.ѱ;Q;QKtNTNT v'*v'*v vgR`w&]cwbqYLX& LD5: Τ.?kNT#fb8vgϤĤ9ý#X| EnWn״iqM\6 ?,Y{iڴ\6 ?,8͢:cMsىZbq0D}`&33܉51kXΤ&&{UgR\<,Ot{Ugr{3)ޫd,%:`z 1߫:PYk&e3qf(%:JDGiR(M\PJt JR4qA)QJt&.(%:JDG)Q(%:J(%3˂'6(e(Ml. NlPɂRX2iNkg^L\Jt_ld,Kt& D=(MPʤA)T(|hJhPh JӊKY4T= UӜiNգ-TMs5T= UӜi UEGU&NUS5q*ѩJlBUSP5LĆ,T%6TeP5L2q&.T%:UNĊLnU4Td*T%:UNąD*1ĩJlBUSTM\Jt UNUS5q*ѩJt&.T%:UNąD*ѩPT%:UDjBUST=FUSP5ĆLU8U U3YJtfRQICU&NąD*j& UNUS5q*ѩJt&VTePICL_~kZCUUY(UӜ4=?E ,4jZKpX(`iz qSTT͢LDDĂL 2i:ĂL^,LlP:3Q3ҙ(e(x3NTNT B݉ ͉484'*4'*4͉ ͉ MCsBsBММ$:4'*4'*4͉ ͉ MCsBsBММ$:4'*4'*4hNThN uͅ3)9&L h2qhNThN,ɤL hΤI֙`^LtNTNT3)P:}+ߋGEL,`bAiZq~ʢ8?Oi4GL+OXP(MkPz,:2q JRX|LDM+|L3љ84`IL3)>IL3qo bJL׏l'It~&64cfRfRYKlXZM\XKt kZ6qa-YKt&.%:kąDg-Y%:kDgmZ=ZMXˤa-gmbZ&ZbLĆTeҰtbCU&NąD*ѩPT%:UÖ&-Mt~&^~GYX4Y\X,L+~W*XT'Y݆Sh UӜi~Rzw(~W*Ǣ,,^ՙk_uB`LX&`s93ie8sY&Ň8esY|c obs 0>D7w&>߅}淸Τ-ӭl&6dA4MtD'.&:DG4 &:DDGth#N\MtDщ h#:qA4MtDqC4M,.Bf!OlX!# :E]XhMԏv"Vf #:qA4Q/BX\dA4MtD'645iК؜2).Bf)V>^. O`;SEi tpNsD їS競,. >}M_6<&D=gDDD=&)D=%^v&y|a-QYgTv(xwO`' ,/O  '*&~'(.MT~~w^Axw3:'*뇤 믂ss9J'*J'JR)`%e(v[1_ߊr;'4]X=qv?OMv^,/uBD?Z9`⟥B4'ph =vDZx//IKt `X~޻|_ [q'.&:NDoL v]c7q.ѱKt&.%Dn]Y^Kt&.%:v#n%:v v3ıKt&.%6e`7 LDnb]& v4d.ѱKlɂ]c`7 Lv=?ÝIL.>,QO;2qfPPQ.g JRbLDGiRbR&Qz1EFUbCU&ND?XOt~&V|hnnNգU'Y4'Y8k6Y=4gmZcQ6 gmh\}svD.OkZ UNUS5:e6q,Kt&.%:`ěM\K]< `D,{ D,{_o 7bLfO4^wo`%ąDg-Q/,&?=5+f!OV&NUSPۨJ2ӝߨJwA.,T%:UNąD*gfPT%:U"_|~ J]2^|+~DlXM,{ei iFiRtsAМfМfФ)4~ ,0hN3hh>'g4hNTh>A P:QQg4NT>|Nh|FD3?9Q7a3?'*?v,+?9Qg4~h|OgR>'g4hNTR>N{R2'.@](NUOU#D%3)/mNUg|F3~:T9yKgR\B~~;91>؜>'g|v&g|9yv&g4>v Lh}FcDe3kX;Q>'D>'FՉJg4>QubEՏυRu X,Ms9`6GQ4gmh kf;cYc7ͱ{43:kąDg-Y}{:oM\Kt ` `8`DlXM\K)`ųM\KtGKt_??Iq~~~8k_?)}N^?)Z''3)NJOJgmZ DDE3~R~R:34ҙ'ω/K+:: lZYY(v4.Mإ,,S,^daYDD1aes9q2ѹLt.'.\&:ąD2ѹXqIe&ąD2ѹp\&:.oes9q2v/\&:.D7.ĘIsb<G4 IL*D3qDщ4f :DG4At& hbL*D3qDDg Iq6̤B4G4A1M,NLщ4fN\MtDDg &:DD3qD'.&6fb'3q'V0f/yNˉ?.\>Z,.g\>Z,.g\>4rsh .gpXT\΢r es\N\Lt.ˉ es9q2ѹLt.'V\fps9q2ѹLt.'.\&:ąěr\N\L]< ąD2ѹ|čD2r&8ąĆL.gRqs\N̤2˙,\&: 3YLt..gRqIqLˮ4]Ϥ5֙Tf&6>&8~> h~Frbe& 8.Ć˙,\&:ąĆLˉ 4gΙTgLZ3qZ'VfgDGtb߲Ve&黉i471MMLS)/c8aL+`̢q Y;iDD;O_#f\&:'*'*g0&:'*'* cx`V 1%V=8mjS5ͩziN4(MsmAiZ, Y,,6DlXD? ?O3q''gOL\It~ ?7'xx~ ?O?Obq.ˤ9r+ąfR|8/3Cz_&UXIt~ 4M~2?aybq:⬕Is:LV&G\ġIthq&QO')q#QO')q!AHt&. $:W }y6DrDx}.O[qR&.$[5c@,$:)RD'ebE:= 4i\XQVڟ,9UӜG[P5Ǣj~~GIt~ ?O3q'9eb(B;UoEͭ8kg`c7q.ѱKt&.%:věbM\K)v]c7q.ѱKtq.ѱKlI]&zDgmZbsʤ9Uͤ:Ue⧪Dgmbuʤ9UeҜfΤ9d1aLlN`3N`4f : LD3iIuZM,.XΤ`y&n;q7Mtp'.&:D7nxn/`y& IsIuˤ`y&[YpNt oe9Mkˢx/ =Nkp΢x/ =GNs4yVE,Pi '*'*Ήs|b8gy؀{&g&:'*'* n{=QMtpO]< n{{;qDLpϤ8]2 X.Ϥ8]f(ÉLLty.Oe#z"z.tyb0fx&gRIs<D=]N\N'~Ta<8@#z"z"舞X #z"z^L˘'eD'y&ř3ૉvggDgDeDe-bڣU͢amڣU͢amڣ-Ms֦9k6am kE,iڣm%:kąDg-YذILDgmbZ& k8kDgmZM\XK)kąsM\XKtGXKtfRIZ&ąĆLfذ6b-Lf%:kDgmZbZ& k3Xˤa-Te%:kg PPICLDjBUSX\`d*Ѩї6q,Kt&.%6e6L `X6l./EӴ,*fMӜGk>t6{i `h{,*fMsm,Kt&.%:`Lf\4=8v+2iı`%:vDn]MKt&.%D.ѱ`%:va%z. L2q&.%6e`7.>ߊ_J=ѱXaI]& v3YKt<|/>?.>߿ .oRLc&~]`Ic&cՅg@ !N\M 'D1a0&60d1pNą3q'.0&60f83wOt'.0&:ՓØ00΢1 1Ma˜0Ns (`Ec c8mDD1aOǃb֮փ Z|dD,V+ -XH Vb[ 1   GƯ`c Zۘ` ZX-aim$Xk6Z\8U P`AV`AŠ8oΈˊ૝xrB݀on?)Ȯ", dd XȮ ˮ nBv7]A݀ nu_Ȯ nBvYvYvdWeWx߰"3bo8#, 4؊l]?o!'cgx2vF'c+RȮ ˮ ޻,Z^Bv]+<:#)VƛyYE]oE%wU=-B%)VxpFXv.*-*"bcAcA-Ċb,b,bcZ々 ϵΈ\kE?=/B! 1d1d1bV8q0c1c1`+AbX..'Y(+b,b`8!* +pBTXtd7#feWe7!nB]AGv3bnFPvYv&DdMeWe7FeWe7X, QvYv&D XnB݄ƃq*1*AdMhTv3bTvaMh<+#(Ne7#Fe7#FeW݄( QvߐyQv t*AMhpaMШ*Tk3ڄW0e6!eY`b]6!r4~aKUUU5!jBIӊ&DUM*ȪxSFPUYURՄ, ueTt"1z3y:Б(d7n0c t$J3ޏ ~VVX+8Q1V¨GHc1nX8`y tBGv1B+ Έ1:#qtY倅. . .,tYuYu9`˂ rB7eAeA倅. . .7X 베tYG!]^ϥhAGq$:"D :Iz:rF:rFH-h59#[A %: ?;d81G#b ",܂, z­ 'E 4󀖜+CsAYBYY.(" et]V :ʮ+{@Kq]9 Zr~XXÃq͹:ל{֑<}Op7Vw09#CNƺuJYY,Ⱥ,ȺeAr8`Q* km@,Р luhHE(d7`!,, ~:]z 1$1^/C?K,т, QD D'ܨbeEP KtBX]tt9#.g+JtBD'\tٮRv ԕr. W <]ddX?/D=Jky=GXk&&DMhȮ"\]NhEXpgvF9%lmsA󀖜+ȹ", Vr.r.hJ ,4\xssF H\1XTIrD ]4޻uMj-cAG#bI"P\1h"+bcEX6Zk\EHqDXV`UŘx. :KqtYG#R_\QXT1VXb#Ɗ,XcE1#ϋc1C1C1b,b,bX X 8q0c1c1`'D1Nb,b8! qB(Ƃ, Q '41ӊ.'4AdN鄨˂\NQ}:8 m'Dt8#g8` QiEtFaA]d]NhT3b"7!W%:!J KtB脆D+k ֊.'D]Nh VĹ8# Q1Xg`3:#( QZu`91Z댠. :3`ב'4X`иC8#+E`Nh * +pBc0vFqcgc0", q0v•Y } 8+pcc XX7V(p0V` 8+pc  ,XX8` ddX(Qֆ pBڀ ,Vp{ޛGv#bɮ"b;)dWe7%8n ^Eޛ Y`+"F YUYU:C3b Έ)VVR ++h{qad {3b{3^AޛVUAc tD"?[;e)!1> Zqwf1>J⌠p%e'\1/Wbˇb|@x4Ì,Ř?RĘcR'D1>JyXqqX1e)Ƽš'D1>Jybg- 1n`,X+8q0 1bŸBc1n`,XXX8`!Ƃ,Ƃ, 1d1d1X qB1V8`!Ƃ,Ƃ, 1d1d1XVMqzuBj-j-HjВhEV%JI~ 7#. . .,tYeEޯfeA'D> ߯fZAZAڀdt6"F y.ڌX#&VZAZĩ]AGv#|w=8 ݹ`(d$NXȮ ˮUU#~_IkH^ _="{3b{iY`+H{@RՄ~_Q!R4Kicc) RX!XJ6VHi0`,R4Kic ,TT4`!,, )d)d) XH#,TT4`!,, )ܰZ+ڀEVp[B)jmD,TMEX4DSЩ*3b< ,T#GJ#RHG>"?9##:"F]A]A݀ |#3RpUk|D>rFGeWk Va)c>"\ h c>"cH!8ZT5a!B>"\k XH#8RKJyaU X3hS\.{kPk+'%Hvg , ,  xPu9r0e1e1`.'D]N,Ⱥu9! rB儨˂ Q. .'Y .=Ȩy. QYZ'DdNZ'DdN-V?tyGZ:` Viʮ"\M%Z%:Q͈!ъD'nB re7!VvnB݄(, Ш*Tv3B{@ZAZZ :؄(lF1dWev T`"'\)0 p% y2p3krBC3,Ⱥp˼-u.\X8!pb WВm_BvpX`+6 l0Ƹ+5\1 ) RBJc)mRARAҀ ,TT4`!,, )4j ph h,DSESE3`! fB4Z.DSШ*p3By@R"T)hp3fDިlEH? Iz. :qϮ" f6`!}!M޶ $]/_!,FĒ]EXvYvZ#* X+ +pE 7!pnBcqFX`:wfVиV{ky 4Uk A1!+RqomFX`+h{3b[S lB`Y`Y`Z/_!6 lcc X!X`6Vl0`,6 lc ,VV6`!,, dd X 뇈Q?JkYkZ+Z+ZZ V6`bZ+w UU VR*w&t3"~*"~FOAG?q3"~ :gB?T3~ :B?Y?~ ~SG?q3"~*)٠ ~]k DGUaU h"EeZ K#qP1HxlBҀ |ʈ#qRAҀ taXJPJPJc)C)C) R*R*RT T 4X! QJ &D)MR*R4!J KiB҄(, QJR#A)MR*R4!J Ki4!J KimYJ &D)MR҄( )UđҌ܄8$WE3!1DS̈́hfx6"γ3bHiFg+C}&4T҄( )UđҌ&D)t4#fĐRE)JiBҀf4!p4J?yfE3%JiBMÄ́( T͌C4aLp`&^s4#*HiFPJ &D)MR*hIϥ ) RBJc)m`,XJ+4Ki0 ) RJJYJYJR*R*RRARAҀ ,TTБ҈XRK KiBJYJYJR* ,Tp[BJYJR*R*R`%,FĒREXJYJR*H"FRAO4!9-TMEьH!,xOh :K4ad h"h*fD{M!ϗ-"~FOAG?q3"~ ~ ~,SSpEE&tDSG4#R #:gBG)q2"R*J)JPJAVJAVʀR~JXX)R6V(e0V`J2+ecRc FJY8ZEs X dd X gB?Y?Y?~.W;NkT?M)OAOAπ~ n OAπ~ ~ ~6X 맠fVED Y4Y4)XYZG4#R f@K4qDSG4#R f@K4atD3"ބV3kiE@<#8K4af+,J)WJ _) )q` MdMt41"*lZ䱘Jy.< < pXBkM674qaWXͥDAĀ& & &4{ M ƚ5B&cMl`X+41kb0<6VTckR?AV?AV ,OO/`~~~ʣ WcD dd XH IxQ_B7T?A8o/ȶN MdM Xh k kb& & :UʈXUJE93bϩH!NESG4#R3VgmD,)UđRE)H!,0ۈlYJ)UT\ hU?qTGJ#b UTAΩK@"E )4j@.ό $RZAZAgmD85QEhDPksqSV :REJiDJ"bK˂˂92تcCC--%Z %Z %:KJJt0h1h1`D'DN-%:!J KtB(т, QD D'4ԛ D'DN-А茠D DT"8­# wBnA 1󀅜'D9OhU}弜r>GPsqe5'4 #oq͈bEX'Yc Ox"oh| QfxkF*'# W'Zq 9OhGn2r.5#( 7*rxkF7*ɈExMFPYO ΈvXEgx;lF>-x;lF*bi׾XXÃ7Vhx0`5<kxcc XXÃ7Vi k kxBYY..pApA :kxBYY.puPkEnN-B(b"Z++wp/b'#+9mY^v] r5G d !ڂp p?4\zv`o ܞ#+("Gd쳙(.󀞜+zo-.ZgyH+eE(=ڌ oUPvA'4PH!+9\a[9/B!+9QyBwfx"λh3sފ5rKX#OC- 7B+4<kx0 5BÃc o`X+4<kx0* d d Xh k kxBYY..pARRHႤ󀅜 ,\p!  UVd[l' r;8W*܂\t$:"D+-hAGq$:"D cE1Vb,b,bcAGY߻Q`E8 XV`AV=VӂN}:";SVd,^0KYN ?-X #)XN}:"|+bcAGq֊8UkEjP`AV`AV?/՛ocCC , , X X 8+**pB'DdN X8!*pBT`AV QY`%Z8!V &4gXuF ]Vlmu9!겠1t9# ]N3 <#ƀD D'4ygKtBcwFPywBcwF=ogpD'4y+jy'4ˊ8 8[Cqygu91;"Dg%:!ъp83;#X1Nh Vx ]Vdy_1~gPkE7pjVYC3bH"DgĐ茠D D'4~g%+[%܍; wcpcX!Xp7Vw0`Ӯ#u*, 9\|iȪ _ȹ V\V_VyKp;!y及^-B사F[W˷XTë/Z˹sd(z/kǝyϾBW"_F%"WJy]pPmE+ I-ZwUkBW3[g8wFaX VbZВ}-X!XD7VHt0`,э%:KtcDcUƊu0`,ƍUb,b,bcAcA々  ,XX8`!Ƃ+bcAcA々 :UkEXZUkE6Cq$:"VZmMj-U뀖D+H"\nZ rZЩZGĪZ+ , P`A>SHN}Z>Gsjي,SeAe pB'j ~ռo _fd ",, wJ`g+=_+ԧa hէat)VVxܘ"J4e%˪sY8&rB"N}:"V}Z|IVB々  ty}ޥX X 8q0c1c1`,b(b(XPPb8! qB(Ƃ, Q 'D1Nb,bhNhѬqB挠. .':rBcA#'$ 6p[{؄(⫄⫄( )MRАRE)JiBRA҄fĐREXJb]6!ë!1DS̈́( Q4Y4C4aLhfF TE3!fBMAG43E3%ALh"\)Mht*#;y Q)], Q#11#<*UՄ89j3I9R8ʈzR R&DLJ)J叿?ݯ|ﯿ.Zӯvnri߿v_?_[?doгFN=x?{#{0vAӳ>Zs˼];2ov/#{oM{]Sތ]Hʙ}zخ>/سw#{kc{6.zXK;_vZ6~~ߛmo:ge)W٧~Oci5}]v/}kW}]4cߟ6W׏{]nه>&׏vܳsy>ߞ{9oce޶q~q}6G<mGYc{~ַg/FvSز~&>τ0G567<^5l|=k|WDGp؃<{i0vL6>+G~ C8z|o^eq/zޞgp}l1ȾMo_>=φ>|%mm܇ﯣ|oϳߍ꺍]]}gÏaz8>߿y[CǶ=\a}n|Wsm܍kwOnm} /_v'|}{ga{5skjlyϿ<nk|͏}Qc?kCs_cÖ|<\ayo럏~}\t{//oͷMvyﻷ}] <ƇݮӮky|}uv;EU{u>e_sY\~Xq׽skn^n_q|tP/*z7ZE]~3BYPn}?!{"yT߭JW~2(2㲟 #*yOt療 ~_@}XEoI>e$P)e? ge;+_,[d\@}%@y@yٷ>-W;,_m.cu}z}Z~}.eaq1n^>ke[F۠WϏwP[l}|_,mPy 2{}Xe/._տ,mP{ *h_-^Em˿䭲@e \f/^˿.~SF 2{oڨ^e/nev)~\VTF{5]2nV+.L}+=0WٯƖ-uEmmwLԕe+a s嶨\.~͢d P]gC\%^f܋:~Mb s5~FZ>x췪wrwh&Xu___`11mNoNx-;;z}~=.,O<~ ?sWIo:o''o53?u?Kˉn{٬;Jzku?g1iڍ' mٙD#[~hٙNv#)>sNtZ6mg}<剶L[A#[ףiٙNv[)>vc?'bx4d|$N<|C·,O >~Su;;3VS}':ۭpO;mwmyk8)nS3o GOvt歡_μ5 ˴[GÑssڳ;?_5ṣOkȟþ}(y[C_O>ģȿ9&;[C|?K42_ȿrL\>[CϿ1LǗh8/|NǗh>s5̧2_p_oB3}9z~sȿ)j>U ==h8/|h|k>o =?)yj8/|?>o7z~s%=[C|h8/|-|k݇Ǘ˴GÑSS;/|.gzeڿȿ9h6o =?)?bX?N1u/wS>tѐw/CC7)y834| d=h8/|_yn8'~t|&|Q ^~+_rJ+gzG84>}x|TC|z~ml>p_ou>/ʗ<> m9z~s=go =?)SVÑᶍO5=||jCϼ5W>史/|ʷgyk>>; ۴m|{P9z~ޞ}p_ߦ;z~s>3ϯm𙷆#ʧ|{S=z[CϿ11p_jJjZ9gCb\i4U)i*kpA{ǯ ]OW{@c1nݧ؇ڳ{>-}U_{%xҧXZ>}>-}U>C>Ţ=ҧX'sKǰn -)\>_?>[\61nCKY>nDunSh"8)V}|6qnS,oFӡO=hҧXT4qnS,oQ[йOqcb~[&-hh9M25sch9Mzް1O>鳼5O>Ū@sKbǽ=Xi>Ūob|<Z>Ƹ-}UKC>Ū=ǹOqc~ҧX5dž>Ū5e>Ɩ>ŪsK1^n`WlcKb豏ORcVq~S -)ZNS>^0cҧ8szթsKbՇKuҧXqm:1)V}|M±O{:-}E[{pհ-}UaI>-}UӱplS,o_O+JwҧX\8)N} {VؾӱOk>-}UphS,j:1)V}YX>-}Uz(֩sKb~̸} -}UchShO8)}n0ҧsR -)Oҟ4Ecw{y縿 -}w玆>-}U{iҧM5Oǖ>ŪobwŪS빏sKbt<[>Gn>>ǹOW>-}Eϫ븍 -}UtlSxٳ)}W}1yhSCKbc>-}EϫqZ>>ǹOW>-}E|<Zc^iU?qnS,sCKb|<Z>thS}>.{ҧXߩsKb\[>3?Ɩ>Ū1)N} Gϫ;sb} -)zC> g9)NezG' s9)V}|bU86)}l86)N} l)V}n86)V}lA>T:qnS,Z:1)V}a!C>Ecb@|oo?=_'~q(?' endstream endobj 462 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 468 0 obj << /Length 1044 /Filter /FlateDecode >> stream xڝr6/XeqFl2dUhlfD|+%9)`\2b}ZO͗o]z3K.Jbus&%/va y٦_<>W*{}V˾/-J;UMsA+Y& \5%‡/(O;UtY& J^V3NJeBM,ٌh\;Dpba`dÿOލ^>17nhnxÉc*=/cPu+л=v+vBͩ'-0=wFcb` S>.e̞2LWd4ӡVP^LȘ0- o80vH`fSuN^vt}\hxg@X9\C!Ov(( `r,ԘLZ5&)a F(*Ih|Dg|^{qր:N y3k)JF^m!47 1 Cjt@Q3Hq248lJY0rVߒt>m7yKw[m6 wcPT LcxDāPa;Ʌ RI%7ٵl2&Y$Js6)lݭM\P./lrԬ5w WPzT+4x!D  Z5*\wIqbA_f.&ʗ%<'EoPB q|P7]JUmC< *ܜ(b-.nJC36h]`,*jN gd92yxx`E eI)lӭ5oi(N*h]:}?.qkzaV&"vj<Ԅ%1u/ }u- bY#hEb´& )3/| (v endstream endobj 451 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/PlotAggExAPDataSet2k25-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 470 0 R /BBox [0 0 576 576] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 471 0 R/F3 472 0 R>> /ExtGState << >>/ColorSpace << /sRGB 473 0 R >>>> /Length 27448 /Filter /FlateDecode >> stream xK&n7߿ՙqT ۀu=adIrE[>`׷I&#f=ٿۿ|ߞӿ?|}۶o=_mo|v5_[[}oyܾ}y y}}\AYWq8u?ǿ<OS{oqOmÿ?~|> 9o}u~O.z|FB,k|[CL؟gX:M=Ĵ#`Kg?Gy<ԫ{c~O}<^?~m>^}{;~}YkG/ee z~lu_E%C>>^m~M~}?hwfq-wn?6XR<{Fϗߞ~^/ét 5}GϓIj?_?Kӎy3}wy_ͼaG\x>B|J>1Yb}|{9ܩx; D~)'' ]=C.Oy@Z]v+Ն|)yڼyCiqwSkڭ߇b?⹴}$EߏA?dXSK!}Jyф_5Ÿ꣹5~Tt{7m2O~S۳fngXMX#'açb/x"S)!XFT(OտTW'W;*O*j(=Y^o+JNMdm֔O/b?wi F~KSsT {7a^1VBOEf> + +ښ{= E0׽?%Nɋޢ{7^Ϣؽ04fo .YSe)=qz7S /]&?*.ug*GVD~5V<S1lأ/2}ʭc"~wX'P46ЯY&jt󼁏Ϣ-էXxS`o"G+? x?ue {WL5tX-P [bUf؅ѕM{P|7YwSEon5 3&j(ymgQV:=5+yIeӣy&6D~P@?w~%H;T]u F~K](x=q(]._hyo=ɈTC`0dExWc9&?1_6[OG7vG#?66ƛmakWڻtpLEi7Sag\?[j~xg1!t%M{맚=}[-!_Ht+cJ0Sް#.ָx"56??u=~Rg7m!s )2țvD 7o ;~hg{t#\2R<;o>WC{tJ%7 5n.;Qs;[qYsӿIߧ}a/%O;f[.amA=8جaG\č{cKDļPU<_> PARWCsߧa!Ց75n.62Y4۳n'\kpU޽Gߐ6Hs[Nߧ]i򆝑7.#h~x7{ {[<]h GP߱kq7eFgMYeHe"_H{/lQG\!Ҏ[κOqb>R7%~Vn~و|!@a|fdcGyÎ[wlGs/dU l{`Y{{bK|]&}cxi'q7/ϪYvVP;fbּ|!yq54`@^+mXfv;oKmIf{K{zK{T/=i+)> ;o2|V#7q$xkN~i Bo/R\aG\q^-aiM6w_ge&5Q~> _HCQӭa+) ;oaP?Uӣ;mjk'Y۔}})et|}]ioQް#.ָ&{1MҍwzP~}!y^~qƝcr꿸氮*F6:%H}!i]su1mj ;o;ۖ7ԶtVMl憵Nmqݛۡ 7bڻz;vw_VϪ6QKk:`oi6-_HgB9lKJ{^>Ҏ[f9֣wr\{yDtOJQ֠a trE[Rړ,v7xR,gL燿V0h(+z46"_Hed|k#O{aލ5ҷr4CBVvL $5hZ#iI>]Hv7_cgȓ쭘mRir|)ezm*XhJ~`1G_HW.QCϝJ;$7}kܥLc 26V.122H}-BjmK3o|kߢrd#G.?ƌR^~ȉ|!_$?P¼aG\qǜq |jcN`gL_,'ik٧7 dױŢז/4}-}ް`!țvKܘ27[>IAj|e?ٟFh/&MWO^KB9*\iC=o|kܸ1b9e?涞IwH'[+cq|!]'{s`ڇqƍ{nWn-:O>-iٌ}H\"v _H4MקKq5q{٬b}io=!=tfN)ksAvG_GKƾqŷFn^/9n_^{qb{hc/$af/ikw;}_zثjN|6liv>}{=B:8 ʹ@}Sړ# v7elj+M2)"L{,b/$O[%S|o3kv<q[hچԕxs}}᫽g/n}JD 84[a6.q]ʱ{ {r40ZTi/$O[i| V-n9yލo拋crܽpm[ĺi*/cRb>ߚ)C!Ց7}kܬ+yK~VMo'익v%k i[COl)sZ;+|)C?Wt=d }|!yq54>A_6˛v7˱wlWM›>cuz{L!-˯`a(BrO)mֻҎ[rڽ.&ebQmqlqw9jo ާi<%>飧YJ6 6 ; %l[6<[m}C{O+i^c[X۞ WhmX=)=M [Owc#6@CkynK=jvQbδ(_HGEcm!@m3#.ָ^םj16OgUs㣝I&JWm%#24B:|JsqƝ$.2IV-ۖ^>s-|_`cKwbn[tݖNRy'#֢C7vH|;3+|_66c_FߊJeA]^1yq7Fe;J XEcdH/}/ln2F<#]fb4c m{>D ߽}- Bwjc 5nދQٴ5o>X}G=N!> ix2iY!o|kܬ}"#_HMjvkw aް#.ָܱ}p4V'[{O ih;5>$f/nNżθw|d3FqkA[XH{t j|@MiO;+|F9Qs8,`; ϴ|!Zޱ]JsqͶ?BU;4-Fؿg-sPbҰ? i|3};F"S?gW.q^iC!5=(kq9(qz_qJ_HP@nQ#M=Xޟ3}k9 oi d{hg.߹v 4G<5ՙFb辥(=r yÎ[wfPKip􆨷c$h4~iiNzi.q;cԩq7j.[1d=F|5ƭWk>F_JF9ȒJRiu@ް#.ָs5>WS߱q31N}ܔ8|\iϮҦIhc-5 3HM-s=7nMgV K[XQAЊ+QAj J[(o|kiџn_\_Xx-b6J~z[9fZC533'v7}_iŵ)Xyۈ^[>*{_J'HHL#}}Pi\θw;m5mҜQ _nD{VJTfeB:r +g;D#g7 5\_y3u:9`'08Wp^.Ʌq\8W;k_Dh_<.ή{lE:,N_{CS#a]qZ88޺z&ʼnM/N$#^Ñ?qЋ?ԉC}^qhM?Κci^DZ+qˋ?NKC1[%Po(3aq/wȳy  iߏv88 XyAGky}?ޯ6l4:7ن489]-y n-_Š_^ σ[!cSڎF5K/re\l||<k!p, \6K`c1\K\߮rX8vAr+vVּ_qhyWn ,.en`V,^rI3ҥX/⸵p= ,0.q`F, "=e]%5Ҫy11vԶcb*g=95ؘ!-u.m9v%c5 d\0noWp:L\xc_DGL郘xMoWpx1 ec5R vư :HWphķSbyLmg< ^@7:߯W#Wu+Vgno8ya~1AWHNJ WkI+cIkd%?po Ac4krD ίW ^A|H~@W BW$CW"+"Ʈ+JPkH$% ;Mh-~6 _'w& kƟ' %GX{)iKB\BҌ/t zne RHBhV"BYBk1cEa Qp;7 ^C(%YH =i'\y> ^hb _HlC|!{+_'0Đ&ov7g q^_H;; _RXBA`_H3! _HiD ,|5n `H3 bsWa2$I!ib>袴u6<8%YCkܸ mH_lR>f!8CsH7-c)o{q^@I,!;bwگ$4 !]D[Q(Dk,ǎ4-FB"[sEd WF$I4"i}8ĴHļi? h%fIJVD=.dL$Ih"i( Hyþ>wxZ+HkdsVE(!C &ָĖB(qA2`ՅQcwaIR"M NF(5n~H"vWTQ]b!i +$Z4E ָy/H8q[ԟ-#x\dK$ ]D 7DL;Eָ̛[ FqYF춄qXuPKI#i&+ָ^VQQ&'ȏm^F8v8v)dOi}Γ=7G!q^HEI7oW~$ n|+Hy> h:c@ς:udY *iG;ƹEuHy~7A=&y+J$yYt>WO6W:\y> i@'RI v^8HB&Ji}+45n4q Jdf2\M($Q}1mwW.q??HD'Jd%S$IڗKM$$MY8Ik[IIyV+,ރ%{$I%IEg/$-d; %n&Iz4)$@i ;I7HbOb޴BPZ~0TA%k%o-EQtd+%8t()oQZ}}n'K{ L _d$I<%i$8i a TiU&ޓ.d%OVaw~ J}Ĵļi aicJ$[zA,aCA,N"|NX&u۹hE,) iXZf0)Rcdd9'g$iݱ4q5}[Rag\ͺ.I$d\.K^$I+g3Yָ5QˆKm(&_-(&J`&opvb7ָcU8{9uS' JbٮBb 1;{!1II``7XL[,$5nZ 1Q4%4[ 1rfD)IL\QYBbbIbb޴BbZƽlI\d'+ɆPdC(Ib$4NSo*$5n.)yE$&{+ɞf| $Ӕ%$&MVHLkܸZHL3wdu%1 L{/$&I"1IвVHLJ[$& VHLk]I40eL#}4NS/Iy> iAb&hJ> ?$&V'RC%$&MVHLk]5ASg$&{+$1Y$&JIbƇ%$&MYHLkܼ$QHLBbqBw!1II3߫v7G!1q^I($&{KWy($&I{/G!1%]HL[^HLkYW$&iXIӌ "HE$&IPkA%-wc+IkDBb`%1{$&{$).jBbb9^˼i? iK 1I?|R$&_ˑ$,i||8p|7쭐ָK^׽"1yݼ> ItJO-}+$5nKo$&i|}^HL쳐LJ$q|EbRްBbZ\$&iBbc 1Mho$I$&i{-֑; %nc$Mo}q+ɾ$1ל$&I5^e׫L-}w^4;+ 6M!1;> IHL8MI[Iyþw_V4Xru$&+]$I+A9IycUHLkٶ\IL qtD$&k$&?N($&I"1IbN/$&-}+$5쿬$&i u!1Y$&$^h/$&:iIi M ʒ$O.$&+V$I$&i[:iIiĤa ier 1IGY$&VG!1~YGmtIy7tIbZ;vqIIbI[|$4NSoP"1)3]4>d-$1zd)Ib$Bbov~7쳐ָy/I/MJ巒,$1YIb$4;ĤEbRjָ$&ick+$Z+ZIb2)ILRmHLָ\$&ib~=וdoy IHLMAZbIbb޴_Ĵ]$Mc/$x #$$oaO)m7{!1qg%1I'$&+ WIbr5ILDbiJuҒIy i?m6$&ibn4lWLJ$3%$&M,$5n $1IsV-r}lAOlAO$$Ӕ;c}7[!1q^Abƫ@K$1iQHL$I$&ib!G y˾7yGW4`Ԥ$1?HLþ+$$ח*m7쭐ָq/qOBd+&"3}4NS4*m7콐ָ]$&izW i4lHLc$I$&io+$&-*$5nAb_UHLJbxd&IVKI5}$& YHLk$&id_\IL&ɤ$1IIجD_'-)m7{!1qۿ?HLDBbc 1yy2 IHLMIKJ[$&vK4X iĹdgFlۗ 1I[%$&M^HLkܥ[HLiQ%/kE{Bb$4Nko0?HLʻ9&ir}qҰSEb`m$$1 ;—HLMAZbIbbް#..q{9?HL~ 4Ibw>ILDbIKJ[$& YHLk]I_bRPCIbLAbb$11$11o[!1qL$&i=-$ 1IyIKJ[$& {/$5nIFl)JbHIbHIb$4[|}w.+)ٳI=d6IL&%RMqN7$ӔF "/ %IHL96 6 ($5l[$&iZ<黐JIIb$4IbbIbbް3]rl%1I Jd%SK$m .$&-{+$5\/}5c 1I4%ےduJb1ILVo&IHLҌxBbR"1)3]o8?JFyWV҈ue ]I7 zN}wuVRX>BW}+yoKt%>T5VJuz]Iy~7;]I3)JXJ#e ]IJ8!(t5nc]I'{+׹ҕ[N}IWTޱQJ= i}+t5nc]I3BWBW$It%ixBWbIWbް3]f>JEc>=V;d]ҕh,#JH;J̛VJk^4w[+xJW+XYҕ$$ёAWRްƝЕ$LJZ֣W+I̼4N,ӓJYJk]]IЕXJV$]J+I]IlӓGG+q8JW-ϽЕ^JN']+IBW/Z탮a ]ir}Е;\-WmHmQN$ѕuz]Iyq7+I3c#UJJWdRҕ$-#^(__ॴŖQްͺ+IsYJmh+Y +J']IJ)UlJ[t% QJkܸvЕqB[+YIҕ|L{+t%IIWӓJ;+|Y4-FBWJW_ҕ6N$ѕqB}Ĵļi2+I/Еl,l+qҕll9J I򍣛]J+|sN`+Isn0S,@-Е$94 ]IՓi ]IqwRh,'{ҕ|>eK]J$aW+1+1og+qgr+I$dJW&JV%]Iҙ# W+IJ{H,t%w=t%i</EWBWJQz}+]iIҗJD }δEWRްƝ+]I3/BW`%] 3|BWt,t%b=ro;ɝ+[t&J/WKЅޮ8<+x`2R ۽\ i 4׿Cv/B[zZxKoW~/~E.]q,ܥq-䥷Hυu/<~s/]-+_zϥ—XKor/'[_z/_QkWU__"%C74y_< ^rU` C_=RJ/hX^f&٭i1K8.3ONwєiScAt+XJǯVd}\lr Kw>ц8/֐Һ !1b{iGZ;ImM߅Lr=VbRwnTK5[B["QI &io~l0Icl I*AAҢ3"ۍ97niO|`l}>>})MNYKE>Vyqw F~Υkq+T&OȴĞ!gG@[ƒk]._&wVag\{y9Y,nӞ!]< H|.!|)m<'1| Ӿyqw;%7;28mB6 X^PQũ}*|aL54ф_ۺ&27>p*|5m|ve4o@/MkEM*!ϰ"FhqϢERve+12: E04Gq _ZE?_KT77gaE4WcE[,*|mV {Aa9I#MΣ+-FOݧwߩώm /igǣShиH ?܇~B`W3ϰ"𫱪4:>+.VʍS@i9p$8*/` A+-*a|0m& d:o_>Zp%~~>T3ϰ"𫱢qfYp*|_+S7)xzPĶ}QhK﫠a VD~5V<}*}a*|: &xO'H{ެJ!XG. =#j@NG Egi=b' \< _~?ui _"GU"gnm# GtlVbW*|`~AZG! q%V|ǾNԚ8 f}o{#DOs5 aTl6k ӁKH5CVD~5\Om޷)/'?fsO\fU6JX;W@.IOqh)1oW.qf5S;]1PX`>v`s5d0 TlQ_@j?=eh6Ŋ?gQM[:m$ᩖB# Ac*|'|{'SvS kD+C׷`s?R3\V/oM/هSH5ֈ~%V>1>ҜSۤ+F{ XaiǍfQW6I3C2@iզaG\q8/6 ܷQ*|V?;+}`>qWQ\8hy!įqEtk~5\Nvpχ½AN>`fΧ,/1ڨW W;#K6IkD+Gm'F'e=C4b%h I#, }w6b!絼ag\{k=+^ =Mڃ@_J[ދknoꚲzL[Bm̨zzЌ*lx1$3k_16EԳEaiVȴ47 5莘C4CM5XMҖo>5&4!·Ɲî#V(8X.$ x㩽`Eo9S yф_ՆKEᛐ[,|0yP >O?_T;OIaF4+JK(Wh7?eoTio1pr ~Csoֈ~%V?|ZC3mIh÷5X*|o?B1Sg' JnQH,6wŌ{m 5{; XF)\q7P1ҧgTͧFl[!Âk< ?_Tyֈ~%V/F~X րn,0 ڝh?يt,OX#2|Nx(4^\`蔕-zN!M~XRYC9-nGcލ %n~7E;?P\NҎE!NrkM{^ 0թVD~5V~/.$4s`o/\cMcC+]j\#&͚J{ ;owY޶r AzQRz$4ݧs?J[(, ;o;ߛl~J++VZY 0f l ^k}]CTC@ởh' bqX# pz-o1A(kM?>[qɕR,MUL{gaG\čXe3߹Iiv[r<$ψ|[͡KH;ksR>iC=o)|kܸg>X ibal/\ɰ1Tߓ&ֆE-aG\q^fI#04>Tk3l<~Z[D6NByf$iCH=#·ƍ{9kӛXYJ}2YЧiq>~cSrL#_H43oJaG\q^b0 ͌T[,cEcܓKv޹N};O" f׏Tڍ} ;oߋ0 8pĢuZqRG}SG_/qw~6:j_t[i]9cƙ~md b'_ؙ_[ҔvH- 5nދhqϪǷ `7{ IIJ7A_uqwZc`f~x!AQƑjʂ-VA˼i[.X֖XqX-9!X`kCR9= q_LY;9 Q9Ҏ[f8+MUv-^۶NusŊ|!5Jwiqͺ2VoibM;k{K7J|+-g| +"vK|Fl vqe ߃H?j6m˛5nc3ʊwJӦ3MIm;:ĶL;Y6 C __v3mHj]io {p*]Nrn)y~ocfRK]ۢ勴2oW.qъ&֓xKk-N w>_viu-BoU_QlU[}r>╜PS3}B2RAOioہ/ut7(L;0;+|mo-[ I1gX [X۞ #Mcmâ-g;[o;˱r5J {Ēibs|!m ۢL;-o#.ָetV?:~r4W|>w?>a UBaB:A|ƒiOnBPް#.ָh#D`G1Ũ^Zǔ}LR(zٖH9)%خm@c^WѾ4}W߇`_6~(4|gȴvKlnNT'Mlܤ#6a ;vKsϐ4bHi! ; %n^'Czll{$vBH}|! E[y"o#.ָy/ڈ"npb`ֵ_t@q%EzfAyЯZ4Ft]HjŶ-%!@[~)}%&Q$&+c ߇GM=g(\:}Q;!pJXOk@/M}P`gI]sգ_5[1yGT&D6by&Ʃro0R{G@&\l+L9..L8q8Fs@㣧i';Ҏ[΁qL]g,bP:{E|,v>45fx_h*"+q}kܸkCj|1Cyx#Ր}>JcP iQB/ovSyÎ[&σ )8c-[O/ֆI8˦ VD~5VV"dž;ƠXSG֗HH{lR Wc+nj(jXEz_#7=bGm~x!gݏX ZD{=Y;+} %+v7g69͈q+O_cA7~8ą:z1΄waG\{bF͌Q<Ŗ4ŚQ )_zjŃL`gލ9ӷƝ]w]Fcgji?bQδ5'-}BG!o|kQm{& ~뎭 M`6Cc/]BD[/ivK#ܽ X(@G7>C;a-Ixz'& [ֈ~%-cI͕w,b%9G7%W;+ԑ&Z9sܔؤ97Z5nV06u,8 ;I5d#G:0UQG9D ?lxTC`:dhWbg7jEO9뜿8Sz~E<\-Nw;_c;qV_=(wD;ȥW{:%8'Nyı7/8,&Εyǹ)qpK8$NFyI'#/8Z#exnq@Us /N 8CnǏ%@좏 ߇ݵc߹3/ &؈b7;w> ٰ ,nn{}-v}c ՁskRlz 6Σ/ȭ=owUb4sC["vy8ob4,x=ߟJw/ oX΅{\K< t/[-t%9AIXveз+2]]ո#WZU[.f{ bk.XJ \L4' Ɓ/8n-:yO ?bkX/Hc% oWpz> FZ5W`T_x4//=Nc*킝t\L yzsg2Pbn!&71fo ` <_.9c|hξ|x1vb 8_]b)LxYn[F_ߡJ`{17bFN:7K cQˇbWU/}\د_ } H;_/#* 18w_. B ; 0'v1`pA R`xEb`x90"A0kܺD7`w``q0<,ߦQH`0W(LP?_xRar)+&o c4 #Pa.TBB$*4޿oAQްBY㎁; Fc/y2L] ߅ #Ipi9M00og!Ĭq^"b , "ƞt"bIHt9J[ Y1kܼW ""HDL>|D 5yo `v"b7 bָq/18ƨɏ= 2O$1d)_-}7˱%# gXɳdG '#I@i #_(m1e7Gʬq{?28 a"X^2> \F2@|G|0a bf;ecF30f-Z3Esƌ$1fECp7ga̬qwyP+dF_`fbf3#I4QG7 (5n~jF5)a3n;rVx3c3J[ Y3kܼ;#Mc/>zێ+g$>#cd*mh7[AЬqg9Bh|,I M¡(A4=]$4Δ/PZ顼a? f;e%er2i,Jc$bM,Mp̣4>B+_>S:Qy~87e|iKVB嗈Q#Ii6#'rj7죐jָYisϳjjzjMBKIic"_(mAk7G֬q۟i-GAX鱲kIxEw^i||j70lָYlix{XvtM{/(IbPPi'ΆyӾ7Fgq+X\IH:Fimθw'tI<+JdX+)!7T")mn7gAݬqg_lHoI_v{{Ox#IiZxQڢ(3]潌4~"eN&oIE$v4{g!(mK7@pָi|I ± ֢@8 GҕpJ[  YP8k]4xbxH(DIBH:|Aڅe gAƑ&#Ec (t~͂Ǒ57!}/5n)J4~z{^)96JJ$Qr9bgJ%Gy %gɑ(+){AV$-ՕƩ7u /Gyq7#cuRRsZ9V%7k?/#IkpgP+Nx,5n~#@r0P:Vn&DդHFG_jB@0$0o[aq'v~tatf?`:o3^`:ӑ&0F XN,05n Z[a:T!&3[_a:6,l3a:ӡ[RM%Lgo ӡ{&3{}KδEPL q9LU0 0%V>mP'o̶'Ln~؃LgC70I0%Vod LG☔0. әHe$tq |};LGyþ7t> L?c]trWŁcrnt-3a:KCEoOδnBL\PU /p9H5a:ȓ-a:K4ӞTt!0+cft$iLHt@߀00oY0iBϴ#I0h cZ!6LG(0{%Wy(0I=눣t_a:^`:kYѭ0jc> ӱWE0.a:#q0M{+05|1A0{؛#hQ\ a9!OX,h+L GEX1/ әv.HOr`:֖0%RiW- 0^+L+M֑0 ڢH+w0Ut'[tX~o+L 'Lgtf 1A0 P*%Lg_0i|tbt>`:,2[HLG(mQkwW.qM+LL}F L>AtLBCq*u$Lg| LGR0ܑ񗺥}$t mj0 V`:kّX`:T8ZXqXS0+0ӡz*Pb a0ϰ"foH%0k0k%Lǚx ӑ$4\\i a Lg;{ LCLgXA. @HŁ_rjt'[tXSH,0(b Xtfu$LBtp(T\\#o(0ac;cRt$ #+,_(mt7tָ1R7dC8Lgt1 LRH@ Ly˾7e0ic{3o`1 LǞVt$ #/Nr`:tָq/}tq I tF3,0I@)j Ly Lg2LG9 Lg(01ӑ$4~|}Ni awH3cU`:Z`:ö. 3^`:ӑk(w-*05nӑ_U`: ӱxc&LGI/(oYoHg0>W} 1)a:ӑ0M^`:k41)a:cl0/Of[HLGr`:;+|0iΈ LǾτi.ӡ&8 XN}/05R-0ie`:^,0/#I0i!a~tsL7H@1K(03T RLGa9J[0vK^4>'?.FtF-0$LHLGߤ$_Wڂ(oY>`:*a:$Lߓ3}L7`9L;a:̛V`:k,LG=ʚQ`:֞Za:֖MΈӰ{~t A޲Yf;y~toܴǶ.0q\3lmӕLGC-aƝ ӑƁ8lcnسMI ӑ$4[)AeH@{Z ӱ'tI'LgK0IH㧘7(L;0tָmtӱ ӱ:+a:&%LG`:4w;˱#ox%a:V0+c_t$ CMI߀00o[q~Za:8궄XݷtnL՛ ӑ$4G{(mtwW.q70iXbO=a:^Ya:~$N (\i YCn )!tE_`:L>ic%|QްͦӑƇLJ50V-wHLGC LGy~7_# ^t\a:'L>H*(0nxLyӾ7߱{P- L{cy cCA0( Մ OX#XYNјK@}˱QcXݖ0"ƙ8Q$0Lk+05h~ ӡbsKk-0LFӡ ;~A A YbVӡ}LL]H0 )5Ԙ`:֙0%V>ӑ&\,0+V) ӱ&a:ӑƁ8uXOv}w0iД L+c/ntN(0>`:tָy/LGvlttmӑ$4đr`:;+|y/ ӡ;0t,c c`:棟Ta Ybew0*: LA+LH ӱZ0 P0dK0%\A?`:8gt[a:>Cp ӑr`:;+|Ym4#Ɓӱ ӱ[tbM$t=c(ogq>`:8s ӱQc# ӱQHʗ׏V- tW.qh ӑ.fX,+LGpZGHrh|j0 ^`:k0i*t=Xa:>.0I{]`: XN}w☔0+;V3 ӱb(a:CU \Nu&Lg 8GW4~xh۝0#I0iUIߝ8+LGy~7+}PqEecmcMtLL`:T&Xa Ybn ӑ&>ܣgtFe#)Y`:ŇüioH3c,00W v"KI0izLQްƝw L ?tF)8Zgt(\9g5i Մ OZ[tXȜLgHX <0+rR 7v/yͯqc`˵u"mKE_Q!;oW fy\ h-sA=v[ye[;or,Н_Rwh w-w޾wv[;o_ýw" +nՉϯvſUϯvn%x^(W{!fP > stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 481 0 obj << /Length 3426 /Filter /FlateDecode >> stream xZKϯK5-$J6|$ pAݭѮm=vfS/%ffA.RHU_=4nlvۛDv? R=m(87?zv ͷ&>luV^v;m ue}@СV۟o|}{ˍ탍$tc؏Ps9M&<c us7@TOo`d«N? Sf9u4[Տ [WZʏTXNkE~p؍Sm1:o }n(u?_2Q v.¦@ژV2LCPfRw̵_][I0q"+yd?5տkZ˷:\fe֏ǟ(X5O(&֍Q: 5 Y?`ّe @}&Ǣ*O&of8jV!bF|C* fe) 7n/E-\2]rtWMd/J[$~\[%.v/ncV'I*"ۦH)ﮂq7C0t/IeNmW 㥺 st.}B,:!Zui+e6k1R]ؑ[̀xT#\\Vf٪ Уŧm ) R@ iJ|.mǵc[keDrGUExD@`e"g~`2c$xESRj0axGfc^Cܢ9?PޫoG~~*]N.\mG'g°&k* Ip[ygl8#)!Qv|wPp1 H wWwLhC_`9O"DCS z*L6fE`)1 XM BF[8 &ς+&X;-j T ,Q>jpQOqd߬N>k}ae/ }l2*FzNwhKlӳEJZ_'P>Kx$Eb Uj"n.r}ƮțXr' i֤P?gMZޚiMAdՠkDא5[uuC`F`ӫyL=پ\MZ.*9}q!ho3ac1cbOq BDOZ28c,geVrZ- kw۔"7 uA=?.p j Hy1̝ +YDu%~lE%{w_DSyNoͨCSw1oXv.>haJyԲ‰UqI pQc渺F12R!wn~&spK5'ET:XE`'M.sr,ӜTM uyLQ^SgP}A9<0tt)8v{5uPJZt\ʤ['47Er?lQbJ!"h)B>fT gjxwiVjE $5V=!@>S#| zᆯYdz'mrqg9#e+|LS(zࡀP~ K! ٩7:c9x`"D9\m3P?9T<-apw.{ Ǐx)QdO5Q4[Zo$V [u'A ](cIIwhv9VvC} ܿ!&2#Cu9{֗ٞQ(M tuq<1A%R-^ǿ?lw&irpQ:4!ڻ G9k{6??YUv|&H/0<Ax0{~]_ gذzL7퐕kXpmS$0Q>ITh`A1IdI* ֎3&\uuYHz>ZP5w\/3W6'jDimWwvPNRDRz8t+SPU#v+f&C:w;d$iWvqt_՜ endstream endobj 488 0 obj << /Length 2121 /Filter /FlateDecode >> stream xZmo_!P@*okz-a>('ˮ$}g}45g^ҶDvۋ?\^Ϧ@ gBUYiDa.tLA(H~"o5 .fQ5 rUc&?^~w? 6Ï"Gef"Pxf/y!v`JD3h-`^?5Zwc 5,uܑ}uW دgoB$nӓz:4 l\- E= Vї^R\f, :8M1F9U]%㢄hQcSHx[*$4-ijl׋./bN$X̖hPzH*P8hlHQH|ۄz Ɖ%uJJ7u3C_HYuC2.J :FpƖՖ׼9Uw1zTm/S _sO7t*>XPICηGaL0~ZSsc]mbYFz5kА ]ճ6HK*j4M&s_dƬ574ު41T>v,Q1t"t]P&(Yݶ|v5v CIb=6bᑨ:Z864Ɛl]EOFh깏lh3#C a j9 ; Y .;T3i?{Ovi@-~W8pcWN+rTm JW2r/F+3-qqU WT?,imLuFz^ZH;DZlwpH":H$ݰ:Dɲ{C~-JW ;CO0f  '0 LW8b>CˉF0N ӹwodwC8ęc}50xgT9{s(}(MFm IFI[bJ3;ݲ_<[GCgHf۟Ln9~qrD'(,xs~/_PtJB){[߿c,d[y2/UKi"7;RYkLcxZzË gJ.uݛLù_S$ 9, 칸SOȼgg(yN$gaxII?+gI#~tt@+ddo~xu;|L}}=;q?֋D|}y),)s>ɟȷhjR:DXQ ~ÕpH"ˆ(6GbwHIG:llkZI=sEx^9o34!d` RAWuFqkc^*GɽW,4[ P@4Ĩg}ec#Hx0hVH/cA~_Sr/>Yӧ;H` A%UdIMesiAH&`I2 m8 i^ 4Q%1Ԑي`y4Of+ҧJ'Mfkҧ9d&} ˣnhc!C0G0` >CѶK,ER,鳆) Y QLI0%SLI0%SLIapQ>GsGeQ(> stream x]o6ݿB@_$`fy,úbE{Jش]IN#r'(` 0`xGΤYC;O p){?}6yp渃lʒq+29FgEvb /$ϯ sjT2?Y~\4uKOvW6J@.\q10y7|df\* dg \*iHɔ ExM>Oeθ0 >#c2 s2ZJ2YTg˨4zIm S-ÿ3D{q`qQ%+`AU%mWuӑ,O]MSy,&} y YTf' ,uZ׷9$5/1=zg;)*"YUN75N=єD.}ק}7 ߵt~]/c(%L ZzwLև$rѭcPf4c(hu>)ˆ' Z~62Y_8{ڠ[%eWd`)fQo^zݰ񷧩,{Bh${e<uJ,[KCM6l~TvC%-B/样nוl~ 4^~+H2j0Z'KH%96IF%aFj׭y\6eN?&[x|ׯK=&W *1)uE+sŽ7V:\!%,KP6zwУKOqI}7 C--!9V܀C"":uYI,!]~ߣni,!:^֑ۑxn7؍X{Y4wlvX7WdmPkIcdjކ]SP+|\qL~=ĆbmO"')LIp endstream endobj 490 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/APClusterLevDataSet3-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 495 0 R /BBox [0 0 360 396] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 496 0 R>> /ExtGState << >>/ColorSpace << /sRGB 497 0 R >>>> /Length 13671 /Filter /FlateDecode >> stream x}K%=rݾE-J|A ^^e),sNo͖fՈdd&x1G>?gJ7vG???#|}^c>?j3~"㳀KL ?K:~]`Km8A w}׿Z7<m~Io>~5smܽ| +N.{cprw>SXTAy%?1RL9g >:S\Ws=^S˟s|\iϢ_ _rzW#檿Rd/1kAKdU\D~{OIX隷(X?vSny?ǿZ߯EZCϖm<1sWuCs/or ڿ|Ť=1+Ưi{:)6~A\}[J,¬=z==wlVA_+x Y513X/ضA5&rR>0>i.yϨ1ϑKL z B51k⽿iK6 }NI{gI3zϹ,̭:ln~7Kneddmܳ 9Jm%A\}rkn+p?q/n\UnڽW_ƦrIfavo)x_{_Q)> S R]6?ټ5Nmd3^ HsM||+rzqsror= _?!͗2޶2⼀жanA.Xv5}.I"˵5ⲵB̅lהЂpB}^jkb枸-װU~DzY7tbmVО,!Ϲx[Kl6L9`h }N{+]b{k6fpmL1H{ ˞dmkvf~C&]rEns?XcϨsB{Y{Rn~{"  L/ͬh zt,+{}۠iK缷v^SGZQ)G|to)Ҁ5-7 3m龷=z{y!BZf^m-]{08o%\m7_7锋Z9&P..e/Mbs#]-KƯɶ}7m$5S.rYWxaaTYߧ"mXA+h)̰-Gݦ17 /rǖ{R:ԃ-7S*Җby YvM{mҖ&]rEni=zbqפm [lѷ2WP9ga2VzxɕM:.fܭ<_cܪz5$VwnWq^Bh[30sk݇mfEnݎ ڛi 226Y aû%>%t+f6Zy0 ѷ蔔cedan-=hU@xƭD:/ L!ﺶJm=tESn}5MթUJowrTPBuێ\}N{ʭgI{؛q[MWkTAꯕ9/!k&&0G{h w7锋cf_P5h-^ճYW i{3;yYZ6f@mh6/o!y_3" EF/~Œ^F%BÏ,m5s^v#&rEnƗ0F5Yij0ִ#zBzC^Bda628Y`k]rEn<˽]>U"1zk!{ qiRW҅Y#0r&ڟ|ӬYluٌ}JEV`]vέ^lЭ{)># t'_7r0VbnC3n%m¯ѷKܚ"e2d#f]lw XJa՟чm %dmqy,Ea}N{YHVa\A8mK>-A I^Bŕ]aT.vv")K.3t3Ͽ\ߦvw^@h[0undzۀ8BV :%%)ilB U(y#{]ق~mϨha3Lygmͭo)yOmE0ŬiY![-fF:VFG̽mm DmB[t%Sn}fj{>1se-<|;^Am}E4_m$UuS.rk@G[ې*\ /l&ݕ~% F=iڼ{km@z/Kܴ]f ' $Huc~҇N ~荑"av$+0v _sgbV}`oA"o1RVVa&|*kFfГDŽܡJ*i12޶p$^-ųǡTxI,%蔋R%흇;ArR*W:F0accߢSRr\Φ6N/;{od&;֒^+^B]a䭶ªm /rsޯm4J cb,lJ㞈 Lͼ"N/[&+!EämB_XrBRa<ڇTxdiaWk%H{}F漂mcô=b5cxΐ /rh#,-G{͹_XM YxY2%OgfTm7tESn}s(!i&{W lOh_꺂n/% ~VӃמbM)+b6fT& Qۀ4~wߢC.rǾ_a]I}bs7d ikӀ1O8K”;o>=o;{Ē&rE;T5+! sMS+rGЛiI%b3,~MoV7 /rku8f8dM)漄m_ᶚy h{}{}SUɿa`y.f/A.{Hm=ywec=7锋/reLj}b ڞ;zxG=P;1 bWۀͶ%^B1aEm]d-bwSlc{^ZtKKjbL7d\(\ rb :%dm˺?amp)6DӲm4[ : ihf- Øm ^wxf`i.Dt@qWg>߫,Ҁ54^=ˆbz/A:tKք13XR)yOȲ7߆sȒŴҕ!H*~[ x-?x c^f䦐t5͋FTDʙ_c+*堛Erl$LeE}@a/+0 fV+&r5CR.8S,d3}ɲJ ü ?ފV؀K(l@˜yYv&r;|w\Ƕ( ގ^.ʕ mQcؕ vߢS.Odlߺipjƴ5)HKA:%dțȶ#B}N2BC,$K=1K6-K;ضZCSI~8 }?6!YoG$x_Ch}/H?s"=oͳ'Khz0vp^:m4WES$^hKi،fKM"vt39/XRJށemXٷ蔋ܑ.:\wD%D@vڗ"m 9U~yʨ bY-JmH`ߠK.-k=_.A̰ЇYڲHljΓ`%/!-ϪaCnajFߢSҥt;BnLVF.3t%V+hXDj`]ZI\}[sR˜mH;N0Sx!:2'u/;ҊБIL "aŋLa6a1U2oM0گ!%~4š_YYZ) $˔ -5{ʭo˻BL6,DpR$3ݤP Q"zTmGz&r;b*E1)He5 1/9}nye p(4ނMHZBA\=ԏ}LYgǔ}ۻ@N Hlm**^By%Lv+-:J9 #+zcIjb e.A1÷%y 5DcmG;Jb0mo(r{4;_)4^"V+(j'oym0o)yO#2s+"Cm&l".D%_<_"/ 70Gq>w :%%)[&1am[Dut%r^B7ab)1-:)e>ƄA߽fWĦOAxbUh+t8k :o%x_|3y´T+ A$7]C?\K#%6:No;H7锋| 5Yڻ{/xШAWЛr"Pa,|Pæ_o)yOc)H[0AalHux0Y+Ev Kx^=ς|%v@&LHj*!~=P(kbj$tI6 }NI{ʍoh 1c}4. ı%An>!%eysLRe^6 }N{gKʘ0𴡊F /{K(9E1U7t)`%ֳOM昬%id**w ks^BnxӁ2U:eA5{ʍgM#) Aז-ts^BI44,Um¯ѷK.m'&ۑpGT &A>S9[K( Yu_o)y_ֳ4T3)4F|;3U+ 1)fah omn}N rY"Q"  º_pP5^B]'4{5+]eI\=ֳd4U a^*BAqH{kH2 PվQ7C-gY|5/ұ#u|a0 "L7sx|o)yO,J3?ᘎSa.AVG!]kb-PE!?7锋|T3q& ^mU/(ZPlevً&_݂yٯ7锋/rk 9YVʺ iX-: mk0 os[krFTcpv385'AZ7a%q͎AY8mkI\=1֡IO޽2e=Fi+;x%1+j{]ݒI\}[*OO̅TUv\gA7}gMfHy9{ۀk-:")eP4,9έrӥ$33yq벪[BμWwsLWjB3'*HdrEn}$Dw/D{ Ok Bf}XL0 ŝhy.-:".,$S>1Mq ;Fc#UAJq8Tk]=x MOrC c4Vu.AZ7 T(7ormr&.BГe/ד SfJH %Td{vLVyM*`m'ٞ~+{m㼏TUn1Hn!0{%z9IW%i!ފ l˽o%x_}⟛0 l1 _vBل̆bNYPw1 k%W$]]rE8Km'5n a*+!m}L^BKQ*Ieٵ"NrXǶx*1^n!ױS"jEm:1\ntW6 vߢS.rZu[0 zlT>贏x/>D]Q>贏5?_#xOeS-8L;]u|mF+IK+cF<91M+"Om7r ܇ܼ^1Vb<(Yam -]y/T昌즼>MzV~c?c,s͝>2V eb~*tp&pfԶFdr0k'=\=ֳth%ד_T_ :羮gJWPr=|)aS.o;{r[ς*1H+VMC/(w#^BU1"Lmgtm3R\02;<&M B:/+e8/ -aJۼc䆶wߢSRrK^s_&-JvY@@ȣ Fċ41Q7(x_֚m )dbpjv:¾Wzn_K+= Ӗ.*ؚ2xC.rKҗcA(Ku{ :xDKLj$zH)SJ]bDoҋI>54}]vlku}Ypx x 3,D/r;{9ԓϗ`InyZ c[ueW2 ;Nm@/o))x_wYfvuL3P߶砣y-B3aGJmekk*+䎳XE0J3Go1b ›k"nPs0o@LǸttUuX ln8\xRs5 ]A7NjjWXǞ$&u62E=`N6%&6Mv !;&6JV*a*!]Ymv}. :#[cΏrQKg&q9󻑗PN`Y2uP &r[ߥBk# .XM娬nn8\/_(p(D+NRl0D@6@mQߤS.rkTTEk1gѕ ͗R<Tu׀cPDYyvK}^U%V3_Qoc]aY9gAf :'7y-jtZQV:܇gu+2 ri~bJ9.N(-λ/<6 WC.rO\xah`3N$4 zG8PGxTtVSb\A\=>a湎9Ɏ ubZJ/K1Ǡx}I\= Y蘎RTߔ7-/zb.RNCmBLO-clS]}NBai'To]tނ>6PIX{m@YY~ܱ_NkK6^(^j :!_R( zxo N\}[2YdɸjB*J#]_,9umIȆ~9oE5 wt%Sn}F8[y8=V`})ebbVQmS.rYc |fB7 E΂t)>+Axb=]rEn}+LmJ d /+`Hҡx((^B^1ɢ{n+4 @NPd<\"`qт+eAF`jq|'7T(ȕU=&S.rk%;^T#`sq @iP`~bX!~y0?r%%`UުrUzǷp)w q vZ[/wa=x3ض_}gAOrk#1Aֻ9]8HR$j-!HLP]$ v-:};X4!fö6ARP˔nF&+am]vr3N^g)7y*0"Z.p:wl[^z ^AY0+Eao N%ѧlcyYU:(}ZgRcbA7?JutLRͻ}tʕr¦+{̞5֠(D^Bɥ#e2ۮ^Q}Ъmk[MAĘr*i LytALGy*v wۚ{ʭu,IɽnA~/)(L @4ަ{/%&Sx+<C.r|ܬb)І;{+ ͗m}ds@CۄIdoP1 mt :")}$1`0,[~Lvwr :%Z F"{`u {ʭxŧ+ PohZ^{sc@>/yhz1_o)yO5-!f\Œb V+|%j9:>"Xx|߱rN4;d=|'`O[E u8}jX P@;0^VAe.B jb|(Duie<1O{Fʺ1Z#>kNo/o5Ibqg߬~g ' ~=#Rx9}%=>ا Hz*:##B.bxƂlkL>rHsy m=˅:֡ Hl-:%cSi" H;Ćy=_Ud[fcI^B1S'ol`5& r[ qU~6- 3ƀJdҊ+1EǕԽcL6 }NI{ʭ1gH^/0o Ҩ#~B~m`[6gW*6 YrMܐ[ t1,q! Y5%6 t!5PTv 26˅ U_hWa ,<ځ)NjbPy vl-zU9>+,vߗ a'fĨ&'þA\}[e+DfQ `Vp7켄tZ$}$a+2RLƢ켖%r :bKoNo6ΞI\=̐4ZxX1U|o(Z D[ w^B=TBޢJ~t>9‡Y}(Aή&HkrA* oyL]oes&WV+xOYo",R q;` G[mݼK(E^$J^ ~J^~=v:==[sln<#0 1t -eS%^.VyߤS.rGT݈tc.:gVMuZM ǹEv%yufX-y!jƣE\=>*AHwaIB m&HԠ7Ԩ!/1e$ݗ^6 5."Qsal$B{vDgGIg f U0ڢf,lyE$Qͪ3Ik21%Drn:n) #MLpo xwm U-/+5_PDX #2PC;gF 17KmY1mbߤS.^pDp|i"KKeOG` 3&hI*!!s\Cl bP G$uy Ej0vZ&vF*N$_:|3ag?s`U/V/c"'*Sx"øŭ'9C/7Z_ZG6}crE-$/.\ӣb;!uG+@N},H#D%H}xB_+uK{)I(#E}4*Xl_2+ӳ0:=n,m^q=]_EJ+-1uyNZI\{Ov*= S߷1r=RhR:𾗬Q4Ğ$[߶,Pne/~~?zx)*^' + [zbn!BS?O]ݟ ]iK*?z)0?/A~Pq텗V_F\0JYa ۱GAwNIUBݽqOVbDн3Kb;R㒭Gp_dVdM_wO^ I `gQ؋5JUӪV:^kU?`QK/X7P%kׇF5鷽2j4Q/TqQ/Tqv<ʡ:( V^Eַr(}ZC/_۪$_>|ہy;󼓔y^y [g ■CoP޺^˫+zw\]^פc^ եJI,+!b_V<|[3=}}uA'I궼Aj(e&1^FpVPeij Co{av? }#{aFU*w6YܞV~E (d2|ztE^_0dzr]|#"338=S![Ay^8{I@דwʏA>qTzN~TG(v-dC~\וLԃem>dFX_C }Ώ뺂~~VR>O(Ş0FX"[Ǐ^н]6Ep/إؤI|<|^A|Z[1#jHxEg9Ѓ _>Ct>hy/ǥ$oi+uV{ϊw@L =Ͽv=T7hASY= endstream endobj 499 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 504 0 obj << /Length 1917 /Filter /FlateDecode >> stream xڵXI_#U5ax8dKRIpp%>ЀDJzA1>=|C"x:y¸,,,IiJF(0l<|<~Рfy Q[_hv#¾;O䁸,A<+),i.l8J(2|.u*R .XA&RVD9F$aCD'F̀Ǫ=ҔƓi="₪#<4-iӻ}v,3 4tNӹv];0'߮8ol'NLcoVﱍ/!,}}ƙ³;!iبCM#R&:CTE첱>S_m"~DIfW-ÒG~ӥw5|qeg0=@ˮyv _s4g"XݹsZM`g 8s]X٤Ip\ObՐ9iC٭{ux]~ eD`Ox2b: p;^#ʮ-(%ۃJ@*g2ֵlfPgLZvTӠoxSӎSw݃j52|yju+?Hַ5 ,`G$M ~"-x^BgA ``R@$@ȩA ;$~ՙ0Hi-b%楒ә_0Pg`Kx(DȤ: zX.^y~ֳx?⥔,Nq йFLdF@OU]S; ~rm-hb/+3î::ͺɟ8FqM\BU f@lصIh^5.B!UyjqpƧnK͵1Tibru:qJ$vD1PǬ0 9hUh ^v̹df)Ep Ӎf%_^GItKofDizVv Tn tSezsfD B-L`kWD<3%JiԡQM]Z]GF1TY3S;f\9zTM><]쎉KǧQ=޵̖+XzSNܘD!SSA5'QڭߓzitIT6Bʼrh뒧_YpiLϕ^zRxyl?$t1j>F(ajK_ߕ%|xE1˯ jtKɱsΩ]b"ΘB c]H&/T%E_yƔ;<$ s3)b(iUժ dTe0:(d#" 5!ACfӖn?[ mτnk3]< RB*E]0*C?y_Y c LМC",$q ߛ0~o[kT0g=?HOm-`77KƩk`Z5Nj%+VSrFgiB,cιy"A/kV!>Fdw<,ӌqlcQ<1_h K~n%b5>KC-d7sW\Z0m}>5,}!WlI iq1._0/eY}ikQs~ endstream endobj 500 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/APClusterLevDataSet3Heat-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 506 0 R /BBox [0 0 504 504] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 507 0 R>> /ExtGState << >>/ColorSpace << /sRGB 508 0 R >>>> /Length 18452 /Filter /FlateDecode >> stream x͎r])zh$S$\@ Xpu0UvToO>Aw.<`\oq|<~|\>>~\u=o?q-?c[?c!ޏ:^uy\ܮbr,.WrYy~e ~/w'Oz}"w,]˝z}]^'D?0Z/Lqyڿ/kf_yyD-7ۋ'jX/W0.|.wef{.3Or>D-4OԲy|-}-G6s^/73Qz\21]^f˨}-6sD`W3Q5j&6uf:~!9rۿfK3}5*\7UW߽WkW3j&r6}gv~f r|IX%&'(eu_}g ~f6 ~fv ~f 뺹º݆aݿ_u\3_~f vsuq]úߙmú_mú_mú:Wo;Wߙmú_mú_múo=Ͷaf۰l/_/u\3ۆumúo@Ͷawf۰lf۰kf۰kKowKoݷf۰lf۰kf۰kf۰Qm6l75m5m6lFllrlr6l76lmrlrl}#j ۾5_zfrlrl}#j ۾5ۆmf3ۆm\3+r|mFl}#j f ~af ~af ۾5ۆm߈/mf3_z~af ~af ~af ۾}pVwi鷟%9Q9J%:bEx{Y9 N*Nm|sYNϕbN_f4fѨO}ܧa3C8yroѨO'M겣99xN"EͨO# :.prO[h~ |O~%F!1;6]Qޮ2ZEÌ>mFr:h` Nts>-i4ӞwSCeX5;Rv5˺&[66ɧ^6:/*;]|tgGy{}7km/ < +^jEEwm <]o;|[}^wwް쾃oV'=i\2>.WU}O%u;MMO6<+*x79_xnx > 3xS o|/r7ZO8"'<pp[7Q3 Wj=/oQ3>fs.C=;O8[ Ӡ$ppi/ g \q^[܄|zo ~c]O8ƺͮg |+nu :0|ֳ>z ?fܙ`/Z hр`@>р~v`:fJl@igxNΑ hр҈ـ]':3]'øg (n"PA4: ή׉]'et)2N]'zv87: ήgav8uͮ®s2t:E(E(Eы (ΪӬ-m)NRі1RlK(-壌2Rxf[Ga[*8zQ{inؖ4^t:%cK!: 1YƬ҉*8:To* :TѡfS4;T<١QFGa:e68cYŁf2U<٬lVq`Y偡Y*NPqC壠Cm)a8ٖǓREЖ --ȶTm RAhK -D[*TmiAhKі -D[zBcKі -D[Zm RAhKі\Ж -D[* RAhKі --ȶTm RAhK -D[*TmiAhKі -D[Zm RAhK -D[*Tm ҂lKі -D[zBcKі -D[* RAhKіd[*Tm RAٖ -D[*TmiAhKі --ȶTm RAhK -D[*TmiAhKі -D[ZmhK?ozoRhz gmi1F[Jg3RbAh%F[y Vііli&m)ctlKF̶hKlf[JqRZі9ζG5R7s"-RA\:L7f:Udt|^TѡC E* ;ԂCY*PqfG*NP(Im"Am"CţCD*U0-Udt8PGa*N!f?٬fG*%CUd48cYţY ̪"hVNJSUѡfC@z¨:U:Uѡ҉*ԡVdvCD*8:TPqf8TE:TEF2;TPq`Iu"AujEf Iu"P:TPq:gGIP P P+ԡ*2UUA4٬ YD*fUjA6hVѬ Y-fUͪ UA4hVOh̪ UA4hV YD*fUͪ Ղ UA4hVѬd*fUͪ UA4٬ YD*fUjA6hVѬ Y-fUͪ UA4hV YD*fUjA6hVѬ YDZͪ UA4hVOh̪ UA4hVѬd*fUͪ ՂlVѬ YD*f UA4hVѬ Y-fUͪ UA4٬ YD*fUjA6hVѬ Y-fUͪ UA4hV Y PA8ugj14ł:JugjYbPOTV"8DPqZLC-TVjAH*N+TV"8DPqz&qX(T*U :ԂIũ"Aũ"Aũ"Aũ"AiEؖ BRq҂Iũ"Aũ"Aũ"Aũ"AiEؖ a/*^T`P[zт杻GԖ*2zQ>JPqZTTTT"Iũ"E/HPq҂Iũ"Aũ"Aũ".(8Tơ/{PTV$NUͪ UVͪ`PHP P P+ԡ*ԡ*ԡ*ԡV$CU$CU$CUͪ`PZv-Ym)!CHRHPH`KA[* RAhKі --ȶTm RAٖ -D[*Tm -D[*TmiAhKі -D[ZpA[*Tm ҂lKі -D[* RAhKі --ȶTm RAٖ -D[*TmiAhKі --ȶTm RAhK -D[*Tm -D[*Tm ҂lKі -D[Zm RAhKіd[*Tm RAٖ -D[* RAhKі --ȶTm RAٖ -D[*TmiAA&LՃ+Q+b;~RDUF"iiEש)%$M+Ԫ*Vt7-*27!euZV$dU$(eU$}zFbլT Z&I*Tv& W1 OE'ۙ3hRڙ3Akg:$Y6$}R Y1REU(JM*T*chPA2Ikg %Iz**Tv۩&S-PRߪAkgΰ=i$h;3hELRn*=WE%LRڙܵ3L k;öhRڙ3L}2Ikgʰ j\;4[LRڙ@vͭhZ2Ҋ嫝I*ÍTEjQJU{r3UQ*T~PU;rKբ(7U宪VU5VEG۔[roբ(wW_U]ê(X 3QnZtY6gUrբժ(ZfmUۭ5VE(w\喫EMUQn*]WE(]-jrUQn*ʽW櫢}UۯrUQnZt`܃Uua6܇Ur'֢(bf܍i*XE!(wd喬EMOVQn*]YE-(e-jrgVQn*ʽY欢ܝU۳rVQnZthܣU5]ZEM(iFܩi*^m!M^?HP%[c} -*TV݂A"݂߭wO**T*VĘ܂AѬ"lr euI g *g Jg ?\]kgΰeg+ζhRAۙ3A mggLPEqU&( ;ۢI)mgZŴ i;*chgyΓ%;+vVhPVۙg2ΊyimgZeյ k;v&(U& ;[Ѡƶ3AmgMl;v&(LPi[*\eLPmۙV& ]QACXe Jq;]eLPLRۙ3U&U&)LPۙ(3EW+Y_eLPۙ`Wb3!V&1ʰ!eC\bQ6ĢlE!.j (bQ6ĢlC,ʆX (bQ6'uX (bQ6E!eC,ʆX ( bQ6ĢlE5X (bQ6ĢlC,ʆX oq!.j (bQ6ĢlC,ʆX (bQ6E!eC,ʆX qQcE!eC,ʆ1ĢlE!>3ĢlE!eC\bQ6ĢlE5X (bQ6ĢlC,ʆX (bQ6E!eC,ʆX qQcE!eC,ʆ1ĢlE!.j (bQ6ĢlE5Xt4_CL"!ƣC\p שyOh q˾"!lO8/֮"! 1e48  1₣!S 1l(! 1͆1?)3b3gE!.:bo 1lc'2b! 1|61xcgokh|c36YmhyvM.:z|ֳM6m2M6g|>M6m2g|cEGlFl2&m2lyM6m2d&M63dol2ɢldz3|v1qfl3:fs1͎3;fs1+ÎYsQE1ce,ʎq̢E1c.j(;fQv̢E19fQv̢E15Y(;fQv̢옋.E1ce\8fQv̢E1c.j(;fQv̢E15Y(;fQvEce,ʎY(;1ce,ʎq̢E1ce\8fQv̢E19fQv̢E1c.j(;fQv̢옋,ʎY(;fQvEce,ʎYkvY(;fQvEce,ʎY(;1ce,ʎq̢E1ce\8f1j{"1g c.䊌U8> &"c;qlO$"yHbψ1\6\<$"yHbHfI̳2lEZ4$>ZE#hygge\-|G+heF1>Zͳ(g<+31-ge<&2cV&qʌ'q$2cVhie11,6Y(f.X+3`eEGWX_\qMne"Lww2UfZwDW&$~Wi6]ZfanSMۙ?/MGs2ٌbp]0]pvfv$ַ3l}DZ%.3{N}v# 1b28{8xcm6޸i`;3ٌ<ޘ޸)z㦁!V q$.3 3b)ΆǖΌ'1ĝ .g3w&$޸37L;3V|1w&p̝A(;蘛cn):fQvM17E(;蘛cn):17EsSt̢옛cn):EtM17E(;蘛cn):fQvM17EsSt̢옛cn):fQvM17EsSt̢옛cn):fQvM17EsSt̢옛cn):17EsStM1cn):E17EsStM&7n޸)z荛7eoqSM7n޸)z荛7eoqSM7n޸)z荛7eot_v 7&"7ƣo\pƿE+2zczl\S2. .^" ]0epf .8`qG4`sJ ƣ.Otrn` _}゛&Wߝ\(ࢳ 1N.؍J?v゛&ַ2֗8Y_;30yu.gp|fl3`|aC4q:QC,ʆXt4nd޳ $gĘ܂IpE =16+TVMnj}+V$HR{F-Vnַ"Ij}+V$HR{FZ_e e[4U&UfgomVX_ѤWW'U+T+T+*TWT&$oxVTǑ++WԼy<.X.X+W4V&V&LT ZߦI2I2wF$ʠ nַh}LRիLRիLR[mНa+ 3Ioe Mj}Ij}Ij}a\4r$U$U$UzIzIzIzIz+U*T*T*TV&U&U&ʰ7eo\xcQƢE7.j({cQƢ썋o,X({cQ'uX({cQE7eo,X({ {cQƢE5X({cQƢ썋o,X({cQE7eo,XqQE7eo,޸ƢE7.j({cQƢE5X({cQ'uX({cQƢ썋o,X({7eo,U\[Ը`QvE .j\(`Qv삋,.X](`QvE e,.X]pQE e,B\Ը`QtWnAcr Dg+vD;+VkA=!UAKь4 :PAv ,S] ZIA]%(:ŦlE=,)z¦hrm(Z>QD5Esה[m\SnMѰ5Ecǚr(:/QcDzQ=(z/+j*EM5E }1KlD,5Em({lD5EӔNQS'U{ljDԜԘ\s')zhTDٝ4eK"ʵqCDEGSM[eo EStM:_h&):h;MKD~(ߙow ipF1=DZN 2xpW|WxArkW-2mr8 әrW9~|m9x9 Q99qrw LqL'L8 Q9Q9}(L8s?s>r?#@Ui#7C*j:sal(h0fI{t*׹_:1NY5PDZq[xCuYu>[3Qfou\C 8Fӛusӱuq溻N3wu:[D8Fv;Ο1l#(FP{N]`L!3ԗ<(ʦQM(WF;8ӣv>JQ\;Σg;tk\8@9t? cQE٢rOq.Lqh^㜛qwӚvWoAh} -W Z_Ah} D+WoAh} D[ Z_Ah} oSM6E+ַ)Zߦh}mWoSM6E+ַ)Zߦh}mWoSM6E+ַ)Zߦh}mWoSM6E+ַ)Zߦh}mWCgoSM6E+ַ)Zߦh}-joSM6E([ߦh}mWoSM6E([ߦh}mWoSM6E([ߦh}mWoSMGyҙ~h}?\/mw;9h}ַ֗w?:3]3 Q~G1]~26E40A;MGg=]wGY6.n77~G1]s%~3UnSMۙ1ɝ|]8Jog6.~G>]s峝M.MnS4y~Wwy~׌m8o.~z~s4֗G1[_sM.xdCu&0̆χ qS4M7 1"!泞 9⦣!y 1|6mΌg4|'x{odefIlrgFl3ds>M$63M>np~8\m M.6 lOhlrA&d\m M.6 lOhlrA&d\m M.6 lOl(dQɢlE&56Ym(dQɢl,6Ym(&Me,6YmrQcE&Me\dQɢlE&M.jl(dQɢl,6Ym(dQEMe,6Ym(&Me,6&Me,6YmrQcE&Me\dQɢlE&M.jl(dQɢl,6Ym(dQEMe,6YmrQcE&6@3Mr72I qgF5ĝ j;3d빆6;f[RCtynhy 6ٌq8T ؜c38fQgc3_RCܙ1qtynʎYtt}c1Ύgt<civ|Eb^yͳy.c3qv< vMGoɼb31qf̳:;fqb>lyflYs13qv㠥8=kq]F[4n[w34ks] n:ZjR7}4ERܙGg;h>G3Pd|Wg y>1<d\ y. sA6<Иl y.<d\sA6<Иl y.WѢƑ;]T7ϚsӤY2 1&uʰc3Q2I2I2c6<8f>q̢cYyTݬ ;Q2E:fe:,T,+3:f^c6#O+1+1+1+3:f>NTݬLRݬ ;fQv̢c湈ꘕA4XV&X>3YŲ2h،>yco1|<6ErmrQ6MGU!+T!+3`w YB*dQBM+U!+T!+3\)crFU$Uʌ&g4Z}h+hededeL+c|(XM̳2yVsѨ Y4LE>ZGWhѤ6YG+ݔE*DUʠyn)wH.yceo zoMV&\Xo2I2IɪI&+heL+henʠ8L䮕Iܵ2V&q$2V&q$ZM+G+G+]E.͕꣕I꣕I,2IfeK]cEK [jRW&V&$ʠn.geԛ1ςh yD,YsA6ςh< yD\ͳ gA4ςh yD,Yͳ l< yD\Иhyn)gQ6M<7EsS4Ϣlyn)gQ6M<7EsS4Ϣlyn)gQ6M<7EsS4Ϣlyn)gQ6M<7EsS4Ϣlyn)hE<7EsS4Eyn)hyesS4Mg8A?fe~̝ 1w&ܙG_eFI1w&ܙsg~̝ 1+cLPKMGKͣ`K4ܙrgaK}tӠ21&;t^Ly3c4'ܙ]s]и .]dw]uAv]и .]dw]uAv]и .]ew-ZuQE]ew-qעE].jܵ(kQvעE]5Zݵ(kQvEew-Zݵ(]ew-qעE]ew]ԸkQvעE].jܵ(kQvעOܵ(kQvעE]5Zݵ(kQvEew-Zݵ(]ew-qעE]ew]ԸkQvעE]5ZݵhLneUӝ ;TMw&V&LP5ݙj3auӠ>3A}tgDѝ ;Gw-uѤ>3K-TBw&Vf *;ÖZ-hP LR ݙܝܝ *;TB+c,hfѝ ;ÖhdAK4LP Ѣ;TBw}(hm۝ ޶ݙm۝ ޶LR5ݙj3AtgU$o gܝ ]ܝa,TBw&LP LR 4M17 I;T7w&nLPܙY3AusgoLfne7sw&y dQɢ;;T7w&nLPܙYMΰM I;3dMݙܝ LR oǿ/?뿿?>܎?m=:n?]_?fn"%'{mw[~c~ގߘǟOqg}uF~ɾ<{w~f_A^=#{~??S%K_D3vla }÷?"U3|ߧzᰯ8/r4&8VȐݯ}y\){tf=;NY\C{uf+~ʮǞoӔ{3Sq,~ lk\Wœl̦ZsWvܘ8 {<s}xZkŽǐjm ;G+x0pKg-5^a͜Zk^`^zOt-q39g-%]ag8]aTxi M\OO)c]21|?&< [&NWز\? [n ۯzu/ ;誵}W!Qjm_vloq?xgx~A|~y~j9yOǝ:yoկ~#Sޯߨ?*.:8O99Mޟ2g]!qߤ_Y|(mߢ?9ʚwK y5p|~=Vq(ooyQqR,%;u5p|C~)Eߎ?Xʐwjdmɏ!=ߊߖ;GKɱFQRn,w6v<~.}H7m1b?"O۵Xnk+x]ױ2b=[Ӈ٥ }k:dXRaz\%EX5IKV?^Ql] H鹵RK#MpA?UO7m(>ݣ4|G! endstream endobj 510 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 514 0 obj << /Length 1669 /Filter /FlateDecode >> stream x]o6~U}Xl:t-uEfCNwq/IGrξ\$]PDQERM44x3hLFIF3͂4%4A")JG8Lyc8I}WE{My[ DD(藣وy4`A* YĊ(LLam@I,TpA%aYp|>}y2E2%H*TeTWy7bz4:f2MnkMWӼ׉6{0xhKO@ " +¢juS&81` Ώ~C5t`3EOZCƑ=nIQImKqBimUgטz+ׄ8YsMBpmoZegD\C,,#T]fg*:"a^ҡ%-o`raAmbYօ_ *364<^i ޒ.ά$DLVE&kKt~`.'2UFI䴃c ILN J)a)Clw훵T/@~, (3?/SndBX $d [U~؟p&p p8%lnKNRޠېkw| OņXtJo2ʶ+13t}'o UŶT:;& юa j{_iGxY>i^~Y276kHY2*jZf0nTl$&`(~hk-2 ~/iM7:6%.88<)Qc,k/][䠵o%5P[}ݮ`ˏfAќǸOd-`|&)CxGqVosLߔIlu3HWemuKZemmƉ4 f;)ki~nEk݀U}I ˝~-$YǕA' ULqb59zee| p~9V2R ʷn:Suv%AfKVGp9F'Sv]J=yMf}2ecPP<ҌdPe)`6g#TnG8X$xUCT_? endstream endobj 511 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/SparseEx1Run-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 518 0 R /BBox [0 0 360 396] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 519 0 R>> /ExtGState << >>/ColorSpace << /sRGB 520 0 R >>>> /Length 7595 /Filter /FlateDecode >> stream x]K&=N8KXRU a>bՀĥO\\~],=;\qo>?o׿?o>w߶׶m-1>?߬V߮G{QC>~k}UG{z ^K>W.:Pw۟U]˿~?G?^~'۫/@ϙK9߸^߸uo{.}{UZ]sE.i袖:MxNz#oxRǟݚ!SR۟3>'hg4ׯ _*No]p/q˩ү.}[ g{`s#6:ʭĪ1#ʂ }G=LFҏ/^A¬=.ޥyҪ[t%޻߿f?{{\!Y?N 3yVQyBeַiƄ 3B.e U-R|wuJfo-a6Pk[lqW/!fiaQ>g&䞎Moi>|32yiv}ɥ+lĴWo ;ydnѥxz["n^j_mƳ5`f㵟 fiaʫDҪ[t%޻՞gh[tCW]Smin250b +>@59+1ٴ𰗭D0~O^A”.l@,E^U~cA蒽/+&NbZ̀X/˴n-FZV >bwÚMYKw㻟gaɮ%K S5ɘ_j 30ka'-gyumGL. L}吷YKwer lo&w27v=e%E^m;Uw pkcբ&zlK֐6s˪ É6@hҲGZ5-"pm+r-ڽt͋{ fݫyL]D*,Knӫlv7k޼spM-f(n`s&^A{nǼ=RwݢK/|cZ1c̮|2cMjyO l[0!.-]o,lCt򈡴v%ĀNjl:"++hKK!D$¼k_ײ 4]zMoG[}#t[R6vKHE`n\ ~҈|Yjn&]'|oj-ql#bvAn;#h6 6NnANR z#pi4.ic]4dx}O^Al\cلl=nӥxz3<1֞j#yzL[b ߭30,b4)4{Aȼ"&Ҭt%޻CxjqT՜Sn;JKy5۪TD+#ـXZu.{[r .t#9lұ,NƘ;C rkhx%c虷l@E^~)>/7Ǚ1KƷ /;#K^s)xfݢ xz_(}yT]햼j׵Ė.`^1kYvr!oJ6=Koz_&UEpacq%UA^L7郠 rbު}'ebmbMo}˾Ǿ, y91 >bo1t#!1Ж@54sDm2R6!fݦK/ =KL 4ڮ";.l3c0j;x=ɻJf;uoKw1cb*S}z8 >܉^yބC"e5" yEĤ^Ͼz[:y`yTG! ?BIݳk^t[+s-ޮ2eՋM^}}/􃧈C^"*bFK^AζocKvEu.{c۪m<% U<Ƣ}LGT A)x[l@E Lw-ƷxZiLam qqtWd41虲 y5M^}[+Z+WMyLC^y펵$fp +Kv<]zm2kj{`di1ccH̰8bZn#j6쳥vlSTj#R0`-=1%gqD%ؾ$a(cQf6-epuN{jζG~Ls3ZO0!f+ @w|Rem˞ڈmV*;&gE'xX􆷋>0kV/^L rݢK/7sַtFlWtlZ>y.^C͖71Ӽ,eoiy]軭(xz_dc/#=H`2)߁(!N(!{6}N9sòAC. N كM^.]hhVr2"xDKa5ҍkh\k0cмA4>[ҭy:C$^c ¼% aW3^ k&&YOpLVnJ 78\co\ޖc@4DHV8EhVČ𭒷~9@tE7LsCoilGlf~q\1Μx7aU7֋oz[U3LBt,=LB,1T2F;h^䌨q\b$nI->hqRtԏ a1FGSO ^}5^ }WWShŻ%{ˮpݢK/L-\wqA= b ̠\\F|7]3$È ,KM gaDeȊ^"auksico,5]iM"7+I7?Lc3d{֤W54/-ڙ7[&vw\tE7myۈ:dyi8w9 '#a"I(cK$ ʶB,y+Mv.M{yx"&vuI V B, "eM&%-LYyILJ)#YKw5 cA2Z-m Y`RAt,- S5˾\Kwut&.#ya:NEd!xtCliwl Hϫbyc鿔-QwҋS{[\Oc3a&2#ճgB}Q7f@e0xҖMY֔ozk u:55ƌ9(w8f0q1s H2oC e7S-"c!g k"G0'Ԛ{K1r*]o9[z_ҙSvԷwCƨxA|jE4Zz%wmjӭ XI3H" nżyZ٬[t%޻5ca؇0'w\ܜ&2+ :* lks-yfKل8Y֔oz{7(&r+Fx?-L}΋ܼ 8(cυE yvӣf:$oi-)p1َ3#2zV ]25u.}YZxIq氍ۼAD%y\W֬[t%޻ޞ/`YbvuNěc֎QÛS*ڼ Zµ`Y-]oIDNQq>4iK(O&1J&Ҭti*޻޶ɝcFCXFfTSc/{Ӽ+EӘޭyy!²+ESu.M{[RyZq i\+.+ Bzy ռ„1;.>wǝʄ6z`,)Qјωi!˶_O2!pVQS6!yѥxz_";ȩ"{Sђ{og}9 |UyՉd biԝuZw/,"y?̠ FfMCq;cÞ&IT8-@.亁I`"f0;m0a;֧!۱}'vlm;x혒Sӎnѥxz_i_c+"j~Z{i29W . QXʛW~a=ˇ!VݢK/vHiuc 7Fwyg =TϘ y2B2unĥ8YMs5wNi#1SxN+:9oBŷc!Bk)A*z]o;1aRͼO&WО3=۳:6Cyrѥxz_ҐtLc1pA l@!Ӧ8J5y yY&˥m+-onӥxz_qg/Nfi0{V #:W:Dl9ӏфelB)1/M{cl`5pab@hsO-EMk-a l d^^]l@QKw-={(.:82ML|4Idv䓱ԖXuJmw a8ڕ$LÆNA0~٩ 􋎕,y QI +e.M{fqDYaڋGE@Ҩ2ڽ%}?y$cg^mHYYKwNb_){2d𽜆jӘXq』Uگ@0ۑzi݁[tŹ0Un~19}|2 Ѯ[TzNUbps2ywNـK a;ƔeݢK/pfҜ3--۠ӄT=Rԍ[|+_Tw)i0n)f>]zMk}͒&s68[q#fy^;0t A7#soM:.iu{:t %fƦwD/'%{(Tϳ1+2$? chOߤCG?8xUX#O}Njg!>N(B՛6|^% yMS ?HKe1z >8_tX<^eOw£zO<B>.Qϒ=/?q^c,#J5\?ü$×ry=Q֯%/*m_e񕌼Bˌ|ե|boZ&x(+`0X oAW=[蘾 շ* /|1:t}ѳRX݈݌o=Q4~#W"~~|aշl_,}e6җ}Zoקd>S-΍dc e2{όGM<9cc-:5eL6U[L> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 525 0 obj << /Length 1489 /Filter /FlateDecode >> stream xXKoFWȅB-fߏ94-ֲZTI}gwgiYA\po^lRgXM3# m%)t}9Ozylb0F"}6yഠZd\Yk@':9[s%WCE* z6dh?)~_a&*j!RDޅ|rP9/^'O8T9O_&0ԀM7!L84ny0=MF( q{ BP~5@ D6O^Q{x&ڴ-E,MJF e!Zk"F}Wc',<2pNQV%!x[2@<-p _Wօ*&8\XE~>} X( lup |EA}7NʵY3s6SS26cq;Gv,}S&%(/}ܮKқHL h(赘m=~߇.YP0m'd)Qص?ThX|o^ n9ib.r"pu?`$~n* u|2fnġD"E,`(Qy,b(}!V1P 39Q4VF ' (G 4A#mxݠF<|ШFCR^2p6)?Gsѿr @ F'$ѿK$KA3$)QD5HT#QB5tA1<~Pd97fT p cFT_9WE~\5w(4'>W+\ht\$hAqQ:?*vO՝;N7k$׌VyO؝ÛAyUwqs(ڵY%տ MIqj7V2,#D+F ;Z>V$6]U,}?u09&>]90 0yy7nooY޾}ݱͬ?u:3/X6$~wgjΙ]G R|:T endstream endobj 534 0 obj << /Length 1777 /Filter /FlateDecode >> stream xڵXKs6WHD4^|M$;L3mLB'|($;X"e=EžBysjuqgAR]m$ X,8dAU]zcm+z#S4e+2]v45 Ro>]8<%ad* "ey9l}XdYS" xü>Y14 =o6;o (dO%r/fQJkҕ AImю'j$k飗ePo9KFHi2\IJƽ}6w'󅅬Ӈt֛G>}D_.p$Q\yJ@ *Y$,if7}%t z3M RBYo zm<%1v(c׷G@B=;Ex|:uxiMD:tvüRE֕ b!` T)1Q(](4feb4mFC NAi5c=umPWH@XFjb m7}3 i;L:돺,Ї BiVC1h.-JY#ae]_\p8)]R(>UQLjj-D-c$J9k{qĔ *P[DӉ(Vj$I~f4٪;/ga|Y 1UsQ\ǁ7F?p7Fs<t/5 4|[UJ>F@@|@3]Od{E`7*'fLV`)@(͉f+B d~ 凧\)t{a?j􂦠ch^r@wJV] +R_Pݥ)$ftumBg# [*- ? $(q4wYkŜmH;8V%t$=B`eMmi4j(hog2fOX> \( )wS5)XB6B׸YNZB~ktٝrWNrD(KsJvҶy(mz'p_)a"hz۴"hO%!(%7P4G鐉DYR9Ɏc{xn(^ &j4'O84n@׮@ݷ-gcJJ_C{Dٓmw;Omnm;B@j"sg!ȿ/v{y -+ ˸Q5C9 s!W-H,&{'hyC$ßl r,v.s]w'iPN[!9+S⥌?ڴۭ 4gwW$f` endstream endobj 527 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/SparseEx1RunHeatmap-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 536 0 R /BBox [0 0 504 504] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 537 0 R>> /ExtGState << >>/ColorSpace << /sRGB 538 0 R >>>> /Length 46936 /Filter /FlateDecode >> stream xArږdQH$L=S(jY)olwܗx'[׉@k_~~ϗ׿z|mg{__'?|Ozm?Nlo#F^c_zp^_O83p^?>y>~[b[bo_񒽽|s{{^~]yG{z{zy /ko[oz{p߶-^зOo/]|2{|UU=>Ro^>ҹWU_}ygyIpk'_xp~﯏g:6>N~|U}W8ǧ5\?񪾿īt~|p߷ W=^ǧ+]t~/኿?>]o?UW3yH=_ǧ+^-˟t~ߟ/?>>]_߄wt֏{gxExUg.]#oOW{W:ǧ5+mnwӵxpŷLt=>]o|H;_ǧ-g~JO:_X?%GW??pToE=&Zok ~>';[Ow ]<|{~qKiQ ~?z;痷z[\χн~{~KfO{q=x?.'G||^ٿ=%.w^/ ~=ǗfW}W{RW^ʟ ~=콦󵸞_ϷL] =թ~W~ȷt{^o*o^ |z n/{ ~嫼m*o콧=/󺸞5W|h^{{~}_}*?>{*l y~go-'_g-v_Ux|Ux+~^۟|?.z>>{z[5>L)nUNr{_sKl]ǙU[0}{J p__ĪdZea +.˴ﴴiUK[M#:s]xmo4;w ,ӻN{w;j%I4ßR/OK簟px ~櫬N^Kp%7n^9K{q=Kp8m?s{b-Vk Ovu ]k= *bVc\0VՊbVp c1YWm%:`%i ,ц.;,Ⱥllb, l l+ZkZkZ+ZkZkZ+kj*ȪjV nɪj*ȪjjR:0H!a!h +r},(,((h:r-痑ESEҰPJEtZ)PJEtryaY4K`4DlOCρA? Q? Q?Y? Q? Q?Y? Q? Q?Y? Q? Q?Y? Q? Q?Y? Q? Q?Y? Q? Q?Y? Q? Q?Y? Q?W>WR>t+)x3҉R:SEsXUDUUb%g氦תDkUrgb]ӑk 8,c8>㰠< 6VGVxQEP'~"A)Y)Y),]UEX?Ga)]Uu`PUAVUHӁuVv`Z %Fv`Zm Z+Z;0h˟[ե}YGu]D]6d1X"(]tYuy>n(Z+j=0 `ZFiz"ֆ,т}^ >/H K@hCeA&]d]d]tYuYuy`eAeAAYY]d]d]tYuYuy`eAeAAYY.ή$:|\D V=ܹɱ; T1:X 7GOz`YÝDÝDAÇ5=I4==zMW;lzpw`nAnAA+=܁+=\AAY;0pYvYvPvYv3Ȯ SW{Mw"AJ"+UUQUEPUG +^A4RK ,NRE)U҉T^EXUQUYJ Q?g)].*+$,,  ++;0 ,,  ++;0 JkG'h! ߫xP`I4^%~y8+Qt@)Ұ[%;n'R*R*9,aqǭ#h^G~" .׷ ۻ +)zÎ aEް#룠D/jmHZ Zn4D6Dd6,Ȏp:Ǝ:Ƹc˹!ʹ!j`j r EXcH!玠 rH#rH!犰cE#(炬(܆(ppp ppp ppp ppp ppp ppp ppp ppZ4<|肆pp .;۳- ΂pcV{'{@CtvXI$Xw6J֓=Vb',Yuvy Aή#(܂AQ YD.  Z+Z+Z+kjR*SpCdSp[\Ϡ~ I9N?A4,,~SOĆ,Mgבb(GP|PJAVJF)'R)"R*(D~#,(,,#;LJ)J)J90( + +R R R J)J)J90( + +Y)WV>A4R R Rr]!d , <0(`UUxpD:1VcE1HcFa1X",Ƃ,  d16,VkRZa1lx"+҈"OcEXY1d1d1X",Ƃ,;Lb,b,b<0 Ƃ,Ƃ,   b,b,b<0 JÛ1! Ƃ,Ƃ,  l,XP 1D#JbD!ƓhXB@1ֈ(bXvPvPvUuP`G VQ`G vXeWְZG UVְZEuVp#0Dd5ZCZAZâjJ`)֑B`a5,XF`)v7vxȐ",((,:+ZkkX":R#*#((,)'H# kk+Ȳkk+Ȳkk+Ȳkk+Ȳkk+ȲkR~ lk+Ȳkk+Ȳkk+<qߺNy,ÊI4;!+c>Fp 1jΚ*Q<Wy=xp'۰x#pa6l$ZAYYD6D] b,b,b<0 +!ˮ ʮ zddWeאvAk Q` UHPUATU;X~iH dd !;R !;R !+TUXJUiTUFU'R"[;/K`5DTUVUAV&UdUdUTUUUUu`PUAVUAVՁAUYUYUUdUdUȪƵ +TUUUUu`PUAVUAVՁAUYUYU6w>.GzЗ9=Q$VyvIEDq;kڣDq~wvw⪻h)U$`~ ))90 ~ ~ ~ ))90!90මA?Y?lz*Z)V6|V*؁*t`i: , , <0t`"܁V;Mv"*h"N֐V؛XЁl:4؉TZk k  Z+Z+Z;0h k k ֮d7k Z+Z+Z;0h k k|{~/k4a@J < V`bY a*QhP`+VbsI֊C)Ql5 :Rh":Z+ZkZkZ+ZkX&;R&+ l l , l l , l l , l nk l , lX(#+vP`G":+Ȯ#:RȮ",((,:+ȲkkXȮ":RȮ#*pA6Dd5,dבBvid]C݁Av Qv QvYv Qv QvYv Qv QvYv Qv QvYv QvW>V A Qv QvYv Qv QvYv Qv QvYv Qv QvqK|;VvX'=\\w3BkΚaa%aa%PkV+X\[a,^ cc,U ++;0 !`RARAҁAJYJYJ)d)d)TpC)d)Tp[\ , ~0!a J)Ji8<Ӕ\y7| ,(5#Ď#Ď#Ċ| Rz>Rz^BG(Rj)X+Ҍ;jx-%TRK K  R*R*R:0H K K ,,YJW߼V}PU ,,  R*R*R:0H K K^tgAJk{,VTsgUWuMWuMWuO)tU'tUDa(bÒh 6REND׮*90 ~ ~ ~ ))90  zdSSsI?Y?HOAOAρ~*",%ls"~*"RNRJETQʉdlr"R*J)J)Xɣ",,;L((80ȣ ˣ ,,< < <2\ޠ,< < < ((80ȣ ˣ ,,柷Wa,b(bEGsMGSD)$>ES abES9 VJϩHTs:i)Ȣii)Ȣii)Ȣii)Ȣii)Ȣii)Ȣilh hnɢi)Ȣii90!a!hh)Ҍ:i)ȢiJiJ)ȣ#<:R.izhh 64hH#hh 6! ((,((,((,(o?+ W0!! !! !! !! !!=.DsgA4hRմ'n3hCeA&]d]d]tYuYuy`eAeA偬˫_+W0H`eAeAAYY]d]d]tYuYuy`eAeAP_L.,0aP$^%݂(v D3D1KΚ݂(('zewV H1H1a1e]侬 З,6PrQ pYkdlv"*^A *V *-'AUYUU,6[rUu*RlH߰"~Î4 J`)`r؂I ,cDl@eCcF'R"+҈DX Y]>/`]"UYhA&dd$Z%Z%z`hAhAZڐ%z`hAhAAYYdd$Z%Z%z`hAhAM%zKJXsDsV%Z uy 1>.+ gú,v-Ƨ9b,b,b<,jᴂԎȧۊȼeAeì\"ˎ1Ҳc̯*ra,˅矶6RH#a)5lSρA?Y?Y?,) *Ȫ*Ȫ:0 `1XH3Xk kj k}Vv`ZbVŎŎŊ4ŎŎDl)) j-j-j=ڰv%z K!a1,H3,H1,H1,Hs#˂˂,ƆaaE*]VuYuyIYY.~e$:vh˂˂. . . ,Ⱥ,Ⱥ<0 ˂˂. . . ,Ⱥ,Ⱥ<~L`O,u9;R<ؑb[yâ`eG"EwyAVvCsâHH4eGݘ)REްD;"/"on>0(!*WJi7De7Dede7De7Dede7De7Dede7De7Dede7De7Dede7De7Dede7De7Dede7De7Del?/Mwyb,Ê$EX V5c%Â+RO"cD$ aGPް#(熨AQ YZD.  +Ȳ++Zkk*TpC)d)Tp[\ , ~0!air؊́ͽ;RlEHMAMkˎeGXJ)d),Vؑ^`G{a)5D4,:Ɗ4cGP? iȎ 0HJU )d)d)TTt`RARAҁAJYJYJ)d)d)TTt`RARAҁAJYJYJV}_uaA?~kz{ƓzOnVsgUxMx; 9WIVDq$~ w:9p_GXJ)d)d)Tב; ,, 6ډTZEXvYvPvYv , w: îHqׯ#("(#M_VU_V/HӗHeAeA }Y/+M_v"U_V/HӗH՗U*e'M_VaE*]VuYuyn%a A Y]d]d]tYuYuy`eAeAAYY]d]d]tYuYuy`eAeAAYYj=uY uٌt&YJ9;q?g'D7r$ZxډjIX/GY9j}DH QHj}@RkCTZ$u$]6D]> I QH |@R`CTn &$6D>ම$6D> )IvYvHZ{^GP`Hz@Râ{Dp#($)=#EXC~ב{Dp#($U=#E԰##p~󀤟$4D< I? Q?Hy@OC~󀤟$4D< I? Q?Hy@OC~ӰϏ; 9sX{I49F?Dhs;s~N=s0ϝuH49J?iSρA?Y?Y?ddSSs`OAOAρA?Y?Y?P?Y?3 ;L))D~ ~ ~D< I) < < <VH&,tD?"4J9'zDTQʉdlr"R*J)J9pJ)UBL((80ȣ ˣ ,,< < < ((80ȣ ˣ ,,< < < ((8ƨߏ Nǝy8Z~čQӺQHnim ![x@5ZO+ Ac! tVwv: $o U$o픖p`B<^Ũo:&N锂R r <\ G˹!N +;GVqxy}M^Ci"<Ƽ\b9Cpp5nKh r.r.r>0ȹ ˹ ,,QH~@/+}YAhC0Ȯ ˮ ɮ!jY`oGȍN3Z{@=}ZLSJ , ,x)Pr}<|xxy ^Ga #˗K>0( + +사8n,<|Mx4y}X^ǘGQl0CwiZbi'C1 %;M;;amXx0߰wVbщ+ƒðU':,iP9 ׅ (<ϝï`x]x8{O={En~EVG nApC:% wp>  (1׏K 9ιvY68dQ6HcY6,%Q68_u. S68-!t "\ 0!@`C,r X ! @ C,b@ X 0  @`A.{xS6p(DNK E3' : oK!vo ΋>!Oox] 86%]ˣp1 E1AHQLp'y(8_I>Zy`XU DS vJÚR$R1Lz*JV&q=pZ@0 gĸ0`H@AId7qCVAeWQ4deObෂMJQ @Sx-ޅ7[׷{~ߘ i^vzTi O$H K K ,,  //?0H K K ,, \ zEouDp^~EXqV``v7awCvN!v N"+.>pEXY qyC{7޻!. . 6%v j=0vޑb?]ww%zh#h#DO$H K K т,т,D D D --=0H K K т,т,D D {DnG~~!K}>#ם_Grs~>ʍp|`3H1H1nx=~ z/X ;?F]B``(r@ ~zC pke?Clzo/]{1^cᓸqiM\G>GD#WX#W+Q&1쑋 =rC =rEX Q QY #E\GH#w+)z=rEGn=râGvG vGH#w+)z䎠z=rG W^^^^^^0?$;ryCM{b0~"`#`#`"{7޻!*`ewel`5\5@k ;yCnAnCnâ#Hӑw;Rti:yG#/unSbѽǸѽ?'{?bžJ\){bv%Xwĵ7bIvNl/;.ڗ. A.R@Znx|GP6.V_P Ļww Kp/-aQ6H/Ѳl=_.pp|~EDB@ \  \ P   @00@ @ A. \<[;|gk A.r``U P 8D?0 ޟ^ͪ{K KJӟwO>JU P \  \ l  p@ C@ M`"U@@HS HU P)(vyOxj˛Ds=Jp`g@0OP VlD]$xG~@0bIb<%@jPb,6so ń HńkR&·x+ `3dH{ÚE_ ab?OxKBa7O?~%I/WCb(п! .^7,nP{G w,m (҈#;ArHq+"n 6Fdr.rnݿB`VCZ+jmjmj-jmjmj-jmjmj-jmjmj-jmjmj-jm˞~b]÷ZZ ZZZ 6w;jmXܽ?}GAd6,wZ#TkCTkAVkCTkk>6aq#ւֆֆւֆj}~MnY Q QY Q ?v%ϯM}M]ˮk΂+JsU=F'Qt']vF'Qt']vˮ Ϊ.#Ee7,}x! ܂EܑsH%܊4­H9W;R ;RtiޜW$ӟ ;t  "/;R ;"?yE|GXwXu):4z?  z/z/z?0 Q7 dd^^~ I䓚(Rt'Ru):现 z/Xtatad^^+^;z?0 8o edede]]fwo{I4>  h$aIXYŶvJ4'k4|;4\Fa 4\8.{3 -=0`Vd%i6sp nb;GDxܐ{قPJ\/^f/{G-a]lvHVuy` , , <0( + +   , ,H ,w" 1Nמ YddXXx`V;܂M{tnE" 6nEXVnEXYdl: ,taXXx`P`AV`bL\NtGXY]d]d]7F(tY ab.+Q$($Z aD+QHDO%Zh%PUH!юD DlGPrGrGPY v)Wp;RtAd6,F)[fpCpfܑ;т܉6;R;RHӟvnGPV;Rȹ",((,((,((,((,$JQuCsCsAsCsCsAsCsCsnGP D#EڑbwyEnl?w>JvE^e;"o"/"ox@Fs,E/yf9Gw^K KaqǸ#E)@  Vg@81| X@I4S ҇U"?F'q=~:JkD~C&D~-ʾpa wGHΗ]QvEXVʮH슰 .("ORvEeW}`PvFi}"+.>RvE6T&AVABi] 6pG9W|+ȹ"O$ȹ ˹ ,,  r.r.r><"YAs ,,  r.r.r> qG9#+ȹ"OsEpoxC*9W\|`sFa9\sEXr,p bD D D --=yCSՇ=ZOXHtXw5%r<pؔΚ)q-D$pc½$܂N+ ƫn>cQX^.pE]SZ w8 ܂$j^=|AY.՚_ւZ naj},Jl<ߕD%t= т,т,D D D --=0H K IMRtxTݐ%z`hAhAAYYddXu`#{hEVyܰZ+]끕+b,b7d l4{E5|~> uMFΕ(\ a,b+Q$X 9W|X#JrD!`9+\ a;Rȹ#(,(xۀ`9GP QY 9wsE#N w wpEs8oC#ւֆ}vPkG VQkG vz`֎jH֊ZZZ ZZZ ZZ/;`|+!! !! !! !! !!`֎\ow5=T=}G#사솨솅+t!e_~BYG!a;EX #(,((,(+H#+! p! Vr|gOI,F'hWQIRI4>b Aه–}d[[{`%܊p p -""p+",p 6­H# --=nE6T~zE;-ޕp+ VjH֊Z0 ow6<˂˂. . .D]NFH``eAeAAYY]d]d]tYuYuy`eAeA偕.+".NitYAY]Hˊ4H ,Ⱥ,D. 6˂˂. . 6E~\6+vWؑ1X#$ V +ńa##XLba##XLlvwؑ,&6;;RH1Hs#ŎT O;;RL(  F2gA.&n)wO_f?}GYG0w' "\60IJ! l`HeZҙp! l eC,b@X60IJ l`eA.b\60IJ! #x/aD)wO_f?}G;; yyGl`eA0,w ~;RM^VAYYe$e_&OE사 OW?9֋q] bE}(u7ʮD{D{W+aM]D{Pه n.nXh#9lF)FA9d97,sWsG 9w;97,ۑb^fpCpFHb QY Cvvwz`5.Hk#Z+jmHjّ,i  lPxY ;R ;>`w`w`H`7vF'Z(8.[[{`nAnAAYYdd[[{`nAnAAYYV­ >}`5H1vkm) ;R ;R +Z;܆,D 3 Yrֆ  iEAsG;)6SٔΑrGX6YLpU]hr~N\.7zc,D>Ǎ) +Q +=葟~Z3Dî?;;[}X.ećX!kX#X"U\sH1֮H3J\vE ȯO vGX;t)zcp}X#X#^U)$Epݐ`~A~AAYYdd__`~A~AAYYddXI",M}t]vEp~y  tsws>~~AAYIׯI9W \  \ l  4ED"M@. Q 8 n~N$nNbf(ø#/#9c . 0n(т,ц(ц(т|!! !v I Qs3Ğ IUHRjii}dAMÍR Rnx@ (yC0/7s亳{й(y 7]>/6frНǣh(^*U@ eEP?ׯK!J JXU QUYU IUק룠_"Tb~f1UJV=^r:b|gA·[wFO/~yA7 z/z?0   z/z/z?0  zd^^~"=Ӈn=ѝH%\s:j3^XU P)(r] 8;Ɔ$%RR"R Dn~E H. Ml>J(&^~bQL8;e"\6!\ 8 q0^8o>Yn-RawC{p -}oCV"ךx^BQ& 6=gED"Mwy"&*š(tH]V.+t'Ruiˊˊ4eED"MwY݁Av""MwYAz9⫞"My"UYHsH!Ծ w;q_(D y3y1yN뾱i(f$f$b(f$f$b,$? I!JIHo@$($? I!JIHo@pA; I!JD? I!J}Gzӯ.ߑEyl%9"K(v|^XQ p(* E\+ #BR(#BC,P#EP #B/(_ p(#Bâ@pD#E/*b G E/*_U,R b_L8" , |pD)ط׏PL̚$1|N(w fTbim0K ; %aĝηW"#Dw?/!.t!ȥt!ȥ A.] A.]rb`(]rBKCBK\J\Pܰt!ȥt!-g(]rbr#E7B;t!J\?ȍůqc(T0Q8E"-wF|P"b"EzE >bPbH1Dq@.] \.~T?H1D+ pAC \8 )HC,<J b@,&`? Hr)``(R),QHz@yCT5| jIHjm}@Bxٍ~߷$tb|:Fr'>Z՞(Zwx+n(imŮN,0x4%ǣ r~`ȳ#rȳ^ Ƃ,Ƃ,   b,b,b<0 Ƃ,Ƃ, n(Ƃ, nXxX=|@&1d1#)#(c崰.d]NGA]>`c<6A.t9o*..8Ry 1N'c>ʢӟey8%Yn9t.d]NeEXYwtYuYuy`eAeAAIHblXXx`P`AV`AVAYYddXXx`P`AV`AV?D+< <$͜1onD1D˓htY e1a.+c1a,b6<16Vpc|^B>! !! !! !! !! !! Fl,Ⱥl-[/edNq7D]6D]tup˧/Ɋ4Hˎ`YcGVbKG>G}0# #c~>".;+҈#;}dec>FY1e)##;blb<0!! !! !! !! !! !! !! !! !!`35ŽaOQI4 '*^a| 0؝bXUwTupŊ1I4{bWOEX?Y?ddSSs`OAOAρA?Y?Y?ddSpCdSp[<F,m#ςA?Y?Y?wSScVvۑb3#r#R 7+ 7;R*R:nvmGގ4͎ ۑfّ{{;ZbّbYf/۰cVOEX?Y?wSSs`OAOAρA?WcaƘ *Ȫ*Ȫ:0   *Ȫ*Ȫ:0 JU#)5#C4cVq;[%X?~Vqڂ,0VaNUaUdUX"  *Ȫ*Ȫ:0   * DUM٢w*! *Ȫ*ȪäMt"w:RU^Xs#}4Ӊ`jTu`?U*O'U,Ud|)z|MT:`)H 0  6H *Ȫ*Ȫ:0   *Ȫ*Ȫ:0 fwUuXVTJ[QMيJ T`1kdW}OkcX1c+RIaab{)G Qv IvC^XXXXXp#16$1Yrz!! !! Ɔ(Ɔ+҈#;R";R#+ ;=\CcF)6rcE1vwlؑB)XfؑB)XFA16,z4b! Ɔ(Ɔ(Ƃ,Ɔ(Ɔ(Ƃ,Ɔ;R",Ɔ(Ɔ(Ƃ,Ɔ(Ɔ(Ƃ,Ɔ(Ɔ(Ƃ,Ɔ(Ɔ(Ƃ,Ɔ(Ɔ(Ƃ,Ɔ(Ɔ(ƂMGq7V7V7D3n05w*]`G;x01^1|Ӱ$ŝw*{a~ { YkYkddVVv`ZAZAځAkYkYkoH~1fmq  Z+Z+ZäNZEUډTZH4Z;^GXkVZHuډTZk`U]EU݉pװZEH ^E*UVvIkYkYkddV5;c  *Ȫ*Ȫ:0   *Ȫ*Ȫ:2yKO!bN=QI$m(D%`=ܝ5@);vXk@M"ɮ`#4;JvaddWeWew`]A]A݁AvYvYvdddWeWew n^vy-ŃЂAvŵ+Ȳ;0Ȯ ˮ  *Rɮ"*@ VZH4Z;ܗd[HӗU؉T `#VF` 9R[Hqo"ͽrډTZk k  Z+Z+Z;0h`ӭUN$( + +   , , <0( + +naMVB(x+Z1͡ĮOnnʮvk֊֊˓u5ĻsuVVVVV֐6Td]ˆ(,ڳ  kkX"FRI9+lHe#ŖQh#ŖQ[F)ljae"͖Q[F9Z+Z^BZH`_ְ7VXGP` Q`5D5Dd5D5Dd5,|H!      V=?A`wV $D#{IcYaN=v 0؝;= ",,+UVv`XAXA؁A`Y`Y`ddVVv`XAQɆ dVVvI`Y`2;J`iV؁*"N$ v`oWw4:JUaUlTu" UMK@U= KJJ)ݐ!,z酫Tu"*ª*Ȫä˷7 rIkYkYklVFk'Z~Pv/ <0( + +  _jK|qQZ Z Zy}ZRI4j=FD֓`jD{"0Va; j=z;, 7͎͊Tj ււZ Z Z j-j-j=0 @TT, `Pk Zz`PkmqZ Z j-j-jäււZORkEVz`֊4jH j-j-'Ri[F'R ",܂pO +a Xi"+Bn}Fiz"Z+j-jäւ.˂˂. 6H ]`A  , , <0( + +.U}|Lϸ֨*C;:fe%\1;wr7=UU UUO;]`C 6! !! !! !! !!jB`gCTUAVUÍTUUUp[\{VUCTUAVUCTUCTՁAU QU UUQUGHUJK_ewTz>ʍ'ߞka7ȵ׷TwfEn(k`vZJ[l$IRHV ;ˆתz^BDX`K:ƎcEPGA18 z DQX #ւֆֆւֆׄ[{r.t):юhEPGA8 Gizwxp'$$$Ŷ`JۂML .< +a nPbv6ۂM"t ι#E\#10#!刁!A.G A.Gr9b`(GR9"rU$)vC.Gr9b`(GnXrP>#10#!r #WwUcU;V;炋rDZr[0^B-"Cr #6];RvHY"(!;U]vyx9lH۵#n׊4];,_f0E҅"\.e7.!vn]vC. .!m{` ι! bܐE~ w snr>;97ι w snss_Dtc%+QvBY˜PƄ0ԅ1 cBY˜p[0&1. eaL( IaL( cBP˜QS1 )2ckM( c|urQ.S1e(NLE˄F ŹRT#Cmƈ1Sm0\"eBY.LeBY.rP˄\&2. 0%0, e K`BYP&%0. e L(K`@]P&%0,g'%paN{4 )aa`r`z00]laLhm( `ƸlLi*TPΔO(g'.?&'.?u0)?U}Cɋm̄g'.?&'&O@]~LOm''.?&'.?uY`V~bP M(N R' M(N )4C M(t PqY*r\P:TqY*NI3.KbB M(ԅfY M@]hL M@]hB3`Rhw,bBIR@]4`RPP( (Ei(E).J&E).JuQ*JYɢhBa4!4!0aMa8M0tL9M0tYX, `N[lhBb4!CMȄn..v&..vuPٷ^jݰ n..v&.&]@]L]m'..v&..vu[`VbX ,ck* `MXS솒XUB1Vb` Y.v8Q..v:kUS1b, Y5 *vbPf.c0(Ia c@]L c@aS2]DLh@]D":`RD"P"Pр-8 uQ1b,YP]t -ss0]ȃB11!Gq0=b & n0Yp#`#t &h01"G 13bLEф^?yYZ. e nBYp;l(óL7BʂP܄&7. eM( n@]pn&7. { nBYpꂛP܄܄&4,|EXʪY?1g9,*rXT2<{]2|3 ϞcYaAqâb,EeܬE77SpÂln֏ f(NNEᄲ r̙P9ҚPքԥ5ln&̀zP#P&%0. e L(K`@]P#qdB9L(Ǒ82G&'U~n,| c13 sa99%p0]9Ѕq0]`8r11gBc̙1 E9rP91gB]8`R8 u KI K`@]LJ`@]8`Rn%p}R8`RPf%0.1g(Θ3y+*BVTP[QQ1Ɯ܊&n@VTT1g*ƭ8]@y+*@gtq+**ƭ$e-1Ls9Se-q+*(VY EƭBnEEe5-Ozk$s+**ƭ:s+**ƭ3MEBP?Iͬ( s3+*ͬ 3FNe5FOg3FN#b ]?|t7`RPP쀺d쀺d%{d%;.&%;&Kv@]LJvm~&%;.&%;.u^`V)CqnEŸ8s-*F6~Pg ex@ bhS17P.jAs(rqB]tnE)á8ex(VŸcq3(VqE瀺8/0+e6lL n@]p;`Rp7ԢܡmBٸMI h@]DLh@]Dq82G%pdP6nm,xT9/-sj=a|/U?QNqTD[`]>vz|]ւ6`|%0鹝<=dF3 x,JLJ>g5q*Pƀ0&1EYM, e hBYD"Pф&E4. 7UD"z>z>肛P܄7, e0) eMh,#bS1ȡ8cT1r*9]2и8bS1ȡ8cTdqNh SS1FΩȒ9bTSS#98"sBYLsBYP焲8'9. ✊QC9, eqsBYP焲8'9. eqN(s@]P瀺8'9,q&ya82 c\+^ L ɱ`ILf`IaL`ILYaXwQ..v:Tb[g͏۹ uY ڀIY Z@9 { u KՀI KU@]LJU@]R5`RnT㽀zp[I πI O@]~tPS~B㽀V )48f(I M@9 M)){CJJ(tJPU~S1V#~S1VMŸ4 *4BPf&ѢMhц(Ei(4Z8Ei(N6E.`&,.`u0)`u ؀I X@NPk*F56cm*~;MwwӅqaIaLta\XRӅq0]taLƅ%q0]FhB]b7<38#PDCFvPP%p%0.&%0.u 0)7Y8`Rn3)U >Sea>SrPf2.r9b)j(\$ry~ M87ɢh@]Dh(ߋYEt(M"P]rP\fUCqJPU4n|eYοubpu+yY7;ơ,o|卯˩[K?ÚNueQpgUpCQEeQ~R%Y/oBRL{@]4`^gIJdׯԲdׯԲdOe5Z?Se5g7.d!& `<,BL` y0YȃB>.d!& `I!O( y|ǧg,J򽼯PN8ȢĚSpnqEh~SQa—GOA맠@G8P: TAy|~MN4ϯ.etA=B'" B]ЁY1+8 4eQ.*4B (NHAE2tB *FHA)8!RʐPFC8w *FA48heOhFZbTV~'Р" Wх~ NtAň.(BB?etʼn.Љ.EvBpLeOA~~@Y٣8< ?I’#?$Ï`:(, ?#? K`:ϒ#?,̗s7kCk:'E7~9槐uom P6a#D(*X? )֏"/2X?$4CѽI '@cz1'8Tn*::tP?u ?8<d~bI$0DHbE"PHbE"Pt$=?JH$ ?|? ?BYɫN"Ȟ‰c:VG(Ve~0<Ȟ2Џ?GGe‰c~9#"S8GѝÏ),Z[U OT|&2L'd*>!˗?`Yr:tROe|RO*<Tx>De$R ?*T1 4*TE߻D̈.r>.QNt̏rKQTAxKd~ 2|$BEF"nDe$BhUQG*G*|ǣ*{ ȣ}itL*e Uu0 UP UNPE%@qPOr~ӪPЊO8 c(Ϊ!Tt2jpS$+>P'N|@ O (N|ęUDkP1@I@9ɆP%$Bc}*CŸ_LUB~Oҽ#wP~4?; 4&@cP1Rh@@k c U1,8Sd=0PT}]r.T0Tץ*BŸKU0T}]DP/W:^bLbLRc: g: c: w{bN’@#4@$`:(, 4@#4 FZkK`:²@P:N Pt ?8' ?8~(NELzGuI@ 4B+nr%@+ @]EP.ΏP(N'Y54u0 4(NG(Vh@#@c~~IVojg*rB#?uQtsbus@q98XPn(N7G(V7怢#΂THhus@q98$ts@q9Bq^~ ?dL`2G0~LɅ"I^_=Lt&0~KB~PFA?8#b,x E/xJ(<% i/r 1)]T(C @RʐP* .T@ӡAe[S΂Td,xJX ?Z#bL{TQ2zTB *1ʉ@c~: 3sPY2(NAŘBEz* 112/܉HC̯Hd~VU[B*FPBJ8A #(b%PA~'(rVTP1(NPBJ^,ČVE'zyUB#(b%PdP~I(D-N|Be$b'Pd;Q't|L'%I0IaI|L'F$8`:>),O$O @$`: O'>'$ Ou|0Ou|'X ~1T@91e~$L@%BB UBB(LB(:T h*PdO/@qB(NʉPC%yGINt|(yGI(N@ `=>P$+>'PV~bV|e$"L@AIe*>яLb%PJdb%IPRXAI0%tPL%ɠ${mur%AI0AIaIPL%tPRXP% J8}&DHD":ԑH$ԑbE"PHtP(DG"_'ns ?#~@q:J莒~@1VBEJ P@+P1@+~_Hu~ IDUC@qV #@u}#@tnKXK\KP%Bh%BXKs~ 1\@1Vb0Ya9W1~ #TF+@qVb0BXac*:0BtLbZ"TDp=g-*y̑=ʉDGqb%Ŋ9ǾIQXs1G0stLYQEԛ`:(,9#9 Kb`:c²P:Nʼn9B@q(r-$1>g}* T TABqG@LD7:]"$v~-*r-BtAuQ~@q(Z"P4Pth%YKd8P=:hPk sΏZ"Tt}:c( #Tt@g:M( #Tt$(W x@q&@qz),O$O I:*ߤK`:> ’$O$> `:>),Ou|㓀I|'P(V|ʼnO@>4TP1L8}&T>*3bPK&Q ZuPn$tP&@;BhXQBEvꠤ@/(%P(t*߃΂t*t*F τUu3bP1LX gB㓀I|'@qL}&T>(N :I(N ~z3Ϻ/c U|řzCeȗӺ/'@1zR8r=)T$e|řCe'& *:( %*(PN\.lτq^( {l8AI(VP>N$(), J$ J0$yzBJ K`:( ’$J頤$( `:(), JuPIP%P>PEW|J'%@Q=c~'GG@}> YJuP0 J7~JLO!ܾu%߃*LP% JLP2=?k(VPEN!4b%Pb%PtPVP J@qd~bI|0Ob'P5J5JJ5J8kPA FI(%TF +("k@q(bQBXʉHd~g*%P5J89M0 ?H# c5*:( FBX g5*yP> '( %tP$ 'sӓwdP&`:(A JL%`2( 0ɠ$XʠP%:(!4*FG QBE%NG Q(btP QB(";JuG JePM%FG ʦ;B%P*2(!AI@QB(%T*PO!So~P ?~P1D8]"Td9uAhTsP1D]"P ?.(N~]"X]"TI6T.($*2 4A8 T~*F?BP1PF D5JiHbP1zG8#T5J#PHd}x"d$aAIzBN$ #`:),DH$D K"`: #’H$DH,ԑD&H}C1zG8#T*: x"‰Hd~ z@r ;Bz&tP1:J#`~Ppe&%EwnFK?uQ%Bb;Yw!4h,J{ǣk@q(@t(bQB JB(%Tt|0O5Jk@YQŊO.@g5*:(tPJ(^P J@(:(tP@qP@qP@AI@+(%PtP J8A c(zB'(bF J8A '( Jǻ/C$y =!L%%AI0AIaIPL%tPRXAI0%tPL%eA JuP0 J(NH(VwJZ#P(NH(I|(~%4~bu@qD$`P%%^lxtbu@dG UPP+@qL8}&XQ ꎒIG (t:JB:JP%(NG '( J@L"@QQʼnD8%X%PtP%XA :AIQ1Q3'> ŊO8 '> ŊO8 '> ŊOl@SoOZ '>LZ}&Pg@1(',Ⓩ0dZ7x|J COA JL%`2( 0ɠ$JdP&`:(A J%A JePB#(b%PP1zEQB((!#: ~@qD]"TuGHPF"2t"*H@q"*szCEЉD"*F$BňD8'P*F  U* Oe|RQBJ8A ʠй0y#`B:]"TH@q"**YpNP JȠJBoC(bt@q:JȎBN6PHP1"(N$BňD'btP%NG #"#@'bD"T(ЈD%PHQBňDH~?___?)!_]~M/[[}\ʏ߿v_?_ˡܫʗksR~5fsw}}wKy4[&npGesۥpogs,5Ϋ|78kyu5Ϋǥ|783yx8V~%WnWg\z 5Ϋm~yz8?'us}+6kWgg~ϫm~ϫϳ*yu,}?pΟWs~_ϫoyu>o?xjeW6yu龍rr5Ϋ{p~yu߷q^?:_6Ϋ{_oz:ymWexS s+cXqwqf߄ƩJƹzJk28[['dC};aT߅ڐU=Rm?[YC_ީ_m"ߝz o]j pn{9NlGxkO~1Ί㎷8-8E?/Ɖq, q_3?b9ؿq=ټ1yun%x߫q^=/q^=۹y ^jW98s_ڿkjWpnyzOׯᾯaߵ9~y:^m s?}?'o럯?'op>Ο{~ϫ=ӿ[<^ݶx>jߧq^ֿO㼺]|8n?4Ϋ{p~yu8sny^5ͯU!+vZ R_/Y/X{!?WZ/gU~.WN?ir|%p+v|#䟫+y|! }9oz;/< ̅zwҽտmr/ MtoǷA[l>o7݋^\ҽտy6kܽ},~/9_}5ʽյҽy/j[ʽ5ҽյ}}s'.l`yy&tϫ_,5g?K3*4kn~S:rɃz,qR-SDs>y1K=+n3`+R&Re׭X  u-YKLtY ;׮Y/^=ʴt$|tkʄ|Tm閙5h}գ+wKw;&壦K)=Zr/A\zxn}Sʧ}^nW,]KKXw,7`r/kbCŵϫWET\:9ϫc2:f>x1yYu-_ݵt߼~uݿ ]ZK\*{^q뮴{LWw-_݅t\1׾:\eUqj{]+v;$X\Xŵϫc6Xv>xݥ>zҋkW2ϫy(ozy]Kqy,ŠkW2;yu_Ww/7_=`徯GOzqy%5$ޯ2{^m- AbE}~???K9c;r|U_u3+i]qxx8*vcL㱁zdF;QLG^f5;-:_ع՝gkGtg:e_Ww[&unwu':27ݙNh.Ntr˜-DvMihwug:e`G˿;5;- ;2s˿;ѽ c>e.b MN^/>I\k>Y+64}GLi3xlxbCg>ņ|2 㱡|˗v ͟쿎a/?ɿ]g>^K3Mxl[ ͟쿦?64OtdžO|#=/GyP> ͟쿎/?]_ ;F{lhg5]߱3ecC?ߎޕ/? ,_64#c[^u1ņw/dX\g>ES@#/쿎/?ɿ^leCg>Ӧˆ|I6Tm|| 64+s ;κ/?#_64q?_<&?giy>D+6T3t}dž| ;:tzlhgy ~O2]߱|o?/w_64LP>cˆO|~?g'҅eCg>%3KY㱡|o ͟??ɿ;g"eCg>Ɔ|Ɔ/z_64_V53{^6TO6^>~׿/{ _Vb3Zs ͟?~;6T6]߱3,t ͟? ೿Mwlhg9]߱3Wxl:4lhg,HeCg> ೿Mwlh~Lj^ /n?$M ^77 <\/{$}o[c~1cR]Xp(8mQ-e ,ucsxÖnz˚cc'(^ 跴=VxP1-m1x1-m1Fw~Kcu XcÖ1X5XQnX㆕31-m1Fw~Kcu1=XhϏaKcup~Kcup~Kcq6cXc??-m1ǰ:FYc8F8ƳcX1X=~ [c1li{uvc[ccm=Vx̟ÖX;F`8?-m11-mvrcXhΏqKcup~Kcup~KcqkY?ư:c=VxO㖶[Y?ư:FY%d8F:{=8ڃcX2Xc%8ƽ&cX1~ [cϏaKcqGYe?ư:FYmd8F:FYud8F8f<ÖcXF2XUV%1li{q??-m1ǰю1VͿVC=n2vKwqKG;p<= 跴=Vx)p~K#?qslX>}[cFwnX^slXcu1~[c܏Q#oi{,ذ:}=VtHXcuqϏaKcu跴=VxM㖶cX~ 跴=Vx!p~Kcq4li{q??-m1^ǰ8g~ [r/x~ [c/Ǩ_aKcu1li{??-m1cX~跴=Vx#1-m13~~[cܧϏqKcuyfXgctp8F:k=.Ǹ:X`8F:X`8F82}~[cܦϏqKcu90X~9*1li{q;dc[}r ۥtna1? t endstream endobj 540 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 545 0 obj << /Length 2453 /Filter /FlateDecode >> stream x˒ܶ_SxF'~]JbU!9CO rH;U' @wCF?^%)MYtEH#(QZEWu,j8]4~$㼽&_֭8d_]`@Fl,51Em%RC䊰L'nuuLx7-C(kZ|q5=hñ*3]1۲mpp,{߬X<&uUZm0͜k&)e@#[Y6J\v8:<~ҠP9\d2op96ˉD׿}ϱ22[oTQSd*}r>ܯKXF"6f6wHv] zipS1E|l 5@!DN +X {|Q_3l`mlLv&i"A~ϱk6Zy 밡W,oV`.%eu}ٞ_f=bq]V:kUK0XI CW2#1f Ƽ%5yr ?ق\qɒ=S &ёs;@9Ss~CyIX~7mUW5Mw<,@ (6U)z5mFy')l .ۼ ဎ!x:hKɻ4.`^MSTo(1N9!z\paC uf>׽  y cΉ)@b\]ҕj nI7haFF8y \`h6o>:=*̶!UM&ZZ g{ 'COGN#i$G,#Ȉ)`3v^|"OO;_J-T2a>,B7:[Yg0D==}ESŊI>~agx̓J_ YJ ?]TB(O.)I!"(/Aap aɇjX$* ] -E}OR>V?i1*QE}d6Ђ@F!)`뼴WKC羆}Q/(xGL 1AMb7A/jfw&IEgxMNkJꅵMZW5(3j%k]_N= [Th0p65֮pj_̒AB] I -ɜ14IF0`(ܙ SO-.+'HLfBEdO)9P /f%i jl`f|J:K*%FeR9i. 1pX+ Ly,TcGM^teWl?,tW3MP'=Xi+mP56I:`Gb39gm^ Xဝ*~"'K‚H")J]`coz9)_/~򎞘^Ą+u3{T]-۶}0)/8Fl'x>!vJ3DL?3$Kdg7sɗA#(5PNo>JPGNx_ڸw%H-B5$uf hGCܗzo+3nz\ $i?TdrMiҦ+ lǭ߳ʪKk|6\/yMՕߖ0ȡ]qpA:,rG0X endstream endobj 551 0 obj << /Length 2030 /Filter /FlateDecode >> stream xZKo6WE X ohҢ@M\ヲ+;j;뵛u#>X5gpEˈFtzPӋB5D*΢8$@)*[㓌v0m߳ʏL 4rr~ӣE"# i"Z@4h~(\E׎r & ﯢ7GQ.@mIX|b P|jxz,@TE 4ySJA-&2O$!)Q v6eaWorې Y3/[& G(W DgvܠC[MY,.kވ8͊X.*r3U:ngJ"_jE,o:aA/!BcKi8`>Jln($E}uۛBgYr3*fyf}=m0B!#9Isd\S|\n{,q\xO%>P&g7`uoDc^c^!t2MizH,|z "kv3(|ٻ6>ֹ̈́Yf(Cq%yMaZlLת;} e*s!DE\VK|]?::_DFM{哬 اܲ{-V^l/P+-/oG)zdG"Ⱦ)4rmAPBu4& SA0Cv<QLݞ@ /ms_)niY8ہ^!6'φCd4ЈY ]rZ]݆$c꓃AGpGKmYr-gX% WE>lu> 棎lG$u$ˍS殈1KL0˅|}sS.Qe}_)hpq1l bv฿vj Σ {@f["nv;Qkja ^1 :1y md,d%'nO_9Sdae$]JP8%_~ / w߳p5t>?a~ N1 C3w5#:0!VHm_V<L7 NyOF↹*<("@k!t[e{o(!@R&LO!;РR ;>J#Q㍞ٷB=ֺ7_ ?%7?hbP endstream endobj 558 0 obj << /Length 1054 /Filter /FlateDecode >> stream xY[8~WXӗ m\]/n+UCf`Z4U~/$NـDE[8'߹`/vRf-#x Q9 {beUZј|(܂+ncDIxZUL&ѻ?@S@,55l##c=BAsF$WGr3s :5A{`,N(pRh$6V܇spOmtvO#IîDIɧߧ50>=?׺5_Lɷߎ3#|dZ(:v:R.Q(2刟iu; 8iqMEٳa)4)+1)LAP=(0,@5 8)qԋ( *[ҵayXhA"JXXſ[>+v屺1`lScb!<\+MؓyPȗѵMY+8NXbyMK?ִ1te+嬼VqX Qt&HRaGGJiʵo6Y^ϓqn$mlwEYW2%? Ӂ|B+R+SdΈ 4,E!-8 aٞޖǍwj?g|3H.V&Ήn6ĶmuZ<~YO/TCjZ5?rg񶽰^6 6t;a%淓Vw 9Bg{KI1:;k:KKEU[IjJY&.ulp{|`ְx?^yرa{r`^rDFKz%w;z`wgяHc;iǖo=)<=arU|]=L|EX )7 WO؍SDŎo˗]pj_s]8J*IG/S{ _s~\ endstream endobj 563 0 obj << /Length 1638 /Filter /FlateDecode >> stream x]o6ݿBh_d VMq5+Z`ÖzOmYNʲ+m_#nby0y}ȻcX""6]WF%9͗Q&̊jh"z3媬 t&luɋ6RK;039O>O8bR0"Lb-LI} H pga^Eo'Lq%8@-h5"aG x%*‶"ZS8sJA-3H/PL~b̘`%̑v47.׋6{ NHBVeiT>{h;eK6Os7LjdEv;`#~oC LBhw?Ό`IZ/>g)_ ?VhEpen݌&PUAF+M]wWZD !Ֆhm <-yܢ˳K3dK[p?B|է-CXh=}qm(>W _>+m5c{n_r_9? bዎTaZؔD9q9 ^כm6M,}@7LCnW{`ٕBuQNkQo4.cT -(A5 G|M-7-㵯8>NN  66 o;|{z`?*PTHl.wh>ըaAE6G85mpbĉ'VxqbƉ'v!^PG)z`՛uЪw${M`CjKvpv*nR*{"ɀOIJr$(r"~H8RwrEYrM4Z` MRt$EMR4I$<Ɯ=/MQ/B;*C; #I:rp=#ɪia_6;F8ȡ!Hŋ5<H/iB7,0>2RYU繤k=crKicVUH,2EM3y< @>M94Eݒe0:0+kawW6(pˡX~mR*QB&m^̰!^dm 2k{<_1-˂V_E*(瓰]"ꫠR"px$s2uUryxp7lJv;K|]wMv=EkEկ Qߍ]/c*L}Dz߆J'O- endstream endobj 570 0 obj << /Length 1155 /Filter /FlateDecode >> stream x]o8=}1RtrVö\hB[^c M?dF g=">}1J 5 oP( iIThEa6|-*YݿkF]Q3[>3piߪU"Y&Զ[| Aūʲi|9)ʋKzZ]6 j> /ExtGState << >>/ColorSpace << /sRGB 574 0 R >>>> /Length 673 /Filter /FlateDecode >> stream xVMo0W *Tv%S[쁿$c! C"L~A<;x7He!i-eЀJw z/N_I(}WZ&(Ѱ?+| xVަ"L'w<7IøNmwX-nEjʒ7 |+(&n9 N+O)v$G/̌~+әakj+,vcV cW*\\]kp]smo ͵U1sF%`]1L13+}dsP +{r('XZO Vv^v_ SRSI$&O ަSŢIDܦ(]b>m51%T 7EN? Xdnjo (fw7D]٠gMͫͫͫ*ȩ{uAͥ~ >ݚֻ#}> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 588 0 obj << /Length 1821 /Filter /FlateDecode >> stream xXMs6ϯ`9N DRxƺy}@cΌLrVr~>|C(9ƛ4 tAN{zzE3|^^^^L(Բ*+KB όDi]n]RwuSxSyZܔ߫>I6 ®]zub0E3Pa3#51e;m'x&n.\f Mf e) +,U6hL0/ ^41y}xHd`X^R0ŒJIt .}Q}|Um#UZuυDC&I*Cj6+X`Zw￯E )_hҿ٬Y^5ni!G3a0X(fۯ'`sm%~˨9şmnӺj#!O66Kc~ͺLȜ yx\xǽ6DI{GU}|mGO48v pK3/mW? )n{몉j߅=Zx]D9{ffAcVS!j}H 7chs*0݀cxD܌8lrfpE[wڹ( է(Q^M Q"898pCERTrbXvi=RD Q:%R9_j/F?غdǦ1bpfd{2M,@V?ѐ4_<̟3%\71R1z:~:lm_/ٰΌ7gi꭫,ϖj5JαuUgH[4Ň}ļNڽk/?A8ߪq}a]܂;j9b ub;•WYB)!E B[& 5g\1nF=% {Θ$fT /P~wQ\zTMK-Tgꦩ6^95;bD޵(X6rd?WSL,jTi/ԭ|Qo%oל)ݰۄ:76vAtkwU8Z5UKG ;z!OU>UP #aGekhP'6 eJDQXq $WěN l8׭i"Os3u a%+p]u5_>7cKΐؓ{;00\AW#3PXt(ZQ` Z ! !t3WniA2BC~x]o8 .<]%{Lm 3>((Oe D2 t endstream endobj 567 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/DiscrepancyDistToyData-2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 590 0 R /BBox [0 0 432 324] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 591 0 R>> /ExtGState << >>/ColorSpace << /sRGB 592 0 R >>>> /Length 732 /Filter /FlateDecode >> stream xVj1We4ۄh!URHjI$܇expւZ jTi pn_?yBJ yGGa%VHSa>짙K2"Nm:muXK6)cuxti]G6Vv[m۰3~/587|~ w4!43 ¸G-hB MR ?Ê:9 egX313,t+>n>}ߨlH%W^E˫hMsum.u͵U64VYK{V~JDQaƌ3Ͱ 'XaL3OZFUV•V<'tq[7Eq75֤߯2˱%9 .k~;uk/Ҏ{`4; @]8=="RnnJbs)'))1Z:6aixT>j~š+cUF6)] /Ǯ9} sw-́_[ x{@W} T#pӫoӫoѷɷw+}tj8#|2)6| ^lcrc|qaϔ,'YpC0AI GIy89ylه̣ 8 endstream endobj 594 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 449 0 obj << /Type /ObjStm /N 100 /First 887 /Length 2183 /Filter /FlateDecode >> stream xZKsFW1>ylReI8qYC , @!__LDnJXcD.,;QY6oP$\xk5ދm>1ƁJ(x = V(Pp!˓EPp$TD"Uw(&Њ):U/hKPC@ /Q¢$XsW $ {A'@&zX!&/د^P"@MT9OP`qAQGXTZDgƠ1* L TuGA<'l!gӠNm:dvrl`pI_TNG`i#1>w};jˣԉc=8'41W 4Gj10ޥq;iz_& b$5P_JxjSϨRUmsPtI|wOk@fmkW]w娸<ʱy]Ngچ2J%{Ogd1ɇJ5~*.MbzUdRgꪲd?4e;7[qz{Qۋd7_E3>7T bCbEL@TǤRN;FC6l>?SV.ee5*'uuU=LEQ&0J!EYBٰq5dvt@;+ĺ.n*&b4I&ge/2ݠ@oC27lFͤogB8~>`k_w요opCh ^n*-o'O7 4+^[W;o\&㚮Ӝ8s ӨGd~^g0aZ^ʐ\9'aq7#l߷]YuI7QwuX_5MبvnXrA3G0ʳWG]zyepK1:3o.u+[jJkB|㺍"6JX!Xn ]r^!-/:Z>Jn8=1(hsg;DA+}Z>yu7> stream xZ[~_A /j1s ?4$q\?p%K"ezͅ)ʻE xv3CmB/~ %YNr\n#3DKI%u:dd*%%mUF"[,kLU_Ż R$#f2-h^~C5~NH&Jn6Lf4ɫ].Xm_ڮ[PuWmر4>ExXr[rZC^l-RgƘa˪Da˜(ɇ-Uӗݮ+'ʴkL7a 'ö\дcQ*1Pc&4 ,[vuvsd\ɒLu6]-KhZm++{誢/=D{/;?k߸jC_wʀ+n}@ w | ^Bmr{ gCI8iXoȤݮDv[j(qI*&cЏR YZ|}P6=dP2}X fOu n2a80m]sAte]B[?]vXpnDdVEo$bm1 -7XPumFYXB\̘n@EՔE%)Q)!JL?E`yaeÃwzU1qƓv۲ro}_B~_}@M_6^BfBbf zqP4H MA-G'(2NFF? 2!%kbBJ><,%2JFI+06\r=ۈrYI`rEcR !};)0Y ø$ֈ0XgSsZ6٩'^F'qF[YAŜ +{Ә!Im 05\A`/ғGÑa(eUq6Bx4ӨY 1zA̍=1U37"QBRvFО#8]i8zs%h,KWe#^dbۦ3z] QQV豦jZ+u[Mihy]nl(P?׌_zvgyޙyDkW\,?z|L9cDQQ˗Ky> BY_+e8S{s<^^<uJH Ʉ$c|DB97PN꣸} vCȑ9A!~2'نiju5\%NLr9M$b55Wd\ƒF\:Z؍> ?~^?_סj= Ecކ49#ٷÛmj/N Үp7{? +/7W LYӽMb/tr;4CϿ@dP5S$x;/PSBpq2؏aMh!҃ÞN>gy8D凝,; pZÃ7RU R*#Ps/A۷ܵ$a,c nmT+gIF*J#WQM0&<Jl5A%8#zJI2r& `{;"2( RbъsHWU[e8yε>GJ]($LxۻW/w|A_GvEP3(vu*9 33`$?<2 }{2ȸC}mY~e_ybFt57_>e;Sʅc9,<cB%TF0"pAʌA~ #)P\hPWB:sͰq3 U^~}T`zo9_ &Hޫp3glJ )7Q endstream endobj 606 0 obj << /Length 1124 /Filter /FlateDecode >> stream xXK6WEF#7R m&Fl]l_!]{m6 !p>Q aiS}#8DތQ:LNbTiE&srqfZ,T=ι/m- .001bU GH 9Eˤ!h䊂3x$7_G8&h?x)S@4.7^.v$bc r8Τ=wWP$ L7p\NL+L"L^[Si0;up@`r:[ۏ$p-'jf_{16gx,p2yqbb8לA8WLVe;g*P|"/sKW"gPK"'0 q ,}J孶%,',)D NJLmkǂڢ$J 76i Q6% ZV#}r^;0iUm0(8}jx}lcwț$HsFk}.85iTXVMOK{U,źl+E}}?N"KT+{|ָ+_2oM&tiOʜ@u+V+ +#Z"jPt" Ap hfnmpgS&ӧ i D@yK"e6rQ~}lvZ0vۏn[Y+~ ǂr=? cZ`|up̧+rm(@bUd.x -U>=s,K\K5#S"C#(,DyᎉB:td'\rg6F> stream xZKDWL'(R=Y^TȒdvï!kx7l$KP?GwHƸH?vxvFJ}u9 !UEFI "\&W) uj ?W;l^`{DZe?~r I`GLqH$K%L&n:Td`ϳfieFێnOiC3" gRQ 2P<1:']Oiڞrb6F$P$<욲vxnn3oDYl$$6;=@v^ZRqbCzq}<HJ)|s:6m.|3/$%| *tT) mn_DE)d$hfa^z%8TsH1qnsOwaMӠHH Huvp}d)%Q#uY°F쩆 p ;`49N/ڞAtڮӤe_ն)mz߼IO?j|//}.ݹ;nb "/ES|]t3סRe*VOu V^Qqf5a8رȰW~=S2.(5CQ5?WEv wa +cw7lA]3qLۺn-bnwwzS'n, J'h+k@AX;6!=D"ޗS%dElr.d7L'^7NF e/e@3cҼy5<蛎/OE} ZX&O{C~͛=hj}8AɭGT\Ψ;Nc+j]n̙o s&kXeÞ.牓 ^D2>$%}o3Fj|oa&b @[>$Ub@m{!ncUb@3i4*m|5S/B\>c ct7R\lA>qf @ Q/FJ+WD2S FH+U)fHij8C rJGJSO) (S8Pk̈5˸1k)H1) P%"Q`k$!"bS (z94LZ)b\-#W3-i0k7DD0 +6+2I4Pfp zM˘vJwԙ'ֶ&P`)46cx޷~6KZT.:BLP8p۵dFCƿjIq$8ȔC(L._!oK( bߔEekt{ē:++R+0=[{v4%J%DjVl㨄1 hT./q> zDwtI|MGTx(C}߭h82^Ti8-(pn_|١*cwI}o]R߿o' 16>_^A1 endstream endobj 616 0 obj << /Length 2179 /Filter /FlateDecode >> stream xr]_P3 Aa\&ʹkO_6y$Jf+Z^bd=HNI;+.f7'"2nd`4g::x&>ߥt7 il6m,RqpVHj&]p=njٍe K]T,ֳ"WϜ"/aJU[75D|u[ͅ 3lReE]6I fUtHAyHiWC=V2ߠb " _g+c3 a';P.uB x, 00˰>y+یk# #GE((J&QBuI앛Ѥ=iCgY)>ti M9>M.zF]1V;pg9S @Dߠ;H㫦tGi^9,T$X/]sڿ.C7X(EAl?m h6R՘Up;a< M"Pd9z,tFK[ˆ#'qc[;aI04I (]AQ$Ӛȃ}ha ꉴomГ ViA4Wݫ?]ض>LszG-_16 S%q54f<9>Nf5XDRb\ dJ ɤ/IP{.۹Rnݎ<vG.e)zR.]MB.e#Z%h%EOYUǝzxYlcf>6mvGe5_\f;b1TS \8rHh V,QT: q!yŤFQnFTQq;H8#M*5m)= 0mJf{SQ_ETNC{ӛ)bVABB2M}YS1j{IDǷX~3&ybb?fH]7`O (ZyZaQl?EU^2l=iAF BhҼQ#_B0@LF'ɦK I^#L v 3DXA+Oj5x'Bcfܖ9R)QC|e ћnie`'XSƍ6OY<@BP)P&W'v_xP+<~*(Շ'S3N`Y8Gc?<JB6Y=.GgXf˄ չ`㮡c Qi._z=0F7]mMnXmu1OI:@/uyr2I f:  oհkxn djQWdq "xJЂDp9/f`72 =m0~-N烇[}~u+-2xHID.ZHUlL=OKkﺫq 9TCv_dYP̴_й[z{Gu@ L "XGcp UY_FC!ql Ѹ!eim~{1̹t"F+u\۾!}lU^7oyii..OT˗: E* 7ݕS ` ʻiWK6,YJx!uzN[^0/9]H}$~/_%|geO(jdx쳩7@[;F/ P._S_CXN_ U (vkcK1t!l`MVeD {, 8$<ݟ7; 1JiEN#<2:3G5yA7+{4qd>>='|]_ af endstream endobj 626 0 obj << /Length 1879 /Filter /FlateDecode >> stream xڽX[o#~ׯ$:,(6]8;O>eM:u.!y(Zyy;w.<!Uy?`)aϻwת%mR*LV(JV:ϥXr#Y3zdjXݏww.ҌQdIJ&U@5, d+L:]{A3mxϧϖY U,ZRycBfBXYMs T \oX*ֻOpc yT9Wqb:/Lm~zF`fq8B=#b#"#䮑:2 F&E{b0m8Ȉd %8娆#OSʫW5 4@$ h@ d*@>ēG81AWc_ KD(rPD0DOvOz1‹ήc]$MDCPwc0Υ*H))EsB7Vxbp؎].%*?!tBh~NylM&L_U%^ViTuP W7 "dI.?}"F2/sIFd0BԜR2]˂?D-9)$ l̥%$rgkcWcQ/ajV388ޚ(K܍py+%6V5NVJ#RU|p̭_eRاƨwԷHpgi7*J}5k 5H$/K$.ʟ⨙|s%rZ]꟮=>e 3D?[o/VSڄܮdVTޭF>Ne֮&VןsQvz`_!!k50gCs>"EЂ¡q˿!čFDFnIܵkW=F)_S~d)2}̛nibB3>aԸ£ BG^ٺ]pUܸP) nW?E*$V8YŒGd3)b@'X`mGS]l\l['ݶJhaԮat q>**FeݮjU מt(Lޞqyʘ.dMn "~<Oᩅ0a.xӐO&`V߮qTnߝaSʭCM OFTpL0HoVIi5G,ZA}y󽭳ccw^x/wi,Ny^r[E,e!v ;TO> stream xZK6ϯ`M.TădjdkSs@Ј[){ PFzƥY[4Bh~#w7Hp\Dw(O(՜i*z X yKݗv-ێbBҋw?xwFX(ӌ:$)tK; O y^8Ȯ‹(qٽ6پ=2/rV_Y%0L ~3<&\gշo+ |@ X~Gg89i~^}^I㼀6.˟/͖|Kxt `XeiJ 5"^I.<æB˞3L4SyTLh0tjxƂꕧCUi.@pN xI]V6}6aG<0eVg08Og <=j =3x@ZLETlgfq&ڄE;p pM0a ߆41<@=;gܒJ>X4 v]3,s4{3Xtdrp#]g:̓1Wz/¥2{t&LA lNHm&3kڎf:[$)t+2$y$aIeqoX1 ;wpw?K/먿>w{RRB܍Rj#XĹTo)hNbOH,D5D;"Է=р<ީ@N1:x|ĵhiQI<`;~ S->Z/(zsFFhQQ*PlhLǚT3i͵7יȞzsZkhtv[M3t87Фj@Tm?|hRANfS-#8X$CYXZW5$:}{@ʮO4 _-y4"'U |.(ZḦ́TaAv 0qS9ٗ Q endstream endobj 634 0 obj << /Length 1086 /Filter /FlateDecode >> stream xWY6~ׯ UR<$(4HIm5:\IwxH>bk "Zpqf8Bltޯ 7$]",=ǓV.1ٜHfrV-4z&`X}qLj 핍 MV乃4P*7qN,<;m5nks ?r;‘ rZ|C)рf͌p33oO(&m8̌F - •ɭN5Zu\Su] 4căQlSKOFFSkH+Ug^]bDni62I_eJv Qs ܊ K Ìq;o[~hT6}e3W3N9S],䰸D`RzWdmRUݹ(!fwSnB)3MX՟ӈ]PvJylsk's\ƭ:p:Jz|ǶR\onpU RzpJ()"'I׍- %? endstream endobj 638 0 obj << /Length 2495 /Filter /FlateDecode >> stream xXK6ϯ`9b Jmyq*)ǵ>@4b"eo?@p3&\H<"bkw"໋]^|FgF # "ҩ.7PR !vV>226a->\p ӊ@Dl,ɣ\&z6"$At$M2iD&5XHnGڨHhhF )I,#%4КA-i;zt\<;.#W_-Zf_j:4,ΰce -c0[ViWlx ; -qml_~Z1ꐦYvHk:}E HLߜ%ϛxݻp.0ΧH{L qO|ݸͳ9]n;j{v':]u?یIwuoWC ^&j+qڑ3L9t SPBc]Hcپĵغ@s-7 ~|nG@mB3mvDith WzRBjIH'[w;\- m@p^@MPikiy}t!aUq~ q& Ww3Ac_Q#P7UQْ6޺fAfe%"=G)q*C!dvBuH858cW|"[r <0*lڷ $,n a6D\w.2>`__{[Ol9 $:=7]ٮq!u'N"V 4!Z}ླ<3˓# YLLP #65;63Ay‰jc&0fTDy6읭h, Sc2N")J#k9-fK(?DEqB^H)!tJġ∂`:p(kr#xW0lG;[]!Xi[۪JuCY%ٻnWsЖ%W[oѺD=np[nt@iq#5nqG%%n'*|uMgn= *~lQslyxuDX,hXsn R!QM-X]p/$#q27- 8ϔfzjnQp!&\d'`#w+6\{٠tێKv} ,Yxr,0|g3'pTrA0gѪǩ, ,禥Fӊ!bz$[%& pOdEq.aJVLGn}|]SxaZ~< b=0iM:Jg̹3[cjU_?ēte`|QD?^9c8hc@P ŠJ(%Lnj c9K3 I$&p  U{Kr "@ށ}`pN9$gP=f_!G;vcC,zk>>`>ʯIk9~gs8۫H j(aisG%o 823&g%n֕/ů5"H o4l!ѰW~  JP~nY9NXrxa:`EYR 77=@b.w GVhʄE縻[2_hC-w#5Aï;[i_?gaw'=~ ցio' YXb |X\x:U;/ꈳ,EGhn 'iX4[1H# xcV8.v)a\'w?=6B|.] &&'7x\Ajjk %+WMq!!z=£h?i endstream endobj 644 0 obj << /Length 1059 /Filter /FlateDecode >> stream xY_o6ק DaÓDJ*P`[v-և&F_>(m ӟTn~GQv4b#l0 RO<dF8yg:.ߊg${ gB 2NꇶF>~LʲP墶?XWc(XKCO&+' } $˖3'+D3rc}Ҥ4@$ЬwU)BAZƅyW6=2ei37CͼsyTդ83L*Uqn8j5ČSt:8kTUMgRfeƩDl/c')Q+8ʆҢJ\$]4dZfW![M5#O!w$#Ѵ?wvqDD.4Ac86"S;.j';3331zuS*]IWW㻽Aw6k'r?]jw2OmNF}ݷeR]ԇ}KDˑpn$UJ6Ћh V@/V.[.Q)?7]8-NxGϑ %r]>u1<ΜryN~叛 i;fL]`A~O;·1?W2[ОS" 3/={Xi R]"j.@,d~jnkV:[i}@V> /ExtGState << >>/ColorSpace << /sRGB 648 0 R >>>> /Length 43686 /Filter /FlateDecode >> stream x;,ےd(yX00=""ܥVmmx_믷Ϗ^_^_z{}__^~G^ǟ??^>gB/>__|yK5?^__?/Kz[@'ϿzH֟~?^޾yy soBľ_{|?ƶGO`/o}FOb/$7}8>^O`_/ľ{b_/y%f?K`ߏv`/?}|\W^>{ͥ5׶\-\ߨ=GKJYf>YdWh_iQM>w?TrM{9;\sM{5ϣEk+4\>gboTմ+{tOb}|P[_g;ZZ\>.\>sJor'+otNQ"˕*9|i{+\>?=<.G}쟴F?@?_Ͽ?c{x?/o=}? [b/?uXS ~EX>"|6L>ǂSӫcM2ϳ0{{'L2%3X 3yZ`5Pe?T~$S|r_ X>s_cMX ,fy*d'ïgÕgcLuw)o H-{Ke|]JRߞ?VKGK1|X!?"l\ R߿l\JRgߥP.%w)ޟ-H+ KIx]R>OR}<?}<.ŏ?R_kS?O {)~KYǣ).w)~Sg)>R?_?>7{oKI|[JR?߿f(p)KIhGnGgfI=ן=^?4k^)0+<ۙ]!UBfvU3ƒD8̹ߚ9Wq^3|SHӯ7fU|5*^fb1fR$N:ߕvnmfmEYϩN L\v\y3k^cd֍x9Y?l:-?1f㍖%}>߷S=ωM<#,M6eHg>Dfy|y3;EOFi JbFkY^4 VQ7;IfoTͨoM"_{ϵ]HfTͨ}R6;3jU[7gX5sdCUL'mMt13] ,W/MuJsr{H#2IsĿ_]` 3CTA5Q5k>BZwiTྖ*p_K'Z*DZ:RktEmG@Y"-ޔ$(Bt9bY5A,j~7YVHKł 2 rn(b( -UR'I1#e-PR'BC?,1PaHa u*Q(fVBaZ$ u:q_a( Z̒1W֌;1U3ZhC-5N ,/$,bfy%adu"{oZV3ZIhXeՌ 5(e΍v=i0V ֌j(fT$fXlPlHlͨ*ؚbkFbkY,f؊ؚ؊ؚb{ԈPߕo  Y@!':eFV'P*9*@:*W  Z*0R3PsQ%PKͰmCiVH$TRkJIXJ`0 E 1Ta*Q($%TP,Wr?Bfh4OB(4o)rK%`QCQK@3tۧab7K%X*:Riׁ jr(+~PB1E1,fb()(:\c%C%J(J(tެbjQ rGp+**0VB1Tabb%5-(XiA c%+OJxP(pnA%}>߃%@(X ( %^%5J8Tƒ%]MQ#}öa b>NQ 1l&>8f&6bLrT*-0J1l1P*5RD!hR y),:T*QHTNJ%pv(V$}Tۧa,b(byaE1la$V($P Eq=X^> ?XAp8mYA 5JDA rJ8P p+*yP,wA c%5-(*XiA rM J(kZPabX +<`pP WB=݆:?[|5+S}}B 5GH]yBt b%4A+Ӊwe:q_(t]NP!6.G+T jRj:qW'1#-C-56GPM'ya4HYNWM'j:AK}TPM'-C4,/"fԖjšQM% tj*iF+;Zh0U,vVM\Y5 t;^fjj̪iFitfjQ5Z)iFiFO U,4VM3RM\X5rMc45US UӌTS U,&=TAN (vhqc^9b~@!(X@ /'Z*t _*W H Z*Z: l&H@Ŋ/x +tSbغ&p* 0TM3jhWʪ9USSF@ 5ÖhD%Ռ٨5jT>8FVkXXy]lX.jNQM% ՜X^jCC?4}NܿO a*xR1R1abXKPKr Z*kpR1R\Wc-˵2hjjT,׿b-Z*Z:T,h)SQKHZ >@tR7QK70i)5 $TtjP.FM" P򣀦 8ԌZ $݌s\t9FURO'.ǠE e,ϓϭR'1J$-G-C-5ƌT,mͯ)ii~MIK1PKʓh։bDX1 5%~@ 6N u׌V!3ZpPlͨC5K+ʪY^3X@hu0#u#Gߌj(Z~~:+>˪ʪY⬥fQC-5#-5,ZjFu>iJ3bffTPKrMc-5#-55,4R\XKPKHKPKo̝_iD-TlU\T?yMIX?@1U\Ts B=*p.XKݟN*  Z*-ưb.6b7*jv.b.* X1uabؤj+tTbX^MX*?BHV׉[pWb ŷJR9 J1lTTa6R a,b7sQ%yuh5g:AV,N֌ 5*q*b+׌ byb;V v,b([lAl؊؊cu5XAlr] b+ja,b(XlŸ*by~C |ۿ6<-oX.$<-5=8v;8ABp*p_ Ke*v^BPJ)B +O.Af J]fb:q_ fB,/JDNP;bv_ ( j]P ͨI1#%+ЉJDNj"JhFmB N%H(E%PͨCQ4u,/,fT(ވ(:q_@Q43Z̨΢hFU\mY,b(fEѝi,f$b(fTmPHreQ4E,,b(f$feQ45EьD,4E\XrMcQCQ4#QCQ4?%|wAN@%BN 7#"%7 UrʟPؼ_h#i^LCȟ|ɰyfM?%+o)7O 1a)Q$SO,A–xޕ*Q(Ji*z|EXxnbj c}ˋC@}4kFPB:%Tׁba)lV"S'iXrm8QGu}C}(8Q QlYPլ>;0G1G1ab}C}ˍqG\ӂ>q0G(AE@J)/sFw A5XUsB=o 0}G-4 ]X@ͨ ?,f$ba/$˹r ,rb5  DxuWZ*Zj4B@?k_ jjDZ̒nԉDIcR%PKͨC5j*@_  z|(bfy%wZ : V3ZI+ffwO@5kF+kFYfe`C5#5,k-YnYwre55YuwP#(Pl F}؞@1CU b{,PljvNyyx= ] < % uWUF($X a+QH$ V%XI4J0`B@ Vf?UQc% 5V"RAŰ}Qc% 5VPI4jXƓ`5f-(&NF= h3jsk4Z5]%XZmעjQP 5D1uyZTfB(xbC+IPc1TabXPa5˵=0Vc1Tc1TabXPr#X xXAc5c5a5>Q c}ƃ j|'Ԙ pcj<o8U9(BMi&q^%5 vfX l]X54T P aD#J0ר+Q$5VXPIa6bbج cfm*Y^twkX;j,bYU#*?Nb(46]% UPI_(hVuAlPl؊cC[V,W b(b(XlPlPl؊ZV V, bV˵20[1a,bgBvP! ܟN̬}|'P|?Uw(B$hW 3_|'P|Q.A jhPa"5?U:q9b js YuD!NPC#jFi.ݗU% Yu⾬:WU3j}Yu⾬*QȪԘ(fԀ5eU eՌ01U\YVPV?JI U\YVݜQm7*nv_K(&N*βj5 }to+3KIJ`1J3JwG4,w,b(f$fTP*rMc4#45,4J\X*P*H*P*OKRRyP#?-J~x\TsQP|pǃPO@(PO@'PL@kl^b(+N` v6b(PO*hO l& D#J cCI7F(OBeF(OB&ȟ(b'Ja4O O\%[jX.A(ܳDApL5(qf(SM'O5?Tj:Q:C*:T TlY@r* X@P@rT, b(b(2P\+Zt  0P?(]I@ 0?3A߃ҤZ I%t)mE<O*j&X>c}C}((t鬏bjQrq0G\ӂ>>Q,״b}(8Q>> OA>*p_'(D`XHRR9J!AT*p_*_i#j ݗ R]yBt j҉63K(fT P3j1̨C5/J$& jGj:A5)fbj:q_5(T RMjWM-[j:q_5J}tj*QԖjzcFKebfyqhTSB5JjՁU]^X5:iFCTM\Y5P5;\Y5H5P5ͨ^jj-=`7fSgC4#4'ikYifjƪ)iF)iVªyP`_b?>X*@!(X@*T <VAj@+o^xjQ  8 G1d[5bjNQM%+Tsj*9US 1Taj*Q$TUS,&A5 ՜eQM% TPI4DJܿR TM3lTTa6R a,byrT*QH$X*R\^TTcCF0nMaV X@ Uk{P1a,b(X@P@Ŗ>T T> XԃcCC*_P1P\T,׿ X@P@зGx8MS\bJJq'AI,/}=u⾟*jF*VH0N.q# RZ9ANukF׭ 1 j֑Nʻz M[|=W;RV6]ذ+rߊ)_9C4 Wc/ɍ7r|E۱#_~|EbAC E살^{R.)Wo8R}eub6D<57^zEȢn Ғsw:~}AZ\7^w^:}}2}AoC ҂a~AR .Ki܆4T/H%Ml2~Բ_|Ke# UCt .哭(l빪Uf~O1Ccn'O2I4f>O"023Dc'Q$||kd \/xA_mEضVHcl[j.ud"W+ڤ|mG .>rpEHA-Gl`0sAnf\i|"+B۞HmAndX(G/Dl":Ԍ f.,Ol\d0%'ٶ`c)1|ExYҙ"+ҘD 6f^\pY\ f.f>0 $3\d悋$3\\|`0s,'3d3d3-8`KQMf>0 `悍y.rhbŶm'VظڇߺDwۉ'8IÂmc^m1j۵(k;0K^-ȍbvFmO$xWz`ێ{`3HՊz`W r;#Ȯ!! ! !R.e9!! !ҽ5\ e_C_åP5\ e_åPd5Dd5l:럧4'Vm=f| +v[OmD㿓(&V//oNhEۭO qdȓiCjV4;EؙHՊdZ'ӆ+o6l\y"lGَ,NLr4Y3ۑbg#lEَ ;ɴ!7ey2mN+^)ȓiåڇɴ`pO4z"i2S->y`ylF: b3ۑbg#lE .>٫R *:0ث ۫f^UUu`WAWAׁ^BUUp)^BUp)^{d{U{=I4z^ztN1ғF:H' Ű?Deh$*#_z;,ME&[T1҉# S*D*{UU׉T3 r;#ȓށդW^'RMzI$OhSiiX*"'5 axNz2yj`ciȲh4&GKQבb߯#ž_E}O>!T쓆蓆Z|[*AIe >)>iX,2{s=?և%Ţ5 &Ɵx;aiapxXߧ܂+䴂v g9r!;|l7XˆlLO$iS'# FD.y!7 ly!7 9.Iڧ''g/,3B|hQe.GI46>9 >)>)䓂 >)O .=^6\ {2Gu@K .%<٠ 4Q|߫Ró^VdmI&`J.'[N> ~~})dT6(t ;OG 90X [Rj2׏Mrρ=s`pOAvρߡ3dN")'t_[:,i~c#=,06ÂcXxS~Ӕ5az_" 9,>]8(6U>-G *ȳׁa\9Of)&]ംiM$9V0ܑ` Dӽ OC➦͒4频. S4|dQ 6F:`& F*, H#h`0R'#Tt`0RX'#UF*F*dKMF*d .2 O l,s"2T̉\jLN90y(i(dlKlP 䈂KIL(H)!lÚY,slbx2e*^A9a 1{8Q /1nEs/*2yi !ڠ`|5D\^۠` #a GT$9rvDAvD# ## ##.e<8!3Z/g>C4 .r9E d3\tp9Av9Clg \N]p) R\= !R>.2!! a1]t`xhxlxKAc[x6y ~ lxpc3\ e5]t.:RLas4\*~~쓆K {X OJǵIG|R}gհqg!xX3]T.N"80uX3]T"[I4I>yXaܨ +&h&JO|r_89,5vf`3]tAɁtёb7D#& lp$ؘD*sT$4Z˻\»k 'k`]߿vyeQ ݵ2)fLE e9'W[e%࿂ .E߁#4$U++係KaO+ z:tRLw`0]b2 Y#['Lw9`ӓCO!@{Ӑ6 .%1= SX=Y ekHr#%Oӊa"Fzt q!6.贂:R8#1QPtohޫ_Ju$iE4O+r[*Azii i.Tr.Ga5 N,Pͯ:R#ů*NkX<ȑia5NpYV b&Nkii !84uNkNkN+NkNp)ii {ѥ,5,Uw?? 6_G#[/A+v_Y:࿂בbH1R*QY#K bå6\JxjA ˶߰0+6,ffVD'b1exXʓ(fJ4I^}Xa `Ê'&Myb| kdЂ& lfŎp$^=jEV+)̊ {TyDSaZ?U{ qR ru`5u:RtiOu;lw"\߁yWp\ {_'WWp)L++;0` ++D*Ud)*"[[mܑ7w'X"*Rޝ*D*UWp)Ҋ4{Y}r<6Ľ҂y6kUviV/Ú{ohϕ ;øV{;[%p0W0nua,͓ [G{oFk`s#~ WnҊ4{aLW[5Avځ7lW~fye^iG؊ Y [,/|G!7ZKN3]Bw:`l .;`l .U9`KN*dj^^Up)^Bu`W^-%1٫ S}ʆu #Ud낫"KITP&#X"Opp>eåP}ʆQʱ49&KL680ؠ `.'fD1 DX 2Ċ]Ɠh&J`!0A1albP'90A1pV=lF 1DlPG]Ɗ&ǐlаp:'gXL8A !~/NCt9å3EC3tΑb©H3tdە#*Žh ;R҃# #b#Ȏh숆KYhu   p) BlmmPmаkUAC%OíIR(Su 5 ]jft '{K.ud)hdϑd3,.Uԑb |G;I4w Va|V$'Wa冱\n/9wl_ Z8,V5%`[nV~Hgp0y#J Lb#nUE*S[S]n`p9AvҜ\N[))Ҹ"Mr9EݹD rC40Rғ .'ȭrK]O.70Rؓ .%<v9Av9,'\ pr9Av9Avy{|&,v*O4U)flqpD'G\zy#TG4;PYJmrOAvOԆ٠aT=Yrrρ=H垊4Y{V$<:Ɨa{NS 6HO=,x0njvXahT/a|V[* ;iiVnVNT+U-b"*:0ث`c *:0ث ۫Rܓ r4KFe4HcUW^'U[^Bu`WAׁ^ u`W'{\uWu@llKN*dKQM:0ث`ccN_1݉lLw"a)N*dKלu`e4HcU&{d{\JmW^'R٫"KYN:0ث`cU^^5O*Q?9I%+8I%CSV1albԬv;XᴓhV "A1k !e`q#ar cְx"/:R#*k ! i{-)n7RbeVlM"p)^KAp敽*j- ۫!ګRӃ .:ث ۫R.:ث;,{5D{d{5D{Ujj*jXثå$٫aaF!1./R 6FHaFHc,3!R>,E2RGRT԰0RE#u1ҟg FzX3OU1ғt|uk$*#0H F:`#_~#ITF: wX2RAnr#&G1҉#G[2˜H39u$''R"*Ω#h {y!S+T}Rp)'$`1Ou*Sp۝{N$ 7O{ { .; I{ .U9KYN)uSp)==] ){ 6>Sp){NyJ#K:Rud룃 Ou]<ȑkNN;rZEUqډTNHZE:+05,&TR +%Nc'8Ia1 {DcJ`$:Uu=ovZ1l*V${U/1n{56I#6OGX'Cl^ {UWG2,U^i OC 2D#lPE{up)^ ^dHa.uWE^ ^^ UUp^^ p)^,8ثR1b{5\jWAWåPO5,:Rث"<95,&'[Fj095\`"C|Zaa4R4mp)4ԑPV6R> PEi#mhEs|=~2Ǔhh_qÊ'NU KO|rNCs<,}J>-0K>)ȍ>89]O^ۤS&+ȿb׷TVHر1hayGOZ|h]OaOV}$V|XalŇ+ƍʰ;/H ~0~_z[;Y 79y!79t7MYU$K>`tM7d./4rdQ +M d+KdQ .F2]Anf)JBH0ʢ.GI%`c +ȭ`Lw`0]An\Vd .@2]eHj)ttdӝ, `KQM+d 6;`<ܺ0\ e .qԁaN+"N$R撑 Vp)s=]TsZE^'I{ژ|bD1Ou" =`=,M>>ZXa ?{U:A,VlƗ0c]_ThHw`忊4٫#h?{u^nH忊p60 j+U߉T 7p β{+riHpZAvځiv`pZAn\zrځiVp)iY  N+N;mXpZ&Vp)iBv`pZAvځ*8"KILN+8ziadX9"*8D*Ud)ldO\jT&O\jԁSSO,<~ɩ#hKQ Fj`KQ F*FjF*Fjt˟65aN1ғt| k$*#w H F:`#_&#ITF: tX2RAnQӐ[2'yAn\qQ1ljT799Nx4KsEydX< #S<$#s ^*OUTEOH 3҉#j`0RA6ReUHF*`KOF:0R .>z'#\ {2RA6i .:`l$Ht`0RAn`3#u1REg=/2VHc49fHWHa#\j2R&#\j2ҁHH#LOAى#=,ϳzmyJ]Hi| Kv񓑢XL"w:`ø%v-ͯw]b| k찼k7d r;#5ȓ ih~eir ttM7d 6#ųH0N% 9JWs)tEte'`0|tGݎ|:`lN$ `˲Lw`0]An\֋d .KC2]eiHlY  +Ȧ;]0]X'LWMW*RT +Ȧ;2]EUdڃ 7WE=Y@ ^1݉TR(_CWP&{\ e̥+Bs}O,|E?ɑLW>^WraVIbxʼn7*}Ndӊc+&J6'bDvDV \&ظ6{vOl:Ru[L`C$Lo)Hq"n`Gh 6:RܟHs#hB Z^TåWSVE,2REH d#5D#5\0RClH Tp)H !R.8!! R(.2 aX lX#[ovd):`֑͜bNHan`å|O56Wd)^ fKQ F*#*#~?/`UF:HO"0ߕOIp2=S :I%uXaD婓Ko_y%Ovf`婊p#Ȟ:TEOU*mSi 6RT .E5yRTOUI'ܰyJU=u{X{7`{FE /abNT%+oXTClgOuCTS)<lOu$ɾ`dX": !6Zh:R":Fj,H Fjx6RCޟkiXX"l& e.;X [!6DlKU)Ȗi`K--p)2 ,p)22 ,p)~22 q`?ב22Y_e,%1X`cHa4{y)ZUkk`KFj`:R"|a㞟Ϯ a{Nx$g.)Wbr:frw6H F: 'Â{+&J%uX0aDeKo_y%#g ߵjȭ`%EUCn!w\R:͓`%Eg.9R,98yXq)fحw04/umJHdc1 z†T[CbAbc ;ap Ni i ^/m {!Ihlh[p)ajMJ;5į2 q}K͌Gƨ 'gg*rhk!dG_/R=>Z.{.s??6Rå, =u??NMwoGAW_>a /uz?mm^Ώm[0r~)/.Sj4#dåm,Dq<6Dd(_y2m? Ӿm/mƫՇWAW0\ ;{a|Uwair޽lt^^{,c${ƓS1c#E /alb]U1-S -sXsX l ˜[Z2~4E-Ӱ|WSEH 1&Gllg == == E1Dd4Dd4D4\bpOCl%Tl= SpTfr6<95\ gIj%I><`K>B3OU:,[Sݩ,e9a1OU:RVv9H1{U:R^_. FpZb;a1{Uְ:R^a5\ആBV:Nkti %'8!NY qj)SVExjXLYY੆詂쩆M3t^u_8,={*8,80v*Dq7ݰ;M0#,N;Ò r408 ~o5^Md{Uu`e  *:0ث 7#l  **:0ث 7 S .1`K&4SGɩ"ii"͌vځ͌ԑbFH1#U:䴂KY3Rw*KN*0#5,fj#KY3RfFH1#uǷ䓂ŌTŌTŌԑe.|Rtxr~2:–)22{SS|H1#U$`Ŧ"KSs`pO==WcCƖ)W^xF*}~OO㝸bN\%$53R%'=,!6.쓆绚*–iM!69lhe:!Z [!Z [!(hlhlhKY i-[Re e.ձ*HVB}}Ұ*HAH Y=i枎*hhX=},6a1T{:R=5sOG#SfH1tϸ,S "쩆STbH1T瞆枆T{:FjtH e$= ^Fj)PEH i#KT԰ؿ@0Ú{N(9Da=JN"0uuX0al5S%ɩts(#< q_7Ò  V,M ޟ*LW/A6݁tW_A߁Gw`_A߁"W[)Ee`_fVSVEb ELWMW*LNiZ\dW'Wp)Y p_'R"V͔Ց,wN;fH1{u׹)4;`"v9tٺ)Ov+,.Vҧ'\KD֐W|H1UkՑƊY:+ ,ظg\ʕ'ѸIWָ$W>øa+V$WD'Q$W>øWaɕٕWN]y`peAnٕWl\y"++M ʂ+ + + ,mʂʂKN,Ȯ<= 3 ,nVT tXcJFDahJsI °`h<5紂잆{ {b"ظ#ظ{ {{ {ba)i)iiز{.1 R"D֑Q= = _)<v&F#K)$\vOå)'Y pLå)SV@͔ՑbHa4SVGgZ;\}LCLA.>!NN .mp) rlP0;XNo6hlaH(i> !xN#W$\>i' '' |.z4t2e[X k~G Ć5xXa쩇U:S'xIT 'Â{ g_7%dS[b.G)W$8`XtadLWMw`0]An}tg`0]A6]An}g`.57R_;ӝHeiiy"<ՑəS \Si橎TEi4H1{ugV,V,XjHcUHcЊ4=ʠ)|eڧHOY`ۂ˒l[m[pYrm .KNmeI={۶gd5adۖ5_*RLoi)~N`l 6f|a{XsŝSaOwa<;a||aO1I4f~̇|Kf.f>0 `c\ny10ض`cl[mAٶddl[[ٶ"l[[)g`mfv=ʶi ..̕'R͕jRD"\y"a,4WV-4WʂOkUY"+XD*+V+]}+ \y`ڽ!_)Xx#o%) ZpYFA .H2聕A+-ta!=;w/ J{i"']6қ'dVpGvXJN; vZi(vb؟4V vXJNDᴓ`CN+=^7 bCdX8":͓!6O촆*8#贆贂촆贂촆  .E88!6#*촆،b3"Nkii֑ia5D5,ViAl֑VNH㴎N;RƒӺB5\rpZAvZiZ5NHᴎNH㴎N^t)i iyzk੆:Rx"쩆  +,t\jn2]A6]ԸP37tiLw"ttӝHegyIp՝N2]EӝH0]]d %|yeiWr~ɕ_seE8ugŊ4VnvYg'EA .H2hAl,#Ɋe$Yಌ$+XY"lłKWw`s#lłlҩƊix"Ď, Fي+o>VZYXaNܷb'C+6oNu%VlFV,VX؉VZYZ]8ft݈_'C usVHaW_VZ[#_j.HVlV|Aj ъ/HɊ ъ/H!ZɊ/Hx@+  .5Tu/xߊIV +&Tz/#G5DӽRu0+rtI /GI oGoWET/xߊ)ܷb7rɊQ9ƕ)\$WW#bGЊ/vEGWO ˒(_ж/,Olۆm_ .V}e!jlm_KꅨmG ۾"a2?6(h ~ >O"X0*DcK`_Xeh,~şDal]0Ò  //XD*WxEHx'RY"ll  /M [`l rK50X [,M\jnxAx'R̶ٶ#϶)fWlۑ`K"+D/C 6?i,~b}ED*_Wlfm_',^pYF/f.,#l\dۂ2l{`eۊm .{mA큕m+¶-ȶ-jl[ƶ'Rٶ"˂^m Z ]f>{_8,8i'WaiV9$D'v;a빡係_"uӹDЕ/͓ 5OtHepC$Ȧ;0 `ll r20 R r2=R +Ȧ+xw)~W]aG #sOLWLxlG ^P s9`͗)m}E9+~W,%ְ+5^SfЂ^S*xw N+xw˧r~iBbeIV<+V,Ɋي&+^`łlŒ SE? 9`  V,Xtoϕx[Z0b12V,VX=0te`t)QX$؊Њ5VvZbx- k+_ZLW6]Cl tt U1]GM2Dd5Dd5&MWMMWMMp)t tUt LWMMif3]Et t "L4]\WdLWfH1UMMM]M0tG5lfj,%<`3uӺ\}pZ;{5ĉ]ǽ KlTe*X<6\wg'l{9ymdl{9dQm/GISlAa7\0v,. רy=͍qow^QgQnC-ȶmdz>,0Âmh_D1jX0alЇM0 zas:K-=0 79lA r#=0 8%Pxة#lA/ z`0hAnF٠Y`ʊ+I08seEWVdam .'MiE z9J_i36_R߁ 6|rZt\} /LWpY:ӝϕ j]B`c4:4A^{\D ӲM$8 ;fv;nVpY\Ӳ*båOO*Ȟ:0xO\Z8zj^nG s哑%8 ;ം[}bzjHz@fzuy|re=ێv*¶s_^ (k'~_][<wp0k^z:x0`q!u`F']XqgŠq+LXq0nٙ` ƭ3aw&8/؂ˤ3aw&833eŀ܊ +V ȭ8b@^<r+(D8e"ܕ:3P4 /+3 4忈8H*Lt"/"E3iD Xt|5"+#. Xʠ t :" ZW5I+W4U#8#Р\XWc]5"κ몳:, eЀ 2"|9ʀƺTu:#bHQw++hY1"t]uBWAo@g vF;#oq`gXc 6"Šl@Yi]΄ۙ`: /΄\0 3x_& 3xO)P/ / "@"'5+P r ((i tfz#b.""Rtuty1e8H7*,zGo7"bg>Px*`Z+qVPgqڈ,:k:+V FĚEؕ:_a"FD:3AZ^#"Й鍈9#/"4ՁYc*|t¢V2]D_D߈XX+X+kԈX8֠LЙ5[pW/` F/`hF7_02^&Q Ve`L&7!_@ iI/ ߄JHoBZ&:/ ߄&/ ߄tN?m)!t¢PWZwiW;m*ūJWQ^ŰbD/3pNXtZiDAo4~ܫ];we~){kuV* :Ո8^b^^.^ű!G '4U#½:!WSɈxSq«sV[g{իpNXT«WS} ^Exu*ԫWqV[g6',4Zmer\l;#P&{uB: qW:+w&\9w΄+W\0~u&\9w`ܕ;rg•-?;rg•3?;;S K•y]9pe@^&rW(\>-WF)Y+W"{u@Հܫ:31f3Rt 2UE'(fp¢7""oDݩWNX bD,E=EQt忈_@7""/bhP oDʈU T崈È rڀ"8-"FrZD崈p,}i1fc9# 73Ê7ϼ*+ƭZq0n`l0n`V[1`܊hF/`܊V F/0Z~VZ1 ℴJH[qBZ<%V ȭ8!-+ΈQ&eYq*|9!b@n i铐Z1 ԊlsB:ۜԄ&% Jn M.3+cV8#ŠYɍ_+.Q䦛"-E1݌Й^@g7#!uUYW֝XWź3.\ޙxg#ŸP܃Z>2+NU'KҬ^nBaUwЪϙEoBc7#Um,:>YOsoB<:>aT 3B+3q{MX^n"xa"i&럋Ze} {Lk0n { Ư`Lk0nԙ`^;feҙ`^;k0~&wk@aP+ W@nr{ h+""kDr{ (3^ {P+ WSS *׀"+"Ɯ."ΜnFxP8-`qzNiNrZDEqڈXNN XtiQ}紈8NᴀFad9-"i^Dތ80:q7"E-E+ h/"_DߌʈpW,$seDWʈ8HaʕWʈ8ip΄+ܙp` /΄+rg•qWLr0^Ig•qWLr0ܙre@+ r@ʀܕ+ ]9ʈ8 ]9pe@^rW(\r@ʀܕNM2 /F XtlʕZʈ833("?"#­8 _S=Ӎe8aELC- 'Z\mtLѱ"x1 .jW nD愎FD8-㴈TU崈È紈׀"4WW8m*iWkWLnE ."F2]DEeF2]D n !GY1Œp+ޯUW"zaիp+NXڊ!Xڊ(+gb@n SV\e[+LXq0nŝ +Ư`LXq0nw&8΄%_0~t&8΄Vɝ)+VPX1 /V ȋ'@nr+hY1"܊V ȭ8b@^r+(P.O*>MUNy5 /\ Ǡ)FeЀEh""\r@ʀErDیpWgo=䳷 [DrZT Eб׈81~9lFE1݈ބӢ+J1 nD3r /"ՁQ+FsoU2݀oFߌ8)2{i!8LoF^Dތ׀^~n:Fn0΄Fڙ0` /΄5W0n # ƍ3axa # ƍ3a)#FP) /F "@nr# h)"HF ȍ40R@nH #<- ,:*哀ݺrF!#"foӍH?Ɉq7dD!gXӜa1[@ Tz9#SQe3RT~zEE.\ᳬE)"F2RD)L@y*gqF ݆/͝6uZQ9!L|}``0`F5({ F]9we0Z/we0+QWWH0 +rWNHKԕ+'2 wԕ+j$#Lb5OF=W^z5 ꄴIH{uBՀܫRNXt«*ݎjG^]Jя N(z9]DnBZrNXt֜."Ag4 MXbN&4Ln nYn$E,ts8s)p yڌyڄfXt^38ɈayZjj17#Uu-:Y{s> A.}NFیOAyOFarPWNXҕ)]Y^aҕW᳷ !GXqB:{ go:l0- &5K3a-(0`H;FPIޙ0`H;Fٙ2R@ni@aFP) /g: -L@ne[f@a2  XtT2[tmFd}2q,3"j؈7UB~ᩀFnFt~VmF.k}n dN[0]L7""R tE1݈8͈N9bpQ HgomBc1"|68#U6#^Qe͈8f&4#=׀i3(쭙ތEęH1({ (k@ansS+`^hF/`^Q{ k0n`'y0n`^q{'=; {MHK@n i+ ׄIHkBZR{(Q2#/\ rMHˎi&N ȝ6!uڄE%6!-)',01 ȍ4aыY1=3Rt{"gF{: gFrόݲYQpτ{"gF]gBc=3bgv 3q'D&FZeS3RƎfD|Zlb F iFAeĸ"ݠ2B=F6!5҄En)#")#@$iBjH:Fzo'0΄Fڙ0`* /΄\0n # ƍ3ax # ƍ3a)#Q@aFP) /rF HH#"i@aFP) 7ҀHݗ2R@n) #,0eg>+qݞg,n-DĸqF;#b)"Ɲ+|ݲg(Z)ccWF hw작F2RD#EmW H#0R@H#H*ǧTSbpQ X .2Zc82)"eNL_gy|"iD,#E(F ȍ40R@HFڙ0`H;F_qי0` ƍ3av&4/͂q#Li0n # O`L) 7ҀHyȍ40R@^r# (.: "FD) 7ҀHy1ȍ40R@nr#,/ehNQ)`х)# (<#eB 0R4""4 mh¢,3"e"XfDe]in2RteFIJLDZY&Y{2Q)eVGqψt3"=Dqψ,垀03pOP5 ˌeL@2)Jm'q|2"O"R D' >P$yo-|d2`'(O&cX2vQL|d2VX#3ɘ{QLNdL9 +R2LHs@V J=uSg: 3҄=dKBe@ {ʎ=d9`q فR{&9`9O`uY!Z怬3P{dΈa# 2,zD23bX戜̌PTe*eH:jj0 4{x23bX戜Q]8O곜'SUeKq8`sGLh8∈IY#"U9B1!59oN7"+x5w#&8㈏vV GL8b0 G Ư`"L8b0^1ؙp`;EIޙ`:ٙ>@}{_@}Px +;R# /0<@nx/ug/>@}H)GECtN9b@ሀEOfĘ̈)Sg.3#e"-3vDίH#b)"FD)`;kGR H#19"ŀt@{4""r~u!G)Ό#<#<k㗝#R DF4܎5#r~64#lzD#PgtDϑfĘ#13[q*•+TO)2O;Aw& :7΄Al0~v& :'qLt0nН K`2Lt0nН  :7ΔAr( Tܠ  7 yAи/A :0h@ǠtPmDFm"':[~#ri#Ry.kF粎0UBxOv͈\xc7ZG3l2"0'FfD9xq|xi#ri1:"w3bRk "̼8awal3"Ung/^zB:;W'tN 3_p <w΄ޙp` /΄ޙp`qL98 wyI3ИFD<#"|uFq*7 ]Yq@ˊV XTtF",+F[1`!#bW#WgĘHa h}= F7_0zmK+_0Z+(_0т Q _` &7!_@ i/ ߄R/3:/ NHMnBcxF:3bW#rF WH- WNH]1\9#E?*\9aѓZqցgX7ElFY۝jЀX H2H1Xk~);13bkÕq\9#$Z۝à0hD\qBÕ3RU;#| 2Ŧ.c7"Wg~ /ߙTAz+3b4"Ag0C0ƊoDqlNa۝ m3amgg¶1΄mݙ`ƽ0m aw&<3e怼T (e 3 7yI2sDr3(y@at !w|:cl:r34"" 3=.>y9^mӺ-"|n;(g<""|8ŀax#|8>9.r\t{^ܾx\~PCO-ȕ^Dr> aW',V-:>>PtvFvX 9j|uBnP/>'gwFU)C6  rAtg qLt0~Kg qƯ΄Aݙ0` O΄Vܙ` Δr+([1 Šyȭ8b@n-+F[1 ŠV W#]95_c g[T^ l-F1hD~TW=7_k^ XttDiDf_ ׁWf1Ppebh~)xg,vD:!HՇ [nB:3Ө!G+DwFDe>"4"UmL#R 94"E6s99Ut*bmw*ν2]ofgf:"4"v(+([q@aŀoJpUV[1`܊F/`܊h-F8b0j Q+ƭ` &8!b@n i铐Z1 ԊR+VZ1 sBWV 9#ԕ+'KBjŀ|9!3 rB:+辄&:EE&i¢H3Bi¢۳H3B&,I2q,3#e"-3a zj-̈apLhX&J23B-3!L@n 謅e&4,n Dϑ&4/ӑobcF s̈a8昑b_:by|9fx"Γ2bom޿GAs|ޤ=Gx}>OG7x|ь{G?4>چ=6|NGߗf'|ߏe=,}so*&Z%9leӴǒ=ȗ^-Y/%Ȕ=_e},.4~6|/geSל;ن9k|V>|w~>gFqib1eت9kZ;sq>?_8'_1oYdy5>K8?=ժg^Ӌ9lYC9>? ^ͿP߇}^%}#k|VCQ9s\s{l>9_@nkxǷ^a-{q6<{}I9eqmB9eǡB{PP?ݴuסB{P}Оgo^Y> iC4>ϧ}g;}绎B{_.|*kv9Thh Oi_OcY]BȈF6ۡ>n{zʞnC}v1>>P]3ݾ1?⻲'2>Gg#jP]kl_OY۽6'P]uͮMG6P]ϏE+q6n~9O db9}GϟTCQv1>eWu/QC>_=zO{J}P]=dW{){ҽ%ٕ^{`o徕mq)I>WWUDG>UO*n<do}Tg@]mfr).*zoõd ֲg+MJ.;6O;"ڌ; zȪ6G"t裍Һ.6Hr^܊2̾ hs裍Ѻ,6Hn*}/J2l.쭭(T0̾ۜ4*}>(5n*r{zZfmљ2YxdU| Pfm~"6Gd*n)ʼnn2x_/G[*[.NQ(ׇU=j0ey2;05m:=\fG%ƿHV}W×Q*|+2>PGQ&f=}+.tKu)0KU1*3>UfҬN+6xU9j3>}Xf^/-ã<3exg|ʾG}Ƨ-Yη Y_PfG}Ɨ(2UhȺ| /(BKK*۾,_JSfGƗQCU6*4dn >'BK**4ds1*4>GƗQ%e}u YQU=*4̎ /c-[Yz~F}QE=3Dn/ȮQuevTg|yݪj{//:kmTgev+ΐDniɿ.!߶zMr[!߿i)~7!?m??~}_~]ڒ 6 ˯u h{h 63X=[ٽ]ӫ_Ӌ,\y U%F }mTz?׈Fo~2쯱l$eG s_ a痶<=lع̿ҹ9?oعʷ%lعs~ްsa*9 ;g󆝏rBl_lh\-֟/C|EIJa-7\mqߜ7\ ;g[7 ;W^ˆ--󆝏zFVmϐu˴xmyƲecociw*|-odٰca纁O[870oعlMj2QV{6񺶱l(x4[ژL{m|jťy˴nz-{;m[=t(h6-E?.GƻXژL{6XL{m,|MպeCls}K/{,[=w{hz'6XL{mO.cecmƼeC&g6-E(6-wGXL{6+wLژL{6R[=6n(8zȺeCq6XL{m}d2۸`2Qqu˴GƻM,m[=t[=6nm܏nm_Sߟ u˾Gĕq{Ǩn5>xϯn>e˴~˱3L{mi2xu˴GQ]-E?>unyuNm,[=6nmn(8˺ecosny&mn(8˺eC9˺eڣhަ6-E?llO/m[=6`'SiF_XL{mku˴GƱ_L{i[=f+6mzm[=m *5zU-=l۸=n_~Ձƿ1ƣM.m[=6>mH\ژL{6nGZL{mh2۸h2QۘL{mh2Z{q< {mh2h&6-EGZL{mh2xh2Ql6-с-EGZL{mh2qw_i*?ڸXL{m|Ӗ\lˏ6.nmw(8ǺeڣhՖ-m[=6k5>N?r=6eڣhi3HQjޖ6-=-EGXL{6BzXvc ;p$GVr7۽MOs@#"ȧߥg6"me~fe;"w%vW|h~?i!wEoK2&MI%[/1ɰ' g4LJ W_#]C{q_emufs =Y=mM}{5Nsn{,a6Ii;?E=ʸo,w{"ǤXmW=>i͜_~ ut/ endstream endobj 650 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 654 0 obj << /Length 1519 /Filter /FlateDecode >> stream xWYo8~$ C-6D^Hbca[HEfHQ"2$po0\]o*ad:) BOD2)KF)Mi; K^2QYtnX2QYA %U&5+2'M2. +̛=ˑQ(SHw 1M=nmiU,XF qFJFښv8圫G!959cPPۮB_$w|z\a6vۅ9xqfWw"&Ä,z.HRG,9n7{I R5䩭v=V]M|oBs}Kp zj\ŮXWy'͒Q5臰Ym;T Kg_:;js8~j̛SJGC4'J 1N e0]Iv+{ob yG=Bψ~MpYW`Ul(F i{`eץnT?7ͳG^Y^ίulV(ו|PC9ֶi|,}?6 1\ܿˀpXѸnu@cf{8=!uwÞPkNMT A'߉-KR"h#X]͜d68gsϿ%8 to$g/s%Kzy6=(=' R/w0#U$$w{  H3k$/o\y/Ad=d-[Ә/׋6̞E />vW|x5^䒹6&RV@v |<&5J endstream endobj 641 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/HeatmapResultAPClusterDataSet2q08c-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 657 0 R /BBox [0 0 504 504] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 658 0 R>> /ExtGState << >>/ColorSpace << /sRGB 659 0 R >>>> /Length 40704 /Filter /FlateDecode >> stream xMn$e~"GJ2]u'u4P7@-o1How2,"߿??_o_x׿~_o~#_뿽ǷiϏ3?~{Z~?ƛ_q~?Z=?|VZo?^~9?/埿_>=Yүߖz}%ƽ|:[^ ޾mջ\/r|]/r_u~ Ps~ǧ^ԗxT_~le\/u]ra_˅Ϗ|}g0_߯f}?/߾+y\_߯_3x]W˕}0_߯|}f ].ra矗vxJ^.+J]ra]ra_˅~.5]ra~U.?Nc\_ߣޯ~.oۅ].ora~{f 5sykv0~~o5œ=}~%_\ޯrv~{?_/bޯ"~}/{_E\oWr_~%\_{ޯ"~{^.{ޯ"~{{.E+?~^.׷+y\ޯr}{\ޯo׷+myk[,qgAh{xz|6oߎҎoҎᄋۿ1x?Gߏ_|ocx{^gxP__}5Y5Y>P<rm_#~z~kh}_b~~5l?^O__h[B}?^jr_`[/֋ۭp`n{&[/Э_n~^[/zqPm}̷oL@z~/ҭ_[/ڭ_?|o?^g~o?^[/78^oh\/׋e~p2>(]R|Y_/eA2>>o7_eA4\/׋~q`pH_f_zq}/.A1FuhͿq'>#k>)ʚ=Ҝ]^?Zs0 ~}y>yuhyϙ>=s<¯?=9b4gL2L'}tL9jۜU6UK;NqҾg:V4XcֲŜz51a]Ӱ»6d5n/.~؟is|<-o:mՖsSZrV|M51s$y9kǘ1支z1Ly9*jWůo<9CǟCl9\\/^:6Kܱz8R5#Nǥ.rm$Mȥ}__Urm kSȥXGqi֫Cǥ\W}^9b6gK^2.zerθL*.zer9Y\گqi?ksĥ '(qiY9L?]W)ptgT81 y[IGq: $ t NoJs|_ɪd)Yӌ4%kY{d)Nj,MJs=~,㔅4M8`Q4 5d{ lAvZ,CE, i!ˢl!ˢl!sȲ( AyyAdM3Ni4)Mf M3Ҕii4Җ3qf8)Nw[ɚfdMS}ٻ漽{ EoM3ަoi4-MyfM3Ҕi[`M3Ҕi4-Myf)oӌi[6xKSަoi4m64ަoi oSy $$줆3(z @:Iz3(z iSY(YӞf88)N9Ni4e4 )ML+hkZ/gᴤ-i "Y"ӌ4!Max , ΢! !`HS؛E=X؛E=zjyYf2YYc8iiELH"Vef24,h Y-Y([c(YiJִ;s+pBq,4)Mqf ?'8kzc(NӾ ? ?xo1 fY|}zy穗P ӊ(LSz 4Eo񖦐M3Ȧdi 4#4i1 M3Ciд?yc<, ldM3i4)Mqf8)N iS4p +iS4pf8)N 4i4pJSNi4)Mqf8M34)Uh8Tܪ Ϯe`8%=?#AqF 3RI#g Π9#Bq:8#iiSt4 )U7 c(8#B98#iCg Ciih Ns7wM#wv^G JִON/ dC6 KSȦdAֿCwc(d 4lAgxCpC廠dM3 fa )CӌiP24JSCӌY7e(Mf )Cj3 M;? ݞD2OdqPC Mz%[ڟQgh1vɳW88Mc}M C5S4pJa f,n'1YNi4chV3?5)Cӌ8}|%kt4w`,M3i!B!fdM]*/*/M{^4CoM3i4C/Mћf+4C/MћfM3i^7Лf)z 4EoM3zCQCo֠qz'5Ac%} 9 4'Ҕ-14ts6g,i̢`s4c3`si', gYi 42rρs (V9 2MfN3i[6 fd)Y Ӟk5JSYӌu@B6ȚE,CŃhzy,i4-Myf)oӌi[6x Li[6xf)oӌ4m6xKSަoi4-MyfM34-8}!q(ovgPKz~; G*o'UeEq,Ӝ,i4%7,,ӊ, iYgddECVJVu5pz]XJ+:, PNsҔ(ʢ ,PN+>) %4'+MJSNsҔӜ4%+M:JS,Ӝ4%+M:MɚVt)kJV8M3i-gᴤ)-iJiNKrӒ)-9-iJAӒ洤)-iJiNKrӒ)-9-iJiNKrӒ)-ҒV6ZN*h $C$9"gP2x~F:E$؃+"')"IOCg 2 C$8 ihEr1͸HS=?¸H+N80.iF@0e B , faL3Ҕi 8 '`s(sfa)ӌY<'` Ȣ `F@ZqjL3iŭY<+ bq1͸HS.9Ӟr1͸f\'Y398xN δdQ3 gL3pNksp(3ISp='Y<gɢgɢx_fN2hf)-ӌ4e2hI+hsZ΢eFK2hf)-ӌ4e2m/7^P249CY(CӌiP24JSCӌ4eh1@(Cӌ4eh14JSCi4ch1 M3ҔiP24f iPZDp=[^^ii ĽhN bP48tH)?4fdonsS. l B:JSNsȪS%@G {c(oi%?zYfQw zY(zii^hzYE^^wVw{]eQw zYEqʚw)z9zi_$,@@N3 Os='*⧪f)9i߉LS ӞEN,Vyfll)9ifyl8iifll)9ifyll)9if*ii,o:, 8g\,nu|, =g, ?gD3A>c5Y4>''>w91H'Ϩ>'ibDL,|NX0'ۿ\>~rĆ乣3) }N>iyv Jlbs乧3)@}NTDQ&gMŚhN,>(zN։9IsN4K0ә|N_jVO+ ,;pO{~5&,JpOSO[=Y̝&U7VEDEwWX'wX[]+n>'d5s&ED;13i'4bI%f&Ϡ3)>'艋h;z;:<Ŝ6NtOMLωy"fbb&UoΤwllgȖ%l'.%l'.%l.ۉl.۱"[v"[˖貝Ȗ貝Ȗ%l'.%l'.%l'.%l.[%l'1hˢ,ܻ//YޝE]wgޥliwgܻ»XxwnQpbLԻDnzM,ݽ*lZ81q&3)lmXؘIcLƉjcu1O\ĜXؘ_w˗bNT1gx{l|}o6&6 DLt'UDWp* NT'3)EDWLLb& q&=ՙ'. &`+x+8Q;qmwgRwۧPsRSd3L,f'Iq4E4h;莞8莞8&'.&艋h;zh;zh;莞8莞8莞8&;莞X9ztVyrn<}eшo+1Ϣ< 4CxA,dbd&i21DLW&=ՙ9?)EDUSX,?yt&.3)3q&q~=q9&~=q9&6IL\D>-j'.>'6>s>>>''.>'Gωωs|s|s>>>>'!>+SOE,g>u(ŭ//LX>g>pn}޳X|XD[=j_ENt'cvbsw&sK'KgRIR&҉KR"PiN\]:؟2i ;Űư3 KtN\ KTNN}3i ;75lkuUkubU&V4ZIU&ՉVV'.Z%VՉVՉVUkuUkVU4JtN\Jl:祗Kjs)Q]JʤL]]DEDED(:q(:]]DEDED(:q(:q(:q(JtB(:J:t,]γpT4Xw.Ϣs gX$ުR2QU]J2īLTnLTS2S?Web)V3qU&??ɭ*uU&*7b}n͉5UƏ?(U%U$6wgR Iq'0NLTF*DUeLTU]DU%UX}U&jM[3Q$>x¨L,@4ͤ(42q&VUDjjZMT&VD*p&VDjjZMT]D*ѵZ%VUDjj5Q@VUJ'*΢8/EXa΢, -M {lvZ#cɖX2q&6eⲝȖ貝ȖȖv6|f&ll3gȖI#ۙ,%6Is^ILw2q'wXfR2lDm (XKIec&46Iec&9bRy"fbbb&'.b&9k"fg[]Bk&g&6Ik&gRI,&뉋뉋kzkz^}/&'.&뉋뉋kzkzkzkkzbQhgXTzZcQzŢig>5>g蚉zkzkbk&뉋gR隉zbk&4ɢkbq72JL]3it=ED;]3it=JL\DEF3tͤ5F3tͤL*]3q]O\tMt]]]]]]DED7]]d5ϣ~=3F3YLt11Ϥ3F3̤L1]DEDED3{ӛ.ߓEw|} 7ܞk^{g?=ּ>ʃ^ŭIlTLTU&*DU%ULTU]ʉ*UDc1QHt?&nD5aKT]t_Gg[-Qvj]ɻyw܄jB^ ՄD7a.Ż/{*oŭLTkݚjͻfh MT&@Bh r]zۓ+Y|bq4w4w]X\zťܥܥG[\:M]:So݉X.MtN\J?xܥ_9(n؉nĻsXsw=Eoa)w[Ȗl;n&d{]oީ}wyޝMT&a'aU.=qĥGy,.XtR...%K'..%K..%K'..%K'..%K҉K҉KR"P %.$6֜bMbcM&5gX֜W}5n͉5jDU%R$.&$ n‰ g&ߤHt)]0MxU~IC\Eq9 #MHS?Nk5YiGq~ďo?^ՏG1k?^2cJ1QMHt&&\L<1+soL=7abqO~IZsn̢p]*1Ϣ87Esnu=u}E\G[t莞|R&)e⺞NtGO\M,΍3q]O\tMlt=JLTⳗ2)΍<(gҼo55u=yj&#n&'щ*fbcژ؜fRfR2i޷ژX)+x`+ ( ( &'. &) ( &'. &'. &g( &6 I`&4 f NT޾ʯYܜ1/6} њ3-g\\G[<|=ebN3f+x`b\&~LtO\L,ޓˤyOn&{r3Q'6 rL,f={ޝMtO|ew?fʪ3qƉD.q9%a'Ve↝%a'.%a'.%an؉an#n%a'.%an؉an؉anXvbXvbXbcؙ,%ajXk5;/-ZMl\]::e⧳r)wťƥLԥDhZLT?&oalj)*OQ'.&$ nB&$ '6Wji(dt},ԄY4,Ԅ܄45!MM8MHSN;ΤxG-7a0QMHt&M<݄(d4c&.D5abaB&nD5!9D#6 '.<y*DE#6LLTF.DbJRLT)]*D"ѥRH1QHt)&UDbJRLT)&.D"ѥR$ ՄjB0x7+7a0QGt%x-KT]t*D햨v#nj7+-x)[bqEKTYŻN3)uʤ9|k{Jhw,\4w4u޴Jtpm44Msm]ڍ(J#&.J#҈Lj&.J#6JI4&4ͤ5U&蘸.蘸莸袛#&.#&Vc҈I#Tc⢛Xn":袛袛#&.#莸袛#&.#&.#..yDwɢ?b4fRfRHR݋.ʼn_&=L{R3)Ie%@'.%@}4"P z@4I#_#F, JST(ޙ9 w)M]ziUjuڢD*ygf&;33Q]*[6m&*[6-Fll3Q&eM,Ie65l65ŰjX6Q %aհưͤ0,ưaa3QݰjD5, %aհjX6Q ;q1lMT&anD5, MTݰjX60,7ݟERx{7.n6Q Kt&ayMTݰa3) ˤ1l&aaհjX6Q Kl IaX&nD5l6T, IaX&ah*Y﫜EJ.i_C{y},ԻNSܰG[ ;M {n%l'VeȖv"[v"[6 ; {w.%6dv{ .32)~*g/L`f%w'w]GރIL&{03qƉD.e膝XvbX膝膝%a'.%a膝%a'.%a'.%an؉an؉aagMT&6.Rbҙ,.%K҉Ky .ظIҙT.eҸt&KRtRbqw/jbҙ,.%KR׸IҙT.ңUgh\z,*]:q鱨\: wNsNsmqƥbs)]:r)ƥLܥݥݥDwʥLܥݥ~:q&&u&)*QL*U2)~.j&Ee=vJՉ**ʉ*ʉ**lu&@.Љ@@'.%@.Љ@.Љ@.P t"P @.Љ@.P t"P t"P t&@.Pb#Й4d Iq'p&ՉV'ʽĠL\2id;JLΤ$LOv;TY*rrri_^MDW|UN\TItUN\TIU\*oSQn߷eE;:2)>InLܰD7ŰD7=1+{b,%a'.%a'6|ͤ-F3i{wb]&݉w]{w]{w]{ޝx=]{w]{ޝxޝx%w'.%w'.%w'.%wUŰư3Y KgyD[;"xpzy~'. &~}zyON\b&.6&_<_LT1EDW0Q|l̤Lnl|}a"wlL׷Ͽڍǿ񟯮06^ 1Mmf6N3ifcOYO~"ub>DWW'h6>)8ֻzw ٞOA{;'޽Nn}{xw{ͻ3wO{yw]'41Ѽ=y7wsw_^wM,{N̻3whMTѼ=yDͻDͻ3whMTѼ=yDͻ3wջg4Ѽ=sf=y&DͰy宆=i5QzF4¥\.=DM}m&3VhZ=ܥK3)l?^|FKVfѸXK\L6 kNskNb4\g4k&99qNTѭ9q&99qNTj&@@o?؟ V3)VLs$5'.$5؜ggĭItkN\ItkN,Vsl5l5'Vd֜X$5'.$5'.$5n͉5n#n$5'.$5n͉5n͉5nM[sbM[sbM[sbM[֜XhL|n 9qN\JݬלEg1L*2nJL2i:弔.XtR...%K'..%K..%K'..%K'..%K҉K҉K҉KRtRNK4.e.]ߋ֜XXIc͙TdҜΤ7ƥLܥݥݥݥDw)Ttݥo?#u^EKݺӯv{>K/wPǿq'X>?U1ܰ4547,Mv~]>D7QJt&_6Q %V/ŰۓQnM qq&ĤLvnnMTN>e)S4z7QKt&ݞ~]k^'D.n&]{7Q%wջDnz7QKt&w'.MTݻD.ѽ%wջ]{7QKt&wDnzMTfRx7.ѽXsLDq~NS)8n&wk󛨆%aհD7lbLLo'*|´LOobҜKMњ\;_g|7MkNgY4?llvZq:;t6QOgl&l&݉wz:K\dK,Ľ;߷X ̤8=%6ޔ~zSbqˤL2iDNan#V[ͤx*}an؉az/1߷h.=cqʤ?8wʥLܥݥDwťDwťDw)]:qq)]zͥDwťDw)]:qq)]:qq)]JtN\\JtN\\JtN\\JtݥKK'6g\]:qq)8ͤ8eRL\JtLݰ簉RbR׸Iҙ4.6ԥ(\: w)M]J+%EUiUjZZZŢD*j&V3Q]Uk5j&Uk5*FVV3Q&Zeh5BLfZMT]ՉV3)ʤj&D*ѵZ%VUV4ZDJljZMT&VD*ѵZMT]ՉVUDjj5QJt&VDjjZMT]Uk5QZ%V 2q&ZDJljV3Q]V3)ʤj&Uk5QXhk5QJt&VDjbՠj&VTZkգUZEchukuNk>EX:͵:8X ;M%iZXiIU&ՉVՉVVV'.Z%6ZIU&ՉVVŧ2Τr)w)]:qq)]zΥLΤr)w)]:qq)]:qq)]J4&n͉55'.$5n͉5n͉5nM[sbM[5n͉5nM[sbM[sbM[֜X֜X֜X$5'.$Lk2qkNĭ9Td֜XXIc͙TdRˤy7k&ŻY3;K҉K҉KRbR׸X @V t'2͢D&i)걨NQg᧨G[\:]:OQtZsz,6ݥ+2i\]:qq)]:qq)Q͚|"S&nV"S[sC5DLљ,$ĤDLOdʤD&&K#.󛨟Kl>e)W t"P tb)KIs:vb%[&.ۉl.[v"[v"[˖貝Ȗ=&[v"[˖貝Ȗ貝Ȗ%l'.%l'.%l'.%l.ۉl.ۉl4eⲝXɖv^WeⲝȖȖI#ۙTe⧨STbU&ՉVՉVՉVU~RPxKo2J:VOjaQV,Tg΢9/eQ泗pT\4=/V Lʤ1l&a3Qݰ[e~9l&`&LsLŜXlLY&.tINl 냹'.6NTsL/6&ƒO+>>Gz⧻2y룸3QGщDu4&щh;:Q=qqt:NTG'Du4NTGщh;:QMtG'Dwtbq729pt&hbLqt&ۧ:Q?)p4љD9;:QMtG'uNT]ũo&L(%~~,~72}΂/OSi~KsGOsGM}>8 U۱3 O}>1QS]]'ĉzB6ؘgD? NԳ`"[.:y o"[6Q {F*ѵ:lݥus)]:6k ֜簉zK;NDw'&>p޿ndbλ~7]DDW]Rz?ݏՏ_5o @'.%@҉KLz԰K.GQ-GQ?_M4Go)SXMͽ=įssO1|eD=&.&gן+UgtGO\MϣrM\M4GItMSjQ~e_i}}}} ~Mlt}^@43MOii`*x+ i2kpw/iDI>jD5, %aS=+ NT]>»Lܻ]{7Q%wջ&wDnzMTݻD.ѽ%6ͤ.nz7QKlI]&w3Q&ww3);ʻw»w»Lfg_$70,ưb6Qς 2q&ZeZM,i)Jb^KեDwibLԥDwi.M,\.MڥS]Jlj5QςB:QJ:\GkwY绳X:8eQb4NsNsmFǢ-Eį>Żݻ6Ql~fZhZhXfv&an؉anXvbXan؉anXvbXvbX膝膝a/caEeţw'Vexw&~'p޽ |} ),%@A X t^HykNskm44іiʣ-檜<ߛK+͝Ew^8q#9/e⪜誜$63K5'.$5'.$55gX֜X$5'.$5Y֜X$5'.$5'.$5n͉5n͉y)t&y)UItUNK43YTI&K( T/8q#9e⪜؜Τ:eҜ2i@gR2i@gR2i@ghZ%6g3YJl@gh؜2i@g]rJtN\\Jl@K'..%K'..%(qw}\JlNFgR2qNNFKR.%K'6.9ԥӚ(ދ: 7,x/*⽨pԻܻ4.M;9EeQ΢:Eͤa&g g'jc8QmLt'ĕ[MTݻ]{7xj&UDWp*8QLt''. NT]DU0 &U`+8QLlN\3џ)Ct&wջ5I)KUF ILTDWpbLTDWpb`&3OYJ,N\kb![&9l&9,mbIeMԟrK)kO Τ` NT]3Q]`+8DLt N,Ng4fe8qbA9QL؈9B̘Ŝb& 1gb&UDsb!LTDsb!f&s&3Fי ]z򜨎&VPŧXYLwO[3ɢ`bY?c 9Q߅]Oڢiգ-ZZZ=ڢi~f{ťܥܥG\:ƥǢs)v&ՙ-7, ;q1, ;q1,l~f;q9%@'.%@'.%@@g%@'.%@ %@'.%@'.%@.Љ@.Љ,tv&z}EDӱ2)>:Vbӄ2qN%=eD&Љ@ˉn͉5DĕIs:ĕIc͙T'LObX$5'.D?E觨D?E&݄Lf‰ fv&*w{OT+"=ּEY 1,wOi->>>?ZY4>?ϙ'.>'ωωωs|bs&gɉzL\Mlͤ1LssD7D77ssD7D7D77=q17=273iΘ3q]3L3f&~ƜX1g؜1gR1Ϥ:cDϘ~Ɯg̉艋zL3LϤ13l̤8cfؘg̉zL|p?4d1tLdq4=/&'.&6f⎞83~D9'Dժaհg4Þ =sfRa Þ3Ͱ'+Ͱg4&VfM3Ҋh ; 3,mAb14747*΢1 ;q1, KtN\ KtN\ Ktݰ+2i ;sL2i;ŻDŻD.ѽ;q.ѽ{ͻDŻD.ѽ;q.ѽ;q.ѽKtN\KtNtLΤ..ѽ;.ƻ3ypOQTgtNˤ1Ľ;q.oQEį~e>1/Kgb>6>Ld1諡wDoOaq4=qq4}Fsbcx]lLtO\lLllm'n㉋gR٘wgb>ۘ6ncxbcyAPxncxZccYig6ijiY6EeLDq8QmLt'nDqژ8LgRؘ8q&Dq8QmLt''.6NTƉjD1m6&Ɖjc8QmLll6NgT' Hk_'~ꛨMTfRxw&w3=Gy46DmLt'6f8ƙ|miki̤s&wb?491q}UO&DZbD57͝X;57͝& sg& s3i̝Ian&7eş&ySP?oX,?-h,? Ok,,OsOs,LDDD<-?<3,ϤL3i,?DD<-?q<-DD<-?q<-?q<-OtO\,OtO,Ϥ8fҜsg''6ܙLsLDwLL܉噸'.'6Iey&L;QL*3)ι,j'ܙ4bys;}NtOsD=n'.&'.&6f枸ؘ{&4枉s'9w;9ws߿Hp}E\G&̻i.ۣ-X,沝=Z%Y4=ll'.%lz- &'. &>OΤ3s9QL\KڻƤLݻݻDŻD7ݻݻDŻDŻD.ѽ;q.ѽ;9!Τ9ĽKtN,>+'_zU^y4O>Ű?8E?w'ޜGoD1\uοjincxۘ6ig6>i*i*洯m|!EeLDqbaL, NT]zXxILԻDnzM,wv7q*zh ,5ٿ <_a ؀ʈȮ~b'lv2) {7MD&wٻ]]Gn"z7MD:wѻ]Gn"zױy߮L]OLл]|7|nb]wL]MLлDn޽y~=LлI'DcsfIqf &l.S&,DMӎ|ȎVN,+;њ4I^ٞT1&܎5xS2$Xv&s5V J| ]qP#]qPcvOX튃k2ݑծXVcvQ'x~WɳK %'nx솺VgOk-n<_Oln74Oī`;X?>`n56sG̭gj|vƎVcGmp;hъюhюhюhGvhGvhGvhGvǎMn8;ud*.B潧=i^I`OϑLwd8u|}.ɠ`O=il`c|ϑRʓM|1+b{=YIJD`cƞlO}V v$]a'vd37jnٟ΍YIT|]OW GPj,q7J\%WcPj,q7 D#K<%wd'Y(D#K<%OD;Qŵڞ܎zDu"u=/4"{Tj{<癠s>}>OD;6 <%OD;6I!qOXNxnƉhJ̙cΤ LP׎|nX8ړљ{|%⹱ccL {6N,l 8O7_z _ccO8Pp&`F}=76^ B̙bs&=a1'nhG>N,lIcL {8q"8-lIacO*w,hGl6Vcmhjl 6Vcm#Xq#ؑm8ؑm8ؑm6Vl6Vl6Vl6v,N=iN3a1+6ԙъ|Jb>pJԎ=i +XqP#+XR'=a+ vd+6ԙԞ4_gbvd1+6gי4bdKȎVȎ>=aG+sbqu&,fA̎ŕ֞4,΄bVlΤړJL+=Ȏv,N=JkO1;WZgbVl΄Ŭ͕֙i`cƞ֎ͫ3waPcqUv&`AUٞ4!Τ*ۓL3axUv` *X VcPj`7T+  Vc'YDT#+8 ND'Y`GVp"*ؑ N,N=D#'lQ,D דƻMD:6ͤn&]Gn"zױ9O}7 ul IaXO7ZulΤZJlYxMu"֑ XzҜfMD:6obq k5":°aS_O+3)΂3!wn&H 2\=ud&ͤ8 9 Τ8 WO'WO{ N,IsIqIs 'w,8,ؓJ+6(X >ڠ`5VXG >ڤ`GV`GV#+XqP#+XqP#+ؑ8(ؑ8(ؑ8(ؑX{2(ؑ8(ؑ V >`Gld= [ȎVlONG;ncwе"'N$ v,΄u8ڱѵ&=a];+]{Z'[̭`nG!NbF Qp&DTcL {^_1'YxEbunI`OX3A; {(8Tp"*رQp&=iI`OXB3fO:49Nڱm&x7,eȲM,dI![OfR֓FeȲM,dIsI![OLk[A4ٓ6>`c5Gl6>`c5hGl6Vl6vd+6vd+6vd;;;;kR~+|6vd+6vdq#XO98xב8xבUlN3)N=YloOiGz:UI]M78d~.WZ4'ĚAgq#^i V\޽z*kŸ֔8OtnO.H6N+7^j2xבy9 dPcq +XqU0߿A[*ߤ`ETzv_q ؑ?)?ɑN _`Xa:d3,jXy3D֪]o5,߿ʰu†=`X56êaذG Ɔ=`X56haذG ȆU Ȇud*ud*ud:a:a:a:ajR֓ư ud:a:a8֑ 8֑ ȆU ȆU Ȇud*V1&'&lY,[J4dc#[OjR֓FǤ',[A,[Gb%[Oj2ֱ'l5d؜jRz(XA`FT Q&{ V +X*{4ޅرQ'`,ؓ,XA̎=a1+bvlĬI%fO1kR#0mI#fM1o" ŬbvC1Xn(f5 ŬbvC1 bND1;Q̉(fGs"ّŜbND1;Q̎,D#9ŜXٓF̙bŜbND1;Q̊Q̎,Ds"ّŜbvd1'Q̎3)Is :ƉhcƗ'6m3'̎w3)ILлDn"zבgNX;3_ƻƵׯ冂§w=a&w zW9'eX6c#LP~6d#q1ulXƎ1Xq1߿q\mo`cWz|+VV6nm8q1l`c5Gl6>dcG`cG#Xq#Xq#ؑm8ؑm8ؑm8ؑmXƎlcƎlcG`cG';G;1tn?nu8ڑOr+G{8vhG<"$ fG#Y'I&$בOr\G>=bw Vq#֑Or:6դ:xEm&+j=I]MS_F u$N 9 dc]Mл| f5&1;1;Y̊Y̊Y̎,fA̎,fA̎,fA̎,fǏ9&7^}“Az+Y׎kA׎#Nvd]+vd];];~˃]_[a]+vXלf绎юh|7њ vD'DvibLХ¥4.].ul\IROfRvi"4p'¥yi&P4]@Ktdk&̤'53) [3OI@׸ԓƥ.].MDDtcR=K6T]zjR5vK6T].=R5v&:K:K٥K٥K٥RRRRGvbROj2ԑ].U\.=RGvRGv#Tqp#Tqp#ԑ]8ԑ]Xԓƥ .ud:K+zҸT3iceMOkΚ5k:5xq2XSʚ5ٚ5=iIeMO6kߚɚ_{TA@5ԓF ud{=ԑ8qRU5=i`MGccMM3Q&*=iTɠJGV#cU:*+UUyAjʣ TcU*6RUyAjJ5VU*_ǂMUud*ud*ud:@:@:@:@?EkQ񵨎@Y,PA,#Nud*ud:@:@:@Y@Y'h`MG#[Sq柿=i`MG#[S'5IgMOؚ5ٚ55XS 9jwzƚT&5\qVS>qS%A35Yf Rtd)*RtlvVyŖ&VV? ~td?:ug)?wx IqA,EGRtd)*6R|fK RtC)Xn(E5J RtG1KD%Y?G_"/KD9QD<LG1t#;/sD%Q7TsRtd)&Y(D#K1؜UfRUzҼ3ⵝ5sL kzL,ͤ֓ƥ.դri&RGvibqm&x#4p'h&xgh&K=i\Iq'Dtibq 4x"Oإ+>3A:6 eud&WfR\Is2Iq2 v]2A;ROLROϪ8bbQ̉gvG68ZƎ>h5vGGƎ>hGvhGv#;Zqp#;Zqp#;ڑ88ڑ88ڑ88ڑXw'|^ȎVȎvdG+V}Dv=a]w3'=as+vds+6 Ow='sss\qdt+7|DŽ|JI'd2'<7vwdJ鮞4vsNX⊃? W$x]3!$W,>tLOw='?'AWxsssN'` \}޿` ^X|98s9',qA{R|j9)?ؓSc R' {Njl&BNUcXn(q7K %wCXn(qA(qGx"J<%OD;Q(qGx"Jܑ%wd' {OD;Q(qGr9ͭ8]'u&xs":ڑX|'3)tǟs4~+ͧx-NLqm&;ϺNt߿L| ˙t+ć[#?&(qGx"^vDs_Y#qOg2_=ݱWp_'3)IL6_p = {~-߿UyjOwX|r9A'מT#'s>w\} v]`'n>?QIgf֓VP1'厕י%~Aj, Wcď6H\%~Aj,q5ď6Iܑ%8Hܑ%W$W$wd+wd+wd+wd;͵噰Qs#N>wk+{Rsg>W|܎=i$ s;9w"s;Vq&юhў4dp#9ϣ+{t6m8ؑm6Vl6Nủ=iI`OkR)ؓF vd;6 քOSjOOǓ:흴U6d!ԉlcƎ=a+XR{^E'lcƎ5iή3)ή=iή3DVa vd+V MV6(X >ڠ`5VXG >ڤ`GV`GV#+XqP#+XqP#+ؑ8(ؑ8(ؑ8(ؑ؜Gk2G;hG#{W2<V+3iή5I#fOX̊Y̊=i Yq#Y27Vl΄ύu+ޙ׻0ٱ'k"դOD;D#<}Xy"ܑ}>OD;yt"J\q8N,IcLzDԵ#:^ܓܙΤ^ܓzL=Y~v} s'玫/ώ2ιγ;%sw~=;s-q<3mxsnGV{5ۙ9#s'܉5~kG6wfnΤۓL܉hϮڱr&68Z}jh5vG68ZƎ>h5[MO߿Ə49IS49 2U*Qoϟnӿ~z:_??yO;>.Ǘϟ?ӗ}//ӗӷ|4zVZ4[z{0~?}黜=Ok~{~z{zf}}<~t(r~}}XvKphy[=?燕!>}|upAG[޿o΁G}o߬rŽ~+^|{q!ݏ?0F?`|\}vw?g ?ѿ=7@avO|~yqM>k!O_n1} /z6?Xzvӷ߾fVtWKA}v_O_Mڷ{L|[Qdz,Oڿ.?Eo|,O>[YI}<_ߞlo_ ylg|=8 6'ڏ uXܶ}c,rO  d޶g_oi??۷*k}> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 666 0 obj << /Length 1380 /Filter /FlateDecode >> stream x]8")[c' EӱT`RqJ㔴+ZT3ęPpt:õn^hK,XLA*(Rep 㜳4d0cTۭ/^^,ff ҀdE=}O%^A`/$" JH2zaNo\Y v9ʏ6hǪ*pFkmþVֽ4SWsN+pTenדQ>$ILR P.,'B'Aw)u2I&]i7$6IuaӖ4zwtv ew#|PM.ad$Vq)0G# hkun3~;o\n=P n6Pq|8 zn#l\0 ]X%){OK?e͸+63NR tNb]W>f1ާ++?]yؔhpZBzv]V/;+۶\b)=#1p}{7g&Z='oTb &c$"&8f JU*]-S m[fNN嶯USxQ1[mǁX@RKgO01BD(Ą^y<#if?8~.c$'RGrTۧ9~AAĮ|>[߂ÜGkGϙLiGKVm by)H婦gY6n8̲O}`acl z@IpPye;U|,-o SX|IPtZ/Qv9|o\ ]K VG7I endstream endobj 651 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/PlotAddLegend-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 668 0 R /BBox [0 0 360 396] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 669 0 R>> /ExtGState << >>/ColorSpace << /sRGB 670 0 R >>>> /Length 7895 /Filter /FlateDecode >> stream x}K:ݾ~E.=F|Hݰ `W6mߌ,EeVDC Y>|}O/wmϓ{V>y|{^|~k]_>kxUu~Wn9EO~?H_竵~ǿ^>~ t\z}WoGv }>ޯ?UYZBJ\^--ulE~^n9[^Δ\:-'yek,K56:I]'mc Q^ˈI9~,nxjUZnѦh_ǪӾ:mь?(G]~|6ˊ,*)F( 3O2R~qcEA7gVyc׭Vْ.aW|qq]gKWɫ+L f6:=S1(V VsQF gjuڮ)x_XRͧ9G {M_:ʶ\ wi|?ىh@ݕ<-@J>\TVsrګ[nPnY([r%jޥLѬ9u̺-fk Lrc[~Ɗn>-NynJnP|ZeK.]G FQ_ugtɶ͸}L9e͖Tw3f#?3x:;G\FD"Qi)V? JγGf)굏젣:sVLY\ $ 6{vP@=}(3~bEA7vcgpܺAi-v;ޅdY~ƀ#7ѩJFu(c L2)6li)+$g~`?X7)>Ͳ-]®v{?]K4Dc9=nceNl)ߣ%Vtip7M޺Gdْ.aWͲ%]¾٭qpKυmS9Typ0bOѢ9deR*k{UcaEc|.̄El=>$}DmHzڄQ51mAnALJe qȱE\z8CN1.DBaw[>'Vtiq6+~Y7){(r%j7_Mr9_-9D֙  ci|&VK2GY7)>Ͳ-]®v"Rp؈ݢcJuS,?1+W%"n\t*[r%j9?WiaqpƤPމPgd-,9MGAQʖ\v R~}w).Gsͼd~N`TEc{r%\.YnL(Jߢ~k7gsy:'WX,+ZO.5Ķto~\v fˀHn|>f iqR i4I /%cM߅eWMCe.ov]#e`(L΅" 9IƑ8AAΞA9>LIip#IT1”!AT%ËіEV-HVo~G!MV]3vٔ.b^bv'7qYL56SvWMyŨkqhqΰ8R7-]ľmϋa1o3T©,D nu{4MƂU9ؘ_ŧQvʋXڭw`2Ӳ8;%e07GY޸RXRͧWeM[7)>Ͳ%ľ٭66'ԅP3FeѳwSlwP>c$tiq:V۰ߺ)˖\vfۘ2سysk"G4=%vbȜt9ڿ.y-NZ xotЎ~;;)Wv ycV\XQ7AW^o7Gv n÷t*obB$EŠpX<{l-v[2z υsq5ۤBJCXQm}Kll>˖ܖf~•IqbxE 8bR)s76C'el9H7).}nt5v/~#Lxn0 #@XR>_5ٻzlX[c]岋7=&ԟ+g;k4'1R7ZocEYJbwtYle/;3廓e99o6[;Z)VOOFЦk/ͪry!6"dY-vms|sbOV?4aKXRͧ/'&%u,rY*j}r˹qsx!hc WS0X{Luyde[N]wix0VQќυh#}]J4gXacGEOݤ<-]®v4EF+`ɩb֯&\vM~Or|UEjE[EiqZ;zl<3ggE Nf Sy;s#MP-&S4[]rk'n19O>Lُ-cGn18ǀcڜ~LeK.]m?~en ƮȄFiqNΉ;`_-8*jda-g(oO܁=˧)>%]®v^BӰs44.4+-ock}l{M.rE[Nce6q*f>udO)uZq́IIΆFnR!NݎwxX3NicΉEҴI6N$[>TXQGZgIL}W䵗[.]acÉỳ 6ؠF}9ڴ'Ru>O>ON'y*[rٵ_v]p.>6q:vW8,S\^Lv-y2EXQh !Xi%]®v{~)]\9 津ۡrri9yk K,ϽZfrEw.jf. Dϊ\A$^L9歄H+Ȩ՜ݹ4`;23juٔۮݹn; c#x12\V~r`Oba̺YGƁ]C 9t^x2 ]ebEe4.t<-]®vyk/ޒ%δ.-NAbX]nPQKnKvsa`p7&-&&#q&2x;쨵'V[ݬCi)I/f"\;~1%u;@tJl=XԒJ,vn1ԉv'\E,[aM9uJ"n08"'!kL~(cXQ-;1GTueK.]/fo:ώP{HxG'!o'PdM*'1 *[.[rU@]vh<ضhHLNm1E*\huhhgrz5֙SS؊ ur ʖ\v fˁw78"iΆq|`RN Gƚ29-Μl{b;nWnR9v fǗ'5NRLf}LDG11&ϖXS’cbƘ,[r%j߅3[)9;9e4a+g))>7*kY sZZJ,[ꮹeK.}_pK\9_{+N&Eo sSɡ\׍-8Ig'g`W%?K68%|A%1)/OlN9:fbEuiL C^UK狺"e&Rq)/E+yg"oo|z7Nć'|} o|xW.Mu-_xT׳2;24?׽ ehOxCx=y5YUc<=~;]^k^C7rGt<4O|/y0:t /ZyzG+]p6΃խ ⩾t/^xSjt9@!*,Z'|xu4 OO5\?<LJyIxu_KNQw9sھxBtBf|.{<4>ca}eKtzlGAzWᡜ/Z/_V'"x6]tr?|ׯTx_k}_|n'=OrOxo$wi>>Gjw=>=gXvr]jN:ծ#z1ՇJy|;":5uhW@N.Qkν(bَrt1I? ӂ=q&wCWq0AZIģ*SRZCܛ/8^ b˵EbyU22ę8|HAcXkrˤTfo? %V 5ʨFX^ q&2{fx qqJE%)wu>p2ŞV| btÙ'IFY틷/V!4׏'_1Y,V%*~΢ѽ?o%X endstream endobj 672 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 662 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp8IBIR7/Rbuild706833281644/apcluster/vignettes/figure/PlotOnlyLegend-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 673 0 R /BBox [0 0 360 180] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 674 0 R>> /ExtGState << >>/ColorSpace << /sRGB 675 0 R >>>> /Length 1023 /Filter /FlateDecode >> stream x=7 *"owH H R`/A)-2͂hZ0 ޾<>:猾>=ْǟg>`)RL53@O՟_Q}v'4!fL`l5 d]yܝmU/^6͙ԩfoEi浹ξW~>&aܡZ6lkmgSYFqsCހriSξW;+sf}޹qƵ6ؖin3RDښG?6E[{ljfq{o! qy:sq/GC[syK"-u%7qC w;7x a-~y:sq/GC{vC{K"-uŽ7qw*! .3uvvFظ]XFN\ zP#ڸξW.ٍ>2vWY>4YI(k4S}T ) p@mZ UZsjkS(T`*mY#PR%7ܧjԾcoQWvC-FZui.hSn`#}5)҇G:U)PR%7ܧ7X:gF9 i(`]UBk~RPJOy]IBOulӃM@J`P9JBp#}ʫ>vc1g7})wsgke QkRz>$oQ{vCC+j6 ꦩ(T`*Ԉ{}N`<ƥ:Ur}kG}uiM/d*Ѕb((%>._O_}woҥH}th^O"G"IEZOHk-irZB١5i ɴ93wZR݊?udn 6[??R+o endstream endobj 677 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 681 0 obj << /Length 2417 /Filter /FlateDecode >> stream xڭXK6ϯ`DUY0^|j٬٤6!"!eTHۍ(rL$ ht<:D&ڋbhb߇VX }&VR=%hXE^Mم>uTi4!4Bv*\qscA(^.j YYW<\ezNEݝ.^x%!ʱc3ل̇\K1רe<]_\6ю.-(PHhBn T#X$MFjdM~<:PbtNW''.e<˖qo Ӏ{v: :OW2| S9fQֵ2z;(bO4LսwD9}'ægW:c{08s`~'L^! 9YrM1 `ZůXZB~Y?;$ ('dK<9yݮp\`[\}rH) Xt+%\Ѹ ?7 ǬFgHQH zKH1eMWa2YX%"ŵ/p (N? (5U<5T17%x삅\d)5g]Ke5`kKN@VeԹkz@ 0&|y0'H"}w! ~+ p ŖZ)+_ ȉ~RV5Ű@!b>1 4DE(à53O|gwf74nډWЯxg?IsI1٬Wp&=/N-M :w]4{p#?AGn5  endstream endobj 687 0 obj << /Length 2396 /Filter /FlateDecode >> stream xYr6}Wĩxh xћnNd[WlXYFs3}ƭ}zw^tt:;zJ',̄7[xByko6>ZN>^{*΂$J0JbBߴ.LGGߎBOlf W,>| 9^{a{K/:M\y7G8 wKODPlOA&SވL feǵ;C"j7Ua1(Lج Wz6M˕t&o{/ˠ,ߌZVewoܬ޴(_-v[7粞WN}c yQ|^ZmUU3&?76z(=2QTfʜL*i37}l2:L~iʽS)[SQmcC R@%QZw8LuaV悌=.*Q7o †cʺs6nξlj+x #=;f럖MYc%f(:BrwBEgjЗɘqu!3p,X}2F"i_.bb$(fa^mFaqۋ g5N?[K"(]ّ#[Ӎ`ģK B;q&y5{cЍi˻Ϋa9 u5%kEIv;H5Ɖʺo0G%X& nҮ3OPWCngvn+R=]Pz;,˗OӹY\M0u@al0 vEO`Bk9P>NL G4M8M㮃=7&YQ{ߊ[{?i&E$DyBY}oA;7}_j'N4_=^yU}-csȾ_Xntw/b ` E=ܸ=$,oʚ"|QlZBvd"hH6'RKPwFbmax}x:QYY?ۤ K(Q%BReڛMe@jH#'XyudzMPY_lX^Tyו!Azwf6vSUJ䐨?/5.a VWe=J@0"+fOK^R9l;=7e7ʢ2(u-HAh$rd^3]^^(;h?)'|B`Tɍ_uޞʍYa6Ӣ k?RI*Q//wrȸ3ntkk~Ͷrj0O$;(JZ<LzSۛIj՜QCퟓa`ElxȮΕ|V  wEZnOĻs*l$cNHyUFͪ#x~M7l/ HVU0hv̭D89Jup@'&B"9m0z1{mpO Jk*JV^]Vpt3mL׹!{S~DubCtZ?5qZsހu f掗ϨmykǕٌY7cֽE=b`=j3_-aijNAAX!ū(MU܎,'@ v>@{E_IZ~r~YUi}nN)̲RDdY'y[&wP~R ɉZOEGH"lԠLg=Ok[t4IًצL!³ )Gݷn܊x a)ĆMb:yn7JUoqSDƬwG'2FD]$޸> stream xuUMo8W贠HIA]Es`dF]In[{ gޛhd{/҈F] Lx`!EFOQbNnt]6~^/rL/N:_OM(IDϞ g4D[-".!J4Oa_E_҇G~S09BO<0i*A8򌣕_4Ea>afUӍ^ӻTG؛xl'ݸ޽.c*}]= Σ=,ǂh $Uә !0LdNWSr&[* c–u}uJT #,+[vp _r34)aA@!pb9VA;;-F.'iS)AsQ]ah ,qI)W0Y ]BEv˸$$5ڂ⌤h'h?a>a:V>6'/ a0$`MMuU 1ߪt?m˽G1Rueo2QiN3qPrB\3B^> A endstream endobj 598 0 obj << /Type /ObjStm /N 100 /First 880 /Length 1963 /Filter /FlateDecode >> stream xYo6~߿ sHFǮkp~zjok HiHf8$CB0>ZP9TIi#B6x:A?Etg(nFڣ@b0ƣXE4xf ,ƆtL'a`0 /Y4HvF"p#,kƷ'6k=ԵNXGFa%>ybmȱz8t# `FwƒV8 =#rY8g~ 堗 bKa2.k~Vr!o|4N;.D=%$ %&R@r MyFD{D Ct#(jR"DȜ P`cYa, b)u1 DxB!rK&'>43=)3'dEAj'1`-(&gȊl P.2~*j; 0)G !<&G Vu<13_ҽRN$٭#u9axSð+ad/RJQ&&V[i9Y"WhY7KISV]52stX CTh q4€C, cdM4R^dId&QX<%ҫqKq":,Yc`di1rԴ?yZ 1Exڡm23N6D<}yHD CxL't|xL9ds2#3'|9IChh*4q<4{ K>~?5mUp:+J8Y`G赙Fwr%~Yww|]V-HsWGd k~if-ŪV?U߫.aY6zylgt^\PQ|0}Mګ˓{ ȤnjQ]wlo5o0ժV7m{rUr}{>^+u[mTWm4)PCꕒXյj1*aŢzySETs,,]QV;nҦ@۳4|!×xh17Vh/bay,y>&>q5OLS Gh%*H{%;N> stream xڕ1PDXl 磈V&&ZY+h G(ˆAB,ٙ}P!#y8ф.fsULԖI%+]'R5w=%1.iFe:o[ xcmrD/+lQa^n%k\h[%~Ҭ5.NnwZb.HhC5~X endstream endobj 697 0 obj << /Length 204 /Filter /FlateDecode >> stream xڕ1@EXL `EHaRK &vp4,- JBg7N @\e(D͡+QT쎜⇬Uz`.d㉻<U&);Q rDQMԱ@a1PıMmc ]y Z ~/:] {>tٴc_> stream xڭб 0H-} LSZ N⤎Q;\Oh 䃻 jh1W/qz1pAf@Pki| }Qa|cpÖqA# KN2lɠw:RE99[CO#/Jǎmݐg'7ΐl9gXɣ endstream endobj 699 0 obj << /Length 213 /Filter /FlateDecode >> stream xڭб 0-}{O`@U8 kTfИXi${NRuZ:AW` D{JPhݯ=RO39ǰOX",@,scm$61/Vq?*{b\ Sg% nQ6Zi/Zt"Md!N r endstream endobj 700 0 obj << /Length 225 /Filter /FlateDecode >> stream x}1n0 Ed0EG0/ ԡȔdР7 dPK#O'O *k!XnKVz>uөg^3e݋}N7Oo#XnkR 0,H"`nX,2d;F)ԃ"G ٦)eC$9َ}r9H>Gime2bֿɯꢻNǀf endstream endobj 701 0 obj << /Length 225 /Filter /FlateDecode >> stream xu1N0E49BM,)@T@"萒(9K. #3?pW=w<~(ё6[;ϝFOْSxϟ_dw7qB#h%^J"s-,&ï& M ugTi: d)ȧֿHee_3 Y}ETԼ4rs$jYh%t;#k} endstream endobj 702 0 obj << /Length 283 /Filter /FlateDecode >> stream x}J@Hfa4]<Vr YlWX `D9-4oɿ3eP=յj隣{^u\\:ݙ{z|bu~*.r冻D6 !#"%I\(3}Cc{mPD߄%:N4@&qTDMK2v ;Q9(nhK Idvd="Т>y &ɹf{[ӎ N4:58x'_'/t endstream endobj 703 0 obj << /Length 141 /Filter /FlateDecode >> stream x3532Q0PbS3#CB.c3 I$r9yr+q{E=}JJS ]  b<]0000PX?Po?=``D xr "cn endstream endobj 704 0 obj << /Length 170 /Filter /FlateDecode >> stream x1 P t*d |BB`A'qRGE> stream xM=N0j K.Yo?)@[%h(pGH"1&+Ai4絻RF.x/~-O_yUì o[^fv'^TGnBe*TRUCQf4.,B"tF) F#a~̇ Lͥ2~"1e`9Cf1YD5- VM4kcЇA-ʭ endstream endobj 706 0 obj << /Length 177 /Filter /FlateDecode >> stream xڭб 0+ 4%q- ftr'>#t =/u AIn(ƚ!kxB%N_C!Q-$Ft9_Ռ$h+3;tA|y=8ނM?`|ҋ-xI ,vQOzxE:Vv܄#Jsk|jVmx endstream endobj 710 0 obj << /Length 97 /Filter /FlateDecode >> stream x31ӳP0P0T06P0P05WH1* ̡2ɹ\N\ \@a.}O_T.}gC.}hCX.OȠl\=% endstream endobj 724 0 obj << /Length 97 /Filter /FlateDecode >> stream x332V0P04F  )\\@ 2ɹ\N\@.}0PRTʥ`ȥm` PPr \\\-r" endstream endobj 725 0 obj << /Length 148 /Filter /FlateDecode >> stream x332V0P0Q5S06U05RH1*26PAS Lr.'~PKW4K)YKE!P Ek``` @0?700ȃ0P=qqF0.b.WO@.`9e endstream endobj 726 0 obj << /Length 107 /Filter /FlateDecode >> stream x332V0P04F F )\\ es< =\ %E\N \. ц \. r @ -ǀ `S7(b endstream endobj 727 0 obj << /Length 104 /Filter /FlateDecode >> stream x332V0P0V04Q06S06RH1*@hhIrs{=}JJS ]  b<] 0AfpzrrQ8d endstream endobj 728 0 obj << /Length 103 /Filter /FlateDecode >> stream x332V0P0S04Q06V0TH1*22 (B$s≮=L=}JJS ]  b<]o\=t" endstream endobj 729 0 obj << /Length 175 /Filter /FlateDecode >> stream x332V0P0bcssCB.c I$r9yr+p{E=}JJS ]  b<]?0006@BaoBÈ: Pf(:C ār ]u endstream endobj 730 0 obj << /Length 194 /Filter /FlateDecode >> stream xڍ;@!$S `. ,Q &naRK (0bbk5_ǡ&4t :OѬ9^01vCT+2kgTfA4)]k=l STK`O;1@EsSώ܈? v+ 4TK[%1H;0)P7 endstream endobj 731 0 obj << /Length 183 /Filter /FlateDecode >> stream x332V0P0bc 3CB.c3 I$r9yr+q{E=}JJS ]*c<]?0c`~8F4`8 &` q*Q"j r BDP @cL0B? \=hA endstream endobj 732 0 obj << /Length 189 /Filter /FlateDecode >> stream xڍ= @  xY7+P^kP2W̛ycRJlAوOh0L)lzƨ]rB6-Sr[oBU|@ &DEL^YɏBW)M sžԮW@pV _7G endstream endobj 733 0 obj << /Length 181 /Filter /FlateDecode >> stream xmν @ hB{ ֣CB`A'qRGEݣ#8v(r;W-rFEnIJsMpaӡ=+nmuEVTmXP~®G@+i9oH~,x!a(RRQѾI0>F^XnFIxP\wFZh endstream endobj 734 0 obj << /Length 186 /Filter /FlateDecode >> stream xڕα 0 ->5Rqj3:9::(:V$PqCiF?5AD"_4F"qt٣ Q&)ؠNXpFIAܜpʚ&%t3Q@cy!gO_pϫ`5+;Բ>i; endstream endobj 735 0 obj << /Length 171 /Filter /FlateDecode >> stream xu10 E]u%GO@D "" & Xi310~)M='TUùT/Z;R OQ5o3veGڎ@$>,% F" 022??{|̐EX<(> "4Ci endstream endobj 736 0 obj << /Length 191 /Filter /FlateDecode >> stream xڕͱ 0  zO`Z#NZN⤎:vwEpwI䓩|LN)^d<'2ezK&C-zE\)E].duEq"΁A BsT܆g4ʁ!Fdx?V,HHJ|E]1V};=E|9g1 endstream endobj 737 0 obj << /Length 178 /Filter /FlateDecode >> stream x]= @_H&GȜ,#BBB6h9Jr%D;x?3,fጿ|N&WMr 7*kJlrJ7RZox])-w+V⣞H]ζhh@ҶhN0>"NXuM{pTR endstream endobj 738 0 obj << /Length 150 /Filter /FlateDecode >> stream x332V0P0bc3CB.cC I$r9yr+r{E=}JJS. @-\. ``?v 1ao`0 RK)0 szrrT endstream endobj 739 0 obj << /Length 235 /Filter /FlateDecode >> stream xuJA'X,LhD,J--Bn;_k7H %6|3?/g^jɴ-ͩ[-W+Թz!/宑Q rI#_& .}]r HMMr 0 U%=&9~=d< ؅B(mi@a@dblJ_?QG2C*-tKsT endstream endobj 740 0 obj << /Length 157 /Filter /FlateDecode >> stream x332V0CcK3CB.c  s<-=\ %E\N \. ц \. @!A3i@``$z @8D??qzrrcC endstream endobj 741 0 obj << /Length 134 /Filter /FlateDecode >> stream x332V0P0bcSsCB.#K I$r9yr+Yr{E=}JJS ]  b<]bHP1?mpC szrr>F endstream endobj 742 0 obj << /Length 153 /Filter /FlateDecode >> stream xڽ; @E_H!U |2B Fp A+ RK E;]K jaaTܬ ]p96l]k5;<c5i=+?pڲf#V5zžѐ(%,I}! ()Ƥi#_VʵǞA; endstream endobj 743 0 obj << /Length 202 /Filter /FlateDecode >> stream xڕα 0-~5bu* vtr'utPt~Z)3wU/%zi Cpt2|m4DrT>pa<â<0 o#7U\m`vtJ)2mφy2$Ipq6BK2ٯp ?}'K "$|Co endstream endobj 744 0 obj << /Length 116 /Filter /FlateDecode >> stream x332V0P0bcS3CB.crAɹ\N\ \@Q.}O_T.}gC.}hCX.O z f\ >'W /N endstream endobj 745 0 obj << /Length 160 /Filter /FlateDecode >> stream x332V0P5& F )\\&  Ir* s{*r;8+E]*c<]30??`?``H>o;|$l8'W ti0 endstream endobj 746 0 obj << /Length 148 /Filter /FlateDecode >> stream xڭ1 0}N`diB`A'qRGdЧWLl+Y>?Ŏ;rY/9_T Z6F-ZB[t'"H z*I/WDcl<pU endstream endobj 747 0 obj << /Length 168 /Filter /FlateDecode >> stream xu0a G=-T'&:9'qt*<G`dh=GszQҴh4qŖ;VՉFSTvO:l(GU9'}A[HЎ IeC>se%$C 1?&w?D:8.vJ@ endstream endobj 748 0 obj << /Length 195 /Filter /FlateDecode >> stream xڝ1 P oxs}mT: I_Vo#TPӧ$|ß!OH&t0zS+2!9O=x1!uBk f7.\3`Plj媂CJ|P OJ.!ίqk"%\gJ 3o8 ). th endstream endobj 749 0 obj << /Length 155 /Filter /FlateDecode >> stream xڥ= A ]=9 VºSZYZZ(ښ9#XZ,gWč֑&ύYEHy _G< endstream endobj 750 0 obj << /Length 178 /Filter /FlateDecode >> stream x=̱ @ B>B^SSVA'qRGAEh}{Øvp =2 =!]1+䬏pڠRQZJʬ~{P941sJ=[u2T!r;i@0w0,=ԱVG/\*U endstream endobj 751 0 obj << /Length 142 /Filter /FlateDecode >> stream x332V0P0bcCCB.cC I$r9yr+r{E=}JJS|hX.O: >!=x 웁y00?Փ+ LAQ endstream endobj 752 0 obj << /Length 137 /Filter /FlateDecode >> stream x332V0CcKc#CB.c JrW0r{*r;8+r(D*ry(?`$ 4#a#Т?@Ha#Փ+ YL endstream endobj 753 0 obj << /Length 170 /Filter /FlateDecode >> stream x332V0P0bcsc#CB.c I$r9yr+p{E=}JJS ]  b<]oOc? @~U"5 Ȅ<2ao$? `#1pzrrC endstream endobj 754 0 obj << /Length 168 /Filter /FlateDecode >> stream x332V0P0bc c#CB.c3 I$r9yr+q{E=}JJS ]*c<]H|HX`1y$=;L8Î <(|^2}(?v QՓ+ SX endstream endobj 755 0 obj << /Length 211 /Filter /FlateDecode >> stream xEͱ@ [DGy$`NK;:q$>(y-Sb _̌M2C e4Ndx2:&4|OXwdrQD]|.)E}J+@up 94h;EV7Jzd1qe@DG8Gdhs\7ru[|zT endstream endobj 761 0 obj << /Length 197 /Filter /FlateDecode >> stream xڍ `4w/Pj)MPԚ>#46_Gth =(TWC# |=yrϭ3;/ft싳^l,N+=u-',]ƠBR"/ w]OJ Hѐ4MJ0?_9.6վэ-iN͋eVL endstream endobj 762 0 obj << /Length 196 /Filter /FlateDecode >> stream xڍ= @ GbVbh%GH"/Vef Ʃj?8$C(gbg(X]r;fwPL@ | ~nF <z/@:Mrp\3]8[FihHOҙAHVxuO endstream endobj 763 0 obj << /Length 197 /Filter /FlateDecode >> stream x=;0DQ m#'1Q.@T@Ip'Xz&p:SN8qjhBq&,d p’r^ %mW|O w=ْ\%NfN‚R8Ԏ;?]Aq !帿;$EC3NMYBvҶ6n* UKe endstream endobj 764 0 obj << /Length 110 /Filter /FlateDecode >> stream x31ӳP0P0TеP01Q03VH1*22(Bs<L=\ %E\N @BA,BQ? C GG\\\0oy endstream endobj 765 0 obj << /Length 112 /Filter /FlateDecode >> stream x31ӳP0P0VеP0P03VH1*22 (Bds<L=\ %E\N @BA,B@ C \\\HB endstream endobj 766 0 obj << /Length 180 /Filter /FlateDecode >> stream x31ӳP0P0UеP01R03VH1*26 (Bds<͸=\ %E\N @BA,A<@ fČ@ a@@D9e :ɑ $aU?pH\\\o endstream endobj 767 0 obj << /Length 179 /Filter /FlateDecode >> stream x31ӳP0P0UеP01R03VH1*26 (Bds<͸=\ %E\N @BA,B@0"00ԃ@D0 @a"W" ",XL/=  p ISp endstream endobj 768 0 obj << /Length 106 /Filter /FlateDecode >> stream x31ӳP0P0UеT01R5RH1*26 (C$s<͸=̹=}JJS ]  b<]L!W51 endstream endobj 769 0 obj << /Length 180 /Filter /FlateDecode >> stream xڍN; @n!swCM*!Fp A+ RK E;!/^`%mȸ 0Ј2 1> stream x31ӳP0P0V0W01Q0PH1*21PACDr.'~PKW4K)YwQ6T0tQ``a:S$G`1j%r > endstream endobj 771 0 obj << /Length 142 /Filter /FlateDecode >> stream x31ӳP0P04S54V06R04TH1*24 (s< M=\ %E\N \. ц \. ?aC??@P`4,r endstream endobj 772 0 obj << /Length 96 /Filter /FlateDecode >> stream x31ӳP0P0@P!Ő H(`\.'O.pU()*Mw pV]zb<]\= endstream endobj 773 0 obj << /Length 162 /Filter /FlateDecode >> stream x31ӳP0P0UеP01R03VH1*26 (Bds<͸=\ %E\N @BA,<b@N ?8$D D`#2f2X3Iq,63 *@'W yK/ endstream endobj 774 0 obj << /Length 104 /Filter /FlateDecode >> stream x31ӳP0P0@dbUeh䃹`\.'O.pCC.}0BIQi*SPE!'EA0XA0Փ+ 9-I endstream endobj 775 0 obj << /Length 111 /Filter /FlateDecode >> stream x31ӳP0P0V04W01Q0PH1*21PA#CLr.'~PKW4K)YwQ6T0tQz ?*1pՓ+ JS endstream endobj 776 0 obj << /Length 102 /Filter /FlateDecode >> stream x31ӳP0PP04W0T02VH1*26PA3Dr.'~BIQi*S!BA,B?ĸ\=E:( endstream endobj 777 0 obj << /Length 118 /Filter /FlateDecode >> stream x31ӳP0P04P0"sSsCB.#39T*9ɓK?\ȌK(ΥPRTʥ`ȥm``P !\`߀ Apzrr]7 endstream endobj 778 0 obj << /Length 172 /Filter /FlateDecode >> stream x31ӳP0P0bS3CB.rAɹ\N\ &\@Q.}O_T.}gC.}hCX.O&4Ŀ,`ꀐh2B0 0`@?D0pzrrV endstream endobj 779 0 obj << /Length 262 /Filter /FlateDecode >> stream xuN@ u%+ iCN*E"L 22`7 or}g!uIg ZTW)Zg\5QUc~%c̛kz{}|usA^}I6k Fe`<@!cf0?]p sېy&dH}8*v%Vf51СJZ FGY&I⣽0n5FzPEZI7s.^6x*H endstream endobj 780 0 obj << /Length 256 /Filter /FlateDecode >> stream xE1N0`G"%G$QRX*E"L @!'GQ|?1uXn{y7|ZjӟT?qP}e{yzp>s .(\tʋ됨Bh:3N[Vfab1qAKĺgPm33Gqb[@fĹKt,(WpQ'm@b4*~UbE'63PT[ziqt;#Y endstream endobj 781 0 obj << /Length 254 /Filter /FlateDecode >> stream xڍ1N0E"49BD.!ҲH@Q V9#Xqabf4ҷoy5w|pw Raͫ~yzH==US53UKnC#[J  K(R( 4]7^/_2 (`\ <Lx\XgA7A:HÝְZjIKj)! "chI(QUJ{շ1Ge/]tG߹< endstream endobj 782 0 obj << /Length 201 /Filter /FlateDecode >> stream xڕ1 @E'l&GȜMFQVbIx--qFj%.̃^ )LKb> stream x31ӳP0P0bSSsCB.1s<L=\ %E\N \. ц \. P߀ J2~~d|"N`%값 hL F'y,$33oAYՓ+ H06 endstream endobj 784 0 obj << /Length 198 /Filter /FlateDecode >> stream x}ϱ 0 [|TkI Nj}>JcҘ 4蠄|4;.ˇ)Jq)+di#  3 bnA5o3bDTYk[z^DyÒ1 <§QSHhUsjD0N/QG<T]KDbh@C63K[xGj endstream endobj 785 0 obj << /Length 230 /Filter /FlateDecode >> stream xڥбJ@/L i +PysQ%o镶={[r\/䶷\C#;"L E(JdG)23!_#2C[{GE{ʐ :Z2 fFb֘9e)QSFO?V2C鎾?9ru endstream endobj 786 0 obj << /Length 197 /Filter /FlateDecode >> stream x31ӳP0P0bS3CB.C I$r9yr+r{E=}JJS. @-\. 700& @Y4$)&?H L2A :0Y&q RbbH.C _@|A! HC, !݈I endstream endobj 787 0 obj << /Length 149 /Filter /FlateDecode >> stream x31ӳP0P0bSS3CB.C I$r9yr+r{E=}JJS. @-\. $BփI uD6`D2JOĥj2|$(47Ae\=WD endstream endobj 788 0 obj << /Length 141 /Filter /FlateDecode >> stream x31ӳP0P0bS3CB.rAɹ\N\ &\@Q.}O_T.}gC.}hCX.O$3``'Lȁ|DAjD  \\\, endstream endobj 789 0 obj << /Length 114 /Filter /FlateDecode >> stream x31ӳP0P0bSS3CB.1s<L=\ %E\N \. ц \. p,~BĄ'W NP endstream endobj 790 0 obj << /Length 105 /Filter /FlateDecode >> stream x31ӳP0P0bS3CB.c# I$r9yr+q{E=}JJS ]  b<] 0 %\\\6Qg? endstream endobj 791 0 obj << /Length 231 /Filter /FlateDecode >> stream x]ϱn0` n#' v D$:1NClf1t#4Cd?Ka@?>ό/x7e`+/l2 .|w9be;U:.Jp΂Zг j@AR&B n ~x)[yF^}lEƪ# `"P0~? endstream endobj 792 0 obj << /Length 126 /Filter /FlateDecode >> stream x31ӳP0P0bS3CB.rAɹ\N\ &\@Q.}O_T.}gC.}hCX.O``'!P:'`b\=jo endstream endobj 793 0 obj << /Length 201 /Filter /FlateDecode >> stream xڭ1 @4 \kP1),J--!9D,,T]S[̃3nQ*9zK5.sWj9!!qSdaV o,cP$nPPBz@Q(>Zll/5.K=&Mإ(o9)[-_m0v`fs8 endstream endobj 794 0 obj << /Length 199 /Filter /FlateDecode >> stream xe1 0-wӖZtP*AAAQPPRo7iqpT I( 8{~B&6}\9Ol[L,7@g@GEq;>:@8w^@8@X&as!eV^zH4 6Q25> stream xڭϱ 0H^{ӐZZ+AAA(}$]8N KM9&xg,\Od+ f.S0~ ,Ђ)qo19/"jB.P;UuDF 'aybhF4j-iMːO*"`a oƅt endstream endobj 796 0 obj << /Length 218 /Filter /FlateDecode >> stream xڝн 1 Y|;? N⤎磝"b/Y>Jڤu)&cjiɈZ=qYh>&xޡG*hɘR. eى/".Ҭt ҪwVhO/o2C xBbMn7ݥ| "Ԁ3ï>$$J endstream endobj 797 0 obj << /Length 250 /Filter /FlateDecode >> stream xu1N@E'rai=1IL,  DѶ. (ig?lncQiں'Tl=yE&lk\FZ,6KNZa| 9|t5iûH Jbz<rd'0 (9qp&8 %?cFi=H^Q #t)g/pxLkDυ3zA endstream endobj 798 0 obj << /Length 127 /Filter /FlateDecode >> stream x31ӳP0P0bSS3CB.1s<L=\ %E\N \. ц \. D?`OY$$ ;R?$XՓ+ VX endstream endobj 799 0 obj << /Length 174 /Filter /FlateDecode >> stream x1 @ ) fa n!he!Vjih-GL2 +7&.&RY S2sjOƠZKFe7?/4#ڂJ"nݯ;QO7ZB؈U$fMYD@ ϝf+;|WW endstream endobj 800 0 obj << /Length 201 /Filter /FlateDecode >> stream xڵͽ 0+ zO`ZE`A'qRGE6Go t(;T%w.z!h>22J;@j)bAjPjJ-SYmEc-wy 7R5-!l·<дM nܝޣtVWYw8C:rb endstream endobj 801 0 obj << /Length 220 /Filter /FlateDecode >> stream xu=N@ _b%79 H" * D[n&"ymafYy.\O:/wa\gVVOK{Ǵý~~|m]=(k}fϋ kEm&fhF hrá +'2ʉ3q4|PY؁0e齳s5\@e'XreSU4Q~MQd endstream endobj 802 0 obj << /Length 206 /Filter /FlateDecode >> stream xڥϽ 0+->Z+S*AAAѹ}>b$*.bBz:ԥVDJQܣmT;fiTTf3:; :Yc6\;lhkb⍹/N-Z6*p|ZX?4>usn tn N2\KKv endstream endobj 803 0 obj << /Length 205 /Filter /FlateDecode >> stream xڍn1 ]1%o )$n@S ZYG!i _ϲ=gzp;:٨T6{hh.DmyءQvF0`80cf̱b9)zA}T$"'S|_Q((M I +TPGey?4dѸYz1_ S endstream endobj 804 0 obj << /Length 220 /Filter /FlateDecode >> stream xڝ; @ )isJE"b=A aS~] endstream endobj 805 0 obj << /Length 216 /Filter /FlateDecode >> stream xu1N0E*ir ,-D $(VT@Iv(>–)VAaYO??V=ϝz`U6]oX?ݕvⷺ}qE XXͨ̎p[P0LhB M 4ESDiDf( DETHIc %)>/~Œ\r/_})oG endstream endobj 806 0 obj << /Length 164 /Filter /FlateDecode >> stream x31ӳP0P0bSsCB.c3 I$r9yr+q{E=}JJS ]  b<]300? C=`cf ?F%5Ƅ@.N%\=CSt endstream endobj 807 0 obj << /Length 275 /Filter /FlateDecode >> stream xڅ=N@ M_(E"T+*AD \%7!H9Ec{BHLid=RI'tT%=VjIM}h=<|ŕԱh UXiSQy :!1{.g t<A9Nt¿ɽ`n [Y'(3@ ~sPoi5E,b6y0ɬ1$V ٺ[Lz #h&;ij$^MR} ^x?m endstream endobj 808 0 obj << /Length 165 /Filter /FlateDecode >> stream xɱ @ : Y k 7:9utPt>ZpcҘ(@>?1t>C1I0IF*x܂ڡA ʮv@F G` t>'C/fH= b賚'b6l Q"Di endstream endobj 809 0 obj << /Length 137 /Filter /FlateDecode >> stream x31ӳP0P0bCSsCB.cc I$r9yr+s{E=}JJS ]  b<](B` D00 aDHpzrrȧYA endstream endobj 810 0 obj << /Length 168 /Filter /FlateDecode >> stream x1@!&p,`EVJ--4ͣ(-!5W? 9ER?֔$4hqF=`iP(QͤGet>]ń4֚ | f!N^ :^]寸3 lnO(N . k7 endstream endobj 811 0 obj << /Length 217 /Filter /FlateDecode >> stream xڭνn0pH' Q" vP+ċekdUGk?>48^iƏ%Ii?1B4,Ⱦr'd Wwc'/kL8TEk%t:u=|?Q ;DN d~U7 S[v0ؼ?bjv? k1N\*7V*=4#S endstream endobj 812 0 obj << /Length 123 /Filter /FlateDecode >> stream x31ӳP0P0b#S3CB.c3 I$r9yr+q{E=}JJS ]  b<]``? ×0? 'W g endstream endobj 813 0 obj << /Length 161 /Filter /FlateDecode >> stream x31ӳP0C CB.sD"9ɓK?\ĜK(ʥPRTʥ`ȥm`C}?  Yo`*?!*9=g!@d\= endstream endobj 814 0 obj << /Length 159 /Filter /FlateDecode >> stream x1 @бa1[ZYZZ(ZoG 2΢]> stream xڍ1@E #0eV$&ZY+h+{4(- 㲘ڼOϛ$ͦ񄇚1'O6MvV6&U~{I7 ֤rkT dR" "/x"o"x Aā, Ң~~5oU9qNȩ9IR 3,hK` endstream endobj 816 0 obj << /Length 221 /Filter /FlateDecode >> stream xڭбn0bt @Y"QPNt@hycs U.ɺϿm˧ > stream xڭϱJA?lq0= %*#xE@+ I-SD5_,9 ,9nsckc_ťc?f5ySǣZhZ}dl5.dj0r DW@`D$  F]67@Hmtt9OYw억g߹٫e&ڥOM&7ۊ` endstream endobj 818 0 obj << /Length 172 /Filter /FlateDecode >> stream xڵ1 A i832VºSZYZZ(ZXYz#llXZO7荆d/9C;GtVibs0W,lQ9O=l1!洖}N)!0Z2-ygg"(.0P5tŷAUɲ+Y0\%-nYW endstream endobj 819 0 obj << /Length 218 /Filter /FlateDecode >> stream xM1J`b`w.~7hXW0VbZ * vnUra!,ǔK-tgQ ->Gy劲p3%WtpK-Ϗ kxzX 33䎅rCF40@:b #LɂY.dČ 曶AȺ lB{,Zxώ`1K{+orSN~o' endstream endobj 820 0 obj << /Length 160 /Filter /FlateDecode >> stream x31ӳP0P0R5T01P05PH1*26 \.'O.pcs.}0BIQi*Sm` $?` #$`'0   Sd.WO@.] endstream endobj 821 0 obj << /Length 159 /Filter /FlateDecode >> stream x31ӳP0P0R5T01U0TH1*21 (@es<L=\ %E\N \. ц \. `,dF }H<00g?`G"?\=kqt endstream endobj 822 0 obj << /Length 174 /Filter /FlateDecode >> stream x31ӳP0P0bScKCB.1s<L=\ %E\N \. ц \. 7P& eJ``$? @cg@%4*PFF2?F2~~F2?N7 H{ r V endstream endobj 823 0 obj << /Length 195 /Filter /FlateDecode >> stream xuν @ > stream xmν 0C(vAAAѵͣ7Q|AwݤGr6&آt&=>'|z zzBQvi z0b zoU YUX)է-ؽFF'{DžyVJtlH!r&u]Ŋ;7RCSQ񋦠iwH>ʳh endstream endobj 825 0 obj << /Length 237 /Filter /FlateDecode >> stream xeαN02D%{pҊ.TD$: &73Ea+RősƂ)eTQS9mr|IJҌ.kk* C秗{˫3Q&l [f۲cvӨh+켍 R PPÛLm55wۃQ?ڋ_"|v։&Ԋ*Z IM ]4O`9kb{0D>7k endstream endobj 826 0 obj << /Length 171 /Filter /FlateDecode >> stream xڍ1 @ aM@ Fp A+ RK EۉG(2E:/u ͧB"IIR9|c#ʅgݺ+Kٕr%:/%!ԕIDeoKhѰj#0#0?Y` ` `]ГnS^yi endstream endobj 827 0 obj << /Length 218 /Filter /FlateDecode >> stream xڥ1n@E?@#\ ^ c)ʅ*q"QQ8%Ŋ2[$r~y.9R3.#OcE_/T_ܙt_?g~)O)'o6`Pv*;k . , UPC< èzDNe{Υ]ɷ~+| 2%E_Iqhҁ x endstream endobj 828 0 obj << /Length 143 /Filter /FlateDecode >> stream x31ӳP0PbSsCB.crAɹ\N\ \@Q.}O_T.}gC.}hCX.O@l``z 灸C??P szrrRZ endstream endobj 829 0 obj << /Length 232 /Filter /FlateDecode >> stream xmN0Kxe' 0Y*E"L vd(~wH`O,+¯.wZt7j='(IB??v7ϭo^x# `0#,yB=:F0A.O= {řs2t 9FtJ:ZTTwHsͪTU!,)b")3t#}wo endstream endobj 830 0 obj << /Length 239 /Filter /FlateDecode >> stream xMбN@ `G"yv~%-a H0u@LбCQn館?I}LeC-c%H00cRbL5hR"&\/d /N^J+Jx#jC(^ Nw6d`NV?1F3:=0+(-aO"{|ldy endstream endobj 831 0 obj << /Length 196 /Filter /FlateDecode >> stream xڕ=@%$p."AL0XF;pJ 87[syc Of|F&di\%8])Hلט6?/#)"*C Ė(\ -p- *XJ  pZZYjW ( 0G(Yb_/*:p^ endstream endobj 832 0 obj << /Length 217 /Filter /FlateDecode >> stream xڭα@4;/@NYYZZ(ښWG#Lq:q5_1xD1 P)> stream xm1N0E'ris v7,eHV ()@&9#L<| Q`ɯ9JrZ\\Q<^ W7(s W+:C-GnB"LdT@.ëGHF316 6P9n\ Pbf4RuYHq_#B}!\0gܜ!TFIAC$yDE}H#A _|o_ endstream endobj 834 0 obj << /Length 187 /Filter /FlateDecode >> stream xڕ1 @49s݄$@Vbz%GHbQgq80 qL) (#r(SjEAjgTzNe*]LG'o:+x*Pd܂H.'oR(@RB)`na \# endstream endobj 835 0 obj << /Length 232 /Filter /FlateDecode >> stream xu=N@"4>`m Z) HPQ *HIh{=KV)yl/[.᳊Rsut_iۑ%e-o﮸"NJ'v\8I@/#2DR9LKp)Lz OnPY]D 5ň>Lr>AʍpgWi9ԫo0ZTj~]wtO endstream endobj 836 0 obj << /Length 261 /Filter /FlateDecode >> stream xmбJ@ )yŻgp` ,J--m/Zy/0`0h#eg?|%3Yq-SYc/> stream xڍTk6Ltwtw7 =C-t !-t7 H眷[3u0?㒳Z78@ASޘ+ˏ̬F8c1`p0"x)@M(  yyBaE PB@p,f7 lx+Ն '&&' m&ryhtAm `t@ \yx<==.pn(^ F8tApd 2@ {5n,fW@j@3?ClA0Cw+X/'qٿ !66PW  ؁A/' :á@ h3:,>l~p熃1+Al.. {>E0 dp<_ DzCl~acT<!B"¢e󻁾+Oa_W+a ? z;?mal65 w7/a`/)z3`-o+102x C\B.~!^ @h;(@q韑=aw--sA݌WL?),]JHO/'t;{x`;A-@jKPg"Z;peVq. ~  iCߟ/e?pO nV a07%?XB_9ڂ "R07**cxx1; ?xA / F"Ա:RړkkTjy(w~V B.e`qC\v=9I2Awb8YXށ\M/-& ߝajrs(v.gWMop̖v:m$WAYpi .Z v//SDYc8c}MVc}J᝔L&D,og} ?FHfIV7dЦqI fys6< c.TK*g,̠^1%#ruut%Q쌺]Hg^=)Nh!-3k='W1#lYK\{Zv7]~Gài]%9i8eX8^ ^4S\[IZ 4 h\ D ]Fb#Co ݨg1S]-GhdoeC LL]-xuSہ3ugd[ za@1{"m.75dla*7]0xQ'mCz;ɟJj7o%W' *048,'0jױ/%&wZU8yD)N0&͋H3d~ G`؊tVVƕ7ڼ ӣ{rߋ^wHˈuq|swg*P3SaLʉJ3ԧd]`}[/ռ(a7|-vf){"耺coo5 ??q\oal|1E'd>[b\`Z[%œtsO_~~Sre&6vViD c3a m=v9!ѷT lbN=M<-7,O !efV:Q!xKMΔ^kp֓S|LTJ5sUs+ޮiTS^<-2"1?uf4֔NAV+<()NDqNix =OUfς_[^}N'Ÿ!a`%y21 Os_'*&jc^p}r}tMjZ&7Gf0@?͂F!ѣ)5-?9:>#_d f0xvt`D-Yq7_۝c UMPb8vlozpw!0H0^8V|a+ħ~/R SuT2xGP,*]D~:wgv {UFX7wP Jp63|:Snlp[pUpr$m|5آVi ?x37CY47p:hmlMqʪȳ+X=l0ؚ, \Tw ;XQ܏pZg@7=J OnMG! nufn3,)x=DFj~03`hGB5~il^[̳Ү0_5Wϭ"SDopv"K>C9dLNduI?6<" ihE?FIt|*G O˯W?]Q6ZŌkL_#[_YF5Q,X n`>7m|vea"v__M: lv^G5IKwH tƹ>XVDxaXY1 #B/R $K~m{TZPj qhqNjɆgrUK}~9`0gh,k9-@Rz*@o mڥًb] A[V F_2+srQCKc)K9p"}滔YP哫O֢AMƸ3EmeD_ ։XiQl"%ogޢKJrVXL oepjw;6ԝI#GW53&sid[*v3*L#ڗ95мo%3UC^kL]waivQ1ՙ:~$^$~lAo]^}Lk@E*eK|i6*$Vt<2qL&Yr G)a[e<[E;X3؀ND"49{cvy15\r虨:~DŽbV= VLg#sܷlQɓZK+.ؼ\qw4s__ pi( ObC0#5{⨒a;B=bZ5j;e" jõJ})7t "6$f9rh>USQ zz{=#7 tkҢ f[N܌NK+FHԉtϺ'BI.&eδ BeN}6.*eUBScv2;.@]ϙ\pۗhI}17P#DjH[Sk}# l:Ͻ%5?&rn$v)2rֺw #'WiDʃxqfK(G!(J+(n/ɹ,)sf[T0!r5{j5E !@":T]oibuqx }ŬEWI{敉Y4^YNsf'zWR%D $P74p孎NyJ[uAftqFTF-zl:8uxOe#5f&v "NMk?{:G7J-R CSB0UptTwE0"%7Uކ'X ]0^=8Y[p^~DGt6ali!A"FQjiVӯ'3lXy'w)%'4ĞJ~\V 7`b~arf .9+#8 wXZU]a7k2 X w{_j]'uC2If-yE-)u~R>8z9NP?Q/L0ic}`Vqn/X#{‚͌B;'Q֊HENGp'|KJȃ䋙?Vۺ(uFdT6ˋ{/l '9c!K.#9<$TUqJIª W] |!yJ njs\^Pmp2_lJ(Byj1-=7br,fdO$,HGd,zż%ize#f7&q8rG<,I%;H,ߜQYzVcv^ཞž6)r=M{I&kSv8BzFt h[vJ25"#r7MS9*Mϯ0_nZ ޑ N%9>8$q-w1%,b+1vKs;$%= dGQeKh.?(ٍ>}UX<0 ]TSv#+McFKd1&x(.46~z: ?@gܲ)rˌ ͈fT ^N75 bx2[Pc /16Wh*&z=fŘ:HbIފ1 {'DTB"M}-\cx ]g{M"ŠλQE.S?r4!f*[.0v2|׋V-bqV:iՄVN{gIa7~3EJ+WC#VPf8 3wydQ\B ";3?V%xzjsIdcGT,og\Nh/ZNe9ֽ8ݚisSC[c%]Jjb.(x<ʓȡDQȢVHp^i}w5Гgj UXW䦛Fr*/d*pTryBsH{ ?_s" [z\`ilC*rTj՟za#i"ٕ%sS_qaeɥu=E$[XUI-Dny{ EJ8`Sǁd;#|Lʁ2/c>FUhHvl"vͺ ]GHcV@+`ܜ%baӏozއ˖tg%7߇1`< %]ѻi7?pwCI2gᓛ̖RldS}|gDOSz=QYoo!1cL9ٳW`'1epDۨ9)B֐a@#[!5]ރKl%FR bW)u΍k{_qUZ+jܴbE?G'!fI=W!xM)=Yku̷2ݏS "U` u-58 ~ANB@P~*@e4*zFPˎAHV. 3wڍdٜhyfb~SҼ.7u>ʐO._"Fe"\I%aa>>sڼNW*kb5Oټu a^ԬnĂ;'C}{o݅_ \VZUGﮍGEnʩ٤^AlY{o*X)=Z,Gx?E}[}a6`vՐW{ٖ$MQIӸ1;PYGXiӥ}XA/Ґ d ZXCEIe&m !ܩ_x!V.g'@ gxߘujuXGZ 3鄜}e8A X)"O3]쒰YjC|kEaɰ"-wj\%XrV:,@^߄5 96@'ݫM 3oԯիIn5oUJ%Cy">eQ)%Іf "ϥu}UFt{}.[QBE7Τv%|SM5 XqW>QM=ib; <[S)|vuDl个Qt dUg_Du'A7-w72_W$)R(ߗW쯸QqTEd#]ѬÅ.bDHBQiPGˎv8r$bRW+ߑe{+=2-P#nxچ-TS҆~5cM d cW_AOTK!# DZ3M7Zh:Ywؐ( }FK):V"g (, @|&AC sڒh4VZ,pbvG 9A6y^wü(\]; ϻGs`a$_\W7A,f tHTzė-!}GO{9CFt9f zaꩈh ?x1Eżu'(9~&7a&o G&}]vV-\?cgp˷ǖ%bNR3ch\4x5ʰ/_W9{Jf> hv:yug(SD +wɜ:cso&X6olx`|ǢL)hJU־KR==KdR _w,sCڒŇ0)_DCi 6~Fa-nYgTWDY,H;>eǍ|3T11m{2<>f@Qr7ڰ@G3,'EUЬ*?ٕ AiYp- NzQrb[0a3Y4z樸-:t!)JU\au_9CW>^-l.TYN޼(f܈vZ8 ׄ>3gF';V8⎖ɷ.ſ7zDr!eݵ¨?Rs9ϖW)TJJD:/OH?'%dq-ɴ )dSkvkK W4Ѓ"v+T,3(1RiDzP8VE4Mۯ2V}H.`i^xeR5@VѴ|Vm/ V|/Sy.g$OkH Ok9)eJ"s;_xZb O$xhKo3+vʆ?=,R+xQE͟5/268!}ж?:Yf;D eryƬZYk멮WQlQ./aIkv\!oIh+9"pqgehScrm$CSf b,CJL_4x1Z3 ^jֹm[闷՞p(gPyjGlq_ZL4<~y@3Lce畲m#+-l<ռA>_LqZ!w=&8Ǜ'}\o NR,8҆d< UH_ɜo. f(<9,7TX`D=WK0uho $, (7Wqrd?<c67 ~QMmng3ƼR㕁^g> stream xڍTZ6L#H7(0t]5C0twtJK4J %Rzz_֬yg#.-"8\<Yuy# Qpc3T Y8@;Cu @!Q/߆0(@ sT`P;6,w@'ņv!6 (@pe9ta60?!XWQnn///.; n/ :`w0l Y2@]6#@ Cx` C\<`8.;@WY ews@.?~{ r\\AP`q4Ըjy ;_W n"ܹ!?kP[Y py?9lswu¼~ P[ezrC!n`e6w=`o |\HO?W+ p|ppߟO@ bX!P`wC-끸[u2@m!.*#@w ww7V qK1?wk!?_'q{AdSCm`?W@A>wc; wi %d7sܕ(v{`; '//aPo?dG?G)?F #\Ďߔ𝃻˯wWgϿ$y܍K? ~Wײݙ}|`iXc}xy/ՑW r=~a ?N&&r"o3vej+YhɶtC5CN=5k7'fB7av!<[Zk9|lJOuZ@+_欽?IR{'0ml?v6~U"$2b4I"c7z4U^gX݁fX} K_yIYa 1{ַS8X"PrڅNP)<bZ 9#YG2d\}aPjgU|ۀF?N ]YWjCmSsٽm%ygB43WÌl&25xUttbAcY}NkWZ|2^m(T2%b6 3裐k'ℵĢR^b>U `Ͷ]}6 dyk:l UT\ح^_xVZصkVݏ x˧`ߘyxpz)9[pFt1{Rϻ >xL`伤|nh`ϤsWM47߶KN(t* \>f Yyg96sT4%to_]u!9rW!j<;cR&RRk;ڎrQ"q x/fDJ(~駤{3]zbj7vMeؐws*lFJ螵2}K/_<0U[ݽ<ݷ`b5X$Ñ11ֻL%=(R۟dfC0G(P+#K<ܑ!ޤYiWn= 5Xv'}C ,5E$J!PEa'>$sUkd[¾EF)6V#NnUL/YUL[I,ra<Zoz)6Oӂ+Y{"Ds4~ Q5^'9̎E//Uя{ԍWלO ~{nͱ@ekH45*imiE34*IBǯcP@U8:U*Iv6UP #<|BI)Hb:Pw)Ih ˈ0\iQێ7utfO/^zNIaFLÍ9e6 35(@GܠфuO>"q꾁kV1 +Q"Sdu<i8 ǜpJ t() %I-V2v;f#쩋{{l%mXi8!bv%=9$}ې}ݵVgy)ZXBQ5U}OұW:t-N&R9huw^wAk=3ߋ~7>*2 mWg:ċxCVuS M;%Bg^me| jx''g.r=o7Ca+qd!s q9뎞j/gKy7#( .>M~~EUX-7q}3Ԟ;8G^Ubkժ4}k/rS Ls*qtD? qavtX /Y^#'MFt{$Co<'r P~Rdo/>J2'ramց"CJS!O)0ւϫ;eP,y‹CA/ٷmneYGVn֢A69z0LQ(6\W0h(A2 2[ڠqʨbh_Ou5tP]yJ;IM$D%툓kz挭l͢`,bMrI*vN&+c:MIFri Y_`so<-͑/UkyT+%E+t{.O`U\<וˋBV% - 7dB1 ͥg~(0T<8BG=^U{֥p)鶱':7ٲG7=Hk{_]TgGx>b=ƺc̻+QkMe>~Zxw{I8RMMie$)kǧ\!\czrH-ܘ~V=Qg+wVJmW01{*+cL Hᡑb賷&dx`U{i'?rϋw[FEt;Zq3BK>&D5Wn&%*^$S+^$s[p.0jh3 թJ=); 8>æd> zAf٫,->StdI-nxu(7{;pjSduZMZibYS Մ]KtSI"d}v0U fDOЌ<~^$C~LBGPaH88yP.ƶt㪪&JXo$$MX]Gh %Ld *o/źSAO#CRXݗCֵotnC0nu;BBA'%mcr \zr@ت:G apjôS}\3s2OwLI5'X}IfM d@!!&;}E8|AjC +j:>QD GK̜Ze}ۓ"]TZH0vo5դ"-x#f@pHEDNi}(_sPݕ2/ lm\};L9e(hʛ}8 (㷺CuZ ~ϥsqwܮ`ne-FH SH*# 3IxylCB%-mmoרKA)~ knejq.-zCqfޣHyK/g.spsXh.u]qfo40/N:YFV9*{Xf7:<(l)qEkw&,64r&L«1+sLLqO[zl3j[ E70;w&J;Js9`dN.o1ˈi7 B҄[Xzr:aτ.Z8QEO <b5^<+6 i;j6! o8] 4,riUC2JL/HWk9T(q=F87;S|5+${,+SCJ؛~ѝoGA}Fe8Qd;6 z}x ڦ^TvsM_&}u|:)/5Ē({ ۵ӣ 90 J{-8h@4uE(`\y r|:/|"^yה# 2fZ~^TOr;", N2bL)z+o$:Eqy݉S<ӀN311#/S h΢#S49Uso3H.ˆ"/UPKGYQquЙHF6{]6NDxZYmAV`m$wo.VfZ $tw_F#*dGnL}6'O;}^wzq/l/ s}f(jQMF{%M-DNI XhM ;̢+bVYdf`X qSE.ѫ蹰0[&Uw%|lY7Z[9ilNN.$_?*kv:,{"MYic BO c9‹EO 8ړ[1*#oDg;PE=e Τ@5W32oc%g(0*H`,&M(,Rח(˜:w2YSrr3^IISԧֿȈ\_hҏ#aN`RAK#?94 !vɭM@OwʘHH6a=GERO8ϗ)$\Ru/32${U P|0fYR+Ƹa,rxC{Զw?evgA!{D3g`KKaNr*U~ԛwQ񜄓W)?>lZ淂:^X` {FF] չ.i׾7ޣ+oVnJcR.fy>cug)S 'Fr)}ylZd=8 r2}NַM7=*rс̱, =m7c 1qI\"fg+.HP$,oiZ+'v,`ݐ r؂!KMqML. 9TQ#vگGћrvnڞyb1>-ڂ1h9ʈ?;eBZA; P6û* W磽.'Yƥz`ny+> 1)Dž c2 a[Nc:sBr8tӗ1m :oڙ)$#䶄vL][wc6rhWL87{pHm2>`p^ΛI|rV(]YTICGhYv)xj+aؠȱk2(Kzzw6qLP>~;}rNJ+1teeyˠ_MKp ?` ߑX'4{=G+ZSuP~āYsʙoAnV5aB,yoDY}OXy <)m 5z7js*=~8@M#: j~ FNaQaXʼ&(aڥY4|ڞtᾯśa2*hjfƗX,T51 RO>Mw;60KcACM.oX(Alg¤OxN=n.eEuBKjG(mm7x1t%vhwB2N6PC>[-MrzsP.,<ث#0= endstream endobj 849 0 obj << /Length1 1652 /Length2 9484 /Length3 0 /Length 10557 /Filter /FlateDecode >> stream xڍTk6tH#!5R3tww4 0 0tw+ t#)) HK͇'s5k3p(WoE4NPG,xX528UXCݝW?9x9AʡnP/&ae'm^8G3D}v|(_ d]]FJN|?_{]1amt}Q4^~#`{]#gԱ >hOD'l qk):IFoyf[YI|; I6á[j)vċ/qCHBw^ŵKŲLRNx^&)T-gǖqq9=Oi*ի#:țM?vaFn,a)ŌGq+OeOb.N7LkPeoTj[eٚ\贋cizheOYI8ÎB9 -П~1g3k_ϚcS:8kuQC$Y}S B,/3#t^zngg3k.GFt=0vu6@8Ac0#{6K|fNʘTW>K{(&vI Xvy;~L|)غYS5oan <0ƕ +֥Y6'/⪉|pdZS`K-x1p D=&џ*7/ZVOL 268B#O.3t5|??%qΏ~9+k1nG~o>STw7BåkW _`ڞYSؑ4ِClVt5U9ZږA]▾8gS輗'KRZuX̥DFkphd;$E.ze Ḻ؅7 cH1?2O1'm40 V>#o啹_IUL|?N]6| XU57"x>jO*.7PTEjBgE`^zY@-JWjy;70p. 3TfnnS/W1>MQl ! N(=Ia( TAFqrY˧Ʈ QTֳ2^-Z:$Wzü>7W{tdx78I(7Q\Q:I}Fm2jlXm(ĐՈHyXW$TT5i0up=WVdr:Kh;+ %T9}'?,Ը 廉Nc/3'UՔHl&SQ;.Gm=:gOoZvOp'h(Y|hLd@lk4e%^!/N.;EI6(Bio뿒s]MxpS鰣Ip9_vdP}:xOr@t}⭓$+u.P¢\+r-BlO~.|NCiS|89E&g+k4T6U_v@'hx#B^z7\_gg[wV9}۸n#XMߠ"!b'3c̯İHlQ~Wc߲{ˬ6$} jsF9<nO2뒱!~>A/UO]R1Mԟ1?rleBFfsKqn_8]W0kPh9P6? - HzZ6P"] I&"Mz ]c R̝rYc'e%3ג歾a)]wA5w ͡d MSynn"LvmӴ1Je|w<<`ghKRNR>rP;E63':gOZ(dJ?ռ[`tKOZXlv qɐ_2^S|9n^O^HҌcWuz"٠e+Ъbi@^IOö&2{×4@l-a,_(oq&;тjν[V5EQoHe03>QPLo*㝐XVVy!Vَ F/g2AB8;NH~X[/{,٭P,A˩ I73 /{L}r, yݥϸ Чڋ5Wn6) E_L`lہ۫A=r{2U.ǽL/3P];L>|z Yx$Z%OWUȌ=A-m5@;GL; I0ϛmRc-%WNh:.:)3ᓋ a qЉl '#MSCl{먂4ӎēp@ZE Ig0Idn6;OW=z"rO“au-.wmV7wtpt[2{7߄chTl[.Q-l͵D8ZQdgAst~Z\AA.ǯFu17 7Kܸ^Idv rz|TWF܇+v& 4Y +GCfz<.Y ӧ2hto=b[N%2F8܄;M)E;$H64KOA08\/-E#Rn[)|WP6*0F?4Jr`O") uA2YZS,c7T<1[ ;s>"v~rۗ)/ńN1~ 3d6'^ ٹ> Ţ 4,8Wea!Hrm6{Akb+\'TM$-Vm:ktp'DLT7 ;ë7ꅇkk}k^=JvrboJLL]ImJ!?)qK"Q3jұgo[PH)~ k9ϼ2W7+ˊI6viaz#/57Mhe/=}"\Ѧy>&Ḧ́Q9 8y&.wɼ/+*Ro_7|:uFB]شz-`I]g0j{mΕ3byC`F楙tzN زk„EIK%3rW:N ěI8W/#<':b*r*LlE& X sq@Y8O'WCw.hs)d=~X+1%\əKIg-Q8ܤhnjҰ&;*_TuC >]M wzΝ "I}+tFyǔ,^+I (}^X| vem{y!dƀVR-%.Cv* w"yoz6bM]nKi,71:nߒe5eyUL%i;O;/$I_)ܟ(RLzIȊgʮAžd4,]%uX,AR^_Ms}4dD.0 p]25'Fyn6b` +)!tfciF,X-(C p:IJ+M&cjD-(}8o|jSe|*+M#H̫-vKv}2-[zV(y κ>y\[=W 50#6%%¾mɢGJ2~y-2߅dPjNd Od!TXï셂~N׺p:!)ImoɎ_Bi0+S/SQRVCq -r.7PG3|/ܮ_ֆZ;\'EiֽpN8rihSn.ɧ*db%CQ[M&A͇5 D< rMвҾ=J(]$ ,~B |=K}MEj+acfcAB1R D7e k^AhXDPMbJFŋw#* $gRП#PAtv#tY]Ton.:B]T c3ōqё*ٸ<3&:‚EmQwKW1$VX6-'`qA;1},XIo_x}ҍ9d1C(+o;pZ֒iO{r@j0z;.c#|fֱ+ɲC|Qv;m~J|=ZE!,ӵvo0ySބVâ1X-$>i˫͌n܃w,";!u p[+nMҷOd +"jX•ܓC k%1ȃGiph])#j|p]geHH,$`l5ۡA:s+ DW‘CnS/mp*MvV*NT>\KӗZC֋&sl͒NXԫ;* |Դ aÁ m' 4ْۈU;˽0s^28WZA MyG,_M󣈭hG r:#OqPN_~x{1]^[^#|T3CZ?+v*߽'g;qtM깎}ne**nElb `LM,K[z:u!2Hl 3g0856QZN%'aR狒ʞg^w2!}p,2Vi#Soߘ`4#eΜ^PksS x.#YmxtFerT uKI(t~^33c^:w-iLX2֟^9ɺ0Fqprck<#W׶WF$sEXf?9mBӕw A乨Gf;ܤ3ElM2&vӺ֎ 6^.o+1%s{V:5 .:YNE"dh fq` ~T*  ~2 j !vO{zg^Uji <%(a Uƅk+38|.kވ tYBA*~&u;3+/F|sF{~`vl_ՇH,DQqjyۼu'_y+}C0/#P[z1KiQwU1qF/xB6a*rz}&N B^0I-9QIVKI'&(/9<$ L/?7"?CƯ I"2 w,$n(1;y a义#’Wۤ /{Ə˂&yvr}\\rQx7*}OYzO2*.U|-zM?^ $uԙmTAɒ}[jo<;i! L K Z_2~#'b:@fپN@g`+ΠXcl^Vp{[?jnޞJ4UqGW!*()nU79@c Zlʧ$L!le6Je0M6C6'Ԟ̽qki3Mk[¢y7t9~ @l شFAx5]L%# Pz܅PKB͍ledY2[ߖ >c,Aü=b &43'8JAg l4$HWU*[nTokeLa@fgwLe -OUS*ɧN0Y/oi= ޼ ZǒEzC+_Q6]`#6*5k;;w~dQ{:~)y?iTf0`La8URckrS9bE"x+:k")4%q7)_}`hB:ԢA*ί 0}+o!}5Qsrʜf4eA鱑15$=iWu ._K T5&i\NkÏ##J*<r !Y%qEԇY^b{E>0mmJ]Ud3ccTīO1\ #|_sP=2q/J UKة~mNFށ8hF5f(1yw'afpޤIKtl*h9F9z%轙 ʗcص"uiKF8^$}۶! ET$͊0FnhwM!L׼Dg qxi۪W uؤ z2OڰcFZ_%Vb] /q!ݬ5׋v\c^4?_}Yr|IQ#!̮Wfg1^?PY)U~;оIŠSP*8|E/ ڈIg%/9HfKBheʨMCXjG{/6khaQyEz 1QMp;+\DG!WF팗nX&NO#LdYB] Qzg4m7n9tlѯzHVt>]jŸ : &Y}]q-0|t 9҈Tv{>KYܧJɆ (K7%^5h? "OL2!P(ޯaD1e~Ч_OGإ)T95b{֨, kGNEoMepUKǘw?ՕuZa:xԧ5G'Q*Ohܒpy!wvGpZS nVпtKriD>Psuw~+L$f1*t0Y>‚݉v%{^]fzTy&p a#.41&+lD4dh,'K$ UV*DD&M4N\]ick\pzjL$.7xo`"n[GY8XJc<\5Ɖd Je2xr8yuy$w1Q2xD-NK׮wɀcx:8~$4O {M4}qhݳO8i ߜ*JΘ "SL1U`# ir<:V= Hpz7iEIBd)f*,T 5\ ]@$ B+FYBC/|O/\-,^g`sjXs :p@ gZ:ݠa걥΃v8Ws4%|G_FfvaA!7zcK'_ɛVp_"V9kFn6zX'JmD6Ӯ> ub}4eʊƤ="l?C3Mo!GVvawa$i,_R",+z)=i=vi(sM'g{{S.׼i=ujX!˰y$A3q_{<`8B2//Pg+'fEFYf`s1/Lbp RSH᥾dӭۄӵk߮lplg -\V\ xA9Sj:P xmL6~?F;!AVND{`R^IGRnvV s;%OF&nqp3^P.y.^heyiKڏF'z\+b* g]7Cab,Hy3 WzYTmt endstream endobj 851 0 obj << /Length1 1413 /Length2 6550 /Length3 0 /Length 7514 /Filter /FlateDecode >> stream xڍtTo7"0J@rthI JIw7# %H ( <9{vwu_ih,E@HZ("&PזIѮj2^3D/5 h>r%@iy@\LL_H<@ E:H̓W ;:qeuC@997 #` Wv#!p)hwyQQ$ `07 503/ Got@Q0N /wa?z;_`F+ p'E /G']8ߝ #7xe?B\x Ocv58?oA l; T=N ޿𱞣OXa4{y?p5Kٌ97s^S*#e{q& (LB;L6p+1&m$[Q1uz1/<饾#?if*==ꈐ7u⳾,rރ- )fwg!3h؇$`pfvvBeoWy[oXQw?\F U$ "6:k}Gȣq)bTSZ . CmS9I4!j>hObݢyBQ{{歑q piN-f򗪅7 7ET^W:< V(ͯ!hgvugy)# Xp;:A(f5JNUƼ\*&did\3N[<OH|eYܽ]"/Ca#2?JNea"hws#e, >:S;/.Eo۟.Sw:e!-jN.?`I ^;+B9љxgB8C~ jT7:X#Y'1{'!4.5>rfkW#Q}O )ưc>F,"_ ӈ)1^+Ku mN{V]CXfI *DCQHp6jAZ㆜:POKu.IOMzcͱA?Sw9gq(-٨KV4Ի6G!d azoBt9 Qm2(_C'[q~dtJl*C fl=vzSyáx^4b}J˫Bn,nU+E` =(˳.PԳJPgѐ~v,>EuxP7LPm{HU_w`Xͧ<ɞȋShaaЦ4Y>?KӏJMz= !#獬Ǘ ](zs$w` /ښ~媧w됝 ԛyc`CXh"&ɥBDB̜IYEYSl5۟rV%JUR\wG\^tf:Yի9N:$|3ΛO-2ɑraD|Ëz݃2ߨkٴXb1)$~S:X.gfly큾e:M4`QMy/ nb4L3w [l߰ɋ,wy)G%Z %^4I+u>GiޣɨТi, Kg~ ;j\N`7pR<8q1'I#ܙAVu#Kq}DA]K\ e+bo+8B [vgzʽx22>}~1hSJŝ Uzݑ*;ݡȾytYEv:oJ7J_tN{yt:UB[lPw F$QmM5_z/`ef/x]Avqә}Vsn̔x7K(G2ѽ'2^{^qRދ.B4dfL|S`)\-SFIwM41T=i:O;G }>#Tu298ܙN4g<< Kt6sS.nU$5TyHRz iKZ5{JV9o7GB68 K$jG1gu Sӟ1/8) K6{ l k ]QL6-/"͒2v{u(H;.9ydG@5چϰR,(oOQ4Ӿ&).,8~d*4;.>Q3?9rI3R഼wjocOf6}7`cv0&zϴra  *}eΑQĦ$.Fc 0_BXCӵp1 }%t =2j0F1S N =o P?۱SF=IASgU;Y͜9# <\g?zT&hJs͇Ar.nvU &aR!)Q7;09SSj$ T ]  Qhk22ԷI A $5-=aOwfGܰU]cwoX^*:(!873z6t9_LSvu=Թ >\6_"=wXFiVVѲmKh|i1uw>eiY ǖ3S. \nxrWftw#9ٯ ZIm"1L[@Z&>yrԋMЄ޳ Ӟ82:u!F);rV<6=rAٝZ˾ ,@[NNR>~M]'YU(Mj9.}"SbzX+.I?2*Z5{fTr9ߘvOe/y!<|`Ȕ'8Mo!Pi~l{Ca/X'gG25X- qܫdry{qf쩃qXbE ~q Kic5EҰ3k{ˤA`?Ya7m=|?|.^ ZMЀ+4&OSyq.kBf1Q+O U͞!"fϗlFN/c {5V @>)"_Yv ;;z[u,O8Fy]`Ꮥ.^ 듪3OXlO3HzWӌ iyOnd$'4(*ČD( [ J1Wu]vӧ5t>P?nVT,8]ܜqX#2 dCfѠtWl7%ݹUnѲ^]_ ~7^#a3lϷܙ I  J@ɡ-}5 Vv)X V ؐe1w(ct ^nUۄһeG~J]K27m̨n2v`]ft4s_'#:8Sl@-iGvO >gSQ(>2v xCGgNHgKA6ު彇Ƕܗ V|2.nA@:S>hOEm. 5bV9 ~C{VW￘>Rd閍,S$((yҿhq)= f>zeJMi0D9jUIx ]3tmQ:#-?YM_X7%^xYǫ(TN_QQI40&llO(?U~_x'oCt5YL@9GI"K_乫nx9ňZY-t+ M#D'įbߴ}١|@I _8>;vh|JL@unke PX'ز5Lq=ɟHdg> stream xڍT[6N(H4 0CtHwC3C -]J* *!}{}kygs}4%,aY @ 7ȅNOe wE@\\maP8H@N SA n7'\@a.Bi%@B\`N^.6m0Y0@l[ 0 @v;4a׿R0NB`GW(3nЀB\!_ T?qll]0+x l- Pׇ7%9@S^ qVl +-w0zBVC-9\a`ww`:_Z:]9\m~+)@-`(W}Ҷ.csP/`e Մ6 "/7g x3ia+~ zhkkyCqCp7? F 0XB@Cw2~% TTP2`m0O;@@i;Vj<.S_ `k:N{-ʍ@YC$+M[o3o vuAn P=]u!VbiVy8a$jfpy𶮲K5[͚-sX/,Cޅ^Jyo_qӤ~g>ɃT_!U4Ku {-SbƜuǸh4 E+DՏCK]Q A[tap\ri|ۜox>rR45ҢeE$#nZd HH˙ Yh?>4It:9”EҦoXB3.€C72׋aĸx/J+ F݅V5JrvjZ_P{GPּz.0WJ?0 ;rR8)Ff""G(|f쯆bpz K[xM%,(>ډqx*@]Jdڝݛ=e s fK 0\Fjddi޻ܦӗ |A]kc2L4ͯ!+-ufgXWo 9:;9.O;#99a*QϦeí)_:)_uI]XW]fmdeleicc6rܼ頍3|C"ܨT|l# 6ڷ5X;>V~Lھ!|%^|[eȇ +Je<*=_Ěs5DY>n3B vGpT^KK= }-V9ՙ{R!VC2ǷQQ4_~p`PVjiO #LD #\yeNaRAYDֹnRul^EV*qXײp#w0ʐ!nb՛fL59BJ8OXtә=r0ɰz5 *%>WnUcI~nӨo3 &@ b̍4%M:QɧXc<0/SHRaYJ[]~Hw]!̢摧-_;my;j1 l|Qo0;"R2lv-B:7A)ƓW+{yEs7B Fft|I4YI ̰"e~ȋ QiO5j"y#I#ϝ#Gwǁ1rGeѠolynӑ5|](}wsH桊=Yק x7𫵑U k|+n4w| oO-ڭ/7cgqSUXk_qśt]Cx!ʐ"OtH{ӷN %jˑ8T`/~c\'LebXZrW,$|7,wGuqS g[?M.zcJuEy]"Tݱ_Х4 #*$ߞGp3pUxk {4q<9QIwMKǘqž#)0o6]dr;}z'|`1V`}E~ p^2[X)}.E:H%@ eLzb6EY}5؎#6:\<+%WGVY*陼'1(Ϩ5 *EA면 :zyL\saO!e[՟fxEޟ |vRKEH!WdȖIcJ{u\VHV"Nߠ1Qv_^$u9wLoaEUA}J@@#7z{\WNv7ڶ#N)|)tK3WS9+IMI~Oxxoa}v Y]̰N*E *)ă贻Q+P/g+#w^l?-*!Z-9sc0X~e_Oα6XLNa]jAfi(D I|wILHǯ =ƹp?uhzք{(:'*" d }=M+(~pWh)H$86>s١Ǟ ,"m)gh )Fna0鱎 L@#d6]ê^S4Sx,&TWܟw!V5cHda5`n;Ңr~4JLg1t@S! vOnޤѧl xQTiݟh¥Gm Ӟ#L&=gsD[iabx8"ԙF^S|b=S.j|Q?fD+j@mũm/j]u42Hx yّ5dGn˾t/w723V=7 |rsʵoЀO@#cL2{݂\4y29Ȉ:vNxXP 4 >UF:HW&Okx,S 'Ҏ{vE)*=~v;h22{_n~¼K}w?h{g˸\)O7%1vhs"'8,:Uϙ/iY/YwŠbErU+لk?yMX^|Ҏ!@)8qj=43/[=l.0|p z47uuXLwVGAk'+A K.M̫u#bH॥ʠ8w.<;.fVK^Li=d3\v8ӫm97CX-) )/SHSQNivcZ) }|Ii{0t@pj,=2n]&{pZ,&5$^`O:w&$n,!h:٘Tw\6=`cx%,=J-PAW}}_r=M+lsi*& ,vi @}dY5tzm^UVWM[Foa/yUr\t86rENa2F}U׬ %Zېom鮷bR6+Dt'މR hR)G _'<+&k2\/2Kwn&(RE]/(̄3P Ekm1VEhlWPa}KhY]T^-9(MlbVKZ=@.#Is)IG1o_y 7婝eW0s:<#)V r۾237`ΨdX|&'vP+f )Ӛ } Hw!wk#Su;QbD<.Vneq z/oWʠEսȻΉA;BSa19rױ6G&9?T&Y¿-VuF# `k̾}lبnD5tX$Z"rT]).ܠ&C,ybTu]X) #> =QQWOʙTO{->oݒ;w~]=Y\P^k=vd3Yܑ)/RbVi9 m8B{}@`!>2k@sqcugq~;oPU=qxf`ߗdZ6$FQ3nN=J ȮrPn"У3BtgX3^՛ۺGR#8 HeGIdC8([.\/}_vJ 2%,:}16G)fb=u^Ut1">^"(+#8!!3Au: Y~&c}z/:=WzN`oZ M6|#sܕ=qaW+Oӄ-ŞIbge`pZ^SnWk5<6BYywR:F]RFߤ^\7<':r}&':zU{y$omdjM7 /"d}yi^֛&֍w8djsPĐt0eՂ\+1qE$g$HBE;cFD0qkNP W8r\'bN+^\?Dzx*` c^EvZK`NJmCQ\Bs>JTx+JO&+|ݤ>^(3R ,6dԷœ\3KaFY .dMCN3yN+[۱$kV%8>N`/Rf|[Dm mM ﷴ#IBp v$m(MH8#Ӌc+ Ia5(I\xFek $ \,@+: :iW *X0[&REO[@Ƃ-_r*vÃ~4&J9j ~PZS9@ QyD>jl39&I3,͝[395秋[ס/ݤ"4T ڛGP*@,+ֻQy|JH3g"oPRȎˎ׸,'37lze?L:2 $'4IkXĒX{'B/"n7>zodZjgѕ~FX8+WTͧ¸=oT,S_6KlDs 6_T%4G%twTm &Gt9q{AՈwt]1DLpusn Ζ<0zm+t2$~\  @R `4b~ÏŗMRBXB ㎉Rİ05_X5'uvJI YqQӄJo?*͑ƇI96K'f4&T X]BPX^FJRo )"åz8Ȃj6Ža꣜7l\/3[w+[e"EM3>"6&N9ΤKYRjө%sPnզ1SPy*U/F)2}S-VU[@yv_%0}ozuii53~ԌY8[7UxM Twଫ.DHVoekTq oHGsͨ]z*}G.0%("||o-BLsݶ^ŪOs?ĥ~I8)Oz%ZZP9F1ELEgit(]O1 R4; ׍C/+lШ&헼RKD}]?EN,Hԅy 1/C6h3QIf>RpFT$ ПVD+t/1M"osH\Mh7:jepGҏV fge9\<@vx[#^d0 S_')g>R%q@{ᆬއ{ptGEG.tfAFxd z:3U]qpymu:8p-':=:. OW׼׺ uu8$N䱧e ov 7 3ƍ1 ?}CpiMՠ1TTȧc&i)*7 ǁSoD+D|^G)8]YOJҸW,|nB1"km^Z;Cxl2lNu?i#gܦϑ7Ц KP/ )5- 5ߛa<:ۢYԩwG8B۳u5Osks?>̹y[i(e9l[^5Yaڼi5cn3VU#T r>i"~qz6J ImfJo&K>Sg8K4hIx4RЧz" 6OdlMYUG%, v 8тOR"{ĻzUfҟAm]T-Ep|ف֟4'#-V9-sZ{&FU%6w+H$l(bO@5c :_ZJ4&ptyD endstream endobj 855 0 obj << /Length1 1740 /Length2 12064 /Length3 0 /Length 13186 /Filter /FlateDecode >> stream xڍPBp,ܝ|a;-;-}-ev=$URe15I؂Yyb*,ff6&ffVDJJ5K'k4"/1O qX8yYx-{#8Gϧ9Q`TNx<9B OQH9Ł. #%x(,_E 6֜2uJyQ""C.!kS9TuwڻԋcKT9<@K)g .1DL6HDw ,U'td;q&]\VczSQ/>ǑU^Rb>z.;اrԳ!z=0\WrX)|1lD^9&~껼Cѥ9^ۦ~0uC'#1gթ?9#c#m;*%R0NTͤRhDDjI>x`I7p/t $4( bri}wtz=ڭiKʍ7gkH ǵ+-wp滔{k[ѹxtRp_EFafwJn~RYX^GpO|˒skc^q,^>mJMޱ$p( rɴ>_9~כ\a)3: oqK:6P|@`^NkY2xhuY!ף"O"jdح k^;CGޯgpQ-ehu@lR5Ä_4 w攵(`죍8I畵"2-j^c8$7:w+>m;(0ʡ" a/4$8- ];wT6" &XT /O˿FQ#7]8ATY }p+ akZVUԟY<=_=xaZN%^1 >v~*_h'bƒEL0Wۇ4NuD&I~i((њtIx+0Q*4#VJS\EEoK=|TIK+/@1f; B9&ªRTI0qA.`nLtBmbK2Rwm2LHsa_lͼ֓R $'fH4՟n{"f)FI"^GH #B.|cd]Q?#R,-SYs>Wv/MGnTZ!E$űg(_vwe+IΈf&>ϫf:NP ۝h,y.{i @D/؂=a{<3St(O]: Q&a3NYnK >nTa:N~va U2hD}='VSksX__!a wWR:9u fQ~Ϭ؜ǂ衰T G lkq 􎴃H!H6s_NEC7ёKp*Px'tc[Fy[<3?_Uqyd{d(v\u޹ECK$ZQ,aReAAq S}+ƵE;Twlg<7E"Nt JA>%N_ GClp݊S#]0'F{rFA8VC޽nh{g0p)PǨdf0'jNeDF`>)$@#ԙ 0)Abf>}/tqXsC f˭kAd?Z=&/͏Gvbk%&S1WK'=е0yeb^(}4'u~焽ȶ:-Y6?.nK/2E 񮹰Lc ?Yq3UYnQ$#=bɏLGdt2˪\K0gV(DTS"2%{a?Z10w)8]Uմѿ/}{ek_(bWTCRn~T%oCXd_ =xi^#c02-{j-|k|&hT̬׷f-4b8}j"Hfs`ɦ[eobղP%nog⡈R:TzPg8_{'ӕH.ITGxO)dbဂCي҈4>U6 nev}Nm=!AӲ(\JASBjfjCHTxA g_ NUsbCsֿݬIcE2B;Z}UIF`3RB8քU-6R Σk札uJ~E{0G խ32J=+Z+?4HRM}=4IJʍA:ifo:=2,36%߃;ifP#yJC1ahOiX3VM+XapHi(MqP\de^v:^޹=r~fų6?D΢UX{btkLdVj/MNpѼ`ڭX&RE^±;&_Fd\dI .j5bbRjuW;x Lo(7NZVDU9xB;k #3Ⱥzj[Ww4{ai(_]aKh¿oP u(q'b*-F` Fd@rz [_<ɲӍ2ͯj*EKR` e+oVJ~妽-=( MÑJ~~O; "#[xQuOǰ7K%Sl/ujVe5;|᷊yϚL}e¤DqeW(VF[0{}ƺ5âm4:J5 y~djgs8-0i-}ЯC+WG1ϸ4ыK ZK#$%ɧw@hW)M;#P}O?FaQI̯ٮ`Typ%I}}$pcW8[Q8c][7~iJLO* &0P2VNI- Ԛŀ=1YZDT;ygX%To #iW֣kMq"|w2lu[:!C>HR;@ZjU`ukYj3)Ri|睴AD&nRj#_:&}6o8^RUZS xݫp?tNƃ 4<`㏗3ugɗJ,E p\JB<&?Sf @oZS4Sw8#_oWOO6M:V5/89uc4Wr< yőd^;dS>7⓾#Ozyc}yp'sk{ۓHFilu#<Ȑ&"U ѾkI7JXjH.:Y̫v21QdQV@2[ԚrUgG?*C2>|(cp 'E;r[%h4y}S @L=)όw1QpEtpt)E5$m} Ilf7C& 9n):17e}6@ɂԄBOr/(+\]elߠ}0jP smCKՋ 떆uhooSM>U 6!j25}ʖ $R7i ZJְ⟍N@W lSP͉& Gl) Yl4L:{7b0Eݤ *91MpIÍt09/&nfͯuߤ˳>:*<\^3ٗik8e$e( QA.5WPMcqvY_u q_dѳ JeLc:B}=ambY,9ו܈z.߉\ڜd,]np=I62aAk`Z̝׋ܔXYƍPLj^W|ACbL!6b2W}M!AxK*8gR-2M@ܸA441B~;7 Y)L YD2?Q #mZ=ˍ(a~#T/(J 48[=\ 3u"Dj B}7) M(FL~ƠQckzf4L,PV0TVwcNfm*64rn-fեO"> P~wXC=Tj<"|7h`AG? xTkU(Dk@7BɥXM1y dL[ +Cߓ*+T(0]x4Ѣ+.()Pt^-ӵW m IJ)>Z(zĀxHT,8,&os3+1[\1kh٫|5q^QnuQx C6Yyl. r2ԑ@lߕ ~L ?fgae;GWaz|?U/hD3;V繼܋4 k_VȀVp1$H|{m❐,O"8. '^<e啩+.E'ڰ]5e ҂E󞣊 |'Gi|?QR&!KPj+,h:DDuOѫ >_$&ƭIF^aiIRU )^Yh-}^ؕvN#bǓ~eGSTF>As:-%=m }]r a} ]*R6QdYa8c}{upx3 w6mq „P 6(.87#B/NO4M8"鈨3=$۹HSm9U\a\C1ӿhsIBQEr=!, ӳEM=Z M}9Ǝa*(~V>Dˊ@d@m9_R#^i{u+7yswQ@OGt`e/!Rjڑaaܡv_ǁBThqJƣ"f R_6i!J{Rl/z*`Ŋk $4bEno}=SLkS f!uK&3.m@&~@h=½x1Ae|&يӋ΀qj!zL]L9dPhX%[Q}8Okek(sZ'Q 3ГB0QWjen(gi$Eqd!Ԋ.d[-gTNȠ?A*uyE9g8 ~OxΛ]ru4 Q5dߠޢnIuok3iOڊMk4IHlNsx>:dXsx?Ǘfc@S&s2A^ q]UT lq wW`[D-@1s_V^eKNj"zsO@MwV/K K,Q]FPGvja"䒋~+ 抬t=ȶοeTBX:aTKĪ6h."i"#Ӹ6[;e8Ѻ*(NEdYtN~Ko$'! Y-(aGf9Aş~-<_z/}?G &Hq-ZDBX $ qӗ6wts:Q#˫y15*&m*b-URaFޓf_隲=b7p\`@~cEN٥oRϑƶ[w-P$rvԖkӣ6ge 1ҜÕII{N+bt'(8~e­`d;y9e)w )pG`}$",AG1wZ3ۜ(i"L6SHempB\;d,0K50/ba`!y(;;':gwih{ $¹gcRdN֎,mncCwu^ԶDUTxuK|%Q\oٰXPDxXZjc5,N>[LSۆ-[}ցǗ<cnfk%r1bەcgCXv*/x#<^+-η1 vfDP,$Uy쑵68` S'3g7f,nNǦ򯟔y9,^l$J>&O33i>H}N!_YѱW86jA>G٫*6PCyHO{sXPH)X z zmf놝qqMcl[ۯ HM:@a/y[KɹCgĊNi [.!gi$4HmA^YVuz(˾Iĕ(|Lk-L]sYLja=8 DK֞s W>-o7NM,(h6e w͒m2#~DG&8i=)P;;rb8ݫW2݈^I"w :q|fW0;.'?%Q JMN%8.8ÚR<+?(4F5iAYHV2,!vuYs**"p,xh( HkAԏt,\偑4Ľ(Z=6q ֑[wQ sZӏsbL%q!:[Mh q>+ڑEw@>h;3_Oɹl_-׸sA{^[R:,G(ysR]fXH8[ v sQboGoѸ*Yㆡ]V"5N{m!#>K~vNco<,ÿ2urHhIA104$h|6[!IRK.Y3A!0dy2k_{=1nMO?kyǥ Bv{D [Kbӫ=ॡpnė'tٸ:]JCVbWI%1RcQ9X 3LrWjf=ǶcAS[q |sx,]̋ endstream endobj 857 0 obj << /Length1 1357 /Length2 5945 /Length3 0 /Length 6875 /Filter /FlateDecode >> stream xڍWTlS@$T1:6QBc66CB@B 4P@N}w9=Ͽ{LHD"B`a,@T @@9#ZP^p$BP0'SqfH@ %eR @!% P]$ETCz`Qpg4.˿^(,##%Cv2B!n3$CcW{ #QΊ|_8` |`_ !ߍ S.p?b3p789x#a(.7LG`C1c k40 Bp8`#M}a4- Bܼ8q.T1@p՝@{ {~u(+ nG5; U:⦎VWG8:jCeQ-s HJZ0P_ͱJ/1@ ,P{A|`4QG8 p9GljaNͣ <0[Ho1UWUH _H`1(_UA8!2M_}޿g,C$0I/]7t?vsZ; Wo4HijCW#?:h*g h["3Fz=(!0:G *4L"KTBA X ܊q7 ?GCG7"$pB(~S\ {~ )Bh{0 A)f&Pmǵ*7|ƀVgPOIjQU^_{4˟gɦ#/)6UE~S\y%32ԕC-Mm\HwV ]쇨eI=ʳQxq`C Z= kyCl[ bK'~^\L}W]K׽>x!c'T߲1j]n,/3!N\bv{){ xޜ"FTQ Mr}ŁŕA EjRi۾b#ȴ-|Z8w6rS"gɱ/$u=٬J]*R쏦YX\ژ}ВJTEO^Nkn'UH~Y?]-V+H?<5+*ɐEɖ I+j"y X~%]y6Amo^^gHxF`^UH!5}R@AUxvV#kR%+HDᆩ(L۾ZHې_X^=Qy5\gBSV{x:zQU+^4Fa VV1a%?OiMv\u3@`%J;x\ZNu^W? KJTwBZ\Π]=s B)E;K3VR&,7S*EW׭<_!\ȥ'{12{{Nq~U;{/ˈ هI1u}.T. ]5͔H9vz/[h"/I:]H";mvX=L^hf\ .\p:V+zmLR1N9Ujp;[),x,w5!stjh\󺘹|mktI:5J;o^"-cJ5yZmߨn>$IOxLRz\G"nr$4B0$o5 !,*h2U\;"p:v17H`duu%K`Pv "sޛ] 6|g @"tQ:糙X  CgL` *n1L)& Iv%[w"֮`vrxL=1#J}fFG3oK4ǠkZyw}|mؘHhcwNE=Ԗq9aA}e#l-}DH1t{fE1SZN6_f9} dzD.HGKͰseQˢ"6f|.˨Kҕ*cWwؗV:y {) jZ\ʎ3]uMA}*`0X=xْ3k۫=ݲ+A_{:29^8l\3fffrzAW]&6*$ V>g]p_tO/*uu0V~jeʷVן!+%e NλpfSI#;TTp6p#uRaގ NbUjx @O?eHiƶܤWM<)(ِJ!|rї#U\}Bfuy#i!X}yv7ъntHtu:_Z__'_ȖfoF%o`I'sS}wJ0&[ 6m--5^?XLJiar@^ R-4,2f;Ӿ;@ʩ8,}Uڒux\n T:>Oms< m.wlrlH)biK k U{^t{jec%QAu+ f0Dտ,&K 0XR滏L߱l,8ڜbpVgWrS8T m I35UX6?*'QPByΔ;[E:W1(Tԗr]^@/ݰ6qV'tk'LYY>+ۓ$ ԕK]vccg J9 Ɋeh&W'4To㍩a}Eeq7P: 3,9Z-RUr&x348uxTk\+ife#^6Y0FVr%" ;aýqם"15KR*o#m1T(d Rtv~ȉPu1WC)͊7LLdFh.b:mwuj$".㒉ğvM(GeŔggcIޡ6o^9|H)M GCS+Ff*dUvV@Ny셼2GKEѮwl '_|"2')*W6XNWÚd1nzn CXK~)vWܸTlOH9{ g'/ۏ)ƅXӍp iNh wWxž{Ծ$bv[3zۤSݟTxE?,z&?hepD촎2ҋu%'}L> T'T98c7SQ`+ħn0vy}7'4!,} S4%=IũS} _j@{p㐋fvkpCِȠ8o[/ Ր=N0Y9;q=MJ$|.{١>5^}l G7c.ۓ}A Cjb6a9}Ssi* KToOŎJp*Vː{kG>(1[cgws7#ԷK/\XbXއZ oj֎ r6(TTT!+s\rzv<pZiRrг|P<:ewm [/`#(=/Ŗo=4cx۞z :dLdNqNqp85zSM!R-Ya\6Ƚ)KM7fA8p(3zgKk޹d̷g5">& rlZ @SZn۲=Mo/Vzcps s{wdL,g.֤G6x~-ܹ&zXav|ՒQ+{C9HD*a{VDMA#CO"-%&X6oLWWPGJf3*Tk@JpN5ϲt;_T,'J5T>|ޛԞn矇 ~#S~ۀv-ѼnۛwD6a:oU So¶D4Ts&}B+<%و1x@Pl@gF!tⶳEk5Q_4+)>#9SLyGXf$q¯ګ,h06#u5JXCf4Dtf[\G&Nsw`7;Mʫ33S!V #7P[u</-LҞuU\Aji_!6td_p:aܞmxV59/yi cLVUMx]ndk1&7A {3aOy`@`7EB\Qܓ9|5jړU)X"W4Ͱ/C9 endstream endobj 859 0 obj << /Length1 1484 /Length2 7089 /Length3 0 /Length 8090 /Filter /FlateDecode >> stream xڍwTj.]%H CHt4 30 " Hw )-ҍ(|?߽kݻfw?;޽ְ0jZ,AJ0(/ ౰wàK/Y iT]! ("mK, ^* rc9yv-V(ow#4,v GV Bx+#;Iݝх} p#  d U.@0^<A[A$[.HW5@ SQh9pzpy v9:Y@=P[ h)"< /C ofXX" ~'nPX :+8 W#+Ba (W~ `8 |CmPk_%X:@ή ,?-@߯N02_o'YlByX++-k` CA6dd`1?x@N&HnYà7OUMNIYwQ<<"a~_ <;,UE }X0$cA_ oEQr@~k#WW0@)ϸjUAX g@j #] km0U a._ /rK*rh}" fkEp'HI D57|P@ ~d[%9"7"$Cd~r[@! ?(/OCA#C#o_uY‘y,o <@Vx0+Wկϫdiy6&X6񞅷^b'qT\&"~"3pvhcNӕϵYFޗQʞo5t<2>7> m,ήbڹd]5ݥ!:"jKy ^MXfLQ1a!xp8I=&ON'HFT| b.\کRQѡzm'ޟ..XLQ 8Bٽ64u;?MYYF$ةU"$81&` e~U]P)`­ӂVuَռiqLA]M5B9J2xWR_JkR)2!Op%=^ߩ;Was\iʛOnCwJԴҢW!;Ttr^ʰgC.pT-]w3݅R#'[0hF7IY(cEu&'ZZ/V6ǁXN_du-)q@$|*ןci(kt/l3 ?czI% (6D(Zo] ()03 ~.W@xCP)sAANGTC*fb0z@;Vñ:]xJo.)X_܄iMXUR~5- T#XM0m  mzġQq #Xrp+96Whb7LEd3$T5AW#vah5h=t2F}1׉ gwm#c ZaCS"HZi..5Paoeі%+t9J +yņwA֚װZLfH<¥;K|pɈS:%FнyS8.pz M[v=ԈU@$^d`޾Rr볓X0.OnV޳yLcoQ#l"3~3xlw86ƴX;|x*Q[J>V2h$n&z׼Z;k8"|Φ J1V/jXuYLT槮-sBsM(@<*WXrzb~7e #gb>q.nKAqh3Bo^S+y C% 24~&L $9ߕ:M^#T:J6ydF_|Mͫ:hDޮG T^y coNAT8#(Ҋ'R$GstLUZ&X/Zeߞcwi %h$<[#\MPGyKe&h"{`=*is>~AZڭ2X m[ucɻm"=D )*F>WP ijWr,|eA=vj44R6.rn'{ 2*sCx$=gԋ1,9&!ɥ&k*8T Mj޺ڞJqǰ:a6i 2,3B[ڭuv7@s3Ve, Wu?ts("\ =2FJ+%`t<~&X%atKYh'g"<4nrc疘=G.UR0v1ۋn+~v3JMe7=P;u=m"wEڛcj G>Pv=mKGt,./3={;*tjJN]{e |_lGՅ6Op}.GBND⬎ ǧmvG&TT{pԮ&eOl{gPDs+$kRX6LM=O]ǁ݇bٙ^_EE l΍@ |ȁNXG:(c3"ɖU5C9Ir] g g.|4ΘXp)$kog#ZJ6teks(IK8; wZ1LT5AWI+_U#(Jl !:I X Bw9'R¼Z3|j+Wt/R9t/2 $ZJfZ 6O@9MsKoMV!2k鉪^!welsutc~?7]MA0+ƾF]*+A։Yl|!a#/Ɖ}v>&tdKx⪵} }'SxSkY?ש;hݡ+m;:uPeD'Q&؊UG0nÌf! Pk]d/'wj6H/idU}6IgpBw^*\[j6MB@r*9pSл1vkZIʾϲw+Gм.wʃEGvE'M\> y 2E;^}-m81}κgc)r۲ԑ$˔:/71=9ZOq[ȪpgoaT]"|&2hJDi*>I\ȅfiߨY̞s 9IBh:UAy@cy2aQPz&'ͯ s,%*+V0]+(mGl=takƾ6)QAv2M 1NFK[>S<VNx3{qe$2Ux,[#%?~bOCӶ<ܸr24Xz|sVy`{<s}3PC&$"̧[ hsaQit57,mTLTSvXG 0b񪙲7(9)tQ}mĘmu'ߚOH)냇fo)W^d3+|hLյJg'0Gܜѕ2<X`_ .pݧ:Qk1/p97@;MwtPDDg6!/d6F] I,bmEۑKFaiz[Uv{\3۩"S\hֻ&}!8?8*Fm1XuhL`>?|)c2&t(NOt\c߃/o`N &M돷aj >쭹Vwyz@P?+Ykr9"okKM$CQN&VFrhև?/ c!-YAQ>n!T흙/N3 paۼ7a]c4Ѭ2ziQ'?BF")Sj/[2B#P[Q[[8Onѽ53;JSIJG9ӊTH3p-WP{4έgic0#g땉i>|qɔCp&r]4p_*V$B4X6`e= , 5뤳=4X$kl`;|6z:p=ӸA@#b:yrqƤD-݇< O3uKJ?\mhR\j$[7,wG zzakk\ V'Fc>6.Mڕl01ȅ#o㸬ZFl-~v.TG#ϱ.m(QoMos$YQ!_+|7C m ^/ V&>Ҡ}cԮ-S=d+pԒ'Nzyo>jV3mUpMgaOa(E, cm[Yq3N<,l2_Eltށ_V;7{Iڏ;; ǑLzۧjn*R:}gqf,ՓGXIx7Xor(&m5-R_|.x҇*{G$ ]9Q-BNSnDZ+*;G6M,\KBIW;m(81)Gz.1\,-=}+W3۝p,ժUD넟Ϩ7Ϟ쥼 4EtfA(j|:m+&$7Tɦ>dpiBN_STwPI0l;IZrIoFg8/ ؂tw1DrhLgX:LG, G%1o)B7<$)yKv/ī^[2旌M3Fp;z^p>qn20Xɹf ʾ=Bw;wTgm`lRg7"ثK!ċ;).=2;ϫ.x9ܸܞ5~sDWyMu6(5E꜉iC4IW}H>XȽ3V~j0DQX +F12դ"~KTQDJtVz\*B0;\Yȳ`yͱLZD azqH ɣa54>gG!;*6ө]Dz˶ōCq)R[Rҗ[B~vw%!ySU7b_|Dw:wȒHPe~py,19Jm3"iVSд f\ bnbI<_z78q{2LL^axI&[RȊaqKɱ(Jth8 śr%dZC1ѳznzEMtDaiͪD@$/̅2AY%֘=*&m0 (HxaLM }<iK4 a5}rLEIt78=_spHmU=?1/|ń 9UD'uOk'VjӃ%Y U i矁8hL=:7gIHlsP~frS'ŠG/?rL5bN.}}%MQfqv~Mq%7v"Y1{RplهyHcx)B W*Iyuwmwxn&iVA/ɳkIu7sW}~[-"ʔb3 dzh38N>Q{]mb^$?Bi߉jEද.652 Zb-(}n)Ȱ>+cA 8AZZg h~Kp؈Tݟ+ l". |̈́a_>C18h%ޖ:IlqM$4є¾MM?(v,MsV@+0\qӶҗw^b}xO^;ٺ[,Ru!б{&r,ϗ-.OELd~LUzfbJJYTa&) [i%FŎ&ɳH2r]Ϡ 5޿=^̤;T,y7P02>,^?̠)6OxxGՕLDl$pʯ{%mBLZ%x(:ߋ^FϗgXO/@vw=ZE긯*WNg*ylm.i O\b<5\-4 p!L Gk>1|U=Q!_H+4g>fyGuȲQs?[iXr$})&e.(+Ʈ\(E:$C .K>vͱ%lJ9K س<ܞ vqA]5zhjͅ!f?jm-O㾅8i71̌X,Q9Y61`ڻWveV|LyTz,`<犩ԆIc^pK>bߢRM7ic ͜7fDp Wq٤Tc Idw6ݍڮQ?UwQ)GyїFlM+s{ycR օ93[d֖^?G- endstream endobj 861 0 obj << /Length1 1567 /Length2 7452 /Length3 0 /Length 8506 /Filter /FlateDecode >> stream xڍT6+N݋nE EbBq)֢ŭXE/k}ZɻyffϞgvƤgȧۃU0$@I\H ((/((fABl&`/”(6x Ĥĥ‚Re;/xlJp7_G' $)) `m;h0_!8:!nRv~,/t`/0d+Oil#'/!m(!P.00躁a"@_?x vnv0_ZH$/E"(;/;Eu;>U@@(+ U` %+Dڟ2 D0WW O7cH~%0u6Q520a =WH]9e?3 \ҁ p#ǂ@ԛWwGPo;_@)m8j`K55`H;4(Qz//PAz$/7(փ# nPCtA"4w^5l¢b;;_|TQ+Qj*A`bH Uc _@aaCEuo\X "{=Q=CM#AA+xB7?$TD7T8u Ee:_ȿNၢ/^`0qw ︬Q^^N4EϿwRvWUyP15@}p9mNRzMM/[G0N8!H4&l)O-)0!/}8!:l0L>=fjb .^o'Gڦz9 sx)AME倝Vi GϨCw! !n[:n2b"kUXQ&Aʄgdvs0~4'&uʂ]Kg-1WjnGtj /0BU%D>}0{=xieN݊e`$y%60;h˝ʭqυ{S|B$ZEmK8Eh|#Zu+gN= W#(J6{E~r9iMzfb\՛\҉jV@Z;GWtͨ.2T?*ɥ*ϖ`&uǴwq<5j=qrlE*MKXoFH\]b2 #o&] h70eֿP,Љ |(:SHQia}|0ۮ,tKncMp"KcSm=Z/hgw{H{!vV"}{`kA҅4Q=MFyh~ L/3)udnU9OMI-4ți6}L,n@oks\C*, [E ލnZ&who񁑋ݴ \GV[hIL9]4N-bTdkotzҔ˕q3h?^On={k'_#Hf}Kq3Q;y^4,*$}5" 3{wchf_ub`}K^e} l$ 7{h0̻mU/R>x1+*nM14W-' +QVZS[v"]hF!>qz /಄b.4o.ՅqK q ?B*zM dd~'EξFYq!&_P:* S'$.iBӾa$Ї|ҖԟqNϽ\2vcbVY>ܹx_9{^fAF6TYPS$I?8x8i޹ $VeyVOR*e4 ކ6s9=uXXX"_[s[59Q(\LԋZ-'~\ރڍZg.Ml/y Yw{s0H7 K{+]Q>Z9HH3b4sPE.-LЏ\5 {ts®]6_Gu f4="H _WX3,),a,*CܪU+Jj2=tg@0qBiL0j=3M,)%-z8^dvdgizvH< Ɏ5;!f=M8-NF?p'uf&~_&z{xm ),>B<|E۽%ȫlt&S1;z!72?cPgzDuzYJ7Ryykx8W* g$W7>_# P-j,HG䬴`3y h_\ݎEkjWC~(LSlw+2>a=T)hLtf%z}چXTHq ̭= Nb7KSqb" '^9Wy;g؟'vqGae^_:kN|.XцL淎Mm.4ѥ: J _ց {[`/@S~qY!SW]yWfL\߆ǡD?MԷ._HwM2GǓ.gxP#iqQаҾ$j2,<}H0^mO?qG#^<pyE~ ϝrT QUp'{!nL6]%9uWdaqj >[Tѹ|i#w7e^z54R+r _D>V_!LP^m* &MWI.}HIJaD9sauqaz[Muthɿ&iW2M?9yq܍_2Ekf4J) zK:.) , ݰ]r8? \5vbYBG'(vs^}়u7 6B#ƺ ʕ RsL8V吝\pU۲}/%)agdG,:l*VTz<;TY>DN}pդzZ'sK|H^Eb%RNN3K7ƭNK]+zqgíFm*) Iw)q8͍ G ciW,gUvQ]m6pB/ &- D%mR/ߋ|gkUό/5#"x*:ͻri-mV [2Ns XiYͯ R _ 4x XOeQdU-}xlB#v;L{hb$y悞S,a`%##JiM3驱7!P*Bs8:nW>a|z\L#P`w|$."dke4H̒|B\w)Sj{^OI2J WdLƋ.1#O[ѐc2*mFPa[K2q6YMLG6RW:{-^ 5a'V6t_vsb!oN+c7,_/]$8Tt|d*Aٓy^aZzW͙ғzGaɪb5<4gg*dvC!|V˙Fot?> FT5WV7Ff+K1ʋUQp\5#eM|P$ZDjlmeNg*dI2D~ոU>ƨ I4QD⫎ ,&3:Y"_ z#H|v 8ViE(HžMbrT,93ۀffwkǞ9)D'}s%4^@ n9!(vY$OCuSJmh; rVr,R+.bzRTP։1bVVw@_LCLиn^磄1O$B)KBK-} aQ=YJ[Ǻ;$}>DE#<7܍t;)SODqs[ŘzҊ e)"߻ԇy1Y5v~bؾg`}l'I/W]Ε[x;83]ӈ@紎iSlԍwݾSa#pr,}dIS^c9SE(G|!vF6!q ;,b1MTﱶ*Űq aSIYfe_ө2g[syDqosIӃ9!Kj~zCUMҵȅ;cN%w[-&?Es]r23 K tbXtƋz;hT4륮zwd` HwG*n2?.jYݐP>Nh=c_3.8<(d?\ 6Qv}zk6ϿY7FwJĠ..c~?djǭm{n6|94O6Cw#;n.=`7/E2HË}l!\[nKoʙ 7zgE/yk%4j[K2lGќB4~8^h$KO5ˏ ߼YT]OhSɹ<|)1^jLܭo2Ll*u?Za~iaa+M+i+A/*{]jsuyJ)mdr*  b|oA[:As>Վ1,} VI9' -:erM_W4sa;`Tx{I{wXcg,|߉6]7Yedjz*7Jcgɼ*b5gxz5;.?8_cH%Pc `LJ__;?zYy<5 !x:2TZjvw(M_^Y}0_{7jF}^?=ZP1{M߽'A4des&3QL ntvi2HI^"/2x:mbZ5c=8W/ۿ$ҼФP=ܗtqBV<_-,p#sNOF`f<GΆou1Wm% WdeZ i"ѰtR>v$!.h;1ʉn+DJD _Q%K /T"9Tu{L&9Fxl N_q<:di:.w16I?WY[?֓һ1z7SwktO,z[Ii~8_W\UBP'qDﴜ5cĜ6hԿ i\B,g;UIV v#r",TZsT:7>&cmP ӔwәJr+v,7Ҵ-Kb~bXlqxNpz;;˩5b71c}*Ye &{Y*U DQN=fr<:Kg*Nh\8S2U"/&?(o_:8'WK؁H縦x@^{fbK\pB_ K"Gc?X^oRj3zuN.(A IR.΢I nE"X;T9mgQc&=m@UH}P*zi :@29biɇ/C6\o׉꟥$um, A endstream endobj 863 0 obj << /Length1 1414 /Length2 6532 /Length3 0 /Length 7500 /Filter /FlateDecode >> stream xڍuTk.Ҏ" *C 0330Aw#4(HI4(!Jt9k֚y羮w8X MH UM,BB !!) pPh8!TQ0018?}$u %d%e"BB;"Q2@5 uE12?!<@aiiI@ew #`3Wv !p_)1AAooo Bxp3`Pுw?@Sg8ntxQ0 pC`4.P@\qǁAIWDp`0t#|'# 4a|0@0F^`s0PC xh Ap_# JeuTC`Ѐ_Q0}lFup#b=pO,L[/saBb@'q( M:ↀa?bPXX6B GɎaθ>@k!B>y D{jfjVwL / * K%%NcՆ?G$POkc8xuc- mą /o1W! o3oa|r @]-`D±mƀqBPF8, ,p8! nE /+ Ͽ# H/K( n8ABa> !\7c Z+. KK 1+ 7*- "~5 W, K+>V> 'ML˃_Zb,b1H4Y#^VH$&4-9zУJNJ(iŸY $\*SW9!;rǑO1y5uT=iTU>%'SGdztK _+}24h=9O[/؎>эfB@qIM0] 75~Ffg˃6 ^.@]'w ~gOL np!U XHԵǻ(m+9c^K%˸O"foB:j|ڕ[Usb|T|X-4 gB%4x[ 3BIgKj %̛ߖZ B`,11l?ԚJIfcXoc&PʑL]wagAKk-|!M y'~Hk0^CֵRHU2BGbKvkuw=J=UԀT\S3\)%t>t (\#4J6 YtQݩ$jH޼0 3cjHGla@Z3w45v#Sʪc1Ԁ7]>!<'X\M|Qt+-yxaGv\C82c o*?iZJ`p*շ]DRacT)X+A6EΛ]g/&9_:tOai!0鞑)/>' 4+M%4lP_MDbR!o52LnKt<%"Pڝmw/ 1B@o=:hUG$tBTa(sUė/m7a7{ K9nH^|~6Yyx&Tt45Zc){TLeyhOU4m.ͲTb!dF8Ġ\sm4S {;݈Nvb䅱pk;DJ_;ZD;REG^OrdxZX@ >ZD2Dܗ<N]xs:NEyeA;q*Da,I]̄vk㥞Vޤ GL-p lyiF !,G+Ј⦋MӧOG=aɑV*i;y;؅.}}Z2]blz: [3tϹFEyMZ3G.cJ^$T2)Vx6m݋<onԕ}볭==k[4Qn헍鲰'360R.,E".2,e{ا(~ aZ D2%wʐz()|o()K<86O( >m aNk F K<"7'TeOSuX_yf\̒/ԍ·=sڛ>tydW灰/C׋ʙ|CfloûUjԥOa]Q?Ns<׆sR C/lwZHX+9;LN\GB!\rg̋{1_x D'\=~7/IHZHx(0N u4g2E*m}%eՋM~H$7"Sc׋yi i{Rv0n)u&1*dGʑrU1=_+r~SٌLyɮ}:SP$XRAr@@괒cSơ{nSW V1l ֫ _J>bNOs%Y-}^c֏|BhrD(dN.ɑ{5= `30\Lvl$ I0Pt>q!W]o2ky37.tXO-kY0ÓSž|Hnʒ3њTUv2H_3>+EעPQa֧bGԷ^*N|z]&tqO2F63d1EWȢtbյ{sN `VJ* e*taÚ$8_]lh7g}*t/r/xy)"-s)޶ʫ^MKKeoԋ@ҸY$ CShÔ 㣞yR'=2]HBo꧘eƧa.1;+idG.lRݼS_S[ r 8 X/bSP 6з(mn2CJQG%֜͢R N PCM%P:䩐i)1zec <ə#'g"Ɨ33!vcn!ΑƢ".mbvfe&o$ d*CDuTm|Uf "%LKd2X< UX/YϺI(jo}RٌQb/Tt!&6YR0GП1Qs\h69nxӶěOGVq*Җ{n9'_,F~xo{%sUɃ^w^$FGo٧۵* *-o->>cߘf3BIŘeBF [;*'4 նX5k"_ /\?t u -gId%Z||E8ƃz|~쓝>s+e{Q⥃I!-^G_߃$؈.#3,ܽc!MlZMg^ a{~ UDTZOR/CVN0]ߏXܦrG{?AHAShg0?k3\MUC=u6;~TUCRc8zϟL\(wg6(WvGu4n[]YRNt -SIB;{sHMǠ66Ol T{VeI͐y0{zWueL{?oL6{SL |2(w>v(od%]d?`YL \3mKQOO=} [UV0 oU;21X;0*~kI.9# +:ʼn|wr[[{mkCyoȬ@w4|[0f{m݌O>n\ T}۷Ͻ t`äYøzweICZu]I{_i~4H^%HqRd l`\:V1LʟYȗ/`~.ɟ<`sZ͙l>AXjcۃM!wU+f^3H]6I Oa/*+ tUQp:ޜU}m:b KҨDe <+mCokiub5˴']S궚v/Ily\1^'qPnګ+&˼~_SYԁK,W`w^+)ECX#ÿfhޝ VoԎ7,:IІm#*N<䷒u@a2ګF\1J2f& ?}z \y5Sg+]XHn<%v 7@iZ-SV j1" w:l_o16lHC㛎d}SoudlЫ* Eb[foD/ozOBd$ s*tz{ iL}HVfnݐ`φDhj (3cvHdm"wx1~cդT<>>rśYwƅDT2qY7-w7T3Tw(FK> stream xڍS 8Tޱ]EOQ-O2AR*Yk̬1&Q;]RNH؅JEI]ӖP.]8g h9Y]O1l ōidpqQ St' OvX"E0+pfJ gfjA[eA:j I,8c(,%bb p |8DB(pp,"^BBqWL a`%q"ɐHJ$ֆF@$e`-$'K#N8<0>.$0 B R"Cy'WN ` liMt qH  |DulW2)P|(B?OlzN'J1.%KF2 f{gD0KI %L7hاAy|e<"2nCH_l0T܌`r 1<)D abL Dp8‡?R .a_;H4!\J0;1  6S U|B(B)[re)o3b˄qo~H{| ' !2ѷ^'"v?P\L0\{kBgH"$*:10O<8t\BF1 |LBR)4$b;'G>0 sIM1eL`~LK,qG D/a@QVCSOY7;9Vq5hi JۍvZ=F*w\ɏ+ܕi0o(/Ź.ީ-/!k$%i14TbJY饹6y2eҾ55o_ݹOgxvhҖݭ)vH>Tů4,g5Pi/Xgn5 7D7Պ:3ya AM5o|I_Ԑ'{wζbAOliEiGs 2_fj4rgz9Gf[Wk3}/J9h~?Uk|4R[ٜNTش@__vdݼcp"=Oy\ظ+t38cZs2.-ӱ('5u]팴^Hb+M:wUz.& [G6Z̸9!k&lĕԭR?:I=tm/#Xa RG"2dtOW'=nU$ǃ/:^-2YeINVyé<-GDUn+˝qcxitz8gdYBR%GMܸ}ŗʧns7xfkP*3SLP~PoT$\1 w7Wu}}flYSW-*Nyi/ }xzGxVQ³:3 yFœ9.^o2js> stream xڭvuT6"%Cwݝ 0 0CIH%%!4Jׇ{|{oggfzm=n"ygkw- s8rn` `qbbb89`35bO ?#';(sqCz`0aB9-mM%@ N: 07? i %p 'p9CosB3@;G-/!7ccLGm .cUmyDj!a1q#c@ 5]ޏ\ i!P2n '0g:ߺ8y= _ 8ɖ_౦ ⱶgQT0?? wyΰ?`P'olë C<To"EЊNN@x|au7:CM4>Aj(?" ҆ l@@A`7'1%oq Wkjj,G. 迌?0/7sA 'DAfMm?~,Fj= z\r ۸=*?%68 0`DEVYw'?jKQ~~n@MrXmeOݘ}̞݆*`'֎Da#{W.2Ks WE)F}WLE 7Gut_bЎa]0z1$D!T\ uwmPsfFc3K)Vnkm<+3Btb\U2v2mPKZ$K ?-M*0F[mKZ6U7a^'KY:/tSl>"e9ZCWÅla+n8B̙);4vJ>9G0 ܄@pW'u5>u4:Hg|hR+ZL#70-<(ם^VHp\WȞ)\W_^dC 8tc(US_ƌx/(wQ&j7ŧpN(OP-M+&8K}2M=wx"n{1lZS h7Ht_cm$f{gx ̬͙B] 1ŷ`kaĪ H s.n!oo~;U"0M^v 6,*RfI7 Q -d]\1 cxK]ldnsLI6ߑϩMsM,4LFS9Y'ON {6TD.T.1}_.m2>[AL#c,4PkzUV<ڝ"#N pB2'lU3=q'HBgky?+EZ-Z5 b 3F b6A%Y(|E"s齀wD{֢}B6 <͕?_~2qyT˚ꪐRQqvbۧ5iKy-O\+; ?0jM +d! %Zm1dM[(R.2"xp0Ъ&1{AcG r]S e ](<;\xUpo(]`p:v+AR3E KmmIQ%㷛"kn.Xo^+S"ek/~.M @?6ּf Ydғ_A~Or{1֞N+Ϥ/]|0`bMm( qJwKp9/֋yBЎus"w3l{yһe-_"}Ae2 hNR6Nz_BV9Yr8ٝ6J+ϊξJ0Qea//ۨdma#YR4[[ xtwm#%lz.tkga8ڙiMJ]{u[c[]F3k_aXQ6_}/%Sԝ 6ڄ/3j(-o|?k1i4)='g+<7j] zXRƓ‴ ,5ũsܴTTCcE%(\ bqKw q] XiEB'~n2q(eq[q7|V )Ŏ%nԒVi\ƻ|uv{]h;^7Fɢk0dxep%\V'>{(߇.yh(U{=,YZΎڏ_ f,b\c$[7p%cNNY{q2U# 3T\6%Ѣ1Ld-3Yxcj?߳yց?eF1@t? .U[$(B_[d;%wu4kTK &I7)I9~mf%ˁ*PzV=[lhmv};@6s B}9qٺRįbzNS\ۇ9|dQt^ ΣsN\?W_b-du'Ņ^U'G\xOt28XH"c d|x"h1zMvyqTxP2ZohXOIx2MMBpl5rGfe2툖<[CIۮ9]wTVc_|>jc*dz6߄5Xդ\m~Ryx)%$C4F;<:+*@yƈi½g!kHt#f_ة.:Y&onhbn^3YG 2 "ttB S;[G'Ճj$Pt*DJY{Jd7(u3ђ{PTB kFςE٤ՈeλH DX/u(F.rfv'REgӿQyw6M[K{!T= 7W׃{+XMSI+h0LdhQ E;&M.R;YNP߳!cJJAO&) TRGj:4_JWκwF~{8 A)5)_clWW˭A Dk^M8]L!dj}RءW7w4[}ށJ =9=#[dOi56j{YKǟ~Kiהx 5oNc4-ˆ8^mܞɥ7/@tlXaDkCOF#9318JCݪ^0N(Q )}=g1x]4PyE WSܯ%A𷓊yY m`*Z ls;q Vp"é! z"g4.hJD`EO'!E''.UHQkܯ)rP]|`- {d#OiX/ 7[;4F Yi'9 ߼ u8'|Ѝce"7rH'[78迒TF9KxRFzc+[gT ` M0M=ۚPіy&C[C9:Ƙf%JJbLY$g'9vLF)4 Fi=Neξճgv N.E(iU"?'/eB1++:>lzz2)V֞YX>u[r8KTTHCʨ}4 CEpE`DF6rklss`!: +δۢ7e$dx3E3cCl4, lFMJ̿ ^:/Z.>Ԥ~P>yv0†e=.mG5V CWԁA+/<6 ] kP?@>KXˏcO:D+!;kQp_1#p% Go~؇ԳxF=+f\mˡ! ލ-'k4ȟrGt~4IQF-n|Tsi6:X9}ď~óIo̬W4 KAp'znmLǞaNQ'D/p?zoGe2tX0b:WYVws6ZZ)6en9~lg1~[✬W,ݲݧhMnXAt}WZ\xܶ(=ǿNOg}xS:չO!8Ct(Qq}N?غcU+VGQKx\u\IڌӰ8{ }Tn۟="ZO{i|m+:v&гz Id/x_ A2Nmn Hjc(5^gT%?&xbj 9q#Ż`yA׈ 4K.` b.yPU0|IRPdg}SP|nA>BF[z=ugx{X-Yq[~Ecd]?q|8ɸ?EP+]P߰d"Eqm2J)Jx?ׇW$v14z]xW@oݝyaHіs2M]YK(Ex"]oZh{C5LWЄHS.1=|g`YRz;FXw征o|\ ;-R+ÉϗٱdEo﬏Aw܉$\6cr]Pe͓o?yxޜw^5BQȌjiyIDh= \\ V85g :HOY=c b^mB`ڠ3)0"d ԷǕQdekٚGTǁNW@ ؁iz/C=0wuL#oNߙF].9bo#O|8ZBX-]=zb;C ܧX}iˑ|ck}u(2Ts(Ey膶?E.W*H+x& qwŒB3%ŇW+ Y>Nc-*,sE֧qE"`yסaIp yS)ja=8ֽyvi2,a賆["ST?_ĮY]u<lЩ F7V"m厝ȮMfn Sz}Cܺn{Kj φ[FidgA6xWBԶ'nkDkL^I/FuY;ʙM@f4 ڹ Sժ\UU;&mx[v/:W3]5U¸6GiOljɛC8W;~l/ny#rx" {9!*jAs:E0OP^GRvžM!2I㢎!JHv?S]tz!L 3GKy,-FՆsʑM/D V{̸\I4n\*<ەNf|c8|Aׇ#Qݮ&%0cx eVyء*yŨSjKv,6'u6TV2qw=rzW>/z^\9")bVO8?lx*#k2ROQ0ǒѷljMrњúŠnW+?.#񉗝> e@ |[7ңt~q2UrN"[ I Dΰ:nA?pk K>kKhzEI|<=ybnS=7ۆ9U4?M /e(4^W>Ҩ\^Vwb^Iw֚@H*@x]mF)WQP)5qq5`vY}.:$9}@q0>~ z@> stream xuveT\[-)% 8R@)5wNp ]qN~d=Ʀav*8ٹ9D 'K7 *6 [E;,gy, .7?뚋& ! +%lx8@7gM`Zg:@@v&=mfVV#K29 `x]x]*!E[ic!o r]'p9_ [:;%@kS>97`=\8 W[ xx@Wʎ󯔺>.I` u ,<w0%` rXm_0{5 w` B>Wp8*+jhgq~d:UQ?5-@"~ q׉xO Յ J + &yj Thp 'r? G筻#Jl1@@kM?\ltvعӵY9nn#<踿b//yz{k@7 meJ4ܾ!N̋}*>xG]~ub 2Biyrvje8q"pᔢIO9E0.QH3 d}. %d'qu>8Q<j QVנj.2 >k(9j ͏vqهFf+4<2*7t/,`PDso$3yReSxp9{ke8%bx*_It ,{` (24M̆oE~!-*CRײ͍I\0~gclL{J- )ou|%bMxļd|) kSD6ͪA%_5Ϊ%LEMժ2Tj>m:]B! wh;cr:rJ1GpkVI q?\َ%JG ;:Q_tmqQaJ>p2HF DKgĭ5W-WPgO~hwta[ Kޡ4!SU 8J25a"OGd'ۊc,pba% |&/n*~@+=Fމ=1NsrMݒ5*)lNşGV+|lu"~ˑ% ZBȜDG3V)(~VTaWJ,"myssW1r1 5Ow_vNLu֣6MӚ%|z{R!@vUw;S 7a@m͓c٤0L淼9-CM\M ٘Ek#4Etь S70yD6.//h'By;hv EVj$zМP5|ȃY~#Y:(O='Vr/Pk(9JNfa#O_֭VѓǤV"u"p~F\IOb `[2"+s㈿WiE^#hB}-~wwk7eq(%*N|XL #VZD}y4ݓ>>T,&Z3Ӻ_m 3fЅ[#[͡-K\A ^9zq}ɡzW/D ۪yobmx3$J41m>( '[wmf-Nw!w$[Q3܁3=au lno},ohl#1巴 nuA%0jqpOa9YpoO %^"H5It-ϭ~ي1X/^1#uT\)BclO\/Y$o"]O "ΚR wU"z|~l&0(K/n ]*է Lj),X +a7T;X,wi5D:&g E++T_0s4t1,qk <׽ie4El5oUk|0kڒQ{K!WOrO_Iq)NY䇞A3v/ټEkcMa Iʟ"|"\X`Q*퇛8OF`zwN _auBO|p5P`ެ&dl.|ñdì;" v#(ܤZ7ޔ\~jao= *}q(V=G,^*%-82x-2kH=1A ^ćرcAHO# YLW򚢘w]d\0oN;1iR^GcKfycî~ )}$߬PB?k}+<+.G}wN}Ö%]~|E€'IÊhҖ%\=ڵN[KL|'M̫2 %:w~Ǿ芵qưxut'XsSUSImZȌ-KE.꩘8,cV% NOxE}%yX0۵ RQL u' >MU洒D1yֻNƠȝlU?T' !bxj~p$Q$:*4'3g3۽NƶlyKjM jl3V̳*i;^<[fXjRQQY nJdbĂnث}> ~!*j-so IuH/i"p:$ѢjfaRf0ɹ`*T>.'*LHF1i"(̴>W1NLXcM1&GAZ(SMP5o$uIH:*ފ=OD+~C4z@tU a%nw~rPF4ª bAq L7Z͉8HJv =#+"\*C֪ $,M6ELeo[@Hەeb\hu2KtTE R]/-X xVFDdJ6n0p` N]LxPLUq /J6Z-Ic5-^eگZکo#ވӞRؗU'^MҫV>\Y,؎(a|[\T2SkX #zFmQȕI_^L&Rh޲iLD~>@; Y30Eu{LD+{~L 26ZxvOJF,w] +UmBʖVB?F6G]$'m?={mU!tujH9y@nf^qA|SBR #$Sh$K8mҖGY|Gq?KZkpB}7uFrIl| ]ťme)~T>#`y=ˊ(tnu3 1~i `@9N./u ? B-DV<;O&Y'nNK?9n”EָD3YN9/z~%kj"{]ܶR2cnr^N&JP6?WǩI1Dq=jੴ5AN;eF=GZD+ wjVobvp[4)=xse$>$1#=&ۓ{$]fbvHcYC1lM6h`CIzȾ`2Dƥ`{ .o}֗U?E䌌@&j-2.Jdd KƃKt 4ac0V45ZQ4rFn\Pz BG[8;t' X,~ PJyeUMe'~`7g]`K3׹1VT}lLҋިj:g gU3INCHR ^Lѝ=4t@W0G~E׶!^ώ0MEM%pM|mfeG$eh!2q NoEBTŇ`qn6.?彟j22=bTIe&n43k܄3 m)JLxڔP<7t_^ųu舤xl{ F}D3>&b,F)1Qz0w#.j9ΐ\7lHgcMwŗKhI緟S7MB0vI,2/XԷ2b<]1e9"a}ŪnE\QD79X0=5'nkڌy@űjDw?9JW)fx/xha`Z'aH[c8"5%9t j8DZ%g_V}յOcw@XC6%gPo߲*5VPO!'F,1wEHw&aP&._phڅ;ⶈDRSng5tFUhR?H28! ܽ5znQqz/Ty~UЗ 4)aKw ] p:׳쁝S|4%)FDyFtxnoE fAݝJ`\ k|]OIwٕ [pTmԭQ,s0lxQ vy{" q-jI< x3S8 6Ã(E5*T.睸DwQ ׹Rľoq/eܩ_Kӏ:Ϳc5wJ`EDqP*v[,w ߥ6}D=6e3zN(1.ƐX;e~Z C}rߕwKwjuT!sozxU .Қ7Io{Ty:E/$ o6%?сkR=z Jb#*v;@>o"6} /U3e3DD9,yqx79۲V utLC@;c=3}cgwz髶2̌IG[ rlNDUnnޣ-SY<#LϏ/l8[e_SbPhj1t#,G=lmiXӞd[+HW#ƞD_u(+䟎碻Qk8\,C[a1ue $<BK6gwÈZѠB?y>Q5g[1FPC)#a:[ԯe>w934/- %/V S;Xݭb khȇ~lyU90R>W0kKK͛H~BrpE/GP8#~_kIVһ7\ 32/A OTccXJvS s0\zG*wC_ if?o)F20J!E蠏Fbe[Mte4&m-i׶q wEU& ?c9Q^1 3q-iS;VJY GyX#len[@+n`~OMq.8joPܪdOo-@+~uf$F(^` Vhُ4QEh QPƵ6I :Zu)|3ʦ %_FziWAcQ{!)gzʗPbDg+k\Js q  NVaP_GcZ#__@bmXt-azGYQF:[ ׽D'aZ@VkR 7@URRm[=ͤ?#wzl\0lʊ.{1PhZ^R,<>IǘU0r zkotսAZߣ>i-OS^zAY+[u޻IYt;)H6 ) ﭽvөm7lr dĨ)zڅ|hPv,Tmb{c 1W=zDJ~{'i?99J\['z:L 4ٰY'mwrΑ2i +W@ Ԫ$$('={fݻ ט͙۬ wÑ-l}/GcXY^qOѡxp s]Q.d"+/rj )?eC_D gXs%N)𷸵pu&lGTɔ~Z5%tБ#׷:aƢ=3"ʟe lޞ`-ᤡ$u=ZX cBK˽qL+ck5?gȎy.u}K@@e_g&A!?G{F 3;8GgVBm.M \5N=ЩX@mAA4GR65񕔹ʁcaUVyëQZhҩ/_rw8 u+d.L(o}b|UUF`<}&"5RHH8sM<8Qguه0O[{G".3=qq~4,d9doFJX߱籂ܼ8~npsST*&ŕjW5>ӷHf/g̡`18a0> :s$V$.S3%Q((SֈN1Ƨ2MdbUh9,yԣB!GR[SZO~ p, tKxP!m)︱ͶocĂm™ODR Կxr]ty-"PF)N*=[4F]3'[Et2BRoNc(Qᖊ.;KvORBƞv~ <+ݍT*a7;'uxanxo.侹љ* B8+&g0% ϷAA Z ͹cOMYŤښ+NP6Y{!l'$0Ow} ~#C+=],b&ޭ썳0sXC?U3A |츒UhM{K|ݛd[U\nAQM$#X> stream xmsyٲUN&gdgØa}=ٗef+D]|zϯ}]quu\W EB =1#b8{khDPh!R (,F'Ęxt8!2p a ; p(wl84 CTHow7@G# C^p? RzP.x-Aa P r^(g XJGhgB)${`'@DD1,HhV㨌uYTP8I 0X_L)'C5A^ Oh9Bw-Sg4Q^j(?Gvo)X/LH3qA!0(CU1H# 2̈9I#q8œ~!"H ,R6ҵ&a"k)Ӄ3o. x4=2vo2U ]Y߽Ϯ/SjgCN#mSVNNs^`d-)%=o]ٿ[ ^yAzXPC5O}r+EO)&aLC8X_ 5"*Z~_˒~;zN%ZбTv2ix`رKVWOhY8gi. KN!ϳgv L(b7*}c>_c֡P_>l2us\m86eUf'$V-PR빨^-+!FaNm8ApuɲF\GYGq+>fֺ3(ErJ3q| 1,{{sbgz_7_. 3>7y̥AuO+U"iS9"esg @F_եXM7aOm>uhe3K&!rڬ#M]NGt~%Ɉ˗,﨤%~8ʅRE)lI8`M. ]<WW9諛Hf aQ ^H:..s"ݠ;RBArC=l?_m ͜e~ʒL\cA`Lk((nU%jD{VCo-{nd[u8uqf1Bon"%Me@;IcT-w:2heVp89$UX*{\{tsawo1U!R8\ w8J1AC-ZrCG_Uh&Ɛ/FqirysGS,<[{1{I0"}ނrP!OņݣkC,VPwAE3BYZ-bm.i>h2]MvUeJVD?&j̈;}jpI/Lx0oP4;֎⽼{qZPHܳV<Ngxk«jflN_uX i'vzW cW2,4IUid[f['Iߙd@=ۙ,Q@LLZɟ*]`heGTbݐj%޽C*Խt8@:AG4-ͮb1e<גKqc;Qѧ kC)x7$RmVG2dECa!k4R=3+IxCE*DJ'  ZI'Y.elΖiL⑶3^h/=RP+vrYַcbwɕ܈0o}{3M- _~Al$sυ`opJO4k0CHcg2qj!{5Au)m.{߳gtS+i؄)y.Y_Sg!::G gݮ \[KAՏ0\;gxǯyĭf[6PNIṀyED:ѰBeR?S]Qsawٺ]| +,vla[tyv^6~ue宅jYkDŘ< ˳g:ȇHLǯ0HU cT$-u8o0{Ӊu>4o% 3NS Bbc"ZB䒅z|Jҽ*x`鉻 ֒b]'YeTQK;ׅjK2?{Hid 9o`/U-4il?BC<|'G'÷>s!xr5D>[&@ӫ&C9A ڄk_%sFW:ϔKmWsS)E L.d8x֭=J{\!PS) av=rXhVWձ oe=2gjУ2nX~) _+*d5_1ul3TЗO5';e?:ů{^`&Lj.*#'M_ L`6o/f?.FgTù#YgY@%&_:]2,AIOtl\x"KЪ sJ\.)Q"67㤓-7gl•\K ^y(y<ޝ$dG[̟|T[hi\8ES}:Y ,eċ"qQLeN#$U,Tw[WF/`޵ݺl|_Y&fL\:ck>c]JT\&XKR˚p8>8x¹k9">XyW|ݒwH)ek͚|LvCpQˆ0AL: ѰF)bL*'%:>+olz{a$7#jwoYKU0\rS/ӷ$Nx^k|UyZ՗+etjڇHNoSw)VhVuW&r4|B čC{_={{>*_̢iB6o&\Az" ɖ ƑMggyr!V.I!Dުm-c+ 2:WOu; "wӁl[1L5g BVں Mk$,'.L/pt E4۴L)[%Y,{Qu'Enm M +32 )8I^r˙~ӭNji BG)g玲r>_(=1$D盕Ɔӟr|{xɻ02ϧ 9-X;vxeX9#|^إfiKɝ=PڲDM,-J z\-$!?ߪD_ յ1Y:ˏ/,ձ)yJA3o^Yh7!u +_[Ƌ/6QWe^WS ߡ!{tJuX;((WU9Z0_#U&~ݤW}c`M FrNcӯ V$![[c N*ZDqOUW& )/ܡ[Ia:FSˌ@ǃM˘WR(I )^)`=Ika=XA ?σUj v5")ˌ)R7滗jh3FJ{149uKoJ}G-g@8,CٻfXSp?b1=pu_ "{?Dܴk@=)UFq} ȩ xUt lyN6)jVo- Gq͹*>R}7UEyU͠?Ct-eKH6Ŧn|Y/"H=Z~N[O3HO;<'51/t|e_2H&4if}zm.fZ0,|r< <}JDWw2Ƀc<~k "d"] &TLn&1q3FYf.ͱ̸vf@P;2Yb}.aFPE)J&Rq)b:H$. 4<1S˅7ˤ,̈́'7z$:}f1K_y ?m endstream endobj 873 0 obj << /Length1 1626 /Length2 14258 /Length3 0 /Length 15107 /Filter /FlateDecode >> stream xڭeTܶ%SCpw.!Hp ]?s8ߟ~GQ{\sUTd*Lb 34dcoW)0)-lv.** g AZ$vv@lce TӦc``/?!3trP~qځ׉@ $Uted2JffgcP1: gݿs?0bL.@s49#lo`r6up+``nfO%_AO0+೪yZS Y~FZi_OO O-3 'Ϳh8XF3 tOֽ׿A_l\]vl5]?k[8 + nt׀hO ;/E Y@2 "?qS -fgdj~c(yh_)6v^_I 7[qd]M?G"`) +3뿍6.6@ Wsket:8?uHLlӰ1\v,T"Ϣ+x\^G+ uF\ fb0qp}޽OB|ܬ>b'@oVu?>u2)s?kj`iS]Ϯ_;z@Ai59l%U.԰-r`I^NqhyD>t=m< ,F%iQޗ PzܬZjFů0ēmptX()uh `5'?hG{cLq}N]Lߡy4G%-[-+2X*uTW=+&iF?KU8A5!K'+~֌~nt 9x@ab㨨i ?c"*&Ε4U̗KU,}?qs /wm0J/AkhE7 l~\oWfC0w t#:1[fE9LUG+^6+ Xi:wVLBcODE3 Ҩr{)!_ dU1z>U.>/O#'fiܾulmꂡcyl:zENeUnBD%Nӳ pęg_D[sR5TXav 8g&ҙ‰gUatoj71cū&P vAB@ \K`I3'p75. סk\xye]/.{f\% V9dH]u5}e0cJŨ}z]j;:h+5Ӽ;\ي Y=vn/4v'j|R_i qy)G-} hK ˱Kc_'ٽ1:| 8a=3@˯`}7:ȅox]F8>L&Z))֮r% 2n%+OcRe"ƶjOIQVVM ،=(.;낊ʎcx3Wx~_]&졻/-rG"gF[F(µÑ`]G`?y{٦qeeR: 5`\w?ѱR,s]ЭŁȇyj=YUY+R{v-bTJm +"ҙ:& p*xХEy\Ъ1My EMnj } #ָ Pzx_Pu1)po \9ç&C! Ξ_nX.o@Ý+v-9kPtnӓ%p|:pdRiiu(x-py/WjnuuSs1/%bh,$8M6֋4v5)h㯀w"{rCis.6]nU'whawx*uefytӥDl S]Fjs찌I|PegʙQΌeҠ7vm,F\W7 ]~}VǧveoNWX,|aCoUQ?pII麖{&FGK61 a)yް-M=p#b1Jѿ9$QFAI sga4*}*+>V: ZWPT 'iVܐN,ph87EG'b^PU3yx?R:lo s0@yn?+OE 7Hz Y3Yi,5]u}xf۞{ËQ/˺>؎J_1M\HAud[Qn4&hF5GK](j_A G~1qjxDiK9 LABa3N{oxR';;fYAe% K&V/{_K~ƈmBZ;c&~GOn:qm4BHW)Ǜ%QhKO-v= uK S j}ĬsT!sT| 呱*66>WL;ל)?vr{C1/P='~,Wzݨ+ɦ'YpFm>z!с5+k4zHXY-A,$u2~n{pcVAUC!,>4] !TF Ia*69߲XCgk?u fV˻$&w[/,6ϱ72/UYE s6`Ek]H<R*~9H(1]rV'!E*Z}P\iMea~کXloӄ:7FcJQR|V']OQI&m q9?!#< ̃TbҐIh,Rp)R BV9Oίo|!*"ռnj͐KQHm{`%zFpICC0hsx.:_~(M7uvpnϬA;Y B+wL}sB3Jyҏ~st3u>2J@Z?.\ʸ#O8M)1`1ǁL<ʘҀB(5>tR.QVNfiB+ Jme[aGvUa]):!yyrfA.'_ B jGNlGWQtf|MEIQTKub ISZjqvoz~XVs R g0GwnaWWb nYc߇t._`7Dr.JERwJ(v(UM-ְDG0NZyfVR5=P|R4G9EUΆ$0󏪼:_CGlN<6#؏î"ƨ+K .1R6D뾒$7hl$p#3r7Av2wAZqV ksnZ˚!D4'թ]{}5J"hM%(=*B0=Z V1G?I ([{K^˱jV+TyThסoD9"iHbo(Yyi{1&h6&DP p՗IA;'5QQj()ɶvǤD&CJSGaށ-)A&+sa2.zw&z$$|&oz/@៥Hɻ?R0>,=Я(X`% E.T\k|aeS7[ 35ek&"='xג1iD`=g׫i!ez&.^OUH-HAt|Dd}yy+dw prV $Oۇ\4k(A,zց>YҜ@<rZϯ%4n4MSb1՞JXXp?okRO+GnaWbY-Ȳms ͚3gl 3mmF@KiP<]G5!ro޲nMQ^%'<Wg\M5D5!{Oe\gZYGyeZ5]IL ws~|A큂y  d>8X$ДBfdDFaq6zd쮦swU]Ek2HpT-WZ6$g!m":Q劗 ɮ2W<# UV>t!^fW"a]/a'AC07 #^Cb- {`RU>Wv1-uX<\b S0Ǒ_)g>\RڦSR6467liae\Fbq\Yez G-3!bw6H I ?fE׎ e$Sr!Ѳ\t7n.'[~(e_n "9!Au#*32p)Qn+Hw95J ;$ c?@NV;FvGqIB&`dOԣ-b_~$HT^Sr-0Yΰ,!SxH2r?{q˂ }{AI-->\C0-,ye>I+6.8TLXvsRIӦ.ǻS0| o-䒌;u]q&ȎѬHV(!!S^7Dr5OT>H# wCv?=v8ڈeVcA(YOگ6JSj|/zN46Sf q| b ?jU~B$ئy}wɰ!SDsGy=8}bHelfDPeA9ϢVOCIe8žC+Z"#:#ޭ<5&Ll/ N*m#'Q9=b(bN9kN>vH Sѱ_K(%$cOuN~SFۚq(c8,>Pdq59?Q7wS3Uy)Bð'Oĉ ֒ĂsfFϝ8AW?߱\'}@,,*Z^c=.`Rg̫B?9}1h;5g*րbJ*$٠[:Zܪl*W!3$z]rJI1"K]hq-(2>oJY\W$X4u~ 'Tg[-l7nb.,7K}hƥϊv3:(m{T}&^; x|xNLFտXW Qg&n'K#릠2}g3u{GC$}jp(]FR%=0;2I X4́d%5W#??Ď f?h7 IzX<CT'q+n^/Zd"tf`1y.&j~9:`J|$l])\2C/#yE\ScRZ39Vi"ᯜ'ɟb" ^Hƿu}.In{_IFR@[^AjSf]l_m)cymY[Ћ-as9"eq+%]]Ȑ @/` )9l9Ir M\vS|y:J;VCy4of,FG>+z|5HIdW'Mgjs̅Uo*V~^EEXޕCE\"r>K fc@y [xM>¹ḑ!=K͹Gxra4%WgJh!BzLuP2c!sX5Ȕc0B.7uΕ9PpWmX򶺙0ml_Շs]ҏDƽ|)n`~C2BXPTfK7cDޘ;<(ew yUVinX :}ku:gE5_ʤ,/QZ0FSIzx(w3jEO%o_pmC2Gu#*kW)DMdO,28|4?0v KMl1a^Ò<􀰔TG81B Jǫ^RVieYʴyB9P$̐%_ɈO6z:.ϩ)f@f΄C}M38$7LF<BMUW@xaؾX\؆vHpNrB!@ɻᒛwVBqSt L4-4@M O<l SXws|cm. M @(]@@(Yg9NX|>g/pLW:wN=cڠEyk/@eG9LSS!G܁No?ǻa'Pxy@pddE:g2;̏?,!6~)`J|;rMeMq=Qv>x L 6h3Madv~qɹsЏOQ5kܮ nI?[ &i)x?CqVי[c{#6A5SOof\_d ZI-o4/'UxzyA4%gbYC_(h .@ÜQśH# Qugj}YJ0M,VY9'{Y,T`!2Xo"=ė=I?'Kt׹aچ> Xoz C hbs'֖˻e/҄-'9m^'=bNs9Xe1=/0qB W=HV1 뇪:JuoǏ}z& Ou99X.p[\Kd1zlhg*Qh̺`lHDw`Ct~_6n%d?XܓV1bXY䴡3T5̹p'2]Z |@ Ȕo.K jgdHCշ\"Em9*G+P1Ɋ{^t'?5KQC[5ބSK1V܀?o H 7#WmVF!JhYg\9!tV> 2[\g`$RUw*V0'f;;2s ۗ)N̺r"B+47JZ{V扦Psuad{3f|0ċivX{^<:|MNo!Y6q/"Ӌ9fx7.]BU--Z1m?%>L37,_c-{Ss~Th,݉tVNL;@J. #AEaG6ƞ b2vS kӺ֌1[}?1A8L4&X^I8M2A6/4z!H7oז)Q!1dQҾ< t0^*M*X7ߣ~YYSM(d,kՅ6-C 2jp^/PSA@B2c&vd}sgJ!{y8Ooi yI#ݝa3|3nFĚI8ZAFLFQ#rWX[r;q%KUKW "Y[8O[-x|G!b+rA6HCv~qcpe+V+}/bWm B-^b&IL]BQ{UG^[.|pb-h.V޾1xKޤ=s5<ϯW=1lXn1-` k'u*0JJy`HёY-;~7\9<͏X/IXgF^dKӯhlptdQT! ơKfcokm5[]W<snЛ_d;UX-]b΅!m֟S~6ťN|$m4N ͨ\u Fs1pOD}%z:[*uw n^7XU1 dc:0a}?yPM~[Y2Fd4 olx5@Xì0qeˌaֺ!KHh3dMUdq+5}FW<{ڴm jHG8cv޵Q<8~,_+G)5 U!SB"*hp .dSFu]j`*BSE𜇜AǠ9XkziWTl>"PQkٟx〉Va|-SZ '{ Nî@\ *֝xݿ%6 7CSUD\wZHl"\jO\D,ͩZhm(B[us>'m0\i_k%ZMh"FF o"?=" JMeaUA_2k8XPS.Ѭ:% fmNq %Wí6s\H!e,}R f7vUa*&ˌFw8ڔ^v1&numBq^bRL@;v:/4{E:JKRڷC ܻKG$CECX -R]O&vƫ70*\0H}*yqfl s,+XAoJnLל~1UΖ%͕l%}Ō"' 6P;mM[ ]?BB}0BS'v z$AM y)L-.@xA,\B( Kȱ: 끷pTź1~p1c0@i>PT劆&FCOv<~M,i6a%0&J?avWce}dεgU= |!r%7TaD[]=ᢙl3P dQ-WqHdS3\Kk~b(QHEz+^Y֖vG&0FL<|,p-[ 6oDHDCۧ.$. Q3`˃3qR1,{d%> stream xڬctem&۬xǶmfIŶm۪ضm6z޷O}~1=qM\{1)-#@◡/Y[NiZE3g_9+ ) @ lb`b0rrrl,̝*j4)`f6/.&ֶvLlB_;*M&!9y Y1 @ lhma02q4:}[S#_,G⯛?*/ Gǿ G8,lI_ 9WL 7t27p'_5?%KdO,C,f@p013p06qt gz;;ky`hbmJ7f60̊-rcgй8A $ mm&0NC(X#[#r\_Ee ~%c`gҀZ;߶ؘB GQ Wcy '#sߞKbcl`mac@_tFV6o/]ʟ^\NUJH`e(w?5`m]lZ&ƿoBL,^bϳ+@o $Gz0ɻMp){7٩uK"=4Tw'u? ڙ)}]}HRc;Pj NFo{pcI 0};V.f6U#'vy_r& yAeLd7g_2} TKC0&4,[ױ$q¶vQ˕jm{$J\ȺJ/>g,3RG*‹_;Z_T_u.O;cJx;'?e0ybK4Ol IʹUpHNRWoX!⛿"%rH=t:REXw iw]JAFz$i", 64hEhTd >%reY0\T]íkQ$GO%ա?L_E~HLn@ $Vm #ۇtqXͩB'_ tiHԘ-Ҷf1k^hh5bT <۩(Sl$0nk"M-I]%fL\>#^_$%\ _p^k*ғkc<b~g4MS823oyKY`aD0ԲRZ'z댇 `ps0C d2TNz_Qgk@=mr[21:Щ̈́} qdI&3M_ʡw݋#AtDOpOðB4ف뻑:trW&[m%t{ޙp|5.gL}|hAqPh5NoճE6w#Y}j%aQU *63!|'(tJϤNg-]6m32 \==򡪅@ke hUA&bFƊtr +ޘ8y$Jyt3LXv]Bʹ|46`8]DX59W pJf)Q0 c9P,)4z| BS;ӹRp wLʒΰdpVV%Y^d2YD6?$Rv^X7Wtq_T,FfiܘVd-J]-jKA8PQBą-\/yֱNk_q$.A:~ґP+Y.^#t,9PԗUj'e>l\df ꃘ](NꉢHc`e][S!LL2|EגE 5/Ff5{h~ 3vr;0SڞO]E𴞄8AFQt}P,Ǫla{r1\o570ȑE hr&O]\oի O(4v J'i{t&k;.\=Q{c܀Z[1=j/|^/ Q;Hv ~ c#ׂݶavH)*V|j*|m#sMx *EPܳ*g~_`8Cʦ1˝MOndmS67f ;=9@̔AwSA明f70R5P>ZCuםXI_q8r>:Ek p"BdǖQ/M17~pklJp4eQF>Ct*%(Z-޷M >Qc}3: Wp;geK%dJn`,8S&4V{-EL[iFNj$"U;:gN6t]p|"vFHZ9D#yrqx QՍ5['Ɣ(CC,z9+;(tcTrq7I0)j zZDуk{p޸tar*J:zXXiN+:agŅ^v۸m Ү`S9n "ʜu%e: r'$0.>$))u?nJBvIqA̱90RJ|i>O3#j /]f5V0YTk917V8< ^rJJD!mcg5m>]`jPdZFAz>y61#oh͆6V JTlCv]:ϊWѬ@ z$}` :G/wB &֤#Em 4ەiߜ"T$R@3\+z6uN'[?-K6zWk= 6SO{D/3 # jt5m ix^å 'z{F͛bQh:#US aO%ssmm ʴ=<SdK#Iov5j/Ps=<9:?>b(p0%u:FOA5t_#&Eu ][`8-M$7F)uoѱA Y,WZ 3uAjJsPvLU-w,9= mtN(֭o)ږgln gOΣ8( kq|e(|K1 !WE j "\݂0Yj] ּ>s(41< j=ފ6D4 ?jq`q8bpд.b2y$\Zᘒ+n-Ev#_GmBu ָ^վegET dz0v:i[yne# pCI4dsI}?Օt-gѰKbF5VP7ep}:[9䥞NwM 3 b(DZꊑν4j-C |޿p\Ƙ- ~gqUcgǃt-Ѫ{EvA')I}hm8׮_G.~Yxo=N+xNC} X`Nϗ˼S>½W =*p[_{垹zO+u[AALbMeAq4u+[2fAf!js4=i0/?u e?.H_ *!(3qѱ$JX:vQR ^91K\1 A6v>k +2nT%8v7X^gxaDǀ {Rip!Q#[s{&o퉛֪Ez14O[05cRR. e~[U9iAPW0H/̃@2̀6)c3b/qB vS91W*[EKC%aFc{DLw_LFq3Dnenۜ1`\v,yOzhWq@{ [/Ե lfR-n,&M<&]00u%xD `f$=w9=uEtyw[&!: S$UH{T1j_%%z-Ѷnj)cN\G&3yrRU]ʄ~x?.npg.ngA1sq2ǣ^gJUrBÊ儒r?aFqL̚_8!Bt@Rm[:)rWq~ʘ қ]OEsaef**S^CT|-^f ;U4]ԞLWAK/\+iԯTMOwZeYLJa,cr!Ƙ = <UV9TBܵ鎨Ŗ\-^9W =1C"gΙ48AyaGIptL9<&kyEx%I0#Q+|j@שddc!z(tŲ[$`^`.*m&1t4|FT`B{cǰ1o]73:3j*njV@3Sz6&+b]=~ՎQ1S[@ODjAQ|*Lc~b.,ZA@"|O=&BcNj+23o.,:- l`-kMn|H6%)"P}L7Fy!:"bXwVnAh i^X13A` ^DH4 DÒS@m(P!-i\@>H4ihrqS2ݓ΍IZ6.ac^/qׂwΦ}~X.'(a4*Ma3N YQ}};uvSI&++9CmV_-72T .k+޺]@Ș94*Xt{&mb=WZrEk3e'w,Un@@rL?k Z@[2E oͽ*"˗T`f ο}l09cJsO">ѼlB VZ($HRܣnˀ> p/5^f'ĶDGpC90'X6j/P)8ABP&<(%˻-x }Uy#6ؗMUCtllh2X9< ^ڂ^7KS SC*,-f']&M'15 ê@l*95=h`*]h e\͋#UzXLIH8?Dwl"Z&)bR24y}z~Rvֺ?/tHZO^5e;GM/$u#hXh:BӬڸ˝h7>y ;%[@FY]>)۳يL!L'nȑOl7s㷅Þ E1^Nhؖ[1lr+wGo'rp'̂Ӑ@,{퇸ׅF3.椪Sg9립q}[C]*>Ȏ)_&z{VͪXuxJ鎨?9ў$9Yl2qbvfZyJ #UcC5ᬲSJ]5`ZWds}Κ6NN| g0vQYn䋛>) ȉ*^H؎K`{vAFw^s}9 Qqo&7]tp侖.`nռ|&iabu[>hG;BA+Q{zz;*~1{nN2:7ԹWxL]1C\%j|P&S}̓4Bo.B4J;ߕ?"k%AFmcɍuʁboZRZ?9Q׺AUO!j/, ِBT an|O8ު/?Iټ"jn.;@vJ&+nPކXS4 &IU׏ ]I @2s ')ec,-BA&s]8i>.z>zͨ@?d7HSR7ߝpۣmADxݤ ds9kѫmɾc;vGAy~%8% r>K3[{JĂ1Y>P{z9G^h >KgR-csNRbVzH?(<^Gp \agK[Y?.r:0SHUA,3"ǽh-/\"6.:z$lkR˖QUB*| SRq[1J Ā=ڞJUF+/قHA.N!ma0$n4Ѫ I'C k NbSUA˥w`-]՛1o=t}^,z3O?$6-L|=4P<!K 9dKZD2@lE|jG2L|;S_VrR\$oQd(5 >#+^9kP}H &cߡVw"q 1"hu'C.UA@Ҧ ~o DvHOi-k8z`9PAi{T-kk<_20Tn{TqLBJf}ϩ_ &d+SVopI&Mk-ۈp_l[z54ۥnr<1f]NR0"HDN.]Z4\,G:wO Θ 2R6i%?g/0\QqD1VRUI-`N>oquN weOHʓ}-|,~#zIHuj䋶 w,[^#R H&pS:Km] Ҭw?O"]n@^!޻yD; 8 @3}o]$A(AjhB&:XšPu-ϭ'1JdfD'|,ރZ:UTx0[,?TSLj?ggmcMusva [4z"9ǏN?ifMNEYq\ #bѺ:C ۖ檍3 $T$;=f~JE#!&# 5+q>a9Õ3,A䶲,N䙏ٰ[/`yo-/(hIoƧ̹>9=UOѴ Q2L2&Wyov i>_e-@B j‡u1N6!JfuE[AA>jh'%L /kev(k~.a#62vO]n3 dc1Șpu;8iTeXƗvpnwN'm'c˒~M)M{۶iޥOhV>#{ͬݵ bĆ=dɄ8l)voe. gd%k fϺk Ð+1z:MBk/S7ư"C*7pO3R`iߏ7rsiO d}{'ILjQv_;cQ"-,axO!N+gtT91s䑎 r'PV եƿoe ?4m7"úךā,ЗK~z(K$<[5I#`ʉ_'F7a}veV͢m(a?TD4Hз^B7A]k88CYbRjˠuN]' *!t1꒱۰ւȃ9Jr)!,(Sr l~0=[T,R5Z H@NBqf%hBT,C(Ḻ@'9č|4ItWNft}m^/ !o ZXbOm vZqA_˟)˜a4KxJ8ujM١(U@-4oI_z/ՏCg K,/zء*XPlX=Vn ]-_zڂCo< iMjbdE;pBX)o0\EBPS3C,X @x3SGS>3>5%G z qD&$S+ ^ZC X~)[| k\mIQu%\0sYJyr,ȢLj&cHvf [ |%*7ZPMd~WtԠV$T+mʐ)yB L:!Ztf2bH=L-%Ԫ4wbƢ6_N'<Sѽ[,Q1I惏p!AԵ`rLDeQd4ɺM.,U94 Pmv%.N=偤AP7je >k ۵2/C+s8$2cW/;rS9(b^>FeRpZDqq¹Q 6LOY0)e"lR'lM% HG!K j|4?Ÿda>8r}m\ YѮ`Æ5 Ўݱ_bwڇþ=az M-r33=6k;b gUEn+?;&0I~2 "d?=Ŀ̗4·?=?D@px_`GZPS3ΐd'39.ˠX8~~2bN>]}{eC ffҫr&w ^ECI3IQ/х:sq2L3vrHd1[?\)h`˃=cCf~]ۗȹoV)a(IC54ZMsBq@Q U7z`bS+Қ=';;rI͎*H'{EcI^< rЄ=&\'j~4BI=} چ@u9叭jC#S %ځ8.= Eu\27PTnّ+bVq ->0VWԸɯz^oUmGg:+8jkd1Gs~{fWKD*ڱt.*,lGIwS*tm[z-E\{2/))GEZYp ,5H (~]:T$n :l@|$H˹0d-WҔ@D @'rѧoW 8mǕ|P|"75x߼ؗwMz:œucN2%Lf̝i<KHUIk3}ág7QE ̦ӊP4dB[]=+e7騺Ņ@!R?y2!#^g_GJ7וř2mݖ<! ܎,c֛4v:7WLf]L4 p~|opdnK^=FsȞ3 ta5Cs|1WHW3[5Z !Iy1Ӗv%໻ց6v!Fpdڕ84q}AaK~7!PCx,XT⺢,p~:fR\fb|4$u`Qa:}F#WQ}̂x]Շ_q1ӯ8N{xֺ#޶2j[ko-nWކ]85bqiw7Nj!}PU)b BY^rmٸ$fkԺʹp]}wNoɛj#Ni\(Uzl$̎8<Q])BbA"Fڎ_K`)r(yގ8),Nb}o(E? Uw-:!dIh*L>Є#{y^sOAVn||_m٧ih- 8 [94dy8ƴ O$3aq`ePU븴F"N(r2x5|lKj]fx.jޥ{^Ӽ6n\k\ê`@+ɂ![`V7V@ \VMKޏX2 sIeTL7ID˷@SB,Nb:hH5N Y3#~]by~ġHSZp|u9ChX:-F5o=)J8м]Uc"{͟Ug6tBƊНWħLKWX;aM5W{ݣcdIFc?/DU:J}\&ZYJf?͜_k'W6X3pՊ^e.K" Xc|8xa. ": Mh*(XCD--N.vYPLo/^7bk7'Z*_ ըX[ Ø~LAshOuZ);aÂy~ !HjG廑FGKQ?зc+}m41y@W؃Hr(}Y~T>EVLD_^38L̗\pA& A犲#YCeif xym\|CgeNkD1S&tB+z?.Y:笋нՓ ,AomӣvX4(pygX bV+IPpKN *i#e"PUta+hD!(NM':QB&\w+=Lt jwHTDawRUw fs SJyW8o9v{6טarsNTMիy\dwEȃl 1s@]r!Od<}G\:֘4сT!a|gKFeoYQ-32/\yj//P'.nHR"$1udktyЖ8{%M3+pUTw2$>ʐECCOsoX%OQ4%,kӰJgMyTS˄hIǾZntUD1Դ @y^w;>ɩv+UMS ٙ*})t aҍ\"!a%zC|وImcoK>,E E|6sikCi1]p0Їk! +r,~1c;5X9yeɏ=h!()CF V /w56 *pMWkVXzAujJ#%4,Gv,'Y*9P#MVQ50[S4 vY^96eX#s9Y0>`?݄g`VڝPxPH%m[1?ɁWs,\,f2LS}vq[x:psliuidBYB2F}*:zK6>wT /煅MFm!%BVf%GEm -7O Q33AwbB P;ppFq(Mu בp&U11nBeaj?Gy=a ȯ >{t~BL''_#怴~.j Ic YI5Ϟ5-jG5RTK#)'~W .4i/Vi]m/06 q9bOܟA\Ǖ6QgqWMēb8A@;Qm:<4ͣ%ʞv hib 58(?IF9U2KKQ"i҈ ^ȐK_P*qH9^t-˨DK6~_}t/DKа( `riG]s=,½5,)g@- ׈󋇛K%w [1ڽф>-e?d)θbyȧGyK%0 ؇?P#ކ^g+- qi`I+F7&|| "{J7Vč}1o7J/;c=en癩搽 D(EDAe|`_Bdx#ZOY{2ir_=8X*v][f_Zrvٿz5C+ t}(~NF3F6R8W+?a*EIVM$ zZ|U zJIyك|y˾QVR@^AJVe;kLTjY8,B*LjQ080 \$13fE-1:`Jq3*ډәIݨ9) >_Mp4pۼ'>eqZ4gnB)^3;ֆLUw-ǨPΦ=&Y\1j܍N&L*4VS]0$qq)G-rr?˗7^2U Xk9=6|0Y-n8rffORqtYh}V>*E9C#ȁfٶ8pg(,KFT& I@fڄCȥ!\w/:E̟a4L)@ )Ťp@r''94{vP&yN)?bN!,^aqK*vuQjkgA<^zia<SNy9-#?6c»t}Q8fByO<adS]i]6Xޛc@&oZwt!/ ]T9_DEF$J8LnWZTfca7ŏ_6T - (.9-fW_w%k|25g˜I+c^x=PJ4PFҷ|Lm2$OO,)޴?2'0@\<{JN( {}?4(?8tSTh %K TH5SFȒuM \?& @50}@A!S}rAe\l0-|Y/ BA0/p4U^|^?>sWvh36!PVU/yQ;0fNc*\ {^!u}@ފUWU᥈ Zv*⻮O*s0 $JOc_d}$㡇gWّHٚ;*hR߆* FS )EtCѿ=?jO|(]u.9EMd,%–Rd5U̝a q[.nvNߤmcFl7>gMS˹lۈj'Qvv!,5Z@s [UɎ.jC6B^K|E6ufaRgz:(Z7bDJ-^R0yqVѣ+ TXv2SRިJ w&V3B{~^\#=apyxGOrf W}S]Wj;4V?>]ra5zI.S 8LW_#4yL P@>5T٤hiH!0jeB¯Gb /mבqw0k-}"!lX5.ݩsNq J><-smq399JFk) 5ʛHZUsַF1^ՠKȴg@ cdݑK쨕49 /]rA |7/)^d|Å͉vV94Qȡ ]de`FxO~%R^|PUojvov>f4n~k{e!O"4 }EzNpUnLix>GK2#@1@%DJ"fÒJ~ \!'Oظw9*〼N1JۼΰZEHahֶ#[B =Pt}M#ȠӮ7\/|v dvOib_u uKlW[?I!􌄶~+M`?K-?IRiMÊƩ|Ѿ3̤[8WKqUذN9zA#^ؾhw] Ǣن{BOBK:vy\"Oy`6o29L+4Žy"lE61G먚~]}I mu߱Mdk?^b"4FpU|Ѝ7=RYHS6@il5yr/~;yohes iHM1UC~;^ǘE&j3O(ނ6'b F (v؏y"soN7@/zoU;Ni_:5!X6 OAEE%c[ `煻]3nIG g/PeWK gFpYO&:0FX8O(uiدwdn#[:4{+$s ԯ.J͢sNF lsgn8"ݱֱR ˑlP)NxVr3 }(uF-4 ̯9{Jd2b*ĖyhR6KcJ֏RuuȧMF6L2AtO⠌EN+.vV2? =ͫXz^Vp\WA!6!X}EPK]= %oeATĻTXZGۄ-c hw[*niX%^\݌;(T!yޣ|}Zs n=:kCaѐwF0i1=w -2mjKmR o2L>,Nu95HBi;-;s^/VGfpS y-߫͡J֯2lg)yR YsЬrc:_+!3XOEx+ڡiCs=*@j2 yrU؞N59Mw =fywVhǐJ# ҇RѰ `Sv78-=#~Qy$o5Q f _/ *42J^۷/iN%WzHKL,yUzxP m^uS-.L%5Z} a8|Sv`Y>泗> %4E(ę4yB14WyYlCPeDNnL6#VGِ)`满d|Nodʧnƫj],N,AG]Cf! )"&LIm1 :A] =WrŮqV9P)'e($[i^Sۛ@_,2){uV6 4 P'*(Y-}@7+ &)mULfJQ/h{K':CxF}Ee+#zpZtšqa" P^'^X#9r}C"qHv1Ӳ'$ '9mWb7؍fci+:j]SzDԮ0kMؒz!Riv o ]fPF:pƮ$UQ{f endstream endobj 877 0 obj << /Length1 1647 /Length2 13166 /Length3 0 /Length 14018 /Filter /FlateDecode >> stream xڭteXݒ-'K-w }gΜyνg~]jU^DQA(am Y8+[[[2(M-<Pdm%hb@C++ jmj21uP)k G= @Z9|PU@)` DIK%@+G C,he[,qZ[j͞K>€.@ z do L>2p4YxX~`dv GVE1`Wn{ 646tAdep80X~ ]=_&vF@{n_}K66G[5ƌ,9 >r)+ck ?F6Ĝv__3CQ+h $o@?SOW_O<=X4V]l,-o p[2Pfhr04[|\v5+# !o)/58IVJJD^ٶ;+~L 4䬍 ?#+#D,:;؁\ߙYo4VF͑/CG<@!!_YrZC5vnO6Eu>]!x^'xZ\l^wiw,g9d4=km\t~LE)sZ껛cJʺ/Єmlv4>dN>w6H^IQ(`hyGǔqwT#C]P=;tQp|^ G$zv7uoPON\Έ)dV֢5n3>mE"Iu˦n7d`T._jHà ^[dfu:i'MۺDD &j)+l }Mv&>jU4;Go<؜EU2=uVT1ϱй#X_ =TaP-(bIND+UjVs ̖#^jMzM(ctxK{ ]274V\w틮wdpNVpBe ='(BjD,܄ChǸWOȖ0b6 acM.Ϩʖ%F*!z "|m 5/ބɾ}1jAU.IJ8_o[p DOa!gIKL RTD8i9uۄBπ7HtPOXTvz,2J^9#AQ*OO5,| fLLP-~oʿ@ʦyCLkYQ_-B܀'Gӕ;q[DWEqCmj  |]*Y,.ϕdC]UCp1K8_\MgUHjOq\WAZ(7;C*Gy/H2ޅH#yXR%ˌx. zjl]$HM4isoÚB@Vhz@s69Vɨ(\Eh̆hGX듷So+VXs6~n~ T4ϊ =UaT'fQ*1,կzjۭ*p.U}o ׏V)\7?prlMM`B)`wD 9xy]&jGʾ~;a57=8+nd,㦩LpE zS`p r峌/ffrpcM I i/L:/˕MnlQ@ށoU!Q:ŐB/2XSͩotV_Rҋjkl%]Gn{ȷUgʋqٮGb.}W{y]c~BDMsu}g3`.I{PΙd'Ih?`)Oz{j8"w5dޝ5bD|W&@ 6U'.p `o Au:f/!]ɋwT\lpk}׈y.0S6;_YZ0`ijˀx:.Va3r= A`DAuij j+GzdUs9jn5(rG|PnMB^+壼O\8?`,٭ǂ fH^Z=u m]#5[?H4Usk^n4'8'&tוd5ѠRuZ%ЧBSʢ㘭`X.^JrG 8>s*9>1LuaEDj3ܷ^` OQWJ}B!U55Vq" ==jR ζy>} mcJuP !. Q{W(hUK!{IeK.}f#e#6\A!̻y+s쵬e"?8pykpxXc.ۢ)jiPzl!`W813#tiN}=tlHF{1[J]ڛ3CW$1ԅ&hqur|)S&(D`KK2:Wt  dya+Yɳ CK2p!Iݛ6gh[XϘ!}]s!S|1Cƴ02# ӱ!,~_~]b*p<x'+~{G5ӯc~(__=XԦ~oemGl>Lx c>\~F&C,Pig9oyf-yt+ "H0ˬ3t;ԄN/ 16Q_o8X772b@iӴGqJa5WJ'ҏ]G)ugUkpVc:0nRӮ,Q4ZmgQ4L~ s3}eH n5WRf[{ACnZJyI6JӝJ,H[M<2HUk oo/JpY[sŦq rY"NLws]%e5řc؎g^^pPIz Zsj_1}1'x3۩7]hZ,畮FJ;%b mƱdϰPίt*x?|Փ6wM}[$ fb+#ҝjљ\<7ELJs1"rMQtOQA֌\FzC2+4C^` Ըj_QݐN9;#IN.rw_0i~q (]/urS%V}f?9-ĥ0~!8bl`[gW37lP+Um+{z3|YnS/bk\ }#!X2RQ &K%G+hWb xӅlE4{}:8EelXgOJ:?_{lQ8oAj V̹u/&lhB.ŜT}vgÆBq!s(QQB\TY> רX+-۲~Pt }]۩ ԫ k Q "l8)$O>fpH ;KMKX=*Cm1-ȍ-T Q[ק,u#_$LM_aQzfX}lBJhB]Du Bɦ+)iL@v.'D/̯]J vрL`rJ[4BxQS) ξ7|+mùoJ]š!]̕#Kg,vE!]$wE&x/u-oLeDM,ȴ %Xy}J Rd;}!+րG)(c5ܿl}c<]8ukq+ےYJ׀' a?)t^/ߩm?+5LJַɻ tDm7I Y7Hl%76g7'/"zKpBcd'dz7cI[s`7} }Ud|Ǘfq,c3@t\vBZh{:]k9~-dTHD.9'm=@֞Tvq! 0'*=δ t^?6uyRھ D[.3lqʱ>ĊEW zYfs2GB0yI9:V.[ ND^JP7$/`l[5[bR&'p8v[HdՊ(J.@gXח[wV)?QcM,O4tpe">{aR׶Y*FFէ$\+A~/oO(IɎ=/֍+ P&\յǚ6qGs2avMI ܪE_9ZR]WdF KJ̬ZIAۓٯzrz VNOv QcH}#=gAmAu)~O圱;4nJ,CPԃ.`:r04vBx|TGX`PFf% uwbtiF,dEr OpU=^|Q$ى*k OAs^'[Y+x΋΀;񤾨VSٲ1dg(l&dp4Ff!+}Obڒܖ%߶fV"gMI2͒d?,LoDLqbu=nUH֔u4,q{q$*Fߓ(rJg(ȡ(-4VcvO4 }*Ut?yr^5a<-w]-oI$oP-rĥk&Y: 0lHI`mIYXeܤ8( yM^E3'imE98N*A}(m?FM0e@;P]Ze?1:ҽ1|ֱ)zBծ d=cU \wwmnN%Bk=R 5mHZ-+'q%z5j̦.-dui~QQ'Q:-Qwڸ]:GҽeE{Op5m_/0.SNQ1y΃йksY} &:K*N&C7V][SUCL|'xG7g~4np$\WHτֹ G;Erm7OU*lx}.tT[nuc6(@32uR(~"x#UpHrָ΍Yrم8LIp'.kzq4z7Л,G܀e{oL|0](%3AVQ } 3f5dPy+Xi^<;k mrz'v69P$n' VDNKH5*j9KԺ`0h8B-PpQ7=qiIX C3ldT6fSÄ2%W(捔'j: #2rɚCbd;ٯNHX~vloPu͸tw ® LԂgTD Eor1xnS_f׋ LoQ~qIQ jv|;u{-:ʐPq=*CH^s6'E #~Oin+M~ yN U4L!UyS'o1$GaNg S{}7'(Ia$ !IG~gɋQ0JWX#IIؼ@oXB˓nDb|'94b[.gD^+<ƒG]ke(4A`us 73GD*Ңl?DV_IjP.2K2j&GY) {^BdBV/ԫڰ4gy'21Ң]gİL]A*byż|!o+Aޚy ٷ@4}aj/̹ T: 8cW9Qe 6.Ȣ9ڮpw1?\l5^6UθHx5Ie˿ ?:⏪dAEib!DX5oZ-ilIQI(^٢W[۽+ 4 кxk@)?^wu(#a '_>t;BFWD#Rދ;t`XP]PE1ZdLH;hxnjLWX֡ʴ( e(6Ku><ZK Z_ TJc RjIiS0T!xL夲V[6lXk՚95" miSc5Lh_QC߾f\"`5s5*9.<!Xg埝;[ Py,-(V HyҤ-k ajy)!bZM`rb1*~|fp,+*wUF)]L'ٚXSjmnD d;T0HZu +2 H"}oZW7~\Ҩ#sm7q D2DN=PoER7ۃl3P1S @Yg\ SF0oa;~c}SB0(<'\b_[ee|1YޏJV؜3:V1%,GzXfDJY][QKPP9q\iHQmx'L2s%.11jcyY{Hw>JQ``=akė^i~kbXKC%wd)G0ѭ2Go~2JZN!Mqy)RAbQ2(Ƃ:*'bPKgDooӛ8`!I["bzxdK:Ζwv+b@k~=BM0Q9~nmc?4ynE\5;n2⺬_._<0BIIΤWMjX8]9fd={F_Fe4C=RF||\(̠L^c/աoSAG(S.sKA(w ^*PB'N[fʜV9v䇩f{^?YS99.NHsBW!LJgob) .֛իBWIh_ǔ h>׸a1MMrIY}/=ÞAKMi~U\_tk`%%]8ЖCy,-z!^u&Pj>Hд$,x;Gv~\#Fڭwz;U|ej9l䮭6{+[sӔ+]o/u-Kdx k"z|!,M(U~le 93 ȖSUtw?vK|ٲSg=([9">=L8M&,x5r-VQcl_9)HPǗ 8dQ ZZHlr#,'1=][w*WlvUJMZv\-A^ |y;{)dW:\>K05&D#; U=+ 0d7A=@Τ=ir;JfIQ)ZbmRFc;XD B7k+xɨ‰t[GAFA7:*V1*6L.1 ' W<<^(%Dyc.v?۾gCdmjh2 F| A%>%dk[lT'cp X,l /˷o#r:IR$ P`_C1}dhiL)Ql/0fQwDO7G|'R*5Dy?,x$h .}Xb~ RjMd:fuY7^: -aL8u>5;@G/w2* uo$zq[lF.MXX܈S`29M ^buX=[]I1jFn^?'~pSߌ=iX""tDcq) 5yOc< 9eӧ|-\M,hF[,4>,[P ҕ J\ed62%&2=3٤4-GZ-)ܼQYiש+&kE{Qz]ן Vhcx}'z_."8$9k=cB" %^⪸Ƌ.w9VFCޫiZjtWZ/0 [1xXJIY{;Y*Fo5Ll^fbWs Xd8lm(LsJM'0Tl|ڝeئ sqMߡ"v:aū%)4]QH:B1jEDYSᠥ8ĞM28Ż̏A(SyIF¥4V1n\|%0ӯ:n\х\ )߳?΍#rLp ےV!jp~,IC/UB4_^ˏIYLؤXp䬖#P6Us.|',4kw_ͧGZ!T>,*(f,k(T0y E)vׅ4ޣhh;$dWMFqqVꂁ\7߆M|/C KiUAJ"{W޿++ybC~Aӆȷtd8lUZYp.^S2nl'p;GsW=78O)l+M>H^KpʬaأcD`YMd0L4:GwyS_vw} $BRPsmBV2Y,4G~|ʻ{{~b\Tv? wr3%oh3v {n+rZA9vqGaH4:%^B8󣞱x mlYƬS kK*Pڳr9z͸j4yLǪ7H[pGtT.j۲[ӓYYTA$2Gd\Foظ ) .=}?zI{t;G׼lt[v0ooL°ե>;)Ge˃u5?!ݢF>؟QMGtlLUhsafž+eK&᪉<ȓ71V١un!>[j?2=s=~wjAOFU6 L|aӺ"Z@+(t*ϛt,CkVMD}k,N2:(a0Sħp^=6siMs7e*\4: $t *ԷOM<ٳ~Fs?‰~|kAwpWW$ָ]#KaFsV%OtJVܪ_cļvJ@#OdO/Br` 1,6ь"7JuÛtůq`^1cF8RP6;9J*߻^X4mEdTMB_bȷ43zm[Oek{n4̅޹lj,IR@uϯxKO%,o _vt @u ;lpoيw%_+Α[5lƽG*/50nrϯW F yyH8Iz1&^UvxMl0+FӋ1`M/6.PF?ָbho^] 4W2SەL_$ho5BW3'!h=}]675&$ú_L1onz"3XQb^|]p%"ǀUiC,wMϴB`(} d΋59g(qЛ=^ǟX|P8NjPe% _W-)9ȦZ`N)<9O\1uҘ=o0[LHcRBxTWhc'3w4"ɾkU7e0gSaUL 7Qi/!pG 3h8Ǖ1g9Rǧ^K*LjG@0|*7QduRtk#3#n BkPR?k=Y+g19.R}Gi' 箯O u9 ]ÅPH֛F Hz^RK 6"\-twؾ_V*A(`ue/L7;O?mV3MCڽr-Cyh͊'lOQ-w);%J6hmΉmї_" _.lEQ:wݶ^VI^mFT^ahʌ!fFfD |ݻPDN#Jb{4$hb/?C.+bV"L޵gKM8dB9\UII%Í> stream x\Ys7~篨ppL˖˒mYr%eo~PiN>lHBD6NtƇZ߹(:%mRwjYCg;+]'^N*:O***DҤB[NOHHii1B\]fm%CC&zmج J3(Q\SVK ADRz˗s2C+ vflno۞̩4EuS M\rkF ZyՖ.:Д-_imnKzȖ7VK(76 z\nH%Ti"oxs \CHpz$X \$$ȁJ%A:xP z!1 k:(x^- Fp/ia!{ZS <8LIqL5`lu-FH;HXph0"HzAQ :uZ5-*ZA8H@M|рcҖR)(cY1ohxZ B BxyFz"%jF' I-$5TZRi (-dJw^#ivɥ6I٘h X iZi(7yRͳ'ϋ3_ Jn tZkX6%5[Gf`jUNwك%4o\'b˴2(([q2Ӗ L- eH9 IɧS[c YX ^T$>yflyf N%5$2c>bOCS׊W'3;! %ʦc$ K]dSqB#FaF1h̪q" h~Xd +-$F[L`@*%̊gـXƄKuӨ IY]T+g|[;Uάr=N[0x|^<,a-j. rghHnG0=t6hvd$*סxruT]̩hh-ְKJ "ҳ~q`N-b}0RsTa6(W(*- Z!K:n)LlK\W#Rkǭ]zj9JwaXri۠YqSxH\uOcˬ?' u`)kǴP4- )Q)a˗BCΈ/!`H k N}U>()Is<0E&ֲMG,VqB=h6Ʊ2J;,=kr٤ސ ",}f{Ʉxca;Lo vkwPk*os 62`RS*=F)zk+Ee`y[.]ǑFQVCTV@ˋ 8QŐ@إܸimYg+e~J;'"}XMhj%ɖCIᵉD6nnn~%bCMuouMۧw׸{%i_.C҆~f$r9& J#bS C^;UZ~]thK vU(0B!|UlE`7}ND5RŇ4P(.wrmL~@:1pXu 1㚈ǫ&d" n8GT$sF<N(U}O~ ׈W hU\ts [7/cՇq BZo`/>؎ŽPȆ- Xz5ZGă`@6a0u [05?tU5DL C71qxl⏈g/ɱMk |w3ĝA& R6qg;lOi3HĝEOMdh cfBMjР*. Ƥnh#[ BC""[^- 8Z!z8UWn^k1GgT96HKZWD5*u"K#6: O^kFF\k.8]}[D!egoB6 "@8n,!^gQ%s:Sżer}ͽ̂ç86(9+ pl7uJčkyd.>$m1ixZ7~xO^L8ֿ}e#ooH]G1hE⊄ =%n^Ύ$h'' d~z F';I-D_Er~{4R5"!{>yk4f"x#BNƍMдb8`6Tk%yElZ-k$LZ:@jC߸|j$Ps[ q_=A̋wֽEVNv۶Sw۶M7 7e\ n ǧ O+ϯ%bPN$8hVcmtOV u=a̿wRpөj;VXBvZNVL248m'zt2;dq7.93&p+9Rΐ%{~Nǒ'ͷaΦct<)F9ܞagJQBmP[4X+GPK Ɗ&*CkHlr> endobj 883 0 obj << /Type /ObjStm /N 45 /First 368 /Length 1645 /Filter /FlateDecode >> stream xڕXnF+ `0 ؖ'#JC=jKQ>Uܦ졑8z]]UB:89fBKf93cɔL{bZ`a}$̖Lz`R3`Z&80.x3! =P8&XiqLxgRX L*04ԃCiC@͔0hcR\ i6sL9 ` ʰykp~HH;6p! dz-3 1# xI *Y$R˳ʶ)P׳ u>MܵX&i?^76n]qqc&72릛9IgqL%a`,:eo'r ܤ~c0LR|ILGSMF}=Ez_N&=ɯ陊ҍU:릟!&)՚J9$ 7_䤷\[vW夷+~(g}9/fOL߈InOOˌb^nb.qXk~=Y#`lY#ex{糋z-vK`Vn 9UbjD?sH|(˜jc)C 80b0P v۩'C 9F$d&>];l K~.աi..q_}VVSb\̽nc%~2'e\TXceʢiwuouUmGX=ES%0W3h:mY^\c ֱZtH9WwtOHEICXJY@l՟u:A tQ&q-r"vS (Uy^vs :nJ'HG'HGk0duȣ}B#Bk+qUUTj@S[Q7`OAi~x7ŭk>amrܜ1Wb?.BvOZYғ ] /Length 2423 /Filter /FlateDecode >> stream x-yt7^^&^B $BCH$<b-rZ9T܊Z[AKRjE bPpA֡Δj{ԶZbJ9>?fν߻qu)۩?NT:)4.Z!Z0B 3`h9`840ƣe&(f%] +\{Pmևܡ`ja.5c8CCfW fn!ւf?EbP:n:f]W Ơyh[ѴnT壭' F#ƣ%5h<(XC8LDjZP U@=ZJ` Z ©<tN~Јօ @[D[&lz[l0F}e=)[i>s\N\a;y"-ݠK0۴`78XGi` R{ްn1QM?٤kM5ϑM+f@d9bDLȦFHQݔ%~B&IB$A yےGbzwƀr#ῨTdvJ#34A"\Ո?kW`EEZLÓA+I:zꍋYtpYh/3 qS M qX-3@ȶK֞;YUWvHm T"}j1k:AZ&zVpSHܺϭE.uQ- X-; Y #L@wA➷XMkŽp0ah&HVQpA w`bx S{-̦;( qj`81X}`} J:;RX$6B07{g^iEq*A>鶰1 KF>JF[5 A sؑvZ0Qop2]IԁI^2OU9] JC6404HĿGfJ|6 0 `/{L/{͵.& ohAďo`?Ϸ0 Hs " z$AiRKYi?p@?XVϋ kZN>!Go_uU t(?l`](UC\pȐ׻,CGBpd8LlIb&y%ē0In0 6Ȁ.`C;oKK)ki%LJ,,v Q,Hx0#mB`R}]òK;-Ւ]B A, !'Zɞu^;Y8Ymf BNJK!~sh ^:q!~[+<7gP!KK&^ŀնSkwO^S }bpxv{ uFyaǰGR .=ovn;Cp0o :hˇX>\ VF]V>GKzL[2Ax6 |bØN9li_\0 `tt!Ϳ@[lWɨ woZ) {*@5oFƉw#9Zhgop0[ $gyvDKbɒsA`!Ҡa;N?˃v.a3MIB8 |")Ǐ4g񻚬X紋>fK` MVob$wQJ m*_y\qMnv+ۥ>kmo8id$ ,z'7X0[;7*W*n]eW+s7)nYqWFwܭ]\}] Ŋ{(0|sB폓T c-MOཊtޯ⑋)]x=GO>8GEú 34țgx?WH?9x~ NQ8>]qEbR/(^O񫓊_җ)g^h(^;?RѬFś+nWà|NJLlI%OXi꯴DIu7[VR VԶ4IR?:czI=J%iJS$fmZ0t$z%vӱa(0䃑>|bK@1(` (T w R j$GrpUٲ endstream endobj startxref 1219004 %%EOF apcluster/inst/COPYRIGHT0000644000176200001440000000055414170223535014532 0ustar liggesusersThe files src/distanceL.c and R/simpleDist.R are based on the work of others. The original files have been copied from the 'stats' package. The copyright of the 'stats' package is held by the R Core Team. The 'stats' package is distributed as part of the R platform which is available under the terms of the Free Software Foundation’s GNU General Public License.apcluster/inst/CITATION0000644000176200001440000000270114170223535014370 0ustar liggesuserscitHeader("To cite package 'apcluster' in publications use:") citEntry(entry="Article", title="APCluster: an R package for affinity propagation clustering", author=personList(as.person("Ulrich Bodenhofer"), as.person("Andreas Kothmeier"), as.person("Sepp Hochreiter")), journal="Bioinformatics", year="2011", volume="27", pages="2463--2464", doi="10.1093/bioinformatics/btr406", textVersion = paste("Ulrich Bodenhofer, Andreas Kothmeier, and Sepp Hochreiter (2011)", "APCluster: an R package for affinity propagation clustering", "Bioinformatics 27:2463-2464. DOI: 10.1093/bioinformatics/btr406.")) citEntry(entry="Article", title="Clustering by passing messages between data points", author=personList(as.person("Brendan J. Frey"), as.person("Delbert Dueck")), journal="Science", volume="315", pages="972--977", year="2007", doi="10.1126/science.1136800", textVersion = paste("Brendan J. Frey and Delbert Dueck (2007).", "Clustering by passing messages between data", "points. Science 315:972-977. DOI: 10.1126/science.1136800.")) citFooter("To obtain the references in BibTex format, enter", "'toBibtex(citation(\"apcluster\"))'") apcluster/inst/NEWS0000644000176200001440000002041114170236313013726 0ustar liggesusersChange history of package apcluster: ==================================== Version 1.4.9: - removed dependency to 'kebas' by rewriting the corresponding section of the vignette; consequently, the file inst/examples/ch22Promoters.fasta was also removed, since it is no longer needed - finally removed function sparseToFull() that has been deprecated since version 1.4.0 - correction of link to Affinity Propagation website at University of Toronto - DOIs corrected in help pages (therefore, the package now requires R version >= 3.3.0) - some further URLs corrected in help pages - removed change history from package vignette for easier maintenance Version 1.4.8: - correction of aggExCluster() C++ code - correction of link to Affinity Propagation website at University of Toronto Version 1.4.7: - correction of aggExCluster() C++ code to avoid compilation error on Solaris Version 1.4.6: - aggExCluster() now implemented in C++ instead of R in order to improve speed - further correction of conditional loading of package suggested by vignette Version 1.4.5: - loading of suggested Bioconductor packages now performed conditionally to avoid problems when building the package on some platforms that do not have the Bioconductor packages installed Version 1.4.4: - changed dependency to suggested package 'kebabs' to version of at least 1.5.4 for improved interoperability - bug fix in as.dendrogram() method with signature 'AggExResult' - added discrepancy metric to distance computations and updated src/distanceL.c to new version - registered C/C++ subroutines - minor change in the vignette template - moved NEWS to inst/NEWS - added inst/COPYRIGHT Version 1.4.3: - added optional color legend to heatmap plotting; in line with this change, some minor changes to the interface of the heatmap() function - corresponding updates of help pages and vignette Version 1.4.2: - switched sequence kernel example in vignette from 'kernlab' to 'kebabs' package - workaround to ensure that all apcluster*() methods are able to process 'KernelMatrix' objects (cf. 'kebabs' package) - replaced data set 'ch22Promoters' by plain text file (FASTA format) in inst/examples - bug fix in the heatmap() method - vignette engine changed from Sweave to knitr Version 1.4.1.: - fixes in C++ code of sparse affinity propagation Version 1.4.0: - added apcluster() method for sparse similarity matrices; as a consequence, the package now imports the 'Matrix' package and is now also able to handle non-sparse matrix classes defined by the 'Matrix' package. Moreover, similarity functions supplied to the apcluster() method may now also return any matrix type defined by the 'Matrix' package. - fix of apcluster() for dense matrices to better support -Inf similarities - added apclusterK() method for sparse similarity matrices - preferenceRange() is now an S4 generic; re-implementation in C++ to speed up function; changed handling of -Inf similarities for consistency with sparse version - added preferenceRange() methods for sparse matrices and dense matrix objects from the 'Matrix' package - new conversion methods implemented for converting dense similarity matrices to sparse ones and vice versa; consequently, sparseToFull() is marked as deprecated. - adaptation of heatmap() function for improved handling of -Inf similarities - adaptations of signatures of '[' and '[[' accessor methods - renamed help page of methods for computing similarity matrices to 'similarities' in order to avoid confusion with the accessor method 'similarity' - corresponding updates of help pages and vignette Version 1.3.5: - memory access fixes in C++ code called from apclusterL() - minor updates of vignette Version 1.3.4: - added sort() function to rearrange clusters according to sort criterion; note that this is an S3 method (see help page for explanation) - improvements and bug fixes of apclusterL() method for signature 'matrix,missing' - performance optimizations of apcluster() and apclusterL() - plotting of clustering results superimposed in scatter plot matrices now also works for 'AggExResult' objects - improvements of consistency of error and warning messages - according adaptations of documentation and vignette - adapted dependency and linking to Rcpp version 0.11.1 (to avoid issues on Mac OS) - minor correction of package namespace Version 1.3.3: - adapted dependencies and linking to Rcpp version 0.11.0 - cleared up package dependencies Version 1.3.2: - plotting of clustering results extended to data sets with more than two dimensions (resulting in the clustering result being superimposed in a scatterplot matrix); the variant that plot() can be used to draw a heatmap has been removed. From now on, heatmap() must always be used. - improved NA handling - correction of input check in apcluster() and apclusterL() (previously, both functions issued a warning whenever argument p had length > 1) - corresponding updates and further improvements of help pages and vignette Version 1.3.1: - re-implementation of heatmap() method: dendrograms can now be plotted even for APResult and ExClust objects as well as for cluster hierarchies based on prior clusterings; color bars can now be switched off and colors can be changed by user (by new 'sideColor' argument); dendrograms can be switched on and off (by 'Rowv' and 'Colv' arguments); - added as.hclust() and as.dendrogram() methods - added new arguments 'base', 'showSamples', and 'horiz' to the plot() method with signature (x="AggExResult", y="missing"); moreover, parameters for changing the appearance of the height axis are now respected as well - streamlining of methods (redundant definition of inherited methods removed) - various minor improvements of code and documentation Version 1.3.0: - added Leveraged Affinity Propagation Clustering - re-implementation of main functions as S4 generic methods in order to facilitate the convenient internal computation of similarity matrices - for convenience, similarity matrices can be stored as part of clustering results - heatmap plotting now done by heatmap() which has been defined as S4 generic - extended interface to functions for computing similarity matrices - added function corSimMat() - implementation of length() method for classes APResult, AggExResult, and ExClust - added accessor function to extract clustering levels from AggExResult objects - correction of exemplars returned by apcluster() for details=TRUE in slot idxAll of returned APResult object - when using data stored in a data frame, now categorical columns are explicitly omitted, thereby, avoiding warnings - plotting of clustering results along with original data (2D only) has been accelerated - all clustering methods now store their calls into the result objects - updates and extensions of help pages and vignette Version 1.2.1: - added convenient accessor functions to extracting cluster indices from APResult and ExClust objects - added a function for coercing an APResult object into an ExClust object - correction of color bar on the left side of heatmaps (default behavior of RowSideColors parameter changed with R 2.15) Version 1.2.0: - reimplementation of apcluster() in C++ using the Rcpp package which reduces computation times by a factor of 9-10 - obsolete function apclusterLM() removed - updates of help pages and vignette Version 1.1.1: - updated citation - minor corrections in help pages and vignette Version 1.1.0: - exemplar-based agglomerative clustering (function aggExCluster()) added - added various plotting functions, e.g. for dendrograms and heatmaps - added sequence analysis example to vignette - extension of vignette according to new functionality - re-organization of variable names in vignette - added option 'verbose' to apclusterK() - numerous minor corrections in help pages and vignette Version 1.0.3: - Makefile in inst/doc eliminated to avoid installation problems - renamed vignette to "apcluster" Version 1.0.2: - replacement of computation of responsibilities and availabilities in apcluster() by pure matrix operations; traditional implementation according to Frey and Dueck still available as function apclusterLM(); - improved support for named objects - new function for computing label vectors - re-organization of package source files and help pages Version 1.0.1: - first public release