SQUAREM/0000755000176200001440000000000013777512712011403 5ustar liggesusersSQUAREM/NAMESPACE0000644000176200001440000000010613166223622012606 0ustar liggesusersexport( "squarem", "fpiter" ) importFrom("utils", "modifyList")SQUAREM/demo/0000755000176200001440000000000013166214602012314 5ustar liggesusersSQUAREM/demo/squarem.R0000644000176200001440000000416513166223622014124 0ustar liggesusers require("SQUAREM") # master funcion and the 4 different SQUAREM algorithms require("setRNG") # only needed to reproduce the same results # data for Poisson mixture estimation data(Hasselblad1969, package="SQUAREM") y <- poissmix.dat$freq tol <- 1.e-08 # generate a random initial guess for 3 parameters setRNG(list(kind="Wichmann-Hill", normal.kind="Box-Muller", seed=123)) p0 <- c(runif(1),runif(2,0,4)) # fixptfn = function that computes a single update of fixed-point iteration # objfn = underlying objective function that needs to be minimized (here it is the negative log-likelihood) # # EM algorithm pf1 <- fpiter(p=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list(tol=tol)) # First-order SQUAREM algorithm with SqS3 method pf2 <- squarem(par=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list(tol=tol)) # First-order SQUAREM algorithm with SqS2 method pf3 <- squarem(par=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list(method=2, tol=tol)) # First-order SQUAREM algorithm with SqS3 method; non-monotone # Note: the objective function is not evaluated when objfn.inc = Inf pf4 <- squarem(par=p0,y=y, fixptfn=poissmix.em, control=list(tol=tol, objfn.inc=Inf)) # First-order SQUAREM algorithm with SqS3 method; objective function is not specified pf5 <- squarem(par=p0,y=y, fixptfn=poissmix.em, control=list(tol=tol, kr=0.1)) # Second-order (K=2) SQUAREM algorithm with SqRRE pf6 <- squarem(par=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list (K=2, tol=tol)) # Second-order SQUAREM algorithm with SqRRE; objective function is not specified pf7 <- squarem(par=p0, y=y, fixptfn=poissmix.em, control=list(K=2, tol=tol)) # Number of fixed-point evaluations c(pf1$fpeval, pf2$fpeval, pf3$fpeval, pf4$fpeval, pf5$fpeval, pf6$fpeval, pf7$fpeval) # Number of objective function evaluations c(pf1$objfeval, pf2$objfeval, pf3$objfeval, pf4$objfeval, pf5$objfeval, pf6$objfeval, pf7$objfeval) # Comparison of converged parameter estimates par.mat <- rbind(pf1$par, pf2$par, pf3$par, pf4$par, pf5$par, pf6$par, pf7$par) par.mat SQUAREM/demo/factoranalysis.R0000644000176200001440000002204213744116074015467 0ustar liggesusersrequire("SQUAREM") #####---------------------------------------------------------------########### ##For factor analysis maximum likelihood estimation, we will illustrate######## ##the dramatic acceleration of EM by Squarem and also compare with############# ##ECME (Liu and Rubin 1998) using a real data example from JoresKog (1967). ### #####---------------------------------------------------------------########### #####---------------------------------------------------------------########### ###########################data################################################ #####---------------------------------------------------------------########### cyy <- diag(9) cyy[upper.tri(cyy)] <- c(.554, .227, .296, .189, .219, .769, .461, .479, .237, .212, .506, .530, .243, .226, .520, .408, .425, .304, .291, .514, .473, .280, .311, .718, .681, .313, .348, .374, .241, .311, .730, .661, .245, .290, .306, .672) cyy[lower.tri(cyy)] <- t(cyy)[lower.tri(t(cyy))] #####---------------------------------------------------------------########### ######################starting value########################################### #####---------------------------------------------------------------########### beta.trans <- matrix(c(0.5954912, 0.6449102, 0.7630006, 0.7163828, 0.6175647, 0.6464100, 0.6452737, 0.7868222, 0.7482302, -0.4893347, -0.4408213, 0.5053083, 0.5258722, -0.4714808, -0.4628659, -0.3260013, 0.3690580, 0.4326963, -0.3848925, -0.3555598, -0.0535340, 0.0219100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1931459, 0.4606456, -0.3622682, 0.0630371, 0.0431256), 9, 4) beta.start <- t(beta.trans) tau2.start <- rep(10^(-8), 9) param.start <- c(as.numeric(beta.start), tau2.start) #####---------------------------------------------------------------########### ####The fixed point mapping giving a single E and M step of the EM algorithm### #####---------------------------------------------------------------########### factor.em <- function(param, cyy){ param.new <- rep(NA, 45) ###extract beta matrix and tau2 from param beta.vec <- param[1:36] beta.mat <- matrix(beta.vec, 4, 9) tau2 <- param[37:45] tau2.mat <- diag(tau2) ###compute delta/Delta inv.quantity <- solve(tau2.mat + t(beta.mat) %*% beta.mat) small.delta <- inv.quantity %*% t(beta.mat) big.delta <- diag(4) - beta.mat %*% inv.quantity %*% t(beta.mat) cyy.inverse <- t(small.delta) %*% cyy %*% small.delta + big.delta cyy.mat <- t(small.delta) %*% cyy ###update betas and taus beta.new <- matrix(0, 4, 9) beta.p1 <- solve(cyy.inverse[1:3, 1:3]) %*% cyy.mat[1:3, 1:4] beta.p2 <- solve(cyy.inverse[c(1,2,4), c(1,2,4)]) %*% cyy.mat[c(1,2,4), 5:9] beta.new[1:3, 1:4] <- beta.p1 beta.new[c(1,2,4), 5:9] <- beta.p2 tau.p1 <- diag(cyy)[1:4] - diag(t(cyy.mat[1:3, 1:4]) %*% solve(cyy.inverse[1:3, 1:3]) %*% cyy.mat[1:3, 1:4]) tau.p2 <- diag(cyy)[5:9] - diag(t(cyy.mat[c(1,2,4), 5:9]) %*% solve(cyy.inverse[c(1,2,4), c(1,2,4)]) %*% cyy.mat[c(1,2,4), 5:9]) tau.new <- c(tau.p1, tau.p2) param.new <- c(as.numeric(beta.new), tau.new) param <- param.new return(param.new) } #####---------------------------------------------------------------########### ################The fixed point mapping giving ECME algorithm################## #####---------------------------------------------------------------########### factor.ecme <- function(param, cyy){ n <- 145 param.new <- rep(NA, 45) ###extract beta matrix and tau2 from param beta.vec <- param[1:36] beta.mat <- matrix(beta.vec, 4, 9) tau2 <- param[37:45] tau2.mat <- diag(tau2) ###compute delta/Delta inv.quantity <- solve(tau2.mat + t(beta.mat) %*% beta.mat) small.delta <- inv.quantity %*% t(beta.mat) big.delta <- diag(4) - beta.mat %*% inv.quantity %*% t(beta.mat) cyy.inverse <- t(small.delta) %*% cyy %*% small.delta + big.delta cyy.mat <- t(small.delta) %*% cyy ###update betas beta.new <- matrix(0, 4, 9) beta.p1 <- solve(cyy.inverse[1:3, 1:3]) %*% cyy.mat[1:3, 1:4] beta.p2 <- solve(cyy.inverse[c(1,2,4), c(1,2,4)]) %*% cyy.mat[c(1,2,4), 5:9] beta.new[1:3, 1:4] <- beta.p1 beta.new[c(1,2,4), 5:9] <- beta.p2 ###update taus given betas A <- solve(tau2.mat + t(beta.new) %*% beta.new) sum.B <- A %*% (n * cyy) %*% A gradient <- - tau2/2 * (diag(n*A) - diag(sum.B)) hessian <- (0.5 * (tau2 %*% t(tau2))) * (A * (n * A - 2 * sum.B)) diag(hessian) <- diag(hessian) + gradient U <- log(tau2) U <- U - solve(hessian, gradient) # Newton step tau.new <- exp(U) param.new <- c(as.numeric(beta.new), tau.new) param <- param.new return(param.new) } #####---------------------------------------------------------------########### ####Objective function whose local minimum is a fixed point. ################## ####Here it is the negative log-likelihood of factor analysis.################# #####---------------------------------------------------------------########### factor.loglik <- function(param, cyy){ ###extract beta matrix and tau2 from param beta.vec <- param[1:36] beta.mat <- matrix(beta.vec, 4, 9) tau2 <- param[37:45] tau2.mat <- diag(tau2) Sig <- tau2.mat + t(beta.mat) %*% beta.mat ##suppose n=145 since this does not impact the parameter estimation loglik <- -145/2 * log(det(Sig)) - 145/2 * sum(diag(solve(Sig, cyy))) return(-loglik) ###the negative log-likelihood is returned } #####---------------------------------------------------------------########### factor.loglik.max <- function(param, cyy){ ###extract beta matrix and tau2 from param beta.vec <- param[1:36] beta.mat <- matrix(beta.vec, 4, 9) tau2 <- param[37:45] tau2.mat <- diag(tau2) Sig <- tau2.mat + t(beta.mat) %*% beta.mat ##suppose n=145 since this does not impact the parameter estimation loglik <- -145/2 * log(det(Sig)) - 145/2 * sum(diag(solve(Sig, cyy))) return(loglik) ###the original log-likelihood is returned } #####---------------------------------------------------------------########### #####################################EM Algorithm############################## #####---------------------------------------------------------------########### system.time(f1 <- fpiter(par = param.start, cyy = cyy, fixptfn = factor.em, objfn = factor.loglik, control = list(tol=10^(-8), maxiter = 20000))) f1$fpevals #####---------------------------------------------------------------########### ##################################ECME Algorithm############################### #####---------------------------------------------------------------########### system.time(f2 <- fpiter(par = param.start, cyy = cyy, fixptfn = factor.ecme, objfn = factor.loglik, control = list(tol=10^(-8), maxiter = 20000))) f2$fpevals #####---------------------------------------------------------------########### ###################Squarem to accelerate EM Algorithm########################## #####---------------------------------------------------------------########### system.time(f3 <- squarem(par = param.start, cyy = cyy, fixptfn = factor.em, objfn = factor.loglik, control = list(tol = 10^(-8)))) f3$fpevals #####---------------------------------------------------------------########### ###################Squarem to accelerate ECME Algorithm######################## #####---------------------------------------------------------------########### system.time(f4 <- squarem(par = param.start, cyy = cyy, fixptfn = factor.ecme, objfn = factor.loglik, control = list(tol = 10^(-8), trace=TRUE))) f4$fpevals #####---------------------------------------------------------------########### # Showing how to *maximize* log-likelihood system.time(f5 <- squarem(par = param.start, cyy = cyy, fixptfn = factor.ecme, objfn = factor.loglik.max, control = list(tol = 10^(-8), trace=TRUE, minimize=FALSE))) f5$fpevals SQUAREM/demo/intcensoring.R0000644000176200001440000001116413166223622015146 0ustar liggesusersrequire("SQUAREM") require("interval") #####---------------------------------------------------------------########### ##For interval censoring non-parametric maximum likelihood estimation, ######## ##we illustrate how Squarem can be used to accelerate EM. ##################### #####---------------------------------------------------------------########### ###########################data################################################ #####---------------------------------------------------------------########### dat <- c(45, 6, 0, 46, 46, 7, 17, 7, 37, 0, 4, 15, 11, 22, 46, 46, 25, 46, 26, 46, 27, 36, 46, 36, 37, 40, 17, 46, 11, 38, 5, 37, 0, 18, 24, 36, 5, 19, 17, 24, 32, 33, 19, 37, 34, 36, Inf, 10, 7, Inf, Inf, 16, Inf, 14, 44, 8, 11, Inf, 15, Inf, Inf, Inf, 37, Inf, 40, Inf, 34, 44, Inf, 48, Inf, Inf, 25, Inf, 18, Inf, 12, Inf, 5, Inf, Inf, Inf, 11, 35, 25, Inf, Inf, Inf, 26, Inf, Inf, Inf) dat <- data.frame(matrix(dat, 46, 2)) names(dat) <- c("L", "R") #####---------------------------------------------------------------########### ########use Aintmap for alpha matrix, starting value########################### #####---------------------------------------------------------------########### Aintmap <-function(L,R,Lin=NULL,Rin=NULL){ n<-length(L) Lin<-rep(FALSE,n) Rin<-rep(TRUE,n) Lin[L==R]<-TRUE Rin[R==Inf]<-FALSE if(n != length(R)) stop("length of L and R must be the same") LRvalues<-sort(unique(c(0,L,R,Inf))) eps<- min(diff(LRvalues))/2 Le<-L Re<-R Le[!Lin]<-L[!Lin]+eps Re[!Rin]<-R[!Rin]-eps oLR<-order(c(Le,Re+eps/2)) Leq1.Req2<-c(rep(1,n),rep(2,n)) flag<- c(0,diff( Leq1.Req2[oLR] )) R.right.of.L<- (1:(2*n))[flag==1] intmapR<- c(L,R)[oLR][R.right.of.L] intmapL<- c(L,R)[oLR][R.right.of.L - 1] intmapRin<- c(Lin,Rin)[oLR][R.right.of.L] intmapLin<- c(Lin,Rin)[oLR][R.right.of.L - 1] intmap<-matrix(c(intmapL,intmapR),byrow=TRUE,nrow=2) attr(intmap,"LRin")<-matrix(c(intmapLin,intmapRin),byrow=TRUE,nrow=2) k<-dim(intmap)[[2]] Lbracket<-rep("(",k) Lbracket[intmapLin]<-"[" Rbracket<-rep(")",k) Rbracket[intmapRin]<-"]" intname<-paste(Lbracket,intmapL,",",intmapR,Rbracket,sep="") A<-matrix(0,n,k,dimnames=list(1:n,intname)) intmapLe<-intmapL intmapLe[!intmapLin]<-intmapL[!intmapLin]+eps intmapRe<-intmapR intmapRe[!intmapRin]<-intmapR[!intmapRin]-eps for (i in 1:n){ tempint<- Le[i]<=intmapRe & Re[i]>=intmapLe A[i,tempint]<-1 } if (k==1 & intmap[1,1]==0 & intmap[2,1]==Inf) A[A==0]<-1 return(A=A) } A <- Aintmap(dat[,1], dat[,2]) m <- ncol(A) ##starting values pvec <- rep(1/m, length = m) #####---------------------------------------------------------------########### ####The fixed point mapping giving a single E and M step of the EM algorithm### #####---------------------------------------------------------------########### intEM <- function(pvec, A){ tA <- t(A) Ap <- pvec*tA pnew <- colMeans(t(Ap)/colSums(Ap)) pnew * (pnew > 0) } #####---------------------------------------------------------------########### ####Objective function whose local minimum is a fixed point. ################## ####Here it is the negative log-likelihood of interval censoring.############## #####---------------------------------------------------------------########### loglik <- function(pvec, A){ - sum(log(c(A %*% pvec))) } ##A is the alpha matrix and pvec is the vector of probabilities p. #####---------------------------------------------------------------########### #####################################EM Algorithm############################## #####---------------------------------------------------------------########### system.time(ans1 <- fpiter(par = pvec, fixptfn = intEM, objfn = loglik, A = A, control = list(tol = 1e-8))) ans1 #####---------------------------------------------------------------########### ###################Squarem to accelerate EM Algorithm########################## #####---------------------------------------------------------------########### system.time(ans2 <- squarem(par = pvec, fixptfn = intEM, objfn = loglik, A = A, control = list(tol = 1e-8))) ans2 SQUAREM/demo/poissonmix.R0000644000176200001440000000765213744116204014662 0ustar liggesusersrequire("SQUAREM") require("setRNG") #####---------------------------------------------------------------########### ##we show an example demonstrating the ability of SQUAREM to dramatically###### ##speed-up the convergence of the EM algorithm for a binary Poisson mixture#### ##estimation. We use the example from Hasselblad (J of Amer Stat Assoc 1969)# #####---------------------------------------------------------------########### #####---------------------------------------------------------------########### ###########################data################################################ #####---------------------------------------------------------------########### poissmix.dat <- data.frame(death = 0:9, freq = c(162, 267, 271, 185, 111, 61, 27, 8, 3, 1)) #####---------------------------------------------------------------########### #########Generate a random initial guess for 3 parameters###################### #####---------------------------------------------------------------########### y <- poissmix.dat$freq tol <- 1.e-08 setRNG(list(kind = "Wichmann-Hill", normal.kind = "Box-Muller", seed = 123)) p0 <- c(runif(1),runif(2, 0, 6)) #####---------------------------------------------------------------########### ####The fixed point mapping giving a single E and M step of the EM algorithm### #####---------------------------------------------------------------########### poissmix.em <- function(p, y) { pnew <- rep(NA, 3) i <- 0:(length(y) - 1) zi <- p[1] * exp(-p[2]) * p[2]^i / (p[1]*exp(-p[2])*p[2]^i + (1 - p[1]) * exp(-p[3]) * p[3]^i) pnew[1] <- sum(y * zi)/sum(y) pnew[2] <- sum(y * i * zi)/sum(y * zi) pnew[3] <- sum(y * i * (1-zi))/sum(y * (1-zi)) p <- pnew return(pnew) } #####---------------------------------------------------------------########### ####Objective function whose local minimum is a fixed point. ################## ####Here it is the negative log-likelihood of binary poisson mixture.########## #####---------------------------------------------------------------########### poissmix.loglik <- function(p, y) { i <- 0:(length(y) - 1) loglik <- y * log(p[1] * exp(-p[2]) * p[2]^i/exp(lgamma(i + 1)) + (1 - p[1]) * exp(-p[3]) * p[3]^i/exp(lgamma(i + 1))) return (-sum(loglik)) } #####---------------------------------------------------------------########### #####################################EM Algorithm############################## #####---------------------------------------------------------------########### pf1 <- fpiter(p = p0, y = y, fixptfn = poissmix.em, objfn = poissmix.loglik, control = list(tol = tol)) pf1 #####---------------------------------------------------------------########### ###################Squarem to accelerate EM Algorithm########################## #####---------------------------------------------------------------########### pf2 <- squarem(p = p0, y = y, fixptfn = poissmix.em, objfn = poissmix.loglik, control = list(tol = tol)) pf2 #######Comment: Note the dramatically faster convergence, #######i.e. SQUAREM uses only 72 fixed-point evaluations to achieve convergence. #######This is a speed up of a factor of 40. poissmix.loglik.max <- function(p, y) { i <- 0:(length(y) - 1) loglik <- y * log(p[1] * exp(-p[2]) * p[2]^i/exp(lgamma(i + 1)) + (1 - p[1]) * exp(-p[3]) * p[3]^i/exp(lgamma(i + 1))) return (sum(loglik)) } #####---------------------------------------------------------------########### # Showing how to *maximize* log-likelihood # Use actual log-likleihood and set minimize = FALSE pf3 <- squarem(p = p0, y = y, fixptfn = poissmix.em, objfn = poissmix.loglik.max, control = list(tol = tol, minimize=FALSE)) pf3 SQUAREM/demo/mmlogistic.R0000644000176200001440000001276513166223622014623 0ustar liggesusersrequire("SQUAREM") #####---------------------------------------------------------------########### ##For MM algorithm, we will illustrate the acceleration of EM by Squarem ###### ##using logistics regression maximum likelihood estimation example. ########### #####---------------------------------------------------------------########### #####---------------------------------------------------------------########### ###########################data################################################ #####---------------------------------------------------------------########### ld <- c(1, 0.80, 0.83, 0.66, 1.9, 1.100, 0.996, 1, 1, 0.90, 0.36, 0.32, 1.4, 0.740, 0.992, 1, 1, 0.80, 0.88, 0.70, 0.8, 0.176, 0.982, 0, 1, 1.00, 0.87, 0.87, 0.7, 1.053, 0.986, 0, 1, 0.90, 0.75, 0.68, 1.3, 0.519, 0.980, 1, 1, 1.00, 0.65, 0.65, 0.6, 0.519, 0.982, 0, 1, 0.95, 0.97, 0.92, 1.0, 1.230, 0.992, 1, 1, 0.95, 0.87, 0.83, 1.9, 1.354, 1.020, 0, 1, 1.00, 0.45, 0.45, 0.8, 0.322, 0.999, 0, 1, 0.95, 0.36, 0.34, 0.5, 0.000, 1.038, 0, 1, 0.85, 0.39, 0.33, 0.7, 0.279, 0.988, 0, 1, 0.70, 0.76, 0.53, 1.2, 0.146, 0.982, 0, 1, 0.80, 0.46, 0.37, 0.4, 0.380, 1.006, 0, 1, 0.20, 0.39, 0.08, 0.8, 0.114, 0.990, 0, 1, 1.00, 0.90, 0.90, 1.1, 1.037, 0.990, 0, 1, 1.00, 0.84, 0.84, 1.9, 2.064, 1.020, 1, 1, 0.65, 0.42, 0.27, 0.5, 0.114, 1.014, 0, 1, 1.00, 0.75, 0.75, 1.0, 1.322, 1.004, 0, 1, 0.50, 0.44, 0.22, 0.6, 0.114, 0.990, 0, 1, 1.00, 0.63, 0.63, 1.1, 1.072, 0.986, 1, 1, 1.00, 0.33, 0.33, 0.4, 0.176, 1.010, 0, 1, 0.90, 0.93, 0.84, 0.6, 1.591, 1.020, 0, 1, 1.00, 0.58, 0.58, 1.0, 0.531, 1.002, 1, 1, 0.95, 0.32, 0.30, 1.6, 0.886, 0.988, 0, 1, 1.00, 0.60, 0.60, 1.7, 0.964, 0.990, 1, 1, 1.00, 0.69, 0.69, 0.9, 0.398, 0.986, 1, 1, 1.00, 0.73, 0.73, 0.7, 0.398, 0.986, 0) ld <- matrix(ld, byrow = T, ncol = 8) ld <- data.frame(ld) #####---------------------------------------------------------------########### ######################starting value########################################### #####---------------------------------------------------------------########### Z <- as.matrix(ld[, 1:7]) y <- ld[, 8] p0 <- rep(10, 7) #####---------------------------------------------------------------########### ####The fixed point mapping giving MM algorithm--uniform bound################# #####---------------------------------------------------------------########### qmub.update <- function(par, Z, y){ Zmat <- solve(crossprod(Z)) %*% t(Z) zb <- c(Z %*% par) pib <- 1 / (1 + exp(-zb)) ub <- pib - y par <- par - 4 * c(Zmat %*% ub) par } #####---------------------------------------------------------------########### ####The fixed point mapping giving MM algorithm--non uniform bound############# #####---------------------------------------------------------------########### qmvb.update <- function(par, Z, y){ zb <- c(Z %*% par) pib <- 1 / (1 + exp(-zb)) wmat <- diag((2 * pib - 1)/(2 * zb)) ub <- pib - y Zmat <- solve(t(Z) %*% wmat %*% Z) %*% t(Z) par <- par - c(Zmat %*% ub) par } #####---------------------------------------------------------------########### ####Objective function whose local minimum is a fixed point. ################## ####Here it is the negative log-likelihood of logistic regression.############# #####---------------------------------------------------------------########### binom.loglike <- function(par, Z, y){ zb <- c(Z %*% par) pib <- 1 / (1 + exp(-zb)) return(as.numeric(-t(y) %*% (Z %*% par) - sum(log(1 - pib)))) } #####---------------------------------------------------------------########### #############################uniform-bound MM Algorithm######################## #####---------------------------------------------------------------########### system.time(ans1 <- fpiter(par = p0, fixptfn = qmub.update, objfn = binom.loglike, control = list(maxiter = 20000), Z = Z, y = y)) ans1 #####---------------------------------------------------------------########### ############Squarem to accelerate uniform-bound MM Algorithm################### #####---------------------------------------------------------------########### system.time(ans2 <- squarem(par = p0, fixptfn = qmub.update, objfn = binom.loglike, Z = Z, y = y)) ans2 #####---------------------------------------------------------------########### #########################non-uniform-bound MM Algorithm######################## #####---------------------------------------------------------------########### system.time(ans3 <- fpiter(par = p0, fixptfn = qmvb.update, objfn = binom.loglike, control = list(maxiter = 20000), Z = Z, y = y)) ans3 #####---------------------------------------------------------------########### ############Squarem to accelerate non uniform-bound MM Algorithm############### #####---------------------------------------------------------------########### system.time(ans4 <- squarem(par = p0, fixptfn = qmvb.update, objfn = binom.loglike, Z = Z, y = y)) ans4 SQUAREM/demo/00Index0000644000176200001440000000062613166223622013454 0ustar liggesuserspoissonmix Examples of EM acceleration for Poisson mixture estimation using Hasselblad 1969 data. factoranalysis Examples of EM acceleration for Factor Analysis Maximum Likelihood Estimation. intcensoring Examples of Interval Censoring NPML Estimation. mmlogistic Examples of MM acceleration for Logistics Regression Maximum Likelihood Estimation. squarem Examples of EM acceleration and Power method SQUAREM/man/0000755000176200001440000000000013166214604012145 5ustar liggesusersSQUAREM/man/internal.Rd0000644000176200001440000000124213166223624014251 0ustar liggesusers\name{internal} \alias{squarem1} \alias{squarem2} \alias{cyclem1} \alias{cyclem2} \title{Internal functions for SQUAREM} \description{SQUAREM functions not to be called by users.} \usage{ squarem1(par, fixptfn, objfn, ... , control=list()) squarem2(par, fixptfn, ... , control=list() ) cyclem1(par, fixptfn, objfn, control=list(), ...) cyclem2(par, fixptfn, control=list(), ...) } \arguments{ \item{par}{See \code{\link{squarem}}.} \item{fixptfn}{See \code{\link{squarem}}.} \item{objfn}{See \code{\link{squarem}}.} \item{control}{See \code{\link{squarem}}.} \item{...}{See \code{\link{squarem}}.} } \keyword{internal} SQUAREM/man/fpiter.Rd0000644000176200001440000001512213777433674013750 0ustar liggesusers\name{fpiter} \alias{fpiter} \title{Fixed-Point Iteration Scheme} \description{A function to implement the fixed-point iteration algorithm. This includes monotone, contraction mappings including EM and MM algorithms} \usage{ fpiter(par, fixptfn, objfn=NULL, control=list( ), ...) } \arguments{ \item{par}{A vector of parameters denoting the initial guess for the fixed-point iteration.} \item{fixptfn}{A vector function, \eqn{F}{F} that denotes the fixed-point mapping. This function is the most essential input in the package. It should accept a parameter vector as input and should return a parameter vector of same length. This function defines the fixed-point iteration: \eqn{x_{k+1} = F(x_k)}{x[k+1] = F(x[k]}. In the case of EM algorithm, \eqn{F}{F} defines a single E and M step.} \item{objfn}{This is a scalar function, $L$, that denotes a ''merit'' function which attains its local minimum at the fixed-point of $F$. This function should accept a parameter vector as input and should return a scalar value. In the EM algorithm, the merit function \eqn{L}{L} is the log-likelihood. In some problems, a natural merit function may not exist, in which case the algorithm works with only \code{fixptfn}. The merit function function \code{objfn} does not have to be specified, even when a natural merit function is available, especially when its computation is expensive.} \item{control}{ A list of control parameters to pass on to the algorithm. Full names of control list elements must be specified, otherwise, user-specifications are ignored. See *Details* below.} \item{...}{Arguments passed to \code{fixptfn} and \code{objfn}.} } \value{A list with the following components: \item{par}{Parameter,\eqn{x*}{x*} that are the fixed-point of \eqn{F}{F} such that \eqn{x* = F(x*)}{x* = F(x*)}, if convergence is successful.} \item{value.objfn}{The value of the objective function \eqn{L}{L} at termination.} \item{fpevals}{Number of times the fixed-point function \code{fixptfn} was evaluated.} \item{objfevals}{Number of times the objective function \code{objfn} was evaluated.} \item{convergence}{An integer code indicating type of convergence. \code{0} indicates successful convergence, whereas \code{1} denotes failure to converge.} } \details{ \code{control} is list of control parameters for the algorithm. \describe{ \code{control = list(tol = 1.e-07, maxiter = 1500, trace = FALSE, intermed=FALSE)} \code{tol}{ - a small, positive scalar that determines when iterations should be terminated. Iteration is terminated when \eqn{||x_k - F(x_k)|| \leq tol}{abs(x[k] - F(x[k]) <= tol}. Default is \code{1.e-07}.} \code{maxiter}{ - an integer denoting the maximum limit on the number of evaluations of \code{fixptfn}, \eqn{F}{F}. Default is \code{1500}.} \code{trace}{ - a logical variable denoting whether some of the intermediate results of iterations should be displayed to the user. Default is \code{FALSE}.} \code{intermed}}{ - a logical variable denoting whether the intermediate results of iterations should be returned. If set to \code{TRUE}, the function will return a matrix where each row corresponds to parameters at each iteration, along with the corresponding fixed-point residual value. Default is \code{FALSE}.} } \seealso{ \code{\link{squarem}} } \examples{ ############################################################################## # Example 1: EM algorithm for Poisson mixture estimation poissmix.em <- function(p,y) { # The fixed point mapping giving a single E and M step of the EM algorithm # pnew <- rep(NA,3) i <- 0:(length(y)-1) zi <- p[1]*exp(-p[2])*p[2]^i / (p[1]*exp(-p[2])*p[2]^i + (1 - p[1])*exp(-p[3])*p[3]^i) pnew[1] <- sum(y*zi)/sum(y) pnew[2] <- sum(y*i*zi)/sum(y*zi) pnew[3] <- sum(y*i*(1-zi))/sum(y*(1-zi)) p <- pnew return(pnew) } poissmix.loglik <- function(p,y) { # Objective function whose local minimum is a fixed point \ # negative log-likelihood of binary poisson mixture i <- 0:(length(y)-1) loglik <- y*log(p[1]*exp(-p[2])*p[2]^i/exp(lgamma(i+1)) + (1 - p[1])*exp(-p[3])*p[3]^i/exp(lgamma(i+1))) return ( -sum(loglik) ) } # Real data from Hasselblad (JASA 1969) poissmix.dat <- data.frame(death=0:9, freq=c(162,267,271,185,111,61,27,8,3,1)) y <- poissmix.dat$freq tol <- 1.e-08 # Use a preset seed so the example is reproducible. require("setRNG") old.seed <- setRNG(list(kind="Mersenne-Twister", normal.kind="Inversion", seed=54321)) p0 <- c(runif(1),runif(2,0,4)) # random starting value # Basic EM algorithm pf1 <- fpiter(p=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list(tol=tol)) ############################################################################## # Example 2: Accelerating the convergence of power method iteration for # finding the dominant eigenvector of a matrix power.method <- function(x, A) { # Defines one iteration of the power method # x = starting guess for dominant eigenvector # A = a square matrix ax <- as.numeric(A \%*\% x) f <- ax / sqrt(as.numeric(crossprod(ax))) f } # Finding the dominant eigenvector of the Bodewig matrix # This is a famous matrix for which power method has trouble converging # See, for example, Sidi, Ford, and Smith (SIAM Review, 1988) # # Note: there are two eigenvalues that are equally dominant, # but have opposite signs. # Sometimes the power method finds the eigenvector corresponding to the # large positive eigenvalue, but other times it finds the eigenvector # corresponding to the large negative eigenvalue b <- c(2, 1, 3, 4, 1, -3, 1, 5, 3, 1, 6, -2, 4, 5, -2, -1) bodewig.mat <- matrix(b,4,4) eigen(bodewig.mat) p0 <- rnorm(4) # Standard power method iteration ans1 <- fpiter(p0, fixptfn=power.method, A=bodewig.mat) # re-scaling the eigenvector so that it has unit length ans1$par <- ans1$par / sqrt(sum(ans1$par^2)) ans1 } \references{ R Varadhan and C Roland (2008), Simple and globally convergent numerical schemes for accelerating the convergence of any EM algorithm, \emph{Scandinavian Journal of Statistics}, 35:335-353. C Roland, R Varadhan, and CE Frangakis (2007), Squared polynomial extrapolation methods with cycling: an application to the positron emission tomography problem, \emph{Numerical Algorithms}, 44:159-172. } \concept{EM algorithm} \concept{optimization} SQUAREM/man/squarem.Rd0000644000176200001440000003370513777433032014127 0ustar liggesusers\name{squarem} \alias{squarem} \title{Squared Extrapolation Methods for Accelerating Slowly-Convergent Fixed-Point Iterations} \description{Globally-convergent, partially monotone, acceleration schemes for accelerating the convergence of *any* smooth, monotone, slowly-converging contraction mapping. It can be used to accelerate the convergence of a wide variety of iterations including the expectation-maximization (EM) algorithms and its variants, majorization-minimization (MM) algorithm, power method for dominant eigenvalue-eigenvector, Google's page-rank algorithm, and multi-dimensional scaling. } \usage{ squarem(par, fixptfn, objfn, ... , control=list()) } \arguments{ \item{par}{A vector of parameters denoting the initial guess for the fixed-point.} \item{fixptfn}{A vector function, $F$ that denotes the fixed-point mapping. This function is the most essential input in the package. It should accept a parameter vector as input and should return a parameter vector of same length. This function defines the fixed-point iteration: \eqn{x_{k+1} = F(x_k)}{x[k+1] = F(x[k])}. In the case of EM algorithm, \eqn{F}{F} defines a single E and M step.} \item{objfn}{This is a scalar function, \eqn{L}{L}, that denotes a ''merit'' function which attains its local maximum or minimum at the fixed -point of \eqn{F}{F}. Also see the control parameter \code{minimize} which determines whether the objective function is minimized or maximized. The objective function should accept a parameter vector as input and should return a scalar value. In the EM algorithm, the merit function \eqn{L}{L} is the either log-likelihood or its negative. In someproblems, a natural merit function may not exist, in which case the algorithm works with only \code{fixptfn}. The merit function function \code{objfn} does not have to be specified, even when a natural merit function is available, especially when its computation is expensive.} \item{control}{A list of control parameters specifing any changes to default values of algorithm control parameters. Full names of control list elements must be specified, otherwise, user-specifications are ignored. See *Details*.} \item{...}{Arguments passed to \code{fixptfn} and \code{objfn}.} } \value{A list with the following components: \item{par}{Parameter, \eqn{x*}{x*} that are the fixed-point of \eqn{F}{F} such that \eqn{x* = F(x*)}{x* = F(x*)}, if convergence is successful.} \item{value.objfn}{The value of the objective function $L$ at termination.} \item{fpevals}{Number of times the fixed-point function \code{fixptfn} was evaluated.} \item{objfevals}{Number of times the objective function \code{objfn} was evaluated.} \item{convergence}{An integer code indicating type of convergence. \code{0} indicates successful convergence, whereas \code{1} denotes failure to converge.} \item{p.intermed}{A matrix where each row corresponds to parameters at each iteration, along with the corresponding log-likelihood value. This object is returned only when the control parameter \code{intermed} is set to \code{TRUE}. It is not returned when \code{objfn} is not specified.} } \details{ The function \code{squarem} is a general-purpose algorithm for accelerating the convergence of \emph{any} slowly-convergent (smooth) fixed-point iteration. Full names of Default values of \code{control} are: \code{K=1}, \code{method=3}, \code{minimize=TRUE}, \code{square=TRUE}, \code{step.min0=1}, \code{step.max0=1}, \code{mstep=4}, \code{objfn.inc=1}, \code{kr=1}, \code{tol=1e-07}, \code{maxiter=1500}, \code{trace=FALSE}, \code{intermed=FALSE}. \describe{ \item{\code{K}}{An integer denoting the order of the SQUAREM scheme. Default is 1, which is a first-order scheme developed in Varadhan and Roland (2008). Our experience is that first-order schemes are adequate for most problems. \code{K=2,3} may provide greater speed in some problems, although they are less reliable than the first-order schemes.} \item{\code{method}}{Either an integer or a character variable that denotes the particular SQUAREM scheme to be used. When \code{K=1}, method should be an integer, either 1, 2, or 3. These correspond to the 3 schemes discussed in Varadhan and Roland (2008). Default is \code{method=3}. When K > 1, method should be a character string, either \code{''RRE''} or \code{''MPE''}. These correspond to the reduced-rank extrapolation or squared minimal=polynomial extrapolation (See Roland, Varadhan, and Frangakis (2007)). Default is ''RRE''.} \item{\code{minimize}}{A logical variable. By default it is set to \code{TRUE} for minimization of the objective function. If the objective function is to be maximized, which is commonly the case for likelihood estimation, it should be changed to \code{FALSE}.} \item{\code{square}}{A logical variable indicating whether or not a squared extrapolation scheme should be used. Our experience is that the squared extrapolation schemes are faster and more stable than the unsquared schemes. Hence, we have set the default as TRUE.} \item{\code{step.min0}}{A scalar denoting the minimum steplength taken by a SQUAREM algorithm. Default is 1. For contractive fixed-point iterations (e.g. EM and MM), this defualt works well. In problems where an eigenvalue of the Jacobian of $F$ is outside of the interval \eqn{(0,1)}{(0,1)}, \code{step.min0} should be less than 1 or even negative in some cases.} \item{\code{step.max0}}{A positive-valued scalar denoting the initial value of the maximum steplength taken by a SQUAREM algorithm. Default is 1. When the steplength computed by SQUAREM exceeds \code{step.max0}, the steplength is set equal to step.max0, but then step.max0 is increased by a factor of mstep.} \item{\code{mstep}}{A scalar greater than 1. When the steplength computed by SQUAREM exceeds \code{step.max0}, the steplength is set equal to \code{step.max0}, but \code{step.max0} is increased by a factor of \code{mstep}. Default is 4.} \item{\code{objfn.inc}}{A non-negative scalar that dictates the degree of non-montonicity. Default is 1. Set \code{objfn.inc = 0} to obtain monotone convergence. Setting \code{objfn.inc = Inf} gives a non-monotone scheme. In-between values result in partially-monotone convergence.} \item{\code{kr}}{A non-negative scalar that dictates the degree of non-montonicity. Default is 1. Set \code{kr = 0} to obtain monotone convergence. Setting \code{kr = Inf} gives a non-monotone scheme. In-between values result in partially-monotone convergence. This parameter is only used when \code{objfn} is not specified by user.} \item{\code{tol}}{A small, positive scalar that determines when iterations should be terminated. Iteration is terminated when \eqn{||x_k - F(x_k)|| \leq tol}{abs(x[k] - F(x[k])) <= tol}. Default is \code{1.e-07}.} \item{\code{maxiter}}{An integer denoting the maximum limit on the number of evaluations of \code{fixptfn}, \eqn{F}{F}. Default is 1500.} \item{\code{trace}}{A logical variable denoting whether some of the intermediate results of iterations should be displayed to the user. Default is \code{FALSE}.} \item{\code{intermed}}{A logical variable denoting whether the intermediate results of iterat ions should be returned. If set to \code{TRUE}, the function will return a matrix where each row corresponds to parameters at each iteration, along with the corresponding log-likelihood value. When the code{objfn} is not specified it will return the fixed-point residual instead of the objective function values. Default is \code{FALSE}.} } } \seealso{ \code{\link{fpiter}} } \examples{ ########################################################################### # Also see the vignette by typing: # vignette("SQUAREM", all=FALSE) # # Example 1: EM algorithm for Poisson mixture estimation poissmix.em <- function(p,y) { # The fixed point mapping giving a single E and M step of the EM algorithm # pnew <- rep(NA,3) i <- 0:(length(y)-1) zi <- p[1]*exp(-p[2])*p[2]^i / (p[1]*exp(-p[2])*p[2]^i + (1 - p[1])*exp(-p[3])*p[3]^i) pnew[1] <- sum(y*zi)/sum(y) pnew[2] <- sum(y*i*zi)/sum(y*zi) pnew[3] <- sum(y*i*(1-zi))/sum(y*(1-zi)) p <- pnew return(pnew) } poissmix.loglik <- function(p,y) { # Objective function whose local minimum is a fixed point # negative log-likelihood of binary poisson mixture i <- 0:(length(y)-1) loglik <- y*log(p[1]*exp(-p[2])*p[2]^i/exp(lgamma(i+1)) + (1 - p[1])*exp(-p[3])*p[3]^i/exp(lgamma(i+1))) return ( -sum(loglik) ) } # Real data from Hasselblad (JASA 1969) poissmix.dat <- data.frame(death=0:9, freq=c(162,267,271,185,111,61,27,8,3,1)) y <- poissmix.dat$freq tol <- 1.e-08 # Use a preset seed so the example is reproducable. require("setRNG") old.seed <- setRNG(list(kind="Mersenne-Twister", normal.kind="Inversion", seed=54321)) p0 <- c(runif(1),runif(2,0,4)) # random starting value # Basic EM algorithm pf1 <- fpiter(p=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list(tol=tol)) # First-order SQUAREM algorithm with SqS3 method pf2 <- squarem(par=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list(tol=tol)) # First-order SQUAREM algorithm with SqS2 method pf3 <- squarem(par=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list(method=2, tol=tol)) # First-order SQUAREM algorithm with SqS3 method; non-monotone # Note: the objective function is not evaluated when objfn.inc = Inf pf4 <- squarem(par=p0,y=y, fixptfn=poissmix.em, control=list(tol=tol, objfn.inc=Inf)) # First-order SQUAREM algorithm with SqS3 method; # objective function is not specified pf5 <- squarem(par=p0,y=y, fixptfn=poissmix.em, control=list(tol=tol, kr=0.1)) # Second-order (K=2) SQUAREM algorithm with SqRRE pf6 <- squarem(par=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list (K=2, tol=tol)) # Second-order SQUAREM algorithm with SqRRE; objective function is not specified pf7 <- squarem(par=p0, y=y, fixptfn=poissmix.em, control=list(K=2, tol=tol)) # Comparison of converged parameter estimates par.mat <- rbind(pf1$par, pf2$par, pf3$par, pf4$par, pf5$par, pf6$par, pf7$par) par.mat # Compare objective function values # (note: `NA's indicate that \code{objfn} was not specified) c(pf1$value, pf2$value, pf3$value, pf4$value, pf5$value, pf6$value, pf7$value) # Compare number of fixed-point evaluations c(pf1$fpeval, pf2$fpeval, pf3$fpeval, pf4$fpeval, pf5$fpeval, pf6$fpeval, pf7$fpeval) # Compare mumber of objective function evaluations # (note: `0' indicate that \code{objfn} was not specified) c(pf1$objfeval, pf2$objfeval, pf3$objfeval, pf4$objfeval, pf5$objfeval, pf6$objfeval, pf7$objfeval) ############################################################### # Example 2: Same as above (i.e. Poisson mixture) # but now showing how to "maximize" the log-likelihood poissmix.loglik.max <- function(p,y) { # Objective function which is to be *maximized* # Log-likelihood of binary poisson mixture i <- 0:(length(y)-1) loglik <- y*log(p[1]*exp(-p[2])*p[2]^i/exp(lgamma(i+1)) + (1 - p[1])*exp(-p[3])*p[3]^i/exp(lgamma(i+1))) return ( sum(loglik) ) } # Maximizing the log-likelihood # Note: the control parameter `minimize' is set to FALSE # pf.max <- squarem(par=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik.max, control=list(tol=tol, minimize=FALSE)) pf.max ############################################################################## # Example 3: Accelerating the convergence of power method iteration # for finding the dominant eigenvector of a matrix power.method <- function(x, A) { # Defines one iteration of the power method # x = starting guess for dominant eigenvector # A = a square matrix ax <- as.numeric(A \%*\% x) f <- ax / sqrt(as.numeric(crossprod(ax))) f } # Finding the dominant eigenvector of the Bodewig matrix b <- c(2, 1, 3, 4, 1, -3, 1, 5, 3, 1, 6, -2, 4, 5, -2, -1) bodewig.mat <- matrix(b,4,4) eigen(bodewig.mat) p0 <- rnorm(4) # Standard power method iteration ans1 <- fpiter(p0, fixptfn=power.method, A=bodewig.mat) # re-scaling the eigenvector so that it has unit length ans1$par <- ans1$par / sqrt(sum(ans1$par^2)) ans1 # First-order SQUAREM with default settings ans2 <- squarem(p0, fixptfn=power.method, A=bodewig.mat, control=list(K=1)) ans2$par <- ans2$par / sqrt(sum(ans2$par^2)) ans2 # First-order SQUAREM with a smaller step.min0 # Convergence is dramatically faster now! ans3 <- squarem(p0, fixptfn=power.method, A=bodewig.mat, control=list(step.min0 = 0.5)) ans3$par <- ans3$par / sqrt(sum(ans3$par^2)) ans3 # Second-order SQUAREM ans4 <- squarem(p0, fixptfn=power.method, A=bodewig.mat, control=list(K=2, method="rre")) ans4$par <- ans4$par / sqrt(sum(ans4$par^2)) ans4 } \references{ R Varadhan and C Roland (2008), Simple and globally convergent numerical schemes for accelerating the convergence of any EM algorithm, \emph{Scandinavian Journal of Statistics}, 35:335-353. C Roland, R Varadhan, and CE Frangakis (2007), Squared polynomial extrapolation methods with cycling: an application to the positron emission tomography problem, \emph{Numerical Algorithms}, 44:159-172. Y Du and R Varadhan (2020), SQUAREM: An R package for off-the-shelf acceleration of EM, MM, and other EM-like monotone algorithms, \emph{Journal of Statistical Software}, 92(7): 1-41. } \concept{EM algorithm} \concept{optimization} SQUAREM/DESCRIPTION0000644000176200001440000000174213777512712013115 0ustar liggesusersPackage: SQUAREM Version: 2021.1 Date: 2021-01-12 Title: Squared Extrapolation Methods for Accelerating EM-Like Monotone Algorithms Description: Algorithms for accelerating the convergence of slow, monotone sequences from smooth, contraction mapping such as the EM algorithm. It can be used to accelerate any smooth, linearly convergent acceleration scheme. A tutorial style introduction to this package is available in a vignette on the CRAN download page or, when the package is loaded in an R session, with vignette("SQUAREM"). Refer to the J Stat Software article: . Depends: R (>= 3.0) Suggests: setRNG LazyLoad: yes License: GPL (>= 2) Author: Ravi Varadhan Maintainer: Ravi Varadhan URL: https://coah.jhu.edu/people/Faculty_personal_Pages/Varadhan.html Repository: CRAN NeedsCompilation: no Packaged: 2021-01-12 23:59:02 UTC; rvaradhan Date/Publication: 2021-01-13 06:40:10 UTC SQUAREM/build/0000755000176200001440000000000013166214602012467 5ustar liggesusersSQUAREM/build/vignette.rds0000644000176200001440000000040713744120724015032 0ustar liggesusersuQN0 uP`Ҥ]htC5j]%UƗ#h8ֱ:g3 ٔ\B6!CJ>_ library("SQUAREM") SQUAREM/vignettes/SQUAREM.pdf0000644000176200001440000034417113744047240015226 0ustar liggesusers%PDF-1.5 % 1 0 obj << /S /GoTo /D (section.1) >> endobj 4 0 obj (Overview of SQUAREM) endobj 5 0 obj << /S /GoTo /D (section.2) >> endobj 8 0 obj (How to accelerate convergence of a fixed-point iteration with SQUAREM?) endobj 9 0 obj << /S /GoTo /D (subsection.2.1) >> endobj 12 0 obj (Accelerating EM algorithm: Binary Poisson Mixture Maximum-Likelihood Estimation) endobj 13 0 obj << /S /GoTo /D (subsection.2.2) >> endobj 16 0 obj (Accelerating the Power Method for Finding the Dominant Eigenpair) endobj 17 0 obj << /S /GoTo /D [18 0 R /Fit] >> endobj 20 0 obj << /Length 1751 /Filter /FlateDecode >> stream xڍXYoF~ϯ D&] Na qEdՒ鐲cwNr)KNH-wgYҋ/o.^:MJQ̻Xxeelw1?uYŻWqwi M0cY㫫]fɫ+DZak-`nМ =9;iq/i4s֡sųD`s+UcDǨVc3x -b0+EXX b6 JC&sx#2gȚ,E)hf08ɘ Bcl6}1EFx.x#ىQ{Ͳ0I4_gןI# }܂c[QFC,%1aE.q n%kGuRE{%zH2mANUVD4Yg # 6@ h!ȉ/gk漲h;<1sH1vn%0~ )9hϑ^Q* 빿v,j*A|V`V~C! p^OPM ‰ܯd?Os8@"IrT>F~=!FE1E $3,>*:a D\%b$[W"HɹLݨh@slR8If"Ud-g<{&6Oٵ6Ue6R7F!-y jf =P:8#4Nf%8Aᦾ0/b*Ӿghٺ'PiaU#Hą o)VA P]? 'pׅLN ɉ Qa\Wc0M,%72D6hz.m Vq8j՞ppcߵfkD-|E=&d |d@O}&UIH|߲=sy#SNB k5E$IDؗ 2zjABr色l]r3=Z> 3+j\pA8ǘR{8Uq^g\W{.%¯..  $` INZ qKQ;w^f6,o '΍fVr^ Wjoo0E{l=]qBa2󐻰AB40Ux'=LT:A'z0pVzPwb`g}e(}=o MSs 1@|JR7}##}/[޷V^$KE5v_:<+rC5z>Ȓjdҩ'C%A}`˨4i{0-EjZr1y}( \$: /DsKtZ[vphp_3L_;;Fa)3zikw8n]qsX *?baugqUbg0=_ ƻ@ơ= I^. DpJŮs>hr7҈W[YƞQ/t){-լJup+0{5`h' w9v#q?"ancz;`f-Prroy Îɩ/J2-,t࿁x!L*ƾFCzdz΀:/EBEAUl}KsrFﻔ endstream endobj 18 0 obj << /Type /Page /Contents 20 0 R /Resources 19 0 R /MediaBox [0 0 612 792] /Parent 29 0 R >> endobj 21 0 obj << /D [18 0 R /XYZ 71 757.862 null] >> endobj 22 0 obj << /D [18 0 R /XYZ 72 720 null] >> endobj 2 0 obj << /D [18 0 R /XYZ 72 555.838 null] >> endobj 19 0 obj << /Font << /F38 23 0 R /F41 24 0 R /F21 25 0 R /F48 26 0 R /F57 27 0 R /F59 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 32 0 obj << /Length 1542 /Filter /FlateDecode >> stream xXYoF~ϯ >,.IQ zA<$.HQK*ұ3;Pb;H{ͱyD}z/IYhtxgS/3^(IV?$yF]AOUU7Q#_8_'bьk0zԱwN`l`Db=ˡد,??{(ipU Avg)Swhq 'Cx$A:3p8hj6^LhsK4֚Ag)d^Δ*d5DZvtģ}"p@, ɀ_zU_ч*,eZsVΡº"e4%Xļ,|WWG:j/V40l *]3+x6dl|eRAό8=S-[&x9)4)<^dHli'NyGKf\Kk4Ug"J&IiIc>XP,g L:csg9G6A%fl͞[|a֨)#4b~y/D˶74 XX_3,țA@z2(sbԁס@)P&UGNit4wQAtBxEymNYQEcBc[^ƢH-kBtPriJÑ[rl͛CcO\\_ngZj=*.6q^8awNڲn'ʹRi /wQ1l,YDb@O4ϩ{*<7(76zԨfW{b]4"0qEAދ޴3"sB+O4qȀ>lG MW| yb})qވ1g#1}#G-q !npq%Lɡj;e4@Q6,4?WCQ}xMg5a+ 2S$L} k3Qf\7UmӺn`@]͹_2.H'$[nC!X#q;(b7$Nڜv0t3y)f[C lvag]o^JIںXsAY2`pGKSx7]Fe;~+;4|q5佲 ʾe-ݕ9EBwHRͻ="2jYY咓< endstream endobj 31 0 obj << /Type /Page /Contents 32 0 R /Resources 30 0 R /MediaBox [0 0 612 792] /Parent 29 0 R >> endobj 33 0 obj << /D [31 0 R /XYZ 71 757.862 null] >> endobj 6 0 obj << /D [31 0 R /XYZ 72 720 null] >> endobj 10 0 obj << /D [31 0 R /XYZ 72 670.964 null] >> endobj 30 0 obj << /Font << /F48 26 0 R /F21 25 0 R /F57 27 0 R >> /ProcSet [ /PDF /Text ] >> endobj 36 0 obj << /Length 658 /Filter /FlateDecode >> stream xVo@ ~_dw\CRT$ {{(] &s,KV@{ɝؾλlt|#e`VNV8 6N"@D.3w> endobj 37 0 obj << /D [35 0 R /XYZ 71 757.862 null] >> endobj 34 0 obj << /Font << /F21 25 0 R /F57 27 0 R /F38 23 0 R >> /ProcSet [ /PDF /Text ] >> endobj 40 0 obj << /Length 1421 /Filter /FlateDecode >> stream xڕXo6_a`+ "JdM h.A%Ǚme w_(ǞZGxxăw/b:}qvRؘd0y2Qk3_Pm9 , Zo`tFc__˜J2*ք2$>C՛a2 DU@ErC"<3a|\{ֵ)Ԣ;=O5VV4? K,5-k)<ߦrґ#dH 1A[g$'ԐdWq$N`jeZvҰ(YyͽczلFr$#cƃ0QQI7HYb8]CVOޔLee²V}X'0:r߬P S }R*Hy3>6&1eRR*8o̷O-UprPcDrG+ri5/6{lXH! #ӑuGt; loixThAd‘A ev> endobj 41 0 obj << /D [39 0 R /XYZ 71 757.862 null] >> endobj 14 0 obj << /D [39 0 R /XYZ 72 325.115 null] >> endobj 38 0 obj << /Font << /F21 25 0 R /F59 28 0 R /F57 27 0 R /F38 23 0 R /F48 26 0 R /F54 42 0 R >> /ProcSet [ /PDF /Text ] >> endobj 45 0 obj << /Length 1504 /Filter /FlateDecode >> stream xڝXo6_a{)k@u@ ɰ.Gv%k9Iߏ#EɒAd='?VejIؤij:36S=dfovY`!H{fUMH3V>N^ ]޷Q?h z"B!ZK@re:]Og:#1˦UQD9ʠgrsV+a1zvܘ=30SɘV@apKz0Ǖ g匄q5 "MZx+ٟPnJEsvH*sfJ W ^E.8.Vz'!G.|X5 8kw8ˢyC&Kbn _9yiUK5;q^byMv"oA'"1i2+514W,'.\K,Ռþ4]& 䖓rX 0o 'ތa5~w :R TAgigyݒ.J.YG*]I.NSr~Grv*Ò(֍k/Y? 7CDpn)[r ~%He7eG^ͨI!rPbW*4(yQ@߶@"pj}I7e;> 07u6V1<cg]KR0va\F`Z! ( bP@RUJhtO9۸V-Ba˾it)#i )kL#.6]T!̐~DJ,؋]QNcy:.qm.S'AƕV=5jkwLR@)X 5Qj; RuiDp]V⌻.@,;>j +GOo[i9D'7/<%F-/wZ8J} P;j0gǛS;ݷy%7} bVv-s++u-k;ݡi텐y<;4,Cwj0ZgY/E ^×$dL v|b$@;mnǭϺ~O>oM"Aܷ) nq*K> endobj 46 0 obj << /D [44 0 R /XYZ 71 757.862 null] >> endobj 43 0 obj << /Font << /F21 25 0 R /F57 27 0 R /F38 23 0 R >> /ProcSet [ /PDF /Text ] >> endobj 49 0 obj << /Length 860 /Filter /FlateDecode >> stream xWmo0_ &hI'Đ!!+!u]ud-{|Iӵ $>%##wi;%JIg0vt$T8wFsVPP<|00H&sڇPOpiTi{? O$߂ :/1u26%)OMX;Zm:NhåP b ^X$_5k|-D)-A2,ye nnUnICoRG>/<lHb)p{؜2bbY| Wr?A 6 rŽ FFPȰ1!%Bw]_4rзoj2QuY31Dsea',"#`iXPqL(QMdp ; endstream endobj 48 0 obj << /Type /Page /Contents 49 0 R /Resources 47 0 R /MediaBox [0 0 612 792] /Parent 29 0 R >> endobj 50 0 obj << /D [48 0 R /XYZ 71 757.862 null] >> endobj 47 0 obj << /Font << /F38 23 0 R /F57 27 0 R /F21 25 0 R >> /ProcSet [ /PDF /Text ] >> endobj 53 0 obj << /Length 781 /Filter /FlateDecode >> stream xVn@}WXJu$@ R*ňRu.UMԹ+{9{c Gңy8B-$~)'uܗ=>+{DGQlN@\<%B7aFE{l1t!Ɔ':iB!^+3+N'P #_ia߂ |`I1&-y S`P' =P+b67[14e{^76aOuC?&kUS%nWNs#{tZ|vLj>3,XɺeX`\mW;1 ZDR!0I2/ 5?L Ro4eƽhy%cwB^BRUi 90Wӌ]524LmNMŢ6K#柱 /.2CZSkNY [ϊKPM%D^䏞=[[!_/cRp<5c'7J3y2/(j*o 0g9C,kG>mQ옑Q`xߐ!O?C@rf/Rduq&i& endstream endobj 52 0 obj << /Type /Page /Contents 53 0 R /Resources 51 0 R /MediaBox [0 0 612 792] /Parent 55 0 R >> endobj 54 0 obj << /D [52 0 R /XYZ 71 757.862 null] >> endobj 51 0 obj << /Font << /F38 23 0 R /F57 27 0 R /F21 25 0 R >> /ProcSet [ /PDF /Text ] >> endobj 58 0 obj << /Length 415 /Filter /FlateDecode >> stream xڕTQO0~߯hKh ]!1>l&|3af&}ce>\KY8pگA0 c&(%YdZ2cG 6u]TsX^`Mj[ DGȂF\O-@~Ȏ-`4VAY!kz1"}F^A ԋ `xCm!蝌솈w+N`uS8O`E^nؽ: "]M۝.h3C8] NvAr>{|jGfr}z@}N[n??~K%&`!1\2H7 (3j} (Cﱚ9+aln`X]a?3S`테q"(̴ؼ ٫ڌ*< ϵf^")/ endstream endobj 57 0 obj << /Type /Page /Contents 58 0 R /Resources 56 0 R /MediaBox [0 0 612 792] /Parent 55 0 R >> endobj 59 0 obj << /D [57 0 R /XYZ 71 757.862 null] >> endobj 56 0 obj << /Font << /F38 23 0 R /F57 27 0 R /F21 25 0 R >> /ProcSet [ /PDF /Text ] >> endobj 60 0 obj [272 272 761.6 489.6 761.6 489.6 516.9 734] endobj 61 0 obj [862.5 875 300 325 500 500 500 500 500 814.8 450 525 700 700 500 863.4 963.4 750 250 300 500 800 755.2 800 750 300 400 400 500 750 300 350 300 500 500 500 500 500 500 500 500 500 500 500 300 300 300 750 500 500 750 726.9 688.4 700 738.4 663.4 638.4 756.7 726.9 376.9 513.4 751.9 613.4 876.9 726.9 750 663.4 750 713.4 550 700 726.9 726.9 976.9 726.9 726.9 600 300 500 300 500 300 300 500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325 525 450 650 450 475] endobj 62 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 525 525 525 525] endobj 63 0 obj [625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.3 531.3 875 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.8 312.5 937.5 625 562.5 625 593.8 459.5 443.8 437.5 625 593.8 812.5 593.8 593.8] endobj 64 0 obj [544 544 816 816 272 299.2 489.6 489.6 489.6 489.6 489.6 734 435.2 489.6 707.2 761.6 489.6 883.8 992.6 761.6 272 272 489.6 816 489.6 816 761.6 272 380.8 380.8 489.6 761.6 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 380.8 544 516.8 707.2 516.8 516.8 435.2] endobj 65 0 obj [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 484.7 667.6 484.7] endobj 66 0 obj [514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6] endobj 67 0 obj << /Length1 2003 /Length2 13596 /Length3 0 /Length 14815 /Filter /FlateDecode >> stream xڍPڶBpw ָKpoFw4A$]CpHWWT5=֘i(T?Hۛd!.,)%IN;;+;;'2 ;2lGj*C.  ;;]?Ni i+;B`@33{;  XmAEVfbW 5M_H{>g3'33*z Rvv 3_N sd@!A`_c:iB 9Ǽ,A.vvv>^0bo'_|c|@7O"d9` CT5,_ g~3|U=OW̦ )#))ifpp88|< \9=@_t_?/k)ۿ*#tvvr;*Ho?@;#^Jڠɹ_wAbic;ˀ=@`3_vͿ ;zZ,]f6χ&v^[ٛe<UJ<<ou4yb+5:/ IeIA6?H&qAU >ZE忈`S^kA\+k"?赃 f_f }a `/~ee`gW?_|nrGwO__:qށz#˟|%n8RtQf{7A:9>?9j7!؛ XW4VHlLli'3x;ޣ#$2 ZqH\xG%@}PhY}| yn w4@EC|G+M&ѕ]5 ֽ[֣P̖v9cKfA`MiBJxRDFSIrLȾ\z1w^K%DDz0WCޒIyayF3u-@GmEk{ƁREafj4{[ 3'8Zw"K9ڸrt}% o M#𛠫/y4EvwtTCRCHTc 8aE.orC F0z6/.fb FwoVg5\C̋A1ւAOT*zKb (AهT9IYto-/oTIG '>왗K+;}oQ xD%-}K;>=uhMwlT8YHF4ĉD9ޏ$`4:=kdg jͮu5meV\z mz.,t) s[cLB0պ"Ok3mX]&1ת}qʮN3 "V1A}#SFupSț,#^ÿɸJv7{m Gh"GYfM3h,v#Z>5[XO\**I&G,ٖLvhv'ݒOfYh|rZӁOp3[/ ih5H|C؅)CARP3 ,QӜ`f`U_bJ1aCvX F{d5,뉨:x^ q' {~-'btB*J §w[m1ΐ J2ޮqe};z>AKZ<,eJ{A!ɡ86O&tF堊s ] 0;'x.joqYiHKlbMա1mގ1nUTw mM43_?z8\p l7b$Ĺi2T{!MYwZ:l=dTCa!`,_(Sx]* 7XLz$OxwGdE*,ޯ̨ZS {ُV I68it*+ms]*xn;QeјauU=h8x*;xjGF wyn"Vڍu{=”og-p5PĞHW#)n42%lL".K{e"%a%qNWl|5㗔_/۫OM)9ÂlK f_-љj#L\ZހDhۙٲu4>( !7ОLkghՉpHn7lNc ߂HU1+,fTt?xc2ݓ[U%pܭLqcz$RN> vRgӾCgAj ,mY,vYHhfݐmfGrgd⮢^hI*+0ji~Qk"ߒ Ŕt$;;Undq)ohH1;Z̀!׈ҐRV灙6kNu)ȅM;psͿ0񢄻^Ma^d*T[\-hA/a>-8!E4֧M!]\Ugp=/]/l%@qNBc,p}@:'MK8TnXm3Ԧeh T9L9~j,+1)ԅ4`\d.zNb(gQ I"%lCJuZTk̠zg&R ^ZyUznA(HG#>yCQvϭ.^ꁠWw!L/35((qNK;y4ݯT(>v g`SzBam<\y{Ew].C6X5Ǚn*hOhfxC_gE(˺fH;olEkwJ6l%3paBoX3PZih59ŎFDwj1@P 啸h*wH׏);zGHWSqK{ !t PPd׋RX3w)K|hSvl8jm"JaL$}~ F)km+bƻ+C,l{@(^aA+Yq̌KsI[~hkҸӫm7_%/+F[@Piqz5=uc;IUrӏvYNI4 38̻9"wO.]LY[iD)s~GQPZnx]"A];=9נITvr:즄V'esj u@^ANGyʟ*ki.Ɖ,jZ 䍛Siݹ_i@x%[~+gL?=yZx}`4~++w HgsW{Ӡ緣m6vnZ!<ؾ $pU[G=uee5x#¥.4wQY6"=Tɂur>~ i `\@W]M=e~Y=%׿né礅G"VXC,aZ<+!@O{"0߁+^=l`ݧ$]p6^݆:d1'p-=t3P1#̱x% dNPHc(}36`P$3Z;>*Q\_jd{)U3\_LpRkhtp*7\ʘ.ܱr^Ky" s7rH[6_H,P%'ifφ5W# L8 YՏmgCZ&hP=]=Tgjfc;$}㼠gM%֔ew%AtZ]F4:WFJ W$4d S7 d~L>ڲeŸ:p T|;\,N)!h#IkxB~б ЃAzycB!lvm_߭6sJ"sE*M2̍Xi/QGtbP4UZдIe'zWlq淚;tGz&RN˨K4C܇gHdXh EST%#}[/]MVXrn_:wlep( \{$v[4e' ,,ʡ}3'qh]vO%GP&F|tߥ"en8&Oi})a:^}]ɻqCJ%'h._.FeSd$)EZ~)eR%qh ė#{t"AaV_T `<l]G7顫1QC4>)&rM3O ^c~ j~sŒn6Z*~@Zp|t8)%߶E2[Ήd!B>%,(]%/LJz}HB -A(< =:;- \S\пbΨ!<>w~a]m4F{Ҡ yQi'f +ogD=<`;F%g$3a9mjc"{lE q1aq 8op쩍K q"ჸ9!Z~]A٦(u-,h_c[%hF)]"8w@׭l;q646,٤BF~l_>Tk15b,>/!rV\𛍖>OeeԚRnz.?+ >Q,vBǗv.͏1ICE!ْAH*JI#{($3wr8]yNC4x[ޔR#<^:[=Rz7m|U f+)9wA?>leTmLtϼ~s@$O8Z?[O̕w$Cv !j]X ݹQhG&4g*3UXCo%u odz7r1݃ոwz?=t"-WMrM"q.g7F{YU,4p3R_z A)pEMy;H +"#Lѐ#v۷teeB=0Ja)W%{n/nqMwxnd<O1KTx&Ւt9rfFC#k4w伨Ly7M &8A= AS\USRե.b[dTw8S:AֺRN37nmU͟|=u9`o@6Jj־.Rhyک=LMz7:@5Hd%<}/ ޑpFcW oJrfIn]nEOq9(8dkUqIy&͇ z;jt&k$qvb܂ݎR0nXwܰKKⱠt7uԮ^֟Cʎ_rOw*,ehv6!YõWkOc`űAt𘃊fnmqQrq&>h`:dS^g 4VvXZM]HIǢzn{J*MS capˮۙxhꡝp`Ա5{)T#;~K6[F`K.j$\6D]yA iM&( "WFx\0ak7eǜeMաXNSrq&Š>Wqe @Fd+jZ&ԛELM7F8$/ i[) q8^st`s_UƙmW-Լfv>lI{ pGSa0>su]u$LH;pQh*w>O'Buʂ`[q ? '[!؅-i!= `$E4~$8Lՠdkp`)6zeD=kkЏ1xd5'o˱>.bEWQ; 29mq`bxFxzP ѦR]S})LvX"`lH1+ԙO 7d5d]1-^l\Df=7 '\ ;p2Ϭ}?japMdtUzQڂ@&21\mkba^?tރUt9] rh VRcםF29*{WӸ"@A]o(EZۄ-DK|a(>mCDL8d4lU5* âQ~l=$L?n.1 1QĹ6+(VA+:41^S@_c7T]#@!O-3=Nߴs--P!6h7Ԓ7MjJu>r 6 -}A84b(.KCMz%nII-%F+)|K8_=pkK4>.^ɳO!*KNֹh=ړKo`+<~9FBV+cmOⰓ]uڮg_}T%7/KX$29vcXOwS608s\+ilG,*7e$;jc}(lHn:Mݚ_$#)bu+|V< u% |ɼɶH$_fRxX?}f=fɆ`{9FU wаCp|yWE ?M.?IrIf)F4ݖM"փceGuԏVM?Gp望q~ӑOcO}ˍKDH;)I8c1=F qdYzu+1>ŃO _ r5ѯ(w2 ]Xfd h4s+jmKbN`d Axʬ4f w@BofK Ep˫ Yn9 n]\a>d+zC9AIj>͓K%Ohy=l [&4&\T`>YV#"o'g <$`Kxs6+@{.~$g^U3(Bp\5y9'xX"fo*ԷXξۢ&ZOO}jQ C#olI(׫=>u\X%HуEr>4z-Cu+9,O<.v%3oLX>im͍!U`p4Wξw/lmx@ZZe%D~1 Ꭵ@']/qЄuk6Vۋ$¿bFǫR3#*uFmiu@>~;u|3!u5~0`̓= de%dgzLj/*GGd'*&K{ gS+>G(FF^$Ģ!ƲF jFOJ<^荫q@GQZr3Dan2?Wʖ\:/DciE}oa"^"Y2øi&B^atX=jIʤ]TQDPC&׵]qۙUigWUիl 7ZԪ6)Dov+l}d[E)("+;AK<+rB{y[/e$9 54=j;خ3m^څX {Y.;D-vםq(UҔUKJyi>bW~%G͊A$$_YS&ƚjBmkī=> k#rj(z?-;V k`)vSv<3 (\ vdewT{:?"Wi i W~ÞZ%ɋNWgj䷔QOt9t\iЧEKaa=yР8wЮ|+.5XjW(]uoK&+lUZ.DgJ>DmؚoaaE}]#c~:R ţ;3rb^rֹDJf؂lD<W'bTѧ Kms6ũVG}A.KyfXi5g7ԤTh0lV!yI!=\ZR cHWvѧ|-.yuu|#aSDe.%&Fwuk o5mal+|v!`pÆH2:ɹJ:E 񣉊 #~$O[h.#:>D|@8EcP` dB }xF#z@慊 &SߺAhkoS f\|cKznX%=Q O?QCǠl9/d?75=jLC'+6ڹNhG=,sbEfcC-kj+X͞ǗH~C9_Em,=m > *D:YK 8!Mtd `n߉Dh(hjQjG{[{[袨5{i#A8q7^mk[nrw]G溣u:+xE@٤ TAIjcmދw%I7Pf/"3zN:peZʛNPrBI#8Y)psj p[mwn:Jj)lZR 9\l0({ئ+{3ӀBZJTUR\bS\0;CBo@>Fנd]_LD"&pe4MNH|t8a~Wϥ-NwB^?A6 9mv5p}Yk y.ZMb[GT칂[u;(_{&*Ϝn3Ca1iF4|4Yf0a2N~։ yƊ$R{}OezG #]#Uk? M^8"|'VQ-7NuQ?x] m:80 _L@<(8.kMomj؎0 me4b~"w) 2A 2q n/)DAY@2Ng&x>G[/>"~Y6(@x 3 ^]fO#OȍrV:|0 SpueLh|餋7&X[o;@tY e}b endstream endobj 68 0 obj << /Type /FontDescriptor /FontName /LKBAXH+CMBX12 /Flags 4 /FontBBox [-53 -251 1139 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 109 /XHeight 444 /CharSet (/A/B/D/E/F/H/L/M/O/P/Q/R/S/U/a/c/colon/d/e/f/fi/g/h/hyphen/i/k/l/m/n/o/one/p/period/question/r/s/t/two/u/v/w/x/y) /FontFile 67 0 R >> endobj 69 0 obj << /Length1 1412 /Length2 6120 /Length3 0 /Length 7085 /Filter /FlateDecode >> stream xڍuTk-("t)Bh&$@HBM^CA(]z|?߽kݻV̞yf ;a UEѼ@>I:P ' HnC;A?"Q0\!PS@- E%bA$@p(] ⅄;sb< P$ @h3D0 `àhv@]$=<<@(>^C;((  r`C  $u8P8 @uM s9 ?d,Jg UM>'C~AN(69l_ zv?H Ň9g5!Jgg("ٟ2 c݋rp-;bs UWCq1!qQ;<+paǀ" @#ݠ~>;o@``4jSG<X??y2 ;yb~ee 5?#' "(@ : ؟>U!^=!p]L.-D/7hݑӯ8o9Ü uCcePcojA!07AX9( P0O(D;oO9P] Ve' ! +9EXQ8>AQyaD>@L!P_hl ;$hQO/KDnH$_KP'L45K8ք|R]Dwݥ2b% 3cZDuP񍶢CZ^xTl__}sB2Nڀk(Ye"k'w>LXUQhv[{Uq=zۋF^#ًαK-"S_hH{T-Βcx=he- M"K,|lEvK [5J{ZDJy{7M3"I[^: RND:S??Hϩ5NPLX[v>̑PV|Acj،8:N,pQ "Up*iJbkn}vOoɢVD'hE@X3J"fbR"n/U\BaV-aM1Ww4mEku#Cv woxS uǘo}Oo0ш2a V!l<O[ /&zeݙ2KBxqSz/OE"*/a9D!̧wL}V}ݏ>A-B]$4 `18^d>X>$ ܔ[Lܵ}}+糎D%A}u:FoN>s8^ cplc h5+]cÂ$!%:k \` J0?,W=(a#6Qߜ >% @ɋ4lCQ=,aUiUx%7 ^//e]$ܟF@eJKeh&%;wX>_܉99 MؑM"O衶Dm%þʮ>]m9Z!ќ54IUujt}7 2ezK-}5ʷ~8fm0?NJL .|t:~,nnvWPbUilGsP/ƱR͆BALDFYSOh<5_7vIEӗ Xm>߼={PQs 8#@BX̀Px%XшÅ7}".8aR#ۆ̵Qε./6_x5Scc'o(Ecۤ, Hߐ+ n0*J?tBdgtlkK Pϳ n۵r80A ДU*fWٌfTO{66D^'"kfE];]}Th$Zp=Ml3#8yT/e 2*{_3}>;[ĩ?6bh^o)ffJxpX3 k#W\4`r^ep*^Lb莋ytw MK:ҍ4ˌ?U\ J F (7nި%= E+|U/GɷhԽa$ܕ>ZrTKЬ9u?1XPzB?nj:Fx1/lry4p@ 2]ϷcTizJքolnZ軤)o,lx 1JTAOa/*Fȃ6/ ߽(okAWִaU1Wr\eA`jAAlgK=sugӴ;`̭MK`2cɧZ E#ƭW )4G=rd[|&D2k$Sddı^ sɕW+ <fkdkדn୶q͗\ ]b|{M苫kVOrvXZ$83RRX[ժStj&Fc3fTh `]kw,ceJ y,p@:CεTb\V拵wS &0;>,r0Lnur=$F&5z1JND,~bc/aic)lFia:hܶxW)PЖu :tY||\7M;$Gt%5u_&Ȟfs!,"xSïy81dų8oZa,sh 舧Å$HU@:{hKihHuPTAqw^TZ<{Ufrg(%|&K#= :0L oAazK5Jz)۫x/T1[xFd&C,YΕF#ϦV=დ.uAa<9ޝ.`~C/JBWY&o$~{{!ĽQ@}Xhbۻwj}L OR2.C\:w NlM{0J>OǜO:|Σ7b%0y%ǥOT@9) +F~WF`9}dWYb~/[6AlyB.R$e3EfAq,._qaK> ?vφ\;^Z2{guPq΁ֺZ-h(b[:zTIe~?eFˌW\BAv36t[t/Tw)Lj'r,oLr81zE =RN9pn؝u^oBj)^H߶(a鋣H?+aPoi1WpXGgs_D.=njGIdj>"}| ;AtNiizQ{7w1 G?ië]r${UHڽq t2>^e }wHtq2njL`Phw0(yMX[u"ƦeCHȼuUBFQfB)E2UI&Ka .6?fC UtIۖƵ@Vzu), Nba$g{"V̅sJF#e7:X&n+b_E=8ZTr<@4ō.JȬ(4Mg˦[Q*;O Bz6V_)$;&q7R4t o΅:W?& $>.n; KxOiP'lxABBu)1"E7ݻ̗<`UBcH1<Oo-%`r}%vd!HVT!jCl&kk_?R3Hu~z- b޶U)>T{#C\g#ީ~NWцeEfժ5I" a>֭޼z|mPɸh!~j2 )6#80%Fn̲e/}sDqIGLo)vfTXoSH2TuV fJ> IpV-Kn[oowKpJB)<Q.À q' pR~Who}h(lpϭ)cމ-V2 L9Me)aM=C^E8E._&Ct}wwl<&k{Mܩ3줟Da9;3y8, HYfqcaefe}in*( =p .k-qԱoʷ&uoϯ6E0 S:~kZSg3XsrKQ1Tz/d d@D35jecRzFC[(xu-N.?wՠ&)K}=x v+YC=a aek='^6Qr}fD|p \r$ȉ9 #ޜk!y6ȁ{tKLQy6KV*<^+$ @8fsۣ~oxgӅUZgCs+|J|Yc.jԄJU iGE;Kc۟X\QnSru*9JW1m暤A'-sp62kMvRo S*7_<؟V ),:]gzF|imkuL}ܵc6HȳqTvWAaVv@-g j[P2[w>5#k&Kpᙗ]&P,f#ؼȑ^hlP-sŤNvvbP.#8| O^̏Of!R=̴{@߫D`'1޹+R[ i[ܻqW$9xa0'OFiws({ڶeckіK'r"Ľ˥A< /|31/i9MML"%;.%S٢e1i:#]9:8 ɒCĐkCTQMȂje쓦GԻϗq}OBޗA.0u,*Fj ǒu܅IW`w?4jtJYZ\Nϒ_ mK}.t5[\%zx&M1CUX"nwe54 "gh;[{ł#sފ1 ᭷J ăqrB<иTZ![H'ڢm 66 ;=wo>BϢ2!?Iq װˁ7<*\:(4+5e )28[ajL%:*|jJKo"5^?ԓ~\A-pkN͸QY^ $sbQ}?FC@Jٗtx&w-KwZd'Vpk&ЭtOB4p7oӥݒ;T~| lz37h ΍uVcs3vɂhfӧpTK1:>Z!G+P>{2Og:|sP(v]m$F]gT !71@C#oBo=Џ>f2Dx ^!faIsL'OX.h .&Y]͓k>:a3xR1f3+wZ^D8<*U8iNu̲$\]lƥR_ήV6{ր:'JUiNM%kH endstream endobj 70 0 obj << /Type /FontDescriptor /FontName /DODKXG+CMMI12 /Flags 4 /FontBBox [-31 -250 1026 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet (/A/period) /FontFile 69 0 R >> endobj 71 0 obj << /Length1 2364 /Length2 17687 /Length3 0 /Length 19074 /Filter /FlateDecode >> stream xڌPZ %8Ӹ;w5Hwp9sf&g-ko.(HTDL팁v gFf^ +Bo31GM=NuX8yYx< sZv {|PXxx:ZF@&F6U;Kpvebrssc4ubs4Y:[TN@GW)/#[(jNU̜݌w 2:ޛTe@r W!KпLLl@ s ()L0hddojdicdɍ"wdhidiEʼ,2Oh.'k syYL"abϤtpʈ;݄ftp033s_^t/B`aZ8 ?@;Ztw?齯OΗIBJLYAoڹ ,nn3(Y{ ?2 3;þ]}4`@l+߂Um@.66rS6wκ8-PMwVhjb2F@dn_-$-݁J&/v.%dd׫``af?ebr8o\-%@&v0VN"rpXޯ)_; `b9:QN_'Iy_".f`XLIb0A\&?S/~SAT~j;??蝟>]giGqLl?v,:Y&w6?ާ{ca{g~h6Fyl,` _~;俇igw,<-D,ߧ|]w1;;?9SAvyO;?bY Ymu%ߧf76߅ppso. ˻ _8Ý? {-8w&nvHxW]Tw]h^]3?2W:wќĿ.݁&Kv&|Vu5"n i4 ^K.(4Y뎿EGV%oI^[`۟ Uw M}=$'dP~qlspFQ*wr,[Uޫ\69x"8'Gg"8Z wԹ߳So$t>'1lE^:?=*Xz>#=H]*)ZwO9ibs@rxxOI1K K&*zM:4=bUv]披؉^1MцCg1N6L;F[O^k>Vc QkyV[ܥL6 ōIPބ}d@\qD:(l"<1dYylJzuLj4nGXeeo"ՕyY_ab!6'\p~l۔ }-֬컞>+d`g,3WEERIQ"w>AЏ[L!0ͫ?_6/A!ɡWӊY?8NyJ0$(Q[U}bUpao=ʌM-ma~1fF%ߐЄ6G(ZȐ):}m3w>1ްZs KLȿxBεU*qz܎d27@zFz1$/ܮ[qrI\+Q2><3!6 70kOH9'b@g`&+~& L.xG-˱)5=db#sou;e0q<8tA]H{S>*SûbN `?LXPWlӹ'Nh EKͳ75~le_tryB[fZ _Ì,718M~ ׶~kttL4YW¦nK.fJ,lfOUYk誜Uo^$] Ĭ4"ٵ@ RPEKJY pw-Zu&ܡKH<(eRӐBUM͜Ѵef~)Q}֥s+Ml>P[J&zj,nH #Gvȫ4nx'?; =P.,5>B^mF^$ϜGF95/>'WoSN9ah8{Jjb=.prOU$Ep))zht67T)ZӪ!5QWrr,2RKTȒ9BiE V Ǒu^F$mL~]22<"^e *wQ WzPCJj4_8"`i[9[8M 9/].yPHv 9G9idE+a='T `j+LɦmWcrR摟d>}G8"GX0$#݆PqzfKم}ǭ|WAC?&a`V;s6liNd\vBJn'am@ŔpzF}~1kZX*[*^S$Y=#~ҐgSNDLF<<\ժAqSL~cG2}v `/ipJ"zfXNS6$o GxdF`cj9p ͤ:]Z%z՞ MH`S qr KһLĎŁhJQ ӣ9gm5`Zޜ{SG%Pjg=Ƣ!sY`Ij%A1)4<Zu5k6<4s23Ʃ[cv,+=iD%( ;bΌ:Lg@A¯L In9D~~8nDI;t^PFΐ3  ߐ@?"I}l.%(+PpSW B\M-H%srZ1B.ľ/&ۨrlxHtn!Z!5`t:y="%l'_-6wFzނнUNԫ?]FS X>$ ?TeuGhMNxEke =..3 lR+D=G=B9+~Qn^&heXFaaiAtuY9Vyw=eH 59E"Raԝcx+1SPy? ']h$_RJH@5c!sq1/CUWʻxׇP: DO"UqjLtw@Kvsv$w!'Iv(keᵄȽa_d:o*uMՎtf7-%x܌U!ڜEa=lg46f_@|,AX05qL#iZgA*diog|"UcQ)58wvhx[Α#]vEQȽ NJH.("& 7 x$V`O&눭%?>G6#ARbH,JMl/ y*72FtM]E\xz&y⛥l4Z}I|2!$%s|~_8IWB!IħEF4Tbot#s1c"0x(a:Q~9rn6+wrLx*.bg])"Oj+VI8*U.\ 'V6lxc, ]I8MJӟ|}VJP[M#GPSIۺ`mԟ\^"s?*Sx 7crHkXsSKqߞ[?W!$j:1&HMd#^| x|qcd5ȿ$KMHw, Z( :n@*ɔU ]:yRXė*З}BM }G>!| TA,)KؠxP{Yԑt9 A .Eޙj 2f}ذ&UY* nUq),ߐ,Äv eEB>d|ڑ&k`@#0@b]8 9{Q˂QCO V 4< 7z wG8ǦH@0;n##M/pDEv6fTN7y ƉVx̵D{ml38G^G8N=h|88ϒ˾)9PY}r3>^вmى{a*3=۞gUf*̖4* xE,fv40Cc";zŇ%ⴓgi)-|:bwiP #W\+Y<[ n،P"ݽ?Ư* 1dE[of>ھqV»*m`JU?o*Q֙Q):ŵn٘uXncl64 L5mA^kbQ@=L.dD?㒏~aݳ4H/t:7$;3;n n {hڕ'`n_<1 c7Dr{mۦPJ_q S4o|N5ܵ<)@xl8COOfGq#,&fy"CtSth5 7:a9/Pqa;4 :$!>lӵc3a4F5R)`n6Lڮc f.?F-w>?t^+N\˅ G ؘUXA \X_TYrn9Hb$V·HD L "zVa;WJ,vnZSvaNДTy "_|| ')^n`2|}P*v7 ь :\v)B)0$>(T׊B*edTQJ&Y.`Z"=;loRH [0NbPr9XJH?B*{xm <JA "MOЂT%p1Ej9N=rKPnb| Cj4LyX}]/B $;FOeS2MCMuqnC" ~:>˚U$Sp0Hn紀za ͽZ"{)vL,,)j]EDYZZZ&:>q-"GV: [` 猨: D}$xх$9f9?m>b ѱ{.C癮6IKG-|3ztrDRDi¯"%l35P,x R=쁘#e5܉2@Xxf#$qb3_+vnUzPF62;Ȟ?pj ngQ䪤.񼇬l\Fu|?LCγ<)A'af'DQ՝YG Kp=㹔ёbp.G/*`?n~kf})js%e4^ڱ8?‘r̓bjd<ȧScv\@.P#``N \\m ua≉۠4h>x|o9e KU|@+]CJZy˙pTe^%J&+y(4x֫ S@٣>hQ.$V,gD"Ao#TozEf 8 W9zQo&֕X%{9l*GS}^rbbvmM>ڭD]2@_q&Q(#14yHvd~ܤvlfĈPucF섳*;qmlg_jv4Lj;wH 'ۿ]s+|!s6 $;w`$8iUq緲ՓtOXEk[ e*1Cwf֏Bԇs6wiSt[كn̓;$@|oIا) YSVd@̲,Еb]#vUhW+u9wTiS{kbϏ9 VSڀLg }.wd8P+z_]ӘEeGl!gȄEf Я5~La=)k D5. SpqcmL 1`VRRqfµ.cǟYtGNKدd=d&s4Pa })! LF9IfUh'2LyGH /x&.55wVgIp+()(X^?ѭۜQsK[Vc7apPW[ra휦spKI5mAF{3A6[?߷N)Ra2do~#:?"0ⵚ x@SR4Ku Ebai,ԋ&3* qqFuҪ {r<uH\xԅu XmϯXPϣ?21ߝ~ҷT,h1Oؑyz^N&rHW@<;f,bnIWo=%'1` d'tQ&9שĊe`r?]DzcC]7G&S0vW ##-xkǮ UƩ6t~^9,a담s"I1Rh9yc)5 ?VJ]n)Qnk.t| zz5[d> 6B )baF-E蛎%98ךo98o~k-~`˞uH G*Yđ $Q⻢ƎrvZYASlh|6ftXW(9[#41W=?*hh/d۽#Pn[UIц"tmH_DHWzLg`8_DU[Z#yiͳf\ޗP{8v41;;H Kh<~l&XgvxFgK|tob,ȐB ӚUHq@d^ I"sW>t b4 dND'D𠂐_tTaU^lt'œ7G(JS[緈G{bߢz{¬؛= sUQ&*~6^uO_&_UI]AYE?A'oV7 )l"tƫ.=*TpiĘ' ݃4IW=ElDP;*!0b'X~L2Vk)>'H:Y/=2p&aa&} '6}26Y.4x. C7kwl%5ۥBB6V,xY*usۂWd;F7@e Β7U !q<%1fiKF;~ T.r<9f,DnWSӈ18 ?Q Jgʜ<♏(va"&u%~z 8G>Ti|9)E$L/x+6̧' 0wD e0)ҫPn74x`#,}p[- UMj~l#K,/4!5X9T䡳į ~…N4Y'anjd7G[]tQ.ZB4O;m}╫0?.,1QmKgq$ TF5Dq9OWh\wmĴ֏H\y )v= v6|C}?$+r|e[W\vɂ$`iN@@Op炣h^_Lb"`HZЁYX}-)@kA6+ ެQUtJ>˺ǷfOP}olr)A8lT^5?U3YWC%O`,$4|hu*Txݥj&SSVH. (|\Ypp@ ҋo3iO'ݑ݉vdJ2SZ+9>I ֣t귙]4M;V$})K œVrur):㠗(QqN)ѯ9; !L9c`Kㄱt:\/z}spOmOaaj~)>Yچa7j,5ę3:/y rT>1݉TzM}# -T!wW.0KIx@#:]cuAkeS)w}A8B޺*r4?GC|h#5zD,!(SkEDN/ !JJM{x(=.;ԡܝi n3!j z$; e+F{ MJ{ e%y_hrr.N,U)K1IMk:c=},]*ֵFMFy }0֔6޽E{Sy{ [uUr^ZS0LMCmrv%=HbJJ$To+`5y6رmm1O,bD YU#u9L{(@SN&$ 5EMW1>]KJa7<(_?̺7l;Շ[" sb7PQ7,KSRcOk7VǓ>i*Kf %>,ݫ, "ѠQ3O0!*Z]B o<ۑf]#Q'!!kWʀތkuݶ&,ڟK'w1|ae' )FڥIupvռ]x@Dd04>9 'E5DŽ4-a\LSBv:?~~qe"xŸ&UvϻC -OJb::oIUyY9,72wig&KO9Saoऺbu2Y~Aujy<uNƷ<&h\yTk! $ɍϞ|#,'h!|U;smLzq.ћ!<2w ?a0Ĺ;7ZVh es4v\2>h:RĒVX"oƱ~Qh)z ]>8\x`X·"U6^ L9ՂZr|8Z8\Tu0Fq @Psv޴E _j'y;tȎpAӛlm@ξ'ZTlNÔZPG 45]ٟoF2k4mbHv˓-1t^ 1PZb?r3c.)VIaY݋6SZ!kS~L2Y@8''{s1YjyJ\~L N^tB%F3aeYL*}<|:tŜ fyec5^Cci}~ RiXWhD"ueEo҆DJ &xԠXA+65H96MU dLhRl)dX5sMdUxosѝЄ<5\1 h["{odxHiޚ~0ΣXmP\fؙTUt\~ʦeD_oÃ,vw]2br/Io=LK{9GO,w qE T=S0x덈'Q\Ӣ?WHCEu&vתp?cDnP~)h{ \N.ռ bsBWW"$ԣ{"+L ]CG$y15&Lo*Ć"3sH8$'jI *)^Ϗl:A<-<%ʍcvOsϾ`dg<} A;| %[fd:+ҳUgK7j\(Hl~[/;ĔL=Ϟ;7siI%Lf+BQu^R^:yt$|/y8w:绡>>fAճE;I n3;݊Bfu 5a2hO fy Tr_'|^JP@g©p UwID"n,!g _݈e! Cfi%ѬhcI[5dҘUP8_x1a#".a'{)Zl=^+_h<4rYgqEPxirb`?͈zq P+fQ}LUNAI$+w1bZ׹vL~LbYM-ʶpdi dQTuU4Lj3G]FJhpJ,0"cև0}]%Q+oNfJVho@K,:HiI–p;D㖤iL@6LeCXuZ ?kJB[Lz5t2?A0Md& WmioK+*;euFsoRJ9f8Q6jrXlc5 {]븦\޼⇁Kt"ɡp];rnGƚ(]\,fӲKP֬EBVΏ2ԐË#aٷ9hn]x9a:O;&x%eHK)hIl/8W<1T1JwlS0im4 j 'Q}Q{ĖdzNr{1}8 яViDp7AQI.k \y0%@HHǚUźqA]?͠NwL<3 ;;d*<*F]C- i-oτYx(G{ yj. d7$GѤm&3mO?%"GX!P0`ۯM]^ Xo:wn%n]1aE:6پ'3$f-ek8Uk"/eiim+]9L"a"ywHa [8>& hyv5S;كH3𧫠g i`܄hzO;0J3ffn2Xq}j 4IHo3qVOgZF[.kV-I&M9f_n`aۈXQw*m2uCd|HP:g^U1Ԟҭ=3b!a4>IRk\|5m!2CZƂ?ʍiRƞ%{.a36f6鷖^IQ!WrwN`?]9 նAr_^ tҍ))u]>#DW6,^;-Dt)yE?lbk52Hd,ĕ[U< R=ꦜJ!v}oQ0jW -̑sh@# Rbs9H֡ H~ I,7s^S_b#p:-+U -%; 9wIjia.ۛEخ_JHf;@5[8)/PeP¦On2TkkOu/GPElFd#B4xq1zղƬP0|cH%[l`3|-q.qU)d%Mr0Oqa28c @15rBVj)tnoobd0Lؔ28N|"-hb/ LIR s=P1.M6/&\: cM.ZvdA[Q:|ۥpÆqq ɥ<9YX@\f ` :u/ : 6)ٸQ^#vy[ndx%NrƝ="gA$!л>Ard3Ԁ@*CqMMv;+J枱U{_8hk4`9 Ŵ 䕏iET=2U;s VRZz k,3ө'-rjf?xUb*@#A ]wMq 6*M[ ޑ ҴQ4g.{8b*s!ZP3L}c>Q^uI?Sc\"&7WGSV0yE9c2\ ?gdhyzRJ@ N"[ccfÝ.4GIOBA_ae*$r<q֔Ԡ Ʌ,7sT֐ ~K OE_3p"s*>t dW?0nJc@з,%Qgx!Z#OC\YzT,tu(q~MzL'l0:O:HƁ2+ĺǨܺf:Ɛi/CEo~\X҈QGc #@ncX$}Ս|&5:w<%ڗ \ (>6\~\$~O-ӕn(=?ꂔer;a4v8$TPs^1ƥ` i_?vop,b2Q ҥ<;ct ye/滶=fid_wgus@^'Ԑp90Yѱ$ ~pVvn3u &յgYWn)G4>_X[qUUJ)icͷlTowR{EBjEt,4E5xMi}>6LC0DK zϴL'Q=\q^-x13ȶn*6-ƛRrQ;op+0~ 3B3WeBQ-Ώ<{7fã\N>b[G9NPI#ʇ]@և۴KY Qc0/> os3څGCSf\ NSDp / ESa_T0ƮR0 zΛK?o`ʹp`ɔ{c%j4gPM%RKY78 Yl-Ɩ/$M7t Y}3^ү:68:KM6B! ]l|#i3|6[hEjHLzTX-IUjO;<ȿ-K^.S|-ڍ.'mהj+o2q۪IA8[AKo3:hxިu*9cuՊeק{C: w]z|'Ut]H(Y7a&{Pl0$}9mF&GFiJe hN U:;2?OwB 5W]T[?}h>wD.{Wx1)ԃs+u:FSVDB⛫-D!Tz"VY~a,ʔpe mhO3OtܫBy-" endstream endobj 72 0 obj << /Type /FontDescriptor /FontName /EGCQNX+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/A/B/E/F/G/H/I/J/M/N/O/P/Q/R/S/T/U/V/W/Y/a/b/c/colon/comma/d/e/eight/exclam/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quotedblright/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero) /FontFile 71 0 R >> endobj 73 0 obj << /Length1 1754 /Length2 10549 /Length3 0 /Length 11665 /Filter /FlateDecode >> stream xڍP.Lpe2\;w k .-wOdwUT|Ov &$ $5yllll44Z`7_bT+ Ad,2w{)C!w;'GW "E e(+*$lc?zK;??/qG P6w9>G4whB- 7rA/d$zzz;B]lD`7[.b2VT-O&x8-Ag w)PuA$+I`u6vVe򇱹%  3bh }70;[< #0.\-]Nn`%y>ei$qsEd|?;kzB|`"ܝ;H^/ʳ 9@^@(+q:A?> ;ߊF+dY ?70d{=vOe8xC@9)559=?+['!prX8\^.~{Q3?k(dO? {v߾TC 3Fll_ϓ߀MH5yfݞ_Yen{ q2`/aS{Vy,oCz^) Z0n7* qps|؟W ۳ sN ȿ2sF:ٟS\= nρ<Ϟ^Kw |)D]Z Յֈx O3,tc"c^s7؍%M%DSRxkzۃiN~xx}/ )خOg_ {O/(;az~-66[ͣX>cT:CS`3KHB̈s5su=7DȄwYcw7fk'k"B2+IZTy-?r#Q(Mv{|ףh@aû7~ȧod%wuzu :BS_Zb\u?R,[b}^% ^@ 디)nPoOzvXPjm;b'^TD܊܆i=Kҝݿ ڻfڴj_ o$LuJʕ;!쟬)O:]g,ߪ9&Y~¢luH%=?Cc/PN͘<%cdSGz,ݦ0H^`2#ViYCjmj۳53R.; _$YR,`fm'|bдt׮¶|'P;GG `LQ 2phԇ$9'Jvf(KcEd_);xXxp8A 5l|:O.QzɁn~%me}UJ3+=mN/eˑ"3AS:`]c/՗XdՕSy@Gxj0^;c)r8CST1WU" ֥c?HzbHg`J;J߫ M_ӌ4U1]G6G(62A b_]+|Y\5_qis3W /#x0%{AGfά31_7Snx]b֜NFRȘOX,crb$2"hhZtƵSlKKs蛦]щǘXE%m&Anzw Bt´2*Be'/fCNҶoy{fX ըj%P =)i-Z!泺/;mJ#DM[ \ "'j۶ė_6M¯(_^/jKEfTF31.vMy9~έq!7"zۡ*tC҉J) ?nV,Ug?y_ hӹkl4/ن#A4*m41Q oB\eĸ$}PR[V9u"Q"H6)E/Uڶcස}[/1ZHAtLd#C)ocJ3GXOvӳp NrZ= 7 SuYz`iyzgDWĘCe!ʀ;|'EBl+T.-ɑZEoVйpp+'ʯ⣅}u7&1+ESs7K\b(ɂw1'wy"DVg֥b1":튭4CQKIo؄ l4W`.=۳ugY0,%83%ъFkTº#Ӑ̬ڥJ_b8ǠLE?SڢR 4!){rO;tPYB Vh՘l7O3&LxUܩIww:Oınx^9wtpF3vP+9ӳr.iV1sm/^+q~etnkG*^<4;֩:P o@7tX+-) o\VTjMSq; 6?ެҀ O ү.<9'778dqS:_釼[\6{v+9@[cʡ,K@wbmtX&[LiU63[epw'mC]^ZT؏ y Bיִ F6jSϼ P#D ?|HMyXGrVF 7}LԲDq'MIijdQTiJ+Ͽo_=' _kB?սfVaԗV&c|M(!c"8lÕϡ ,Cv@~@DM;\M'h 7N,5N,1b:{)*\Pp"ynSkL8^x .u0<@k}oќxD,[K&)$4QX YCQIםenS%8ISMaZw-#RmӅ7@;UהYPNxg_+Eh޵R|: 9w^-Xx Rx.cibpcG߄^}x'23t >'k H0۫czPcSVD*r)́("x48L)];݆_Xv MyJhgQdY5z`Yzj Ջh0SjރD"F[O+ (q)حIGqNmN3f̲+'6Z$p.*!_w3KPZjʼ勉_L9F"}V֕K~TI,ƽĦS>)1 11 ?-Fa{ՄI%^NJix%|Ue%x4TW!amʝWC0&eU*Hw6]ijMi*i76录uܵΩĭ_bNBEggg6`}S䛿>-;Ӣ,p߯ t2 dFS e& 6>͸ >Ҕ\ iUWBOC,Y1>VHۍc'50 lKC)%|L^/}0HVClx!O:Dž$fЙɾaDBoY(nV!hNwمAv]6()i]=^,JFHO9qcʷW}B,r7([!Z kMdW|^Ol:Ꮸj/S_ov+] XK}~4RCXN mSAO9S5£ȿ`RX/ GKd]i< CsɊZЌu;*ۢ `Ŷml|nn06)d^n5j"܍R n-zRx\^3Q~ק87מiұQx0}iTߓT)jk ^l}*">̕Dى] b¾ĵ/4;) ,ܺI!ռ(+;t7Pddr.CҧkFϐm.\+lIhT4ѮӿAIsImո4Rh7F#I|1 n44D3[K,%^COxBȵ_;HM!>02XO]} ;FE63>ڧFu\%"ZMDxbyF (fb 3'O~O" DZ'iwJiFO$Gu캋$yPGiHLX]#Jp6a95Ib7*/ F/" .Bno or U ef?2ts5 ʍ)%i`d`ێ`zvITj:\(<:%ei]!S宜^!Vo[XS*#."0[2t\k:$U=-JѧI9ٌ/S>(׉%/;/t `ֱxelIJ\ Ed5ߚ9ny;el_JՃkU@ Q-p5CŏoeXoWbh-Eè(%k/m.B7H9l >*Ϩ*X`eVheM7YOV__vб+Qa RX#Gss{<}&fF&b(n3T /"7Jr2{2tzc0Ss;>]gʛuX[-濹6ϠiIO Vx䓱-ގ[hMEcq't V^S+FB=Dęto"k%#jgJW'n|jmghW +ޣIé`Ǐ`iH *>o53Nh}Ek̤BlpEןjRr%@Y<&,oϸ-tuńۧz;8fgnBq4'5Ay 0.;rU2* gxo gܯ'^Q(B= ;K@ k.sc$]*}O4N$o(b& MQFe&$dI0f a(?cIFePH6|0SNnFP)Ec)F6i*Lq;| {`sGO ]+{}muKH U?' K/R-S7%cs/\Dϧ4О 7FZmd;eRt[XLX5I! V-b`7䛾\mNL~Ly=E}, כDG؁[66;L /pP7ǏNr@A7.jP*j)KETs(QLër;X9GG41iP mkV 4tnUo^ ai99q jk?H^eC{d few\ɒ`jVtϡ'<;sbPE'tzُ ^Trrg=dxJ|ZmWz])MMsnRq*dlR:eo-Ow{QY\7oS(a\-"[.R" 3զ5SԎ c9pSi=5;xsJy /稑z/{幟w"1αB7N ڹ(F ܞguU)^z#wr{ɡqSABp@pMй&0*|*trsU⪆ Vy`Oث;\T:l0]PR#2Gȏih0[ܑhFm;3M9-pF[ouSaz)F$,CEXvY^~Z.%[D47?Y[hUpZȔAkwöcY71%ື%1D52v~CbT+&%=<"wYݠz+X~uF(P렐׀ZmzC{t"Y^T 3ʁ[f )>2t7K+}(Xne@Ó9XEi{!>r2cQdynNWg$U)UPJ,v1==7Q>$nQfͼζ=O9+A56J>,JQnXDv X7[%U_Ŏ-u,04!WG .V)܉9d8ӇrK͑Ps=ŅZav vTKxgIKg#O~ayҧhGlD wm#*~4g &?<% 3(uUl[2'7ϲ{p@!ZWJvڷ ӛ|&ƘuP=:υs {0N32WB~d錸sI $_ <Ƽoв=4Aŭޛ@3wF#2HeAohV=S͵58G1WbŠ( SY+a fm~ bҖ].7G2G/Z^-FGdž\n9 u"#ˈJmNI=ߎ(?F3yՑim]?ܫ5 %c~Ob=r('#商TGLu}iJ .hg{2"r6ɹ"Д=+oŵes4"qCi1֚>6?oBz:y`vq򭒉(::JT S2+{7d!LJQ(E\8 dlPб{;_ jDar?M6w6$5m?drF86`|G2UKbUReg`a/S`yJԃ޲O;͜?j$2 bPqpAYJߞ[/ ~L |~fKN| .y9c x HwU;Z|߇R(̞fTf< \I|,$/f<# L/WT)8Q>}X]-[QI$CˢwjaXxgpUG1&̬#G+hKBic& pTuJ׷ҘNENq8N@4mBŧ_%$ Ubc- 2z']" |'Ɓ*n-lG׈ԭO›FЇ}P8Wgjfgu&2*gIzEԿGCW6=,N'QNnFCR}$"u{.1~Efl}LAE2kz3&5,izτc3;*z$̡\X3Uen\&a dv_ꬆ#..)X[&`@yOy^hkmƧ dS<̻kb{ٓ Rxme[L|zDQ]r_g:I0FduK2lQLfh׍*nmTyx`S%[Mv̷|ﳔ:3avΓ Iu 0"IC[oU$gdH&%o2pʸR#. ?S5 pWH1d񓄰O?T^kiy'uNN(\Rz(yA("bH9rƓLk{:jseyϧW*V. dY(]1qwDM=P3Xk$&D3gT+$P,ȉ)pKSHFlAWx19W>tV]RTxBRęx: 5\/QE͖2u'~*t9z>ۙ4Q8}bc(/Ah'7tjI:#ڮX+b@bc6ӘbwU*gY1\ #a_=n!P`]U.@kj"ZmܗX˴h\n ik݆8Z̮#fCh~ >?Ío;w5Ռ+VA-;i3ƈn Pa*u{xcfq88=F@M=SIO4yo]k43]S NI?"w?.YsC\rפb9QW%qUm ੰ69Kl(t$Rћж 񞣊~Q ~Ռm.!^Ds՞]ut2,446aþWE)сKz M&!RXW[uHH8}lw%lP'\ =P{g˺#D X.~po_lT5EC_y=tI~ÿ 5bbPSɂnQ7wn/ǻvh_s63ۨG z6pY IFU2&)LI7&#}(Sy]o&\ 9,) XïTs5&RUu"EG*yekOe+U>孹rʃ/!%Neg)wE'uv`GX8{~k!S=] U߮ܔhBf 2R)Pj-`5A'mŀZ{1j zݝB$])euzwe14:A?sF:1 rc\a { ֟x ꑴ|zPw9b4rr -&͖Hσrȷ0r<>4|%L_9ܠ:oU73G8o'^qO@+bUHxZӕ V02]d_Wf焆g4*$/5n;֕z-# YǬ7EC?a!':iˮV4So8k0:A6%Kwx܅yQXc&[ (rxd J57wFBxZeKZ{G4|;:pK< aPIp;Ij/ЕTX^iU5^.VtshN86R6$ endstream endobj 74 0 obj << /Type /FontDescriptor /FontName /HDPPHX+CMR17 /Flags 4 /FontBBox [-33 -250 945 749] /Ascent 694 /CapHeight 683 /Descent -195 /ItalicAngle 0 /StemV 53 /XHeight 430 /CharSet (/A/C/E/F/M/O/P/a/c/colon/comma/d/e/f/g/h/hyphen/i/l/m/n/o/r/s/t/v/x) /FontFile 73 0 R >> endobj 75 0 obj << /Length1 2575 /Length2 17102 /Length3 0 /Length 18598 /Filter /FlateDecode >> stream xڌwctolۙƶضNl[ض8ii&iԸqr{gZ32wj"f&@I{WFV&>:+ R@ tvrKFh DnVv++7 Vf&=R4V^^nDVcWKȣ-@ _&h,]]=<<\-hVU h6@OrLuK+]=hRr7:@j2%G-OyLoCVR665us4[JL c{߂ƶ. }cwc+[c7HA9'CSg+GW&+Y26*w|V@SP彘ilneof;37Gf {+'7@$?4 +Xijۉ#_LdP~>sP*@?+s puvo 02u-XƠ)p豀ϓhm̪ʲ:$[T`dcgprx~mH?*cowBO -m):3,,/k[$hG0 h\AZ -+ͬ7W"fe7Ehljj17YZ\~5FV횩 8qMX@*W {S;0vv6B` ''f@3e0wpFZ.NoҿY0Af7+Yb0KA r7YT񀬨A +;Y0A ȃ? ?ttP\l3"0q66]"sGdC_ 8AMlAsO)vv= f@vPlmEc$/\Nn*PVvpHE-[L@r%YAZAM 'b.Pl/>z :ٲ-ӟ\ۻٙ>, tD3; d/-VVP #tg%/ßr hWb7f?f@Uursp?Vҳc7UyN )(6[c˿LB(fvt5]=Rp Ui{A*{ doWu9; t*כ 4EXYr0n 麯!`>͍!| _Ϧ'%G\yRVR<D, h7,f(t$)S"%AB ^Zޑװ_:BbSja?`Ij~,<TWYgOC<@-hqiP3`!L „PgѲ[}|kyDr Agn([r[ǭL]R5GI8\@yi<^I#}1K R?)d@)ees;Z|t@i! U`B1kR0OeYqg(v5 'R6m >p5 ;]$0k r8$q1Aܬ<6R ۽? (fxjԬUPTluC֯jAUlP ȺV -&1Ӥ2ғd_t~Z([ke'\iD y syݤe4Լ7gƦfu^PRBYec@B8<Jm_*!WK Z{.mvT ra2YDtn7F5+&3C~a&Ê#CpEYDQ$CHݼ(f$^;lXBXCK03ԕn2 < ه2|_h1@͞ӫU!|׭tΌ2Ol ƢUZY&o:E,OÏ?145⦙HWn(^n*[ nXJr66kB9!ܢ(e}{$%y}jyU-t!$0=5-Co3ǓGjWT uO_[DaŠ4)}2Om8#sq5jXk=z\%U *XG3nAޑ)XYiyp\`8I7SUn{=- Rl.]ϻ_PyO8j~0-SMpJؐ3U؅Wڅb9%@ri߇fE*g4rm;xK ju$c,51X<+v4X7[\EVP2ѷ@1h.j,֮0@1WeY˘)/N]Gh:`n؁=T'u q~0pOO#ϼ$HH-:7iIa=R骔gt*_hχ 龚(/MeAՑ,ŋ-Η*-޳J3xCtS=9qBd[₵l?Lx5%|QQ@Ļ#kv4KT3}*s`Cʱg4m $&#\-,g @P_CcP $VL 17SC\n젞m?G7lD**4avŬw3}^zyvF4$SyuJkZގnʨ_\gvmoG8u`@͕gӺا,QwY -m\=#b~i4f~߱C.}ЌyOSy^2@HvH yVj ~`j3}!eF܂̑^MQEy@<=a̹E >QڐcrrpS-Z򃡾IUqojdcea!:W|R0Pe ?ɩkˡ ])ZCg cƳRG/}[V6UpELˇN dfFbOHg?,;E40L;`s&ԱKYVٯBubsS4SgVq n9U]HTVV+fSثɯ2W(DƏơr*q$O׉ZWЏ6ɤj* MN#0w&cOE޾}!k0 #357h@<|^V ="Y%MtB_:¼3Eڝ ^ɱQǃ銏&݁Y6{=<^덵x?8!VNLI9DƝ>V(Ix*0wfܝrqәZ+ i1tގgt9Z"" $(0v_l=aǰ17±eH Zg~ƨeAKP7/9d;dՌJ/`8h L|fq$Wׄ5gÌ>n}dD5P]nCdֿlRӯ^ @$JJrF&@D!:d@ZMUH޳rJ'u_ ţ-~;/}Jn~:)*Qʚ:uiv)Q%;܅膆x>Zx{d~BOWJv93x/b\nM*>RX7 UXN_" ?@ Gp5.'L<RO!< MUL&Lzѽ޻Ŭ|0mT{戮r_iv5V8#aD8^ u~Q1@Ԉ$_-Hr|69l*`aWEXЗ.t%?R5л'VΗS׭ETnV?Zٳt~~OdgAvT%m[Laqmm&_1}abg3۹-Hߦ@qKXjs)P#)wú>'?ϘǤubXu ̧8}2E~>7.lUX{^`2M X- vD9ҷ-:˭QIܘj\j{v3ov]kK.4[ATE}/yÕ釰=ɝDg/{Maս-i2B;9ěx(ߚ ̝1%>C{q)a$n;],|MtcmprDO ].NZ-r+%ىFAl]0ju|8LN9Bb Tu>@[⷏˳[JRP_"0xۚ޻"G7r>fw2FeC5b(s Wvt̝yGΕ{hj a.AQuВbbAQe9SNd@BQ,Puj3qeӢ-7 "> nI]Tfd.`3 7dɝ焿-'(qrCބ__5{:+":S.Nj+OurH `K QSŦ ر_;CIշޟr ln: caiTs UV=EBt~QO.kjd*DI|xng7r#_q.<gA i,SA_/+qh?. v\hkmDC|D.R[ZXeE7fqE 4{zhq>G:V}$\==ࠕA4]2߰ȍ{P.{+WcZ1bM)Z @L}x?R*~6sPO_djM8dz7%k0燱H]y#'\eG)" Z^LHW#OSrN.p\3v2*b2mn:UD,$6İiR* =/T)R5WKvW6mD3cy":t"# :9ŲOt!a%e6n;g*Z\lzMW68[, 6{=KbݷKSxoz,g*/ˣ^Sp;41s\Ԕ*ݝo%/٠#}o8'5Nł2@ZZOJmGxGr#IN@ܕ_fyHa4SƐWh‡g#vX=P4 touGFs8FOLEj}1ᙒt]#4yrup'5yi"h=z'0.)`+8w/WpX#"c%_Q7վ#$FBӳ7$rL[4@W-]2 kI)>;q&gMi<mq╼g7O#RLדVrV]Rn \!3Z2*aVFTn~5e RL3̬wwv=)Rju]ðwB@ %_Y/ӃEf$VȤh}șiȳ8!%u\&`ܑԤ3ӤaMVm(yQᅫ! Q9źbV~9r] %w\Z要 Rg)8ħ>l9&$qfˣapH7[_U>WxDc('\E/X8sR=RJŇ,_s` 7ȟE]"?u:J/fB Gb+f d7Ge(~nHmd*AETA8 jwʜn1+(#zXJ|C,_zEכ|$#lf]2}01u@5ya\`y]u(0FcLP[20S.=PW @8C](|k8s/Ĵ:Tg`T6b} S*f2^SƷ4lYǮͷ--Eʺ4'.ż'*5 ]AA֞|: CLAicL)O$4_uO0 _6o%n/:Q'L CoHui)^@83sFNZFJ{ u'%̳;):4U&鿪yo|;D!mN[m?XA4+o0m=ގs{GORJ aFU:iwdKݬ{TY]BLW;r^y^V<֢J!VK;,qQ ,/ m[A,a}=3 QįP^&*&[.b O.7)0="v4YbC%;82<+íM1] h`^: x2R?f.~Y 11v혙[$S6kJ}sC٠>  06|& ڍ;cJKO!7WEKPv` I_UǨaKX`L&,]- "9hYFI,\Qh:@9tגeK\V~*&s₦O.t L4=s%*1ǡޡS6=Xd܀$aj*tq r<*WZۃ_BXc>R!thdz ocxx 4En%'N0딹Y0W]h7X]A?U~Aɟ~ԗ4`ri[\B~&҈3wtȯ7b{Og,^PI~3fl>/1qنT&eJ6ISFcȴ v7P*n?yA("߈gt]U؂2}o zo}1Vùi;„Xɫ]J1 dk5QY6u^ߞ2D(eҽmyvRX,xo(x->Džtz=]9Kr#12-n|ůhB{E1|MU,[T"QP 8^Οsf/Ys F̡e;vC H4\:R\EߺF/F-O# ,UR-v&hK:yH;-zzʉG*ڗNaFK(yEyYe \֔C0EFtlFJE j}@*}[Dvgs&("ړ!v{IɁ0+H:W4!VӼ@(b4fl/!o=֡ 4Q~G ^`4!KT␳.O6!K۵E!M .h7M3#C aLrJGIL{1e{|!{d͟1g<‚`#-y1hZÔK9$p+}JOIəxx G'EKr3Y•m|Ю75 FņkNIαx7!־i孛kF^)HρֶsVj5/3KftVݏjeyWUŶZ͌)0d'"ˊ!dg֯ݼ^~.D$CGMBG{tqyp \ *yJ*>7:{,ġ/bHn@f)9D>OP̫b{ ,̺ɘ;;8*z;F?QAFQ;>춝aCus[pG _#7"٧']vnx#9 +WH߇Udkl3o{iɟ%Ws74D1Lxhn[P8[0p&#GSt s[f@'+$^*L:Û4 ̵1NJJ=zc&*:hX,x:Pmq“Q 3F"ws"qѲ﷈|  OgZdSzd-ޫ'K&1jϮ{uXp K`tU"W}z,+Oݽ\\ҕhr0Z 88SX?h1DGZ[3o1P\t Zi?Oq l.];C"OwEMCyyprJ 1̴gq4v=*a'i q/Bl <;E EkkuP>Jo\6޻}Pr|Ҥ LW őe,sEMR |=̯.$*-Zw;m3Y}7#p1ZN@tzۇL4⿷$׏y@q͉\ ? G5hh{Vq^*1\UqZ8Wx'jn% ޗ⡎{)pۆ,A[6^YM|x'NF6+8`:A'VQKmɫ#598?@:@cN=T]JI&m, Re :S97T nHMiBыj|%t^, bmt; gm(qfjE.GE36=?g?M*$E=Y N,&1>'C 1aQ6m4qǝ3o'YzK 1̩xs׋H7K=㐏He؂w8as_-fVkI%M>k)Kl\Wz{ܽر:@ũQ$.F"[sLp37&n筐mAMDjeUd{g4F:e|lrt{.#C#_m}Ӭnz#Q:+Nf$Zْ$W5T1 M}s}=X|8J⊩ X YŠ/ (Pj]и, z癉#lq'Sz2('}/<۰0IG #n8֨X֥gT&ހ"})ZMdᎬh4]$m5A| g$'Y|eV61/@TEͨtH6n QuܹidH<:v`l߷| :$]}\Ԟc2_4Stu`h6G倯rdd_/}qr>T=/'r6YނQj&lޖ$ώm.6RQܓk!xg|u 5j=ԙo6cmNm>EGgbe/),nsV`X.:{:wچ^>"{[mkÁ/2s:aFaI+;ͯzwR^(HI%\}e~pg$헡P[\Sͅv@M#7c7c dHHǺж'|Z&RRlDmioT(g9FL8τrMRɹV{a9.79QK(RK'5GEV?UT_m`hT bDD1mTƵp \c3A,$vE)/bp }сPrh1*vu ^+ :wn}8eF _.DuT=xZ>9,Qqa < k"U}}F@t#MQ⡣FAӜ]l1K?z Jk"cqsd)^*ZlFliY–Aݢ1OfyV(U- 6NPEt#cr SeN#q.!:5pZQ6?,2d3D9?d#>X!^Rxe %} rK2g}X x)\bNm$Drb`yC.˩V6v\w舱]b vJ &m8S Sul1OCpPM7lvq(|^}qpy>?JLDדXM̀/ 0>u &7CuυAF}\%`V良I\6{y%R`ͽi_J{m*KPޤ(V \ ߌi`D4!\[ Rտ7˓Zmb!܉;dFAVUuv@fo8RPJE7\}=)B뚪KhJZ1 v3Þ/ƿ|Loa(=7}!L,$9}y}Ikp^dk՝VIUf<;~H(p`k5&der>VmQkMuր>d{1~DK;~Q56RNFs3:.'^Xv%wIP^3IGM1tOos+V=n,Ĵ0u,JncR($%`w8bQB?B%  ? v,Cį2@<٨ PxDii*8վ}Y`J?^sFW;l?]tk+pB)w:)N5s}il41:;"{3f$K3_RA+͛2ëN Q9SWp %i=[*6+KBf*لIZwfh# <ʲgN@>_"5K_/2OIݴ[tNt V2~i4eMՙ쪶. C`|1Fn8fZATu~1SG#'lpc^ ]Q+u)IYf$1}ZQRNtG5yP ui3h!t[(wݗ.\v p;B* $'x#˝? #dR+S7?UNwS;aOYH܁B5fl|QEEmYqq+$Д_:&b@$W{Rܰ9eSUU*ւ9 cyAiِ3h6#}0'=՛U$BIYkn:/ؕsCN.W;>,7o"F52_G z)b#=ʉEk!zU,^4cHudT^r%%>DTiG2IovNflSO/ ;h7ڀE^L2|q)r9 |qX  }3n e*)C4(jt~ Ñ;S=_&tLciYSbGLz~#@CW m˯/Y)X8̧!=Aﷻ%;cT8i%[Bףx|ԓDj8+p\o cSE Y(An~exFf!ޕŐlW!Fq緢Q _̜sf"RhXCl4e*|$rBuܚsqc XHnL~J A&C:p>4e(CЯ?i8'MPƦu7v,/}/[̪/ swRkgV:#D'N}˩͇ mhZVYwK"SG_lS>`]0p.ZMos^s6wb\ :bnƍnvBd ռ7}o/`.J;]D3]:F5U's/ۓHX8E&݃_~+>kZI1':i/c'70,,#˒S g}U=kJ4HqM)Y([ZtԜ3'u bݠ) iTsM:?syx%9Y[9=|9{mHl=N}yaI CqV40:Gϱji:|ud5WM[8_>l9;15'V~%k ~wS{{%_P@ +MMțqʠc C E z}idO#ai4CM_ްݐ]RsLs'JOeKˍ9V?P=8h{*ؾ={0@2K+@:%M,i7qauz)Zb|U^ub~/m6 3V7 -xbg &\bjΚp(`LD94 8ܲod}*@>YDN]m1zO1rCԇ+SQW@7jLĿſDM@E 1)MpEĮe\T -5TBrTKS#h#DГaůY_6 &xwe2Z_W)m/VL欥\'L0`upHK<:GŪ|SdCv 5yUJne}FR3ӻBbp:J=]K3`@.뽗[JWP9BH6= T$Idt[K(\=SRB}˱+Ez%~~A mۑqcmo|Jx Q>Gdky=#o ,RTsY1ܘፎ5p'WXnoV9tjNVr3@j !8:cFcez^9*)u\2SQHM#}[+Z]/:a{qz) 5RVZClz<8PQ8+@ۺTAX?G"MDGOJʠq.T6H]B +|44þ=ȶ zYZ\FHbp.S~I.TݸsF:ɩCo!ѱV-Fm@Q98ֶ* 8\Y  .eݣunٝ!!^hש<&G.tI^b ൝er@G# =Yͪܭv2]O._}&BP{y ti]L\ _ LxFb^h! a)i*"vO::RDj7.|c]r< bއkPul\$j@6?& Νc+6M%o+;%*]͉9 4Ga%,z]~G.9nWpG)BȹOh/kY䌰f\^;yNwTa?ĿPUCrDHX 5M Ef .IϾ!i(`wCK7?,v(-ZZ#$D {ꠎ.7+ o|9s ' Τ` $<c3tٮ0@P@|MVZ88_<35=pnj% Z- aM/> endobj 77 0 obj << /Length1 1745 /Length2 11648 /Length3 0 /Length 12763 /Filter /FlateDecode >> stream xڍP\ [www 4ҍ,@]CpȽޫ1瘶טkSj0CL233; @RISƁLM rǎLŐt8ڤL_J0@ ```cpqHJ,L- pYZ9_=pdf(8[^+4 f rv`eussc1sb8Z3@VuhcdXV  g7G ` 2^C\@Gku{=_&tG3 bgo- [ @E=3l oj51}%ٺ @F\ `:99읝X@G, 6N'r>wֿ q{YabϪ9漚Ylll|nfGM{N?̯3xCc}@d/'W o"dvv9` jZ_c{;*꼗g{:%$ /fN37;<&`'VlsOˮko.eȫrfYSY_;qOob\-PR?Z]%9zM^Alhfv.6 ';\lfjko 0Pybc?%3yE^ C[Wl1c8y&&lxn9O1XY> # `JXeAVU8 .?赺kk/fEK j|MoklVk%!U1^; R_p|-x's4sqt|\C݁fȋs3`qb7q.+;҄jBwQ 3{Qw?9^ml ׽ӣ[-L':wS5[6]M39f 4UTZ"6ŒD!qgUI|irH*sx7տ N|tfxu$vCh< &xDx@g4!Ԥ>ϼwGS'c~y­^вx^;}5;lZJGgP_jҳn9203-5+|l aU&:f;8'u.zhwH&u;∯Yo_.Cwf?(| gKUͶ$2m:!?z|nju!ōQ=K 'F^Yn5glW[v(֘;'+ cwOԿWY4'.?ɩs߰/#AUhILVhƇV~(oMIK DQj޾m*7zBO zLݣkN(*ρteEaDef:XW&wD)1ADxoV qP.IZoNȧ&`2N˕@C6BzVg͚}݇(^Ka.\!;8À7*?1nҎfx1?$mM.n@v*Qj0o(}%}Y#yRl[,"f vS\8 Zd#%zҊ3kL7B)`,tDr(K&3n,Ȇhɏv;Qz wUKqK?}$N^{ urZJ W?wY@bxb\}cV8S@֜+  P@.nW$Pxtj_U:ʶ#Lu#(%kM;6oKZt?Y\mgQNM N3!AwGf?\Z мYtt]E '[-7~&X0r\v5 ioBM^XB|@e\Fȿ}ޅ^u],P7n KiH9˅[ͲC-hF/ހ+'t%R w}cIudZǯ]GPm:g>Á0ai-񬬜>D) o[sKYì"h;k8گsq߱zMϮxqlXͽ yWn_GJ**997 _+{!Yyj]m*䟕oO,u-܈v|S+ۂ$>"I!8O/ FYH IF~f}xA}l;>E =t&tS &6# ;3XH\>BgKޒMe.x2᪠Pi񑱜2yrb BپTqpۉș'"0:)U\h\r]#IKxc2D3}i1eCMFvXDljx"V.C̎3Tc0L{6X=E(ƖSF\ntFH^iԒ)zHrԝe=dC \"׽&;/~ SKnvq(f򧓹=7 7+Ju7w0G[7nB|@'i&}^Xϕ GRWp}-)|jwuY<<-v#=j%9Ρ vP<Хo?}JWV~x)zowhC,} nC`<&f)94DrrD Z-i,ڀsݿţx&"p갟 fE_gW&bddop:wDuk@3UD t/]Y|>=umGe?~ O9koşLuLU$.g(~[kro3H>2隁y6z<.E`t0L}$=;ݱZdk;Ju4DXC?@d xN f: "NXcSEwC`'ZuACH.`,%;S5NO _J1eGoh]`%KC Ru:L tȫ( LT0۠3+$P0D%j_LLZfp^jksb1ЧJ2p܄>DŽah|ZJOcI~CCm]L؁q9ܭdci'$iUslvRp y{̍35B \KaIk׋C`XKhHWyaFJRb-`gq7> /M.#,lI"t_#](<^^~WH C1N)-$=`OIY paٮbPzVj?R& ,-JZm[,A\w U>'1):/J =rQ1K:<9x-iLcF\V+B4DImp{.o &#X蛣d|u#9a+^ygx)Uhu &ѧ~P&J*[_$S6z!,[KhƒrkftnƙT+nDg˒"j"R 5J12) D^L=kCP4UnyMY wD-]0WȚ@Uk}׍Z?q#DzR¥ s]$}m^WB;ze\ ##L^LQ{MF,f1lFhtb`deݼpdRtnh0⤂99fi4L,RN"=Eer8Fm;-|fxTٺ.Do~ N%R.yLR:Q#Ъ}`}CH糵e{iсwqDWq3xZ0 ׮GUz׌uhwr><^BܶץmiGJԢ'>TY ΄ʑhk̵꽈ĂhYqmirTQ*Լin 7]L4S\j"2E| !=6wh6Pj^ba5bNhus{װBiq|k 髝{J.]؞S7>}L͌+.Zo7 #9\|-T W4f ]uU R Q嵋P „ '/nrscPio~VPp9WкbIҺȢIU0k13[MCQ;)b\zilo;;i=jF|xGf5>%ؚ%TC9]o)b)|}PqKV:|M(jH#wD@h[szD?ܸ<z^ =6MeLv%Ɵ5dĨɐWOK**:UgE'EVG}2";3~,rvずOcKicͷ6ѵ Y_p yKLdZ"I*hl=<FMief «םˌ8 3~m ؋yv?Ob}Q/§ұu{aef/rw5p܇gKSNNYjY6o0>[Ei! WȤ2f mGme f}MEptW[A/'Tr!7x- }$eb#exx`1;^ e!6A&H0RQtYQIqf5;%]Be0.Uq0%\ v*oPsƙJPJ9V&k+9N7Z;p%>A#acjh#5Hw_Q#Zo0rBVmlBO"+^0cȾk,wSmi$AH҆\c{=91tSX #oS*O.\ "u,UmM$Z`15B")vb)UD^-y*S1t:}3?o~熐 }ӫo~a* SNg6 bg?1ę ƫIf€CSQЗsWK۽UӅfK`V-|mY.g$WъTiwF'tw#DSa,UؘI8⟦}L_gf[rjDN=oKuC5^F+|Ջx@c|cۈY.[XBA"D/3ۙ>7&(f_\wDWlvψBF',\$A^\O7(~ ۝LMs8|Bv. _hu|ϩR޹c9L#Q¶V M"!y&0ׅ >rXbpN(!aGyo>I1 KC+- WƐa1ʏʬaDg 0R5}<ԭttQx$LȞt4ZA$aD>N5rq-E)N;~ =G^^R#R%J]<6eȏŽO+\dě{3ƥ ௽;䂭 4?%8&Goa>L8BJ\} Ӡb*_ 0h&tAE;y9yJ>bRޥZ#=4j*!^ע\QQ $Qpǒ{&R4Ӣ7.tkRA YS=_z%&1eBxU Dz#4h={{{sMul_̾,e혪s/1zGC[qRP!fП(by \*"`Su_uR.Y+ b5Yi4:VȆtHP{t9 ,+PiDGS֏ƖLqĚeta1á/I #-~hGY-N4@:jK2uMwJcbBԱnÕ+y-ٯ(XS1N$aҲw 8 2T;К9sK\1҈\v׀,n"#c0 ?^6G Vï|D+ J,q\\gnwe`f&pGna7ЏuM2BT"(/Y$1y [IiIxC5hMA+I΁~G,>UV|X(.A[6:ArP}AN<.] KWof"Kٮ0!ADTăRMP w0lX DXS2h%ۿj zʶ[ #]B(g+˵/8+K\.#cd?#vY.Rt$8GsB!HGUlbIrfNlˋq[ow[^ "Y}VwEd&5}uuʩr·bB//,>fZk}%iSKSu&!A3 &o/8ǵQ S1>.Q))B&0M$doJ[y-WswR @#br~j 9m zb"zv|f&f2ܡfr 5]qr-a̲,L hnmϜ|^_x W'wvX" ?lI[+KswK{t†gm:$o7pN1;JUImjaG<@JP;4_jm-kuG883S딆ʺ9;)BDkr(\] ܵ%{XMB,/ Pm:2Ӧa7AHE[e{׌qX+Ui=FulZœ-J!TU=t"V ݱdHV\,F*/2<`iIfZחɶ\6"--d%i\ idj"(b?C :7T^/4_8)JyHoGDh*؛H !&Us1#yBg`}R䰃U8 Ŝy>g1+KIɉ8M"9^y{{ %n3h$3#rq26tOB1El ΍*/Ę Q~B]8CeIo缋E ȻNen7rKUD[q@POQH̎K JxK>x7] &&ÕKzV5mhl?"|@?$=H]߁Wߴ`؆2SɛX"oK8p`m IU׊6ԟ ! KBE dAR:3{С\Wr6>uzgl .97cUNP r;S{{ Eᚭ6|mWrO[+ u_ F(-DFsf*pjt/&*\4 1jkc:[6ԅ}Swf\lAmؿ/+D.}]`˰Aj/`LaGHtbn$gI+w7Уʾz9xӡOm~voopй iq:QC}jg?`g17LH6M8Hؒ^DEW @Qoq.,eƂ)~ BS~ ,BPmXHa 7BS*q"htBBA|98;o"fH \Cl]{k$U.FN`aI&f&w؄rWn([EQSO{w4Y7i/Z9ZiaL0hJp|l9N?0C1Yr*3f+#9VO)!s$F&gfǹ"B,ME`_k˚{TT_dJM|tv&\h 0Kb ,Kn/9/'QCöaR%M-*ZL61ϵm5! ec?Rwdz3|_5U_?q(ňH,]2%_uY13wdԡRPaL;ᙟS c**Uh+= D| 'u4-O=n4uEz#ݟҘ@q=M u94w6Xb;V'cnƞ&2m>6>71Pe3 o&9{0Ma'%_` {ydM:F$MqXuw9=e)8jbG#=-+ݜPXN_\EfKc O3%_״ޠbY#qc&cP7PxR7PQY04Pse]5&~d F9̆ #7*Ot%ruY*pJIK1Ȓ6K >"uEMVgKFɅd9jU 2ebURd%Fei8ESU pUWgI&!ʉ9=b=&/jOHsiR%68Nq^kMA%7I#USK0FTŔ4Qpy [I0*͌#"m]Q9>Q;=h!JkdzGD0];V-F1[SA k壔l,A.*1q6ɺ*V'7Ti,4ԅh)G_R2 b',E bho}Ccz5DHHUVW@g`m endstream endobj 78 0 obj << /Type /FontDescriptor /FontName /ZYLGFI+CMTI12 /Flags 4 /FontBBox [-36 -251 1103 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 63 /XHeight 431 /CharSet (/A/E/G/M/N/Q/R/S/T/U/a/c/e/ffi/h/i/l/m/n/o/period/s/t/u/w/y) /FontFile 77 0 R >> endobj 79 0 obj << /Length1 2129 /Length2 8033 /Length3 0 /Length 9294 /Filter /FlateDecode >> stream xڍTӍ7. ]4(Cb%7`c4H ҍt(H(-%H;}ssޝ0s˂%8 5 @| ca1"] X (&<bDl(CM8 @Bb a1 cGl`&@ x|PG$*?_v0ow+4mWTF;> A'#&cG8HqpHG(l\!Sc8B=R6%pA`(OU5n_pn7޿Aamn60_(`u4x>H. 񲁺آ ~nPؠuCzx@]~qfEX !=~էE@P}:0=Ek{BTAnd$@ #nJ/1C ` CPx6^ S_P;$DG!aG@}@_=DMs1y dԕM_ p BFѱ]SfU,K҂`s .3+u"%Oz ?zWDv@CZ\MZU jda.6uH;߳מ@aepѡu='l߿`N<̩&J֛{uOo!"7yiَ-Fg GQbZ1m}$<[Soo7懁(v>r[P`}SqRְC>M%"OV6m\D*Ǿ{Jg齃|K}3%\htMB7ìM.!u돀q.Exְ`v[!B{ƭBOmư`ě5+*JǤ 8Vyg4p*| 8:܊* L=drUML}2 +]oҎ>Zw_>Hݛ (=D ZͿybY6򦜰o.1 = 5b8l!nR<ApTiRIj="̩ Zy t G>8١=!ELNըT,:H Y8s.2_:1[fӫqQd4/_!V=qh4^{Ж"ky_.|` lw+t7gV'':%꫈ %\i>}Gj$Zx{/CanVM4xЀֻS³*@{GdBip!E2Ĵ&[W_z@lHz $= OgTj_%YX 9>Qf4plo;UŬآش®MUzW2]aTaLga8&O?R5\\`M%>*I;5Xt #ׂt+o[˘u0HIM^Tlfm'b[7aaKy+y1p?./Q>iUs$ }ZD2ڇ}`tN±|Rx|sKa$OCué g:~d2|*>-Dž{/ncgDMҩy;Τ6b˪h~.fw>E.bX*X]kH{YseAQ>jyn 0ѹ^j* 3 %珺;})BSIT\tBnCZlgUOT5sہVSeo^~j6L^1ci|E{Ê8n'A|vm<+R6 >vj zyAN>S 93z;Wj0amiKI[ff<:ku \k+祥%IG 8)$.xż>QUN7,^uej%hӤ?H4.Fed+VFܚ4oWU)ΎVdA2x\_9~cZXea/zp:#>IܢC2cEYU/;Ge]M';DnMZդɼq {D0q,0}Xjh*ģN|8H}2%-;K׳ON{RLG~Nz.}IJSkL͗J=Nw1L-6O2zR3xJ>ɶj%lhZk*½|?;hRs?qޖE_ս2~bRE! 7ifϹr|x2{z7^e'2(ģ˟Mf-=p*{Pe!a)-vӠ1AʘQH)z-.p &D.9ne#K, n:4ReA1k7) 3q2;}]в nqwRgIy6c )aFA G+:Ff :5t(gb~upϾJ'Ȯtg_ػv6̖I"_G, ISw6s26,/GlO0$W4&L1a&XW/ s9m8+)$syK_0TBypܓx%łTG7ZT 7sךK~<OHM7`~M)D!ݚh #u_5|DW{ǣGl@墔iQ]ؔ\g}~?FC>Rd;.̪,i-#r"5&>/ǃ%MVdFI tAZ%l[ֵZ)ă;x]{Y`Oui7"mA!>QМdɨdf)DBjc.Θg\TTQ_eEc{j]-x> Yb͑|;ϔ|T1]ÏT=S fEfN|dXS=2JƆ<屒QrH?}39|T]E1㺇VִpIIGg'Ǣt :z*gHu>6^{sciJZffܜOӫlT$kv$~)بT[f'W&@9s;|T-ZS)i̒:r/DhZ#m㝾>Ae'Qڨe鞃(,c c Rwj~۪Ϯ P^ZX6%WFqbZ;WNڢ]=XAэlfFNt-&7pI-Ԍ]Sލ"ЍecMfUֻ3KoX}K?W5 No#'$oKb/I-E祡<1^D;ќ_.+K2jZ/ RU565w(7 _6ɳU,4Sy1UiP{d [mVytМŁ^#M' tn._2>-Kwh"LdxGƗ/pn|&-Ӡj g5F,V ">bajۇvYܠ/[YɆ)&x #V8dF}&+WxBŎ_q2sG$Zz]z%٢2TK" kgY#vf!!eq;܎~gku[T}Q]PF'_W=E?>%q@›;oZʅR}?̴:$`h~:cꟓٸ>b?o6 M_mL~axnՇ7ioYиǸ Dr1(> MNZOy>JC|0k1)sr_S1.|e"fPIjݟcn^[8Q0p֑nT-Ff,3FoIτmv‰3E_wD‚jҶ!*vOve'`E$ff*8Ll'10+]79R<.mg0b)[p`C{3ԳDGs3zQ1~㾆аq9fJj5璩pCUOف]Q7հ9:Ź$OA71ONo[w^4N^=`,bvߤ//__}&vp>O1kkiB=` o+B83"I٫T:۽hZ#i? C38<+|kEnyָN{]EsDW7 KmfU*pI{Cаe"9cVCf@\ZW@aӋQ 2j f =md4'rXU}IjCıMo&>N~p2\,]yqW¢be~]m=Y|%䝡?2ŬBg*qEdC^}nU#_?79VnbN&BML֨FSŶ'JjŀxޒZ;|\k\}Uwnﲇ5L._qS@Fl׺-Ͷb"LkM _^NLzE {5?Ij 7MF㽞/v:#7K;VRWYdgFλL4$?oCǣjZ\BF/k H{s){)\ƱCAgo7y`dC۩AZU63Ur ^jJ՘&!MnN/0b/R Ž`cw^0U}%*7f1{di[Jea%o? #jR}se!72hB)c;4G'x.}Z"YDLxZpwo0jT3NO^ dj}bhv##l,ttX"!& O\U(ؗ1Kb!XU}Hg"DcI9N0I|ՐX͖9=Ǥegg3Nմ8moꉠhkW=U,*.a옟'e_?]C%}z^+piymaԊx,XOCTfѻbňG{!##B~r|,+3*L F';u fMU9 ۺPmjV-wCZo"F=\|JdIÜOu2MsE3cM_v۬q+Y1Z L !Ʉ*`߻S^2֎)S]l(蓟fG=Wgzt!C&[sdIvz$ 31?i=(Z_<dn! _voh+v1< c"&mx~^DAn-j&أ*5Sbz,WLm9ca?h| U=?5G endstream endobj 80 0 obj << /Type /FontDescriptor /FontName /TAZDKG+CMTT12 /Flags 4 /FontBBox [-1 -234 524 695] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/A/E/F/L/M/N/Q/R/S/T/U/a/b/bracketleft/bracketright/c/comma/d/dollar/e/eight/f/five/four/g/hyphen/i/j/l/m/n/nine/o/one/p/parenleft/parenright/period/r/s/seven/six/t/three/two/u/v/zero) /FontFile 79 0 R >> endobj 26 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LKBAXH+CMBX12 /FontDescriptor 68 0 R /FirstChar 12 /LastChar 121 /Widths 63 0 R >> endobj 42 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DODKXG+CMMI12 /FontDescriptor 70 0 R /FirstChar 58 /LastChar 65 /Widths 60 0 R >> endobj 25 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EGCQNX+CMR12 /FontDescriptor 72 0 R /FirstChar 12 /LastChar 122 /Widths 64 0 R >> endobj 24 0 obj << /Type /Font /Subtype /Type1 /BaseFont /HDPPHX+CMR17 /FontDescriptor 74 0 R /FirstChar 44 /LastChar 120 /Widths 65 0 R >> endobj 27 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RPJUYN+CMSLTT10 /FontDescriptor 76 0 R /FirstChar 34 /LastChar 125 /Widths 62 0 R >> endobj 28 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZYLGFI+CMTI12 /FontDescriptor 78 0 R /FirstChar 14 /LastChar 121 /Widths 61 0 R >> endobj 23 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TAZDKG+CMTT12 /FontDescriptor 80 0 R /FirstChar 36 /LastChar 118 /Widths 66 0 R >> endobj 29 0 obj << /Type /Pages /Count 6 /Parent 81 0 R /Kids [18 0 R 31 0 R 35 0 R 39 0 R 44 0 R 48 0 R] >> endobj 55 0 obj << /Type /Pages /Count 2 /Parent 81 0 R /Kids [52 0 R 57 0 R] >> endobj 81 0 obj << /Type /Pages /Count 8 /Kids [29 0 R 55 0 R] >> endobj 82 0 obj << /Type /Outlines /First 3 0 R /Last 7 0 R /Count 2 >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 7 0 R /Prev 11 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 82 0 R /Prev 3 0 R /First 11 0 R /Last 15 0 R /Count -2 >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 82 0 R /Next 7 0 R >> endobj 83 0 obj << /Names [(Doc-Start) 22 0 R (page.1) 21 0 R (page.2) 33 0 R (page.3) 37 0 R (page.4) 41 0 R (page.5) 46 0 R] /Limits [(Doc-Start) (page.5)] >> endobj 84 0 obj << /Names [(page.6) 50 0 R (page.7) 54 0 R (page.8) 59 0 R (section.1) 2 0 R (section.2) 6 0 R (subsection.2.1) 10 0 R] /Limits [(page.6) (subsection.2.1)] >> endobj 85 0 obj << /Names [(subsection.2.2) 14 0 R] /Limits [(subsection.2.2) (subsection.2.2)] >> endobj 86 0 obj << /Kids [83 0 R 84 0 R 85 0 R] /Limits [(Doc-Start) (subsection.2.2)] >> endobj 87 0 obj << /Dests 86 0 R >> endobj 88 0 obj << /Type /Catalog /Pages 81 0 R /Outlines 82 0 R /Names 87 0 R /PageMode/UseOutlines /OpenAction 17 0 R >> endobj 89 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.19)/Keywords() /CreationDate (D:20201021110710-04'00') /ModDate (D:20201021110710-04'00') /Trapped /False /PTEX.Fullbanner (This is MiKTeX-pdfTeX 2.9.6668 (1.40.19)) >> endobj xref 0 90 0000000000 65535 f 0000000015 00000 n 0000002605 00000 n 0000113871 00000 n 0000000060 00000 n 0000000097 00000 n 0000004574 00000 n 0000113764 00000 n 0000000142 00000 n 0000000230 00000 n 0000004624 00000 n 0000113692 00000 n 0000000280 00000 n 0000000378 00000 n 0000007432 00000 n 0000113619 00000 n 0000000429 00000 n 0000000512 00000 n 0000002391 00000 n 0000002659 00000 n 0000000560 00000 n 0000002499 00000 n 0000002554 00000 n 0000113150 00000 n 0000112726 00000 n 0000112586 00000 n 0000112305 00000 n 0000112866 00000 n 0000113009 00000 n 0000113291 00000 n 0000004679 00000 n 0000004411 00000 n 0000002789 00000 n 0000004519 00000 n 0000005674 00000 n 0000005511 00000 n 0000004773 00000 n 0000005619 00000 n 0000007487 00000 n 0000007269 00000 n 0000005768 00000 n 0000007377 00000 n 0000112446 00000 n 0000009364 00000 n 0000009201 00000 n 0000007617 00000 n 0000009309 00000 n 0000010561 00000 n 0000010398 00000 n 0000009458 00000 n 0000010506 00000 n 0000011679 00000 n 0000011516 00000 n 0000010655 00000 n 0000011624 00000 n 0000113400 00000 n 0000012431 00000 n 0000012268 00000 n 0000011773 00000 n 0000012376 00000 n 0000012525 00000 n 0000012585 00000 n 0000013087 00000 n 0000013473 00000 n 0000014109 00000 n 0000014714 00000 n 0000015190 00000 n 0000015706 00000 n 0000030641 00000 n 0000030970 00000 n 0000038174 00000 n 0000038401 00000 n 0000057595 00000 n 0000058022 00000 n 0000069807 00000 n 0000070088 00000 n 0000088806 00000 n 0000089335 00000 n 0000102218 00000 n 0000102495 00000 n 0000111908 00000 n 0000113481 00000 n 0000113547 00000 n 0000113941 00000 n 0000114102 00000 n 0000114277 00000 n 0000114376 00000 n 0000114466 00000 n 0000114502 00000 n 0000114625 00000 n trailer << /Size 90 /Root 88 0 R /Info 89 0 R /ID [<203921E28D45C4D1D79525513D0A2768> <203921E28D45C4D1D79525513D0A2768>] >> startxref 114899 %%EOF SQUAREM/vignettes/SQUAREM.Rnw0000644000176200001440000001721613744057566015234 0ustar liggesusers\documentclass[12pt]{article} \usepackage[margin=1in]{geometry} \usepackage{amsmath, amssymb, amsfonts} %\usepackage{natbib} \usepackage{graphicx} \usepackage{color} %% red, green, and blue (for screen display) and cyan, magenta, and yellow \definecolor{Navy}{rgb}{0,0,0.8} \usepackage{hyperref} \hypersetup{colorlinks=true, urlcolor={Navy}, linkcolor={Navy}, citecolor={Navy}} \parskip 7.2pt \newcommand{\compresslist}{% %\setlength{\itemsep}{1pt}% \setlength{\itemsep}{0pt}% \setlength{\parskip}{0pt}% \setlength{\parsep}{0pt}% } \newcommand{\pb}{\mathbb{P}} \newcommand{\E}{\mathbb{E}} \newcommand{\V}{\mathbb{V}} \newcommand{\C}{\mathbb{C}} \newcommand{\bea}{\begin{align*}} \newcommand{\eea}{\end{align*}} \newcommand{\beq}{\begin{equation}} \newcommand{\eeq}{\end{equation}} \newcommand{\be}{\begin{enumerate}} \newcommand{\ee}{\end{enumerate}} \newcommand{\bi}{\begin{itemize}} \newcommand{\ei}{\end{itemize}} \renewcommand{\baselinestretch}{1} \title{\texttt{SQUAREM}: Accelerating the Convergence of EM, MM and Other Fixed-Point Algorithms} \author{Ravi Varadhan} \date{} \begin{document} %\VignetteIndexEntry{SQUAREM Tutorial} %\VignetteDepends{setRNG} %\VignetteKeywords{EM algorithm, fixed-point iteration, acceleration, extrapolation} %\VignettePackage{SQUAREM} \SweaveOpts{eval=TRUE,echo=TRUE,results=verbatim,fig=FALSE,keep.source=TRUE, concordance=FALSE} \maketitle \section{Overview of SQUAREM} ''SQUAREM'' is a package intended for accelerating slowly-convergent contraction mappings. It can be used for accelerating the convergence of slow, linearly convergent contraction mappings such as the EM (expectation-maximization) algorithm, MM (majorize and minimize) algorithm, and other nonlinear fixed-point iterations such as the power method for finding the dominant eigenvector. It uses a novel approach callled squared extrapolation method (SQUAREM) that was proposed in Varadhan and Roland (Scandinavian Journal of Statistics, 35: 335-353), and also in Roland, Vardhan, and Frangakis (Numerical Algorithms, 44: 159-172). The functions in this package are made available with: <>= library("SQUAREM") @ You can look at the basic information on the package, including all the available functions with <>= help(package=SQUAREM) @ The package \emph{setRNG} is not necessary, but if you want to exactly reproduce the examples in this guide then do this: <>= require("setRNG") setRNG(list(kind="Wichmann-Hill", normal.kind="Box-Muller", seed=123)) @ after which the example need to be run in the order here (or at least the parts that generate random numbers). For some examples the RNG is reset again so they can be reproduced more easily. \section{How to accelerate convergence of a fixed-point iteration with SQUAREM?} \subsection{Accelerating EM algorithm: Binary Poisson Mixture Maximum-Likelihood Estimation} Now, we show an example demonstrating the ability of SQUAREM to dramatically speed-up the convergence of the EM algorithm for a binary Poisson mixture estimation. We use the example from Hasselblad (J of Amer Stat Assoc 1969) <>= poissmix.dat <- data.frame(death=0:9, freq=c(162,267,271,185,111,61,27,8,3,1)) @ Generate a random initial guess for 3 parameters <>= y <- poissmix.dat$freq tol <- 1.e-08 setRNG(list(kind="Wichmann-Hill", normal.kind="Box-Muller", seed=123)) p0 <- c(runif(1),runif(2,0,6)) @ The fixed point mapping giving a single E and M step of the EM algorithm <>= poissmix.em <- function(p,y) { pnew <- rep(NA,3) i <- 0:(length(y)-1) zi <- p[1]*exp(-p[2])*p[2]^i / (p[1]*exp(-p[2])*p[2]^i + (1 - p[1])*exp(-p[3])*p[3]^i) pnew[1] <- sum(y*zi)/sum(y) pnew[2] <- sum(y*i*zi)/sum(y*zi) pnew[3] <- sum(y*i*(1-zi))/sum(y*(1-zi)) p <- pnew return(pnew) } @ Objective function whose local minimum is a fixed point. Here it is the negative log-likelihood of binary poisson mixture. <>= poissmix.loglik <- function(p,y) { i <- 0:(length(y)-1) loglik <- y*log(p[1]*exp(-p[2])*p[2]^i/exp(lgamma(i+1)) + (1 - p[1])*exp(-p[3])*p[3]^i/exp(lgamma(i+1))) return ( -sum(loglik) ) } @ EM algorithm <>= pf1 <- fpiter(p=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list(tol=tol)) pf1 @ Note the slow convergence of EM, as it uses more than 2900 iterations to converge. Now, let us speed up the convergence with SQUAREM: <>= pf2 <- squarem(p=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list(tol=tol)) pf2 @ Note the dramatically faster convergence, i.e. SQUAREM uses only 72 fixed-point evaluations to achieve convergence. This is a speed up of a factor of 40. We can also run SQUAREM without specifying an objective function, i.e. the negative log-likelihood. \emph{This is usually the most efficient way to use SQUAREM.} <>= pf3 <- squarem(p=p0, y=y, fixptfn=poissmix.em, control=list(tol=tol)) pf3 @ \subsection{Accelerating the Power Method for Finding the Dominant Eigenpair} The power method is a nonlinear fixed-point iteration for determining the dominant eigenpair, i.e. the largest eigenvalue (in terms of absolute magnitude) and the corresponding eigenvector, of a square matrix $A.$ The iteration can be programmed in R as: <>= power.method <- function(x, A) { # Defines one iteration of the power method # x = starting guess for dominant eigenvector # A = a square matrix ax <- as.numeric(A %*% x) f <- ax / sqrt(as.numeric(crossprod(ax))) f } @ We illustrate this for finding the dominant eigenvector of the Bodewig matrix which is a famous matrix for which power method has trouble converging. See, for example, Sidi, Ford, and Smith (SIAM Review, 1988). Here there are two eigenvalues that are equally dominant, but have opposite signs! Sometimes the power method finds the eigenvector corresponding to the large positive eigenvalue, but other times it finds the eigenvector corresponding to the large negative eigenvalue <>= b <- c(2, 1, 3, 4, 1, -3, 1, 5, 3, 1, 6, -2, 4, 5, -2, -1) bodewig.mat <- matrix(b,4,4) eigen(bodewig.mat) @ Now, let us look at power method and its acceleration using various SQUAREM schemes: <>= p0 <- rnorm(4) # Standard power method iteration ans1 <- fpiter(p0, fixptfn=power.method, A=bodewig.mat) # re-scaling the eigenvector so that it has unit length ans1$par <- ans1$par / sqrt(sum(ans1$par^2)) # dominant eigenvector ans1 # dominant eigenvalue c(t(ans1$par) %*% bodewig.mat %*% ans1$par) / c(crossprod(ans1$par)) @ Now, we try first-order SQUAREM with default settings: <>= ans2 <- squarem(p0, fixptfn=power.method, A=bodewig.mat) ans2 ans2$par <- ans2$par / sqrt(sum(ans2$par^2)) c(t(ans2$par) %*% bodewig.mat %*% ans2$par) / c(crossprod(ans2$par)) @ The convergence is still slow, but it converges to the dominant eigenvector. Now, we try with a minimum steplength that is smaller than 1. <>= ans3 <- squarem(p0, fixptfn=power.method, A=bodewig.mat, control=list(step.min0 = 0.5)) ans3 ans3$par <- ans3$par / sqrt(sum(ans3$par^2)) # eigenvalue c(t(ans3$par) %*% bodewig.mat %*% ans3$par) / c(crossprod(ans3$par)) @ The convergence is dramatically faster now, but it converges to the second dominant eigenvector. We try again with a higher-order SQUAREM scheme. <>= # Third-order SQUAREM ans4 <- squarem(p0, fixptfn=power.method, A=bodewig.mat, control=list(K=3, method="rre")) ans4 ans4$par <- ans4$par / sqrt(sum(ans4$par^2)) # eigenvalue c(t(ans4$par) %*% bodewig.mat %*% ans4$par) / c(crossprod(ans4$par)) @ Once again we obtain the second dominant eigenvector. \end{document} SQUAREM/NEWS0000644000176200001440000000374513777433072012114 0ustar liggesusersLog of changes to SQUAREM o first release: August 8, 2010 o second release: August 9, 2010 - fixed a bug in `cyclem1' and `cyclem2' that croped up when testing under Windows 64-bit. This was due to QR-decomposition using LAPACK. o third release: September 26, 2010 - modified the `cat' statement such that it is effective only when trace = TRUE o fourth release: December 31, 2010 - There was a bug in the check for convergence in all the 4 functions: squarem1, squarem2, cyclem1 and cyclem2. It was pointed out by Roger Koenker. It is now fixed. - A slight change was made to documentation regarding the objective function. o Fifth release: August 10, 2016 - created vignettes with several examples showing how to accelerate convergence using SQUAREM - created demo examples showing how to use SQUAREM to accelerate convergence o October 19, 2016 - return intermediate parameter vector and merit function values o January 2, 2020 - changed code for detecting "try-error" to conform to the changes in latest R release o February 21, 2020 - Added citation information for how to cite the package o June 04, 2020 - Modified the code to output updated parameters from EM algorithm immediately before breaking for convergence o August 19, 2020 - Fixed a couple of lines in squarem2() to output updated parameters from EM algorithm immediately before breaking for convergence - thanks to Dan Schaid (Mayo) for pointing this out o October 21, 2020 - Added the option to either "minimize"" or "maximize" the objective function - Control parameter `minimize' can be set to TRUE (for minimization) or FALSE (for maximization) o January 12, 2021 - Added the option to output the residuals when objective funcion is NOT given - also added this option to `fpiter' - In order to use this option, the user has to set `intermed=TRUE' - this option is not available for higher-order squarem algorithms SQUAREM/R/0000755000176200001440000000000013166214604011573 5ustar liggesusersSQUAREM/R/squarem.R0000644000176200001440000005100213771741674013407 0ustar liggesuserssquarem <- function(par, fixptfn, objfn, ... , control=list()) { # # The Master function for SQUAREM acceleration of "ANY" fixed-point iteration # A wrapper that calls appropriate function below (squarem1, squarem2, cyclem1, cyclem2) # # Author: Ravi Varadhan, Johns Hopkins University # # See Varadhan and Roland (Scandinavian J Statistics 2008) # See Roland, Varadhan and Frangakis (Applied Numerical Mathematics 2007) # # Last modified: June 25, 2010 # Last modified: August 09, 2010 # Last modified: December 31, 2010 ####################################################################### # # par = starting value of parameter vector # fixptfn = fixed-point iteration F(x) # for which the solution: F(x*) = x* is sought # objfn = underlying objective function which is minimized at x* # method = 1, 2, or 3, indicating the type of steplength to be used # # control.default <- list(K = 1, method=3, minimize=TRUE, square=TRUE, step.min0=1, step.max0=1, mstep=4, kr=1, objfn.inc=1, tol=1.e-07, maxiter=1500, trace=FALSE, intermed=FALSE) namc <- names(control) if (!all(namc %in% names(control.default))) stop("unknown names in control: ", namc[!(namc %in% names(control.default))]) ctrl <- modifyList(control.default, control) if (ctrl$K > 1 & !(ctrl$method %in% c("rre", "mpe")) ) ctrl$method <- "rre" if (ctrl$K == 1 & !(ctrl$method %in% c(1,2,3)) ) ctrl$method <- 3 if (!missing(objfn) ) { if (ctrl$K == 1) sqobj <- squarem1(par, fixptfn, objfn, ... , control=ctrl) else if (ctrl$K > 1 | ctrl$method %in% c("rre", "mpe")) sqobj <- cyclem1(par, fixptfn, objfn, ... , control=ctrl) } else { if (ctrl$K == 1) sqobj <- squarem2(par, fixptfn, ... , control=ctrl) else if (ctrl$K > 1 | ctrl$method %in% c("rre", "mpe")) sqobj <- cyclem2(par, fixptfn, ... , control=ctrl) } return(sqobj) } ####################################################################### # Partially-monotone, globally-convergent SQUAREM acceleration # Can accelerate EM, MM, and other fixed-point iterations # Here we use an adaptive maximum step-size strategy # This strategy is effective and represents a good trade-off between speed and stability # See Varadhan and Roland (Scandinavian J Statistics 2008) # # Date: August 22, 2007 # Adaptive step-max strategy modified: May 2008 # Last modified: November 2008 # Last modified: October 2009 # Last modified: Feb 23 2010 ####################################################################### squarem1 <- function(par, fixptfn, objfn, ... , control=list()) { # par = starting value of parameter vector # fixptfn = fixed-point iteration F(x) # for which the solution: F(x*) = x* is sought # objfn = underlying objective function which is minimized at x* # # control.default <- list(K=1, square=TRUE, minimize=TRUE, method=3, step.min0=1, step.max0=1, mstep=4, kr=1, objfn.inc=1, tol=1.e-07, maxiter=1500, trace=FALSE, intermed=FALSE) namc <- names(control) if (!all(namc %in% names(control.default))) stop("unknown names in control: ", namc[!(namc %in% names(control.default))]) ctrl <- modifyList(control.default, control) ##### # method = 1, 2, or 3, indicating the type of steplength to be used # A key parameter is `step.min0'. This can be either positive or negative if the eigenvalues of the Jacobian of fixed-point mapping are all positive; # We set it to +1 for contraction mappings such as EM and MM algorithms # Must be negative, e.g. -1, if the fixed-point mapping can have negative eiegnvalues ##### # parameter "objfn.inc" dictates the amount of non-monotonicity in the objective function # setting objfn.inc=0 would enforce monotonicity, whereas objfn.inc=Inf would be a non-monotonic scheme # The defalut objfn.inc=1 would enforce monotonicity far from solution, but allows for non-monotonicity closer to solution # method <- ctrl$method maxiter <- ctrl$maxiter minimize <- ctrl$minimize tol <- ctrl$tol step.min <- ctrl$step.min0 step.max0 <- ctrl$step.max0 step.max <- ctrl$step.max0 mstep <- ctrl$mstep objfn.inc <- ctrl$objfn.inc trace <- ctrl$trace intermed <- ctrl$intermed if (trace) cat("Squarem-1 \n ") if (missing(objfn)) stop("\n squarem2 should be used if objective function is not available \n\n") iter <- 1 objval <- rep(NA,1) p <- par lold <- objfn(p, ...) leval <- 1 if (trace) cat("Objective fn: ", lold, "\n") feval <- 0 conv <- TRUE p.inter <- c(p, lold) while (feval < maxiter) { extrap <- TRUE p1 <- try(fixptfn(p, ...),silent=TRUE) feval <- feval + 1 if (inherits(p1, "try-error") | any(is.nan(unlist(p1)))) stop("Error in function evaluation") q1 <- p1 - p sr2 <- crossprod(q1) if (sqrt(sr2) < tol) {p <- p1; break} p2 <- try(fixptfn(p1, ...),silent=TRUE) feval <- feval + 1 if (inherits(p2, "try-error") | any(is.nan(unlist(p2)))) stop("Error in function evaluation") q2 <- p2 - p1 sq2 <- sqrt(crossprod(q2)) if (sq2 < tol) {p <- p2; break} sv2 <- crossprod(q2-q1) srv <- crossprod(q1, q2-q1) alpha <- switch(method, -srv/sv2, -sr2/srv, sqrt(sr2/sv2)) alpha <- max(step.min, min(step.max, alpha)) p.new <- p + 2*alpha*q1 + alpha^2*(q2-q1) if (abs(alpha - 1) > 0.01 ) { p.new <- try(fixptfn(p.new , ...),silent=TRUE) # stabilization step feval <- feval + 1 } if (inherits(p.new, "try-error") | any(is.nan(p.new))) { p.new <- p2 lnew <- try(objfn(p2, ...), silent=TRUE) leval <- leval + 1 if (alpha == step.max) step.max <- max(step.max0, step.max/mstep) alpha <- 1 extrap <- FALSE } else { if (is.finite(objfn.inc)) { lnew <- try(objfn(p.new, ...), silent=TRUE) leval <- leval + 1 } else lnew <- lold non.monotone <- if (minimize) lnew > lold + objfn.inc else lnew < lold - objfn.inc if (inherits(lnew, "try-error") | is.nan(lnew) | non.monotone) { p.new <- p2 lnew <- try(objfn(p2, ...), silent=TRUE) leval <- leval + 1 if (alpha==step.max) step.max <- max(step.max0, step.max/mstep) alpha <- 1 extrap <- FALSE } } if (alpha == step.max) step.max <- mstep*step.max if (step.min < 0 & alpha == step.min) step.min <- mstep*step.min p <- p.new if (!is.nan(lnew)) lold <- lnew if (trace) cat("Objective fn: ", lnew, " Extrapolation: ", extrap, " Steplength: ", alpha, "\n") if(intermed) p.inter <- rbind(p.inter, c(p, lnew)) iter <- iter+1 } if (feval >= maxiter) conv <- FALSE if (is.infinite(objfn.inc)) { lold <- objfn(p, ...) leval <- leval + 1 } rownames(p.inter) <- NULL if (!intermed) return(list(par=p, value.objfn=lold, iter= iter, fpevals=feval, objfevals = leval, convergence=conv)) else return(list(par=p, value.objfn=lold, iter= iter, fpevals=feval, objfevals = leval, convergence=conv, p.intermed=p.inter)) } ################################################################### squarem2 <- function(par, fixptfn, ... , control=list() ) { # par = starting value of parameter vector # fixptfn = fixed-point iteration F(x) # for which the solution: F(x*) = x* is sought # method = 1, 2, or 3, indicating the type of steplength to be used # # See Varadhan and Roland (Scandinavian J Statistics 2008) # control.default <- list(K=1, square=TRUE, minimize=TRUE, method=3, step.min0=1, step.max0=1, mstep=4, kr=1, objfn.inc=1, tol=1.e-07, maxiter=1500, trace=FALSE, intermed=FALSE) namc <- names(control) if (!all(namc %in% names(control.default))) stop("unknown names in control: ", namc[!(namc %in% names(control.default))]) ctrl <- modifyList(control.default, control) ##### # method = 1, 2, or 3, indicating the type of steplength to be used # A key parameter is `step.min0'. This can be either positive or negative if the eigenvalues of the Jacobian of fixed-point mapping are all positive; # We set it to +1 for contraction mappings such as EM and MM algorithms # Must be negative, e.g. -1, if the fixed-point mapping can have negative eiegnvalues ##### # Parameter "kr" dictates the amount of non-monotonicity in the fixed-point residual # setting kr=0 would try to enforce monotonicity; kres=Inf would be a non-monotonic scheme # method <- ctrl$method maxiter <- ctrl$maxiter tol <- ctrl$tol kr <- ctrl$kr step.min <- ctrl$step.min0 step.max0 <- ctrl$step.max0 step.max <- ctrl$step.max0 mstep <- ctrl$mstep trace <- ctrl$trace if (trace) cat("Squarem-2 \n") intermed <- ctrl$intermed iter <- 1 feval <- 0 kount <- 0 conv <- TRUE p.inter <- rep(NA, length(par)+1) while (feval < maxiter) { extrap <- TRUE p1 <- try(fixptfn(par, ...),silent=TRUE) feval <- feval + 1 if (inherits(p1, "try-error") | any(is.nan(unlist(p1)))) break q1 <- p1 - par sr2 <- crossprod(q1) p.inter <- rbind(p.inter, c(par, sqrt(sr2))) if (sqrt(sr2) < tol) {par <- p1; break} p2 <- try(fixptfn(p1, ...),silent=TRUE) feval <- feval + 1 if (inherits(p2, "try-error") | any(is.nan(unlist(p2)))) break q2 <- p2 - p1 sq2 <- sqrt(crossprod(q2)) res <- sq2 if (sq2 < tol) {par <- p2; break} sv2 <- crossprod(q2-q1) srv <- crossprod(q1, q2-q1) alpha <- switch(method, -srv/sv2, -sr2/srv, sqrt(sr2/sv2)) alpha <- max(step.min, min(step.max, alpha)) p.new <- par + 2*alpha*q1 + alpha^2*(q2-q1) if (abs(alpha - 1) > 0.01 ) { ptmp <- try(fixptfn(p.new, ...),silent=TRUE) # stabilization step feval <- feval + 1 if (inherits(ptmp, "try-error") | any(is.nan(unlist(ptmp))) ) { p.new <- p2 if (alpha == step.max) step.max <- max(step.max0, step.max/mstep) alpha <- 1 extrap <- FALSE } else { res <- sqrt(crossprod(ptmp - p.new)) parnorm <- sqrt(crossprod(p2)/length(p2)) kres <- kr * (1 + parnorm) + sq2 p.new <- if (res <= kres) ptmp else p2 if (res > kres) { if (alpha == step.max) step.max <- max(step.max0, step.max/mstep) alpha <- 1 extrap <- FALSE } } } if (alpha == step.max) step.max <- mstep*step.max if (step.min < 0 & alpha == step.min) step.min <- mstep*step.min if (trace) cat("Residual: ", res, " Extrapolation: ", extrap, " Steplength: ", alpha, "\n") par <- p.new iter <- iter+1 } p.inter <- p.inter[-1, ] if (feval >= maxiter) conv <- FALSE if (intermed) return(list(par=par, value.objfn=NA, iter = iter, fpevals=feval, objfevals = 0, convergence=conv, p.intermed=p.inter)) else return(list(par=par, value.objfn=NA, iter = iter, fpevals=feval, objfevals = 0, convergence=conv)) } ####################################################################### # Squared-Cycled vector extrapolation for accelerating vector sequences # See Roland, Varadhan and Frangakis (Applie Numerical Mathematics 2007) # Author: Ravi Varadhan, Johns Hopkins University # Latest modofications:: Feb 23, 2010 # ########################### cyclem1 <- function(par, fixptfn, objfn, control=list(), ...) { # # par = starting value of parameter vector # fixptfn = fixed-point iteration F(x) # for which the solution: F(x*) = x* is sought # objfn = underlying objective function which is minimized at x* # control.default <- list(K=2, method="rre", minimize=TRUE, square=TRUE, step.min0=1, step.max0=1, mstep=4, kr=1, objfn.inc=1, tol=1.e-07, maxiter=1500, trace=FALSE, intermed=FALSE) namc <- names(control) if (!all(namc %in% names(control.default))) stop("unknown names in control: ", namc[!(namc %in% names(control.default))]) ctrl <- modifyList(control.default, control) # # method = reduced-rank or minimal-polynomial extrapolation # K = order of extrapolation scheme; K=2,3,4 are typical choices # square = a logical variable indicating whether or not "squaring" is used method <- ctrl$method K <- ctrl$K square <- ctrl$square tol <- ctrl$tol maxiter <- ctrl$maxiter objfn.inc <- ctrl$objfn.inc trace <- ctrl$trace if (trace) cat("Cyclem-1 \n") if (missing(objfn)) stop("\n cyclem2 should be used if objective function is not available \n\n") if ( K > length(par)) { cat("K is too large. Decrease it. \n") return() } iter <- 0 lold <- objfn(par, ...) leval <- 1 ptmp <- fixptfn(par,...) res <- sqrt(c(crossprod(ptmp - par))) par <- ptmp feval <- 1 conv <- TRUE while (feval < maxiter & res > tol) { iter <- iter+1 extrap <- TRUE p <- matrix(NA, nrow=length(par), ncol=K+2) U <- matrix(NA, nrow=length(par), ncol=K+1) p[,1] <- par for (i in 2:(K+2)){ p[,i] <- try(fixptfn(p[,i-1], ...), silent=TRUE) if (inherits(p[,i], "try-error") | any(is.nan(unlist(p[,i]))) | any(!is.numeric(p[,i]))) stop("Error in function evaluation \n") U[,i-1] <- p[, i] - p[, i-1] } feval <- feval + K + 1 sqKp1 <- sqrt(c(crossprod(U[, K+1]))) if (method == "rre"){ coef <- try(solve(qr(crossprod(U), LAPACK=TRUE, tol=1.e-14), rep(1,K+1)), silent=TRUE) if (inherits(coef, "try-error") | any(is.nan(coef)) ) { extrap <- FALSE } else { if (abs(sum(coef)) < 1.e-07) extrap <- FALSE coef <- coef/sum(coef) } } if (method == "mpe"){ coef <- try(solve(qr(U[,-(K+1)], LAPACK=TRUE, tol=1.e-14), -U[,K+1]), silent=TRUE) if (inherits(coef, "try-error") | any(is.nan(coef))) { extrap <- FALSE } else { coef <- c(coef, 1) if (abs(sum(coef)) < 1.e-07) extrap <- FALSE coef <- coef/sum(coef) } } if (!extrap) { par <- p[, ncol(p)] res <- sqKp1 iter <- iter + 1 if (trace) cat(" objective fn: ", lold, "extrapolation: ", extrap, "\n") next } if (!square) pnew <- c(p[,-(K+2)] %*% coef) if (square) { pnew <- rep(0, length(par)) if (K > 1) { for (i in 1:(K-1)) { p <- try(cbind(p, fixptfn(p[,i+K+1],...)), silent=TRUE) if (inherits(p, "try-error")| any(is.nan(unlist(p))) | any(!is.numeric(p))) stop("Error in function evaluation \n") } feval <- feval + K - 1 } for (i in 0:K){ for (j in 0:K){ pnew <- pnew + coef[i+1]* coef[j+1] * p[,i+j+1] } } sqKp1 <- sqrt(c(crossprod(p[, 2*K] - p[, 2*K-1]))) } # Perform one stabilization step between cycles if (extrap) { ptmp <- try(fixptfn(pnew, ...), silent=TRUE) res <- sqrt(c(crossprod(ptmp - pnew))) feval <- feval + 1 } if (inherits(ptmp, "try-error") | any(is.nan(unlist(ptmp))) ) { pnew <- p[, ncol(p)] res <- sqKp1 extrap <- FALSE } else pnew <- ptmp lnew <- try(objfn(pnew, ...), silent=TRUE) leval <- leval + 1 non.monotone <- if(ctrl$minimize) lnew > lold+objfn.inc else lnew < lold-objfn.inc if (inherits(lnew, "try-error") | is.nan(lnew) | non.monotone) { pnew <- p[, ncol(p)] res <- sqKp1 extrap <- FALSE if (trace) cat(" objective fn: ", lold, "extrapolation: ", extrap, "\n") } else lold <- lnew par <- pnew if (trace) cat(" objective fn: ", lold, "extrapolation: ", extrap, "\n") } # Main loop complete if (feval >= maxiter) conv <- FALSE return(list(par=par, value.objfn=lold, iter = iter, fpevals=feval, objfevals = leval, convergence=conv)) } ################################################################### # Squared-Cycled vector extrapolation for accelerating vector sequences # See Roland, Varadhan and Frangakis (Applie Numerical Mathematics 2007) # Author: Ravi Varadhan, Johns Hopkins University # Latest modofications:: Feb 23, 2010 # ########################### cyclem2 <- function(par, fixptfn, control=list(), ...) { # par = starting value of parameter vector # fixptfn = fixed-point iteration F(x) # for which the solution: F(x*) = x* is sought # method = reduced-rank or minimal-polynomial extrapolation # control.default <- list(K=2, method="rre", minimize=TRUE, square=TRUE, step.min0=1, step.max0=1, mstep=4, kr=1, objfn.inc=1, tol=1.e-07, maxiter=1500, trace=FALSE, intermed=FALSE) namc <- names(control) if (!all(namc %in% names(control.default))) stop("unknown names in control: ", namc[!(namc %in% names(control.default))]) ctrl <- modifyList(control.default, control) # # method = reduced-rank ("rre") or minimal-polynomial ("mpe") extrapolation # K = order of extrapolation scheme; K=2,3,4 are typical choices # square = a logical variable indicating whether or not "squaring" is used method <- ctrl$method K <- ctrl$K square <- ctrl$square tol <- ctrl$tol maxiter <- ctrl$maxiter kr <- ctrl$kr trace <- ctrl$trace if (trace) cat("Cyclem-2 \n") if ( K > length(par)) { cat("K is too large. Decrease it. \n") return() } iter <- 1 ptmp <- fixptfn(par,...) res <- sqrt(c(crossprod(ptmp - par))) par <- ptmp conv <- TRUE feval <- 1 while (feval < maxiter & res > tol) { extrap <- TRUE p <- matrix(NA, nrow=length(par), ncol=K+2) U <- matrix(NA, nrow=length(par), ncol=K+1) p[,1] <- par for (i in 2:(K+2)){ p[,i] <- try(fixptfn(p[,i-1], ...), silent=TRUE) if (inherits(p[,i], "try-error") | any(is.nan(unlist(p[,i]))) | any(!is.numeric(p[,i]))) stop("Error in function evaluation") U[,i-1] <- p[, i] - p[, i-1] } feval <- feval + K + 1 sqKp1 <- sqrt(c(crossprod(U[, K+1]))) if (method == "rre"){ coef <- try(solve(qr(crossprod(U), LAPACK=TRUE, tol=1.e-14), rep(1,K+1)), silent=TRUE) if (inherits(coef, "try-error") | any(is.nan(coef))) { extrap <- FALSE } else { if (abs(sum(coef)) < 1.e-07) extrap <- FALSE coef <- coef/sum(coef) } } if (method == "mpe"){ coef <- try(solve(qr(U[,-(K+1)], LAPACK=TRUE, tol=1.e-14), -U[,K+1]), silent=TRUE) if (inherits(coef, "try-error") | any(is.nan(coef))) { extrap <- FALSE } else { coef <- c(coef, 1) if (abs(sum(coef)) < 1.e-07) extrap <- FALSE coef <- coef/sum(coef) } } if (!extrap) { par <- p[, ncol(p)] res <- sqKp1 iter <- iter + 1 if (trace) cat(" residual: ", res, "extrapolation: ", extrap, "\n") next } if (!square) pnew <- c(p[,-(K+2)] %*% coef) if (square) { pnew <- rep(0, length(par)) if (K > 1) { for (i in 1:(K-1)) { p <- try(cbind(p, fixptfn(p[,i+K+1],...)), silent=TRUE) if (inherits(p, "try-error") | any(is.nan(unlist(p))) | any(!is.numeric(p))) stop("Error in function evaluation") } feval <- feval + K - 1 } for (i in 0:K){ for (j in 0:K){ pnew <- pnew + coef[i+1]* coef[j+1] * p[,i+j+1] } } sqKp1 <- sqrt(c(crossprod(p[, 2*K] - p[, 2*K-1]))) } # Perform one stabilization step between cycles ptemp <- try(fixptfn(pnew, ...), silent=TRUE) feval <- feval + 1 if(inherits(ptemp, "try-error") | any(is.nan(ptemp)) ){ par <- p[, ncol(p)] res <- sqKp1 extrap <- FALSE } else { res <- sqrt(c(crossprod(ptemp - pnew))) parnorm <- as.numeric(sqrt(crossprod(p[, ncol(p)])/length(par))) if (res <= (kr * (1 + parnorm) + sqKp1)) { par <- ptemp extrap <- TRUE } else { par <- p[, ncol(p)] res <- sqKp1 extrap <- FALSE } } iter <- iter+1 if (trace) cat(" residual: ", res, "extrapolation: ", extrap, "\n") } # Main loop complete if (feval >= maxiter) conv <- FALSE return(list(par=par, value.objfn=NA, iter = iter, fpevals=feval, objfevals = 0, convergence=conv)) } ################################################################### # The EM algorithm # fpiter <- function(par, fixptfn, objfn=NULL, control=list( ), ...){ control.default <- list(tol=1.e-07, maxiter=5000, trace=FALSE, intermed=FALSE) namc <- names(control) if (!all(namc %in% names(control.default))) stop("unknown names in control: ", namc[!(namc %in% names(control.default))]) ctrl <- modifyList(control.default, control) # # method = reduced-rank ("rre") or minimal-polynomial ("mpe") extrapolation # K = order of extrapolation scheme; K=2,3,4 are typical choices # square = a logical variable indicating whether or not "squaring" is used tol <- ctrl$tol maxiter <- ctrl$maxiter trace <- ctrl$trace intermed <- ctrl$intermed if (trace) cat("fpiter \n") iter <- 1 resid <- rep(NA,1) objeval <- 0 conv <- FALSE if(intermed) p.inter <- rep(NA, 1+length(par)) while (iter < maxiter) { p.new <- fixptfn(par, ...) res <- sqrt(crossprod(p.new - par)) if(intermed) p.inter <- rbind(p.inter, c(par, res)) if ( res < tol) {conv <- TRUE; break} if (trace) { if (!is.null(objfn)) {cat("Iter: ", iter, "Objective fn: ",objfn(par, ...), "\n"); objeval <- objeval + 1} else cat("Iter: ", iter, "Residual: ",res, "\n") } par <- p.new iter <- iter+1 } if(intermed) p.inter <- p.inter[-1,] loglik.best <- if (!is.null(objfn)) objfn(par, ...) else NA if(!intermed) return(list(par=par, value.objfn=loglik.best, fpevals=iter, objfevals = objeval, convergence=conv)) else return(list(par=par, value.objfn=loglik.best, fpevals=iter, objfevals = objeval, p.intermed=p.inter, convergence=conv)) } ################################################################### SQUAREM/MD50000644000176200001440000000214113777512712011711 0ustar liggesusersf650729f3c5ac0de565ad6d1874de336 *DESCRIPTION a62319b6c4374fd15963266db928a1fc *NAMESPACE 481ab651d51595187da4c07ffac78abe *NEWS 1d24cb6e023eb43df0368d8cbc49354f *R/squarem.R 2ce900a9bc6751f7beb84b79942bbac3 *build/vignette.rds 4eb525977b2cd840efcd384cada97dff *demo/00Index 99297f5664d508013f345afcecf8d90c *demo/factoranalysis.R 985ce9e82c3dcab993f32464edf1ad1f *demo/intcensoring.R 645a2affa1b4c8b04dfe48df16a6db25 *demo/mmlogistic.R 5e1ac6c0e8d982fd3527aa973e12650d *demo/poissonmix.R 10ee5e811a748995a8bac01698a4769b *demo/squarem.R ac216a9a91116475a6b28b933f34e2b4 *inst/CITATION 4df21965b20b54fd14215afe50bff3e4 *inst/doc/SQUAREM.R 8baa991f5faaaabb04be226d2aac8db0 *inst/doc/SQUAREM.Rnw 87ec2678b267ecd99d38567c6937cd25 *inst/doc/SQUAREM.pdf 5e1af6c79774307501a7e4e864ad1f5c *man/fpiter.Rd dc86f820449b08ca2a684572e599dd55 *man/internal.Rd f894e4e0dc269079cfacf0fe1703b423 *man/squarem.Rd 1f6e68e9322bd524f4db846a970670f0 *tests/Hasselblad1969.R 8baa991f5faaaabb04be226d2aac8db0 *vignettes/SQUAREM.Rnw 50fb1d088187a510f7156630ee9d0a3e *vignettes/SQUAREM.pdf 29124e75e51c284de8359c8c9cec6bbd *vignettes/SQUAREM.tex SQUAREM/inst/0000755000176200001440000000000013623773626012363 5ustar liggesusersSQUAREM/inst/doc/0000755000176200001440000000000013771206043013114 5ustar liggesusersSQUAREM/inst/doc/SQUAREM.pdf0000644000176200001440000034417113744120724014737 0ustar liggesusers%PDF-1.5 % 1 0 obj << /S /GoTo /D (section.1) >> endobj 4 0 obj (Overview of SQUAREM) endobj 5 0 obj << /S /GoTo /D (section.2) >> endobj 8 0 obj (How to accelerate convergence of a fixed-point iteration with SQUAREM?) endobj 9 0 obj << /S /GoTo /D (subsection.2.1) >> endobj 12 0 obj (Accelerating EM algorithm: Binary Poisson Mixture Maximum-Likelihood Estimation) endobj 13 0 obj << /S /GoTo /D (subsection.2.2) >> endobj 16 0 obj (Accelerating the Power Method for Finding the Dominant Eigenpair) endobj 17 0 obj << /S /GoTo /D [18 0 R /Fit] >> endobj 20 0 obj << /Length 1751 /Filter /FlateDecode >> stream xڍXYoF~ϯ D&] Na qEdՒ鐲cwNr)KNH-wgYҋ/o.^:MJQ̻Xxeelw1?uYŻWqwi M0cY㫫]fɫ+DZak-`nМ =9;iq/i4s֡sųD`s+UcDǨVc3x -b0+EXX b6 JC&sx#2gȚ,E)hf08ɘ Bcl6}1EFx.x#ىQ{Ͳ0I4_gןI# }܂c[QFC,%1aE.q n%kGuRE{%zH2mANUVD4Yg # 6@ h!ȉ/gk漲h;<1sH1vn%0~ )9hϑ^Q* 빿v,j*A|V`V~C! p^OPM ‰ܯd?Os8@"IrT>F~=!FE1E $3,>*:a D\%b$[W"HɹLݨh@slR8If"Ud-g<{&6Oٵ6Ue6R7F!-y jf =P:8#4Nf%8Aᦾ0/b*Ӿghٺ'PiaU#Hą o)VA P]? 'pׅLN ɉ Qa\Wc0M,%72D6hz.m Vq8j՞ppcߵfkD-|E=&d |d@O}&UIH|߲=sy#SNB k5E$IDؗ 2zjABr色l]r3=Z> 3+j\pA8ǘR{8Uq^g\W{.%¯..  $` INZ qKQ;w^f6,o '΍fVr^ Wjoo0E{l=]qBa2󐻰AB40Ux'=LT:A'z0pVzPwb`g}e(}=o MSs 1@|JR7}##}/[޷V^$KE5v_:<+rC5z>Ȓjdҩ'C%A}`˨4i{0-EjZr1y}( \$: /DsKtZ[vphp_3L_;;Fa)3zikw8n]qsX *?baugqUbg0=_ ƻ@ơ= I^. DpJŮs>hr7҈W[YƞQ/t){-լJup+0{5`h' w9v#q?"ancz;`f-Prroy Îɩ/J2-,t࿁x!L*ƾFCzdz΀:/EBEAUl}KsrFﻔ endstream endobj 18 0 obj << /Type /Page /Contents 20 0 R /Resources 19 0 R /MediaBox [0 0 612 792] /Parent 29 0 R >> endobj 21 0 obj << /D [18 0 R /XYZ 71 757.862 null] >> endobj 22 0 obj << /D [18 0 R /XYZ 72 720 null] >> endobj 2 0 obj << /D [18 0 R /XYZ 72 555.838 null] >> endobj 19 0 obj << /Font << /F38 23 0 R /F41 24 0 R /F21 25 0 R /F48 26 0 R /F57 27 0 R /F59 28 0 R >> /ProcSet [ /PDF /Text ] >> endobj 32 0 obj << /Length 1542 /Filter /FlateDecode >> stream xXYoF~ϯ >,.IQ zA<$.HQK*ұ3;Pb;H{ͱyD}z/IYhtxgS/3^(IV?$yF]AOUU7Q#_8_'bьk0zԱwN`l`Db=ˡد,??{(ipU Avg)Swhq 'Cx$A:3p8hj6^LhsK4֚Ag)d^Δ*d5DZvtģ}"p@, ɀ_zU_ч*,eZsVΡº"e4%Xļ,|WWG:j/V40l *]3+x6dl|eRAό8=S-[&x9)4)<^dHli'NyGKf\Kk4Ug"J&IiIc>XP,g L:csg9G6A%fl͞[|a֨)#4b~y/D˶74 XX_3,țA@z2(sbԁס@)P&UGNit4wQAtBxEymNYQEcBc[^ƢH-kBtPriJÑ[rl͛CcO\\_ngZj=*.6q^8awNڲn'ʹRi /wQ1l,YDb@O4ϩ{*<7(76zԨfW{b]4"0qEAދ޴3"sB+O4qȀ>lG MW| yb})qވ1g#1}#G-q !npq%Lɡj;e4@Q6,4?WCQ}xMg5a+ 2S$L} k3Qf\7UmӺn`@]͹_2.H'$[nC!X#q;(b7$Nڜv0t3y)f[C lvag]o^JIںXsAY2`pGKSx7]Fe;~+;4|q5佲 ʾe-ݕ9EBwHRͻ="2jYY咓< endstream endobj 31 0 obj << /Type /Page /Contents 32 0 R /Resources 30 0 R /MediaBox [0 0 612 792] /Parent 29 0 R >> endobj 33 0 obj << /D [31 0 R /XYZ 71 757.862 null] >> endobj 6 0 obj << /D [31 0 R /XYZ 72 720 null] >> endobj 10 0 obj << /D [31 0 R /XYZ 72 670.964 null] >> endobj 30 0 obj << /Font << /F48 26 0 R /F21 25 0 R /F57 27 0 R >> /ProcSet [ /PDF /Text ] >> endobj 36 0 obj << /Length 658 /Filter /FlateDecode >> stream xVo@ ~_dw\CRT$ {{(] &s,KV@{ɝؾλlt|#e`VNV8 6N"@D.3w> endobj 37 0 obj << /D [35 0 R /XYZ 71 757.862 null] >> endobj 34 0 obj << /Font << /F21 25 0 R /F57 27 0 R /F38 23 0 R >> /ProcSet [ /PDF /Text ] >> endobj 40 0 obj << /Length 1421 /Filter /FlateDecode >> stream xڕXo6_a`+ "JdM h.A%Ǚme w_(ǞZGxxăw/b:}qvRؘd0y2Qk3_Pm9 , Zo`tFc__˜J2*ք2$>C՛a2 DU@ErC"<3a|\{ֵ)Ԣ;=O5VV4? K,5-k)<ߦrґ#dH 1A[g$'ԐdWq$N`jeZvҰ(YyͽczلFr$#cƃ0QQI7HYb8]CVOޔLee²V}X'0:r߬P S }R*Hy3>6&1eRR*8o̷O-UprPcDrG+ri5/6{lXH! #ӑuGt; loixThAd‘A ev> endobj 41 0 obj << /D [39 0 R /XYZ 71 757.862 null] >> endobj 14 0 obj << /D [39 0 R /XYZ 72 325.115 null] >> endobj 38 0 obj << /Font << /F21 25 0 R /F59 28 0 R /F57 27 0 R /F38 23 0 R /F48 26 0 R /F54 42 0 R >> /ProcSet [ /PDF /Text ] >> endobj 45 0 obj << /Length 1504 /Filter /FlateDecode >> stream xڝXo6_a{)k@u@ ɰ.Gv%k9Iߏ#EɒAd='?VejIؤij:36S=dfovY`!H{fUMH3V>N^ ]޷Q?h z"B!ZK@re:]Og:#1˦UQD9ʠgrsV+a1zvܘ=30SɘV@apKz0Ǖ g匄q5 "MZx+ٟPnJEsvH*sfJ W ^E.8.Vz'!G.|X5 8kw8ˢyC&Kbn _9yiUK5;q^byMv"oA'"1i2+514W,'.\K,Ռþ4]& 䖓rX 0o 'ތa5~w :R TAgigyݒ.J.YG*]I.NSr~Grv*Ò(֍k/Y? 7CDpn)[r ~%He7eG^ͨI!rPbW*4(yQ@߶@"pj}I7e;> 07u6V1<cg]KR0va\F`Z! ( bP@RUJhtO9۸V-Ba˾it)#i )kL#.6]T!̐~DJ,؋]QNcy:.qm.S'AƕV=5jkwLR@)X 5Qj; RuiDp]V⌻.@,;>j +GOo[i9D'7/<%F-/wZ8J} P;j0gǛS;ݷy%7} bVv-s++u-k;ݡi텐y<;4,Cwj0ZgY/E ^×$dL v|b$@;mnǭϺ~O>oM"Aܷ) nq*K> endobj 46 0 obj << /D [44 0 R /XYZ 71 757.862 null] >> endobj 43 0 obj << /Font << /F21 25 0 R /F57 27 0 R /F38 23 0 R >> /ProcSet [ /PDF /Text ] >> endobj 49 0 obj << /Length 860 /Filter /FlateDecode >> stream xWmo0_ &hI'Đ!!+!u]ud-{|Iӵ $>%##wi;%JIg0vt$T8wFsVPP<|00H&sڇPOpiTi{? O$߂ :/1u26%)OMX;Zm:NhåP b ^X$_5k|-D)-A2,ye nnUnICoRG>/<lHb)p{؜2bbY| Wr?A 6 rŽ FFPȰ1!%Bw]_4rзoj2QuY31Dsea',"#`iXPqL(QMdp ; endstream endobj 48 0 obj << /Type /Page /Contents 49 0 R /Resources 47 0 R /MediaBox [0 0 612 792] /Parent 29 0 R >> endobj 50 0 obj << /D [48 0 R /XYZ 71 757.862 null] >> endobj 47 0 obj << /Font << /F38 23 0 R /F57 27 0 R /F21 25 0 R >> /ProcSet [ /PDF /Text ] >> endobj 53 0 obj << /Length 781 /Filter /FlateDecode >> stream xVn@}WXJu$@ R*ňRu.UMԹ+{9{c Gңy8B-$~)'uܗ=>+{DGQlN@\<%B7aFE{l1t!Ɔ':iB!^+3+N'P #_ia߂ |`I1&-y S`P' =P+b67[14e{^76aOuC?&kUS%nWNs#{tZ|vLj>3,XɺeX`\mW;1 ZDR!0I2/ 5?L Ro4eƽhy%cwB^BRUi 90Wӌ]524LmNMŢ6K#柱 /.2CZSkNY [ϊKPM%D^䏞=[[!_/cRp<5c'7J3y2/(j*o 0g9C,kG>mQ옑Q`xߐ!O?C@rf/Rduq&i& endstream endobj 52 0 obj << /Type /Page /Contents 53 0 R /Resources 51 0 R /MediaBox [0 0 612 792] /Parent 55 0 R >> endobj 54 0 obj << /D [52 0 R /XYZ 71 757.862 null] >> endobj 51 0 obj << /Font << /F38 23 0 R /F57 27 0 R /F21 25 0 R >> /ProcSet [ /PDF /Text ] >> endobj 58 0 obj << /Length 415 /Filter /FlateDecode >> stream xڕTQO0~߯hKh ]!1>l&|3af&}ce>\KY8pگA0 c&(%YdZ2cG 6u]TsX^`Mj[ DGȂF\O-@~Ȏ-`4VAY!kz1"}F^A ԋ `xCm!蝌솈w+N`uS8O`E^nؽ: "]M۝.h3C8] NvAr>{|jGfr}z@}N[n??~K%&`!1\2H7 (3j} (Cﱚ9+aln`X]a?3S`테q"(̴ؼ ٫ڌ*< ϵf^")/ endstream endobj 57 0 obj << /Type /Page /Contents 58 0 R /Resources 56 0 R /MediaBox [0 0 612 792] /Parent 55 0 R >> endobj 59 0 obj << /D [57 0 R /XYZ 71 757.862 null] >> endobj 56 0 obj << /Font << /F38 23 0 R /F57 27 0 R /F21 25 0 R >> /ProcSet [ /PDF /Text ] >> endobj 60 0 obj [272 272 761.6 489.6 761.6 489.6 516.9 734] endobj 61 0 obj [862.5 875 300 325 500 500 500 500 500 814.8 450 525 700 700 500 863.4 963.4 750 250 300 500 800 755.2 800 750 300 400 400 500 750 300 350 300 500 500 500 500 500 500 500 500 500 500 500 300 300 300 750 500 500 750 726.9 688.4 700 738.4 663.4 638.4 756.7 726.9 376.9 513.4 751.9 613.4 876.9 726.9 750 663.4 750 713.4 550 700 726.9 726.9 976.9 726.9 726.9 600 300 500 300 500 300 300 500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325 525 450 650 450 475] endobj 62 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 525 525 525 525] endobj 63 0 obj [625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.3 531.3 875 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.8 312.5 937.5 625 562.5 625 593.8 459.5 443.8 437.5 625 593.8 812.5 593.8 593.8] endobj 64 0 obj [544 544 816 816 272 299.2 489.6 489.6 489.6 489.6 489.6 734 435.2 489.6 707.2 761.6 489.6 883.8 992.6 761.6 272 272 489.6 816 489.6 816 761.6 272 380.8 380.8 489.6 761.6 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 380.8 544 516.8 707.2 516.8 516.8 435.2] endobj 65 0 obj [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 484.7 667.6 484.7] endobj 66 0 obj [514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6] endobj 67 0 obj << /Length1 2003 /Length2 13596 /Length3 0 /Length 14815 /Filter /FlateDecode >> stream xڍPڶBpw ָKpoFw4A$]CpHWWT5=֘i(T?Hۛd!.,)%IN;;+;;'2 ;2lGj*C.  ;;]?Ni i+;B`@33{;  XmAEVfbW 5M_H{>g3'33*z Rvv 3_N sd@!A`_c:iB 9Ǽ,A.vvv>^0bo'_|c|@7O"d9` CT5,_ g~3|U=OW̦ )#))ifpp88|< \9=@_t_?/k)ۿ*#tvvr;*Ho?@;#^Jڠɹ_wAbic;ˀ=@`3_vͿ ;zZ,]f6χ&v^[ٛe<UJ<<ou4yb+5:/ IeIA6?H&qAU >ZE忈`S^kA\+k"?赃 f_f }a `/~ee`gW?_|nrGwO__:qށz#˟|%n8RtQf{7A:9>?9j7!؛ XW4VHlLli'3x;ޣ#$2 ZqH\xG%@}PhY}| yn w4@EC|G+M&ѕ]5 ֽ[֣P̖v9cKfA`MiBJxRDFSIrLȾ\z1w^K%DDz0WCޒIyayF3u-@GmEk{ƁREafj4{[ 3'8Zw"K9ڸrt}% o M#𛠫/y4EvwtTCRCHTc 8aE.orC F0z6/.fb FwoVg5\C̋A1ւAOT*zKb (AهT9IYto-/oTIG '>왗K+;}oQ xD%-}K;>=uhMwlT8YHF4ĉD9ޏ$`4:=kdg jͮu5meV\z mz.,t) s[cLB0պ"Ok3mX]&1ת}qʮN3 "V1A}#SFupSț,#^ÿɸJv7{m Gh"GYfM3h,v#Z>5[XO\**I&G,ٖLvhv'ݒOfYh|rZӁOp3[/ ih5H|C؅)CARP3 ,QӜ`f`U_bJ1aCvX F{d5,뉨:x^ q' {~-'btB*J §w[m1ΐ J2ޮqe};z>AKZ<,eJ{A!ɡ86O&tF堊s ] 0;'x.joqYiHKlbMա1mގ1nUTw mM43_?z8\p l7b$Ĺi2T{!MYwZ:l=dTCa!`,_(Sx]* 7XLz$OxwGdE*,ޯ̨ZS {ُV I68it*+ms]*xn;QeјauU=h8x*;xjGF wyn"Vڍu{=”og-p5PĞHW#)n42%lL".K{e"%a%qNWl|5㗔_/۫OM)9ÂlK f_-љj#L\ZހDhۙٲu4>( !7ОLkghՉpHn7lNc ߂HU1+,fTt?xc2ݓ[U%pܭLqcz$RN> vRgӾCgAj ,mY,vYHhfݐmfGrgd⮢^hI*+0ji~Qk"ߒ Ŕt$;;Undq)ohH1;Z̀!׈ҐRV灙6kNu)ȅM;psͿ0񢄻^Ma^d*T[\-hA/a>-8!E4֧M!]\Ugp=/]/l%@qNBc,p}@:'MK8TnXm3Ԧeh T9L9~j,+1)ԅ4`\d.zNb(gQ I"%lCJuZTk̠zg&R ^ZyUznA(HG#>yCQvϭ.^ꁠWw!L/35((qNK;y4ݯT(>v g`SzBam<\y{Ew].C6X5Ǚn*hOhfxC_gE(˺fH;olEkwJ6l%3paBoX3PZih59ŎFDwj1@P 啸h*wH׏);zGHWSqK{ !t PPd׋RX3w)K|hSvl8jm"JaL$}~ F)km+bƻ+C,l{@(^aA+Yq̌KsI[~hkҸӫm7_%/+F[@Piqz5=uc;IUrӏvYNI4 38̻9"wO.]LY[iD)s~GQPZnx]"A];=9נITvr:즄V'esj u@^ANGyʟ*ki.Ɖ,jZ 䍛Siݹ_i@x%[~+gL?=yZx}`4~++w HgsW{Ӡ緣m6vnZ!<ؾ $pU[G=uee5x#¥.4wQY6"=Tɂur>~ i `\@W]M=e~Y=%׿né礅G"VXC,aZ<+!@O{"0߁+^=l`ݧ$]p6^݆:d1'p-=t3P1#̱x% dNPHc(}36`P$3Z;>*Q\_jd{)U3\_LpRkhtp*7\ʘ.ܱr^Ky" s7rH[6_H,P%'ifφ5W# L8 YՏmgCZ&hP=]=Tgjfc;$}㼠gM%֔ew%AtZ]F4:WFJ W$4d S7 d~L>ڲeŸ:p T|;\,N)!h#IkxB~б ЃAzycB!lvm_߭6sJ"sE*M2̍Xi/QGtbP4UZдIe'zWlq淚;tGz&RN˨K4C܇gHdXh EST%#}[/]MVXrn_:wlep( \{$v[4e' ,,ʡ}3'qh]vO%GP&F|tߥ"en8&Oi})a:^}]ɻqCJ%'h._.FeSd$)EZ~)eR%qh ė#{t"AaV_T `<l]G7顫1QC4>)&rM3O ^c~ j~sŒn6Z*~@Zp|t8)%߶E2[Ήd!B>%,(]%/LJz}HB -A(< =:;- \S\пbΨ!<>w~a]m4F{Ҡ yQi'f +ogD=<`;F%g$3a9mjc"{lE q1aq 8op쩍K q"ჸ9!Z~]A٦(u-,h_c[%hF)]"8w@׭l;q646,٤BF~l_>Tk15b,>/!rV\𛍖>OeeԚRnz.?+ >Q,vBǗv.͏1ICE!ْAH*JI#{($3wr8]yNC4x[ޔR#<^:[=Rz7m|U f+)9wA?>leTmLtϼ~s@$O8Z?[O̕w$Cv !j]X ݹQhG&4g*3UXCo%u odz7r1݃ոwz?=t"-WMrM"q.g7F{YU,4p3R_z A)pEMy;H +"#Lѐ#v۷teeB=0Ja)W%{n/nqMwxnd<O1KTx&Ւt9rfFC#k4w伨Ly7M &8A= AS\USRե.b[dTw8S:AֺRN37nmU͟|=u9`o@6Jj־.Rhyک=LMz7:@5Hd%<}/ ޑpFcW oJrfIn]nEOq9(8dkUqIy&͇ z;jt&k$qvb܂ݎR0nXwܰKKⱠt7uԮ^֟Cʎ_rOw*,ehv6!YõWkOc`űAt𘃊fnmqQrq&>h`:dS^g 4VvXZM]HIǢzn{J*MS capˮۙxhꡝp`Ա5{)T#;~K6[F`K.j$\6D]yA iM&( "WFx\0ak7eǜeMաXNSrq&Š>Wqe @Fd+jZ&ԛELM7F8$/ i[) q8^st`s_UƙmW-Լfv>lI{ pGSa0>su]u$LH;pQh*w>O'Buʂ`[q ? '[!؅-i!= `$E4~$8Lՠdkp`)6zeD=kkЏ1xd5'o˱>.bEWQ; 29mq`bxFxzP ѦR]S})LvX"`lH1+ԙO 7d5d]1-^l\Df=7 '\ ;p2Ϭ}?japMdtUzQڂ@&21\mkba^?tރUt9] rh VRcםF29*{WӸ"@A]o(EZۄ-DK|a(>mCDL8d4lU5* âQ~l=$L?n.1 1QĹ6+(VA+:41^S@_c7T]#@!O-3=Nߴs--P!6h7Ԓ7MjJu>r 6 -}A84b(.KCMz%nII-%F+)|K8_=pkK4>.^ɳO!*KNֹh=ړKo`+<~9FBV+cmOⰓ]uڮg_}T%7/KX$29vcXOwS608s\+ilG,*7e$;jc}(lHn:Mݚ_$#)bu+|V< u% |ɼɶH$_fRxX?}f=fɆ`{9FU wаCp|yWE ?M.?IrIf)F4ݖM"փceGuԏVM?Gp望q~ӑOcO}ˍKDH;)I8c1=F qdYzu+1>ŃO _ r5ѯ(w2 ]Xfd h4s+jmKbN`d Axʬ4f w@BofK Ep˫ Yn9 n]\a>d+zC9AIj>͓K%Ohy=l [&4&\T`>YV#"o'g <$`Kxs6+@{.~$g^U3(Bp\5y9'xX"fo*ԷXξۢ&ZOO}jQ C#olI(׫=>u\X%HуEr>4z-Cu+9,O<.v%3oLX>im͍!U`p4Wξw/lmx@ZZe%D~1 Ꭵ@']/qЄuk6Vۋ$¿bFǫR3#*uFmiu@>~;u|3!u5~0`̓= de%dgzLj/*GGd'*&K{ gS+>G(FF^$Ģ!ƲF jFOJ<^荫q@GQZr3Dan2?Wʖ\:/DciE}oa"^"Y2øi&B^atX=jIʤ]TQDPC&׵]qۙUigWUիl 7ZԪ6)Dov+l}d[E)("+;AK<+rB{y[/e$9 54=j;خ3m^څX {Y.;D-vםq(UҔUKJyi>bW~%G͊A$$_YS&ƚjBmkī=> k#rj(z?-;V k`)vSv<3 (\ vdewT{:?"Wi i W~ÞZ%ɋNWgj䷔QOt9t\iЧEKaa=yР8wЮ|+.5XjW(]uoK&+lUZ.DgJ>DmؚoaaE}]#c~:R ţ;3rb^rֹDJf؂lD<W'bTѧ Kms6ũVG}A.KyfXi5g7ԤTh0lV!yI!=\ZR cHWvѧ|-.yuu|#aSDe.%&Fwuk o5mal+|v!`pÆH2:ɹJ:E 񣉊 #~$O[h.#:>D|@8EcP` dB }xF#z@慊 &SߺAhkoS f\|cKznX%=Q O?QCǠl9/d?75=jLC'+6ڹNhG=,sbEfcC-kj+X͞ǗH~C9_Em,=m > *D:YK 8!Mtd `n߉Dh(hjQjG{[{[袨5{i#A8q7^mk[nrw]G溣u:+xE@٤ TAIjcmދw%I7Pf/"3zN:peZʛNPrBI#8Y)psj p[mwn:Jj)lZR 9\l0({ئ+{3ӀBZJTUR\bS\0;CBo@>Fנd]_LD"&pe4MNH|t8a~Wϥ-NwB^?A6 9mv5p}Yk y.ZMb[GT칂[u;(_{&*Ϝn3Ca1iF4|4Yf0a2N~։ yƊ$R{}OezG #]#Uk? M^8"|'VQ-7NuQ?x] m:80 _L@<(8.kMomj؎0 me4b~"w) 2A 2q n/)DAY@2Ng&x>G[/>"~Y6(@x 3 ^]fO#OȍrV:|0 SpueLh|餋7&X[o;@tY e}b endstream endobj 68 0 obj << /Type /FontDescriptor /FontName /LKBAXH+CMBX12 /Flags 4 /FontBBox [-53 -251 1139 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 109 /XHeight 444 /CharSet (/A/B/D/E/F/H/L/M/O/P/Q/R/S/U/a/c/colon/d/e/f/fi/g/h/hyphen/i/k/l/m/n/o/one/p/period/question/r/s/t/two/u/v/w/x/y) /FontFile 67 0 R >> endobj 69 0 obj << /Length1 1412 /Length2 6120 /Length3 0 /Length 7085 /Filter /FlateDecode >> stream xڍuTk-("t)Bh&$@HBM^CA(]z|?߽kݻV̞yf ;a UEѼ@>I:P ' HnC;A?"Q0\!PS@- E%bA$@p(] ⅄;sb< P$ @h3D0 `àhv@]$=<<@(>^C;((  r`C  $u8P8 @uM s9 ?d,Jg UM>'C~AN(69l_ zv?H Ň9g5!Jgg("ٟ2 c݋rp-;bs UWCq1!qQ;<+paǀ" @#ݠ~>;o@``4jSG<X??y2 ;yb~ee 5?#' "(@ : ؟>U!^=!p]L.-D/7hݑӯ8o9Ü uCcePcojA!07AX9( P0O(D;oO9P] Ve' ! +9EXQ8>AQyaD>@L!P_hl ;$hQO/KDnH$_KP'L45K8ք|R]Dwݥ2b% 3cZDuP񍶢CZ^xTl__}sB2Nڀk(Ye"k'w>LXUQhv[{Uq=zۋF^#ًαK-"S_hH{T-Βcx=he- M"K,|lEvK [5J{ZDJy{7M3"I[^: RND:S??Hϩ5NPLX[v>̑PV|Acj،8:N,pQ "Up*iJbkn}vOoɢVD'hE@X3J"fbR"n/U\BaV-aM1Ww4mEku#Cv woxS uǘo}Oo0ш2a V!l<O[ /&zeݙ2KBxqSz/OE"*/a9D!̧wL}V}ݏ>A-B]$4 `18^d>X>$ ܔ[Lܵ}}+糎D%A}u:FoN>s8^ cplc h5+]cÂ$!%:k \` J0?,W=(a#6Qߜ >% @ɋ4lCQ=,aUiUx%7 ^//e]$ܟF@eJKeh&%;wX>_܉99 MؑM"O衶Dm%þʮ>]m9Z!ќ54IUujt}7 2ezK-}5ʷ~8fm0?NJL .|t:~,nnvWPbUilGsP/ƱR͆BALDFYSOh<5_7vIEӗ Xm>߼={PQs 8#@BX̀Px%XшÅ7}".8aR#ۆ̵Qε./6_x5Scc'o(Ecۤ, Hߐ+ n0*J?tBdgtlkK Pϳ n۵r80A ДU*fWٌfTO{66D^'"kfE];]}Th$Zp=Ml3#8yT/e 2*{_3}>;[ĩ?6bh^o)ffJxpX3 k#W\4`r^ep*^Lb莋ytw MK:ҍ4ˌ?U\ J F (7nި%= E+|U/GɷhԽa$ܕ>ZrTKЬ9u?1XPzB?nj:Fx1/lry4p@ 2]ϷcTizJքolnZ軤)o,lx 1JTAOa/*Fȃ6/ ߽(okAWִaU1Wr\eA`jAAlgK=sugӴ;`̭MK`2cɧZ E#ƭW )4G=rd[|&D2k$Sddı^ sɕW+ <fkdkדn୶q͗\ ]b|{M苫kVOrvXZ$83RRX[ժStj&Fc3fTh `]kw,ceJ y,p@:CεTb\V拵wS &0;>,r0Lnur=$F&5z1JND,~bc/aic)lFia:hܶxW)PЖu :tY||\7M;$Gt%5u_&Ȟfs!,"xSïy81dų8oZa,sh 舧Å$HU@:{hKihHuPTAqw^TZ<{Ufrg(%|&K#= :0L oAazK5Jz)۫x/T1[xFd&C,YΕF#ϦV=დ.uAa<9ޝ.`~C/JBWY&o$~{{!ĽQ@}Xhbۻwj}L OR2.C\:w NlM{0J>OǜO:|Σ7b%0y%ǥOT@9) +F~WF`9}dWYb~/[6AlyB.R$e3EfAq,._qaK> ?vφ\;^Z2{guPq΁ֺZ-h(b[:zTIe~?eFˌW\BAv36t[t/Tw)Lj'r,oLr81zE =RN9pn؝u^oBj)^H߶(a鋣H?+aPoi1WpXGgs_D.=njGIdj>"}| ;AtNiizQ{7w1 G?ië]r${UHڽq t2>^e }wHtq2njL`Phw0(yMX[u"ƦeCHȼuUBFQfB)E2UI&Ka .6?fC UtIۖƵ@Vzu), Nba$g{"V̅sJF#e7:X&n+b_E=8ZTr<@4ō.JȬ(4Mg˦[Q*;O Bz6V_)$;&q7R4t o΅:W?& $>.n; KxOiP'lxABBu)1"E7ݻ̗<`UBcH1<Oo-%`r}%vd!HVT!jCl&kk_?R3Hu~z- b޶U)>T{#C\g#ީ~NWцeEfժ5I" a>֭޼z|mPɸh!~j2 )6#80%Fn̲e/}sDqIGLo)vfTXoSH2TuV fJ> IpV-Kn[oowKpJB)<Q.À q' pR~Who}h(lpϭ)cމ-V2 L9Me)aM=C^E8E._&Ct}wwl<&k{Mܩ3줟Da9;3y8, HYfqcaefe}in*( =p .k-qԱoʷ&uoϯ6E0 S:~kZSg3XsrKQ1Tz/d d@D35jecRzFC[(xu-N.?wՠ&)K}=x v+YC=a aek='^6Qr}fD|p \r$ȉ9 #ޜk!y6ȁ{tKLQy6KV*<^+$ @8fsۣ~oxgӅUZgCs+|J|Yc.jԄJU iGE;Kc۟X\QnSru*9JW1m暤A'-sp62kMvRo S*7_<؟V ),:]gzF|imkuL}ܵc6HȳqTvWAaVv@-g j[P2[w>5#k&Kpᙗ]&P,f#ؼȑ^hlP-sŤNvvbP.#8| O^̏Of!R=̴{@߫D`'1޹+R[ i[ܻqW$9xa0'OFiws({ڶeckіK'r"Ľ˥A< /|31/i9MML"%;.%S٢e1i:#]9:8 ɒCĐkCTQMȂje쓦GԻϗq}OBޗA.0u,*Fj ǒu܅IW`w?4jtJYZ\Nϒ_ mK}.t5[\%zx&M1CUX"nwe54 "gh;[{ł#sފ1 ᭷J ăqrB<иTZ![H'ڢm 66 ;=wo>BϢ2!?Iq װˁ7<*\:(4+5e )28[ajL%:*|jJKo"5^?ԓ~\A-pkN͸QY^ $sbQ}?FC@Jٗtx&w-KwZd'Vpk&ЭtOB4p7oӥݒ;T~| lz37h ΍uVcs3vɂhfӧpTK1:>Z!G+P>{2Og:|sP(v]m$F]gT !71@C#oBo=Џ>f2Dx ^!faIsL'OX.h .&Y]͓k>:a3xR1f3+wZ^D8<*U8iNu̲$\]lƥR_ήV6{ր:'JUiNM%kH endstream endobj 70 0 obj << /Type /FontDescriptor /FontName /DODKXG+CMMI12 /Flags 4 /FontBBox [-31 -250 1026 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet (/A/period) /FontFile 69 0 R >> endobj 71 0 obj << /Length1 2364 /Length2 17687 /Length3 0 /Length 19074 /Filter /FlateDecode >> stream xڌPZ %8Ӹ;w5Hwp9sf&g-ko.(HTDL팁v gFf^ +Bo31GM=NuX8yYx< sZv {|PXxx:ZF@&F6U;Kpvebrssc4ubs4Y:[TN@GW)/#[(jNU̜݌w 2:ޛTe@r W!KпLLl@ s ()L0hddojdicdɍ"wdhidiEʼ,2Oh.'k syYL"abϤtpʈ;݄ftp033s_^t/B`aZ8 ?@;Ztw?齯OΗIBJLYAoڹ ,nn3(Y{ ?2 3;þ]}4`@l+߂Um@.66rS6wκ8-PMwVhjb2F@dn_-$-݁J&/v.%dd׫``af?ebr8o\-%@&v0VN"rpXޯ)_; `b9:QN_'Iy_".f`XLIb0A\&?S/~SAT~j;??蝟>]giGqLl?v,:Y&w6?ާ{ca{g~h6Fyl,` _~;俇igw,<-D,ߧ|]w1;;?9SAvyO;?bY Ymu%ߧf76߅ppso. ˻ _8Ý? {-8w&nvHxW]Tw]h^]3?2W:wќĿ.݁&Kv&|Vu5"n i4 ^K.(4Y뎿EGV%oI^[`۟ Uw M}=$'dP~qlspFQ*wr,[Uޫ\69x"8'Gg"8Z wԹ߳So$t>'1lE^:?=*Xz>#=H]*)ZwO9ibs@rxxOI1K K&*zM:4=bUv]披؉^1MцCg1N6L;F[O^k>Vc QkyV[ܥL6 ōIPބ}d@\qD:(l"<1dYylJzuLj4nGXeeo"ՕyY_ab!6'\p~l۔ }-֬컞>+d`g,3WEERIQ"w>AЏ[L!0ͫ?_6/A!ɡWӊY?8NyJ0$(Q[U}bUpao=ʌM-ma~1fF%ߐЄ6G(ZȐ):}m3w>1ްZs KLȿxBεU*qz܎d27@zFz1$/ܮ[qrI\+Q2><3!6 70kOH9'b@g`&+~& L.xG-˱)5=db#sou;e0q<8tA]H{S>*SûbN `?LXPWlӹ'Nh EKͳ75~le_tryB[fZ _Ì,718M~ ׶~kttL4YW¦nK.fJ,lfOUYk誜Uo^$] Ĭ4"ٵ@ RPEKJY pw-Zu&ܡKH<(eRӐBUM͜Ѵef~)Q}֥s+Ml>P[J&zj,nH #Gvȫ4nx'?; =P.,5>B^mF^$ϜGF95/>'WoSN9ah8{Jjb=.prOU$Ep))zht67T)ZӪ!5QWrr,2RKTȒ9BiE V Ǒu^F$mL~]22<"^e *wQ WzPCJj4_8"`i[9[8M 9/].yPHv 9G9idE+a='T `j+LɦmWcrR摟d>}G8"GX0$#݆PqzfKم}ǭ|WAC?&a`V;s6liNd\vBJn'am@ŔpzF}~1kZX*[*^S$Y=#~ҐgSNDLF<<\ժAqSL~cG2}v `/ipJ"zfXNS6$o GxdF`cj9p ͤ:]Z%z՞ MH`S qr KһLĎŁhJQ ӣ9gm5`Zޜ{SG%Pjg=Ƣ!sY`Ij%A1)4<Zu5k6<4s23Ʃ[cv,+=iD%( ;bΌ:Lg@A¯L In9D~~8nDI;t^PFΐ3  ߐ@?"I}l.%(+PpSW B\M-H%srZ1B.ľ/&ۨrlxHtn!Z!5`t:y="%l'_-6wFzނнUNԫ?]FS X>$ ?TeuGhMNxEke =..3 lR+D=G=B9+~Qn^&heXFaaiAtuY9Vyw=eH 59E"Raԝcx+1SPy? ']h$_RJH@5c!sq1/CUWʻxׇP: DO"UqjLtw@Kvsv$w!'Iv(keᵄȽa_d:o*uMՎtf7-%x܌U!ڜEa=lg46f_@|,AX05qL#iZgA*diog|"UcQ)58wvhx[Α#]vEQȽ NJH.("& 7 x$V`O&눭%?>G6#ARbH,JMl/ y*72FtM]E\xz&y⛥l4Z}I|2!$%s|~_8IWB!IħEF4Tbot#s1c"0x(a:Q~9rn6+wrLx*.bg])"Oj+VI8*U.\ 'V6lxc, ]I8MJӟ|}VJP[M#GPSIۺ`mԟ\^"s?*Sx 7crHkXsSKqߞ[?W!$j:1&HMd#^| x|qcd5ȿ$KMHw, Z( :n@*ɔU ]:yRXė*З}BM }G>!| TA,)KؠxP{Yԑt9 A .Eޙj 2f}ذ&UY* nUq),ߐ,Äv eEB>d|ڑ&k`@#0@b]8 9{Q˂QCO V 4< 7z wG8ǦH@0;n##M/pDEv6fTN7y ƉVx̵D{ml38G^G8N=h|88ϒ˾)9PY}r3>^вmى{a*3=۞gUf*̖4* xE,fv40Cc";zŇ%ⴓgi)-|:bwiP #W\+Y<[ n،P"ݽ?Ư* 1dE[of>ھqV»*m`JU?o*Q֙Q):ŵn٘uXncl64 L5mA^kbQ@=L.dD?㒏~aݳ4H/t:7$;3;n n {hڕ'`n_<1 c7Dr{mۦPJ_q S4o|N5ܵ<)@xl8COOfGq#,&fy"CtSth5 7:a9/Pqa;4 :$!>lӵc3a4F5R)`n6Lڮc f.?F-w>?t^+N\˅ G ؘUXA \X_TYrn9Hb$V·HD L "zVa;WJ,vnZSvaNДTy "_|| ')^n`2|}P*v7 ь :\v)B)0$>(T׊B*edTQJ&Y.`Z"=;loRH [0NbPr9XJH?B*{xm <JA "MOЂT%p1Ej9N=rKPnb| Cj4LyX}]/B $;FOeS2MCMuqnC" ~:>˚U$Sp0Hn紀za ͽZ"{)vL,,)j]EDYZZZ&:>q-"GV: [` 猨: D}$xх$9f9?m>b ѱ{.C癮6IKG-|3ztrDRDi¯"%l35P,x R=쁘#e5܉2@Xxf#$qb3_+vnUzPF62;Ȟ?pj ngQ䪤.񼇬l\Fu|?LCγ<)A'af'DQ՝YG Kp=㹔ёbp.G/*`?n~kf})js%e4^ڱ8?‘r̓bjd<ȧScv\@.P#``N \\m ua≉۠4h>x|o9e KU|@+]CJZy˙pTe^%J&+y(4x֫ S@٣>hQ.$V,gD"Ao#TozEf 8 W9zQo&֕X%{9l*GS}^rbbvmM>ڭD]2@_q&Q(#14yHvd~ܤvlfĈPucF섳*;qmlg_jv4Lj;wH 'ۿ]s+|!s6 $;w`$8iUq緲ՓtOXEk[ e*1Cwf֏Bԇs6wiSt[كn̓;$@|oIا) YSVd@̲,Еb]#vUhW+u9wTiS{kbϏ9 VSڀLg }.wd8P+z_]ӘEeGl!gȄEf Я5~La=)k D5. SpqcmL 1`VRRqfµ.cǟYtGNKدd=d&s4Pa })! LF9IfUh'2LyGH /x&.55wVgIp+()(X^?ѭۜQsK[Vc7apPW[ra휦spKI5mAF{3A6[?߷N)Ra2do~#:?"0ⵚ x@SR4Ku Ebai,ԋ&3* qqFuҪ {r<uH\xԅu XmϯXPϣ?21ߝ~ҷT,h1Oؑyz^N&rHW@<;f,bnIWo=%'1` d'tQ&9שĊe`r?]DzcC]7G&S0vW ##-xkǮ UƩ6t~^9,a담s"I1Rh9yc)5 ?VJ]n)Qnk.t| zz5[d> 6B )baF-E蛎%98ךo98o~k-~`˞uH G*Yđ $Q⻢ƎrvZYASlh|6ftXW(9[#41W=?*hh/d۽#Pn[UIц"tmH_DHWzLg`8_DU[Z#yiͳf\ޗP{8v41;;H Kh<~l&XgvxFgK|tob,ȐB ӚUHq@d^ I"sW>t b4 dND'D𠂐_tTaU^lt'œ7G(JS[緈G{bߢz{¬؛= sUQ&*~6^uO_&_UI]AYE?A'oV7 )l"tƫ.=*TpiĘ' ݃4IW=ElDP;*!0b'X~L2Vk)>'H:Y/=2p&aa&} '6}26Y.4x. C7kwl%5ۥBB6V,xY*usۂWd;F7@e Β7U !q<%1fiKF;~ T.r<9f,DnWSӈ18 ?Q Jgʜ<♏(va"&u%~z 8G>Ti|9)E$L/x+6̧' 0wD e0)ҫPn74x`#,}p[- UMj~l#K,/4!5X9T䡳į ~…N4Y'anjd7G[]tQ.ZB4O;m}╫0?.,1QmKgq$ TF5Dq9OWh\wmĴ֏H\y )v= v6|C}?$+r|e[W\vɂ$`iN@@Op炣h^_Lb"`HZЁYX}-)@kA6+ ެQUtJ>˺ǷfOP}olr)A8lT^5?U3YWC%O`,$4|hu*Txݥj&SSVH. (|\Ypp@ ҋo3iO'ݑ݉vdJ2SZ+9>I ֣t귙]4M;V$})K œVrur):㠗(QqN)ѯ9; !L9c`Kㄱt:\/z}spOmOaaj~)>Yچa7j,5ę3:/y rT>1݉TzM}# -T!wW.0KIx@#:]cuAkeS)w}A8B޺*r4?GC|h#5zD,!(SkEDN/ !JJM{x(=.;ԡܝi n3!j z$; e+F{ MJ{ e%y_hrr.N,U)K1IMk:c=},]*ֵFMFy }0֔6޽E{Sy{ [uUr^ZS0LMCmrv%=HbJJ$To+`5y6رmm1O,bD YU#u9L{(@SN&$ 5EMW1>]KJa7<(_?̺7l;Շ[" sb7PQ7,KSRcOk7VǓ>i*Kf %>,ݫ, "ѠQ3O0!*Z]B o<ۑf]#Q'!!kWʀތkuݶ&,ڟK'w1|ae' )FڥIupvռ]x@Dd04>9 'E5DŽ4-a\LSBv:?~~qe"xŸ&UvϻC -OJb::oIUyY9,72wig&KO9Saoऺbu2Y~Aujy<uNƷ<&h\yTk! $ɍϞ|#,'h!|U;smLzq.ћ!<2w ?a0Ĺ;7ZVh es4v\2>h:RĒVX"oƱ~Qh)z ]>8\x`X·"U6^ L9ՂZr|8Z8\Tu0Fq @Psv޴E _j'y;tȎpAӛlm@ξ'ZTlNÔZPG 45]ٟoF2k4mbHv˓-1t^ 1PZb?r3c.)VIaY݋6SZ!kS~L2Y@8''{s1YjyJ\~L N^tB%F3aeYL*}<|:tŜ fyec5^Cci}~ RiXWhD"ueEo҆DJ &xԠXA+65H96MU dLhRl)dX5sMdUxosѝЄ<5\1 h["{odxHiޚ~0ΣXmP\fؙTUt\~ʦeD_oÃ,vw]2br/Io=LK{9GO,w qE T=S0x덈'Q\Ӣ?WHCEu&vתp?cDnP~)h{ \N.ռ bsBWW"$ԣ{"+L ]CG$y15&Lo*Ć"3sH8$'jI *)^Ϗl:A<-<%ʍcvOsϾ`dg<} A;| %[fd:+ҳUgK7j\(Hl~[/;ĔL=Ϟ;7siI%Lf+BQu^R^:yt$|/y8w:绡>>fAճE;I n3;݊Bfu 5a2hO fy Tr_'|^JP@g©p UwID"n,!g _݈e! Cfi%ѬhcI[5dҘUP8_x1a#".a'{)Zl=^+_h<4rYgqEPxirb`?͈zq P+fQ}LUNAI$+w1bZ׹vL~LbYM-ʶpdi dQTuU4Lj3G]FJhpJ,0"cև0}]%Q+oNfJVho@K,:HiI–p;D㖤iL@6LeCXuZ ?kJB[Lz5t2?A0Md& WmioK+*;euFsoRJ9f8Q6jrXlc5 {]븦\޼⇁Kt"ɡp];rnGƚ(]\,fӲKP֬EBVΏ2ԐË#aٷ9hn]x9a:O;&x%eHK)hIl/8W<1T1JwlS0im4 j 'Q}Q{ĖdzNr{1}8 яViDp7AQI.k \y0%@HHǚUźqA]?͠NwL<3 ;;d*<*F]C- i-oτYx(G{ yj. d7$GѤm&3mO?%"GX!P0`ۯM]^ Xo:wn%n]1aE:6پ'3$f-ek8Uk"/eiim+]9L"a"ywHa [8>& hyv5S;كH3𧫠g i`܄hzO;0J3ffn2Xq}j 4IHo3qVOgZF[.kV-I&M9f_n`aۈXQw*m2uCd|HP:g^U1Ԟҭ=3b!a4>IRk\|5m!2CZƂ?ʍiRƞ%{.a36f6鷖^IQ!WrwN`?]9 նAr_^ tҍ))u]>#DW6,^;-Dt)yE?lbk52Hd,ĕ[U< R=ꦜJ!v}oQ0jW -̑sh@# Rbs9H֡ H~ I,7s^S_b#p:-+U -%; 9wIjia.ۛEخ_JHf;@5[8)/PeP¦On2TkkOu/GPElFd#B4xq1zղƬP0|cH%[l`3|-q.qU)d%Mr0Oqa28c @15rBVj)tnoobd0Lؔ28N|"-hb/ LIR s=P1.M6/&\: cM.ZvdA[Q:|ۥpÆqq ɥ<9YX@\f ` :u/ : 6)ٸQ^#vy[ndx%NrƝ="gA$!л>Ard3Ԁ@*CqMMv;+J枱U{_8hk4`9 Ŵ 䕏iET=2U;s VRZz k,3ө'-rjf?xUb*@#A ]wMq 6*M[ ޑ ҴQ4g.{8b*s!ZP3L}c>Q^uI?Sc\"&7WGSV0yE9c2\ ?gdhyzRJ@ N"[ccfÝ.4GIOBA_ae*$r<q֔Ԡ Ʌ,7sT֐ ~K OE_3p"s*>t dW?0nJc@з,%Qgx!Z#OC\YzT,tu(q~MzL'l0:O:HƁ2+ĺǨܺf:Ɛi/CEo~\X҈QGc #@ncX$}Ս|&5:w<%ڗ \ (>6\~\$~O-ӕn(=?ꂔer;a4v8$TPs^1ƥ` i_?vop,b2Q ҥ<;ct ye/滶=fid_wgus@^'Ԑp90Yѱ$ ~pVvn3u &յgYWn)G4>_X[qUUJ)icͷlTowR{EBjEt,4E5xMi}>6LC0DK zϴL'Q=\q^-x13ȶn*6-ƛRrQ;op+0~ 3B3WeBQ-Ώ<{7fã\N>b[G9NPI#ʇ]@և۴KY Qc0/> os3څGCSf\ NSDp / ESa_T0ƮR0 zΛK?o`ʹp`ɔ{c%j4gPM%RKY78 Yl-Ɩ/$M7t Y}3^ү:68:KM6B! ]l|#i3|6[hEjHLzTX-IUjO;<ȿ-K^.S|-ڍ.'mהj+o2q۪IA8[AKo3:hxިu*9cuՊeק{C: w]z|'Ut]H(Y7a&{Pl0$}9mF&GFiJe hN U:;2?OwB 5W]T[?}h>wD.{Wx1)ԃs+u:FSVDB⛫-D!Tz"VY~a,ʔpe mhO3OtܫBy-" endstream endobj 72 0 obj << /Type /FontDescriptor /FontName /EGCQNX+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/A/B/E/F/G/H/I/J/M/N/O/P/Q/R/S/T/U/V/W/Y/a/b/c/colon/comma/d/e/eight/exclam/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quotedblright/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero) /FontFile 71 0 R >> endobj 73 0 obj << /Length1 1754 /Length2 10549 /Length3 0 /Length 11665 /Filter /FlateDecode >> stream xڍP.Lpe2\;w k .-wOdwUT|Ov &$ $5yllll44Z`7_bT+ Ad,2w{)C!w;'GW "E e(+*$lc?zK;??/qG P6w9>G4whB- 7rA/d$zzz;B]lD`7[.b2VT-O&x8-Ag w)PuA$+I`u6vVe򇱹%  3bh }70;[< #0.\-]Nn`%y>ei$qsEd|?;kzB|`"ܝ;H^/ʳ 9@^@(+q:A?> ;ߊF+dY ?70d{=vOe8xC@9)559=?+['!prX8\^.~{Q3?k(dO? {v߾TC 3Fll_ϓ߀MH5yfݞ_Yen{ q2`/aS{Vy,oCz^) Z0n7* qps|؟W ۳ sN ȿ2sF:ٟS\= nρ<Ϟ^Kw |)D]Z Յֈx O3,tc"c^s7؍%M%DSRxkzۃiN~xx}/ )خOg_ {O/(;az~-66[ͣX>cT:CS`3KHB̈s5su=7DȄwYcw7fk'k"B2+IZTy-?r#Q(Mv{|ףh@aû7~ȧod%wuzu :BS_Zb\u?R,[b}^% ^@ 디)nPoOzvXPjm;b'^TD܊܆i=Kҝݿ ڻfڴj_ o$LuJʕ;!쟬)O:]g,ߪ9&Y~¢luH%=?Cc/PN͘<%cdSGz,ݦ0H^`2#ViYCjmj۳53R.; _$YR,`fm'|bдt׮¶|'P;GG `LQ 2phԇ$9'Jvf(KcEd_);xXxp8A 5l|:O.QzɁn~%me}UJ3+=mN/eˑ"3AS:`]c/՗XdՕSy@Gxj0^;c)r8CST1WU" ֥c?HzbHg`J;J߫ M_ӌ4U1]G6G(62A b_]+|Y\5_qis3W /#x0%{AGfά31_7Snx]b֜NFRȘOX,crb$2"hhZtƵSlKKs蛦]щǘXE%m&Anzw Bt´2*Be'/fCNҶoy{fX ըj%P =)i-Z!泺/;mJ#DM[ \ "'j۶ė_6M¯(_^/jKEfTF31.vMy9~έq!7"zۡ*tC҉J) ?nV,Ug?y_ hӹkl4/ن#A4*m41Q oB\eĸ$}PR[V9u"Q"H6)E/Uڶcස}[/1ZHAtLd#C)ocJ3GXOvӳp NrZ= 7 SuYz`iyzgDWĘCe!ʀ;|'EBl+T.-ɑZEoVйpp+'ʯ⣅}u7&1+ESs7K\b(ɂw1'wy"DVg֥b1":튭4CQKIo؄ l4W`.=۳ugY0,%83%ъFkTº#Ӑ̬ڥJ_b8ǠLE?SڢR 4!){rO;tPYB Vh՘l7O3&LxUܩIww:Oınx^9wtpF3vP+9ӳr.iV1sm/^+q~etnkG*^<4;֩:P o@7tX+-) o\VTjMSq; 6?ެҀ O ү.<9'778dqS:_釼[\6{v+9@[cʡ,K@wbmtX&[LiU63[epw'mC]^ZT؏ y Bיִ F6jSϼ P#D ?|HMyXGrVF 7}LԲDq'MIijdQTiJ+Ͽo_=' _kB?սfVaԗV&c|M(!c"8lÕϡ ,Cv@~@DM;\M'h 7N,5N,1b:{)*\Pp"ynSkL8^x .u0<@k}oќxD,[K&)$4QX YCQIםenS%8ISMaZw-#RmӅ7@;UהYPNxg_+Eh޵R|: 9w^-Xx Rx.cibpcG߄^}x'23t >'k H0۫czPcSVD*r)́("x48L)];݆_Xv MyJhgQdY5z`Yzj Ջh0SjރD"F[O+ (q)حIGqNmN3f̲+'6Z$p.*!_w3KPZjʼ勉_L9F"}V֕K~TI,ƽĦS>)1 11 ?-Fa{ՄI%^NJix%|Ue%x4TW!amʝWC0&eU*Hw6]ijMi*i76录uܵΩĭ_bNBEggg6`}S䛿>-;Ӣ,p߯ t2 dFS e& 6>͸ >Ҕ\ iUWBOC,Y1>VHۍc'50 lKC)%|L^/}0HVClx!O:Dž$fЙɾaDBoY(nV!hNwمAv]6()i]=^,JFHO9qcʷW}B,r7([!Z kMdW|^Ol:Ꮸj/S_ov+] XK}~4RCXN mSAO9S5£ȿ`RX/ GKd]i< CsɊZЌu;*ۢ `Ŷml|nn06)d^n5j"܍R n-zRx\^3Q~ק87מiұQx0}iTߓT)jk ^l}*">̕Dى] b¾ĵ/4;) ,ܺI!ռ(+;t7Pddr.CҧkFϐm.\+lIhT4ѮӿAIsImո4Rh7F#I|1 n44D3[K,%^COxBȵ_;HM!>02XO]} ;FE63>ڧFu\%"ZMDxbyF (fb 3'O~O" DZ'iwJiFO$Gu캋$yPGiHLX]#Jp6a95Ib7*/ F/" .Bno or U ef?2ts5 ʍ)%i`d`ێ`zvITj:\(<:%ei]!S宜^!Vo[XS*#."0[2t\k:$U=-JѧI9ٌ/S>(׉%/;/t `ֱxelIJ\ Ed5ߚ9ny;el_JՃkU@ Q-p5CŏoeXoWbh-Eè(%k/m.B7H9l >*Ϩ*X`eVheM7YOV__vб+Qa RX#Gss{<}&fF&b(n3T /"7Jr2{2tzc0Ss;>]gʛuX[-濹6ϠiIO Vx䓱-ގ[hMEcq't V^S+FB=Dęto"k%#jgJW'n|jmghW +ޣIé`Ǐ`iH *>o53Nh}Ek̤BlpEןjRr%@Y<&,oϸ-tuńۧz;8fgnBq4'5Ay 0.;rU2* gxo gܯ'^Q(B= ;K@ k.sc$]*}O4N$o(b& MQFe&$dI0f a(?cIFePH6|0SNnFP)Ec)F6i*Lq;| {`sGO ]+{}muKH U?' K/R-S7%cs/\Dϧ4О 7FZmd;eRt[XLX5I! V-b`7䛾\mNL~Ly=E}, כDG؁[66;L /pP7ǏNr@A7.jP*j)KETs(QLër;X9GG41iP mkV 4tnUo^ ai99q jk?H^eC{d few\ɒ`jVtϡ'<;sbPE'tzُ ^Trrg=dxJ|ZmWz])MMsnRq*dlR:eo-Ow{QY\7oS(a\-"[.R" 3զ5SԎ c9pSi=5;xsJy /稑z/{幟w"1αB7N ڹ(F ܞguU)^z#wr{ɡqSABp@pMй&0*|*trsU⪆ Vy`Oث;\T:l0]PR#2Gȏih0[ܑhFm;3M9-pF[ouSaz)F$,CEXvY^~Z.%[D47?Y[hUpZȔAkwöcY71%ື%1D52v~CbT+&%=<"wYݠz+X~uF(P렐׀ZmzC{t"Y^T 3ʁ[f )>2t7K+}(Xne@Ó9XEi{!>r2cQdynNWg$U)UPJ,v1==7Q>$nQfͼζ=O9+A56J>,JQnXDv X7[%U_Ŏ-u,04!WG .V)܉9d8ӇrK͑Ps=ŅZav vTKxgIKg#O~ayҧhGlD wm#*~4g &?<% 3(uUl[2'7ϲ{p@!ZWJvڷ ӛ|&ƘuP=:υs {0N32WB~d錸sI $_ <Ƽoв=4Aŭޛ@3wF#2HeAohV=S͵58G1WbŠ( SY+a fm~ bҖ].7G2G/Z^-FGdž\n9 u"#ˈJmNI=ߎ(?F3yՑim]?ܫ5 %c~Ob=r('#商TGLu}iJ .hg{2"r6ɹ"Д=+oŵes4"qCi1֚>6?oBz:y`vq򭒉(::JT S2+{7d!LJQ(E\8 dlPб{;_ jDar?M6w6$5m?drF86`|G2UKbUReg`a/S`yJԃ޲O;͜?j$2 bPqpAYJߞ[/ ~L |~fKN| .y9c x HwU;Z|߇R(̞fTf< \I|,$/f<# L/WT)8Q>}X]-[QI$CˢwjaXxgpUG1&̬#G+hKBic& pTuJ׷ҘNENq8N@4mBŧ_%$ Ubc- 2z']" |'Ɓ*n-lG׈ԭO›FЇ}P8Wgjfgu&2*gIzEԿGCW6=,N'QNnFCR}$"u{.1~Efl}LAE2kz3&5,izτc3;*z$̡\X3Uen\&a dv_ꬆ#..)X[&`@yOy^hkmƧ dS<̻kb{ٓ Rxme[L|zDQ]r_g:I0FduK2lQLfh׍*nmTyx`S%[Mv̷|ﳔ:3avΓ Iu 0"IC[oU$gdH&%o2pʸR#. ?S5 pWH1d񓄰O?T^kiy'uNN(\Rz(yA("bH9rƓLk{:jseyϧW*V. dY(]1qwDM=P3Xk$&D3gT+$P,ȉ)pKSHFlAWx19W>tV]RTxBRęx: 5\/QE͖2u'~*t9z>ۙ4Q8}bc(/Ah'7tjI:#ڮX+b@bc6ӘbwU*gY1\ #a_=n!P`]U.@kj"ZmܗX˴h\n ik݆8Z̮#fCh~ >?Ío;w5Ռ+VA-;i3ƈn Pa*u{xcfq88=F@M=SIO4yo]k43]S NI?"w?.YsC\rפb9QW%qUm ੰ69Kl(t$Rћж 񞣊~Q ~Ռm.!^Ds՞]ut2,446aþWE)сKz M&!RXW[uHH8}lw%lP'\ =P{g˺#D X.~po_lT5EC_y=tI~ÿ 5bbPSɂnQ7wn/ǻvh_s63ۨG z6pY IFU2&)LI7&#}(Sy]o&\ 9,) XïTs5&RUu"EG*yekOe+U>孹rʃ/!%Neg)wE'uv`GX8{~k!S=] U߮ܔhBf 2R)Pj-`5A'mŀZ{1j zݝB$])euzwe14:A?sF:1 rc\a { ֟x ꑴ|zPw9b4rr -&͖Hσrȷ0r<>4|%L_9ܠ:oU73G8o'^qO@+bUHxZӕ V02]d_Wf焆g4*$/5n;֕z-# YǬ7EC?a!':iˮV4So8k0:A6%Kwx܅yQXc&[ (rxd J57wFBxZeKZ{G4|;:pK< aPIp;Ij/ЕTX^iU5^.VtshN86R6$ endstream endobj 74 0 obj << /Type /FontDescriptor /FontName /HDPPHX+CMR17 /Flags 4 /FontBBox [-33 -250 945 749] /Ascent 694 /CapHeight 683 /Descent -195 /ItalicAngle 0 /StemV 53 /XHeight 430 /CharSet (/A/C/E/F/M/O/P/a/c/colon/comma/d/e/f/g/h/hyphen/i/l/m/n/o/r/s/t/v/x) /FontFile 73 0 R >> endobj 75 0 obj << /Length1 2575 /Length2 17102 /Length3 0 /Length 18598 /Filter /FlateDecode >> stream xڌwctolۙƶضNl[ض8ii&iԸqr{gZ32wj"f&@I{WFV&>:+ R@ tvrKFh DnVv++7 Vf&=R4V^^nDVcWKȣ-@ _&h,]]=<<\-hVU h6@OrLuK+]=hRr7:@j2%G-OyLoCVR665us4[JL c{߂ƶ. }cwc+[c7HA9'CSg+GW&+Y26*w|V@SP彘ilneof;37Gf {+'7@$?4 +Xijۉ#_LdP~>sP*@?+s puvo 02u-XƠ)p豀ϓhm̪ʲ:$[T`dcgprx~mH?*cowBO -m):3,,/k[$hG0 h\AZ -+ͬ7W"fe7Ehljj17YZ\~5FV횩 8qMX@*W {S;0vv6B` ''f@3e0wpFZ.NoҿY0Af7+Yb0KA r7YT񀬨A +;Y0A ȃ? ?ttP\l3"0q66]"sGdC_ 8AMlAsO)vv= f@vPlmEc$/\Nn*PVvpHE-[L@r%YAZAM 'b.Pl/>z :ٲ-ӟ\ۻٙ>, tD3; d/-VVP #tg%/ßr hWb7f?f@Uursp?Vҳc7UyN )(6[c˿LB(fvt5]=Rp Ui{A*{ doWu9; t*כ 4EXYr0n 麯!`>͍!| _Ϧ'%G\yRVR<D, h7,f(t$)S"%AB ^Zޑװ_:BbSja?`Ij~,<TWYgOC<@-hqiP3`!L „PgѲ[}|kyDr Agn([r[ǭL]R5GI8\@yi<^I#}1K R?)d@)ees;Z|t@i! U`B1kR0OeYqg(v5 'R6m >p5 ;]$0k r8$q1Aܬ<6R ۽? (fxjԬUPTluC֯jAUlP ȺV -&1Ӥ2ғd_t~Z([ke'\iD y syݤe4Լ7gƦfu^PRBYec@B8<Jm_*!WK Z{.mvT ra2YDtn7F5+&3C~a&Ê#CpEYDQ$CHݼ(f$^;lXBXCK03ԕn2 < ه2|_h1@͞ӫU!|׭tΌ2Ol ƢUZY&o:E,OÏ?145⦙HWn(^n*[ nXJr66kB9!ܢ(e}{$%y}jyU-t!$0=5-Co3ǓGjWT uO_[DaŠ4)}2Om8#sq5jXk=z\%U *XG3nAޑ)XYiyp\`8I7SUn{=- Rl.]ϻ_PyO8j~0-SMpJؐ3U؅Wڅb9%@ri߇fE*g4rm;xK ju$c,51X<+v4X7[\EVP2ѷ@1h.j,֮0@1WeY˘)/N]Gh:`n؁=T'u q~0pOO#ϼ$HH-:7iIa=R骔gt*_hχ 龚(/MeAՑ,ŋ-Η*-޳J3xCtS=9qBd[₵l?Lx5%|QQ@Ļ#kv4KT3}*s`Cʱg4m $&#\-,g @P_CcP $VL 17SC\n젞m?G7lD**4avŬw3}^zyvF4$SyuJkZގnʨ_\gvmoG8u`@͕gӺا,QwY -m\=#b~i4f~߱C.}ЌyOSy^2@HvH yVj ~`j3}!eF܂̑^MQEy@<=a̹E >QڐcrrpS-Z򃡾IUqojdcea!:W|R0Pe ?ɩkˡ ])ZCg cƳRG/}[V6UpELˇN dfFbOHg?,;E40L;`s&ԱKYVٯBubsS4SgVq n9U]HTVV+fSثɯ2W(DƏơr*q$O׉ZWЏ6ɤj* MN#0w&cOE޾}!k0 #357h@<|^V ="Y%MtB_:¼3Eڝ ^ɱQǃ銏&݁Y6{=<^덵x?8!VNLI9DƝ>V(Ix*0wfܝrqәZ+ i1tގgt9Z"" $(0v_l=aǰ17±eH Zg~ƨeAKP7/9d;dՌJ/`8h L|fq$Wׄ5gÌ>n}dD5P]nCdֿlRӯ^ @$JJrF&@D!:d@ZMUH޳rJ'u_ ţ-~;/}Jn~:)*Qʚ:uiv)Q%;܅膆x>Zx{d~BOWJv93x/b\nM*>RX7 UXN_" ?@ Gp5.'L<RO!< MUL&Lzѽ޻Ŭ|0mT{戮r_iv5V8#aD8^ u~Q1@Ԉ$_-Hr|69l*`aWEXЗ.t%?R5л'VΗS׭ETnV?Zٳt~~OdgAvT%m[Laqmm&_1}abg3۹-Hߦ@qKXjs)P#)wú>'?ϘǤubXu ̧8}2E~>7.lUX{^`2M X- vD9ҷ-:˭QIܘj\j{v3ov]kK.4[ATE}/yÕ釰=ɝDg/{Maս-i2B;9ěx(ߚ ̝1%>C{q)a$n;],|MtcmprDO ].NZ-r+%ىFAl]0ju|8LN9Bb Tu>@[⷏˳[JRP_"0xۚ޻"G7r>fw2FeC5b(s Wvt̝yGΕ{hj a.AQuВbbAQe9SNd@BQ,Puj3qeӢ-7 "> nI]Tfd.`3 7dɝ焿-'(qrCބ__5{:+":S.Nj+OurH `K QSŦ ر_;CIշޟr ln: caiTs UV=EBt~QO.kjd*DI|xng7r#_q.<gA i,SA_/+qh?. v\hkmDC|D.R[ZXeE7fqE 4{zhq>G:V}$\==ࠕA4]2߰ȍ{P.{+WcZ1bM)Z @L}x?R*~6sPO_djM8dz7%k0燱H]y#'\eG)" Z^LHW#OSrN.p\3v2*b2mn:UD,$6İiR* =/T)R5WKvW6mD3cy":t"# :9ŲOt!a%e6n;g*Z\lzMW68[, 6{=KbݷKSxoz,g*/ˣ^Sp;41s\Ԕ*ݝo%/٠#}o8'5Nł2@ZZOJmGxGr#IN@ܕ_fyHa4SƐWh‡g#vX=P4 touGFs8FOLEj}1ᙒt]#4yrup'5yi"h=z'0.)`+8w/WpX#"c%_Q7վ#$FBӳ7$rL[4@W-]2 kI)>;q&gMi<mq╼g7O#RLדVrV]Rn \!3Z2*aVFTn~5e RL3̬wwv=)Rju]ðwB@ %_Y/ӃEf$VȤh}șiȳ8!%u\&`ܑԤ3ӤaMVm(yQᅫ! Q9źbV~9r] %w\Z要 Rg)8ħ>l9&$qfˣapH7[_U>WxDc('\E/X8sR=RJŇ,_s` 7ȟE]"?u:J/fB Gb+f d7Ge(~nHmd*AETA8 jwʜn1+(#zXJ|C,_zEכ|$#lf]2}01u@5ya\`y]u(0FcLP[20S.=PW @8C](|k8s/Ĵ:Tg`T6b} S*f2^SƷ4lYǮͷ--Eʺ4'.ż'*5 ]AA֞|: CLAicL)O$4_uO0 _6o%n/:Q'L CoHui)^@83sFNZFJ{ u'%̳;):4U&鿪yo|;D!mN[m?XA4+o0m=ގs{GORJ aFU:iwdKݬ{TY]BLW;r^y^V<֢J!VK;,qQ ,/ m[A,a}=3 QįP^&*&[.b O.7)0="v4YbC%;82<+íM1] h`^: x2R?f.~Y 11v혙[$S6kJ}sC٠>  06|& ڍ;cJKO!7WEKPv` I_UǨaKX`L&,]- "9hYFI,\Qh:@9tגeK\V~*&s₦O.t L4=s%*1ǡޡS6=Xd܀$aj*tq r<*WZۃ_BXc>R!thdz ocxx 4En%'N0딹Y0W]h7X]A?U~Aɟ~ԗ4`ri[\B~&҈3wtȯ7b{Og,^PI~3fl>/1qنT&eJ6ISFcȴ v7P*n?yA("߈gt]U؂2}o zo}1Vùi;„Xɫ]J1 dk5QY6u^ߞ2D(eҽmyvRX,xo(x->Džtz=]9Kr#12-n|ůhB{E1|MU,[T"QP 8^Οsf/Ys F̡e;vC H4\:R\EߺF/F-O# ,UR-v&hK:yH;-zzʉG*ڗNaFK(yEyYe \֔C0EFtlFJE j}@*}[Dvgs&("ړ!v{IɁ0+H:W4!VӼ@(b4fl/!o=֡ 4Q~G ^`4!KT␳.O6!K۵E!M .h7M3#C aLrJGIL{1e{|!{d͟1g<‚`#-y1hZÔK9$p+}JOIəxx G'EKr3Y•m|Ю75 FņkNIαx7!־i孛kF^)HρֶsVj5/3KftVݏjeyWUŶZ͌)0d'"ˊ!dg֯ݼ^~.D$CGMBG{tqyp \ *yJ*>7:{,ġ/bHn@f)9D>OP̫b{ ,̺ɘ;;8*z;F?QAFQ;>춝aCus[pG _#7"٧']vnx#9 +WH߇Udkl3o{iɟ%Ws74D1Lxhn[P8[0p&#GSt s[f@'+$^*L:Û4 ̵1NJJ=zc&*:hX,x:Pmq“Q 3F"ws"qѲ﷈|  OgZdSzd-ޫ'K&1jϮ{uXp K`tU"W}z,+Oݽ\\ҕhr0Z 88SX?h1DGZ[3o1P\t Zi?Oq l.];C"OwEMCyyprJ 1̴gq4v=*a'i q/Bl <;E EkkuP>Jo\6޻}Pr|Ҥ LW őe,sEMR |=̯.$*-Zw;m3Y}7#p1ZN@tzۇL4⿷$׏y@q͉\ ? G5hh{Vq^*1\UqZ8Wx'jn% ޗ⡎{)pۆ,A[6^YM|x'NF6+8`:A'VQKmɫ#598?@:@cN=T]JI&m, Re :S97T nHMiBыj|%t^, bmt; gm(qfjE.GE36=?g?M*$E=Y N,&1>'C 1aQ6m4qǝ3o'YzK 1̩xs׋H7K=㐏He؂w8as_-fVkI%M>k)Kl\Wz{ܽر:@ũQ$.F"[sLp37&n筐mAMDjeUd{g4F:e|lrt{.#C#_m}Ӭnz#Q:+Nf$Zْ$W5T1 M}s}=X|8J⊩ X YŠ/ (Pj]и, z癉#lq'Sz2('}/<۰0IG #n8֨X֥gT&ހ"})ZMdᎬh4]$m5A| g$'Y|eV61/@TEͨtH6n QuܹidH<:v`l߷| :$]}\Ԟc2_4Stu`h6G倯rdd_/}qr>T=/'r6YނQj&lޖ$ώm.6RQܓk!xg|u 5j=ԙo6cmNm>EGgbe/),nsV`X.:{:wچ^>"{[mkÁ/2s:aFaI+;ͯzwR^(HI%\}e~pg$헡P[\Sͅv@M#7c7c dHHǺж'|Z&RRlDmioT(g9FL8τrMRɹV{a9.79QK(RK'5GEV?UT_m`hT bDD1mTƵp \c3A,$vE)/bp }сPrh1*vu ^+ :wn}8eF _.DuT=xZ>9,Qqa < k"U}}F@t#MQ⡣FAӜ]l1K?z Jk"cqsd)^*ZlFliY–Aݢ1OfyV(U- 6NPEt#cr SeN#q.!:5pZQ6?,2d3D9?d#>X!^Rxe %} rK2g}X x)\bNm$Drb`yC.˩V6v\w舱]b vJ &m8S Sul1OCpPM7lvq(|^}qpy>?JLDדXM̀/ 0>u &7CuυAF}\%`V良I\6{y%R`ͽi_J{m*KPޤ(V \ ߌi`D4!\[ Rտ7˓Zmb!܉;dFAVUuv@fo8RPJE7\}=)B뚪KhJZ1 v3Þ/ƿ|Loa(=7}!L,$9}y}Ikp^dk՝VIUf<;~H(p`k5&der>VmQkMuր>d{1~DK;~Q56RNFs3:.'^Xv%wIP^3IGM1tOos+V=n,Ĵ0u,JncR($%`w8bQB?B%  ? v,Cį2@<٨ PxDii*8վ}Y`J?^sFW;l?]tk+pB)w:)N5s}il41:;"{3f$K3_RA+͛2ëN Q9SWp %i=[*6+KBf*لIZwfh# <ʲgN@>_"5K_/2OIݴ[tNt V2~i4eMՙ쪶. C`|1Fn8fZATu~1SG#'lpc^ ]Q+u)IYf$1}ZQRNtG5yP ui3h!t[(wݗ.\v p;B* $'x#˝? #dR+S7?UNwS;aOYH܁B5fl|QEEmYqq+$Д_:&b@$W{Rܰ9eSUU*ւ9 cyAiِ3h6#}0'=՛U$BIYkn:/ؕsCN.W;>,7o"F52_G z)b#=ʉEk!zU,^4cHudT^r%%>DTiG2IovNflSO/ ;h7ڀE^L2|q)r9 |qX  }3n e*)C4(jt~ Ñ;S=_&tLciYSbGLz~#@CW m˯/Y)X8̧!=Aﷻ%;cT8i%[Bףx|ԓDj8+p\o cSE Y(An~exFf!ޕŐlW!Fq緢Q _̜sf"RhXCl4e*|$rBuܚsqc XHnL~J A&C:p>4e(CЯ?i8'MPƦu7v,/}/[̪/ swRkgV:#D'N}˩͇ mhZVYwK"SG_lS>`]0p.ZMos^s6wb\ :bnƍnvBd ռ7}o/`.J;]D3]:F5U's/ۓHX8E&݃_~+>kZI1':i/c'70,,#˒S g}U=kJ4HqM)Y([ZtԜ3'u bݠ) iTsM:?syx%9Y[9=|9{mHl=N}yaI CqV40:Gϱji:|ud5WM[8_>l9;15'V~%k ~wS{{%_P@ +MMțqʠc C E z}idO#ai4CM_ްݐ]RsLs'JOeKˍ9V?P=8h{*ؾ={0@2K+@:%M,i7qauz)Zb|U^ub~/m6 3V7 -xbg &\bjΚp(`LD94 8ܲod}*@>YDN]m1zO1rCԇ+SQW@7jLĿſDM@E 1)MpEĮe\T -5TBrTKS#h#DГaůY_6 &xwe2Z_W)m/VL欥\'L0`upHK<:GŪ|SdCv 5yUJne}FR3ӻBbp:J=]K3`@.뽗[JWP9BH6= T$Idt[K(\=SRB}˱+Ez%~~A mۑqcmo|Jx Q>Gdky=#o ,RTsY1ܘፎ5p'WXnoV9tjNVr3@j !8:cFcez^9*)u\2SQHM#}[+Z]/:a{qz) 5RVZClz<8PQ8+@ۺTAX?G"MDGOJʠq.T6H]B +|44þ=ȶ zYZ\FHbp.S~I.TݸsF:ɩCo!ѱV-Fm@Q98ֶ* 8\Y  .eݣunٝ!!^hש<&G.tI^b ൝er@G# =Yͪܭv2]O._}&BP{y ti]L\ _ LxFb^h! a)i*"vO::RDj7.|c]r< bއkPul\$j@6?& Νc+6M%o+;%*]͉9 4Ga%,z]~G.9nWpG)BȹOh/kY䌰f\^;yNwTa?ĿPUCrDHX 5M Ef .IϾ!i(`wCK7?,v(-ZZ#$D {ꠎ.7+ o|9s ' Τ` $<c3tٮ0@P@|MVZ88_<35=pnj% Z- aM/> endobj 77 0 obj << /Length1 1745 /Length2 11648 /Length3 0 /Length 12763 /Filter /FlateDecode >> stream xڍP\ [www 4ҍ,@]CpȽޫ1瘶טkSj0CL233; @RISƁLM rǎLŐt8ڤL_J0@ ```cpqHJ,L- pYZ9_=pdf(8[^+4 f rv`eussc1sb8Z3@VuhcdXV  g7G ` 2^C\@Gku{=_&tG3 bgo- [ @E=3l oj51}%ٺ @F\ `:99읝X@G, 6N'r>wֿ q{YabϪ9漚Ylll|nfGM{N?̯3xCc}@d/'W o"dvv9` jZ_c{;*꼗g{:%$ /fN37;<&`'VlsOˮko.eȫrfYSY_;qOob\-PR?Z]%9zM^Alhfv.6 ';\lfjko 0Pybc?%3yE^ C[Wl1c8y&&lxn9O1XY> # `JXeAVU8 .?赺kk/fEK j|MoklVk%!U1^; R_p|-x's4sqt|\C݁fȋs3`qb7q.+;҄jBwQ 3{Qw?9^ml ׽ӣ[-L':wS5[6]M39f 4UTZ"6ŒD!qgUI|irH*sx7տ N|tfxu$vCh< &xDx@g4!Ԥ>ϼwGS'c~y­^вx^;}5;lZJGgP_jҳn9203-5+|l aU&:f;8'u.zhwH&u;∯Yo_.Cwf?(| gKUͶ$2m:!?z|nju!ōQ=K 'F^Yn5glW[v(֘;'+ cwOԿWY4'.?ɩs߰/#AUhILVhƇV~(oMIK DQj޾m*7zBO zLݣkN(*ρteEaDef:XW&wD)1ADxoV qP.IZoNȧ&`2N˕@C6BzVg͚}݇(^Ka.\!;8À7*?1nҎfx1?$mM.n@v*Qj0o(}%}Y#yRl[,"f vS\8 Zd#%zҊ3kL7B)`,tDr(K&3n,Ȇhɏv;Qz wUKqK?}$N^{ urZJ W?wY@bxb\}cV8S@֜+  P@.nW$Pxtj_U:ʶ#Lu#(%kM;6oKZt?Y\mgQNM N3!AwGf?\Z мYtt]E '[-7~&X0r\v5 ioBM^XB|@e\Fȿ}ޅ^u],P7n KiH9˅[ͲC-hF/ހ+'t%R w}cIudZǯ]GPm:g>Á0ai-񬬜>D) o[sKYì"h;k8گsq߱zMϮxqlXͽ yWn_GJ**997 _+{!Yyj]m*䟕oO,u-܈v|S+ۂ$>"I!8O/ FYH IF~f}xA}l;>E =t&tS &6# ;3XH\>BgKޒMe.x2᪠Pi񑱜2yrb BپTqpۉș'"0:)U\h\r]#IKxc2D3}i1eCMFvXDljx"V.C̎3Tc0L{6X=E(ƖSF\ntFH^iԒ)zHrԝe=dC \"׽&;/~ SKnvq(f򧓹=7 7+Ju7w0G[7nB|@'i&}^Xϕ GRWp}-)|jwuY<<-v#=j%9Ρ vP<Хo?}JWV~x)zowhC,} nC`<&f)94DrrD Z-i,ڀsݿţx&"p갟 fE_gW&bddop:wDuk@3UD t/]Y|>=umGe?~ O9koşLuLU$.g(~[kro3H>2隁y6z<.E`t0L}$=;ݱZdk;Ju4DXC?@d xN f: "NXcSEwC`'ZuACH.`,%;S5NO _J1eGoh]`%KC Ru:L tȫ( LT0۠3+$P0D%j_LLZfp^jksb1ЧJ2p܄>DŽah|ZJOcI~CCm]L؁q9ܭdci'$iUslvRp y{̍35B \KaIk׋C`XKhHWyaFJRb-`gq7> /M.#,lI"t_#](<^^~WH C1N)-$=`OIY paٮbPzVj?R& ,-JZm[,A\w U>'1):/J =rQ1K:<9x-iLcF\V+B4DImp{.o &#X蛣d|u#9a+^ygx)Uhu &ѧ~P&J*[_$S6z!,[KhƒrkftnƙT+nDg˒"j"R 5J12) D^L=kCP4UnyMY wD-]0WȚ@Uk}׍Z?q#DzR¥ s]$}m^WB;ze\ ##L^LQ{MF,f1lFhtb`deݼpdRtnh0⤂99fi4L,RN"=Eer8Fm;-|fxTٺ.Do~ N%R.yLR:Q#Ъ}`}CH糵e{iсwqDWq3xZ0 ׮GUz׌uhwr><^BܶץmiGJԢ'>TY ΄ʑhk̵꽈ĂhYqmirTQ*Լin 7]L4S\j"2E| !=6wh6Pj^ba5bNhus{װBiq|k 髝{J.]؞S7>}L͌+.Zo7 #9\|-T W4f ]uU R Q嵋P „ '/nrscPio~VPp9WкbIҺȢIU0k13[MCQ;)b\zilo;;i=jF|xGf5>%ؚ%TC9]o)b)|}PqKV:|M(jH#wD@h[szD?ܸ<z^ =6MeLv%Ɵ5dĨɐWOK**:UgE'EVG}2";3~,rvずOcKicͷ6ѵ Y_p yKLdZ"I*hl=<FMief «םˌ8 3~m ؋yv?Ob}Q/§ұu{aef/rw5p܇gKSNNYjY6o0>[Ei! WȤ2f mGme f}MEptW[A/'Tr!7x- }$eb#exx`1;^ e!6A&H0RQtYQIqf5;%]Be0.Uq0%\ v*oPsƙJPJ9V&k+9N7Z;p%>A#acjh#5Hw_Q#Zo0rBVmlBO"+^0cȾk,wSmi$AH҆\c{=91tSX #oS*O.\ "u,UmM$Z`15B")vb)UD^-y*S1t:}3?o~熐 }ӫo~a* SNg6 bg?1ę ƫIf€CSQЗsWK۽UӅfK`V-|mY.g$WъTiwF'tw#DSa,UؘI8⟦}L_gf[rjDN=oKuC5^F+|Ջx@c|cۈY.[XBA"D/3ۙ>7&(f_\wDWlvψBF',\$A^\O7(~ ۝LMs8|Bv. _hu|ϩR޹c9L#Q¶V M"!y&0ׅ >rXbpN(!aGyo>I1 KC+- WƐa1ʏʬaDg 0R5}<ԭttQx$LȞt4ZA$aD>N5rq-E)N;~ =G^^R#R%J]<6eȏŽO+\dě{3ƥ ௽;䂭 4?%8&Goa>L8BJ\} Ӡb*_ 0h&tAE;y9yJ>bRޥZ#=4j*!^ע\QQ $Qpǒ{&R4Ӣ7.tkRA YS=_z%&1eBxU Dz#4h={{{sMul_̾,e혪s/1zGC[qRP!fП(by \*"`Su_uR.Y+ b5Yi4:VȆtHP{t9 ,+PiDGS֏ƖLqĚeta1á/I #-~hGY-N4@:jK2uMwJcbBԱnÕ+y-ٯ(XS1N$aҲw 8 2T;К9sK\1҈\v׀,n"#c0 ?^6G Vï|D+ J,q\\gnwe`f&pGna7ЏuM2BT"(/Y$1y [IiIxC5hMA+I΁~G,>UV|X(.A[6:ArP}AN<.] KWof"Kٮ0!ADTăRMP w0lX DXS2h%ۿj zʶ[ #]B(g+˵/8+K\.#cd?#vY.Rt$8GsB!HGUlbIrfNlˋq[ow[^ "Y}VwEd&5}uuʩr·bB//,>fZk}%iSKSu&!A3 &o/8ǵQ S1>.Q))B&0M$doJ[y-WswR @#br~j 9m zb"zv|f&f2ܡfr 5]qr-a̲,L hnmϜ|^_x W'wvX" ?lI[+KswK{t†gm:$o7pN1;JUImjaG<@JP;4_jm-kuG883S딆ʺ9;)BDkr(\] ܵ%{XMB,/ Pm:2Ӧa7AHE[e{׌qX+Ui=FulZœ-J!TU=t"V ݱdHV\,F*/2<`iIfZחɶ\6"--d%i\ idj"(b?C :7T^/4_8)JyHoGDh*؛H !&Us1#yBg`}R䰃U8 Ŝy>g1+KIɉ8M"9^y{{ %n3h$3#rq26tOB1El ΍*/Ę Q~B]8CeIo缋E ȻNen7rKUD[q@POQH̎K JxK>x7] &&ÕKzV5mhl?"|@?$=H]߁Wߴ`؆2SɛX"oK8p`m IU׊6ԟ ! KBE dAR:3{С\Wr6>uzgl .97cUNP r;S{{ Eᚭ6|mWrO[+ u_ F(-DFsf*pjt/&*\4 1jkc:[6ԅ}Swf\lAmؿ/+D.}]`˰Aj/`LaGHtbn$gI+w7Уʾz9xӡOm~voopй iq:QC}jg?`g17LH6M8Hؒ^DEW @Qoq.,eƂ)~ BS~ ,BPmXHa 7BS*q"htBBA|98;o"fH \Cl]{k$U.FN`aI&f&w؄rWn([EQSO{w4Y7i/Z9ZiaL0hJp|l9N?0C1Yr*3f+#9VO)!s$F&gfǹ"B,ME`_k˚{TT_dJM|tv&\h 0Kb ,Kn/9/'QCöaR%M-*ZL61ϵm5! ec?Rwdz3|_5U_?q(ňH,]2%_uY13wdԡRPaL;ᙟS c**Uh+= D| 'u4-O=n4uEz#ݟҘ@q=M u94w6Xb;V'cnƞ&2m>6>71Pe3 o&9{0Ma'%_` {ydM:F$MqXuw9=e)8jbG#=-+ݜPXN_\EfKc O3%_״ޠbY#qc&cP7PxR7PQY04Pse]5&~d F9̆ #7*Ot%ruY*pJIK1Ȓ6K >"uEMVgKFɅd9jU 2ebURd%Fei8ESU pUWgI&!ʉ9=b=&/jOHsiR%68Nq^kMA%7I#USK0FTŔ4Qpy [I0*͌#"m]Q9>Q;=h!JkdzGD0];V-F1[SA k壔l,A.*1q6ɺ*V'7Ti,4ԅh)G_R2 b',E bho}Ccz5DHHUVW@g`m endstream endobj 78 0 obj << /Type /FontDescriptor /FontName /ZYLGFI+CMTI12 /Flags 4 /FontBBox [-36 -251 1103 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 63 /XHeight 431 /CharSet (/A/E/G/M/N/Q/R/S/T/U/a/c/e/ffi/h/i/l/m/n/o/period/s/t/u/w/y) /FontFile 77 0 R >> endobj 79 0 obj << /Length1 2129 /Length2 8033 /Length3 0 /Length 9294 /Filter /FlateDecode >> stream xڍTӍ7. ]4(Cb%7`c4H ҍt(H(-%H;}ssޝ0s˂%8 5 @| ca1"] X (&<bDl(CM8 @Bb a1 cGl`&@ x|PG$*?_v0ow+4mWTF;> A'#&cG8HqpHG(l\!Sc8B=R6%pA`(OU5n_pn7޿Aamn60_(`u4x>H. 񲁺آ ~nPؠuCzx@]~qfEX !=~էE@P}:0=Ek{BTAnd$@ #nJ/1C ` CPx6^ S_P;$DG!aG@}@_=DMs1y dԕM_ p BFѱ]SfU,K҂`s .3+u"%Oz ?zWDv@CZ\MZU jda.6uH;߳מ@aepѡu='l߿`N<̩&J֛{uOo!"7yiَ-Fg GQbZ1m}$<[Soo7懁(v>r[P`}SqRְC>M%"OV6m\D*Ǿ{Jg齃|K}3%\htMB7ìM.!u돀q.Exְ`v[!B{ƭBOmư`ě5+*JǤ 8Vyg4p*| 8:܊* L=drUML}2 +]oҎ>Zw_>Hݛ (=D ZͿybY6򦜰o.1 = 5b8l!nR<ApTiRIj="̩ Zy t G>8١=!ELNըT,:H Y8s.2_:1[fӫqQd4/_!V=qh4^{Ж"ky_.|` lw+t7gV'':%꫈ %\i>}Gj$Zx{/CanVM4xЀֻS³*@{GdBip!E2Ĵ&[W_z@lHz $= OgTj_%YX 9>Qf4plo;UŬآش®MUzW2]aTaLga8&O?R5\\`M%>*I;5Xt #ׂt+o[˘u0HIM^Tlfm'b[7aaKy+y1p?./Q>iUs$ }ZD2ڇ}`tN±|Rx|sKa$OCué g:~d2|*>-Dž{/ncgDMҩy;Τ6b˪h~.fw>E.bX*X]kH{YseAQ>jyn 0ѹ^j* 3 %珺;})BSIT\tBnCZlgUOT5sہVSeo^~j6L^1ci|E{Ê8n'A|vm<+R6 >vj zyAN>S 93z;Wj0amiKI[ff<:ku \k+祥%IG 8)$.xż>QUN7,^uej%hӤ?H4.Fed+VFܚ4oWU)ΎVdA2x\_9~cZXea/zp:#>IܢC2cEYU/;Ge]M';DnMZդɼq {D0q,0}Xjh*ģN|8H}2%-;K׳ON{RLG~Nz.}IJSkL͗J=Nw1L-6O2zR3xJ>ɶj%lhZk*½|?;hRs?qޖE_ս2~bRE! 7ifϹr|x2{z7^e'2(ģ˟Mf-=p*{Pe!a)-vӠ1AʘQH)z-.p &D.9ne#K, n:4ReA1k7) 3q2;}]в nqwRgIy6c )aFA G+:Ff :5t(gb~upϾJ'Ȯtg_ػv6̖I"_G, ISw6s26,/GlO0$W4&L1a&XW/ s9m8+)$syK_0TBypܓx%łTG7ZT 7sךK~<OHM7`~M)D!ݚh #u_5|DW{ǣGl@墔iQ]ؔ\g}~?FC>Rd;.̪,i-#r"5&>/ǃ%MVdFI tAZ%l[ֵZ)ă;x]{Y`Oui7"mA!>QМdɨdf)DBjc.Θg\TTQ_eEc{j]-x> Yb͑|;ϔ|T1]ÏT=S fEfN|dXS=2JƆ<屒QrH?}39|T]E1㺇VִpIIGg'Ǣt :z*gHu>6^{sciJZffܜOӫlT$kv$~)بT[f'W&@9s;|T-ZS)i̒:r/DhZ#m㝾>Ae'Qڨe鞃(,c c Rwj~۪Ϯ P^ZX6%WFqbZ;WNڢ]=XAэlfFNt-&7pI-Ԍ]Sލ"ЍecMfUֻ3KoX}K?W5 No#'$oKb/I-E祡<1^D;ќ_.+K2jZ/ RU565w(7 _6ɳU,4Sy1UiP{d [mVytМŁ^#M' tn._2>-Kwh"LdxGƗ/pn|&-Ӡj g5F,V ">bajۇvYܠ/[YɆ)&x #V8dF}&+WxBŎ_q2sG$Zz]z%٢2TK" kgY#vf!!eq;܎~gku[T}Q]PF'_W=E?>%q@›;oZʅR}?̴:$`h~:cꟓٸ>b?o6 M_mL~axnՇ7ioYиǸ Dr1(> MNZOy>JC|0k1)sr_S1.|e"fPIjݟcn^[8Q0p֑nT-Ff,3FoIτmv‰3E_wD‚jҶ!*vOve'`E$ff*8Ll'10+]79R<.mg0b)[p`C{3ԳDGs3zQ1~㾆аq9fJj5璩pCUOف]Q7հ9:Ź$OA71ONo[w^4N^=`,bvߤ//__}&vp>O1kkiB=` o+B83"I٫T:۽hZ#i? C38<+|kEnyָN{]EsDW7 KmfU*pI{Cаe"9cVCf@\ZW@aӋQ 2j f =md4'rXU}IjCıMo&>N~p2\,]yqW¢be~]m=Y|%䝡?2ŬBg*qEdC^}nU#_?79VnbN&BML֨FSŶ'JjŀxޒZ;|\k\}Uwnﲇ5L._qS@Fl׺-Ͷb"LkM _^NLzE {5?Ij 7MF㽞/v:#7K;VRWYdgFλL4$?oCǣjZ\BF/k H{s){)\ƱCAgo7y`dC۩AZU63Ur ^jJ՘&!MnN/0b/R Ž`cw^0U}%*7f1{di[Jea%o? #jR}se!72hB)c;4G'x.}Z"YDLxZpwo0jT3NO^ dj}bhv##l,ttX"!& O\U(ؗ1Kb!XU}Hg"DcI9N0I|ՐX͖9=Ǥegg3Nմ8moꉠhkW=U,*.a옟'e_?]C%}z^+piymaԊx,XOCTfѻbňG{!##B~r|,+3*L F';u fMU9 ۺPmjV-wCZo"F=\|JdIÜOu2MsE3cM_v۬q+Y1Z L !Ʉ*`߻S^2֎)S]l(蓟fG=Wgzt!C&[sdIvz$ 31?i=(Z_<dn! _voh+v1< c"&mx~^DAn-j&أ*5Sbz,WLm9ca?h| U=?5G endstream endobj 80 0 obj << /Type /FontDescriptor /FontName /TAZDKG+CMTT12 /Flags 4 /FontBBox [-1 -234 524 695] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/A/E/F/L/M/N/Q/R/S/T/U/a/b/bracketleft/bracketright/c/comma/d/dollar/e/eight/f/five/four/g/hyphen/i/j/l/m/n/nine/o/one/p/parenleft/parenright/period/r/s/seven/six/t/three/two/u/v/zero) /FontFile 79 0 R >> endobj 26 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LKBAXH+CMBX12 /FontDescriptor 68 0 R /FirstChar 12 /LastChar 121 /Widths 63 0 R >> endobj 42 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DODKXG+CMMI12 /FontDescriptor 70 0 R /FirstChar 58 /LastChar 65 /Widths 60 0 R >> endobj 25 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EGCQNX+CMR12 /FontDescriptor 72 0 R /FirstChar 12 /LastChar 122 /Widths 64 0 R >> endobj 24 0 obj << /Type /Font /Subtype /Type1 /BaseFont /HDPPHX+CMR17 /FontDescriptor 74 0 R /FirstChar 44 /LastChar 120 /Widths 65 0 R >> endobj 27 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RPJUYN+CMSLTT10 /FontDescriptor 76 0 R /FirstChar 34 /LastChar 125 /Widths 62 0 R >> endobj 28 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZYLGFI+CMTI12 /FontDescriptor 78 0 R /FirstChar 14 /LastChar 121 /Widths 61 0 R >> endobj 23 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TAZDKG+CMTT12 /FontDescriptor 80 0 R /FirstChar 36 /LastChar 118 /Widths 66 0 R >> endobj 29 0 obj << /Type /Pages /Count 6 /Parent 81 0 R /Kids [18 0 R 31 0 R 35 0 R 39 0 R 44 0 R 48 0 R] >> endobj 55 0 obj << /Type /Pages /Count 2 /Parent 81 0 R /Kids [52 0 R 57 0 R] >> endobj 81 0 obj << /Type /Pages /Count 8 /Kids [29 0 R 55 0 R] >> endobj 82 0 obj << /Type /Outlines /First 3 0 R /Last 7 0 R /Count 2 >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 7 0 R /Prev 11 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 82 0 R /Prev 3 0 R /First 11 0 R /Last 15 0 R /Count -2 >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 82 0 R /Next 7 0 R >> endobj 83 0 obj << /Names [(Doc-Start) 22 0 R (page.1) 21 0 R (page.2) 33 0 R (page.3) 37 0 R (page.4) 41 0 R (page.5) 46 0 R] /Limits [(Doc-Start) (page.5)] >> endobj 84 0 obj << /Names [(page.6) 50 0 R (page.7) 54 0 R (page.8) 59 0 R (section.1) 2 0 R (section.2) 6 0 R (subsection.2.1) 10 0 R] /Limits [(page.6) (subsection.2.1)] >> endobj 85 0 obj << /Names [(subsection.2.2) 14 0 R] /Limits [(subsection.2.2) (subsection.2.2)] >> endobj 86 0 obj << /Kids [83 0 R 84 0 R 85 0 R] /Limits [(Doc-Start) (subsection.2.2)] >> endobj 87 0 obj << /Dests 86 0 R >> endobj 88 0 obj << /Type /Catalog /Pages 81 0 R /Outlines 82 0 R /Names 87 0 R /PageMode/UseOutlines /OpenAction 17 0 R >> endobj 89 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.19)/Keywords() /CreationDate (D:20201021160210-04'00') /ModDate (D:20201021160210-04'00') /Trapped /False /PTEX.Fullbanner (This is MiKTeX-pdfTeX 2.9.6668 (1.40.19)) >> endobj xref 0 90 0000000000 65535 f 0000000015 00000 n 0000002605 00000 n 0000113871 00000 n 0000000060 00000 n 0000000097 00000 n 0000004574 00000 n 0000113764 00000 n 0000000142 00000 n 0000000230 00000 n 0000004624 00000 n 0000113692 00000 n 0000000280 00000 n 0000000378 00000 n 0000007432 00000 n 0000113619 00000 n 0000000429 00000 n 0000000512 00000 n 0000002391 00000 n 0000002659 00000 n 0000000560 00000 n 0000002499 00000 n 0000002554 00000 n 0000113150 00000 n 0000112726 00000 n 0000112586 00000 n 0000112305 00000 n 0000112866 00000 n 0000113009 00000 n 0000113291 00000 n 0000004679 00000 n 0000004411 00000 n 0000002789 00000 n 0000004519 00000 n 0000005674 00000 n 0000005511 00000 n 0000004773 00000 n 0000005619 00000 n 0000007487 00000 n 0000007269 00000 n 0000005768 00000 n 0000007377 00000 n 0000112446 00000 n 0000009364 00000 n 0000009201 00000 n 0000007617 00000 n 0000009309 00000 n 0000010561 00000 n 0000010398 00000 n 0000009458 00000 n 0000010506 00000 n 0000011679 00000 n 0000011516 00000 n 0000010655 00000 n 0000011624 00000 n 0000113400 00000 n 0000012431 00000 n 0000012268 00000 n 0000011773 00000 n 0000012376 00000 n 0000012525 00000 n 0000012585 00000 n 0000013087 00000 n 0000013473 00000 n 0000014109 00000 n 0000014714 00000 n 0000015190 00000 n 0000015706 00000 n 0000030641 00000 n 0000030970 00000 n 0000038174 00000 n 0000038401 00000 n 0000057595 00000 n 0000058022 00000 n 0000069807 00000 n 0000070088 00000 n 0000088806 00000 n 0000089335 00000 n 0000102218 00000 n 0000102495 00000 n 0000111908 00000 n 0000113481 00000 n 0000113547 00000 n 0000113941 00000 n 0000114102 00000 n 0000114277 00000 n 0000114376 00000 n 0000114466 00000 n 0000114502 00000 n 0000114625 00000 n trailer << /Size 90 /Root 88 0 R /Info 89 0 R /ID [<865CDB2DDF8DF0F14601A2BB5C7D3627> <865CDB2DDF8DF0F14601A2BB5C7D3627>] >> startxref 114899 %%EOF SQUAREM/inst/doc/SQUAREM.R0000644000176200001440000001134613744120724014362 0ustar liggesusers### R code from vignette source 'SQUAREM.Rnw' ################################################### ### code chunk number 1: load ################################################### library("SQUAREM") ################################################### ### code chunk number 2: help ################################################### help(package=SQUAREM) ################################################### ### code chunk number 3: rng ################################################### require("setRNG") setRNG(list(kind="Wichmann-Hill", normal.kind="Box-Muller", seed=123)) ################################################### ### code chunk number 4: data ################################################### poissmix.dat <- data.frame(death=0:9, freq=c(162,267,271,185,111,61,27,8,3,1)) ################################################### ### code chunk number 5: init ################################################### y <- poissmix.dat$freq tol <- 1.e-08 setRNG(list(kind="Wichmann-Hill", normal.kind="Box-Muller", seed=123)) p0 <- c(runif(1),runif(2,0,6)) ################################################### ### code chunk number 6: poissmix ################################################### poissmix.em <- function(p,y) { pnew <- rep(NA,3) i <- 0:(length(y)-1) zi <- p[1]*exp(-p[2])*p[2]^i / (p[1]*exp(-p[2])*p[2]^i + (1 - p[1])*exp(-p[3])*p[3]^i) pnew[1] <- sum(y*zi)/sum(y) pnew[2] <- sum(y*i*zi)/sum(y*zi) pnew[3] <- sum(y*i*(1-zi))/sum(y*(1-zi)) p <- pnew return(pnew) } ################################################### ### code chunk number 7: loglik ################################################### poissmix.loglik <- function(p,y) { i <- 0:(length(y)-1) loglik <- y*log(p[1]*exp(-p[2])*p[2]^i/exp(lgamma(i+1)) + (1 - p[1])*exp(-p[3])*p[3]^i/exp(lgamma(i+1))) return ( -sum(loglik) ) } ################################################### ### code chunk number 8: em ################################################### pf1 <- fpiter(p=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list(tol=tol)) pf1 ################################################### ### code chunk number 9: squarem ################################################### pf2 <- squarem(p=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list(tol=tol)) pf2 ################################################### ### code chunk number 10: squarem2 ################################################### pf3 <- squarem(p=p0, y=y, fixptfn=poissmix.em, control=list(tol=tol)) pf3 ################################################### ### code chunk number 11: power ################################################### power.method <- function(x, A) { # Defines one iteration of the power method # x = starting guess for dominant eigenvector # A = a square matrix ax <- as.numeric(A %*% x) f <- ax / sqrt(as.numeric(crossprod(ax))) f } ################################################### ### code chunk number 12: bodewig ################################################### b <- c(2, 1, 3, 4, 1, -3, 1, 5, 3, 1, 6, -2, 4, 5, -2, -1) bodewig.mat <- matrix(b,4,4) eigen(bodewig.mat) ################################################### ### code chunk number 13: accelerate ################################################### p0 <- rnorm(4) # Standard power method iteration ans1 <- fpiter(p0, fixptfn=power.method, A=bodewig.mat) # re-scaling the eigenvector so that it has unit length ans1$par <- ans1$par / sqrt(sum(ans1$par^2)) # dominant eigenvector ans1 # dominant eigenvalue c(t(ans1$par) %*% bodewig.mat %*% ans1$par) / c(crossprod(ans1$par)) ################################################### ### code chunk number 14: sq.bodewig ################################################### ans2 <- squarem(p0, fixptfn=power.method, A=bodewig.mat) ans2 ans2$par <- ans2$par / sqrt(sum(ans2$par^2)) c(t(ans2$par) %*% bodewig.mat %*% ans2$par) / c(crossprod(ans2$par)) ################################################### ### code chunk number 15: sq2.bodewig ################################################### ans3 <- squarem(p0, fixptfn=power.method, A=bodewig.mat, control=list(step.min0 = 0.5)) ans3 ans3$par <- ans3$par / sqrt(sum(ans3$par^2)) # eigenvalue c(t(ans3$par) %*% bodewig.mat %*% ans3$par) / c(crossprod(ans3$par)) ################################################### ### code chunk number 16: sq3.bodewig ################################################### # Third-order SQUAREM ans4 <- squarem(p0, fixptfn=power.method, A=bodewig.mat, control=list(K=3, method="rre")) ans4 ans4$par <- ans4$par / sqrt(sum(ans4$par^2)) # eigenvalue c(t(ans4$par) %*% bodewig.mat %*% ans4$par) / c(crossprod(ans4$par)) SQUAREM/inst/doc/SQUAREM.Rnw0000644000176200001440000001721613744057566014746 0ustar liggesusers\documentclass[12pt]{article} \usepackage[margin=1in]{geometry} \usepackage{amsmath, amssymb, amsfonts} %\usepackage{natbib} \usepackage{graphicx} \usepackage{color} %% red, green, and blue (for screen display) and cyan, magenta, and yellow \definecolor{Navy}{rgb}{0,0,0.8} \usepackage{hyperref} \hypersetup{colorlinks=true, urlcolor={Navy}, linkcolor={Navy}, citecolor={Navy}} \parskip 7.2pt \newcommand{\compresslist}{% %\setlength{\itemsep}{1pt}% \setlength{\itemsep}{0pt}% \setlength{\parskip}{0pt}% \setlength{\parsep}{0pt}% } \newcommand{\pb}{\mathbb{P}} \newcommand{\E}{\mathbb{E}} \newcommand{\V}{\mathbb{V}} \newcommand{\C}{\mathbb{C}} \newcommand{\bea}{\begin{align*}} \newcommand{\eea}{\end{align*}} \newcommand{\beq}{\begin{equation}} \newcommand{\eeq}{\end{equation}} \newcommand{\be}{\begin{enumerate}} \newcommand{\ee}{\end{enumerate}} \newcommand{\bi}{\begin{itemize}} \newcommand{\ei}{\end{itemize}} \renewcommand{\baselinestretch}{1} \title{\texttt{SQUAREM}: Accelerating the Convergence of EM, MM and Other Fixed-Point Algorithms} \author{Ravi Varadhan} \date{} \begin{document} %\VignetteIndexEntry{SQUAREM Tutorial} %\VignetteDepends{setRNG} %\VignetteKeywords{EM algorithm, fixed-point iteration, acceleration, extrapolation} %\VignettePackage{SQUAREM} \SweaveOpts{eval=TRUE,echo=TRUE,results=verbatim,fig=FALSE,keep.source=TRUE, concordance=FALSE} \maketitle \section{Overview of SQUAREM} ''SQUAREM'' is a package intended for accelerating slowly-convergent contraction mappings. It can be used for accelerating the convergence of slow, linearly convergent contraction mappings such as the EM (expectation-maximization) algorithm, MM (majorize and minimize) algorithm, and other nonlinear fixed-point iterations such as the power method for finding the dominant eigenvector. It uses a novel approach callled squared extrapolation method (SQUAREM) that was proposed in Varadhan and Roland (Scandinavian Journal of Statistics, 35: 335-353), and also in Roland, Vardhan, and Frangakis (Numerical Algorithms, 44: 159-172). The functions in this package are made available with: <>= library("SQUAREM") @ You can look at the basic information on the package, including all the available functions with <>= help(package=SQUAREM) @ The package \emph{setRNG} is not necessary, but if you want to exactly reproduce the examples in this guide then do this: <>= require("setRNG") setRNG(list(kind="Wichmann-Hill", normal.kind="Box-Muller", seed=123)) @ after which the example need to be run in the order here (or at least the parts that generate random numbers). For some examples the RNG is reset again so they can be reproduced more easily. \section{How to accelerate convergence of a fixed-point iteration with SQUAREM?} \subsection{Accelerating EM algorithm: Binary Poisson Mixture Maximum-Likelihood Estimation} Now, we show an example demonstrating the ability of SQUAREM to dramatically speed-up the convergence of the EM algorithm for a binary Poisson mixture estimation. We use the example from Hasselblad (J of Amer Stat Assoc 1969) <>= poissmix.dat <- data.frame(death=0:9, freq=c(162,267,271,185,111,61,27,8,3,1)) @ Generate a random initial guess for 3 parameters <>= y <- poissmix.dat$freq tol <- 1.e-08 setRNG(list(kind="Wichmann-Hill", normal.kind="Box-Muller", seed=123)) p0 <- c(runif(1),runif(2,0,6)) @ The fixed point mapping giving a single E and M step of the EM algorithm <>= poissmix.em <- function(p,y) { pnew <- rep(NA,3) i <- 0:(length(y)-1) zi <- p[1]*exp(-p[2])*p[2]^i / (p[1]*exp(-p[2])*p[2]^i + (1 - p[1])*exp(-p[3])*p[3]^i) pnew[1] <- sum(y*zi)/sum(y) pnew[2] <- sum(y*i*zi)/sum(y*zi) pnew[3] <- sum(y*i*(1-zi))/sum(y*(1-zi)) p <- pnew return(pnew) } @ Objective function whose local minimum is a fixed point. Here it is the negative log-likelihood of binary poisson mixture. <>= poissmix.loglik <- function(p,y) { i <- 0:(length(y)-1) loglik <- y*log(p[1]*exp(-p[2])*p[2]^i/exp(lgamma(i+1)) + (1 - p[1])*exp(-p[3])*p[3]^i/exp(lgamma(i+1))) return ( -sum(loglik) ) } @ EM algorithm <>= pf1 <- fpiter(p=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list(tol=tol)) pf1 @ Note the slow convergence of EM, as it uses more than 2900 iterations to converge. Now, let us speed up the convergence with SQUAREM: <>= pf2 <- squarem(p=p0, y=y, fixptfn=poissmix.em, objfn=poissmix.loglik, control=list(tol=tol)) pf2 @ Note the dramatically faster convergence, i.e. SQUAREM uses only 72 fixed-point evaluations to achieve convergence. This is a speed up of a factor of 40. We can also run SQUAREM without specifying an objective function, i.e. the negative log-likelihood. \emph{This is usually the most efficient way to use SQUAREM.} <>= pf3 <- squarem(p=p0, y=y, fixptfn=poissmix.em, control=list(tol=tol)) pf3 @ \subsection{Accelerating the Power Method for Finding the Dominant Eigenpair} The power method is a nonlinear fixed-point iteration for determining the dominant eigenpair, i.e. the largest eigenvalue (in terms of absolute magnitude) and the corresponding eigenvector, of a square matrix $A.$ The iteration can be programmed in R as: <>= power.method <- function(x, A) { # Defines one iteration of the power method # x = starting guess for dominant eigenvector # A = a square matrix ax <- as.numeric(A %*% x) f <- ax / sqrt(as.numeric(crossprod(ax))) f } @ We illustrate this for finding the dominant eigenvector of the Bodewig matrix which is a famous matrix for which power method has trouble converging. See, for example, Sidi, Ford, and Smith (SIAM Review, 1988). Here there are two eigenvalues that are equally dominant, but have opposite signs! Sometimes the power method finds the eigenvector corresponding to the large positive eigenvalue, but other times it finds the eigenvector corresponding to the large negative eigenvalue <>= b <- c(2, 1, 3, 4, 1, -3, 1, 5, 3, 1, 6, -2, 4, 5, -2, -1) bodewig.mat <- matrix(b,4,4) eigen(bodewig.mat) @ Now, let us look at power method and its acceleration using various SQUAREM schemes: <>= p0 <- rnorm(4) # Standard power method iteration ans1 <- fpiter(p0, fixptfn=power.method, A=bodewig.mat) # re-scaling the eigenvector so that it has unit length ans1$par <- ans1$par / sqrt(sum(ans1$par^2)) # dominant eigenvector ans1 # dominant eigenvalue c(t(ans1$par) %*% bodewig.mat %*% ans1$par) / c(crossprod(ans1$par)) @ Now, we try first-order SQUAREM with default settings: <>= ans2 <- squarem(p0, fixptfn=power.method, A=bodewig.mat) ans2 ans2$par <- ans2$par / sqrt(sum(ans2$par^2)) c(t(ans2$par) %*% bodewig.mat %*% ans2$par) / c(crossprod(ans2$par)) @ The convergence is still slow, but it converges to the dominant eigenvector. Now, we try with a minimum steplength that is smaller than 1. <>= ans3 <- squarem(p0, fixptfn=power.method, A=bodewig.mat, control=list(step.min0 = 0.5)) ans3 ans3$par <- ans3$par / sqrt(sum(ans3$par^2)) # eigenvalue c(t(ans3$par) %*% bodewig.mat %*% ans3$par) / c(crossprod(ans3$par)) @ The convergence is dramatically faster now, but it converges to the second dominant eigenvector. We try again with a higher-order SQUAREM scheme. <>= # Third-order SQUAREM ans4 <- squarem(p0, fixptfn=power.method, A=bodewig.mat, control=list(K=3, method="rre")) ans4 ans4$par <- ans4$par / sqrt(sum(ans4$par^2)) # eigenvalue c(t(ans4$par) %*% bodewig.mat %*% ans4$par) / c(crossprod(ans4$par)) @ Once again we obtain the second dominant eigenvector. \end{document} SQUAREM/inst/CITATION0000644000176200001440000000130513623764644013517 0ustar liggesusersbibentry(bibtype = "Article", title = "{SQUAREM}: An {R} Package for Off-the-Shelf Acceleration of {EM}, {MM} and Other {EM}-Like Monotone Algorithms", author = c(person(given = "Yu", family = "Du", email = "ydu10@jhu.edu"), person(given = "Ravi", family = "Varadhan", email = "rvaradhan@jhmi.edu")), journal = "Journal of Statistical Software", year = "2020", volume = "92", number = "7", pages = "1--41", doi = "10.18637/jss.v092.i07", header = "To cite SQUAREM in publications use:" )