Rcsdp/0000755000175100001440000000000014414754524011355 5ustar hornikusersRcsdp/NAMESPACE0000644000175100001440000000212614342635402012566 0ustar hornikusersuseDynLib(Rcsdp, .registration = TRUE, .fixes = "C_") importFrom("methods", "as") importFrom("stats", "rnorm") export("csdp", "csdp_minimal", "csdp.control", "readsdpa", "writesdpa", "readsdpa.sol", "writesdpa.sol", "simple_triplet_sym_matrix", ".simple_triplet_zero_sym_matrix", ".simple_triplet_diag_sym_matrix", ".simple_triplet_random_sym_matrix") S3method("as.simple_triplet_sym_matrix","simple_triplet_sym_matrix") S3method("as.simple_triplet_sym_matrix","matrix") S3method("as.matrix","simple_triplet_sym_matrix") S3method("as.vector","simple_triplet_sym_matrix") S3method("dim","simple_triplet_sym_matrix") S3method("all.equal","simple_triplet_sym_matrix") S3method("as.simple_triplet_sym_matrix","dgeMatrix") S3method("as.simple_triplet_sym_matrix","dsyMatrix") S3method("as.simple_triplet_sym_matrix","dpoMatrix") S3method("as.simple_triplet_sym_matrix","dgTMatrix") S3method("as.simple_triplet_sym_matrix","dsCMatrix") S3method("as.simple_triplet_sym_matrix","dsTMatrix") S3method("as.simple_triplet_sym_matrix","ddiMatrix") Rcsdp/README.md0000644000175100001440000000051614346122453012630 0ustar hornikusers # Rcsdp This package is an R interface to the CSDP semidefinite programming library by Brian Borchers (https://github.com/coin-or/Csdp/) ## Installation You can install the released version of Rcsdp from [CRAN](https://CRAN.R-project.org) with: ``` r install.packages("Rcsdp") ``` Rcsdp/man/0000755000175100001440000000000014414754201012120 5ustar hornikusersRcsdp/man/readsdpa.Rd0000644000175100001440000000325014342635402014173 0ustar hornikusers\name{readsdpa} \alias{readsdpa} \alias{writesdpa} \alias{readsdpa.sol} \alias{writesdpa.sol} \title{Reading and writing semidefinite programs for SDPA format files.} \description{Functions to read and write semidefinite program data and solutions in SDPA format.} \usage{ readsdpa(file="",verbose=FALSE) writesdpa(C,A,b,K,file="") readsdpa.sol(K,C,m,file="") writesdpa.sol(X,Z,y,K,file="") } \arguments{ \item{file}{The name of the file to read from or write to.} \item{C}{Block structured cost matrix} \item{A}{List of block structured constraint matrices} \item{b}{RHS vector} \item{K}{Cone specification, as used in \code{\link{csdp}}} \item{X}{Block structured primal optimal solution matrix} \item{Z}{Block structured dual optimal solution matrix} \item{y}{Dual optimal solution vector} \item{verbose}{Printout information as problem is read. Passed to CSDP's readsdpa function. Default \code{FALSE}} \item{m}{Number of constraints in problem.} } \details{ Block structured matrices must be specified as described in \code{\link{csdp}}. Files read must be in SDPA format (see \url{http://euler.nmt.edu/~brian/sdplib/FORMAT}). However, these functions don't support comments or grouping characters (e.g. braces, parentheses) in the block sizes specification. } \value{ Function \code{readsdpa} returns a list with elements \code{C,A,b,K}. Function \code{readsdpa.sol} returns a list with elements \code{X,Z,y}. All returned matrices are lists of objects of class \code{simple_triplet_sym_matrix}. } \references{ \url{http://euler.nmt.edu/~brian/sdplib/FORMAT} } \author{Hector Corrada Bravo} \seealso{\code{\link{csdp}}} \examples{ # TO DO } Rcsdp/man/csdp-sparse.Rd0000644000175100001440000000447014414754201014640 0ustar hornikusers\name{csdp-sparse} \alias{simple_triplet_sym_matrix-class} \alias{simple_triplet_sym_matrix} \alias{as.simple_triplet_sym_matrix.matrix} \alias{as.matrix.simple_triplet_sym_matrix} \alias{as.vector.simple_triplet_sym_matrix} \alias{.simple_triplet_zero_sym_matrix} \alias{.simple_triplet_diag_sym_matrix} \alias{.simple_triplet_random_sym_matrix} \title{Simple support for sparse matrices} \description{Support for sparse matrices in package \code{Rcsdp}. The class \code{simple_triplet_sym_matrix} is defined to provide support for symmetric sparse matrices. It's definition is copied from the package \code{relations} by Kurt Hornik. Coercion functions from objects of class \code{matrix} and classes in the \code{Matrix} hierarchy are provided.} \usage{ simple_triplet_sym_matrix(i,j,v,n=max(c(i,j)),check.ind=FALSE) \method{as.simple_triplet_sym_matrix}{matrix}(x,check.sym=FALSE,...) \method{as.matrix}{simple_triplet_sym_matrix}(x,...) \method{as.vector}{simple_triplet_sym_matrix}(x,...) .simple_triplet_zero_sym_matrix(n,mode="double") .simple_triplet_diag_sym_matrix(x,n) .simple_triplet_random_sym_matrix(n,occ=.1,nnz=occ*n*(n+1)/2,rfun=rnorm,seed=NULL,...) } \arguments{ \item{i}{Row indices of non-zero entries.} \item{j}{Column indices of non-zero entries.} \item{v}{Non-zero entries.} \item{n}{Size of matrix.} \item{check.ind}{Checks that arguments \code{i} and \code{j} indicate entries in the lower triangular part of the matrix. Default \code{FALSE}.} \item{check.sym}{Checks if matrix object is symmetric. Default \code{FALSE}.} \item{x}{Object of class \code{matrix} or \code{simple_triplet_sym_matrix}.} \item{mode}{Type of zero matrix to create. Default \code{double}.} \item{occ}{Ratio of occupancy of random sparse matrix. Default \code{.1}.} \item{nnz}{Number of non-zero entries in random sparse matrix. Default corresponds to \code{occ=.1}.} \item{rfun}{Function to generate random entries in sparse matrix. Default \code{rnorm}.} \item{seed}{Random number generator seed. Set by function \code{set.seed} before generating random sparse matrix. Default \code{NULL}.} \item{...}{Arguments passed on to casting functions.} } \details{ TO DO } \value{ TO DO } \references{ TO DO } \author{Hector Corrada Bravo} \seealso{\link{csdp}} \keyword{utilities} \examples{ # TO DO } Rcsdp/man/csdp.control.Rd0000644000175100001440000000377614346122276015041 0ustar hornikusers\name{csdp.control} \alias{csdp.control} \title{ Pass control parameters to csdp solver. } \description{ Utility function to pass control parameters to csdp solver. } \usage{ csdp.control(axtol = 1e-08, atytol = 1e-08, objtol = 1e-08, pinftol = 1e+08, dinftol = 1e+08, maxiter = 100, minstepfrac = 0.9, maxstepfrac = 0.97, minstepp = 1e-08, minstepd = 1e-08, usexzgap = 1, tweakgap = 0, affine = 0, printlevel = 1, perturbobj = 1, fastmode = 0) } \arguments{ \item{axtol}{Tolerance for primal feasibility. } \item{atytol}{Tolerance for dual feasibility. } \item{objtol}{ Tolerance for relative duality gap. } \item{pinftol}{ Tolerance for primal infeasibility. } \item{dinftol}{ Tolerance for dual infeasibility. } \item{maxiter}{ Maximum number of iterations used. } \item{minstepfrac}{ Minimum distance to edge of feasibility region for step. } \item{maxstepfrac}{ Maximum distance to edge of feasibility region for step. } \item{minstepp}{ Failure is declared if primal line search step size is shorter than this parameter. } \item{minstepd}{ Failure is declared if dual line search step size is shorter that this parameter. } \item{usexzgap}{ If 0, then use objective function duality gap. } \item{tweakgap}{ If 1 (and \code{usexzgap}=0) then "fix" negative duality gaps. } \item{affine}{ If 1, only use affine primal-dual steps and do not use barrier function. } \item{printlevel}{ If 0, no printing, 1 normal printing, higher values result in more debug printing. } \item{perturbobj}{ Amount of objective permutation used. } \item{fastmode}{ If 1, csdp will be faster but also less accurate. } } \details{ Parameters are fully described in CSDP user guide. \url{https://github.com/coin-or/Csdp/}} \value{ A list with values for all parameters. Any parameters not passed to function are set to default. } \references{ \url{https://github.com/coin-or/Csdp/} } \author{ Hector Corrada Bravo, CSDP by Brian Borchers } \examples{ params <- csdp.control(axtol=1e-6) } Rcsdp/man/csdp.Rd0000644000175100001440000001531514346122264013347 0ustar hornikusers\name{csdp} \alias{csdp} \alias{csdp_minimal} %- Also NEED an '\alias' for EACH other topic documented here. \title{Solve semidefinite program with CSDP} \description{ Interface to CSDP semidefinite programming library. The general statement of the primal problem is \deqn{\max\, \mathrm{tr}(CX)}{max tr(CX)} \deqn{\mathrm{s.t.}\; A(X) = b}{s.t. A(X) = b} \deqn{X \succeq 0}{X >= 0} with \eqn{A(X)_i = \mathrm{tr}(A_iX)}{A(X)_i = tr(A_iX)} where \eqn{X \succeq 0}{X >= 0} means X is positive semidefinite, \eqn{C} and all \eqn{A_i} are symmetric matrices of the same size and \eqn{b} is a vector of length \eqn{m}. The dual of the problem is \deqn{\min\, b'y}{min b'y} \deqn{\mathrm{s.t.}\; A'(y) - C = Z}{s.t. A'(y) - C = Z} \deqn{Z \succeq 0}{Z >= 0} where \eqn{A'(y) = \sum_{i=1}^m y_i A_i.}{A'(y) = \sum_{i=1}^m y_i A_i.} Matrices \eqn{C} and \eqn{A_i} are assumed to be block diagonal structured, and must be specified that way (see Details). } \usage{ csdp(C, A, b, K,control=csdp.control()) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{C}{A list defining the block diagonal cost matrix \eqn{C}.} \item{A}{A list of length \eqn{m} containing block diagonal constraint matrices \eqn{A_i}. Each constraint matrix \eqn{A_i} is specified by a list of blocks as explained in the Details section.} \item{b}{A numeric vector of length \eqn{m} containing the right hand side of the constraints.} \item{K}{Describes the domain of each block of the sdp problem. It is a list with the following elements: \describe{ \item{type:}{A character vector with entries \code{"s"} or \code{"l"} indicating the type of each block. If the \code{j}th entry is \code{"s"}, then the \code{j}th block is a positive semidefinite matrix. otherwise, it is a vector with non-negative entries.} \item{size:}{A vector of integers indicating the dimension of each block.} }} \item{control}{Control parameters passed to csdp. See CSDP documentation.} } \details{ All problem matrices are assumed to be of block diagonal structure, and must be specified as follows: \enumerate{ \item If there are \code{nblocks} blocks specified by \code{K}, then the matrix must be a list with \code{nblocks} components. \item If \code{K$type == "s"} then the \code{j}th element of the list must define a symmetric matrix of size \code{K$size}. It can be an object of class \code{"matrix"}, \code{"simple_triplet_sym_matrix"}, or a valid class from the class hierarchy in the \code{"Matrix"} package. \item If \code{K$type == "l"} then the \code{j}th element of the list must be a numeric vector of length \code{K$size}. } This function checks that the blocks in arguments \code{C} and \code{A} agree with the sizes given in argument \code{K}. It also checks that the lengths of arguments \code{b} and \code{A} are equal. It does not check for symmetry in the problem data. \code{csdp_minimal} is a minimal wrapper to the C code underlying \code{csdp}. It assumes that the arguments \code{sum.block.sizes}, \code{nconstraints}, \code{nblocks}, \code{block.types}, and \code{block.sizes} are provided as if they were created by \code{Rcsdp:::prob.info} and that the arguments \code{C}, \code{A}, and \code{b} are provided as if they were created by \code{Rcsdp:::prepare.data}. This function may be useful when calling the csdp functionality iteratively and most of the optimization details stays the same. For example, when the control file created by \code{Rcsdp:::write.control.file} stays the same across iterations, but it would be recreated on each iteration by \code{csdp}. } \value{ \item{X}{Optimal primal solution \eqn{X}. A list containing blocks in the same structure as explained above. Each element is of class \code{"matrix"} or a numeric vector as appropriate.} \item{Z}{Optimal dual solution \eqn{Z}. A list containing blocks in the same structure as explained above. Each element is of class \code{"matrix"} or a numeric vector as appropriate.} \item{y}{Optimal dual solution \eqn{y}. A vector of the same length as argument \code{b}} \item{pobj}{Optimal primal objective value} \item{dobj}{Optimal dual objective value} \item{status}{Status of returned solution. \describe{ \item{0:}{Success. Problem solved to full accuracy} \item{1:}{Success. Problem is primal infeasible} \item{2:}{Success. Problem is dual infeasible} \item{3:}{Partial Success. Solution found but full accuracy was not achieved} \item{4:}{Failure. Maximum number of iterations reached} \item{5:}{Failure. Stuck at edge of primal feasibility} \item{6:}{Failure. Stuch at edge of dual infeasibility} \item{7:}{Failure. Lack of progress} \item{8:}{Failure. \eqn{X} or \eqn{Z} (or Newton system \eqn{O}) is singular} \item{9:}{Failure. Detected NaN or Inf values} } } } \references{ \itemize{ \item \url{https://github.com/coin-or/Csdp/} \item Borchers, B.:\cr \emph{CSDP, A C Library for Semidefinite Programming} Optimization Methods and Software 11(1):613-623, 1999\cr \url{http://euler.nmt.edu/~brian/csdppaper.pdf} \item Lu, F., Lin, Y., and Wahba, G.:\cr \emph{Robust Manifold Unfolding with Kernel Regularization} TR 1108, October, 2005. \cr \url{http://pages.stat.wisc.edu/~wahba/ftp1/tr1108rr.pdf} } } \author{Hector Corrada Bravo. CSDP written by Brian Borchers. } %\note{ ~~further notes~~ % % ~Make other sections like Warning with \section{Warning }{....} ~ %} %\seealso{ ~~objects to See Also as \code{\link{help}}, ~~~ } \examples{ C <- list(matrix(c(2,1, 1,2),2,2,byrow=TRUE), matrix(c(3,0,1, 0,2,0, 1,0,3),3,3,byrow=TRUE), c(0,0)) A <- list(list(matrix(c(3,1, 1,3),2,2,byrow=TRUE), matrix(0,3,3), c(1,0)), list(matrix(0,2,2), matrix(c(3,0,1, 0,4,0, 1,0,5),3,3,byrow=TRUE), c(0,1))) b <- c(1,2) K <- list(type=c("s","s","l"),size=c(2,3,2)) csdp(C,A,b,K) # Manifold Unrolling broken stick example # using simple triplet symmetric matrices X <- matrix(c(-1,-1, 0,0, 1,-1),nc=2,byrow=TRUE); d <- as.vector(dist(X)^2); d <- d[-2] C <- list(.simple_triplet_diag_sym_matrix(1,3)) A <- list(list(simple_triplet_sym_matrix(i=c(1,2,2),j=c(1,1,2),v=c(1,-1,1),n=3)), list(simple_triplet_sym_matrix(i=c(2,3,3),j=c(2,2,3),v=c(1,-1,1),n=3)), list(matrix(1,3,3))) K <- list(type="s",size=3) csdp(C,A,c(d,0),K) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{optimize} Rcsdp/DESCRIPTION0000644000175100001440000000220514414754524013062 0ustar hornikusersPackage: Rcsdp Version: 0.1.57.5 Title: R Interface to the CSDP Semidefinite Programming Library Authors@R: c( person("Hector", "Corrada Bravo", email="hcorrada@gmail.com", role=c("aut", "cre")), person("Florian", "Schwendinger", email="FlorianSchwendinger@gmx.at", role=c("ctb")), person("Brian", "Borchers", role="aut"), person("Don", "van den Bergh", role="ctb") ) Description: R interface to the CSDP semidefinite programming library. Installs version 6.1.1 of CSDP from the COIN-OR website if required. An existing installation of CSDP may be used by passing the proper configure arguments to the installation command. See the INSTALL file for further details. LazyLoad: yes Imports: methods Enhances: Matrix License: CPL-1.0 URL: https://github.com/coin-or/Csdp/ RoxygenNote: 7.0.2 BugReports: https://github.com/hcorrada/rcsdp/issues NeedsCompilation: yes Packaged: 2023-04-10 09:36:22 UTC; hornik Author: Hector Corrada Bravo [aut, cre], Florian Schwendinger [ctb], Brian Borchers [aut], Don van den Bergh [ctb] Maintainer: Hector Corrada Bravo Repository: CRAN Date/Publication: 2023-04-10 09:39:32 UTC Rcsdp/configure.ac0000644000175100001440000000574714342635645013662 0ustar hornikusersdnl R interface to CSDP semidefinite programming library dnl dnl By default the included CSDP code is built and linked, otherwise the user can supply dnl the location of the csdp library and includes, or the location of the csdp installation directory dnl dnl 1) If the user sets PKG_CFLAGS, PKG_CPPFLAGS and PKG_LIBS (all three) then these are used dnl dnl 2) If user provides location of the csdp installation we use the lib and include directories there dnl --with-csdp= dnl 3) If none of these are given the included CSDP code is built and linked dnl dnl Compiler flags for csdp can be given using --with-csdp-cflags AC_INIT([Rcsdp],[0.1.1]) FOUND_ALL="" dnl Check if global variables are already set, if so we are done if test [-n "$PKG_CFLAGS" -a -n "$PKG_CPPFLAGS" -a -n "$PKG_LIBS"] ; then FOUND_ALL="yes" else if test [-n "$PKG_CFLAGS" -o -n "$PKG_CPPFLAGS" -o -n "$PKG_LIBS"] ; then AC_MSG_ERROR([All three of PKG_CFLAGS PKG_CPPFLAGS and PKG_LIBS must be given together]) fi fi dnl get arguments AC_ARG_WITH([csdp-cflags], [AS_HELP_STRING([--with-csdp-cflags],[compiler flags for csdp])], CSDP_CFLAGS=$withval, CSDP_CFLAGS="") AC_ARG_WITH([csdp-dir], [AS_HELP_STRING([--with-csdp-dir],[specify location of csdp installation])], CSDP_DIR=$withval, CSDP_DIR="") if test [-z "$FOUND_ALL" -a -n "$CSDP_DIR"] ; then if test [! -d "$CSDP_DIR"] ; then AC_MSG_ERROR([CSDP installation directory $CSDP_DIR does not exist]) fi PKG_CPPFLAGS="-I$CSDP_DIR/include" PKG_LIBS="-L$CSDP_DIR/lib" FOUND_ALL="yes" fi dnl No location given so build and link provided csdp if test [-z "$FOUND_ALL"] ; then echo "Using bundled CSDP" PKG_CPPFLAGS="-ICsdp/include" PKG_LIBS="-LCsdp/lib" CSDP_TS="Csdp.ts" else CSDP_TS="" fi dnl Find the R home directory. : ${R_HOME=`R RHOME`} if test -z "${R_HOME}"; then echo "Could not determine R_HOME." exit 1 fi CC=`"${R_HOME}/bin/R" CMD config CC` dnl CPP=`"${R_HOME}/bin/R" CMD config CPP` CFLAGS=`"${R_HOME}/bin/R" CMD config CFLAGS` CPPFLAGS=`"${R_HOME}/bin/R" CMD config CPPFLAGS` LAPACK_LIBS=`"${R_HOME}/bin/R" CMD config LAPACK_LIBS` BLAS_LIBS=`"${R_HOME}/bin/R" CMD config BLAS_LIBS` FLIBS=`"${R_HOME}/bin/R" CMD config FLIBS` AC_PROG_CC AC_PROG_CPP PKG_LIBS="${PKG_LIBS} -lsdp ${LAPACK_LIBS} ${BLAS_LIBS} ${FLIBS} -lm" PKG_CFLAGS="-DNOSHORTS ${CSDP_CFLAGS}" dnl if given by user, check header and library if test [-n "$FOUND_ALL"] ; then LIBS="${PKG_LIBS}" CFLAGS="${CFLAGS} ${PKG_CFLAGS}" CPPFLAGS="${CPPFLAGS} ${PKG_CPPFLAGS}" AC_CHECK_HEADER(declarations.h) if test "${ac_cv_header_declarations_h}" == no; then AC_MSG_ERROR([CSDP header declarations.h not found in provided location]) fi AC_SEARCH_LIBS(easy_sdp,sdp,,AC_MSG_ERROR([Could not link CSDP library using $PKG_LIBS])) fi dnl substitute in src/Makevars.in AC_SUBST(PKG_CFLAGS) AC_SUBST(PKG_CPPFLAGS) AC_SUBST(PKG_LIBS) AC_SUBST(CSDP_TS) AC_CONFIG_FILES([src/Makevars]) AC_OUTPUT exit 0 Rcsdp/src/0000755000175100001440000000000014342635402012135 5ustar hornikusersRcsdp/src/convert.c0000644000175100001440000001765114342635402013773 0ustar hornikusers#include #include #include SEXP int_vector_csdp2R(int n, int *y) { SEXP ret; int i; int *intvec; ret = allocVector(INTSXP,n+1); intvec = INTEGER(ret); for (i=1; i<=n; i++) intvec[i] = y[i]; return ret; } SEXP double_vector_csdp2R(int n, double *y) { SEXP ret; int i; double *dblvec; ret = allocVector(REALSXP,n+1); dblvec = REAL(ret); for (i=1; i<=n; i++) dblvec[i] = y[i]; return ret; } int * int_vector_R2csdp(int n, SEXP y) { int *ret; int *intvec; int i; ret = (int *) malloc((n+1) * sizeof(int)); if (ret == NULL) return NULL; intvec = INTEGER(y); for (i=1; i<=n; i++) ret[i] = intvec[i]; return ret; } double * double_vector_R2csdp(int n, SEXP y) { double *ret; double *dblvec; int i; ret = (double *) malloc((n+1) * sizeof(double)); if (ret == NULL) return NULL; dblvec = REAL(y); for (i=1; i<=n; i++) ret[i] = dblvec[i]; return ret; } struct blockmatrix blkmatrix_R2csdp(SEXP X) { struct blockmatrix ret; SEXP blocks, cur_block; int nblocks, blksize, blktype, allocsize; int j, k; double *dblvec; enum blkmatrix_slots {NBLOCKS, BLOCKS}; enum blkrec_slots {BLOCKSIZE, BLOCKCATEGORY,DATA}; nblocks = INTEGER(VECTOR_ELT(X,NBLOCKS))[0]; blocks = VECTOR_ELT(X,BLOCKS); ret.nblocks = nblocks; ret.blocks = (struct blockrec *) malloc((nblocks + 1) * sizeof(struct blockrec)); if (ret.blocks == NULL) error("Error allocating blkmatrix blocks"); for (j=1; j<=nblocks; j++) { cur_block = VECTOR_ELT(blocks,j-1); blksize = INTEGER(VECTOR_ELT(cur_block,BLOCKSIZE))[0]; ret.blocks[j].blocksize = blksize; blktype = INTEGER(VECTOR_ELT(cur_block,BLOCKCATEGORY))[0]; ret.blocks[j].blockcategory = (blktype == 1) ? MATRIX : DIAG; if (blktype == MATRIX) { allocsize = blksize*blksize; ret.blocks[j].data.mat = (double *) malloc(allocsize * sizeof(double)); if (ret.blocks[j].data.mat == NULL) error("Error allocating block matrix data, s block"); dblvec = REAL(VECTOR_ELT(cur_block,DATA)); for (k=0; knext; } Ai = PROTECT(allocVector(VECSXP,nblocks)); ptr = constraints[i].blocks; for (j=1; j<=nblocks; j++) { Aij = PROTECT(allocVector(VECSXP,7)); nnz = ptr->numentries; numentries = PROTECT(allocVector(INTSXP,1)); INTEGER(numentries)[0] = nnz; SET_VECTOR_ELT(Aij, NUMENTRIES, numentries); blocknum = PROTECT(allocVector(INTSXP,1)); INTEGER(blocknum)[0] = ptr->blocknum; SET_VECTOR_ELT(Aij, BLOCKNUM, blocknum); blocksize = PROTECT(allocVector(INTSXP,1)); INTEGER(blocksize)[0] = ptr->blocksize; SET_VECTOR_ELT(Aij, BLOCKSIZE, blocksize); constraintnum = PROTECT(allocVector(INTSXP,1)); INTEGER(constraintnum)[0] = ptr->constraintnum; SET_VECTOR_ELT(Aij, CONSTRAINTNUM, constraintnum); iindices = PROTECT(int_vector_csdp2R(nnz, ptr->iindices)); SET_VECTOR_ELT(Aij,IIND, iindices); jindices = PROTECT(int_vector_csdp2R(nnz, ptr->jindices)); SET_VECTOR_ELT(Aij, JIND, jindices); entries = PROTECT(double_vector_csdp2R(nnz, ptr->entries)); SET_VECTOR_ELT(Aij, ENTRIES, entries); SET_VECTOR_ELT(Ai, j-1, Aij); UNPROTECT(8); ptr = ptr->next; } SET_VECTOR_ELT(ret, i-1, Ai); UNPROTECT(1); } } UNPROTECT(1); return ret; } struct constraintmatrix *constraints_R2csdp(SEXP A) { struct constraintmatrix *constraints; struct sparseblock *blockptr; int nconstraints, nblocks; SEXP Ai, Aij; int i,j; enum constraint_blockslots {IINDICES, JINDICES, ENTRIES, BLOCKNUM, BLOCKSIZE, CONSTRAINTNUM, NUMENTRIES}; nconstraints = LENGTH(A); constraints = (struct constraintmatrix *) malloc((nconstraints + 1) * sizeof(struct constraintmatrix)); if (constraints == NULL) error("Failed to allocate storage for constraints!\n"); for (i=1; i<=nconstraints; i++) { Ai = VECTOR_ELT(A,i-1); /* * Terminate block linked list with NULL */ constraints[i].blocks = NULL; nblocks = LENGTH(Ai); for (j=nblocks; j>=1; j--) { Aij = VECTOR_ELT(Ai,j-1); /* * Allocate block data structure */ blockptr = (struct sparseblock *) malloc(sizeof(struct sparseblock)); if (blockptr == NULL) error("Allocation of constraint block failed!\n"); /* * Initialize block data structure */ blockptr->blocknum=INTEGER(VECTOR_ELT(Aij,BLOCKNUM))[0]; blockptr->blocksize=INTEGER(VECTOR_ELT(Aij,BLOCKSIZE))[0]; blockptr->constraintnum=INTEGER(VECTOR_ELT(Aij,CONSTRAINTNUM))[0]; blockptr->next=NULL; blockptr->nextbyblock=NULL; blockptr->numentries=INTEGER(VECTOR_ELT(Aij,NUMENTRIES))[0]; /* * Enter data */ blockptr->iindices = int_vector_R2csdp(blockptr->numentries, VECTOR_ELT(Aij,IINDICES)); if (blockptr->iindices == NULL) error("Allocation of constraint block failed\n"); blockptr->jindices = int_vector_R2csdp(blockptr->numentries, VECTOR_ELT(Aij,JINDICES)); if (blockptr->jindices == NULL) error("Allocation of constraint block failed\n"); blockptr->entries = double_vector_R2csdp(blockptr->numentries, VECTOR_ELT(Aij,ENTRIES)); if (blockptr->entries == NULL) error("Allocation of constraint block failed\n"); /* * Insert block into linked list */ blockptr->next=constraints[i].blocks; constraints[i].blocks=blockptr; } } return constraints; } Rcsdp/src/Makevars.win0000644000175100001440000000043314342635402014425 0ustar hornikusersPKG_CFLAGS=-DNOSHORTS PKG_CPPFLAGS=-ICsdp/include PKG_LIBS=-LCsdp/lib -lsdp ${LAPACK_LIBS} ${BLAS_LIBS} ${FLIBS} -lm $(SHLIB): Csdp.ts Csdp.ts: cd Csdp/lib && $(MAKE) libsdp.a CC="$(CC)" CFLAGS="$(CFLAGS) $(CPICFLAGS) -DNOSHORTS -I../include" AR=$(AR) RANLIB=$(RANLIB) touch $@ Rcsdp/src/testing.c0000644000175100001440000000235214342635402013760 0ustar hornikusers#include #include #include SEXP int_vector_csdp2R(int, int*); SEXP double_vector_csdp2R(int, double*); int *int_vector_R2csdp(int, SEXP); double *double_vector_R2csdp(int, SEXP); struct blockmatrix blkmatrix_R2csdp(SEXP); SEXP blkmatrix_csdp2R(struct blockmatrix); SEXP constraints_csdp2R(int, struct constraintmatrix *); struct constraintmatrix *constraints_R2csdp(SEXP); void free_constraints(int, struct constraintmatrix *); SEXP test_int_vector(SEXP n_p, SEXP v) { int *vv, n; SEXP ret; n = INTEGER(n_p)[0]; vv = int_vector_R2csdp(n,v); ret = int_vector_csdp2R(n,vv); free(vv); return ret; } SEXP test_double_vector(SEXP n_p, SEXP v) { int n; double *vv; SEXP ret; n = INTEGER(n_p)[0]; vv = double_vector_R2csdp(n,v); ret = double_vector_csdp2R(n,vv); free(vv); return ret; } SEXP test_blkmatrix(SEXP X) { struct blockmatrix XX; SEXP ret; XX = blkmatrix_R2csdp(X); ret = blkmatrix_csdp2R(XX); free_mat(XX); return ret; } SEXP test_constraints(SEXP k_p, SEXP A) { int k; struct constraintmatrix *AA; SEXP ret; k = INTEGER(k_p)[0]; AA = constraints_R2csdp(A); ret = constraints_csdp2R(k,AA); free_constraints(k,AA); return ret; } Rcsdp/src/Rcsdp.c0000644000175100001440000001657714342635402013374 0ustar hornikusers/* * R interface to CSDP semidefinite programming library * * Created: Hector Corrada Bravo * February 22, 2008 */ #include #include #include #include // for NULL #include SEXP int_vector_csdp2R(int, int*); SEXP double_vector_csdp2R(int, double*); int *int_vector_R2csdp(int, SEXP); double *double_vector_R2csdp(int, SEXP); struct blockmatrix blkmatrix_R2csdp(SEXP); SEXP blkmatrix_csdp2R(struct blockmatrix); SEXP constraints_csdp2R(int, struct constraintmatrix *); struct constraintmatrix *constraints_R2csdp(SEXP); void free_constraints(int, struct constraintmatrix *); SEXP csdp(SEXP n_p, SEXP nconstraints_p, SEXP nblocks_p, SEXP blocktypes_p, SEXP blocksizes_p, SEXP C_p, SEXP A_p, SEXP b_p) { SEXP X_p, Z_p, y_p, ret, pobj_p, dobj_p, status_p; enum AIJ_SLOTS {AIJ_NNZ, AIJ_IIND, AIJ_JIND, AIJ_X}; int n, nblocks, nconstraints, *blocktypes, *blocksizes; struct blockmatrix C; struct constraintmatrix *constraints; struct blockmatrix X, Z; double *y, *b; double pobj, dobj; int status; n = INTEGER(n_p)[0]; nblocks = INTEGER(nblocks_p)[0]; nconstraints = INTEGER(nconstraints_p)[0]; blocktypes = INTEGER(blocktypes_p); blocksizes = INTEGER(blocksizes_p); /* * setup C */ C = blkmatrix_R2csdp(C_p); /* * setup constraints */ constraints = constraints_R2csdp(A_p); /* * Allocate storage for RHS */ b = double_vector_R2csdp(nconstraints,b_p); if (b==NULL) error("Failed to allocate storage for RHS vector b!\n"); /* * Create an initial solution. This allocates space for X, y, and Z, * and sets initial values */ initsoln(n,nconstraints,C,b,constraints,&X,&y,&Z); /* * Solve the problem */ status = easy_sdp(n,nconstraints,C,b,constraints,0.0,&X,&y,&Z,&pobj,&dobj); /* * Grab the results */ /* * Grab X */ X_p = PROTECT(blkmatrix_csdp2R(X)); /* * Grab Z */ Z_p = PROTECT(blkmatrix_csdp2R(Z)); /* Copy y */ y_p = PROTECT(double_vector_csdp2R(nconstraints, y)); pobj_p = PROTECT(allocVector(REALSXP,1)); REAL(pobj_p)[0] = pobj; dobj_p = PROTECT(allocVector(REALSXP,1)); REAL(dobj_p)[0] = dobj; status_p = PROTECT(allocVector(INTSXP,1)); INTEGER(status_p)[0] = status; free_prob(n,nconstraints,C,b,constraints,X,y,Z); ret = PROTECT(allocVector(VECSXP,6)); SET_VECTOR_ELT(ret,0,X_p); SET_VECTOR_ELT(ret,1,Z_p); SET_VECTOR_ELT(ret,2,y_p); SET_VECTOR_ELT(ret,3,pobj_p); SET_VECTOR_ELT(ret,4,dobj_p); SET_VECTOR_ELT(ret,5,status_p); UNPROTECT(7); return ret; } SEXP get_prob_info(struct blockmatrix X) { SEXP ret, types, sizes; int nblocks, i; int *intvec; nblocks = X.nblocks; PROTECT(ret = allocVector(VECSXP,2)); PROTECT(types = allocVector(INTSXP,nblocks+1)); intvec = INTEGER(types); for (i=1; i<=nblocks; i++) intvec[i] = X.blocks[i].blockcategory == MATRIX ? 1 : 2; SET_VECTOR_ELT(ret, 0, types); PROTECT(sizes = allocVector(INTSXP,nblocks+1)); intvec = INTEGER(sizes); for (i=1; i<=nblocks; i++) intvec[i] = X.blocks[i].blocksize; SET_VECTOR_ELT(ret, 1, sizes); UNPROTECT(3); return ret; } SEXP readsdpa(SEXP filename, SEXP verbose) { int n,k; struct blockmatrix C; double *b; struct constraintmatrix *constraints; int printlevel; int status; char *fname; SEXP ret; fname = (char *) CHAR(STRING_ELT(filename,0)); printlevel = INTEGER(verbose)[0]; status = read_prob(fname,&n,&k,&C,&b,&constraints,printlevel); if (status) error("Error reading sdpa file %s, status:%d\n",fname,status); ret = PROTECT(allocVector(VECSXP,4)); SET_VECTOR_ELT(ret,0,blkmatrix_csdp2R(C)); SET_VECTOR_ELT(ret,1,constraints_csdp2R(k,constraints)); SET_VECTOR_ELT(ret,2,double_vector_csdp2R(k,b)); SET_VECTOR_ELT(ret,3,get_prob_info(C)); free(b); free_mat(C); free_constraints(k,constraints); UNPROTECT(1); return ret; } SEXP readsdpa_sol(SEXP filename, SEXP n_p, SEXP k_p, SEXP C_p) { char *fname; int n, k, status; struct blockmatrix C; struct blockmatrix X; struct blockmatrix Z; double *y; SEXP ret, X_p, y_p, Z_p; n = INTEGER(n_p)[0]; k = INTEGER(k_p)[0]; C = blkmatrix_R2csdp(C_p); fname = (char *) CHAR(STRING_ELT(filename,0)); status = read_sol(fname,n,k,C,&X,&y,&Z); if (status) { free_mat(C); free_mat(X); free(y); free_mat(Z); error("Reading reading solution in file %s: status %d\n",fname,status); } ret = PROTECT(allocVector(VECSXP,3)); X_p = PROTECT(blkmatrix_csdp2R(X)); y_p = PROTECT(double_vector_csdp2R(k,y)); Z_p = PROTECT(blkmatrix_csdp2R(Z)); free_mat(C); free_mat(X); free(y); free_mat(Z); SET_VECTOR_ELT(ret, 0, X_p); SET_VECTOR_ELT(ret, 1, y_p); SET_VECTOR_ELT(ret, 2, Z_p); UNPROTECT(4); return ret; } SEXP writesdpa(SEXP filename, SEXP n_p, SEXP nconstraints_p, SEXP nblocks_p, SEXP blocktypes_p, SEXP blocksizes_p, SEXP C_p, SEXP A_p, SEXP b_p) { struct blockmatrix C; struct constraintmatrix *constraints; double *b; int n, nblocks, nconstraints, status; char *fname; SEXP ret; n = INTEGER(n_p)[0]; nblocks = INTEGER(nblocks_p)[0]; nconstraints = INTEGER(nconstraints_p)[0]; fname = (char *) CHAR(STRING_ELT(filename,0)); /* * setup C */ C = blkmatrix_R2csdp(C_p); /* * setup constraints */ constraints = constraints_R2csdp(A_p); /* * Allocate storage for RHS */ b = double_vector_R2csdp(nconstraints,b_p); if (b==NULL) error("Failed to allocate storage for RHS vector b!\n"); status = write_prob(fname,n,nconstraints,C,b,constraints); free_mat(C); free_constraints(nconstraints, constraints); free(b); PROTECT(ret = allocVector(INTSXP,1)); INTEGER(ret)[0] = status; UNPROTECT(1); return ret; } SEXP writesdpa_sol(SEXP filename, SEXP n_p, SEXP k_p, SEXP X_p, SEXP y_p, SEXP Z_p) { int n,k,status; struct blockmatrix X; struct blockmatrix Z; double *y; char *fname; SEXP ret; n = INTEGER(n_p)[0]; k = INTEGER(k_p)[0]; fname = (char *) CHAR(STRING_ELT(filename,0)); X = blkmatrix_R2csdp(X_p); Z = blkmatrix_R2csdp(Z_p); y = double_vector_R2csdp(k,y_p); status = write_sol(fname,n,k,X,y,Z); free_mat(X); free(y); free_mat(Z); PROTECT(ret = allocVector(INTSXP,1)); INTEGER(ret)[0] = status; UNPROTECT(1); return ret; } void free_constraints(int k, struct constraintmatrix *constraints) { int i; struct sparseblock *ptr; struct sparseblock *oldptr; if (constraints != NULL) { for (i=1; i<=k; i++) { /* * Get rid of constraint i. */ ptr=constraints[i].blocks; while (ptr != NULL) { free(ptr->entries); free(ptr->iindices); free(ptr->jindices); oldptr=ptr; ptr=ptr->next; free(oldptr); }; }; /* * Finally, free the constraints array. */ free(constraints); }; } static const R_CallMethodDef CallEntries[] = { {"csdp", (DL_FUNC) &csdp, 8}, {"readsdpa", (DL_FUNC) &readsdpa, 2}, {"readsdpa_sol", (DL_FUNC) &readsdpa_sol, 4}, {"writesdpa", (DL_FUNC) &writesdpa, 9}, {"writesdpa_sol", (DL_FUNC) &writesdpa_sol, 6}, {NULL, NULL, 0} }; void R_init_Rcsdp(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } Rcsdp/src/Makevars.in0000644000175100001440000000037714342635402014245 0ustar hornikusersPKG_CFLAGS=@PKG_CFLAGS@ PKG_CPPFLAGS=@PKG_CPPFLAGS@ PKG_LIBS=@PKG_LIBS@ $(SHLIB): @CSDP_TS@ Csdp.ts: (cd Csdp/lib && \ ($(MAKE) libsdp.a CC="$(CC)" CFLAGS="$(CFLAGS) $(CPICFLAGS) -DNOSHORTS -I../include" AR="$(AR)" RANLIB="$(RANLIB)") && \ touch $@) Rcsdp/src/Csdp/0000755000175100001440000000000014342635402013026 5ustar hornikusersRcsdp/src/Csdp/example/0000755000175100001440000000000014342635402014461 5ustar hornikusersRcsdp/src/Csdp/example/Makefile0000644000175100001440000001171414414754226016133 0ustar hornikusers# # Uncomment this line to specify the C compiler if the system default isn't # what you want to use. # #CC=cc # # Use this line to specify options for the C compiler. You'll probably # want to turn on optimizations. You may also have to use some of the # following flags: # # -DCAPSBLAS if BLAS routine names are capitalized. # -DCAPSLAPACK if LAPACK routine names are capitalized. # -DNOUNDERBLAS if BLAS routine names have no underscore. # -DNOUNDERLAPACK if LAPACK routine names have no underscore. # -DBIT64 For I32LP64 systems. # -DNOSHORTS Allow for (LP) blocks of more than 65535 variables. # -DUSEOPENMP To turn on OpenMP parallelization # -DSETNUMTHREADS To use with an OpenMP aware BLAS library. # # The default settings for gcc: # CFLAGS=-O3 -ansi -Wall -DNOSHORTS -I../include # # Notes on CFLAGS. # # 1. The -DNOSHORTS flag should always be used. When this is turned off, # it causes the code to use unsigned short integers (maximum value 65535) # in the data structures that describe the problem. This can cause problems # when some of the size parameters are larger than 65535. # # 2. By default, we assume that BLAS routines have names like ddot_(), # but some systems use ddot(), DDOT(), or DDOT_() instead. A similar issue # effects the LAPACK routines. The flags -DCAPSBLAS, -DCAPSLAPACK, # -DNOUNDERBLAS. and -DNOUNDERLAPACK are used to handle such situations. # # 3. The code can be built on 64 bit systems that use an I32LP64 model # in which int's are 32 bits, long's and pointers are 64 bits. Note that # that is the model on all 64 bit Linux and Unix systems that I'm aware of, # but it is not the model used by MS in its 64 bit Windows! To build a # 64 bit version of the code, use -DBIT64. You may also need to add a CFLAG # to tell your compiler to produce 64 bit code. For example, with gcc, # you'll need to add "-m64" to CFLAGS to produce 64 bit code. # # 4. If you have multiple CPU's, and if your compiler supports OpenMP, then # you should definitely build a parallel version of CSDP. To do this, # add "-DUSEOPENMP" to CFLAGS. If your BLAS/LAPACK library routines # use OpenMP's conventions for setting the number of threads to use, then # you should also add "-DSETNUMTHREADS". Note that ATLAS does not # currently work with "-DSETNUMTHREADS", but you can use SETNUMTHREADS # on Solaris with -lsunperf and AIX systems with -lesslsmp. # 5. Using gcc, you can greatly improve the efficency of the code if you # specify your processor type. Examples are given below, use the default # if you are unsure. More examples may be found at # # http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html # # An AMD Athlon XP based machine: # CFLAGS=-march=athlon-xp -O3 -ansi -Wall -DNOSHORTS -I../include # An Intel Pentum 4 based amchine: # CFLAGS=-march=pentum4 -O3 -ansi -Wall -DNOSHORTS -I../include # # 6. If you change the CFLAGS, make sure that you use the same CFLAGS # in the Makefiles in the solver and theta directories! # # The code depends on several libraries: # # sdp The CSDP subroutine library # lapack The LAPACK linear algebra library # blas The BLAS basic linear algebra library # # In addition, if you're using gcc to compile the C code, then you'll need: # # gfortran The gnu C/Fortran 77 compatibility library # m The C math run time library. # # # Use this line to specify where the SDP and linear algebra libraries are # to be found. # # -L../lib look in the ../lib directory # -lsdp get libsdp.a from the ../lib directory # -llapack get liblapack.a or liblapack.so # -lblas get libblas.a or libblas.so # -lgfortran get libgfortran.a or libgfortran.so # -lm get libm.a or libm.so # # The default settings for a Linux system with gcc3, lapack, blas, and # gfortran: # LIBS=-L../lib -lsdp -llapack -lblas -lgfortran -lm # # 1. Warning about debian systems. For some absurb reason, the BLAS # package in debian has the BLAS library named libblas-3.a, rather than # libblas.a. You can either modify the LIBS= line, or you can create # a symbolic link from /usr/lib/libblas.a to /usr/lib/libblas-3.a. # # 2. An alternative set of flags for use with the ATLAS BLAS on a Linux system. # # LIBS=-L../lib -lsdp -llapack -lf77blas -lcblas -latlas -lgfortran -lm # # 3. Special note on gcc 4. For gcc versions before gcc 4.0, -lgfortran # should be replaced by -lg2c. # # 4. An alternative set of flags for use with the ATLAS BLAS, gcc 4.2, and # OpenMP on a linux system. # # LIBS=-L../lib -lsdp -llapack -lptf77blas -lptcblas -latlas -lgomp -lrt -lpthread -lgfortran -lm # # # Target all builds everything. # all: example # # This builds the example code. # example: example.o $(CC) $(CFLAGS) example.o $(LIBS) -o example # # To clean up the directory. # clean: rm -f *.o rm -f example rm -f prob.dat-s rm -f prob.sol Rcsdp/src/Csdp/example/example.c0000644000175100001440000003044714342635402016270 0ustar hornikusers/* An example showing how to call the easy_sdp() interface to CSDP. In this example, we solve the problem max tr(C*X) tr(A1*X)=1 tr(A2*X)=2 X >= 0 (X is PSD) where C=[2 1 1 2 3 0 1 0 2 0 1 0 3 0 0] A1=[3 1 1 3 0 0 0 0 0 0 0 0 0 1 0] A2=[0 0 0 0 3 0 1 0 4 0 1 0 5 0 1] Notice that all of the matrices have block diagonal structure. The first block is of size 2x2. The second block is of size 3x3. The third block is a diagonal block of size 2. */ /* * These standard declarations for the C library are needed. */ #include #include /* * Include CSDP declarations so that we'll know the calling interfaces. */ #include "declarations.h" /* * The main program. Setup data structures with the problem data, write * the problem out in SDPA sparse format, and then solve the problem. */ int main() { /* * The problem and solution data. */ struct blockmatrix C; double *b; struct constraintmatrix *constraints; /* * Storage for the initial and final solutions. */ struct blockmatrix X,Z; double *y; double pobj,dobj; /* * blockptr will be used to point to blocks in constraint matrices. */ struct sparseblock *blockptr; /* * A return code for the call to easy_sdp(). */ int ret; /* * The first major task is to setup the C matrix and right hand side b. */ /* * First, allocate storage for the C matrix. We have three blocks, but * because C starts arrays with index 0, we have to allocate space for * four blocks- we'll waste the 0th block. Notice that we check to * make sure that the malloc succeeded. */ C.nblocks=3; C.blocks=(struct blockrec *)malloc(4*sizeof(struct blockrec)); if (C.blocks == NULL) { printf("Couldn't allocate storage for C!\n"); exit(1); }; /* * Setup the first block. */ C.blocks[1].blockcategory=MATRIX; C.blocks[1].blocksize=2; C.blocks[1].data.mat=(double *)malloc(2*2*sizeof(double)); if (C.blocks[1].data.mat == NULL) { printf("Couldn't allocate storage for C!\n"); exit(1); }; /* * Put the entries into the first block. */ C.blocks[1].data.mat[ijtok(1,1,2)]=2.0; C.blocks[1].data.mat[ijtok(1,2,2)]=1.0; C.blocks[1].data.mat[ijtok(2,1,2)]=1.0; C.blocks[1].data.mat[ijtok(2,2,2)]=2.0; /* * Setup the second block. */ C.blocks[2].blockcategory=MATRIX; C.blocks[2].blocksize=3; C.blocks[2].data.mat=(double *)malloc(3*3*sizeof(double)); if (C.blocks[2].data.mat == NULL) { printf("Couldn't allocate storage for C!\n"); exit(1); }; /* * Put the entries into the second block. */ C.blocks[2].data.mat[ijtok(1,1,3)]=3.0; C.blocks[2].data.mat[ijtok(1,2,3)]=0.0; C.blocks[2].data.mat[ijtok(1,3,3)]=1.0; C.blocks[2].data.mat[ijtok(2,1,3)]=0.0; C.blocks[2].data.mat[ijtok(2,2,3)]=2.0; C.blocks[2].data.mat[ijtok(2,3,3)]=0.0; C.blocks[2].data.mat[ijtok(3,1,3)]=1.0; C.blocks[2].data.mat[ijtok(3,2,3)]=0.0; C.blocks[2].data.mat[ijtok(3,3,3)]=3.0; /* * Setup the third block. Note that we have to allocate space for 3 * entries because C starts array indexing with 0 rather than 1. */ C.blocks[3].blockcategory=DIAG; C.blocks[3].blocksize=2; C.blocks[3].data.vec=(double *)malloc((2+1)*sizeof(double)); if (C.blocks[3].data.vec == NULL) { printf("Couldn't allocate storage for C!\n"); exit(1); }; /* * Put the entries into the third block. */ C.blocks[3].data.vec[1]=0.0; C.blocks[3].data.vec[2]=0.0; /* * Allocate storage for the right hand side, b. */ b=(double *)malloc((2+1)*sizeof(double)); if (b==NULL) { printf("Failed to allocate storage for a!\n"); exit(1); }; /* * Fill in the entries in b. */ b[1]=1.0; b[2]=2.0; /* * The next major step is to setup the two constraint matrices A1 and A2. * Again, because C indexing starts with 0, we have to allocate space for * one more constraint. constraints[0] is not used. */ constraints=(struct constraintmatrix *)malloc( (2+1)*sizeof(struct constraintmatrix)); if (constraints==NULL) { printf("Failed to allocate storage for constraints!\n"); exit(1); }; /* * Setup the A1 matrix. Note that we start with block 3 of A1 and then * do block 1 of A1. We do this in this order because the blocks will * be inserted into the linked list of A1 blocks in reverse order. */ /* * Terminate the linked list with a NULL pointer. */ constraints[1].blocks=NULL; /* * Now, we handle block 3 of A1. */ /* * Allocate space for block 3 of A1. */ blockptr=(struct sparseblock *)malloc(sizeof(struct sparseblock)); if (blockptr==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * Initialize block 3. */ blockptr->blocknum=3; blockptr->blocksize=2; blockptr->constraintnum=1; blockptr->next=NULL; blockptr->nextbyblock=NULL; blockptr->entries=(double *) malloc((1+1)*sizeof(double)); if (blockptr->entries==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->iindices=(int *) malloc((1+1)*sizeof(int)); if (blockptr->iindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->jindices=(int *) malloc((1+1)*sizeof(int)); if (blockptr->jindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * We have 1 nonzero entry in the upper triangle of block 3 of A1. */ blockptr->numentries=1; /* * The entry in the 1,1 position of block 3 of A1 is 1.0 */ blockptr->iindices[1]=1; blockptr->jindices[1]=1; blockptr->entries[1]=1.0; /* * Note that the entry in the 2,2 position of block 3 of A1 is 0, * So we don't store anything for it. */ /* * Insert block 3 into the linked list of A1 blocks. */ blockptr->next=constraints[1].blocks; constraints[1].blocks=blockptr; /* * Now, we handle block 1. */ /* * Allocate space for block 1. */ blockptr=(struct sparseblock *)malloc(sizeof(struct sparseblock)); if (blockptr==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * Initialize block 1. */ blockptr->blocknum=1; blockptr->blocksize=2; blockptr->constraintnum=1; blockptr->next=NULL; blockptr->nextbyblock=NULL; blockptr->entries=(double *) malloc((3+1)*sizeof(double)); if (blockptr->entries==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->iindices=(int *) malloc((3+1)*sizeof(int)); if (blockptr->iindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->jindices=(int *) malloc((3+1)*sizeof(int)); if (blockptr->jindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * We have 3 nonzero entries in the upper triangle of block 1 of A1. */ blockptr->numentries=3; /* * The entry in the 1,1 position of block 1 of A1 is 3.0 */ blockptr->iindices[1]=1; blockptr->jindices[1]=1; blockptr->entries[1]=3.0; /* * The entry in the 1,2 position of block 1 of A1 is 1.0 */ blockptr->iindices[2]=1; blockptr->jindices[2]=2; blockptr->entries[2]=1.0; /* * The entry in the 2,2 position of block 1 of A1 is 3.0 */ blockptr->iindices[3]=2; blockptr->jindices[3]=2; blockptr->entries[3]=3.0; /* * Note that we don't have to store the 2,1 entry- this is assumed to be * equal to the 1,2 entry. */ /* * Insert block 1 into the linked list of A1 blocks. */ blockptr->next=constraints[1].blocks; constraints[1].blocks=blockptr; /* * Note that the second block of A1 is 0, so we didn't store anything for it. */ /* * Setup the A2 matrix. This time, there are nonzero entries in block 3 * and block 2. We start with block 3 of A2 and then do block 1 of A2. */ /* * Terminate the linked list with a NULL pointer. */ constraints[2].blocks=NULL; /* * First, we handle block 3 of A2. */ /* * Allocate space for block 3 of A2. */ blockptr=(struct sparseblock *)malloc(sizeof(struct sparseblock)); if (blockptr==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * Initialize block 3. */ blockptr->blocknum=3; blockptr->blocksize=2; blockptr->constraintnum=2; blockptr->next=NULL; blockptr->nextbyblock=NULL; blockptr->entries=(double *) malloc((1+1)*sizeof(double)); if (blockptr->entries==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->iindices=(int *) malloc((1+1)*sizeof(int)); if (blockptr->iindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->jindices=(int *) malloc((1+1)*sizeof(int)); if (blockptr->jindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * We have 1 nonzero entry in the upper triangle of block 3 of A2. */ blockptr->numentries=1; /* * The entry in the 2,2 position of block 3 of A2 is 1.0 */ blockptr->iindices[1]=2; blockptr->jindices[1]=2; blockptr->entries[1]=1.0; /* * Insert block 3 into the linked list of A2 blocks. */ blockptr->next=constraints[2].blocks; constraints[2].blocks=blockptr; /* * Now, we handle block 2. */ /* * Allocate space for block 2. */ blockptr=(struct sparseblock *)malloc(sizeof(struct sparseblock)); if (blockptr==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * Initialize block 2. */ blockptr->blocknum=2; blockptr->blocksize=3; blockptr->constraintnum=2; blockptr->next=NULL; blockptr->nextbyblock=NULL; blockptr->entries=(double *) malloc((4+1)*sizeof(double)); if (blockptr->entries==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->iindices=(int *) malloc((4+1)*sizeof(int)); if (blockptr->iindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->jindices=(int *) malloc((4+1)*sizeof(int)); if (blockptr->jindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * We have 4 nonzero entries in the upper triangle of block 2 of A2. */ blockptr->numentries=4; /* * The entry in the 1,1 position of block 2 of A2 is 3.0 */ blockptr->iindices[1]=1; blockptr->jindices[1]=1; blockptr->entries[1]=3.0; /* * The entry in the 2,2 position of block 2 of A2 is 4.0 */ blockptr->iindices[2]=2; blockptr->jindices[2]=2; blockptr->entries[2]=4.0; /* * The entry in the 3,3 position of block 2 of A2 is 5.0 */ blockptr->iindices[3]=3; blockptr->jindices[3]=3; blockptr->entries[3]=5.0; /* * The entry in the 1,3 position of block 2 of A2 is 1.0 */ blockptr->iindices[4]=1; blockptr->jindices[4]=3; blockptr->entries[4]=1.0; /* * Note that we don't store the 0 entries and entries below the diagonal! */ /* * Insert block 2 into the linked list of A2 blocks. */ blockptr->next=constraints[2].blocks; constraints[2].blocks=blockptr; /* * At this point, we have all of the problem data setup. */ /* * Write the problem out in SDPA sparse format. */ write_prob("prob.dat-s",7,2,C,b,constraints); /* * Create an initial solution. This allocates space for X, y, and Z, * and sets initial values. */ initsoln(7,2,C,b,constraints,&X,&y,&Z); /* * Solve the problem. */ ret=easy_sdp(7,2,C,b,constraints,0.0,&X,&y,&Z,&pobj,&dobj); if (ret == 0) printf("The objective value is %.7e \n",(dobj+pobj)/2); else printf("SDP failed.\n"); /* * Write out the problem solution. */ write_sol("prob.sol",7,2,X,y,Z); /* * Free storage allocated for the problem and return. */ free_prob(7,2,C,b,constraints,X,y,Z); exit(0); } Rcsdp/src/Csdp/README0000644000175100001440000000402714342635402013711 0ustar hornikusersCopyright 1997-2006, Brian Borchers. This copy of CSDP is made available under the Common Public License. See LICENCE for the details of the CPL. CSDP is a software package for solving semidefinite programming problems. The algorithm is a predictor-corrector version of the primal-dual barrier method of Helmberg, Rendl, Vanderbei, and Wolkowicz. This file includes source for a C code for SDP that uses BLAS and LAPACK subroutines. The directories are as follows: doc documentation. lib C source for libsdp.a. include Common include files used in lib, theta, and solver. solver C source for a program that reads in problems in SDPA sparse format and solves them. theta A code for computing the Lovasz Theta number of a graph. The theta code solves this problem directly. A program called graphtoprob can be used to produce a problem file in SDPA sparse format. Also includes a random graph generator and a program to compute the complement of a graph. example A very simple example of how to use the easy_sdp() routine. This code solves a problem with 2 constraints and 3 blocks in the block diagonal X matrix. This example is discussed in the user's guide. test This directory contains test problems to verify that the code works correctly. matlab MATLAB/Octave routines for interfacing to CSDP. Installation: See the INSTALL file Contact/Support: If you are having trouble compiling or running the code, see the doc directory first. The project's website can be found at . The project's maintainer can be reached by email at borchers@nmt.edu. All bug reports and feature requests can be made here: , . Rcsdp/src/Csdp/LICENSE0000644000175100001440000002704314342635402014041 0ustar hornikusersCommon Public License Version 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. Rcsdp/src/Csdp/doc/0000755000175100001440000000000014342635402013573 5ustar hornikusersRcsdp/src/Csdp/doc/cmat.fig0000644000175100001440000001017014342635402015205 0ustar hornikusers#FIG 3.2 Produced by xfig version 3.2.5-alpha5 Landscape Center Metric A4 100.00 Single -2 1200 2 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 900 6750 43 43 900 6750 943 6750 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 900 5400 43 43 900 5400 943 5400 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 900 4050 43 43 900 4050 943 4050 1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 900 900 43 43 900 900 943 900 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 225 675 225 450 225 675 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 225 675 1575 675 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 225 225 225 1125 1575 1125 1575 225 225 225 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 225 2025 1575 2025 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 225 2475 1575 2475 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 225 3375 1575 3375 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 225 3825 1575 3825 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 225 4725 1575 4725 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 225 5175 1575 5175 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 225 6525 1575 6525 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 2250 225 2250 2025 2700 2025 2700 225 2250 225 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 3600 225 3600 4275 4050 4275 4050 225 3600 225 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3600 675 4050 675 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3600 1125 4050 1125 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3600 1575 4050 1575 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3600 2025 4050 2025 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3600 2475 4050 2475 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3600 2925 4050 2925 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3600 3375 4050 3375 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3600 3825 4050 3825 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 2250 675 2700 675 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 2250 1125 2700 1125 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 225 1575 225 2925 1575 2925 1575 1575 225 1575 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 225 2925 225 4275 1575 4275 1575 2925 225 2925 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 225 4275 225 5625 1575 5625 1575 4275 225 4275 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 225 5625 225 6975 1575 6975 1575 5625 225 5625 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 2 1 1.00 60.00 120.00 900 900 900 1575 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 225 6075 1575 6075 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 6 1 1 1.00 60.00 120.00 900 5400 1800 5400 1800 4725 3150 4725 3150 450 3600 450 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 2475 5400 2475 6750 2925 6750 2925 5400 2475 5400 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 2475 6300 2925 6300 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 2475 5850 2925 5850 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 900 4050 2025 4050 2025 450 2250 450 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 900 6750 2025 6750 2025 5625 2475 5625 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 2250 1575 2700 1575 4 0 0 50 -1 1 24 0.0000 0 270 195 2340 630 2\001 4 0 0 50 -1 1 24 0.0000 0 270 195 2340 1080 1\001 4 0 0 50 -1 1 24 0.0000 0 270 195 2340 1980 2\001 4 0 0 50 -1 1 24 0.0000 0 270 195 2340 1530 1\001 4 0 0 50 -1 1 24 0.0000 0 270 195 3690 630 3\001 4 0 0 50 -1 1 24 0.0000 0 270 195 3690 1080 0\001 4 0 0 50 -1 1 24 0.0000 0 270 195 3690 1530 1\001 4 0 0 50 -1 1 24 0.0000 0 270 195 3690 1980 0\001 4 0 0 50 -1 1 24 0.0000 0 270 195 3690 2430 2\001 4 0 0 50 -1 1 24 0.0000 0 270 195 3690 2880 0\001 4 0 0 50 -1 1 24 0.0000 0 270 195 3690 3330 1\001 4 0 0 50 -1 1 24 0.0000 0 270 195 3690 3780 0\001 4 0 0 50 -1 1 24 0.0000 0 270 195 3690 4230 3\001 4 0 0 50 -1 1 24 0.0000 0 270 195 720 6030 2\001 4 0 0 50 -1 1 24 0.0000 0 270 195 720 4680 3\001 4 0 0 50 -1 1 24 0.0000 0 270 195 720 3330 2\001 4 0 0 50 -1 1 24 0.0000 0 45 270 720 2790 --\001 4 0 0 50 -1 1 24 0.0000 0 45 270 720 2340 --\001 4 0 0 50 -1 1 24 0.0000 0 45 270 720 1890 --\001 4 0 0 50 -1 1 16 0.0000 0 195 1095 360 3690 MATRIX\001 4 0 0 50 -1 1 16 0.0000 0 195 1095 360 5040 MATRIX\001 4 0 0 50 -1 1 16 0.0000 0 195 720 450 6390 DIAG\001 4 0 0 50 -1 1 24 0.0000 0 45 135 2610 5670 -\001 4 0 0 50 -1 1 24 0.0000 0 270 195 2610 6210 0\001 4 0 0 50 -1 1 24 0.0000 0 270 195 2610 6660 0\001 4 0 0 50 -1 1 24 0.0000 0 270 195 810 630 3\001 Rcsdp/src/Csdp/doc/cmat.eps0000644000175100001440000002515114342635402015234 0ustar hornikusers%!PS-Adobe-2.0 EPSF-2.0 %%Title: cmat.fig %%Creator: fig2dev Version 3.2 Patchlevel 5-alpha5 %%CreationDate: Thu Aug 10 21:32:52 2006 %%For: brian@bullwinkle (brian,,,) %%BoundingBox: 0 0 244 428 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 428 moveto 0 0 lineto 244 0 lineto 244 428 lineto closepath clip newpath -12.8 440.8 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /reencdict 12 dict def /ReEncode { reencdict begin /newcodesandnames exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def basefontdict { exch dup /FID ne { dup /Encoding eq { exch dup length array copy newfont 3 1 roll put } { exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall newfont /FontName newfontname put newcodesandnames aload pop 128 1 255 { newfont /Encoding get exch /.notdef put } for newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat newfontname newfont definefont pop end } def /isovec [ 8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde 8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis 8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron 8#220 /dotlessi 8#230 /oe 8#231 /OE 8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling 8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis 8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot 8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus 8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph 8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine 8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf 8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute 8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring 8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute 8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute 8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve 8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply 8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex 8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave 8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring 8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute 8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute 8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve 8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide 8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex 8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def /Times-Roman /Times-Roman-iso isovec ReEncode /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06299 0.06299 sc % % Fig objects follow % % % here starts figure with depth 50 % Ellipse 7.500 slw n 900 6750 43 43 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 900 5400 43 43 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 900 4050 43 43 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 900 900 43 43 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Polyline 0 slj 0 slc n 225 675 m 225 450 l 225 675 l cp gs col0 s gr % Polyline n 225 675 m 1575 675 l gs col0 s gr % Polyline 15.000 slw n 225 225 m 225 1125 l 1575 1125 l 1575 225 l 225 225 l cp gs col0 s gr % Polyline 7.500 slw n 225 2025 m 1575 2025 l gs col0 s gr % Polyline n 225 2475 m 1575 2475 l gs col0 s gr % Polyline n 225 3375 m 1575 3375 l gs col0 s gr % Polyline n 225 3825 m 1575 3825 l gs col0 s gr % Polyline n 225 4725 m 1575 4725 l gs col0 s gr % Polyline n 225 5175 m 1575 5175 l gs col0 s gr % Polyline n 225 6525 m 1575 6525 l gs col0 s gr % Polyline 15.000 slw n 2250 225 m 2250 2025 l 2700 2025 l 2700 225 l 2250 225 l cp gs col0 s gr % Polyline n 3600 225 m 3600 4275 l 4050 4275 l 4050 225 l 3600 225 l cp gs col0 s gr % Polyline 7.500 slw n 3600 675 m 4050 675 l gs col0 s gr % Polyline n 3600 1125 m 4050 1125 l gs col0 s gr % Polyline n 3600 1575 m 4050 1575 l gs col0 s gr % Polyline n 3600 2025 m 4050 2025 l gs col0 s gr % Polyline n 3600 2475 m 4050 2475 l gs col0 s gr % Polyline n 3600 2925 m 4050 2925 l gs col0 s gr % Polyline n 3600 3375 m 4050 3375 l gs col0 s gr % Polyline n 3600 3825 m 4050 3825 l gs col0 s gr % Polyline n 2250 675 m 2700 675 l gs col0 s gr % Polyline n 2250 1125 m 2700 1125 l gs col0 s gr % Polyline 15.000 slw n 225 1575 m 225 2925 l 1575 2925 l 1575 1575 l 225 1575 l cp gs col0 s gr % Polyline n 225 2925 m 225 4275 l 1575 4275 l 1575 2925 l 225 2925 l cp gs col0 s gr % Polyline n 225 4275 m 225 5625 l 1575 5625 l 1575 4275 l 225 4275 l cp gs col0 s gr % Polyline n 225 5625 m 225 6975 l 1575 6975 l 1575 5625 l 225 5625 l cp gs col0 s gr % Polyline 7.500 slw gs clippath 870 1385 m 870 1590 l 930 1590 l 930 1385 l 930 1385 l 900 1535 l 870 1385 l cp eoclip n 900 900 m 900 1575 l gs col0 s gr gr % arrowhead n 870 1385 m 900 1535 l 930 1385 l 900 1415 l 870 1385 l cp gs 0.00 setgray ef gr col0 s % Polyline n 225 6075 m 1575 6075 l gs col0 s gr % Polyline gs clippath 3448 480 m 3615 480 l 3615 420 l 3448 420 l 3448 420 l 3568 450 l 3448 480 l cp eoclip n 900 5400 m 1800 5400 l 1800 4725 l 3150 4725 l 3150 450 l 3600 450 l gs col0 s gr gr % arrowhead n 3448 480 m 3568 450 l 3448 420 l 3448 480 l cp gs 0.00 setgray ef gr col0 s % Polyline 15.000 slw n 2475 5400 m 2475 6750 l 2925 6750 l 2925 5400 l 2475 5400 l cp gs col0 s gr % Polyline 7.500 slw n 2475 6300 m 2925 6300 l gs col0 s gr % Polyline n 2475 5850 m 2925 5850 l gs col0 s gr % Polyline gs clippath 2098 480 m 2265 480 l 2265 420 l 2098 420 l 2098 420 l 2218 450 l 2098 480 l cp eoclip n 900 4050 m 2025 4050 l 2025 450 l 2250 450 l gs col0 s gr gr % arrowhead n 2098 480 m 2218 450 l 2098 420 l 2098 480 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2323 5655 m 2490 5655 l 2490 5595 l 2323 5595 l 2323 5595 l 2443 5625 l 2323 5655 l cp eoclip n 900 6750 m 2025 6750 l 2025 5625 l 2475 5625 l gs col0 s gr gr % arrowhead n 2323 5655 m 2443 5625 l 2323 5595 l 2323 5655 l cp gs 0.00 setgray ef gr col0 s % Polyline n 2250 1575 m 2700 1575 l gs col0 s gr /Times-Roman-iso ff 381.00 scf sf 2340 630 m gs 1 -1 sc (2) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 2340 1080 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 2340 1980 m gs 1 -1 sc (2) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 2340 1530 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 3690 630 m gs 1 -1 sc (3) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 3690 1080 m gs 1 -1 sc (0) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 3690 1530 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 3690 1980 m gs 1 -1 sc (0) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 3690 2430 m gs 1 -1 sc (2) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 3690 2880 m gs 1 -1 sc (0) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 3690 3330 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 3690 3780 m gs 1 -1 sc (0) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 3690 4230 m gs 1 -1 sc (3) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 720 6030 m gs 1 -1 sc (2) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 720 4680 m gs 1 -1 sc (3) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 720 3330 m gs 1 -1 sc (2) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 720 2790 m gs 1 -1 sc (--) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 720 2340 m gs 1 -1 sc (--) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 720 1890 m gs 1 -1 sc (--) col0 sh gr /Times-Roman-iso ff 254.00 scf sf 360 3690 m gs 1 -1 sc (MATRIX) col0 sh gr /Times-Roman-iso ff 254.00 scf sf 360 5040 m gs 1 -1 sc (MATRIX) col0 sh gr /Times-Roman-iso ff 254.00 scf sf 450 6390 m gs 1 -1 sc (DIAG) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 2610 5670 m gs 1 -1 sc (-) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 2610 6210 m gs 1 -1 sc (0) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 2610 6660 m gs 1 -1 sc (0) col0 sh gr /Times-Roman-iso ff 381.00 scf sf 810 630 m gs 1 -1 sc (3) col0 sh gr % here ends figure; $F2psEnd rs showpage %%Trailer %EOF Rcsdp/src/Csdp/doc/README0000644000175100001440000000034214342635402014452 0ustar hornikusersThis directory contains the PDF output and LaTeX source for the CSDP User's Guide, together with some figures used in the guide. There should be no need to run pdflatex on the source since the .pdf file is already available. Rcsdp/src/Csdp/doc/cmat.pdf0000644000175100001440000011112014342635402015206 0ustar hornikusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÝXMo7 ½Ï¯Ð­I€Uô=Ò1E‹"@{ˆ³@{w“¸Å¸€ÛCÿ~5Eí‡ îÅ0à½}¢øHŠÒìƒ2Ú*Cíóö~yXÞßõíŸÅª?–¢.%)“¶kT÷ V;›Tˆ^çT”uE›\TðYËÃÛ%8¯KH°Vg†>nK`FGV«­Š-d¯]âöè݃öuw°Ï>‘p»|}·½ºà¢ú÷u*¼[>Æ$ƒVŠÕ1[VÖ¢mÙ>˜ÐÜf]F[B3”¡Ëx¯“gam(”u;½Ï?ѰçîU ›R–‘É"K1£”J¥˜QjÙBÙ‡¢;¡»Ý 𸮠teSN¢Qke{ÊZlv±˜5Ì{MºdÂ<¹a¤2Ÿ6£ge>[®Ãú<4í_5ywËC‘'Ì(AŸSÖ6ãûp(b»Ö œ8?¥ê•(¢$Yf¿zåKvT;÷Œ낎QmgœíÊÌœ KÞç-$d:J˜žJÑ>© >¢Š)‘Ž¿¿PÅðÁÃlëš4ÞM¸àr(‚R‡Ó÷™‰Òɲ¥dêFƒÕ‘‰¼Å“d5dbÙµ[%«!“_eÕÅH[™Cçr¡©]ºÃ& ÈŒµhŸˆs³¾èTOÍHéï$#ÂÓøvöHž£CDdò˜Õr&X ™X+#•‚Õ‰Åe–ÈhgµŒv g”¿¨æz¼1¥!‹óÎ,‘wŽç½³¦¼÷à W§×¹Ì™Å‘b–ˆÔÙfèN÷ÍÐ?k¶¸–ZF%Qeëž°à‘/‘>árkÐf²÷tÝÝ êW´÷ƒ3Ú iùèá}mƒ 8±‰ qÕÙ¬—6ë"ÒšZT³ÛÙJ´ú¯ïÔ_²SÐE¼÷BnËÝΨ?’W¹çΟ.zÕ­h“Nå¢_óµùÿYCv]\Ä´²Átd{V. 8WÐìMÔ©îJ ±#›@@ ´ÃxÒuÀZ{‡ÈÉBgrÜ^ñi“ud·Ýzë°å"–o›} £$.Äàª÷gŠ»œ©^ÄâÝÔ1 ßazoŸö¯$q饦†öh6 v+"¬ÔërŒŽ<¯‚ Ìëè…X¼êeÊÃ2®vÌzq©hëäMäd­'ª¨ÞFé@Âá»’…ŽlŒÛ­…_ªK¯ûv®èb‘¼”Ñ»ç¥Ë£à=9jõ¤Â÷tþvdêl­§%Ïz KåÓ¢íl­'ÒÅ?2pº2Ò%lS ¡ÈÕW;—îιz!£wò®À÷%¾+ˆóê-¯þêÔ>nïÕ÷Çåý †ô&PŠSǯËþÃbçQ0Åkp¾`¥ãýòƽ=þ¹¸¬=µŠãÏËûö»%ÒébëÐacð;0#Gmö‹ùÎîO-L­æö'ÇOóøwÀû!:Š:পñªSU·Œê˰ýj,È2­‰ ÃaǤÇ×±) gÁ0"upN§'ÀäÌ/Ž7“²I^C-RA*Òµ>~ø‰W¹ðôž…q»¼ûBDÑ"wIöȯx÷#$?Õ§…þþ\#²endstream endobj 7 0 obj 1190 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 9 0 obj <> endobj 8 0 obj <>stream xœ¬{XW×ÿ™YvgÀÄ$’ É®ÑÄ^EÁ^ÀŠP‘.eé,Ë.°t¸ôÎKï½w öÞkbPÓL4Å´»dÈûþgYI|ßä{žÿ÷<ŸÌìÌÜ{ιçüN»³K€‚xÃÒÝËÙÁ^‘—ƒ·úz¾j*¡zŸT}ÀaV1¿ünÀýÌ‹8o–|„àʤ÷uW½óþÄo½?qÅÛ„% ´Â%xOà+ø~…Q‚KL$¦Ó‰„±’XOl&v„5aO¸¾„˜‰D&‘O”õDÑOœ .wˆOˆ/ˆçÄ/Ä$|ƒä“SÉÈär¹ŽÜFZIgÒ›”Qd™Ad#ÙNö‘§ÈËäò3òkògr”ÃåLà¼Ërfs–r–sÖq¶s,9vŽˆÈ ãÄq28œ N§•ÓÇ9͹¹Ëæ<ã¼äü¡ÅÓÒÑÒÕz_kºÖ<­¥Z«µ¶iYhÔrÖòÑ ÕŠÖJ×Rh•hÕjµiõkÖº¤u[ë‘ÖçZ/´~Õår¹¹“¹Ó¸s¸†Ü•\Sî6®ךkËuâzpƒ¸áÜxn:WÁ-ç6p{¸'¹—¸7¸¹_qàþÊýâ½ÍÓçMçÍä-âñVñÌx»xxŽ%¤fR†Ô2jµ™ÚKÙSŽ”;åCS2*ŠJ£ò)%UAµPÔ)ê*u›¦¾¢^P*êwh=‰Ö§…ôzmD¯£7Ñ;hKÚ–>B»Ó>t0FÇÐIt&­ K麙î¢éÓô%ú&ý€~LMOÿJjs´u´ßÑÖÓjÏÔ^ ½T{¥öí­Ú»µ÷kÒvÖöÔö×–h˵ãµSµs´‹´+´ëµÛ´{µOhŸÓ¾ª}GûSíϵ¿Õ~©­Òþ·OçMwu¦êL×™£c ³\gŽ™Ž¹Ž…ŽŽƒŽ›ŽH'HG¦­ƒt2tòuJtªušt:utNé\Ô¹¡s_gXç+ït~Ña&´'¼=aòÁ„'ÌŸ°dŠ ë'lÙ(ò ñswu ˜6Ûjïþ9óæÍÿëÎb“iGBÆŸL3uöwwõž6“ýäì)òñröX9m#;ÚÓÓÝqš«gˆ›ÿ4''g'õ´}žÎÓ6¹{ºûøˆ‚¦ÍÞ8gš¡ÁâìÁpå´^Î~¢ùÓܽ]ܽÝB¦9x;MÛååìê0ÍËÁÉYMÀÔË=À/dÚRwï?gït÷:è?mÌ1§í™L3Ÿ¶×Ù5ÐÓÁïïOÌýD¦ÎžÞ¢gß@OO‘ÄÙÛÕÙÏÁÉÝ‘½rö÷»íèååà.òvõsvpö»9.—ƒ_€»ƒ§“»‹‹¿£³»T‡ŽÎŽcÇŽ~"oDZãæ#~¬bÖ]ÇŽ[DŽŽ¬ž,^Í]ïåàÈupqw_l``düêÃÒå¯>,Y¶wŒî«KC#͇ÅK¶Š\EÞί˜Zù¹{»¾º2^lá(b¡áe6&Í«GË ÖÿÇD#“q–ã¼—,ßûúÃe;_“`±ÁÒqŽK¬Ü=Æ%36´<âàgöçÇÙ-~õa™Á8Ÿq†KŒ÷¾&ä+ò&KÆÙ.ßùš‹ ŒÆÙŽó7^b96Àì?4¸Üpœß8c£qÆKÆïü;cƒe¯ž.^¾õõu™íwt÷s ôrñt³^jùºzÿTûò%ÿ6vÙ¸@Fã-ÈÐd×*Æ%·ùbãm#c2.ž±‘ÕØ$³ÿ°âò¥ÿ[óF㌗Ž3^b0ÎiÜÔ‹M¶ÿM&Ë·°–g7Îw¹‘éë¨0·ÓÒq6Kïr dUáèåéø§ZÿTúøªMŒ­ÿZÝ–¿ëv¹ÕßÉ,_fÊÙaürÙ8ŒÆÑ°t\ž%†»^ÄâÅj{±ùëžd2.˜±±Õ"hÜ ËÆ—n4Îmé+nÆKÇ-yÅvñÒñ1††æÿ[›1®[·³3±ÒXnóß–¾|Ü,ËÆE0çó'ù%ã 6\bþ ^ló' ¶¾†-ƒÍ7ôr‹×5²lœ½Ñ8û¿–ùçê–š«¼âfè ‰jÿ¡?“Å›ÿŠÆ-Öìu¹–™Hþìú×g Eÿ¿î8þ9Ì{LfÏ1%»¾¶(6’û¿véíà#òðù¸±cÿºíú'@u¼tÖØâõyc„=ÙaîšgcÑ P#µF.ïׯ»±¾"{èö—´Á} |Íì`?Î_× cê7vý7ü—-^bdèÉ.Öß}L”€×¸û½öY¤¡uô/Þîcr…¼&Œ†«óØý×Wí~ÔyŒ¹ÓØÑƒM|ÎÞžlvwt×P•ŒIíü§öœÆÜÑ_“ùþbà9v#ÐÛM'¦š“™æ´iìdb¨9-Ñœ–Ž 4'Í#͕ѫéÇN6,;­ß 9iFn2;™inšinšjHoÔðÛ°\3ACl½†Ø&ÍÍMÍ3Í3S#Ítœ4ÖkDZ?Fsñ2 i3ÍM“WBhnšjäܨbƒ†Ñz&Ö/ÑL×6ÓÜ4Ó\™j„ب9mX¯™ QÝú1bKÖ¿’ZsÓLÃÁTÃ}£æ´A£‰ M¬W/eÓ²W²˜hhnÒ<3Ó,ÓTssã«y…lÐhbý2ÍtÍHÍMšgfšešjnn|5O£ M¬_®™®i¢²é•ê4Ë4ÕÜ4Õˆ´A£ …¬7ÖL׌4ÑÞôJušÕš¼Zƒæ™é+ hÔ³A³è1±T^MÐpؤyf¦Ñ§É«¥hž™jÜøJ$ ‡õ-™hHoz¥WæÐ<3Õ<3]ÙæëC¼ìØ 9YïÜèãl³ËÔ×e·™ŸëžMþn{7¸[l úýú)æÉéÏÏ<;û͹oÏ?¿øòÒ¯WTWG®,€é`»ÀL`!Ì[Ø f°ÁG°6ÁJ0€a/l†Å0,` Â,°„­°fƒlƒ¥0öÁv0‚¹°Ìã°6Àr˜Ö°6‚1ø+„`Pàn`ÐÀÞm„£`Ó€:p>„÷`ƒ'8À*˜ o€¼à¬=xHop„5 ¬…)ðh±Mv(ø€3¬ƒ©ð6pA ¾àëá}xx ƒ,H€0ȆDrH†HH(H…hHƒH‡XÈ€8È„x¨ƒPÇØÖ=Šá.ÛÀ÷C'ä°Mü-8ÐJø nÃ8íPU0 wà B”C <†j¸5Ð M Oá\†ÓÐõP eð \…“Ð P ŸÃ}¸ CÐ-Pàœ4B| ×á ôA3ÔÂCx_‰gáœ#‘D$)D*‘F¤D&‘Ed9D.‘Gä ¢€($Š%QL”¥DQNT•DQMÔµDQO4DÑL´­DÑNtDÑMô½DÑO ƒÄ1â8q‚8I §ˆÓÄâ,qŽ8O\ .—ˆËÄâ*q¸NÜ n·ˆÛÄâ.q¸O< ŸŸˆÏˆaâ1ñ„xJ|N|A|I|E|M<#¾!¾%ž/ˆïˆï‰ˆ‰—ÄOÄÏÄ/įÄo&TÄñ;Á£ÄÄ¿ˆ“@$IrH-’KòHФImR‡œ@¾A¾IN$ß"ß&ß!'‘ºä»$Ÿ|œLê‘úär*ù>ù) …ä4òCr:9ƒüˆü˜œIÎ"g“sȹ乀\H." ÈŤ!¹„\J‘ËÈå¤1iB® W’«ÈÕär-¹Ž\On 7’¦¤¹‰ÜLn!·’ÛÈí¤9¹ƒÜIî"w“{Ƚ¤iIZ‘ûÈýäÒš´!mɃ¤yˆ´'“äÒ‘t"IÒ•t#ÝÉ£¤éIz‘Þ¤ˆô!}I?ÒŸ É 2˜“!¤„ %¥¤Œ #ÃÉRNF’Qd4CÆ’qd<™@&’ˆL"“É2•L#ÓÉ 2“Ì"³É2—Ì#óIY@’E¤’,&KÈR²Œ,'+ÈJ²Š¬&kÈZ²Ž¬'ÈF²‰l&[ÈV²l';ÈN²‹ì&{È^²ì'ÈAòyœxGäàׂ0„waZ|¨ þ Ó­az ÌX3öÃŒ³0ã9|ëÁÇßÀLf.„™ö0³f¾€YÑ0«f†Ù›aö~˜ sÒaN Ì sÍaî̽ ó6À<3˜× ówÀ| hX°X‚oaáX8 ‹‚Á``ý°¸¡=zƒa*,À’aXú!,퀥§Áh!£¯Àèß°ì,û–/‡å¾`¼ŒcÁø$ÿ LvI¬ `…Vœ€•»aåXå«ù°:V߆5ó`Í3XëæÁ:X÷Öo \Ø €f°ñ8˜nÓ20;›¦Â¦“°ù0lö…ͿÖ£°u›E`Û)Øî ÛÁ|.˜×Ã쨃$쌀ù°kìúvŸ„=»`OìeSÒK°8 7ÁÒ,ŸÕ*°ê«`_ ì§a4xÈÁz:Xïën°Y 6·ÀÖlƒƒ[áà]°ÛvOáP!Ø‚}ž‡oƒƒ8<ƒ#iàh ŽßÓNpò§jpº N/ÁYœÀ9\vƒË]p­·5àÖîÁ½ŽúÁQèûúþ€~ô¿ ýÝ0À‡t<ƒwàØ8vŽ[Á s8¡„Õprœ<CïÁP8 ÅÃP:œš§Á©Q8ÝgfÙ‡pÖζÁ9]8— ç§Âù›pþ!\Xúáâv¸8 —ÖÀ¥,¸¼ .o‚Ë÷áŠ%\ù ®zÀµ`¸†áz ܘ 7uàfÜü nþ·~ƒÛ"¸}îXÃÝÍpW÷îÁýáþ¸ÿˆàÁ<4…‡×à“ýðéø´>­„GVðè1<ú>s‚ϾƒaoþÁã?àI çYðB^tÀwÎðý[ð}1ü ?ˆáÇ™ðãMxy^þ?ÕÃÏóà—ðËø¥~Ý¿ž‚ßæÂog‡þ¨ `¤~w„߇€ÙL0O`T̆?dð/Oø÷"ø· üÛþý ±Š`벉àØZ“ ­oqÊDFJq›êG大/'ëú¨nà |‰³,@*qs² 1FôÞ†°ô&¡Ê‹B7óó¦ÑJ¦IL݉ɓ!3zt7¥Û‚ÌdÒ ±´˜b§7ñúñîĤÄÖª‹‰‘}Jþ¡y¶Û&YuY/˜Ç8†ogf†‡Ú&英’² ΫÎMÉOËöbm.Vð:æåúdø"™>ò“DíK¤Å8“ ÃÙ|LájL3Õ܉ªxÆû¥ª_A¨Dª}|fª”W_—-œËÔ0NÉËC9ú¨H‘Ñ•L+˜#2ª2®0"S‚yL¢^J”«ںÀIõ‘4À\â%ó ËP ŠL–§‰3$©Dû­÷ë¼Ú tRˆªæçÕçd—§è³ü‘B5eˆ¸4ŒM‡9ªéüô”ì¤DWgIm„L…öFÈÄÑR즠¤JsQ3©þžÒÜD”{n2Î2“X«9)(›´ð\4@ãêûSëí<%Û7 RÑÉ6!î–¡,ÇÝò[*n îsTÓ±ßÖÌÕ/¢ ¶‚©Ÿ†n~Úœá’-LÌ…” ýÊReÙ)³¾å6‚]­íE›Ñ*šyïáBÌéi/¨kT•+«jÏÒc¦—ŒÊIº%#æ#sùL¤˜w2¡  iDˆ·+Ãezgw>öïB¥ú¨X‘ÙT¤§d†ÄÔåø"éwŒÌR=f1ceøalÜ8Ö¬2%µ'5$•!…¢¢¥OÀ³õ¾e¦5ع³×=ŒBBånIŠH W›xPIíK—f>ÃXâ*=<o»ü 8÷RªþÄßßDÊ-%ñ¢[Uô’3²Luƒ?jM!ãð°U,êpƒ’Ú&ËG7iÕn£yywÒYŒÚRŒïh2ªJæ26bޣؼp´K¡dbãv^¸’Z“*)C?ÒªYNíãæó&Ž,bµÑ‚;Ûqn‹X9éùKûr¦&ë6²ªSñ¹h½÷h}X˜q¼õÎø)ïºYÒÒØ\_܃úQwH»gW•Oî¶‚ãy%Ùå%´nSE©¢¥c Ö2<ì˜0_ð_ ÞØf)­ë|Ú¿ÊÑ| ² rr ð9µÑ6²¬z!îÐbÁ »¬$#K!èæaê¼­áê}ö „,P­jJ-¡Z†§òCRåÖ1¡a}™Ä=ò¢—ªæpÌT<£Ã-âeÝV(Î! xŒrtWªz“bñ+¯VVèKœÿ%§¨ó™÷ æ1fê³™xžôüW,À“}˼+ ñ‡ÏÎc>`¸‡6¯sr)oŠŽ‡Þ`þmß…›5­ãª),­'8x˜ƒ_ÈùxÖqn’˜€âí•Ó+T]¢b“m%nòíýP*3)e"º%K~DÈPÎõ>9ެäÔBkÓ™wï.Åä©Öâ¾Fáv Z(::\ì'÷F´±å'ø-̸sïÄÀÁ}Â1øªÁ{YhX¨á+óŽ'F!$ ”23˜ =f6ö‹(ˆ)‹ùYõÉ©(å$±8iSý ù²˜ñdÆRÙ@¡¥r¹A ³JÊ0Y–‹îÑx…gã óŸW–c9âQ"WsÄBrI÷dÝ•*‚¯*£Ð¹ìe^~v~jk*K;\LµÆçÇ)"‹eY®hÍ|IòUb.³VÌëBùQíéÑ”®øŸ ù>ÅRÝÉ‚’…¤¬[e\‚MÚ „iΰ/qƒx1A¡áÁ(IS¤é6Ö™‘ 2öÜai¶Ãy!bH´°ÖèØÞsÛ¾vþa.ú¾÷ü§tHÑzÓ­^ÆHßYnµðüa·>ÃÚøãÓǃÛõ ‘r­Ž±^…’"¼§^5ñܤÃ8ðÉd]i–ê~VRÊBtc†ü pÔÒ@û#"vÇÐJWŠc‹xë’ÂrÐE/¦šŽ–Ë;Yìé|µðÇøm³/æZØûYÙ ïS1ÉVAna–}óc· Þàäáó/œ>g§Zã÷ñ4l÷½÷cËsBóë˛籢ՋzCš=NÚÔ-@Ì´;lSðþH?‰_@€›Û¡}È*r«Ûß{ôGÖVèeõ‹Î>º­k t½ ß-ªÇêhõùK“u Æm [;–•=q Óè—† §.Ÿmù½@_z=°Ú|!š™­[È”‰y£³"ÙÈö²¯ëY—“Ùñär¨{¿àU‡b1:G–¯8xÀ{OøRD;†³áI¼÷¼jRµñ$ÖùC‡'ë~ŠGU«ùº/ªì¼²œ¦2ïÌc´X%LºbøÍ™¡Êþn!ÃN‹©i,-Áù”enT&ê¤u?U}Am`>ã#ÿ¸0yT øh¸'òD>ÙÁÅ5A—ÑZ÷Ö9qçñ…º£[ñ6ûΪ'>cÃÍuþ Ó¼3ʺ֒|¹w‘ À7W^ˆè2eQY³}å®û|ì|…¾öQ®‰+iGÌUÚ¾Qxó”IJDºKã«x"O°…Ki;Tësø%Uëó>„»ù• …‰•è:™ÝU~®¾ù<º‚:e­>5ŽÝK«°Zü”)óîDeËÑFzÔŒBË£äk£5ùiUŠ4ݦUAZ¬f22ªðÔ ?š»Ûš¡‚eIÉMÖ‚»:îc£V±¦“¨¾Á«ù"ž5‡ý™ˆöáÙ ‡´èŒØ”„THc„R",Ϙ.ÃÒ^ô‘8i„,L"Š:È‚x!öãU§§W ðTëþ¥ÒÂÅtO·+ÏàŽV³¢þYÂýUÀIT-¼1íâ¾#ns2TSøù)YI¹ˆ®È µ2)²ŽŽÞΪ.ZAmN‘(ÐiRõ]ƒUéY±òA,'&ÑåŠÂꆠbwïSá×lôßè¶[¬?VºÆ+ðѶ´êIè†÷gØì~UÕd]FuT¥Ço[C³-8#0SÏ'Û'Í—U-^¸~£y•ó•£BqHˆ$&ö¨wX0 FA¹áÁ´.cºßç¨Ë”}쿽û ²ó¸ µ®°µ¢ ;×§0üt½}É~Y¨74Uef%f$¦ eB^b:jA튺ª†jED5±e²zš‰Âoˆþ$fÑ_5„¹îYëÄp—ì©é.ËÈëêâ4üŒ¶º©·®RâU (r˵CN´…·›Ý.‡ËϬ?2fE#탑=Ì>ÃKYÙ½â—kyÍ…½íw®´~5tí˜÷ñGlœÐD û9µ&g· Úêƒoú÷Yê][…ß<Œ— jÙT•Îc¾9ÃïB½â&Ï“¶õóÃE³½?v´s9²?ÀÙ"ûB×ú}}? ¬ž×|×ÑÛÑÝWr†c >ÿØúEåCù,h¨ð•!Ò•,\>VÃ%M —÷_‡Ë‹ÿ† ‹l㈱ȢFöšT¶òºEcoü1õ)*”æ®`ÙéËKCKT‹‹ÃJ'¡ Øä‘ð5|•¯;?¿Ïà%$DF'&Æ!ý$OŽHcPf``ªïÔU{l´¨w|l+-,O­{kêT2ŽdÎs±oÔVõ„¯{¿:'³¿sæðë W±ÀÎ×-f^‚:YÈÚñÅ"Ì)ÁsÛÇ:ígÄÿÆg2Cx]ñ¹ñ¹QŠÈôt˜f–Q;}62ËgaÞùMõWÝ‚î U×Ð)4 ns­øTì¤ËxQؕȋ‡È‚…¦„dRØebu-½f1‡çT­;µ[xuÓsgL¢'¿ÓÔÞDc{ ÍÍ;“FOÄulùøF=qš5I&Ìg²±<;1%F-w¶›ÉÕûgÅäÇç£,¶£ÉÉhJ¡Ì)Õš!ïý¿Á´ë%ǤD§D¥‡¤G¥£t”‘§hÁïâ;z5×Ò3jShM04É'î²Y~„ÃgƒÕ Ýf+ ¢Ðþøøê,¦ ‚““Ùú¥I›Sx³+%.9>9>%^?SžƒbéÈȘpXн<ûO¥Ã1fÞ§WSuóÊ…ÞšL}Ej~2[e*˜Ã2^[bN’¡¨H™,œí('ꩌ©¸dçpï¨=¡ú^Qcµt·jDI|ùÿÑÍQaU.½Ì-x”Í*G*¦Ä¢Y4ÃöZ›£C½|l·{®C¦È¦Ü§/¤>ºEÝu܃ë'j¸6‹©‡1,\7ÐÌeŠYÿ© ^ƒ‰»M×ÚåY½è¾:YÉZUÿfûǬêTƒ|t;'çSõB»˜z¤™;êH ò•ÅdVD äM¡lMâàãÐáuÃù[øu:f­k¬µ¤Tctv4’ iŒ„ÏbÆOo9ô"„òôQiNF_k+{)Õ—Ql•!Χ‡0¶z³q~\vB6ÊÖG%¹™©ì¨-Rª,!S^zOe¾ÕËõÊ”¥³é&3/·’m§¢õ¾b"ò]RcÒ‘~JË*hg[öïõŠ:SÒŠYš0¨ŽJ־鼜¤Ü$¶é®Ï–±M›/…¬da汬…#”yjx6¢Uß°¶Ø/q–o’Œí7Qé•OBŸoúÏøt²î3ÕÎ+|‰,ò¦’Ù¡nú¢$B¡Ñ>á^̬QŽ3uôvTRè#e~¶ºéÏIÊW7ýJ15À6ý]†8q´WOÁÃ~ª3 srúSôÿÜPøò%Gµxd2?71¥¢Ú„Ü(¶à ð²<À˜1FzØú)-j\æ†gè;T“’Z­ÞÓ»Mã]TeɯÓï­;iŠüõ‘L-JŒEhlß댒ڟ$Ë6xÁÈpŠÞ‹w_»\y-M_É((—+\÷¶Sð ÷~CYU[PŸ¤¯` ¥TmBv ëXáá~ž±1á!aÁ²b=QgH#ÊCùyµI,š¥YT-*«;ø ó‘ÃcL¼ŽÈ£ÆëKñÇ Jž–—ž¡È+>Äo}ÅLKIŽA1ú($:vP²’|pœ¸1ŒÍÕÿ9JÕt~^J¦zÓ³2+ÔVȤ«1%µHd1å§ ö%KsP›(”œ™‘QQÖUØ„èîR7¶Òòb»Àˆˆ½êÜ  ö&I ѧQµ] E½ˆ>]äc,d\)´7*jO4;H¤ |“½’ÊP›>>Ba§sköðÝc%9í^e…ì‘HflNߥ¢“ˆÝ#,¥ê6C^¯šp‘¸2Œƒ?çà#«ù±ÉRŸ¨ƒaúÞêÒ-=)e º=+ÒA8Z@y>>ú Ö{‰I<¿µö›Y;÷¸Ú öiµõ50¸š™Èpl·›ì?TV!˜ø»©{¿«±g#æ‹e±çƒ‚b|å"ææk=F“Yš˜¢Y£dszyYöI5öŠÅÔéÄìÈÆ• &zÓ˜&æ#ÕÑEqc;S¥ùÇRØ! bêX¬"¤e¶mTÃs¡j%^:º’«à=ÆùÙÕ˜À}Êã9Y'²Ùü’‚ßÁù^~¾žÞ~5u•5u¾•^êöS—ðÐ%âô5Üwˆ?hýü»NQ[X/ÒïCmymÕßÍÑëœ÷¼¦'»õë£yƒw×óïôlûçÌsªrεEú6è¨ü÷¼çzÖ¶ßÍñv wF¶úè`®KÍp-ÿáåÍ&˶mYa²õÚgÃW®³|ßáàŸ˜5üMEµêÆz…>W®SÞ-VV¢ÏÆ®ï–Ö^/¢s¨­‰¾1Þ!Þ!R'´—f6±õsHÀ–à«AEþhͰÎdQp¤:¤:¤*æJ"«Ï«äü[Ô¨1¶P±\öc#ánÕø ñò w«·^¶peTnZNjjrQFa*›×J²¤Bõ®ñѨ€ÐHi¤,ÞAÓµ*)4õÓª ñ°ã*²{×èëkñâœ[Õ>ãČ͗#/tØÇjû2‹ëÇìŸ\«¯(¬®+)ËkB ôM‹ÁUF›79gzT­8~¸ó€)Z®?ÿòÞ_?=Wqå®àâ¶ß3è:ÝY{Sš£çáæŠ,Ðþ:»óÝg+ZêNVöê•wç¦Ó£Srø^å­¨‡î¯kìímtµ±p;lb/Ø´Žá5Yž6Û}Б--i³Ý—î_ªëzzŠU»5³°t„m””“Ð=¬såÌõfLäÈ»ü34á…¥¼µéácÅÜ×êíºñr®€bfí°dÞ[Q¶·ÏCØà_u1fNWx!µUeÅ7Êò8†ð$t3¿§¦„Öý´(¯0½­!ð–Uùí÷²Î¡ýRqQ€¿8$ T1§p±`">(+ù ˜@W8Weü+#›¶òXâ7®à)WUê=þhÒVU™¢¥ù ¶â=UÙŸÂQ‰ðü°4—½a‘‡>Åë°éÏÚî¡ú?¬¸?Ãr £‹ÀÃ]ê!1-‰Õkÿ®¹þ:¢‡Oï]¾ÚnárC!³‰Ùà WMaÓà“_Ufü« =çÑ9zЭ훀»G™¸9=#))]‘ŒP[Ÿ¤ÇD¹Z¹'âŸð• Ýî]ëמÛu÷Îùó·îï>·flã Ÿa!/ba¶åè¡h} É¹§©¼¬±>@éÃöµlã’€P"¢£bÒ3ª›O¶±¿ò1šu¡¯Xzod1ÿzH©ZG3¬Ë,Wúݯ û"ã±ëu^›BèêJRezMQM‘¢M½úТ²«%[ŠCÊÐ ÖG)t*´CT$*òMß’¤v¡j9_•†%Ü+¬ï°§”ʘ±eÿÔ/ÕT£ç&ᚇη&ëžÀ ðgü³¨,¡<’Ö-¹ضwÓ”å{·­÷ Î(wxI2ԯȤ² ·®À÷Vvô û:*Ï «èXhŸw]p©8×^I랸ÞWÑrrʧÛO-²¶—x¸ ¼|¤¾»qz·{."úr½¹«ÔÕÏOèå%’nö«™YOîgU¼ÞÖË×ÅÎt©Û,Äh#F·eÎçwØV÷È-Ð[yQÔäs×ÿjÄ=ôú%ïQÕ…ê µÍ·Î¨ üÊ|øÿeq‘‹ÚâªøNìǯ󹵣Ãù´…~jlr"ÛÕ§¥¦¦å9»æ…0>5Åd•Õ)ŠZºkš+ÚQ›$ÄÅøøxûFFGGGEÇ'èŲÿbâh¬»ûÿ–àDU«ÊŸâû:IÂ=Q J“dö±í6²CžAvÛOzèU¶æÖ¡T[ùÅÁ¢èÔ‹êJz/±swGý¦ê®%ÐU¿Õ}ÍÁñؘŸsµ°½¥¯÷Bù%õyͨµ†5”¹5í.³Bô"³ÆŽ…uå……åù1¹ÒBax~lʤë{kÎõïÛbféo)mÛÈmíõ³·ñ½ü=¼KkëËJkký*Ô½T<*Á3/©V¸ñ>Gå‰Cù«öØó˜«£{¸Ûq#³ò>^ù’b¶\â3Ñ<ŸsYóá5O8­ŒÿNmeKïͧMc›Zø]—K^é÷-Ý_ª÷‰y•[õºò-9kÑ,4#ÌØg§ÈÜËuãú/?½õ0(·ü0À1âÿÅhVÌ‹ÿ× Q/ý_¿ø#ÜÄ?4ª›ž†Âõ÷+E ŵýQ7Ão ¢{bzãú"1èÅà]|À /2ÿÚÚòŠÚuûúûYžÐ¥:TG aüæMÕ›íœÓÛüÕn¶ šYÃLÄoã Ïš¿9}V80pµê6¢ñbüó3g–ùÜ­¾aŠºŒ¤´¤táeœÁÝÄ“;vHsÜþaäêî¾oŸçZ¶'2o³èî«êi¤Û·x÷#úûǘƒùØ„™ßev0öÌ2f³Ÿ±ÄK™ÙØñÆ`^÷ !³Ze¯NPø'8%ØJvû»zú Ú% áøÉ¢ÁÆVau}SqyÂXóûÉC?¸ÁÁ[UŸðñ^JMNÉhýB/2C$ bs‚3!yb>ôcSã3ëÛ£Ã:˜r9±ͦçí\·:X’Qê%ð( Èf[oY¸ŸsŸÿÝá[UÇ…½=%§Ñ=tKÜk=hß½·ŒÑ)QóÅë”Ã&½$IrPŒw˜»~tHœEÐÁeI‘²$=>/6OÖÝÊ–·TF|idIHÕQý ÏÂð"¶ÒÈW”VJsì3„Né¹¾QizÕÊŒîŒÖô¼TA—I ‚¤’0‘¿ÀÏË/00<:N¯’BåéÕ9uéÊÔ”C—„K¥Áá©!éA‚ì£ižÈ‡£œKÄG›ƒËÃ3C-–†ûËú#…-ѵreXN´Þ¿Ð»ÈCQ’päG懕d¥) 5 ii™ÙYiM¥¯yÆéH‰ÿ‡žËXרv6&•|š~|rLZTFd–¾W¥wuBš¤$¨(Ñj̇U©qÞ]½nþá,ÚcSãÒS““ÒR§Oµ·Ü¾¨6JämY;öÕ‡Yª{|7ž=ó¶jX’ŒÁÛó>d¦ZZÕ8 ‹üa-A˜¹z¼,(V$"ýVÔ’_]ÞT«¬j¼–©·«ßn¤~ÅàŸõ#îÖ+rR„U º¢HYÙäSk«2†Ì÷|›qºE¿(ÚÙ\X…ç±ý=àÅ•4s„iã?ÜÈv¤ÓN³%VßàEÇ2«‹Â’‚º¬&õîþy6ÄÚ^!°è 'ã6>#ÚŠEŒÏìÃÞbDØG]wÅ«ýßY„1ªú¿3î ¶¯œÙ€*ˆkÃx×0§NeÄ¿ÆÜã¡ía l‘,RÃòÑ=¡ž§Åï2…êýŸÈ±¯§Eä¡K4VP¨•%ŸˆKѳöŽW§`qu§Ô¥æwµÕö j¤ +wWúä©_–( K;­«×¬Ýãkã*ô:á³’Þ¤VVTµÏpa3¶éÁ5U“PåãÇxþç“uÃñ •6Ÿy‡u-¾5ÓŸ7;×R$qK$íË”Õ"º¦¤´î„EûzfÂZf†²8ÍW8í^13+Y‚BPtbL|”85W_Ô©/#À{øÁêqSx%,͉ê/Ðîf¼kU½¿± ¯ÿ­ò >ˆûø²!næëìð·BsžkY@“ÛÙ€“ˆþúÆ…ÏÚ%¥ž~¡Yz¸B"Ì•¥E¢(Úã —í.ÛW{ó†Ê‡Õ—”ýÙƒIÝú‘xß%~MÅx‰ÏfóÙO ¼­”ƒ ˜9|ü…ð„¼/«nx׆Fß5Å+â;C‹£•±yˆ.-(ª¨(ÃCb£‚…G$¡q®‰èdZ¹r0S™Vˆ²éò€Rÿ€@yš$C,(>柸Ï=I’z¤083$-‚íñ%!¾¢iunvJV¹°]Q˜Ú˜’4;ÌÒ˳bsó2 ™·Ô`eö”«Zëpt áÕ©jŸ™Äc‡×%å¤_T^Rçää§ :73–ízbãc„±‘ñ‘(†) -®()®hu®=èp8ÀÙWàl!± AOãÉYÕsx Òˆ-‰q1±ûô¥Ì:9Cûì9„ôÃ#Ó3R’SS3„é9)(‹.•åúˆÅ¾Ž Þ}Cm ·u7 ?)Ç;’ò2Og°Äêôμ3H¨üÁÑxkõ{’Ö?“0‡Àï«ìÿ*†Ñú;ÐÆs*nWo±ùt,­²Ä3ïü܈y9ªÕªx>æPîÕ‡˳é‹îæ”y´(ò¨¯»O°#:Œ¸µ»ÔˆJ¥7i¦‰Z´¯ÏÿZʼÇ;çÒ1O/m|JÝÉ­Ëm®i¨Vv ~ÔÕ^ì×áS̼yƒÆ‰Ô°¼Ç¡pÍl]È7>\Á6ûC×óé&æÿÙž´muuY- ѱªT>3 Ï)ŠL“"ý °pqhŽ´(\ˆÎU»oýSÜÊbjk ç«òÑÉÔòâÁŒW ,õóü "©þˆ…H ñ?C¤ µ)%iiø~/§Ÿ\ëÄ9î)Ò‡‚àŒà±Á¡_ß²œ¢´L¥°£°(µ1 í‹ó ¶ŽÇJœö/ ,¯(--ÏŽ-ŒV ‚ã*ЉæDE\§DU›ƒè²Â¢ŠªÐ€ðàØh±Ð!Tï¾Ëî¬kòj‰èMú¶1¾ ¾ƒu€âØÜÿtv°DÊ:ÀØ—g—à´,/Å)%“Ð ñËy§0÷…Ý©ðã“u‰Àñ;|ÝŸÖ]ë¼qÂóäž~!óæÊjP…~gcͱÆjYH|||l¬@÷g —‡†Nñ+©ªW7œ²ìÜ`la½ÑªØë“­y pDëª"¶Úؼa`;ž¸\xɾÂ9Ñݽö¹¸³HMËH°l ò3òò§”ùxxZœ³ðôô±{Çĵë. fâ~:áÑkÇ[×è®<ê;ÅÍÃÓÅÙ¹ìÜ.{cxª¥ÛjªÛÔÍ þûe]@ñÿ¸çˆëb؆#‘õߨ*ïzc×¹?«¼@÷£ÿs¯×ªzðQXV92©’@ÏqÞsõKtc¾%r¸¸í±pf¨±½<¢Ñî³h±?æC]…ÍMg†Z1ð›4v0À2“ñ¾üá†Ë83ÎöÓŒŒìÃNØ­sž'ŽÜ +‰ªÅ¹õØ­¢¼6¦X½ííWqùö­œ¬òxd1[1ÜiŒ6óÎêþ·zZ šš„'N6|ŠÐל۶ 2<ø­õ®ö{ý6;z8zKØtãêWÙz¢úQËqaU{uQkµ•ð—|'žÕGÉuµ‘á_Lë>.õ KóœÊð¦1]³{/wõ75Ÿ¨ˆn£ü„ÜØ¢¢è¢øÔ*3Ú˘Ÿÿàéõó~TðÓƒS¤HF3\†Záæ_ÑÜY|­jPPs²µ±¥¡äÄôØü°ÜØš¨1·ÕgÝ/|Q’—•‡ ô‹Ãr¥‘±!!f3[ý¶\^‰ókñÛlÌý’3²Ì?¸ÝÍß¹ ·âZßÞÈ–¸§4ÎàÅŸª ¨µÙ–Y#+ä|ÄÂú”cñdKÜ=íì½×£µ4£ÿx>~óZGÕµVAíæfŸ èè8ŽuÀ=üÛÆÌæ 7óÍ«Ž<Á«çŸ,.²nªÎÊx/ó6?鳪Žˆîm8b!ô¡ØJn¼šù]: Þ†™Î†Ë»ê8ô^ÉÝÁcÞfVryøÍŸðÄÔ1(²&X1¯št~›==øÍd]ñía>Ú>ö#‰U½ÔåÆÎã§÷/]éud[´ (!*E¢ˆ¬Ø²DZ·ãóøîMÌÔ)Ë9ˆ£2K ¥ e!…HßWäs¸ÝëôŸ`âTà c£Ð£Ú;gg.­+þm ¶áÖ”¯·ž›±ù€ïoAKä!dF«vЊýÚj[îãåÍÁÅ“TÓ¿Ÿ¬ûûÈiU_÷7üáèù`êrBE$ D1ñ1L¨XïèÎðˆÃêïgÙ*©Ã©~9HJËÏ´?¨>¡‡M™ù<´5\¶+Z’ 'VePÝxן·‡!=ƒ`‹Þ¶¸”A!ŽÄS­¨Jž’š*M;B—à° ^œKœT. r‹4gûZ–ðt/ÍÌT žòðLT&Ë3 G1~|¼ßâ2·Ô ÇC#“øç°ð$Eâtq–®^@®_z kwWWé6º†—SW¨(C¹(?N]¡×¬`£íª©-¹Çâ¯F%èÃŽlwqñÀŇ7'ë>Ãeª|¶ÑŒ“#:"!½Fˆ)ê’[½™@÷þ;‘“$_VT ÈÍKF)‰)ÂÄ´Ä4”Jç”å––åI}^”ÁѰhŸZ÷YXDdpðÇZQGmu~mƒ Ý#7¼ŠmÞó3ÊÊhFk¢â££¢%Qáñaˆ’—W–(nT¨›JU÷I"Gõß _:Iý×ï—Z¾ÇøK­¹6ÔÓA.³’úûO“üxÿôë&œIáE_p(f‘!¯þ§Ÿ:©9§ž»Ï"¸nd>_´Ö/hÚŽÜkeWio^Ò ¥¨Â­]܇†Qï±Ü_é¿}+|dæˆ߆·qÚöæCy[‘>cɼÏÌ`ìÍÛ*­…EnÁÎó¡Þï!¦/¸ô†]e{ð}x*žŽí/K/û Cš$ÅGZéÃÛùÛò,!ÍX¬`ã›Þž#ʾÿ&¾û¥ð!ô9-á xòP§Ø®{,¬!ù~¾¢’Àªê²Òªª€2‘Pðî–ÅxY³Wó$„µpç“uyÈ"œ À© ´59$‰Öý>Å6ɦ£ ¾–6Û-\f!u‡ÚåçvZ_ó¹ƒòQIRYR{ò¹äuçÃÓûÀ|WOóæí=ûÄðlÔBã, ®£âà¬ULÇ»ÄJ#¤Ò WùDÏÀ<ÝßJ²RN ŽñðdTškH¾;:…oêímÊLÜò3Þ+Ðý¸®î¦®×zlû&ø÷?|ϹòO Ķïý}Ñø¢JÀ–ö ºçßæà%lj2رgÙÊ󻇟^¹4üp×Ð2aäQ~ƒÕ: ?O;?qni¸0´&²µÑ=Õ5]jžª¬F<¹‘@ê#‡Õ®-ßêÐ!+‹.ûSC=ÝCC‡z,…Iîü¦Z/WW/o7ïÚææÚšf6k-’÷ã(u¸ö/Ÿ„žn{Šu?¬ûpðB¾­™“Ï^t¹KjƒÚbë¿§±‚§ûæGØžœ9Õ‰"¹Óºwœ½rm¦l²Ûá](®ª.PÖ$ ÿ_u×ʵ%ÈÌÜMœŒ‚æ²&1jc4K,±Æ»bTšT¥HïEøiR–Þ{Vì½Ål‰‰5š{?rïÿÍ.KÑeY¬ùó<Ú 3§¼ç|ïyOœF$àt~9);P*Jð s w 1´ ˜¥ù­±û{ßU«çöžY¾òäžü¸š“ÚùKŠí÷¡Ýh{lanFjBfÆ?©âq¨Q´QP ÁŒãL3##‹må3Sá½2í+.äfZá>$A)F›‡ >Í `8qŠÞçÕÿÈ…ù…GE"­b±çzk{'S{çà+‘«y–{Š.ÒºXž[Uj–®ãéà)J;¦aB5³”:ÏÔL[GY~ÄLÏös§üºÀ¹q:«èK 쬈eôÅj2züb ·P¤œCéÖœ*áaŒ®¹•¨†jÔÁqg¾ÞÁÓ1vÎq))ÑI9i¢”¡…³52côs×mßžŸR]¤ýÔ?ƒ/'XcV3‰¶ YGb7ä üÑŠ¨I†¢Xëh—|ëI¸¯fu º8§øÁÞ} ¢r×r›b‘sª[”y2c6—ËZ¹ ýÈ`fÕLm£²7hÛçrÖûÜ÷£SÌo»ŸÉIö\Ÿ¡Ýœ’Fp¦îÖ¿÷§†)BZ>Lukr݉ð(ñá5´÷ÞE¾ß^u>g1ÛÔf.b†-9F<±ëž#·ŽZÌ‹ŦP˜_˜W°iÌÚðu$Ii~ó~SW¾‡÷ö]Š‹Å]ÐÀßò9¼Â_J‡áA°üùÁ"Xˆ¿„¯ñlQ Gþ¿'î‹GâѸ'ÖÆCðPÜ ´aŒ…^ð|+j5 t¤^­\ˆ¯`NÏ„ã*Æ)Ï^TÅ ž &›Q‡]G(»ƒÑ*:# >0µi¼ä@.¹þqÔœÆÃµÇP¿l¾Æ Á3¹ô°°4Ð>´¢ÍøÈ@ºpYIUÙðµ¾k5¾†çÕᖆ…©´û»^qŒ×”M¥u<”–B©6ú†gü÷„16Fßhv.& y˜ïFʉ_§Ý„Å7{±ùIübn¾IÙ¬Yc»1KÌ ö‰àÀ°Æ¾4² pð\HðŒÏ¿Uö½WÅ­ÏʧWfúeºUi»í Øê_”½´Ð¶’ ª™%‡7ÏN±*GÅ(%&¯” §míÝ}\H„ðLØE®{È“8Ó;ÇIæVW#¯I]ÏkîxcÐ B âÙ*«q˜Â¶‰j>O4-Ü£¬?ðÏfƒnoeføæÜcÝe%ÕÛ?iê ß°FÉ#„jHIU«¾"´Évs+‚=ÂP:wi×`üö" [º(¡PÄ„nöµá­4²õôÕßÄØÀÂ×;$€'ófÊ~‹ç†“ö({ÿlçøœ8‡²Âsr¹½VÀ?É3r‰g(y~^®I>I§öA÷Tøobê+üw§{±n «a·"õ(¼ 'h,‡éCOßÞKãöq˜\¿LÓ(ƒ?¹[Ùtæ·ýƒKLK9–n` ”TçfO{v ó,XœØâ\;t®{r®Ç/ä\¿™Gá½79ÖÉš7âZÑ‹t~þI8TÈLбà{ÇÀ µâK}oݯÄ÷ø{Ò³ôfÏ:ÛIÏâ“ðlÎ)LƒuŒÜº~º^wè`ÊvT¡udqé¸5&î¶¶ÚöžÎ+Ò\5“Ë3’‹S’gj`a¾x™Žèó¾¶J dgké,‡q- ú‰r§­xÊi¯tè´ª:í·B2Tøà¤’!õ=P½K­W}/¶î€Âʰžì¡g>ªG<íÞì© õ&?>[ã¹·Å‘tèÈ:åÈG^È‘ÏðÇÞ0t".Ó§ÙeØ3Q¶Äiú°7šÝ†=“I§O³ã°76n'®ÓGî:M~ ^ðûc¤*=òz],Vµ^}ÊÉÏÕ7_Eî¸ë<á•øzÙeÎN.JÒíý†óûMµj¿Bsö¥ËáHM˜|aÑì¨zÞÕ&ó–\JpÔæ4ŸX/-vL†KÌóÞ«­­W;xl‰µÓvŒqN/7º8Û›å8Vúµý—ª,‹ç§ˆØqe9q)™½wéͽÖzš±všcnYBtÒÊOv°0^o7ÕFôô8dÍ @»«ôï–À@^ÁáÚIäè‘аë©Ðp©ÃаKå|þ¿Æ±Š2¦ÀRZÚTâÛêŸåÌMY-ž¸t·u´.yßï~Ý÷ÆZ¿ €÷«wƉöVåÿ†î¢ÓÎgÍØítL]ZñK¹æºìAË–f›DÎÕ2°­òÊwݽN ¿÷cž…Æíq\ÝAÄ=èUÓ¾_k”ºÝNdUí|fî”9­- Gê¥ácJ=Ð$€üÙaù]•ÂþÒBþ|¡‚¿ƒÿpì/*:ß!pƒP¡¶¬\–’0°Œü«/þKuÉ¿Èòq]]çŸ"¾SZ¿Z6O~µ²¦Â!8GòãÌãê¼ t!.‘#Ìͤ޴ºŽ<«¬Ú“I¿­y}âo<6/„ædÞsX8¯:ð/SâB¼G‡>ôØ£SY˜÷x!šÁ/ãØG]Têtö\#dÏvªûWë•DŽ̩¸'Òï–ùjh¬Ý¦z¤²3kÖ˜±G~¼tåè៯Ì:2FdÚµ¦|Ù¼¹zËç/ÔÛsàÀî=ûDÍYõ\½ÚŸÒò7“\À\Uë“—ç5Ï+ïß¾B¡A_X®ülâuzÊ!ƒ)n ÈœäœÐxˆêÙ;ÁYØÇ­Ý…½'8̹ޭü…f—¡Ø{‚ÓLì½òÉ÷¨X½5;ÑéšWãF{øÛ/œ¡ã`.›­ÊîÉo ¢À šf¬†‡á­g¬¤æ ‹_†Å¸óí7E_¡¹bŠØ«ÒãÁ^I ¹ý0•D‘m¯#¼_ç/ª2dr˜S ­1 ÁI¯¦[D1í;Å,h%ЉZECm‡ûÃFеÏÙ^rë¨r}Lð„þt+ ?T¯ …°ûj@œÿ“ª ¨jH99GÔ`Ö¯êPÀ9…¹ØyùY#­çntÊ,Ÿ”D/Ãð?‡Õ/Xì4¹‡à‰¯ÀCÎ ½]PðšÅˆñÝ J½µI©øªÐymR+Îx!µb£vÔŠ3¤jÅŸ7<äØOwQ7uQG´tQ?ÝEñtUî8;¤\;ð”’í^‰ó|ÙÐ_Eñ±¬Ñ8é‚)ŸëîCoéžzºgèãÑ^ϰ®´¹g8g­õ4í4ÇìÒĘ|¤U˜ìhn¼Þî›f$´½n;’àáp»ûç y×0XÀ±wöýn)@`-Rž°$±G”LÍ3A¦æ9¸5Ï„N©yÎyVÍ3A5Ï=Шˆ´Ö¤ú‰/ ¾^1!ŽßäšÛl?”“2{œ¾Ó‹}Ÿó½¹Iøî­¹é—ÊwîC¨Ò8S'Æ*b]è*&Žbÿã 6Ž”¯¹›;Ú„|ƒ½ÉCz’bbeÚÿ }Ž[<†Ñ£¬Wkœ¦=‘7ùãŠ<ƒÜö¼û©¾ðÑóT:öëxC§ ·ígòiÓys ç¡ÁhÆMWèË@*}»þš Œ#q‹ ”H¾–PÛ5º=1ÈD¾K¢üû §Ã©3êàÕГÛC x‡˜åLâMüǰD*º"!¡1ø…tZæËl„ïée¡¤ˆ/gøï¿ç") Ç4°Ì½|ý}üýÍýÉ—oþ2â]h[tti0“Ø&¥øa<kà÷6RÙéÑ ÞL#]Ow?òm½iýÏ(áÛlhyø$ÖÔ»=Œ0èk £ãa¡Ê°õŸ­jÂQh¼/Kî÷iX®ð<ªT íÉ×S8¿|Yðßp`ʯ„ù+5Z„Ÿà/8ÇÁŒãx µûμìÙ¸».˜›©iÂ\åŒ0Ò|Àâ0t×€‚ãx3ùÁ^(I {¤`ÿ6žÏ¿¥1‹ÂKñÿ4`>ËáapFÁŠ“ëìâ»Îäà›'& #p÷¿·â9ü{xäØÔ¥¿ïÖÂy5>ï¡B 1>×qÇCfC\»C×£íj0¥A—ƒ$ê*ñH²;†ÛE,gÒ)O­Ñx—×Fcì×8H£¦$`¤±žZ7ÚÂÓä™^¡`y(Û%Ã"Ã2Æ­`†Ì_øýBýä{+µWþƱæuzÆq‹û¢uΖæV殆h)Z&6Ê1Ë1+r.C'QiNÉÅ쥩ëâ\ɳÍÈtÏî³ÇçåÅ•¢´ß©Ô¤À¤Ð ~9Z…L¼68lp°³´×%ÈËË3êwÂîÝjè$\Sÿ‰£»S³Ã·!æîÁ/ð³k?]Ñ{Œc—"=´ÖÉÄDOÏz&šÅà·®øëü©ÒÓÚ¥×Ò€’Ò?âÁ—x ¹ý|m¨nÊ9`-Wݵ lÍLìM³È´ò*¼sü·«ù¹ÎæÙ¢„¶2IZét|+ êç=HÖ:Ë=IcŸ?zàTûyEL±í$¶ãJl­[t@ªoô¦ÐÀ¨€µƒ;ËH}S °'$+ïš¼Š…4xIìJízãøéŠá†ô!Hkþ—û\ùT…¤üÖÞ¥ÿ!"ÞØƒ/Rm&JŽêw|5 ŸtþªÜH›%»^Ll½ˆà¿Õín"ø»Zù*‚ÿV¿Æ]W+_FFpU•‡ÑÒú»÷p ]:×%¯:~Ï–&‘@ü3t7*4Iâuå`éãóq.z@ž+Auóç‡B;0ÕxhÕX%z<‹¬Ò=Rü2ý‡‘˜¬ÁžôŠêÓчO`€WëæeäÌùòÕMcŽOV¸ý™ÐÚÚS›Ê•OHÑ/ó»²%ó«ù± œÍ~K*Tê7t#³¤,#+¦í@ÇÍÍÕOÕÙ:1?À4 Ç\ú¶Ëªó)vku‹¦ûjrûÖü—u®ž–A&Aáù+ˆÑ‹«Í6Zš­Þë¶K\P ¸ÿgÈwC*˜7úÑäâMz¡0«Šƒh:esLP¢W,ûBÄ©î7[÷±ö ËÐîÖðo×2(.ûEÀy?À®Yû(ÿæß-]¡o¸pã,4 ÍÈžxÆÑQóÐwõ+„P~->x¬r_öutÁ[†w¦ž½wTÎh!–y/wvñuÙäE<Ð9Ê7‰±§¼°½F •pLœ™›[RR•´ý‚»„áqÌË•vÿç,v¸Ë¿«,Q‡¸J ªðF|µm]b¸ÿ××ð®ÐGXSÂ}‰ôO_6u×L›˜LàÖhòÖŸæükr¡N”ˆ}|0ª¸âjoè™=˜1Üàçn¦íìí HlBî‘ {' XÉ<=òÔÙÇÐ3¡ ¬¾ÏÉ#Ë¿Ãcgˆï§Ø?96oVÿÒr¡t@=Ε Ëšl‹ÖC¿a¶ødÇ>xæ|¡U¤Øbò¨D³wÖš»lX×»eœnc¬lèNËÎ9.9akB|‚(2"88D>Cb—<0(Q‘sl^ #n÷bKA½'k #)ø€äß{äà¢õ¨=þ•'´cq í?Ј§ØÒsbñÁ>ûñU -Ù調‰`ÃÝ:g=FÄMš¶aªm`r²¶¼=.eZ¨Ý~x^øûÆëh‘;7 U±‡ÅÇ 1ÿI‘‹¸Ç‘ZXRÛ‹½ üPŸPÈHÙN³;QETTE#ntv¡÷øG; €=DÑW“U'ìPÂý¡Kjë¨_ ¢RõkŸ»HnÉ«ž ä [ëRLªä>ªÉØío—N ÄþƒøÐCž¼Ý}•ëÒŒdÛtèÍ_«y9ÍX}z­™‹ ZÇ(vã”´ŒmÉ!¢§Ö>1‘¾Ž]e,ò@MS¬lÊ‚nª&ÁÖ M¦á˜ÖζRÑÊ”õPƒheÉÏ­Uî{²@¾£…Üògp‘ï T/¶ŽÁI.xXöÈÊEûgj¢3­)Á?~‰ðL„»â^îxƒÕ`1Õ‰½.4? .q»Pz{„â RBñ„â,ÙŽ9}wèÎg%¨Ýz¤Þ0IèÇ´¬ qw4À,®Ô$é#ËfŠi»$t›°$4Ýqî _`Ð4™ålj‰_qL²sªáF —•k lªîåÁ;U"øÿj÷Ø`aëç?'»B1_¢°[%;íiZ¸³Œ8¸«úÂ"j`Ÿ¾¦úεôëÝ=‰,•Ný˜ÙBèukè"O®ÃceyeÄí]$³lä¿O8iRÕ&I•-kJ«FÎô ÿ¥ËDB+X–M]hvcsá»ÒÔ*Ï«"¨LæØBÅùIžðÚæìDžèÀô:Xúæ—X’Ä;$Ù:Á!î!žG)@ ûI_ˆTzJpäg”bú~@Þ÷x5ä}¥ä}¼Î+Pi3¨¿çU êOWyP¿¡Ä–.e #})Rïåá<·³p‰wµ‡¦a–F“=<ÆûÈÜr|˜G¤4zÐ@cõ‹X4w‘µémSåm5nRôº»5Œ‘G8bVjàFÅÅ8’¾à[¼àPM€^FnÂÍm¼Ÿ,rM6Ê]cø©&;³5ò|¸PÅ]ÄYÔWhÔzÃÕë-ÝŒa¹ƒÜõyÖÙî'ÜðjªiiºÑÓpÃëò'8H¹Ù$tEºq‚ý´‡ùm)|PémE «5J8³ƒï·ãT‚ âhúLU‡“·9d€Ö}±EÖä·©mg LÚº`€§cN„våÜó—Aõ?B×¡Õ )ì¦b¬ “  —hG×aøƒB càÃü:ÑÃÆ~ß®ƒMñ<`Ãî]1ÕA “å šƒ¯5 ­¿Uëö½Æ\5î §(I åæ_¹Ýøñ-J–ŸHh›žÍMBJg'%Ùé•íf™í ˆ„vÎÛd‘{imãüjRˆÒ BHcÿISË«a(ƒa&|r|ƒ¸äJ UËžà&¦ZÒ ¥ãQè–8«ûXO´…ýsþ›- u~ò½?J̰wâËã Wvºïúœ>ÉÉQéÅ6±Æs\tt\D®ºë–¬FŒô¢P8¦d3AމAbìæB'–ˆ]‘‰îåE¯Fëª\ËÉ’¸¸Hæô1¶q6\Ÿìžœã›ŽÒEÙ(÷*wåâ;@g¢…±À*b* Mß½¸ÌPÿx¤…‡ÒÈÄÅuMÀÆ@MiÃ?yiCBÛäŸjø„ÀU­ŒZ…£ùÎ&XÓvØÌicó)¶Hõíb¹´Åî˜ÿÆ4aTµ$ÈÎç †ÁgšVe¶i†¡yá{%ÞfØS‡c¢âc3ŦGû$¢´˜À|¦‘.ÊzGÕäžÊ ÞS|ICW.˜¼Ã ”ÓP;¬¶7t°–·£ÙSÒݲ2~^RÃ[ =ؤ†YB)áÕRJx8Zc ¬­ip`NMiÛBb¯PHÄ»üE †‡kâ¡Xç›ýü—ú“JÓ5ž¿Å1¥ ±8­h¼5Ç}ó–Ç›"-V9:{š2l’?ò”n]#©lq¨ËVýýxdhB˜yìRb”´îø¡Í[âkÉ[*·Œ]µXßkšhÛ[öÊÞQIëwä"¼£Ôät¡Ñ,äÅŒæP Ú mN¯½P8­l'œ^“AÿlœÒ™ì×°ÒëÀ2±K!Ì,„é±=,X½ú׸ß{±±¼/¿˜küØ…’g¿Þô,ÇO­½Ó­µÙx Þíz›xåHNWÃTmV×AÿV=)šãAžù%TS”R˜œ¸å¢l¯T‡‡„õ Âl6Ûo&­{YÆgasî*Úç»Û)Á# 'ûõNö®.þ3³!(!YÚ¾GÇråg{jÔ@ƒYµÑøb*.ð*€ñE ›¡z§ëÝ%?.´MvHOŠÏ …&o- Í*DZµ¨bd$¦<ÒFQ¸ËŠÙcu–WXj[9fëT,»€´ ï•Gð)ükä_XSÔíÉØ 7`I7^OÚëSƒ¯kÕùÑÂ;èIÉ:šM¬§jLÐÉ,· §Ëªºjú ɘ“˜x!E4³—”ŠŽüW«S¦ÕĪ$ â›êüÑdnº*^… ¯|Ôóy‡bßèÿó̇Õi09Ñ!³8œuµ{¦¤r3‘QÓ)[?Í­³“§HÓ­fééÓ——§…‹Ø‹ÛÃÓójz_ÿ>ìz;o;m?Ï_äw8ÃÖlÖð ¯å# 1Å^¼u¢Ï®³EãuÜWŠŒ6l£Øs‡ËÖL›°ÀÖPÉ0 NwÛà&ëÊì9¨Ö`öTSÆÇÍ~5þJyS&Û¿lÕ”q@~âÀ˜€d÷Ý fוkKmªîW×WŠÀPèˤ }ìö*a¿Ü?º&ðoí…é²2ËRgÓ‘PÏ[31P½ëо“:Ú8‘Fã½Íœ-Ú³‚=¶eеþê_"ȦÅïd Ÿ®kªoª-ÅÌeü]iç°y> ')c¤ ÅÖʪ=-þÕnº"ƒ¿ç}£¥>ò~ ?3OÀôMU#0 ¤gvü]á¸6VÃr-½†ñªJÞv\&œ¹ ’Ÿ¹1l^IxþŠ>­ÜöÀr«p„9Ây›¹b¨Îê5u¡ý± .Ãòn ‹‘”§ÁŒXY]"È•¼³0ûcÔ?'u £¨ÂPÜè‡>0ÿ«Upv{¹±Y[À¤|­€;î>„X {±q|…ðàŠ¨Ú–à‰nn£6 ØÑnëŸI*Ê/ÌMü •£2ï³ų÷.DKÑÞîÞ L¤ŸÝoÿÀŸpñáy[â‘eyexì³É˜ˆf!ûiklÍW{“{Zî‘+PaSÀà'Áï\º¢fŠÕŽÔòì¯êüH~ ÷k>þ¿7Âlò”¯Má#x¯.÷ìÖ!¿kîyáKèNBB+Ršîøßñ‡ø½É#qwÑ `Ú©>uúMFË:kuÄ´HVùa¾ôŽ]ÙqÛ³'Íx*1ª¿¥•ôŽˆ*’.¿‡ß ¡« ŠD.ZQÜ2l·v q˱Ä<Ë"Ã:jflUtÒÖÔ$†-HKmï ]¿Ù'jÆ·¸{h—_¡ Ã’hµfVo­Ö¶V°½+8Ò숤°±vô!ÝoÆ-^õ•¼˜(nZq} Dÿ€-׃þ;¹S6 Ó…JÃEÜãÂeW+Ì*–ÂRn÷XjÙ–¥ÓµÁ(–ž¾¥r6ÓìT•S̈iöžOC&F¶ÆvW!3daC²”ÃV‡}>˜Áý4Í×ù“*ÞºÓÄ5]¸ÑȳS¨^œC*DÙqIéqI1â-Ç“è`×Ī(ûM sÿBn+¿Œ»‡¯S â /QxHwïžä‹]ŠTe_²¦“Ú¹e—î2¿âŸ}eT·'ú­Ð´£ðŸÐY\ÆaGÞj%WÈQò“ Íg+üTE˜šu!xÛäƒÉ'·\FË'¥P^v¤ÞÒÿÆ,V½ÿݾO¶“éÓoR2ó„=Y¥jç|H«nêùZn5‰g¹gºŸg݃7¡% ÞF¦M“݉߸‰é¶×ô-qVðÁS-WóZ®nº¦BËÕ’Ú ‘ÊŽyJðó,> ïuãG´ð„†ÞüPn | áHyMrq™+í`Æ·t¦›N Ä&‚}—‚Á-¡0zÊîøÐ=ÅC¡8ÿõÊ-RªIDð,äô„bÊÌ[†?„¥š×àÝ„ŒìØÜ -1þÆ…ÎØê‹\‘»»Ýs?_wG·®‰šV;óQ4ЉË"qKbÝrô~#Sx´ÅjOŸu›´\à31må&ŽN]†î¿à¾[|7û"_-äèã¿.€yíÊ?*Sþøâÿ¸©õ¸ ±PD¡k¹Ýž¬Vz:×Ëi/·O9¶ßæ©hÕæysÙ@~ík’7quü5L”oáiêJä¼!]™w\W¾ GeüiKnT5¬&&³>%IÆN×ßîÛ@o¼V3Š»ó31"‚„„“ûŒ-kŽÃùmÉó6¸ëF}æäL!CÿÄÝY'ãï¡Ç/6V7ZȃúS[‹¬ùÓ0‰S´—ˆ·P´ŠH0À¢gWáËüe™u'¶È‡[Õʳ¨~ÌësóÍŠ¹ÌSõ°ÏB§ç­‡ew©Ò¥? téáý›ÞÞ‰óûÊ9‡dм½˜[¶Å-NH $5‰ŽÛ³E†Ú+ü¢ÜÑr†uÀux2œPô9,e//wwôÈ’ůÔi”?\vªÑ”©îI^W®jäø¹¿x §e2TŸWÂ{äW̓›26kÞ[¯™ˆý~KéÓ›fóZÎÒ„ƒ4dÇHOÒ~NÒ`Q³<hÿԤϑÛ¸@¼ö·aÐChK¶¨ŒœmöùjQXUð#‰$/¯,µ&ˆ©¢þB±;’+[ÊÝÉ æ ÊMwYg6b´ V ÄX ý•Š´‘ÆëÔ[·†åÒÔxºìw>ëyœA] îK¡ÂÅaωނXB\ é·\Jú=#'ý®GNëAË™¿ßÓ²3ò£ÔR…S‡>0¸qy­(¼s¿±Fýf/SxIb,:,O©m'ϰüBiÖQRd•Zf-ˆ7 [·yƒQá3·Z¦™eﲯB{ÐîøâüÝÛ3Π« hO¾ŽéAæá.Úp â<Æ™ÍAsM¦Û Y5#;-‚JñúcÃÜßß7(FŒìE>jýÚÁŒÄšÏZ%LÙôl)Àd½¸ó¡²lwÉo«;Iü«Ñ×ð¡Š>×8µõñ¯\ªÄÂ…SC!C Ó¥ÁʕǼtè²NÚ'ž ¢^¬Þs„¾¸–Ч'}K JÞBb)m"­³2–6‘·® ŠønBÎúŸ e¼Ýr2Šca¶òý/iäþ_¢¬É;Óºá.M³4$¼Xþ¿‡kîÝ•8ÐWe±©q ½ÒÝ~½«oxš¶gsìzÄXÛÙZl·Ø]…Dæ9ÖAuå½››é“IFaЊÚ4éÀáµf;ÑNt 1#›©BkFþ:Þ£lW®_d´&3¨´iáwy¥±¨4H?$[ºe', ŒMΉÏÜQ ºt,¡ A7bè—Û'\có³¶„åi›X9[#séaÃŽ¼”êbáú`pF(©¦çRÕªó  ãð-Ünià± MmXËs8G“pÔu³o°O°·V¨c¨w( EaÑâ"øŒWÓÄ{;xx$êë£&>Æ0a≼‘׿Ý$U…˜Üˆ"¶!¬¡€»žôàâ¬Ü‘[Eìˆ#[÷&\ê-1)ǵ ± WI±†×ª çÿ¸Ên ~`b²¦tmš! k§S×P¾yà²@sã1¨yªtO‹ ÜムUª1tÙ{ø‹¿tZ{®[Ã]y¶ØœÐC¶€ëñ†Ê†îI:3ð®UªE.ø„{Ê"^KÂqë8áàs]ŸJ(ÍÙ„Ä  ”É%°G(údw+t²—C—˜Þ´ ì`ná!típ-¶ÎZS6<ó+Rn]Áqlãí»²÷2ÂÂ2 Ïa½6ÛÂx éÞøè5;äP´@ÉÏ’¯´„ä yH¾Ù¨Û©®þ<ϳ0¸~ÈRƒ\0çŠðT:ðñÞsWQ!ŠöØjj§)£O2*Ò'›%OÇ ¹‡Üî0òp|®^ ‚êÕ_<(ïl诀ë.7ûƒR°“ÖРBQ‚ýÔL4§Jî/ü'´\{qí à:ò–ÛÅÇr|Ü0DL+GÚ.XÚ“N÷µˆ¥'|"èúÆeû4þÝ)›ÛÒê(fKÏB¹N!f·"Bt˜È>§ÿáêAØ"”Ašç…MésH¼¬‰O¦…ÐO¹Ò£ð§‚5±cXÉks0¬à+4^äá×EIøe~Àž†ò­"ï›Réöd: ù‹Á^ ˜ò_ #pYz:|¥ _Ìw§'"‹“¶7öhšèÇ.î³ÊÒYw}ª]âQ—|”)ŠEQŽ1³‡–ÌÌó6ôµÝ`µjþLóLÙ…-ŽZGÑðoذãx@±iEa Mr—U­ù¨Q´¨ÀG9‹2‘‹éQÄ|Ô.¬Èv˜…À…u¸°åXSXÉ ö.Àté{&Õ’¼(“Ù·ŸtØRüO§ZŠO^¨¥¸›ïÛ ¥Œ{’ÎkI Ñrb»Ž¢ð}¨çI”!kM°›`²,kµŠÛ ꪅ{éqÆ*˜F ¥¼<¡eâÕ÷ÁàšÀ=`†Á))$FEü»Ò^[ I™ü³‹8ä½%&'")ë :ÏÀ$øï¤g¹Û/ÕÆïÃJͲáfæ´ÆÂ{uà&<_S ¬fÝ8K|y5õÊ’=©M0Ÿ<§`á9¥´TµLÈ4  Y¿?ÉúÏ­ ˆT¸D›ßtÍçOá·mq»!y%²¼°SÞ<ÒÊó!¶'\³Ò¶^úú¤)^ß> Xñ«²±Ðävö@aÓb‚ ¯Oµ^“ܸ^ÑŠeþ·–½Ê`W«”Åå¥|k-Ÿ<è"•òÉÑV©˜Ïßí‹ùàÄ|þ~b>¸#1Ÿ¾ügÜôu+砹̲‚µ; RSòsmŒ}}}µ} DŒ·ohx^f¡¤Hô”Qðc{ MVE/Ӊ¨ÞÚäØ^Ìl%Ç&Õ=!ÓlGjíÄóK­É4DO¨¢!Š6þÚ)¼ø»ì™¢ºSÒ§z Ý°’Ø Q–V²C¼­ƒ£­³øó¸¡ÚûË^µvƒiõ&~^?»øßA›o¼jû§,YÈvUÉÖÉ®õþvVÙy<½ËΣãev*¯¬rjɱ±*®†áçáÑ5õrA X\óü#ÇL’xsXж¡…Ëú¦åí²VŒWj'ðJcSÒ£“w”‰j$çÆ–1 ä3à:¼ó;;OJŒM–{}‹†zC”Â!Áá¤PšêÄÔ΂º:†#Ïî£Æ¥p¼ÓF(X±@#óGö¸X£#=‡ŸÆ¯àüƒ;Ú!Ú‹f(U*ÊË+å‰)öްŠðlï¥ü%ÎÚÖÖÊ*Ù63+%9+Ó6ÅRxΗÌP¤.ú,—ãÕ’êÒQl ×[N^¥A@êcA”ôzÀ¿guʘÿ1$]‚×@]xÉ›6ù#)—úÀ;žz uW*[¨«”¸9žU`$®¹j'jÕOÃnºÎ ܇™­ ¢8µ*OÛ-Ò~ƒ“™Œ\2ŽˆàÝ¿$C×¹ý¡·´àåëåãi¸H_×ÙßÃÇ×ù¡MAÁL5%”8b¸ÿ‡Ú™Zõ0¾7…˜4©óÓh™ÏÆGLO v£} ØÑ¹¥{2B#ü<#µc]#}£“*ŽË̳O45°´²\ô+í·y±±Û<-èñ@©¤¨´[¨'tÕS¾Çþ®Ðû^Ì÷‚×…ºÄºZ8[7Å÷§b‰­K\zflrjˆh{Xd(ñOöÏŽ)*r[º'y ›^?ä7Á:øwsámÀ÷ÕªÃt~1·ªƒ%íÛ϶¹FtUqv%*W 7™¹^‘„$Åí/­Ž-Q²0H©w>™ãòŸ~Iž{€Êó<è êëzÀÈ2È/«;ƒÎõbG×5°sÞI±±u,Ïsx¼Õv*ñ4 ÙÆþNþÎÞÞîȹ…8nuŽpÙâ†+[+óT˽i)¡QI¢¤(qBDFDFH¹À§8)ÆÓ2^;v}”gbRâS W¥Ï½ØzÅzÑúUÞÆc˜%fUø…&y¸O2O´˜ì‰ÎÄ”cn$/Ëpn¦`ÕR‹'ÝÿE-šÆÃþžÛ™ ×e‰öÕÅÆ‹wn Bfì7$/ÃÜñ'0®9€À4ò”uó žgkè6ÏQË™ omEZ)Nú¢Æî*€y’ç{´!Æv“/¡6ó!/XHÅ—|à=i–Åy^cHâæYÜd/7GÎß;ŒœW”FÎOh'[_gd¯xH,6%5>;=Y”š&töû<ÞfÔ£v¾6Dêa¤ê"Ø”<&o«›®¨Ñ¾Žè,úâ¹Áþ›7mÞ¼I+Ü3Øù1^^¾îÚ.`)pFÍ *ñW°X3+ãÌñû²ÂµÄ[b6· c}Wj[`¤?rEÞ^®®îä-vÓäGmèné=ßYËÂ[ô:YÍõ%þzâ!ôÀ·=Y°ðv›•ÞKÁþY, [ð†—b4K¾W„Ô_ùf^MaZ¹GRjïLèBR*ºk É»‡{ž ¨Òˆ¥Ð&Ä{ëäÖu2ñüQ‰  E¤*Šð\-ÂChÃ\ëÈ5ˆÁô`¬?ÁžoÕ'îÎýHƒZWäããîéá¸qƒ§%bF-úºƒFÅOª+ô‹`ÀƒÎµÄžá6÷R¹Í~ŸÂ°wb~Ú%¦GÙåôI&¥KPrPžU’1šƒl=í>÷4]2CÆo–®›Ï"Ø_ýyL /~$6ªY3÷V»`3~‹J«Ô«ÁÀW"T6Z‘N™Î#;‘/31u¸Ã§rø-¥F³e“ z!ÿ{x·=3tÇï™Òð^ã8N™¹µ^ü#ïØÅÉ:vƒÚéØÅuªc7ëÙŽ]œJ»w@Géë«ò©'‰D0¸çm‹ÝøYÙ‚šH5Å’›RN0Mï#À²ƒ™ör˜Êéï•,¢vn.=$Ó™:´Y¥hÎ>¼–b+[x8*ÌÒKÏNPGVò7¹fÎÇ:+W;íuk ëFX9zé"­È5Èv3s j9($0“–ñP£Ý¡ÅâÛC5·½¼;?£í×jÃGQ°Y†ÁEÄÞk\̵ý¾ÖðAGg;¯ HKÐG„Í\£Ióð¡¢»(okV¼ôâÃo”íÊ8….kµh0j_loQ6jýŽ¦È§‰. þÇÞQ0l}ñ©aëOfëÆŠÄŒ HðZ:Wë%Ð]~~1žÓ惧9Ëu*ð¿öT¾¾$G“ܽ5—½è;-óaVßsïøÔ°i¦¾‚üø»Ò»—ß;û¨åîe÷N±¿¶prê07]Pœ–°Á;è$þ,÷ Äú õlV*SÐøö<èÀ70`4L߉¦# ›%‹2 LN÷tšåYšð _²ª¯V 9V(»vD3r”O2†ƒ•ªóI²iX p‹æ©N)ñ¦cÉE”Ü‘Œf±§hÉý–`á+Ih­VÜ,U,âí»>C¿ÅÌÔ9Öø¾©àž’Y–3®ß>)™F·á=<(c>\iŸùpïÿóáJ3óÁ ,T^‚Ò¬É ¦IG–Ö6™ŒyvÌD±Ôœ?‹”H9€º"-ºÍ’ðÏÏ«ƒ§—½¥86;ý)Þ\§ô ~ÿìG>†C;½ÝèŽÜ2teÿ‡‚¤’\aêÅäîn=-w×®ÜÞ±gÇÎÉÇÚ°JÖºP_j3ë[­šðj¸¥î^Œ\ ï7x)äÚ²ã«oÚ†™ø!³¤^í¬ Ð«¼›=q4‡°ÆÊ©‚Ö"£TûÇ<·í>e „H8™D M…³’)}c´±ü¡ê¾ïj×2~ªÀ‹Sã?x áÙÜÓ»@ȯùÛuøð„ P‹ ”k4~LÙaS4*|Tv|VraZÂNòe(rã‡` Šœ4T+è³Ñ¦óLyòB`—ÛF[R˜Y“éK^뤾d}gô%¯)Õ—¬q}IphP‰Ã$Ÿ&j8ÉPÿëy¥™4±iºËYG)Š2ÍÇ´“­E ÿ¾¢¯ÙÌñ/8þ[4¢Úª™¦(yÔS¦»5 “¿J=ébñµBü˜*ŒRÕ>_U{K¥ªö M’±Çå[BÎɶ„ÈôÐ a¥L„Œ#µõ¿¯ª"7gŸÂ5!y¶´¯BíÙ–r€|ý˜–z RZäËëw5#•‡£¬òX)­<Ì…Ê#¬¹òj§çõU}Öb Drìg}~ú Ô´[íôÙEªæÁRï×½ÛoãW«*ÿÖZYö„Ði°sr+p!VðSŒ/1”Žˆ EF` 5Eú±òž cI¼Ûà¸g>ÃÞùÃÎv+ñnde´.È.É=å ¨ät”ˆ|ñG?¹Ž·uÒÆÃ\<]êâŸtdÅ4±â,ªÙ‹…Ú½ˆÿ(G ‚/¨Ã‚ ŽßbÝÓ®^šIzÛ¿yHbãûÅG/Uе8¹Iz0åVJì>ÄüBMÇó5vf-Ñ™°ÌN*8HB¦onõZ¨½)ŒÍFÂeŒÐÍ1A¸6Öq·ÐWÒÚÁ€ðßAÁ#ð¿Ïà)ÙéùÕâäÙ©œ§wvBrU`8%4¼•è(wã$ð.IØ`(LFÉ0{å)Ô„ð[&@OâW`èÝáÛSr3˜v¥°Ø ÅÍÄÊÀ^ß›/tð`zB˜ÎQá@ƒwhãOÂnq='N¶”Bñ×8¼­8çÉVâœhaZÅøk8.Æ5/ CñˆV°…³˜.v»ÙÖÇ•ô\=°²wT‚iÇ4 gÅ>¤ÏõVIH´m&àxeÀ‚œjU½ÚN)ˆéŒªªþÔ±::Ûj µÜó—-TU߿עª:>WÆ`«ÞgßoR†?>ïr}ìƒ^,GÜ8öÏÇÎßëN¬¾ö]:Ã>>•›sôXoTå¸Ã$g]Öª8}d†Œ¼\¼ü=‘òˆôO!‘OqbĤçäî Îᆋtüð;øѲåû'h¥|;dÁ÷ºóFÍÈ>3Qäè¸Üo+ÿã¯eøMË»àUå2Yùƒ’×*+‚XNki! p¥»¬ æ)ƒTȶü;kï`„Y„¿¶´prUwÞõ¾rÁD8L]ýR›½¨R‚oÛwªÞ/'÷(æ‡%º =¡}¡qsFó í£¥-ÂÒî f¢ä-nœ&löJ[`æáâädïÅÕ™F[„[¥t&•8¾•+; hžr™\«ÎwSó½ 0¨pxkWÀ?Nn R‡¼¸’ÐÜÔ¬n‘š²Y¦™c =K(ô}šA¹÷ꚡĨ· ‡KűĤíœL76™t¦{ª`Òž2é¦%FĦ_ã£FÐ’›´¬3D®ÿ:{C8ÖËo ¹-VrðÕ4ƨÖþÀS‹AôTÞŠ€“\£f‡³É|öËIm²eóÂóV·àÁ©¸öeJ;º0оהn½WFè”/ób5XBl ò,g ËÖc‘ »Iì‰g€§¿ç@¥ùDøÆlŠAZ(>2¬ ˜¼à¥.tq@˜ç®~ðfM<]щF·'æ2h0¼©‹Ü4ñž"t‘·4u‘y¶‹|âe!†VŸéÖàŒ®ðû Õ²€â¿J= ¾âBñWFy€åñërœÊ´œvzU jt>áжÝÛÊ+R ½¨ÜvûÊí+ãf¡s†ãGZ»ášä»Bá+ *ÐØÅxbpo*¤>(¼ð‚>Zèšõ‰yÕóª¿ÏŒ¡qVóÌ[h!´¨&'Í-Õ+ÕÛmY餯‰{Q‹]Ú¦ÝL‹|ä ‰×4öN>Ô”zë‰Yn& &øµeßP8¨j¥ï) »áòŸj•üî2PgJÿ"Üýòo³F. Â4n¡¢¿ˆÓß®[¡sÁü:ºŠ.e®¼t¨ì/é0þü|ˆçã!øýaøÛ´ù\¼‘sÄÿZ¸hêÖî°ƒž²·’³Úæ.¸³’S•EÀk¼¤ŒÖ"°vHÖ4¹3¸´|”Jøê¦ÉÙZ:èÆÈÜ•h%ZµÑÚ‚©og KÁwþEÇ‘zh[`A`‰U ~S—ØJÔ`‰NÒ^yU`œ7²Až~î^.øSl¯‰ÂXß8©eÆDänÞ‚¶¢È Yc±< Æõ>þzáEš¸‹tÁoÓh¸§çbèo6»F¡ =ô¤a غ™ž\¹E+â@)l QרiY¨ ÈsžŸÇåþ ‘£Mé‚ÿGÇK ­?s˜fÏLJ…Dkwãû‘Û9Ò|3½ØCð?ÁUPltGkI³ îOš=Բрä >ߨjÑG?Ò¸ÖícyÿŸT¥¨ƒªtéó.a³jQ¬¦rÏ—­ ™ó@«ªÔ÷¸õȋĀ^ìã×X~€8öžŠ•N¤\‹È}.®Ö ¿\³ mšT·”E¬íõj0£¾ž‡¡ çÄ»åÏþžŸ5ö{UAîÙàß{>J TUÛîÄÐØ&tâÇH%Î2¶ ýtáÉü —wÉZC?æÆbjŠþÇh0šRª{Ý¢ÆcϦ_~ åvÏ©tuùrÉ÷9ߢÑhœõì¥ãæ¬úán ^ïàa> ÷o·§´sa#ÿªÙ{=@Û ’±,˜/Ãr ßE†|ø!ÐÀÉ`ó|°GC4pJö‚©$˜¢»= DÂA:|Ó¬©$=I¯'è&Ðì5ùƒûûûR*ù¦v5–^깺”Õ™ ý~RƒG·Õ³!sÅÿÂ]ž‘êªðEëDS-ÖVAªKgɤO~kle2aÓ󛬃Iªb%™Dã®zA'ã(¹å£¯W¥±?**Fófq³’zµÊ?îßW'Yè.·ÞŽ|a¢]ff2ùB;Yˆ´±!K¶KÏL%³!ÃùøøË–Ck{PÅÓ=ë;؆øçS›pwé„yZÁAÍôªWi7/AÓosöï_,u ×߯%¬%kµ•,{9ÐÏ»&MƒM’mJcžcSÁ+I0pß ]šQ ,”ѱ`ÇA?!ˆÊÇî;bõPG žâMó]é»Â"KQŠþ4hLþÆjÙFeôßÇÈê oûÙ;ûyº"Ai ˲Yk`»TZÁ&?«5Ð_ÖÃÆÉåK!»Š; œH$Ê^"ciÅm‚Á-’Íj[ì Fùdë Ä-Ç%ù{fÏwá`>Ý©#Œ|Ü[BL‚S¬UŠQÇ|åç(N3×è,·!ID‹è7²ÔÿüÜòå²aALì¶# ¢·¤ù"Ã`j'ðcþR}8\ø0àòËís˜~ÿÄaºÜÌa›`ÇSø\+Ên¦©c¦©×…#eIÿº†ÃŸ€™*úæ–Û ^’¾¹ËCZ*yczB|L‹ÕBœi©È¶£!»³%d]lt¦Ø…ì‹‚òýS€0Y"×ó¤R¼¢:¶ CaAá Ö£á-†yð6Í>z¦Sôk{FÇÞÌ®¢w[‚‰·êÃkÃI¼­í$Eë~g(ZµJ)Z÷_œ¢Ëÿ¢:Æ KþS%ŽòZ*‘Í^-’~¢+4>×Äå?{(à=¾Œãϵ¡°zmlžœÛ)i §ZŒõøG”BZZ;ËèW·ùû¥,n•‚P;I¡¼ÉyGB?º"ùŽ„¡÷чNe&èœo|ŸzAÖíUØ<­6Óÿ¾ùЛ€:or‹ ¯eA] /âØÇ AÎŸÊØ±j/ÛíIqk%ÀÂÛy”ÈÉzÀ²‡ê*}¨ûUéEOkîE_TP^àùf–Nkœ/ÀR´Ò=hI išk":ŠÄù™HM÷K¡©[»Ð4\€¦¹xõÓv’"ØÉjÁN"ävÒÜÝîÆ‡¸J ªðF KtÈÝ]ߣ޼pÝ¿¾†wI)9¬J¸/‘Îî M½5ÅCr?…Ñ$Ë->Ì-ø×äB([ïq0ª¸âjoè™=˜1\ççn¦íìíàE2õ&äɰÿé¬áD|\O#…"ß=J+ëûœ<²ð;¬1Öq†h‘ñ~òñ ¿›7«´\(ú¾!Y1Iú×. ±®Ì?z/"go,Õþ“¨ãk!JZ Èv’jÒkÃcód´R)¬y™9?§¥A&”¥Ý•+šã:Eʾ¯±YAÃÛr¨ açÕáWÎdDçhûIUBnïÜwA«`µSûÇöÍ®3úÍŸ‘#Ï£’Ty/ò± xÞ“'ë3î[6¡eÌ,#Øz.Âïc•šGKfDSͨӶåèc*1åiÒ£U´ÏËžGû¼U[Ë …+¯EÞ÷ÏÀ'iLæ9Aï¼éñz±Ûº€™D±§<‡æ=ÞUHtCö§.™¥ù5½ÏΨT¸±:ºKë•Õ?u¹•’¿¯Ï®ÂÕ‹–ë4í¬>åQ½Kà:.Ð/>­+rõÒ`·wIYU8òÙ”ˆ{¦Kp81¹>*rÒšára½ü å÷½~ØŒóKTÄpð?Ï"X%, wK®¬ï±•ÜñéÆð+0%CXžÛîÊð«]šv†U¼3ü^›7pµËÍèì‚}v•¶Ú~ÅC¶6|£¡h$Yqœ;¡ Îɱg½{.®¿weAÞv?ïüüóŰ #¬ÏÚ»ð;]öWÚ˜È/N„E‰TöÛuïd‡¿ûn]ü»ïuéòžs_ endstream endobj 11 0 obj 33920 endobj 12 0 obj <> endobj 13 0 obj <> endobj 10 0 obj <> endobj 14 0 obj <> endobj 2 0 obj <>endobj xref 0 15 0000000000 65535 f 0000001505 00000 n 0000037027 00000 n 0000001446 00000 n 0000001553 00000 n 0000001295 00000 n 0000000015 00000 n 0000001275 00000 n 0000001836 00000 n 0000001622 00000 n 0000035925 00000 n 0000035841 00000 n 0000035863 00000 n 0000035893 00000 n 0000036969 00000 n trailer << /Size 15 /Root 1 0 R /Info 2 0 R >> startxref 37077 %%EOF Rcsdp/src/Csdp/doc/csdpuser.bbl0000644000175100001440000000207414342635402016107 0ustar hornikusers\begin{thebibliography}{1} \bibitem{BorchersB:CSDCls} B.~Borchers. \newblock {CSDP}, a {C} library for semidefinite programming. \newblock {\em Optimization Methods \& Software}, 11-2(1-4):613 -- 623, 1999. \bibitem{SDPA} K.~Fujisawa, M.~Kojima, K.~Nakata, and M.~Yamashita. \newblock {SDPA} (semidefinite programming algorithm) users manual - version 6.00. \newblock Technical Report B--308, Tokyo Institute of Technology, 1995. \bibitem{HelmbergC:Anims} C.~Helmberg, F.~Rendl, R.~J. Vanderbei, and H.~Wolkowicz. \newblock An interior-point method for semidefinite programming. \newblock {\em {SIAM} Journal on Optimization}, 6(2):342 -- 361, May 1996. \bibitem{MittelmannHD:AnibS} H.~D. Mittelmann. \newblock An independent benchmarking of {SDP} and {SOCP} solvers. \newblock {\em Mathematical Programming}, 95(2):407 -- 430, February 2003. \bibitem{SturmJF:UsiS1M} J.~F. Sturm. \newblock Using {S}e{D}u{M}i 1.02, a {MATLAB} toolbox for optimization over symmetric cones. \newblock {\em Optimization Methods \& Software}, 11-2(1-4):625 -- 653, 1999. \end{thebibliography} Rcsdp/src/Csdp/doc/constraints.eps0000644000175100001440000001723514342635402016663 0ustar hornikusers%!PS-Adobe-2.0 EPSF-2.0 %%Title: constraints.fig %%Creator: fig2dev Version 3.2 Patchlevel 5-alpha5 %%CreationDate: Thu Aug 10 21:59:32 2006 %%For: brian@bullwinkle (brian,,,) %%BoundingBox: 0 0 320 131 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 131 moveto 0 0 lineto 320 0 lineto 320 131 lineto closepath clip newpath -55.7 171.5 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /reencdict 12 dict def /ReEncode { reencdict begin /newcodesandnames exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def basefontdict { exch dup /FID ne { dup /Encoding eq { exch dup length array copy newfont 3 1 roll put } { exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall newfont /FontName newfontname put newcodesandnames aload pop 128 1 255 { newfont /Encoding get exch /.notdef put } for newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat newfontname newfont definefont pop end } def /isovec [ 8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde 8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis 8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron 8#220 /dotlessi 8#230 /oe 8#231 /OE 8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling 8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis 8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot 8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus 8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph 8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine 8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf 8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute 8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring 8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute 8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute 8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve 8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply 8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex 8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave 8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring 8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute 8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute 8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve 8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide 8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex 8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def /Times-Roman /Times-Roman-iso isovec ReEncode /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06299 0.06299 sc % % Fig objects follow % % % here starts figure with depth 50 % Ellipse 7.500 slw n 1710 2430 90 90 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 1710 1710 90 90 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Polyline 0 slj 0 slc 15.000 slw n 1350 675 m 1350 2700 l 2025 2700 l 2025 675 l 1350 675 l cp gs col0 s gr % Polyline 7.500 slw n 1350 1350 m 2025 1350 l gs col0 s gr % Polyline n 1350 2025 m 2025 2025 l gs col0 s gr % Polyline n 3060 1440 m 4140 1440 l 4140 1980 l 3060 1980 l cp gs col0 s gr % Polyline n 3060 2160 m 4140 2160 l 4140 2700 l 3060 2700 l cp gs col0 s gr % Polyline n 4860 2160 m 5940 2160 l 5940 2700 l 4860 2700 l cp gs col0 s gr % Polyline n 4860 1440 m 5940 1440 l 5940 1980 l 4860 1980 l cp gs col0 s gr % Polyline gs clippath 2908 1740 m 3075 1740 l 3075 1680 l 2908 1680 l 2908 1680 l 3028 1710 l 2908 1740 l cp eoclip n 1710 1710 m 3060 1710 l gs col0 s gr gr % arrowhead n 2908 1740 m 3028 1710 l 2908 1680 l 2908 1740 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4708 1740 m 4875 1740 l 4875 1680 l 4708 1680 l 4708 1680 l 4828 1710 l 4708 1740 l cp eoclip n 4140 1710 m 4860 1710 l gs col0 s gr gr % arrowhead n 4708 1740 m 4828 1710 l 4708 1680 l 4708 1740 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2908 2460 m 3075 2460 l 3075 2400 l 2908 2400 l 2908 2400 l 3028 2430 l 2908 2460 l cp eoclip n 1710 2430 m 3060 2430 l gs col0 s gr gr % arrowhead n 2908 2460 m 3028 2430 l 2908 2400 l 2908 2460 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4708 2460 m 4875 2460 l 4875 2400 l 4708 2400 l 4708 2400 l 4828 2430 l 4708 2460 l cp eoclip n 4140 2430 m 4860 2430 l gs col0 s gr gr % arrowhead n 4708 2460 m 4828 2430 l 4708 2400 l 4708 2460 l cp gs 0.00 setgray ef gr col0 s /Times-Roman-iso ff 285.75 scf sf 3150 2475 m gs 1 -1 sc (Block 2) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 4950 2475 m gs 1 -1 sc (Block 3) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 3150 1800 m gs 1 -1 sc (Block 1) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 4950 1800 m gs 1 -1 sc (Block 3) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 1620 1170 m gs 1 -1 sc (--) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 900 1800 m gs 1 -1 sc (A1) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 900 2520 m gs 1 -1 sc (A2) col0 sh gr % here ends figure; $F2psEnd rs showpage %%Trailer %EOF Rcsdp/src/Csdp/doc/csdpuser.aux0000644000175100001440000000123714342635402016145 0ustar hornikusers\relax \bibstyle{plain} \citation{HelmbergC:Anims} \citation{BorchersB:CSDCls} \citation{SDPA} \citation{SturmJF:UsiS1M} \citation{MittelmannHD:AnibS} \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces The C matrix.}}{11}} \newlabel{cmat}{{1}{11}} \@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces The constraints.}}{11}} \newlabel{constraints}{{2}{11}} \@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Block 1 of $A_{1}$.}}{12}} \newlabel{a1block1}{{3}{12}} \bibdata{sdp} \bibcite{BorchersB:CSDCls}{1} \bibcite{SDPA}{2} \bibcite{HelmbergC:Anims}{3} \bibcite{MittelmannHD:AnibS}{4} \bibcite{SturmJF:UsiS1M}{5} Rcsdp/src/Csdp/doc/constraints.fig0000644000175100001440000000301214342635402016625 0ustar hornikusers#FIG 3.2 Produced by xfig version 3.2.5-alpha5 Landscape Center Metric A4 100.00 Single -2 1200 2 1 3 0 1 0 -1 50 -1 20 0.000 1 0.0000 1710 2430 90 90 1710 2430 1800 2430 1 3 0 1 0 -1 50 -1 20 0.000 1 0.0000 1710 1710 90 90 1710 1710 1800 1710 2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 1350 675 1350 2700 2025 2700 2025 675 1350 675 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1350 1350 2025 1350 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1350 2025 2025 2025 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 3060 1440 4140 1440 4140 1980 3060 1980 3060 1440 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 3060 2160 4140 2160 4140 2700 3060 2700 3060 2160 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 4860 2160 5940 2160 5940 2700 4860 2700 4860 2160 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 4860 1440 5940 1440 5940 1980 4860 1980 4860 1440 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1710 1710 3060 1710 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4140 1710 4860 1710 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1710 2430 3060 2430 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4140 2430 4860 2430 4 0 0 50 -1 1 18 0.0000 0 195 870 3150 2475 Block 2\001 4 0 0 50 -1 1 18 0.0000 0 195 870 4950 2475 Block 3\001 4 0 0 50 -1 1 18 0.0000 0 195 870 3150 1800 Block 1\001 4 0 0 50 -1 1 18 0.0000 0 195 870 4950 1800 Block 3\001 4 0 0 50 -1 1 18 0.0000 0 30 180 1620 1170 --\001 4 0 0 50 -1 1 18 0.0000 0 195 345 900 1800 A1\001 4 0 0 50 -1 1 18 0.0000 0 195 345 900 2520 A2\001 Rcsdp/src/Csdp/doc/csdpuser.pdf0000644000175100001440000073074714342635402016140 0ustar hornikusers%PDF-1.4 %ÐÔÅØ 3 0 obj << /Length 1995 /Filter /FlateDecode >> stream xÚ}Ë’Û¸ñî¯Ð-T•GáS"3ö:ñf»b%9Ìú‘ˆ2IhAÐöìþ|ú‰rqr!»F£ßxØ¿ú뻤X%»Mšùj\¥ÀE²Ú&Å&«ÒÕ¾Y=Eo>¿ý´¾Ëâ4ú÷¨Ý_F†ÿ6™F¯¿ìÛU’lª¢HIFµ©vÙê.-7e•°ˆgÔûÒmô`]½NwQ«ÝˆÛWwÀ¿-?Ûäù–ùßêZ÷ÈuXßÁW;Þ›V¯ØEiW|v gç›,ßÒÙw J)AZžnª¸diï‡u–DÞYØœDÍT{cÞ^®ðt›cÐ!Ù”i2¿vš‘ñŸGŠÑÑý:-£ïøQN3õ¬jÄ¿®‹"R'!­ã­£í¾™á$t¶û-NòÁø°ÝÙ“S}/L9îÇÍú.«hß’±QI¶5+©º“uÆ·=Ú%!Mñ¯ðƒ ݘÚ[÷gmÓñú7TNN"·N¢4 m²Gæñp"ggzÕýÙLªcÂA9ÜfDíêµoÁ¾ ¶a&3×WûwÝõxöXµ;Có²Šþ¥‡¦ø?ël=4Ú —‘ Pì¢ÿ®Ë,²ÝW”dɦþ—Êè)û+“2ºgÞÞ¢‡p©Ñ^™N7"í0yæ,FÚ÷%ó޶×ß[åñJUd'ß(¯Æ=ÖΜ½®bÃeq0\uuÎȸFI(€j%$¹)#G; Íí–§®µ  ˆÚfìzø‡½„Hÿ4zÃ(…#|ÛÚè¡~f™3)bWÓŠóg´6µÈ²è£¤y±ãuN‡ë2¥ïÔysî#÷ì8\j=ŽÖa†U «‘V ¿…Äj˜Økð!)ÙÇ!3a‰ì‡€›Þh@'ÏÊ©®ÓfPvÝ•FSÐ[˱ùÖzøðiIÕÆ`îNšó1%Ëæ±d Þ0>ÚÉÕBª%!´°Z&{Ýu?m®m†ÐtLn9¦…Û21ÜÆü!{¾­‹-”c§q)Ó:>Üž±‚”P÷ötØöV- $C<›Ó€FGŒŽ%7‚ÔW©H™F0ÞQ@kNm÷,4ȇT)´r C6èƒSKvYÀ‰11vtËY–K&éñþúÿÕxó¦qÈððxÿ™ù;8£GÎh Už/%L^éºÑ2Ô*4AµÃ²‰ø€ÇL7uŠèÆð?jå'§e—§ôþj(ÀŒçuŽ÷ÌTȼBÿ0PÛÁ/¨OQ#\Ò—+D™p·±î«`œgô Uæ2ŽÆçž¦½35“z…0Ù¸©Üì¿]ç»à¾Va‡FkÒ²À· .£X>ð)ÄtÈ¢…LæÛâÔ‚³A^I‡A`|¡ö2LÁ }Mÿ>)lJcàåèŒ9ÑqÌ"t‡†ñ°®y‚i…Ûƒ¡¸¹¡T}>úÿÍ!/gÞ{ ä&¦¦1Ò4#÷Âßø‘F´ YÕ&"ue‡Ž 4£°$ùe4…ýCÝM×’£ø'é*"Ñ/¦”X.¾#À⪞’eJÐMÿÄ æDáÇ8ÐéÚé˜¨Žž¥e9ÏŒ\lN-«ŒÞá$då\ýCõw‹´ÓhŽ]&á–m‹Ù•¡ú†€T3ž ¼Sæ Ï 4å¯SêŒË„‹Q`a– t2Ï$äÓK%]ÐÚÀ€Ún£/™¼ÅñX€03FvßnoìŽäVÏ/GzÁlŠ©‚ܵêê© A‘ÿ( r¸%«¥¼¹3Ú„¸¥?ìÄ¢Èq€SJWh Hç¹|äÌë  ›;Zæãb·‹Ž ¦é>HѼXO0Ã_K^ ƒ«çbš¾ô<à†ˆ'I°áanXÆ ª(ÐëB’κ0bäGdÄ’+P¹{&ÉÌ7HæÉ> endobj 1 0 obj << /Font << /F15 4 0 R /F16 5 0 R /F26 6 0 R /F8 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 11 0 obj << /Length 2626 /Filter /FlateDecode >> stream xÚåMwÛÆñ®_Á#ôjnö{m}°Ýú%9´é‹ú^Ÿ“ ’„‘ÕþùÎì,@\в­žzÂr°˜ï¯åÛ«‹oÞK»š)måâêf!”bÎú…5ŽIeWëÅOÙÕ]y¹TÎd?þåZüÐ6×›²¾üåêûoÞûEÎr xà{¾XJÁ¼ôå;úB©¬k6¿_J—•]ü]ÖÕºü™ ½­v%ÁîÛæ¶-êºÚÞ"@#àúRdx/²:~ÙÜÐs¨‚]7M ›1 !3Fœ¹rdð×;rÔÍÁ죇…Ç楾üz¾O3©Nà[ƒ>Úôœ¶øà¬DE®UÊœ]œ]œM‚RÏ—è‚Þôr=¶yî™à7–©¸a—ñøoÓaC¢¯Û™¯OœÄLx&À ÆM~p¤b Í~I1AÊ»PLõ:AIªÅ”ñgŠ)Ø”ëÓµ>«cÍ„Pçt<Úôb:žT]cº Îö5A*Ú¨iRçc\ Xõù4þqAÓÇbÆ—"ŸDºqùBCxª8T䌙099N‡Ä7®cª¤¬úÀjž¢?U*ßJ’sã|«G¦…¥¼‚e®2QF‡^ K)ú:„Mú:)¡Ñ+V˜Ë>^›·Ø"tßÅýݦº½Ã ;úýû¥1««bW5ÛŽ`Í–žE锪.6ÿ‰±XRF 7‚5‡¾²¨ZÈ™о¿ôÐR¶/?õý¦|¿¤ 3l'ÌÓïqh^ âsxb0÷tÔC‘² ßÛÀ-¾Aì}55ŠtVÌJÛ˜‘ÖÆ‡üqO½wGYgÂhÄñÏ®lñ`“)S#ŽU±¥EG¥E¹ªn $¾`ƒä>Ä@>è.H?âÀ~›nP1¨Dé…Ⱦ¥B•B½~‹’ôfàu™¢v]ÞûÍŽX^µ„2¦Ú>?÷5+0tÉBQCYhÜ8¸Ahì3ÐL‰Që·„óáørž囋¿^]üv©—/ÄB:ΤW Å¡€7ZÕ?ýÂkx =êCØZ/¤ÇhË›Åÿ¸x‹#˜Il0)ð3;²?DêÕ˜.9npÓ_S‘*N;+r:…%%DdoRL Ã1›v=&ˆÑLæbNË4Ë0#5ˆÜô½ñŸÏ¥»tŠyŸ ^2L¯Æùr–u¡GÏG}—©V<Á-U“J¦¯0ƺ„l(ùž¥{ÁƒçQ0“™‚zƒDG ½×AþÏ1÷OÇ843Â'ê*5áu?Åv‘4%b#·vb—Èìj˜ÜŽÚû™Ë™²§[Hh^$µ'\NCWqÊç,ä2iÀ5±â{¶ËÕÓ ò>ïd!…{Ž>DüϼÉó&ûrÞd¾Ò› ì…Ô:1ÉõçyÓ80šì ói;ãfq1DzrØô„Û©Y©ëN…Ηr»w $°aá»Ê3•¯t˜7Où®•*ÿ„ïÅrpnép¾ò‚Î{V‚Ïgþxæ¥cÿÏÎ;éÏ|äP*¬j2è þD³ÖT­ðŽåó{èÏ”¤YhWq~¨ÌÁÙM¢-ÒÀ©jý[n¶ ¬ õ+¬\¸¬  ›²èªëMIà¡ì‡7TöÃb½‡»‡vÍfúŸWÉ|Ž$ósƒ ›ÑœÙi±75gŽãÈtfˤô½kO ¼A®F<ï¾mZ™,•‘Ùk|ˆÓè–ÒÉú~†}t!†ØY?Eq¬~æyØÞìÃàÎôW6Ã~·ív¥_xÛ•´œ5LôQµíöm9 *v¤&kËM¦¾.‹ì@«RðH€Ûâž4J´YV´aØ¥ñì»mºÁ,V»j…M®¢&74YÂÇnKä`ju¹«ê@šYý|¸«¨™oÆ;Hü²Ù·ìYôö,|?Ñø—)ò®«‡èk6e[lWø}½ßÑâ®À]ÃL Sé¤¿Ó ?‰SXl›ˆmµiº²?1>O™•ô`¶¹ý"ÂøàP1á”3™šÌ=“zvK¶*º¼^r2 éòI‡L" ˜.ê"²Ž?b¾¥_q’½Âó`[Þý…{ß–«‚&0ðMŸqº«¢F„×Õí¾3ŽxEúÈJ 85çý8…Ÿ¬vLñr%¼A¸ÇÚ•Åš~„ ÈøøuÞªÀêÁ¨ų;Œ/Êíì£ö›ýZ®÷0¿ÙoWÁ7b̰PL§NoPVgÍ=ÍOp]Å'iÕâ@©-j¶êÖ÷ôãÉ&¾‡Žƒˆ!ÁhœP4ô$ÕqNù $ÜÌ%/Mh-Å/b~ã…E/ééÅF?µ9÷±wþ‹4ˆAÓý‹…NHªÄ¥‹Æ[¹Ów^ (nž¼ŽS!çó§®›$‡@ fåòìNo~Ý„t­@€ÕTƒ6jMP"‡'oþ\Öt¨öj‡^×§üd> endobj 9 0 obj << /Font << /F26 6 0 R /F8 7 0 R /F11 12 0 R /F14 13 0 R /F1 14 0 R /F7 15 0 R /F10 16 0 R /F13 17 0 R /F9 18 0 R /F6 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 22 0 obj << /Length 2143 /Filter /FlateDecode >> stream xÚÝXÝ۸߿BoµÑ˜Ç/Qdp °—4@ H±{À¡I´¶¼VWþ8I>7ÿ}g8¤%­å];@Q ~19 g†3óò—û›Ÿ>ÚÄ1g¤IЖeB&&͘Tir¿H¾LîWÅt¦e6¹+þ˜J;)6S˜´+"~øô÷[¤¾¿£ù§õ®*ÖÈc'mÞ–Û Ñ߯òª*6AÖ¾)4Ê鯩ÊÇ•\}'Ê¢üÊ…*ê kúíþoÉLhæ´†Á\lоHíd»Ä7)êz[i]ä;.š}Ñߨtf%Ÿ|œZ=‰LóéLL¶~›`aYlæ-–ú˜ÎüÒ9Vë¼~*7o`Íq0þÃçÈ=¯ö صåC=ÛUÑ€P¥TðZ潆ó 1;•Ò~w¤–mCƒí¾Ýí[æå9ã~j‰xÛ¢ii´$éz²«Ëu^™›%ìU>”UÙ¢QßñÓ7´FáhŽz® oöSP¢]GõĤ@÷ý¾‡Qî%e Ôûé£ÐýØ´ÉL &³Œ´ýÊ9¼¢Ç›±L[pŸçÉO@@¦,2¤Lš,Q̈£Ù§R ìc’YËëuó×û›ßoˆç‰H¤6LK™¤.eœ9_ß|ùÆ“,Â2ålrð¬ëÄ(ÆAOªäîæ7¿`ö L<ʲ†¥ÂÑžO#šÁ¹Yí»±/c:“‰d6³ûì©y=¦¯<ó¦Ž4îöýT8S˸2ÄÈ鯭íxFO G*òüsDH^92<˜M~™ ¦&®#ûÎÀÉeJÃß…LÂÄÍÄ™C8šýöT‚dÄXXç£æ—ö|"Oe \"‚¬g11h&D0ØŽjªKf=®·c£Ûzú¤ÜÄÄ$Pœ|+¡²sI<Ÿ ^*-c²k1Ym1÷¥Èí*oi”Óß®Þ>@–W>á×ôEÙĵPX` KU`5Ѿ^lÂRx(«Šä›Ívï«-íYŽÖN_e¬ƒR†:HÄ|³ b]´û:pæDZì½V@h¶Õžðé‡l$¶\ƯÕóƒµgxd–u;ýe¬db¸Ë:{®T ô·L½CNÅAHížçßÔ¥SÛ틦ÿëíL½Z—²ÎìKëÒðœz‰NBý=ä•L™-‡ dB†Ö)tOÓ$—ù<Âx)d‹ºÅvGÏó6´ØÌ\„Øç{»r]Vy];vA‹el>B¶Œnå9ŽcßXê ²É“ïI@ .‘Ÿ&Tè¶> ¯I1÷~:Ëää·‘êf˜5îy0<ƒòÔ0¤IÊSf€ù(W–gg¡<ÈÒÎ0¥õu)3ÌOÌ~y"ü6†"\¥¯$Â@ÆÓ)МB«ÑÄ2­äÿ²ª‹UGVˆg“Úþ!f «4ñb€£#²J#²"9§?DV¸6Ѥ \”ŒžÒT™¥Fýç<šzôôß–›0lÃj€Ìt%ÍxІ&9ý P&†NýmÉ<Œz¶ónREzYŠÛA˜ƒs £ÿóØfùlÓŽ™ë±í•¨úE°ér#Iš"”ñ\0Ž|ìÉL2ðͳÌCû,´ô®q/•ýq„1½·åàÖ¾­Š:§HÄ9! ŽÑc 3„ýïdú|m_UÞ–½ˆÁGùîüÁ<÷ý'·xš€å›G|‹ Õ ƾÉ] x·pÑ'Ú{¤ÝíÃç?5Ô¾îðÚ[çkÏÞ51¢¿«[£'wEØÌÁr[U[„ÍÃQtÕšS˜ÀÿH–îâîŸ\Ó’³ð¼«í&0¤iô•˜Ôƒ'[ŽEÑøwÓyö‰]p”!vÞ>² ¢m>r!fÁßJ‰±Ë±!ï‡èø5( ‹†AT†Qa¤¢ÂJ@_ušÜ?X)Bý ·麷–™VœÞ‘VÒGP—h‡UIgLk> ~Œ¤†§( ·[¢ô܇ä;:m\¡ÂÄUÞ= „£gw¨Ë¶-âcNpu8E…;`žÝ†Ó‡Ç‡"8µuÞ†^ò×& tº%ÿ³!2kƒ $#¿Yì €À¥àç#ÈàlYVÅ;~ùyYn0!qoIï¾ÅÅr0²|rP³Áþ!«¢.Ft•ŽYwð1ÝN+tÆ:ÈÇàÔþÂXÐ`ãsGþPû@Ç)Å+çÛð0 Fah$P`…{®WFûËl(+® R=ë°»ƒs¢;8ÓÁ½±:J×á܈ëG-R÷MÇ-Buƒ}úRIÁ8ò©ìèúÓè$ùZ—!dd¦wÏ®3˜ Ÿh!¯d¬Ï0@Ѥò;üeÔv€=ŒU(Òu6Ù8‚ï´8¢¯FÏÒDG }Iÿy§mU…`ŧîÅËz»¦<#ÿdXA|QŒ/«ùStC?V„"ì­xá­¿“îTü;Ç—tš4+ZmhŠ3;9àDÄȤn÷Õ‚¦Ç"‡\TäŒ&x™¾Èe“°EV±œBhÑ avU!GØÈÑòaxו pT› ¶ÈÛÙè+Ï'™·°?t_“”>¹Ý½¥`œ† ¾Ÿ}Þ>ü+rB^Zm”ʺåÛÅèWz_i&mªLê`Y¼¦Œ¹XÊ8%¤ñb/U.ÌYf…¹H™ì eœ…n“‹«”‘L§Ö#/QÆ^¬ŒdÂHH ~¥2Ð\¤";UÆœ*ã®P®FÂYu­2Üe\¿vL^ ¿F§œvöjewÜ^¢Œ¸JÈä×(ùñ9øª2rL™ÙYeà”ÒP†K~‰2ê:ÏÀïÚ˜¡¯Ž1óüÖëT!jœMÐOÅÇ­ÿ1® endstream endobj 21 0 obj << /Type /Page /Contents 22 0 R /Resources 20 0 R /MediaBox [0 0 612 792] /Parent 8 0 R >> endobj 20 0 obj << /Font << /F8 7 0 R /F14 13 0 R /F11 12 0 R /F10 16 0 R /F7 15 0 R /F26 6 0 R /F27 23 0 R >> /ProcSet [ /PDF /Text ] >> endobj 26 0 obj << /Length 1722 /Filter /FlateDecode >> stream xÚ­ÉnÛFôž¯|)F ÉáZÀ7Ž‹hc4*P´éa,Ž$&\Îбóõ}Ë E)”}iÖ›·ÍÛß0?¯^½¹²Eái”.V›E(„Ÿ¥ù"M2?ÉbU.þñÞÕÿt¹L¢Ä cþ½Þ;„êÇ àÓ]wÿa^ä‹€þ9´Rå¬ÔÍY©W¿.‚Å2 ý"±Æ|Ök¥µUôñæŽÝÕªœ¸ë«FÖÌ©µ©d=(«éÅ‹o†ÿC˪–ÑýĶªÝ(©«ûª®ÌÓ§0TË0=Ò”Îi*‡çô¿jó9Éc¿H—c(…ðœô_¿$›GçdoÞÿvýö#ó©¾ïz0è•>‚£Ê¡:ZÙm´úE;ÞÕªQ­ÑÌiªÆeæyœÌ Ýʵq'’&sû`vjN",ò"žµlÕ—œ#‰(LÓ„$ÞÜæÓöý"ŽA "«ãC I‰ÃØ«+†„×mÓ f?ÆÉýþråž’½fêÝC’’ëK ì]Á4€Tw­Õ±a&ð²Þv}evÍk8 ám«‡ªÝ2 ™ÐÍåhèÄÙ‰â(‰½ö2ʼ¡Á›ïÙ²4FY0v ri£Ðî&@õM1ô Éõþ†3(KR;•[¡‡KÀb'tÜ!™øïóD÷݉·Ïäm"`[J+,Dèɶd€µ »Âš”yVvb  ª›©9>5޽ÕÎò×R†TµÝ¡"{ÄÌk{׆•¹Ô#Nï:ôôë\ÍrZƒtŒ!ÂäìBÝÞè'QŒã ;8¤±6¢ø LjSXybÄVîOy¡ñðÚ™°I ¬=’ÂJ#ªçAe­B’ó ©6;bÌŽ8š§£jhƒ–É£â1H…u4`)ûdæ\µSÖâDج!´éì¸$r CäöÁÄu0BCPF«5ìPÚjË Z• Ý»˜Ìiè«n°lXÆzªM<ß©c‹cBCpÆX¢aÜSÆìFJôS(bž²h†ÑÌá OóÑ85ìqØ¡ÄrŒ£ÈÃïºkµé¨1/$g>}2Øñ0À"‹A¶Ù£=±Q7àiúêÑÇ‘Z· ¡í¨0²xô*g¯n/sáÑ*¸°¼Ÿ2Ww°OÈqêSFÕ4cø†“{Q–².NBÔœCˆŠaq¬œ³«ú’AëO”gäí¨ &‘+¹rt=¹23+N‹ †˜,ü•uÍ@ÇK@ËÏS_“‘‘5ÈØfÇ0ï.„\?h>ÇmxUH¡Fˆëj¾1 3Ѷ© a t÷K¬‚$÷~ï á±>¡µ¤qË·im-³€£–G:Cüy(È´®;Œª·ÆP¹˜è¤*ƒlv†‘oïþœ5xi°êyúHüíôÝ0lvd8.͘~h[î8جð8ì¶½lèzT L̆›{T‰_,+—¸À6Bo줴Û{Îvl᪄¸¯iÞ'0 û-Z‚ƒln;Î~ŒcØë4 ÉkDÑSa¨M°mðÐY] Þ;â otjθ£"Çk±ÃŸ¾VTÕQ’¢¢€:[×CiéÒ‘që"•«äa¸VekµÀç.teÃU@Eµv±#òØSíϾ!Ù×6÷[×Ú ´HdWâ%·¯Ö`ý£ì°'zùúàµ"­¾kJ[¦ ÿ¾Å/4˜•¯ù¸—½©ÖdtÏŒzsâ6Õ²©ë± ±5êêËdw¶oklpË{q؈ç71™H¤áñK}¸£í ~ ¹^pÁÕŠQ­lØï„Ú\“¿Öåþ‚y«ãâ…žú~ŽôÚ©z…þ #d«ùýæüÞm!Û"€ 2¸¹ÀËÁ&LhÕc¥ uoàÝ-Ë”j#¡9øpxˆñ™ÃÐäM¨•Ñsð£,39ªà±nÏ<ÜÀ ÆI£Àzñý„%ÞXð‚_É»|ÔÉX3=ç 9SõJ–ǯqªãÈG8oú®a¶ŸžÞ3Û6×cîk[l.ùˆ‡ÉE‰”•¢1ïË{·8¶LeÉh™°±™éúÂÍÍšß>íýo ˜ÉanŸe¦«¯à›X-ó9—¤yzž¡»ÿ|†Á¶çÃŽcVCùC#ñ;ï*„Ïô9rÕâctÓËõUàÁSžlÎP«gÿŒ³–¥|† úñ|C\…3ŸÚiá‹4Y,EâÃ÷> ÄÈ÷êÝêÕ7•½ endstream endobj 25 0 obj << /Type /Page /Contents 26 0 R /Resources 24 0 R /MediaBox [0 0 612 792] /Parent 8 0 R >> endobj 24 0 obj << /Font << /F27 23 0 R /F8 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 29 0 obj << /Length 2173 /Filter /FlateDecode >> stream xÚ•XKã6¾Ï¯0@lEïÇs˜$l6 6@:Àb39Èm+£‡—¢¦»'~¿ª"m¹G}ÈIÅb±Xï*êë‡7_}å›Ò/³(Û<7aûyVl²4÷£8Ý<4›ß<󨪧êò.Øþþð¯M°Ù‡¡_¦v·:ÛA­ï]t;˜N}RÝ»pu_i3ëÃxøc}ÿXM¦Ëý«ïŠ¥¨‰_&Éf~êèÎj»ËÒû„‰žŒ,ÌY+ÆÞ¥ÒU¯ V¡§§ÝvŸ„©W=™±s°ÙF…÷¼@ pÛ}šz`K•VŽ¿ÆNéj¨Õ$ëã¨Y«½“õ…mú ¬¢"ðŽªšÚCÛµ¸=÷ž·Eâáú¨ ½fšðަ¸£a‰D«®2í'ÚW˜Ž;¦Œ€}(ÛŠPÎ&z.—vد:C4k“ÒµÃËööΠؘ'eéÛA0 ]×·C;œdÃãžû¼…r;ú…bÏ¿“3[A”Ä^_=µ¸‡ÉMKÙk'A‹l„1£|»¶Ç ¼i'3vÀŒ9÷$Âìå9ŽãÑrÆðÂ8LŽIedç›_¾ýyͰ}% íã¨$ÈA —` †šŒºuU B,D;ÕÓýÎÒ—´n`Av±·¬hã<’´(¼š(:lŽLJ°0ÈŠ°l“$Š=Õœ,DšÓ÷º%žêìJ«¬!0›€¡Ç¶ë"  r&Þ÷/9¹¸àk´|%%ÜIàÎY§ó¨Ùã1²~²ö¼ÈjÔwXöiCÉd$‡=#‚Ô¨ºC¨O²ªäÓ¡ 4©J×äϳ¬UÛÍZùkò‘ºq,c“–§ÏHTYQ¤Ò7€L1ÒÕÊŒ• Óž@ŠW·TÍ¥!÷,þ8µaÇЊŠ,³µbEX(£L„*ŠÀ,`ßR®ÂèAjËu.êu™øI‚+sû^xÿ])뙟&¥#¯P. ëC$ü>…€l8ºŒ ýÈJq‡,[,#WK6 "$f¹Í –&Å&!·çB—0Cà—Å}•wPz»cKÆW¯ÄW¯$è*Fõ#h–ÈaœPŸzú›àuZTo¢pÕ[Šu"d‰ä>vb¯Ç ±¸â@R³†ÔK¢„!™%IRY´³–¦¦úhEãdºçeŠþyËJ's¢”²÷²Õ F#@ïX®H+ \“ŽK”8TZ·¬s”rm㚢f²¬9Û‰Tª´,Àõ8wBqÜÚä<½¥¸è•«·\¤x¾ÃÂâÌUûÓ« ÜŠ`丠›mS ¥å‹c»&(ŒnkCV¥•tÊÜj,ªÉJ·,30œzR¤QƒZn§êÛFQ ­±{}µÚÝévÅÁU¦¶õì\¹CkÚIÔ#ê¨7÷ä| vm‹#ÖÔd n28Â-s¾–F`u˜O'îJ'Á ÉºçîùZÇ)¼6›ËlÈåeæýÊ’†+²blä#›, à¼%ÁI1X?~q^˘²beùg{:KÛI )œÜÍÒ0qM™¼¸-Ëo‹ “h’P²êGm!g¶“eHS’µGææ:¾ŸKiÒ4³^u¼ä‡ëR E…–K¿&Iæ=žÕ­ìékñàE¿‘Šü­ßÐÊÖ@×üä‹íHE¯›Õ`µ~<«î"P£Ä/8›³sè5•ÓÐ¥Zf.Ÿ™7Ï!wæ¡áyøñbZèÉaîüî2Ù®”™8 ©Èt­Õa=Íœb7ƒÇE!‘]äÜU’ tM;’ÝØâÙ½]‰À (¤4N»ÿ¤6"i¦Y`åÆñ/ÝïÂ¥T¯Ï„媌„_ø«G€ìÊ!7yiq·(à“û’!¸’O£ŽÕÜ‹ëÇ™tJ†<޼+}â(Ææ"Wtà!6Œ_·‚lÓp£ü™. ?…6Û¡Ö¨ú¤Hx› žÚÏJhÜ=b3{an/äÊǼÛʈ‚[.UVJe‚íl¥4P"T?IÒµ8˜ŒlOMšüP³ñˆÚ¥ËËç‡<Âe.¾= –s»áZ"VŒËCHÛs×I¯³utcMÛ‹@5LS‰F˜äZQ" f7ͽÕÕØ™Ñ=½éº7Øu(ÉRnW‡Û¶‡öwU!v½7FÐÔõŒ'Ö³ ¹‚ÇÙm{";¢*P¦ËÉ€©Ð°Íöc±±Ü9åé4O›tÝ(žRåúA k ì¹§â«uœ™ÇììGÑ>NX¥w²uàÆ ê¦Qö—Ôx«i²5¿ 9ш|™Ö1§‡‰'YDó:¤ˆ#?ǨÏR|Su8%O¯£0Š¿{~z¿EozøñýײæhÀ÷ßµ©¶qÄ¡„øý»÷D¡_Döž÷ÜG‹r‹ŽU­Åcí­#Ñ *£'Àªã‰¶)9¶öýÎý‰&’’é-RÒ9~{âËRâÂ[cKd®Æd77ë ‹â7 ¬'ùÇ/mŽÒês˯JZÝ]5ÞD"Ü¡má¡yÏ¢E<Žb©§ÀE~)§óûÓTf²ŒÓ|¥ž\ÇM±k”æ êb&YÐcìÚ^ AÒWþ™ `Ê$'Hû—؃}Í,HE]̼â1ñ#ì“%úE};ÿÔ®7ôƒÔ_HÑŠiÐçƒÅòoàÅÎÀþ8L„ÅÛ5¼¥Çfêýö´{Þ}ÞÑlúû»zj.ÔÞ›ÝaWï~Ø¡N»§`÷ì>K+X‘ðí:’Ùc~’t!ˆB8$F•€•|l‘–Ùœ¾Ö4 ‹Ùý¿*Å÷&È¿¿BDAàAc!=Øom¿?ÀÌ!†ã«ôEÆ—ÿÒ³¾)ý¢(D€”èÞüãáÍÿÙž endstream endobj 28 0 obj << /Type /Page /Contents 29 0 R /Resources 27 0 R /MediaBox [0 0 612 792] /Parent 8 0 R >> endobj 27 0 obj << /Font << /F27 23 0 R /F8 7 0 R /F11 12 0 R /F26 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 32 0 obj << /Length 1216 /Filter /FlateDecode >> stream xÚ•WßoÛ6~Ï_á—!2«¢~Y.I·í¶v@ý¶-Ñ1‰H*Žò×ï(’’ìÈNóDŠ<Þ}w÷Ý‘º]_¼û.g+•†él½¡(ò—i6K“¥FÉl]Ìþñ~™/â0¼ 9_¤Y˜x¿ÿú÷|‘À qEÑ[úûG¼V”3\Iø°‡æÿ®¿Ì‚Ù!•x ®Úàê9€Ï%üv F*,e÷V)§LùÓʦ-èSßU7êýëÇÒ#`Wæ|kÇçn<ÉËFcôÏyEÙ–¿› ªÌÌs^SP„@B«¸FA`ä)+hޱÇfØbZ6‚83ª]øëfýçÍí+F G[œë¤lòµ V¼¡%U­UÎ͸T‘~éœ U‘ªæ «gKKâ¿%'úÐW®È{3]ïhк`>+üà‚ÔH»Æ·'1XÑ=UÖo¼µ‹÷ô‘ؘnÚ!¶§©¦õëóV}ÃrC”‚AÞÓ²hÝØöú„ZqæbÎÅC_ ƒ/§ñT\qç/&Ø¥2SÂxsoƒ ë>žø âMù‚d]oäÍ•9™N]#й$+;á{6ê0~.‹zHæ‰:È!S‡Aü‰¨¹Äݰö5›¸í GyÒ¿q¤„fYøÓÜÿ©~V‡¤ÁR6)l·ðN°G) ®úkìê¡ÂÅ4ÔNt„9SNóÝl%öòòˆww—n1çU…YÑWK[CÃ+K×~wøqà~ŸÙÞòDòFðô4°IBœÏ”–ºr¹V»Q©pWSrãñ¸¨(£R öl.±þø6R:ja;2dÈÅê3{‘f,]Koysé¼`¤g?2¸xÝ™c¬ÎÈ P.|”ÈcDC»~…vþ™ àÆ¡UÝÓÈ# îŠ ;ö`+xupZÒ™’:Çj«ÍSãݧlüVŠýUÏ!`CKƒm­=‰ÃØÛΑ¶‘W¤äóp Ò̊Ê h-)w°›y{iö”ÓàÞfY‡W¯bó)G P½2´VbÓ–uüé8Š{°j¯K Ï2‚:›g±F‡+}wjÎFæPußÈàg^Å…õ! ('¡·×®“ËÇ‘2,ºÅÂ|šGQg…›ñG€bHÄ)Áý(KF±‰±¹°õ:6 ‚”XÑÇΈY) ï¡5’÷¸6;R;TÉ0 @SfdÅʬê2€®n6t2ôf‘± `b r§%³ü9xl–;™üðÁRãÂ1’)ÁKäWP9ªÝ‰ýŽ›L£ÀSt(ôµ{„DzÃwú ÓÕj™x·mwŸv-ãc „ÓF€™£7Ê„·ÛSˆŒxàeq–Ù£oú6‹…Àíð õï9õäÿþñÑ“V‹m$¬Vh„M®ÆZ§¨À”‚/a§# `ŠÒ“À&Tlì =£H³·¨È-¡E¼9< —ºqü}?R\¹!×Û–Qhï;¨~¸Âú—nƒeÙ*toVîqФÁø|óŸâåµ¥ýKaóÿ§Å¯'ºaºò£4™AÑûYh)j¹‹ßÖÿwåÎ; endstream endobj 31 0 obj << /Type /Page /Contents 32 0 R /Resources 30 0 R /MediaBox [0 0 612 792] /Parent 8 0 R >> endobj 30 0 obj << /Font << /F27 23 0 R /F8 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 35 0 obj << /Length 965 /Filter /FlateDecode >> stream xÚµ˜KsÛ6Çïþºt&KÈîâ±@:ÉŒ[ǤMê©uè4ÍAºa"‰’r›~úB|X²šd§Õ…± þ°ÿ´Ëï¦gϯ‰GN8Cf4½¡V¸‘Ñ,HêÑt9úð,™ΓՋó‰&ý øO4wþqúv4!ŽÈ_¥pXÚ¿zUš~øküuü÷8ÞÜ%_.²åöwÐp™çãÅøÇñv–fþ~[Ì£ ¢pºzä4m²m’Å›?ʹ.ËKž”×õ,_|*¿ÎCþïwëy”–É]y]$›,Ogñ&Ϫµ>ò5í¾·W7ÕÓVÉâ˃ßGÿTyßû5W¾ò}“G©G'oP.|[;øÀGPݾñ¢Ô–Rì úaª¼–A¯«#/(„„j¸O`œÐÆç†`Xk©0΃¼ŽaŒPVò^ª †N`¬Ð: £H¥˜]†Û`j°}`d†9 ƒB9RÎR[e2i‰®cš0ꆪ0ŒdÑ©bØ92¥¸‘ÑÈl“‰¢±Ã`”—I¢öò Æ4"ãZd"a¤OD¤‘Q†‰•ìÃM™¨-g4¡Ö>¥†E´AK¦È´ÛLà™XhDGEÀa@d¼¸– ¯N×8gl‹LZH`£Ñ‚Ñ‚À±¬ÄmßMÅ,§'0¶žÀ,¬vûC‚IIÝ€ÑMlÈ$ekÎF’Ãr†üQÁÚ*èC½#ãÕ'íwÜM,•9Ó #‡À0ú£}è¡Ç×F5ع6™Øÿ1€¡0ì7÷’IŠŒ•šÝp¬ûì&3 F)§†Ã(®þÑ:"Ãa þ ™”!îc‡Âûp˜^9ãB0“§`ø‹ Ac7}aÚËÎv˜*ow‹E”Õ5ûC%«ûh¢¿IãõlUUÿóÏÑ"ø_í¢‡øtDáj÷_ÌòK´š\·Gl¾)‹fY> endobj 33 0 obj << /Font << /F27 23 0 R /F8 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 39 0 obj << /Length 1469 /Filter /FlateDecode >> stream xÚ•WYoÛF~ϯ  qÃåò,à'n€¶IjÀ P4ÉÚ\YŒ$R]’rÜþùÎì,/‹qœî5;ç73ËWë/ß$‹”¥‘-Ö›s‰˜y©¿Xç‹Îz«–Ÿ×¿¿|ãOHS–DÁÂ#š{]4ªÎ’(Ç„!gw„›¶Ìš¢*—®s'[ºÜ‘vq Câ(\øN»äN§*§Ó¦¢#‰¶ª¶¡=IÃQW·{u Ã¢¤Í›«ëe8—´ªRׯœ…›DÌçáÂ圥ahÕ«ôA6ÌÚÌð®ï1Dø3èæ…8§5C?Y†«Fî”=4ôÚᢰd7êª}WÐüÝåúíå+ËÌèaï—9MÈÉ–=D 5ÞÔŽN½^ÎÕõ%ͬFRØ<ƒ'¸~¨åúeB=ãšVÍE”O°³)åA­.W·«lõÇ ƒ]þ#ê| °(ŽCç=MÑ3›Þô£ÌvÖâb¯VÓüÓVèÕ'ø[—nýõ÷âˆ^}ŠÚ¹t#áyΟGDŒÜ[„H Ú7J×lÞ·° -vÔEÙìÕIí/¼ÎöªC©¼ÈñÛ™ò#vœ.b€rµ‘í¾1Q¡ÞTg¤°ï‹É¶*ÛçDÿ\Y3ÊÊbÜÜ™I¢\6òýÈG`TÚ‚þáŽÕÏVtIÐë§DwÑ~R‡yÑÑ3` é0I@&ŽuYW_ê6ËT][,#Ÿld±oµúvr?®ü,…Ú6©qéV?$¨ûaä4[EæqÞÕ+$8È%Ôñ‡þ–;'Ü©öf°·?ql´R?Ñ¥Ó>R$üÝ€§¦f#o ¢…ÕðNí±u6” CC BßɪA¥ p‘õKLsÁU³…¶£hžŸ<.”Vefw°¢*¼roL¢²*ÿ+ÕlŠÎBܘD[m]”w¨¹®ú(P¨´ð|@éÍyÜÁ’@<î®s ̵¤b1ÀhZ¯?ÚÂ÷ùô8¡|LX»ù£•Úp´|ºŽi‹³Óà¦qU•çÅõQmúZQÚXŽo¯q~*ÀA$D¾ðYd“à…L@}5ÈÇIÝÞj¨xEi× ¯€ŠÒ™Ù-T Ç×øþè…ÑâÁ­”›¦ÒÐSíÊð;áG`Lëóà£5 I:<Ô q0]dÊÞà|t%ò™X¼¼>ç³DôxZÍpˆç=ƒ¿Î¤ÌÑÀ`™'Ì9'?fÂëeý=S”8‹Âþ)µ5¯ÑJRsÀHM›·ûʤ{†¸£³¼wÔ^Ç^ê¥|ðV®2×VÊI:…Èš2¹bhŠXtX ‡ñ`oç¤CŒ:ÄΟV[¢ÎUmžºÊKÑ—%¼Òó™Þ¥kFã¯tNgu£Û¬1µÝ £pô>g*‰Íi`Ÿí,¿3?GK’ÎÍ={¡3u*¤,Œ 0˜ÝAK'´Äâˆ#sØðk-ÖSÊ[pÆ44Ú<ù…ÅËXÖÑPU¶X+ê¸.©=‰–)ä<2ÿfÔºëF¸4F­²Jç9Í;!¡ÎôÜ*ʼ8yÛh 3Â’?`é;äs5È´+jÀE(†6GÆe0ÖÅ¿s±æžÏR¿O:ëtò3æ±0é3 ŸGÈvÈ“sÑ…Õî~[˜(m­Fåþf’†ª¬±Ï!—‡‚…|j*E^Œå‰KFUF$5ÔÀLåT¸çýo#g žŒ‡Õ}Ñlò0—4œ#¶ã!ÍÒà&$œæ›¬Ú·‡²†Ùç|1>&€§—sºš2¦†U&Λe Ýh ÍÚM|ø“ÄÑ¿?€òKSí°áÒÓ·2ÓMs……§¤gLbÙ"û\}Ūƒ›ö!”ŽB)¼AºKåeS¼{‘¿£”‰þŽ}øÏ‡,3F$xôâ×õ‹ÿüF6Œ endstream endobj 38 0 obj << /Type /Page /Contents 39 0 R /Resources 37 0 R /MediaBox [0 0 612 792] /Parent 36 0 R >> endobj 37 0 obj << /Font << /F8 7 0 R /F28 40 0 R /F27 23 0 R /F26 6 0 R /F11 12 0 R >> /ProcSet [ /PDF /Text ] >> endobj 43 0 obj << /Length 1999 /Filter /FlateDecode >> stream xÚÝYKoÜ6¾ûWè(£^V|S‡Ü´AQ @‹E7eWŽ•ì®\I®“üúÎpH­´K¯mxO=‰á<¾á 9ÔWgß¿uYÉJ#Lvu“q)™5.3Ú2!uvµÊ®ó·çNæm7tÕö|!•Èûá\¸üëºÆ®Ì›íªYÖ=Í5Ûsaó¡¥­@’sž¯ê/cÖÌ+"}C½qª^mÇÎÊŠ(ˆê/Õæn]_`OçÍ ^¶}T¯íêÕùû«_³"[pÎJ,©B(/>ÀZí Ãñ®«¼iÔ}h†[j­ëjÕl?RgÕlêmß´aѵ:¯žÃœ·Ž&ÿ.tÑ\|‚ǰä†&.鳌¢?œ/Ðð ÇðìÓ6 R .’T:èÝuíǮڄ©žæ.¯›OCûÙë>¸øt±EeÞ3Ï›+V*5pu Z#ó›v½nÑ–o: Õ‡u˜]Õ›vÛvºGn‹Þ ~…‘Kê}Àb[ÐgS ]ó…Ú8ÝÞ¯W‘zŒ‚¨àP߾߮êÎë¾H)Øô@ÿµê7óì竳Î8 Yd|Üãº4L•-7g×ï‹l“6“¥Ë<é&ãÜ2£´×Ù»³?RLœbœãÔ¤±øñ0äJf•N «4dFð(DÄÌ¡–y áNƒð¹ìy¸?®…М)ÿb-R(JVòWzÂrfµ9‰+¬fPŽËëâýœ@jðÁL(Æ+¿à>o<Žü‹…§aÓÚ¾{]2Uˆ“`o+]±çǰ?Ô€ýL(b/žÄþÅÂÓ°‰B¾{eY¡Ê“`¯ fâ©y-Ža©û™PÄ^>‰ý‹…§`3Ìçñ 쥂¼©O‚½tL8±—ǰ?Ô€ýL(åñö/ž†M•æ•Ø ùò4G¯Ð¬.b¯Ža©û™PÊ9Oaÿbáiظ¯Ä¾sœ; ö\2 pìõ1ìO 5`?J9ç)ì_,< ›=ÎcûC ”c– àÅ™‰&ü‰W6_4ÁåW9 …LMxuöƒ~ÒäËÖW(TiQ±ÅLµ&ª7D´«Ãz(ÄʢȡZÀÿ‹×üºƒÊG‹pAô5‚³ö4THõ_Õû¡êTIÙPi)er~e(ÞÒÌ€Õ6ðæ) ÎÚÕX8ƒ%~kÒ¹ûJÝ´®‰²¼vP¬À0 ÿÖö‘TÝÇ{ÏäöÉq•kÙ~Ù5¡h[ј/¹à;Ö.œêÞ4ì+?øöÍ·yÿVØY@€C¡)HÒ–H¦®wÌA#Ì·]Ї`ÊEŠÍ! E}œfè;›¿k¶Ë`“‡ßê®õ•/´#ÚÖW´¦Í©i/ÎØo¢Ï5.{µëýU§À¤¯©Ê˜l8šÛàÀ=ºÆ×³Ëá¾Z¯¿ÒÜ1v¼FXñ¥) N¬ìwü^²‚‹§°ÅèžM’‹†£‘ïö0~¥]¢ÆÆÍ¸¤º™îg_ナ¹g"ÓMrHŠÌ°ÒJ‡$–)‹°{›=Us¨©eÖfÊ {ÌÐÆWüVaê®êú@vÓv=fgÊîñ„À›ç]ÎTAo°zAèH8Žla:&fˆ! çº+(z„ž°òÐÁŒohÞù½Ñ†‡¨Ú§D|”¸m–Hy›¢"|‘ÂïºÙ~ö›zûý˜û\#§îvdW÷˜¯4 ynk²-(º—ôÂ:Ìq¤F]Eå°÷aÝúÌâÇ>ÓJƯ;lDp½¤0Ò=rè'KiFÜhµ8/ìχX›‚ñrtÛªª {4?lrë7{Ñ>q ês<ã“@BñN°£ 3á4èš:¬¬¶+š’¦KU爫1Lï‚Ù%ötɤsƧ'v2è‘4&•\ifxM^:Ux9UñÅ“:>Ó)߆£ØÒ;ªÊûz¸¿ C!­)ùÌÏO·¬„€í꛺›ó HaYûèé½j:Ÿ¬ýa«B®ñ¸Vù›w?ýN­D•÷xÉÀœ‡ûÕ-ÆjŸÍ^4+EÉgò¶©¼–Õ:ûvM§H¿·Avî7pÐ*éßA…ôUÍBp&C=´©¾À^ÀÍgÀ µÎ?æ&’²p‘ÏU¸?Y‘ÿ•8`?˜2’ÅÛ&ÆÜøö2àÐ¥’Á´ÚÏý6úÃŧÔe Ô˜¥tu¬,G]8ð1¯)·ÿîz"…ÅINq[Ò™ú#W²ü»6!R>ÆxA{ ®%T60礽]¸Ë¥, ˜àÐÐLò°ßnë®N¢UŸ˜˸ÉU›ÁÎ~b³ç n2%Y[ÄC–AINƒ&‚Ö%Æì3éN¹Ö@¦ ‘¡–ÃÅYà*Wã6šîؽ4Á§»#%sÎÍÃOŠâ›bd‰ÈŠÄÒ)[ƒï³{ì‡LqèMlÉ ëâ‚G•δ PmÂ!OÒríÄ™úЙþ§Œ„Û s¼ÜOƒg?š„’qp’–x3æÏI5z–ç×b!Íô^üX Ùÿo ÉY Éç’< ¤½)’1bžCt”“$±¯Õ Iü/ o˜p_Ý$^ìŽ!®z_8Áà”!¢2¾ýþøh¿ endstream endobj 42 0 obj << /Type /Page /Contents 43 0 R /Resources 41 0 R /MediaBox [0 0 612 792] /Parent 36 0 R >> endobj 41 0 obj << /Font << /F8 7 0 R /F27 23 0 R /F11 12 0 R /F10 16 0 R /F28 40 0 R /F7 15 0 R /F14 13 0 R /F1 14 0 R >> /ProcSet [ /PDF /Text ] >> endobj 46 0 obj << /Length 1643 /Filter /FlateDecode >> stream xÚ­ËrÛ6ð®¯à­Ô4Bð$ˆÎôдõL{è´:Mr %ÚâDU’²|}X€&)Hµë »‹Ýž°à»åìíc‰!&ãY²¼I¸`$W<É8'y&“å:ùþ4ÿ´üýí•N2b´È-&RódÁˆ4 ‰8åfšp¡“ÍH3È(Q,K¤ FdN îš(á·f¨@‡<Ó¯L÷”½&OÏɸH”&:÷–¤ó£”ŽȈQ*†ä†äy>¦=Žì•åmÌ&œ”#’’ä‚OÙY “ÄH9ưSoºY¢ Ñ”•#ÎÔC눡ÿ—î[öNéÎTþdãåDP‘pHfê‡S—ç‚0a€›#øHe þÑO Ö£à…„Ko‹ßöó…ÈLÚmªg‡fÎÒúz[îÀ9éj è2¢”á„Âá¼¼¿O2„BZyü›‡ ¼ðÿÄRX1ñÔýOªìTˆ$23Ã:ñ*‚")'LŠ¡ b¿Žˆb¿\a?G3[QvE×T«Ò{oSÌyžÞÙ¿2x¶)ýôz[Ï€YYôç–ÌJ±t‰¾MœBzI3NՔɦí,êhË@§Ÿ¦LŠqCÓ—ÜSZ_pÎã}°B¹¡e%âÛrUƒ%‚Ч`J8 `Ü )‘¢»YǪՉ8!PœN,×Uq[ï‹-®N7Èô¾ê6ˆå8”{‹]J°ñ¹úe3O žëuÕUµ[‰´«Ú–]Wíoqq‚UJ¯]Ê™ ÊõqåÕ-À†îÖC„9ŸÕÞnt¼÷¿ü‰o@\T{4R¦ˆÊÅØHvG. 8·‡¢iKœßÔ „! ” ƒ)vuS®1nª=ÂP˜ô ÒªBÖE·Àz{ÅõÀ^ÆÖæ,Ÿö,£ë:ä63”M;,¢áš8ù•ßSŠ{ø9läž÷[Xlxu? {1>žÏ‡ÇÔßÊG<ã\YŒÏkKŒ‡gðaüþÍ|^àwvÁï/ÐGD÷ ñWŠ~ÁïòÅ|Æ~W/æó‚xŽV)þd¿/•I‘Än€á- ƒ+¿,”_&­,¶xÏ8ºuµ*:×a9ò¢ ³ÊÃï XlŠ@ioœ{ûW#.¡¶kà rW‘í¿¤Èõ½^“ –tK,( ³¡’°ôJf¶;(OS„Iß²iK˜ºX×Ï3 ¯es¡ígœd¢o—Ïv¹™Ì/ôþpxÆØ´Ë%þ-C%‚M„†4Ò·{0íÝÀÛ »â] n«¯“i}3ÁCéAÏôº+Ãgq·©y5ä¤qþ®«PKßðʼWy`W0.¸Cýp‡!uômu»GÄ0,¤ JÂÇn/̸¦ ƒvWÚ&‚¬?¸íù]s-Íã³a§7õ± í°7¾°Æ‡w–CÙNšž»¹Ri±=„s‚°fô/˜7ÕíÆå ’l\#lmµïëËIú‰Qúi—~çZó%vÎ ·Ü…†Ñ.íyZœV{ƒ–vÚ7;µVMuí,WR?<¦Ìâù†Ýõù¡&¹¸øLÖDȧ½^å¥g2~M“A¼2Ì™ìæšhö<‘‘3xÍ.-…G:›–‚…æÌ; .†¾|KHL̇ý÷Nhál Ôeá2yƒPŒT wo)€tíYN6à,§ÌüóÓÚò…OãiÒ„0ù\p"¹¹ü €ejTJ^†èo qæŽÈ~å9¸âT®*kCL(…ï_yñ*w8|½„rÀúñ£‚D9½Ë|adø¤†?Ö F”m‘*TD¤ó•–ûs}ÌrUo»=±´sw(+¡Þ-í»ÑÂB>~Aœ?\¤B?Íq=—cã"ñÆqˇêî ¢«È~w±êŽ¡þBqÌ\qô¨.Ôq¨:aqp\ëÖE° Þ?ž¯+tYFr žŒäÆjd4¼êÿ©êŠæ endstream endobj 45 0 obj << /Type /Page /Contents 46 0 R /Resources 44 0 R /MediaBox [0 0 612 792] /Parent 36 0 R >> endobj 44 0 obj << /Font << /F11 12 0 R /F7 15 0 R /F8 7 0 R /F1 14 0 R /F27 23 0 R >> /ProcSet [ /PDF /Text ] >> endobj 52 0 obj << /Length 977 /Filter /FlateDecode >> stream xÚ¥VKã6 ¾Ï¯ðQjõð«·}t€öP´hE»{ÐÄN"¬c¥²²Ýé¯/)Ê©“ÉœŠõ‘â›LDVÂGdRk^KéJqÑuÙöøð×CÉ«È^Ίôâ-àñÇ£È>º‡_ãga‹beáýæáñ©Í:ÞÕ²Î6»LV’«NeZ .[‘múìOöd÷g?ä…RЉïóBëŠm ø@ÇÑo¿ñü󿧇6«RVѨ҂w`âE%ïE• + ¯£Ò-׵ʔ,yY¶¯£’·QmÝ4oì”Ë–…9Æ•B@ » R(xÓ&=Ï£Ë Ú¢èžuÓ±îx2ÞN{Ð+ ;#%Ù§RèqH¨#,pòîyŽ„ÎÁ„á8™g°Ô0—Ã×WÄÓ»­™Hà9z’ÐÃ0žvç‘8 †Pb¼«*òý<õƒCS]ÅÈÃ’‚ß>þ’·Š½£Û áÌ‘£/1 ¾sJOùìtZ_[¸d¹ÕLàª}ÿ{&Ôб÷ætȳۼ̌$뇓攬›HÚíˆOÞЛAÝΠ'ª H-æÃÁ¢nìçTÒ;>“ÒJÆÞ†céí¢*ûÙ»Mü¤±Âôöö«íÁÚ9ºŽ¯bÁcLߺnŒ¿RJT’aW†‰6>ƒóC¯š&i|º9ý;`¼7hò% @½‰XÐKÌŠõÖìÝDA¨ ³IKr„4ΤÆÐ•šs ß!Ŷ^29hyBM!¤Jûê4,ß„Ý~ž‡žãŒêÿf4•\QÉ·úl¾4%*|bµDÝòJáʉ¦~'‘õž°üªfÀ,ÝÑÒqÕÈEæ;JJÞ*}Q²¬˜Ùíhü²Iºš‹êYÑ¢e’ŽÕ¬à5mŠ–E”²ìÍ8&á% Ifwõ¨¥†-9ANç88qÅ5qÅu×bv—÷´²¬)^—…£(¿÷§'š-kvŠãÒ …5ƒpCKØ£¾D=á£ÃL,ÒÐÜ,aâÝŒz]§ž@v‰m†oW„¸’uZÄ€\f‚v¾7Qv?aÇÎì}´Ý í†ÆW^vPà.­)4†€›Æ¢þ¼#jñËé=5ˆTlrIÏe®d\ÛÉÊ@Ä:mtŸ—Ÿ§ònRSt¬» ®Ô@ô8=“™´Ž"?NZÔ°j1¸â EâvO &næø“Dôª²P“{Þ§Õ÷zþ”äP¯e¼Þ‘D“Õ¼kT‹ ×0Ÿ…àºKºÄë!Õð ËV2éLJ^É&ƒQàªÔé¹XþÕü K?o! endstream endobj 51 0 obj << /Type /Page /Contents 52 0 R /Resources 50 0 R /MediaBox [0 0 612 792] /Parent 36 0 R >> endobj 47 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./cmat.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 53 0 R /BBox [0 0 244 428] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R4 54 0 R >>/Font << /R10 55 0 R>> >> /Length 56 0 R /Filter /FlateDecode >> stream xœÝXMo7 ½Ï¯Ð­I€Uô=Ò1E‹"@{ˆ³@{w“¸Å¸€ÛCÿ~5Eí‡ îÅ0à½}¢øHŠÒìƒ2Ú*Cíóö~yXÞßõíŸÅª?–¢.%)“¶kT÷ V;›Tˆ^çT”uE›\TðYËÃÛ%8¯KH°Vg†>nK`FGV«­Š-d¯]âöè݃öuw°Ï>‘p»|}·½ºà¢ú÷u*¼[>Æ$ƒVŠÕ1[VÖ¢mÙ>˜ÐÜf]F[B3”¡Ëx¯“gam(”u;½Ï?ѰçîU ›R–‘É"K1£”J¥˜QjÙBÙ‡¢;¡»Ý 𸮠teSN¢Qke{ÊZlv±˜5Ì{MºdÂ<¹a¤2Ÿ6£ge>[®Ãú<4í_5ywËC‘'Ì(AŸSÖ6ãûp(b»Ö œ8?¥ê•(¢$Yf¿zåKvT;÷Œ낎QmgœíÊÌœ KÞç-$d:J˜žJÑ>© >¢Š)‘Ž¿¿PÅðÁÃlëš4ÞM¸àr(‚R‡Ó÷™‰Òɲ¥dêFƒÕ‘‰¼Å“d5dbÙµ[%«!“_eÕÅH[™Cçr¡©]ºÃ& ÈŒµhŸˆs³¾èTOÍHéï$#ÂÓøvöHž£CDdò˜Õr&X ™X+#•‚Õ‰Åe–ÈhgµŒv g”¿¨æz¼1¥!‹óÎ,‘wŽç½³¦¼÷à W§×¹Ì™Å‘b–ˆÔÙfèN÷ÍÐ?k¶¸–ZF%Qeëž°à‘/‘>árkÐf²÷tÝÝ êW´÷ƒ3Ú iùèá}mƒ 8±‰ qÕÙ¬—6ë"ÒšZT³ÛÙJ´ú¯ïÔ_²SÐE¼÷BnËÝΨ?’W¹çΟ.zÕ­h“Nå¢_óµùÿYCv]\Ä´²Átd{V. 8WÐìMÔ©îJ ±#›@@ ´ÃxÒuÀZ{‡ÈÉBgrÜ^ñi“ud·Ýzë°å"–o›} £$.Äàª÷gŠ»œ©^ÄâÝÔ1 ßazoŸö¯$q饦†öh6 v+"¬ÔërŒŽ<¯‚ Ìëè…X¼êeÊÃ2®vÌzq©hëäMäd­'ª¨ÞFé@Âá»’…ŽlŒÛ­…_ªK¯ûv®èb‘¼”Ñ»ç¥Ë£à=9jõ¤Â÷tþvdêl­§%Ïz KåÓ¢íl­'ÒÅ?2pº2Ò%lS ¡ÈÕW;—îιz!£wò®À÷%¾+ˆóê-¯þêÔ>nïÕ÷Çåý †ô&PŠSǯËþÃbçQ0Åkp¾`¥ãýòƽ=þ¹¸¬=µŠãÏËûö»%ÒébëÐacð;0#Gmö‹ùÎîO-L­æö'ÇOóøwÀû!:Š:পñªSU·Œê˰ýj,È2­‰ ÃaǤÇ×±) gÁ0"upN§'ÀäÌ/Ž7“²I^C-RA*Òµ>~ø‰W¹ðôž…q»¼ûBDÑ"wIöȯx÷#$?Õ§…þþ\#² endstream endobj 53 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 54 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 55 0 obj << /Subtype /Type1 /BaseFont /Times-Roman /Type /Font /Name /R10 /FontDescriptor 57 0 R /FirstChar 32 /LastChar 255 /Widths [ 250 333 408 500 500 833 778 333 333 333 500 564 250 564 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 250 333 333 333 333 333 333 333 333 333 333 333 333 333 250 250 250 278 250 250 250 250 250 250 250 722 889 250 250 250 250 250 250 250 333 500 500 500 500 200 500 333 760 276 500 564 333 760 333 400 564 300 300 333 500 453 250 333 300 310 500 750 750 750 444 722 722 722 722 722 722 889 667 611 611 611 611 333 333 333 333 722 722 722 722 722 722 722 564 722 722 722 722 722 722 556 500 444 444 444 444 444 444 667 444 444 444 444 444 278 278 278 278 500 500 500 500 500 500 500 564 500 500 500 500 500 500 500 500] /Encoding 58 0 R >> endobj 56 0 obj 1190 endobj 57 0 obj << /Type /FontDescriptor /FontName /Times-Roman /FontBBox [ -168 -281 1031 924] /Flags 34 /Ascent 924 /CapHeight 676 /Descent -281 /ItalicAngle 0 /StemV 111 /MissingWidth 250 /XHeight 461 /FontFile3 59 0 R >> endobj 58 0 obj << /Type /Encoding /Differences [ 45/minus] >> endobj 59 0 obj << /Subtype /Type1C /Filter /FlateDecode /Length 60 0 R >> stream xœ¬{XW×ÿ™YvgÀÄ$’ É®ÑÄ^EÁ^ÀŠP‘.eé,Ë.°t¸ôÎKï½w öÞkbPÓL4Å´»dÈûþgYI|ßä{žÿ÷<ŸÌìÌÜ{ιçüN»³K€‚xÃÒÝËÙÁ^‘—ƒ·úz¾j*¡zŸT}ÀaV1¿ünÀýÌ‹8o–|„àʤ÷uW½óþÄo½?qÅÛ„% ´Â%xOà+ø~…Q‚KL$¦Ó‰„±’XOl&v„5aO¸¾„˜‰D&‘O”õDÑOœ .wˆOˆ/ˆçÄ/Ä$|ƒä“SÉÈär¹ŽÜFZIgÒ›”Qd™Ad#ÙNö‘§ÈËäò3òkògr”ÃåLà¼Ërfs–r–sÖq¶s,9vŽˆÈ ãÄq28œ N§•ÓÇ9͹¹Ëæ<ã¼äü¡ÅÓÒÑÒÕz_kºÖ<­¥Z«µ¶iYhÔrÖòÑ ÕŠÖJ×Rh•hÕjµiõkÖº¤u[ë‘ÖçZ/´~Õår¹¹“¹Ó¸s¸†Ü•\Sî6®ךkËuâzpƒ¸áÜxn:WÁ-ç6p{¸'¹—¸7¸¹_qàþÊýâ½ÍÓçMçÍä-âñVñÌx»xxŽ%¤fR†Ô2jµ™ÚKÙSŽ”;åCS2*ŠJ£ò)%UAµPÔ)ê*u›¦¾¢^P*êwh=‰Ö§…ôzmD¯£7Ñ;hKÚ–>B»Ó>t0FÇÐIt&­ K麙î¢éÓô%ú&ý€~LMOÿJjs´u´ßÑÖÓjÏÔ^ ½T{¥öí­Ú»µ÷kÒvÖöÔö×–h˵ãµSµs´‹´+´ëµÛ´{µOhŸÓ¾ª}GûSíϵ¿Õ~©­Òþ·OçMwu¦êL×™£c ³\gŽ™Ž¹Ž…ŽŽƒŽ›ŽH'HG¦­ƒt2tòuJtªušt:utNé\Ô¹¡s_gXç+ït~Ña&´'¼=aòÁ„'ÌŸ°dŠ ë'lÙ(ò ñswu ˜6Ûjïþ9óæÍÿëÎb“iGBÆŸL3uöwwõž6“ýäì)òñröX9m#;ÚÓÓÝqš«gˆ›ÿ4''g'õ´}žÎÓ6¹{ºûøˆ‚¦ÍÞ8gš¡ÁâìÁpå´^Î~¢ùÓܽ]ܽÝB¦9x;MÛååìê0ÍËÁÉYMÀÔË=À/dÚRwï?gït÷:è?mÌ1§í™L3Ÿ¶×Ù5ÐÓÁïïOÌýD¦ÎžÞ¢gß@OO‘ÄÙÛÕÙÏÁÉÝ‘½rö÷»íèååà.òvõsvpö»9.—ƒ_€»ƒ§“»‹‹¿£³»T‡ŽÎŽcÇŽ~"oDZãæ#~¬bÖ]ÇŽ[DŽŽ¬ž,^Í]ïåàÈupqw_l``düêÃÒå¯>,Y¶wŒî«KC#͇ÅK¶Š\EÞί˜Zù¹{»¾º2^lá(b¡áe6&Í«GË ÖÿÇD#“q–ã¼—,ßûúÃe;_“`±ÁÒqŽK¬Ü=Æ%36´<âàgöçÇÙ-~õa™Á8Ÿq†KŒ÷¾&ä+ò&KÆÙ.ßùš‹ ŒÆÙŽó7^b96Àì?4¸Üpœß8c£qÆKÆïü;cƒe¯ž.^¾õõu™íwt÷s ôrñt³^jùºzÿTûò%ÿ6vÙ¸@Fã-ÈÐd×*Æ%·ùbãm#c2.ž±‘ÕØ$³ÿ°âò¥ÿ[óF㌗Ž3^b0ÎiÜÔ‹M¶ÿM&Ë·°–g7Îw¹‘éë¨0·ÓÒq6Kïr dUáèåéø§ZÿTúøªMŒ­ÿZÝ–¿ëv¹ÕßÉ,_fÊÙaürÙ8ŒÆÑ°t\ž%†»^ÄâÅj{±ùëžd2.˜±±Õ"hÜ ËÆ—n4Îmé+nÆKÇ-yÅvñÒñ1††æÿ[›1®[·³3±ÒXnóß–¾|Ü,ËÆE0çó'ù%ã 6\bþ ^ló' ¶¾†-ƒÍ7ôr‹×5²lœ½Ñ8û¿–ùçê–š«¼âfè ‰jÿ¡?“Å›ÿŠÆ-Öìu¹–™Hþìú×g Eÿ¿î8þ9Ì{LfÏ1%»¾¶(6’û¿véíà#òðù¸±cÿºíú'@u¼tÖØâõyc„=ÙaîšgcÑ P#µF.ïׯ»±¾"{èö—´Á} |Íì`?Î_× cê7vý7ü—-^bdèÉ.Öß}L”€×¸û½öY¤¡uô/Þîcr…¼&Œ†«óØý×Wí~ÔyŒ¹ÓØÑƒM|ÎÞžlvwt×P•ŒIíü§öœÆÜÑ_“ùþbà9v#ÐÛM'¦š“™æ´iìdb¨9-Ñœ–Ž 4'Í#͕ѫéÇN6,;­ß 9iFn2;™inšinšjHoÔðÛ°\3ACl½†Ø&ÍÍMÍ3Í3S#Ítœ4ÖkDZ?Fsñ2 i3ÍM“WBhnšjäܨbƒ†Ñz&Ö/ÑL×6ÓÜ4Ó\™j„ب9mX¯™ QÝú1bKÖ¿’ZsÓLÃÁTÃ}£æ´A£‰ M¬W/eÓ²W²˜hhnÒ<3Ó,ÓTssã«y…lÐhbý2ÍtÍHÍMšgfšešjnn|5O£ M¬_®™®i¢²é•ê4Ë4ÕÜ4Õˆ´A£ …¬7ÖL׌4ÑÞôJušÕš¼Zƒæ™é+ hÔ³A³è1±T^MÐpؤyf¦Ñ§É«¥hž™jÜøJ$ ‡õ-™hHoz¥WæÐ<3Õ<3]ÙæëC¼ìØ 9YïÜèãl³ËÔ×e·™ŸëžMþn{7¸[l úýú)æÉéÏÏ<;û͹oÏ?¿øòÒ¯WTWG®,€é`»ÀL`!Ì[Ø f°ÁG°6ÁJ0€a/l†Å0,` Â,°„­°fƒlƒ¥0öÁv0‚¹°Ìã°6Àr˜Ö°6‚1ø+„`Pàn`ÐÀÞm„£`Ó€:p>„÷`ƒ'8À*˜ o€¼à¬=xHop„5 ¬…)ðh±Mv(ø€3¬ƒ©ð6pA ¾àëá}xx ƒ,H€0ȆDrH†HH(H…hHƒH‡XÈ€8È„x¨ƒPÇØÖ=Šá.ÛÀ÷C'ä°Mü-8ÐJø nÃ8íPU0 wà B”C <†j¸5Ð M Oá\†ÓÐõP eð \…“Ð P ŸÃ}¸ CÐ-Pàœ4B| ×á ôA3ÔÂCx_‰gáœ#‘D$)D*‘F¤D&‘Ed9D.‘Gä ¢€($Š%QL”¥DQNT•DQMÔµDQO4DÑL´­DÑNtDÑMô½DÑO ƒÄ1â8q‚8I §ˆÓÄâ,qŽ8O\ .—ˆËÄâ*q¸NÜ n·ˆÛÄâ.q¸O< ŸŸˆÏˆaâ1ñ„xJ|N|A|I|E|M<#¾!¾%ž/ˆïˆï‰ˆ‰—ÄOÄÏÄ/įÄo&TÄñ;Á£ÄÄ¿ˆ“@$IrH-’KòHФImR‡œ@¾A¾IN$ß"ß&ß!'‘ºä»$Ÿ|œLê‘úär*ù>ù) …ä4òCr:9ƒüˆü˜œIÎ"g“sȹ乀\H." ÈŤ!¹„\J‘ËÈå¤1iB® W’«ÈÕär-¹Ž\On 7’¦¤¹‰ÜLn!·’ÛÈí¤9¹ƒÜIî"w“{Ƚ¤iIZ‘ûÈýäÒš´!mɃ¤yˆ´'“äÒ‘t"IÒ•t#ÝÉ£¤éIz‘Þ¤ˆô!}I?ÒŸ É 2˜“!¤„ %¥¤Œ #ÃÉRNF’Qd4CÆ’qd<™@&’ˆL"“É2•L#ÓÉ 2“Ì"³É2—Ì#óIY@’E¤’,&KÈR²Œ,'+ÈJ²Š¬&kÈZ²Ž¬'ÈF²‰l&[ÈV²l';ÈN²‹ì&{È^²ì'ÈAòyœxGäàׂ0„waZ|¨ þ Ó­az ÌX3öÃŒ³0ã9|ëÁÇßÀLf.„™ö0³f¾€YÑ0«f†Ù›aö~˜ sÒaN Ì sÍaî̽ ó6À<3˜× ówÀ| hX°X‚oaáX8 ‹‚Á``ý°¸¡=zƒa*,À’aXú!,퀥§Áh!£¯Àèß°ì,û–/‡å¾`¼ŒcÁø$ÿ LvI¬ `…Vœ€•»aåXå«ù°:V߆5ó`Í3XëæÁ:X÷Öo \Ø €f°ñ8˜nÓ20;›¦Â¦“°ù0lö…ͿÖ£°u›E`Û)Øî ÛÁ|.˜×Ã쨃$쌀ù°kìúvŸ„=»`OìeSÒK°8 7ÁÒ,ŸÕ*°ê«`_ ì§a4xÈÁz:Xïën°Y 6·ÀÖlƒƒ[áà]°ÛvOáP!Ø‚}ž‡oƒƒ8<ƒ#iàh ŽßÓNpò§jpº N/ÁYœÀ9\vƒË]p­·5àÖîÁ½ŽúÁQèûúþ€~ô¿ ýÝ0À‡t<ƒwàØ8vŽ[Á s8¡„Õprœ<CïÁP8 ÅÃP:œš§Á©Q8ÝgfÙ‡pÖζÁ9]8— ç§Âù›pþ!\Xúáâv¸8 —ÖÀ¥,¸¼ .o‚Ë÷áŠ%\ù ®zÀµ`¸†áz ܘ 7uàfÜü nþ·~ƒÛ"¸}îXÃÝÍpW÷îÁýáþ¸ÿˆàÁ<4…‡×à“ýðéø´>­„GVðè1<ú>s‚ϾƒaoþÁã?àI çYðB^tÀwÎðý[ð}1ü ?ˆáÇ™ðãMxy^þ?ÕÃÏóà—ðËø¥~Ý¿ž‚ßæÂog‡þ¨ `¤~w„߇€ÙL0O`T̆?dð/Oø÷"ø· üÛþý ±Š`벉àØZ“ ­oqÊDFJq›êG大/'ëú¨nà |‰³,@*qs² 1FôÞ†°ô&¡Ê‹B7óó¦ÑJ¦IL݉ɓ!3zt7¥Û‚ÌdÒ ±´˜b§7ñúñîĤÄÖª‹‰‘}Jþ¡y¶Û&YuY/˜Ç8†ogf†‡Ú&英’² ΫÎMÉOËöbm.Vð:æåúdø"™>ò“DíK¤Å8“ ÃÙ|LájL3Õ܉ªxÆû¥ª_A¨Dª}|fª”W_—-œËÔ0NÉËC9ú¨H‘Ñ•L+˜#2ª2®0"S‚yL¢^J”«ںÀIõ‘4À\â%ó ËP ŠL–§‰3$©Dû­÷ë¼Ú tRˆªæçÕçd—§è³ü‘B5eˆ¸4ŒM‡9ªéüô”ì¤DWgIm„L…öFÈÄÑR즠¤JsQ3©þžÒÜD”{n2Î2“X«9)(›´ð\4@ãêûSëí<%Û7 RÑÉ6!î–¡,ÇÝò[*n îsTÓ±ßÖÌÕ/¢ ¶‚©Ÿ†n~Úœá’-LÌ…” ýÊReÙ)³¾å6‚]­íE›Ñ*šyïáBÌéi/¨kT•+«jÏÒc¦—ŒÊIº%#æ#sùL¤˜w2¡  iDˆ·+Ãezgw>öïB¥ú¨X‘ÙT¤§d†ÄÔåø"éwŒÌR=f1ceøalÜ8Ö¬2%µ'5$•!…¢¢¥OÀ³õ¾e¦5ع³×=ŒBBånIŠH W›xPIíK—f>ÃXâ*=<o»ü 8÷RªþÄßßDÊ-%ñ¢[Uô’3²Luƒ?jM!ãð°U,êpƒ’Ú&ËG7iÕn£yywÒYŒÚRŒïh2ªJæ26bޣؼp´K¡dbãv^¸’Z“*)C?ÒªYNíãæó&Ž,bµÑ‚;Ûqn‹X9éùKûr¦&ë6²ªSñ¹h½÷h}X˜q¼õÎø)ïºYÒÒØ\_܃úQwH»gW•Oî¶‚ãy%Ùå%´nSE©¢¥c Ö2<ì˜0_ð_ ÞØf)­ë|Ú¿ÊÑ| ² rr ð9µÑ6²¬z!îÐbÁ »¬$#K!èæaê¼­áê}ö „,P­jJ-¡Z†§òCRåÖ1¡a}™Ä=ò¢—ªæpÌT<£Ã-âeÝV(Î! xŒrtWªz“bñ+¯VVèKœÿ%§¨ó™÷ æ1fê³™xžôüW,À“}˼+ ñ‡ÏÎc>`¸‡6¯sr)oŠŽ‡Þ`þmß…›5­ãª),­'8x˜ƒ_ÈùxÖqn’˜€âí•Ó+T]¢b“m%nòíýP*3)e"º%K~DÈPÎõ>9ެäÔBkÓ™wï.Åä©Öâ¾Fáv Z(::\ì'÷F´±å'ø-̸sïÄÀÁ}Â1øªÁ{YhX¨á+óŽ'F!$ ”23˜ =f6ö‹(ˆ)‹ùYõÉ©(å$±8iSý ù²˜ñdÆRÙ@¡¥r¹A ³JÊ0Y–‹îÑx…gã óŸW–c9âQ"WsÄBrI÷dÝ•*‚¯*£Ð¹ìe^~v~jk*K;\LµÆçÇ)"‹eY®hÍ|IòUb.³VÌëBùQíéÑ”®øŸ ù>ÅRÝÉ‚’…¤¬[e\‚MÚ „iΰ/qƒx1A¡áÁ(IS¤é6Ö™‘ 2öÜai¶Ãy!bH´°ÖèØÞsÛ¾vþa.ú¾÷ü§tHÑzÓ­^ÆHßYnµðüa·>ÃÚøãÓǃÛõ ‘r­Ž±^…’"¼§^5ñܤÃ8ðÉd]i–ê~VRÊBtc†ü pÔÒ@û#"vÇÐJWŠc‹xë’ÂrÐE/¦šŽ–Ë;Yìé|µðÇøm³/æZØûYÙ ïS1ÉVAna–}óc· Þàäáó/œ>g§Zã÷ñ4l÷½÷cËsBóë˛籢ՋzCš=NÚÔ-@Ì´;lSðþH?‰_@€›Û¡}È*r«Ûß{ôGÖVèeõ‹Î>º­k t½ ß-ªÇêhõùK“u Æm [;–•=q Óè—† §.Ÿmù½@_z=°Ú|!š™­[È”‰y£³"ÙÈö²¯ëY—“Ùñär¨{¿àU‡b1:G–¯8xÀ{OøRD;†³áI¼÷¼jRµñ$ÖùC‡'ë~ŠGU«ùº/ªì¼²œ¦2ïÌc´X%LºbøÍ™¡Êþn!ÃN‹©i,-Áù”enT&ê¤u?U}Am`>ã#ÿ¸0yT øh¸'òD>ÙÁÅ5A—ÑZ÷Ö9qçñ…º£[ñ6ûΪ'>cÃÍuþ Ó¼3ʺ֒|¹w‘ À7W^ˆè2eQY³}å®û|ì|…¾öQ®‰+iGÌUÚ¾Qxó”IJDºKã«x"O°…Ki;Tësø%Uëó>„»ù• …‰•è:™ÝU~®¾ù<º‚:e­>5ŽÝK«°Zü”)óîDeËÑFzÔŒBË£äk£5ùiUŠ4ݦUAZ¬f22ªðÔ ?š»Ûš¡‚eIÉMÖ‚»:îc£V±¦“¨¾Á«ù"ž5‡ý™ˆöáÙ ‡´èŒØ”„THc„R",Ϙ.ÃÒ^ô‘8i„,L"Š:È‚x!öãU§§W ðTëþ¥ÒÂÅtO·+ÏàŽV³¢þYÂýUÀIT-¼1íâ¾#ns2TSøù)YI¹ˆ®È µ2)²ŽŽÞΪ.ZAmN‘(ÐiRõ]ƒUéY±òA,'&ÑåŠÂꆠbwïSá×lôßè¶[¬?VºÆ+ðѶ´êIè†÷gØì~UÕd]FuT¥Ço[C³-8#0SÏ'Û'Í—U-^¸~£y•ó•£BqHˆ$&ö¨wX0 FA¹áÁ´.cºßç¨Ë”}쿽û ²ó¸ µ®°µ¢ ;×§0üt½}É~Y¨74Uef%f$¦ eB^b:jA튺ª†jED5±e²zš‰Âoˆþ$fÑ_5„¹îYëÄp—ì©é.ËÈëêâ4üŒ¶º©·®RâU (r˵CN´…·›Ý.‡ËϬ?2fE#탑=Ì>ÃKYÙ½â—kyÍ…½íw®´~5tí˜÷ñGlœÐD û9µ&g· Úêƒoú÷Yê][…ß<Œ— jÙT•Îc¾9ÃïB½â&Ï“¶õóÃE³½?v´s9²?ÀÙ"ûB×ú}}? ¬ž×|×ÑÛÑÝWr†c >ÿØúEåCù,h¨ð•!Ò•,\>VÃ%M —÷_‡Ë‹ÿ† ‹l㈱ȢFöšT¶òºEcoü1õ)*”æ®`ÙéËKCKT‹‹ÃJ'¡ Øä‘ð5|•¯;?¿Ïà%$DF'&Æ!ý$OŽHcPf``ªïÔU{l´¨w|l+-,O­{kêT2ŽdÎs±oÔVõ„¯{¿:'³¿sæðë W±ÀÎ×-f^‚:YÈÚñÅ"Ì)ÁsÛÇ:ígÄÿÆg2Cx]ñ¹ñ¹QŠÈôt˜f–Q;}62ËgaÞùMõWÝ‚î U×Ð)4 ns­øTì¤ËxQؕȋ‡È‚…¦„dRØebu-½f1‡çT­;µ[xuÓsgL¢'¿ÓÔÞDc{ ÍÍ;“FOÄulùøF=qš5I&Ìg²±<;1%F-w¶›ÉÕûgÅäÇç£,¶£ÉÉhJ¡Ì)Õš!ïý¿Á´ë%ǤD§D¥‡¤G¥£t”‘§hÁïâ;z5×Ò3jShM04É'î²Y~„ÃgƒÕ Ýf+ ¢Ðþøøê,¦ ‚““Ùú¥I›Sx³+%.9>9>%^?SžƒbéÈȘpXн<ûO¥Ã1fÞ§WSuóÊ…ÞšL}Ej~2[e*˜Ã2^[bN’¡¨H™,œí('ꩌ©¸dçpï¨=¡ú^Qcµt·jDI|ùÿÑÍQaU.½Ì-x”Í*G*¦Ä¢Y4ÃöZ›£C½|l·{®C¦È¦Ü§/¤>ºEÝu܃ë'j¸6‹©‡1,\7ÐÌeŠYÿ© ^ƒ‰»M×ÚåY½è¾:YÉZUÿfûǬêTƒ|t;'çSõB»˜z¤™;êH ò•ÅdVD äM¡lMâàãÐáuÃù[øu:f­k¬µ¤Tctv4’ iŒ„ÏbÆOo9ô"„òôQiNF_k+{)Õ—Ql•!Χ‡0¶z³q~\vB6ÊÖG%¹™©ì¨-Rª,!S^zOe¾ÕËõÊ”¥³é&3/·’m§¢õ¾b"ò]RcÒ‘~JË*hg[öïõŠ:SÒŠYš0¨ŽJ־鼜¤Ü$¶é®Ï–±M›/…¬da汬…#”yjx6¢Uß°¶Ø/q–o’Œí7Qé•OBŸoúÏøt²î3ÕÎ+|‰,ò¦’Ù¡nú¢$B¡Ñ>á^̬QŽ3uôvTRè#e~¶ºéÏIÊW7ýJ15À6ý]†8q´WOÁÃ~ª3 srúSôÿÜPøò%Gµxd2?71¥¢Ú„Ü(¶à ð²<À˜1FzØú)-j\æ†gè;T“’Z­ÞÓ»Mã]TeɯÓï­;iŠüõ‘L-JŒEhlß댒ڟ$Ë6xÁÈpŠÞ‹w_»\y-M_É((—+\÷¶Sð ÷~CYU[PŸ¤¯` ¥TmBv ëXáá~ž±1á!aÁ²b=QgH#ÊCùyµI,š¥YT-*«;ø ó‘ÃcL¼ŽÈ£ÆëKñÇ Jž–—ž¡È+>Äo}ÅLKIŽA1ú($:vP²’|pœ¸1ŒÍÕÿ9JÕt~^J¦zÓ³2+ÔVȤ«1%µHd1å§ ö%KsP›(”œ™‘QQÖUØ„èîR7¶Òòb»Àˆˆ½êÜ  ö&I ѧQµ] E½ˆ>]äc,d\)´7*jO4;H¤ |“½’ÊP›>>Ba§sköðÝc%9í^e…ì‘HflNߥ¢“ˆÝ#,¥ê6C^¯šp‘¸2Œƒ?çà#«ù±ÉRŸ¨ƒaúÞêÒ-=)e º=+ÒA8Z@y>>ú Ö{‰I<¿µö›Y;÷¸Ú öiµõ50¸š™Èpl·›ì?TV!˜ø»©{¿«±g#æ‹e±çƒ‚b|å"ææk=F“Yš˜¢Y£dszyYöI5öŠÅÔéÄìÈÆ• &zÓ˜&æ#ÕÑEqc;S¥ùÇRØ! bêX¬"¤e¶mTÃs¡j%^:º’«à=ÆùÙÕ˜À}Êã9Y'²Ùü’‚ßÁù^~¾žÞ~5u•5u¾•^êöS—ðÐ%âô5Üwˆ?hýü»NQ[X/ÒïCmymÕßÍÑëœ÷¼¦'»õë£yƒw×óïôlûçÌsªrεEú6è¨ü÷¼çzÖ¶ßÍñv wF¶úè`®KÍp-ÿáåÍ&˶mYa²õÚgÃW®³|ßáàŸ˜5üMEµêÆz…>W®SÞ-VV¢ÏÆ®ï–Ö^/¢s¨­‰¾1Þ!Þ!R'´—f6±õsHÀ–à«AEþhͰÎdQp¤:¤:¤*æJ"«Ï«äü[Ô¨1¶P±\öc#ánÕø ñò w«·^¶peTnZNjjrQFa*›×J²¤Bõ®ñѨ€ÐHi¤,ÞAÓµ*)4õÓª ñ°ã*²{×èëkñâœ[Õ>ãČ͗#/tØÇjû2‹ëÇìŸ\«¯(¬®+)ËkB ôM‹ÁUF›79gzT­8~¸ó€)Z®?ÿòÞ_?=Wqå®àâ¶ß3è:ÝY{Sš£çáæŠ,Ðþ:»óÝg+ZêNVöê•wç¦Ó£Srø^å­¨‡î¯kìímtµ±p;lb/Ø´Žá5Yž6Û}Б--i³Ý—î_ªëzzŠU»5³°t„m””“Ð=¬såÌõfLäÈ»ü34á…¥¼µéácÅÜ×êíºñr®€bfí°dÞ[Q¶·ÏCØà_u1fNWx!µUeÅ7Êò8†ð$t3¿§¦„Öý´(¯0½­!ð–Uùí÷²Î¡ýRqQ€¿8$ T1§p±`">(+ù ˜@W8Weü+#›¶òXâ7®à)WUê=þhÒVU™¢¥ù ¶â=UÙŸÂQ‰ðü°4—½a‘‡>Åë°éÏÚî¡ú?¬¸?Ãr £‹ÀÃ]ê!1-‰Õkÿ®¹þ:¢‡Oï]¾ÚnárC!³‰Ùà WMaÓà“_Ufü« =çÑ9zЭ훀»G™¸9=#))]‘ŒP[Ÿ¤ÇD¹Z¹'âŸð• Ýî]ëמÛu÷Îùó·îï>·flã Ÿa!/ba¶åè¡h} É¹§©¼¬±>@éÃöµlã’€P"¢£bÒ3ª›O¶±¿ò1šu¡¯Xzod1ÿzH©ZG3¬Ë,Wúݯ û"ã±ëu^›BèêJRezMQM‘¢M½úТ²«%[ŠCÊÐ ÖG)t*´CT$*òMß’¤v¡j9_•†%Ü+¬ï°§”ʘ±eÿÔ/ÕT£ç&ᚇη&ëžÀ ðgü³¨,¡<’Ö-¹ضwÓ”å{·­÷ Î(wxI2ԯȤ² ·®À÷Vvô û:*Ï «èXhŸw]p©8×^I랸ÞWÑrrʧÛO-²¶—x¸ ¼|¤¾»qz·{."úr½¹«ÔÕÏOèå%’nö«™YOîgU¼ÞÖË×ÅÎt©Û,Äh#F·eÎçwØV÷È-Ð[yQÔäs×ÿjÄ=ôú%ïQÕ…ê µÍ·Î¨ üÊ|øÿeq‘‹ÚâªøNìǯ󹵣Ãù´…~jlr"ÛÕ§¥¦¦å9»æ…0>5Åd•Õ)ŠZºkš+ÚQ›$ÄÅøøxûFFGGGEÇ'èŲÿbâh¬»ûÿ–àDU«ÊŸâû:IÂ=Q J“dö±í6²CžAvÛOzèU¶æÖ¡T[ùÅÁ¢èÔ‹êJz/±swGý¦ê®%ÐU¿Õ}ÍÁñؘŸsµ°½¥¯÷Bù%õyͨµ†5”¹5í.³Bô"³ÆŽ…uå……åù1¹ÒBax~lʤë{kÎõïÛbféo)mÛÈmíõ³·ñ½ü=¼KkëËJkký*Ô½T<*Á3/©V¸ñ>Gå‰Cù«öØó˜«£{¸Ûq#³ò>^ù’b¶\â3Ñ<ŸsYóá5O8­ŒÿNmeKïͧMc›Zø]—K^é÷-Ý_ª÷‰y•[õºò-9kÑ,4#ÌØg§ÈÜËuãú/?½õ0(·ü0À1âÿÅhVÌ‹ÿ× Q/ý_¿ø#ÜÄ?4ª›ž†Âõ÷+E ŵýQ7Ão ¢{bzãú"1èÅà]|À /2ÿÚÚòŠÚuûúûYžÐ¥:TG aüæMÕ›íœÓÛüÕn¶ šYÃLÄoã Ïš¿9}V80pµê6¢ñbüó3g–ùÜ­¾aŠºŒ¤´¤táeœÁÝÄ“;vHsÜþaäêî¾oŸçZ¶'2o³èî«êi¤Û·x÷#úûǘƒùØ„™ßev0öÌ2f³Ÿ±ÄK™ÙØñÆ`^÷ !³Ze¯NPø'8%ØJvû»zú Ú% áøÉ¢ÁÆVau}SqyÂXóûÉC?¸ÁÁ[UŸðñ^JMNÉhýB/2C$ bs‚3!yb>ôcSã3ëÛ£Ã:˜r9±ͦçí\·:X’Qê%ð( Èf[oY¸ŸsŸÿÝá[UÇ…½=%§Ñ=tKÜk=hß½·ŒÑ)QóÅë”Ã&½$IrPŒw˜»~tHœEÐÁeI‘²$=>/6OÖÝÊ–·TF|idIHÕQý ÏÂð"¶ÒÈW”VJsì3„Né¹¾QizÕÊŒîŒÖô¼TA—I ‚¤’0‘¿ÀÏË/00<:N¯’BåéÕ9uéÊÔ”C—„K¥Áá©!éA‚ì£ižÈ‡£œKÄG›ƒËÃ3C-–†ûËú#…-ѵreXN´Þ¿Ð»ÈCQ’päG懕d¥) 5 ii™ÙYiM¥¯yÆéH‰ÿ‡žËXרv6&•|š~|rLZTFd–¾W¥wuBš¤$¨(Ñj̇U©qÞ]½nþá,ÚcSãÒS““ÒR§Oµ·Ü¾¨6JämY;öÕ‡Yª{|7ž=ó¶jX’ŒÁÛó>d¦ZZÕ8 ‹üa-A˜¹z¼,(V$"ýVÔ’_]ÞT«¬j¼–©·«ßn¤~ÅàŸõ#îÖ+rR„U º¢HYÙäSk«2†Ì÷|›qºE¿(ÚÙ\X…ç±ý=àÅ•4s„iã?ÜÈv¤ÓN³%VßàEÇ2«‹Â’‚º¬&õîþy6ÄÚ^!°è 'ã6>#ÚŠEŒÏìÃÞbDØG]wÅ«ýßY„1ªú¿3î ¶¯œÙ€*ˆkÃx×0§NeÄ¿ÆÜã¡ía l‘,RÃòÑ=¡ž§Åï2…êýŸÈ±¯§Eä¡K4VP¨•%ŸˆKѳöŽW§`qu§Ô¥æwµÕö j¤ +wWúä©_–( K;­«×¬Ýãkã*ô:á³’Þ¤VVTµÏpa3¶éÁ5U“PåãÇxþç“uÃñ •6Ÿy‡u-¾5ÓŸ7;×R$qK$íË”Õ"º¦¤´î„EûzfÂZf†²8ÍW8í^13+Y‚BPtbL|”85W_Ô©/#À{øÁêqSx%,͉ê/Ðîf¼kU½¿± ¯ÿ­ò >ˆûø²!næëìð·BsžkY@“ÛÙ€“ˆþúÆ…ÏÚ%¥ž~¡Yz¸B"Ì•¥E¢(Úã —í.ÛW{ó†Ê‡Õ—”ýÙƒIÝú‘xß%~MÅx‰ÏfóÙO ¼­”ƒ ˜9|ü…ð„¼/«nx׆Fß5Å+â;C‹£•±yˆ.-(ª¨(ÃCb£‚…G$¡q®‰èdZ¹r0S™Vˆ²éò€Rÿ€@yš$C,(>柸Ï=I’z¤083$-‚íñ%!¾¢iunvJV¹°]Q˜Ú˜’4;ÌÒ˳bsó2 ™·Ô`eö”«Zëpt áÕ©jŸ™Äc‡×%å¤_T^Rçää§ :73–ízbãc„±‘ñ‘(†) -®()®hu®=èp8ÀÙWàl!± AOãÉYÕsx Òˆ-‰q1±ûô¥Ì:9Cûì9„ôÃ#Ó3R’SS3„é9)(‹.•åúˆÅ¾Ž Þ}Cm ·u7 ?)Ç;’ò2Og°Äêôμ3H¨üÁÑxkõ{’Ö?“0‡Àï«ìÿ*†Ñú;ÐÆs*nWo±ùt,­²Ä3ïü܈y9ªÕªx>æPîÕ‡˳é‹îæ”y´(ò¨¯»O°#:Œ¸µ»ÔˆJ¥7i¦‰Z´¯ÏÿZʼÇ;çÒ1O/m|JÝÉ­Ëm®i¨Vv ~ÔÕ^ì×áS̼yƒÆ‰Ô°¼Ç¡pÍl]È7>\Á6ûC×óé&æÿÙž´muuY- ѱªT>3 Ï)ŠL“"ý °pqhŽ´(\ˆÎU»oýSÜÊbjk ç«òÑÉÔòâÁŒW ,õóü "©þˆ…H ñ?C¤ µ)%iiø~/§Ÿ\ëÄ9î)Ò‡‚àŒà±Á¡_ß²œ¢´L¥°£°(µ1 í‹ó ¶ŽÇJœö/ ,¯(--ÏŽ-ŒV ‚ã*ЉæDE\§DU›ƒè²Â¢ŠªÐ€ðàØh±Ð!Tï¾Ëî¬kòj‰èMú¶1¾ ¾ƒu€âØÜÿtv°DÊ:ÀØ—g—à´,/Å)%“Ð ñËy§0÷…Ý©ðã“u‰Àñ;|ÝŸÖ]ë¼qÂóäž~!óæÊjP…~gcͱÆjYH|||l¬@÷g —‡†Nñ+©ªW7œ²ìÜ`la½ÑªØë“­y pDëª"¶Úؼa`;ž¸\xɾÂ9Ñݽö¹¸³HMËH°l ò3òò§”ùxxZœ³ðôô±{Çĵë. fâ~:áÑkÇ[×è®<ê;ÅÍÃÓÅÙ¹ìÜ.{cxª¥ÛjªÛÔÍ þûe]@ñÿ¸çˆëb؆#‘õߨ*ïzc×¹?«¼@÷£ÿs¯×ªzðQXV92©’@ÏqÞsõKtc¾%r¸¸í±pf¨±½<¢Ñî³h±?æC]…ÍMg†Z1ð›4v0À2“ñ¾üá†Ë83ÎöÓŒŒìÃNØ­sž'ŽÜ +‰ªÅ¹õØ­¢¼6¦X½ííWqùö­œ¬òxd1[1ÜiŒ6óÎêþ·zZ šš„'N6|ŠÐל۶ 2<ø­õ®ö{ý6;z8zKØtãêWÙz¢úQËqaU{uQkµ•ð—|'žÕGÉuµ‘á_Lë>.õ KóœÊð¦1]³{/wõ75Ÿ¨ˆn£ü„ÜØ¢¢è¢øÔ*3Ú˘Ÿÿàéõó~TðÓƒS¤HF3\†Záæ_ÑÜY|­jPPs²µ±¥¡äÄôØü°ÜØš¨1·ÕgÝ/|Q’—•‡ ô‹Ãr¥‘±!!f3[ý¶\^‰ókñÛlÌý’3²Ì?¸ÝÍß¹ ·âZßÞÈ–¸§4ÎàÅŸª ¨µÙ–Y#+ä|ÄÂú”cñdKÜ=íì½×£µ4£ÿx>~óZGÕµVAíæfŸ èè8ŽuÀ=üÛÆÌæ 7óÍ«Ž<Á«çŸ,.²nªÎÊx/ó6?鳪Žˆîm8b!ô¡ØJn¼šù]: Þ†™Î†Ë»ê8ô^ÉÝÁcÞfVryøÍŸðÄÔ1(²&X1¯št~›==øÍd]ñía>Ú>ö#‰U½ÔåÆÎã§÷/]éud[´ (!*E¢ˆ¬Ø²DZ·ãóøîMÌÔ)Ë9ˆ£2K ¥ e!…HßWäs¸ÝëôŸ`âTà c£Ð£Ú;gg.­+þm ¶áÖ”¯·ž›±ù€ïoAKä!dF«vЊýÚj[îãåÍÁÅ“TÓ¿Ÿ¬ûûÈiU_÷7üáèù`êrBE$ D1ñ1L¨XïèÎðˆÃêïgÙ*©Ã©~9HJËÏ´?¨>¡‡M™ù<´5\¶+Z’ 'VePÝxן·‡!=ƒ`‹Þ¶¸”A!ŽÄS­¨Jž’š*M;B—à° ^œKœT. r‹4gûZ–ðt/ÍÌT žòðLT&Ë3 G1~|¼ßâ2·Ô ÇC#“øç°ð$Eâtq–®^@®_z kwWWé6º†—SW¨(C¹(?N]¡×¬`£íª©-¹Çâ¯F%èÃŽlwqñÀŇ7'ë>Ãeª|¶ÑŒ“#:"!½Fˆ)ê’[½™@÷þ;‘“$_VT ÈÍKF)‰)ÂÄ´Ä4”Jç”å––åI}^”ÁѰhŸZ÷YXDdpðÇZQGmu~mƒ Ý#7¼ŠmÞó3ÊÊhFk¢â££¢%Qáñaˆ’—W–(nT¨›JU÷I"Gõß _:Iý×ï—Z¾ÇøK­¹6ÔÓA.³’úûO“üxÿôë&œIáE_p(f‘!¯þ§Ÿ:©9§ž»Ï"¸nd>_´Ö/hÚŽÜkeWio^Ò ¥¨Â­]܇†Qï±Ü_é¿}+|dæˆ߆·qÚöæCy[‘>cɼÏÌ`ìÍÛ*­…EnÁÎó¡Þï!¦/¸ô†]e{ð}x*žŽí/K/û Cš$ÅGZéÃÛùÛò,!ÍX¬`ã›Þž#ʾÿ&¾û¥ð!ô9-á xòP§Ø®{,¬!ù~¾¢’Àªê²Òªª€2‘Pðî–ÅxY³Wó$„µpç“uyÈ"œ À© ´59$‰Öý>Å6ɦ£ ¾–6Û-\f!u‡ÚåçvZ_ó¹ƒòQIRYR{ò¹äuçÃÓûÀ|WOóæí=ûÄðlÔBã, ®£âà¬ULÇ»ÄJ#¤Ò WùDÏÀ<ÝßJ²RN ŽñðdTškH¾;:…oêímÊLÜò3Þ+Ðý¸®î¦®×zlû&ø÷?|ϹòO Ķïý}Ñø¢JÀ–ö ºçßæà%lj2رgÙÊ󻇟^¹4üp×Ð2aäQ~ƒÕ: ?O;?qni¸0´&²µÑ=Õ5]jžª¬F<¹‘@ê#‡Õ®-ßêÐ!+‹.ûSC=ÝCC‡z,…Iîü¦Z/WW/o7ïÚææÚšf6k-’÷ã(u¸ö/Ÿ„žn{Šu?¬ûpðB¾­™“Ï^t¹KjƒÚbë¿§±‚§ûæGØžœ9Õ‰"¹Óºwœ½rm¦l²Ûá](®ª.PÖ$ ÿ_u×ʵ%ÈÌÜMœŒ‚æ²&1jc4K,±Æ»bTšT¥HïEøiR–Þ{Vì½Ål‰‰5š{?rïÿÍ.KÑeY¬ùó<Ú 3§¼ç|ïyOœF$àt~9);P*Jð s w 1´ ˜¥ù­±û{ßU«çöžY¾òäžü¸š“ÚùKŠí÷¡Ýh{lanFjBfÆ?©âq¨Q´QP ÁŒãL3##‹må3Sá½2í+.äfZá>$A)F›‡ >Í `8qŠÞçÕÿÈ…ù…GE"­b±çzk{'S{çà+‘«y–{Š.ÒºXž[Uj–®ãéà)J;¦aB5³”:ÏÔL[GY~ÄLÏös§üºÀ¹q:«èK 쬈eôÅj2züb ·P¤œCéÖœ*áaŒ®¹•¨†jÔÁqg¾ÞÁÓ1vÎq))ÑI9i¢”¡…³52côs×mßžŸR]¤ýÔ?ƒ/'XcV3‰¶ YGb7ä üÑŠ¨I†¢Xëh—|ëI¸¯fu º8§øÁÞ} ¢r×r›b‘sª[”y2c6—ËZ¹ ýÈ`fÕLm£²7hÛçrÖûÜ÷£SÌo»ŸÉIö\Ÿ¡Ýœ’Fp¦îÖ¿÷§†)BZ>Lukr݉ð(ñá5´÷ÞE¾ß^u>g1ÛÔf.b†-9F<±ëž#·ŽZÌ‹ŦP˜_˜W°iÌÚðu$Ii~ó~SW¾‡÷ö]Š‹Å]ÐÀßò9¼Â_J‡áA°üùÁ"Xˆ¿„¯ñlQ Gþ¿'î‹GâѸ'ÖÆCðPÜ ´aŒ…^ð|+j5 t¤^­\ˆ¯`NÏ„ã*Æ)Ï^TÅ ž &›Q‡]G(»ƒÑ*:# >0µi¼ä@.¹þqÔœÆÃµÇP¿l¾Æ Á3¹ô°°4Ð>´¢ÍøÈ@ºpYIUÙðµ¾k5¾†çÕᖆ…©´û»^qŒ×”M¥u<”–B©6ú†gü÷„16Fßhv.& y˜ïFʉ_§Ý„Å7{±ùIübn¾IÙ¬Yc»1KÌ ö‰àÀ°Æ¾4² pð\HðŒÏ¿Uö½WÅ­ÏʧWfúeºUi»í Øê_”½´Ð¶’ ª™%‡7ÏN±*GÅ(%&¯” §míÝ}\H„ðLØE®{È“8Ó;ÇIæVW#¯I]ÏkîxcÐ B âÙ*«q˜Â¶‰j>O4-Ü£¬?ðÏfƒnoeføæÜcÝe%ÕÛ?iê ß°FÉ#„jHIU«¾"´Évs+‚=ÂP:wi×`üö" [º(¡PÄ„nöµá­4²õôÕßÄØÀÂ×;$€'ófÊ~‹ç†“ö({ÿlçøœ8‡²Âsr¹½VÀ?É3r‰g(y~^®I>I§öA÷Tøobê+üw§{±n «a·"õ(¼ 'h,‡éCOßÞKãöq˜\¿LÓ(ƒ?¹[Ùtæ·ýƒKLK9–n` ”TçfO{v ó,XœØâ\;t®{r®Ç/ä\¿™Gá½79ÖÉš7âZÑ‹t~þI8TÈLбà{ÇÀ µâK}oݯÄ÷ø{Ò³ôfÏ:ÛIÏâ“ðlÎ)LƒuŒÜº~º^wè`ÊvT¡udqé¸5&î¶¶ÚöžÎ+Ò\5“Ë3’‹S’gj`a¾x™Žèó¾¶J dgké,‡q- ú‰r§­xÊi¯tè´ª:í·B2Tøà¤’!õ=P½K­W}/¶î€Âʰžì¡g>ªG<íÞì© õ&?>[ã¹·Å‘tèÈ:åÈG^È‘ÏðÇÞ0t".Ó§ÙeØ3Q¶Äiú°7šÝ†=“I§O³ã°76n'®ÓGî:M~ ^ðûc¤*=òz],Vµ^}ÊÉÏÕ7_Eî¸ë<á•øzÙeÎN.JÒíý†óûMµj¿Bsö¥ËáHM˜|aÑì¨zÞÕ&ó–\JpÔæ4ŸX/-vL†KÌóÞ«­­W;xl‰µÓvŒqN/7º8Û›å8Vúµý—ª,‹ç§ˆØqe9q)™½wéͽÖzš±všcnYBtÒÊOv°0^o7ÕFôô8dÍ @»«ôï–À@^ÁáÚIäè‘аë©Ðp©ÃаKå|þ¿Æ±Š2¦ÀRZÚTâÛêŸåÌMY-ž¸t·u´.yßï~Ý÷ÆZ¿ €÷«wƉöVåÿ†î¢ÓÎgÍØítL]ZñK¹æºìAË–f›DÎÕ2°­òÊwݽN ¿÷cž…Æíq\ÝAÄ=èUÓ¾_k”ºÝNdUí|fî”9­- Gê¥ácJ=Ð$€üÙaù]•ÂþÒBþ|¡‚¿ƒÿpì/*:ß!pƒP¡¶¬\–’0°Œü«/þKuÉ¿Èòq]]çŸ"¾SZ¿Z6O~µ²¦Â!8GòãÌãê¼ t!.‘#Ìͤ޴ºŽ<«¬Ú“I¿­y}âo<6/„ædÞsX8¯:ð/SâB¼G‡>ôØ£SY˜÷x!šÁ/ãØG]Têtö\#dÏvªûWë•DŽ̩¸'Òï–ùjh¬Ý¦z¤²3kÖ˜±G~¼tåè៯Ì:2FdÚµ¦|Ù¼¹zËç/ÔÛsàÀî=ûDÍYõ\½ÚŸÒò7“\À\Uë“—ç5Ï+ïß¾B¡A_X®ülâuzÊ!ƒ)n ÈœäœÐxˆêÙ;ÁYØÇ­Ý…½'8̹ޭü…f—¡Ø{‚ÓLì½òÉ÷¨X½5;ÑéšWãF{øÛ/œ¡ã`.›­ÊîÉo ¢À šf¬†‡á­g¬¤æ ‹_†Å¸óí7E_¡¹bŠØ«ÒãÁ^I ¹ý0•D‘m¯#¼_ç/ª2dr˜S ­1 ÁI¯¦[D1í;Å,h%ЉZECm‡ûÃFеÏÙ^rë¨r}Lð„þt+ ?T¯ …°ûj@œÿ“ª ¨jH99GÔ`Ö¯êPÀ9…¹ØyùY#­çntÊ,Ÿ”D/Ãð?‡Õ/Xì4¹‡à‰¯ÀCÎ ½]PðšÅˆñÝ J½µI©øªÐymR+Îx!µb£vÔŠ3¤jÅŸ7<äØOwQ7uQG´tQ?ÝEñtUî8;¤\;ð”’í^‰ó|ÙÐ_Eñ±¬Ñ8é‚)ŸëîCoéžzºgèãÑ^ϰ®´¹g8g­õ4í4ÇìÒĘ|¤U˜ìhn¼Þî›f$´½n;’àáp»ûç y×0XÀ±wöýn)@`-Rž°$±G”LÍ3A¦æ9¸5Ï„N©yÎyVÍ3A5Ï=Шˆ´Ö¤ú‰/ ¾^1!ŽßäšÛl?”“2{œ¾Ó‹}Ÿó½¹Iøî­¹é—ÊwîC¨Ò8S'Æ*b]è*&Žbÿã 6Ž”¯¹›;Ú„|ƒ½ÉCz’bbeÚÿ }Ž[<†Ñ£¬Wkœ¦=‘7ùãŠ<ƒÜö¼û©¾ðÑóT:öëxC§ ·ígòiÓys ç¡ÁhÆMWèË@*}»þš Œ#q‹ ”H¾–PÛ5º=1ÈD¾K¢üû §Ã©3êàÕГÛC x‡˜åLâMüǰD*º"!¡1ø…tZæËl„ïée¡¤ˆ/gøï¿ç") Ç4°Ì½|ý}üýÍýÉ—oþ2â]h[tti0“Ø&¥øa<kà÷6RÙéÑ ÞL#]Ow?òm½iýÏ(áÛlhyø$ÖÔ»=Œ0èk £ãa¡Ê°õŸ­jÂQh¼/Kî÷iX®ð<ªT íÉ×S8¿|Yðßp`ʯ„ù+5Z„Ÿà/8ÇÁŒãx µûμìÙ¸».˜›©iÂ\åŒ0Ò|Àâ0t×€‚ãx3ùÁ^(I {¤`ÿ6žÏ¿¥1‹ÂKñÿ4`>ËáapFÁŠ“ëìâ»Îäà›'& #p÷¿·â9ü{xäØÔ¥¿ïÖÂy5>ï¡B 1>×qÇCfC\»C×£íj0¥A—ƒ$ê*ñH²;†ÛE,gÒ)O­Ñx—×Fcì×8H£¦$`¤±žZ7ÚÂÓä™^¡`y(Û%Ã"Ã2Æ­`†Ì_øýBýä{+µWþƱæuzÆq‹û¢uΖæV殆h)Z&6Ê1Ë1+r.C'QiNÉÅ쥩ëâ\ɳÍÈtÏî³ÇçåÅ•¢´ß©Ô¤À¤Ð ~9Z…L¼68lp°³´×%ÈËË3êwÂîÝjè$\Sÿ‰£»S³Ã·!æîÁ/ð³k?]Ñ{Œc—"=´ÖÉÄDOÏz&šÅà·®øëü©ÒÓÚ¥×Ò€’Ò?âÁ—x ¹ý|m¨nÊ9`-Wݵ lÍLìM³È´ò*¼sü·«ù¹ÎæÙ¢„¶2IZét|+ êç=HÖ:Ë=IcŸ?zàTûyEL±í$¶ãJl­[t@ªoô¦ÐÀ¨€µƒ;ËH}S °'$+ïš¼Š…4xIìJízãøéŠá†ô!Hkþ—û\ùT…¤üÖÞ¥ÿ!"ÞØƒ/Rm&JŽêw|5 ŸtþªÜH›%»^Ll½ˆà¿Õín"ø»Zù*‚ÿV¿Æ]W+_FFpU•‡ÑÒú»÷p ]:×%¯:~Ï–&‘@ü3t7*4Iâuå`éãóq.z@ž+Auóç‡B;0ÕxhÕX%z<‹¬Ò=Rü2ý‡‘˜¬ÁžôŠêÓчO`€WëæeäÌùòÕMcŽOV¸ý™ÐÚÚS›Ê•OHÑ/ó»²%ó«ù± œÍ~K*Tê7t#³¤,#+¦í@ÇÍÍÕOÕÙ:1?À4 Ç\ú¶Ëªó)vku‹¦ûjrûÖü—u®ž–A&Aáù+ˆÑ‹«Í6Zš­Þë¶K\P ¸ÿgÈwC*˜7úÑäâMz¡0«Šƒh:esLP¢W,ûBÄ©î7[÷±ö ËÐîÖðo×2(.ûEÀy?À®Yû(ÿæß-]¡o¸pã,4 ÍÈžxÆÑQóÐwõ+„P~->x¬r_öutÁ[†w¦ž½wTÎh!–y/wvñuÙäE<Ð9Ê7‰±§¼°½F •pLœ™›[RR•´ý‚»„áqÌË•vÿç,v¸Ë¿«,Q‡¸J ªðF|µm]b¸ÿ××ð®ÐGXSÂ}‰ôO_6u×L›˜LàÖhòÖŸæükr¡N”ˆ}|0ª¸âjoè™=˜1Üàçn¦íìí HlBî‘ {' XÉ<=òÔÙÇÐ3¡ ¬¾ÏÉ#Ë¿Ãcgˆï§Ø?96oVÿÒr¡t@=Ε Ëšl‹ÖC¿a¶ødÇ>xæ|¡U¤Øbò¨D³wÖš»lX×»eœnc¬lèNËÎ9.9akB|‚(2"88D>Cb—<0(Q‘sl^ #n÷bKA½'k #)ø€äß{äà¢õ¨=þ•'´cq í?Ј§ØÒsbñÁ>ûñU -Ù調‰`ÃÝ:g=FÄMš¶aªm`r²¶¼=.eZ¨Ý~x^øûÆëh‘;7 U±‡ÅÇ 1ÿI‘‹¸Ç‘ZXRÛ‹½ üPŸPÈHÙN³;QETTE#ntv¡÷øG; €=DÑW“U'ìPÂý¡Kjë¨_ ¢RõkŸ»HnÉ«ž ä [ëRLªä>ªÉØío—N ÄþƒøÐCž¼Ý}•ëÒŒdÛtèÍ_«y9ÍX}z­™‹ ZÇ(vã”´ŒmÉ!¢§Ö>1‘¾Ž]e,ò@MS¬lÊ‚nª&ÁÖ M¦á˜ÖζRÑÊ”õPƒheÉÏ­Uî{²@¾£…Üògp‘ï T/¶ŽÁI.xXöÈÊEûgj¢3­)Á?~‰ðL„»â^îxƒÕ`1Õ‰½.4? .q»Pz{„â RBñ„â,ÙŽ9}wèÎg%¨Ýz¤Þ0IèÇ´¬ qw4À,®Ô$é#ËfŠi»$t›°$4Ýqî _`Ð4™ålj‰_qL²sªáF —•k lªîåÁ;U"øÿj÷Ø`aëç?'»B1_¢°[%;íiZ¸³Œ8¸«úÂ"j`Ÿ¾¦úεôëÝ=‰,•Ný˜ÙBèukè"O®ÃceyeÄí]$³lä¿O8iRÕ&I•-kJ«FÎô ÿ¥ËDB+X–M]hvcsá»ÒÔ*Ï«"¨LæØBÅùIžðÚæìDžèÀô:Xúæ—X’Ä;$Ù:Á!î!žG)@ ûI_ˆTzJpäg”bú~@Þ÷x5ä}¥ä}¼Î+Pi3¨¿çU êOWyP¿¡Ä–.e #})Rïåá<·³p‰wµ‡¦a–F“=<ÆûÈÜr|˜G¤4zÐ@cõ‹X4w‘µémSåm5nRôº»5Œ‘G8bVjàFÅÅ8’¾à[¼àPM€^FnÂÍm¼Ÿ,rM6Ê]cø©&;³5ò|¸PÅ]ÄYÔWhÔzÃÕë-ÝŒa¹ƒÜõyÖÙî'ÜðjªiiºÑÓpÃëò'8H¹Ù$tEºq‚ý´‡ùm)|PémE «5J8³ƒï·ãT‚ âhúLU‡“·9d€Ö}±EÖä·©mg LÚº`€§cN„våÜó—Aõ?B×¡Õ )ì¦b¬ “  —hG×aøƒB càÃü:ÑÃÆ~ß®ƒMñ<`Ãî]1ÕA “å šƒ¯5 ­¿Uëö½Æ\5î §(I åæ_¹Ýøñ-J–ŸHh›žÍMBJg'%Ùé•íf™í ˆ„vÎÛd‘{imãüjRˆÒ BHcÿISË«a(ƒa&|r|ƒ¸äJ UËžà&¦ZÒ ¥ãQè–8«ûXO´…ýsþ›- u~ò½?J̰wâËã Wvºïúœ>ÉÉQéÅ6±Æs\tt\D®ºë–¬FŒô¢P8¦d3AމAbìæB'–ˆ]‘‰îåE¯Fëª\ËÉ’¸¸Hæô1¶q6\Ÿìžœã›ŽÒEÙ(÷*wåâ;@g¢…±À*b* Mß½¸ÌPÿx¤…‡ÒÈÄÅuMÀÆ@MiÃ?yiCBÛäŸjø„ÀU­ŒZ…£ùÎ&XÓvØÌicó)¶Hõíb¹´Åî˜ÿÆ4aTµ$ÈÎç †ÁgšVe¶i†¡yá{%ÞfØS‡c¢âc3ŦGû$¢´˜À|¦‘.ÊzGÕäžÊ ÞS|ICW.˜¼Ã ”ÓP;¬¶7t°–·£ÙSÒݲ2~^RÃ[ =ؤ†YB)áÕRJx8Zc ¬­ip`NMiÛBb¯PHÄ»üE †‡kâ¡Xç›ýü—ú“JÓ5ž¿Å1¥ ±8­h¼5Ç}ó–Ç›"-V9:{š2l’?ò”n]#©lq¨ËVýýxdhB˜yìRb”´îø¡Í[âkÉ[*·Œ]µXßkšhÛ[öÊÞQIëwä"¼£Ôät¡Ñ,äÅŒæP Ú mN¯½P8­l'œ^“AÿlœÒ™ì×°ÒëÀ2±K!Ì,„é±=,X½ú׸ß{±±¼/¿˜küØ…’g¿Þô,ÇO­½Ó­µÙx Þíz›xåHNWÃTmV×AÿV=)šãAžù%TS”R˜œ¸å¢l¯T‡‡„õ Âl6Ûo&­{YÆgasî*Úç»Û)Á# 'ûõNö®.þ3³!(!YÚ¾GÇråg{jÔ@ƒYµÑøb*.ð*€ñE ›¡z§ëÝ%?.´MvHOŠÏ …&o- Í*DZµ¨bd$¦<ÒFQ¸ËŠÙcu–WXj[9fëT,»€´ ï•Gð)ükä_XSÔíÉØ 7`I7^OÚëSƒ¯kÕùÑÂ;èIÉ:šM¬§jLÐÉ,· §Ëªºjú ɘ“˜x!E4³—”ŠŽüW«S¦ÕĪ$ â›êüÑdnº*^… ¯|Ôóy‡bßèÿó̇Õi09Ñ!³8œuµ{¦¤r3‘QÓ)[?Í­³“§HÓ­fééÓ——§…‹Ø‹ÛÃÓójz_ÿ>ìz;o;m?Ï_äw8ÃÖlÖð ¯å# 1Å^¼u¢Ï®³EãuÜWŠŒ6l£Øs‡ËÖL›°ÀÖPÉ0 NwÛà&ëÊì9¨Ö`öTSÆÇÍ~5þJyS&Û¿lÕ”q@~âÀ˜€d÷Ý fוkKmªîW×WŠÀPèˤ }ìö*a¿Ü?º&ðoí…é²2ËRgÓ‘PÏ[31P½ëо“:Ú8‘Fã½Íœ-Ú³‚=¶eеþê_"ȦÅïd Ÿ®kªoª-ÅÌeü]iç°y> ')c¤ ÅÖʪ=-þÕnº"ƒ¿ç}£¥>ò~ ?3OÀôMU#0 ¤gvü]á¸6VÃr-½†ñªJÞv\&œ¹ ’Ÿ¹1l^IxþŠ>­ÜöÀr«p„9Ây›¹b¨Îê5u¡ý± .Ãòn ‹‘”§ÁŒXY]"È•¼³0ûcÔ?'u £¨ÂPÜè‡>0ÿ«Upv{¹±Y[À¤|­€;î>„X {±q|…ðàŠ¨Ú–à‰nn£6 ØÑnëŸI*Ê/ÌMü •£2ï³ų÷.DKÑÞîÞ L¤ŸÝoÿÀŸpñáy[â‘eyexì³É˜ˆf!ûiklÍW{“{Zî‘+PaSÀà'Áï\º¢fŠÕŽÔòì¯êüH~ ÷k>þ¿7Âlò”¯Má#x¯.÷ìÖ!¿kîyáKèNBB+Ršîøßñ‡ø½É#qwÑ `Ú©>uúMFË:kuÄ´HVùa¾ôŽ]ÙqÛ³'Íx*1ª¿¥•ôŽˆ*’.¿‡ß ¡« ŠD.ZQÜ2l·v q˱Ä<Ë"Ã:jflUtÒÖÔ$†-HKmï ]¿Ù'jÆ·¸{h—_¡ Ã’hµfVo­Ö¶V°½+8Ò숤°±vô!ÝoÆ-^õ•¼˜(nZq} Dÿ€-׃þ;¹S6 Ó…JÃEÜãÂeW+Ì*–ÂRn÷XjÙ–¥ÓµÁ(–ž¾¥r6ÓìT•S̈iöžOC&F¶ÆvW!3daC²”ÃV‡}>˜Áý4Í×ù“*ÞºÓÄ5]¸ÑȳS¨^œC*DÙqIéqI1â-Ç“è`×Ī(ûM sÿBn+¿Œ»‡¯S â /QxHwïžä‹]ŠTe_²¦“Ú¹e—î2¿âŸ}eT·'ú­Ð´£ðŸÐY\ÆaGÞj%WÈQò“ Íg+üTE˜šu!xÛäƒÉ'·\FË'¥P^v¤ÞÒÿÆ,V½ÿݾO¶“éÓoR2ó„=Y¥jç|H«nêùZn5‰g¹gºŸg݃7¡% ÞF¦M“݉߸‰é¶×ô-qVðÁS-WóZ®nº¦BËÕ’Ú ‘ÊŽyJðó,> ïuãG´ð„†ÞüPn | áHyMrq™+í`Æ·t¦›N Ä&‚}—‚Á-¡0zÊîøÐ=ÅC¡8ÿõÊ-RªIDð,äô„bÊÌ[†?„¥š×àÝ„ŒìØÜ -1þÆ…ÎØê‹\‘»»Ýs?_wG·®‰šV;óQ4ЉË"qKbÝrô~#Sx´ÅjOŸu›´\à31må&ŽN]†î¿à¾[|7û"_-äèã¿.€yíÊ?*Sþøâÿ¸©õ¸ ±PD¡k¹Ýž¬Vz:×Ëi/·O9¶ßæ©hÕæysÙ@~ík’7quü5L”oáiêJä¼!]™w\W¾ GeüiKnT5¬&&³>%IÆN×ßîÛ@o¼V3Š»ó31"‚„„“ûŒ-kŽÃùmÉó6¸ëF}æäL!CÿÄÝY'ãï¡Ç/6V7ZȃúS[‹¬ùÓ0‰S´—ˆ·P´ŠH0À¢gWáËüe™u'¶È‡[Õʳ¨~ÌësóÍŠ¹ÌSõ°ÏB§ç­‡ew©Ò¥? téáý›ÞÞ‰óûÊ9‡dм½˜[¶Å-NH $5‰ŽÛ³E†Ú+ü¢ÜÑr†uÀux2œPô9,e//wwôÈ’ůÔi”?\vªÑ”©îI^W®jäø¹¿x §e2TŸWÂ{äW̓›26kÞ[¯™ˆý~KéÓ›fóZÎÒ„ƒ4dÇHOÒ~NÒ`Q³<hÿԤϑÛ¸@¼ö·aÐChK¶¨ŒœmöùjQXUð#‰$/¯,µ&ˆ©¢þB±;’+[ÊÝÉ æ ÊMwYg6b´ V ÄX ý•Š´‘ÆëÔ[·†åÒÔxºìw>ëyœA] îK¡ÂÅaωނXB\ é·\Jú=#'ý®GNëAË™¿ßÓ²3ò£ÔR…S‡>0¸qy­(¼s¿±Fýf/SxIb,:,O©m'ϰüBiÖQRd•Zf-ˆ7 [·yƒQá3·Z¦™eﲯB{ÐîøâüÝÛ3Π« hO¾ŽéAæá.Úp â<Æ™ÍAsM¦Û Y5#;-‚JñúcÃÜßß7(FŒìE>jýÚÁŒÄšÏZ%LÙôl)Àd½¸ó¡²lwÉo«;Iü«Ñ×ð¡Š>×8µõñ¯\ªÄÂ…SC!C Ó¥ÁʕǼtè²NÚ'ž ¢^¬Þs„¾¸–Ч'}K JÞBb)m"­³2–6‘·® ŠønBÎúŸ e¼Ýr2Šca¶òý/iäþ_¢¬É;Óºá.M³4$¼Xþ¿‡kîÝ•8ÐWe±©q ½ÒÝ~½«oxš¶gsìzÄXÛÙZl·Ø]…Dæ9ÖAuå½››é“IFaЊÚ4éÀáµf;ÑNt 1#›©BkFþ:Þ£lW®_d´&3¨´iáwy¥±¨4H?$[ºe', ŒMΉÏÜQ ºt,¡ A7bè—Û'\có³¶„åi›X9[#séaÃŽ¼”êbáú`pF(©¦çRÕªó  ãð-Ünià± MmXËs8G“pÔu³o°O°·V¨c¨w( EaÑâ"øŒWÓÄ{;xx$êë£&>Æ0a≼‘׿Ý$U…˜Üˆ"¶!¬¡€»žôàâ¬Ü‘[Eìˆ#[÷&\ê-1)ǵ ± WI±†×ª çÿ¸Ên ~`b²¦tmš! k§S×P¾yà²@sã1¨yªtO‹ ÜムUª1tÙ{ø‹¿tZ{®[Ã]y¶ØœÐC¶€ëñ†Ê†îI:3ð®UªE.ø„{Ê"^KÂqë8áàs]ŸJ(ÍÙ„Ä  ”É%°G(údw+t²—C—˜Þ´ ì`ná!típ-¶ÎZS6<ó+Rn]Áqlãí»²÷2ÂÂ2 Ïa½6ÛÂx éÞøè5;äP´@ÉÏ’¯´„ä yH¾Ù¨Û©®þ<ϳ0¸~ÈRƒ\0çŠðT:ðñÞsWQ!ŠöØjj§)£O2*Ò'›%OÇ ¹‡Üî0òp|®^ ‚êÕ_<(ïl诀ë.7ûƒR°“ÖРBQ‚ýÔL4§Jî/ü'´\{qí à:ò–ÛÅÇr|Ü0DL+GÚ.XÚ“N÷µˆ¥'|"èúÆeû4þÝ)›ÛÒê(fKÏB¹N!f·"Bt˜È>§ÿáêAØ"”Ašç…MésH¼¬‰O¦…ÐO¹Ò£ð§‚5±cXÉks0¬à+4^äá×EIøe~Àž†ò­"ï›Réöd: ù‹Á^ ˜ò_ #pYz:|¥ _Ìw§'"‹“¶7öhšèÇ.î³ÊÒYw}ª]âQ—|”)ŠEQŽ1³‡–ÌÌó6ôµÝ`µjþLóLÙ…-ŽZGÑðoذãx@±iEa Mr—U­ù¨Q´¨ÀG9‹2‘‹éQÄ|Ô.¬Èv˜…À…u¸°åXSXÉ ö.Àté{&Õ’¼(“Ù·ŸtØRüO§ZŠO^¨¥¸›ïÛ ¥Œ{’ÎkI Ñrb»Ž¢ð}¨çI”!kM°›`²,kµŠÛ ꪅ{éqÆ*˜F ¥¼<¡eâÕ÷ÁàšÀ=`†Á))$FEü»Ò^[ I™ü³‹8ä½%&'")ë :ÏÀ$øï¤g¹Û/ÕÆïÃJͲáfæ´ÆÂ{uà&<_S ¬fÝ8K|y5õÊ’=©M0Ÿ<§`á9¥´TµLÈ4  Y¿?ÉúÏ­ ˆT¸D›ßtÍçOá·mq»!y%²¼°SÞ<ÒÊó!¶'\³Ò¶^úú¤)^ß> Xñ«²±Ðävö@aÓb‚ ¯Oµ^“ܸ^ÑŠeþ·–½Ê`W«”Åå¥|k-Ÿ<è"•òÉÑV©˜Ïßí‹ùàÄ|þ~b>¸#1Ÿ¾ügÜôu+砹̲‚µ; RSòsmŒ}}}µ} DŒ·ohx^f¡¤Hô”Qðc{ MVE/Ӊ¨ÞÚäØ^Ìl%Ç&Õ=!ÓlGjíÄóK­É4DO¨¢!Š6þÚ)¼ø»ì™¢ºSÒ§z Ý°’Ø Q–V²C¼­ƒ£­³øó¸¡ÚûË^µvƒiõ&~^?»øßA›o¼jû§,YÈvUÉÖÉ®õþvVÙy<½ËΣãev*¯¬rjɱ±*®†áçáÑ5õrA X\óü#ÇL’xsXж¡…Ëú¦åí²VŒWj'ðJcSÒ£“w”‰j$çÆ–1 ä3à:¼ó;;OJŒM–{}‹†zC”Â!Áá¤PšêÄÔ΂º:†#Ïî£Æ¥p¼ÓF(X±@#óGö¸X£#=‡ŸÆ¯àüƒ;Ú!Ú‹f(U*ÊË+å‰)öްŠðlï¥ü%ÎÚÖÖÊ*Ù63+%9+Ó6ÅRxΗÌP¤.ú,—ãÕ’êÒQl ×[N^¥A@êcA”ôzÀ¿guʘÿ1$]‚×@]xÉ›6ù#)—úÀ;žz uW*[¨«”¸9žU`$®¹j'jÕOÃnºÎ ܇™­ ¢8µ*OÛ-Ò~ƒ“™Œ\2ŽˆàÝ¿$C×¹ý¡·´àåëåãi¸H_×ÙßÃÇ×ù¡MAÁL5%”8b¸ÿ‡Ú™Zõ0¾7…˜4©óÓh™ÏÆGLO v£} ØÑ¹¥{2B#ü<#µc]#}£“*ŽË̳O45°´²\ô+í·y±±Û<-èñ@©¤¨´[¨'tÕS¾Çþ®Ðû^Ì÷‚×…ºÄºZ8[7Å÷§b‰­K\zflrjˆh{Xd(ñOöÏŽ)*r[º'y ›^?ä7Á:øwsámÀ÷ÕªÃt~1·ªƒ%íÛ϶¹FtUqv%*W 7™¹^‘„$Åí/­Ž-Q²0H©w>™ãòŸ~Iž{€Êó<è êëzÀÈ2È/«;ƒÎõbG×5°sÞI±±u,Ïsx¼Õv*ñ4 ÙÆþNþÎÞÞîȹ…8nuŽpÙâ†+[+óT˽i)¡QI¢¤(qBDFDFH¹À§8)ÆÓ2^;v}”gbRâS W¥Ï½ØzÅzÑúUÞÆc˜%fUø…&y¸O2O´˜ì‰ÎÄ”cn$/Ëpn¦`ÕR‹'ÝÿE-šÆÃþžÛ™ ×e‰öÕÅÆ‹wn Bfì7$/ÃÜñ'0®9€À4ò”uó žgkè6ÏQË™ omEZ)Nú¢Æî*€y’ç{´!Æv“/¡6ó!/XHÅ—|à=i–Åy^cHâæYÜd/7GÎß;ŒœW”FÎOh'[_gd¯xH,6%5>;=Y”š&töû<ÞfÔ£v¾6Dêa¤ê"Ø”<&o«›®¨Ñ¾Žè,úâ¹Áþ›7mÞ¼I+Ü3Øù1^^¾îÚ.`)pFÍ *ñW°X3+ãÌñû²ÂµÄ[b6· c}Wj[`¤?rEÞ^®®îä-vÓäGmèné=ßYËÂ[ô:YÍõ%þzâ!ôÀ·=Y°ðv›•ÞKÁþY, [ð†—b4K¾W„Ô_ùf^MaZ¹GRjïLèBR*ºk É»‡{ž ¨Òˆ¥Ð&Ä{ëäÖu2ñüQ‰  E¤*Šð\-ÂChÃ\ëÈ5ˆÁô`¬?ÁžoÕ'îÎýHƒZWäããîéá¸qƒ§%bF-úºƒFÅOª+ô‹`ÀƒÎµÄžá6÷R¹Í~ŸÂ°wb~Ú%¦GÙåôI&¥KPrPžU’1šƒl=í>÷4]2CÆo–®›Ï"Ø_ýyL /~$6ªY3÷V»`3~‹J«Ô«ÁÀW"T6Z‘N™Î#;‘/31u¸Ã§rø-¥F³e“ z!ÿ{x·=3tÇï™Òð^ã8N™¹µ^ü#ïØÅÉ:vƒÚéØÅuªc7ëÙŽ]œJ»w@Géë«ò©'‰D0¸çm‹ÝøYÙ‚šH5Å’›RN0Mï#À²ƒ™ör˜Êéï•,¢vn.=$Ó™:´Y¥hÎ>¼–b+[x8*ÌÒKÏNPGVò7¹fÎÇ:+W;íuk ëFX9zé"­È5Èv3s j9($0“–ñP£Ý¡ÅâÛC5·½¼;?£í×jÃGQ°Y†ÁEÄÞk\̵ý¾ÖðAGg;¯ HKÐG„Í\£Ióð¡¢»(okV¼ôâÃo”íÊ8….kµh0j_loQ6jýŽ¦È§‰. þÇÞQ0l}ñ©aëOfëÆŠÄŒ HðZ:Wë%Ð]~~1žÓ惧9Ëu*ð¿öT¾¾$G“ܽ5—½è;-óaVßsïøÔ°i¦¾‚üø»Ò»—ß;û¨åîe÷N±¿¶prê07]Pœ–°Á;è$þ,÷ Äú õlV*SÐøö<èÀ70`4L߉¦# ›%‹2 LN÷tšåYšð _²ª¯V 9V(»vD3r”O2†ƒ•ªóI²iX p‹æ©N)ñ¦cÉE”Ü‘Œf±§hÉý–`á+Ih­VÜ,U,âí»>C¿ÅÌÔ9Öø¾©àž’Y–3®ß>)™F·á=<(c>\iŸùpïÿóáJ3óÁ ,T^‚Ò¬É ¦IG–Ö6™ŒyvÌD±Ôœ?‹”H9€º"-ºÍ’ðÏÏ«ƒ§—½¥86;ý)Þ\§ô ~ÿìG>†C;½ÝèŽÜ2teÿ‡‚¤’\aêÅäîn=-w×®ÜÞ±gÇÎÉÇÚ°JÖºP_j3ë[­šðj¸¥î^Œ\ ï7x)äÚ²ã«oÚ†™ø!³¤^í¬ Ð«¼›=q4‡°ÆÊ©‚Ö"£TûÇ<·í>e „H8™D M…³’)}c´±ü¡ê¾ïj×2~ªÀ‹Sã?x áÙÜÓ»@ȯùÛuøð„ P‹ ”k4~LÙaS4*|Tv|VraZÂNòe(rã‡` Šœ4T+è³Ñ¦óLyòB`—ÛF[R˜Y“éK^뤾d}gô%¯)Õ—¬q}IphP‰Ã$Ÿ&j8ÉPÿëy¥™4±iºËYG)Š2ÍÇ´“­E ÿ¾¢¯ÙÌñ/8þ[4¢Úª™¦(yÔS¦»5 “¿J=ébñµBü˜*ŒRÕ>_U{K¥ªö M’±Çå[BÎɶ„ÈôÐ a¥L„Œ#µõ¿¯ª"7gŸÂ5!y¶´¯BíÙ–r€|ý˜–z RZäËëw5#•‡£¬òX)­<Ì…Ê#¬¹òj§çõU}Öb Drìg}~ú Ô´[íôÙEªæÁRï×½ÛoãW«*ÿÖZYö„Ði°sr+p!VðSŒ/1”Žˆ EF` 5Eú±òž cI¼Ûà¸g>ÃÞùÃÎv+ñnde´.È.É=å ¨ät”ˆ|ñG?¹Ž·uÒÆÃ\<]êâŸtdÅ4±â,ªÙ‹…Ú½ˆÿ(G ‚/¨Ã‚ ŽßbÝÓ®^šIzÛ¿yHbãûÅG/Uе8¹Iz0åVJì>ÄüBMÇó5vf-Ñ™°ÌN*8HB¦onõZ¨½)ŒÍFÂeŒÐÍ1A¸6Öq·ÐWÒÚÁ€ðßAÁ#ð¿Ïà)ÙéùÕâäÙ©œ§wvBrU`8%4¼•è(wã$ð.IØ`(LFÉ0{å)Ô„ð[&@OâW`èÝáÛSr3˜v¥°Ø ÅÍÄÊÀ^ß›/tð`zB˜ÎQá@ƒwhãOÂnq='N¶”Bñ×8¼­8çÉVâœhaZÅøk8.Æ5/ CñˆV°…³˜.v»ÙÖÇ•ô\=°²wT‚iÇ4 gÅ>¤ÏõVIH´m&àxeÀ‚œjU½ÚN)ˆéŒªªþÔ±::Ûj µÜó—-TU߿עª:>WÆ`«ÞgßoR†?>ïr}ìƒ^,GÜ8öÏÇÎßëN¬¾ö]:Ã>>•›sôXoTå¸Ã$g]Öª8}d†Œ¼\¼ü=‘òˆôO!‘OqbĤçäî Îᆋtüð;øѲåû'h¥|;dÁ÷ºóFÍÈ>3Qäè¸Üo+ÿã¯eøMË»àUå2Yùƒ’×*+‚XNki! p¥»¬ æ)ƒTȶü;kï`„Y„¿¶´prUwÞõ¾rÁD8L]ýR›½¨R‚oÛwªÞ/'÷(æ‡%º =¡}¡qsFó í£¥-ÂÒî f¢ä-nœ&löJ[`æáâädïÅÕ™F[„[¥t&•8¾•+; hžr™\«ÎwSó½ 0¨pxkWÀ?Nn R‡¼¸’ÐÜÔ¬n‘š²Y¦™c =K(ô}šA¹÷ꚡĨ· ‡KűĤíœL76™t¦{ª`Òž2é¦%FĦ_ã£FÐ’›´¬3D®ÿ:{C8ÖËo ¹-VrðÕ4ƨÖþÀS‹AôTÞŠ€“\£f‡³É|öËIm²eóÂóV·àÁ©¸öeJ;º0оהn½WFè”/ób5XBl ò,g ËÖc‘ »Iì‰g€§¿ç@¥ùDøÆlŠAZ(>2¬ ˜¼à¥.tq@˜ç®~ðfM<]щF·'æ2h0¼©‹Ü4ñž"t‘·4u‘y¶‹|âe!†VŸéÖàŒ®ðû Õ²€â¿J= ¾âBñWFy€åñërœÊ´œvzU jt>áжÝÛÊ+R ½¨ÜvûÊí+ãf¡s†ãGZ»ášä»Bá+ *ÐØÅxbpo*¤>(¼ð‚>Zèšõ‰yÕóª¿ÏŒ¡qVóÌ[h!´¨&'Í-Õ+ÕÛmY餯‰{Q‹]Ú¦ÝL‹|ä ‰×4öN>Ô”zë‰Yn& &øµeßP8¨j¥ï) »áòŸj•üî2PgJÿ"Üýòo³F. Â4n¡¢¿ˆÓß®[¡sÁü:ºŠ.e®¼t¨ì/é0þü|ˆçã!øýaøÛ´ù\¼‘sÄÿZ¸hêÖî°ƒž²·’³Úæ.¸³’S•EÀk¼¤ŒÖ"°vHÖ4¹3¸´|”Jøê¦ÉÙZ:èÆÈÜ•h%ZµÑÚ‚©og KÁwþEÇ‘zh[`A`‰U ~S—ØJÔ`‰NÒ^yU`œ7²Až~î^.øSl¯‰ÂXß8©eÆDänÞ‚¶¢È Yc±< Æõ>þzáEš¸‹tÁoÓh¸§çbèo6»F¡ =ô¤a غ™ž\¹E+â@)l QרiY¨ ÈsžŸÇåþ ‘£Mé‚ÿGÇK ­?s˜fÏLJ…Dkwãû‘Û9Ò|3½ØCð?ÁUPltGkI³ îOš=Բрä >ߨjÑG?Ò¸ÖícyÿŸT¥¨ƒªtéó.a³jQ¬¦rÏ—­ ™ó@«ªÔ÷¸õȋĀ^ìã×X~€8öžŠ•N¤\‹È}.®Ö ¿\³ mšT·”E¬íõj0£¾ž‡¡ çÄ»åÏþžŸ5ö{UAîÙàß{>J TUÛîÄÐØ&tâÇH%Î2¶ ýtáÉü —wÉZC?æÆbjŠþÇh0šRª{Ý¢ÆcϦ_~ åvÏ©tuùrÉ÷9ߢÑhœõì¥ãæ¬úán ^ïàa> ÷o·§´sa#ÿªÙ{=@Û ’±,˜/Ãr ßE†|ø!ÐÀÉ`ó|°GC4pJö‚©$˜¢»= DÂA:|Ó¬©$=I¯'è&Ðì5ùƒûûûR*ù¦v5–^깺”Õ™ ý~RƒG·Õ³!sÅÿÂ]ž‘êªðEëDS-ÖVAªKgɤO~kle2aÓ󛬃Iªb%™Dã®zA'ã(¹å£¯W¥±?**Fófq³’zµÊ?îßW'Yè.·ÞŽ|a¢]ff2ùB;Yˆ´±!K¶KÏL%³!ÃùøøË–Ck{PÅÓ=ë;؆øçS›pwé„yZÁAÍôªWi7/AÓosöï_,u ×߯%¬%kµ•,{9ÐÏ»&MƒM’mJcžcSÁ+I0pß ]šQ ,”ѱ`ÇA?!ˆÊÇî;bõPG žâMó]é»Â"KQŠþ4hLþÆjÙFeôßÇÈê oûÙ;ûyº"Ai ˲Yk`»TZÁ&?«5Ð_ÖÃÆÉåK!»Š; œH$Ê^"ciÅm‚Á-’Íj[ì Fùdë Ä-Ç%ù{fÏwá`>Ý©#Œ|Ü[BL‚S¬UŠQÇ|åç(N3×è,·!ID‹è7²ÔÿüÜòå²aALì¶# ¢·¤ù"Ã`j'ðcþR}8\ø0àòËís˜~ÿÄaºÜÌa›`ÇSø\+Ên¦©c¦©×…#eIÿº†ÃŸ€™*úæ–Û ^’¾¹ËCZ*yczB|L‹ÕBœi©È¶£!»³%d]lt¦Ø…ì‹‚òýS€0Y"×ó¤R¼¢:¶ CaAá Ö£á-†yð6Í>z¦Sôk{FÇÞÌ®¢w[‚‰·êÃkÃI¼­í$Eë~g(ZµJ)Z÷_œ¢Ëÿ¢:Æ KþS%ŽòZ*‘Í^-’~¢+4>×Äå?{(à=¾Œãϵ¡°zmlžœÛ)i §ZŒõøG”BZZ;ËèW·ùû¥,n•‚P;I¡¼ÉyGB?º"ùŽ„¡÷чNe&èœo|ŸzAÖíUØ<­6Óÿ¾ùЛ€:or‹ ¯eA] /âØÇ AÎŸÊØ±j/ÛíIqk%ÀÂÛy”ÈÉzÀ²‡ê*}¨ûUéEOkîE_TP^àùf–Nkœ/ÀR´Ò=hI išk":ŠÄù™HM÷K¡©[»Ð4\€¦¹xõÓv’"ØÉjÁN"ävÒÜÝîÆ‡¸J ªðF KtÈÝ]ߣ޼pÝ¿¾†wI)9¬J¸/‘Îî M½5ÅCr?…Ñ$Ë->Ì-ø×äB([ïq0ª¸âjoè™=˜1\ççn¦íìíàE2õ&äɰÿé¬áD|\O#…"ß=J+ëûœ<²ð;¬1Öq†h‘ñ~òñ ¿›7«´\(ú¾!Y1Iú×. ±®Ì?z/"go,Õþ“¨ãk!JZ Èv’jÒkÃcód´R)¬y™9?§¥A&”¥Ý•+šã:Eʾ¯±YAÃÛr¨ açÕáWÎdDçhûIUBnïÜwA«`µSûÇöÍ®3úÍŸ‘#Ï£’Ty/ò± xÞ“'ë3î[6¡eÌ,#Øz.Âïc•šGKfDSͨӶåèc*1åiÒ£U´ÏËžGû¼U[Ë …+¯EÞ÷ÏÀ'iLæ9Aï¼éñz±Ûº€™D±§<‡æ=ÞUHtCö§.™¥ù5½ÏΨT¸±:ºKë•Õ?u¹•’¿¯Ï®ÂÕ‹–ë4í¬>åQ½Kà:.Ð/>­+rõÒ`·wIYU8òÙ”ˆ{¦Kp81¹>*rÒšára½ü å÷½~ØŒóKTÄpð?Ï"X%, wK®¬ï±•ÜñéÆð+0%CXžÛîÊð«]šv†U¼3ü^›7pµËÍèì‚}v•¶Ú~ÅC¶6|£¡h$Yqœ;¡ Îɱg½{.®¿weAÞv?ïüüóŰ #¬ÏÚ»ð;]öWÚ˜È/N„E‰TöÛuïd‡¿ûn]ü»ïuéòžs_ endstream endobj 60 0 obj 33920 endobj 48 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./constraints.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 61 0 R /BBox [0 0 320 131] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R4 62 0 R >>/Font << /R10 63 0 R>> >> /Length 64 0 R /Filter /FlateDecode >> stream xœÝVÍrÔ0 ¾û)|ƒvf…%[þ9Òn\ ™áJ,ÌÂ×GNb;l’--{êì!ký}Ÿ,ÉöQ@mòoúîê¨^½súó/…ú‹âà!’ÆèÀ:«UÀŒµšÁÙ¨‘x&Í$‘(Õõ^¹!b“8oG)B]Oâ1Iyô˜"Cñp£¬÷ª°¨#Éà$‰½º»V9býû™¦x¯Þ—D¼ ¶Ì¼ñÀkf0VÐiÙòš…tq¯ë)~KËû48Lþ>9qh;WÖ-«j1ýOøu{v9åB%p.æ^¤dÁzÖ耂–þÊ}ÅÀ¬~ÛÖ¸Å8zÞ²ìEÀìB•ôb_¬œ¶3«"ÉVhƒ—$ÿ! ùh€ië$=çGèb4²[5!6Òø/&g¡nå2-!œ¦^Y2³?ƒª—ݓ͑-aí%«œ˜ ÍÉUIß$ì!ø˜%ÅëœÄ²‘iªµêXÿõþ>+Êph–ž¨MZv®…SÌÖk l/éV*j— zÿ¨Z3ÒZa†JŒV‚Ï"VIE­^g%r²¡Ÿ±?ÅÚ¨I;ÌkQúo­+ l/é®×âRAW‹RKô,§‹ŸÍE‘´¹ cܬΦ6*7M¿z`(Ú=[“j9sö[À ²ÉêLüģD-Ð"I-Nçc5æ§@ÌC+C=²WʰÂ~xAv£ Š™ËpÔ8<^ËgÐ7<_e‰R’ÖîîÔø²ÍwAÈÏ4¹L“\<ÝA½¼éì¿iºê¾*”"X¹mî>…ÍŠ]ш?çû¸éñ¼#™$½´\´>Ú0èw»Aå,SÔ»¹îõ¯¨º·"¡«êM§oUþýXÑM€ endstream endobj 61 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 62 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 63 0 obj << /Subtype /Type1 /BaseFont /Times-Roman /Type /Font /Name /R10 /FontDescriptor 65 0 R /FirstChar 32 /LastChar 255 /Widths [ 250 333 408 500 500 833 778 333 333 333 500 564 250 564 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 250 333 333 333 333 333 333 333 333 333 333 333 333 333 250 250 250 278 250 250 250 250 250 250 250 722 889 250 250 250 250 250 250 250 333 500 500 500 500 200 500 333 760 276 500 564 333 760 333 400 564 300 300 333 500 453 250 333 300 310 500 750 750 750 444 722 722 722 722 722 722 889 667 611 611 611 611 333 333 333 333 722 722 722 722 722 722 722 564 722 722 722 722 722 722 556 500 444 444 444 444 444 444 667 444 444 444 444 444 278 278 278 278 500 500 500 500 500 500 500 564 500 500 500 500 500 500 500 500] /Encoding 66 0 R >> endobj 64 0 obj 670 endobj 65 0 obj << /Type /FontDescriptor /FontName /Times-Roman /FontBBox [ -168 -281 1031 924] /Flags 34 /Ascent 924 /CapHeight 676 /Descent -281 /ItalicAngle 0 /StemV 111 /MissingWidth 250 /XHeight 461 /FontFile3 67 0 R >> endobj 66 0 obj << /Type /Encoding /Differences [ 45/minus] >> endobj 67 0 obj << /Subtype /Type1C /Filter /FlateDecode /Length 68 0 R >> stream xœ¬{XW×ÿ™YvgÀÄ$’ É®ÑÄ^EÁ^ÀŠP‘.eé,Ë.°t¸ôÎKï½w öÞkbPÓL4Å´»dÈûþgYI|ßä{žÿ÷<ŸÌìÌÜ{ιçüN»³K€‚xÃÒÝËÙÁ^‘—ƒ·úz¾j*¡zŸT}ÀaV1¿ünÀýÌ‹8o–|„àʤ÷uW½óþÄo½?qÅÛ„% ´Â%xOà+ø~…Q‚KL$¦Ó‰„±’XOl&v„5aO¸¾„˜‰D&‘O”õDÑOœ .wˆOˆ/ˆçÄ/Ä$|ƒä“SÉÈär¹ŽÜFZIgÒ›”Qd™Ad#ÙNö‘§ÈËäò3òkògr”ÃåLà¼Ërfs–r–sÖq¶s,9vŽˆÈ ãÄq28œ N§•ÓÇ9͹¹Ëæ<ã¼äü¡ÅÓÒÑÒÕz_kºÖ<­¥Z«µ¶iYhÔrÖòÑ ÕŠÖJ×Rh•hÕjµiõkÖº¤u[ë‘ÖçZ/´~Õår¹¹“¹Ó¸s¸†Ü•\Sî6®ךkËuâzpƒ¸áÜxn:WÁ-ç6p{¸'¹—¸7¸¹_qàþÊýâ½ÍÓçMçÍä-âñVñÌx»xxŽ%¤fR†Ô2jµ™ÚKÙSŽ”;åCS2*ŠJ£ò)%UAµPÔ)ê*u›¦¾¢^P*êwh=‰Ö§…ôzmD¯£7Ñ;hKÚ–>B»Ó>t0FÇÐIt&­ K麙î¢éÓô%ú&ý€~LMOÿJjs´u´ßÑÖÓjÏÔ^ ½T{¥öí­Ú»µ÷kÒvÖöÔö×–h˵ãµSµs´‹´+´ëµÛ´{µOhŸÓ¾ª}GûSíϵ¿Õ~©­Òþ·OçMwu¦êL×™£c ³\gŽ™Ž¹Ž…ŽŽƒŽ›ŽH'HG¦­ƒt2tòuJtªušt:utNé\Ô¹¡s_gXç+ït~Ña&´'¼=aòÁ„'ÌŸ°dŠ ë'lÙ(ò ñswu ˜6Ûjïþ9óæÍÿëÎb“iGBÆŸL3uöwwõž6“ýäì)òñröX9m#;ÚÓÓÝqš«gˆ›ÿ4''g'õ´}žÎÓ6¹{ºûøˆ‚¦ÍÞ8gš¡ÁâìÁpå´^Î~¢ùÓܽ]ܽÝB¦9x;MÛååìê0ÍËÁÉYMÀÔË=À/dÚRwï?gït÷:è?mÌ1§í™L3Ÿ¶×Ù5ÐÓÁïïOÌýD¦ÎžÞ¢gß@OO‘ÄÙÛÕÙÏÁÉÝ‘½rö÷»íèååà.òvõsvpö»9.—ƒ_€»ƒ§“»‹‹¿£³»T‡ŽÎŽcÇŽ~"oDZãæ#~¬bÖ]ÇŽ[DŽŽ¬ž,^Í]ïåàÈupqw_l``düêÃÒå¯>,Y¶wŒî«KC#͇ÅK¶Š\EÞί˜Zù¹{»¾º2^lá(b¡áe6&Í«GË ÖÿÇD#“q–ã¼—,ßûúÃe;_“`±ÁÒqŽK¬Ü=Æ%36´<âàgöçÇÙ-~õa™Á8Ÿq†KŒ÷¾&ä+ò&KÆÙ.ßùš‹ ŒÆÙŽó7^b96Àì?4¸Üpœß8c£qÆKÆïü;cƒe¯ž.^¾õõu™íwt÷s ôrñt³^jùºzÿTûò%ÿ6vÙ¸@Fã-ÈÐd×*Æ%·ùbãm#c2.ž±‘ÕØ$³ÿ°âò¥ÿ[óF㌗Ž3^b0ÎiÜÔ‹M¶ÿM&Ë·°–g7Îw¹‘éë¨0·ÓÒq6Kïr dUáèåéø§ZÿTúøªMŒ­ÿZÝ–¿ëv¹ÕßÉ,_fÊÙaürÙ8ŒÆÑ°t\ž%†»^ÄâÅj{±ùëžd2.˜±±Õ"hÜ ËÆ—n4Îmé+nÆKÇ-yÅvñÒñ1††æÿ[›1®[·³3±ÒXnóß–¾|Ü,ËÆE0çó'ù%ã 6\bþ ^ló' ¶¾†-ƒÍ7ôr‹×5²lœ½Ñ8û¿–ùçê–š«¼âfè ‰jÿ¡?“Å›ÿŠÆ-Öìu¹–™Hþìú×g Eÿ¿î8þ9Ì{LfÏ1%»¾¶(6’û¿véíà#òðù¸±cÿºíú'@u¼tÖØâõyc„=ÙaîšgcÑ P#µF.ïׯ»±¾"{èö—´Á} |Íì`?Î_× cê7vý7ü—-^bdèÉ.Öß}L”€×¸û½öY¤¡uô/Þîcr…¼&Œ†«óØý×Wí~ÔyŒ¹ÓØÑƒM|ÎÞžlvwt×P•ŒIíü§öœÆÜÑ_“ùþbà9v#ÐÛM'¦š“™æ´iìdb¨9-Ñœ–Ž 4'Í#͕ѫéÇN6,;­ß 9iFn2;™inšinšjHoÔðÛ°\3ACl½†Ø&ÍÍMÍ3Í3S#Ítœ4ÖkDZ?Fsñ2 i3ÍM“WBhnšjäܨbƒ†Ñz&Ö/ÑL×6ÓÜ4Ó\™j„ب9mX¯™ QÝú1bKÖ¿’ZsÓLÃÁTÃ}£æ´A£‰ M¬W/eÓ²W²˜hhnÒ<3Ó,ÓTssã«y…lÐhbý2ÍtÍHÍMšgfšešjnn|5O£ M¬_®™®i¢²é•ê4Ë4ÕÜ4Õˆ´A£ …¬7ÖL׌4ÑÞôJušÕš¼Zƒæ™é+ hÔ³A³è1±T^MÐpؤyf¦Ñ§É«¥hž™jÜøJ$ ‡õ-™hHoz¥WæÐ<3Õ<3]ÙæëC¼ìØ 9YïÜèãl³ËÔ×e·™ŸëžMþn{7¸[l úýú)æÉéÏÏ<;û͹oÏ?¿øòÒ¯WTWG®,€é`»ÀL`!Ì[Ø f°ÁG°6ÁJ0€a/l†Å0,` Â,°„­°fƒlƒ¥0öÁv0‚¹°Ìã°6Àr˜Ö°6‚1ø+„`Pàn`ÐÀÞm„£`Ó€:p>„÷`ƒ'8À*˜ o€¼à¬=xHop„5 ¬…)ðh±Mv(ø€3¬ƒ©ð6pA ¾àëá}xx ƒ,H€0ȆDrH†HH(H…hHƒH‡XÈ€8È„x¨ƒPÇØÖ=Šá.ÛÀ÷C'ä°Mü-8ÐJø nÃ8íPU0 wà B”C <†j¸5Ð M Oá\†ÓÐõP eð \…“Ð P ŸÃ}¸ CÐ-Pàœ4B| ×á ôA3ÔÂCx_‰gáœ#‘D$)D*‘F¤D&‘Ed9D.‘Gä ¢€($Š%QL”¥DQNT•DQMÔµDQO4DÑL´­DÑNtDÑMô½DÑO ƒÄ1â8q‚8I §ˆÓÄâ,qŽ8O\ .—ˆËÄâ*q¸NÜ n·ˆÛÄâ.q¸O< ŸŸˆÏˆaâ1ñ„xJ|N|A|I|E|M<#¾!¾%ž/ˆïˆï‰ˆ‰—ÄOÄÏÄ/įÄo&TÄñ;Á£ÄÄ¿ˆ“@$IrH-’KòHФImR‡œ@¾A¾IN$ß"ß&ß!'‘ºä»$Ÿ|œLê‘úär*ù>ù) …ä4òCr:9ƒüˆü˜œIÎ"g“sȹ乀\H." ÈŤ!¹„\J‘ËÈå¤1iB® W’«ÈÕär-¹Ž\On 7’¦¤¹‰ÜLn!·’ÛÈí¤9¹ƒÜIî"w“{Ƚ¤iIZ‘ûÈýäÒš´!mɃ¤yˆ´'“äÒ‘t"IÒ•t#ÝÉ£¤éIz‘Þ¤ˆô!}I?ÒŸ É 2˜“!¤„ %¥¤Œ #ÃÉRNF’Qd4CÆ’qd<™@&’ˆL"“É2•L#ÓÉ 2“Ì"³É2—Ì#óIY@’E¤’,&KÈR²Œ,'+ÈJ²Š¬&kÈZ²Ž¬'ÈF²‰l&[ÈV²l';ÈN²‹ì&{È^²ì'ÈAòyœxGäàׂ0„waZ|¨ þ Ó­az ÌX3öÃŒ³0ã9|ëÁÇßÀLf.„™ö0³f¾€YÑ0«f†Ù›aö~˜ sÒaN Ì sÍaî̽ ó6À<3˜× ówÀ| hX°X‚oaáX8 ‹‚Á``ý°¸¡=zƒa*,À’aXú!,퀥§Áh!£¯Àèß°ì,û–/‡å¾`¼ŒcÁø$ÿ LvI¬ `…Vœ€•»aåXå«ù°:V߆5ó`Í3XëæÁ:X÷Öo \Ø €f°ñ8˜nÓ20;›¦Â¦“°ù0lö…ͿÖ£°u›E`Û)Øî ÛÁ|.˜×Ã쨃$쌀ù°kìúvŸ„=»`OìeSÒK°8 7ÁÒ,ŸÕ*°ê«`_ ì§a4xÈÁz:Xïën°Y 6·ÀÖlƒƒ[áà]°ÛvOáP!Ø‚}ž‡oƒƒ8<ƒ#iàh ŽßÓNpò§jpº N/ÁYœÀ9\vƒË]p­·5àÖîÁ½ŽúÁQèûúþ€~ô¿ ýÝ0À‡t<ƒwàØ8vŽ[Á s8¡„Õprœ<CïÁP8 ÅÃP:œš§Á©Q8ÝgfÙ‡pÖζÁ9]8— ç§Âù›pþ!\Xúáâv¸8 —ÖÀ¥,¸¼ .o‚Ë÷áŠ%\ù ®zÀµ`¸†áz ܘ 7uàfÜü nþ·~ƒÛ"¸}îXÃÝÍpW÷îÁýáþ¸ÿˆàÁ<4…‡×à“ýðéø´>­„GVðè1<ú>s‚ϾƒaoþÁã?àI çYðB^tÀwÎðý[ð}1ü ?ˆáÇ™ðãMxy^þ?ÕÃÏóà—ðËø¥~Ý¿ž‚ßæÂog‡þ¨ `¤~w„߇€ÙL0O`T̆?dð/Oø÷"ø· üÛþý ±Š`벉àØZ“ ­oqÊDFJq›êG大/'ëú¨nà |‰³,@*qs² 1FôÞ†°ô&¡Ê‹B7óó¦ÑJ¦IL݉ɓ!3zt7¥Û‚ÌdÒ ±´˜b§7ñúñîĤÄÖª‹‰‘}Jþ¡y¶Û&YuY/˜Ç8†ogf†‡Ú&英’² ΫÎMÉOËöbm.Vð:æåúdø"™>ò“DíK¤Å8“ ÃÙ|LájL3Õ܉ªxÆû¥ª_A¨Dª}|fª”W_—-œËÔ0NÉËC9ú¨H‘Ñ•L+˜#2ª2®0"S‚yL¢^J”«ںÀIõ‘4À\â%ó ËP ŠL–§‰3$©Dû­÷ë¼Ú tRˆªæçÕçd—§è³ü‘B5eˆ¸4ŒM‡9ªéüô”ì¤DWgIm„L…öFÈÄÑR즠¤JsQ3©þžÒÜD”{n2Î2“X«9)(›´ð\4@ãêûSëí<%Û7 RÑÉ6!î–¡,ÇÝò[*n îsTÓ±ßÖÌÕ/¢ ¶‚©Ÿ†n~Úœá’-LÌ…” ýÊReÙ)³¾å6‚]­íE›Ñ*šyïáBÌéi/¨kT•+«jÏÒc¦—ŒÊIº%#æ#sùL¤˜w2¡  iDˆ·+Ãezgw>öïB¥ú¨X‘ÙT¤§d†ÄÔåø"éwŒÌR=f1ceøalÜ8Ö¬2%µ'5$•!…¢¢¥OÀ³õ¾e¦5ع³×=ŒBBånIŠH W›xPIíK—f>ÃXâ*=<o»ü 8÷RªþÄßßDÊ-%ñ¢[Uô’3²Luƒ?jM!ãð°U,êpƒ’Ú&ËG7iÕn£yywÒYŒÚRŒïh2ªJæ26bޣؼp´K¡dbãv^¸’Z“*)C?ÒªYNíãæó&Ž,bµÑ‚;Ûqn‹X9éùKûr¦&ë6²ªSñ¹h½÷h}X˜q¼õÎø)ïºYÒÒØ\_܃úQwH»gW•Oî¶‚ãy%Ùå%´nSE©¢¥c Ö2<ì˜0_ð_ ÞØf)­ë|Ú¿ÊÑ| ² rr ð9µÑ6²¬z!îÐbÁ »¬$#K!èæaê¼­áê}ö „,P­jJ-¡Z†§òCRåÖ1¡a}™Ä=ò¢—ªæpÌT<£Ã-âeÝV(Î! xŒrtWªz“bñ+¯VVèKœÿ%§¨ó™÷ æ1fê³™xžôüW,À“}˼+ ñ‡ÏÎc>`¸‡6¯sr)oŠŽ‡Þ`þmß…›5­ãª),­'8x˜ƒ_ÈùxÖqn’˜€âí•Ó+T]¢b“m%nòíýP*3)e"º%K~DÈPÎõ>9ެäÔBkÓ™wï.Åä©Öâ¾Fáv Z(::\ì'÷F´±å'ø-̸sïÄÀÁ}Â1øªÁ{YhX¨á+óŽ'F!$ ”23˜ =f6ö‹(ˆ)‹ùYõÉ©(å$±8iSý ù²˜ñdÆRÙ@¡¥r¹A ³JÊ0Y–‹îÑx…gã óŸW–c9âQ"WsÄBrI÷dÝ•*‚¯*£Ð¹ìe^~v~jk*K;\LµÆçÇ)"‹eY®hÍ|IòUb.³VÌëBùQíéÑ”®øŸ ù>ÅRÝÉ‚’…¤¬[e\‚MÚ „iΰ/qƒx1A¡áÁ(IS¤é6Ö™‘ 2öÜai¶Ãy!bH´°ÖèØÞsÛ¾vþa.ú¾÷ü§tHÑzÓ­^ÆHßYnµðüa·>ÃÚøãÓǃÛõ ‘r­Ž±^…’"¼§^5ñܤÃ8ðÉd]i–ê~VRÊBtc†ü pÔÒ@û#"vÇÐJWŠc‹xë’ÂrÐE/¦šŽ–Ë;Yìé|µðÇøm³/æZØûYÙ ïS1ÉVAna–}óc· Þàäáó/œ>g§Zã÷ñ4l÷½÷cËsBóë˛籢ՋzCš=NÚÔ-@Ì´;lSðþH?‰_@€›Û¡}È*r«Ûß{ôGÖVèeõ‹Î>º­k t½ ß-ªÇêhõùK“u Æm [;–•=q Óè—† §.Ÿmù½@_z=°Ú|!š™­[È”‰y£³"ÙÈö²¯ëY—“Ùñär¨{¿àU‡b1:G–¯8xÀ{OøRD;†³áI¼÷¼jRµñ$ÖùC‡'ë~ŠGU«ùº/ªì¼²œ¦2ïÌc´X%LºbøÍ™¡Êþn!ÃN‹©i,-Áù”enT&ê¤u?U}Am`>ã#ÿ¸0yT øh¸'òD>ÙÁÅ5A—ÑZ÷Ö9qçñ…º£[ñ6ûΪ'>cÃÍuþ Ó¼3ʺ֒|¹w‘ À7W^ˆè2eQY³}å®û|ì|…¾öQ®‰+iGÌUÚ¾Qxó”IJDºKã«x"O°…Ki;Tësø%Uëó>„»ù• …‰•è:™ÝU~®¾ù<º‚:e­>5ŽÝK«°Zü”)óîDeËÑFzÔŒBË£äk£5ùiUŠ4ݦUAZ¬f22ªðÔ ?š»Ûš¡‚eIÉMÖ‚»:îc£V±¦“¨¾Á«ù"ž5‡ý™ˆöáÙ ‡´èŒØ”„THc„R",Ϙ.ÃÒ^ô‘8i„,L"Š:È‚x!öãU§§W ðTëþ¥ÒÂÅtO·+ÏàŽV³¢þYÂýUÀIT-¼1íâ¾#ns2TSøù)YI¹ˆ®È µ2)²ŽŽÞΪ.ZAmN‘(ÐiRõ]ƒUéY±òA,'&ÑåŠÂꆠbwïSá×lôßè¶[¬?VºÆ+ðѶ´êIè†÷gØì~UÕd]FuT¥Ço[C³-8#0SÏ'Û'Í—U-^¸~£y•ó•£BqHˆ$&ö¨wX0 FA¹áÁ´.cºßç¨Ë”}쿽û ²ó¸ µ®°µ¢ ;×§0üt½}É~Y¨74Uef%f$¦ eB^b:jA튺ª†jED5±e²zš‰Âoˆþ$fÑ_5„¹îYëÄp—ì©é.ËÈëêâ4üŒ¶º©·®RâU (r˵CN´…·›Ý.‡ËϬ?2fE#탑=Ì>ÃKYÙ½â—kyÍ…½íw®´~5tí˜÷ñGlœÐD û9µ&g· Úêƒoú÷Yê][…ß<Œ— jÙT•Îc¾9ÃïB½â&Ï“¶õóÃE³½?v´s9²?ÀÙ"ûB×ú}}? ¬ž×|×ÑÛÑÝWr†c >ÿØúEåCù,h¨ð•!Ò•,\>VÃ%M —÷_‡Ë‹ÿ† ‹l㈱ȢFöšT¶òºEcoü1õ)*”æ®`ÙéËKCKT‹‹ÃJ'¡ Øä‘ð5|•¯;?¿Ïà%$DF'&Æ!ý$OŽHcPf``ªïÔU{l´¨w|l+-,O­{kêT2ŽdÎs±oÔVõ„¯{¿:'³¿sæðë W±ÀÎ×-f^‚:YÈÚñÅ"Ì)ÁsÛÇ:ígÄÿÆg2Cx]ñ¹ñ¹QŠÈôt˜f–Q;}62ËgaÞùMõWÝ‚î U×Ð)4 ns­øTì¤ËxQؕȋ‡È‚…¦„dRØebu-½f1‡çT­;µ[xuÓsgL¢'¿ÓÔÞDc{ ÍÍ;“FOÄulùøF=qš5I&Ìg²±<;1%F-w¶›ÉÕûgÅäÇç£,¶£ÉÉhJ¡Ì)Õš!ïý¿Á´ë%ǤD§D¥‡¤G¥£t”‘§hÁïâ;z5×Ò3jShM04É'î²Y~„ÃgƒÕ Ýf+ ¢Ðþøøê,¦ ‚““Ùú¥I›Sx³+%.9>9>%^?SžƒbéÈȘpXн<ûO¥Ã1fÞ§WSuóÊ…ÞšL}Ej~2[e*˜Ã2^[bN’¡¨H™,œí('ꩌ©¸dçpï¨=¡ú^Qcµt·jDI|ùÿÑÍQaU.½Ì-x”Í*G*¦Ä¢Y4ÃöZ›£C½|l·{®C¦È¦Ü§/¤>ºEÝu܃ë'j¸6‹©‡1,\7ÐÌeŠYÿ© ^ƒ‰»M×ÚåY½è¾:YÉZUÿfûǬêTƒ|t;'çSõB»˜z¤™;êH ò•ÅdVD äM¡lMâàãÐáuÃù[øu:f­k¬µ¤Tctv4’ iŒ„ÏbÆOo9ô"„òôQiNF_k+{)Õ—Ql•!Χ‡0¶z³q~\vB6ÊÖG%¹™©ì¨-Rª,!S^zOe¾ÕËõÊ”¥³é&3/·’m§¢õ¾b"ò]RcÒ‘~JË*hg[öïõŠ:SÒŠYš0¨ŽJ־鼜¤Ü$¶é®Ï–±M›/…¬da汬…#”yjx6¢Uß°¶Ø/q–o’Œí7Qé•OBŸoúÏøt²î3ÕÎ+|‰,ò¦’Ù¡nú¢$B¡Ñ>á^̬QŽ3uôvTRè#e~¶ºéÏIÊW7ýJ15À6ý]†8q´WOÁÃ~ª3 srúSôÿÜPøò%Gµxd2?71¥¢Ú„Ü(¶à ð²<À˜1FzØú)-j\æ†gè;T“’Z­ÞÓ»Mã]TeɯÓï­;iŠüõ‘L-JŒEhlß댒ڟ$Ë6xÁÈpŠÞ‹w_»\y-M_É((—+\÷¶Sð ÷~CYU[PŸ¤¯` ¥TmBv ëXáá~ž±1á!aÁ²b=QgH#ÊCùyµI,š¥YT-*«;ø ó‘ÃcL¼ŽÈ£ÆëKñÇ Jž–—ž¡È+>Äo}ÅLKIŽA1ú($:vP²’|pœ¸1ŒÍÕÿ9JÕt~^J¦zÓ³2+ÔVȤ«1%µHd1å§ ö%KsP›(”œ™‘QQÖUØ„èîR7¶Òòb»Àˆˆ½êÜ  ö&I ѧQµ] E½ˆ>]äc,d\)´7*jO4;H¤ |“½’ÊP›>>Ba§sköðÝc%9í^e…ì‘HflNߥ¢“ˆÝ#,¥ê6C^¯šp‘¸2Œƒ?çà#«ù±ÉRŸ¨ƒaúÞêÒ-=)e º=+ÒA8Z@y>>ú Ö{‰I<¿µö›Y;÷¸Ú öiµõ50¸š™Èpl·›ì?TV!˜ø»©{¿«±g#æ‹e±çƒ‚b|å"ææk=F“Yš˜¢Y£dszyYöI5öŠÅÔéÄìÈÆ• &zÓ˜&æ#ÕÑEqc;S¥ùÇRØ! bêX¬"¤e¶mTÃs¡j%^:º’«à=ÆùÙÕ˜À}Êã9Y'²Ùü’‚ßÁù^~¾žÞ~5u•5u¾•^êöS—ðÐ%âô5Üwˆ?hýü»NQ[X/ÒïCmymÕßÍÑëœ÷¼¦'»õë£yƒw×óïôlûçÌsªrεEú6è¨ü÷¼çzÖ¶ßÍñv wF¶úè`®KÍp-ÿáåÍ&˶mYa²õÚgÃW®³|ßáàŸ˜5üMEµêÆz…>W®SÞ-VV¢ÏÆ®ï–Ö^/¢s¨­‰¾1Þ!Þ!R'´—f6±õsHÀ–à«AEþhͰÎdQp¤:¤:¤*æJ"«Ï«äü[Ô¨1¶P±\öc#ánÕø ñò w«·^¶peTnZNjjrQFa*›×J²¤Bõ®ñѨ€ÐHi¤,ÞAÓµ*)4õÓª ñ°ã*²{×èëkñâœ[Õ>ãČ͗#/tØÇjû2‹ëÇìŸ\«¯(¬®+)ËkB ôM‹ÁUF›79gzT­8~¸ó€)Z®?ÿòÞ_?=Wqå®àâ¶ß3è:ÝY{Sš£çáæŠ,Ðþ:»óÝg+ZêNVöê•wç¦Ó£Srø^å­¨‡î¯kìímtµ±p;lb/Ø´Žá5Yž6Û}Б--i³Ý—î_ªëzzŠU»5³°t„m””“Ð=¬såÌõfLäÈ»ü34á…¥¼µéácÅÜ×êíºñr®€bfí°dÞ[Q¶·ÏCØà_u1fNWx!µUeÅ7Êò8†ð$t3¿§¦„Öý´(¯0½­!ð–Uùí÷²Î¡ýRqQ€¿8$ T1§p±`">(+ù ˜@W8Weü+#›¶òXâ7®à)WUê=þhÒVU™¢¥ù ¶â=UÙŸÂQ‰ðü°4—½a‘‡>Åë°éÏÚî¡ú?¬¸?Ãr £‹ÀÃ]ê!1-‰Õkÿ®¹þ:¢‡Oï]¾ÚnárC!³‰Ùà WMaÓà“_Ufü« =çÑ9zЭ훀»G™¸9=#))]‘ŒP[Ÿ¤ÇD¹Z¹'âŸð• Ýî]ëמÛu÷Îùó·îï>·flã Ÿa!/ba¶åè¡h} É¹§©¼¬±>@éÃöµlã’€P"¢£bÒ3ª›O¶±¿ò1šu¡¯Xzod1ÿzH©ZG3¬Ë,Wúݯ û"ã±ëu^›BèêJRezMQM‘¢M½úТ²«%[ŠCÊÐ ÖG)t*´CT$*òMß’¤v¡j9_•†%Ü+¬ï°§”ʘ±eÿÔ/ÕT£ç&ᚇη&ëžÀ ðgü³¨,¡<’Ö-¹ضwÓ”å{·­÷ Î(wxI2ԯȤ² ·®À÷Vvô û:*Ï «èXhŸw]p©8×^I랸ÞWÑrrʧÛO-²¶—x¸ ¼|¤¾»qz·{."úr½¹«ÔÕÏOèå%’nö«™YOîgU¼ÞÖË×ÅÎt©Û,Äh#F·eÎçwØV÷È-Ð[yQÔäs×ÿjÄ=ôú%ïQÕ…ê µÍ·Î¨ üÊ|øÿeq‘‹ÚâªøNìǯ󹵣Ãù´…~jlr"ÛÕ§¥¦¦å9»æ…0>5Åd•Õ)ŠZºkš+ÚQ›$ÄÅøøxûFFGGGEÇ'èŲÿbâh¬»ûÿ–àDU«ÊŸâû:IÂ=Q J“dö±í6²CžAvÛOzèU¶æÖ¡T[ùÅÁ¢èÔ‹êJz/±swGý¦ê®%ÐU¿Õ}ÍÁñؘŸsµ°½¥¯÷Bù%õyͨµ†5”¹5í.³Bô"³ÆŽ…uå……åù1¹ÒBax~lʤë{kÎõïÛbféo)mÛÈmíõ³·ñ½ü=¼KkëËJkký*Ô½T<*Á3/©V¸ñ>Gå‰Cù«öØó˜«£{¸Ûq#³ò>^ù’b¶\â3Ñ<ŸsYóá5O8­ŒÿNmeKïͧMc›Zø]—K^é÷-Ý_ª÷‰y•[õºò-9kÑ,4#ÌØg§ÈÜËuãú/?½õ0(·ü0À1âÿÅhVÌ‹ÿ× Q/ý_¿ø#ÜÄ?4ª›ž†Âõ÷+E ŵýQ7Ão ¢{bzãú"1èÅà]|À /2ÿÚÚòŠÚuûúûYžÐ¥:TG aüæMÕ›íœÓÛüÕn¶ šYÃLÄoã Ïš¿9}V80pµê6¢ñbüó3g–ùÜ­¾aŠºŒ¤´¤táeœÁÝÄ“;vHsÜþaäêî¾oŸçZ¶'2o³èî«êi¤Û·x÷#úûǘƒùØ„™ßev0öÌ2f³Ÿ±ÄK™ÙØñÆ`^÷ !³Ze¯NPø'8%ØJvû»zú Ú% áøÉ¢ÁÆVau}SqyÂXóûÉC?¸ÁÁ[UŸðñ^JMNÉhýB/2C$ bs‚3!yb>ôcSã3ëÛ£Ã:˜r9±ͦçí\·:X’Qê%ð( Èf[oY¸ŸsŸÿÝá[UÇ…½=%§Ñ=tKÜk=hß½·ŒÑ)QóÅë”Ã&½$IrPŒw˜»~tHœEÐÁeI‘²$=>/6OÖÝÊ–·TF|idIHÕQý ÏÂð"¶ÒÈW”VJsì3„Né¹¾QizÕÊŒîŒÖô¼TA—I ‚¤’0‘¿ÀÏË/00<:N¯’BåéÕ9uéÊÔ”C—„K¥Áá©!éA‚ì£ižÈ‡£œKÄG›ƒËÃ3C-–†ûËú#…-ѵreXN´Þ¿Ð»ÈCQ’päG懕d¥) 5 ii™ÙYiM¥¯yÆéH‰ÿ‡žËXרv6&•|š~|rLZTFd–¾W¥wuBš¤$¨(Ñj̇U©qÞ]½nþá,ÚcSãÒS““ÒR§Oµ·Ü¾¨6JämY;öÕ‡Yª{|7ž=ó¶jX’ŒÁÛó>d¦ZZÕ8 ‹üa-A˜¹z¼,(V$"ýVÔ’_]ÞT«¬j¼–©·«ßn¤~ÅàŸõ#îÖ+rR„U º¢HYÙäSk«2†Ì÷|›qºE¿(ÚÙ\X…ç±ý=àÅ•4s„iã?ÜÈv¤ÓN³%VßàEÇ2«‹Â’‚º¬&õîþy6ÄÚ^!°è 'ã6>#ÚŠEŒÏìÃÞbDØG]wÅ«ýßY„1ªú¿3î ¶¯œÙ€*ˆkÃx×0§NeÄ¿ÆÜã¡ía l‘,RÃòÑ=¡ž§Åï2…êýŸÈ±¯§Eä¡K4VP¨•%ŸˆKѳöŽW§`qu§Ô¥æwµÕö j¤ +wWúä©_–( K;­«×¬Ýãkã*ô:á³’Þ¤VVTµÏpa3¶éÁ5U“PåãÇxþç“uÃñ •6Ÿy‡u-¾5ÓŸ7;×R$qK$íË”Õ"º¦¤´î„EûzfÂZf†²8ÍW8í^13+Y‚BPtbL|”85W_Ô©/#À{øÁêqSx%,͉ê/Ðîf¼kU½¿± ¯ÿ­ò >ˆûø²!næëìð·BsžkY@“ÛÙ€“ˆþúÆ…ÏÚ%¥ž~¡Yz¸B"Ì•¥E¢(Úã —í.ÛW{ó†Ê‡Õ—”ýÙƒIÝú‘xß%~MÅx‰ÏfóÙO ¼­”ƒ ˜9|ü…ð„¼/«nx׆Fß5Å+â;C‹£•±yˆ.-(ª¨(ÃCb£‚…G$¡q®‰èdZ¹r0S™Vˆ²éò€Rÿ€@yš$C,(>柸Ï=I’z¤083$-‚íñ%!¾¢iunvJV¹°]Q˜Ú˜’4;ÌÒ˳bsó2 ™·Ô`eö”«Zëpt áÕ©jŸ™Äc‡×%å¤_T^Rçää§ :73–ízbãc„±‘ñ‘(†) -®()®hu®=èp8ÀÙWàl!± AOãÉYÕsx Òˆ-‰q1±ûô¥Ì:9Cûì9„ôÃ#Ó3R’SS3„é9)(‹.•åúˆÅ¾Ž Þ}Cm ·u7 ?)Ç;’ò2Og°Äêôμ3H¨üÁÑxkõ{’Ö?“0‡Àï«ìÿ*†Ñú;ÐÆs*nWo±ùt,­²Ä3ïü܈y9ªÕªx>æPîÕ‡˳é‹îæ”y´(ò¨¯»O°#:Œ¸µ»ÔˆJ¥7i¦‰Z´¯ÏÿZʼÇ;çÒ1O/m|JÝÉ­Ëm®i¨Vv ~ÔÕ^ì×áS̼yƒÆ‰Ô°¼Ç¡pÍl]È7>\Á6ûC×óé&æÿÙž´muuY- ѱªT>3 Ï)ŠL“"ý °pqhŽ´(\ˆÎU»oýSÜÊbjk ç«òÑÉÔòâÁŒW ,õóü "©þˆ…H ñ?C¤ µ)%iiø~/§Ÿ\ëÄ9î)Ò‡‚àŒà±Á¡_ß²œ¢´L¥°£°(µ1 í‹ó ¶ŽÇJœö/ ,¯(--ÏŽ-ŒV ‚ã*ЉæDE\§DU›ƒè²Â¢ŠªÐ€ðàØh±Ð!Tï¾Ëî¬kòj‰èMú¶1¾ ¾ƒu€âØÜÿtv°DÊ:ÀØ—g—à´,/Å)%“Ð ñËy§0÷…Ý©ðã“u‰Àñ;|ÝŸÖ]ë¼qÂóäž~!óæÊjP…~gcͱÆjYH|||l¬@÷g —‡†Nñ+©ªW7œ²ìÜ`la½ÑªØë“­y pDëª"¶Úؼa`;ž¸\xɾÂ9Ñݽö¹¸³HMËH°l ò3òò§”ùxxZœ³ðôô±{Çĵë. fâ~:áÑkÇ[×è®<ê;ÅÍÃÓÅÙ¹ìÜ.{cxª¥ÛjªÛÔÍ þûe]@ñÿ¸çˆëb؆#‘õߨ*ïzc×¹?«¼@÷£ÿs¯×ªzðQXV92©’@ÏqÞsõKtc¾%r¸¸í±pf¨±½<¢Ñî³h±?æC]…ÍMg†Z1ð›4v0À2“ñ¾üá†Ë83ÎöÓŒŒìÃNØ­sž'ŽÜ +‰ªÅ¹õØ­¢¼6¦X½ííWqùö­œ¬òxd1[1ÜiŒ6óÎêþ·zZ šš„'N6|ŠÐל۶ 2<ø­õ®ö{ý6;z8zKØtãêWÙz¢úQËqaU{uQkµ•ð—|'žÕGÉuµ‘á_Lë>.õ KóœÊð¦1]³{/wõ75Ÿ¨ˆn£ü„ÜØ¢¢è¢øÔ*3Ú˘Ÿÿàéõó~TðÓƒS¤HF3\†Záæ_ÑÜY|­jPPs²µ±¥¡äÄôØü°ÜØš¨1·ÕgÝ/|Q’—•‡ ô‹Ãr¥‘±!!f3[ý¶\^‰ókñÛlÌý’3²Ì?¸ÝÍß¹ ·âZßÞÈ–¸§4ÎàÅŸª ¨µÙ–Y#+ä|ÄÂú”cñdKÜ=íì½×£µ4£ÿx>~óZGÕµVAíæfŸ èè8ŽuÀ=üÛÆÌæ 7óÍ«Ž<Á«çŸ,.²nªÎÊx/ó6?鳪Žˆîm8b!ô¡ØJn¼šù]: Þ†™Î†Ë»ê8ô^ÉÝÁcÞfVryøÍŸðÄÔ1(²&X1¯št~›==øÍd]ñía>Ú>ö#‰U½ÔåÆÎã§÷/]éud[´ (!*E¢ˆ¬Ø²DZ·ãóøîMÌÔ)Ë9ˆ£2K ¥ e!…HßWäs¸ÝëôŸ`âTà c£Ð£Ú;gg.­+þm ¶áÖ”¯·ž›±ù€ïoAKä!dF«vЊýÚj[îãåÍÁÅ“TÓ¿Ÿ¬ûûÈiU_÷7üáèù`êrBE$ D1ñ1L¨XïèÎðˆÃêïgÙ*©Ã©~9HJËÏ´?¨>¡‡M™ù<´5\¶+Z’ 'VePÝxן·‡!=ƒ`‹Þ¶¸”A!ŽÄS­¨Jž’š*M;B—à° ^œKœT. r‹4gûZ–ðt/ÍÌT žòðLT&Ë3 G1~|¼ßâ2·Ô ÇC#“øç°ð$Eâtq–®^@®_z kwWWé6º†—SW¨(C¹(?N]¡×¬`£íª©-¹Çâ¯F%èÃŽlwqñÀŇ7'ë>Ãeª|¶ÑŒ“#:"!½Fˆ)ê’[½™@÷þ;‘“$_VT ÈÍKF)‰)ÂÄ´Ä4”Jç”å––åI}^”ÁѰhŸZ÷YXDdpðÇZQGmu~mƒ Ý#7¼ŠmÞó3ÊÊhFk¢â££¢%Qáñaˆ’—W–(nT¨›JU÷I"Gõß _:Iý×ï—Z¾ÇøK­¹6ÔÓA.³’úûO“üxÿôë&œIáE_p(f‘!¯þ§Ÿ:©9§ž»Ï"¸nd>_´Ö/hÚŽÜkeWio^Ò ¥¨Â­]܇†Qï±Ü_é¿}+|dæˆ߆·qÚöæCy[‘>cɼÏÌ`ìÍÛ*­…EnÁÎó¡Þï!¦/¸ô†]e{ð}x*žŽí/K/û Cš$ÅGZéÃÛùÛò,!ÍX¬`ã›Þž#ʾÿ&¾û¥ð!ô9-á xòP§Ø®{,¬!ù~¾¢’Àªê²Òªª€2‘Pðî–ÅxY³Wó$„µpç“uyÈ"œ À© ´59$‰Öý>Å6ɦ£ ¾–6Û-\f!u‡ÚåçvZ_ó¹ƒòQIRYR{ò¹äuçÃÓûÀ|WOóæí=ûÄðlÔBã, ®£âà¬ULÇ»ÄJ#¤Ò WùDÏÀ<ÝßJ²RN ŽñðdTškH¾;:…oêímÊLÜò3Þ+Ðý¸®î¦®×zlû&ø÷?|ϹòO Ķïý}Ñø¢JÀ–ö ºçßæà%lj2رgÙÊ󻇟^¹4üp×Ð2aäQ~ƒÕ: ?O;?qni¸0´&²µÑ=Õ5]jžª¬F<¹‘@ê#‡Õ®-ßêÐ!+‹.ûSC=ÝCC‡z,…Iîü¦Z/WW/o7ïÚææÚšf6k-’÷ã(u¸ö/Ÿ„žn{Šu?¬ûpðB¾­™“Ï^t¹KjƒÚbë¿§±‚§ûæGØžœ9Õ‰"¹Óºwœ½rm¦l²Ûá](®ª.PÖ$ ÿ_u×ʵ%ÈÌÜMœŒ‚æ²&1jc4K,±Æ»bTšT¥HïEøiR–Þ{Vì½Ål‰‰5š{?rïÿÍ.KÑeY¬ùó<Ú 3§¼ç|ïyOœF$àt~9);P*Jð s w 1´ ˜¥ù­±û{ßU«çöžY¾òäžü¸š“ÚùKŠí÷¡Ýh{lanFjBfÆ?©âq¨Q´QP ÁŒãL3##‹må3Sá½2í+.äfZá>$A)F›‡ >Í `8qŠÞçÕÿÈ…ù…GE"­b±çzk{'S{çà+‘«y–{Š.ÒºXž[Uj–®ãéà)J;¦aB5³”:ÏÔL[GY~ÄLÏös§üºÀ¹q:«èK 쬈eôÅj2züb ·P¤œCéÖœ*áaŒ®¹•¨†jÔÁqg¾ÞÁÓ1vÎq))ÑI9i¢”¡…³52côs×mßžŸR]¤ýÔ?ƒ/'XcV3‰¶ YGb7ä üÑŠ¨I†¢Xëh—|ëI¸¯fu º8§øÁÞ} ¢r×r›b‘sª[”y2c6—ËZ¹ ýÈ`fÕLm£²7hÛçrÖûÜ÷£SÌo»ŸÉIö\Ÿ¡Ýœ’Fp¦îÖ¿÷§†)BZ>Lukr݉ð(ñá5´÷ÞE¾ß^u>g1ÛÔf.b†-9F<±ëž#·ŽZÌ‹ŦP˜_˜W°iÌÚðu$Ii~ó~SW¾‡÷ö]Š‹Å]ÐÀßò9¼Â_J‡áA°üùÁ"Xˆ¿„¯ñlQ Gþ¿'î‹GâѸ'ÖÆCðPÜ ´aŒ…^ð|+j5 t¤^­\ˆ¯`NÏ„ã*Æ)Ï^TÅ ž &›Q‡]G(»ƒÑ*:# >0µi¼ä@.¹þqÔœÆÃµÇP¿l¾Æ Á3¹ô°°4Ð>´¢ÍøÈ@ºpYIUÙðµ¾k5¾†çÕᖆ…©´û»^qŒ×”M¥u<”–B©6ú†gü÷„16Fßhv.& y˜ïFʉ_§Ý„Å7{±ùIübn¾IÙ¬Yc»1KÌ ö‰àÀ°Æ¾4² pð\HðŒÏ¿Uö½WÅ­ÏʧWfúeºUi»í Øê_”½´Ð¶’ ª™%‡7ÏN±*GÅ(%&¯” §míÝ}\H„ðLØE®{È“8Ó;ÇIæVW#¯I]ÏkîxcÐ B âÙ*«q˜Â¶‰j>O4-Ü£¬?ðÏfƒnoeføæÜcÝe%ÕÛ?iê ß°FÉ#„jHIU«¾"´Évs+‚=ÂP:wi×`üö" [º(¡PÄ„nöµá­4²õôÕßÄØÀÂ×;$€'ófÊ~‹ç†“ö({ÿlçøœ8‡²Âsr¹½VÀ?É3r‰g(y~^®I>I§öA÷Tøobê+üw§{±n «a·"õ(¼ 'h,‡éCOßÞKãöq˜\¿LÓ(ƒ?¹[Ùtæ·ýƒKLK9–n` ”TçfO{v ó,XœØâ\;t®{r®Ç/ä\¿™Gá½79ÖÉš7âZÑ‹t~þI8TÈLбà{ÇÀ µâK}oݯÄ÷ø{Ò³ôfÏ:ÛIÏâ“ðlÎ)LƒuŒÜº~º^wè`ÊvT¡udqé¸5&î¶¶ÚöžÎ+Ò\5“Ë3’‹S’gj`a¾x™Žèó¾¶J dgké,‡q- ú‰r§­xÊi¯tè´ª:í·B2Tøà¤’!õ=P½K­W}/¶î€Âʰžì¡g>ªG<íÞì© õ&?>[ã¹·Å‘tèÈ:åÈG^È‘ÏðÇÞ0t".Ó§ÙeØ3Q¶Äiú°7šÝ†=“I§O³ã°76n'®ÓGî:M~ ^ðûc¤*=òz],Vµ^}ÊÉÏÕ7_Eî¸ë<á•øzÙeÎN.JÒíý†óûMµj¿Bsö¥ËáHM˜|aÑì¨zÞÕ&ó–\JpÔæ4ŸX/-vL†KÌóÞ«­­W;xl‰µÓvŒqN/7º8Û›å8Vúµý—ª,‹ç§ˆØqe9q)™½wéͽÖzš±všcnYBtÒÊOv°0^o7ÕFôô8dÍ @»«ôï–À@^ÁáÚIäè‘аë©Ðp©ÃаKå|þ¿Æ±Š2¦ÀRZÚTâÛêŸåÌMY-ž¸t·u´.yßï~Ý÷ÆZ¿ €÷«wƉöVåÿ†î¢ÓÎgÍØítL]ZñK¹æºìAË–f›DÎÕ2°­òÊwݽN ¿÷cž…Æíq\ÝAÄ=èUÓ¾_k”ºÝNdUí|fî”9­- Gê¥ácJ=Ð$€üÙaù]•ÂþÒBþ|¡‚¿ƒÿpì/*:ß!pƒP¡¶¬\–’0°Œü«/þKuÉ¿Èòq]]çŸ"¾SZ¿Z6O~µ²¦Â!8GòãÌãê¼ t!.‘#Ìͤ޴ºŽ<«¬Ú“I¿­y}âo<6/„ædÞsX8¯:ð/SâB¼G‡>ôØ£SY˜÷x!šÁ/ãØG]Têtö\#dÏvªûWë•DŽ̩¸'Òï–ùjh¬Ý¦z¤²3kÖ˜±G~¼tåè៯Ì:2FdÚµ¦|Ù¼¹zËç/ÔÛsàÀî=ûDÍYõ\½ÚŸÒò7“\À\Uë“—ç5Ï+ïß¾B¡A_X®ülâuzÊ!ƒ)n ÈœäœÐxˆêÙ;ÁYØÇ­Ý…½'8̹ޭü…f—¡Ø{‚ÓLì½òÉ÷¨X½5;ÑéšWãF{øÛ/œ¡ã`.›­ÊîÉo ¢À šf¬†‡á­g¬¤æ ‹_†Å¸óí7E_¡¹bŠØ«ÒãÁ^I ¹ý0•D‘m¯#¼_ç/ª2dr˜S ­1 ÁI¯¦[D1í;Å,h%ЉZECm‡ûÃFеÏÙ^rë¨r}Lð„þt+ ?T¯ …°ûj@œÿ“ª ¨jH99GÔ`Ö¯êPÀ9…¹ØyùY#­çntÊ,Ÿ”D/Ãð?‡Õ/Xì4¹‡à‰¯ÀCÎ ½]PðšÅˆñÝ J½µI©øªÐymR+Îx!µb£vÔŠ3¤jÅŸ7<äØOwQ7uQG´tQ?ÝEñtUî8;¤\;ð”’í^‰ó|ÙÐ_Eñ±¬Ñ8é‚)ŸëîCoéžzºgèãÑ^ϰ®´¹g8g­õ4í4ÇìÒĘ|¤U˜ìhn¼Þî›f$´½n;’àáp»ûç y×0XÀ±wöýn)@`-Rž°$±G”LÍ3A¦æ9¸5Ï„N©yÎyVÍ3A5Ï=Шˆ´Ö¤ú‰/ ¾^1!ŽßäšÛl?”“2{œ¾Ó‹}Ÿó½¹Iøî­¹é—ÊwîC¨Ò8S'Æ*b]è*&Žbÿã 6Ž”¯¹›;Ú„|ƒ½ÉCz’bbeÚÿ }Ž[<†Ñ£¬Wkœ¦=‘7ùãŠ<ƒÜö¼û©¾ðÑóT:öëxC§ ·ígòiÓys ç¡ÁhÆMWèË@*}»þš Œ#q‹ ”H¾–PÛ5º=1ÈD¾K¢üû §Ã©3êàÕГÛC x‡˜åLâMüǰD*º"!¡1ø…tZæËl„ïée¡¤ˆ/gøï¿ç") Ç4°Ì½|ý}üýÍýÉ—oþ2â]h[tti0“Ø&¥øa<kà÷6RÙéÑ ÞL#]Ow?òm½iýÏ(áÛlhyø$ÖÔ»=Œ0èk £ãa¡Ê°õŸ­jÂQh¼/Kî÷iX®ð<ªT íÉ×S8¿|Yðßp`ʯ„ù+5Z„Ÿà/8ÇÁŒãx µûμìÙ¸».˜›©iÂ\åŒ0Ò|Àâ0t×€‚ãx3ùÁ^(I {¤`ÿ6žÏ¿¥1‹ÂKñÿ4`>ËáapFÁŠ“ëìâ»Îäà›'& #p÷¿·â9ü{xäØÔ¥¿ïÖÂy5>ï¡B 1>×qÇCfC\»C×£íj0¥A—ƒ$ê*ñH²;†ÛE,gÒ)O­Ñx—×Fcì×8H£¦$`¤±žZ7ÚÂÓä™^¡`y(Û%Ã"Ã2Æ­`†Ì_øýBýä{+µWþƱæuzÆq‹û¢uΖæV殆h)Z&6Ê1Ë1+r.C'QiNÉÅ쥩ëâ\ɳÍÈtÏî³ÇçåÅ•¢´ß©Ô¤À¤Ð ~9Z…L¼68lp°³´×%ÈËË3êwÂîÝjè$\Sÿ‰£»S³Ã·!æîÁ/ð³k?]Ñ{Œc—"=´ÖÉÄDOÏz&šÅà·®øëü©ÒÓÚ¥×Ò€’Ò?âÁ—x ¹ý|m¨nÊ9`-Wݵ lÍLìM³È´ò*¼sü·«ù¹ÎæÙ¢„¶2IZét|+ êç=HÖ:Ë=IcŸ?zàTûyEL±í$¶ãJl­[t@ªoô¦ÐÀ¨€µƒ;ËH}S °'$+ïš¼Š…4xIìJízãøéŠá†ô!Hkþ—û\ùT…¤üÖÞ¥ÿ!"ÞØƒ/Rm&JŽêw|5 ŸtþªÜH›%»^Ll½ˆà¿Õín"ø»Zù*‚ÿV¿Æ]W+_FFpU•‡ÑÒú»÷p ]:×%¯:~Ï–&‘@ü3t7*4Iâuå`éãóq.z@ž+Auóç‡B;0ÕxhÕX%z<‹¬Ò=Rü2ý‡‘˜¬ÁžôŠêÓчO`€WëæeäÌùòÕMcŽOV¸ý™ÐÚÚS›Ê•OHÑ/ó»²%ó«ù± œÍ~K*Tê7t#³¤,#+¦í@ÇÍÍÕOÕÙ:1?À4 Ç\ú¶Ëªó)vku‹¦ûjrûÖü—u®ž–A&Aáù+ˆÑ‹«Í6Zš­Þë¶K\P ¸ÿgÈwC*˜7úÑäâMz¡0«Šƒh:esLP¢W,ûBÄ©î7[÷±ö ËÐîÖðo×2(.ûEÀy?À®Yû(ÿæß-]¡o¸pã,4 ÍÈžxÆÑQóÐwõ+„P~->x¬r_öutÁ[†w¦ž½wTÎh!–y/wvñuÙäE<Ð9Ê7‰±§¼°½F •pLœ™›[RR•´ý‚»„áqÌË•vÿç,v¸Ë¿«,Q‡¸J ªðF|µm]b¸ÿ××ð®ÐGXSÂ}‰ôO_6u×L›˜LàÖhòÖŸæükr¡N”ˆ}|0ª¸âjoè™=˜1Üàçn¦íìí HlBî‘ {' XÉ<=òÔÙÇÐ3¡ ¬¾ÏÉ#Ë¿Ãcgˆï§Ø?96oVÿÒr¡t@=Ε Ëšl‹ÖC¿a¶ødÇ>xæ|¡U¤Øbò¨D³wÖš»lX×»eœnc¬lèNËÎ9.9akB|‚(2"88D>Cb—<0(Q‘sl^ #n÷bKA½'k #)ø€äß{äà¢õ¨=þ•'´cq í?Ј§ØÒsbñÁ>ûñU -Ù調‰`ÃÝ:g=FÄMš¶aªm`r²¶¼=.eZ¨Ý~x^øûÆëh‘;7 U±‡ÅÇ 1ÿI‘‹¸Ç‘ZXRÛ‹½ üPŸPÈHÙN³;QETTE#ntv¡÷øG; €=DÑW“U'ìPÂý¡Kjë¨_ ¢RõkŸ»HnÉ«ž ä [ëRLªä>ªÉØío—N ÄþƒøÐCž¼Ý}•ëÒŒdÛtèÍ_«y9ÍX}z­™‹ ZÇ(vã”´ŒmÉ!¢§Ö>1‘¾Ž]e,ò@MS¬lÊ‚nª&ÁÖ M¦á˜ÖζRÑÊ”õPƒheÉÏ­Uî{²@¾£…Üògp‘ï T/¶ŽÁI.xXöÈÊEûgj¢3­)Á?~‰ðL„»â^îxƒÕ`1Õ‰½.4? .q»Pz{„â RBñ„â,ÙŽ9}wèÎg%¨Ýz¤Þ0IèÇ´¬ qw4À,®Ô$é#ËfŠi»$t›°$4Ýqî _`Ð4™ålj‰_qL²sªáF —•k lªîåÁ;U"øÿj÷Ø`aëç?'»B1_¢°[%;íiZ¸³Œ8¸«úÂ"j`Ÿ¾¦úεôëÝ=‰,•Ný˜ÙBèukè"O®ÃceyeÄí]$³lä¿O8iRÕ&I•-kJ«FÎô ÿ¥ËDB+X–M]hvcsá»ÒÔ*Ï«"¨LæØBÅùIžðÚæìDžèÀô:Xúæ—X’Ä;$Ù:Á!î!žG)@ ûI_ˆTzJpäg”bú~@Þ÷x5ä}¥ä}¼Î+Pi3¨¿çU êOWyP¿¡Ä–.e #})Rïåá<·³p‰wµ‡¦a–F“=<ÆûÈÜr|˜G¤4zÐ@cõ‹X4w‘µémSåm5nRôº»5Œ‘G8bVjàFÅÅ8’¾à[¼àPM€^FnÂÍm¼Ÿ,rM6Ê]cø©&;³5ò|¸PÅ]ÄYÔWhÔzÃÕë-ÝŒa¹ƒÜõyÖÙî'ÜðjªiiºÑÓpÃëò'8H¹Ù$tEºq‚ý´‡ùm)|PémE «5J8³ƒï·ãT‚ âhúLU‡“·9d€Ö}±EÖä·©mg LÚº`€§cN„våÜó—Aõ?B×¡Õ )ì¦b¬ “  —hG×aøƒB càÃü:ÑÃÆ~ß®ƒMñ<`Ãî]1ÕA “å šƒ¯5 ­¿Uëö½Æ\5î §(I åæ_¹Ýøñ-J–ŸHh›žÍMBJg'%Ùé•íf™í ˆ„vÎÛd‘{imãüjRˆÒ BHcÿISË«a(ƒa&|r|ƒ¸äJ UËžà&¦ZÒ ¥ãQè–8«ûXO´…ýsþ›- u~ò½?J̰wâËã Wvºïúœ>ÉÉQéÅ6±Æs\tt\D®ºë–¬FŒô¢P8¦d3AމAbìæB'–ˆ]‘‰îåE¯Fëª\ËÉ’¸¸Hæô1¶q6\Ÿìžœã›ŽÒEÙ(÷*wåâ;@g¢…±À*b* Mß½¸ÌPÿx¤…‡ÒÈÄÅuMÀÆ@MiÃ?yiCBÛäŸjø„ÀU­ŒZ…£ùÎ&XÓvØÌicó)¶Hõíb¹´Åî˜ÿÆ4aTµ$ÈÎç †ÁgšVe¶i†¡yá{%ÞfØS‡c¢âc3ŦGû$¢´˜À|¦‘.ÊzGÕäžÊ ÞS|ICW.˜¼Ã ”ÓP;¬¶7t°–·£ÙSÒݲ2~^RÃ[ =ؤ†YB)áÕRJx8Zc ¬­ip`NMiÛBb¯PHÄ»üE †‡kâ¡Xç›ýü—ú“JÓ5ž¿Å1¥ ±8­h¼5Ç}ó–Ç›"-V9:{š2l’?ò”n]#©lq¨ËVýýxdhB˜yìRb”´îø¡Í[âkÉ[*·Œ]µXßkšhÛ[öÊÞQIëwä"¼£Ôät¡Ñ,äÅŒæP Ú mN¯½P8­l'œ^“AÿlœÒ™ì×°ÒëÀ2±K!Ì,„é±=,X½ú׸ß{±±¼/¿˜küØ…’g¿Þô,ÇO­½Ó­µÙx Þíz›xåHNWÃTmV×AÿV=)šãAžù%TS”R˜œ¸å¢l¯T‡‡„õ Âl6Ûo&­{YÆgasî*Úç»Û)Á# 'ûõNö®.þ3³!(!YÚ¾GÇråg{jÔ@ƒYµÑøb*.ð*€ñE ›¡z§ëÝ%?.´MvHOŠÏ …&o- Í*DZµ¨bd$¦<ÒFQ¸ËŠÙcu–WXj[9fëT,»€´ ï•Gð)ükä_XSÔíÉØ 7`I7^OÚëSƒ¯kÕùÑÂ;èIÉ:šM¬§jLÐÉ,· §Ëªºjú ɘ“˜x!E4³—”ŠŽüW«S¦ÕĪ$ â›êüÑdnº*^… ¯|Ôóy‡bßèÿó̇Õi09Ñ!³8œuµ{¦¤r3‘QÓ)[?Í­³“§HÓ­fééÓ——§…‹Ø‹ÛÃÓójz_ÿ>ìz;o;m?Ï_äw8ÃÖlÖð ¯å# 1Å^¼u¢Ï®³EãuÜWŠŒ6l£Øs‡ËÖL›°ÀÖPÉ0 NwÛà&ëÊì9¨Ö`öTSÆÇÍ~5þJyS&Û¿lÕ”q@~âÀ˜€d÷Ý fוkKmªîW×WŠÀPèˤ }ìö*a¿Ü?º&ðoí…é²2ËRgÓ‘PÏ[31P½ëо“:Ú8‘Fã½Íœ-Ú³‚=¶eеþê_"ȦÅïd Ÿ®kªoª-ÅÌeü]iç°y> ')c¤ ÅÖʪ=-þÕnº"ƒ¿ç}£¥>ò~ ?3OÀôMU#0 ¤gvü]á¸6VÃr-½†ñªJÞv\&œ¹ ’Ÿ¹1l^IxþŠ>­ÜöÀr«p„9Ây›¹b¨Îê5u¡ý± .Ãòn ‹‘”§ÁŒXY]"È•¼³0ûcÔ?'u £¨ÂPÜè‡>0ÿ«Upv{¹±Y[À¤|­€;î>„X {±q|…ðàŠ¨Ú–à‰nn£6 ØÑnëŸI*Ê/ÌMü •£2ï³ų÷.DKÑÞîÞ L¤ŸÝoÿÀŸpñáy[â‘eyexì³É˜ˆf!ûiklÍW{“{Zî‘+PaSÀà'Áï\º¢fŠÕŽÔòì¯êüH~ ÷k>þ¿7Âlò”¯Má#x¯.÷ìÖ!¿kîyáKèNBB+Ršîøßñ‡ø½É#qwÑ `Ú©>uúMFË:kuÄ´HVùa¾ôŽ]ÙqÛ³'Íx*1ª¿¥•ôŽˆ*’.¿‡ß ¡« ŠD.ZQÜ2l·v q˱Ä<Ë"Ã:jflUtÒÖÔ$†-HKmï ]¿Ù'jÆ·¸{h—_¡ Ã’hµfVo­Ö¶V°½+8Ò숤°±vô!ÝoÆ-^õ•¼˜(nZq} Dÿ€-׃þ;¹S6 Ó…JÃEÜãÂeW+Ì*–ÂRn÷XjÙ–¥ÓµÁ(–ž¾¥r6ÓìT•S̈iöžOC&F¶ÆvW!3daC²”ÃV‡}>˜Áý4Í×ù“*ÞºÓÄ5]¸ÑȳS¨^œC*DÙqIéqI1â-Ç“è`×Ī(ûM sÿBn+¿Œ»‡¯S â /QxHwïžä‹]ŠTe_²¦“Ú¹e—î2¿âŸ}eT·'ú­Ð´£ðŸÐY\ÆaGÞj%WÈQò“ Íg+üTE˜šu!xÛäƒÉ'·\FË'¥P^v¤ÞÒÿÆ,V½ÿݾO¶“éÓoR2ó„=Y¥jç|H«nêùZn5‰g¹gºŸg݃7¡% ÞF¦M“݉߸‰é¶×ô-qVðÁS-WóZ®nº¦BËÕ’Ú ‘ÊŽyJðó,> ïuãG´ð„†ÞüPn | áHyMrq™+í`Æ·t¦›N Ä&‚}—‚Á-¡0zÊîøÐ=ÅC¡8ÿõÊ-RªIDð,äô„bÊÌ[†?„¥š×àÝ„ŒìØÜ -1þÆ…ÎØê‹\‘»»Ýs?_wG·®‰šV;óQ4ЉË"qKbÝrô~#Sx´ÅjOŸu›´\à31må&ŽN]†î¿à¾[|7û"_-äèã¿.€yíÊ?*Sþøâÿ¸©õ¸ ±PD¡k¹Ýž¬Vz:×Ëi/·O9¶ßæ©hÕæysÙ@~ík’7quü5L”oáiêJä¼!]™w\W¾ GeüiKnT5¬&&³>%IÆN×ßîÛ@o¼V3Š»ó31"‚„„“ûŒ-kŽÃùmÉó6¸ëF}æäL!CÿÄÝY'ãï¡Ç/6V7ZȃúS[‹¬ùÓ0‰S´—ˆ·P´ŠH0À¢gWáËüe™u'¶È‡[Õʳ¨~ÌësóÍŠ¹ÌSõ°ÏB§ç­‡ew©Ò¥? téáý›ÞÞ‰óûÊ9‡dм½˜[¶Å-NH $5‰ŽÛ³E†Ú+ü¢ÜÑr†uÀux2œPô9,e//wwôÈ’ůÔi”?\vªÑ”©îI^W®jäø¹¿x §e2TŸWÂ{äW̓›26kÞ[¯™ˆý~KéÓ›fóZÎÒ„ƒ4dÇHOÒ~NÒ`Q³<hÿԤϑÛ¸@¼ö·aÐChK¶¨ŒœmöùjQXUð#‰$/¯,µ&ˆ©¢þB±;’+[ÊÝÉ æ ÊMwYg6b´ V ÄX ý•Š´‘ÆëÔ[·†åÒÔxºìw>ëyœA] îK¡ÂÅaωނXB\ é·\Jú=#'ý®GNëAË™¿ßÓ²3ò£ÔR…S‡>0¸qy­(¼s¿±Fýf/SxIb,:,O©m'ϰüBiÖQRd•Zf-ˆ7 [·yƒQá3·Z¦™eﲯB{ÐîøâüÝÛ3Π« hO¾ŽéAæá.Úp â<Æ™ÍAsM¦Û Y5#;-‚JñúcÃÜßß7(FŒìE>jýÚÁŒÄšÏZ%LÙôl)Àd½¸ó¡²lwÉo«;Iü«Ñ×ð¡Š>×8µõñ¯\ªÄÂ…SC!C Ó¥ÁʕǼtè²NÚ'ž ¢^¬Þs„¾¸–Ч'}K JÞBb)m"­³2–6‘·® ŠønBÎúŸ e¼Ýr2Šca¶òý/iäþ_¢¬É;Óºá.M³4$¼Xþ¿‡kîÝ•8ÐWe±©q ½ÒÝ~½«oxš¶gsìzÄXÛÙZl·Ø]…Dæ9ÖAuå½››é“IFaЊÚ4éÀáµf;ÑNt 1#›©BkFþ:Þ£lW®_d´&3¨´iáwy¥±¨4H?$[ºe', ŒMΉÏÜQ ºt,¡ A7bè—Û'\có³¶„åi›X9[#séaÃŽ¼”êbáú`pF(©¦çRÕªó  ãð-Ünià± MmXËs8G“pÔu³o°O°·V¨c¨w( EaÑâ"øŒWÓÄ{;xx$êë£&>Æ0a≼‘׿Ý$U…˜Üˆ"¶!¬¡€»žôàâ¬Ü‘[Eìˆ#[÷&\ê-1)ǵ ± WI±†×ª çÿ¸Ên ~`b²¦tmš! k§S×P¾yà²@sã1¨yªtO‹ ÜムUª1tÙ{ø‹¿tZ{®[Ã]y¶ØœÐC¶€ëñ†Ê†îI:3ð®UªE.ø„{Ê"^KÂqë8áàs]ŸJ(ÍÙ„Ä  ”É%°G(údw+t²—C—˜Þ´ ì`ná!típ-¶ÎZS6<ó+Rn]Áqlãí»²÷2ÂÂ2 Ïa½6ÛÂx éÞøè5;äP´@ÉÏ’¯´„ä yH¾Ù¨Û©®þ<ϳ0¸~ÈRƒ\0çŠðT:ðñÞsWQ!ŠöØjj§)£O2*Ò'›%OÇ ¹‡Üî0òp|®^ ‚êÕ_<(ïl诀ë.7ûƒR°“ÖРBQ‚ýÔL4§Jî/ü'´\{qí à:ò–ÛÅÇr|Ü0DL+GÚ.XÚ“N÷µˆ¥'|"èúÆeû4þÝ)›ÛÒê(fKÏB¹N!f·"Bt˜È>§ÿáêAØ"”Ašç…MésH¼¬‰O¦…ÐO¹Ò£ð§‚5±cXÉks0¬à+4^äá×EIøe~Àž†ò­"ï›Réöd: ù‹Á^ ˜ò_ #pYz:|¥ _Ìw§'"‹“¶7öhšèÇ.î³ÊÒYw}ª]âQ—|”)ŠEQŽ1³‡–ÌÌó6ôµÝ`µjþLóLÙ…-ŽZGÑðoذãx@±iEa Mr—U­ù¨Q´¨ÀG9‹2‘‹éQÄ|Ô.¬Èv˜…À…u¸°åXSXÉ ö.Àté{&Õ’¼(“Ù·ŸtØRüO§ZŠO^¨¥¸›ïÛ ¥Œ{’ÎkI Ñrb»Ž¢ð}¨çI”!kM°›`²,kµŠÛ ꪅ{éqÆ*˜F ¥¼<¡eâÕ÷ÁàšÀ=`†Á))$FEü»Ò^[ I™ü³‹8ä½%&'")ë :ÏÀ$øï¤g¹Û/ÕÆïÃJͲáfæ´ÆÂ{uà&<_S ¬fÝ8K|y5õÊ’=©M0Ÿ<§`á9¥´TµLÈ4  Y¿?ÉúÏ­ ˆT¸D›ßtÍçOá·mq»!y%²¼°SÞ<ÒÊó!¶'\³Ò¶^úú¤)^ß> Xñ«²±Ðävö@aÓb‚ ¯Oµ^“ܸ^ÑŠeþ·–½Ê`W«”Åå¥|k-Ÿ<è"•òÉÑV©˜Ïßí‹ùàÄ|þ~b>¸#1Ÿ¾ügÜôu+砹̲‚µ; RSòsmŒ}}}µ} DŒ·ohx^f¡¤Hô”Qðc{ MVE/Ӊ¨ÞÚäØ^Ìl%Ç&Õ=!ÓlGjíÄóK­É4DO¨¢!Š6þÚ)¼ø»ì™¢ºSÒ§z Ý°’Ø Q–V²C¼­ƒ£­³øó¸¡ÚûË^µvƒiõ&~^?»øßA›o¼jû§,YÈvUÉÖÉ®õþvVÙy<½ËΣãev*¯¬rjɱ±*®†áçáÑ5õrA X\óü#ÇL’xsXж¡…Ëú¦åí²VŒWj'ðJcSÒ£“w”‰j$çÆ–1 ä3à:¼ó;;OJŒM–{}‹†zC”Â!Áá¤PšêÄÔ΂º:†#Ïî£Æ¥p¼ÓF(X±@#óGö¸X£#=‡ŸÆ¯àüƒ;Ú!Ú‹f(U*ÊË+å‰)öްŠðlï¥ü%ÎÚÖÖÊ*Ù63+%9+Ó6ÅRxΗÌP¤.ú,—ãÕ’êÒQl ×[N^¥A@êcA”ôzÀ¿guʘÿ1$]‚×@]xÉ›6ù#)—úÀ;žz uW*[¨«”¸9žU`$®¹j'jÕOÃnºÎ ܇™­ ¢8µ*OÛ-Ò~ƒ“™Œ\2ŽˆàÝ¿$C×¹ý¡·´àåëåãi¸H_×ÙßÃÇ×ù¡MAÁL5%”8b¸ÿ‡Ú™Zõ0¾7…˜4©óÓh™ÏÆGLO v£} ØÑ¹¥{2B#ü<#µc]#}£“*ŽË̳O45°´²\ô+í·y±±Û<-èñ@©¤¨´[¨'tÕS¾Çþ®Ðû^Ì÷‚×…ºÄºZ8[7Å÷§b‰­K\zflrjˆh{Xd(ñOöÏŽ)*r[º'y ›^?ä7Á:øwsámÀ÷ÕªÃt~1·ªƒ%íÛ϶¹FtUqv%*W 7™¹^‘„$Åí/­Ž-Q²0H©w>™ãòŸ~Iž{€Êó<è êëzÀÈ2È/«;ƒÎõbG×5°sÞI±±u,Ïsx¼Õv*ñ4 ÙÆþNþÎÞÞîȹ…8nuŽpÙâ†+[+óT˽i)¡QI¢¤(qBDFDFH¹À§8)ÆÓ2^;v}”gbRâS W¥Ï½ØzÅzÑúUÞÆc˜%fUø…&y¸O2O´˜ì‰ÎÄ”cn$/Ëpn¦`ÕR‹'ÝÿE-šÆÃþžÛ™ ×e‰öÕÅÆ‹wn Bfì7$/ÃÜñ'0®9€À4ò”uó žgkè6ÏQË™ omEZ)Nú¢Æî*€y’ç{´!Æv“/¡6ó!/XHÅ—|à=i–Åy^cHâæYÜd/7GÎß;ŒœW”FÎOh'[_gd¯xH,6%5>;=Y”š&töû<ÞfÔ£v¾6Dêa¤ê"Ø”<&o«›®¨Ñ¾Žè,úâ¹Áþ›7mÞ¼I+Ü3Øù1^^¾îÚ.`)pFÍ *ñW°X3+ãÌñû²ÂµÄ[b6· c}Wj[`¤?rEÞ^®®îä-vÓäGmèné=ßYËÂ[ô:YÍõ%þzâ!ôÀ·=Y°ðv›•ÞKÁþY, [ð†—b4K¾W„Ô_ùf^MaZ¹GRjïLèBR*ºk É»‡{ž ¨Òˆ¥Ð&Ä{ëäÖu2ñüQ‰  E¤*Šð\-ÂChÃ\ëÈ5ˆÁô`¬?ÁžoÕ'îÎýHƒZWäããîéá¸qƒ§%bF-úºƒFÅOª+ô‹`ÀƒÎµÄžá6÷R¹Í~ŸÂ°wb~Ú%¦GÙåôI&¥KPrPžU’1šƒl=í>÷4]2CÆo–®›Ï"Ø_ýyL /~$6ªY3÷V»`3~‹J«Ô«ÁÀW"T6Z‘N™Î#;‘/31u¸Ã§rø-¥F³e“ z!ÿ{x·=3tÇï™Òð^ã8N™¹µ^ü#ïØÅÉ:vƒÚéØÅuªc7ëÙŽ]œJ»w@Géë«ò©'‰D0¸çm‹ÝøYÙ‚šH5Å’›RN0Mï#À²ƒ™ör˜Êéï•,¢vn.=$Ó™:´Y¥hÎ>¼–b+[x8*ÌÒKÏNPGVò7¹fÎÇ:+W;íuk ëFX9zé"­È5Èv3s j9($0“–ñP£Ý¡ÅâÛC5·½¼;?£í×jÃGQ°Y†ÁEÄÞk\̵ý¾ÖðAGg;¯ HKÐG„Í\£Ióð¡¢»(okV¼ôâÃo”íÊ8….kµh0j_loQ6jýŽ¦È§‰. þÇÞQ0l}ñ©aëOfëÆŠÄŒ HðZ:Wë%Ð]~~1žÓ惧9Ëu*ð¿öT¾¾$G“ܽ5—½è;-óaVßsïøÔ°i¦¾‚üø»Ò»—ß;û¨åîe÷N±¿¶prê07]Pœ–°Á;è$þ,÷ Äú õlV*SÐøö<èÀ70`4L߉¦# ›%‹2 LN÷tšåYšð _²ª¯V 9V(»vD3r”O2†ƒ•ªóI²iX p‹æ©N)ñ¦cÉE”Ü‘Œf±§hÉý–`á+Ih­VÜ,U,âí»>C¿ÅÌÔ9Öø¾©àž’Y–3®ß>)™F·á=<(c>\iŸùpïÿóáJ3óÁ ,T^‚Ò¬É ¦IG–Ö6™ŒyvÌD±Ôœ?‹”H9€º"-ºÍ’ðÏÏ«ƒ§—½¥86;ý)Þ\§ô ~ÿìG>†C;½ÝèŽÜ2teÿ‡‚¤’\aêÅäîn=-w×®ÜÞ±gÇÎÉÇÚ°JÖºP_j3ë[­šðj¸¥î^Œ\ ï7x)äÚ²ã«oÚ†™ø!³¤^í¬ Ð«¼›=q4‡°ÆÊ©‚Ö"£TûÇ<·í>e „H8™D M…³’)}c´±ü¡ê¾ïj×2~ªÀ‹Sã?x áÙÜÓ»@ȯùÛuøð„ P‹ ”k4~LÙaS4*|Tv|VraZÂNòe(rã‡` Šœ4T+è³Ñ¦óLyòB`—ÛF[R˜Y“éK^뤾d}gô%¯)Õ—¬q}IphP‰Ã$Ÿ&j8ÉPÿëy¥™4±iºËYG)Š2ÍÇ´“­E ÿ¾¢¯ÙÌñ/8þ[4¢Úª™¦(yÔS¦»5 “¿J=ébñµBü˜*ŒRÕ>_U{K¥ªö M’±Çå[BÎɶ„ÈôÐ a¥L„Œ#µõ¿¯ª"7gŸÂ5!y¶´¯BíÙ–r€|ý˜–z RZäËëw5#•‡£¬òX)­<Ì…Ê#¬¹òj§çõU}Öb Drìg}~ú Ô´[íôÙEªæÁRï×½ÛoãW«*ÿÖZYö„Ði°sr+p!VðSŒ/1”Žˆ EF` 5Eú±òž cI¼Ûà¸g>ÃÞùÃÎv+ñnde´.È.É=å ¨ät”ˆ|ñG?¹Ž·uÒÆÃ\<]êâŸtdÅ4±â,ªÙ‹…Ú½ˆÿ(G ‚/¨Ã‚ ŽßbÝÓ®^šIzÛ¿yHbãûÅG/Uе8¹Iz0åVJì>ÄüBMÇó5vf-Ñ™°ÌN*8HB¦onõZ¨½)ŒÍFÂeŒÐÍ1A¸6Öq·ÐWÒÚÁ€ðßAÁ#ð¿Ïà)ÙéùÕâäÙ©œ§wvBrU`8%4¼•è(wã$ð.IØ`(LFÉ0{å)Ô„ð[&@OâW`èÝáÛSr3˜v¥°Ø ÅÍÄÊÀ^ß›/tð`zB˜ÎQá@ƒwhãOÂnq='N¶”Bñ×8¼­8çÉVâœhaZÅøk8.Æ5/ CñˆV°…³˜.v»ÙÖÇ•ô\=°²wT‚iÇ4 gÅ>¤ÏõVIH´m&àxeÀ‚œjU½ÚN)ˆéŒªªþÔ±::Ûj µÜó—-TU߿עª:>WÆ`«ÞgßoR†?>ïr}ìƒ^,GÜ8öÏÇÎßëN¬¾ö]:Ã>>•›sôXoTå¸Ã$g]Öª8}d†Œ¼\¼ü=‘òˆôO!‘OqbĤçäî Îᆋtüð;øѲåû'h¥|;dÁ÷ºóFÍÈ>3Qäè¸Üo+ÿã¯eøMË»àUå2Yùƒ’×*+‚XNki! p¥»¬ æ)ƒTȶü;kï`„Y„¿¶´prUwÞõ¾rÁD8L]ýR›½¨R‚oÛwªÞ/'÷(æ‡%º =¡}¡qsFó í£¥-ÂÒî f¢ä-nœ&löJ[`æáâädïÅÕ™F[„[¥t&•8¾•+; hžr™\«ÎwSó½ 0¨pxkWÀ?Nn R‡¼¸’ÐÜÔ¬n‘š²Y¦™c =K(ô}šA¹÷ꚡĨ· ‡KűĤíœL76™t¦{ª`Òž2é¦%FĦ_ã£FÐ’›´¬3D®ÿ:{C8ÖËo ¹-VrðÕ4ƨÖþÀS‹AôTÞŠ€“\£f‡³É|öËIm²eóÂóV·àÁ©¸öeJ;º0оהn½WFè”/ób5XBl ò,g ËÖc‘ »Iì‰g€§¿ç@¥ùDøÆlŠAZ(>2¬ ˜¼à¥.tq@˜ç®~ðfM<]щF·'æ2h0¼©‹Ü4ñž"t‘·4u‘y¶‹|âe!†VŸéÖàŒ®ðû Õ²€â¿J= ¾âBñWFy€åñërœÊ´œvzU jt>áжÝÛÊ+R ½¨ÜvûÊí+ãf¡s†ãGZ»ášä»Bá+ *ÐØÅxbpo*¤>(¼ð‚>Zèšõ‰yÕóª¿ÏŒ¡qVóÌ[h!´¨&'Í-Õ+ÕÛmY餯‰{Q‹]Ú¦ÝL‹|ä ‰×4öN>Ô”zë‰Yn& &øµeßP8¨j¥ï) »áòŸj•üî2PgJÿ"Üýòo³F. Â4n¡¢¿ˆÓß®[¡sÁü:ºŠ.e®¼t¨ì/é0þü|ˆçã!øýaøÛ´ù\¼‘sÄÿZ¸hêÖî°ƒž²·’³Úæ.¸³’S•EÀk¼¤ŒÖ"°vHÖ4¹3¸´|”Jøê¦ÉÙZ:èÆÈÜ•h%ZµÑÚ‚©og KÁwþEÇ‘zh[`A`‰U ~S—ØJÔ`‰NÒ^yU`œ7²Až~î^.øSl¯‰ÂXß8©eÆDänÞ‚¶¢È Yc±< Æõ>þzáEš¸‹tÁoÓh¸§çbèo6»F¡ =ô¤a غ™ž\¹E+â@)l QרiY¨ ÈsžŸÇåþ ‘£Mé‚ÿGÇK ­?s˜fÏLJ…Dkwãû‘Û9Ò|3½ØCð?ÁUPltGkI³ îOš=Բрä >ߨjÑG?Ò¸ÖícyÿŸT¥¨ƒªtéó.a³jQ¬¦rÏ—­ ™ó@«ªÔ÷¸õȋĀ^ìã×X~€8öžŠ•N¤\‹È}.®Ö ¿\³ mšT·”E¬íõj0£¾ž‡¡ çÄ»åÏþžŸ5ö{UAîÙàß{>J TUÛîÄÐØ&tâÇH%Î2¶ ýtáÉü —wÉZC?æÆbjŠþÇh0šRª{Ý¢ÆcϦ_~ åvÏ©tuùrÉ÷9ߢÑhœõì¥ãæ¬úán ^ïàa> ÷o·§´sa#ÿªÙ{=@Û ’±,˜/Ãr ßE†|ø!ÐÀÉ`ó|°GC4pJö‚©$˜¢»= DÂA:|Ó¬©$=I¯'è&Ðì5ùƒûûûR*ù¦v5–^깺”Õ™ ý~RƒG·Õ³!sÅÿÂ]ž‘êªðEëDS-ÖVAªKgɤO~kle2aÓ󛬃Iªb%™Dã®zA'ã(¹å£¯W¥±?**Fófq³’zµÊ?îßW'Yè.·ÞŽ|a¢]ff2ùB;Yˆ´±!K¶KÏL%³!ÃùøøË–Ck{PÅÓ=ë;؆øçS›pwé„yZÁAÍôªWi7/AÓosöï_,u ×߯%¬%kµ•,{9ÐÏ»&MƒM’mJcžcSÁ+I0pß ]šQ ,”ѱ`ÇA?!ˆÊÇî;bõPG žâMó]é»Â"KQŠþ4hLþÆjÙFeôßÇÈê oûÙ;ûyº"Ai ˲Yk`»TZÁ&?«5Ð_ÖÃÆÉåK!»Š; œH$Ê^"ciÅm‚Á-’Íj[ì Fùdë Ä-Ç%ù{fÏwá`>Ý©#Œ|Ü[BL‚S¬UŠQÇ|åç(N3×è,·!ID‹è7²ÔÿüÜòå²aALì¶# ¢·¤ù"Ã`j'ðcþR}8\ø0àòËís˜~ÿÄaºÜÌa›`ÇSø\+Ên¦©c¦©×…#eIÿº†ÃŸ€™*úæ–Û ^’¾¹ËCZ*yczB|L‹ÕBœi©È¶£!»³%d]lt¦Ø…ì‹‚òýS€0Y"×ó¤R¼¢:¶ CaAá Ö£á-†yð6Í>z¦Sôk{FÇÞÌ®¢w[‚‰·êÃkÃI¼­í$Eë~g(ZµJ)Z÷_œ¢Ëÿ¢:Æ KþS%ŽòZ*‘Í^-’~¢+4>×Äå?{(à=¾Œãϵ¡°zmlžœÛ)i §ZŒõøG”BZZ;ËèW·ùû¥,n•‚P;I¡¼ÉyGB?º"ùŽ„¡÷чNe&èœo|ŸzAÖíUØ<­6Óÿ¾ùЛ€:or‹ ¯eA] /âØÇ AÎŸÊØ±j/ÛíIqk%ÀÂÛy”ÈÉzÀ²‡ê*}¨ûUéEOkîE_TP^àùf–Nkœ/ÀR´Ò=hI išk":ŠÄù™HM÷K¡©[»Ð4\€¦¹xõÓv’"ØÉjÁN"ävÒÜÝîÆ‡¸J ªðF KtÈÝ]ߣ޼pÝ¿¾†wI)9¬J¸/‘Îî M½5ÅCr?…Ñ$Ë->Ì-ø×äB([ïq0ª¸âjoè™=˜1\ççn¦íìíàE2õ&äɰÿé¬áD|\O#…"ß=J+ëûœ<²ð;¬1Öq†h‘ñ~òñ ¿›7«´\(ú¾!Y1Iú×. ±®Ì?z/"go,Õþ“¨ãk!JZ Èv’jÒkÃcód´R)¬y™9?§¥A&”¥Ý•+šã:Eʾ¯±YAÃÛr¨ açÕáWÎdDçhûIUBnïÜwA«`µSûÇöÍ®3úÍŸ‘#Ï£’Ty/ò± xÞ“'ë3î[6¡eÌ,#Øz.Âïc•šGKfDSͨӶåèc*1åiÒ£U´ÏËžGû¼U[Ë …+¯EÞ÷ÏÀ'iLæ9Aï¼éñz±Ûº€™D±§<‡æ=ÞUHtCö§.™¥ù5½ÏΨT¸±:ºKë•Õ?u¹•’¿¯Ï®ÂÕ‹–ë4í¬>åQ½Kà:.Ð/>­+rõÒ`·wIYU8òÙ”ˆ{¦Kp81¹>*rÒšára½ü å÷½~ØŒóKTÄpð?Ï"X%, wK®¬ï±•ÜñéÆð+0%CXžÛîÊð«]šv†U¼3ü^›7pµËÍèì‚}v•¶Ú~ÅC¶6|£¡h$Yqœ;¡ Îɱg½{.®¿weAÞv?ïüüóŰ #¬ÏÚ»ð;]öWÚ˜È/N„E‰TöÛuïd‡¿ûn]ü»ïuéòžs_ endstream endobj 68 0 obj 33920 endobj 50 0 obj << /Font << /F8 7 0 R /F11 12 0 R /F7 15 0 R >> /XObject << /Im1 47 0 R /Im2 48 0 R >> /ProcSet [ /PDF /Text ] >> endobj 71 0 obj << /Length 205 /Filter /FlateDecode >> stream xÚuMKÄ@ †ïó+rì&|̤³7-èM˜›xZ]w) þÛÎz‘@yŸ¼Iâ SM˜Eátuß.bZå­®MºMü×è¯÷“{^cö ì6«ëÇ –Ìê81š0 Ô7xéÆÏߟwD¤“ƒª©;^&غ“ŸÓWÓ¨•éì_ëS?íŒ a´å‰Õñ®‹É°†j PKj5hžÎì\)!Å<¿(Š’ø6΋èªûãÎKb endstream endobj 70 0 obj << /Type /Page /Contents 71 0 R /Resources 69 0 R /MediaBox [0 0 612 792] /Parent 36 0 R >> endobj 49 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./a1block1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 72 0 R /BBox [0 0 391 258] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R4 73 0 R >>/Font << /R10 74 0 R>> >> /Length 75 0 R /Filter /FlateDecode >> stream xœÝWK7 ¾Ï¯˜[¶ÌŠ¢ž×¹å’Ö@Ω³IœŽì#(Ð__R5š¸q`O lRŸ>’òÝlg#Ÿö}8MwÓï¸ùÓÄóqBç;[¢1ͧAc ft!ËhÀ9–m»|àü«ìhʱîh ]®6xG×°­Â© !V›j£ÊbC½P„z© Û8ÓÇ—“ƒhõó?Ï8ÌÏÓŸ=ÌH†à0‰®‡)yàQÃ*¯ÁuDs½3¨\M¬±a¶¹R6‚,¦ÖóSymE¨×ʰ‰¢Üà3lsi.%pvŒÍE 1¬±¹`ÀÄÕp“‡Ø¡®+C—«!8o\ål CµÙl4y®#š—aÇöÞž]pru™K1•¶ÂŒd™59Î>È8[ϬÁÏ÷· šq¹#ñ¡DcÀ¦®Y$/Š×> endobj 73 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 74 0 obj << /Subtype /Type1 /BaseFont /Times-Roman /Type /Font /Name /R10 /FontDescriptor 76 0 R /FirstChar 32 /LastChar 255 /Widths [ 250 333 408 500 500 833 778 333 333 333 500 564 250 564 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 250 333 333 333 333 333 333 333 333 333 333 333 333 333 250 250 250 278 250 250 250 250 250 250 250 722 889 250 250 250 250 250 250 250 333 500 500 500 500 200 500 333 760 276 500 564 333 760 333 400 564 300 300 333 500 453 250 333 300 310 500 750 750 750 444 722 722 722 722 722 722 889 667 611 611 611 611 333 333 333 333 722 722 722 722 722 722 722 564 722 722 722 722 722 722 556 500 444 444 444 444 444 444 667 444 444 444 444 444 278 278 278 278 500 500 500 500 500 500 500 564 500 500 500 500 500 500 500 500] /Encoding 77 0 R >> endobj 75 0 obj 958 endobj 76 0 obj << /Type /FontDescriptor /FontName /Times-Roman /FontBBox [ -168 -281 1031 924] /Flags 34 /Ascent 924 /CapHeight 676 /Descent -281 /ItalicAngle 0 /StemV 111 /MissingWidth 250 /XHeight 461 /FontFile3 78 0 R >> endobj 77 0 obj << /Type /Encoding /Differences [ 45/minus] >> endobj 78 0 obj << /Subtype /Type1C /Filter /FlateDecode /Length 79 0 R >> stream xœ¬{XW×ÿ™YvgÀÄ$’ É®ÑÄ^EÁ^ÀŠP‘.eé,Ë.°t¸ôÎKï½w öÞkbPÓL4Å´»dÈûþgYI|ßä{žÿ÷<ŸÌìÌÜ{ιçüN»³K€‚xÃÒÝËÙÁ^‘—ƒ·úz¾j*¡zŸT}ÀaV1¿ünÀýÌ‹8o–|„àʤ÷uW½óþÄo½?qÅÛ„% ´Â%xOà+ø~…Q‚KL$¦Ó‰„±’XOl&v„5aO¸¾„˜‰D&‘O”õDÑOœ .wˆOˆ/ˆçÄ/Ä$|ƒä“SÉÈär¹ŽÜFZIgÒ›”Qd™Ad#ÙNö‘§ÈËäò3òkògr”ÃåLà¼Ërfs–r–sÖq¶s,9vŽˆÈ ãÄq28œ N§•ÓÇ9͹¹Ëæ<ã¼äü¡ÅÓÒÑÒÕz_kºÖ<­¥Z«µ¶iYhÔrÖòÑ ÕŠÖJ×Rh•hÕjµiõkÖº¤u[ë‘ÖçZ/´~Õår¹¹“¹Ó¸s¸†Ü•\Sî6®ךkËuâzpƒ¸áÜxn:WÁ-ç6p{¸'¹—¸7¸¹_qàþÊýâ½ÍÓçMçÍä-âñVñÌx»xxŽ%¤fR†Ô2jµ™ÚKÙSŽ”;åCS2*ŠJ£ò)%UAµPÔ)ê*u›¦¾¢^P*êwh=‰Ö§…ôzmD¯£7Ñ;hKÚ–>B»Ó>t0FÇÐIt&­ K麙î¢éÓô%ú&ý€~LMOÿJjs´u´ßÑÖÓjÏÔ^ ½T{¥öí­Ú»µ÷kÒvÖöÔö×–h˵ãµSµs´‹´+´ëµÛ´{µOhŸÓ¾ª}GûSíϵ¿Õ~©­Òþ·OçMwu¦êL×™£c ³\gŽ™Ž¹Ž…ŽŽƒŽ›ŽH'HG¦­ƒt2tòuJtªušt:utNé\Ô¹¡s_gXç+ït~Ña&´'¼=aòÁ„'ÌŸ°dŠ ë'lÙ(ò ñswu ˜6Ûjïþ9óæÍÿëÎb“iGBÆŸL3uöwwõž6“ýäì)òñröX9m#;ÚÓÓÝqš«gˆ›ÿ4''g'õ´}žÎÓ6¹{ºûøˆ‚¦ÍÞ8gš¡ÁâìÁpå´^Î~¢ùÓܽ]ܽÝB¦9x;MÛååìê0ÍËÁÉYMÀÔË=À/dÚRwï?gït÷:è?mÌ1§í™L3Ÿ¶×Ù5ÐÓÁïïOÌýD¦ÎžÞ¢gß@OO‘ÄÙÛÕÙÏÁÉÝ‘½rö÷»íèååà.òvõsvpö»9.—ƒ_€»ƒ§“»‹‹¿£³»T‡ŽÎŽcÇŽ~"oDZãæ#~¬bÖ]ÇŽ[DŽŽ¬ž,^Í]ïåàÈupqw_l``düêÃÒå¯>,Y¶wŒî«KC#͇ÅK¶Š\EÞί˜Zù¹{»¾º2^lá(b¡áe6&Í«GË ÖÿÇD#“q–ã¼—,ßûúÃe;_“`±ÁÒqŽK¬Ü=Æ%36´<âàgöçÇÙ-~õa™Á8Ÿq†KŒ÷¾&ä+ò&KÆÙ.ßùš‹ ŒÆÙŽó7^b96Àì?4¸Üpœß8c£qÆKÆïü;cƒe¯ž.^¾õõu™íwt÷s ôrñt³^jùºzÿTûò%ÿ6vÙ¸@Fã-ÈÐd×*Æ%·ùbãm#c2.ž±‘ÕØ$³ÿ°âò¥ÿ[óF㌗Ž3^b0ÎiÜÔ‹M¶ÿM&Ë·°–g7Îw¹‘éë¨0·ÓÒq6Kïr dUáèåéø§ZÿTúøªMŒ­ÿZÝ–¿ëv¹ÕßÉ,_fÊÙaürÙ8ŒÆÑ°t\ž%†»^ÄâÅj{±ùëžd2.˜±±Õ"hÜ ËÆ—n4Îmé+nÆKÇ-yÅvñÒñ1††æÿ[›1®[·³3±ÒXnóß–¾|Ü,ËÆE0çó'ù%ã 6\bþ ^ló' ¶¾†-ƒÍ7ôr‹×5²lœ½Ñ8û¿–ùçê–š«¼âfè ‰jÿ¡?“Å›ÿŠÆ-Öìu¹–™Hþìú×g Eÿ¿î8þ9Ì{LfÏ1%»¾¶(6’û¿véíà#òðù¸±cÿºíú'@u¼tÖØâõyc„=ÙaîšgcÑ P#µF.ïׯ»±¾"{èö—´Á} |Íì`?Î_× cê7vý7ü—-^bdèÉ.Öß}L”€×¸û½öY¤¡uô/Þîcr…¼&Œ†«óØý×Wí~ÔyŒ¹ÓØÑƒM|ÎÞžlvwt×P•ŒIíü§öœÆÜÑ_“ùþbà9v#ÐÛM'¦š“™æ´iìdb¨9-Ñœ–Ž 4'Í#͕ѫéÇN6,;­ß 9iFn2;™inšinšjHoÔðÛ°\3ACl½†Ø&ÍÍMÍ3Í3S#Ítœ4ÖkDZ?Fsñ2 i3ÍM“WBhnšjäܨbƒ†Ñz&Ö/ÑL×6ÓÜ4Ó\™j„ب9mX¯™ QÝú1bKÖ¿’ZsÓLÃÁTÃ}£æ´A£‰ M¬W/eÓ²W²˜hhnÒ<3Ó,ÓTssã«y…lÐhbý2ÍtÍHÍMšgfšešjnn|5O£ M¬_®™®i¢²é•ê4Ë4ÕÜ4Õˆ´A£ …¬7ÖL׌4ÑÞôJušÕš¼Zƒæ™é+ hÔ³A³è1±T^MÐpؤyf¦Ñ§É«¥hž™jÜøJ$ ‡õ-™hHoz¥WæÐ<3Õ<3]ÙæëC¼ìØ 9YïÜèãl³ËÔ×e·™ŸëžMþn{7¸[l úýú)æÉéÏÏ<;û͹oÏ?¿øòÒ¯WTWG®,€é`»ÀL`!Ì[Ø f°ÁG°6ÁJ0€a/l†Å0,` Â,°„­°fƒlƒ¥0öÁv0‚¹°Ìã°6Àr˜Ö°6‚1ø+„`Pàn`ÐÀÞm„£`Ó€:p>„÷`ƒ'8À*˜ o€¼à¬=xHop„5 ¬…)ðh±Mv(ø€3¬ƒ©ð6pA ¾àëá}xx ƒ,H€0ȆDrH†HH(H…hHƒH‡XÈ€8È„x¨ƒPÇØÖ=Šá.ÛÀ÷C'ä°Mü-8ÐJø nÃ8íPU0 wà B”C <†j¸5Ð M Oá\†ÓÐõP eð \…“Ð P ŸÃ}¸ CÐ-Pàœ4B| ×á ôA3ÔÂCx_‰gáœ#‘D$)D*‘F¤D&‘Ed9D.‘Gä ¢€($Š%QL”¥DQNT•DQMÔµDQO4DÑL´­DÑNtDÑMô½DÑO ƒÄ1â8q‚8I §ˆÓÄâ,qŽ8O\ .—ˆËÄâ*q¸NÜ n·ˆÛÄâ.q¸O< ŸŸˆÏˆaâ1ñ„xJ|N|A|I|E|M<#¾!¾%ž/ˆïˆï‰ˆ‰—ÄOÄÏÄ/įÄo&TÄñ;Á£ÄÄ¿ˆ“@$IrH-’KòHФImR‡œ@¾A¾IN$ß"ß&ß!'‘ºä»$Ÿ|œLê‘úär*ù>ù) …ä4òCr:9ƒüˆü˜œIÎ"g“sȹ乀\H." ÈŤ!¹„\J‘ËÈå¤1iB® W’«ÈÕär-¹Ž\On 7’¦¤¹‰ÜLn!·’ÛÈí¤9¹ƒÜIî"w“{Ƚ¤iIZ‘ûÈýäÒš´!mɃ¤yˆ´'“äÒ‘t"IÒ•t#ÝÉ£¤éIz‘Þ¤ˆô!}I?ÒŸ É 2˜“!¤„ %¥¤Œ #ÃÉRNF’Qd4CÆ’qd<™@&’ˆL"“É2•L#ÓÉ 2“Ì"³É2—Ì#óIY@’E¤’,&KÈR²Œ,'+ÈJ²Š¬&kÈZ²Ž¬'ÈF²‰l&[ÈV²l';ÈN²‹ì&{È^²ì'ÈAòyœxGäàׂ0„waZ|¨ þ Ó­az ÌX3öÃŒ³0ã9|ëÁÇßÀLf.„™ö0³f¾€YÑ0«f†Ù›aö~˜ sÒaN Ì sÍaî̽ ó6À<3˜× ówÀ| hX°X‚oaáX8 ‹‚Á``ý°¸¡=zƒa*,À’aXú!,퀥§Áh!£¯Àèß°ì,û–/‡å¾`¼ŒcÁø$ÿ LvI¬ `…Vœ€•»aåXå«ù°:V߆5ó`Í3XëæÁ:X÷Öo \Ø €f°ñ8˜nÓ20;›¦Â¦“°ù0lö…ͿÖ£°u›E`Û)Øî ÛÁ|.˜×Ã쨃$쌀ù°kìúvŸ„=»`OìeSÒK°8 7ÁÒ,ŸÕ*°ê«`_ ì§a4xÈÁz:Xïën°Y 6·ÀÖlƒƒ[áà]°ÛvOáP!Ø‚}ž‡oƒƒ8<ƒ#iàh ŽßÓNpò§jpº N/ÁYœÀ9\vƒË]p­·5àÖîÁ½ŽúÁQèûúþ€~ô¿ ýÝ0À‡t<ƒwàØ8vŽ[Á s8¡„Õprœ<CïÁP8 ÅÃP:œš§Á©Q8ÝgfÙ‡pÖζÁ9]8— ç§Âù›pþ!\Xúáâv¸8 —ÖÀ¥,¸¼ .o‚Ë÷áŠ%\ù ®zÀµ`¸†áz ܘ 7uàfÜü nþ·~ƒÛ"¸}îXÃÝÍpW÷îÁýáþ¸ÿˆàÁ<4…‡×à“ýðéø´>­„GVðè1<ú>s‚ϾƒaoþÁã?àI çYðB^tÀwÎðý[ð}1ü ?ˆáÇ™ðãMxy^þ?ÕÃÏóà—ðËø¥~Ý¿ž‚ßæÂog‡þ¨ `¤~w„߇€ÙL0O`T̆?dð/Oø÷"ø· üÛþý ±Š`벉àØZ“ ­oqÊDFJq›êG大/'ëú¨nà |‰³,@*qs² 1FôÞ†°ô&¡Ê‹B7óó¦ÑJ¦IL݉ɓ!3zt7¥Û‚ÌdÒ ±´˜b§7ñúñîĤÄÖª‹‰‘}Jþ¡y¶Û&YuY/˜Ç8†ogf†‡Ú&英’² ΫÎMÉOËöbm.Vð:æåúdø"™>ò“DíK¤Å8“ ÃÙ|LájL3Õ܉ªxÆû¥ª_A¨Dª}|fª”W_—-œËÔ0NÉËC9ú¨H‘Ñ•L+˜#2ª2®0"S‚yL¢^J”«ںÀIõ‘4À\â%ó ËP ŠL–§‰3$©Dû­÷ë¼Ú tRˆªæçÕçd—§è³ü‘B5eˆ¸4ŒM‡9ªéüô”ì¤DWgIm„L…öFÈÄÑR즠¤JsQ3©þžÒÜD”{n2Î2“X«9)(›´ð\4@ãêûSëí<%Û7 RÑÉ6!î–¡,ÇÝò[*n îsTÓ±ßÖÌÕ/¢ ¶‚©Ÿ†n~Úœá’-LÌ…” ýÊReÙ)³¾å6‚]­íE›Ñ*šyïáBÌéi/¨kT•+«jÏÒc¦—ŒÊIº%#æ#sùL¤˜w2¡  iDˆ·+Ãezgw>öïB¥ú¨X‘ÙT¤§d†ÄÔåø"éwŒÌR=f1ceøalÜ8Ö¬2%µ'5$•!…¢¢¥OÀ³õ¾e¦5ع³×=ŒBBånIŠH W›xPIíK—f>ÃXâ*=<o»ü 8÷RªþÄßßDÊ-%ñ¢[Uô’3²Luƒ?jM!ãð°U,êpƒ’Ú&ËG7iÕn£yywÒYŒÚRŒïh2ªJæ26bޣؼp´K¡dbãv^¸’Z“*)C?ÒªYNíãæó&Ž,bµÑ‚;Ûqn‹X9éùKûr¦&ë6²ªSñ¹h½÷h}X˜q¼õÎø)ïºYÒÒØ\_܃úQwH»gW•Oî¶‚ãy%Ùå%´nSE©¢¥c Ö2<ì˜0_ð_ ÞØf)­ë|Ú¿ÊÑ| ² rr ð9µÑ6²¬z!îÐbÁ »¬$#K!èæaê¼­áê}ö „,P­jJ-¡Z†§òCRåÖ1¡a}™Ä=ò¢—ªæpÌT<£Ã-âeÝV(Î! xŒrtWªz“bñ+¯VVèKœÿ%§¨ó™÷ æ1fê³™xžôüW,À“}˼+ ñ‡ÏÎc>`¸‡6¯sr)oŠŽ‡Þ`þmß…›5­ãª),­'8x˜ƒ_ÈùxÖqn’˜€âí•Ó+T]¢b“m%nòíýP*3)e"º%K~DÈPÎõ>9ެäÔBkÓ™wï.Åä©Öâ¾Fáv Z(::\ì'÷F´±å'ø-̸sïÄÀÁ}Â1øªÁ{YhX¨á+óŽ'F!$ ”23˜ =f6ö‹(ˆ)‹ùYõÉ©(å$±8iSý ù²˜ñdÆRÙ@¡¥r¹A ³JÊ0Y–‹îÑx…gã óŸW–c9âQ"WsÄBrI÷dÝ•*‚¯*£Ð¹ìe^~v~jk*K;\LµÆçÇ)"‹eY®hÍ|IòUb.³VÌëBùQíéÑ”®øŸ ù>ÅRÝÉ‚’…¤¬[e\‚MÚ „iΰ/qƒx1A¡áÁ(IS¤é6Ö™‘ 2öÜai¶Ãy!bH´°ÖèØÞsÛ¾vþa.ú¾÷ü§tHÑzÓ­^ÆHßYnµðüa·>ÃÚøãÓǃÛõ ‘r­Ž±^…’"¼§^5ñܤÃ8ðÉd]i–ê~VRÊBtc†ü pÔÒ@û#"vÇÐJWŠc‹xë’ÂrÐE/¦šŽ–Ë;Yìé|µðÇøm³/æZØûYÙ ïS1ÉVAna–}óc· Þàäáó/œ>g§Zã÷ñ4l÷½÷cËsBóë˛籢ՋzCš=NÚÔ-@Ì´;lSðþH?‰_@€›Û¡}È*r«Ûß{ôGÖVèeõ‹Î>º­k t½ ß-ªÇêhõùK“u Æm [;–•=q Óè—† §.Ÿmù½@_z=°Ú|!š™­[È”‰y£³"ÙÈö²¯ëY—“Ùñär¨{¿àU‡b1:G–¯8xÀ{OøRD;†³áI¼÷¼jRµñ$ÖùC‡'ë~ŠGU«ùº/ªì¼²œ¦2ïÌc´X%LºbøÍ™¡Êþn!ÃN‹©i,-Áù”enT&ê¤u?U}Am`>ã#ÿ¸0yT øh¸'òD>ÙÁÅ5A—ÑZ÷Ö9qçñ…º£[ñ6ûΪ'>cÃÍuþ Ó¼3ʺ֒|¹w‘ À7W^ˆè2eQY³}å®û|ì|…¾öQ®‰+iGÌUÚ¾Qxó”IJDºKã«x"O°…Ki;Tësø%Uëó>„»ù• …‰•è:™ÝU~®¾ù<º‚:e­>5ŽÝK«°Zü”)óîDeËÑFzÔŒBË£äk£5ùiUŠ4ݦUAZ¬f22ªðÔ ?š»Ûš¡‚eIÉMÖ‚»:îc£V±¦“¨¾Á«ù"ž5‡ý™ˆöáÙ ‡´èŒØ”„THc„R",Ϙ.ÃÒ^ô‘8i„,L"Š:È‚x!öãU§§W ðTëþ¥ÒÂÅtO·+ÏàŽV³¢þYÂýUÀIT-¼1íâ¾#ns2TSøù)YI¹ˆ®È µ2)²ŽŽÞΪ.ZAmN‘(ÐiRõ]ƒUéY±òA,'&ÑåŠÂꆠbwïSá×lôßè¶[¬?VºÆ+ðѶ´êIè†÷gØì~UÕd]FuT¥Ço[C³-8#0SÏ'Û'Í—U-^¸~£y•ó•£BqHˆ$&ö¨wX0 FA¹áÁ´.cºßç¨Ë”}쿽û ²ó¸ µ®°µ¢ ;×§0üt½}É~Y¨74Uef%f$¦ eB^b:jA튺ª†jED5±e²zš‰Âoˆþ$fÑ_5„¹îYëÄp—ì©é.ËÈëêâ4üŒ¶º©·®RâU (r˵CN´…·›Ý.‡ËϬ?2fE#탑=Ì>ÃKYÙ½â—kyÍ…½íw®´~5tí˜÷ñGlœÐD û9µ&g· Úêƒoú÷Yê][…ß<Œ— jÙT•Îc¾9ÃïB½â&Ï“¶õóÃE³½?v´s9²?ÀÙ"ûB×ú}}? ¬ž×|×ÑÛÑÝWr†c >ÿØúEåCù,h¨ð•!Ò•,\>VÃ%M —÷_‡Ë‹ÿ† ‹l㈱ȢFöšT¶òºEcoü1õ)*”æ®`ÙéËKCKT‹‹ÃJ'¡ Øä‘ð5|•¯;?¿Ïà%$DF'&Æ!ý$OŽHcPf``ªïÔU{l´¨w|l+-,O­{kêT2ŽdÎs±oÔVõ„¯{¿:'³¿sæðë W±ÀÎ×-f^‚:YÈÚñÅ"Ì)ÁsÛÇ:ígÄÿÆg2Cx]ñ¹ñ¹QŠÈôt˜f–Q;}62ËgaÞùMõWÝ‚î U×Ð)4 ns­øTì¤ËxQؕȋ‡È‚…¦„dRØebu-½f1‡çT­;µ[xuÓsgL¢'¿ÓÔÞDc{ ÍÍ;“FOÄulùøF=qš5I&Ìg²±<;1%F-w¶›ÉÕûgÅäÇç£,¶£ÉÉhJ¡Ì)Õš!ïý¿Á´ë%ǤD§D¥‡¤G¥£t”‘§hÁïâ;z5×Ò3jShM04É'î²Y~„ÃgƒÕ Ýf+ ¢Ðþøøê,¦ ‚““Ùú¥I›Sx³+%.9>9>%^?SžƒbéÈȘpXн<ûO¥Ã1fÞ§WSuóÊ…ÞšL}Ej~2[e*˜Ã2^[bN’¡¨H™,œí('ꩌ©¸dçpï¨=¡ú^Qcµt·jDI|ùÿÑÍQaU.½Ì-x”Í*G*¦Ä¢Y4ÃöZ›£C½|l·{®C¦È¦Ü§/¤>ºEÝu܃ë'j¸6‹©‡1,\7ÐÌeŠYÿ© ^ƒ‰»M×ÚåY½è¾:YÉZUÿfûǬêTƒ|t;'çSõB»˜z¤™;êH ò•ÅdVD äM¡lMâàãÐáuÃù[øu:f­k¬µ¤Tctv4’ iŒ„ÏbÆOo9ô"„òôQiNF_k+{)Õ—Ql•!Χ‡0¶z³q~\vB6ÊÖG%¹™©ì¨-Rª,!S^zOe¾ÕËõÊ”¥³é&3/·’m§¢õ¾b"ò]RcÒ‘~JË*hg[öïõŠ:SÒŠYš0¨ŽJ־鼜¤Ü$¶é®Ï–±M›/…¬da汬…#”yjx6¢Uß°¶Ø/q–o’Œí7Qé•OBŸoúÏøt²î3ÕÎ+|‰,ò¦’Ù¡nú¢$B¡Ñ>á^̬QŽ3uôvTRè#e~¶ºéÏIÊW7ýJ15À6ý]†8q´WOÁÃ~ª3 srúSôÿÜPøò%Gµxd2?71¥¢Ú„Ü(¶à ð²<À˜1FzØú)-j\æ†gè;T“’Z­ÞÓ»Mã]TeɯÓï­;iŠüõ‘L-JŒEhlß댒ڟ$Ë6xÁÈpŠÞ‹w_»\y-M_É((—+\÷¶Sð ÷~CYU[PŸ¤¯` ¥TmBv ëXáá~ž±1á!aÁ²b=QgH#ÊCùyµI,š¥YT-*«;ø ó‘ÃcL¼ŽÈ£ÆëKñÇ Jž–—ž¡È+>Äo}ÅLKIŽA1ú($:vP²’|pœ¸1ŒÍÕÿ9JÕt~^J¦zÓ³2+ÔVȤ«1%µHd1å§ ö%KsP›(”œ™‘QQÖUØ„èîR7¶Òòb»Àˆˆ½êÜ  ö&I ѧQµ] E½ˆ>]äc,d\)´7*jO4;H¤ |“½’ÊP›>>Ba§sköðÝc%9í^e…ì‘HflNߥ¢“ˆÝ#,¥ê6C^¯šp‘¸2Œƒ?çà#«ù±ÉRŸ¨ƒaúÞêÒ-=)e º=+ÒA8Z@y>>ú Ö{‰I<¿µö›Y;÷¸Ú öiµõ50¸š™Èpl·›ì?TV!˜ø»©{¿«±g#æ‹e±çƒ‚b|å"ææk=F“Yš˜¢Y£dszyYöI5öŠÅÔéÄìÈÆ• &zÓ˜&æ#ÕÑEqc;S¥ùÇRØ! bêX¬"¤e¶mTÃs¡j%^:º’«à=ÆùÙÕ˜À}Êã9Y'²Ùü’‚ßÁù^~¾žÞ~5u•5u¾•^êöS—ðÐ%âô5Üwˆ?hýü»NQ[X/ÒïCmymÕßÍÑëœ÷¼¦'»õë£yƒw×óïôlûçÌsªrεEú6è¨ü÷¼çzÖ¶ßÍñv wF¶úè`®KÍp-ÿáåÍ&˶mYa²õÚgÃW®³|ßáàŸ˜5üMEµêÆz…>W®SÞ-VV¢ÏÆ®ï–Ö^/¢s¨­‰¾1Þ!Þ!R'´—f6±õsHÀ–à«AEþhͰÎdQp¤:¤:¤*æJ"«Ï«äü[Ô¨1¶P±\öc#ánÕø ñò w«·^¶peTnZNjjrQFa*›×J²¤Bõ®ñѨ€ÐHi¤,ÞAÓµ*)4õÓª ñ°ã*²{×èëkñâœ[Õ>ãČ͗#/tØÇjû2‹ëÇìŸ\«¯(¬®+)ËkB ôM‹ÁUF›79gzT­8~¸ó€)Z®?ÿòÞ_?=Wqå®àâ¶ß3è:ÝY{Sš£çáæŠ,Ðþ:»óÝg+ZêNVöê•wç¦Ó£Srø^å­¨‡î¯kìímtµ±p;lb/Ø´Žá5Yž6Û}Б--i³Ý—î_ªëzzŠU»5³°t„m””“Ð=¬såÌõfLäÈ»ü34á…¥¼µéácÅÜ×êíºñr®€bfí°dÞ[Q¶·ÏCØà_u1fNWx!µUeÅ7Êò8†ð$t3¿§¦„Öý´(¯0½­!ð–Uùí÷²Î¡ýRqQ€¿8$ T1§p±`">(+ù ˜@W8Weü+#›¶òXâ7®à)WUê=þhÒVU™¢¥ù ¶â=UÙŸÂQ‰ðü°4—½a‘‡>Åë°éÏÚî¡ú?¬¸?Ãr £‹ÀÃ]ê!1-‰Õkÿ®¹þ:¢‡Oï]¾ÚnárC!³‰Ùà WMaÓà“_Ufü« =çÑ9zЭ훀»G™¸9=#))]‘ŒP[Ÿ¤ÇD¹Z¹'âŸð• Ýî]ëמÛu÷Îùó·îï>·flã Ÿa!/ba¶åè¡h} É¹§©¼¬±>@éÃöµlã’€P"¢£bÒ3ª›O¶±¿ò1šu¡¯Xzod1ÿzH©ZG3¬Ë,Wúݯ û"ã±ëu^›BèêJRezMQM‘¢M½úТ²«%[ŠCÊÐ ÖG)t*´CT$*òMß’¤v¡j9_•†%Ü+¬ï°§”ʘ±eÿÔ/ÕT£ç&ᚇη&ëžÀ ðgü³¨,¡<’Ö-¹ضwÓ”å{·­÷ Î(wxI2ԯȤ² ·®À÷Vvô û:*Ï «èXhŸw]p©8×^I랸ÞWÑrrʧÛO-²¶—x¸ ¼|¤¾»qz·{."úr½¹«ÔÕÏOèå%’nö«™YOîgU¼ÞÖË×ÅÎt©Û,Äh#F·eÎçwØV÷È-Ð[yQÔäs×ÿjÄ=ôú%ïQÕ…ê µÍ·Î¨ üÊ|øÿeq‘‹ÚâªøNìǯ󹵣Ãù´…~jlr"ÛÕ§¥¦¦å9»æ…0>5Åd•Õ)ŠZºkš+ÚQ›$ÄÅøøxûFFGGGEÇ'èŲÿbâh¬»ûÿ–àDU«ÊŸâû:IÂ=Q J“dö±í6²CžAvÛOzèU¶æÖ¡T[ùÅÁ¢èÔ‹êJz/±swGý¦ê®%ÐU¿Õ}ÍÁñؘŸsµ°½¥¯÷Bù%õyͨµ†5”¹5í.³Bô"³ÆŽ…uå……åù1¹ÒBax~lʤë{kÎõïÛbféo)mÛÈmíõ³·ñ½ü=¼KkëËJkký*Ô½T<*Á3/©V¸ñ>Gå‰Cù«öØó˜«£{¸Ûq#³ò>^ù’b¶\â3Ñ<ŸsYóá5O8­ŒÿNmeKïͧMc›Zø]—K^é÷-Ý_ª÷‰y•[õºò-9kÑ,4#ÌØg§ÈÜËuãú/?½õ0(·ü0À1âÿÅhVÌ‹ÿ× Q/ý_¿ø#ÜÄ?4ª›ž†Âõ÷+E ŵýQ7Ão ¢{bzãú"1èÅà]|À /2ÿÚÚòŠÚuûúûYžÐ¥:TG aüæMÕ›íœÓÛüÕn¶ šYÃLÄoã Ïš¿9}V80pµê6¢ñbüó3g–ùÜ­¾aŠºŒ¤´¤táeœÁÝÄ“;vHsÜþaäêî¾oŸçZ¶'2o³èî«êi¤Û·x÷#úûǘƒùØ„™ßev0öÌ2f³Ÿ±ÄK™ÙØñÆ`^÷ !³Ze¯NPø'8%ØJvû»zú Ú% áøÉ¢ÁÆVau}SqyÂXóûÉC?¸ÁÁ[UŸðñ^JMNÉhýB/2C$ bs‚3!yb>ôcSã3ëÛ£Ã:˜r9±ͦçí\·:X’Qê%ð( Èf[oY¸ŸsŸÿÝá[UÇ…½=%§Ñ=tKÜk=hß½·ŒÑ)QóÅë”Ã&½$IrPŒw˜»~tHœEÐÁeI‘²$=>/6OÖÝÊ–·TF|idIHÕQý ÏÂð"¶ÒÈW”VJsì3„Né¹¾QizÕÊŒîŒÖô¼TA—I ‚¤’0‘¿ÀÏË/00<:N¯’BåéÕ9uéÊÔ”C—„K¥Áá©!éA‚ì£ižÈ‡£œKÄG›ƒËÃ3C-–†ûËú#…-ѵreXN´Þ¿Ð»ÈCQ’päG懕d¥) 5 ii™ÙYiM¥¯yÆéH‰ÿ‡žËXרv6&•|š~|rLZTFd–¾W¥wuBš¤$¨(Ñj̇U©qÞ]½nþá,ÚcSãÒS““ÒR§Oµ·Ü¾¨6JämY;öÕ‡Yª{|7ž=ó¶jX’ŒÁÛó>d¦ZZÕ8 ‹üa-A˜¹z¼,(V$"ýVÔ’_]ÞT«¬j¼–©·«ßn¤~ÅàŸõ#îÖ+rR„U º¢HYÙäSk«2†Ì÷|›qºE¿(ÚÙ\X…ç±ý=àÅ•4s„iã?ÜÈv¤ÓN³%VßàEÇ2«‹Â’‚º¬&õîþy6ÄÚ^!°è 'ã6>#ÚŠEŒÏìÃÞbDØG]wÅ«ýßY„1ªú¿3î ¶¯œÙ€*ˆkÃx×0§NeÄ¿ÆÜã¡ía l‘,RÃòÑ=¡ž§Åï2…êýŸÈ±¯§Eä¡K4VP¨•%ŸˆKѳöŽW§`qu§Ô¥æwµÕö j¤ +wWúä©_–( K;­«×¬Ýãkã*ô:á³’Þ¤VVTµÏpa3¶éÁ5U“PåãÇxþç“uÃñ •6Ÿy‡u-¾5ÓŸ7;×R$qK$íË”Õ"º¦¤´î„EûzfÂZf†²8ÍW8í^13+Y‚BPtbL|”85W_Ô©/#À{øÁêqSx%,͉ê/Ðîf¼kU½¿± ¯ÿ­ò >ˆûø²!næëìð·BsžkY@“ÛÙ€“ˆþúÆ…ÏÚ%¥ž~¡Yz¸B"Ì•¥E¢(Úã —í.ÛW{ó†Ê‡Õ—”ýÙƒIÝú‘xß%~MÅx‰ÏfóÙO ¼­”ƒ ˜9|ü…ð„¼/«nx׆Fß5Å+â;C‹£•±yˆ.-(ª¨(ÃCb£‚…G$¡q®‰èdZ¹r0S™Vˆ²éò€Rÿ€@yš$C,(>柸Ï=I’z¤083$-‚íñ%!¾¢iunvJV¹°]Q˜Ú˜’4;ÌÒ˳bsó2 ™·Ô`eö”«Zëpt áÕ©jŸ™Äc‡×%å¤_T^Rçää§ :73–ízbãc„±‘ñ‘(†) -®()®hu®=èp8ÀÙWàl!± AOãÉYÕsx Òˆ-‰q1±ûô¥Ì:9Cûì9„ôÃ#Ó3R’SS3„é9)(‹.•åúˆÅ¾Ž Þ}Cm ·u7 ?)Ç;’ò2Og°Äêôμ3H¨üÁÑxkõ{’Ö?“0‡Àï«ìÿ*†Ñú;ÐÆs*nWo±ùt,­²Ä3ïü܈y9ªÕªx>æPîÕ‡˳é‹îæ”y´(ò¨¯»O°#:Œ¸µ»ÔˆJ¥7i¦‰Z´¯ÏÿZʼÇ;çÒ1O/m|JÝÉ­Ëm®i¨Vv ~ÔÕ^ì×áS̼yƒÆ‰Ô°¼Ç¡pÍl]È7>\Á6ûC×óé&æÿÙž´muuY- ѱªT>3 Ï)ŠL“"ý °pqhŽ´(\ˆÎU»oýSÜÊbjk ç«òÑÉÔòâÁŒW ,õóü "©þˆ…H ñ?C¤ µ)%iiø~/§Ÿ\ëÄ9î)Ò‡‚àŒà±Á¡_ß²œ¢´L¥°£°(µ1 í‹ó ¶ŽÇJœö/ ,¯(--ÏŽ-ŒV ‚ã*ЉæDE\§DU›ƒè²Â¢ŠªÐ€ðàØh±Ð!Tï¾Ëî¬kòj‰èMú¶1¾ ¾ƒu€âØÜÿtv°DÊ:ÀØ—g—à´,/Å)%“Ð ñËy§0÷…Ý©ðã“u‰Àñ;|ÝŸÖ]ë¼qÂóäž~!óæÊjP…~gcͱÆjYH|||l¬@÷g —‡†Nñ+©ªW7œ²ìÜ`la½ÑªØë“­y pDëª"¶Úؼa`;ž¸\xɾÂ9Ñݽö¹¸³HMËH°l ò3òò§”ùxxZœ³ðôô±{Çĵë. fâ~:áÑkÇ[×è®<ê;ÅÍÃÓÅÙ¹ìÜ.{cxª¥ÛjªÛÔÍ þûe]@ñÿ¸çˆëb؆#‘õߨ*ïzc×¹?«¼@÷£ÿs¯×ªzðQXV92©’@ÏqÞsõKtc¾%r¸¸í±pf¨±½<¢Ñî³h±?æC]…ÍMg†Z1ð›4v0À2“ñ¾üá†Ë83ÎöÓŒŒìÃNØ­sž'ŽÜ +‰ªÅ¹õØ­¢¼6¦X½ííWqùö­œ¬òxd1[1ÜiŒ6óÎêþ·zZ šš„'N6|ŠÐל۶ 2<ø­õ®ö{ý6;z8zKØtãêWÙz¢úQËqaU{uQkµ•ð—|'žÕGÉuµ‘á_Lë>.õ KóœÊð¦1]³{/wõ75Ÿ¨ˆn£ü„ÜØ¢¢è¢øÔ*3Ú˘Ÿÿàéõó~TðÓƒS¤HF3\†Záæ_ÑÜY|­jPPs²µ±¥¡äÄôØü°ÜØš¨1·ÕgÝ/|Q’—•‡ ô‹Ãr¥‘±!!f3[ý¶\^‰ókñÛlÌý’3²Ì?¸ÝÍß¹ ·âZßÞÈ–¸§4ÎàÅŸª ¨µÙ–Y#+ä|ÄÂú”cñdKÜ=íì½×£µ4£ÿx>~óZGÕµVAíæfŸ èè8ŽuÀ=üÛÆÌæ 7óÍ«Ž<Á«çŸ,.²nªÎÊx/ó6?鳪Žˆîm8b!ô¡ØJn¼šù]: Þ†™Î†Ë»ê8ô^ÉÝÁcÞfVryøÍŸðÄÔ1(²&X1¯št~›==øÍd]ñía>Ú>ö#‰U½ÔåÆÎã§÷/]éud[´ (!*E¢ˆ¬Ø²DZ·ãóøîMÌÔ)Ë9ˆ£2K ¥ e!…HßWäs¸ÝëôŸ`âTà c£Ð£Ú;gg.­+þm ¶áÖ”¯·ž›±ù€ïoAKä!dF«vЊýÚj[îãåÍÁÅ“TÓ¿Ÿ¬ûûÈiU_÷7üáèù`êrBE$ D1ñ1L¨XïèÎðˆÃêïgÙ*©Ã©~9HJËÏ´?¨>¡‡M™ù<´5\¶+Z’ 'VePÝxן·‡!=ƒ`‹Þ¶¸”A!ŽÄS­¨Jž’š*M;B—à° ^œKœT. r‹4gûZ–ðt/ÍÌT žòðLT&Ë3 G1~|¼ßâ2·Ô ÇC#“øç°ð$Eâtq–®^@®_z kwWWé6º†—SW¨(C¹(?N]¡×¬`£íª©-¹Çâ¯F%èÃŽlwqñÀŇ7'ë>Ãeª|¶ÑŒ“#:"!½Fˆ)ê’[½™@÷þ;‘“$_VT ÈÍKF)‰)ÂÄ´Ä4”Jç”å––åI}^”ÁѰhŸZ÷YXDdpðÇZQGmu~mƒ Ý#7¼ŠmÞó3ÊÊhFk¢â££¢%Qáñaˆ’—W–(nT¨›JU÷I"Gõß _:Iý×ï—Z¾ÇøK­¹6ÔÓA.³’úûO“üxÿôë&œIáE_p(f‘!¯þ§Ÿ:©9§ž»Ï"¸nd>_´Ö/hÚŽÜkeWio^Ò ¥¨Â­]܇†Qï±Ü_é¿}+|dæˆ߆·qÚöæCy[‘>cɼÏÌ`ìÍÛ*­…EnÁÎó¡Þï!¦/¸ô†]e{ð}x*žŽí/K/û Cš$ÅGZéÃÛùÛò,!ÍX¬`ã›Þž#ʾÿ&¾û¥ð!ô9-á xòP§Ø®{,¬!ù~¾¢’Àªê²Òªª€2‘Pðî–ÅxY³Wó$„µpç“uyÈ"œ À© ´59$‰Öý>Å6ɦ£ ¾–6Û-\f!u‡ÚåçvZ_ó¹ƒòQIRYR{ò¹äuçÃÓûÀ|WOóæí=ûÄðlÔBã, ®£âà¬ULÇ»ÄJ#¤Ò WùDÏÀ<ÝßJ²RN ŽñðdTškH¾;:…oêímÊLÜò3Þ+Ðý¸®î¦®×zlû&ø÷?|ϹòO Ķïý}Ñø¢JÀ–ö ºçßæà%lj2رgÙÊ󻇟^¹4üp×Ð2aäQ~ƒÕ: ?O;?qni¸0´&²µÑ=Õ5]jžª¬F<¹‘@ê#‡Õ®-ßêÐ!+‹.ûSC=ÝCC‡z,…Iîü¦Z/WW/o7ïÚææÚšf6k-’÷ã(u¸ö/Ÿ„žn{Šu?¬ûpðB¾­™“Ï^t¹KjƒÚbë¿§±‚§ûæGØžœ9Õ‰"¹Óºwœ½rm¦l²Ûá](®ª.PÖ$ ÿ_u×ʵ%ÈÌÜMœŒ‚æ²&1jc4K,±Æ»bTšT¥HïEøiR–Þ{Vì½Ål‰‰5š{?rïÿÍ.KÑeY¬ùó<Ú 3§¼ç|ïyOœF$àt~9);P*Jð s w 1´ ˜¥ù­±û{ßU«çöžY¾òäžü¸š“ÚùKŠí÷¡Ýh{lanFjBfÆ?©âq¨Q´QP ÁŒãL3##‹må3Sá½2í+.äfZá>$A)F›‡ >Í `8qŠÞçÕÿÈ…ù…GE"­b±çzk{'S{çà+‘«y–{Š.ÒºXž[Uj–®ãéà)J;¦aB5³”:ÏÔL[GY~ÄLÏös§üºÀ¹q:«èK 쬈eôÅj2züb ·P¤œCéÖœ*áaŒ®¹•¨†jÔÁqg¾ÞÁÓ1vÎq))ÑI9i¢”¡…³52côs×mßžŸR]¤ýÔ?ƒ/'XcV3‰¶ YGb7ä üÑŠ¨I†¢Xëh—|ëI¸¯fu º8§øÁÞ} ¢r×r›b‘sª[”y2c6—ËZ¹ ýÈ`fÕLm£²7hÛçrÖûÜ÷£SÌo»ŸÉIö\Ÿ¡Ýœ’Fp¦îÖ¿÷§†)BZ>Lukr݉ð(ñá5´÷ÞE¾ß^u>g1ÛÔf.b†-9F<±ëž#·ŽZÌ‹ŦP˜_˜W°iÌÚðu$Ii~ó~SW¾‡÷ö]Š‹Å]ÐÀßò9¼Â_J‡áA°üùÁ"Xˆ¿„¯ñlQ Gþ¿'î‹GâѸ'ÖÆCðPÜ ´aŒ…^ð|+j5 t¤^­\ˆ¯`NÏ„ã*Æ)Ï^TÅ ž &›Q‡]G(»ƒÑ*:# >0µi¼ä@.¹þqÔœÆÃµÇP¿l¾Æ Á3¹ô°°4Ð>´¢ÍøÈ@ºpYIUÙðµ¾k5¾†çÕᖆ…©´û»^qŒ×”M¥u<”–B©6ú†gü÷„16Fßhv.& y˜ïFʉ_§Ý„Å7{±ùIübn¾IÙ¬Yc»1KÌ ö‰àÀ°Æ¾4² pð\HðŒÏ¿Uö½WÅ­ÏʧWfúeºUi»í Øê_”½´Ð¶’ ª™%‡7ÏN±*GÅ(%&¯” §míÝ}\H„ðLØE®{È“8Ó;ÇIæVW#¯I]ÏkîxcÐ B âÙ*«q˜Â¶‰j>O4-Ü£¬?ðÏfƒnoeføæÜcÝe%ÕÛ?iê ß°FÉ#„jHIU«¾"´Évs+‚=ÂP:wi×`üö" [º(¡PÄ„nöµá­4²õôÕßÄØÀÂ×;$€'ófÊ~‹ç†“ö({ÿlçøœ8‡²Âsr¹½VÀ?É3r‰g(y~^®I>I§öA÷Tøobê+üw§{±n «a·"õ(¼ 'h,‡éCOßÞKãöq˜\¿LÓ(ƒ?¹[Ùtæ·ýƒKLK9–n` ”TçfO{v ó,XœØâ\;t®{r®Ç/ä\¿™Gá½79ÖÉš7âZÑ‹t~þI8TÈLбà{ÇÀ µâK}oݯÄ÷ø{Ò³ôfÏ:ÛIÏâ“ðlÎ)LƒuŒÜº~º^wè`ÊvT¡udqé¸5&î¶¶ÚöžÎ+Ò\5“Ë3’‹S’gj`a¾x™Žèó¾¶J dgké,‡q- ú‰r§­xÊi¯tè´ª:í·B2Tøà¤’!õ=P½K­W}/¶î€Âʰžì¡g>ªG<íÞì© õ&?>[ã¹·Å‘tèÈ:åÈG^È‘ÏðÇÞ0t".Ó§ÙeØ3Q¶Äiú°7šÝ†=“I§O³ã°76n'®ÓGî:M~ ^ðûc¤*=òz],Vµ^}ÊÉÏÕ7_Eî¸ë<á•øzÙeÎN.JÒíý†óûMµj¿Bsö¥ËáHM˜|aÑì¨zÞÕ&ó–\JpÔæ4ŸX/-vL†KÌóÞ«­­W;xl‰µÓvŒqN/7º8Û›å8Vúµý—ª,‹ç§ˆØqe9q)™½wéͽÖzš±všcnYBtÒÊOv°0^o7ÕFôô8dÍ @»«ôï–À@^ÁáÚIäè‘аë©Ðp©ÃаKå|þ¿Æ±Š2¦ÀRZÚTâÛêŸåÌMY-ž¸t·u´.yßï~Ý÷ÆZ¿ €÷«wƉöVåÿ†î¢ÓÎgÍØítL]ZñK¹æºìAË–f›DÎÕ2°­òÊwݽN ¿÷cž…Æíq\ÝAÄ=èUÓ¾_k”ºÝNdUí|fî”9­- Gê¥ácJ=Ð$€üÙaù]•ÂþÒBþ|¡‚¿ƒÿpì/*:ß!pƒP¡¶¬\–’0°Œü«/þKuÉ¿Èòq]]çŸ"¾SZ¿Z6O~µ²¦Â!8GòãÌãê¼ t!.‘#Ìͤ޴ºŽ<«¬Ú“I¿­y}âo<6/„ædÞsX8¯:ð/SâB¼G‡>ôØ£SY˜÷x!šÁ/ãØG]Têtö\#dÏvªûWë•DŽ̩¸'Òï–ùjh¬Ý¦z¤²3kÖ˜±G~¼tåè៯Ì:2FdÚµ¦|Ù¼¹zËç/ÔÛsàÀî=ûDÍYõ\½ÚŸÒò7“\À\Uë“—ç5Ï+ïß¾B¡A_X®ülâuzÊ!ƒ)n ÈœäœÐxˆêÙ;ÁYØÇ­Ý…½'8̹ޭü…f—¡Ø{‚ÓLì½òÉ÷¨X½5;ÑéšWãF{øÛ/œ¡ã`.›­ÊîÉo ¢À šf¬†‡á­g¬¤æ ‹_†Å¸óí7E_¡¹bŠØ«ÒãÁ^I ¹ý0•D‘m¯#¼_ç/ª2dr˜S ­1 ÁI¯¦[D1í;Å,h%ЉZECm‡ûÃFеÏÙ^rë¨r}Lð„þt+ ?T¯ …°ûj@œÿ“ª ¨jH99GÔ`Ö¯êPÀ9…¹ØyùY#­çntÊ,Ÿ”D/Ãð?‡Õ/Xì4¹‡à‰¯ÀCÎ ½]PðšÅˆñÝ J½µI©øªÐymR+Îx!µb£vÔŠ3¤jÅŸ7<äØOwQ7uQG´tQ?ÝEñtUî8;¤\;ð”’í^‰ó|ÙÐ_Eñ±¬Ñ8é‚)ŸëîCoéžzºgèãÑ^ϰ®´¹g8g­õ4í4ÇìÒĘ|¤U˜ìhn¼Þî›f$´½n;’àáp»ûç y×0XÀ±wöýn)@`-Rž°$±G”LÍ3A¦æ9¸5Ï„N©yÎyVÍ3A5Ï=Шˆ´Ö¤ú‰/ ¾^1!ŽßäšÛl?”“2{œ¾Ó‹}Ÿó½¹Iøî­¹é—ÊwîC¨Ò8S'Æ*b]è*&Žbÿã 6Ž”¯¹›;Ú„|ƒ½ÉCz’bbeÚÿ }Ž[<†Ñ£¬Wkœ¦=‘7ùãŠ<ƒÜö¼û©¾ðÑóT:öëxC§ ·ígòiÓys ç¡ÁhÆMWèË@*}»þš Œ#q‹ ”H¾–PÛ5º=1ÈD¾K¢üû §Ã©3êàÕГÛC x‡˜åLâMüǰD*º"!¡1ø…tZæËl„ïée¡¤ˆ/gøï¿ç") Ç4°Ì½|ý}üýÍýÉ—oþ2â]h[tti0“Ø&¥øa<kà÷6RÙéÑ ÞL#]Ow?òm½iýÏ(áÛlhyø$ÖÔ»=Œ0èk £ãa¡Ê°õŸ­jÂQh¼/Kî÷iX®ð<ªT íÉ×S8¿|Yðßp`ʯ„ù+5Z„Ÿà/8ÇÁŒãx µûμìÙ¸».˜›©iÂ\åŒ0Ò|Àâ0t×€‚ãx3ùÁ^(I {¤`ÿ6žÏ¿¥1‹ÂKñÿ4`>ËáapFÁŠ“ëìâ»Îäà›'& #p÷¿·â9ü{xäØÔ¥¿ïÖÂy5>ï¡B 1>×qÇCfC\»C×£íj0¥A—ƒ$ê*ñH²;†ÛE,gÒ)O­Ñx—×Fcì×8H£¦$`¤±žZ7ÚÂÓä™^¡`y(Û%Ã"Ã2Æ­`†Ì_øýBýä{+µWþƱæuzÆq‹û¢uΖæV殆h)Z&6Ê1Ë1+r.C'QiNÉÅ쥩ëâ\ɳÍÈtÏî³ÇçåÅ•¢´ß©Ô¤À¤Ð ~9Z…L¼68lp°³´×%ÈËË3êwÂîÝjè$\Sÿ‰£»S³Ã·!æîÁ/ð³k?]Ñ{Œc—"=´ÖÉÄDOÏz&šÅà·®øëü©ÒÓÚ¥×Ò€’Ò?âÁ—x ¹ý|m¨nÊ9`-Wݵ lÍLìM³È´ò*¼sü·«ù¹ÎæÙ¢„¶2IZét|+ êç=HÖ:Ë=IcŸ?zàTûyEL±í$¶ãJl­[t@ªoô¦ÐÀ¨€µƒ;ËH}S °'$+ïš¼Š…4xIìJízãøéŠá†ô!Hkþ—û\ùT…¤üÖÞ¥ÿ!"ÞØƒ/Rm&JŽêw|5 ŸtþªÜH›%»^Ll½ˆà¿Õín"ø»Zù*‚ÿV¿Æ]W+_FFpU•‡ÑÒú»÷p ]:×%¯:~Ï–&‘@ü3t7*4Iâuå`éãóq.z@ž+Auóç‡B;0ÕxhÕX%z<‹¬Ò=Rü2ý‡‘˜¬ÁžôŠêÓчO`€WëæeäÌùòÕMcŽOV¸ý™ÐÚÚS›Ê•OHÑ/ó»²%ó«ù± œÍ~K*Tê7t#³¤,#+¦í@ÇÍÍÕOÕÙ:1?À4 Ç\ú¶Ëªó)vku‹¦ûjrûÖü—u®ž–A&Aáù+ˆÑ‹«Í6Zš­Þë¶K\P ¸ÿgÈwC*˜7úÑäâMz¡0«Šƒh:esLP¢W,ûBÄ©î7[÷±ö ËÐîÖðo×2(.ûEÀy?À®Yû(ÿæß-]¡o¸pã,4 ÍÈžxÆÑQóÐwõ+„P~->x¬r_öutÁ[†w¦ž½wTÎh!–y/wvñuÙäE<Ð9Ê7‰±§¼°½F •pLœ™›[RR•´ý‚»„áqÌË•vÿç,v¸Ë¿«,Q‡¸J ªðF|µm]b¸ÿ××ð®ÐGXSÂ}‰ôO_6u×L›˜LàÖhòÖŸæükr¡N”ˆ}|0ª¸âjoè™=˜1Üàçn¦íìí HlBî‘ {' XÉ<=òÔÙÇÐ3¡ ¬¾ÏÉ#Ë¿Ãcgˆï§Ø?96oVÿÒr¡t@=Ε Ëšl‹ÖC¿a¶ødÇ>xæ|¡U¤Øbò¨D³wÖš»lX×»eœnc¬lèNËÎ9.9akB|‚(2"88D>Cb—<0(Q‘sl^ #n÷bKA½'k #)ø€äß{äà¢õ¨=þ•'´cq í?Ј§ØÒsbñÁ>ûñU -Ù調‰`ÃÝ:g=FÄMš¶aªm`r²¶¼=.eZ¨Ý~x^øûÆëh‘;7 U±‡ÅÇ 1ÿI‘‹¸Ç‘ZXRÛ‹½ üPŸPÈHÙN³;QETTE#ntv¡÷øG; €=DÑW“U'ìPÂý¡Kjë¨_ ¢RõkŸ»HnÉ«ž ä [ëRLªä>ªÉØío—N ÄþƒøÐCž¼Ý}•ëÒŒdÛtèÍ_«y9ÍX}z­™‹ ZÇ(vã”´ŒmÉ!¢§Ö>1‘¾Ž]e,ò@MS¬lÊ‚nª&ÁÖ M¦á˜ÖζRÑÊ”õPƒheÉÏ­Uî{²@¾£…Üògp‘ï T/¶ŽÁI.xXöÈÊEûgj¢3­)Á?~‰ðL„»â^îxƒÕ`1Õ‰½.4? .q»Pz{„â RBñ„â,ÙŽ9}wèÎg%¨Ýz¤Þ0IèÇ´¬ qw4À,®Ô$é#ËfŠi»$t›°$4Ýqî _`Ð4™ålj‰_qL²sªáF —•k lªîåÁ;U"øÿj÷Ø`aëç?'»B1_¢°[%;íiZ¸³Œ8¸«úÂ"j`Ÿ¾¦úεôëÝ=‰,•Ný˜ÙBèukè"O®ÃceyeÄí]$³lä¿O8iRÕ&I•-kJ«FÎô ÿ¥ËDB+X–M]hvcsá»ÒÔ*Ï«"¨LæØBÅùIžðÚæìDžèÀô:Xúæ—X’Ä;$Ù:Á!î!žG)@ ûI_ˆTzJpäg”bú~@Þ÷x5ä}¥ä}¼Î+Pi3¨¿çU êOWyP¿¡Ä–.e #})Rïåá<·³p‰wµ‡¦a–F“=<ÆûÈÜr|˜G¤4zÐ@cõ‹X4w‘µémSåm5nRôº»5Œ‘G8bVjàFÅÅ8’¾à[¼àPM€^FnÂÍm¼Ÿ,rM6Ê]cø©&;³5ò|¸PÅ]ÄYÔWhÔzÃÕë-ÝŒa¹ƒÜõyÖÙî'ÜðjªiiºÑÓpÃëò'8H¹Ù$tEºq‚ý´‡ùm)|PémE «5J8³ƒï·ãT‚ âhúLU‡“·9d€Ö}±EÖä·©mg LÚº`€§cN„våÜó—Aõ?B×¡Õ )ì¦b¬ “  —hG×aøƒB càÃü:ÑÃÆ~ß®ƒMñ<`Ãî]1ÕA “å šƒ¯5 ­¿Uëö½Æ\5î §(I åæ_¹Ýøñ-J–ŸHh›žÍMBJg'%Ùé•íf™í ˆ„vÎÛd‘{imãüjRˆÒ BHcÿISË«a(ƒa&|r|ƒ¸äJ UËžà&¦ZÒ ¥ãQè–8«ûXO´…ýsþ›- u~ò½?J̰wâËã Wvºïúœ>ÉÉQéÅ6±Æs\tt\D®ºë–¬FŒô¢P8¦d3AމAbìæB'–ˆ]‘‰îåE¯Fëª\ËÉ’¸¸Hæô1¶q6\Ÿìžœã›ŽÒEÙ(÷*wåâ;@g¢…±À*b* Mß½¸ÌPÿx¤…‡ÒÈÄÅuMÀÆ@MiÃ?yiCBÛäŸjø„ÀU­ŒZ…£ùÎ&XÓvØÌicó)¶Hõíb¹´Åî˜ÿÆ4aTµ$ÈÎç †ÁgšVe¶i†¡yá{%ÞfØS‡c¢âc3ŦGû$¢´˜À|¦‘.ÊzGÕäžÊ ÞS|ICW.˜¼Ã ”ÓP;¬¶7t°–·£ÙSÒݲ2~^RÃ[ =ؤ†YB)áÕRJx8Zc ¬­ip`NMiÛBb¯PHÄ»üE †‡kâ¡Xç›ýü—ú“JÓ5ž¿Å1¥ ±8­h¼5Ç}ó–Ç›"-V9:{š2l’?ò”n]#©lq¨ËVýýxdhB˜yìRb”´îø¡Í[âkÉ[*·Œ]µXßkšhÛ[öÊÞQIëwä"¼£Ôät¡Ñ,äÅŒæP Ú mN¯½P8­l'œ^“AÿlœÒ™ì×°ÒëÀ2±K!Ì,„é±=,X½ú׸ß{±±¼/¿˜küØ…’g¿Þô,ÇO­½Ó­µÙx Þíz›xåHNWÃTmV×AÿV=)šãAžù%TS”R˜œ¸å¢l¯T‡‡„õ Âl6Ûo&­{YÆgasî*Úç»Û)Á# 'ûõNö®.þ3³!(!YÚ¾GÇråg{jÔ@ƒYµÑøb*.ð*€ñE ›¡z§ëÝ%?.´MvHOŠÏ …&o- Í*DZµ¨bd$¦<ÒFQ¸ËŠÙcu–WXj[9fëT,»€´ ï•Gð)ükä_XSÔíÉØ 7`I7^OÚëSƒ¯kÕùÑÂ;èIÉ:šM¬§jLÐÉ,· §Ëªºjú ɘ“˜x!E4³—”ŠŽüW«S¦ÕĪ$ â›êüÑdnº*^… ¯|Ôóy‡bßèÿó̇Õi09Ñ!³8œuµ{¦¤r3‘QÓ)[?Í­³“§HÓ­fééÓ——§…‹Ø‹ÛÃÓójz_ÿ>ìz;o;m?Ï_äw8ÃÖlÖð ¯å# 1Å^¼u¢Ï®³EãuÜWŠŒ6l£Øs‡ËÖL›°ÀÖPÉ0 NwÛà&ëÊì9¨Ö`öTSÆÇÍ~5þJyS&Û¿lÕ”q@~âÀ˜€d÷Ý fוkKmªîW×WŠÀPèˤ }ìö*a¿Ü?º&ðoí…é²2ËRgÓ‘PÏ[31P½ëо“:Ú8‘Fã½Íœ-Ú³‚=¶eеþê_"ȦÅïd Ÿ®kªoª-ÅÌeü]iç°y> ')c¤ ÅÖʪ=-þÕnº"ƒ¿ç}£¥>ò~ ?3OÀôMU#0 ¤gvü]á¸6VÃr-½†ñªJÞv\&œ¹ ’Ÿ¹1l^IxþŠ>­ÜöÀr«p„9Ây›¹b¨Îê5u¡ý± .Ãòn ‹‘”§ÁŒXY]"È•¼³0ûcÔ?'u £¨ÂPÜè‡>0ÿ«Upv{¹±Y[À¤|­€;î>„X {±q|…ðàŠ¨Ú–à‰nn£6 ØÑnëŸI*Ê/ÌMü •£2ï³ų÷.DKÑÞîÞ L¤ŸÝoÿÀŸpñáy[â‘eyexì³É˜ˆf!ûiklÍW{“{Zî‘+PaSÀà'Áï\º¢fŠÕŽÔòì¯êüH~ ÷k>þ¿7Âlò”¯Má#x¯.÷ìÖ!¿kîyáKèNBB+Ršîøßñ‡ø½É#qwÑ `Ú©>uúMFË:kuÄ´HVùa¾ôŽ]ÙqÛ³'Íx*1ª¿¥•ôŽˆ*’.¿‡ß ¡« ŠD.ZQÜ2l·v q˱Ä<Ë"Ã:jflUtÒÖÔ$†-HKmï ]¿Ù'jÆ·¸{h—_¡ Ã’hµfVo­Ö¶V°½+8Ò숤°±vô!ÝoÆ-^õ•¼˜(nZq} Dÿ€-׃þ;¹S6 Ó…JÃEÜãÂeW+Ì*–ÂRn÷XjÙ–¥ÓµÁ(–ž¾¥r6ÓìT•S̈iöžOC&F¶ÆvW!3daC²”ÃV‡}>˜Áý4Í×ù“*ÞºÓÄ5]¸ÑȳS¨^œC*DÙqIéqI1â-Ç“è`×Ī(ûM sÿBn+¿Œ»‡¯S â /QxHwïžä‹]ŠTe_²¦“Ú¹e—î2¿âŸ}eT·'ú­Ð´£ðŸÐY\ÆaGÞj%WÈQò“ Íg+üTE˜šu!xÛäƒÉ'·\FË'¥P^v¤ÞÒÿÆ,V½ÿݾO¶“éÓoR2ó„=Y¥jç|H«nêùZn5‰g¹gºŸg݃7¡% ÞF¦M“݉߸‰é¶×ô-qVðÁS-WóZ®nº¦BËÕ’Ú ‘ÊŽyJðó,> ïuãG´ð„†ÞüPn | áHyMrq™+í`Æ·t¦›N Ä&‚}—‚Á-¡0zÊîøÐ=ÅC¡8ÿõÊ-RªIDð,äô„bÊÌ[†?„¥š×àÝ„ŒìØÜ -1þÆ…ÎØê‹\‘»»Ýs?_wG·®‰šV;óQ4ЉË"qKbÝrô~#Sx´ÅjOŸu›´\à31må&ŽN]†î¿à¾[|7û"_-äèã¿.€yíÊ?*Sþøâÿ¸©õ¸ ±PD¡k¹Ýž¬Vz:×Ëi/·O9¶ßæ©hÕæysÙ@~ík’7quü5L”oáiêJä¼!]™w\W¾ GeüiKnT5¬&&³>%IÆN×ßîÛ@o¼V3Š»ó31"‚„„“ûŒ-kŽÃùmÉó6¸ëF}æäL!CÿÄÝY'ãï¡Ç/6V7ZȃúS[‹¬ùÓ0‰S´—ˆ·P´ŠH0À¢gWáËüe™u'¶È‡[Õʳ¨~ÌësóÍŠ¹ÌSõ°ÏB§ç­‡ew©Ò¥? téáý›ÞÞ‰óûÊ9‡dм½˜[¶Å-NH $5‰ŽÛ³E†Ú+ü¢ÜÑr†uÀux2œPô9,e//wwôÈ’ůÔi”?\vªÑ”©îI^W®jäø¹¿x §e2TŸWÂ{äW̓›26kÞ[¯™ˆý~KéÓ›fóZÎÒ„ƒ4dÇHOÒ~NÒ`Q³<hÿԤϑÛ¸@¼ö·aÐChK¶¨ŒœmöùjQXUð#‰$/¯,µ&ˆ©¢þB±;’+[ÊÝÉ æ ÊMwYg6b´ V ÄX ý•Š´‘ÆëÔ[·†åÒÔxºìw>ëyœA] îK¡ÂÅaωނXB\ é·\Jú=#'ý®GNëAË™¿ßÓ²3ò£ÔR…S‡>0¸qy­(¼s¿±Fýf/SxIb,:,O©m'ϰüBiÖQRd•Zf-ˆ7 [·yƒQá3·Z¦™eﲯB{ÐîøâüÝÛ3Π« hO¾ŽéAæá.Úp â<Æ™ÍAsM¦Û Y5#;-‚JñúcÃÜßß7(FŒìE>jýÚÁŒÄšÏZ%LÙôl)Àd½¸ó¡²lwÉo«;Iü«Ñ×ð¡Š>×8µõñ¯\ªÄÂ…SC!C Ó¥ÁʕǼtè²NÚ'ž ¢^¬Þs„¾¸–Ч'}K JÞBb)m"­³2–6‘·® ŠønBÎúŸ e¼Ýr2Šca¶òý/iäþ_¢¬É;Óºá.M³4$¼Xþ¿‡kîÝ•8ÐWe±©q ½ÒÝ~½«oxš¶gsìzÄXÛÙZl·Ø]…Dæ9ÖAuå½››é“IFaЊÚ4éÀáµf;ÑNt 1#›©BkFþ:Þ£lW®_d´&3¨´iáwy¥±¨4H?$[ºe', ŒMΉÏÜQ ºt,¡ A7bè—Û'\có³¶„åi›X9[#séaÃŽ¼”êbáú`pF(©¦çRÕªó  ãð-Ünià± MmXËs8G“pÔu³o°O°·V¨c¨w( EaÑâ"øŒWÓÄ{;xx$êë£&>Æ0a≼‘׿Ý$U…˜Üˆ"¶!¬¡€»žôàâ¬Ü‘[Eìˆ#[÷&\ê-1)ǵ ± WI±†×ª çÿ¸Ên ~`b²¦tmš! k§S×P¾yà²@sã1¨yªtO‹ ÜムUª1tÙ{ø‹¿tZ{®[Ã]y¶ØœÐC¶€ëñ†Ê†îI:3ð®UªE.ø„{Ê"^KÂqë8áàs]ŸJ(ÍÙ„Ä  ”É%°G(údw+t²—C—˜Þ´ ì`ná!típ-¶ÎZS6<ó+Rn]Áqlãí»²÷2ÂÂ2 Ïa½6ÛÂx éÞøè5;äP´@ÉÏ’¯´„ä yH¾Ù¨Û©®þ<ϳ0¸~ÈRƒ\0çŠðT:ðñÞsWQ!ŠöØjj§)£O2*Ò'›%OÇ ¹‡Üî0òp|®^ ‚êÕ_<(ïl诀ë.7ûƒR°“ÖРBQ‚ýÔL4§Jî/ü'´\{qí à:ò–ÛÅÇr|Ü0DL+GÚ.XÚ“N÷µˆ¥'|"èúÆeû4þÝ)›ÛÒê(fKÏB¹N!f·"Bt˜È>§ÿáêAØ"”Ašç…MésH¼¬‰O¦…ÐO¹Ò£ð§‚5±cXÉks0¬à+4^äá×EIøe~Àž†ò­"ï›Réöd: ù‹Á^ ˜ò_ #pYz:|¥ _Ìw§'"‹“¶7öhšèÇ.î³ÊÒYw}ª]âQ—|”)ŠEQŽ1³‡–ÌÌó6ôµÝ`µjþLóLÙ…-ŽZGÑðoذãx@±iEa Mr—U­ù¨Q´¨ÀG9‹2‘‹éQÄ|Ô.¬Èv˜…À…u¸°åXSXÉ ö.Àté{&Õ’¼(“Ù·ŸtØRüO§ZŠO^¨¥¸›ïÛ ¥Œ{’ÎkI Ñrb»Ž¢ð}¨çI”!kM°›`²,kµŠÛ ꪅ{éqÆ*˜F ¥¼<¡eâÕ÷ÁàšÀ=`†Á))$FEü»Ò^[ I™ü³‹8ä½%&'")ë :ÏÀ$øï¤g¹Û/ÕÆïÃJͲáfæ´ÆÂ{uà&<_S ¬fÝ8K|y5õÊ’=©M0Ÿ<§`á9¥´TµLÈ4  Y¿?ÉúÏ­ ˆT¸D›ßtÍçOá·mq»!y%²¼°SÞ<ÒÊó!¶'\³Ò¶^úú¤)^ß> Xñ«²±Ðävö@aÓb‚ ¯Oµ^“ܸ^ÑŠeþ·–½Ê`W«”Åå¥|k-Ÿ<è"•òÉÑV©˜Ïßí‹ùàÄ|þ~b>¸#1Ÿ¾ügÜôu+砹̲‚µ; RSòsmŒ}}}µ} DŒ·ohx^f¡¤Hô”Qðc{ MVE/Ӊ¨ÞÚäØ^Ìl%Ç&Õ=!ÓlGjíÄóK­É4DO¨¢!Š6þÚ)¼ø»ì™¢ºSÒ§z Ý°’Ø Q–V²C¼­ƒ£­³øó¸¡ÚûË^µvƒiõ&~^?»øßA›o¼jû§,YÈvUÉÖÉ®õþvVÙy<½ËΣãev*¯¬rjɱ±*®†áçáÑ5õrA X\óü#ÇL’xsXж¡…Ëú¦åí²VŒWj'ðJcSÒ£“w”‰j$çÆ–1 ä3à:¼ó;;OJŒM–{}‹†zC”Â!Áá¤PšêÄÔ΂º:†#Ïî£Æ¥p¼ÓF(X±@#óGö¸X£#=‡ŸÆ¯àüƒ;Ú!Ú‹f(U*ÊË+å‰)öްŠðlï¥ü%ÎÚÖÖÊ*Ù63+%9+Ó6ÅRxΗÌP¤.ú,—ãÕ’êÒQl ×[N^¥A@êcA”ôzÀ¿guʘÿ1$]‚×@]xÉ›6ù#)—úÀ;žz uW*[¨«”¸9žU`$®¹j'jÕOÃnºÎ ܇™­ ¢8µ*OÛ-Ò~ƒ“™Œ\2ŽˆàÝ¿$C×¹ý¡·´àåëåãi¸H_×ÙßÃÇ×ù¡MAÁL5%”8b¸ÿ‡Ú™Zõ0¾7…˜4©óÓh™ÏÆGLO v£} ØÑ¹¥{2B#ü<#µc]#}£“*ŽË̳O45°´²\ô+í·y±±Û<-èñ@©¤¨´[¨'tÕS¾Çþ®Ðû^Ì÷‚×…ºÄºZ8[7Å÷§b‰­K\zflrjˆh{Xd(ñOöÏŽ)*r[º'y ›^?ä7Á:øwsámÀ÷ÕªÃt~1·ªƒ%íÛ϶¹FtUqv%*W 7™¹^‘„$Åí/­Ž-Q²0H©w>™ãòŸ~Iž{€Êó<è êëzÀÈ2È/«;ƒÎõbG×5°sÞI±±u,Ïsx¼Õv*ñ4 ÙÆþNþÎÞÞîȹ…8nuŽpÙâ†+[+óT˽i)¡QI¢¤(qBDFDFH¹À§8)ÆÓ2^;v}”gbRâS W¥Ï½ØzÅzÑúUÞÆc˜%fUø…&y¸O2O´˜ì‰ÎÄ”cn$/Ëpn¦`ÕR‹'ÝÿE-šÆÃþžÛ™ ×e‰öÕÅÆ‹wn Bfì7$/ÃÜñ'0®9€À4ò”uó žgkè6ÏQË™ omEZ)Nú¢Æî*€y’ç{´!Æv“/¡6ó!/XHÅ—|à=i–Åy^cHâæYÜd/7GÎß;ŒœW”FÎOh'[_gd¯xH,6%5>;=Y”š&töû<ÞfÔ£v¾6Dêa¤ê"Ø”<&o«›®¨Ñ¾Žè,úâ¹Áþ›7mÞ¼I+Ü3Øù1^^¾îÚ.`)pFÍ *ñW°X3+ãÌñû²ÂµÄ[b6· c}Wj[`¤?rEÞ^®®îä-vÓäGmèné=ßYËÂ[ô:YÍõ%þzâ!ôÀ·=Y°ðv›•ÞKÁþY, [ð†—b4K¾W„Ô_ùf^MaZ¹GRjïLèBR*ºk É»‡{ž ¨Òˆ¥Ð&Ä{ëäÖu2ñüQ‰  E¤*Šð\-ÂChÃ\ëÈ5ˆÁô`¬?ÁžoÕ'îÎýHƒZWäããîéá¸qƒ§%bF-úºƒFÅOª+ô‹`ÀƒÎµÄžá6÷R¹Í~ŸÂ°wb~Ú%¦GÙåôI&¥KPrPžU’1šƒl=í>÷4]2CÆo–®›Ï"Ø_ýyL /~$6ªY3÷V»`3~‹J«Ô«ÁÀW"T6Z‘N™Î#;‘/31u¸Ã§rø-¥F³e“ z!ÿ{x·=3tÇï™Òð^ã8N™¹µ^ü#ïØÅÉ:vƒÚéØÅuªc7ëÙŽ]œJ»w@Géë«ò©'‰D0¸çm‹ÝøYÙ‚šH5Å’›RN0Mï#À²ƒ™ör˜Êéï•,¢vn.=$Ó™:´Y¥hÎ>¼–b+[x8*ÌÒKÏNPGVò7¹fÎÇ:+W;íuk ëFX9zé"­È5Èv3s j9($0“–ñP£Ý¡ÅâÛC5·½¼;?£í×jÃGQ°Y†ÁEÄÞk\̵ý¾ÖðAGg;¯ HKÐG„Í\£Ióð¡¢»(okV¼ôâÃo”íÊ8….kµh0j_loQ6jýŽ¦È§‰. þÇÞQ0l}ñ©aëOfëÆŠÄŒ HðZ:Wë%Ð]~~1žÓ惧9Ëu*ð¿öT¾¾$G“ܽ5—½è;-óaVßsïøÔ°i¦¾‚üø»Ò»—ß;û¨åîe÷N±¿¶prê07]Pœ–°Á;è$þ,÷ Äú õlV*SÐøö<èÀ70`4L߉¦# ›%‹2 LN÷tšåYšð _²ª¯V 9V(»vD3r”O2†ƒ•ªóI²iX p‹æ©N)ñ¦cÉE”Ü‘Œf±§hÉý–`á+Ih­VÜ,U,âí»>C¿ÅÌÔ9Öø¾©àž’Y–3®ß>)™F·á=<(c>\iŸùpïÿóáJ3óÁ ,T^‚Ò¬É ¦IG–Ö6™ŒyvÌD±Ôœ?‹”H9€º"-ºÍ’ðÏÏ«ƒ§—½¥86;ý)Þ\§ô ~ÿìG>†C;½ÝèŽÜ2teÿ‡‚¤’\aêÅäîn=-w×®ÜÞ±gÇÎÉÇÚ°JÖºP_j3ë[­šðj¸¥î^Œ\ ï7x)äÚ²ã«oÚ†™ø!³¤^í¬ Ð«¼›=q4‡°ÆÊ©‚Ö"£TûÇ<·í>e „H8™D M…³’)}c´±ü¡ê¾ïj×2~ªÀ‹Sã?x áÙÜÓ»@ȯùÛuøð„ P‹ ”k4~LÙaS4*|Tv|VraZÂNòe(rã‡` Šœ4T+è³Ñ¦óLyòB`—ÛF[R˜Y“éK^뤾d}gô%¯)Õ—¬q}IphP‰Ã$Ÿ&j8ÉPÿëy¥™4±iºËYG)Š2ÍÇ´“­E ÿ¾¢¯ÙÌñ/8þ[4¢Úª™¦(yÔS¦»5 “¿J=ébñµBü˜*ŒRÕ>_U{K¥ªö M’±Çå[BÎɶ„ÈôÐ a¥L„Œ#µõ¿¯ª"7gŸÂ5!y¶´¯BíÙ–r€|ý˜–z RZäËëw5#•‡£¬òX)­<Ì…Ê#¬¹òj§çõU}Öb Drìg}~ú Ô´[íôÙEªæÁRï×½ÛoãW«*ÿÖZYö„Ði°sr+p!VðSŒ/1”Žˆ EF` 5Eú±òž cI¼Ûà¸g>ÃÞùÃÎv+ñnde´.È.É=å ¨ät”ˆ|ñG?¹Ž·uÒÆÃ\<]êâŸtdÅ4±â,ªÙ‹…Ú½ˆÿ(G ‚/¨Ã‚ ŽßbÝÓ®^šIzÛ¿yHbãûÅG/Uе8¹Iz0åVJì>ÄüBMÇó5vf-Ñ™°ÌN*8HB¦onõZ¨½)ŒÍFÂeŒÐÍ1A¸6Öq·ÐWÒÚÁ€ðßAÁ#ð¿Ïà)ÙéùÕâäÙ©œ§wvBrU`8%4¼•è(wã$ð.IØ`(LFÉ0{å)Ô„ð[&@OâW`èÝáÛSr3˜v¥°Ø ÅÍÄÊÀ^ß›/tð`zB˜ÎQá@ƒwhãOÂnq='N¶”Bñ×8¼­8çÉVâœhaZÅøk8.Æ5/ CñˆV°…³˜.v»ÙÖÇ•ô\=°²wT‚iÇ4 gÅ>¤ÏõVIH´m&àxeÀ‚œjU½ÚN)ˆéŒªªþÔ±::Ûj µÜó—-TU߿עª:>WÆ`«ÞgßoR†?>ïr}ìƒ^,GÜ8öÏÇÎßëN¬¾ö]:Ã>>•›sôXoTå¸Ã$g]Öª8}d†Œ¼\¼ü=‘òˆôO!‘OqbĤçäî Îᆋtüð;øѲåû'h¥|;dÁ÷ºóFÍÈ>3Qäè¸Üo+ÿã¯eøMË»àUå2Yùƒ’×*+‚XNki! p¥»¬ æ)ƒTȶü;kï`„Y„¿¶´prUwÞõ¾rÁD8L]ýR›½¨R‚oÛwªÞ/'÷(æ‡%º =¡}¡qsFó í£¥-ÂÒî f¢ä-nœ&löJ[`æáâädïÅÕ™F[„[¥t&•8¾•+; hžr™\«ÎwSó½ 0¨pxkWÀ?Nn R‡¼¸’ÐÜÔ¬n‘š²Y¦™c =K(ô}šA¹÷ꚡĨ· ‡KűĤíœL76™t¦{ª`Òž2é¦%FĦ_ã£FÐ’›´¬3D®ÿ:{C8ÖËo ¹-VrðÕ4ƨÖþÀS‹AôTÞŠ€“\£f‡³É|öËIm²eóÂóV·àÁ©¸öeJ;º0оהn½WFè”/ób5XBl ò,g ËÖc‘ »Iì‰g€§¿ç@¥ùDøÆlŠAZ(>2¬ ˜¼à¥.tq@˜ç®~ðfM<]щF·'æ2h0¼©‹Ü4ñž"t‘·4u‘y¶‹|âe!†VŸéÖàŒ®ðû Õ²€â¿J= ¾âBñWFy€åñërœÊ´œvzU jt>áжÝÛÊ+R ½¨ÜvûÊí+ãf¡s†ãGZ»ášä»Bá+ *ÐØÅxbpo*¤>(¼ð‚>Zèšõ‰yÕóª¿ÏŒ¡qVóÌ[h!´¨&'Í-Õ+ÕÛmY餯‰{Q‹]Ú¦ÝL‹|ä ‰×4öN>Ô”zë‰Yn& &øµeßP8¨j¥ï) »áòŸj•üî2PgJÿ"Üýòo³F. Â4n¡¢¿ˆÓß®[¡sÁü:ºŠ.e®¼t¨ì/é0þü|ˆçã!øýaøÛ´ù\¼‘sÄÿZ¸hêÖî°ƒž²·’³Úæ.¸³’S•EÀk¼¤ŒÖ"°vHÖ4¹3¸´|”Jøê¦ÉÙZ:èÆÈÜ•h%ZµÑÚ‚©og KÁwþEÇ‘zh[`A`‰U ~S—ØJÔ`‰NÒ^yU`œ7²Až~î^.øSl¯‰ÂXß8©eÆDänÞ‚¶¢È Yc±< Æõ>þzáEš¸‹tÁoÓh¸§çbèo6»F¡ =ô¤a غ™ž\¹E+â@)l QרiY¨ ÈsžŸÇåþ ‘£Mé‚ÿGÇK ­?s˜fÏLJ…Dkwãû‘Û9Ò|3½ØCð?ÁUPltGkI³ îOš=Բрä >ߨjÑG?Ò¸ÖícyÿŸT¥¨ƒªtéó.a³jQ¬¦rÏ—­ ™ó@«ªÔ÷¸õȋĀ^ìã×X~€8öžŠ•N¤\‹È}.®Ö ¿\³ mšT·”E¬íõj0£¾ž‡¡ çÄ»åÏþžŸ5ö{UAîÙàß{>J TUÛîÄÐØ&tâÇH%Î2¶ ýtáÉü —wÉZC?æÆbjŠþÇh0šRª{Ý¢ÆcϦ_~ åvÏ©tuùrÉ÷9ߢÑhœõì¥ãæ¬úán ^ïàa> ÷o·§´sa#ÿªÙ{=@Û ’±,˜/Ãr ßE†|ø!ÐÀÉ`ó|°GC4pJö‚©$˜¢»= DÂA:|Ó¬©$=I¯'è&Ðì5ùƒûûûR*ù¦v5–^깺”Õ™ ý~RƒG·Õ³!sÅÿÂ]ž‘êªðEëDS-ÖVAªKgɤO~kle2aÓ󛬃Iªb%™Dã®zA'ã(¹å£¯W¥±?**Fófq³’zµÊ?îßW'Yè.·ÞŽ|a¢]ff2ùB;Yˆ´±!K¶KÏL%³!ÃùøøË–Ck{PÅÓ=ë;؆øçS›pwé„yZÁAÍôªWi7/AÓosöï_,u ×߯%¬%kµ•,{9ÐÏ»&MƒM’mJcžcSÁ+I0pß ]šQ ,”ѱ`ÇA?!ˆÊÇî;bõPG žâMó]é»Â"KQŠþ4hLþÆjÙFeôßÇÈê oûÙ;ûyº"Ai ˲Yk`»TZÁ&?«5Ð_ÖÃÆÉåK!»Š; œH$Ê^"ciÅm‚Á-’Íj[ì Fùdë Ä-Ç%ù{fÏwá`>Ý©#Œ|Ü[BL‚S¬UŠQÇ|åç(N3×è,·!ID‹è7²ÔÿüÜòå²aALì¶# ¢·¤ù"Ã`j'ðcþR}8\ø0àòËís˜~ÿÄaºÜÌa›`ÇSø\+Ên¦©c¦©×…#eIÿº†ÃŸ€™*úæ–Û ^’¾¹ËCZ*yczB|L‹ÕBœi©È¶£!»³%d]lt¦Ø…ì‹‚òýS€0Y"×ó¤R¼¢:¶ CaAá Ö£á-†yð6Í>z¦Sôk{FÇÞÌ®¢w[‚‰·êÃkÃI¼­í$Eë~g(ZµJ)Z÷_œ¢Ëÿ¢:Æ KþS%ŽòZ*‘Í^-’~¢+4>×Äå?{(à=¾Œãϵ¡°zmlžœÛ)i §ZŒõøG”BZZ;ËèW·ùû¥,n•‚P;I¡¼ÉyGB?º"ùŽ„¡÷чNe&èœo|ŸzAÖíUØ<­6Óÿ¾ùЛ€:or‹ ¯eA] /âØÇ AÎŸÊØ±j/ÛíIqk%ÀÂÛy”ÈÉzÀ²‡ê*}¨ûUéEOkîE_TP^àùf–Nkœ/ÀR´Ò=hI išk":ŠÄù™HM÷K¡©[»Ð4\€¦¹xõÓv’"ØÉjÁN"ävÒÜÝîÆ‡¸J ªðF KtÈÝ]ߣ޼pÝ¿¾†wI)9¬J¸/‘Îî M½5ÅCr?…Ñ$Ë->Ì-ø×äB([ïq0ª¸âjoè™=˜1\ççn¦íìíàE2õ&äɰÿé¬áD|\O#…"ß=J+ëûœ<²ð;¬1Öq†h‘ñ~òñ ¿›7«´\(ú¾!Y1Iú×. ±®Ì?z/"go,Õþ“¨ãk!JZ Èv’jÒkÃcód´R)¬y™9?§¥A&”¥Ý•+šã:Eʾ¯±YAÃÛr¨ açÕáWÎdDçhûIUBnïÜwA«`µSûÇöÍ®3úÍŸ‘#Ï£’Ty/ò± xÞ“'ë3î[6¡eÌ,#Øz.Âïc•šGKfDSͨӶåèc*1åiÒ£U´ÏËžGû¼U[Ë …+¯EÞ÷ÏÀ'iLæ9Aï¼éñz±Ûº€™D±§<‡æ=ÞUHtCö§.™¥ù5½ÏΨT¸±:ºKë•Õ?u¹•’¿¯Ï®ÂÕ‹–ë4í¬>åQ½Kà:.Ð/>­+rõÒ`·wIYU8òÙ”ˆ{¦Kp81¹>*rÒšára½ü å÷½~ØŒóKTÄpð?Ï"X%, wK®¬ï±•ÜñéÆð+0%CXžÛîÊð«]šv†U¼3ü^›7pµËÍèì‚}v•¶Ú~ÅC¶6|£¡h$Yqœ;¡ Îɱg½{.®¿weAÞv?ïüüóŰ #¬ÏÚ»ð;]öWÚ˜È/N„E‰TöÛuïd‡¿ûn]ü»ïuéòžs_ endstream endobj 79 0 obj 33920 endobj 69 0 obj << /Font << /F8 7 0 R /F11 12 0 R /F7 15 0 R >> /XObject << /Im3 49 0 R >> /ProcSet [ /PDF /Text ] >> endobj 82 0 obj << /Length 1736 /Filter /FlateDecode >> stream xÚ¥XYÛ6~ß_!äIFc…÷Q  Ú ÈS‹Ý‡"ǃÖÖî ÕáJr·¾C)Û²ìì"²¼†g†sQïînÞ¼7‰Í¬b*¹{H¨0™¦,QRgŒËän|Jß> E·X ÍÒ¾­¾–Í‚¦8ž ìl:˜lKšÞC§*j×}½XJ¢"M‹oy½©Æíc—׸Òn‡ÍvèO@©;m;”m¦ÛÅ—»É’ŠÌ -ͬ ,Ø}ä‹%×:Ýöeóˆ]å:»® póÛÝÍ?74!ð&ŒƒÀ6QBfÚU}óé IÖ°ö!!·&ÙyÊ:a™5zUr{óçÍ»©æ˜ ™HÌ WÀÐg" ü§ÈDr–M‘^´Jï"o(=öA’Å’™t½]ë°Ü`».?Ê‹®h@àéMºjëeÐ 1¡t¢˜-Üè•S“ÖåãSÜ Ã¯ ©Ò¼ÛãèÞŸZ¬òm_àLû€-*Ýåæj¦6ž¸-›#8­Yÿ×:qâÀîªèAdÁmú{ëvìL§ÅW×-:0Ψ¿('9åÿ¡­*܃‡s~ÐiÙãÜàHö›r•W™ƒyóžé£ËP 4܋΄ ?¥…¡L½X¸$Éd ÛÂOj®8·B ¿:Ã^Ø2Û°Lÿ£FS¢ —Ò¼‡a³áLRc9#Ïb§ÍsR'8lŽ/•+™fFR*,UÒ0]€ù]áç‡ÁDÆWŠ€PÌj¸ ®Õ󀦂Eý¤Ša‹ŸÈ3pøICÇ›·†+ BRý>§ =*Úr`FZÁØwÍç䢣\T„4ZÉKü°+–H3Jäҗ ˆ]±DÀ ŽÃÄ9Cµ”ÏÙÊõb~.¢r?ë1ˆ±Djò"œƒ!‚[A

> endobj 80 0 obj << /Font << /F8 7 0 R /F27 23 0 R /F11 12 0 R /F14 13 0 R /F13 17 0 R /F7 15 0 R /F1 14 0 R >> /ProcSet [ /PDF /Text ] >> endobj 86 0 obj << /Length 2038 /Filter /FlateDecode >> stream xÚÅY_㸠ßO (à\­þX–|Åõ¡s]à -ºó°¸¶8xÏÆÄÎÙÎÍN?}IQrìD¹l0ƒöe,QI‘ÔTæ÷ïÞb–³<“Ùìþq&rÎT*f™,çzv¿žý#ùqþ¯û?¿ÿ`Ç|œI+fœ¾#1eÐ"›¥Šå*#.‰\°e) ÓÊËÎQ³Ü˜Í~%í-÷fLot9{Ër¦ 3V÷{ eùÑCßž‹‘Ìd&¬Kí%¤SE9Œ<Ë?9ççRÀˆÔ–KfÈW™±Ô쀰AJh}͘üš1·øRÅØ¨$%Y¦³ÛÎEÕÓ“ðùRJ§$|C–N™œ˜RøìÊŒ£tÍ>Õc–åÊkËÎLº¨55ì—OÿÊŒ1#ÏfSÙâµ Rlâm¦3“3Ã%±©®˜Èý6¸J{˽#\ÑçgO5Ó\ͤ`VØpÍ4 þÆ|¹”p1-€ì2p¼²OÀ‰\^ks#X¿„ÿ‡` ®‘êmÁZ8d›%sf­½"ËŽe9 H9Kyúu·óÿj© xöÆ0’ef0td°cWq,ž2ò30¥)³JFL°=ÔÈf7º|^*o >æ"ød)Põøä#ðIàŒäéÐG!Þg’éÜ»âcß´Åçr¾TF'/>Tm¹+ë¹IßkDŸY¦¬×v÷ñû¿AÝËxÒÎERDòóF ¤#zäãä±ia ó¤ y=—69ìðïPlR¶´Ð<ßöqô²<ÑÚº*>7u±%Ž]Ñ·Õ*hsûàÛoJZîŠÝQ÷.–tEkø}¸DqtÖGt.êuLˆuÍ/öã|B…õš©Ñœ¥LMò<—&)·[šÕ޼ Dò&Pé´@ù¸Â]çÕ–H«f·ßºˆÂJO´î¥ëË]Ø[xjåuÜmšmÙ=½x„³,Ó+öX¬ÀŒr‘‘IUÓ·,\6žÚ—mÑWMÍæË4˜[•8{­pÑž}ÛN†uÜÕòe¦Œ¢â®CqÇ·DÊŒ¶Óœ|ÀÜ}é1S.¥\„ÒxœižÜoªŽè®.bÁØ´¡ªWÛÃ:l/°!É‘TlÐã.W¦"¬+(3]EµÙímÛÂãe=àEëcOõméÁ?®‹À»¨Aé¡§Óê(µL´!6ciê°èäÖ×&‡DB±í•_Âq'zB¥ÛR—5EÙ,éQŽÕh1lo|äV6~0-JD 5ñ(Ï“çMÊ'®­ßZtÝawªÊ÷JDìöEÛ¹°‚‡¨cï[¨Ø  7Ò9 ¤«÷8®:¿Bò]Ì ®#»>)¦ À\ðßÒÚ(I‘ì:€€LÎ`5Ü[@ÐUÉbÏeÐ, t}áµ Þ¯êÏôV¾ßøG3u’øzö7öÚ£™vŽW\Ù4ÙQ… /b×®„w”§OJ„¦2 ñ^{a}:<«p².ú‚ä»G’0_H`ÛܽÆD²Ý¢®ÙÂ.M½Ýà¸Õàô- fY¯N;@w·ÞûÁááx`à¨:߈I3õÕ¸™©j@. `UÝËO º^<-îÅb¨«}Gã¢îj»²_ì?-ö/‹ý‹ý¾yø÷b¿†¿Cã$4ËN_µƒ¦ú÷ø £÷ßåûÐjг ¿ŸèóÍû˜ïqOgâ~33:ET ¯iÀsXy™ðâ\=–á”ä)ôuAÇ}Æ> endobj 84 0 obj << /Font << /F11 12 0 R /F8 7 0 R /F1 14 0 R /F14 13 0 R /F26 6 0 R /F7 15 0 R /F10 16 0 R /F27 23 0 R >> /ProcSet [ /PDF /Text ] >> endobj 89 0 obj << /Length 1733 /Filter /FlateDecode >> stream xÚÅXKsÜ6 ¾ûWèV­ÇVÄ—Ó[œv&½$m~A½¾®•(í7+º7+8,—Hë¤Ø¥ œØ-¹`Wuá⸠!·.`kâv'.`]0ú›m(¡}hK0IA>´†xCæØ°‘oê"Oó®ØR?ÓøL–ÓMâÚ`–"|Ÿ-2\æÑR2èýHQ„Š"PdI—ÜU%¡Ä£ ¶®˜ LÂÎxâ›äÑ£H¾›šünmxBòuR‚½uÚ<³³h­I ûÈÁ?ä‡ ‚¥.™Çãhƒ: Ãä²[Ø'¢ÈçBÒÖæuš#W1 ³› 2ìæPL…¾É”³  žçܰ8ïä§Ë“¿O ùs¸Ï<&•#…Fr'Ýœ|üä; Âà €ëÁLÝ8Âc"‚Vá|8ùõäõ^1Á}éñHU hbv¦+}7Á eó nЏ©ÀmÓ¤H4ºƒÌÖ(Â:E„ê&ÿ ;ÝäWhd=‰B¸”`åÒÍdøeA ¼¯¡i4Þ¯PGÑë!¾¾ZÈ-¾'6qOû]IÈË黳!hrK’¥à ÝG°>ïrÊÈ'Ì›¡ÛVEßáµP*‚ãy¼`uìùb/ bcsP¢ã lŸ ÆÑ‹ˆx  ˆ€³ÏÅÒ£ñÈýñØ.&ÉãF^Ä£ytÆÇñ¸þ?I’õ+4G(oEƒI 6C*dbÉ^ÁÇc(Ù‚x^ñ½ë»ï\ò½8 +0É@ü®ênwu3´s.ˆ½0~i Ÿ{>g/­_ƒ•9¤ãA8¹óŸÂãyÀm"øK#øjކøö8òãì[䙀ÀÌÕ‹â’âyJ:^ú™'ãþ<ð˜šÞÚ1 &2f;†(á[@P<-С;-СKe2®‘±?FŒÀK;Ø¿´­-Ë—öÓwöñzÏãâÑc\ÀÅh e(J•Uùn*’íÆcxÕ˜‡u6F{‚éÁüOØ[œ¬†·±yLmI’&­nËзÌF©5EÁÃCãÍf3œÀ =)Š-M¹­z|e˜’Ü‘MôRÏH6&u3±['µ2š¥Ûò‡ŽfþÝç^üQ˜ty{‹|ˆ0„  â/P¤˜M^&´ޤ (lò(ÈÀ€bÊK]žöðÊ:CzíE=©µ_ÓtAR“ѡ۷Á‚y™åi2&j¨ Y)}Ì(]S/¡Á00 ”ûûZ—š74I¯i‰Ù·täÊFëåÄzô,ἡWáù÷‹Ø®«¾°ÿâô—dcX9ÿc1¤Mh¿íÆWûîx¸²7¹¶Ãæ¼Q´Njûþ/uFœeÒ‹¥œÛs9þvD5SFmU‘4D9?ø?5ö"(Õ©:VCüÿ Ó›« endstream endobj 88 0 obj << /Type /Page /Contents 89 0 R /Resources 87 0 R /MediaBox [0 0 612 792] /Parent 83 0 R >> endobj 87 0 obj << /Font << /F27 23 0 R /F26 6 0 R /F8 7 0 R /F11 12 0 R >> /ProcSet [ /PDF /Text ] >> endobj 92 0 obj << /Length 2142 /Filter /FlateDecode >> stream xÚ­XY“ã6~ï_¡J^ä”­!©{ó”¹’ÙÚ›îTM’I¥h‰¶™–%GG<ýï Yn»'S;y±@Hà#úùÝͳי—y¢ïnãÉ(ò(ö’8 T{w¥÷«/ƒÅ*¿ŠÂtŒ¢(öïvf± ÃÐ?´Íº2{Ø¿0Ò·À”¾®xªÞÝY ¿ÝýÛÞJ‚eÅVÔÿa¥£þèïô‡¬ÿ‡…Ê|Ýö×EQ>Ä­‚Hš+ÿ+šèšjèmSÓh§;"Ö‹h0†ù›f¨Ë%Ð)NI莅¿*6 ‹bhuñ@££³ß‘PÝôn¯Riû•Aó~u‚;kþ¯Áí• ·Å(Tþ÷@ÖÀTyä7-~Cß´†¨fCßCk÷xL¤G÷ØÊö •ú‹,òaß¡ÅI9'‚fg …1ˆòj²ØšJ÷–78úÏÐP/®Î`õ*̤¿Õ"4n‰J·[Ó"­ü~‡áDÛ5Mö;c[&›Ê´º†HáÀö3ë™~MŸ.ú†¢/œ!ãBÜšu}¶ãëB‚ÏjŒÉ Ccèõ" }m«¡5§‘ÿ­~h‡ {Fc?ú±ÝÔ ÚÖphMy¨ñ“FnûÁ­¼§[ {RhÊ-_wÖðwœGýJÏÍr¬’O7K0šßÅ™ÙÈ¿zÚôI³ÿÑ'«ÑìhͶuùኲìIeo—´ü—%«kiü=}ŽˆpÝÑ ³õv\^5‘?iâ¥éMÑ›’”|§¿;·ô¦æüµˆcHZƒ¡3<{  *LÁˆ;™¦ÞJ¥A–åd•Ò`û?uî²õê½í‰ú±4UR6Ïæ¸õ,G%Ï0sA˜ÌFU¿¤; wŒ·‘Ζ&i„ hp+!–(tóêîæÏ láIO)»½HÆn§Åþæ×ß„WÂ$¸-óÌ;:ѽ2Ì€ª¼Û›ÿÞ<DzsfN©$¹tªÞnW.ç‰E6î«å“»cu}sèTN¸w»ñÖÄDw¡œKäH4ë^Ãê’¦5k™’>Ž,¯=îlÙqj"ÈByž:БPeEÇï#Òº.‰ Û‚Ôü¶XLSgrÐëÒ)\“Ü]s†ÊS:…÷qž›2D&ÀÒk‹£ù C-k@gœø¦'›(ðM¾4vµä+WC‘ãr«£$PÊy¨EDcÿuaȺI:Î VÍR@@8 ¼B]A‰ÀHŒ9µ„^ä)DP8\&2ž4±\:K¥¦Ýd—–¢ C«™Ì€¸±-{Œj¸¨³ý \ÁHEIÃ-9«™9¸:3ȹᆠh°·ÛÎõ,êZŠ'‡jI3½i÷¶Ö½a¶K#À?¡GS~¨ BAÄSê›ë(¡Y´9ô8W 5k—¤âvIʳv ø®]%à—C1?¢œy¯÷‡Ê,©¿±5q5­*†.ú–‡JãÇiNn‘D¥ÎG8E>B\Ùë¹ÇTHsß“ÇÜpÇÄ,/ÀèÜcÈÑÝ(ç\7 ŽlMŸéN ÉÝ(ÇŽ7¼œ½uåo°ÅNgÆÁ‘@R•4¬ì=_\…ײ!nw ˆvó0éÀe-É5.‰Ô, Iõ@;†QÑZðÕ®tˆ&qY¡y‰Å0îÍä\—Lw5 9°cOAµr ê CÕ (19AFð<‰Î/ÌW#î¡¬Ž­ް3­f˜ÇÜB€í;bèjÛÀ‰v{l âÜqûò)tUBô™J j½ç†ü²rÂy¡ôÉ1g¸#]”Nèýƒê}¨ SEÙ§”Î(ƒì¡*ª¨`£û.S«€>fÚ·¹a$f>å¸'"¸ølÉ©sv• “Š+Hy~z“á Ô½¦yª\9¢½m' c–"8I‘>Ûñü°žÂ½Ê#‰(¿ôð# ]÷°Œã ”©§ò$ÃôS<,ã,ˆm¨ %?äá(HN…§5ýк¶?M| ËRô^M†PEC^‚ë·Ùu†«Š÷7Í© S nY‹½æ%,ùè‰4ÿˆ_",³ÐŒ}š_ä’q(d E~ÑS¹BˆjZ»ß›ÒBº®ˆá@…_RIW™KGL¯½Çúùën”᎘õŸÚé‹7•u-~’QòJø> Áª²ëV·4è0#2ݺ¼oCö@’û£e.¥ãø¤ÆõVð-šýÁV£Ý#¤¬“å+Û|'Ãhõò§ÛW·o¾¾{õã·ŸANRèpd¬·Ë)%×Äž¯’dÖQÃÌÑâ_HéÊÕ5 ° E¥Y§ÒÎJã•ÿŽ`x3œB öúà´¦@î@™«éƒG#ª³ÛZWî&üŸ]W1ÐŒ«JH±ty*w8šÊ]¨\?¡y*ü.±aM@ÝOÏ|z@RL€šiwÿƒ9Àÿ€ñ¶Ò…9Ööãÿ\S4p0ÖÃè£êa<+‚ä„|TЙ?S<µ_¥l÷ƒ¥—OÚ]É8«i³'²­a}¬b§ówT÷NÄ¢^Þ/_,õ²lÖ,øY¯ëuÝÿÞl6éiÜ“¬ï–o—Ë_– ¾ë`µ¤ÓâãP>î ØXý% % zöq^ZèB:L¢«ñû–>_<»†ÎIÝý…ºÏÏÕÌv{Uá˜2úv(XçºjŠû½î[ûž/¾Ä2‹ÉÆ úÌe®«-›J/KhÜk¬f{m¡ùe£;‡Z¤:[šÕ‰QB­‘LOZéq蜰¦w!f3ˆíG(<\S8¾B©ü¸->‚(Ï"qr¥.KÃÇšð¤‰G/ǪP€eO ~@&cýRvþ endstream endobj 91 0 obj << /Type /Page /Contents 92 0 R /Resources 90 0 R /MediaBox [0 0 612 792] /Parent 83 0 R >> endobj 90 0 obj << /Font << /F8 7 0 R /F26 6 0 R /F27 23 0 R /F11 12 0 R /F14 13 0 R /F13 17 0 R /F7 15 0 R >> /ProcSet [ /PDF /Text ] >> endobj 95 0 obj << /Length 1409 /Filter /FlateDecode >> stream xÚµXÛnÛF}×Wè %H›½rwÓ§Æi€ö¡H rAÁH´MX"’Îåï;Ã]R«‹)ÇrŒ½p8;svæðÈ/.'Ï^qYbžD—W“–He£DiÂ…Š.WÑû¸ië»e;](®âeYÀ2Í‹v“¶uþÍíζÛͯӣЯÏfîÙÅö‘7~6ýxùgD£cĪ#‡|Z—ËÛÐÿ[pjeà´ªóMºvó¦\ßµyYŒy_•wŸÖ™·øŽ!*ÓÞÝêîGœ†ún?ÔÇû®Ò:ÝtáükB»Y›ÕÞfUù«J×ëlåæ_óö&<®=‰Ü¹ïð ‰eÑ‚kb”p±¼Ê‹U^\OB«8-ÜøG‘·9f„‹7}FK¦eˆ0Ö¹º¼ð…0ñÅ›—¯ÝlªÓú»[@ýL¹‰[(“Æí¤n¨K8 ð/_•µ›| Lö±¡máÆ|ˆ [´qÕ–~ìÁ8BühU—P(2]jã¿ÊÌ¥’ð^ÚâLÁ,oÜ b›²Ø…‡kÀN4–i›5Þsдe^{Ë:û|—×x9¸êÒr‡øç}"Ç Ä§J){`ewÛ7à?+–™[yؤ·XEœ7Ï}MèÝäŒhÆÜ¹_ÊÜ×Q Ë‹ùíübžÎƒþŸWoé¼úï(˜°.‰¾¼ÂLÀØ9,°µ {&ßdE3´Jyåi`¬sw·î~Ùu³|FºÀ6·zK!nØaÅÓT”vT¤ƒXëüúÆz“ò&_ù7¾d˯óˆÿä±l­‚4ž›Tø5’nÓhãlöžAmaÔ’aï¸B6ŸA¦2~ÖƒhöŸ, ivå&ÿN­„bh‡'¯3¹ÅË´MHº”÷¤KE¼ÂxÖ{¼ ¶žüÊQÖ]ðöµ[»8Áâë#,ü9¼§ÑfkqÀ2hköa/Їòˆ>> endobj 93 0 obj << /Font << /F27 23 0 R /F26 6 0 R /F8 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 98 0 obj << /Length 1336 /Filter /FlateDecode >> stream xÚÍXKoã6¾ûWèÅ6l†¤øQ´‡M›C.ZÔû‹…"ˉYòÊR²þ÷>$K–â¸1èÉÔœg¾ùè‹ÑÍ•žBJPá-6a 1®<Á%¢>÷kïÓx_UTNæœòq”gð&Y¹ Ë"ùn¥Óéî8±ÿy2'˜ãñÍÔÎ.ãÓÍ{·ïfòeñ‡‡½9!Hqgæíô®€a?Ç)¨Hj•¿`û»É ;Èrû›Wå®*gné­*¶ajlAa¤k¹³û×ÓÝëø¾zxH²‡¶ó7wA+~s"% |êÍ)¨%Uû1/!¾ïËǰÔ#£ØnïÄœ (ÄÃl+âp­×Œ~_Œ¾ˆ±G>BÜ_E¢ÅŒá :jÖÈ:¯îëNÚsŠÛ¨jÏqTÖ0tx·Û«S·:ËÎá›Ë v.]öX¶pPíeUdn[Y2!ãî«(Š÷ûM•Úa¶¶ñ÷¤t»’Íq[é†nªÊB:-Ó™¦e.ùôЊ6S߯@°>cÂÒØb aH1öƒ æ$— ½ô˜ÀˆHvÒ€Û‚{л‘’üZ¤ÐýñkH£ÓšÛÙn9Ûf»+Ѧ)&xïC’õÿInOK²!K·ý‘³ú§;U0°°|Ó€©éîл´Få¡WïÊt·zÕéÕkN_TއÉÀò°~æ38´þóU‹  Z}Ÿ?ð¯ªZÌM1jU T­ZMËc=Æ':-øh@‰–E¤ &-ûV€ó»ùÙ€kÂsè+àm’4Ú”Áõ¾&*ªU_•Dœøõ<‚‹–ªn4pÀc£q݆Ð"*Ù–bl9$õ% î¦ßËcœYü¶mHï†VÛÓ™EyÛŽ`AÝŽ`hÚÌ%¥ûvò¦i^Ÿ×\7\w¸-k-n5H áY÷¨>;Ô …gDàÒön¢è‹m’šm’l?þŒ·y1pºàHÇv+ô‰\?ù9P|Ü„|‡’_!ð‘J†à¢¯I}¢«GM”ž}yøHùMREafÏqo ÀªÚ›Gö ã°*sÀˆDw™‘#þxkcgw´‹jms@:ôIî˜÷ yäØkmž,sÆØ5œB!=¾–7x)2qgO%Ò¨¢‚_þú& .ª‡¸Ïyâz·>ÎW­]ÓKÂY«ƒž¼T(F òâL£A›È^Ýè;ê~P£ÔPϼ}W ;‘CÌ!|³ ‹‹ÿØéþ­Ã[þ—ÿñ_7Tèt¸ º8*‡^TÊAj‚®zCu<]½êéI gL–pŽ|F¬)Ô%þ/Þ¸å* endstream endobj 97 0 obj << /Type /Page /Contents 98 0 R /Resources 96 0 R /MediaBox [0 0 612 792] /Parent 83 0 R >> endobj 96 0 obj << /Font << /F27 23 0 R /F8 7 0 R /F11 12 0 R /F26 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 101 0 obj << /Length 999 /Filter /FlateDecode >> stream xÚ…UKsÛ6¾ûWð”gJO>z“íz§j2¶ÚNÇÉ– ‰±Hx@*®â?ß]Œ%Yi/¸»Xìî·ßâ|vööJä WTª\$³eÂ¥¤E^&¹.¨:™-’;rc–Æ™nnúôóìúíU™T´Êá `I&8-¦wüsšiÆÈ9M3QÀjÝ<Y׃H*F.n/?þ„ZNê`t–Msïj· ªeʉuaß›¶Y˜OŒ«®L0~tvåê¶mº aI¶—( Ê+χõáqhÚæ[=4¶CãÝÒ¼IÆ9­tLtj†µM5'‹BÕ%yƒKAnírxªjÌëÀMª(Æ« 3)%á<Ÿ˜f¥¢$µ/iI¦Ñê½…Sš|iÚQ3žÿ½~HuNêaTÔÝ"hƳ§¥"u›f€P¿n†Ô#Å (üÐ`Œ1Ë#€0®©ªÊÃúîa†…¯›•u ¸Ö-–)H·=4Kضu‡ÉmëMøÏpaä+ †äàpôbqÓ“œ2ñªJ“ÌÌñ̺k棯óˆùC— Apþì#g‡AKVF¤¼û°CG6 ù®ïša‹‰˜ °Ë½3ãÝvcW;¼@¯GèÇr!òyD^Fä/0.ȯfÓ¢§{ˆòw+ð£$'W^u‹M”ÝÄ3×Q÷'Þ Hwï³6M4ôè{ïÑò/Ÿææ!¤ Ÿ§fþ tyQIlË`\c]öc¼}œ6ÃФõC96PdéYšW,Ùÿ°œWÀb)Gîݾ›Lá÷Ún]‡@ãpÞ¯ÇSàÆ8úJ._xìq‘òRùa^9ö¼ð¼–J,Ÿî2çÜiYï¾#ŸBz上H#(v×i3 zÝu~žj*@ „.èÍ÷:ƒAì‘.´^[»Ï:TaoŠÈc¿ %.¢¨·›@2Û' íi=¬M Õ§žÚa„~„±)ˆŸª+?A#ÿ_× R q4G+ýRkÅŠƒª$‹V~$š{·õÏJcr,¸ÔTŠ#jéXp¤‡d•§®·ÃÖµH¦È}T(6—Ûiöœ2÷r…S%Ó Þ?ûmrþ‡Ðàv¨fqHÿT¾Ûqc÷›1H°Þ±è?¤T¿kAjœ)‘“¹íÌI€JAóBœ|ÿ2¥äáS‡‚7aùï§ŽkF9߃H©êõS'tî9,¹–‘LB Z”GîËûÇ5§^ÒLŒ¬õ¨<ûevö/”# endstream endobj 100 0 obj << /Type /Page /Contents 101 0 R /Resources 99 0 R /MediaBox [0 0 612 792] /Parent 103 0 R >> endobj 99 0 obj << /Font << /F26 6 0 R /F8 7 0 R /F30 102 0 R >> /ProcSet [ /PDF /Text ] >> endobj 104 0 obj [766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6 408.9] endobj 105 0 obj [383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6] endobj 106 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 107 0 obj [680.6] endobj 108 0 obj [867.4 1064 1110.4 626.7 772.9 1138.9 955.6 1284 1075.7 1047.5 875.4 1082.2 1030 856.3 832.3] endobj 109 0 obj [892.9 339.3 892.9 585.3 892.9 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 585.3 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 1138.9 892.9 892.9 1138.9 1138.9 585.3 585.3 1138.9 1138.9 1138.9 892.9 1138.9 1138.9 708.3 708.3 1138.9 1138.9 1138.9 892.9 329.4 1138.9 769.8 769.8 1015.9 1015.9 0 0 646.8 646.8 769.8 585.3 831.4 831.4 892.9 892.9 708.3 917.6 753.4 620.2 889.5 616.1 818.4 688.5 978.7 646.5 782.2 871.7 791.7 1342.7 935.6 905.8 809.2 935.9 981 702.2 647.8 717.8 719.9 1135.1 818.9 764.4 823.1 769.8 769.8 769.8 769.8 769.8 708.3 708.3 523.8 523.8 523.8 523.8 585.3 585.3 462.3 462.3 339.3 585.3] endobj 110 0 obj [859.1 863.2 819.4 934.1 838.7 724.5 889.4 935.6 506.3 632 959.9 783.7 1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 1074.4 936.9 671.5 778.4 462.3 462.3 462.3 1138.9 1138.9 478.2 619.7 502.4 510.5 594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 530.4 539.2 431.6 675.4 571.4 826.4 647.8 579.4] endobj 111 0 obj [446.4 446.4 569.5 877 323.4 384.9 323.4 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 323.4 323.4 323.4 877] endobj 112 0 obj [416.7 416.7 472.2 472.2 472.2 472.2 583.3 583.3 472.2 472.2 333.3 555.6 577.8 577.8 597.2 597.2 736.1 736.1 527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 805.6 805.6 805.6 805.6 1277.8 1277.8 811.1 811.1 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 888.9 888.9 888.9 666.7 875 875 875 875 611.1 611.1 833.3 1111.1 472.2 555.6 1111.1 1511.1 1111.1 1511.1 1111.1 1511.1 1055.6 944.5 472.2 833.3 833.3 833.3 833.3 833.3 1444.5] endobj 113 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500] endobj 114 0 obj [277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5 490.3] endobj 115 0 obj [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500] endobj 116 0 obj [849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7] endobj 117 0 obj [272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2] endobj 118 0 obj [249.6 354.1 354.1 458.6 719.8 249.6 301.9 249.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6 249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9] endobj 119 0 obj << /Length1 1014 /Length2 4576 /Length3 0 /Length 5223 /Filter /FlateDecode >> stream xÚ­–y<”o÷Çík"RE3c²eìÛHEdk˜ c†1ö-{)ûÙUö}_Ù“%K–ì¤Ù)×9çz½n~^- "g‰‚á° ”5”à$"¢ÄÀϯŒGYÐ8¬Š@¤¤n`(KÒé…Š‹AE$øÊ8w<ÚÚ†T¾ñËI h£X€†ÁeOаÀtp4Šà(b0€‡¿v8¢œPxÄh`‰²FcÀ¿4©c­pÉ¿ÌHg‡¿—\Px'’(€ào™7$‘Hã@¢¬Àš8R6IËÿ‡¬‡9c0šö¿Âÿ®Ôÿ¬[Ø£1îÿöÀÙ;8Px€‰Âcÿéj€úKœó?iÔ 4BkADþ2¡`h7R M@ج,0N¨ßvùO ¤ÂýV¹WVQúwO/jY ±]w‡ÿ„ýåý›!ÿeRuðh7€±©¼’#éùûËôÉT±µÜ—Xàñî ¤é!‘8À@c‘(7ʤ Ââ¤-RI¼V8<z¶øeú‹nÀ–ÿ%)ñ‚ˆˆÀÈ?£þÀ[°ÕPL¶qw°Aaÿð ÙРlû’„Øý$%˜ÿ"©zà?B‘&ŒûI¹þ@1ÿ’ò:ý¤¼„?”Èå$Ùõ7þoO•”pnž@QÒÁ·ÄE~EH‰IxÿO„3Â~ßÒhüÍVhÒ ¡Pn(Ãø(!h›Pœë£š5G}“\ɺ:R³œø¡‘1àc9æuÏ=Ç›Óeð£ü$6¦eêeןÜN¡ ^Ú}° ?ÇÈÄ‘“eóå$ZnøV’†û’ÃÕý€Uæúªá5qòCÓ½¹±†Ùí)›«Z‚*ºŸi§xÉZŒ]*Z’%$á°$Œ^HPÙuQÞ‡çsŸˆ…|r=Mõ©?ÀÇ6„®Fhò;®Á™õ(‹.=æäÙ!‚æÙ3§‹OÆŒg'¾qËû{×ÎTH¥Ä[ƒR?¤UåV¾×q—Œf…~”Ý\k÷L®-ÔU\9ZPùÔÏ-ÓK´ðü(Û©8ÒtÒË ,Yx‘°…¦k¤Å¡^1ùÄvw…&•}P÷gqôE>¼[ˆ·,¥Ôngªˆ¨èÓZ@ï­Ht rÐÌ-uÊOËgõ á;¼0ÍÊU¸ÅkïâõŒè'Ja´'¥;dÜy6…ö“‹·5Ý_©ÌÈÜ=¤ækx¬ø}Yó½‚ÎÛ4†5t’s(-Îß¾|OY4"è1 Y¸hèÓH@<¯K¿ÕktƒÊ>ªëyÈt‰Ìò»™UÚ/˜™‚ ôßy]em\gÈ‚fÊÐYD×VT\ÌLÛí²™gÁ åš‚u+ÀÉKÊKh÷L´+}H‰¸ßHÙ1Îh™òÅU„Ï8<ü)eíU­DÚ—zY>š†E7S%ªÄÒ2‰É¥»;Êršfò‰"«tf>¸¦ëVFRÏ[‚47ûÓzôõ¥Ø¼î¾X“TøèÔ¿â{¦ÒËyão¨1€ÒhæáxÛ·ö:ú-“ÊqÓ>Õ9Îã-Èç}Gw±BG£6iS ÷êÀnØrŸ ÃG¦Á=ý륚¢ýØ2Ó·*G–ôæaR.É—N«PAKÙ}x«aLá¶±°ì9:ÛÕÈ»¢Ÿ\&„ß6ûH²ø¤ø}ؘ`iܤ!hµç¼’2$êµÒùò,ÿ0  ùŽ+tÌOD¾_Uè€ö>ÊÔTì_emmÊl53Ì:ļªN¿g°¥vYb·â 1µ±5sÙTa…:ÅD‹Ê±+ú鯯LGoÜ¿`­D ^y’(ålæiìà¨8ôjk×~4Gǰnòiø—‘ÉG¢øš/˜Æ÷—è‚òj«ù-3ßïwÊú2kÏT>QQØAöÜ0ÌV4D¼ã&"Œ›vVX{̘Ü‹‡ÈR[à<™mE>Ø•}Ž39¦Týnw³ì-@1)¤#¨A©1l s4Þ–N–ÈÿWm¯¼Û©¸/²ƒsRB´¸æe (þÞõŽZ ù"^¤KAcßÉÏgžCww.ëqÙïý Î<{¡VqG[Æ'T»m,¸Ü Eh·$åæó<§˜'`ZË’=Tú œO'fù»ÏUåU[!¼iÝxoS5O~”ȰúÍÏ‹ ½¹ÌZ+u‡ÊfÍ3~)¹ë<8ëôQSñ… „À= n~g¤ÅPóúAó[Émú˜š‘›(Øh‚Ó¨;Ñp9çežžƒŸ^šúŽ9™ýW€Í#³’ÝÆZ^Ž|b`Ü$Yâ`1b`âØhܯ“as¡“Ðì@j7Ìï:Ö!~FcúðÔÀ1и â¬è{ƒhÆó#áTU*ëmÐ…?A”4@‡—Dïpe×1=š\ÌÚ…"Jó÷<ˆJM|ÛŒ§›d(“£1:'ïÇ_W•Ú‡¨WÌÊ ¨(é©g-5Òeñ ‡g dR)äÓÊ Ý»M|i„tn—ÞÙ§få~¼¨Íá»+ Ìѳa‡ìëd Æù×+=^Ý’yàžVѯ‚]W½¸rÑÁÌD1$o»ÏHÑ~!e7é©¿»ÒŠ!Ä^KvÕ•‡’5ÜïGæ™O1]Û… ůÁ.µ“Õž‡FÜ›æ[E²çž»WÀsÔZXr)ǃ4þ> Ò{c“´Ás_«nå;ŸNŒ¹w5°bîÄÍhݩܮ+)…KªpùÏ}èZNUß¿/À¿´?´sùÝöÑk—•£l~F"Èÿª„em\`îyã£XVTÖ^­AÒí[Î;T <41Ž‹ìúk1¥ýw]eâì×e Må¦Úpôw‹zQû²m×W×­K$Æe9ó£ö³å…hÞ;v¾Ø‘Œó]À.šV è”}5<ãô2IU€mšæ’Ý :ñ«¼“ÛºÏÜ5ÓÒ3_g6}Wç_ûÄû]ãySÒ£`>‰á©vG­Zk BvµÇÊYƒÍqþ»UÏ~(:Øñ"íë’YeËo•¨¡5¸é? äN óζ¤–¯ÍÛzÓ‰@¤{]ÝŠí PÃäK³—Ü>ÈÜÉ%õñ¥ÅµÓ`Ç[LJu*5vaÄa¹1#ÛGÒJ«ÚaŠ–Ý绲nÊŸPûzÕ(R¹vËÂj=ˆéw‘ASD×eAÀ¾êó;RÉaC-Q¯ôgMQã ‰9ü…fd˦äl÷γµÍä¬|Å@ÃÕÕYëü5mÃ7b%k·—vÛï‹ö0ÖÔÕg%.KšM3ÂZM[îÞ<ñ¾ËÁ׿’5(ª§æO«‹Êë`{§6 ÿñH¸ñh8Ë4ÛÓ¤w€WŒ)kY6ò‘¿ZÂ|QzÚŠ^z‘ûu"$³cîiPæ‡h÷‡8ÅaíФ$¼KfΛ/Éoö¤NÅìŠÁã7máWfäÙùŒZüè#Žui¹ÎAÜè»W¨âÓXpgM¢Yk–³3,sJ*Þõ3+oÈ!õ‚md”.½ I’ÝÊ_?P-Ÿpª1kw³0ù—ÒìŽ?¯z×HËÜ 3À¦!·â5 2˜U\?-Ú»aùÈŽfn<Šy Ìæi-v¥ 5²ú†zžã³<Í>|öþaÄ–su—ez|ÏÌ!ò|º¨Nߎá§0rd~Þô–ºøš#°,ko‡þðú1þëù±ÆWÑ¡¨ÄÄÛ@§ÄíR÷ß5fâAErZÈæHñ‡‹''¸‚ƒ ¿ýC3¡*W‹ÚEe|ÜkÿXãRƒj­Uv åâI—ÏõŸ¯ •~ÄcA† >¾¦tBmk¯·dk›¾™²òn%į3·C5èÜR–Lš¶ “9c›(–V†Óf烩[„h:àFªp¯’`îÜÁ™’á7Zr@(¦²Z¼1v†í”Ä–¾™¨øµôÔžnR@Thï¶BÑå«\g®dÖõ(½ˆq£LȨµ¢{ç¬Ôs„`üìtë-e’êX‹¼Üö²æ-Ø­Ï_eŸ[òÜ¿þàµb9-kØøÒýÉÚ’©–†˜é×;ô%Û­j¯/U;úØ;·´„zß/"$ ðÙq-p}QQ0\B CFËMm†/¿§Ø“iÒ9…„Îëæ1ºôX]^­ù䯷…uèqG„6h-EÍêÏ·)­®ÉZuXi6#Ï©f0GÊ3°¼±oA¨ëmü4iW8â,WÎôèçöú>GYåý‘aÖ{äÊÉ*¤‰n:G¥áïé2ÌNÔž’~ulZ4€—ù=£l¿ 7˜T­ÝTmn=O-ñÉ·æMÌïKïi¬|¹}ÔDN~nÀqš»T‘`yÀû©3ý”A¯ñ/ ÃBvá™ žPm‡KV·Ò ½.À¶EC¹¸Ë:~ºÅ'Þ9𢵑äþ’·ò¹9>Nh]”q”I-Ú–/9ô#1ÆÖ½—ã³²©8S¯™Úʺ¨V¡•æê3zv¥-m&Ñuþûo˜³‹Íƒ} 3Ж%Ð=k;%ãÙN?ò ˜C1îÙ¡mà(%E ,ù6 ¥O =ß™§ª[«Ò“]%ëX¬ï’ðUS|½)‡Ë9«‘üäü0HyÄ%ÐÕ4[½bÐÏ(t³”1óòb:u‚ûƒæ;îfNr˜7N•?u‰!1LÓšÂ`±JA ók(bê Û·¾—®ZõRÙ®oŒœ—SÍTP!F͆Ú>cekL.ÎO‚—r(Ø2šn ­I¾h-ä(;Õ¿ço¼’Ñ>@ŸaÈ€Yê·5L®=Ëš}{ú³ÕðN1Xn«:t­ˆº¤jB÷Aˆ?!²œnÄ…>’fâƒÊqÇ.œ5#o1úÊB9ofŠ ‘óè<{|Tœ<Üú^ˆö¥ß Iw¶µç@¬W”,F¡™f‰¢Qˆ‡ ]âT«NŽíÿxãGw"KhëØ²M:ÈÁ™™„³d_Œ©¼ ¾ÛH}ãr“ŒÎì^þº€jÆEÕ6”ooâÓ ý<üÂì7ÁË3J»2êžoæähzOÛùÆš¥Nâiõ•îÞ½^5V¥cWÃrT ¸luöµ×ÚâP•PÚŠsoÖÚÝo™D çϬl¼8Ÿ÷€è©„@ƒX“ƒÂµeŸ÷óõbz¸dZu¾¦üؾµâZíaÕV›õäÛÐgÜ‚VêÅîʤ¹¡òó¹;át•'šŸ>„GyŸ®Ø=ù)¼ˆ¿ýiª9hd‡ÓH„w¬6®¸¼æQx$¨P»ú‰°ày:eÐf!o‰‚eJúÔÓ¼6Åp燣:¡Šv3Ý Õ˜Š@‡³dЀ©ܹNÇÍJa8|<ÒáÌå£M+qÝ—ø7ßsÖ"ŠÈ™®V›ïɾý ¯úf Gj§¾Í”z6¢™Å:x=­©±£\êP» ïüô5ìÈÈÝ·¬ç±V@$Ì-ÑîøÍ¨Ü5€ëEZél»dû*jg¹êÇ òãžÓí€'/åÙ=G™[c¿0Ïœ1wàÏP¬·{ È…1;èÖÏ >éWlã'(®ƒULØ´³çû„;K>}%rê“ÃéQÞb­àRЦiõAÔŠÂ^Â=q$¤@íFèŒÇZ­‚è)5¥;*œÁkÃ1rHÈ2Ecü¥í­CèÝ’PÄì'4n©?Ö{ÀüZ¸í«B»ŠkŒädÛKà¹÷ÏWéŒX ûj^öRµ%§^–”¢Û¼cúì’oÄÞ–²ú)êfXŠÓk+]ÆÊ‚b= º w,Ut©nóÕØ fA—ªW]ñÁ9:Œ_¡ü)¦ãƒüÍÕ\¼qÆAeLõÞ¥¸N¯»*/‡—„óµé¢&û4òL¹Ž÷Ÿ ÕÖ]õ¨6f•â‘e/Ò¾ÂP¤˜`Þøó¯™Æ5Y(ÒøÁ [ç™Ü5c Èæ.û÷ (I endstream endobj 120 0 obj << /Type /FontDescriptor /FontName /DKXCDD+CMBX10 /Flags 4 /FontBBox [-301 -250 1164 946] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 114 /XHeight 444 /CharSet (/a/b/c/d/e/f/hyphen/i/j/k/l/n/o/p/r/s/t/v/w) /FontFile 119 0 R >> endobj 121 0 obj << /Length1 1274 /Length2 6602 /Length3 0 /Length 7345 /Filter /FlateDecode >> stream xÚ­—eTÛ¶…qw  q 4ÚX€àîîÚ84îAwww n!$X 8AMp‚Ëësî»'y÷þ}£þÔ·÷ª9ç^µkQ 4jšìâV ° ÄÙƒ‹ƒK ©,¡ÇÅ àâàÄ``t›{ØAœ¥Ì=ÀB.AA.€¸§ €›ÀâáâãÅ`HB\|Ýìll=Ì’,ñÄÀnv–æÎes[°LÃÒÜ  ±´{ørÄ=áлƒÝ¼ÀV\\+;K€ØÆÎøW"ygk€ÿ_ÃVž.ÿžò»¹ÃB˜a!Y°ˆVgG_€Ø¨yaIþ?Bý§¸Œ§££Š¹Ó_òwé¿æÍì}ÿ·âäâév(C¬ÀnÎÿYª þW8 ˆãÙÈ{˜;ÚYŠ;Û8‚œÿ²s—±ó[©ÙyXÚ¬ÍÝÁƒ­þ3¬mÊkɋ먳ýïûü{RÍÜÎÙCË×åÙ¿ªÿf®ß 뎛À“ƒ““ V»þ}güfÒΖ+;g؆àÌÝÜÌ}1`;F|.€³Øö%r8C<``-y °†¸aüõ:A| ø_Cÿ"(ñ›ø@Éß$Jý&APúâçe~lå¿ ¦©ô›`šÊ¿ ¦¢ú ÀTÔ~7¨ñ›`šš¿‰ÔúM°5hÿ&˜ƒî?Ûs@óß[ƒÅo‚¹[þC\œ0{«? ÿ°8Ö ,Í dûÂÙý0[Ç?æëô¹`¾Î ÌòÂ|]þ@˜¯ëóuûa¾î ¬õ ¬ž ,•×o„(@Ÿ?Ã÷oüïÍ-!ññgçã°sóqý•IÀÏÇùúÿZzº¹=þ>7`ŸÈ¿ÙÚöAÁ>`KŒ¥yˆ¥p˜}FÛÛª@é’©jdVx ›öD•æ_{0C“àË¿(º²®6éÝÖdâì ïP{ßS¸G¿P—9 qMÌœ{Üñ2ÛÉöë¤Ð;ÏVöÝv¡½ =Äín›½8âƒWY­JÕ/Ì;:,Rc–ÒÚE]¡ûdèÕò)' į'“í¨ÞÄÈC£—éZÉõÆKMF‚N†ÚG u°-ŸAÞ{Ü– ¦<š"Zë˜])§ûboÜ&Ž]4WFoz*géÇ×Ý[®Pçr:žÇæÌ2ý|áa”UÿÁå[ýl~©Á*oµl”?¶]tWO)6\cbcÐd;´ø½­™Ê%ÕXÉüs[EÙ§ÖH?ák-_qâ»z™Xt\ŒÏq˜sXèŸx×æÃ¥êZ‚²¨ÜqöìeÊ"­?âѪÑÏm¿e—_m]<M[’ĉؖ&ºJéà¾Ü4C—ÆvøØ\-‚§;"†bd¯Ñ•ÎýA!—m?kåã¥A7kÔ ÚL¿6Ç|±9ÃlEY ¢ˆÜFÚÆôzºÑQ»ì\Ö%ƒ ¯šk™&%°¸œnt#D •N—*ø"à|_‚‹³ÆÞÆÌY(®tËzÏ•o½‚GÑ©³‰"Y”“2œH¾åZÀ‰ù¨g}:ÿÍdЄ”œþk;êI Ãl,¿Õ~Îp#^\ˆÑymÝ­£Œåg¸±ÍËýèöÓ7AÅŒ5º§þ¢¯U6q¾¶bsò ÅU.ÝòÊñ=Tn®ä;Êæ‹gãj ™–Z’OçîƒÖôã¹2AÝÎÚ“s'nõŸØ³Ó=éŸû¹r9pÅm¹³˜ðòKeF¹qº7vß„ŒŸFáp¸µ¹ò…QÑñxP¥Ì}øh‰µ¤’æÆs„~CºýÅåe`Jq&Ž{˜ØyÞé°¬Û6ûaqxgBј‰ÕL]gÈŽ,‹kX˜z±4ô²Zø Ã~m¼ ç»'îyß#¦Úºð!A•ò+<º6³ãH‘[þýÃÒ-¶ÊŸ`I¡D\ÊþªÓ½hF¾ÓÙY‡Â€To$Ç×~ŽÓAæ]N°Ò‰›Œ™EZ®8þ.Ñ Ž|mçÅE`̘KÂÝ2ÏÁ‚/‰c¦1dM@M11Ýɺû˜©—çùçŒ÷Î('­88ŸÞ°|µ(ÜU=“Õ­Qz62ø„*V?,l‘úf6…`àˆpm”aðÜñd‹tCV£:í˜A‡¡'*µCoH®ÚÕOœy©Î ld›À®fØÞVC¤ŒD¦g6üµ=›ýJXrŸ>†OõІ¸Ô%;ûK¦çaggFe¤¼<tÔÀÄ´ýs§mï`ô¹(Ñ‚z©Ûgà(ú‹žžÈ³~宯œ”Ž%Hâ¤[Â^#1n“åâÏÖñ–Åùè?‰¼0às!õ$¯urBrö®β¦¿\Š¢ÇûYºa j>™©GøÍkàtKS5-?xSA?F{x=ûÔe¼öµwu'`äËâÑÝ!K r\¤&xã¢|+A8Ë×S®º?ï4> ™ý(l”Ç„D›Ôb‰¿§å LMlJóOsódìê9jÁÙ=ž÷Ñ7ðù(©ÓóDýâN×”ç™D_ÂhÏ·›i±¹ÏÖTÓ׺rW$ã‰? ÉÚæY+Vâë™´½ÛL{d„–ÁE8ß7ð mΫ§øµJ妫 JÝ·Èû2¡/ŽàUÄ‘qÔåá4¥|¿ª›.r ÓœÇP£€"‡Ûož Ï|¯J¼‚d$H+4¦|#zYmþtXÞjÌè-lï: dŨ/¼F<•fõž¦ru»èF–[6ó«Þ„|­²DXKŸ³}gc¨VÕa&­QµƼ¹Ä–ö=ȇ0£@Põ-Žæ°‡_]ÐPb¡Kj$ísP*ÕEsdoyÑ=CÁªCq°B{É#E¦{RÚrëÐæn>œH%HRÌ£¯ØôÈÙ+]£L¬g…½åGßm41oGN/JBó )Á冚–j?±8¨¤´–f5 )œc„èlÆõCÌ l‹4wÕ<Ó_FÎ#d „¯J »<£9$@™Ñ <¿¦ {˜çï\•žõ O×ÑO+Ã1½-¿Ç{– l®rãX½Šyå`Ð/öcˆùªn):nÌçüN?ùhÇ çöÐÌz:?QÏî]œ‹ \OÔùçE ‘#YZZ¼ëÇöå}Ð*/Æ uTÊ'¯Hámå¿“ D{ã 4÷¨Üñ?ßG ÿÒø(‚TرÅTŸ«â^ªÔz¬(¢¿šG`”RÑ^I]ÕyÿkfF^<ïk™  o ÏÄ* á¦ç2e!f7£-­$—t¥>“µê13Έ/’?·~á€L»úš¶žöÞ¼äÄ«c$­ä}–"P(µKà”*PŸ€O·µÎÚ‚'p›ã0{b=º!\ð¨8íáÁ úÒ¬b™ŽèàúÈ®>¢9]‡‹—_­uzÝe&ý𤶒ÀÈ#èÁY‹ÝIÆ…N ÅÎÐÆ®TjoÞCµu<’?2Ð%6Ð<_[85´¼Ýý ÝímÊÆöeÚö­à:gЧ±ô¯³ž¤k–"¾õnPxÄÎUQD&sϱ•ÓÑëLºw–;¦X\ã–÷½o §ôd’ç<§¨‰dÏz|x>Îf ÔŸa³èñ¦ÌÃjÊ…S•ðrô„²Éh¿ÌÓØ´zÀhCpòšçü g?€'µVø"Dv ÂÞæp@á/±Ð‘\¾¡;â{vQÉðrNQšºä„RZ¡AB/[_ ØoL',æ¸èfê¨ØŠ©÷Fù" U Þ xû“îUrËüš•Såøc±‰å­ù[é\%(9 YµgÑô¡FQõ•nêë¾Ï5än†úø2œ½J&½‚xmT›"‘ ³ø³3m Kt÷¿ÿ”%ÃzÈ»LÏh†J.ù±£.æó+#Z²áHt¿\ú¥&¸™7±]ºì[K µá” ðDÄ—ëI¤pHÇu~‡WÊ‹ô ݹR:ZÚV:f•w,]&d4ùHS«èžÄö_®µÊ µt†Š­é‹8ô/è®è²<‘X))c¬¬öV,b^¸U† B‰±ÕÜ ì;Ö—wíñª²@=ÌëÇÑ­mDøKÙeY¤¯E'Êä¾vº]%Mný–_þÙÃÌíE3½7I(…|RiSÍO¨Ã³¡m N3›V< ‘ŠÍUGè¿BQ=ûšPôu€¿ŽÙNbÌ>Ήøõ"ëMiýØÞ f KÕå+„½Xav]&ô/ßf–J¥MŠê¾3ÊÐ ó=s»èò|¾8kJ䫊‹az÷² ^ÐìÆbáGDF¨À}‹Þˉªð&sEt±5OãÉ¢ÑÄ~—aLˆ`ÜÈš[*ª‰ä<ÒµüC¦J°"Q_.”œë çv.¹;‚¤mKd™ýÛìBÙúSÙÇ:­¾fgÐCA"çÍ$A¹Eöù99žŸ»_Fb†ƒ1³iÕu””¸J3%¹¬G—$ã+ZgŽ’çzQØÄlè§bê Õ –_^Bèê'Çl„Œ—Q[½ã,‰´['¹-ÍÃá]<£žâk›¯ÏGjÚìŸDòÞê-Ùiã_uTsj¬k…]§›=º= ÅÉ¢á#÷x’î+ ˆ²ä†\qĘÜòšúÍÞGÅï%Æɉˆ%àWZ()›;‰ËFœ¤˜QâÄIŽK; Sh ÐAû^i÷Êøáx©òÙxäAn«D´CÒ2Bbÿ$GºÄV!§[7‰‰éÕŸ:–U…渂¹ ICh@:„·qÕ½î¶ »ª27cðö“xM[ÇÅAûëÆäÓŸ÷ä£}aÎ%[HÓÑØlia ÃØ´1j»ÀçÉïB¬YJ¸{xlÕ¬¶ž9ÙÊŒ |†ÍøMÉüÛÑ#rÆàYÅýæÂÇ_%÷²fÖH”ž_2©ÔâŽ̸¸¶Ó8±<#J óøVç&)Z3‚À€ÍçˆKÕzÊ@⃇ÄSÔD"õõIx&ÍgøŠáj˜$(Ô¶ýÀèE`ïHqi¼›„A¥'naÛ-ê”ëÇÙIU‡¹ï(½¤Þ(ØúôM`û$Ñûù¦¸¤¦Ì2)Ò6†ÌÒP£ÝÏëtÌÜ»¢ý(c&9 Ú†©(?[WÔ¤vsÃ#k$M8¬/ìån½ÇÐnÜ‘šjêñRí^ˆwû{ž´+û”ë;¸Ï}Íp•¨¡ 2ëíU2šäÓw®lä eÙ)'=ǽûB†:ÙD w^fܤlÓÏAu‰‡d þ‚cË—çíqÉǤI÷1Ã!E²˜~ÇS8Ó…j:›.XQEä[ÇÜÍøÓ®§–FËe•õÍ#UFðÜðѳøè{PÞ˜v]Ïðû4ïK¼T¶Q,ò­‚øjÅJö Ic¬XaZ ocâ8@ô$øEä_èGXZ&)¶1„£ŠùìæQšŒ †¼RÌG¢t­ðuÆØÌ^Ã÷Y(ûî,½¡•VºÊøÜýÊ™€ià˜È…¹ë­ÓV%÷b%Üe^³¿â¦×÷ëÖÙ12ÕW¾öDÊ<”\Á(쨦Ð)çÓHöPk3¬>ífà¯âq­ýøƒ€‰üò5rzÓNÆÜÛ-,ܾÏ;ò…b›BP<›'§Ž¦Öù*„O¢é|-,tŠ=—&òÖ|Bé4Ò÷÷&¶åSîP~ø}šëg¢T¼¦£¿˜5]H›ó¥NÖWtsÏÔdÕ&p}*°d°• j``1;YÒ!£ò*6=¿y%ߥ‘_ïØ›Ü„é\Þ)ï>5»Ù$Xµ )ߘËHDÎb^ÿü!#\kx2¦Y«8±'«ŠGë§lß° n4>ùt< ¨Pv®Qw."ùRùÊK.S p‡®`‘º€:& ú:îËyùè+Çïý‹v^úý·Kâ?:vʼ£¿Ý]æ¿LC•7Å}p›îIâß°kÒ $Ìæ,» à?RC–ÀÒ\_/RÃXrƒüÒ l§•ï]èÄÜÉh1ˆÂö6-;œ|&6l¢|Ýå”}Î-79šàôÒ«­cÛíCõ¸Û<¶ ÝyHxö65StbŸ¤ÃÀr¡ûéË[ =ÐM™ÜœFâÎwFÅ|c¸žŽQ}ƒœ‚>ü`šî6«ì–U¨ »CˆmÎ>õ‡¹¡Ý"Æý$êZ騤Þ.i+íØìfŠNÆBשú.bS›±üR{6)œeä WÈ »²xMùðÁÞ ØÓ¼G/˸@?Þ•ÄbmP}D „©um«ù,ô¼è{}û'~òÇЃx¯h­ïpsó˜H×xæÀØ3lyxçÛý 9§-«Ðœ•8¾J ‡u½êJ>/]›5Í+aŽõïžü*YÜ)ƒJDHUwrZ˜o9ʺxôšæLWTYeß$²lLõëÒ¿â8èÊJ¯Kù8é07ýY³Íaíõ‡—i”U´H—äzÇ1«µßçh¦4ý‡f9]SƒL´„9oo¤æé×zuŽ;EC5îŠo|Ÿ; ïXf)ÊJZSßÔ®§ůƒr”kh¯öâÍ—]‡ôöæ ]9ŸmºŽVPÑL)cÆSK;°È(''t¦˜QÈJ<ºô’FT’¡b†ëH^]D!Véµîø©p}„Öx,D ±…;Ú.†šhÞšXê)Яn{–ìö{n:2¥M#8k§©Õã:6ù勸þÁöÞ6Ÿ»^IcT%åVœ_"1;à*…Å^¨sÝ‚¾·¶Ü1fö)œ¬é@©`CèûÁêLÖ…Ân¥’åÖ–mŒUô”iv¦¤ÊœbKüBû™"}r¼­3E>Ó¾êê/“a½ŠÆ  †@OìˆéOÆ×‘õq½Ø(Ÿñ{EÀKSÊðï…<çUW; ¤¯‚w†'ê´)Qçç“,ÙŒüìŽ!íbë` m9³Añ`‰wXù|w‡mä$yRí:=׸ ¢Ý]›Vª?~®Š ¤‚„=y ±•hMŒ½Tü˜'§È—A´¿\èÑâVðcËò«bõWàdoŒ#h¯àzÖú… á–¼ô›Éo™C„Â5¨.XýÐÙ¿ÉÖ0«ÝãLïKæDDUÓàá¼ÞáA–UFV§o<-«áÁ6Ké|%ßp*®Œ-ªšàBÞx&dd’yÙ(ôà:£kû…'À>¨"¹%J)¢«ˆ«>©âãêÙ)º?|E@d æâFÿÔŠSþ-¾éPS´Ò¿Hy1ÓÌÐ"/ݼÏ/$%ܽáò|•-òñ¸®`Ôo ®÷õ6³Ä-ö€¬Î[I$•J÷˜\!Äñ_É‹Îý~?-t–Ï\~žF•hª “»’’1òб…§D ’ïÄËÍ„eXñ¦ß.•—œ_þBÀ¬†F‰è©ŒW9¡ö´<.ŽÄlSÖ_ñ¢k_ÇÚµSá<a»î"·óËA''朼…Kb¤˜q³R®D-/ðˆÕ¡‹ŠÎ­¼ÁþŸ”Sg¿å¿™xô¡ï!ÜL‹mûÉ.+Ô1) t¢ à®  @Ÿ_¯h@›½@w V´õøÏãf Pð:hC_6“ùýŽ8\Ö£a &"f_¢J¥£{a¾ç1Ç0Á5aûªi>Pöéj _üÚM‘]‡‘ÚÈ›ö­Á6v«Ÿ8ÁÎØ£e4¦ E¬k%ˆMfØúê˜`ÖÃÜ—>ÿ™€âBÞu8}%¸½gdÂï‹A ËaP‰9—Ú ’oˆº]ŽÿÁ{|†NA©L"Ï_H±8ÕâÈs¸  ÜâZ”\ÓÖ¤”$‡Ö{µ•åM…†Q¨¤î>¦bƒê¿TŒj.E­¦LÞl‰IÄÓ«(yï p=̺¤óm£pe„»m´4¶NJ:µ2õÕ }ª%m.;72gÆËÖ ©#>- ¡OÈê*"ÅÛPE½­<|$#1—Ëã»g)[ñ&ª‰ÃV$~Ë¢_Ÿ–ð¥w^èí³˜#¼â᩼”õec3˜K&S’¢›ÒŠïw5ß‚ê×k™GÂò ±­EW,…–â ÐZ)ðÞöÇM£'Açý•¾Éס[Pä‘ë=%¿}Ù)]\/'¸ qTj{cKx0¿LzŒÅÝ´(åðEý];m¥€ããeF"vK‘çÞ„ qû¥ÅÅW_TCwûñÏ(–C—ƒ˜R wºÊ… ïE!}oÅiÐÅÞÓ,¦®];¬ú³~þVl ^RRX¾µ ïÈš ;ôOMÊ=¨iº|Þ¤4 £:ËJ|ñd·2I=©+ÑÐL_rûÁ¶ ùœ8l­&M8u3ÀÖ*Æàùµ+¹ûÁÔ¦Ö±ø!UؤKßv°¬aIdR@l·€’–ãU×)ÚŒUmÞYŽˆ{Zêó9þZ&¶›§J•wçLr©ŒÆSø ýê}2¦ê[êJ·Mé ðo.7¥ˆÌ¡|çö\Bt8ø£À~{ø&pïw2¯3¦ÇÛ0¤&娦Ljü¥±ã¾!jÌå*Îõ_—pQK±4\ÿXâQó endstream endobj 122 0 obj << /Type /FontDescriptor /FontName /ITIAVQ+CMBX12 /Flags 4 /FontBBox [-53 -251 1139 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 109 /XHeight 444 /CharSet (/A/B/C/D/E/F/I/L/M/O/P/R/S/T/U/W/a/b/c/d/e/f/g/h/i/l/m/n/o/p/q/r/s/t/u/v/x/y) /FontFile 121 0 R >> endobj 123 0 obj << /Length1 969 /Length2 1716 /Length3 0 /Length 2315 /Filter /FlateDecode >> stream xÚ­“yßçù~•÷k™iG!KѵA#`…;¨€Ú::(eå=tÀ4ª9ŒÐÐPÀ1È€.Ðtuô PÊÀš_ööAµ=[“¶fˆðTÀø@n ž ì§` ÒÌÈdÀiqGà@t&DÔF @„ pò†©(Ì¢%k*‰lÿ¾Ldøý@LˆÀ5¨-ºÜ p=iTr@„H(Œ=+q­ü?\­,nÉ “íñ”ÅòK}úÇS`rÐ?4Šè€Ñ©+SÝ ïæì "Ì ¬¤Öž ̨ÞdÐù¾XÂÑF> O€–Ö!*q¥ nç–,`pœ]ìpÿÌt :âa*âä÷³ìböR þsûC‡OnAn"÷ûñwh…˜•@#ÂTo@W€§ÓñA(îíáFú@ÀT"@\Çm* án¸M9htÔâDuÌQ:žà !dˆ„…½ñÑ_‰Þ2ÂøIt–Äï'ÁþKwb™ÐJö‹’þrô«¸ý¢e``ÊÒË!Â~d|Ðüï˜v閭héêZº†Û¸}ÓãžmûvÝË2 :¢"K¯€;í1 æÞ  „¨ßŸÓ;¢Ž¥TDç‡Ydvð«óîö®L´/«ëº+Ù“ÄKÎiµñW(uÿ\˜ºnÍ0ÿð–ãó²gjB÷µYŽEø'²»†™G†Sƒo˺O¦Ú½óCÏF~¿SñlzDŸ×áéÀ£üd¬¦«ãÍŸ2ÕÌß ö)ðÔ{2Ëë¯DmÛîn™Jv‰9Uª‚Up’`ûçÇêÅô—H>¿º¿=2ìXŒP•Fï­†±ös¦Ðµ gªZ›skou ™ï$¿•¨¿’–¤)›“;B9ŠSGbYò²ý¹çYSºÑ_o¶ÄÛìzÏ>­Ð½oDÈûS«y«Ûx_’iˆÎêì©WØ8f¡ÆbîtK¥®È-,q'G÷n¡kÅ,µz:õØò(tí³hÃë•ö¶B“ï%^ã.OY MÚÛsnY»QO¯¶wúXëáù¸žr5N£PÜšdqs¨ŒÉÆÓ÷Y|øeÝWæXéËŸl ÂåÚD'Ÿ3HnNn‘pU~ ±âáú ®*² eàI‹ГZ_ÖS‚UœÅœnP¼£`kë+ %«¶ÅѬÃL·–ädöŒU{ÄÚd‚qž]£&#†]!;ÎÇ*MæÚÕïÅoýï8"Çgò“[ýD¼Ä'æXͦ_‡#ôÇqWFiöMõ!³ñ¨”LAæÅ¶1”õÔf¬4ùÅŒmrùÉã–‚CÊNÄ@Û.”éÉ‹±ñ_Pý/ªïmûl•÷ئ¹©l¨çÀ™6^bbFíÓq|1>ÂJ=Ý•¦ãöE,‹”м¢€gýÒ¤Ì*e9¾è ¶úîáý*Â-k.uFË÷@âÙúo¶W’QIëÞ2¥¦gI4š›8÷Ä{ƒd/æinØ{½§µÏ熣DÎÉk«úí:ë• £V9Ö‚g E*S %5iĆÐÉxs+,øHø(zå0»ÕÇáŽ*Ê`}zsÔW×ë!J .SËÁ^[…†¯ƒ”ʆ€³"È©¼—MbU»&™«tîIøåfÝÊ»— ÃJÚ7ғƳQHôKë_9è]j“ÇÄB?õÓ”sFÊîªUéµëÀ^¸T9³ãáåzɳôŠg½nJ»Ì†«ÔËpþºäËÊ#u)7m»çsÿk?_#¿ùeþdè»ÚÜTôu-oÛgõÙ3íbÓvšçb¥5Þïôº×\bÖÛxÿnöª “ýø³eáž k££Ã4Èó÷œU[Æ5]SjzÔ¶›D\{°L†Ctd ’ĵ e{ø]8åI‘–Á/^[Å´+öìsÂl¢«Pz£ôöˆóÛu§@‹Û§¿…v ²ŽÁ³r|jÚä\•NÆøÂ‘®0¬?m¼³'¶?îËìjK9˜å¹Z–Ç,M¦±‰å­®ö ÉŠ†hRîE±×>47žhRmgØ\Ñ(H`ß—ªyçü&¡‚d\7©~Þ[õ€¿7k²àØŸî÷¶>ò*W°à¢aùƒ>“øUÄs_òêö¤TmÃíVšUý-d¶øï4 ‰µ@¢Mw2þp¹Þžt÷ºÅ½t“º“¡¬†©Hiç×KYP=®Â!ÝkÄDsŠÏ}plým“^ìÜSÑ‹{%T;y Ó…‹Æ„#Ðú%=Ù2/åÖ>³‰–ØŽ Vuk˜fù¹fõŒ>ÿíÏ&õËa“ßÛ¥fÈÑë®à'lÒ®ÊÖF'U6‡&f>âHì»Î<“µcg«I¯6ïÖw]–É·|6`T´¯°p^P.Øìê'´ÎÒÉñãáOÎg§X?o13óvÝÔ‡…,8SÇTÕÕÄEaãÚË’QšBŸ¤¦†Ñƪ†µûKÏbø7ÒJý¥÷$m¼3uy„Œ‡gøä4‡a#ý+&5æ§\lÄä àÇ «"©eÑ·…%ƒóç.¥è¼gÓ(@róÞ¹ÉMMŠ’©ô·ù¼dʎȾ:JÍ©…“Xƒ‘Bϼ9±F½#CòßÔ•‘8˜´!øtDwh]˜‚zt[×ݺ17ÎwÐA-ù5¾jÚ\£©Æ?¯t+Žs¾š% µ_®$âÖc%âL5Vò äë¤2U%„¦ß”°SKŸ)=,e6mŠcøÏŸ”ãv1ߎë»yÛ(_s&ÞÞ"Ö9¬ñ†ÜßÊþˆ‚ endstream endobj 124 0 obj << /Type /FontDescriptor /FontName /JZTUMJ+CMEX10 /Flags 4 /FontBBox [-24 -2960 1454 772] /Ascent 40 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 47 /XHeight 431 /CharSet (/bracketleftbig/bracketleftbt/bracketleftex/bracketlefttp/bracketrightbig/bracketrightbt/bracketrightex/bracketrighttp/summationdisplay) /FontFile 123 0 R >> endobj 125 0 obj << /Length1 938 /Length2 3404 /Length3 0 /Length 4035 /Filter /FlateDecode >> stream xÚ­UgT“k³¥ˆJЗÞI¡¤”*½H‡˜¤`®ˆ4ð Ò E é(ÅFéMPêA”* tnô|Gï=ßß»Þ?ÏÞ³gf¯™Yë0µ£×Ñ:Þ•(ýM£¼½þ ù ‰$ª)@ü§M €jEÀcýÚ• dL vCS½üØúwqo,ÖûQþç¤þ+ŽÀa°~ÿQp^Þd40" ÐDü¿¥×Л3B£0Þ¸GõÉ, Ç»aÑ€ D^,ÿ7!é`|Ñ(S é¸"°$ôOGýÛ u~?}€tí.Áõ¥þ³ÚŸASO¶ôóBàßêŸòS‡DÄøö`Y0BR¿^Žÿjv$ 0x7ª  ˆD„õˆ¨H€< í  }©ŽA²x™šP'¸ˆL?öª¨€à?¨¿‘Òþ…”•Í/ »ßˆªDüB 0„$àp¿E(rûqÂÔ%ü⨰héSóp¿!uF üÿ‚Ô^¿{PÝxQˆ€ú­€BßOøßÐÒ"øÈÈA¨u"`ye@Iô„Ho"'ÿ¼rêÿÁ®êêÑh_4’il˜€T½ë‘TN ¾’Ó[@/AâKyz·«1¬2EUöËU¶AbÍ;Kô…¯¬a¬˜Â³‰Ë†Å ”«ÂO5<°5À6ÊÚÊÂ!ñ8Õâä*ò‹ƒm[fË«3¸?£Æ.ÎyÕH­Ž m}ôi¤/½ºQÊæY¾wœ22|°ìy«{jŒ9%4ŸÈä˜ùüê#´õ§:w—t 9„±¼6.‡Ô-öÃ1žW“ýž,)°èL#º¡µ}F°„¯ët7$Íóâ˜MÌÀB…OqÐ:+8v^M ÅF½®ÖÐh…a¶O6+rª_ÿNP¢Þ5}«o¼Ù^¬šn ºì•]Nÿ2b®Ìì›gY/T-âUóHÄÜeç@ä«pÌñMǽ½ߢyšV‘ǸKh¯I)§iøˆK}‘èóÐD¶ Ø"Ü.áz˜5£[p=ÓuÛF€ lè6Çp~¤Ð”iQe—”%md'õ¬¶5ÞáŠï1˜íü¥éìµÏoš¢Ó N:Úö\^XŽHµU5ç\f/Š8îØZ«£“#\Ë@ÕâPgçSå< w˜³ÜcÇ^öû>XrodSØÝá/TQü³_uþ]¢UkÍòSEþ`úùP^ÏXÙ%KÉåºFÃ"¿^墊ÖösbI(Ë@³$ÏBŠ!%ç·c|T+[ƒÐe6lÂkߺf¥â†·¶$%ZDœ;ŠÖÉg˜îe»Èm5^4½Âñs%;>Ð&Î ªn‡ýêOÍsóân­®ÈóG93©0OÎÂx¼®ø'Ýý6ªëÍÌz¥¶Ë~ ¿P2Ù>…͆6ä²z ©Ù‹ª7ñ”6ÏlkšÉ@Y]-ÀX[©{4Ó»"¨ºl\‡Šc®M á&>ÆÝjÄþZ“ßZç®CyrP‘“h žÕ¬T _ÝÎVÁ[ˆêWc%ÑNßÞHäžÛ"†ü9 §T•‹Ò˜xlj÷íñ®ÚǾ]ïÛìË÷ºß?—3r5:²·xäÂåê ÈÅ_I8Ä_Ìùú¤ÈQÝeBE´ˆ~šH09³q(yüÇçOÙgi"(®4ÂBIŒýVvåJöi6\duH æÓ)¾t‹—‹¡%$Û¼¯ò½‚N‹¥Íþ±ªKN¢Æ4Ì+°¿&œÔ¡Š®© oj;‹&âµá-î8®©&öÕYáwøE‘áÉM‰éy­œ© »¬”býèʃ9§U]WÀ£ù¯gÝ÷·÷àÂË ï븈R;¾ ·ë‘°ùÈsOf5’Wäú­ß¦qÀ Cuôt”Ȫ'†#§öó¥iÞ®ŒH–N2k†Œ¡º$’_µó]$Ò¬:²Ûî\¦ðt~ÐQa5Ø—Üù\€&?å-ß3½·ÞŽëþÕ•k1Út£çcgó4ÁŠ$vuÛ_ÓÃ8ËsõÀzZ°àâDnwçØxÔ Ñ-ûˆÿŲ~‚¡&ÜyaIQßù ràή˜ðõñ‹á”‰û§!1›E6}‚‡ac.Ñ};ûIª, Úƒ1Zg½R¥lF¥Aš Ú™åœqn8ý’D¼Ö!{›oÉUF]\!QŠä{ôN-ȱò–Ög¹¡]ÙO˜®ƒKÝU>;DÄãFxƤän‘Õ‰m-ƒs©)É è;U z·ÚÓ2Z¯ßÕÑg¹pbhºœ¨`~›‡†ÃLvs²µ¡ÿM¾æÚY½Ye™Iµ§ÈîøD±¯¡0/ͽL5Œg©Ÿ“[ÚöµXèžÅ“',ß…¢ÌÍÛŒî ?Ä^q;QwâEVÔ%mÞ³¯kô­¢&ÌanÝv2Š¿R¹jíý¹Ø/özä{ïC¦ÅTö½­'*ýÛ‹5¯µ^Y®o¦ JÛô÷Ù<ÛʇóÜCtMg𠦋™“· y-ZtI'7@3F¹67ïDEÊŸ•x¦îáßÒ`t¬~T^jhóSÏÉÃýZbïDÌEãN-š¨yÝ:Ê|-|a¯'!¹ûǹu1õ•§Ðµ—ñ1>ŒÁ{½Ûùs¢0UËG) 2ÙÃмLR®OÜXò‰0¬l½ûp¿¨lû³è¸JD t·"ƒ<¾/â°Àn×¢Ä~§*|Ç¢œË~’|ÿb™²4ïûÔÃß håŒu<<Ú¸QÍgïÛêŽcbkÓ†ÖÍ¥¿9AS{ÅéA]6^È03õx*¸Á{;¬ek§ùqGAËŸ-.Çø>šÉî ÊÏä—4ùnÕGpÖ…3½Õ!Œo% $¬kÊw…éUmŠ7Ÿ³Ÿ*¾»òäYkí,Ü¢óqb{ë²&ŽE6 ™¦Ãù¥Å¤?m0âýPª—H~~ã¡Ez£X>.šáž/§…Bõ Ãë–È. ÌæB‡ÿ|x1îÓ'ÍГùSî&tk·+ÎöHÏœH7MzY>A3Ý8à‰gyÀ¨ÀÝÚyJ·1ý-|úògïî׉ÎxöÏ4Ußk-rEåHÛ´ô¯; ÜîÍ—‚0#‘kÙ.“ ¶9Ú0î¦$ &(í×ïaãåý„Œ‚·&Åghøå'ÆeïSÔ—ÏÛUíúû{Še>csLð½ØNé­þ´êÔª7²ÛáãÍ}…½¾ÿbÐ!ÉâqRAµ¼Ç±0pO,hZm)ˆ¥ò’ã…úF‡Ý1VõÛ´é#eQåE$¬'é6+Z£&÷ >VÑ%ûýmrê••÷˜Š÷×ün¥X²Ng8ã•…0©”Òykþáé…Új9bGýš¡˜Ó_9‹ÑÙçy BI»-ƒS~ÀÐ%ëçió=¶ônKžäÔC.=÷Þ©¡ìèq›»{Ýü³}H"]õÍÔöÊV6IF0îÜ ÎîAô•™$3㊠ܡ‰×FRUü›4•àNB{w€ø\¯‡˜Pó¾AS¾5½žìNãõó3¢´~gmvZ+¡UÑ8…ÔŠøûòM>‘3Ó+O…_”sêèâž[•‰ÆÖ6µ‰ ý Ðøçœ#àão Â:“îf›7™$ˆ(¡½B:MúÜ'êaÖt¼Ì îéì@ǘ*Sû­l«Bð¾På«Pëï‘[ФŽV·Áñ‡²Åç—žêOð Ll´}”jT‘çøhãv³a60Zü&RùÍýÁ 5”í6¶?nƒ¬¦°óºª è-euCûâ¤vøþÒ½|jò@YÌ»arÑrtØI>Xq{ë}mâ.vw^ª=9 34X¼âä—‘MÇoGZæÚô›Þl9É ¦I.ªÝèNváwYÒáŽOÜgIQ5éÎÞêF·J=óc ÿ`ƒµ®<•ÆÉ ÂâkàrÌAÆLŠœAK—]ظƽÅl Wu¢ßZÙ©ÄåñkÖéx œöíº´íPšÐ}d굃l8­.ÕÐñÎÿ]ñ¢¥ÚA±ÄéJþ¤g]åÖTÛоvøä¦Î añ à™½ ™=ÄˤP0¿¿ƒf꼉2wC%´µKí_ÀeŒ™3a0½Ï;l9ýÎdÂ)ÈÀcöL5Ô·þû(oNùÝ)EKDÁ¥ï¼·KŒªaAøÈïæŠëÓe[\ôÔZÎmÎ.õ,&ƒ6Ái§URõ_qÞêŒÍ&øÖ4‰X,=ÝX—·áä-™.ó˜þjr£À£RÍþ¸ÝSçØ Ú´•¨ëÀ!÷d¬u,ýã ¹A­‚R/mh/&bCÝF£ß·Å> endobj 127 0 obj << /Length1 758 /Length2 1555 /Length3 0 /Length 2092 /Filter /FlateDecode >> stream xÚ­’{<”ÛÇݲkŠm\¢—‰MnóÊ03Š3ˆab*颷™×Ì›1Ø‘©-¢¤‹»¡Üvré2Ê%{Ì!gïHW•$—F7ÇeŸb£)Š}†NŸý9íÏgý³žçù­çù®ßZ–æ´{“·¦ð¸{Ð$^TªPn±X”¥¥†ë `".IȰNOt‰ Rxñ¢E|„ÅÖ^6 "W€óĨ€ G){0 Âc °@ä8 xáD, ÇÂü8˜é€A€‰0À>˜…pQŽ H~Üàú%ÍF-ÅÁüX%`½ˆi(!™<.G0á”c O9 V²ü?°¾mNr8PÔBû£þV†¢Žè¿^T´Pó* ó¹ßJ·Ã_ب0F}[õ@„Aâ²80`:;`¿ä‘X 3iˆ€Á" N,¼˜‡¹ÌoI”ö-r8úú{QÉ4Û/»X£AW@EÃö/ñb þ+-â#ñÀN¬ *…Êõu·û›Yd.ƒÇD¸,À ç@|>$Ba•­œp8à \&ÀñJ`G.O <(I"x|Ô«ºbGÊBj1Â;ŽôÅèïòôäÅZï Ø;á”Ö;W6át !Ÿs‹_FéÊ×8Q Ãñ0ÕßÃc¸Ý_ M½t˜\ÞyYóÙñÏ1ŒÊó¶Už™­[âÅ©zÕ§rʾ›“*@i¼yr#i{wÍëÑ«mìF[~ xJW“¤I¿O¶Þ[,·ýÒ èø@0<™«BXvÒ(±ØtUämkw’å0D9ã´’ÜË.ÊÇ침-U¹œIbþA·Þ”³ukà|úK½šOb_Íþ:?2“ó¢ò3¾`°ãÔÁ,L4d`ñ"iÿül@ì»Ú-üúlÞñ©¼O‡¤l½SæËÇJ)¤0“лY2³„„'ªú8tÀ:Ë’u(3@çˆ*¥X·÷©km÷“œüK=ûKå ;j?Ò¯s¸6žl½Û¨-Ó'¨AÿãXÉYêê„ÞúÛzÉtÁ-ø¥Ž’””J †ú›,~š9:z1U®:gîûÖÁwÇÓ õapˆ€ù{ZÀéb{Ý”A™ÛPc„OFÊÍhWqR‘ènño êß‹Ö0DZ¥ü¶tßèÓ†Â%Áû¶ú×eµÉþMFxˇÉx­_çQ`3÷Ý&òàQ 8[[LŠù×c'Û~¿u“Îý>ܪNåÙ±Äy½¿¥çùh”·÷Æ hnc’SÔÓòLyvÍൽ{²ÚcolœU³#[ gg Òðçü2›CV”»¡ñu·ÞªÖ°ïÃp¿KÖÚ)!™]5û‰ŽÚuüð1\áuY†Ý s²ÍyF¯øòýåâr‰càÒqœ–µÝ°yLT³æ°ÌÆÄc÷æ{²…ÿ]µŠ;Gít²y9Ÿ:Õ®t/ýECµÓ:¨ybw@”ôüΧ#Ënzd»ËªOVw\Ó§×|¢ù>y¤é›+¯È˜®õêÝ«ÐƘ#9)ïÔ´È.¥ÞîÇÜ —=ŸËVi&ðä]ÐÊkAž­º.5bûq‰‘ýsÝ{—ôýI?`Kk.BG Ôά ™ÄµgOÇ•£©PqE4.;dÀ ÒŽ·Eä-t泇Ygefï:·øo±ªi›+yyͦfµøæšŠJ…8 ¡bZøºx†Í5¼+mz5Nw_È;} ?ϰÔè×3¶è“j•? 7M·Ñöm ¬ê±l?¯ºöR†_v¸±‰¸kU¨ÀEûíj/ÑüÔ­¬áx-ûÓÊÉI+Œ]ÞMêË ã)åcº˜¦põÔe;ƒ—¼Ë.õsƒ.oÖkMŽù¾ñYEX^ÁMÌòx"ýÃùä3}ÌÒÓ b“[UQÿtåÍeý-ð¬+ò82Srj“_Ò¡¦Ý°ûTlûαL |õóì¯ÈÊŒX:}÷³Ì°¤³ŠÌ2cz0«ÊŸ~Ït=axgx-¬:“cëèP|U }Hx0pgƒ[®È»h;kôϼð¢«:}q`è…3Ez÷½Dæé¹ùFoÞkO@4<Éþl£LþŒ»Ìªâ¯+û×>Ã<·ÑUr’ñ¦ÏE®í‘hí£Cµ½…„î¹è€ƒUŸ‡ºî˜ŒÖ¢#Ñ#ùé’¼FR8§qkZîÜR¯Ž¡€dú¦.­Í¹ø¨Þ«2ìä=û%ªeƒä‚ÛYˆ˜TJô}/ô9þ¡i@ó{³Ñlšº^Ú”8KŒ‚¼z=õ¹¢Ç蕎ekuáÇô}ºkHœ9×T<¯-Q%ž´Ld¿²òHñ>,»ÑÝܪ(_Ý…)OªŽ–”¦ë] ¨ïòpK¿¾ wªn¼+"n¨.â¯ô‡#J2±uø²~pÝyÂ1èÈyS›ë}úON¼µv–ÏëDvh]Yq­rìâø|ÁÜZZÒ¥©!‘Mh¾EWž©î.=ö¬1ƒ—Žô¥J«äÄ{G,F< Û"6ö{¹S‚„-1À(ë‘qRþ­s{:xëTi¸"úU—#[ÂSîŪîª 7UR¥ÍCcO7ªøc:1úsØú‘F§Ç‚›°N?Ÿ9…ASKݶl åª›ÁE›Éšå³5JœUMôkòåa³”µµÄýY”ìUn¼_‰sîïü}³&_ö"e‚«þRÑ<»M…ñ()ÖbƒÌ&ùþ¥Ä&jý Ïä. endstream endobj 128 0 obj << /Type /FontDescriptor /FontName /HKCMEP+CMMI5 /Flags 4 /FontBBox [37 -250 1349 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 90 /XHeight 431 /CharSet (/F/T) /FontFile 127 0 R >> endobj 129 0 obj << /Length1 902 /Length2 3725 /Length3 0 /Length 4334 /Filter /FlateDecode >> stream xÚ­’e\Tkׯii¤tK#5 ÝCHJK2 bgèRénAZJiDB)i¤C éV‘=ï9>ïy¾¾¿½?Üÿµ®{­k¯µy¯è )ÛamAu,ÆM& “ººš’ÀÙ ¥äåEà@¤‹QEº2LZZÐrwDŨ¤ \ìì¥äXWoúŽƒÀ€üIÊ. Bb]¤›èrV…tŒ°(4èæ- (;;†¿nàCâ<@;aJ °C£Ü[ðC)òË’&Æ Hþ¶swý;åâðg¦þß6!À™I;,ÆÙ°í)Eô°gÝÀ3/ÿ¶þ]\ÝÝÙYéò«ü¯AýWé‚vöþ_ÖÅÕÝ ÄºX;‡ù·ô&ø—7]ÐíîòﬦÒRÆÜq!˜¸0Tü¯8¯ŽöíôÑn(ÀéŒÇAŒÝ¿œï·-} u¿û;§DcÜŒ½]AúGü›aølD8´` †Bag³çï“Õ¿z©aPX;4æ —8Ò›zVJ|acz ×™aa Öíì p6À‹£üµU 8 ¢ü+ôI"ˆH ˆ¨ÿCR ñ’DÌþ!é3¥Å:«‚ü‡`гèÿ@i@ÄåÂβø?(zVÉë?ˆxÿÆÿž°Š ÖË ‰ÂÏ>& $áPÿÿ#C¹ãp Æí÷/|¶¥¿Ù}¶XôQ”ã£X”l°cjmhQ€Z~1)Ï‘ö4¸§9äEš¬ðÚŒ,ý0®®Ï¼´CBçˆ~N›²®]*bgŸc­Uöëô5 £ë¤f„䦑o¢ÖnYuåt´^pÉŠø2~ù³kÀæ÷þ¬G3i¹Î L2u=’¤èãèÉn€Ó½Þ¹qªGvÜ‹)”V9 :AÓåÙø÷ß¾j`ó±ã…],·Ò÷~޳¶N:MQ§IGåèôž¥-å–É,GWÌ)¾I.Á(¼~YÊë(êž7hÄQ!kI[áåÏ}+¼©´#]îô¡õЦ§™®=·²Ãã‹M+m–&‚ÃKTáK5ÄWÃWHFº½ t4œŽR9•“PôV×étÃ1ÓSÓÏžTœö‘¯æKË®UaØ*9„ÜNŸü\øö½cËò>‡¨G%íý}"i¢0i÷ r×;•8N¢~á¹GëJÀeM!¾g+9 É>Ì.ÔÔd zŽFVÝÛÍvzI÷‘Ѱ°Âè$‚œ‘ “ʇtõ]â&¡°@ò¶TWBî‹«>ùiݾYRæ ýú/¥©¶·!S\¥ú_;ò;Äú“|Ì—Í/Zïß!q¹Í¡‡˜-A¼ý2•Ì úá'‚/ýDŽÙ/™?"ßpçô¾³ÈQõšæ¹r¯b³¾ºìŒæ>dEÉëÁŒ ËU·áç}e:ˆßÝ5´Á}}B1¿WÆ^kt¦¹ˆ¨ËÆßѵ)6v){î£qÍé87%ƒ;·y o‘`ü’¡—髸¾¨Õˆ%P^Œ¨NÐÂðB¥Cy’FjÛøžnðAgf™R+2yãH¯²wˆèä{ö ´Ÿ\ÿáz`ÞMýFåÍhmôÀ¬Ä(Ï®íK ³Q‹X—3…ã§é*qÜñk¤c×¼öjže¥²ÌI°hšh5äÜN§C”ô9`Xþ“Ù(“ G£¨Gˆþ殈#Ë1ÕÎÂíô!…/˲ôñJ:Þ±Ñá©a½­•„oÚôëÄGR.Ó ¬ÿˆ‡´ 6¨èûÂ*²nùö&öH1ÏT;ªæj\Lz†ç?z¡HöŠU}ªéT$Òë–?Oqt„¶a9 ŒRYÔÿS”eà‡ÉçžP™‰/‡‰2­<²7éxª{*CÂ@–-zÓ¬÷fêoyÔ'—  …víÐß®ï%_(#Fo«™Ý-,ûB#…²†*-x&hT¡.ŽÁ¢èŒyu¿v‘7Ú²ëYgç(–õ—hïI= ëˆe]‚uÒi›Í$«,Í­PNènI|,Û«¯å¸#³Ø¢vO%=&Kþ³ƒaçݲ¼ÇÊáýGö{ Û®×1Ã7ÓØ°«r'n±Ûäٗˆ?ø –¼™n7+¤}ËRÓKU†Å”‡B&z¨–R𼃲{¹æŒ‡LfP‘x”ï ÒŸ*f†9Ïyã]æI²<} óeú©†û1Ëýç Ò®ë†z3¼OÖ¶‰ÌkY»–¶¸*ùöÄ‘Üò’d#¥·læWÝŽÏ™c›¸XÙÌÄŠê^æK&é)ÑÝK‡‰w½i ê(QÝE(¯ (²¢ï‡Ð$›.n²7UŸ$ß ºËxÃÒFÛ>dáóúžlÊà[L¹2 „îîÏŸ«=V÷Y”‰pY¾‚_ÒꯖŸ_¼ä“Ä,lÚù]‘íæE‰ˆ°ìM&öˉ‡èR¤T »»“O£î`ÚÞ…oý@b×­“JMD訾+¡ÍÔõÙ'÷ž,ÝËúu–x?ÁSÞÖ¦|$-èØqI£d 8W‹ñæ#›¼ÝTwéǦl졺ڎò!¨ÃvkëºNïøu– €`—³Ùq˜»&1OnhØ_–¥»)í‰Å'ÔÇN½bèßr )ËÀ åæÍj =·Øª¦"Ù_yQV陨í Óã:G샬’)GÌPÅèÕÙÊeú´>*æ~!cžkÖžéT-L-ñØH*œÕŒ6œl—£ÌξžPl……K ¯+¥Äw*Ž~údT¿K¶½Ex®š£Š6?ÿpfpƒuÿd3/ñšÆFTùem!úÆïKî- ®ËU?RjŽ‚³ŽwOäMˆ{Ë«?ž"3E–³_ÚzÀ›òÊç£w¿¿ý-BmÙ^ÆŽÐÖœA»iAÇ» DZ¸7$%ûÄ[è€|`Aõä ;Θßð*m}+<ìR·Ðõ-¡Æ2y+*ïý#ÎP3ÏÌ”Ý`ãù cÓ=Ïû˜r-ÁöþŸ×S‰¬3ù¼‹ûÚ…L–/D¦f9Šþà°Ï_œ]ñA}Ósº™e@¥p±òðS©O£éÂÃq –bøŠIùäeùC~·'t³¶›I/¥xd·j*gr½¿S„x~£ó$h£†§½Ì 7ô×.²¸äùÚƒ`>’0QE:MÙ¹Fðæ†ÂB8ã ¯óp×~#Ž^¢ìu ý±†®¤ ŒXÅÛ•¥ônV7ögØXzçQ‹IÏpÍø‘ª<Å%GK~àî·ƒ"¾Ÿ ì”2LKñ÷l /¢ë΋Š™ÝÑgÔŠ®¾nø]´³ÇêÕí®ª·ü‡Ê (¡z­ï«#—\øÓIh>éÉñ!Œ‡úx®ÜFäbâUk®fš¤Ö••·o”q´JH°Ñä"»o¤\R¯1RžÛN û$¸×–,ÏÀÚÆbcîG,RÖ†>ùÜSKzéaÉxÉrÙÔcÅ‚{må ì3Á¾¡gt9~I¨ò"ä]¾»Û(5£Ñé¤í§„y£k¹Ñ~z×:¯ò•ºçÒ®î5ZqÊ_”‹'LÎŽžùpCh>d[±c~ÌÞ?û%!´‚•®»ˆwšùšÆqsÄ$U¹UZµN ÃjË£ûÁ”„MrˆÒµ nT¢hÍ7¯£¾®Tm 7Dʳ…\=^^ÇQ•±7¼×¤9gæáCðb9f‰†Kþ¼·7^mJ§k•¼ÈBîûÚÀb§<Ö£\ˆq¦ ^±63B,pˆÎ|Á’èW_¸ÕÞòšûz=Ödm¸Nõ% [OÂù©ÛCP8Y©–m¢z!zÊÆ¦”~†zBÑì!h¯H2›³)Á{ù(Þ[hmнp Cúv´ì0O5¸Rß%•ÕVXœ_íƒÍú¼QàT¸¶HÁƒ>lŸžÓÑÝ‘yJ›/e‰\ÉH~Œ0£[ch;õ᪫…jØÈU§Øë^Íx×i!úJ!8%à Ë÷–Ép6Ïü êãW*oëQ©“Ê2‡õfŠñŽ8h 5Áè=ž;'¥|žFÊæ?½@;W+hrßWoj±»WÓº•ö]_ ½ ?:(лAÞuòa)SüÝØO°ÌJ×JÁˆÀÑcö2MÓ}eÓœkQ(•¢üæ—IAlÞ¾ÎOE®Z-RlZˆßË– Êí-’zÉÎU‰ܵHdYLWêºÊô°*/_Åb®Y”-€GÚbkãTAR@3¥îJÕôf؃ïÃÜöOmj Z£73<®4!®~‹3j`b'—kŽäsú^åñcoøa[5QÄÃ:º¬/¶±d•kš°xÚKP Z¼™0†·[mñ?Þ®Ûw™´©ÆöWï*+…5~´cî"+äNª,v²IÊ* þÐq·­Mc„§Å+C­>W­¡"ïå—ù¾™þ°øä4÷âMFa‹â+¢¦ï«ç}‘Uyû ÛÆmÔE—hÀ¯pñP0Gúbøg.ª<5ßfÕ£½šqÕ ÉÓáÓ±ÇÛ*Å£º`Ö3¡,S”t†Mê¥A"Ÿ‚ÓÝ,á*J‚Î×Âô¹á ñª m¤ÝHž˜ ¬ÍÏðÙÂ'ýæ˜Û¤¯'?CxÚ‡dK2âîÞÚV¼9—»¯¸N[ȩﲞOÄû^Ú±äÉ—ýz$Q+ýLáAÕ˜À«4ˆÍSôTºYÛrƒì{ÿÁ¶YEI;ÞìÞ¥iÕTE±yj½yˆQdòIêÒGZÛ$K{4Ü“œ ïiçݲT;æs*Bˆ :þÌLÁXøýÿï7c endstream endobj 130 0 obj << /Type /FontDescriptor /FontName /BJPBZF+CMMI7 /Flags 4 /FontBBox [0 -250 1171 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 81 /XHeight 431 /CharSet (/A/C/F/T/X/Z/a/i/m/s/x/y) /FontFile 129 0 R >> endobj 131 0 obj << /Length1 2012 /Length2 14948 /Length3 0 /Length 16024 /Filter /FlateDecode >> stream xÚ­¶eTœÝ²µÜÝ-4Np÷àÜ‚6îî Xp÷àîîîîîîî|<{Ÿ³“}Þ¿ßhF¾jÕª9WÕ-É)Ò ZëE­­hé¹BÒ Œ F:AX22!; žƒ©µ•°ž ÀÈÉÉêüøøãbeábe‚%YÛ¸Ú™›8(…¾ü“İڙèY¤õL€–5 ô,ŠÖ¦@W:€€…@áŸö =ÐÎ hHËÈ045pèM­`éÿ±$ned `ÿwØÐÑæ—œ€vö¦”ÿ²ùðaÒÐÚÊÂ`4‚¥—±þP~xùÿÃÖÿ-.êha!£gùOùõÿ,ëYšZ¸þO‚µ¥£Ð mm´³ú¿©ªÀ{“š:ZþßUq= S+c €áß!S{QS ¡œ©ƒ ÀHÏÂø¯8ÐÊðÿšøèÜ¿,ЋIЉIHQÿ{¦ÿZ“Ó3µrPrµùOÕ’ÿÅŒø£;v¦.M†ö2~$~|þ÷—öÿѱ2°64µ20±²ôììô\a?®žb¸3L­ . Ë‡az:+k‡-€žxŒ¬í`ÿ(+€^àŸÐ¿‰ @/ø‡ØôBˆ@/ü‡8ô"ÿ!v½èbü8øbÐûCÌzñ?Ä —øC^$ÿЇ©?ôáEú}x‘ùC^dÿC^äþЇºÂúPWüCêJèC]ù}¨«ü¡uÕ?ô¡®ö‡>ÔÕÿCœêècŸÞúاÿ‡>º¤o§g`t°9ü‰3ÿ'þï›ç? Bÿ!ÖbÖ7áÿFXXþ‰XZþddøpcø~HÿTø8"ð¿™>´?.g={“?ƒþg­ãÇ]ú§ÌGOþàG‚Ñ_ÈòšþUóƒÿ +ó?èôÇã??ÅYÿI·v´ûKí#Áø/ü¨ÿÇËÇÐL\mL€Ve|ÄþÒgø8¦Ù_ø1ó¿ð£í£Ç–í£*³~lµ2µúËû?g·þcæc³õ-ÆæÏòG1=; Õ›…ñ¢ÿ=læ- Ðê¯T¶ÅL­ÿŒ”å£96Žöi~Dlÿ\3l­€†úÿ%ËÌògáÿ(sþÏʇÿì_caüèòYÖèô×X?Òí?ža6|¸ÿSŽõãØ&vÀ¿.Çö88[ÿµá£ŽáǤœþ›Î]e»ÿcú(ïú~´ÁíOÓ>*¹íþ-õÿ>¹­]Üi™>~|1üsq8Ù8=ÿ+ÓÀÑîcfÿz1~Ü1ÿËF¦¯ Ðh»8gmÀ`–PXè%ò{¢‚ Dи>R¦ºcºÎ! Ä"oHÒ–j­Jí©8 qbÐùÏ>¤ÅC~TôÜ×62qömÏIw/Ù­Oí*YÚu׆øÞÿ©¹nææ„Dvjm¸0V=§7í¢ï8KŽRXij…èS§¦SMgJ»šh²…rÐ*rf"äDÛÂ`– UgäØhðÕq/³ èêåKëGÔ§ßЙ1oZ÷¿P Z™¶¨ÐöùN r‚‘*ß{ÊùSÆŠv€=ˆ%h…!qÿt´Àò47\É ¬1‘`i§sšÆ5¢W26íµ¼fj“‰…\†‹èßÖ%áÐnoG€øÎìÉoÒ Ÿs¤‡¬p­/Df$X½É)ènŒˆ7©Ê¸^°Ä6|±ïîŽüÉÚžyö°¦ÛÈOf‚_^¼dõázúxäÓ±Òk?KIö(`ÙÑŽà¿ÜŒp¥+ßÐÒ›S@‘~™’Võh'C]E±7XãWÈ/U¬ÈöòÝñu c5ÂÇàËJ‡¥ „w×S´eøºWY€(#‚ˆéä´×\C•LZÒÂ[1äîÆýV {Ê9òl©¤YÕÒ“þ3Áª8-VÙbæšô\5ÅäSÝ Wy_Ÿ¥[· Ã*ä[ù/ÑN<¡~»Rzn"ÉypÛ¬|©äØÓO1¹Ï@Õ› Gd±òy@âÉo†2¤Döø]ßKHtqùuMGp¦l†×ߵ޵û TÅ$™¸I/Øi¶ Ë7qrMG©—íý#ñâ#1¡¸XÈu6@ÏC’<õå UtwtØoö”ûÛÝžØÁU‘B "ð-gGŸvÂF ‚¯_¸Ï{>h‘è-ÁTÈ+ßaMç™ú³ü- ´:ÌO…(ìm¾ì6©14„ð“v3™M]ËŠÕŠqÖ“•%ÝObIIœó·[}JZ{eÒg×20t%ò ½2=p£Æ+µp©ÛÕ«€Jh£îbªQäw¼Ç;TŸ¼cåµ5NWð–±v–¤zx»^èã¦MzC²o®ÇÈCûü»?kÔå+o ¡ÄØ.À1ÅLJØhkñ¾?мrwœeªêÅoðxf!’nÖ «»¬dØcìc¤s‘eýœ|ä¯xSçÖ°p¨×Ö› 5aOÏ(—ð£$6‘H:cI÷ߣp7J/ypÉ^óZò©ÙZ¦Ï›áS™•ß[¶7«§Vi+,‰óÙ…!fhûêУÍ_…ב'…AOßáÐ%ñS¦hí]ôߎÞò‰ºfÌ2á‘Mð `.d³TÌã·ˆ%D²%–N îð3&ý¦Ó‘V·Ÿe[VÍÜ C’¦ño¥æ×‰õ—¢Fú)åQX)DÄÂÒ°.Œòö+’cGÐ2 G^ãÖ"1”8Oõˆ4Ý31ÿä·6Äã²ë2Í”“³ þÝ„kºûà•óI—›‰qÇ:¾„ËQBÖšh£ªí\qóZÚŒ•p’”M†¼‰(™5ùñÓYnz ¡„;ª¹G•Ÿ¢óæ©EGcØ’-²dÏDíyÎmoºl¶¯+‚i`$³¾Òü¶°ü^tI»ÎsIë5/kÊTÅ~¦‰¨Jè€ñ5ià°œ³…WÑþe»Kå“’<¤âW“œD-ÛœsÌÍbÛù1#ñ«qIJ×™'pbÎZðÇà©çîþ€]͈mk¼ÚsôW5¶!á´ô‡7âÏ~žÐyˆÐÃ7 FÉ7[ð³Øõå²]·¦à]Þ­ér_êúÓȶe°±Ì(”‡($LŽ`/` ò„Æ. _£æ$Z¯/¢aJLQÞ7èòzßùÌñ棟“|ÓÉ~º¿¸)x%½â£LÂù·êÍÇÓÈäy{7ýXû]•eföÓ x{8‹ë˜"”UZ›ÿT¤À¼Ìšˆò07ñ9úî—xh!ùÄJ¦;Ój§†-MïVSÏ7!îû0âÝL9NG´þÆB¥*hÒö»ï»"Kiê=#¤â°ž«.лÛXÊcÖ?Uuê‚I…›F"°<g&çrÚ ²v»O}[‘¨®S#uP¸R¹ƒør ÚS w¸žÂ¹¡a˜=­kËùœ®¥ø]](›ßïʹÞ$M,Ò3Õê~3”'5CÚ3óuÈÌiÝh–ïÿÂNZw¡ïÚè„ѧ(énHwÛð=è'¥FÍ[~ ߟ.9Hä;ŸJ¥ÓëÏ."“ªÃéõvïÙ?ÁóšØÚh{v/ÎÒ5…cZËXÄ/ÃiQ(û™‡>³=Fdš™|ë,-sG×n±>é¤ÀdfþzÚ•ØRTQ SÞ@³¸SdЦUŠ®\”Ö;‡…dê2l]´-èÎE¾±0±)n2h?„:ˆ$èRÙZa\ÌBi›rW3É“IåÕá̳(;ÃFVG$@Í‚¯„ãÏ¢ÝÕœŠ-¡Ã”"kDÑÇwØŽŠZ(­s¶×!Ý5-­"9XóI^v%À-ßjýA§èWÖèD}íÆ¡oÆ¡­6—Y™˜^‘dq†ˆïv½Šv Û—Pý-£%£+ZðHô›Ô“É«¡°ìÒäóEvÑÂgßnÓÅŽŒòñuâ^pLÙžÀT<´¬yô¾k¸šv»Í¹q­NQ¸<óV«ð}5Œ‡äÚy7² ˆÂÚö¥Û&·Î‚B)B=3ÿ±µŸ¼ŒáÖÔ:I[Ýa ú^´àÁ&&¨X”ñ¯®&̲pÚˆ½˜Â¬Å„é]Q%ŠÜ*læ1ƒD­y#}1VÄ€o†+^kõg<£fÐŒ}8¡[CKdÔ H·¿L©! Ý›HCkâ­@Vû]F¶ŸÉŒž¡K€  ØxˆçX¬T Ô1?·ã;Pš‚“}–WpÁ)pô¿óüÐÃ_&š Ä—È“ü^ðÉàHvßÒ”´”µ ¢{Y‹u½(†{l»Ì*CH–/¥@>ÅZ™§¬"!dP ¼m!¾Æ‰nwʽέx4AOÎT¢î±³×³Às  ß™ Ñï-ÏÞû-ùzQJ¯ýÑ`**yåð¢xñ²³ûDÎòk¯î¤öIg;-£+(?tÞKJ?|»Psw½EIU`o“mó+†€å.ašÌ’íkátþŽð½í •/e¼“rG,B«¯DÄå`—éc\Q ].ÎOl Évê³\_g;[‰hóYeÁ¨³ÛÛÞR±tÀh·Òc{ÛÓb|?tZuÈ8 #«e~“uv¿“ ’uä-î布23˜H¨ƒïÁ´|W°wËèš}XPz©sY4¿¡pÁ4e¯„¼#mF@ ‰ºã÷w®DF£ãã¸iÖïs_¦'@‘¬OwuÄŽ9 Ê%ì<Ùig·ˆeð)BëÄÒŒû<{¶ÓÚ·-™ÆñiçÙ¢™‚vëDPWRŽ– Ä½Ž(Yî|ê¿ñ¨&f§µr¢²)S&°A*Ê|G0ˆ™-ù5äà-ß=Ž °×½AG™÷?¡—à‰ÅÁy_®œÐ¼ôdØE´?ׯ¥ òo ^ü< ˽ &å ƒý+º0è:Œ!N*ücXùÀ|Æí‘œXòP’3Šd…/ƒ|»æB¨§Ú :ߕӽy–Yýž¸“}óTXiÁå#ðš÷LŒ¿7·×tÚ–0ml VÊJCêö)HL•y¿`"áu# oQVµ«=”žu£ÿS=u…¬ë1k±öæïeÝg¾b«å½!5¯f˜ÞHð‰ªÙ%’%¾5Æ—-üpCºW‹gª#Ü,x͵·4&*®W{þæv½iJ€a¥¹%e¯¤Ä¢¿|m¾Ž%9ÞSi^?i稞9+ä*÷EèŒtÞãx&ûîÔ*mggС0ìj&s«²hžZQÄp²U9Nú¬‹ô¶ªèÅÈÓ[i¤°ç@K܉^ÔÖ®Œ¬µ1)lßxVl礚Ò«ñäÂU¦<½0w¶È£jþˆÏ¢oÈ gJyÆ[ÃN2´k®®£HIZWf:ÒœŠT5ÓâòíZ®¾ÅÏy"ϳÔ !„™ÌÜ)LðF¹Æ–]ƒñÖcÖ}n— ×É^]u±…ì':ù#­kH‘[m€4ú©¢®A¹™[`E=‘"öïCħ¹»zQ3zúžËtÌ`­˜\6 wY ¡f ­ÕRÄ'wþÎÃäùb9Æ ¿,·j’*U)„';wH¡ÚZù‡‡–%=?‰eŸñ_´ùyÝb@Ðö¹U}ˆD1‘à1ð$yS~ƒƒï—æWRZ wðíÔ«ð:æ¤6¢ÝS+½aÝÄ’’ „à X7C5^W}&Ú@xËãÈbþw±4þ%wq*«"KuMúÃ~–‹´ƒ¼3ÉÎÐ9*&1hò…Ó3ñoNHÒ¿#üRŠI *.˜0:W—‹»üÕ÷ŽÆ^ú˜F^Ñ’@9vñ}zÙÝù†c+måƒèh¨odËÎòÉWi¬( hI§ 0ûn×ÎhJT f×[°ZÜ¡?…ƒËJbÞ€ÌwÏr…’öSÚŸ]5 -šÆ˜Ì«…ß…2óMŸeomð3ཾî. Òœ‚ˆ»ÌxçûïÉR-·²‚ò¯¶ñ)LhÆ®Ò1M¿’ÙHìyr7@M)€Nœ®ô¦WÄ .ú„̯>ürz"ÕoË„s-ûn| 6P ^ùY‘Öb Ñã î†.ÒÅ챯‘â^m…ð3<ý&³¨²yá#¹ªØ¤ç‘£\s€FPLƒœ°9LF[µI?wåÄ×O`Û=>è¾…ˆØ³²“WèwÏ»…Œ…uÙçØ#îÓŽ¿¿0¾ ]+€?}ŸìçOA.‡ãòh¥×Å{P´ž¿6ÇWbôC#Å Â:,v¡Œ45×»)˜¼é9œößš é¢Ö‚²· À´}br˜ ±ÚðÅ·q(¡ç±ØÝô«.úÞôÔȧ·ï>Ö£x±ˆœ8—°\Ü@STk'Þ“Ò ×Þ~‚6”4H#\9‹w€þ®iòBîñ„1—0tC?7 g~EÊ׃<‚–bg±Ÿx®Sšâq–¿ãNÃH*î’‹0sÖÓš:¥Ý«C‡9 'Y!³²ËÔbÑÇž3Ñœ{RÙ|r:ðp¯‡ß¬¤3Ø&/`{cgìà!î!d&¦-S]àlˆ~U¯”h˜´ð‘¸ý}+¶2Ÿ, µIËĶ5½Ê5žÖ°û:s:¼Ì2Õ˜ú>Î#n÷RÿÊ÷eÖß A CVÞÏh‡tv>†ê7‡§ìêç.—,þ³¬-ft€dêì4X½¸½bnlUaÿ¢%üË‚£õ˜¾Œï6.±8P}ü噪éx =àÖ†É=óí:³‚’geÇÈPdñaåÑlE?¼ç$œåÎÚZOWH¤m-WÂ"«üR•Ø¥åò'ú¡MäôÏR8×ïÍVi0ÛC0Äu6\ObkÉÌcô;‘nöâ·s%GèNây;¾ÔîaNÒPo¼ª=Ÿ}–fÉåÕNqZD羋u‹±TX˜aYÃ0ë!@/¬Cʉ«8³n"¢¤žbVƒq‰Q·{ž9éNuy÷;%X¶5/à§4¼}°¾?JáÉ/C¹½žaR S⸑w/ѱâð¹Då€hy€ÿô.´Å 7&K ¡qª¥±BU¬ƒ‰í™,Pp*K’ÇnhŠàÛøÂÁdåÖÈ€ÞXº‡¼Ÿu!^¥!…Áݳ4/ˆWIQ¨µñ+±ÜÚ¤7tºc_Ù›ýkü´^=ØO; Ád[‚¡Ø?é!jbm}¸Œ¬¨ØätôÄ~Ñ´òA PE² æåÄp6½T{‹MÞV$Qº¼¨¨ŒÑ*z^ÙØ«¦’Tiïº*§ÀÆA)KLkb+ÐoŽÂ{9J³Ÿ3ÌlxE櫟DV¤Vvó~ ™ËQG¾ŒJÎE'Ü™Ôþþu&ÓY±/À 'û—B¾´¯,“•;Ý3ú!Oc­"œ*& )”Ð]÷ë Vó\*Œ/68j±ˆ³L°§ ª‡RâÓM¡£‹OçÅ[‹•N©rl8$)’ɸ‡¤4껚„%l¹‚ï«N}*ÅywFŒ³ÁrÞ•Jñ4ÜbjÙ3¢uœá敟àN{ÚÛä©»ÿÛÃúÛ±Ïd ýn]øŠn©ûÓÔñéôÃàìêÒÉTö”ˆ°#ýì#öã®ÚÇë–˜z¸BˆköXWÌ‚­e2mäR–-T"Ö8s |ÿúm_:_;ÒŠ1C¦seà»BAäU#²‹d\jÍ»Tl¥ Èåé’ØJ÷øá¡OYOe˽]JñTŽêá\§ö#÷àëd§ôJP§ô`fôø)dCÒÞg”l&JêÐGÖîw¢=b«»´£X»+$nJÿ`z<þ+eÇUürZ5´!®tß0¥€t5‹SF4Üý/"Jàk‹ìhõ/4ô(§(M%í‚=÷ßøHvXûÉçe 9Ú¾¢ã,=V³£Lº-u7~i<&ã^7?zöp‡ê”ßð¢¿GŸ(Q‡¦zÓª&Ÿ‰ñj„raHB[O‚ÓS¼ oQŽq%VJÜ f)eĕޱZÜ^ñûV“öùdƹqG[Î?²áñAŸ¯ñ¾3¨*+É"ô~éUY[:0™Ž.8À ]@n’4>Wàç }]Å6¯»n‡ŠÞÔ܆åZKøR²wfW-p²ÝתkBSW+:È2v ØûÏ%duåöSý’ë€D äÍ Ýú·ä<¤ýôÄ<#gÒ<7=n%К½üA5Á%&r|ˆ "ÊV¦£¦žÅ¨Lct—NqÁÛÓ!&ãG&}½´®nâ’Ì¢ï9ó„¹F¦®%@kuÑ—’ݾ¼i¯:E» ºîÖ[5ohtç÷c½tÞKÇi¿DGºTq"Îô'pâîV†ê½‚PÞ‰òÈaBÊòŽ « «™ïNÂüçßô;ÙÔÁ&Þi̗М½3AÝâÛ®‹Lõóµ3KÈxñNã¿#š)ŽÇk Âx†lÛ¥5û(ÕµmÞPÃk/šoW"ËÇ«ÌÄõC⛉4<ÖÜ@ÀG™rÿøÎ|~®+¤(ù^ü“d‚‹ CY¨ô@Zë·Ð“hi¬¬©“  /uŽZtBj3äršX­éT'„T.,ÎC®übÇò°ÑZ[Þxº 7ÐNÜíÛÓy¬¦¾¶±Áœ’é¬5@Òs:EƒÚ<íá^žp:„‰Øc]s¨Ø$Ïnªgvý^í¬pcâÓÔ©Ó$P]ÐKnv{Ò° §cÞt€(aÈœ§eU{›C" ®Ãc[ ™¨â¯òËK:d. ÓX>•´,d̲|;eº ÃfÆ©b oÆ.q|‘ªÉÎoX£˜‹úE“Ѽ£d)\}<¯R†À‘©LxxÊ‘Ðë+š;|\z{Ãú yE¬ Ö ØsÂ)÷}0¤Ús‘õ·e¥­„\î•|¼ö¬µá ªêeú†þ°™òMÀ7Ý}Ñtª&®¾hÙ½.‡b6Ò›oÕFÿ£ŽÊvd`É NùìHq ýW4ƒ}è®Ù(ó#»kîoX°Å^1MÈ®]«‹7yjì(Gr]­ŠÔ††~®h˜ûÈ]²¶¥y6¿í5¬ˆd+L bǬ––PW5ï8/»ÉÅÉ- [)LŠÁs뢧µ}ŸíX›¬cûï ¦* ³é££¿V„çœ<ƲSþfz5ø:œ½hµù+©$a@¿=–б\7€F]ˆˆìuöíÆýöéQ¹þ,{{ÉÚ&¥Åj 1ý‡öªc©²“ÃB¶È{ÏîjX(âÌH›p‹{Œ Cxó¼¤ê·•JÌÛõ æ’š·•PÓz–]*ÄÓ…(C\maaäž´³»G†¯'þâÂ9:& 4XéìäŸu6=ס—¼-Ø üÃ23˜ ßYØÅ;aó7ˆRâ9Búž%ü²y¾ äÍˆØ „þàûÙ­äFàŽ$/úë€0«ÑÝ‚k«6•¦P¶š CÄÌÔ?ºp%±·.ì-‘%• ¾بí±JMj—§áp‡€ &ÝïdÚ@ööΧ¢ÌÃó›PAÚÑ%i.wÑêë8XÞ¶&ÁbZÏæã²¬™`ßHd eO¹8⊙$¼¿•Üä”~*V"?è+ɽÓ!r;4#¥OÁ5ãá!’*.ÛdX‡ o f_P[!š5Ü nQ ¨fó žms+»þ“–z¤Új™q»OŸ= Áíal„={lÅÝÈEsÑ„;ZDT³hÛÂçË×xëWF—2j¿fEK€Ðgi ÃuO72 ß[ëëŒÔX1 vÁÇŸü¼­7P­ÜqèPBþ´*®kѯ…:´&_%øôP%î‚*P3{Dôm@‚rSÞdø äAdæsPV´Ù,”ЛD/{;õ<ªbúBSž_b5·” BW³V…æ-M’|™%…ËÛŒá{HÕâr¤½ËZ™qä½§ëhÀ¼åõTw!Îê7áù2sQç”ú“­!`«8qZÈë ŒÞWc·4À¯o†7E°ùLýe„!IË÷ël>Eú‚õ1—GøÅçέ“öõ÷¢º ëÙ„ØË¤ÑÊïÇÌ…sáhÎûà!Z › kžá§P8åˆÏt‡ëæºi Rº^‚dËa°r†Á\îúö÷Õnh¯ß¼•Ž¥Ïc1_^÷®“J/¬„,‹Nb{×®\"Ѝf²*¬ š‚ª0%4?ŸÊqmxÒ3¸U™VRZš' þ ¾ÑÕ9@¨v6ÂY_ЙØ@ ØÈ­¿~„={„?gçԭÒÝÇÛ„š¦•'Мf€uç}>5Âd7‡YEØ[ùéÓ$ÅC\äÈŠ<þ­cÿ›}NØœÞgÿòΗ6Z ëp–üyéªQÁyÌɸ8É+\!úË;“{jŠX·ÙZøLäŠ|òyÿ³å÷DцÓW"+ÿþ›óîñ ð2 1™4Y†éÏ6DÝ5‡ò*Žo êWadXß±Fõe3b` d(î†XéÈß/L#ƦÙÌ¥XbD£íPÒ-wÛѯl¶UäûßÒˆN–‹ˆ|Ó*)É*ÁÞ§­“Ù%_nfç.) ú‹ÈHÐÕÞ8¡:‡§ôÊZhÜíÄÔȬ´«Ím‡j3ì´šu+ÏSâ²yu²fñ{uZ‘(ü1ùÀ‰5»ªYëgl1‰.|-tÅmÒØ;t½ Ò£3]¶ÂYÙ¬¿”¢zze¾cˆÏ̯"ŠØo¢‡EcEǃ®²«/,ø+uœŒŽ•sä¥M{NŽZAc(­?r{oL·"¼¯[$ô õYf“öÔ¿HAX½H׫âi7ì­Ú ß-i^<3Ü|áL„©Œµñt£Ô£v©‰;¥š)˜?1m%G7C&„~Š\9øøÏÙâ‹Xx ¹õöÌøÍù°%߃.@Ì‚zaìÁ‰Œko\ð{*Kñ ÎZôDm®èËØ„Ö×^ÅbÁ*:›;CZH¦°Ê‹s.\+®_•†>C‚ûùõaO3;wá>/ö~ÚFB5[‰j,iœþÖQ,-pÜŒ{WºñA:u›š aóƒ;Àh&Ó­¾$×ÏVäzÇij |¡÷RÍ'Ëyl^UиY’»ùüÑ`ñQ B)V•ÒòÙ `ؤ&x¼w Vžº _­ØìC¸‘Œ}#Ì5·¾KâÑóv€íÌñ,j3¾i­‰që(¿,ýeÊki+ sN¶Í½†z:K·cIûÇÿ¡dᨄh`1,ÀŬ%!¥Q‡s#^kàG¥…U׃Næñ®Nð¢Õˆ™ìÊÊ7MôŽ\Ìß'Gu<]Fhž>S™¥·¶ŽADÄõÏ.„gkcÆ%s¡çɲÆD¬þî™SÐ䔲5Ùï{5Md“*¶ãý©íÚ˜Èr,êâ“F°vSM7EeG˜@˜<ϤOê/„'í|›/;Ñó“·²tk; ±÷b_{Am¾Òõp¸oxüXB;p_(pÃ…¡}ŠA‚t^/yؾ§ïÁú«CQ¶¯Õ4²1„0UÏ© Xè5¬A¶Óe”úe†Œ å¤~N7gÝÅW\Þ¥:½ x;òÐÚè½x 6JRõ€&©¦ù .9m•èïð)  îÎÁã*iH•Á6§œï´À5:Æ<*ætœ*L]wÞÍT¡õ¡ÂcdÇ™Ú ¼1¦õ wªœ—1ýB±ø¶°Õ#$ã_ ;ÊÝjçVj "]Õ¦á_i£¥Ï¸îl>…õؾ‚›gØ™»SSŒ둺çÛºuêõÝ9¢„,Ã…A–R†aš^=0EÈøÉø ÙìR Æ©û:J£y^ˆH‘GãÐFÑý!Zåë|ÚÀ„`u]K´mo\6©²Õ(}jÒ9¥?Tí 3ž[VJ;殺µÊ?Dö¬OgñFú1_j1Ý¡=öÁ'ZÅ^1úÏ· Ê¥ÄØÓp™m7–°>.¤3FJ 3 `¥¸x¢1q¹èE§Úz]º 'Wo鋨wŒÙE‰SÁcà´ðØ›öò‹MóÛ³2r¨»p¶³/d¨¬dUE¿½â ÕK¡r¹q¡£¦8Ú_U¾jöþþ*ljÖzIÖïòŒh™<ÄÌÌÃΧjaÞ¯²vüóXº<®§píÁ~îŒ,¸´Æ~øÇqÆÆôÆýøtÎÊiÊ¢È,åÃá=N ÎÆ©-kªî “<‡N”ÿÆïºŸ{ó!_¯zøˆ\̇ü«Ûfì´aìU²ã…P¡|jíB§;eø[ø¸mƒ¶âVZäïèE™~¢;¯¼WE®Y<º‚jVí_(šo.U½~C´œôYdˆs¦Ò†nß<«îrƒÃ)€Ò‚ûÆ;máNó«zÕðÜe‰+PùríTY1ú3v­T|<:ÎË;¢à»‹Ø5 Ç}˜é+w"¢á=@ã²Õú¶ ÆÝx’c„¬Wˆl´Å4iú/xâsˉãâÑ^Гs½U¸cìiSTVž„Å&#ÕqSÊg{ «Þ‰¹‘ï7CIšlžÌ]¯UîšµGÍXƒ’Àà2!h”-éFÑ’ $·Ú ŸÀ”E<°é%. Òé%áª6ˆ½=ÛLJݯ_ïÒ?Žð?«Ì%†ŒWŽ©6GÜ—6}OƒQâö¾·èô2=óîŽÙ0ã¨ú^á²°(â´„dàä»T¨à*ZíêßÎà‹ÝjÙ‘èÕÛQ¨„Mõ EûßÈ@03ì‹°¸™ú(lƒ,¦ü‹Ĩ*˜ðbêí¤HnâÒíM{É6¥Å´è'ÎOÕ¾HJšÉ;9NÓ"#´PFZ? ņƒ# )枊ýÜ1yUí~²<šVnªhžœ¼-zÑçÑÚKR:Ï ˆSi9¦'­j8DŒìÉ=KX˜˜…—Yªh{™SÜg´¯É@âÃy.'u¿;•ÖØÜ‘oµ^¡]Ö/ï>Þ´¨‡kžŠQئz QΜòj‰b·Z|9\‚ùU¦Ûžµ¤&œ:ƒÌ-«Ì•í£¬sêï-s BÛ««·3¥†¸VáŽYwòc&«†~Ž^á—`Õ*%tÀ ýÒ€þ­5)Ðâ¢5¤‡Ó©llà.À ¥yXD‰7Xam­¼d€u¨¨Ö.ôm¿”göRd’‘Ίí` º‚½AÅf)ìÀ»É@m‰6‘ŽtmÄÆéAŸ)ÂúšGNE>o`ªŸ|jìÜ;®ãx=Ôë·}7k4×pTxKðÁd«Ò²AùÌ|¸·ªÛø’RÖ|™àïÍîr”&Òæ…úCa Ú5 |ó!ÝüwïØ"P|2Ûç‹ÔЮEõB€ ’Ä;? ù€4Ø{þ3As6ßvØüÓ˜¡lÏ$(wyÚÖ´ìDÀ³‘'´e„‡eÕU-IÁq@lñé×O^±¬‚èhD=>Œß«÷©4´ná´l¡ê)ª¯È"£ÇÓì»ëwG©M½æ´XúqQ Š«W­OËh^dg]iÝL^Øv‚¿î#°GáÅ6RF•@q5ËSª‰ä^4Œ†9'>H©&¾”öm™Žo¸!?4½Û]“ëã]x©g~vˆ2Vr·) :˜÷“{¼‰÷ŸY<w²w®5Ðd’7JÏðŠFwËÉ^Cžï¢ò «øëù ‹ÐiÇœŸ8ÂSzô ÓÐDkbKïD9¸mQÊ~?%ð-ê‹â0‘œcýDó®Bß²øÌ%‘w±méK-+:%!‹ ?†4†ø˜'»ø;µc‘gû)4¥ï³ÍïQÚ7ê¤7sšmº/åraÔXJçP4軆8&Ò»,O€÷—èÅÜóÂÁO(1eßç4»!¼lU±´‡åúµ wD‚4vH÷\úÞfý„w¥ïPw˜Þ„À.|}ƒhºÅ|ñÕNÆá’éí ’ù‹·¿2»_«q{ÂПÜZ¼¸‡V¼HùTc£2v¬£–~¸‰šþ¸ Ùñ4psÃ2çb|´aÆ•¼p“ÞÀ†©ø‚¶A¶]˜DEWñªF¾I4ÄmÕcùyÙ§ÏÜ’(vñ¹n&D¿Ñmsºx. ¢Ý{µ[§ó;¾#$¯$Œ¤tKÿ*»5.·`("h~oÔ¤cº.cÐ)[™|L·}Àýw¹¡ ]!ÒìxO gßr`Üeå.ý¾t5lò™ó”Hšu¦ÞþT¼îµ>ÚÌë€ tß {0EœnZôéç>PQ³%–¬©ï; Xðžp ø¸Ö$Þ…ùÀÐg,S»ÐTyäòº?Rjžäñ•ö—D³›Žuü—+jYlL©© ¾):iž”ŽGæµöÞïÞ?Xµè¥7ŽNuœRžè«@s<'ü¿†ªñ)&Ü^Ø`R–Ò á£ êÄ»PǨ…JmÈÇu˄Ì0BËÐ}ž›è.ö‘[ŸRþrNao¹s“Å‹±õåWU˜ÆkíƒF®R½BaÝ8¶““ß /*¸Ás¢½Äyádÿ—ƒ‡üŒÎK°2•¸wb„„¬äú±§UàÅÛê®ûaJ›¨oóÊ8]íRÑ‹y dÌþéÒUÂ¥A‹—!‘ËÎÞ!ýÊ4 ­-2Oº’Ä4ø$½nZ N~ÚÃ/¯E?kCR˜öQRãÏhï|« 'M˜DÖ½œ§Áü÷„ˆB“0uÐfÆAËðB vù¨;ŽWl{°K8:Kã2;»“jç W3·Pð†iŠBï7˾ßÃekFæ•›RÇ "ç| <…¢¦&ðí&Î8ü*î´ÄÛùÖIÏRÅc‹YÒ-¼7áf}¢D{5¯Ù&Jü½%Ãág߀èå ÷ÕÏ›¢ÌFÐ ce¢4çC]û™î½›^ìG% - ‰wÖ®žcþWŒþ±¯Z¯0ÛÏl Ç4?\"µ-¸‡U¤%º²OޤÏUb‚ï®5^¢§8‚ßI Våµ%oƒ‹g¶]Šv^¯#åÝ¿Þçs”OQV«¦†6õâÃ`O^ ADo´bV‚©¡Ù™üð‰j4¬­ç ªqÖË÷ôg«ö-Dž—­ƒÅF¥¦@£ä³[Åòžƒ;¬›Ôsiè-.¸R±¶±û|Otšo(¯EØU‰{P$Å îkJ¼P¬íHëàÀŽÙ»&*asìÏÝŸFo¨¥’÷RzËú™Ýº}Du™ØXš{™‚‘gËÍþdžû@ÖNÇ ½ÒáÉØ'cñViúLl«÷pQ5æä CÔLOÀ7œ˜€Ñ6×[óé0Ÿfôš^à´)bØc[¯i µfñ§ïdŽ2ômp?b)¤·v§¶Š–ÌÓ$òXV+¯8øz¯WP1›¼‘Ö×?˨í³yˆ;x"-ÊѼ‹ÄóqÁ'vC¿µú¶‘¤yBÄ^бä6uìSÒdJffÆ}©Ÿ{„tuá¢ÿ`s·©}ÈuÖ^s1ý>‰Ô_м›Ê€Úh*fËbNYEÓÙú“G“zºòÛdÎZרW¨pÚ;¢ú@÷SøLE(3…í~ü&€"—¬ð-ÊÖçN Èø}³Ofš“ܧ¸®øu˜­Ò^¼ô¡Äóó?·ó;¥=x ÔqÝø6Þf¦ŠÒÝÒYpó¿ùוsÈѼ/ ÒÕå`ôÄЀžá¥<µ{é Oc|'uº’@Ù/E£ ^NuÑ +;Nœù¨%ž‹4y5};©úÙÑYN'÷hs›Ïœ¨›XB,…Ì<ÏÌæbvø¥`*£“åL6£9"X–Íàñ;fÑŽeqF«ÐvÞ?C6R"æ4³*\‡u«6’äÝ×$ äŒa”¤8_‘ê6£ ¨1Qïg†<Õ ¨^y¬Rò$4~y5þïGÑÎ%Çô ͨKrß.i˜6QK\°  aÐR@êMžs¡Í)…÷¨çì¡¥UR$r'&/|ÛØ‚8<¼ñeChpz=#å|žábšÏÝ êZÝö5µPtû[‡”ó”KI–襈s)‘­K2~gP"¢ŽŸ,:Zð”Æð)¹µvƒ9Ai£“ã—€ÐCF»Î–´¡p:ȶëŠ'-÷&~B¤%¯á‰` õ]÷«Ñ$š$Žýõ•Kk%Û‰o £ø6hó«ß×ü*ª­ù0=\Qá o}8¶KBÕéøìËZĭЂÐ&ÍÀRŸDnZŠ!ëÇÐQà” Òjár$…­2¬ÈÎÓmצtb«ÝFq»`ÌXK**,œ›¶Â †šÏ~¸"†<¹-¿³óm 9¤BŠMÙq Œ—'‚PõX¨s\¥âP¥KúÉNâ½/¤ï©ýýÃÇ;°‹ÕŽboòmÎëô2œÃ—Á'”Ÿš¼ä‘L·¢6áœÂõ•ÃUw.ß¶èö­a"ëÖs Ãd¾€sÑ´—Òé¡KòÑ[\"üw.œËì6×,£·Ðþ—¹¯$¡Ê)…²øÖÈ}K0Óq LÑÛåÖ·]î£ÓÏ òž.›ˆXkkµÏá PΖxœõft$f?"|êMMY{?¶S¼‚ñâ+ÑEó©Íʪwlné[:eÙbŒÚÕ=Á—’ä'tQc¥j™òŠ\Іå)% „ÏFŸüJ[iðRzo¹ï0ùRn…ölÆ]ã hîG]™=ãöÂÄô˜“Ó÷c_©Z”œÍKÿTÔµæ!ó •É9ݯ¼* T@Š¿SÕÖb “|¢:ªRµgá±wûþH‚Ã.ßœ,_ÍòÛ8xëÆïÄ•ˆàyƒ9ž“ú9VvßÌÉ*. n„á­Ý!ÖÕ67à —í§C\N`îéíæðIn³_]»‚§ŠŒ§´œØa (}t>*nXKÅòìw»ë^j±ónh ‹2øÝ öò/þûãÃ(õ,ãáN΃KPASê;=>¦Â"~nCM1q“ Pʉ³°â¶ð‘(Ä|W9FGV2ÎZZ¯‘îT{Ø _ý‹º7E±“í4k‚ûÅAª“>‚WÅ'A áÃòvÿP0ôç°zç0÷bÿR/y`ʈ¥èíM°ˆ¡[# ÿùáÐoÖ_¸$M˜YRßáœh}5h»µvQï`Ѫ&a™§3©¥–Áñ¤lQ\·v/ó²?9=£P²¨Òoé–¯õ:W‚+¦I‹o³{ZéŽM»­ÖRýú"Ö½X}Ù“ŠÛPÌ!ëÑÁõI 5+… ñÝѦ‡íPNxÒ$½˜×…­ŠÄeñþŠÁFýa ˜üE;ô'v¯¾ò–Gã1‘^Påy§&èºnÕÝ»—Ê™x¹f´rˆÏÓ©¹¹òà ¿…PÕ 9_o:\S÷±l¥>sÄ)n{ÚsÔœÞëRŒël¼ùU"þ ñ»…j_¨é(sº!ŒŒPoÑË‚ÄTì#Q´“§&ˆ&ìDpÑ'íuÏùUFifžÚªCÒJ|%˜0ÆÏrÉLtŸ¸Èð¡Ì¹˜ãÊ(@w…'±èÄݽQJ|†¿…QÔ–—°[JÉ€öøÉ^N_Ûö];¹ÔQÅÜ®± N«JCÌÜpòªå¢–6%¤¨â.£A“Ϭ¸ÜU“¨ªz&8²m´m¸â0|’&Ú”é­)Nr%‰‰Ceé²Ü]áp›ª3‚‰-|›`ŒˆÄÿ¤jmOÀz`wÕ1öŸÌ§(Ï$ReáÝ”r¿ŒCpèRUײ¨ÉMCõ„¶)y[0²’š”Ð:¨uiï3ÔÈá†E“5ªò@ĶÿɹV5¥é·˜—.,Y&T¨­Ø»µ")—¦c2Õ»vƇIŒ!§´w•õ Òˆ ¥·òW-£k&õØOÔ4Ô å¤P³›7³}6qùá«3ŒHÂf°*°ñƒS-› Êãw¾ãµï€"¨ÉFÓ}Ë>§K.*žpÐçè Bm9Æ^Hs#LBÁé;SÙt‰é¡1Zéˆ6›kA¢ËkDœ}~1^<ÑÛ²¯3çÛ¸obA„‰3mÆRK²1/MùýX.ëxƒ×9ËЧp÷˜KR¤¾3žÁÚ½Ú/&óc²bpäP³å W_:?êTf(–šÈ™K6®ª{ìw0ÞœoáÞú™í(JN:qF׫îóIj¢ï6ô¯LØlžÙe)LöÖ°â§/¿‚´¬jû` ;ê$ ë*›¿zpŽ<ŽhR=CUç‘øÙ¥ü,–ž™À* BóQ5äÂÉ| 2„/0[„Ý A…”þ’½%SpZyú-3y% H…¸â·òþÎÉXcIÍ$ÏûGsŒZ ËNQ¶kºêYþ)=G×}U€ÆxÀëòØ3F'{ĺbúP^“ )é®nüͨ=‘ ã*íå`êI®¤°açcí¨Òø*‰³€t)õ’:*Ÿ¿byöc­ß8\À´rr“¨.‹„»p’f !£`Ô»w¦ƒ!YV³à¬Ï]ALä±z‘q°Š •—j~_ÏŒø|{Q/5c¯jÛÞ®”7Hcf)îó«M’'YB"ö ={QÍã2i/(X”¢úì„qÝj› +¥›:¿#—¼/§a è"MCG •oì;Š?cᙹªî½–NíÙ•š‰B*F‘Á²XÏ“XG;"üèYT“HS‚$/€ ã”±ÝRrZ¬,º²ãqÐj1_o¿-‡ Úå cŠ’Ëtü ‹Ý2Gf$K=ü¼4‰ Z•È¢Y‰°°’rr‚èì4ø`o ¸Nåƒs=à8æwÃÍÐm„wÅUa Åöš(LÀ«gÐ%ËåÝO4ƒ•dî%ºE¤]n¬÷Ý îóu\fì™MJ’ jG-0ÂMÚÙQ@L'Ä:Åú»êuA öHøñ”í:å÷Ø®&M¶†–åÌc”MƒØ?JšmóˆºMɰÊGí§&aP¶}9cÒqÔ¾»ÍZètÈ/×MZŽf)ޏ«û5°Íç÷N¶Þ«R¤Ð‘4Â?GvÖ”1še&³;ÃNÃG}§–ºWª®ºÕŽÕèërúŠÄ([è;àmLÂÚSó^*‚9ìƒMþP8•}ùR[º,‘ˆ ÆØÐ×ÉѵNCßšmå+¥W1lœñÁÙVH¶0bQFÙú¾n‹y¾»³™Â¾µ×tнŒùavá‘-øÈC0rû3x~Êyoæ‚iÞ îYnD€B‡î~‘è„mè—ÏŸ¸äëéë±ÇÀÄgV mA}zéx¥í¢‰Øeˆxê§Ëp2H&žM¿_ nMÁ†lxÑ= ¾±1f¸¸nÉŒ}õ_~Yúzù<¿·$7Ôúÿ[À¨2 endstream endobj 132 0 obj << /Type /FontDescriptor /FontName /GKGGJL+CMR10 /Flags 4 /FontBBox [-251 -250 1009 969] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/endash/equal/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero) /FontFile 131 0 R >> endobj 133 0 obj << /Length1 979 /Length2 3614 /Length3 0 /Length 4252 /Filter /FlateDecode >> stream xÚ­“y<”íÛÆI²‡ì7•,13Öè‘]„1ÙÂTf023Ì Æ¾d_²3¶_–²$kY²Ë¾UvJ"e I¼S½ÏSïóû÷ýÜÿÜßó<®ã:îë¼î³¢03M$Î¥‡Ãe ²U@ÛØ"@dÁÌgÏjãQ"‡ÕAQªDEhº;r`¢¤*A¬È|ÐÆ¹záÑŽND@B[ò‡HÐÄ ðh{0FPª‡=Â0ÃÙ£QD/Y@ÓÅ0ý±‚˜¢(¼ )Ë H´=°C9¢±Ì  °8@ùWéîúwË…'PCÔ’5"‡uñ(fGÝ EMòÿêßæzî..Pæ‡ýCú¯6ƒvñú_ãêNDác…Çþ[z õ+›1 ‰vÇü»k@D¸ í5±Ž.(ü«„&è¡I($ M´w.ÔÏ: ‹üwê¹ýŒºbn ­e"ýkž?{0K4÷rýÇõ‡ø'C~3õtðhË‚Áªúüývã_{ébíqH4–z!•ðb¦Þ *)>E¢HŠD ’ÅâˆÔ%õLüžùÇ8•”ÖÒ/º€tþ!ê¼@ˆßDíÙý&dÿ)(P ‡ÁüVC¨iA¨?ªpúú¤ºa~# €°ÿ "5ýÃŒzMA¸?êÿ©Þ„ß«©^DÏßjêgx£ð¿ ÿ=6--ÉGF^‘S„P¿ù ¬öû?:{w<…%þü#¨³ÿ›ÐÔ›‚B‘PöÌ£8û‹!Îi5aÅþºùCé¥hµŸÄC+›_>c¹3ž@ëRÐcè&õºÂj¯$ƒëø{ú÷"žû‚„¨ß«ýzŸ‚ÜâÉ#ï=n½Ïð®´ÚÌ0öZpÛ¹³Ì^_ójkE‘ÖäÅëÞâdëûÙëÏ—sa:æ‹ Ó¢4-pª–Ì%e+½ ‹ðÐ qyQS²[q„BøŒ'GrâÑ™Á;þÎáŒO¥§6p î'öòs’®o}|¡çÍQºsŸ8!¢cô¥DbòïfÖÖíï•fÔ‡äkÄãÉØWjYI%ݧ§GzÞžô­Êö— ž~Ú›cä)'[ñ¾0›0-µnò&ë3wdÏoZÎ`«¡+uVA´%òÕ¾òs†oK\30!0a¾\œv¨ßM­“ª ñ³E°N0Æ‘ NàNÏÌ‚w*.É7ÊÁ°–7S.ð8¢Ãð“¡Û<7³BÊ©iE§"£îÓn…‘GNr¨žTp…}/XÙ‰Ww|ÁuŠÕ÷ò•x³0lVÄû›h¹ºðB¥°% mRä®1™©,ì ^M–­à¤°5}iè¶æ<Úä3!5Kõ’öqg¦ze?0"E¸6<õé-ÿ•t²îR‘CÛÝ#o¬¿¬¾$Uäk“›~–Î1áqç.Êz5l<•¢À²@¾ÜÜÝ×(-͵ÜŒ“­A°û¿"Þ»ØÏ£ƒ®ÝZõˆ¸­^ãuøº:³¦Ãf‡Ñç~´û¨’XžÙ§u2õÏýÊïký[n0Ž|€CÓ“¯µÇi&î6Pj#VïѸ5ÔÂþáÂi¶Æ“ÚJGÏ2vLͶÅÊ´ø¢NeMI†Û”Ë·sJ¸ŠÚ-­ü‚z/ZH-\Ùž3]¸Y7•6-ß]MèPâ¨AæHÝ~I8u'¡H³ŸÒØE”r}Åæ]>;£z¢l'ÖöÚ×LsÍKpa«jÊÍõ Ë,×Õ çVú/9‰À¤†¢ÆÄn=aç9 :všLË$K߯õKW5zÖ…çêy؈CDÑ8&Fh•µŠ]ý“á ë?­Xj4vZ$­«ÕçRˆ¾œYþŒqòçg! Œû_A/ÆÅ*‘ä;ç>X×Utœ1o—úVålÝ@Otãä…`±:Å*È—ÛmmO{0Wž*!‹F¸IMspþ'ÛB·¸Àø˜7Ùµýãˆãœ“ïŸç×hf¯îtíP¸%Û²1ãÊøØf低Á‹îžÛÅäÖd¢rdûëQº s Ï’Þ—ãsïkDu Еó°â‰ýÖju3]zŸ6¼:H3[¸H,Tß“‹õQAÖ×S ñ®qåÍëqgSÇ¢uSµ×Ï}ΛùËäA §LòœM«9Ò þa|iIo Ìm–“—À/Ýþ8¡ÃЕgÑ|µ²O—c©ãa»Èú-†¨è¶‚ú4èȼ•bç‘DS&{Ħ< ¼8¡" üŒ 'É#:Ïh; d‡¸ôûhÙY!_³¥æ„—Zâë=˜É2ÇJŸM›‘ILÀ®~ÇÙm6°Í‰Fë™rÝWâëÙž*lΫbƒ[hB'”f sŽOá«R³É¹RU#C1ë|ËGeMŠÁ{àÌxGÆ3áM¼áTÂtসs,8ÒJd]üºÐ<¸9pèpD5~lB}«O1îoç^½žh0¿’õÝÀÃe{½ñ/þè Z³MZá¡OM.ŸåÉwwüÕò2,–¡ «½®l¢î¢c {­ ²–Ùu7מà'¬íGÖN¹èÂsÅÚsNtfOzpŽ(.^J…Õ‘jåߥpŒ`Äl< -Ò|osflÊÑì\ÆÎ'£Iƒw¹/UÙs/ C|x®}7òãŠ1[xSQÞ)Ö€dõÑ™|+È5ÚXbÕ7<ǽý>Úß1¯3yïíPA b¿Ov7!ÒéÕs!õ¡Iu ¶§·Êc§Qj‡ò%/ñ}1UÈ Ø ™úÇ7v/U54’|µºx“[vŒ2‹/ t¯yók«•Bì¶èÕZŽ<òRο}[ÅuÝ-b>Eíù]»k~å®è·Ï9SË妗ßÁªõf/´úmó_nÑJa.¯v–¡C¦<>‡ ¨O°~T^#kyQË5,B¨Ê¹ô:`ô¦îd®?âË” 'ñÉp38O°³êú%€ 6Iy”ÚÎ,• y¦y¤³zîžV\ëµÒGb ïp0÷óžO׿§—Kî=omJì]Ê´Èܼ;¡úMÛȨu I<¶v&HC˜Wÿ<‹ø5i“Äz;Q üò`vÅ«oýØ)ýQÉðب4Ùj—V GW&#ùă²Ï|…kwMB¹M=ëìB¿ß7Û-‚›$Ö©~ñªx·nߌúnzf?F|iJÓösýU®Ð`dUvœPº2Ëýú>îKÁõRt€w …zB$¸DËn5$Œ-ñhW :©TÍ™á2)„<5ϱ³Z<ÊôN¤šó ÔìmyÙi“'u龜»ßàÉš&dÄ-ÍK³ýϳÌ6$“•ç®D™öäÝ3‹î|!•ylÌ­³ -Æíøhy6¸¶ŠÛ£œ’´•™¿­N¹á+¹È“&ÙÌ­CˆN_ỞÔOÏ6€Õ¦•@]~é!ä|ÛKVVFI?Ñx6gW!ΚB|mÓ䶸~ôê5kô‚µf"*¹t`7ïUÈ/ö+é?¾IWË_}ÀêY,@˜âu>U¾Ï: J+b «R–5@L°Yµµ6ãVžç7`Õ˜yºÑÿ!"CóÚbáÚaK^o°»¦÷Ž¿üàÒäqký_»?±È´çîTMu˜¹qÃÎÂ^b×î–î6Û³×B\ÇPbB¡£›ŒB)@Á-]ýk|úé_i¬{0'½Ê£>Õ­Ñœr>ÿðÌ>Jº~^I2›\õ~¯Î52`<¥&¥{½éëQ!JßM‡ÀÇn—kæAˆuâà\¡ýçÁï;§×aí쎅»g.ËyåÊG=Iý–.±á[Œ@øoG è ¼>NY[ôQh©ªÔðõ$‘>éœg¦©‡ú)NÎ%\oÒÝœn”/(Ð4\˜Ò>}^äÍqýûiØáØš4[‚û™$¼Óî|÷½ôš×%ü9 œ½£…ß(W=çº?ë(Fz|Ü’¸šT5Ub{A¼3;”¶¥uµÛu*z¡PêVAêyqs„Îs:ÆÓþ!Á`ËÚUâí‡ÖRÃÚæZî#ú‹‹éaJçÓ*¥}Xxºèá)-n}ÒÝ“ñÀPœxmÆjË~OãK†C‘:ƒ<-9ÆŽTÖÍžôÑô£`¦ÈT×’¿à`LÜÛdVšÆ"6Px¬“}Ï\|ÚAXn0¶pU|²UR9¹>&"ûÊw÷H ËG«æÁÊîÎ-¨}5…˜d"±ºFføxûÔ73ï¼¼Á"½‹1hÑã)Ž“ÉVò+½©ž 륳šçùŒOën_Ñ6•·–‰^Ýw•"†Üè¾ûmwúŸ‹„ÁŒÓ·ž;jŠV¤-¾`¯!˜ˆ~úÚò)ö>ílÿåÐX•³ì é>P­Öò "hÆ#‡•yN €WÞ¹¬¦}÷®îš§W{ëzç€H§s M“Í€£êçÖWEÓô´ 7 y>ÍRÇ¢[n;_KwË~hÎgÒÁ‚Ï˰³ížâu+üîQ)¼û Ô}`ÑÉ*ç¡Zhi*T£ó®­iCÀО+=¨…Kw++KÁQÀåÖèð0×]ý°6éîødœx`$7MªP=‰çŒn{¤ðòTýaÿ óÇ’>ÍùÁÉHޱnû7Dfp—¯Poå·· bÒFCÄ8‚Íõƒ2=ŸûàM¡ JG»¤CäØF[”(7^•p½_‡Ì,‡V°àñÒéqœF^C\Ûi"íl¦ªI.zi"¶wçeø^dOŠäCÊðÊ•~±Ì•ð Åic/kOæ›'§NFé·úœ#øD~¢Ól[±R7i¾ö&ýp´U¢=Xc^^€¼Í¥‚ …|'12¹Ò !XUt’üŸ)´ñÝçKPædUc¼%ïw"«-£—ëQȉÞõm&e¯8ɘ–}Dé|uEÓÿÚðA endstream endobj 134 0 obj << /Type /FontDescriptor /FontName /JTICBO+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/B/D/a/b/c/comma/e/h/i/m/n/nine/o/r/s/two/zero) /FontFile 133 0 R >> endobj 135 0 obj << /Length1 918 /Length2 2902 /Length3 0 /Length 3518 /Filter /FlateDecode >> stream xÚ­”gTSi׆•"Ò›t”H„@†Q”Žô¡‡$@ $„H ½)*½ MPº(EŠ#½©)"E¥ˆ/ê7μ¾ßuþ<×Þ÷³Ÿ{í½×‘·´VÔGâóÕ‡›•5jxQäHèžN‰Õ:4à%´¢îÕôԙ䬮Xާ…Ét‰w']¥ØW4±<%7{ö÷ê;œUb¶úîšDÕÜ]®±h¾'¹ö¹x&LKÓŊ異2é!£Q ¶9éÓù{ÆFäòÓU/~=KR×ÈðqÚ4eædîôXñâíþ44–Œ•I“¼ˆ~?{çeõ§Y͇ø¡rLy¡dÆ  WSŸ l(àôý ‘”yÂk´æ£«ô&¶c¢¤¶ÚÁ|ùMƒ ìpÓV\,Ü¡#?—b„y„V¤B‡‚FF¤(™/;ÝÙI3ç»àâØ M<Œr"!]Ô:» -ÜæÏ#K›nÆ´Œ'êÁ9ØÉJ37¿äHÚÒ;ŽJfsƬ sTÞߢg>õ˜»’ÇÓÕs…ð •ê–Á‰kR·l«å¡óm&Z‹Q<™pgRŠû'*‘Ö&&½v×Nû5©æÈkö.I_{Bl¬mL½¿¦2†3Üd?sY£Ü}çL›A››NS¥×{ßãJiöeØN”¸Yrye'ò¯øˆÖå€Yjáù ,5­)aõŠî}KKoé“G®††É(¾^â%uñm­ˆ÷uÕêøWeÒÊóLoí NÃâ¾ÊD3D˜ÒkçñÇ+¦ßÔ†ì$™‹ç÷7U¬óºÁÆo¯Ì'Õ=GØXR×w ïûÅAÏ~ª*Çåp!2’›ƒÞßA,µƒóKsœ[-%ÒÚ¢ý¥$q‚>&9•›Ú¼Ò'”‡‘³—iÔcÖN{͘rÒJ8Yíö«A¶§ËÞý‰T·²°ÑÑ¡ˆãÕ;Ù§-¯‡Wž¨Ú0®Ú)”IMxaWSÞrÖ–¯}ÕftGêÂ’Â1ãBtÒ'vGÁ5ÿ[Ž2‡crºT¦tÚ””òB:ëBß]ë÷‚Å»pEüŽ¥dÞ~ >/„µh ¨[…®ò2ì[Mr³v]—OlC©œDïÑ/éügÏñ- žÎ?–¶® “=½í3äîÜ—4ö{?’dê e8‹‡¸­s¾?T8öFÌ&ëXI­½ãè+sý“ÜÜ6 £wÖÉž£ãŒn™RŒO»§Ù0ÙWmi킊žu¯wHâu«¿k¸uµVˆjwîÖ|Cìæ9†£Á6˜enˆGÈÒ&¢°³Ÿ+¨ƒåöäHšä M’ILcq}ö–+ú“À¶À‰6¶¸ü蹬2®©SŸÀ9§Ë0¶!õ ÃyÕ»Ã1„“Ρ@oÇ`[,XÂ_e\Ø9ö&ø û`Ý[^Ïewy÷½ŽJ ¹‰oãbD¯7Ó9¡)é{ÐdÊd[Kž<ôÍZˆð‘Ê0Ö‹îH&Q»yŸ]¼ù×"ÆÛú:JÞè¯\c‘\ýN\Mú‰Öl£®¹ª7‰®ƒ:¨êÜpêÌÎwö+‚Ð-ˆŒ‰òj:×4"ÝØ!k‘ƒÁs²Ã7K«Ý6G™¨#k¸ŒÄªø³7®-WD妣zå®Ðg‘ks7I.'ÏÕ;í¢ìÇ;¦\ãd[‰ƒäæ~¸6žo!OPØÄ·,†@_o{k}Ýf|Ê㳩×ÊÜ+¡.øc³®l¼¤ËL=a’ÇÞ¶šfžâ:yé©—€QsF_éèê>IkVüÈDê6ÇF”T߃=.‹®‡'_\Káý•NßzÄñmfÐä“è ÁgŒ:£›Ôóß=_tí19D¬8Óg­UP¤…ùSgú™ãEЗyFF)S,[Š ïk.áE)a'q„^_Ö-Õ«öGZëÜÅ'#Œ“ÞR’Št° wæwÉ€èSn-™ÁÏ!Ú±7Úê%¬Ž4ÐMOèFéûbìVñG3G}ç™Y$lpf^ÅÎjçÜbâ³ÛÑLë¥tǽ š’Ë]jçâRÐ/o(·x·äªäœw´˜qšìøÔ)TBïÉ0•Ol+Ïô4C·ùdäÊ󫊦ñ5mŸ½#“¢8;Ë CîÌi’#K]EÕ ¦¬½ì‰Ã%MÒÏ36¬l“¸ïðg×nÿöæÀ®„Ä­†ä·ôÃ}´èÎãQ·´J˜©QúÖw³±3ÇçEþJQæ÷!,=ö3Õa۸ȟ?KÖÚžìsSˆ›=³ò`óÑ~À¯.§m…ƒñ3Žº¨r;ªnAÇ×€ Ðë É3)Ìßz=fÃd<³/åRŒeCÃØòÇ`­”Qoº4¥­#c‚lܲëŽÇ4 ÊŸ¼4{=zjê¤8K·+ŒäÒ–À× K6MíܨŸäOä]`™HÖ\6ÒÏvš^fP{}^dë09Ük„ÛºtDÈU¾"áVÈŽØ+ýA¤I…>³°àx—”Ë×刋ºÂìª[7¢²HpÒç,Ùûcñ;_]=¿–*Š­G͸jí×M‹³æ¾; +[ö§ýx¯çÛ­qÛI)_ñ{·FTÈÆªt8!¤´oûIºn@«C£ƒcs`%5£éÊ4Bi5ȇ ) |yõhîmnß™Ëü}IÎêÙd%ưhj¬I•}ð_Â]}zk]÷¿ó!Œ’œ~¬Îa5ÀœO)=Ðä?µ×óࡳokÝNyc8Ü_f£À¨·Î«h¿ÆÆw¨šÕéçâ6¯PÚZ?“ËX¢„_æmë ¾ôÔ,ß“Õú;ÌG½Odþ‰Dzª¶Í¡®2$ vH[—ò|ÜT¡Ö鯅wÙ2•Ààj^)ÕÑþAo™}æÇäÊȹ7^SS„ êE‡64“vœ$9N*ºqÀ‰ÅòÀ.w¦Ž²ÜÜuBwJä“(£JÑ&#|â£[_FØDmFJvL~`ñ¦×)Ðv‘Ö+=Z>2sÄ~ƒtq6©¦>YEë“U¹4Á}Ÿ:ªÉG‚™„÷.)AjsÝ7¥PÖ`†¢‡\®¾Ïý¹=hÅ[ž»÷zOùМ—JŒvÑjÄ|åïó.°÷}ÕŒ]F ÇéøtKSdEJ?u4•§†|µ(ßÚ+ºz“ÔÐ0²z”>jþÐ|ÓflÅîüÒG=1†°Ätv¦ü?¦Gu )ŒŽnláêiÿJSÍ endstream endobj 136 0 obj << /Type /FontDescriptor /FontName /JIDHCJ+CMR17 /Flags 4 /FontBBox [-33 -250 945 749] /Ascent 694 /CapHeight 683 /Descent -195 /ItalicAngle 0 /StemV 53 /XHeight 430 /CharSet (/C/D/G/P/S/U/d/e/i/quoteright/r/s/u) /FontFile 135 0 R >> endobj 137 0 obj << /Length1 740 /Length2 1101 /Length3 0 /Length 1619 /Filter /FlateDecode >> stream xÚ­’{.‚%Ød©ü ‹iØä©+¡ˆ‹‰Q0>µH'$y"„0„@h$<ч1Ñd2¸ º‹ójnÀ²‰yBFøÈÃÿ1×NÔÌk2  Ö1Èp™¤|>¯'åˆ q‚‰‹m ‰’S¤‹Í[˜ÁDp4€£I^: à r #‰!¸„2~l Qøx“òå7ØÛãÑ[Ì-,™ÀœE*™ K`mÅŽûR(•H`Œ˜øCÈ(>×! GÃBJ{+.\±mÓž²¤¢xÇüæâ¦*öâò4sU·/ÎV´¥« …7Ü#L»Ïú¿/ÉÖRë™Ñ£õA;r§2Ö«Á©?1"moËX,¨';¦RÛ ›/®?¬x¡~¡ìÎ`[eõïÝ7‹2Ö\ËyYû"ÏÓ„çÓ«Ú©7¥z¬´zÿ6+Ž¿S6꛼ýìR =ÆÞˆ¢Ëä®(ŒÝÓ»šñ›’gV,ëx…+¥šïógúelýðüŸç •º‚G¦ó½+ûŽ$k¨Ÿùxµî”Ý~ ö–€ž÷f n¸*rµ’NåÄ,vÜxëå‚FǾ¬ß¬Ré¯7jdØ÷îôÇU*zøªÎù±'æ=èÈ|#ó•ºayË]¯muËõu¢2ŽIÑ‘s½án‚Æ.5.š5ÞY¸Û/¦äh‹ï3jêbõ¸Â媉â7U¼TqmÉ«ªi2·]1ím'z·¸*Þàn·]¶ 5)×ÖÑÔSáÝÎiãE ëT˜Ö6$®Mnh¢–ÔÔgmxÑÒ jü¶:·­ùÚ9©¯WžäÁóùTK®ìñÒyeÛm–0l6$¦Òз²C:1ãt•Ö%‚í»*èÏïŽq UòUŽ¡ÍrQÒŽ¼}wÊÖ:5e–‹âÝûÛQãcý ¶Ø„b÷„>c™‘ ªiWϯ9úôrÅ»r/眻لuèk<îk烅/±`ñ“F–,éˆK@¹¾Š`ýÈŠØ<5íŒwÅ㛬›3œž±®uwÝ~ƒØd8†Ù™¨î.­³£(Gky¶ÍOF4D3D%Ý)f«,3ã÷?rkw¼5Qßy*A¿ÉV—[UºFeÑ-ÅB¿›ïÎôÞ*6„< Û,_î’à;Øó½é’Ÿüªãô8ÔZ…ëØ•'œ»àÛ)Üï¬ï늕óÓ錨€Ñá MÿxP˜:s;-Èn›¹ðê†EÆIú]ú© Kº¦òÛ!ÛÎÙi™”NÛ9¿–¬sUÙñ<Ñ ×˜)c¶æVžÓ:ö.x89‡ãv_°¿Ù×¢O„ýó úZéùxË鋿í;“]_ϹæexÝdÖ=´2§¬±¶}žÒØù¡­¸*ðgqÚÐõ­ô))?ŒÔ½Ö™Sô0õ‘[öåðí;¥LfjûTËâ{ª<Çï}Ф}?ånfÇV9Î-öK.j´Þü1e6@.™r®óäÏNBºÞo#KRÁ,-{^“-C†jÕ-Þ\zpÎÙÉõ²L»Yœæ¡RZ½`5å«nÆiÚzo Êì÷ºU T XÓÁÀñùÞ&Yn%#5ê©k«Q ÈýÞ“~FÅÓùÝY°Ïô¾Ì#éó*9v•È@õõ_â.rYü“‚Î3[/­ÌÜüÊçR³É®¦žf¯¥¥ÁÝa‡îœ½êñ±¿®wïóSNÙÅ5#2®w)/­Jæ8´ôê{–&XªNŸ¥Y7Övýã/Ù}3 endstream endobj 138 0 obj << /Type /FontDescriptor /FontName /THGOAZ+CMR5 /Flags 4 /FontBBox [-341 -250 1304 965] /Ascent 694 /CapHeight 680 /Descent -194 /ItalicAngle 0 /StemV 89 /XHeight 431 /CharSet (/two) /FontFile 137 0 R >> endobj 139 0 obj << /Length1 867 /Length2 1995 /Length3 0 /Length 2582 /Filter /FlateDecode >> stream xÚ­Ry<ÔùF‘+Gj­ûë¾™ã,×`Ü,bŽ/Fs˜1ÃŒkc³IŽ!rçHEŠTD"9*±C‘r$YÇoÒ¶½¶ý÷÷úþó}?ïçý¼Ÿ×óþ(Ë»¸k[âÈI&Ñ´¡:PÀÊÑÍ€ê@ø••­¨ š†'“¬Ñ4ЀCKzƒP=c”_°"‡2©ø ` f¥þ…dXA*‹&ŽhZ0Hdk`ÑÀŒÅƒ4¦`I n_&Â70 ¤†ƒ8~(Àá±4áIüº_üؓɀáWGýÖ ©alS€Û¤:À¶ˆ#“Lòë:‘Ù»@¶“ÿ‡©Å‘tÁ Mü"ÏÎè?]4O`þÝ'Cé4 8’q •ô#ÕüjÍÄáéÄ»ö44µ$@ò‡!ñ ç‚§aƒ@4! ÜÁAîGìØv,èF:z¹ 5w®¹ÓrAãI´£ÌÐD¿pwjè÷š Ï| :”Mdßþü~XeCÂ’qxû9èh*Íäg¿ v¥œ€xd ƒíWW‡D¦±Gv$Ñ@ ™Êÿå˜ì!ݯ1°áÄÊF(töQ¾!pc@—L¿×@7MI0ðûú7Jý—\ èaÿlcºa`8Húްõhäú¿9"dÆ m˜!  c¡P 0Ô‡Dÿ‹ˆ¥SÙ‹i;O”}ou ž};d€XþçÃdìÁÄ?šN•ÇØ?©àÖàD]OsjhlH9ÇI(ív h¼¨÷Z¯Ìbq³ä"6¤ÂNߊríE¾£¤em±ÂX¹‘7¥¼–r™†*|J˜nizº2¯Ïé<ð¢§<Ó»ä~þ‡s—\Ô¬Îì—çh÷ ol¿h`è…Ì%x$ýZ¯¢'ï&’M)O†'MDˆd¦ïžèKˆ I⽡9¶H¾Eß·^Ì[˜±åûñFwKÁ¡cñM l >°=eŸUWµí†H-L}º6•á;÷TH¨:´-9ÒFVJ²Ë¶æ…å¹Gc)h¸ÿ“ÐMȽeúˆå™ [õ"׆U™š¨äx#Düæ°ˆÆìÂÖ œ­gÈúÏrª%ñ?•w?ƒ öã§õ§–Õ–jßÿl:-šg¡J)²¯h_?ªçWëo¤ èâØk>yÇFìКm‘ƒs"®ôÐ[ÎùÄ …MŽc´ÄNÄñà´,Éèþüþ°_'?{-Êu~zM^ˆÂæ¤^‚¥#œ]ùQóp\Ürã›C•QÛª…ä—)ÛVtãÁâÜ`u|\U¦Õaru]G>œµasuvb3Óe6m£Dh)7§Ç—UóÚMCšQ1¨ú·¿=Wï‘.¢$tôòúð“}Q² ô-.“§lûábÿy€iÃI="ö¡sS ¦{JÞË–KxhÇsõÞ¤|Á}‰\†¸Ó¨Jù®‹+E*¥öWîAήŸµŠ »µ=b×5z sñq€_¨âõ‚Ø×µü73¦ïªo± På°ÛÕF³óUÅ~« AJ©î§]FCïÉ–Š×3´3Õ®5Œ¸ßôHîÂï.‘íýv|òîã[xlD"`jþúÙiÁé¯üÇ% ƒ4ò]3®Äù‚N;‹.…ÈMÁßáJSÜ‘U­ÖçÀäkóV„5å–ó%d(Sô±[)ZØ–> ˆqÝäíàxR÷Ù˳Ÿ¸Ôµ”Rd õªš_Û>ÎÈËi¤†o»žÍSmºk\&ûŽ•óòOIÞ­M}ý1#Ý¥{úí§RÛ83¦¤*ǸDZä<]Ñû¬‰¸ý¦ë](¢Ôzñk„ŽÅíma|º¨m½V”3ç¢:WwÓÕÝdÒ»[a®ýÙvXŸWî7Ã{ºŽCH«žC<Ž»zçÊŒËPíùTÊZvÝðÑtú%¸¸Ž§'ø¸Î³5ËLêÞ›s(“*¨9Nò=RûžÕ€Bz™2S#W^›^­hðì?¿×:ív¡R^þ’Ê™©ˆ¤†³Ð '=»V–˜¼‘zé3¨ç?G-ö:À)}NìX×X|²™RácÉ”³Áç¥ #R "®¾ýHÌÒºÆü—0Eª 8N"¶Cé ]œ‹J3›ƽœë«õk/Äxn´nÿ9ÃgySùAqZ ï šžòÇèõ’ãæ\ï/Ÿøê ç.Ó³䀿ª3ñVÙ™ØNqÄ(Jp¸Ù€âO±vPÝ<¾½/EÏg‚˜õùuÄ­iÁUL}µÄ½+kZ7vŽÈÁg¹À«çR)³YÕÚ×wk5;иä^lnÝû3¶0äþµésû½ü|º;¥gÎE‹šžŒMŒš¹˜l9ͧÄóÓ*ƶ–a·E¢×ŒŸ‰’”?wÎGz[¸õN4Øn%ºÏ Š‹ Î ÷½Úôºb=Õ<7…}F=ÓñÙø‹u©ž˜Ð±%zy⊦Þm\Ân3§¢hæi'c¿ïÅ÷í·ëVáÛ|×4êt§,DÉ* ¦TÑ-}fî¹JT\2ëß:o‚£ˆ>ðXûPbšÉn1znp¼«Pe,ý¯ÖC« ¤:²~Ë~:Hü ¡v¢¦6¸ÿZËé-nOF›‘Å8}îÓÝ£ç{K²ù{‡k7QÿvDþè endstream endobj 140 0 obj << /Type /FontDescriptor /FontName /JFMXPF+CMR7 /Flags 4 /FontBBox [-27 -250 1122 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet (/eight/equal/one/parenleft/parenright/plus/seven/two) /FontFile 139 0 R >> endobj 141 0 obj << /Length1 813 /Length2 1031 /Length3 0 /Length 1594 /Filter /FlateDecode >> stream xÚ­’{PWÆK-RhÑ€…á ƒ H² „˜ µDh!<ÂKm,›ì&¬&»q³D 2­Š"ø@¥¶H+H©XEKA©T)å¡¶ #ÈCÐ*JÁwAí‚uœÒ;ûÏžó}÷Üß|çºÏŽ’z‹1JއP$ãpŠ.C`€paÈÝ=ˆÆQ† È`”ÁE  ֫°@䋸ÈQZ#M¨’à4wÌ$b N ”(“ŒkØ T ¤”‚À#ˆÕj3vBbpN§àB€ ÈqAB¼1¢0RIÁË6¦×¾’RpZÇBOr.`1ŠT†+!ž„bïÂY’ÿjâð½Z-A5cãÇSúŽjµñ¥Ñ꜆ÓäDkþ.ǽf¢Æ jB!&Ujx#~\Ø—ÿR t!„Ç¢F‘ ”¨Z‡÷q›ˆÂÆ7‹Š].‰òúg¯ãbJL¬Q‹øµ{¼F^×lJ4a+`. #¬‘ý^ýÉ&\¶„TPAª€ß 4!ö±¤!€ 1ÜpKÌã’Ãl4& ¤hhl­,<9Jcrõ˜0Þóñ<%¥VS©:|}-À€§!H½îµ“mèÕ ¡eiÆzÿÍ!02¤yû·ÐŸåB ðMÿ2*ô4“ÌøScÓ|U+ v8nÀ¹RlXõùñM¥éK´²äMyÚtä³ÕO‰Õéùf’ò¿Šž­bŠoöTn«ç¬nsøP°g:]á˜#É^ù húáʬý%‰;2øuÜ+RŽñ³¬<Ûç^·Ãê×ÄïÝ·±ç=QÝûå·ùænë›l¾Ân.?pêqg»µÝ¼˜Üy®³æƒV39ÆŽ›]†«×Þ¸HqïüÕð°(Ž.$Ë£Mù¾µüúè$S¦´µyE÷‹O_ºÕ“ê€NÌ®[apÞìšé>ô³´Äð0+ý½´Ë-Z+Î…Íwr ®‹œÕ96t´ÖohìámÏXzÊ9Ü©©×7ydV“—$Ï^wú¾YÞ_íxvÕ¸ï"™/nYÍú&ýI ºz_Õnçàµk¾=¹èq'ÇÄýèøÞeƒÅ'ë­ÛOÎ@¦/¾dÚþôë)’s“³|"ô•òª“·Ýáqúîúko]ZÜ›¡yÃÆ±`]´¬ ʉDCžOÎ9Ý×¹µA î[ !ÍùwË£÷1¸‹~à~yÙ%}*žTí\h*­´¶ÜÈx_n Ø"(ôœ“ÇÐnó3ÙÅIpÄN~-WÒâg>9Mj‘¾hšD¥sç_ªm©èº½ÏÖ|­ñÝE¶©{YwÞ®:¬+É[芔–|üëO==$žÃåï¼' R},4IOìo_1zêÎІëÝ®^r9]ìbÞò¬ü>ltR §}€*X8dÚ’‹š¿ÈussˆÍL«ƒ_½_¶¹à§`×cW\¯Ÿ=WÐú0µeS¹˜+žTöë ~Bw­eâöÅðíª¾šþ„*¿.]Åœ\Ӳг56¨äÚÖǪÒmþùO’M‡RŽ âØ3ZóŒÓ¦Žf‰ì±'Ðëo&|—»`¤V\ÀX¦lžcÛ±w§ÐVfe·)¹e}å¾òúZ^J³¨äç™]ýr!s~Þ—ö|sϪ:sViÁ èJUÝ@dn' K(qJôU'Lû¤³_[àRz»¨Ð`Ü»²êÍmS‡Ô¬»è—‰ìßñ‹;³Å+ÔâtäÛC£Á")C¤ L3ò»¬‚ÙUh6ÓåE äp?”yÌ8º¤´ã“iI•‹½‚öäw/æ_Mk™l\ø¨\8¯³ôÌà[ò?§›dbQÓ ^¢ç=‹:Ÿ_å%Ç¿½i锚êi—ë3èËϨ| NÉ(úKxÌqùf(턳ԣ"gl¨á†}÷lj£œÓíQìg1²+¾}8ê ÍÊœÚöíñ³ÃŸýXÛÍTh2Ý´I+=?ÝYj×ð[pžÝgbSŒwéóçË6‡Y^Ééí,ø´¦ë7†cÌÞOõ†ÏÉþ10 ©X}<®Íñá×Ï“„I®æ’ŠÖ¿ 38 endstream endobj 142 0 obj << /Type /FontDescriptor /FontName /PVHZNP+CMSY10 /Flags 4 /FontBBox [-29 -960 1116 775] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 85 /XHeight 431 /CharSet (/bardbl/followsequal/minus/multiply) /FontFile 141 0 R >> endobj 143 0 obj << /Length1 782 /Length2 757 /Length3 0 /Length 1293 /Filter /FlateDecode >> stream xÚ­’}PGÆQë AEaT”Š€!—"¡PC -1B”JIr›pšÜÅˉi@ŠJµ¨Ó ”jEDÁ£S‹ :¡­ZDM‹#V±PÅ/ ”m uÄ;÷ϽÏû컿}væÉ’X"”PÂX§XqBÒ @Ø\F@€˜„ #ðÅ Ž‘Q>à „KÞ—±g­oSã´.iÑüÈŒ9e̸{KÜvSvÜŒLöŒ5gµöp6ìjÍ÷~¯Ÿz.ÎEÝ!è¿áÓ'Y?Î(þ‹Ú=ÑfsÜØï²Ûó\`É—XR–[úJÂÕŸþrÈõZî:^|Ó\Ëò:o¬p+K߸©øzªËlÏ!‰¦ïÒŒþk}w.>ÉL[¥¬20ŸQq^^EåŸW“›£RÕkü#ç:~à‹©(lí\t:ó³öG½CV_«ßûõa=ɱåCÕ¿Vl*èöœÞ‹”¦,_Qü“šÕ?(¿œeZÕr%'”¨|`¾e¯Í¨í Ú¸T¬üùÊ%*áVçtۦ˜ʫ»þñ qcÿ×G›´Â;„®Qš)ë¯WoÞ[#•Oì¬ÞÝ»$Þ”sÐ}µ5äe܉›)gxÁGê…­ëM th4¹s”“šóŽŠ^šSÕ¾*÷Ï ›¥]òßË||$ÿˆn« endstream endobj 144 0 obj << /Type /FontDescriptor /FontName /HNOWAJ+CMSY7 /Flags 4 /FontBBox [-15 -951 1252 782] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 93 /XHeight 431 /CharSet (/bar/bardbl/minus) /FontFile 143 0 R >> endobj 145 0 obj << /Length1 1138 /Length2 6672 /Length3 0 /Length 7379 /Filter /FlateDecode >> stream xÚ­•eX”]×÷•îF‰¡;†.én)‰`ˆ™!¥»¥éénIii)ig®ë~îûò½Ÿ¯ïqžöoïµ×ÿ®½öq2ÓëèqË‚``%Ô…ÈÈkê«ù@>>9ffy'°¹ U0w‹€bbü%°r€|Å…„ÅÂ8ÌyÜà bmã`“gÿ+H ëv‚XšCšæ.6`dKs{€ÌvñàÈÚÛtÿÚá Ð;ƒÜÀ  ‚Xº,ÀÖ(ï_žT¡V0€È¿¦A®ð/¹œ‘¦lÛd M‚`P{l…ëCª‘^þØúïäJ®ööZæ¥ÿ»RÿgÝÜbïñ¿0¸« Ø    ÿúü/sš`ÄÕá¿WU]Ìí!–²Pk{0€(ÈÃ'ø¯yˆ³Ä Ò¸XÚ¬ÌíÁσ¡ ÿv‚¬ßß>x•µd4Œ8ÿ÷hÿ^Ô1‡@]ô=à`ß?Ñ3ðFÉ âxǬ2ˆ|þ=2ù/1E¨% Zø…„æNNæ8È&B’À €@A`wØ阗 sAn +ã°‚9áüu®ÂB^Ù¿¦þ&¯ê?$àUû‡D¼šÿ€Wû?$ÊàÕù‡YôþCÈÃç5ÿ ˆ"ÉŽl#sdÝþƒÌfùò!Óþ@ €üòx­þ@¤šõˆ4mó"¿ò"åíÿ@¤®Ã?ˆ<#^èˆÔ…ýH]øˆrú‘BΠ0€×åDÁõDê¾ûù‘™=ÿÆÿÛHrr0w/n °€›_ˆï/Ya€˜°˜Ïÿiéê䆺ü}[‘ýøo¶‚ [ v[âÌÏÀ,%‚mS¾„–ø*æ—¢³;S§·…|N“àÙ_– ™rªÓÓž‡ÛBʈ’ÕËyAVB«”_d½û½ôxCæˆûñÉØsÓõ0,÷MQ²ûº>DlÏÓmÂë9ÏWÜÚÐ+5v"y”‡‘h%³3wg¾v~#«ó¸© Æ­d“ìf$°áÎJÜÐÍ2,6_8@aœ~Nz?OÙµ4a·ˆŸ&ö>[u:íùol>vw«µ`†Ýü«,1•‡ªÏÛ„ô<ƒn3:isZø"ÅÅŽÝD4¶¶è¤"±ôÂò˜Y«ƒeúŸßñ˜| ŸúÔÿ‹÷sb)Z~»Ú³ŒƒµP I[æÝ*êÎäëˆøM,î”ÕǯŽ 1ƒZþ›)Á@—è©Ü!i™!:SkJÎÀ'9s÷|×ÇoŽŸœ× “â¨c&ÿÄÐO’ãm2hÛmŸÿ€¦¤™êÙ3!Ò…uŠKÌc0ê%˜¯ÞÅó|ƒÂ`¾ò$K/F¾Á”â`Çïc#YHЦ m‘îŒën—ÊÁNž¸™jâ“ Ô ­s_œ…s}†Sޝ¦š#š×¿¿…ZÕßZÑ ó)jâÏôõâxŠºö ]¼ƒœqÐIûuv85-¾CLí<bã @C‚eΗÍáôrèm¾*fIÐý¥OÝ Ò­ÍšÖpÀ¥LˆÉüVÆR´Èâé×!Ή’¢K˜4£(a{«Ð×2ëï’án¼ánIõOüO¸œ…ªè ÿTe¸MȤÙQØ ÆÛ"I‹–:ЭóòX²<Æ § ¶³]P~šŽXº~QnuÜ?Oé+& ûîˆÁ]üÅ&ü\*w*€”\¨'Ý´D|oT(3>á>»žiÝö™ÃYˆÃ·TJò î ÿxË­Ôð»ÿ—¼nä¡­eí§Ãµ–…L ¹ziŸ'S&äMÇH^hÚ|ÇÙOD)ÿFol´Ÿ¿„ ócMù|½YÊju&ϰˆÈdü‹(<ÜJø€4ÛK|ô½âìnDÜ¿£,ÎwCnK~ÓÀ¾Í(.¢ÁfÛæÔÇ¥ˆô¬ì*ˆ#$¹Nnÿ\ëÃ(¿—a`ÅÖEKw$:OÏãȧ:“%òÓGcñ̤ÃoÛQQcöŠÏ®ÆOÞžÿšÖåzœo{Æó³þ%“Œ£a ¢‹w4˜QZ8âamçÈqbð¨è1V ký&Ä©‹Þ£ÔÌY>··ràJÍ9…á ­ \·Ý&QÐ+˜I¬Û=ÍÖ—8fß1¨M©«NÃTk?%‹çvXsØÊÇhåVéÍGô®#ý}µ²¯û—nJ×I…XÆ vå4hCK’~óXÊÒjÝK£Öz–Üjó¶?o¿-:{T•8(´öÔ:åÀU{LJ~c¯ŸŽïgUVZ;¡¯Ÿ¾2 úºD9uº¿ ÒzÀÀÔÒéÍ ÃÃ>‹eŽa<=KFrÞæîË£m†[„Æløˆµ¬gèú³"O¾C¨´óV,n!Jk’[Üõà·Ð0D´ôj€(S;T<1ò\W(œ¸…4¸Ûâ¶#D—AšmÜݶ~kμò¤¸¹* ö°œVQêÂ#|ß, ¤hg(ÎS?íü8N¨LÀù½[´¬£WœÓ³Ô­TëÂSŽI¾Äî¦B„ëḟ³÷[͆4k1óxã©TêÈk½}fݹè03ŠsÙž¼º%þuFÒÖÍ-W9<ævŸ–Åcù@{Óå’5øLX­zÒ­›_KG™a¼,än^nPêáfÉÞ$ûŒ?£a‚[{0ß:¬YZÆ&"ŒPÉ8o4Ô&®òŠsÑñ)¢Å—=–La‘šçÝ4ˆòQIè¤hq ƒÏI¹˜v/‘øÆªÂŒSŽø]¬9iûš[¸cåQy1nÓR5šéz“½Æ±¥‚¤xz¤Dq/ëÊ׉x²mü?”¾"pñßrÅ%£ a Tò+9ÁÉêgTùÝ­TÂ<%-p9üpcšzw°ø¥)prÚ=$5ðîyE€5·ÌÚcܪ©,»_*¤× êƒj‹Œ’VJ¯‚zµ„Æ>òWãÉ)çÒdˆçwm#±ÕÀNr‹†ëÀüÞo/«à>/­e˜{/¥ôüË~/Í*\‘\Ý&qžQ•´§Z4ÌE$38n’ ª­³0.Ð5ÆÓ‚ù’^kÌ5Ù»Œ/TÉJÞ2Ø^³b0÷«¦ª%±†úAÖŸR PBMÊ=LR_7œèÉÞЯ_–ŠXíYŸÖèO¿Š8^䨍ÑÚuŒ”¬¥ Oµb¹ ã2-]LbTXÕ_»Þ¸fÁâÉTþ¥ï­ÜFeÞI·*#Õ«¾8œ4%P¬Ò¦ ±b/_–N¥Òá™ ì­¢>0ïz XÔN¨Ô_Úßå¡>[Ũ¶½¡TÚjðTP}ÄÔß ,:\ñþ§ÚwÚƒÔ²‘À:³ ì⨩äaßÃ9ÇQSå¤ð™åwƒàfb½÷êâwPªäÛ!W©Uùï¬Àd,]3êá&gÃ#!ÁÄñ¯À±¯Ê›ôÁü§BE•ÉdŸ×½è[BTÅ"ޤd•?PÙ~Ñøè¥jœ:Å»ÇßcYwÄŽµ€ÖªïòãÓ Mž€m†Vë4Hu¤®W•||õX5¦eS7 Ç8ÝP±ÝäQdµE79®6´«×Ë0=„ŸK½in e°J<þ«móá‡õ9µñoÇ ØÐͽ!á+G7ò63¹v…P "²ÔCõ 7`¿1G ·Iüš`mÁ(Ì1‰þ„^¹7.Qu׿§ßÝm=}#þ’Ó¢¦K¼uäx’Òµeµ{¿¢\ñ—L˜/ÿ´ÝoCÿˆ‘€H—KaÙjý|>á’( Ã{"'î:’hu/Ñr5æ¬#YVß/„sVÏT>ñ›Eln]aGÔQùb‡&7/IH×+v¬½˜¼½ÓíÌÑí½ñ +pé*³nË¥«¡k¥,ˆ¬ Ñê%×57™î½à{,KE.ÑçŽè’WÍ7¿Npè/_÷Ù‘Å`(ÝÙª™u!ãÛuˆ‡¤s[$bb‡ÓR„+YÙx9³>…¤J]`ÉûHÎúËFWøÎ¤½ý´B=^¿þ~v‚7cÀm‹¡3ÿ^Å%U*B`V÷4½Ì*ó%#ª¹#®ßþb,0«^vRßpb¥Ä*=‘m ¾ô²r˜sØ ñ™Š„Æ äX›ŠF¯—òSL½bˆ'˜ÔàÓèù´ÉBôà ½&wüµ°bG½WôÊ0·©ã© F¶×-£ï°º8ò ð¼ìCèL÷ü?Ðu>b4/§îé²ÊâÐ:aQ»˜$ÿ˜B‚7ä3‚]q.Ü·$^€èïô)ðgc<-=™…l1á†+•“íÚ‰MÎÜÏ ø¡S½Ð4ÜY54—ºPhδ÷Ÿ£ÄÈÞû -ñ*$šÃ4WX~œ!|{ÁÂ0#j](œÈ ­ùPB$Hpk|ÖÇ%=a6_ÑXêôüƒ{¡|_ÖXýÙ‚¾¡îÙ ÁΞ]a–{ ʯ!>¸®þ‘)9»Òh£‘½‚ý^»Q o9ÔýØk:6TÀF£'2oYP4š¨ÍôÕâáe¡îSÏ•Ëáöu© FŸ¦Ö]j0“GMdã®6Û°¯× ŽóõiB…¶4`¾­;BŽTÔå(ï«¥\¤Yq¼Ev¼ÝÒÊ3–ZÍ®ÓìÁ‡¦õš2­ôµ‡T‘-MqQõÇœ”ÇPç½tþâÎMÊ_Ž5;~r©,É'²/Xµqâ’¼9™{¯ðupÁž_ëçRŸ¸³3yŸ¯ÏqCF#?”û«ckœ}ñYºöGR/ ãM}e¿ jþݳúb¥âܳP{Þ+µ°3Äz‡´D‡ƒ‚”±¨ç\l[¸K4É=2$óò+PXe»¿LÑã»îŒ0 Èw™‡ûu\ èmkh¥Ÿj]ïFþq óz츼&›œ/~š¢z¾*]õ¾Éßàå,Û=¸œªyK¯Ê­¿œßõŒ¯š}QßÓ›(™çÑîۙ﨔Á¼oâ®Ý{ªüεæÙ n‚ðG <’ØÕ‰à§WIzo÷m¨oà½îÁØWâ³Kaß½RÊã=³®ï` ¨ºjö¢Œ»&¿ ÍŠ.½T"ááÞÇÿ¥w ÷¥"S£îTùJçø¦Ã`EÔ)†â>Ä=r÷èwXh+2sM'g–+ó|h¿I„àÖ”Z^עΫ¾¶ñÃ\ÔQižØ¡^#?æâw½ÜѤÊŒé î‰ Ù‘s¸$ŸÝîŠzÉð)ƒÉ‚ŸJî…¶Y“ýN n@¶¾€5?Zåw•DtrÏèõèK5÷¬=‚ƒ[-ðçøè»Ÿ·ØMÙkI…(lÌ—w‡dÛª|aW?ÐoyøÎ¿#ž™Oh°¢ürÛÔžÕ`:ÌÓpñ6ñåü˜±} ø\¸^ʳCMþ£©—:ÎwB=Ts(¦÷7Mñ%µ‹WìfŠw¥Õzïö8)§ÇÏ3¡”ãô2ÝÄC:àYy=rIr0RÓ‚$š žtý•MÆÊå;wgÌ"<8úÝ;áãÆœ”‡gŸ`ɵÇh*zŸRû~7ÍÃIŠwúêi–ÉF-áj¥t~S¬”eùMÕÉ…al,ET¼C8å°ã–FëöR¾ê1ÊB½Åoé=Li©Þ•y„Ýä‚ãG¸lç(Í:Þîܦ¯]oaûñGj!X<±†MVÏúŽ$稢«w·›·å˜\äç`Gœ˜Ç¢}¾RWo‰Ñ¢—¨(¾s @q}1‹¥‰Û%I¥ÿÓŠëtwD`7#·:üİ®¹œÂ¥þ\1q’(ÀŸç6vr¥á±—ùQ;ž|·m˜&Ù²-áh\áÑß”¸Àx“1yx«7Þ;I®à®lB¼æÐµUÁYgGë}§”rž,»…UDdTsX­Í<Ä€‘•iðIŒ-3·Æ]ÓÉS×WtQiñ'lØ5£ô…I·\Цå0¿ |€Gß­Ü¢X w&©}I¡¨²'Iz±J^çþvþ+4¦ˆ¹ì"w ½*[ÿU½~£9°÷A@:Ó‘{ïRjÌÏv–åtåËÑOÆ>Ïl}Õºße£§bfÃL¤)©ä`´é¬2ö鯍•†¢éð.]Ò¶¶t,4ìOÀ¹§FÂû•ˆõãÕƒ×[®à§ÙߎëJý ÆòHpD$µŒøÔÄÌGï29&_‰$\»q=Å­z†fJ,%Ýf:ÀV“ ÍÆR²¨Û” üö=m!g}Ë¥µù s戠Řƒe\b™]#î 8½jóª×å‚LnÐ^hþZx‚úÙ¢%F©¹Â9›'Ð`jülœÝè6>ìÜœü÷šŒ›´ÐˆLbs^³{ƒñ³åBÃç¥TwþžŠ9èúÂVAùÞ.W3jÚ:‘Oøví77#'‘­ª¶-©j“ úÍïRÕÙ=¿±™ŽÕò¿†Î–LbnÕæË0ÊADÛñŒä#2-åvE:-"ǃK½%°Æó·cÒ”9åÖ±"Ê‹"^ œ’,/;½s‡u]L6‹L" FÔyÉŠ;+ž—,~@it6K-÷ |+¶7°ÜUÅŽúµgM°¼ÝgãMåËÝ‚tÁÒ_ªmÓ=§Ê´¸5< JuÿH d]Lœó#ˆ²;{{ìF±ÿh õ.0cU0Æ/úñ?ƒªi½¯µX¨'³9-«>qÏ8í_ÁÊçpöÅêéÖŇᙠŒ0ÎXž„¾ÊÞ.ÂËúh1^Â>‘Î>gM~Œÿ!®´§FAº"$uÚÿ]/C‚êûn°FÞ¨‹§(8•Ôä÷ªú~­Ã’1ª¯ŒóuHØ‘–¬³-‘!Iâ ¾{åFá7ª±.¬)Ô,5p´²@Ưþã:zê%0·]À9ÇÏ;^wêxŽÓø"²1ËZ[õùJ1îKæt·‰Ükã-–™ä ú±y-‰ˆˆªh”¶ºl8L~þzÜ%elÉîkñØðÛÉwh‘·ÄV ¿ÞÓî)¢µ[§¼˜òÚ‹” ëTÙ­×ȺëŒ;?勱ƒq0йÄi²›¥â?˜d•ÜëêT¤õb¢3ˆK>ÉÞmæ>ŽÏ>{tØZGôÒèÈ‹8–æ§-ô»~ÆóN§Vçk`úøhä^E÷z±1 Uªk¹‚Y£ü ‹ñLÎÅ>BÍ֌ЭCì䨫õ§TðÖå1Û¥¥s<‹·&ØAs pßXO資Å/Z û©è&)ß·V¾UÒÇD³ÙöŠò¾iv¾¶År1ÅígʯÄQÄH£%³ Tºø|ÛÎÑÖ €=6V„˶VÃã´YíŽEϨ°†9Ë•¬íõŽ8=ßsB©Ë›K´§–}—¯D%hÀ´¶¨ßw¦ƒç>ë$g¨+ùX{Ñ U¯¡ñ™ô‘–5ðÚ¾B_jkJW}°KI†jáÂDÌÖÒ ÑÍWÜU„zž×÷3g¸»ö­˜kä,©W"¦]Þ< HÀ›öÿ2Ög¢6•°pšðÑÎÉÚÿ|$ ÿ¾_íwÕÎ(D‰îü† ž´Gß½E1%A¯{<õ"‹dD!uÎãÓ-ò÷Ëýqü[ endstream endobj 146 0 obj << /Type /FontDescriptor /FontName /GNADLZ+CMTI10 /Flags 4 /FontBBox [-163 -250 1146 969] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 68 /XHeight 431 /CharSet (/A/I/J/M/O/P/S/a/ampersand/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/w/z) /FontFile 145 0 R >> endobj 147 0 obj << /Length1 1975 /Length2 12406 /Length3 0 /Length 13494 /Filter /FlateDecode >> stream xÚ­·UT\ݶ5Š[°àNá´p·àîn…»{Ђ»C ¸»»[€àÜ n}{Ÿ³É>ÿëmUÕ‡õ>Ƙk®VTdJªL"f& I{W&Ö¬¼1y55VëQ$**1g±«•ƒ½¸±+ˆÀÊÃÃqt°qXYx9ØÀ_$*€˜ƒ£—³•…¥+€VŒîŸ .€ˆÈÙÊÔØ oìj ²×05¶¨:˜Z\½>Dlm*ÿd¸T@. gwÙ$VV€™•©+ÀdaeÄü&i{s׿ÍfnŽÿër9»€Ehÿ%“iæ`oë0™#1+8€Ù@`-ÿÈú¿Å%ÝlmŒíþ)ÿ¯Iý?~c;+[¯ÿ‰p°sts9äÌ@Îöÿ7Tôoqò 3+7»ÿë•v5¶µ2±·°Xþm²r‘´ò™)Y¹šZ\Ý@ÿ2ƒìÍþ¯ðäþ¥€YLGRFUŠá–ú/§’±•½«š—ãªþý/Ìú†Áãq¶òè²€çË þ÷—þÿ!“°7u0³²·°9ÆÎÎÆ^HàãF@€+ÀÊÞ ä y‚3°wp§À3ñ˜;8#ý³QN €YäÓ¿'€Yô q;xCÜfñ7Ä`–øâb0K¾!VóÇ7Ä`–~C`>Ù7æ“{C`>ù7æSxC`>Åÿ n0ŸÒb0«¼!0Ÿêâ0«½!0»ú3hýñ€kê¼!°ãÿ 0ƒ± ø(Y¹Ø¼…€ÓMÞ¸igcS«-ÈÜõÍÎþû¿†ÿ8À™þÁÅLlÁÕ89þ±ØÙ½©`eK4û ‚)AoÀ³ýç?~'7ðö–nÄü-¬ÍÜÊý¯ÿ¸ÜœÿJ‡X¼Uû-þ¹’@‡€…Z¾ÉØÒËÑdÿWØfõ+µþ ‚GmóOâM1'¸e[‹Ë_~ðÜìÞ ø¹b~£‚kÙ[Ù¿uĦ¶w³3ùçÆ²øKø²cvx ®éðW++¸QÇ77˜ÃÑØdÿ_›å`ýëï•,Áäl ²ÿ+”ó_6+‡·íq€ëhëöWc¬`‹ÓÛñ§8¹9¸‚þ‹“ç¬ÿÍÉÊ ÞÁ_+awýVNrÙYý÷ùþrÿkO@pðµó‰àN\l],ÿ* VõF OÀÕÒô×OÊÕÃá¯p ··¦Àœnà+ÉÙÅÔÁùïqƒwîþ öxƒl࢞A0«×_¼*ï7ÍàJÞ ç+ø¯eQQO&ø`p±³‚o¿ÿ 3us¯Ôõ_¯<ðÕþ¿ØÜ üV’¨?u>xœ«D+®¶¿JÑ£ë^ß“ÂÉ¥%™n«ZKÍN¦‚žêTò…#lÍ=1fm2Øß: ¡™aåÂ¡Ý ãá;·„Cˆ{S¸ˆ 6ÑìŦIk°t&|î5=q‹ûµH}D]a3•IFeOZeÄl«ýRÛír×Ô¦jkMÄìÓ¢ ýüý!9Zø)ÍSø2I˜c^‰¦rytèŠ`©P¶"‰kÜD¡ ÅSC°N~ Mqý{ïWbÙ‰`’ôÆPÜä©N« &sÀÿF/cùšDÂ¥x ªŽ¯L?Eüd»¨æ Fûu×QÂëûÉ,ùùǼþž+ÚÜcª Õ# N·?í80멨ŸÈ‘5rÈš)jRté!Âæ0wÎOz²«4¯ìO”%‰?ä¢Vz Z v¢¼/–aY²Ç. vFzäCŸÞ(êÉÈ8@,l—8¤y¶ãs9r, ‹Åízõ)Þ?Qx½Ï!Ñí,!ØBãà7t’0L™ÚÀ<¿ûÒ;gg~nWKÉ-AK>vt.xxTÌCcß½Dÿ©Å³Çv…YÆï±Àa¾ê³ã1§"äzÌècÈϲï+Fœ&çDYiDAw9m°•¾tG8iÙÙU:Òöihý×1ròllö´ý% ‹Ìò²7–IÏûY™9Áﺚ»S Oï¤ð;lä+ÑOs3¨Ø÷­,ŠÅ^<6Ú»7 I\ërŸxp¡ð(%†JQõñ]I ^"»Œ¨Æi$d»RFec3ƒ Ì“ÂTNe ¼6?¹+b|>Ï~Èq½¼òÖñP «CX­+ÈkbìO±K¨æ92©1:Á‘¹@DzLÒ.¶ ò©'—Ô3°ï/‘'Êp;±Ϙ}•¹0ú^=|Å•‘Ï۵$]ÚêVù{`ms±ËRŠ_€Œ# ¬…Xm<09€íC™ó&’û»áÕW¯ú®þ+Õ„øT=¹:Êjg:ãÀˆj áª"ÆvFªµ¬êö´Ó¹@TïOúøüÇ3Î2f³ûbd$¢KˆäâÂQnqJNü ;×>rÛöw ]˜¡Œ¶ó "‘ð妉¸Ë'ä*»å©´ø9gºXK|jôß»+¾8mäEÄCV´ŠgÝ0nŸ ¹«–PýÇð`ˆxt†1e6¶†)—;*ã¼þmâ†}9c´m°÷ñ¯‹‚£=îQ¿ó|e‹ìò0{4hˆSùØ”=µ‹ü˜E㓠̯sõ!yÑüÇrßî¿tñ/X´’ úÞ,è…Ö¯«qIBÊê%ÅŽ#Âg®³Éíô÷#O6^"Â6'}>ÖE¯œ±X­{âÕ’÷À°»\>ú¨7&Ÿx”ùëø¡†«ÌxJðP]·dÎà¾bÆýÏ©´Óœ¤Q”;б¥læOül¡´gX™w䌗•Óà°¶— Æá0ÇfTõ„éTåÅŸ6…vÌ2¡c®ˆ®Œï%£9LƒÝ‚LdP—”Ì.fJßVIâˆhמx ~œ %´(TµÖ,¦È$ÕSÞ/ì•aauöûÛü®¤.å%¬Žµ+[OœWr[Ð뤞®Æ´Ï#·YYSyúúƒ’«ëÁ¨?Bý+Gà¤ãq†úZzþAÜAþõÃEzŠÓ<®Ñ Àí¨Ç ±ÃCŒ@v–ép°+®! $;Gñ\P¤¡ÝO¤tÙŠÓoƒÐ=RqT}Ë>ò³Í$‘ýâÖb 8ŽBȉÉÀú!pCv €Cis9½ßS'7¯ÎrI*¹JF¾óùSì¬ÿ„m–0 +¿õW‹ª]Q4{)áÃýŠp–ï©ò'YÒ~Ò¬Âì—;¬.êo­["d#¹a÷]†66ÍòeÃĺÝCTF 6ø*8ÔŸÚ|*Y‚Έ?0sC=2f}Ç‘Ïa IÐ?ëb~‚ñÚü4o̯¾CÏ÷®ÓÂð&.ë\…ì+¦KüA‹¡óru öîuùÑýá5š –ãØzlâþqÓqóZÿhБ ŠxÚãŠFÏþo•nwDg£XÓ9¡»öe€ñë‚ûR[yc»Yõh íµ«Ø¸þîqH}Yà˜ Ãá¤?òtÿ¤tž^ïÛéÖ2„»'?ïT–#ñlEL£r{€VFœD.=t‰E'Œ8ß!é«í$nöÃ…³VïXsЈù9ø}Îâç?9ÒãUX’ íeŸ_ôaŠÖr07!òJp²7 Q­©~½sF2êZ1Ûz…m0¦dÁiõY«ÑÛqÌâç),/A;L>Žè7Õ¸±NÏhÍÌõÏ*ñ}QG6rs ~×lu2O¹¤<#-' œ$yêmÐZâoK¡³}øÓ5ËbØ?eêçN²1€SÎLBï¸bðŒ—G,²Y¯µrÔÞ’ˆ¾6Å==þÐuà#º–€ôƒïgIöl8ªãñÃ^½tH“s/{ nDðÙ+ƒŒ,®yöiíV:ÇÌ#¶;@šp°Ü9¹éÃ>'môfºMVºJ4û±ð¿bŸ{x¬° ë¡Y/98ûù¤®‰m«RË$!PÏûÓ¥jßÊ.Ÿö û êצæP‘ä&^SXÅ+F/*xlù†ùc‹˜ËlG¿kaÙ–*C¸¬{ ÿR¯_H@^Òl" ¼FØ(Z ÷*–§55çtC3®–—ã§È¯6_ªõp“[P-áE~Íúf4¦w؈oé^¬©C*iË{Ã[.‰ø¢Nù x~-¯P£g‘ÜÛ,·Æóš=Ɖ…~'ƒ¤ ˆñ¹(±n|®rtvAt¥ÇÆô“eªîlqÞé,çãóøX­‘´óyr<³WÝ>o_Ð.!³~ÇÍ/õÁ¦fŠš{›|°Ë´F>Öï%);¼Ø"3šÌïõŸKJsíÜ`òJs¿ˆCœƒº ?5ß^0Èr2Ý…ñ¯ÅÐØ©F§“örP?ËvÆñËçcŸ T´ôV6g_–ãPô:„DSÁ~Ù…üÔ‚ñ™»šK©à­­' ïŒUâ…;³3µk4‘êÜ‹x12¡š&“;æ&Ö†¤oÉá˜|ŽÂؤuÔ3{nÓ°=:2¶¬‡Q÷@7†Tkñæö”¹¦¯ú!Dþ/n»Ë’ /½¤„êÂ7¦øsH„»®º§Û¡¯ºµm@˜ö*R|·©,»¾”i–!’Õkg£Ó¸ j¨)´HMõßâ·œÐ*íwø·æÖ×EH½“#AGZ ½ê•„b‰§w3E †3ì¯&Ž mn±¨¬Ûùc?æµ45_cRca1ŸLjÌ'ýT’èí06!˜¦cKyÞL·Þò_Æóœ —L¿Ü¡L „ã-9--Ó›— :£ ‡ÍuL6ö(‹ÿ`ˆAZ×4Tg*`g,ˆáÜkmßñEت½_1ÔL] _/ù^U”'û+ýÄá ªuÝM`Jľ!°·BI=ÕÓIªÄhÅioªZÃ뜫Áiù¦XÐ?¶sø,0à¶S¶XÑÏe½â <ØŠò^UíÇA¼Í¾äû>®ð“ì8åá!)RZÑÉ&ê¨ÐjÂN{ùV"ü% PN­~:-~tK“"íMvµÉoŸQÛl ·¹µç ¼"E“ªÚ”âøÂ}ÍOOŒ3’5ȃ>ÿ4Õd”Ù7Ë÷.pæøœ"Åzî|l±ZŽ="|Ø`*½¥%AþB Y@<܃ٷíëD!=á=£šW"¬]l¼F´¶;r‹¨iê~õl¹‰ÄÇ÷ìÁï`F&£Ï‘RkاçwãDÙ)ߨL™FÉEpá²kÆI3!sD¹:2 膴÷Bý¹NzÅ}»·¹F‚ÎÑSÒw:?XÜ»w±Š4©°'‡hîþ¦B,€/° ç(Ò1‰-Ô‚ö1V¥Òåå×-ö{OßNú8Æ×4 OSëÌK>´ Î=(÷Ðú_~:ˆê?\š7é×õZ륪5qÔ9?Ù1N‹`ñ¤P?|ŒÝ\ðƒïLë è$¡âƒle@Cíò&è®_&sŠoÍRįDÆ öTðÎRày>™ü,˜Ëq/®\Oâ½·cÚ\Yá.Á°T#63N´â±Ê#½ý4iËÁ]_ ¸’¨]§•áÔñ»6ñ‹ŠV/ëy çÀêv¹lè÷lªÌ×O HÉü™„?!¡*¦õ+S æù•†ù‰žºúajX÷fȨ{¯ÊñÐD¦Y“õ¬¬d ¡ŒT½ª>ìùvñn93—•¨´%áÖ–6¯R);¡UK4QÎ%¨ oâ[…³µ} ®óðÈéÅÝÎÞƒjÁä×ѳ9ÅdMÊ_ïåMKYo7ÊDcfº.Å‚’ò~ý±ëïP³‚|ÎQLñ§øŠoaŠa3k†œEÑã ‘«_1ÐÕFÂWàWvŽF0îñÚeŠï5,øç4-Ÿƒ |Z^¶Eü`ÓgUò¯¦è5 ¸¢ºHÞ8ï=ˆà÷(0Ÿ>/b›~æ?èq¿S#¥ÄïªíÝuò,Zåû–å\9éΊFûÐíîô§T¥5ú Ê€2%¯û-”¾°ÖF3¡Eã‘‘“ç»Þh*fYréì@\£sêt•ÿÍDÄg™ƒoZ³,ù2»™Á15Ó)@*)ª/ £Pk L,;ÙÏ8¶ó©4ŠÑ¡‹æ ›÷b\f±7ïuý0謼Vÿ|HΙîPßNøª‚SØäúÞ£¹g#ë°Ö «9'"@[°8º*RûØdoÅÓæ—¦dù3>w¾†f;'¾*ŸË‘—ØJÖ’˜ ÃÄ^Íu|ë)ãày-€3Î$Þ6KýEˆÑŠ#hsà±°•ÖYÐløƒÐlÏtŠÏ"_¹ ‚Ó !òÔôÿp^8c[­H&Þ5|ìÀm¤£€¤ÐÈpÔøÒæO ;bùóˆý'ò¤³gQd‰Ž‚Z§š‰ï§ÔxóÇY'ÜM$3c5YÞsnbæHÍ„óóÕ¾Ÿ_ ‰²É!Ô¢ãO‡h1½ÎQÙ´vÝÇ.3±a‘LžNB°U@f¬i¤sœ?Z—›ex“É=n­÷¬ÀÉ}›ˆäqU,Íj¶¯;¾¹i®ñbÞ\ ~¯ù('‘¤ƒ°*$ä×÷š yÍV+=¤PG=m=‡¤Âx®týX8¿¸‚×ó•yAY¬ùJ•hQ-Õ¬%&ï)ZÍ®­Sájñ‚ÓIzZÓª/°ßÀð¶cA˜LþJu.¸I-/GrØxöJ•ì³ASÜlèPV&ŠVâ%Ñ”CŠPók¹uJ„³ŒH>ÀÉ´:˜ƒñj™Ç  jéÕúîW”¬7ºz.ðœd¦^+F!óhŒbÈ0Ç™2ƒLXaySÏS§Q˜ [ãÁ‘‡( sª*¸]ÜbîôÖ<\ö”^—^Át$ã –´ÓÔþkš–UÜ<1¼Lsìv Zd¤ ­%Ó¦Ý8BG¹;ê¶Ž]vøK{r]¸Þý¬óª+âÑ,­3 ô†Mȵ› n„8½`ÏÓdÛü_&Õ“çj—Ðø_5÷žG*»’1fF&£–Ê$¡¡ßÈBcû(î0ÃTD60æ—‘:²~\N\zMIr™J£Ã­I}&‚çÜÁoJž'']øöë5–º‡ÝÒööÀ¦ .ÐãQŸ ~ Ò\C†¯QòÝÈÔoæ¡5ÙÇWS´Eüg•:ÄÑö1¤M¦;ë´¨ó42ÚÓ,¾…'uÌ8}Ò³ˆU=ø„}á3)–Ò3Ø!¸x•K`Ÿtú¾óÉwG†‰“³»Â‚lÊ@ß ¨ÊÌ’fy²h6)Ï•oæAî¶~2¢Ë€ùõ}qãïZqXÅÌ<ÑSÑõÑõÛð¿­ƒÅ_+«àžêØØFþåq b§KÁ¬y‡–r¡ØX1gÒ«Œ„lë;$HL"ƒòœ FXC>Ô‘]žÉñ¤=–¥u]õß[Ä[}`òAf;?З=O¹’ÎlØ;‹ò¼gÇ7à« ~ÙG#jÓªq-QŒD‘ªg #,q^#ÕÊ+…xÿ²\«vß#{Ö*t†L*\‘…ÝÚ‘ÆÀÒüºÖ£›.t¦­âÑÏßC6[vCˆ—±¼|7%4`ï^×Gá.4`ÌØ4 üÉIæÛäN/Hèaùø.Éfħ"ÔÔ%#ÄãA{V¯‰x;à@QZ]8‰ÙóŽ3hîü î÷(¶‰ž“ŽÒ¤`*œ«uvá¢è'½¤h–8Ȫ[eá±`Éš‡Øv‹PË<îB)üÁ3ÓO\3Ó‚~÷ýžÞ!þü-ñ? %b25‹zmÉ@ä½ÒµléûzàID×ñj•gºŠU¾ñ)ëÄZzŸãeÇ\3(iQrÄ); D¶ùû=µ+Z‡güçV/SLõ,¢Œüø»N·»îxlËînç͵µ‚Ã1y É#¬Ò´ž4:„¼j^9¬´Ñ½üã,-^¿PtáGèRz-š ;6ö îˆþÌ¥¿Š¾µJl<Ä:BhÁö~~AãŠiHºz(Ĩœ½’?gþøÖ}HUš¦ðT2hÙ¾Ç?¯Oæ.?aXcRÏ‹V·6ÿ·ŸÅæù¥½mÓöÒ@â8M—¹É•äv ð¹ÇB —8^!OŠ9¬éË)h_pùõ$+Xm°KL„Ò´TIŒº3ÓmÂ7n\,§¼¯…ÒLè^z‹-ø«Ó’Ó±;oia—2·®J_(aÌŒGèe×ìK&ºnÎ+AŒ:Þ¸’÷/kßò>›JÔä“ñªòø)è õ mÀ,é¨ðƒüæ8õ¹åjïÜÕøÀíÿdú¤ƒÑΆÞQå]èÌ;fV®‚2»¤ƒpo— t¹¦1ìí‹;U ¶B‘*hÐŒŒ¡¶^†9k­æ¢£õUPáÄÄ7 ÷}Q­tµ™Ÿq#oÃÙÌк´)êØGáTaÅ}Šx„¾=)UÒ>¼w@çY•~úöÎÍFÙÛ Qcæ…4‚0p¢GÞóŽVzWK%l;[îË^g ºLÓ™Yæ£ÄµÿEg™· #ÆÞ¶±©ò˜0-WŠ(Zr”ú”“m‡Yýœ[¤ÿ;_«Öh”ÑAO3Ô)ööÝ>Ñ‚FMíBÕœ;ó!IVlí;ኑ©K½:¢Œ3.:×4‘ëüEáS<åRÁb\‚µöŽ6ë„H.þÍÔx]b#aP&¤ztY´wtY\ŸòŽ-{v–C6hÆ› }æÃT—Ÿ7´ÔJ*òŽ e‘E'-°@úÔÀëÔžª>rŸömÖ‡; îjÅâþÖ;¡RÒÇÅïV:3®yˆhsñãÎ^BEÔ>…šåÀÐ<–pîÙ4B…h\—Ûõ"C³‰šMÛúa”,áh­ûGϵŪŒrOÒjÍvÐjØO¦åŠï9 ìÛZQ¶ÕÝñwCÐÞlQ8§hm°Iòź‘š…<ðþìöæ‰í#fþAkó¾‹ï $—…¸ÆÍQÈY+éUÄÒa£Æ•?Æ{tbU‹n¼+UÈžj¼íS"l÷A§Â ?É0wß®}ç~¦’™É%œk÷›èØÄÄ…9.ù¨"¾½ð GF€vy?U­Èá$gròzAnû¿&œÌ™÷'šÁËŽ¦8‘AŽë~œ·¸4OéÄ3¯jŠjd>¡'©3"„ȉ^°]©—üÇâ›ÿ £ óà5Es°]ë÷×§Á¸ éöë3”ÜqFú1/™†ñ_kË““ájK)ô$Äø F¿–j7êU ‰êŒ“>Û44ã°Dþ¹k¢“Ð ' !Î ‡-C5žH?™V”+G°ßÈV-½FL)b0ÛÔ´¼ŒÏ±ú´žq'’£q ·ƒÓ€6‚nyµÕÈ÷C¡=È7=Ýr3écz¯™Ö§ÝMúš9æ˜?|@Òè9íе ?IT¼ä>üÙR*~¼ ÆP|}¡½Ä}BWÚY–E?÷óªßÔ0È#5ƒÑ]NÖ͆Àt}׋PAÔ6³ s{z’ö´ùØã#ëGo\™ßB/­^6 ß$ÃÒÝ›úððnïeý×qÄ­£…Òuo{Ì©úncû˜røš¼ª\ ·&YÑ´Y úHÞQɦº9«Êg.Bí@N' wßã/0‚È&è¾ï½$— ¿|j…Œ“ 3†AëuÊÜsÄA@-MtR~Ô\”UÑfШjŠ3Û£=X*ÑtàÛ»i÷=íÙ}üýôå[«ÆIð`ŒÉ¢5Ì$ùûÜÅãDi¾¤ÏÄ̽ ÃEóË‘«’À$bï±hni«SnŠÞê”+ÖˆQ)Nú?1–š³Ä?¶í“qj-‡‡«µµŒªdˆ\À"L9¹C{ƒPˆýÇVœàÇ¡`Èl#ŸŸ ðIY}){ªÝö>#ä[¥ŸçúÊ Á¨IÓ=º.U Ã×{V´î· \Yb6) ê\¬°RÁÅÇ»Bf*_UÅÏ1ëÔx/ÊÉÍóÌB^Æ4 ƒ°)oG£±ˆŠˆî‹pI½?)¹S±e«EÇ_b"ˆK•aõ£©Oãú&²5¨×["¯u¶|lPêj¯AD×NüÁ {a* ˜ÐÜÇ O biàž;”r®B|“@tvÛðæ£l'cÂûe èO²;ûB€&Hã ùì épL;nsªþ´¦ÒcwSqTX.ân¨aPšÔˆ67+ ô7ýw­MäAÌhe&oˆ¤1†Ì{ôV]tIõ:â»>Ô1§í±÷“¿4‰F¡‚¼!c+U1’G7ßîâ¬ùƒŠ•öŸ9ãòÐdȪ§¸N!\èˆÚkšì£-Î0Lïí·AþÞ¢ß×9)x0YÄâX¯x/E¨ª Ýee—Êówzô%T–éqíßYéu¤yJ­CMz+ØÒ~ä{³;à¿f]W[=¬—¼•¸¼¬sT¬OÇÅPz›1"/z>Ü|js‡Ù âŸÌÁì"‰f&tã¹€i{V'ïéì¿÷ÝÄÑÝ›é"€ùÈ]6¡*ÆòS’;~1î±Híì´Ñ_pµÑ~[Ä8¤ñ×YƒÛlÚñš>‡>çÝ6{C¾S•¢‡>ÜoźŽ9×^|Ÿ0JÆJày½=Uf@Žh¡£µ¦¬šÁL(:ëJæ/?¯š¯ð FÑ—À¦‚)蕔ͮ÷…U©uÞC3C¡Ó'bª:Ü$š5ÞçAÄ‘•áå.P¨^Vk ‚V¶ îFÉcVöåJDÎ$ãgg¸Á ‘))`Á¼ÊZÚn0cx”ÖJy¾Øö›öÁ\ÞO‚âM³FÁœˆ0qÄQ– {”íG¶OÉh OˈÓ25P`ØG¸-ýe»‘ˆýÖ+÷![ßIÞ•KX–:¡³=‚*/;€.¯ô³æÉ˜õlz¢a8Äm¦U%~7LÈ km6U!¡’šõ/-nÛWÂÈOu+7SƒøEQRƒâ*Y-­—G@øÌITe“Q?úyÊ)î«Kž Ï@ŸOĬט$S³gV[žg—†q ÷µΞ-|r¹Ò¨ÆúšSO'•jÇ€‚Ÿ@°•첑3Žc˜4 i@8颣’X/E()A£à£‹5;nñaG(‹CÆ SZêRT"Hü’Ï™OŽÍÖ’!›¿¥«÷—PÑ3uZÝBo°› ×c÷ƵÉ^>»žRôtˆ²¸Ókƒ ƒdôAOÒC#šŽ2„~ç7´¸Ål÷…~xpŸb¶'æWPH>“ûóò|ýšBD¤ÛCÊhÆOÈg²¯¾î0Å{T*uy?é„7}SóÙbë¤.0”wúÑ•dR<ê)?Ýh\b8ÜÖÃĨtÙ\ëúŸÞQ ÒÚǪÛr5Áy‘»ÀÑbšÕ·¸§¥bÜûÄo-°¸‡þ,h.¨2C5$ÁÌS˜*0Źèkt¨µ¡#^‘ö–`ØC¯,mÆ?n=žæZ¯Þ¿4 #‰k™ð¡YQ¹ˆÚm˜ÖñïšY¾TM´âýåÅád2[ê–Ç©¾LÁÅMMµEíDÈ{übztð[Ú¼Šöõ•—âý–BäÇݯŒ‰ËíµWßêQDB|´ÏhìR–º¥þ4Ùêê? ý¾D/=Å©kÈ)|©œò³™Lƒs;"¾î‚Šàëþ…¼B#í<¢miXr•6Úu}¢rñ’,ßäU'ÿÃgz%VÖeýNOÒ¶BDýÎm ¤Dp• ¢õÛ–\çÔ!”¶²A2V!;èº8?mÉ9Æ®Íá*Ëãø)ÕÆœYúÑÿ„Ë@{µê³­¼GöûúÍsšÅ¨Ï{|–Ù¯¯áÚ/Rˆ)îé\_éÚ¹ï¹ÙÚÝœº6Åñ CV¹'§ú0ÚÆ9¤œÑ‰¿< æSÁ3ç…k!"ÂQ<$z¥ÞVi!•V²ÀüzÖ÷a„DäÑšAñãD]ö2zÞóÎvAX´bÛ1¡kׯOÎÚ5§#1ü¹~€±ý?Õ~ËåF뎨ÆúL3X>?ßÅ}{'ݽFtݳUéVIòÔ@“´á²>è’¨ì¡14O¸Õ…†6.ú©Rªó ®T\ý»þÌ!™(Ö}¼Q^EÛ&hó Ç铈¨!?vååÔ…ç©M;‘—«·ÐÕ·Ì¡<·9Û˜ÛTò•è÷ ¢ü´@P·Ê—4@ÑðÚo(Õ¥Xû3BÓ»s­Poo™Àl½ÐÍÙ’YóÅÆï O£/Ì·A0ÉKå'éEñÌ'ÁŽí‰î)i0__"·´¶r:“[^aÓæl˜ˆŒø‚éóšŸßnÆòÚ¨âîhs?uå2>vˆZÏûDhð%НUq÷òŒwéàMˆÚ—Õò PÑ2¿;CN.Ùmi½õ ÁÙêlJ´"yO±bÒ)ŠÛ¨/M7Ÿ4xÐsÕ?×ýþRg"¬t›yƒ’{¯u]!ß8~Bs*k!äÑá(ôóètKâOïÇ–ÒÚf!ƒò`|Š„Á¡àöƒ”ÍÎ×ÌùA=ß‘.¡#<_ ÞÒY›™ÂШ`sš.„VÄÅÜå-’‚…p(s&rJÓÇÚ“\1ø2 ÷›5» ò‚uB鮚z’F„–±&è¬m¨v@÷<¬Z)ÜZng‡@8uØÑ#T§Ò‹ýi¤$<¼“c¶íô©Öw•þÚunG¤;³mX:r«E7Tsƒ†Þ“ñAšª­v;ÆÌ›Ú'ò2Z‹ ’N ¨œ$bnå¨Ýý !ŽóPÈ¡®Ç`õ("ã¦,û›E*;è²­±ìÛ|wаlŸ@Öëç’:ó!×]J«äù‚Õu¤TÚÞâ>.PNºN0T úX÷@¸?jn²‰ÈмÓäuÕûöhÒ'ay‚øyã8Ñ.qÃ"×ÃÎÐ7ØQ6ð‹³åT7bËz¸bqxânú>‰^•duqöïwæ¼›5K÷4ÆÑ„äñ9’Ü[’÷†÷X…¨ž õ0v¼^ÊÏx/wÚÜ{}Òö,­2¯wÛ3Lçu›{ Å^ÅáUWGè‰2Ú$QsÍíOŒÀLx­wêsCî°iÃDvÐñg*ó;½Û&!*~õèè9ã…KŸEF–ZuGµ¿÷/F ÿÝZƒC×f@¨?rmåóŒþGa%ŸG"Îη ½Ã;íWÛ÷6¦v„|öÄ)‡„BŠªâ’eÙûŒOOFq#ïßûáÏó¿ü‚P<øç6|$ Ó/U‰mz*òœ\|wxàÃóÛu…›}ž½HVϼ8‘¾µ”bK5Žñ6EÙõA{Œ/7Fª¶X¸Ç‡(ÄÈÞìs6+d¯Cr{QÝ ¯¡;vðáí6‘¬ø9’=Ú¡ïûÌ7HäŸa9¾—¼¿,+™ç¬ÈËB¾„¤åç8>H×ßn5qàG‹ë:'mØu×7ݶ~¹ìBëæâÁI4ãŸà¸”ŽÿèΚfÿ#.PþµYá5œ¨$Mk,A ÓgKPrHª¦Ö¸g'‹ÁTã¦Ú [Ó™a áÚ @¼ü¸~£5ä¢$¯¯apêXþ0¼4ïáyAMoÙ¨"÷˜Ld~aGÚÞô:¸!ð.ØÏÏæ¦Äލûá7Øòé—çM‡—×##ô¡±,'UÑ-IG ÝËàÑXØMJê5<æÈ‘¯I(Ú|Jû¡µ¯îñ‡–‚Ö¶$AøÍ —¢wßO_ºF™Œ$¾tÐPb#gޝB»Ï夑¥öùÌißíÚ0B„’7kÑE;ÍÆ«7&õ9—ßÀ/Õ»!#“hZ¯ÆôáöSõS%’¡1ð;âI*Df«Í¹/Θ1¡àtPäìÛæ`º× ,;Þv2SÎ0¢>ˆŽØFõX·1M-æR¢³d7Va¡Ôƒ“z˜ë–¼aÞ ›"Çxª%7Ò X"Û¾hBLê ¨éÀT3øÝÕȧAúâÆñÝÚG5ïÜWèô\Üc4 yÕÏ?}Në&Úˆé7,¡ÃTàCµí’4êWâ¹úæjTjghDF‹ ­2he|ÇnJßõ}¤¬k‹ˆˆC[”}î$ìÉþl­ƒäþ\ÿž±yS<ÈŠMSqЗN¶~«-ÆóvîŠUŒ~ò3ÿ†íÜç1üW} ¬#m i NT–xŠuÌŸ…Ñïtòºá³øa%М/Iu?c¿µ¾hnEîÁqþŽhøýÐð*À…FMµ­š_…LÞÍ„M½L´ëúkÄkrp#Š úS1JËèÕŠðsƒÏTzk ¡Å’×ò1®4q1§×Ìfï ôõH[ã2»¿~íÑþv¢p¥úó¯Ô]_¦ÆèÝÈjŽø&NrmIDð¿mv‘»ää½ÃÒÜÃì£3>/aÊÃH^³±1Ρÿ/(¬e endstream endobj 148 0 obj << /Type /FontDescriptor /FontName /CZFJSH+CMTT10 /Flags 4 /FontBBox [-4 -235 731 800] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/I/K/L/M/N/O/P/R/S/T/U/X/Z/a/asterisk/b/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 147 0 R >> endobj 40 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DKXCDD+CMBX10 /FontDescriptor 120 0 R /FirstChar 45 /LastChar 119 /Widths 105 0 R >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ITIAVQ+CMBX12 /FontDescriptor 122 0 R /FirstChar 65 /LastChar 121 /Widths 116 0 R >> endobj 14 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JZTUMJ+CMEX10 /FontDescriptor 124 0 R /FirstChar 2 /LastChar 88 /Widths 112 0 R >> endobj 12 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GZDMAI+CMMI10 /FontDescriptor 126 0 R /FirstChar 58 /LastChar 121 /Widths 114 0 R >> endobj 18 0 obj << /Type /Font /Subtype /Type1 /BaseFont /HKCMEP+CMMI5 /FontDescriptor 128 0 R /FirstChar 70 /LastChar 84 /Widths 108 0 R >> endobj 16 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BJPBZF+CMMI7 /FontDescriptor 130 0 R /FirstChar 65 /LastChar 121 /Widths 110 0 R >> endobj 7 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GKGGJL+CMR10 /FontDescriptor 132 0 R /FirstChar 11 /LastChar 123 /Widths 115 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JTICBO+CMR12 /FontDescriptor 134 0 R /FirstChar 44 /LastChar 115 /Widths 117 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JIDHCJ+CMR17 /FontDescriptor 136 0 R /FirstChar 39 /LastChar 117 /Widths 118 0 R >> endobj 19 0 obj << /Type /Font /Subtype /Type1 /BaseFont /THGOAZ+CMR5 /FontDescriptor 138 0 R /FirstChar 50 /LastChar 50 /Widths 107 0 R >> endobj 15 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JFMXPF+CMR7 /FontDescriptor 140 0 R /FirstChar 40 /LastChar 61 /Widths 111 0 R >> endobj 13 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PVHZNP+CMSY10 /FontDescriptor 142 0 R /FirstChar 0 /LastChar 107 /Widths 113 0 R >> endobj 17 0 obj << /Type /Font /Subtype /Type1 /BaseFont /HNOWAJ+CMSY7 /FontDescriptor 144 0 R /FirstChar 0 /LastChar 107 /Widths 109 0 R >> endobj 102 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GNADLZ+CMTI10 /FontDescriptor 146 0 R /FirstChar 38 /LastChar 122 /Widths 104 0 R >> endobj 23 0 obj << /Type /Font /Subtype /Type1 /BaseFont /CZFJSH+CMTT10 /FontDescriptor 148 0 R /FirstChar 35 /LastChar 122 /Widths 106 0 R >> endobj 8 0 obj << /Type /Pages /Count 6 /Parent 149 0 R /Kids [2 0 R 10 0 R 21 0 R 25 0 R 28 0 R 31 0 R] >> endobj 36 0 obj << /Type /Pages /Count 6 /Parent 149 0 R /Kids [34 0 R 38 0 R 42 0 R 45 0 R 51 0 R 70 0 R] >> endobj 83 0 obj << /Type /Pages /Count 6 /Parent 149 0 R /Kids [81 0 R 85 0 R 88 0 R 91 0 R 94 0 R 97 0 R] >> endobj 103 0 obj << /Type /Pages /Count 1 /Parent 149 0 R /Kids [100 0 R] >> endobj 149 0 obj << /Type /Pages /Count 19 /Kids [8 0 R 36 0 R 83 0 R 103 0 R] >> endobj 150 0 obj << /Type /Catalog /Pages 149 0 R >> endobj 151 0 obj << /Producer (pdfTeX-1.40.3) /Creator (TeX) /CreationDate (D:20091229215627-07'00') /ModDate (D:20091229215627-07'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6) >> endobj xref 0 152 0000000000 65535 f 0000002193 00000 n 0000002089 00000 n 0000000015 00000 n 0000237146 00000 n 0000237005 00000 n 0000236155 00000 n 0000236864 00000 n 0000238137 00000 n 0000005105 00000 n 0000004999 00000 n 0000002293 00000 n 0000236438 00000 n 0000237567 00000 n 0000236297 00000 n 0000237427 00000 n 0000236722 00000 n 0000237709 00000 n 0000236581 00000 n 0000237287 00000 n 0000007605 00000 n 0000007498 00000 n 0000005275 00000 n 0000237994 00000 n 0000009652 00000 n 0000009545 00000 n 0000007743 00000 n 0000012092 00000 n 0000011985 00000 n 0000009732 00000 n 0000013598 00000 n 0000013491 00000 n 0000012195 00000 n 0000014831 00000 n 0000014723 00000 n 0000013678 00000 n 0000238245 00000 n 0000016568 00000 n 0000016460 00000 n 0000014911 00000 n 0000236012 00000 n 0000018870 00000 n 0000018762 00000 n 0000016683 00000 n 0000020851 00000 n 0000020743 00000 n 0000019020 00000 n 0000022130 00000 n 0000059155 00000 n 0000096189 00000 n 0000095666 00000 n 0000022022 00000 n 0000020965 00000 n 0000023618 00000 n 0000023673 00000 n 0000023752 00000 n 0000024811 00000 n 0000024832 00000 n 0000025057 00000 n 0000025120 00000 n 0000059133 00000 n 0000060130 00000 n 0000060185 00000 n 0000060264 00000 n 0000061323 00000 n 0000061343 00000 n 0000061568 00000 n 0000061631 00000 n 0000095644 00000 n 0000132985 00000 n 0000096081 00000 n 0000095796 00000 n 0000097449 00000 n 0000097504 00000 n 0000097583 00000 n 0000098642 00000 n 0000098662 00000 n 0000098887 00000 n 0000098950 00000 n 0000132963 00000 n 0000135027 00000 n 0000134919 00000 n 0000133103 00000 n 0000238355 00000 n 0000137391 00000 n 0000137283 00000 n 0000135165 00000 n 0000139461 00000 n 0000139353 00000 n 0000137540 00000 n 0000141894 00000 n 0000141786 00000 n 0000139564 00000 n 0000143629 00000 n 0000143521 00000 n 0000142032 00000 n 0000145244 00000 n 0000145136 00000 n 0000143720 00000 n 0000146538 00000 n 0000146427 00000 n 0000145347 00000 n 0000237850 00000 n 0000238465 00000 n 0000146630 00000 n 0000147141 00000 n 0000147574 00000 n 0000147945 00000 n 0000147970 00000 n 0000148081 00000 n 0000148756 00000 n 0000149118 00000 n 0000149265 00000 n 0000149799 00000 n 0000150421 00000 n 0000150810 00000 n 0000151437 00000 n 0000151776 00000 n 0000152172 00000 n 0000152661 00000 n 0000158004 00000 n 0000158267 00000 n 0000165732 00000 n 0000166027 00000 n 0000168461 00000 n 0000168812 00000 n 0000172966 00000 n 0000173230 00000 n 0000175441 00000 n 0000175663 00000 n 0000180116 00000 n 0000180357 00000 n 0000196502 00000 n 0000197021 00000 n 0000201392 00000 n 0000201654 00000 n 0000205291 00000 n 0000205542 00000 n 0000207280 00000 n 0000207501 00000 n 0000210202 00000 n 0000210470 00000 n 0000212183 00000 n 0000212438 00000 n 0000213849 00000 n 0000214085 00000 n 0000221584 00000 n 0000221867 00000 n 0000235482 00000 n 0000238542 00000 n 0000238624 00000 n 0000238677 00000 n trailer << /Size 152 /Root 150 0 R /Info 151 0 R /ID [<0CD9110DF2759B8CD3CC52A13197100B> <0CD9110DF2759B8CD3CC52A13197100B>] >> startxref 238949 %%EOF Rcsdp/src/Csdp/doc/csdpuser.blg0000644000175100001440000000145214342635402016113 0ustar hornikusersThis is BibTeX, Version 0.99c (Web2C 7.4.5) The top-level auxiliary file: csdpuser.aux The style file: plain.bst Database file #1: sdp.bib You've used 5 entries, 2118 wiz_defined-function locations, 534 strings with 4778 characters, and the built_in function-call counts, 1686 in all, are: = -- 171 > -- 67 < -- 1 + -- 29 - -- 22 * -- 137 := -- 289 add.period$ -- 15 call.type$ -- 5 change.case$ -- 26 chr.to.int$ -- 0 cite$ -- 5 duplicate$ -- 53 empty$ -- 132 format.name$ -- 22 if$ -- 335 int.to.chr$ -- 0 int.to.str$ -- 5 missing$ -- 4 newline$ -- 28 num.names$ -- 10 pop$ -- 17 preamble$ -- 1 purify$ -- 21 quote$ -- 0 skip$ -- 33 stack$ -- 0 substring$ -- 151 swap$ -- 5 text.length$ -- 1 text.prefix$ -- 0 top$ -- 0 type$ -- 20 warning$ -- 0 while$ -- 18 width$ -- 6 write$ -- 57 Rcsdp/src/Csdp/doc/csdpuser.tex0000644000175100001440000011250214342635402016146 0ustar hornikusers\documentclass{article} \usepackage[pdftex]{graphicx} \bibliographystyle{plain} \begin{document} % % Some useful definitions. % %\newcommand{\dzhat}{{\Delta \hat{Z}}} %\newcommand{\dxhat}{{\Delta \hat{X}}} %\newcommand{\dyhat}{{\Delta \hat{y}}} %\newcommand{\dthat}{{\Delta \hat{t}}} % %\newcommand{\dzbar}{{\Delta \bar{Z}}} %\newcommand{\dxbar}{{\Delta \bar{X}}} %\newcommand{\dybar}{{\Delta \bar{y}}} %\newcommand{\dtbar}{{\Delta \bar{t}}} % %\newcommand{\dz}{{\Delta Z}} %\newcommand{\dx}{{\Delta X}} %\newcommand{\dy}{{\Delta y}} %\newcommand{\dt}{{\Delta t}} \newcommand{\elprod}{\circ} \title{CSDP User's Guide} \date{December 29, 2009} \author{Brian Borchers} \maketitle \section*{Introduction} CSDP is a software package for solving semidefinite programming problems. The algorithm is a predictor--corrector version of the primal--dual barrier method of Helmberg, Rendl, Vanderbei, and Wolkowicz \cite{HelmbergC:Anims}. A more detailed, but now somewhat outdated description of the algorithms in CSDP can be found in \cite{BorchersB:CSDCls}. CSDP is written in C for efficiency and portability. On systems with multiple processors and shared memory, CSDP can run in parallel. CSDP uses OpenMP directives in the C source code to tell the compiler how to parallelize various loops. The code is designed to make use of highly optimized linear algebra routines from the LAPACK and BLAS libraries. CSDP also has a number of features that make it very flexible. CSDP can work with general symmetric matrices or with matrices that have defined block diagonal structure. CSDP is designed to handle constraint matrices with general sparse structure. The code takes advantage of this structure in efficiently constructing the system of equations that is solved at each iteration of the algorithm. In addition to its default termination criteria, CSDP includes a feature that allows the user to terminate the solution process after any iteration. For example, this feature has been used within a branch and bound code for maximum independent set problems to terminate the bounding calculations as soon as a bound has been obtained that is good enough to fathom the current note. The library also contains routines for writing SDP problems and solutions to files and reading problems and solutions from files. A stand alone solver program is included for solving SDP problems that have been written in the SDPA sparse format \cite{SDPA}. An interface to MATLAB and the open source MATLAB clone Octave is also provided. This interface can be used to solve problems that are in the format used by the SeDuMi \cite{SturmJF:UsiS1M}. This document describes how to use the stand alone solver, MATLAB and Octave interface, and library routines. For detailed instructions on how to compile and install CSDP see the INSTALL file in the main directory. \clearpage \section*{The SDP Problem} CSDP solves semidefinite programming problems of the form \begin{equation} \begin{array}{rrcl} \max & \mbox{tr}\; (CX) & & \\ & A(X) & = & a \\ & X & \succeq & 0 \\ \end{array} \end{equation} where \begin{equation} A(X)=\left[ \begin{array}{c} \mbox{tr} \; (A_{1} X) \\ \mbox{tr} \; (A_{2} X) \\ \ldots \\ \mbox{tr} \; (A_{m} X) \\ \end{array} \right]. \end{equation} Here $X \succeq 0$ means that $X$ is positive semidefinite. All of the matrices $A_{i}$, $X$, and $C$ are assumed to be real and symmetric. The dual of this SDP is \begin{equation} \begin{array}{rrcl} \min & a^{T}y & & \\ & A^{T}(y)-C & = & Z \\ & Z & \succeq & 0 \\ \end{array} \end{equation} where \begin{equation} A^{T}(y)=\sum_{i=1}^{m} y_{i}A_{i}. \end{equation} Other semidefinite programming packages use slight variations on this primal--dual pair. For example, the primal--dual pair used in SDPA interchanges the primal and dual problems. Users of CSDP can specify their own termination criteria. However, the default criteria are that \begin{equation} \begin{array}{rcl} \frac{\mbox{tr}(XZ)}{1+ | a^{T}y| } & < & 1.0 \times 10^{-8} \\ \frac{\| A(x)- a\|_{2}}{1 + \| a \|_{2}} & < & 1.0 \times 10^{-8} \\ \frac{\| A^{T}(y) -C -Z \|_{F}}{1 + \|C\|_{F}} & < & 1.0 \times 10^{-8} \\ X,Z & \succeq & 0. \\ \end{array} \end{equation} Note that for feasible primal and dual solutions, $a^Ty-\mbox{tr}(CX)=\mbox{tr}(XZ)$. Thus the first of these criteria insures that the relative duality gap is small. In practice, there are sometimes solutions which satisfy our primal and dual feasibility tolerances but have duality gaps which are not close to $\mbox{tr}(XZ)$. In some cases, the duality gap may even become negative. Because of this ambiguity, we use the $\mbox{tr}(XZ)$ gap instead of the difference between the objective functions. An option in the param.csdp file allows CSDP to use the difference of the primal objective functions instead of the $\mbox{tr}(XZ)$ gap. The matrices $X$ and $Z$ are considered to be positive definite when their Cholesky factorizations can be computed. In practice, this is somewhat more conservative than simply requiring all eigenvalues to be nonnegative. The Seventh DIMACS Implementation Challenge used a slightly different set of error measures \cite{MittelmannHD:AnibS}. For convenience in benchmarking, CSDP includes these DIMACS error measures in its output. To test for primal infeasibility, CSDP checks the inequality \begin{equation} \frac{-a^{T}y}{\| A^{T}(y)-Z \|_{F}} > 1.0 \times 10^8. \end{equation} If CSDP detects that a problem is primal infeasible, then it will announce this in its output and return a dual solution with $a^{T}y=-1$, and $\| A^{T}(y)-Z \|$ very small. This acts as a certificate of primal infeasibility. Similarly, CSDP tests for dual infeasibility by checking \begin{equation} \frac{\mbox{tr}(CX)}{\| A(X) \|_{2}} > 1.0 \times 10^8. \end{equation} If CSDP detects that a problem is dual infeasible, it announces this in its output and returns a primal solution with $\mbox{tr}(CX)=1$, and $\| A(X)\|$ small. This acts as a certificate of the dual infeasibility. The tolerances for primal and dual feasibility and the relative duality gap can be changed by editing CSDP's parameter file. See the following section on using the stand alone solver for a description of this parameter file. \section*{Using the stand alone solver} CSDP includes a program which can be used to solve SDP's that have been written in the SDPA sparse format. Usage is \begin{verbatim} csdp [] [] \end{verbatim} where {\tt } is the name of a file containing the SDP problem in SDPA sparse format, {\tt final solution} is the optional name of a file in which to save the final solution, and {\tt initial solution} is the optional name of a file from which to take the initial solution. The following example shows how CSDP would be used to solve a test problem. \begin{verbatim} >csdp theta1.dat-s Iter: 5 Ap: 1.00e+00 Pobj: 7.5846337e+00 Ad: 1.00e+00 Dobj: 4.2853659e+01 Iter: 6 Ap: 1.00e+00 Pobj: 1.5893126e+01 Ad: 1.00e+00 Dobj: 3.0778169e+01 Iter: 7 Ap: 1.00e+00 Pobj: 1.9887401e+01 Ad: 1.00e+00 Dobj: 2.4588662e+01 Iter: 8 Ap: 1.00e+00 Pobj: 2.1623330e+01 Ad: 1.00e+00 Dobj: 2.3465172e+01 Iter: 9 Ap: 1.00e+00 Pobj: 2.2611983e+01 Ad: 1.00e+00 Dobj: 2.3097049e+01 Iter: 10 Ap: 1.00e+00 Pobj: 2.2939498e+01 Ad: 1.00e+00 Dobj: 2.3010908e+01 Iter: 11 Ap: 1.00e+00 Pobj: 2.2996259e+01 Ad: 1.00e+00 Dobj: 2.3000637e+01 Iter: 12 Ap: 1.00e-00 Pobj: 2.2999835e+01 Ad: 1.00e+00 Dobj: 2.3000020e+01 Iter: 13 Ap: 1.00e+00 Pobj: 2.2999993e+01 Ad: 1.00e+00 Dobj: 2.2999999e+01 Iter: 14 Ap: 1.00e+00 Pobj: 2.3000000e+01 Ad: 1.00e+00 Dobj: 2.3000000e+01 Success: SDP solved Primal objective value: 2.3000000e+01 Dual objective value: 2.3000000e+01 Relative primal infeasibility: 1.11e-16 Relative dual infeasibility: 3.93e-09 Real Relative Gap: 7.21e-09 XZ Relative Gap: 7.82e-09 DIMACS error measures: 1.11e-16 0.00e+00 1.00e-07 0.00e+00 7.21e-09 7.82e-09 Elements time: 0.008845 Factor time: 0.008865 Other time: 0.198949 Total time: 0.216659 \end{verbatim} One line of output appears for each iteration of the algorithm, giving the iteration number, primal step size (Ap), primal objective value (Pobj), dual step size (Ad), and dual objective value (Dobj). The last eight lines of output show the primal and dual optimal objective values, the XZ duality gap, the actual duality gap, the relative primal and dual infeasibility in the optimal solution. The last four lines give the time in seconds used by various steps in the algorithm. The first line, ``Elements'' shows the time spent in constructing the Schur complement matrix. The second line, ``Factor'' shows the time spent in factoring the Schur complement matrix. The third line, ``Other'' shows the time spent in all other operations. The fourth line gives the total time used in solving the problem. Note that the times given here are ``wall clock'' times, not CPU time. On a system that is running other programs, the wall clock time may be considerably larger than the CPU time. On multiprocessor systems, the wall clock time will not include all of the CPU time used by the different processors. The reported time will typically vary on repeated runs of CSDP, particularly for samll problems like the one solved here. CSDP searches for a file named ``param.csdp'' in the current directory. If no such file exists, then default values for all of CSDP's parameters are used. If there is a parameter file, then CSDP reads the parameter values from this file. A sample file containing the default parameter values is given below. \begin{verbatim} axtol=1.0e-8 atytol=1.0e-8 objtol=1.0e-8 pinftol=1.0e8 dinftol=1.0e8 maxiter=100 minstepfrac=0.90 maxstepfrac=0.97 minstepp=1.0e-8 minstepd=1.0e-8 usexzgap=1 tweakgap=0 affine=0 printlevel=1 perturbobj=1 fastmode=0 \end{verbatim} The first three parameters, axtol, atytol, and objtol are the tolerances for primal feasibility, dual feasibility, and relative duality gap. The parameters pinftol and dinftol are tolerances used in determining primal and dual infeasibility. The maxiter parameter is used to limit the total number of iterations that CSDP may use. The minstepfrac and maxstepfrac parameters determine how close to the edge of the feasible region CSDP will step. If the primal or dual step is shorter than minstepp or minstepd, then CSDP declares a line search failure. If parameter usexzgap is 0, then CSDP will use the objective function duality gap instead of the $\mbox{tr}(XZ)$ gap. If tweakgap is set to 1, and usexzgap is set to 0, then CSDP will attempt to ``fix'' negative duality gaps. If parameter affine is set to 1, then CSDP will take only primal--dual affine steps and not make use of the barrier term. This can be useful for some problems that do not have feasible solutions that are strictly in the interior of the cone of semidefinite matrices. The printlevel parameter determines how much debugging information is output. Use printlevel=0 for no output and printlevel=1 for normal output. Higher values of printlevel will generate more debugging output. The perturbobj parameter determines whether the objective function will be perturbed to help deal with problems that have unbounded optimal solution sets. If perturbobj is 0, then the objective will not be perturbed. If perturbobj=1, then the objective function will be perturbed by a default amount. Larger values of perturbobj (e.g. 100.0) increase the size of the perturbation. This can be helpful in solving some difficult problems. The fastmode parameter determines whether or not CSDP will skip certain time consuming operations that slightly improve the accuracy of the solutions. If fastmode is set to 1, then CSDP may be somewhat faster, but also somewhat less accurate. \section*{Calling CSDP from MATLAB or Octave} An interface to the stand alone solver from MATLAB or Octave is included in CSDP. This requires MATLAB 6.5 or later) or Octave 2.9.5 or later. The interface accepts problems in the format used by the MATLAB package SeDuMi 1.05. The usage is \begin{verbatim} % % [x,y,z,info]=csdp(At,b,c,K,pars,x0,y0,z0) % % Uses CSDP to solve a problem in SeDuMi format. % % Input: % At, b, c, K SDP problem in SeDuMi format. % pars CSDP parameters (optional parameter.) % x0,y0,z0 Optional starting point. % % Output: % % x, y, z solution. % info CSDP return code. % info=100 indicates a failure in the MATLAB % interface, such as inability to write to % a temporary file. % % Note: This interface makes use of temporary files with names given by the % tempname function. This will fail if there is no working temporary % directory or there isn't enough space available in this directory. % % Note: This code writes its own param.csdp file in the current working % directory. Any param.csdp file already in the directory will be deleted. % % Note: It is assumed that csdp is the search path made available through % the ``system'' or ``dos'' command. Typically, having the csdp executable in % current working directory will work, although some paranoid system % administrators keep . out of the path. In that case, you'll need to % install csdp in one of the directories that is in the search path. % A simple test is to run csdp from a command line prompt. \end{verbatim} The following example shows the solution of a sample problem using this interface. To make the example more interesting, we've asked CSDP to find a solution with a relative duality gap smaller than 1.0e-9 instead of the usual 1.0e-8. \begin{verbatim} >> load control1.mat >> whos Name Size Bytes Class At 125x21 8488 double array (sparse) K 1x1 140 struct array ans 2x1 16 double array b 21x1 168 double array c 125x1 80 double array (sparse) Grand total is 732 elements using 8892 bytes >> pars.objtol=1.0e-9 pars = objtol: 1.0000e-09 >> [x,y,z,info]=csdp(At,b,c,K,pars); Transposing A to match b Number of constraints: 21 Number of SDP blocks: 2 Number of LP vars: 0 Iter: 0 Ap: 0.00e+00 Pobj: 3.6037961e+02 Ad: 0.00e+00 Dobj: 0.0000000e+00 Iter: 1 Ap: 9.56e-01 Pobj: 3.7527534e+02 Ad: 9.60e-01 Dobj: 6.4836002e+04 Iter: 2 Ap: 8.55e-01 Pobj: 4.0344779e+02 Ad: 9.67e-01 Dobj: 6.9001508e+04 Iter: 3 Ap: 8.77e-01 Pobj: 1.4924982e+02 Ad: 1.00e+00 Dobj: 6.0425319e+04 Iter: 4 Ap: 7.14e-01 Pobj: 8.2819408e+01 Ad: 1.00e+00 Dobj: 1.2926534e+04 Iter: 5 Ap: 8.23e-01 Pobj: 4.7411688e+01 Ad: 1.00e+00 Dobj: 4.9040115e+03 Iter: 6 Ap: 7.97e-01 Pobj: 2.6300212e+01 Ad: 1.00e+00 Dobj: 1.4672743e+03 Iter: 7 Ap: 7.12e-01 Pobj: 1.5215577e+01 Ad: 1.00e+00 Dobj: 4.0561826e+02 Iter: 8 Ap: 8.73e-01 Pobj: 7.5119215e+00 Ad: 1.00e+00 Dobj: 1.7418715e+02 Iter: 9 Ap: 9.87e-01 Pobj: 5.3076518e+00 Ad: 1.00e+00 Dobj: 5.2097312e+01 Iter: 10 Ap: 1.00e+00 Pobj: 7.8594672e+00 Ad: 1.00e+00 Dobj: 2.2172435e+01 Iter: 11 Ap: 8.33e-01 Pobj: 1.5671237e+01 Ad: 1.00e+00 Dobj: 2.1475840e+01 Iter: 12 Ap: 1.00e+00 Pobj: 1.7250217e+01 Ad: 1.00e+00 Dobj: 1.8082715e+01 Iter: 13 Ap: 1.00e+00 Pobj: 1.7710018e+01 Ad: 1.00e+00 Dobj: 1.7814069e+01 Iter: 14 Ap: 9.99e-01 Pobj: 1.7779600e+01 Ad: 1.00e+00 Dobj: 1.7787170e+01 Iter: 15 Ap: 1.00e+00 Pobj: 1.7783579e+01 Ad: 1.00e+00 Dobj: 1.7785175e+01 Iter: 16 Ap: 1.00e+00 Pobj: 1.7784494e+01 Ad: 1.00e+00 Dobj: 1.7784708e+01 Iter: 17 Ap: 1.00e+00 Pobj: 1.7784610e+01 Ad: 1.00e+00 Dobj: 1.7784627e+01 Iter: 18 Ap: 1.00e+00 Pobj: 1.7784626e+01 Ad: 1.00e+00 Dobj: 1.7784620e+01 Iter: 19 Ap: 1.00e-00 Pobj: 1.7784627e+01 Ad: 1.00e+00 Dobj: 1.7784627e+01 Iter: 20 Ap: 9.60e-01 Pobj: 1.7784627e+01 Ad: 9.60e-01 Dobj: 1.7784627e+01 Success: SDP solved Primal objective value: 1.7784627e+01 Dual objective value: 1.7784627e+01 Relative primal infeasibility: 1.08e-09 Relative dual infeasibility: 3.12e-10 Real Relative Gap: -3.50e-10 XZ Relative Gap: 6.05e-11 DIMACS error measures: 1.08e-09 0.00e+00 7.02e-10 0.00e+00 -3.50e-10 6.05e-11 Elements time: 0.003162 Factor time: 0.000430 Other time: 0.013774 Total time: 0.017366 0.012u 0.004s 0:00.02 50.0% 0+0k 0+0io 0pf+0w >> info info = 0 \end{verbatim} The {\bf writesdpa} function can be used to write out a problem in SDPA sparse format. \begin{verbatim} % This function takes a problem in SeDuMi MATLAB format and writes it out % in SDPA sparse format. % % Usage: % % ret=writesdpa(fname,A,b,c,K,pars) % % fname Name of SDPpack file, in quotes % A,b,c,K Problem in SeDuMi form % pars Optional parameters. % pars.printlevel=0 No printed output % pars.prinlevel=1 (default) Some printed output. % pars.check=0 (default) Do not check problem data % for symmetry. % pars.check=1 Check problem data for % symmetry. % % ret ret=0 on success, ret=1 on failure. % \end{verbatim} Problems in the SeDuMi format may involve ``free'' variables. A free variable can be converted into the difference of two non--negative variables using the {\bf convertf} function. \begin{verbatim} % % [A,b,c,K]=convertf(A,b,c,K) % % converts free variables in a SeDuMi problem into nonnegative LP variables. % \end{verbatim} \section*{Using the subroutine interface to CSDP} \subsection*{Storage Conventions} The matrices $C$, $X$, and $Z$ are treated as block diagonal matrices. The declarations in the file blockmat.h describe the block matrix data structure. The {\tt blockmatrix} structure contains a count of the number of blocks and a pointer to an array of records that describe individual blocks. The individual blocks can be matrices of size {\tt blocksize} or diagonal matrices in which only a vector of diagonal entries is stored. Individual matrices within a block matrix are stored in column major order as in Fortran. The ijtok() macro defined in index.h can be used to convert Fortran style indices into an index into a C vector. For example, if A is stored as a Fortran array with leading dimension n, element (i,j) of A can be accessed within a C program as A[ijtok(i,j,n)]. The following table demonstrates how a 3 by 2 matrix would be stored under this system. \\ \\ \begin{tabular}{|l|l|} \hline C index & Fortran index \\ \hline A[0] & A(1,1) \\ \hline A[1] & A(2,1) \\ \hline A[2] & A(3,1) \\ \hline A[3] & A(1,2) \\ \hline A[4] & A(2,2) \\ \hline A[5] & A(3,2) \\ \hline \end{tabular} Vectors are stored as conventional C vectors. However, indexing always starts with 1, so the [0] element of every vector is wasted. Most arguments are described as being of size {\tt n} or {\tt m}. Since the zeroth element of the vector is wasted, these vectors must actually be of size {\tt n+1} or {\tt m+1}. The constraint matrices $A_{i}$ are stored in a sparse form. The array {\bf constraints} contains pointers which point to linked lists of structures, with one structure for each block of the sparse matrix. The {\bf sparseblock} data structures contain pointers to arrays which contain the entries and their {\bf i} and {\bf j} indices. For an example of how to setup these data structures, refer to the example directory in the CSDP distribution. This directory contains a program that solves the very small SDP \begin{equation} \begin{array}{rrcl} \max & \mbox{tr}\; (CX) & & \\ & \mbox{tr}\;A_{1}X & = & 1 \\ & \mbox{tr}\;A_{2}X & = & 2 \\ & X & \succeq & 0 \\ \end{array} \end{equation} where \begin{equation} C=\left[ \begin{array}{rrrrrrr} 2 & 1 & & & & & \\ 1 & 2 & & & & & \\ & & 3 & 0 & 1 & & \\ & & 0 & 2 & 0 & & \\ & & 1 & 0 & 3 & & \\ & & & & & 0 & \\ & & & & & & 0 \\ \end{array} \right] \end{equation} \begin{equation} A_{1}=\left[ \begin{array}{rrrrrrr} 3 & 1 & & & & & \\ 1 & 3 & & & & & \\ & & 0 & 0 & 0 & & \\ & & 0 & 0 & 0 & & \\ & & 0 & 0 & 0 & & \\ & & & & & 1 & \\ & & & & & & 0 \\ \end{array} \right] \end{equation} \begin{equation} A_{2}=\left[ \begin{array}{rrrrrrr} 0 & 0 & & & & & \\ 0 & 0 & & & & & \\ & & 3 & 0 & 1 & & \\ & & 0 & 4 & 0 & & \\ & & 1 & 0 & 5 & & \\ & & & & & 0 & \\ & & & & & & 1 \\ \end{array} \right]. \end{equation} In this problem, the $X$, $Z$, $A_{1}$, $A_{2}$ and $C$ matrices have three blocks. The first block is a 2 by 2 matrix. The second block is a 3 by 3 matrix. The third block is a diagonal block with 2 entries. In addition to setting up and solving this problem, the example program calls the write\_prob() routine to produce a file containing the SDP problem in SDPA sparse format. This is stored in the file prob.dat-s. \begin{verbatim} 2 3 2 3 -2 1.000000000000000000e+00 2.000000000000000000e+00 0 1 1 1 2.000000000000000000e+00 0 1 1 2 1.000000000000000000e+00 0 1 2 2 2.000000000000000000e+00 0 2 1 1 3.000000000000000000e+00 0 2 1 3 1.000000000000000000e+00 0 2 2 2 2.000000000000000000e+00 0 2 3 3 3.000000000000000000e+00 1 1 1 1 3.000000000000000000e+00 1 1 1 2 1.000000000000000000e+00 1 1 2 2 3.000000000000000000e+00 1 3 1 1 1.000000000000000000e+00 2 2 1 1 3.000000000000000000e+00 2 2 2 2 4.000000000000000000e+00 2 2 3 3 5.000000000000000000e+00 2 2 1 3 1.000000000000000000e+00 2 3 2 2 1.000000000000000000e+00 \end{verbatim} The 2 in the first line indicates that this problem has two constraints. The 3 in the second line indicates that there are three blocks in the $X$ and $Z$ matrices. The third line gives the sizes of the three blocks. Note that the third block's size is given as -2. The minus sign indicates that this is a diagonal block. The fourth line gives the values of the right hand sides of the two constraints. The remaining lines in the file describe the entries in the $C$, $A_{1}$, and $A_{2}$ matrices. The first number in each line is the number of the matrix, with $0$ for the $C$ matrix. The second number specifies a block within the matrix. The third and fourth numbers give the row and column of a nonzero entry within this block. The fifth number gives the actual value at that position within the block. Comparing this file to the problem statement above can be helpful in understanding the SDPA sparse file format. Figure \ref{cmat} shows a graphical representation of the data structure that holds the C matrix. Notice that individual matrix blocks of the C matrix are stored as Fortran arrays and that the diagonal block is stored as a vector, with the 0 entry unused. The data structures for $X$ and $Z$ are similar. \begin{figure} \begin{center} \scalebox{0.5}{\includegraphics{cmat}} \caption{The C matrix.} \label{cmat} \end{center} \end{figure} Figure \ref{constraints} shows the overall structure of the constraints. There is a vector of pointers to linked lists of constraint blocks. The 0th entry in this array is ignored. Blocks that contain only zero entries are not stored in the linked lists. Figure \ref{a1block1} shows the detail of the data structure for block 1 of the constraint matrix $A_{1}$. \begin{figure} \begin{center} \scalebox{0.5}{\includegraphics{constraints}} \caption{The constraints.} \label{constraints} \end{center} \end{figure} \begin{figure} \begin{center} \scalebox{0.5}{\includegraphics{a1block1}} \caption{Block 1 of $A_{1}$.} \label{a1block1} \end{center} \end{figure} \clearpage After solving the problem, the example program outputs the solution to prob.sol using the write\_sol() routine. The output produced on different computers might vary because of floating point round--off differences. However, the following output is typical. \begin{verbatim} 7.499999999674811235e-01 9.999999995736339464e-01 1 1 1 1 2.500000018710683558e-01 1 1 1 2 -2.500000000325189320e-01 1 1 2 2 2.500000018710683558e-01 1 2 1 1 6.895272851149165827e-10 1 2 1 3 -4.263660251297748376e-10 1 2 2 2 2.000000000263161049e+00 1 2 3 3 1.999999999836795217e+00 1 3 1 1 7.500000019361059422e-01 1 3 2 2 1.000000001542258765e+00 2 1 1 1 1.250000001467082567e-01 2 1 1 2 1.249999992664581755e-01 2 1 2 2 1.250000001467082567e-01 2 2 1 1 6.666669670820890570e-01 2 2 1 3 -4.518334811445142147e-07 2 2 2 2 2.200629338637236883e-10 2 2 3 3 2.200635108933231998e-10 2 3 1 1 5.868341556035494699e-10 2 3 2 2 4.401258478508541047e-10 \end{verbatim} The first line of the file gives the optimal y values. The lines that start with "1 " give the nonzero entries in the optimal Z matrix. As in the SDPA input file there are five numbers per line. The first number is the number of the matrix, where 1 is used for $Z$ and 2 is used for $X$. The second number specifies a block within the matrix. The third and fourth numbers are the row and column within the block. The final number is the actual value at the position in the block. For example, \begin{verbatim} 2 2 1 3 -4.518334811445142147e-07 \end{verbatim} means that in the 1st row, third column of block 2 of the $X$ matrix, the entry is $-4.518334811445142147\times 10^{-7}$. Since the matrices are symmetric, we only record the entries in the upper triangle of the matrix. The same entry will also appear in row 3, column 1. So, the optimal solution to the example problem is (rounding the numbers off to two or three digits) \begin{equation} y=\left[ \begin{array}{rr} 0.75 & 1.00 \end{array} \right] \end{equation} \begin{equation} Z=\left[ \begin{array}{rrrrrrr} 0.25 & -0.25 & & & & & \\ -0.25 & 0.25 & & & & & \\ & & 0 & 0 & 0 & & \\ & & 0 & 2.00 & 0 & & \\ & & 0 & 0 & 2.00 & & \\ & & & & & 0.75 & \\ & & & & & & 1.00 \\ \end{array} \right] \end{equation} \begin{equation} X=\left[ \begin{array}{rrrrrrr} 0.125 & 0.125 & & & & & \\ 0.125 & 0.125 & & & & & \\ & & 0.667 & 0 & 0 & & \\ & & 0 & 0 & 0 & & \\ & & 0 & 0 & 0 & & \\ & & & & & 0 & \\ & & & & & & 0 \\ \end{array} \right] \end{equation} \subsection*{Storage Requirements} CSDP requires storage for a number of block diagonal matrices of the same form as $X$ and $Z$, as well as storage for the Schur complement system that is Cholesky factored in each iteration. For a problem with $m$ constraints and block diagonal matrices with blocks of size $n_{1}$, $n_{2}$, $\dots$, $n_{s}$, CSDP requires approximately \begin{equation} \mbox{Storage}=8(m^{2}+11(n_{1}^{2}+n_{2}^{2}+\ldots+n_{s}^{2})) \end{equation} bytes of storage. This formula includes all of the two dimensional arrays but leaves out the one dimensional vectors. This formula also excludes the storage required to store the constraint matrices, which are assumed to be sparse. In practice it is wise to allow for about 10\% to 20\% more storage to account for the excluded factors. The parallel version of CSDP requires additional storage for work matrices used by the routine that computes the Schur complement matrix. If the OpenMP maximum number of threads (typically the number of processors on the system) is $p$, and $p>1$, then CSDP will allocate an additional $16(p-1)n_{\mbox{max}}^{2}$ bytes of storage for workspace. \subsection*{Calling The SDP Routine} The routine has 11 parameters which include the problem data and an initial solution. The calling sequence for the sdp subroutine is: \begin{verbatim} int easy_sdp(n,k,C,a,constraints,constant_offset,pX,py,pZ,ppobj,pdobj) int n; /* Dimension of X */ int k; /* # of constraints */ struct blockmatrix C; /* C matrix */ double *a; /* right hand side vector */ struct constraintmatrix *constraints; /* Constraints */ double constant_offset; /* added to objective */ struct blockmatrix *pX; /* X matrix */ double **py; /* y vector */ struct blockmatrix *pZ; /* Z matrix */ double *ppobj; /* Primal objective */ double *pdobj; /* Dual objective */ \end{verbatim} \subsection*{Input Parameters} \begin{enumerate} \item {\tt n}. This parameter gives the dimension of the X, C, and Z matrices. \item {\tt k}. This parameter gives the number of constraints. \item {\tt C}. This parameter gives the $C$ matrix and implicitly defines the block structure of the block diagonal matrices. \item {\tt a}. This parameter gives the right hand side vector $a$. \item {\tt constraints}. This parameter specifies the problem constraints. \item {\tt constant\_offset}. This scalar is added to the primal and dual objective values. \item {\tt pX}. On input, this parameter gives the initial primal solution $X$. \item {\tt py}. On input, this parameter gives the initial dual solution $y$. \item {\tt pZ}. On input, this parameter gives the initial dual solution $Z$. \end{enumerate} \subsection*{Output Parameters} \begin{enumerate} \item {\tt pX}. On output this parameter gives the optimal primal solution $X$. \item {\tt py}. On output, this parameter gives the optimal dual solution $y$. \item {\tt pZ}. On output, this parameter gives the optimal dual solution $Z$. \item {\tt ppobj}. On output, this parameter gives the optimal primal objective value. \item {\tt pdobj}. On output, this parameter gives the optimal dual objective value. \end{enumerate} \subsection*{Return Codes} If CSDP succeeds in solving the problem to full accuracy, the {\tt easy\_sdp} routine will return 0. Otherwise, the {\tt easy\_sdp} routine will return a nonzero return code. In many cases, CSDP will have actually found a good solution that doesn't quite satisfy one of the termination criteria. In particular, return code 3 is usually indicative of such a solution. Whenever there is a nonzero return code, you should examine the return and the solution to see what happened. The nonzero return codes are \begin{enumerate} \item Success. The problem is primal infeasible. \item Success. The problem is dual infeasible. \item Partial Success. A solution has been found, but full accuracy was not achieved. One or more of primal infeasibility, dual infeasibility, or relative duality gap are larger than their tolerances, but by a factor of less than 1000. \item Failure. Maximum iterations reached. \item Failure. Stuck at edge of primal feasibility. \item Failure. Stuck at edge of dual infeasibility. \item Failure. Lack of progress. \item Failure. X, Z, or O was singular. \item Failure. Detected NaN or Inf values. \end{enumerate} \subsection*{The User Exit Routine} By default, the {\tt easy\_sdp} routine stops when it has obtained a solution in which the relative primal and dual infeasibilities and the relative gap between the primal and dual objective values is less than $1.0 \times 10^{-8}$. There are situations in which you might want to terminate the solution process before an optimal solution has been found. For example, in a cutting plane routine, you might want to terminate the solution process as soon as a cutting plane has been found. If you would like to specify your own stopping criteria, you can implement these in a user exit routine. At each iteration of its algorithm, CSDP calls a routine named {\tt user\_exit}. CSDP passes the problem data and current solution to this subroutine. If {\tt user\_exit} returns 0, then CSDP continues. However, if {\tt user\_exit} returns 1, then CSDP returns immediately to the calling program. The default routine supplied in the CSDP library simply returns 0. If CSDP is compiled with the ``-DUSESIGTERM'' flag, then default routine will also stop the solution process whenever the process receives a TERM signal. You can write your own routine and link it with your program in place of the default user exit routine. The calling sequence for the user exit routine is \begin{verbatim} int user_exit(n,k,C,a,dobj,pobj,constant_offset,constraints,X,y,Z,params) int n; /* Dimension of X */ int k; /* # of constraints */ struct blockmatrix C; /* C matrix */ double *a; /* right hand side */ double dobj; /* dual objective */ double pobj; /* primal objective */ double constant_offset; /* added to objective */ struct constraintmatrix *constraints; /* Constraints */ struct blockmatrix X; /* primal solution */ double *y; /* dual solution */ struct blockmatrix Z; /* dual solution */ struct paramstruc params; /* parameters sdp called with */ \end{verbatim} \subsection*{Finding an Initial Solution} The CSDP library contains a routine for finding an initial solution to the SDP problem. Note that this routine allocates all storage required for the initial solution. The calling sequence for this routine is: \begin{verbatim} void initsoln(n,k,C,a,constraints,pX0,py0,pZ0) int n; /* dimension of X */ int k; /* # of constraints */ struct blockmatrix C; /* C matrix */ double *a; /* right hand side vector */ struct constraintmatrix *constraints; /* constraints */ struct blockmatrix *pX0; /* Initial primal solution */ double **py0; /* Initial dual solution */ struct blockmatrix *pZ0; /* Initial dual solution */ \end{verbatim} \subsection*{Reading and Writing Problem Data} The CSDP library contains routines for reading and writing SDP problems and solutions in SDPA format. The routine {\tt write\_prob} is used to write out an SDP problem in SDPA sparse format. The routine {\tt read\_prob} is used to read an SDP problem in from a file. The routine {\tt write\_sol} is used to write an SDP solution to a file. The routine {\tt read\_sol} is used to read a solution from a file. The calling sequence for {\tt write\_prob} is \begin{verbatim} int write_prob(fname,n,k,C,a,constraints) char *fname; /* file to write */ int n; /* Dimension of X */ int k; /* # of constraints */ struct blockmatrix C; /* The C matrix */ double *a; /* The a vector */ struct constraintmatrix *constraints; /* the constraints */ \end{verbatim} The calling sequence for {\tt read\_prob} is: \begin{verbatim} int read_prob(fname,pn,pk,pC,pa,pconstraints,printlevel) char *fname; /* file to read */ int *pn; /* Dimension of X */ int *pk; /* # of constraints */ struct blockmatrix *pC; /* The C matrix */ double **pa; /* The a vector */ struct constraintmatrix **pconstraints; /* The constraints */ int printlevel; /* =0 for no output, =1 for normal output, >1 for debugging */ \end{verbatim} Note that the {\tt read\_prob} routine allocates all storage required by the problem. The calling sequence for {\tt write\_sol} is \begin{verbatim} int write_sol(fname,n,k,X,y,Z) char *fname; /* Name of the file to write to */ int n; /* Dimension of X */ int k; /* # of constraints */ struct blockmatrix X; /* Primal solution X */ double *y; /* Dual vector y */ struct blockmatrix Z; /* Dual matrix Z */ \end{verbatim} This routine returns 0 if successful and exits if it is unable to write the solution file. The calling sequence for {\tt read\_sol} is \begin{verbatim} int read_sol(fname,n,k,C,pX,py,pZ) char *fname; /* file to read */ int n; /* dimension of X */ int k; /* # of constraints */ struct blockmatrix C; /* The C matrix */ struct blockmatrix *pX; /* The X matrix */ double **py; /* The y vector */ struct blockmatrix *pZ; /* The Z matrix */ \end{verbatim} Note that {\tt read\_sol} allocates storage for $X$, $y$, and $Z$. This routine returns 0 when successful, and exits if it is unable to read the solution file. \subsection*{Freeing Problem Memory} The routine {\tt free\_prob} can be used to automatically free the memory allocated for a problem. The calling sequence for {\tt free\_prob} is \begin{verbatim} void free_prob(n,k,C,a,constraints,X,y,Z) int n; /* Dimension of X */ int k; /* # of constraints */ struct blockmatrix C; /* The C matrix */ double *a; /* The a vector */ struct constraintmatrix *constraints; /* the constraints */ struct blockmatrix X; /* X matrix. */ double *y; /* the y vector. */ struct blockmatrix Z; /* Z matrix. */ \end{verbatim} \bibliography{sdp} \end{document} Rcsdp/src/Csdp/doc/a1block1.fig0000644000175100001440000000551414342635402015664 0ustar hornikusers#FIG 3.2 Produced by xfig version 3.2.5-alpha5 Landscape Center Metric A4 100.00 Single -2 1200 2 1 3 0 1 0 -1 50 -1 20 0.000 1 0.0000 2250 810 45 45 2250 810 2295 810 1 3 0 1 0 -1 50 -1 20 0.000 1 0.0000 2250 1485 45 45 2250 1485 2295 1485 1 3 0 1 0 -1 50 -1 20 0.000 1 0.0000 2250 2160 45 45 2250 2160 2295 2160 2 2 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 1800 465 2700 465 2700 4500 1800 4500 1800 465 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1785 1140 2685 1140 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1785 1815 2685 1815 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1800 2490 2700 2490 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1785 3165 2685 3165 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 1785 3825 2685 3825 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2250 2160 3150 2160 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3150 2610 3825 2610 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3150 3150 3825 3150 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3150 3690 3825 3690 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 3150 2070 3825 2070 3825 4275 3150 4275 3150 2070 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 4275 1350 4950 1350 4950 3555 4275 3555 4275 1350 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 5490 450 6165 450 6165 2655 5490 2655 5490 450 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4275 1935 4950 1935 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 5490 2115 6165 2115 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 5490 1530 6165 1530 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 5490 945 6165 945 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4275 2475 4950 2475 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4275 3015 4950 3015 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2250 1485 4275 1485 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2250 810 5490 810 4 0 0 50 -1 1 18 0.0000 0 195 855 675 900 iindices\001 4 0 0 50 -1 1 18 0.0000 0 255 855 675 1575 jindices\001 4 0 0 50 -1 1 18 0.0000 0 195 1680 0 4275 constraintnum\001 4 0 0 50 -1 1 18 0.0000 0 195 1125 450 2925 blocknum\001 4 0 0 50 -1 1 18 0.0000 0 195 1020 450 3600 blocksize\001 4 0 0 50 -1 1 18 0.0000 0 195 765 675 2250 entries\001 4 0 0 50 -1 1 18 0.0000 0 195 135 2160 2925 1\001 4 0 0 50 -1 1 18 0.0000 0 195 135 2160 3600 2\001 4 0 0 50 -1 1 18 0.0000 0 195 135 2160 4275 1\001 4 0 0 50 -1 1 18 0.0000 0 30 180 3330 2475 --\001 4 0 0 50 -1 1 18 0.0000 0 195 135 3330 3060 3\001 4 0 0 50 -1 1 18 0.0000 0 195 135 3330 3555 1\001 4 0 0 50 -1 1 18 0.0000 0 195 135 3330 4050 3\001 4 0 0 50 -1 1 18 0.0000 0 30 180 4545 1710 --\001 4 0 0 50 -1 1 18 0.0000 0 30 180 5760 765 --\001 4 0 0 50 -1 1 18 0.0000 0 195 135 4545 2295 1\001 4 0 0 50 -1 1 18 0.0000 0 195 135 4545 2835 2\001 4 0 0 50 -1 1 18 0.0000 0 195 135 4545 3375 2\001 4 0 0 50 -1 1 18 0.0000 0 195 135 5760 1350 1\001 4 0 0 50 -1 1 18 0.0000 0 195 135 5760 1935 1\001 4 0 0 50 -1 1 18 0.0000 0 195 135 5760 2475 2\001 Rcsdp/src/Csdp/doc/a1block1.eps0000644000175100001440000002175214342635402015710 0ustar hornikusers%!PS-Adobe-2.0 EPSF-2.0 %%Title: a1block1.fig %%Creator: fig2dev Version 3.2 Patchlevel 5-alpha5 %%CreationDate: Thu Aug 10 22:15:29 2006 %%For: brian@bullwinkle (brian,,,) %%BoundingBox: 0 0 391 258 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 258 moveto 0 0 lineto 391 0 lineto 391 258 lineto closepath clip newpath 0.9 284.9 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /reencdict 12 dict def /ReEncode { reencdict begin /newcodesandnames exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def basefontdict { exch dup /FID ne { dup /Encoding eq { exch dup length array copy newfont 3 1 roll put } { exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall newfont /FontName newfontname put newcodesandnames aload pop 128 1 255 { newfont /Encoding get exch /.notdef put } for newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat newfontname newfont definefont pop end } def /isovec [ 8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde 8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis 8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron 8#220 /dotlessi 8#230 /oe 8#231 /OE 8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling 8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis 8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot 8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus 8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph 8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine 8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf 8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute 8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring 8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute 8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute 8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve 8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply 8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex 8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave 8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring 8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute 8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute 8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve 8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide 8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex 8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def /Times-Roman /Times-Roman-iso isovec ReEncode /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06299 0.06299 sc % % Fig objects follow % % % here starts figure with depth 50 % Ellipse 7.500 slw n 2250 810 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 2250 1485 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 2250 2160 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Polyline 0 slj 0 slc 15.000 slw n 1800 465 m 2700 465 l 2700 4500 l 1800 4500 l cp gs col0 s gr % Polyline 7.500 slw n 1785 1140 m 2685 1140 l gs col0 s gr % Polyline n 1785 1815 m 2685 1815 l gs col0 s gr % Polyline n 1800 2490 m 2700 2490 l gs col0 s gr % Polyline n 1785 3165 m 2685 3165 l gs col0 s gr % Polyline n 1785 3825 m 2685 3825 l gs col0 s gr % Polyline gs clippath 2998 2190 m 3165 2190 l 3165 2130 l 2998 2130 l 2998 2130 l 3118 2160 l 2998 2190 l cp eoclip n 2250 2160 m 3150 2160 l gs col0 s gr gr % arrowhead n 2998 2190 m 3118 2160 l 2998 2130 l 2998 2190 l cp gs 0.00 setgray ef gr col0 s % Polyline n 3150 2610 m 3825 2610 l gs col0 s gr % Polyline n 3150 3150 m 3825 3150 l gs col0 s gr % Polyline n 3150 3690 m 3825 3690 l gs col0 s gr % Polyline n 3150 2070 m 3825 2070 l 3825 4275 l 3150 4275 l cp gs col0 s gr % Polyline n 4275 1350 m 4950 1350 l 4950 3555 l 4275 3555 l cp gs col0 s gr % Polyline n 5490 450 m 6165 450 l 6165 2655 l 5490 2655 l cp gs col0 s gr % Polyline n 4275 1935 m 4950 1935 l gs col0 s gr % Polyline n 5490 2115 m 6165 2115 l gs col0 s gr % Polyline n 5490 1530 m 6165 1530 l gs col0 s gr % Polyline n 5490 945 m 6165 945 l gs col0 s gr % Polyline n 4275 2475 m 4950 2475 l gs col0 s gr % Polyline n 4275 3015 m 4950 3015 l gs col0 s gr % Polyline gs clippath 4123 1515 m 4290 1515 l 4290 1455 l 4123 1455 l 4123 1455 l 4243 1485 l 4123 1515 l cp eoclip n 2250 1485 m 4275 1485 l gs col0 s gr gr % arrowhead n 4123 1515 m 4243 1485 l 4123 1455 l 4123 1515 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5338 840 m 5505 840 l 5505 780 l 5338 780 l 5338 780 l 5458 810 l 5338 840 l cp eoclip n 2250 810 m 5490 810 l gs col0 s gr gr % arrowhead n 5338 840 m 5458 810 l 5338 780 l 5338 840 l cp gs 0.00 setgray ef gr col0 s /Times-Roman-iso ff 285.75 scf sf 675 900 m gs 1 -1 sc (iindices) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 675 1575 m gs 1 -1 sc (jindices) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 0 4275 m gs 1 -1 sc (constraintnum) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 450 2925 m gs 1 -1 sc (blocknum) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 450 3600 m gs 1 -1 sc (blocksize) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 675 2250 m gs 1 -1 sc (entries) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 2160 2925 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 2160 3600 m gs 1 -1 sc (2) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 2160 4275 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 3330 2475 m gs 1 -1 sc (--) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 3330 3060 m gs 1 -1 sc (3) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 3330 3555 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 3330 4050 m gs 1 -1 sc (3) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 4545 1710 m gs 1 -1 sc (--) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 5760 765 m gs 1 -1 sc (--) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 4545 2295 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 4545 2835 m gs 1 -1 sc (2) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 4545 3375 m gs 1 -1 sc (2) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 5760 1350 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 5760 1935 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 285.75 scf sf 5760 2475 m gs 1 -1 sc (2) col0 sh gr % here ends figure; $F2psEnd rs showpage %%Trailer %EOF Rcsdp/src/Csdp/doc/example.c0000644000175100001440000003021614342635402015374 0ustar hornikusers/* An example showing how to call the easy_sdp() interface to CSDP. In this example, we solve the problem max tr(C*X) tr(A1*X)=1 tr(A2*X)=2 X >= 0 (X is PSD) where C=[2 1 1 2 3 0 1 0 2 0 1 0 3 0 0] A1=[3 1 1 3 0 0 0 0 0 0 0 0 0 1 0] A2=[0 0 0 0 3 0 1 0 4 0 1 0 5 0 1] Notice that all of the matrices have block diagonal structure. The first block is of size 2x2. The second block is of size 3x3. The third block is a diagonal block of size 2. */ /* * These standard declarations for the C library are needed. */ #include #include /* * Include CSDP declarations so that we'll know the calling interfaces. */ #include "declarations.h" /* * The main program. Setup data structures with the problem data, write * the problem out in SDPA sparse format, and then solve the problem. */ int main() { /* * The problem and solution data. */ struct blockmatrix C; double *b; struct constraintmatrix *constraints; /* * Storage for the initial and final solutions. */ struct blockmatrix X,Z; double *y; double pobj,dobj; /* * blockptr will be used to point to blocks in constraint matrices. */ struct sparseblock *blockptr; /* * A return code for the call to easy_sdp(). */ int ret; /* * The first major task is to setup the C matrix and right hand side b. */ /* * First, allocate storage for the C matrix. We have three blocks, but * because C starts arrays with index 0, we have to allocate space for * four blocks- we'll waste the 0th block. Notice that we check to * make sure that the malloc succeeded. */ C.nblocks=3; C.blocks=(struct blockrec *)malloc(4*sizeof(struct blockrec)); if (C.blocks == NULL) { printf("Couldn't allocate storage for C!\n"); exit(1); }; /* * Setup the first block. */ C.blocks[1].blockcategory=MATRIX; C.blocks[1].blocksize=2; C.blocks[1].data.mat=(double *)malloc(2*2*sizeof(double)); if (C.blocks[1].data.mat == NULL) { printf("Couldn't allocate storage for C!\n"); exit(1); }; /* * Put the entries into the first block. */ C.blocks[1].data.mat[ijtok(1,1,2)]=2.0; C.blocks[1].data.mat[ijtok(1,2,2)]=1.0; C.blocks[1].data.mat[ijtok(2,1,2)]=1.0; C.blocks[1].data.mat[ijtok(2,2,2)]=2.0; /* * Setup the second block. */ C.blocks[2].blockcategory=MATRIX; C.blocks[2].blocksize=3; C.blocks[2].data.mat=(double *)malloc(3*3*sizeof(double)); if (C.blocks[2].data.mat == NULL) { printf("Couldn't allocate storage for C!\n"); exit(1); }; /* * Put the entries into the second block. */ C.blocks[2].data.mat[ijtok(1,1,3)]=3.0; C.blocks[2].data.mat[ijtok(1,2,3)]=0.0; C.blocks[2].data.mat[ijtok(1,3,3)]=1.0; C.blocks[2].data.mat[ijtok(2,1,3)]=0.0; C.blocks[2].data.mat[ijtok(2,2,3)]=2.0; C.blocks[2].data.mat[ijtok(2,3,3)]=0.0; C.blocks[2].data.mat[ijtok(3,1,3)]=1.0; C.blocks[2].data.mat[ijtok(3,2,3)]=0.0; C.blocks[2].data.mat[ijtok(3,3,3)]=3.0; /* * Setup the third block. Note that we have to allocate space for 3 * entries because C starts array indexing with 0 rather than 1. */ C.blocks[3].blockcategory=DIAG; C.blocks[3].blocksize=2; C.blocks[3].data.vec=(double *)malloc((2+1)*sizeof(double)); if (C.blocks[3].data.vec == NULL) { printf("Couldn't allocate storage for C!\n"); exit(1); }; /* * Put the entries into the third block. */ C.blocks[3].data.vec[1]=0.0; C.blocks[3].data.vec[2]=0.0; /* * Allocate storage for the right hand side, b. */ b=(double *)malloc((2+1)*sizeof(double)); if (b==NULL) { printf("Failed to allocate storage for a!\n"); exit(1); }; /* * Fill in the entries in b. */ b[1]=1.0; b[2]=2.0; /* * The next major step is to setup the two constraint matrices A1 and A2. * Again, because C indexing starts with 0, we have to allocate space for * one more constraint. constraints[0] is not used. */ constraints=(struct constraintmatrix *)malloc( (2+1)*sizeof(struct constraintmatrix)); if (constraints==NULL) { printf("Failed to allocate storage for constraints!\n"); exit(1); }; /* * Setup the A1 matrix. Note that we start with block 3 of A1 and then * do block 1 of A1. We do this in this order because the blocks will * be inserted into the linked list of A1 blocks in reverse order. */ /* * Terminate the linked list with a NULL pointer. */ constraints[1].blocks=NULL; /* * Now, we handle block 3 of A1. */ /* * Allocate space for block 3 of A1. */ blockptr=(struct sparseblock *)malloc(sizeof(struct sparseblock)); if (blockptr==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * Initialize block 3. */ blockptr->blocknum=3; blockptr->blocksize=2; blockptr->constraintnum=1; blockptr->next=NULL; blockptr->nextbyblock=NULL; blockptr->entries=(double *) malloc((1+1)*sizeof(double)); if (blockptr->entries==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->iindices=(int *) malloc((1+1)*sizeof(int)); if (blockptr->iindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->jindices=(int *) malloc((1+1)*sizeof(int)); if (blockptr->jindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * We have 1 nonzero entry in the upper triangle of block 3 of A1. */ blockptr->numentries=1; /* * The entry in the 1,1 position of block 3 of A1 is 1.0 */ blockptr->iindices[1]=1; blockptr->jindices[1]=1; blockptr->entries[1]=1.0; /* * Note that the entry in the 2,2 position of block 3 of A1 is 0, * So we don't store anything for it. */ /* * Insert block 3 into the linked list of A1 blocks. */ blockptr->next=constraints[1].blocks; constraints[1].blocks=blockptr; /* * Now, we handle block 1. */ /* * Allocate space for block 1. */ blockptr=(struct sparseblock *)malloc(sizeof(struct sparseblock)); if (blockptr==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * Initialize block 1. */ blockptr->blocknum=1; blockptr->blocksize=2; blockptr->constraintnum=1; blockptr->next=NULL; blockptr->nextbyblock=NULL; blockptr->entries=(double *) malloc((3+1)*sizeof(double)); if (blockptr->entries==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->iindices=(int *) malloc((3+1)*sizeof(int)); if (blockptr->iindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->jindices=(int *) malloc((3+1)*sizeof(int)); if (blockptr->jindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * We have 3 nonzero entries in the upper triangle of block 1 of A1. */ blockptr->numentries=3; /* * The entry in the 1,1 position of block 1 of A1 is 3.0 */ blockptr->iindices[1]=1; blockptr->jindices[1]=1; blockptr->entries[1]=3.0; /* * The entry in the 1,2 position of block 1 of A1 is 1.0 */ blockptr->iindices[2]=1; blockptr->jindices[2]=2; blockptr->entries[2]=1.0; /* * The entry in the 2,2 position of block 1 of A1 is 3.0 */ blockptr->iindices[3]=2; blockptr->jindices[3]=2; blockptr->entries[3]=3.0; /* * Note that we don't have to store the 2,1 entry- this is assumed to be * equal to the 1,2 entry. */ /* * Insert block 1 into the linked list of A1 blocks. */ blockptr->next=constraints[1].blocks; constraints[1].blocks=blockptr; /* * Note that the second block of A1 is 0, so we didn't store anything for it. */ /* * Setup the A2 matrix. This time, there are nonzero entries in block 3 * and block 2. We start with block 3 of A2 and then do block 1 of A2. */ /* * Terminate the linked list with a NULL pointer. */ constraints[2].blocks=NULL; /* * First, we handle block 3 of A2. */ /* * Allocate space for block 3 of A2. */ blockptr=(struct sparseblock *)malloc(sizeof(struct sparseblock)); if (blockptr==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * Initialize block 3. */ blockptr->blocknum=3; blockptr->blocksize=2; blockptr->constraintnum=2; blockptr->next=NULL; blockptr->nextbyblock=NULL; blockptr->entries=(double *) malloc((1+1)*sizeof(double)); if (blockptr->entries==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->iindices=(int *) malloc((1+1)*sizeof(int)); if (blockptr->iindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->jindices=(int *) malloc((1+1)*sizeof(int)); if (blockptr->jindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * We have 1 nonzero entry in the upper triangle of block 3 of A2. */ blockptr->numentries=1; /* * The entry in the 2,2 position of block 3 of A2 is 1.0 */ blockptr->iindices[1]=2; blockptr->jindices[1]=2; blockptr->entries[1]=1.0; /* * Insert block 3 into the linked list of A2 blocks. */ blockptr->next=constraints[2].blocks; constraints[2].blocks=blockptr; /* * Now, we handle block 2. */ /* * Allocate space for block 2. */ blockptr=(struct sparseblock *)malloc(sizeof(struct sparseblock)); if (blockptr==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * Initialize block 2. */ blockptr->blocknum=2; blockptr->blocksize=3; blockptr->constraintnum=2; blockptr->next=NULL; blockptr->nextbyblock=NULL; blockptr->entries=(double *) malloc((4+1)*sizeof(double)); if (blockptr->entries==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->iindices=(int *) malloc((4+1)*sizeof(int)); if (blockptr->iindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; blockptr->jindices=(int *) malloc((4+1)*sizeof(int)); if (blockptr->jindices==NULL) { printf("Allocation of constraint block failed!\n"); exit(1); }; /* * We have 4 nonzero entries in the upper triangle of block 2 of A2. */ blockptr->numentries=4; /* * The entry in the 1,1 position of block 2 of A2 is 3.0 */ blockptr->iindices[1]=1; blockptr->jindices[1]=1; blockptr->entries[1]=3.0; /* * The entry in the 2,2 position of block 2 of A2 is 4.0 */ blockptr->iindices[2]=2; blockptr->jindices[2]=2; blockptr->entries[2]=4.0; /* * The entry in the 3,3 position of block 2 of A2 is 5.0 */ blockptr->iindices[3]=3; blockptr->jindices[3]=3; blockptr->entries[3]=5.0; /* * The entry in the 1,3 position of block 2 of A2 is 1.0 */ blockptr->iindices[4]=1; blockptr->jindices[4]=3; blockptr->entries[4]=1.0; /* * Note that we don't store the 0 entries and entries below the diagonal! */ /* * Insert block 2 into the linked list of A2 blocks. */ blockptr->next=constraints[2].blocks; constraints[2].blocks=blockptr; /* * At this point, we have all of the problem data setup. */ /* * Write the problem out in SDPA sparse format. */ write_prob("prob.dat-s",7,2,C,b,constraints); /* * Create an initial solution. This allocates space for X, y, and Z, * and sets initial values. */ initsoln(7,2,C,b,constraints,&X,&y,&Z); /* * Solve the problem. */ ret=easy_sdp(7,2,C,b,constraints,0.0,&X,&y,&Z,&pobj,&dobj); if (ret == 0) printf("The objective value is %.7e \n",(dobj+pobj)/2); else printf("SDP failed.\n"); free_prob(7,2,C,b,constraints,X,y,Z); exit(0); } Rcsdp/src/Csdp/doc/a1block1.pdf0000644000175100001440000011054714342635402015673 0ustar hornikusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÝWK7 ¾Ï¯˜[¶ÌŠ¢ž×¹å’Ö@Ω³IœŽì#(Ð__R5š¸q`O lRŸ>’òÝlg#Ÿö}8MwÓï¸ùÓÄóqBç;[¢1ͧAc ft!ËhÀ9–m»|àü«ìhʱîh ]®6xG×°­Â© !V›j£ÊbC½P„z© Û8ÓÇ—“ƒhõó?Ï8ÌÏÓŸ=ÌH†à0‰®‡)yàQÃ*¯ÁuDs½3¨\M¬±a¶¹R6‚,¦ÖóSymE¨×ʰ‰¢Üà3lsi.%pvŒÍE 1¬±¹`ÀÄÕp“‡Ø¡®+C—«!8o\ål CµÙl4y®#š—aÇöÞž]pru™K1•¶ÂŒd™59Î>È8[ϬÁÏ÷· šq¹#ñ¡DcÀ¦®Y$/Š×> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 9 0 obj <> endobj 8 0 obj <>stream xœ¬{XW×ÿ™YvgÀÄ$’ É®ÑÄ^EÁ^ÀŠP‘.eé,Ë.°t¸ôÎKï½w öÞkbPÓL4Å´»dÈûþgYI|ßä{žÿ÷<ŸÌìÌÜ{ιçüN»³K€‚xÃÒÝËÙÁ^‘—ƒ·úz¾j*¡zŸT}ÀaV1¿ünÀýÌ‹8o–|„àʤ÷uW½óþÄo½?qÅÛ„% ´Â%xOà+ø~…Q‚KL$¦Ó‰„±’XOl&v„5aO¸¾„˜‰D&‘O”õDÑOœ .wˆOˆ/ˆçÄ/Ä$|ƒä“SÉÈär¹ŽÜFZIgÒ›”Qd™Ad#ÙNö‘§ÈËäò3òkògr”ÃåLà¼Ërfs–r–sÖq¶s,9vŽˆÈ ãÄq28œ N§•ÓÇ9͹¹Ëæ<ã¼äü¡ÅÓÒÑÒÕz_kºÖ<­¥Z«µ¶iYhÔrÖòÑ ÕŠÖJ×Rh•hÕjµiõkÖº¤u[ë‘ÖçZ/´~Õår¹¹“¹Ó¸s¸†Ü•\Sî6®ךkËuâzpƒ¸áÜxn:WÁ-ç6p{¸'¹—¸7¸¹_qàþÊýâ½ÍÓçMçÍä-âñVñÌx»xxŽ%¤fR†Ô2jµ™ÚKÙSŽ”;åCS2*ŠJ£ò)%UAµPÔ)ê*u›¦¾¢^P*êwh=‰Ö§…ôzmD¯£7Ñ;hKÚ–>B»Ó>t0FÇÐIt&­ K麙î¢éÓô%ú&ý€~LMOÿJjs´u´ßÑÖÓjÏÔ^ ½T{¥öí­Ú»µ÷kÒvÖöÔö×–h˵ãµSµs´‹´+´ëµÛ´{µOhŸÓ¾ª}GûSíϵ¿Õ~©­Òþ·OçMwu¦êL×™£c ³\gŽ™Ž¹Ž…ŽŽƒŽ›ŽH'HG¦­ƒt2tòuJtªušt:utNé\Ô¹¡s_gXç+ït~Ña&´'¼=aòÁ„'ÌŸ°dŠ ë'lÙ(ò ñswu ˜6Ûjïþ9óæÍÿëÎb“iGBÆŸL3uöwwõž6“ýäì)òñröX9m#;ÚÓÓÝqš«gˆ›ÿ4''g'õ´}žÎÓ6¹{ºûøˆ‚¦ÍÞ8gš¡ÁâìÁpå´^Î~¢ùÓܽ]ܽÝB¦9x;MÛååìê0ÍËÁÉYMÀÔË=À/dÚRwï?gït÷:è?mÌ1§í™L3Ÿ¶×Ù5ÐÓÁïïOÌýD¦ÎžÞ¢gß@OO‘ÄÙÛÕÙÏÁÉÝ‘½rö÷»íèååà.òvõsvpö»9.—ƒ_€»ƒ§“»‹‹¿£³»T‡ŽÎŽcÇŽ~"oDZãæ#~¬bÖ]ÇŽ[DŽŽ¬ž,^Í]ïåàÈupqw_l``düêÃÒå¯>,Y¶wŒî«KC#͇ÅK¶Š\EÞί˜Zù¹{»¾º2^lá(b¡áe6&Í«GË ÖÿÇD#“q–ã¼—,ßûúÃe;_“`±ÁÒqŽK¬Ü=Æ%36´<âàgöçÇÙ-~õa™Á8Ÿq†KŒ÷¾&ä+ò&KÆÙ.ßùš‹ ŒÆÙŽó7^b96Àì?4¸Üpœß8c£qÆKÆïü;cƒe¯ž.^¾õõu™íwt÷s ôrñt³^jùºzÿTûò%ÿ6vÙ¸@Fã-ÈÐd×*Æ%·ùbãm#c2.ž±‘ÕØ$³ÿ°âò¥ÿ[óF㌗Ž3^b0ÎiÜÔ‹M¶ÿM&Ë·°–g7Îw¹‘éë¨0·ÓÒq6Kïr dUáèåéø§ZÿTúøªMŒ­ÿZÝ–¿ëv¹ÕßÉ,_fÊÙaürÙ8ŒÆÑ°t\ž%†»^ÄâÅj{±ùëžd2.˜±±Õ"hÜ ËÆ—n4Îmé+nÆKÇ-yÅvñÒñ1††æÿ[›1®[·³3±ÒXnóß–¾|Ü,ËÆE0çó'ù%ã 6\bþ ^ló' ¶¾†-ƒÍ7ôr‹×5²lœ½Ñ8û¿–ùçê–š«¼âfè ‰jÿ¡?“Å›ÿŠÆ-Öìu¹–™Hþìú×g Eÿ¿î8þ9Ì{LfÏ1%»¾¶(6’û¿véíà#òðù¸±cÿºíú'@u¼tÖØâõyc„=ÙaîšgcÑ P#µF.ïׯ»±¾"{èö—´Á} |Íì`?Î_× cê7vý7ü—-^bdèÉ.Öß}L”€×¸û½öY¤¡uô/Þîcr…¼&Œ†«óØý×Wí~ÔyŒ¹ÓØÑƒM|ÎÞžlvwt×P•ŒIíü§öœÆÜÑ_“ùþbà9v#ÐÛM'¦š“™æ´iìdb¨9-Ñœ–Ž 4'Í#͕ѫéÇN6,;­ß 9iFn2;™inšinšjHoÔðÛ°\3ACl½†Ø&ÍÍMÍ3Í3S#Ítœ4ÖkDZ?Fsñ2 i3ÍM“WBhnšjäܨbƒ†Ñz&Ö/ÑL×6ÓÜ4Ó\™j„ب9mX¯™ QÝú1bKÖ¿’ZsÓLÃÁTÃ}£æ´A£‰ M¬W/eÓ²W²˜hhnÒ<3Ó,ÓTssã«y…lÐhbý2ÍtÍHÍMšgfšešjnn|5O£ M¬_®™®i¢²é•ê4Ë4ÕÜ4Õˆ´A£ …¬7ÖL׌4ÑÞôJušÕš¼Zƒæ™é+ hÔ³A³è1±T^MÐpؤyf¦Ñ§É«¥hž™jÜøJ$ ‡õ-™hHoz¥WæÐ<3Õ<3]ÙæëC¼ìØ 9YïÜèãl³ËÔ×e·™ŸëžMþn{7¸[l úýú)æÉéÏÏ<;û͹oÏ?¿øòÒ¯WTWG®,€é`»ÀL`!Ì[Ø f°ÁG°6ÁJ0€a/l†Å0,` Â,°„­°fƒlƒ¥0öÁv0‚¹°Ìã°6Àr˜Ö°6‚1ø+„`Pàn`ÐÀÞm„£`Ó€:p>„÷`ƒ'8À*˜ o€¼à¬=xHop„5 ¬…)ðh±Mv(ø€3¬ƒ©ð6pA ¾àëá}xx ƒ,H€0ȆDrH†HH(H…hHƒH‡XÈ€8È„x¨ƒPÇØÖ=Šá.ÛÀ÷C'ä°Mü-8ÐJø nÃ8íPU0 wà B”C <†j¸5Ð M Oá\†ÓÐõP eð \…“Ð P ŸÃ}¸ CÐ-Pàœ4B| ×á ôA3ÔÂCx_‰gáœ#‘D$)D*‘F¤D&‘Ed9D.‘Gä ¢€($Š%QL”¥DQNT•DQMÔµDQO4DÑL´­DÑNtDÑMô½DÑO ƒÄ1â8q‚8I §ˆÓÄâ,qŽ8O\ .—ˆËÄâ*q¸NÜ n·ˆÛÄâ.q¸O< ŸŸˆÏˆaâ1ñ„xJ|N|A|I|E|M<#¾!¾%ž/ˆïˆï‰ˆ‰—ÄOÄÏÄ/įÄo&TÄñ;Á£ÄÄ¿ˆ“@$IrH-’KòHФImR‡œ@¾A¾IN$ß"ß&ß!'‘ºä»$Ÿ|œLê‘úär*ù>ù) …ä4òCr:9ƒüˆü˜œIÎ"g“sȹ乀\H." ÈŤ!¹„\J‘ËÈå¤1iB® W’«ÈÕär-¹Ž\On 7’¦¤¹‰ÜLn!·’ÛÈí¤9¹ƒÜIî"w“{Ƚ¤iIZ‘ûÈýäÒš´!mɃ¤yˆ´'“äÒ‘t"IÒ•t#ÝÉ£¤éIz‘Þ¤ˆô!}I?ÒŸ É 2˜“!¤„ %¥¤Œ #ÃÉRNF’Qd4CÆ’qd<™@&’ˆL"“É2•L#ÓÉ 2“Ì"³É2—Ì#óIY@’E¤’,&KÈR²Œ,'+ÈJ²Š¬&kÈZ²Ž¬'ÈF²‰l&[ÈV²l';ÈN²‹ì&{È^²ì'ÈAòyœxGäàׂ0„waZ|¨ þ Ó­az ÌX3öÃŒ³0ã9|ëÁÇßÀLf.„™ö0³f¾€YÑ0«f†Ù›aö~˜ sÒaN Ì sÍaî̽ ó6À<3˜× ówÀ| hX°X‚oaáX8 ‹‚Á``ý°¸¡=zƒa*,À’aXú!,퀥§Áh!£¯Àèß°ì,û–/‡å¾`¼ŒcÁø$ÿ LvI¬ `…Vœ€•»aåXå«ù°:V߆5ó`Í3XëæÁ:X÷Öo \Ø €f°ñ8˜nÓ20;›¦Â¦“°ù0lö…ͿÖ£°u›E`Û)Øî ÛÁ|.˜×Ã쨃$쌀ù°kìúvŸ„=»`OìeSÒK°8 7ÁÒ,ŸÕ*°ê«`_ ì§a4xÈÁz:Xïën°Y 6·ÀÖlƒƒ[áà]°ÛvOáP!Ø‚}ž‡oƒƒ8<ƒ#iàh ŽßÓNpò§jpº N/ÁYœÀ9\vƒË]p­·5àÖîÁ½ŽúÁQèûúþ€~ô¿ ýÝ0À‡t<ƒwàØ8vŽ[Á s8¡„Õprœ<CïÁP8 ÅÃP:œš§Á©Q8ÝgfÙ‡pÖζÁ9]8— ç§Âù›pþ!\Xúáâv¸8 —ÖÀ¥,¸¼ .o‚Ë÷áŠ%\ù ®zÀµ`¸†áz ܘ 7uàfÜü nþ·~ƒÛ"¸}îXÃÝÍpW÷îÁýáþ¸ÿˆàÁ<4…‡×à“ýðéø´>­„GVðè1<ú>s‚ϾƒaoþÁã?àI çYðB^tÀwÎðý[ð}1ü ?ˆáÇ™ðãMxy^þ?ÕÃÏóà—ðËø¥~Ý¿ž‚ßæÂog‡þ¨ `¤~w„߇€ÙL0O`T̆?dð/Oø÷"ø· üÛþý ±Š`벉àØZ“ ­oqÊDFJq›êG大/'ëú¨nà |‰³,@*qs² 1FôÞ†°ô&¡Ê‹B7óó¦ÑJ¦IL݉ɓ!3zt7¥Û‚ÌdÒ ±´˜b§7ñúñîĤÄÖª‹‰‘}Jþ¡y¶Û&YuY/˜Ç8†ogf†‡Ú&英’² ΫÎMÉOËöbm.Vð:æåúdø"™>ò“DíK¤Å8“ ÃÙ|LájL3Õ܉ªxÆû¥ª_A¨Dª}|fª”W_—-œËÔ0NÉËC9ú¨H‘Ñ•L+˜#2ª2®0"S‚yL¢^J”«ںÀIõ‘4À\â%ó ËP ŠL–§‰3$©Dû­÷ë¼Ú tRˆªæçÕçd—§è³ü‘B5eˆ¸4ŒM‡9ªéüô”ì¤DWgIm„L…öFÈÄÑR즠¤JsQ3©þžÒÜD”{n2Î2“X«9)(›´ð\4@ãêûSëí<%Û7 RÑÉ6!î–¡,ÇÝò[*n îsTÓ±ßÖÌÕ/¢ ¶‚©Ÿ†n~Úœá’-LÌ…” ýÊReÙ)³¾å6‚]­íE›Ñ*šyïáBÌéi/¨kT•+«jÏÒc¦—ŒÊIº%#æ#sùL¤˜w2¡  iDˆ·+Ãezgw>öïB¥ú¨X‘ÙT¤§d†ÄÔåø"éwŒÌR=f1ceøalÜ8Ö¬2%µ'5$•!…¢¢¥OÀ³õ¾e¦5ع³×=ŒBBånIŠH W›xPIíK—f>ÃXâ*=<o»ü 8÷RªþÄßßDÊ-%ñ¢[Uô’3²Luƒ?jM!ãð°U,êpƒ’Ú&ËG7iÕn£yywÒYŒÚRŒïh2ªJæ26bޣؼp´K¡dbãv^¸’Z“*)C?ÒªYNíãæó&Ž,bµÑ‚;Ûqn‹X9éùKûr¦&ë6²ªSñ¹h½÷h}X˜q¼õÎø)ïºYÒÒØ\_܃úQwH»gW•Oî¶‚ãy%Ùå%´nSE©¢¥c Ö2<ì˜0_ð_ ÞØf)­ë|Ú¿ÊÑ| ² rr ð9µÑ6²¬z!îÐbÁ »¬$#K!èæaê¼­áê}ö „,P­jJ-¡Z†§òCRåÖ1¡a}™Ä=ò¢—ªæpÌT<£Ã-âeÝV(Î! xŒrtWªz“bñ+¯VVèKœÿ%§¨ó™÷ æ1fê³™xžôüW,À“}˼+ ñ‡ÏÎc>`¸‡6¯sr)oŠŽ‡Þ`þmß…›5­ãª),­'8x˜ƒ_ÈùxÖqn’˜€âí•Ó+T]¢b“m%nòíýP*3)e"º%K~DÈPÎõ>9ެäÔBkÓ™wï.Åä©Öâ¾Fáv Z(::\ì'÷F´±å'ø-̸sïÄÀÁ}Â1øªÁ{YhX¨á+óŽ'F!$ ”23˜ =f6ö‹(ˆ)‹ùYõÉ©(å$±8iSý ù²˜ñdÆRÙ@¡¥r¹A ³JÊ0Y–‹îÑx…gã óŸW–c9âQ"WsÄBrI÷dÝ•*‚¯*£Ð¹ìe^~v~jk*K;\LµÆçÇ)"‹eY®hÍ|IòUb.³VÌëBùQíéÑ”®øŸ ù>ÅRÝÉ‚’…¤¬[e\‚MÚ „iΰ/qƒx1A¡áÁ(IS¤é6Ö™‘ 2öÜai¶Ãy!bH´°ÖèØÞsÛ¾vþa.ú¾÷ü§tHÑzÓ­^ÆHßYnµðüa·>ÃÚøãÓǃÛõ ‘r­Ž±^…’"¼§^5ñܤÃ8ðÉd]i–ê~VRÊBtc†ü pÔÒ@û#"vÇÐJWŠc‹xë’ÂrÐE/¦šŽ–Ë;Yìé|µðÇøm³/æZØûYÙ ïS1ÉVAna–}óc· Þàäáó/œ>g§Zã÷ñ4l÷½÷cËsBóë˛籢ՋzCš=NÚÔ-@Ì´;lSðþH?‰_@€›Û¡}È*r«Ûß{ôGÖVèeõ‹Î>º­k t½ ß-ªÇêhõùK“u Æm [;–•=q Óè—† §.Ÿmù½@_z=°Ú|!š™­[È”‰y£³"ÙÈö²¯ëY—“Ùñär¨{¿àU‡b1:G–¯8xÀ{OøRD;†³áI¼÷¼jRµñ$ÖùC‡'ë~ŠGU«ùº/ªì¼²œ¦2ïÌc´X%LºbøÍ™¡Êþn!ÃN‹©i,-Áù”enT&ê¤u?U}Am`>ã#ÿ¸0yT øh¸'òD>ÙÁÅ5A—ÑZ÷Ö9qçñ…º£[ñ6ûΪ'>cÃÍuþ Ó¼3ʺ֒|¹w‘ À7W^ˆè2eQY³}å®û|ì|…¾öQ®‰+iGÌUÚ¾Qxó”IJDºKã«x"O°…Ki;Tësø%Uëó>„»ù• …‰•è:™ÝU~®¾ù<º‚:e­>5ŽÝK«°Zü”)óîDeËÑFzÔŒBË£äk£5ùiUŠ4ݦUAZ¬f22ªðÔ ?š»Ûš¡‚eIÉMÖ‚»:îc£V±¦“¨¾Á«ù"ž5‡ý™ˆöáÙ ‡´èŒØ”„THc„R",Ϙ.ÃÒ^ô‘8i„,L"Š:È‚x!öãU§§W ðTëþ¥ÒÂÅtO·+ÏàŽV³¢þYÂýUÀIT-¼1íâ¾#ns2TSøù)YI¹ˆ®È µ2)²ŽŽÞΪ.ZAmN‘(ÐiRõ]ƒUéY±òA,'&ÑåŠÂꆠbwïSá×lôßè¶[¬?VºÆ+ðѶ´êIè†÷gØì~UÕd]FuT¥Ço[C³-8#0SÏ'Û'Í—U-^¸~£y•ó•£BqHˆ$&ö¨wX0 FA¹áÁ´.cºßç¨Ë”}쿽û ²ó¸ µ®°µ¢ ;×§0üt½}É~Y¨74Uef%f$¦ eB^b:jA튺ª†jED5±e²zš‰Âoˆþ$fÑ_5„¹îYëÄp—ì©é.ËÈëêâ4üŒ¶º©·®RâU (r˵CN´…·›Ý.‡ËϬ?2fE#탑=Ì>ÃKYÙ½â—kyÍ…½íw®´~5tí˜÷ñGlœÐD û9µ&g· Úêƒoú÷Yê][…ß<Œ— jÙT•Îc¾9ÃïB½â&Ï“¶õóÃE³½?v´s9²?ÀÙ"ûB×ú}}? ¬ž×|×ÑÛÑÝWr†c >ÿØúEåCù,h¨ð•!Ò•,\>VÃ%M —÷_‡Ë‹ÿ† ‹l㈱ȢFöšT¶òºEcoü1õ)*”æ®`ÙéËKCKT‹‹ÃJ'¡ Øä‘ð5|•¯;?¿Ïà%$DF'&Æ!ý$OŽHcPf``ªïÔU{l´¨w|l+-,O­{kêT2ŽdÎs±oÔVõ„¯{¿:'³¿sæðë W±ÀÎ×-f^‚:YÈÚñÅ"Ì)ÁsÛÇ:ígÄÿÆg2Cx]ñ¹ñ¹QŠÈôt˜f–Q;}62ËgaÞùMõWÝ‚î U×Ð)4 ns­øTì¤ËxQؕȋ‡È‚…¦„dRØebu-½f1‡çT­;µ[xuÓsgL¢'¿ÓÔÞDc{ ÍÍ;“FOÄulùøF=qš5I&Ìg²±<;1%F-w¶›ÉÕûgÅäÇç£,¶£ÉÉhJ¡Ì)Õš!ïý¿Á´ë%ǤD§D¥‡¤G¥£t”‘§hÁïâ;z5×Ò3jShM04É'î²Y~„ÃgƒÕ Ýf+ ¢Ðþøøê,¦ ‚““Ùú¥I›Sx³+%.9>9>%^?SžƒbéÈȘpXн<ûO¥Ã1fÞ§WSuóÊ…ÞšL}Ej~2[e*˜Ã2^[bN’¡¨H™,œí('ꩌ©¸dçpï¨=¡ú^Qcµt·jDI|ùÿÑÍQaU.½Ì-x”Í*G*¦Ä¢Y4ÃöZ›£C½|l·{®C¦È¦Ü§/¤>ºEÝu܃ë'j¸6‹©‡1,\7ÐÌeŠYÿ© ^ƒ‰»M×ÚåY½è¾:YÉZUÿfûǬêTƒ|t;'çSõB»˜z¤™;êH ò•ÅdVD äM¡lMâàãÐáuÃù[øu:f­k¬µ¤Tctv4’ iŒ„ÏbÆOo9ô"„òôQiNF_k+{)Õ—Ql•!Χ‡0¶z³q~\vB6ÊÖG%¹™©ì¨-Rª,!S^zOe¾ÕËõÊ”¥³é&3/·’m§¢õ¾b"ò]RcÒ‘~JË*hg[öïõŠ:SÒŠYš0¨ŽJ־鼜¤Ü$¶é®Ï–±M›/…¬da汬…#”yjx6¢Uß°¶Ø/q–o’Œí7Qé•OBŸoúÏøt²î3ÕÎ+|‰,ò¦’Ù¡nú¢$B¡Ñ>á^̬QŽ3uôvTRè#e~¶ºéÏIÊW7ýJ15À6ý]†8q´WOÁÃ~ª3 srúSôÿÜPøò%Gµxd2?71¥¢Ú„Ü(¶à ð²<À˜1FzØú)-j\æ†gè;T“’Z­ÞÓ»Mã]TeɯÓï­;iŠüõ‘L-JŒEhlß댒ڟ$Ë6xÁÈpŠÞ‹w_»\y-M_É((—+\÷¶Sð ÷~CYU[PŸ¤¯` ¥TmBv ëXáá~ž±1á!aÁ²b=QgH#ÊCùyµI,š¥YT-*«;ø ó‘ÃcL¼ŽÈ£ÆëKñÇ Jž–—ž¡È+>Äo}ÅLKIŽA1ú($:vP²’|pœ¸1ŒÍÕÿ9JÕt~^J¦zÓ³2+ÔVȤ«1%µHd1å§ ö%KsP›(”œ™‘QQÖUØ„èîR7¶Òòb»Àˆˆ½êÜ  ö&I ѧQµ] E½ˆ>]äc,d\)´7*jO4;H¤ |“½’ÊP›>>Ba§sköðÝc%9í^e…ì‘HflNߥ¢“ˆÝ#,¥ê6C^¯šp‘¸2Œƒ?çà#«ù±ÉRŸ¨ƒaúÞêÒ-=)e º=+ÒA8Z@y>>ú Ö{‰I<¿µö›Y;÷¸Ú öiµõ50¸š™Èpl·›ì?TV!˜ø»©{¿«±g#æ‹e±çƒ‚b|å"ææk=F“Yš˜¢Y£dszyYöI5öŠÅÔéÄìÈÆ• &zÓ˜&æ#ÕÑEqc;S¥ùÇRØ! bêX¬"¤e¶mTÃs¡j%^:º’«à=ÆùÙÕ˜À}Êã9Y'²Ùü’‚ßÁù^~¾žÞ~5u•5u¾•^êöS—ðÐ%âô5Üwˆ?hýü»NQ[X/ÒïCmymÕßÍÑëœ÷¼¦'»õë£yƒw×óïôlûçÌsªrεEú6è¨ü÷¼çzÖ¶ßÍñv wF¶úè`®KÍp-ÿáåÍ&˶mYa²õÚgÃW®³|ßáàŸ˜5üMEµêÆz…>W®SÞ-VV¢ÏÆ®ï–Ö^/¢s¨­‰¾1Þ!Þ!R'´—f6±õsHÀ–à«AEþhͰÎdQp¤:¤:¤*æJ"«Ï«äü[Ô¨1¶P±\öc#ánÕø ñò w«·^¶peTnZNjjrQFa*›×J²¤Bõ®ñѨ€ÐHi¤,ÞAÓµ*)4õÓª ñ°ã*²{×èëkñâœ[Õ>ãČ͗#/tØÇjû2‹ëÇìŸ\«¯(¬®+)ËkB ôM‹ÁUF›79gzT­8~¸ó€)Z®?ÿòÞ_?=Wqå®àâ¶ß3è:ÝY{Sš£çáæŠ,Ðþ:»óÝg+ZêNVöê•wç¦Ó£Srø^å­¨‡î¯kìímtµ±p;lb/Ø´Žá5Yž6Û}Б--i³Ý—î_ªëzzŠU»5³°t„m””“Ð=¬såÌõfLäÈ»ü34á…¥¼µéácÅÜ×êíºñr®€bfí°dÞ[Q¶·ÏCØà_u1fNWx!µUeÅ7Êò8†ð$t3¿§¦„Öý´(¯0½­!ð–Uùí÷²Î¡ýRqQ€¿8$ T1§p±`">(+ù ˜@W8Weü+#›¶òXâ7®à)WUê=þhÒVU™¢¥ù ¶â=UÙŸÂQ‰ðü°4—½a‘‡>Åë°éÏÚî¡ú?¬¸?Ãr £‹ÀÃ]ê!1-‰Õkÿ®¹þ:¢‡Oï]¾ÚnárC!³‰Ùà WMaÓà“_Ufü« =çÑ9zЭ훀»G™¸9=#))]‘ŒP[Ÿ¤ÇD¹Z¹'âŸð• Ýî]ëמÛu÷Îùó·îï>·flã Ÿa!/ba¶åè¡h} É¹§©¼¬±>@éÃöµlã’€P"¢£bÒ3ª›O¶±¿ò1šu¡¯Xzod1ÿzH©ZG3¬Ë,Wúݯ û"ã±ëu^›BèêJRezMQM‘¢M½úТ²«%[ŠCÊÐ ÖG)t*´CT$*òMß’¤v¡j9_•†%Ü+¬ï°§”ʘ±eÿÔ/ÕT£ç&ᚇη&ëžÀ ðgü³¨,¡<’Ö-¹ضwÓ”å{·­÷ Î(wxI2ԯȤ² ·®À÷Vvô û:*Ï «èXhŸw]p©8×^I랸ÞWÑrrʧÛO-²¶—x¸ ¼|¤¾»qz·{."úr½¹«ÔÕÏOèå%’nö«™YOîgU¼ÞÖË×ÅÎt©Û,Äh#F·eÎçwØV÷È-Ð[yQÔäs×ÿjÄ=ôú%ïQÕ…ê µÍ·Î¨ üÊ|øÿeq‘‹ÚâªøNìǯ󹵣Ãù´…~jlr"ÛÕ§¥¦¦å9»æ…0>5Åd•Õ)ŠZºkš+ÚQ›$ÄÅøøxûFFGGGEÇ'èŲÿbâh¬»ûÿ–àDU«ÊŸâû:IÂ=Q J“dö±í6²CžAvÛOzèU¶æÖ¡T[ùÅÁ¢èÔ‹êJz/±swGý¦ê®%ÐU¿Õ}ÍÁñؘŸsµ°½¥¯÷Bù%õyͨµ†5”¹5í.³Bô"³ÆŽ…uå……åù1¹ÒBax~lʤë{kÎõïÛbféo)mÛÈmíõ³·ñ½ü=¼KkëËJkký*Ô½T<*Á3/©V¸ñ>Gå‰Cù«öØó˜«£{¸Ûq#³ò>^ù’b¶\â3Ñ<ŸsYóá5O8­ŒÿNmeKïͧMc›Zø]—K^é÷-Ý_ª÷‰y•[õºò-9kÑ,4#ÌØg§ÈÜËuãú/?½õ0(·ü0À1âÿÅhVÌ‹ÿ× Q/ý_¿ø#ÜÄ?4ª›ž†Âõ÷+E ŵýQ7Ão ¢{bzãú"1èÅà]|À /2ÿÚÚòŠÚuûúûYžÐ¥:TG aüæMÕ›íœÓÛüÕn¶ šYÃLÄoã Ïš¿9}V80pµê6¢ñbüó3g–ùÜ­¾aŠºŒ¤´¤táeœÁÝÄ“;vHsÜþaäêî¾oŸçZ¶'2o³èî«êi¤Û·x÷#úûǘƒùØ„™ßev0öÌ2f³Ÿ±ÄK™ÙØñÆ`^÷ !³Ze¯NPø'8%ØJvû»zú Ú% áøÉ¢ÁÆVau}SqyÂXóûÉC?¸ÁÁ[UŸðñ^JMNÉhýB/2C$ bs‚3!yb>ôcSã3ëÛ£Ã:˜r9±ͦçí\·:X’Qê%ð( Èf[oY¸ŸsŸÿÝá[UÇ…½=%§Ñ=tKÜk=hß½·ŒÑ)QóÅë”Ã&½$IrPŒw˜»~tHœEÐÁeI‘²$=>/6OÖÝÊ–·TF|idIHÕQý ÏÂð"¶ÒÈW”VJsì3„Né¹¾QizÕÊŒîŒÖô¼TA—I ‚¤’0‘¿ÀÏË/00<:N¯’BåéÕ9uéÊÔ”C—„K¥Áá©!éA‚ì£ižÈ‡£œKÄG›ƒËÃ3C-–†ûËú#…-ѵreXN´Þ¿Ð»ÈCQ’päG懕d¥) 5 ii™ÙYiM¥¯yÆéH‰ÿ‡žËXרv6&•|š~|rLZTFd–¾W¥wuBš¤$¨(Ñj̇U©qÞ]½nþá,ÚcSãÒS““ÒR§Oµ·Ü¾¨6JämY;öÕ‡Yª{|7ž=ó¶jX’ŒÁÛó>d¦ZZÕ8 ‹üa-A˜¹z¼,(V$"ýVÔ’_]ÞT«¬j¼–©·«ßn¤~ÅàŸõ#îÖ+rR„U º¢HYÙäSk«2†Ì÷|›qºE¿(ÚÙ\X…ç±ý=àÅ•4s„iã?ÜÈv¤ÓN³%VßàEÇ2«‹Â’‚º¬&õîþy6ÄÚ^!°è 'ã6>#ÚŠEŒÏìÃÞbDØG]wÅ«ýßY„1ªú¿3î ¶¯œÙ€*ˆkÃx×0§NeÄ¿ÆÜã¡ía l‘,RÃòÑ=¡ž§Åï2…êýŸÈ±¯§Eä¡K4VP¨•%ŸˆKѳöŽW§`qu§Ô¥æwµÕö j¤ +wWúä©_–( K;­«×¬Ýãkã*ô:á³’Þ¤VVTµÏpa3¶éÁ5U“PåãÇxþç“uÃñ •6Ÿy‡u-¾5ÓŸ7;×R$qK$íË”Õ"º¦¤´î„EûzfÂZf†²8ÍW8í^13+Y‚BPtbL|”85W_Ô©/#À{øÁêqSx%,͉ê/Ðîf¼kU½¿± ¯ÿ­ò >ˆûø²!næëìð·BsžkY@“ÛÙ€“ˆþúÆ…ÏÚ%¥ž~¡Yz¸B"Ì•¥E¢(Úã —í.ÛW{ó†Ê‡Õ—”ýÙƒIÝú‘xß%~MÅx‰ÏfóÙO ¼­”ƒ ˜9|ü…ð„¼/«nx׆Fß5Å+â;C‹£•±yˆ.-(ª¨(ÃCb£‚…G$¡q®‰èdZ¹r0S™Vˆ²éò€Rÿ€@yš$C,(>柸Ï=I’z¤083$-‚íñ%!¾¢iunvJV¹°]Q˜Ú˜’4;ÌÒ˳bsó2 ™·Ô`eö”«Zëpt áÕ©jŸ™Äc‡×%å¤_T^Rçää§ :73–ízbãc„±‘ñ‘(†) -®()®hu®=èp8ÀÙWàl!± AOãÉYÕsx Òˆ-‰q1±ûô¥Ì:9Cûì9„ôÃ#Ó3R’SS3„é9)(‹.•åúˆÅ¾Ž Þ}Cm ·u7 ?)Ç;’ò2Og°Äêôμ3H¨üÁÑxkõ{’Ö?“0‡Àï«ìÿ*†Ñú;ÐÆs*nWo±ùt,­²Ä3ïü܈y9ªÕªx>æPîÕ‡˳é‹îæ”y´(ò¨¯»O°#:Œ¸µ»ÔˆJ¥7i¦‰Z´¯ÏÿZʼÇ;çÒ1O/m|JÝÉ­Ëm®i¨Vv ~ÔÕ^ì×áS̼yƒÆ‰Ô°¼Ç¡pÍl]È7>\Á6ûC×óé&æÿÙž´muuY- ѱªT>3 Ï)ŠL“"ý °pqhŽ´(\ˆÎU»oýSÜÊbjk ç«òÑÉÔòâÁŒW ,õóü "©þˆ…H ñ?C¤ µ)%iiø~/§Ÿ\ëÄ9î)Ò‡‚àŒà±Á¡_ß²œ¢´L¥°£°(µ1 í‹ó ¶ŽÇJœö/ ,¯(--ÏŽ-ŒV ‚ã*ЉæDE\§DU›ƒè²Â¢ŠªÐ€ðàØh±Ð!Tï¾Ëî¬kòj‰èMú¶1¾ ¾ƒu€âØÜÿtv°DÊ:ÀØ—g—à´,/Å)%“Ð ñËy§0÷…Ý©ðã“u‰Àñ;|ÝŸÖ]ë¼qÂóäž~!óæÊjP…~gcͱÆjYH|||l¬@÷g —‡†Nñ+©ªW7œ²ìÜ`la½ÑªØë“­y pDëª"¶Úؼa`;ž¸\xɾÂ9Ñݽö¹¸³HMËH°l ò3òò§”ùxxZœ³ðôô±{Çĵë. fâ~:áÑkÇ[×è®<ê;ÅÍÃÓÅÙ¹ìÜ.{cxª¥ÛjªÛÔÍ þûe]@ñÿ¸çˆëb؆#‘õߨ*ïzc×¹?«¼@÷£ÿs¯×ªzðQXV92©’@ÏqÞsõKtc¾%r¸¸í±pf¨±½<¢Ñî³h±?æC]…ÍMg†Z1ð›4v0À2“ñ¾üá†Ë83ÎöÓŒŒìÃNØ­sž'ŽÜ +‰ªÅ¹õØ­¢¼6¦X½ííWqùö­œ¬òxd1[1ÜiŒ6óÎêþ·zZ šš„'N6|ŠÐל۶ 2<ø­õ®ö{ý6;z8zKØtãêWÙz¢úQËqaU{uQkµ•ð—|'žÕGÉuµ‘á_Lë>.õ KóœÊð¦1]³{/wõ75Ÿ¨ˆn£ü„ÜØ¢¢è¢øÔ*3Ú˘Ÿÿàéõó~TðÓƒS¤HF3\†Záæ_ÑÜY|­jPPs²µ±¥¡äÄôØü°ÜØš¨1·ÕgÝ/|Q’—•‡ ô‹Ãr¥‘±!!f3[ý¶\^‰ókñÛlÌý’3²Ì?¸ÝÍß¹ ·âZßÞÈ–¸§4ÎàÅŸª ¨µÙ–Y#+ä|ÄÂú”cñdKÜ=íì½×£µ4£ÿx>~óZGÕµVAíæfŸ èè8ŽuÀ=üÛÆÌæ 7óÍ«Ž<Á«çŸ,.²nªÎÊx/ó6?鳪Žˆîm8b!ô¡ØJn¼šù]: Þ†™Î†Ë»ê8ô^ÉÝÁcÞfVryøÍŸðÄÔ1(²&X1¯št~›==øÍd]ñía>Ú>ö#‰U½ÔåÆÎã§÷/]éud[´ (!*E¢ˆ¬Ø²DZ·ãóøîMÌÔ)Ë9ˆ£2K ¥ e!…HßWäs¸ÝëôŸ`âTà c£Ð£Ú;gg.­+þm ¶áÖ”¯·ž›±ù€ïoAKä!dF«vЊýÚj[îãåÍÁÅ“TÓ¿Ÿ¬ûûÈiU_÷7üáèù`êrBE$ D1ñ1L¨XïèÎðˆÃêïgÙ*©Ã©~9HJËÏ´?¨>¡‡M™ù<´5\¶+Z’ 'VePÝxן·‡!=ƒ`‹Þ¶¸”A!ŽÄS­¨Jž’š*M;B—à° ^œKœT. r‹4gûZ–ðt/ÍÌT žòðLT&Ë3 G1~|¼ßâ2·Ô ÇC#“øç°ð$Eâtq–®^@®_z kwWWé6º†—SW¨(C¹(?N]¡×¬`£íª©-¹Çâ¯F%èÃŽlwqñÀŇ7'ë>Ãeª|¶ÑŒ“#:"!½Fˆ)ê’[½™@÷þ;‘“$_VT ÈÍKF)‰)ÂÄ´Ä4”Jç”å––åI}^”ÁѰhŸZ÷YXDdpðÇZQGmu~mƒ Ý#7¼ŠmÞó3ÊÊhFk¢â££¢%Qáñaˆ’—W–(nT¨›JU÷I"Gõß _:Iý×ï—Z¾ÇøK­¹6ÔÓA.³’úûO“üxÿôë&œIáE_p(f‘!¯þ§Ÿ:©9§ž»Ï"¸nd>_´Ö/hÚŽÜkeWio^Ò ¥¨Â­]܇†Qï±Ü_é¿}+|dæˆ߆·qÚöæCy[‘>cɼÏÌ`ìÍÛ*­…EnÁÎó¡Þï!¦/¸ô†]e{ð}x*žŽí/K/û Cš$ÅGZéÃÛùÛò,!ÍX¬`ã›Þž#ʾÿ&¾û¥ð!ô9-á xòP§Ø®{,¬!ù~¾¢’Àªê²Òªª€2‘Pðî–ÅxY³Wó$„µpç“uyÈ"œ À© ´59$‰Öý>Å6ɦ£ ¾–6Û-\f!u‡ÚåçvZ_ó¹ƒòQIRYR{ò¹äuçÃÓûÀ|WOóæí=ûÄðlÔBã, ®£âà¬ULÇ»ÄJ#¤Ò WùDÏÀ<ÝßJ²RN ŽñðdTškH¾;:…oêímÊLÜò3Þ+Ðý¸®î¦®×zlû&ø÷?|ϹòO Ķïý}Ñø¢JÀ–ö ºçßæà%lj2رgÙÊ󻇟^¹4üp×Ð2aäQ~ƒÕ: ?O;?qni¸0´&²µÑ=Õ5]jžª¬F<¹‘@ê#‡Õ®-ßêÐ!+‹.ûSC=ÝCC‡z,…Iîü¦Z/WW/o7ïÚææÚšf6k-’÷ã(u¸ö/Ÿ„žn{Šu?¬ûpðB¾­™“Ï^t¹KjƒÚbë¿§±‚§ûæGØžœ9Õ‰"¹Óºwœ½rm¦l²Ûá](®ª.PÖ$ ÿ_u×ʵ%ÈÌÜMœŒ‚æ²&1jc4K,±Æ»bTšT¥HïEøiR–Þ{Vì½Ål‰‰5š{?rïÿÍ.KÑeY¬ùó<Ú 3§¼ç|ïyOœF$àt~9);P*Jð s w 1´ ˜¥ù­±û{ßU«çöžY¾òäžü¸š“ÚùKŠí÷¡Ýh{lanFjBfÆ?©âq¨Q´QP ÁŒãL3##‹må3Sá½2í+.äfZá>$A)F›‡ >Í `8qŠÞçÕÿÈ…ù…GE"­b±çzk{'S{çà+‘«y–{Š.ÒºXž[Uj–®ãéà)J;¦aB5³”:ÏÔL[GY~ÄLÏös§üºÀ¹q:«èK 쬈eôÅj2züb ·P¤œCéÖœ*áaŒ®¹•¨†jÔÁqg¾ÞÁÓ1vÎq))ÑI9i¢”¡…³52côs×mßžŸR]¤ýÔ?ƒ/'XcV3‰¶ YGb7ä üÑŠ¨I†¢Xëh—|ëI¸¯fu º8§øÁÞ} ¢r×r›b‘sª[”y2c6—ËZ¹ ýÈ`fÕLm£²7hÛçrÖûÜ÷£SÌo»ŸÉIö\Ÿ¡Ýœ’Fp¦îÖ¿÷§†)BZ>Lukr݉ð(ñá5´÷ÞE¾ß^u>g1ÛÔf.b†-9F<±ëž#·ŽZÌ‹ŦP˜_˜W°iÌÚðu$Ii~ó~SW¾‡÷ö]Š‹Å]ÐÀßò9¼Â_J‡áA°üùÁ"Xˆ¿„¯ñlQ Gþ¿'î‹GâѸ'ÖÆCðPÜ ´aŒ…^ð|+j5 t¤^­\ˆ¯`NÏ„ã*Æ)Ï^TÅ ž &›Q‡]G(»ƒÑ*:# >0µi¼ä@.¹þqÔœÆÃµÇP¿l¾Æ Á3¹ô°°4Ð>´¢ÍøÈ@ºpYIUÙðµ¾k5¾†çÕᖆ…©´û»^qŒ×”M¥u<”–B©6ú†gü÷„16Fßhv.& y˜ïFʉ_§Ý„Å7{±ùIübn¾IÙ¬Yc»1KÌ ö‰àÀ°Æ¾4² pð\HðŒÏ¿Uö½WÅ­ÏʧWfúeºUi»í Øê_”½´Ð¶’ ª™%‡7ÏN±*GÅ(%&¯” §míÝ}\H„ðLØE®{È“8Ó;ÇIæVW#¯I]ÏkîxcÐ B âÙ*«q˜Â¶‰j>O4-Ü£¬?ðÏfƒnoeføæÜcÝe%ÕÛ?iê ß°FÉ#„jHIU«¾"´Évs+‚=ÂP:wi×`üö" [º(¡PÄ„nöµá­4²õôÕßÄØÀÂ×;$€'ófÊ~‹ç†“ö({ÿlçøœ8‡²Âsr¹½VÀ?É3r‰g(y~^®I>I§öA÷Tøobê+üw§{±n «a·"õ(¼ 'h,‡éCOßÞKãöq˜\¿LÓ(ƒ?¹[Ùtæ·ýƒKLK9–n` ”TçfO{v ó,XœØâ\;t®{r®Ç/ä\¿™Gá½79ÖÉš7âZÑ‹t~þI8TÈLбà{ÇÀ µâK}oݯÄ÷ø{Ò³ôfÏ:ÛIÏâ“ðlÎ)LƒuŒÜº~º^wè`ÊvT¡udqé¸5&î¶¶ÚöžÎ+Ò\5“Ë3’‹S’gj`a¾x™Žèó¾¶J dgké,‡q- ú‰r§­xÊi¯tè´ª:í·B2Tøà¤’!õ=P½K­W}/¶î€Âʰžì¡g>ªG<íÞì© õ&?>[ã¹·Å‘tèÈ:åÈG^È‘ÏðÇÞ0t".Ó§ÙeØ3Q¶Äiú°7šÝ†=“I§O³ã°76n'®ÓGî:M~ ^ðûc¤*=òz],Vµ^}ÊÉÏÕ7_Eî¸ë<á•øzÙeÎN.JÒíý†óûMµj¿Bsö¥ËáHM˜|aÑì¨zÞÕ&ó–\JpÔæ4ŸX/-vL†KÌóÞ«­­W;xl‰µÓvŒqN/7º8Û›å8Vúµý—ª,‹ç§ˆØqe9q)™½wéͽÖzš±všcnYBtÒÊOv°0^o7ÕFôô8dÍ @»«ôï–À@^ÁáÚIäè‘аë©Ðp©ÃаKå|þ¿Æ±Š2¦ÀRZÚTâÛêŸåÌMY-ž¸t·u´.yßï~Ý÷ÆZ¿ €÷«wƉöVåÿ†î¢ÓÎgÍØítL]ZñK¹æºìAË–f›DÎÕ2°­òÊwݽN ¿÷cž…Æíq\ÝAÄ=èUÓ¾_k”ºÝNdUí|fî”9­- Gê¥ácJ=Ð$€üÙaù]•ÂþÒBþ|¡‚¿ƒÿpì/*:ß!pƒP¡¶¬\–’0°Œü«/þKuÉ¿Èòq]]çŸ"¾SZ¿Z6O~µ²¦Â!8GòãÌãê¼ t!.‘#Ìͤ޴ºŽ<«¬Ú“I¿­y}âo<6/„ædÞsX8¯:ð/SâB¼G‡>ôØ£SY˜÷x!šÁ/ãØG]Têtö\#dÏvªûWë•DŽ̩¸'Òï–ùjh¬Ý¦z¤²3kÖ˜±G~¼tåè៯Ì:2FdÚµ¦|Ù¼¹zËç/ÔÛsàÀî=ûDÍYõ\½ÚŸÒò7“\À\Uë“—ç5Ï+ïß¾B¡A_X®ülâuzÊ!ƒ)n ÈœäœÐxˆêÙ;ÁYØÇ­Ý…½'8̹ޭü…f—¡Ø{‚ÓLì½òÉ÷¨X½5;ÑéšWãF{øÛ/œ¡ã`.›­ÊîÉo ¢À šf¬†‡á­g¬¤æ ‹_†Å¸óí7E_¡¹bŠØ«ÒãÁ^I ¹ý0•D‘m¯#¼_ç/ª2dr˜S ­1 ÁI¯¦[D1í;Å,h%ЉZECm‡ûÃFеÏÙ^rë¨r}Lð„þt+ ?T¯ …°ûj@œÿ“ª ¨jH99GÔ`Ö¯êPÀ9…¹ØyùY#­çntÊ,Ÿ”D/Ãð?‡Õ/Xì4¹‡à‰¯ÀCÎ ½]PðšÅˆñÝ J½µI©øªÐymR+Îx!µb£vÔŠ3¤jÅŸ7<äØOwQ7uQG´tQ?ÝEñtUî8;¤\;ð”’í^‰ó|ÙÐ_Eñ±¬Ñ8é‚)ŸëîCoéžzºgèãÑ^ϰ®´¹g8g­õ4í4ÇìÒĘ|¤U˜ìhn¼Þî›f$´½n;’àáp»ûç y×0XÀ±wöýn)@`-Rž°$±G”LÍ3A¦æ9¸5Ï„N©yÎyVÍ3A5Ï=Шˆ´Ö¤ú‰/ ¾^1!ŽßäšÛl?”“2{œ¾Ó‹}Ÿó½¹Iøî­¹é—ÊwîC¨Ò8S'Æ*b]è*&Žbÿã 6Ž”¯¹›;Ú„|ƒ½ÉCz’bbeÚÿ }Ž[<†Ñ£¬Wkœ¦=‘7ùãŠ<ƒÜö¼û©¾ðÑóT:öëxC§ ·ígòiÓys ç¡ÁhÆMWèË@*}»þš Œ#q‹ ”H¾–PÛ5º=1ÈD¾K¢üû §Ã©3êàÕГÛC x‡˜åLâMüǰD*º"!¡1ø…tZæËl„ïée¡¤ˆ/gøï¿ç") Ç4°Ì½|ý}üýÍýÉ—oþ2â]h[tti0“Ø&¥øa<kà÷6RÙéÑ ÞL#]Ow?òm½iýÏ(áÛlhyø$ÖÔ»=Œ0èk £ãa¡Ê°õŸ­jÂQh¼/Kî÷iX®ð<ªT íÉ×S8¿|Yðßp`ʯ„ù+5Z„Ÿà/8ÇÁŒãx µûμìÙ¸».˜›©iÂ\åŒ0Ò|Àâ0t×€‚ãx3ùÁ^(I {¤`ÿ6žÏ¿¥1‹ÂKñÿ4`>ËáapFÁŠ“ëìâ»Îäà›'& #p÷¿·â9ü{xäØÔ¥¿ïÖÂy5>ï¡B 1>×qÇCfC\»C×£íj0¥A—ƒ$ê*ñH²;†ÛE,gÒ)O­Ñx—×Fcì×8H£¦$`¤±žZ7ÚÂÓä™^¡`y(Û%Ã"Ã2Æ­`†Ì_øýBýä{+µWþƱæuzÆq‹û¢uΖæV殆h)Z&6Ê1Ë1+r.C'QiNÉÅ쥩ëâ\ɳÍÈtÏî³ÇçåÅ•¢´ß©Ô¤À¤Ð ~9Z…L¼68lp°³´×%ÈËË3êwÂîÝjè$\Sÿ‰£»S³Ã·!æîÁ/ð³k?]Ñ{Œc—"=´ÖÉÄDOÏz&šÅà·®øëü©ÒÓÚ¥×Ò€’Ò?âÁ—x ¹ý|m¨nÊ9`-Wݵ lÍLìM³È´ò*¼sü·«ù¹ÎæÙ¢„¶2IZét|+ êç=HÖ:Ë=IcŸ?zàTûyEL±í$¶ãJl­[t@ªoô¦ÐÀ¨€µƒ;ËH}S °'$+ïš¼Š…4xIìJízãøéŠá†ô!Hkþ—û\ùT…¤üÖÞ¥ÿ!"ÞØƒ/Rm&JŽêw|5 ŸtþªÜH›%»^Ll½ˆà¿Õín"ø»Zù*‚ÿV¿Æ]W+_FFpU•‡ÑÒú»÷p ]:×%¯:~Ï–&‘@ü3t7*4Iâuå`éãóq.z@ž+Auóç‡B;0ÕxhÕX%z<‹¬Ò=Rü2ý‡‘˜¬ÁžôŠêÓчO`€WëæeäÌùòÕMcŽOV¸ý™ÐÚÚS›Ê•OHÑ/ó»²%ó«ù± œÍ~K*Tê7t#³¤,#+¦í@ÇÍÍÕOÕÙ:1?À4 Ç\ú¶Ëªó)vku‹¦ûjrûÖü—u®ž–A&Aáù+ˆÑ‹«Í6Zš­Þë¶K\P ¸ÿgÈwC*˜7úÑäâMz¡0«Šƒh:esLP¢W,ûBÄ©î7[÷±ö ËÐîÖðo×2(.ûEÀy?À®Yû(ÿæß-]¡o¸pã,4 ÍÈžxÆÑQóÐwõ+„P~->x¬r_öutÁ[†w¦ž½wTÎh!–y/wvñuÙäE<Ð9Ê7‰±§¼°½F •pLœ™›[RR•´ý‚»„áqÌË•vÿç,v¸Ë¿«,Q‡¸J ªðF|µm]b¸ÿ××ð®ÐGXSÂ}‰ôO_6u×L›˜LàÖhòÖŸæükr¡N”ˆ}|0ª¸âjoè™=˜1Üàçn¦íìí HlBî‘ {' XÉ<=òÔÙÇÐ3¡ ¬¾ÏÉ#Ë¿Ãcgˆï§Ø?96oVÿÒr¡t@=Ε Ëšl‹ÖC¿a¶ødÇ>xæ|¡U¤Øbò¨D³wÖš»lX×»eœnc¬lèNËÎ9.9akB|‚(2"88D>Cb—<0(Q‘sl^ #n÷bKA½'k #)ø€äß{äà¢õ¨=þ•'´cq í?Ј§ØÒsbñÁ>ûñU -Ù調‰`ÃÝ:g=FÄMš¶aªm`r²¶¼=.eZ¨Ý~x^øûÆëh‘;7 U±‡ÅÇ 1ÿI‘‹¸Ç‘ZXRÛ‹½ üPŸPÈHÙN³;QETTE#ntv¡÷øG; €=DÑW“U'ìPÂý¡Kjë¨_ ¢RõkŸ»HnÉ«ž ä [ëRLªä>ªÉØío—N ÄþƒøÐCž¼Ý}•ëÒŒdÛtèÍ_«y9ÍX}z­™‹ ZÇ(vã”´ŒmÉ!¢§Ö>1‘¾Ž]e,ò@MS¬lÊ‚nª&ÁÖ M¦á˜ÖζRÑÊ”õPƒheÉÏ­Uî{²@¾£…Üògp‘ï T/¶ŽÁI.xXöÈÊEûgj¢3­)Á?~‰ðL„»â^îxƒÕ`1Õ‰½.4? .q»Pz{„â RBñ„â,ÙŽ9}wèÎg%¨Ýz¤Þ0IèÇ´¬ qw4À,®Ô$é#ËfŠi»$t›°$4Ýqî _`Ð4™ålj‰_qL²sªáF —•k lªîåÁ;U"øÿj÷Ø`aëç?'»B1_¢°[%;íiZ¸³Œ8¸«úÂ"j`Ÿ¾¦úεôëÝ=‰,•Ný˜ÙBèukè"O®ÃceyeÄí]$³lä¿O8iRÕ&I•-kJ«FÎô ÿ¥ËDB+X–M]hvcsá»ÒÔ*Ï«"¨LæØBÅùIžðÚæìDžèÀô:Xúæ—X’Ä;$Ù:Á!î!žG)@ ûI_ˆTzJpäg”bú~@Þ÷x5ä}¥ä}¼Î+Pi3¨¿çU êOWyP¿¡Ä–.e #})Rïåá<·³p‰wµ‡¦a–F“=<ÆûÈÜr|˜G¤4zÐ@cõ‹X4w‘µémSåm5nRôº»5Œ‘G8bVjàFÅÅ8’¾à[¼àPM€^FnÂÍm¼Ÿ,rM6Ê]cø©&;³5ò|¸PÅ]ÄYÔWhÔzÃÕë-ÝŒa¹ƒÜõyÖÙî'ÜðjªiiºÑÓpÃëò'8H¹Ù$tEºq‚ý´‡ùm)|PémE «5J8³ƒï·ãT‚ âhúLU‡“·9d€Ö}±EÖä·©mg LÚº`€§cN„våÜó—Aõ?B×¡Õ )ì¦b¬ “  —hG×aøƒB càÃü:ÑÃÆ~ß®ƒMñ<`Ãî]1ÕA “å šƒ¯5 ­¿Uëö½Æ\5î §(I åæ_¹Ýøñ-J–ŸHh›žÍMBJg'%Ùé•íf™í ˆ„vÎÛd‘{imãüjRˆÒ BHcÿISË«a(ƒa&|r|ƒ¸äJ UËžà&¦ZÒ ¥ãQè–8«ûXO´…ýsþ›- u~ò½?J̰wâËã Wvºïúœ>ÉÉQéÅ6±Æs\tt\D®ºë–¬FŒô¢P8¦d3AމAbìæB'–ˆ]‘‰îåE¯Fëª\ËÉ’¸¸Hæô1¶q6\Ÿìžœã›ŽÒEÙ(÷*wåâ;@g¢…±À*b* Mß½¸ÌPÿx¤…‡ÒÈÄÅuMÀÆ@MiÃ?yiCBÛäŸjø„ÀU­ŒZ…£ùÎ&XÓvØÌicó)¶Hõíb¹´Åî˜ÿÆ4aTµ$ÈÎç †ÁgšVe¶i†¡yá{%ÞfØS‡c¢âc3ŦGû$¢´˜À|¦‘.ÊzGÕäžÊ ÞS|ICW.˜¼Ã ”ÓP;¬¶7t°–·£ÙSÒݲ2~^RÃ[ =ؤ†YB)áÕRJx8Zc ¬­ip`NMiÛBb¯PHÄ»üE †‡kâ¡Xç›ýü—ú“JÓ5ž¿Å1¥ ±8­h¼5Ç}ó–Ç›"-V9:{š2l’?ò”n]#©lq¨ËVýýxdhB˜yìRb”´îø¡Í[âkÉ[*·Œ]µXßkšhÛ[öÊÞQIëwä"¼£Ôät¡Ñ,äÅŒæP Ú mN¯½P8­l'œ^“AÿlœÒ™ì×°ÒëÀ2±K!Ì,„é±=,X½ú׸ß{±±¼/¿˜küØ…’g¿Þô,ÇO­½Ó­µÙx Þíz›xåHNWÃTmV×AÿV=)šãAžù%TS”R˜œ¸å¢l¯T‡‡„õ Âl6Ûo&­{YÆgasî*Úç»Û)Á# 'ûõNö®.þ3³!(!YÚ¾GÇråg{jÔ@ƒYµÑøb*.ð*€ñE ›¡z§ëÝ%?.´MvHOŠÏ …&o- Í*DZµ¨bd$¦<ÒFQ¸ËŠÙcu–WXj[9fëT,»€´ ï•Gð)ükä_XSÔíÉØ 7`I7^OÚëSƒ¯kÕùÑÂ;èIÉ:šM¬§jLÐÉ,· §Ëªºjú ɘ“˜x!E4³—”ŠŽüW«S¦ÕĪ$ â›êüÑdnº*^… ¯|Ôóy‡bßèÿó̇Õi09Ñ!³8œuµ{¦¤r3‘QÓ)[?Í­³“§HÓ­fééÓ——§…‹Ø‹ÛÃÓójz_ÿ>ìz;o;m?Ï_äw8ÃÖlÖð ¯å# 1Å^¼u¢Ï®³EãuÜWŠŒ6l£Øs‡ËÖL›°ÀÖPÉ0 NwÛà&ëÊì9¨Ö`öTSÆÇÍ~5þJyS&Û¿lÕ”q@~âÀ˜€d÷Ý fוkKmªîW×WŠÀPèˤ }ìö*a¿Ü?º&ðoí…é²2ËRgÓ‘PÏ[31P½ëо“:Ú8‘Fã½Íœ-Ú³‚=¶eеþê_"ȦÅïd Ÿ®kªoª-ÅÌeü]iç°y> ')c¤ ÅÖʪ=-þÕnº"ƒ¿ç}£¥>ò~ ?3OÀôMU#0 ¤gvü]á¸6VÃr-½†ñªJÞv\&œ¹ ’Ÿ¹1l^IxþŠ>­ÜöÀr«p„9Ây›¹b¨Îê5u¡ý± .Ãòn ‹‘”§ÁŒXY]"È•¼³0ûcÔ?'u £¨ÂPÜè‡>0ÿ«Upv{¹±Y[À¤|­€;î>„X {±q|…ðàŠ¨Ú–à‰nn£6 ØÑnëŸI*Ê/ÌMü •£2ï³ų÷.DKÑÞîÞ L¤ŸÝoÿÀŸpñáy[â‘eyexì³É˜ˆf!ûiklÍW{“{Zî‘+PaSÀà'Áï\º¢fŠÕŽÔòì¯êüH~ ÷k>þ¿7Âlò”¯Má#x¯.÷ìÖ!¿kîyáKèNBB+Ršîøßñ‡ø½É#qwÑ `Ú©>uúMFË:kuÄ´HVùa¾ôŽ]ÙqÛ³'Íx*1ª¿¥•ôŽˆ*’.¿‡ß ¡« ŠD.ZQÜ2l·v q˱Ä<Ë"Ã:jflUtÒÖÔ$†-HKmï ]¿Ù'jÆ·¸{h—_¡ Ã’hµfVo­Ö¶V°½+8Ò숤°±vô!ÝoÆ-^õ•¼˜(nZq} Dÿ€-׃þ;¹S6 Ó…JÃEÜãÂeW+Ì*–ÂRn÷XjÙ–¥ÓµÁ(–ž¾¥r6ÓìT•S̈iöžOC&F¶ÆvW!3daC²”ÃV‡}>˜Áý4Í×ù“*ÞºÓÄ5]¸ÑȳS¨^œC*DÙqIéqI1â-Ç“è`×Ī(ûM sÿBn+¿Œ»‡¯S â /QxHwïžä‹]ŠTe_²¦“Ú¹e—î2¿âŸ}eT·'ú­Ð´£ðŸÐY\ÆaGÞj%WÈQò“ Íg+üTE˜šu!xÛäƒÉ'·\FË'¥P^v¤ÞÒÿÆ,V½ÿݾO¶“éÓoR2ó„=Y¥jç|H«nêùZn5‰g¹gºŸg݃7¡% ÞF¦M“݉߸‰é¶×ô-qVðÁS-WóZ®nº¦BËÕ’Ú ‘ÊŽyJðó,> ïuãG´ð„†ÞüPn | áHyMrq™+í`Æ·t¦›N Ä&‚}—‚Á-¡0zÊîøÐ=ÅC¡8ÿõÊ-RªIDð,äô„bÊÌ[†?„¥š×àÝ„ŒìØÜ -1þÆ…ÎØê‹\‘»»Ýs?_wG·®‰šV;óQ4ЉË"qKbÝrô~#Sx´ÅjOŸu›´\à31må&ŽN]†î¿à¾[|7û"_-äèã¿.€yíÊ?*Sþøâÿ¸©õ¸ ±PD¡k¹Ýž¬Vz:×Ëi/·O9¶ßæ©hÕæysÙ@~ík’7quü5L”oáiêJä¼!]™w\W¾ GeüiKnT5¬&&³>%IÆN×ßîÛ@o¼V3Š»ó31"‚„„“ûŒ-kŽÃùmÉó6¸ëF}æäL!CÿÄÝY'ãï¡Ç/6V7ZȃúS[‹¬ùÓ0‰S´—ˆ·P´ŠH0À¢gWáËüe™u'¶È‡[Õʳ¨~ÌësóÍŠ¹ÌSõ°ÏB§ç­‡ew©Ò¥? téáý›ÞÞ‰óûÊ9‡dм½˜[¶Å-NH $5‰ŽÛ³E†Ú+ü¢ÜÑr†uÀux2œPô9,e//wwôÈ’ůÔi”?\vªÑ”©îI^W®jäø¹¿x §e2TŸWÂ{äW̓›26kÞ[¯™ˆý~KéÓ›fóZÎÒ„ƒ4dÇHOÒ~NÒ`Q³<hÿԤϑÛ¸@¼ö·aÐChK¶¨ŒœmöùjQXUð#‰$/¯,µ&ˆ©¢þB±;’+[ÊÝÉ æ ÊMwYg6b´ V ÄX ý•Š´‘ÆëÔ[·†åÒÔxºìw>ëyœA] îK¡ÂÅaωނXB\ é·\Jú=#'ý®GNëAË™¿ßÓ²3ò£ÔR…S‡>0¸qy­(¼s¿±Fýf/SxIb,:,O©m'ϰüBiÖQRd•Zf-ˆ7 [·yƒQá3·Z¦™eﲯB{ÐîøâüÝÛ3Π« hO¾ŽéAæá.Úp â<Æ™ÍAsM¦Û Y5#;-‚JñúcÃÜßß7(FŒìE>jýÚÁŒÄšÏZ%LÙôl)Àd½¸ó¡²lwÉo«;Iü«Ñ×ð¡Š>×8µõñ¯\ªÄÂ…SC!C Ó¥ÁʕǼtè²NÚ'ž ¢^¬Þs„¾¸–Ч'}K JÞBb)m"­³2–6‘·® ŠønBÎúŸ e¼Ýr2Šca¶òý/iäþ_¢¬É;Óºá.M³4$¼Xþ¿‡kîÝ•8ÐWe±©q ½ÒÝ~½«oxš¶gsìzÄXÛÙZl·Ø]…Dæ9ÖAuå½››é“IFaЊÚ4éÀáµf;ÑNt 1#›©BkFþ:Þ£lW®_d´&3¨´iáwy¥±¨4H?$[ºe', ŒMΉÏÜQ ºt,¡ A7bè—Û'\có³¶„åi›X9[#séaÃŽ¼”êbáú`pF(©¦çRÕªó  ãð-Ünià± MmXËs8G“pÔu³o°O°·V¨c¨w( EaÑâ"øŒWÓÄ{;xx$êë£&>Æ0a≼‘׿Ý$U…˜Üˆ"¶!¬¡€»žôàâ¬Ü‘[Eìˆ#[÷&\ê-1)ǵ ± WI±†×ª çÿ¸Ên ~`b²¦tmš! k§S×P¾yà²@sã1¨yªtO‹ ÜムUª1tÙ{ø‹¿tZ{®[Ã]y¶ØœÐC¶€ëñ†Ê†îI:3ð®UªE.ø„{Ê"^KÂqë8áàs]ŸJ(ÍÙ„Ä  ”É%°G(údw+t²—C—˜Þ´ ì`ná!típ-¶ÎZS6<ó+Rn]Áqlãí»²÷2ÂÂ2 Ïa½6ÛÂx éÞøè5;äP´@ÉÏ’¯´„ä yH¾Ù¨Û©®þ<ϳ0¸~ÈRƒ\0çŠðT:ðñÞsWQ!ŠöØjj§)£O2*Ò'›%OÇ ¹‡Üî0òp|®^ ‚êÕ_<(ïl诀ë.7ûƒR°“ÖРBQ‚ýÔL4§Jî/ü'´\{qí à:ò–ÛÅÇr|Ü0DL+GÚ.XÚ“N÷µˆ¥'|"èúÆeû4þÝ)›ÛÒê(fKÏB¹N!f·"Bt˜È>§ÿáêAØ"”Ašç…MésH¼¬‰O¦…ÐO¹Ò£ð§‚5±cXÉks0¬à+4^äá×EIøe~Àž†ò­"ï›Réöd: ù‹Á^ ˜ò_ #pYz:|¥ _Ìw§'"‹“¶7öhšèÇ.î³ÊÒYw}ª]âQ—|”)ŠEQŽ1³‡–ÌÌó6ôµÝ`µjþLóLÙ…-ŽZGÑðoذãx@±iEa Mr—U­ù¨Q´¨ÀG9‹2‘‹éQÄ|Ô.¬Èv˜…À…u¸°åXSXÉ ö.Àté{&Õ’¼(“Ù·ŸtØRüO§ZŠO^¨¥¸›ïÛ ¥Œ{’ÎkI Ñrb»Ž¢ð}¨çI”!kM°›`²,kµŠÛ ꪅ{éqÆ*˜F ¥¼<¡eâÕ÷ÁàšÀ=`†Á))$FEü»Ò^[ I™ü³‹8ä½%&'")ë :ÏÀ$øï¤g¹Û/ÕÆïÃJͲáfæ´ÆÂ{uà&<_S ¬fÝ8K|y5õÊ’=©M0Ÿ<§`á9¥´TµLÈ4  Y¿?ÉúÏ­ ˆT¸D›ßtÍçOá·mq»!y%²¼°SÞ<ÒÊó!¶'\³Ò¶^úú¤)^ß> Xñ«²±Ðävö@aÓb‚ ¯Oµ^“ܸ^ÑŠeþ·–½Ê`W«”Åå¥|k-Ÿ<è"•òÉÑV©˜Ïßí‹ùàÄ|þ~b>¸#1Ÿ¾ügÜôu+砹̲‚µ; RSòsmŒ}}}µ} DŒ·ohx^f¡¤Hô”Qðc{ MVE/Ӊ¨ÞÚäØ^Ìl%Ç&Õ=!ÓlGjíÄóK­É4DO¨¢!Š6þÚ)¼ø»ì™¢ºSÒ§z Ý°’Ø Q–V²C¼­ƒ£­³øó¸¡ÚûË^µvƒiõ&~^?»øßA›o¼jû§,YÈvUÉÖÉ®õþvVÙy<½ËΣãev*¯¬rjɱ±*®†áçáÑ5õrA X\óü#ÇL’xsXж¡…Ëú¦åí²VŒWj'ðJcSÒ£“w”‰j$çÆ–1 ä3à:¼ó;;OJŒM–{}‹†zC”Â!Áá¤PšêÄÔ΂º:†#Ïî£Æ¥p¼ÓF(X±@#óGö¸X£#=‡ŸÆ¯àüƒ;Ú!Ú‹f(U*ÊË+å‰)öްŠðlï¥ü%ÎÚÖÖÊ*Ù63+%9+Ó6ÅRxΗÌP¤.ú,—ãÕ’êÒQl ×[N^¥A@êcA”ôzÀ¿guʘÿ1$]‚×@]xÉ›6ù#)—úÀ;žz uW*[¨«”¸9žU`$®¹j'jÕOÃnºÎ ܇™­ ¢8µ*OÛ-Ò~ƒ“™Œ\2ŽˆàÝ¿$C×¹ý¡·´àåëåãi¸H_×ÙßÃÇ×ù¡MAÁL5%”8b¸ÿ‡Ú™Zõ0¾7…˜4©óÓh™ÏÆGLO v£} ØÑ¹¥{2B#ü<#µc]#}£“*ŽË̳O45°´²\ô+í·y±±Û<-èñ@©¤¨´[¨'tÕS¾Çþ®Ðû^Ì÷‚×…ºÄºZ8[7Å÷§b‰­K\zflrjˆh{Xd(ñOöÏŽ)*r[º'y ›^?ä7Á:øwsámÀ÷ÕªÃt~1·ªƒ%íÛ϶¹FtUqv%*W 7™¹^‘„$Åí/­Ž-Q²0H©w>™ãòŸ~Iž{€Êó<è êëzÀÈ2È/«;ƒÎõbG×5°sÞI±±u,Ïsx¼Õv*ñ4 ÙÆþNþÎÞÞîȹ…8nuŽpÙâ†+[+óT˽i)¡QI¢¤(qBDFDFH¹À§8)ÆÓ2^;v}”gbRâS W¥Ï½ØzÅzÑúUÞÆc˜%fUø…&y¸O2O´˜ì‰ÎÄ”cn$/Ëpn¦`ÕR‹'ÝÿE-šÆÃþžÛ™ ×e‰öÕÅÆ‹wn Bfì7$/ÃÜñ'0®9€À4ò”uó žgkè6ÏQË™ omEZ)Nú¢Æî*€y’ç{´!Æv“/¡6ó!/XHÅ—|à=i–Åy^cHâæYÜd/7GÎß;ŒœW”FÎOh'[_gd¯xH,6%5>;=Y”š&töû<ÞfÔ£v¾6Dêa¤ê"Ø”<&o«›®¨Ñ¾Žè,úâ¹Áþ›7mÞ¼I+Ü3Øù1^^¾îÚ.`)pFÍ *ñW°X3+ãÌñû²ÂµÄ[b6· c}Wj[`¤?rEÞ^®®îä-vÓäGmèné=ßYËÂ[ô:YÍõ%þzâ!ôÀ·=Y°ðv›•ÞKÁþY, [ð†—b4K¾W„Ô_ùf^MaZ¹GRjïLèBR*ºk É»‡{ž ¨Òˆ¥Ð&Ä{ëäÖu2ñüQ‰  E¤*Šð\-ÂChÃ\ëÈ5ˆÁô`¬?ÁžoÕ'îÎýHƒZWäããîéá¸qƒ§%bF-úºƒFÅOª+ô‹`ÀƒÎµÄžá6÷R¹Í~ŸÂ°wb~Ú%¦GÙåôI&¥KPrPžU’1šƒl=í>÷4]2CÆo–®›Ï"Ø_ýyL /~$6ªY3÷V»`3~‹J«Ô«ÁÀW"T6Z‘N™Î#;‘/31u¸Ã§rø-¥F³e“ z!ÿ{x·=3tÇï™Òð^ã8N™¹µ^ü#ïØÅÉ:vƒÚéØÅuªc7ëÙŽ]œJ»w@Géë«ò©'‰D0¸çm‹ÝøYÙ‚šH5Å’›RN0Mï#À²ƒ™ör˜Êéï•,¢vn.=$Ó™:´Y¥hÎ>¼–b+[x8*ÌÒKÏNPGVò7¹fÎÇ:+W;íuk ëFX9zé"­È5Èv3s j9($0“–ñP£Ý¡ÅâÛC5·½¼;?£í×jÃGQ°Y†ÁEÄÞk\̵ý¾ÖðAGg;¯ HKÐG„Í\£Ióð¡¢»(okV¼ôâÃo”íÊ8….kµh0j_loQ6jýŽ¦È§‰. þÇÞQ0l}ñ©aëOfëÆŠÄŒ HðZ:Wë%Ð]~~1žÓ惧9Ëu*ð¿öT¾¾$G“ܽ5—½è;-óaVßsïøÔ°i¦¾‚üø»Ò»—ß;û¨åîe÷N±¿¶prê07]Pœ–°Á;è$þ,÷ Äú õlV*SÐøö<èÀ70`4L߉¦# ›%‹2 LN÷tšåYšð _²ª¯V 9V(»vD3r”O2†ƒ•ªóI²iX p‹æ©N)ñ¦cÉE”Ü‘Œf±§hÉý–`á+Ih­VÜ,U,âí»>C¿ÅÌÔ9Öø¾©àž’Y–3®ß>)™F·á=<(c>\iŸùpïÿóáJ3óÁ ,T^‚Ò¬É ¦IG–Ö6™ŒyvÌD±Ôœ?‹”H9€º"-ºÍ’ðÏÏ«ƒ§—½¥86;ý)Þ\§ô ~ÿìG>†C;½ÝèŽÜ2teÿ‡‚¤’\aêÅäîn=-w×®ÜÞ±gÇÎÉÇÚ°JÖºP_j3ë[­šðj¸¥î^Œ\ ï7x)äÚ²ã«oÚ†™ø!³¤^í¬ Ð«¼›=q4‡°ÆÊ©‚Ö"£TûÇ<·í>e „H8™D M…³’)}c´±ü¡ê¾ïj×2~ªÀ‹Sã?x áÙÜÓ»@ȯùÛuøð„ P‹ ”k4~LÙaS4*|Tv|VraZÂNòe(rã‡` Šœ4T+è³Ñ¦óLyòB`—ÛF[R˜Y“éK^뤾d}gô%¯)Õ—¬q}IphP‰Ã$Ÿ&j8ÉPÿëy¥™4±iºËYG)Š2ÍÇ´“­E ÿ¾¢¯ÙÌñ/8þ[4¢Úª™¦(yÔS¦»5 “¿J=ébñµBü˜*ŒRÕ>_U{K¥ªö M’±Çå[BÎɶ„ÈôÐ a¥L„Œ#µõ¿¯ª"7gŸÂ5!y¶´¯BíÙ–r€|ý˜–z RZäËëw5#•‡£¬òX)­<Ì…Ê#¬¹òj§çõU}Öb Drìg}~ú Ô´[íôÙEªæÁRï×½ÛoãW«*ÿÖZYö„Ði°sr+p!VðSŒ/1”Žˆ EF` 5Eú±òž cI¼Ûà¸g>ÃÞùÃÎv+ñnde´.È.É=å ¨ät”ˆ|ñG?¹Ž·uÒÆÃ\<]êâŸtdÅ4±â,ªÙ‹…Ú½ˆÿ(G ‚/¨Ã‚ ŽßbÝÓ®^šIzÛ¿yHbãûÅG/Uе8¹Iz0åVJì>ÄüBMÇó5vf-Ñ™°ÌN*8HB¦onõZ¨½)ŒÍFÂeŒÐÍ1A¸6Öq·ÐWÒÚÁ€ðßAÁ#ð¿Ïà)ÙéùÕâäÙ©œ§wvBrU`8%4¼•è(wã$ð.IØ`(LFÉ0{å)Ô„ð[&@OâW`èÝáÛSr3˜v¥°Ø ÅÍÄÊÀ^ß›/tð`zB˜ÎQá@ƒwhãOÂnq='N¶”Bñ×8¼­8çÉVâœhaZÅøk8.Æ5/ CñˆV°…³˜.v»ÙÖÇ•ô\=°²wT‚iÇ4 gÅ>¤ÏõVIH´m&àxeÀ‚œjU½ÚN)ˆéŒªªþÔ±::Ûj µÜó—-TU߿עª:>WÆ`«ÞgßoR†?>ïr}ìƒ^,GÜ8öÏÇÎßëN¬¾ö]:Ã>>•›sôXoTå¸Ã$g]Öª8}d†Œ¼\¼ü=‘òˆôO!‘OqbĤçäî Îᆋtüð;øѲåû'h¥|;dÁ÷ºóFÍÈ>3Qäè¸Üo+ÿã¯eøMË»àUå2Yùƒ’×*+‚XNki! p¥»¬ æ)ƒTȶü;kï`„Y„¿¶´prUwÞõ¾rÁD8L]ýR›½¨R‚oÛwªÞ/'÷(æ‡%º =¡}¡qsFó í£¥-ÂÒî f¢ä-nœ&löJ[`æáâädïÅÕ™F[„[¥t&•8¾•+; hžr™\«ÎwSó½ 0¨pxkWÀ?Nn R‡¼¸’ÐÜÔ¬n‘š²Y¦™c =K(ô}šA¹÷ꚡĨ· ‡KűĤíœL76™t¦{ª`Òž2é¦%FĦ_ã£FÐ’›´¬3D®ÿ:{C8ÖËo ¹-VrðÕ4ƨÖþÀS‹AôTÞŠ€“\£f‡³É|öËIm²eóÂóV·àÁ©¸öeJ;º0оהn½WFè”/ób5XBl ò,g ËÖc‘ »Iì‰g€§¿ç@¥ùDøÆlŠAZ(>2¬ ˜¼à¥.tq@˜ç®~ðfM<]щF·'æ2h0¼©‹Ü4ñž"t‘·4u‘y¶‹|âe!†VŸéÖàŒ®ðû Õ²€â¿J= ¾âBñWFy€åñërœÊ´œvzU jt>áжÝÛÊ+R ½¨ÜvûÊí+ãf¡s†ãGZ»ášä»Bá+ *ÐØÅxbpo*¤>(¼ð‚>Zèšõ‰yÕóª¿ÏŒ¡qVóÌ[h!´¨&'Í-Õ+ÕÛmY餯‰{Q‹]Ú¦ÝL‹|ä ‰×4öN>Ô”zë‰Yn& &øµeßP8¨j¥ï) »áòŸj•üî2PgJÿ"Üýòo³F. Â4n¡¢¿ˆÓß®[¡sÁü:ºŠ.e®¼t¨ì/é0þü|ˆçã!øýaøÛ´ù\¼‘sÄÿZ¸hêÖî°ƒž²·’³Úæ.¸³’S•EÀk¼¤ŒÖ"°vHÖ4¹3¸´|”Jøê¦ÉÙZ:èÆÈÜ•h%ZµÑÚ‚©og KÁwþEÇ‘zh[`A`‰U ~S—ØJÔ`‰NÒ^yU`œ7²Až~î^.øSl¯‰ÂXß8©eÆDänÞ‚¶¢È Yc±< Æõ>þzáEš¸‹tÁoÓh¸§çbèo6»F¡ =ô¤a غ™ž\¹E+â@)l QרiY¨ ÈsžŸÇåþ ‘£Mé‚ÿGÇK ­?s˜fÏLJ…Dkwãû‘Û9Ò|3½ØCð?ÁUPltGkI³ îOš=Բрä >ߨjÑG?Ò¸ÖícyÿŸT¥¨ƒªtéó.a³jQ¬¦rÏ—­ ™ó@«ªÔ÷¸õȋĀ^ìã×X~€8öžŠ•N¤\‹È}.®Ö ¿\³ mšT·”E¬íõj0£¾ž‡¡ çÄ»åÏþžŸ5ö{UAîÙàß{>J TUÛîÄÐØ&tâÇH%Î2¶ ýtáÉü —wÉZC?æÆbjŠþÇh0šRª{Ý¢ÆcϦ_~ åvÏ©tuùrÉ÷9ߢÑhœõì¥ãæ¬úán ^ïàa> ÷o·§´sa#ÿªÙ{=@Û ’±,˜/Ãr ßE†|ø!ÐÀÉ`ó|°GC4pJö‚©$˜¢»= DÂA:|Ó¬©$=I¯'è&Ðì5ùƒûûûR*ù¦v5–^깺”Õ™ ý~RƒG·Õ³!sÅÿÂ]ž‘êªðEëDS-ÖVAªKgɤO~kle2aÓ󛬃Iªb%™Dã®zA'ã(¹å£¯W¥±?**Fófq³’zµÊ?îßW'Yè.·ÞŽ|a¢]ff2ùB;Yˆ´±!K¶KÏL%³!ÃùøøË–Ck{PÅÓ=ë;؆øçS›pwé„yZÁAÍôªWi7/AÓosöï_,u ×߯%¬%kµ•,{9ÐÏ»&MƒM’mJcžcSÁ+I0pß ]šQ ,”ѱ`ÇA?!ˆÊÇî;bõPG žâMó]é»Â"KQŠþ4hLþÆjÙFeôßÇÈê oûÙ;ûyº"Ai ˲Yk`»TZÁ&?«5Ð_ÖÃÆÉåK!»Š; œH$Ê^"ciÅm‚Á-’Íj[ì Fùdë Ä-Ç%ù{fÏwá`>Ý©#Œ|Ü[BL‚S¬UŠQÇ|åç(N3×è,·!ID‹è7²ÔÿüÜòå²aALì¶# ¢·¤ù"Ã`j'ðcþR}8\ø0àòËís˜~ÿÄaºÜÌa›`ÇSø\+Ên¦©c¦©×…#eIÿº†ÃŸ€™*úæ–Û ^’¾¹ËCZ*yczB|L‹ÕBœi©È¶£!»³%d]lt¦Ø…ì‹‚òýS€0Y"×ó¤R¼¢:¶ CaAá Ö£á-†yð6Í>z¦Sôk{FÇÞÌ®¢w[‚‰·êÃkÃI¼­í$Eë~g(ZµJ)Z÷_œ¢Ëÿ¢:Æ KþS%ŽòZ*‘Í^-’~¢+4>×Äå?{(à=¾Œãϵ¡°zmlžœÛ)i §ZŒõøG”BZZ;ËèW·ùû¥,n•‚P;I¡¼ÉyGB?º"ùŽ„¡÷чNe&èœo|ŸzAÖíUØ<­6Óÿ¾ùЛ€:or‹ ¯eA] /âØÇ AÎŸÊØ±j/ÛíIqk%ÀÂÛy”ÈÉzÀ²‡ê*}¨ûUéEOkîE_TP^àùf–Nkœ/ÀR´Ò=hI išk":ŠÄù™HM÷K¡©[»Ð4\€¦¹xõÓv’"ØÉjÁN"ävÒÜÝîÆ‡¸J ªðF KtÈÝ]ߣ޼pÝ¿¾†wI)9¬J¸/‘Îî M½5ÅCr?…Ñ$Ë->Ì-ø×äB([ïq0ª¸âjoè™=˜1\ççn¦íìíàE2õ&äɰÿé¬áD|\O#…"ß=J+ëûœ<²ð;¬1Öq†h‘ñ~òñ ¿›7«´\(ú¾!Y1Iú×. ±®Ì?z/"go,Õþ“¨ãk!JZ Èv’jÒkÃcód´R)¬y™9?§¥A&”¥Ý•+šã:Eʾ¯±YAÃÛr¨ açÕáWÎdDçhûIUBnïÜwA«`µSûÇöÍ®3úÍŸ‘#Ï£’Ty/ò± xÞ“'ë3î[6¡eÌ,#Øz.Âïc•šGKfDSͨӶåèc*1åiÒ£U´ÏËžGû¼U[Ë …+¯EÞ÷ÏÀ'iLæ9Aï¼éñz±Ûº€™D±§<‡æ=ÞUHtCö§.™¥ù5½ÏΨT¸±:ºKë•Õ?u¹•’¿¯Ï®ÂÕ‹–ë4í¬>åQ½Kà:.Ð/>­+rõÒ`·wIYU8òÙ”ˆ{¦Kp81¹>*rÒšára½ü å÷½~ØŒóKTÄpð?Ï"X%, wK®¬ï±•ÜñéÆð+0%CXžÛîÊð«]šv†U¼3ü^›7pµËÍèì‚}v•¶Ú~ÅC¶6|£¡h$Yqœ;¡ Îɱg½{.®¿weAÞv?ïüüóŰ #¬ÏÚ»ð;]öWÚ˜È/N„E‰TöÛuïd‡¿ûn]ü»ïuéòžs_ endstream endobj 11 0 obj 33920 endobj 12 0 obj <> endobj 13 0 obj <> endobj 10 0 obj <> endobj 14 0 obj <> endobj 2 0 obj <>endobj xref 0 15 0000000000 65535 f 0000001272 00000 n 0000036794 00000 n 0000001213 00000 n 0000001320 00000 n 0000001062 00000 n 0000000015 00000 n 0000001043 00000 n 0000001603 00000 n 0000001389 00000 n 0000035692 00000 n 0000035608 00000 n 0000035630 00000 n 0000035660 00000 n 0000036736 00000 n trailer << /Size 15 /Root 1 0 R /Info 2 0 R >> startxref 36844 %%EOF Rcsdp/src/Csdp/doc/csdpuser.log0000644000175100001440000003760314342635402016137 0ustar hornikusersThis is pdfTeXk, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=pdflatex 2009.7.11) 29 DEC 2009 21:56 entering extended mode %&-line parsing enabled. **csdpuser.tex (./csdpuser.tex LaTeX2e <2005/12/01> Babel and hyphenation patterns for english, usenglishmax, dumylang, noh yphenation, croatian, ukrainian, russian, bulgarian, czech, slovak, danish, dut ch, finnish, basque, french, german, ngerman, ibycus, greek, monogreek, ancient greek, hungarian, italian, latin, mongolian, norsk, icelandic, interlingua, tur kish, coptic, romanian, welsh, serbian, slovenian, estonian, esperanto, upperso rbian, indonesian, polish, portuguese, spanish, catalan, galician, swedish, loa ded. (/usr/share/texmf-texlive/tex/latex/base/article.cls Document Class: article 2005/09/16 v1.4f Standard LaTeX document class (/usr/share/texmf-texlive/tex/latex/base/size10.clo File: size10.clo 2005/09/16 v1.4f Standard LaTeX file (size option) ) \c@part=\count79 \c@section=\count80 \c@subsection=\count81 \c@subsubsection=\count82 \c@paragraph=\count83 \c@subparagraph=\count84 \c@figure=\count85 \c@table=\count86 \abovecaptionskip=\skip41 \belowcaptionskip=\skip42 \bibindent=\dimen102 ) (/usr/share/texmf-texlive/tex/latex/graphics/graphicx.sty Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR) (/usr/share/texmf-texlive/tex/latex/graphics/keyval.sty Package: keyval 1999/03/16 v1.13 key=value parser (DPC) \KV@toks@=\toks14 ) (/usr/share/texmf-texlive/tex/latex/graphics/graphics.sty Package: graphics 2006/02/20 v1.0o Standard LaTeX Graphics (DPC,SPQR) (/usr/share/texmf-texlive/tex/latex/graphics/trig.sty Package: trig 1999/03/16 v1.09 sin cos tan (DPC) ) (/etc/texmf/tex/latex/config/graphics.cfg File: graphics.cfg 2007/01/18 v1.5 graphics configuration of teTeX/TeXLive ) Package graphics Info: Driver file: pdftex.def on input line 90. (/usr/share/texmf-texlive/tex/latex/pdftex-def/pdftex.def File: pdftex.def 2007/01/08 v0.04d Graphics/color for pdfTeX \Gread@gobject=\count87 )) \Gin@req@height=\dimen103 \Gin@req@width=\dimen104 ) (./csdpuser.aux) \openout1 = `csdpuser.aux'. LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4. LaTeX Font Info: ... okay on input line 4. LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4. LaTeX Font Info: ... okay on input line 4. LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4. LaTeX Font Info: ... okay on input line 4. LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4. LaTeX Font Info: ... okay on input line 4. LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4. LaTeX Font Info: ... okay on input line 4. LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4. LaTeX Font Info: ... okay on input line 4. LaTeX Font Info: External font `cmex10' loaded for size (Font) <12> on input line 28. LaTeX Font Info: External font `cmex10' loaded for size (Font) <8> on input line 28. LaTeX Font Info: External font `cmex10' loaded for size (Font) <6> on input line 28. [1 {/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] LaTeX Font Info: External font `cmex10' loaded for size (Font) <7> on input line 72. LaTeX Font Info: External font `cmex10' loaded for size (Font) <5> on input line 72. Overfull \hbox (3.80621pt too wide) in paragraph at lines 107--110 []\OT1/cmr/m/n/10 Other semidef-i-nite pro-gram-ming pack-ages use slight vari- a-tions on this primal-- [] [2 ] Overfull \hbox (53.99652pt too wide) in paragraph at lines 203--203 []\OT1/cmtt/m/n/10 Iter: 5 Ap: 1.00e+00 Pobj: 7.5846337e+00 Ad: 1.00e+00 Dobj : 4.2853659e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 203--203 []\OT1/cmtt/m/n/10 Iter: 6 Ap: 1.00e+00 Pobj: 1.5893126e+01 Ad: 1.00e+00 Dobj : 3.0778169e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 203--203 []\OT1/cmtt/m/n/10 Iter: 7 Ap: 1.00e+00 Pobj: 1.9887401e+01 Ad: 1.00e+00 Dobj : 2.4588662e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 203--203 []\OT1/cmtt/m/n/10 Iter: 8 Ap: 1.00e+00 Pobj: 2.1623330e+01 Ad: 1.00e+00 Dobj : 2.3465172e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 203--203 []\OT1/cmtt/m/n/10 Iter: 9 Ap: 1.00e+00 Pobj: 2.2611983e+01 Ad: 1.00e+00 Dobj : 2.3097049e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 203--203 []\OT1/cmtt/m/n/10 Iter: 10 Ap: 1.00e+00 Pobj: 2.2939498e+01 Ad: 1.00e+00 Dobj : 2.3010908e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 203--203 []\OT1/cmtt/m/n/10 Iter: 11 Ap: 1.00e+00 Pobj: 2.2996259e+01 Ad: 1.00e+00 Dobj : 2.3000637e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 203--203 []\OT1/cmtt/m/n/10 Iter: 12 Ap: 1.00e-00 Pobj: 2.2999835e+01 Ad: 1.00e+00 Dobj : 2.3000020e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 203--203 []\OT1/cmtt/m/n/10 Iter: 13 Ap: 1.00e+00 Pobj: 2.2999993e+01 Ad: 1.00e+00 Dobj : 2.2999999e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 203--203 []\OT1/cmtt/m/n/10 Iter: 14 Ap: 1.00e+00 Pobj: 2.3000000e+01 Ad: 1.00e+00 Dobj : 2.3000000e+01[] [] [3] Overfull \hbox (53.99652pt too wide) in paragraph at lines 203--203 []\OT1/cmtt/m/n/10 DIMACS error measures: 1.11e-16 0.00e+00 1.00e-07 0.00e+00 7 .21e-09 7.82e-09[] [] [4] [5] Overfull \hbox (11.99689pt too wide) in paragraph at lines 320--320 []\OT1/cmtt/m/n/10 % info=100 indicates a failure in th e MATLAB[] [] Overfull \hbox (1.49698pt too wide) in paragraph at lines 320--320 []\OT1/cmtt/m/n/10 % interface, such as inability to wr ite to[] [] Overfull \hbox (48.74657pt too wide) in paragraph at lines 320--320 []\OT1/cmtt/m/n/10 % Note: This interface makes use of temporary files with nam es given by the[] [] Overfull \hbox (17.24684pt too wide) in paragraph at lines 320--320 []\OT1/cmtt/m/n/10 % tempname function. This will fail if there is no working temporary[] [] Overfull \hbox (11.99689pt too wide) in paragraph at lines 320--320 []\OT1/cmtt/m/n/10 % directory or there isn't enough space available in this di rectory.[] [] Overfull \hbox (27.74675pt too wide) in paragraph at lines 320--320 []\OT1/cmtt/m/n/10 % Note: This code writes its own param.csdp file in the curr ent working[] [] Overfull \hbox (48.74657pt too wide) in paragraph at lines 320--320 []\OT1/cmtt/m/n/10 % directory. Any param.csdp file already in the directory w ill be deleted.[] [] Overfull \hbox (38.24666pt too wide) in paragraph at lines 320--320 []\OT1/cmtt/m/n/10 % Note: It is assumed that csdp is the search path made avai lable through[] [] Overfull \hbox (64.49643pt too wide) in paragraph at lines 320--320 []\OT1/cmtt/m/n/10 % the ``system'' or ``dos'' command. Typically, having the csdp executable in[] [] Overfull \hbox (11.99689pt too wide) in paragraph at lines 320--320 []\OT1/cmtt/m/n/10 % current working directory will work, although some paranoi d system[] [] Overfull \hbox (22.4968pt too wide) in paragraph at lines 320--320 []\OT1/cmtt/m/n/10 % administrators keep . out of the path. In that case, you' ll need to[] [] Overfull \hbox (11.99689pt too wide) in paragraph at lines 320--320 []\OT1/cmtt/m/n/10 % install csdp in one of the directories that is in the sear ch path.[] [] [6] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 0 Ap: 0.00e+00 Pobj: 3.6037961e+02 Ad: 0.00e+00 Dobj : 0.0000000e+00[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 1 Ap: 9.56e-01 Pobj: 3.7527534e+02 Ad: 9.60e-01 Dobj : 6.4836002e+04[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 2 Ap: 8.55e-01 Pobj: 4.0344779e+02 Ad: 9.67e-01 Dobj : 6.9001508e+04[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 3 Ap: 8.77e-01 Pobj: 1.4924982e+02 Ad: 1.00e+00 Dobj : 6.0425319e+04[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 4 Ap: 7.14e-01 Pobj: 8.2819408e+01 Ad: 1.00e+00 Dobj : 1.2926534e+04[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 5 Ap: 8.23e-01 Pobj: 4.7411688e+01 Ad: 1.00e+00 Dobj : 4.9040115e+03[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 6 Ap: 7.97e-01 Pobj: 2.6300212e+01 Ad: 1.00e+00 Dobj : 1.4672743e+03[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 7 Ap: 7.12e-01 Pobj: 1.5215577e+01 Ad: 1.00e+00 Dobj : 4.0561826e+02[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 8 Ap: 8.73e-01 Pobj: 7.5119215e+00 Ad: 1.00e+00 Dobj : 1.7418715e+02[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 9 Ap: 9.87e-01 Pobj: 5.3076518e+00 Ad: 1.00e+00 Dobj : 5.2097312e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 10 Ap: 1.00e+00 Pobj: 7.8594672e+00 Ad: 1.00e+00 Dobj : 2.2172435e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 11 Ap: 8.33e-01 Pobj: 1.5671237e+01 Ad: 1.00e+00 Dobj : 2.1475840e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 12 Ap: 1.00e+00 Pobj: 1.7250217e+01 Ad: 1.00e+00 Dobj : 1.8082715e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 13 Ap: 1.00e+00 Pobj: 1.7710018e+01 Ad: 1.00e+00 Dobj : 1.7814069e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 14 Ap: 9.99e-01 Pobj: 1.7779600e+01 Ad: 1.00e+00 Dobj : 1.7787170e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 15 Ap: 1.00e+00 Pobj: 1.7783579e+01 Ad: 1.00e+00 Dobj : 1.7785175e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 16 Ap: 1.00e+00 Pobj: 1.7784494e+01 Ad: 1.00e+00 Dobj : 1.7784708e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 17 Ap: 1.00e+00 Pobj: 1.7784610e+01 Ad: 1.00e+00 Dobj : 1.7784627e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 18 Ap: 1.00e+00 Pobj: 1.7784626e+01 Ad: 1.00e+00 Dobj : 1.7784620e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 19 Ap: 1.00e-00 Pobj: 1.7784627e+01 Ad: 1.00e+00 Dobj : 1.7784627e+01[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 Iter: 20 Ap: 9.60e-01 Pobj: 1.7784627e+01 Ad: 9.60e-01 Dobj : 1.7784627e+01[] [] Overfull \hbox (59.24648pt too wide) in paragraph at lines 391--391 []\OT1/cmtt/m/n/10 DIMACS error measures: 1.08e-09 0.00e+00 7.02e-10 0.00e+00 - 3.50e-10 6.05e-11[] [] [7] Overfull \hbox (43.49661pt too wide) in paragraph at lines 416--416 []\OT1/cmtt/m/n/10 % This function takes a problem in SeDuMi MATLAB format and writes it out[] [] Overfull \hbox (11.99689pt too wide) in paragraph at lines 416--416 []\OT1/cmtt/m/n/10 % pars.printlevel=0 No printe d output[] [] Overfull \hbox (27.74675pt too wide) in paragraph at lines 416--416 []\OT1/cmtt/m/n/10 % pars.prinlevel=1 (default) Some prin ted output.[] [] Overfull \hbox (53.99652pt too wide) in paragraph at lines 416--416 []\OT1/cmtt/m/n/10 % pars.check=0 (default) Do not ch eck problem data[] [] Overfull \hbox (38.24666pt too wide) in paragraph at lines 416--416 []\OT1/cmtt/m/n/10 % pars.check=1 Check pro blem data for[] [] Overfull \hbox (59.24648pt too wide) in paragraph at lines 428--428 []\OT1/cmtt/m/n/10 % converts free variables in a SeDuMi problem into nonnegat ive LP variables.[] [] [8] Underfull \hbox (badness 10000) in paragraph at lines 446--459 [] [9] [10] File: cmat.pdf Graphic file (type pdf) File: constraints.pdf Graphic file (type pdf) File: a1block1.pdf Graphic file (type pdf) [11 <./cmat.pdf> <./constraints.pdf>] [12 <./a1block1.pdf>] [13 ] Overfull \hbox (22.4968pt too wide) in paragraph at lines 735--735 []\OT1/cmtt/m/n/10 int easy_sdp(n,k,C,a,constraints,constant_offset,pX,py,pZ,pp obj,pdobj)[] [] Overfull \hbox (22.4968pt too wide) in paragraph at lines 735--735 [] \OT1/cmtt/m/n/10 double *a; /* right hand side vector */[] [] Overfull \hbox (1.49698pt too wide) in paragraph at lines 735--735 [] \OT1/cmtt/m/n/10 double constant_offset; /* added to object ive */[] [] [14] [15] Overfull \hbox (38.24666pt too wide) in paragraph at lines 821--821 []\OT1/cmtt/m/n/10 int user_exit(n,k,C,a,dobj,pobj,constant_offset,constraints, X,y,Z,params)[] [] Overfull \hbox (1.49698pt too wide) in paragraph at lines 821--821 [] \OT1/cmtt/m/n/10 double constant_offset; /* added to object ive */[] [] [16] Overfull \hbox (43.49661pt too wide) in paragraph at lines 821--821 [] \OT1/cmtt/m/n/10 struct paramstruc params; /* parameters sdp called with */[] [] Overfull \hbox (27.74675pt too wide) in paragraph at lines 837--837 [] \OT1/cmtt/m/n/10 double *a; /* right hand sid e vector */[] [] Overfull \hbox (32.9967pt too wide) in paragraph at lines 837--837 [] \OT1/cmtt/m/n/10 struct blockmatrix *pX0; /* Initial primal solution */[] [] Overfull \hbox (22.4968pt too wide) in paragraph at lines 837--837 [] \OT1/cmtt/m/n/10 double **py0; /* Initial dual s olution */[] [] Overfull \hbox (22.4968pt too wide) in paragraph at lines 837--837 [] \OT1/cmtt/m/n/10 struct blockmatrix *pZ0; /* Initial dual s olution */[] [] [17] Overfull \hbox (22.4968pt too wide) in paragraph at lines 887--887 [] \OT1/cmtt/m/n/10 char *fname; /* Name of the file to w rite to */[] [] (./csdpuser.bbl [18]) [19] (./csdpuser.aux) ) Here is how much of TeX's memory you used: 617 strings out of 94101 7365 string characters out of 1165810 62471 words of memory out of 1500000 3939 multiletter control sequences out of 10000+50000 8409 words of font info for 30 fonts, out of 1200000 for 2000 637 hyphenation exceptions out of 8191 25i,7n,21p,210b,243s stack positions out of 5000i,500n,6000p,200000b,5000s Output written on csdpuser.pdf (19 pages, 242151 bytes). PDF statistics: 151 PDF objects out of 1000 (max. 8388607) 0 named destinations out of 1000 (max. 131072) 16 words of extra memory for PDF output out of 10000 (max. 10000000) Rcsdp/src/Csdp/doc/sdp.bib0000644000175100001440000000244014342635402015037 0ustar hornikusers@article{BorchersB:CSDCls, title = {{CSDP}, a {C} library for semidefinite programming}, author = {B. Borchers}, journal = {Optimization Methods \& Software}, volume = {11-2}, number = {1-4}, pages = {613 -- 623}, year = {1999}, } @article{HelmbergC:Anims, title = "An interior-point method for semidefinite programming", author = "C. Helmberg and F. Rendl and R. J. Vanderbei and H. Wolkowicz", journal = "{SIAM} Journal on Optimization", volume = "6", number = "2", pages = "342 -- 361", month = "May", year = "1996", } @article{SturmJF:UsiS1M, title = "Using {S}e{D}u{M}i 1.02, a {MATLAB} toolbox for optimization over symmetric cones", author = {J. F. Sturm}, journal = {Optimization Methods \& Software}, volume = {11-2}, number = {1-4}, pages = {625 -- 653}, year = {1999}, } @article{MittelmannHD:AnibS, title = "An independent benchmarking of {SDP} and {SOCP} solvers", author = "H. D. Mittelmann", journal = {Mathematical Programming}, volume = {95}, number = {2}, pages = {407 -- 430}, month = {February}, year = {2003}, } @techreport{SDPA, author="K. Fujisawa and M. Kojima and K. Nakata and M. Yamashita", title="{SDPA} (semidefinite programming algorithm) users manual - version 6.00", number="B--308", institution="Tokyo Institute of Technology", year="1995", notes="Revised July 2002"} Rcsdp/src/Csdp/doc/constraints.pdf0000644000175100001440000011010714342635402016635 0ustar hornikusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÝVÍrÔ0 ¾û)|ƒvf…%[þ9Òn\ ™áJ,ÌÂ×GNb;l’--{êì!ký}Ÿ,ÉöQ@mòoúîê¨^½súó/…ú‹âà!’ÆèÀ:«UÀŒµšÁÙ¨‘x&Í$‘(Õõ^¹!b“8oG)B]Oâ1Iyô˜"Cñp£¬÷ª°¨#Éà$‰½º»V9býû™¦x¯Þ—D¼ ¶Ì¼ñÀkf0VÐiÙòš…tq¯ë)~KËû48Lþ>9qh;WÖ-«j1ýOøu{v9åB%p.æ^¤dÁzÖ耂–þÊ}ÅÀ¬~ÛÖ¸Å8zÞ²ìEÀìB•ôb_¬œ¶3«"ÉVhƒ—$ÿ! ùh€ië$=çGèb4²[5!6Òø/&g¡nå2-!œ¦^Y2³?ƒª—ݓ͑-aí%«œ˜ ÍÉUIß$ì!ø˜%ÅëœÄ²‘iªµêXÿõþ>+Êph–ž¨MZv®…SÌÖk l/éV*j— zÿ¨Z3ÒZa†JŒV‚Ï"VIE­^g%r²¡Ÿ±?ÅÚ¨I;ÌkQúo­+ l/é®×âRAW‹RKô,§‹ŸÍE‘´¹ cܬΦ6*7M¿z`(Ú=[“j9sö[À ²ÉêLüģD-Ð"I-Nçc5æ§@ÌC+C=²WʰÂ~xAv£ Š™ËpÔ8<^ËgÐ7<_e‰R’ÖîîÔø²ÍwAÈÏ4¹L“\<ÝA½¼éì¿iºê¾*”"X¹mî>…ÍŠ]ш?çû¸éñ¼#™$½´\´>Ú0èw»Aå,SÔ»¹îõ¯¨º·"¡«êM§oUþýXÑM€endstream endobj 7 0 obj 670 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 9 0 obj <> endobj 8 0 obj <>stream xœ¬{XW×ÿ™YvgÀÄ$’ É®ÑÄ^EÁ^ÀŠP‘.eé,Ë.°t¸ôÎKï½w öÞkbPÓL4Å´»dÈûþgYI|ßä{žÿ÷<ŸÌìÌÜ{ιçüN»³K€‚xÃÒÝËÙÁ^‘—ƒ·úz¾j*¡zŸT}ÀaV1¿ünÀýÌ‹8o–|„àʤ÷uW½óþÄo½?qÅÛ„% ´Â%xOà+ø~…Q‚KL$¦Ó‰„±’XOl&v„5aO¸¾„˜‰D&‘O”õDÑOœ .wˆOˆ/ˆçÄ/Ä$|ƒä“SÉÈär¹ŽÜFZIgÒ›”Qd™Ad#ÙNö‘§ÈËäò3òkògr”ÃåLà¼Ërfs–r–sÖq¶s,9vŽˆÈ ãÄq28œ N§•ÓÇ9͹¹Ëæ<ã¼äü¡ÅÓÒÑÒÕz_kºÖ<­¥Z«µ¶iYhÔrÖòÑ ÕŠÖJ×Rh•hÕjµiõkÖº¤u[ë‘ÖçZ/´~Õår¹¹“¹Ó¸s¸†Ü•\Sî6®ךkËuâzpƒ¸áÜxn:WÁ-ç6p{¸'¹—¸7¸¹_qàþÊýâ½ÍÓçMçÍä-âñVñÌx»xxŽ%¤fR†Ô2jµ™ÚKÙSŽ”;åCS2*ŠJ£ò)%UAµPÔ)ê*u›¦¾¢^P*êwh=‰Ö§…ôzmD¯£7Ñ;hKÚ–>B»Ó>t0FÇÐIt&­ K麙î¢éÓô%ú&ý€~LMOÿJjs´u´ßÑÖÓjÏÔ^ ½T{¥öí­Ú»µ÷kÒvÖöÔö×–h˵ãµSµs´‹´+´ëµÛ´{µOhŸÓ¾ª}GûSíϵ¿Õ~©­Òþ·OçMwu¦êL×™£c ³\gŽ™Ž¹Ž…ŽŽƒŽ›ŽH'HG¦­ƒt2tòuJtªušt:utNé\Ô¹¡s_gXç+ït~Ña&´'¼=aòÁ„'ÌŸ°dŠ ë'lÙ(ò ñswu ˜6Ûjïþ9óæÍÿëÎb“iGBÆŸL3uöwwõž6“ýäì)òñröX9m#;ÚÓÓÝqš«gˆ›ÿ4''g'õ´}žÎÓ6¹{ºûøˆ‚¦ÍÞ8gš¡ÁâìÁpå´^Î~¢ùÓܽ]ܽÝB¦9x;MÛååìê0ÍËÁÉYMÀÔË=À/dÚRwï?gït÷:è?mÌ1§í™L3Ÿ¶×Ù5ÐÓÁïïOÌýD¦ÎžÞ¢gß@OO‘ÄÙÛÕÙÏÁÉÝ‘½rö÷»íèååà.òvõsvpö»9.—ƒ_€»ƒ§“»‹‹¿£³»T‡ŽÎŽcÇŽ~"oDZãæ#~¬bÖ]ÇŽ[DŽŽ¬ž,^Í]ïåàÈupqw_l``düêÃÒå¯>,Y¶wŒî«KC#͇ÅK¶Š\EÞί˜Zù¹{»¾º2^lá(b¡áe6&Í«GË ÖÿÇD#“q–ã¼—,ßûúÃe;_“`±ÁÒqŽK¬Ü=Æ%36´<âàgöçÇÙ-~õa™Á8Ÿq†KŒ÷¾&ä+ò&KÆÙ.ßùš‹ ŒÆÙŽó7^b96Àì?4¸Üpœß8c£qÆKÆïü;cƒe¯ž.^¾õõu™íwt÷s ôrñt³^jùºzÿTûò%ÿ6vÙ¸@Fã-ÈÐd×*Æ%·ùbãm#c2.ž±‘ÕØ$³ÿ°âò¥ÿ[óF㌗Ž3^b0ÎiÜÔ‹M¶ÿM&Ë·°–g7Îw¹‘éë¨0·ÓÒq6Kïr dUáèåéø§ZÿTúøªMŒ­ÿZÝ–¿ëv¹ÕßÉ,_fÊÙaürÙ8ŒÆÑ°t\ž%†»^ÄâÅj{±ùëžd2.˜±±Õ"hÜ ËÆ—n4Îmé+nÆKÇ-yÅvñÒñ1††æÿ[›1®[·³3±ÒXnóß–¾|Ü,ËÆE0çó'ù%ã 6\bþ ^ló' ¶¾†-ƒÍ7ôr‹×5²lœ½Ñ8û¿–ùçê–š«¼âfè ‰jÿ¡?“Å›ÿŠÆ-Öìu¹–™Hþìú×g Eÿ¿î8þ9Ì{LfÏ1%»¾¶(6’û¿véíà#òðù¸±cÿºíú'@u¼tÖØâõyc„=ÙaîšgcÑ P#µF.ïׯ»±¾"{èö—´Á} |Íì`?Î_× cê7vý7ü—-^bdèÉ.Öß}L”€×¸û½öY¤¡uô/Þîcr…¼&Œ†«óØý×Wí~ÔyŒ¹ÓØÑƒM|ÎÞžlvwt×P•ŒIíü§öœÆÜÑ_“ùþbà9v#ÐÛM'¦š“™æ´iìdb¨9-Ñœ–Ž 4'Í#͕ѫéÇN6,;­ß 9iFn2;™inšinšjHoÔðÛ°\3ACl½†Ø&ÍÍMÍ3Í3S#Ítœ4ÖkDZ?Fsñ2 i3ÍM“WBhnšjäܨbƒ†Ñz&Ö/ÑL×6ÓÜ4Ó\™j„ب9mX¯™ QÝú1bKÖ¿’ZsÓLÃÁTÃ}£æ´A£‰ M¬W/eÓ²W²˜hhnÒ<3Ó,ÓTssã«y…lÐhbý2ÍtÍHÍMšgfšešjnn|5O£ M¬_®™®i¢²é•ê4Ë4ÕÜ4Õˆ´A£ …¬7ÖL׌4ÑÞôJušÕš¼Zƒæ™é+ hÔ³A³è1±T^MÐpؤyf¦Ñ§É«¥hž™jÜøJ$ ‡õ-™hHoz¥WæÐ<3Õ<3]ÙæëC¼ìØ 9YïÜèãl³ËÔ×e·™ŸëžMþn{7¸[l úýú)æÉéÏÏ<;û͹oÏ?¿øòÒ¯WTWG®,€é`»ÀL`!Ì[Ø f°ÁG°6ÁJ0€a/l†Å0,` Â,°„­°fƒlƒ¥0öÁv0‚¹°Ìã°6Àr˜Ö°6‚1ø+„`Pàn`ÐÀÞm„£`Ó€:p>„÷`ƒ'8À*˜ o€¼à¬=xHop„5 ¬…)ðh±Mv(ø€3¬ƒ©ð6pA ¾àëá}xx ƒ,H€0ȆDrH†HH(H…hHƒH‡XÈ€8È„x¨ƒPÇØÖ=Šá.ÛÀ÷C'ä°Mü-8ÐJø nÃ8íPU0 wà B”C <†j¸5Ð M Oá\†ÓÐõP eð \…“Ð P ŸÃ}¸ CÐ-Pàœ4B| ×á ôA3ÔÂCx_‰gáœ#‘D$)D*‘F¤D&‘Ed9D.‘Gä ¢€($Š%QL”¥DQNT•DQMÔµDQO4DÑL´­DÑNtDÑMô½DÑO ƒÄ1â8q‚8I §ˆÓÄâ,qŽ8O\ .—ˆËÄâ*q¸NÜ n·ˆÛÄâ.q¸O< ŸŸˆÏˆaâ1ñ„xJ|N|A|I|E|M<#¾!¾%ž/ˆïˆï‰ˆ‰—ÄOÄÏÄ/įÄo&TÄñ;Á£ÄÄ¿ˆ“@$IrH-’KòHФImR‡œ@¾A¾IN$ß"ß&ß!'‘ºä»$Ÿ|œLê‘úär*ù>ù) …ä4òCr:9ƒüˆü˜œIÎ"g“sȹ乀\H." ÈŤ!¹„\J‘ËÈå¤1iB® W’«ÈÕär-¹Ž\On 7’¦¤¹‰ÜLn!·’ÛÈí¤9¹ƒÜIî"w“{Ƚ¤iIZ‘ûÈýäÒš´!mɃ¤yˆ´'“äÒ‘t"IÒ•t#ÝÉ£¤éIz‘Þ¤ˆô!}I?ÒŸ É 2˜“!¤„ %¥¤Œ #ÃÉRNF’Qd4CÆ’qd<™@&’ˆL"“É2•L#ÓÉ 2“Ì"³É2—Ì#óIY@’E¤’,&KÈR²Œ,'+ÈJ²Š¬&kÈZ²Ž¬'ÈF²‰l&[ÈV²l';ÈN²‹ì&{È^²ì'ÈAòyœxGäàׂ0„waZ|¨ þ Ó­az ÌX3öÃŒ³0ã9|ëÁÇßÀLf.„™ö0³f¾€YÑ0«f†Ù›aö~˜ sÒaN Ì sÍaî̽ ó6À<3˜× ówÀ| hX°X‚oaáX8 ‹‚Á``ý°¸¡=zƒa*,À’aXú!,퀥§Áh!£¯Àèß°ì,û–/‡å¾`¼ŒcÁø$ÿ LvI¬ `…Vœ€•»aåXå«ù°:V߆5ó`Í3XëæÁ:X÷Öo \Ø €f°ñ8˜nÓ20;›¦Â¦“°ù0lö…ͿÖ£°u›E`Û)Øî ÛÁ|.˜×Ã쨃$쌀ù°kìúvŸ„=»`OìeSÒK°8 7ÁÒ,ŸÕ*°ê«`_ ì§a4xÈÁz:Xïën°Y 6·ÀÖlƒƒ[áà]°ÛvOáP!Ø‚}ž‡oƒƒ8<ƒ#iàh ŽßÓNpò§jpº N/ÁYœÀ9\vƒË]p­·5àÖîÁ½ŽúÁQèûúþ€~ô¿ ýÝ0À‡t<ƒwàØ8vŽ[Á s8¡„Õprœ<CïÁP8 ÅÃP:œš§Á©Q8ÝgfÙ‡pÖζÁ9]8— ç§Âù›pþ!\Xúáâv¸8 —ÖÀ¥,¸¼ .o‚Ë÷áŠ%\ù ®zÀµ`¸†áz ܘ 7uàfÜü nþ·~ƒÛ"¸}îXÃÝÍpW÷îÁýáþ¸ÿˆàÁ<4…‡×à“ýðéø´>­„GVðè1<ú>s‚ϾƒaoþÁã?àI çYðB^tÀwÎðý[ð}1ü ?ˆáÇ™ðãMxy^þ?ÕÃÏóà—ðËø¥~Ý¿ž‚ßæÂog‡þ¨ `¤~w„߇€ÙL0O`T̆?dð/Oø÷"ø· üÛþý ±Š`벉àØZ“ ­oqÊDFJq›êG大/'ëú¨nà |‰³,@*qs² 1FôÞ†°ô&¡Ê‹B7óó¦ÑJ¦IL݉ɓ!3zt7¥Û‚ÌdÒ ±´˜b§7ñúñîĤÄÖª‹‰‘}Jþ¡y¶Û&YuY/˜Ç8†ogf†‡Ú&英’² ΫÎMÉOËöbm.Vð:æåúdø"™>ò“DíK¤Å8“ ÃÙ|LájL3Õ܉ªxÆû¥ª_A¨Dª}|fª”W_—-œËÔ0NÉËC9ú¨H‘Ñ•L+˜#2ª2®0"S‚yL¢^J”«ںÀIõ‘4À\â%ó ËP ŠL–§‰3$©Dû­÷ë¼Ú tRˆªæçÕçd—§è³ü‘B5eˆ¸4ŒM‡9ªéüô”ì¤DWgIm„L…öFÈÄÑR즠¤JsQ3©þžÒÜD”{n2Î2“X«9)(›´ð\4@ãêûSëí<%Û7 RÑÉ6!î–¡,ÇÝò[*n îsTÓ±ßÖÌÕ/¢ ¶‚©Ÿ†n~Úœá’-LÌ…” ýÊReÙ)³¾å6‚]­íE›Ñ*šyïáBÌéi/¨kT•+«jÏÒc¦—ŒÊIº%#æ#sùL¤˜w2¡  iDˆ·+Ãezgw>öïB¥ú¨X‘ÙT¤§d†ÄÔåø"éwŒÌR=f1ceøalÜ8Ö¬2%µ'5$•!…¢¢¥OÀ³õ¾e¦5ع³×=ŒBBånIŠH W›xPIíK—f>ÃXâ*=<o»ü 8÷RªþÄßßDÊ-%ñ¢[Uô’3²Luƒ?jM!ãð°U,êpƒ’Ú&ËG7iÕn£yywÒYŒÚRŒïh2ªJæ26bޣؼp´K¡dbãv^¸’Z“*)C?ÒªYNíãæó&Ž,bµÑ‚;Ûqn‹X9éùKûr¦&ë6²ªSñ¹h½÷h}X˜q¼õÎø)ïºYÒÒØ\_܃úQwH»gW•Oî¶‚ãy%Ùå%´nSE©¢¥c Ö2<ì˜0_ð_ ÞØf)­ë|Ú¿ÊÑ| ² rr ð9µÑ6²¬z!îÐbÁ »¬$#K!èæaê¼­áê}ö „,P­jJ-¡Z†§òCRåÖ1¡a}™Ä=ò¢—ªæpÌT<£Ã-âeÝV(Î! xŒrtWªz“bñ+¯VVèKœÿ%§¨ó™÷ æ1fê³™xžôüW,À“}˼+ ñ‡ÏÎc>`¸‡6¯sr)oŠŽ‡Þ`þmß…›5­ãª),­'8x˜ƒ_ÈùxÖqn’˜€âí•Ó+T]¢b“m%nòíýP*3)e"º%K~DÈPÎõ>9ެäÔBkÓ™wï.Åä©Öâ¾Fáv Z(::\ì'÷F´±å'ø-̸sïÄÀÁ}Â1øªÁ{YhX¨á+óŽ'F!$ ”23˜ =f6ö‹(ˆ)‹ùYõÉ©(å$±8iSý ù²˜ñdÆRÙ@¡¥r¹A ³JÊ0Y–‹îÑx…gã óŸW–c9âQ"WsÄBrI÷dÝ•*‚¯*£Ð¹ìe^~v~jk*K;\LµÆçÇ)"‹eY®hÍ|IòUb.³VÌëBùQíéÑ”®øŸ ù>ÅRÝÉ‚’…¤¬[e\‚MÚ „iΰ/qƒx1A¡áÁ(IS¤é6Ö™‘ 2öÜai¶Ãy!bH´°ÖèØÞsÛ¾vþa.ú¾÷ü§tHÑzÓ­^ÆHßYnµðüa·>ÃÚøãÓǃÛõ ‘r­Ž±^…’"¼§^5ñܤÃ8ðÉd]i–ê~VRÊBtc†ü pÔÒ@û#"vÇÐJWŠc‹xë’ÂrÐE/¦šŽ–Ë;Yìé|µðÇøm³/æZØûYÙ ïS1ÉVAna–}óc· Þàäáó/œ>g§Zã÷ñ4l÷½÷cËsBóë˛籢ՋzCš=NÚÔ-@Ì´;lSðþH?‰_@€›Û¡}È*r«Ûß{ôGÖVèeõ‹Î>º­k t½ ß-ªÇêhõùK“u Æm [;–•=q Óè—† §.Ÿmù½@_z=°Ú|!š™­[È”‰y£³"ÙÈö²¯ëY—“Ùñär¨{¿àU‡b1:G–¯8xÀ{OøRD;†³áI¼÷¼jRµñ$ÖùC‡'ë~ŠGU«ùº/ªì¼²œ¦2ïÌc´X%LºbøÍ™¡Êþn!ÃN‹©i,-Áù”enT&ê¤u?U}Am`>ã#ÿ¸0yT øh¸'òD>ÙÁÅ5A—ÑZ÷Ö9qçñ…º£[ñ6ûΪ'>cÃÍuþ Ó¼3ʺ֒|¹w‘ À7W^ˆè2eQY³}å®û|ì|…¾öQ®‰+iGÌUÚ¾Qxó”IJDºKã«x"O°…Ki;Tësø%Uëó>„»ù• …‰•è:™ÝU~®¾ù<º‚:e­>5ŽÝK«°Zü”)óîDeËÑFzÔŒBË£äk£5ùiUŠ4ݦUAZ¬f22ªðÔ ?š»Ûš¡‚eIÉMÖ‚»:îc£V±¦“¨¾Á«ù"ž5‡ý™ˆöáÙ ‡´èŒØ”„THc„R",Ϙ.ÃÒ^ô‘8i„,L"Š:È‚x!öãU§§W ðTëþ¥ÒÂÅtO·+ÏàŽV³¢þYÂýUÀIT-¼1íâ¾#ns2TSøù)YI¹ˆ®È µ2)²ŽŽÞΪ.ZAmN‘(ÐiRõ]ƒUéY±òA,'&ÑåŠÂꆠbwïSá×lôßè¶[¬?VºÆ+ðѶ´êIè†÷gØì~UÕd]FuT¥Ço[C³-8#0SÏ'Û'Í—U-^¸~£y•ó•£BqHˆ$&ö¨wX0 FA¹áÁ´.cºßç¨Ë”}쿽û ²ó¸ µ®°µ¢ ;×§0üt½}É~Y¨74Uef%f$¦ eB^b:jA튺ª†jED5±e²zš‰Âoˆþ$fÑ_5„¹îYëÄp—ì©é.ËÈëêâ4üŒ¶º©·®RâU (r˵CN´…·›Ý.‡ËϬ?2fE#탑=Ì>ÃKYÙ½â—kyÍ…½íw®´~5tí˜÷ñGlœÐD û9µ&g· Úêƒoú÷Yê][…ß<Œ— jÙT•Îc¾9ÃïB½â&Ï“¶õóÃE³½?v´s9²?ÀÙ"ûB×ú}}? ¬ž×|×ÑÛÑÝWr†c >ÿØúEåCù,h¨ð•!Ò•,\>VÃ%M —÷_‡Ë‹ÿ† ‹l㈱ȢFöšT¶òºEcoü1õ)*”æ®`ÙéËKCKT‹‹ÃJ'¡ Øä‘ð5|•¯;?¿Ïà%$DF'&Æ!ý$OŽHcPf``ªïÔU{l´¨w|l+-,O­{kêT2ŽdÎs±oÔVõ„¯{¿:'³¿sæðë W±ÀÎ×-f^‚:YÈÚñÅ"Ì)ÁsÛÇ:ígÄÿÆg2Cx]ñ¹ñ¹QŠÈôt˜f–Q;}62ËgaÞùMõWÝ‚î U×Ð)4 ns­øTì¤ËxQؕȋ‡È‚…¦„dRØebu-½f1‡çT­;µ[xuÓsgL¢'¿ÓÔÞDc{ ÍÍ;“FOÄulùøF=qš5I&Ìg²±<;1%F-w¶›ÉÕûgÅäÇç£,¶£ÉÉhJ¡Ì)Õš!ïý¿Á´ë%ǤD§D¥‡¤G¥£t”‘§hÁïâ;z5×Ò3jShM04É'î²Y~„ÃgƒÕ Ýf+ ¢Ðþøøê,¦ ‚““Ùú¥I›Sx³+%.9>9>%^?SžƒbéÈȘpXн<ûO¥Ã1fÞ§WSuóÊ…ÞšL}Ej~2[e*˜Ã2^[bN’¡¨H™,œí('ꩌ©¸dçpï¨=¡ú^Qcµt·jDI|ùÿÑÍQaU.½Ì-x”Í*G*¦Ä¢Y4ÃöZ›£C½|l·{®C¦È¦Ü§/¤>ºEÝu܃ë'j¸6‹©‡1,\7ÐÌeŠYÿ© ^ƒ‰»M×ÚåY½è¾:YÉZUÿfûǬêTƒ|t;'çSõB»˜z¤™;êH ò•ÅdVD äM¡lMâàãÐáuÃù[øu:f­k¬µ¤Tctv4’ iŒ„ÏbÆOo9ô"„òôQiNF_k+{)Õ—Ql•!Χ‡0¶z³q~\vB6ÊÖG%¹™©ì¨-Rª,!S^zOe¾ÕËõÊ”¥³é&3/·’m§¢õ¾b"ò]RcÒ‘~JË*hg[öïõŠ:SÒŠYš0¨ŽJ־鼜¤Ü$¶é®Ï–±M›/…¬da汬…#”yjx6¢Uß°¶Ø/q–o’Œí7Qé•OBŸoúÏøt²î3ÕÎ+|‰,ò¦’Ù¡nú¢$B¡Ñ>á^̬QŽ3uôvTRè#e~¶ºéÏIÊW7ýJ15À6ý]†8q´WOÁÃ~ª3 srúSôÿÜPøò%Gµxd2?71¥¢Ú„Ü(¶à ð²<À˜1FzØú)-j\æ†gè;T“’Z­ÞÓ»Mã]TeɯÓï­;iŠüõ‘L-JŒEhlß댒ڟ$Ë6xÁÈpŠÞ‹w_»\y-M_É((—+\÷¶Sð ÷~CYU[PŸ¤¯` ¥TmBv ëXáá~ž±1á!aÁ²b=QgH#ÊCùyµI,š¥YT-*«;ø ó‘ÃcL¼ŽÈ£ÆëKñÇ Jž–—ž¡È+>Äo}ÅLKIŽA1ú($:vP²’|pœ¸1ŒÍÕÿ9JÕt~^J¦zÓ³2+ÔVȤ«1%µHd1å§ ö%KsP›(”œ™‘QQÖUØ„èîR7¶Òòb»Àˆˆ½êÜ  ö&I ѧQµ] E½ˆ>]äc,d\)´7*jO4;H¤ |“½’ÊP›>>Ba§sköðÝc%9í^e…ì‘HflNߥ¢“ˆÝ#,¥ê6C^¯šp‘¸2Œƒ?çà#«ù±ÉRŸ¨ƒaúÞêÒ-=)e º=+ÒA8Z@y>>ú Ö{‰I<¿µö›Y;÷¸Ú öiµõ50¸š™Èpl·›ì?TV!˜ø»©{¿«±g#æ‹e±çƒ‚b|å"ææk=F“Yš˜¢Y£dszyYöI5öŠÅÔéÄìÈÆ• &zÓ˜&æ#ÕÑEqc;S¥ùÇRØ! bêX¬"¤e¶mTÃs¡j%^:º’«à=ÆùÙÕ˜À}Êã9Y'²Ùü’‚ßÁù^~¾žÞ~5u•5u¾•^êöS—ðÐ%âô5Üwˆ?hýü»NQ[X/ÒïCmymÕßÍÑëœ÷¼¦'»õë£yƒw×óïôlûçÌsªrεEú6è¨ü÷¼çzÖ¶ßÍñv wF¶úè`®KÍp-ÿáåÍ&˶mYa²õÚgÃW®³|ßáàŸ˜5üMEµêÆz…>W®SÞ-VV¢ÏÆ®ï–Ö^/¢s¨­‰¾1Þ!Þ!R'´—f6±õsHÀ–à«AEþhͰÎdQp¤:¤:¤*æJ"«Ï«äü[Ô¨1¶P±\öc#ánÕø ñò w«·^¶peTnZNjjrQFa*›×J²¤Bõ®ñѨ€ÐHi¤,ÞAÓµ*)4õÓª ñ°ã*²{×èëkñâœ[Õ>ãČ͗#/tØÇjû2‹ëÇìŸ\«¯(¬®+)ËkB ôM‹ÁUF›79gzT­8~¸ó€)Z®?ÿòÞ_?=Wqå®àâ¶ß3è:ÝY{Sš£çáæŠ,Ðþ:»óÝg+ZêNVöê•wç¦Ó£Srø^å­¨‡î¯kìímtµ±p;lb/Ø´Žá5Yž6Û}Б--i³Ý—î_ªëzzŠU»5³°t„m””“Ð=¬såÌõfLäÈ»ü34á…¥¼µéácÅÜ×êíºñr®€bfí°dÞ[Q¶·ÏCØà_u1fNWx!µUeÅ7Êò8†ð$t3¿§¦„Öý´(¯0½­!ð–Uùí÷²Î¡ýRqQ€¿8$ T1§p±`">(+ù ˜@W8Weü+#›¶òXâ7®à)WUê=þhÒVU™¢¥ù ¶â=UÙŸÂQ‰ðü°4—½a‘‡>Åë°éÏÚî¡ú?¬¸?Ãr £‹ÀÃ]ê!1-‰Õkÿ®¹þ:¢‡Oï]¾ÚnárC!³‰Ùà WMaÓà“_Ufü« =çÑ9zЭ훀»G™¸9=#))]‘ŒP[Ÿ¤ÇD¹Z¹'âŸð• Ýî]ëמÛu÷Îùó·îï>·flã Ÿa!/ba¶åè¡h} É¹§©¼¬±>@éÃöµlã’€P"¢£bÒ3ª›O¶±¿ò1šu¡¯Xzod1ÿzH©ZG3¬Ë,Wúݯ û"ã±ëu^›BèêJRezMQM‘¢M½úТ²«%[ŠCÊÐ ÖG)t*´CT$*òMß’¤v¡j9_•†%Ü+¬ï°§”ʘ±eÿÔ/ÕT£ç&ᚇη&ëžÀ ðgü³¨,¡<’Ö-¹ضwÓ”å{·­÷ Î(wxI2ԯȤ² ·®À÷Vvô û:*Ï «èXhŸw]p©8×^I랸ÞWÑrrʧÛO-²¶—x¸ ¼|¤¾»qz·{."úr½¹«ÔÕÏOèå%’nö«™YOîgU¼ÞÖË×ÅÎt©Û,Äh#F·eÎçwØV÷È-Ð[yQÔäs×ÿjÄ=ôú%ïQÕ…ê µÍ·Î¨ üÊ|øÿeq‘‹ÚâªøNìǯ󹵣Ãù´…~jlr"ÛÕ§¥¦¦å9»æ…0>5Åd•Õ)ŠZºkš+ÚQ›$ÄÅøøxûFFGGGEÇ'èŲÿbâh¬»ûÿ–àDU«ÊŸâû:IÂ=Q J“dö±í6²CžAvÛOzèU¶æÖ¡T[ùÅÁ¢èÔ‹êJz/±swGý¦ê®%ÐU¿Õ}ÍÁñؘŸsµ°½¥¯÷Bù%õyͨµ†5”¹5í.³Bô"³ÆŽ…uå……åù1¹ÒBax~lʤë{kÎõïÛbféo)mÛÈmíõ³·ñ½ü=¼KkëËJkký*Ô½T<*Á3/©V¸ñ>Gå‰Cù«öØó˜«£{¸Ûq#³ò>^ù’b¶\â3Ñ<ŸsYóá5O8­ŒÿNmeKïͧMc›Zø]—K^é÷-Ý_ª÷‰y•[õºò-9kÑ,4#ÌØg§ÈÜËuãú/?½õ0(·ü0À1âÿÅhVÌ‹ÿ× Q/ý_¿ø#ÜÄ?4ª›ž†Âõ÷+E ŵýQ7Ão ¢{bzãú"1èÅà]|À /2ÿÚÚòŠÚuûúûYžÐ¥:TG aüæMÕ›íœÓÛüÕn¶ šYÃLÄoã Ïš¿9}V80pµê6¢ñbüó3g–ùÜ­¾aŠºŒ¤´¤táeœÁÝÄ“;vHsÜþaäêî¾oŸçZ¶'2o³èî«êi¤Û·x÷#úûǘƒùØ„™ßev0öÌ2f³Ÿ±ÄK™ÙØñÆ`^÷ !³Ze¯NPø'8%ØJvû»zú Ú% áøÉ¢ÁÆVau}SqyÂXóûÉC?¸ÁÁ[UŸðñ^JMNÉhýB/2C$ bs‚3!yb>ôcSã3ëÛ£Ã:˜r9±ͦçí\·:X’Qê%ð( Èf[oY¸ŸsŸÿÝá[UÇ…½=%§Ñ=tKÜk=hß½·ŒÑ)QóÅë”Ã&½$IrPŒw˜»~tHœEÐÁeI‘²$=>/6OÖÝÊ–·TF|idIHÕQý ÏÂð"¶ÒÈW”VJsì3„Né¹¾QizÕÊŒîŒÖô¼TA—I ‚¤’0‘¿ÀÏË/00<:N¯’BåéÕ9uéÊÔ”C—„K¥Áá©!éA‚ì£ižÈ‡£œKÄG›ƒËÃ3C-–†ûËú#…-ѵreXN´Þ¿Ð»ÈCQ’päG懕d¥) 5 ii™ÙYiM¥¯yÆéH‰ÿ‡žËXרv6&•|š~|rLZTFd–¾W¥wuBš¤$¨(Ñj̇U©qÞ]½nþá,ÚcSãÒS““ÒR§Oµ·Ü¾¨6JämY;öÕ‡Yª{|7ž=ó¶jX’ŒÁÛó>d¦ZZÕ8 ‹üa-A˜¹z¼,(V$"ýVÔ’_]ÞT«¬j¼–©·«ßn¤~ÅàŸõ#îÖ+rR„U º¢HYÙäSk«2†Ì÷|›qºE¿(ÚÙ\X…ç±ý=àÅ•4s„iã?ÜÈv¤ÓN³%VßàEÇ2«‹Â’‚º¬&õîþy6ÄÚ^!°è 'ã6>#ÚŠEŒÏìÃÞbDØG]wÅ«ýßY„1ªú¿3î ¶¯œÙ€*ˆkÃx×0§NeÄ¿ÆÜã¡ía l‘,RÃòÑ=¡ž§Åï2…êýŸÈ±¯§Eä¡K4VP¨•%ŸˆKѳöŽW§`qu§Ô¥æwµÕö j¤ +wWúä©_–( K;­«×¬Ýãkã*ô:á³’Þ¤VVTµÏpa3¶éÁ5U“PåãÇxþç“uÃñ •6Ÿy‡u-¾5ÓŸ7;×R$qK$íË”Õ"º¦¤´î„EûzfÂZf†²8ÍW8í^13+Y‚BPtbL|”85W_Ô©/#À{øÁêqSx%,͉ê/Ðîf¼kU½¿± ¯ÿ­ò >ˆûø²!næëìð·BsžkY@“ÛÙ€“ˆþúÆ…ÏÚ%¥ž~¡Yz¸B"Ì•¥E¢(Úã —í.ÛW{ó†Ê‡Õ—”ýÙƒIÝú‘xß%~MÅx‰ÏfóÙO ¼­”ƒ ˜9|ü…ð„¼/«nx׆Fß5Å+â;C‹£•±yˆ.-(ª¨(ÃCb£‚…G$¡q®‰èdZ¹r0S™Vˆ²éò€Rÿ€@yš$C,(>柸Ï=I’z¤083$-‚íñ%!¾¢iunvJV¹°]Q˜Ú˜’4;ÌÒ˳bsó2 ™·Ô`eö”«Zëpt áÕ©jŸ™Äc‡×%å¤_T^Rçää§ :73–ízbãc„±‘ñ‘(†) -®()®hu®=èp8ÀÙWàl!± AOãÉYÕsx Òˆ-‰q1±ûô¥Ì:9Cûì9„ôÃ#Ó3R’SS3„é9)(‹.•åúˆÅ¾Ž Þ}Cm ·u7 ?)Ç;’ò2Og°Äêôμ3H¨üÁÑxkõ{’Ö?“0‡Àï«ìÿ*†Ñú;ÐÆs*nWo±ùt,­²Ä3ïü܈y9ªÕªx>æPîÕ‡˳é‹îæ”y´(ò¨¯»O°#:Œ¸µ»ÔˆJ¥7i¦‰Z´¯ÏÿZʼÇ;çÒ1O/m|JÝÉ­Ëm®i¨Vv ~ÔÕ^ì×áS̼yƒÆ‰Ô°¼Ç¡pÍl]È7>\Á6ûC×óé&æÿÙž´muuY- ѱªT>3 Ï)ŠL“"ý °pqhŽ´(\ˆÎU»oýSÜÊbjk ç«òÑÉÔòâÁŒW ,õóü "©þˆ…H ñ?C¤ µ)%iiø~/§Ÿ\ëÄ9î)Ò‡‚àŒà±Á¡_ß²œ¢´L¥°£°(µ1 í‹ó ¶ŽÇJœö/ ,¯(--ÏŽ-ŒV ‚ã*ЉæDE\§DU›ƒè²Â¢ŠªÐ€ðàØh±Ð!Tï¾Ëî¬kòj‰èMú¶1¾ ¾ƒu€âØÜÿtv°DÊ:ÀØ—g—à´,/Å)%“Ð ñËy§0÷…Ý©ðã“u‰Àñ;|ÝŸÖ]ë¼qÂóäž~!óæÊjP…~gcͱÆjYH|||l¬@÷g —‡†Nñ+©ªW7œ²ìÜ`la½ÑªØë“­y pDëª"¶Úؼa`;ž¸\xɾÂ9Ñݽö¹¸³HMËH°l ò3òò§”ùxxZœ³ðôô±{Çĵë. fâ~:áÑkÇ[×è®<ê;ÅÍÃÓÅÙ¹ìÜ.{cxª¥ÛjªÛÔÍ þûe]@ñÿ¸çˆëb؆#‘õߨ*ïzc×¹?«¼@÷£ÿs¯×ªzðQXV92©’@ÏqÞsõKtc¾%r¸¸í±pf¨±½<¢Ñî³h±?æC]…ÍMg†Z1ð›4v0À2“ñ¾üá†Ë83ÎöÓŒŒìÃNØ­sž'ŽÜ +‰ªÅ¹õØ­¢¼6¦X½ííWqùö­œ¬òxd1[1ÜiŒ6óÎêþ·zZ šš„'N6|ŠÐל۶ 2<ø­õ®ö{ý6;z8zKØtãêWÙz¢úQËqaU{uQkµ•ð—|'žÕGÉuµ‘á_Lë>.õ KóœÊð¦1]³{/wõ75Ÿ¨ˆn£ü„ÜØ¢¢è¢øÔ*3Ú˘Ÿÿàéõó~TðÓƒS¤HF3\†Záæ_ÑÜY|­jPPs²µ±¥¡äÄôØü°ÜØš¨1·ÕgÝ/|Q’—•‡ ô‹Ãr¥‘±!!f3[ý¶\^‰ókñÛlÌý’3²Ì?¸ÝÍß¹ ·âZßÞÈ–¸§4ÎàÅŸª ¨µÙ–Y#+ä|ÄÂú”cñdKÜ=íì½×£µ4£ÿx>~óZGÕµVAíæfŸ èè8ŽuÀ=üÛÆÌæ 7óÍ«Ž<Á«çŸ,.²nªÎÊx/ó6?鳪Žˆîm8b!ô¡ØJn¼šù]: Þ†™Î†Ë»ê8ô^ÉÝÁcÞfVryøÍŸðÄÔ1(²&X1¯št~›==øÍd]ñía>Ú>ö#‰U½ÔåÆÎã§÷/]éud[´ (!*E¢ˆ¬Ø²DZ·ãóøîMÌÔ)Ë9ˆ£2K ¥ e!…HßWäs¸ÝëôŸ`âTà c£Ð£Ú;gg.­+þm ¶áÖ”¯·ž›±ù€ïoAKä!dF«vЊýÚj[îãåÍÁÅ“TÓ¿Ÿ¬ûûÈiU_÷7üáèù`êrBE$ D1ñ1L¨XïèÎðˆÃêïgÙ*©Ã©~9HJËÏ´?¨>¡‡M™ù<´5\¶+Z’ 'VePÝxן·‡!=ƒ`‹Þ¶¸”A!ŽÄS­¨Jž’š*M;B—à° ^œKœT. r‹4gûZ–ðt/ÍÌT žòðLT&Ë3 G1~|¼ßâ2·Ô ÇC#“øç°ð$Eâtq–®^@®_z kwWWé6º†—SW¨(C¹(?N]¡×¬`£íª©-¹Çâ¯F%èÃŽlwqñÀŇ7'ë>Ãeª|¶ÑŒ“#:"!½Fˆ)ê’[½™@÷þ;‘“$_VT ÈÍKF)‰)ÂÄ´Ä4”Jç”å––åI}^”ÁѰhŸZ÷YXDdpðÇZQGmu~mƒ Ý#7¼ŠmÞó3ÊÊhFk¢â££¢%Qáñaˆ’—W–(nT¨›JU÷I"Gõß _:Iý×ï—Z¾ÇøK­¹6ÔÓA.³’úûO“üxÿôë&œIáE_p(f‘!¯þ§Ÿ:©9§ž»Ï"¸nd>_´Ö/hÚŽÜkeWio^Ò ¥¨Â­]܇†Qï±Ü_é¿}+|dæˆ߆·qÚöæCy[‘>cɼÏÌ`ìÍÛ*­…EnÁÎó¡Þï!¦/¸ô†]e{ð}x*žŽí/K/û Cš$ÅGZéÃÛùÛò,!ÍX¬`ã›Þž#ʾÿ&¾û¥ð!ô9-á xòP§Ø®{,¬!ù~¾¢’Àªê²Òªª€2‘Pðî–ÅxY³Wó$„µpç“uyÈ"œ À© ´59$‰Öý>Å6ɦ£ ¾–6Û-\f!u‡ÚåçvZ_ó¹ƒòQIRYR{ò¹äuçÃÓûÀ|WOóæí=ûÄðlÔBã, ®£âà¬ULÇ»ÄJ#¤Ò WùDÏÀ<ÝßJ²RN ŽñðdTškH¾;:…oêímÊLÜò3Þ+Ðý¸®î¦®×zlû&ø÷?|ϹòO Ķïý}Ñø¢JÀ–ö ºçßæà%lj2رgÙÊ󻇟^¹4üp×Ð2aäQ~ƒÕ: ?O;?qni¸0´&²µÑ=Õ5]jžª¬F<¹‘@ê#‡Õ®-ßêÐ!+‹.ûSC=ÝCC‡z,…Iîü¦Z/WW/o7ïÚææÚšf6k-’÷ã(u¸ö/Ÿ„žn{Šu?¬ûpðB¾­™“Ï^t¹KjƒÚbë¿§±‚§ûæGØžœ9Õ‰"¹Óºwœ½rm¦l²Ûá](®ª.PÖ$ ÿ_u×ʵ%ÈÌÜMœŒ‚æ²&1jc4K,±Æ»bTšT¥HïEøiR–Þ{Vì½Ål‰‰5š{?rïÿÍ.KÑeY¬ùó<Ú 3§¼ç|ïyOœF$àt~9);P*Jð s w 1´ ˜¥ù­±û{ßU«çöžY¾òäžü¸š“ÚùKŠí÷¡Ýh{lanFjBfÆ?©âq¨Q´QP ÁŒãL3##‹må3Sá½2í+.äfZá>$A)F›‡ >Í `8qŠÞçÕÿÈ…ù…GE"­b±çzk{'S{çà+‘«y–{Š.ÒºXž[Uj–®ãéà)J;¦aB5³”:ÏÔL[GY~ÄLÏös§üºÀ¹q:«èK 쬈eôÅj2züb ·P¤œCéÖœ*áaŒ®¹•¨†jÔÁqg¾ÞÁÓ1vÎq))ÑI9i¢”¡…³52côs×mßžŸR]¤ýÔ?ƒ/'XcV3‰¶ YGb7ä üÑŠ¨I†¢Xëh—|ëI¸¯fu º8§øÁÞ} ¢r×r›b‘sª[”y2c6—ËZ¹ ýÈ`fÕLm£²7hÛçrÖûÜ÷£SÌo»ŸÉIö\Ÿ¡Ýœ’Fp¦îÖ¿÷§†)BZ>Lukr݉ð(ñá5´÷ÞE¾ß^u>g1ÛÔf.b†-9F<±ëž#·ŽZÌ‹ŦP˜_˜W°iÌÚðu$Ii~ó~SW¾‡÷ö]Š‹Å]ÐÀßò9¼Â_J‡áA°üùÁ"Xˆ¿„¯ñlQ Gþ¿'î‹GâѸ'ÖÆCðPÜ ´aŒ…^ð|+j5 t¤^­\ˆ¯`NÏ„ã*Æ)Ï^TÅ ž &›Q‡]G(»ƒÑ*:# >0µi¼ä@.¹þqÔœÆÃµÇP¿l¾Æ Á3¹ô°°4Ð>´¢ÍøÈ@ºpYIUÙðµ¾k5¾†çÕᖆ…©´û»^qŒ×”M¥u<”–B©6ú†gü÷„16Fßhv.& y˜ïFʉ_§Ý„Å7{±ùIübn¾IÙ¬Yc»1KÌ ö‰àÀ°Æ¾4² pð\HðŒÏ¿Uö½WÅ­ÏʧWfúeºUi»í Øê_”½´Ð¶’ ª™%‡7ÏN±*GÅ(%&¯” §míÝ}\H„ðLØE®{È“8Ó;ÇIæVW#¯I]ÏkîxcÐ B âÙ*«q˜Â¶‰j>O4-Ü£¬?ðÏfƒnoeføæÜcÝe%ÕÛ?iê ß°FÉ#„jHIU«¾"´Évs+‚=ÂP:wi×`üö" [º(¡PÄ„nöµá­4²õôÕßÄØÀÂ×;$€'ófÊ~‹ç†“ö({ÿlçøœ8‡²Âsr¹½VÀ?É3r‰g(y~^®I>I§öA÷Tøobê+üw§{±n «a·"õ(¼ 'h,‡éCOßÞKãöq˜\¿LÓ(ƒ?¹[Ùtæ·ýƒKLK9–n` ”TçfO{v ó,XœØâ\;t®{r®Ç/ä\¿™Gá½79ÖÉš7âZÑ‹t~þI8TÈLбà{ÇÀ µâK}oݯÄ÷ø{Ò³ôfÏ:ÛIÏâ“ðlÎ)LƒuŒÜº~º^wè`ÊvT¡udqé¸5&î¶¶ÚöžÎ+Ò\5“Ë3’‹S’gj`a¾x™Žèó¾¶J dgké,‡q- ú‰r§­xÊi¯tè´ª:í·B2Tøà¤’!õ=P½K­W}/¶î€Âʰžì¡g>ªG<íÞì© õ&?>[ã¹·Å‘tèÈ:åÈG^È‘ÏðÇÞ0t".Ó§ÙeØ3Q¶Äiú°7šÝ†=“I§O³ã°76n'®ÓGî:M~ ^ðûc¤*=òz],Vµ^}ÊÉÏÕ7_Eî¸ë<á•øzÙeÎN.JÒíý†óûMµj¿Bsö¥ËáHM˜|aÑì¨zÞÕ&ó–\JpÔæ4ŸX/-vL†KÌóÞ«­­W;xl‰µÓvŒqN/7º8Û›å8Vúµý—ª,‹ç§ˆØqe9q)™½wéͽÖzš±všcnYBtÒÊOv°0^o7ÕFôô8dÍ @»«ôï–À@^ÁáÚIäè‘аë©Ðp©ÃаKå|þ¿Æ±Š2¦ÀRZÚTâÛêŸåÌMY-ž¸t·u´.yßï~Ý÷ÆZ¿ €÷«wƉöVåÿ†î¢ÓÎgÍØítL]ZñK¹æºìAË–f›DÎÕ2°­òÊwݽN ¿÷cž…Æíq\ÝAÄ=èUÓ¾_k”ºÝNdUí|fî”9­- Gê¥ácJ=Ð$€üÙaù]•ÂþÒBþ|¡‚¿ƒÿpì/*:ß!pƒP¡¶¬\–’0°Œü«/þKuÉ¿Èòq]]çŸ"¾SZ¿Z6O~µ²¦Â!8GòãÌãê¼ t!.‘#Ìͤ޴ºŽ<«¬Ú“I¿­y}âo<6/„ædÞsX8¯:ð/SâB¼G‡>ôØ£SY˜÷x!šÁ/ãØG]Têtö\#dÏvªûWë•DŽ̩¸'Òï–ùjh¬Ý¦z¤²3kÖ˜±G~¼tåè៯Ì:2FdÚµ¦|Ù¼¹zËç/ÔÛsàÀî=ûDÍYõ\½ÚŸÒò7“\À\Uë“—ç5Ï+ïß¾B¡A_X®ülâuzÊ!ƒ)n ÈœäœÐxˆêÙ;ÁYØÇ­Ý…½'8̹ޭü…f—¡Ø{‚ÓLì½òÉ÷¨X½5;ÑéšWãF{øÛ/œ¡ã`.›­ÊîÉo ¢À šf¬†‡á­g¬¤æ ‹_†Å¸óí7E_¡¹bŠØ«ÒãÁ^I ¹ý0•D‘m¯#¼_ç/ª2dr˜S ­1 ÁI¯¦[D1í;Å,h%ЉZECm‡ûÃFеÏÙ^rë¨r}Lð„þt+ ?T¯ …°ûj@œÿ“ª ¨jH99GÔ`Ö¯êPÀ9…¹ØyùY#­çntÊ,Ÿ”D/Ãð?‡Õ/Xì4¹‡à‰¯ÀCÎ ½]PðšÅˆñÝ J½µI©øªÐymR+Îx!µb£vÔŠ3¤jÅŸ7<äØOwQ7uQG´tQ?ÝEñtUî8;¤\;ð”’í^‰ó|ÙÐ_Eñ±¬Ñ8é‚)ŸëîCoéžzºgèãÑ^ϰ®´¹g8g­õ4í4ÇìÒĘ|¤U˜ìhn¼Þî›f$´½n;’àáp»ûç y×0XÀ±wöýn)@`-Rž°$±G”LÍ3A¦æ9¸5Ï„N©yÎyVÍ3A5Ï=Шˆ´Ö¤ú‰/ ¾^1!ŽßäšÛl?”“2{œ¾Ó‹}Ÿó½¹Iøî­¹é—ÊwîC¨Ò8S'Æ*b]è*&Žbÿã 6Ž”¯¹›;Ú„|ƒ½ÉCz’bbeÚÿ }Ž[<†Ñ£¬Wkœ¦=‘7ùãŠ<ƒÜö¼û©¾ðÑóT:öëxC§ ·ígòiÓys ç¡ÁhÆMWèË@*}»þš Œ#q‹ ”H¾–PÛ5º=1ÈD¾K¢üû §Ã©3êàÕГÛC x‡˜åLâMüǰD*º"!¡1ø…tZæËl„ïée¡¤ˆ/gøï¿ç") Ç4°Ì½|ý}üýÍýÉ—oþ2â]h[tti0“Ø&¥øa<kà÷6RÙéÑ ÞL#]Ow?òm½iýÏ(áÛlhyø$ÖÔ»=Œ0èk £ãa¡Ê°õŸ­jÂQh¼/Kî÷iX®ð<ªT íÉ×S8¿|Yðßp`ʯ„ù+5Z„Ÿà/8ÇÁŒãx µûμìÙ¸».˜›©iÂ\åŒ0Ò|Àâ0t×€‚ãx3ùÁ^(I {¤`ÿ6žÏ¿¥1‹ÂKñÿ4`>ËáapFÁŠ“ëìâ»Îäà›'& #p÷¿·â9ü{xäØÔ¥¿ïÖÂy5>ï¡B 1>×qÇCfC\»C×£íj0¥A—ƒ$ê*ñH²;†ÛE,gÒ)O­Ñx—×Fcì×8H£¦$`¤±žZ7ÚÂÓä™^¡`y(Û%Ã"Ã2Æ­`†Ì_øýBýä{+µWþƱæuzÆq‹û¢uΖæV殆h)Z&6Ê1Ë1+r.C'QiNÉÅ쥩ëâ\ɳÍÈtÏî³ÇçåÅ•¢´ß©Ô¤À¤Ð ~9Z…L¼68lp°³´×%ÈËË3êwÂîÝjè$\Sÿ‰£»S³Ã·!æîÁ/ð³k?]Ñ{Œc—"=´ÖÉÄDOÏz&šÅà·®øëü©ÒÓÚ¥×Ò€’Ò?âÁ—x ¹ý|m¨nÊ9`-Wݵ lÍLìM³È´ò*¼sü·«ù¹ÎæÙ¢„¶2IZét|+ êç=HÖ:Ë=IcŸ?zàTûyEL±í$¶ãJl­[t@ªoô¦ÐÀ¨€µƒ;ËH}S °'$+ïš¼Š…4xIìJízãøéŠá†ô!Hkþ—û\ùT…¤üÖÞ¥ÿ!"ÞØƒ/Rm&JŽêw|5 ŸtþªÜH›%»^Ll½ˆà¿Õín"ø»Zù*‚ÿV¿Æ]W+_FFpU•‡ÑÒú»÷p ]:×%¯:~Ï–&‘@ü3t7*4Iâuå`éãóq.z@ž+Auóç‡B;0ÕxhÕX%z<‹¬Ò=Rü2ý‡‘˜¬ÁžôŠêÓчO`€WëæeäÌùòÕMcŽOV¸ý™ÐÚÚS›Ê•OHÑ/ó»²%ó«ù± œÍ~K*Tê7t#³¤,#+¦í@ÇÍÍÕOÕÙ:1?À4 Ç\ú¶Ëªó)vku‹¦ûjrûÖü—u®ž–A&Aáù+ˆÑ‹«Í6Zš­Þë¶K\P ¸ÿgÈwC*˜7úÑäâMz¡0«Šƒh:esLP¢W,ûBÄ©î7[÷±ö ËÐîÖðo×2(.ûEÀy?À®Yû(ÿæß-]¡o¸pã,4 ÍÈžxÆÑQóÐwõ+„P~->x¬r_öutÁ[†w¦ž½wTÎh!–y/wvñuÙäE<Ð9Ê7‰±§¼°½F •pLœ™›[RR•´ý‚»„áqÌË•vÿç,v¸Ë¿«,Q‡¸J ªðF|µm]b¸ÿ××ð®ÐGXSÂ}‰ôO_6u×L›˜LàÖhòÖŸæükr¡N”ˆ}|0ª¸âjoè™=˜1Üàçn¦íìí HlBî‘ {' XÉ<=òÔÙÇÐ3¡ ¬¾ÏÉ#Ë¿Ãcgˆï§Ø?96oVÿÒr¡t@=Ε Ëšl‹ÖC¿a¶ødÇ>xæ|¡U¤Øbò¨D³wÖš»lX×»eœnc¬lèNËÎ9.9akB|‚(2"88D>Cb—<0(Q‘sl^ #n÷bKA½'k #)ø€äß{äà¢õ¨=þ•'´cq í?Ј§ØÒsbñÁ>ûñU -Ù調‰`ÃÝ:g=FÄMš¶aªm`r²¶¼=.eZ¨Ý~x^øûÆëh‘;7 U±‡ÅÇ 1ÿI‘‹¸Ç‘ZXRÛ‹½ üPŸPÈHÙN³;QETTE#ntv¡÷øG; €=DÑW“U'ìPÂý¡Kjë¨_ ¢RõkŸ»HnÉ«ž ä [ëRLªä>ªÉØío—N ÄþƒøÐCž¼Ý}•ëÒŒdÛtèÍ_«y9ÍX}z­™‹ ZÇ(vã”´ŒmÉ!¢§Ö>1‘¾Ž]e,ò@MS¬lÊ‚nª&ÁÖ M¦á˜ÖζRÑÊ”õPƒheÉÏ­Uî{²@¾£…Üògp‘ï T/¶ŽÁI.xXöÈÊEûgj¢3­)Á?~‰ðL„»â^îxƒÕ`1Õ‰½.4? .q»Pz{„â RBñ„â,ÙŽ9}wèÎg%¨Ýz¤Þ0IèÇ´¬ qw4À,®Ô$é#ËfŠi»$t›°$4Ýqî _`Ð4™ålj‰_qL²sªáF —•k lªîåÁ;U"øÿj÷Ø`aëç?'»B1_¢°[%;íiZ¸³Œ8¸«úÂ"j`Ÿ¾¦úεôëÝ=‰,•Ný˜ÙBèukè"O®ÃceyeÄí]$³lä¿O8iRÕ&I•-kJ«FÎô ÿ¥ËDB+X–M]hvcsá»ÒÔ*Ï«"¨LæØBÅùIžðÚæìDžèÀô:Xúæ—X’Ä;$Ù:Á!î!žG)@ ûI_ˆTzJpäg”bú~@Þ÷x5ä}¥ä}¼Î+Pi3¨¿çU êOWyP¿¡Ä–.e #})Rïåá<·³p‰wµ‡¦a–F“=<ÆûÈÜr|˜G¤4zÐ@cõ‹X4w‘µémSåm5nRôº»5Œ‘G8bVjàFÅÅ8’¾à[¼àPM€^FnÂÍm¼Ÿ,rM6Ê]cø©&;³5ò|¸PÅ]ÄYÔWhÔzÃÕë-ÝŒa¹ƒÜõyÖÙî'ÜðjªiiºÑÓpÃëò'8H¹Ù$tEºq‚ý´‡ùm)|PémE «5J8³ƒï·ãT‚ âhúLU‡“·9d€Ö}±EÖä·©mg LÚº`€§cN„våÜó—Aõ?B×¡Õ )ì¦b¬ “  —hG×aøƒB càÃü:ÑÃÆ~ß®ƒMñ<`Ãî]1ÕA “å šƒ¯5 ­¿Uëö½Æ\5î §(I åæ_¹Ýøñ-J–ŸHh›žÍMBJg'%Ùé•íf™í ˆ„vÎÛd‘{imãüjRˆÒ BHcÿISË«a(ƒa&|r|ƒ¸äJ UËžà&¦ZÒ ¥ãQè–8«ûXO´…ýsþ›- u~ò½?J̰wâËã Wvºïúœ>ÉÉQéÅ6±Æs\tt\D®ºë–¬FŒô¢P8¦d3AމAbìæB'–ˆ]‘‰îåE¯Fëª\ËÉ’¸¸Hæô1¶q6\Ÿìžœã›ŽÒEÙ(÷*wåâ;@g¢…±À*b* Mß½¸ÌPÿx¤…‡ÒÈÄÅuMÀÆ@MiÃ?yiCBÛäŸjø„ÀU­ŒZ…£ùÎ&XÓvØÌicó)¶Hõíb¹´Åî˜ÿÆ4aTµ$ÈÎç †ÁgšVe¶i†¡yá{%ÞfØS‡c¢âc3ŦGû$¢´˜À|¦‘.ÊzGÕäžÊ ÞS|ICW.˜¼Ã ”ÓP;¬¶7t°–·£ÙSÒݲ2~^RÃ[ =ؤ†YB)áÕRJx8Zc ¬­ip`NMiÛBb¯PHÄ»üE †‡kâ¡Xç›ýü—ú“JÓ5ž¿Å1¥ ±8­h¼5Ç}ó–Ç›"-V9:{š2l’?ò”n]#©lq¨ËVýýxdhB˜yìRb”´îø¡Í[âkÉ[*·Œ]µXßkšhÛ[öÊÞQIëwä"¼£Ôät¡Ñ,äÅŒæP Ú mN¯½P8­l'œ^“AÿlœÒ™ì×°ÒëÀ2±K!Ì,„é±=,X½ú׸ß{±±¼/¿˜küØ…’g¿Þô,ÇO­½Ó­µÙx Þíz›xåHNWÃTmV×AÿV=)šãAžù%TS”R˜œ¸å¢l¯T‡‡„õ Âl6Ûo&­{YÆgasî*Úç»Û)Á# 'ûõNö®.þ3³!(!YÚ¾GÇråg{jÔ@ƒYµÑøb*.ð*€ñE ›¡z§ëÝ%?.´MvHOŠÏ …&o- Í*DZµ¨bd$¦<ÒFQ¸ËŠÙcu–WXj[9fëT,»€´ ï•Gð)ükä_XSÔíÉØ 7`I7^OÚëSƒ¯kÕùÑÂ;èIÉ:šM¬§jLÐÉ,· §Ëªºjú ɘ“˜x!E4³—”ŠŽüW«S¦ÕĪ$ â›êüÑdnº*^… ¯|Ôóy‡bßèÿó̇Õi09Ñ!³8œuµ{¦¤r3‘QÓ)[?Í­³“§HÓ­fééÓ——§…‹Ø‹ÛÃÓójz_ÿ>ìz;o;m?Ï_äw8ÃÖlÖð ¯å# 1Å^¼u¢Ï®³EãuÜWŠŒ6l£Øs‡ËÖL›°ÀÖPÉ0 NwÛà&ëÊì9¨Ö`öTSÆÇÍ~5þJyS&Û¿lÕ”q@~âÀ˜€d÷Ý fוkKmªîW×WŠÀPèˤ }ìö*a¿Ü?º&ðoí…é²2ËRgÓ‘PÏ[31P½ëо“:Ú8‘Fã½Íœ-Ú³‚=¶eеþê_"ȦÅïd Ÿ®kªoª-ÅÌeü]iç°y> ')c¤ ÅÖʪ=-þÕnº"ƒ¿ç}£¥>ò~ ?3OÀôMU#0 ¤gvü]á¸6VÃr-½†ñªJÞv\&œ¹ ’Ÿ¹1l^IxþŠ>­ÜöÀr«p„9Ây›¹b¨Îê5u¡ý± .Ãòn ‹‘”§ÁŒXY]"È•¼³0ûcÔ?'u £¨ÂPÜè‡>0ÿ«Upv{¹±Y[À¤|­€;î>„X {±q|…ðàŠ¨Ú–à‰nn£6 ØÑnëŸI*Ê/ÌMü •£2ï³ų÷.DKÑÞîÞ L¤ŸÝoÿÀŸpñáy[â‘eyexì³É˜ˆf!ûiklÍW{“{Zî‘+PaSÀà'Áï\º¢fŠÕŽÔòì¯êüH~ ÷k>þ¿7Âlò”¯Má#x¯.÷ìÖ!¿kîyáKèNBB+Ršîøßñ‡ø½É#qwÑ `Ú©>uúMFË:kuÄ´HVùa¾ôŽ]ÙqÛ³'Íx*1ª¿¥•ôŽˆ*’.¿‡ß ¡« ŠD.ZQÜ2l·v q˱Ä<Ë"Ã:jflUtÒÖÔ$†-HKmï ]¿Ù'jÆ·¸{h—_¡ Ã’hµfVo­Ö¶V°½+8Ò숤°±vô!ÝoÆ-^õ•¼˜(nZq} Dÿ€-׃þ;¹S6 Ó…JÃEÜãÂeW+Ì*–ÂRn÷XjÙ–¥ÓµÁ(–ž¾¥r6ÓìT•S̈iöžOC&F¶ÆvW!3daC²”ÃV‡}>˜Áý4Í×ù“*ÞºÓÄ5]¸ÑȳS¨^œC*DÙqIéqI1â-Ç“è`×Ī(ûM sÿBn+¿Œ»‡¯S â /QxHwïžä‹]ŠTe_²¦“Ú¹e—î2¿âŸ}eT·'ú­Ð´£ðŸÐY\ÆaGÞj%WÈQò“ Íg+üTE˜šu!xÛäƒÉ'·\FË'¥P^v¤ÞÒÿÆ,V½ÿݾO¶“éÓoR2ó„=Y¥jç|H«nêùZn5‰g¹gºŸg݃7¡% ÞF¦M“݉߸‰é¶×ô-qVðÁS-WóZ®nº¦BËÕ’Ú ‘ÊŽyJðó,> ïuãG´ð„†ÞüPn | áHyMrq™+í`Æ·t¦›N Ä&‚}—‚Á-¡0zÊîøÐ=ÅC¡8ÿõÊ-RªIDð,äô„bÊÌ[†?„¥š×àÝ„ŒìØÜ -1þÆ…ÎØê‹\‘»»Ýs?_wG·®‰šV;óQ4ЉË"qKbÝrô~#Sx´ÅjOŸu›´\à31må&ŽN]†î¿à¾[|7û"_-äèã¿.€yíÊ?*Sþøâÿ¸©õ¸ ±PD¡k¹Ýž¬Vz:×Ëi/·O9¶ßæ©hÕæysÙ@~ík’7quü5L”oáiêJä¼!]™w\W¾ GeüiKnT5¬&&³>%IÆN×ßîÛ@o¼V3Š»ó31"‚„„“ûŒ-kŽÃùmÉó6¸ëF}æäL!CÿÄÝY'ãï¡Ç/6V7ZȃúS[‹¬ùÓ0‰S´—ˆ·P´ŠH0À¢gWáËüe™u'¶È‡[Õʳ¨~ÌësóÍŠ¹ÌSõ°ÏB§ç­‡ew©Ò¥? téáý›ÞÞ‰óûÊ9‡dм½˜[¶Å-NH $5‰ŽÛ³E†Ú+ü¢ÜÑr†uÀux2œPô9,e//wwôÈ’ůÔi”?\vªÑ”©îI^W®jäø¹¿x §e2TŸWÂ{äW̓›26kÞ[¯™ˆý~KéÓ›fóZÎÒ„ƒ4dÇHOÒ~NÒ`Q³<hÿԤϑÛ¸@¼ö·aÐChK¶¨ŒœmöùjQXUð#‰$/¯,µ&ˆ©¢þB±;’+[ÊÝÉ æ ÊMwYg6b´ V ÄX ý•Š´‘ÆëÔ[·†åÒÔxºìw>ëyœA] îK¡ÂÅaωނXB\ é·\Jú=#'ý®GNëAË™¿ßÓ²3ò£ÔR…S‡>0¸qy­(¼s¿±Fýf/SxIb,:,O©m'ϰüBiÖQRd•Zf-ˆ7 [·yƒQá3·Z¦™eﲯB{ÐîøâüÝÛ3Π« hO¾ŽéAæá.Úp â<Æ™ÍAsM¦Û Y5#;-‚JñúcÃÜßß7(FŒìE>jýÚÁŒÄšÏZ%LÙôl)Àd½¸ó¡²lwÉo«;Iü«Ñ×ð¡Š>×8µõñ¯\ªÄÂ…SC!C Ó¥ÁʕǼtè²NÚ'ž ¢^¬Þs„¾¸–Ч'}K JÞBb)m"­³2–6‘·® ŠønBÎúŸ e¼Ýr2Šca¶òý/iäþ_¢¬É;Óºá.M³4$¼Xþ¿‡kîÝ•8ÐWe±©q ½ÒÝ~½«oxš¶gsìzÄXÛÙZl·Ø]…Dæ9ÖAuå½››é“IFaЊÚ4éÀáµf;ÑNt 1#›©BkFþ:Þ£lW®_d´&3¨´iáwy¥±¨4H?$[ºe', ŒMΉÏÜQ ºt,¡ A7bè—Û'\có³¶„åi›X9[#séaÃŽ¼”êbáú`pF(©¦çRÕªó  ãð-Ünià± MmXËs8G“pÔu³o°O°·V¨c¨w( EaÑâ"øŒWÓÄ{;xx$êë£&>Æ0a≼‘׿Ý$U…˜Üˆ"¶!¬¡€»žôàâ¬Ü‘[Eìˆ#[÷&\ê-1)ǵ ± WI±†×ª çÿ¸Ên ~`b²¦tmš! k§S×P¾yà²@sã1¨yªtO‹ ÜムUª1tÙ{ø‹¿tZ{®[Ã]y¶ØœÐC¶€ëñ†Ê†îI:3ð®UªE.ø„{Ê"^KÂqë8áàs]ŸJ(ÍÙ„Ä  ”É%°G(údw+t²—C—˜Þ´ ì`ná!típ-¶ÎZS6<ó+Rn]Áqlãí»²÷2ÂÂ2 Ïa½6ÛÂx éÞøè5;äP´@ÉÏ’¯´„ä yH¾Ù¨Û©®þ<ϳ0¸~ÈRƒ\0çŠðT:ðñÞsWQ!ŠöØjj§)£O2*Ò'›%OÇ ¹‡Üî0òp|®^ ‚êÕ_<(ïl诀ë.7ûƒR°“ÖРBQ‚ýÔL4§Jî/ü'´\{qí à:ò–ÛÅÇr|Ü0DL+GÚ.XÚ“N÷µˆ¥'|"èúÆeû4þÝ)›ÛÒê(fKÏB¹N!f·"Bt˜È>§ÿáêAØ"”Ašç…MésH¼¬‰O¦…ÐO¹Ò£ð§‚5±cXÉks0¬à+4^äá×EIøe~Àž†ò­"ï›Réöd: ù‹Á^ ˜ò_ #pYz:|¥ _Ìw§'"‹“¶7öhšèÇ.î³ÊÒYw}ª]âQ—|”)ŠEQŽ1³‡–ÌÌó6ôµÝ`µjþLóLÙ…-ŽZGÑðoذãx@±iEa Mr—U­ù¨Q´¨ÀG9‹2‘‹éQÄ|Ô.¬Èv˜…À…u¸°åXSXÉ ö.Àté{&Õ’¼(“Ù·ŸtØRüO§ZŠO^¨¥¸›ïÛ ¥Œ{’ÎkI Ñrb»Ž¢ð}¨çI”!kM°›`²,kµŠÛ ꪅ{éqÆ*˜F ¥¼<¡eâÕ÷ÁàšÀ=`†Á))$FEü»Ò^[ I™ü³‹8ä½%&'")ë :ÏÀ$øï¤g¹Û/ÕÆïÃJͲáfæ´ÆÂ{uà&<_S ¬fÝ8K|y5õÊ’=©M0Ÿ<§`á9¥´TµLÈ4  Y¿?ÉúÏ­ ˆT¸D›ßtÍçOá·mq»!y%²¼°SÞ<ÒÊó!¶'\³Ò¶^úú¤)^ß> Xñ«²±Ðävö@aÓb‚ ¯Oµ^“ܸ^ÑŠeþ·–½Ê`W«”Åå¥|k-Ÿ<è"•òÉÑV©˜Ïßí‹ùàÄ|þ~b>¸#1Ÿ¾ügÜôu+砹̲‚µ; RSòsmŒ}}}µ} DŒ·ohx^f¡¤Hô”Qðc{ MVE/Ӊ¨ÞÚäØ^Ìl%Ç&Õ=!ÓlGjíÄóK­É4DO¨¢!Š6þÚ)¼ø»ì™¢ºSÒ§z Ý°’Ø Q–V²C¼­ƒ£­³øó¸¡ÚûË^µvƒiõ&~^?»øßA›o¼jû§,YÈvUÉÖÉ®õþvVÙy<½ËΣãev*¯¬rjɱ±*®†áçáÑ5õrA X\óü#ÇL’xsXж¡…Ëú¦åí²VŒWj'ðJcSÒ£“w”‰j$çÆ–1 ä3à:¼ó;;OJŒM–{}‹†zC”Â!Áá¤PšêÄÔ΂º:†#Ïî£Æ¥p¼ÓF(X±@#óGö¸X£#=‡ŸÆ¯àüƒ;Ú!Ú‹f(U*ÊË+å‰)öްŠðlï¥ü%ÎÚÖÖÊ*Ù63+%9+Ó6ÅRxΗÌP¤.ú,—ãÕ’êÒQl ×[N^¥A@êcA”ôzÀ¿guʘÿ1$]‚×@]xÉ›6ù#)—úÀ;žz uW*[¨«”¸9žU`$®¹j'jÕOÃnºÎ ܇™­ ¢8µ*OÛ-Ò~ƒ“™Œ\2ŽˆàÝ¿$C×¹ý¡·´àåëåãi¸H_×ÙßÃÇ×ù¡MAÁL5%”8b¸ÿ‡Ú™Zõ0¾7…˜4©óÓh™ÏÆGLO v£} ØÑ¹¥{2B#ü<#µc]#}£“*ŽË̳O45°´²\ô+í·y±±Û<-èñ@©¤¨´[¨'tÕS¾Çþ®Ðû^Ì÷‚×…ºÄºZ8[7Å÷§b‰­K\zflrjˆh{Xd(ñOöÏŽ)*r[º'y ›^?ä7Á:øwsámÀ÷ÕªÃt~1·ªƒ%íÛ϶¹FtUqv%*W 7™¹^‘„$Åí/­Ž-Q²0H©w>™ãòŸ~Iž{€Êó<è êëzÀÈ2È/«;ƒÎõbG×5°sÞI±±u,Ïsx¼Õv*ñ4 ÙÆþNþÎÞÞîȹ…8nuŽpÙâ†+[+óT˽i)¡QI¢¤(qBDFDFH¹À§8)ÆÓ2^;v}”gbRâS W¥Ï½ØzÅzÑúUÞÆc˜%fUø…&y¸O2O´˜ì‰ÎÄ”cn$/Ëpn¦`ÕR‹'ÝÿE-šÆÃþžÛ™ ×e‰öÕÅÆ‹wn Bfì7$/ÃÜñ'0®9€À4ò”uó žgkè6ÏQË™ omEZ)Nú¢Æî*€y’ç{´!Æv“/¡6ó!/XHÅ—|à=i–Åy^cHâæYÜd/7GÎß;ŒœW”FÎOh'[_gd¯xH,6%5>;=Y”š&töû<ÞfÔ£v¾6Dêa¤ê"Ø”<&o«›®¨Ñ¾Žè,úâ¹Áþ›7mÞ¼I+Ü3Øù1^^¾îÚ.`)pFÍ *ñW°X3+ãÌñû²ÂµÄ[b6· c}Wj[`¤?rEÞ^®®îä-vÓäGmèné=ßYËÂ[ô:YÍõ%þzâ!ôÀ·=Y°ðv›•ÞKÁþY, [ð†—b4K¾W„Ô_ùf^MaZ¹GRjïLèBR*ºk É»‡{ž ¨Òˆ¥Ð&Ä{ëäÖu2ñüQ‰  E¤*Šð\-ÂChÃ\ëÈ5ˆÁô`¬?ÁžoÕ'îÎýHƒZWäããîéá¸qƒ§%bF-úºƒFÅOª+ô‹`ÀƒÎµÄžá6÷R¹Í~ŸÂ°wb~Ú%¦GÙåôI&¥KPrPžU’1šƒl=í>÷4]2CÆo–®›Ï"Ø_ýyL /~$6ªY3÷V»`3~‹J«Ô«ÁÀW"T6Z‘N™Î#;‘/31u¸Ã§rø-¥F³e“ z!ÿ{x·=3tÇï™Òð^ã8N™¹µ^ü#ïØÅÉ:vƒÚéØÅuªc7ëÙŽ]œJ»w@Géë«ò©'‰D0¸çm‹ÝøYÙ‚šH5Å’›RN0Mï#À²ƒ™ör˜Êéï•,¢vn.=$Ó™:´Y¥hÎ>¼–b+[x8*ÌÒKÏNPGVò7¹fÎÇ:+W;íuk ëFX9zé"­È5Èv3s j9($0“–ñP£Ý¡ÅâÛC5·½¼;?£í×jÃGQ°Y†ÁEÄÞk\̵ý¾ÖðAGg;¯ HKÐG„Í\£Ióð¡¢»(okV¼ôâÃo”íÊ8….kµh0j_loQ6jýŽ¦È§‰. þÇÞQ0l}ñ©aëOfëÆŠÄŒ HðZ:Wë%Ð]~~1žÓ惧9Ëu*ð¿öT¾¾$G“ܽ5—½è;-óaVßsïøÔ°i¦¾‚üø»Ò»—ß;û¨åîe÷N±¿¶prê07]Pœ–°Á;è$þ,÷ Äú õlV*SÐøö<èÀ70`4L߉¦# ›%‹2 LN÷tšåYšð _²ª¯V 9V(»vD3r”O2†ƒ•ªóI²iX p‹æ©N)ñ¦cÉE”Ü‘Œf±§hÉý–`á+Ih­VÜ,U,âí»>C¿ÅÌÔ9Öø¾©àž’Y–3®ß>)™F·á=<(c>\iŸùpïÿóáJ3óÁ ,T^‚Ò¬É ¦IG–Ö6™ŒyvÌD±Ôœ?‹”H9€º"-ºÍ’ðÏÏ«ƒ§—½¥86;ý)Þ\§ô ~ÿìG>†C;½ÝèŽÜ2teÿ‡‚¤’\aêÅäîn=-w×®ÜÞ±gÇÎÉÇÚ°JÖºP_j3ë[­šðj¸¥î^Œ\ ï7x)äÚ²ã«oÚ†™ø!³¤^í¬ Ð«¼›=q4‡°ÆÊ©‚Ö"£TûÇ<·í>e „H8™D M…³’)}c´±ü¡ê¾ïj×2~ªÀ‹Sã?x áÙÜÓ»@ȯùÛuøð„ P‹ ”k4~LÙaS4*|Tv|VraZÂNòe(rã‡` Šœ4T+è³Ñ¦óLyòB`—ÛF[R˜Y“éK^뤾d}gô%¯)Õ—¬q}IphP‰Ã$Ÿ&j8ÉPÿëy¥™4±iºËYG)Š2ÍÇ´“­E ÿ¾¢¯ÙÌñ/8þ[4¢Úª™¦(yÔS¦»5 “¿J=ébñµBü˜*ŒRÕ>_U{K¥ªö M’±Çå[BÎɶ„ÈôÐ a¥L„Œ#µõ¿¯ª"7gŸÂ5!y¶´¯BíÙ–r€|ý˜–z RZäËëw5#•‡£¬òX)­<Ì…Ê#¬¹òj§çõU}Öb Drìg}~ú Ô´[íôÙEªæÁRï×½ÛoãW«*ÿÖZYö„Ði°sr+p!VðSŒ/1”Žˆ EF` 5Eú±òž cI¼Ûà¸g>ÃÞùÃÎv+ñnde´.È.É=å ¨ät”ˆ|ñG?¹Ž·uÒÆÃ\<]êâŸtdÅ4±â,ªÙ‹…Ú½ˆÿ(G ‚/¨Ã‚ ŽßbÝÓ®^šIzÛ¿yHbãûÅG/Uе8¹Iz0åVJì>ÄüBMÇó5vf-Ñ™°ÌN*8HB¦onõZ¨½)ŒÍFÂeŒÐÍ1A¸6Öq·ÐWÒÚÁ€ðßAÁ#ð¿Ïà)ÙéùÕâäÙ©œ§wvBrU`8%4¼•è(wã$ð.IØ`(LFÉ0{å)Ô„ð[&@OâW`èÝáÛSr3˜v¥°Ø ÅÍÄÊÀ^ß›/tð`zB˜ÎQá@ƒwhãOÂnq='N¶”Bñ×8¼­8çÉVâœhaZÅøk8.Æ5/ CñˆV°…³˜.v»ÙÖÇ•ô\=°²wT‚iÇ4 gÅ>¤ÏõVIH´m&àxeÀ‚œjU½ÚN)ˆéŒªªþÔ±::Ûj µÜó—-TU߿עª:>WÆ`«ÞgßoR†?>ïr}ìƒ^,GÜ8öÏÇÎßëN¬¾ö]:Ã>>•›sôXoTå¸Ã$g]Öª8}d†Œ¼\¼ü=‘òˆôO!‘OqbĤçäî Îᆋtüð;øѲåû'h¥|;dÁ÷ºóFÍÈ>3Qäè¸Üo+ÿã¯eøMË»àUå2Yùƒ’×*+‚XNki! p¥»¬ æ)ƒTȶü;kï`„Y„¿¶´prUwÞõ¾rÁD8L]ýR›½¨R‚oÛwªÞ/'÷(æ‡%º =¡}¡qsFó í£¥-ÂÒî f¢ä-nœ&löJ[`æáâädïÅÕ™F[„[¥t&•8¾•+; hžr™\«ÎwSó½ 0¨pxkWÀ?Nn R‡¼¸’ÐÜÔ¬n‘š²Y¦™c =K(ô}šA¹÷ꚡĨ· ‡KűĤíœL76™t¦{ª`Òž2é¦%FĦ_ã£FÐ’›´¬3D®ÿ:{C8ÖËo ¹-VrðÕ4ƨÖþÀS‹AôTÞŠ€“\£f‡³É|öËIm²eóÂóV·àÁ©¸öeJ;º0оהn½WFè”/ób5XBl ò,g ËÖc‘ »Iì‰g€§¿ç@¥ùDøÆlŠAZ(>2¬ ˜¼à¥.tq@˜ç®~ðfM<]щF·'æ2h0¼©‹Ü4ñž"t‘·4u‘y¶‹|âe!†VŸéÖàŒ®ðû Õ²€â¿J= ¾âBñWFy€åñërœÊ´œvzU jt>áжÝÛÊ+R ½¨ÜvûÊí+ãf¡s†ãGZ»ášä»Bá+ *ÐØÅxbpo*¤>(¼ð‚>Zèšõ‰yÕóª¿ÏŒ¡qVóÌ[h!´¨&'Í-Õ+ÕÛmY餯‰{Q‹]Ú¦ÝL‹|ä ‰×4öN>Ô”zë‰Yn& &øµeßP8¨j¥ï) »áòŸj•üî2PgJÿ"Üýòo³F. Â4n¡¢¿ˆÓß®[¡sÁü:ºŠ.e®¼t¨ì/é0þü|ˆçã!øýaøÛ´ù\¼‘sÄÿZ¸hêÖî°ƒž²·’³Úæ.¸³’S•EÀk¼¤ŒÖ"°vHÖ4¹3¸´|”Jøê¦ÉÙZ:èÆÈÜ•h%ZµÑÚ‚©og KÁwþEÇ‘zh[`A`‰U ~S—ØJÔ`‰NÒ^yU`œ7²Až~î^.øSl¯‰ÂXß8©eÆDänÞ‚¶¢È Yc±< Æõ>þzáEš¸‹tÁoÓh¸§çbèo6»F¡ =ô¤a غ™ž\¹E+â@)l QרiY¨ ÈsžŸÇåþ ‘£Mé‚ÿGÇK ­?s˜fÏLJ…Dkwãû‘Û9Ò|3½ØCð?ÁUPltGkI³ îOš=Բрä >ߨjÑG?Ò¸ÖícyÿŸT¥¨ƒªtéó.a³jQ¬¦rÏ—­ ™ó@«ªÔ÷¸õȋĀ^ìã×X~€8öžŠ•N¤\‹È}.®Ö ¿\³ mšT·”E¬íõj0£¾ž‡¡ çÄ»åÏþžŸ5ö{UAîÙàß{>J TUÛîÄÐØ&tâÇH%Î2¶ ýtáÉü —wÉZC?æÆbjŠþÇh0šRª{Ý¢ÆcϦ_~ åvÏ©tuùrÉ÷9ߢÑhœõì¥ãæ¬úán ^ïàa> ÷o·§´sa#ÿªÙ{=@Û ’±,˜/Ãr ßE†|ø!ÐÀÉ`ó|°GC4pJö‚©$˜¢»= DÂA:|Ó¬©$=I¯'è&Ðì5ùƒûûûR*ù¦v5–^깺”Õ™ ý~RƒG·Õ³!sÅÿÂ]ž‘êªðEëDS-ÖVAªKgɤO~kle2aÓ󛬃Iªb%™Dã®zA'ã(¹å£¯W¥±?**Fófq³’zµÊ?îßW'Yè.·ÞŽ|a¢]ff2ùB;Yˆ´±!K¶KÏL%³!ÃùøøË–Ck{PÅÓ=ë;؆øçS›pwé„yZÁAÍôªWi7/AÓosöï_,u ×߯%¬%kµ•,{9ÐÏ»&MƒM’mJcžcSÁ+I0pß ]šQ ,”ѱ`ÇA?!ˆÊÇî;bõPG žâMó]é»Â"KQŠþ4hLþÆjÙFeôßÇÈê oûÙ;ûyº"Ai ˲Yk`»TZÁ&?«5Ð_ÖÃÆÉåK!»Š; œH$Ê^"ciÅm‚Á-’Íj[ì Fùdë Ä-Ç%ù{fÏwá`>Ý©#Œ|Ü[BL‚S¬UŠQÇ|åç(N3×è,·!ID‹è7²ÔÿüÜòå²aALì¶# ¢·¤ù"Ã`j'ðcþR}8\ø0àòËís˜~ÿÄaºÜÌa›`ÇSø\+Ên¦©c¦©×…#eIÿº†ÃŸ€™*úæ–Û ^’¾¹ËCZ*yczB|L‹ÕBœi©È¶£!»³%d]lt¦Ø…ì‹‚òýS€0Y"×ó¤R¼¢:¶ CaAá Ö£á-†yð6Í>z¦Sôk{FÇÞÌ®¢w[‚‰·êÃkÃI¼­í$Eë~g(ZµJ)Z÷_œ¢Ëÿ¢:Æ KþS%ŽòZ*‘Í^-’~¢+4>×Äå?{(à=¾Œãϵ¡°zmlžœÛ)i §ZŒõøG”BZZ;ËèW·ùû¥,n•‚P;I¡¼ÉyGB?º"ùŽ„¡÷чNe&èœo|ŸzAÖíUØ<­6Óÿ¾ùЛ€:or‹ ¯eA] /âØÇ AÎŸÊØ±j/ÛíIqk%ÀÂÛy”ÈÉzÀ²‡ê*}¨ûUéEOkîE_TP^àùf–Nkœ/ÀR´Ò=hI išk":ŠÄù™HM÷K¡©[»Ð4\€¦¹xõÓv’"ØÉjÁN"ävÒÜÝîÆ‡¸J ªðF KtÈÝ]ߣ޼pÝ¿¾†wI)9¬J¸/‘Îî M½5ÅCr?…Ñ$Ë->Ì-ø×äB([ïq0ª¸âjoè™=˜1\ççn¦íìíàE2õ&äɰÿé¬áD|\O#…"ß=J+ëûœ<²ð;¬1Öq†h‘ñ~òñ ¿›7«´\(ú¾!Y1Iú×. ±®Ì?z/"go,Õþ“¨ãk!JZ Èv’jÒkÃcód´R)¬y™9?§¥A&”¥Ý•+šã:Eʾ¯±YAÃÛr¨ açÕáWÎdDçhûIUBnïÜwA«`µSûÇöÍ®3úÍŸ‘#Ï£’Ty/ò± xÞ“'ë3î[6¡eÌ,#Øz.Âïc•šGKfDSͨӶåèc*1åiÒ£U´ÏËžGû¼U[Ë …+¯EÞ÷ÏÀ'iLæ9Aï¼éñz±Ûº€™D±§<‡æ=ÞUHtCö§.™¥ù5½ÏΨT¸±:ºKë•Õ?u¹•’¿¯Ï®ÂÕ‹–ë4í¬>åQ½Kà:.Ð/>­+rõÒ`·wIYU8òÙ”ˆ{¦Kp81¹>*rÒšára½ü å÷½~ØŒóKTÄpð?Ï"X%, wK®¬ï±•ÜñéÆð+0%CXžÛîÊð«]šv†U¼3ü^›7pµËÍèì‚}v•¶Ú~ÅC¶6|£¡h$Yqœ;¡ Îɱg½{.®¿weAÞv?ïüüóŰ #¬ÏÚ»ð;]öWÚ˜È/N„E‰TöÛuïd‡¿ûn]ü»ïuéòžs_ endstream endobj 11 0 obj 33920 endobj 12 0 obj <> endobj 13 0 obj <> endobj 10 0 obj <> endobj 14 0 obj <> endobj 2 0 obj <>endobj xref 0 15 0000000000 65535 f 0000000984 00000 n 0000036506 00000 n 0000000925 00000 n 0000001032 00000 n 0000000774 00000 n 0000000015 00000 n 0000000755 00000 n 0000001315 00000 n 0000001101 00000 n 0000035404 00000 n 0000035320 00000 n 0000035342 00000 n 0000035372 00000 n 0000036448 00000 n trailer << /Size 15 /Root 1 0 R /Info 2 0 R >> startxref 36556 %%EOF Rcsdp/src/Csdp/INSTALL0000644000175100001440000001771014342635402014065 0ustar hornikusersREQUIREMENTS: The build process for CSDP uses make, so your system must have make installed. The GNU make works quite well, but CSDP has also been built with other versions of make. The make files are very simple. In order to build CSDP, you will need an ANSI C compiler. The GNU C compiler gcc works quite well, but the code has also been compiled with Intel's icc, IBM's xlc, Sun's cc, and many other compilers. Although CSDP itself is written in C, the BLAS/LAPACK libraries used by CSDP were originally written in Fortran. Combining C and Fortran is generally straight forward, but you may have to install a Fortran compiler in order to get run time libraries needed by the Fortran code in BLAS/LAPACK. In particular, on Linux systems using gcc you will need the g2c C/Fortran compatibility library that comes as part of the g77 package. Use of the CSDP library and the solver and theta functions requires the BLAS library and a few routines from the LAPACK library. Using BLAS and LAPACK routines that have been optimized for your computer is critical to getting good performance from CSDP, since the code typically spends nearly all of its time in these routines. On the same hardware, it's not uncommon to find that optimized BLAS and LAPACK routines are an order of magnitude faster than unoptimized BLAS and LAPACK routines. The original authors of BLAS and LAPACK have provided "reference implementations" that are freely available but not very well optimized. If your system has BLAS and LAPACK libraries in /usr/lib, there's a good chance that these are the reference implementations. Using them is a reasonable way to start, but you may well find that you need faster routines to get acceptable performance. ATLAS (automatically tuned linear algebra software) is an open source implementation of BLAS and part of LAPACK that is sufficient for our purposes. ATLAS obtains good performance on a variety of systems by automatically adjusting blocksizes and other parameters to get the best performance out of any particular system. ATLAS is availible at http://math-atlas.sourceforge.net/ If possible, use their precompiled, optimized libraries that are availible for several architectures, otherwise build it yourself from source. Most hardware manufacturers have developed optimized BLAS/LAPACK libraries for their systems, such as Apple's veclib for G5 systems, Intel's Math Kernel Library (MKL), AMD's Core Mathematical Library (ACML), IBM's extended scientific subroutine library (ESSL), and Sun's sunperf library. These typically have restrictive licenses and may be expensive to purchase, but can provide very good performance. In practice, on Intel or AMD Linux systems, we find that ATLAS provides very good performance (close to if not better than MKL or ACML.) Thus we recommend ATLAS. However, to make the build process simpler and more flexible, the make files are setup to use whatever LAPACK and BLAS libraries are already installed on your system. If you decide to use ATLAS, the make files contain ATLAS specific instructions. CSDP also includes a set of routines for interfacing CSDP to MATLAB and Octave. This interface is entirely optional- CSDP works fine without it. In order to use this interface, you will need MATLAB (6.5 or later) or Octave (2.9.5 or later.) Note that earlier versions of Octave, particularly 2.0 and 2.1, will not function with this interface because Octave didn't support sparse matrices until version 2.9. The README file in the matlab directory contains instructions for installing the matlab interface and testing it on a sample problem. DOWNLOADING CSDP: The current version of CSDP can be obtained using subversion from the COIN-OR web site. To do this, first install the subversion tools, then issue the command svn co https://projects.coin-or.org/svn/Csdp Csdp Or use a GUI to access the repository. Source and binaries for older stable versions of CSDP can be downloaded from http://www.nmt.edu/~borchers/csdp.html INSTALLING CSDP: The following instructions assume that you're using a Linux system with gcc, g77, LAPACK, and BLAS installed. The make files will have to be altered for other systems, but the basic process of building the software will be similar. After you've downloaded the source code, unpack the tar archive if you downloaded a .tar archive of CSDP 5.0, and then go into the csdp directory (this directory is called "Csdp" in subversion) Issue the command > make to build CSDP. Make will go into the lib, solver, theta, and example subdirectories and compile the C code, using values of CFLAGS and LIBS supplied in the Makefiles in these directories. If the build fails, it is important to start by identifying where the build failed. Failures in building the CSDP library are extremely rare. Most reported failures have occured in the solver and theta directories. The most common problem in practice is that one or more of the required libraries (blas, lapack, or g2c) is missing. In that case you must install the required library before continuing with the installation of CSDP. If the build fails for some other reason, feel free to contact the author for help- we're interested in learning about problems on different systems. If for some reason the build fails, it's a good idea to remove all of the binaries before modifying the make files and rebuilding. To do this, issue the command > make clean If the build appears to be successful, you can test the code with > make unitTest This will run tests of the stand alone solver csdp and Lovasz theta program theta. Compare the .out files produced by the test with the corresponding .correct files. The actual values will typically vary because of small differences in floating point round-off, compiler optimizations, and so on. However, the optimal objective values should match to at least six digits, the relative primal and dual infeasibilities should be smaller than 1.0e-7, and all DIMACS errors should be smaller than 5.0e-7. If either of the tests fail, please contact the author. Once you're satisfied with tests, you can become root and issue the command > make install This will copy csdp, rand_graph, complement, theta, and graphtoprob into the /usr/local/bin directory. If you use the C shell, remember to "rehash" so that the shell will know that these programs have been added to the /usr/local/bin directory. The matlab directory contains .m files that provide a matlab interface to CSDP solver. To install these .m files they must be added to your matlab path. This requires use of the path(...) command in matlab. See '>help path' for instructions on adding a new directory to your matlab path (you can put the .m files in any directory you wish, then add that directory to your matlab path). USING GCC 4: In gcc 3.x, the C/Fortran compatibility library was linked with -lg2c. In gcc 4.x, you will need to link with -lgfortran instead. Note that OpenMP support first appears in Red Hat's version of gcc 4.1.1 and also appears in the general release of gcc 4.2. There is no OpenMP support in earlier versions of gcc! RUNNING CSDP IN PARALLEL: Version 6 of CSDP includes support for a parallel version of CSDP on multi-processor shared memory systems. This is done using the OpenMP standard for #pragma's that tell the C compiler how to parallelize various loops in the code. On systems that don't support OpenMP, these pragma's are simply ignored. On systems that do support OpenMP, it will typically be necessary to modify the CFLAGS and LIBS in the Makefiles to build a parallel version of CSDP. As an example, the following CFLAGS and LIBS have been used to build a parallel version of CSDP on a Red Hat Enterprise Linux system using Red Hat's version of gcc4.1 with ATLAS. CFLAGS=CFLAGS=-O3 -march=nocona -m64 -fprefetch-loop-arrays -ftree-vectorize -ftree-vectorizer-verbose=1 -fopenmp -ansi -Wall -DNOSHORTS -DBIT64 -DUSEOPENMP -I../include LIBS=LIBS=-static -L../lib -lsdp -llapack -lptf77blas -lptcblas -latlas -lgomp -lrt -lpthread -lgfortran -lm Rcsdp/src/Csdp/include/0000755000175100001440000000000014346122403014445 5ustar hornikusersRcsdp/src/Csdp/include/index.h0000644000175100001440000000151214342635402015730 0ustar hornikusers/* Declarations needed to handle indexing into Fortran arrays and packed arrays. */ #ifndef BIT64 /* First, to convert fortran i,j indices into a C vector index. */ #define ijtok(iiii,jjjj,lda) ((jjjj-1)*lda+iiii-1) /* Packed indexing. */ #define ijtokp(iii,jjj,lda) ((iii+jjj*(jjj-1)/2)-1) /* Next, to convert C vector index into Fortran i,j indices. */ #define ktoi(k,lda) ((k % lda)+1) #define ktoj(k,lda) ((k/lda)+1) #else /* First, to convert fortran i,j indices into a C vector index. */ #define ijtok(iiii,jjjj,lda) ((jjjj-1L)*lda+iiii-1L) /* Packed indexing. */ #define ijtokp(iii,jjj,lda) (((long int)iii+(long int)jjj*(jjj-1L)/2-1L)) /* Next, to convert C vector index into Fortran i,j indices. */ #define ktoi(k,lda) (((long int)k % lda)+1L) #define ktoj(k,lda) (((long int)k/lda)+1L) #endif Rcsdp/src/Csdp/include/declarations.h0000644000175100001440000002310514346122403017267 0ustar hornikusers/* * CSDPDECLARATIONS is used to prevent redefinitions if this file is included * twice. */ #ifndef CSDPDECLARATIONS #define CSDPDECLARATIONS /* Other important includes that we need. */ #include "index.h" #include "blockmat.h" #include "parameters.h" /* Our own routines. */ void triu(struct blockmatrix A); void store_packed(struct blockmatrix A, struct blockmatrix B); void store_unpacked(struct blockmatrix A, struct blockmatrix B); void alloc_mat_packed(struct blockmatrix A, struct blockmatrix *pB); void free_mat_packed(struct blockmatrix A); int structnnz(int n, int k, struct blockmatrix C, struct constraintmatrix *constraints); int actnnz(int n, int lda, double *A); int bandwidth(int n, int lda, double *A); void qreig(int n, double *maindiag, double *offdiag); void sort_entries(int k, struct blockmatrix C, struct constraintmatrix *constraints); double norm2(int n, double *x); double norm1(int n, double *x); double norminf(int n, double *x); double Fnorm(struct blockmatrix A); double Knorm(struct blockmatrix A); double mat1norm(struct blockmatrix A); double matinfnorm(struct blockmatrix A); double calc_pobj(struct blockmatrix C, struct blockmatrix X, double constant_offset); double calc_dobj(int k, double *a, double *y, double constant_offset); double trace_prod(struct blockmatrix A, struct blockmatrix B); double linesearch(int n, struct blockmatrix dX, struct blockmatrix work1, struct blockmatrix work2, struct blockmatrix work3, struct blockmatrix cholinv, double *q, double *z, double *workvec, double stepfrac,double start, int printlevel); double pinfeas(int k, struct constraintmatrix *constraints, struct blockmatrix X, double *a, double *workvec); double dinfeas(int k, struct blockmatrix C, struct constraintmatrix *constraints, double *y, struct blockmatrix Z, struct blockmatrix work1); double dimacserr3(int k, struct blockmatrix C, struct constraintmatrix *constraints, double *y, struct blockmatrix Z, struct blockmatrix work1); void op_a(int k, struct constraintmatrix *constraints, struct blockmatrix X, double *result); void op_at(int k, double *y, struct constraintmatrix *constraints, struct blockmatrix result); void makefill(int k, struct blockmatrix C, struct constraintmatrix *constraints, struct constraintmatrix *pfill, struct blockmatrix work1, int printlevel); void op_o(int k, struct constraintmatrix *constraints, struct sparseblock **byblocks, struct blockmatrix Zi, struct blockmatrix X, double *O, struct blockmatrix work1, struct blockmatrix work2); void addscaledmat(struct blockmatrix A, double scale, struct blockmatrix B, struct blockmatrix C); void zero_mat(struct blockmatrix A); void add_mat(struct blockmatrix A,struct blockmatrix B); void sym_mat(struct blockmatrix A); void make_i(struct blockmatrix A); void copy_mat(struct blockmatrix A, struct blockmatrix B); void mat_mult(double scale1, double scale2, struct blockmatrix A, struct blockmatrix B, struct blockmatrix C); void mat_multspa(double scale1, double scale2, struct blockmatrix A, struct blockmatrix B, struct blockmatrix C, struct constraintmatrix fill); void mat_multspb(double scale1, double scale2, struct blockmatrix A, struct blockmatrix B, struct blockmatrix C, struct constraintmatrix fill); void mat_multspc(double scale1, double scale2, struct blockmatrix A, struct blockmatrix B, struct blockmatrix C, struct constraintmatrix fill); void mat_mult_raw(int n, double scale1, double scale2, double *ap, double *bp, double *cp); void mat_mult_rawatlas(int n, double scale1, double scale2, double *ap, double *bp, double *cp); void matvec(struct blockmatrix A, double *x, double *y); void alloc_mat(struct blockmatrix A, struct blockmatrix *pB); void free_mat(struct blockmatrix A); void initparams(struct paramstruc *params, int *pprintlevel); void initsoln(int n, int k, struct blockmatrix C, double *a, struct constraintmatrix *constraints, struct blockmatrix *pX0, double **py0, struct blockmatrix *pZ0); void trans(struct blockmatrix A); void chol_inv(struct blockmatrix A, struct blockmatrix B); int chol(struct blockmatrix A); int solvesys(int m, int ldam, double *A, double *rhs); int user_exit(int n, int k, struct blockmatrix C, double *a, double dobj, double pobj, double constant_offset, struct constraintmatrix *constraints, struct blockmatrix X, double *y, struct blockmatrix Z, struct paramstruc params); int read_sol(char *fname, int n, int k, struct blockmatrix C, struct blockmatrix *pX, double **py, struct blockmatrix *pZ); int read_prob(char *fname, int *pn, int *pk, struct blockmatrix *pC, double **pa, struct constraintmatrix **pconstraints, int printlevel); int write_prob(char *fname, int n, int k, struct blockmatrix C, double *a, struct constraintmatrix *constraints); int write_sol(char *fname, int n, int k, struct blockmatrix X, double *y, struct blockmatrix Z); void free_prob(int n, int k, struct blockmatrix C, double *a, struct constraintmatrix *constraints, struct blockmatrix X, double *y, struct blockmatrix Z); int sdp(int n, int k, struct blockmatrix C, double *a, double constant_offset, struct constraintmatrix *constraints, struct sparseblock **byblocks, struct constraintmatrix fill, struct blockmatrix X, double *y, struct blockmatrix Z, struct blockmatrix cholxinv, struct blockmatrix cholzinv, double *pobj, double *dobj, struct blockmatrix work1, struct blockmatrix work2, struct blockmatrix work3, double *workvec1, double *workvec2, double *workvec3, double *workvec4, double *workvec5, double *workvec6, double *workvec7, double *workvec8, double *diagO, struct blockmatrix bestx, double *besty, struct blockmatrix bestz, struct blockmatrix Zi, double *O, double *rhs, struct blockmatrix dZ, struct blockmatrix dX, double *dy, double *dy1, double *Fp, int printlevel, struct paramstruc parameters); int easy_sdp(int n, int k, struct blockmatrix C, double *a, struct constraintmatrix *constraints, double constant_offset, struct blockmatrix *pX, double **py, struct blockmatrix *pZ, double *ppobj, double *pdobj); void tweakgap(int n, int k, double *a, struct constraintmatrix *constraints, double gap, struct blockmatrix Z, struct blockmatrix dZ, double *y, double *dy, struct blockmatrix work1, struct blockmatrix work2, struct blockmatrix work3, struct blockmatrix work4, double *workvec1, double *workvec2, double *workvec3, double *workvec4, int printlevel); int bisect_(int *n, double *eps1, double *d, double *e, double *e2, double *lb, double *ub, int *mm, int *m, double *w, int *ind, int *ierr, double *rv4, double *rv5); /* BLAS and LINPACK stuff. */ /* First, BLAS routines. */ #ifdef CAPSBLAS #ifdef NOUNDERBLAS double DNRM2(int *, double *, int *); double DASUM(int *, double *, int *); double DDOT(int *, double *, int *, double *, int *); int IDAMAX(int *, double*, int *); void DGEMM(const char *, const char *, int *, int *, int *, double *, double *, int *, double *, int *, double *, double *, int *); void DGEMV(const char *, int *, int *, double *, double *, int *, double *, int *, double *, double*, int *); #else double DNRM2_(int *, double *, int *); double DASUM_(int *, double *, int *); double DDOT_(int *, double *, int *, double *, int *); int IDAMAX_(int *, double*, int *); void DGEMM_(const char *, const char *, int *, int *, int *, double *, double *, int *, double *, int *, double *, double *, int *); void DGEMV_(const char *, int *, int *, double *, double *, int *, *, int *, double *, double*, int *); #endif #else #ifdef NOUNDERBLAS double dnrm2(int *, double *, int *); double dasum(int *, double *, int *); double ddot(int *, double *, int *, double *, int *); int idamax(int *, double*, int *); void dgemm(const char *, const char *, int *, int *, int *, double *, double *, int *, double *, int *, double *, double *, int *); void dgemv(const char *, int *, int *, double *, double *, int *, double *, int *, double *, double*, int *); #else double dnrm2_(int *, double *, int *); double dasum_(int *, double *, int *); double ddot_(int *, double *, int *, double *, int *); int idamax_(int *, double*, int *); void dgemm_(const char *, const char *, int *, int *, int *, double *, double *, int *, double *, int *, double *, double *, int *); void dgemv_(const char *, int *, int *, double *, double *, int *, double *, int *, double *, double*, int *); #endif #endif /* LAPACK next. */ #ifdef CAPSLAPACK #ifdef NOUNDERLAPACK void DPOTRF(const char *, const int *, double *, const int *, int *); void DPOTRS(const char *, int *, int *, double *, int *, double *, int *, int *); void DTRTRI(const char *, const char *, int *, double *, int *, int *); #else void DPOTRF_(const char *, const int *, double *, const int *, int *); void DPOTRS_(const char *, int *, int *, double *, int *, double *, int *, int *); void DTRTRI_(const char *, const char *, int *, double *, int *, int *); #endif #else #ifdef NOUNDERLAPACK void dpotrf(const char *, const int *, double *, const int *, int *); void dpotrs(const char *, int *, int *, double *, int *, double *, int *, int *); void dtrtri(const char *, const char *, int *, double *, int *, int *); #else void dpotrf_(const char *, const int *, double *, const int *, int *); void dpotrs_(const char *, int *, int *, double *, int *, double *, int *, int *); void dtrtri_(const char *, const char *, int *, double *, int *, int *); #endif #endif #endif Rcsdp/src/Csdp/include/blockmat.h0000644000175100001440000000315414342635402016421 0ustar hornikusers/* This file contains definitions for the block matrix data structures used in CSDP 3.0. Note that there are an additional set of definitions used for sparse constraint matrices. */ /* Each block is a diagonal block or a matrix */ enum blockcat {DIAG, MATRIX, PACKEDMATRIX}; /* A block data record contains a pointer to the actual data for the block. Note that matrices are stored in Fortran form, while vectors are stored using indices 1, 2, ..., n. */ union blockdatarec { double *vec; double *mat; }; /* A block record describes an individual block within a matrix. */ struct blockrec { union blockdatarec data; enum blockcat blockcategory; #ifndef NOSHORTS unsigned short blocksize; #else int blocksize; #endif }; /* A block matrix contains an entire matrix in block diagonal form. */ struct blockmatrix { int nblocks; struct blockrec *blocks; }; /* Definition for constraint matrices. */ /* * There's one of these for each nonzero block in each constraint matrix. */ struct sparseblock { struct sparseblock *next; struct sparseblock *nextbyblock; double *entries; #ifndef NOSHORTS unsigned short *iindices; unsigned short *jindices; int numentries; unsigned short blocknum; unsigned short blocksize; unsigned short constraintnum; unsigned short issparse; #else int *iindices; int *jindices; int numentries; int blocknum; int blocksize; int constraintnum; int issparse; #endif }; /* * A constraint matrix is just an array of pointers to linked lists of * the constraint blocks. */ struct constraintmatrix { struct sparseblock *blocks; }; Rcsdp/src/Csdp/include/parameters.h0000644000175100001440000000123414342635402016765 0ustar hornikusers/* This include file contains declarations for a number of parameters that can affect the performance of CSDP. You can adjust these parameters by 1. #include "parameters.h" in your code. 2. Declare struct paramstruc params; 3. Call init_params(params); to get default values. 4. Change the value of the parameter that you're interested in. */ struct paramstruc { double axtol; double atytol; double objtol; double pinftol; double dinftol; int maxiter; double minstepfrac; double maxstepfrac; double minstepp; double minstepd; int usexzgap; int tweakgap; int affine; double perturbobj; int fastmode; }; Rcsdp/src/Csdp/theta/0000755000175100001440000000000014342635402014133 5ustar hornikusersRcsdp/src/Csdp/theta/README0000644000175100001440000000256614342635402015024 0ustar hornikusersThis directory contains C code for an SDP code to compute the Lovasz Theta number of a graph. This is mainly to demonstrate the use of the CSDP callable library. Usage is theta where is the name of a file containing the graph in the following format: # of nodes # of edges the edges, one per line, described by the two vertices For example, the complete graph on four nodes looks like this: 4 6 1 2 1 3 1 4 2 3 2 4 3 4 A program for converting a graph into an SDP in sparse SDPA format is also provided. Usage is: graphtoprob I've also provided a program for generating random graphs. Usage is rand_graph

[] where is the output file, is the number of nodes in the graph,

is the probability that each edge will be present, and is an optional integer seed for the random number generator. I've provided a third program for computing the complement of a graph. Usage is complement Please note that there are two commonly used conventions for Theta(G) and Theta(complement(G)) In this code, theta(complement(G)) is an upper bound on the max-clique of G, not theta(G). You may also want to adjust the LIBS= and CFLAGS= lines in the Makefile to get code optimized for your particular system. Rcsdp/src/Csdp/theta/complement.c0000644000175100001440000000305114342635402016441 0ustar hornikusers/* Compute the complement of a graph and output it in our standard format. Usage: complement */ #include #include #include "declarations.h" int main(argc,argv) int argc; char *argv[]; { FILE *fidin; FILE *fidout; int i; int j; int n; int m; int start; int finish; int *G; /* * Check for the right number of arguments. */ if ((argc < 3) || (argc >4)) { printf("Usage: complement \n"); exit(1); } /* * Open the input and output files. */ fidin=fopen(*++argv,"r"); fidout=fopen(*++argv,"w"); /* * Get the size parameters. */ fscanf(fidin,"%d",&n); fscanf(fidin,"%d",&m); /* * Allocate the array. */ G=(int *)malloc(n*n*sizeof(int)); /* * Now, work the G array including every edge in the graph. */ for (j=1; j<=n; j++) for (i=1; i<=n; i++) if (i == j) G[ijtok(i,j,n)]=0; else G[ijtok(i,j,n)]=1; /* * Read in the edges, and zero them out in G. */ for (i=1; i<=m; i++) { fscanf(fidin,"%d %d",&start,&finish); G[ijtok(start,finish,n)]=0; G[ijtok(finish,start,n)]=0; }; /* * Print out the resulting graph. */ fprintf(fidout,"%d \n",n); fprintf(fidout,"%d \n",n*(n-1)/2-m); for (i=1; i<=n-1; i++) for (j=i+1; j<=n; j++) if (G[ijtok(i,j,n)] == 1) fprintf(fidout,"%d %d \n",i,j); /* * Close files and free memory. */ fclose(fidin); fclose(fidout); free(G); exit(0); } Rcsdp/src/Csdp/theta/graphtoprob.c0000644000175100001440000001074214342635402016632 0ustar hornikusers/* Compute the Lovasz Theta number of a graph. Usage is theta where the input graph is in the following format: n # of nodes. m # of edges. i1 j1 first edge. i2 j2 ... im jm last edge. */ #include #include #include #include "declarations.h" int main(argc,argv) int argc; char *argv[]; { int i; int j; int n; int m; FILE *fid; int start,finish; int temp; /* * Storage for the problem. */ struct blockmatrix C; struct blockmatrix X,Z; double *y; double *a; struct constraintmatrix *constraints; /* * Check for an argument. */ if ((argc < 3) || (argc >3)) { printf("Usage: \n"); printf("\n"); printf("graphtoprob \n"); exit(1); }; /* * Open up the file and read n and m. Check the problem size. */ fid=fopen(argv[1],"r"); fscanf(fid,"%d",&n); fscanf(fid,"%d",&m); printf("Graph is of size %d %d \n",n,m); /* * Setup the objective function and the constraints. */ C.nblocks=1; C.blocks=malloc(2*sizeof(struct blockrec)); if (C.blocks == NULL) { printf("Couldn't allocate storage for C!\n"); exit(1); }; C.blocks[1].blockcategory=MATRIX; C.blocks[1].blocksize=n; C.blocks[1].data.mat=malloc(n*n*sizeof(double)); if (C.blocks[1].data.mat == NULL) { printf("Couldn't allocate storage for C!\n"); exit(1); }; for (i=1; i<=n; i++) for (j=1; j<=n; j++) C.blocks[1].data.mat[ijtok(i,j,n)]=1.0; /* * Just to keep free_prob happy. */ alloc_mat(C,&X); alloc_mat(C,&Z); y=(double *)malloc(2*sizeof(double)); /* * There are m+1 constraints. */ constraints=(struct constraintmatrix *)malloc( (m+2)*sizeof(struct constraintmatrix)); if (constraints==NULL) { printf("Failed to allocate storage for constraints!\n"); exit(1); }; a=(double *)malloc((m+2)*sizeof(double)); if (a==NULL) { printf("Failed to allocate storage for a!\n"); exit(1); }; /* * Constraint 1 says that Trace(X)=1. */ a[1]=1.0; constraints[1].blocks=(struct sparseblock *)malloc(sizeof(struct sparseblock)); constraints[1].blocks->blocknum=1; constraints[1].blocks->numentries=n; constraints[1].blocks->blocksize=n; constraints[1].blocks->constraintnum=1; constraints[1].blocks->next=NULL; constraints[1].blocks->nextbyblock=NULL; constraints[1].blocks->entries=(double *) malloc((n+1)*sizeof(double)); #ifdef NOSHORTS constraints[1].blocks->iindices=(int *) malloc((n+1)*sizeof(int)); constraints[1].blocks->jindices=(int *) malloc((n+1)*sizeof(int)); #else constraints[1].blocks->iindices=(unsigned short *) malloc((n+1)*sizeof(unsigned short)); constraints[1].blocks->jindices=(unsigned short *) malloc((n+1)*sizeof(unsigned short)); #endif for (i=1; i<=n; i++) { constraints[1].blocks->entries[i]=1.0; constraints[1].blocks->iindices[i]=i; constraints[1].blocks->jindices[i]=i; }; /* * Constraints 2 through m+1 enforce X(i,j)=0 when (i,j) is an edge. */ for (i=2; i<=m+1; i++) { a[i]=0.0; fscanf(fid,"%d %d",&start,&finish); if (start > finish) { temp=start; start=finish; finish=temp; }; constraints[i].blocks=(struct sparseblock *) malloc(sizeof(struct sparseblock)); constraints[i].blocks->blocknum=1; constraints[i].blocks->numentries=1; constraints[i].blocks->blocksize=n; constraints[i].blocks->constraintnum=i; constraints[i].blocks->next=NULL; constraints[i].blocks->nextbyblock=NULL; constraints[i].blocks->entries=(double *) malloc((2)*sizeof(double)); #ifdef NOSHORTS constraints[i].blocks->iindices=(int *) malloc((2)*sizeof(int)); constraints[i].blocks->jindices=(int *) malloc((2)*sizeof(int)); #else constraints[i].blocks->iindices=(unsigned short *) malloc((2)*sizeof(unsigned short)); constraints[i].blocks->jindices=(unsigned short *) malloc((2)*sizeof(unsigned short)); #endif constraints[i].blocks->entries[1]=1.0; constraints[i].blocks->iindices[1]=start; constraints[i].blocks->jindices[1]=finish; }; /* * Close the input file. */ fclose(fid); /* * Write out the problem. */ write_prob(argv[2],n,m+1,C,a,constraints); free_prob(n,m+1,C,a,constraints,X,y,Z); exit(0); } Rcsdp/src/Csdp/theta/theta.c0000644000175100001440000001113114342635402015401 0ustar hornikusers/* Compute the Lovasz Theta number of a graph. Usage is theta where the input graph is in the following format: n # of nodes. m # of edges. i1 j1 first edge. i2 j2 ... im jm last edge. */ #include #include #include #include "declarations.h" int main(argc,argv) int argc; char *argv[]; { int i; int j; int n; int m; FILE *fid; int ret; int start,finish; int temp; /* * Storage for the problem. */ struct blockmatrix C; struct blockmatrix X,Z; double *y; double pobj,dobj; double *a; struct constraintmatrix *constraints; /* * Check for an argument. */ if ((argc < 2) || (argc >2)) { printf("Usage: \n"); printf("\n"); printf("theta \n"); exit(1); }; /* * Open up the file and read n and m. Check the problem size. */ fid=fopen(*++argv,"r"); fscanf(fid,"%d",&n); fscanf(fid,"%d",&m); printf("Graph is of size %d %d \n",n,m); /* * Setup the objective function and the constraints. */ C.nblocks=1; C.blocks=malloc(2*sizeof(struct blockrec)); if (C.blocks == NULL) { printf("Couldn't allocate storage for C!\n"); exit(1); }; C.blocks[1].blockcategory=MATRIX; C.blocks[1].blocksize=n; C.blocks[1].data.mat=malloc(n*n*sizeof(double)); if (C.blocks[1].data.mat == NULL) { printf("Couldn't allocate storage for C!\n"); exit(1); }; for (i=1; i<=n; i++) for (j=1; j<=n; j++) C.blocks[1].data.mat[ijtok(i,j,n)]=1.0; /* * There are m+1 constraints. */ constraints=(struct constraintmatrix *)malloc( (m+2)*sizeof(struct constraintmatrix)); if (constraints==NULL) { printf("Failed to allocate storage for constraints!\n"); exit(1); }; a=(double *)malloc((m+2)*sizeof(double)); if (a==NULL) { printf("Failed to allocate storage for a!\n"); exit(1); }; /* * Constraint 1 says that Trace(X)=1. */ a[1]=1.0; constraints[1].blocks=(struct sparseblock *)malloc(sizeof(struct sparseblock)); constraints[1].blocks->blocknum=1; constraints[1].blocks->numentries=n; constraints[1].blocks->blocksize=n; constraints[1].blocks->constraintnum=1; constraints[1].blocks->next=NULL; constraints[1].blocks->nextbyblock=NULL; constraints[1].blocks->entries=(double *) malloc((n+1)*sizeof(double)); #ifdef NOSHORTS constraints[1].blocks->iindices=(int *) malloc((n+1)*sizeof(int)); constraints[1].blocks->jindices=(int *) malloc((n+1)*sizeof(int)); #else constraints[1].blocks->iindices=(unsigned short *) malloc((n+1)*sizeof(unsigned short)); constraints[1].blocks->jindices=(unsigned short *) malloc((n+1)*sizeof(unsigned short)); #endif for (i=1; i<=n; i++) { constraints[1].blocks->entries[i]=1.0; constraints[1].blocks->iindices[i]=i; constraints[1].blocks->jindices[i]=i; }; /* * Constraints 2 through m+1 enforce X(i,j)=0 when (i,j) is an edge. */ for (i=2; i<=m+1; i++) { a[i]=0.0; fscanf(fid,"%d %d",&start,&finish); if (start > finish) { temp=start; start=finish; finish=temp; }; constraints[i].blocks=(struct sparseblock *) malloc(sizeof(struct sparseblock)); constraints[i].blocks->blocknum=1; constraints[i].blocks->numentries=1; constraints[i].blocks->blocksize=n; constraints[i].blocks->constraintnum=i; constraints[i].blocks->next=NULL; constraints[i].blocks->nextbyblock=NULL; constraints[i].blocks->entries=(double *) malloc((2)*sizeof(double)); #ifdef NOSHORTS constraints[i].blocks->iindices=(int *) malloc((2)*sizeof(int)); constraints[i].blocks->jindices=(int *) malloc((2)*sizeof(int)); #else constraints[i].blocks->iindices=(unsigned short *) malloc((2)*sizeof(unsigned short)); constraints[i].blocks->jindices=(unsigned short *) malloc((2)*sizeof(unsigned short)); #endif constraints[i].blocks->entries[1]=1.0; constraints[i].blocks->iindices[1]=start; constraints[i].blocks->jindices[1]=finish; }; /* * Close the file. */ fclose(fid); /* * Create an initial solution. */ initsoln(n,m+1,C,a,constraints,&X,&y,&Z); /* * Use easy_sdp() to solve the problem. */ ret=easy_sdp(n,m+1,C,a,constraints,0.0,&X,&y,&Z,&pobj,&dobj); if (ret == 0) printf("The Lovasz Theta Number is %.7e \n",(dobj+pobj)/2); else printf("SDP failed.\n"); free_prob(n,m+1,C,a,constraints,X,y,Z); exit(0); } Rcsdp/src/Csdp/theta/Makefile0000644000175100001440000001333014414754226015601 0ustar hornikusers# # Uncomment this line to specify the C compiler if the system default isn't # what you want to use. # #CC=cc # # Use this line to specify options for the C compiler. You'll probably # want to turn on optimizations. You may also have to use some of the # following flags: # # -DCAPSBLAS if BLAS routine names are capitalized. # -DCAPSLAPACK if LAPACK routine names are capitalized. # -DNOUNDERBLAS if BLAS routine names have no underscore. # -DNOUNDERLAPACK if LAPACK routine names have no underscore. # -DBIT64 For I32LP64 systems. # -DNOSHORTS Allow for (LP) blocks of more than 65535 variables. # -DUSEOPENMP To turn on OpenMP parallelization # -DSETNUMTHREADS To use with an OpenMP aware BLAS library. # # The default settings for gcc: # CFLAGS=-O3 -ansi -Wall -DNOSHORTS -I../include # # Notes on CFLAGS. # # 1. The -DNOSHORTS flag should always be used. When this is turned off, # it causes the code to use unsigned short integers (maximum value 65535) # in the data structures that describe the problem. This can cause problems # when some of the size parameters are larger than 65535. # # 2. By default, we assume that BLAS routines have names like ddot_(), # but some systems use ddot(), DDOT(), or DDOT_() instead. A similar issue # effects the LAPACK routines. The flags -DCAPSBLAS, -DCAPSLAPACK, # -DNOUNDERBLAS. and -DNOUNDERLAPACK are used to handle such situations. # # 3. The code can be built on 64 bit systems that use an I32LP64 model # in which int's are 32 bits, long's and pointers are 64 bits. Note that # that is the model on all 64 bit Linux and Unix systems that I'm aware of, # but it is not the model used by MS in its 64 bit Windows! To build a # 64 bit version of the code, use -DBIT64. You may also need to add a CFLAG # to tell your compiler to produce 64 bit code. For example, with gcc, # you'll need to add "-m64" to CFLAGS to produce 64 bit code. # # 4. If you have multiple CPU's, and if your compiler supports OpenMP, then # you should definitely build a parallel version of CSDP. To do this, # add "-DUSEOPENMP" to CFLAGS. If your BLAS/LAPACK library routines # use OpenMP's conventions for setting the number of threads to use, then # you should also add "-DSETNUMTHREADS". Note that ATLAS does not # currently work with "-DSETNUMTHREADS", but you can use SETNUMTHREADS # on Solaris with -lsunperf and AIX systems with -lesslsmp. # 5. Using gcc, you can greatly improve the efficency of the code if you # specify your processor type. Examples are given below, use the default # if you are unsure. More examples may be found at # # http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html # # An AMD Athlon XP based machine: # CFLAGS=-march=athlon-xp -O3 -ansi -Wall -DNOSHORTS -I../include # An Intel Pentum 4 based amchine: # CFLAGS=-march=pentum4 -O3 -ansi -Wall -DNOSHORTS -I../include # # 5. If you change the CFLAGS, make sure that you use the same CFLAGS # in the Makefiles in the solver and theta directories! # # The code depends on several libraries: # # sdp The CSDP subroutine library # lapack The LAPACK linear algebra library # blas The BLAS basic linear algebra library # # In addition, if you're using gcc to compile the C code, then you'll need: # # gfortran The gnu C/Fortran 77 compatibility library (called g2c # in versions of gcc before gcc 4.0.) # m The C math run time library. # # Use this line to specify where the SDP and linear algebra libraries are # to be found. # # -L../lib look in the ../lib directory # -lsdp get libsdp.a from the ../lib directory # -llapack get liblapack.a or liblapack.so # -lblas get libblas.a or libblas.so # -lgfortran get libgfortran.a or libgfortran.so # -lm get libm.a or libm.so # # The default settings for a Linux system with gcc3, lapack, blas, and g2c: # LIBS=-L../lib -lsdp -llapack -lblas -lgfortran -lm # # 1. Warning about debian systems. For some absurb reason, the BLAS # package in debian has the BLAS library named libblas-3.a, rather than # libblas.a. You can either modify the LIBS= line, or you can create # a symbolic link from /usr/lib/libblas.a to /usr/lib/libblas-3.a. # # 2. An alternative set of flags for use with the ATLAS BLAS on a Linux system. # # LIBS=-L../lib -lsdp -llapack -lf77blas -lcblas -latlas -lgfortran -lm # # 3. Special note on gcc 3. For gcc versions before gcc 4.0, -lgfortran # should be replaced by -lg2c. # # 4. An alternative set of flags for use with the ATLAS BLAS, gcc 4.2, and # OpenMP on a linux system. # # # LIBS=-L../lib -lsdp -llapack -lptf77blas -lptcblas -latlas -lgomp -lrt -lpthread -lgfortran -lm # # 5. An alternative set of flags for use with Intel's icc and MKL. # # CC=icc # CFLAGS=-O3 -m64 -openmp -DBIT64 -DUSEOPENMP -DNOSHORTS -DSETNUMTHREADS # -I../include # LIBS=-openmp -L../lib -lsdp -mkl -lm # # Target all builds everything. # all: theta complement rand_graph graphtoprob # # This builds the theta number code. # theta: theta.o $(CC) $(CFLAGS) theta.o $(LIBS) -o theta # # Complement computes the complement of a graph. # complement: complement.o $(CC) $(CFLAGS) complement.o $(LIBS) -o complement # # rand_graph generates a random graph. # rand_graph: rand_graph.o $(CC) $(CFLAGS) rand_graph.o $(LIBS) -o rand_graph # # graphtoprob converts a file in the graph format to an SDP problem in our # SDP format. # graphtoprob: graphtoprob.o $(CC) $(CFLAGS) graphtoprob.o $(LIBS) -o graphtoprob # # To clean up the directory. # clean: rm -f *.o rm -f theta rm -f complement rm -f rand_graph rm -f graphtoprob Rcsdp/src/Csdp/theta/rand_graph.c0000644000175100001440000000426514342635402016413 0ustar hornikusers/* Compute the complement of a graph and output it in our standard format. Usage: complement */ #include #include #include #include "declarations.h" /* On some systems, RAND_MAX is undefined. If so, use RAND_MAX=32768 */ #ifndef RAND_MAX #define RAND_MAX 32768 #endif int main(argc,argv) int argc; char *argv[]; { FILE *fidout; int i; int j; int n; int m; int s; double p; int *G; /* * Get the parameters and open up the output file. */ if (argc <= 3) { printf("Usage: rand_graph

[] \n"); exit(1); }; if (argc >= 4) { fidout=fopen(*++argv,"w"); n=atoi(*++argv); p=atof(*++argv); }; /* * Get the random number seed if specified. */ if (argc >= 5) { s=atoi(*++argv); srand((unsigned int)s); }; /* * Allocate storage for the graph. */ G=(int *)malloc(n*n*sizeof(int)); /* * Now, generate the graph. */ /* * The following kludge is here to deal with a bug that we've * encountered in stdlib.h under Solaris 2.5. The problem is that * stdlib.h defines RAND_MAX as 2^15-1, while rand() actually returns * numbers between 0 and 2^31-1. This is a violation of the ANSI * standard, but we can get around it by first taking rand() mod * RAND_MAX and then dividing by RAND_MAX. The same code should * work fine if RAND_MAX is correctly defined. * * Note too that on some systems (for example, SunOS 4.1.X, RAND_MAX * isn't defined in stdlib.h. In such cases, we'll have to define the * symbol with -DRAND_MAX= in the Makefile. * */ m=0; for (i=1; i<=n-1; i++) for (j=i+1; j<=n; j++) if ((1.0*(rand() % RAND_MAX)/RAND_MAX) <= p) { G[ijtok(i,j,n)]=1; m++; } else { G[ijtok(i,j,n)]=0; }; /* * And print the graph out. */ fprintf(fidout,"%d \n",n); fprintf(fidout,"%d \n",m); for (i=1; i<=n-1; i++) for (j=i+1; j<=n; j++) if (G[ijtok(i,j,n)] == 1) fprintf(fidout,"%d %d \n",i,j); /* * Close files and free memory. */ fclose(fidout); free(G); exit(0); } Rcsdp/src/Csdp/AUTHORS0000644000175100001440000000054614342635402014103 0ustar hornikusersMain author(s): Dr. Brian Borchers main contributor Other contributors: Joseph Young Original parallel version of op_o. Aaron Wilson modified documentation/install procedure for COIN-OR Rcsdp/src/Csdp/lib/0000755000175100001440000000000014345235152013575 5ustar hornikusersRcsdp/src/Csdp/lib/mat_multsp.c0000644000175100001440000004147614345222225016137 0ustar hornikusers/* * Compute C=scale1*A*B+scale2*C. * Note that C must consist of dense matrix and vector blocks- no sparse * blocks or eye's or other special cases. * * A and B can have blocks of all supported types. Unsupported types * generate exit(1). * * It is assumed that all three matrices are of compatible block strucutre. * * This version of mat_mult is specialized to deal with matrices B * which have nonzero structure given by fill. * */ #include #include #include "declarations.h" #ifdef USEOPENMP #include #endif /* * This #define parameter determines how sparse a block must be to be * considered sparse. You can change it by compiling with * -DSPARSELIM= * * 0.01 was selected without much tuning. On maxG11, performance is * better with SPARSELIM=0.01 than 0.0, but it isn't clear whether this * should be made larger. * * For that matter, it isn't clear whether there should be separate * limits for each type of sparse matrix multiply. */ #ifndef SPARSELIMA #define SPARSELIMA 0.01 #endif #ifndef SPARSELIMB #define SPARSELIMB 0.01 #endif #ifndef SPARSELIMC #define SPARSELIMC 0.01 #endif void mat_multspb(double scale1, double scale2, struct blockmatrix A, struct blockmatrix B, struct blockmatrix C, struct constraintmatrix fill) { int blk,i,ii,j; int blksize,p,q; struct sparseblock *ptr; double temp; int total_threads; int thread_num; if (scale2 == 0.0) { zero_mat(C); /* * if scale1 also is zero, then we just zero'd out C. */ if (scale1 == 0.0) return; /* * Now, multiply A*B and add it in. */ ptr=fill.blocks; while (ptr != NULL) { blk=ptr->blocknum; switch (A.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=A.blocks[blk].blocksize; i++) C.blocks[blk].data.vec[i]=scale1*A.blocks[blk].data.vec[i]* B.blocks[blk].data.vec[i]; break; case MATRIX: blksize=ptr->blocksize; /* * If this matrix is fairly dense, then don't bother with * This approach. */ if (ptr->numentries/(blksize*blksize*1.0) > SPARSELIMB) { /* * A dense block. Do it the old fashioned way. */ mat_mult_raw(blksize,scale1,scale2,A.blocks[blk].data.mat, B.blocks[blk].data.mat,C.blocks[blk].data.mat); } else { #ifdef __GNUC__ #if (((__GNUC__ == 3) && (__GNUC_MINOR__ > 1)) || (__GNUC__ > 3)) __builtin_prefetch(ptr->next,0,3); #endif #endif #ifdef USEOPENMP #pragma omp parallel default(none) private(i,ii,p,q,thread_num,total_threads,temp) shared(ptr,A,B,C,blk,blksize,scale1) { total_threads=omp_get_num_threads(); thread_num=omp_get_thread_num(); for (ii=1; ii<=ptr->numentries; ii++) { q=ptr->jindices[ii]; if ((q % total_threads)==thread_num) { p=ptr->iindices[ii]; temp=scale1*B.blocks[blk].data.mat[ijtok(p,q,blksize)]; for (i=1; i<=blksize; i++) C.blocks[blk].data.mat[ijtok(i,q,blksize)]+=temp* A.blocks[blk].data.mat[ijtok(i,p,blksize)]; }; }; } #pragma omp barrier #else for (ii=1; ii<=ptr->numentries; ii++) { p=ptr->iindices[ii]; q=ptr->jindices[ii]; temp=scale1*B.blocks[blk].data.mat[ijtok(p,q,blksize)]; for (i=1; i<=blksize; i++) C.blocks[blk].data.mat[ijtok(i,q,blksize)]+=temp* A.blocks[blk].data.mat[ijtok(i,p,blksize)]; }; #endif }; break; case PACKEDMATRIX: default: printf("mat_multsp illegal block type \n"); exit(12); }; /* * Move on to the next block. */ ptr=ptr->next; }; } else { /* * First, scale C by the scale 2 factor. */ for (blk=1; blk<=C.nblocks; blk++) { switch (C.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=C.blocks[blk].blocksize; i++) C.blocks[blk].data.vec[i]=scale2*C.blocks[blk].data.vec[i]; break; case MATRIX: #pragma omp parallel for schedule(dynamic,64) default(none) private(i,j) shared(blk,C,scale2) for (j=1; j<=C.blocks[blk].blocksize; j++) for (i=1; i<=C.blocks[blk].blocksize; i++) C.blocks[blk].data.mat[ijtok(i,j,C.blocks[blk].blocksize)]= scale2*C.blocks[blk].data.mat[ijtok(i,j,C.blocks[blk].blocksize)]; break; case PACKEDMATRIX: default: printf("mat_multsp illegal block type \n"); exit(12); }; }; /* * if scale1 is zero, then we're done. */ if (scale1 == 0.0) return; /* * Now, multiply A*B and add it in. */ ptr=fill.blocks; while (ptr != NULL) { blk=ptr->blocknum; switch (A.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=A.blocks[blk].blocksize; i++) C.blocks[blk].data.vec[i]+=scale1*A.blocks[blk].data.vec[i]* B.blocks[blk].data.vec[i]; break; case MATRIX: blksize=ptr->blocksize; /* * If this matrix is fairly dense, then don't bother with * This approach. */ if (ptr->numentries/(blksize*blksize*1.0) > SPARSELIMB) { /* * A dense block. Do it the old fashioned way. */ mat_mult_raw(blksize,scale1,1.0,A.blocks[blk].data.mat, B.blocks[blk].data.mat,C.blocks[blk].data.mat); } else { #ifdef __GNUC__ #if (((__GNUC__ == 3) && (__GNUC_MINOR__ > 1)) || (__GNUC__ > 3)) __builtin_prefetch(ptr->next,0,3); #endif #endif #ifdef USEOPENMP #pragma omp parallel default(none) private(i,ii,p,q,thread_num,total_threads,temp) shared(ptr,A,B,C,blk,blksize,scale1) { total_threads=omp_get_num_threads(); thread_num=omp_get_thread_num(); for (ii=1; ii<=ptr->numentries; ii++) { q=ptr->jindices[ii]; if ((q % total_threads)==thread_num) { p=ptr->iindices[ii]; temp=scale1*B.blocks[blk].data.mat[ijtok(p,q,blksize)]; for (i=1; i<=blksize; i++) C.blocks[blk].data.mat[ijtok(i,q,blksize)]+=temp* A.blocks[blk].data.mat[ijtok(i,p,blksize)]; }; }; } #pragma omp barrier #else for (ii=1; ii<=ptr->numentries; ii++) { p=ptr->iindices[ii]; q=ptr->jindices[ii]; temp=scale1*B.blocks[blk].data.mat[ijtok(p,q,blksize)]; for (i=1; i<=blksize; i++) C.blocks[blk].data.mat[ijtok(i,q,blksize)]+=temp* A.blocks[blk].data.mat[ijtok(i,p,blksize)]; }; #endif }; break; case PACKEDMATRIX: default: printf("mat_multsp illegal block type \n"); exit(12); }; /* * Move on to the next block. */ ptr=ptr->next; }; }; } /* * This version of mat_mult is specialized for sparse A matrices. */ void mat_multspa(double scale1, double scale2, struct blockmatrix A, struct blockmatrix B, struct blockmatrix C, struct constraintmatrix fill) { int blk,i,j,ii; int blksize,p,q; struct sparseblock *ptr; double temp; int total_threads; int thread_num; if (scale2 == 0.0) { zero_mat(C); /* * if scale1 also is zero, then we just zero'd out C. */ if (scale1 == 0.0) return; /* * Now, multiply A*B and add it in. */ ptr=fill.blocks; while (ptr != NULL) { blk=ptr->blocknum; switch (A.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=A.blocks[blk].blocksize; i++) C.blocks[blk].data.vec[i]=scale1*A.blocks[blk].data.vec[i]* B.blocks[blk].data.vec[i]; break; case MATRIX: blksize=ptr->blocksize; /* * If this matrix is fairly dense, then don't bother with * This approach. */ if (ptr->numentries/(blksize*blksize*1.0) > SPARSELIMA) { /* * A dense block. Do it the old fashioned way. */ mat_mult_raw(blksize,scale1,scale2,A.blocks[blk].data.mat, B.blocks[blk].data.mat,C.blocks[blk].data.mat); } else { #ifdef __GNUC__ #if (((__GNUC__ == 3) && (__GNUC_MINOR__ > 1)) || (__GNUC__ > 3)) __builtin_prefetch(ptr->next,0,3); #endif #endif #ifdef USEOPENMP #pragma omp parallel default(none) private(i,ii,p,q,thread_num,total_threads,temp) shared(ptr,A,B,C,blk,blksize,scale1) { total_threads=omp_get_num_threads(); thread_num=omp_get_thread_num(); for (ii=1; ii<=ptr->numentries; ii++) { p=ptr->iindices[ii]; if ((p % total_threads) == thread_num) { q=ptr->jindices[ii]; temp=scale1*A.blocks[blk].data.mat[ijtok(p,q,blksize)]; for (i=1; i<=ptr->blocksize; i++) C.blocks[blk].data.mat[ijtok(p,i,blksize)]+=temp* B.blocks[blk].data.mat[ijtok(i,q,blksize)]; }; }; } #pragma omp barrier #else for (ii=1; ii<=ptr->numentries; ii++) { p=ptr->iindices[ii]; q=ptr->jindices[ii]; temp=scale1*A.blocks[blk].data.mat[ijtok(p,q,blksize)]; for (i=1; i<=ptr->blocksize; i++) C.blocks[blk].data.mat[ijtok(p,i,blksize)]+=temp* B.blocks[blk].data.mat[ijtok(i,q,blksize)]; }; #endif }; break; case PACKEDMATRIX: default: printf("mat_multsp illegal block type \n"); exit(12); }; /* * Move on to the next block. */ ptr=ptr->next; }; } else { /* * First, scale C by the scale 1 factor. */ for (blk=1; blk<=C.nblocks; blk++) { switch (C.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=C.blocks[blk].blocksize; i++) C.blocks[blk].data.vec[i]=scale2*C.blocks[blk].data.vec[i]; break; case MATRIX: #pragma omp parallel for default(none) schedule(dynamic,64) private(i,j) shared(blk,C,scale2) for (j=1; j<=C.blocks[blk].blocksize; j++) for (i=1; i<=C.blocks[blk].blocksize; i++) C.blocks[blk].data.mat[ijtok(i,j,C.blocks[blk].blocksize)]= scale2*C.blocks[blk].data.mat[ijtok(i,j,C.blocks[blk].blocksize)]; break; case PACKEDMATRIX: default: printf("mat_multsp illegal block type \n"); exit(12); }; }; /* * if scale1 is zero, then we're done. */ if (scale1 == 0.0) return; /* * Now, multiply A*B and add it in. */ ptr=fill.blocks; while (ptr != NULL) { blk=ptr->blocknum; switch (A.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=A.blocks[blk].blocksize; i++) C.blocks[blk].data.vec[i]+=scale1*A.blocks[blk].data.vec[i]* B.blocks[blk].data.vec[i]; break; case MATRIX: blksize=ptr->blocksize; /* * If this matrix is fairly dense, then don't bother with * This approach. */ if (ptr->numentries/(blksize*blksize*1.0) > SPARSELIMA) { /* * A dense block. Do it the old fashioned way. */ mat_mult_raw(blksize,scale1,1.0,A.blocks[blk].data.mat, B.blocks[blk].data.mat,C.blocks[blk].data.mat); } else { #ifdef __GNUC__ #if (((__GNUC__ == 3) && (__GNUC_MINOR__ > 1)) || (__GNUC__ > 3)) __builtin_prefetch(ptr->next,0,3); #endif #endif #ifdef USEOPENMP #pragma omp parallel default(none) private(i,ii,p,q,thread_num,total_threads,temp) shared(ptr,A,B,C,blk,blksize,scale1) { total_threads=omp_get_num_threads(); thread_num=omp_get_thread_num(); for (ii=1; ii<=ptr->numentries; ii++) { p=ptr->iindices[ii]; if ((p % total_threads) == thread_num) { q=ptr->jindices[ii]; temp=scale1*A.blocks[blk].data.mat[ijtok(p,q,blksize)]; for (i=1; i<=ptr->blocksize; i++) C.blocks[blk].data.mat[ijtok(p,i,blksize)]+=temp* B.blocks[blk].data.mat[ijtok(i,q,blksize)]; }; }; } #pragma omp barrier #else for (ii=1; ii<=ptr->numentries; ii++) { p=ptr->iindices[ii]; q=ptr->jindices[ii]; temp=scale1*A.blocks[blk].data.mat[ijtok(p,q,blksize)]; for (i=1; i<=ptr->blocksize; i++) C.blocks[blk].data.mat[ijtok(p,i,blksize)]+=temp* B.blocks[blk].data.mat[ijtok(i,q,blksize)]; }; #endif }; break; case PACKEDMATRIX: default: printf("mat_multsp illegal block type \n"); exit(12); }; /* * Move on to the next block. */ ptr=ptr->next; }; }; } /* * This version of mat_mult is specialized for sparse C matrices. * It only generates the elements in the result C corresponding * to elements described in fill. */ void mat_multspc(double scale1, double scale2, struct blockmatrix A, struct blockmatrix B, struct blockmatrix C, struct constraintmatrix fill) { int blk,i,j,ii; int blksize,p,q; struct sparseblock *ptr; double temp; /* * To protect against bad implementations of the BLAS that don't handle * scale2=0 in dgemv well. */ if (scale2 == 0.0) { /* * To protect against bad implementations of the BLAS that don't handle * scale2=0 in dgemv well. */ zero_mat(C); /* * Now, multiply A*B and add it in. */ ptr=fill.blocks; while (ptr != NULL) { blk=ptr->blocknum; switch (A.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=A.blocks[blk].blocksize; i++) C.blocks[blk].data.vec[i]=scale1*A.blocks[blk].data.vec[i]* B.blocks[blk].data.vec[i]; break; case MATRIX: blksize=ptr->blocksize; /* * If this matrix is fairly dense, then don't bother with * This approach. */ if (ptr->numentries/(blksize*blksize*1.0) > SPARSELIMC) { /* * A dense block. Do it the old fashioned way. */ mat_mult_raw(blksize,scale1,scale2,A.blocks[blk].data.mat, B.blocks[blk].data.mat,C.blocks[blk].data.mat); } else { #ifdef __GNUC__ #if (((__GNUC__ == 3) && (__GNUC_MINOR__ > 1)) || (__GNUC__ > 3)) __builtin_prefetch(ptr->next,0,3); #endif #endif #pragma omp parallel for schedule(dynamic,64) default(none) private(i,ii,p,q,temp) shared(ptr,A,B,C,blk,blksize,scale1) for (ii=1; ii<=ptr->numentries; ii++) { p=ptr->iindices[ii]; q=ptr->jindices[ii]; temp=0; for (i=1; i<=ptr->blocksize; i++) temp+= A.blocks[blk].data.mat[ijtok(i,p,blksize)]* B.blocks[blk].data.mat[ijtok(i,q,blksize)]; C.blocks[blk].data.mat[ijtok(p,q,blksize)]=temp*scale1; }; }; break; case PACKEDMATRIX: default: printf("mat_multsp illegal block type \n"); exit(12); }; /* * Move on to the next block. */ ptr=ptr->next; }; } else { /* * First, scale C by the scale 2 factor. */ for (blk=1; blk<=C.nblocks; blk++) { switch (C.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=C.blocks[blk].blocksize; i++) C.blocks[blk].data.vec[i]=scale2*C.blocks[blk].data.vec[i]; break; case MATRIX: #pragma omp parallel for default(none) schedule(dynamic,64) private(i,j) shared(blk,C,scale2) for (j=1; j<=C.blocks[blk].blocksize; j++) for (i=1; i<=C.blocks[blk].blocksize; i++) C.blocks[blk].data.mat[ijtok(i,j,C.blocks[blk].blocksize)]= scale2*C.blocks[blk].data.mat[ijtok(i,j,C.blocks[blk].blocksize)]; break; case PACKEDMATRIX: default: printf("mat_multsp illegal block type \n"); exit(12); }; }; /* * Now, multiply A*B and add it in. */ ptr=fill.blocks; while (ptr != NULL) { blk=ptr->blocknum; switch (A.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=A.blocks[blk].blocksize; i++) C.blocks[blk].data.vec[i]+=scale1*A.blocks[blk].data.vec[i]* B.blocks[blk].data.vec[i]; break; case MATRIX: blksize=ptr->blocksize; /* * If this matrix is fairly dense, then don't bother with * This approach. */ if (ptr->numentries/(blksize*blksize*1.0) > SPARSELIMC) { /* * A dense block. Do it the old fashioned way. */ mat_mult_raw(blksize,scale1,scale2,A.blocks[blk].data.mat, B.blocks[blk].data.mat,C.blocks[blk].data.mat); } else { #ifdef __GNUC__ #if (((__GNUC__ == 3) && (__GNUC_MINOR__ > 1)) || (__GNUC__ > 3)) __builtin_prefetch(ptr->next,0,3); #endif #endif for (ii=1; ii<=ptr->numentries; ii++) { /* p=ptr->iindices[ii]; q=ptr->jindices[ii]; for (i=1; i<=ptr->blocksize; i++) C.blocks[blk].data.mat[ijtok(p,q,blksize)]+=scale1* A.blocks[blk].data.mat[ijtok(p,i,blksize)]* B.blocks[blk].data.mat[ijtok(i,q,blksize)]; */ p=ptr->iindices[ii]; q=ptr->jindices[ii]; temp=0; for (i=1; i<=ptr->blocksize; i++) temp+= A.blocks[blk].data.mat[ijtok(i,p,blksize)]* B.blocks[blk].data.mat[ijtok(i,q,blksize)]; C.blocks[blk].data.mat[ijtok(p,q,blksize)]+=temp*scale1; }; }; break; case PACKEDMATRIX: default: printf("mat_multsp illegal block type \n"); exit(12); }; /* * Move on to the next block. */ ptr=ptr->next; }; }; } Rcsdp/src/Csdp/lib/op_a.c0000644000175100001440000000241514345226370014663 0ustar hornikusers /* Compute A(X). */ #include #include "declarations.h" void op_a(int k, struct constraintmatrix *constraints, struct blockmatrix X, double *result) { int i,j; int p,q; int blk; double ent; double *mat; double *vec; int nume; struct sparseblock *ptr; double contrib; #pragma omp parallel for schedule(dynamic,64) default(none) private(i,contrib,ptr,blk,nume,vec,j,p,mat,ent,q) shared(k,constraints,result,X) for (i=1; i<=k; i++) { result[i]=0.0; contrib=0.0; ptr=constraints[i].blocks; while (ptr != NULL) { blk=ptr->blocknum; nume=ptr->numentries; if (X.blocks[blk].blockcategory == DIAG) { vec=X.blocks[blk].data.vec; for (j=1; j<=nume; j++) { ent=ptr->entries[j]; p=ptr->iindices[j]; contrib += ent*vec[p]; }; } else { mat=X.blocks[blk].data.mat; for (j=1; j<=nume; j++) { ent=ptr->entries[j]; p=ijtok(ptr->iindices[j],ptr->jindices[j],ptr->blocksize); q=ijtok(ptr->jindices[j],ptr->iindices[j],ptr->blocksize); if (p == q) { contrib += ent*mat[p]; } else { contrib += ent*(mat[p]+mat[q]); }; }; }; ptr=ptr->next; }; result[i] += contrib; }; } Rcsdp/src/Csdp/lib/packed.c0000644000175100001440000000777414345217234015210 0ustar hornikusers/* * This file contains routines for manipulating block matrices with blocks * stored in LAPACK's packed storage scheme. */ #include #include #include "declarations.h" void store_packed(struct blockmatrix A, struct blockmatrix B) { int blk,i,j,n; double *p; double *q; for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: p=A.blocks[blk].data.vec; q=B.blocks[blk].data.vec; n=A.blocks[blk].blocksize; for (i=1; i<=n; i++) q[i]=p[i]; break; case MATRIX: p=A.blocks[blk].data.mat; q=B.blocks[blk].data.mat; n=A.blocks[blk].blocksize; #pragma omp parallel for schedule(dynamic,64) private(i,j) shared(p,q,n) for (j=1; j<=n; j++) for (i=1; i<=j; i++) q[ijtokp(i,j,n)]=p[ijtok(i,j,n)]; break; default: printf("store_packed illegal block type \n"); exit(12); }; } } void store_unpacked(struct blockmatrix A, struct blockmatrix B) { int blk,i,j,n; double *p; double *q; for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: p=A.blocks[blk].data.vec; q=B.blocks[blk].data.vec; n=A.blocks[blk].blocksize; for (i=1; i<=n; i++) q[i]=p[i]; break; case PACKEDMATRIX: p=A.blocks[blk].data.mat; q=B.blocks[blk].data.mat; n=A.blocks[blk].blocksize; #pragma omp parallel for schedule(dynamic,64) private(i,j) shared(p,q,n) for (j=1; j<=n; j++) for (i=1; i<=j; i++) q[ijtok(i,j,n)]=p[ijtokp(i,j,n)]; for (j=1; jnblocks=A.nblocks; /* * Then allocate space for the block records. */ pB->blocks=(struct blockrec *)malloc(sizeof(struct blockrec)*(A.nblocks+1)); if (pB->blocks == NULL) { printf("Storage allocation failed!\n"); exit(10); }; /* * Now, fill in the info for each block. */ for (blk=1; blk <=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: pB->blocks[blk].blockcategory=A.blocks[blk].blockcategory; pB->blocks[blk].blocksize=A.blocks[blk].blocksize; pB->blocks[blk].data.vec=(double *)malloc(sizeof(double)*(A.blocks[blk].blocksize+1)); if (pB->blocks[blk].data.vec == NULL) { printf("Storage allocation failed!\n"); exit(10); }; break; case MATRIX: n=A.blocks[blk].blocksize; pB->blocks[blk].blockcategory=PACKEDMATRIX; pB->blocks[blk].blocksize=n; pB->blocks[blk].data.mat=(double *)malloc(sizeof(double)*n*(n+1)/2); if (pB->blocks[blk].data.mat == NULL) { printf("Storage allocation failed!\n"); exit(10); }; break; default: printf("Illegal block type!\n"); exit(12); }; }; } void free_mat_packed(struct blockmatrix A) { int blk; /* * First, free the space for each block. */ for (blk=1; blk <=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: free(A.blocks[blk].data.vec); break; case PACKEDMATRIX: free(A.blocks[blk].data.mat); break; default: printf("Illegal block type!\n"); exit(12); }; }; /* * Then free space for the block records. */ free(A.blocks); } void triu(struct blockmatrix A) { int i,j,n; int blk; for (blk=1; blk <= A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: break; case MATRIX: n=A.blocks[blk].blocksize; #pragma omp parallel for schedule(dynamic,64) private(i,j) shared(A,n) for (j=1; j #include #include "declarations.h" int write_sol(char *fname, int n, int k, struct blockmatrix X, double *y, struct blockmatrix Z) { FILE *fid; int i; int j; int blk; double ent; /* * Open the output file for writing. */ fid=fopen(fname,"w"); if (fid == (FILE *) NULL) { printf("Failed to open output file for writing solution. \n"); exit(11); }; /* * Print out y (x0 in SDPA notation) */ for (i=1; i<=k; i++) fprintf(fid,"%.18e ",y[i]); fprintf(fid,"\n"); /* * Next, print out Z (X in SDPA notation) */ for (blk=1; blk<=Z.nblocks; blk++) { switch (Z.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=Z.blocks[blk].blocksize; i++) { ent=Z.blocks[blk].data.vec[i]; if (ent != 0.0) fprintf(fid,"1 %d %d %d %.18e \n",blk,i,i,ent); }; break; case MATRIX: for (i=1; i<=Z.blocks[blk].blocksize; i++) for (j=i; j<=Z.blocks[blk].blocksize; j++) { ent=Z.blocks[blk].data.mat[ijtok(i,j,Z.blocks[blk].blocksize)]; if (ent != 0.0) fprintf(fid,"1 %d %d %d %.18e \n",blk,i,j,ent); }; break; default: printf("Illegal block type!\n"); exit(12); }; }; /* * Next, print out X (Y in SDPA notation) */ for (blk=1; blk<=X.nblocks; blk++) { switch (X.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=X.blocks[blk].blocksize; i++) { ent=X.blocks[blk].data.vec[i]; if (ent != 0.0) fprintf(fid,"2 %d %d %d %.18e \n",blk,i,i,ent); }; break; case MATRIX: for (i=1; i<=X.blocks[blk].blocksize; i++) for (j=i; j<=X.blocks[blk].blocksize; j++) { ent=X.blocks[blk].data.mat[ijtok(i,j,X.blocks[blk].blocksize)]; if (ent != 0.0) fprintf(fid,"2 %d %d %d %.18e \n",blk,i,j,ent); }; break; case PACKEDMATRIX: default: printf("writesol Invalid Block Type!\n"); exit(12); }; }; /* * Close up and quit. */ fclose(fid); return(0); } Rcsdp/src/Csdp/lib/writeprob.c0000644000175100001440000000441514345225534015765 0ustar hornikusers/* Write out a problem in SDPA format. */ #include #include #include "declarations.h" int write_prob(char *fname, int n, int k, struct blockmatrix C, double *a, struct constraintmatrix *constraints) { FILE *fid; int i; int j; int blk; struct sparseblock *p; /* * Open up the file for output. */ fid=fopen(fname,"w"); if (fid == (FILE *) NULL) { printf("Couldn't open problem file for writing! \n"); exit(11); }; /* * Write out the basic problem size info. */ fprintf(fid,"%d \n",k); fprintf(fid,"%d \n",C.nblocks); for (i=1; i<=C.nblocks; i++) { switch (C.blocks[i].blockcategory) { case DIAG: fprintf(fid,"%d ",-C.blocks[i].blocksize); break; case MATRIX: fprintf(fid,"%d ",C.blocks[i].blocksize); break; default: printf("Illegal block type!\n"); exit(12); }; }; fprintf(fid,"\n"); /* * Write out the a vector. (c in SDPA terminology) */ for (i=1; i<=k; i++) fprintf(fid,"%.18e ",a[i]); fprintf(fid,"\n"); /* * Write out the C matrix (F0 in SDPA) */ for (blk=1; blk<=C.nblocks; blk++) { switch (C.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=C.blocks[blk].blocksize; i++) { if (C.blocks[blk].data.vec[i] != 0.0) fprintf(fid,"0 %d %d %d %.18e \n",blk,i,i,C.blocks[blk].data.vec[i]); }; break; case MATRIX: for (i=1; i<=C.blocks[blk].blocksize; i++) for (j=i; j<=C.blocks[blk].blocksize; j++) { if (C.blocks[blk].data.mat[ijtok(i,j,C.blocks[blk].blocksize)] != 0.0 ) fprintf(fid,"0 %d %d %d %.18e \n",blk,i,j,C.blocks[blk].data.mat[ijtok(i,j,C.blocks[blk].blocksize)]); }; break; default: printf("Illegal block type!\n"); exit(12); }; }; /* * Now, start writing out the A_i (F_k in SDPA notation) */ for (i=1; i<=k; i++) { p=constraints[i].blocks; while (p != NULL) { for (j=1; j<=p->numentries; j++) { fprintf(fid,"%d %d %d %d %.18e \n",i,p->blocknum, p->iindices[j], p->jindices[j], p->entries[j]); }; p=p->next; }; }; /* * Close up the file and get out. */ fclose(fid); return(0); } Rcsdp/src/Csdp/lib/zero_mat.c0000644000175100001440000000150214345234737015567 0ustar hornikusers/* Zero out a block matrix. */ #include #include #include "declarations.h" void zero_mat(struct blockmatrix A) { int i,j; int blk; /* * Loop through the blocks, zeroing one at a time. */ for (blk=1; blk<=A.nblocks; blk++) { /* * Zero out block i. */ switch (A.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=A.blocks[blk].blocksize; i++) { A.blocks[blk].data.vec[i]=0.0; }; break; case MATRIX: #pragma omp parallel for schedule(dynamic,64) default(none) shared(A,blk) private(j,i) for (j=1; j<=A.blocks[blk].blocksize; j++) for (i=1; i<=A.blocks[blk].blocksize; i++) A.blocks[blk].data.mat[ijtok(i,j,A.blocks[blk].blocksize)]=0.0; break; default: printf("Illegal block type \n"); exit(12); }; }; } Rcsdp/src/Csdp/lib/mat_mult.c0000644000175100001440000000555314345226305015573 0ustar hornikusers/* * Compute C=scale1*A*B+scale2*C. * Note that C must consist of dense matrix and vector blocks- no sparse * blocks or eye's or other special cases. * * A and B can have blocks of all supported types. Unsupported types * generate exit(1). * * It is assumed that all three matrices are of compatible block strucutre. * * We use dgemm to do the actual work on normal dense blocks. * */ #include #include #include "declarations.h" void mat_mult(double scale1, double scale2, struct blockmatrix A, struct blockmatrix B, struct blockmatrix C) { int blk,i,n; double *ap; double *bp; double *cp; /* * In theory, the BLAS ensures that if scale2=0, then C will not be * accessed before being written to. In practice, this is not always * true, so we initilize C to zeros for safety. */ if (scale2 == 0.0) zero_mat(C); /* * Work through the blocks one at a time. */ for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: if (scale2 != 0.0) { for (i=1; i<=A.blocks[blk].blocksize; i++) { C.blocks[blk].data.vec[i]=scale1*A.blocks[blk].data.vec[i] *B.blocks[blk].data.vec[i] +scale2*C.blocks[blk].data.vec[i]; }; } else { for (i=1; i<=A.blocks[blk].blocksize; i++) { C.blocks[blk].data.vec[i]=scale1*A.blocks[blk].data.vec[i] *B.blocks[blk].data.vec[i]; }; }; break; case MATRIX: /* * Call dgemm to do the matrix multiplication. */ n=A.blocks[blk].blocksize; ap=A.blocks[blk].data.mat; bp=B.blocks[blk].data.mat; cp=C.blocks[blk].data.mat; mat_mult_raw(n,scale1,scale2,ap,bp,cp); break; default: printf("mat_mult illegal block type!\n"); exit(12); }; }; } void mat_mult_raw(int n, double scale1, double scale2, double *ap, double *bp, double *cp) { #ifdef NOUNDERBLAS #ifdef CAPSBLAS DGEMM("N","N",&n,&n,&n,&scale1,ap,&n,bp,&n,&scale2,cp,&n); #else dgemm("N","N",&n,&n,&n,&scale1,ap,&n,bp,&n,&scale2,cp,&n); #endif #else #ifdef CAPSBLAS DGEMM_("N","N",&n,&n,&n,&scale1,ap,&n,bp,&n,&scale2,cp,&n); #else dgemm_("N","N",&n,&n,&n,&scale1,ap,&n,bp,&n,&scale2,cp,&n); #endif #endif } #ifdef USEATLAS void mat_mult_rawatlas(int n, double scale1, double scale2, double *ap, double *bp, double *cp) { enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102 }; enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113, AtlasConj=114}; void ATL_dgemm(enum CBLAS_TRANSPOSE transa,enum CBLAS_TRANSPOSE transb, int m,int n, int k,double scale1,double *ap,int l,double *bp, int p,double scale2,double *cp,int q); ATL_dgemm(CblasNoTrans,CblasNoTrans,n,n,n,scale1,ap,n,bp,n,scale2,cp,n); } #endif Rcsdp/src/Csdp/lib/sdp.c0000644000175100001440000014512014345222432014527 0ustar hornikusers/* Solve a semidefinite programming problem using the algorithm of Helmberg, Rendl, Vanderbei, and Wolkowicz. Note: This version of the code uses predictor correct steps. Usage: Return codes: 0 Success. 1 Success. The problem is primal infeasibile, and we have a certificate. 2 Success. The problem is dual infeasible, and we have a certificate. 3. Partial Success. Didn't reach full accuracy. 4 Failure: Maximum iterations reached. 5 Failure: Stuck at edge of primal feasibility. 6 Failure: Stuck at edge of dual feasibility. 7 Failure: Lack of progress 8 Failure: X, Z, or O was singular. 9 Failure: Detected NaN or Inf values. Notes on data storage: All "2-d" arrays are stored in Fortran style, column major order. macros in index.h are used to handle indexing into C 1-d vectors. All "1-d" arrays are stored in C vectors, with the first element of the vector (index 0) unused. We always start indexing in both one and two dimensional arrays with 1, ala Fortran. This makes the C code somewhat clearer, but requires us to pass v+1 into a Fortran subroutine instead of just passing v. */ #include #include #include #include "declarations.h" #ifdef USEGETTIME /* * Stuff for keeping track of time. */ #include /* definition of NULL */ #include /* definition of timeval struct and protyping of gettime ofday */ double opotime=0.0; double factortime=0.0; double totaltime=0.0; double othertime=0.0; double othertime1=0.0; double othertime2=0.0; double othertime3=0.0; struct timeval tp; double t1=0.0; double t2=0.0; double starttime=0.0; double endtime=0.0; #endif int sdp(int n, int k, struct blockmatrix C, double *a, double constant_offset, struct constraintmatrix *constraints, struct sparseblock **byblocks, struct constraintmatrix fill, struct blockmatrix X, double *y, struct blockmatrix Z, struct blockmatrix cholxinv, struct blockmatrix cholzinv, double *pobj, double *dobj, struct blockmatrix work1, struct blockmatrix work2, struct blockmatrix work3, double *workvec1, double *workvec2, double *workvec3, double *workvec4, double *workvec5, double *workvec6, double *workvec7, double *workvec8, double *diagO, struct blockmatrix bestx, double *besty, struct blockmatrix bestz, struct blockmatrix Zi, double *O, double *rhs, struct blockmatrix dZ, struct blockmatrix dX, double *dy, double *dy1, double *Fp, int printlevel, struct paramstruc parameters) { double gap; double relgap; double mu=1.0e30; double muplus; double oldmu; double muk; double gamma; double alphap,alphap1; double alphad,alphad1; double scale1; double scale2; double nrmx; double relpinfeas=1.0e10; double reldinfeas=1.0e10; double newrelpinfeas; double newreldinfeas; double limrelpinfeas; double bestrelpinfeas; double limreldinfeas; double bestreldinfeas; double maxrelinfeas=1.0e100; double oldmaxrelinfeas=1.0e100; double newpobj; double newdobj; int iter=0; int m; int ret; int i; int j; int info; int ldam; int retries=0; int retcode=0; double bestmeas; int lastimprove=0; double diagnrm; double diagfact=0.0; double diagadd; double ent; /* * Stuff for instrumentation of iterative refinement. */ double relerr1; double relerr2=0.0; int refinements; double besterr; double relerr; /* * Stuff for iterative refinements. */ int lastimproverefinement; double mindiag; /* * */ int ispfeasprob; int isdfeasprob; double normC; double norma; /* * Amount by which to perturb */ double perturbfac; /* * Sticky flags for primal and dual feasibility. */ int probpfeas=0; int probdfeas=0; /* * * */ double pinfeasmeas; double dinfeasmeas; /* * Stuff for adjusting the step fraction. */ double mystepfrac; double minalpha; /* * */ double newalphap; /* * Stuff for keeping track of best solutions. */ #define BASIZE 100 double bestarray[BASIZE+1]; /* * Used in checking whether the primal-dual affine step gives us a new * best solution. */ double affgap,affpobj,affdobj,affrelgap,affrelpinfeas,affreldinfeas; /* * Precompute norms of a and C, so that we don't keep doing this * again and again. * */ norma=norm2(k,a+1); normC=Fnorm(C); if (parameters.perturbobj>0) /* perturbfac=parameters.perturbobj*1.0e-6*normC/sqrt(1.0*n); */ perturbfac=1.0e-6*normC/sqrt(1.0*n); else perturbfac=0.0; /* * Determine whether or not this is a feasibility problem. * */ if (normC==0.0) { if (printlevel >= 1) printf("This is a pure primal feasibility problem.\n"); ispfeasprob=1; } else ispfeasprob=0; if (norma==0.0) { if (printlevel >= 1) printf("This is a pure dual feasibility problem.\n"); isdfeasprob=1; } else isdfeasprob=0; /* * For historical reasons, we use m for the total number of constraints. * In this version of the code, k is also the number of constraints. */ m=k; /* * Work out the leading dimension for the array. Note that we may not * want to use k itself, for cache issues. */ if ((k % 2) == 0) ldam=k+1; else ldam=k; /* * Compute Cholesky factors of X and Z. */ copy_mat(X,work1); ret=chol(work1); /* * If the matrix was singular, then just return with an error. */ if (ret != 0) { if (printlevel >= 1) printf("X was singular!\n"); retcode=8; goto RETURNBEST; }; chol_inv(work1,work2); store_packed(work2,cholxinv); copy_mat(Z,work1); ret=chol(work1); /* * If the matrix was singular, then just return with an error. */ if (ret != 0) { if (printlevel >= 1) printf("Z was singular!\n"); retcode=8; goto RETURNBEST; }; chol_inv(work1,work2); store_packed(work2,cholzinv); /* Compute Zi. */ copy_mat(work2,work1); trans(work1); scale1=1.0; scale2=0.0; mat_mult(scale1,scale2,work2,work1,Zi); if (printlevel >= 4) printf("Fnorm of Zi is %e \n",Fnorm(Zi)); /* Compute primal and dual objective values. */ *pobj=calc_pobj(C,X,constant_offset); *dobj=calc_dobj(k,a,y,constant_offset); if (parameters.usexzgap==0) { gap=*dobj-*pobj; if (gap < 0.0) gap=0.0; relgap=gap/(1.0+fabs(*dobj)+fabs(*pobj)); } else { gap=trace_prod(X,Z); relgap=gap/(1.0+fabs(*dobj)+fabs(*pobj)); }; if (printlevel >= 3) { printf("constant offset is %e \n",constant_offset); printf("Fnorm of X is %e \n",Fnorm(X)); printf("Fnorm of C is %e \n",normC); }; if (printlevel >= 4) { printf("pobj is %e \n",*pobj); printf("dobj is %e \n",*dobj); printf("gap is %e \n",gap); }; relpinfeas=pinfeas(k,constraints,X,a,workvec1); bestrelpinfeas=relpinfeas; reldinfeas=dinfeas(k,C,constraints,y,Z,work2); bestreldinfeas=reldinfeas; if (relpinfeas < parameters.axtol ) probpfeas=1; if (reldinfeas < parameters.atytol) probdfeas=1; oldmaxrelinfeas=maxrelinfeas; if (relpinfeas > reldinfeas) { maxrelinfeas=relpinfeas; } else { maxrelinfeas=reldinfeas; }; /* * Record this solution as the best solution. */ bestmeas=1.0e100; store_packed(X,bestx); store_packed(Z,bestz); for (i=1; i<=k; i++) besty[i]=y[i]; /* Initialize the big loop. */ alphap=0.0; alphad=0.0; /* Print out some status information. */ if (printlevel >= 1) { printf("Iter: %2d Ap: %.2e Pobj: % .7e Ad: %.2e Dobj: % .7e \n",iter,alphap,*pobj,alphad,*dobj); fflush(stdout); }; while ((relgap > parameters.objtol) || (relpinfeas > parameters.axtol) || (reldinfeas > parameters.atytol)) { /* * Call the user exit routine, and let the user stop the process * if he wants to. */ if (user_exit(n,k,C,a,*dobj,*pobj,constant_offset,constraints, X,y,Z,parameters) == 1) { return(0); } bestarray[iter % BASIZE]=bestmeas; /* * Compute the stepfrac to be used for this iteration. */ if (iter > 1) { if (alphap > alphad) minalpha=alphad; else minalpha=alphap; } else { minalpha=1.0; }; mystepfrac=parameters.minstepfrac+minalpha*(parameters.maxstepfrac-parameters.minstepfrac); if (printlevel >= 3) printf("mystepfrac is %e \n",mystepfrac); /* * Print out information on primal/dual feasibility. */ if (printlevel >= 2) { printf("Relative primal infeasibility is %.7e \n",relpinfeas); printf("Relative dual infeasibility: %.7e \n",reldinfeas); printf("Relative duality gap is %.7e \n",relgap); printf("XZ relative duality gap is %.7e \n",trace_prod(X,Z)/(1+fabs(*dobj))); }; /* * If this is a feasibility problem, and we've got feasibility, * then we're done! */ if ((ispfeasprob==1) && (relpinfeas < parameters.axtol)) { if (printlevel >= 3) printf("Got primal feasibility, so stopping.\n"); for (i=1; i<=k; i++) y[i]=0.0; alphad=parameters.atytol/(sqrt(n*1.0)*200); make_i(work1); if (alphad*trace_prod(X,work1) > parameters.objtol) alphad=0.005*parameters.objtol/trace_prod(X,work1); zero_mat(work2); addscaledmat(work2,alphad,work1,Z); relpinfeas=pinfeas(k,constraints,X,a,workvec1); if (relpinfeas < bestrelpinfeas) bestrelpinfeas=relpinfeas; reldinfeas=dinfeas(k,C,constraints,y,Z,work2); if (reldinfeas < bestreldinfeas) bestreldinfeas=reldinfeas; *pobj=calc_pobj(C,X,constant_offset); *dobj=calc_dobj(k,a,y,constant_offset); if (parameters.usexzgap==0) { gap=*dobj-*pobj; if (gap < 0.0) gap=0.0; relgap=gap/(1.0+fabs(*dobj)+fabs(*pobj)); } else { gap=trace_prod(X,Z); if (gap < 0.0) gap=0.0; relgap=gap/(1.0+fabs(*dobj)+fabs(*pobj)); }; bestmeas=relpinfeas/parameters.axtol; store_packed(X,bestx); store_packed(Z,bestz); for (i=1; i<=k; i++) besty[i]=y[i]; retcode=0; goto RETURNBEST; }; if ((isdfeasprob==1) && (reldinfeas < parameters.atytol)) { if (printlevel >= 3) printf("Got dual feasibility, so stopping.\n"); make_i(work1); zero_mat(work2); op_a(k,constraints,work1,workvec1); alphap=parameters.atytol/(200.0*norm2(k,workvec1+1)); if (alphap*trace_prod(work1,Z) > parameters.objtol) alphap=0.005*parameters.objtol/trace_prod(work1,Z); addscaledmat(work2,alphap,work1,X); relpinfeas=pinfeas(k,constraints,X,a,workvec1); if (relpinfeas < bestrelpinfeas) bestrelpinfeas=relpinfeas; reldinfeas=dinfeas(k,C,constraints,y,Z,work2); if (reldinfeas < bestreldinfeas) bestreldinfeas=reldinfeas; *pobj=calc_pobj(C,X,constant_offset); *dobj=calc_dobj(k,a,y,constant_offset); if (parameters.usexzgap==0) { gap=*dobj-*pobj; if (gap < 0.0) gap=0.0; relgap=gap/(1.0+fabs(*dobj)+fabs(*pobj)); } else { gap=trace_prod(X,Z); if (gap < 0.0) gap=0.0; relgap=gap/(1.0+fabs(*dobj)+fabs(*pobj)); }; bestmeas=reldinfeas/parameters.atytol; store_packed(X,bestx); store_packed(Z,bestz); for (i=1; i<=k; i++) besty[i]=y[i]; if (printlevel >= 3) printf("New best solution, %e \n",bestmeas); retcode=0; goto RETURNBEST; }; /* * Check for primal or dual infeasibility. */ op_at(k,y,constraints,work1); addscaledmat(work1,-1.0,Z,work1); pinfeasmeas=-(*dobj)/Fnorm(work1); if (printlevel >= 2) printf("-a'*y/||A'(y)-Z|| is %e \n",pinfeasmeas); if ((probpfeas==0) && (pinfeasmeas > parameters.pinftol)) { if (printlevel >= 1) printf("Declaring primal infeasibility.\n"); for (i=1; i<=k; i++) y[i]=-y[i]/(*dobj); zero_mat(work1); addscaledmat(work1,-1.0/(*dobj),Z,work1); copy_mat(work1,Z); retcode=1; goto RETURNCERT; }; op_a(k,constraints,X,workvec1); dinfeasmeas=trace_prod(C,X)/norm2(k,workvec1+1); if (printlevel >= 2) printf("/||A(X)||=%e\n",dinfeasmeas); if ((probdfeas==0) && (dinfeasmeas>parameters.dinftol)) { if (printlevel >= 1) printf("Declaring dual infeasibility.\n"); zero_mat(work1); addscaledmat(work1,1.0/trace_prod(C,X),X,work1); copy_mat(work1,X); retcode=2; goto RETURNCERT; }; /* * Print out the norm(X) for debugging purposes. */ if (printlevel >= 3) { nrmx=Fnorm(X); printf("Fnorm of X is %e \n",nrmx); }; /* Now, compute the system matrix. */ #ifdef USEGETTIME gettimeofday(&tp,NULL); t1=(double)tp.tv_sec+(1.0e-6)*tp.tv_usec; #endif op_o(k,constraints,byblocks,Zi,X,O,work1,work2); #ifdef USEGETTIME gettimeofday(&tp,NULL); t2=(double)tp.tv_sec+(1.0e-6)*tp.tv_usec; opotime=opotime+t2-t1; #endif /* * Print out the actual density of Z and X. */ if ((iter==5) && (printlevel >= 3)) { printf("Actual density of O %e\n",actnnz(k,ldam,O)/(1.0*k*k)); for (j=1; j<=X.nblocks; j++) { if (X.blocks[j].blockcategory==MATRIX) { printf("density X block %d, %e \n",j,actnnz(X.blocks[j].blocksize, X.blocks[j].blocksize, X.blocks[j].data.mat)/ (1.0*X.blocks[j].blocksize*X.blocks[j].blocksize)); printf("density Z block %d, %e \n",j,actnnz(Z.blocks[j].blocksize, Z.blocks[j].blocksize, Z.blocks[j].data.mat)/ (1.0*Z.blocks[j].blocksize*Z.blocks[j].blocksize)); printf("bandwidth Z block %d, %d/%d \n",j,bandwidth(Z.blocks[j].blocksize,Z.blocks[j].blocksize,Z.blocks[j].data.mat),Z.blocks[j].blocksize); }; }; }; /* Save a copy of O in the lower diagonal for later use. */ for (i=1; i<=k-1; i++) for (j=i; j<=k; j++) O[ijtok(j,i,ldam)]=O[ijtok(i,j,ldam)]; for (i=1; i<=k; i++) diagO[i]=O[ijtok(i,i,ldam)]; mindiag=1.0e30; for (i=1; i<=k; i++) { if (diagO[i] < mindiag) { mindiag=diagO[i]; }; }; /* This is where we come if factorization failed or the system was so badly conditioned that we didn't get a usable solution. */ diagnrm=0.0; for (i=1; i<=k; i++) { ent=diagO[i]; diagnrm = diagnrm + ent*ent; }; diagnrm=sqrt(diagnrm); RETRYFACTOR: /* Now, let's make sure that O isn't singular. */ diagadd=1.0e-17*diagfact*diagnrm/sqrt(k*1.0); while ((diagadd + mindiag) <= 0.0) { retries++; if (diagfact==0.0) { diagfact=0.1; diagadd=1.0e-17*diagfact*diagnrm/sqrt(k*1.0); } else { diagfact=diagfact*10.0; diagadd=diagadd*10.0; }; }; if (printlevel >= 3) printf("diagnrm is %e, adding diagadd %e \n",diagnrm,diagadd); for (i=1; i<=k; i++) O[ijtok(i,i,ldam)] += diagadd; /* * Scale the O matrix. */ for (i=1; i<=k; i++) workvec8[i]=1.0/sqrt(O[ijtok(i,i,ldam)]); for (i=1; i<=k; i++) { if (workvec8[i] > 1.0e30) workvec8[i]=1.0e30; }; #pragma omp parallel for schedule(dynamic,64) default(none) shared(O,ldam,k,workvec8) private(i,j) for (j=1; j<=k; j++) for (i=1; i<=j; i++) O[ijtok(i,j,ldam)]=O[ijtok(i,j,ldam)]*(workvec8[i]*workvec8[j]); /* Next, compute the cholesky factorization of the system matrix. */ #ifdef USEGETTIME gettimeofday(&tp,NULL); t1=(double)tp.tv_sec+(1.0e-6)*tp.tv_usec; #endif #ifdef NOUNDERLAPACK #ifdef CAPSLAPACK DPOTRF("U",&m,O,&ldam,&info); #else dpotrf("U",&m,O,&ldam,&info); #endif #else #ifdef CAPSLAPACK DPOTRF_("U",&m,O,&ldam,&info); #else dpotrf_("U",&m,O,&ldam,&info); #endif #endif #ifdef USEGETTIME gettimeofday(&tp,NULL); t2=(double)tp.tv_sec+(1.0e-6)*tp.tv_usec; factortime=factortime+t2-t1; #endif if (info != 0) { if (printlevel >= 3) printf("Factorization of the system matrix failed!\n"); if (retries < 15) { if (retries == 0) diagfact=0.1; retries=retries+1; diagfact=diagfact*10.0; #pragma omp parallel for schedule(dynamic,64) private(i,j) shared(O,k,ldam) for (i=1; i<=k-1; i++) for (j=i; j<=k; j++) O[ijtok(i,j,ldam)]=O[ijtok(j,i,ldam)]; for (i=1; i<=k; i++) O[ijtok(i,i,ldam)]=diagO[i]; goto RETRYFACTOR; } else { if (printlevel >= 1) printf("Factorization of the system matrix failed, giving up. \n"); /* * Tighten up the solution as much as possible. */ retcode=8; goto RETURNBEST; }; }; /* Compute the rhs vector. */ for (i=1; i<=k; i++) rhs[i]=-a[i]; /* * Add in the corrections for Fd. */ /* his section is where Fd is computed and put into The rhs. To save storage, work2 is used instead of a variable named Fd. dX will be used as a work variable where needed in place of old work2 usage. */ op_at(k,y,constraints,work1); addscaledmat(Z,1.0,C,work2); if ((bestmeas > 1.0e3) && (parameters.perturbobj>0)) { if (printlevel >= 3) printf("Perturbing C.\n"); make_i(work3); addscaledmat(work2,-perturbfac,work3,work2); }; if ((bestmeas < 1.0e3) && (parameters.perturbobj>0)) { if (printlevel >= 3) printf("Perturbing C.\n"); make_i(work3); addscaledmat(work2,-perturbfac*pow(bestmeas/1000.0,1.5),work3,work2); }; addscaledmat(work2,-1.0,work1,work2); scale1=1.0; scale2=0.0; mat_multspb(scale1,scale2,Zi,work2,work3,fill); mat_multspc(scale1,scale2,work3,X,dX,fill); op_a(k,constraints,dX,workvec1); for (i=1; i<=k; i++) rhs[i] = rhs[i]+workvec1[i]; for (i=1; i<=k; i++) workvec1[i]=rhs[i]; if (printlevel >=3) { printf("Fnorm of Fd is %e \n",Fnorm(work2)); printf("Norm of rhs is %e \n",norm2(m,rhs+1)); }; /* Solve the system of equations for dy. */ /* * First, scale */ for (i=1; i<=k; i++) workvec1[i]=workvec1[i]*workvec8[i]; info=solvesys(k,ldam,O,workvec1); for (i=1; i<=k; i++) workvec1[i]=workvec1[i]*workvec8[i]; if (info != 0) { if (printlevel >= 1) printf("Solving for dy failed! \n"); retcode=8; goto RETURNBEST; }; /* * Do iterative refinement. */ if ((iter>1) && (relerr2 > parameters.axtol) && (parameters.fastmode==0)) { op_at(k,workvec1,constraints,work1); mat_multspa(1.0,0.0,work1,X,dX,fill); mat_multspc(1.0,0.0,Zi,dX,work1,fill); op_a(k,constraints,work1,workvec2); for (i=1; i<=k; i++) workvec2[i]=rhs[i]-workvec2[i]; relerr=norm2(k,workvec2+1)/(1.0+norm2(k,rhs+1)); besterr=relerr; for (i=1; i<=k; i++) workvec4[i]=workvec1[i]; if (printlevel >= 3) { printf("refinement: Before relative error in Ody=r is %e \n",besterr); fflush(stdout); }; refinements=0; lastimproverefinement=0; while ((refinements < 20) && (refinements-lastimproverefinement < 3) && (besterr > 1.0e-14)) { refinements++; for (i=1; i<=k; i++) workvec3[i]=workvec2[i]*workvec8[i]; info=solvesys(k,ldam,O,workvec3); for (i=1; i<=k; i++) workvec3[i]=workvec3[i]*workvec8[i]; for (i=1; i<=k; i++) workvec1[i]=workvec1[i]+workvec3[i]; op_at(k,workvec1,constraints,work1); mat_multspa(1.0,0.0,work1,X,dX,fill); mat_multspc(1.0,0.0,Zi,dX,work1,fill); op_a(k,constraints,work1,workvec2); for (i=1; i<=k; i++) workvec2[i]=rhs[i]-workvec2[i]; relerr=norm2(k,workvec2+1)/(1.0+norm2(k,rhs+1)); if (relerr < besterr) { lastimproverefinement=refinements; besterr=relerr; for (i=1; i<=k; i++) workvec4[i]=workvec1[i]; }; if (printlevel >= 4) { printf("refinement: During relative error in Ody=r is %e \n",besterr); fflush(stdout); }; }; if (printlevel >= 3) printf("refinement: After relative error in Ody=r is %e, %d \n",besterr,lastimproverefinement); for (i=1; i<=k; i++) workvec1[i]=workvec4[i]; }; /* * Extract dy. */ for (i=1; i<=k; i++) dy[i]=workvec1[i]; if (printlevel >= 3) printf("Norm of dy is %e \n",norm2(k,dy+1)); /* Compute dZ */ op_at(k,dy,constraints,dZ); /* * Note: At this point, dZ only has A'(dy), not -Fd */ /* Compute Zi*A'(dy), and save it in a temp variable for later use. */ scale1=1.0; scale2=0.0; mat_multspb(scale1,scale2,Zi,dZ,work1,fill); if (printlevel >= 4) printf("Fnorm of work1 is %e \n",Fnorm(work1)); /* * Now, update dZ to include -Fd */ if (printlevel >= 3) { printf("Before Fd, Fnorm of dZ is %e \n",Fnorm(dZ)); fflush(stdout); }; addscaledmat(dZ,-1.0,work2,dZ); if (printlevel >= 3) { printf("After Fd, Fnorm of dZ is %e \n",Fnorm(dZ)); fflush(stdout); }; /* * Now, we've got dZ in dZ, and Zi*A'(dy) in work1, * and Zi*Fd in work3 */ /* Compute dX=-X+Zi*Fd*X-temp*X; First, put I-Zi*Fd+work1 in workn2. Then multiply -work2*X, and put the result in dX. */ make_i(work2); addscaledmat(work2,-1.0,work3,work2); addscaledmat(work2,1.0,work1,work2); scale1=-1.0; scale2=0.0; mat_mult(scale1,scale2,work2,X,dX); sym_mat(dX); if (printlevel >= 3) { printf("Fnorm of dX is %e \n",Fnorm(dX)); printf("Fnorm of dZ is %e \n",Fnorm(dZ)); fflush(stdout); }; /* * Next, determine mu. */ if (relpinfeas < parameters.axtol) alphap1=linesearch(n,dX,work1,work2,work3,cholxinv,workvec4, workvec5,workvec6,mystepfrac,1.0, printlevel); else alphap1=linesearch(n,dX,work1,work2,work3,cholxinv,workvec4, workvec5,workvec6,mystepfrac,1.0, printlevel); if (reldinfeas < parameters.atytol) alphad1=linesearch(n,dZ,work1,work2,work3,cholzinv,workvec4, workvec5,workvec6,mystepfrac,1.0, printlevel); else alphad1=linesearch(n,dZ,work1,work2,work3,cholzinv,workvec4, workvec5,workvec6,mystepfrac,1.0, printlevel); oldmu=mu; /* Here, work1 holds X+alphap1*dX, work2=Z+alphad1*dZ */ addscaledmat(X,alphap1,dX,work1); addscaledmat(Z,alphad1,dZ,work2); for (i=1; i<=k; i++) workvec1[i]=y[i]+alphad1*dy[i]; /* * Check to see whether this affine solution is the best yet. * The test is somewhat expensive, so don't do it unless * we're close to done. */ if ((bestmeas <1.0e4) && (parameters.affine==0)) { /* * Verify that the new X and Z are Cholesky factorizable. */ copy_mat(work1,work3); ret=chol(work3); while (ret != 0) { if (printlevel >=3) printf("Affine eigsearch missed: adjusting alphap1\n"); alphap1=alphap1*0.9; addscaledmat(X,alphap1,dX,work1); copy_mat(work1,work3); ret=chol(work3); }; copy_mat(work2,work3); ret=chol(work3); while (ret != 0) { if (printlevel >=3) printf("Affine eigsearch missed: adjusting alphad1\n"); alphad1=alphad1*0.9; addscaledmat(Z,alphad1,dZ,work2); for (i=1; i<=k; i++) workvec1[i]=y[i]+alphad1*dy[i]; copy_mat(work2,work3); ret=chol(work3); }; /* * Now, check the quality of this solution. */ affpobj=calc_pobj(C,work1,constant_offset); affdobj=calc_dobj(k,a,workvec1,constant_offset); /* * run user exit to check if the affine solution is good enough */ if (user_exit(n,k,C,a,affdobj,affpobj,constant_offset,constraints, work1,workvec1,work2,parameters) == 1) { *dobj=affdobj; *pobj=affpobj; copy_mat(work1,X); copy_mat(work2,Z); for(i=1; i<=k; i++) y[i]=workvec1[i]; if(printlevel>=3) printf("Affine step good enough, exiting\n"); return(0); }; if (parameters.usexzgap==0) { affgap=affdobj-affpobj; if (affgap < 0) affgap=0.0; affrelgap=affgap/(1.0+fabs(affpobj)+fabs(affdobj)); } else { affgap=trace_prod(work1,work2); if (affgap < 0) affgap=0.0; affrelgap=affgap/(1.0+fabs(affpobj)+fabs(affdobj)); }; affreldinfeas=dinfeas(k,C,constraints,workvec1,work2,work3); affrelpinfeas=pinfeas(k,constraints,work1,a,workvec4); if (printlevel >= 3) { printf("affpobj is %e \n",affpobj); printf("affdobj is %e \n",affdobj); printf("affrelgap is %e \n",affrelgap); printf("affrelpinfeas is %e \n",affrelpinfeas); printf("affreldinfeas is %e \n",affreldinfeas); }; if ((affrelgap/parameters.objtol < bestmeas) && (affrelpinfeas/parameters.axtol bestmeas) bestmeas=affrelpinfeas/parameters.axtol; if (affreldinfeas/parameters.atytol > bestmeas) bestmeas=affreldinfeas/parameters.atytol; store_packed(work1,bestx); store_packed(work2,bestz); for (i=1; i<=k; i++) besty[i]=y[i]+alphad1*dy[i]; if (printlevel >= 3) printf("Affine step: New best solution, %e \n",bestmeas); }; if ((ispfeasprob==1) && (affrelpinfeas/parameters.axtol < bestmeas)) { lastimprove=iter; bestmeas=affrelpinfeas/parameters.axtol; store_packed(work1,bestx); for (i=1; i<=k; i++) besty[i]=0.0; zero_mat(work3); addscaledmat(work3,1.0e-50,work1,work3); store_packed(work3,bestz); if (printlevel >= 3) printf("Affine step: New best solution, %e \n",bestmeas); }; if ((isdfeasprob==1) && (affreldinfeas/parameters.atytol = 3) printf("Affine step: New best solution, %e \n",bestmeas); }; if (bestmeas < 1.0) { if (printlevel >= 3) printf("Finishing with a final affine step.\n"); iter=iter+1; if (printlevel >= 1) printf("Iter: %2d Ap: %.2e Pobj: % .7e Ad: %.2e Dobj: % .7e \n",iter,alphap1,affpobj,alphad1,affdobj); if (printlevel >= 2) printf("Total Iterations: %d \n",iter); store_unpacked(bestx,X); store_unpacked(bestz,Z); for (i=1; i<=k; i++) y[i]=besty[i]; *pobj=calc_pobj(C,X,constant_offset); *dobj=calc_dobj(k,a,y,constant_offset); return(0); }; }; /* * Compute muplus and prepare for the corrector step. */ muplus=trace_prod(work1,work2)/(n); muk=trace_prod(X,Z)/(n); if (muk < 0.0) muk=fabs(muk); if (muplus < 0.0) muplus=muk/2; gamma=(muplus/muk); /* * Pick the new mu as follows: * * If we have been making good progress (alphap > 0.5) and * (alphad>0.5) then use mu=muk*gamma*gamma*min(gamma,0.5); * * If we haven't been making good progress, then just do * mu=muplus. * * Also, make sure that mu is no larger than the old mu. */ if ((relpinfeas < 0.1*parameters.axtol) && (alphad>0.2) && (reldinfeas < 0.1*parameters.atytol) && (alphap>0.2) && (mu > 1.0e-6) && (gamma < 1.0) && (alphap+alphad > 1.0)) { mu=muk*pow(gamma,alphap+alphad); } else { if (muplus < 0.9*muk) mu=muplus; else mu=muk*0.9; }; /* * If we have primal and dual infeasibility in hand, then * make sure that mu is <=muk/2. */ if ((relpinfeas < 0.9*parameters.axtol) && (reldinfeas < 0.9*parameters.atytol) && (mu > muk/2)) mu=muk/2; /* * If we want a primal-dual affine step, then set mu=0.0. */ if (parameters.affine==1) { mu=0.0; if (printlevel >= 3) printf("Taking an affine step because parameters.affine=1\n"); }; /* * Printout some info on mu. */ if (printlevel >= 2) { printf("muk is %e \n",muk); printf("muplus is %e \n",muplus); printf("New mu is %e \n",mu); printf("mu*n = target duality gap is %e \n",mu*n); fflush(stdout); }; /* * Take a moment to figure out how well we're doing on feasibility. */ addscaledmat(X,1.0,dX,work1); op_a(k,constraints,work1,workvec1); for (i=1; i<=k; i++) workvec1[i]=workvec1[i]-a[i]; relerr1=norm2(k,workvec1+1)/(1.0+norma); if (printlevel >= 3) { printf("refinement: Relative error in A(X+dX)=a (Fphat) is %e \n", relerr1); }; /* Now, compute the corrector step. */ /* rhs for the corrector step. */ /* Update Fphat=a-A(X+dX) */ addscaledmat(dX,1.0,X,work1); op_a(k,constraints,work1,Fp); for (i=1; i<=k; i++) Fp[i]=a[i]-Fp[i]; /* The RHS is now A(Zi*Fdhat*X)+A(Zi*(-dZ*dX+mu*I))-Fphat = A(Zi*(Fdhat*X-dZ*dX+mu*I))-Fphat */ make_i(work1); scale1=0.0; scale2=mu; mat_mult(scale1,scale2,work2,work2,work1); scale1=-1.0; scale2=1.0; mat_multspa(scale1,scale2,dZ,dX,work1,fill); scale1=1.0; scale2=0.0; mat_multspc(scale1,scale2,Zi,work1,work2,fill); /* Next, compute op_a of work2, and put the result in rhs. */ op_a(k,constraints,work2,rhs); /* * Finally, subtract off Fphat. */ for (i=1; i<=k; i++) rhs[i]=rhs[i]-Fp[i]; for (i=1; i<=k; i++) workvec1[i]=rhs[i]; /* Solve for dy1. */ for (i=1; i<=k; i++) workvec1[i]=workvec1[i]*workvec8[i]; info=solvesys(k,ldam,O,workvec1); for (i=1; i<=k; i++) workvec1[i]=workvec1[i]*workvec8[i]; if (info != 0) { if (printlevel >= 1) printf("Solving for dy1 failed! \n"); retcode=8; goto RETURNBEST; }; /* * Do iterative refinement. */ if ((iter>1) && (relerr2 > 0.01*parameters.axtol) && (parameters.fastmode==0)) { op_at(k,workvec1,constraints,work1); mat_multspa(1.0,0.0,work1,X,work2,fill); mat_multspc(1.0,0.0,Zi,work2,work3,fill); op_a(k,constraints,work3,workvec2); for (i=1; i<=k; i++) workvec2[i]=rhs[i]-workvec2[i]; relerr=norm2(k,workvec2+1)/(1.0+norm2(k,rhs+1)); besterr=relerr; for (i=1; i<=k; i++) workvec4[i]=workvec1[i]; if (printlevel >= 3) { printf("refinement: Before relative error in Odyhat=r is %e \n",besterr); }; refinements=0; lastimproverefinement=0; while ((refinements < 20) && (refinements-lastimproverefinement < 3) && (besterr > 1.0e-14)) { refinements++; for (i=1; i<=k; i++) workvec3[i]=workvec2[i]*workvec8[i]; info=solvesys(k,ldam,O,workvec3); for (i=1; i<=k; i++) workvec3[i]=workvec3[i]*workvec8[i]; for (i=1; i<=k; i++) workvec1[i]=workvec1[i]+workvec3[i]; op_at(k,workvec1,constraints,work1); mat_multspa(1.0,0.0,work1,X,work2,fill); mat_multspc(1.0,0.0,Zi,work2,work3,fill); op_a(k,constraints,work3,workvec2); for (i=1; i<=k; i++) workvec2[i]=rhs[i]-workvec2[i]; relerr=norm2(k,workvec2+1)/(1.0+norm2(k,rhs+1)); if (relerr < besterr) { lastimproverefinement=refinements; besterr=relerr; for (i=1; i<=k; i++) workvec4[i]=workvec1[i]; }; if (printlevel >= 4) { printf("refinement: During relative error in Ody=r is %e \n",besterr); fflush(stdout); }; }; if (printlevel >= 3) { printf("refinement: After relative error in Odyhat=r is %e,%d \n",besterr,lastimproverefinement); }; for (i=1; i<=k; i++) workvec1[i]=workvec4[i]; }; /* * retrieve dy1. */ for (i=1; i<=k; i++) dy1[i]=workvec1[i]; /* Compute dZ1=A'(dy1). dZ1 is stored in work3. */ op_at(k,dy1,constraints,work3); /* Compute dX1=-Zi*dZ1*X-Zi*dZ*dX+mu*zi; dX1=Zi*(-dZ1*X-dZ*dX+mu*I) for storage sake, dX1 is stored in work2. */ make_i(work1); scale1=-1.0; scale2=mu; mat_multspa(scale1,scale2,dZ,dX,work1,fill); scale1=-1.0; scale2=1.0; mat_multspa(scale1,scale2,work3,X,work1,fill); scale1=1.0; scale2=0.0; mat_mult(scale1,scale2,Zi,work1,work2); sym_mat(work2); addscaledmat(X,1.0,dX,work1); op_a(k,constraints,work1,workvec1); for (i=1; i<=k; i++) workvec1[i]=workvec1[i]-a[i]; relerr2=norm2(k,workvec1+1)/(1.0+norma); if (printlevel >= 3) { printf("refinement: Before dX+dX1 Relative error in A(X+dX)=a is %e \n",relerr2); if (relerr1 < relerr2) printf("refinement: worse\n"); else printf("refinement: better\n"); }; /* Update the predictor step. */ if (printlevel >= 3) { printf("Fnorm of dX1 is %e\n",Fnorm(work2)); printf("Fnorm of dZ1 is %e\n",Fnorm(work3)); }; add_mat(work2,dX); add_mat(work3,dZ); for (i=1; i<=k; i++) dy[i]=dy1[i]+dy[i]; /* * Check A(X+dX)=a. */ addscaledmat(X,1.0,dX,work1); op_a(k,constraints,work1,workvec1); for (i=1; i<=k; i++) workvec1[i]=workvec1[i]-a[i]; relerr2=norm2(k,workvec1+1)/(1.0+norma); if (printlevel >= 3) { printf("refinement: Before adjust dX Relative error in A(X+dX)=a is %e \n",relerr2); if (relerr1 < relerr2) printf("refinement: worse\n"); else printf("refinement: better\n"); }; if (printlevel >= 3) { printf("Fnorm of dX is %e \n",Fnorm(dX)); printf("Fnorm of dZ is %e \n",Fnorm(dZ)); }; /* * Take a moment to figure out how well we're doing on feasibility. */ addscaledmat(X,1.0,dX,work1); op_a(k,constraints,work1,workvec1); for (i=1; i<=k; i++) workvec1[i]=workvec1[i]-a[i]; relerr2=norm2(k,workvec1+1)/(1.0+norma); if (printlevel >= 3) { printf("refinement: After adjust error in A(X+dX)=a is %e \n",relerr2); if (relerr1 < relerr2) printf("refinement: worse\n"); else printf("refinement: better\n"); }; /* Now, we've got the individual steps. Find maximum possible step sizes. */ alphap=linesearch(n,dX,work1,work2,work3,cholxinv,workvec4, workvec5,workvec6,mystepfrac,1.0, printlevel); /* * Compute the objective value of the new solution. */ newpobj=calc_pobj(C,work1,constant_offset); alphad=linesearch(n,dZ,work1,work2,work3,cholzinv,workvec4, workvec5,workvec6,mystepfrac,1.0, printlevel); if (printlevel >= 3) { printf("After linesearches, alphap=%e alphad=%e \n",alphap,alphad); }; for (i=1; i<=k; i++) workvec1[i]=y[i]+alphad*dy[i]; /* * Calculate the prospective new dual objective. */ newdobj=calc_dobj(k,a,workvec1,constant_offset); /* * Check on the feasibility of the new solutions. If they're * worse, and the old solution was feasible, then don't take the * step. */ addscaledmat(X,alphap,dX,work1); newrelpinfeas=pinfeas(k,constraints,work1,a,workvec1); /* * For the primal infeasibility, check the relative gap and the * current primal infeasibility to establish a limit on the * new infeasibility. */ limrelpinfeas=bestrelpinfeas*100; if ((limrelpinfeas >relgap) && (relgap > 0)) limrelpinfeas=relgap; /* * In the early stages, don't worry about limrelpinfeas. */ if ((iter < 10) || (relpinfeas > 0.01) || (dinfeasmeas > 1.0e-3*parameters.dinftol)) limrelpinfeas=relpinfeas*1000; /* * Don't ever ask for more than the required tolerance. */ if (parameters.axtol > limrelpinfeas) limrelpinfeas=parameters.axtol; /* * If we're trying to prove dual infeasibility than don't limit * the step. */ if ((probdfeas==0) && (dinfeasmeas>1.0e4)) limrelpinfeas=1.0e30; /* * Now, make sure that the step keeps us feasible enough. */ if (printlevel >= 3) { printf("newrelpinfeas is %e\n",newrelpinfeas); printf("limrelpinfeas is %e\n",limrelpinfeas); }; i=1; while (newrelpinfeas > limrelpinfeas) { alphap=0.80*alphap; addscaledmat(X,alphap,dX,work1); newrelpinfeas=pinfeas(k,constraints,work1,a,workvec1); newpobj=calc_pobj(C,work1,constant_offset); i=i+1; if (i>20) { if (printlevel >=3) printf("Stuck at edge of primal feasibility.\n"); if (retries < 15) { if (retries == 0) diagfact=0.1; retries=retries+1; diagfact=diagfact*10.0; for (i=1; i<=k-1; i++) for (j=i; j<=k; j++) O[ijtok(i,j,ldam)]=O[ijtok(j,i,ldam)]; for (i=1; i<=k; i++) O[ijtok(i,i,ldam)]=diagO[i]; goto RETRYFACTOR; } else { if (printlevel >= 1) printf("Stuck at edge of primal feasibility, giving up. \n"); /* * Tighten up the solution as much as possible. */ retcode=5; goto RETURNBEST; }; }; }; /* Now make sure that we aren't stepping outside of dual feasibility. */ addscaledmat(Z,alphad,dZ,work1); for (i=1; i<=k; i++) workvec1[i]=y[i]+alphad*dy[i]; newreldinfeas=dinfeas(k,C,constraints,workvec1,work1,work2); limreldinfeas=bestreldinfeas*100; if ((limreldinfeas > relgap) && (relgap > 0)) limreldinfeas=relgap; /* * In the early stages, don't worry about limreldinfeas. * Also don't worry if we're trying to establish primal * infeasibility. */ if ((iter < 10) || (reldinfeas > 0.01) || (pinfeasmeas > 1.0e-3*parameters.pinftol)) limreldinfeas=reldinfeas*1000; /* * Don't ever ask for more than the required tolerance. */ if (parameters.atytol > limreldinfeas) limreldinfeas=parameters.atytol; if (printlevel >= 3) { printf("newreldinfeas is %e\n",newreldinfeas); printf("limreldinfeas is %e\n",limreldinfeas); }; i=1; while (newreldinfeas > limreldinfeas) { alphad=0.80*alphad; addscaledmat(Z,alphad,dZ,work1); for (j=1; j<=k; j++) workvec1[j]=y[j]+alphad*dy[j]; newreldinfeas=dinfeas(k,C,constraints,workvec1,work1, work2); newdobj=calc_dobj(k,a,workvec1,constant_offset); i=i+1; if (i>15) { if (printlevel >=3) printf("Stuck at edge of dual feasibility.\n"); if (retries < 15) { if (retries == 0) diagfact=0.1; retries=retries+1; diagfact=diagfact*10.0; for (i=1; i<=k-1; i++) for (j=i; j<=k; j++) O[ijtok(i,j,ldam)]=O[ijtok(j,i,ldam)]; for (i=1; i<=k; i++) O[ijtok(i,i,ldam)]=diagO[i]; goto RETRYFACTOR; } else { if (printlevel >= 1) printf("Stuck at edge of dual feasibility, giving up. \n"); /* * Tighten up the solution as much as possible. */ retcode=6; goto RETURNBEST; }; }; }; if (printlevel >= 3) { printf("After feas check, alphap=%e alphad=%e \n",alphap,alphad); }; /* * Give up if step lengths are way too small. */ if ((alphap<=parameters.minstepp) || (alphad<=parameters.minstepd)) { if (printlevel >= 2) printf("line search failure in corrector step.\n"); if (retries < 15) { if (retries == 0) diagfact=0.1; retries=retries+1; diagfact=diagfact*10.0; for (i=1; i<=k-1; i++) for (j=i; j<=k; j++) O[ijtok(i,j,ldam)]=O[ijtok(j,i,ldam)]; for (i=1; i<=k; i++) O[ijtok(i,i,ldam)]=diagO[i]; goto RETRYFACTOR; } else { if (printlevel >= 1) printf("Too many line search failures, giving up. \n"); /* * Tighten up the solution as much as possible. */ retcode=9; goto RETURNBEST; }; }; /* * In case alphap changed, recompute these. */ addscaledmat(X,alphap,dX,work1); newpobj=calc_pobj(C,work1,constant_offset); newrelpinfeas=pinfeas(k,constraints,work1,a,workvec1); addscaledmat(Z,alphad,dZ,work1); for (i=1; i<=k; i++) workvec1[i]=y[i]+alphad*dy[i]; newdobj=calc_dobj(k,a,workvec1,constant_offset); newreldinfeas=dinfeas(k,C,constraints,workvec1,work1,work2); /* * Update cholzinv. */ copy_mat(work1,work2); ret=chol(work2); while (ret != 0) { alphad=alphad*0.90; addscaledmat(Z,alphad,dZ,work1); for (i=1; i<=k; i++) workvec1[i]=y[i]+alphad*dy[i]; copy_mat(work1,work2); ret=chol(work2); if (printlevel >=2) printf("eigsearch missed! Adjusting alphad\n"); }; chol_inv(work2,work3); store_packed(work3,cholzinv); /* Compute Zi. */ copy_mat(work3,work1); trans(work1); scale1=1.0; scale2=0.0; mat_mult(scale1,scale2,work3,work1,Zi); if (printlevel >= 4) printf("Fnorm of Zi is %e \n",Fnorm(Zi)); /* * Confirm that X is in fact factorable. If not, reduce * alpha until it is. */ addscaledmat(X,alphap,dX,work1); copy_mat(work1,work2); ret=chol(work2); while (ret != 0) { if (printlevel >=2) printf("eigsearch missed! Adjusting alphap\n"); alphap=alphap*0.90; addscaledmat(X,alphap,dX,work1); copy_mat(work1,work2); ret=chol(work2); }; chol_inv(work2,work3); store_packed(work3,cholxinv); /* * do a line search for feasibility. */ if (relpinfeas > 1.0) { newalphap=alphap; for (i=1; i<=9; i++) { addscaledmat(X,(i*1.0)*alphap/10.0,dX,work1); if (pinfeas(k,constraints,work1,a,workvec1) < newrelpinfeas) { newalphap=i*1.0*alphap/10.0; newrelpinfeas=pinfeas(k,constraints,work1,a,workvec1); }; }; if (newalphap < alphap) { if (printlevel >= 2) printf("Feasibility Adjusting alphap to %e \n",newalphap); alphap=newalphap; }; }; /* *Take the step. */ addscaledmat(X,alphap,dX,X); addscaledmat(Z,alphad,dZ,Z); for (i=1; i<=k; i++) y[i]=y[i]+alphad*dy[i]; /* * Update the objectives. */ newdobj=calc_dobj(k,a,y,constant_offset); newpobj=calc_pobj(C,X,constant_offset); /* Recompute the objective function values. */ *pobj=calc_pobj(C,X,constant_offset); *dobj=calc_dobj(k,a,y,constant_offset); if (parameters.usexzgap==0) { gap=*dobj-*pobj; if (gap < 0.0) gap=0.0; relgap=gap/(1.0+fabs(*dobj)+fabs(*pobj)); } else { gap=trace_prod(X,Z); if (gap < 0.0) gap=0.0; relgap=gap/(1.0+fabs(*dobj)+fabs(*pobj)); }; if (printlevel >= 2) { printf("pobj is %e \n",*pobj); printf("dobj is %e \n",*dobj); printf("gap is %e \n",gap); printf("relgap is %e \n",relgap); }; relpinfeas=pinfeas(k,constraints,X,a,workvec1); reldinfeas=dinfeas(k,C,constraints,y,Z,work2); if (relpinfeas < parameters.axtol ) probpfeas=1; if (reldinfeas < parameters.atytol) probdfeas=1; oldmaxrelinfeas=maxrelinfeas; if (relpinfeas > reldinfeas) { maxrelinfeas=relpinfeas; } else { maxrelinfeas=reldinfeas; }; /* * Make sure that the objective value hasn't gone crazy. * * This was a test with isnan, but isnan isn't ANSI C, so * we use an equivalent that typically works. * */ if ((gap) != (gap)) { retcode=12; goto RETURNBEST; }; /* * This was a test with isinf, but isinf isn't ANSI C, so * we just test for extremely large values. */ if ((gap > 1.0e100) || (gap < -1.0e100)) { retcode=12; goto RETURNBEST; }; /* * if this solution is better than the previous best, then * update our best solution. */ if ((relgap/parameters.objtol < bestmeas) && (relpinfeas/parameters.axtol bestmeas) bestmeas=relpinfeas/parameters.axtol; if (reldinfeas/parameters.atytol > bestmeas) bestmeas=reldinfeas/parameters.atytol; store_packed(X,bestx); store_packed(Z,bestz); for (i=1; i<=k; i++) besty[i]=y[i]; if (printlevel >= 3) printf("New best solution, %e \n",bestmeas); }; if ((ispfeasprob==1) && (relpinfeas/parameters.axtol = 3) printf("New best solution, %e \n",bestmeas); }; if ((isdfeasprob==1) && (reldinfeas/parameters.atytol = 3) printf("New best solution, %e \n",bestmeas); }; /* * If we haven't improved the gap much in 20 iterations, then * give up, because we're not making progress. */ if ((iter > 60) && (bestmeas > 0.5*bestarray[((iter-20) % BASIZE)])) { if (printlevel >= 1) printf("Lack of progress. Giving up!\n"); retcode=7; goto RETURNBEST; }; /* Update counters and display status. */ iter++; if (printlevel >= 1) { printf("Iter: %2d Ap: %.2e Pobj: % .7e Ad: %.2e Dobj: % .7e \n",iter,alphap,*pobj,alphad,*dobj); fflush(stdout); }; /* * If iter gets above maxiter, then exit. */ if (iter >= parameters.maxiter) { if (printlevel >= 1) printf("Maximum iterations reached. \n"); retcode=4; goto RETURNBEST; }; }; /* * Return success. */ retcode=0; RETURNBEST: store_unpacked(bestx,X); store_unpacked(bestz,Z); for (i=1; i<=k; i++) y[i]=besty[i]; if (parameters.usexzgap==0) { *pobj=calc_pobj(C,X,constant_offset); *dobj=calc_dobj(k,a,y,constant_offset); gap=*dobj-*pobj; } else { *pobj=calc_pobj(C,X,constant_offset); *dobj=calc_dobj(k,a,y,constant_offset); gap=trace_prod(X,Z); }; if ((gap < 0.0) && (parameters.usexzgap==0) && (parameters.tweakgap==1) && (ispfeasprob==0) && (isdfeasprob==0)) { tweakgap(n,k,a,constraints,gap,Z,dZ,y,dy,work1,work2,work3,dX, workvec1,workvec2,workvec3,workvec4,printlevel); }; /* Recompute the objective function values. */ *pobj=calc_pobj(C,X,constant_offset); *dobj=calc_dobj(k,a,y,constant_offset); if (parameters.usexzgap==0) { gap=*dobj-*pobj; if (gap < 0.0) gap=0.0; relgap=gap/(1.0+fabs(*dobj)+fabs(*pobj)); } else { gap=trace_prod(X,Z); if (gap < 0.0) gap=0.0; relgap=gap/(1.0+fabs(*dobj)+fabs(*pobj)); }; /* * Recheck the primal and dual infeasibilities and gap. */ relpinfeas=pinfeas(k,constraints,X,a,workvec1); reldinfeas=dinfeas(k,C,constraints,y,Z,work1); if (relpinfeas < parameters.axtol ) probpfeas=1; if (reldinfeas < parameters.atytol) probdfeas=1; if ((relgap < parameters.objtol) && (relpinfeas bestmeas) bestmeas=relpinfeas/parameters.axtol; if ((reldinfeas/parameters.atytol) > bestmeas) bestmeas=reldinfeas/parameters.atytol; if ((bestmeas > 1.0) && (bestmeas < 1000.0)) retcode=3; }; if (ispfeasprob==1) { bestmeas=relpinfeas/parameters.axtol; if ((bestmeas > 1.0) && (bestmeas < 1000.0)) retcode=3; }; if (isdfeasprob==1) { bestmeas=reldinfeas/parameters.atytol; if ((bestmeas > 1.0) && (bestmeas < 1000.0)) retcode=3; }; /* * Come here if we have an infeasible problem and are returning the * certificate of infeasibility. */ RETURNCERT: /* * Print out the total number of iterations. */ if (printlevel >= 2) printf("Total Iterations: %d \n",iter); /* * Now, go ahead and return. */ return(retcode); } Rcsdp/src/Csdp/lib/initparams.c0000644000175100001440000000534014345225067016116 0ustar hornikusers/* * Setup default values of the parameters. */ #include #include "declarations.h" void initparams(struct paramstruc *params, int *pprintlevel) { FILE *paramfile; paramfile=fopen("param.csdp","r"); if (paramfile == NULL) { params->axtol=1.0e-8; params->atytol=1.0e-8; params->objtol=1.0e-8; params->pinftol=1.0e8; params->dinftol=1.0e8; params->maxiter=100; params->minstepfrac=0.90; params->maxstepfrac=0.97; params->minstepp=1.0e-8; params->minstepd=1.0e-8; params->usexzgap=1; params->tweakgap=0; params->affine=0; params->perturbobj=1; params->fastmode=0; *pprintlevel=1; } else { int ret = fscanf(paramfile,"%*[^=]%*c%lf",&(params->axtol)); ret = fscanf(paramfile,"%*[^=]%*c%lf",&(params->atytol)); ret = fscanf(paramfile,"%*[^=]%*c%lf",&(params->objtol)); ret = fscanf(paramfile,"%*[^=]%*c%lf",&(params->pinftol)); ret = fscanf(paramfile,"%*[^=]%*c%lf",&(params->dinftol)); ret = fscanf(paramfile,"%*[^=]%*c%d",&(params->maxiter)); ret = fscanf(paramfile,"%*[^=]%*c%lf",&(params->minstepfrac)); ret = fscanf(paramfile,"%*[^=]%*c%lf",&(params->maxstepfrac)); ret = fscanf(paramfile,"%*[^=]%*c%lf",&(params->minstepp)); ret = fscanf(paramfile,"%*[^=]%*c%lf",&(params->minstepd)); ret = fscanf(paramfile,"%*[^=]%*c%d",&(params->usexzgap)); ret = fscanf(paramfile,"%*[^=]%*c%d",&(params->tweakgap)); ret = fscanf(paramfile,"%*[^=]%*c%d",&(params->affine)); ret = fscanf(paramfile,"%*[^=]%*c%d",pprintlevel); ret = fscanf(paramfile,"%*[^=]%*c%lf",&(params->perturbobj)); ret = fscanf(paramfile,"%*[^=]%*c%d",&(params->fastmode)); fclose(paramfile); }; if (*pprintlevel >= 3) { printf("params->axtol is %e \n",params->axtol); printf("params->atytol is %e \n",params->atytol); printf("params->objtol is %e \n",params->objtol); printf("params->pinftol is %e \n",params->pinftol); printf("params->dinftol is %e \n",params->dinftol); printf("params->maxiter is %d \n",params->maxiter); printf("params->minstepfrac is %e \n",params->minstepfrac); printf("params->maxstepfrac is %e \n",params->maxstepfrac); printf("params->minstepp is %e \n",params->minstepp); printf("params->minstepd is %e \n",params->minstepd); printf("params->usexzgap is %d \n",params->usexzgap); printf("params->tweakgap is %d \n",params->tweakgap); printf("params->affine is %d \n",params->affine); printf("params->printlevel is %d \n",*pprintlevel); printf("params->perturbobj is %e \n",params->perturbobj); printf("params->fastmode is %d \n",params->fastmode); }; } Rcsdp/src/Csdp/lib/copy_mat.c0000644000175100001440000000156714345224263015566 0ustar hornikusers/* Copy a matrix A to a second matrix B in our blocked format. */ #include #include #include "declarations.h" void copy_mat(struct blockmatrix A, struct blockmatrix B) { int blk,i,j; double *p; double *q; for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: p=A.blocks[blk].data.vec; q=B.blocks[blk].data.vec; for (i=1; i<=A.blocks[blk].blocksize; i++) q[i]=p[i]; break; case MATRIX: p=A.blocks[blk].data.mat; q=B.blocks[blk].data.mat; #pragma omp parallel for schedule(dynamic,64) private(i,j) shared(p,q) for (j=1; j<=A.blocks[blk].blocksize; j++) for (i=1; i<=A.blocks[blk].blocksize; i++) q[ijtok(i,j,A.blocks[blk].blocksize)]= p[ijtok(i,j,A.blocks[blk].blocksize)]; break; default: printf("copy_mat illegal block type \n"); exit(12); }; } } Rcsdp/src/Csdp/lib/readsol.c0000644000175100001440000000454414345225235015402 0ustar hornikusers/* Read in a solution in SDPA sparse format. */ #include #include #include "declarations.h" void skip_to_end_of_line(FILE *fid); int read_sol(char *fname, int n, int k, struct blockmatrix C, struct blockmatrix *pX, double **py, struct blockmatrix *pZ) { FILE *fid; int i; int indexi; int indexj; int blkno; int matno; double ent; int ret; /* * Allocate storage. */ alloc_mat(C,pX); alloc_mat(C,pZ); *py=(double *)malloc(sizeof(double)*(k+1)); if (*py == NULL) { printf("Storage allocation failed!\n"); exit(10); }; /* * Open the file for reading. */ fid=fopen(fname,"r"); if (fid == (FILE *) NULL) { printf("Couldn't open solution file for reading. \n"); exit(11); }; /* * Read in y. */ for (i=1; i<=k; i++) { ret=fscanf(fid,"%le",&((*py)[i])); if (ret != 1) { printf("Reading solution failed, while reading y. ret=%d\n",ret); return(1); }; }; skip_to_end_of_line(fid); /* * Initialize X and Z to 0. */ zero_mat(*pX); zero_mat(*pZ); /* * Read in the rest of the data. */ do { ret=fscanf(fid,"%d %d %d %d %le",&matno,&blkno,&indexi,&indexj,&ent); if ((ret != 5) && (ret != EOF)) { printf("Bad line in solution file: %d %d %d %d %e\n", matno,blkno,indexi,indexj,ent); fclose(fid); return(1); }; if (matno == 1) { switch (pZ->blocks[blkno].blockcategory) { case DIAG: pZ->blocks[blkno].data.vec[indexi]=ent; break; case MATRIX: pZ->blocks[blkno].data.mat[ijtok(indexi,indexj,pZ->blocks[blkno].blocksize)]=ent; pZ->blocks[blkno].data.mat[ijtok(indexj,indexi,pZ->blocks[blkno].blocksize)]=ent; break; default: printf("Illegal block type! \n"); exit(12); }; } else { switch (pX->blocks[blkno].blockcategory) { case DIAG: pX->blocks[blkno].data.vec[indexi]=ent; break; case MATRIX: pX->blocks[blkno].data.mat[ijtok(indexi,indexj,pX->blocks[blkno].blocksize)]=ent; pX->blocks[blkno].data.mat[ijtok(indexj,indexi,pX->blocks[blkno].blocksize)]=ent; break; default: printf("Illegal block type! \n"); exit(12); }; }; } while (ret != EOF); fclose(fid); return(0); } Rcsdp/src/Csdp/lib/easysdp.c0000644000175100001440000003155514345226216015423 0ustar hornikusers/* * This is an easy to call version of the sdp routine. It takes as * input a problem (n,k,C,a,constraints,constant_offset), and an * initial solution (X,y,Z), allocates working storage, and calls sdp() * to solve the problem. The solution is returned in X,y,Z,pobj,dobj, and * the return code from sdp is returned as the return value from easy_sdp. * */ #include #include #include #include "declarations.h" int easy_sdp(int n, int k, struct blockmatrix C, double *a, struct constraintmatrix *constraints, double constant_offset, struct blockmatrix *pX, double **py, struct blockmatrix *pZ, double *ppobj, double *pdobj) { int ret; struct constraintmatrix fill; struct paramstruc params; struct blockmatrix work1; struct blockmatrix work2; struct blockmatrix work3; struct blockmatrix bestx; struct blockmatrix bestz; struct blockmatrix Zi; struct blockmatrix dZ; struct blockmatrix dX; struct blockmatrix cholxinv; struct blockmatrix cholzinv; double *workvec1; double *workvec2; double *workvec3; double *workvec4; double *workvec5; double *workvec6; double *workvec7; double *workvec8; double *diagO; double *Fp; double *O; double *dy; double *dy1; double *rhs; double *besty; int printlevel; int ldam; struct sparseblock **byblocks; struct sparseblock *ptr; struct sparseblock *oldptr; int i; int j; int blk; struct sparseblock *p; struct sparseblock *q; struct sparseblock *prev=NULL; double gap; int nnz; /* * Initialize the parameters. */ initparams(¶ms,&printlevel); /* * Allocate working storage */ alloc_mat(C,&work1); alloc_mat(C,&work2); alloc_mat(C,&work3); alloc_mat_packed(C,&bestx); alloc_mat_packed(C,&bestz); alloc_mat_packed(C,&cholxinv); alloc_mat_packed(C,&cholzinv); besty=(double *)malloc(sizeof(double)*(k+1)); if (besty == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; if (n > k) { workvec1=(double *)malloc(sizeof(double)*(n+1)); } else { workvec1=(double *)malloc(sizeof(double)*(k+1)); }; if (workvec1 == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; if (n > k) { workvec2=(double *)malloc(sizeof(double)*(n+1)); } else { workvec2=(double *)malloc(sizeof(double)*(k+1)); }; if (workvec2 == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; if (n > k) { workvec3=(double *)malloc(sizeof(double)*(n+1)); } else { workvec3=(double *)malloc(sizeof(double)*(k+1)); }; if (workvec3 == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; if (n > k) { workvec4=(double *)malloc(sizeof(double)*(n+1)); } else { workvec4=(double *)malloc(sizeof(double)*(k+1)); }; if (workvec4 == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; if (n > k) { workvec5=(double *)malloc(sizeof(double)*(n+1)); } else { workvec5=(double *)malloc(sizeof(double)*(k+1)); }; if (workvec5 == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; if (n > k) { workvec6=(double *)malloc(sizeof(double)*(n+1)); } else { workvec6=(double *)malloc(sizeof(double)*(k+1)); }; if (workvec6 == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; if (n > k) { workvec7=(double *)malloc(sizeof(double)*(n+1)); } else { workvec7=(double *)malloc(sizeof(double)*(k+1)); }; if (workvec7 == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; if (n > k) { workvec8=(double *)malloc(sizeof(double)*(n+1)); } else { workvec8=(double *)malloc(sizeof(double)*(k+1)); }; if (workvec8 == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; if (n > k) { diagO=(double *)malloc(sizeof(double)*(n+1)); } else { diagO=(double *)malloc(sizeof(double)*(k+1)); }; if (diagO == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; rhs=malloc(sizeof(double)*(k+1)); if (rhs == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; dy=malloc(sizeof(double)*(k+1)); if (dy == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; dy1=malloc(sizeof(double)*(k+1)); if (dy1 == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; Fp=malloc(sizeof(double)*(k+1)); if (Fp == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; /* * Work out the leading dimension for the array. Note that we may not * want to use k itself, for cache issues. */ if ((k % 2) == 0) ldam=k+1; else ldam=k; O=malloc(sizeof(double)*ldam*ldam); if (O == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; alloc_mat(C,&Zi); alloc_mat(C,&dZ); alloc_mat(C,&dX); /* * Fill in lots of details in the constraints data structure that haven't * necessarily been done before now. */ /* * Set up the cross links used by op_o * While we're at it, determine which blocks are sparse and dense. */ /* * Next, setup issparse and NULL out all nextbyblock pointers. */ for (i=1; i<=k; i++) { p=constraints[i].blocks; while (p != NULL) { /* * First, set issparse. */ if (((p->numentries) > 0.25*(p->blocksize)) && ((p->numentries) > 15)) { p->issparse=0; } else { p->issparse=1; }; if (C.blocks[p->blocknum].blockcategory == DIAG) p->issparse=1; /* * Setup the cross links. */ p->nextbyblock=NULL; p=p->next; }; }; /* * Now, cross link. */ for (i=1; i<=k; i++) { p=constraints[i].blocks; while (p != NULL) { if (p->nextbyblock == NULL) { blk=p->blocknum; /* * link in the remaining blocks. */ for (j=i+1; j<=k; j++) { q=constraints[j].blocks; while (q != NULL) { if (q->blocknum == p->blocknum) { if (p->nextbyblock == NULL) { p->nextbyblock=q; q->nextbyblock=NULL; prev=q; } else { prev->nextbyblock=q; q->nextbyblock=NULL; prev=q; }; break; }; q=q->next; }; }; }; p=p->next; }; }; /* * If necessary, print out information on sparsity of blocks. */ if (printlevel >= 4) { for (i=1; i<=k; i++) { p=constraints[i].blocks; while (p != NULL) { printf("%d,%d,%d,%d \n",i,p->blocknum,p->issparse,p->numentries); p=p->next; }; }; }; /* * Allocate space for byblocks pointers. */ byblocks=(struct sparseblock **)malloc((C.nblocks+1)*sizeof(struct sparseblock *)); if (byblocks == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; for (i=1; i<=C.nblocks; i++) byblocks[i]=NULL; /* * Fill in byblocks pointers. */ for (i=1; i<=k; i++) { ptr=constraints[i].blocks; while (ptr != NULL) { if (byblocks[ptr->blocknum]==NULL) { byblocks[ptr->blocknum]=ptr; }; ptr=ptr->next; }; }; /* * Compute "fill". This data structure tells us which elements in the * block diagonal matrix have corresponding elements in one of the * constraints, and which constraint this element first appears in. * */ makefill(k,C,constraints,&fill,work1,printlevel); /* * Compute the nonzero structure of O. */ nnz=structnnz(n,k,C,constraints); if (printlevel >= 3) printf("Structural density of O %d, %e \n",nnz,nnz*1.0/(k*k*1.0)); /* * Sort entries in diagonal blocks of constraints. */ sort_entries(k,C,constraints); /* * Now, call sdp(). */ ret=sdp(n,k,C,a,constant_offset,constraints,byblocks,fill,*pX,*py,*pZ, cholxinv,cholzinv,ppobj,pdobj,work1,work2,work3,workvec1, workvec2,workvec3,workvec4,workvec5,workvec6,workvec7,workvec8, diagO,bestx,besty,bestz,Zi,O,rhs,dZ,dX,dy,dy1,Fp, printlevel,params); if (printlevel >= 1) { if (ret==0) printf("Success: SDP solved\n"); if (ret==1) printf("Success: SDP is primal infeasible\n"); if (ret==2) printf("Success: SDP is dual infeasible\n"); if (ret==3) printf("Partial Success: SDP solved with reduced accuracy\n"); if (ret >= 4) printf("Failure: return code is %d \n",ret); if (ret==1) { op_at(k,*py,constraints,work1); addscaledmat(work1,-1.0,*pZ,work1); printf("Certificate of primal infeasibility: a'*y=%.5e, ||A'(y)-Z||=%.5e\n",-1.0,Fnorm(work1)); }; if (ret==2) { op_a(k,constraints,*pX,workvec1); printf("Certificate of dual infeasibility: tr(CX)=%.5e, ||A(X)||=%.5e\n",trace_prod(C,*pX),norm2(k,workvec1+1)); }; if ((ret==0) || (ret>=3)) { if (printlevel >= 3) { printf("XZ Gap: %.7e \n",trace_prod(*pZ,*pX)); gap=*pdobj-*ppobj; printf("Real Gap: %.7e \n",gap); }; if (printlevel >= 1) { gap=*pdobj-*ppobj; printf("Primal objective value: %.7e \n",*ppobj); printf("Dual objective value: %.7e \n",*pdobj); printf("Relative primal infeasibility: %.2e \n", pinfeas(k,constraints,*pX,a,workvec1)); printf("Relative dual infeasibility: %.2e \n", dinfeas(k,C,constraints,*py,*pZ,work1)); printf("Real Relative Gap: %.2e \n",gap/(1+fabs(*pdobj)+fabs(*ppobj))); printf("XZ Relative Gap: %.2e \n",trace_prod(*pZ,*pX)/(1+fabs(*pdobj)+fabs(*ppobj))); printf("DIMACS error measures: %.2e %.2e %.2e %.2e %.2e %.2e\n", pinfeas(k,constraints,*pX,a,workvec1)*(1+norm2(k,a+1))/ (1+norminf(k,a+1)), 0.0, dimacserr3(k,C,constraints,*py,*pZ,work1), 0.0, gap/(1+fabs(*pdobj)+fabs(*ppobj)), trace_prod(*pZ,*pX)/(1+fabs(*pdobj)+fabs(*ppobj))); }; }; }; /* * Now, free up all of the storage. */ free_mat(work1); free_mat(work2); free_mat(work3); free_mat_packed(bestx); free_mat_packed(bestz); free_mat_packed(cholxinv); free_mat_packed(cholzinv); free_mat(Zi); free_mat(dZ); free_mat(dX); free(besty); free(workvec1); free(workvec2); free(workvec3); free(workvec4); free(workvec5); free(workvec6); free(workvec7); free(workvec8); free(rhs); free(dy); free(dy1); free(Fp); free(O); free(diagO); free(byblocks); /* * Free up the fill data structure. */ ptr=fill.blocks; while (ptr != NULL) { free(ptr->entries); free(ptr->iindices); free(ptr->jindices); oldptr=ptr; ptr=ptr->next; free(oldptr); }; /* * Finally, free the constraints array. */ return(ret); } int structnnz(int n, int k, struct blockmatrix C, struct constraintmatrix *constraints) { int i,j; int ii,jj; int nnz; struct sparseblock *ptri; struct sparseblock *ptrj; nnz=0; for (i=1; i<=k; i++) for (j=1; j<=k; j++) { ptri=constraints[i].blocks; while (ptri != NULL) { ptrj=constraints[j].blocks; while (ptrj != NULL) { if (ptri->blocknum == ptrj->blocknum) { if (C.blocks[ptri->blocknum].blockcategory==MATRIX) { nnz++; goto NEXTJ; } else { /* DIAG block */ for (ii=1; ii<=ptri->numentries; ii++) for (jj=1; jj<=ptrj->numentries; jj++) { if (ptri->iindices[ii]==ptrj->iindices[jj]) { nnz++; goto NEXTJ; }; }; }; }; ptrj=ptrj->next; }; ptri=ptri->next; }; /* end while */ NEXTJ:; }; /* end nested fors */ return(nnz); } int actnnz(int n, int lda, double A[]) { int i,j; int nnz; nnz=0; for (i=1; i<=n; i++) { if (A[ijtok(i,i,lda)] != 0.0) nnz++; for (j=i+1; j<=n; j++) { if (A[ijtok(i,j,lda)] != 0.0) { nnz++; nnz++; }; }; }; return(nnz); } int bandwidth(int n, int lda, double A[]) { int i; int j; int bw; bw=0; for (j=2; j<=n; j++) { for (i=1; i<=j-1; i++) { if (A[ijtok(i,j,lda)] != 0.0) { if ((j-i) > bw) bw=j-i; break; }; }; }; return(bw); } Rcsdp/src/Csdp/lib/trace_prod.c0000644000175100001440000000172614345223742016073 0ustar hornikusers/* Compute the trace of the product of two matrices. Since we only need the trace, it makes more sense to just compute the diagonal of the product and sum the entries.. */ #include #include #include "declarations.h" double trace_prod(struct blockmatrix A, struct blockmatrix B) { int blk; double sum; int i; int j; sum=0.0; for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=A.blocks[blk].blocksize; i++) sum += A.blocks[blk].data.vec[i]*B.blocks[blk].data.vec[i]; break; case MATRIX: for (j=1; j<=A.blocks[blk].blocksize; j++) for (i=1; i<=A.blocks[blk].blocksize; i++) sum += A.blocks[blk].data.mat[ijtok(i,j,A.blocks[blk].blocksize)] *B.blocks[blk].data.mat[ijtok(j,i,A.blocks[blk].blocksize)]; break; case PACKEDMATRIX: default: printf("trace_prod illegal block type \n"); exit(12); }; }; return(sum); } Rcsdp/src/Csdp/lib/user_exit.c0000644000175100001440000000250114345224654015753 0ustar hornikusers/* * User exit routine for psd. This version of the routine simply returns * 0, so that psd will not stop. */ #include "declarations.h" #ifdef USESIGTERM #include #include #include int sigterm_signaled=0; /* * This sets sigterm_signaled to 1. The next time * user_exit runs, it will see this and return 1, so CSDP will stop. */ void catch_sigterm(int signal) { sigterm_signaled=1; } int user_exit(int n, int k, struct blockmatrix C, double *a, double dobj, double pobj, double constant_offset, struct constraintmatrix *constraints, struct blockmatrix X, double *y, struct blockmatrix Z, struct paramstruc params) { signal(SIGTERM,catch_sigterm); if (sigterm_signaled==1) return(1); else return(0); } #else int user_exit(int n, int k, struct blockmatrix C, double *a, double dobj, double pobj, double constant_offset, struct constraintmatrix *constraints, struct blockmatrix X, double *y, struct blockmatrix Z, struct paramstruc params) { return(0); } #endif Rcsdp/src/Csdp/lib/makefill.c0000644000175100001440000001330614345225643015534 0ustar hornikusers/* * This routine creates the fill data structure, which includes information * on all elements of X which are touched by elements of the various * constraint matrices in computing A(X). This is helpful in speeding * up the op_o operation. * * */ #include #include #include #include "declarations.h" void makefill(int k, struct blockmatrix C, struct constraintmatrix *constraints, struct constraintmatrix *pfill, struct blockmatrix work1, int printlevel) { int i,j,p,q,blk,blksize; struct sparseblock *ptr; /* * Now, zero out the work matrix. */ zero_mat(work1); /* * Put 1's in all diagonal positions, plus nonzero elements of C. */ for (blk=1; blk<=C.nblocks; blk++) { switch(C.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=C.blocks[blk].blocksize; i++) work1.blocks[blk].data.vec[i]=1.0; break; case MATRIX: for (i=1; i<=C.blocks[blk].blocksize; i++) for (j=1; j<=C.blocks[blk].blocksize; j++) { if ((C.blocks[blk].data.mat[ijtok(i,j,C.blocks[blk].blocksize)] != 0.0) || (i == j)) work1.blocks[blk].data.mat[ijtok(i,j,C.blocks[blk].blocksize)]=1.0; }; break; case PACKEDMATRIX: default: printf("makefill illegal block type \n"); exit(12); }; }; /* * Now, work through the constraints. */ for (i=1; i<=k; i++) { ptr=constraints[i].blocks; while (ptr != NULL) { blk=ptr->blocknum; switch(C.blocks[blk].blockcategory) { case DIAG: break; case MATRIX: for (j=1; j<=ptr->numentries; j++) { p=ptr->iindices[j]; q=ptr->jindices[j]; work1.blocks[blk].data.mat[ijtok(p,q,C.blocks[blk].blocksize)]=1.0; work1.blocks[blk].data.mat[ijtok(q,p,C.blocks[blk].blocksize)]=1.0; }; break; case PACKEDMATRIX: default: printf("addscaledmat illegal block type \n"); exit(12); }; ptr=ptr->next; }; }; /* * At this point, we have 1's in all fill positions in work1. */ /* * Allocate space for each block. */ ptr=(struct sparseblock *)malloc(sizeof(struct sparseblock)); if (ptr == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; pfill->blocks=ptr; ptr->next=NULL; ptr->blocknum=1; ptr->numentries=0; ptr->blocksize=C.blocks[1].blocksize; for (i=2; i<=C.nblocks; i++) { ptr->next=(struct sparseblock *)malloc(sizeof(struct sparseblock)); if (ptr->next == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; ptr=ptr->next; ptr->blocknum=i; ptr->numentries=0; ptr->blocksize=C.blocks[i].blocksize; }; ptr->next=(struct sparseblock *)NULL; /* * Go through each block of work1, filling out pfill as we go. */ ptr=pfill->blocks; while (ptr != NULL) { blk=ptr->blocknum; switch(C.blocks[blk].blockcategory) { case DIAG: ptr->numentries=ptr->blocksize; ptr->entries=(double *) malloc((ptr->blocksize+1)*sizeof(double)); if (ptr->entries == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; #ifdef NOSHORTS ptr->iindices=(int *) malloc((ptr->blocksize+1)*sizeof(int)); #else ptr->iindices=(unsigned short *) malloc((ptr->blocksize+1)*sizeof(unsigned short)); #endif if (ptr->iindices == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; #ifdef NOSHORTS ptr->jindices=(int *) malloc((ptr->blocksize+1)*sizeof(int)); #else ptr->jindices=(unsigned short *) malloc((ptr->blocksize+1)*sizeof(unsigned short)); #endif if (ptr->jindices == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; for (j=1; j<=ptr->numentries; j++) { ptr->entries[j]=1.0; ptr->iindices[j]=j; ptr->jindices[j]=j; }; break; /* * This is a matrix block. */ case MATRIX: blksize=C.blocks[blk].blocksize; ptr->numentries=0; for (i=1; i<= blksize; i++) for (j=1; j<=blksize; j++) { if (work1.blocks[blk].data.mat[ijtok(i,j,blksize)] == 1.0) { ptr->numentries=ptr->numentries+1; }; }; ptr->entries=(double *)malloc((ptr->numentries+1)*sizeof(double)); if (ptr == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; #ifdef NOSHORTS ptr->iindices=(int *) malloc((ptr->numentries+1)*sizeof(int)); #else ptr->iindices=(unsigned short *) malloc((ptr->numentries+1)*sizeof(unsigned short)); #endif if (ptr->iindices == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; #ifdef NOSHORTS ptr->jindices=(int *) malloc((ptr->numentries+1)*sizeof(int)); #else ptr->jindices=(unsigned short *) malloc((ptr->numentries+1)*sizeof(unsigned short)); #endif if (ptr->jindices == NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; ptr->numentries=0; for (i=1; i<= blksize; i++) for (j=1; j<=blksize; j++) { if (work1.blocks[blk].data.mat[ijtok(i,j,blksize)] == 1.0) { ptr->numentries=ptr->numentries+1; ptr->entries[ptr->numentries]=1.0; ptr->iindices[ptr->numentries]=i; ptr->jindices[ptr->numentries]=j; }; }; break; case PACKEDMATRIX: default: printf("makefill illegal block type \n"); exit(12); }; ptr=ptr->next; }; /* * Print out information about fill. */ ptr=pfill->blocks; while (ptr != NULL) { blk=ptr->blocknum; if (printlevel >= 3) printf("Block %d, Size %d, Fill %d, %.2f \n",blk,C.blocks[blk].blocksize,ptr->numentries,100.0*ptr->numentries/(C.blocks[blk].blocksize*C.blocks[blk].blocksize*1.0)); ptr=ptr->next; }; } Rcsdp/src/Csdp/lib/sym_mat.c0000644000175100001440000000137214345224214015412 0ustar hornikusers/* Symmetrize a matrix in Fortran storage format. */ #include #include #include "declarations.h" void sym_mat(struct blockmatrix A) { int i; int j; int blk; double foo; double *ap; int n; /* * Loop through the blocks, symmetrizing one at a time. */ for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: break; case MATRIX: n=A.blocks[blk].blocksize; ap=A.blocks[blk].data.mat; for (j=1; j<=n; j++) for (i=1; i<=j; i++) { foo=(ap[ijtok(i,j,n)]+ap[ijtok(j,i,n)])/2.0; ap[ijtok(i,j,n)]=foo; ap[ijtok(j,i,n)]=foo; }; break; case PACKEDMATRIX: default: printf("sym_mat illegal block type \n"); exit(12); }; }; } Rcsdp/src/Csdp/lib/add_mat.c0000644000175100001440000000145114345235074015336 0ustar hornikusers/* Add a matrix to a second matrix in Fortran storage format. */ #include #include #include "declarations.h" void add_mat(struct blockmatrix A, struct blockmatrix B) { int blk; int i,j; for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=A.blocks[blk].blocksize; i++) { B.blocks[blk].data.vec[i]+=A.blocks[blk].data.vec[i]; }; break; case MATRIX: for (j=1; j<=A.blocks[blk].blocksize; j++) for (i=1; i<=A.blocks[blk].blocksize; i++) B.blocks[blk].data.mat[ijtok(i,j,B.blocks[blk].blocksize)] += A.blocks[blk].data.mat[ijtok(i,j,A.blocks[blk].blocksize)]; break; case PACKEDMATRIX: default: printf("addscaledmat illegal block type \n"); exit(12); }; }; } Rcsdp/src/Csdp/lib/op_o.c0000644000175100001440000002626114345222675014712 0ustar hornikusers/* * Compute a matrix representation of the operator * * O(.)=A(inv(Z)*A'(.)*X) * * The ith colum of the result is O(e_i), where e_i is the vector with a 1 in * position i and 0's elsewhere. * */ #include #include #include #ifdef USEOPENMP #include #endif #include "declarations.h" void op_o(int k, struct constraintmatrix *constraints, struct sparseblock **byblocks, struct blockmatrix Zi, struct blockmatrix X, double *O, struct blockmatrix work1, struct blockmatrix work2) { int i, j; int ii, jj; int ldam; int p, q, r, s; struct sparseblock *ptri; struct sparseblock *ptrj; int blocknum; int blocksize; double contrib; double *Ziblk; double *Xblk; double *workblk; double *work2blk; double enti, entj, scale1, scale2; int max_blknum = 0, max_blksize = 0; int thread_num; static double **work; int max_threads; /* * Get the maximum number of threads. */ #ifdef USEOPENMP max_threads=omp_get_max_threads(); #else max_threads=1; #endif /* Allocate more memory for the number of work matrices needed. */ /* Find the largest nondiagonal block */ for (blocknum = 1; blocknum <= X.nblocks; blocknum++) { if (X.blocks[blocknum].blockcategory != DIAG && X.blocks[blocknum].blocksize > max_blksize) { max_blknum = blocknum; max_blksize = X.blocks[blocknum].blocksize; }; }; /* * If we have at least one dense block, we must allocate memory for work * matrices. */ if (max_blknum > 0) { work = (double **) malloc(sizeof(double *) * (max_threads * 2 + 1)); if (work == NULL) { printf("Failed to allocate memory for parallel execution (1)!\n"); printf("omp_get_max_threads() was %d \n",max_threads); exit(10); } work[1] = work1.blocks[max_blknum].data.mat; work[2] = work2.blocks[max_blknum].data.mat; for (i = 1; i < max_threads; i++) { work[i * 2 + 1] = (double *) malloc(sizeof(double) * X.blocks[max_blknum].blocksize * X.blocks[max_blknum].blocksize); work[i * 2 + 2] = (double *) malloc(sizeof(double) * X.blocks[max_blknum].blocksize * X.blocks[max_blknum].blocksize); if (work[i * 2 + 1] == NULL || work[i * 2 + 2] == NULL) { printf("Failed to allocate memory for parallel execution (2)!\n"); printf("max_blksize is %d \n",max_blksize); printf("omp_get_max_threads() was %d \n",max_threads); exit(10); }; }; }; /* * Work out the leading dimension for the array. Note that we may not want * to use k itself, for cache issues. */ if ((k % 2) == 0) ldam = k + 1; else ldam = k; /* * First, zero out the O matrix. */ #pragma omp parallel for schedule(dynamic,64) default(none) shared(O,ldam,k) private(j,i) for (j = 1; j <= k; j++) for (i = 1; i <= k; i++) O[ijtok(i, j, ldam)] = 0.0; /* Loop over i, then the blocks, then j */ #ifdef USEOPENMP #ifdef SETNUMTHREADS omp_set_num_threads(omp_get_max_threads()); #endif #endif #pragma omp parallel for schedule(dynamic,64) default(none) shared(k,constraints,byblocks,Zi,X,O,work1, work2, work, ldam) private(j, ii, jj, blocksize, p, q, r, s, ptri, ptrj, blocknum, contrib, Ziblk, Xblk, workblk, work2blk, enti, entj, scale1, scale2, thread_num) for (i = 1; i <= k; i++) { #ifdef USEOPENMP #ifdef SETNUMTHREADS /* Only use one thread in the inner loop. */ omp_set_num_threads(1); #endif #endif ptri = constraints[i].blocks; while (ptri != NULL) { blocknum = ptri->blocknum; blocksize = ptri->blocksize; /* Diagonal blocks */ if (ptri->issparse == 1 && X.blocks[blocknum].blockcategory == DIAG) { Ziblk = Zi.blocks[blocknum].data.vec; Xblk = X.blocks[blocknum].data.vec; ptrj = ptri; while (ptrj != NULL) { j = ptrj->constraintnum; /* * Do the contribution from constraints i and j of this block. */ contrib = 0.0; p = 1; q = 1; while ((p <= ptri->numentries) && (q <= ptrj->numentries)) { if (ptri->iindices[p] < ptrj->iindices[q]) { p = p + 1; } else { if (ptri->iindices[p] > ptrj->iindices[q]) { q = q + 1; } else { /* * Match! */ contrib += ptri->entries[p] * ptrj->entries[q] * Ziblk[ptri->iindices[p]] * Xblk[ptri->iindices[p]]; p = p + 1; q = q + 1; }; }; }; O[ijtok(i, j, ldam)] += contrib; /* Next j */ ptrj = ptrj->nextbyblock; } } /* Sparse matrix block */ else if (ptri->issparse == 1 && X.blocks[blocknum].blockcategory == MATRIX) { Ziblk = Zi.blocks[blocknum].data.mat; Xblk = X.blocks[blocknum].data.mat; ptrj = ptri; while (ptrj != NULL) { /* Only process sparse-sparse pairs. */ if (ptrj->issparse == 1) { j = ptrj->constraintnum; /* * The following prefetch seems to give about a 5% performance * improvement on certain problems. e.g. truss8 on a 1200 Mhz * Athlon. * * It won't be compiled unless we're using gcc. */ #ifdef __GNUC__ #if (((__GNUC__ == 3) && (__GNUC_MINOR__ > 1)) || (__GNUC__ > 3)) __builtin_prefetch(ptrj->nextbyblock, 0, 3); #endif #endif /* * Do the contribution from constraints i and j of this block. */ contrib = 0.0; for (ii = 1; ii <= ptri->numentries; ii++) { enti = ptri->entries[ii]; p = ptri->iindices[ii]; q = ptri->jindices[ii]; /* * We'll keep the p==q test outside of the inner loop. * * In what follows, we've made use of the symmetry of Ziblk and * Xblk, by permuting all array indices so that p and q are * last. This means that we stay in columns p and q of Ziblk * and Xblk as much as possible, improving locality. * */ if (p == q) { for (jj = 1; jj <= ptrj->numentries; jj++) { entj = ptrj->entries[jj]; r = ptrj->iindices[jj]; s = ptrj->jindices[jj]; if (r == s) { /* here p==q, r==s */ contrib += enti * entj * Ziblk[ijtok(r, q, blocksize)] * Xblk[ijtok(s, p, blocksize)]; } else { /* here p=q, r!=s */ contrib += enti * entj * (Ziblk[ijtok(r, q, blocksize)] * Xblk[ijtok(s, p, blocksize)] + Ziblk[ijtok(s, q, blocksize)] * Xblk[ijtok(r, p, blocksize)]); } } } else { /* p!= q */ for (jj = 1; jj <= ptrj->numentries; jj++) { entj = ptrj->entries[jj]; r = ptrj->iindices[jj]; s = ptrj->jindices[jj]; if (r == s) { /* p!=q, but r=s */ contrib += enti * entj * (Ziblk[ijtok(r, q, blocksize)] * Xblk[ijtok(s, p, blocksize)] + Ziblk[ijtok(r, p, blocksize)] * Xblk[ijtok(s, q, blocksize)]); } else { /* here, p!=q and r!=s */ contrib += enti * entj * (Ziblk[ijtok(r, q, blocksize)] * Xblk[ijtok(s, p, blocksize)] + Ziblk[ijtok(r, p, blocksize)] * Xblk[ijtok(s, q, blocksize)] + Ziblk[ijtok(s, q, blocksize)] * Xblk[ijtok(r, p, blocksize)] + Ziblk[ijtok(s, p, blocksize)] * Xblk[ijtok(r, q, blocksize)]); } } } } O[ijtok(i, j, ldam)] += contrib; } ptrj = ptrj->nextbyblock; } } /* Dense matrix block */ else { /* * put this block into a work matrix. */ #ifdef USEOPENMP thread_num = omp_get_thread_num(); #else thread_num=0; #endif workblk = work[thread_num * 2 + 1]; work2blk = work[thread_num * 2 + 2]; Xblk = X.blocks[blocknum].data.mat; Ziblk = Zi.blocks[blocknum].data.mat; for (ii = 0; ii <= blocksize * blocksize - 1; ii++) { workblk[ii] = 0.0; } for (ii = 1; ii <= ptri->numentries; ii++) { enti = ptri->entries[ii]; p = ptri->iindices[ii]; q = ptri->jindices[ii]; workblk[ijtok(p, q, blocksize)] = enti; if (p != q) workblk[ijtok(q, p, blocksize)] = enti; } /* * Now, multiply out Zi*work*X. */ scale1 = 1.0; scale2 = 0.0; #ifdef USEATLAS mat_mult_rawatlas(blocksize, scale1, scale2, Ziblk, workblk, work2blk); mat_mult_rawatlas(blocksize, scale1, scale2, work2blk, Xblk, workblk); #else mat_mult_raw(blocksize, scale1, scale2, Ziblk, workblk, work2blk); mat_mult_raw(blocksize, scale1, scale2, work2blk, Xblk, workblk); #endif ptrj = byblocks[blocknum]; while (ptrj != NULL) { j = ptrj->constraintnum; /* * Compute if block j is sparse; block j is dense, but block i has * more elements; or, if both blocks have the same number of * elements, and the constraint number of block i is less than or * equal to j */ if (ptrj->issparse == 1 || ptri->numentries > ptrj->numentries || (ptri->numentries == ptrj->numentries && i <= j)) { contrib = 0.0; /* * Another GCC prefetch for improved performance. It won't be * compiled unless we're using gcc. */ #ifdef __GNUC__ #if (((__GNUC__ == 3) && (__GNUC_MINOR__ > 1)) || (__GNUC__ > 3)) __builtin_prefetch(ptrj->nextbyblock, 0, 3); #endif #endif for (ii = 1; ii <= ptrj->numentries; ii++) { entj = ptrj->entries[ii]; p = ijtok(ptrj->iindices[ii], ptrj->jindices[ii], blocksize); q = ijtok(ptrj->jindices[ii], ptrj->iindices[ii], blocksize); contrib += entj * workblk[p]; if (p != q) { contrib += entj * workblk[q]; }; }; /* * Depending on the relative values of i and j, this may leave * the update below the diagonal. However, we'll go back through * and pickup such updates at the end. By doing this, we * ensure that there are no conflicts between threads- each row * of O belongs to only one thread of gang handling the for i * loop, so we don't need to use #pragma atomic here. */ O[ijtok(i,j,ldam)] +=contrib; } ptrj = ptrj->nextbyblock; } } ptri = ptri->next; } } /* Make sure the number of threads is at maximum. */ #ifdef USEOPENMP #ifdef SETNUMTHREADS omp_set_num_threads(omp_get_max_threads()); #endif #endif /* * Go back and pick up any updates that were left below the diagonal. */ #pragma omp parallel for schedule(dynamic,64) default(none) shared(O,ldam,k) private(j,i) for (j = 2; j <= k; j++) for (i = 1; i < j; i++) O[ijtok(i, j, ldam)] += O[ijtok(j,i,ldam)]; /* * Free storage allocated for parallel work space. */ if (max_blknum>0) { for (i=1; i< max_threads; i++) { free(work[i*2+1]); free(work[i*2+2]); }; free(work); }; } Rcsdp/src/Csdp/lib/op_at.c0000644000175100001440000000205514345226063015046 0ustar hornikusers/* Compute A'(y). */ #include #include "declarations.h" void op_at(int k, double *y, struct constraintmatrix *constraints, struct blockmatrix result) { int i,j; #ifndef BIT64 int p,q; #else long int p,q; #endif int blk; double ent; struct sparseblock *ptr; zero_mat(result); for (i=1; i<=k; i++) { if (y[i] == 0.0) { continue; }; ptr=constraints[i].blocks; while (ptr != NULL) { blk=ptr->blocknum; if (result.blocks[blk].blockcategory == DIAG) { for (j=1; j<=ptr->numentries; j++) { ent=ptr->entries[j]; p=ptr->iindices[j]; result.blocks[blk].data.vec[p] += y[i]*ent; }; } else { for (j=1; j<=ptr->numentries; j++) { ent=ptr->entries[j]; p=ijtok(ptr->iindices[j],ptr->jindices[j],ptr->blocksize); q=ijtok(ptr->jindices[j],ptr->iindices[j],ptr->blocksize); result.blocks[blk].data.mat[p] += y[i]*ent; if (p != q) result.blocks[blk].data.mat[q] += y[i]*ent; }; }; ptr=ptr->next; }; }; } Rcsdp/src/Csdp/lib/solvesys.c0000644000175100001440000000132114345225566015635 0ustar hornikusers/* Solve a system of equations using the Cholesky factorization of A. Note that we assume that A is positive definite and that A has already been factored. */ #include #include #include "declarations.h" int solvesys(int m, int ldam, double *A, double *rhs) { int incx; int info; incx=1; #ifdef NOUNDERLAPACK #ifdef CAPSLAPACK DPOTRS("U",&m,&incx,A,&ldam,rhs+1,&ldam,&info); #else dpotrs("U",&m,&incx,A,&ldam,rhs+1,&ldam,&info); #endif #else #ifdef CAPSLAPACK DPOTRS_("U",&m,&incx,A,&ldam,rhs+1,&ldam,&info); #else dpotrs_("U",&m,&incx,A,&ldam,rhs+1,&ldam,&info); #endif #endif if (info != 0) { return(6); }; return(0); } Rcsdp/src/Csdp/lib/psd_feas.c0000644000175100001440000000352314345223362015530 0ustar hornikusers/* Check a primal dual solution for strict feasibility. Return 1 if feasible, and 0 if not. */ #include #include "declarations.h" /* * This routine computes the relative primal infeasibility. */ double pinfeas(int k, struct constraintmatrix *constraints, struct blockmatrix X, double *a, double *workvec) { double nrme; double nrma; int i; /* * First, check that A(X)=a. */ op_a(k,constraints,X,workvec); nrma=norm2(k,a+1); for (i=1; i<=k; i++) workvec[i]=workvec[i]-a[i]; nrme=norm2(k,workvec+1); return(nrme/(1.0+nrma)); } double dinfeas(int k, struct blockmatrix C, struct constraintmatrix *constraints, double *y, struct blockmatrix Z, struct blockmatrix work1) { double nrme; double nrmC; /* * Next, check that A'(y)-C=Z */ zero_mat(work1); op_at(k,y,constraints,work1); addscaledmat(work1,-1.0,C,work1); addscaledmat(work1,-1.0,Z,work1); /* Now, we've got the error in workn1. We'll compute the F norm of this error and compare it to the F norm of C. */ nrme=Fnorm(work1); nrmC=Fnorm(C); return(nrme/(1+nrmC)); } double dimacserr3(int k, struct blockmatrix C, struct constraintmatrix *constraints, double *y, struct blockmatrix Z, struct blockmatrix work1) { double nrme; /* * Next, check that A'(y)-C=Z */ zero_mat(work1); op_at(k,y,constraints,work1); addscaledmat(work1,-1.0,C,work1); addscaledmat(work1,-1.0,Z,work1); /* Now, we've got the error in workn1. We'll compute the F norm of this error and compare it to the F norm of C. */ nrme=Knorm(work1); return(nrme/(1+matinfnorm(C))); } Rcsdp/src/Csdp/lib/initsoln.c0000644000175100001440000000357014345225022015600 0ustar hornikusers/* * Build an initial solution for an SDP problem. */ #include #include #include #include "declarations.h" void initsoln(int n, int k, struct blockmatrix C, double *a, struct constraintmatrix *constraints, struct blockmatrix *pX0, double **py0, struct blockmatrix *pZ0) { int i,j; double alpha,beta; double maxnrmA,nrmA; double nrmC; double scale1, scale2; struct sparseblock *ptr; /* * First, allocate storage for X0, y0, and Z0. */ alloc_mat(C,pX0); alloc_mat(C,pZ0); *py0=(double *)malloc(sizeof(double)*(k+1)); if (py0 == NULL) { printf("Storage allocation failed!\n"); exit(10); }; /* * next, pick alpha=n*max_i((1+|a_i|)/(1+||A_i||)). */ maxnrmA=0.0; alpha=0.0; for (i=1; i<=k; i++) { nrmA=0.0; ptr=constraints[i].blocks; while (ptr != NULL) { for (j=1; j<=ptr->numentries; j++) { nrmA += (ptr->entries[j])*(ptr->entries[j]); if (ptr->iindices[j] != ptr->jindices[j]) nrmA += (ptr->entries[j])*(ptr->entries[j]); }; ptr=ptr->next; }; nrmA=sqrt(nrmA); if (nrmA > maxnrmA) maxnrmA=nrmA; if ((1+fabs(a[i]))/(1+nrmA) > alpha) alpha=(1+fabs(a[i]))/(1+nrmA); }; alpha=n*alpha; /* * Next, calculate the F norm of C. */ nrmC=Fnorm(C); if (nrmC > maxnrmA) { beta=(1+nrmC)/sqrt(n*1.0); } else { beta=(1+maxnrmA)/sqrt(n*1.0); }; /* * Now that we have alpha and beta, make X=100*alpha*I, Z=100*beta*I, y=0. */ make_i(*pX0); scale1=0.0; scale2=10*alpha; mat_mult(scale1,scale2,*pX0,*pX0,*pX0); make_i(*pZ0); scale1=0.0; scale2=10*beta; mat_mult(scale1,scale2,*pZ0,*pZ0,*pZ0); /* * Set y to 0. */ for (i=1; i<=k; i++) (*py0)[i]=0; } Rcsdp/src/Csdp/lib/chol.c0000644000175100001440000000647514345233504014701 0ustar hornikusers/* Calculate the inverse of an n by n matrix A. A is assumed to be symmetric and positive definite. The original matrix A is destroyed in the process. On return, A is certified to be symmetric and positive definite. */ #include #include #include #include "declarations.h" int chol_blk(int n, int lda, double *A) { int info; int i; int j; info=0; #ifdef NOUNDERLAPACK #ifdef CAPSLAPACK DPOTRF("U",&n,A,&lda,&info); #else dpotrf("U",&n,A,&lda,&info); #endif #else #ifdef CAPSLAPACK DPOTRF_("U",&n,A,&lda,&info); #else dpotrf_("U",&n,A,&lda,&info); #endif #endif if (info != 0) { return(1); }; /* * Now, make sure that the lower triangle of A is 0.0 */ for (j=1; j #include #include "declarations.h" struct entry { #ifndef NOSHORTS unsigned short indexi; unsigned short indexj; unsigned short indexk; unsigned short indexl; double entry; #else int indexi; int indexj; int indexk; int indexl; double entry; #endif }; int mycompare(const void *p1, const void *p2) { if (((struct entry *)p1)->indexi < ((struct entry *)p2)->indexi) { return(-1); }; if (((struct entry *)p1)->indexi == ((struct entry *)p2)->indexi) { if (((struct entry *)p1)->indexj < ((struct entry *)p2)->indexj) { return(-1); }; if (((struct entry *)p1)->indexj == ((struct entry *)p2)->indexj) { return(0); }; if (((struct entry *)p1)->indexj > ((struct entry *)p2)->indexj) { return(1); }; }; /* * If we get here, then p1->indexi > p2->indexi */ return(1); } void sort_entries(int k, struct blockmatrix C, struct constraintmatrix *constraints) { int i,j; struct sparseblock *ptr; int maxentries; struct entry *entries; /* * First, find out who has the most entries. */ maxentries=0; for (i=1; i<=k; i++) { ptr=constraints[i].blocks; while (ptr != NULL) { if (ptr->numentries > maxentries) maxentries=ptr->numentries; ptr=ptr->next; }; }; /* * Allocate space for entries. */ entries=(struct entry *)malloc(maxentries*sizeof(struct entry)); if (entries==NULL) { printf("Storage allocation failed in sortentries.\n"); exit(10); }; for (i=1; i<=k; i++) { ptr=constraints[i].blocks; while (ptr != NULL) { /* * Copy in */ for (j=1; j<=ptr->numentries; j++) { entries[j-1].indexi=ptr->iindices[j]; entries[j-1].indexj=ptr->jindices[j]; entries[j-1].entry=ptr->entries[j]; }; /* * Sort */ qsort(entries,(size_t)ptr->numentries,sizeof(struct entry), mycompare); /* * Copy out. */ for (j=1; j<=ptr->numentries; j++) { ptr->iindices[j]=entries[j-1].indexi; ptr->jindices[j]=entries[j-1].indexj; ptr->entries[j]=entries[j-1].entry; }; ptr=ptr->next; }; }; /* end i */ free(entries); } Rcsdp/src/Csdp/lib/Makefile0000644000175100001440000001321014414754226015237 0ustar hornikusers# # Uncomment this line to specify the C compiler if the system default isn't # what you want to use. # #CC=cc # # Use this line to specify options for the C compiler. You'll probably # want to turn on optimizations. You may also have to use some of the # following flags: # # -DCAPSBLAS if BLAS routine names are capitalized. # -DCAPSLAPACK if LAPACK routine names are capitalized. # -DNOUNDERBLAS if BLAS routine names have no underscore. # -DNOUNDERLAPACK if LAPACK routine names have no underscore. # -DBIT64 For I32LP64 systems. # -DNOSHORTS Allow for (LP) blocks of more than 65535 variables. # -DUSEOPENMP Build an OpenMP parallel version. # -DSETNUMTHREADS Work with OpenMP aware BLAS. # -DUSESIGTERM Terminate nicely at the end of the next iteration # after receiving a SIGTERM signal # -DUSEGETTIME Use ANSI C gettime() routine to determine clock # time used in different parts of the code. # -DUSEATLAS Turns on some special code for use with the ATLAS BLAS. # # The default settings for gcc: # CFLAGS=-O3 -ansi -Wall -DNOSHORTS -DUSEGETTIME -I../include # # Notes on CFLAGS. # # 1. The -DNOSHORTS flag should always be used. When this is turned off, # it causes the code to use unsigned short integers (maximum value 65535) # in the data structures that describe the problem. This can cause problems # when some of the size parameters are larger than 65535. # # 2. -DUSEGETTIME is generally useful. However, this functionality isn't # available under Windows/MSYS/MINGW, so you should remove it when compiling # for that system. # # 3. By default, we assume that BLAS routines have names like ddot_(), # but some systems use ddot(), DDOT(), or DDOT_() instead. A similar issue # effects the LAPACK routines. The flags -DCAPSBLAS, -DCAPSLAPACK, # -DNOUNDERBLAS. and -DNOUNDERLAPACK are used to handle such situations. # # 4. The code can be built on 64 bit systems that use an I32LP64 model # in which int's are 32 bits, long's and pointers are 64 bits. Note that # that is the model on all 64 bit Linux and Unix systems that I'm aware of, # but it is not the model used by MS in its 64 bit Windows! To build a # 64 bit version of the code, use -DBIT64. You may also need to add a CFLAG # to tell your compiler to produce 64 bit code. For example, with gcc, # you'll need to add "-m64" to CFLAGS to produce 64 bit code. # # 5. If you have multiple CPU's, and if your compiler supports OpenMP, then # you should definitely build a parallel version of CSDP. To do this, # add "-DUSEOPENMP" to CFLAGS. If your BLAS/LAPACK library routines # use OpenMP's conventions for setting the number of threads to use, then # you should also add "-DSETNUMTHREADS". Note that ATLAS does not # currently work with "-DSETNUMTHREADS", but you can use SETNUMTHREADS # on Solaris with -lsunperf and AIX systems with -lesslsmp. # # You will also have to add appropriate CFLAGS to tell your compiler # to compile OpenMP code. This varies from system to system. However, # with gcc4.2, you can use # # -static -fopenmp # # You may also have to add additional libraries when you link your # OpenMP code. For example, gcc 4.2 with OpenMP needs # # -lgomp -lrt -lpthread # # 6. Using gcc, you can greatly improve the efficency of the code if you # specify your processor type. Examples are given below, use the default # if you are unsure. More examples may be found at # # http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html # # An AMD Athlon XP based machine: # CFLAGS=-march=athlon-xp -O3 -ansi -Wall -DNOSHORTS -I../include # An Intel Pentum 4 based machine: # CFLAGS=-march=pentum4 -O3 -ansi -Wall -DNOSHORTS -I../include # # 7. The code can be built with Intel's icc C compiler and MKL BLAS/ # LAPACK libraries. This has been tested with icc 11.0 and should # work with later versions as well. # # CC=icc # CFLAGS=-O3 -m64 -openmp -DBIT64 -DUSEOPENMP -DNOSHORTS -DSETNUMTHREADS # -I../include # LIBS=-openmp -L../lib -lsdp -mkl -lm # # 8. The can works particularly well with the ATLAS BLAS/LAPACK routines # when compiled with gcc. There are some important optimizations in the # code that depend on the availability of routines within ATLAS, so use # use -DUSEATLAS to turn these on. e.g. # # CFLAGS=-O3 -fopenmp -ansi -Wall -DUSEATLAS -DNOSHORTS -DBIT64 # -DUSEOPENMP -I../include # # # 9. If you change the CFLAGS, make sure that you use the same CFLAGS # in the Makefiles in the solver and theta directories! # # Build the library. # libsdp.a: readprob.o sdp.o op_o.o psd_feas.o op_a.o op_at.o Fnorm.o calc_pobj.o calc_dobj.o trace_prod.o zero_mat.o mat_mult.o sym_mat.o copy_mat.o addscaledmat.o user_exit.o make_i.o allocmat.o initsoln.o initparams.o add_mat.o writesol.o readsol.o easysdp.o writeprob.o solvesys.o makefill.o mat_multsp.o norms.o linesearch.o matvec.o chol.o qreig.o tweakgap.o freeprob.o packed.o sortentries.o ${AR} cr libsdp.a readprob.o sdp.o op_o.o psd_feas.o op_a.o op_at.o Fnorm.o calc_pobj.o calc_dobj.o trace_prod.o zero_mat.o mat_mult.o sym_mat.o copy_mat.o addscaledmat.o user_exit.o make_i.o allocmat.o initsoln.o initparams.o add_mat.o writesol.o readsol.o easysdp.o writeprob.o solvesys.o makefill.o mat_multsp.o norms.o linesearch.o matvec.o chol.o qreig.o tweakgap.o freeprob.o packed.o sortentries.o # # On some systems, you might need to add after "ar cr libsdp.a ..." # ranlib libsdp.a # # # To clean things up. # clean: rm -f *.o rm -f libsdp.a Rcsdp/src/Csdp/lib/make_i.c0000644000175100001440000000150014345224675015172 0ustar hornikusers/* Make an identity matrix. */ #include #include #include "declarations.h" void make_i(struct blockmatrix A) { int blk,i,j; double *p; for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: p=A.blocks[blk].data.vec; for (i=1; i<=A.blocks[blk].blocksize; i++) p[i]=1.0; break; case MATRIX: p=A.blocks[blk].data.mat; #pragma omp parallel for schedule(dynamic,64) default(none) private(i,j) shared(blk,p,A) for (j=1; j<=A.blocks[blk].blocksize; j++) for (i=1; i<=A.blocks[blk].blocksize; i++) p[ijtok(i,j,A.blocks[blk].blocksize)]=0.0; for (i=1; i<=A.blocks[blk].blocksize; i++) p[ijtok(i,i,A.blocks[blk].blocksize)]=1.0; break; default: printf("make_i illegal block type\n"); exit(12); }; } } Rcsdp/src/Csdp/lib/tweakgap.c0000644000175100001440000000234014345217756015555 0ustar hornikusers/* * Attempt to tweak a solution with negative gap so that the gap is * closer to 0. Do this by moving from y to y+sa, where s is picked * by linesearch to keep Z PD. * * To calculate dZ, * dy=a * dZ=A'(dy) * * To get a change of dual objective equal to -gap, * * -gap=s*a'*a * s=-gap/(a'*a) * */ #include #include #include #include "declarations.h" void tweakgap(int n, int k, double *a, struct constraintmatrix *constraints, double gap, struct blockmatrix Z, struct blockmatrix dZ, double *y, double *dy, struct blockmatrix work1, struct blockmatrix work2, struct blockmatrix work3, struct blockmatrix work4, double *workvec1, double *workvec2, double *workvec3, double *workvec4, int printlevel) { int i; double norma; double alpha; norma=norm2(k,a+1); for (i=1; i<=k; i++) dy[i]=a[i]; op_at(k,dy,constraints,dZ); alpha=linesearch(n,dZ,work1,work2,work3,work4,workvec1,workvec2, workvec3,1.0,-gap/(norma*norma),0); if (printlevel >= 2) printf("tweak: alpha is %e \n",alpha); for (i=1; i<=k; i++) y[i]=y[i]+alpha*dy[i]; addscaledmat(Z,alpha,dZ,Z); } Rcsdp/src/Csdp/lib/qreig.c0000644000175100001440000000247114345220037015050 0ustar hornikusers/* * qreig. This routine computes the eigenvalues of a symmetric tridiagonal * matrix using Algorith 464 from CALGO. * */ #include #define EPS 1.0e-6 void qreig(int n, double *d, double *e2) { int i,k,m; double b,b2,f,g,h,p2,r2,s2; f=0.0; b2=0.0; b=0.0; e2[n]=0.0; for (k=1; k<=n; k++) { h=EPS*EPS*(d[k]*d[k]+e2[k]); if (b2 < h) { b=sqrt(h); b2=h; }; for (m=k; m<=n; m++) { if (e2[m] <= b2) goto cont1; }; cont1: if (m==k) goto root; nextit: g=d[k]; p2=sqrt(e2[k]); h=(d[k+1]-g)/(2.0*p2); r2=sqrt(h*h+1.0); if (h < 0.0) { h=p2/(h-r2); } else { h=p2/(h+r2); }; d[k]=h; h=g-h; f=f+h; for (i=k+1; i<=n; i++) { d[i]=d[i]-h; }; g=d[m]; if (g==0.0) g=b; h=g; s2=0.0; for (i=m-1; i>=k; i=i-1) { p2=g*h; r2=p2+e2[i]; e2[i+1]=s2*r2; s2=e2[i]/r2; d[i+1]=h+s2*(h+d[i]); g=d[i]-e2[i]/g; if (g==0.0) g=b; h=g*p2/r2; }; /* end for i */ e2[k]=s2*g*h; d[k]=h; if (e2[k]>b2) goto nextit; root: h=d[k]+f; for (i=k; i>=2; i=i-1) { if (h #include #include #include "declarations.h" double Fnorm(struct blockmatrix A) { int blk; double nrm; double temp; nrm=0; for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: temp=norm2(A.blocks[blk].blocksize,A.blocks[blk].data.vec+1); nrm += temp*temp; break; case MATRIX: temp=norm2(A.blocks[blk].blocksize*A.blocks[blk].blocksize, A.blocks[blk].data.mat); nrm += temp*temp; break; case PACKEDMATRIX: default: printf("Fnorm illegal block type \n"); exit(12); }; }; nrm=sqrt(nrm); return(nrm); } /* * The Knorm is the sum of the Fnorms of the blocks. */ double Knorm(struct blockmatrix A) { int blk; double nrm; double temp; nrm=0; for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: temp=norm2(A.blocks[blk].blocksize,A.blocks[blk].data.vec+1); nrm += temp; break; case MATRIX: temp=norm2(A.blocks[blk].blocksize*A.blocks[blk].blocksize, A.blocks[blk].data.mat); nrm += temp; break; case PACKEDMATRIX: default: printf("Fnorm illegal block type \n"); exit(12); }; }; return(nrm); } double mat1norm(struct blockmatrix A) { int blk; double nrm; double temp; nrm=0; for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: temp=norm1(A.blocks[blk].blocksize,A.blocks[blk].data.vec+1); nrm += temp; break; case MATRIX: temp=norm1(1*A.blocks[blk].blocksize*A.blocks[blk].blocksize, A.blocks[blk].data.mat); nrm += temp; break; case PACKEDMATRIX: default: printf("Fnorm illegal block type \n"); exit(12); }; }; return(nrm); } double matinfnorm(struct blockmatrix A) { int blk; int i; double nrm; nrm=0; for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=A.blocks[blk].blocksize; i++) { if (fabs(A.blocks[blk].data.vec[i]) > nrm) nrm=fabs(A.blocks[blk].data.vec[i]); }; break; case MATRIX: for (i=0; i nrm) nrm=fabs(A.blocks[blk].data.vec[i]); }; break; case PACKEDMATRIX: default: printf("Fnorm illegal block type \n"); exit(12); }; }; return(nrm); } Rcsdp/src/Csdp/lib/norms.c0000644000175100001440000000200014345225721015070 0ustar hornikusers/* * Calls the blas routine to compute a norm of a vector. */ #include #include "declarations.h" double norm2(int n, double *x) { double nrm; int incx=1; #ifdef NOUNDERBLAS #ifdef CAPSBLAS nrm=DNRM2(&n,x,&incx); #else nrm=dnrm2(&n,x,&incx); #endif #else #ifdef CAPSBLAS nrm=DNRM2_(&n,x,&incx); #else nrm=dnrm2_(&n,x,&incx); #endif #endif return(nrm); } double norm1(int n, double *x) { double nrm; int incx=1; #ifdef NOUNDERBLAS #ifdef CAPSBLAS nrm=DASUM(&n,x,&incx); #else nrm=dasum(&n,x,&incx); #endif #else #ifdef CAPSBLAS nrm=DASUM_(&n,x,&incx); #else nrm=dasum_(&n,x,&incx); #endif #endif return(nrm); } double norminf(int n, double *x) { int i; double nrm; int incx=1; #ifdef NOUNDERBLAS #ifdef CAPSBLAS i=IDAMAX(&n,x,&incx); nrm=fabs(x[i-1]); #else i=idamax(&n,x,&incx); nrm=fabs(x[i-1]); #endif #else #ifdef CAPSBLAS i=IDAMAX_(&n,x,&incx); nrm=fabs(x[i-1]); #else i=idamax_(&n,x,&incx); nrm=fabs(x[i-1]); #endif #endif return(nrm); } Rcsdp/src/Csdp/lib/readprob.c0000644000175100001440000004505114345235021015537 0ustar hornikusers/* Read in out a problem in SDPA sparse format. Return 0 if ok, 1 if failure. */ #include #include #include #include #include "declarations.h" void skip_to_end_of_line(FILE *fid); int get_line(FILE *fid, char *buffer, int bufsiz); int max_line_length(FILE *fid); void countentry(struct constraintmatrix *constraints, int matno, int blkno, int blocksize); void addentry(struct constraintmatrix *constraints, int matno, int blkno, int indexi, int indexj, double ent); int read_prob(char *fname, int *pn, int *pk, struct blockmatrix *pC, double **pa, struct constraintmatrix **pconstraints, int printlevel) { struct constraintmatrix *myconstraints; FILE *fid; int i,j; int buflen; char *buf; int c; int nblocks; int blksz; int blk; char *ptr1; char *ptr2; int matno; int blkno; int indexi; int indexj; double ent; int ret; struct sparseblock *p; struct sparseblock *q; struct sparseblock *prev; int *isdiag; double *tempdiag; /* * Open the file for reading, and determine the length of the longest * line. */ fid=fopen(fname,"r"); if (fid == (FILE *) NULL) { printf("Couldn't open problem file for reading! \n"); exit(11); }; buflen=max_line_length(fid)+10; fclose(fid); buf=(char *)malloc(buflen*sizeof(char)); if (buf == NULL) { printf("Storage allocation failed!\n"); exit(10); }; /* * In the first pass through the file, determine the size parameters, * and allocate space for everything. */ fid=fopen(fname,"r"); if (fid == (FILE *) NULL) { printf("Couldn't open problem file for reading! \n"); exit(11); }; /* * First, read through the comment lines. */ c=getc(fid); while ((c == '"') || (c == '*')) { skip_to_end_of_line(fid); c=getc(fid); }; ungetc(c,fid); /* * Get the number of constraints (primal variables in SDPA terminology) */ ret=get_line(fid,buf,buflen); if (ret == 0) { ret=sscanf(buf,"%d",pk); if ((ret!=1) || (*pk<=0)) { printf("Incorrect SDPA file. Couldn't read mDIM\n"); fclose(fid); return(1); }; } else { printf("Incorect SDPA file. Couldn't read mDIM \n"); fclose(fid); return(1); }; #ifndef NOSHORTS /* * If we're using unsigned shorts, make sure that the problem isn't * too big. */ if (*pk >= USHRT_MAX) { printf("This problem is too large to be solved by this version of the code!\n"); printf("Recompile without -DUSERSHORTINDS to fix the problem.\n"); exit(10); }; #endif #ifndef BIT64 /* * If operating in 32 bit mode, make sure that the dimension mDIM isn't * too big for 32 bits. If we don't do this check, then integer overflow * won't be detected, and we'll allocate a bogus amount of storage for * O. */ if (*pk > 23169) { printf("This problem is too large to be solved in 32 bit mode!\n"); exit(10); }; #endif /* * Read in the number of blocks. */ ret=get_line(fid,buf,buflen); if (ret == 0) { ret=sscanf(buf,"%d",&nblocks); if ((ret != 1) || (nblocks <= 0)) { printf("Incorect SDPA file. Couldn't read nBLOCKS. \n"); fclose(fid); return(1); }; } else { printf("Incorect SDPA file. Couldn't read nBLOCKS. \n"); fclose(fid); return(1); }; /* * Keep track of which blocks have off diagonal entries. */ isdiag=(int *)malloc((nblocks+1)*sizeof(int)); for (i=1; i<=nblocks; i++) isdiag[i]=1; #ifndef NOSHORTS /* * If we're using unsigned shorts, make sure that the problem isn't * too big. */ if (nblocks >= USHRT_MAX) { printf("This problem is too large to be solved by this version of the code!\n"); printf("Recompile with -DNOSHORTS to fix the problem.\n"); exit(10); }; #endif /* * Allocate space for the C matrix. */ pC->nblocks=nblocks; pC->blocks=(struct blockrec *)malloc((nblocks+1)*sizeof(struct blockrec)); if (pC->blocks == NULL) { printf("Storage allocation failed!\n"); exit(10); } /* * Allocate space for the constraints. */ myconstraints=(struct constraintmatrix *)malloc((*pk+1)*sizeof(struct constraintmatrix)); if (myconstraints == NULL) { printf("Storage allocation failed!\n"); exit(10); }; /* * Null out all pointers in constraints. */ for (i=1; i<=*pk; i++) { myconstraints[i].blocks=NULL; }; *pa=(double *)malloc((*pk+1)*sizeof(double)); if (*pa == NULL) { printf("Storage allocation failed!\n"); exit(10); }; /* * And read the block structure. */ *pn=0; ret=get_line(fid,buf,buflen); if (ret == 0) { /* * Decode nblocks numbers out of the buffer. Put the results in * block_structure. */ ptr1=buf; for (blk=1; blk<=nblocks; blk++) { blksz=strtol(ptr1,&ptr2,10); ptr1=ptr2; #ifndef NOSHORTS /* * If we're using unsigned shorts, make sure that the problem isn't * too big. */ if (abs(blksz) >= USHRT_MAX) { printf("This problem is too large to be solved by this version of the code!\n"); printf("Recompile with -DNOSHORTS to fix the problem.\n"); exit(10); }; #endif /* * negative numbers are used to indicate diagonal blocks. First, * update n. */ *pn=*pn+abs(blksz); /* * Now, handle diagonal blocks and matrix blocks separately. */ if (blksz < 0) { /* * It's a diag block. */ pC->blocks[blk].blocksize=abs(blksz); pC->blocks[blk].blockcategory=DIAG; pC->blocks[blk].data.vec=(double *)malloc((1+abs(blksz))*sizeof(double)); if (pC->blocks[blk].data.vec == NULL) { printf("Storage allocation failed!\n"); exit(10); }; for (i=1; i<=abs(blksz); i++) pC->blocks[blk].data.vec[i]=0.0; } else { /* * It's a matrix block. */ pC->blocks[blk].blocksize=abs(blksz); pC->blocks[blk].blockcategory=MATRIX; pC->blocks[blk].data.mat=(double *)malloc((blksz*blksz)*sizeof(double)); if (pC->blocks[blk].data.mat == NULL) { printf("Storage allocation failed!\n"); exit(10); }; for (j=1; j<=blksz; j++) for (i=1; i<=blksz; i++) pC->blocks[blk].data.mat[ijtok(i,j,blksz)]=0.0; }; }; } else { printf("Incorect SDPA file. Couldn't read block sizes.\n"); fclose(fid); free(isdiag); return(1); }; /* * Read in the right hand side values. */ ret=get_line(fid,buf,buflen); if (ret == 0) { /* * Decode k numbers out of the buffer. Put the results in * a. */ ptr1=buf; for (i=1; i<=*pk; i++) { (*pa)[i]=strtod(ptr1,&ptr2); ptr1=ptr2; }; } else { printf("Incorect SDPA file. Can't read values.\n"); fclose(fid); free(isdiag); return(1); }; /* * Now, loop through the entries, * counting entries in the constraint matrices block by block. */ ret=fscanf(fid,"%d %d %d %d %le ",&matno,&blkno,&indexi,&indexj,&ent); if (ret != 5) { printf("Incorect SDPA file. Return code from fscanf is %d, should be 5\n",ret); fclose(fid); free(isdiag); return(1); }; do { /* * Check the validity of these values. */ if ((matno < 0) || (matno > *pk) || (blkno<1) || (blkno>nblocks) || (indexi < 1) || (indexi > pC->blocks[blkno].blocksize) || (indexj < 1) || (indexj > pC->blocks[blkno].blocksize)) { printf("Incorect SDPA file. Bad values in line: %d %d %d %d %e \n", matno,blkno,indexi,indexj,ent); fclose(fid); free(isdiag); return(1); }; if (matno != 0) { if (ent != 0.0) countentry(myconstraints,matno,blkno,pC->blocks[blkno].blocksize); } else { /* * An entry in C. ignore it for now. */ }; ret=fscanf(fid,"%d %d %d %d %le",&matno,&blkno,&indexi,&indexj,&ent); } while (ret == 5); if ((ret != EOF) && (ret != 0)) { printf("Incorrect SDPA file, while reading entries. ret=%d \n",ret); fclose(fid); free(isdiag); return(1); }; fclose(fid); /* * Now, go through each of the blks in each of the constraint matrices, * and allocate space for the entries and indices. */ for (i=1; i<=*pk; i++) { p=myconstraints[i].blocks; while (p != NULL) { /* * allocate storage for the entries in this block of this constraint. */ p->entries=(double *)malloc((p->numentries+1)*sizeof(double)); if (p->entries == NULL) { printf("Storage allocation failed!\n"); exit(10); }; #ifdef NOSHORTS p->iindices=(int *)malloc((p->numentries+1)*sizeof(int)); #else p->iindices=(unsigned short *)malloc((p->numentries+1)*sizeof(unsigned short)); #endif if (p->iindices == NULL) { printf("Storage allocation failed!\n"); exit(10); }; #ifdef NOSHORTS p->jindices=(int *)malloc((p->numentries+1)*sizeof(int)); #else p->jindices=(unsigned short *)malloc((p->numentries+1)*sizeof(unsigned short)); #endif if (p->jindices == NULL) { printf("Storage allocation failed!\n"); exit(10); }; p->numentries=0; p=p->next; }; }; /* * In the final pass through the file, fill in the actual data. */ zero_mat(*pC); /* * Open the file for reading, and then read in all of the actual * matrix entries. * line. */ fid=fopen(fname,"r"); if (fid == (FILE *) NULL) { printf("Couldn't open problem file for reading! \n"); exit(11); }; /* * First, read through the comment lines. */ c=getc(fid); while ((c == '"') || (c == '*')) { skip_to_end_of_line(fid); c=getc(fid); }; ungetc(c,fid); /* * Get the number of constraints (primal variables in SDPA terminology) */ ret=get_line(fid,buf,buflen); if (ret == 0) { sscanf(buf,"%d",pk); } else { printf("Incorect SDPA file. Couldn't read mDIM \n"); fclose(fid); free(isdiag); return(1); }; /* * Read in the number of blocks. */ ret=get_line(fid,buf,buflen); if (ret == 0) { sscanf(buf,"%d",&nblocks); } else { printf("Incorect SDPA file. Couldn't read nBLOCKS. \n"); fclose(fid); free(isdiag); return(1); }; /* * And read the block structure. */ ret=get_line(fid,buf,buflen); if (ret != 0) { printf("Incorect SDPA file. Couldn't read block sizes.\n"); fclose(fid); free(isdiag); return(1); }; /* * Read in the right hand side values. */ ret=get_line(fid,buf,buflen); if (ret == 0) { /* * Decode k numbers out of the buffer. Put the results in * a. */ ptr1=buf; for (i=1; i<=*pk; i++) { (*pa)[i]=strtod(ptr1,&ptr2); ptr1=ptr2; }; } else { printf("Incorect SDPA file. Can't read a values.\n"); fclose(fid); free(isdiag); return(1); }; /* * Now, read the actual entries. */ ret=fscanf(fid,"%d %d %d %d %le ",&matno,&blkno,&indexi,&indexj,&ent); do { /* * No need for sanity checking the second time around. */ /* * Mark this block as not diagonal if indexi!=indexj. */ if ((indexi != indexj) && (ent != 0.0)) isdiag[blkno]=0; if (matno != 0) { if (ent != 0.0) addentry(myconstraints,matno,blkno,indexi,indexj,ent); } else { /* * An entry in C. */ if (ent != 0.0) { blksz=pC->blocks[blkno].blocksize; if (pC->blocks[blkno].blockcategory == DIAG) { pC->blocks[blkno].data.vec[indexi]=ent; } else { pC->blocks[blkno].data.mat[ijtok(indexi,indexj,blksz)]=ent; pC->blocks[blkno].data.mat[ijtok(indexj,indexi,blksz)]=ent; }; }; }; ret=fscanf(fid,"%d %d %d %d %le ",&matno,&blkno,&indexi,&indexj,&ent); } while (ret == 5); if ((ret != EOF) && (ret != 0)) { printf("Incorrect SDPA file. \n"); fclose(fid); free(isdiag); return(1); }; /* * At this point, we'll stop to recognize whether any of the blocks * are "hidden LP blocks" and correct the block type if needed. */ for (i=1; i<=nblocks; i++) { if ((pC->blocks[i].blockcategory != DIAG) && (isdiag[i]==1) && (pC->blocks[i].blocksize > 1)) { /* * We have a hidden diagonal block! */ if (printlevel >= 2) { printf("Block %d is actually diagonal.\n",i); }; blksz=pC->blocks[i].blocksize; tempdiag=(double *)malloc((blksz+1)*sizeof(double)); for (j=1; j<=blksz; j++) tempdiag[j]=pC->blocks[i].data.mat[ijtok(j,j,blksz)]; free(pC->blocks[i].data.mat); pC->blocks[i].data.vec=tempdiag; pC->blocks[i].blockcategory=DIAG; }; }; /* * If the printlevel is high, print out info on constraints and block * matrix structure. */ if (printlevel >= 3) { printf("Block matrix structure.\n"); for (blk=1; blk<=pC->nblocks; blk++) { if (pC->blocks[blk].blockcategory == DIAG) printf("Block %d, DIAG, %d \n",blk,pC->blocks[blk].blocksize); if (pC->blocks[blk].blockcategory == MATRIX) printf("Block %d, MATRIX, %d \n",blk,pC->blocks[blk].blocksize); }; }; /* * Next, setup issparse and NULL out all nextbyblock pointers. */ for (i=1; i<=*pk; i++) { p=myconstraints[i].blocks; while (p != NULL) { /* * First, set issparse. */ if (((p->numentries) > 0.25*(p->blocksize)) && ((p->numentries) > 15)) { p->issparse=0; } else { p->issparse=1; }; if (pC->blocks[p->blocknum].blockcategory == DIAG) p->issparse=1; /* * Setup the cross links. */ p->nextbyblock=NULL; p=p->next; }; }; /* * Now, cross link. */ prev=NULL; for (i=1; i<=*pk; i++) { p=myconstraints[i].blocks; while (p != NULL) { if (p->nextbyblock == NULL) { blk=p->blocknum; /* * link in the remaining blocks. */ for (j=i+1; j<=*pk; j++) { q=myconstraints[j].blocks; while (q != NULL) { if (q->blocknum == p->blocknum) { if (p->nextbyblock == NULL) { p->nextbyblock=q; q->nextbyblock=NULL; prev=q; } else { prev->nextbyblock=q; q->nextbyblock=NULL; prev=q; }; break; }; q=q->next; }; }; }; p=p->next; }; }; /* * Free unneeded memory. */ free(buf); free(isdiag); /* * Put back all the returned values. */ *pconstraints=myconstraints; fclose(fid); return(0); } /* * This routine skips to the end of the current line of input from the * file fid. */ void skip_to_end_of_line(FILE *fid) { char c; c=getc(fid); while (c != '\n') c=getc(fid); } /* * This routine reads a line of input into a buffer, and translates all * occurences of "," "{" "}" "(" ")" to spaces. * */ int get_line(FILE *fid, char *buffer, int bufsiz) { int i; int k; char c; k=0; c=getc(fid); while (c != '\n') { buffer[k]=c; k++; c=getc(fid); if (c == EOF) return(2); if (k >=bufsiz) { printf("Line too long in input file! Adjust BUFFERSIZ in readprob.c\n"); return(1); }; }; buffer[k]='\n'; buffer[k+1]=0; for (i=0; i<=k; i++) { if (buffer[i]==',') buffer[i]=' '; if (buffer[i]=='{') buffer[i]=' '; if (buffer[i]=='}') buffer[i]=' '; if (buffer[i]=='(') buffer[i]=' '; if (buffer[i]==')') buffer[i]=' '; }; return(0); } int max_line_length(FILE *fid) { int maxlen; int k; int c; maxlen=0; k=0; c=getc(fid); while (c != EOF) { k=0; while ((c != '\n') && (c != EOF)) { c=getc(fid); k++; }; if (k > maxlen) maxlen=k; c=getc(fid); }; return(maxlen); } void countentry(struct constraintmatrix *constraints, int matno, int blkno, int blocksize) { struct sparseblock *p; struct sparseblock *q; p=constraints[matno].blocks; if (p == NULL) { /* * We haven't yet allocated any blocks. */ p=(struct sparseblock *)malloc(sizeof(struct sparseblock)); if (p==NULL) { printf("Storage allocation failed!\n"); exit(10); }; p->constraintnum=matno; p->blocknum=blkno; p->numentries=1; p->next=NULL; p->entries=NULL; p->iindices=NULL; p->jindices=NULL; p->blocksize=blocksize; constraints[matno].blocks=p; } else { /* * We have some existing blocks. See whether this block is already * in the chain. */ while ((p->next) != NULL) { if (p->blocknum == blkno) { /* * Found the right block. */ p->numentries=p->numentries+1; return; }; p=p->next; }; /* * If we get here, we still have to check the last block in the * chain. */ if (p->blocknum == blkno) { /* * Found the right block. */ p->numentries=p->numentries+1; return; }; /* * If we get here, then the block doesn't exist yet. */ q=(struct sparseblock *)malloc(sizeof(struct sparseblock)); if (q==NULL) { printf("Storage allocation failed!\n"); exit(10); }; /* * Fill in information for this block. */ q->blocknum=blkno; q->constraintnum=matno; q->numentries=1; q->next=NULL; q->entries=NULL; p->iindices=NULL; p->jindices=NULL; q->blocksize=blocksize; /* * Now link it into the list. */ p->next=q; }; } void addentry(struct constraintmatrix *constraints, int matno, int blkno, int indexi, int indexj, double ent) { struct sparseblock *p; p=constraints[matno].blocks; if (p == NULL) { printf("Internal Error in CSDP!\n"); exit(100); } else { /* * We have some existing blocks. See whether this block is already * in the chain. */ while (p != NULL) { if (p->blocknum == blkno) { /* * Found the right block. */ p->numentries=(p->numentries)+1; p->entries[(p->numentries)]=ent; p->iindices[(p->numentries)]=indexi; p->jindices[(p->numentries)]=indexj; return; }; p=p->next; }; /* * If we get here, we have an internal error. */ printf("Internal Error in CSDP!\n"); exit(100); }; } Rcsdp/src/Csdp/lib/linesearch.c0000644000175100001440000001610014345232106016050 0ustar hornikusers/* Find the largest value for alpha<=1 such that X+alpha*dX is PD. Return the optimal X+alpha*dX in work1. If the search fails, return alpha=-1.0. */ #include #include #include #include "declarations.h" #define LANCZOSITS 30 double linesearch(int n, struct blockmatrix dX, struct blockmatrix work1, struct blockmatrix work2, struct blockmatrix work3, struct blockmatrix cholinv, double *q, double *z, double *workvec, double stepfrac, double start, int printlevel) { int i,j,jj; double alpha; double scale1; double scale2; int inc; double lalpha[LANCZOSITS+1]; double lbeta[LANCZOSITS+1]; double lbeta2[LANCZOSITS+1]; double evalues[LANCZOSITS+2]; double maxeigs[LANCZOSITS+1]; double reorth[LANCZOSITS+1]; double maxeig; int maxn,blk,method; double *lanczosvectors; /* * Allocate space for storing the Lanczos vectors. */ lanczosvectors=(double *) malloc((LANCZOSITS+1)*n*sizeof(double)); if (lanczosvectors==NULL) { printf("Storage Allocation Failed!\n"); exit(10); }; /* * First, figure out which method to use. If maxn is big, then use * lots of matrix/vector mults. If maxn is small, then multiply the * matrices once and for all. */ maxn=0; for (blk=1; blk<=work1.nblocks; blk++) { if ((work1.blocks[blk].blocksize > maxn) && (work1.blocks[blk].blockcategory==MATRIX)) maxn=work1.blocks[blk].blocksize; }; if (maxn > 6*LANCZOSITS) { method=1; /* matrix vector mults. */ if (printlevel >= 4) { printf("linesearch method 1 \n"); }; } else { method=2; /* matrix matrix mults. */ if (printlevel >= 4) { printf("linesearch method 2 \n"); }; }; /* * */ if (method==1) { scale1=-1.0; zero_mat(work1); store_unpacked(cholinv,work3); triu(work3); addscaledmat(work1,scale1,work3,work2); trans(work2); } else { /* * method=2. */ /* * First, multiply dX*cholinv. Store it in work3. */ scale1=1.0; scale2=0.0; store_unpacked(cholinv,work2); triu(work2); mat_mult(scale1,scale2,dX,work2,work3); /* * Now, find R^{-T} */ trans(work2); scale1=-1.0; scale2=0.0; mat_mult(scale1,scale2,work2,work3,work1); }; /* * Initialize q. */ for (i=1; i<=n; i++) q[i]=1.0/sqrt(n*1.0); for (i=1; i<=n; i++) lanczosvectors[ijtok(i,1,n)]=q[i]; /* * Next, perform the Lancoz iterations. */ maxeig=-1.0e200; for (j=1; j<=LANCZOSITS; j++) { maxeigs[j]=-1.0e100; if (method == 1) { matvec(work3,q,z); matvec(dX,z,workvec); matvec(work2,workvec,z); } else { matvec(work1,q,z); }; lalpha[j]=0.0; for (i=1; i<=n; i++) lalpha[j]=lalpha[j]+q[i]*z[i]; /* * We'll use BLAS routines to do the reorthogonalization. First, * Compute reorth=lanczosvectors'*z. Then compute * z=z-lanczosvectors*reorth. * * lanczosvectors is of size n by j, with lda=n. */ scale1=1.0; scale2=0.0; inc=1; #ifdef NOUNDERBLAS #ifdef CAPSBLAS DGEMV("T",&n,&j,&scale1,lanczosvectors,&n,z+1,&inc,&scale2,reorth+1,&inc); #else dgemv("T",&n,&j,&scale1,lanczosvectors,&n,z+1,&inc,&scale2,reorth+1,&inc); #endif #else #ifdef CAPSBLAS DGEMV_("T",&n,&j,&scale1,lanczosvectors,&n,z+1,&inc,&scale2,reorth+1,&inc); #else dgemv_("T",&n,&j,&scale1,lanczosvectors,&n,z+1,&inc,&scale2,reorth+1,&inc); #endif #endif scale1=-1.0; scale2=1.0; inc=1; #ifdef NOUNDERBLAS #ifdef CAPSBLAS DGEMV("N",&n,&j,&scale1,lanczosvectors,&n,reorth+1,&inc,&scale2,z+1,&inc); #else dgemv("N",&n,&j,&scale1,lanczosvectors,&n,reorth+1,&inc,&scale2,z+1,&inc); #endif #else #ifdef CAPSBLAS DGEMV_("N",&n,&j,&scale1,lanczosvectors,&n,reorth+1,&inc,&scale2,z+1,&inc); #else dgemv_("N",&n,&j,&scale1,lanczosvectors,&n,reorth+1,&inc,&scale2,z+1,&inc); #endif #endif scale1=1.0; scale2=0.0; inc=1; #ifdef NOUNDERBLAS #ifdef CAPSBLAS DGEMV("T",&n,&j,&scale1,lanczosvectors,&n,z+1,&inc,&scale2,reorth+1,&inc); #else dgemv("T",&n,&j,&scale1,lanczosvectors,&n,z+1,&inc,&scale2,reorth+1,&inc); #endif #else #ifdef CAPSBLAS DGEMV_("T",&n,&j,&scale1,lanczosvectors,&n,z+1,&inc,&scale2,reorth+1,&inc); #else dgemv_("T",&n,&j,&scale1,lanczosvectors,&n,z+1,&inc,&scale2,reorth+1,&inc); #endif #endif scale1=-1.0; scale2=1.0; inc=1; #ifdef NOUNDERBLAS #ifdef CAPSBLAS DGEMV("N",&n,&j,&scale1,lanczosvectors,&n,reorth+1,&inc,&scale2,z+1,&inc); #else dgemv("N",&n,&j,&scale1,lanczosvectors,&n,reorth+1,&inc,&scale2,z+1,&inc); #endif #else #ifdef CAPSBLAS DGEMV_("N",&n,&j,&scale1,lanczosvectors,&n,reorth+1,&inc,&scale2,z+1,&inc); #else dgemv_("N",&n,&j,&scale1,lanczosvectors,&n,reorth+1,&inc,&scale2,z+1,&inc); #endif #endif /* * Compute the norm of z. */ lbeta[j]=norm2(n,z+1); if (fabs(lbeta[j])<1.0e-16) { if (printlevel >= 3) printf("Small beta[j]\n"); j=j-1; jj=j; goto DONEEARLY; }; for (i=1; i<=n; i++) q[i]=z[i]/lbeta[j]; /* * Store the Lanczos vector. */ for (i=1; i<=n; i++) lanczosvectors[ijtok(i,j+1,n)]=q[i]; if (j>=5) { /* * Now, get ready to call qreig to get the eigenvalues. */ for (i=1; i<=j-1; i++) lbeta2[i]=lbeta[i]*lbeta[i]; for (i=1; i<=j; i++) evalues[i]=lalpha[i]; qreig(j,evalues,lbeta2); maxeigs[j]=-1.0e100; for (i=1; i<=j; i++) { if (printlevel >= 4) printf ("qreig evalue %e \n",evalues[i]); if (evalues[i] > maxeigs[j]) maxeigs[j]=evalues[i]; }; if (maxeigs[j] > maxeig) maxeig=maxeigs[j]; }; /* * Now, decide whether or not to stop. */ if ((j>=7) && (maxeigs[j] <= 1/(3*start)) && (fabs((maxeigs[j]-maxeigs[j-2])/(0.000001+fabs(maxeigs[j]))) < 0.2)) { if (printlevel >= 4) printf("Stopping on <1/3s j=%d \n",j); jj=j; goto DONEEARLY; }; if ((j>=8) && (fabs((maxeigs[j]-maxeigs[j-2])/(0.000001+fabs(maxeigs[j]))) < 0.02)) { if (printlevel >= 4) printf("Stopping here, on tightness j=%d \n",j); maxeig=maxeig+0.01*fabs(maxeig); jj=j; goto DONEEARLY; }; }; jj=LANCZOSITS; DONEEARLY: if (printlevel >= 4) { for (i=1; i<=jj; i++) printf("maxeigs[%d]=%e \n",i,maxeigs[i]); printf("maxeig %e \n",maxeig); }; if (printlevel >= 4) printf("Lancoz converged after %d iters\n",jj); if (printlevel >= 3) { if (maxeig >0.0) printf("eigsearch: alpha=%e \n",stepfrac/maxeig); else printf("eigsearch: alpha=+Inf\n"); }; if (((stepfrac/maxeig) < start) && (maxeig > 0)) alpha=stepfrac/maxeig; else alpha=start; free(lanczosvectors); return(alpha); } Rcsdp/src/Csdp/lib/calc_dobj.c0000644000175100001440000000102414345235152015636 0ustar hornikusers/* Compute the dual objective function value dobj=a'y. */ #include "declarations.h" double calc_dobj(int k, double *a, double *y, double constant_offset) { double s; int incx=1; s=0.0; #ifdef NOUNDERBLAS #ifdef CAPSBLAS s=s+DDOT(&k,a+1,&incx,y+1,&incx); #else s=s+ddot(&k,a+1,&incx,y+1,&incx); #endif #else #ifdef CAPSBLAS s=s+DDOT_(&k,a+1,&incx,y+1,&incx); #else s=s+ddot_(&k,a+1,&incx,y+1,&incx); #endif #endif return(s+constant_offset); } Rcsdp/src/Csdp/lib/addscaledmat.c0000644000175100001440000000211114345235105016340 0ustar hornikusers/* Add a matrix plus a multiple of a second matrix and put the result in a third matrix. C=A+scale*B */ #include #include #include "declarations.h" void addscaledmat(struct blockmatrix A, double scale, struct blockmatrix B, struct blockmatrix C) { int blk; int i,j; for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=A.blocks[blk].blocksize; i++) C.blocks[blk].data.vec[i] = A.blocks[blk].data.vec[i] + scale*B.blocks[blk].data.vec[i]; break; case MATRIX: #pragma omp parallel for schedule(dynamic,64) default(none) private(i,j) shared(A,B,C,scale,blk) for (j=1; j<=A.blocks[blk].blocksize; j++) for (i=1; i<=A.blocks[blk].blocksize; i++) C.blocks[blk].data.mat[ijtok(i,j,A.blocks[blk].blocksize)]= A.blocks[blk].data.mat[ijtok(i,j,A.blocks[blk].blocksize)]+ scale*B.blocks[blk].data.mat[ijtok(i,j,A.blocks[blk].blocksize)]; break; case PACKEDMATRIX: default: printf("addscaledmat illegal block type \n"); exit(12); }; }; } Rcsdp/src/Csdp/lib/freeprob.c0000644000175100001440000000172314345217556015560 0ustar hornikusers/* * Free the memory associated with a problem. */ #include #include "declarations.h" void free_prob(int n, int k, struct blockmatrix C, double *a, struct constraintmatrix *constraints, struct blockmatrix X, double *y, struct blockmatrix Z) { int i; struct sparseblock *ptr; struct sparseblock *oldptr; /* * First, free the vectors of doubles. */ free(y); free(a); /* * Now, the block matrices. */ free_mat(C); free_mat(X); free_mat(Z); /* * Finally, get rid of the constraints. */ if (constraints != NULL) { for (i=1; i<=k; i++) { /* * Get rid of constraint i. */ ptr=constraints[i].blocks; while (ptr != NULL) { free(ptr->entries); free(ptr->iindices); free(ptr->jindices); oldptr=ptr; ptr=ptr->next; free(oldptr); }; }; /* * Finally, free the constraints array. */ free(constraints); }; } Rcsdp/src/Csdp/lib/matvec.c0000644000175100001440000000224714345220402015215 0ustar hornikusers/* * Compute y=A*x * * We use * */ #include #include #include "declarations.h" void matvec(struct blockmatrix A, double *x, double *y) { int blk,i,n; int p; double *ap; double scale1; double scale2; int inc; /* * Work through the blocks one at a time. */ p=1; for (blk=1; blk<=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=A.blocks[blk].blocksize; i++) { y[p]=A.blocks[blk].data.vec[i]*x[p]; p++; }; break; case MATRIX: /* * Call dgemm to do the matrix multiplication. */ n=A.blocks[blk].blocksize; ap=A.blocks[blk].data.mat; inc=1; scale1=1.0; scale2=0.0; #ifdef NOUNDERBLAS #ifdef CAPSBLAS DGEMV("N",&n,&n,&scale1,ap,&n,x+p,&inc,&scale2,y+p,&inc); #else dgemv("N",&n,&n,&scale1,ap,&n,x+p,&inc,&scale2,y+p,&inc); #endif #else #ifdef CAPSBLAS DGEMV_("N",&n,&n,&scale1,ap,&n,x+p,&inc,&scale2,y+p,&inc); #else dgemv_("N",&n,&n,&scale1,ap,&n,x+p,&inc,&scale2,y+p,&inc); #endif #endif p=p+n; break; case PACKEDMATRIX: default: printf("matvec illegal block type \n"); exit(12); }; }; } Rcsdp/src/Csdp/lib/calc_pobj.c0000644000175100001440000000202314345223656015660 0ustar hornikusers/* Compute the primal objective function value pobj=Trace(C*X) Since we only need the trace, it makes more sense to just compute the diagonal of the product and sum the entries.. */ #include #include #include "declarations.h" double calc_pobj(struct blockmatrix C, struct blockmatrix X, double constant_offset) { int blk; int i,j; double pobj; pobj=constant_offset; for (blk=1; blk<=C.nblocks; blk++) { switch (C.blocks[blk].blockcategory) { case DIAG: for (i=1; i<=C.blocks[blk].blocksize; i++) { pobj += C.blocks[blk].data.vec[i]*X.blocks[blk].data.vec[i]; }; break; case MATRIX: for (j=1; j<=C.blocks[blk].blocksize; j++) for (i=1; i<=C.blocks[blk].blocksize; i++) pobj += C.blocks[blk].data.mat[ijtok(i,j,C.blocks[blk].blocksize)]*X.blocks[blk].data.mat[ijtok(j,i,C.blocks[blk].blocksize)]; break; default: printf("calc_pobj illegal block type!\n"); exit(12); }; }; return(pobj); } Rcsdp/src/Csdp/lib/allocmat.c0000644000175100001440000000355314345235121015537 0ustar hornikusers/* * Allocate space for a block matrix. Get strucutre info from A, and * allocate the matrix B with matching structure. */ #include #include #include "declarations.h" void alloc_mat(struct blockmatrix A, struct blockmatrix *pB) { int blk; /* * First put up the number of blocks. */ pB->nblocks=A.nblocks; /* * Then allocate space for the block records. */ pB->blocks=(struct blockrec *)malloc(sizeof(struct blockrec)*(A.nblocks+1)); if (pB->blocks == NULL) { printf("Storage allocation failed!\n"); exit(10); }; /* * Now, fill in the info for each block. */ for (blk=1; blk <=A.nblocks; blk++) { pB->blocks[blk].blockcategory=A.blocks[blk].blockcategory; pB->blocks[blk].blocksize=A.blocks[blk].blocksize; switch (A.blocks[blk].blockcategory) { case DIAG: pB->blocks[blk].data.vec=(double *)malloc(sizeof(double)*(A.blocks[blk].blocksize+1)); if (pB->blocks[blk].data.vec == NULL) { printf("Storage allocation failed!\n"); exit(10); }; break; case MATRIX: pB->blocks[blk].data.mat=(double *)malloc(sizeof(double)*(A.blocks[blk].blocksize)*(A.blocks[blk].blocksize)); if (pB->blocks[blk].data.mat == NULL) { printf("Storage allocation failed!\n"); exit(10); }; break; default: printf("alloc_mat illegal block type!\n"); exit(12); }; }; } void free_mat(struct blockmatrix A) { int blk; /* * First, free the space for each block. */ for (blk=1; blk <=A.nblocks; blk++) { switch (A.blocks[blk].blockcategory) { case DIAG: free(A.blocks[blk].data.vec); break; case MATRIX: free(A.blocks[blk].data.mat); break; default: printf("free_mat illegal block type!\n"); exit(12); }; }; /* * Then free space for the block records. */ free(A.blocks); } Rcsdp/src/Csdp/solver/0000755000175100001440000000000014342635402014340 5ustar hornikusersRcsdp/src/Csdp/solver/csdp.c0000644000175100001440000000431514342635402015440 0ustar hornikusers#include #include #include #include "declarations.h" /* * Stuff for keeping track of time. */ #ifdef USEGETTIME #include /* definition of NULL */ #include /* definition of timeval struct and protyping of gettime ofday */ extern double starttime; extern double opotime; extern double factortime; extern double othertime; extern double totaltime; extern double othertime1; extern double othertime2; extern double othertime3; extern struct timeval tp; extern double t1; extern double t2; extern double starttime; extern double endtime; #endif int main(argc,argv) int argc; char *argv[]; { int ret; int n; int k; struct blockmatrix C; double *a; struct constraintmatrix *constraints; struct blockmatrix X,Z; double *y; double pobj,dobj; #ifdef USEGETTIME gettimeofday(&tp, NULL); starttime=(double)tp.tv_sec+(1.e-6)*tp.tv_usec; #endif /* * Check that we have enough arguments. */ if ((argc < 2) || (argc > 4)) { printf("CSDP 6.1.1\n"); printf(" \n"); printf("Usage: \n"); printf("\n"); printf("csdp [] []\n"); exit(1); }; /* * First, read the problem in. */ ret=read_prob(argv[1],&n,&k,&C,&a,&constraints,1); if (ret != 0) { printf("Giving up.\n"); exit(10); }; if (argc == 4) { ret=read_sol(argv[3],n,k,C,&X,&y,&Z); if (ret != 0) { printf("Giving up.\n"); exit(10); }; } else { initsoln(n,k,C,a,constraints,&X,&y,&Z); }; /* * Call the solver. */ ret=easy_sdp(n,k,C,a,constraints,0.0,&X,&y,&Z,&pobj,&dobj); /* * Write out the solution if necessary. */ if (argc >= 3) write_sol(argv[2],n,k,X,y,Z); /* * Free up memory. */ free_prob(n,k,C,a,constraints,X,y,Z); #ifdef USEGETTIME gettimeofday(&tp, NULL); endtime=(double)tp.tv_sec+(1.e-6)*tp.tv_usec; totaltime=endtime-starttime; othertime=totaltime-opotime-factortime; printf("Elements time: %f \n",opotime); printf("Factor time: %f \n",factortime); printf("Other time: %f \n",othertime); printf("Total time: %f \n",totaltime); #endif return(ret); } Rcsdp/src/Csdp/solver/Makefile0000644000175100001440000001274514414754226016017 0ustar hornikusers# # Uncomment this line to specify the C compiler if the system default isn't # what you want to use. # #CC=cc # # Use this line to specify options for the C compiler. You'll probably # want to turn on optimizations. You may also have to use some of the # following flags: # # -DCAPSBLAS if BLAS routine names are capitalized. # -DCAPSLAPACK if LAPACK routine names are capitalized. # -DNOUNDERBLAS if BLAS routine names have no underscore. # -DNOUNDERLAPACK if LAPACK routine names have no underscore. # -DBIT64 For I32LP64 systems. # -DNOSHORTS Allow for (LP) blocks of more than 65535 variables. # -DUSEOPENMP To turn on OpenMP parallelization # -DSETNUMTHREADS To use with an OpenMP aware BLAS library. # -DUSEGETTIME Use ANSI C gettime() routine to determine clock # time used in different parts of the code. # # The default settings for gcc: # CFLAGS=-O3 -ansi -Wall -DNOSHORTS -DUSEGETTIME -I../include # # Notes on CFLAGS. # # 1. The -DNOSHORTS flag should always be used. When this is turned off, # it causes the code to use unsigned short integers (maximum value 65535) # in the data structures that describe the problem. This can cause problems # when some of the size parameters are larger than 65535. # # 2. -DUSEGETTIME is generally useful. However, this functionality isn't # available under Windows/MSYS/MINGW, so you should remove it when compiling # for that system. # # 3. By default, we assume that BLAS routines have names like ddot_(), # but some systems use ddot(), DDOT(), or DDOT_() instead. A similar issue # effects the LAPACK routines. The flags -DCAPSBLAS, -DCAPSLAPACK, # -DNOUNDERBLAS. and -DNOUNDERLAPACK are used to handle such situations. # # 4. The code can be built on 64 bit systems that use an I32LP64 model # in which int's are 32 bits, long's and pointers are 64 bits. Note that # that is the model on all 64 bit Linux and Unix systems that I'm aware of, # but it is not the model used by MS in its 64 bit Windows! To build a # 64 bit version of the code, use -DBIT64. You may also need to add a CFLAG # to tell your compiler to produce 64 bit code. For example, with gcc, # you'll need to add "-m64" to CFLAGS to produce 64 bit code. # # 5. If you have multiple CPU's, and if your compiler supports OpenMP, then # you should definitely build a parallel version of CSDP. To do this, # add "-DUSEOPENMP" to CFLAGS. If your BLAS/LAPACK library routines # use OpenMP's conventions for setting the number of threads to use, then # you should also add "-DSETNUMTHREADS". Note that ATLAS does not # currently work with "-DSETNUMTHREADS", but you can use SETNUMTHREADS # on Solaris with -lsunperf and AIX systems with -lesslsmp. # # 6. Using gcc, you can greatly improve the efficency of the code if you # specify your processor type. Examples are given below, use the default # if you are unsure. More examples may be found at # # http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html # # An AMD Athlon XP based machine: # CFLAGS=-march=athlon-xp -O3 -ansi -Wall -DNOSHORTS -I../include # An Intel Pentum 4 based amchine: # CFLAGS=-march=pentum4 -O3 -ansi -Wall -DNOSHORTS -I../include # # 7. If you change the CFLAGS, make sure that you use the same CFLAGS # in the Makefiles in the solver and theta directories! # # The code depends on several libraries: # # sdp The CSDP subroutine library # lapack The LAPACK linear algebra library # blas The BLAS basic linear algebra library # # In addition, if you're using gcc to compile the C code, then you'll need: # # gfortran The gnu C/Fortran 77 compatibility library (called # g2c in versions of gcc before gcc 4.0.) # m The C math run time library. # # Use this line to specify where the SDP and linear algebra libraries are # to be found. # # -L../lib look in the ../lib directory # -lsdp get libsdp.a from the ../lib directory # -llapack get liblapack.a or liblapack.so # -lblas get libblas.a or libblas.so # -lgfortran get libgfortran.a or libgfortran.so # -lm get libm.a or libm.so # # The default settings for a Linux system with gcc3, lapack, blas, and # gfortran: # LIBS=-L../lib -lsdp -llapack -lblas -lgfortran -lm # # 1. Warning about debian systems. For some absurb reason, the BLAS # package in debian has the BLAS library named libblas-3.a, rather than # libblas.a. You can either modify the LIBS= line, or you can create # a symbolic link from /usr/lib/libblas.a to /usr/lib/libblas-3.a. # # 2. An alternative set of flags for use with the ATLAS BLAS on a Linux system. # # LIBS=-L../lib -lsdp -llapack -lf77blas -lcblas -latlas -lgfortran -lm # # 3. Special note on gcc 4. In versions of gcc before gcc 4.0, use -lg2c # instead of -lgfortran. # # 4. An alternative set of flags for use with the ATLAS BLAS, gcc 4.2, and # OpenMP on a linux system. # # LIBS=-L../lib -lsdp -llapack -lptf77blas -lptcblas -latlas -lgomp -lrt -lpthread -lgfortran -lm # # 5. An alternative set of flags for use with Intel's icc 11.0 and MKL. # # CC=icc # CFLAGS=-O3 -m64 -openmp -DBIT64 -DUSEOPENMP -DNOSHORTS -DSETNUMTHREADS # -I../include # LIBS=-openmp -L../lib -lsdp -mkl -lm # # This builds the stand alone solver. # csdp: csdp.o $(CC) $(CFLAGS) csdp.o $(LIBS) -o csdp # # To clean out the directory: # clean: rm -f *.o rm -f csdp Rcsdp/src/Csdp/Makefile0000644000175100001440000000150714414754226014477 0ustar hornikusers# # This Makefile can be used to automatically build the entire package. # # If you make changes in the "Makefile" under any subdirectory, you can # rebuild the system with "make clean" followed by "make all". # # # Generic. On most systems, this should handle everything. # all: cd lib; make libsdp.a cd solver; make csdp cd theta; make all cd example; make all # # Perform a unitTest # unitTest: cd test; make all # # Install the executables in /usr/local/bin. # install: cp -f solver/csdp /usr/local/bin cp -f theta/theta /usr/local/bin cp -f theta/graphtoprob /usr/local/bin cp -f theta/complement /usr/local/bin cp -f theta/rand_graph /usr/local/bin # # Clean out all of the directories. # clean: cd lib; make clean cd solver; make clean cd theta; make clean cd test; make clean cd example; make clean Rcsdp/src/Csdp/test/0000755000175100001440000000000014342635402014005 5ustar hornikusersRcsdp/src/Csdp/test/theta1.correct0000644000175100001440000000270714342635402016564 0ustar hornikusersIter: 0 Ap: 0.00e+00 Pobj: 1.4644661e+04 Ad: 0.00e+00 Dobj: 0.0000000e+00 Iter: 1 Ap: 9.31e-01 Pobj: 5.7513865e+03 Ad: 1.00e+00 Dobj: 8.0172003e+01 Iter: 2 Ap: 9.21e-01 Pobj: 2.3227402e+02 Ad: 1.00e+00 Dobj: 8.2749235e+01 Iter: 3 Ap: 9.30e-01 Pobj: 1.0521019e+01 Ad: 1.00e+00 Dobj: 8.4447722e+01 Iter: 4 Ap: 1.00e+00 Pobj: 2.5047625e+00 Ad: 1.00e+00 Dobj: 7.2126480e+01 Iter: 5 Ap: 1.00e+00 Pobj: 7.5846337e+00 Ad: 1.00e+00 Dobj: 4.2853659e+01 Iter: 6 Ap: 1.00e+00 Pobj: 1.5893126e+01 Ad: 1.00e+00 Dobj: 3.0778169e+01 Iter: 7 Ap: 1.00e+00 Pobj: 1.9887401e+01 Ad: 1.00e+00 Dobj: 2.4588662e+01 Iter: 8 Ap: 1.00e+00 Pobj: 2.1623330e+01 Ad: 1.00e+00 Dobj: 2.3465172e+01 Iter: 9 Ap: 1.00e+00 Pobj: 2.2611983e+01 Ad: 1.00e+00 Dobj: 2.3097049e+01 Iter: 10 Ap: 1.00e+00 Pobj: 2.2939498e+01 Ad: 1.00e+00 Dobj: 2.3010908e+01 Iter: 11 Ap: 1.00e+00 Pobj: 2.2996259e+01 Ad: 1.00e+00 Dobj: 2.3000637e+01 Iter: 12 Ap: 1.00e-00 Pobj: 2.2999835e+01 Ad: 1.00e+00 Dobj: 2.3000020e+01 Iter: 13 Ap: 1.00e+00 Pobj: 2.2999993e+01 Ad: 1.00e+00 Dobj: 2.2999999e+01 Iter: 14 Ap: 1.00e+00 Pobj: 2.3000000e+01 Ad: 1.00e+00 Dobj: 2.3000000e+01 Success: SDP solved Primal objective value: 2.3000000e+01 Dual objective value: 2.3000000e+01 Relative primal infeasibility: 1.50e-18 Relative dual infeasibility: 3.93e-09 Real Relative Gap: 7.21e-09 XZ Relative Gap: 7.82e-09 DIMACS error measures: 1.50e-18 0.00e+00 1.00e-07 0.00e+00 7.21e-09 7.82e-09 Rcsdp/src/Csdp/test/g500000644000175100001440000000126614342635402014330 0ustar hornikusers50 103 1 2 1 28 1 50 2 21 2 22 2 36 2 49 3 10 3 30 3 34 3 35 3 49 4 11 4 12 4 17 4 34 5 18 5 19 5 34 5 46 6 19 6 21 6 30 6 38 7 9 7 22 7 23 7 44 7 45 8 29 8 31 8 34 9 20 9 33 10 23 10 38 10 49 11 22 11 34 11 35 11 46 12 14 13 17 13 47 14 15 14 34 14 38 14 39 14 49 15 16 15 28 15 35 15 46 15 48 16 28 16 30 16 43 17 30 18 37 18 38 19 21 19 25 19 39 19 41 20 30 20 34 21 33 21 46 22 37 22 40 23 30 23 37 23 39 23 43 23 46 24 25 25 33 25 38 26 39 26 46 27 29 30 31 30 36 32 33 32 43 32 46 33 41 33 46 33 48 35 40 35 48 36 46 37 39 37 42 37 43 37 48 38 42 39 45 39 46 40 41 40 47 41 43 43 48 Rcsdp/src/Csdp/test/g50.correct0000644000175100001440000000301214342635402015757 0ustar hornikusersGraph is of size 50 103 Iter: 0 Ap: 0.00e+00 Pobj: 1.0355339e+04 Ad: 0.00e+00 Dobj: 0.0000000e+00 Iter: 1 Ap: 9.31e-01 Pobj: 4.0673058e+03 Ad: 1.00e+00 Dobj: 8.0167820e+01 Iter: 2 Ap: 9.21e-01 Pobj: 1.6422689e+02 Ad: 1.00e+00 Dobj: 8.2693150e+01 Iter: 3 Ap: 9.37e-01 Pobj: 7.4239118e+00 Ad: 1.00e+00 Dobj: 8.3659491e+01 Iter: 4 Ap: 1.00e+00 Pobj: 2.7981497e+00 Ad: 1.00e+00 Dobj: 6.5829729e+01 Iter: 5 Ap: 1.00e+00 Pobj: 8.9982564e+00 Ad: 1.00e+00 Dobj: 4.2079241e+01 Iter: 6 Ap: 1.00e+00 Pobj: 1.6341142e+01 Ad: 1.00e+00 Dobj: 2.9128013e+01 Iter: 7 Ap: 1.00e+00 Pobj: 2.0177508e+01 Ad: 1.00e+00 Dobj: 2.4399455e+01 Iter: 8 Ap: 1.00e+00 Pobj: 2.1767179e+01 Ad: 1.00e+00 Dobj: 2.3397824e+01 Iter: 9 Ap: 1.00e+00 Pobj: 2.2707691e+01 Ad: 1.00e+00 Dobj: 2.3068698e+01 Iter: 10 Ap: 1.00e+00 Pobj: 2.2952986e+01 Ad: 1.00e+00 Dobj: 2.3008482e+01 Iter: 11 Ap: 1.00e+00 Pobj: 2.2997432e+01 Ad: 9.99e-01 Dobj: 2.3000437e+01 Iter: 12 Ap: 1.00e-00 Pobj: 2.2999888e+01 Ad: 1.00e+00 Dobj: 2.3000011e+01 Iter: 13 Ap: 1.00e+00 Pobj: 2.2999995e+01 Ad: 1.00e+00 Dobj: 2.3000000e+01 Iter: 14 Ap: 9.55e-01 Pobj: 2.3000000e+01 Ad: 9.60e-01 Dobj: 2.3000000e+01 Success: SDP solved Primal objective value: 2.3000000e+01 Dual objective value: 2.3000000e+01 Relative primal infeasibility: 2.78e-16 Relative dual infeasibility: 7.34e-09 Real Relative Gap: 4.13e-09 XZ Relative Gap: 5.26e-09 DIMACS error measures: 2.78e-16 0.00e+00 1.87e-07 0.00e+00 4.13e-09 5.26e-09 The Lovasz Theta Number is 2.3000000e+01 Rcsdp/src/Csdp/test/theta1.dat-s0000644000175100001440000015055114342635402016134 0ustar hornikusers104 1 50 1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0 1 1 1 1.000000000000000000e+00 0 1 1 2 1.000000000000000000e+00 0 1 1 3 1.000000000000000000e+00 0 1 1 4 1.000000000000000000e+00 0 1 1 5 1.000000000000000000e+00 0 1 1 6 1.000000000000000000e+00 0 1 1 7 1.000000000000000000e+00 0 1 1 8 1.000000000000000000e+00 0 1 1 9 1.000000000000000000e+00 0 1 1 10 1.000000000000000000e+00 0 1 1 11 1.000000000000000000e+00 0 1 1 12 1.000000000000000000e+00 0 1 1 13 1.000000000000000000e+00 0 1 1 14 1.000000000000000000e+00 0 1 1 15 1.000000000000000000e+00 0 1 1 16 1.000000000000000000e+00 0 1 1 17 1.000000000000000000e+00 0 1 1 18 1.000000000000000000e+00 0 1 1 19 1.000000000000000000e+00 0 1 1 20 1.000000000000000000e+00 0 1 1 21 1.000000000000000000e+00 0 1 1 22 1.000000000000000000e+00 0 1 1 23 1.000000000000000000e+00 0 1 1 24 1.000000000000000000e+00 0 1 1 25 1.000000000000000000e+00 0 1 1 26 1.000000000000000000e+00 0 1 1 27 1.000000000000000000e+00 0 1 1 28 1.000000000000000000e+00 0 1 1 29 1.000000000000000000e+00 0 1 1 30 1.000000000000000000e+00 0 1 1 31 1.000000000000000000e+00 0 1 1 32 1.000000000000000000e+00 0 1 1 33 1.000000000000000000e+00 0 1 1 34 1.000000000000000000e+00 0 1 1 35 1.000000000000000000e+00 0 1 1 36 1.000000000000000000e+00 0 1 1 37 1.000000000000000000e+00 0 1 1 38 1.000000000000000000e+00 0 1 1 39 1.000000000000000000e+00 0 1 1 40 1.000000000000000000e+00 0 1 1 41 1.000000000000000000e+00 0 1 1 42 1.000000000000000000e+00 0 1 1 43 1.000000000000000000e+00 0 1 1 44 1.000000000000000000e+00 0 1 1 45 1.000000000000000000e+00 0 1 1 46 1.000000000000000000e+00 0 1 1 47 1.000000000000000000e+00 0 1 1 48 1.000000000000000000e+00 0 1 1 49 1.000000000000000000e+00 0 1 1 50 1.000000000000000000e+00 0 1 2 2 1.000000000000000000e+00 0 1 2 3 1.000000000000000000e+00 0 1 2 4 1.000000000000000000e+00 0 1 2 5 1.000000000000000000e+00 0 1 2 6 1.000000000000000000e+00 0 1 2 7 1.000000000000000000e+00 0 1 2 8 1.000000000000000000e+00 0 1 2 9 1.000000000000000000e+00 0 1 2 10 1.000000000000000000e+00 0 1 2 11 1.000000000000000000e+00 0 1 2 12 1.000000000000000000e+00 0 1 2 13 1.000000000000000000e+00 0 1 2 14 1.000000000000000000e+00 0 1 2 15 1.000000000000000000e+00 0 1 2 16 1.000000000000000000e+00 0 1 2 17 1.000000000000000000e+00 0 1 2 18 1.000000000000000000e+00 0 1 2 19 1.000000000000000000e+00 0 1 2 20 1.000000000000000000e+00 0 1 2 21 1.000000000000000000e+00 0 1 2 22 1.000000000000000000e+00 0 1 2 23 1.000000000000000000e+00 0 1 2 24 1.000000000000000000e+00 0 1 2 25 1.000000000000000000e+00 0 1 2 26 1.000000000000000000e+00 0 1 2 27 1.000000000000000000e+00 0 1 2 28 1.000000000000000000e+00 0 1 2 29 1.000000000000000000e+00 0 1 2 30 1.000000000000000000e+00 0 1 2 31 1.000000000000000000e+00 0 1 2 32 1.000000000000000000e+00 0 1 2 33 1.000000000000000000e+00 0 1 2 34 1.000000000000000000e+00 0 1 2 35 1.000000000000000000e+00 0 1 2 36 1.000000000000000000e+00 0 1 2 37 1.000000000000000000e+00 0 1 2 38 1.000000000000000000e+00 0 1 2 39 1.000000000000000000e+00 0 1 2 40 1.000000000000000000e+00 0 1 2 41 1.000000000000000000e+00 0 1 2 42 1.000000000000000000e+00 0 1 2 43 1.000000000000000000e+00 0 1 2 44 1.000000000000000000e+00 0 1 2 45 1.000000000000000000e+00 0 1 2 46 1.000000000000000000e+00 0 1 2 47 1.000000000000000000e+00 0 1 2 48 1.000000000000000000e+00 0 1 2 49 1.000000000000000000e+00 0 1 2 50 1.000000000000000000e+00 0 1 3 3 1.000000000000000000e+00 0 1 3 4 1.000000000000000000e+00 0 1 3 5 1.000000000000000000e+00 0 1 3 6 1.000000000000000000e+00 0 1 3 7 1.000000000000000000e+00 0 1 3 8 1.000000000000000000e+00 0 1 3 9 1.000000000000000000e+00 0 1 3 10 1.000000000000000000e+00 0 1 3 11 1.000000000000000000e+00 0 1 3 12 1.000000000000000000e+00 0 1 3 13 1.000000000000000000e+00 0 1 3 14 1.000000000000000000e+00 0 1 3 15 1.000000000000000000e+00 0 1 3 16 1.000000000000000000e+00 0 1 3 17 1.000000000000000000e+00 0 1 3 18 1.000000000000000000e+00 0 1 3 19 1.000000000000000000e+00 0 1 3 20 1.000000000000000000e+00 0 1 3 21 1.000000000000000000e+00 0 1 3 22 1.000000000000000000e+00 0 1 3 23 1.000000000000000000e+00 0 1 3 24 1.000000000000000000e+00 0 1 3 25 1.000000000000000000e+00 0 1 3 26 1.000000000000000000e+00 0 1 3 27 1.000000000000000000e+00 0 1 3 28 1.000000000000000000e+00 0 1 3 29 1.000000000000000000e+00 0 1 3 30 1.000000000000000000e+00 0 1 3 31 1.000000000000000000e+00 0 1 3 32 1.000000000000000000e+00 0 1 3 33 1.000000000000000000e+00 0 1 3 34 1.000000000000000000e+00 0 1 3 35 1.000000000000000000e+00 0 1 3 36 1.000000000000000000e+00 0 1 3 37 1.000000000000000000e+00 0 1 3 38 1.000000000000000000e+00 0 1 3 39 1.000000000000000000e+00 0 1 3 40 1.000000000000000000e+00 0 1 3 41 1.000000000000000000e+00 0 1 3 42 1.000000000000000000e+00 0 1 3 43 1.000000000000000000e+00 0 1 3 44 1.000000000000000000e+00 0 1 3 45 1.000000000000000000e+00 0 1 3 46 1.000000000000000000e+00 0 1 3 47 1.000000000000000000e+00 0 1 3 48 1.000000000000000000e+00 0 1 3 49 1.000000000000000000e+00 0 1 3 50 1.000000000000000000e+00 0 1 4 4 1.000000000000000000e+00 0 1 4 5 1.000000000000000000e+00 0 1 4 6 1.000000000000000000e+00 0 1 4 7 1.000000000000000000e+00 0 1 4 8 1.000000000000000000e+00 0 1 4 9 1.000000000000000000e+00 0 1 4 10 1.000000000000000000e+00 0 1 4 11 1.000000000000000000e+00 0 1 4 12 1.000000000000000000e+00 0 1 4 13 1.000000000000000000e+00 0 1 4 14 1.000000000000000000e+00 0 1 4 15 1.000000000000000000e+00 0 1 4 16 1.000000000000000000e+00 0 1 4 17 1.000000000000000000e+00 0 1 4 18 1.000000000000000000e+00 0 1 4 19 1.000000000000000000e+00 0 1 4 20 1.000000000000000000e+00 0 1 4 21 1.000000000000000000e+00 0 1 4 22 1.000000000000000000e+00 0 1 4 23 1.000000000000000000e+00 0 1 4 24 1.000000000000000000e+00 0 1 4 25 1.000000000000000000e+00 0 1 4 26 1.000000000000000000e+00 0 1 4 27 1.000000000000000000e+00 0 1 4 28 1.000000000000000000e+00 0 1 4 29 1.000000000000000000e+00 0 1 4 30 1.000000000000000000e+00 0 1 4 31 1.000000000000000000e+00 0 1 4 32 1.000000000000000000e+00 0 1 4 33 1.000000000000000000e+00 0 1 4 34 1.000000000000000000e+00 0 1 4 35 1.000000000000000000e+00 0 1 4 36 1.000000000000000000e+00 0 1 4 37 1.000000000000000000e+00 0 1 4 38 1.000000000000000000e+00 0 1 4 39 1.000000000000000000e+00 0 1 4 40 1.000000000000000000e+00 0 1 4 41 1.000000000000000000e+00 0 1 4 42 1.000000000000000000e+00 0 1 4 43 1.000000000000000000e+00 0 1 4 44 1.000000000000000000e+00 0 1 4 45 1.000000000000000000e+00 0 1 4 46 1.000000000000000000e+00 0 1 4 47 1.000000000000000000e+00 0 1 4 48 1.000000000000000000e+00 0 1 4 49 1.000000000000000000e+00 0 1 4 50 1.000000000000000000e+00 0 1 5 5 1.000000000000000000e+00 0 1 5 6 1.000000000000000000e+00 0 1 5 7 1.000000000000000000e+00 0 1 5 8 1.000000000000000000e+00 0 1 5 9 1.000000000000000000e+00 0 1 5 10 1.000000000000000000e+00 0 1 5 11 1.000000000000000000e+00 0 1 5 12 1.000000000000000000e+00 0 1 5 13 1.000000000000000000e+00 0 1 5 14 1.000000000000000000e+00 0 1 5 15 1.000000000000000000e+00 0 1 5 16 1.000000000000000000e+00 0 1 5 17 1.000000000000000000e+00 0 1 5 18 1.000000000000000000e+00 0 1 5 19 1.000000000000000000e+00 0 1 5 20 1.000000000000000000e+00 0 1 5 21 1.000000000000000000e+00 0 1 5 22 1.000000000000000000e+00 0 1 5 23 1.000000000000000000e+00 0 1 5 24 1.000000000000000000e+00 0 1 5 25 1.000000000000000000e+00 0 1 5 26 1.000000000000000000e+00 0 1 5 27 1.000000000000000000e+00 0 1 5 28 1.000000000000000000e+00 0 1 5 29 1.000000000000000000e+00 0 1 5 30 1.000000000000000000e+00 0 1 5 31 1.000000000000000000e+00 0 1 5 32 1.000000000000000000e+00 0 1 5 33 1.000000000000000000e+00 0 1 5 34 1.000000000000000000e+00 0 1 5 35 1.000000000000000000e+00 0 1 5 36 1.000000000000000000e+00 0 1 5 37 1.000000000000000000e+00 0 1 5 38 1.000000000000000000e+00 0 1 5 39 1.000000000000000000e+00 0 1 5 40 1.000000000000000000e+00 0 1 5 41 1.000000000000000000e+00 0 1 5 42 1.000000000000000000e+00 0 1 5 43 1.000000000000000000e+00 0 1 5 44 1.000000000000000000e+00 0 1 5 45 1.000000000000000000e+00 0 1 5 46 1.000000000000000000e+00 0 1 5 47 1.000000000000000000e+00 0 1 5 48 1.000000000000000000e+00 0 1 5 49 1.000000000000000000e+00 0 1 5 50 1.000000000000000000e+00 0 1 6 6 1.000000000000000000e+00 0 1 6 7 1.000000000000000000e+00 0 1 6 8 1.000000000000000000e+00 0 1 6 9 1.000000000000000000e+00 0 1 6 10 1.000000000000000000e+00 0 1 6 11 1.000000000000000000e+00 0 1 6 12 1.000000000000000000e+00 0 1 6 13 1.000000000000000000e+00 0 1 6 14 1.000000000000000000e+00 0 1 6 15 1.000000000000000000e+00 0 1 6 16 1.000000000000000000e+00 0 1 6 17 1.000000000000000000e+00 0 1 6 18 1.000000000000000000e+00 0 1 6 19 1.000000000000000000e+00 0 1 6 20 1.000000000000000000e+00 0 1 6 21 1.000000000000000000e+00 0 1 6 22 1.000000000000000000e+00 0 1 6 23 1.000000000000000000e+00 0 1 6 24 1.000000000000000000e+00 0 1 6 25 1.000000000000000000e+00 0 1 6 26 1.000000000000000000e+00 0 1 6 27 1.000000000000000000e+00 0 1 6 28 1.000000000000000000e+00 0 1 6 29 1.000000000000000000e+00 0 1 6 30 1.000000000000000000e+00 0 1 6 31 1.000000000000000000e+00 0 1 6 32 1.000000000000000000e+00 0 1 6 33 1.000000000000000000e+00 0 1 6 34 1.000000000000000000e+00 0 1 6 35 1.000000000000000000e+00 0 1 6 36 1.000000000000000000e+00 0 1 6 37 1.000000000000000000e+00 0 1 6 38 1.000000000000000000e+00 0 1 6 39 1.000000000000000000e+00 0 1 6 40 1.000000000000000000e+00 0 1 6 41 1.000000000000000000e+00 0 1 6 42 1.000000000000000000e+00 0 1 6 43 1.000000000000000000e+00 0 1 6 44 1.000000000000000000e+00 0 1 6 45 1.000000000000000000e+00 0 1 6 46 1.000000000000000000e+00 0 1 6 47 1.000000000000000000e+00 0 1 6 48 1.000000000000000000e+00 0 1 6 49 1.000000000000000000e+00 0 1 6 50 1.000000000000000000e+00 0 1 7 7 1.000000000000000000e+00 0 1 7 8 1.000000000000000000e+00 0 1 7 9 1.000000000000000000e+00 0 1 7 10 1.000000000000000000e+00 0 1 7 11 1.000000000000000000e+00 0 1 7 12 1.000000000000000000e+00 0 1 7 13 1.000000000000000000e+00 0 1 7 14 1.000000000000000000e+00 0 1 7 15 1.000000000000000000e+00 0 1 7 16 1.000000000000000000e+00 0 1 7 17 1.000000000000000000e+00 0 1 7 18 1.000000000000000000e+00 0 1 7 19 1.000000000000000000e+00 0 1 7 20 1.000000000000000000e+00 0 1 7 21 1.000000000000000000e+00 0 1 7 22 1.000000000000000000e+00 0 1 7 23 1.000000000000000000e+00 0 1 7 24 1.000000000000000000e+00 0 1 7 25 1.000000000000000000e+00 0 1 7 26 1.000000000000000000e+00 0 1 7 27 1.000000000000000000e+00 0 1 7 28 1.000000000000000000e+00 0 1 7 29 1.000000000000000000e+00 0 1 7 30 1.000000000000000000e+00 0 1 7 31 1.000000000000000000e+00 0 1 7 32 1.000000000000000000e+00 0 1 7 33 1.000000000000000000e+00 0 1 7 34 1.000000000000000000e+00 0 1 7 35 1.000000000000000000e+00 0 1 7 36 1.000000000000000000e+00 0 1 7 37 1.000000000000000000e+00 0 1 7 38 1.000000000000000000e+00 0 1 7 39 1.000000000000000000e+00 0 1 7 40 1.000000000000000000e+00 0 1 7 41 1.000000000000000000e+00 0 1 7 42 1.000000000000000000e+00 0 1 7 43 1.000000000000000000e+00 0 1 7 44 1.000000000000000000e+00 0 1 7 45 1.000000000000000000e+00 0 1 7 46 1.000000000000000000e+00 0 1 7 47 1.000000000000000000e+00 0 1 7 48 1.000000000000000000e+00 0 1 7 49 1.000000000000000000e+00 0 1 7 50 1.000000000000000000e+00 0 1 8 8 1.000000000000000000e+00 0 1 8 9 1.000000000000000000e+00 0 1 8 10 1.000000000000000000e+00 0 1 8 11 1.000000000000000000e+00 0 1 8 12 1.000000000000000000e+00 0 1 8 13 1.000000000000000000e+00 0 1 8 14 1.000000000000000000e+00 0 1 8 15 1.000000000000000000e+00 0 1 8 16 1.000000000000000000e+00 0 1 8 17 1.000000000000000000e+00 0 1 8 18 1.000000000000000000e+00 0 1 8 19 1.000000000000000000e+00 0 1 8 20 1.000000000000000000e+00 0 1 8 21 1.000000000000000000e+00 0 1 8 22 1.000000000000000000e+00 0 1 8 23 1.000000000000000000e+00 0 1 8 24 1.000000000000000000e+00 0 1 8 25 1.000000000000000000e+00 0 1 8 26 1.000000000000000000e+00 0 1 8 27 1.000000000000000000e+00 0 1 8 28 1.000000000000000000e+00 0 1 8 29 1.000000000000000000e+00 0 1 8 30 1.000000000000000000e+00 0 1 8 31 1.000000000000000000e+00 0 1 8 32 1.000000000000000000e+00 0 1 8 33 1.000000000000000000e+00 0 1 8 34 1.000000000000000000e+00 0 1 8 35 1.000000000000000000e+00 0 1 8 36 1.000000000000000000e+00 0 1 8 37 1.000000000000000000e+00 0 1 8 38 1.000000000000000000e+00 0 1 8 39 1.000000000000000000e+00 0 1 8 40 1.000000000000000000e+00 0 1 8 41 1.000000000000000000e+00 0 1 8 42 1.000000000000000000e+00 0 1 8 43 1.000000000000000000e+00 0 1 8 44 1.000000000000000000e+00 0 1 8 45 1.000000000000000000e+00 0 1 8 46 1.000000000000000000e+00 0 1 8 47 1.000000000000000000e+00 0 1 8 48 1.000000000000000000e+00 0 1 8 49 1.000000000000000000e+00 0 1 8 50 1.000000000000000000e+00 0 1 9 9 1.000000000000000000e+00 0 1 9 10 1.000000000000000000e+00 0 1 9 11 1.000000000000000000e+00 0 1 9 12 1.000000000000000000e+00 0 1 9 13 1.000000000000000000e+00 0 1 9 14 1.000000000000000000e+00 0 1 9 15 1.000000000000000000e+00 0 1 9 16 1.000000000000000000e+00 0 1 9 17 1.000000000000000000e+00 0 1 9 18 1.000000000000000000e+00 0 1 9 19 1.000000000000000000e+00 0 1 9 20 1.000000000000000000e+00 0 1 9 21 1.000000000000000000e+00 0 1 9 22 1.000000000000000000e+00 0 1 9 23 1.000000000000000000e+00 0 1 9 24 1.000000000000000000e+00 0 1 9 25 1.000000000000000000e+00 0 1 9 26 1.000000000000000000e+00 0 1 9 27 1.000000000000000000e+00 0 1 9 28 1.000000000000000000e+00 0 1 9 29 1.000000000000000000e+00 0 1 9 30 1.000000000000000000e+00 0 1 9 31 1.000000000000000000e+00 0 1 9 32 1.000000000000000000e+00 0 1 9 33 1.000000000000000000e+00 0 1 9 34 1.000000000000000000e+00 0 1 9 35 1.000000000000000000e+00 0 1 9 36 1.000000000000000000e+00 0 1 9 37 1.000000000000000000e+00 0 1 9 38 1.000000000000000000e+00 0 1 9 39 1.000000000000000000e+00 0 1 9 40 1.000000000000000000e+00 0 1 9 41 1.000000000000000000e+00 0 1 9 42 1.000000000000000000e+00 0 1 9 43 1.000000000000000000e+00 0 1 9 44 1.000000000000000000e+00 0 1 9 45 1.000000000000000000e+00 0 1 9 46 1.000000000000000000e+00 0 1 9 47 1.000000000000000000e+00 0 1 9 48 1.000000000000000000e+00 0 1 9 49 1.000000000000000000e+00 0 1 9 50 1.000000000000000000e+00 0 1 10 10 1.000000000000000000e+00 0 1 10 11 1.000000000000000000e+00 0 1 10 12 1.000000000000000000e+00 0 1 10 13 1.000000000000000000e+00 0 1 10 14 1.000000000000000000e+00 0 1 10 15 1.000000000000000000e+00 0 1 10 16 1.000000000000000000e+00 0 1 10 17 1.000000000000000000e+00 0 1 10 18 1.000000000000000000e+00 0 1 10 19 1.000000000000000000e+00 0 1 10 20 1.000000000000000000e+00 0 1 10 21 1.000000000000000000e+00 0 1 10 22 1.000000000000000000e+00 0 1 10 23 1.000000000000000000e+00 0 1 10 24 1.000000000000000000e+00 0 1 10 25 1.000000000000000000e+00 0 1 10 26 1.000000000000000000e+00 0 1 10 27 1.000000000000000000e+00 0 1 10 28 1.000000000000000000e+00 0 1 10 29 1.000000000000000000e+00 0 1 10 30 1.000000000000000000e+00 0 1 10 31 1.000000000000000000e+00 0 1 10 32 1.000000000000000000e+00 0 1 10 33 1.000000000000000000e+00 0 1 10 34 1.000000000000000000e+00 0 1 10 35 1.000000000000000000e+00 0 1 10 36 1.000000000000000000e+00 0 1 10 37 1.000000000000000000e+00 0 1 10 38 1.000000000000000000e+00 0 1 10 39 1.000000000000000000e+00 0 1 10 40 1.000000000000000000e+00 0 1 10 41 1.000000000000000000e+00 0 1 10 42 1.000000000000000000e+00 0 1 10 43 1.000000000000000000e+00 0 1 10 44 1.000000000000000000e+00 0 1 10 45 1.000000000000000000e+00 0 1 10 46 1.000000000000000000e+00 0 1 10 47 1.000000000000000000e+00 0 1 10 48 1.000000000000000000e+00 0 1 10 49 1.000000000000000000e+00 0 1 10 50 1.000000000000000000e+00 0 1 11 11 1.000000000000000000e+00 0 1 11 12 1.000000000000000000e+00 0 1 11 13 1.000000000000000000e+00 0 1 11 14 1.000000000000000000e+00 0 1 11 15 1.000000000000000000e+00 0 1 11 16 1.000000000000000000e+00 0 1 11 17 1.000000000000000000e+00 0 1 11 18 1.000000000000000000e+00 0 1 11 19 1.000000000000000000e+00 0 1 11 20 1.000000000000000000e+00 0 1 11 21 1.000000000000000000e+00 0 1 11 22 1.000000000000000000e+00 0 1 11 23 1.000000000000000000e+00 0 1 11 24 1.000000000000000000e+00 0 1 11 25 1.000000000000000000e+00 0 1 11 26 1.000000000000000000e+00 0 1 11 27 1.000000000000000000e+00 0 1 11 28 1.000000000000000000e+00 0 1 11 29 1.000000000000000000e+00 0 1 11 30 1.000000000000000000e+00 0 1 11 31 1.000000000000000000e+00 0 1 11 32 1.000000000000000000e+00 0 1 11 33 1.000000000000000000e+00 0 1 11 34 1.000000000000000000e+00 0 1 11 35 1.000000000000000000e+00 0 1 11 36 1.000000000000000000e+00 0 1 11 37 1.000000000000000000e+00 0 1 11 38 1.000000000000000000e+00 0 1 11 39 1.000000000000000000e+00 0 1 11 40 1.000000000000000000e+00 0 1 11 41 1.000000000000000000e+00 0 1 11 42 1.000000000000000000e+00 0 1 11 43 1.000000000000000000e+00 0 1 11 44 1.000000000000000000e+00 0 1 11 45 1.000000000000000000e+00 0 1 11 46 1.000000000000000000e+00 0 1 11 47 1.000000000000000000e+00 0 1 11 48 1.000000000000000000e+00 0 1 11 49 1.000000000000000000e+00 0 1 11 50 1.000000000000000000e+00 0 1 12 12 1.000000000000000000e+00 0 1 12 13 1.000000000000000000e+00 0 1 12 14 1.000000000000000000e+00 0 1 12 15 1.000000000000000000e+00 0 1 12 16 1.000000000000000000e+00 0 1 12 17 1.000000000000000000e+00 0 1 12 18 1.000000000000000000e+00 0 1 12 19 1.000000000000000000e+00 0 1 12 20 1.000000000000000000e+00 0 1 12 21 1.000000000000000000e+00 0 1 12 22 1.000000000000000000e+00 0 1 12 23 1.000000000000000000e+00 0 1 12 24 1.000000000000000000e+00 0 1 12 25 1.000000000000000000e+00 0 1 12 26 1.000000000000000000e+00 0 1 12 27 1.000000000000000000e+00 0 1 12 28 1.000000000000000000e+00 0 1 12 29 1.000000000000000000e+00 0 1 12 30 1.000000000000000000e+00 0 1 12 31 1.000000000000000000e+00 0 1 12 32 1.000000000000000000e+00 0 1 12 33 1.000000000000000000e+00 0 1 12 34 1.000000000000000000e+00 0 1 12 35 1.000000000000000000e+00 0 1 12 36 1.000000000000000000e+00 0 1 12 37 1.000000000000000000e+00 0 1 12 38 1.000000000000000000e+00 0 1 12 39 1.000000000000000000e+00 0 1 12 40 1.000000000000000000e+00 0 1 12 41 1.000000000000000000e+00 0 1 12 42 1.000000000000000000e+00 0 1 12 43 1.000000000000000000e+00 0 1 12 44 1.000000000000000000e+00 0 1 12 45 1.000000000000000000e+00 0 1 12 46 1.000000000000000000e+00 0 1 12 47 1.000000000000000000e+00 0 1 12 48 1.000000000000000000e+00 0 1 12 49 1.000000000000000000e+00 0 1 12 50 1.000000000000000000e+00 0 1 13 13 1.000000000000000000e+00 0 1 13 14 1.000000000000000000e+00 0 1 13 15 1.000000000000000000e+00 0 1 13 16 1.000000000000000000e+00 0 1 13 17 1.000000000000000000e+00 0 1 13 18 1.000000000000000000e+00 0 1 13 19 1.000000000000000000e+00 0 1 13 20 1.000000000000000000e+00 0 1 13 21 1.000000000000000000e+00 0 1 13 22 1.000000000000000000e+00 0 1 13 23 1.000000000000000000e+00 0 1 13 24 1.000000000000000000e+00 0 1 13 25 1.000000000000000000e+00 0 1 13 26 1.000000000000000000e+00 0 1 13 27 1.000000000000000000e+00 0 1 13 28 1.000000000000000000e+00 0 1 13 29 1.000000000000000000e+00 0 1 13 30 1.000000000000000000e+00 0 1 13 31 1.000000000000000000e+00 0 1 13 32 1.000000000000000000e+00 0 1 13 33 1.000000000000000000e+00 0 1 13 34 1.000000000000000000e+00 0 1 13 35 1.000000000000000000e+00 0 1 13 36 1.000000000000000000e+00 0 1 13 37 1.000000000000000000e+00 0 1 13 38 1.000000000000000000e+00 0 1 13 39 1.000000000000000000e+00 0 1 13 40 1.000000000000000000e+00 0 1 13 41 1.000000000000000000e+00 0 1 13 42 1.000000000000000000e+00 0 1 13 43 1.000000000000000000e+00 0 1 13 44 1.000000000000000000e+00 0 1 13 45 1.000000000000000000e+00 0 1 13 46 1.000000000000000000e+00 0 1 13 47 1.000000000000000000e+00 0 1 13 48 1.000000000000000000e+00 0 1 13 49 1.000000000000000000e+00 0 1 13 50 1.000000000000000000e+00 0 1 14 14 1.000000000000000000e+00 0 1 14 15 1.000000000000000000e+00 0 1 14 16 1.000000000000000000e+00 0 1 14 17 1.000000000000000000e+00 0 1 14 18 1.000000000000000000e+00 0 1 14 19 1.000000000000000000e+00 0 1 14 20 1.000000000000000000e+00 0 1 14 21 1.000000000000000000e+00 0 1 14 22 1.000000000000000000e+00 0 1 14 23 1.000000000000000000e+00 0 1 14 24 1.000000000000000000e+00 0 1 14 25 1.000000000000000000e+00 0 1 14 26 1.000000000000000000e+00 0 1 14 27 1.000000000000000000e+00 0 1 14 28 1.000000000000000000e+00 0 1 14 29 1.000000000000000000e+00 0 1 14 30 1.000000000000000000e+00 0 1 14 31 1.000000000000000000e+00 0 1 14 32 1.000000000000000000e+00 0 1 14 33 1.000000000000000000e+00 0 1 14 34 1.000000000000000000e+00 0 1 14 35 1.000000000000000000e+00 0 1 14 36 1.000000000000000000e+00 0 1 14 37 1.000000000000000000e+00 0 1 14 38 1.000000000000000000e+00 0 1 14 39 1.000000000000000000e+00 0 1 14 40 1.000000000000000000e+00 0 1 14 41 1.000000000000000000e+00 0 1 14 42 1.000000000000000000e+00 0 1 14 43 1.000000000000000000e+00 0 1 14 44 1.000000000000000000e+00 0 1 14 45 1.000000000000000000e+00 0 1 14 46 1.000000000000000000e+00 0 1 14 47 1.000000000000000000e+00 0 1 14 48 1.000000000000000000e+00 0 1 14 49 1.000000000000000000e+00 0 1 14 50 1.000000000000000000e+00 0 1 15 15 1.000000000000000000e+00 0 1 15 16 1.000000000000000000e+00 0 1 15 17 1.000000000000000000e+00 0 1 15 18 1.000000000000000000e+00 0 1 15 19 1.000000000000000000e+00 0 1 15 20 1.000000000000000000e+00 0 1 15 21 1.000000000000000000e+00 0 1 15 22 1.000000000000000000e+00 0 1 15 23 1.000000000000000000e+00 0 1 15 24 1.000000000000000000e+00 0 1 15 25 1.000000000000000000e+00 0 1 15 26 1.000000000000000000e+00 0 1 15 27 1.000000000000000000e+00 0 1 15 28 1.000000000000000000e+00 0 1 15 29 1.000000000000000000e+00 0 1 15 30 1.000000000000000000e+00 0 1 15 31 1.000000000000000000e+00 0 1 15 32 1.000000000000000000e+00 0 1 15 33 1.000000000000000000e+00 0 1 15 34 1.000000000000000000e+00 0 1 15 35 1.000000000000000000e+00 0 1 15 36 1.000000000000000000e+00 0 1 15 37 1.000000000000000000e+00 0 1 15 38 1.000000000000000000e+00 0 1 15 39 1.000000000000000000e+00 0 1 15 40 1.000000000000000000e+00 0 1 15 41 1.000000000000000000e+00 0 1 15 42 1.000000000000000000e+00 0 1 15 43 1.000000000000000000e+00 0 1 15 44 1.000000000000000000e+00 0 1 15 45 1.000000000000000000e+00 0 1 15 46 1.000000000000000000e+00 0 1 15 47 1.000000000000000000e+00 0 1 15 48 1.000000000000000000e+00 0 1 15 49 1.000000000000000000e+00 0 1 15 50 1.000000000000000000e+00 0 1 16 16 1.000000000000000000e+00 0 1 16 17 1.000000000000000000e+00 0 1 16 18 1.000000000000000000e+00 0 1 16 19 1.000000000000000000e+00 0 1 16 20 1.000000000000000000e+00 0 1 16 21 1.000000000000000000e+00 0 1 16 22 1.000000000000000000e+00 0 1 16 23 1.000000000000000000e+00 0 1 16 24 1.000000000000000000e+00 0 1 16 25 1.000000000000000000e+00 0 1 16 26 1.000000000000000000e+00 0 1 16 27 1.000000000000000000e+00 0 1 16 28 1.000000000000000000e+00 0 1 16 29 1.000000000000000000e+00 0 1 16 30 1.000000000000000000e+00 0 1 16 31 1.000000000000000000e+00 0 1 16 32 1.000000000000000000e+00 0 1 16 33 1.000000000000000000e+00 0 1 16 34 1.000000000000000000e+00 0 1 16 35 1.000000000000000000e+00 0 1 16 36 1.000000000000000000e+00 0 1 16 37 1.000000000000000000e+00 0 1 16 38 1.000000000000000000e+00 0 1 16 39 1.000000000000000000e+00 0 1 16 40 1.000000000000000000e+00 0 1 16 41 1.000000000000000000e+00 0 1 16 42 1.000000000000000000e+00 0 1 16 43 1.000000000000000000e+00 0 1 16 44 1.000000000000000000e+00 0 1 16 45 1.000000000000000000e+00 0 1 16 46 1.000000000000000000e+00 0 1 16 47 1.000000000000000000e+00 0 1 16 48 1.000000000000000000e+00 0 1 16 49 1.000000000000000000e+00 0 1 16 50 1.000000000000000000e+00 0 1 17 17 1.000000000000000000e+00 0 1 17 18 1.000000000000000000e+00 0 1 17 19 1.000000000000000000e+00 0 1 17 20 1.000000000000000000e+00 0 1 17 21 1.000000000000000000e+00 0 1 17 22 1.000000000000000000e+00 0 1 17 23 1.000000000000000000e+00 0 1 17 24 1.000000000000000000e+00 0 1 17 25 1.000000000000000000e+00 0 1 17 26 1.000000000000000000e+00 0 1 17 27 1.000000000000000000e+00 0 1 17 28 1.000000000000000000e+00 0 1 17 29 1.000000000000000000e+00 0 1 17 30 1.000000000000000000e+00 0 1 17 31 1.000000000000000000e+00 0 1 17 32 1.000000000000000000e+00 0 1 17 33 1.000000000000000000e+00 0 1 17 34 1.000000000000000000e+00 0 1 17 35 1.000000000000000000e+00 0 1 17 36 1.000000000000000000e+00 0 1 17 37 1.000000000000000000e+00 0 1 17 38 1.000000000000000000e+00 0 1 17 39 1.000000000000000000e+00 0 1 17 40 1.000000000000000000e+00 0 1 17 41 1.000000000000000000e+00 0 1 17 42 1.000000000000000000e+00 0 1 17 43 1.000000000000000000e+00 0 1 17 44 1.000000000000000000e+00 0 1 17 45 1.000000000000000000e+00 0 1 17 46 1.000000000000000000e+00 0 1 17 47 1.000000000000000000e+00 0 1 17 48 1.000000000000000000e+00 0 1 17 49 1.000000000000000000e+00 0 1 17 50 1.000000000000000000e+00 0 1 18 18 1.000000000000000000e+00 0 1 18 19 1.000000000000000000e+00 0 1 18 20 1.000000000000000000e+00 0 1 18 21 1.000000000000000000e+00 0 1 18 22 1.000000000000000000e+00 0 1 18 23 1.000000000000000000e+00 0 1 18 24 1.000000000000000000e+00 0 1 18 25 1.000000000000000000e+00 0 1 18 26 1.000000000000000000e+00 0 1 18 27 1.000000000000000000e+00 0 1 18 28 1.000000000000000000e+00 0 1 18 29 1.000000000000000000e+00 0 1 18 30 1.000000000000000000e+00 0 1 18 31 1.000000000000000000e+00 0 1 18 32 1.000000000000000000e+00 0 1 18 33 1.000000000000000000e+00 0 1 18 34 1.000000000000000000e+00 0 1 18 35 1.000000000000000000e+00 0 1 18 36 1.000000000000000000e+00 0 1 18 37 1.000000000000000000e+00 0 1 18 38 1.000000000000000000e+00 0 1 18 39 1.000000000000000000e+00 0 1 18 40 1.000000000000000000e+00 0 1 18 41 1.000000000000000000e+00 0 1 18 42 1.000000000000000000e+00 0 1 18 43 1.000000000000000000e+00 0 1 18 44 1.000000000000000000e+00 0 1 18 45 1.000000000000000000e+00 0 1 18 46 1.000000000000000000e+00 0 1 18 47 1.000000000000000000e+00 0 1 18 48 1.000000000000000000e+00 0 1 18 49 1.000000000000000000e+00 0 1 18 50 1.000000000000000000e+00 0 1 19 19 1.000000000000000000e+00 0 1 19 20 1.000000000000000000e+00 0 1 19 21 1.000000000000000000e+00 0 1 19 22 1.000000000000000000e+00 0 1 19 23 1.000000000000000000e+00 0 1 19 24 1.000000000000000000e+00 0 1 19 25 1.000000000000000000e+00 0 1 19 26 1.000000000000000000e+00 0 1 19 27 1.000000000000000000e+00 0 1 19 28 1.000000000000000000e+00 0 1 19 29 1.000000000000000000e+00 0 1 19 30 1.000000000000000000e+00 0 1 19 31 1.000000000000000000e+00 0 1 19 32 1.000000000000000000e+00 0 1 19 33 1.000000000000000000e+00 0 1 19 34 1.000000000000000000e+00 0 1 19 35 1.000000000000000000e+00 0 1 19 36 1.000000000000000000e+00 0 1 19 37 1.000000000000000000e+00 0 1 19 38 1.000000000000000000e+00 0 1 19 39 1.000000000000000000e+00 0 1 19 40 1.000000000000000000e+00 0 1 19 41 1.000000000000000000e+00 0 1 19 42 1.000000000000000000e+00 0 1 19 43 1.000000000000000000e+00 0 1 19 44 1.000000000000000000e+00 0 1 19 45 1.000000000000000000e+00 0 1 19 46 1.000000000000000000e+00 0 1 19 47 1.000000000000000000e+00 0 1 19 48 1.000000000000000000e+00 0 1 19 49 1.000000000000000000e+00 0 1 19 50 1.000000000000000000e+00 0 1 20 20 1.000000000000000000e+00 0 1 20 21 1.000000000000000000e+00 0 1 20 22 1.000000000000000000e+00 0 1 20 23 1.000000000000000000e+00 0 1 20 24 1.000000000000000000e+00 0 1 20 25 1.000000000000000000e+00 0 1 20 26 1.000000000000000000e+00 0 1 20 27 1.000000000000000000e+00 0 1 20 28 1.000000000000000000e+00 0 1 20 29 1.000000000000000000e+00 0 1 20 30 1.000000000000000000e+00 0 1 20 31 1.000000000000000000e+00 0 1 20 32 1.000000000000000000e+00 0 1 20 33 1.000000000000000000e+00 0 1 20 34 1.000000000000000000e+00 0 1 20 35 1.000000000000000000e+00 0 1 20 36 1.000000000000000000e+00 0 1 20 37 1.000000000000000000e+00 0 1 20 38 1.000000000000000000e+00 0 1 20 39 1.000000000000000000e+00 0 1 20 40 1.000000000000000000e+00 0 1 20 41 1.000000000000000000e+00 0 1 20 42 1.000000000000000000e+00 0 1 20 43 1.000000000000000000e+00 0 1 20 44 1.000000000000000000e+00 0 1 20 45 1.000000000000000000e+00 0 1 20 46 1.000000000000000000e+00 0 1 20 47 1.000000000000000000e+00 0 1 20 48 1.000000000000000000e+00 0 1 20 49 1.000000000000000000e+00 0 1 20 50 1.000000000000000000e+00 0 1 21 21 1.000000000000000000e+00 0 1 21 22 1.000000000000000000e+00 0 1 21 23 1.000000000000000000e+00 0 1 21 24 1.000000000000000000e+00 0 1 21 25 1.000000000000000000e+00 0 1 21 26 1.000000000000000000e+00 0 1 21 27 1.000000000000000000e+00 0 1 21 28 1.000000000000000000e+00 0 1 21 29 1.000000000000000000e+00 0 1 21 30 1.000000000000000000e+00 0 1 21 31 1.000000000000000000e+00 0 1 21 32 1.000000000000000000e+00 0 1 21 33 1.000000000000000000e+00 0 1 21 34 1.000000000000000000e+00 0 1 21 35 1.000000000000000000e+00 0 1 21 36 1.000000000000000000e+00 0 1 21 37 1.000000000000000000e+00 0 1 21 38 1.000000000000000000e+00 0 1 21 39 1.000000000000000000e+00 0 1 21 40 1.000000000000000000e+00 0 1 21 41 1.000000000000000000e+00 0 1 21 42 1.000000000000000000e+00 0 1 21 43 1.000000000000000000e+00 0 1 21 44 1.000000000000000000e+00 0 1 21 45 1.000000000000000000e+00 0 1 21 46 1.000000000000000000e+00 0 1 21 47 1.000000000000000000e+00 0 1 21 48 1.000000000000000000e+00 0 1 21 49 1.000000000000000000e+00 0 1 21 50 1.000000000000000000e+00 0 1 22 22 1.000000000000000000e+00 0 1 22 23 1.000000000000000000e+00 0 1 22 24 1.000000000000000000e+00 0 1 22 25 1.000000000000000000e+00 0 1 22 26 1.000000000000000000e+00 0 1 22 27 1.000000000000000000e+00 0 1 22 28 1.000000000000000000e+00 0 1 22 29 1.000000000000000000e+00 0 1 22 30 1.000000000000000000e+00 0 1 22 31 1.000000000000000000e+00 0 1 22 32 1.000000000000000000e+00 0 1 22 33 1.000000000000000000e+00 0 1 22 34 1.000000000000000000e+00 0 1 22 35 1.000000000000000000e+00 0 1 22 36 1.000000000000000000e+00 0 1 22 37 1.000000000000000000e+00 0 1 22 38 1.000000000000000000e+00 0 1 22 39 1.000000000000000000e+00 0 1 22 40 1.000000000000000000e+00 0 1 22 41 1.000000000000000000e+00 0 1 22 42 1.000000000000000000e+00 0 1 22 43 1.000000000000000000e+00 0 1 22 44 1.000000000000000000e+00 0 1 22 45 1.000000000000000000e+00 0 1 22 46 1.000000000000000000e+00 0 1 22 47 1.000000000000000000e+00 0 1 22 48 1.000000000000000000e+00 0 1 22 49 1.000000000000000000e+00 0 1 22 50 1.000000000000000000e+00 0 1 23 23 1.000000000000000000e+00 0 1 23 24 1.000000000000000000e+00 0 1 23 25 1.000000000000000000e+00 0 1 23 26 1.000000000000000000e+00 0 1 23 27 1.000000000000000000e+00 0 1 23 28 1.000000000000000000e+00 0 1 23 29 1.000000000000000000e+00 0 1 23 30 1.000000000000000000e+00 0 1 23 31 1.000000000000000000e+00 0 1 23 32 1.000000000000000000e+00 0 1 23 33 1.000000000000000000e+00 0 1 23 34 1.000000000000000000e+00 0 1 23 35 1.000000000000000000e+00 0 1 23 36 1.000000000000000000e+00 0 1 23 37 1.000000000000000000e+00 0 1 23 38 1.000000000000000000e+00 0 1 23 39 1.000000000000000000e+00 0 1 23 40 1.000000000000000000e+00 0 1 23 41 1.000000000000000000e+00 0 1 23 42 1.000000000000000000e+00 0 1 23 43 1.000000000000000000e+00 0 1 23 44 1.000000000000000000e+00 0 1 23 45 1.000000000000000000e+00 0 1 23 46 1.000000000000000000e+00 0 1 23 47 1.000000000000000000e+00 0 1 23 48 1.000000000000000000e+00 0 1 23 49 1.000000000000000000e+00 0 1 23 50 1.000000000000000000e+00 0 1 24 24 1.000000000000000000e+00 0 1 24 25 1.000000000000000000e+00 0 1 24 26 1.000000000000000000e+00 0 1 24 27 1.000000000000000000e+00 0 1 24 28 1.000000000000000000e+00 0 1 24 29 1.000000000000000000e+00 0 1 24 30 1.000000000000000000e+00 0 1 24 31 1.000000000000000000e+00 0 1 24 32 1.000000000000000000e+00 0 1 24 33 1.000000000000000000e+00 0 1 24 34 1.000000000000000000e+00 0 1 24 35 1.000000000000000000e+00 0 1 24 36 1.000000000000000000e+00 0 1 24 37 1.000000000000000000e+00 0 1 24 38 1.000000000000000000e+00 0 1 24 39 1.000000000000000000e+00 0 1 24 40 1.000000000000000000e+00 0 1 24 41 1.000000000000000000e+00 0 1 24 42 1.000000000000000000e+00 0 1 24 43 1.000000000000000000e+00 0 1 24 44 1.000000000000000000e+00 0 1 24 45 1.000000000000000000e+00 0 1 24 46 1.000000000000000000e+00 0 1 24 47 1.000000000000000000e+00 0 1 24 48 1.000000000000000000e+00 0 1 24 49 1.000000000000000000e+00 0 1 24 50 1.000000000000000000e+00 0 1 25 25 1.000000000000000000e+00 0 1 25 26 1.000000000000000000e+00 0 1 25 27 1.000000000000000000e+00 0 1 25 28 1.000000000000000000e+00 0 1 25 29 1.000000000000000000e+00 0 1 25 30 1.000000000000000000e+00 0 1 25 31 1.000000000000000000e+00 0 1 25 32 1.000000000000000000e+00 0 1 25 33 1.000000000000000000e+00 0 1 25 34 1.000000000000000000e+00 0 1 25 35 1.000000000000000000e+00 0 1 25 36 1.000000000000000000e+00 0 1 25 37 1.000000000000000000e+00 0 1 25 38 1.000000000000000000e+00 0 1 25 39 1.000000000000000000e+00 0 1 25 40 1.000000000000000000e+00 0 1 25 41 1.000000000000000000e+00 0 1 25 42 1.000000000000000000e+00 0 1 25 43 1.000000000000000000e+00 0 1 25 44 1.000000000000000000e+00 0 1 25 45 1.000000000000000000e+00 0 1 25 46 1.000000000000000000e+00 0 1 25 47 1.000000000000000000e+00 0 1 25 48 1.000000000000000000e+00 0 1 25 49 1.000000000000000000e+00 0 1 25 50 1.000000000000000000e+00 0 1 26 26 1.000000000000000000e+00 0 1 26 27 1.000000000000000000e+00 0 1 26 28 1.000000000000000000e+00 0 1 26 29 1.000000000000000000e+00 0 1 26 30 1.000000000000000000e+00 0 1 26 31 1.000000000000000000e+00 0 1 26 32 1.000000000000000000e+00 0 1 26 33 1.000000000000000000e+00 0 1 26 34 1.000000000000000000e+00 0 1 26 35 1.000000000000000000e+00 0 1 26 36 1.000000000000000000e+00 0 1 26 37 1.000000000000000000e+00 0 1 26 38 1.000000000000000000e+00 0 1 26 39 1.000000000000000000e+00 0 1 26 40 1.000000000000000000e+00 0 1 26 41 1.000000000000000000e+00 0 1 26 42 1.000000000000000000e+00 0 1 26 43 1.000000000000000000e+00 0 1 26 44 1.000000000000000000e+00 0 1 26 45 1.000000000000000000e+00 0 1 26 46 1.000000000000000000e+00 0 1 26 47 1.000000000000000000e+00 0 1 26 48 1.000000000000000000e+00 0 1 26 49 1.000000000000000000e+00 0 1 26 50 1.000000000000000000e+00 0 1 27 27 1.000000000000000000e+00 0 1 27 28 1.000000000000000000e+00 0 1 27 29 1.000000000000000000e+00 0 1 27 30 1.000000000000000000e+00 0 1 27 31 1.000000000000000000e+00 0 1 27 32 1.000000000000000000e+00 0 1 27 33 1.000000000000000000e+00 0 1 27 34 1.000000000000000000e+00 0 1 27 35 1.000000000000000000e+00 0 1 27 36 1.000000000000000000e+00 0 1 27 37 1.000000000000000000e+00 0 1 27 38 1.000000000000000000e+00 0 1 27 39 1.000000000000000000e+00 0 1 27 40 1.000000000000000000e+00 0 1 27 41 1.000000000000000000e+00 0 1 27 42 1.000000000000000000e+00 0 1 27 43 1.000000000000000000e+00 0 1 27 44 1.000000000000000000e+00 0 1 27 45 1.000000000000000000e+00 0 1 27 46 1.000000000000000000e+00 0 1 27 47 1.000000000000000000e+00 0 1 27 48 1.000000000000000000e+00 0 1 27 49 1.000000000000000000e+00 0 1 27 50 1.000000000000000000e+00 0 1 28 28 1.000000000000000000e+00 0 1 28 29 1.000000000000000000e+00 0 1 28 30 1.000000000000000000e+00 0 1 28 31 1.000000000000000000e+00 0 1 28 32 1.000000000000000000e+00 0 1 28 33 1.000000000000000000e+00 0 1 28 34 1.000000000000000000e+00 0 1 28 35 1.000000000000000000e+00 0 1 28 36 1.000000000000000000e+00 0 1 28 37 1.000000000000000000e+00 0 1 28 38 1.000000000000000000e+00 0 1 28 39 1.000000000000000000e+00 0 1 28 40 1.000000000000000000e+00 0 1 28 41 1.000000000000000000e+00 0 1 28 42 1.000000000000000000e+00 0 1 28 43 1.000000000000000000e+00 0 1 28 44 1.000000000000000000e+00 0 1 28 45 1.000000000000000000e+00 0 1 28 46 1.000000000000000000e+00 0 1 28 47 1.000000000000000000e+00 0 1 28 48 1.000000000000000000e+00 0 1 28 49 1.000000000000000000e+00 0 1 28 50 1.000000000000000000e+00 0 1 29 29 1.000000000000000000e+00 0 1 29 30 1.000000000000000000e+00 0 1 29 31 1.000000000000000000e+00 0 1 29 32 1.000000000000000000e+00 0 1 29 33 1.000000000000000000e+00 0 1 29 34 1.000000000000000000e+00 0 1 29 35 1.000000000000000000e+00 0 1 29 36 1.000000000000000000e+00 0 1 29 37 1.000000000000000000e+00 0 1 29 38 1.000000000000000000e+00 0 1 29 39 1.000000000000000000e+00 0 1 29 40 1.000000000000000000e+00 0 1 29 41 1.000000000000000000e+00 0 1 29 42 1.000000000000000000e+00 0 1 29 43 1.000000000000000000e+00 0 1 29 44 1.000000000000000000e+00 0 1 29 45 1.000000000000000000e+00 0 1 29 46 1.000000000000000000e+00 0 1 29 47 1.000000000000000000e+00 0 1 29 48 1.000000000000000000e+00 0 1 29 49 1.000000000000000000e+00 0 1 29 50 1.000000000000000000e+00 0 1 30 30 1.000000000000000000e+00 0 1 30 31 1.000000000000000000e+00 0 1 30 32 1.000000000000000000e+00 0 1 30 33 1.000000000000000000e+00 0 1 30 34 1.000000000000000000e+00 0 1 30 35 1.000000000000000000e+00 0 1 30 36 1.000000000000000000e+00 0 1 30 37 1.000000000000000000e+00 0 1 30 38 1.000000000000000000e+00 0 1 30 39 1.000000000000000000e+00 0 1 30 40 1.000000000000000000e+00 0 1 30 41 1.000000000000000000e+00 0 1 30 42 1.000000000000000000e+00 0 1 30 43 1.000000000000000000e+00 0 1 30 44 1.000000000000000000e+00 0 1 30 45 1.000000000000000000e+00 0 1 30 46 1.000000000000000000e+00 0 1 30 47 1.000000000000000000e+00 0 1 30 48 1.000000000000000000e+00 0 1 30 49 1.000000000000000000e+00 0 1 30 50 1.000000000000000000e+00 0 1 31 31 1.000000000000000000e+00 0 1 31 32 1.000000000000000000e+00 0 1 31 33 1.000000000000000000e+00 0 1 31 34 1.000000000000000000e+00 0 1 31 35 1.000000000000000000e+00 0 1 31 36 1.000000000000000000e+00 0 1 31 37 1.000000000000000000e+00 0 1 31 38 1.000000000000000000e+00 0 1 31 39 1.000000000000000000e+00 0 1 31 40 1.000000000000000000e+00 0 1 31 41 1.000000000000000000e+00 0 1 31 42 1.000000000000000000e+00 0 1 31 43 1.000000000000000000e+00 0 1 31 44 1.000000000000000000e+00 0 1 31 45 1.000000000000000000e+00 0 1 31 46 1.000000000000000000e+00 0 1 31 47 1.000000000000000000e+00 0 1 31 48 1.000000000000000000e+00 0 1 31 49 1.000000000000000000e+00 0 1 31 50 1.000000000000000000e+00 0 1 32 32 1.000000000000000000e+00 0 1 32 33 1.000000000000000000e+00 0 1 32 34 1.000000000000000000e+00 0 1 32 35 1.000000000000000000e+00 0 1 32 36 1.000000000000000000e+00 0 1 32 37 1.000000000000000000e+00 0 1 32 38 1.000000000000000000e+00 0 1 32 39 1.000000000000000000e+00 0 1 32 40 1.000000000000000000e+00 0 1 32 41 1.000000000000000000e+00 0 1 32 42 1.000000000000000000e+00 0 1 32 43 1.000000000000000000e+00 0 1 32 44 1.000000000000000000e+00 0 1 32 45 1.000000000000000000e+00 0 1 32 46 1.000000000000000000e+00 0 1 32 47 1.000000000000000000e+00 0 1 32 48 1.000000000000000000e+00 0 1 32 49 1.000000000000000000e+00 0 1 32 50 1.000000000000000000e+00 0 1 33 33 1.000000000000000000e+00 0 1 33 34 1.000000000000000000e+00 0 1 33 35 1.000000000000000000e+00 0 1 33 36 1.000000000000000000e+00 0 1 33 37 1.000000000000000000e+00 0 1 33 38 1.000000000000000000e+00 0 1 33 39 1.000000000000000000e+00 0 1 33 40 1.000000000000000000e+00 0 1 33 41 1.000000000000000000e+00 0 1 33 42 1.000000000000000000e+00 0 1 33 43 1.000000000000000000e+00 0 1 33 44 1.000000000000000000e+00 0 1 33 45 1.000000000000000000e+00 0 1 33 46 1.000000000000000000e+00 0 1 33 47 1.000000000000000000e+00 0 1 33 48 1.000000000000000000e+00 0 1 33 49 1.000000000000000000e+00 0 1 33 50 1.000000000000000000e+00 0 1 34 34 1.000000000000000000e+00 0 1 34 35 1.000000000000000000e+00 0 1 34 36 1.000000000000000000e+00 0 1 34 37 1.000000000000000000e+00 0 1 34 38 1.000000000000000000e+00 0 1 34 39 1.000000000000000000e+00 0 1 34 40 1.000000000000000000e+00 0 1 34 41 1.000000000000000000e+00 0 1 34 42 1.000000000000000000e+00 0 1 34 43 1.000000000000000000e+00 0 1 34 44 1.000000000000000000e+00 0 1 34 45 1.000000000000000000e+00 0 1 34 46 1.000000000000000000e+00 0 1 34 47 1.000000000000000000e+00 0 1 34 48 1.000000000000000000e+00 0 1 34 49 1.000000000000000000e+00 0 1 34 50 1.000000000000000000e+00 0 1 35 35 1.000000000000000000e+00 0 1 35 36 1.000000000000000000e+00 0 1 35 37 1.000000000000000000e+00 0 1 35 38 1.000000000000000000e+00 0 1 35 39 1.000000000000000000e+00 0 1 35 40 1.000000000000000000e+00 0 1 35 41 1.000000000000000000e+00 0 1 35 42 1.000000000000000000e+00 0 1 35 43 1.000000000000000000e+00 0 1 35 44 1.000000000000000000e+00 0 1 35 45 1.000000000000000000e+00 0 1 35 46 1.000000000000000000e+00 0 1 35 47 1.000000000000000000e+00 0 1 35 48 1.000000000000000000e+00 0 1 35 49 1.000000000000000000e+00 0 1 35 50 1.000000000000000000e+00 0 1 36 36 1.000000000000000000e+00 0 1 36 37 1.000000000000000000e+00 0 1 36 38 1.000000000000000000e+00 0 1 36 39 1.000000000000000000e+00 0 1 36 40 1.000000000000000000e+00 0 1 36 41 1.000000000000000000e+00 0 1 36 42 1.000000000000000000e+00 0 1 36 43 1.000000000000000000e+00 0 1 36 44 1.000000000000000000e+00 0 1 36 45 1.000000000000000000e+00 0 1 36 46 1.000000000000000000e+00 0 1 36 47 1.000000000000000000e+00 0 1 36 48 1.000000000000000000e+00 0 1 36 49 1.000000000000000000e+00 0 1 36 50 1.000000000000000000e+00 0 1 37 37 1.000000000000000000e+00 0 1 37 38 1.000000000000000000e+00 0 1 37 39 1.000000000000000000e+00 0 1 37 40 1.000000000000000000e+00 0 1 37 41 1.000000000000000000e+00 0 1 37 42 1.000000000000000000e+00 0 1 37 43 1.000000000000000000e+00 0 1 37 44 1.000000000000000000e+00 0 1 37 45 1.000000000000000000e+00 0 1 37 46 1.000000000000000000e+00 0 1 37 47 1.000000000000000000e+00 0 1 37 48 1.000000000000000000e+00 0 1 37 49 1.000000000000000000e+00 0 1 37 50 1.000000000000000000e+00 0 1 38 38 1.000000000000000000e+00 0 1 38 39 1.000000000000000000e+00 0 1 38 40 1.000000000000000000e+00 0 1 38 41 1.000000000000000000e+00 0 1 38 42 1.000000000000000000e+00 0 1 38 43 1.000000000000000000e+00 0 1 38 44 1.000000000000000000e+00 0 1 38 45 1.000000000000000000e+00 0 1 38 46 1.000000000000000000e+00 0 1 38 47 1.000000000000000000e+00 0 1 38 48 1.000000000000000000e+00 0 1 38 49 1.000000000000000000e+00 0 1 38 50 1.000000000000000000e+00 0 1 39 39 1.000000000000000000e+00 0 1 39 40 1.000000000000000000e+00 0 1 39 41 1.000000000000000000e+00 0 1 39 42 1.000000000000000000e+00 0 1 39 43 1.000000000000000000e+00 0 1 39 44 1.000000000000000000e+00 0 1 39 45 1.000000000000000000e+00 0 1 39 46 1.000000000000000000e+00 0 1 39 47 1.000000000000000000e+00 0 1 39 48 1.000000000000000000e+00 0 1 39 49 1.000000000000000000e+00 0 1 39 50 1.000000000000000000e+00 0 1 40 40 1.000000000000000000e+00 0 1 40 41 1.000000000000000000e+00 0 1 40 42 1.000000000000000000e+00 0 1 40 43 1.000000000000000000e+00 0 1 40 44 1.000000000000000000e+00 0 1 40 45 1.000000000000000000e+00 0 1 40 46 1.000000000000000000e+00 0 1 40 47 1.000000000000000000e+00 0 1 40 48 1.000000000000000000e+00 0 1 40 49 1.000000000000000000e+00 0 1 40 50 1.000000000000000000e+00 0 1 41 41 1.000000000000000000e+00 0 1 41 42 1.000000000000000000e+00 0 1 41 43 1.000000000000000000e+00 0 1 41 44 1.000000000000000000e+00 0 1 41 45 1.000000000000000000e+00 0 1 41 46 1.000000000000000000e+00 0 1 41 47 1.000000000000000000e+00 0 1 41 48 1.000000000000000000e+00 0 1 41 49 1.000000000000000000e+00 0 1 41 50 1.000000000000000000e+00 0 1 42 42 1.000000000000000000e+00 0 1 42 43 1.000000000000000000e+00 0 1 42 44 1.000000000000000000e+00 0 1 42 45 1.000000000000000000e+00 0 1 42 46 1.000000000000000000e+00 0 1 42 47 1.000000000000000000e+00 0 1 42 48 1.000000000000000000e+00 0 1 42 49 1.000000000000000000e+00 0 1 42 50 1.000000000000000000e+00 0 1 43 43 1.000000000000000000e+00 0 1 43 44 1.000000000000000000e+00 0 1 43 45 1.000000000000000000e+00 0 1 43 46 1.000000000000000000e+00 0 1 43 47 1.000000000000000000e+00 0 1 43 48 1.000000000000000000e+00 0 1 43 49 1.000000000000000000e+00 0 1 43 50 1.000000000000000000e+00 0 1 44 44 1.000000000000000000e+00 0 1 44 45 1.000000000000000000e+00 0 1 44 46 1.000000000000000000e+00 0 1 44 47 1.000000000000000000e+00 0 1 44 48 1.000000000000000000e+00 0 1 44 49 1.000000000000000000e+00 0 1 44 50 1.000000000000000000e+00 0 1 45 45 1.000000000000000000e+00 0 1 45 46 1.000000000000000000e+00 0 1 45 47 1.000000000000000000e+00 0 1 45 48 1.000000000000000000e+00 0 1 45 49 1.000000000000000000e+00 0 1 45 50 1.000000000000000000e+00 0 1 46 46 1.000000000000000000e+00 0 1 46 47 1.000000000000000000e+00 0 1 46 48 1.000000000000000000e+00 0 1 46 49 1.000000000000000000e+00 0 1 46 50 1.000000000000000000e+00 0 1 47 47 1.000000000000000000e+00 0 1 47 48 1.000000000000000000e+00 0 1 47 49 1.000000000000000000e+00 0 1 47 50 1.000000000000000000e+00 0 1 48 48 1.000000000000000000e+00 0 1 48 49 1.000000000000000000e+00 0 1 48 50 1.000000000000000000e+00 0 1 49 49 1.000000000000000000e+00 0 1 49 50 1.000000000000000000e+00 0 1 50 50 1.000000000000000000e+00 1 1 1 1 1.000000000000000000e+00 1 1 2 2 1.000000000000000000e+00 1 1 3 3 1.000000000000000000e+00 1 1 4 4 1.000000000000000000e+00 1 1 5 5 1.000000000000000000e+00 1 1 6 6 1.000000000000000000e+00 1 1 7 7 1.000000000000000000e+00 1 1 8 8 1.000000000000000000e+00 1 1 9 9 1.000000000000000000e+00 1 1 10 10 1.000000000000000000e+00 1 1 11 11 1.000000000000000000e+00 1 1 12 12 1.000000000000000000e+00 1 1 13 13 1.000000000000000000e+00 1 1 14 14 1.000000000000000000e+00 1 1 15 15 1.000000000000000000e+00 1 1 16 16 1.000000000000000000e+00 1 1 17 17 1.000000000000000000e+00 1 1 18 18 1.000000000000000000e+00 1 1 19 19 1.000000000000000000e+00 1 1 20 20 1.000000000000000000e+00 1 1 21 21 1.000000000000000000e+00 1 1 22 22 1.000000000000000000e+00 1 1 23 23 1.000000000000000000e+00 1 1 24 24 1.000000000000000000e+00 1 1 25 25 1.000000000000000000e+00 1 1 26 26 1.000000000000000000e+00 1 1 27 27 1.000000000000000000e+00 1 1 28 28 1.000000000000000000e+00 1 1 29 29 1.000000000000000000e+00 1 1 30 30 1.000000000000000000e+00 1 1 31 31 1.000000000000000000e+00 1 1 32 32 1.000000000000000000e+00 1 1 33 33 1.000000000000000000e+00 1 1 34 34 1.000000000000000000e+00 1 1 35 35 1.000000000000000000e+00 1 1 36 36 1.000000000000000000e+00 1 1 37 37 1.000000000000000000e+00 1 1 38 38 1.000000000000000000e+00 1 1 39 39 1.000000000000000000e+00 1 1 40 40 1.000000000000000000e+00 1 1 41 41 1.000000000000000000e+00 1 1 42 42 1.000000000000000000e+00 1 1 43 43 1.000000000000000000e+00 1 1 44 44 1.000000000000000000e+00 1 1 45 45 1.000000000000000000e+00 1 1 46 46 1.000000000000000000e+00 1 1 47 47 1.000000000000000000e+00 1 1 48 48 1.000000000000000000e+00 1 1 49 49 1.000000000000000000e+00 1 1 50 50 1.000000000000000000e+00 2 1 1 2 5.000000000000000000e-01 3 1 1 28 5.000000000000000000e-01 4 1 1 50 5.000000000000000000e-01 5 1 2 21 5.000000000000000000e-01 6 1 2 22 5.000000000000000000e-01 7 1 2 36 5.000000000000000000e-01 8 1 2 49 5.000000000000000000e-01 9 1 3 10 5.000000000000000000e-01 10 1 3 30 5.000000000000000000e-01 11 1 3 34 5.000000000000000000e-01 12 1 3 35 5.000000000000000000e-01 13 1 3 49 5.000000000000000000e-01 14 1 4 11 5.000000000000000000e-01 15 1 4 12 5.000000000000000000e-01 16 1 4 17 5.000000000000000000e-01 17 1 4 34 5.000000000000000000e-01 18 1 5 18 5.000000000000000000e-01 19 1 5 19 5.000000000000000000e-01 20 1 5 34 5.000000000000000000e-01 21 1 5 46 5.000000000000000000e-01 22 1 6 19 5.000000000000000000e-01 23 1 6 21 5.000000000000000000e-01 24 1 6 30 5.000000000000000000e-01 25 1 6 38 5.000000000000000000e-01 26 1 7 9 5.000000000000000000e-01 27 1 7 22 5.000000000000000000e-01 28 1 7 23 5.000000000000000000e-01 29 1 7 44 5.000000000000000000e-01 30 1 7 45 5.000000000000000000e-01 31 1 8 29 5.000000000000000000e-01 32 1 8 31 5.000000000000000000e-01 33 1 8 34 5.000000000000000000e-01 34 1 9 20 5.000000000000000000e-01 35 1 9 33 5.000000000000000000e-01 36 1 10 23 5.000000000000000000e-01 37 1 10 38 5.000000000000000000e-01 38 1 10 49 5.000000000000000000e-01 39 1 11 22 5.000000000000000000e-01 40 1 11 34 5.000000000000000000e-01 41 1 11 35 5.000000000000000000e-01 42 1 11 46 5.000000000000000000e-01 43 1 12 14 5.000000000000000000e-01 44 1 13 17 5.000000000000000000e-01 45 1 13 47 5.000000000000000000e-01 46 1 14 15 5.000000000000000000e-01 47 1 14 34 5.000000000000000000e-01 48 1 14 38 5.000000000000000000e-01 49 1 14 39 5.000000000000000000e-01 50 1 14 49 5.000000000000000000e-01 51 1 15 16 5.000000000000000000e-01 52 1 15 28 5.000000000000000000e-01 53 1 15 35 5.000000000000000000e-01 54 1 15 46 5.000000000000000000e-01 55 1 15 48 5.000000000000000000e-01 56 1 16 28 5.000000000000000000e-01 57 1 16 30 5.000000000000000000e-01 58 1 16 43 5.000000000000000000e-01 59 1 17 30 5.000000000000000000e-01 60 1 18 37 5.000000000000000000e-01 61 1 18 38 5.000000000000000000e-01 62 1 19 21 5.000000000000000000e-01 63 1 19 25 5.000000000000000000e-01 64 1 19 39 5.000000000000000000e-01 65 1 19 41 5.000000000000000000e-01 66 1 20 30 5.000000000000000000e-01 67 1 20 34 5.000000000000000000e-01 68 1 21 33 5.000000000000000000e-01 69 1 21 46 5.000000000000000000e-01 70 1 22 37 5.000000000000000000e-01 71 1 22 40 5.000000000000000000e-01 72 1 23 30 5.000000000000000000e-01 73 1 23 37 5.000000000000000000e-01 74 1 23 39 5.000000000000000000e-01 75 1 23 43 5.000000000000000000e-01 76 1 23 46 5.000000000000000000e-01 77 1 24 25 5.000000000000000000e-01 78 1 25 33 5.000000000000000000e-01 79 1 25 38 5.000000000000000000e-01 80 1 26 39 5.000000000000000000e-01 81 1 26 46 5.000000000000000000e-01 82 1 27 29 5.000000000000000000e-01 83 1 30 31 5.000000000000000000e-01 84 1 30 36 5.000000000000000000e-01 85 1 32 33 5.000000000000000000e-01 86 1 32 43 5.000000000000000000e-01 87 1 32 46 5.000000000000000000e-01 88 1 33 41 5.000000000000000000e-01 89 1 33 46 5.000000000000000000e-01 90 1 33 48 5.000000000000000000e-01 91 1 35 40 5.000000000000000000e-01 92 1 35 48 5.000000000000000000e-01 93 1 36 46 5.000000000000000000e-01 94 1 37 39 5.000000000000000000e-01 95 1 37 42 5.000000000000000000e-01 96 1 37 43 5.000000000000000000e-01 97 1 37 48 5.000000000000000000e-01 98 1 38 42 5.000000000000000000e-01 99 1 39 45 5.000000000000000000e-01 100 1 39 46 5.000000000000000000e-01 101 1 40 41 5.000000000000000000e-01 102 1 40 47 5.000000000000000000e-01 103 1 41 43 5.000000000000000000e-01 104 1 43 48 5.000000000000000000e-01 Rcsdp/src/Csdp/test/Makefile0000644000175100001440000000134114414754226015452 0ustar hornikusers# # Currently, we have only two tests to complete. The first is the solution # of the SDPA format problem theta1.dat-s. The makefile will run CSDP on # this problem and store the output in theta1.out. The second test is the # computation of the Lovasz theta number of the graph g50. # # Once the tests have run, examine the .out files and compare them with # theta1.correct and g50.correct. The optimal values should agree to # six digits or more, and the DIMACS errors should all be smaller than # 1.0e-6. # all: theta1.out g50.out # # Test the solver on theta1.dat-s # theta1.out: ../solver/csdp theta1.dat-s >theta1.out # # Test theta on the g50 graph. # g50.out: ../theta/theta g50 >g50.out clean: rm -f *.out Rcsdp/src/Csdp/matlab/0000755000175100001440000000000014342635402014266 5ustar hornikusersRcsdp/src/Csdp/matlab/control1.correct0000644000175100001440000000474014342635402017417 0ustar hornikusers>> load control1.mat >> whos Name Size Bytes Class At 125x21 8488 double array (sparse) K 1x1 140 struct array ans 2x1 16 double array b 21x1 168 double array c 125x1 80 double array (sparse) Grand total is 732 elements using 8892 bytes >> pars.objtol=1.0e-9; >> [x,y,z,info]=csdp(At,b,c,K,pars); Transposing A to match b Number of constraints: 21 Number of SDP blocks: 2 Number of LP vars: 0 Iter: 0 Ap: 0.00e+00 Pobj: 3.6037961e+02 Ad: 0.00e+00 Dobj: 0.0000000e+00 Iter: 1 Ap: 9.56e-01 Pobj: 3.7527534e+02 Ad: 9.60e-01 Dobj: 6.4836002e+04 Iter: 2 Ap: 8.55e-01 Pobj: 4.0344779e+02 Ad: 9.67e-01 Dobj: 6.9001508e+04 Iter: 3 Ap: 8.77e-01 Pobj: 1.4924982e+02 Ad: 1.00e+00 Dobj: 6.0425319e+04 Iter: 4 Ap: 7.14e-01 Pobj: 8.2819409e+01 Ad: 1.00e+00 Dobj: 1.2926534e+04 Iter: 5 Ap: 8.23e-01 Pobj: 4.7411689e+01 Ad: 1.00e+00 Dobj: 4.9040115e+03 Iter: 6 Ap: 7.97e-01 Pobj: 2.6300213e+01 Ad: 1.00e+00 Dobj: 1.4672743e+03 Iter: 7 Ap: 7.12e-01 Pobj: 1.5215577e+01 Ad: 1.00e+00 Dobj: 4.0561826e+02 Iter: 8 Ap: 8.73e-01 Pobj: 7.5119220e+00 Ad: 1.00e+00 Dobj: 1.7418715e+02 Iter: 9 Ap: 9.87e-01 Pobj: 5.3076526e+00 Ad: 1.00e+00 Dobj: 5.2097318e+01 Iter: 10 Ap: 1.00e+00 Pobj: 7.8594697e+00 Ad: 1.00e+00 Dobj: 2.2172447e+01 Iter: 11 Ap: 7.62e-01 Pobj: 1.5871010e+01 Ad: 1.00e+00 Dobj: 1.9629658e+01 Iter: 12 Ap: 9.21e-01 Pobj: 1.7549388e+01 Ad: 9.68e-01 Dobj: 1.7931413e+01 Iter: 13 Ap: 9.70e-01 Pobj: 1.7769861e+01 Ad: 9.72e-01 Dobj: 1.7792992e+01 Iter: 14 Ap: 8.87e-01 Pobj: 1.7782917e+01 Ad: 9.70e-01 Dobj: 1.7785344e+01 Iter: 15 Ap: 9.27e-01 Pobj: 1.7784457e+01 Ad: 9.85e-01 Dobj: 1.7784731e+01 Iter: 16 Ap: 9.35e-01 Pobj: 1.7784609e+01 Ad: 9.35e-01 Dobj: 1.7784640e+01 Iter: 17 Ap: 1.00e+00 Pobj: 1.7784624e+01 Ad: 1.00e+00 Dobj: 1.7784628e+01 Iter: 18 Ap: 1.00e+00 Pobj: 1.7784627e+01 Ad: 1.00e+00 Dobj: 1.7784627e+01 Iter: 19 Ap: 9.54e-01 Pobj: 1.7784627e+01 Ad: 9.59e-01 Dobj: 1.7784627e+01 Success: SDP solved Primal objective value: 1.7784627e+01 Dual objective value: 1.7784627e+01 Relative primal infeasibility: 1.34e-09 Relative dual infeasibility: 1.53e-11 Real Relative Gap: 8.76e-10 XZ Relative Gap: 2.16e-10 DIMACS error measures: 1.34e-09 0.00e+00 2.47e-11 0.00e+00 8.76e-10 2.16e-10 0.020u 0.000s 0:00.07 28.5% 0+0k 0+0io 218pf+0w >> info info = 0 >> quit Rcsdp/src/Csdp/matlab/writesdpa.m0000644000175100001440000001645614342635402016462 0ustar hornikusers% This function takes a problem in SeDuMi MATLAB format and writes it out % in SDPA sparse format. % % Usage: % % ret=writesdpa(fname,A,b,c,K,pars) % % fname Name of SDPpack file, in quotes % A,b,c,K Problem in SeDuMi form % pars Optional parameters. % pars.printlevel=0 No printed output % pars.printlevel=1 (default) Some printed output. % % ret ret=0 on success, ret=1 on failure. % % Notes: % % Problems with complex data are not allowed. % % Quadratic cone and rotated cone constraints are not supported. % % Nonsymmetric A.s and C.s matrices are symmetrized with A=(A+A')/2 % a warning is given when this happens. % % Free variables are not supported. % % Floating point numbers are written out with 18 decimal digits for % accuracy. % % Please contact the author (Brian Borchers, borchers@nmt.edu) with any % questions or bug reports. % % Third Version: 3/3/06. Corrected a bug in the handling of % nonsymmetric constraint matrices. % % Second Version: 7/14/04. Modified to vastly speed up operations on sparse % matrices. On some problems, this version is 100 times % faster! % % First Version: 7/14/03. Modified from old writesdp.m which wrote problems % in SDPPack format. % function ret=writesdpa(fname,A,b,c,K,pars) % % First, check to see whether or not we should be quiet. % if (nargin > 5) if (isfield(pars,'printlevel')) if (pars.printlevel == 0) quiet=1; else quiet=0; end else quiet=0; end else pars.printlevel=1; quiet=0; end % % First, check for complex numbers in A, b, or c. % if (isreal(A) ~= 1) if (quiet == 0) fprintf('A is not real!\n'); end ret=1; return end if (isreal(b) ~= 1) if (quiet == 0) fprintf('b is not real!\n'); end ret=1; return end if (isreal(c) ~= 1) if (quiet == 0) fprintf('c is not real!\n'); end ret=1; return end % % Check for any quadratic cone constraints. % if (isfield(K,'q')) if ((~isempty(K.q)) & (K.q ~= 0)) if (quiet == 0) fprintf('quadratic cone constraints are not supported.\n'); end ret=1; return end end % % Check for any rotated cone constraints. % if (isfield(K,'r')) if ((~isempty(K.r)) & (K.r ~= 0)) if (quiet == 0) fprintf('rotated cone constraints are not supported.\n'); end ret=1; return end end % % Check for any free variables. % if (isfield(K,'f')) if ((~isempty(K.f)) & (K.f ~= 0)) if (quiet == 0) fprintf('Free variables are not supported.\n'); end ret=1; return end end % % Find the number of constraints. % m=length(b); % % Deal with the following special case. If A is transposed, transpose % it again so that it is of the right size. % [Am,An]=size(A); if (Am ~= m) if (An == m) if (quiet==0) fprintf('Transposing A to match b \n'); end AT=A; A=A'; % % Also swap Am and An so that they're correct. % temp=Am; Am=An; An=temp; else % % In this case, A is just plain the wrong size. % if (quiet==0) fprintf('A is not of the correct size to match b \n'); end ret=1; return end else % % No need to transpose A, but we'll need AT. % AT=A'; end % % Deal with the following special case: if c==0, then c should really % be a zero vector of the appropriate size. % if (c == 0) if (quiet==0) fprintf('Expanding c to the appropriate size\n'); end c=sparse(An,1); end % % If c is empty, then act as if it was zero. % if (isempty(c)) if (quiet==0) fprintf('Expanding empty c to zeros of the appropriate size\n'); end c=sparse(An,1); end % % If c is a row vector, make it a column vector. % [cm,cn]=size(c); if (cn > cm) c=c'; end % % Get the size data. % % % First, the size of the LP block. % if (isfield(K,'l')) nlin=K.l; sizelin=nlin; if (isempty(sizelin)) sizelin=0; nlin=0; end if (K.l == 0) nlin=0; sizelin=0; end else nlin=0; sizelin=0; end % % Get the sizes of the SDP blocks. % if (isfield(K,'s')) nsdpblocks=length(K.s); sizesdp=sum((K.s).^2); if (isempty(sizesdp)) sizesdp=0; nsdpblocks=0; end if (K.s == 0) nsdpblocks=0; sizesdp=0; end else sizesdp=0; nsdpblocks=0; end % % Figure out the number of blocks. % nblocks=nsdpblocks; if (nlin>0) nblocks=nblocks+1; end % % print out some size information % if (quiet==0) fprintf('Number of constraints: %d \n',m); fprintf('Number of SDP blocks: %d \n',nsdpblocks); fprintf('Number of LP vars: %d \n',nlin); end % % Open up the file for writing. % fid=fopen(fname,'w'); if (fid==-1) if (quiet==0) fprintf('Could not open file for output!'); end ret=1; return end % % Print out m, the number of constraints. % fprintf(fid,'%d \n',m); % % Next, the number of blocks. % fprintf(fid,'%d \n',nblocks); % % Print out the block structure. % if (K.s > 0) fprintf(fid,'%d ',K.s); end if (nlin > 0) fprintf(fid,'%d ',-nlin); end fprintf(fid,'\n'); % % Next, b, with all on one line. % fprintf(fid,'%.18e ',full(b)); fprintf(fid,'\n'); % % First, the C matrix. % % % First, calculate where in c things start. % base=sizelin+1; % % Next, work through the SDP blocks. % for i=1:nsdpblocks % % Get the current block of C. % I=find(c); II=find(I>=base); I=I(II); II=find(I<=base+K.s(i)^2-1); I=I(II); II=I-(base-1)*ones(size(I)); work=sparse(II,ones(size(II)),c(I),K.s(i)^2,1); work=reshape(work,K.s(i),K.s(i)); % % Check this block for symmetry. % if (norm(work-work','fro') ~= 0) if (quiet==0) fprintf('Non symmetric C.s matrix!\n'); end work=(work+work')/2; end % % Write out the C.s matrix. % work=triu(work); [II,JJ,V]=find(work); cnt=length(II); if (cnt ~= 0) fprintf(fid,'%d %d %d %d %.18e\n',[zeros(size(II)) i*ones(size(II)) II JJ -V]'); end % % Next, update to the next base. % base=base+K.s(i)^2; end % % Print out the coefficients for the linear block of C. % for i=1:nlin if (c(i) ~= 0.0) fprintf(fid,'%d %d %d %d %.18e\n',[0 nsdpblocks+1 i i -c(i)]); end end % % Now, loop through the constraints, one at a time. % for cn=1:m % % Print out the SDP part of constraint cn. % base=sizelin+1; rowcn=AT(:,cn); for i=1:nsdpblocks I=find(rowcn); II=find(I>=base); I=I(II); II=find(I<=(base+K.s(i)^2-1)); I=I(II); II=I-(base-1)*ones(size(I)); work=sparse(II,ones(size(II)),rowcn(I),K.s(i)^2,1); work=reshape(work,K.s(i),K.s(i)); if (norm(work-work','fro') ~= 0) if (quiet==0) fprintf('Non symmetric A.s matrix! \n'); end work=(work+work')/2; end % % Ignore the lower left triangle. % work=triu(work); % % Get the nonzero entries. % [II,JJ,V]=find(work); cnt=length(II); if (cnt ~= 0) fprintf(fid,'%d %d %d %d %.18e\n',[cn*ones(size(II)) i*ones(size(II)) II JJ V]'); end % % Next, update to the next base. % base=base+K.s(i)^2; end % % Finally, the linear part. % I=find(rowcn); II=find(I<=nlin); I=I(II); workrow=sparse(I,ones(size(I)),rowcn(I),nlin,1); [II,JJ,V]=find(workrow); if (length(II) > 0) fprintf(fid,'%d %d %d %d %.18e\n',[cn*ones(length(II),1) (nsdpblocks+1)*ones(length(II),1) II II V]'); end end % % Close the file. % fclose(fid); % % Return success % ret=0; return Rcsdp/src/Csdp/matlab/README0000644000175100001440000000245014342635402015147 0ustar hornikusersThis directory contains the MATLAB interface to CSDP. There are three MATLAB functions: csdp Solve a problem in SeDuMi format. writesdpa Takes a problem in SeDuMi format and outputs it to a file in SDPA sparse format. readsol Reads a CSDP solution into the workspace in SeDuMi form. convertf Converts free variables in a SeDuMi problem into the differences of nonnegative variables, so that the problem can be solved by CSDP. Note that these .m files must be in your MATLAB search path, and that the csdp executable must be in your shell's search path for this interface to work. To add the .m files to the MATLAB path, see the path function in MATLAB. It can be used to show the current path and add new directories to the current path. Once you've installed CSDP and the MATLAB interface routines, you can test them with >> load control1.mat >> whos >> pars.objtol=1.0e-9; >> [x,y,z,info]=csdp(At,b,c,K,pars); >> info The file control1.correct shows correct output from these commands. Your results should be similar, although there are likely to be slight differences in the actual values. For help with using the routines, see >> help csdp >> help writesdpa >> help readsol >> help convertf Rcsdp/src/Csdp/matlab/csdp.m0000644000175100001440000001307514342635402015403 0ustar hornikusers% % [x,y,z,info]=csdp(At,b,c,K,pars,x0,y0,z0) % % Uses CSDP to solve a problem in SeDuMi format. % % Input: % At, b, c, K SDP problem in SeDuMi format. % pars CSDP parameters (optional parameter.) % x0,y0,z0 Optional starting point. % % Output: % % x, y, z solution. % info CSDP return code. % info=100 indicates a failure in the MATLAB % interface, such as inability to write to % a temporary file or read back the solution. % % Note: This interface makes use of temporary files with names given by the % tempname function. This will fail if there is no working temporary % directory or there isn't enough space available in this directory. % % Note: This code writes its own param.csdp file in the current working % directory. Any param.csdp file already in the directory will be deleted. % % Note: It is assumed that csdp is the search path made available through % the "system" or "dos" command. Typically, having the csdp executable in % current working directory will work, although some paranoid system % administrators keep . out of the path. In that case, you'll need to % install csdp in one of the directories that is in the search path. % A simple test is to run csdp from a command line prompt. % function [x,y,z,info]=csdp(At,b,c,K,pars,x0,y0,z0) % % First, put a dummy pars in place if no argument was given. Also % set pars.printlevel if not given. % if (nargin<5), pars.printlevel=1; else if (isfield(pars,'printlevel')), pars.printlevel=pars.printlevel; else pars.printlevel=1; end; end; % % Write out the param.csdp file. % fid=fopen('param.csdp','w'); if (fid==-1) if (pars.printlevel ~= 0), fprintf('Could not open param.csdp\n'); end; info=100; return; end; % % Now, go through the parameters. % if (isfield(pars,'axtol')), fprintf(fid,'axtol= %e\n',pars.axtol); else fprintf(fid,'axtol=%e\n',1.0e-8); end; if (isfield(pars,'atytol')), fprintf(fid,'atytol= %e\n',pars.atytol); else fprintf(fid,'atytol=%e\n',1.0e-8); end; if (isfield(pars,'objtol')), fprintf(fid,'objtol= %e\n',pars.objtol); else fprintf(fid,'objtol=%e\n',1.0e-8); end; if (isfield(pars,'pinftol')), fprintf(fid,'pinftol= %e\n',pars.pinftol); else fprintf(fid,'pinftol=%e\n',1.0e8); end; if (isfield(pars,'dinftol')), fprintf(fid,'dinftol= %e\n',pars.dinftol); else fprintf(fid,'dinftol=%e\n',1.0e8); end; if (isfield(pars,'maxiter')), fprintf(fid,'maxiter= %d\n',pars.maxiter); else fprintf(fid,'maxiter=%d\n',100); end; if (isfield(pars,'minstepfrac')), fprintf(fid,'minstepfrac= %e\n',pars.minstepfrac); else fprintf(fid,'minstepfrac=%e\n',0.90); end; if (isfield(pars,'maxstepfrac')), fprintf(fid,'maxstepfrac= %e\n',pars.maxstepfrac); else fprintf(fid,'maxstepfrac=%e\n',0.97); end; if (isfield(pars,'minstepp')), fprintf(fid,'minstepp= %e\n',pars.minstepp); else fprintf(fid,'minstepp=%e\n',1.0e-8); end; if (isfield(pars,'minstepd')), fprintf(fid,'minstepd= %e\n',pars.minstepd); else fprintf(fid,'minstepd=%e\n',1.0e-8); end; if (isfield(pars,'usexzgap')), fprintf(fid,'usexzgap= %d\n',pars.usexzgap); else fprintf(fid,'usexzgap=%d\n',0); end; if (isfield(pars,'tweakgap')), fprintf(fid,'tweakgap= %d\n',pars.tweakgap); else fprintf(fid,'tweakgap=%d\n',0); end; if (isfield(pars,'affine')), fprintf(fid,'affine= %d\n',pars.affine); else fprintf(fid,'affine=%d\n',0); end; if (isfield(pars,'printlevel')), fprintf(fid,'printlevel= %d\n',pars.printlevel); else fprintf(fid,'printlevel=%d\n',1); end; if (isfield(pars,'perturbobj')), fprintf(fid,'printlevel= %d\n',pars.perturbobj); else fprintf(fid,'printlevel=%d\n',1); end; if (isfield(pars,'fastmode')), fprintf(fid,'printlevel= %d\n',pars.fastmode); else fprintf(fid,'printlevel=%d\n',0); end; % % close the parameter file. % fclose(fid); % % Write the problem out. % fname=tempname; ret=writesdpa([fname '.dat-s'],At,b,c,K,pars); if (ret==1), info=100; return; end; % % If an initial solution was provided, write it out too. % if (nargin == 8) initsolname=tempname; ret=writesol([initsolname '.sol'],x0,y0,z0,K); if (ret~=0) info=100; delete([initsolname '.sol']); return; end; end % % Solve the problem. % if (nargin==8) % % An inital solution was provided, so include it in the command line. % if (ispc==1), info=dos(['csdp ' fname '.dat-s' ' ' fname '.sol' ' ' initsolname '.sol'],'-echo'); else if (pars.printlevel ~=0), info=system(['time csdp ' fname '.dat-s' ' ' fname '.sol' ' ' ... initsolname '.sol']); else info=system(['csdp ' fname '.dat-s' ' ' fname '.sol' ' ' ... initsolname '.sol']); end; end; else % % no initial solution was provided. % if (ispc==1), info=dos(['csdp ' fname '.dat-s' ' ' fname '.sol'],'-echo'); else if (pars.printlevel ~=0), info=system(['time csdp ' fname '.dat-s' ' ' fname '.sol']); else info=system(['csdp ' fname '.dat-s' ' ' fname '.sol']); end; end; end % % Only try to read the solution if csdp succeeded at least to a point. % if (info <= 4) % % Read back the solution. % [x,y,z]=readsol([fname '.sol'],K,length(b)); % % If readsol couldn't open the file, then return info=100 to show % the error. % if (isnan(x)) info=100; end else % % CSDP failed. Set x, y, and z to NaN. % x=NaN; y=NaN; z=NaN; end % % Delete the temporary files, including param.csdp if we wrote one! % delete([fname '.dat-s']); delete([fname '.sol']); if (nargin==8) delete([initsolname '.sol']); end delete('param.csdp'); Rcsdp/src/Csdp/matlab/control1.mat0000644000175100001440000002044014342635402016532 0ustar hornikusersMATLAB 5.0 MAT-file, Platform: GLNX86, Created on: Fri Jul 25 16:13:50 2003 IM0ans xKs0 ˆ}cdjpv| (ð¿ð¿ð¿ð¿ð¿`b*ÿÿè¼}Atð  (2<FPZd ()23<=FGPQZ[ei  (*24<>FHPRZ\fn  !"#$%&'(+25<?FIPSZ]gs "()*+,-./0126<@FJPTZ^hx )3=GQ[j  )*34=>GHQR[\ko  !"#$%&')+35=?GIQS[]lt "()*+,-./0136=@GJQT[^my  *4>HR\p  !"#$%&'*+45>?HIRS\]qu  "()*+,-./0146>@HJRT\^rz  !"#$%&'+5?IS]v  !"#$%&'()*+,-./0156?@IJST]^w{"()*+,-./016@JT^|  !"()*+,7  !"()*+,B  !"()*+,M  !"()*+,X  !"()*+,c !,7BMXcX:`†¬Àæ 2Fl’¦Ìàú.Hbl `¶óýÔx_@ñcÌ]K€AÀ®¶bÙ)S@¢E¶óýT;@¶óýÔx±NÀÞ“‡…Z+V@‡ÙÎ÷ÃTÀгYõ¹Š0@¼O4ÀƒQI€EÀñcÌ]K€AÀ®¶bÙ)S@¢E¶óýT;@¶óýÔx±NÀÞ“‡…Z+V@‡ÙÎ÷ÃTÀгYõ¹Š0@¼O4ÀƒQI€EÀð?…ëQ¸jb@[B>èÙèÙP@h"lxzåH@à6@…|гYÉUÀñcÌ]K€AÀ-²ï—P@®¶bÙ)S@zÇ):’Û4ÀñcÌ]K€AÀ®¶bÙ)S@¢E¶óýTK@¶óýÔx±NÀÞ“‡…Z+V@‡ÙÎ÷ÃTÀгYõ¹Š0@¼O4ÀƒQI€EÀ•Ô hâ5@¶óýÔx±NÀ<½R–!úW@Þ“‡…Z+V@Ñ"Ûù~ %@‡ÙÎ÷ÃTÀx $(>P@гYõ¹Š0@h"lxzåH@¼O4Àà6@ƒQI€EÀð?ð?5^ºI îa@ßO—n¶QÀ<½R–!~A@ µ¦yÇIDÀ/Ý$Ý`@aÃÓ+e‰S@Ü×sFtW@Zd;ßOÝA@ßà “©BF@,eâXKVÀßO—n¶QÀñcÌ]K€AÀ<½R–!~A@®¶bÙ)S@ µ¦yÇIDÀ¢E¶óýT;@/Ý$Ý`@ñcÌ]K€AÀ®¶bÙ)S@¢E¶óýT;@¶óýÔx±^ÀÞ“‡…Z+V@‡ÙÎ÷ÃTÀгYõ¹Š0@¼O4ÀƒQI€EÀaÃÓ+e‰S@Þ“‡…Z+V@Ü×sFtW@‡ÙÎ÷ÃTÀZd;ßOÝA@гYõ¹Š0@ßà “©BF@¼O4À,eâXKVÀƒQI€EÀð?ð?‚âǘ»jR@‚âǘ»jR@MŒJê¤.ÀO¯”eˆSR@ÜFx +ÀMóŽSt4A@KÈ=›JÀ®GázMÀ•Ô hÒ6@w-!ô$SÀ‘í|?5JQ@O¯”eˆSR@ÜFx +ÀMóŽSt4A@KÈ=›JÀ®GázMÀ•Ô hÒ6@w-!ô$SÀ‘í|?5JQ@ð?îZB>èñR@‚âǘ»jR@îZB>èñR@±PkšwœBÀøS㥛G@¨5Í;NéUÀ¢´7øÂ´UÀÖVì/»·N@ µ¦yÇEX@Õxé&1@CÀ×òAÏ^A@BÏfÕçj0À‚âǘ»jR@øS㥛G@ìQ¸…Sb@ÜFx +ÀMóŽSt4A@KÈ=›JÀ®GázMÀ•Ô hÒ6@w-!ô$SÀ‘í|?5JQ@¨5Í;NéUÀÜFx +À¢´7øÂ´UÀMóŽSt4A@ÖVì/»·N@KÈ=›JÀ µ¦yÇEX@®GázMÀÕxé&1@CÀ•Ô hÒ6@×òAÏ^A@w-!ô$SÀBÏfÕçj0À‘í|?5JQ@ð?ð?°rh‘íüKÀ‚âǘ»jR@°rh‘íüKÀÓMbXÉeÀ-²ï—P@çŒ(í©VÀ•Ô hâ5@<½R–!úW@Ñ"Ûù~ %@x $(>P@h"lxzåH@à6@-²ï—P@O¯”eˆSR@‚âǘ»jR@çŒ(í©VÀO¯”eˆSR@£¼;ÀMóŽSt4A@KÈ=›JÀ®GázMÀ•Ô hÒ6@w-!ô$SÀ‘í|?5JQ@•Ô hâ5@MóŽSt4A@<½R–!úW@KÈ=›JÀÑ"Ûù~ %@®GázMÀx $(>P@•Ô hÒ6@h"lxzåH@w-!ô$SÀà6@‘í|?5JQ@ð?ð?çŒ(í îQ@‚âǘ»jR@çŒ(í îQ@ßO—n¶aÀ<½R–!~A@ µ¦yÇIDÀû\mÅþFP@aÃÓ+e‰S@Ü×sFtW@Zd;ßOÝA@ßà “©BF@,eâXKVÀ<½R–!~A@O¯”eˆSR@ µ¦yÇIDÀÜFx +À‚âǘ»jR@û\mÅþFP@O¯”eˆSR@ÜFx +ÀMóŽSt4Q@KÈ=›JÀ®GázMÀ•Ô hÒ6@w-!ô$SÀ‘í|?5JQ@aÃÓ+e‰S@KÈ=›JÀÜ×sFtW@®GázMÀZd;ßOÝA@•Ô hÒ6@ßà “©BF@w-!ô$SÀ,eâXKVÀ‘í|?5JQ@ð?ð?îZB>èñR@±Pkšwœ2ÀîZB>èñR@±Pkšwœ2Àð§ÆK7ñZ@¨5Í;NéUÀ¢´7øÂ´UÀÖVì/»·N@ µ¦yÇEX@Õxé&1@CÀ×òAÏ^A@BÏfÕçj0À¨5Í;NéUÀ¢´7øÂ´UÀÖVì/»·N@ µ¦yÇEX@Õxé&1@CÀ×òAÏ^A@BÏfÕçj0Àð?°rh‘íüKÀîZB>èñR@…|гYÉUÀ±Pkšwœ2À°rh‘íüKÀ…|гYÉUÀ-²ï—`@@¤ß¾=À•Ô hâ5@<½R–!úW@Ñ"Ûù~ %@x $(>P@h"lxzåH@à6@îZB>èñR@±Pkšwœ2À@¤ß¾=ÀZd;ßOéeÀ¢´7øÂ´UÀÖVì/»·N@ µ¦yÇEX@Õxé&1@CÀ×òAÏ^A@BÏfÕçj0À•Ô hâ5@¢´7øÂ´UÀ<½R–!úW@ÖVì/»·N@Ñ"Ûù~ %@ µ¦yÇEX@x $(>P@Õxé&1@CÀh"lxzåH@×òAÏ^A@à6@BÏfÕçj0Àð?ð?çŒ(í îQ@îZB>èñR@ßO—n¶QÀ±Pkšwœ2ÀçŒ(í îQ@ßO—n¶QÀ<½R–!~Q@ µ¦yÇIDÀR¸…ë©_@aÃÓ+e‰S@Ü×sFtW@Zd;ßOÝA@ßà “©BF@,eâXKVÀ µ¦yÇIDÀ¨5Í;NéUÀîZB>èñR@±Pkšwœ2ÀR¸…ë©_@¨5Í;NéUÀT㥛ĴeÀÖVì/»·N@ µ¦yÇEX@Õxé&1@CÀ×òAÏ^A@BÏfÕçj0ÀaÃÓ+e‰S@ÖVì/»·N@Ü×sFtW@ µ¦yÇEX@Zd;ßOÝA@Õxé&1@CÀßà “©BF@×òAÏ^A@,eâXKVÀBÏfÕçj0Àð?ð?°rh‘íüKÀ…|гYÉUÀ-²ï—P@°rh‘íüKÀ…|гYÉUÀ-²ï—P@V-²¿dÀ•Ô hâ5@<½R–!úW@Ñ"Ûù~ %@x $(>P@h"lxzåH@à6@•Ô hâ5@<½R–!úW@Ñ"Ûù~ %@x $(>P@h"lxzåH@à6@ð?çŒ(í îQ@°rh‘íüKÀßO—n¶QÀ…|гYÉUÀ<½R–!~A@-²ï—P@çŒ(í îQ@ßO—n¶QÀ<½R–!~A@Y†8ÖÅITÀû:pΈr$ÀaÃÓ+e‰S@Ü×sFtW@Zd;ßOÝA@ßà “©BF@,eâXKVÀ°rh‘íüKÀ…|гYÉUÀ-²ï—P@û:pΈr$Àµ7øÂdâE@<½R–!úW@Ñ"Ûù~ %@x $(>P@h"lxzåH@à6@aÃÓ+e‰S@<½R–!úW@Ü×sFtW@Ñ"Ûù~ %@Zd;ßOÝA@x $(>P@ßà “©BF@h"lxzåH@,eâXKVÀà6@ð?ð?çŒ(í îQ@ßO—n¶QÀ<½R–!~A@ µ¦yÇIDÀçŒ(í îQ@ßO—n¶QÀ<½R–!~A@ µ¦yÇIDÀZd;ßO1b@aÃÓ+e‰S@Ü×sFtW@Zd;ßOÝA@ßà “©BF@,eâXKVÀaÃÓ+e‰S@Ü×sFtW@Zd;ßOÝA@ßà “©BF@,eâXKVÀð?ìQ¸…œÀ¼t“ƒ…@ö(\Âà£Àffffæ©®@ÍÌÌÌL©@¼t“ƒ…@¼t“|pÀ¼t“wŽ@Âõ(\—Àáz®G3“Àö(\Âà£À¼t“wŽ@Ház®&¬À€¶µ@3333ó½±@ffffæ©®@Âõ(\—À€¶µ@q= ×C¿ÀÀfffff^»ÀÍÌÌÌL©@áz®G3“À3333ó½±@fffff^»ÀÍÌÌÌ ]¶Àð?Âõ(ܽ½À3333ó³»@…ëQ8¿@®Gáz”ö£@áz®Ç›ªÀ3333ó³»@¸…ëÑ͹Àš™™™Yf½Àö(\B˜¢ÀÂõ(ÜȨ@…ëQ8¿@š™™™Yf½À3333“¿ÀÀš™™™™/¥ÀìQ¸=¬@®Gáz”ö£@ö(\B˜¢Àš™™™™/¥ÀÏ÷Sã¥ÌŠÀ33333Ü‘@áz®Ç›ªÀÂõ(ÜȨ@ìQ¸=¬@33333Ü‘@33333ΗÀð?š™™™3£À®Gázt­@ƒÀÊ¡Qa@Âõ(\^¬@{®GaC³@®Gázt­@®Gáz˜¶Àçû©ñÒ‘jÀÀµÀ3333s½ÀƒÀÊ¡Qa@çû©ñÒ‘jÀšž>Àmçû©ñ–iÀü©ñÒM`qÀÂõ(\^¬@ÀµÀmçû©ñ–iÀ×£p=Jõ´ÀR¸…kv¼À{®GaC³@3333s½Àü©ñÒM`qÀR¸…kv¼À¤p= ·SÃÀð?X9´Èv”ˆÀoƒÀÊeŽ@ìQ¸…(¥@Ï÷Sã¥Q@B`åÐ"ÌŠÀoƒÀÊeŽ@ÍÌÌÌÌË’ÀìQ¸…*ªÀ×£p= !’ÀR¸…ë‘@ìQ¸…(¥@ìQ¸…*ªÀ€6ÂÀ¸…ëÑ<©À\Âõ(§@Ï÷Sã¥Q@×£p= !’À¸…ëÑ<©ÀÂõ(\|‘ÀÍÌÌÌÌö@B`åÐ"ÌŠÀR¸…ë‘@\Âõ(§@ÍÌÌÌÌö@¼t“7Àð?Âõ(\¡xÀôýÔxé6‚@…ëQ¸̘@¤p= בÀh‘í|?ÝyÀôýÔxé6‚@š™™™™ðŠÀ×£p=ŠV¢Àfffff-™@—nƒ ƒ@…ëQ¸̘@×£p=ŠV¢À\Âõ(÷¸Àfffff#±@…ëQ¸ š@¤p= בÀfffff-™@fffff#±@…ëQ¸‡§À\Âõ(à‘Àh‘í|?ÝyÀ—nƒ ƒ@…ëQ¸ š@\Âõ(à‘Àmçû©ñ({Àð?ð¿ð¿ð¿ð¿ð¿ð¿ð¿ð¿ð¿ð¿Rcsdp/src/Csdp/matlab/convertf.m0000644000175100001440000000263514342635402016300 0ustar hornikusers% % [A,b,c,K]=convertf(A,b,c,K) % % converts free variables in a SeDuMi problem into nonnegative LP variables. % function [A,b,c,K]=convertf(A,b,c,K) % % Get the number of constraints. % m=length(b); % % Deal with the following special case. If A is transposed, transpose % it again so that it is of the right size. % [Am,An]=size(A); if (Am ~= m) if (An == m) fprintf('Transposing A to match b \n'); A=A'; else fprintf('A is not of the correct size to match b \n'); return end end % % Deal with the following special case: if c==0, then c should really % be a zero vector of the appropriate size. % if (c == 0) fprintf('Expanding c to the appropriate size\n'); [Am,An]=size(A); c=zeros(An,1); end % % If c is empty, then act as if it was zero. % if (isempty(c)) fprintf('Expanding empty c to zeros of the appropriate size\n'); [Am,An]=size(A); c=zeros(An,1); end % % If c is a row vector, make it a column vector. % [cm,cn]=size(c); if (cn > cm) c=c'; end % % Check for any free LP variables and rewrite them as the differences of % regular LP variables. % if (isfield(K,'f')) nfree=K.f fprintf('Converting %d free variables to LP variables\n',nfree); if (isfield(K,'l')) nlin=K.l; else nlin=0; end [Am,An]=size(A); Anew=[A(:,1:nfree) -A(:,1:nfree) A(:,nfree+1:An)]; A=Anew; cnew=[c(1:nfree); -c(1:nfree); c(nfree+1:An)]; c=cnew; K.l=nlin+2*nfree; K.f=0; end Rcsdp/src/Csdp/matlab/readsol.m0000644000175100001440000000720014342635402016074 0ustar hornikusers% % [x,y,z]=readsol(fname,K,m) % % fname File name to read solution from. % K structure of the matrices. % m size of y vector. % % Modified 7/15/04, for greater MATLAB acceleration. % function [x,y,z]=readsol(fname,K,m) % % First, eliminate special cases that we don't handle. % % % Check for any quadratic cone constraints. % if (isfield(K,'q') & (~isempty(K.q)) & (K.q ~= 0)), fprintf('quadratic cone constraints are not supported.\n'); return; end; % % Check for any rotated cone constraints. % if (isfield(K,'r') & (~isempty(K.r)) & (K.r ~= 0)), fprintf('rotated cone constraints are not supported.\n'); return; end; % % Check for any free variables. % if (isfield(K,'f') & (~isempty(K.f)) & (K.f ~= 0)), fprintf('Free variables are not supported.\n'); return; end; % % Figure out the structure of the LP and SDP blocks. % if (isfield(K,'l')), if (K.l > 0) nlin=K.l; else K.l=0; nlin=0; end; else K.l=0; nlin=0; end; % % Patched on 10/23/03 to handle all kinds of stupid ways of indicating % no SDP block. % if (isfield(K,'s')), if (length(K.s) > 1), nsdpblocks=length(K.s); else if (length(K.s)==1), if (K.s==0) nsdpblocks=0; K.s=[]; else nsdpblocks=1; end; else nsdpblocks=0; K.s=[]; end; end; else K.s=[]; nsdpblocks=0; end; % % First, where everything is in the vector. % % vecsdpbase(i)=point in vector at which SDP block i starts. % v(1..nlin) LP variables. % base=nlin+1; for i=1:length(K.s), vecsdpbase(i)=base; base=base+(K.s(i))^2; end; % % Second, where everything is in the matrix. % % matsdpbase(i)= index of upper left corner of SDP block i. % matlpbase index of start of LP block. % base=1; for i=1:length(K.s), matsdpbase(i)=base; base=base+K.s(i); end; matlpbase=base; % % Setup an array containing blocksizes. blocksize(i) is used as a faster % synonym for K.s(i) in what follows. This is because MATLAB doesn't % accelerate statements involving fields. % if (nsdpblocks >= 1), blocksizes=zeros(nsdpblocks,1); for i=1:nsdpblocks, blocksizes(i)=K.s(i); end; end; % % Open up the file. % fid=fopen(fname,'r'); if (fid == -1), fprintf('file does not exist!\n'); x=NaN; y=NaN; z=NaN; return; end; % % Read y. % y=fscanf(fid,'%le',m); % % Read the remaining entries. % [A,count]=fscanf(fid,'%d %d %d %d %le',[5,inf]); count=count/5; % % Allocate storage for x and z. % if ((length(K.s) > 1) | (length(K.s==1) & (K.s>0))), veclength=vecsdpbase(length(K.s))+K.s(nsdpblocks)^2-1; else veclength=nlin; end; % % Allocate space for x and z. We could use sparse vectors here, but % the dense vector is vastly faster. % x=zeros(veclength,1); z=zeros(veclength,1); % % now, loop through the entries and put them into x and z. % for i=1:count, if (A(1,i)==1), % % A z entry. % blk=A(2,i); indexi=A(3,i); indexj=A(4,i); ent=A(5,i); if (blk==nsdpblocks+1) z(indexi)=ent; else % % In one of the SDP blocks. % % [blk, indexi, indexj, K.s(blk)] z(vecsdpbase(blk)+indexi+(indexj-1)*blocksizes(blk)-1)=ent; z(vecsdpbase(blk)+indexj+(indexi-1)*blocksizes(blk)-1)=ent; end; else % % An x entry. % blk=A(2,i); indexi=A(3,i); indexj=A(4,i); ent=A(5,i); if (blk==nsdpblocks+1) x(indexi)=ent; else % % In one of the SDP blocks. % x(vecsdpbase(blk)+indexi+(indexj-1)*blocksizes(blk)-1)=ent; x(vecsdpbase(blk)+indexj+(indexi-1)*blocksizes(blk)-1)=ent; end; end; end; % % Correction for the difference between CSDP and SeDuMi primal/dual pair. % y=-y; % % close the file. % fclose(fid); Rcsdp/configure.win0000644000175100001440000000000014342635402014034 0ustar hornikusersRcsdp/R/0000755000175100001440000000000014414753737011563 5ustar hornikusersRcsdp/R/convert.R0000644000175100001440000001323714342635402013360 0ustar hornikusers# Convert data to/from csdp format # to R objects (matrix or simple_triplet_sym_matrix) # vectors vector_R2csdp <- function(x) { c(0,x); } vector_csdp2R <- function(x) { x[-1]; } blkmatrix_R2csdp <- function(X,prob.info) { do.one.block <- function(blocknum) { cur.block <- X[[blocknum]]; cur.type <- prob.info$block.types[blocknum]; cur.size <- prob.info$block.sizes[blocknum]; if (cur.type == 1) { data <- as.double(cur.block); } else { data <- vector_R2csdp(cur.block) } structure(list(blocksize=as.integer(cur.size), blockcategory=as.integer(cur.type), data=as.double(data)),class="csdpBlkMat") } nblocks <- prob.info$nblocks; list(nblocks=nblocks, blocks=lapply(seq_along(X),do.one.block)) } all.equal.csdpBlkMat <- function(target, current, ...) { all.equal.list(target,current,...) } blkmatrix_csdp2R <- function(X,prob.info) { do.one.block <- function(blocknum) { cur.block <- X$blocks[[blocknum]]; cur.type <- prob.info$block.types[blocknum]; cur.size <- prob.info$block.sizes[blocknum]; names(cur.block) <- c("blocksize","blockcategory","data"); if (cur.type == 1) matrix(cur.block$data,cur.size,cur.size) else vector_csdp2R(cur.block$data); } names(X) <- c("nblocks","blocks"); lapply(seq_along(X$blocks),do.one.block); } constraints_R2csdp <- function(A,prob.info) { nblocks <- prob.info$nblocks; do.one.constraint <- function(constraintnum) { Ai = A[[constraintnum]] ret <- vector("list",nblocks) k <- 0; for (j in 1:nblocks) { blocknum <- j; Aij <- Ai[[blocknum]]; cur.type <- prob.info$block.types[blocknum]; cur.size <- prob.info$block.sizes[blocknum]; if (cur.type == 1) { tmp <- as.simple_triplet_sym_matrix(Aij); if (length(tmp$v) == 0) next iindices <- vector_R2csdp(tmp$i); jindices <- vector_R2csdp(tmp$j); entries <- vector_R2csdp(tmp$v); } else { nnz <- which(Aij != 0); if (length(nnz) == 0) next iindices <- vector_R2csdp(nnz); jindices <- vector_R2csdp(nnz); entries <- vector_R2csdp(Aij[nnz]); } k <- k+1 ret[[k]] <- structure(list(iindices=as.integer(iindices), jindices=as.integer(jindices), entries=as.double(entries), blocknum=as.integer(blocknum), blocksize=as.integer(cur.size), constraintnum=as.integer(constraintnum), numentries=as.integer(length(entries)-1)),class="csdpConstrMat") } ret[1:k] } lapply(seq_along(A),do.one.constraint); } all.equal.csdpConstrMat <- function(target, current, ...) { res <- all.equal.list(target[c("blocknum","blocksize","constraintnum","numentries")], current[c("blocknum","blocksize","constraintnum","numentries")],...) if (is.logical(res)) { if (!res) return(FALSE) return(all.equal(simple_triplet_sym_matrix(i=target$iindices[-1], j=target$jindices[-1], v=target$entries[-1]), simple_triplet_sym_matrix(i=target$iindices[-1], j=target$jindices[-1], v=target$entries[-1]))) } return(res) } constraints_csdp2R <- function(A,prob.info) { nblocks <- prob.info$nblocks do.one.constraint <- function(constraintnum) { Ai <- A[[constraintnum]] ret <- mapply(FUN=function(type, size) { if (type == 1) { .simple_triplet_zero_sym_matrix(size) } else { rep(0, size) }}, prob.info$block.types, prob.info$block.sizes, SIMPLIFY=FALSE) for (j in 1:length(Ai)) { Aij <- Ai[[j]]; names(Aij) <- c("iindices","jindices","entries", "blocknum","blocksize","constraintnum","numentries"); if (Aij$constraintnum != constraintnum) stop("Constraint number in csdp constraint matrix is not right") cur.type <- prob.info$block.types[Aij$blocknum]; cur.size <- prob.info$block.sizes[Aij$blocknum]; if (cur.type == 1) { cur.iindices <- vector_csdp2R(Aij$iindices); cur.jindices <- vector_csdp2R(Aij$jindices); # simple_triplet_sym_matrix uses the lower triangle if (any(cur.iindices < cur.jindices)) { tmp <- cur.iindices cur.iindices <- cur.jindices cur.jindices <- tmp } ret[[Aij$blocknum]] <- simple_triplet_sym_matrix(i=cur.iindices, j=cur.jindices, v=vector_csdp2R(Aij$entries), n=cur.size, check.ind=TRUE); } else { tmp <- rep(0.0,cur.size); tmp[vector_csdp2R(Aij$iindices)] <- vector_csdp2R(Aij$entries) ret[[Aij$blocknum]] <- tmp; } } ret } lapply(seq_along(A),do.one.constraint); } Rcsdp/R/sparse.R0000644000175100001440000000644214414753573013207 0ustar hornikusers## A simple class for sparse symmetric (triplet) matrices. ## ## Mostly copied from sparse.R in Kurt Hornik's relations package simple_triplet_sym_matrix <- function(i, j, v, n = max(c(i,j)),check.ind=FALSE) { if (check.ind & any(i= ind[,2L],,drop=FALSE] simple_triplet_sym_matrix(ind[, 1L], ind[, 2L], x[ind], n = nrow(x)) } as.matrix.simple_triplet_sym_matrix <- function(x, ...) { n <- x$n y <- matrix(vector(typeof(x$v), n * n), n, n) ind <- cbind(x$i, x$j) y[ind] <- x$v offdiag <- x$i != x$j y[ind[offdiag,c(2L,1L),drop=FALSE]] <- x$v[offdiag] y } as.vector.simple_triplet_sym_matrix <- function(x, ...) { as.vector(as.matrix(x,...)) } as.double.simple_triplet_sym_matrix <- function(x,...) { as.double(as.vector(x,...)) } dim.simple_triplet_sym_matrix <- function(x) c(x$n, x$n) all.equal.simple_triplet_sym_matrix <- function(target,current,...) { if(!inherits(current,"simple_triplet_sym_matrix")) stop("Argument 'current' is not of class 'simple_triplet_sym_matrix'") if(!inherits(target,"simple_triplet_sym_matrix")) stop("Argument 'target' is not of class 'simple_triplet_sym_matrix'") cur.ord <- order(current$j,current$i) current$i <- current$i[cur.ord] current$j <- current$j[cur.ord] current$v <- current$v[cur.ord] targ.ord <- order(target$j,target$i) target$i <- target$i[targ.ord] target$j <- target$j[targ.ord] target$v <- target$v[targ.ord] all.equal.list(current,target,...) } ## Utitilies for creating special simple triplet matrices: .simple_triplet_zero_sym_matrix <- function(n, mode = "double") simple_triplet_sym_matrix(integer(), integer(), vector(mode, 0L),n) .simple_triplet_diag_sym_matrix <- function(x, n) { x <- rep(x, length.out = n) i <- seq_len(n) simple_triplet_sym_matrix(i, i, x, n) } .simple_triplet_random_sym_matrix <- function(n,occ=.1,nnz=occ*n*(n+1)/2,rfun=rnorm,seed=NULL,...) { if(!missing(seed) & !is.null(seed)) set.seed(seed) # sample indices in the lower triangle iind <- sample(n*(n+1)/2,nnz) ind <- 1:(n*(n+1)/2) + sapply(rep(1:n,times=n:1), function(x) x*(x-1)/2) ind <- ind[iind] simple_triplet_sym_matrix(i=((ind-1) %% n) + 1, j=((ind-1) %/% n) + 1, v=rfun(nnz,...), n=n) } Rcsdp/R/sdpa.R0000644000175100001440000000640014342635402012621 0ustar hornikuserscoerce_mat <- function(mat,cfun=as.simple_triplet_sym_matrix) if (is.null(dim(mat))) mat else cfun(mat) coerce_blkmat <- function(Aij,cfun=as.simple_triplet_sym_matrix) lapply(Aij,coerce_mat,cfun=cfun) coerce_const <- function(Ai,cfun=as.simple_triplet_sym_matrix) lapply(Ai,coerce_blkmat,cfun=cfun) getdf_mat <- function(x) { if(!is.null(dim(x))) { x <- as.simple_triplet_sym_matrix(x) if (length(x$v) == 0) return(NULL) else return(cbind(x$j,x$i,x$v)) } else { ind <- which(x != 0) if (length(ind) == 0) return(NULL) else return(cbind(ind,ind,x[ind])) } } getdf_blkmat <- function(x) { do.call(rbind,lapply(1:length(x),function(j) {df <- getdf_mat(x[[j]]); if (is.null(df)) return(NULL) else return(cbind(j,df))})) } getdf_const <- function(x) { do.call(rbind,lapply(1:length(x), function(i) {df <- getdf_blkmat(x[[i]]); if (is.null(df)) return(NULL) else return(cbind(i,df))})) } readsdpa <- function(file="",verbose=FALSE) { if (file=="") stop("'file' argument must be a non-empty string") ret <- .Call(C_readsdpa, as.character(file), as.integer(verbose), PACKAGE="Rcsdp") names(ret) <- c("C","A","b","K"); names(ret$K) <- c("type","size"); ret$K$type <- c("s","l")[vector_csdp2R(ret$K$type)]; ret$K$size <- vector_csdp2R(ret$K$size); m <- length(ret$b)-1; prob.info <- get.prob.info(ret$K,m) ret$C <- blkmatrix_csdp2R(ret$C,prob.info); ret$A <- constraints_csdp2R(ret$A,prob.info); ret$b <- vector_csdp2R(ret$b); ret } readsdpa.sol <- function(K,C,m,file="") { if (file=="") stop("'file' argument must be a non-empty string") prob.info <- get.prob.info(K,m); ret <- .Call(C_readsdpa_sol, as.character(file), as.integer(sum(prob.info$block.sizes)), as.integer(m), blkmatrix_R2csdp(C,prob.info), PACKAGE="Rcsdp"); names(ret) <- c("X","y","Z"); ret$X <- blkmatrix_csdp2R(ret$X,prob.info); ret$y <- vector_csdp2R(ret$y); ret$Z <- blkmatrix_csdp2R(ret$Z,prob.info); ret } writesdpa <- function(C,A,b,K,file="") { if (file=="") stop("'file' argument must be a non-empty string") prob.info <- get.prob.info(K,length(b)); validate.data(C,A,b,prob.info) prob.data <- prepare.data(C,A,b,prob.info) .Call(C_writesdpa, as.character(file), as.integer(sum(prob.info$block.sizes)), as.integer(prob.info$nconstraints), as.integer(prob.info$nblocks), as.integer(c(0,prob.info$block.types)), as.integer(c(0,prob.info$block.sizes)), prob.data$C, prob.data$A, prob.data$b, PACKAGE="Rcsdp") } writesdpa.sol <- function(X,Z,y,K,file="") { if (file=="") stop("'file' argument must be a non-empty string") prob.info <- get.prob.info(K,length(y)); .Call(C_writesdpa_sol, as.character(file), as.integer(sum(prob.info$block.sizes)), as.integer(prob.info$nconstraints), blkmatrix_R2csdp(X,prob.info), vector_R2csdp(y), blkmatrix_R2csdp(Z,prob.info), PACKAGE="Rcsdp") } Rcsdp/R/sparseMat.R0000644000175100001440000000334114414753737013646 0ustar hornikusers# functions to support sparse matrices from the Matrix package .not.dsTMatrix <- function(x,cl) { if(!inherits(x,cl)) stop("Argument 'x' must be of class ", cl) as.simple_triplet_sym_matrix(as(x,"dsTMatrix")) } as.simple_triplet_sym_matrix.dgeMatrix <- function(x, ...) .not.dsTMatrix(x,"dgeMatrix") as.simple_triplet_sym_matrix.dsyMatrix <- function(x, ...) .not.dsTMatrix(x,"dsyMatrix") as.simple_triplet_sym_matrix.dpoMatrix <- function(x, ...) .not.dsTMatrix(x,"dpoMatrix") as.simple_triplet_sym_matrix.dgTMatrix <- function(x, ...) .not.dsTMatrix(x,"dgTMatrix") as.simple_triplet_sym_matrix.dsCMatrix <- function(x, ...) .not.dsTMatrix(x,"dsCMatrix") as.simple_triplet_sym_matrix.dsTMatrix <- function(x, ...) { if(!inherits(x,"dsTMatrix")) stop("Argument 'x' must be of class 'dsTMatrix'") # simple_triplet_sym_matrix store entries in the # lower triangle only if (x@uplo %in% c("u","U")) { x@uplo <- "l" tmp <- x@i x@i <- x@j x@j <- tmp } x <- as(x,"dsTMatrix") simple_triplet_sym_matrix(i=x@i+1, j=x@j+1, v=x@x, n=nrow(x)) } #setAs("simple_triplet_sym_matrix","dsTMatrix", # function(x) # { # new("dgTMatrix",i=as.integer(x$i-1),j=as.integer(x$j-1),x=v,Dim=as.integer(c(x$n,x$n)),uplo="L") # }) as.simple_triplet_sym_matrix.ddiMatrix <- function(x, ...) { if(!inherits(x,"ddiMatrix")) stop("Argument 'x' must be of class 'ddiMatrix'") v <- if (x@diag=="U") rep(1,nrow(x)) else x@x simple_triplet_sym_matrix(i=1:nrow(x), j=1:nrow(x), v=v, n=nrow(x)) } Rcsdp/R/Rcsdp.R0000644000175100001440000001157214346122240012746 0ustar hornikusers# Rcsdp.R # Interface to the CSDP semidefinite programming library by Brian Borchers # https://github.com/coin-or/Csdp/ # # Created: 22 February 2008 # Author: Hector Corrada Bravo csdp <- function(C,A,b,K,control=csdp.control()) { prob.info <- get.prob.info(K,length(b)) validate.data(C,A,b,prob.info) prob.data <- prepare.data(C,A,b,prob.info) write.control.file(control) ret <- .Call(C_csdp, as.integer(sum(prob.info$block.sizes)), as.integer(prob.info$nconstraints), as.integer(prob.info$nblocks), as.integer(c(0,prob.info$block.types)), as.integer(c(0,prob.info$block.sizes)), prob.data$C, prob.data$A, prob.data$b, PACKAGE="Rcsdp") unlink("param.csdp") ret[1:3] <- get.solution(ret[[1]],ret[[2]],ret[[3]],prob.info) structure(ret,names=c("X","Z","y","pobj","dobj","status")) } get.solution <- function(X,Z,y,prob.info) { list(X=blkmatrix_csdp2R(X,prob.info), Z=blkmatrix_csdp2R(Z,prob.info), y=vector_csdp2R(y)) } prepare.data <- function(C,A,b,prob.info) { list(C=blkmatrix_R2csdp(C,prob.info), A=constraints_R2csdp(A,prob.info), b=as.double(vector_R2csdp(b))) } get.prob.info <- function(K,m) { if (!all.equal(names(K),c("type","size"))) stop("Invalid cone specification 'K': elements must be 'type' and 'size'") if (!all(K$type %in% c("s","l"))) stop("Invalid cone specification 'K': types must be 's' or 'l'") if (length(K$type) != length(K$size)) stop("Invalid conse specification 'K': type and size elements must be of the same length") block.types <- ifelse(K$type == "s",1,2) nblocks <- length(K$type) block.sizes <- K$size nconstraints <- m; ret <- list(nblocks=nblocks, nconstraints=nconstraints, block.types=block.types, block.sizes=block.sizes) return(ret) } validate.data <- function(C,A,b,prob.info) { nblocks <- prob.info$nblocks nconstraints <- prob.info$nconstraints block.types <- prob.info$block.types block.sizes <- prob.info$block.sizes # Validate number of blocks in C if (length(C) != nblocks) stop("Number of blocks in C disagrees with K") # Validate number of constraint matrices in A if (length(A) != nconstraints) stop("Number of constraint matrices in A disagrees with b") # Validate each block of C for (j in 1:nblocks) { if ((block.types[j] == 1) && (block.sizes[j] != nrow(C[[j]]) || block.sizes[j] != ncol(C[[j]]))) stop("Size of block ",j," in C does not agree with K") if ((block.types[j] == 2) && (block.sizes[j] != length(C[[j]]))) stop("Size of block ",j," in C does not agree with K") } # Validate constraint matrices for (i in 1:nconstraints) { Ai <- A[[i]]; if (length(Ai) != nblocks) stop("Number of blocks in constraint matrix ",i," in A disagrees with K") for (j in 1:nblocks) { if ((block.types[j] == 1) && (block.sizes[j] != nrow(Ai[[j]]) || block.sizes[j] != ncol(Ai[[j]]))) stop("Size of block ",j," in constraint matrix ",i," in A does not agree with K") if ((block.types[j] == 2) && (block.sizes[j] != length(Ai[[j]]))) stop("Size of block ",j," in constraint ",i," of A does not agree with K") } } } csdp.control <- function(axtol=1e-8, atytol=1e-8, objtol=1e-8, pinftol=1e8, dinftol=1e8, maxiter=100, minstepfrac=0.90, maxstepfrac=0.97, minstepp=1e-8, minstepd=1e-8, usexzgap=1, tweakgap=0, affine=0, printlevel=1, perturbobj=1, fastmode=0) { list(axtol=axtol, atytol=atytol, objtol=objtol, pinftol=pinftol, dinftol=dinftol, maxiter=maxiter, minstepfrac=minstepfrac, maxstepfrac=maxstepfrac, minstepp=minstepp, minstepd=minstepd, usexzgap=usexzgap, tweakgap=tweakgap, affine=affine, printlevel=printlevel, perturbobj=perturbobj, fastmode=fastmode) } write.control.file <- function(control) { fileptr <- file("param.csdp","w") for (i in 1:length(control)) cat(names(control)[i],"=",control[[i]],"\n",sep="",file=fileptr) close(fileptr) } csdp_minimal <- function(sum.block.sizes, nconstraints, nblocks, block.types, block.sizes, C, A, b) { return(.Call( C_csdp, as.integer(sum.block.sizes), as.integer(nconstraints), as.integer(nblocks), as.integer(block.types), as.integer(block.sizes), C, A, b, PACKAGE="Rcsdp" )) } Rcsdp/NEWS.md0000644000175100001440000000205114342635402012442 0ustar hornikusers# Rcsdp 0.1.57 * Fix remaining CRAN check issues (CC variable in Solaris - thanks Brian Ripley, ignore function return value) # Rcsdp 0.1.56 * Added a `NEWS.md` file to track changes to the package. * Exposes function 'csdp.control' through NAMESPACE * Adds function 'csdp_minimal' (contributed by Don van den Bergh - https://github.com/vandenman, https://github.com/hcorrada/rcsdp/pull/1) * Fixes 'significant warning' from use of `R CMD config` to get CPP variable # Rcsdp 0.1.52 * Updated CSDP to version 6.1.1 * Fixed bug in constraint matrix conversion from default behavior of mapply * Updated configure script to fix build errors # Rcsdp 0.1.50 * Changed version naming * Added configure.ac to source package * Fixed issues in Makevars.in requested by Brian Ripley # Rcsdp 0.1-5 * Fixed bug reported by Dustin Lennon, where all-zero constraint vectors on linear blocks were not properly initialized. # Rcsdp 0.1-4 * Fixed bug reported by Jacques-Olivier Moussafir where an error is thrown on matrices having only one non-zero entry Rcsdp/MD50000644000175100001440000001377614414754524011703 0ustar hornikusersbaefccc63ccd3a5db5369b91dcd6b2ba *DESCRIPTION 5a1eda5858de22bf9ec9f60130be4d74 *NAMESPACE 6b7170de3f81c10fde823016f5bd0ab4 *NEWS.md 6ac2c4b9329107ecb415fa6773c70ea8 *R/Rcsdp.R 5713de1ba3211a2d1c196c3f9ab0c33f *R/convert.R 35cf424b340f0d00b53782c57ddd2f72 *R/sdpa.R bad9dfd73664e7815c5e74ddb21bf9ff *R/sparse.R 7e71c5edd6341f95fc403ac83fff8ac8 *R/sparseMat.R fd30926823ca586a13760cb6f9e209ef *README.md 024e41e0cf7762b657a67a1db102e73a *cleanup 0304d0495cbb83bc74f82cdcaa70d17c *configure 7496a2b0d7c61f5564d2540e3ca91043 *configure.ac d41d8cd98f00b204e9800998ecf8427e *configure.win a819e48c58e815f639b509d779afa38b *inst/INSTALL 6a9be91c2148c41b60243c7d2d7bf484 *man/csdp-sparse.Rd a9b6d1b07ddf01ccf0a3efdfcc9b0d76 *man/csdp.Rd 3cedce8f5a147cd7251868d8851834d6 *man/csdp.control.Rd 6ddcaae5edd01a7f51f30b2068fd319b *man/readsdpa.Rd 66640aa35694deed3d879fe88b72708c *src/Csdp/AUTHORS 9471bfcc56cc13be66b9089633193210 *src/Csdp/INSTALL edd4c6e1ed7a61e97668bb81c5cf9413 *src/Csdp/LICENSE 29d34884e928cc04508e90fca366196f *src/Csdp/Makefile fe0a4a373ad41932ddc1d7f7416f53c6 *src/Csdp/README 49fb299091859595c7068afda6da0d3d *src/Csdp/doc/README 61e24fc6087c1369a1f8f98c4546fae3 *src/Csdp/doc/a1block1.eps 86f4ed7d5eaecbed3e2364c5826602a7 *src/Csdp/doc/a1block1.fig 130e79750dcd4ebc2d00a8281223155a *src/Csdp/doc/a1block1.pdf f2a57899733be967f50248306f0ccf57 *src/Csdp/doc/cmat.eps 9288797ce245f213ca3420658c63725f *src/Csdp/doc/cmat.fig a9fd5c14a450340b4b91e1d470b463b6 *src/Csdp/doc/cmat.pdf b8e7227a055698105afbb7310b1d65c4 *src/Csdp/doc/constraints.eps a70267993995eb2c066f1af5ec97e64c *src/Csdp/doc/constraints.fig b1bf85921811a5bafc3aa6e3b1871e84 *src/Csdp/doc/constraints.pdf 40c4b6449a51a1cb565ee710c916d3fa *src/Csdp/doc/csdpuser.aux 584c214c238d3f122896749af853c01c *src/Csdp/doc/csdpuser.bbl e77fb5e981df671518b333383b5a9a81 *src/Csdp/doc/csdpuser.blg 471906cbf52cc7b3e36fa67e4f0c5ef5 *src/Csdp/doc/csdpuser.log d3285a7c13d3aeefde22a7294ccb5050 *src/Csdp/doc/csdpuser.pdf 0bc2e7a413ba8c87bad47f63c50d1078 *src/Csdp/doc/csdpuser.tex c4150c018b148c145c9a382f8aba5991 *src/Csdp/doc/example.c 0ee8c36762660a59f75c0278ede46006 *src/Csdp/doc/sdp.bib e98d1ec7418006c5d991753907b758db *src/Csdp/example/Makefile 4c1574ede2fc4f90ffec3728c3c85dd0 *src/Csdp/example/example.c e77f8e4d21e4760c4ef21878cf263a3e *src/Csdp/include/blockmat.h 05eb0165b487537d3d322c3356c547ce *src/Csdp/include/declarations.h c6f1afa8b3c444743d570e9fba173830 *src/Csdp/include/index.h f2ce87e96b703c1c3fa4842db4550688 *src/Csdp/include/parameters.h 45137a35dca8adc450690b4cda090576 *src/Csdp/lib/Fnorm.c e2990b0eaaaadd622687e51c89188b7b *src/Csdp/lib/Makefile 513f439daf7de288b2a1e3810e737f72 *src/Csdp/lib/add_mat.c 6b7595fb98361ce971af181c12023e47 *src/Csdp/lib/addscaledmat.c ec05a6645138a5ba8ebf2d628a29b534 *src/Csdp/lib/allocmat.c a5675e60b0c057fd22822ffda818e6b9 *src/Csdp/lib/calc_dobj.c 044a51ad9fda1f943dad40e8bbb62d29 *src/Csdp/lib/calc_pobj.c fc019eb9319255ceefb60220797a2dab *src/Csdp/lib/chol.c 758d05c4cf9b5987e20679e5d61617ed *src/Csdp/lib/copy_mat.c 7d1d4e8b665be93087e22d050ae64601 *src/Csdp/lib/easysdp.c d380b564237a589353d2a5a7d3e275f0 *src/Csdp/lib/freeprob.c dd2aacd3cdbdb187ccdef1502c94486f *src/Csdp/lib/initparams.c f90a2dad67b47cc16e36a5279550acd8 *src/Csdp/lib/initsoln.c f840f09159cec747338658f5176b4016 *src/Csdp/lib/linesearch.c de8201e29988a41035bafacbe76707a5 *src/Csdp/lib/make_i.c 9d214aa3c75435f94b40df8fb704eeba *src/Csdp/lib/makefill.c 1d61af233bb30bf211bc180eb02ffa43 *src/Csdp/lib/mat_mult.c 145c1b8f543cc931b0e5f5efb5e14c29 *src/Csdp/lib/mat_multsp.c 8cab91a43158fa25ba357047f1d42433 *src/Csdp/lib/matvec.c 410e8143628d2dfa84a4c3f79bd39786 *src/Csdp/lib/norms.c 85f0916439894b42ce1b2630f60c8c81 *src/Csdp/lib/op_a.c 95bdbe5190712aa348ece43ffb71bead *src/Csdp/lib/op_at.c fd50d91508f62892bfdc33a18c128583 *src/Csdp/lib/op_o.c 5c94e786bac819d21c63e52153676dae *src/Csdp/lib/packed.c 8e463b622c7da3156dda5b4314590c88 *src/Csdp/lib/psd_feas.c 288ef2caff794e8591d80bf0ff463d6a *src/Csdp/lib/qreig.c fa38a86ce1134ed0e0ff5c1530b15fbb *src/Csdp/lib/readprob.c 16719ed5100a08f78bc138499907a9de *src/Csdp/lib/readsol.c 82c73fe947257c7f1ea9a9d1186a0021 *src/Csdp/lib/sdp.c 1b699da3300933cf0e4db7c74fadf90e *src/Csdp/lib/solvesys.c e331a302c5a8781ad72ba3e7c8163293 *src/Csdp/lib/sortentries.c 91cc4e95cd02a7f8ef8ea3a374ab2de6 *src/Csdp/lib/sym_mat.c a3614003da75705f380e7e6e15351bc9 *src/Csdp/lib/trace_prod.c ddf8932ff3d5f2a263a65fd83df5a589 *src/Csdp/lib/tweakgap.c 6e4a7ff71b772bb073751f33ad171312 *src/Csdp/lib/user_exit.c 64aca956a9e0b52baf0082f34109c674 *src/Csdp/lib/writeprob.c ba159414d3d2d45a4eb46b8ec3402411 *src/Csdp/lib/writesol.c d110b6a240e9a1898331de5e20b02905 *src/Csdp/lib/zero_mat.c d67d5637947316e243ed7cbfbb608499 *src/Csdp/matlab/README d9385a3b7fc67f65d3962bbcb32bca8f *src/Csdp/matlab/control1.correct a63461780e3f9b8d23a75b5af1c9b041 *src/Csdp/matlab/control1.mat 0b4046d80e4b28167468bb63068caa95 *src/Csdp/matlab/convertf.m 8b2567074ddd136e22e0933ade5210d8 *src/Csdp/matlab/csdp.m 47653eea25fcde6b27811c335d3a899b *src/Csdp/matlab/readsol.m 3fc52dd04326a97ae0a6c3355634a6ff *src/Csdp/matlab/writesdpa.m 383df54082f1fbfa11120522ecf3a6f4 *src/Csdp/solver/Makefile 89ef535344be3018f9e05cc393d8e6e7 *src/Csdp/solver/csdp.c 2c6c66fda5f5fc1d3d3c4a4468919d20 *src/Csdp/test/Makefile 1ec29154eaf25c88d9f34f095222b4be *src/Csdp/test/g50 88c7c378751bd8a249bb07dde6636ebf *src/Csdp/test/g50.correct 917e9f5478b300a0fea15f81cc16d01a *src/Csdp/test/theta1.correct d7e9f657368373a9e7eb110496bdc380 *src/Csdp/test/theta1.dat-s 9cf5ec7f6c06358e3065edfce336e966 *src/Csdp/theta/Makefile 75d322f68c84bf6d223134f0d29f7e68 *src/Csdp/theta/README ddcb577bdb4c99c17674654ecdf5a3e7 *src/Csdp/theta/complement.c b0a667fa6ddb13c9c5af57a923b55367 *src/Csdp/theta/graphtoprob.c 05fe43f93ae72eb5f4f6bced0353653b *src/Csdp/theta/rand_graph.c c83a85a5562349750e8600439304c5ef *src/Csdp/theta/theta.c 38650b940d70a88b5d6b7fe5ef01564a *src/Makevars.in 470ae585d47a8084362b0fcc75189a7f *src/Makevars.win a88fc78c4b970696f61fd93849146cbc *src/Rcsdp.c d4dc3e3a877ae7d30177065f9efb9d7e *src/convert.c fa81c02e7f921b46245e34f3db5f0703 *src/testing.c Rcsdp/inst/0000755000175100001440000000000014342635402012323 5ustar hornikusersRcsdp/inst/INSTALL0000644000175100001440000000110414342635402013350 0ustar hornikusersR interface to CSDP semidefinite programming library Upon installation, the bundled CSDP code is built and linked, otherwise the user can supply the location of the csdp installation directory. The three ways to install this package are 1) By default the bundled CSDP code is used: R CMD INSTALL 2) Otherwise, the user can provide the location of the csdp installation directory R CMD INSTALL --configure-args="--with-csdp=" Compiler flags for csdp can be given using --with-csdp-cflags as part of --configure-args Rcsdp/cleanup0000755000175100001440000000021714414754226012731 0ustar hornikusers#!/bin/sh (cd src/Csdp/lib; if test -f Makefile; then make clean fi) rm -f config.* autom4te.cache src/Csdp.ts src/Makevars Rcsdp/configure0000755000175100001440000040661714414754226013301 0ustar hornikusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Rcsdp 0.1.1. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Rcsdp' PACKAGE_TARNAME='rcsdp' PACKAGE_VERSION='0.1.1' PACKAGE_STRING='Rcsdp 0.1.1' PACKAGE_BUGREPORT='' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='LTLIBOBJS LIBOBJS CSDP_TS PKG_LIBS PKG_CPPFLAGS PKG_CFLAGS CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_csdp_cflags with_csdp_dir ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Rcsdp 0.1.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/rcsdp] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Rcsdp 0.1.1:";; esac cat <<\_ACEOF Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-csdp-cflags compiler flags for csdp --with-csdp-dir specify location of csdp installation Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Rcsdp configure 0.1.1 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Rcsdp $as_me 0.1.1, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu FOUND_ALL="" if test -n "$PKG_CFLAGS" -a -n "$PKG_CPPFLAGS" -a -n "$PKG_LIBS" ; then FOUND_ALL="yes" else if test -n "$PKG_CFLAGS" -o -n "$PKG_CPPFLAGS" -o -n "$PKG_LIBS" ; then as_fn_error $? "All three of PKG_CFLAGS PKG_CPPFLAGS and PKG_LIBS must be given together" "$LINENO" 5 fi fi # Check whether --with-csdp-cflags was given. if test ${with_csdp_cflags+y} then : withval=$with_csdp_cflags; CSDP_CFLAGS=$withval else $as_nop CSDP_CFLAGS="" fi # Check whether --with-csdp-dir was given. if test ${with_csdp_dir+y} then : withval=$with_csdp_dir; CSDP_DIR=$withval else $as_nop CSDP_DIR="" fi if test -z "$FOUND_ALL" -a -n "$CSDP_DIR" ; then if test ! -d "$CSDP_DIR" ; then as_fn_error $? "CSDP installation directory $CSDP_DIR does not exist" "$LINENO" 5 fi PKG_CPPFLAGS="-I$CSDP_DIR/include" PKG_LIBS="-L$CSDP_DIR/lib" FOUND_ALL="yes" fi if test -z "$FOUND_ALL" ; then echo "Using bundled CSDP" PKG_CPPFLAGS="-ICsdp/include" PKG_LIBS="-LCsdp/lib" CSDP_TS="Csdp.ts" else CSDP_TS="" fi : ${R_HOME=`R RHOME`} if test -z "${R_HOME}"; then echo "Could not determine R_HOME." exit 1 fi CC=`"${R_HOME}/bin/R" CMD config CC` CFLAGS=`"${R_HOME}/bin/R" CMD config CFLAGS` CPPFLAGS=`"${R_HOME}/bin/R" CMD config CPPFLAGS` LAPACK_LIBS=`"${R_HOME}/bin/R" CMD config LAPACK_LIBS` BLAS_LIBS=`"${R_HOME}/bin/R" CMD config BLAS_LIBS` FLIBS=`"${R_HOME}/bin/R" CMD config FLIBS` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu PKG_LIBS="${PKG_LIBS} -lsdp ${LAPACK_LIBS} ${BLAS_LIBS} ${FLIBS} -lm" PKG_CFLAGS="-DNOSHORTS ${CSDP_CFLAGS}" if test -n "$FOUND_ALL" ; then LIBS="${PKG_LIBS}" CFLAGS="${CFLAGS} ${PKG_CFLAGS}" CPPFLAGS="${CPPFLAGS} ${PKG_CPPFLAGS}" ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "declarations.h" "ac_cv_header_declarations_h" "$ac_includes_default" if test "x$ac_cv_header_declarations_h" = xyes then : fi if test "${ac_cv_header_declarations_h}" == no; then as_fn_error $? "CSDP header declarations.h not found in provided location" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing easy_sdp" >&5 printf %s "checking for library containing easy_sdp... " >&6; } if test ${ac_cv_search_easy_sdp+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char easy_sdp (); int main (void) { return easy_sdp (); ; return 0; } _ACEOF for ac_lib in '' sdp do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_easy_sdp=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_easy_sdp+y} then : break fi done if test ${ac_cv_search_easy_sdp+y} then : else $as_nop ac_cv_search_easy_sdp=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_easy_sdp" >&5 printf "%s\n" "$ac_cv_search_easy_sdp" >&6; } ac_res=$ac_cv_search_easy_sdp if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else $as_nop as_fn_error $? "Could not link CSDP library using $PKG_LIBS" "$LINENO" 5 fi fi ac_config_files="$ac_config_files src/Makevars" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Rcsdp $as_me 0.1.1, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to the package provider." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ Rcsdp config.status 0.1.1 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "src/Makevars") CONFIG_FILES="$CONFIG_FILES src/Makevars" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi exit 0